@hivegpt/hiveai-angular 0.0.558 → 0.0.559
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/hivegpt-hiveai-angular.umd.js +2 -2
- package/bundles/hivegpt-hiveai-angular.umd.js.map +1 -1
- package/bundles/hivegpt-hiveai-angular.umd.min.js +1 -1
- package/bundles/hivegpt-hiveai-angular.umd.min.js.map +1 -1
- package/esm2015/lib/components/chat-drawer/chat-drawer.component.js +3 -3
- package/fesm2015/hivegpt-hiveai-angular.js +2 -2
- package/fesm2015/hivegpt-hiveai-angular.js.map +1 -1
- package/hivegpt-hiveai-angular.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -3582,9 +3582,9 @@ ChatDrawerComponent.WINDOWS_TZ_ABBR_MAP = {
|
|
|
3582
3582
|
ChatDrawerComponent.decorators = [
|
|
3583
3583
|
{ type: Component, args: [{
|
|
3584
3584
|
selector: 'hivegpt-chat-drawer-package',
|
|
3585
|
-
template: "<!-- <button\n *ngIf=\"isShowEditorButton && !checkForCop29BotId()\"\n (click)=\"openOuterEditor()\"\n class=\"fixed-btn\"\n>\n <span style=\"font-size: 12px\" class=\"material-icons notranslate\">\n create\n </span>\n Editor\n</button> -->\n\n<button\n *ngIf=\"!isShowEditorButton\"\n (click)=\"onCloseEditor()\"\n class=\"fixed-btn-close\"\n>\n <span style=\"font-size: 12px\" class=\"material-icons notranslate\">\n close\n </span>\n {{ getTranslation(\"Close\") }}\n</button>\n\n<mat-drawer-container\n class=\"hivegpt-chat-bot-wrapper\"\n [ngClass]=\"{ 'mat-drawer-container-has-open': isDrawerOpen }\"\n [class.ios-device]=\"isIOSDevice\"\n [hasBackdrop]=\"hasBackdropValue\"\n>\n <mat-drawer\n class=\"drawer\"\n #drawer\n [position]=\"'start'\"\n [mode]=\"'over'\"\n opened=\"true\"\n [class.full-width-drawer]=\"fullView\"\n [style.background]=\"\n 'linear-gradient(' + (bgGradient ? bgGradient.join(', ') : '') + ')'\n \"\n >\n <mat-drawer-content>\n <div class=\"chat-main\">\n <!-- <div class=\"chat-header\">\n <h2> -->\n <!-- {{eventName}} -->\n <!-- </h2> -->\n <!-- <button class=\"closeIcon\" (click)=\"onClose()\">\n <span class=\"material-symbols-outlined\">\n close\n </span>\n </button> -->\n <!-- </div> -->\n\n <div class=\"innerChat\" #chatMain>\n <div (click)=\"startNewConversation()\" class=\"new-conversationbutton2\">\n {{ getTranslation(\"New Chat\") }}\n <span\n ><svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14.061\"\n height=\"14.261\"\n viewBox=\"0 0 14.061 14.261\"\n >\n <path\n id=\"Path_164\"\n data-name=\"Path 164\"\n d=\"M10.146,5.075H4.531A1.544,1.544,0,0,0,3,6.631v7.262A1.544,1.544,0,0,0,4.531,15.45h7.146a1.544,1.544,0,0,0,1.531-1.556V8.187m-7.146,4.15L15.25,3m0,0H11.677M15.25,3V6.631\"\n transform=\"translate(-2.25 -1.939)\"\n fill=\"none\"\n stroke=\"#06f\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.5\"\n />\n </svg>\n </span>\n </div>\n <div class=\"bot-sticky-header-chat\">\n <div class=\"title_chat\">\n <h2>\n <p>\n {{ getTranslation(botName) }}\n <!-- <svg\n *ngIf=\"!checkForCop29BotId()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"31.499\"\n height=\"31.501\"\n viewBox=\"0 0 31.499 31.501\"\n >\n <path\n id=\"Icon_ion-shield-checkmark\"\n data-name=\"Icon ion-shield-checkmark\"\n d=\"M33.685,7.83a1.125,1.125,0,0,0-.925-1.036,49.227,49.227,0,0,1-14.3-4.444,1.125,1.125,0,0,0-.927,0A49.226,49.226,0,0,1,3.24,6.794,1.125,1.125,0,0,0,2.315,7.83a27.621,27.621,0,0,0,1.718,11.9A24.572,24.572,0,0,0,9.07,27.641a25.712,25.712,0,0,0,8.513,6.028,1.125,1.125,0,0,0,.844,0,25.712,25.712,0,0,0,8.513-6.028,24.572,24.572,0,0,0,5.027-7.911,27.621,27.621,0,0,0,1.718-11.9Zm-9.211,5.281-7.791,9a1.125,1.125,0,0,1-.8.389h-.046a1.125,1.125,0,0,1-.788-.322L11.587,18.79a1.125,1.125,0,1,1,1.575-1.607l2.6,2.552,7.01-8.1a1.125,1.125,0,0,1,1.7,1.472Z\"\n transform=\"translate(-2.25 -2.25)\"\n fill=\"#06f\"\n />\n </svg> -->\n </p>\n <span *ngIf=\"!checkForCop29BotId()\">\n <p class=\"small-title\">\n {{ getTranslation(\"AI-powered\")\n }}<span>{{ getTranslation(\"copilot\") }}</span>\n </p>\n </span>\n <!-- Inline close button inside chat header (works consistently on mobile & desktop) -->\n <button\n type=\"button\"\n class=\"chat-header-close-btn\"\n (click)=\"closeBot.emit()\"\n [attr.aria-label]=\"getTranslation('Close') || 'Close'\"\n [title]=\"getTranslation('Close') || 'Close'\"\n >\n <span class=\"material-icons notranslate\">close</span>\n </button>\n </h2>\n </div>\n <div class=\"chatType\" style=\"display: none\">\n <h4 class=\"labelChat\">Choose a conversation style</h4>\n <ul>\n <li (click)=\"changeTemperature(0)\">\n <button [ngClass]=\"{ active: temperature === 0 }\">\n <span class=\"top-section-title\"> More Creative </span>\n </button>\n </li>\n <li (click)=\"changeTemperature(1)\" class=\"fdssfd\">\n <button [ngClass]=\"{ active: temperature === 1 }\">\n <span class=\"top-section-title\"> More Balanced </span>\n </button>\n </li>\n <li (click)=\"changeTemperature(2)\">\n <button [ngClass]=\"{ active: temperature === 2 }\">\n <span class=\"top-section-title\"> More Precise </span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n <!-- chattype -->\n <div\n id=\"botAllChat\"\n class=\"chat\"\n [ngClass]=\"{\n botUser: chat?.type === 'user',\n botAi: chat?.type !== 'user',\n }\"\n *ngFor=\"let chat of chatLog; let i = index\"\n >\n <div class=\"chat-box\" *ngIf=\"!(i === 0 && botSkills)\">\n <div class=\"message\">\n <div\n class=\"time-cta\"\n [ngClass]=\"{\n 'time-cta din': showFeedBackIconsIndex === i,\n 'time-cta': showFeedBackIconsIndex != i,\n }\"\n >\n <div\n class=\"Icon_TimeSTamp\"\n *ngIf=\"chat?.type === 'ai' && !(i === 0 && botSkills)\"\n >\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"displayAvatarUrl || botIcon\"\n [src]=\"displayAvatarUrl || botIcon\"\n alt=\"Assistant\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!(displayAvatarUrl || botIcon)\"\n class=\"chat-avatar-initials chat-avatar-initials-assistant\"\n >A</span\n >\n </div>\n <div\n class=\"dateTime\"\n [style.color]=\"dateTimeColor ? '' : ''\"\n >\n <span style=\"color: #000 !important;\">{{ getTranslation(\"Assistant\") }}</span>\n {{ chat?.time }}\n </div>\n </div>\n\n <div\n class=\"Icon_TimeSTamp\"\n *ngIf=\"\n chat?.type === 'session_cards' ||\n chat?.type === 'attendee_cards'\n \"\n >\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"displayAvatarUrl || botIcon\"\n [src]=\"displayAvatarUrl || botIcon\"\n alt=\"Assistant\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!(displayAvatarUrl || botIcon)\"\n class=\"chat-avatar-initials chat-avatar-initials-assistant\"\n >A</span\n >\n </div>\n <div\n class=\"dateTime\"\n [style.color]=\"dateTimeColor ? '' : ''\"\n >\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ chat?.time }}\n </div>\n </div>\n\n <div class=\"Icon_TimeSTamp\" *ngIf=\"chat?.type === 'user'\">\n <div class=\"user-Box\">\n <div class=\"dateTime\">\n <span>{{ getTranslation(\"You\") }}</span>\n {{ chat?.time }}\n </div>\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"userAvatarUrl\"\n [src]=\"userAvatarUrl\"\n alt=\"You\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!userAvatarUrl\"\n class=\"chat-avatar-initials chat-avatar-initials-user\"\n >{{ getUserIdInitials() }}</span\n >\n </div>\n </div>\n <div class=\"bards\">\n <div\n class=\"bars\"\n *ngIf=\"\n chat?.WorkflowExecutionId ||\n chat?.showWorkflowExecutionLoader\n \"\n >\n <button\n class=\"icon-button\"\n (click)=\"\n showWorkflowHistoryDetails(chat.WorkflowExecutionId)\n \"\n >\n <i class=\"fas fa-bars\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"researchingCard\"\n *ngIf=\"\n (chat?.searchTerms && chat?.searchTerms.length > 0) ||\n (chat?.sourcesList && chat?.sourcesList?.length > 0)\n \"\n >\n <div\n class=\"card-header d-flex align-items-center\"\n (click)=\"toggleCollapse()\"\n >\n <span class=\"icon\"\n ><i class=\"bx bx-plus-circle bx-sm\"></i\n ></span>\n <span class=\"ml-2\"\n >Researching\n <i\n id=\"toggleIcon\"\n class=\"toggle-icon ml-2 fa\"\n [ngClass]=\"{\n 'fa-chevron-down': isCollapsed,\n 'fa-chevron-up': !isCollapsed,\n }\"\n ></i\n ></span>\n </div>\n <div\n *ngIf=\"chat?.searchTerms && chat?.searchTerms.length > 0\"\n [ngClass]=\"{ collapse: isCollapsed }\"\n >\n <ul class=\"list-group list-group-flush uptList\">\n <li\n *ngFor=\"let term of chat?.searchTerms\"\n class=\"list-group-item\"\n >\n Searching for\n <strong>{{ term }}</strong>\n </li>\n </ul>\n\n <h5\n class=\"mt-2\"\n *ngIf=\"chat?.sourcesList && chat?.sourcesList.length > 0\"\n >\n <i class=\"bx bx-unite\"></i> Sources\n </h5>\n <div\n class=\"sources-container\"\n *ngIf=\"chat?.sourcesList && chat?.sourcesList.length > 0\"\n >\n <div\n class=\"source-card\"\n *ngFor=\"\n let source of chat?.displayedSources;\n let i = index\n \"\n >\n <div>\n <div class=\"source-title\">{{ source.title }}</div>\n <div class=\"source-url\">\n <img\n class=\"relative block\"\n [src]=\"getFaviconUrl(source.link)\"\n [alt]=\"getDomainName(source.link) + ' favicon'\"\n />\n {{ getDomainName(source.link) }}\n </div>\n <div class=\"popup\">\n <div\n class=\"source-url\"\n (click)=\"openLinkInNewTab(source.link)\"\n >\n <img\n class=\"relative block\"\n [src]=\"getFaviconUrl(source.link)\"\n [alt]=\"getDomainName(source.link) + ' favicon'\"\n />\n {{ getDomainName(source.link) }}\n </div>\n <h5 (click)=\"openLinkInNewTab(source.link)\">\n {{ source.title }}\n </h5>\n <p (click)=\"openLinkInNewTab(source.link)\">\n {{ source.desc }}\n </p>\n </div>\n </div>\n </div>\n <ng-container\n *ngIf=\"\n chat?.remainingSources &&\n chat?.remainingSources.length > 0\n \"\n >\n <div\n class=\"source-card\"\n (click)=\"onCardClick(chat?.sourcesList)\"\n >\n <div>\n <div class=\"source-title\">\n <img\n *ngFor=\"\n let source of chat?.remainingSources;\n let i = index\n \"\n class=\"relative block\"\n [src]=\"getFaviconUrl(source.link)\"\n [alt]=\"getDomainName(source.link) + ' favicon'\"\n />\n </div>\n <div class=\"source-url\">\n View {{ chat?.remainingSources.length }} more\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Session cards (from get_event_sessions tool, same as React Native) -->\n <div\n class=\"session-cards-section\"\n *ngIf=\"\n chat?.type === 'session_cards' &&\n chat?.sessionCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"session-cards-container\">\n <div\n *ngFor=\"\n let session of getVisibleSessionCards(chat);\n let idx = index\n \"\n class=\"session-card-item\"\n [class.session-card-item-ondemand]=\"isSessionOndemand(session)\"\n >\n <!-- OnDemand design: pill, Available Anytime, title, description -->\n <ng-container *ngIf=\"isSessionOndemand(session)\">\n <span class=\"session-card-ondemand-badge\">{{ getTranslation('ON DEMAND') || 'ON DEMAND' }}</span>\n <div class=\"session-card-ondemand-available\">{{ getTranslation('Available Anytime') || 'Available Anytime' }}</div>\n <div class=\"session-card-title session-card-ondemand-title\">{{ session.title }}</div>\n <div\n class=\"session-card-description session-card-ondemand-desc\"\n *ngIf=\"session.description\"\n >\n {{ session.description }}\n </div>\n <div\n class=\"session-card-actions-row\"\n *ngIf=\"session.session && getSessionRoleButtons(session).length > 0\"\n >\n <div class=\"speakers-UIcard\"></div>\n <div class=\"session-card-actions\">\n <button\n *ngFor=\"let role of getSessionRoleButtons(session)\"\n type=\"button\"\n class=\"btn session-card-btn\"\n [class.session-card-btn-primary]=\"role.action === 'join'\"\n [class.session-card-btn-secondary]=\"role.action === 'watch'\"\n [class.session-card-btn-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [attr.aria-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [disabled]=\"!canPerformSessionAction(session)\"\n (click)=\"onSessionCardAction(session, role)\"\n >\n {{ role.label }}\n </button>\n </div>\n </div>\n </ng-container>\n <!-- Default (Live/Breakout) design: date badge, room/time, title, meta, description, actions -->\n <ng-container *ngIf=\"!isSessionOndemand(session)\">\n <div class=\"session-card-header\">\n <div class=\"session-card-date-badge\">\n <ng-container *ngIf=\"session.dateDay || session.dateMonth\">\n <span class=\"session-card-date-day\">{{\n session.dateDay\n }}</span>\n <span class=\"session-card-date-month\">{{\n session.dateMonth\n }}</span>\n </ng-container>\n <span\n *ngIf=\"!session.dateDay && !session.dateMonth\"\n class=\"session-card-date-na\"\n >{{ getTranslation('N/A') || 'N/A' }}</span>\n </div>\n <div class=\"session-card-room-time\">\n <div\n class=\"session-card-room\"\n *ngIf=\"session.room\"\n >\n {{ session.room }}\n </div>\n <div\n class=\"session-card-time\"\n *ngIf=\"session.timeRangeWithTz || session.timeRange\"\n >\n {{ session.timeRangeWithTz || session.timeRange }}\n </div>\n </div>\n </div>\n <div class=\"session-card-title\">{{ session.title }}</div>\n <div\n class=\"session-card-meta\"\n *ngIf=\"(session.organizer && session.organizer.length) || (session.meetingType && session.meetingType.length)\"\n >\n <div class=\"session-card-meta-row\" *ngIf=\"session.organizer && session.organizer.length\">\n <span class=\"session-card-meta-label\">{{\n (getTranslation(\"Organizer\") || \"Organizer\") + \":\"\n }}</span>\n <span class=\"session-card-meta-value\">{{ session.organizer }}</span>\n </div>\n <!-- <div class=\"session-card-meta-row\" *ngIf=\"session.timeZoneDisplay\">\n <span class=\"session-card-meta-label\">{{\n getTranslation(\"Time zone\") || \"Time zone\"\n }}</span>\n <span class=\"session-card-meta-value\">{{ session.timeZoneDisplay }}</span>\n </div> -->\n <div class=\"session-card-meta-row\" *ngIf=\"session.meetingType && session.meetingType.length\">\n <span class=\"session-card-meta-label\">{{\n getSessionTypeLabel() + \":\"\n }}</span>\n <span class=\"session-card-meta-value\">{{ session.meetingType }}</span>\n </div>\n </div>\n <div\n class=\"session-card-description\"\n *ngIf=\"session.description\"\n >\n {{ session.description }}\n </div>\n <div\n class=\"session-card-status\"\n *ngIf=\"\n (session.statusText && session.statusText.length) &&\n getSessionRoleButtons(session).length > 0\n \"\n >\n <span class=\"session-card-status-bullet\"></span>\n {{ session.statusText }}\n </div>\n <!-- <div\n class=\"session-card-when-disable\"\n *ngIf=\"\n session.session?.sessionRoles?.length > 0 &&\n !isSessionOndemand(session) &&\n !session.session?.isExpire &&\n !canPerformSessionAction(session)\n \"\n >\n {{ getTranslation(\"You can join/watch at the starting time\") || \"You can join/watch at the starting time\" }}\n </div> -->\n \n <div\n class=\"session-card-actions-row\"\n *ngIf=\"\n session.session &&\n (getSessionRoleButtons(session).length > 0 || hasSessionCardSpeakers(session))\n \"\n >\n <div class=\"speakers-UIcard\">\n <ng-container\n *ngIf=\"\n (session?.speakersList || session?.session?.speakersList || []).length\n as _speakerCount\n \"\n >\n <ng-container\n *ngFor=\"\n let sp of (session?.speakersList || session?.session?.speakersList || []);\n let i = index\n \"\n >\n <ng-container *ngIf=\"i < 3\">\n <div class=\"speaker\" *ngIf=\"getSpeakerPhotoUrl(sp); else speakerInitials\">\n <img\n [src]=\"getSpeakerPhotoUrl(sp)!\"\n [alt]=\"getSpeakerDisplayName(sp) || 'Speaker'\"\n />\n </div>\n <ng-template #speakerInitials>\n <div class=\"speaker initials\">\n {{ getSpeakerInitials(sp) }}\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n <div class=\"speaker initials\" *ngIf=\"_speakerCount > 3\">\n +{{ _speakerCount - 3 }}\n </div>\n </ng-container>\n </div>\n <div class=\"session-card-actions\">\n <button\n *ngFor=\"let role of getSessionRoleButtons(session)\"\n type=\"button\"\n class=\"btn session-card-btn\"\n [class.session-card-btn-primary]=\"\n role.action === 'join'\n \"\n [class.session-card-btn-secondary]=\"\n role.action === 'watch'\n \"\n [class.session-card-btn-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [attr.aria-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [disabled]=\"!canPerformSessionAction(session)\"\n (click)=\"onSessionCardAction(session, role)\"\n >\n {{ role.label }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.sessionCards?.length || 0) -\n SESSION_CARDS_INITIAL >\n 4 &&\n !expandedSessionCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandSessionCards(chat)\"\n >\n Show\n {{\n (chat?.sessionCards?.length || 0) - SESSION_CARDS_INITIAL\n }}\n more\n {{\n (chat?.sessionCards?.length || 0) -\n SESSION_CARDS_INITIAL ===\n 1\n ? getTranslation(\"session\") || \"session\"\n : getTranslation(\"sessions\") || \"sessions\"\n }}\n </button>\n </div>\n\n <!-- Attendee cards (from get_event_attendees tool, same as React Native) -->\n <div\n class=\"attendee-cards-section\"\n *ngIf=\"\n chat?.type === 'attendee_cards' &&\n chat?.attendeeCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"attendee-cards-container\">\n <div\n *ngFor=\"\n let attendee of getVisibleAttendeeCards(chat);\n let idx = index\n \"\n class=\"attendee-card-item\"\n >\n <div\n class=\"attendee-card\"\n [class.attendee-card-has-video]=\"!!getAttendeeVideoUrl(attendee)\"\n [style.background-image]=\"\n !getAttendeeVideoUrl(attendee) && attendee.photo\n ? 'url(' + attendee.photo + ')'\n : null\n \"\n >\n <ng-container *ngIf=\"getAttendeeVideoUrl(attendee)\">\n <video\n #attendeeVideo\n class=\"attendee-card-video\"\n [attr.poster]=\"getAttendeeVideoPoster(attendee) || null\"\n [muted]=\"isAttendeeVideoMuted(chat, attendee)\"\n playsinline\n preload=\"metadata\"\n (play)=\"onAttendeeVideoPlayState(chat, attendee, true)\"\n (pause)=\"onAttendeeVideoPlayState(chat, attendee, false)\"\n (ended)=\"onAttendeeVideoPlayState(chat, attendee, false)\"\n (click)=\"toggleAttendeeVideoPlay(chat, attendee, attendeeVideo, $event)\"\n >\n <source\n [attr.src]=\"getAttendeeVideoUrl(attendee)\"\n type=\"video/webm\"\n />\n </video>\n\n <button\n type=\"button\"\n class=\"attendee-card-mute-btn\"\n (click)=\"toggleAttendeeVideoMute(chat, attendee, attendeeVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoMuted(chat, attendee)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoMuted(chat, attendee)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoMuted(chat, attendee)\n ? \"volume_off\"\n : \"volume_up\"\n }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"attendee-card-play-btn\"\n (click)=\"toggleAttendeeVideoPlay(chat, attendee, attendeeVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoPlaying(chat, attendee)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoPlaying(chat, attendee)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoPlaying(chat, attendee)\n ? \"pause\"\n : \"play_arrow\"\n }}\n </span>\n </button>\n </ng-container>\n\n <div\n class=\"attendee-card-initials\"\n *ngIf=\"!getAttendeeVideoUrl(attendee) && !attendee.photo\"\n >\n {{ getAttendeeInitials(attendee.name) }}\n </div>\n <div class=\"attendee-overlay\"></div>\n <div class=\"attendee-content\">\n <div class=\"attendee-name\">{{ attendee.name }}</div>\n <div\n class=\"attendee-company\"\n *ngIf=\"attendee.company\"\n >\n {{ attendee.company }}\n </div>\n <div\n class=\"attendee-desc\"\n [class.attendee-desc-collapsed]=\"!isAttendeeDescriptionExpanded(chat, attendee)\"\n [class.attendee-desc-expanded]=\"isAttendeeDescriptionExpanded(chat, attendee)\"\n *ngIf=\"getAttendeeDescription(attendee)\"\n >\n {{ getAttendeeDescription(attendee) }}\n </div>\n \n <div class=\"attendee-buttons\">\n <ng-container\n *ngIf=\"\n attendee.id !== userId &&\n isConnectionsEnabled &&\n checkPendingSentRequest(attendee.id)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-request-sent\"\n disabled\n [attr.title]=\"\n getTranslation('Request Sent') || 'Request Sent'\n \"\n >\n {{\n getTranslation(\"Request Sent\") || \"Request Sent\"\n }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n attendee.id !== userId &&\n isConnectionsEnabled &&\n canFollowUser(attendee)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-connect\"\n [attr.title]=\"\n getTranslation('Connect') || 'Connect'\n \"\n (click)=\"\n attendee.id &&\n connectWithUser.emit({\n userId: attendee.id,\n connect: true,\n })\n \"\n >\n {{ getTranslation(\"Connect\") || \"Connect\" }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n attendee.id !== userId &&\n isConnectionsEnabled &&\n canUnfollowUser(attendee)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-disconnect\"\n [attr.title]=\"\n getTranslation('Disconnect') || 'Disconnect'\n \"\n (click)=\"\n attendee.id &&\n connectWithUser.emit({\n userId: attendee.id,\n disconnect: true,\n })\n \"\n >\n {{\n getTranslation(\"Disconnect\") || \"Disconnect\"\n }}\n </button>\n </ng-container>\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-view-profile\"\n [disabled]=\"!attendee.id\"\n [attr.title]=\"\n !attendee.id\n ? getTranslation('Profile not available') ||\n 'Profile not available'\n : (getTranslation('View Profile') || 'View Profile')\n \"\n (click)=\"\n attendee.id &&\n connectWithUser.emit({\n userId: attendee.id,\n viewProfile: true,\n })\n \"\n >\n {{ getTranslation(\"View Profile\") || \"View Profile\" }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.attendeeCards?.length || 0) -\n ATTENDEE_CARDS_INITIAL >\n 4 &&\n !expandedAttendeeCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandAttendeeCards(chat)\"\n >\n Show\n {{\n (chat?.attendeeCards?.length || 0) -\n ATTENDEE_CARDS_INITIAL\n }}\n more\n {{\n (chat?.attendeeCards?.length || 0) -\n ATTENDEE_CARDS_INITIAL ===\n 1\n ? getTranslation(\"attendee\") || \"attendee\"\n : getTranslation(\"attendees\") || \"attendees\"\n }}\n </button>\n </div>\n\n <!-- Speaker cards (from get_event_speakers tool, same layout/behavior as attendee cards) -->\n <div\n class=\"speaker-cards-section\"\n *ngIf=\"\n chat?.type === 'speaker_cards' &&\n chat?.speakerCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"attendee-cards-container\">\n <div\n *ngFor=\"\n let speaker of getVisibleSpeakerCards(chat);\n let idx = index\n \"\n class=\"attendee-card-item\"\n >\n <div\n class=\"attendee-card\"\n [class.attendee-card-has-video]=\"!!getAttendeeVideoUrl(speaker)\"\n [style.background-image]=\"\n !getAttendeeVideoUrl(speaker) && speaker.photo\n ? 'url(' + speaker.photo + ')'\n : null\n \"\n >\n <ng-container *ngIf=\"getAttendeeVideoUrl(speaker)\">\n <video\n #speakerVideo\n class=\"attendee-card-video\"\n [attr.poster]=\"getAttendeeVideoPoster(speaker) || null\"\n [muted]=\"isAttendeeVideoMuted(chat, speaker)\"\n playsinline\n preload=\"metadata\"\n (play)=\"onAttendeeVideoPlayState(chat, speaker, true)\"\n (pause)=\"onAttendeeVideoPlayState(chat, speaker, false)\"\n (ended)=\"onAttendeeVideoPlayState(chat, speaker, false)\"\n (click)=\"toggleAttendeeVideoPlay(chat, speaker, speakerVideo, $event)\"\n >\n <source\n [attr.src]=\"getAttendeeVideoUrl(speaker)\"\n type=\"video/webm\"\n />\n </video>\n\n <button\n type=\"button\"\n class=\"attendee-card-mute-btn\"\n (click)=\"toggleAttendeeVideoMute(chat, speaker, speakerVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoMuted(chat, speaker)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoMuted(chat, speaker)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoMuted(chat, speaker)\n ? \"volume_off\"\n : \"volume_up\"\n }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"attendee-card-play-btn\"\n (click)=\"toggleAttendeeVideoPlay(chat, speaker, speakerVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoPlaying(chat, speaker)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoPlaying(chat, speaker)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoPlaying(chat, speaker)\n ? \"pause\"\n : \"play_arrow\"\n }}\n </span>\n </button>\n </ng-container>\n\n <div\n class=\"attendee-card-initials\"\n *ngIf=\"!getAttendeeVideoUrl(speaker) && !speaker.photo\"\n >\n {{ getAttendeeInitials(speaker.name) }}\n </div>\n <div class=\"attendee-overlay\"></div>\n <div class=\"attendee-content\">\n <div class=\"attendee-name\">{{ speaker.name }}</div>\n <div\n class=\"attendee-company\"\n *ngIf=\"speaker.jobTitle\"\n >\n {{ speaker.jobTitle }}\n </div>\n <div\n class=\"attendee-company\"\n *ngIf=\"speaker.company\"\n >\n {{ speaker.company }}\n </div>\n <div\n class=\"attendee-desc\"\n [class.attendee-desc-collapsed]=\"!isAttendeeDescriptionExpanded(chat, speaker)\"\n [class.attendee-desc-expanded]=\"isAttendeeDescriptionExpanded(chat, speaker)\"\n *ngIf=\"getAttendeeDescription(speaker)\"\n >\n {{ getAttendeeDescription(speaker) }}\n </div>\n \n\n <div class=\"attendee-buttons\">\n \n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-view-profile\"\n [disabled]=\"!speaker.id\"\n [attr.title]=\"\n !speaker.id\n ? getTranslation('Profile not available') ||\n 'Profile not available'\n : (getTranslation('View Profile') || 'View Profile')\n \"\n (click)=\"\n chat?.type === 'speaker_cards'\n ? viewSpeakerProfile.emit({\n speaker,\n speakers: chat.speakerCards || []\n })\n : speaker.id &&\n connectWithUser.emit({\n userId: speaker.id,\n viewProfile: true\n })\n \"\n >\n {{\n getTranslation('View Profile') || 'View Profile'\n }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.speakerCards?.length || 0) -\n SPEAKER_CARDS_INITIAL >\n 4 &&\n !expandedSpeakerCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandSpeakerCards(chat)\"\n >\n Show\n {{\n (chat?.speakerCards?.length || 0) -\n SPEAKER_CARDS_INITIAL\n }}\n more\n {{\n (chat?.speakerCards?.length || 0) -\n SPEAKER_CARDS_INITIAL ===\n 1\n ? getTranslation('speaker') || 'speaker'\n : getTranslation('speakers') || 'speakers'\n }}\n </button>\n </div>\n\n <!-- Sponsor cards (from get_event_sponsors tool, booth-rep style) -->\n <div\n class=\"sponsor-cards-section\"\n *ngIf=\"\n chat?.type === 'sponsor_cards' &&\n chat?.sponsorCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"booth-rep-card-grid\">\n <div\n *ngFor=\"\n let sponsor of getVisibleSponsorCards(chat);\n let idx = index\n \"\n class=\"booth-rep-card\"\n >\n <div class=\"booth-rep-card-logo\">\n <span\n class=\"booth-rep-card-logo-placeholder\"\n *ngIf=\"!sponsor.logoUrl\"\n >\n {{ sponsor.boothTitle ? sponsor.boothTitle.charAt(0) : (sponsor.name ? sponsor.name.charAt(0) : '') }}\n </span>\n <img\n *ngIf=\"sponsor.logoUrl\"\n [src]=\"sponsor.logoUrl\"\n [alt]=\"sponsor.boothTitle || sponsor.name\"\n />\n </div>\n <h3 class=\"booth-rep-card-title\">\n {{ sponsor.boothTitle || sponsor.name }}\n </h3>\n <p\n class=\"booth-rep-card-desc\"\n *ngIf=\"sponsor.description\"\n >\n {{ sponsor.description }}\n </p>\n <button\n type=\"button\"\n class=\"booth-rep-card-btn\"\n (click)=\"viewBooth.emit({ boothId: sponsor.boothID, boothUrl: sponsor.url, sponsor })\"\n >\n {{ getTranslation('View Sponsor') || 'View Sponsor' }}\n </button>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.sponsorCards?.length || 0) -\n SPONSOR_CARDS_INITIAL >\n 4 &&\n !expandedSponsorCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandSponsorCards(chat)\"\n >\n Show\n {{\n (chat?.sponsorCards?.length || 0) -\n SPONSOR_CARDS_INITIAL\n }}\n more\n {{\n (chat?.sponsorCards?.length || 0) -\n SPONSOR_CARDS_INITIAL ===\n 1\n ? getTranslation('sponsor') || 'sponsor'\n : getTranslation('sponsors') || 'sponsors'\n }}\n </button>\n </div>\n\n <!-- Booth representative cards (from get_booth_representatives tool, same design as attendee cards) -->\n <div\n class=\"attendee-cards-section booth-rep-cards-section\"\n *ngIf=\"\n chat?.type === 'booth_rep_cards' &&\n chat?.boothRepCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"attendee-cards-container\">\n <div\n *ngFor=\"\n let rep of getVisibleBoothRepCards(chat);\n let idx = index\n \"\n class=\"attendee-card-item\"\n >\n <div\n class=\"attendee-card\"\n [style.background-image]=\"rep.photo ? 'url(' + rep.photo + ')' : null\"\n >\n <div\n class=\"attendee-card-initials\"\n *ngIf=\"!rep.photo\"\n >\n {{ getAttendeeInitials(rep.name) }}\n </div>\n <div class=\"attendee-overlay\"></div>\n <div class=\"attendee-content\">\n <div class=\"attendee-name\">{{ rep.name }}</div>\n <div\n class=\"attendee-company\"\n *ngIf=\"rep.company\"\n >\n {{ rep.company }}\n </div>\n <div\n class=\"attendee-company\"\n *ngIf=\"rep.jobTitle\"\n >\n {{ rep.jobTitle }}\n </div>\n <div\n class=\"attendee-desc\"\n [class.attendee-desc-collapsed]=\"!isAttendeeDescriptionExpanded(chat, rep)\"\n [class.attendee-desc-expanded]=\"isAttendeeDescriptionExpanded(chat, rep)\"\n *ngIf=\"getAttendeeDescription(rep)\"\n >\n {{ getAttendeeDescription(rep) }}\n </div>\n <div class=\"attendee-buttons\">\n <ng-container\n *ngIf=\"\n rep.id !== userId &&\n isConnectionsEnabled &&\n checkPendingSentRequest(rep.id)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-request-sent\"\n disabled\n [attr.title]=\"\n getTranslation('Request Sent') || 'Request Sent'\n \"\n >\n {{\n getTranslation(\"Request Sent\") || \"Request Sent\"\n }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n rep.id !== userId &&\n isConnectionsEnabled &&\n canFollowUser(rep)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-connect\"\n [attr.title]=\"\n getTranslation('Connect') || 'Connect'\n \"\n (click)=\"\n rep.id &&\n connectWithUser.emit({\n userId: rep.id,\n connect: true,\n })\n \"\n >\n {{ getTranslation(\"Connect\") || \"Connect\" }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n rep.id !== userId &&\n isConnectionsEnabled &&\n canUnfollowUser(rep)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-disconnect\"\n [attr.title]=\"\n getTranslation('Disconnect') || 'Disconnect'\n \"\n (click)=\"\n rep.id &&\n connectWithUser.emit({\n userId: rep.id,\n disconnect: true,\n })\n \"\n >\n {{\n getTranslation(\"Disconnect\") || \"Disconnect\"\n }}\n </button>\n </ng-container>\n <button\n *ngIf=\"rep.id\"\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-view-profile\"\n [attr.title]=\"getTranslation('View Profile') || 'View Profile'\"\n (click)=\"\n connectWithUser.emit({\n userId: rep.id,\n viewProfile: true,\n })\n \"\n >\n {{ getTranslation('View Profile') || 'View Profile' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.boothRepCards?.length || 0) -\n BOOTH_REP_CARDS_INITIAL >\n 4 &&\n !expandedBoothRepCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandBoothRepCards(chat)\"\n >\n Show\n {{\n (chat?.boothRepCards?.length || 0) -\n BOOTH_REP_CARDS_INITIAL\n }}\n more\n {{\n (chat?.boothRepCards?.length || 0) -\n BOOTH_REP_CARDS_INITIAL ===\n 1\n ? getTranslation('representative') || 'representative'\n : getTranslation('representatives') || 'representatives'\n }}\n </button>\n </div>\n\n <div\n class=\"chat-bubble-wrap\"\n *ngIf=\"\n (chat?.type === 'ai' || chat?.type === 'user') &&\n !(i === 0 && botSkills)\n \"\n [ngStyle]=\"{\n background:\n chat?.type === 'ai'\n ? bgBubbleAi || '#fff'\n : chat?.type === 'user'\n ? bgBubbleUser || '#183988'\n : 'transparent',\n color:\n chat?.type === 'ai'\n ? '#000 !important'\n : '#fff !important',\n }\"\n >\n <div id=\"messageText_{{ i }}\" class=\"chat-bubble-content\">\n <div\n *ngIf=\"chat?.type === 'ai' || chat?.type === 'user'\"\n [ngClass]=\"{\n 'SearchTitle ai': chat?.type === 'ai',\n 'SearchTitle user': chat?.type === 'user',\n }\"\n [ngStyle]=\"{\n background: 'transparent',\n color:\n chat?.type === 'ai' && messageTextColorAi\n ? messageTextColorAi\n : chat?.type === 'user'\n ? messageTextColorUser || '#fff'\n : 'defaultColor',\n }\"\n [innerHTML]=\"chat?.message\"\n ></div>\n </div>\n </div>\n\n <div\n class=\"progress-container\"\n *ngIf=\"chat?.showWorkflowExecutionLoader\"\n >\n <div class=\"circular-loader\">\n <div\n class=\"loader-spinner\"\n *ngIf=\"currentWorkflowActionProgress < 100\"\n [ngStyle]=\"{\n transform: 'rotate(' + percentage * 3.6 + 'deg)',\n }\"\n ></div>\n <div\n class=\"checkmark\"\n *ngIf=\"currentWorkflowActionProgress == 100\"\n >\n <svg viewBox=\"0 0 52 52\">\n <circle\n class=\"checkmark-circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkmark-check\"\n fill=\"none\"\n d=\"M14 27l7 7 16-16\"\n />\n </svg>\n </div>\n\n <div\n class=\"loader-text\"\n *ngIf=\"currentWorkflowActionProgress < 100\"\n >\n {{ currentWorkflowActionProgress }}%\n </div>\n </div>\n <div class=\"loader-label\">{{ currentWorkflowAction }}...</div>\n </div>\n\n <div\n class=\"exicution mt-2\"\n *ngIf=\"\n chat?.type === 'ai' &&\n chat?.graphs &&\n chat?.graphs.length > 0\n \"\n >\n <h5 *ngIf=\"chat?.type === 'ai'\">\n <i class=\"bx bx-network-chart\"></i> Graphs\n <i\n (click)=\"toggleCollapseFGraph()\"\n class=\"toggle-icon ml-2 fa\"\n [ngClass]=\"{\n 'fas fa-chevron-down': isCollapsedForFGraph,\n 'fas fa-chevron-up': !isCollapsedForFGraph,\n }\"\n ></i>\n </h5>\n <img\n *ngFor=\"let image of chat?.graphs\"\n class=\"graph-img\"\n [ngClass]=\"{ collapse: isCollapsedForFGraph }\"\n [src]=\"image\"\n alt=\"\"\n />\n </div>\n <ng-container *ngIf=\"!checkForCop29BotId()\">\n <div\n class=\"exicution mt-2\"\n *ngIf=\"\n chat?.type === 'ai' &&\n chat?.executionGraphs &&\n chat?.executionGraphs?.length > 0\n \"\n >\n <h5 *ngIf=\"chat?.type === 'ai'\">\n <i class=\"bx bx-network-chart\"></i> Execution Path Diagram\n For Data Visualization Workflow\n <i\n (click)=\"toggleCollapseGraph()\"\n class=\"toggle-icon ml-2 fa\"\n [ngClass]=\"{\n 'fas fa-chevron-down': isCollapsedForGraph,\n 'fas fa-chevron-up': !isCollapsedForGraph,\n }\"\n ></i>\n </h5>\n <img\n *ngFor=\"let image of chat?.executionGraphs\"\n class=\"graph-img\"\n [ngClass]=\"{ collapse: isCollapsedForGraph }\"\n [src]=\"image\"\n alt=\"\"\n />\n </div>\n </ng-container>\n <div class=\"cta\" *ngIf=\"chat?.type === 'ai' && i > 0 && i === lastAiMessageIndex\">\n <div\n class=\"copyBox\"\n title=\"Copy\"\n [ngClass]=\"\n showFeedBackIconsIndex == i ? 'show-always' : 'show-hover'\n \"\n >\n <button\n title=\"{{ chat?.copied ? 'Copied!' : 'Copy' }}\"\n class=\"copy\"\n [class.active]=\"chat?.copied\"\n (click)=\"handleCopyClick(i)\"\n >\n <i *ngIf=\"chat?.copied\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 16.17L4.83 12L3.41 13.41L9 19L21 7L19.59 5.59L9 16.17Z\"\n fill=\"#566563\"\n />\n </svg>\n </i>\n\n <i *ngIf=\"!chat?.copied\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M19.24 2H8.84C8.14 2 7.58 2.56 7.58 3.26V16.84C7.58 17.54 8.14 18.1 8.84 18.1H19.24C19.94 18.1 20.5 17.54 20.5 16.84V3.26C20.5 2.56 19.94 2 19.24 2ZM19.24 16.84H8.84V3.26H19.24V16.84ZM4.74 6.52C4.04 6.52 3.48 7.08 3.48 7.78V20.36C3.48 21.06 4.04 21.62 4.74 21.62H15.14C15.84 21.62 16.4 21.06 16.4 20.36V18.88H14.96V20.36H4.74V7.78H6.18V6.52H4.74Z\"\n fill=\"#566563\"\n />\n </svg>\n </i>\n </button>\n\n <button\n *ngIf=\"!checkForCop29BotId()\"\n class=\"up copy\"\n title=\"{{ chat?.isEditor ? 'Added!' : 'Add to editor' }}\"\n (click)=\"handleEditorClick(i)\"\n >\n <svg\n *ngIf=\"!chat?.isEditor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20.152\"\n height=\"20.152\"\n viewBox=\"0 0 20.152 20.152\"\n >\n <g\n id=\"Icon_feather-edit\"\n data-name=\"Icon feather-edit\"\n transform=\"translate(-2.5 -2.166)\"\n >\n <path\n id=\"Path_166\"\n data-name=\"Path 166\"\n d=\"M11.5,6H4.889A1.889,1.889,0,0,0,3,7.889v13.22A1.889,1.889,0,0,0,4.889,23h13.22A1.889,1.889,0,0,0,20,21.108V14.5\"\n transform=\"translate(0 -1.179)\"\n fill=\"none\"\n stroke=\"#393939\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1\"\n />\n <path\n id=\"Path_167\"\n data-name=\"Path 167\"\n d=\"M21.915,3.4a2,2,0,0,1,2.833,2.833l-8.971,8.971L12,16.152l.944-3.777Z\"\n transform=\"translate(-3.334 0)\"\n fill=\"none\"\n stroke=\"#393939\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1\"\n />\n </g>\n </svg>\n\n <i *ngIf=\"chat?.isEditor\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 16.17L4.83 12L3.41 13.41L9 19L21 7L19.59 5.59L9 16.17Z\"\n fill=\"#566563\"\n />\n </svg>\n </i>\n </button>\n\n <button\n class=\"up copy\"\n title=\"Like\"\n [class.active]=\"chat?.liked\"\n (click)=\"handleUpClick(i)\"\n >\n <i *ngIf=\"chat?.liked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.38989 18.4902V8.33022C8.38989 7.93022 8.50989 7.54022 8.72989 7.21022L11.4599 3.15022C11.8899 2.50022 12.9599 2.04022 13.8699 2.38022C14.8499 2.71022 15.4999 3.81022 15.2899 4.79022L14.7699 8.06022C14.7299 8.36022 14.8099 8.63022 14.9799 8.84022C15.1499 9.03022 15.3999 9.15022 15.6699 9.15022H19.7799C20.5699 9.15022 21.2499 9.47022 21.6499 10.0302C22.0299 10.5702 22.0999 11.2702 21.8499 11.9802L19.3899 19.4702C19.0799 20.7102 17.7299 21.7202 16.3899 21.7202H12.4899C11.8199 21.7202 10.8799 21.4902 10.4499 21.0602L9.16989 20.0702C8.67989 19.7002 8.38989 19.1102 8.38989 18.4902Z\"\n fill=\"#17235B\"\n />\n <path\n d=\"M5.21 6.37988H4.18C2.63 6.37988 2 6.97988 2 8.45988V18.5199C2 19.9999 2.63 20.5999 4.18 20.5999H5.21C6.76 20.5999 7.39 19.9999 7.39 18.5199V8.45988C7.39 6.97988 6.76 6.37988 5.21 6.37988Z\"\n fill=\"#17235B\"\n />\n </svg>\n </i>\n <i *ngIf=\"!chat?.liked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.4037 20.9264L10.381 20.9038L10.3557 20.8843L7.72165 18.85L8.02965 18.4516L10.7161 20.5315C10.9228 20.7195 11.2181 20.8517 11.4962 20.9377C11.7978 21.0309 12.1451 21.09 12.4801 21.09H16.2801C16.8572 21.09 17.4266 20.8625 17.8751 20.5306C18.3159 20.2044 18.6912 19.7385 18.8305 19.1997L21.2428 11.8732C21.4379 11.3309 21.4287 10.749 21.0965 10.2887C20.7583 9.81377 20.1844 9.58999 19.5801 9.58999H15.5801C15.2031 9.58999 14.8615 9.43143 14.6276 9.16215L14.627 9.16142C14.3873 8.88649 14.2756 8.51549 14.3345 8.11501L14.8322 4.9195C14.9978 4.1052 14.4664 3.24596 13.7053 2.98804C13.3277 2.85165 12.9297 2.89129 12.61 2.99839C12.2949 3.10396 11.9772 3.30172 11.7881 3.57673L11.7881 3.57671L11.7851 3.58107L7.96352 9.26689L7.55454 8.99314L11.3751 3.30891L11.3755 3.30836C11.8763 2.56103 13.0109 2.19028 13.8726 2.51744L13.8834 2.52151L13.8943 2.52509C14.9044 2.8564 15.556 3.98765 15.3317 5.01314L15.3284 5.02805L15.326 5.04314L14.836 8.19314L14.836 8.19313L14.8351 8.19928C14.8184 8.31642 14.7981 8.60268 15.0138 8.84924L15.0248 8.86177L15.0366 8.87354C15.1833 9.02026 15.3817 9.09999 15.5901 9.09999H19.5901C20.4308 9.09999 21.1176 9.44886 21.5113 10.0079L21.5124 10.0095C21.8964 10.5502 21.9908 11.2849 21.7202 12.0291L21.7175 12.0365L21.7151 12.044L19.3251 19.324L19.3198 19.34L19.3156 19.3564C19.0058 20.5707 17.6766 21.6 16.2801 21.6H12.4801C12.2411 21.6 11.8403 21.5625 11.4297 21.4512C11.0123 21.338 10.6406 21.1633 10.4037 20.9264Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n <path\n d=\"M5.37988 20.4999H4.37988C3.52442 20.4999 2.98559 20.2982 2.65822 19.9825C2.33437 19.6702 2.12988 19.1614 2.12988 18.3499V8.5499C2.12988 7.73843 2.33437 7.22962 2.65822 6.91731C2.98559 6.6016 3.52442 6.3999 4.37988 6.3999H5.37988C6.23534 6.3999 6.77418 6.6016 7.10155 6.91731C7.4254 7.22962 7.62988 7.73843 7.62988 8.5499V18.3499C7.62988 19.1614 7.4254 19.6702 7.10155 19.9825C6.77418 20.2982 6.23534 20.4999 5.37988 20.4999ZM4.37988 6.8999C4.0934 6.8999 3.83578 6.9164 3.61382 6.96689C3.38745 7.01838 3.16822 7.11196 2.99258 7.2876C2.81559 7.46459 2.72807 7.67966 2.68301 7.89002C2.63948 8.09318 2.62988 8.31967 2.62988 8.5499V18.3499C2.62988 18.5801 2.63948 18.8066 2.68301 19.0098C2.72807 19.2201 2.81559 19.4352 2.99258 19.6122C3.16822 19.7878 3.38745 19.8814 3.61382 19.9329C3.83578 19.9834 4.0934 19.9999 4.37988 19.9999H5.37988C5.66637 19.9999 5.92398 19.9834 6.14595 19.9329C6.37232 19.8814 6.59155 19.7878 6.76719 19.6122C6.94418 19.4352 7.0317 19.2201 7.07676 19.0098C7.12028 18.8066 7.12988 18.5801 7.12988 18.3499V8.5499C7.12988 8.31967 7.12028 8.09318 7.07676 7.89002C7.0317 7.67966 6.94418 7.46459 6.76719 7.2876C6.59155 7.11196 6.37232 7.01838 6.14595 6.96689C5.92398 6.9164 5.66637 6.8999 5.37988 6.8999H4.37988Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n </svg>\n </i>\n </button>\n <button\n class=\"down copy\"\n title=\"Dislike\"\n [class.active]=\"chat?.unliked\"\n (click)=\"handleDownClick(i)\"\n >\n <i *ngIf=\"chat?.unliked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M15.61 5.50002V15.66C15.61 16.06 15.49 16.45 15.27 16.78L12.54 20.84C12.11 21.49 11.04 21.95 10.13 21.61C9.15002 21.28 8.50002 20.18 8.71002 19.2L9.23002 15.93C9.27002 15.63 9.19002 15.36 9.02002 15.15C8.85002 14.96 8.60002 14.84 8.33002 14.84H4.22002C3.43002 14.84 2.75002 14.52 2.35002 13.96C1.97002 13.42 1.90002 12.72 2.15002 12.01L4.61002 4.52002C4.92002 3.28002 6.27002 2.27002 7.61002 2.27002H11.51C12.18 2.27002 13.12 2.50002 13.55 2.93002L14.83 3.92002C15.32 4.30002 15.61 4.88002 15.61 5.50002Z\"\n fill=\"#17235B\"\n />\n\n <path\n d=\"M18.7901 17.6099H19.8201C21.3701 17.6099 22.0001 17.0099 22.0001 15.5299V5.4799C22.0001 3.9999 21.3701 3.3999 19.8201 3.3999H18.7901C17.2401 3.3999 16.6101 3.9999 16.6101 5.4799V15.5399C16.6101 17.0099 17.2401 17.6099 18.7901 17.6099Z\"\n fill=\"#17235B\"\n />\n </svg>\n </i>\n\n <i *ngIf=\"!chat?.unliked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.1237 21.481L10.1148 21.4778L10.1059 21.4748C9.09577 21.1435 8.44416 20.0122 8.66849 18.9867L8.67175 18.9718L8.6741 18.9568L9.1641 15.8068L9.16413 15.8068L9.16501 15.8006C9.18175 15.6835 9.20207 15.3972 8.98633 15.1507L8.97536 15.1381L8.96359 15.1263C8.81687 14.9796 8.61841 14.8999 8.41004 14.8999H4.41004C3.56937 14.8999 2.88252 14.551 2.48884 13.992L2.4877 13.9904C2.10371 13.4497 2.00931 12.715 2.27994 11.9708L2.28263 11.9634L2.28509 11.9559L4.67509 4.67586L4.68035 4.65985L4.68451 4.64353C4.99418 3.42996 6.33271 2.3999 7.72004 2.3999H11.52C11.7591 2.3999 12.1599 2.43736 12.5704 2.54872C12.9878 2.66194 13.3596 2.83655 13.5965 3.07346L13.6191 3.09608L13.6444 3.11563L16.2785 5.14986L15.9705 5.54825L13.2875 3.47111C13.0799 3.2763 12.7837 3.1413 12.5061 3.05412C12.2031 2.95897 11.8551 2.8999 11.52 2.8999H7.72004C7.1429 2.8999 6.57353 3.12735 6.12508 3.45926C5.68428 3.78551 5.30892 4.25142 5.16963 4.79019L2.75738 12.1167C2.56223 12.659 2.57147 13.2409 2.90366 13.7012C3.24183 14.1761 3.81578 14.3999 4.42004 14.3999H8.42004C8.79702 14.3999 9.13867 14.5585 9.37252 14.8277L9.37315 14.8285C9.61286 15.1034 9.72457 15.4745 9.66568 15.875C9.6656 15.8755 9.66552 15.8761 9.66544 15.8766L9.16795 19.0704C9.00242 19.8841 9.53299 20.7428 10.2933 21.0013C10.6685 21.1391 11.0675 21.0978 11.3857 20.9917C11.7001 20.8869 12.0218 20.6898 12.2121 20.4132L12.2121 20.4132L12.215 20.4088L16.0351 14.7253L16.4472 15.0045L12.6251 20.691L12.6249 20.6912C12.259 21.2361 11.5347 21.5999 10.8 21.5999C10.5668 21.5999 10.3358 21.5596 10.1237 21.481Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n <path\n d=\"M19.6201 17.6H18.6201C17.7647 17.6 17.2258 17.3983 16.8985 17.0826C16.5746 16.7703 16.3701 16.2615 16.3701 15.45V5.65C16.3701 4.83853 16.5746 4.32972 16.8985 4.0174C17.2258 3.7017 17.7647 3.5 18.6201 3.5H19.6201C20.4756 3.5 21.0144 3.7017 21.3418 4.0174C21.6656 4.32972 21.8701 4.83853 21.8701 5.65V15.45C21.8701 16.2615 21.6656 16.7703 21.3418 17.0826C21.0144 17.3983 20.4756 17.6 19.6201 17.6ZM18.6201 4C18.3336 4 18.076 4.01649 17.8541 4.06699C17.6277 4.11848 17.4085 4.21206 17.2328 4.3877C17.0558 4.56469 16.9683 4.77976 16.9232 4.99011C16.8797 5.19328 16.8701 5.41977 16.8701 5.65V15.45C16.8701 15.6802 16.8797 15.9067 16.9232 16.1099C16.9683 16.3202 17.0558 16.5353 17.2328 16.7123C17.4085 16.8879 17.6277 16.9815 17.8541 17.033C18.076 17.0835 18.3336 17.1 18.6201 17.1H19.6201C19.9066 17.1 20.1642 17.0835 20.3862 17.033C20.6126 16.9815 20.8318 16.8879 21.0074 16.7123C21.1844 16.5353 21.2719 16.3202 21.317 16.1099C21.3605 15.9067 21.3701 15.6802 21.3701 15.45V5.65C21.3701 5.41977 21.3605 5.19328 21.317 4.99011C21.2719 4.77976 21.1844 4.56469 21.0074 4.3877C20.8318 4.21206 20.6126 4.11848 20.3862 4.06699C20.1642 4.01649 19.9066 4 19.6201 4H18.6201Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n </svg>\n </i>\n </button>\n </div>\n </div>\n <div\n class=\"Related mt-2\"\n *ngIf=\"\n showFeedBackIconsIndex === i &&\n !isChatingWithAi &&\n chat?.relatedListItems &&\n chat?.relatedListItems.length > 0\n \"\n >\n <h5 *ngIf=\"chat?.type === 'ai'\">\n <i class=\"bx bx-list-check\"></i> Related\n </h5>\n <div class=\"card-container\" *ngIf=\"chat?.type === 'ai'\">\n <ul class=\"list-container\">\n <ng-container *ngFor=\"let item of chat?.relatedListItems\">\n <li (click)=\"fetchDataFor(item, chat)\">{{ item }}</li>\n </ng-container>\n </ul>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"cta-faqs quick-prompts-extended\"\n *ngIf=\"i == 0 && quickPrompts?.length\"\n >\n <!-- <div *ngFor=\"let tile of quickPrompts\" class=\"cta\"\n (click)=\"sendMessageWithTile(tile.prompt)\">\n Q: {{ tile.text }}\n </div> -->\n <div class=\"cta_suggestions\">\n <button\n *ngFor=\"let tile of quickPrompts\"\n (click)=\"sendMessageWithTile(tile.prompt)\"\n >\n <ng-container *ngIf=\"tile\">{{ tile.text }}</ng-container>\n </button>\n </div>\n </div>\n <div class=\"chat bot\" *ngIf=\"i == 0 && botSkills\">\n <div class=\"chat-box\">\n <div class=\"message\">\n <div class=\"time-cta\">\n <div class=\"Icon_TimeSTamp\">\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"displayAvatarUrl || botIcon\"\n [src]=\"displayAvatarUrl || botIcon\"\n alt=\"Assistant\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!(displayAvatarUrl || botIcon)\"\n class=\"chat-avatar-initials chat-avatar-initials-assistant\"\n >A</span\n >\n </div>\n <div\n class=\"dateTime\"\n [style.color]=\"dateTimeColor ? '' : ''\"\n >\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ chat?.time }}\n </div>\n </div>\n </div>\n <div\n class=\"chat-bubble-wrap\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <div class=\"chat-bubble-content\">\n <div\n class=\"SearchTitle ai\"\n [innerHTML]=\"processMessageForDisplay(botSkills)\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"chat?.suggestions?.length\">\n <h4 class=\"labelChat\">\n Here are some things EventsGPT Copilot can help you do:\n </h4>\n <div class=\"cta_suggestions\">\n <button\n *ngFor=\"let suggestion of chat?.suggestions\"\n (click)=\"sendMessageWithTile(suggestion)\"\n >\n <ng-container *ngIf=\"suggestion\">{{\n suggestion\n }}</ng-container>\n </button>\n </div>\n </div>\n <div\n *ngIf=\"\n chat?.action?.section_id == 'company_search' ||\n chat?.action?.section_id == 'user_search' ||\n chat?.action?.section_id == 'industry_company_search'\n \"\n >\n <div class=\"box\">\n <div class=\"tiktokwrapper\">\n <div\n class=\"tiktokshell\"\n *ngFor=\"let user of chat?.action.users\"\n >\n <div class=\"videoPhotobox\">\n <ng-conatiner\n *ngIf=\"user?.photoPath && !user.userVideosModel\"\n >\n <img [src]=\"user?.photoPath\" />\n </ng-conatiner>\n <ng-conatiner *ngIf=\"user.userVideosModel\">\n <app-video-player\n *ngIf=\"user?.userVideosModel\"\n [isDev]=\"isDev\"\n [currentUserId]=\"userId\"\n [videoObj]=\"user?.userVideosModel\"\n [user]=\"user\"\n [eventId]=\"eventId\"\n type=\"1\"\n >\n </app-video-player>\n </ng-conatiner>\n </div>\n\n <div\n class=\"noPhoto\"\n *ngIf=\"!user?.photoPath && !user.userVideosModel\"\n >\n <h3>\n {{ user.firstName | slice: 0 : 1\n }}{{ user.lastName | slice: 0 : 1 }}\n </h3>\n </div>\n <div class=\"overlymask\" *ngIf=\"!user.userVideosModel\"></div>\n <div class=\"onshell-content\">\n <div class=\"title-shell\">\n <h3>{{ user.firstName }} {{ user.lastName }}</h3>\n <h3 class=\"companyName\">{{ user.company }}</h3>\n </div>\n <div class=\"button-shell\">\n <button\n class=\"Connectbtn\"\n (click)=\"connectToUser(user.userId)\"\n >\n {{\n canConnect(user.userId)\n ? \"Connect\"\n : canDisconnect(user.userId)\n ? \"Disconnect\"\n : \"Request\n Sent\"\n }}\n </button>\n <button\n class=\"schedulebtn\"\n (click)=\"scheduleMeetingWithUser(user)\"\n >\n Schedule\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"chat?.action?.section_id == myUpcomingSessionAction\">\n <div class=\"agenda-items-wrapper\" class=\"agenda-items-wrapper\">\n <div class=\"list-view\">\n <div\n class=\"session-detail-wrapper card-background-session\"\n *ngFor=\"let upcomingSession of chat?.action.content\"\n >\n <div class=\"thumbnail\">\n <img\n alt=\"Introduction to the Imaging Radar Academy\"\n src=\"https://s27media.azureedge.net/8008/profile_pic/453cea2c-feba-11ed-8c0b-00155d025b0a.png\"\n class=\"\"\n />\n <!---->\n <!---->\n <!----><button\n class=\"play-btn color-primary\"\n title=\"Watch: Introduction to the Imaging Radar Academy\"\n >\n <span class=\"material-icons notranslate\">\n play_circle_outline\n </span>\n <!---->\n </button>\n <!---->\n <!---->\n </div>\n <!---->\n <!---->\n <div class=\"content p-3\">\n <div\n class=\"d-flex justify-content-between align-items-center\"\n >\n <div class=\"d-flex flex-column\">\n <p class=\"fs-xs mb-0 body-text-color\">\n {{\n upcomingSession.dateTimeRange.start\n | date\n : \"MM-dd-yyyy\n HH:mm\"\n : \"UTC\"\n }}\n -\n {{\n upcomingSession.dateTimeRange.end\n | date: \"MM-dd-yyyy HH:mm\" : \"UTC\"\n }}\n {{ upcomingSession.timeZone.id }}\n </p>\n <!---->\n <!---->\n <!-- <p class=\"fs-xs mb-2 color-secondary\" title=\"Session Type: Generative AI\">Generative AI </p> -->\n <!---->\n </div>\n <div class=\"d-flex align-items-center actions px-2\">\n <!---->\n <button\n (click)=\"\n performSessionAction(\n upcomingSession.id,\n 'view-session'\n )\n \"\n class=\"s27-btn-icon body-text-color\"\n title=\"View Session Information: Introduction to the Imaging Radar Academy\"\n >\n <span class=\"material-icons notranslate\">\n remove_red_eye\n </span>\n </button>\n\n <button\n (click)=\"\n performSessionAction(\n upcomingSession.id,\n 'add-to-agenda'\n )\n \"\n class=\"s27-btn-icon body-text-color\"\n >\n <span\n class=\"material-icons notranslate\"\n title=\"Add Session: Introduction to the Imaging Radar Academy to My agendaa\"\n >\n event_available\n </span>\n </button>\n <!---->\n <!---->\n <!---->\n <!---->\n\n <button\n (click)=\"\n performSessionAction(upcomingSession.id, 'play')\n \"\n class=\"s27-btn-icon body-text-color\"\n title=\"Copy session link to share\"\n >\n <span class=\"material-icons notranslate\">\n play_circle_outline\n </span>\n </button>\n <!---->\n </div>\n </div>\n <h2 class=\"body-text-color\">\n {{ upcomingSession.title }}\n </h2>\n <div\n class=\"session-description color-secondary\"\n [innerHTML]=\"sanitizeHtml(upcomingSession.description)\"\n ></div>\n <ul\n class=\"speakers grid-2-cols\"\n *ngFor=\"let speakerId of upcomingSession.speakers\"\n >\n <li class=\"\">\n <div class=\"image\" title=\"Blair Wunderlich\">\n <img\n alt=\"Blair Wunderlich\"\n [src]=\"speakers[speakerId]?.photoPath\"\n class=\"\"\n />\n <!---->\n <!---->\n <!---->\n </div>\n <!---->\n <div\n class=\"content pl-3\"\n style=\"text-transform: none\"\n >\n <div class=\"mb-0 body-text-color fs-xs fw-500\">\n {{ speakers[speakerId]?.firstName }}\n {{ speakers[speakerId]?.lastName }}\n </div>\n <div class=\"color-secondary fs-xxs\">\n {{ speakers[speakerId]?.jobTitle }}\n </div>\n <div class=\"color-secondary fs-xxs\">\n {{ speakers[speakerId]?.company }}\n </div>\n </div>\n <!---->\n </li>\n </ul>\n <!---->\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Initial load: loading dots when fetching chat history (no \"Thinking\") -->\n <div class=\"chat bot chat-thinking chat-loading-dots\" *ngIf=\"loading && !isChatingWithAi\">\n <div class=\"chat-box\">\n <div class=\"message\">\n <div class=\"time-cta\">\n <div class=\"Icon_TimeSTamp\">\n <div class=\"chat-avatar\">\n <img *ngIf=\"displayAvatarUrl || botIcon\" [src]=\"displayAvatarUrl || botIcon\" alt=\"Assistant\" class=\"chat-avatar-img\" />\n <span *ngIf=\"!(displayAvatarUrl || botIcon)\" class=\"chat-avatar-initials chat-avatar-initials-assistant\">A</span>\n </div>\n <div class=\"dateTime\" [style.color]=\"dateTimeColor ? '' : ''\">\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ getLoadingTime() }}\n </div>\n </div>\n </div>\n <div class=\"thinking-row\">\n <div class=\"thinking-dots\">\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n </div>\n <span class=\"thinking-text\">{{ getTranslation(\"Loading\") || \"Loading\" }}...</span>\n </div>\n </div>\n </div>\n </div>\n <!-- Thinking: only when user has sent a message and AI is responding -->\n <div class=\"chat bot chat-thinking\" *ngIf=\"isChatingWithAi && !executingWorkflow\">\n <div class=\"chat-box\">\n <div class=\"message\">\n <div class=\"time-cta\">\n <div class=\"Icon_TimeSTamp\">\n <div class=\"chat-avatar\">\n <img *ngIf=\"displayAvatarUrl || botIcon\" [src]=\"displayAvatarUrl || botIcon\" alt=\"Assistant\" class=\"chat-avatar-img\" />\n <span *ngIf=\"!(displayAvatarUrl || botIcon)\" class=\"chat-avatar-initials chat-avatar-initials-assistant\">A</span>\n </div>\n <div class=\"dateTime\" [style.color]=\"dateTimeColor ? '' : ''\">\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ getLoadingTime() }}\n </div>\n </div>\n </div>\n <div class=\"thinking-row\">\n <div class=\"thinking-dots\">\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n </div>\n <span class=\"thinking-text\">{{ getTranslation(\"Thinking\") || \"Thinking\" }}...</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- <div #chatMain></div> -->\n <div\n *ngIf=\"openWorkflowInput && selectedWorkflow && !executingWorkflow\"\n class=\"chatFooterWrapper\"\n >\n <!-- new UI for Chat Message Section by Amit -->\n <div class=\"chat-footer-upt\">\n <div class=\"topinfo-containerbox\">\n <div class=\"agents_note_wrapper\">\n <div>\n <h6>{{ selectedWorkflow?.Name }}</h6>\n {{ selectedWorkflow?.Description }}\n </div>\n </div>\n\n <div class=\"agents_note_wrapper\">\n <button\n mat-icon-button\n class=\"closeButtonSource\"\n (click)=\"toggleWorkflows(false)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"bottombox-wrapper\">\n <!-- here i need to loop through all the input fields selectedWorkflow.Trigger.InputSchema and render the input fields -->\n <!-- Form for Workflow Inputs -->\n <form\n [formGroup]=\"workflowForm\"\n (ngSubmit)=\"onWorkflowSubmit()\"\n class=\"form-container\"\n >\n <div\n *ngFor=\"let input of selectedWorkflow?.Trigger?.InputSchema\"\n class=\"form-group\"\n >\n <label>{{ input.Label }}</label>\n\n <!-- Handle Text Input or Text Area based on requirement -->\n <textarea\n *ngIf=\"input.Type === 'string'\"\n formControlName=\"{{ input.InputId }}\"\n [placeholder]=\"input.Placeholder\"\n [rows]=\"2\"\n [required]=\"input.Required\"\n class=\"form-control\"\n ></textarea>\n\n <!-- Dropdown for Select Options -->\n <select\n *ngIf=\"input.Type === 'select'\"\n formControlName=\"{{ input.InputId }}\"\n class=\"form-control\"\n >\n <option\n *ngFor=\"let option of input.Options\"\n [value]=\"option.Value\"\n >\n {{ option.Label }}\n </option>\n </select>\n </div>\n\n <!-- Submit button aligned to the right -->\n <div class=\"form-group\">\n <button type=\"submit\" class=\"btn btn-primary submit-button\">\n Submit\n </button>\n </div>\n </form>\n </div>\n </div>\n\n <!-- new UI for Chat Message Section by Amit -->\n </div>\n <div *ngIf=\"!openWorkflowInput\" class=\"chatFooterWrapper\">\n <!-- new UI for Chat Message Section by Amit -->\n <div class=\"chat-footer-upt\">\n <div class=\"topinfo-containerbox\" *ngIf=\"!checkForCop29BotId()\">\n <div class=\"agents_note_wrapper\">\n <div class=\"agents-dropdown-wrapper\">\n <div class=\"dropdown-wrapper\" (click)=\"toggleDropdown()\">\n <div class=\"dropdown-header\">\n <span>{{ getDropdownHeaderText() }}</span>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n <div class=\"dropdown-menu\" *ngIf=\"isDropdownOpen\">\n <label (click)=\"onSelectAll()\">\n <input type=\"checkbox\" [checked]=\"areAllSelected()\" />\n All\n </label>\n <label\n *ngFor=\"let agent of agents\"\n (click)=\"onAgentChange(agent)\"\n >\n <input type=\"checkbox\" [(ngModel)]=\"agent.selected\" />\n {{ agent.agentName }}\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"agents_note_wrapper\">\n <div class=\"agents-dropdown-wrapper\">\n <div class=\"dropdown-wrapper\" (click)=\"toggleWorkflows()\">\n <div class=\"dropdown-header\">\n <svg\n stroke=\"currentColor\"\n fill=\"currentColor\"\n stroke-width=\"0\"\n viewBox=\"0 0 256 256\"\n class=\"h-5 w-5\"\n height=\"1.3em\"\n width=\"1.3em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M245.66,74.34l-32-32a8,8,0,0,0-11.32,11.32L220.69,72H192a74.49,74.49,0,0,0-28.35,6.73c-13.62,6.29-30.83,19.71-35.54,48-5.32,31.94-29.1,39.22-41,40.86a40,40,0,1,0,.18,16.06A71.65,71.65,0,0,0,108.13,178C121.75,172,139,158.6,143.89,129.31,150.65,88.77,190.34,88,192,88h28.69l-18.35,18.34a8,8,0,0,0,11.32,11.32l32-32A8,8,0,0,0,245.66,74.34ZM48,200a24,24,0,1,1,24-24A24,24,0,0,1,48,200Z\"\n ></path></svg\n > Workflows\n </div>\n <div class=\"dropdown-menu\" *ngIf=\"isWorkflowOpen\">\n <label\n *ngFor=\"let orgWorkflow of orgWorkflows\"\n (click)=\"onWorkflowSelected(orgWorkflow)\"\n >\n {{ orgWorkflow.Name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"bottombox-wrapper\">\n <!-- <input [disabled]=\"isChatingWithAi\" type=\"text\" class=\"form-control-1 s27-scroll\"\n \n placeholder=\"Ask anything...\" [style.background]=\"formFieldBgColor ? formFieldBgColor : ''\"\n [style.color]=\"formFieldTextColor ? formFieldTextColor : ''\" [(ngModel)]=\"input\"\n (keyup.enter)=\"handleSubmit()\" #myInput /> -->\n <textarea\n [disabled]=\"isChatingWithAi\"\n class=\"form-control-1 s27-scroll chat-textarea\"\n placeholder=\"{{ getTranslation('Ask anything') }}\"\n [(ngModel)]=\"input\"\n (keydown)=\"handleKeydown($event)\"\n (input)=\"adjustTextareaHeight($event)\"\n #myInput\n ></textarea>\n\n \n\n <button\n class=\"btn cta-chat rotate\"\n (click)=\"handleSubmit()\"\n [style.background]=\"sendButtonColor ? sendButtonColor : ''\"\n [style.color]=\"sendButtonTextColor ? sendButtonTextColor : ''\"\n title=\"{{ getTranslation('Send Message') }}\"\n style=\"margin-right: 1px\"\n >\n <svg\n stroke=\"currentColor\"\n fill=\"currentColor\"\n stroke-width=\"0\"\n viewBox=\"0 0 512 512\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M476.59 227.05l-.16-.07L49.35 49.84A23.56 23.56 0 0027.14 52 24.65 24.65 0 0016 72.59v113.29a24 24 0 0019.52 23.57l232.93 43.07a4 4 0 010 7.86L35.53 303.45A24 24 0 0016 327v113.31A23.57 23.57 0 0026.59 460a23.94 23.94 0 0013.22 4 24.55 24.55 0 009.52-1.93L476.4 285.94l.19-.09a32 32 0 000-58.8z\"\n ></path>\n </svg>\n <!-- SEND -->\n </button>\n\n <button\n class=\"btn cta-chat mr-1 voice-btn\"\n (click)=\"openVoiceModal()\"\n type=\"button\"\n title=\"Voice Agent\"\n [style.background]=\"sendButtonColor ? sendButtonColor : ''\"\n [style.color]=\"sendButtonTextColor ? sendButtonTextColor : ''\"\n >\n <svg\n class=\"voice-btn-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <g fill=\"none\" fill-rule=\"evenodd\">\n <g fill-rule=\"nonzero\">\n <path\n d=\"M24,0 L24,24 L0,24 L0,0 L24,0 Z M12.5934901,23.257841 L12.5819402,23.2595131 L12.5108777,23.2950439 L12.4918791,23.2987469 L12.4918791,23.2987469 L12.4767152,23.2950439 L12.4056548,23.2595131 C12.3958229,23.2563662 12.3870493,23.2590235 12.3821421,23.2649074 L12.3780323,23.275831 L12.360941,23.7031097 L12.3658947,23.7234994 L12.3769048,23.7357139 L12.4804777,23.8096931 L12.4953491,23.8136134 L12.4953491,23.8136134 L12.5071152,23.8096931 L12.6106902,23.7357139 L12.6232938,23.7196733 L12.6232938,23.7196733 L12.6266527,23.7031097 L12.609561,23.275831 C12.6075724,23.2657013 12.6010112,23.2592993 12.5934901,23.257841 L12.5934901,23.257841 Z M12.8583906,23.1452862 L12.8445485,23.1473072 L12.6598443,23.2396597 L12.6498822,23.2499052 L12.6498822,23.2499052 L12.6471943,23.2611114 L12.6650943,23.6906389 L12.6699349,23.7034178 L12.6699349,23.7034178 L12.678386,23.7104931 L12.8793402,23.8032389 C12.8914285,23.8068999 12.9022333,23.8029875 12.9078286,23.7952264 L12.9118235,23.7811639 L12.8776777,23.1665331 C12.8752882,23.1545897 12.8674102,23.1470016 12.8583906,23.1452862 L12.8583906,23.1452862 Z M12.1430473,23.1473072 C12.1332178,23.1423925 12.1221763,23.1452606 12.1156365,23.1525954 L12.1099173,23.1665331 L12.0757714,23.7811639 C12.0751323,23.7926639 12.0828099,23.8018602 12.0926481,23.8045676 L12.108256,23.8032389 L12.3092106,23.7104931 L12.3186497,23.7024347 L12.3186497,23.7024347 L12.3225043,23.6906389 L12.340401,23.2611114 L12.337245,23.2485176 L12.337245,23.2485176 L12.3277531,23.2396597 L12.1430473,23.1473072 Z\"\n fill=\"none\"\n ></path>\n <path\n d=\"M12,3 C12.51285,3 12.9355092,3.38604429 12.9932725,3.88337975 L13,4 L13,20 C13,20.5523 12.5523,21 12,21 C11.48715,21 11.0644908,20.613973 11.0067275,20.1166239 L11,20 L11,4 C11,3.44772 11.4477,3 12,3 Z M8,6 C8.55228,6 9,6.44772 9,7 L9,17 C9,17.5523 8.55228,18 8,18 C7.44772,18 7,17.5523 7,17 L7,7 C7,6.44772 7.44772,6 8,6 Z M16,6 C16.5523,6 17,6.44772 17,7 L17,17 C17,17.5523 16.5523,18 16,18 C15.4477,18 15,17.5523 15,17 L15,7 C15,6.44772 15.4477,6 16,6 Z M4,9 C4.55228,9 5,9.44772 5,10 L5,14 C5,14.5523 4.55228,15 4,15 C3.44772,15 3,14.5523 3,14 L3,10 C3,9.44772 3.44772,9 4,9 Z M20,9 C20.51285,9 20.9355092,9.38604429 20.9932725,9.88337975 L21,10 L21,14 C21,14.5523 20.5523,15 20,15 C19.48715,15 19.0644908,14.613973 19.0067275,14.1166239 L19,14 L19,10 C19,9.44772 19.4477,9 20,9 Z\"\n fill=\"#09244B\"\n ></path>\n </g>\n </g>\n </svg>\n <span class=\"voice-btn-text\">Voice</span>\n </button>\n </div>\n </div>\n\n <!-- new UI for Chat Message Section by Amit -->\n </div>\n\n <div class=\"NoteTxt\">\n <div class=\"note\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12.882\"\n height=\"12.883\"\n viewBox=\"0 0 12.882 12.883\"\n >\n <path\n id=\"Icon_ion-shield-checkmark\"\n data-name=\"Icon ion-shield-checkmark\"\n d=\"M15.106,4.532a.46.46,0,0,0-.378-.424A20.132,20.132,0,0,1,8.881,2.291a.46.46,0,0,0-.379,0A20.132,20.132,0,0,1,2.655,4.108a.46.46,0,0,0-.378.424A11.3,11.3,0,0,0,2.98,9.4a10.049,10.049,0,0,0,2.06,3.235A10.516,10.516,0,0,0,8.521,15.1a.46.46,0,0,0,.345,0,10.516,10.516,0,0,0,3.481-2.465A10.049,10.049,0,0,0,14.4,9.4,11.3,11.3,0,0,0,15.106,4.532Zm-3.767,2.16L8.153,10.373a.46.46,0,0,1-.328.159H7.806a.46.46,0,0,1-.322-.131L6.069,9.014a.46.46,0,1,1,.644-.657L7.777,9.4,10.644,6.09a.46.46,0,0,1,.7.6Z\"\n transform=\"translate(-2.25 -2.25)\"\n fill=\"#06f\"\n />\n </svg>\n\n <span class=\"text\">{{\n getTranslation(\n \"Your personal or company information is kept private and secure\n within this chat.\"\n )\n }}</span>\n </div>\n </div>\n </mat-drawer-content>\n </mat-drawer>\n <mat-drawer\n class=\"drawer edit-boxDrawer\"\n style=\"width: 45%\"\n #sourcesDrawer\n [position]=\"'end'\"\n [mode]=\"'over'\"\n [style.background]=\"\n 'linear-gradient(' + (bgGradient ? bgGradient.join(', ') : '') + ')'\n \"\n >\n <mat-drawer-content>\n <div class=\"sourceDraweContainer\">\n <div class=\"container-fluid\">\n <button\n mat-icon-button\n class=\"closeButtonSource\"\n (click)=\"onCloseSource()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n <h1>{{ currentSourcesList?.length }} Sources</h1>\n <!-- <p>Tell me about latest news from Mistral about AI agents announcement done this month</p> -->\n <hr />\n <ul class=\"sources-list\">\n <li *ngFor=\"let item of currentSourcesList; let si = index\">\n <!-- <input type=\"checkbox\" id=\"source1\"> -->\n <div class=\"source-content\" (click)=\"openLinkInNewTab(item.link)\">\n <label for=\"source1\">\n <span class=\"source-title\"\n ><span class=\"ml-1\">{{ si + 1 }}.</span\n >{{ item.title }}</span\n >\n <span class=\"image-container\">\n <img\n class=\"relative block\"\n [src]=\"getFaviconUrl(item.link)\"\n [alt]=\"getDomainName(item.link) + ' favicon'\"\n />\n <span> {{ getDomainName(item.link) }}</span>\n </span>\n <span class=\"source-description\">{{ item.desc }}</span>\n </label>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </mat-drawer-content>\n </mat-drawer>\n <mat-drawer\n class=\"drawer edit-boxDrawer\"\n style=\"width: 45%\"\n #editorsDrawer\n [position]=\"'end'\"\n [mode]=\"'push'\"\n [style.background]=\"\n 'linear-gradient(' + (bgGradient ? bgGradient.join(', ') : '') + ')'\n \"\n >\n <mat-drawer-content>\n <lib-bot-html-editor\n *ngIf=\"isContentLoaded\"\n [editorContent]=\"currentMessageForEditor\"\n [isDocInEditMode]=\"isDocInEditMode\"\n [documentContent]=\"documentContent\"\n [conversationId]=\"conversationId\"\n [botId]=\"botId\"\n ></lib-bot-html-editor>\n </mat-drawer-content>\n </mat-drawer>\n</mat-drawer-container>\n\n<div *ngIf=\"showWorkflowExecutionDetails\" class=\"modal\">\n <div class=\"modal-content\">\n <div class=\"close-wrapper\">\n <span class=\"close_pop\" (click)=\"closeModal()\">×</span>\n </div>\n <div class=\"titleSection\">\n <!-- Workflow Title -->\n <h2>{{ workflowExecutionDetails.WorkflowName }}</h2>\n <!-- Workflow Title -->\n </div>\n <!-- Inputs Section -->\n <div class=\"inputs-section\">\n <h3>Inputs</h3>\n <ul>\n <li\n *ngFor=\"let input of objectToArray(workflowExecutionDetails.Inputs)\"\n >\n {{ input.key }}: {{ input.value }}\n </li>\n </ul>\n </div>\n\n <!-- Actions Section (Displayed as Timeline) -->\n <div class=\"actions-section\">\n <h3>Agent Actions</h3>\n <div class=\"timeline\">\n <div\n *ngFor=\"let action of workflowExecutionDetails.Actions\"\n class=\"timeline-item\"\n >\n <div class=\"timestamp-section\">\n <h4>{{ action.ActionName || action.Name }}</h4>\n <p><strong></strong> {{ action.InsertTimeStamp }}</p>\n </div>\n <p [innerHTML]=\"processMessageForDisplay(action.Output)\"></p>\n <!-- <pre>{{ action.Output }}</pre> -->\n </div>\n </div>\n </div>\n\n <!-- Insert Timestamp -->\n <div class=\"timestamp-section\">\n <p>\n <strong>Inserted At:</strong>\n {{ workflowExecutionDetails.InsertTimeStamp }}\n </p>\n </div>\n </div>\n</div>\n",
|
|
3585
|
+
template: "<!-- <button\n *ngIf=\"isShowEditorButton && !checkForCop29BotId()\"\n (click)=\"openOuterEditor()\"\n class=\"fixed-btn\"\n>\n <span style=\"font-size: 12px\" class=\"material-icons notranslate\">\n create\n </span>\n Editor\n</button> -->\n\n<button\n *ngIf=\"!isShowEditorButton\"\n (click)=\"onCloseEditor()\"\n class=\"fixed-btn-close\"\n>\n <span style=\"font-size: 12px\" class=\"material-icons notranslate\">\n close\n </span>\n {{ getTranslation(\"Close\") }}\n</button>\n\n<mat-drawer-container\n class=\"hivegpt-chat-bot-wrapper\"\n [ngClass]=\"{ 'mat-drawer-container-has-open': isDrawerOpen }\"\n [class.ios-device]=\"isIOSDevice\"\n [hasBackdrop]=\"hasBackdropValue\"\n>\n <mat-drawer\n class=\"drawer\"\n #drawer\n [position]=\"'start'\"\n [mode]=\"'over'\"\n opened=\"true\"\n [class.full-width-drawer]=\"fullView\"\n [style.background]=\"\n 'linear-gradient(' + (bgGradient ? bgGradient.join(', ') : '') + ')'\n \"\n >\n <mat-drawer-content>\n <div class=\"chat-main\">\n <!-- <div class=\"chat-header\">\n <h2> -->\n <!-- {{eventName}} -->\n <!-- </h2> -->\n <!-- <button class=\"closeIcon\" (click)=\"onClose()\">\n <span class=\"material-symbols-outlined\">\n close\n </span>\n </button> -->\n <!-- </div> -->\n\n <div class=\"innerChat\" #chatMain>\n <div (click)=\"startNewConversation()\" class=\"new-conversationbutton2\">\n {{ getTranslation(\"New Chat\") }}\n <span\n ><svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14.061\"\n height=\"14.261\"\n viewBox=\"0 0 14.061 14.261\"\n >\n <path\n id=\"Path_164\"\n data-name=\"Path 164\"\n d=\"M10.146,5.075H4.531A1.544,1.544,0,0,0,3,6.631v7.262A1.544,1.544,0,0,0,4.531,15.45h7.146a1.544,1.544,0,0,0,1.531-1.556V8.187m-7.146,4.15L15.25,3m0,0H11.677M15.25,3V6.631\"\n transform=\"translate(-2.25 -1.939)\"\n fill=\"none\"\n stroke=\"#06f\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1.5\"\n />\n </svg>\n </span>\n </div>\n <div\n (click)=\"closeBot.emit()\"\n class=\"chat-close-button\"\n role=\"button\"\n [attr.aria-label]=\"getTranslation('Close') || 'Close'\"\n [attr.title]=\"getTranslation('Close') || 'Close'\"\n >\n {{ getTranslation(\"Close\") || \"Close\" }}\n <span class=\"chat-close-button-icon\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </span>\n </div>\n <div class=\"bot-sticky-header-chat\">\n <div class=\"title_chat\">\n <h2>\n <p>\n {{ getTranslation(botName) }}\n <!-- <svg\n *ngIf=\"!checkForCop29BotId()\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"31.499\"\n height=\"31.501\"\n viewBox=\"0 0 31.499 31.501\"\n >\n <path\n id=\"Icon_ion-shield-checkmark\"\n data-name=\"Icon ion-shield-checkmark\"\n d=\"M33.685,7.83a1.125,1.125,0,0,0-.925-1.036,49.227,49.227,0,0,1-14.3-4.444,1.125,1.125,0,0,0-.927,0A49.226,49.226,0,0,1,3.24,6.794,1.125,1.125,0,0,0,2.315,7.83a27.621,27.621,0,0,0,1.718,11.9A24.572,24.572,0,0,0,9.07,27.641a25.712,25.712,0,0,0,8.513,6.028,1.125,1.125,0,0,0,.844,0,25.712,25.712,0,0,0,8.513-6.028,24.572,24.572,0,0,0,5.027-7.911,27.621,27.621,0,0,0,1.718-11.9Zm-9.211,5.281-7.791,9a1.125,1.125,0,0,1-.8.389h-.046a1.125,1.125,0,0,1-.788-.322L11.587,18.79a1.125,1.125,0,1,1,1.575-1.607l2.6,2.552,7.01-8.1a1.125,1.125,0,0,1,1.7,1.472Z\"\n transform=\"translate(-2.25 -2.25)\"\n fill=\"#06f\"\n />\n </svg> -->\n </p>\n <span *ngIf=\"!checkForCop29BotId()\">\n <p class=\"small-title\">\n {{ getTranslation(\"AI-powered\")\n }}<span>{{ getTranslation(\"copilot\") }}</span>\n </p>\n </span>\n </h2>\n </div>\n <div class=\"chatType\" style=\"display: none\">\n <h4 class=\"labelChat\">Choose a conversation style</h4>\n <ul>\n <li (click)=\"changeTemperature(0)\">\n <button [ngClass]=\"{ active: temperature === 0 }\">\n <span class=\"top-section-title\"> More Creative </span>\n </button>\n </li>\n <li (click)=\"changeTemperature(1)\" class=\"fdssfd\">\n <button [ngClass]=\"{ active: temperature === 1 }\">\n <span class=\"top-section-title\"> More Balanced </span>\n </button>\n </li>\n <li (click)=\"changeTemperature(2)\">\n <button [ngClass]=\"{ active: temperature === 2 }\">\n <span class=\"top-section-title\"> More Precise </span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n <!-- chattype -->\n <div\n id=\"botAllChat\"\n class=\"chat\"\n [ngClass]=\"{\n botUser: chat?.type === 'user',\n botAi: chat?.type !== 'user',\n }\"\n *ngFor=\"let chat of chatLog; let i = index\"\n >\n <div class=\"chat-box\" *ngIf=\"!(i === 0 && botSkills)\">\n <div class=\"message\">\n <div\n class=\"time-cta\"\n [ngClass]=\"{\n 'time-cta din': showFeedBackIconsIndex === i,\n 'time-cta': showFeedBackIconsIndex != i,\n }\"\n >\n <div\n class=\"Icon_TimeSTamp\"\n *ngIf=\"chat?.type === 'ai' && !(i === 0 && botSkills)\"\n >\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"displayAvatarUrl || botIcon\"\n [src]=\"displayAvatarUrl || botIcon\"\n alt=\"Assistant\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!(displayAvatarUrl || botIcon)\"\n class=\"chat-avatar-initials chat-avatar-initials-assistant\"\n >A</span\n >\n </div>\n <div\n class=\"dateTime\"\n [style.color]=\"dateTimeColor ? '' : ''\"\n >\n <span style=\"color: #000 !important;\">{{ getTranslation(\"Assistant\") }}</span>\n {{ chat?.time }}\n </div>\n </div>\n\n <div\n class=\"Icon_TimeSTamp\"\n *ngIf=\"\n chat?.type === 'session_cards' ||\n chat?.type === 'attendee_cards'\n \"\n >\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"displayAvatarUrl || botIcon\"\n [src]=\"displayAvatarUrl || botIcon\"\n alt=\"Assistant\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!(displayAvatarUrl || botIcon)\"\n class=\"chat-avatar-initials chat-avatar-initials-assistant\"\n >A</span\n >\n </div>\n <div\n class=\"dateTime\"\n [style.color]=\"dateTimeColor ? '' : ''\"\n >\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ chat?.time }}\n </div>\n </div>\n\n <div class=\"Icon_TimeSTamp\" *ngIf=\"chat?.type === 'user'\">\n <div class=\"user-Box\">\n <div class=\"dateTime\">\n <span>{{ getTranslation(\"You\") }}</span>\n {{ chat?.time }}\n </div>\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"userAvatarUrl\"\n [src]=\"userAvatarUrl\"\n alt=\"You\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!userAvatarUrl\"\n class=\"chat-avatar-initials chat-avatar-initials-user\"\n >{{ getUserIdInitials() }}</span\n >\n </div>\n </div>\n <div class=\"bards\">\n <div\n class=\"bars\"\n *ngIf=\"\n chat?.WorkflowExecutionId ||\n chat?.showWorkflowExecutionLoader\n \"\n >\n <button\n class=\"icon-button\"\n (click)=\"\n showWorkflowHistoryDetails(chat.WorkflowExecutionId)\n \"\n >\n <i class=\"fas fa-bars\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"researchingCard\"\n *ngIf=\"\n (chat?.searchTerms && chat?.searchTerms.length > 0) ||\n (chat?.sourcesList && chat?.sourcesList?.length > 0)\n \"\n >\n <div\n class=\"card-header d-flex align-items-center\"\n (click)=\"toggleCollapse()\"\n >\n <span class=\"icon\"\n ><i class=\"bx bx-plus-circle bx-sm\"></i\n ></span>\n <span class=\"ml-2\"\n >Researching\n <i\n id=\"toggleIcon\"\n class=\"toggle-icon ml-2 fa\"\n [ngClass]=\"{\n 'fa-chevron-down': isCollapsed,\n 'fa-chevron-up': !isCollapsed,\n }\"\n ></i\n ></span>\n </div>\n <div\n *ngIf=\"chat?.searchTerms && chat?.searchTerms.length > 0\"\n [ngClass]=\"{ collapse: isCollapsed }\"\n >\n <ul class=\"list-group list-group-flush uptList\">\n <li\n *ngFor=\"let term of chat?.searchTerms\"\n class=\"list-group-item\"\n >\n Searching for\n <strong>{{ term }}</strong>\n </li>\n </ul>\n\n <h5\n class=\"mt-2\"\n *ngIf=\"chat?.sourcesList && chat?.sourcesList.length > 0\"\n >\n <i class=\"bx bx-unite\"></i> Sources\n </h5>\n <div\n class=\"sources-container\"\n *ngIf=\"chat?.sourcesList && chat?.sourcesList.length > 0\"\n >\n <div\n class=\"source-card\"\n *ngFor=\"\n let source of chat?.displayedSources;\n let i = index\n \"\n >\n <div>\n <div class=\"source-title\">{{ source.title }}</div>\n <div class=\"source-url\">\n <img\n class=\"relative block\"\n [src]=\"getFaviconUrl(source.link)\"\n [alt]=\"getDomainName(source.link) + ' favicon'\"\n />\n {{ getDomainName(source.link) }}\n </div>\n <div class=\"popup\">\n <div\n class=\"source-url\"\n (click)=\"openLinkInNewTab(source.link)\"\n >\n <img\n class=\"relative block\"\n [src]=\"getFaviconUrl(source.link)\"\n [alt]=\"getDomainName(source.link) + ' favicon'\"\n />\n {{ getDomainName(source.link) }}\n </div>\n <h5 (click)=\"openLinkInNewTab(source.link)\">\n {{ source.title }}\n </h5>\n <p (click)=\"openLinkInNewTab(source.link)\">\n {{ source.desc }}\n </p>\n </div>\n </div>\n </div>\n <ng-container\n *ngIf=\"\n chat?.remainingSources &&\n chat?.remainingSources.length > 0\n \"\n >\n <div\n class=\"source-card\"\n (click)=\"onCardClick(chat?.sourcesList)\"\n >\n <div>\n <div class=\"source-title\">\n <img\n *ngFor=\"\n let source of chat?.remainingSources;\n let i = index\n \"\n class=\"relative block\"\n [src]=\"getFaviconUrl(source.link)\"\n [alt]=\"getDomainName(source.link) + ' favicon'\"\n />\n </div>\n <div class=\"source-url\">\n View {{ chat?.remainingSources.length }} more\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n </div>\n\n <!-- Session cards (from get_event_sessions tool, same as React Native) -->\n <div\n class=\"session-cards-section\"\n *ngIf=\"\n chat?.type === 'session_cards' &&\n chat?.sessionCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"session-cards-container\">\n <div\n *ngFor=\"\n let session of getVisibleSessionCards(chat);\n let idx = index\n \"\n class=\"session-card-item\"\n [class.session-card-item-ondemand]=\"isSessionOndemand(session)\"\n >\n <!-- OnDemand design: pill, Available Anytime, title, description -->\n <ng-container *ngIf=\"isSessionOndemand(session)\">\n <span class=\"session-card-ondemand-badge\">{{ getTranslation('ON DEMAND') || 'ON DEMAND' }}</span>\n <div class=\"session-card-ondemand-available\">{{ getTranslation('Available Anytime') || 'Available Anytime' }}</div>\n <div class=\"session-card-title session-card-ondemand-title\">{{ session.title }}</div>\n <div\n class=\"session-card-description session-card-ondemand-desc\"\n *ngIf=\"session.description\"\n >\n {{ session.description }}\n </div>\n <div\n class=\"session-card-actions-row\"\n *ngIf=\"session.session && getSessionRoleButtons(session).length > 0\"\n >\n <div class=\"speakers-UIcard\"></div>\n <div class=\"session-card-actions\">\n <button\n *ngFor=\"let role of getSessionRoleButtons(session)\"\n type=\"button\"\n class=\"btn session-card-btn\"\n [class.session-card-btn-primary]=\"role.action === 'join'\"\n [class.session-card-btn-secondary]=\"role.action === 'watch'\"\n [class.session-card-btn-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [attr.aria-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [disabled]=\"!canPerformSessionAction(session)\"\n (click)=\"onSessionCardAction(session, role)\"\n >\n {{ role.label }}\n </button>\n </div>\n </div>\n </ng-container>\n <!-- Default (Live/Breakout) design: date badge, room/time, title, meta, description, actions -->\n <ng-container *ngIf=\"!isSessionOndemand(session)\">\n <div class=\"session-card-header\">\n <div class=\"session-card-date-badge\">\n <ng-container *ngIf=\"session.dateDay || session.dateMonth\">\n <span class=\"session-card-date-day\">{{\n session.dateDay\n }}</span>\n <span class=\"session-card-date-month\">{{\n session.dateMonth\n }}</span>\n </ng-container>\n <span\n *ngIf=\"!session.dateDay && !session.dateMonth\"\n class=\"session-card-date-na\"\n >{{ getTranslation('N/A') || 'N/A' }}</span>\n </div>\n <div class=\"session-card-room-time\">\n <div\n class=\"session-card-room\"\n *ngIf=\"session.room\"\n >\n {{ session.room }}\n </div>\n <div\n class=\"session-card-time\"\n *ngIf=\"session.timeRangeWithTz || session.timeRange\"\n >\n {{ session.timeRangeWithTz || session.timeRange }}\n </div>\n </div>\n </div>\n <div class=\"session-card-title\">{{ session.title }}</div>\n <div\n class=\"session-card-meta\"\n *ngIf=\"(session.organizer && session.organizer.length) || (session.meetingType && session.meetingType.length)\"\n >\n <div class=\"session-card-meta-row\" *ngIf=\"session.organizer && session.organizer.length\">\n <span class=\"session-card-meta-label\">{{\n (getTranslation(\"Organizer\") || \"Organizer\") + \":\"\n }}</span>\n <span class=\"session-card-meta-value\">{{ session.organizer }}</span>\n </div>\n <!-- <div class=\"session-card-meta-row\" *ngIf=\"session.timeZoneDisplay\">\n <span class=\"session-card-meta-label\">{{\n getTranslation(\"Time zone\") || \"Time zone\"\n }}</span>\n <span class=\"session-card-meta-value\">{{ session.timeZoneDisplay }}</span>\n </div> -->\n <div class=\"session-card-meta-row\" *ngIf=\"session.meetingType && session.meetingType.length\">\n <span class=\"session-card-meta-label\">{{\n getSessionTypeLabel() + \":\"\n }}</span>\n <span class=\"session-card-meta-value\">{{ session.meetingType }}</span>\n </div>\n </div>\n <div\n class=\"session-card-description\"\n *ngIf=\"session.description\"\n >\n {{ session.description }}\n </div>\n <div\n class=\"session-card-status\"\n *ngIf=\"\n (session.statusText && session.statusText.length) &&\n getSessionRoleButtons(session).length > 0\n \"\n >\n <span class=\"session-card-status-bullet\"></span>\n {{ session.statusText }}\n </div>\n <!-- <div\n class=\"session-card-when-disable\"\n *ngIf=\"\n session.session?.sessionRoles?.length > 0 &&\n !isSessionOndemand(session) &&\n !session.session?.isExpire &&\n !canPerformSessionAction(session)\n \"\n >\n {{ getTranslation(\"You can join/watch at the starting time\") || \"You can join/watch at the starting time\" }}\n </div> -->\n \n <div\n class=\"session-card-actions-row\"\n *ngIf=\"\n session.session &&\n (getSessionRoleButtons(session).length > 0 || hasSessionCardSpeakers(session))\n \"\n >\n <div class=\"speakers-UIcard\">\n <ng-container\n *ngIf=\"\n (session?.speakersList || session?.session?.speakersList || []).length\n as _speakerCount\n \"\n >\n <ng-container\n *ngFor=\"\n let sp of (session?.speakersList || session?.session?.speakersList || []);\n let i = index\n \"\n >\n <ng-container *ngIf=\"i < 3\">\n <div class=\"speaker\" *ngIf=\"getSpeakerPhotoUrl(sp); else speakerInitials\">\n <img\n [src]=\"getSpeakerPhotoUrl(sp)!\"\n [alt]=\"getSpeakerDisplayName(sp) || 'Speaker'\"\n />\n </div>\n <ng-template #speakerInitials>\n <div class=\"speaker initials\">\n {{ getSpeakerInitials(sp) }}\n </div>\n </ng-template>\n </ng-container>\n </ng-container>\n <div class=\"speaker initials\" *ngIf=\"_speakerCount > 3\">\n +{{ _speakerCount - 3 }}\n </div>\n </ng-container>\n </div>\n <div class=\"session-card-actions\">\n <button\n *ngFor=\"let role of getSessionRoleButtons(session)\"\n type=\"button\"\n class=\"btn session-card-btn\"\n [class.session-card-btn-primary]=\"\n role.action === 'join'\n \"\n [class.session-card-btn-secondary]=\"\n role.action === 'watch'\n \"\n [class.session-card-btn-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [attr.aria-disabled]=\"isUnEvent && !canPerformSessionAction(session)\"\n [disabled]=\"!canPerformSessionAction(session)\"\n (click)=\"onSessionCardAction(session, role)\"\n >\n {{ role.label }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.sessionCards?.length || 0) -\n SESSION_CARDS_INITIAL >\n 4 &&\n !expandedSessionCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandSessionCards(chat)\"\n >\n Show\n {{\n (chat?.sessionCards?.length || 0) - SESSION_CARDS_INITIAL\n }}\n more\n {{\n (chat?.sessionCards?.length || 0) -\n SESSION_CARDS_INITIAL ===\n 1\n ? getTranslation(\"session\") || \"session\"\n : getTranslation(\"sessions\") || \"sessions\"\n }}\n </button>\n </div>\n\n <!-- Attendee cards (from get_event_attendees tool, same as React Native) -->\n <div\n class=\"attendee-cards-section\"\n *ngIf=\"\n chat?.type === 'attendee_cards' &&\n chat?.attendeeCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"attendee-cards-container\">\n <div\n *ngFor=\"\n let attendee of getVisibleAttendeeCards(chat);\n let idx = index\n \"\n class=\"attendee-card-item\"\n >\n <div\n class=\"attendee-card\"\n [class.attendee-card-has-video]=\"!!getAttendeeVideoUrl(attendee)\"\n [style.background-image]=\"\n !getAttendeeVideoUrl(attendee) && attendee.photo\n ? 'url(' + attendee.photo + ')'\n : null\n \"\n >\n <ng-container *ngIf=\"getAttendeeVideoUrl(attendee)\">\n <video\n #attendeeVideo\n class=\"attendee-card-video\"\n [attr.poster]=\"getAttendeeVideoPoster(attendee) || null\"\n [muted]=\"isAttendeeVideoMuted(chat, attendee)\"\n playsinline\n preload=\"metadata\"\n (play)=\"onAttendeeVideoPlayState(chat, attendee, true)\"\n (pause)=\"onAttendeeVideoPlayState(chat, attendee, false)\"\n (ended)=\"onAttendeeVideoPlayState(chat, attendee, false)\"\n (click)=\"toggleAttendeeVideoPlay(chat, attendee, attendeeVideo, $event)\"\n >\n <source\n [attr.src]=\"getAttendeeVideoUrl(attendee)\"\n type=\"video/webm\"\n />\n </video>\n\n <button\n type=\"button\"\n class=\"attendee-card-mute-btn\"\n (click)=\"toggleAttendeeVideoMute(chat, attendee, attendeeVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoMuted(chat, attendee)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoMuted(chat, attendee)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoMuted(chat, attendee)\n ? \"volume_off\"\n : \"volume_up\"\n }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"attendee-card-play-btn\"\n (click)=\"toggleAttendeeVideoPlay(chat, attendee, attendeeVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoPlaying(chat, attendee)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoPlaying(chat, attendee)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoPlaying(chat, attendee)\n ? \"pause\"\n : \"play_arrow\"\n }}\n </span>\n </button>\n </ng-container>\n\n <div\n class=\"attendee-card-initials\"\n *ngIf=\"!getAttendeeVideoUrl(attendee) && !attendee.photo\"\n >\n {{ getAttendeeInitials(attendee.name) }}\n </div>\n <div class=\"attendee-overlay\"></div>\n <div class=\"attendee-content\">\n <div class=\"attendee-name\">{{ attendee.name }}</div>\n <div\n class=\"attendee-company\"\n *ngIf=\"attendee.company\"\n >\n {{ attendee.company }}\n </div>\n <div\n class=\"attendee-desc\"\n [class.attendee-desc-collapsed]=\"!isAttendeeDescriptionExpanded(chat, attendee)\"\n [class.attendee-desc-expanded]=\"isAttendeeDescriptionExpanded(chat, attendee)\"\n *ngIf=\"getAttendeeDescription(attendee)\"\n >\n {{ getAttendeeDescription(attendee) }}\n </div>\n \n <div class=\"attendee-buttons\">\n <ng-container\n *ngIf=\"\n attendee.id !== userId &&\n isConnectionsEnabled &&\n checkPendingSentRequest(attendee.id)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-request-sent\"\n disabled\n [attr.title]=\"\n getTranslation('Request Sent') || 'Request Sent'\n \"\n >\n {{\n getTranslation(\"Request Sent\") || \"Request Sent\"\n }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n attendee.id !== userId &&\n isConnectionsEnabled &&\n canFollowUser(attendee)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-connect\"\n [attr.title]=\"\n getTranslation('Connect') || 'Connect'\n \"\n (click)=\"\n attendee.id &&\n connectWithUser.emit({\n userId: attendee.id,\n connect: true,\n })\n \"\n >\n {{ getTranslation(\"Connect\") || \"Connect\" }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n attendee.id !== userId &&\n isConnectionsEnabled &&\n canUnfollowUser(attendee)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-disconnect\"\n [attr.title]=\"\n getTranslation('Disconnect') || 'Disconnect'\n \"\n (click)=\"\n attendee.id &&\n connectWithUser.emit({\n userId: attendee.id,\n disconnect: true,\n })\n \"\n >\n {{\n getTranslation(\"Disconnect\") || \"Disconnect\"\n }}\n </button>\n </ng-container>\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-view-profile\"\n [disabled]=\"!attendee.id\"\n [attr.title]=\"\n !attendee.id\n ? getTranslation('Profile not available') ||\n 'Profile not available'\n : (getTranslation('View Profile') || 'View Profile')\n \"\n (click)=\"\n attendee.id &&\n connectWithUser.emit({\n userId: attendee.id,\n viewProfile: true,\n })\n \"\n >\n {{ getTranslation(\"View Profile\") || \"View Profile\" }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.attendeeCards?.length || 0) -\n ATTENDEE_CARDS_INITIAL >\n 4 &&\n !expandedAttendeeCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandAttendeeCards(chat)\"\n >\n Show\n {{\n (chat?.attendeeCards?.length || 0) -\n ATTENDEE_CARDS_INITIAL\n }}\n more\n {{\n (chat?.attendeeCards?.length || 0) -\n ATTENDEE_CARDS_INITIAL ===\n 1\n ? getTranslation(\"attendee\") || \"attendee\"\n : getTranslation(\"attendees\") || \"attendees\"\n }}\n </button>\n </div>\n\n <!-- Speaker cards (from get_event_speakers tool, same layout/behavior as attendee cards) -->\n <div\n class=\"speaker-cards-section\"\n *ngIf=\"\n chat?.type === 'speaker_cards' &&\n chat?.speakerCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"attendee-cards-container\">\n <div\n *ngFor=\"\n let speaker of getVisibleSpeakerCards(chat);\n let idx = index\n \"\n class=\"attendee-card-item\"\n >\n <div\n class=\"attendee-card\"\n [class.attendee-card-has-video]=\"!!getAttendeeVideoUrl(speaker)\"\n [style.background-image]=\"\n !getAttendeeVideoUrl(speaker) && speaker.photo\n ? 'url(' + speaker.photo + ')'\n : null\n \"\n >\n <ng-container *ngIf=\"getAttendeeVideoUrl(speaker)\">\n <video\n #speakerVideo\n class=\"attendee-card-video\"\n [attr.poster]=\"getAttendeeVideoPoster(speaker) || null\"\n [muted]=\"isAttendeeVideoMuted(chat, speaker)\"\n playsinline\n preload=\"metadata\"\n (play)=\"onAttendeeVideoPlayState(chat, speaker, true)\"\n (pause)=\"onAttendeeVideoPlayState(chat, speaker, false)\"\n (ended)=\"onAttendeeVideoPlayState(chat, speaker, false)\"\n (click)=\"toggleAttendeeVideoPlay(chat, speaker, speakerVideo, $event)\"\n >\n <source\n [attr.src]=\"getAttendeeVideoUrl(speaker)\"\n type=\"video/webm\"\n />\n </video>\n\n <button\n type=\"button\"\n class=\"attendee-card-mute-btn\"\n (click)=\"toggleAttendeeVideoMute(chat, speaker, speakerVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoMuted(chat, speaker)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoMuted(chat, speaker)\n ? (getTranslation('Unmute') || 'Unmute')\n : (getTranslation('Mute') || 'Mute')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoMuted(chat, speaker)\n ? \"volume_off\"\n : \"volume_up\"\n }}\n </span>\n </button>\n\n <button\n type=\"button\"\n class=\"attendee-card-play-btn\"\n (click)=\"toggleAttendeeVideoPlay(chat, speaker, speakerVideo, $event)\"\n [attr.title]=\"\n isAttendeeVideoPlaying(chat, speaker)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n [attr.aria-label]=\"\n isAttendeeVideoPlaying(chat, speaker)\n ? (getTranslation('Pause') || 'Pause')\n : (getTranslation('Play') || 'Play')\n \"\n >\n <span class=\"material-icons notranslate\">\n {{\n isAttendeeVideoPlaying(chat, speaker)\n ? \"pause\"\n : \"play_arrow\"\n }}\n </span>\n </button>\n </ng-container>\n\n <div\n class=\"attendee-card-initials\"\n *ngIf=\"!getAttendeeVideoUrl(speaker) && !speaker.photo\"\n >\n {{ getAttendeeInitials(speaker.name) }}\n </div>\n <div class=\"attendee-overlay\"></div>\n <div class=\"attendee-content\">\n <div class=\"attendee-name\">{{ speaker.name }}</div>\n <div\n class=\"attendee-company\"\n *ngIf=\"speaker.jobTitle\"\n >\n {{ speaker.jobTitle }}\n </div>\n <div\n class=\"attendee-company\"\n *ngIf=\"speaker.company\"\n >\n {{ speaker.company }}\n </div>\n <div\n class=\"attendee-desc\"\n [class.attendee-desc-collapsed]=\"!isAttendeeDescriptionExpanded(chat, speaker)\"\n [class.attendee-desc-expanded]=\"isAttendeeDescriptionExpanded(chat, speaker)\"\n *ngIf=\"getAttendeeDescription(speaker)\"\n >\n {{ getAttendeeDescription(speaker) }}\n </div>\n \n\n <div class=\"attendee-buttons\">\n \n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-view-profile\"\n [disabled]=\"!speaker.id\"\n [attr.title]=\"\n !speaker.id\n ? getTranslation('Profile not available') ||\n 'Profile not available'\n : (getTranslation('View Profile') || 'View Profile')\n \"\n (click)=\"\n chat?.type === 'speaker_cards'\n ? viewSpeakerProfile.emit({\n speaker,\n speakers: chat.speakerCards || []\n })\n : speaker.id &&\n connectWithUser.emit({\n userId: speaker.id,\n viewProfile: true\n })\n \"\n >\n {{\n getTranslation('View Profile') || 'View Profile'\n }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.speakerCards?.length || 0) -\n SPEAKER_CARDS_INITIAL >\n 4 &&\n !expandedSpeakerCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandSpeakerCards(chat)\"\n >\n Show\n {{\n (chat?.speakerCards?.length || 0) -\n SPEAKER_CARDS_INITIAL\n }}\n more\n {{\n (chat?.speakerCards?.length || 0) -\n SPEAKER_CARDS_INITIAL ===\n 1\n ? getTranslation('speaker') || 'speaker'\n : getTranslation('speakers') || 'speakers'\n }}\n </button>\n </div>\n\n <!-- Sponsor cards (from get_event_sponsors tool, booth-rep style) -->\n <div\n class=\"sponsor-cards-section\"\n *ngIf=\"\n chat?.type === 'sponsor_cards' &&\n chat?.sponsorCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"booth-rep-card-grid\">\n <div\n *ngFor=\"\n let sponsor of getVisibleSponsorCards(chat);\n let idx = index\n \"\n class=\"booth-rep-card\"\n >\n <div class=\"booth-rep-card-logo\">\n <span\n class=\"booth-rep-card-logo-placeholder\"\n *ngIf=\"!sponsor.logoUrl\"\n >\n {{ sponsor.boothTitle ? sponsor.boothTitle.charAt(0) : (sponsor.name ? sponsor.name.charAt(0) : '') }}\n </span>\n <img\n *ngIf=\"sponsor.logoUrl\"\n [src]=\"sponsor.logoUrl\"\n [alt]=\"sponsor.boothTitle || sponsor.name\"\n />\n </div>\n <h3 class=\"booth-rep-card-title\">\n {{ sponsor.boothTitle || sponsor.name }}\n </h3>\n <p\n class=\"booth-rep-card-desc\"\n *ngIf=\"sponsor.description\"\n >\n {{ sponsor.description }}\n </p>\n <button\n type=\"button\"\n class=\"booth-rep-card-btn\"\n (click)=\"viewBooth.emit({ boothId: sponsor.boothID, boothUrl: sponsor.url, sponsor })\"\n >\n {{ getTranslation('View Sponsor') || 'View Sponsor' }}\n </button>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.sponsorCards?.length || 0) -\n SPONSOR_CARDS_INITIAL >\n 4 &&\n !expandedSponsorCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandSponsorCards(chat)\"\n >\n Show\n {{\n (chat?.sponsorCards?.length || 0) -\n SPONSOR_CARDS_INITIAL\n }}\n more\n {{\n (chat?.sponsorCards?.length || 0) -\n SPONSOR_CARDS_INITIAL ===\n 1\n ? getTranslation('sponsor') || 'sponsor'\n : getTranslation('sponsors') || 'sponsors'\n }}\n </button>\n </div>\n\n <!-- Booth representative cards (from get_booth_representatives tool, same design as attendee cards) -->\n <div\n class=\"attendee-cards-section booth-rep-cards-section\"\n *ngIf=\"\n chat?.type === 'booth_rep_cards' &&\n chat?.boothRepCards?.length > 0\n \"\n >\n <div\n *ngIf=\"chat?.message\"\n class=\"card-message-bubble\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <p\n class=\"SearchTitle ai card-message-text\"\n [innerHTML]=\"chat?.message\"\n ></p>\n </div>\n <div class=\"attendee-cards-container\">\n <div\n *ngFor=\"\n let rep of getVisibleBoothRepCards(chat);\n let idx = index\n \"\n class=\"attendee-card-item\"\n >\n <div\n class=\"attendee-card\"\n [style.background-image]=\"rep.photo ? 'url(' + rep.photo + ')' : null\"\n >\n <div\n class=\"attendee-card-initials\"\n *ngIf=\"!rep.photo\"\n >\n {{ getAttendeeInitials(rep.name) }}\n </div>\n <div class=\"attendee-overlay\"></div>\n <div class=\"attendee-content\">\n <div class=\"attendee-name\">{{ rep.name }}</div>\n <div\n class=\"attendee-company\"\n *ngIf=\"rep.company\"\n >\n {{ rep.company }}\n </div>\n <div\n class=\"attendee-company\"\n *ngIf=\"rep.jobTitle\"\n >\n {{ rep.jobTitle }}\n </div>\n <div\n class=\"attendee-desc\"\n [class.attendee-desc-collapsed]=\"!isAttendeeDescriptionExpanded(chat, rep)\"\n [class.attendee-desc-expanded]=\"isAttendeeDescriptionExpanded(chat, rep)\"\n *ngIf=\"getAttendeeDescription(rep)\"\n >\n {{ getAttendeeDescription(rep) }}\n </div>\n <div class=\"attendee-buttons\">\n <ng-container\n *ngIf=\"\n rep.id !== userId &&\n isConnectionsEnabled &&\n checkPendingSentRequest(rep.id)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-request-sent\"\n disabled\n [attr.title]=\"\n getTranslation('Request Sent') || 'Request Sent'\n \"\n >\n {{\n getTranslation(\"Request Sent\") || \"Request Sent\"\n }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n rep.id !== userId &&\n isConnectionsEnabled &&\n canFollowUser(rep)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-connect\"\n [attr.title]=\"\n getTranslation('Connect') || 'Connect'\n \"\n (click)=\"\n rep.id &&\n connectWithUser.emit({\n userId: rep.id,\n connect: true,\n })\n \"\n >\n {{ getTranslation(\"Connect\") || \"Connect\" }}\n </button>\n </ng-container>\n <ng-container\n *ngIf=\"\n rep.id !== userId &&\n isConnectionsEnabled &&\n canUnfollowUser(rep)\n \"\n >\n <button\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-disconnect\"\n [attr.title]=\"\n getTranslation('Disconnect') || 'Disconnect'\n \"\n (click)=\"\n rep.id &&\n connectWithUser.emit({\n userId: rep.id,\n disconnect: true,\n })\n \"\n >\n {{\n getTranslation(\"Disconnect\") || \"Disconnect\"\n }}\n </button>\n </ng-container>\n <button\n *ngIf=\"rep.id\"\n type=\"button\"\n class=\"btn attendee-card-btn attendee-card-btn-view-profile\"\n [attr.title]=\"getTranslation('View Profile') || 'View Profile'\"\n (click)=\"\n connectWithUser.emit({\n userId: rep.id,\n viewProfile: true,\n })\n \"\n >\n {{ getTranslation('View Profile') || 'View Profile' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"\n (chat?.boothRepCards?.length || 0) -\n BOOTH_REP_CARDS_INITIAL >\n 4 &&\n !expandedBoothRepCardIds[chat?._id]\n \"\n type=\"button\"\n class=\"show-more-cards-btn\"\n (click)=\"expandBoothRepCards(chat)\"\n >\n Show\n {{\n (chat?.boothRepCards?.length || 0) -\n BOOTH_REP_CARDS_INITIAL\n }}\n more\n {{\n (chat?.boothRepCards?.length || 0) -\n BOOTH_REP_CARDS_INITIAL ===\n 1\n ? getTranslation('representative') || 'representative'\n : getTranslation('representatives') || 'representatives'\n }}\n </button>\n </div>\n\n <div\n class=\"chat-bubble-wrap\"\n *ngIf=\"\n (chat?.type === 'ai' || chat?.type === 'user') &&\n !(i === 0 && botSkills)\n \"\n [ngStyle]=\"{\n background:\n chat?.type === 'ai'\n ? bgBubbleAi || '#fff'\n : chat?.type === 'user'\n ? bgBubbleUser || '#183988'\n : 'transparent',\n color:\n chat?.type === 'ai'\n ? '#000 !important'\n : '#fff !important',\n }\"\n >\n <div id=\"messageText_{{ i }}\" class=\"chat-bubble-content\">\n <div\n *ngIf=\"chat?.type === 'ai' || chat?.type === 'user'\"\n [ngClass]=\"{\n 'SearchTitle ai': chat?.type === 'ai',\n 'SearchTitle user': chat?.type === 'user',\n }\"\n [ngStyle]=\"{\n background: 'transparent',\n color:\n chat?.type === 'ai' && messageTextColorAi\n ? messageTextColorAi\n : chat?.type === 'user'\n ? messageTextColorUser || '#fff'\n : 'defaultColor',\n }\"\n [innerHTML]=\"chat?.message\"\n ></div>\n </div>\n </div>\n\n <div\n class=\"progress-container\"\n *ngIf=\"chat?.showWorkflowExecutionLoader\"\n >\n <div class=\"circular-loader\">\n <div\n class=\"loader-spinner\"\n *ngIf=\"currentWorkflowActionProgress < 100\"\n [ngStyle]=\"{\n transform: 'rotate(' + percentage * 3.6 + 'deg)',\n }\"\n ></div>\n <div\n class=\"checkmark\"\n *ngIf=\"currentWorkflowActionProgress == 100\"\n >\n <svg viewBox=\"0 0 52 52\">\n <circle\n class=\"checkmark-circle\"\n cx=\"26\"\n cy=\"26\"\n r=\"25\"\n fill=\"none\"\n />\n <path\n class=\"checkmark-check\"\n fill=\"none\"\n d=\"M14 27l7 7 16-16\"\n />\n </svg>\n </div>\n\n <div\n class=\"loader-text\"\n *ngIf=\"currentWorkflowActionProgress < 100\"\n >\n {{ currentWorkflowActionProgress }}%\n </div>\n </div>\n <div class=\"loader-label\">{{ currentWorkflowAction }}...</div>\n </div>\n\n <div\n class=\"exicution mt-2\"\n *ngIf=\"\n chat?.type === 'ai' &&\n chat?.graphs &&\n chat?.graphs.length > 0\n \"\n >\n <h5 *ngIf=\"chat?.type === 'ai'\">\n <i class=\"bx bx-network-chart\"></i> Graphs\n <i\n (click)=\"toggleCollapseFGraph()\"\n class=\"toggle-icon ml-2 fa\"\n [ngClass]=\"{\n 'fas fa-chevron-down': isCollapsedForFGraph,\n 'fas fa-chevron-up': !isCollapsedForFGraph,\n }\"\n ></i>\n </h5>\n <img\n *ngFor=\"let image of chat?.graphs\"\n class=\"graph-img\"\n [ngClass]=\"{ collapse: isCollapsedForFGraph }\"\n [src]=\"image\"\n alt=\"\"\n />\n </div>\n <ng-container *ngIf=\"!checkForCop29BotId()\">\n <div\n class=\"exicution mt-2\"\n *ngIf=\"\n chat?.type === 'ai' &&\n chat?.executionGraphs &&\n chat?.executionGraphs?.length > 0\n \"\n >\n <h5 *ngIf=\"chat?.type === 'ai'\">\n <i class=\"bx bx-network-chart\"></i> Execution Path Diagram\n For Data Visualization Workflow\n <i\n (click)=\"toggleCollapseGraph()\"\n class=\"toggle-icon ml-2 fa\"\n [ngClass]=\"{\n 'fas fa-chevron-down': isCollapsedForGraph,\n 'fas fa-chevron-up': !isCollapsedForGraph,\n }\"\n ></i>\n </h5>\n <img\n *ngFor=\"let image of chat?.executionGraphs\"\n class=\"graph-img\"\n [ngClass]=\"{ collapse: isCollapsedForGraph }\"\n [src]=\"image\"\n alt=\"\"\n />\n </div>\n </ng-container>\n <div class=\"cta\" *ngIf=\"chat?.type === 'ai' && i > 0 && i === lastAiMessageIndex\">\n <div\n class=\"copyBox\"\n title=\"Copy\"\n [ngClass]=\"\n showFeedBackIconsIndex == i ? 'show-always' : 'show-hover'\n \"\n >\n <button\n title=\"{{ chat?.copied ? 'Copied!' : 'Copy' }}\"\n class=\"copy\"\n [class.active]=\"chat?.copied\"\n (click)=\"handleCopyClick(i)\"\n >\n <i *ngIf=\"chat?.copied\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 16.17L4.83 12L3.41 13.41L9 19L21 7L19.59 5.59L9 16.17Z\"\n fill=\"#566563\"\n />\n </svg>\n </i>\n\n <i *ngIf=\"!chat?.copied\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M19.24 2H8.84C8.14 2 7.58 2.56 7.58 3.26V16.84C7.58 17.54 8.14 18.1 8.84 18.1H19.24C19.94 18.1 20.5 17.54 20.5 16.84V3.26C20.5 2.56 19.94 2 19.24 2ZM19.24 16.84H8.84V3.26H19.24V16.84ZM4.74 6.52C4.04 6.52 3.48 7.08 3.48 7.78V20.36C3.48 21.06 4.04 21.62 4.74 21.62H15.14C15.84 21.62 16.4 21.06 16.4 20.36V18.88H14.96V20.36H4.74V7.78H6.18V6.52H4.74Z\"\n fill=\"#566563\"\n />\n </svg>\n </i>\n </button>\n\n <button\n *ngIf=\"!checkForCop29BotId()\"\n class=\"up copy\"\n title=\"{{ chat?.isEditor ? 'Added!' : 'Add to editor' }}\"\n (click)=\"handleEditorClick(i)\"\n >\n <svg\n *ngIf=\"!chat?.isEditor\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20.152\"\n height=\"20.152\"\n viewBox=\"0 0 20.152 20.152\"\n >\n <g\n id=\"Icon_feather-edit\"\n data-name=\"Icon feather-edit\"\n transform=\"translate(-2.5 -2.166)\"\n >\n <path\n id=\"Path_166\"\n data-name=\"Path 166\"\n d=\"M11.5,6H4.889A1.889,1.889,0,0,0,3,7.889v13.22A1.889,1.889,0,0,0,4.889,23h13.22A1.889,1.889,0,0,0,20,21.108V14.5\"\n transform=\"translate(0 -1.179)\"\n fill=\"none\"\n stroke=\"#393939\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1\"\n />\n <path\n id=\"Path_167\"\n data-name=\"Path 167\"\n d=\"M21.915,3.4a2,2,0,0,1,2.833,2.833l-8.971,8.971L12,16.152l.944-3.777Z\"\n transform=\"translate(-3.334 0)\"\n fill=\"none\"\n stroke=\"#393939\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-width=\"1\"\n />\n </g>\n </svg>\n\n <i *ngIf=\"chat?.isEditor\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M9 16.17L4.83 12L3.41 13.41L9 19L21 7L19.59 5.59L9 16.17Z\"\n fill=\"#566563\"\n />\n </svg>\n </i>\n </button>\n\n <button\n class=\"up copy\"\n title=\"Like\"\n [class.active]=\"chat?.liked\"\n (click)=\"handleUpClick(i)\"\n >\n <i *ngIf=\"chat?.liked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.38989 18.4902V8.33022C8.38989 7.93022 8.50989 7.54022 8.72989 7.21022L11.4599 3.15022C11.8899 2.50022 12.9599 2.04022 13.8699 2.38022C14.8499 2.71022 15.4999 3.81022 15.2899 4.79022L14.7699 8.06022C14.7299 8.36022 14.8099 8.63022 14.9799 8.84022C15.1499 9.03022 15.3999 9.15022 15.6699 9.15022H19.7799C20.5699 9.15022 21.2499 9.47022 21.6499 10.0302C22.0299 10.5702 22.0999 11.2702 21.8499 11.9802L19.3899 19.4702C19.0799 20.7102 17.7299 21.7202 16.3899 21.7202H12.4899C11.8199 21.7202 10.8799 21.4902 10.4499 21.0602L9.16989 20.0702C8.67989 19.7002 8.38989 19.1102 8.38989 18.4902Z\"\n fill=\"#17235B\"\n />\n <path\n d=\"M5.21 6.37988H4.18C2.63 6.37988 2 6.97988 2 8.45988V18.5199C2 19.9999 2.63 20.5999 4.18 20.5999H5.21C6.76 20.5999 7.39 19.9999 7.39 18.5199V8.45988C7.39 6.97988 6.76 6.37988 5.21 6.37988Z\"\n fill=\"#17235B\"\n />\n </svg>\n </i>\n <i *ngIf=\"!chat?.liked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.4037 20.9264L10.381 20.9038L10.3557 20.8843L7.72165 18.85L8.02965 18.4516L10.7161 20.5315C10.9228 20.7195 11.2181 20.8517 11.4962 20.9377C11.7978 21.0309 12.1451 21.09 12.4801 21.09H16.2801C16.8572 21.09 17.4266 20.8625 17.8751 20.5306C18.3159 20.2044 18.6912 19.7385 18.8305 19.1997L21.2428 11.8732C21.4379 11.3309 21.4287 10.749 21.0965 10.2887C20.7583 9.81377 20.1844 9.58999 19.5801 9.58999H15.5801C15.2031 9.58999 14.8615 9.43143 14.6276 9.16215L14.627 9.16142C14.3873 8.88649 14.2756 8.51549 14.3345 8.11501L14.8322 4.9195C14.9978 4.1052 14.4664 3.24596 13.7053 2.98804C13.3277 2.85165 12.9297 2.89129 12.61 2.99839C12.2949 3.10396 11.9772 3.30172 11.7881 3.57673L11.7881 3.57671L11.7851 3.58107L7.96352 9.26689L7.55454 8.99314L11.3751 3.30891L11.3755 3.30836C11.8763 2.56103 13.0109 2.19028 13.8726 2.51744L13.8834 2.52151L13.8943 2.52509C14.9044 2.8564 15.556 3.98765 15.3317 5.01314L15.3284 5.02805L15.326 5.04314L14.836 8.19314L14.836 8.19313L14.8351 8.19928C14.8184 8.31642 14.7981 8.60268 15.0138 8.84924L15.0248 8.86177L15.0366 8.87354C15.1833 9.02026 15.3817 9.09999 15.5901 9.09999H19.5901C20.4308 9.09999 21.1176 9.44886 21.5113 10.0079L21.5124 10.0095C21.8964 10.5502 21.9908 11.2849 21.7202 12.0291L21.7175 12.0365L21.7151 12.044L19.3251 19.324L19.3198 19.34L19.3156 19.3564C19.0058 20.5707 17.6766 21.6 16.2801 21.6H12.4801C12.2411 21.6 11.8403 21.5625 11.4297 21.4512C11.0123 21.338 10.6406 21.1633 10.4037 20.9264Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n <path\n d=\"M5.37988 20.4999H4.37988C3.52442 20.4999 2.98559 20.2982 2.65822 19.9825C2.33437 19.6702 2.12988 19.1614 2.12988 18.3499V8.5499C2.12988 7.73843 2.33437 7.22962 2.65822 6.91731C2.98559 6.6016 3.52442 6.3999 4.37988 6.3999H5.37988C6.23534 6.3999 6.77418 6.6016 7.10155 6.91731C7.4254 7.22962 7.62988 7.73843 7.62988 8.5499V18.3499C7.62988 19.1614 7.4254 19.6702 7.10155 19.9825C6.77418 20.2982 6.23534 20.4999 5.37988 20.4999ZM4.37988 6.8999C4.0934 6.8999 3.83578 6.9164 3.61382 6.96689C3.38745 7.01838 3.16822 7.11196 2.99258 7.2876C2.81559 7.46459 2.72807 7.67966 2.68301 7.89002C2.63948 8.09318 2.62988 8.31967 2.62988 8.5499V18.3499C2.62988 18.5801 2.63948 18.8066 2.68301 19.0098C2.72807 19.2201 2.81559 19.4352 2.99258 19.6122C3.16822 19.7878 3.38745 19.8814 3.61382 19.9329C3.83578 19.9834 4.0934 19.9999 4.37988 19.9999H5.37988C5.66637 19.9999 5.92398 19.9834 6.14595 19.9329C6.37232 19.8814 6.59155 19.7878 6.76719 19.6122C6.94418 19.4352 7.0317 19.2201 7.07676 19.0098C7.12028 18.8066 7.12988 18.5801 7.12988 18.3499V8.5499C7.12988 8.31967 7.12028 8.09318 7.07676 7.89002C7.0317 7.67966 6.94418 7.46459 6.76719 7.2876C6.59155 7.11196 6.37232 7.01838 6.14595 6.96689C5.92398 6.9164 5.66637 6.8999 5.37988 6.8999H4.37988Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n </svg>\n </i>\n </button>\n <button\n class=\"down copy\"\n title=\"Dislike\"\n [class.active]=\"chat?.unliked\"\n (click)=\"handleDownClick(i)\"\n >\n <i *ngIf=\"chat?.unliked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M15.61 5.50002V15.66C15.61 16.06 15.49 16.45 15.27 16.78L12.54 20.84C12.11 21.49 11.04 21.95 10.13 21.61C9.15002 21.28 8.50002 20.18 8.71002 19.2L9.23002 15.93C9.27002 15.63 9.19002 15.36 9.02002 15.15C8.85002 14.96 8.60002 14.84 8.33002 14.84H4.22002C3.43002 14.84 2.75002 14.52 2.35002 13.96C1.97002 13.42 1.90002 12.72 2.15002 12.01L4.61002 4.52002C4.92002 3.28002 6.27002 2.27002 7.61002 2.27002H11.51C12.18 2.27002 13.12 2.50002 13.55 2.93002L14.83 3.92002C15.32 4.30002 15.61 4.88002 15.61 5.50002Z\"\n fill=\"#17235B\"\n />\n\n <path\n d=\"M18.7901 17.6099H19.8201C21.3701 17.6099 22.0001 17.0099 22.0001 15.5299V5.4799C22.0001 3.9999 21.3701 3.3999 19.8201 3.3999H18.7901C17.2401 3.3999 16.6101 3.9999 16.6101 5.4799V15.5399C16.6101 17.0099 17.2401 17.6099 18.7901 17.6099Z\"\n fill=\"#17235B\"\n />\n </svg>\n </i>\n\n <i *ngIf=\"!chat?.unliked\">\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M10.1237 21.481L10.1148 21.4778L10.1059 21.4748C9.09577 21.1435 8.44416 20.0122 8.66849 18.9867L8.67175 18.9718L8.6741 18.9568L9.1641 15.8068L9.16413 15.8068L9.16501 15.8006C9.18175 15.6835 9.20207 15.3972 8.98633 15.1507L8.97536 15.1381L8.96359 15.1263C8.81687 14.9796 8.61841 14.8999 8.41004 14.8999H4.41004C3.56937 14.8999 2.88252 14.551 2.48884 13.992L2.4877 13.9904C2.10371 13.4497 2.00931 12.715 2.27994 11.9708L2.28263 11.9634L2.28509 11.9559L4.67509 4.67586L4.68035 4.65985L4.68451 4.64353C4.99418 3.42996 6.33271 2.3999 7.72004 2.3999H11.52C11.7591 2.3999 12.1599 2.43736 12.5704 2.54872C12.9878 2.66194 13.3596 2.83655 13.5965 3.07346L13.6191 3.09608L13.6444 3.11563L16.2785 5.14986L15.9705 5.54825L13.2875 3.47111C13.0799 3.2763 12.7837 3.1413 12.5061 3.05412C12.2031 2.95897 11.8551 2.8999 11.52 2.8999H7.72004C7.1429 2.8999 6.57353 3.12735 6.12508 3.45926C5.68428 3.78551 5.30892 4.25142 5.16963 4.79019L2.75738 12.1167C2.56223 12.659 2.57147 13.2409 2.90366 13.7012C3.24183 14.1761 3.81578 14.3999 4.42004 14.3999H8.42004C8.79702 14.3999 9.13867 14.5585 9.37252 14.8277L9.37315 14.8285C9.61286 15.1034 9.72457 15.4745 9.66568 15.875C9.6656 15.8755 9.66552 15.8761 9.66544 15.8766L9.16795 19.0704C9.00242 19.8841 9.53299 20.7428 10.2933 21.0013C10.6685 21.1391 11.0675 21.0978 11.3857 20.9917C11.7001 20.8869 12.0218 20.6898 12.2121 20.4132L12.2121 20.4132L12.215 20.4088L16.0351 14.7253L16.4472 15.0045L12.6251 20.691L12.6249 20.6912C12.259 21.2361 11.5347 21.5999 10.8 21.5999C10.5668 21.5999 10.3358 21.5596 10.1237 21.481Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n <path\n d=\"M19.6201 17.6H18.6201C17.7647 17.6 17.2258 17.3983 16.8985 17.0826C16.5746 16.7703 16.3701 16.2615 16.3701 15.45V5.65C16.3701 4.83853 16.5746 4.32972 16.8985 4.0174C17.2258 3.7017 17.7647 3.5 18.6201 3.5H19.6201C20.4756 3.5 21.0144 3.7017 21.3418 4.0174C21.6656 4.32972 21.8701 4.83853 21.8701 5.65V15.45C21.8701 16.2615 21.6656 16.7703 21.3418 17.0826C21.0144 17.3983 20.4756 17.6 19.6201 17.6ZM18.6201 4C18.3336 4 18.076 4.01649 17.8541 4.06699C17.6277 4.11848 17.4085 4.21206 17.2328 4.3877C17.0558 4.56469 16.9683 4.77976 16.9232 4.99011C16.8797 5.19328 16.8701 5.41977 16.8701 5.65V15.45C16.8701 15.6802 16.8797 15.9067 16.9232 16.1099C16.9683 16.3202 17.0558 16.5353 17.2328 16.7123C17.4085 16.8879 17.6277 16.9815 17.8541 17.033C18.076 17.0835 18.3336 17.1 18.6201 17.1H19.6201C19.9066 17.1 20.1642 17.0835 20.3862 17.033C20.6126 16.9815 20.8318 16.8879 21.0074 16.7123C21.1844 16.5353 21.2719 16.3202 21.317 16.1099C21.3605 15.9067 21.3701 15.6802 21.3701 15.45V5.65C21.3701 5.41977 21.3605 5.19328 21.317 4.99011C21.2719 4.77976 21.1844 4.56469 21.0074 4.3877C20.8318 4.21206 20.6126 4.11848 20.3862 4.06699C20.1642 4.01649 19.9066 4 19.6201 4H18.6201Z\"\n fill=\"#566563\"\n stroke=\"#566563\"\n />\n </svg>\n </i>\n </button>\n </div>\n </div>\n <div\n class=\"Related mt-2\"\n *ngIf=\"\n showFeedBackIconsIndex === i &&\n !isChatingWithAi &&\n chat?.relatedListItems &&\n chat?.relatedListItems.length > 0\n \"\n >\n <h5 *ngIf=\"chat?.type === 'ai'\">\n <i class=\"bx bx-list-check\"></i> Related\n </h5>\n <div class=\"card-container\" *ngIf=\"chat?.type === 'ai'\">\n <ul class=\"list-container\">\n <ng-container *ngFor=\"let item of chat?.relatedListItems\">\n <li (click)=\"fetchDataFor(item, chat)\">{{ item }}</li>\n </ng-container>\n </ul>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"cta-faqs quick-prompts-extended\"\n *ngIf=\"i == 0 && quickPrompts?.length\"\n >\n <!-- <div *ngFor=\"let tile of quickPrompts\" class=\"cta\"\n (click)=\"sendMessageWithTile(tile.prompt)\">\n Q: {{ tile.text }}\n </div> -->\n <div class=\"cta_suggestions\">\n <button\n *ngFor=\"let tile of quickPrompts\"\n (click)=\"sendMessageWithTile(tile.prompt)\"\n >\n <ng-container *ngIf=\"tile\">{{ tile.text }}</ng-container>\n </button>\n </div>\n </div>\n <div class=\"chat bot\" *ngIf=\"i == 0 && botSkills\">\n <div class=\"chat-box\">\n <div class=\"message\">\n <div class=\"time-cta\">\n <div class=\"Icon_TimeSTamp\">\n <div class=\"chat-avatar\">\n <img\n *ngIf=\"displayAvatarUrl || botIcon\"\n [src]=\"displayAvatarUrl || botIcon\"\n alt=\"Assistant\"\n class=\"chat-avatar-img\"\n />\n <span\n *ngIf=\"!(displayAvatarUrl || botIcon)\"\n class=\"chat-avatar-initials chat-avatar-initials-assistant\"\n >A</span\n >\n </div>\n <div\n class=\"dateTime\"\n [style.color]=\"dateTimeColor ? '' : ''\"\n >\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ chat?.time }}\n </div>\n </div>\n </div>\n <div\n class=\"chat-bubble-wrap\"\n [ngStyle]=\"{ background: bgBubbleAi || '#fff' }\"\n >\n <div class=\"chat-bubble-content\">\n <div\n class=\"SearchTitle ai\"\n [innerHTML]=\"processMessageForDisplay(botSkills)\"\n ></div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"chat?.suggestions?.length\">\n <h4 class=\"labelChat\">\n Here are some things EventsGPT Copilot can help you do:\n </h4>\n <div class=\"cta_suggestions\">\n <button\n *ngFor=\"let suggestion of chat?.suggestions\"\n (click)=\"sendMessageWithTile(suggestion)\"\n >\n <ng-container *ngIf=\"suggestion\">{{\n suggestion\n }}</ng-container>\n </button>\n </div>\n </div>\n <div\n *ngIf=\"\n chat?.action?.section_id == 'company_search' ||\n chat?.action?.section_id == 'user_search' ||\n chat?.action?.section_id == 'industry_company_search'\n \"\n >\n <div class=\"box\">\n <div class=\"tiktokwrapper\">\n <div\n class=\"tiktokshell\"\n *ngFor=\"let user of chat?.action.users\"\n >\n <div class=\"videoPhotobox\">\n <ng-conatiner\n *ngIf=\"user?.photoPath && !user.userVideosModel\"\n >\n <img [src]=\"user?.photoPath\" />\n </ng-conatiner>\n <ng-conatiner *ngIf=\"user.userVideosModel\">\n <app-video-player\n *ngIf=\"user?.userVideosModel\"\n [isDev]=\"isDev\"\n [currentUserId]=\"userId\"\n [videoObj]=\"user?.userVideosModel\"\n [user]=\"user\"\n [eventId]=\"eventId\"\n type=\"1\"\n >\n </app-video-player>\n </ng-conatiner>\n </div>\n\n <div\n class=\"noPhoto\"\n *ngIf=\"!user?.photoPath && !user.userVideosModel\"\n >\n <h3>\n {{ user.firstName | slice: 0 : 1\n }}{{ user.lastName | slice: 0 : 1 }}\n </h3>\n </div>\n <div class=\"overlymask\" *ngIf=\"!user.userVideosModel\"></div>\n <div class=\"onshell-content\">\n <div class=\"title-shell\">\n <h3>{{ user.firstName }} {{ user.lastName }}</h3>\n <h3 class=\"companyName\">{{ user.company }}</h3>\n </div>\n <div class=\"button-shell\">\n <button\n class=\"Connectbtn\"\n (click)=\"connectToUser(user.userId)\"\n >\n {{\n canConnect(user.userId)\n ? \"Connect\"\n : canDisconnect(user.userId)\n ? \"Disconnect\"\n : \"Request\n Sent\"\n }}\n </button>\n <button\n class=\"schedulebtn\"\n (click)=\"scheduleMeetingWithUser(user)\"\n >\n Schedule\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"chat?.action?.section_id == myUpcomingSessionAction\">\n <div class=\"agenda-items-wrapper\" class=\"agenda-items-wrapper\">\n <div class=\"list-view\">\n <div\n class=\"session-detail-wrapper card-background-session\"\n *ngFor=\"let upcomingSession of chat?.action.content\"\n >\n <div class=\"thumbnail\">\n <img\n alt=\"Introduction to the Imaging Radar Academy\"\n src=\"https://s27media.azureedge.net/8008/profile_pic/453cea2c-feba-11ed-8c0b-00155d025b0a.png\"\n class=\"\"\n />\n <!---->\n <!---->\n <!----><button\n class=\"play-btn color-primary\"\n title=\"Watch: Introduction to the Imaging Radar Academy\"\n >\n <span class=\"material-icons notranslate\">\n play_circle_outline\n </span>\n <!---->\n </button>\n <!---->\n <!---->\n </div>\n <!---->\n <!---->\n <div class=\"content p-3\">\n <div\n class=\"d-flex justify-content-between align-items-center\"\n >\n <div class=\"d-flex flex-column\">\n <p class=\"fs-xs mb-0 body-text-color\">\n {{\n upcomingSession.dateTimeRange.start\n | date\n : \"MM-dd-yyyy\n HH:mm\"\n : \"UTC\"\n }}\n -\n {{\n upcomingSession.dateTimeRange.end\n | date: \"MM-dd-yyyy HH:mm\" : \"UTC\"\n }}\n {{ upcomingSession.timeZone.id }}\n </p>\n <!---->\n <!---->\n <!-- <p class=\"fs-xs mb-2 color-secondary\" title=\"Session Type: Generative AI\">Generative AI </p> -->\n <!---->\n </div>\n <div class=\"d-flex align-items-center actions px-2\">\n <!---->\n <button\n (click)=\"\n performSessionAction(\n upcomingSession.id,\n 'view-session'\n )\n \"\n class=\"s27-btn-icon body-text-color\"\n title=\"View Session Information: Introduction to the Imaging Radar Academy\"\n >\n <span class=\"material-icons notranslate\">\n remove_red_eye\n </span>\n </button>\n\n <button\n (click)=\"\n performSessionAction(\n upcomingSession.id,\n 'add-to-agenda'\n )\n \"\n class=\"s27-btn-icon body-text-color\"\n >\n <span\n class=\"material-icons notranslate\"\n title=\"Add Session: Introduction to the Imaging Radar Academy to My agendaa\"\n >\n event_available\n </span>\n </button>\n <!---->\n <!---->\n <!---->\n <!---->\n\n <button\n (click)=\"\n performSessionAction(upcomingSession.id, 'play')\n \"\n class=\"s27-btn-icon body-text-color\"\n title=\"Copy session link to share\"\n >\n <span class=\"material-icons notranslate\">\n play_circle_outline\n </span>\n </button>\n <!---->\n </div>\n </div>\n <h2 class=\"body-text-color\">\n {{ upcomingSession.title }}\n </h2>\n <div\n class=\"session-description color-secondary\"\n [innerHTML]=\"sanitizeHtml(upcomingSession.description)\"\n ></div>\n <ul\n class=\"speakers grid-2-cols\"\n *ngFor=\"let speakerId of upcomingSession.speakers\"\n >\n <li class=\"\">\n <div class=\"image\" title=\"Blair Wunderlich\">\n <img\n alt=\"Blair Wunderlich\"\n [src]=\"speakers[speakerId]?.photoPath\"\n class=\"\"\n />\n <!---->\n <!---->\n <!---->\n </div>\n <!---->\n <div\n class=\"content pl-3\"\n style=\"text-transform: none\"\n >\n <div class=\"mb-0 body-text-color fs-xs fw-500\">\n {{ speakers[speakerId]?.firstName }}\n {{ speakers[speakerId]?.lastName }}\n </div>\n <div class=\"color-secondary fs-xxs\">\n {{ speakers[speakerId]?.jobTitle }}\n </div>\n <div class=\"color-secondary fs-xxs\">\n {{ speakers[speakerId]?.company }}\n </div>\n </div>\n <!---->\n </li>\n </ul>\n <!---->\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- Initial load: loading dots when fetching chat history (no \"Thinking\") -->\n <div class=\"chat bot chat-thinking chat-loading-dots\" *ngIf=\"loading && !isChatingWithAi\">\n <div class=\"chat-box\">\n <div class=\"message\">\n <div class=\"time-cta\">\n <div class=\"Icon_TimeSTamp\">\n <div class=\"chat-avatar\">\n <img *ngIf=\"displayAvatarUrl || botIcon\" [src]=\"displayAvatarUrl || botIcon\" alt=\"Assistant\" class=\"chat-avatar-img\" />\n <span *ngIf=\"!(displayAvatarUrl || botIcon)\" class=\"chat-avatar-initials chat-avatar-initials-assistant\">A</span>\n </div>\n <div class=\"dateTime\" [style.color]=\"dateTimeColor ? '' : ''\">\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ getLoadingTime() }}\n </div>\n </div>\n </div>\n <div class=\"thinking-row\">\n <div class=\"thinking-dots\">\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n </div>\n <span class=\"thinking-text\">{{ getTranslation(\"Loading\") || \"Loading\" }}...</span>\n </div>\n </div>\n </div>\n </div>\n <!-- Thinking: only when user has sent a message and AI is responding -->\n <div class=\"chat bot chat-thinking\" *ngIf=\"isChatingWithAi && !executingWorkflow\">\n <div class=\"chat-box\">\n <div class=\"message\">\n <div class=\"time-cta\">\n <div class=\"Icon_TimeSTamp\">\n <div class=\"chat-avatar\">\n <img *ngIf=\"displayAvatarUrl || botIcon\" [src]=\"displayAvatarUrl || botIcon\" alt=\"Assistant\" class=\"chat-avatar-img\" />\n <span *ngIf=\"!(displayAvatarUrl || botIcon)\" class=\"chat-avatar-initials chat-avatar-initials-assistant\">A</span>\n </div>\n <div class=\"dateTime\" [style.color]=\"dateTimeColor ? '' : ''\">\n <span>{{ getTranslation(\"Assistant\") }}</span>\n {{ getLoadingTime() }}\n </div>\n </div>\n </div>\n <div class=\"thinking-row\">\n <div class=\"thinking-dots\">\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n <span class=\"thinking-dot\"></span>\n </div>\n <span class=\"thinking-text\">{{ getTranslation(\"Thinking\") || \"Thinking\" }}...</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n <!-- <div #chatMain></div> -->\n <div\n *ngIf=\"openWorkflowInput && selectedWorkflow && !executingWorkflow\"\n class=\"chatFooterWrapper\"\n >\n <!-- new UI for Chat Message Section by Amit -->\n <div class=\"chat-footer-upt\">\n <div class=\"topinfo-containerbox\">\n <div class=\"agents_note_wrapper\">\n <div>\n <h6>{{ selectedWorkflow?.Name }}</h6>\n {{ selectedWorkflow?.Description }}\n </div>\n </div>\n\n <div class=\"agents_note_wrapper\">\n <button\n mat-icon-button\n class=\"closeButtonSource\"\n (click)=\"toggleWorkflows(false)\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </div>\n </div>\n <div class=\"bottombox-wrapper\">\n <!-- here i need to loop through all the input fields selectedWorkflow.Trigger.InputSchema and render the input fields -->\n <!-- Form for Workflow Inputs -->\n <form\n [formGroup]=\"workflowForm\"\n (ngSubmit)=\"onWorkflowSubmit()\"\n class=\"form-container\"\n >\n <div\n *ngFor=\"let input of selectedWorkflow?.Trigger?.InputSchema\"\n class=\"form-group\"\n >\n <label>{{ input.Label }}</label>\n\n <!-- Handle Text Input or Text Area based on requirement -->\n <textarea\n *ngIf=\"input.Type === 'string'\"\n formControlName=\"{{ input.InputId }}\"\n [placeholder]=\"input.Placeholder\"\n [rows]=\"2\"\n [required]=\"input.Required\"\n class=\"form-control\"\n ></textarea>\n\n <!-- Dropdown for Select Options -->\n <select\n *ngIf=\"input.Type === 'select'\"\n formControlName=\"{{ input.InputId }}\"\n class=\"form-control\"\n >\n <option\n *ngFor=\"let option of input.Options\"\n [value]=\"option.Value\"\n >\n {{ option.Label }}\n </option>\n </select>\n </div>\n\n <!-- Submit button aligned to the right -->\n <div class=\"form-group\">\n <button type=\"submit\" class=\"btn btn-primary submit-button\">\n Submit\n </button>\n </div>\n </form>\n </div>\n </div>\n\n <!-- new UI for Chat Message Section by Amit -->\n </div>\n <div *ngIf=\"!openWorkflowInput\" class=\"chatFooterWrapper\">\n <!-- new UI for Chat Message Section by Amit -->\n <div class=\"chat-footer-upt\">\n <div class=\"topinfo-containerbox\" *ngIf=\"!checkForCop29BotId()\">\n <div class=\"agents_note_wrapper\">\n <div class=\"agents-dropdown-wrapper\">\n <div class=\"dropdown-wrapper\" (click)=\"toggleDropdown()\">\n <div class=\"dropdown-header\">\n <span>{{ getDropdownHeaderText() }}</span>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n viewBox=\"0 0 24 24\"\n >\n <path d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n <div class=\"dropdown-menu\" *ngIf=\"isDropdownOpen\">\n <label (click)=\"onSelectAll()\">\n <input type=\"checkbox\" [checked]=\"areAllSelected()\" />\n All\n </label>\n <label\n *ngFor=\"let agent of agents\"\n (click)=\"onAgentChange(agent)\"\n >\n <input type=\"checkbox\" [(ngModel)]=\"agent.selected\" />\n {{ agent.agentName }}\n </label>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"agents_note_wrapper\">\n <div class=\"agents-dropdown-wrapper\">\n <div class=\"dropdown-wrapper\" (click)=\"toggleWorkflows()\">\n <div class=\"dropdown-header\">\n <svg\n stroke=\"currentColor\"\n fill=\"currentColor\"\n stroke-width=\"0\"\n viewBox=\"0 0 256 256\"\n class=\"h-5 w-5\"\n height=\"1.3em\"\n width=\"1.3em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M245.66,74.34l-32-32a8,8,0,0,0-11.32,11.32L220.69,72H192a74.49,74.49,0,0,0-28.35,6.73c-13.62,6.29-30.83,19.71-35.54,48-5.32,31.94-29.1,39.22-41,40.86a40,40,0,1,0,.18,16.06A71.65,71.65,0,0,0,108.13,178C121.75,172,139,158.6,143.89,129.31,150.65,88.77,190.34,88,192,88h28.69l-18.35,18.34a8,8,0,0,0,11.32,11.32l32-32A8,8,0,0,0,245.66,74.34ZM48,200a24,24,0,1,1,24-24A24,24,0,0,1,48,200Z\"\n ></path></svg\n > Workflows\n </div>\n <div class=\"dropdown-menu\" *ngIf=\"isWorkflowOpen\">\n <label\n *ngFor=\"let orgWorkflow of orgWorkflows\"\n (click)=\"onWorkflowSelected(orgWorkflow)\"\n >\n {{ orgWorkflow.Name }}\n </label>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"bottombox-wrapper\">\n <!-- <input [disabled]=\"isChatingWithAi\" type=\"text\" class=\"form-control-1 s27-scroll\"\n \n placeholder=\"Ask anything...\" [style.background]=\"formFieldBgColor ? formFieldBgColor : ''\"\n [style.color]=\"formFieldTextColor ? formFieldTextColor : ''\" [(ngModel)]=\"input\"\n (keyup.enter)=\"handleSubmit()\" #myInput /> -->\n <textarea\n [disabled]=\"isChatingWithAi\"\n class=\"form-control-1 s27-scroll chat-textarea\"\n placeholder=\"{{ getTranslation('Ask anything') }}\"\n [(ngModel)]=\"input\"\n (keydown)=\"handleKeydown($event)\"\n (input)=\"adjustTextareaHeight($event)\"\n #myInput\n ></textarea>\n\n \n\n <button\n class=\"btn cta-chat rotate\"\n (click)=\"handleSubmit()\"\n [style.background]=\"sendButtonColor ? sendButtonColor : ''\"\n [style.color]=\"sendButtonTextColor ? sendButtonTextColor : ''\"\n title=\"{{ getTranslation('Send Message') }}\"\n style=\"margin-right: 1px\"\n >\n <svg\n stroke=\"currentColor\"\n fill=\"currentColor\"\n stroke-width=\"0\"\n viewBox=\"0 0 512 512\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M476.59 227.05l-.16-.07L49.35 49.84A23.56 23.56 0 0027.14 52 24.65 24.65 0 0016 72.59v113.29a24 24 0 0019.52 23.57l232.93 43.07a4 4 0 010 7.86L35.53 303.45A24 24 0 0016 327v113.31A23.57 23.57 0 0026.59 460a23.94 23.94 0 0013.22 4 24.55 24.55 0 009.52-1.93L476.4 285.94l.19-.09a32 32 0 000-58.8z\"\n ></path>\n </svg>\n <!-- SEND -->\n </button>\n\n <button\n class=\"btn cta-chat mr-1 voice-btn\"\n (click)=\"openVoiceModal()\"\n type=\"button\"\n title=\"Voice Agent\"\n [style.background]=\"sendButtonColor ? sendButtonColor : ''\"\n [style.color]=\"sendButtonTextColor ? sendButtonTextColor : ''\"\n >\n <svg\n class=\"voice-btn-icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n >\n <g fill=\"none\" fill-rule=\"evenodd\">\n <g fill-rule=\"nonzero\">\n <path\n d=\"M24,0 L24,24 L0,24 L0,0 L24,0 Z M12.5934901,23.257841 L12.5819402,23.2595131 L12.5108777,23.2950439 L12.4918791,23.2987469 L12.4918791,23.2987469 L12.4767152,23.2950439 L12.4056548,23.2595131 C12.3958229,23.2563662 12.3870493,23.2590235 12.3821421,23.2649074 L12.3780323,23.275831 L12.360941,23.7031097 L12.3658947,23.7234994 L12.3769048,23.7357139 L12.4804777,23.8096931 L12.4953491,23.8136134 L12.4953491,23.8136134 L12.5071152,23.8096931 L12.6106902,23.7357139 L12.6232938,23.7196733 L12.6232938,23.7196733 L12.6266527,23.7031097 L12.609561,23.275831 C12.6075724,23.2657013 12.6010112,23.2592993 12.5934901,23.257841 L12.5934901,23.257841 Z M12.8583906,23.1452862 L12.8445485,23.1473072 L12.6598443,23.2396597 L12.6498822,23.2499052 L12.6498822,23.2499052 L12.6471943,23.2611114 L12.6650943,23.6906389 L12.6699349,23.7034178 L12.6699349,23.7034178 L12.678386,23.7104931 L12.8793402,23.8032389 C12.8914285,23.8068999 12.9022333,23.8029875 12.9078286,23.7952264 L12.9118235,23.7811639 L12.8776777,23.1665331 C12.8752882,23.1545897 12.8674102,23.1470016 12.8583906,23.1452862 L12.8583906,23.1452862 Z M12.1430473,23.1473072 C12.1332178,23.1423925 12.1221763,23.1452606 12.1156365,23.1525954 L12.1099173,23.1665331 L12.0757714,23.7811639 C12.0751323,23.7926639 12.0828099,23.8018602 12.0926481,23.8045676 L12.108256,23.8032389 L12.3092106,23.7104931 L12.3186497,23.7024347 L12.3186497,23.7024347 L12.3225043,23.6906389 L12.340401,23.2611114 L12.337245,23.2485176 L12.337245,23.2485176 L12.3277531,23.2396597 L12.1430473,23.1473072 Z\"\n fill=\"none\"\n ></path>\n <path\n d=\"M12,3 C12.51285,3 12.9355092,3.38604429 12.9932725,3.88337975 L13,4 L13,20 C13,20.5523 12.5523,21 12,21 C11.48715,21 11.0644908,20.613973 11.0067275,20.1166239 L11,20 L11,4 C11,3.44772 11.4477,3 12,3 Z M8,6 C8.55228,6 9,6.44772 9,7 L9,17 C9,17.5523 8.55228,18 8,18 C7.44772,18 7,17.5523 7,17 L7,7 C7,6.44772 7.44772,6 8,6 Z M16,6 C16.5523,6 17,6.44772 17,7 L17,17 C17,17.5523 16.5523,18 16,18 C15.4477,18 15,17.5523 15,17 L15,7 C15,6.44772 15.4477,6 16,6 Z M4,9 C4.55228,9 5,9.44772 5,10 L5,14 C5,14.5523 4.55228,15 4,15 C3.44772,15 3,14.5523 3,14 L3,10 C3,9.44772 3.44772,9 4,9 Z M20,9 C20.51285,9 20.9355092,9.38604429 20.9932725,9.88337975 L21,10 L21,14 C21,14.5523 20.5523,15 20,15 C19.48715,15 19.0644908,14.613973 19.0067275,14.1166239 L19,14 L19,10 C19,9.44772 19.4477,9 20,9 Z\"\n fill=\"#09244B\"\n ></path>\n </g>\n </g>\n </svg>\n <span class=\"voice-btn-text\">Voice</span>\n </button>\n </div>\n </div>\n\n <!-- new UI for Chat Message Section by Amit -->\n </div>\n\n <div class=\"NoteTxt\">\n <div class=\"note\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12.882\"\n height=\"12.883\"\n viewBox=\"0 0 12.882 12.883\"\n >\n <path\n id=\"Icon_ion-shield-checkmark\"\n data-name=\"Icon ion-shield-checkmark\"\n d=\"M15.106,4.532a.46.46,0,0,0-.378-.424A20.132,20.132,0,0,1,8.881,2.291a.46.46,0,0,0-.379,0A20.132,20.132,0,0,1,2.655,4.108a.46.46,0,0,0-.378.424A11.3,11.3,0,0,0,2.98,9.4a10.049,10.049,0,0,0,2.06,3.235A10.516,10.516,0,0,0,8.521,15.1a.46.46,0,0,0,.345,0,10.516,10.516,0,0,0,3.481-2.465A10.049,10.049,0,0,0,14.4,9.4,11.3,11.3,0,0,0,15.106,4.532Zm-3.767,2.16L8.153,10.373a.46.46,0,0,1-.328.159H7.806a.46.46,0,0,1-.322-.131L6.069,9.014a.46.46,0,1,1,.644-.657L7.777,9.4,10.644,6.09a.46.46,0,0,1,.7.6Z\"\n transform=\"translate(-2.25 -2.25)\"\n fill=\"#06f\"\n />\n </svg>\n\n <span class=\"text\">{{\n getTranslation(\n \"Your personal or company information is kept private and secure\n within this chat.\"\n )\n }}</span>\n </div>\n </div>\n </mat-drawer-content>\n </mat-drawer>\n <mat-drawer\n class=\"drawer edit-boxDrawer\"\n style=\"width: 45%\"\n #sourcesDrawer\n [position]=\"'end'\"\n [mode]=\"'over'\"\n [style.background]=\"\n 'linear-gradient(' + (bgGradient ? bgGradient.join(', ') : '') + ')'\n \"\n >\n <mat-drawer-content>\n <div class=\"sourceDraweContainer\">\n <div class=\"container-fluid\">\n <button\n mat-icon-button\n class=\"closeButtonSource\"\n (click)=\"onCloseSource()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n <h1>{{ currentSourcesList?.length }} Sources</h1>\n <!-- <p>Tell me about latest news from Mistral about AI agents announcement done this month</p> -->\n <hr />\n <ul class=\"sources-list\">\n <li *ngFor=\"let item of currentSourcesList; let si = index\">\n <!-- <input type=\"checkbox\" id=\"source1\"> -->\n <div class=\"source-content\" (click)=\"openLinkInNewTab(item.link)\">\n <label for=\"source1\">\n <span class=\"source-title\"\n ><span class=\"ml-1\">{{ si + 1 }}.</span\n >{{ item.title }}</span\n >\n <span class=\"image-container\">\n <img\n class=\"relative block\"\n [src]=\"getFaviconUrl(item.link)\"\n [alt]=\"getDomainName(item.link) + ' favicon'\"\n />\n <span> {{ getDomainName(item.link) }}</span>\n </span>\n <span class=\"source-description\">{{ item.desc }}</span>\n </label>\n </div>\n </li>\n </ul>\n </div>\n </div>\n </mat-drawer-content>\n </mat-drawer>\n <mat-drawer\n class=\"drawer edit-boxDrawer\"\n style=\"width: 45%\"\n #editorsDrawer\n [position]=\"'end'\"\n [mode]=\"'push'\"\n [style.background]=\"\n 'linear-gradient(' + (bgGradient ? bgGradient.join(', ') : '') + ')'\n \"\n >\n <mat-drawer-content>\n <lib-bot-html-editor\n *ngIf=\"isContentLoaded\"\n [editorContent]=\"currentMessageForEditor\"\n [isDocInEditMode]=\"isDocInEditMode\"\n [documentContent]=\"documentContent\"\n [conversationId]=\"conversationId\"\n [botId]=\"botId\"\n ></lib-bot-html-editor>\n </mat-drawer-content>\n </mat-drawer>\n</mat-drawer-container>\n\n<div *ngIf=\"showWorkflowExecutionDetails\" class=\"modal\">\n <div class=\"modal-content\">\n <div class=\"close-wrapper\">\n <span class=\"close_pop\" (click)=\"closeModal()\">×</span>\n </div>\n <div class=\"titleSection\">\n <!-- Workflow Title -->\n <h2>{{ workflowExecutionDetails.WorkflowName }}</h2>\n <!-- Workflow Title -->\n </div>\n <!-- Inputs Section -->\n <div class=\"inputs-section\">\n <h3>Inputs</h3>\n <ul>\n <li\n *ngFor=\"let input of objectToArray(workflowExecutionDetails.Inputs)\"\n >\n {{ input.key }}: {{ input.value }}\n </li>\n </ul>\n </div>\n\n <!-- Actions Section (Displayed as Timeline) -->\n <div class=\"actions-section\">\n <h3>Agent Actions</h3>\n <div class=\"timeline\">\n <div\n *ngFor=\"let action of workflowExecutionDetails.Actions\"\n class=\"timeline-item\"\n >\n <div class=\"timestamp-section\">\n <h4>{{ action.ActionName || action.Name }}</h4>\n <p><strong></strong> {{ action.InsertTimeStamp }}</p>\n </div>\n <p [innerHTML]=\"processMessageForDisplay(action.Output)\"></p>\n <!-- <pre>{{ action.Output }}</pre> -->\n </div>\n </div>\n </div>\n\n <!-- Insert Timestamp -->\n <div class=\"timestamp-section\">\n <p>\n <strong>Inserted At:</strong>\n {{ workflowExecutionDetails.InsertTimeStamp }}\n </p>\n </div>\n </div>\n</div>\n",
|
|
3586
3586
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
3587
|
-
styles: ["@import url(\"https://e1cdn.social27.com/digitalevents/liteversion/fonts/segoe-ui/stylesheet.css\");.bot-sticky-header-chat{background:#fff;border:none!important;border-bottom:1px solid #ddd;box-shadow:2px 0 5px #e1e1e1!important;padding:0 0 10px;padding:10px 15px!important;position:fixed;top:0!important;transition:all 1s;width:100%;z-index:100}@media (max-width:768px){.bot-sticky-header-chat{top:0!important}}#botAllChat{padding:0 20px!important}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:#f1f1f1}::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#e5ccbc}body{overflow:hidden}.ios-device .drawer .chat-footer .form-control{font-size:16px}.hivegpt-chat-bot-wrapper{background:transparent!important;height:100%;inset:0;opacity:0;position:fixed;visibility:hidden;z-index:999999}.hivegpt-chat-bot-wrapper.mat-drawer-container-has-open{background:transparent!important;opacity:1;transition:all .3s;visibility:visible;z-index:999999}.hivegpt-chat-bot-wrapper .mat-drawer:not(.mat-drawer-side){box-shadow:none}.hivegpt-chat-bot-wrapper mat-drawer{background-color:#f2f2f2;background-image:none!important;width:100%}.hivegpt-chat-bot-wrapper mat-drawer.full-width-drawer{max-width:100%}.hivegpt-chat-bot-wrapper .mat-drawer-content{display:flex;flex-direction:column}.hivegpt-chat-bot-wrapper .chat-header{padding:16px 40px;width:100%}.hivegpt-chat-bot-wrapper .chat-header h2{font-family:Segoe UI,sans-serif;font-size:36px;font-weight:500;letter-spacing:-.72px;line-height:108%;margin:0;text-transform:uppercase}.hivegpt-chat-bot-wrapper .chat-header .closeIcon{align-items:center;background:transparent;border:none;border-radius:50%;display:inline-flex;font-size:18px;height:35px;justify-content:center;outline:none;padding:0;position:absolute;right:12px;top:16px;width:35px}.hivegpt-chat-bot-wrapper .chat-main{display:flex;flex:1;flex-direction:column;justify-content:space-between;overflow-y:auto;width:100%}.hivegpt-chat-bot-wrapper .chat-main .innerChat{overflow-y:auto;padding-top:72px!important;width:100%}.hivegpt-chat-bot-wrapper .chat-main .ai h3{font-size:1.3rem!important}.hivegpt-chat-bot-wrapper .chat-main .chat-box{width:100%}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message{margin-left:50px;margin-top:10px;min-height:40px;position:relative}@media (max-width:768px){.hivegpt-chat-bot-wrapper .chat-main .chat-box .message{margin-left:0}}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message p{color:#000;color:#525252;font-family:Segoe UI,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:160%;margin:0;text-align:left}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message p a{color:#17235b!important;cursor:pointer!important;font-weight:700;text-decoration:underline}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta{align-items:end;bottom:-7px;display:flow-root;gap:10px;grid-gap:10px;position:relative;right:-10px;z-index:5}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta button{background:transparent;border:none;color:#566563;cursor:pointer;padding:0;transition:all .3s}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta button i{display:inline-block}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta button:hover{color:#17235b}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta button.up:hover i{animation:thumbsUpAnimation .5s ease-in-out;animation-fill-mode:forwards}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta button.down:hover i{animation:thumbsDownAnimation .5s ease-in-out;animation-fill-mode:forwards}.hivegpt-chat-bot-wrapper .chat-main .chat{margin-bottom:20px}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .chat-box .message{margin-left:0}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .chat-box .message .chat-bubble-wrap{background:#fff;border-radius:4px 14px 14px 14px;box-sizing:border-box;margin-top:6px;max-width:100%;overflow-wrap:break-word;padding:10px 14px 10px 26px;width:100%;word-break:break-word}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .chat-box .message .chat-bubble-wrap .chat-bubble-content{margin:0;max-width:100%;overflow-wrap:break-word;padding:0;width:100%;word-break:break-word}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .chat-box .message .chat-bubble-wrap .chat-bubble-content>div{margin:0;max-width:100%;overflow-wrap:break-word;padding:0;word-break:break-word}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .chat-box .message .chat-bubble-wrap .chat-bubble-content>div *{max-width:100%}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .Icon_TimeSTamp{margin:0}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser{color:#fff!important;text-align:right}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box{margin-left:auto;margin-right:0;width:-moz-fit-content;width:fit-content}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message{align-items:flex-end;display:flex;flex-direction:column;margin-left:0;margin-right:0;max-width:100%;padding-right:0;width:-moz-fit-content;width:fit-content}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message .chat-bubble-wrap{background:#183988;border-radius:14px 4px 14px 14px;color:#fff!important;margin-top:6px;max-width:100%;overflow-wrap:break-word;padding:10px 14px;word-break:break-word}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message .chat-bubble-wrap .chat-bubble-content,.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message .chat-bubble-wrap .chat-bubble-content>div{max-width:100%;overflow-wrap:break-word;word-break:break-word}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message .chat-bubble-wrap p,.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message p{color:#fff!important;text-align:left}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .dateTime{margin-left:0;margin-right:10px;text-align:right}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .dateTime span{margin-left:0;margin-right:5px}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .time-cta{justify-content:flex-end}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .Icon_TimeSTamp{justify-content:flex-end;margin:0}.hivegpt-chat-bot-wrapper .chat-main .chat .Icon_TimeSTamp{align-content:center;align-items:center;display:flex;justify-content:left;margin:0 -60px;width:auto}@media (max-width:768px){.hivegpt-chat-bot-wrapper .chat-main .chat .Icon_TimeSTamp{margin:0}}.hivegpt-chat-bot-wrapper .chat-main .chat .dateTime{color:#333232;font-size:15px;font-style:normal;font-weight:300;line-height:140%}.hivegpt-chat-bot-wrapper .chat-main .chat .dateTime span{color:#000;font-size:15px;font-style:normal;font-weight:500;line-height:140%;margin-left:15px;margin-right:5px}.hivegpt-chat-bot-wrapper .chat-main .chat:last-of-type{margin-bottom:0}.hivegpt-chat-bot-wrapper .chatFooterWrapper{background:#fff;border:2px solid hsla(0,0%,85.5%,.5882352941176471);border-radius:10px;box-shadow:2px 0 5px #e1e1e1;margin:0 15px 15px;margin-top:10px!important;transition:all .5s;width:auto}.hivegpt-chat-bot-wrapper .chatFooterWrapper:hover{border:2px solid hsla(0,0%,72.2%,.5882352941176471);box-shadow:2px 0 4px #ddd}.hivegpt-chat-bot-wrapper .chatFooterWrapper .chat-footer-upt{padding:4px}.hivegpt-chat-bot-wrapper .chatFooterWrapper .note{align-items:center;background:rgba(27,117,187,.050980392156862744);border-radius:15px;color:#000;display:inline-flex;font-size:12px;gap:8px;line-height:1;margin:0 auto 4px;padding:10px 25px}.hivegpt-chat-bot-wrapper .chatFooterWrapper .note a{text-transform:capitalize}.hivegpt-chat-bot-wrapper .chatFooterWrapper .note i{font-size:18px}.hivegpt-chat-bot-wrapper .chatFooterWrapper .note i svg{height:18px;width:18px}.hivegpt-chat-bot-wrapper .chatFooterWrapper .note span{flex:1;gap:4px;line-height:1.3}.hivegpt-chat-bot-wrapper .chat-footer{align-items:center;display:flex;gap:8px;justify-content:space-between;padding:0;position:relative}.hivegpt-chat-bot-wrapper .chat-footer .form-control{background:#fff!important;border:0;line-height:21px;outline:0;padding:10px;position:relative;width:100%}.hivegpt-chat-bot-wrapper .chat-footer .form-control::-moz-placeholder{color:#6c7a78}.hivegpt-chat-bot-wrapper .chat-footer .form-control::placeholder{color:#6c7a78}.hivegpt-chat-bot-wrapper .chat-footer .form-control:focus{border-color:#e5ccbc}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer{align-items:center;display:flex;gap:8px;justify-content:space-between;margin-bottom:10px;position:absolute;right:15px;text-align:right}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer .btn{color:#000;font-weight:500;gap:8px;max-width:150px;padding:0}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer .cta-chat{align-items:center;background:transparent!important;border:none;border-radius:0;box-shadow:0 1px 2px 0 rgba(16,24,40,.05);display:inline-flex;font-size:20px;height:auto;justify-content:center;width:auto}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer .cta-chat:hover{opacity:.8}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer .cta-again{background:#17235b;border:1px solid #17235b;color:#fff}.hivegpt-chat-bot-wrapper .cta-faqs{align-items:flex-end;display:flex;flex-direction:column;flex-wrap:wrap;gap:8px;margin-left:auto;max-width:80%;padding:10px 0 0}.hivegpt-chat-bot-wrapper .cta-faqs .cta{background:transparent;border:1px solid #c9a893;border-radius:20px 20px 0 20px;color:#333;cursor:pointer;font-family:Segoe UI,sans-serif;font-size:14px;font-style:normal;font-weight:500;line-height:160%;margin:0;min-height:44px;padding:12px 20px;text-align:left;text-decoration:none;transition:all .3s;white-space:pre-line}.spinner{align-items:center;display:flex;gap:2px;justify-content:center}.spinner>div{animation:bouncedelay 1.4s ease-in-out infinite;animation-fill-mode:both;background-color:#173330;border-radius:100%;display:inline-block;height:5px;width:5px}.spinner .bounce1{animation-delay:-.32s}.spinner .bounce2{animation-delay:-.16s}@keyframes bouncedelay{0%,80%,to{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.time-cta{align-items:center;display:flex;gap:8px;justify-content:start;margin-top:5px}@keyframes thumbsUpAnimation{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}@keyframes thumbsDownAnimation{0%,to{transform:translateY(0)}50%{transform:translateY(3px)}}@media (max-width:767px){.hivegpt-chat-bot-wrapper .chat-footer{padding:10px 24px}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer .cta-chat{max-width:100%}.hivegpt-chat-bot-wrapper .chat-footer .form-control{height:80px}.hivegpt-chat-bot-wrapper .chat-header .closeIcon{height:28px;right:8px;top:8px;width:28px}.hivegpt-chat-bot-wrapper .chat-header .closeIcon span{font-size:14px}.hivegpt-chat-bot-wrapper .chat-header{padding:10px 24px}.hivegpt-chat-bot-wrapper .chat-header h2{font-size:20px}.cta-faqs{padding:10px 0 0}}.body-overflow-hidden{overflow:hidden}.chat-button{align-items:center;background:#17235b;border:#17235b;border-radius:50%;color:#fff;display:inline-flex;font-size:24px;height:50px;justify-content:center;width:50px}textarea{caret-color:#000}.labelChat{font-size:14px;font-weight:400;margin:0 0 10px}.chatType h4{color:#566563;text-align:center}.chatType ul{align-items:center;background:#fff;border-radius:10px;box-shadow:0 .3px .9px rgba(0,0,0,.12),0 1.6px 3.6px rgba(0,0,0,.16);display:flex;justify-content:center;list-style:none;margin:0 0 20px;padding:4px}.chatType ul li{flex:1}.chatType ul li button{align-items:center;background:#fff;border:none;border-radius:10px;font-weight:600;min-height:48px;padding:.375rem;text-align:center;text-shadow:1px 0 rgba(0,0,0,.2);width:100%}.chatType ul li button.active{background:linear-gradient(96deg,#761c79 -10.61%,#761c79 84.59%);box-shadow:0 1px 2px 0 rgba(16,24,40,.05);color:#fff}.cta_suggestions{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:20px}.cta_suggestions button{background:#fff;border:1px solid #174ae4;border-radius:10px;box-shadow:0 1.6px 3.6px 0 rgba(0,0,0,.13),0 .3px .9px 0 rgba(0,0,0,.1);color:#1543cd;font-size:14px;font-weight:600;line-height:1.2;padding:8px 12px;position:relative;text-align:left;transition:all .3s}.cta_suggestions button:hover{background:#eff3ff}.balanced .chat-footer .cta-footer .cta-chat,.balanced .chat-main .chat.botUser .chat-box .message,.balanced .chatType ul li button.active{color:#000}.balanced .chat-main .innerChat .title p span{color:#06f}.balanced mat-drawer{background-image:linear-gradient(180deg,rgba(88,190,251,.05) 60%,rgba(0,102,255,.2) 96.27%)}.balanced .cta_suggestions button:hover{border:1px solid #06f}.precise .chat-footer .cta-footer .cta-chat,.precise .chat-main .chat.botUser .chat-box .message{background:linear-gradient(96deg,#69ca6d -10.61%,#4caf50 84.59%)}.precise .chatType ul li button.active{background:linear-gradient(96deg,#4caf50 -10.61%,#4caf50 84.59%);color:#fff}.precise .chat-main .innerChat .title p span{color:#4caf50}.precise mat-drawer{background-image:linear-gradient(180deg,rgba(76,175,80,.05) 60%,rgba(76,175,80,.3) 96.27%)}.precise .cta_suggestions button:hover{border:1px solid #4caf50}.title{margin-bottom:20px}.title h2{font-size:22px;margin:0}.title h2 span{align-items:center;color:#000;display:inline-flex;gap:10px}.title h2 i{color:#000;font-size:30px;line-height:1}.title h2 i svg{height:30px;width:30px}.title p{font-weight:600;margin:0}.title p span{color:#000}.agenda-items-wrapper{padding-bottom:15px;padding-top:15px}@media (max-width:576px){.list-view .session-detail-wrapper{border:none;flex-direction:column}}.card-background-session{background:#fff;border-radius:8px}.card-background-session .body-text-color{color:#111!important}.card-background-session h2{-webkit-box-orient:vertical;-webkit-line-clamp:1;display:-webkit-box;font-size:20px;line-clamp:1;margin-bottom:8px;overflow:hidden}.card-background-session .session-description{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:#111!important;display:-webkit-box;font-size:14px;line-clamp:2;overflow:hidden}.card-background-session .color-secondary{color:#111!important}.card-background-session p{font-size:14px}.list-view .session-detail-wrapper .s27-btn-icon{background:transparent;border:transparent}.list-view .session-detail-wrapper{border-left:3px solid transparent;display:flex;margin-bottom:16px}.thumbnail{align-items:center;display:flex;height:160px;justify-content:center;min-width:160px;position:relative;width:160px}.thumbnail img{-o-object-fit:cover;height:100%;object-fit:cover;width:100%}@media (max-width:576px){.thumbnail{height:160px;min-height:unset;width:100%}}.thumbnail .play-btn{align-items:center;background-color:transparent;border:0;bottom:0;display:flex;font-size:60px;justify-content:center;left:0;position:absolute;right:0;top:0;width:100%}.thumbnail .play-btn span{font-size:80px;text-shadow:0 0 14px rgba(74,74,74,.45)}.content{flex-grow:1}.actions{background-color:transparent!important}.speakers{margin-bottom:0;margin-top:10px;padding:0}.speakers li{align-items:unset;display:flex}.speakers li .content{font-size:12px!important}.speakers .image{border-radius:100%;height:40px;min-width:40px;overflow:hidden;width:40px}.speakers img{-o-object-fit:cover;height:100%;object-fit:cover;width:100%}.grid-2-cols{display:grid;grid-gap:15px;grid-template-columns:calc(55% - 10px) calc(50% - 10px);padding-right:20px}@media (max-width:768px){.grid-2-cols{grid-template-columns:calc(50% - 10px) calc(50% - 10px)}}@media (max-width:575px){.grid-3-cols{grid-template-columns:100%}}.quick-prompts-extended{align-items:flex-start!important;margin-left:0!important}.border-shape .s27-scroll::-webkit-scrollbar{border-radius:30px;width:3px}.border-shape .s27-scroll::-webkit-scrollbar-track{background:#f1f1f1;border-radius:30px}.border-shape .s27-scroll::-webkit-scrollbar-thumb{background:#888;border-radius:30px}.box{display:table;height:275px;margin:10px 0;width:100%}.tiktokwrapper{display:grid;gap:10px;grid-template-columns:repeat(2,1fr);height:100%}.tiktokwrapper .tiktokshell{background:#3d2b8f;border:2px solid #fff;border-radius:5px;box-shadow:0 0 6px #494949;height:100%;min-height:275px;min-width:160px;position:relative;width:100%}.tiktokwrapper .overlymask{background-image:url(https://e1cdn.social27.com/digitalevents/HiveGpt/screen-overlay.png);background-position:0 0;bottom:0;height:100%;left:0;position:absolute;width:100%;z-index:6}.tiktokwrapper .videoPhotobox{bottom:0;height:272px;left:0;overflow:hidden;position:absolute;width:auto;z-index:6}.tiktokwrapper .videoPhotobox video{-o-object-fit:cover;border-radius:0;cursor:pointer;height:270px;object-fit:cover;outline:0;transition:.3s ease-in-out;width:100%}.tiktokwrapper .videoPhotobox img{-o-object-fit:cover;height:100%;object-fit:cover;width:100%}.tiktokwrapper .playBtn{align-items:center;border:none;cursor:pointer;display:flex;height:40px;justify-content:center;left:0;margin:0 auto;position:absolute;right:0;top:105px;transition:all 1s;width:40px;z-index:10}.tiktokwrapper .playBtn:hover{transform:scale(1.2)}.tiktokwrapper .noPhoto{align-items:center;border:none;cursor:pointer;display:flex;height:40px;justify-content:center;left:0;margin:0 auto;position:absolute;right:0;top:105px;transition:all 1s;z-index:6}.tiktokwrapper .noPhoto h3{color:#fff;font-size:46px}.tiktokwrapper .onshell-content{bottom:10px;left:5px;position:absolute;z-index:10}.tiktokwrapper .onshell-content .title-shell{margin:0 10px}.tiktokwrapper .onshell-content h3{color:#fff;font-size:13px;font-weight:500}.tiktokwrapper .onshell-content .companyName{color:#eaeaea;font-size:12px;font-weight:400}.tiktokwrapper .onshell-content .button-shell button{background:#4e4e4e;border:none;border-radius:2px;color:#fff;font-size:11px;margin:0 1px;padding:4px 7px;text-transform:capitalize}.tiktokwrapper .onshell-content .Connectbtn{background:linear-gradient(149deg,#06f,#06f)!important}.skeleton-box{background-color:#dddbdd;display:inline-block;height:1em;overflow:hidden;position:relative}.skeleton-box:after{animation:shimmer 2s infinite;background-image:linear-gradient(90deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.2) 20%,hsla(0,0%,100%,.5) 60%,hsla(0,0%,100%,0));bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;transform:translateX(-100%);z-index:0}@keyframes shimmer{to{transform:translateX(100%)}}.blog-post__headline{font-size:1.25em;font-weight:700}.blog-post__meta{color:#6b6b6b;font-size:.85em}.o-media{display:flex}.o-media__body{flex-grow:1;margin-left:1em}.o-vertical-spacing>*+*{margin-top:.75em}.o-vertical-spacing--l>*+*{margin-top:2em}.copy{background:none;border:none;cursor:pointer;padding:5px;transition:transform .2s ease}.copy.active{transform:scale(1.1)}.copy svg{fill:#566563;height:18px;width:18px}.copyBox{background:#f7f7f7;border-radius:13px;color:#566563;display:flex;float:right;gap:12px;padding:5px 10px;position:relative;width:135px}.copyBox button{background:transparent;border:none;color:#566563;cursor:pointer;padding:0;transition:all .3s}.copyBox button i{display:inline-block}.copyBox button:hover{color:#17235b}.copyBox button.up:hover i{animation:thumbsUpAnimation .5s ease-in-out;animation-fill-mode:forwards}.copyBox button.down:hover i{animation:thumbsDownAnimation .5s ease-in-out;animation-fill-mode:forwards}.din{display:inline-flex}.chatFooterWrapper{background-color:#f5f5f5;border-top:1px solid #ccc;justify-content:center}.chat-footer,.chatFooterWrapper{align-items:center;flex-direction:column}.chat-footer{background:#fff;display:flex;margin-bottom:10px;width:100%}.topinfo-containerbox{align-items:center;background:#f9f9f9;border-bottom:1px solid #efefef;display:none;justify-content:space-between;margin:0;padding:5px 10px 8px;width:100%}@media (max-width:768px){.topinfo-containerbox{flex-direction:column}}.agents_note_wrapper{display:flex;justify-content:space-around}.bottombox-wrapper{display:flex;padding:10px;width:100%}.dropdown-wrapper{margin-right:10px;position:relative}.dropdown-header{align-items:center;background:#fff;border:1px solid #ddd;border-radius:48px;color:#414141!important;cursor:pointer;display:flex;font-size:14px;margin-bottom:0;padding:.5rem 1.5rem;white-space:nowrap}.dropdown-header span{margin-right:8px}.dropdown-menu{background-color:#fff;border:1px solid #ededed;border-radius:5px;bottom:100%!important;box-shadow:0 2px 4px rgba(0,0,0,.1);display:block;left:0;margin-bottom:10px;max-height:200px;overflow-y:auto;padding:0;position:absolute;top:auto;width:230px;z-index:1000}.dropdown-menu label{cursor:pointer;display:block;font-size:16px;padding:5px 15px}.dropdown-menu label input{height:16px;width:16px}.dropdown-menu label:hover{background-color:#f0f0f0}.border-shape{flex-grow:1}.form-control-1{border:1px solid #ddd;border-radius:5px;padding:10px;width:100%}.cta-footer,.text-left .note-section{align-items:center;display:flex}.text-left .note-section{background:#fff;border-radius:5px;box-shadow:0 2px 4px rgba(0,0,0,.1);margin-top:10px;max-width:800px;padding:10px;width:100%}.text-left .note{align-items:center;color:#555;display:flex}.text-left .note i{margin-right:8px}.text-left .note .text{font-size:14px}.card-container{display:flex;gap:15px}.custom-card{background:#fffefe;border:1px solid #ddd;border-radius:.25rem;box-shadow:0 4px 8px rgba(0,0,0,.1);margin-bottom:10px;overflow:hidden;width:18rem}.custom-card .card-body{padding:10px}.custom-card .card-title{font-size:1.25rem;font-weight:700}.custom-card .card-text{font-size:1rem;text-align:left}.custom-card .btn-primary{background-color:#007bff;border:none;border-radius:.25rem}.custom-card .card-footer{background-color:#f8f9fa;color:#6c757d;padding:10px;text-align:center}.list-container{list-style:none;padding:0}.list-container li{background:#f5f5f5;border-radius:8px;font-size:13px;margin-bottom:5px;padding:6px 12px}.list-container li:hover{color:#000;cursor:pointer}.attendee-cards-section,.booth-rep-cards-section,.session-cards-section,.speaker-cards-section,.sponsor-cards-section{display:block;margin-bottom:4px;margin-top:8px;max-width:100%;overflow:visible;visibility:visible;width:100%}.session-cards-section{min-width:0;overflow-x:hidden}.card-message-bubble{border-radius:4px 14px 14px 14px;box-sizing:border-box;margin-bottom:20px;max-width:100%;overflow-wrap:break-word;padding:10px 14px 10px 26px;width:100%}.card-message-bubble .card-message-text{margin:0}.card-message-text{margin-bottom:0}.session-cards-container{display:grid;gap:20px;grid-template-columns:1fr;max-width:100%;min-width:0;overflow:hidden;width:100%}@media (min-width:600px){.session-cards-container{grid-template-columns:repeat(2,1fr)}}.session-card-item{border:none;border-radius:18px;box-sizing:border-box;color:#fff;display:flex;flex-direction:column;justify-content:flex-start;max-width:100%;min-height:220px;min-width:0;overflow:hidden;padding:25px;position:relative}.session-card-item,.session-card-item-ondemand{background:linear-gradient(135deg,#9f7aea,#805ad5)}.session-card-item-ondemand{min-height:auto;min-height:220px;padding:20px 24px}.session-card-item-ondemand .session-card-ondemand-badge{background:#7d69bd;border-radius:999px;color:#fff;display:inline-block;font-size:11px;font-weight:600;letter-spacing:.02em;margin-bottom:8px;padding:4px 10px;width:-moz-fit-content;width:fit-content}.session-card-item-ondemand .session-card-ondemand-available{color:#fff;font-size:14px;font-weight:400;margin-bottom:6px}.session-card-item-ondemand .session-card-ondemand-title{font-size:18px;font-weight:700;line-height:1.3;margin:0 0 8px}.session-card-item-ondemand .session-card-ondemand-desc{-webkit-line-clamp:3;color:#fff;font-size:14px;font-weight:400;line-clamp:3;margin-bottom:12px;opacity:.95}.session-card-item-ondemand .session-card-actions-row{margin-top:auto}.session-card-header{align-items:center;display:flex;margin-bottom:12px;margin-left:80px;min-height:40px}.session-card-date-badge{align-items:center;background:#000;border-radius:50%;display:flex;flex-direction:column;font-size:14px;font-weight:700;height:60px;justify-content:center;left:20px;position:absolute;top:20px;width:60px}.session-card-date-day{color:#fff;display:block;font-size:14px;font-weight:700;line-height:1.2}.session-card-date-month{color:#fff;display:block;font-size:15px;font-weight:700}.session-card-date-na{color:#fff;display:block;font-size:12px;font-weight:700;line-height:1.2}.session-card-room-time{min-width:0;overflow-wrap:break-word}.session-card-room{color:#fff;font-size:18px;font-weight:600;line-height:1.3}.session-card-time{color:#fff;font-size:13px;line-height:1.3;opacity:.9}.session-card-title{color:#fff;font-size:18px;font-weight:600;line-height:1.35;margin:6px 0 8px;min-width:0;overflow-wrap:break-word}.session-card-meta{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}.session-card-meta-row{align-items:baseline;display:flex;font-size:13px;gap:8px;line-height:1.35}.session-card-meta-label{color:hsla(0,0%,100%,.9);flex-shrink:0;font-weight:500}.session-card-meta-value{color:#fff;font-weight:400;min-width:0}.session-card-description{-webkit-box-orient:vertical;-webkit-line-clamp:3;color:#fff;display:-webkit-box;flex:1;font-size:14px;line-clamp:3;line-height:1.4;min-height:0;opacity:.95;overflow:hidden}.session-card-status{align-items:center;color:hsla(0,0%,100%,.95);display:flex;font-size:13px;font-weight:400;gap:8px;justify-content:flex-end;margin-bottom:12px}.session-card-status-bullet{background:hsla(0,0%,100%,.9);border-radius:50%;height:6px;min-width:6px;width:6px}.session-card-actions-row{align-items:center;display:flex;flex-wrap:nowrap;gap:12px;justify-content:space-between;margin-top:auto;min-width:0}.session-card-item .speakers-UIcard{align-items:center;display:flex;flex:0 0 auto;min-width:0}.session-card-item .speaker-tooltip-wrap{display:inline-block;position:relative}.session-card-item .speaker-tooltip{background:rgba(0,0,0,.85);border-radius:4px;bottom:100%;color:#fff;font-size:12px;font-weight:500;left:50%;margin-bottom:6px;opacity:0;padding:4px 8px;pointer-events:none;position:absolute;transform:translateX(-50%);transition:opacity .15s ease,visibility .15s ease;visibility:hidden;white-space:nowrap;z-index:10}.session-card-item .speaker-tooltip-wrap:hover .speaker-tooltip{opacity:1;visibility:visible}.session-card-item .speaker{align-items:center;background:#e6e6e6;border-radius:50%;color:#333;display:flex;font-family:Arial,sans-serif;font-weight:600;height:40px;justify-content:center;margin-left:-10px;overflow:hidden;width:40px}.session-card-item .speaker:first-child{margin-left:0}.session-card-item .speaker img{-o-object-fit:cover;height:100%;object-fit:cover;width:100%}.session-card-item .speaker.initials{font-size:14px}.session-card-item .speaker img:not([src]),.session-card-item .speaker img[src=\"\"]{opacity:0}.session-card-actions{display:flex;flex:0 0 auto;flex-wrap:wrap;gap:10px;justify-content:flex-end;margin-top:0;min-width:0}.session-card-btn{border:none;border-radius:8px;cursor:pointer;font-size:14px;font-weight:600;min-width:80px;padding:8px 20px;transition:opacity .2s}.session-card-btn-primary{background:#000;color:#fff}.session-card-btn-primary:hover{opacity:.9}.session-card-btn-secondary{background:#000;border:none;color:#fff}.session-card-btn-secondary:hover{opacity:.9}.session-card-btn-disabled{cursor:not-allowed!important;opacity:.5;pointer-events:none}.session-card-btn-disabled.session-card-btn-primary,.session-card-btn-disabled.session-card-btn-secondary{background:#000;color:#fff}.session-card-when-disable{color:hsla(0,0%,100%,.9);font-size:13px;font-style:italic;margin-bottom:10px}.session-card-meeting-delayed{color:hsla(0,0%,100%,.95);font-size:13px;margin-bottom:10px}.attendee-cards-container{display:flex;flex-wrap:wrap;gap:20px;width:100%}.attendee-card-item{flex:0 0 calc(25% - 15px);max-width:215px!important}@media (max-width:1200px){.attendee-card-item{flex:0 0 calc(33.33333% - 13.33333px)}}@media (max-width:768px){.attendee-card-item{flex:0 0 calc(50% - 10px)}}@media (max-width:480px){.attendee-card-item{flex:0 0 100%}}.attendee-card{background-color:#5a5a5a;background-position:50%;background-size:cover;border-radius:8px;color:#fff;display:flex;flex-direction:column;height:320px;justify-content:flex-end;min-width:215px;overflow:hidden;padding:20px;position:relative}@media (max-width:480px){.attendee-card-item{max-width:100%!important}.attendee-card{height:490px}}.attendee-card-has-video{background-image:none!important}.attendee-card-video{-o-object-fit:cover;height:100%;left:0;object-fit:cover;position:absolute;top:0;width:100%;z-index:1}.attendee-card-play-btn{border:1px solid hsla(0,0%,100%,.35);border-radius:50%;font-weight:700;height:40px;left:50%;line-height:54px;text-align:center;top:40%;transform:translate(-50%,-50%);width:40px}.attendee-card-mute-btn,.attendee-card-play-btn{align-items:center;background:rgba(0,0,0,.45);color:#fff;cursor:pointer;display:flex;font-size:0;justify-content:center;padding:0;position:absolute;z-index:4}.attendee-card-mute-btn{border:1px solid hsla(0,0%,100%,.25);border-radius:50%;font-weight:600;height:34px;right:10px;top:10px;width:34px}.attendee-card-mute-btn .material-icons,.attendee-card-play-btn .material-icons{font-size:28px;line-height:1}.attendee-card-initials{background:linear-gradient(135deg,#6b7280,#4b5563);color:hsla(0,0%,100%,.9);display:flex;font-size:58px;font-weight:400;justify-content:center;letter-spacing:-2px;padding:50px 0;z-index:1}.attendee-card-initials,.attendee-overlay{height:100%;left:0;position:absolute;top:0;width:100%}.attendee-overlay{background:linear-gradient(0deg,rgba(0,0,0,.85),rgba(0,0,0,.25));pointer-events:none;z-index:2}.attendee-content{position:relative;z-index:3}.attendee-name{font-size:18px;font-weight:600;margin-bottom:4px}.attendee-company,.attendee-name{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;line-clamp:2;overflow:hidden}.attendee-company{font-size:13px;margin-bottom:8px;opacity:.85}.attendee-desc{font-size:14px;margin-bottom:12px;opacity:.95;overflow:hidden}.attendee-desc-collapsed{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;line-clamp:2}.attendee-desc-expanded{display:block;margin-bottom:6px;overflow:visible}.attendee-read-more{background:transparent;border:0;color:hsla(0,0%,100%,.9);cursor:pointer;display:inline-block;font-size:12px;font-weight:600;margin:-6px 0 10px;padding:0;text-decoration:underline}.attendee-buttons{align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;gap:8px;width:-moz-fit-content;width:fit-content}.attendee-buttons .btn{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;border:none;border-radius:3px;cursor:pointer;flex:1 1 0;font-size:12px;min-width:80px;padding:5px 8px;text-align:center;text-rendering:optimizeLegibility;white-space:nowrap}@media (max-width:480px){.attendee-buttons{flex-wrap:wrap;width:100%!important}.attendee-buttons .btn{flex:1 1 100%;max-width:100%;white-space:normal}}.attendee-card-btn-connect{background:#0d6efd;color:#fff}.attendee-card-btn-connect:hover:not(:disabled){opacity:.9}.attendee-card-btn-view-profile{background:#494949;color:#fff}.attendee-card-btn-view-profile:hover:not(:disabled){opacity:.9}.attendee-card-btn-request-sent{background:#0d6efd;color:#fff;cursor:not-allowed!important;opacity:.5}.attendee-card-btn-disconnect{background:#0d6efd;color:#fff}.attendee-card-btn-disconnect:hover{background:hsla(0,0%,100%,.3);opacity:.95}.attendee-card-btn:disabled{cursor:not-allowed!important;opacity:.6}.show-more-cards-btn{align-items:center;background:#fff;border:1.5px dashed #ccc;border-radius:12px;color:#06f;cursor:pointer;display:flex;font-size:14px;font-weight:600;justify-content:center;margin-top:12px;padding:10px 16px;width:-moz-fit-content;width:fit-content}.show-more-cards-btn:hover{background:#f8f9fa}.booth-rep-card-grid{display:grid;gap:10px;grid-template-columns:repeat(3,1fr)}@media (max-width:1204px){.booth-rep-card-grid{grid-template-columns:repeat(2,1fr)!important}.booth-rep-card-logo{height:120px!important}.booth-rep-card-logo img{-o-object-fit:contain;max-height:80px!important;object-fit:contain}}@media (max-width:768px){.booth-rep-card-grid{grid-template-columns:repeat(2,1fr)}.booth-rep-card-logo{height:90px!important}.booth-rep-card-logo img{-o-object-fit:contain;max-height:60px!important;object-fit:contain}}.booth-rep-card{background:linear-gradient(90deg,#9faffc,#a1afff 40%,#adb9ff);border-radius:6px;display:flex;flex-direction:column;padding:18px}.booth-rep-card-logo{align-items:center;background:#fff;border:1px solid #f7f7f7;border-radius:4px;box-shadow:0 0 2px #ddd;display:flex;height:140px;justify-content:center;margin-bottom:12px;width:100%}.booth-rep-card-logo img{-o-object-fit:contain;max-height:90px;object-fit:contain}.booth-rep-card-logo-placeholder{color:#9faffc;font-size:48px;font-weight:600;text-transform:uppercase}.booth-rep-card-title{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:#1d2b4f;display:-webkit-box;font-size:18px;font-weight:600;line-clamp:2;margin-bottom:10px;overflow:hidden}.booth-rep-card-desc{-webkit-box-orient:vertical!important;-webkit-line-clamp:3!important;color:#3a3a3a!important;display:-webkit-box!important;font-size:14px!important;line-clamp:3!important;line-height:1.3!important;margin-bottom:18px!important;overflow:hidden!important}.booth-rep-card-btn{align-self:flex-start;background:#494949;border:none;border-radius:6px;color:#fff;cursor:pointer;font-size:14px;margin-top:auto;padding:10px 18px;transition:.3s}.booth-rep-card-btn:hover{background:#5a5a5a}.collapsible-container{margin-bottom:5px;overflow:hidden;width:100%}.collapsible-header{cursor:pointer;display:flex;padding:15px}.collapsible-header .header-icon{font-size:20px;margin-right:10px}.collapsible-header .header-title{flex:1;font-size:18px}.collapsible-header .toggle-icon{font-size:18px;margin-left:18px}.collapsible-content{background-color:#f8f9fa;color:#333;padding:15px;width:100%}.collapsible-content.show{display:block}.researchingCard{margin:5px auto}.card-header{background:#eee;border-bottom:0;border-radius:8px 8px 0 0;display:flex!important;padding:8px 15px;width:auto}.icon{font-size:20px;line-height:5px}.rotate{transform:rotate(180deg)}.collapse{display:none}.uptList{background:rgba(245,222,179,.1411764705882353);border-radius:0 0 10px 10px;margin-bottom:20px!important}.list-group-item{color:#0f0f0f;font-size:15px;margin:1px 0;padding:0 18px}.sources-container{align-items:flex-start;display:flex;gap:15px}.source-card{background-color:#f0f3f5;border-radius:10px;box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;justify-content:space-between;padding:15px;position:relative;transition:box-shadow .3s ease;width:100%}.popup{background-color:#fff;border-radius:5px;box-shadow:0 4px 8px rgba(0,0,0,.2);left:50%;opacity:0;padding:10px;position:absolute;top:100%;transform:translateX(-50%) translateY(-10px);transition:opacity .3s ease,transform .3s ease;visibility:hidden;white-space:normal;width:100%;z-index:10}.popup h5{font-size:14px;font-weight:600;line-height:1.2;margin:5px 0 10px}.popup p{font-size:12px;line-height:1.4;margin:0}.popup h5:hover{color:#007bff;cursor:pointer}.popup .source-url{color:#000;text-decoration:none}.popup .source-url:hover{color:#007bff;cursor:pointer;text-decoration:underline}.source-card:hover .popup{opacity:1;transform:translateX(-50%) translateY(-15px);visibility:visible}.source-card:hover{box-shadow:0 4px 8px rgba(0,0,0,.1);transform:scale(1.05)}.source-title{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;font-size:14px;font-weight:500;height:55px;line-clamp:2;line-height:1.5;overflow:hidden;text-align:left;text-overflow:ellipsis}.source-title img{margin-left:10px;width:20px}.source-url{align-items:center;color:#6c757d;display:flex;font-size:12px;text-align:left}.source-url img{border-radius:50%;height:16px;margin-right:5px;width:16px}.sourceDraweContainer .container{background-color:#fff;padding:20px}.sourceDraweContainer .sources-list{list-style:none;padding:0}.sourceDraweContainer .sources-list li{align-items:flex-start;display:flex;margin-bottom:15px}.sourceDraweContainer .sources-list input[type=checkbox]{flex-shrink:0;margin-right:15px;margin-top:8px}.sourceDraweContainer .source-content{background-color:#f5f2f2;border:1px solid #ddd;border-radius:8px;box-shadow:0 2px 4px rgba(0,0,0,.1);cursor:pointer;flex:1;padding:12px}.sourceDraweContainer .source-content:hover{background:#ccc}.sourceDraweContainer .source-title{display:block;font-size:1rem;font-weight:500;height:auto!important;margin-bottom:4px}.sourceDraweContainer .source-description{display:block;font-size:.875rem}.sourceDraweContainer .image-container{align-items:center;display:flex;margin:10px 0}.sourceDraweContainer .image-container img{-o-object-fit:cover;border:1px solid #ddd;border-radius:50%;height:16px;margin-right:5px;object-fit:cover;width:16px}.sourceDraweContainer .image-container span{color:#555;font-size:13px}.closeButtonEditor{border:0;border-radius:100%;height:32px;padding:3px 0 0;position:absolute;right:10px;top:5px;width:32px}.closeButtonSource{background:none!important;border-color:transparent!important;box-shadow:none!important;color:inherit;cursor:pointer;float:right;margin-top:20px;transition:color .2s ease-in-out}.closeButtonSource.closeplaygroundbutton{display:none!important}.graph-img{background:hsla(0,0%,99.6%,.23137254901960785);border-radius:15px;padding:15px;width:90%}.chat-textarea{background-color:#fff;border:none;box-sizing:border-box;font-size:15px;height:30px;line-height:1.5;overflow-y:hidden;padding:10px;resize:none;transition:all 1s;width:100%}.chat-textarea:focus,.chat-textarea:hover{height:60px}.chat-textarea:focus{outline:none}.fixed-btn{background-color:#000;border:none;border-radius:8px 8px 0 0;color:#fff;cursor:pointer;font-size:16px;padding:5px 12px;position:fixed;right:-22px;top:46%;transform:translateY(-50%) rotate(270deg);transform-origin:center;transition:all .5s;z-index:1000000}.fixed-btn:hover{background-color:#5b5b5b}.fixed-btn-close{background-color:#000;border:none;border-radius:8px 8px 0 0;color:#fff;cursor:pointer;font-size:16px;padding:5px 16px;position:fixed;right:549px;top:46%;transform:translateY(-50%) rotate(270deg);transform-origin:center;transition:all .5s;z-index:1000000}.fixed-btn-close:hover{background-color:#5b5b5b}.btn.rotate{transform:rotate(-15deg)}.btn.rotate:hover{transform:rotate(0deg)}.btn.cta-chat{align-items:center;aspect-ratio:1/1;background:#f3f3f3;border:none;border-radius:50%;color:#787777;display:flex;flex-shrink:0;height:40px!important;justify-content:center;max-height:40px!important;max-width:40px!important;padding:0;width:40px!important}.btn.cta-chat:hover{background:#d7d7d7;color:#666}.btn.cta-chat svg{vertical-align:middle}.btn.cta-chat.voice-btn{border-radius:9999px;flex-shrink:0;gap:8px;justify-content:flex-start;max-width:40px;min-width:40px;overflow:hidden;padding-left:11px;padding-right:11px;transition:max-width .35s ease,width .35s ease,background-color .25s ease,color .25s ease,padding .3s ease;width:40px}.btn.cta-chat.voice-btn .voice-btn-icon{flex-shrink:0}.btn.cta-chat.voice-btn .voice-btn-text{font-size:14px;font-weight:500;max-width:0;opacity:0;overflow:hidden;transition:opacity .25s ease .1s,max-width .3s ease .05s;white-space:nowrap}.btn.cta-chat.voice-btn:hover{background:#0d9488!important;color:#fff!important;padding-left:14px;padding-right:16px}.btn.cta-chat.voice-btn:hover .voice-btn-text{max-width:4em;opacity:1}.chat-footer-upt{padding:4px}.workflowbox{align-items:center;border:1px solid transparent;border-radius:48px;color:#414141!important;cursor:pointer;display:flex;font-size:14px;margin-bottom:0;padding:.5rem 1.5rem;transition:all .5s;white-space:nowrap}.workflowbox:hover{background:#fff;border:1px solid #ddd}.workflowbox svg{margin:0 10px}.edit-boxDrawer{border-left:1px solid #ddd;box-shadow:1px 1px 15px hsla(0,0%,86.7%,.7686274509803922)!important}.edit-boxDrawer mat-drawer-content,ng-deep .edit-boxDrawer mat-drawer-content{margin-left:0!important;margin-right:0!important}.SearchTitle{font-size:16px!important;text-transform:none}.exicution{background:#f9f9f9;margin:30px 0!important;padding:15px 20px}.new-conversationbutton2{align-items:center;background:#f5f5f5;border:1px solid #e3e3e3;border-radius:10px;cursor:pointer;display:flex;font-size:14px;justify-content:space-around;padding:6px;position:absolute;right:88px;top:20px!important;transition:all .5s;width:120px;z-index:1000}.new-conversationbutton2:hover{background:#eee}@media (max-width:768px){.new-conversationbutton2{align-items:center;font-size:11px!important;padding:0!important;position:fixed!important;top:22px!important;width:90px!important}}.NoteTxt{margin:0 auto;margin-bottom:10px!important}.NoteTxt .text{margin:0 5px}.form-container{width:100%}.progress-container{align-items:center;display:flex}.circular-loader{border:4px solid rgba(0,0,0,.1);border-radius:50%;box-sizing:border-box;height:50px;position:relative;width:50px}.loader-spinner{animation:rotate-loader 1s linear infinite;border:2px solid #2196f3;border-radius:50%;border-top-color:transparent;box-sizing:border-box;height:100%;left:0;position:absolute;top:0;width:100%}.loader-text{color:#333;font-size:12px;font-weight:700;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.loader-label{color:#333;font-size:16px;margin-left:20px}.checkmark{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.checkmark-circle{animation:stroke .6s ease-in-out forwards;stroke:#4caf50;stroke-dasharray:166;stroke-dashoffset:166;stroke-width:4}.checkmark-check{animation:stroke-check .4s ease-in-out .4s forwards;stroke:#4caf50;stroke-dasharray:48;stroke-dashoffset:48;stroke-linecap:round;stroke-linejoin:round;stroke-width:4}@keyframes stroke{to{stroke-dashoffset:0}}@keyframes stroke-check{to{stroke-dashoffset:0}}@keyframes rotate-loader{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes checkmark-animation{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}.circular-loader.completed .loader-spinner{animation:none;transform:rotate(1turn)}.icon-button{background-color:transparent;border:none;color:#333;cursor:pointer;font-size:24px}.icon-button:focus{outline:none}.icon-button:hover{color:#007bff}.modal{background-color:rgba(0,0,0,.4);display:block;height:100%;left:0;padding-top:0;position:fixed;top:0;width:100%;z-index:1000001}.modal-content{background-color:#fff;border-radius:8px;box-shadow:0 4px 8px rgba(0,0,0,.1);height:600px;margin:5% auto;padding:20px;position:relative;width:82%}.close{color:#aaa;float:right;font-size:28px;font-weight:700}.close:focus,.close:hover{color:#000;cursor:pointer;text-decoration:none}.SearchTitle.botUser{font-size:30px!important;text-transform:none!important}.SearchTitle.botUser h2,.SearchTitle.botUser p{font-size:1.7rem!important}.title_chat{display:flex;margin:0;padding:0}.title_chat h2{align-items:center;display:flex;font-size:20px;gap:10px;margin:10px 0}.title_chat h2 p{display:inline!important}.title_chat h2 span:before{content:\"\"!important}@media (max-width:768px){.title_chat h2{align-items:start;flex-direction:column;font-size:16px}}.small-title{font-size:12px;margin:2px 0}.chat-header-close-btn{align-items:center;background:transparent;border:none;border-radius:50%;color:#5a5a5a;cursor:pointer;display:inline-flex;height:32px;justify-content:center;margin-left:auto;padding:0;width:32px}.chat-header-close-btn .material-icons{font-size:20px;line-height:1}.chat-header-close-btn:hover{background:rgba(0,0,0,.06)}.titleSection{margin:0}.titleSection h2{color:#000;font-size:20px;margin:0}.inputs-section{background-color:#f7f7f7;border-radius:5px;margin:0 0 10px;padding:10px 15px 0}.inputs-section h3{font-size:16px}.actions-section{background-color:#f9f9f9;border-radius:5px;height:500px;margin-bottom:20px;overflow-y:auto;padding:15px}.timeline{margin-bottom:20px;padding-left:40px;position:relative}.timeline:before{border-right:2px dashed #cecece;content:\"\";height:100%;left:19px;position:absolute}.timeline-item{margin-bottom:20px;position:relative}.timeline-item:before{background-color:#007bff;border-radius:50%;content:\"\";height:20px;left:-30px;position:absolute;top:0;width:20px;z-index:1}.timeline-item h4{color:#000;font-size:16px;font-weight:700;margin:0}.timeline-item pre{background-color:#fff;border:1px solid #ddd;border-radius:5px;padding:10px;white-space:pre-wrap}.timestamp-section{color:#666;font-style:normal;justify-content:space-between}.mic-btn{background-color:#ff4d4d;border:none;border-radius:50%;color:#fff;cursor:pointer;font-size:1.5em;padding:10px}.mic-btn:active{background-color:#f66}.actions-section h3{font-size:16px}.close-wrapper{display:flex;justify-content:right;position:absolute;right:22px;top:0;width:100%}.close_pop{color:#aaa;cursor:pointer;font-size:30px;font-weight:400}.chat-avatar,.close_pop{align-items:center;display:flex;justify-content:center}.chat-avatar{background:#fcfcfc;border:1px solid #dfdfdf;border-radius:50%;flex-shrink:0;height:44px;min-height:44px;min-width:44px;overflow:hidden;width:44px}.chat-avatar-img{-o-object-fit:cover;height:100%;object-fit:cover;width:100%}.chat-avatar-initials{-moz-user-select:none;-webkit-user-select:none;color:#555;font-size:1rem;font-weight:600;text-transform:uppercase;user-select:none}.chat-avatar-initials-assistant{color:#000}.chat-avatar-initials-user{color:#761c79}.user-Box{align-items:center;display:flex}.bards{position:absolute;right:0;top:20px}::ng-deep .code-container{margin:20px 0;position:relative}::ng-deep .copy-button{background-color:#007bff;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:5px 10px;position:absolute;right:10px;top:10px}::ng-deep .copy-button:hover{background-color:#0056b3}::ng-deep .code_block.diff{background-color:#f8f8f8;border-left:4px solid #ccc;overflow:auto;padding:10px}::ng-deep .heading003{color:#000;font-size:20px;font-weight:700}::ng-deep .listing{list-style:decimal;margin:0 25px;padding:0}.line{background-color:#e8e8e8;border-radius:15px;display:inline-block;height:15px;width:15px}.load-2 .line:last-child{animation:loadingB 1.5s 1s infinite;margin:5px 0}.load-2 .line:nth-last-child(2){animation:loadingB 1.5s .5s infinite;margin:5px 0}.load-2 .line:nth-last-child(3){animation:loadingB 1.5s 0s infinite;margin:5px 0}.load-1 .line:last-child{animation:loadingA 1.5s 1.2s infinite;margin:5px 0}.load-1 .line:nth-last-child(2){animation:loadingA 1.5s .8s infinite;margin:5px 0}.load-1 .line:nth-last-child(3){animation:loadingA 1.5s .2s infinite;margin:5px 0}@keyframes loadingB{0%{width:65px}50%{width:235px}to{width:65px}}@keyframes loadingA{0%{width:45px}50%{width:205px}to{width:45px}}.chat-thinking{padding-left:20px!important}.chat-thinking .thinking-row{align-items:center;display:flex;gap:8px;margin-top:6px}.chat-thinking .thinking-dots{align-items:center;display:flex;gap:4px}.chat-thinking .thinking-dot{animation:thinking-bounce 1.4s ease-in-out infinite both;background:#06f;border-radius:50%;height:6px;width:6px}.chat-thinking .thinking-dot:first-child{animation-delay:0s;background:#9ca3af}.chat-thinking .thinking-dot:nth-child(2){animation-delay:.2s;background:#06f}.chat-thinking .thinking-dot:nth-child(3){animation-delay:.4s;background:#17235b}.chat-thinking .thinking-text{color:#6b7280;font-size:14px;font-weight:400}@keyframes thinking-bounce{0%,80%,to{opacity:.6;transform:scale(.8)}40%{opacity:1;transform:scale(1.1)}}.loaderbox{height:60px;margin:10px 0;position:relative}.loader-pkg{bottom:0;left:0;margin:0;top:0;width:250px}.loader--dot,.loader-pkg{height:20px;position:absolute}.loader--dot{animation-duration:3s;animation-iteration-count:infinite;animation-name:loader;animation-timing-function:ease-in-out;background-color:#1a6774;border-radius:100%;width:20px}.loader--dot:first-child{animation-delay:.5s;background-color:#618e93}.loader--dot:nth-child(5){animation-delay:.4s;background-color:#3fb0c3}.loader--dot:nth-child(4){animation-delay:.3s;background-color:#40b8cd}.loader--dot:nth-child(3){animation-delay:.2s;background-color:#ec8828}.loader--dot:nth-child(2){animation-delay:.1s;background-color:#fdc25d}.loader--dot:first-child{animation-delay:0s;background-color:#f4e3be}.loader--text{left:0;margin:0;position:absolute;top:200%;width:4rem}.loader--text:after{animation-duration:3s;animation-iteration-count:infinite;animation-name:loading-text;content:\"Loading\";font-weight:700}@keyframes loader{15%{transform:translateX(230px)}45%{transform:translateX(0)}65%{transform:translateX(230px)}95%{transform:translateX(0)}}@keyframes loading-text{0%{content:\"Loading\"}25%{content:\"Loading.\"}50%{content:\"Loading..\"}75%{content:\"Loading...\"}}::ng-deep .loaderbox{height:60px;margin:10px 0;position:relative}::ng-deep .loader-pkg{bottom:0;height:20px;left:0;margin:0;position:absolute;top:0;width:250px}::ng-deep .loader--dot{animation-duration:3s;animation-iteration-count:infinite;animation-name:loader;animation-timing-function:ease-in-out;background-color:#1a6774;border-radius:100%;height:20px;position:absolute;width:20px}::ng-deep .loader--dot:first-child{animation-delay:.5s;background-color:#618e93}::ng-deep .loader--dot:nth-child(5){animation-delay:.4s;background-color:#3fb0c3}::ng-deep .loader--dot:nth-child(4){animation-delay:.3s;background-color:#40b8cd}::ng-deep .loader--dot:nth-child(3){animation-delay:.2s;background-color:#ec8828}::ng-deep .loader--dot:nth-child(2){animation-delay:.1s;background-color:#fdc25d}::ng-deep .loader--dot:first-child{animation-delay:0s;background-color:#f4e3be}::ng-deep .loader--text{left:0;margin:0;position:absolute;top:200%;width:4rem}::ng-deep .loader--text:after{animation-duration:3s;animation-iteration-count:infinite;animation-name:loading-text;content:\"Loading\";font-weight:700}.agents-popwindowbox{background:#fff;padding:10px;width:100%}.agents-popwindowbox h3{color:#000;font-size:15px}.dropdown-menu-agents{background-color:#fff;border:1px solid #ededed;border-radius:5px;bottom:100%!important;box-shadow:0 2px 4px rgba(0,0,0,.1);display:block;left:0;margin-bottom:10px;padding:0;position:absolute;top:auto;width:270px;z-index:1000}.dropdown-menu-agents .scrollerbox{display:flex;flex:fit-content;flex-direction:column;height:215px;overflow-y:auto}.dropdown-menu-agents label{align-items:center;background:#f9f9f9;border-radius:2px;cursor:pointer;display:flex;font-size:13px;justify-content:start;line-height:16px;margin:2px 0;padding:7px}.dropdown-menu-agents label:hover{background:#ebebeb}.dropdown-menu-agents label input{opacity:0;position:absolute}.dropdown-menu-agents .input-check{border:2px solid #ccc;border-radius:4px;display:inline-block;height:23px;margin-right:5px;position:relative;top:0;transition:.5s;width:25px}.dropdown-menu-agents label input:checked~.input-check{animation:animate .7s ease;background:#06f;border-color:#06f}@keyframes animate{0%{transform:scale(1)}40%{transform:scale(1.3,.7)}55%{transform:scale(1)}70%{transform:scale(1.2,.8)}80%{transform:scale(1)}90%{transform:scale(1.1,.9)}to{transform:scale(1)}}.dropdown-menu-agents .input-check:before{border-bottom:3px solid #fff;border-left:3px solid #fff;content:\"\";height:6px;left:4px;position:absolute;top:6px;transform:scale(0) rotate(-45deg);transition:.5s;width:15px}.dropdown-menu-agents label input:checked~.input-check:before{transform:scale(1) rotate(-45deg)}::ng-deep .h1,::ng-deep h1{font-size:1.165rem}::ng-deep .h2,::ng-deep .h3,::ng-deep h2,::ng-deep h3{font-size:1.125rem}::ng-deep b,::ng-deep strong{font-weight:600}@media (max-width:768px){.note{line-height:15px;margin:0 auto;padding:3px 0 10px;width:90%}}.show-hover{display:none}.chat.bot:hover .show-hover{display:flex!important}"]
|
|
3587
|
+
styles: ["@import url(\"https://e1cdn.social27.com/digitalevents/liteversion/fonts/segoe-ui/stylesheet.css\");.bot-sticky-header-chat{background:#fff;border:none!important;border-bottom:1px solid #ddd;box-shadow:2px 0 5px #e1e1e1!important;padding:0 0 10px;padding:10px 15px!important;position:fixed;top:0!important;transition:all 1s;width:100%;z-index:100}@media (max-width:768px){.bot-sticky-header-chat{top:0!important}}#botAllChat{padding:0 20px!important}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:#f1f1f1}::-webkit-scrollbar-thumb,::-webkit-scrollbar-thumb:hover{background:#e5ccbc}body{overflow:hidden}.ios-device .drawer .chat-footer .form-control{font-size:16px}.hivegpt-chat-bot-wrapper{background:transparent!important;height:100%;inset:0;opacity:0;position:fixed;visibility:hidden;z-index:999999}.hivegpt-chat-bot-wrapper.mat-drawer-container-has-open{background:transparent!important;opacity:1;transition:all .3s;visibility:visible;z-index:999999}.hivegpt-chat-bot-wrapper .mat-drawer:not(.mat-drawer-side){box-shadow:none}.hivegpt-chat-bot-wrapper mat-drawer{background-color:#f2f2f2;background-image:none!important;width:100%}.hivegpt-chat-bot-wrapper mat-drawer.full-width-drawer{max-width:100%}.hivegpt-chat-bot-wrapper .mat-drawer-content{display:flex;flex-direction:column}.hivegpt-chat-bot-wrapper .chat-header{padding:16px 40px;width:100%}.hivegpt-chat-bot-wrapper .chat-header h2{font-family:Segoe UI,sans-serif;font-size:36px;font-weight:500;letter-spacing:-.72px;line-height:108%;margin:0;text-transform:uppercase}.hivegpt-chat-bot-wrapper .chat-header .closeIcon{align-items:center;background:transparent;border:none;border-radius:50%;display:inline-flex;font-size:18px;height:35px;justify-content:center;outline:none;padding:0;position:absolute;right:12px;top:16px;width:35px}.hivegpt-chat-bot-wrapper .chat-main{display:flex;flex:1;flex-direction:column;justify-content:space-between;overflow-y:auto;width:100%}.hivegpt-chat-bot-wrapper .chat-main .innerChat{overflow-y:auto;padding-top:72px!important;width:100%}.hivegpt-chat-bot-wrapper .chat-main .ai h3{font-size:1.3rem!important}.hivegpt-chat-bot-wrapper .chat-main .chat-box{width:100%}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message{margin-left:50px;margin-top:10px;min-height:40px;position:relative}@media (max-width:768px){.hivegpt-chat-bot-wrapper .chat-main .chat-box .message{margin-left:0}}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message p{color:#000;color:#525252;font-family:Segoe UI,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:160%;margin:0;text-align:left}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message p a{color:#17235b!important;cursor:pointer!important;font-weight:700;text-decoration:underline}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta{align-items:end;bottom:-7px;display:flow-root;gap:10px;grid-gap:10px;position:relative;right:-10px;z-index:5}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta button{background:transparent;border:none;color:#566563;cursor:pointer;padding:0;transition:all .3s}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta button i{display:inline-block}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta button:hover{color:#17235b}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta button.up:hover i{animation:thumbsUpAnimation .5s ease-in-out;animation-fill-mode:forwards}.hivegpt-chat-bot-wrapper .chat-main .chat-box .message .cta button.down:hover i{animation:thumbsDownAnimation .5s ease-in-out;animation-fill-mode:forwards}.hivegpt-chat-bot-wrapper .chat-main .chat{margin-bottom:20px}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .chat-box .message{margin-left:0}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .chat-box .message .chat-bubble-wrap{background:#fff;border-radius:4px 14px 14px 14px;box-sizing:border-box;margin-top:6px;max-width:100%;overflow-wrap:break-word;padding:10px 14px 10px 26px;width:100%;word-break:break-word}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .chat-box .message .chat-bubble-wrap .chat-bubble-content{margin:0;max-width:100%;overflow-wrap:break-word;padding:0;width:100%;word-break:break-word}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .chat-box .message .chat-bubble-wrap .chat-bubble-content>div{margin:0;max-width:100%;overflow-wrap:break-word;padding:0;word-break:break-word}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .chat-box .message .chat-bubble-wrap .chat-bubble-content>div *{max-width:100%}.hivegpt-chat-bot-wrapper .chat-main .chat.botAi .Icon_TimeSTamp{margin:0}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser{color:#fff!important;text-align:right}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box{margin-left:auto;margin-right:0;width:-moz-fit-content;width:fit-content}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message{align-items:flex-end;display:flex;flex-direction:column;margin-left:0;margin-right:0;max-width:100%;padding-right:0;width:-moz-fit-content;width:fit-content}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message .chat-bubble-wrap{background:#183988;border-radius:14px 4px 14px 14px;color:#fff!important;margin-top:6px;max-width:100%;overflow-wrap:break-word;padding:10px 14px;word-break:break-word}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message .chat-bubble-wrap .chat-bubble-content,.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message .chat-bubble-wrap .chat-bubble-content>div{max-width:100%;overflow-wrap:break-word;word-break:break-word}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message .chat-bubble-wrap p,.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .chat-box .message p{color:#fff!important;text-align:left}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .dateTime{margin-left:0;margin-right:10px;text-align:right}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .dateTime span{margin-left:0;margin-right:5px}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .time-cta{justify-content:flex-end}.hivegpt-chat-bot-wrapper .chat-main .chat.botUser .Icon_TimeSTamp{justify-content:flex-end;margin:0}.hivegpt-chat-bot-wrapper .chat-main .chat .Icon_TimeSTamp{align-content:center;align-items:center;display:flex;justify-content:left;margin:0 -60px;width:auto}@media (max-width:768px){.hivegpt-chat-bot-wrapper .chat-main .chat .Icon_TimeSTamp{margin:0}}.hivegpt-chat-bot-wrapper .chat-main .chat .dateTime{color:#333232;font-size:15px;font-style:normal;font-weight:300;line-height:140%}.hivegpt-chat-bot-wrapper .chat-main .chat .dateTime span{color:#000;font-size:15px;font-style:normal;font-weight:500;line-height:140%;margin-left:15px;margin-right:5px}.hivegpt-chat-bot-wrapper .chat-main .chat:last-of-type{margin-bottom:0}.hivegpt-chat-bot-wrapper .chatFooterWrapper{background:#fff;border:2px solid hsla(0,0%,85.5%,.5882352941176471);border-radius:10px;box-shadow:2px 0 5px #e1e1e1;margin:0 15px 15px;margin-top:10px!important;transition:all .5s;width:auto}.hivegpt-chat-bot-wrapper .chatFooterWrapper:hover{border:2px solid hsla(0,0%,72.2%,.5882352941176471);box-shadow:2px 0 4px #ddd}.hivegpt-chat-bot-wrapper .chatFooterWrapper .chat-footer-upt{padding:4px}.hivegpt-chat-bot-wrapper .chatFooterWrapper .note{align-items:center;background:rgba(27,117,187,.050980392156862744);border-radius:15px;color:#000;display:inline-flex;font-size:12px;gap:8px;line-height:1;margin:0 auto 4px;padding:10px 25px}.hivegpt-chat-bot-wrapper .chatFooterWrapper .note a{text-transform:capitalize}.hivegpt-chat-bot-wrapper .chatFooterWrapper .note i{font-size:18px}.hivegpt-chat-bot-wrapper .chatFooterWrapper .note i svg{height:18px;width:18px}.hivegpt-chat-bot-wrapper .chatFooterWrapper .note span{flex:1;gap:4px;line-height:1.3}.hivegpt-chat-bot-wrapper .chat-footer{align-items:center;display:flex;gap:8px;justify-content:space-between;padding:0;position:relative}.hivegpt-chat-bot-wrapper .chat-footer .form-control{background:#fff!important;border:0;line-height:21px;outline:0;padding:10px;position:relative;width:100%}.hivegpt-chat-bot-wrapper .chat-footer .form-control::-moz-placeholder{color:#6c7a78}.hivegpt-chat-bot-wrapper .chat-footer .form-control::placeholder{color:#6c7a78}.hivegpt-chat-bot-wrapper .chat-footer .form-control:focus{border-color:#e5ccbc}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer{align-items:center;display:flex;gap:8px;justify-content:space-between;margin-bottom:10px;position:absolute;right:15px;text-align:right}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer .btn{color:#000;font-weight:500;gap:8px;max-width:150px;padding:0}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer .cta-chat{align-items:center;background:transparent!important;border:none;border-radius:0;box-shadow:0 1px 2px 0 rgba(16,24,40,.05);display:inline-flex;font-size:20px;height:auto;justify-content:center;width:auto}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer .cta-chat:hover{opacity:.8}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer .cta-again{background:#17235b;border:1px solid #17235b;color:#fff}.hivegpt-chat-bot-wrapper .cta-faqs{align-items:flex-end;display:flex;flex-direction:column;flex-wrap:wrap;gap:8px;margin-left:auto;max-width:80%;padding:10px 0 0}.hivegpt-chat-bot-wrapper .cta-faqs .cta{background:transparent;border:1px solid #c9a893;border-radius:20px 20px 0 20px;color:#333;cursor:pointer;font-family:Segoe UI,sans-serif;font-size:14px;font-style:normal;font-weight:500;line-height:160%;margin:0;min-height:44px;padding:12px 20px;text-align:left;text-decoration:none;transition:all .3s;white-space:pre-line}.spinner{align-items:center;display:flex;gap:2px;justify-content:center}.spinner>div{animation:bouncedelay 1.4s ease-in-out infinite;animation-fill-mode:both;background-color:#173330;border-radius:100%;display:inline-block;height:5px;width:5px}.spinner .bounce1{animation-delay:-.32s}.spinner .bounce2{animation-delay:-.16s}@keyframes bouncedelay{0%,80%,to{-webkit-transform:scale(0);transform:scale(0)}40%{-webkit-transform:scale(1);transform:scale(1)}}.time-cta{align-items:center;display:flex;gap:8px;justify-content:start;margin-top:5px}@keyframes thumbsUpAnimation{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}@keyframes thumbsDownAnimation{0%,to{transform:translateY(0)}50%{transform:translateY(3px)}}@media (max-width:767px){.hivegpt-chat-bot-wrapper .chat-footer{padding:10px 24px}.hivegpt-chat-bot-wrapper .chat-footer .cta-footer .cta-chat{max-width:100%}.hivegpt-chat-bot-wrapper .chat-footer .form-control{height:80px}.hivegpt-chat-bot-wrapper .chat-header .closeIcon{height:28px;right:8px;top:8px;width:28px}.hivegpt-chat-bot-wrapper .chat-header .closeIcon span{font-size:14px}.hivegpt-chat-bot-wrapper .chat-header{padding:10px 24px}.hivegpt-chat-bot-wrapper .chat-header h2{font-size:20px}.cta-faqs{padding:10px 0 0}}.body-overflow-hidden{overflow:hidden}.chat-button{align-items:center;background:#17235b;border:#17235b;border-radius:50%;color:#fff;display:inline-flex;font-size:24px;height:50px;justify-content:center;width:50px}textarea{caret-color:#000}.labelChat{font-size:14px;font-weight:400;margin:0 0 10px}.chatType h4{color:#566563;text-align:center}.chatType ul{align-items:center;background:#fff;border-radius:10px;box-shadow:0 .3px .9px rgba(0,0,0,.12),0 1.6px 3.6px rgba(0,0,0,.16);display:flex;justify-content:center;list-style:none;margin:0 0 20px;padding:4px}.chatType ul li{flex:1}.chatType ul li button{align-items:center;background:#fff;border:none;border-radius:10px;font-weight:600;min-height:48px;padding:.375rem;text-align:center;text-shadow:1px 0 rgba(0,0,0,.2);width:100%}.chatType ul li button.active{background:linear-gradient(96deg,#761c79 -10.61%,#761c79 84.59%);box-shadow:0 1px 2px 0 rgba(16,24,40,.05);color:#fff}.cta_suggestions{align-items:center;display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:20px}.cta_suggestions button{background:#fff;border:1px solid #174ae4;border-radius:10px;box-shadow:0 1.6px 3.6px 0 rgba(0,0,0,.13),0 .3px .9px 0 rgba(0,0,0,.1);color:#1543cd;font-size:14px;font-weight:600;line-height:1.2;padding:8px 12px;position:relative;text-align:left;transition:all .3s}.cta_suggestions button:hover{background:#eff3ff}.balanced .chat-footer .cta-footer .cta-chat,.balanced .chat-main .chat.botUser .chat-box .message,.balanced .chatType ul li button.active{color:#000}.balanced .chat-main .innerChat .title p span{color:#06f}.balanced mat-drawer{background-image:linear-gradient(180deg,rgba(88,190,251,.05) 60%,rgba(0,102,255,.2) 96.27%)}.balanced .cta_suggestions button:hover{border:1px solid #06f}.precise .chat-footer .cta-footer .cta-chat,.precise .chat-main .chat.botUser .chat-box .message{background:linear-gradient(96deg,#69ca6d -10.61%,#4caf50 84.59%)}.precise .chatType ul li button.active{background:linear-gradient(96deg,#4caf50 -10.61%,#4caf50 84.59%);color:#fff}.precise .chat-main .innerChat .title p span{color:#4caf50}.precise mat-drawer{background-image:linear-gradient(180deg,rgba(76,175,80,.05) 60%,rgba(76,175,80,.3) 96.27%)}.precise .cta_suggestions button:hover{border:1px solid #4caf50}.title{margin-bottom:20px}.title h2{font-size:22px;margin:0}.title h2 span{align-items:center;color:#000;display:inline-flex;gap:10px}.title h2 i{color:#000;font-size:30px;line-height:1}.title h2 i svg{height:30px;width:30px}.title p{font-weight:600;margin:0}.title p span{color:#000}.agenda-items-wrapper{padding-bottom:15px;padding-top:15px}@media (max-width:576px){.list-view .session-detail-wrapper{border:none;flex-direction:column}}.card-background-session{background:#fff;border-radius:8px}.card-background-session .body-text-color{color:#111!important}.card-background-session h2{-webkit-box-orient:vertical;-webkit-line-clamp:1;display:-webkit-box;font-size:20px;line-clamp:1;margin-bottom:8px;overflow:hidden}.card-background-session .session-description{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:#111!important;display:-webkit-box;font-size:14px;line-clamp:2;overflow:hidden}.card-background-session .color-secondary{color:#111!important}.card-background-session p{font-size:14px}.list-view .session-detail-wrapper .s27-btn-icon{background:transparent;border:transparent}.list-view .session-detail-wrapper{border-left:3px solid transparent;display:flex;margin-bottom:16px}.thumbnail{align-items:center;display:flex;height:160px;justify-content:center;min-width:160px;position:relative;width:160px}.thumbnail img{-o-object-fit:cover;height:100%;object-fit:cover;width:100%}@media (max-width:576px){.thumbnail{height:160px;min-height:unset;width:100%}}.thumbnail .play-btn{align-items:center;background-color:transparent;border:0;bottom:0;display:flex;font-size:60px;justify-content:center;left:0;position:absolute;right:0;top:0;width:100%}.thumbnail .play-btn span{font-size:80px;text-shadow:0 0 14px rgba(74,74,74,.45)}.content{flex-grow:1}.actions{background-color:transparent!important}.speakers{margin-bottom:0;margin-top:10px;padding:0}.speakers li{align-items:unset;display:flex}.speakers li .content{font-size:12px!important}.speakers .image{border-radius:100%;height:40px;min-width:40px;overflow:hidden;width:40px}.speakers img{-o-object-fit:cover;height:100%;object-fit:cover;width:100%}.grid-2-cols{display:grid;grid-gap:15px;grid-template-columns:calc(55% - 10px) calc(50% - 10px);padding-right:20px}@media (max-width:768px){.grid-2-cols{grid-template-columns:calc(50% - 10px) calc(50% - 10px)}}@media (max-width:575px){.grid-3-cols{grid-template-columns:100%}}.quick-prompts-extended{align-items:flex-start!important;margin-left:0!important}.border-shape .s27-scroll::-webkit-scrollbar{border-radius:30px;width:3px}.border-shape .s27-scroll::-webkit-scrollbar-track{background:#f1f1f1;border-radius:30px}.border-shape .s27-scroll::-webkit-scrollbar-thumb{background:#888;border-radius:30px}.box{display:table;height:275px;margin:10px 0;width:100%}.tiktokwrapper{display:grid;gap:10px;grid-template-columns:repeat(2,1fr);height:100%}.tiktokwrapper .tiktokshell{background:#3d2b8f;border:2px solid #fff;border-radius:5px;box-shadow:0 0 6px #494949;height:100%;min-height:275px;min-width:160px;position:relative;width:100%}.tiktokwrapper .overlymask{background-image:url(https://e1cdn.social27.com/digitalevents/HiveGpt/screen-overlay.png);background-position:0 0;bottom:0;height:100%;left:0;position:absolute;width:100%;z-index:6}.tiktokwrapper .videoPhotobox{bottom:0;height:272px;left:0;overflow:hidden;position:absolute;width:auto;z-index:6}.tiktokwrapper .videoPhotobox video{-o-object-fit:cover;border-radius:0;cursor:pointer;height:270px;object-fit:cover;outline:0;transition:.3s ease-in-out;width:100%}.tiktokwrapper .videoPhotobox img{-o-object-fit:cover;height:100%;object-fit:cover;width:100%}.tiktokwrapper .playBtn{align-items:center;border:none;cursor:pointer;display:flex;height:40px;justify-content:center;left:0;margin:0 auto;position:absolute;right:0;top:105px;transition:all 1s;width:40px;z-index:10}.tiktokwrapper .playBtn:hover{transform:scale(1.2)}.tiktokwrapper .noPhoto{align-items:center;border:none;cursor:pointer;display:flex;height:40px;justify-content:center;left:0;margin:0 auto;position:absolute;right:0;top:105px;transition:all 1s;z-index:6}.tiktokwrapper .noPhoto h3{color:#fff;font-size:46px}.tiktokwrapper .onshell-content{bottom:10px;left:5px;position:absolute;z-index:10}.tiktokwrapper .onshell-content .title-shell{margin:0 10px}.tiktokwrapper .onshell-content h3{color:#fff;font-size:13px;font-weight:500}.tiktokwrapper .onshell-content .companyName{color:#eaeaea;font-size:12px;font-weight:400}.tiktokwrapper .onshell-content .button-shell button{background:#4e4e4e;border:none;border-radius:2px;color:#fff;font-size:11px;margin:0 1px;padding:4px 7px;text-transform:capitalize}.tiktokwrapper .onshell-content .Connectbtn{background:linear-gradient(149deg,#06f,#06f)!important}.skeleton-box{background-color:#dddbdd;display:inline-block;height:1em;overflow:hidden;position:relative}.skeleton-box:after{animation:shimmer 2s infinite;background-image:linear-gradient(90deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.2) 20%,hsla(0,0%,100%,.5) 60%,hsla(0,0%,100%,0));bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;transform:translateX(-100%);z-index:0}@keyframes shimmer{to{transform:translateX(100%)}}.blog-post__headline{font-size:1.25em;font-weight:700}.blog-post__meta{color:#6b6b6b;font-size:.85em}.o-media{display:flex}.o-media__body{flex-grow:1;margin-left:1em}.o-vertical-spacing>*+*{margin-top:.75em}.o-vertical-spacing--l>*+*{margin-top:2em}.copy{background:none;border:none;cursor:pointer;padding:5px;transition:transform .2s ease}.copy.active{transform:scale(1.1)}.copy svg{fill:#566563;height:18px;width:18px}.copyBox{background:#f7f7f7;border-radius:13px;color:#566563;display:flex;float:right;gap:12px;padding:5px 10px;position:relative;width:135px}.copyBox button{background:transparent;border:none;color:#566563;cursor:pointer;padding:0;transition:all .3s}.copyBox button i{display:inline-block}.copyBox button:hover{color:#17235b}.copyBox button.up:hover i{animation:thumbsUpAnimation .5s ease-in-out;animation-fill-mode:forwards}.copyBox button.down:hover i{animation:thumbsDownAnimation .5s ease-in-out;animation-fill-mode:forwards}.din{display:inline-flex}.chatFooterWrapper{background-color:#f5f5f5;border-top:1px solid #ccc;justify-content:center}.chat-footer,.chatFooterWrapper{align-items:center;flex-direction:column}.chat-footer{background:#fff;display:flex;margin-bottom:10px;width:100%}.topinfo-containerbox{align-items:center;background:#f9f9f9;border-bottom:1px solid #efefef;display:none;justify-content:space-between;margin:0;padding:5px 10px 8px;width:100%}@media (max-width:768px){.topinfo-containerbox{flex-direction:column}}.agents_note_wrapper{display:flex;justify-content:space-around}.bottombox-wrapper{display:flex;padding:10px;width:100%}.dropdown-wrapper{margin-right:10px;position:relative}.dropdown-header{align-items:center;background:#fff;border:1px solid #ddd;border-radius:48px;color:#414141!important;cursor:pointer;display:flex;font-size:14px;margin-bottom:0;padding:.5rem 1.5rem;white-space:nowrap}.dropdown-header span{margin-right:8px}.dropdown-menu{background-color:#fff;border:1px solid #ededed;border-radius:5px;bottom:100%!important;box-shadow:0 2px 4px rgba(0,0,0,.1);display:block;left:0;margin-bottom:10px;max-height:200px;overflow-y:auto;padding:0;position:absolute;top:auto;width:230px;z-index:1000}.dropdown-menu label{cursor:pointer;display:block;font-size:16px;padding:5px 15px}.dropdown-menu label input{height:16px;width:16px}.dropdown-menu label:hover{background-color:#f0f0f0}.border-shape{flex-grow:1}.form-control-1{border:1px solid #ddd;border-radius:5px;padding:10px;width:100%}.cta-footer,.text-left .note-section{align-items:center;display:flex}.text-left .note-section{background:#fff;border-radius:5px;box-shadow:0 2px 4px rgba(0,0,0,.1);margin-top:10px;max-width:800px;padding:10px;width:100%}.text-left .note{align-items:center;color:#555;display:flex}.text-left .note i{margin-right:8px}.text-left .note .text{font-size:14px}.card-container{display:flex;gap:15px}.custom-card{background:#fffefe;border:1px solid #ddd;border-radius:.25rem;box-shadow:0 4px 8px rgba(0,0,0,.1);margin-bottom:10px;overflow:hidden;width:18rem}.custom-card .card-body{padding:10px}.custom-card .card-title{font-size:1.25rem;font-weight:700}.custom-card .card-text{font-size:1rem;text-align:left}.custom-card .btn-primary{background-color:#007bff;border:none;border-radius:.25rem}.custom-card .card-footer{background-color:#f8f9fa;color:#6c757d;padding:10px;text-align:center}.list-container{list-style:none;padding:0}.list-container li{background:#f5f5f5;border-radius:8px;font-size:13px;margin-bottom:5px;padding:6px 12px}.list-container li:hover{color:#000;cursor:pointer}.attendee-cards-section,.booth-rep-cards-section,.session-cards-section,.speaker-cards-section,.sponsor-cards-section{display:block;margin-bottom:4px;margin-top:8px;max-width:100%;overflow:visible;visibility:visible;width:100%}.session-cards-section{min-width:0;overflow-x:hidden}.card-message-bubble{border-radius:4px 14px 14px 14px;box-sizing:border-box;margin-bottom:20px;max-width:100%;overflow-wrap:break-word;padding:10px 14px 10px 26px;width:100%}.card-message-bubble .card-message-text{margin:0}.card-message-text{margin-bottom:0}.session-cards-container{display:grid;gap:20px;grid-template-columns:1fr;max-width:100%;min-width:0;overflow:hidden;width:100%}@media (min-width:600px){.session-cards-container{grid-template-columns:repeat(2,1fr)}}.session-card-item{border:none;border-radius:18px;box-sizing:border-box;color:#fff;display:flex;flex-direction:column;justify-content:flex-start;max-width:100%;min-height:220px;min-width:0;overflow:hidden;padding:25px;position:relative}.session-card-item,.session-card-item-ondemand{background:linear-gradient(135deg,#9f7aea,#805ad5)}.session-card-item-ondemand{min-height:auto;min-height:220px;padding:20px 24px}.session-card-item-ondemand .session-card-ondemand-badge{background:#7d69bd;border-radius:999px;color:#fff;display:inline-block;font-size:11px;font-weight:600;letter-spacing:.02em;margin-bottom:8px;padding:4px 10px;width:-moz-fit-content;width:fit-content}.session-card-item-ondemand .session-card-ondemand-available{color:#fff;font-size:14px;font-weight:400;margin-bottom:6px}.session-card-item-ondemand .session-card-ondemand-title{font-size:18px;font-weight:700;line-height:1.3;margin:0 0 8px}.session-card-item-ondemand .session-card-ondemand-desc{-webkit-line-clamp:3;color:#fff;font-size:14px;font-weight:400;line-clamp:3;margin-bottom:12px;opacity:.95}.session-card-item-ondemand .session-card-actions-row{margin-top:auto}.session-card-header{align-items:center;display:flex;margin-bottom:12px;margin-left:80px;min-height:40px}.session-card-date-badge{align-items:center;background:#000;border-radius:50%;display:flex;flex-direction:column;font-size:14px;font-weight:700;height:60px;justify-content:center;left:20px;position:absolute;top:20px;width:60px}.session-card-date-day{color:#fff;display:block;font-size:14px;font-weight:700;line-height:1.2}.session-card-date-month{color:#fff;display:block;font-size:15px;font-weight:700}.session-card-date-na{color:#fff;display:block;font-size:12px;font-weight:700;line-height:1.2}.session-card-room-time{min-width:0;overflow-wrap:break-word}.session-card-room{color:#fff;font-size:18px;font-weight:600;line-height:1.3}.session-card-time{color:#fff;font-size:13px;line-height:1.3;opacity:.9}.session-card-title{color:#fff;font-size:18px;font-weight:600;line-height:1.35;margin:6px 0 8px;min-width:0;overflow-wrap:break-word}.session-card-meta{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}.session-card-meta-row{align-items:baseline;display:flex;font-size:13px;gap:8px;line-height:1.35}.session-card-meta-label{color:hsla(0,0%,100%,.9);flex-shrink:0;font-weight:500}.session-card-meta-value{color:#fff;font-weight:400;min-width:0}.session-card-description{-webkit-box-orient:vertical;-webkit-line-clamp:3;color:#fff;display:-webkit-box;flex:1;font-size:14px;line-clamp:3;line-height:1.4;min-height:0;opacity:.95;overflow:hidden}.session-card-status{align-items:center;color:hsla(0,0%,100%,.95);display:flex;font-size:13px;font-weight:400;gap:8px;justify-content:flex-end;margin-bottom:12px}.session-card-status-bullet{background:hsla(0,0%,100%,.9);border-radius:50%;height:6px;min-width:6px;width:6px}.session-card-actions-row{align-items:center;display:flex;flex-wrap:nowrap;gap:12px;justify-content:space-between;margin-top:auto;min-width:0}.session-card-item .speakers-UIcard{align-items:center;display:flex;flex:0 0 auto;min-width:0}.session-card-item .speaker-tooltip-wrap{display:inline-block;position:relative}.session-card-item .speaker-tooltip{background:rgba(0,0,0,.85);border-radius:4px;bottom:100%;color:#fff;font-size:12px;font-weight:500;left:50%;margin-bottom:6px;opacity:0;padding:4px 8px;pointer-events:none;position:absolute;transform:translateX(-50%);transition:opacity .15s ease,visibility .15s ease;visibility:hidden;white-space:nowrap;z-index:10}.session-card-item .speaker-tooltip-wrap:hover .speaker-tooltip{opacity:1;visibility:visible}.session-card-item .speaker{align-items:center;background:#e6e6e6;border-radius:50%;color:#333;display:flex;font-family:Arial,sans-serif;font-weight:600;height:40px;justify-content:center;margin-left:-10px;overflow:hidden;width:40px}.session-card-item .speaker:first-child{margin-left:0}.session-card-item .speaker img{-o-object-fit:cover;height:100%;object-fit:cover;width:100%}.session-card-item .speaker.initials{font-size:14px}.session-card-item .speaker img:not([src]),.session-card-item .speaker img[src=\"\"]{opacity:0}.session-card-actions{display:flex;flex:0 0 auto;flex-wrap:wrap;gap:10px;justify-content:flex-end;margin-top:0;min-width:0}.session-card-btn{border:none;border-radius:8px;cursor:pointer;font-size:14px;font-weight:600;min-width:80px;padding:8px 20px;transition:opacity .2s}.session-card-btn-primary{background:#000;color:#fff}.session-card-btn-primary:hover{opacity:.9}.session-card-btn-secondary{background:#000;border:none;color:#fff}.session-card-btn-secondary:hover{opacity:.9}.session-card-btn-disabled{cursor:not-allowed!important;opacity:.5;pointer-events:none}.session-card-btn-disabled.session-card-btn-primary,.session-card-btn-disabled.session-card-btn-secondary{background:#000;color:#fff}.session-card-when-disable{color:hsla(0,0%,100%,.9);font-size:13px;font-style:italic;margin-bottom:10px}.session-card-meeting-delayed{color:hsla(0,0%,100%,.95);font-size:13px;margin-bottom:10px}.attendee-cards-container{display:flex;flex-wrap:wrap;gap:20px;width:100%}.attendee-card-item{flex:0 0 calc(25% - 15px);max-width:215px!important}@media (max-width:1200px){.attendee-card-item{flex:0 0 calc(33.33333% - 13.33333px)}}@media (max-width:768px){.attendee-card-item{flex:0 0 calc(50% - 10px)}}@media (max-width:480px){.attendee-card-item{flex:0 0 100%}}.attendee-card{background-color:#5a5a5a;background-position:50%;background-size:cover;border-radius:8px;color:#fff;display:flex;flex-direction:column;height:320px;justify-content:flex-end;min-width:215px;overflow:hidden;padding:20px;position:relative}@media (max-width:480px){.attendee-card-item{max-width:100%!important}.attendee-card{height:490px}}.attendee-card-has-video{background-image:none!important}.attendee-card-video{-o-object-fit:cover;height:100%;left:0;object-fit:cover;position:absolute;top:0;width:100%;z-index:1}.attendee-card-play-btn{border:1px solid hsla(0,0%,100%,.35);border-radius:50%;font-weight:700;height:40px;left:50%;line-height:54px;text-align:center;top:40%;transform:translate(-50%,-50%);width:40px}.attendee-card-mute-btn,.attendee-card-play-btn{align-items:center;background:rgba(0,0,0,.45);color:#fff;cursor:pointer;display:flex;font-size:0;justify-content:center;padding:0;position:absolute;z-index:4}.attendee-card-mute-btn{border:1px solid hsla(0,0%,100%,.25);border-radius:50%;font-weight:600;height:34px;right:10px;top:10px;width:34px}.attendee-card-mute-btn .material-icons,.attendee-card-play-btn .material-icons{font-size:28px;line-height:1}.attendee-card-initials{background:linear-gradient(135deg,#6b7280,#4b5563);color:hsla(0,0%,100%,.9);display:flex;font-size:58px;font-weight:400;justify-content:center;letter-spacing:-2px;padding:50px 0;z-index:1}.attendee-card-initials,.attendee-overlay{height:100%;left:0;position:absolute;top:0;width:100%}.attendee-overlay{background:linear-gradient(0deg,rgba(0,0,0,.85),rgba(0,0,0,.25));pointer-events:none;z-index:2}.attendee-content{position:relative;z-index:3}.attendee-name{font-size:18px;font-weight:600;margin-bottom:4px}.attendee-company,.attendee-name{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;line-clamp:2;overflow:hidden}.attendee-company{font-size:13px;margin-bottom:8px;opacity:.85}.attendee-desc{font-size:14px;margin-bottom:12px;opacity:.95;overflow:hidden}.attendee-desc-collapsed{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;line-clamp:2}.attendee-desc-expanded{display:block;margin-bottom:6px;overflow:visible}.attendee-read-more{background:transparent;border:0;color:hsla(0,0%,100%,.9);cursor:pointer;display:inline-block;font-size:12px;font-weight:600;margin:-6px 0 10px;padding:0;text-decoration:underline}.attendee-buttons{align-items:center;display:flex;flex-direction:row;flex-wrap:nowrap;gap:8px;width:-moz-fit-content;width:fit-content}.attendee-buttons .btn{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;border:none;border-radius:3px;cursor:pointer;flex:1 1 0;font-size:12px;min-width:80px;padding:5px 8px;text-align:center;text-rendering:optimizeLegibility;white-space:nowrap}@media (max-width:480px){.attendee-buttons{flex-wrap:wrap;width:100%!important}.attendee-buttons .btn{flex:1 1 100%;max-width:100%;white-space:normal}}.attendee-card-btn-connect{background:#0d6efd;color:#fff}.attendee-card-btn-connect:hover:not(:disabled){opacity:.9}.attendee-card-btn-view-profile{background:#494949;color:#fff}.attendee-card-btn-view-profile:hover:not(:disabled){opacity:.9}.attendee-card-btn-request-sent{background:#0d6efd;color:#fff;cursor:not-allowed!important;opacity:.5}.attendee-card-btn-disconnect{background:#0d6efd;color:#fff}.attendee-card-btn-disconnect:hover{background:hsla(0,0%,100%,.3);opacity:.95}.attendee-card-btn:disabled{cursor:not-allowed!important;opacity:.6}.show-more-cards-btn{align-items:center;background:#fff;border:1.5px dashed #ccc;border-radius:12px;color:#06f;cursor:pointer;display:flex;font-size:14px;font-weight:600;justify-content:center;margin-top:12px;padding:10px 16px;width:-moz-fit-content;width:fit-content}.show-more-cards-btn:hover{background:#f8f9fa}.booth-rep-card-grid{display:grid;gap:10px;grid-template-columns:repeat(3,1fr)}@media (max-width:1204px){.booth-rep-card-grid{grid-template-columns:repeat(2,1fr)!important}.booth-rep-card-logo{height:120px!important}.booth-rep-card-logo img{-o-object-fit:contain;max-height:80px!important;object-fit:contain}}@media (max-width:768px){.booth-rep-card-grid{grid-template-columns:repeat(2,1fr)}.booth-rep-card-logo{height:90px!important}.booth-rep-card-logo img{-o-object-fit:contain;max-height:60px!important;object-fit:contain}}.booth-rep-card{background:linear-gradient(90deg,#9faffc,#a1afff 40%,#adb9ff);border-radius:6px;display:flex;flex-direction:column;padding:18px}.booth-rep-card-logo{align-items:center;background:#fff;border:1px solid #f7f7f7;border-radius:4px;box-shadow:0 0 2px #ddd;display:flex;height:140px;justify-content:center;margin-bottom:12px;width:100%}.booth-rep-card-logo img{-o-object-fit:contain;max-height:90px;object-fit:contain}.booth-rep-card-logo-placeholder{color:#9faffc;font-size:48px;font-weight:600;text-transform:uppercase}.booth-rep-card-title{-webkit-box-orient:vertical;-webkit-line-clamp:2;color:#1d2b4f;display:-webkit-box;font-size:18px;font-weight:600;line-clamp:2;margin-bottom:10px;overflow:hidden}.booth-rep-card-desc{-webkit-box-orient:vertical!important;-webkit-line-clamp:3!important;color:#3a3a3a!important;display:-webkit-box!important;font-size:14px!important;line-clamp:3!important;line-height:1.3!important;margin-bottom:18px!important;overflow:hidden!important}.booth-rep-card-btn{align-self:flex-start;background:#494949;border:none;border-radius:6px;color:#fff;cursor:pointer;font-size:14px;margin-top:auto;padding:10px 18px;transition:.3s}.booth-rep-card-btn:hover{background:#5a5a5a}.collapsible-container{margin-bottom:5px;overflow:hidden;width:100%}.collapsible-header{cursor:pointer;display:flex;padding:15px}.collapsible-header .header-icon{font-size:20px;margin-right:10px}.collapsible-header .header-title{flex:1;font-size:18px}.collapsible-header .toggle-icon{font-size:18px;margin-left:18px}.collapsible-content{background-color:#f8f9fa;color:#333;padding:15px;width:100%}.collapsible-content.show{display:block}.researchingCard{margin:5px auto}.card-header{background:#eee;border-bottom:0;border-radius:8px 8px 0 0;display:flex!important;padding:8px 15px;width:auto}.icon{font-size:20px;line-height:5px}.rotate{transform:rotate(180deg)}.collapse{display:none}.uptList{background:rgba(245,222,179,.1411764705882353);border-radius:0 0 10px 10px;margin-bottom:20px!important}.list-group-item{color:#0f0f0f;font-size:15px;margin:1px 0;padding:0 18px}.sources-container{align-items:flex-start;display:flex;gap:15px}.source-card{background-color:#f0f3f5;border-radius:10px;box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;justify-content:space-between;padding:15px;position:relative;transition:box-shadow .3s ease;width:100%}.popup{background-color:#fff;border-radius:5px;box-shadow:0 4px 8px rgba(0,0,0,.2);left:50%;opacity:0;padding:10px;position:absolute;top:100%;transform:translateX(-50%) translateY(-10px);transition:opacity .3s ease,transform .3s ease;visibility:hidden;white-space:normal;width:100%;z-index:10}.popup h5{font-size:14px;font-weight:600;line-height:1.2;margin:5px 0 10px}.popup p{font-size:12px;line-height:1.4;margin:0}.popup h5:hover{color:#007bff;cursor:pointer}.popup .source-url{color:#000;text-decoration:none}.popup .source-url:hover{color:#007bff;cursor:pointer;text-decoration:underline}.source-card:hover .popup{opacity:1;transform:translateX(-50%) translateY(-15px);visibility:visible}.source-card:hover{box-shadow:0 4px 8px rgba(0,0,0,.1);transform:scale(1.05)}.source-title{-webkit-box-orient:vertical;-webkit-line-clamp:2;display:-webkit-box;font-size:14px;font-weight:500;height:55px;line-clamp:2;line-height:1.5;overflow:hidden;text-align:left;text-overflow:ellipsis}.source-title img{margin-left:10px;width:20px}.source-url{align-items:center;color:#6c757d;display:flex;font-size:12px;text-align:left}.source-url img{border-radius:50%;height:16px;margin-right:5px;width:16px}.sourceDraweContainer .container{background-color:#fff;padding:20px}.sourceDraweContainer .sources-list{list-style:none;padding:0}.sourceDraweContainer .sources-list li{align-items:flex-start;display:flex;margin-bottom:15px}.sourceDraweContainer .sources-list input[type=checkbox]{flex-shrink:0;margin-right:15px;margin-top:8px}.sourceDraweContainer .source-content{background-color:#f5f2f2;border:1px solid #ddd;border-radius:8px;box-shadow:0 2px 4px rgba(0,0,0,.1);cursor:pointer;flex:1;padding:12px}.sourceDraweContainer .source-content:hover{background:#ccc}.sourceDraweContainer .source-title{display:block;font-size:1rem;font-weight:500;height:auto!important;margin-bottom:4px}.sourceDraweContainer .source-description{display:block;font-size:.875rem}.sourceDraweContainer .image-container{align-items:center;display:flex;margin:10px 0}.sourceDraweContainer .image-container img{-o-object-fit:cover;border:1px solid #ddd;border-radius:50%;height:16px;margin-right:5px;object-fit:cover;width:16px}.sourceDraweContainer .image-container span{color:#555;font-size:13px}.closeButtonEditor{border:0;border-radius:100%;height:32px;padding:3px 0 0;position:absolute;right:10px;top:5px;width:32px}.closeButtonSource{background:none!important;border-color:transparent!important;box-shadow:none!important;color:inherit;cursor:pointer;float:right;margin-top:20px;transition:color .2s ease-in-out}.closeButtonSource.closeplaygroundbutton{display:none!important}.graph-img{background:hsla(0,0%,99.6%,.23137254901960785);border-radius:15px;padding:15px;width:90%}.chat-textarea{background-color:#fff;border:none;box-sizing:border-box;font-size:15px;height:30px;line-height:1.5;overflow-y:hidden;padding:10px;resize:none;transition:all 1s;width:100%}.chat-textarea:focus,.chat-textarea:hover{height:60px}.chat-textarea:focus{outline:none}.fixed-btn{background-color:#000;border:none;border-radius:8px 8px 0 0;color:#fff;cursor:pointer;font-size:16px;padding:5px 12px;position:fixed;right:-22px;top:46%;transform:translateY(-50%) rotate(270deg);transform-origin:center;transition:all .5s;z-index:1000000}.fixed-btn:hover{background-color:#5b5b5b}.fixed-btn-close{background-color:#000;border:none;border-radius:8px 8px 0 0;color:#fff;cursor:pointer;font-size:16px;padding:5px 16px;position:fixed;right:549px;top:46%;transform:translateY(-50%) rotate(270deg);transform-origin:center;transition:all .5s;z-index:1000000}.fixed-btn-close:hover{background-color:#5b5b5b}.btn.rotate{transform:rotate(-15deg)}.btn.rotate:hover{transform:rotate(0deg)}.btn.cta-chat{align-items:center;aspect-ratio:1/1;background:#f3f3f3;border:none;border-radius:50%;color:#787777;display:flex;flex-shrink:0;height:40px!important;justify-content:center;max-height:40px!important;max-width:40px!important;padding:0;width:40px!important}.btn.cta-chat:hover{background:#d7d7d7;color:#666}.btn.cta-chat svg{vertical-align:middle}.btn.cta-chat.voice-btn{border-radius:9999px;flex-shrink:0;gap:8px;justify-content:flex-start;max-width:40px;min-width:40px;overflow:hidden;padding-left:11px;padding-right:11px;transition:max-width .35s ease,width .35s ease,background-color .25s ease,color .25s ease,padding .3s ease;width:40px}.btn.cta-chat.voice-btn .voice-btn-icon{flex-shrink:0}.btn.cta-chat.voice-btn .voice-btn-text{font-size:14px;font-weight:500;max-width:0;opacity:0;overflow:hidden;transition:opacity .25s ease .1s,max-width .3s ease .05s;white-space:nowrap}.btn.cta-chat.voice-btn:hover{background:#0d9488!important;color:#fff!important;padding-left:14px;padding-right:16px}.btn.cta-chat.voice-btn:hover .voice-btn-text{max-width:4em;opacity:1}.chat-footer-upt{padding:4px}.workflowbox{align-items:center;border:1px solid transparent;border-radius:48px;color:#414141!important;cursor:pointer;display:flex;font-size:14px;margin-bottom:0;padding:.5rem 1.5rem;transition:all .5s;white-space:nowrap}.workflowbox:hover{background:#fff;border:1px solid #ddd}.workflowbox svg{margin:0 10px}.edit-boxDrawer{border-left:1px solid #ddd;box-shadow:1px 1px 15px hsla(0,0%,86.7%,.7686274509803922)!important}.edit-boxDrawer mat-drawer-content,ng-deep .edit-boxDrawer mat-drawer-content{margin-left:0!important;margin-right:0!important}.SearchTitle{font-size:16px!important;text-transform:none}.exicution{background:#f9f9f9;margin:30px 0!important;padding:15px 20px}.new-conversationbutton2{align-items:center;background:#f5f5f5;border:1px solid #e3e3e3;border-radius:10px;cursor:pointer;display:flex;font-size:14px;justify-content:space-around;padding:6px;position:absolute;right:88px;top:20px!important;transition:all .5s;width:120px;z-index:1000}.new-conversationbutton2:hover{background:#eee}@media (max-width:768px){.new-conversationbutton2{align-items:center;font-size:11px!important;padding:0!important;position:fixed!important;top:22px!important;width:90px!important}}.chat-close-button{align-items:center;background:#f5f5f5;border:1px solid #e3e3e3;border-radius:10px;color:#333;cursor:pointer;display:flex;font-size:14px;gap:6px;justify-content:center;padding:6px 10px;position:absolute;right:20px;top:20px!important;transition:all .5s;z-index:1000}.chat-close-button .chat-close-button-icon{align-items:center;display:inline-flex;justify-content:center}.chat-close-button .chat-close-button-icon svg{display:block}.chat-close-button:hover{background:#eee}@media (max-width:768px){.chat-close-button{font-size:11px!important;padding:6px 8px!important;position:fixed!important;right:12px!important;top:22px!important}}.NoteTxt{margin:0 auto;margin-bottom:10px!important}.NoteTxt .text{margin:0 5px}.form-container{width:100%}.progress-container{align-items:center;display:flex}.circular-loader{border:4px solid rgba(0,0,0,.1);border-radius:50%;box-sizing:border-box;height:50px;position:relative;width:50px}.loader-spinner{animation:rotate-loader 1s linear infinite;border:2px solid #2196f3;border-radius:50%;border-top-color:transparent;box-sizing:border-box;height:100%;left:0;position:absolute;top:0;width:100%}.loader-text{color:#333;font-size:12px;font-weight:700;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.loader-label{color:#333;font-size:16px;margin-left:20px}.checkmark{align-items:center;display:flex;height:100%;justify-content:center;width:100%}.checkmark-circle{animation:stroke .6s ease-in-out forwards;stroke:#4caf50;stroke-dasharray:166;stroke-dashoffset:166;stroke-width:4}.checkmark-check{animation:stroke-check .4s ease-in-out .4s forwards;stroke:#4caf50;stroke-dasharray:48;stroke-dashoffset:48;stroke-linecap:round;stroke-linejoin:round;stroke-width:4}@keyframes stroke{to{stroke-dashoffset:0}}@keyframes stroke-check{to{stroke-dashoffset:0}}@keyframes rotate-loader{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes checkmark-animation{0%{opacity:0;transform:scale(0)}to{opacity:1;transform:scale(1)}}.circular-loader.completed .loader-spinner{animation:none;transform:rotate(1turn)}.icon-button{background-color:transparent;border:none;color:#333;cursor:pointer;font-size:24px}.icon-button:focus{outline:none}.icon-button:hover{color:#007bff}.modal{background-color:rgba(0,0,0,.4);display:block;height:100%;left:0;padding-top:0;position:fixed;top:0;width:100%;z-index:1000001}.modal-content{background-color:#fff;border-radius:8px;box-shadow:0 4px 8px rgba(0,0,0,.1);height:600px;margin:5% auto;padding:20px;position:relative;width:82%}.close{color:#aaa;float:right;font-size:28px;font-weight:700}.close:focus,.close:hover{color:#000;cursor:pointer;text-decoration:none}.SearchTitle.botUser{font-size:30px!important;text-transform:none!important}.SearchTitle.botUser h2,.SearchTitle.botUser p{font-size:1.7rem!important}.title_chat{display:flex;margin:0;padding:0}.title_chat h2{align-items:center;display:flex;font-size:20px;gap:10px;margin:10px 0}.title_chat h2 p{display:inline!important}.title_chat h2 span:before{content:\"\"!important}@media (max-width:768px){.title_chat h2{align-items:start;flex-direction:column;font-size:16px}}.small-title{font-size:12px;margin:2px 0}.titleSection{margin:0}.titleSection h2{color:#000;font-size:20px;margin:0}.inputs-section{background-color:#f7f7f7;border-radius:5px;margin:0 0 10px;padding:10px 15px 0}.inputs-section h3{font-size:16px}.actions-section{background-color:#f9f9f9;border-radius:5px;height:500px;margin-bottom:20px;overflow-y:auto;padding:15px}.timeline{margin-bottom:20px;padding-left:40px;position:relative}.timeline:before{border-right:2px dashed #cecece;content:\"\";height:100%;left:19px;position:absolute}.timeline-item{margin-bottom:20px;position:relative}.timeline-item:before{background-color:#007bff;border-radius:50%;content:\"\";height:20px;left:-30px;position:absolute;top:0;width:20px;z-index:1}.timeline-item h4{color:#000;font-size:16px;font-weight:700;margin:0}.timeline-item pre{background-color:#fff;border:1px solid #ddd;border-radius:5px;padding:10px;white-space:pre-wrap}.timestamp-section{color:#666;font-style:normal;justify-content:space-between}.mic-btn{background-color:#ff4d4d;border:none;border-radius:50%;color:#fff;cursor:pointer;font-size:1.5em;padding:10px}.mic-btn:active{background-color:#f66}.actions-section h3{font-size:16px}.close-wrapper{display:flex;justify-content:right;position:absolute;right:22px;top:0;width:100%}.close_pop{color:#aaa;cursor:pointer;font-size:30px;font-weight:400}.chat-avatar,.close_pop{align-items:center;display:flex;justify-content:center}.chat-avatar{background:#fcfcfc;border:1px solid #dfdfdf;border-radius:50%;flex-shrink:0;height:44px;min-height:44px;min-width:44px;overflow:hidden;width:44px}.chat-avatar-img{-o-object-fit:cover;height:100%;object-fit:cover;width:100%}.chat-avatar-initials{-moz-user-select:none;-webkit-user-select:none;color:#555;font-size:1rem;font-weight:600;text-transform:uppercase;user-select:none}.chat-avatar-initials-assistant{color:#000}.chat-avatar-initials-user{color:#761c79}.user-Box{align-items:center;display:flex}.bards{position:absolute;right:0;top:20px}::ng-deep .code-container{margin:20px 0;position:relative}::ng-deep .copy-button{background-color:#007bff;border:none;border-radius:4px;color:#fff;cursor:pointer;padding:5px 10px;position:absolute;right:10px;top:10px}::ng-deep .copy-button:hover{background-color:#0056b3}::ng-deep .code_block.diff{background-color:#f8f8f8;border-left:4px solid #ccc;overflow:auto;padding:10px}::ng-deep .heading003{color:#000;font-size:20px;font-weight:700}::ng-deep .listing{list-style:decimal;margin:0 25px;padding:0}.line{background-color:#e8e8e8;border-radius:15px;display:inline-block;height:15px;width:15px}.load-2 .line:last-child{animation:loadingB 1.5s 1s infinite;margin:5px 0}.load-2 .line:nth-last-child(2){animation:loadingB 1.5s .5s infinite;margin:5px 0}.load-2 .line:nth-last-child(3){animation:loadingB 1.5s 0s infinite;margin:5px 0}.load-1 .line:last-child{animation:loadingA 1.5s 1.2s infinite;margin:5px 0}.load-1 .line:nth-last-child(2){animation:loadingA 1.5s .8s infinite;margin:5px 0}.load-1 .line:nth-last-child(3){animation:loadingA 1.5s .2s infinite;margin:5px 0}@keyframes loadingB{0%{width:65px}50%{width:235px}to{width:65px}}@keyframes loadingA{0%{width:45px}50%{width:205px}to{width:45px}}.chat-thinking{padding-left:20px!important}.chat-thinking .thinking-row{align-items:center;display:flex;gap:8px;margin-top:6px}.chat-thinking .thinking-dots{align-items:center;display:flex;gap:4px}.chat-thinking .thinking-dot{animation:thinking-bounce 1.4s ease-in-out infinite both;background:#06f;border-radius:50%;height:6px;width:6px}.chat-thinking .thinking-dot:first-child{animation-delay:0s;background:#9ca3af}.chat-thinking .thinking-dot:nth-child(2){animation-delay:.2s;background:#06f}.chat-thinking .thinking-dot:nth-child(3){animation-delay:.4s;background:#17235b}.chat-thinking .thinking-text{color:#6b7280;font-size:14px;font-weight:400}@keyframes thinking-bounce{0%,80%,to{opacity:.6;transform:scale(.8)}40%{opacity:1;transform:scale(1.1)}}.loaderbox{height:60px;margin:10px 0;position:relative}.loader-pkg{bottom:0;left:0;margin:0;top:0;width:250px}.loader--dot,.loader-pkg{height:20px;position:absolute}.loader--dot{animation-duration:3s;animation-iteration-count:infinite;animation-name:loader;animation-timing-function:ease-in-out;background-color:#1a6774;border-radius:100%;width:20px}.loader--dot:first-child{animation-delay:.5s;background-color:#618e93}.loader--dot:nth-child(5){animation-delay:.4s;background-color:#3fb0c3}.loader--dot:nth-child(4){animation-delay:.3s;background-color:#40b8cd}.loader--dot:nth-child(3){animation-delay:.2s;background-color:#ec8828}.loader--dot:nth-child(2){animation-delay:.1s;background-color:#fdc25d}.loader--dot:first-child{animation-delay:0s;background-color:#f4e3be}.loader--text{left:0;margin:0;position:absolute;top:200%;width:4rem}.loader--text:after{animation-duration:3s;animation-iteration-count:infinite;animation-name:loading-text;content:\"Loading\";font-weight:700}@keyframes loader{15%{transform:translateX(230px)}45%{transform:translateX(0)}65%{transform:translateX(230px)}95%{transform:translateX(0)}}@keyframes loading-text{0%{content:\"Loading\"}25%{content:\"Loading.\"}50%{content:\"Loading..\"}75%{content:\"Loading...\"}}::ng-deep .loaderbox{height:60px;margin:10px 0;position:relative}::ng-deep .loader-pkg{bottom:0;height:20px;left:0;margin:0;position:absolute;top:0;width:250px}::ng-deep .loader--dot{animation-duration:3s;animation-iteration-count:infinite;animation-name:loader;animation-timing-function:ease-in-out;background-color:#1a6774;border-radius:100%;height:20px;position:absolute;width:20px}::ng-deep .loader--dot:first-child{animation-delay:.5s;background-color:#618e93}::ng-deep .loader--dot:nth-child(5){animation-delay:.4s;background-color:#3fb0c3}::ng-deep .loader--dot:nth-child(4){animation-delay:.3s;background-color:#40b8cd}::ng-deep .loader--dot:nth-child(3){animation-delay:.2s;background-color:#ec8828}::ng-deep .loader--dot:nth-child(2){animation-delay:.1s;background-color:#fdc25d}::ng-deep .loader--dot:first-child{animation-delay:0s;background-color:#f4e3be}::ng-deep .loader--text{left:0;margin:0;position:absolute;top:200%;width:4rem}::ng-deep .loader--text:after{animation-duration:3s;animation-iteration-count:infinite;animation-name:loading-text;content:\"Loading\";font-weight:700}.agents-popwindowbox{background:#fff;padding:10px;width:100%}.agents-popwindowbox h3{color:#000;font-size:15px}.dropdown-menu-agents{background-color:#fff;border:1px solid #ededed;border-radius:5px;bottom:100%!important;box-shadow:0 2px 4px rgba(0,0,0,.1);display:block;left:0;margin-bottom:10px;padding:0;position:absolute;top:auto;width:270px;z-index:1000}.dropdown-menu-agents .scrollerbox{display:flex;flex:fit-content;flex-direction:column;height:215px;overflow-y:auto}.dropdown-menu-agents label{align-items:center;background:#f9f9f9;border-radius:2px;cursor:pointer;display:flex;font-size:13px;justify-content:start;line-height:16px;margin:2px 0;padding:7px}.dropdown-menu-agents label:hover{background:#ebebeb}.dropdown-menu-agents label input{opacity:0;position:absolute}.dropdown-menu-agents .input-check{border:2px solid #ccc;border-radius:4px;display:inline-block;height:23px;margin-right:5px;position:relative;top:0;transition:.5s;width:25px}.dropdown-menu-agents label input:checked~.input-check{animation:animate .7s ease;background:#06f;border-color:#06f}@keyframes animate{0%{transform:scale(1)}40%{transform:scale(1.3,.7)}55%{transform:scale(1)}70%{transform:scale(1.2,.8)}80%{transform:scale(1)}90%{transform:scale(1.1,.9)}to{transform:scale(1)}}.dropdown-menu-agents .input-check:before{border-bottom:3px solid #fff;border-left:3px solid #fff;content:\"\";height:6px;left:4px;position:absolute;top:6px;transform:scale(0) rotate(-45deg);transition:.5s;width:15px}.dropdown-menu-agents label input:checked~.input-check:before{transform:scale(1) rotate(-45deg)}::ng-deep .h1,::ng-deep h1{font-size:1.165rem}::ng-deep .h2,::ng-deep .h3,::ng-deep h2,::ng-deep h3{font-size:1.125rem}::ng-deep b,::ng-deep strong{font-weight:600}@media (max-width:768px){.note{line-height:15px;margin:0 auto;padding:3px 0 10px;width:90%}}.show-hover{display:none}.chat.bot:hover .show-hover{display:flex!important}"]
|
|
3588
3588
|
},] }
|
|
3589
3589
|
];
|
|
3590
3590
|
ChatDrawerComponent.ctorParameters = () => [
|
|
@@ -3673,4 +3673,4 @@ ChatDrawerComponent.propDecorators = {
|
|
|
3673
3673
|
refreshToken: [{ type: Output }],
|
|
3674
3674
|
openSupport: [{ type: Output }]
|
|
3675
3675
|
};
|
|
3676
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1kcmF3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9yb2hpdHRoYWt1ci9oaXZlLWdwdC9IaXZlQUktUGFja2FnZXMvQW5ndWxhci9wcm9qZWN0cy9oaXZlZ3B0L2V2ZW50c2dwdC1hbmd1bGFyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NoYXQtZHJhd2VyL2NoYXQtZHJhd2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvREFBb0Q7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXpFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUVaLFFBQVEsRUFDUixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEdBQ2pCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENB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QUFFO3FDQUV0QyxZQUFZLFNBQUMsdUJBQXVCO3FCQUVwQyxTQUFTLFNBQUMsUUFBUTs0QkFDbEIsU0FBUyxTQUFDLGVBQWU7NEJBQ3pCLFNBQVMsU0FBQyxlQUFlOzBCQUd6QixLQUFLO3dCQUNMLEtBQUs7dUJBQ0wsS0FBSztxQkFDTCxLQUFLO3lCQUNMLEtBQUs7MkJBQ0wsS0FBSzt5QkFDTCxLQUFLO3NCQUNMLEtBQUs7d0JBQ0wsS0FBSztvQkFDTCxLQUFLO29CQUNMLEtBQUs7K0JBQ0wsS0FBSztpQ0FDTCxLQUFLOzBCQUNMLEtBQUs7NEJBQ0wsS0FBSzs0QkFDTCxLQUFLO3NCQUNMLEtBQUs7dUJBQ0wsS0FBSzt5QkFDTCxLQUFLOzZCQUNMLEtBQUs7dUJBQ0wsS0FBSzt3QkFDTCxLQUFLO3NCQUNMLEtBQUs7NEJBSUwsS0FBSzsrQkFDTCxLQUFLO2lDQUNMLEtBQUs7dUJBQ0wsS0FBSzs2QkFDTCxLQUFLO3VCQUNMLEtBQUs7aUNBQ0wsS0FBSzttQ0FDTCxLQUFLO29CQUNMLEtBQUs7OEJBQ0wsS0FBSztrQ0FDTCxLQUFLO3dCQUNMLEtBQUs7aUNBQ0wsS0FBSzs4QkFDTCxLQUFLO3VCQUVMLEtBQUs7K0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3FCQUNMLEtBQUs7b0JBQ0wsS0FBSztxQ0FFTCxLQUFLO3NCQUVMLEtBQUs7OEJBRUwsS0FBSzt3Q0FFTCxLQUFLO21DQUVMLEtBQUs7d0JBRUwsS0FBSzsrQkFFTCxLQUFLO21DQUNMLEtBQUs7NEJBQ0wsTUFBTTsyQkFDTixNQUFNO3VCQUNOLE1BQU07NkJBQ04sTUFBTTttQ0FFTixNQUFNO3VCQUNOLE1BQU07OEJBQ04sTUFBTTtpQ0FFTixNQUFNO3dCQUVOLE1BQU07OEJBQ04sTUFBTTsyQkFDTixNQUFNOzBCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbi5zZXJ2aWNlJztcblxuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREcmF3ZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZm9ybWF0Tm93LCBmb3JtYXRUaW1lU3RhbXBzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgZGV2X2Vudmlyb25tZW50LFxuICBwcm9kX2Vudmlyb25tZW50LFxufSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2NvbnZlcnNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNvY2tldFNlcnZpY2UgfSBmcm9tICcuLi9zb2NrZXQtc2VydmljZS5zZXJ2aWNlJztcblxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgKiBhcyBTcGVlY2hTREsgZnJvbSAnbWljcm9zb2Z0LWNvZ25pdGl2ZXNlcnZpY2VzLXNwZWVjaC1zZGsnO1xuaW1wb3J0IHsgQm90c1NlcnZpY2UgfSBmcm9tICcuLi9ib3Quc2VydmljZSc7XG5pbXBvcnQgKiBhcyBtYXJrZWQgZnJvbSAnbWFya2VkJzsgLy8gSW1wb3J0IG1hcmtlZFxuaW1wb3J0IHsgVm9pY2VBZ2VudFNlcnZpY2UgfSBmcm9tICcuLi92b2ljZS1hZ2VudC9zZXJ2aWNlcy92b2ljZS1hZ2VudC5zZXJ2aWNlJztcbmltcG9ydCB7IFZvaWNlQWdlbnRNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3ZvaWNlLWFnZW50L2NvbXBvbmVudHMvdm9pY2UtYWdlbnQtbW9kYWwvdm9pY2UtYWdlbnQtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIFZPSUNFX01PREFMX0NPTkZJRyxcbiAgVk9JQ0VfTU9EQUxfQ0xPU0VfQ0FMTEJBQ0ssXG4gIFZvaWNlTW9kYWxDb25maWcsXG59IGZyb20gJy4uL3ZvaWNlLWFnZW50L3ZvaWNlLW1vZGFsLXRva2Vucyc7XG5cbmV4cG9ydCBlbnVtIGVDbGFzc2lmaWNhdGlvblR5cGUge1xuICBMaXZlID0gJzYwNDBkY2U1NzYxNWYwNzcwYWYxNDI1NicsXG4gIE9uRGVtYW5kID0gJzYwNDBkY2U1NzYxNWYwNzcwYWYxNDI1NycsXG4gIEJyZWFrb3V0ID0gJzYwNDBkY2U1NzYxNWYwNzcwYWYxNDI1OCcsXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hpdmVncHQtY2hhdC1kcmF3ZXItcGFja2FnZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGF0LWRyYXdlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXQtZHJhd2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDaGF0RHJhd2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBAVmlld0NoaWxkKCdjaGF0TWFpbicpIHByaXZhdGUgY2hhdE1haW46IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ215SW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgbXlJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTFRleHRBcmVhRWxlbWVudD47IC8vIFJlZmVyZW5jZSB0byB0aGUgdGV4dGFyZWFcbiAgQFZpZXdDaGlsZHJlbignY2xvc2VwbGF5Z3JvdW5kYnV0dG9uJylcbiAgY2xvc2VQbGF5Z3JvdW5kQnV0dG9uczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkKCdkcmF3ZXInKSBkcmF3ZXIhOiBNYXREcmF3ZXI7XG4gIEBWaWV3Q2hpbGQoJ3NvdXJjZXNEcmF3ZXInKSBzb3VyY2VzRHJhd2VyITogTWF0RHJhd2VyO1xuICBAVmlld0NoaWxkKCdlZGl0b3JzRHJhd2VyJykgZWRpdG9yc0RyYXdlciE6IE1hdERyYXdlcjtcbiAgcHJpdmF0ZSBib2R5T3ZlcmZsb3dDbGFzcyA9ICdib2R5LW92ZXJmbG93LWhpZGRlbic7XG4gIGlzQ29sbGFwc2VkVHJ1ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBjb3BpbG90TmFtZTogc3RyaW5nID0gJ0hpdmVYR1BUJztcbiAgQElucHV0KCkgZmlyc3ROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBsYXN0TmFtZSE6IHN0cmluZztcbiAgQElucHV0KCkgYXBpS2V5ITogc3RyaW5nO1xuICBASW5wdXQoKSBiZ0J1YmJsZUFpITogc3RyaW5nO1xuICBASW5wdXQoKSBiZ0J1YmJsZVVzZXIhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnR3JhZGllbnQhOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgYm90TmFtZSE6IHN0cmluZztcbiAgQElucHV0KCkgYm90U2tpbGxzITogc3RyaW5nO1xuICBASW5wdXQoKSBib3RJZCE6IHN0cmluZztcbiAgQElucHV0KCkgb3JnSWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsb3NlQnV0dG9uQ29sb3IhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsb3NlQnV0dG9uYmdDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgY3JlZGVudGlhbHMhOiBbXTtcbiAgQElucHV0KCkgZGF0ZVRpbWVDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgZGF0ZVRleHRDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgZXZlbnRJZCE6IHN0cmluZztcbiAgQElucHV0KCkgZXZlbnRVcmwhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGV2ZW50VG9rZW4hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHdvcmtzcGFjZVRva2VuITogc3RyaW5nO1xuICBASW5wdXQoKSBzMjdUb2tlbiE6IHN0cmluZztcbiAgQElucHV0KCkgZXZlbnROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBib3RJY29uITogc3RyaW5nO1xuICByZWFkb25seSBkaXNwbGF5QXZhdGFyVXJsID1cbiAgICAnaHR0cHM6Ly93d3cuam90Zm9ybS5jb20vdXBsb2Fkcy9tZWhtZXRrYXJha2FzbGkvZm9ybV9maWxlcy8xNTY0NTkzNjY3Njc2YThlODVmMjM3NTguODY5NDU1MzdfaWNvbi5wbmcnO1xuICAvKiogVXNlciBwcm9maWxlIGltYWdlIFVSTC4gRmFsbHMgYmFjayB0byBpbml0aWFscyAoZ2V0VXNlcklkSW5pdGlhbHMoKSkgaWYgbm90IHNldC4gKi9cbiAgQElucHV0KCkgdXNlckF2YXRhclVybD86IHN0cmluZztcbiAgQElucHV0KCkgZm9ybUZpZWxkQmdDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgZm9ybUZpZWxkVGV4dENvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBmdWxsVmlldyE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGdyYWRpZW50Q29sb3JzITogc3RyaW5nW107XG4gIEBJbnB1dCgpIGdyZWV0aW5nITogc3RyaW5nO1xuICBASW5wdXQoKSBtZXNzYWdlVGV4dENvbG9yQWkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1lc3NhZ2VUZXh0Q29sb3JVc2VyITogc3RyaW5nO1xuICBASW5wdXQoKSBydWxlcyE6IHN0cmluZztcbiAgQElucHV0KCkgc2VuZEJ1dHRvbkNvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBzZW5kQnV0dG9uVGV4dENvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93Q2xvc2UhOiBib29sZWFuO1xuICBASW5wdXQoKSB0aHVtYnNEb3duTWVzc2FnZXMhOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgdGh1bWJzVXBNZXNzYWdlITogc3RyaW5nO1xuICAvKiogVXNlcidzIHNlbGVjdGVkIHRpbWV6b25lIChlLmcuICdBbWVyaWNhL05ld19Zb3JrJyk7IHVzZWQgZm9yIHRpbWVzdGFtcHMgYW5kIHNlc3Npb24gY2FyZCB0aW1lcy4gV2hlbiBub3Qgc2V0LCBzZXNzaW9uIGRhdGEgb3IgbG9jYWwgdGltZSBpcyB1c2VkLiAqL1xuICBASW5wdXQoKSB0aW1lem9uZT86IHN0cmluZztcbiAgQElucHV0KCkgdW5rbm93blJlc3BvbnNlcyE6IFtdO1xuICBASW5wdXQoKSB1c2VPcGVuQWkhOiBib29sZWFuO1xuICBASW5wdXQoKSB1c2VySWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzRGV2ITogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgY2hhdCBhdXRvLXNjcm9sbHMgdG8gYm90dG9tIHdoZW4gbmV3IGNvbnRlbnQgaXMgYWRkZWQuIERlZmF1bHQ6IGZhbHNlIChubyBhdXRvIHNjcm9sbCkuICovXG4gIEBJbnB1dCgpIGF1dG9TY3JvbGxPbk5ld01lc3NhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIE9wdGlvbmFsIEFQSSBiYXNlIFVSTCAoZS5nLiBuZ3JvayB0dW5uZWwpLiBXaGVuIHNldCwgYWxsIGNoYXQvdm9pY2UgcmVxdWVzdHMgdXNlIHRoaXMgaW5zdGVhZCBvZiBkZXYvcHJvZCBkZWZhdWx0LiAqL1xuICBASW5wdXQoKSBiYXNlVXJsPzogc3RyaW5nO1xuICAvKiogQ29ubmVjdGlvbnMgbGlzdCBmcm9tIGhvc3QgKGUuZy4gZnJvbSBzdG9yZSBzZWxlY3RDb25uZWN0aW9uc0xpc3QpLiBFYWNoIGl0ZW0gaGFzIHVzZXJJZC4gV2hlbiBzZXQsIHVzZWQgZm9yIENvbm5lY3QvUmVxdWVzdCBTZW50L0Rpc2Nvbm5lY3QgYnV0dG9uIHN0YXRlLiAqL1xuICBASW5wdXQoKSBjb25uZWN0aW9uc0xpc3Q6IGFueVtdID0gW107XG4gIC8qKiBQZW5kaW5nIHNlbnQgcmVxdWVzdCB1c2VyIElEcyBmcm9tIGhvc3QgKGUuZy4gZnJvbSBzdG9yZSBzZWxlY3RQZW5kaW5nQ29ubmVjdGlvbnNTZW50TGlzdCkuIFdoZW4gc2V0LCB1c2VkIGZvciBSZXF1ZXN0IFNlbnQgc3RhdGUuICovXG4gIEBJbnB1dCgpIHBlbmRpbmdTZW50UmVxdWVzdFVzZXJJZHM6IGFueVtdID0gW107XG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgQ29ubmVjdCAvIFJlcXVlc3QgU2VudCAvIERpc2Nvbm5lY3QgYnV0dG9ucyBvbiBhdHRlbmRlZSBjYXJkcyAoZS5nLiBmcm9tIHVzZXJTZXR0aW5ncz8uaXNDb25uZWN0aW9uc0VuYWJsZWQpLiAqL1xuICBASW5wdXQoKSBpc0Nvbm5lY3Rpb25zRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKFVOL0NPUCBldmVudHMpOiBzZXNzaW9uIGNhcmQgc2hvd3MgXCJTZXNzaW9uIHR5cGVcIiBsYWJlbCBhbmQgSm9pbi9XYXRjaCBidXR0b25zLiBXaGVuIGZhbHNlOiBzaG93cyBcIk1lZXRpbmcgdHlwZVwiIGxhYmVsIGFuZCBzaW5nbGUgUGxheSBidXR0b24gKHNhbWUgYXMgdGVtcGxhdGUyKS4gKi9cbiAgQElucHV0KCkgaXNVbkV2ZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgYWdhaW5CdXR0b25Db2xvciE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBhZ2FpbkJ1dHRvblRleHRDb2xvciE6IHN0cmluZ1tdO1xuICBAT3V0cHV0KCkgZmVlZGJhY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgb25DbG9zZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb3BlblBhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlc3Npb25BY3Rpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgSm9pbi9XYXRjaCBidXQgYWN0aW9uIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIChlLmcuIHNlc3Npb24gbm90IHN0YXJ0ZWQpLiBIb3N0IGNhbiBzaG93IHRvYXN0ZXIgd2l0aCB0aGUgbWVzc2FnZS4gKi9cbiAgQE91dHB1dCgpIHNlc3Npb25BY3Rpb25CbG9ja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBjbG9zZUJvdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY29ubmVjdFdpdGhVc2VyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgVmlldyBwcm9maWxlIG9uIGEgc3BlYWtlciBjYXJkIChnZXRfZXZlbnRfc3BlYWtlcnMpLiBIb3N0IHNob3VsZCBvcGVuIHNwZWFrZXIgZGV0YWlsIGRyYXdlciBzYW1lIGFzIC9ldmVudHMvOmlkL3NwZWFrZXJzLiAqL1xuICBAT3V0cHV0KCkgdmlld1NwZWFrZXJQcm9maWxlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHNwZWFrZXI6IGFueTsgc3BlYWtlcnM6IGFueVtdIH0+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgVmlldyBCb290aCBvbiBhIHNwb25zb3IvYm9vdGggY2FyZCAoZ2V0X2V2ZW50X3Nwb25zb3JzLCBnZXRfZXZlbnRfYm9vdGhzKS4gSG9zdCBzaG91bGQgbmF2aWdhdGUgdG8gZXZlbnRzLzpldmVudFVybC9zcG9uc29ycy9ib290aHMvOmJvb3RoVXJsLiAqL1xuICBAT3V0cHV0KCkgdmlld0Jvb3RoID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJvb3RoSWQ/OiBzdHJpbmc7IGJvb3RoVXJsPzogc3RyaW5nOyBzcG9uc29yPzogYW55IH0+KCk7XG4gIEBPdXRwdXQoKSBzY2hlZHVsZU1lZXRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHJlZnJlc2hUb2tlbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb3BlblN1cHBvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBhdXRvZ2VuS2V5ID0gJ0F1dG9nZW5fZURKVHRFVS1OQjBSdElwenExdyc7XG4gIGFkZFRvTXlBZ2VuZGFBY3Rpb24gPSAnYWRkX3RvX215X2FnZW5kYSc7XG4gIG15VXBjb21pbmdTZXNzaW9uQWN0aW9uID0gJ215X3VwY29tbWluZ19zZXNzaW9uJztcbiAgY29ubmVjdE9yRm9sbG93QWN0aW9uID0gJ2Nvbm5lY3Rfb3JfZm9sbG93JztcbiAgYWlSZXNwb25zZTogc3RyaW5nID0gJyc7XG4gIGNoYXRMb2c6IGFueVtdID0gW107XG4gIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgZmVlZGJhY2tEb25lOiBib29sZWFuID0gZmFsc2U7XG4gIGdyZWV0aW5nTXNnOiBzdHJpbmcgPSAnJztcbiAgaGFzQmFja2Ryb3BWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpbnB1dDogc3RyaW5nID0gJyc7XG4gIGxpc3RlbmVyQWRkZWQgPSBmYWxzZTtcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBtb2RlOiBzdHJpbmcgPSAnb3Zlcic7XG4gIHF1aWNrUHJvbXB0czogYW55W10gPSBbXTtcbiAgdGh1bWJzRG93bk1zZ0luZGV4ID0gMDtcbiAgdXNlck5hbWU6IHN0cmluZyA9ICcnO1xuICBzaG93U3RhcnRBZ2FpbjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0lPU0RldmljZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93RmVlZEJhY2tJY29uc0luZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgdGVtcGVyYXR1cmU6IG51bWJlciA9IDE7XG4gIC8qKiBTcGVha2VyIGNhY2hlIGJ5IHN0YWZmIGlkIChmaWxsZWQgdmlhIGdldC1ieS1zdGFmZi1pZHMpLiAqL1xuICBzcGVha2VyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAvKiogUHJldmVudCBkdXBsaWNhdGUgc3BlYWtlciBmZXRjaGVzIGFjcm9zcyBtZXNzYWdlcy4gKi9cbiAgcHJpdmF0ZSByZXF1ZXN0ZWRTcGVha2VySWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGVudmlyb25tZW50OiB7XG4gICAgVVNFUlNfQVBJO1xuICAgIEJBU0VfVVJMO1xuICAgIEFHRU5UU19BUEk7XG4gIH07XG4gIHBlbmRpbmdSZXF1ZXN0czogYW55O1xuICBteUNvbm5lY3Rpb25zOiBhbnk7XG4gIGNvbnZlcnNhdGlvbktleTogc3RyaW5nO1xuICBjb25TZXNzaW9uS2V5OiBzdHJpbmcgPSAnJztcbiAgaXNGZXRjaERhdGFGb3I6IGJvb2xlYW47XG4gIGlzNDAxOiBib29sZWFuO1xuICBtc2c6IGFueTtcbiAgY2hhdDogYW55O1xuICBpc1dvcmtmbG93T3BlbjogYm9vbGVhbjtcbiAgb3JnV29ya2Zsb3dzOiBhbnk7XG4gIG9wZW5Xb3JrZmxvd0lucHV0OiBib29sZWFuO1xuICBzZWxlY3RlZFdvcmtmbG93OiBhbnk7XG4gIHdvcmtmbG93Rm9ybTogYW55O1xuICBjdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzczogbnVtYmVyID0gMDtcbiAgY3VycmVudFdvcmtmbG93QWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgZXhlY3V0aW5nV29ya2Zsb3c6IGJvb2xlYW47XG4gIHdvcmtmbG93RXhlY3V0aW9uRGV0YWlsczogYW55O1xuICBzaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzOiBhbnk7XG4gIGN1cnJlbnRXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM6IGFueTtcblxuICBzcGVlY2hDb25maWc6IFNwZWVjaFNESy5TcGVlY2hDb25maWc7XG4gIHJlY29nbml6ZXI6IFNwZWVjaFNESy5TcGVlY2hSZWNvZ25pemVyO1xuICByZWNvZ25pemVkVGV4dDogc3RyaW5nID0gJyc7XG4gIGF1dGhvcml6YXRpb25Ub2tlbjogc3RyaW5nID0gJyc7XG4gIHJlZ2lvbjogc3RyaW5nID0gJ3dlc3RldXJvcGUnOyAvLyBTZXQgeW91ciBBenVyZSByZWdpb24gaGVyZVxuICBpc1JlY29yZGluZzogYm9vbGVhbjtcbiAgaXNWb2ljZU1vZGFsT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHZvaWNlTW9kYWxPdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdm9pY2VUcmFuc2NyaXB0U3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGJvdFNlcnZpY2U6IEJvdHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc29ja2V0U2VydmljZTogU29ja2V0U2VydmljZSxcbiAgICBwcml2YXRlIGNvbnZlcnNhdGlvblNlcnZpY2U6IENvbnZlcnNhdGlvblNlcnZpY2UsIC8vIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHZvaWNlQWdlbnRTZXJ2aWNlOiBWb2ljZUFnZW50U2VydmljZSxcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICApIHtcbiAgICB0aGlzLmNoYXRNYWluID0gbmV3IEVsZW1lbnRSZWYobnVsbCk7XG5cbiAgICAvLyBpZiAodGhpcy5wbGF0Zm9ybS5JT1MpIHtcbiAgICAvLyAgIHRoaXMuaXNJT1NEZXZpY2UgPSB0cnVlO1xuICAgIC8vIH1cbiAgfVxuICBnZXRUcmFuc2xhdGlvbihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5nZXRUcmFuc2xhdGlvbihrZXkpO1xuICB9XG5cbiAgLyoqIFRpbWUgc2hvd24gbmV4dCB0byBcIkFzc2lzdGFudFwiIHdoZW4gaW4gdGhpbmtpbmcvbG9hZGluZyBzdGF0ZS4gKi9cbiAgZ2V0TG9hZGluZ1RpbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpO1xuICB9XG5cbiAgLyoqIFVzZXIgaW5pdGlhbHMgZm9yIGF2YXRhciBmYWxsYmFjayAoZS5nLiBcIkpEXCIgZnJvbSBmaXJzdE5hbWUgKyBsYXN0TmFtZSkuICovXG4gIGdldFVzZXJJZEluaXRpYWxzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZmlyc3QgPSAodGhpcy5maXJzdE5hbWUgfHwgJycpLnRyaW0oKTtcbiAgICBjb25zdCBsYXN0ID0gKHRoaXMubGFzdE5hbWUgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoZmlyc3QgJiYgbGFzdCkgcmV0dXJuIChmaXJzdFswXSArIGxhc3RbMF0pLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKGZpcnN0KSByZXR1cm4gZmlyc3Quc2xpY2UoMCwgMikudG9VcHBlckNhc2UoKTtcbiAgICBpZiAobGFzdCkgcmV0dXJuIGxhc3Quc2xpY2UoMCwgMikudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gJ1UnO1xuICB9XG5cbiAgLyoqIEF0dGVuZGVlIGluaXRpYWxzIGZvciBjYXJkIHdoZW4gbm8gcGhvdG8gKGUuZy4gXCJWaWpheSBQYWxpd2FsXCIgLT4gXCJWUFwiLCBcIkppbVwiIC0+IFwiSlwiKS4gKi9cbiAgZ2V0QXR0ZW5kZWVJbml0aWFscyhuYW1lOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSByZXR1cm4gJz8nO1xuICAgIGNvbnN0IHBhcnRzID0gbmFtZS50cmltKCkuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKVxuICAgICAgcmV0dXJuIChwYXJ0c1swXVswXSArIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdWzBdKS50b1VwcGVyQ2FzZSgpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHJldHVybiBwYXJ0c1swXS5zbGljZSgwLCAyKS50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiAnPyc7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gSGFuZGxlIGV2ZW50SWQgY2hhbmdlcyB0byB1cGRhdGUgdHJhbnNsYXRpb24gc2VydmljZVxuICAgIGlmIChjaGFuZ2VzLmV2ZW50SWQgJiYgY2hhbmdlcy5ldmVudElkLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2Uuc2V0RXZlbnRJZChjaGFuZ2VzLmV2ZW50SWQuY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5zMjdUb2tlbikge1xuICAgICAgaWYgKGNoYW5nZXMuczI3VG9rZW4uY3VycmVudFZhbHVlICE9IGNoYW5nZXMuczI3VG9rZW4ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICB0aGlzLnMyN1Rva2VuID0gY2hhbmdlcy5zMjdUb2tlbi5jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ2lzRmV0Y2hEYXRhRm9yOiAnLCB0aGlzLmlzRmV0Y2hEYXRhRm9yKTtcbiAgICAgICAgY29uc29sZS5sb2coJ21zZzogJywgdGhpcy5tc2cpO1xuICAgICAgICBjb25zb2xlLmxvZygnY2hhdDogJywgdGhpcy5jaGF0KTtcbiAgICAgICAgaWYgKHRoaXMuaXM0MDEpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc0ZldGNoRGF0YUZvcikge1xuICAgICAgICAgICAgdGhpcy5mZXRjaERhdGFGb3IodGhpcy5tc2csIHRoaXMuY2hhdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hEYXRhKHRoaXMubXNnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEbyBOT1QgY2FsbCBpbml0aWFsaXplU29ja2V0KCkgaGVyZS4gU29ja2V0LklPIGlzIGZvciBjaGF0IG9ubHk7IHdlIGRlZmVyXG4gICAgLy8gdW50aWwgdGhlIHVzZXIgYWN0dWFsbHkgdXNlcyBjaGF0IChzZW5kIG1lc3NhZ2Ugb3Igc3RhcnQgbmV3IGNvbnZlcnNhdGlvbilcbiAgICAvLyBzbyB0aGF0IHZvaWNlLW9ubHkgdXNhZ2UgbmV2ZXIgdHJpZ2dlcnMgU29ja2V0LklPIChhdm9pZHMgdjIvdjMgbWlzbWF0Y2ggZXJyb3IpLlxuICAgIGlmIChcbiAgICAgIGNoYW5nZXMub3JnSWQgJiZcbiAgICAgIGNoYW5nZXMub3JnSWQuY3VycmVudFZhbHVlICE9IGNoYW5nZXMub3JnSWQucHJldmlvdXNWYWx1ZVxuICAgICkge1xuICAgICAgdGhpcy5jaGF0U29ja2V0SW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuYmFzZVVybCAmJiB0aGlzLmVudmlyb25tZW50KSB7XG4gICAgICB0aGlzLmFwcGx5QmFzZVVybE92ZXJyaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFdoZW4gYmFzZVVybCBpbnB1dCBpcyBzZXQsIG92ZXJyaWRlIGVudmlyb25tZW50LkJBU0VfVVJMIHNvIGFsbCBjaGF0L3ZvaWNlIHNlcnZpY2VzIHVzZSBpdCAoc3VwcG9ydHMgbmdyb2sgZXRjLikuICovXG4gIHByaXZhdGUgYXBwbHlCYXNlVXJsT3ZlcnJpZGUoKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdEVudiA9IHRoaXMuaXNEZXYgPyBkZXZfZW52aXJvbm1lbnQgOiBwcm9kX2Vudmlyb25tZW50O1xuICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgdHlwZW9mIHRoaXMuYmFzZVVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuYmFzZVVybC50cmltKCkucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSB7IC4uLmRlZmF1bHRFbnYsIEJBU0VfVVJMOiB1cmwgfTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmVudmlyb25tZW50ID0gZGVmYXVsdEVudjtcbiAgfVxuXG4gIGRvbWFpbkF1dGhvcml0eVZhbHVlOiBhbnkgPSAncHJvZC1saXRlJztcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZXQgdGhlIGV2ZW50SWQgaW4gdHJhbnNsYXRpb24gc2VydmljZSB0byBnZXQgdGhlIGNvcnJlY3QgbGFuZ3VhZ2UgZnJvbSBsb2NhbFN0b3JhZ2VcbiAgICBpZiAodGhpcy5ldmVudElkKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5zZXRFdmVudElkKHRoaXMuZXZlbnRJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBseUJhc2VVcmxPdmVycmlkZSgpO1xuXG4gICAgY29uc3QgZG9tYWluID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBoZWFkZXIgdmFsdWUgYmFzZWQgb24gdGhlIGRvbWFpblxuXG4gICAgaWYgKGRvbWFpbi5pbmNsdWRlcygncHJlLWFwcC5zb2NpYWwyNy5jb20nKSkge1xuICAgICAgdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSA9ICdwcmUtcHJvZC1saXRlJztcbiAgICB9IGVsc2UgaWYgKGRvbWFpbi5pbmNsdWRlcygnYXBwLnNvY2lhbDI3LmNvbScpKSB7XG4gICAgICB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlID0gJ3Byb2QtbGl0ZSc7XG4gICAgfSBlbHNlIGlmIChkb21haW4uaW5jbHVkZXMoJ2hpdmVncHQuaW8nKSkge1xuICAgICAgdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSA9ICdoaXZlZ3B0JztcbiAgICB9XG5cbiAgICAvLyB0aGlzLmZldGNoTXlDb25uZWN0aW9ucygpLnN1YnNjcmliZSgpO1xuICAgIC8vIHRoaXMuZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKS5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuY2hhbmdlVGVtcGVyYXR1cmUodGhpcy50ZW1wZXJhdHVyZSk7XG4gICAgdGhpcy5mZXRjaEJvdENvbmZpZygpLnN1YnNjcmliZShcbiAgICAgIChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgdGhpcy5mZXRjaENoYXRIaXN0b3J5KCkuc3Vic2NyaWJlKFxuICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm1hcENoYXRIaXN0b3J5KHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdCBoaXN0b3J5OicsIGVycik7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXQgaGlzdG9yeTonLCBlcnIpO1xuICAgICAgfSxcbiAgICApO1xuICAgIC8vIHRoaXMuZmV0Y2hBZ2VudHMoKTtcbiAgICAvLyB0aGlzLmZldGNoRWRpdG9yQ29udGVudCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIC8vIHRoaXMuaW5pdGlhbGl6ZVNvY2tldCgpO1xuICAgIHRoaXMuYm90U2VydmljZVxuICAgICAgLmZldGNoU3BlZWNoQXV0aG9yaXphdGlvblRva2VuKFxuICAgICAgICB0aGlzLmJvdElkLFxuICAgICAgICB0aGlzLmFwaUtleSxcbiAgICAgICAgdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHRva2VuKSA9PiB7XG4gICAgICAgIHRoaXMuYXV0aG9yaXphdGlvblRva2VuID0gdG9rZW47XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVNwZWVjaFJlY29nbml6ZXIodG9rZW4pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIC8qKiBUcnVlIGFmdGVyIFNvY2tldCBoYXMgYmVlbiBpbml0aWFsaXplZCBmb3IgY2hhdCAoYXZvaWRzIGNvbm5lY3Rpbmcgb24gdm9pY2Utb25seSB1c2FnZSkuICovXG4gIHByaXZhdGUgY2hhdFNvY2tldEluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIENhbGwgYmVmb3JlIGNoYXQgYWN0aW9ucyBzbyBTb2NrZXQuSU8gaXMgdXNlZCBvbmx5IGZvciBjaGF0LCBub3QgZm9yIHZvaWNlLlxuICAgKiBWb2ljZSBhZ2VudCB1c2VzIG5hdGl2ZSBXZWJTb2NrZXQgKyBEYWlseS5qcyBvbmx5OyBTb2NrZXQuSU8gbXVzdCBub3QgcnVuIGR1cmluZyB2b2ljZSBmbG93LlxuICAgKi9cbiAgcHJpdmF0ZSBlbnN1cmVDaGF0U29ja2V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoYXRTb2NrZXRJbml0aWFsaXplZCB8fCAhdGhpcy5vcmdJZCkgcmV0dXJuO1xuICAgIHRoaXMuY2hhdFNvY2tldEluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB0aGlzLmluaXRpYWxpemVTb2NrZXQoKTtcbiAgfVxuXG4gIGluaXRpYWxpemVTb2NrZXQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc29ja2V0U2VydmljZS5kaXNjb25uZWN0U29ja2V0Q29ubmVjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zb2NrZXRTZXJ2aWNlLmNvbm5lY3RTb2NrZXRDb25uZWN0aW9uKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ1lFUyBJTklUJyk7XG4gICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbl9pZCA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkodGhpcy5ib3RJZCk7XG5cbiAgICAgICAgdGhpcy5zb2NrZXRTZXJ2aWNlLnJlZ2lzdGVyVXNlclNwZWNpZmljSGl2ZVNvY2tldChcbiAgICAgICAgICB0aGlzLmJvdElkLFxuICAgICAgICAgIGNvbnZlcnNhdGlvbl9pZCxcbiAgICAgICAgICB0aGlzLm9yZ0lkLFxuICAgICAgICApO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxpc3RlblNvY2tldHMoKTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIHN1YnNjcmlwdGlvbk5ldzogYW55O1xuICBzb2NrZXREYXRhOiBhbnk7XG5cbiAgLyoqIEluaXRpYWwgbnVtYmVyIG9mIHNlc3Npb24vYXR0ZW5kZWUgY2FyZHMgc2hvd24gYmVmb3JlIFwiU2hvdyBYIG1vcmVcIi4gKi9cbiAgcmVhZG9ubHkgU0VTU0lPTl9DQVJEU19JTklUSUFMID0gNjtcbiAgcmVhZG9ubHkgQVRURU5ERUVfQ0FSRFNfSU5JVElBTCA9IDk7XG4gIHJlYWRvbmx5IFNQRUFLRVJfQ0FSRFNfSU5JVElBTCA9IDk7XG4gIHJlYWRvbmx5IFNQT05TT1JfQ0FSRFNfSU5JVElBTCA9IDk7XG4gIHJlYWRvbmx5IEJPT1RIX1JFUF9DQVJEU19JTklUSUFMID0gOTtcbiAgLyoqIE1lc3NhZ2UgaWQgLT4gdHJ1ZSB3aGVuIHVzZXIgZXhwYW5kZWQgXCJTaG93IG1vcmVcIiBmb3Igc2Vzc2lvbnMvYXR0ZW5kZWVzLiAqL1xuICBleHBhbmRlZFNlc3Npb25DYXJkSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICBleHBhbmRlZEF0dGVuZGVlQ2FyZElkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgZXhwYW5kZWRTcGVha2VyQ2FyZElkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgZXhwYW5kZWRTcG9uc29yQ2FyZElkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgZXhwYW5kZWRCb290aFJlcENhcmRJZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gIC8qKiBrZXk6IGAke21lc3NhZ2VJZH06JHthdHRlbmRlZUlkfWAgLT4gdHJ1ZSB3aGVuIGRlc2NyaXB0aW9uIGV4cGFuZGVkICovXG4gIGV4cGFuZGVkQXR0ZW5kZWVEZXNjcmlwdGlvbklkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgLyoqIGtleTogYCR7bWVzc2FnZUlkfToke2F0dGVuZGVlSWR9YCAtPiB0cnVlIHdoZW4gdmlkZW8gaXMgcGxheWluZyAqL1xuICBhdHRlbmRlZVZpZGVvUGxheWluZ0lkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgLyoqIGtleTogYCR7bWVzc2FnZUlkfToke2F0dGVuZGVlSWR9YCAtPiB0cnVlIHdoZW4gdmlkZW8gaXMgbXV0ZWQgKGRlZmF1bHQgdHJ1ZSkgKi9cbiAgYXR0ZW5kZWVWaWRlb011dGVkSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG4gIC8qKiBTdHJpcCBIVE1MIHRhZ3MgdG8gcGxhaW4gdGV4dCAoZS5nLiBmb3Igc3BlYWtlci9hdHRlbmRlZSBkZXNjcmlwdGlvbiBmcm9tIEFQSSkuICovXG4gIHN0cmlwSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghaHRtbCB8fCB0eXBlb2YgaHRtbCAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKTtcbiAgICBjb25zdCB0ZXh0ID0gZG9jLmJvZHk/LnRleHRDb250ZW50ID8/ICcnO1xuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG4gIH1cblxuICBnZXRBdHRlbmRlZURlc2NyaXB0aW9uKGF0dGVuZGVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhdyA9XG4gICAgICBhdHRlbmRlZT8uZGVzY3JpcHRpb24gPz8gYXR0ZW5kZWU/LmludGVyZXN0cyA/PyBhdHRlbmRlZT8uam9iVGl0bGUgPz8gJyc7XG4gICAgY29uc3Qgc3RyID0gdHlwZW9mIHJhdyA9PT0gJ3N0cmluZycgPyByYXcudHJpbSgpIDogU3RyaW5nKHJhdyA/PyAnJykudHJpbSgpO1xuICAgIC8vIElmIGl0IGxvb2tzIGxpa2UgSFRNTCwgc3RyaXAgdGFncyBzbyBjYXJkIHNob3dzIHBsYWluIHRleHRcbiAgICBpZiAoc3RyICYmIC88W2Etel1bXFxzXFxTXSo+L2kudGVzdChzdHIpKSByZXR1cm4gdGhpcy5zdHJpcEh0bWwoc3RyKTtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgc2hvdWxkU2hvd0F0dGVuZGVlUmVhZE1vcmUoYXR0ZW5kZWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIGhldXJpc3RpYzogb25seSBzaG93IHRvZ2dsZSBmb3IgcmVhc29uYWJseSBsb25nIHRleHRcbiAgICByZXR1cm4gdGhpcy5nZXRBdHRlbmRlZURlc2NyaXB0aW9uKGF0dGVuZGVlKS5sZW5ndGggPiA5MDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXR0ZW5kZWVEZXNjS2V5KGNoYXQ6IGFueSwgYXR0ZW5kZWU6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IG1zZ0lkID0gY2hhdD8uX2lkO1xuICAgIGNvbnN0IGF0dGVuZGVlSWQgPSBhdHRlbmRlZT8uaWQgPz8gYXR0ZW5kZWU/Ll9pZCA/PyBhdHRlbmRlZT8udXNlcklkO1xuICAgIGlmICghbXNnSWQgfHwgIWF0dGVuZGVlSWQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBgJHttc2dJZH06JHthdHRlbmRlZUlkfWA7XG4gIH1cblxuICBpc0F0dGVuZGVlRGVzY3JpcHRpb25FeHBhbmRlZChjaGF0OiBhbnksIGF0dGVuZGVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlRGVzY0tleShjaGF0LCBhdHRlbmRlZSk7XG4gICAgaWYgKCFrZXkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gISF0aGlzLmV4cGFuZGVkQXR0ZW5kZWVEZXNjcmlwdGlvbklkc1trZXldO1xuICB9XG5cbiAgdG9nZ2xlQXR0ZW5kZWVEZXNjcmlwdGlvbihjaGF0OiBhbnksIGF0dGVuZGVlOiBhbnksIGV2PzogRXZlbnQpOiB2b2lkIHtcbiAgICBldj8uc3RvcFByb3BhZ2F0aW9uPy4oKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlRGVzY0tleShjaGF0LCBhdHRlbmRlZSk7XG4gICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICBjb25zdCBuZXh0ID0gIXRoaXMuZXhwYW5kZWRBdHRlbmRlZURlc2NyaXB0aW9uSWRzW2tleV07XG4gICAgdGhpcy5leHBhbmRlZEF0dGVuZGVlRGVzY3JpcHRpb25JZHMgPSB7XG4gICAgICAuLi50aGlzLmV4cGFuZGVkQXR0ZW5kZWVEZXNjcmlwdGlvbklkcyxcbiAgICAgIFtrZXldOiBuZXh0LFxuICAgIH07XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXRBdHRlbmRlZVZpZGVvVXJsKGF0dGVuZGVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IGF0dGVuZGVlPy51c2VyVmlkZW9zTW9kZWw/LnVybDtcbiAgICByZXR1cm4gdHlwZW9mIHVybCA9PT0gJ3N0cmluZycgPyB1cmwudHJpbSgpIDogJyc7XG4gIH1cblxuICBnZXRBdHRlbmRlZVZpZGVvUG9zdGVyKGF0dGVuZGVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBvc3RlciA9IGF0dGVuZGVlPy51c2VyVmlkZW9zTW9kZWw/LnRodW1ibmFpbDtcbiAgICByZXR1cm4gdHlwZW9mIHBvc3RlciA9PT0gJ3N0cmluZycgPyBwb3N0ZXIudHJpbSgpIDogJyc7XG4gIH1cblxuICBwcml2YXRlIGdldEF0dGVuZGVlTWVkaWFLZXkoY2hhdDogYW55LCBhdHRlbmRlZTogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbXNnSWQgPSBjaGF0Py5faWQ7XG4gICAgY29uc3QgYXR0ZW5kZWVJZCA9IGF0dGVuZGVlPy5pZCA/PyBhdHRlbmRlZT8uX2lkID8/IGF0dGVuZGVlPy51c2VySWQ7XG4gICAgaWYgKCFtc2dJZCB8fCAhYXR0ZW5kZWVJZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGAke21zZ0lkfToke2F0dGVuZGVlSWR9YDtcbiAgfVxuXG4gIGlzQXR0ZW5kZWVWaWRlb011dGVkKGNoYXQ6IGFueSwgYXR0ZW5kZWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0QXR0ZW5kZWVNZWRpYUtleShjaGF0LCBhdHRlbmRlZSk7XG4gICAgaWYgKCFrZXkpIHJldHVybiB0cnVlO1xuICAgIC8vIGRlZmF1bHQgdHJ1ZSAobXV0ZWQpIHVubGVzcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZVxuICAgIHJldHVybiB0aGlzLmF0dGVuZGVlVmlkZW9NdXRlZElkc1trZXldICE9PSBmYWxzZTtcbiAgfVxuXG4gIGlzQXR0ZW5kZWVWaWRlb1BsYXlpbmcoY2hhdDogYW55LCBhdHRlbmRlZTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRBdHRlbmRlZU1lZGlhS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIXRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHNba2V5XTtcbiAgfVxuXG4gIHRvZ2dsZUF0dGVuZGVlVmlkZW9NdXRlKFxuICAgIGNoYXQ6IGFueSxcbiAgICBhdHRlbmRlZTogYW55LFxuICAgIHZpZGVvRWw/OiBIVE1MVmlkZW9FbGVtZW50IHwgbnVsbCxcbiAgICBldj86IEV2ZW50LFxuICApOiB2b2lkIHtcbiAgICBldj8uc3RvcFByb3BhZ2F0aW9uPy4oKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlTWVkaWFLZXkoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgY29uc3QgbmV4dCA9ICF0aGlzLmlzQXR0ZW5kZWVWaWRlb011dGVkKGNoYXQsIGF0dGVuZGVlKTtcbiAgICB0aGlzLmF0dGVuZGVlVmlkZW9NdXRlZElkcyA9IHsgLi4udGhpcy5hdHRlbmRlZVZpZGVvTXV0ZWRJZHMsIFtrZXldOiBuZXh0IH07XG4gICAgaWYgKHZpZGVvRWwpIHtcbiAgICAgIHZpZGVvRWwubXV0ZWQgPSBuZXh0O1xuICAgICAgLy8gU29tZSBicm93c2VycyByZXF1aXJlIHZvbHVtZSB0byBiZSA+MCB3aGVuIHVubXV0aW5nXG4gICAgICBpZiAoIW5leHQgJiYgKHZpZGVvRWwudm9sdW1lID09IG51bGwgfHwgdmlkZW9FbC52b2x1bWUgPT09IDApKSB7XG4gICAgICAgIHZpZGVvRWwudm9sdW1lID0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB0b2dnbGVBdHRlbmRlZVZpZGVvUGxheShcbiAgICBjaGF0OiBhbnksXG4gICAgYXR0ZW5kZWU6IGFueSxcbiAgICB2aWRlb0VsPzogSFRNTFZpZGVvRWxlbWVudCB8IG51bGwsXG4gICAgZXY/OiBFdmVudCxcbiAgKTogdm9pZCB7XG4gICAgZXY/LnN0b3BQcm9wYWdhdGlvbj8uKCk7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRBdHRlbmRlZU1lZGlhS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIGNvbnN0IG5leHQgPSAhdGhpcy5pc0F0dGVuZGVlVmlkZW9QbGF5aW5nKGNoYXQsIGF0dGVuZGVlKTtcbiAgICB0aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzID0ge1xuICAgICAgLi4udGhpcy5hdHRlbmRlZVZpZGVvUGxheWluZ0lkcyxcbiAgICAgIFtrZXldOiBuZXh0LFxuICAgIH07XG4gICAgaWYgKHZpZGVvRWwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgY29uc3QgcCA9IHZpZGVvRWwucGxheSgpO1xuICAgICAgICAgIGlmIChwICYmIHR5cGVvZiAocCBhcyBhbnkpLmNhdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAocCBhcyBhbnkpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgLy8gSWYgcGxheSBmYWlscywgcmVmbGVjdCBwYXVzZWQgc3RhdGVcbiAgICAgICAgICAgICAgdGhpcy5hdHRlbmRlZVZpZGVvUGxheWluZ0lkcyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzLFxuICAgICAgICAgICAgICAgIFtrZXldOiBmYWxzZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmlkZW9FbC5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25BdHRlbmRlZVZpZGVvUGxheVN0YXRlKGNoYXQ6IGFueSwgYXR0ZW5kZWU6IGFueSwgaXNQbGF5aW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRBdHRlbmRlZU1lZGlhS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzW2tleV0gPT09IGlzUGxheWluZykgcmV0dXJuO1xuICAgIHRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHMgPSB7XG4gICAgICAuLi50aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzLFxuICAgICAgW2tleV06IGlzUGxheWluZyxcbiAgICB9O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBzZXNzaW9uIGRhdGUvdGltZSBmb3IgZGlzcGxheS5cbiAgICogQHBhcmFtIGRhdGVUaW1lUmFuZ2UgU2Vzc2lvbiBzdGFydC9lbmQgKG9iamVjdCB3aXRoIHN0YXJ0L2VuZCBvciBzdHJpbmcgd2l0aCBcIlN0YXJ0OiAuLi4gRW5kOiAuLi5cIilcbiAgICogQHBhcmFtIGRpc3BsYXlUaW1lWm9uZSBPcHRpb25hbCB1c2VyLXNlbGVjdGVkIHRpbWV6b25lIChlLmcuICdBbWVyaWNhL05ld19Zb3JrJyk7IHdoZW4gc2V0LCB0aW1lcyBhcmUgc2hvd24gaW4gdGhpcyB6b25lLlxuICAgKi9cbiAgZm9ybWF0U2Vzc2lvbldoZW4oXG4gICAgZGF0ZVRpbWVSYW5nZTogc3RyaW5nIHwgeyBzdGFydD86IHN0cmluZzsgZW5kPzogc3RyaW5nIH0gfCBudWxsLFxuICAgIGRpc3BsYXlUaW1lWm9uZT86IHN0cmluZyxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBsb2NhbGVPcHRzID0gZGlzcGxheVRpbWVab25lID8geyB0aW1lWm9uZTogZGlzcGxheVRpbWVab25lIH0gOiB7fTtcbiAgICBpZiAoIWRhdGVUaW1lUmFuZ2UpIHJldHVybiAnJztcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgZGF0ZVRpbWVSYW5nZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIGRhdGVUaW1lUmFuZ2U/LnN0YXJ0ICYmXG4gICAgICBkYXRlVGltZVJhbmdlPy5lbmRcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RHQgPSBuZXcgRGF0ZShkYXRlVGltZVJhbmdlLnN0YXJ0KTtcbiAgICAgICAgY29uc3QgZW5kRHQgPSBuZXcgRGF0ZShkYXRlVGltZVJhbmdlLmVuZCk7XG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXR0ZWQgPSBzdGFydER0LnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBzdGFydER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBlbmREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYCR7ZGF0ZUZvcm1hdHRlZH0gfCAke3N0YXJ0VGltZX0gLSAke2VuZFRpbWV9YDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0ZVRpbWVSYW5nZSAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcbiAgICBjb25zdCBzdGFydE1hdGNoID0gZGF0ZVRpbWVSYW5nZS5tYXRjaChcbiAgICAgIC9TdGFydDpcXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9XFxzK1xcZHsyfTpcXGR7Mn06XFxkezJ9KS8sXG4gICAgKTtcbiAgICBjb25zdCBlbmRNYXRjaCA9IGRhdGVUaW1lUmFuZ2UubWF0Y2goXG4gICAgICAvRW5kOlxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn1cXHMrXFxkezJ9OlxcZHsyfTpcXGR7Mn0pLyxcbiAgICApO1xuICAgIGlmICghc3RhcnRNYXRjaCB8fCAhZW5kTWF0Y2gpIHJldHVybiBkYXRlVGltZVJhbmdlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFydFN0ciA9IHN0YXJ0TWF0Y2hbMV07XG4gICAgICBjb25zdCBlbmRTdHIgPSBlbmRNYXRjaFsxXTtcbiAgICAgIGNvbnN0IHN0YXJ0RHQgPSBuZXcgRGF0ZShzdGFydFN0ci5yZXBsYWNlKCcgJywgJ1QnKSArICdaJyk7XG4gICAgICBjb25zdCBlbmREdCA9IG5ldyBEYXRlKGVuZFN0ci5yZXBsYWNlKCcgJywgJ1QnKSArICdaJyk7XG4gICAgICBjb25zdCBkYXRlRm9ybWF0dGVkID0gc3RhcnREdC50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhcnRUaW1lU2hvcnQgPSBzdGFydER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuZFRpbWVTaG9ydCA9IGVuZER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBgJHtkYXRlRm9ybWF0dGVkfSB8ICR7c3RhcnRUaW1lU2hvcnR9IC0gJHtlbmRUaW1lU2hvcnR9YDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkYXRlVGltZVJhbmdlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGF0ZSBiYWRnZSAoZGF5ICsgbW9udGgpIGZvciBzZXNzaW9uIGNhcmQgZnJvbSBkYXRlVGltZVJhbmdlLlxuICAgKiBIYW5kbGVzIGRhdGVUaW1lUmFuZ2UgYXMgc3RyaW5nIChcIlN0YXJ0OiAyMDI2LTAyLTIwIDAxOjA1OjAwLCBFbmQ6IC4uLlwiKSBvciBvYmplY3QgeyBzdGFydCwgZW5kIH0uXG4gICAqIFVzZXMgZGlzcGxheVRpbWVab25lIG9ubHkgd2hlbiBpdCBpcyBhIHZhbGlkIElBTkEgaWRlbnRpZmllcjsgb3RoZXJ3aXNlIGZvcm1hdHMgaW4gbG9jYWwgdGltZS5cbiAgICovXG4gIGdldFNlc3Npb25EYXRlQmFkZ2UoXG4gICAgZGF0ZVRpbWVSYW5nZTogc3RyaW5nIHwgeyBzdGFydD86IHN0cmluZzsgZW5kPzogc3RyaW5nIH0gfCBudWxsLFxuICAgIGRpc3BsYXlUaW1lWm9uZT86IHN0cmluZyxcbiAgKTogeyBkYXk6IHN0cmluZzsgbW9udGg6IHN0cmluZyB9IHtcbiAgICBpZiAoIWRhdGVUaW1lUmFuZ2UpIHJldHVybiB7IGRheTogJycsIG1vbnRoOiAnJyB9O1xuICAgIHRyeSB7XG4gICAgICBsZXQgc3RhcnREdDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKHR5cGVvZiBkYXRlVGltZVJhbmdlID09PSAnb2JqZWN0JyAmJiBkYXRlVGltZVJhbmdlPy5zdGFydCkge1xuICAgICAgICBzdGFydER0ID0gbmV3IERhdGUoZGF0ZVRpbWVSYW5nZS5zdGFydCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRlVGltZVJhbmdlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBzdGFydE1hdGNoID0gZGF0ZVRpbWVSYW5nZS5tYXRjaChcbiAgICAgICAgICAvU3RhcnQ6XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfVxccytcXGR7Mn06XFxkezJ9OlxcZHsyfSkvLFxuICAgICAgICApO1xuICAgICAgICBpZiAoc3RhcnRNYXRjaClcbiAgICAgICAgICBzdGFydER0ID0gbmV3IERhdGUoc3RhcnRNYXRjaFsxXS5yZXBsYWNlKCcgJywgJ1QnKSArICdaJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0YXJ0RHQgfHwgaXNOYU4oc3RhcnREdC5nZXRUaW1lKCkpKSByZXR1cm4geyBkYXk6ICcnLCBtb250aDogJycgfTtcbiAgICAgIGNvbnN0IGxvY2FsZU9wdHMgPSBkaXNwbGF5VGltZVpvbmUgPyB7IHRpbWVab25lOiBkaXNwbGF5VGltZVpvbmUgfSA6IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF5ID0gc3RhcnREdC50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHN0YXJ0RHQudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgZGF5LCBtb250aCB9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGRpc3BsYXlUaW1lWm9uZSBtYXkgYmUgbm9uLUlBTkEgKGUuZy4gXCIoVVRDLTAzOjAwKSBCcmFzaWxpYVwiKTsgZm9ybWF0IHdpdGhvdXQgdGltZVpvbmVcbiAgICAgICAgY29uc3QgZGF5ID0gc3RhcnREdC50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywgeyBkYXk6ICdudW1lcmljJyB9KTtcbiAgICAgICAgY29uc3QgbW9udGggPSBzdGFydER0LnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnc2hvcnQnIH0pO1xuICAgICAgICByZXR1cm4geyBkYXksIG1vbnRoIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4geyBkYXk6ICcnLCBtb250aDogJycgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRpbWUgcmFuZ2Ugb25seSAoZS5nLiBcIjk6MDAgQU0gLSAxMDozMCBBTVwiKSBmb3Igc2Vzc2lvbiBjYXJkLlxuICAgKiBGYWxscyBiYWNrIHRvIGZvcm1hdHRpbmcgd2l0aG91dCB0aW1lWm9uZSB3aGVuIGRpc3BsYXlUaW1lWm9uZSBpcyBub3QgYSB2YWxpZCBJQU5BIGlkZW50aWZpZXIuXG4gICAqL1xuICBmb3JtYXRTZXNzaW9uVGltZVJhbmdlKFxuICAgIGRhdGVUaW1lUmFuZ2U6IHN0cmluZyB8IHsgc3RhcnQ/OiBzdHJpbmc7IGVuZD86IHN0cmluZyB9IHwgbnVsbCxcbiAgICBkaXNwbGF5VGltZVpvbmU/OiBzdHJpbmcsXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlVGltZVJhbmdlKSByZXR1cm4gJyc7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzdGFydER0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgICBsZXQgZW5kRHQ6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGRhdGVUaW1lUmFuZ2UgPT09ICdvYmplY3QnICYmXG4gICAgICAgIGRhdGVUaW1lUmFuZ2U/LnN0YXJ0ICYmXG4gICAgICAgIGRhdGVUaW1lUmFuZ2U/LmVuZFxuICAgICAgKSB7XG4gICAgICAgIHN0YXJ0RHQgPSBuZXcgRGF0ZShkYXRlVGltZVJhbmdlLnN0YXJ0KTtcbiAgICAgICAgZW5kRHQgPSBuZXcgRGF0ZShkYXRlVGltZVJhbmdlLmVuZCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRlVGltZVJhbmdlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBzdGFydE1hdGNoID0gZGF0ZVRpbWVSYW5nZS5tYXRjaChcbiAgICAgICAgICAvU3RhcnQ6XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfVxccytcXGR7Mn06XFxkezJ9OlxcZHsyfSkvLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBlbmRNYXRjaCA9IGRhdGVUaW1lUmFuZ2UubWF0Y2goXG4gICAgICAgICAgL0VuZDpcXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9XFxzK1xcZHsyfTpcXGR7Mn06XFxkezJ9KS8sXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzdGFydE1hdGNoKVxuICAgICAgICAgIHN0YXJ0RHQgPSBuZXcgRGF0ZShzdGFydE1hdGNoWzFdLnJlcGxhY2UoJyAnLCAnVCcpICsgJ1onKTtcbiAgICAgICAgaWYgKGVuZE1hdGNoKSBlbmREdCA9IG5ldyBEYXRlKGVuZE1hdGNoWzFdLnJlcGxhY2UoJyAnLCAnVCcpICsgJ1onKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RhcnREdCB8fCBpc05hTihzdGFydER0LmdldFRpbWUoKSkpIHJldHVybiAnJztcbiAgICAgIGNvbnN0IGxvY2FsZU9wdHMgPSBkaXNwbGF5VGltZVpvbmUgPyB7IHRpbWVab25lOiBkaXNwbGF5VGltZVpvbmUgfSA6IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gc3RhcnREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyMTI6IHRydWUsXG4gICAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPVxuICAgICAgICAgIGVuZER0ICYmICFpc05hTihlbmREdC5nZXRUaW1lKCkpXG4gICAgICAgICAgICA/IGVuZER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgcmV0dXJuIGVuZFRpbWUgPyBgJHtzdGFydFRpbWV9IC0gJHtlbmRUaW1lfWAgOiBzdGFydFRpbWU7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gc3RhcnREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyMTI6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmRUaW1lID1cbiAgICAgICAgICBlbmREdCAmJiAhaXNOYU4oZW5kRHQuZ2V0VGltZSgpKVxuICAgICAgICAgICAgPyBlbmREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICBob3VyMTI6IHRydWUsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICByZXR1cm4gZW5kVGltZSA/IGAke3N0YXJ0VGltZX0gLSAke2VuZFRpbWV9YCA6IHN0YXJ0VGltZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSUFOQSB0aW1lem9uZSBJRCAtPiBhYmJyZXZpYXRpb24gbWFwIChtYXRjaGVzIHBhcmVudCBhcHAgc2Vzc2lvbi1sYXlvdXRzIC8gdGltZXpvbmVzLmVudW0gVGltZVpvbmVzKS5cbiAgICogVXNlZCBzbyBzZXNzaW9uIGNhcmRzIHNob3cgU0FTVCwgRUVTVCwgU0FXU1QsIEVTQVNULCBldGMuIGluc3RlYWQgb2YgR01UKzEsIEdNVCsyLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVFpfQUJCUl9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgJ1BhY2lmaWMvS2lyaXRpbWF0aSc6ICdMSU5UJyxcbiAgICAnUGFjaWZpYy9BcGlhJzogJ1NTVCcsXG4gICAgJ1BhY2lmaWMvVG9uZ2F0YXB1JzogJ1RTVCcsXG4gICAgJ0V0Yy9HTVQtMTMnOiAnVVRDJyxcbiAgICAnUGFjaWZpYy9DaGF0aGFtJzogJ0NIQURUJyxcbiAgICAnQXNpYS9LYW1jaGF0a2EnOiAnQU5BVCcsXG4gICAgJ1BhY2lmaWMvRmlqaSc6ICdGSlQnLFxuICAgICdFdGMvR01ULTEyJzogJ1UnLFxuICAgICdQYWNpZmljL0F1Y2tsYW5kJzogJ05aU1QnLFxuICAgICdQYWNpZmljL0d1YWRhbGNhbmFsJzogJ0NQU1QnLFxuICAgICdBc2lhL1Nha2hhbGluJzogJ1NBS1QnLFxuICAgICdQYWNpZmljL05vcmZvbGsnOiAnTkZUJyxcbiAgICAnQXNpYS9NYWdhZGFuJzogJ01BR1QnLFxuICAgICdBc2lhL1NyZWRuZWtvbHltc2snOiAnU1JFVCcsXG4gICAgJ1BhY2lmaWMvQm91Z2FpbnZpbGxlJzogJ0JTVCcsXG4gICAgJ0F1c3RyYWxpYS9Mb3JkX0hvd2UnOiAnTEhTVCcsXG4gICAgJ0FzaWEvVmxhZGl2b3N0b2snOiAnVkxBVCcsXG4gICAgJ0F1c3RyYWxpYS9Ib2JhcnQnOiAnQUVTVCcsXG4gICAgJ1BhY2lmaWMvUG9ydF9Nb3Jlc2J5JzogJ0NoU1QnLFxuICAgICdBdXN0cmFsaWEvU3lkbmV5JzogJ0FFU1QnLFxuICAgICdBdXN0cmFsaWEvQnJpc2JhbmUnOiAnQVdTVCcsXG4gICAgJ0F1c3RyYWxpYS9EYXJ3aW4nOiAnQUNTVCcsXG4gICAgJ0F1c3RyYWxpYS9BZGVsYWlkZSc6ICdBQ1NUJyxcbiAgICAnQXNpYS9ZYWt1dHNrJzogJ1lBS1QnLFxuICAgICdBc2lhL1Nlb3VsJzogJ0tTVCcsXG4gICAgJ0FzaWEvUHlvbmd5YW5nJzogJ0tTVCcsXG4gICAgJ0FzaWEvVG9reW8nOiAnVFNUJyxcbiAgICAnQXNpYS9DaGl0YSc6ICdZQUtUJyxcbiAgICAnQXVzdHJhbGlhL0V1Y2xhJzogJ0FDV1NUJyxcbiAgICAnQXNpYS9VbGFhbmJhYXRhcic6ICdGU1QnLFxuICAgICdBc2lhL1RhaXBlaSc6ICdVTEFUJyxcbiAgICAnQXVzdHJhbGlhL1BlcnRoJzogJ0FXU1QnLFxuICAgICdBc2lhL1NpbmdhcG9yZSc6ICdTTlNUJyxcbiAgICAnQXNpYS9Jcmt1dHNrJzogJ0lSS1QnLFxuICAgICdBc2lhL1NoYW5naGFpJzogJ0NTVCcsXG4gICAgJ0FzaWEvVG9tc2snOiAnTVNEJyxcbiAgICAnQXNpYS9Ob3Zvc2liaXJzayc6ICdOT1ZUJyxcbiAgICAnQXNpYS9LcmFzbm95YXJzayc6ICdLUkFUJyxcbiAgICAnQXNpYS9Ib3ZkJzogJ1NBU1QnLFxuICAgICdBc2lhL0Jhcm5hdWwnOiAnTVNLJyxcbiAgICAnQXNpYS9CYW5na29rJzogJ1RIQScsXG4gICAgJ0FzaWEvWWFuZ29uJzogJ01ZU1QnLFxuICAgICdBc2lhL09tc2snOiAnT01TVCcsXG4gICAgJ0FzaWEvRGhha2EnOiAnQlNUJyxcbiAgICAnQXNpYS9BbG1hdHknOiAnTkNBU1QnLFxuICAgICdBc2lhL0thdGhtYW5kdSc6ICdOUFQnLFxuICAgICdBc2lhL0NvbG9tYm8nOiAnU0xUJyxcbiAgICAnQXNpYS9Lb2xrYXRhJzogJ0lTVCcsXG4gICAgJ0FzaWEvQ2FsY3V0dGEnOiAnSVNUJyxcbiAgICAnQXNpYS9ReXp5bG9yZGEnOiAnQ0FTVCcsXG4gICAgJ0FzaWEvS2FyYWNoaSc6ICdQS1QnLFxuICAgICdBc2lhL1lla2F0ZXJpbmJ1cmcnOiAnWUVLVCcsXG4gICAgJ0FzaWEvVGFzaGtlbnQnOiAnV0FTVCcsXG4gICAgJ0FzaWEvS2FidWwnOiAnQUZUJyxcbiAgICAnQXNpYS9ZZXJldmFuJzogJ0FNVCcsXG4gICAgJ0V1cm9wZS9Wb2xnb2dyYWQnOiAnVlNUJyxcbiAgICAnQXNpYS9UYmlsaXNpJzogJ0dFVCcsXG4gICAgJ0V1cm9wZS9TYXJhdG92JzogJ1NMVCcsXG4gICAgJ0luZGlhbi9NYXVyaXRpdXMnOiAnTVVUJyxcbiAgICAnRXVyb3BlL1NhbWFyYSc6ICdTQU1UJyxcbiAgICAnQXNpYS9CYWt1JzogJ0FaVCcsXG4gICAgJ0V1cm9wZS9Bc3RyYWtoYW4nOiAnU0FNVCcsXG4gICAgJ0FzaWEvRHViYWknOiAnQVJCU1QnLFxuICAgICdBc2lhL1RlaHJhbic6ICdJRFQnLFxuICAgICdBZnJpY2EvTmFpcm9iaSc6ICdFQVNUJyxcbiAgICAnRXVyb3BlL01vc2Nvdyc6ICdNU0snLFxuICAgICdFdXJvcGUvTWluc2snOiAnTVNLJyxcbiAgICAnQXNpYS9SaXlhZGgnOiAnQVNUJyxcbiAgICAnRXVyb3BlL0lzdGFuYnVsJzogJ1REVCcsXG4gICAgJ0FzaWEvQmFnaGRhZCc6ICdBU1QnLFxuICAgICdBZnJpY2EvV2luZGhvZWsnOiAnTlNUJyxcbiAgICAnQWZyaWNhL1RyaXBvbGknOiAnTFNUJyxcbiAgICAnQWZyaWNhL0toYXJ0b3VtJzogJ0VBU1QnLFxuICAgICdFdXJvcGUvS2FsaW5pbmdyYWQnOiAnS1NUJyxcbiAgICAnQXNpYS9KZXJ1c2FsZW0nOiAnSkRUJyxcbiAgICAnRXVyb3BlL0tpZXYnOiAnRUVEVCcsXG4gICAgJ0FmcmljYS9Kb2hhbm5lc2J1cmcnOiAnU0FTVCcsXG4gICAgJ0FzaWEvSGVicm9uJzogJ0VFVCcsXG4gICAgJ0FzaWEvRGFtYXNjdXMnOiAnU0RUJyxcbiAgICAnRXVyb3BlL0NoaXNpbmF1JzogJ0dEVCcsXG4gICAgJ0FmcmljYS9DYWlybyc6ICdFU1QnLFxuICAgICdBc2lhL0JlaXJ1dCc6ICdNRURUJyxcbiAgICAnRXVyb3BlL0J1Y2hhcmVzdCc6ICdHRFQnLFxuICAgICdBc2lhL0FtbWFuJzogJ0pTVCcsXG4gICAgJ0FmcmljYS9MYWdvcyc6ICdFQ1QnLFxuICAgICdFdXJvcGUvV2Fyc2F3JzogJ0NFRFQnLFxuICAgICdBZnJpY2EvQ2FzYWJsYW5jYSc6ICdNRFQnLFxuICAgICdFdXJvcGUvUGFyaXMnOiAnQ0VTVCcsXG4gICAgJ0V1cm9wZS9CdWRhcGVzdCc6ICdDRURUJyxcbiAgICAnRXVyb3BlL0Jlcmxpbic6ICdXRURUJyxcbiAgICAnQWZyaWNhL1Nhb19Ub21lJzogJ0dTVCcsXG4gICAgJ0F0bGFudGljL1JleWtqYXZpayc6ICdHU1QnLFxuICAgICdFdXJvcGUvTG9uZG9uJzogJ0dEVCcsXG4gICAgJ0V0Yy9VVEMnOiAnVVRDJyxcbiAgICAnQXRsYW50aWMvQXpvcmVzJzogJ0FEVCcsXG4gICAgJ0F0bGFudGljL0NhcGVfVmVyZGUnOiAnQ1ZTVCcsXG4gICAgJ0V0Yy9HTVQrMic6ICdNU1QnLFxuICAgICdBbWVyaWNhL0FyYWd1YWluYSc6ICdTRVNUJyxcbiAgICAnQW1lcmljYS9TYW9fUGF1bG8nOiAnRVNBU1QnLFxuICAgICdBbWVyaWNhL0NheWVubmUnOiAnU0VTVCcsXG4gICAgJ0FtZXJpY2EvQXJnZW50aW5hL0J1ZW5vc19BaXJlcyc6ICdBU1QnLFxuICAgICdBbWVyaWNhL051dWsnOiAnV0dUJyxcbiAgICAnQW1lcmljYS9Nb250ZXZpZGVvJzogJ01TVCcsXG4gICAgJ0FtZXJpY2EvUHVudGFfQXJlbmFzJzogJ0NMU1QnLFxuICAgICdBbWVyaWNhL01pcXVlbG9uJzogJ1BNU1QnLFxuICAgICdBbWVyaWNhL0JhaGlhJzogJ0JTVCcsXG4gICAgJ0FtZXJpY2EvU3RfSm9obnMnOiAnTlNUJyxcbiAgICAnQW1lcmljYS9Bc3VuY2lvbic6ICdQUlNUJyxcbiAgICAnQW1lcmljYS9IYWxpZmF4JzogJ0FTVCcsXG4gICAgJ0FtZXJpY2EvQ2FyYWNhcyc6ICdWU1QnLFxuICAgICdBbWVyaWNhL0N1aWFiYSc6ICdDQlNUJyxcbiAgICAnQW1lcmljYS9MYV9QYXonOiAnU0FXU1QnLFxuICAgICdBbWVyaWNhL1NhbnRpYWdvJzogJ1BTU1QnLFxuICAgICdBbWVyaWNhL0JvZ290YSc6ICdTUFNUJyxcbiAgICAnQW1lcmljYS9DYW5jdW4nOiAnRVNUJyxcbiAgICAnQW1lcmljYS9OZXdfWW9yayc6ICdFVCcsXG4gICAgJ0FtZXJpY2EvUG9ydC1hdS1QcmluY2UnOiAnRURUJyxcbiAgICAnQW1lcmljYS9IYXZhbmEnOiAnRURUJyxcbiAgICAnQW1lcmljYS9JbmRpYW5hL0luZGlhbmFwb2xpcyc6ICdFU1QnLFxuICAgICdBbWVyaWNhL0dyYW5kX1R1cmsnOiAnRVNUJyxcbiAgICAnQW1lcmljYS9HdWF0ZW1hbGEnOiAnQ0FTVCcsXG4gICAgJ0FtZXJpY2EvQ2hpY2Fnbyc6ICdDVCcsXG4gICAgJ1BhY2lmaWMvRWFzdGVyJzogJ0VBU1QnLFxuICAgICdBbWVyaWNhL01leGljb19DaXR5JzogJ0NTVCcsXG4gICAgJ0FtZXJpY2EvUmVnaW5hJzogJ0NDU1QnLFxuICAgICdBbWVyaWNhL1Bob2VuaXgnOiAnTVQnLFxuICAgICdBbWVyaWNhL0NoaWh1YWh1YSc6ICdNRFQnLFxuICAgICdBbWVyaWNhL0RlbnZlcic6ICdNVCcsXG4gICAgJ0FtZXJpY2EvV2hpdGVob3JzZSc6ICdZU1QnLFxuICAgICdBbWVyaWNhL1RpanVhbmEnOiAnUFNUJyxcbiAgICAnRXRjL0dNVCs4JzogJ1VUQy0wOCcsXG4gICAgJ0FtZXJpY2EvTG9zX0FuZ2VsZXMnOiAnUFQnLFxuICAgICdBbWVyaWNhL0FuY2hvcmFnZSc6ICdBSycsXG4gICAgJ0V0Yy9HTVQrOSc6ICdVVEMtMDknLFxuICAgICdQYWNpZmljL01hcnF1ZXNhcyc6ICdNU1QnLFxuICAgICdBbWVyaWNhL0FkYWsnOiAnSFNUJyxcbiAgICAnUGFjaWZpYy9Ib25vbHVsdSc6ICdIQVNUJyxcbiAgICAnRXRjL0dNVCsxMSc6ICdVVEMtMTEnLFxuICAgICdFdGMvR01UKzEyJzogJ0JJVCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFdpbmRvd3Mtc3R5bGUgXCIoVVRDwrFISDpNTSkgUGxhY2VcIiAtPiBzaG9ydCBuYW1lIChJU1QsIEJSVCwgZXRjLikgc28gd2Ugc2hvdyBcIklTVFwiIG5vdCBcIigoVVRDKzA1OjMwKSBJbmRpYSlcIi5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFdJTkRPV1NfVFpfQUJCUl9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgJyhVVEMtMDM6MDApIEJyYXNpbGlhJzogJ0JSVCcsXG4gICAgJyhVVEMtMDM6MDApIEJ1ZW5vcyBBaXJlcyc6ICdBUlQnLFxuICAgICcoVVRDKzA1OjMwKSBJbmRpYSc6ICdJU1QnLFxuICAgICcoVVRDKzA1OjMwKSBDaGVubmFpLCBLb2xrYXRhLCBNdW1iYWksIE5ldyBEZWxoaSc6ICdJU1QnLFxuICAgICcoVVRDKzAwOjAwKSBEdWJsaW4sIEVkaW5idXJnaCwgTG9uZG9uJzogJ0dNVCcsXG4gICAgJyhVVEMrMDA6MDApIE1vbnJvdmlhLCBSZXlramF2aWsnOiAnR01UJyxcbiAgICAnKFVUQyswMTowMCkgQW1zdGVyZGFtLCBCZXJsaW4sIFJvbWUsIFN0b2NraG9sbSc6ICdDRVQnLFxuICAgICcoVVRDKzAxOjAwKSBCcnVzc2VscywgQ29wZW5oYWdlbiwgTWFkcmlkLCBQYXJpcyc6ICdDRVQnLFxuICAgICcoVVRDKzAyOjAwKSBBdGhlbnMsIElzdGFuYnVsLCBNaW5zayc6ICdFRVQnLFxuICAgICcoVVRDKzAyOjAwKSBDYWlybyc6ICdFRVQnLFxuICAgICcoVVRDKzAyOjAwKSBKZXJ1c2FsZW0nOiAnSVNUJyxcbiAgICAnKFVUQyswMzowMCkgTW9zY293LCBTdC4gUGV0ZXJzYnVyZyc6ICdNU0snLFxuICAgICcoVVRDKzAzOjAwKSBOYWlyb2JpJzogJ0VBVCcsXG4gICAgJyhVVEMrMDQ6MDApIER1YmFpJzogJ0dTVCcsXG4gICAgJyhVVEMrMDU6MDApIElzbGFtYWJhZCwgS2FyYWNoaSc6ICdQS1QnLFxuICAgICcoVVRDKzA1OjQ1KSBLYXRobWFuZHUnOiAnTlBUJyxcbiAgICAnKFVUQyswNjowMCkgRGhha2EnOiAnQlNUJyxcbiAgICAnKFVUQyswNjozMCkgWWFuZ29uIChSYW5nb29uKSc6ICdNTVQnLFxuICAgICcoVVRDKzA3OjAwKSBCYW5na29rLCBIYW5vaSwgSmFrYXJ0YSc6ICdJQ1QnLFxuICAgICcoVVRDKzA4OjAwKSBCZWlqaW5nLCBDaG9uZ3FpbmcsIEhvbmcgS29uZywgVXJ1bXFpJzogJ0NTVCcsXG4gICAgJyhVVEMrMDg6MDApIEt1YWxhIEx1bXB1ciwgU2luZ2Fwb3JlJzogJ1NHVCcsXG4gICAgJyhVVEMrMDk6MDApIE9zYWthLCBTYXBwb3JvLCBUb2t5byc6ICdKU1QnLFxuICAgICcoVVRDKzA5OjMwKSBBZGVsYWlkZSc6ICdBQ1NUJyxcbiAgICAnKFVUQysxMDowMCkgQnJpc2JhbmUnOiAnQUVTVCcsXG4gICAgJyhVVEMrMTA6MDApIENhbmJlcnJhLCBNZWxib3VybmUsIFN5ZG5leSc6ICdBRVNUJyxcbiAgICAnKFVUQysxMjowMCkgQXVja2xhbmQsIFdlbGxpbmd0b24nOiAnTlpTVCcsXG4gICAgJyhVVEMtMDU6MDApIEVhc3Rlcm4gVGltZSAoVVMgJiBDYW5hZGEpJzogJ0VUJyxcbiAgICAnKFVUQy0wNjowMCkgQ2VudHJhbCBUaW1lIChVUyAmIENhbmFkYSknOiAnQ1QnLFxuICAgICcoVVRDLTA3OjAwKSBNb3VudGFpbiBUaW1lIChVUyAmIENhbmFkYSknOiAnTVQnLFxuICAgICcoVVRDLTA4OjAwKSBQYWNpZmljIFRpbWUgKFVTICYgQ2FuYWRhKSc6ICdQVCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCB0aW1lem9uZSBhYmJyZXZpYXRpb24gKGUuZy4gSVNULCBCUlQsIFNBU1QpIGZvciBkaXNwbGF5IGFmdGVyIHRoZSB0aW1lLlxuICAgKiBVc2VzIElBTkEgbWFwIGFuZCBXaW5kb3dzLXN0eWxlIG1hcCBzbyB3ZSBzaG93IFwiQlJUXCIgLyBcIklTVFwiIGluc3RlYWQgb2YgXCIoKFVUQy0wMzowMCkgQnJhc2lsaWEpXCIuXG4gICAqIE9ubHkgY29uc3VsdHMgV2luZG93cyBtYXAgd2hlbiBpbnB1dCBsb29rcyBsaWtlIFwiKFVUQy4uLilcIiBzbyBleGlzdGluZyBJQU5BL0ludGwgYmVoYXZpb3IgaXMgdW5jaGFuZ2VkLlxuICAgKi9cbiAgZ2V0VGltZXpvbmVBYmJyZXZpYXRpb24odHo6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0eiB8fCAhU3RyaW5nKHR6KS50cmltKCkpIHJldHVybiAnJztcbiAgICBjb25zdCB0eklkID0gU3RyaW5nKHR6KS50cmltKCk7XG4gICAgaWYgKHR6SWQuc3RhcnRzV2l0aCgnKFVUQycpIHx8IHR6SWQuc3RhcnRzV2l0aCgnKHV0YycpKSB7XG4gICAgICBjb25zdCB3aW5NYXAgPSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQ2hhdERyYXdlckNvbXBvbmVudClcbiAgICAgICAgLldJTkRPV1NfVFpfQUJCUl9NQVA7XG4gICAgICBjb25zdCB3aW5LZXkgPSBPYmplY3Qua2V5cyh3aW5NYXApLmZpbmQoXG4gICAgICAgIChrKSA9PiBrLnRvTG93ZXJDYXNlKCkgPT09IHR6SWQudG9Mb3dlckNhc2UoKSxcbiAgICAgICk7XG4gICAgICBpZiAod2luS2V5KSByZXR1cm4gd2luTWFwW3dpbktleV07XG4gICAgfVxuICAgIGNvbnN0IG1hcCA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBDaGF0RHJhd2VyQ29tcG9uZW50KS5UWl9BQkJSX01BUDtcbiAgICBsZXQgbWFwcGVkID0gbWFwW3R6SWRdO1xuICAgIGlmICghbWFwcGVkKSB7XG4gICAgICBjb25zdCBrZXlMb3dlciA9IHR6SWQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGVudHJ5ID0gT2JqZWN0LmVudHJpZXMobWFwKS5maW5kKFxuICAgICAgICAoW2tdKSA9PiBrLnRvTG93ZXJDYXNlKCkgPT09IGtleUxvd2VyLFxuICAgICAgKTtcbiAgICAgIGlmIChlbnRyeSkgbWFwcGVkID0gZW50cnlbMV07XG4gICAgfVxuICAgIGlmIChtYXBwZWQpIHJldHVybiBtYXBwZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgICAgdGltZVpvbmU6IHR6SWQsXG4gICAgICAgIHRpbWVab25lTmFtZTogJ3Nob3J0JyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGFydHMgPSBmb3JtYXR0ZXIuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgpKTtcbiAgICAgIGNvbnN0IHR6UGFydCA9IHBhcnRzLmZpbmQoKHApID0+IHAudHlwZSA9PT0gJ3RpbWVab25lTmFtZScpO1xuICAgICAgY29uc3QgdmFsdWUgPSAodHpQYXJ0Py52YWx1ZSA/PyAnJykudHJpbSgpO1xuICAgICAgaWYgKHZhbHVlICYmIC9eR01UWystXVxcZC8udGVzdCh2YWx1ZSkpIHJldHVybiAnJztcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0dXNUZXh0RnJvbVNlc3Npb25Sb2xlcyhzZXNzaW9uUm9sZXM6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNlc3Npb25Sb2xlcykgfHwgc2Vzc2lvblJvbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5nZXRUcmFuc2xhdGlvbignWW91IGNhbiBqb2luIHRoaXMgbWVldGluZycpIHx8XG4gICAgICAgICdZb3UgY2FuIGpvaW4gdGhpcyBtZWV0aW5nJ1xuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPSBzZXNzaW9uUm9sZXNbMF07XG4gICAgaWYgKHR5cGVvZiBmaXJzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBTdHJpbmcoZmlyc3QpXG4gICAgICAgIC5yZXBsYWNlKC9eXFxzKi1cXHMqLywgJycpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuICAgIGlmIChmaXJzdCAmJiB0eXBlb2YgZmlyc3QgPT09ICdvYmplY3QnICYmIChmaXJzdCBhcyBhbnkpLmRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKChmaXJzdCBhcyBhbnkpLmRlc2NyaXB0aW9uKS50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmdldFRyYW5zbGF0aW9uKCdZb3UgY2FuIGpvaW4gdGhpcyBtZWV0aW5nJykgfHxcbiAgICAgICdZb3UgY2FuIGpvaW4gdGhpcyBtZWV0aW5nJ1xuICAgICk7XG4gIH1cblxuICBtYXBTZXNzaW9uc1RvQ2FyZERhdGEoc2Vzc2lvbnM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzZXNzaW9ucykpIHJldHVybiBbXTtcbiAgICBjb25zdCB1c2VyVGltZXpvbmUgPVxuICAgICAgdGhpcy50aW1lem9uZSAmJiBTdHJpbmcodGhpcy50aW1lem9uZSkudHJpbSgpXG4gICAgICAgID8gU3RyaW5nKHRoaXMudGltZXpvbmUpLnRyaW0oKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc2Vzc2lvbnMubWFwKChzOiBhbnkpID0+IHtcbiAgICAgIC8vIFN1cHBvcnQgYm90aCBkYXRlVGltZVJhbmdlIChzdHJpbmcpIGFuZCBhY3R1YWxEYXRlVGltZVJhbmdlIChvYmplY3Qgd2l0aCBzdGFydC9lbmQpXG4gICAgICBjb25zdCB3aGVuUmF3ID0gcy5kYXRlVGltZVJhbmdlID8/IHMuYWN0dWFsRGF0ZVRpbWVSYW5nZSA/PyAnJztcbiAgICAgIGNvbnN0IHdoZW5Gb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFNlc3Npb25XaGVuKHdoZW5SYXcsIHVzZXJUaW1lem9uZSk7XG4gICAgICAvLyBPbmx5IHNldCBzdGF0dXNUZXh0IHdoZW4gc2Vzc2lvbiBoYXMgam9pbi93YXRjaCByb2xlcyAoc28gd2UgZG9uJ3Qgc2hvdyBcIllvdSBjYW4gam9pbiB0aGlzIG1lZXRpbmdcIiB3aGVuIHRoZXJlIGFyZSBubyBidXR0b25zKVxuICAgICAgY29uc3QgaGFzSm9pbldhdGNoUm9sZSA9XG4gICAgICAgIEFycmF5LmlzQXJyYXkocy5zZXNzaW9uUm9sZXMpICYmXG4gICAgICAgIHMuc2Vzc2lvblJvbGVzLnNvbWUoKHI6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPVxuICAgICAgICAgICAgciAmJiB0eXBlb2YgciA9PT0gJ29iamVjdCcgJiYgci5zZXNzaW9uUm9sZU5hbWVcbiAgICAgICAgICAgICAgPyBTdHJpbmcoci5zZXNzaW9uUm9sZU5hbWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIDogU3RyaW5nKHIgPz8gJycpXG4gICAgICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICByZXR1cm4gbmFtZSA9PT0gJ2pvaW4nIHx8IG5hbWUgPT09ICd3YXRjaCc7XG4gICAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhdHVzVGV4dCA9IGhhc0pvaW5XYXRjaFJvbGVcbiAgICAgICAgPyB0aGlzLmdldFN0YXR1c1RleHRGcm9tU2Vzc2lvblJvbGVzKHMuc2Vzc2lvblJvbGVzKVxuICAgICAgICA6ICcnO1xuICAgICAgY29uc3Qgc2Vzc2lvblRpbWVab25lID1cbiAgICAgICAgcy50aW1lWm9uZSAhPSBudWxsXG4gICAgICAgICAgPyB0eXBlb2Ygcy50aW1lWm9uZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gKHMudGltZVpvbmUuaWQgPz8gcy50aW1lWm9uZS5uYW1lID8/ICcnKVxuICAgICAgICAgICAgOiBTdHJpbmcocy50aW1lWm9uZSlcbiAgICAgICAgICA6ICcnO1xuICAgICAgLy8gU2hvdyB1c2VyJ3Mgc2VsZWN0ZWQgdGltZXpvbmUgd2hlbiBzZXQsIG90aGVyd2lzZSBzZXNzaW9uJ3MgdGltZXpvbmUgZnJvbSBkYXRhXG4gICAgICBjb25zdCBkaXNwbGF5VGltZVpvbmUgPSAodXNlclRpbWV6b25lIHx8IHNlc3Npb25UaW1lWm9uZSB8fCAnJykudHJpbSgpO1xuICAgICAgY29uc3QgdHpBYmJyID0gZGlzcGxheVRpbWVab25lXG4gICAgICAgID8gdGhpcy5nZXRUaW1lem9uZUFiYnJldmlhdGlvbihkaXNwbGF5VGltZVpvbmUpXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCB3aGVuV2l0aFR6ID1cbiAgICAgICAgd2hlbkZvcm1hdHRlZCB8fCAodHlwZW9mIHdoZW5SYXcgPT09ICdvYmplY3QnID8gJycgOiBTdHJpbmcod2hlblJhdykpO1xuICAgICAgY29uc3Qgd2hlbkRpc3BsYXkgPSB0ekFiYnJcbiAgICAgICAgPyBgJHt3aGVuV2l0aFR6fSAoJHt0ekFiYnJ9KWAudHJpbSgpXG4gICAgICAgIDogd2hlbldpdGhUejtcbiAgICAgIGNvbnN0IGRhdGVCYWRnZSA9IHRoaXMuZ2V0U2Vzc2lvbkRhdGVCYWRnZSh3aGVuUmF3LCBkaXNwbGF5VGltZVpvbmUpO1xuICAgICAgbGV0IHRpbWVSYW5nZSA9IHRoaXMuZm9ybWF0U2Vzc2lvblRpbWVSYW5nZSh3aGVuUmF3LCBkaXNwbGF5VGltZVpvbmUpO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBTdHJpbmcocy5kZXNjcmlwdGlvbiA/PyBzLmFic3RyYWN0ID8/ICcnKS50cmltKCk7XG4gICAgICBjb25zdCBtZWV0aW5nVHlwZSA9IFN0cmluZyhcbiAgICAgICAgcy5zZXNzaW9uVHlwZSA/PyBzLnR5cGUgPz8gcy5tZWV0aW5nVHlwZSA/PyAnJyxcbiAgICAgICkudHJpbSgpO1xuICAgICAgY29uc3Qgc2Vzc2lvblR5cGVMYWJlbCA9IHRoaXMuaXNVbkV2ZW50XG4gICAgICAgID8gdGhpcy5nZXRUcmFuc2xhdGlvbignTWVldGluZyB0eXBlJykgfHwgJ01lZXRpbmcgdHlwZSdcbiAgICAgICAgOiB0aGlzLmdldFRyYW5zbGF0aW9uKCdTZXNzaW9uIHR5cGUnKSB8fCAnU2Vzc2lvbiB0eXBlJztcbiAgICAgIC8vIFNhbWUgbG9naWMgYXMgYmVmb3JlIGRlc2lnbiB1cGRhdGU6IHByZWZlciB0eiBhYmJyZXZpYXRpb24gKGUuZy4gRVNUKSwgZWxzZSBzaG93IGRpc3BsYXkgdGltZXpvbmUgc3RyaW5nIChlLmcuIFwiKFVUQy0wMzowMCkgQnJhc2lsaWEpXCIpXG4gICAgICBjb25zdCB0aW1lWm9uZURpc3BsYXkgPSB0ekFiYnIgfHwgZGlzcGxheVRpbWVab25lIHx8ICcnO1xuICAgICAgLy8gV2hlbiBBUEkgcmV0dXJucyBcIlN0YXJ0OiBOL0EsIEVuZDogTi9BLCBUaW1lWm9uZTogLi4uXCIgKHN0cmluZyksIHNob3cgYXQgbGVhc3QgdGltZXpvbmVcbiAgICAgIGlmICghdGltZVJhbmdlICYmIGRpc3BsYXlUaW1lWm9uZSkge1xuICAgICAgICB0aW1lUmFuZ2UgPSB0aGlzLmdldFRyYW5zbGF0aW9uKCdOb3Qgc3BlY2lmaWVkJykgfHwgJ05vdCBzcGVjaWZpZWQnO1xuICAgICAgfVxuICAgICAgLy8gVGltZSByYW5nZSB3aXRoIHRpbWV6b25lIGluIHBhcmVudGhlc2VzIHdoZW4gYXZhaWxhYmxlIChzYW1lIGFzIG9sZCB3aGVuRGlzcGxheSBmb3JtYXQpXG4gICAgICBjb25zdCB0aW1lUmFuZ2VXaXRoVHogPSB0aW1lWm9uZURpc3BsYXlcbiAgICAgICAgPyBgJHt0aW1lUmFuZ2V9ICgke3RpbWVab25lRGlzcGxheX0pYC50cmltKClcbiAgICAgICAgOiB0aW1lUmFuZ2U7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZTogU3RyaW5nKHMudGl0bGUgPz8gJycpLnRyaW0oKSxcbiAgICAgICAgb3JnYW5pemVyOiBTdHJpbmcocy5vcmdhbml6ZXIgPz8gJycpLnRyaW0oKSxcbiAgICAgICAgcm9vbTogU3RyaW5nKHMucm9vbU5hbWUgPz8gJycpLnRyaW0oKSxcbiAgICAgICAgd2hlbjogd2hlbkRpc3BsYXksXG4gICAgICAgIHRpbWVSYW5nZSxcbiAgICAgICAgdGltZVJhbmdlV2l0aFR6OiB0aW1lUmFuZ2UgPyB0aW1lUmFuZ2VXaXRoVHogOiB0aW1lWm9uZURpc3BsYXkgfHwgJycsXG4gICAgICAgIGRhdGVEYXk6IGRhdGVCYWRnZS5kYXksXG4gICAgICAgIGRhdGVNb250aDogZGF0ZUJhZGdlLm1vbnRoLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgdGltZVpvbmU6IGRpc3BsYXlUaW1lWm9uZSxcbiAgICAgICAgdGltZVpvbmVEaXNwbGF5LFxuICAgICAgICBtZWV0aW5nVHlwZSxcbiAgICAgICAgc2Vzc2lvblR5cGVMYWJlbCxcbiAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgc2Vzc2lvbjogcyxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RTcGVha2VySWRzRnJvbVNlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHM6IGFueVtdKTogc3RyaW5nW10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzZXNzaW9uQ2FyZHMpKSByZXR1cm4gW107XG4gICAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY2FyZCBvZiBzZXNzaW9uQ2FyZHMpIHtcbiAgICAgIGNvbnN0IHJhdyA9IGNhcmQ/LnNlc3Npb24/LnNwZWFrZXJzO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmF3KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIHJhdykge1xuICAgICAgICAgIGNvbnN0IHNpZCA9IFN0cmluZyhpZCA/PyAnJykudHJpbSgpO1xuICAgICAgICAgIGlmIChzaWQpIGlkcy5wdXNoKHNpZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChpZHMpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoU3BlYWtlcnNUb1Nlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHM6IGFueVtdKTogdm9pZCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNlc3Npb25DYXJkcykpIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IGNhcmQgb2Ygc2Vzc2lvbkNhcmRzKSB7XG4gICAgICBjb25zdCBzcGVha2VySWRzOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkoY2FyZD8uc2Vzc2lvbj8uc3BlYWtlcnMpXG4gICAgICAgID8gY2FyZC5zZXNzaW9uLnNwZWFrZXJzXG4gICAgICAgICAgICAubWFwKCh4OiBhbnkpID0+IFN0cmluZyh4ID8/ICcnKS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIDogW107XG4gICAgICBjb25zdCBzcGVha2Vyc0xpc3QgPSBzcGVha2VySWRzXG4gICAgICAgIC5tYXAoKGlkKSA9PiB0aGlzLnNwZWFrZXJzW2lkXSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGNhcmQuc3BlYWtlcnNMaXN0ID0gc3BlYWtlcnNMaXN0O1xuICAgICAgaWYgKGNhcmQ/LnNlc3Npb24gJiYgdHlwZW9mIGNhcmQuc2Vzc2lvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY2FyZC5zZXNzaW9uLnNwZWFrZXJzTGlzdCA9IHNwZWFrZXJzTGlzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVNwZWFrZXJzRm9yU2Vzc2lvbkNhcmRzKHNlc3Npb25DYXJkczogYW55W10pOiB2b2lkIHtcbiAgICBjb25zdCBpZHMgPSB0aGlzLmNvbGxlY3RTcGVha2VySWRzRnJvbVNlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHMpO1xuICAgIGlmIChpZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBtaXNzaW5nID0gaWRzLmZpbHRlcihcbiAgICAgIChpZCkgPT4gIXRoaXMuc3BlYWtlcnNbaWRdICYmICF0aGlzLnJlcXVlc3RlZFNwZWFrZXJJZHMuaGFzKGlkKSxcbiAgICApO1xuICAgIGlmIChtaXNzaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hdHRhY2hTcGVha2Vyc1RvU2Vzc2lvbkNhcmRzKHNlc3Npb25DYXJkcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG1pc3NpbmcuZm9yRWFjaCgoaWQpID0+IHRoaXMucmVxdWVzdGVkU3BlYWtlcklkcy5hZGQoaWQpKTtcbiAgICB0aGlzLmdldFNwZWFrZXJzQnlTdGFmZklkcyhtaXNzaW5nKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLmF0dGFjaFNwZWFrZXJzVG9TZXNzaW9uQ2FyZHMoc2Vzc2lvbkNhcmRzKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgLy8gQmVzdCBlZmZvcnQ6IHN0aWxsIGF0dGFjaCB3aGF0IHdlIGhhdmUgY2FjaGVkXG4gICAgICAgIHRoaXMuYXR0YWNoU3BlYWtlcnNUb1Nlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHMpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXRTcGVha2VyUGhvdG9Vcmwoc3BlYWtlcjogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFzcGVha2VyKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gW1xuICAgICAgc3BlYWtlci5waG90byxcbiAgICAgIHNwZWFrZXIucGhvdG9QYXRoLFxuICAgICAgc3BlYWtlci5hdmF0YXJVcmwsXG4gICAgICBzcGVha2VyLnByb2ZpbGVJbWFnZVVybCxcbiAgICAgIHNwZWFrZXIucHJvZmlsZUltYWdlLFxuICAgICAgc3BlYWtlci5wcm9maWxlUGljdHVyZSxcbiAgICAgIHNwZWFrZXIuaW1hZ2VVcmwsXG4gICAgICBzcGVha2VyLmltYWdlLFxuICAgIF07XG4gICAgY29uc3QgdXJsID0gY2FuZGlkYXRlcy5maW5kKCh2KSA9PiB2ICE9IG51bGwgJiYgU3RyaW5nKHYpLnRyaW0oKSAhPT0gJycpO1xuICAgIHJldHVybiB1cmwgPyBTdHJpbmcodXJsKS50cmltKCkgOiBudWxsO1xuICB9XG5cbiAgaGFzU2Vzc2lvbkNhcmRTcGVha2VycyhzZXNzaW9uQ2FyZDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGlzdCA9XG4gICAgICBzZXNzaW9uQ2FyZD8uc3BlYWtlcnNMaXN0IHx8IHNlc3Npb25DYXJkPy5zZXNzaW9uPy5zcGVha2Vyc0xpc3Q7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkgJiYgbGlzdC5sZW5ndGggPiAwKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCBpZHMgPSBzZXNzaW9uQ2FyZD8uc2Vzc2lvbj8uc3BlYWtlcnM7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaWRzKSAmJiBpZHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldFNwZWFrZXJEaXNwbGF5TmFtZShzcGVha2VyOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghc3BlYWtlcikgcmV0dXJuICcnO1xuICAgIGlmIChzcGVha2VyLm5hbWUgIT0gbnVsbCAmJiBTdHJpbmcoc3BlYWtlci5uYW1lKS50cmltKCkgIT09ICcnKVxuICAgICAgcmV0dXJuIFN0cmluZyhzcGVha2VyLm5hbWUpLnRyaW0oKTtcbiAgICBjb25zdCBmaXJzdCA9XG4gICAgICBzcGVha2VyLmZpcnN0TmFtZSAhPSBudWxsID8gU3RyaW5nKHNwZWFrZXIuZmlyc3ROYW1lKS50cmltKCkgOiAnJztcbiAgICBjb25zdCBsYXN0ID1cbiAgICAgIHNwZWFrZXIubGFzdE5hbWUgIT0gbnVsbCA/IFN0cmluZyhzcGVha2VyLmxhc3ROYW1lKS50cmltKCkgOiAnJztcbiAgICByZXR1cm4gYCR7Zmlyc3R9ICR7bGFzdH1gLnRyaW0oKTtcbiAgfVxuXG4gIGdldFNwZWFrZXJJbml0aWFscyhzcGVha2VyOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldFNwZWFrZXJEaXNwbGF5TmFtZShzcGVha2VyKTtcbiAgICBpZiAobmFtZSkgcmV0dXJuIHRoaXMuZ2V0QXR0ZW5kZWVJbml0aWFscyhuYW1lKTtcbiAgICBjb25zdCBpZCA9IHNwZWFrZXI/LmlkICE9IG51bGwgPyBTdHJpbmcoc3BlYWtlci5pZCkgOiAnJztcbiAgICByZXR1cm4gaWQgPyBpZC5zbGljZSgwLCAyKS50b1VwcGVyQ2FzZSgpIDogJz8nO1xuICB9XG5cbiAgbWFwQXR0ZW5kZWVzVG9DYXJkRGF0YShhdHRlbmRlZXM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhdHRlbmRlZXMpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGF0dGVuZGVlcy5tYXAoKGE6IGFueSkgPT4gKHtcbiAgICAgIG5hbWU6IFN0cmluZyhhLm5hbWUgPz8gJycpLnRyaW0oKSxcbiAgICAgIGNvbXBhbnk6XG4gICAgICAgIGEuY29tcGFueSAhPSBudWxsICYmIFN0cmluZyhhLmNvbXBhbnkpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhhLmNvbXBhbnkpLnRyaW0oKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIGpvYlRpdGxlOlxuICAgICAgICBhLmpvYlRpdGxlICE9IG51bGwgJiYgU3RyaW5nKGEuam9iVGl0bGUpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhhLmpvYlRpdGxlKS50cmltKClcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBwaG90bzpcbiAgICAgICAgYS5waG90byAhPSBudWxsICYmIFN0cmluZyhhLnBob3RvKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcoYS5waG90bykudHJpbSgpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgaWQ6IGEuaWQgPz8gYS51c2VySWQgPz8gYS5faWQgPz8gYS5hdHRlbmRlZUlkID8/IHVuZGVmaW5lZCxcbiAgICAgIGludGVyZXN0czpcbiAgICAgICAgYS5pbnRlcmVzdHMgIT0gbnVsbCAmJiBTdHJpbmcoYS5pbnRlcmVzdHMpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhhLmludGVyZXN0cykudHJpbSgpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIGEuZGVzY3JpcHRpb24gIT0gbnVsbCAmJiBTdHJpbmcoYS5kZXNjcmlwdGlvbikudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKGEuZGVzY3JpcHRpb24pLnRyaW0oKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIHVzZXJWaWRlb3NNb2RlbDogYS51c2VyVmlkZW9zTW9kZWxcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB1cmw6XG4gICAgICAgICAgICAgIGEudXNlclZpZGVvc01vZGVsPy51cmwgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICBTdHJpbmcoYS51c2VyVmlkZW9zTW9kZWwudXJsKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICAgICAgPyBTdHJpbmcoYS51c2VyVmlkZW9zTW9kZWwudXJsKS50cmltKClcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB0aHVtYm5haWw6XG4gICAgICAgICAgICAgIGEudXNlclZpZGVvc01vZGVsPy50aHVtYm5haWwgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICBTdHJpbmcoYS51c2VyVmlkZW9zTW9kZWwudGh1bWJuYWlsKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICAgICAgPyBTdHJpbmcoYS51c2VyVmlkZW9zTW9kZWwudGh1bWJuYWlsKS50cmltKClcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgfSkpO1xuICB9XG5cbiAgbWFwU3BlYWtlcnNUb0NhcmREYXRhKHNwZWFrZXJzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3BlYWtlcnMpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHNwZWFrZXJzLm1hcCgoczogYW55KSA9PiB7XG4gICAgICBjb25zdCByYXdEZXNjID1cbiAgICAgICAgcy5kZXNjcmlwdGlvbiAhPSBudWxsICYmIFN0cmluZyhzLmRlc2NyaXB0aW9uKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcocy5kZXNjcmlwdGlvbikudHJpbSgpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSByYXdEZXNjXG4gICAgICAgID8gLzxbYS16XVtcXHNcXFNdKj4vaS50ZXN0KHJhd0Rlc2MpXG4gICAgICAgICAgPyB0aGlzLnN0cmlwSHRtbChyYXdEZXNjKVxuICAgICAgICAgIDogcmF3RGVzY1xuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCByYXdUaXRsZSA9IHMudGl0bGUgPz8gcy5qb2JUaXRsZTtcbiAgICAgIGNvbnN0IGpvYlRpdGxlID1cbiAgICAgICAgcmF3VGl0bGUgIT0gbnVsbCAmJiBTdHJpbmcocmF3VGl0bGUpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhyYXdUaXRsZSkudHJpbSgpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogdGhpcy5nZXRTcGVha2VyRGlzcGxheU5hbWUocyksXG4gICAgICAgIGNvbXBhbnk6XG4gICAgICAgICAgcy5jb21wYW55ICE9IG51bGwgJiYgU3RyaW5nKHMuY29tcGFueSkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgPyBTdHJpbmcocy5jb21wYW55KS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgam9iVGl0bGUsXG4gICAgICAgIHBob3RvOiB0aGlzLmdldFNwZWFrZXJQaG90b1VybChzKSxcbiAgICAgICAgaWQ6IHMuaWQgPz8gcy51c2VySWQgPz8gcy5faWQgPz8gcy5zcGVha2VySWQgPz8gdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcmVzdHM6XG4gICAgICAgICAgcy5pbnRlcmVzdHMgIT0gbnVsbCAmJiBTdHJpbmcocy5pbnRlcmVzdHMpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgID8gU3RyaW5nKHMuaW50ZXJlc3RzKS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIHVzZXJWaWRlb3NNb2RlbDogcy51c2VyVmlkZW9zTW9kZWxcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgdXJsOlxuICAgICAgICAgICAgICAgIHMudXNlclZpZGVvc01vZGVsPy51cmwgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIFN0cmluZyhzLnVzZXJWaWRlb3NNb2RlbC51cmwpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKHMudXNlclZpZGVvc01vZGVsLnVybCkudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgIHRodW1ibmFpbDpcbiAgICAgICAgICAgICAgICBzLnVzZXJWaWRlb3NNb2RlbD8udGh1bWJuYWlsICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICBTdHJpbmcocy51c2VyVmlkZW9zTW9kZWwudGh1bWJuYWlsKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICAgICAgICA/IFN0cmluZyhzLnVzZXJWaWRlb3NNb2RlbC50aHVtYm5haWwpLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBtYXBTcG9uc29yc1RvQ2FyZERhdGEoc3BvbnNvcnM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzcG9uc29ycykpIHJldHVybiBbXTtcbiAgICByZXR1cm4gc3BvbnNvcnMubWFwKChzOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJhd0Rlc2MgPVxuICAgICAgICBzLmJvb3RoRGVzY3JpcHRpb24gIT0gbnVsbCAmJiBTdHJpbmcocy5ib290aERlc2NyaXB0aW9uKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcocy5ib290aERlc2NyaXB0aW9uKS50cmltKClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHJhd0Rlc2NcbiAgICAgICAgPyAvPFthLXpdW1xcc1xcU10qPi9pLnRlc3QocmF3RGVzYylcbiAgICAgICAgICA/IHRoaXMuc3RyaXBIdG1sKHJhd0Rlc2MpXG4gICAgICAgICAgOiByYXdEZXNjXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IHVybFNsdWcgPSBzLnVybCA/PyBzLmJvb3RoVXJsID8/IChzLmJvb3RoSUQgIT0gbnVsbCA/IFN0cmluZyhzLmJvb3RoSUQpIDogbnVsbCkgPz8gKHMuYm9vdGhJZCAhPSBudWxsID8gU3RyaW5nKHMuYm9vdGhJZCkgOiBudWxsKTtcbiAgICAgIGNvbnN0IGxvZ29VcmwgPVxuICAgICAgICBzLmxvZ29VcmwgIT0gbnVsbCAmJiBTdHJpbmcocy5sb2dvVXJsKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcocy5sb2dvVXJsKS50cmltKClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBzLm5hbWUgIT0gbnVsbCA/IFN0cmluZyhzLm5hbWUpLnRyaW0oKSA6ICcnLFxuICAgICAgICB3ZWJzaXRlOiBzLndlYnNpdGUgIT0gbnVsbCAmJiBTdHJpbmcocy53ZWJzaXRlKS50cmltKCkgIT09ICcnID8gU3RyaW5nKHMud2Vic2l0ZSkudHJpbSgpIDogbnVsbCxcbiAgICAgICAgY2F0ZWdvcnk6IHMuY2F0ZWdvcnkgIT0gbnVsbCA/IFN0cmluZyhzLmNhdGVnb3J5KS50cmltKCkgOiBudWxsLFxuICAgICAgICBib290aElEOiBzLmJvb3RoSUQgPz8gcy5ib290aElkID8/IG51bGwsXG4gICAgICAgIGJvb3RoVGl0bGU6IHMuYm9vdGhUaXRsZSAhPSBudWxsID8gU3RyaW5nKHMuYm9vdGhUaXRsZSkudHJpbSgpIDogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiA/PyBudWxsLFxuICAgICAgICAvKiogQm9vdGggVVJMIHNsdWcgZm9yIHJvdXRpbmcgdG8gZGV0YWlsIHBhZ2UgKGUuZy4gZXZlbnRzLzpldmVudFVybC9zcG9uc29ycy9ib290aHMvOnVybCkuICovXG4gICAgICAgIHVybDogdXJsU2x1ZyAhPSBudWxsID8gU3RyaW5nKHVybFNsdWcpLnRyaW0oKSA6IG51bGwsXG4gICAgICAgIGxvZ29VcmwsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBnZXRfZXZlbnRfYm9vdGhzIHJlc3VsdHMgaW50byB0aGUgc2FtZSBzaGFwZSB1c2VkIGJ5IHNwb25zb3IgY2FyZHMuXG4gICAqL1xuICBtYXBCb290aHNUb0NhcmREYXRhKGJvb3RoczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGJvb3RocykpIHJldHVybiBbXTtcbiAgICByZXR1cm4gYm9vdGhzLm1hcCgoYjogYW55KSA9PiB7XG4gICAgICBjb25zdCByYXdEZXNjID1cbiAgICAgICAgYi5kZXNjcmlwdGlvbiAhPSBudWxsICYmIFN0cmluZyhiLmRlc2NyaXB0aW9uKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcoYi5kZXNjcmlwdGlvbikudHJpbSgpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSByYXdEZXNjXG4gICAgICAgID8gLzxbYS16XVtcXHNcXFNdKj4vaS50ZXN0KHJhd0Rlc2MpXG4gICAgICAgICAgPyB0aGlzLnN0cmlwSHRtbChyYXdEZXNjKVxuICAgICAgICAgIDogcmF3RGVzY1xuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCB1cmxTbHVnID0gYi51cmwgPz8gYi5ib290aFVybCA/PyAoYi5ib290aElkICE9IG51bGwgPyBTdHJpbmcoYi5ib290aElkKSA6IG51bGwpID8/IChiLmJvb3RoSUQgIT0gbnVsbCA/IFN0cmluZyhiLmJvb3RoSUQpIDogbnVsbCk7XG4gICAgICBjb25zdCBsb2dvVXJsID1cbiAgICAgICAgYi5sb2dvVXJsICE9IG51bGwgJiYgU3RyaW5nKGIubG9nb1VybCkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKGIubG9nb1VybCkudHJpbSgpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogYi5jb21wYW55ICE9IG51bGwgPyBTdHJpbmcoYi5jb21wYW55KS50cmltKCkgOiAnJyxcbiAgICAgICAgd2Vic2l0ZTpcbiAgICAgICAgICBiLndlYnNpdGUgIT0gbnVsbCAmJiBTdHJpbmcoYi53ZWJzaXRlKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICA/IFN0cmluZyhiLndlYnNpdGUpLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBjYXRlZ29yeTogbnVsbCxcbiAgICAgICAgYm9vdGhJRDogYi5ib290aElkID8/IGIuYm9vdGhJRCA/PyBudWxsLFxuICAgICAgICBib290aFRpdGxlOiBiLmJvb3RoVGl0bGUgIT0gbnVsbCA/IFN0cmluZyhiLmJvb3RoVGl0bGUpLnRyaW0oKSA6ICcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gPz8gbnVsbCxcbiAgICAgICAgLyoqIEJvb3RoIFVSTCBzbHVnIGZvciByb3V0aW5nIHRvIGRldGFpbCBwYWdlIChlLmcuIGV2ZW50cy86ZXZlbnRVcmwvc3BvbnNvcnMvYm9vdGhzLzp1cmwpLiAqL1xuICAgICAgICB1cmw6IHVybFNsdWcgIT0gbnVsbCA/IFN0cmluZyh1cmxTbHVnKS50cmltKCkgOiBudWxsLFxuICAgICAgICBsb2dvVXJsLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgZ2V0X2Jvb3RoX3JlcHJlc2VudGF0aXZlcyByZXN1bHRzIGludG8gdGhlIHNhbWUgc2hhcGUgYXMgYXR0ZW5kZWUgY2FyZHMgKGZvciByZXVzZSBvZiBhdHRlbmRlZSBkZXNpZ24pLlxuICAgKi9cbiAgbWFwQm9vdGhSZXBzVG9DYXJkRGF0YShyZXByZXNlbnRhdGl2ZXM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShyZXByZXNlbnRhdGl2ZXMpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHJlcHJlc2VudGF0aXZlcy5tYXAoKHI6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZmlyc3QgPSByLmZpcnN0TmFtZSAhPSBudWxsID8gU3RyaW5nKHIuZmlyc3ROYW1lKS50cmltKCkgOiAnJztcbiAgICAgIGNvbnN0IGxhc3QgPSByLmxhc3ROYW1lICE9IG51bGwgPyBTdHJpbmcoci5sYXN0TmFtZSkudHJpbSgpIDogJyc7XG4gICAgICBjb25zdCBuYW1lID0gW2ZpcnN0LCBsYXN0XS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpIHx8ICcnO1xuICAgICAgY29uc3QgdXNlcklkID0gci51c2VySWQgIT0gbnVsbCAmJiBTdHJpbmcoci51c2VySWQpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoci51c2VySWQpLnRyaW0oKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNvbXBhbnk6XG4gICAgICAgICAgci5jb21wYW55ICE9IG51bGwgJiYgU3RyaW5nKHIuY29tcGFueSkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgPyBTdHJpbmcoci5jb21wYW55KS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgam9iVGl0bGU6XG4gICAgICAgICAgci5qb2JUaXRsZSAhPSBudWxsICYmIFN0cmluZyhyLmpvYlRpdGxlKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICA/IFN0cmluZyhyLmpvYlRpdGxlKS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgcGhvdG86XG4gICAgICAgICAgci5waG90b1BhdGggIT0gbnVsbCAmJiBTdHJpbmcoci5waG90b1BhdGgpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgID8gU3RyaW5nKHIucGhvdG9QYXRoKS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgaW50ZXJlc3RzOiBudWxsLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICByLmRlc2NyaXB0aW9uICE9IG51bGwgJiYgU3RyaW5nKHIuZGVzY3JpcHRpb24pLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgID8gU3RyaW5nKHIuZGVzY3JpcHRpb24pLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICB1c2VyVmlkZW9zTW9kZWw6IG51bGwsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGdldF9ldmVudF9zZXNzaW9uc192MiBwbGFpbi10ZXh0IGNvbnRlbnQgaW50byBzZXNzaW9uIG9iamVjdHMgZm9yIGNhcmRzLlxuICAgKiBGb3JtYXQ6IFwiRm91bmQgTiBzZXNzaW9uczpcXG4xLiA8dGl0bGU+XFxuICAgLSBUaW1lOiBTdGFydDogLi4uLCBFbmQ6IC4uLiwgVGltZVpvbmU6IC4uLlxcbiAgIC0gUm9vbTogLi4uXFxuICAgLSBUeXBlOiAuLi5cXG4yLiAuLi5cIlxuICAgKi9cbiAgcGFyc2VTZXNzaW9uQ29udGVudFYyKGNvbnRlbnQ6IHN0cmluZyk6IGFueVtdIHtcbiAgICBpZiAoIWNvbnRlbnQgfHwgdHlwZW9mIGNvbnRlbnQgIT09ICdzdHJpbmcnKSByZXR1cm4gW107XG4gICAgY29uc3Qgc2Vzc2lvbnM6IGFueVtdID0gW107XG4gICAgLy8gU3BsaXQgaW50byBibG9ja3MgYnkgXCIxLiBcIiwgXCIyLiBcIiwgZXRjLiAobnVtYmVyICsgZG90ICsgc3BhY2UgYXQgbGluZSBzdGFydClcbiAgICBjb25zdCBibG9ja1JlZ2V4ID0gL1xcblxcZCtcXC5cXHMrLztcbiAgICBjb25zdCBwYXJ0cyA9IGNvbnRlbnQuc3BsaXQoYmxvY2tSZWdleCk7XG4gICAgLy8gRmlyc3QgcGFydCBtYXkgYmUgXCJGb3VuZCBOIHNlc3Npb25zOlwiIG9yIHNpbWlsYXI7IHNraXAgaWYgaXQgZG9lc24ndCBsb29rIGxpa2UgYSBzZXNzaW9uIHRpdGxlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYmxvY2sgPSBwYXJ0c1tpXS50cmltKCk7XG4gICAgICBpZiAoIWJsb2NrKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGxpbmVzID0gYmxvY2tcbiAgICAgICAgLnNwbGl0KC9cXG4vKVxuICAgICAgICAubWFwKChsKSA9PiBsLnRyaW0oKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGNvbnN0IHRpdGxlID0gbGluZXNbMF0gfHwgJyc7XG4gICAgICBpZiAoIXRpdGxlIHx8IC9eRm91bmRcXHMrXFxkK1xccytzZXNzaW9ucy9pLnRlc3QodGl0bGUpKSBjb250aW51ZTtcbiAgICAgIGxldCBkYXRlVGltZVJhbmdlID0gJyc7XG4gICAgICBsZXQgcm9vbU5hbWUgPSAnJztcbiAgICAgIGxldCBzZXNzaW9uVHlwZSA9ICcnO1xuICAgICAgbGV0IHRpbWVab25lID0gJyc7XG4gICAgICBmb3IgKGxldCBqID0gMTsgaiA8IGxpbmVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tqXTtcbiAgICAgICAgY29uc3QgdGltZU1hdGNoID0gbGluZS5tYXRjaCgvVGltZTpcXHMqKC4rKS9pKTtcbiAgICAgICAgaWYgKHRpbWVNYXRjaCkge1xuICAgICAgICAgIGRhdGVUaW1lUmFuZ2UgPSB0aW1lTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgICAgIGNvbnN0IHR6TWF0Y2ggPSBkYXRlVGltZVJhbmdlLm1hdGNoKC9UaW1lWm9uZTpcXHMqKFteLFxcbl0rKS9pKTtcbiAgICAgICAgICBpZiAodHpNYXRjaCkgdGltZVpvbmUgPSB0ek1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb29tTWF0Y2ggPSBsaW5lLm1hdGNoKC9Sb29tOlxccyooLispL2kpO1xuICAgICAgICBpZiAocm9vbU1hdGNoKSB7XG4gICAgICAgICAgcm9vbU5hbWUgPSByb29tTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHR5cGVNYXRjaCA9IGxpbmUubWF0Y2goL1R5cGU6XFxzKiguKykvaSk7XG4gICAgICAgIGlmICh0eXBlTWF0Y2gpIHtcbiAgICAgICAgICBzZXNzaW9uVHlwZSA9IHR5cGVNYXRjaFsxXS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHpMaW5lTWF0Y2ggPSBsaW5lLm1hdGNoKC9UaW1lWm9uZTpcXHMqKC4rKS9pKTtcbiAgICAgICAgaWYgKHR6TGluZU1hdGNoICYmICF0aW1lWm9uZSkgdGltZVpvbmUgPSB0ekxpbmVNYXRjaFsxXS50cmltKCk7XG4gICAgICB9XG4gICAgICBzZXNzaW9ucy5wdXNoKHtcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHJvb21OYW1lOiByb29tTmFtZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIGRhdGVUaW1lUmFuZ2U6IGRhdGVUaW1lUmFuZ2UgfHwgdW5kZWZpbmVkLFxuICAgICAgICBzZXNzaW9uVHlwZTogc2Vzc2lvblR5cGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICB0aW1lWm9uZTogdGltZVpvbmUgfHwgdW5kZWZpbmVkLFxuICAgICAgICBzZXNzaW9uUm9sZXM6IFtdLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzZXNzaW9ucztcbiAgfVxuXG4gIGdldFZpc2libGVTZXNzaW9uQ2FyZHMoY2hhdDogYW55KTogYW55W10ge1xuICAgIGNvbnN0IGxpc3QgPSBjaGF0Py5zZXNzaW9uQ2FyZHMgPz8gW107XG4gICAgY29uc3QgdG90YWwgPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRTZXNzaW9uQ2FyZElkc1tjaGF0Py5faWRdO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IHRvdGFsIC0gdGhpcy5TRVNTSU9OX0NBUkRTX0lOSVRJQUw7XG4gICAgaWYgKHJlbWFpbmluZyA+IDQgJiYgIWV4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gbGlzdC5zbGljZSgwLCB0aGlzLlNFU1NJT05fQ0FSRFNfSU5JVElBTCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgZ2V0VmlzaWJsZUF0dGVuZGVlQ2FyZHMoY2hhdDogYW55KTogYW55W10ge1xuICAgIGNvbnN0IGxpc3QgPSBjaGF0Py5hdHRlbmRlZUNhcmRzID8/IFtdO1xuICAgIGNvbnN0IHRvdGFsID0gbGlzdC5sZW5ndGg7XG4gICAgY29uc3QgZXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkQXR0ZW5kZWVDYXJkSWRzW2NoYXQ/Ll9pZF07XG4gICAgY29uc3QgcmVtYWluaW5nID0gdG90YWwgLSB0aGlzLkFUVEVOREVFX0NBUkRTX0lOSVRJQUw7XG4gICAgaWYgKHJlbWFpbmluZyA+IDQgJiYgIWV4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gbGlzdC5zbGljZSgwLCB0aGlzLkFUVEVOREVFX0NBUkRTX0lOSVRJQUwpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIGdldFZpc2libGVTcGVha2VyQ2FyZHMoY2hhdDogYW55KTogYW55W10ge1xuICAgIGNvbnN0IGxpc3QgPSBjaGF0Py5zcGVha2VyQ2FyZHMgPz8gW107XG4gICAgY29uc3QgdG90YWwgPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRTcGVha2VyQ2FyZElkc1tjaGF0Py5faWRdO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IHRvdGFsIC0gdGhpcy5TUEVBS0VSX0NBUkRTX0lOSVRJQUw7XG4gICAgaWYgKHJlbWFpbmluZyA+IDQgJiYgIWV4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gbGlzdC5zbGljZSgwLCB0aGlzLlNQRUFLRVJfQ0FSRFNfSU5JVElBTCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgZ2V0VmlzaWJsZVNwb25zb3JDYXJkcyhjaGF0OiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgbGlzdCA9IGNoYXQ/LnNwb25zb3JDYXJkcyA/PyBbXTtcbiAgICBjb25zdCB0b3RhbCA9IGxpc3QubGVuZ3RoO1xuICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5leHBhbmRlZFNwb25zb3JDYXJkSWRzW2NoYXQ/Ll9pZF07XG4gICAgY29uc3QgcmVtYWluaW5nID0gdG90YWwgLSB0aGlzLlNQT05TT1JfQ0FSRFNfSU5JVElBTDtcbiAgICBpZiAocmVtYWluaW5nID4gNCAmJiAhZXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiBsaXN0LnNsaWNlKDAsIHRoaXMuU1BPTlNPUl9DQVJEU19JTklUSUFMKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBnZXRWaXNpYmxlQm9vdGhSZXBDYXJkcyhjaGF0OiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgbGlzdCA9IGNoYXQ/LmJvb3RoUmVwQ2FyZHMgPz8gW107XG4gICAgY29uc3QgdG90YWwgPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRCb290aFJlcENhcmRJZHNbY2hhdD8uX2lkXTtcbiAgICBjb25zdCByZW1haW5pbmcgPSB0b3RhbCAtIHRoaXMuQk9PVEhfUkVQX0NBUkRTX0lOSVRJQUw7XG4gICAgaWYgKHJlbWFpbmluZyA+IDQgJiYgIWV4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gbGlzdC5zbGljZSgwLCB0aGlzLkJPT1RIX1JFUF9DQVJEU19JTklUSUFMKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBleHBhbmRTZXNzaW9uQ2FyZHMoY2hhdDogYW55KTogdm9pZCB7XG4gICAgaWYgKGNoYXQ/Ll9pZCkge1xuICAgICAgdGhpcy5leHBhbmRlZFNlc3Npb25DYXJkSWRzID0ge1xuICAgICAgICAuLi50aGlzLmV4cGFuZGVkU2Vzc2lvbkNhcmRJZHMsXG4gICAgICAgIFtjaGF0Ll9pZF06IHRydWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZXhwYW5kQXR0ZW5kZWVDYXJkcyhjaGF0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY2hhdD8uX2lkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkQXR0ZW5kZWVDYXJkSWRzID0ge1xuICAgICAgICAuLi50aGlzLmV4cGFuZGVkQXR0ZW5kZWVDYXJkSWRzLFxuICAgICAgICBbY2hhdC5faWRdOiB0cnVlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGV4cGFuZFNwZWFrZXJDYXJkcyhjaGF0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY2hhdD8uX2lkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkU3BlYWtlckNhcmRJZHMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXhwYW5kZWRTcGVha2VyQ2FyZElkcyxcbiAgICAgICAgW2NoYXQuX2lkXTogdHJ1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBleHBhbmRTcG9uc29yQ2FyZHMoY2hhdDogYW55KTogdm9pZCB7XG4gICAgaWYgKGNoYXQ/Ll9pZCkge1xuICAgICAgdGhpcy5leHBhbmRlZFNwb25zb3JDYXJkSWRzID0ge1xuICAgICAgICAuLi50aGlzLmV4cGFuZGVkU3BvbnNvckNhcmRJZHMsXG4gICAgICAgIFtjaGF0Ll9pZF06IHRydWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZXhwYW5kQm9vdGhSZXBDYXJkcyhjaGF0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY2hhdD8uX2lkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkQm9vdGhSZXBDYXJkSWRzID0ge1xuICAgICAgICAuLi50aGlzLmV4cGFuZGVkQm9vdGhSZXBDYXJkSWRzLFxuICAgICAgICBbY2hhdC5faWRdOiB0cnVlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMYWJlbCBmb3Igc2Vzc2lvbiB0eXBlIG9uIGNhcmRzOiBcIlNlc3Npb24gdHlwZVwiIHdoZW4gaXNVbkV2ZW50LCBlbHNlIFwiTWVldGluZyB0eXBlXCIuXG4gICAqL1xuICBnZXRTZXNzaW9uVHlwZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNVbkV2ZW50XG4gICAgPyB0aGlzLmdldFRyYW5zbGF0aW9uKCdNZWV0aW5nIHR5cGUnKSB8fCAnTWVldGluZyB0eXBlJ1xuICAgIDogdGhpcy5nZXRUcmFuc2xhdGlvbignU2Vzc2lvbiB0eXBlJykgfHwgJ1Nlc3Npb24gdHlwZSdcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgSm9pbi9XYXRjaCByb2xlIGJ1dHRvbnMgZnJvbSBzZXNzaW9uLnNlc3Npb25Sb2xlcyBmb3Igc2Vzc2lvbiBjYXJkcy5cbiAgICogV2hlbiBpc1VuRXZlbnQgaXMgZmFsc2UsIHJldHVybnMgc2luZ2xlIFwiV2F0Y2hcIiBidXR0b24gKHNhbWUgYXMgdGVtcGxhdGUyKS4gV2hlbiB0cnVlLCByZXR1cm5zIEpvaW4vV2F0Y2ggZnJvbSBzZXNzaW9uUm9sZXMuXG4gICAqL1xuICBnZXRTZXNzaW9uUm9sZUJ1dHRvbnMoc2Vzc2lvbkNhcmQ6IGFueSk6IHsgYWN0aW9uOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdIHtcbiAgICBpZiAodGhpcy5pc1VuRXZlbnQgPT09IGZhbHNlICYmIHNlc3Npb25DYXJkPy5zZXNzaW9uKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiAnam9pbicsXG4gICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ1dhdGNoJykgfHwgJ1dhdGNoJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuICAgIGNvbnN0IHJhdyA9IHNlc3Npb25DYXJkPy5zZXNzaW9uPy5zZXNzaW9uUm9sZXM7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHJhdykgfHwgcmF3Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHJvbGVzOiB7IGFjdGlvbjogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgciBvZiByYXcpIHtcbiAgICAgIGNvbnN0IG5hbWUgPVxuICAgICAgICB0eXBlb2YgciA9PT0gJ29iamVjdCcgJiYgciAhPSBudWxsICYmIHIuc2Vzc2lvblJvbGVOYW1lXG4gICAgICAgICAgPyBTdHJpbmcoci5zZXNzaW9uUm9sZU5hbWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgOiBTdHJpbmcocikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobmFtZSA9PT0gJ2pvaW4nIHx8IG5hbWUgPT09ICd3YXRjaCcpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPVxuICAgICAgICAgIG5hbWUgPT09ICdqb2luJ1xuICAgICAgICAgICAgPyB0aGlzLmdldFRyYW5zbGF0aW9uKCdKb2luJykgfHwgJ0pvaW4nXG4gICAgICAgICAgICA6IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ1dhdGNoJykgfHwgJ1dhdGNoJztcbiAgICAgICAgcm9sZXMucHVzaCh7IGFjdGlvbjogbmFtZSwgbGFiZWwgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByb2xlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBzZXNzaW9uIGlzIG9uLWRlbWFuZCAoY2xhc3NpZmljYXRpb25JZCA9PT0gZUNsYXNzaWZpY2F0aW9uVHlwZS5PbkRlbWFuZCkuXG4gICAqIFdoZW4gdHJ1ZSwgSm9pbi9XYXRjaCBhcmUgYWx3YXlzIGFjdGlvbmFibGUgYW5kIGNhcmQgdXNlcyBPbkRlbWFuZCBkZXNpZ24uXG4gICAqL1xuICBpc1Nlc3Npb25PbmRlbWFuZChzZXNzaW9uQ2FyZDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaWQgPVxuICAgICAgc2Vzc2lvbkNhcmQ/LnNlc3Npb24/LmNsYXNzaWZpY2F0aW9uSWQgPz8gc2Vzc2lvbkNhcmQ/LmNsYXNzaWZpY2F0aW9uSWQ7XG4gICAgaWYgKGlkID09IG51bGwgfHwgaWQgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIFN0cmluZyhpZCkgPT09IGVDbGFzc2lmaWNhdGlvblR5cGUuT25EZW1hbmQ7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBKb2luL1dhdGNoIGFjdGlvbiBpcyBwb3NzaWJsZSAoc2FtZSBsb2dpYyBhcyBhcHAgdGVtcGxhdGU4KS5cbiAgICogQWN0aW9uIGlzIGFsbG93ZWQgd2hlbjogb24tZGVtYW5kIHNlc3Npb24gT1IgaXNCdXR0b25BY3RpdmF0ZWQgKHNlc3Npb24gaGFzIHN0YXJ0ZWQpLlxuICAgKi9cbiAgY2FuUGVyZm9ybVNlc3Npb25BY3Rpb24oc2Vzc2lvbkNhcmQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghc2Vzc2lvbkNhcmQ/LnNlc3Npb24pIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBzID0gc2Vzc2lvbkNhcmQuc2Vzc2lvbjtcbiAgICBpZiAodGhpcy5pc1Nlc3Npb25PbmRlbWFuZChzZXNzaW9uQ2FyZCkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAhIXMuaXNCdXR0b25BY3RpdmF0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2FtZSBsb2dpYyBhcyBhcHAgdGVtcGxhdGU4OiBkZWxheSBpbiBtaW51dGVzIChzY2hlZHVsZWQgc3RhcnQgLSBhY3R1YWwgc3RhcnQpLlxuICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBlaXRoZXIgZGF0ZSBtaXNzaW5nOyA+IDAgd2hlbiBtZWV0aW5nIGlzIGRlbGF5ZWQuXG4gICAqL1xuICBnZXRNZWV0aW5nRGVsYXlNaW51dGVzKHNlc3Npb25DYXJkOiBhbnkpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9uQ2FyZD8uc2Vzc2lvbjtcbiAgICBpZiAoIXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gcy5kYXRlVGltZVJhbmdlPy5zdGFydDtcbiAgICBjb25zdCBhY3R1YWxTdGFydCA9IHMuYWN0dWFsRGF0ZVRpbWVSYW5nZT8uc3RhcnQ7XG4gICAgaWYgKCFzdGFydERhdGUgfHwgIWFjdHVhbFN0YXJ0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkaWZmTXMgPVxuICAgICAgICBuZXcgRGF0ZShzdGFydERhdGUpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGFjdHVhbFN0YXJ0KS5nZXRUaW1lKCk7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihkaWZmTXMgLyAoMTAwMCAqIDYwKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gbWVldGluZyBpcyBkZWxheWVkIChzYW1lIGNvbmRpdGlvbiBhcyB0ZW1wbGF0ZTg6IGRlbGF5IG1pbnV0ZXMgPiAwLCBub3Qgb24tZGVtYW5kLCBidXR0b24gbm90IGFjdGl2YXRlZCkuICovXG4gIGlzTWVldGluZ0RlbGF5ZWQoc2Vzc2lvbkNhcmQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRlbGF5ID0gdGhpcy5nZXRNZWV0aW5nRGVsYXlNaW51dGVzKHNlc3Npb25DYXJkKTtcbiAgICBpZiAoZGVsYXkgPT0gbnVsbCB8fCBkZWxheSA8PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNTZXNzaW9uT25kZW1hbmQoc2Vzc2lvbkNhcmQpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHNlc3Npb25DYXJkPy5zZXNzaW9uPy5pc0J1dHRvbkFjdGl2YXRlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb25TZXNzaW9uQ2FyZEFjdGlvbihcbiAgICBzZXNzaW9uQ2FyZDogYW55LFxuICAgIHJvbGU6IHsgYWN0aW9uOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFzZXNzaW9uQ2FyZD8uc2Vzc2lvbikgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzVW5FdmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc2Vzc2lvbkFjdGlvbnMuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdzZXNzaW9uJyxcbiAgICAgICAgYWN0aW9uOiByb2xlLmFjdGlvbixcbiAgICAgICAgc2Vzc2lvbjogc2Vzc2lvbkNhcmQuc2Vzc2lvbixcbiAgICAgICAgc2Vzc2lvbkNhcmQsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNhblBlcmZvcm1TZXNzaW9uQWN0aW9uKHNlc3Npb25DYXJkKSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIHRoaXMuZ2V0VHJhbnNsYXRpb24oJ1lvdSBjYW4gam9pbi93YXRjaCBhdCB0aGUgc3RhcnRpbmcgdGltZScpIHx8XG4gICAgICAgICdZb3UgY2FuIGpvaW4vd2F0Y2ggYXQgdGhlIHN0YXJ0aW5nIHRpbWUnO1xuICAgICAgdGhpcy5zZXNzaW9uQWN0aW9uQmxvY2tlZC5lbWl0KG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNlc3Npb25BY3Rpb25zLmVtaXQoe1xuICAgICAgdHlwZTogJ3Nlc3Npb24nLFxuICAgICAgYWN0aW9uOiByb2xlLmFjdGlvbixcbiAgICAgIHNlc3Npb246IHNlc3Npb25DYXJkLnNlc3Npb24sXG4gICAgICBzZXNzaW9uQ2FyZCxcbiAgICB9KTtcbiAgfVxuXG4gIGxpc3RlblNvY2tldHMoKSB7XG4gICAgaWYgKHRoaXMuZXZlbnRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ0xpc3RlbiBTb2NrZXQnKTtcbiAgICB0aGlzLmV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlXG4gICAgICAuZ2V0VXNlclNwZWNpZmljTm90aWZpY2F0aW9uKClcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXMpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBsaXN0ZW5Tb2NrZXRzIHJlY2VpdmVkJywge1xuICAgICAgICAgICAgaGFzT3RoZXJGaWVsZHM6ICEhcmVzPy5tPy5PdGhlckZpZWxkcyxcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogcmVzPy5tPy5PdGhlckZpZWxkcz8ubWVzc2FnZV9pZCxcbiAgICAgICAgICAgIGhhc0Fuc3dlcjogISFyZXM/Lm0/Lk90aGVyRmllbGRzPy5hbnN3ZXIsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgT3RoZXJGaWVsZHMgZXhpc3RzIGluIHRoZSByZXNwb25zZVxuICAgICAgICAgIGlmIChyZXM/Lm0/Lk90aGVyRmllbGRzPy53b3JrZmxvd19pZCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIFdvcmtmbG93IHByb2dyZXNzIHVwZGF0ZScsXG4gICAgICAgICAgICAgIHJlcz8ubT8uT3RoZXJGaWVsZHMsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBwZXJjZW50YWdlLFxuICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgIGFjdGlvbl9uYW1lLFxuICAgICAgICAgICAgICBjdXJyZW50X2FjdGlvbl9uYW1lLFxuICAgICAgICAgICAgICB3b3JrZmxvd19leGVjdXRpb25faWQsXG4gICAgICAgICAgICAgIHRpbWVfc3RhbXAsXG4gICAgICAgICAgICB9ID0gcmVzPy5tPy5PdGhlckZpZWxkcztcblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzcyA9IHBlcmNlbnRhZ2U7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRXb3JrZmxvd0FjdGlvbiA9IGFjdGlvbl9uYW1lO1xuXG4gICAgICAgICAgICBjb25zdCBhY3Rpb25JbmRleCA9IHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzLkFjdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAoYSkgPT4gYS5OYW1lID09IGN1cnJlbnRfYWN0aW9uX25hbWUsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzLkFjdGlvbnNbYWN0aW9uSW5kZXhdWydPdXRwdXQnXSA9XG4gICAgICAgICAgICAgICAgb3V0cHV0O1xuICAgICAgICAgICAgICB0aGlzLndvcmtmbG93RXhlY3V0aW9uRGV0YWlscy5BY3Rpb25zW2FjdGlvbkluZGV4XVtcbiAgICAgICAgICAgICAgICAnSW5zZXJ0VGltZVN0YW1wJ1xuICAgICAgICAgICAgICBdID0gZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCB0aW1lX3N0YW1wKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEFjdGlvbiB3aXRoIG5hbWUgJHthY3Rpb25fbmFtZX0gbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93RXhlY3V0aW9uRGV0YWlscyA9XG4gICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzcyA9PSAxMDApIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nW3RoaXMuY2hhdExvZy5sZW5ndGggLSAxXVsnV29ya2Zsb3dFeGVjdXRpb25JZCddID1cbiAgICAgICAgICAgICAgICB3b3JrZmxvd19leGVjdXRpb25faWQ7XG4gICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW5nV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c09uVGV4dGFyZWEoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVzPy5tPy5PdGhlckZpZWxkcykge1xuICAgICAgICAgICAgY29uc3Qgb3RoZXJGaWVsZHMgPSByZXMubS5PdGhlckZpZWxkcztcbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6YWJsZSA9IG90aGVyRmllbGRzLnNlcmlhbGl6YWJsZV90b19yZXR1cm47XG5cbiAgICAgICAgICAgIC8vIFNlc3Npb24gY2FyZHM6IGV2ZW50IHNlc3Npb25zIHRvb2xzIChKU09OIG9yIHBsYWluIHRleHQpXG4gICAgICAgICAgICBjb25zdCBpc1Nlc3Npb25Ub29sID1cbiAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfZXZlbnRfc2Vzc2lvbnMnIHx8XG4gICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2V2ZW50X3Nlc3Npb25zX3YyJyB8fFxuICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9zZXNzaW9uc19ieV9pbnRlcmVzdCcgfHxcbiAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfc2Vzc2lvbnNfYnlfdHJhY2snIHx8XG4gICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X3NwZWFrZXJfc2Vzc2lvbnMnIHx8XG4gICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X3VwY29taW5nX3Nlc3Npb25zJztcbiAgICAgICAgICAgIGlmIChpc1Nlc3Npb25Ub29sKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPVxuICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnQ7XG4gICAgICAgICAgICAgIGNvbnN0IGFuc3dlclRleHQgPVxuICAgICAgICAgICAgICAgIG90aGVyRmllbGRzLmFuc3dlciAhPSBudWxsXG4gICAgICAgICAgICAgICAgICA/IFN0cmluZyhvdGhlckZpZWxkcy5hbnN3ZXIpLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgbGV0IHB1c2hlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoY29udGVudFN0ciAmJiB0eXBlb2YgY29udGVudFN0ciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2Vzc2lvbnM6IGFueVtdID0gW107XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgICBzZXNzaW9ucyA9IHBhcnNlZD8uc2Vzc2lvbnMgPz8gW107XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgLy8gdjIgcGxhaW4gdGV4dDogXCJGb3VuZCAyIHNlc3Npb25zOlxcbjEuIFRpdGxlXFxuICAgLSBUaW1lOiBTdGFydDogLi4uIEVuZDogLi4uXFxuICAgLSBSb29tOiAuLi5cXG4gICAtIFR5cGU6IC4uLlwiXG4gICAgICAgICAgICAgICAgICBzZXNzaW9ucyA9IHRoaXMucGFyc2VTZXNzaW9uQ29udGVudFYyKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcFNlc3Npb25zVG9DYXJkRGF0YShzZXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVTcGVha2Vyc0ZvclNlc3Npb25DYXJkcyhtYXBwZWQpO1xuICAgICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPVxuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemFibGUubWVzc2FnZV9pZCB8fCBgc2Vzc2lvbl9jYXJkc18ke0RhdGUubm93KCl9YDtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRFbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgX2lkOiBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Nlc3Npb25fY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhbnN3ZXJUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXJUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbkNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJZHggPSB0aGlzLmNoYXRMb2cuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5faWQgPT09IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0lkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZ1tleGlzdGluZ0lkeF0gPSBjYXJkRW50cnk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChjYXJkRW50cnkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgICAgICAgcHVzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHB1c2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBObyBzZXNzaW9uIGNhcmRzIHB1c2hlZDogZmFsbCB0aHJvdWdoIHRvIG5vcm1hbCBPdGhlckZpZWxkcyBoYW5kbGluZyBzbyBhbnN3ZXIgaXMgZGlzcGxheWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEF0dGVuZGVlIGNhcmRzOiB0b29sIGdldF9ldmVudF9hdHRlbmRlZXMgKG9ubHkgcHVzaCB3aGVuIHdlIGhhdmUgYXR0ZW5kZWVzOyBlbHNlIGZhbGwgdGhyb3VnaCBzbyBhbnN3ZXIgaXMgc2hvd24gYXMgbm9ybWFsIEFJIG1lc3NhZ2UpXG4gICAgICAgICAgICBpZiAoc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfZXZlbnRfYXR0ZW5kZWVzJykge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID1cbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50O1xuICAgICAgICAgICAgICBjb25zdCBhbnN3ZXJUZXh0ID1cbiAgICAgICAgICAgICAgICBvdGhlckZpZWxkcy5hbnN3ZXIgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcob3RoZXJGaWVsZHMuYW5zd2VyKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgIGxldCBwdXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRTdHIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dGVuZGVlcyA9IHBhcnNlZD8uYXR0ZW5kZWVzID8/IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBBdHRlbmRlZXNUb0NhcmREYXRhKGF0dGVuZGVlcyk7XG4gICAgICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPVxuICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZS5tZXNzYWdlX2lkIHx8IGBhdHRlbmRlZV9jYXJkc18ke0RhdGUubm93KCl9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZEVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgIF9pZDogbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2F0dGVuZGVlX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhbnN3ZXJUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGFuc3dlclRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRlbmRlZUNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWR4ID0gdGhpcy5jaGF0TG9nLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5faWQgPT09IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZ1tleGlzdGluZ0lkeF0gPSBjYXJkRW50cnk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goY2FyZEVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnW1NvY2tldCBDaGF0XSBFcnJvciBwYXJzaW5nIGdldF9ldmVudF9hdHRlbmRlZXMgY29udGVudDonLFxuICAgICAgICAgICAgICAgICAgICBlLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHB1c2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvKiBhdHRlbmRlZXMgZW1wdHkgKGUuZy4gdG90YWxDb3VudDogMCk6IGZhbGwgdGhyb3VnaCBzbyBhbnN3ZXIgbGlrZSBcIkkgY291bGRuJ3QgZmluZCBhbnkgYXR0ZW5kZWVzLi4uXCIgaXMgc2hvd24gYXMgbm9ybWFsIEFJIG1lc3NhZ2UgKi9cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU3BlYWtlciBjYXJkczogdG9vbCBnZXRfZXZlbnRfc3BlYWtlcnMgKHNhbWUgaGFuZGxpbmcgYXMgYXR0ZW5kZWVzOyBvbmx5IHB1c2ggd2hlbiB3ZSBoYXZlIHNwZWFrZXJzKVxuICAgICAgICAgICAgaWYgKHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2V2ZW50X3NwZWFrZXJzJykge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID1cbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50O1xuICAgICAgICAgICAgICBjb25zdCBhbnN3ZXJUZXh0ID1cbiAgICAgICAgICAgICAgICBvdGhlckZpZWxkcy5hbnN3ZXIgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcob3RoZXJGaWVsZHMuYW5zd2VyKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgIGxldCBwdXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRTdHIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNwZWFrZXJzID0gcGFyc2VkPy5zcGVha2VycyA/PyBwYXJzZWQ/LnNwZWFrZXIgPz8gW107XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcFNwZWFrZXJzVG9DYXJkRGF0YShzcGVha2Vycyk7XG4gICAgICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPVxuICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZS5tZXNzYWdlX2lkIHx8IGBzcGVha2VyX2NhcmRzXyR7RGF0ZS5ub3coKX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJkRW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgX2lkOiBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3BlYWtlcl9jYXJkcycsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYW5zd2VyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXJUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgICAgICAgICAgc3BlYWtlckNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWR4ID0gdGhpcy5jaGF0TG9nLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5faWQgPT09IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZ1tleGlzdGluZ0lkeF0gPSBjYXJkRW50cnk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goY2FyZEVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnW1NvY2tldCBDaGF0XSBFcnJvciBwYXJzaW5nIGdldF9ldmVudF9zcGVha2VycyBjb250ZW50OicsXG4gICAgICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocHVzaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8qIHNwZWFrZXJzIGVtcHR5OiBmYWxsIHRocm91Z2ggc28gYW5zd2VyIGlzIHNob3duIGFzIG5vcm1hbCBBSSBtZXNzYWdlICovXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNwb25zb3IgY2FyZHM6IHRvb2wgZ2V0X2V2ZW50X3Nwb25zb3JzIChvbmx5IHB1c2ggd2hlbiB3ZSBoYXZlIHNwb25zb3JzKVxuICAgICAgICAgICAgaWYgKHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2V2ZW50X3Nwb25zb3JzJykge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID1cbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50O1xuICAgICAgICAgICAgICBjb25zdCBhbnN3ZXJUZXh0ID1cbiAgICAgICAgICAgICAgICBvdGhlckZpZWxkcy5hbnN3ZXIgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcob3RoZXJGaWVsZHMuYW5zd2VyKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgIGxldCBwdXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRTdHIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNwb25zb3JzID0gcGFyc2VkPy5zcG9uc29ycyA/PyBbXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwU3BvbnNvcnNUb0NhcmREYXRhKHNwb25zb3JzKTtcbiAgICAgICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2dJZCA9XG4gICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlLm1lc3NhZ2VfaWQgfHwgYHNwb25zb3JfY2FyZHNfJHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRFbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBfaWQ6IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzcG9uc29yX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhbnN3ZXJUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGFuc3dlclRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgICAgICAgICBzcG9uc29yQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJZHggPSB0aGlzLmNoYXRMb2cuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLl9pZCA9PT0gbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0lkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nW2V4aXN0aW5nSWR4XSA9IGNhcmRFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChjYXJkRW50cnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICBwdXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIEVycm9yIHBhcnNpbmcgZ2V0X2V2ZW50X3Nwb25zb3JzIGNvbnRlbnQ6JyxcbiAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwdXNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQm9vdGggY2FyZHM6IHRvb2wgZ2V0X2V2ZW50X2Jvb3RocyAocmV1c2Ugc3BvbnNvciBjYXJkIGRlc2lnbjsgb25seSBwdXNoIHdoZW4gd2UgaGF2ZSBib290aHMpXG4gICAgICAgICAgICBpZiAoc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfZXZlbnRfYm9vdGhzJykge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID1cbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50O1xuICAgICAgICAgICAgICBjb25zdCBhbnN3ZXJUZXh0ID1cbiAgICAgICAgICAgICAgICBvdGhlckZpZWxkcy5hbnN3ZXIgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcob3RoZXJGaWVsZHMuYW5zd2VyKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgIGxldCBwdXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRTdHIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb3RocyA9IHBhcnNlZD8uYm9vdGhzID8/IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBCb290aHNUb0NhcmREYXRhKGJvb3Rocyk7XG4gICAgICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPVxuICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZS5tZXNzYWdlX2lkIHx8IGBzcG9uc29yX2NhcmRzXyR7RGF0ZS5ub3coKX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJkRW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgX2lkOiBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3BvbnNvcl9jYXJkcycsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYW5zd2VyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXJUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgICAgICAgICAgc3BvbnNvckNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWR4ID0gdGhpcy5jaGF0TG9nLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5faWQgPT09IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZ1tleGlzdGluZ0lkeF0gPSBjYXJkRW50cnk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goY2FyZEVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnW1NvY2tldCBDaGF0XSBFcnJvciBwYXJzaW5nIGdldF9ldmVudF9ib290aHMgY29udGVudDonLFxuICAgICAgICAgICAgICAgICAgICBlLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHB1c2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCb290aCByZXByZXNlbnRhdGl2ZSBjYXJkczogdG9vbCBnZXRfYm9vdGhfcmVwcmVzZW50YXRpdmVzIChzYW1lIGRlc2lnbiBhcyBhdHRlbmRlZSBjYXJkcylcbiAgICAgICAgICAgIGlmIChzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ib290aF9yZXByZXNlbnRhdGl2ZXMnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPVxuICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnQ7XG4gICAgICAgICAgICAgIGNvbnN0IGFuc3dlclRleHQgPVxuICAgICAgICAgICAgICAgIG90aGVyRmllbGRzLmFuc3dlciAhPSBudWxsXG4gICAgICAgICAgICAgICAgICA/IFN0cmluZyhvdGhlckZpZWxkcy5hbnN3ZXIpLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgbGV0IHB1c2hlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoY29udGVudFN0cikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVwcmVzZW50YXRpdmVzID0gcGFyc2VkPy5yZXByZXNlbnRhdGl2ZXMgPz8gW107XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcEJvb3RoUmVwc1RvQ2FyZERhdGEocmVwcmVzZW50YXRpdmVzKTtcbiAgICAgICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2dJZCA9XG4gICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlLm1lc3NhZ2VfaWQgfHwgYGJvb3RoX3JlcF9jYXJkc18ke0RhdGUubm93KCl9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZEVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgIF9pZDogbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jvb3RoX3JlcF9jYXJkcycsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYW5zd2VyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXJUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgICAgICAgICAgYm9vdGhSZXBDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkeCA9IHRoaXMuY2hhdExvZy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09PSBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbZXhpc3RpbmdJZHhdID0gY2FyZEVudHJ5O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGNhcmRFbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gRXJyb3IgcGFyc2luZyBnZXRfYm9vdGhfcmVwcmVzZW50YXRpdmVzIGNvbnRlbnQ6JyxcbiAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwdXNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2V2ZW50X2RldGFpbHMnKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgY29udmVyc2F0aW9uX2lkLFxuICAgICAgICAgICAgICBib3RfaWQsXG4gICAgICAgICAgICAgIG1lc3NhZ2VfaWQsXG4gICAgICAgICAgICAgIGFuc3dlcixcbiAgICAgICAgICAgICAgd2ViX3Jlc3VsdHMsXG4gICAgICAgICAgICAgIHNlYXJjaF9yZXN1bHRzLFxuICAgICAgICAgICAgICBncmFwaHMsXG4gICAgICAgICAgICAgIGV4ZWN1dGlvbl9ncmFwaHMsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgfSA9IG90aGVyRmllbGRzO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTb2NrZXQgQ2hhdF0gUHJvY2Vzc2luZyBPdGhlckZpZWxkcycsIHtcbiAgICAgICAgICAgICAgbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgY29udmVyc2F0aW9uX2lkLFxuICAgICAgICAgICAgICBib3RfaWQsXG4gICAgICAgICAgICAgIGhhc0Fuc3dlcjogISFhbnN3ZXIsXG4gICAgICAgICAgICAgIGFuc3dlckxlbmd0aDogYW5zd2VyPy5sZW5ndGgsXG4gICAgICAgICAgICAgIHdlYlJlc3VsdHNDb3VudDogd2ViX3Jlc3VsdHM/Lmxlbmd0aCA/PyAwLFxuICAgICAgICAgICAgICBzZWFyY2hSZXN1bHRzQ291bnQ6IHNlYXJjaF9yZXN1bHRzPy5sZW5ndGggPz8gMCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRDaGF0TWVzc2FnZSA9IHRoaXMuY2hhdExvZy5maW5kKFxuICAgICAgICAgICAgICAocCkgPT4gcC5faWQgPT0gbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRDaGF0TWVzc2FnZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBOZXcgQUkgbWVzc2FnZSBmcm9tIHNvY2tldCcsIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlX2lkLFxuICAgICAgICAgICAgICAgIGNoYXRMb2dMZW5ndGg6IHRoaXMuY2hhdExvZy5sZW5ndGgsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgICAgX2lkOiBtZXNzYWdlX2lkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGN1cnJlbnRDaGF0TWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIFVwZGF0aW5nIGV4aXN0aW5nIG1lc3NhZ2UnLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZmllbGRzIGJhc2VkIG9uIHRoZWlyIHByZXNlbmNlXG4gICAgICAgICAgICBpZiAoc2VhcmNoX3Jlc3VsdHMgJiYgQXJyYXkuaXNBcnJheShzZWFyY2hfcmVzdWx0cykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTb2NrZXQgQ2hhdF0gc2VhcmNoX3Jlc3VsdHMnLCBzZWFyY2hfcmVzdWx0cyk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5zZWFyY2hUZXJtcyA9IHNlYXJjaF9yZXN1bHRzO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh3ZWJfcmVzdWx0cyAmJiBBcnJheS5pc0FycmF5KHdlYl9yZXN1bHRzKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAnW1NvY2tldCBDaGF0XSB3ZWJfcmVzdWx0cycsXG4gICAgICAgICAgICAgICAgd2ViX3Jlc3VsdHM/Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICB3ZWJfcmVzdWx0cyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLnNvdXJjZXNMaXN0ID0gd2ViX3Jlc3VsdHM7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5kaXNwbGF5ZWRTb3VyY2VzID0gd2ViX3Jlc3VsdHM/LnNsaWNlKDAsIDMpOyAvLyBGaXJzdCAzIGNhcmRzXG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5yZW1haW5pbmdTb3VyY2VzID0gd2ViX3Jlc3VsdHM/LnNsaWNlKDMpOyAvLyBSZW1haW5pbmcgaXRlbXNcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYW5zd2VyKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIFJlY2VpdmVkIGFuc3dlciwgdXBkYXRpbmcgbWVzc2FnZScsIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlX2lkLFxuICAgICAgICAgICAgICAgIGFuc3dlckxlbmd0aDogYW5zd2VyPy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgYW5zd2VyUHJldmlldzogYW5zd2VyPy5zdWJzdHJpbmc/LigwLCAxMDApLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UubWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyKTtcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNPblRleHRhcmVhKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChncmFwaHMgJiYgQXJyYXkuaXNBcnJheShncmFwaHMpKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIGdyYXBocycsIGdyYXBocz8ubGVuZ3RoLCBncmFwaHMpO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UuZ3JhcGhzID0gZ3JhcGhzO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChleGVjdXRpb25fZ3JhcGhzICYmIEFycmF5LmlzQXJyYXkoZXhlY3V0aW9uX2dyYXBocykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gZXhlY3V0aW9uX2dyYXBocycsXG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uX2dyYXBocz8ubGVuZ3RoLFxuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbl9ncmFwaHMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5leGVjdXRpb25HcmFwaHMgPSBleGVjdXRpb25fZ3JhcGhzO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdWdnZXN0aW9ucyAmJiBBcnJheS5pc0FycmF5KHN1Z2dlc3Rpb25zKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAnW1NvY2tldCBDaGF0XSBzdWdnZXN0aW9ucycsXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM/Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLnJlbGF0ZWRMaXN0SXRlbXMgPSBzdWdnZXN0aW9ucztcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAvLyBQcm9jZXNzIG9ubGluZSBzZWFyY2ggdGVybXMgYXMgbmVlZGVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFkZCBhbnkgb3RoZXIgZmllbGRzIGFuZCB0aGVpciBwcm9jZXNzaW5nIGhlcmVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdPdGhlckZpZWxkcyBpcyBtaXNzaW5nIGluIHRoZSByZXNwb25zZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBmZXRjaGluZyBkYXRhIGZyb20gc29ja2V0JywgZXJyKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBpbml0aWFsaXplU29ja2V0QW5kTGlzdGVuKCkge31cbiAgaGFuZGxlRXZlbnQoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3dlYnJlc3VsdCc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYW5zd2VyJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdncmFwaCc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV2ZW50U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMudm9pY2VUcmFuc2NyaXB0U3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLnNvY2tldFNlcnZpY2UuZGlzY29ubmVjdFNvY2tldENvbm5lY3Rpb24oKTtcbiAgICAvL3RoaXMuc29ja2V0U2VydmljZS5jbG9zZSgpO1xuICB9XG4gIGNoYW5nZVRlbXBlcmF0dXJlKG5ld1RlbXBlcmF0dXJlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgdGhpcy50ZW1wZXJhdHVyZSA9IG5ld1RlbXBlcmF0dXJlO1xuICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaGl2ZWdwdC1jaGF0LWJvdC13cmFwcGVyJyk7XG4gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIHRoZW1lIGNsYXNzZXMgZnJvbSBib2R5XG4gICAgd3JhcHBlcj8uY2xhc3NMaXN0LnJlbW92ZSgnY3JlYXRpdmUnLCAnYmFsYW5jZWQnLCAncHJlY2lzZScpO1xuXG4gICAgc3dpdGNoIChuZXdUZW1wZXJhdHVyZSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICB3cmFwcGVyPy5jbGFzc0xpc3QuYWRkKCdjcmVhdGl2ZScpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgd3JhcHBlcj8uY2xhc3NMaXN0LmFkZCgnYmFsYW5jZWQnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHdyYXBwZXI/LmNsYXNzTGlzdC5hZGQoJ3ByZWNpc2UnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvblN0YXJ0QWdhaW4oKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xuICAgIHRoaXMuc2hvd1N0YXJ0QWdhaW4gPSBmYWxzZTtcbiAgICB0aGlzLmNoYXRMb2cgPSBbXTtcbiAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICB0eXBlOiAnYWknLFxuICAgICAgbWVzc2FnZTogdGhpcy5ncmVldGluZ01zZyxcblxuICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgIH0pO1xuICAgIHRoaXMuYXJjaGlldmVNZXNzYWdlcygpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYXJjaGlldmVNZXNzYWdlcygpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgIH0pO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2JvdC9jbGVhci1oaXN0b3J5LyR7dGhpcy5ib3RJZH0vJHt0aGlzLnVzZXJJZH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHRyaWdnZXJTdXBwb3J0KCkge1xuICAgIHRoaXMub3BlblN1cHBvcnQuZW1pdCgpO1xuICB9XG4gIGZldGNoQm90Q29uZmlnKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgIH0pO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2JvdHM/Ym90X2lkPSR7dGhpcy5ib3RJZH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwgeyBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYm90TmFtZSA9IHRoaXMuZ2V0VHJhbnNsYXRpb24ocmVzLk5hbWUpO1xuICAgICAgICB0aGlzLmJvdEljb24gPSByZXMuSWNvbjtcbiAgICAgICAgdGhpcy5ib3RTa2lsbHMgPSByZXM/LlNraWxscztcbiAgICAgICAgdGhpcy5ncmVldGluZ01zZyA9IHJlcy5HcmVldGluZ1xuICAgICAgICAgID8gKHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KHJlcy5HcmVldGluZykgYXMgYW55KVxuICAgICAgICAgIDogJyc7XG5cbiAgICAgICAgdGhpcy50aHVtYnNEb3duTWVzc2FnZXMgPSByZXM/Lk5lZ2F0aXZlUmVzcG9uc2VzPy5sZW5ndGhcbiAgICAgICAgICA/IHJlcy5OZWdhdGl2ZVJlc3BvbnNlc1xuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICB0aGlzLmdldFRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgICAgIGBXZSBhcmUgc29ycnkgd2UndmUgbm90IGJlZW4gYWJsZSB0byBhbnN3ZXIgeW91ciBxdWVzdGlvbmAsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdO1xuICAgICAgICB0aGlzLnF1aWNrUHJvbXB0cyA9IHJlcy5RdWlja1Byb21wdHM7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXRib3QgY29uZmlnOiAnLCBlcnJvcik7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgZmV0Y2hDaGF0SGlzdG9yeSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLmNvbnZlcnNhdGlvbktleSA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkodGhpcy5ib3RJZCwgZmFsc2UpO1xuICAgIHRoaXMuY29uU2Vzc2lvbktleSA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRTZXNzaW9uS2V5KFxuICAgICAgdGhpcy5ib3RJZCxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uS2V5fT9zZXNzaW9uX2lkPSR7dGhpcy5jb25TZXNzaW9uS2V5fWA7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICBhY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHVybCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3I8YW55PignZmV0Y2hDb252ZXJzYXRpb24nKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcjxUPihvcGVyYXRpb24gPSAnb3BlcmF0aW9uJywgcmVzdWx0PzogVCkge1xuICAgIHJldHVybiAoZXJyb3I6IGFueSk6IE9ic2VydmFibGU8VD4gPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgJHtvcGVyYXRpb259IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIG9mKHJlc3VsdCBhcyBUKTtcbiAgICB9O1xuICB9XG4gIC8vIGZldGNoQ2hhdEhpc3RvcnkoKSB7XG4gIC8vICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgLy8gICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgLy8gICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gIC8vICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gIC8vICAgfSk7XG4gIC8vICAgcmV0dXJuIHRoaXMuaHR0cFxuICAvLyAgICAgLmdldChgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9jb252ZXJzYXRpb25zLyR7dGhpcy5jb252ZXJzYXRpb25LZXl9YCwgeyBoZWFkZXJzIH0pXG4gIC8vICAgICAucGlwZShcbiAgLy8gICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAvLyAgICAgICAgIHJldHVybiBvZihyZXMpO1xuICAvLyAgICAgICB9KSxcbiAgLy8gICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXQgaGlzdG9yeTogJywgZXJyb3IpO1xuICAvLyAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAvLyAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgLy8gICAgICAgfSlcbiAgLy8gICAgICk7XG4gIC8vIH1cblxuICAvKiogUHVzaCBhIHN0YW5kYXJkIEFJIG1lc3NhZ2UgZnJvbSBoaXN0b3J5IChzb3VyY2VzLCBncmFwaHMsIGV0Yy4pLiBVc2VkIHdoZW4gbm90IGNvbnZlcnRpbmcgdG8gc2Vzc2lvbl9jYXJkcy4gKi9cbiAgcHJpdmF0ZSBwdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdDogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgc291cmNlc0xpc3QgPSBjaGF0LldlYkxpbmtzIHx8IFtdO1xuICAgIGNvbnN0IGRpc3BsYXllZFNvdXJjZXMgPSAoY2hhdC5XZWJMaW5rcyB8fCBbXSkuc2xpY2UoMCwgMyk7XG4gICAgY29uc3QgcmVtYWluaW5nU291cmNlcyA9IChjaGF0LldlYkxpbmtzIHx8IFtdKS5zbGljZSgzKTtcbiAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICB0eXBlOiAnYWknLFxuICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KSxcbiAgICAgIGV4ZWN1dGlvbkdyYXBoczogY2hhdC5FeGVjdXRpb25HcmFwaHMsXG4gICAgICBncmFwaHM6IGNoYXQuR3JhcGhzLFxuICAgICAgc2VhcmNoVGVybXM6IGNoYXQuU2VhcmNoVGVybXMsXG4gICAgICBzb3VyY2VzTGlzdDogc291cmNlc0xpc3QsXG4gICAgICBkaXNwbGF5ZWRTb3VyY2VzOiBkaXNwbGF5ZWRTb3VyY2VzLFxuICAgICAgcmVtYWluaW5nU291cmNlczogcmVtYWluaW5nU291cmNlcyxcbiAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgIH0pO1xuICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICB9XG5cbiAgbWFwQ2hhdEhpc3RvcnkoY2hhdHM6IGFueSkge1xuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICdhaScsXG4gICAgICBtZXNzYWdlOiB0aGlzLmdyZWV0aW5nTXNnLFxuICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgIH0pO1xuICAgIGlmIChjaGF0cyAmJiBjaGF0cz8uTWVzc2FnZXM/Lmxlbmd0aCkge1xuICAgICAgY2hhdHM/Lk1lc3NhZ2VzLmZvckVhY2goKGNoYXQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoY2hhdC5UeXBlID09ICd1c2VyJykge1xuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dCksXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIGNoYXQuSW5zZXJ0VGltZXN0YW1wKSxcbiAgICAgICAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICAgICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgICAgICAgICAgV29ya2Zsb3dFeGVjdXRpb25JZDogY2hhdC5Xb3JrZmxvd0V4ZWN1dGlvbklkLFxuICAgICAgICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhdC5UeXBlID09ICdhaScpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIEFJIG1lc3NhZ2UgY2FtZSBmcm9tIHNlc3Npb24gdG9vbHMsIHNob3cgc2Vzc2lvbiBjYXJkcyBpbnN0ZWFkIG9mIHBsYWluIHRleHRcbiAgICAgICAgICBjb25zdCB0b29sTmFtZSA9IGNoYXQudG9vbHJlc3VsdHM/LnRvb2xfbmFtZTtcbiAgICAgICAgICBjb25zdCBpc1Nlc3Npb25Ub29sID1cbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X2V2ZW50X3Nlc3Npb25zJyB8fFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfZXZlbnRfc2Vzc2lvbnNfdjInIHx8XG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9zZXNzaW9uc19ieV9pbnRlcmVzdCcgfHxcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X3Nlc3Npb25zX2J5X3RyYWNrJyB8fFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfc3BlYWtlcl9zZXNzaW9ucycgfHxcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X3VwY29taW5nX3Nlc3Npb25zJztcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc1Nlc3Npb25Ub29sICYmXG4gICAgICAgICAgICBjaGF0LnRvb2xyZXN1bHRzPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9IGNoYXQudG9vbHJlc3VsdHMudG9vbF9yZXN1bHQubWVzc2FnZXNbMF0uY29udGVudDtcbiAgICAgICAgICAgIGxldCBzZXNzaW9uczogYW55W10gPSBbXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgIHNlc3Npb25zID0gcGFyc2VkPy5zZXNzaW9ucyA/PyBbXTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgc2Vzc2lvbnMgPSB0aGlzLnBhcnNlU2Vzc2lvbkNvbnRlbnRWMihjb250ZW50U3RyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwU2Vzc2lvbnNUb0NhcmREYXRhKHNlc3Npb25zKTtcbiAgICAgICAgICAgIHRoaXMuZW5zdXJlU3BlYWtlcnNGb3JTZXNzaW9uQ2FyZHMobWFwcGVkKTtcbiAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2Vzc2lvbl9jYXJkcycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogY2hhdC5UZXh0XG4gICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dClcbiAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICAgICAgc2Vzc2lvbkNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9ldmVudF9hdHRlbmRlZXMnICYmXG4gICAgICAgICAgICBjaGF0LnRvb2xyZXN1bHRzPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBBSSBtZXNzYWdlIGNhbWUgZnJvbSBnZXRfZXZlbnRfYXR0ZW5kZWVzLCBzaG93IGF0dGVuZGVlIGNhcmRzIG9uIGluaXRpYWwgaGlzdG9yeSBsb2FkXG4gICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID0gY2hhdC50b29scmVzdWx0cy50b29sX3Jlc3VsdC5tZXNzYWdlc1swXS5jb250ZW50O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgY29uc3QgYXR0ZW5kZWVzID0gcGFyc2VkPy5hdHRlbmRlZXMgPz8gW107XG4gICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwQXR0ZW5kZWVzVG9DYXJkRGF0YShhdHRlbmRlZXMpO1xuICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ2F0dGVuZGVlX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoYXQuVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dClcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgICAgICAgYXR0ZW5kZWVDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9ldmVudF9zcGVha2VycycgJiZcbiAgICAgICAgICAgIGNoYXQudG9vbHJlc3VsdHM/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIEFJIG1lc3NhZ2UgY2FtZSBmcm9tIGdldF9ldmVudF9zcGVha2Vycywgc2hvdyBzcGVha2VyIGNhcmRzIG9uIGluaXRpYWwgaGlzdG9yeSBsb2FkXG4gICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID0gY2hhdC50b29scmVzdWx0cy50b29sX3Jlc3VsdC5tZXNzYWdlc1swXS5jb250ZW50O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgY29uc3Qgc3BlYWtlcnMgPSBwYXJzZWQ/LnNwZWFrZXJzID8/IHBhcnNlZD8uc3BlYWtlciA/PyBbXTtcbiAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBTcGVha2Vyc1RvQ2FyZERhdGEoc3BlYWtlcnMpO1xuICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3NwZWFrZXJfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hhdC5UZXh0XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICAgICAgICBzcGVha2VyQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfZXZlbnRfc3BvbnNvcnMnICYmXG4gICAgICAgICAgICBjaGF0LnRvb2xyZXN1bHRzPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBBSSBtZXNzYWdlIGNhbWUgZnJvbSBnZXRfZXZlbnRfc3BvbnNvcnMsIHNob3cgc3BvbnNvciBjYXJkcyBvbiBpbml0aWFsIGhpc3RvcnkgbG9hZFxuICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9IGNoYXQudG9vbHJlc3VsdHMudG9vbF9yZXN1bHQubWVzc2FnZXNbMF0uY29udGVudDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgIGNvbnN0IHNwb25zb3JzID0gcGFyc2VkPy5zcG9uc29ycyA/PyBbXTtcbiAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBTcG9uc29yc1RvQ2FyZERhdGEoc3BvbnNvcnMpO1xuICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3Nwb25zb3JfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hhdC5UZXh0XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICAgICAgICBzcG9uc29yQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfZXZlbnRfYm9vdGhzJyAmJlxuICAgICAgICAgICAgY2hhdC50b29scmVzdWx0cz8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgQUkgbWVzc2FnZSBjYW1lIGZyb20gZ2V0X2V2ZW50X2Jvb3Rocywgc2hvdyBib290aCBjYXJkcyB1c2luZyBzcG9uc29yIGNhcmQgZGVzaWduXG4gICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID0gY2hhdC50b29scmVzdWx0cy50b29sX3Jlc3VsdC5tZXNzYWdlc1swXS5jb250ZW50O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgY29uc3QgYm9vdGhzID0gcGFyc2VkPy5ib290aHMgPz8gW107XG4gICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwQm9vdGhzVG9DYXJkRGF0YShib290aHMpO1xuICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3Nwb25zb3JfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hhdC5UZXh0XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICAgICAgICBzcG9uc29yQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfYm9vdGhfcmVwcmVzZW50YXRpdmVzJyAmJlxuICAgICAgICAgICAgY2hhdC50b29scmVzdWx0cz8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgQUkgbWVzc2FnZSBjYW1lIGZyb20gZ2V0X2Jvb3RoX3JlcHJlc2VudGF0aXZlcywgc2hvdyBib290aCByZXAgY2FyZHMgKGF0dGVuZGVlIGRlc2lnbilcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPSBjaGF0LnRvb2xyZXN1bHRzLnRvb2xfcmVzdWx0Lm1lc3NhZ2VzWzBdLmNvbnRlbnQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICBjb25zdCByZXByZXNlbnRhdGl2ZXMgPSBwYXJzZWQ/LnJlcHJlc2VudGF0aXZlcyA/PyBbXTtcbiAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBCb290aFJlcHNUb0NhcmREYXRhKHJlcHJlc2VudGF0aXZlcyk7XG4gICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIF9pZDogY2hhdC5faWQsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnYm9vdGhfcmVwX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoYXQuVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dClcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgICAgICAgYm9vdGhSZXBDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5zaG93U3RhcnRBZ2FpbiA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb2Nlc3NNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgIShtZXNzYWdlPy5sZW5ndGggPiAwKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKCdoZXJlIGlzIG15IG1lc3NhZ2UnKVxuICAgIC8vIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UudHJpbSgpO1xuXG4gICAgY29uc3QgbWFya2Rvd25MaW5rUmVnZXggPSAvXFxbKFteW10rKV1cXCgoW14pXSspXFwpL2c7XG4gICAgY29uc3QgdXJsUmVnZXggPSAvKD88IWhyZWY9XCIpXFxiaHR0cHM/OlxcL1xcL1xcUysoPzwhWy4sXSkvZ2k7XG5cbiAgICBpZiAobWFya2Rvd25MaW5rUmVnZXgudGVzdChtZXNzYWdlKSkge1xuICAgICAgY29uc3QgaHRtbCA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAgICAgbWFya2Rvd25MaW5rUmVnZXgsXG4gICAgICAgICc8YSBocmVmPVwiJDJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4kMTwvYT4nLFxuICAgICAgKTtcbiAgICAgIC8vY29uc29sZS5sb2coJ1Nhbml0aXplZCBtZXNzYWdlOiAnLCBtZXNzYWdlKTtcbiAgICAgIHJldHVybiB0aGlzLnNhbml0aXplSHRtbChodG1sKTtcbiAgICB9XG5cbiAgICBpZiAodXJsUmVnZXgudGVzdChtZXNzYWdlKSkge1xuICAgICAgY29uc3QgaHRtbCA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAgICAgdXJsUmVnZXgsXG4gICAgICAgICc8YSBocmVmPVwiJCZcIiB0YXJnZXQ9XCJfYmxhbmtcIj4kJjwvYT4nLFxuICAgICAgKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdTYW5pdGl6ZWQgbWVzc2FnZTogJywgbWVzc2FnZSk7XG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZUh0bWwoaHRtbCk7XG4gICAgfVxuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvKD86XFxyXFxufFxccnxcXG4pL2csICc8YnI+Jyk7XG5cbiAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9cXCpcXCooLio/KVxcKlxcKi9nLCAnPHN0cm9uZz4kMTwvc3Ryb25nPicpO1xuICAgIC8vIENvbnZlcnQgTWFya2Rvd24gaGVhZGVycyB0byBIVE1MIGhlYWRlcnNcbiAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9eKCN7MSw2fSlcXHMrKC4qKSQvZ20sIChtYXRjaCwgaGFzaGVzLCB0ZXh0KSA9PiB7XG4gICAgICBjb25zdCBsZXZlbCA9IGhhc2hlcy5sZW5ndGg7XG4gICAgICByZXR1cm4gYDxoJHtsZXZlbH0+JHt0ZXh0fTwvaCR7bGV2ZWx9PmA7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICBjb25zdCBzYW5pdGl6ZWRNZXNzYWdlID0gdGhpcy5zYW5pdGl6ZUh0bWwobWVzc2FnZSk7XG4gICAgcmV0dXJuIHNhbml0aXplZE1lc3NhZ2U7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgY29uc3QgZmVlZGJhY2tMaW5rcyA9XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZmVlZGJhY2stbGluaycpO1xuICAgIGZlZWRiYWNrTGlua3MuZm9yRWFjaCgobGluazogYW55KSA9PiB7XG4gICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdjbGljaycsXG4gICAgICAgIHRoaXMub25GZWVkYmFja0NsaWNrLmJpbmQodGhpcywgJ3plbmRlc2snKSxcbiAgICAgICk7XG4gICAgfSk7XG4gICAgLy8gaWYgKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5mZWVkYmFjay1saW5rJykpIHtcbiAgICAvLyAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgLy8gICAgIC5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2stbGluaycpXG4gICAgLy8gICAgIC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25GZWVkYmFja0NsaWNrLmJpbmQodGhpcywgJ3plbmRlc2snKSk7XG4gICAgLy8gfVxuICB9XG5cbiAgc2FuaXRpemVIdG1sKGh0bWw6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaHRtbCk7XG4gIH1cblxuICBvbkZlZWRiYWNrQ2xpY2sodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZmVlZGJhY2tFdmVudC5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIG9uQ2xvc2UoKSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmJvZHlPdmVyZmxvd0NsYXNzKTtcbiAgICB0aGlzLm9uQ2xvc2VFdmVudC5lbWl0KCk7XG4gIH1cblxuICBzZW5kTWVzc2FnZVdpdGhUaWxlKHByb21wdDogc3RyaW5nKSB7XG4gICAgdGhpcy5pbnB1dCA9IHByb21wdDtcbiAgICB0aGlzLmZldGNoRGF0YSgpO1xuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgfVxuICBpc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgZmV0Y2hEYXRhKG1zZyA9IG51bGwpIHtcbiAgICB0aGlzLmlucHV0ID0gbXNnIHx8IHRoaXMuaW5wdXQ/LnRyaW0oKTtcbiAgICB0aGlzLm1zZyA9IHRoaXMuaW5wdXQ7XG4gICAgaWYgKCF0aGlzLmlucHV0IHx8IHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoYXRTb2NrZXQoKTtcblxuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KHRoaXMuaW5wdXQpLFxuICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGV4dGFyZWEgPSB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9ICdoaWRkZW4nOyAvLyBSZXNldCB0aGUgaGVpZ2h0XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSBgNjJweGA7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLmFpUmVzcG9uc2UgPSAnJztcbiAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IHRydWU7XG5cbiAgICB0aGlzLm1ha2VBc2tSZXF1ZXN0KHRoaXMuaW5wdXQsIHRoaXMuYWdlbnRzLCB0aGlzLmNvbnZlcnNhdGlvbktleSk7XG4gIH1cbiAgZmV0Y2hEYXRhRm9yKG1zZywgY2hhdCkge1xuICAgIGNvbnN0IGlucHV0TXNnID0gbXNnPy50cmltKCk7XG4gICAgaWYgKCFpbnB1dE1zZyB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDaGF0U29ja2V0KCk7XG4gICAgdHJ5IHtcbiAgICAgIGNoYXQucmVsYXRlZExpc3RJdGVtcyA9IFtdO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGlucHV0TXNnKSxcbiAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLmFpUmVzcG9uc2UgPSAnJztcbiAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IHRydWU7XG5cbiAgICB0aGlzLm1ha2VBc2tSZXF1ZXN0KGlucHV0TXNnLCB0aGlzLmFnZW50cywgdGhpcy5jb252ZXJzYXRpb25LZXksIG1zZywgY2hhdCk7XG4gIH1cbiAgZmV0Y2hTbWFsbFRhbGsoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2JvdC9zbWFsbC10YWxrLyR7dGhpcy5ib3RJZH0vJHt0aGlzLnVzZXJJZH1gO1xuXG4gICAgdGhpcy5odHRwXG4gICAgICAuZ2V0PHsgc21hbGxUYWxrOiBzdHJpbmcgfT4odXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgZmV0Y2hpbmcgc21hbGwgdGFsazonLCBlcnJvcik7XG5cbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2Uuc21hbGxUYWxrKSB7XG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2UocmVzcG9uc2Uuc21hbGxUYWxrKSxcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgIGlzRmVlZGJhY2tNc2c6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDI7XG4gICAgICAgICAgLy8gdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHJlYWRBbGxDaHVua3MgPSAoc3RyZWFtOiBhbnkpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgY29uc3QgYWxsU3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICByZWFkZXIuY2xvc2VkLmNhdGNoKChlcnI6IGFueSkgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZWFkaW5nIHN0cmVhbTogJywgZXJyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgc3RhcnQ6IChjb250cm9sbGVyKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1bXAoY29udHJvbGxlciwgcmVhZGVyLCBhbGxTdWdnZXN0aW9ucyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuXG4gIHB1bXAoY29udHJvbGxlcjogYW55LCByZWFkZXI6IGFueSwgYWxsU3VnZ2VzdGlvbnM6IHN0cmluZ1tdKSB7XG4gICAgcmVhZGVyLnJlYWQoKS50aGVuKCh7IGRvbmUsIHZhbHVlIH06IGFueSkgPT4ge1xuICAgICAgY29uc3QgbGFzdEl0ZW0gPSB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBsYXN0SXRlbS5tZXNzYWdlID0gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkobGFzdEl0ZW0ubWVzc2FnZSk7XG4gICAgICAgIHRoaXMuY2hhdExvZy5wb3AoKTtcbiAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2gobGFzdEl0ZW0pO1xuICAgICAgICBpZiAoYWxsU3VnZ2VzdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWdnZXN0aW9ucycsXG4gICAgICAgICAgICBzdWdnZXN0aW9uczogYWxsU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgIC8vIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuc2hvd1N0YXJ0QWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgIHRoaXMuZmV0Y2hTbWFsbFRhbGsoKTtcbiAgICAgICAgLy8gfSwxMDAwKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBkZWNvZGVkQ2h1bmsgPSB0aGlzLmRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuYWlSZXNwb25zZSArPSBkZWNvZGVkQ2h1bms7XG4gICAgICBpZiAobGFzdEl0ZW0udHlwZSA9PT0gJ2FpJykge1xuICAgICAgICBjb25zdCBzdWdnZXN0aW9uc01hdGNoID0gdGhpcy5haVJlc3BvbnNlLm1hdGNoKC88c3VnPiguKj8pPFxcL3N1Zz4vZyk7XG4gICAgICAgIGlmIChzdWdnZXN0aW9uc01hdGNoKSB7XG4gICAgICAgICAgc3VnZ2VzdGlvbnNNYXRjaC5mb3JFYWNoKChtYXRjaCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5haVJlc3BvbnNlID0gdGhpcy5haVJlc3BvbnNlLnJlcGxhY2UobWF0Y2gsICcnKTtcbiAgICAgICAgICAgIGFsbFN1Z2dlc3Rpb25zLnB1c2gobWF0Y2g/LnJlcGxhY2UoLzxcXC8/c3VnPi9nLCAnJykpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdEl0ZW0ubWVzc2FnZSA9IHRoaXMuYWlSZXNwb25zZTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuXG4gICAgICAgIGxldCBhaUZvcm1hdHRlZERhdGE6IGFueTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdwYXJzaW5nIGpzb24gJyk7XG4gICAgICAgICAgYWlGb3JtYXR0ZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnBhcnNlKHRoaXMuYWlSZXNwb25zZSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdwYXJzaW5nIGpzb24gMicpO1xuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhID0gSlNPTi5wYXJzZSh0aGlzLmFpUmVzcG9uc2UpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygncGFyc2luZyBqc29uIGRvbmUnKTtcblxuICAgICAgICBpZiAoYWlGb3JtYXR0ZWREYXRhICYmIGFpRm9ybWF0dGVkRGF0YT8uc2VjdGlvbl9pZD8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09ICdjb21wYW55X3NlYXJjaCcgfHxcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09ICd1c2VyX3NlYXJjaCcgfHxcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09ICdpbmR1c3RyeV9jb21wYW55X3NlYXJjaCdcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hNeUNvbm5lY3Rpb25zKCkuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmZldGNoUGVuZGluZ1JlcXVlc3RzKCkuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09IHRoaXMubXlVcGNvbWluZ1Nlc3Npb25BY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBzcGVha2VySWRzID0gW107XG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEuY29udGVudD8uZm9yRWFjaCgoc2Vzc2lvbikgPT4ge1xuICAgICAgICAgICAgICBzcGVha2VySWRzID0gWy4uLnNwZWFrZXJJZHMsIC4uLnNlc3Npb24uc3BlYWtlcnNdO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChzcGVha2VySWRzPy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICB0aGlzLmdldFNwZWFrZXJzQnlTdGFmZklkcyhzcGVha2VySWRzKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSB0aGlzLmFkZFRvTXlBZ2VuZGFBY3Rpb24gJiZcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5jb250ZW50Py5sZW5ndGggPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5QYWdlLm5leHQoe1xuICAgICAgICAgICAgICBzZWN0aW9uSWQ6IGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkLFxuICAgICAgICAgICAgICBzZXNzaW9uSWRzOiBhaUZvcm1hdHRlZERhdGEuY29udGVudCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSB0aGlzLmNvbm5lY3RPckZvbGxvd0FjdGlvbikge1xuICAgICAgICAgICAgbGV0IHVzZXJzTGVuID0gYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQ/Lmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh1c2Vyc0xlbiA+IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5vcGVuUGFnZS5uZXh0KHtcbiAgICAgICAgICAgICAgICBzZWN0aW9uSWQ6ICdvcGVuX25ldHdvcmtpbmdfZHJhd2VyJyxcbiAgICAgICAgICAgICAgICBzZWFyY2g6IGFpRm9ybWF0dGVkRGF0YS5jb250ZW50LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlcnNMZW4gPT0gMSkge1xuICAgICAgICAgICAgICB0aGlzLm9wZW5QYWdlLm5leHQoe1xuICAgICAgICAgICAgICAgIHNlY3Rpb25JZDogYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQsXG4gICAgICAgICAgICAgICAgY29ubmV0VXNlcklkczogW2FpRm9ybWF0dGVkRGF0YS5jb250ZW50WzBdLnVzZXJJZF0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEuaXNfb3Blbl9wYWdlID09ICd0cnVlJykge1xuICAgICAgICAgICAgdGhpcy5vcGVuUGFnZS5uZXh0KHtcbiAgICAgICAgICAgICAgc2VjdGlvbklkOiBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCxcbiAgICAgICAgICAgICAgc2VhcmNoOiBhaUZvcm1hdHRlZERhdGEuY29udGVudCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pc01vYmlsZUJyb3dzZXIoKSkge1xuICAgICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEubWVzc2FnZSArPVxuICAgICAgICAgICAgICAgICdcXG5cXG4nICsgJzxhIGlkPVwiY2xvc2VCb3ROb3dcIj5DbGljayBIZXJlPC9hPiB0byBzZWUgcmVzdWx0cy4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgICAgICBtZXNzYWdlOiBhaUZvcm1hdHRlZERhdGEubWVzc2FnZSxcbiAgICAgICAgICAgIGFjdGlvbjogYWlGb3JtYXR0ZWREYXRhLFxuICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVCcm93c2VyKCkpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmFkZENsb3NlQm90Q2xpY2tFdmVudCgpO1xuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmFpUmVzcG9uc2UgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5haVJlc3BvbnNlLFxuICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG5cbiAgICAgIC8vIEVucXVldWUgdGhlIG5leHQgZGF0YSBjaHVuayBpbnRvIG91ciB0YXJnZXQgc3RyZWFtXG4gICAgICBjb250cm9sbGVyLmVucXVldWUodmFsdWUpO1xuICAgICAgdGhpcy5wdW1wKGNvbnRyb2xsZXIsIHJlYWRlciwgYWxsU3VnZ2VzdGlvbnMpO1xuICAgIH0pO1xuICB9XG5cbiAgc3VibWl0RmVlZGJhY2soZmxhZzogYm9vbGVhbiwgbWVzc2FnZSkge1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mZWVkYmFja0RvbmUgPSB0cnVlO1xuICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IG51bGw7XG4gICAgY29uc3QgY29udmVyc2F0aW9uX2lkID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdldEtleSh0aGlzLmJvdElkKTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkFHRU5UU19BUEl9L0NvbnZlcnNhdGlvbi9jb1BpbG90LyR7dGhpcy5ib3RJZH0vY29udmVyc2F0aW9uLyR7Y29udmVyc2F0aW9uX2lkfS9oZWxwZnVsLXJlc3BvbnNlYDtcbiAgICBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICBhcGlLZXk6ICdDb252ZXJzYXRpb25fV0l6L3FBbStFRW1mT2tGYVVBL3dlQT09JyxcbiAgICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgbWVzc2FnZUlkOiBtZXNzYWdlLl9pZCwgaXNIZWxwZnVsOiBmbGFnIH0pLFxuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKGZsYWcpIHtcbiAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgIHRoaXMudGh1bWJzVXBNZXNzYWdlIHx8XG4gICAgICAgICAgICB0aGlzLmdldFRyYW5zbGF0aW9uKCdNYXkgSSBhc3Npc3QgeW91IHdpdGggYW55dGhpbmcgZWxzZScpLFxuICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICBpc0ZlZWRiYWNrTXNnOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLmZlZWRiYWNrRG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZShcbiAgICAgICAgICB0aGlzLnRodW1ic0Rvd25NZXNzYWdlc1t0aGlzLnRodW1ic0Rvd25Nc2dJbmRleF0sXG4gICAgICAgICksXG4gICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgaXNGZWVkYmFja01zZzogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy50aHVtYnNEb3duTXNnSW5kZXggPVxuICAgICAgICAodGhpcy50aHVtYnNEb3duTXNnSW5kZXggKyAxKSAlIHRoaXMudGh1bWJzRG93bk1lc3NhZ2VzLmxlbmd0aDtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1cHBvcnRMaW5rODgnKTtcbiAgICAgICAgaWYgKHN1cHBvcnRMaW5rKSB7XG4gICAgICAgICAgc3VwcG9ydExpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnRyaWdnZXJTdXBwb3J0LmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgICB9LCAyMDApO1xuICAgICAgdGhpcy5mZWVkYmFja0RvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IG51bGw7XG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgYmVoYXZpb3IgKG5ldyBsaW5lKVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIC8vIENhbGwgeW91ciBzdWJtaXQgZnVuY3Rpb25cbiAgICAgIHRoaXMuaGFuZGxlU3VibWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlU3VibWl0KGV2ZW50KSB7XG4gICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gIH1cblxuICAvKiogSW5kZXggb2YgdGhlIGxhc3QgQUkgbWVzc2FnZSBpbiBjaGF0TG9nOyAtMSBpZiBub25lLiAqL1xuICBnZXQgbGFzdEFpTWVzc2FnZUluZGV4KCk6IG51bWJlciB7XG4gICAgZm9yIChsZXQgaiA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgaWYgKHRoaXMuY2hhdExvZ1tqXT8udHlwZSA9PT0gJ2FpJykgcmV0dXJuIGo7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIGhhbmRsZVVwQ2xpY2soaWR4OiBhbnkpIHtcbiAgICBpZiAodGhpcy5mZWVkYmFja0RvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN1Ym1pdEZlZWRiYWNrKHRydWUsIHRoaXMuY2hhdExvZ1tpZHhdKTtcbiAgICB0aGlzLmNoYXRMb2dbaWR4XS5saWtlZCA9ICF0aGlzLmNoYXRMb2dbaWR4XS5saWtlZDtcblxuICAgIGlmICh0aGlzLmNoYXRMb2dbaWR4XS51bmxpa2VkKSB7XG4gICAgICB0aGlzLmNoYXRMb2dbaWR4XS51bmxpa2VkID0gIXRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBoYW5kbGVEb3duQ2xpY2soaWR4OiBhbnkpIHtcbiAgICBpZiAodGhpcy5mZWVkYmFja0RvbmUpIHJldHVybjtcbiAgICB0aGlzLnN1Ym1pdEZlZWRiYWNrKGZhbHNlLCB0aGlzLmNoYXRMb2dbaWR4XSk7XG4gICAgdGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZCA9ICF0aGlzLmNoYXRMb2dbaWR4XS51bmxpa2VkO1xuICAgIGlmICh0aGlzLmNoYXRMb2dbaWR4XS5saWtlZClcbiAgICAgIHRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkID0gIXRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkO1xuICB9XG4gIC8vIGhhbmRsZUNvcHlDbGljayhpbmRleDogYW55KSB7XG4gIC8vICAgLy8gQ29weSB0aGUgbWVzc2FnZSB0byB0aGUgY2xpcGJvYXJkXG4gIC8vICAgY29uc3QgY29udGVudFRvQ29weSA9IHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZTtcbiAgLy8gICBjb25zb2xlLmxvZygnY29udGVudFRvQ29weScpO1xuICAvLyAgIGNvbnNvbGUubG9nKGNvbnRlbnRUb0NvcHkpO1xuICAvLyAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGNvbnRlbnRUb0NvcHkpLnRoZW4oKCkgPT4ge1xuICAvLyAgICAgLy8gSW5kaWNhdGUgdGhhdCB0aGUgbWVzc2FnZSB3YXMgY29waWVkXG4gIC8vICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmNvcGllZCA9IHRydWU7XG4gIC8vICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgICAvLyBSZXNldCB0aGUgY29waWVkIHN0YXRlIGFmdGVyIGEgZGVsYXlcbiAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmNvcGllZCA9IGZhbHNlO1xuICAvLyAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgICB9LCAyMDAwKTsgLy8gUmVzZXQgYWZ0ZXIgMiBzZWNvbmRzXG4gIC8vICAgfSk7XG4gIC8vIH1cbiAgY29weVRleHQoaWQsIGluZGV4KSB7XG4gICAgLy8gR2V0IHRoZSB0ZXh0IGVsZW1lbnRcbiAgICB2YXIgdGV4dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cbiAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgdGV4dGFyZWEgZWxlbWVudCB0byBjb3B5IHRoZSB0ZXh0XG4gICAgdmFyIHRlbXBUZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgdGVtcFRleHRBcmVhLnZhbHVlID0gdGV4dEVsZW1lbnQuaW5uZXJUZXh0O1xuXG4gICAgLy8gQXBwZW5kIHRoZSB0ZXh0YXJlYSB0byB0aGUgYm9keSAobmVjZXNzYXJ5IGZvciB0aGUgZXhlY0NvbW1hbmQgdG8gd29yaylcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXBUZXh0QXJlYSk7XG5cbiAgICAvLyBTZWxlY3QgdGhlIHRleHQgaW5zaWRlIHRoZSB0ZXh0YXJlYVxuICAgIHRlbXBUZXh0QXJlYS5zZWxlY3QoKTtcblxuICAgIC8vIENvcHkgdGhlIHRleHQgdG8gdGhlIGNsaXBib2FyZFxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG5cbiAgICAvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSB0ZXh0YXJlYVxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVtcFRleHRBcmVhKTtcblxuICAgIC8vIE9wdGlvbmFsbHksIHlvdSBjYW4gYWxlcnQgdGhlIHVzZXIgb3IgY2hhbmdlIHRoZSBidXR0b24gdGV4dCB0byBpbmRpY2F0ZSB0aGUgY29weSB3YXMgc3VjY2Vzc2Z1bFxuICAgIC8vIGFsZXJ0KCdUZXh0IGNvcGllZCB0byBjbGlwYm9hcmQhJyk7XG5cbiAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmNvcGllZCA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIFJlc2V0IHRoZSBjb3BpZWQgc3RhdGUgYWZ0ZXIgYSBkZWxheVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5jb3BpZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAyMDAwKTsgLy8gUmVzZXQgYWZ0ZXIgMiBzZWNvbmRzXG4gIH1cbiAgaGFuZGxlQ29weUNsaWNrKGluZGV4OiBhbnkpIHtcbiAgICAvLyBDb3B5IHRoZSBtZXNzYWdlIHRvIHRoZSBjbGlwYm9hcmRcbiAgICBjb25zdCBjb250ZW50VG9Db3B5ID0gdGhpcy5jaGF0TG9nW2luZGV4XS5tZXNzYWdlO1xuICAgIGNvbnN0IHJlc3V0bHQgPSB0aGlzLmNvcHlUZXh0KCdtZXNzYWdlVGV4dF8nICsgaW5kZXgsIGluZGV4KTtcbiAgfVxuXG4gIHNhbml0aXplSFRNTChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgJ3RleHQvaHRtbCcpO1xuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IGRvY3VtZW50IGZyYWdtZW50IHRvIGhvbGQgdGhlIHNpbXBsaWZpZWQgY29udGVudFxuICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgLy8gQXBwZW5kIHRoZSBjaGlsZHJlbiBvZiB0aGUgYm9keSBvZiB0aGUgcGFyc2VkIGRvY3VtZW50IHRvIHRoZSBmcmFnbWVudFxuICAgIEFycmF5LmZyb20oZG9jLmJvZHkuY2hpbGROb2RlcykuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQobm9kZS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IGRpdiBlbGVtZW50IHRvIGhvbGQgdGhlIHNpbXBsaWZpZWQgSFRNTFxuICAgIGNvbnN0IHNpbXBsaWZpZWREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBzaW1wbGlmaWVkRGl2LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxuICAgIC8vIFJlbW92ZSBjb21wbGV4IHRhZ3Mgb3IgYXR0cmlidXRlcyBhcyBuZWVkZWRcbiAgICAvLyBFeGFtcGxlOiByZW1vdmUgc2NyaXB0c1xuICAgIHNpbXBsaWZpZWREaXZcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHQnKVxuICAgICAgLmZvckVhY2goKHNjcmlwdCkgPT4gc2NyaXB0LnJlbW92ZSgpKTtcblxuICAgIC8vIFJldHVybiB0aGUgc2ltcGxpZmllZCBIVE1MIGFzIGEgc3RyaW5nXG4gICAgcmV0dXJuIHNpbXBsaWZpZWREaXYuaW5uZXJIVE1MO1xuICB9XG5cbiAgY3VycmVudE1lc3NhZ2VGb3JFZGl0b3I6IGFueSA9ICcnO1xuICBjdXJyZW50SW5kZXhGb3JFZGl0b3I6IGFueSA9IC0xO1xuICBoYW5kbGVFZGl0b3JDbGljayhpbmRleDogYW55KSB7XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4Rm9yRWRpdG9yID09IC0xKSB7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleEZvckVkaXRvciA9IGluZGV4O1xuICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciA9IHRoaXMuc2FuaXRpemVIVE1MKFxuICAgICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLm1lc3NhZ2UsXG4gICAgICApO1xuICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciA9IHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IucmVwbGFjZShcbiAgICAgICAgLy8gJ1NhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6JyxcbiAgICAgICAgJycsXG4gICAgICApO1xuXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleEZvckVkaXRvciA9PSBpbmRleCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yICs9IHRoaXMuc2FuaXRpemVIVE1MKFxuICAgICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciA9IHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IucmVwbGFjZShcbiAgICAgICAgICAvLyAnU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzonLFxuICAgICAgICAgICcnLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1cnJlbnRJbmRleEZvckVkaXRvciA9IGluZGV4O1xuICAgICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yID0gdGhpcy5zYW5pdGl6ZUhUTUwoXG4gICAgICAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5tZXNzYWdlLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yID0gdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvci5yZXBsYWNlKFxuICAgICAgICAgIC8vICdTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOicsXG4gICAgICAgICAgJycsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaGF0TG9nW2luZGV4XS5pc0VkaXRvciA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIFJlc2V0IHRoZSBjb3BpZWQgc3RhdGUgYWZ0ZXIgYSBkZWxheVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5pc0VkaXRvciA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDIwMDApOyAvLyBSZXNldCBhZnRlciAyIHNlY29uZHNcbiAgICB0aGlzLmVkaXRvcnNEcmF3ZXIub3BlbigpO1xuICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RjbG9zZXBsYXlncm91bmRidXR0b24nKTtcbiAgICBpZiAoYnV0dG9uKSB7XG4gICAgICBidXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIHNjcm9sbFRvQm90dG9tKCkge1xuICAgIGlmICghdGhpcy5hdXRvU2Nyb2xsT25OZXdNZXNzYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBjb3VudGVyID0gMDtcbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuY2hhdE1haW4ubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgICB0aGlzLmNoYXRNYWluLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgaWYgKGNvdW50ZXIrKyA+IDUpIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgIH0sIDUpO1xuICB9XG5cbiAgZm9jdXNPblRleHRhcmVhKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubXlJbnB1dCAmJiB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sIDEwMCk7XG4gIH1cblxuICBoYW5kbGVBY3Rpb24oYWN0aW9uOiBhbnkpIHtcbiAgICBjb25zb2xlLmluZm8oJ2luY29taW5nIGFjdGlvbiBmcm9tIHRoZSBjaGF0Ym90IEFJJyk7XG4gICAgY29uc29sZS5pbmZvKGFjdGlvbik7XG5cbiAgICBpZiAoYWN0aW9uPy5jb250ZW50KSB7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIENoZWNrIGlmIHRoZSBkcmF3ZXIgaXMgaW5pdGlhbGx5IG9wZW4gYW5kIGFwcGx5IG92ZXJmbG93IGhpZGRlbiB0byBib2R5IGlmIHNvXG4gICAgaWYgKHRoaXMuZHJhd2VyLm9wZW5lZCkge1xuICAgICAgdGhpcy5zZXRCb2R5T3ZlcmZsb3coKTtcbiAgICB9XG5cbiAgICAvLyBMaXN0ZW4gdG8gY2hhbmdlcyBpbiB0aGUgZHJhd2VyIGJlaW5nIG9wZW5lZCBvciBjbG9zZWRcbiAgICB0aGlzLmRyYXdlci5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKChvcGVuZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgdGhpcy5zZXRCb2R5T3ZlcmZsb3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQm9keU92ZXJmbG93KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmRyYXdlci5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKChvcGVuZWQpID0+IHtcbiAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubXlJbnB1dCAmJiB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5teUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTsgLy8gRm9jdXMgb24gdGhlIHRleHRhcmVhXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Qm9keU92ZXJmbG93KCkge1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5ib2R5T3ZlcmZsb3dDbGFzcyk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUJvZHlPdmVyZmxvdygpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIHRoaXMuYm9keU92ZXJmbG93Q2xhc3MpO1xuICB9XG5cbiAgZ2V0U3BlYWtlcnNCeVN0YWZmSWRzKGlkczogYW55W10pOiBPYnNlcnZhYmxlPGFueVtdIHwgbnVsbD4ge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuVVNFUlNfQVBJfS9ldmVudHMvJHt0aGlzLmV2ZW50SWR9L3VzZXJzL2dldC1ieS1zdGFmZi1pZHNgO1xuICAgIGNvbnN0IGNsZWFuSWRzID0gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQoKGlkcyB8fCBbXSkubWFwKCh4KSA9PiBTdHJpbmcoeCA/PyAnJykudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikpLFxuICAgICk7XG4gICAgaWYgKGNsZWFuSWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG9mKG51bGwpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIGFwaUtleTogdGhpcy5hdXRvZ2VuS2V5LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnlbXT4odXJsLCBjbGVhbklkcywgeyBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICB0YXAoKGRhdGE6IGFueVtdKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpICYmIGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGRhdGEuZm9yRWFjaCgoc3BlYWtlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBTdHJpbmcoc3BlYWtlcj8uaWQgPz8gJycpLnRyaW0oKTtcbiAgICAgICAgICAgIGlmIChpZCkgdGhpcy5zcGVha2Vyc1tpZF0gPSBzcGVha2VyO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBzcGVha2VyczonLCBlcnIpO1xuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcGVyZm9ybVNlc3Npb25BY3Rpb24oc2Vzc2lvbklkLCBhY3Rpb24pIHtcbiAgICB0aGlzLnNlc3Npb25BY3Rpb25zLm5leHQoe1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgYWN0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgYWRkQ2xvc2VCb3RDbGlja0V2ZW50KCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjY2xvc2VCb3ROb3cnKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oZWxlbWVudCwgJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlQm90Lm5leHQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlzTW9iaWxlQnJvd3NlcigpIHtcbiAgICByZXR1cm4gL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KFxuICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudCxcbiAgICApO1xuICB9XG5cbiAgY29ubmVjdFRvVXNlcih1c2VySWQpIHtcbiAgICB0aGlzLmNvbm5lY3RXaXRoVXNlci5lbWl0KHtcbiAgICAgIGNvbm5lY3Q6ICF0aGlzLmNhbkRpc2Nvbm5lY3QodXNlcklkKSxcbiAgICAgIHVzZXJJZCxcbiAgICB9KTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mZXRjaE15Q29ubmVjdGlvbnMoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5mZXRjaFBlbmRpbmdSZXF1ZXN0cygpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHNjaGVkdWxlTWVldGluZ1dpdGhVc2VyKHVzZXIpIHtcbiAgICB0aGlzLnNjaGVkdWxlTWVldGluZy5lbWl0KHVzZXIpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGdpdmVuIHVzZXJJZCBoYXMgYSBwZW5kaW5nIGNvbm5lY3Rpb24gcmVxdWVzdCBzZW50IChzaG93IFwiUmVxdWVzdCBTZW50XCIgZGlzYWJsZWQpLiAqL1xuICBjaGVja1BlbmRpbmdTZW50UmVxdWVzdCh1c2VySWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICBpZiAodXNlcklkID09IG51bGwgfHwgdXNlcklkID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdTZW50UmVxdWVzdFVzZXJJZHM/Lmxlbmd0aFxuICAgICAgPyB0aGlzLnBlbmRpbmdTZW50UmVxdWVzdFVzZXJJZHNcbiAgICAgIDogdGhpcy5wZW5kaW5nUmVxdWVzdHM7XG4gICAgcmV0dXJuICEhcGVuZGluZz8uZmluZCgoYTogYW55KSA9PiBhID09IHVzZXJJZCk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGlzIGF0dGVuZGVlIGNhbiBiZSBmb2xsb3dlZCAoc2hvdyBcIkNvbm5lY3RcIiBidXR0b24pLiBOb3QgY29ubmVjdGVkIGFuZCBubyBwZW5kaW5nIHNlbnQgcmVxdWVzdC4gKi9cbiAgY2FuRm9sbG93VXNlcihhdHRlbmRlZTogeyBpZD86IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdWlkID0gYXR0ZW5kZWU/LmlkO1xuICAgIGlmICh1aWQgPT0gbnVsbCB8fCB1aWQgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuY2FuVW5mb2xsb3dVc2VyKGF0dGVuZGVlKSB8fCB0aGlzLmNoZWNrUGVuZGluZ1NlbnRSZXF1ZXN0KHVpZCkpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGlzIGF0dGVuZGVlIGlzIGFscmVhZHkgY29ubmVjdGVkIChzaG93IFwiRGlzY29ubmVjdFwiIGJ1dHRvbikuICovXG4gIGNhblVuZm9sbG93VXNlcihhdHRlbmRlZTogeyBpZD86IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdWlkID0gYXR0ZW5kZWU/LmlkO1xuICAgIGlmICh1aWQgPT0gbnVsbCB8fCB1aWQgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuY29ubmVjdGlvbnNMaXN0Py5sZW5ndGhcbiAgICAgID8gdGhpcy5jb25uZWN0aW9uc0xpc3RcbiAgICAgIDogdGhpcy5teUNvbm5lY3Rpb25zO1xuICAgIHJldHVybiAhIWxpc3Q/LmZpbmQoKGM6IGFueSkgPT4gKGMudXNlcklkID8/IGMuaWQpID09IHVpZCk7XG4gIH1cblxuICBjYW5Db25uZWN0KHVzZXJJZCkge1xuICAgIHJldHVybiAhKFxuICAgICAgdGhpcy5jYW5EaXNjb25uZWN0KHVzZXJJZCkgfHxcbiAgICAgIHRoaXMucGVuZGluZ1JlcXVlc3RzLmZpbmQoKGEpID0+IGEgPT0gdXNlcklkKVxuICAgICk7XG4gIH1cblxuICBjYW5EaXNjb25uZWN0KHVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLm15Q29ubmVjdGlvbnMuZmluZCgoY29ubikgPT4gY29ubi51c2VySWQgPT0gdXNlcklkKTtcbiAgfVxuXG4gIGZldGNoUGVuZGluZ1JlcXVlc3RzKCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIGFwaUtleTogdGhpcy5hdXRvZ2VuS2V5LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoXG4gICAgICAgIGAke3RoaXMuZW52aXJvbm1lbnQuVVNFUlNfQVBJfS9ldmVudHMvJHt0aGlzLmV2ZW50SWR9L2Nvbm5lY3Rpb24tcmVxdWVzdHMvYXV0b2dlbi9wZW5kaW5nLXNlbnQtcmVxdWVzdHM/dXNlcklkPSR7dGhpcy51c2VySWR9YCxcbiAgICAgICAgeyBoZWFkZXJzIH0sXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMucGVuZGluZ1JlcXVlc3RzID0gcmVzO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHBlbmRpbmcgcmVxdWVzdHM6ICcsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIGZldGNoTXlDb25uZWN0aW9ucygpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBhcGlLZXk6IHRoaXMuYXV0b2dlbktleSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFxuICAgICAgICBgJHt0aGlzLmVudmlyb25tZW50LlVTRVJTX0FQSX0vZXZlbnRzLyR7dGhpcy5ldmVudElkfS91c2Vycy1jb25uZWN0aW9ucy9hdXRvZ2VuP3VzZXJJZD0ke3RoaXMudXNlcklkfWAsXG4gICAgICAgIHsgaGVhZGVycyB9LFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLm15Q29ubmVjdGlvbnMgPSByZXM7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcGVuZGluZyByZXF1ZXN0czogJywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgaXNEcm9wZG93bk9wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWdlbnRzOiBhbnk7XG4gIHNlbGVjdGVkQWdlbnRzID0gW107XG4gIGFsbFNlbGVjdGVkID0gZmFsc2U7XG4gIC8vIFRvZ2dsZSB0aGUgZHJvcGRvd24gdmlzaWJpbGl0eVxuICB0b2dnbGVEcm9wZG93bigpIHtcbiAgICBpZiAoIXRoaXMuYWdlbnRzKSB0aGlzLmZldGNoQWdlbnRzKCk7XG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiA9ICF0aGlzLmlzRHJvcGRvd25PcGVuO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uU2VsZWN0QWxsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuYWdlbnRzPy5mb3JFYWNoKChhZ2VudCkgPT4gKGFnZW50LnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvbkFnZW50Q2hhbmdlKGFnZW50OiBhbnkpOiB2b2lkIHtcbiAgICAvL2FnZW50LnNlbGVjdGVkID0gIWFnZW50LnNlbGVjdGVkO1xuICAgIC8vY29uc29sZS5sb2coYWdlbnQpO1xuICAgIGxldCBhZ2VudEZvdW5kID0gdGhpcy5hZ2VudHMuZmlsdGVyKChwKSA9PiBwLmlkID09IGFnZW50LmlkKTtcbiAgICBpZiAoYWdlbnRGb3VuZCAmJiBhZ2VudEZvdW5kLmxlbmd0aCA+IDApIHtcbiAgICAgIGFnZW50Rm91bmRbMF0uc2VsZWN0ZWQgPSAhYWdlbnRGb3VuZFswXS5zZWxlY3RlZDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYXJlQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWdlbnRzPy5ldmVyeSgoYWdlbnQpID0+ICFhZ2VudC5zZWxlY3RlZCk7XG4gIH1cblxuICBnZXREcm9wZG93bkhlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWxlY3RlZEFnZW50cyA9IHRoaXMuYWdlbnRzPy5maWx0ZXIoKGFnZW50KSA9PiBhZ2VudC5zZWxlY3RlZCk7XG4gICAgaWYgKCFzZWxlY3RlZEFnZW50cykge1xuICAgICAgcmV0dXJuICdBbGwgQWdlbnRzJztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNlbGVjdGVkQWdlbnRzICYmIHNlbGVjdGVkQWdlbnRzPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuICdBbGwgQWdlbnRzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZEFnZW50cz8ubGVuZ3RoID4gMVxuICAgICAgICAgID8gYCR7c2VsZWN0ZWRBZ2VudHM/Lmxlbmd0aH0gQWdlbnRzIFNlbGVjdGVkYFxuICAgICAgICAgIDogYCR7c2VsZWN0ZWRBZ2VudHM/Lmxlbmd0aH0gQWdlbnQgU2VsZWN0ZWRgO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmZXRjaEFnZW50c19odHRwKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5BR0VOVFNfQVBJfS9Db1BpbG90LyR7dGhpcy5ib3RJZH0vYWN0aXZlLWFnZW50c2A7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHVybCwge30sIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgdGhpcy5hZ2VudHMgPSByZXMubWFwKChhZ2VudCkgPT4gKHtcbiAgICAgICAgICAgIC4uLmFnZW50LFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdGJvdCBjb25maWc6ICcsIGVycm9yKTtcblxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG4gIGlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICBkb2N1bWVudENvbnRlbnQ6IGFueTtcblxuICBjb252ZXJzYXRpb25JZDogYW55O1xuICBpc0NvbnRlbnRMb2FkZWQgPSBmYWxzZTtcblxuICBmZXRjaENvbnRlbnRfaHR0cCgpIHtcbiAgICB0aGlzLmlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNDb250ZW50TG9hZGVkID0gZmFsc2U7XG4gICAgY29uc29sZS5sb2coJ0FQSSBjYWxsIGZ1bmN0aW9uJyk7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBjb252ZXJzYXRpb25faWQgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KHRoaXMuYm90SWQpO1xuICAgIHRoaXMuY29udmVyc2F0aW9uSWQgPSBjb252ZXJzYXRpb25faWQ7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5BR0VOVFNfQVBJfS9Db252ZXJzYXRpb25Eb2N1bWVudHM/Y29udmVyc2F0aW9uSWQ9JHtjb252ZXJzYXRpb25faWR9JmJvdElkPSR7dGhpcy5ib3RJZH1gO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIGFwaUtleTogJ1dJei9xQW0rRUVtZk9rRmFVQS93ZUE9PScsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgdGhpcy5pc0RvY0luRWRpdE1vZGUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRDb250ZW50ID0gcmVzO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdHZXQgQVBJIGNhbGxsZWQgc3VjY2VzcycpO1xuICAgICAgICAgIHRoaXMuaXNDb250ZW50TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0Ym90IGNvbmZpZyBESjogJywgZXJyb3IpO1xuICAgICAgICB0aGlzLmlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQ29udGVudExvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVycm9yPy5zdGF0dXMgPT0gNDA0KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2Rhc2gnKTtcbiAgICAgICAgICB0aGlzLmlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNDb250ZW50TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgZmV0Y2hBZ2VudHMoKSB7XG4gICAgdGhpcy5mZXRjaEFnZW50c19odHRwKCkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBmZXRjaEVkaXRvckNvbnRlbnQoKSB7XG4gICAgdGhpcy5mZXRjaENvbnRlbnRfaHR0cCgpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8gZXZlbnRzLyR7ZXZlbnRJZH0vdXNlcnMtY29ubmVjdGlvbnNcbiAgcHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KG1hcmtkb3duOiBzdHJpbmcpOiBTYWZlSHRtbCB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENyZWF0ZSBhIGN1c3RvbSByZW5kZXJlciB0byBtb2RpZnkgPGE+IHRhZ3NcbiAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IG1hcmtlZC5SZW5kZXJlcigpO1xuXG4gICAgICAvLyBDdXN0b21pemUgYW5jaG9yIHRhZ3MgdG8gaW5jbHVkZSB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgcmVuZGVyZXIubGluayA9IChocmVmOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gYDxhIGhyZWY9XCIke2hyZWZ9XCIgdGl0bGU9XCIke1xuICAgICAgICAgIHRpdGxlIHx8ICcnXG4gICAgICAgIH1cIiB0YXJnZXQ9XCJfYmxhbmtcIj4ke3RleHR9PC9hPmA7XG4gICAgICB9O1xuXG4gICAgICAvLyBQYXJzZSB0aGUgbWFya2Rvd24gY29udGVudCB0byBIVE1MIHVzaW5nIG1hcmtlZCB3aXRoIHRoZSBjdXN0b20gcmVuZGVyZXJcbiAgICAgIGNvbnN0IG1hcmtkb3duQ29udGVudCA9IG1hcmtlZC5wYXJzZShtYXJrZG93biwgeyByZW5kZXJlcjogcmVuZGVyZXIgfSk7XG5cbiAgICAgIC8vIFNhbml0aXplIHRoZSBwYXJzZWQgSFRNTCB1c2luZyBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyXG4gICAgICBjb25zdCBzYW5pdGl6ZWRIdG1sID1cbiAgICAgICAgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwobWFya2Rvd25Db250ZW50KTtcblxuICAgICAgLy8gUmV0dXJuIHRoZSBzYWZlIEhUTUwgY29udGVudCBmb3IgZGlzcGxheVxuICAgICAgcmV0dXJuIHNhbml0aXplZEh0bWw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHByb2Nlc3NpbmcgbWFya2Rvd246JywgZXJyb3IpO1xuICAgICAgcmV0dXJuICcnOyAvLyBSZXR1cm4gYW4gZW1wdHkgc3RyaW5nIG9yIGhhbmRsZSB0aGUgZXJyb3IgYXBwcm9wcmlhdGVseVxuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVIdG1sKG1hcmtkb3duOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbWFya2Rvd24gfHwgIShtYXJrZG93bi5sZW5ndGggPiAwKSkge1xuICAgICAgY29uc29sZS5lcnJvcignSW5wdXQgTWFya2Rvd24gaXMgbnVsbCBvciBlbXB0eScpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgTWFya2Rvd24gaGVhZGVycyAoIyMjIG9yICMjKSB0byA8c3Ryb25nPiBmb3IgYm9sZCBoZWFkaW5nc1xuICAgIGxldCBodG1sID0gbWFya2Rvd24ucmVwbGFjZShcbiAgICAgIC9eKCN7MSw2fSlcXHMrKC4qKSQvZ20sXG4gICAgICAobWF0Y2gsIGhhc2hlcywgdGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBsZXZlbCA9IGhhc2hlcy5sZW5ndGg7XG4gICAgICAgIGlmIChsZXZlbCA9PT0gMykge1xuICAgICAgICAgIHJldHVybiBgPGgzPjxzdHJvbmc+JHt0ZXh0fTwvc3Ryb25nPjwvaDM+YDtcbiAgICAgICAgfSBlbHNlIGlmIChsZXZlbCA9PT0gNCkge1xuICAgICAgICAgIHJldHVybiBgPGg0PjxzdHJvbmc+JHt0ZXh0fTwvc3Ryb25nPjwvaDQ+YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYDxzdHJvbmc+JHt0ZXh0fTwvc3Ryb25nPmA7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBDb252ZXJ0IE1hcmtkb3duIGNvZGUgYmxvY2tzIHdpdGggbGFuZ3VhZ2UgdG8gcHJlZm9ybWF0dGVkIEhUTUxcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9gYGAoXFx3Kyk/XFxuKFtcXHNcXFNdKj8pYGBgL2csIChtYXRjaCwgbGFuZywgY29kZSkgPT4ge1xuICAgICAgY29uc3QgZXNjYXBlZENvZGUgPSB0aGlzLmVzY2FwZUh0bWwoY29kZSk7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IGxhbmcgfHwgJ3BsYWludGV4dCc7XG5cbiAgICAgIC8vIENyZWF0ZSBhIGNvcHkgYnV0dG9uIGZvciB0aGUgY29kZSBibG9ja1xuICAgICAgcmV0dXJuIGBcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2RlLWNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGlkPVwiY29weS1idXR0b25cIiBjbGFzcz1cImNvcHktYnV0dG9uXCIgKGNsaWNrKT1cImNvcHlUb0NsaXBib2FyZCgnXFxgJHtlc2NhcGVkQ29kZX1cXGAnKVwiPiR7dGhpcy5nZXRUcmFuc2xhdGlvbihcbiAgICAgICAgICAnQ29weScsXG4gICAgICAgICl9PC9idXR0b24+XG4gICAgICAgIDxwcmUgY2xhc3M9XCJjb2RlX2Jsb2NrIGRpZmZcIj48Y29kZSBjbGFzcz1cImxhbmd1YWdlLSR7bGFuZ3VhZ2V9XCI+JHtlc2NhcGVkQ29kZX08L2NvZGU+PC9wcmU+XG4gICAgICA8L2Rpdj5gO1xuICAgIH0pO1xuXG4gICAgLy8gQ29udmVydCBpbmxpbmUgY29kZSAod3JhcHBlZCBpbiBgYmFja3RpY2tzYCkgdG8gaW5saW5lIDxjb2RlPiB0YWdzXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvYChbXmBdKylgL2csICc8Y29kZT4kMTwvY29kZT4nKTtcblxuICAgIC8vIENvbnZlcnQgTWFya2Rvd24gYm9sZCB0byBIVE1MIDxzdHJvbmc+XG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvXFwqXFwqKC4qPylcXCpcXCovZywgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKTtcblxuICAgIC8vIENvbnZlcnQgbnVtYmVyZWQgbGlzdHNcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9eXFxkK1xcLlxccysoLiopJC9nbSwgJzxsaT4kMTwvbGk+Jyk7XG5cbiAgICAvLyBDb252ZXJ0IGJ1bGxldCBwb2ludCBsaXN0c1xuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoL15cXC1cXHMrKC4qKSQvZ20sICc8bGk+JDE8L2xpPicpO1xuXG4gICAgLy8gQ29udmVydCBNYXJrZG93biBsaW5rcyB0byBIVE1MIGxpbmtzXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZShcbiAgICAgIC9cXFsoW15cXF1dKyldXFwoKFteKV0rKVxcKS9nLFxuICAgICAgJzxhIGhyZWY9XCIkMlwiIHRhcmdldD1cIl9ibGFua1wiPiQxPC9hPicsXG4gICAgKTtcblxuICAgIC8vIENvbnZlcnQgbmV3IGxpbmVzIHRvIDxicj4gdGFncyBmb3IgcGFyYWdyYXBoc1xuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLyg/OlxcclxcbnxcXHJ8XFxuKS9nLCAnPGJyPicpO1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZXNjYXBlIEhUTUwgY2hhcmFjdGVycyBmb3IgY29kZSBibG9ja3NcbiAgZXNjYXBlSHRtbChjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBjb2RlXG4gICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAgICAgLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKVxuICAgICAgLnJlcGxhY2UoLycvZywgJyYjMDM5OycpO1xuICB9XG5cbiAgLy8gRnVuY3Rpb24gdG8gY29weSB0ZXh0IHRvIGNsaXBib2FyZFxuICBwdWJsaWMgY29weVRvQ2xpcGJvYXJkKHRleHQ6IHN0cmluZykge1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGFsZXJ0KCdDb2RlIGNvcGllZCB0byBjbGlwYm9hcmQhJyk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgY29weSB0ZXh0OiAnLCBlcnIpO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgaXNDb2xsYXBzZWQgPSBmYWxzZTtcbiAgaXNDb2xsYXBzZWRGb3JHcmFwaCA9IGZhbHNlO1xuICBpc0NvbGxhcHNlZEZvckZHcmFwaCA9IGZhbHNlO1xuICB0b2dnbGVDb2xsYXBzZSgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gIXRoaXMuaXNDb2xsYXBzZWQ7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdG9nZ2xlQ29sbGFwc2VHcmFwaCgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkRm9yR3JhcGggPSAhdGhpcy5pc0NvbGxhcHNlZEZvckdyYXBoO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICB0b2dnbGVDb2xsYXBzZUZHcmFwaCgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkRm9yRkdyYXBoID0gIXRoaXMuaXNDb2xsYXBzZWRGb3JGR3JhcGg7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIC8vICAgW1xuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJBSSBOZXdzIEphbnVhcnkgMjAyNDogSW4tRGVwdGggYW5kIENvbmNpc2UgLSBUaGUgQUkgVHJhY2tcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIkVhY2ggbW9udGgsIHdlIGNvbXBpbGUgc2lnbmlmaWNhbnQgbmV3cywgdHJlbmRzLCBhbmQgaGFwcGVuaW5ncyBpbiBBSSwgcHJvdmlkaW5nIGRldGFpbGVkIHN1bW1hcmllcyB3aXRoIGtleSBwb2ludHMgaW4gYnVsbGV0IGZvcm0gZm9yIGNvbmNpc2UgeWV0IGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL3RoZWFpdHJhY2suY29tL2FpLW5ld3MtamFudWFyeS0yMDI0L1wiXG4gIC8vICAgfSxcbiAgLy8gICB7XG4gIC8vICAgICBcInRpdGxlXCI6IFwiVG9wIEFJIE5ld3MsIEphbnVhcnkgMjAyNCAtIEV2ZXJ5cGl4ZWwgSm91cm5hbFwiLFxuICAvLyAgICAgXCJkZXNjXCI6IFwiSW4gdGhpcyBtb250aGx5IHJvdW5kdXAsIHdlIHNwb3RsaWdodCB0aGUgdG9wIEFJIG5ld3Mgc3RvcmllcyBmcm9tIEphbnVhcnksIGluY2x1ZGluZyB0aGUgT3BlbkFJIHZzLiBUaGUgTmV3IFlvcmsgVGltZXMgTGF3c3VpdC5cIixcbiAgLy8gICAgIFwibGlua1wiOiBcImh0dHBzOi8vam91cm5hbC5ldmVyeXBpeGVsLmNvbS90b3AtYWktbmV3cy1qYW51YXJ5LTIwMjRcIlxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgXCJ0aXRsZVwiOiBcIkFJIE5ld3MgSnVseSAyMDI0OiBJbi1EZXB0aCBhbmQgQ29uY2lzZSAtIFRoZSBBSSBUcmFja1wiLFxuICAvLyAgICAgXCJkZXNjXCI6IFwiVGhpcyBwYWdlIGZlYXR1cmVzIEFJIE5ld3MgZm9yIEp1bHkgMjAyNCwgaGlnaGxpZ2h0aW5nIHNpZ25pZmljYW50IGV2ZW50cyBzdWNoIGFzIENhbnZhIGFjcXVpcmluZyBMZW9uYXJkbyBBSS5cIixcbiAgLy8gICAgIFwibGlua1wiOiBcImh0dHBzOi8vdGhlYWl0cmFjay5jb20vYWktbmV3cy1qdWx5LTIwMjQtaW4tZGVwdGgtYW5kLWNvbmNpc2UvXCJcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJKYW51YXJ5IG5ld3Mgcm91bmR1cDogV2hhdCdzIG5ldyBpbiB0aGUgd29ybGQgb2YgQUk/IC0gUGx1cmFsc2lnaHRcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIk9wZW5BSeKAmXMgbmV3IEdQVCBzdG9yZSwgYnVzaW5lc3MtcmVhZHkgQ2hhdEdQVCBwbGFucywgYW5kIGEgcHJlZGljdGVkIHJpc2UgaW4gQUktcG93ZXJlZCBjeWJlcmNyaW1lLlwiLFxuICAvLyAgICAgXCJsaW5rXCI6IFwiaHR0cHM6Ly93d3cucGx1cmFsc2lnaHQuY29tL3Jlc291cmNlcy9ibG9nL2RhdGEvYWktdGhpcy1tb250aC1qYW51YXJ5LTIwMjRcIlxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgXCJ0aXRsZVwiOiBcIkFJIE5ld3MgQXVndXN0IDIwMjQ6IEluLURlcHRoIGFuZCBDb25jaXNlIC0gVGhlIEFJIFRyYWNrXCIsXG4gIC8vICAgICBcImRlc2NcIjogXCJUaGlzIHBhZ2UgZmVhdHVyZXMgQUkgTmV3cyBmb3IgQXVndXN0IDIwMjQsIHdpdGggaGlnaGxpZ2h0cyBzdWNoIGFzIE52aWRpYSBkZWxheWluZyB0aGUg4oCcQmxhY2t3ZWxs4oCdIEIyMDAgQUkgY2hpcHMgZGVsaXZlcnkuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL3RoZWFpdHJhY2suY29tL2FpLW5ld3MtYXVndXN0LTIwMjQtaW4tZGVwdGgtYW5kLWNvbmNpc2UtZHVwbGljYXRlL1wiXG4gIC8vICAgfVxuICAvLyBdXG4gIGRhdGVUaW1lID0geyBub3c6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9O1xuICAvLyBFeHRyYWN0cyB0aGUgZG9tYWluIGZyb20gYSBVUkxcbiAgZ2V0RG9tYWluTmFtZSh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgaG9zdG5hbWUgfSA9IG5ldyBVUkwodXJsKTtcbiAgICAgIHJldHVybiBob3N0bmFtZS5yZXBsYWNlKC9ed3d3XFwuLywgJycpOyAvLyBSZW1vdmUgJ3d3dy4nIGlmIHByZXNlbnRcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG5cbiAgLy8gR2VuZXJhdGVzIHRoZSBmYXZpY29uIFVSTFxuICBnZXRGYXZpY29uVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkb21haW4gPSB0aGlzLmdldERvbWFpbk5hbWUodXJsKTtcbiAgICByZXR1cm4gYGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vczIvZmF2aWNvbnM/c3o9MTI4JmRvbWFpbj0ke2RvbWFpbn1gO1xuICB9XG4gIGN1cnJlbnRTb3VyY2VzTGlzdDogYW55ID0gW107XG4gIG9uQ2FyZENsaWNrKHNvdXJjZXMpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRTb3VyY2VzTGlzdCA9IHNvdXJjZXM7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc291cmNlc0RyYXdlci5vcGVuKCk7XG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdGNsb3NlcGxheWdyb3VuZGJ1dHRvbicpO1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIGlzU2hvd0VkaXRvckJ1dHRvbiA9IHRydWU7XG5cbiAgb3Blbk91dGVyRWRpdG9yKCkge1xuICAgIHRoaXMuZmV0Y2hFZGl0b3JDb250ZW50KCk7XG4gICAgdGhpcy5lZGl0b3JzRHJhd2VyLm9wZW4oKTtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IHRydWU7XG4gICAgdGhpcy5pc1Nob3dFZGl0b3JCdXR0b24gPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICB9XG5cbiAgb25DbG9zZUVkaXRvcigpIHtcbiAgICB0aGlzLmVkaXRvcnNEcmF3ZXIuY2xvc2UoKTtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNTaG93RWRpdG9yQnV0dG9uID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7IC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBpZiBuZWVkZWRcbiAgICB0aGlzLm9uRHJhd2VyQ2xvc2VkKCk7XG4gIH1cblxuICBvbkNsb3NlU291cmNlKCkge1xuICAgIHRoaXMuc291cmNlc0RyYXdlci5jbG9zZSgpO1xuICAgIHRoaXMuaXNEcmF3ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVlZGVkXG4gICAgdGhpcy5vbkRyYXdlckNsb3NlZCgpO1xuICB9XG4gIG9uRHJhd2VyQ2xvc2VkKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pc0RyYXdlck9wZW4gPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVlZGVkXG4gICAgICAvLyBVc2UgbmdDbGFzcyB0byBkeW5hbWljYWxseSBhcHBseSB0aGUgY2xhc3NcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RjbG9zZXBsYXlncm91bmRidXR0b24nKTtcbiAgICAgIGlmIChidXR0b24pIHtcbiAgICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgfVxuICAgIH0sIDgwMCk7XG4gIH1cbiAgaXNEcmF3ZXJPcGVuID0gdHJ1ZTtcblxuICB0b2dnbGVEcmF3ZXIodG9kbykge1xuICAgIHRoaXMuaXNEcmF3ZXJPcGVuID0gdG9kbztcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy51cGRhdGVCdXR0b25WaXNpYmlsaXR5KCk7XG4gIH1cbiAgdXBkYXRlQnV0dG9uVmlzaWJpbGl0eSgpIHtcbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSB0aGlzLmlzRHJhd2VyT3BlbiA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgfVxuICB9XG4gIG9wZW5MaW5rSW5OZXdUYWIobGluazogc3RyaW5nKTogdm9pZCB7XG4gICAgd2luZG93Lm9wZW4obGluaywgJ19ibGFuaycpO1xuICB9XG4gIGFkanVzdFRleHRhcmVhSGVpZ2h0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgLy8gUHJldmVudHMgYSBuZXcgbGluZSBmcm9tIGJlaW5nIGFkZGVkXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgY29uc3QgdGV4dGFyZWEgPSBldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSAnYXV0byc7IC8vIFJlc2V0IHRoZSBoZWlnaHRcbiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSBgJHt0ZXh0YXJlYS5zY3JvbGxIZWlnaHR9cHhgOyAvLyBBZGp1c3QgaGVpZ2h0IHRvIG1hdGNoIGNvbnRlbnRcbiAgICAvLyBFbnN1cmUgdGhlIGhlaWdodCBkb2Vzbid0IGV4Y2VlZCB0aGUgbWF4LWhlaWdodCBzZXQgaW4gQ1NTXG4gICAgaWYgKHRleHRhcmVhLnNjcm9sbEhlaWdodCA+IDE1MCkge1xuICAgICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gYDE1MHB4YDsgLy8gQWRqdXN0IGhlaWdodCB0byBtYXRjaCBjb250ZW50XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5vdmVyZmxvd1kgPSAnYXV0byc7IC8vIEVuYWJsZSBzY3JvbGxpbmcgaWYgY29udGVudCBleGNlZWRzIDQwMHB4XG4gICAgfSBlbHNlIHtcbiAgICAgIHRleHRhcmVhLnN0eWxlLm92ZXJmbG93WSA9ICdoaWRkZW4nOyAvLyBIaWRlIHNjcm9sbGJhciBpZiBjb250ZW50IGlzIHdpdGhpbiBsaW1pdHNcbiAgICB9XG4gIH1cblxuICB0b2dnbGVXb3JrZmxvd3ModmFsdWUgPSBudWxsKSB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRm9yQ29wMjlCb3RJZCgpKSB7XG4gICAgICB0aGlzLmJvdFNlcnZpY2UuZ2V0V29ya2Zsb3dzQnlPcmdJZCh0aGlzLm9yZ0lkKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLm9yZ1dvcmtmbG93cyA9IHJlcztcbiAgICAgICAgdGhpcy5pc1dvcmtmbG93T3BlbiA9IHZhbHVlID09IG51bGwgPyAhdGhpcy5pc1dvcmtmbG93T3BlbiA6IHZhbHVlO1xuXG4gICAgICAgIGlmICghdGhpcy5pc1dvcmtmbG93T3Blbikge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5vcGVuV29ya2Zsb3dJbnB1dCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaW5pdGlhbGl6ZUZvcm0oKSB7XG4gICAgLy8gQ3JlYXRlIGZvcm0gY29udHJvbHMgZHluYW1pY2FsbHkgYmFzZWQgb24gc2VsZWN0ZWRXb3JrZmxvdy5UcmlnZ2VyLklucHV0U2NoZW1hXG4gICAgY29uc3QgZm9ybUNvbnRyb2xzID0ge307XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8uVHJpZ2dlcj8uSW5wdXRTY2hlbWEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5UcmlnZ2VyLklucHV0U2NoZW1hLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICAgIGZvcm1Db250cm9sc1tpbnB1dC5JbnB1dElkXSA9IFtcbiAgICAgICAgICBpbnB1dC5WYWx1ZSB8fCAnJyxcbiAgICAgICAgICBpbnB1dC5SZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsLFxuICAgICAgICBdO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZm9ybVxuICAgIHRoaXMud29ya2Zsb3dGb3JtID0gdGhpcy5mYi5ncm91cChmb3JtQ29udHJvbHMpO1xuICB9XG5cbiAgb25Xb3JrZmxvd1NlbGVjdGVkKHdvcmtmbG93KSB7XG4gICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gd29ya2Zsb3c7XG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuICAgIHRoaXMuaXNXb3JrZmxvd09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5Xb3JrZmxvd0lucHV0ID0gdHJ1ZTtcbiAgfVxuXG4gIG9uV29ya2Zsb3dTdWJtaXQoKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdEFsbENoYXQnKTtcbiAgICBpZiAodGhpcy53b3JrZmxvd0Zvcm0udmFsaWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMud29ya2Zsb3dGb3JtLnZhbHVlKTtcblxuICAgICAgdmFyIGlucHV0ID0gdGhpcy5wcmVwYXJlSHRtbChcbiAgICAgICAgdGhpcy5nZW5lcmF0ZU1hcmtkb3duKFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5OYW1lLFxuICAgICAgICAgIHRoaXMud29ya2Zsb3dGb3JtLnZhbHVlLFxuICAgICAgICApLFxuICAgICAgKTtcblxuICAgICAgLy8gdXBkYXRlIGxhc3QgdHdvIGNoYXRMb2cgZW50cmllcywgc2V0IHNob3dXb3JrZmxvd0V4ZWN1dGlvbkxvYWRlciA9IGZhbHNlXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDFdWydzaG93V29ya2Zsb3dFeGVjdXRpb25Mb2FkZXInXSA9XG4gICAgICAgICAgZmFsc2U7XG4gICAgICAgIHRoaXMuY2hhdExvZ1t0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMl1bJ3Nob3dXb3JrZmxvd0V4ZWN1dGlvbkxvYWRlciddID1cbiAgICAgICAgICBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgICAgbWVzc2FnZTogaW5wdXQsXG4gICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICAgICAgc2hvd1dvcmtmbG93RXhlY3V0aW9uTG9hZGVyOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKGlucHV0KTtcblxuICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzcyA9IDA7XG4gICAgICB0aGlzLmN1cnJlbnRXb3JrZmxvd0FjdGlvbiA9XG4gICAgICAgICdFeGVjdXRpbmcgJyArIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5BY3Rpb25zWzBdLk5hbWU7XG4gICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IHRydWU7XG4gICAgICB0aGlzLmV4ZWN1dGluZ1dvcmtmbG93ID0gdHJ1ZTtcbiAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0ge1xuICAgICAgICBBY3Rpb25zOiB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuQWN0aW9ucyxcbiAgICAgICAgSW5wdXRzOiB0aGlzLndvcmtmbG93Rm9ybS52YWx1ZSxcbiAgICAgICAgd29ya2Zsb3dJbnB1dHM6IHRoaXMud29ya2Zsb3dGb3JtLnZhbHVlLFxuICAgICAgICBXb3JrZmxvd05hbWU6IHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5OYW1lLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93RXhlY3V0aW9uRGV0YWlscyA9IHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzO1xuICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIC8vIGV4ZWN1dGUgdGhlIGFzayBlbmRwb2ludCB3aXRoIHdvcmtmbG93IGlucHV0XG4gICAgICB0aGlzLm1ha2VBc2tSZXF1ZXN0KFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgdGhpcy5hZ2VudHMsXG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uS2V5LFxuICAgICAgICAnJyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93WydfaWQnXSxcbiAgICAgICAgdGhpcy53b3JrZmxvd0Zvcm0udmFsdWUsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG1ha2VBc2tSZXF1ZXN0KFxuICAgIGlucHV0TXNnOiBzdHJpbmcsXG4gICAgYWdlbnRzOiBhbnlbXSxcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nLFxuICAgIG1zZz86IGFueSxcbiAgICBjaGF0PzogYW55LFxuICAgIHdvcmtmbG93SWQ/OiBzdHJpbmcsXG4gICAgd29ya2Zsb3dfaW5wdXRzPzogYW55LFxuICApOiB2b2lkIHtcbiAgICB2YXIgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vYWkvYXNrYDtcblxuICAgIHZhciBib2R5ID0ge1xuICAgICAgdXNlcl9xdWVzdGlvbjogaW5wdXRNc2csXG4gICAgICB1c2VyX2lkOiB0aGlzLnVzZXJJZCxcbiAgICAgIGJvdF9pZDogdGhpcy5ib3RJZCxcbiAgICAgIG1lc3NhZ2VfaWQ6IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZW5lcmF0ZUtleSgpLFxuICAgICAgc2Vzc2lvbl9pZDogdGhpcy5jb25TZXNzaW9uS2V5LFxuICAgICAgYWdlbnRzOiBhZ2VudHM/LmZpbHRlcigocCkgPT4gcC5zZWxlY3RlZCkubWFwKChwKSA9PiBwLmlkKSA/PyBbXSxcbiAgICAgIGNvbnZlcnNhdGlvbl9pZDogY29udmVyc2F0aW9uSWQsXG4gICAgICBmaXJzdF9uYW1lOiB0aGlzLmZpcnN0TmFtZSxcbiAgICAgIGxhc3RfbmFtZTogdGhpcy5sYXN0TmFtZSxcbiAgICB9O1xuXG4gICAgaWYgKHdvcmtmbG93SWQpIHtcbiAgICAgIGJvZHlbJ3dvcmtmbG93X2lkJ10gPSB3b3JrZmxvd0lkO1xuICAgICAgYm9keVsnd29ya2Zsb3dfaW5wdXRzJ10gPSB3b3JrZmxvd19pbnB1dHM7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyczogYW55ID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIHRoaXMuczI3VG9rZW4sXG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgICAgZXZlbnRVcmw6IHRoaXMuZXZlbnRVcmwsXG4gICAgICBldmVudFRva2VuOiB0aGlzLmV2ZW50VG9rZW4sXG4gICAgfTtcblxuICAgIGlmICh0aGlzLndvcmtzcGFjZVRva2VuKSB7XG4gICAgICBoZWFkZXJzWyd3b3Jrc3BhY2VUb2tlbiddID0gdGhpcy53b3Jrc3BhY2VUb2tlbjtcbiAgICB9XG5cbiAgICBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIH0pXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgICAgdGhpcy5pczQwMSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4uZW1pdCgpO1xuXG4gICAgICAgICAgLy8gSWYgYG1zZ2AgYW5kIGBjaGF0YCBleGlzdCwgaGFuZGxlIHRoZW1cbiAgICAgICAgICBpZiAobXNnICYmIGNoYXQpIHtcbiAgICAgICAgICAgIHRoaXMubXNnID0gbXNnO1xuICAgICAgICAgICAgdGhpcy5jaGF0ID0gY2hhdDtcbiAgICAgICAgICAgIHRoaXMuaXNGZXRjaERhdGFGb3IgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmlzNDAxID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgLy8gQWRkaXRpb25hbCByZXNwb25zZSBoYW5kbGluZyBpZiBuZWVkZWRcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogJywgZXJyKTtcbiAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IG51bGw7XG4gICAgdGhpcy5vcGVuV29ya2Zsb3dJbnB1dCA9IGZhbHNlO1xuICAgIHRoaXMuaXNXb3JrZmxvd09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBtYWtlQXNrUmVxdWVzdG9sZChcbiAgICBpbnB1dE1zZzogc3RyaW5nLFxuICAgIGFnZW50czogYW55W10sXG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgICBtc2c/OiBhbnksXG4gICAgY2hhdD86IGFueSxcbiAgICB3b3JrZmxvd0lkPzogc3RyaW5nLFxuICAgIHdvcmtmbG93X2lucHV0cz86IGFueSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vYWkvYXNrYDtcblxuICAgIGNvbnN0IGJvZHk6IGFueSA9IHtcbiAgICAgIHVzZXJfcXVlc3Rpb246IGlucHV0TXNnLFxuICAgICAgdXNlcl9pZDogdGhpcy51c2VySWQsXG4gICAgICBib3RfaWQ6IHRoaXMuYm90SWQsXG4gICAgICBtZXNzYWdlX2lkOiB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2VuZXJhdGVLZXkoKSxcbiAgICAgIGFnZW50czogYWdlbnRzPy5maWx0ZXIoKHApID0+IHAuc2VsZWN0ZWQpLm1hcCgocCkgPT4gcC5pZCkgPz8gW10sXG4gICAgICBjb252ZXJzYXRpb25faWQ6IGNvbnZlcnNhdGlvbklkLFxuICAgICAgZmlyc3RfbmFtZTogdGhpcy5maXJzdE5hbWUsXG4gICAgICBsYXN0X25hbWU6IHRoaXMubGFzdE5hbWUsXG4gICAgfTtcblxuICAgIGlmICh3b3JrZmxvd0lkKSB7XG4gICAgICBib2R5Wyd3b3JrZmxvd19pZCddID0gd29ya2Zsb3dJZDtcbiAgICAgIGJvZHlbJ3dvcmtmbG93X2lucHV0cyddID0gd29ya2Zsb3dfaW5wdXRzO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmh0dHAucG9zdCh1cmwsIGJvZHksIHsgaGVhZGVycyB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIC8vIEFkZGl0aW9uYWwgcmVzcG9uc2UgaGFuZGxpbmcgaWYgbmVlZGVkXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6ICcsIGVycik7XG4gICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IG51bGw7XG4gICAgdGhpcy5vcGVuV29ya2Zsb3dJbnB1dCA9IGZhbHNlO1xuICAgIHRoaXMuaXNXb3JrZmxvd09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZW5lcmF0ZU1hcmtkb3duKHRpdGxlLCBvYmopIHtcbiAgICAvLyBJbml0aWFsaXplIG1hcmtkb3duIHdpdGggdGhlIHRpdGxlXG4gICAgbGV0IG1hcmtkb3duID0gYCMjICR7dGl0bGV9XFxuYDtcblxuICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgb2JqZWN0IGFuZCBhcHBlbmQgdGhlIGZpZWxkIG5hbWVzIGFuZCB2YWx1ZXNcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgICB2YXIga2V5X2xhYmVsID1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93LlRyaWdnZXIuSW5wdXRTY2hlbWEuZmluZChcbiAgICAgICAgICAoaW5wdXQpID0+IGlucHV0LklucHV0SWQgPT09IGtleSxcbiAgICAgICAgKT8uTGFiZWwgfHwga2V5O1xuICAgICAgbWFya2Rvd24gKz0gYC0gKioke2tleV9sYWJlbH0qKjogJHt2YWx1ZX1cXG5gO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZG93bjtcbiAgfVxuXG4gIHNob3dXb3JrZmxvd0hpc3RvcnlEZXRhaWxzKHdvcmtmbG93X2lkKSB7XG4gICAgaWYgKCF3b3JrZmxvd19pZCkge1xuICAgICAgdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB0aGlzLmN1cnJlbnRXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM7XG4gICAgICB0aGlzLnNob3dXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYm90U2VydmljZS5nZXRXb3JrZmxvd0V4ZWN1dGlvbkJ5SWQod29ya2Zsb3dfaWQpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzICYmIHJlcy5BY3Rpb25zICYmIEFycmF5LmlzQXJyYXkocmVzLkFjdGlvbnMpKSB7XG4gICAgICAgIHJlcy5BY3Rpb25zID0gcmVzLkFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgICBpZiAoYWN0aW9uLkluc2VydFRpbWVTdGFtcCkge1xuICAgICAgICAgICAgYWN0aW9uLkluc2VydFRpbWVTdGFtcCA9IGZvcm1hdFRpbWVTdGFtcHMoXG4gICAgICAgICAgICAgIHRoaXMudGltZXpvbmUsXG4gICAgICAgICAgICAgIGFjdGlvbi5JbnNlcnRUaW1lU3RhbXAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWN0aW9uO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVzLkluc2VydFRpbWVTdGFtcCA9IGZvcm1hdFRpbWVTdGFtcHMoXG4gICAgICAgIHRoaXMudGltZXpvbmUsXG4gICAgICAgIHJlcy5JbnNlcnRUaW1lU3RhbXAsXG4gICAgICApO1xuICAgICAgdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSByZXM7XG4gICAgICB0aGlzLnNob3dXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgY2xvc2VNb2RhbCgpIHtcbiAgICB0aGlzLnNob3dXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSBmYWxzZTtcbiAgfVxuXG4gIG9iamVjdFRvQXJyYXkob2JqOiBhbnkpOiBhbnlbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKChrZXkpID0+ICh7IGtleSwgdmFsdWU6IG9ialtrZXldIH0pKTtcbiAgfVxuXG4gIHN0YXJ0TmV3Q29udmVyc2F0aW9uKCkge1xuICAgIHRoaXMuY29udmVyc2F0aW9uS2V5ID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdldEtleSh0aGlzLmJvdElkLCB0cnVlKTtcbiAgICB0aGlzLmNoYXRMb2cgPSBbdGhpcy5jaGF0TG9nWzBdXTtcbiAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgIHRoaXMuY2hhdFNvY2tldEluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmVuc3VyZUNoYXRTb2NrZXQoKTtcbiAgICB9LCAyMDApO1xuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBpbml0aWFsaXplU3BlZWNoUmVjb2duaXplcih0b2tlbjogc3RyaW5nKSB7XG4gICAgdGhpcy5zcGVlY2hDb25maWcgPSBTcGVlY2hTREsuU3BlZWNoQ29uZmlnLmZyb21BdXRob3JpemF0aW9uVG9rZW4oXG4gICAgICB0b2tlbixcbiAgICAgIHRoaXMucmVnaW9uLFxuICAgICk7XG4gICAgY29uc3QgYXVkaW9Db25maWcgPSBTcGVlY2hTREsuQXVkaW9Db25maWcuZnJvbURlZmF1bHRNaWNyb3Bob25lSW5wdXQoKTtcbiAgICB0aGlzLnJlY29nbml6ZXIgPSBuZXcgU3BlZWNoU0RLLlNwZWVjaFJlY29nbml6ZXIoXG4gICAgICB0aGlzLnNwZWVjaENvbmZpZyxcbiAgICAgIGF1ZGlvQ29uZmlnLFxuICAgICk7XG5cbiAgICB0aGlzLnJlY29nbml6ZXIucmVjb2duaXppbmcgPSAocywgZSkgPT4ge1xuICAgICAgaWYgKGUucmVzdWx0LnJlYXNvbiA9PT0gU3BlZWNoU0RLLlJlc3VsdFJlYXNvbi5SZWNvZ25pemluZ1NwZWVjaCkge1xuICAgICAgICB0aGlzLmlucHV0ID0gZS5yZXN1bHQudGV4dDtcbiAgICAgICAgY29uc29sZS5sb2coYFJlY29nbml6aW5nOiAke2UucmVzdWx0LnRleHR9YCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnJlY29nbml6ZXIucmVjb2duaXplZCA9IChzLCBlKSA9PiB7XG4gICAgICBpZiAoZS5yZXN1bHQucmVhc29uID09PSBTcGVlY2hTREsuUmVzdWx0UmVhc29uLlJlY29nbml6ZWRTcGVlY2gpIHtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGUucmVzdWx0LnRleHQ7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZWNvZ25pemVkOiAke2UucmVzdWx0LnRleHR9YCk7XG4gICAgICAgIHRoaXMudG9nZ2xlUmVjb3JkaW5nKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnJlY29nbml6ZXIuY2FuY2VsZWQgPSAocywgZSkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignQ2FuY2VsZWQ6ICcsIGUuZXJyb3JEZXRhaWxzKTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZWNvZ25pemVyLnNlc3Npb25TdG9wcGVkID0gKHMsIGUpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdTZXNzaW9uIHN0b3BwZWQuJyk7XG4gICAgICB0aGlzLnJlY29nbml6ZXIuc3RvcENvbnRpbnVvdXNSZWNvZ25pdGlvbkFzeW5jKCk7XG4gICAgICB0aGlzLmZldGNoRGF0YSgpO1xuICAgIH07XG4gIH1cblxuICB0b2dnbGVSZWNvcmRpbmcoKSB7XG4gICAgdGhpcy5pc1JlY29yZGluZyA9ICF0aGlzLmlzUmVjb3JkaW5nO1xuXG4gICAgaWYgKHRoaXMuaXNSZWNvcmRpbmcpIHtcbiAgICAgIHRoaXMuc3RhcnRSZWNvZ25pdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3BSZWNvZ25pdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0UmVjb2duaXRpb24oKSB7XG4gICAgdGhpcy5yZWNvZ25pemVyLnN0YXJ0Q29udGludW91c1JlY29nbml0aW9uQXN5bmMoKTtcbiAgfVxuXG4gIHN0b3BSZWNvZ25pdGlvbigpIHtcbiAgICB0aGlzLnJlY29nbml6ZXIuc3RvcENvbnRpbnVvdXNSZWNvZ25pdGlvbkFzeW5jKCk7XG4gIH1cblxuICBjaGVja0ZvckNvcDI5Qm90SWQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYm90SWQgPT0gJzY2ZmEzZjI3NmM1ZDcxZTI3MTdiZmVhOCcgfHxcbiAgICAgIHRoaXMuYm90SWQgPT0gJzY3MTYzMzU0NTY1MmRkNzhlZmVjODQ4ZCdcbiAgICApO1xuICB9XG5cbiAgZ2V0TGF0ZXN0VGltZSh0aW1lKTogc3RyaW5nIHtcbiAgICBpZiAodGltZSkge1xuICAgICAgcmV0dXJuIHRpbWU7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZSgpLnRvTG9jYWxlVGltZVN0cmluZyhbXSwge1xuICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgfSk7IC8vIHJldHVybnMgY3VycmVudCB0aW1lIGluICdzaG9ydFRpbWUnIGZvcm1hdFxuICB9XG5cbiAgLyoqIFVzZWQgYnkgdGhlIHZvaWNlIG1vZGFsIHdoZW4gb3BlbmVkIGZyb20gdGhpcyBkcmF3ZXIuICovXG4gIHZvaWNlTW9kYWxDb252ZXJzYXRpb25JZDogc3RyaW5nID0gJyc7XG5cbiAgb3BlblZvaWNlTW9kYWwoKTogdm9pZCB7XG4gICAgY29uc3QgY29udmVyc2F0aW9uSWQgPVxuICAgICAgdGhpcy5jb252ZXJzYXRpb25LZXkgPz9cbiAgICAgIHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkodGhpcy5ib3RJZCwgZmFsc2UpID8/XG4gICAgICAnJztcbiAgICB0aGlzLnZvaWNlTW9kYWxDb252ZXJzYXRpb25JZCA9IGNvbnZlcnNhdGlvbklkO1xuICAgIHRoaXMuc2V0dXBWb2ljZVRyYW5zY3JpcHRzKCk7XG5cbiAgICAvLyBDbG9zZSBleGlzdGluZyBvdmVybGF5IGlmIGFueVxuICAgIGlmICh0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmLmRldGFjaCgpO1xuICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWc6IFZvaWNlTW9kYWxDb25maWcgPSB7XG4gICAgICBhcGlVcmw6IHRoaXMuZW52aXJvbm1lbnQ/LkJBU0VfVVJMID8/ICcnLFxuICAgICAgdG9rZW46IHRoaXMuczI3VG9rZW4gPz8gJycsXG4gICAgICBib3RJZDogdGhpcy5ib3RJZCA/PyAnJyxcbiAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgYXBpS2V5OiB0aGlzLmFwaUtleSA/PyAnJyxcbiAgICAgIGV2ZW50VG9rZW46IHRoaXMuZXZlbnRUb2tlbiA/PyAnJyxcbiAgICAgIGV2ZW50VXJsOiB0aGlzLmV2ZW50VXJsID8/ICcnLFxuICAgICAgZG9tYWluQXV0aG9yaXR5OiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlID8/ICdwcm9kLWxpdGUnLFxuICAgICAgYWdlbnROYW1lOiB0aGlzLmJvdE5hbWUgfHwgJ0FJIEFzc2lzdGFudCcsXG4gICAgICBhZ2VudFJvbGU6IHRoaXMuYm90U2tpbGxzIHx8ICdBSSBBZ2VudCBTcGVjaWFsaXN0JyxcbiAgICAgIGFnZW50QXZhdGFyOiB0aGlzLmJvdEljb24sXG4gICAgfTtcblxuICAgIGNvbnN0IGNsb3NlQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZikge1xuICAgICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmLmRldGFjaCgpO1xuICAgICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZiA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLmNsb3NlVm9pY2VNb2RhbCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZShcbiAgICAgIFtcbiAgICAgICAgeyBwcm92aWRlOiBWT0lDRV9NT0RBTF9DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfSxcbiAgICAgICAgeyBwcm92aWRlOiBWT0lDRV9NT0RBTF9DTE9TRV9DQUxMQkFDSywgdXNlVmFsdWU6IGNsb3NlQ2FsbGJhY2sgfSxcbiAgICAgIF0sXG4gICAgICB0aGlzLmluamVjdG9yLFxuICAgICk7XG5cbiAgICBjb25zdCBvdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKSxcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMub3ZlcmxheVxuICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAuZ2xvYmFsKClcbiAgICAgICAgLmJvdHRvbSgnMCcpXG4gICAgICAgIC5yaWdodCgnMCcpXG4gICAgICAgIC5sZWZ0KCcwJylcbiAgICAgICAgLnRvcCgnMCcpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChcbiAgICAgIFZvaWNlQWdlbnRNb2RhbENvbXBvbmVudCxcbiAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZixcbiAgICAgIGluamVjdG9yLFxuICAgICk7XG4gICAgb3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcbiAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmID0gb3ZlcmxheVJlZjtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNsb3NlVm9pY2VNb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZikge1xuICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZiA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuaXNWb2ljZU1vZGFsT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMudm9pY2VBZ2VudFNlcnZpY2UuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgLy8gUmVsb2FkIGNoYXQgaGlzdG9yeSB3aGVuIHZvaWNlIG1vZGFsIGNsb3NlcyAoc2FtZSBhcyBpbml0aWFsIGxvYWQpXG4gICAgdGhpcy5jaGF0TG9nID0gW107XG4gICAgdGhpcy5mZXRjaENoYXRIaXN0b3J5KCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1hcENoYXRIaXN0b3J5KHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ0Vycm9yIGZldGNoaW5nIGNoYXQgaGlzdG9yeSBhZnRlciB2b2ljZSBtb2RhbCBjbG9zZTonLFxuICAgICAgICAgIGVycixcbiAgICAgICAgKTtcbiAgICAgICAgLy8gRmFsbGJhY2s6IHNob3cgZ3JlZXRpbmcgc28gY2hhdCBpcyBub3QgZW1wdHlcbiAgICAgICAgaWYgKHRoaXMuY2hhdExvZy5sZW5ndGggPT09IDAgJiYgdGhpcy5ncmVldGluZ01zZykge1xuICAgICAgICAgIHRoaXMubWFwQ2hhdEhpc3RvcnkoeyBNZXNzYWdlczogW10gfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBWb2ljZVRyYW5zY3JpcHRzKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIGV4aXN0aW5nIHN1YnNjcmlwdGlvbnNcbiAgICB0aGlzLnZvaWNlVHJhbnNjcmlwdFN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy52b2ljZVRyYW5zY3JpcHRTdWJzY3JpcHRpb25zID0gW107XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gdXNlciB0cmFuc2NyaXB0c1xuICAgIGNvbnN0IHVzZXJTdWIgPSB0aGlzLnZvaWNlQWdlbnRTZXJ2aWNlLnVzZXJUcmFuc2NyaXB0JC5zdWJzY3JpYmUoXG4gICAgICAodHJhbnNjcmlwdCkgPT4ge1xuICAgICAgICBpZiAodHJhbnNjcmlwdC5maW5hbCAmJiB0cmFuc2NyaXB0LnRleHQudHJpbSgpKSB7XG4gICAgICAgICAgLy8gQWRkIHVzZXIgbWVzc2FnZSB0byBjaGF0XG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ3VzZXInLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkodHJhbnNjcmlwdC50ZXh0KSxcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICAgICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIGJvdCB0cmFuc2NyaXB0c1xuICAgIGNvbnN0IGJvdFN1YiA9IHRoaXMudm9pY2VBZ2VudFNlcnZpY2UuYm90VHJhbnNjcmlwdCQuc3Vic2NyaWJlKFxuICAgICAgKHRyYW5zY3JpcHQpID0+IHtcbiAgICAgICAgaWYgKHRyYW5zY3JpcHQgJiYgdHJhbnNjcmlwdC50cmltKCkpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiBsYXN0IG1lc3NhZ2UgaXMgZnJvbSBib3QsIHVwZGF0ZSBpdCwgb3RoZXJ3aXNlIGFkZCBuZXdcbiAgICAgICAgICBjb25zdCBsYXN0TWVzc2FnZSA9IHRoaXMuY2hhdExvZ1t0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMV07XG4gICAgICAgICAgaWYgKGxhc3RNZXNzYWdlICYmIGxhc3RNZXNzYWdlLnR5cGUgPT09ICdhaScpIHtcbiAgICAgICAgICAgIGxhc3RNZXNzYWdlLm1lc3NhZ2UgPSB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheSh0cmFuc2NyaXB0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheSh0cmFuc2NyaXB0KSxcbiAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLnZvaWNlVHJhbnNjcmlwdFN1YnNjcmlwdGlvbnMucHVzaCh1c2VyU3ViLCBib3RTdWIpO1xuICB9XG59XG5cbmV4cG9ydCB7IFZvaWNlTW9kYWxDb25maWcgfSBmcm9tICcuLi92b2ljZS1hZ2VudC92b2ljZS1tb2RhbC10b2tlbnMnO1xuIl19
|
|
3676
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1kcmF3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii9Vc2Vycy9yb2hpdHRoYWt1ci9oaXZlLWdwdC9IaXZlQUktUGFja2FnZXMvQW5ndWxhci9wcm9qZWN0cy9oaXZlZ3B0L2V2ZW50c2dwdC1hbmd1bGFyL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2NoYXQtZHJhd2VyL2NoYXQtZHJhd2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvREFBb0Q7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXpFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUVaLFFBQVEsRUFDUixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLEVBQUUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsZ0JBQWdCLEdBQ2pCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENB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QUFFO3FDQUV0QyxZQUFZLFNBQUMsdUJBQXVCO3FCQUVwQyxTQUFTLFNBQUMsUUFBUTs0QkFDbEIsU0FBUyxTQUFDLGVBQWU7NEJBQ3pCLFNBQVMsU0FBQyxlQUFlOzBCQUd6QixLQUFLO3dCQUNMLEtBQUs7dUJBQ0wsS0FBSztxQkFDTCxLQUFLO3lCQUNMLEtBQUs7MkJBQ0wsS0FBSzt5QkFDTCxLQUFLO3NCQUNMLEtBQUs7d0JBQ0wsS0FBSztvQkFDTCxLQUFLO29CQUNMLEtBQUs7K0JBQ0wsS0FBSztpQ0FDTCxLQUFLOzBCQUNMLEtBQUs7NEJBQ0wsS0FBSzs0QkFDTCxLQUFLO3NCQUNMLEtBQUs7dUJBQ0wsS0FBSzt5QkFDTCxLQUFLOzZCQUNMLEtBQUs7dUJBQ0wsS0FBSzt3QkFDTCxLQUFLO3NCQUNMLEtBQUs7NEJBSUwsS0FBSzsrQkFDTCxLQUFLO2lDQUNMLEtBQUs7dUJBQ0wsS0FBSzs2QkFDTCxLQUFLO3VCQUNMLEtBQUs7aUNBQ0wsS0FBSzttQ0FDTCxLQUFLO29CQUNMLEtBQUs7OEJBQ0wsS0FBSztrQ0FDTCxLQUFLO3dCQUNMLEtBQUs7aUNBQ0wsS0FBSzs4QkFDTCxLQUFLO3VCQUVMLEtBQUs7K0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3FCQUNMLEtBQUs7b0JBQ0wsS0FBSztxQ0FFTCxLQUFLO3NCQUVMLEtBQUs7OEJBRUwsS0FBSzt3Q0FFTCxLQUFLO21DQUVMLEtBQUs7d0JBRUwsS0FBSzsrQkFFTCxLQUFLO21DQUNMLEtBQUs7NEJBQ0wsTUFBTTsyQkFDTixNQUFNO3VCQUNOLE1BQU07NkJBQ04sTUFBTTttQ0FFTixNQUFNO3VCQUNOLE1BQU07OEJBQ04sTUFBTTtpQ0FFTixNQUFNO3dCQUVOLE1BQU07OEJBQ04sTUFBTTsyQkFDTixNQUFNOzBCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQgeyBPdmVybGF5LCBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uL3RyYW5zbGF0aW9ucy90cmFuc2xhdGlvbi5zZXJ2aWNlJztcblxuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREcmF3ZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZm9ybWF0Tm93LCBmb3JtYXRUaW1lU3RhbXBzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgZGV2X2Vudmlyb25tZW50LFxuICBwcm9kX2Vudmlyb25tZW50LFxufSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgQ29udmVyc2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2NvbnZlcnNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNvY2tldFNlcnZpY2UgfSBmcm9tICcuLi9zb2NrZXQtc2VydmljZS5zZXJ2aWNlJztcblxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgKiBhcyBTcGVlY2hTREsgZnJvbSAnbWljcm9zb2Z0LWNvZ25pdGl2ZXNlcnZpY2VzLXNwZWVjaC1zZGsnO1xuaW1wb3J0IHsgQm90c1NlcnZpY2UgfSBmcm9tICcuLi9ib3Quc2VydmljZSc7XG5pbXBvcnQgKiBhcyBtYXJrZWQgZnJvbSAnbWFya2VkJzsgLy8gSW1wb3J0IG1hcmtlZFxuaW1wb3J0IHsgVm9pY2VBZ2VudFNlcnZpY2UgfSBmcm9tICcuLi92b2ljZS1hZ2VudC9zZXJ2aWNlcy92b2ljZS1hZ2VudC5zZXJ2aWNlJztcbmltcG9ydCB7IFZvaWNlQWdlbnRNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3ZvaWNlLWFnZW50L2NvbXBvbmVudHMvdm9pY2UtYWdlbnQtbW9kYWwvdm9pY2UtYWdlbnQtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIFZPSUNFX01PREFMX0NPTkZJRyxcbiAgVk9JQ0VfTU9EQUxfQ0xPU0VfQ0FMTEJBQ0ssXG4gIFZvaWNlTW9kYWxDb25maWcsXG59IGZyb20gJy4uL3ZvaWNlLWFnZW50L3ZvaWNlLW1vZGFsLXRva2Vucyc7XG5cbmV4cG9ydCBlbnVtIGVDbGFzc2lmaWNhdGlvblR5cGUge1xuICBMaXZlID0gJzYwNDBkY2U1NzYxNWYwNzcwYWYxNDI1NicsXG4gIE9uRGVtYW5kID0gJzYwNDBkY2U1NzYxNWYwNzcwYWYxNDI1NycsXG4gIEJyZWFrb3V0ID0gJzYwNDBkY2U1NzYxNWYwNzcwYWYxNDI1OCcsXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2hpdmVncHQtY2hhdC1kcmF3ZXItcGFja2FnZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGF0LWRyYXdlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXQtZHJhd2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDaGF0RHJhd2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBAVmlld0NoaWxkKCdjaGF0TWFpbicpIHByaXZhdGUgY2hhdE1haW46IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ215SW5wdXQnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgbXlJbnB1dCE6IEVsZW1lbnRSZWY8SFRNTFRleHRBcmVhRWxlbWVudD47IC8vIFJlZmVyZW5jZSB0byB0aGUgdGV4dGFyZWFcbiAgQFZpZXdDaGlsZHJlbignY2xvc2VwbGF5Z3JvdW5kYnV0dG9uJylcbiAgY2xvc2VQbGF5Z3JvdW5kQnV0dG9uczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuICBAVmlld0NoaWxkKCdkcmF3ZXInKSBkcmF3ZXIhOiBNYXREcmF3ZXI7XG4gIEBWaWV3Q2hpbGQoJ3NvdXJjZXNEcmF3ZXInKSBzb3VyY2VzRHJhd2VyITogTWF0RHJhd2VyO1xuICBAVmlld0NoaWxkKCdlZGl0b3JzRHJhd2VyJykgZWRpdG9yc0RyYXdlciE6IE1hdERyYXdlcjtcbiAgcHJpdmF0ZSBib2R5T3ZlcmZsb3dDbGFzcyA9ICdib2R5LW92ZXJmbG93LWhpZGRlbic7XG4gIGlzQ29sbGFwc2VkVHJ1ZSA9IGZhbHNlO1xuICBASW5wdXQoKSBjb3BpbG90TmFtZTogc3RyaW5nID0gJ0hpdmVYR1BUJztcbiAgQElucHV0KCkgZmlyc3ROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBsYXN0TmFtZSE6IHN0cmluZztcbiAgQElucHV0KCkgYXBpS2V5ITogc3RyaW5nO1xuICBASW5wdXQoKSBiZ0J1YmJsZUFpITogc3RyaW5nO1xuICBASW5wdXQoKSBiZ0J1YmJsZVVzZXIhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGJnR3JhZGllbnQhOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgYm90TmFtZSE6IHN0cmluZztcbiAgQElucHV0KCkgYm90U2tpbGxzITogc3RyaW5nO1xuICBASW5wdXQoKSBib3RJZCE6IHN0cmluZztcbiAgQElucHV0KCkgb3JnSWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsb3NlQnV0dG9uQ29sb3IhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsb3NlQnV0dG9uYmdDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgY3JlZGVudGlhbHMhOiBbXTtcbiAgQElucHV0KCkgZGF0ZVRpbWVDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgZGF0ZVRleHRDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgZXZlbnRJZCE6IHN0cmluZztcbiAgQElucHV0KCkgZXZlbnRVcmwhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGV2ZW50VG9rZW4hOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHdvcmtzcGFjZVRva2VuITogc3RyaW5nO1xuICBASW5wdXQoKSBzMjdUb2tlbiE6IHN0cmluZztcbiAgQElucHV0KCkgZXZlbnROYW1lITogc3RyaW5nO1xuICBASW5wdXQoKSBib3RJY29uITogc3RyaW5nO1xuICByZWFkb25seSBkaXNwbGF5QXZhdGFyVXJsID1cbiAgICAnaHR0cHM6Ly93d3cuam90Zm9ybS5jb20vdXBsb2Fkcy9tZWhtZXRrYXJha2FzbGkvZm9ybV9maWxlcy8xNTY0NTkzNjY3Njc2YThlODVmMjM3NTguODY5NDU1MzdfaWNvbi5wbmcnO1xuICAvKiogVXNlciBwcm9maWxlIGltYWdlIFVSTC4gRmFsbHMgYmFjayB0byBpbml0aWFscyAoZ2V0VXNlcklkSW5pdGlhbHMoKSkgaWYgbm90IHNldC4gKi9cbiAgQElucHV0KCkgdXNlckF2YXRhclVybD86IHN0cmluZztcbiAgQElucHV0KCkgZm9ybUZpZWxkQmdDb2xvciE6IHN0cmluZztcbiAgQElucHV0KCkgZm9ybUZpZWxkVGV4dENvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBmdWxsVmlldyE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGdyYWRpZW50Q29sb3JzITogc3RyaW5nW107XG4gIEBJbnB1dCgpIGdyZWV0aW5nITogc3RyaW5nO1xuICBASW5wdXQoKSBtZXNzYWdlVGV4dENvbG9yQWkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIG1lc3NhZ2VUZXh0Q29sb3JVc2VyITogc3RyaW5nO1xuICBASW5wdXQoKSBydWxlcyE6IHN0cmluZztcbiAgQElucHV0KCkgc2VuZEJ1dHRvbkNvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBzZW5kQnV0dG9uVGV4dENvbG9yITogc3RyaW5nO1xuICBASW5wdXQoKSBzaG93Q2xvc2UhOiBib29sZWFuO1xuICBASW5wdXQoKSB0aHVtYnNEb3duTWVzc2FnZXMhOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgdGh1bWJzVXBNZXNzYWdlITogc3RyaW5nO1xuICAvKiogVXNlcidzIHNlbGVjdGVkIHRpbWV6b25lIChlLmcuICdBbWVyaWNhL05ld19Zb3JrJyk7IHVzZWQgZm9yIHRpbWVzdGFtcHMgYW5kIHNlc3Npb24gY2FyZCB0aW1lcy4gV2hlbiBub3Qgc2V0LCBzZXNzaW9uIGRhdGEgb3IgbG9jYWwgdGltZSBpcyB1c2VkLiAqL1xuICBASW5wdXQoKSB0aW1lem9uZT86IHN0cmluZztcbiAgQElucHV0KCkgdW5rbm93blJlc3BvbnNlcyE6IFtdO1xuICBASW5wdXQoKSB1c2VPcGVuQWkhOiBib29sZWFuO1xuICBASW5wdXQoKSB1c2VySWQhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzRGV2ITogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgY2hhdCBhdXRvLXNjcm9sbHMgdG8gYm90dG9tIHdoZW4gbmV3IGNvbnRlbnQgaXMgYWRkZWQuIERlZmF1bHQ6IGZhbHNlIChubyBhdXRvIHNjcm9sbCkuICovXG4gIEBJbnB1dCgpIGF1dG9TY3JvbGxPbk5ld01lc3NhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIE9wdGlvbmFsIEFQSSBiYXNlIFVSTCAoZS5nLiBuZ3JvayB0dW5uZWwpLiBXaGVuIHNldCwgYWxsIGNoYXQvdm9pY2UgcmVxdWVzdHMgdXNlIHRoaXMgaW5zdGVhZCBvZiBkZXYvcHJvZCBkZWZhdWx0LiAqL1xuICBASW5wdXQoKSBiYXNlVXJsPzogc3RyaW5nO1xuICAvKiogQ29ubmVjdGlvbnMgbGlzdCBmcm9tIGhvc3QgKGUuZy4gZnJvbSBzdG9yZSBzZWxlY3RDb25uZWN0aW9uc0xpc3QpLiBFYWNoIGl0ZW0gaGFzIHVzZXJJZC4gV2hlbiBzZXQsIHVzZWQgZm9yIENvbm5lY3QvUmVxdWVzdCBTZW50L0Rpc2Nvbm5lY3QgYnV0dG9uIHN0YXRlLiAqL1xuICBASW5wdXQoKSBjb25uZWN0aW9uc0xpc3Q6IGFueVtdID0gW107XG4gIC8qKiBQZW5kaW5nIHNlbnQgcmVxdWVzdCB1c2VyIElEcyBmcm9tIGhvc3QgKGUuZy4gZnJvbSBzdG9yZSBzZWxlY3RQZW5kaW5nQ29ubmVjdGlvbnNTZW50TGlzdCkuIFdoZW4gc2V0LCB1c2VkIGZvciBSZXF1ZXN0IFNlbnQgc3RhdGUuICovXG4gIEBJbnB1dCgpIHBlbmRpbmdTZW50UmVxdWVzdFVzZXJJZHM6IGFueVtdID0gW107XG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgQ29ubmVjdCAvIFJlcXVlc3QgU2VudCAvIERpc2Nvbm5lY3QgYnV0dG9ucyBvbiBhdHRlbmRlZSBjYXJkcyAoZS5nLiBmcm9tIHVzZXJTZXR0aW5ncz8uaXNDb25uZWN0aW9uc0VuYWJsZWQpLiAqL1xuICBASW5wdXQoKSBpc0Nvbm5lY3Rpb25zRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XG4gIC8qKiBXaGVuIHRydWUgKFVOL0NPUCBldmVudHMpOiBzZXNzaW9uIGNhcmQgc2hvd3MgXCJTZXNzaW9uIHR5cGVcIiBsYWJlbCBhbmQgSm9pbi9XYXRjaCBidXR0b25zLiBXaGVuIGZhbHNlOiBzaG93cyBcIk1lZXRpbmcgdHlwZVwiIGxhYmVsIGFuZCBzaW5nbGUgUGxheSBidXR0b24gKHNhbWUgYXMgdGVtcGxhdGUyKS4gKi9cbiAgQElucHV0KCkgaXNVbkV2ZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KCkgYWdhaW5CdXR0b25Db2xvciE6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBhZ2FpbkJ1dHRvblRleHRDb2xvciE6IHN0cmluZ1tdO1xuICBAT3V0cHV0KCkgZmVlZGJhY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgb25DbG9zZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb3BlblBhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHNlc3Npb25BY3Rpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgSm9pbi9XYXRjaCBidXQgYWN0aW9uIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIChlLmcuIHNlc3Npb24gbm90IHN0YXJ0ZWQpLiBIb3N0IGNhbiBzaG93IHRvYXN0ZXIgd2l0aCB0aGUgbWVzc2FnZS4gKi9cbiAgQE91dHB1dCgpIHNlc3Npb25BY3Rpb25CbG9ja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBjbG9zZUJvdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY29ubmVjdFdpdGhVc2VyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgVmlldyBwcm9maWxlIG9uIGEgc3BlYWtlciBjYXJkIChnZXRfZXZlbnRfc3BlYWtlcnMpLiBIb3N0IHNob3VsZCBvcGVuIHNwZWFrZXIgZGV0YWlsIGRyYXdlciBzYW1lIGFzIC9ldmVudHMvOmlkL3NwZWFrZXJzLiAqL1xuICBAT3V0cHV0KCkgdmlld1NwZWFrZXJQcm9maWxlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHNwZWFrZXI6IGFueTsgc3BlYWtlcnM6IGFueVtdIH0+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgVmlldyBCb290aCBvbiBhIHNwb25zb3IvYm9vdGggY2FyZCAoZ2V0X2V2ZW50X3Nwb25zb3JzLCBnZXRfZXZlbnRfYm9vdGhzKS4gSG9zdCBzaG91bGQgbmF2aWdhdGUgdG8gZXZlbnRzLzpldmVudFVybC9zcG9uc29ycy9ib290aHMvOmJvb3RoVXJsLiAqL1xuICBAT3V0cHV0KCkgdmlld0Jvb3RoID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJvb3RoSWQ/OiBzdHJpbmc7IGJvb3RoVXJsPzogc3RyaW5nOyBzcG9uc29yPzogYW55IH0+KCk7XG4gIEBPdXRwdXQoKSBzY2hlZHVsZU1lZXRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHJlZnJlc2hUb2tlbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb3BlblN1cHBvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBhdXRvZ2VuS2V5ID0gJ0F1dG9nZW5fZURKVHRFVS1OQjBSdElwenExdyc7XG4gIGFkZFRvTXlBZ2VuZGFBY3Rpb24gPSAnYWRkX3RvX215X2FnZW5kYSc7XG4gIG15VXBjb21pbmdTZXNzaW9uQWN0aW9uID0gJ215X3VwY29tbWluZ19zZXNzaW9uJztcbiAgY29ubmVjdE9yRm9sbG93QWN0aW9uID0gJ2Nvbm5lY3Rfb3JfZm9sbG93JztcbiAgYWlSZXNwb25zZTogc3RyaW5nID0gJyc7XG4gIGNoYXRMb2c6IGFueVtdID0gW107XG4gIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgZmVlZGJhY2tEb25lOiBib29sZWFuID0gZmFsc2U7XG4gIGdyZWV0aW5nTXNnOiBzdHJpbmcgPSAnJztcbiAgaGFzQmFja2Ryb3BWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpbnB1dDogc3RyaW5nID0gJyc7XG4gIGxpc3RlbmVyQWRkZWQgPSBmYWxzZTtcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBtb2RlOiBzdHJpbmcgPSAnb3Zlcic7XG4gIHF1aWNrUHJvbXB0czogYW55W10gPSBbXTtcbiAgdGh1bWJzRG93bk1zZ0luZGV4ID0gMDtcbiAgdXNlck5hbWU6IHN0cmluZyA9ICcnO1xuICBzaG93U3RhcnRBZ2FpbjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0lPU0RldmljZTogYm9vbGVhbiA9IGZhbHNlO1xuICBzaG93RmVlZEJhY2tJY29uc0luZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgdGVtcGVyYXR1cmU6IG51bWJlciA9IDE7XG4gIC8qKiBTcGVha2VyIGNhY2hlIGJ5IHN0YWZmIGlkIChmaWxsZWQgdmlhIGdldC1ieS1zdGFmZi1pZHMpLiAqL1xuICBzcGVha2VyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAvKiogUHJldmVudCBkdXBsaWNhdGUgc3BlYWtlciBmZXRjaGVzIGFjcm9zcyBtZXNzYWdlcy4gKi9cbiAgcHJpdmF0ZSByZXF1ZXN0ZWRTcGVha2VySWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGVudmlyb25tZW50OiB7XG4gICAgVVNFUlNfQVBJO1xuICAgIEJBU0VfVVJMO1xuICAgIEFHRU5UU19BUEk7XG4gIH07XG4gIHBlbmRpbmdSZXF1ZXN0czogYW55O1xuICBteUNvbm5lY3Rpb25zOiBhbnk7XG4gIGNvbnZlcnNhdGlvbktleTogc3RyaW5nO1xuICBjb25TZXNzaW9uS2V5OiBzdHJpbmcgPSAnJztcbiAgaXNGZXRjaERhdGFGb3I6IGJvb2xlYW47XG4gIGlzNDAxOiBib29sZWFuO1xuICBtc2c6IGFueTtcbiAgY2hhdDogYW55O1xuICBpc1dvcmtmbG93T3BlbjogYm9vbGVhbjtcbiAgb3JnV29ya2Zsb3dzOiBhbnk7XG4gIG9wZW5Xb3JrZmxvd0lucHV0OiBib29sZWFuO1xuICBzZWxlY3RlZFdvcmtmbG93OiBhbnk7XG4gIHdvcmtmbG93Rm9ybTogYW55O1xuICBjdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzczogbnVtYmVyID0gMDtcbiAgY3VycmVudFdvcmtmbG93QWN0aW9uOiBzdHJpbmcgPSAnJztcbiAgZXhlY3V0aW5nV29ya2Zsb3c6IGJvb2xlYW47XG4gIHdvcmtmbG93RXhlY3V0aW9uRGV0YWlsczogYW55O1xuICBzaG93V29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzOiBhbnk7XG4gIGN1cnJlbnRXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM6IGFueTtcblxuICBzcGVlY2hDb25maWc6IFNwZWVjaFNESy5TcGVlY2hDb25maWc7XG4gIHJlY29nbml6ZXI6IFNwZWVjaFNESy5TcGVlY2hSZWNvZ25pemVyO1xuICByZWNvZ25pemVkVGV4dDogc3RyaW5nID0gJyc7XG4gIGF1dGhvcml6YXRpb25Ub2tlbjogc3RyaW5nID0gJyc7XG4gIHJlZ2lvbjogc3RyaW5nID0gJ3dlc3RldXJvcGUnOyAvLyBTZXQgeW91ciBBenVyZSByZWdpb24gaGVyZVxuICBpc1JlY29yZGluZzogYm9vbGVhbjtcbiAgaXNWb2ljZU1vZGFsT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHZvaWNlTW9kYWxPdmVybGF5UmVmOiBPdmVybGF5UmVmIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdm9pY2VUcmFuc2NyaXB0U3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGJvdFNlcnZpY2U6IEJvdHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIHByaXZhdGUgc29ja2V0U2VydmljZTogU29ja2V0U2VydmljZSxcbiAgICBwcml2YXRlIGNvbnZlcnNhdGlvblNlcnZpY2U6IENvbnZlcnNhdGlvblNlcnZpY2UsIC8vIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHZvaWNlQWdlbnRTZXJ2aWNlOiBWb2ljZUFnZW50U2VydmljZSxcbiAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICApIHtcbiAgICB0aGlzLmNoYXRNYWluID0gbmV3IEVsZW1lbnRSZWYobnVsbCk7XG5cbiAgICAvLyBpZiAodGhpcy5wbGF0Zm9ybS5JT1MpIHtcbiAgICAvLyAgIHRoaXMuaXNJT1NEZXZpY2UgPSB0cnVlO1xuICAgIC8vIH1cbiAgfVxuICBnZXRUcmFuc2xhdGlvbihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5nZXRUcmFuc2xhdGlvbihrZXkpO1xuICB9XG5cbiAgLyoqIFRpbWUgc2hvd24gbmV4dCB0byBcIkFzc2lzdGFudFwiIHdoZW4gaW4gdGhpbmtpbmcvbG9hZGluZyBzdGF0ZS4gKi9cbiAgZ2V0TG9hZGluZ1RpbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpO1xuICB9XG5cbiAgLyoqIFVzZXIgaW5pdGlhbHMgZm9yIGF2YXRhciBmYWxsYmFjayAoZS5nLiBcIkpEXCIgZnJvbSBmaXJzdE5hbWUgKyBsYXN0TmFtZSkuICovXG4gIGdldFVzZXJJZEluaXRpYWxzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZmlyc3QgPSAodGhpcy5maXJzdE5hbWUgfHwgJycpLnRyaW0oKTtcbiAgICBjb25zdCBsYXN0ID0gKHRoaXMubGFzdE5hbWUgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoZmlyc3QgJiYgbGFzdCkgcmV0dXJuIChmaXJzdFswXSArIGxhc3RbMF0pLnRvVXBwZXJDYXNlKCk7XG4gICAgaWYgKGZpcnN0KSByZXR1cm4gZmlyc3Quc2xpY2UoMCwgMikudG9VcHBlckNhc2UoKTtcbiAgICBpZiAobGFzdCkgcmV0dXJuIGxhc3Quc2xpY2UoMCwgMikudG9VcHBlckNhc2UoKTtcbiAgICByZXR1cm4gJ1UnO1xuICB9XG5cbiAgLyoqIEF0dGVuZGVlIGluaXRpYWxzIGZvciBjYXJkIHdoZW4gbm8gcGhvdG8gKGUuZy4gXCJWaWpheSBQYWxpd2FsXCIgLT4gXCJWUFwiLCBcIkppbVwiIC0+IFwiSlwiKS4gKi9cbiAgZ2V0QXR0ZW5kZWVJbml0aWFscyhuYW1lOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hbWUgfHwgdHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSByZXR1cm4gJz8nO1xuICAgIGNvbnN0IHBhcnRzID0gbmFtZS50cmltKCkuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKVxuICAgICAgcmV0dXJuIChwYXJ0c1swXVswXSArIHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdWzBdKS50b1VwcGVyQ2FzZSgpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDEpIHJldHVybiBwYXJ0c1swXS5zbGljZSgwLCAyKS50b1VwcGVyQ2FzZSgpO1xuICAgIHJldHVybiAnPyc7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgLy8gSGFuZGxlIGV2ZW50SWQgY2hhbmdlcyB0byB1cGRhdGUgdHJhbnNsYXRpb24gc2VydmljZVxuICAgIGlmIChjaGFuZ2VzLmV2ZW50SWQgJiYgY2hhbmdlcy5ldmVudElkLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy50cmFuc2xhdGlvblNlcnZpY2Uuc2V0RXZlbnRJZChjaGFuZ2VzLmV2ZW50SWQuY3VycmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5zMjdUb2tlbikge1xuICAgICAgaWYgKGNoYW5nZXMuczI3VG9rZW4uY3VycmVudFZhbHVlICE9IGNoYW5nZXMuczI3VG9rZW4ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICB0aGlzLnMyN1Rva2VuID0gY2hhbmdlcy5zMjdUb2tlbi5jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ2lzRmV0Y2hEYXRhRm9yOiAnLCB0aGlzLmlzRmV0Y2hEYXRhRm9yKTtcbiAgICAgICAgY29uc29sZS5sb2coJ21zZzogJywgdGhpcy5tc2cpO1xuICAgICAgICBjb25zb2xlLmxvZygnY2hhdDogJywgdGhpcy5jaGF0KTtcbiAgICAgICAgaWYgKHRoaXMuaXM0MDEpIHtcbiAgICAgICAgICBpZiAodGhpcy5pc0ZldGNoRGF0YUZvcikge1xuICAgICAgICAgICAgdGhpcy5mZXRjaERhdGFGb3IodGhpcy5tc2csIHRoaXMuY2hhdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hEYXRhKHRoaXMubXNnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEbyBOT1QgY2FsbCBpbml0aWFsaXplU29ja2V0KCkgaGVyZS4gU29ja2V0LklPIGlzIGZvciBjaGF0IG9ubHk7IHdlIGRlZmVyXG4gICAgLy8gdW50aWwgdGhlIHVzZXIgYWN0dWFsbHkgdXNlcyBjaGF0IChzZW5kIG1lc3NhZ2Ugb3Igc3RhcnQgbmV3IGNvbnZlcnNhdGlvbilcbiAgICAvLyBzbyB0aGF0IHZvaWNlLW9ubHkgdXNhZ2UgbmV2ZXIgdHJpZ2dlcnMgU29ja2V0LklPIChhdm9pZHMgdjIvdjMgbWlzbWF0Y2ggZXJyb3IpLlxuICAgIGlmIChcbiAgICAgIGNoYW5nZXMub3JnSWQgJiZcbiAgICAgIGNoYW5nZXMub3JnSWQuY3VycmVudFZhbHVlICE9IGNoYW5nZXMub3JnSWQucHJldmlvdXNWYWx1ZVxuICAgICkge1xuICAgICAgdGhpcy5jaGF0U29ja2V0SW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuYmFzZVVybCAmJiB0aGlzLmVudmlyb25tZW50KSB7XG4gICAgICB0aGlzLmFwcGx5QmFzZVVybE92ZXJyaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFdoZW4gYmFzZVVybCBpbnB1dCBpcyBzZXQsIG92ZXJyaWRlIGVudmlyb25tZW50LkJBU0VfVVJMIHNvIGFsbCBjaGF0L3ZvaWNlIHNlcnZpY2VzIHVzZSBpdCAoc3VwcG9ydHMgbmdyb2sgZXRjLikuICovXG4gIHByaXZhdGUgYXBwbHlCYXNlVXJsT3ZlcnJpZGUoKTogdm9pZCB7XG4gICAgY29uc3QgZGVmYXVsdEVudiA9IHRoaXMuaXNEZXYgPyBkZXZfZW52aXJvbm1lbnQgOiBwcm9kX2Vudmlyb25tZW50O1xuICAgIGlmICh0aGlzLmJhc2VVcmwgJiYgdHlwZW9mIHRoaXMuYmFzZVVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuYmFzZVVybC50cmltKCkucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSB7IC4uLmRlZmF1bHRFbnYsIEJBU0VfVVJMOiB1cmwgfTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmVudmlyb25tZW50ID0gZGVmYXVsdEVudjtcbiAgfVxuXG4gIGRvbWFpbkF1dGhvcml0eVZhbHVlOiBhbnkgPSAncHJvZC1saXRlJztcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZXQgdGhlIGV2ZW50SWQgaW4gdHJhbnNsYXRpb24gc2VydmljZSB0byBnZXQgdGhlIGNvcnJlY3QgbGFuZ3VhZ2UgZnJvbSBsb2NhbFN0b3JhZ2VcbiAgICBpZiAodGhpcy5ldmVudElkKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS5zZXRFdmVudElkKHRoaXMuZXZlbnRJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5hcHBseUJhc2VVcmxPdmVycmlkZSgpO1xuXG4gICAgY29uc3QgZG9tYWluID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBoZWFkZXIgdmFsdWUgYmFzZWQgb24gdGhlIGRvbWFpblxuXG4gICAgaWYgKGRvbWFpbi5pbmNsdWRlcygncHJlLWFwcC5zb2NpYWwyNy5jb20nKSkge1xuICAgICAgdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSA9ICdwcmUtcHJvZC1saXRlJztcbiAgICB9IGVsc2UgaWYgKGRvbWFpbi5pbmNsdWRlcygnYXBwLnNvY2lhbDI3LmNvbScpKSB7XG4gICAgICB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlID0gJ3Byb2QtbGl0ZSc7XG4gICAgfSBlbHNlIGlmIChkb21haW4uaW5jbHVkZXMoJ2hpdmVncHQuaW8nKSkge1xuICAgICAgdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSA9ICdoaXZlZ3B0JztcbiAgICB9XG5cbiAgICAvLyB0aGlzLmZldGNoTXlDb25uZWN0aW9ucygpLnN1YnNjcmliZSgpO1xuICAgIC8vIHRoaXMuZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKS5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMuY2hhbmdlVGVtcGVyYXR1cmUodGhpcy50ZW1wZXJhdHVyZSk7XG4gICAgdGhpcy5mZXRjaEJvdENvbmZpZygpLnN1YnNjcmliZShcbiAgICAgIChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgdGhpcy5mZXRjaENoYXRIaXN0b3J5KCkuc3Vic2NyaWJlKFxuICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm1hcENoYXRIaXN0b3J5KHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdCBoaXN0b3J5OicsIGVycik7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXQgaGlzdG9yeTonLCBlcnIpO1xuICAgICAgfSxcbiAgICApO1xuICAgIC8vIHRoaXMuZmV0Y2hBZ2VudHMoKTtcbiAgICAvLyB0aGlzLmZldGNoRWRpdG9yQ29udGVudCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIC8vIHRoaXMuaW5pdGlhbGl6ZVNvY2tldCgpO1xuICAgIHRoaXMuYm90U2VydmljZVxuICAgICAgLmZldGNoU3BlZWNoQXV0aG9yaXphdGlvblRva2VuKFxuICAgICAgICB0aGlzLmJvdElkLFxuICAgICAgICB0aGlzLmFwaUtleSxcbiAgICAgICAgdGhpcy5kb21haW5BdXRob3JpdHlWYWx1ZSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHRva2VuKSA9PiB7XG4gICAgICAgIHRoaXMuYXV0aG9yaXphdGlvblRva2VuID0gdG9rZW47XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZVNwZWVjaFJlY29nbml6ZXIodG9rZW4pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIC8qKiBUcnVlIGFmdGVyIFNvY2tldCBoYXMgYmVlbiBpbml0aWFsaXplZCBmb3IgY2hhdCAoYXZvaWRzIGNvbm5lY3Rpbmcgb24gdm9pY2Utb25seSB1c2FnZSkuICovXG4gIHByaXZhdGUgY2hhdFNvY2tldEluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIENhbGwgYmVmb3JlIGNoYXQgYWN0aW9ucyBzbyBTb2NrZXQuSU8gaXMgdXNlZCBvbmx5IGZvciBjaGF0LCBub3QgZm9yIHZvaWNlLlxuICAgKiBWb2ljZSBhZ2VudCB1c2VzIG5hdGl2ZSBXZWJTb2NrZXQgKyBEYWlseS5qcyBvbmx5OyBTb2NrZXQuSU8gbXVzdCBub3QgcnVuIGR1cmluZyB2b2ljZSBmbG93LlxuICAgKi9cbiAgcHJpdmF0ZSBlbnN1cmVDaGF0U29ja2V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNoYXRTb2NrZXRJbml0aWFsaXplZCB8fCAhdGhpcy5vcmdJZCkgcmV0dXJuO1xuICAgIHRoaXMuY2hhdFNvY2tldEluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICB0aGlzLmluaXRpYWxpemVTb2NrZXQoKTtcbiAgfVxuXG4gIGluaXRpYWxpemVTb2NrZXQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc29ja2V0U2VydmljZS5kaXNjb25uZWN0U29ja2V0Q29ubmVjdGlvbigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zb2NrZXRTZXJ2aWNlLmNvbm5lY3RTb2NrZXRDb25uZWN0aW9uKCk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ1lFUyBJTklUJyk7XG4gICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbl9pZCA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkodGhpcy5ib3RJZCk7XG5cbiAgICAgICAgdGhpcy5zb2NrZXRTZXJ2aWNlLnJlZ2lzdGVyVXNlclNwZWNpZmljSGl2ZVNvY2tldChcbiAgICAgICAgICB0aGlzLmJvdElkLFxuICAgICAgICAgIGNvbnZlcnNhdGlvbl9pZCxcbiAgICAgICAgICB0aGlzLm9yZ0lkLFxuICAgICAgICApO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxpc3RlblNvY2tldHMoKTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICAgIH0sIDIwMCk7XG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIHN1YnNjcmlwdGlvbk5ldzogYW55O1xuICBzb2NrZXREYXRhOiBhbnk7XG5cbiAgLyoqIEluaXRpYWwgbnVtYmVyIG9mIHNlc3Npb24vYXR0ZW5kZWUgY2FyZHMgc2hvd24gYmVmb3JlIFwiU2hvdyBYIG1vcmVcIi4gKi9cbiAgcmVhZG9ubHkgU0VTU0lPTl9DQVJEU19JTklUSUFMID0gNjtcbiAgcmVhZG9ubHkgQVRURU5ERUVfQ0FSRFNfSU5JVElBTCA9IDk7XG4gIHJlYWRvbmx5IFNQRUFLRVJfQ0FSRFNfSU5JVElBTCA9IDk7XG4gIHJlYWRvbmx5IFNQT05TT1JfQ0FSRFNfSU5JVElBTCA9IDk7XG4gIHJlYWRvbmx5IEJPT1RIX1JFUF9DQVJEU19JTklUSUFMID0gOTtcbiAgLyoqIE1lc3NhZ2UgaWQgLT4gdHJ1ZSB3aGVuIHVzZXIgZXhwYW5kZWQgXCJTaG93IG1vcmVcIiBmb3Igc2Vzc2lvbnMvYXR0ZW5kZWVzLiAqL1xuICBleHBhbmRlZFNlc3Npb25DYXJkSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuICBleHBhbmRlZEF0dGVuZGVlQ2FyZElkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgZXhwYW5kZWRTcGVha2VyQ2FyZElkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgZXhwYW5kZWRTcG9uc29yQ2FyZElkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgZXhwYW5kZWRCb290aFJlcENhcmRJZHM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG4gIC8qKiBrZXk6IGAke21lc3NhZ2VJZH06JHthdHRlbmRlZUlkfWAgLT4gdHJ1ZSB3aGVuIGRlc2NyaXB0aW9uIGV4cGFuZGVkICovXG4gIGV4cGFuZGVkQXR0ZW5kZWVEZXNjcmlwdGlvbklkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgLyoqIGtleTogYCR7bWVzc2FnZUlkfToke2F0dGVuZGVlSWR9YCAtPiB0cnVlIHdoZW4gdmlkZW8gaXMgcGxheWluZyAqL1xuICBhdHRlbmRlZVZpZGVvUGxheWluZ0lkczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgLyoqIGtleTogYCR7bWVzc2FnZUlkfToke2F0dGVuZGVlSWR9YCAtPiB0cnVlIHdoZW4gdmlkZW8gaXMgbXV0ZWQgKGRlZmF1bHQgdHJ1ZSkgKi9cbiAgYXR0ZW5kZWVWaWRlb011dGVkSWRzOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG4gIC8qKiBTdHJpcCBIVE1MIHRhZ3MgdG8gcGxhaW4gdGV4dCAoZS5nLiBmb3Igc3BlYWtlci9hdHRlbmRlZSBkZXNjcmlwdGlvbiBmcm9tIEFQSSkuICovXG4gIHN0cmlwSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghaHRtbCB8fCB0eXBlb2YgaHRtbCAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcbiAgICBjb25zdCBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGh0bWwsICd0ZXh0L2h0bWwnKTtcbiAgICBjb25zdCB0ZXh0ID0gZG9jLmJvZHk/LnRleHRDb250ZW50ID8/ICcnO1xuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoL1xccysvZywgJyAnKS50cmltKCk7XG4gIH1cblxuICBnZXRBdHRlbmRlZURlc2NyaXB0aW9uKGF0dGVuZGVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJhdyA9XG4gICAgICBhdHRlbmRlZT8uZGVzY3JpcHRpb24gPz8gYXR0ZW5kZWU/LmludGVyZXN0cyA/PyBhdHRlbmRlZT8uam9iVGl0bGUgPz8gJyc7XG4gICAgY29uc3Qgc3RyID0gdHlwZW9mIHJhdyA9PT0gJ3N0cmluZycgPyByYXcudHJpbSgpIDogU3RyaW5nKHJhdyA/PyAnJykudHJpbSgpO1xuICAgIC8vIElmIGl0IGxvb2tzIGxpa2UgSFRNTCwgc3RyaXAgdGFncyBzbyBjYXJkIHNob3dzIHBsYWluIHRleHRcbiAgICBpZiAoc3RyICYmIC88W2Etel1bXFxzXFxTXSo+L2kudGVzdChzdHIpKSByZXR1cm4gdGhpcy5zdHJpcEh0bWwoc3RyKTtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgc2hvdWxkU2hvd0F0dGVuZGVlUmVhZE1vcmUoYXR0ZW5kZWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIGhldXJpc3RpYzogb25seSBzaG93IHRvZ2dsZSBmb3IgcmVhc29uYWJseSBsb25nIHRleHRcbiAgICByZXR1cm4gdGhpcy5nZXRBdHRlbmRlZURlc2NyaXB0aW9uKGF0dGVuZGVlKS5sZW5ndGggPiA5MDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXR0ZW5kZWVEZXNjS2V5KGNoYXQ6IGFueSwgYXR0ZW5kZWU6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IG1zZ0lkID0gY2hhdD8uX2lkO1xuICAgIGNvbnN0IGF0dGVuZGVlSWQgPSBhdHRlbmRlZT8uaWQgPz8gYXR0ZW5kZWU/Ll9pZCA/PyBhdHRlbmRlZT8udXNlcklkO1xuICAgIGlmICghbXNnSWQgfHwgIWF0dGVuZGVlSWQpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBgJHttc2dJZH06JHthdHRlbmRlZUlkfWA7XG4gIH1cblxuICBpc0F0dGVuZGVlRGVzY3JpcHRpb25FeHBhbmRlZChjaGF0OiBhbnksIGF0dGVuZGVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlRGVzY0tleShjaGF0LCBhdHRlbmRlZSk7XG4gICAgaWYgKCFrZXkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gISF0aGlzLmV4cGFuZGVkQXR0ZW5kZWVEZXNjcmlwdGlvbklkc1trZXldO1xuICB9XG5cbiAgdG9nZ2xlQXR0ZW5kZWVEZXNjcmlwdGlvbihjaGF0OiBhbnksIGF0dGVuZGVlOiBhbnksIGV2PzogRXZlbnQpOiB2b2lkIHtcbiAgICBldj8uc3RvcFByb3BhZ2F0aW9uPy4oKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlRGVzY0tleShjaGF0LCBhdHRlbmRlZSk7XG4gICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICBjb25zdCBuZXh0ID0gIXRoaXMuZXhwYW5kZWRBdHRlbmRlZURlc2NyaXB0aW9uSWRzW2tleV07XG4gICAgdGhpcy5leHBhbmRlZEF0dGVuZGVlRGVzY3JpcHRpb25JZHMgPSB7XG4gICAgICAuLi50aGlzLmV4cGFuZGVkQXR0ZW5kZWVEZXNjcmlwdGlvbklkcyxcbiAgICAgIFtrZXldOiBuZXh0LFxuICAgIH07XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZXRBdHRlbmRlZVZpZGVvVXJsKGF0dGVuZGVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IGF0dGVuZGVlPy51c2VyVmlkZW9zTW9kZWw/LnVybDtcbiAgICByZXR1cm4gdHlwZW9mIHVybCA9PT0gJ3N0cmluZycgPyB1cmwudHJpbSgpIDogJyc7XG4gIH1cblxuICBnZXRBdHRlbmRlZVZpZGVvUG9zdGVyKGF0dGVuZGVlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBvc3RlciA9IGF0dGVuZGVlPy51c2VyVmlkZW9zTW9kZWw/LnRodW1ibmFpbDtcbiAgICByZXR1cm4gdHlwZW9mIHBvc3RlciA9PT0gJ3N0cmluZycgPyBwb3N0ZXIudHJpbSgpIDogJyc7XG4gIH1cblxuICBwcml2YXRlIGdldEF0dGVuZGVlTWVkaWFLZXkoY2hhdDogYW55LCBhdHRlbmRlZTogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbXNnSWQgPSBjaGF0Py5faWQ7XG4gICAgY29uc3QgYXR0ZW5kZWVJZCA9IGF0dGVuZGVlPy5pZCA/PyBhdHRlbmRlZT8uX2lkID8/IGF0dGVuZGVlPy51c2VySWQ7XG4gICAgaWYgKCFtc2dJZCB8fCAhYXR0ZW5kZWVJZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGAke21zZ0lkfToke2F0dGVuZGVlSWR9YDtcbiAgfVxuXG4gIGlzQXR0ZW5kZWVWaWRlb011dGVkKGNoYXQ6IGFueSwgYXR0ZW5kZWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0QXR0ZW5kZWVNZWRpYUtleShjaGF0LCBhdHRlbmRlZSk7XG4gICAgaWYgKCFrZXkpIHJldHVybiB0cnVlO1xuICAgIC8vIGRlZmF1bHQgdHJ1ZSAobXV0ZWQpIHVubGVzcyBleHBsaWNpdGx5IHNldCB0byBmYWxzZVxuICAgIHJldHVybiB0aGlzLmF0dGVuZGVlVmlkZW9NdXRlZElkc1trZXldICE9PSBmYWxzZTtcbiAgfVxuXG4gIGlzQXR0ZW5kZWVWaWRlb1BsYXlpbmcoY2hhdDogYW55LCBhdHRlbmRlZTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRBdHRlbmRlZU1lZGlhS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiAhIXRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHNba2V5XTtcbiAgfVxuXG4gIHRvZ2dsZUF0dGVuZGVlVmlkZW9NdXRlKFxuICAgIGNoYXQ6IGFueSxcbiAgICBhdHRlbmRlZTogYW55LFxuICAgIHZpZGVvRWw/OiBIVE1MVmlkZW9FbGVtZW50IHwgbnVsbCxcbiAgICBldj86IEV2ZW50LFxuICApOiB2b2lkIHtcbiAgICBldj8uc3RvcFByb3BhZ2F0aW9uPy4oKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEF0dGVuZGVlTWVkaWFLZXkoY2hhdCwgYXR0ZW5kZWUpO1xuICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgY29uc3QgbmV4dCA9ICF0aGlzLmlzQXR0ZW5kZWVWaWRlb011dGVkKGNoYXQsIGF0dGVuZGVlKTtcbiAgICB0aGlzLmF0dGVuZGVlVmlkZW9NdXRlZElkcyA9IHsgLi4udGhpcy5hdHRlbmRlZVZpZGVvTXV0ZWRJZHMsIFtrZXldOiBuZXh0IH07XG4gICAgaWYgKHZpZGVvRWwpIHtcbiAgICAgIHZpZGVvRWwubXV0ZWQgPSBuZXh0O1xuICAgICAgLy8gU29tZSBicm93c2VycyByZXF1aXJlIHZvbHVtZSB0byBiZSA+MCB3aGVuIHVubXV0aW5nXG4gICAgICBpZiAoIW5leHQgJiYgKHZpZGVvRWwudm9sdW1lID09IG51bGwgfHwgdmlkZW9FbC52b2x1bWUgPT09IDApKSB7XG4gICAgICAgIHZpZGVvRWwudm9sdW1lID0gMTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB0b2dnbGVBdHRlbmRlZVZpZGVvUGxheShcbiAgICBjaGF0OiBhbnksXG4gICAgYXR0ZW5kZWU6IGFueSxcbiAgICB2aWRlb0VsPzogSFRNTFZpZGVvRWxlbWVudCB8IG51bGwsXG4gICAgZXY/OiBFdmVudCxcbiAgKTogdm9pZCB7XG4gICAgZXY/LnN0b3BQcm9wYWdhdGlvbj8uKCk7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRBdHRlbmRlZU1lZGlhS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIGNvbnN0IG5leHQgPSAhdGhpcy5pc0F0dGVuZGVlVmlkZW9QbGF5aW5nKGNoYXQsIGF0dGVuZGVlKTtcbiAgICB0aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzID0ge1xuICAgICAgLi4udGhpcy5hdHRlbmRlZVZpZGVvUGxheWluZ0lkcyxcbiAgICAgIFtrZXldOiBuZXh0LFxuICAgIH07XG4gICAgaWYgKHZpZGVvRWwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgY29uc3QgcCA9IHZpZGVvRWwucGxheSgpO1xuICAgICAgICAgIGlmIChwICYmIHR5cGVvZiAocCBhcyBhbnkpLmNhdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAocCBhcyBhbnkpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgLy8gSWYgcGxheSBmYWlscywgcmVmbGVjdCBwYXVzZWQgc3RhdGVcbiAgICAgICAgICAgICAgdGhpcy5hdHRlbmRlZVZpZGVvUGxheWluZ0lkcyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzLFxuICAgICAgICAgICAgICAgIFtrZXldOiBmYWxzZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmlkZW9FbC5wYXVzZSgpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25BdHRlbmRlZVZpZGVvUGxheVN0YXRlKGNoYXQ6IGFueSwgYXR0ZW5kZWU6IGFueSwgaXNQbGF5aW5nOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRBdHRlbmRlZU1lZGlhS2V5KGNoYXQsIGF0dGVuZGVlKTtcbiAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzW2tleV0gPT09IGlzUGxheWluZykgcmV0dXJuO1xuICAgIHRoaXMuYXR0ZW5kZWVWaWRlb1BsYXlpbmdJZHMgPSB7XG4gICAgICAuLi50aGlzLmF0dGVuZGVlVmlkZW9QbGF5aW5nSWRzLFxuICAgICAgW2tleV06IGlzUGxheWluZyxcbiAgICB9O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBzZXNzaW9uIGRhdGUvdGltZSBmb3IgZGlzcGxheS5cbiAgICogQHBhcmFtIGRhdGVUaW1lUmFuZ2UgU2Vzc2lvbiBzdGFydC9lbmQgKG9iamVjdCB3aXRoIHN0YXJ0L2VuZCBvciBzdHJpbmcgd2l0aCBcIlN0YXJ0OiAuLi4gRW5kOiAuLi5cIilcbiAgICogQHBhcmFtIGRpc3BsYXlUaW1lWm9uZSBPcHRpb25hbCB1c2VyLXNlbGVjdGVkIHRpbWV6b25lIChlLmcuICdBbWVyaWNhL05ld19Zb3JrJyk7IHdoZW4gc2V0LCB0aW1lcyBhcmUgc2hvd24gaW4gdGhpcyB6b25lLlxuICAgKi9cbiAgZm9ybWF0U2Vzc2lvbldoZW4oXG4gICAgZGF0ZVRpbWVSYW5nZTogc3RyaW5nIHwgeyBzdGFydD86IHN0cmluZzsgZW5kPzogc3RyaW5nIH0gfCBudWxsLFxuICAgIGRpc3BsYXlUaW1lWm9uZT86IHN0cmluZyxcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBsb2NhbGVPcHRzID0gZGlzcGxheVRpbWVab25lID8geyB0aW1lWm9uZTogZGlzcGxheVRpbWVab25lIH0gOiB7fTtcbiAgICBpZiAoIWRhdGVUaW1lUmFuZ2UpIHJldHVybiAnJztcbiAgICBpZiAoXG4gICAgICB0eXBlb2YgZGF0ZVRpbWVSYW5nZSA9PT0gJ29iamVjdCcgJiZcbiAgICAgIGRhdGVUaW1lUmFuZ2U/LnN0YXJ0ICYmXG4gICAgICBkYXRlVGltZVJhbmdlPy5lbmRcbiAgICApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RHQgPSBuZXcgRGF0ZShkYXRlVGltZVJhbmdlLnN0YXJ0KTtcbiAgICAgICAgY29uc3QgZW5kRHQgPSBuZXcgRGF0ZShkYXRlVGltZVJhbmdlLmVuZCk7XG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXR0ZWQgPSBzdGFydER0LnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgbW9udGg6ICdzaG9ydCcsXG4gICAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgICAgeWVhcjogJ251bWVyaWMnLFxuICAgICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBzdGFydER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPSBlbmREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyMTI6IGZhbHNlLFxuICAgICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYCR7ZGF0ZUZvcm1hdHRlZH0gfCAke3N0YXJ0VGltZX0gLSAke2VuZFRpbWV9YDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0ZVRpbWVSYW5nZSAhPT0gJ3N0cmluZycpIHJldHVybiAnJztcbiAgICBjb25zdCBzdGFydE1hdGNoID0gZGF0ZVRpbWVSYW5nZS5tYXRjaChcbiAgICAgIC9TdGFydDpcXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9XFxzK1xcZHsyfTpcXGR7Mn06XFxkezJ9KS8sXG4gICAgKTtcbiAgICBjb25zdCBlbmRNYXRjaCA9IGRhdGVUaW1lUmFuZ2UubWF0Y2goXG4gICAgICAvRW5kOlxccyooXFxkezR9LVxcZHsyfS1cXGR7Mn1cXHMrXFxkezJ9OlxcZHsyfTpcXGR7Mn0pLyxcbiAgICApO1xuICAgIGlmICghc3RhcnRNYXRjaCB8fCAhZW5kTWF0Y2gpIHJldHVybiBkYXRlVGltZVJhbmdlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFydFN0ciA9IHN0YXJ0TWF0Y2hbMV07XG4gICAgICBjb25zdCBlbmRTdHIgPSBlbmRNYXRjaFsxXTtcbiAgICAgIGNvbnN0IHN0YXJ0RHQgPSBuZXcgRGF0ZShzdGFydFN0ci5yZXBsYWNlKCcgJywgJ1QnKSArICdaJyk7XG4gICAgICBjb25zdCBlbmREdCA9IG5ldyBEYXRlKGVuZFN0ci5yZXBsYWNlKCcgJywgJ1QnKSArICdaJyk7XG4gICAgICBjb25zdCBkYXRlRm9ybWF0dGVkID0gc3RhcnREdC50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgZGF5OiAnbnVtZXJpYycsXG4gICAgICAgIHllYXI6ICdudW1lcmljJyxcbiAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhcnRUaW1lU2hvcnQgPSBzdGFydER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVuZFRpbWVTaG9ydCA9IGVuZER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgIGhvdXI6ICcyLWRpZ2l0JyxcbiAgICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBgJHtkYXRlRm9ybWF0dGVkfSB8ICR7c3RhcnRUaW1lU2hvcnR9IC0gJHtlbmRUaW1lU2hvcnR9YDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBkYXRlVGltZVJhbmdlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGF0ZSBiYWRnZSAoZGF5ICsgbW9udGgpIGZvciBzZXNzaW9uIGNhcmQgZnJvbSBkYXRlVGltZVJhbmdlLlxuICAgKiBIYW5kbGVzIGRhdGVUaW1lUmFuZ2UgYXMgc3RyaW5nIChcIlN0YXJ0OiAyMDI2LTAyLTIwIDAxOjA1OjAwLCBFbmQ6IC4uLlwiKSBvciBvYmplY3QgeyBzdGFydCwgZW5kIH0uXG4gICAqIFVzZXMgZGlzcGxheVRpbWVab25lIG9ubHkgd2hlbiBpdCBpcyBhIHZhbGlkIElBTkEgaWRlbnRpZmllcjsgb3RoZXJ3aXNlIGZvcm1hdHMgaW4gbG9jYWwgdGltZS5cbiAgICovXG4gIGdldFNlc3Npb25EYXRlQmFkZ2UoXG4gICAgZGF0ZVRpbWVSYW5nZTogc3RyaW5nIHwgeyBzdGFydD86IHN0cmluZzsgZW5kPzogc3RyaW5nIH0gfCBudWxsLFxuICAgIGRpc3BsYXlUaW1lWm9uZT86IHN0cmluZyxcbiAgKTogeyBkYXk6IHN0cmluZzsgbW9udGg6IHN0cmluZyB9IHtcbiAgICBpZiAoIWRhdGVUaW1lUmFuZ2UpIHJldHVybiB7IGRheTogJycsIG1vbnRoOiAnJyB9O1xuICAgIHRyeSB7XG4gICAgICBsZXQgc3RhcnREdDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICAgICAgaWYgKHR5cGVvZiBkYXRlVGltZVJhbmdlID09PSAnb2JqZWN0JyAmJiBkYXRlVGltZVJhbmdlPy5zdGFydCkge1xuICAgICAgICBzdGFydER0ID0gbmV3IERhdGUoZGF0ZVRpbWVSYW5nZS5zdGFydCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRlVGltZVJhbmdlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBzdGFydE1hdGNoID0gZGF0ZVRpbWVSYW5nZS5tYXRjaChcbiAgICAgICAgICAvU3RhcnQ6XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfVxccytcXGR7Mn06XFxkezJ9OlxcZHsyfSkvLFxuICAgICAgICApO1xuICAgICAgICBpZiAoc3RhcnRNYXRjaClcbiAgICAgICAgICBzdGFydER0ID0gbmV3IERhdGUoc3RhcnRNYXRjaFsxXS5yZXBsYWNlKCcgJywgJ1QnKSArICdaJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXN0YXJ0RHQgfHwgaXNOYU4oc3RhcnREdC5nZXRUaW1lKCkpKSByZXR1cm4geyBkYXk6ICcnLCBtb250aDogJycgfTtcbiAgICAgIGNvbnN0IGxvY2FsZU9wdHMgPSBkaXNwbGF5VGltZVpvbmUgPyB7IHRpbWVab25lOiBkaXNwbGF5VGltZVpvbmUgfSA6IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF5ID0gc3RhcnREdC50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIGRheTogJ251bWVyaWMnLFxuICAgICAgICAgIC4uLmxvY2FsZU9wdHMsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHN0YXJ0RHQudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycsIHtcbiAgICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgZGF5LCBtb250aCB9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIGRpc3BsYXlUaW1lWm9uZSBtYXkgYmUgbm9uLUlBTkEgKGUuZy4gXCIoVVRDLTAzOjAwKSBCcmFzaWxpYVwiKTsgZm9ybWF0IHdpdGhvdXQgdGltZVpvbmVcbiAgICAgICAgY29uc3QgZGF5ID0gc3RhcnREdC50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJywgeyBkYXk6ICdudW1lcmljJyB9KTtcbiAgICAgICAgY29uc3QgbW9udGggPSBzdGFydER0LnRvTG9jYWxlRGF0ZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnc2hvcnQnIH0pO1xuICAgICAgICByZXR1cm4geyBkYXksIG1vbnRoIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4geyBkYXk6ICcnLCBtb250aDogJycgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRpbWUgcmFuZ2Ugb25seSAoZS5nLiBcIjk6MDAgQU0gLSAxMDozMCBBTVwiKSBmb3Igc2Vzc2lvbiBjYXJkLlxuICAgKiBGYWxscyBiYWNrIHRvIGZvcm1hdHRpbmcgd2l0aG91dCB0aW1lWm9uZSB3aGVuIGRpc3BsYXlUaW1lWm9uZSBpcyBub3QgYSB2YWxpZCBJQU5BIGlkZW50aWZpZXIuXG4gICAqL1xuICBmb3JtYXRTZXNzaW9uVGltZVJhbmdlKFxuICAgIGRhdGVUaW1lUmFuZ2U6IHN0cmluZyB8IHsgc3RhcnQ/OiBzdHJpbmc7IGVuZD86IHN0cmluZyB9IHwgbnVsbCxcbiAgICBkaXNwbGF5VGltZVpvbmU/OiBzdHJpbmcsXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlVGltZVJhbmdlKSByZXR1cm4gJyc7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzdGFydER0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgICBsZXQgZW5kRHQ6IERhdGUgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGRhdGVUaW1lUmFuZ2UgPT09ICdvYmplY3QnICYmXG4gICAgICAgIGRhdGVUaW1lUmFuZ2U/LnN0YXJ0ICYmXG4gICAgICAgIGRhdGVUaW1lUmFuZ2U/LmVuZFxuICAgICAgKSB7XG4gICAgICAgIHN0YXJ0RHQgPSBuZXcgRGF0ZShkYXRlVGltZVJhbmdlLnN0YXJ0KTtcbiAgICAgICAgZW5kRHQgPSBuZXcgRGF0ZShkYXRlVGltZVJhbmdlLmVuZCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRlVGltZVJhbmdlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBzdGFydE1hdGNoID0gZGF0ZVRpbWVSYW5nZS5tYXRjaChcbiAgICAgICAgICAvU3RhcnQ6XFxzKihcXGR7NH0tXFxkezJ9LVxcZHsyfVxccytcXGR7Mn06XFxkezJ9OlxcZHsyfSkvLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBlbmRNYXRjaCA9IGRhdGVUaW1lUmFuZ2UubWF0Y2goXG4gICAgICAgICAgL0VuZDpcXHMqKFxcZHs0fS1cXGR7Mn0tXFxkezJ9XFxzK1xcZHsyfTpcXGR7Mn06XFxkezJ9KS8sXG4gICAgICAgICk7XG4gICAgICAgIGlmIChzdGFydE1hdGNoKVxuICAgICAgICAgIHN0YXJ0RHQgPSBuZXcgRGF0ZShzdGFydE1hdGNoWzFdLnJlcGxhY2UoJyAnLCAnVCcpICsgJ1onKTtcbiAgICAgICAgaWYgKGVuZE1hdGNoKSBlbmREdCA9IG5ldyBEYXRlKGVuZE1hdGNoWzFdLnJlcGxhY2UoJyAnLCAnVCcpICsgJ1onKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RhcnREdCB8fCBpc05hTihzdGFydER0LmdldFRpbWUoKSkpIHJldHVybiAnJztcbiAgICAgIGNvbnN0IGxvY2FsZU9wdHMgPSBkaXNwbGF5VGltZVpvbmUgPyB7IHRpbWVab25lOiBkaXNwbGF5VGltZVpvbmUgfSA6IHt9O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gc3RhcnREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyMTI6IHRydWUsXG4gICAgICAgICAgLi4ubG9jYWxlT3B0cyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGVuZFRpbWUgPVxuICAgICAgICAgIGVuZER0ICYmICFpc05hTihlbmREdC5nZXRUaW1lKCkpXG4gICAgICAgICAgICA/IGVuZER0LnRvTG9jYWxlVGltZVN0cmluZygnZW4tVVMnLCB7XG4gICAgICAgICAgICAgICAgaG91cjogJ251bWVyaWMnLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogJzItZGlnaXQnLFxuICAgICAgICAgICAgICAgIGhvdXIxMjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAuLi5sb2NhbGVPcHRzLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgOiAnJztcbiAgICAgICAgcmV0dXJuIGVuZFRpbWUgPyBgJHtzdGFydFRpbWV9IC0gJHtlbmRUaW1lfWAgOiBzdGFydFRpbWU7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gc3RhcnREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICBob3VyMTI6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbmRUaW1lID1cbiAgICAgICAgICBlbmREdCAmJiAhaXNOYU4oZW5kRHQuZ2V0VGltZSgpKVxuICAgICAgICAgICAgPyBlbmREdC50b0xvY2FsZVRpbWVTdHJpbmcoJ2VuLVVTJywge1xuICAgICAgICAgICAgICAgIGhvdXI6ICdudW1lcmljJyxcbiAgICAgICAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0JyxcbiAgICAgICAgICAgICAgICBob3VyMTI6IHRydWUsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICByZXR1cm4gZW5kVGltZSA/IGAke3N0YXJ0VGltZX0gLSAke2VuZFRpbWV9YCA6IHN0YXJ0VGltZTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSUFOQSB0aW1lem9uZSBJRCAtPiBhYmJyZXZpYXRpb24gbWFwIChtYXRjaGVzIHBhcmVudCBhcHAgc2Vzc2lvbi1sYXlvdXRzIC8gdGltZXpvbmVzLmVudW0gVGltZVpvbmVzKS5cbiAgICogVXNlZCBzbyBzZXNzaW9uIGNhcmRzIHNob3cgU0FTVCwgRUVTVCwgU0FXU1QsIEVTQVNULCBldGMuIGluc3RlYWQgb2YgR01UKzEsIEdNVCsyLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgVFpfQUJCUl9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgJ1BhY2lmaWMvS2lyaXRpbWF0aSc6ICdMSU5UJyxcbiAgICAnUGFjaWZpYy9BcGlhJzogJ1NTVCcsXG4gICAgJ1BhY2lmaWMvVG9uZ2F0YXB1JzogJ1RTVCcsXG4gICAgJ0V0Yy9HTVQtMTMnOiAnVVRDJyxcbiAgICAnUGFjaWZpYy9DaGF0aGFtJzogJ0NIQURUJyxcbiAgICAnQXNpYS9LYW1jaGF0a2EnOiAnQU5BVCcsXG4gICAgJ1BhY2lmaWMvRmlqaSc6ICdGSlQnLFxuICAgICdFdGMvR01ULTEyJzogJ1UnLFxuICAgICdQYWNpZmljL0F1Y2tsYW5kJzogJ05aU1QnLFxuICAgICdQYWNpZmljL0d1YWRhbGNhbmFsJzogJ0NQU1QnLFxuICAgICdBc2lhL1Nha2hhbGluJzogJ1NBS1QnLFxuICAgICdQYWNpZmljL05vcmZvbGsnOiAnTkZUJyxcbiAgICAnQXNpYS9NYWdhZGFuJzogJ01BR1QnLFxuICAgICdBc2lhL1NyZWRuZWtvbHltc2snOiAnU1JFVCcsXG4gICAgJ1BhY2lmaWMvQm91Z2FpbnZpbGxlJzogJ0JTVCcsXG4gICAgJ0F1c3RyYWxpYS9Mb3JkX0hvd2UnOiAnTEhTVCcsXG4gICAgJ0FzaWEvVmxhZGl2b3N0b2snOiAnVkxBVCcsXG4gICAgJ0F1c3RyYWxpYS9Ib2JhcnQnOiAnQUVTVCcsXG4gICAgJ1BhY2lmaWMvUG9ydF9Nb3Jlc2J5JzogJ0NoU1QnLFxuICAgICdBdXN0cmFsaWEvU3lkbmV5JzogJ0FFU1QnLFxuICAgICdBdXN0cmFsaWEvQnJpc2JhbmUnOiAnQVdTVCcsXG4gICAgJ0F1c3RyYWxpYS9EYXJ3aW4nOiAnQUNTVCcsXG4gICAgJ0F1c3RyYWxpYS9BZGVsYWlkZSc6ICdBQ1NUJyxcbiAgICAnQXNpYS9ZYWt1dHNrJzogJ1lBS1QnLFxuICAgICdBc2lhL1Nlb3VsJzogJ0tTVCcsXG4gICAgJ0FzaWEvUHlvbmd5YW5nJzogJ0tTVCcsXG4gICAgJ0FzaWEvVG9reW8nOiAnVFNUJyxcbiAgICAnQXNpYS9DaGl0YSc6ICdZQUtUJyxcbiAgICAnQXVzdHJhbGlhL0V1Y2xhJzogJ0FDV1NUJyxcbiAgICAnQXNpYS9VbGFhbmJhYXRhcic6ICdGU1QnLFxuICAgICdBc2lhL1RhaXBlaSc6ICdVTEFUJyxcbiAgICAnQXVzdHJhbGlhL1BlcnRoJzogJ0FXU1QnLFxuICAgICdBc2lhL1NpbmdhcG9yZSc6ICdTTlNUJyxcbiAgICAnQXNpYS9Jcmt1dHNrJzogJ0lSS1QnLFxuICAgICdBc2lhL1NoYW5naGFpJzogJ0NTVCcsXG4gICAgJ0FzaWEvVG9tc2snOiAnTVNEJyxcbiAgICAnQXNpYS9Ob3Zvc2liaXJzayc6ICdOT1ZUJyxcbiAgICAnQXNpYS9LcmFzbm95YXJzayc6ICdLUkFUJyxcbiAgICAnQXNpYS9Ib3ZkJzogJ1NBU1QnLFxuICAgICdBc2lhL0Jhcm5hdWwnOiAnTVNLJyxcbiAgICAnQXNpYS9CYW5na29rJzogJ1RIQScsXG4gICAgJ0FzaWEvWWFuZ29uJzogJ01ZU1QnLFxuICAgICdBc2lhL09tc2snOiAnT01TVCcsXG4gICAgJ0FzaWEvRGhha2EnOiAnQlNUJyxcbiAgICAnQXNpYS9BbG1hdHknOiAnTkNBU1QnLFxuICAgICdBc2lhL0thdGhtYW5kdSc6ICdOUFQnLFxuICAgICdBc2lhL0NvbG9tYm8nOiAnU0xUJyxcbiAgICAnQXNpYS9Lb2xrYXRhJzogJ0lTVCcsXG4gICAgJ0FzaWEvQ2FsY3V0dGEnOiAnSVNUJyxcbiAgICAnQXNpYS9ReXp5bG9yZGEnOiAnQ0FTVCcsXG4gICAgJ0FzaWEvS2FyYWNoaSc6ICdQS1QnLFxuICAgICdBc2lhL1lla2F0ZXJpbmJ1cmcnOiAnWUVLVCcsXG4gICAgJ0FzaWEvVGFzaGtlbnQnOiAnV0FTVCcsXG4gICAgJ0FzaWEvS2FidWwnOiAnQUZUJyxcbiAgICAnQXNpYS9ZZXJldmFuJzogJ0FNVCcsXG4gICAgJ0V1cm9wZS9Wb2xnb2dyYWQnOiAnVlNUJyxcbiAgICAnQXNpYS9UYmlsaXNpJzogJ0dFVCcsXG4gICAgJ0V1cm9wZS9TYXJhdG92JzogJ1NMVCcsXG4gICAgJ0luZGlhbi9NYXVyaXRpdXMnOiAnTVVUJyxcbiAgICAnRXVyb3BlL1NhbWFyYSc6ICdTQU1UJyxcbiAgICAnQXNpYS9CYWt1JzogJ0FaVCcsXG4gICAgJ0V1cm9wZS9Bc3RyYWtoYW4nOiAnU0FNVCcsXG4gICAgJ0FzaWEvRHViYWknOiAnQVJCU1QnLFxuICAgICdBc2lhL1RlaHJhbic6ICdJRFQnLFxuICAgICdBZnJpY2EvTmFpcm9iaSc6ICdFQVNUJyxcbiAgICAnRXVyb3BlL01vc2Nvdyc6ICdNU0snLFxuICAgICdFdXJvcGUvTWluc2snOiAnTVNLJyxcbiAgICAnQXNpYS9SaXlhZGgnOiAnQVNUJyxcbiAgICAnRXVyb3BlL0lzdGFuYnVsJzogJ1REVCcsXG4gICAgJ0FzaWEvQmFnaGRhZCc6ICdBU1QnLFxuICAgICdBZnJpY2EvV2luZGhvZWsnOiAnTlNUJyxcbiAgICAnQWZyaWNhL1RyaXBvbGknOiAnTFNUJyxcbiAgICAnQWZyaWNhL0toYXJ0b3VtJzogJ0VBU1QnLFxuICAgICdFdXJvcGUvS2FsaW5pbmdyYWQnOiAnS1NUJyxcbiAgICAnQXNpYS9KZXJ1c2FsZW0nOiAnSkRUJyxcbiAgICAnRXVyb3BlL0tpZXYnOiAnRUVEVCcsXG4gICAgJ0FmcmljYS9Kb2hhbm5lc2J1cmcnOiAnU0FTVCcsXG4gICAgJ0FzaWEvSGVicm9uJzogJ0VFVCcsXG4gICAgJ0FzaWEvRGFtYXNjdXMnOiAnU0RUJyxcbiAgICAnRXVyb3BlL0NoaXNpbmF1JzogJ0dEVCcsXG4gICAgJ0FmcmljYS9DYWlybyc6ICdFU1QnLFxuICAgICdBc2lhL0JlaXJ1dCc6ICdNRURUJyxcbiAgICAnRXVyb3BlL0J1Y2hhcmVzdCc6ICdHRFQnLFxuICAgICdBc2lhL0FtbWFuJzogJ0pTVCcsXG4gICAgJ0FmcmljYS9MYWdvcyc6ICdFQ1QnLFxuICAgICdFdXJvcGUvV2Fyc2F3JzogJ0NFRFQnLFxuICAgICdBZnJpY2EvQ2FzYWJsYW5jYSc6ICdNRFQnLFxuICAgICdFdXJvcGUvUGFyaXMnOiAnQ0VTVCcsXG4gICAgJ0V1cm9wZS9CdWRhcGVzdCc6ICdDRURUJyxcbiAgICAnRXVyb3BlL0Jlcmxpbic6ICdXRURUJyxcbiAgICAnQWZyaWNhL1Nhb19Ub21lJzogJ0dTVCcsXG4gICAgJ0F0bGFudGljL1JleWtqYXZpayc6ICdHU1QnLFxuICAgICdFdXJvcGUvTG9uZG9uJzogJ0dEVCcsXG4gICAgJ0V0Yy9VVEMnOiAnVVRDJyxcbiAgICAnQXRsYW50aWMvQXpvcmVzJzogJ0FEVCcsXG4gICAgJ0F0bGFudGljL0NhcGVfVmVyZGUnOiAnQ1ZTVCcsXG4gICAgJ0V0Yy9HTVQrMic6ICdNU1QnLFxuICAgICdBbWVyaWNhL0FyYWd1YWluYSc6ICdTRVNUJyxcbiAgICAnQW1lcmljYS9TYW9fUGF1bG8nOiAnRVNBU1QnLFxuICAgICdBbWVyaWNhL0NheWVubmUnOiAnU0VTVCcsXG4gICAgJ0FtZXJpY2EvQXJnZW50aW5hL0J1ZW5vc19BaXJlcyc6ICdBU1QnLFxuICAgICdBbWVyaWNhL051dWsnOiAnV0dUJyxcbiAgICAnQW1lcmljYS9Nb250ZXZpZGVvJzogJ01TVCcsXG4gICAgJ0FtZXJpY2EvUHVudGFfQXJlbmFzJzogJ0NMU1QnLFxuICAgICdBbWVyaWNhL01pcXVlbG9uJzogJ1BNU1QnLFxuICAgICdBbWVyaWNhL0JhaGlhJzogJ0JTVCcsXG4gICAgJ0FtZXJpY2EvU3RfSm9obnMnOiAnTlNUJyxcbiAgICAnQW1lcmljYS9Bc3VuY2lvbic6ICdQUlNUJyxcbiAgICAnQW1lcmljYS9IYWxpZmF4JzogJ0FTVCcsXG4gICAgJ0FtZXJpY2EvQ2FyYWNhcyc6ICdWU1QnLFxuICAgICdBbWVyaWNhL0N1aWFiYSc6ICdDQlNUJyxcbiAgICAnQW1lcmljYS9MYV9QYXonOiAnU0FXU1QnLFxuICAgICdBbWVyaWNhL1NhbnRpYWdvJzogJ1BTU1QnLFxuICAgICdBbWVyaWNhL0JvZ290YSc6ICdTUFNUJyxcbiAgICAnQW1lcmljYS9DYW5jdW4nOiAnRVNUJyxcbiAgICAnQW1lcmljYS9OZXdfWW9yayc6ICdFVCcsXG4gICAgJ0FtZXJpY2EvUG9ydC1hdS1QcmluY2UnOiAnRURUJyxcbiAgICAnQW1lcmljYS9IYXZhbmEnOiAnRURUJyxcbiAgICAnQW1lcmljYS9JbmRpYW5hL0luZGlhbmFwb2xpcyc6ICdFU1QnLFxuICAgICdBbWVyaWNhL0dyYW5kX1R1cmsnOiAnRVNUJyxcbiAgICAnQW1lcmljYS9HdWF0ZW1hbGEnOiAnQ0FTVCcsXG4gICAgJ0FtZXJpY2EvQ2hpY2Fnbyc6ICdDVCcsXG4gICAgJ1BhY2lmaWMvRWFzdGVyJzogJ0VBU1QnLFxuICAgICdBbWVyaWNhL01leGljb19DaXR5JzogJ0NTVCcsXG4gICAgJ0FtZXJpY2EvUmVnaW5hJzogJ0NDU1QnLFxuICAgICdBbWVyaWNhL1Bob2VuaXgnOiAnTVQnLFxuICAgICdBbWVyaWNhL0NoaWh1YWh1YSc6ICdNRFQnLFxuICAgICdBbWVyaWNhL0RlbnZlcic6ICdNVCcsXG4gICAgJ0FtZXJpY2EvV2hpdGVob3JzZSc6ICdZU1QnLFxuICAgICdBbWVyaWNhL1RpanVhbmEnOiAnUFNUJyxcbiAgICAnRXRjL0dNVCs4JzogJ1VUQy0wOCcsXG4gICAgJ0FtZXJpY2EvTG9zX0FuZ2VsZXMnOiAnUFQnLFxuICAgICdBbWVyaWNhL0FuY2hvcmFnZSc6ICdBSycsXG4gICAgJ0V0Yy9HTVQrOSc6ICdVVEMtMDknLFxuICAgICdQYWNpZmljL01hcnF1ZXNhcyc6ICdNU1QnLFxuICAgICdBbWVyaWNhL0FkYWsnOiAnSFNUJyxcbiAgICAnUGFjaWZpYy9Ib25vbHVsdSc6ICdIQVNUJyxcbiAgICAnRXRjL0dNVCsxMSc6ICdVVEMtMTEnLFxuICAgICdFdGMvR01UKzEyJzogJ0JJVCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIFdpbmRvd3Mtc3R5bGUgXCIoVVRDwrFISDpNTSkgUGxhY2VcIiAtPiBzaG9ydCBuYW1lIChJU1QsIEJSVCwgZXRjLikgc28gd2Ugc2hvdyBcIklTVFwiIG5vdCBcIigoVVRDKzA1OjMwKSBJbmRpYSlcIi5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IFdJTkRPV1NfVFpfQUJCUl9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgJyhVVEMtMDM6MDApIEJyYXNpbGlhJzogJ0JSVCcsXG4gICAgJyhVVEMtMDM6MDApIEJ1ZW5vcyBBaXJlcyc6ICdBUlQnLFxuICAgICcoVVRDKzA1OjMwKSBJbmRpYSc6ICdJU1QnLFxuICAgICcoVVRDKzA1OjMwKSBDaGVubmFpLCBLb2xrYXRhLCBNdW1iYWksIE5ldyBEZWxoaSc6ICdJU1QnLFxuICAgICcoVVRDKzAwOjAwKSBEdWJsaW4sIEVkaW5idXJnaCwgTG9uZG9uJzogJ0dNVCcsXG4gICAgJyhVVEMrMDA6MDApIE1vbnJvdmlhLCBSZXlramF2aWsnOiAnR01UJyxcbiAgICAnKFVUQyswMTowMCkgQW1zdGVyZGFtLCBCZXJsaW4sIFJvbWUsIFN0b2NraG9sbSc6ICdDRVQnLFxuICAgICcoVVRDKzAxOjAwKSBCcnVzc2VscywgQ29wZW5oYWdlbiwgTWFkcmlkLCBQYXJpcyc6ICdDRVQnLFxuICAgICcoVVRDKzAyOjAwKSBBdGhlbnMsIElzdGFuYnVsLCBNaW5zayc6ICdFRVQnLFxuICAgICcoVVRDKzAyOjAwKSBDYWlybyc6ICdFRVQnLFxuICAgICcoVVRDKzAyOjAwKSBKZXJ1c2FsZW0nOiAnSVNUJyxcbiAgICAnKFVUQyswMzowMCkgTW9zY293LCBTdC4gUGV0ZXJzYnVyZyc6ICdNU0snLFxuICAgICcoVVRDKzAzOjAwKSBOYWlyb2JpJzogJ0VBVCcsXG4gICAgJyhVVEMrMDQ6MDApIER1YmFpJzogJ0dTVCcsXG4gICAgJyhVVEMrMDU6MDApIElzbGFtYWJhZCwgS2FyYWNoaSc6ICdQS1QnLFxuICAgICcoVVRDKzA1OjQ1KSBLYXRobWFuZHUnOiAnTlBUJyxcbiAgICAnKFVUQyswNjowMCkgRGhha2EnOiAnQlNUJyxcbiAgICAnKFVUQyswNjozMCkgWWFuZ29uIChSYW5nb29uKSc6ICdNTVQnLFxuICAgICcoVVRDKzA3OjAwKSBCYW5na29rLCBIYW5vaSwgSmFrYXJ0YSc6ICdJQ1QnLFxuICAgICcoVVRDKzA4OjAwKSBCZWlqaW5nLCBDaG9uZ3FpbmcsIEhvbmcgS29uZywgVXJ1bXFpJzogJ0NTVCcsXG4gICAgJyhVVEMrMDg6MDApIEt1YWxhIEx1bXB1ciwgU2luZ2Fwb3JlJzogJ1NHVCcsXG4gICAgJyhVVEMrMDk6MDApIE9zYWthLCBTYXBwb3JvLCBUb2t5byc6ICdKU1QnLFxuICAgICcoVVRDKzA5OjMwKSBBZGVsYWlkZSc6ICdBQ1NUJyxcbiAgICAnKFVUQysxMDowMCkgQnJpc2JhbmUnOiAnQUVTVCcsXG4gICAgJyhVVEMrMTA6MDApIENhbmJlcnJhLCBNZWxib3VybmUsIFN5ZG5leSc6ICdBRVNUJyxcbiAgICAnKFVUQysxMjowMCkgQXVja2xhbmQsIFdlbGxpbmd0b24nOiAnTlpTVCcsXG4gICAgJyhVVEMtMDU6MDApIEVhc3Rlcm4gVGltZSAoVVMgJiBDYW5hZGEpJzogJ0VUJyxcbiAgICAnKFVUQy0wNjowMCkgQ2VudHJhbCBUaW1lIChVUyAmIENhbmFkYSknOiAnQ1QnLFxuICAgICcoVVRDLTA3OjAwKSBNb3VudGFpbiBUaW1lIChVUyAmIENhbmFkYSknOiAnTVQnLFxuICAgICcoVVRDLTA4OjAwKSBQYWNpZmljIFRpbWUgKFVTICYgQ2FuYWRhKSc6ICdQVCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCB0aW1lem9uZSBhYmJyZXZpYXRpb24gKGUuZy4gSVNULCBCUlQsIFNBU1QpIGZvciBkaXNwbGF5IGFmdGVyIHRoZSB0aW1lLlxuICAgKiBVc2VzIElBTkEgbWFwIGFuZCBXaW5kb3dzLXN0eWxlIG1hcCBzbyB3ZSBzaG93IFwiQlJUXCIgLyBcIklTVFwiIGluc3RlYWQgb2YgXCIoKFVUQy0wMzowMCkgQnJhc2lsaWEpXCIuXG4gICAqIE9ubHkgY29uc3VsdHMgV2luZG93cyBtYXAgd2hlbiBpbnB1dCBsb29rcyBsaWtlIFwiKFVUQy4uLilcIiBzbyBleGlzdGluZyBJQU5BL0ludGwgYmVoYXZpb3IgaXMgdW5jaGFuZ2VkLlxuICAgKi9cbiAgZ2V0VGltZXpvbmVBYmJyZXZpYXRpb24odHo6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0eiB8fCAhU3RyaW5nKHR6KS50cmltKCkpIHJldHVybiAnJztcbiAgICBjb25zdCB0eklkID0gU3RyaW5nKHR6KS50cmltKCk7XG4gICAgaWYgKHR6SWQuc3RhcnRzV2l0aCgnKFVUQycpIHx8IHR6SWQuc3RhcnRzV2l0aCgnKHV0YycpKSB7XG4gICAgICBjb25zdCB3aW5NYXAgPSAodGhpcy5jb25zdHJ1Y3RvciBhcyB0eXBlb2YgQ2hhdERyYXdlckNvbXBvbmVudClcbiAgICAgICAgLldJTkRPV1NfVFpfQUJCUl9NQVA7XG4gICAgICBjb25zdCB3aW5LZXkgPSBPYmplY3Qua2V5cyh3aW5NYXApLmZpbmQoXG4gICAgICAgIChrKSA9PiBrLnRvTG93ZXJDYXNlKCkgPT09IHR6SWQudG9Mb3dlckNhc2UoKSxcbiAgICAgICk7XG4gICAgICBpZiAod2luS2V5KSByZXR1cm4gd2luTWFwW3dpbktleV07XG4gICAgfVxuICAgIGNvbnN0IG1hcCA9ICh0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBDaGF0RHJhd2VyQ29tcG9uZW50KS5UWl9BQkJSX01BUDtcbiAgICBsZXQgbWFwcGVkID0gbWFwW3R6SWRdO1xuICAgIGlmICghbWFwcGVkKSB7XG4gICAgICBjb25zdCBrZXlMb3dlciA9IHR6SWQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGVudHJ5ID0gT2JqZWN0LmVudHJpZXMobWFwKS5maW5kKFxuICAgICAgICAoW2tdKSA9PiBrLnRvTG93ZXJDYXNlKCkgPT09IGtleUxvd2VyLFxuICAgICAgKTtcbiAgICAgIGlmIChlbnRyeSkgbWFwcGVkID0gZW50cnlbMV07XG4gICAgfVxuICAgIGlmIChtYXBwZWQpIHJldHVybiBtYXBwZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCdlbi1VUycsIHtcbiAgICAgICAgdGltZVpvbmU6IHR6SWQsXG4gICAgICAgIHRpbWVab25lTmFtZTogJ3Nob3J0JyxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcGFydHMgPSBmb3JtYXR0ZXIuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgpKTtcbiAgICAgIGNvbnN0IHR6UGFydCA9IHBhcnRzLmZpbmQoKHApID0+IHAudHlwZSA9PT0gJ3RpbWVab25lTmFtZScpO1xuICAgICAgY29uc3QgdmFsdWUgPSAodHpQYXJ0Py52YWx1ZSA/PyAnJykudHJpbSgpO1xuICAgICAgaWYgKHZhbHVlICYmIC9eR01UWystXVxcZC8udGVzdCh2YWx1ZSkpIHJldHVybiAnJztcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBnZXRTdGF0dXNUZXh0RnJvbVNlc3Npb25Sb2xlcyhzZXNzaW9uUm9sZXM6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNlc3Npb25Sb2xlcykgfHwgc2Vzc2lvblJvbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5nZXRUcmFuc2xhdGlvbignWW91IGNhbiBqb2luIHRoaXMgbWVldGluZycpIHx8XG4gICAgICAgICdZb3UgY2FuIGpvaW4gdGhpcyBtZWV0aW5nJ1xuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgZmlyc3QgPSBzZXNzaW9uUm9sZXNbMF07XG4gICAgaWYgKHR5cGVvZiBmaXJzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBTdHJpbmcoZmlyc3QpXG4gICAgICAgIC5yZXBsYWNlKC9eXFxzKi1cXHMqLywgJycpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuICAgIGlmIChmaXJzdCAmJiB0eXBlb2YgZmlyc3QgPT09ICdvYmplY3QnICYmIChmaXJzdCBhcyBhbnkpLmRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKChmaXJzdCBhcyBhbnkpLmRlc2NyaXB0aW9uKS50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmdldFRyYW5zbGF0aW9uKCdZb3UgY2FuIGpvaW4gdGhpcyBtZWV0aW5nJykgfHxcbiAgICAgICdZb3UgY2FuIGpvaW4gdGhpcyBtZWV0aW5nJ1xuICAgICk7XG4gIH1cblxuICBtYXBTZXNzaW9uc1RvQ2FyZERhdGEoc2Vzc2lvbnM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzZXNzaW9ucykpIHJldHVybiBbXTtcbiAgICBjb25zdCB1c2VyVGltZXpvbmUgPVxuICAgICAgdGhpcy50aW1lem9uZSAmJiBTdHJpbmcodGhpcy50aW1lem9uZSkudHJpbSgpXG4gICAgICAgID8gU3RyaW5nKHRoaXMudGltZXpvbmUpLnRyaW0oKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc2Vzc2lvbnMubWFwKChzOiBhbnkpID0+IHtcbiAgICAgIC8vIFN1cHBvcnQgYm90aCBkYXRlVGltZVJhbmdlIChzdHJpbmcpIGFuZCBhY3R1YWxEYXRlVGltZVJhbmdlIChvYmplY3Qgd2l0aCBzdGFydC9lbmQpXG4gICAgICBjb25zdCB3aGVuUmF3ID0gcy5kYXRlVGltZVJhbmdlID8/IHMuYWN0dWFsRGF0ZVRpbWVSYW5nZSA/PyAnJztcbiAgICAgIGNvbnN0IHdoZW5Gb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdFNlc3Npb25XaGVuKHdoZW5SYXcsIHVzZXJUaW1lem9uZSk7XG4gICAgICAvLyBPbmx5IHNldCBzdGF0dXNUZXh0IHdoZW4gc2Vzc2lvbiBoYXMgam9pbi93YXRjaCByb2xlcyAoc28gd2UgZG9uJ3Qgc2hvdyBcIllvdSBjYW4gam9pbiB0aGlzIG1lZXRpbmdcIiB3aGVuIHRoZXJlIGFyZSBubyBidXR0b25zKVxuICAgICAgY29uc3QgaGFzSm9pbldhdGNoUm9sZSA9XG4gICAgICAgIEFycmF5LmlzQXJyYXkocy5zZXNzaW9uUm9sZXMpICYmXG4gICAgICAgIHMuc2Vzc2lvblJvbGVzLnNvbWUoKHI6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5hbWUgPVxuICAgICAgICAgICAgciAmJiB0eXBlb2YgciA9PT0gJ29iamVjdCcgJiYgci5zZXNzaW9uUm9sZU5hbWVcbiAgICAgICAgICAgICAgPyBTdHJpbmcoci5zZXNzaW9uUm9sZU5hbWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIDogU3RyaW5nKHIgPz8gJycpXG4gICAgICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICByZXR1cm4gbmFtZSA9PT0gJ2pvaW4nIHx8IG5hbWUgPT09ICd3YXRjaCc7XG4gICAgICAgIH0pO1xuICAgICAgY29uc3Qgc3RhdHVzVGV4dCA9IGhhc0pvaW5XYXRjaFJvbGVcbiAgICAgICAgPyB0aGlzLmdldFN0YXR1c1RleHRGcm9tU2Vzc2lvblJvbGVzKHMuc2Vzc2lvblJvbGVzKVxuICAgICAgICA6ICcnO1xuICAgICAgY29uc3Qgc2Vzc2lvblRpbWVab25lID1cbiAgICAgICAgcy50aW1lWm9uZSAhPSBudWxsXG4gICAgICAgICAgPyB0eXBlb2Ygcy50aW1lWm9uZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gKHMudGltZVpvbmUuaWQgPz8gcy50aW1lWm9uZS5uYW1lID8/ICcnKVxuICAgICAgICAgICAgOiBTdHJpbmcocy50aW1lWm9uZSlcbiAgICAgICAgICA6ICcnO1xuICAgICAgLy8gU2hvdyB1c2VyJ3Mgc2VsZWN0ZWQgdGltZXpvbmUgd2hlbiBzZXQsIG90aGVyd2lzZSBzZXNzaW9uJ3MgdGltZXpvbmUgZnJvbSBkYXRhXG4gICAgICBjb25zdCBkaXNwbGF5VGltZVpvbmUgPSAodXNlclRpbWV6b25lIHx8IHNlc3Npb25UaW1lWm9uZSB8fCAnJykudHJpbSgpO1xuICAgICAgY29uc3QgdHpBYmJyID0gZGlzcGxheVRpbWVab25lXG4gICAgICAgID8gdGhpcy5nZXRUaW1lem9uZUFiYnJldmlhdGlvbihkaXNwbGF5VGltZVpvbmUpXG4gICAgICAgIDogJyc7XG4gICAgICBjb25zdCB3aGVuV2l0aFR6ID1cbiAgICAgICAgd2hlbkZvcm1hdHRlZCB8fCAodHlwZW9mIHdoZW5SYXcgPT09ICdvYmplY3QnID8gJycgOiBTdHJpbmcod2hlblJhdykpO1xuICAgICAgY29uc3Qgd2hlbkRpc3BsYXkgPSB0ekFiYnJcbiAgICAgICAgPyBgJHt3aGVuV2l0aFR6fSAoJHt0ekFiYnJ9KWAudHJpbSgpXG4gICAgICAgIDogd2hlbldpdGhUejtcbiAgICAgIGNvbnN0IGRhdGVCYWRnZSA9IHRoaXMuZ2V0U2Vzc2lvbkRhdGVCYWRnZSh3aGVuUmF3LCBkaXNwbGF5VGltZVpvbmUpO1xuICAgICAgbGV0IHRpbWVSYW5nZSA9IHRoaXMuZm9ybWF0U2Vzc2lvblRpbWVSYW5nZSh3aGVuUmF3LCBkaXNwbGF5VGltZVpvbmUpO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBTdHJpbmcocy5kZXNjcmlwdGlvbiA/PyBzLmFic3RyYWN0ID8/ICcnKS50cmltKCk7XG4gICAgICBjb25zdCBtZWV0aW5nVHlwZSA9IFN0cmluZyhcbiAgICAgICAgcy5zZXNzaW9uVHlwZSA/PyBzLnR5cGUgPz8gcy5tZWV0aW5nVHlwZSA/PyAnJyxcbiAgICAgICkudHJpbSgpO1xuICAgICAgY29uc3Qgc2Vzc2lvblR5cGVMYWJlbCA9IHRoaXMuaXNVbkV2ZW50XG4gICAgICAgID8gdGhpcy5nZXRUcmFuc2xhdGlvbignTWVldGluZyB0eXBlJykgfHwgJ01lZXRpbmcgdHlwZSdcbiAgICAgICAgOiB0aGlzLmdldFRyYW5zbGF0aW9uKCdTZXNzaW9uIHR5cGUnKSB8fCAnU2Vzc2lvbiB0eXBlJztcbiAgICAgIC8vIFNhbWUgbG9naWMgYXMgYmVmb3JlIGRlc2lnbiB1cGRhdGU6IHByZWZlciB0eiBhYmJyZXZpYXRpb24gKGUuZy4gRVNUKSwgZWxzZSBzaG93IGRpc3BsYXkgdGltZXpvbmUgc3RyaW5nIChlLmcuIFwiKFVUQy0wMzowMCkgQnJhc2lsaWEpXCIpXG4gICAgICBjb25zdCB0aW1lWm9uZURpc3BsYXkgPSB0ekFiYnIgfHwgZGlzcGxheVRpbWVab25lIHx8ICcnO1xuICAgICAgLy8gV2hlbiBBUEkgcmV0dXJucyBcIlN0YXJ0OiBOL0EsIEVuZDogTi9BLCBUaW1lWm9uZTogLi4uXCIgKHN0cmluZyksIHNob3cgYXQgbGVhc3QgdGltZXpvbmVcbiAgICAgIGlmICghdGltZVJhbmdlICYmIGRpc3BsYXlUaW1lWm9uZSkge1xuICAgICAgICB0aW1lUmFuZ2UgPSB0aGlzLmdldFRyYW5zbGF0aW9uKCdOb3Qgc3BlY2lmaWVkJykgfHwgJ05vdCBzcGVjaWZpZWQnO1xuICAgICAgfVxuICAgICAgLy8gVGltZSByYW5nZSB3aXRoIHRpbWV6b25lIGluIHBhcmVudGhlc2VzIHdoZW4gYXZhaWxhYmxlIChzYW1lIGFzIG9sZCB3aGVuRGlzcGxheSBmb3JtYXQpXG4gICAgICBjb25zdCB0aW1lUmFuZ2VXaXRoVHogPSB0aW1lWm9uZURpc3BsYXlcbiAgICAgICAgPyBgJHt0aW1lUmFuZ2V9ICgke3RpbWVab25lRGlzcGxheX0pYC50cmltKClcbiAgICAgICAgOiB0aW1lUmFuZ2U7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZTogU3RyaW5nKHMudGl0bGUgPz8gJycpLnRyaW0oKSxcbiAgICAgICAgb3JnYW5pemVyOiBTdHJpbmcocy5vcmdhbml6ZXIgPz8gJycpLnRyaW0oKSxcbiAgICAgICAgcm9vbTogU3RyaW5nKHMucm9vbU5hbWUgPz8gJycpLnRyaW0oKSxcbiAgICAgICAgd2hlbjogd2hlbkRpc3BsYXksXG4gICAgICAgIHRpbWVSYW5nZSxcbiAgICAgICAgdGltZVJhbmdlV2l0aFR6OiB0aW1lUmFuZ2UgPyB0aW1lUmFuZ2VXaXRoVHogOiB0aW1lWm9uZURpc3BsYXkgfHwgJycsXG4gICAgICAgIGRhdGVEYXk6IGRhdGVCYWRnZS5kYXksXG4gICAgICAgIGRhdGVNb250aDogZGF0ZUJhZGdlLm1vbnRoLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgdGltZVpvbmU6IGRpc3BsYXlUaW1lWm9uZSxcbiAgICAgICAgdGltZVpvbmVEaXNwbGF5LFxuICAgICAgICBtZWV0aW5nVHlwZSxcbiAgICAgICAgc2Vzc2lvblR5cGVMYWJlbCxcbiAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgc2Vzc2lvbjogcyxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RTcGVha2VySWRzRnJvbVNlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHM6IGFueVtdKTogc3RyaW5nW10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzZXNzaW9uQ2FyZHMpKSByZXR1cm4gW107XG4gICAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgY2FyZCBvZiBzZXNzaW9uQ2FyZHMpIHtcbiAgICAgIGNvbnN0IHJhdyA9IGNhcmQ/LnNlc3Npb24/LnNwZWFrZXJzO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmF3KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIHJhdykge1xuICAgICAgICAgIGNvbnN0IHNpZCA9IFN0cmluZyhpZCA/PyAnJykudHJpbSgpO1xuICAgICAgICAgIGlmIChzaWQpIGlkcy5wdXNoKHNpZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChpZHMpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXR0YWNoU3BlYWtlcnNUb1Nlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHM6IGFueVtdKTogdm9pZCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHNlc3Npb25DYXJkcykpIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IGNhcmQgb2Ygc2Vzc2lvbkNhcmRzKSB7XG4gICAgICBjb25zdCBzcGVha2VySWRzOiBzdHJpbmdbXSA9IEFycmF5LmlzQXJyYXkoY2FyZD8uc2Vzc2lvbj8uc3BlYWtlcnMpXG4gICAgICAgID8gY2FyZC5zZXNzaW9uLnNwZWFrZXJzXG4gICAgICAgICAgICAubWFwKCh4OiBhbnkpID0+IFN0cmluZyh4ID8/ICcnKS50cmltKCkpXG4gICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIDogW107XG4gICAgICBjb25zdCBzcGVha2Vyc0xpc3QgPSBzcGVha2VySWRzXG4gICAgICAgIC5tYXAoKGlkKSA9PiB0aGlzLnNwZWFrZXJzW2lkXSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGNhcmQuc3BlYWtlcnNMaXN0ID0gc3BlYWtlcnNMaXN0O1xuICAgICAgaWYgKGNhcmQ/LnNlc3Npb24gJiYgdHlwZW9mIGNhcmQuc2Vzc2lvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgY2FyZC5zZXNzaW9uLnNwZWFrZXJzTGlzdCA9IHNwZWFrZXJzTGlzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVNwZWFrZXJzRm9yU2Vzc2lvbkNhcmRzKHNlc3Npb25DYXJkczogYW55W10pOiB2b2lkIHtcbiAgICBjb25zdCBpZHMgPSB0aGlzLmNvbGxlY3RTcGVha2VySWRzRnJvbVNlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHMpO1xuICAgIGlmIChpZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICBjb25zdCBtaXNzaW5nID0gaWRzLmZpbHRlcihcbiAgICAgIChpZCkgPT4gIXRoaXMuc3BlYWtlcnNbaWRdICYmICF0aGlzLnJlcXVlc3RlZFNwZWFrZXJJZHMuaGFzKGlkKSxcbiAgICApO1xuICAgIGlmIChtaXNzaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hdHRhY2hTcGVha2Vyc1RvU2Vzc2lvbkNhcmRzKHNlc3Npb25DYXJkcyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG1pc3NpbmcuZm9yRWFjaCgoaWQpID0+IHRoaXMucmVxdWVzdGVkU3BlYWtlcklkcy5hZGQoaWQpKTtcbiAgICB0aGlzLmdldFNwZWFrZXJzQnlTdGFmZklkcyhtaXNzaW5nKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLmF0dGFjaFNwZWFrZXJzVG9TZXNzaW9uQ2FyZHMoc2Vzc2lvbkNhcmRzKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgLy8gQmVzdCBlZmZvcnQ6IHN0aWxsIGF0dGFjaCB3aGF0IHdlIGhhdmUgY2FjaGVkXG4gICAgICAgIHRoaXMuYXR0YWNoU3BlYWtlcnNUb1Nlc3Npb25DYXJkcyhzZXNzaW9uQ2FyZHMpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZXRTcGVha2VyUGhvdG9Vcmwoc3BlYWtlcjogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFzcGVha2VyKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBjYW5kaWRhdGVzID0gW1xuICAgICAgc3BlYWtlci5waG90byxcbiAgICAgIHNwZWFrZXIucGhvdG9QYXRoLFxuICAgICAgc3BlYWtlci5hdmF0YXJVcmwsXG4gICAgICBzcGVha2VyLnByb2ZpbGVJbWFnZVVybCxcbiAgICAgIHNwZWFrZXIucHJvZmlsZUltYWdlLFxuICAgICAgc3BlYWtlci5wcm9maWxlUGljdHVyZSxcbiAgICAgIHNwZWFrZXIuaW1hZ2VVcmwsXG4gICAgICBzcGVha2VyLmltYWdlLFxuICAgIF07XG4gICAgY29uc3QgdXJsID0gY2FuZGlkYXRlcy5maW5kKCh2KSA9PiB2ICE9IG51bGwgJiYgU3RyaW5nKHYpLnRyaW0oKSAhPT0gJycpO1xuICAgIHJldHVybiB1cmwgPyBTdHJpbmcodXJsKS50cmltKCkgOiBudWxsO1xuICB9XG5cbiAgaGFzU2Vzc2lvbkNhcmRTcGVha2VycyhzZXNzaW9uQ2FyZDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGlzdCA9XG4gICAgICBzZXNzaW9uQ2FyZD8uc3BlYWtlcnNMaXN0IHx8IHNlc3Npb25DYXJkPy5zZXNzaW9uPy5zcGVha2Vyc0xpc3Q7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkgJiYgbGlzdC5sZW5ndGggPiAwKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCBpZHMgPSBzZXNzaW9uQ2FyZD8uc2Vzc2lvbj8uc3BlYWtlcnM7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaWRzKSAmJiBpZHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldFNwZWFrZXJEaXNwbGF5TmFtZShzcGVha2VyOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghc3BlYWtlcikgcmV0dXJuICcnO1xuICAgIGlmIChzcGVha2VyLm5hbWUgIT0gbnVsbCAmJiBTdHJpbmcoc3BlYWtlci5uYW1lKS50cmltKCkgIT09ICcnKVxuICAgICAgcmV0dXJuIFN0cmluZyhzcGVha2VyLm5hbWUpLnRyaW0oKTtcbiAgICBjb25zdCBmaXJzdCA9XG4gICAgICBzcGVha2VyLmZpcnN0TmFtZSAhPSBudWxsID8gU3RyaW5nKHNwZWFrZXIuZmlyc3ROYW1lKS50cmltKCkgOiAnJztcbiAgICBjb25zdCBsYXN0ID1cbiAgICAgIHNwZWFrZXIubGFzdE5hbWUgIT0gbnVsbCA/IFN0cmluZyhzcGVha2VyLmxhc3ROYW1lKS50cmltKCkgOiAnJztcbiAgICByZXR1cm4gYCR7Zmlyc3R9ICR7bGFzdH1gLnRyaW0oKTtcbiAgfVxuXG4gIGdldFNwZWFrZXJJbml0aWFscyhzcGVha2VyOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldFNwZWFrZXJEaXNwbGF5TmFtZShzcGVha2VyKTtcbiAgICBpZiAobmFtZSkgcmV0dXJuIHRoaXMuZ2V0QXR0ZW5kZWVJbml0aWFscyhuYW1lKTtcbiAgICBjb25zdCBpZCA9IHNwZWFrZXI/LmlkICE9IG51bGwgPyBTdHJpbmcoc3BlYWtlci5pZCkgOiAnJztcbiAgICByZXR1cm4gaWQgPyBpZC5zbGljZSgwLCAyKS50b1VwcGVyQ2FzZSgpIDogJz8nO1xuICB9XG5cbiAgbWFwQXR0ZW5kZWVzVG9DYXJkRGF0YShhdHRlbmRlZXM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhdHRlbmRlZXMpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIGF0dGVuZGVlcy5tYXAoKGE6IGFueSkgPT4gKHtcbiAgICAgIG5hbWU6IFN0cmluZyhhLm5hbWUgPz8gJycpLnRyaW0oKSxcbiAgICAgIGNvbXBhbnk6XG4gICAgICAgIGEuY29tcGFueSAhPSBudWxsICYmIFN0cmluZyhhLmNvbXBhbnkpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhhLmNvbXBhbnkpLnRyaW0oKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIGpvYlRpdGxlOlxuICAgICAgICBhLmpvYlRpdGxlICE9IG51bGwgJiYgU3RyaW5nKGEuam9iVGl0bGUpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhhLmpvYlRpdGxlKS50cmltKClcbiAgICAgICAgICA6IG51bGwsXG4gICAgICBwaG90bzpcbiAgICAgICAgYS5waG90byAhPSBudWxsICYmIFN0cmluZyhhLnBob3RvKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcoYS5waG90bykudHJpbSgpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgaWQ6IGEuaWQgPz8gYS51c2VySWQgPz8gYS5faWQgPz8gYS5hdHRlbmRlZUlkID8/IHVuZGVmaW5lZCxcbiAgICAgIGludGVyZXN0czpcbiAgICAgICAgYS5pbnRlcmVzdHMgIT0gbnVsbCAmJiBTdHJpbmcoYS5pbnRlcmVzdHMpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhhLmludGVyZXN0cykudHJpbSgpXG4gICAgICAgICAgOiBudWxsLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIGEuZGVzY3JpcHRpb24gIT0gbnVsbCAmJiBTdHJpbmcoYS5kZXNjcmlwdGlvbikudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKGEuZGVzY3JpcHRpb24pLnRyaW0oKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIHVzZXJWaWRlb3NNb2RlbDogYS51c2VyVmlkZW9zTW9kZWxcbiAgICAgICAgPyB7XG4gICAgICAgICAgICB1cmw6XG4gICAgICAgICAgICAgIGEudXNlclZpZGVvc01vZGVsPy51cmwgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICBTdHJpbmcoYS51c2VyVmlkZW9zTW9kZWwudXJsKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICAgICAgPyBTdHJpbmcoYS51c2VyVmlkZW9zTW9kZWwudXJsKS50cmltKClcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB0aHVtYm5haWw6XG4gICAgICAgICAgICAgIGEudXNlclZpZGVvc01vZGVsPy50aHVtYm5haWwgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICBTdHJpbmcoYS51c2VyVmlkZW9zTW9kZWwudGh1bWJuYWlsKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICAgICAgPyBTdHJpbmcoYS51c2VyVmlkZW9zTW9kZWwudGh1bWJuYWlsKS50cmltKClcbiAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgfSkpO1xuICB9XG5cbiAgbWFwU3BlYWtlcnNUb0NhcmREYXRhKHNwZWFrZXJzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3BlYWtlcnMpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHNwZWFrZXJzLm1hcCgoczogYW55KSA9PiB7XG4gICAgICBjb25zdCByYXdEZXNjID1cbiAgICAgICAgcy5kZXNjcmlwdGlvbiAhPSBudWxsICYmIFN0cmluZyhzLmRlc2NyaXB0aW9uKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcocy5kZXNjcmlwdGlvbikudHJpbSgpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSByYXdEZXNjXG4gICAgICAgID8gLzxbYS16XVtcXHNcXFNdKj4vaS50ZXN0KHJhd0Rlc2MpXG4gICAgICAgICAgPyB0aGlzLnN0cmlwSHRtbChyYXdEZXNjKVxuICAgICAgICAgIDogcmF3RGVzY1xuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCByYXdUaXRsZSA9IHMudGl0bGUgPz8gcy5qb2JUaXRsZTtcbiAgICAgIGNvbnN0IGpvYlRpdGxlID1cbiAgICAgICAgcmF3VGl0bGUgIT0gbnVsbCAmJiBTdHJpbmcocmF3VGl0bGUpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICA/IFN0cmluZyhyYXdUaXRsZSkudHJpbSgpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogdGhpcy5nZXRTcGVha2VyRGlzcGxheU5hbWUocyksXG4gICAgICAgIGNvbXBhbnk6XG4gICAgICAgICAgcy5jb21wYW55ICE9IG51bGwgJiYgU3RyaW5nKHMuY29tcGFueSkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgPyBTdHJpbmcocy5jb21wYW55KS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgam9iVGl0bGUsXG4gICAgICAgIHBob3RvOiB0aGlzLmdldFNwZWFrZXJQaG90b1VybChzKSxcbiAgICAgICAgaWQ6IHMuaWQgPz8gcy51c2VySWQgPz8gcy5faWQgPz8gcy5zcGVha2VySWQgPz8gdW5kZWZpbmVkLFxuICAgICAgICBpbnRlcmVzdHM6XG4gICAgICAgICAgcy5pbnRlcmVzdHMgIT0gbnVsbCAmJiBTdHJpbmcocy5pbnRlcmVzdHMpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgID8gU3RyaW5nKHMuaW50ZXJlc3RzKS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIHVzZXJWaWRlb3NNb2RlbDogcy51c2VyVmlkZW9zTW9kZWxcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgdXJsOlxuICAgICAgICAgICAgICAgIHMudXNlclZpZGVvc01vZGVsPy51cmwgIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIFN0cmluZyhzLnVzZXJWaWRlb3NNb2RlbC51cmwpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgICAgICAgID8gU3RyaW5nKHMudXNlclZpZGVvc01vZGVsLnVybCkudHJpbSgpXG4gICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgIHRodW1ibmFpbDpcbiAgICAgICAgICAgICAgICBzLnVzZXJWaWRlb3NNb2RlbD8udGh1bWJuYWlsICE9IG51bGwgJiZcbiAgICAgICAgICAgICAgICBTdHJpbmcocy51c2VyVmlkZW9zTW9kZWwudGh1bWJuYWlsKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICAgICAgICA/IFN0cmluZyhzLnVzZXJWaWRlb3NNb2RlbC50aHVtYm5haWwpLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBtYXBTcG9uc29yc1RvQ2FyZERhdGEoc3BvbnNvcnM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzcG9uc29ycykpIHJldHVybiBbXTtcbiAgICByZXR1cm4gc3BvbnNvcnMubWFwKChzOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJhd0Rlc2MgPVxuICAgICAgICBzLmJvb3RoRGVzY3JpcHRpb24gIT0gbnVsbCAmJiBTdHJpbmcocy5ib290aERlc2NyaXB0aW9uKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcocy5ib290aERlc2NyaXB0aW9uKS50cmltKClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHJhd0Rlc2NcbiAgICAgICAgPyAvPFthLXpdW1xcc1xcU10qPi9pLnRlc3QocmF3RGVzYylcbiAgICAgICAgICA/IHRoaXMuc3RyaXBIdG1sKHJhd0Rlc2MpXG4gICAgICAgICAgOiByYXdEZXNjXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IHVybFNsdWcgPSBzLnVybCA/PyBzLmJvb3RoVXJsID8/IChzLmJvb3RoSUQgIT0gbnVsbCA/IFN0cmluZyhzLmJvb3RoSUQpIDogbnVsbCkgPz8gKHMuYm9vdGhJZCAhPSBudWxsID8gU3RyaW5nKHMuYm9vdGhJZCkgOiBudWxsKTtcbiAgICAgIGNvbnN0IGxvZ29VcmwgPVxuICAgICAgICBzLmxvZ29VcmwgIT0gbnVsbCAmJiBTdHJpbmcocy5sb2dvVXJsKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcocy5sb2dvVXJsKS50cmltKClcbiAgICAgICAgICA6IG51bGw7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBzLm5hbWUgIT0gbnVsbCA/IFN0cmluZyhzLm5hbWUpLnRyaW0oKSA6ICcnLFxuICAgICAgICB3ZWJzaXRlOiBzLndlYnNpdGUgIT0gbnVsbCAmJiBTdHJpbmcocy53ZWJzaXRlKS50cmltKCkgIT09ICcnID8gU3RyaW5nKHMud2Vic2l0ZSkudHJpbSgpIDogbnVsbCxcbiAgICAgICAgY2F0ZWdvcnk6IHMuY2F0ZWdvcnkgIT0gbnVsbCA/IFN0cmluZyhzLmNhdGVnb3J5KS50cmltKCkgOiBudWxsLFxuICAgICAgICBib290aElEOiBzLmJvb3RoSUQgPz8gcy5ib290aElkID8/IG51bGwsXG4gICAgICAgIGJvb3RoVGl0bGU6IHMuYm9vdGhUaXRsZSAhPSBudWxsID8gU3RyaW5nKHMuYm9vdGhUaXRsZSkudHJpbSgpIDogJycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiA/PyBudWxsLFxuICAgICAgICAvKiogQm9vdGggVVJMIHNsdWcgZm9yIHJvdXRpbmcgdG8gZGV0YWlsIHBhZ2UgKGUuZy4gZXZlbnRzLzpldmVudFVybC9zcG9uc29ycy9ib290aHMvOnVybCkuICovXG4gICAgICAgIHVybDogdXJsU2x1ZyAhPSBudWxsID8gU3RyaW5nKHVybFNsdWcpLnRyaW0oKSA6IG51bGwsXG4gICAgICAgIGxvZ29VcmwsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcCBnZXRfZXZlbnRfYm9vdGhzIHJlc3VsdHMgaW50byB0aGUgc2FtZSBzaGFwZSB1c2VkIGJ5IHNwb25zb3IgY2FyZHMuXG4gICAqL1xuICBtYXBCb290aHNUb0NhcmREYXRhKGJvb3RoczogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGJvb3RocykpIHJldHVybiBbXTtcbiAgICByZXR1cm4gYm9vdGhzLm1hcCgoYjogYW55KSA9PiB7XG4gICAgICBjb25zdCByYXdEZXNjID1cbiAgICAgICAgYi5kZXNjcmlwdGlvbiAhPSBudWxsICYmIFN0cmluZyhiLmRlc2NyaXB0aW9uKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgPyBTdHJpbmcoYi5kZXNjcmlwdGlvbikudHJpbSgpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSByYXdEZXNjXG4gICAgICAgID8gLzxbYS16XVtcXHNcXFNdKj4vaS50ZXN0KHJhd0Rlc2MpXG4gICAgICAgICAgPyB0aGlzLnN0cmlwSHRtbChyYXdEZXNjKVxuICAgICAgICAgIDogcmF3RGVzY1xuICAgICAgICA6IG51bGw7XG4gICAgICBjb25zdCB1cmxTbHVnID0gYi51cmwgPz8gYi5ib290aFVybCA/PyAoYi5ib290aElkICE9IG51bGwgPyBTdHJpbmcoYi5ib290aElkKSA6IG51bGwpID8/IChiLmJvb3RoSUQgIT0gbnVsbCA/IFN0cmluZyhiLmJvb3RoSUQpIDogbnVsbCk7XG4gICAgICBjb25zdCBsb2dvVXJsID1cbiAgICAgICAgYi5sb2dvVXJsICE9IG51bGwgJiYgU3RyaW5nKGIubG9nb1VybCkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgID8gU3RyaW5nKGIubG9nb1VybCkudHJpbSgpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogYi5jb21wYW55ICE9IG51bGwgPyBTdHJpbmcoYi5jb21wYW55KS50cmltKCkgOiAnJyxcbiAgICAgICAgd2Vic2l0ZTpcbiAgICAgICAgICBiLndlYnNpdGUgIT0gbnVsbCAmJiBTdHJpbmcoYi53ZWJzaXRlKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICA/IFN0cmluZyhiLndlYnNpdGUpLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICBjYXRlZ29yeTogbnVsbCxcbiAgICAgICAgYm9vdGhJRDogYi5ib290aElkID8/IGIuYm9vdGhJRCA/PyBudWxsLFxuICAgICAgICBib290aFRpdGxlOiBiLmJvb3RoVGl0bGUgIT0gbnVsbCA/IFN0cmluZyhiLmJvb3RoVGl0bGUpLnRyaW0oKSA6ICcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gPz8gbnVsbCxcbiAgICAgICAgLyoqIEJvb3RoIFVSTCBzbHVnIGZvciByb3V0aW5nIHRvIGRldGFpbCBwYWdlIChlLmcuIGV2ZW50cy86ZXZlbnRVcmwvc3BvbnNvcnMvYm9vdGhzLzp1cmwpLiAqL1xuICAgICAgICB1cmw6IHVybFNsdWcgIT0gbnVsbCA/IFN0cmluZyh1cmxTbHVnKS50cmltKCkgOiBudWxsLFxuICAgICAgICBsb2dvVXJsLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXAgZ2V0X2Jvb3RoX3JlcHJlc2VudGF0aXZlcyByZXN1bHRzIGludG8gdGhlIHNhbWUgc2hhcGUgYXMgYXR0ZW5kZWUgY2FyZHMgKGZvciByZXVzZSBvZiBhdHRlbmRlZSBkZXNpZ24pLlxuICAgKi9cbiAgbWFwQm9vdGhSZXBzVG9DYXJkRGF0YShyZXByZXNlbnRhdGl2ZXM6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShyZXByZXNlbnRhdGl2ZXMpKSByZXR1cm4gW107XG4gICAgcmV0dXJuIHJlcHJlc2VudGF0aXZlcy5tYXAoKHI6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZmlyc3QgPSByLmZpcnN0TmFtZSAhPSBudWxsID8gU3RyaW5nKHIuZmlyc3ROYW1lKS50cmltKCkgOiAnJztcbiAgICAgIGNvbnN0IGxhc3QgPSByLmxhc3ROYW1lICE9IG51bGwgPyBTdHJpbmcoci5sYXN0TmFtZSkudHJpbSgpIDogJyc7XG4gICAgICBjb25zdCBuYW1lID0gW2ZpcnN0LCBsYXN0XS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpIHx8ICcnO1xuICAgICAgY29uc3QgdXNlcklkID0gci51c2VySWQgIT0gbnVsbCAmJiBTdHJpbmcoci51c2VySWQpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoci51c2VySWQpLnRyaW0oKSA6IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGNvbXBhbnk6XG4gICAgICAgICAgci5jb21wYW55ICE9IG51bGwgJiYgU3RyaW5nKHIuY29tcGFueSkudHJpbSgpICE9PSAnJ1xuICAgICAgICAgICAgPyBTdHJpbmcoci5jb21wYW55KS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgam9iVGl0bGU6XG4gICAgICAgICAgci5qb2JUaXRsZSAhPSBudWxsICYmIFN0cmluZyhyLmpvYlRpdGxlKS50cmltKCkgIT09ICcnXG4gICAgICAgICAgICA/IFN0cmluZyhyLmpvYlRpdGxlKS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgcGhvdG86XG4gICAgICAgICAgci5waG90b1BhdGggIT0gbnVsbCAmJiBTdHJpbmcoci5waG90b1BhdGgpLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgID8gU3RyaW5nKHIucGhvdG9QYXRoKS50cmltKClcbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgaW50ZXJlc3RzOiBudWxsLFxuICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICByLmRlc2NyaXB0aW9uICE9IG51bGwgJiYgU3RyaW5nKHIuZGVzY3JpcHRpb24pLnRyaW0oKSAhPT0gJydcbiAgICAgICAgICAgID8gU3RyaW5nKHIuZGVzY3JpcHRpb24pLnRyaW0oKVxuICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICB1c2VyVmlkZW9zTW9kZWw6IG51bGwsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGdldF9ldmVudF9zZXNzaW9uc192MiBwbGFpbi10ZXh0IGNvbnRlbnQgaW50byBzZXNzaW9uIG9iamVjdHMgZm9yIGNhcmRzLlxuICAgKiBGb3JtYXQ6IFwiRm91bmQgTiBzZXNzaW9uczpcXG4xLiA8dGl0bGU+XFxuICAgLSBUaW1lOiBTdGFydDogLi4uLCBFbmQ6IC4uLiwgVGltZVpvbmU6IC4uLlxcbiAgIC0gUm9vbTogLi4uXFxuICAgLSBUeXBlOiAuLi5cXG4yLiAuLi5cIlxuICAgKi9cbiAgcGFyc2VTZXNzaW9uQ29udGVudFYyKGNvbnRlbnQ6IHN0cmluZyk6IGFueVtdIHtcbiAgICBpZiAoIWNvbnRlbnQgfHwgdHlwZW9mIGNvbnRlbnQgIT09ICdzdHJpbmcnKSByZXR1cm4gW107XG4gICAgY29uc3Qgc2Vzc2lvbnM6IGFueVtdID0gW107XG4gICAgLy8gU3BsaXQgaW50byBibG9ja3MgYnkgXCIxLiBcIiwgXCIyLiBcIiwgZXRjLiAobnVtYmVyICsgZG90ICsgc3BhY2UgYXQgbGluZSBzdGFydClcbiAgICBjb25zdCBibG9ja1JlZ2V4ID0gL1xcblxcZCtcXC5cXHMrLztcbiAgICBjb25zdCBwYXJ0cyA9IGNvbnRlbnQuc3BsaXQoYmxvY2tSZWdleCk7XG4gICAgLy8gRmlyc3QgcGFydCBtYXkgYmUgXCJGb3VuZCBOIHNlc3Npb25zOlwiIG9yIHNpbWlsYXI7IHNraXAgaWYgaXQgZG9lc24ndCBsb29rIGxpa2UgYSBzZXNzaW9uIHRpdGxlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgYmxvY2sgPSBwYXJ0c1tpXS50cmltKCk7XG4gICAgICBpZiAoIWJsb2NrKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGxpbmVzID0gYmxvY2tcbiAgICAgICAgLnNwbGl0KC9cXG4vKVxuICAgICAgICAubWFwKChsKSA9PiBsLnRyaW0oKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGNvbnN0IHRpdGxlID0gbGluZXNbMF0gfHwgJyc7XG4gICAgICBpZiAoIXRpdGxlIHx8IC9eRm91bmRcXHMrXFxkK1xccytzZXNzaW9ucy9pLnRlc3QodGl0bGUpKSBjb250aW51ZTtcbiAgICAgIGxldCBkYXRlVGltZVJhbmdlID0gJyc7XG4gICAgICBsZXQgcm9vbU5hbWUgPSAnJztcbiAgICAgIGxldCBzZXNzaW9uVHlwZSA9ICcnO1xuICAgICAgbGV0IHRpbWVab25lID0gJyc7XG4gICAgICBmb3IgKGxldCBqID0gMTsgaiA8IGxpbmVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBsaW5lc1tqXTtcbiAgICAgICAgY29uc3QgdGltZU1hdGNoID0gbGluZS5tYXRjaCgvVGltZTpcXHMqKC4rKS9pKTtcbiAgICAgICAgaWYgKHRpbWVNYXRjaCkge1xuICAgICAgICAgIGRhdGVUaW1lUmFuZ2UgPSB0aW1lTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgICAgIGNvbnN0IHR6TWF0Y2ggPSBkYXRlVGltZVJhbmdlLm1hdGNoKC9UaW1lWm9uZTpcXHMqKFteLFxcbl0rKS9pKTtcbiAgICAgICAgICBpZiAodHpNYXRjaCkgdGltZVpvbmUgPSB0ek1hdGNoWzFdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb29tTWF0Y2ggPSBsaW5lLm1hdGNoKC9Sb29tOlxccyooLispL2kpO1xuICAgICAgICBpZiAocm9vbU1hdGNoKSB7XG4gICAgICAgICAgcm9vbU5hbWUgPSByb29tTWF0Y2hbMV0udHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHR5cGVNYXRjaCA9IGxpbmUubWF0Y2goL1R5cGU6XFxzKiguKykvaSk7XG4gICAgICAgIGlmICh0eXBlTWF0Y2gpIHtcbiAgICAgICAgICBzZXNzaW9uVHlwZSA9IHR5cGVNYXRjaFsxXS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdHpMaW5lTWF0Y2ggPSBsaW5lLm1hdGNoKC9UaW1lWm9uZTpcXHMqKC4rKS9pKTtcbiAgICAgICAgaWYgKHR6TGluZU1hdGNoICYmICF0aW1lWm9uZSkgdGltZVpvbmUgPSB0ekxpbmVNYXRjaFsxXS50cmltKCk7XG4gICAgICB9XG4gICAgICBzZXNzaW9ucy5wdXNoKHtcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHJvb21OYW1lOiByb29tTmFtZSB8fCB1bmRlZmluZWQsXG4gICAgICAgIGRhdGVUaW1lUmFuZ2U6IGRhdGVUaW1lUmFuZ2UgfHwgdW5kZWZpbmVkLFxuICAgICAgICBzZXNzaW9uVHlwZTogc2Vzc2lvblR5cGUgfHwgdW5kZWZpbmVkLFxuICAgICAgICB0aW1lWm9uZTogdGltZVpvbmUgfHwgdW5kZWZpbmVkLFxuICAgICAgICBzZXNzaW9uUm9sZXM6IFtdLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzZXNzaW9ucztcbiAgfVxuXG4gIGdldFZpc2libGVTZXNzaW9uQ2FyZHMoY2hhdDogYW55KTogYW55W10ge1xuICAgIGNvbnN0IGxpc3QgPSBjaGF0Py5zZXNzaW9uQ2FyZHMgPz8gW107XG4gICAgY29uc3QgdG90YWwgPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRTZXNzaW9uQ2FyZElkc1tjaGF0Py5faWRdO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IHRvdGFsIC0gdGhpcy5TRVNTSU9OX0NBUkRTX0lOSVRJQUw7XG4gICAgaWYgKHJlbWFpbmluZyA+IDQgJiYgIWV4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gbGlzdC5zbGljZSgwLCB0aGlzLlNFU1NJT05fQ0FSRFNfSU5JVElBTCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgZ2V0VmlzaWJsZUF0dGVuZGVlQ2FyZHMoY2hhdDogYW55KTogYW55W10ge1xuICAgIGNvbnN0IGxpc3QgPSBjaGF0Py5hdHRlbmRlZUNhcmRzID8/IFtdO1xuICAgIGNvbnN0IHRvdGFsID0gbGlzdC5sZW5ndGg7XG4gICAgY29uc3QgZXhwYW5kZWQgPSB0aGlzLmV4cGFuZGVkQXR0ZW5kZWVDYXJkSWRzW2NoYXQ/Ll9pZF07XG4gICAgY29uc3QgcmVtYWluaW5nID0gdG90YWwgLSB0aGlzLkFUVEVOREVFX0NBUkRTX0lOSVRJQUw7XG4gICAgaWYgKHJlbWFpbmluZyA+IDQgJiYgIWV4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gbGlzdC5zbGljZSgwLCB0aGlzLkFUVEVOREVFX0NBUkRTX0lOSVRJQUwpO1xuICAgIH1cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIGdldFZpc2libGVTcGVha2VyQ2FyZHMoY2hhdDogYW55KTogYW55W10ge1xuICAgIGNvbnN0IGxpc3QgPSBjaGF0Py5zcGVha2VyQ2FyZHMgPz8gW107XG4gICAgY29uc3QgdG90YWwgPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRTcGVha2VyQ2FyZElkc1tjaGF0Py5faWRdO1xuICAgIGNvbnN0IHJlbWFpbmluZyA9IHRvdGFsIC0gdGhpcy5TUEVBS0VSX0NBUkRTX0lOSVRJQUw7XG4gICAgaWYgKHJlbWFpbmluZyA+IDQgJiYgIWV4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gbGlzdC5zbGljZSgwLCB0aGlzLlNQRUFLRVJfQ0FSRFNfSU5JVElBTCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0O1xuICB9XG5cbiAgZ2V0VmlzaWJsZVNwb25zb3JDYXJkcyhjaGF0OiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgbGlzdCA9IGNoYXQ/LnNwb25zb3JDYXJkcyA/PyBbXTtcbiAgICBjb25zdCB0b3RhbCA9IGxpc3QubGVuZ3RoO1xuICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5leHBhbmRlZFNwb25zb3JDYXJkSWRzW2NoYXQ/Ll9pZF07XG4gICAgY29uc3QgcmVtYWluaW5nID0gdG90YWwgLSB0aGlzLlNQT05TT1JfQ0FSRFNfSU5JVElBTDtcbiAgICBpZiAocmVtYWluaW5nID4gNCAmJiAhZXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiBsaXN0LnNsaWNlKDAsIHRoaXMuU1BPTlNPUl9DQVJEU19JTklUSUFMKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBnZXRWaXNpYmxlQm9vdGhSZXBDYXJkcyhjaGF0OiBhbnkpOiBhbnlbXSB7XG4gICAgY29uc3QgbGlzdCA9IGNoYXQ/LmJvb3RoUmVwQ2FyZHMgPz8gW107XG4gICAgY29uc3QgdG90YWwgPSBsaXN0Lmxlbmd0aDtcbiAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRCb290aFJlcENhcmRJZHNbY2hhdD8uX2lkXTtcbiAgICBjb25zdCByZW1haW5pbmcgPSB0b3RhbCAtIHRoaXMuQk9PVEhfUkVQX0NBUkRTX0lOSVRJQUw7XG4gICAgaWYgKHJlbWFpbmluZyA+IDQgJiYgIWV4cGFuZGVkKSB7XG4gICAgICByZXR1cm4gbGlzdC5zbGljZSgwLCB0aGlzLkJPT1RIX1JFUF9DQVJEU19JTklUSUFMKTtcbiAgICB9XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICBleHBhbmRTZXNzaW9uQ2FyZHMoY2hhdDogYW55KTogdm9pZCB7XG4gICAgaWYgKGNoYXQ/Ll9pZCkge1xuICAgICAgdGhpcy5leHBhbmRlZFNlc3Npb25DYXJkSWRzID0ge1xuICAgICAgICAuLi50aGlzLmV4cGFuZGVkU2Vzc2lvbkNhcmRJZHMsXG4gICAgICAgIFtjaGF0Ll9pZF06IHRydWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZXhwYW5kQXR0ZW5kZWVDYXJkcyhjaGF0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY2hhdD8uX2lkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkQXR0ZW5kZWVDYXJkSWRzID0ge1xuICAgICAgICAuLi50aGlzLmV4cGFuZGVkQXR0ZW5kZWVDYXJkSWRzLFxuICAgICAgICBbY2hhdC5faWRdOiB0cnVlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGV4cGFuZFNwZWFrZXJDYXJkcyhjaGF0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY2hhdD8uX2lkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkU3BlYWtlckNhcmRJZHMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXhwYW5kZWRTcGVha2VyQ2FyZElkcyxcbiAgICAgICAgW2NoYXQuX2lkXTogdHJ1ZSxcbiAgICAgIH07XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBleHBhbmRTcG9uc29yQ2FyZHMoY2hhdDogYW55KTogdm9pZCB7XG4gICAgaWYgKGNoYXQ/Ll9pZCkge1xuICAgICAgdGhpcy5leHBhbmRlZFNwb25zb3JDYXJkSWRzID0ge1xuICAgICAgICAuLi50aGlzLmV4cGFuZGVkU3BvbnNvckNhcmRJZHMsXG4gICAgICAgIFtjaGF0Ll9pZF06IHRydWUsXG4gICAgICB9O1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZXhwYW5kQm9vdGhSZXBDYXJkcyhjaGF0OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoY2hhdD8uX2lkKSB7XG4gICAgICB0aGlzLmV4cGFuZGVkQm9vdGhSZXBDYXJkSWRzID0ge1xuICAgICAgICAuLi50aGlzLmV4cGFuZGVkQm9vdGhSZXBDYXJkSWRzLFxuICAgICAgICBbY2hhdC5faWRdOiB0cnVlLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMYWJlbCBmb3Igc2Vzc2lvbiB0eXBlIG9uIGNhcmRzOiBcIlNlc3Npb24gdHlwZVwiIHdoZW4gaXNVbkV2ZW50LCBlbHNlIFwiTWVldGluZyB0eXBlXCIuXG4gICAqL1xuICBnZXRTZXNzaW9uVHlwZUxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNVbkV2ZW50XG4gICAgPyB0aGlzLmdldFRyYW5zbGF0aW9uKCdNZWV0aW5nIHR5cGUnKSB8fCAnTWVldGluZyB0eXBlJ1xuICAgIDogdGhpcy5nZXRUcmFuc2xhdGlvbignU2Vzc2lvbiB0eXBlJykgfHwgJ1Nlc3Npb24gdHlwZSdcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgSm9pbi9XYXRjaCByb2xlIGJ1dHRvbnMgZnJvbSBzZXNzaW9uLnNlc3Npb25Sb2xlcyBmb3Igc2Vzc2lvbiBjYXJkcy5cbiAgICogV2hlbiBpc1VuRXZlbnQgaXMgZmFsc2UsIHJldHVybnMgc2luZ2xlIFwiV2F0Y2hcIiBidXR0b24gKHNhbWUgYXMgdGVtcGxhdGUyKS4gV2hlbiB0cnVlLCByZXR1cm5zIEpvaW4vV2F0Y2ggZnJvbSBzZXNzaW9uUm9sZXMuXG4gICAqL1xuICBnZXRTZXNzaW9uUm9sZUJ1dHRvbnMoc2Vzc2lvbkNhcmQ6IGFueSk6IHsgYWN0aW9uOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdIHtcbiAgICBpZiAodGhpcy5pc1VuRXZlbnQgPT09IGZhbHNlICYmIHNlc3Npb25DYXJkPy5zZXNzaW9uKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgYWN0aW9uOiAnam9pbicsXG4gICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ1dhdGNoJykgfHwgJ1dhdGNoJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuICAgIGNvbnN0IHJhdyA9IHNlc3Npb25DYXJkPy5zZXNzaW9uPy5zZXNzaW9uUm9sZXM7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHJhdykgfHwgcmF3Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHJvbGVzOiB7IGFjdGlvbjogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgciBvZiByYXcpIHtcbiAgICAgIGNvbnN0IG5hbWUgPVxuICAgICAgICB0eXBlb2YgciA9PT0gJ29iamVjdCcgJiYgciAhPSBudWxsICYmIHIuc2Vzc2lvblJvbGVOYW1lXG4gICAgICAgICAgPyBTdHJpbmcoci5zZXNzaW9uUm9sZU5hbWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgOiBTdHJpbmcocikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobmFtZSA9PT0gJ2pvaW4nIHx8IG5hbWUgPT09ICd3YXRjaCcpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPVxuICAgICAgICAgIG5hbWUgPT09ICdqb2luJ1xuICAgICAgICAgICAgPyB0aGlzLmdldFRyYW5zbGF0aW9uKCdKb2luJykgfHwgJ0pvaW4nXG4gICAgICAgICAgICA6IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ1dhdGNoJykgfHwgJ1dhdGNoJztcbiAgICAgICAgcm9sZXMucHVzaCh7IGFjdGlvbjogbmFtZSwgbGFiZWwgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByb2xlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBzZXNzaW9uIGlzIG9uLWRlbWFuZCAoY2xhc3NpZmljYXRpb25JZCA9PT0gZUNsYXNzaWZpY2F0aW9uVHlwZS5PbkRlbWFuZCkuXG4gICAqIFdoZW4gdHJ1ZSwgSm9pbi9XYXRjaCBhcmUgYWx3YXlzIGFjdGlvbmFibGUgYW5kIGNhcmQgdXNlcyBPbkRlbWFuZCBkZXNpZ24uXG4gICAqL1xuICBpc1Nlc3Npb25PbmRlbWFuZChzZXNzaW9uQ2FyZDogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgaWQgPVxuICAgICAgc2Vzc2lvbkNhcmQ/LnNlc3Npb24/LmNsYXNzaWZpY2F0aW9uSWQgPz8gc2Vzc2lvbkNhcmQ/LmNsYXNzaWZpY2F0aW9uSWQ7XG4gICAgaWYgKGlkID09IG51bGwgfHwgaWQgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIFN0cmluZyhpZCkgPT09IGVDbGFzc2lmaWNhdGlvblR5cGUuT25EZW1hbmQ7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBKb2luL1dhdGNoIGFjdGlvbiBpcyBwb3NzaWJsZSAoc2FtZSBsb2dpYyBhcyBhcHAgdGVtcGxhdGU4KS5cbiAgICogQWN0aW9uIGlzIGFsbG93ZWQgd2hlbjogb24tZGVtYW5kIHNlc3Npb24gT1IgaXNCdXR0b25BY3RpdmF0ZWQgKHNlc3Npb24gaGFzIHN0YXJ0ZWQpLlxuICAgKi9cbiAgY2FuUGVyZm9ybVNlc3Npb25BY3Rpb24oc2Vzc2lvbkNhcmQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghc2Vzc2lvbkNhcmQ/LnNlc3Npb24pIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBzID0gc2Vzc2lvbkNhcmQuc2Vzc2lvbjtcbiAgICBpZiAodGhpcy5pc1Nlc3Npb25PbmRlbWFuZChzZXNzaW9uQ2FyZCkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAhIXMuaXNCdXR0b25BY3RpdmF0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2FtZSBsb2dpYyBhcyBhcHAgdGVtcGxhdGU4OiBkZWxheSBpbiBtaW51dGVzIChzY2hlZHVsZWQgc3RhcnQgLSBhY3R1YWwgc3RhcnQpLlxuICAgKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBlaXRoZXIgZGF0ZSBtaXNzaW5nOyA+IDAgd2hlbiBtZWV0aW5nIGlzIGRlbGF5ZWQuXG4gICAqL1xuICBnZXRNZWV0aW5nRGVsYXlNaW51dGVzKHNlc3Npb25DYXJkOiBhbnkpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHMgPSBzZXNzaW9uQ2FyZD8uc2Vzc2lvbjtcbiAgICBpZiAoIXMpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gcy5kYXRlVGltZVJhbmdlPy5zdGFydDtcbiAgICBjb25zdCBhY3R1YWxTdGFydCA9IHMuYWN0dWFsRGF0ZVRpbWVSYW5nZT8uc3RhcnQ7XG4gICAgaWYgKCFzdGFydERhdGUgfHwgIWFjdHVhbFN0YXJ0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkaWZmTXMgPVxuICAgICAgICBuZXcgRGF0ZShzdGFydERhdGUpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGFjdHVhbFN0YXJ0KS5nZXRUaW1lKCk7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihkaWZmTXMgLyAoMTAwMCAqIDYwKSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gbWVldGluZyBpcyBkZWxheWVkIChzYW1lIGNvbmRpdGlvbiBhcyB0ZW1wbGF0ZTg6IGRlbGF5IG1pbnV0ZXMgPiAwLCBub3Qgb24tZGVtYW5kLCBidXR0b24gbm90IGFjdGl2YXRlZCkuICovXG4gIGlzTWVldGluZ0RlbGF5ZWQoc2Vzc2lvbkNhcmQ6IGFueSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRlbGF5ID0gdGhpcy5nZXRNZWV0aW5nRGVsYXlNaW51dGVzKHNlc3Npb25DYXJkKTtcbiAgICBpZiAoZGVsYXkgPT0gbnVsbCB8fCBkZWxheSA8PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuaXNTZXNzaW9uT25kZW1hbmQoc2Vzc2lvbkNhcmQpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHNlc3Npb25DYXJkPy5zZXNzaW9uPy5pc0J1dHRvbkFjdGl2YXRlZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb25TZXNzaW9uQ2FyZEFjdGlvbihcbiAgICBzZXNzaW9uQ2FyZDogYW55LFxuICAgIHJvbGU6IHsgYWN0aW9uOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFzZXNzaW9uQ2FyZD8uc2Vzc2lvbikgcmV0dXJuO1xuICAgIGlmICh0aGlzLmlzVW5FdmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuc2Vzc2lvbkFjdGlvbnMuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdzZXNzaW9uJyxcbiAgICAgICAgYWN0aW9uOiByb2xlLmFjdGlvbixcbiAgICAgICAgc2Vzc2lvbjogc2Vzc2lvbkNhcmQuc2Vzc2lvbixcbiAgICAgICAgc2Vzc2lvbkNhcmQsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNhblBlcmZvcm1TZXNzaW9uQWN0aW9uKHNlc3Npb25DYXJkKSkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICAgIHRoaXMuZ2V0VHJhbnNsYXRpb24oJ1lvdSBjYW4gam9pbi93YXRjaCBhdCB0aGUgc3RhcnRpbmcgdGltZScpIHx8XG4gICAgICAgICdZb3UgY2FuIGpvaW4vd2F0Y2ggYXQgdGhlIHN0YXJ0aW5nIHRpbWUnO1xuICAgICAgdGhpcy5zZXNzaW9uQWN0aW9uQmxvY2tlZC5lbWl0KG1lc3NhZ2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnNlc3Npb25BY3Rpb25zLmVtaXQoe1xuICAgICAgdHlwZTogJ3Nlc3Npb24nLFxuICAgICAgYWN0aW9uOiByb2xlLmFjdGlvbixcbiAgICAgIHNlc3Npb246IHNlc3Npb25DYXJkLnNlc3Npb24sXG4gICAgICBzZXNzaW9uQ2FyZCxcbiAgICB9KTtcbiAgfVxuXG4gIGxpc3RlblNvY2tldHMoKSB7XG4gICAgaWYgKHRoaXMuZXZlbnRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgY29uc29sZS5sb2coJ0xpc3RlbiBTb2NrZXQnKTtcbiAgICB0aGlzLmV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlXG4gICAgICAuZ2V0VXNlclNwZWNpZmljTm90aWZpY2F0aW9uKClcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIChyZXMpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBsaXN0ZW5Tb2NrZXRzIHJlY2VpdmVkJywge1xuICAgICAgICAgICAgaGFzT3RoZXJGaWVsZHM6ICEhcmVzPy5tPy5PdGhlckZpZWxkcyxcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogcmVzPy5tPy5PdGhlckZpZWxkcz8ubWVzc2FnZV9pZCxcbiAgICAgICAgICAgIGhhc0Fuc3dlcjogISFyZXM/Lm0/Lk90aGVyRmllbGRzPy5hbnN3ZXIsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgT3RoZXJGaWVsZHMgZXhpc3RzIGluIHRoZSByZXNwb25zZVxuICAgICAgICAgIGlmIChyZXM/Lm0/Lk90aGVyRmllbGRzPy53b3JrZmxvd19pZCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIFdvcmtmbG93IHByb2dyZXNzIHVwZGF0ZScsXG4gICAgICAgICAgICAgIHJlcz8ubT8uT3RoZXJGaWVsZHMsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBwZXJjZW50YWdlLFxuICAgICAgICAgICAgICBvdXRwdXQsXG4gICAgICAgICAgICAgIGFjdGlvbl9uYW1lLFxuICAgICAgICAgICAgICBjdXJyZW50X2FjdGlvbl9uYW1lLFxuICAgICAgICAgICAgICB3b3JrZmxvd19leGVjdXRpb25faWQsXG4gICAgICAgICAgICAgIHRpbWVfc3RhbXAsXG4gICAgICAgICAgICB9ID0gcmVzPy5tPy5PdGhlckZpZWxkcztcblxuICAgICAgICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzcyA9IHBlcmNlbnRhZ2U7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRXb3JrZmxvd0FjdGlvbiA9IGFjdGlvbl9uYW1lO1xuXG4gICAgICAgICAgICBjb25zdCBhY3Rpb25JbmRleCA9IHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzLkFjdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAoYSkgPT4gYS5OYW1lID09IGN1cnJlbnRfYWN0aW9uX25hbWUsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzLkFjdGlvbnNbYWN0aW9uSW5kZXhdWydPdXRwdXQnXSA9XG4gICAgICAgICAgICAgICAgb3V0cHV0O1xuICAgICAgICAgICAgICB0aGlzLndvcmtmbG93RXhlY3V0aW9uRGV0YWlscy5BY3Rpb25zW2FjdGlvbkluZGV4XVtcbiAgICAgICAgICAgICAgICAnSW5zZXJ0VGltZVN0YW1wJ1xuICAgICAgICAgICAgICBdID0gZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCB0aW1lX3N0YW1wKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEFjdGlvbiB3aXRoIG5hbWUgJHthY3Rpb25fbmFtZX0gbm90IGZvdW5kYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93RXhlY3V0aW9uRGV0YWlscyA9XG4gICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzcyA9PSAxMDApIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nW3RoaXMuY2hhdExvZy5sZW5ndGggLSAxXVsnV29ya2Zsb3dFeGVjdXRpb25JZCddID1cbiAgICAgICAgICAgICAgICB3b3JrZmxvd19leGVjdXRpb25faWQ7XG4gICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuZXhlY3V0aW5nV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c09uVGV4dGFyZWEoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmVzPy5tPy5PdGhlckZpZWxkcykge1xuICAgICAgICAgICAgY29uc3Qgb3RoZXJGaWVsZHMgPSByZXMubS5PdGhlckZpZWxkcztcbiAgICAgICAgICAgIGNvbnN0IHNlcmlhbGl6YWJsZSA9IG90aGVyRmllbGRzLnNlcmlhbGl6YWJsZV90b19yZXR1cm47XG5cbiAgICAgICAgICAgIC8vIFNlc3Npb24gY2FyZHM6IGV2ZW50IHNlc3Npb25zIHRvb2xzIChKU09OIG9yIHBsYWluIHRleHQpXG4gICAgICAgICAgICBjb25zdCBpc1Nlc3Npb25Ub29sID1cbiAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfZXZlbnRfc2Vzc2lvbnMnIHx8XG4gICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2V2ZW50X3Nlc3Npb25zX3YyJyB8fFxuICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9zZXNzaW9uc19ieV9pbnRlcmVzdCcgfHxcbiAgICAgICAgICAgICAgc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfc2Vzc2lvbnNfYnlfdHJhY2snIHx8XG4gICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X3NwZWFrZXJfc2Vzc2lvbnMnIHx8XG4gICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X3VwY29taW5nX3Nlc3Npb25zJztcbiAgICAgICAgICAgIGlmIChpc1Nlc3Npb25Ub29sKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPVxuICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnQ7XG4gICAgICAgICAgICAgIGNvbnN0IGFuc3dlclRleHQgPVxuICAgICAgICAgICAgICAgIG90aGVyRmllbGRzLmFuc3dlciAhPSBudWxsXG4gICAgICAgICAgICAgICAgICA/IFN0cmluZyhvdGhlckZpZWxkcy5hbnN3ZXIpLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgbGV0IHB1c2hlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoY29udGVudFN0ciAmJiB0eXBlb2YgY29udGVudFN0ciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2Vzc2lvbnM6IGFueVtdID0gW107XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgICAgICBzZXNzaW9ucyA9IHBhcnNlZD8uc2Vzc2lvbnMgPz8gW107XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgLy8gdjIgcGxhaW4gdGV4dDogXCJGb3VuZCAyIHNlc3Npb25zOlxcbjEuIFRpdGxlXFxuICAgLSBUaW1lOiBTdGFydDogLi4uIEVuZDogLi4uXFxuICAgLSBSb29tOiAuLi5cXG4gICAtIFR5cGU6IC4uLlwiXG4gICAgICAgICAgICAgICAgICBzZXNzaW9ucyA9IHRoaXMucGFyc2VTZXNzaW9uQ29udGVudFYyKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcFNlc3Npb25zVG9DYXJkRGF0YShzZXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVTcGVha2Vyc0ZvclNlc3Npb25DYXJkcyhtYXBwZWQpO1xuICAgICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPVxuICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemFibGUubWVzc2FnZV9pZCB8fCBgc2Vzc2lvbl9jYXJkc18ke0RhdGUubm93KCl9YDtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRFbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgX2lkOiBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Nlc3Npb25fY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhbnN3ZXJUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXJUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbkNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJZHggPSB0aGlzLmNoYXRMb2cuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5faWQgPT09IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0lkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZ1tleGlzdGluZ0lkeF0gPSBjYXJkRW50cnk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChjYXJkRW50cnkpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgICAgICAgcHVzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHB1c2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBObyBzZXNzaW9uIGNhcmRzIHB1c2hlZDogZmFsbCB0aHJvdWdoIHRvIG5vcm1hbCBPdGhlckZpZWxkcyBoYW5kbGluZyBzbyBhbnN3ZXIgaXMgZGlzcGxheWVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEF0dGVuZGVlIGNhcmRzOiB0b29sIGdldF9ldmVudF9hdHRlbmRlZXMgKG9ubHkgcHVzaCB3aGVuIHdlIGhhdmUgYXR0ZW5kZWVzOyBlbHNlIGZhbGwgdGhyb3VnaCBzbyBhbnN3ZXIgaXMgc2hvd24gYXMgbm9ybWFsIEFJIG1lc3NhZ2UpXG4gICAgICAgICAgICBpZiAoc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfZXZlbnRfYXR0ZW5kZWVzJykge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID1cbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50O1xuICAgICAgICAgICAgICBjb25zdCBhbnN3ZXJUZXh0ID1cbiAgICAgICAgICAgICAgICBvdGhlckZpZWxkcy5hbnN3ZXIgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcob3RoZXJGaWVsZHMuYW5zd2VyKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgIGxldCBwdXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRTdHIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dGVuZGVlcyA9IHBhcnNlZD8uYXR0ZW5kZWVzID8/IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBBdHRlbmRlZXNUb0NhcmREYXRhKGF0dGVuZGVlcyk7XG4gICAgICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPVxuICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZS5tZXNzYWdlX2lkIHx8IGBhdHRlbmRlZV9jYXJkc18ke0RhdGUubm93KCl9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZEVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgIF9pZDogbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2F0dGVuZGVlX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhbnN3ZXJUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGFuc3dlclRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgICAgICAgICBhdHRlbmRlZUNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWR4ID0gdGhpcy5jaGF0TG9nLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5faWQgPT09IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZ1tleGlzdGluZ0lkeF0gPSBjYXJkRW50cnk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goY2FyZEVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnW1NvY2tldCBDaGF0XSBFcnJvciBwYXJzaW5nIGdldF9ldmVudF9hdHRlbmRlZXMgY29udGVudDonLFxuICAgICAgICAgICAgICAgICAgICBlLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHB1c2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvKiBhdHRlbmRlZXMgZW1wdHkgKGUuZy4gdG90YWxDb3VudDogMCk6IGZhbGwgdGhyb3VnaCBzbyBhbnN3ZXIgbGlrZSBcIkkgY291bGRuJ3QgZmluZCBhbnkgYXR0ZW5kZWVzLi4uXCIgaXMgc2hvd24gYXMgbm9ybWFsIEFJIG1lc3NhZ2UgKi9cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gU3BlYWtlciBjYXJkczogdG9vbCBnZXRfZXZlbnRfc3BlYWtlcnMgKHNhbWUgaGFuZGxpbmcgYXMgYXR0ZW5kZWVzOyBvbmx5IHB1c2ggd2hlbiB3ZSBoYXZlIHNwZWFrZXJzKVxuICAgICAgICAgICAgaWYgKHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2V2ZW50X3NwZWFrZXJzJykge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID1cbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50O1xuICAgICAgICAgICAgICBjb25zdCBhbnN3ZXJUZXh0ID1cbiAgICAgICAgICAgICAgICBvdGhlckZpZWxkcy5hbnN3ZXIgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcob3RoZXJGaWVsZHMuYW5zd2VyKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgIGxldCBwdXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRTdHIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNwZWFrZXJzID0gcGFyc2VkPy5zcGVha2VycyA/PyBwYXJzZWQ/LnNwZWFrZXIgPz8gW107XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcFNwZWFrZXJzVG9DYXJkRGF0YShzcGVha2Vycyk7XG4gICAgICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPVxuICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZS5tZXNzYWdlX2lkIHx8IGBzcGVha2VyX2NhcmRzXyR7RGF0ZS5ub3coKX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJkRW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgX2lkOiBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3BlYWtlcl9jYXJkcycsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYW5zd2VyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXJUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgICAgICAgICAgc3BlYWtlckNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWR4ID0gdGhpcy5jaGF0TG9nLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5faWQgPT09IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZ1tleGlzdGluZ0lkeF0gPSBjYXJkRW50cnk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goY2FyZEVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnW1NvY2tldCBDaGF0XSBFcnJvciBwYXJzaW5nIGdldF9ldmVudF9zcGVha2VycyBjb250ZW50OicsXG4gICAgICAgICAgICAgICAgICAgIGUsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocHVzaGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8qIHNwZWFrZXJzIGVtcHR5OiBmYWxsIHRocm91Z2ggc28gYW5zd2VyIGlzIHNob3duIGFzIG5vcm1hbCBBSSBtZXNzYWdlICovXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNwb25zb3IgY2FyZHM6IHRvb2wgZ2V0X2V2ZW50X3Nwb25zb3JzIChvbmx5IHB1c2ggd2hlbiB3ZSBoYXZlIHNwb25zb3JzKVxuICAgICAgICAgICAgaWYgKHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2V2ZW50X3Nwb25zb3JzJykge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID1cbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50O1xuICAgICAgICAgICAgICBjb25zdCBhbnN3ZXJUZXh0ID1cbiAgICAgICAgICAgICAgICBvdGhlckZpZWxkcy5hbnN3ZXIgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcob3RoZXJGaWVsZHMuYW5zd2VyKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgIGxldCBwdXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRTdHIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNwb25zb3JzID0gcGFyc2VkPy5zcG9uc29ycyA/PyBbXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwU3BvbnNvcnNUb0NhcmREYXRhKHNwb25zb3JzKTtcbiAgICAgICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2dJZCA9XG4gICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlLm1lc3NhZ2VfaWQgfHwgYHNwb25zb3JfY2FyZHNfJHtEYXRlLm5vdygpfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcmRFbnRyeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICBfaWQ6IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzcG9uc29yX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBhbnN3ZXJUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGFuc3dlclRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgICAgICAgICAgICBzcG9uc29yQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJZHggPSB0aGlzLmNoYXRMb2cuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChwKSA9PiBwLl9pZCA9PT0gbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0lkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nW2V4aXN0aW5nSWR4XSA9IGNhcmRFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaChjYXJkRW50cnkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICBwdXNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdbU29ja2V0IENoYXRdIEVycm9yIHBhcnNpbmcgZ2V0X2V2ZW50X3Nwb25zb3JzIGNvbnRlbnQ6JyxcbiAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwdXNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQm9vdGggY2FyZHM6IHRvb2wgZ2V0X2V2ZW50X2Jvb3RocyAocmV1c2Ugc3BvbnNvciBjYXJkIGRlc2lnbjsgb25seSBwdXNoIHdoZW4gd2UgaGF2ZSBib290aHMpXG4gICAgICAgICAgICBpZiAoc2VyaWFsaXphYmxlPy50b29sX25hbWUgPT09ICdnZXRfZXZlbnRfYm9vdGhzJykge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID1cbiAgICAgICAgICAgICAgICBzZXJpYWxpemFibGU/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50O1xuICAgICAgICAgICAgICBjb25zdCBhbnN3ZXJUZXh0ID1cbiAgICAgICAgICAgICAgICBvdGhlckZpZWxkcy5hbnN3ZXIgIT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBTdHJpbmcob3RoZXJGaWVsZHMuYW5zd2VyKS50cmltKClcbiAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgIGxldCBwdXNoZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNvbnRlbnRTdHIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb3RocyA9IHBhcnNlZD8uYm9vdGhzID8/IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBCb290aHNUb0NhcmREYXRhKGJvb3Rocyk7XG4gICAgICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbXNnSWQgPVxuICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZS5tZXNzYWdlX2lkIHx8IGBzcG9uc29yX2NhcmRzXyR7RGF0ZS5ub3coKX1gO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXJkRW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgX2lkOiBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3BvbnNvcl9jYXJkcycsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYW5zd2VyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXJUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgICAgICAgICAgc3BvbnNvckNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSWR4ID0gdGhpcy5jaGF0TG9nLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgICAgICAgICAocCkgPT4gcC5faWQgPT09IG1zZ0lkLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJZHggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZ1tleGlzdGluZ0lkeF0gPSBjYXJkRW50cnk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goY2FyZEVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgcHVzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAnW1NvY2tldCBDaGF0XSBFcnJvciBwYXJzaW5nIGdldF9ldmVudF9ib290aHMgY29udGVudDonLFxuICAgICAgICAgICAgICAgICAgICBlLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHB1c2hlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBCb290aCByZXByZXNlbnRhdGl2ZSBjYXJkczogdG9vbCBnZXRfYm9vdGhfcmVwcmVzZW50YXRpdmVzIChzYW1lIGRlc2lnbiBhcyBhdHRlbmRlZSBjYXJkcylcbiAgICAgICAgICAgIGlmIChzZXJpYWxpemFibGU/LnRvb2xfbmFtZSA9PT0gJ2dldF9ib290aF9yZXByZXNlbnRhdGl2ZXMnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPVxuICAgICAgICAgICAgICAgIHNlcmlhbGl6YWJsZT8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnQ7XG4gICAgICAgICAgICAgIGNvbnN0IGFuc3dlclRleHQgPVxuICAgICAgICAgICAgICAgIG90aGVyRmllbGRzLmFuc3dlciAhPSBudWxsXG4gICAgICAgICAgICAgICAgICA/IFN0cmluZyhvdGhlckZpZWxkcy5hbnN3ZXIpLnRyaW0oKVxuICAgICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgICAgICAgbGV0IHB1c2hlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBpZiAoY29udGVudFN0cikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVwcmVzZW50YXRpdmVzID0gcGFyc2VkPy5yZXByZXNlbnRhdGl2ZXMgPz8gW107XG4gICAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWQgPSB0aGlzLm1hcEJvb3RoUmVwc1RvQ2FyZERhdGEocmVwcmVzZW50YXRpdmVzKTtcbiAgICAgICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtc2dJZCA9XG4gICAgICAgICAgICAgICAgICAgICAgc2VyaWFsaXphYmxlLm1lc3NhZ2VfaWQgfHwgYGJvb3RoX3JlcF9jYXJkc18ke0RhdGUubm93KCl9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZEVudHJ5ID0ge1xuICAgICAgICAgICAgICAgICAgICAgIF9pZDogbXNnSWQsXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Jvb3RoX3JlcF9jYXJkcycsXG4gICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYW5zd2VyVGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheShhbnN3ZXJUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXG4gICAgICAgICAgICAgICAgICAgICAgYm9vdGhSZXBDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0lkeCA9IHRoaXMuY2hhdExvZy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKHApID0+IHAuX2lkID09PSBtc2dJZCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSWR4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2dbZXhpc3RpbmdJZHhdID0gY2FyZEVudHJ5O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGNhcmRFbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgIHB1c2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gRXJyb3IgcGFyc2luZyBnZXRfYm9vdGhfcmVwcmVzZW50YXRpdmVzIGNvbnRlbnQ6JyxcbiAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwdXNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNlcmlhbGl6YWJsZT8udG9vbF9uYW1lID09PSAnZ2V0X2V2ZW50X2RldGFpbHMnKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgY29udmVyc2F0aW9uX2lkLFxuICAgICAgICAgICAgICBib3RfaWQsXG4gICAgICAgICAgICAgIG1lc3NhZ2VfaWQsXG4gICAgICAgICAgICAgIGFuc3dlcixcbiAgICAgICAgICAgICAgd2ViX3Jlc3VsdHMsXG4gICAgICAgICAgICAgIHNlYXJjaF9yZXN1bHRzLFxuICAgICAgICAgICAgICBncmFwaHMsXG4gICAgICAgICAgICAgIGV4ZWN1dGlvbl9ncmFwaHMsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgfSA9IG90aGVyRmllbGRzO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTb2NrZXQgQ2hhdF0gUHJvY2Vzc2luZyBPdGhlckZpZWxkcycsIHtcbiAgICAgICAgICAgICAgbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgY29udmVyc2F0aW9uX2lkLFxuICAgICAgICAgICAgICBib3RfaWQsXG4gICAgICAgICAgICAgIGhhc0Fuc3dlcjogISFhbnN3ZXIsXG4gICAgICAgICAgICAgIGFuc3dlckxlbmd0aDogYW5zd2VyPy5sZW5ndGgsXG4gICAgICAgICAgICAgIHdlYlJlc3VsdHNDb3VudDogd2ViX3Jlc3VsdHM/Lmxlbmd0aCA/PyAwLFxuICAgICAgICAgICAgICBzZWFyY2hSZXN1bHRzQ291bnQ6IHNlYXJjaF9yZXN1bHRzPy5sZW5ndGggPz8gMCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRDaGF0TWVzc2FnZSA9IHRoaXMuY2hhdExvZy5maW5kKFxuICAgICAgICAgICAgICAocCkgPT4gcC5faWQgPT0gbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRDaGF0TWVzc2FnZSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW1NvY2tldCBDaGF0XSBOZXcgQUkgbWVzc2FnZSBmcm9tIHNvY2tldCcsIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlX2lkLFxuICAgICAgICAgICAgICAgIGNoYXRMb2dMZW5ndGg6IHRoaXMuY2hhdExvZy5sZW5ndGgsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgICAgX2lkOiBtZXNzYWdlX2lkLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGN1cnJlbnRDaGF0TWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIFVwZGF0aW5nIGV4aXN0aW5nIG1lc3NhZ2UnLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZV9pZCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgZmllbGRzIGJhc2VkIG9uIHRoZWlyIHByZXNlbmNlXG4gICAgICAgICAgICBpZiAoc2VhcmNoX3Jlc3VsdHMgJiYgQXJyYXkuaXNBcnJheShzZWFyY2hfcmVzdWx0cykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tTb2NrZXQgQ2hhdF0gc2VhcmNoX3Jlc3VsdHMnLCBzZWFyY2hfcmVzdWx0cyk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5zZWFyY2hUZXJtcyA9IHNlYXJjaF9yZXN1bHRzO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh3ZWJfcmVzdWx0cyAmJiBBcnJheS5pc0FycmF5KHdlYl9yZXN1bHRzKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAnW1NvY2tldCBDaGF0XSB3ZWJfcmVzdWx0cycsXG4gICAgICAgICAgICAgICAgd2ViX3Jlc3VsdHM/Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICB3ZWJfcmVzdWx0cyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLnNvdXJjZXNMaXN0ID0gd2ViX3Jlc3VsdHM7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5kaXNwbGF5ZWRTb3VyY2VzID0gd2ViX3Jlc3VsdHM/LnNsaWNlKDAsIDMpOyAvLyBGaXJzdCAzIGNhcmRzXG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5yZW1haW5pbmdTb3VyY2VzID0gd2ViX3Jlc3VsdHM/LnNsaWNlKDMpOyAvLyBSZW1haW5pbmcgaXRlbXNcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYW5zd2VyKSB7XG4gICAgICAgICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIFJlY2VpdmVkIGFuc3dlciwgdXBkYXRpbmcgbWVzc2FnZScsIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlX2lkLFxuICAgICAgICAgICAgICAgIGFuc3dlckxlbmd0aDogYW5zd2VyPy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgYW5zd2VyUHJldmlldzogYW5zd2VyPy5zdWJzdHJpbmc/LigwLCAxMDApLFxuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UubWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoYW5zd2VyKTtcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNPblRleHRhcmVhKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChncmFwaHMgJiYgQXJyYXkuaXNBcnJheShncmFwaHMpKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbU29ja2V0IENoYXRdIGdyYXBocycsIGdyYXBocz8ubGVuZ3RoLCBncmFwaHMpO1xuICAgICAgICAgICAgICBjdXJyZW50Q2hhdE1lc3NhZ2UuZ3JhcGhzID0gZ3JhcGhzO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChleGVjdXRpb25fZ3JhcGhzICYmIEFycmF5LmlzQXJyYXkoZXhlY3V0aW9uX2dyYXBocykpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgJ1tTb2NrZXQgQ2hhdF0gZXhlY3V0aW9uX2dyYXBocycsXG4gICAgICAgICAgICAgICAgZXhlY3V0aW9uX2dyYXBocz8ubGVuZ3RoLFxuICAgICAgICAgICAgICAgIGV4ZWN1dGlvbl9ncmFwaHMsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGN1cnJlbnRDaGF0TWVzc2FnZS5leGVjdXRpb25HcmFwaHMgPSBleGVjdXRpb25fZ3JhcGhzO1xuICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdWdnZXN0aW9ucyAmJiBBcnJheS5pc0FycmF5KHN1Z2dlc3Rpb25zKSkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAnW1NvY2tldCBDaGF0XSBzdWdnZXN0aW9ucycsXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM/Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY3VycmVudENoYXRNZXNzYWdlLnJlbGF0ZWRMaXN0SXRlbXMgPSBzdWdnZXN0aW9ucztcbiAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAvLyBQcm9jZXNzIG9ubGluZSBzZWFyY2ggdGVybXMgYXMgbmVlZGVkXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEFkZCBhbnkgb3RoZXIgZmllbGRzIGFuZCB0aGVpciBwcm9jZXNzaW5nIGhlcmVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdPdGhlckZpZWxkcyBpcyBtaXNzaW5nIGluIHRoZSByZXNwb25zZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIHRoaXMuZXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBmZXRjaGluZyBkYXRhIGZyb20gc29ja2V0JywgZXJyKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gIH1cblxuICBpbml0aWFsaXplU29ja2V0QW5kTGlzdGVuKCkge31cbiAgaGFuZGxlRXZlbnQoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ3dlYnJlc3VsdCc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYW5zd2VyJzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdncmFwaCc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmV2ZW50U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmV2ZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMudm9pY2VUcmFuc2NyaXB0U3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLnNvY2tldFNlcnZpY2UuZGlzY29ubmVjdFNvY2tldENvbm5lY3Rpb24oKTtcbiAgICAvL3RoaXMuc29ja2V0U2VydmljZS5jbG9zZSgpO1xuICB9XG4gIGNoYW5nZVRlbXBlcmF0dXJlKG5ld1RlbXBlcmF0dXJlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XG4gICAgdGhpcy50ZW1wZXJhdHVyZSA9IG5ld1RlbXBlcmF0dXJlO1xuICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuaGl2ZWdwdC1jaGF0LWJvdC13cmFwcGVyJyk7XG4gICAgLy8gUmVtb3ZlIGV4aXN0aW5nIHRoZW1lIGNsYXNzZXMgZnJvbSBib2R5XG4gICAgd3JhcHBlcj8uY2xhc3NMaXN0LnJlbW92ZSgnY3JlYXRpdmUnLCAnYmFsYW5jZWQnLCAncHJlY2lzZScpO1xuXG4gICAgc3dpdGNoIChuZXdUZW1wZXJhdHVyZSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICB3cmFwcGVyPy5jbGFzc0xpc3QuYWRkKCdjcmVhdGl2ZScpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgd3JhcHBlcj8uY2xhc3NMaXN0LmFkZCgnYmFsYW5jZWQnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHdyYXBwZXI/LmNsYXNzTGlzdC5hZGQoJ3ByZWNpc2UnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBvblN0YXJ0QWdhaW4oKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xuICAgIHRoaXMuc2hvd1N0YXJ0QWdhaW4gPSBmYWxzZTtcbiAgICB0aGlzLmNoYXRMb2cgPSBbXTtcbiAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICB0eXBlOiAnYWknLFxuICAgICAgbWVzc2FnZTogdGhpcy5ncmVldGluZ01zZyxcblxuICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgIH0pO1xuICAgIHRoaXMuYXJjaGlldmVNZXNzYWdlcygpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgYXJjaGlldmVNZXNzYWdlcygpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgIH0pO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2JvdC9jbGVhci1oaXN0b3J5LyR7dGhpcy5ib3RJZH0vJHt0aGlzLnVzZXJJZH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh1cmwsIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHRyaWdnZXJTdXBwb3J0KCkge1xuICAgIHRoaXMub3BlblN1cHBvcnQuZW1pdCgpO1xuICB9XG4gIGZldGNoQm90Q29uZmlnKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgIH0pO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2JvdHM/Ym90X2lkPSR7dGhpcy5ib3RJZH1gO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwgeyBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYm90TmFtZSA9IHRoaXMuZ2V0VHJhbnNsYXRpb24ocmVzLk5hbWUpO1xuICAgICAgICB0aGlzLmJvdEljb24gPSByZXMuSWNvbjtcbiAgICAgICAgdGhpcy5ib3RTa2lsbHMgPSByZXM/LlNraWxscztcbiAgICAgICAgdGhpcy5ncmVldGluZ01zZyA9IHJlcy5HcmVldGluZ1xuICAgICAgICAgID8gKHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KHJlcy5HcmVldGluZykgYXMgYW55KVxuICAgICAgICAgIDogJyc7XG5cbiAgICAgICAgdGhpcy50aHVtYnNEb3duTWVzc2FnZXMgPSByZXM/Lk5lZ2F0aXZlUmVzcG9uc2VzPy5sZW5ndGhcbiAgICAgICAgICA/IHJlcy5OZWdhdGl2ZVJlc3BvbnNlc1xuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICB0aGlzLmdldFRyYW5zbGF0aW9uKFxuICAgICAgICAgICAgICAgIGBXZSBhcmUgc29ycnkgd2UndmUgbm90IGJlZW4gYWJsZSB0byBhbnN3ZXIgeW91ciBxdWVzdGlvbmAsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdO1xuICAgICAgICB0aGlzLnF1aWNrUHJvbXB0cyA9IHJlcy5RdWlja1Byb21wdHM7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXRib3QgY29uZmlnOiAnLCBlcnJvcik7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgZmV0Y2hDaGF0SGlzdG9yeSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgICB0aGlzLmNvbnZlcnNhdGlvbktleSA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkodGhpcy5ib3RJZCwgZmFsc2UpO1xuICAgIHRoaXMuY29uU2Vzc2lvbktleSA9IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRTZXNzaW9uS2V5KFxuICAgICAgdGhpcy5ib3RJZCxcbiAgICAgIGZhbHNlLFxuICAgICk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uS2V5fT9zZXNzaW9uX2lkPSR7dGhpcy5jb25TZXNzaW9uS2V5fWA7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICBhY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHVybCwgeyBoZWFkZXJzIH0pXG4gICAgICAucGlwZShjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3I8YW55PignZmV0Y2hDb252ZXJzYXRpb24nKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcjxUPihvcGVyYXRpb24gPSAnb3BlcmF0aW9uJywgcmVzdWx0PzogVCkge1xuICAgIHJldHVybiAoZXJyb3I6IGFueSk6IE9ic2VydmFibGU8VD4gPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgJHtvcGVyYXRpb259IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgcmV0dXJuIG9mKHJlc3VsdCBhcyBUKTtcbiAgICB9O1xuICB9XG4gIC8vIGZldGNoQ2hhdEhpc3RvcnkoKSB7XG4gIC8vICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgLy8gICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgLy8gICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gIC8vICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gIC8vICAgfSk7XG4gIC8vICAgcmV0dXJuIHRoaXMuaHR0cFxuICAvLyAgICAgLmdldChgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9jb252ZXJzYXRpb25zLyR7dGhpcy5jb252ZXJzYXRpb25LZXl9YCwgeyBoZWFkZXJzIH0pXG4gIC8vICAgICAucGlwZShcbiAgLy8gICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAvLyAgICAgICAgIHJldHVybiBvZihyZXMpO1xuICAvLyAgICAgICB9KSxcbiAgLy8gICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXQgaGlzdG9yeTogJywgZXJyb3IpO1xuICAvLyAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAvLyAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgLy8gICAgICAgfSlcbiAgLy8gICAgICk7XG4gIC8vIH1cblxuICAvKiogUHVzaCBhIHN0YW5kYXJkIEFJIG1lc3NhZ2UgZnJvbSBoaXN0b3J5IChzb3VyY2VzLCBncmFwaHMsIGV0Yy4pLiBVc2VkIHdoZW4gbm90IGNvbnZlcnRpbmcgdG8gc2Vzc2lvbl9jYXJkcy4gKi9cbiAgcHJpdmF0ZSBwdXNoQWlNZXNzYWdlRnJvbUhpc3RvcnkoY2hhdDogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgc291cmNlc0xpc3QgPSBjaGF0LldlYkxpbmtzIHx8IFtdO1xuICAgIGNvbnN0IGRpc3BsYXllZFNvdXJjZXMgPSAoY2hhdC5XZWJMaW5rcyB8fCBbXSkuc2xpY2UoMCwgMyk7XG4gICAgY29uc3QgcmVtYWluaW5nU291cmNlcyA9IChjaGF0LldlYkxpbmtzIHx8IFtdKS5zbGljZSgzKTtcbiAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICB0eXBlOiAnYWknLFxuICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KSxcbiAgICAgIGV4ZWN1dGlvbkdyYXBoczogY2hhdC5FeGVjdXRpb25HcmFwaHMsXG4gICAgICBncmFwaHM6IGNoYXQuR3JhcGhzLFxuICAgICAgc2VhcmNoVGVybXM6IGNoYXQuU2VhcmNoVGVybXMsXG4gICAgICBzb3VyY2VzTGlzdDogc291cmNlc0xpc3QsXG4gICAgICBkaXNwbGF5ZWRTb3VyY2VzOiBkaXNwbGF5ZWRTb3VyY2VzLFxuICAgICAgcmVtYWluaW5nU291cmNlczogcmVtYWluaW5nU291cmNlcyxcbiAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgIH0pO1xuICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICB9XG5cbiAgbWFwQ2hhdEhpc3RvcnkoY2hhdHM6IGFueSkge1xuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICdhaScsXG4gICAgICBtZXNzYWdlOiB0aGlzLmdyZWV0aW5nTXNnLFxuICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgIH0pO1xuICAgIGlmIChjaGF0cyAmJiBjaGF0cz8uTWVzc2FnZXM/Lmxlbmd0aCkge1xuICAgICAgY2hhdHM/Lk1lc3NhZ2VzLmZvckVhY2goKGNoYXQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoY2hhdC5UeXBlID09ICd1c2VyJykge1xuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dCksXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIGNoYXQuSW5zZXJ0VGltZXN0YW1wKSxcbiAgICAgICAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICAgICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgICAgICAgICAgV29ya2Zsb3dFeGVjdXRpb25JZDogY2hhdC5Xb3JrZmxvd0V4ZWN1dGlvbklkLFxuICAgICAgICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhdC5UeXBlID09ICdhaScpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIEFJIG1lc3NhZ2UgY2FtZSBmcm9tIHNlc3Npb24gdG9vbHMsIHNob3cgc2Vzc2lvbiBjYXJkcyBpbnN0ZWFkIG9mIHBsYWluIHRleHRcbiAgICAgICAgICBjb25zdCB0b29sTmFtZSA9IGNoYXQudG9vbHJlc3VsdHM/LnRvb2xfbmFtZTtcbiAgICAgICAgICBjb25zdCBpc1Nlc3Npb25Ub29sID1cbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X2V2ZW50X3Nlc3Npb25zJyB8fFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfZXZlbnRfc2Vzc2lvbnNfdjInIHx8XG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9zZXNzaW9uc19ieV9pbnRlcmVzdCcgfHxcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X3Nlc3Npb25zX2J5X3RyYWNrJyB8fFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfc3BlYWtlcl9zZXNzaW9ucycgfHxcbiAgICAgICAgICAgIHRvb2xOYW1lID09PSAnZ2V0X3VwY29taW5nX3Nlc3Npb25zJztcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc1Nlc3Npb25Ub29sICYmXG4gICAgICAgICAgICBjaGF0LnRvb2xyZXN1bHRzPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9IGNoYXQudG9vbHJlc3VsdHMudG9vbF9yZXN1bHQubWVzc2FnZXNbMF0uY29udGVudDtcbiAgICAgICAgICAgIGxldCBzZXNzaW9uczogYW55W10gPSBbXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgIHNlc3Npb25zID0gcGFyc2VkPy5zZXNzaW9ucyA/PyBbXTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgc2Vzc2lvbnMgPSB0aGlzLnBhcnNlU2Vzc2lvbkNvbnRlbnRWMihjb250ZW50U3RyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwU2Vzc2lvbnNUb0NhcmREYXRhKHNlc3Npb25zKTtcbiAgICAgICAgICAgIHRoaXMuZW5zdXJlU3BlYWtlcnNGb3JTZXNzaW9uQ2FyZHMobWFwcGVkKTtcbiAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgX2lkOiBjaGF0Ll9pZCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc2Vzc2lvbl9jYXJkcycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogY2hhdC5UZXh0XG4gICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dClcbiAgICAgICAgICAgICAgICAgIDogJycsXG4gICAgICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICAgICAgc2Vzc2lvbkNhcmRzOiBtYXBwZWQsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9ldmVudF9hdHRlbmRlZXMnICYmXG4gICAgICAgICAgICBjaGF0LnRvb2xyZXN1bHRzPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBBSSBtZXNzYWdlIGNhbWUgZnJvbSBnZXRfZXZlbnRfYXR0ZW5kZWVzLCBzaG93IGF0dGVuZGVlIGNhcmRzIG9uIGluaXRpYWwgaGlzdG9yeSBsb2FkXG4gICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID0gY2hhdC50b29scmVzdWx0cy50b29sX3Jlc3VsdC5tZXNzYWdlc1swXS5jb250ZW50O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgY29uc3QgYXR0ZW5kZWVzID0gcGFyc2VkPy5hdHRlbmRlZXMgPz8gW107XG4gICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwQXR0ZW5kZWVzVG9DYXJkRGF0YShhdHRlbmRlZXMpO1xuICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ2F0dGVuZGVlX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoYXQuVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dClcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgICAgICAgYXR0ZW5kZWVDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0b29sTmFtZSA9PT0gJ2dldF9ldmVudF9zcGVha2VycycgJiZcbiAgICAgICAgICAgIGNoYXQudG9vbHJlc3VsdHM/LnRvb2xfcmVzdWx0Py5tZXNzYWdlcz8uWzBdPy5jb250ZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIEFJIG1lc3NhZ2UgY2FtZSBmcm9tIGdldF9ldmVudF9zcGVha2Vycywgc2hvdyBzcGVha2VyIGNhcmRzIG9uIGluaXRpYWwgaGlzdG9yeSBsb2FkXG4gICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID0gY2hhdC50b29scmVzdWx0cy50b29sX3Jlc3VsdC5tZXNzYWdlc1swXS5jb250ZW50O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgY29uc3Qgc3BlYWtlcnMgPSBwYXJzZWQ/LnNwZWFrZXJzID8/IHBhcnNlZD8uc3BlYWtlciA/PyBbXTtcbiAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBTcGVha2Vyc1RvQ2FyZERhdGEoc3BlYWtlcnMpO1xuICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3NwZWFrZXJfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hhdC5UZXh0XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICAgICAgICBzcGVha2VyQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfZXZlbnRfc3BvbnNvcnMnICYmXG4gICAgICAgICAgICBjaGF0LnRvb2xyZXN1bHRzPy50b29sX3Jlc3VsdD8ubWVzc2FnZXM/LlswXT8uY29udGVudFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBBSSBtZXNzYWdlIGNhbWUgZnJvbSBnZXRfZXZlbnRfc3BvbnNvcnMsIHNob3cgc3BvbnNvciBjYXJkcyBvbiBpbml0aWFsIGhpc3RvcnkgbG9hZFxuICAgICAgICAgICAgY29uc3QgY29udGVudFN0ciA9IGNoYXQudG9vbHJlc3VsdHMudG9vbF9yZXN1bHQubWVzc2FnZXNbMF0uY29udGVudDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudFN0cik7XG4gICAgICAgICAgICAgIGNvbnN0IHNwb25zb3JzID0gcGFyc2VkPy5zcG9uc29ycyA/PyBbXTtcbiAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBTcG9uc29yc1RvQ2FyZERhdGEoc3BvbnNvcnMpO1xuICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3Nwb25zb3JfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hhdC5UZXh0XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICAgICAgICBzcG9uc29yQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfZXZlbnRfYm9vdGhzJyAmJlxuICAgICAgICAgICAgY2hhdC50b29scmVzdWx0cz8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgQUkgbWVzc2FnZSBjYW1lIGZyb20gZ2V0X2V2ZW50X2Jvb3Rocywgc2hvdyBib290aCBjYXJkcyB1c2luZyBzcG9uc29yIGNhcmQgZGVzaWduXG4gICAgICAgICAgICBjb25zdCBjb250ZW50U3RyID0gY2hhdC50b29scmVzdWx0cy50b29sX3Jlc3VsdC5tZXNzYWdlc1swXS5jb250ZW50O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShjb250ZW50U3RyKTtcbiAgICAgICAgICAgICAgY29uc3QgYm9vdGhzID0gcGFyc2VkPy5ib290aHMgPz8gW107XG4gICAgICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMubWFwQm9vdGhzVG9DYXJkRGF0YShib290aHMpO1xuICAgICAgICAgICAgICBpZiAobWFwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICAgICAgICBfaWQ6IGNoYXQuX2lkLFxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3Nwb25zb3JfY2FyZHMnLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hhdC5UZXh0XG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkoY2hhdC5UZXh0KVxuICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXG4gICAgICAgICAgICAgICAgICBzcG9uc29yQ2FyZHM6IG1hcHBlZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdG9vbE5hbWUgPT09ICdnZXRfYm9vdGhfcmVwcmVzZW50YXRpdmVzJyAmJlxuICAgICAgICAgICAgY2hhdC50b29scmVzdWx0cz8udG9vbF9yZXN1bHQ/Lm1lc3NhZ2VzPy5bMF0/LmNvbnRlbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgQUkgbWVzc2FnZSBjYW1lIGZyb20gZ2V0X2Jvb3RoX3JlcHJlc2VudGF0aXZlcywgc2hvdyBib290aCByZXAgY2FyZHMgKGF0dGVuZGVlIGRlc2lnbilcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRTdHIgPSBjaGF0LnRvb2xyZXN1bHRzLnRvb2xfcmVzdWx0Lm1lc3NhZ2VzWzBdLmNvbnRlbnQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnRTdHIpO1xuICAgICAgICAgICAgICBjb25zdCByZXByZXNlbnRhdGl2ZXMgPSBwYXJzZWQ/LnJlcHJlc2VudGF0aXZlcyA/PyBbXTtcbiAgICAgICAgICAgICAgY29uc3QgbWFwcGVkID0gdGhpcy5tYXBCb290aFJlcHNUb0NhcmREYXRhKHJlcHJlc2VudGF0aXZlcyk7XG4gICAgICAgICAgICAgIGlmIChtYXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIF9pZDogY2hhdC5faWQsXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnYm9vdGhfcmVwX2NhcmRzJyxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoYXQuVGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGNoYXQuVGV4dClcbiAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxuICAgICAgICAgICAgICAgICAgYm9vdGhSZXBDYXJkczogbWFwcGVkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVzaEFpTWVzc2FnZUZyb21IaXN0b3J5KGNoYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnB1c2hBaU1lc3NhZ2VGcm9tSGlzdG9yeShjaGF0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5zaG93U3RhcnRBZ2FpbiA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb2Nlc3NNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgIShtZXNzYWdlPy5sZW5ndGggPiAwKSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKCdoZXJlIGlzIG15IG1lc3NhZ2UnKVxuICAgIC8vIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UudHJpbSgpO1xuXG4gICAgY29uc3QgbWFya2Rvd25MaW5rUmVnZXggPSAvXFxbKFteW10rKV1cXCgoW14pXSspXFwpL2c7XG4gICAgY29uc3QgdXJsUmVnZXggPSAvKD88IWhyZWY9XCIpXFxiaHR0cHM/OlxcL1xcL1xcUysoPzwhWy4sXSkvZ2k7XG5cbiAgICBpZiAobWFya2Rvd25MaW5rUmVnZXgudGVzdChtZXNzYWdlKSkge1xuICAgICAgY29uc3QgaHRtbCA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAgICAgbWFya2Rvd25MaW5rUmVnZXgsXG4gICAgICAgICc8YSBocmVmPVwiJDJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4kMTwvYT4nLFxuICAgICAgKTtcbiAgICAgIC8vY29uc29sZS5sb2coJ1Nhbml0aXplZCBtZXNzYWdlOiAnLCBtZXNzYWdlKTtcbiAgICAgIHJldHVybiB0aGlzLnNhbml0aXplSHRtbChodG1sKTtcbiAgICB9XG5cbiAgICBpZiAodXJsUmVnZXgudGVzdChtZXNzYWdlKSkge1xuICAgICAgY29uc3QgaHRtbCA9IG1lc3NhZ2UucmVwbGFjZShcbiAgICAgICAgdXJsUmVnZXgsXG4gICAgICAgICc8YSBocmVmPVwiJCZcIiB0YXJnZXQ9XCJfYmxhbmtcIj4kJjwvYT4nLFxuICAgICAgKTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdTYW5pdGl6ZWQgbWVzc2FnZTogJywgbWVzc2FnZSk7XG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZUh0bWwoaHRtbCk7XG4gICAgfVxuXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvKD86XFxyXFxufFxccnxcXG4pL2csICc8YnI+Jyk7XG5cbiAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9cXCpcXCooLio/KVxcKlxcKi9nLCAnPHN0cm9uZz4kMTwvc3Ryb25nPicpO1xuICAgIC8vIENvbnZlcnQgTWFya2Rvd24gaGVhZGVycyB0byBIVE1MIGhlYWRlcnNcbiAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlKC9eKCN7MSw2fSlcXHMrKC4qKSQvZ20sIChtYXRjaCwgaGFzaGVzLCB0ZXh0KSA9PiB7XG4gICAgICBjb25zdCBsZXZlbCA9IGhhc2hlcy5sZW5ndGg7XG4gICAgICByZXR1cm4gYDxoJHtsZXZlbH0+JHt0ZXh0fTwvaCR7bGV2ZWx9PmA7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICBjb25zdCBzYW5pdGl6ZWRNZXNzYWdlID0gdGhpcy5zYW5pdGl6ZUh0bWwobWVzc2FnZSk7XG4gICAgcmV0dXJuIHNhbml0aXplZE1lc3NhZ2U7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgY29uc3QgZmVlZGJhY2tMaW5rcyA9XG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZmVlZGJhY2stbGluaycpO1xuICAgIGZlZWRiYWNrTGlua3MuZm9yRWFjaCgobGluazogYW55KSA9PiB7XG4gICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAgICdjbGljaycsXG4gICAgICAgIHRoaXMub25GZWVkYmFja0NsaWNrLmJpbmQodGhpcywgJ3plbmRlc2snKSxcbiAgICAgICk7XG4gICAgfSk7XG4gICAgLy8gaWYgKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5mZWVkYmFjay1saW5rJykpIHtcbiAgICAvLyAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgLy8gICAgIC5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2stbGluaycpXG4gICAgLy8gICAgIC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25GZWVkYmFja0NsaWNrLmJpbmQodGhpcywgJ3plbmRlc2snKSk7XG4gICAgLy8gfVxuICB9XG5cbiAgc2FuaXRpemVIdG1sKGh0bWw6IHN0cmluZyk6IFNhZmVIdG1sIHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaHRtbCk7XG4gIH1cblxuICBvbkZlZWRiYWNrQ2xpY2sodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuZmVlZGJhY2tFdmVudC5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIG9uQ2xvc2UoKSB7XG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmJvZHlPdmVyZmxvd0NsYXNzKTtcbiAgICB0aGlzLm9uQ2xvc2VFdmVudC5lbWl0KCk7XG4gIH1cblxuICBzZW5kTWVzc2FnZVdpdGhUaWxlKHByb21wdDogc3RyaW5nKSB7XG4gICAgdGhpcy5pbnB1dCA9IHByb21wdDtcbiAgICB0aGlzLmZldGNoRGF0YSgpO1xuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgfVxuICBpc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgZmV0Y2hEYXRhKG1zZyA9IG51bGwpIHtcbiAgICB0aGlzLmlucHV0ID0gbXNnIHx8IHRoaXMuaW5wdXQ/LnRyaW0oKTtcbiAgICB0aGlzLm1zZyA9IHRoaXMuaW5wdXQ7XG4gICAgaWYgKCF0aGlzLmlucHV0IHx8IHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmVuc3VyZUNoYXRTb2NrZXQoKTtcblxuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KHRoaXMuaW5wdXQpLFxuICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgIGlzQ29sbGFwc2VkVHJ1ZTogZmFsc2UsXG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdGV4dGFyZWEgPSB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICAgIHRleHRhcmVhLnN0eWxlLmhlaWdodCA9ICdoaWRkZW4nOyAvLyBSZXNldCB0aGUgaGVpZ2h0XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSBgNjJweGA7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLmFpUmVzcG9uc2UgPSAnJztcbiAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IHRydWU7XG5cbiAgICB0aGlzLm1ha2VBc2tSZXF1ZXN0KHRoaXMuaW5wdXQsIHRoaXMuYWdlbnRzLCB0aGlzLmNvbnZlcnNhdGlvbktleSk7XG4gIH1cbiAgZmV0Y2hEYXRhRm9yKG1zZywgY2hhdCkge1xuICAgIGNvbnN0IGlucHV0TXNnID0gbXNnPy50cmltKCk7XG4gICAgaWYgKCFpbnB1dE1zZyB8fCB0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbnN1cmVDaGF0U29ja2V0KCk7XG4gICAgdHJ5IHtcbiAgICAgIGNoYXQucmVsYXRlZExpc3RJdGVtcyA9IFtdO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KGlucHV0TXNnKSxcbiAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLmFpUmVzcG9uc2UgPSAnJztcbiAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IHRydWU7XG5cbiAgICB0aGlzLm1ha2VBc2tSZXF1ZXN0KGlucHV0TXNnLCB0aGlzLmFnZW50cywgdGhpcy5jb252ZXJzYXRpb25LZXksIG1zZywgY2hhdCk7XG4gIH1cbiAgZmV0Y2hTbWFsbFRhbGsoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2JvdC9zbWFsbC10YWxrLyR7dGhpcy5ib3RJZH0vJHt0aGlzLnVzZXJJZH1gO1xuXG4gICAgdGhpcy5odHRwXG4gICAgICAuZ2V0PHsgc21hbGxUYWxrOiBzdHJpbmcgfT4odXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgZmV0Y2hpbmcgc21hbGwgdGFsazonLCBlcnJvcik7XG5cbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2Uuc21hbGxUYWxrKSB7XG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2UocmVzcG9uc2Uuc21hbGxUYWxrKSxcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgIGlzRmVlZGJhY2tNc2c6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDI7XG4gICAgICAgICAgLy8gdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHJlYWRBbGxDaHVua3MgPSAoc3RyZWFtOiBhbnkpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gICAgY29uc3QgYWxsU3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICByZWFkZXIuY2xvc2VkLmNhdGNoKChlcnI6IGFueSkgPT4ge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZWFkaW5nIHN0cmVhbTogJywgZXJyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgIHJldHVybjtcbiAgICB9KTtcblxuICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgc3RhcnQ6IChjb250cm9sbGVyKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnB1bXAoY29udHJvbGxlciwgcmVhZGVyLCBhbGxTdWdnZXN0aW9ucyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9O1xuXG4gIHB1bXAoY29udHJvbGxlcjogYW55LCByZWFkZXI6IGFueSwgYWxsU3VnZ2VzdGlvbnM6IHN0cmluZ1tdKSB7XG4gICAgcmVhZGVyLnJlYWQoKS50aGVuKCh7IGRvbmUsIHZhbHVlIH06IGFueSkgPT4ge1xuICAgICAgY29uc3QgbGFzdEl0ZW0gPSB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBsYXN0SXRlbS5tZXNzYWdlID0gdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkobGFzdEl0ZW0ubWVzc2FnZSk7XG4gICAgICAgIHRoaXMuY2hhdExvZy5wb3AoKTtcbiAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2gobGFzdEl0ZW0pO1xuICAgICAgICBpZiAoYWxsU3VnZ2VzdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWdnZXN0aW9ucycsXG4gICAgICAgICAgICBzdWdnZXN0aW9uczogYWxsU3VnZ2VzdGlvbnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICAgIC8vIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuc2hvd1N0YXJ0QWdhaW4gPSB0cnVlO1xuXG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgIHRoaXMuZmV0Y2hTbWFsbFRhbGsoKTtcbiAgICAgICAgLy8gfSwxMDAwKVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBkZWNvZGVkQ2h1bmsgPSB0aGlzLmRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICAgIHRoaXMuYWlSZXNwb25zZSArPSBkZWNvZGVkQ2h1bms7XG4gICAgICBpZiAobGFzdEl0ZW0udHlwZSA9PT0gJ2FpJykge1xuICAgICAgICBjb25zdCBzdWdnZXN0aW9uc01hdGNoID0gdGhpcy5haVJlc3BvbnNlLm1hdGNoKC88c3VnPiguKj8pPFxcL3N1Zz4vZyk7XG4gICAgICAgIGlmIChzdWdnZXN0aW9uc01hdGNoKSB7XG4gICAgICAgICAgc3VnZ2VzdGlvbnNNYXRjaC5mb3JFYWNoKChtYXRjaCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5haVJlc3BvbnNlID0gdGhpcy5haVJlc3BvbnNlLnJlcGxhY2UobWF0Y2gsICcnKTtcbiAgICAgICAgICAgIGFsbFN1Z2dlc3Rpb25zLnB1c2gobWF0Y2g/LnJlcGxhY2UoLzxcXC8/c3VnPi9nLCAnJykpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdEl0ZW0ubWVzc2FnZSA9IHRoaXMuYWlSZXNwb25zZTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuXG4gICAgICAgIGxldCBhaUZvcm1hdHRlZERhdGE6IGFueTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdwYXJzaW5nIGpzb24gJyk7XG4gICAgICAgICAgYWlGb3JtYXR0ZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnBhcnNlKHRoaXMuYWlSZXNwb25zZSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdwYXJzaW5nIGpzb24gMicpO1xuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhID0gSlNPTi5wYXJzZSh0aGlzLmFpUmVzcG9uc2UpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygncGFyc2luZyBqc29uIGRvbmUnKTtcblxuICAgICAgICBpZiAoYWlGb3JtYXR0ZWREYXRhICYmIGFpRm9ybWF0dGVkRGF0YT8uc2VjdGlvbl9pZD8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09ICdjb21wYW55X3NlYXJjaCcgfHxcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09ICd1c2VyX3NlYXJjaCcgfHxcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09ICdpbmR1c3RyeV9jb21wYW55X3NlYXJjaCdcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hNeUNvbm5lY3Rpb25zKCkuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmZldGNoUGVuZGluZ1JlcXVlc3RzKCkuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09IHRoaXMubXlVcGNvbWluZ1Nlc3Npb25BY3Rpb24pIHtcbiAgICAgICAgICAgIHZhciBzcGVha2VySWRzID0gW107XG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEuY29udGVudD8uZm9yRWFjaCgoc2Vzc2lvbikgPT4ge1xuICAgICAgICAgICAgICBzcGVha2VySWRzID0gWy4uLnNwZWFrZXJJZHMsIC4uLnNlc3Npb24uc3BlYWtlcnNdO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChzcGVha2VySWRzPy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICB0aGlzLmdldFNwZWFrZXJzQnlTdGFmZklkcyhzcGVha2VySWRzKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSB0aGlzLmFkZFRvTXlBZ2VuZGFBY3Rpb24gJiZcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5jb250ZW50Py5sZW5ndGggPiAwXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5QYWdlLm5leHQoe1xuICAgICAgICAgICAgICBzZWN0aW9uSWQ6IGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkLFxuICAgICAgICAgICAgICBzZXNzaW9uSWRzOiBhaUZvcm1hdHRlZERhdGEuY29udGVudCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSB0aGlzLmNvbm5lY3RPckZvbGxvd0FjdGlvbikge1xuICAgICAgICAgICAgbGV0IHVzZXJzTGVuID0gYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQ/Lmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh1c2Vyc0xlbiA+IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5vcGVuUGFnZS5uZXh0KHtcbiAgICAgICAgICAgICAgICBzZWN0aW9uSWQ6ICdvcGVuX25ldHdvcmtpbmdfZHJhd2VyJyxcbiAgICAgICAgICAgICAgICBzZWFyY2g6IGFpRm9ybWF0dGVkRGF0YS5jb250ZW50LFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXNlcnNMZW4gPT0gMSkge1xuICAgICAgICAgICAgICB0aGlzLm9wZW5QYWdlLm5leHQoe1xuICAgICAgICAgICAgICAgIHNlY3Rpb25JZDogYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQsXG4gICAgICAgICAgICAgICAgY29ubmV0VXNlcklkczogW2FpRm9ybWF0dGVkRGF0YS5jb250ZW50WzBdLnVzZXJJZF0sXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEuaXNfb3Blbl9wYWdlID09ICd0cnVlJykge1xuICAgICAgICAgICAgdGhpcy5vcGVuUGFnZS5uZXh0KHtcbiAgICAgICAgICAgICAgc2VjdGlvbklkOiBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCxcbiAgICAgICAgICAgICAgc2VhcmNoOiBhaUZvcm1hdHRlZERhdGEuY29udGVudCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pc01vYmlsZUJyb3dzZXIoKSkge1xuICAgICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEubWVzc2FnZSArPVxuICAgICAgICAgICAgICAgICdcXG5cXG4nICsgJzxhIGlkPVwiY2xvc2VCb3ROb3dcIj5DbGljayBIZXJlPC9hPiB0byBzZWUgcmVzdWx0cy4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgICAgICBtZXNzYWdlOiBhaUZvcm1hdHRlZERhdGEubWVzc2FnZSxcbiAgICAgICAgICAgIGFjdGlvbjogYWlGb3JtYXR0ZWREYXRhLFxuICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVCcm93c2VyKCkpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmFkZENsb3NlQm90Q2xpY2tFdmVudCgpO1xuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmFpUmVzcG9uc2UgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5haVJlc3BvbnNlLFxuICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG5cbiAgICAgIC8vIEVucXVldWUgdGhlIG5leHQgZGF0YSBjaHVuayBpbnRvIG91ciB0YXJnZXQgc3RyZWFtXG4gICAgICBjb250cm9sbGVyLmVucXVldWUodmFsdWUpO1xuICAgICAgdGhpcy5wdW1wKGNvbnRyb2xsZXIsIHJlYWRlciwgYWxsU3VnZ2VzdGlvbnMpO1xuICAgIH0pO1xuICB9XG5cbiAgc3VibWl0RmVlZGJhY2soZmxhZzogYm9vbGVhbiwgbWVzc2FnZSkge1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuXG4gICAgdGhpcy5mZWVkYmFja0RvbmUgPSB0cnVlO1xuICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IG51bGw7XG4gICAgY29uc3QgY29udmVyc2F0aW9uX2lkID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdldEtleSh0aGlzLmJvdElkKTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkFHRU5UU19BUEl9L0NvbnZlcnNhdGlvbi9jb1BpbG90LyR7dGhpcy5ib3RJZH0vY29udmVyc2F0aW9uLyR7Y29udmVyc2F0aW9uX2lkfS9oZWxwZnVsLXJlc3BvbnNlYDtcbiAgICBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICBhcGlLZXk6ICdDb252ZXJzYXRpb25fV0l6L3FBbStFRW1mT2tGYVVBL3dlQT09JyxcbiAgICAgICAgJ2hpdmUtYm90LWlkJzogdGhpcy5ib3RJZCxcbiAgICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgbWVzc2FnZUlkOiBtZXNzYWdlLl9pZCwgaXNIZWxwZnVsOiBmbGFnIH0pLFxuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgaWYgKGZsYWcpIHtcbiAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgIHR5cGU6ICdhaScsXG4gICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgICAgIHRoaXMudGh1bWJzVXBNZXNzYWdlIHx8XG4gICAgICAgICAgICB0aGlzLmdldFRyYW5zbGF0aW9uKCdNYXkgSSBhc3Npc3QgeW91IHdpdGggYW55dGhpbmcgZWxzZScpLFxuICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICBpc0ZlZWRiYWNrTXNnOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLmZlZWRiYWNrRG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcbiAgICAgICAgdHlwZTogJ2FpJyxcbiAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZShcbiAgICAgICAgICB0aGlzLnRodW1ic0Rvd25NZXNzYWdlc1t0aGlzLnRodW1ic0Rvd25Nc2dJbmRleF0sXG4gICAgICAgICksXG4gICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgaXNGZWVkYmFja01zZzogdHJ1ZSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy50aHVtYnNEb3duTXNnSW5kZXggPVxuICAgICAgICAodGhpcy50aHVtYnNEb3duTXNnSW5kZXggKyAxKSAlIHRoaXMudGh1bWJzRG93bk1lc3NhZ2VzLmxlbmd0aDtcbiAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRMaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1cHBvcnRMaW5rODgnKTtcbiAgICAgICAgaWYgKHN1cHBvcnRMaW5rKSB7XG4gICAgICAgICAgc3VwcG9ydExpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLnRyaWdnZXJTdXBwb3J0LmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgICB9LCAyMDApO1xuICAgICAgdGhpcy5mZWVkYmFja0RvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IG51bGw7XG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgYmVoYXZpb3IgKG5ldyBsaW5lKVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIC8vIENhbGwgeW91ciBzdWJtaXQgZnVuY3Rpb25cbiAgICAgIHRoaXMuaGFuZGxlU3VibWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlU3VibWl0KGV2ZW50KSB7XG4gICAgdGhpcy5mZXRjaERhdGEoKTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gIH1cblxuICAvKiogSW5kZXggb2YgdGhlIGxhc3QgQUkgbWVzc2FnZSBpbiBjaGF0TG9nOyAtMSBpZiBub25lLiAqL1xuICBnZXQgbGFzdEFpTWVzc2FnZUluZGV4KCk6IG51bWJlciB7XG4gICAgZm9yIChsZXQgaiA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgaWYgKHRoaXMuY2hhdExvZ1tqXT8udHlwZSA9PT0gJ2FpJykgcmV0dXJuIGo7XG4gICAgfVxuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIGhhbmRsZVVwQ2xpY2soaWR4OiBhbnkpIHtcbiAgICBpZiAodGhpcy5mZWVkYmFja0RvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN1Ym1pdEZlZWRiYWNrKHRydWUsIHRoaXMuY2hhdExvZ1tpZHhdKTtcbiAgICB0aGlzLmNoYXRMb2dbaWR4XS5saWtlZCA9ICF0aGlzLmNoYXRMb2dbaWR4XS5saWtlZDtcblxuICAgIGlmICh0aGlzLmNoYXRMb2dbaWR4XS51bmxpa2VkKSB7XG4gICAgICB0aGlzLmNoYXRMb2dbaWR4XS51bmxpa2VkID0gIXRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBoYW5kbGVEb3duQ2xpY2soaWR4OiBhbnkpIHtcbiAgICBpZiAodGhpcy5mZWVkYmFja0RvbmUpIHJldHVybjtcbiAgICB0aGlzLnN1Ym1pdEZlZWRiYWNrKGZhbHNlLCB0aGlzLmNoYXRMb2dbaWR4XSk7XG4gICAgdGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZCA9ICF0aGlzLmNoYXRMb2dbaWR4XS51bmxpa2VkO1xuICAgIGlmICh0aGlzLmNoYXRMb2dbaWR4XS5saWtlZClcbiAgICAgIHRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkID0gIXRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkO1xuICB9XG4gIC8vIGhhbmRsZUNvcHlDbGljayhpbmRleDogYW55KSB7XG4gIC8vICAgLy8gQ29weSB0aGUgbWVzc2FnZSB0byB0aGUgY2xpcGJvYXJkXG4gIC8vICAgY29uc3QgY29udGVudFRvQ29weSA9IHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZTtcbiAgLy8gICBjb25zb2xlLmxvZygnY29udGVudFRvQ29weScpO1xuICAvLyAgIGNvbnNvbGUubG9nKGNvbnRlbnRUb0NvcHkpO1xuICAvLyAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGNvbnRlbnRUb0NvcHkpLnRoZW4oKCkgPT4ge1xuICAvLyAgICAgLy8gSW5kaWNhdGUgdGhhdCB0aGUgbWVzc2FnZSB3YXMgY29waWVkXG4gIC8vICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmNvcGllZCA9IHRydWU7XG4gIC8vICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgICAvLyBSZXNldCB0aGUgY29waWVkIHN0YXRlIGFmdGVyIGEgZGVsYXlcbiAgLy8gICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAvLyAgICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmNvcGllZCA9IGZhbHNlO1xuICAvLyAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgICB9LCAyMDAwKTsgLy8gUmVzZXQgYWZ0ZXIgMiBzZWNvbmRzXG4gIC8vICAgfSk7XG4gIC8vIH1cbiAgY29weVRleHQoaWQsIGluZGV4KSB7XG4gICAgLy8gR2V0IHRoZSB0ZXh0IGVsZW1lbnRcbiAgICB2YXIgdGV4dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG5cbiAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgdGV4dGFyZWEgZWxlbWVudCB0byBjb3B5IHRoZSB0ZXh0XG4gICAgdmFyIHRlbXBUZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgdGVtcFRleHRBcmVhLnZhbHVlID0gdGV4dEVsZW1lbnQuaW5uZXJUZXh0O1xuXG4gICAgLy8gQXBwZW5kIHRoZSB0ZXh0YXJlYSB0byB0aGUgYm9keSAobmVjZXNzYXJ5IGZvciB0aGUgZXhlY0NvbW1hbmQgdG8gd29yaylcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXBUZXh0QXJlYSk7XG5cbiAgICAvLyBTZWxlY3QgdGhlIHRleHQgaW5zaWRlIHRoZSB0ZXh0YXJlYVxuICAgIHRlbXBUZXh0QXJlYS5zZWxlY3QoKTtcblxuICAgIC8vIENvcHkgdGhlIHRleHQgdG8gdGhlIGNsaXBib2FyZFxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG5cbiAgICAvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSB0ZXh0YXJlYVxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVtcFRleHRBcmVhKTtcblxuICAgIC8vIE9wdGlvbmFsbHksIHlvdSBjYW4gYWxlcnQgdGhlIHVzZXIgb3IgY2hhbmdlIHRoZSBidXR0b24gdGV4dCB0byBpbmRpY2F0ZSB0aGUgY29weSB3YXMgc3VjY2Vzc2Z1bFxuICAgIC8vIGFsZXJ0KCdUZXh0IGNvcGllZCB0byBjbGlwYm9hcmQhJyk7XG5cbiAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmNvcGllZCA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIFJlc2V0IHRoZSBjb3BpZWQgc3RhdGUgYWZ0ZXIgYSBkZWxheVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5jb3BpZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAyMDAwKTsgLy8gUmVzZXQgYWZ0ZXIgMiBzZWNvbmRzXG4gIH1cbiAgaGFuZGxlQ29weUNsaWNrKGluZGV4OiBhbnkpIHtcbiAgICAvLyBDb3B5IHRoZSBtZXNzYWdlIHRvIHRoZSBjbGlwYm9hcmRcbiAgICBjb25zdCBjb250ZW50VG9Db3B5ID0gdGhpcy5jaGF0TG9nW2luZGV4XS5tZXNzYWdlO1xuICAgIGNvbnN0IHJlc3V0bHQgPSB0aGlzLmNvcHlUZXh0KCdtZXNzYWdlVGV4dF8nICsgaW5kZXgsIGluZGV4KTtcbiAgfVxuXG4gIHNhbml0aXplSFRNTChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaHRtbCwgJ3RleHQvaHRtbCcpO1xuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IGRvY3VtZW50IGZyYWdtZW50IHRvIGhvbGQgdGhlIHNpbXBsaWZpZWQgY29udGVudFxuICAgIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuXG4gICAgLy8gQXBwZW5kIHRoZSBjaGlsZHJlbiBvZiB0aGUgYm9keSBvZiB0aGUgcGFyc2VkIGRvY3VtZW50IHRvIHRoZSBmcmFnbWVudFxuICAgIEFycmF5LmZyb20oZG9jLmJvZHkuY2hpbGROb2RlcykuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQobm9kZS5jbG9uZU5vZGUodHJ1ZSkpO1xuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IGRpdiBlbGVtZW50IHRvIGhvbGQgdGhlIHNpbXBsaWZpZWQgSFRNTFxuICAgIGNvbnN0IHNpbXBsaWZpZWREaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBzaW1wbGlmaWVkRGl2LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxuICAgIC8vIFJlbW92ZSBjb21wbGV4IHRhZ3Mgb3IgYXR0cmlidXRlcyBhcyBuZWVkZWRcbiAgICAvLyBFeGFtcGxlOiByZW1vdmUgc2NyaXB0c1xuICAgIHNpbXBsaWZpZWREaXZcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHQnKVxuICAgICAgLmZvckVhY2goKHNjcmlwdCkgPT4gc2NyaXB0LnJlbW92ZSgpKTtcblxuICAgIC8vIFJldHVybiB0aGUgc2ltcGxpZmllZCBIVE1MIGFzIGEgc3RyaW5nXG4gICAgcmV0dXJuIHNpbXBsaWZpZWREaXYuaW5uZXJIVE1MO1xuICB9XG5cbiAgY3VycmVudE1lc3NhZ2VGb3JFZGl0b3I6IGFueSA9ICcnO1xuICBjdXJyZW50SW5kZXhGb3JFZGl0b3I6IGFueSA9IC0xO1xuICBoYW5kbGVFZGl0b3JDbGljayhpbmRleDogYW55KSB7XG4gICAgaWYgKHRoaXMuY3VycmVudEluZGV4Rm9yRWRpdG9yID09IC0xKSB7XG4gICAgICB0aGlzLmN1cnJlbnRJbmRleEZvckVkaXRvciA9IGluZGV4O1xuICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciA9IHRoaXMuc2FuaXRpemVIVE1MKFxuICAgICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLm1lc3NhZ2UsXG4gICAgICApO1xuICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciA9IHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IucmVwbGFjZShcbiAgICAgICAgLy8gJ1NhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6JyxcbiAgICAgICAgJycsXG4gICAgICApO1xuXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleEZvckVkaXRvciA9PSBpbmRleCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yICs9IHRoaXMuc2FuaXRpemVIVE1MKFxuICAgICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvciA9IHRoaXMuY3VycmVudE1lc3NhZ2VGb3JFZGl0b3IucmVwbGFjZShcbiAgICAgICAgICAvLyAnU2FmZVZhbHVlIG11c3QgdXNlIFtwcm9wZXJ0eV09YmluZGluZzonLFxuICAgICAgICAgICcnLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1cnJlbnRJbmRleEZvckVkaXRvciA9IGluZGV4O1xuICAgICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yID0gdGhpcy5zYW5pdGl6ZUhUTUwoXG4gICAgICAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5tZXNzYWdlLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmN1cnJlbnRNZXNzYWdlRm9yRWRpdG9yID0gdGhpcy5jdXJyZW50TWVzc2FnZUZvckVkaXRvci5yZXBsYWNlKFxuICAgICAgICAgIC8vICdTYWZlVmFsdWUgbXVzdCB1c2UgW3Byb3BlcnR5XT1iaW5kaW5nOicsXG4gICAgICAgICAgJycsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaGF0TG9nW2luZGV4XS5pc0VkaXRvciA9IHRydWU7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIFJlc2V0IHRoZSBjb3BpZWQgc3RhdGUgYWZ0ZXIgYSBkZWxheVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5pc0VkaXRvciA9IGZhbHNlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDIwMDApOyAvLyBSZXNldCBhZnRlciAyIHNlY29uZHNcbiAgICB0aGlzLmVkaXRvcnNEcmF3ZXIub3BlbigpO1xuICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RjbG9zZXBsYXlncm91bmRidXR0b24nKTtcbiAgICBpZiAoYnV0dG9uKSB7XG4gICAgICBidXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIHNjcm9sbFRvQm90dG9tKCkge1xuICAgIGlmICghdGhpcy5hdXRvU2Nyb2xsT25OZXdNZXNzYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBjb3VudGVyID0gMDtcbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuY2hhdE1haW4ubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgICB0aGlzLmNoYXRNYWluLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgaWYgKGNvdW50ZXIrKyA+IDUpIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgIH0sIDUpO1xuICB9XG5cbiAgZm9jdXNPblRleHRhcmVhKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMubXlJbnB1dCAmJiB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sIDEwMCk7XG4gIH1cblxuICBoYW5kbGVBY3Rpb24oYWN0aW9uOiBhbnkpIHtcbiAgICBjb25zb2xlLmluZm8oJ2luY29taW5nIGFjdGlvbiBmcm9tIHRoZSBjaGF0Ym90IEFJJyk7XG4gICAgY29uc29sZS5pbmZvKGFjdGlvbik7XG5cbiAgICBpZiAoYWN0aW9uPy5jb250ZW50KSB7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIENoZWNrIGlmIHRoZSBkcmF3ZXIgaXMgaW5pdGlhbGx5IG9wZW4gYW5kIGFwcGx5IG92ZXJmbG93IGhpZGRlbiB0byBib2R5IGlmIHNvXG4gICAgaWYgKHRoaXMuZHJhd2VyLm9wZW5lZCkge1xuICAgICAgdGhpcy5zZXRCb2R5T3ZlcmZsb3coKTtcbiAgICB9XG5cbiAgICAvLyBMaXN0ZW4gdG8gY2hhbmdlcyBpbiB0aGUgZHJhd2VyIGJlaW5nIG9wZW5lZCBvciBjbG9zZWRcbiAgICB0aGlzLmRyYXdlci5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKChvcGVuZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgdGhpcy5zZXRCb2R5T3ZlcmZsb3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQm9keU92ZXJmbG93KCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmRyYXdlci5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKChvcGVuZWQpID0+IHtcbiAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubXlJbnB1dCAmJiB0aGlzLm15SW5wdXQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5teUlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTsgLy8gRm9jdXMgb24gdGhlIHRleHRhcmVhXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Qm9keU92ZXJmbG93KCkge1xuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5ib2R5T3ZlcmZsb3dDbGFzcyk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUJvZHlPdmVyZmxvdygpIHtcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIHRoaXMuYm9keU92ZXJmbG93Q2xhc3MpO1xuICB9XG5cbiAgZ2V0U3BlYWtlcnNCeVN0YWZmSWRzKGlkczogYW55W10pOiBPYnNlcnZhYmxlPGFueVtdIHwgbnVsbD4ge1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuVVNFUlNfQVBJfS9ldmVudHMvJHt0aGlzLmV2ZW50SWR9L3VzZXJzL2dldC1ieS1zdGFmZi1pZHNgO1xuICAgIGNvbnN0IGNsZWFuSWRzID0gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQoKGlkcyB8fCBbXSkubWFwKCh4KSA9PiBTdHJpbmcoeCA/PyAnJykudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikpLFxuICAgICk7XG4gICAgaWYgKGNsZWFuSWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG9mKG51bGwpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIGFwaUtleTogdGhpcy5hdXRvZ2VuS2V5LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnlbXT4odXJsLCBjbGVhbklkcywgeyBoZWFkZXJzIH0pLnBpcGUoXG4gICAgICB0YXAoKGRhdGE6IGFueVtdKSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpICYmIGRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGRhdGEuZm9yRWFjaCgoc3BlYWtlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBTdHJpbmcoc3BlYWtlcj8uaWQgPz8gJycpLnRyaW0oKTtcbiAgICAgICAgICAgIGlmIChpZCkgdGhpcy5zcGVha2Vyc1tpZF0gPSBzcGVha2VyO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBzcGVha2VyczonLCBlcnIpO1xuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcGVyZm9ybVNlc3Npb25BY3Rpb24oc2Vzc2lvbklkLCBhY3Rpb24pIHtcbiAgICB0aGlzLnNlc3Npb25BY3Rpb25zLm5leHQoe1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgYWN0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgYWRkQ2xvc2VCb3RDbGlja0V2ZW50KCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjY2xvc2VCb3ROb3cnKTtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oZWxlbWVudCwgJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlQm90Lm5leHQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGlzTW9iaWxlQnJvd3NlcigpIHtcbiAgICByZXR1cm4gL0FuZHJvaWR8d2ViT1N8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fElFTW9iaWxlfE9wZXJhIE1pbmkvaS50ZXN0KFxuICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudCxcbiAgICApO1xuICB9XG5cbiAgY29ubmVjdFRvVXNlcih1c2VySWQpIHtcbiAgICB0aGlzLmNvbm5lY3RXaXRoVXNlci5lbWl0KHtcbiAgICAgIGNvbm5lY3Q6ICF0aGlzLmNhbkRpc2Nvbm5lY3QodXNlcklkKSxcbiAgICAgIHVzZXJJZCxcbiAgICB9KTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5mZXRjaE15Q29ubmVjdGlvbnMoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5mZXRjaFBlbmRpbmdSZXF1ZXN0cygpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHNjaGVkdWxlTWVldGluZ1dpdGhVc2VyKHVzZXIpIHtcbiAgICB0aGlzLnNjaGVkdWxlTWVldGluZy5lbWl0KHVzZXIpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGdpdmVuIHVzZXJJZCBoYXMgYSBwZW5kaW5nIGNvbm5lY3Rpb24gcmVxdWVzdCBzZW50IChzaG93IFwiUmVxdWVzdCBTZW50XCIgZGlzYWJsZWQpLiAqL1xuICBjaGVja1BlbmRpbmdTZW50UmVxdWVzdCh1c2VySWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgICBpZiAodXNlcklkID09IG51bGwgfHwgdXNlcklkID09PSAnJykgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdTZW50UmVxdWVzdFVzZXJJZHM/Lmxlbmd0aFxuICAgICAgPyB0aGlzLnBlbmRpbmdTZW50UmVxdWVzdFVzZXJJZHNcbiAgICAgIDogdGhpcy5wZW5kaW5nUmVxdWVzdHM7XG4gICAgcmV0dXJuICEhcGVuZGluZz8uZmluZCgoYTogYW55KSA9PiBhID09IHVzZXJJZCk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGlzIGF0dGVuZGVlIGNhbiBiZSBmb2xsb3dlZCAoc2hvdyBcIkNvbm5lY3RcIiBidXR0b24pLiBOb3QgY29ubmVjdGVkIGFuZCBubyBwZW5kaW5nIHNlbnQgcmVxdWVzdC4gKi9cbiAgY2FuRm9sbG93VXNlcihhdHRlbmRlZTogeyBpZD86IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdWlkID0gYXR0ZW5kZWU/LmlkO1xuICAgIGlmICh1aWQgPT0gbnVsbCB8fCB1aWQgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRoaXMuY2FuVW5mb2xsb3dVc2VyKGF0dGVuZGVlKSB8fCB0aGlzLmNoZWNrUGVuZGluZ1NlbnRSZXF1ZXN0KHVpZCkpXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGlzIGF0dGVuZGVlIGlzIGFscmVhZHkgY29ubmVjdGVkIChzaG93IFwiRGlzY29ubmVjdFwiIGJ1dHRvbikuICovXG4gIGNhblVuZm9sbG93VXNlcihhdHRlbmRlZTogeyBpZD86IHN0cmluZyB9KTogYm9vbGVhbiB7XG4gICAgY29uc3QgdWlkID0gYXR0ZW5kZWU/LmlkO1xuICAgIGlmICh1aWQgPT0gbnVsbCB8fCB1aWQgPT09ICcnKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuY29ubmVjdGlvbnNMaXN0Py5sZW5ndGhcbiAgICAgID8gdGhpcy5jb25uZWN0aW9uc0xpc3RcbiAgICAgIDogdGhpcy5teUNvbm5lY3Rpb25zO1xuICAgIHJldHVybiAhIWxpc3Q/LmZpbmQoKGM6IGFueSkgPT4gKGMudXNlcklkID8/IGMuaWQpID09IHVpZCk7XG4gIH1cblxuICBjYW5Db25uZWN0KHVzZXJJZCkge1xuICAgIHJldHVybiAhKFxuICAgICAgdGhpcy5jYW5EaXNjb25uZWN0KHVzZXJJZCkgfHxcbiAgICAgIHRoaXMucGVuZGluZ1JlcXVlc3RzLmZpbmQoKGEpID0+IGEgPT0gdXNlcklkKVxuICAgICk7XG4gIH1cblxuICBjYW5EaXNjb25uZWN0KHVzZXJJZCkge1xuICAgIHJldHVybiB0aGlzLm15Q29ubmVjdGlvbnMuZmluZCgoY29ubikgPT4gY29ubi51c2VySWQgPT0gdXNlcklkKTtcbiAgfVxuXG4gIGZldGNoUGVuZGluZ1JlcXVlc3RzKCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIGFwaUtleTogdGhpcy5hdXRvZ2VuS2V5LFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoXG4gICAgICAgIGAke3RoaXMuZW52aXJvbm1lbnQuVVNFUlNfQVBJfS9ldmVudHMvJHt0aGlzLmV2ZW50SWR9L2Nvbm5lY3Rpb24tcmVxdWVzdHMvYXV0b2dlbi9wZW5kaW5nLXNlbnQtcmVxdWVzdHM/dXNlcklkPSR7dGhpcy51c2VySWR9YCxcbiAgICAgICAgeyBoZWFkZXJzIH0sXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMucGVuZGluZ1JlcXVlc3RzID0gcmVzO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHBlbmRpbmcgcmVxdWVzdHM6ICcsIGVycm9yKTtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgfVxuXG4gIGZldGNoTXlDb25uZWN0aW9ucygpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICBhcGlLZXk6IHRoaXMuYXV0b2dlbktleSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFxuICAgICAgICBgJHt0aGlzLmVudmlyb25tZW50LlVTRVJTX0FQSX0vZXZlbnRzLyR7dGhpcy5ldmVudElkfS91c2Vycy1jb25uZWN0aW9ucy9hdXRvZ2VuP3VzZXJJZD0ke3RoaXMudXNlcklkfWAsXG4gICAgICAgIHsgaGVhZGVycyB9LFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLm15Q29ubmVjdGlvbnMgPSByZXM7XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcGVuZGluZyByZXF1ZXN0czogJywgZXJyb3IpO1xuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgaXNEcm9wZG93bk9wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgYWdlbnRzOiBhbnk7XG4gIHNlbGVjdGVkQWdlbnRzID0gW107XG4gIGFsbFNlbGVjdGVkID0gZmFsc2U7XG4gIC8vIFRvZ2dsZSB0aGUgZHJvcGRvd24gdmlzaWJpbGl0eVxuICB0b2dnbGVEcm9wZG93bigpIHtcbiAgICBpZiAoIXRoaXMuYWdlbnRzKSB0aGlzLmZldGNoQWdlbnRzKCk7XG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiA9ICF0aGlzLmlzRHJvcGRvd25PcGVuO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG9uU2VsZWN0QWxsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuYWdlbnRzPy5mb3JFYWNoKChhZ2VudCkgPT4gKGFnZW50LnNlbGVjdGVkID0gZmFsc2UpKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBvbkFnZW50Q2hhbmdlKGFnZW50OiBhbnkpOiB2b2lkIHtcbiAgICAvL2FnZW50LnNlbGVjdGVkID0gIWFnZW50LnNlbGVjdGVkO1xuICAgIC8vY29uc29sZS5sb2coYWdlbnQpO1xuICAgIGxldCBhZ2VudEZvdW5kID0gdGhpcy5hZ2VudHMuZmlsdGVyKChwKSA9PiBwLmlkID09IGFnZW50LmlkKTtcbiAgICBpZiAoYWdlbnRGb3VuZCAmJiBhZ2VudEZvdW5kLmxlbmd0aCA+IDApIHtcbiAgICAgIGFnZW50Rm91bmRbMF0uc2VsZWN0ZWQgPSAhYWdlbnRGb3VuZFswXS5zZWxlY3RlZDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYXJlQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWdlbnRzPy5ldmVyeSgoYWdlbnQpID0+ICFhZ2VudC5zZWxlY3RlZCk7XG4gIH1cblxuICBnZXREcm9wZG93bkhlYWRlclRleHQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWxlY3RlZEFnZW50cyA9IHRoaXMuYWdlbnRzPy5maWx0ZXIoKGFnZW50KSA9PiBhZ2VudC5zZWxlY3RlZCk7XG4gICAgaWYgKCFzZWxlY3RlZEFnZW50cykge1xuICAgICAgcmV0dXJuICdBbGwgQWdlbnRzJztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNlbGVjdGVkQWdlbnRzICYmIHNlbGVjdGVkQWdlbnRzPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuICdBbGwgQWdlbnRzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZEFnZW50cz8ubGVuZ3RoID4gMVxuICAgICAgICAgID8gYCR7c2VsZWN0ZWRBZ2VudHM/Lmxlbmd0aH0gQWdlbnRzIFNlbGVjdGVkYFxuICAgICAgICAgIDogYCR7c2VsZWN0ZWRBZ2VudHM/Lmxlbmd0aH0gQWdlbnQgU2VsZWN0ZWRgO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBmZXRjaEFnZW50c19odHRwKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5BR0VOVFNfQVBJfS9Db1BpbG90LyR7dGhpcy5ib3RJZH0vYWN0aXZlLWFnZW50c2A7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHVybCwge30sIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgdGhpcy5hZ2VudHMgPSByZXMubWFwKChhZ2VudCkgPT4gKHtcbiAgICAgICAgICAgIC4uLmFnZW50LFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdGJvdCBjb25maWc6ICcsIGVycm9yKTtcblxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG4gIGlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICBkb2N1bWVudENvbnRlbnQ6IGFueTtcblxuICBjb252ZXJzYXRpb25JZDogYW55O1xuICBpc0NvbnRlbnRMb2FkZWQgPSBmYWxzZTtcblxuICBmZXRjaENvbnRlbnRfaHR0cCgpIHtcbiAgICB0aGlzLmlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgIHRoaXMuaXNDb250ZW50TG9hZGVkID0gZmFsc2U7XG4gICAgY29uc29sZS5sb2coJ0FQSSBjYWxsIGZ1bmN0aW9uJyk7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBjb252ZXJzYXRpb25faWQgPSB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2V0S2V5KHRoaXMuYm90SWQpO1xuICAgIHRoaXMuY29udmVyc2F0aW9uSWQgPSBjb252ZXJzYXRpb25faWQ7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5BR0VOVFNfQVBJfS9Db252ZXJzYXRpb25Eb2N1bWVudHM/Y29udmVyc2F0aW9uSWQ9JHtjb252ZXJzYXRpb25faWR9JmJvdElkPSR7dGhpcy5ib3RJZH1gO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIGFwaUtleTogJ1dJei9xQW0rRUVtZk9rRmFVQS93ZUE9PScsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHsgaGVhZGVycyB9KS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgdGhpcy5pc0RvY0luRWRpdE1vZGUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRDb250ZW50ID0gcmVzO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdHZXQgQVBJIGNhbGxsZWQgc3VjY2VzcycpO1xuICAgICAgICAgIHRoaXMuaXNDb250ZW50TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0Ym90IGNvbmZpZyBESjogJywgZXJyb3IpO1xuICAgICAgICB0aGlzLmlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzQ29udGVudExvYWRlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKGVycm9yPy5zdGF0dXMgPT0gNDA0KSB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ2Rhc2gnKTtcbiAgICAgICAgICB0aGlzLmlzRG9jSW5FZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaXNDb250ZW50TG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgZmV0Y2hBZ2VudHMoKSB7XG4gICAgdGhpcy5mZXRjaEFnZW50c19odHRwKCkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBmZXRjaEVkaXRvckNvbnRlbnQoKSB7XG4gICAgdGhpcy5mZXRjaENvbnRlbnRfaHR0cCgpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLy8gZXZlbnRzLyR7ZXZlbnRJZH0vdXNlcnMtY29ubmVjdGlvbnNcbiAgcHJvY2Vzc01lc3NhZ2VGb3JEaXNwbGF5KG1hcmtkb3duOiBzdHJpbmcpOiBTYWZlSHRtbCB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIENyZWF0ZSBhIGN1c3RvbSByZW5kZXJlciB0byBtb2RpZnkgPGE+IHRhZ3NcbiAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IG1hcmtlZC5SZW5kZXJlcigpO1xuXG4gICAgICAvLyBDdXN0b21pemUgYW5jaG9yIHRhZ3MgdG8gaW5jbHVkZSB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgcmVuZGVyZXIubGluayA9IChocmVmOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIHRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gYDxhIGhyZWY9XCIke2hyZWZ9XCIgdGl0bGU9XCIke1xuICAgICAgICAgIHRpdGxlIHx8ICcnXG4gICAgICAgIH1cIiB0YXJnZXQ9XCJfYmxhbmtcIj4ke3RleHR9PC9hPmA7XG4gICAgICB9O1xuXG4gICAgICAvLyBQYXJzZSB0aGUgbWFya2Rvd24gY29udGVudCB0byBIVE1MIHVzaW5nIG1hcmtlZCB3aXRoIHRoZSBjdXN0b20gcmVuZGVyZXJcbiAgICAgIGNvbnN0IG1hcmtkb3duQ29udGVudCA9IG1hcmtlZC5wYXJzZShtYXJrZG93biwgeyByZW5kZXJlcjogcmVuZGVyZXIgfSk7XG5cbiAgICAgIC8vIFNhbml0aXplIHRoZSBwYXJzZWQgSFRNTCB1c2luZyBBbmd1bGFyJ3MgRG9tU2FuaXRpemVyXG4gICAgICBjb25zdCBzYW5pdGl6ZWRIdG1sID1cbiAgICAgICAgdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwobWFya2Rvd25Db250ZW50KTtcblxuICAgICAgLy8gUmV0dXJuIHRoZSBzYWZlIEhUTUwgY29udGVudCBmb3IgZGlzcGxheVxuICAgICAgcmV0dXJuIHNhbml0aXplZEh0bWw7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHByb2Nlc3NpbmcgbWFya2Rvd246JywgZXJyb3IpO1xuICAgICAgcmV0dXJuICcnOyAvLyBSZXR1cm4gYW4gZW1wdHkgc3RyaW5nIG9yIGhhbmRsZSB0aGUgZXJyb3IgYXBwcm9wcmlhdGVseVxuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVIdG1sKG1hcmtkb3duOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbWFya2Rvd24gfHwgIShtYXJrZG93bi5sZW5ndGggPiAwKSkge1xuICAgICAgY29uc29sZS5lcnJvcignSW5wdXQgTWFya2Rvd24gaXMgbnVsbCBvciBlbXB0eScpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgTWFya2Rvd24gaGVhZGVycyAoIyMjIG9yICMjKSB0byA8c3Ryb25nPiBmb3IgYm9sZCBoZWFkaW5nc1xuICAgIGxldCBodG1sID0gbWFya2Rvd24ucmVwbGFjZShcbiAgICAgIC9eKCN7MSw2fSlcXHMrKC4qKSQvZ20sXG4gICAgICAobWF0Y2gsIGhhc2hlcywgdGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBsZXZlbCA9IGhhc2hlcy5sZW5ndGg7XG4gICAgICAgIGlmIChsZXZlbCA9PT0gMykge1xuICAgICAgICAgIHJldHVybiBgPGgzPjxzdHJvbmc+JHt0ZXh0fTwvc3Ryb25nPjwvaDM+YDtcbiAgICAgICAgfSBlbHNlIGlmIChsZXZlbCA9PT0gNCkge1xuICAgICAgICAgIHJldHVybiBgPGg0PjxzdHJvbmc+JHt0ZXh0fTwvc3Ryb25nPjwvaDQ+YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYDxzdHJvbmc+JHt0ZXh0fTwvc3Ryb25nPmA7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBDb252ZXJ0IE1hcmtkb3duIGNvZGUgYmxvY2tzIHdpdGggbGFuZ3VhZ2UgdG8gcHJlZm9ybWF0dGVkIEhUTUxcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9gYGAoXFx3Kyk/XFxuKFtcXHNcXFNdKj8pYGBgL2csIChtYXRjaCwgbGFuZywgY29kZSkgPT4ge1xuICAgICAgY29uc3QgZXNjYXBlZENvZGUgPSB0aGlzLmVzY2FwZUh0bWwoY29kZSk7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IGxhbmcgfHwgJ3BsYWludGV4dCc7XG5cbiAgICAgIC8vIENyZWF0ZSBhIGNvcHkgYnV0dG9uIGZvciB0aGUgY29kZSBibG9ja1xuICAgICAgcmV0dXJuIGBcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2RlLWNvbnRhaW5lclwiPlxuICAgICAgICA8YnV0dG9uIGlkPVwiY29weS1idXR0b25cIiBjbGFzcz1cImNvcHktYnV0dG9uXCIgKGNsaWNrKT1cImNvcHlUb0NsaXBib2FyZCgnXFxgJHtlc2NhcGVkQ29kZX1cXGAnKVwiPiR7dGhpcy5nZXRUcmFuc2xhdGlvbihcbiAgICAgICAgICAnQ29weScsXG4gICAgICAgICl9PC9idXR0b24+XG4gICAgICAgIDxwcmUgY2xhc3M9XCJjb2RlX2Jsb2NrIGRpZmZcIj48Y29kZSBjbGFzcz1cImxhbmd1YWdlLSR7bGFuZ3VhZ2V9XCI+JHtlc2NhcGVkQ29kZX08L2NvZGU+PC9wcmU+XG4gICAgICA8L2Rpdj5gO1xuICAgIH0pO1xuXG4gICAgLy8gQ29udmVydCBpbmxpbmUgY29kZSAod3JhcHBlZCBpbiBgYmFja3RpY2tzYCkgdG8gaW5saW5lIDxjb2RlPiB0YWdzXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvYChbXmBdKylgL2csICc8Y29kZT4kMTwvY29kZT4nKTtcblxuICAgIC8vIENvbnZlcnQgTWFya2Rvd24gYm9sZCB0byBIVE1MIDxzdHJvbmc+XG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvXFwqXFwqKC4qPylcXCpcXCovZywgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKTtcblxuICAgIC8vIENvbnZlcnQgbnVtYmVyZWQgbGlzdHNcbiAgICBodG1sID0gaHRtbC5yZXBsYWNlKC9eXFxkK1xcLlxccysoLiopJC9nbSwgJzxsaT4kMTwvbGk+Jyk7XG5cbiAgICAvLyBDb252ZXJ0IGJ1bGxldCBwb2ludCBsaXN0c1xuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoL15cXC1cXHMrKC4qKSQvZ20sICc8bGk+JDE8L2xpPicpO1xuXG4gICAgLy8gQ29udmVydCBNYXJrZG93biBsaW5rcyB0byBIVE1MIGxpbmtzXG4gICAgaHRtbCA9IGh0bWwucmVwbGFjZShcbiAgICAgIC9cXFsoW15cXF1dKyldXFwoKFteKV0rKVxcKS9nLFxuICAgICAgJzxhIGhyZWY9XCIkMlwiIHRhcmdldD1cIl9ibGFua1wiPiQxPC9hPicsXG4gICAgKTtcblxuICAgIC8vIENvbnZlcnQgbmV3IGxpbmVzIHRvIDxicj4gdGFncyBmb3IgcGFyYWdyYXBoc1xuICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoLyg/OlxcclxcbnxcXHJ8XFxuKS9nLCAnPGJyPicpO1xuXG4gICAgcmV0dXJuIGh0bWw7XG4gIH1cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZXNjYXBlIEhUTUwgY2hhcmFjdGVycyBmb3IgY29kZSBibG9ja3NcbiAgZXNjYXBlSHRtbChjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBjb2RlXG4gICAgICAucmVwbGFjZSgvJi9nLCAnJmFtcDsnKVxuICAgICAgLnJlcGxhY2UoLzwvZywgJyZsdDsnKVxuICAgICAgLnJlcGxhY2UoLz4vZywgJyZndDsnKVxuICAgICAgLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKVxuICAgICAgLnJlcGxhY2UoLycvZywgJyYjMDM5OycpO1xuICB9XG5cbiAgLy8gRnVuY3Rpb24gdG8gY29weSB0ZXh0IHRvIGNsaXBib2FyZFxuICBwdWJsaWMgY29weVRvQ2xpcGJvYXJkKHRleHQ6IHN0cmluZykge1xuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQpLnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGFsZXJ0KCdDb2RlIGNvcGllZCB0byBjbGlwYm9hcmQhJyk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdDb3VsZCBub3QgY29weSB0ZXh0OiAnLCBlcnIpO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgaXNDb2xsYXBzZWQgPSBmYWxzZTtcbiAgaXNDb2xsYXBzZWRGb3JHcmFwaCA9IGZhbHNlO1xuICBpc0NvbGxhcHNlZEZvckZHcmFwaCA9IGZhbHNlO1xuICB0b2dnbGVDb2xsYXBzZSgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gIXRoaXMuaXNDb2xsYXBzZWQ7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgdG9nZ2xlQ29sbGFwc2VHcmFwaCgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkRm9yR3JhcGggPSAhdGhpcy5pc0NvbGxhcHNlZEZvckdyYXBoO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICB0b2dnbGVDb2xsYXBzZUZHcmFwaCgpIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkRm9yRkdyYXBoID0gIXRoaXMuaXNDb2xsYXBzZWRGb3JGR3JhcGg7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIC8vICAgW1xuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJBSSBOZXdzIEphbnVhcnkgMjAyNDogSW4tRGVwdGggYW5kIENvbmNpc2UgLSBUaGUgQUkgVHJhY2tcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIkVhY2ggbW9udGgsIHdlIGNvbXBpbGUgc2lnbmlmaWNhbnQgbmV3cywgdHJlbmRzLCBhbmQgaGFwcGVuaW5ncyBpbiBBSSwgcHJvdmlkaW5nIGRldGFpbGVkIHN1bW1hcmllcyB3aXRoIGtleSBwb2ludHMgaW4gYnVsbGV0IGZvcm0gZm9yIGNvbmNpc2UgeWV0IGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL3RoZWFpdHJhY2suY29tL2FpLW5ld3MtamFudWFyeS0yMDI0L1wiXG4gIC8vICAgfSxcbiAgLy8gICB7XG4gIC8vICAgICBcInRpdGxlXCI6IFwiVG9wIEFJIE5ld3MsIEphbnVhcnkgMjAyNCAtIEV2ZXJ5cGl4ZWwgSm91cm5hbFwiLFxuICAvLyAgICAgXCJkZXNjXCI6IFwiSW4gdGhpcyBtb250aGx5IHJvdW5kdXAsIHdlIHNwb3RsaWdodCB0aGUgdG9wIEFJIG5ld3Mgc3RvcmllcyBmcm9tIEphbnVhcnksIGluY2x1ZGluZyB0aGUgT3BlbkFJIHZzLiBUaGUgTmV3IFlvcmsgVGltZXMgTGF3c3VpdC5cIixcbiAgLy8gICAgIFwibGlua1wiOiBcImh0dHBzOi8vam91cm5hbC5ldmVyeXBpeGVsLmNvbS90b3AtYWktbmV3cy1qYW51YXJ5LTIwMjRcIlxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgXCJ0aXRsZVwiOiBcIkFJIE5ld3MgSnVseSAyMDI0OiBJbi1EZXB0aCBhbmQgQ29uY2lzZSAtIFRoZSBBSSBUcmFja1wiLFxuICAvLyAgICAgXCJkZXNjXCI6IFwiVGhpcyBwYWdlIGZlYXR1cmVzIEFJIE5ld3MgZm9yIEp1bHkgMjAyNCwgaGlnaGxpZ2h0aW5nIHNpZ25pZmljYW50IGV2ZW50cyBzdWNoIGFzIENhbnZhIGFjcXVpcmluZyBMZW9uYXJkbyBBSS5cIixcbiAgLy8gICAgIFwibGlua1wiOiBcImh0dHBzOi8vdGhlYWl0cmFjay5jb20vYWktbmV3cy1qdWx5LTIwMjQtaW4tZGVwdGgtYW5kLWNvbmNpc2UvXCJcbiAgLy8gICB9LFxuICAvLyAgIHtcbiAgLy8gICAgIFwidGl0bGVcIjogXCJKYW51YXJ5IG5ld3Mgcm91bmR1cDogV2hhdCdzIG5ldyBpbiB0aGUgd29ybGQgb2YgQUk/IC0gUGx1cmFsc2lnaHRcIixcbiAgLy8gICAgIFwiZGVzY1wiOiBcIk9wZW5BSeKAmXMgbmV3IEdQVCBzdG9yZSwgYnVzaW5lc3MtcmVhZHkgQ2hhdEdQVCBwbGFucywgYW5kIGEgcHJlZGljdGVkIHJpc2UgaW4gQUktcG93ZXJlZCBjeWJlcmNyaW1lLlwiLFxuICAvLyAgICAgXCJsaW5rXCI6IFwiaHR0cHM6Ly93d3cucGx1cmFsc2lnaHQuY29tL3Jlc291cmNlcy9ibG9nL2RhdGEvYWktdGhpcy1tb250aC1qYW51YXJ5LTIwMjRcIlxuICAvLyAgIH0sXG4gIC8vICAge1xuICAvLyAgICAgXCJ0aXRsZVwiOiBcIkFJIE5ld3MgQXVndXN0IDIwMjQ6IEluLURlcHRoIGFuZCBDb25jaXNlIC0gVGhlIEFJIFRyYWNrXCIsXG4gIC8vICAgICBcImRlc2NcIjogXCJUaGlzIHBhZ2UgZmVhdHVyZXMgQUkgTmV3cyBmb3IgQXVndXN0IDIwMjQsIHdpdGggaGlnaGxpZ2h0cyBzdWNoIGFzIE52aWRpYSBkZWxheWluZyB0aGUg4oCcQmxhY2t3ZWxs4oCdIEIyMDAgQUkgY2hpcHMgZGVsaXZlcnkuXCIsXG4gIC8vICAgICBcImxpbmtcIjogXCJodHRwczovL3RoZWFpdHJhY2suY29tL2FpLW5ld3MtYXVndXN0LTIwMjQtaW4tZGVwdGgtYW5kLWNvbmNpc2UtZHVwbGljYXRlL1wiXG4gIC8vICAgfVxuICAvLyBdXG4gIGRhdGVUaW1lID0geyBub3c6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9O1xuICAvLyBFeHRyYWN0cyB0aGUgZG9tYWluIGZyb20gYSBVUkxcbiAgZ2V0RG9tYWluTmFtZSh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgaG9zdG5hbWUgfSA9IG5ldyBVUkwodXJsKTtcbiAgICAgIHJldHVybiBob3N0bmFtZS5yZXBsYWNlKC9ed3d3XFwuLywgJycpOyAvLyBSZW1vdmUgJ3d3dy4nIGlmIHByZXNlbnRcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiAndW5rbm93bic7XG4gICAgfVxuICB9XG5cbiAgLy8gR2VuZXJhdGVzIHRoZSBmYXZpY29uIFVSTFxuICBnZXRGYXZpY29uVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBkb21haW4gPSB0aGlzLmdldERvbWFpbk5hbWUodXJsKTtcbiAgICByZXR1cm4gYGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vczIvZmF2aWNvbnM/c3o9MTI4JmRvbWFpbj0ke2RvbWFpbn1gO1xuICB9XG4gIGN1cnJlbnRTb3VyY2VzTGlzdDogYW55ID0gW107XG4gIG9uQ2FyZENsaWNrKHNvdXJjZXMpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRTb3VyY2VzTGlzdCA9IHNvdXJjZXM7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuc291cmNlc0RyYXdlci5vcGVuKCk7XG4gICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdGNsb3NlcGxheWdyb3VuZGJ1dHRvbicpO1xuICAgIGlmIChidXR0b24pIHtcbiAgICAgIGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIGlzU2hvd0VkaXRvckJ1dHRvbiA9IHRydWU7XG5cbiAgb3Blbk91dGVyRWRpdG9yKCkge1xuICAgIHRoaXMuZmV0Y2hFZGl0b3JDb250ZW50KCk7XG4gICAgdGhpcy5lZGl0b3JzRHJhd2VyLm9wZW4oKTtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IHRydWU7XG4gICAgdGhpcy5pc1Nob3dFZGl0b3JCdXR0b24gPSBmYWxzZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgfVxuICB9XG5cbiAgb25DbG9zZUVkaXRvcigpIHtcbiAgICB0aGlzLmVkaXRvcnNEcmF3ZXIuY2xvc2UoKTtcbiAgICB0aGlzLmlzRHJhd2VyT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuaXNTaG93RWRpdG9yQnV0dG9uID0gdHJ1ZTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7IC8vIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBpZiBuZWVkZWRcbiAgICB0aGlzLm9uRHJhd2VyQ2xvc2VkKCk7XG4gIH1cblxuICBvbkNsb3NlU291cmNlKCkge1xuICAgIHRoaXMuc291cmNlc0RyYXdlci5jbG9zZSgpO1xuICAgIHRoaXMuaXNEcmF3ZXJPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVlZGVkXG4gICAgdGhpcy5vbkRyYXdlckNsb3NlZCgpO1xuICB9XG4gIG9uRHJhd2VyQ2xvc2VkKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pc0RyYXdlck9wZW4gPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpOyAvLyBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gaWYgbmVlZGVkXG4gICAgICAvLyBVc2UgbmdDbGFzcyB0byBkeW5hbWljYWxseSBhcHBseSB0aGUgY2xhc3NcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdib3RjbG9zZXBsYXlncm91bmRidXR0b24nKTtcbiAgICAgIGlmIChidXR0b24pIHtcbiAgICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgfVxuICAgIH0sIDgwMCk7XG4gIH1cbiAgaXNEcmF3ZXJPcGVuID0gdHJ1ZTtcblxuICB0b2dnbGVEcmF3ZXIodG9kbykge1xuICAgIHRoaXMuaXNEcmF3ZXJPcGVuID0gdG9kbztcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy51cGRhdGVCdXR0b25WaXNpYmlsaXR5KCk7XG4gIH1cbiAgdXBkYXRlQnV0dG9uVmlzaWJpbGl0eSgpIHtcbiAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm90Y2xvc2VwbGF5Z3JvdW5kYnV0dG9uJyk7XG4gICAgaWYgKGJ1dHRvbikge1xuICAgICAgYnV0dG9uLnN0eWxlLmRpc3BsYXkgPSB0aGlzLmlzRHJhd2VyT3BlbiA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgfVxuICB9XG4gIG9wZW5MaW5rSW5OZXdUYWIobGluazogc3RyaW5nKTogdm9pZCB7XG4gICAgd2luZG93Lm9wZW4obGluaywgJ19ibGFuaycpO1xuICB9XG4gIGFkanVzdFRleHRhcmVhSGVpZ2h0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgLy8gUHJldmVudHMgYSBuZXcgbGluZSBmcm9tIGJlaW5nIGFkZGVkXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgY29uc3QgdGV4dGFyZWEgPSBldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSAnYXV0byc7IC8vIFJlc2V0IHRoZSBoZWlnaHRcbiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSBgJHt0ZXh0YXJlYS5zY3JvbGxIZWlnaHR9cHhgOyAvLyBBZGp1c3QgaGVpZ2h0IHRvIG1hdGNoIGNvbnRlbnRcbiAgICAvLyBFbnN1cmUgdGhlIGhlaWdodCBkb2Vzbid0IGV4Y2VlZCB0aGUgbWF4LWhlaWdodCBzZXQgaW4gQ1NTXG4gICAgaWYgKHRleHRhcmVhLnNjcm9sbEhlaWdodCA+IDE1MCkge1xuICAgICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gYDE1MHB4YDsgLy8gQWRqdXN0IGhlaWdodCB0byBtYXRjaCBjb250ZW50XG4gICAgICB0ZXh0YXJlYS5zdHlsZS5vdmVyZmxvd1kgPSAnYXV0byc7IC8vIEVuYWJsZSBzY3JvbGxpbmcgaWYgY29udGVudCBleGNlZWRzIDQwMHB4XG4gICAgfSBlbHNlIHtcbiAgICAgIHRleHRhcmVhLnN0eWxlLm92ZXJmbG93WSA9ICdoaWRkZW4nOyAvLyBIaWRlIHNjcm9sbGJhciBpZiBjb250ZW50IGlzIHdpdGhpbiBsaW1pdHNcbiAgICB9XG4gIH1cblxuICB0b2dnbGVXb3JrZmxvd3ModmFsdWUgPSBudWxsKSB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRm9yQ29wMjlCb3RJZCgpKSB7XG4gICAgICB0aGlzLmJvdFNlcnZpY2UuZ2V0V29ya2Zsb3dzQnlPcmdJZCh0aGlzLm9yZ0lkKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuICAgICAgICB0aGlzLm9yZ1dvcmtmbG93cyA9IHJlcztcbiAgICAgICAgdGhpcy5pc1dvcmtmbG93T3BlbiA9IHZhbHVlID09IG51bGwgPyAhdGhpcy5pc1dvcmtmbG93T3BlbiA6IHZhbHVlO1xuXG4gICAgICAgIGlmICghdGhpcy5pc1dvcmtmbG93T3Blbikge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5vcGVuV29ya2Zsb3dJbnB1dCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaW5pdGlhbGl6ZUZvcm0oKSB7XG4gICAgLy8gQ3JlYXRlIGZvcm0gY29udHJvbHMgZHluYW1pY2FsbHkgYmFzZWQgb24gc2VsZWN0ZWRXb3JrZmxvdy5UcmlnZ2VyLklucHV0U2NoZW1hXG4gICAgY29uc3QgZm9ybUNvbnRyb2xzID0ge307XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRXb3JrZmxvdz8uVHJpZ2dlcj8uSW5wdXRTY2hlbWEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5UcmlnZ2VyLklucHV0U2NoZW1hLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICAgIGZvcm1Db250cm9sc1tpbnB1dC5JbnB1dElkXSA9IFtcbiAgICAgICAgICBpbnB1dC5WYWx1ZSB8fCAnJyxcbiAgICAgICAgICBpbnB1dC5SZXF1aXJlZCA/IFZhbGlkYXRvcnMucmVxdWlyZWQgOiBudWxsLFxuICAgICAgICBdO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZm9ybVxuICAgIHRoaXMud29ya2Zsb3dGb3JtID0gdGhpcy5mYi5ncm91cChmb3JtQ29udHJvbHMpO1xuICB9XG5cbiAgb25Xb3JrZmxvd1NlbGVjdGVkKHdvcmtmbG93KSB7XG4gICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93ID0gd29ya2Zsb3c7XG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuICAgIHRoaXMuaXNXb3JrZmxvd09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5Xb3JrZmxvd0lucHV0ID0gdHJ1ZTtcbiAgfVxuXG4gIG9uV29ya2Zsb3dTdWJtaXQoKSB7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JvdEFsbENoYXQnKTtcbiAgICBpZiAodGhpcy53b3JrZmxvd0Zvcm0udmFsaWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMud29ya2Zsb3dGb3JtLnZhbHVlKTtcblxuICAgICAgdmFyIGlucHV0ID0gdGhpcy5wcmVwYXJlSHRtbChcbiAgICAgICAgdGhpcy5nZW5lcmF0ZU1hcmtkb3duKFxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5OYW1lLFxuICAgICAgICAgIHRoaXMud29ya2Zsb3dGb3JtLnZhbHVlLFxuICAgICAgICApLFxuICAgICAgKTtcblxuICAgICAgLy8gdXBkYXRlIGxhc3QgdHdvIGNoYXRMb2cgZW50cmllcywgc2V0IHNob3dXb3JrZmxvd0V4ZWN1dGlvbkxvYWRlciA9IGZhbHNlXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDFdWydzaG93V29ya2Zsb3dFeGVjdXRpb25Mb2FkZXInXSA9XG4gICAgICAgICAgZmFsc2U7XG4gICAgICAgIHRoaXMuY2hhdExvZ1t0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMl1bJ3Nob3dXb3JrZmxvd0V4ZWN1dGlvbkxvYWRlciddID1cbiAgICAgICAgICBmYWxzZTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuXG4gICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XG4gICAgICAgIHR5cGU6ICd1c2VyJyxcbiAgICAgICAgbWVzc2FnZTogaW5wdXQsXG4gICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgY29waWVkOiBmYWxzZSxcbiAgICAgICAgaXNDb2xsYXBzZWRUcnVlOiBmYWxzZSxcbiAgICAgICAgc2hvd1dvcmtmbG93RXhlY3V0aW9uTG9hZGVyOiB0cnVlLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKGlucHV0KTtcblxuICAgICAgdGhpcy5jdXJyZW50V29ya2Zsb3dBY3Rpb25Qcm9ncmVzcyA9IDA7XG4gICAgICB0aGlzLmN1cnJlbnRXb3JrZmxvd0FjdGlvbiA9XG4gICAgICAgICdFeGVjdXRpbmcgJyArIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5BY3Rpb25zWzBdLk5hbWU7XG4gICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IHRydWU7XG4gICAgICB0aGlzLmV4ZWN1dGluZ1dvcmtmbG93ID0gdHJ1ZTtcbiAgICAgIHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzID0ge1xuICAgICAgICBBY3Rpb25zOiB0aGlzLnNlbGVjdGVkV29ya2Zsb3cuQWN0aW9ucyxcbiAgICAgICAgSW5wdXRzOiB0aGlzLndvcmtmbG93Rm9ybS52YWx1ZSxcbiAgICAgICAgd29ya2Zsb3dJbnB1dHM6IHRoaXMud29ya2Zsb3dGb3JtLnZhbHVlLFxuICAgICAgICBXb3JrZmxvd05hbWU6IHRoaXMuc2VsZWN0ZWRXb3JrZmxvdy5OYW1lLFxuICAgICAgfTtcbiAgICAgIHRoaXMuY3VycmVudFdvcmtmbG93RXhlY3V0aW9uRGV0YWlscyA9IHRoaXMud29ya2Zsb3dFeGVjdXRpb25EZXRhaWxzO1xuICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuXG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIC8vIGV4ZWN1dGUgdGhlIGFzayBlbmRwb2ludCB3aXRoIHdvcmtmbG93IGlucHV0XG4gICAgICB0aGlzLm1ha2VBc2tSZXF1ZXN0KFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgdGhpcy5hZ2VudHMsXG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uS2V5LFxuICAgICAgICAnJyxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93WydfaWQnXSxcbiAgICAgICAgdGhpcy53b3JrZmxvd0Zvcm0udmFsdWUsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG1ha2VBc2tSZXF1ZXN0KFxuICAgIGlucHV0TXNnOiBzdHJpbmcsXG4gICAgYWdlbnRzOiBhbnlbXSxcbiAgICBjb252ZXJzYXRpb25JZDogc3RyaW5nLFxuICAgIG1zZz86IGFueSxcbiAgICBjaGF0PzogYW55LFxuICAgIHdvcmtmbG93SWQ/OiBzdHJpbmcsXG4gICAgd29ya2Zsb3dfaW5wdXRzPzogYW55LFxuICApOiB2b2lkIHtcbiAgICB2YXIgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vYWkvYXNrYDtcblxuICAgIHZhciBib2R5ID0ge1xuICAgICAgdXNlcl9xdWVzdGlvbjogaW5wdXRNc2csXG4gICAgICB1c2VyX2lkOiB0aGlzLnVzZXJJZCxcbiAgICAgIGJvdF9pZDogdGhpcy5ib3RJZCxcbiAgICAgIG1lc3NhZ2VfaWQ6IHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZW5lcmF0ZUtleSgpLFxuICAgICAgc2Vzc2lvbl9pZDogdGhpcy5jb25TZXNzaW9uS2V5LFxuICAgICAgYWdlbnRzOiBhZ2VudHM/LmZpbHRlcigocCkgPT4gcC5zZWxlY3RlZCkubWFwKChwKSA9PiBwLmlkKSA/PyBbXSxcbiAgICAgIGNvbnZlcnNhdGlvbl9pZDogY29udmVyc2F0aW9uSWQsXG4gICAgICBmaXJzdF9uYW1lOiB0aGlzLmZpcnN0TmFtZSxcbiAgICAgIGxhc3RfbmFtZTogdGhpcy5sYXN0TmFtZSxcbiAgICB9O1xuXG4gICAgaWYgKHdvcmtmbG93SWQpIHtcbiAgICAgIGJvZHlbJ3dvcmtmbG93X2lkJ10gPSB3b3JrZmxvd0lkO1xuICAgICAgYm9keVsnd29ya2Zsb3dfaW5wdXRzJ10gPSB3b3JrZmxvd19pbnB1dHM7XG4gICAgfVxuXG4gICAgY29uc3QgaGVhZGVyczogYW55ID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIHRoaXMuczI3VG9rZW4sXG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXG4gICAgICAnaGl2ZS1ib3QtaWQnOiB0aGlzLmJvdElkLFxuICAgICAgJ2RvbWFpbi1hdXRob3JpdHknOiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlLFxuICAgICAgZXZlbnRVcmw6IHRoaXMuZXZlbnRVcmwsXG4gICAgICBldmVudFRva2VuOiB0aGlzLmV2ZW50VG9rZW4sXG4gICAgfTtcblxuICAgIGlmICh0aGlzLndvcmtzcGFjZVRva2VuKSB7XG4gICAgICBoZWFkZXJzWyd3b3Jrc3BhY2VUb2tlbiddID0gdGhpcy53b3Jrc3BhY2VUb2tlbjtcbiAgICB9XG5cbiAgICBmZXRjaCh1cmwsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KGJvZHkpLFxuICAgIH0pXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAzKSB7XG4gICAgICAgICAgdGhpcy5pczQwMSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5yZWZyZXNoVG9rZW4uZW1pdCgpO1xuXG4gICAgICAgICAgLy8gSWYgYG1zZ2AgYW5kIGBjaGF0YCBleGlzdCwgaGFuZGxlIHRoZW1cbiAgICAgICAgICBpZiAobXNnICYmIGNoYXQpIHtcbiAgICAgICAgICAgIHRoaXMubXNnID0gbXNnO1xuICAgICAgICAgICAgdGhpcy5jaGF0ID0gY2hhdDtcbiAgICAgICAgICAgIHRoaXMuaXNGZXRjaERhdGFGb3IgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmlzNDAxID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgLy8gQWRkaXRpb25hbCByZXNwb25zZSBoYW5kbGluZyBpZiBuZWVkZWRcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjogJywgZXJyKTtcbiAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IG51bGw7XG4gICAgdGhpcy5vcGVuV29ya2Zsb3dJbnB1dCA9IGZhbHNlO1xuICAgIHRoaXMuaXNXb3JrZmxvd09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBtYWtlQXNrUmVxdWVzdG9sZChcbiAgICBpbnB1dE1zZzogc3RyaW5nLFxuICAgIGFnZW50czogYW55W10sXG4gICAgY29udmVyc2F0aW9uSWQ6IHN0cmluZyxcbiAgICBtc2c/OiBhbnksXG4gICAgY2hhdD86IGFueSxcbiAgICB3b3JrZmxvd0lkPzogc3RyaW5nLFxuICAgIHdvcmtmbG93X2lucHV0cz86IGFueSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vYWkvYXNrYDtcblxuICAgIGNvbnN0IGJvZHk6IGFueSA9IHtcbiAgICAgIHVzZXJfcXVlc3Rpb246IGlucHV0TXNnLFxuICAgICAgdXNlcl9pZDogdGhpcy51c2VySWQsXG4gICAgICBib3RfaWQ6IHRoaXMuYm90SWQsXG4gICAgICBtZXNzYWdlX2lkOiB0aGlzLmNvbnZlcnNhdGlvblNlcnZpY2UuZ2VuZXJhdGVLZXkoKSxcbiAgICAgIGFnZW50czogYWdlbnRzPy5maWx0ZXIoKHApID0+IHAuc2VsZWN0ZWQpLm1hcCgocCkgPT4gcC5pZCkgPz8gW10sXG4gICAgICBjb252ZXJzYXRpb25faWQ6IGNvbnZlcnNhdGlvbklkLFxuICAgICAgZmlyc3RfbmFtZTogdGhpcy5maXJzdE5hbWUsXG4gICAgICBsYXN0X25hbWU6IHRoaXMubGFzdE5hbWUsXG4gICAgfTtcblxuICAgIGlmICh3b3JrZmxvd0lkKSB7XG4gICAgICBib2R5Wyd3b3JrZmxvd19pZCddID0gd29ya2Zsb3dJZDtcbiAgICAgIGJvZHlbJ3dvcmtmbG93X2lucHV0cyddID0gd29ya2Zsb3dfaW5wdXRzO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcbiAgICAgICdoaXZlLWJvdC1pZCc6IHRoaXMuYm90SWQsXG4gICAgICAnZG9tYWluLWF1dGhvcml0eSc6IHRoaXMuZG9tYWluQXV0aG9yaXR5VmFsdWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmh0dHAucG9zdCh1cmwsIGJvZHksIHsgaGVhZGVycyB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGRhdGEpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIC8vIEFkZGl0aW9uYWwgcmVzcG9uc2UgaGFuZGxpbmcgaWYgbmVlZGVkXG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6ICcsIGVycik7XG4gICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMuc2VsZWN0ZWRXb3JrZmxvdyA9IG51bGw7XG4gICAgdGhpcy5vcGVuV29ya2Zsb3dJbnB1dCA9IGZhbHNlO1xuICAgIHRoaXMuaXNXb3JrZmxvd09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBnZW5lcmF0ZU1hcmtkb3duKHRpdGxlLCBvYmopIHtcbiAgICAvLyBJbml0aWFsaXplIG1hcmtkb3duIHdpdGggdGhlIHRpdGxlXG4gICAgbGV0IG1hcmtkb3duID0gYCMjICR7dGl0bGV9XFxuYDtcblxuICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgb2JqZWN0IGFuZCBhcHBlbmQgdGhlIGZpZWxkIG5hbWVzIGFuZCB2YWx1ZXNcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgICB2YXIga2V5X2xhYmVsID1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFdvcmtmbG93LlRyaWdnZXIuSW5wdXRTY2hlbWEuZmluZChcbiAgICAgICAgICAoaW5wdXQpID0+IGlucHV0LklucHV0SWQgPT09IGtleSxcbiAgICAgICAgKT8uTGFiZWwgfHwga2V5O1xuICAgICAgbWFya2Rvd24gKz0gYC0gKioke2tleV9sYWJlbH0qKjogJHt2YWx1ZX1cXG5gO1xuICAgIH1cblxuICAgIHJldHVybiBtYXJrZG93bjtcbiAgfVxuXG4gIHNob3dXb3JrZmxvd0hpc3RvcnlEZXRhaWxzKHdvcmtmbG93X2lkKSB7XG4gICAgaWYgKCF3b3JrZmxvd19pZCkge1xuICAgICAgdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB0aGlzLmN1cnJlbnRXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHM7XG4gICAgICB0aGlzLnNob3dXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuYm90U2VydmljZS5nZXRXb3JrZmxvd0V4ZWN1dGlvbkJ5SWQod29ya2Zsb3dfaWQpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzICYmIHJlcy5BY3Rpb25zICYmIEFycmF5LmlzQXJyYXkocmVzLkFjdGlvbnMpKSB7XG4gICAgICAgIHJlcy5BY3Rpb25zID0gcmVzLkFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgICBpZiAoYWN0aW9uLkluc2VydFRpbWVTdGFtcCkge1xuICAgICAgICAgICAgYWN0aW9uLkluc2VydFRpbWVTdGFtcCA9IGZvcm1hdFRpbWVTdGFtcHMoXG4gICAgICAgICAgICAgIHRoaXMudGltZXpvbmUsXG4gICAgICAgICAgICAgIGFjdGlvbi5JbnNlcnRUaW1lU3RhbXAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWN0aW9uO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVzLkluc2VydFRpbWVTdGFtcCA9IGZvcm1hdFRpbWVTdGFtcHMoXG4gICAgICAgIHRoaXMudGltZXpvbmUsXG4gICAgICAgIHJlcy5JbnNlcnRUaW1lU3RhbXAsXG4gICAgICApO1xuICAgICAgdGhpcy53b3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSByZXM7XG4gICAgICB0aGlzLnNob3dXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgY2xvc2VNb2RhbCgpIHtcbiAgICB0aGlzLnNob3dXb3JrZmxvd0V4ZWN1dGlvbkRldGFpbHMgPSBmYWxzZTtcbiAgfVxuXG4gIG9iamVjdFRvQXJyYXkob2JqOiBhbnkpOiBhbnlbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKChrZXkpID0+ICh7IGtleSwgdmFsdWU6IG9ialtrZXldIH0pKTtcbiAgfVxuXG4gIHN0YXJ0TmV3Q29udmVyc2F0aW9uKCkge1xuICAgIHRoaXMuY29udmVyc2F0aW9uS2V5ID0gdGhpcy5jb252ZXJzYXRpb25TZXJ2aWNlLmdldEtleSh0aGlzLmJvdElkLCB0cnVlKTtcbiAgICB0aGlzLmNoYXRMb2cgPSBbdGhpcy5jaGF0TG9nWzBdXTtcbiAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xuICAgIHRoaXMuY2hhdFNvY2tldEluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmVuc3VyZUNoYXRTb2NrZXQoKTtcbiAgICB9LCAyMDApO1xuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBpbml0aWFsaXplU3BlZWNoUmVjb2duaXplcih0b2tlbjogc3RyaW5nKSB7XG4gICAgdGhpcy5zcGVlY2hDb25maWcgPSBTcGVlY2hTREsuU3BlZWNoQ29uZmlnLmZyb21BdXRob3JpemF0aW9uVG9rZW4oXG4gICAgICB0b2tlbixcbiAgICAgIHRoaXMucmVnaW9uLFxuICAgICk7XG4gICAgY29uc3QgYXVkaW9Db25maWcgPSBTcGVlY2hTREsuQXVkaW9Db25maWcuZnJvbURlZmF1bHRNaWNyb3Bob25lSW5wdXQoKTtcbiAgICB0aGlzLnJlY29nbml6ZXIgPSBuZXcgU3BlZWNoU0RLLlNwZWVjaFJlY29nbml6ZXIoXG4gICAgICB0aGlzLnNwZWVjaENvbmZpZyxcbiAgICAgIGF1ZGlvQ29uZmlnLFxuICAgICk7XG5cbiAgICB0aGlzLnJlY29nbml6ZXIucmVjb2duaXppbmcgPSAocywgZSkgPT4ge1xuICAgICAgaWYgKGUucmVzdWx0LnJlYXNvbiA9PT0gU3BlZWNoU0RLLlJlc3VsdFJlYXNvbi5SZWNvZ25pemluZ1NwZWVjaCkge1xuICAgICAgICB0aGlzLmlucHV0ID0gZS5yZXN1bHQudGV4dDtcbiAgICAgICAgY29uc29sZS5sb2coYFJlY29nbml6aW5nOiAke2UucmVzdWx0LnRleHR9YCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnJlY29nbml6ZXIucmVjb2duaXplZCA9IChzLCBlKSA9PiB7XG4gICAgICBpZiAoZS5yZXN1bHQucmVhc29uID09PSBTcGVlY2hTREsuUmVzdWx0UmVhc29uLlJlY29nbml6ZWRTcGVlY2gpIHtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGUucmVzdWx0LnRleHQ7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZWNvZ25pemVkOiAke2UucmVzdWx0LnRleHR9YCk7XG4gICAgICAgIHRoaXMudG9nZ2xlUmVjb3JkaW5nKCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnJlY29nbml6ZXIuY2FuY2VsZWQgPSAocywgZSkgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignQ2FuY2VsZWQ6ICcsIGUuZXJyb3JEZXRhaWxzKTtcbiAgICB9O1xuXG4gICAgdGhpcy5yZWNvZ25pemVyLnNlc3Npb25TdG9wcGVkID0gKHMsIGUpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdTZXNzaW9uIHN0b3BwZWQuJyk7XG4gICAgICB0aGlzLnJlY29nbml6ZXIuc3RvcENvbnRpbnVvdXNSZWNvZ25pdGlvbkFzeW5jKCk7XG4gICAgICB0aGlzLmZldGNoRGF0YSgpO1xuICAgIH07XG4gIH1cblxuICB0b2dnbGVSZWNvcmRpbmcoKSB7XG4gICAgdGhpcy5pc1JlY29yZGluZyA9ICF0aGlzLmlzUmVjb3JkaW5nO1xuXG4gICAgaWYgKHRoaXMuaXNSZWNvcmRpbmcpIHtcbiAgICAgIHRoaXMuc3RhcnRSZWNvZ25pdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3BSZWNvZ25pdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0UmVjb2duaXRpb24oKSB7XG4gICAgdGhpcy5yZWNvZ25pemVyLnN0YXJ0Q29udGludW91c1JlY29nbml0aW9uQXN5bmMoKTtcbiAgfVxuXG4gIHN0b3BSZWNvZ25pdGlvbigpIHtcbiAgICB0aGlzLnJlY29nbml6ZXIuc3RvcENvbnRpbnVvdXNSZWNvZ25pdGlvbkFzeW5jKCk7XG4gIH1cblxuICBjaGVja0ZvckNvcDI5Qm90SWQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYm90SWQgPT0gJzY2ZmEzZjI3NmM1ZDcxZTI3MTdiZmVhOCcgfHxcbiAgICAgIHRoaXMuYm90SWQgPT0gJzY3MTYzMzU0NTY1MmRkNzhlZmVjODQ4ZCdcbiAgICApO1xuICB9XG5cbiAgZ2V0TGF0ZXN0VGltZSh0aW1lKTogc3RyaW5nIHtcbiAgICBpZiAodGltZSkge1xuICAgICAgcmV0dXJuIHRpbWU7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZSgpLnRvTG9jYWxlVGltZVN0cmluZyhbXSwge1xuICAgICAgaG91cjogJzItZGlnaXQnLFxuICAgICAgbWludXRlOiAnMi1kaWdpdCcsXG4gICAgfSk7IC8vIHJldHVybnMgY3VycmVudCB0aW1lIGluICdzaG9ydFRpbWUnIGZvcm1hdFxuICB9XG5cbiAgLyoqIFVzZWQgYnkgdGhlIHZvaWNlIG1vZGFsIHdoZW4gb3BlbmVkIGZyb20gdGhpcyBkcmF3ZXIuICovXG4gIHZvaWNlTW9kYWxDb252ZXJzYXRpb25JZDogc3RyaW5nID0gJyc7XG5cbiAgb3BlblZvaWNlTW9kYWwoKTogdm9pZCB7XG4gICAgY29uc3QgY29udmVyc2F0aW9uSWQgPVxuICAgICAgdGhpcy5jb252ZXJzYXRpb25LZXkgPz9cbiAgICAgIHRoaXMuY29udmVyc2F0aW9uU2VydmljZS5nZXRLZXkodGhpcy5ib3RJZCwgZmFsc2UpID8/XG4gICAgICAnJztcbiAgICB0aGlzLnZvaWNlTW9kYWxDb252ZXJzYXRpb25JZCA9IGNvbnZlcnNhdGlvbklkO1xuICAgIHRoaXMuc2V0dXBWb2ljZVRyYW5zY3JpcHRzKCk7XG5cbiAgICAvLyBDbG9zZSBleGlzdGluZyBvdmVybGF5IGlmIGFueVxuICAgIGlmICh0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmLmRldGFjaCgpO1xuICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWc6IFZvaWNlTW9kYWxDb25maWcgPSB7XG4gICAgICBhcGlVcmw6IHRoaXMuZW52aXJvbm1lbnQ/LkJBU0VfVVJMID8/ICcnLFxuICAgICAgdG9rZW46IHRoaXMuczI3VG9rZW4gPz8gJycsXG4gICAgICBib3RJZDogdGhpcy5ib3RJZCA/PyAnJyxcbiAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgYXBpS2V5OiB0aGlzLmFwaUtleSA/PyAnJyxcbiAgICAgIGV2ZW50VG9rZW46IHRoaXMuZXZlbnRUb2tlbiA/PyAnJyxcbiAgICAgIGV2ZW50VXJsOiB0aGlzLmV2ZW50VXJsID8/ICcnLFxuICAgICAgZG9tYWluQXV0aG9yaXR5OiB0aGlzLmRvbWFpbkF1dGhvcml0eVZhbHVlID8/ICdwcm9kLWxpdGUnLFxuICAgICAgYWdlbnROYW1lOiB0aGlzLmJvdE5hbWUgfHwgJ0FJIEFzc2lzdGFudCcsXG4gICAgICBhZ2VudFJvbGU6IHRoaXMuYm90U2tpbGxzIHx8ICdBSSBBZ2VudCBTcGVjaWFsaXN0JyxcbiAgICAgIGFnZW50QXZhdGFyOiB0aGlzLmJvdEljb24sXG4gICAgfTtcblxuICAgIGNvbnN0IGNsb3NlQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZikge1xuICAgICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmLmRldGFjaCgpO1xuICAgICAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZiA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aGlzLmNsb3NlVm9pY2VNb2RhbCgpO1xuICAgIH07XG5cbiAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZShcbiAgICAgIFtcbiAgICAgICAgeyBwcm92aWRlOiBWT0lDRV9NT0RBTF9DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfSxcbiAgICAgICAgeyBwcm92aWRlOiBWT0lDRV9NT0RBTF9DTE9TRV9DQUxMQkFDSywgdXNlVmFsdWU6IGNsb3NlQ2FsbGJhY2sgfSxcbiAgICAgIF0sXG4gICAgICB0aGlzLmluamVjdG9yLFxuICAgICk7XG5cbiAgICBjb25zdCBvdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICBoYXNCYWNrZHJvcDogZmFsc2UsXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMuYmxvY2soKSxcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMub3ZlcmxheVxuICAgICAgICAucG9zaXRpb24oKVxuICAgICAgICAuZ2xvYmFsKClcbiAgICAgICAgLmJvdHRvbSgnMCcpXG4gICAgICAgIC5yaWdodCgnMCcpXG4gICAgICAgIC5sZWZ0KCcwJylcbiAgICAgICAgLnRvcCgnMCcpLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbChcbiAgICAgIFZvaWNlQWdlbnRNb2RhbENvbXBvbmVudCxcbiAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZixcbiAgICAgIGluamVjdG9yLFxuICAgICk7XG4gICAgb3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcbiAgICB0aGlzLnZvaWNlTW9kYWxPdmVybGF5UmVmID0gb3ZlcmxheVJlZjtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNsb3NlVm9pY2VNb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZikge1xuICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgIHRoaXMudm9pY2VNb2RhbE92ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgdGhpcy52b2ljZU1vZGFsT3ZlcmxheVJlZiA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuaXNWb2ljZU1vZGFsT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMudm9pY2VBZ2VudFNlcnZpY2UuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgLy8gUmVsb2FkIGNoYXQgaGlzdG9yeSB3aGVuIHZvaWNlIG1vZGFsIGNsb3NlcyAoc2FtZSBhcyBpbml0aWFsIGxvYWQpXG4gICAgdGhpcy5jaGF0TG9nID0gW107XG4gICAgdGhpcy5mZXRjaENoYXRIaXN0b3J5KCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1hcENoYXRIaXN0b3J5KHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ0Vycm9yIGZldGNoaW5nIGNoYXQgaGlzdG9yeSBhZnRlciB2b2ljZSBtb2RhbCBjbG9zZTonLFxuICAgICAgICAgIGVycixcbiAgICAgICAgKTtcbiAgICAgICAgLy8gRmFsbGJhY2s6IHNob3cgZ3JlZXRpbmcgc28gY2hhdCBpcyBub3QgZW1wdHlcbiAgICAgICAgaWYgKHRoaXMuY2hhdExvZy5sZW5ndGggPT09IDAgJiYgdGhpcy5ncmVldGluZ01zZykge1xuICAgICAgICAgIHRoaXMubWFwQ2hhdEhpc3RvcnkoeyBNZXNzYWdlczogW10gfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBWb2ljZVRyYW5zY3JpcHRzKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIGV4aXN0aW5nIHN1YnNjcmlwdGlvbnNcbiAgICB0aGlzLnZvaWNlVHJhbnNjcmlwdFN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy52b2ljZVRyYW5zY3JpcHRTdWJzY3JpcHRpb25zID0gW107XG5cbiAgICAvLyBTdWJzY3JpYmUgdG8gdXNlciB0cmFuc2NyaXB0c1xuICAgIGNvbnN0IHVzZXJTdWIgPSB0aGlzLnZvaWNlQWdlbnRTZXJ2aWNlLnVzZXJUcmFuc2NyaXB0JC5zdWJzY3JpYmUoXG4gICAgICAodHJhbnNjcmlwdCkgPT4ge1xuICAgICAgICBpZiAodHJhbnNjcmlwdC5maW5hbCAmJiB0cmFuc2NyaXB0LnRleHQudHJpbSgpKSB7XG4gICAgICAgICAgLy8gQWRkIHVzZXIgbWVzc2FnZSB0byBjaGF0XG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgdHlwZTogJ3VzZXInLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZUZvckRpc3BsYXkodHJhbnNjcmlwdC50ZXh0KSxcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcbiAgICAgICAgICAgIGNvcGllZDogZmFsc2UsXG4gICAgICAgICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIGJvdCB0cmFuc2NyaXB0c1xuICAgIGNvbnN0IGJvdFN1YiA9IHRoaXMudm9pY2VBZ2VudFNlcnZpY2UuYm90VHJhbnNjcmlwdCQuc3Vic2NyaWJlKFxuICAgICAgKHRyYW5zY3JpcHQpID0+IHtcbiAgICAgICAgaWYgKHRyYW5zY3JpcHQgJiYgdHJhbnNjcmlwdC50cmltKCkpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiBsYXN0IG1lc3NhZ2UgaXMgZnJvbSBib3QsIHVwZGF0ZSBpdCwgb3RoZXJ3aXNlIGFkZCBuZXdcbiAgICAgICAgICBjb25zdCBsYXN0TWVzc2FnZSA9IHRoaXMuY2hhdExvZ1t0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMV07XG4gICAgICAgICAgaWYgKGxhc3RNZXNzYWdlICYmIGxhc3RNZXNzYWdlLnR5cGUgPT09ICdhaScpIHtcbiAgICAgICAgICAgIGxhc3RNZXNzYWdlLm1lc3NhZ2UgPSB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheSh0cmFuc2NyaXB0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xuICAgICAgICAgICAgICB0eXBlOiAnYWknLFxuICAgICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlRm9yRGlzcGxheSh0cmFuc2NyaXB0KSxcbiAgICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxuICAgICAgICAgICAgICBjb3BpZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICBpc0NvbGxhcHNlZFRydWU6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLnZvaWNlVHJhbnNjcmlwdFN1YnNjcmlwdGlvbnMucHVzaCh1c2VyU3ViLCBib3RTdWIpO1xuICB9XG59XG5cbmV4cG9ydCB7IFZvaWNlTW9kYWxDb25maWcgfSBmcm9tICcuLi92b2ljZS1hZ2VudC92b2ljZS1tb2RhbC10b2tlbnMnO1xuIl19
|