663 lines
77 KiB
JavaScript
663 lines
77 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* Example data structure for template playground
|
|
* Contains mock data for all supported template types
|
|
*/
|
|
var EXAMPLE_DATA = {
|
|
component: {
|
|
name: 'UserProfileComponent',
|
|
file: 'src/app/components/user-profile.component.ts',
|
|
deprecated: false,
|
|
selector: 'app-user-profile',
|
|
templateUrl: './user-profile.component.html',
|
|
styleUrls: ['./user-profile.component.scss'],
|
|
description: 'Component for displaying and editing user profile information',
|
|
inputs: [
|
|
{
|
|
name: 'user',
|
|
type: 'User',
|
|
description: 'The user object to display',
|
|
line: 15,
|
|
defaultValue: 'null'
|
|
},
|
|
{
|
|
name: 'editable',
|
|
type: 'boolean',
|
|
description: 'Whether the profile can be edited',
|
|
line: 18,
|
|
defaultValue: 'false'
|
|
}
|
|
],
|
|
outputs: [
|
|
{
|
|
name: 'userUpdated',
|
|
type: 'EventEmitter<User>',
|
|
description: 'Emitted when user profile is updated',
|
|
line: 21
|
|
}
|
|
],
|
|
properties: [
|
|
{
|
|
name: 'isLoading',
|
|
type: 'boolean',
|
|
defaultValue: 'false',
|
|
description: 'Loading state indicator',
|
|
line: 25,
|
|
modifierKind: [119] // public
|
|
}
|
|
],
|
|
methods: [
|
|
{
|
|
name: 'saveProfile',
|
|
type: 'void',
|
|
description: 'Saves the user profile changes',
|
|
line: 30,
|
|
modifierKind: [119], // public
|
|
args: [
|
|
{
|
|
name: 'userData',
|
|
type: 'Partial<User>',
|
|
description: 'Updated user data'
|
|
}
|
|
]
|
|
}
|
|
],
|
|
implements: ['OnInit', 'OnDestroy'],
|
|
hostListeners: [
|
|
{
|
|
name: 'window:resize',
|
|
args: ['$event'],
|
|
argsDecorator: ['$event'],
|
|
description: 'Handle window resize events'
|
|
}
|
|
],
|
|
template: '<div class="user-profile">...</div>',
|
|
styles: ['.user-profile { padding: 1rem; }'],
|
|
readme: 'This component provides a comprehensive user profile management interface.',
|
|
navTabs: [
|
|
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
|
|
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
|
|
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' },
|
|
{ href: '#template', id: 'template', label: 'template', 'data-link': 'template' },
|
|
{ href: '#styles', id: 'styles', label: 'styles', 'data-link': 'styles' },
|
|
{ href: '#dom-tree', id: 'dom-tree', label: 'dom-tree', 'data-link': 'dom-tree' }
|
|
]
|
|
},
|
|
module: {
|
|
name: 'UserModule',
|
|
file: 'src/app/modules/user/user.module.ts',
|
|
deprecated: false,
|
|
description: 'Module containing all user-related components and services',
|
|
declarations: [
|
|
{ name: 'UserProfileComponent', type: 'component' },
|
|
{ name: 'UserListComponent', type: 'component' },
|
|
{ name: 'UserDirective', type: 'directive' }
|
|
],
|
|
imports: [
|
|
{ name: 'CommonModule', type: 'module' },
|
|
{ name: 'FormsModule', type: 'module' },
|
|
{ name: 'HttpClientModule', type: 'module' }
|
|
],
|
|
exports: [
|
|
{ name: 'UserProfileComponent', type: 'component' },
|
|
{ name: 'UserListComponent', type: 'component' }
|
|
],
|
|
providers: [
|
|
{ name: 'UserService', type: 'service' },
|
|
{ name: 'UserResolver', type: 'resolver' }
|
|
],
|
|
bootstrap: [],
|
|
graph: '<svg>...</svg>', // SVG dependency graph
|
|
navTabs: [
|
|
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
|
|
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
|
|
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
|
|
]
|
|
},
|
|
interface: {
|
|
name: 'User',
|
|
file: 'src/app/interfaces/user.interface.ts',
|
|
deprecated: false,
|
|
description: 'Interface defining the structure of a user object',
|
|
properties: [
|
|
{
|
|
name: 'id',
|
|
type: 'string',
|
|
description: 'Unique identifier for the user',
|
|
line: 3,
|
|
optional: false
|
|
},
|
|
{
|
|
name: 'email',
|
|
type: 'string',
|
|
description: 'User email address',
|
|
line: 4,
|
|
optional: false
|
|
},
|
|
{
|
|
name: 'firstName',
|
|
type: 'string',
|
|
description: 'User first name',
|
|
line: 5,
|
|
optional: true
|
|
},
|
|
{
|
|
name: 'lastName',
|
|
type: 'string',
|
|
description: 'User last name',
|
|
line: 6,
|
|
optional: true
|
|
},
|
|
{
|
|
name: 'avatar',
|
|
type: 'string',
|
|
description: 'URL to user avatar image',
|
|
line: 7,
|
|
optional: true
|
|
}
|
|
],
|
|
indexSignatures: [],
|
|
kind: 'interface',
|
|
navTabs: [
|
|
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
|
|
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
|
|
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
|
|
]
|
|
},
|
|
class: {
|
|
name: 'UserRepository',
|
|
file: 'src/app/repositories/user.repository.ts',
|
|
deprecated: false,
|
|
description: 'Repository class for managing user data operations',
|
|
constructorObj: {
|
|
name: 'constructor',
|
|
description: 'Creates an instance of UserRepository',
|
|
args: [
|
|
{
|
|
name: 'httpClient',
|
|
type: 'HttpClient',
|
|
description: 'HTTP client for API requests'
|
|
}
|
|
]
|
|
},
|
|
properties: [
|
|
{
|
|
name: 'baseUrl',
|
|
type: 'string',
|
|
defaultValue: "'/api/users'",
|
|
description: 'Base URL for user API endpoints',
|
|
line: 10,
|
|
modifierKind: [121] // private
|
|
}
|
|
],
|
|
methods: [
|
|
{
|
|
name: 'getUser',
|
|
type: 'Observable<User>',
|
|
description: 'Retrieves a user by ID',
|
|
line: 15,
|
|
modifierKind: [119], // public
|
|
args: [
|
|
{
|
|
name: 'id',
|
|
type: 'string',
|
|
description: 'User ID'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
name: 'updateUser',
|
|
type: 'Observable<User>',
|
|
description: 'Updates user information',
|
|
line: 20,
|
|
modifierKind: [119], // public
|
|
args: [
|
|
{
|
|
name: 'id',
|
|
type: 'string',
|
|
description: 'User ID'
|
|
},
|
|
{
|
|
name: 'userData',
|
|
type: 'Partial<User>',
|
|
description: 'Updated user data'
|
|
}
|
|
]
|
|
}
|
|
],
|
|
extends: ['BaseRepository'],
|
|
implements: ['UserRepositoryInterface'],
|
|
navTabs: [
|
|
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
|
|
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
|
|
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
|
|
]
|
|
},
|
|
injectable: {
|
|
name: 'UserService',
|
|
file: 'src/app/services/user.service.ts',
|
|
deprecated: false,
|
|
description: 'Service for managing user-related business logic',
|
|
properties: [
|
|
{
|
|
name: 'currentUser$',
|
|
type: 'BehaviorSubject<User | null>',
|
|
defaultValue: 'new BehaviorSubject(null)',
|
|
description: 'Observable stream of the current user',
|
|
line: 12,
|
|
modifierKind: [121] // private
|
|
}
|
|
],
|
|
methods: [
|
|
{
|
|
name: 'getCurrentUser',
|
|
type: 'Observable<User | null>',
|
|
description: 'Returns the current user as an observable',
|
|
line: 18,
|
|
modifierKind: [119] // public
|
|
},
|
|
{
|
|
name: 'login',
|
|
type: 'Observable<User>',
|
|
description: 'Authenticates a user',
|
|
line: 25,
|
|
modifierKind: [119], // public
|
|
args: [
|
|
{
|
|
name: 'credentials',
|
|
type: 'LoginCredentials',
|
|
description: 'User login credentials'
|
|
}
|
|
]
|
|
}
|
|
],
|
|
constructorObj: {
|
|
name: 'constructor',
|
|
description: 'Creates an instance of UserService',
|
|
args: [
|
|
{
|
|
name: 'userRepository',
|
|
type: 'UserRepository',
|
|
description: 'Repository for user data operations'
|
|
}
|
|
]
|
|
},
|
|
navTabs: [
|
|
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
|
|
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
|
|
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
|
|
]
|
|
},
|
|
directive: {
|
|
name: 'HighlightDirective',
|
|
file: 'src/app/directives/highlight.directive.ts',
|
|
deprecated: false,
|
|
selector: '[appHighlight]',
|
|
description: 'Directive for highlighting elements on hover',
|
|
inputs: [
|
|
{
|
|
name: 'highlightColor',
|
|
type: 'string',
|
|
description: 'Color to use for highlighting',
|
|
line: 10,
|
|
defaultValue: "'yellow'"
|
|
}
|
|
],
|
|
hostListeners: [
|
|
{
|
|
name: 'mouseenter',
|
|
args: [],
|
|
description: 'Handle mouse enter events'
|
|
},
|
|
{
|
|
name: 'mouseleave',
|
|
args: [],
|
|
description: 'Handle mouse leave events'
|
|
}
|
|
],
|
|
navTabs: [
|
|
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
|
|
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
|
|
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
|
|
]
|
|
},
|
|
pipe: {
|
|
name: 'TruncatePipe',
|
|
file: 'src/app/pipes/truncate.pipe.ts',
|
|
deprecated: false,
|
|
description: 'Pipe for truncating text to a specified length',
|
|
methods: [
|
|
{
|
|
name: 'transform',
|
|
type: 'string',
|
|
description: 'Transforms the input text by truncating it',
|
|
line: 8,
|
|
modifierKind: [119], // public
|
|
args: [
|
|
{
|
|
name: 'value',
|
|
type: 'string',
|
|
description: 'Text to truncate'
|
|
},
|
|
{
|
|
name: 'limit',
|
|
type: 'number',
|
|
description: 'Maximum length'
|
|
},
|
|
{
|
|
name: 'ellipsis',
|
|
type: 'string',
|
|
description: 'Ellipsis string to append'
|
|
}
|
|
]
|
|
}
|
|
],
|
|
implements: ['PipeTransform'],
|
|
navTabs: [
|
|
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
|
|
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
|
|
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
|
|
]
|
|
},
|
|
guard: {
|
|
name: 'AuthGuard',
|
|
file: 'src/app/guards/auth.guard.ts',
|
|
deprecated: false,
|
|
description: 'Guard for protecting routes that require authentication',
|
|
methods: [
|
|
{
|
|
name: 'canActivate',
|
|
type: 'Observable<boolean> | Promise<boolean> | boolean',
|
|
description: 'Determines if the route can be activated',
|
|
line: 12,
|
|
modifierKind: [119], // public
|
|
args: [
|
|
{
|
|
name: 'route',
|
|
type: 'ActivatedRouteSnapshot',
|
|
description: 'Current route snapshot'
|
|
},
|
|
{
|
|
name: 'state',
|
|
type: 'RouterStateSnapshot',
|
|
description: 'Current router state'
|
|
}
|
|
]
|
|
}
|
|
],
|
|
implements: ['CanActivate'],
|
|
navTabs: [
|
|
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
|
|
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
|
|
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
|
|
]
|
|
},
|
|
interceptor: {
|
|
name: 'AuthInterceptor',
|
|
file: 'src/app/interceptors/auth.interceptor.ts',
|
|
deprecated: false,
|
|
description: 'HTTP interceptor for adding authentication headers',
|
|
methods: [
|
|
{
|
|
name: 'intercept',
|
|
type: 'Observable<HttpEvent<any>>',
|
|
description: 'Intercepts HTTP requests to add auth headers',
|
|
line: 10,
|
|
modifierKind: [119], // public
|
|
args: [
|
|
{
|
|
name: 'req',
|
|
type: 'HttpRequest<any>',
|
|
description: 'HTTP request to intercept'
|
|
},
|
|
{
|
|
name: 'next',
|
|
type: 'HttpHandler',
|
|
description: 'Next handler in the chain'
|
|
}
|
|
]
|
|
}
|
|
],
|
|
implements: ['HttpInterceptor'],
|
|
navTabs: [
|
|
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
|
|
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
|
|
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
|
|
]
|
|
},
|
|
entity: {
|
|
name: 'UserEntity',
|
|
file: 'src/app/entities/user.entity.ts',
|
|
deprecated: false,
|
|
description: 'Entity class representing a user in the database',
|
|
properties: [
|
|
{
|
|
name: 'id',
|
|
type: 'string',
|
|
description: 'Primary key identifier',
|
|
line: 5,
|
|
decorators: ['@PrimaryGeneratedColumn()']
|
|
},
|
|
{
|
|
name: 'email',
|
|
type: 'string',
|
|
description: 'User email address',
|
|
line: 8,
|
|
decorators: ['@Column({ unique: true })']
|
|
}
|
|
],
|
|
decorators: ['@Entity()'],
|
|
navTabs: [
|
|
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
|
|
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
|
|
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
|
|
]
|
|
},
|
|
controller: {
|
|
name: 'UserController',
|
|
file: 'src/app/controllers/user.controller.ts',
|
|
deprecated: false,
|
|
description: 'REST controller for user operations',
|
|
methods: [
|
|
{
|
|
name: 'getUsers',
|
|
type: 'Promise<User[]>',
|
|
description: 'Get all users',
|
|
line: 12,
|
|
modifierKind: [119], // public
|
|
decorators: ['@Get()']
|
|
},
|
|
{
|
|
name: 'getUserById',
|
|
type: 'Promise<User>',
|
|
description: 'Get user by ID',
|
|
line: 18,
|
|
modifierKind: [119], // public
|
|
decorators: ['@Get(":id")'],
|
|
args: [
|
|
{
|
|
name: 'id',
|
|
type: 'string',
|
|
description: 'User ID'
|
|
}
|
|
]
|
|
}
|
|
],
|
|
decorators: ['@Controller("users")'],
|
|
navTabs: [
|
|
{ href: '#info', id: 'info', label: 'info', 'data-link': 'info' },
|
|
{ href: '#readme', id: 'readme', label: 'readme', 'data-link': 'readme' },
|
|
{ href: '#source', id: 'source', label: 'source', 'data-link': 'source' }
|
|
]
|
|
},
|
|
miscellaneous: {
|
|
variables: [
|
|
{
|
|
name: 'API_BASE_URL',
|
|
type: 'string',
|
|
defaultValue: "'https://api.example.com'",
|
|
description: 'Base URL for API endpoints',
|
|
file: 'src/app/constants/api.constants.ts'
|
|
}
|
|
],
|
|
functions: [
|
|
{
|
|
name: 'formatDate',
|
|
type: '(date: Date, format?: string) => string',
|
|
description: 'Formats a date according to the specified format',
|
|
file: 'src/app/utils/date.utils.ts'
|
|
}
|
|
],
|
|
typeAliases: [
|
|
{
|
|
name: 'UserId',
|
|
type: 'string',
|
|
description: 'Type alias for user identifier',
|
|
file: 'src/app/types/user.types.ts'
|
|
}
|
|
],
|
|
enumerations: [
|
|
{
|
|
name: 'UserRole',
|
|
description: 'Enumeration of user roles',
|
|
file: 'src/app/enums/user-role.enum.ts',
|
|
childs: [
|
|
{ name: 'ADMIN', value: 'admin' },
|
|
{ name: 'USER', value: 'user' },
|
|
{ name: 'GUEST', value: 'guest' }
|
|
]
|
|
}
|
|
]
|
|
},
|
|
overview: {
|
|
modules: [
|
|
{ name: 'AppModule', file: 'src/app/app.module.ts' },
|
|
{ name: 'UserModule', file: 'src/app/modules/user/user.module.ts' }
|
|
],
|
|
components: [
|
|
{ name: 'AppComponent', file: 'src/app/app.component.ts' },
|
|
{ name: 'UserProfileComponent', file: 'src/app/components/user-profile.component.ts' }
|
|
],
|
|
injectables: [
|
|
{ name: 'UserService', file: 'src/app/services/user.service.ts' }
|
|
],
|
|
pipes: [
|
|
{ name: 'TruncatePipe', file: 'src/app/pipes/truncate.pipe.ts' }
|
|
],
|
|
directives: [
|
|
{ name: 'HighlightDirective', file: 'src/app/directives/highlight.directive.ts' }
|
|
],
|
|
classes: [
|
|
{ name: 'UserRepository', file: 'src/app/repositories/user.repository.ts' }
|
|
],
|
|
interfaces: [
|
|
{ name: 'User', file: 'src/app/interfaces/user.interface.ts' }
|
|
],
|
|
guards: [
|
|
{ name: 'AuthGuard', file: 'src/app/guards/auth.guard.ts' }
|
|
],
|
|
interceptors: [
|
|
{ name: 'AuthInterceptor', file: 'src/app/interceptors/auth.interceptor.ts' }
|
|
]
|
|
},
|
|
index: {
|
|
modules: 2,
|
|
components: 2,
|
|
injectables: 1,
|
|
pipes: 1,
|
|
directives: 1,
|
|
classes: 1,
|
|
interfaces: 1,
|
|
guards: 1,
|
|
interceptors: 1
|
|
}
|
|
};
|
|
// Global template context that's available to all templates
|
|
var TEMPLATE_CONTEXT = {
|
|
// Translation function
|
|
t: function (key) {
|
|
var translations = {
|
|
'components': 'Components',
|
|
'modules': 'Modules',
|
|
'interfaces': 'Interfaces',
|
|
'classes': 'Classes',
|
|
'injectables': 'Injectables',
|
|
'pipes': 'Pipes',
|
|
'directives': 'Directives',
|
|
'guards': 'Guards',
|
|
'interceptors': 'Interceptors',
|
|
'entities': 'Entities',
|
|
'controllers': 'Controllers',
|
|
'info': 'Info',
|
|
'readme': 'Readme',
|
|
'source': 'Source',
|
|
'template': 'Template',
|
|
'styles': 'Styles',
|
|
'dom-tree': 'DOM Tree',
|
|
'file': 'File',
|
|
'overview': 'Overview',
|
|
'getting-started': 'Getting Started',
|
|
'properties': 'Properties',
|
|
'methods': 'Methods',
|
|
'inputs': 'Inputs',
|
|
'outputs': 'Outputs',
|
|
'accessors': 'Accessors',
|
|
'constructor': 'Constructor',
|
|
'zoomin': 'Zoom In',
|
|
'zoomout': 'Zoom Out',
|
|
'reset': 'Reset'
|
|
};
|
|
return translations[key] || key;
|
|
},
|
|
// Relative URL helper
|
|
relativeURL: function (depth) {
|
|
var args = [];
|
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
args[_i - 1] = arguments[_i];
|
|
}
|
|
var baseUrl = typeof depth === 'number' ? '../'.repeat(depth) : depth;
|
|
return baseUrl + args.join('/');
|
|
},
|
|
// Template helpers
|
|
compare: function (a, operator, b) {
|
|
switch (operator) {
|
|
case '===': return a === b;
|
|
case '!==': return a !== b;
|
|
case '==': return a == b;
|
|
case '!=': return a != b;
|
|
case '<': return a < b;
|
|
case '>': return a > b;
|
|
case '<=': return a <= b;
|
|
case '>=': return a >= b;
|
|
default: return false;
|
|
}
|
|
},
|
|
// Check if tab is enabled
|
|
isTabEnabled: function (navTabs, tabId) {
|
|
return navTabs.some(function (tab) { return tab.id === tabId; });
|
|
},
|
|
// Check if tab is initial/active
|
|
isInitialTab: function (navTabs, tabId) {
|
|
return navTabs.length > 0 && navTabs[0].id === tabId;
|
|
},
|
|
// Depth for relative URLs
|
|
depth: 0,
|
|
// Global flags
|
|
disableSearch: false,
|
|
disableGraph: false,
|
|
disableCoverage: false,
|
|
disableLifeCycleHooks: false,
|
|
disableProperties: false,
|
|
disableDomTree: false,
|
|
disableTemplateTab: false,
|
|
disableStyleTab: false,
|
|
disablePrivate: false,
|
|
disableProtected: false,
|
|
disableInternal: false
|
|
};
|
|
|
|
exports.EXAMPLE_DATA = EXAMPLE_DATA;
|
|
exports.TEMPLATE_CONTEXT = TEMPLATE_CONTEXT;
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhhbXBsZS1kYXRhLURSM3hZM1JyLmpzIiwic291cmNlcyI6WyIuLi9zcmMvdGVtcGxhdGUtcGxheWdyb3VuZC9leGFtcGxlLWRhdGEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFeGFtcGxlIGRhdGEgc3RydWN0dXJlIGZvciB0ZW1wbGF0ZSBwbGF5Z3JvdW5kXG4gKiBDb250YWlucyBtb2NrIGRhdGEgZm9yIGFsbCBzdXBwb3J0ZWQgdGVtcGxhdGUgdHlwZXNcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIEV4YW1wbGVEYXRhIHtcbiAgICBjb21wb25lbnQ6IGFueTtcbiAgICBtb2R1bGU6IGFueTtcbiAgICBpbnRlcmZhY2U6IGFueTtcbiAgICBjbGFzczogYW55O1xuICAgIGluamVjdGFibGU6IGFueTtcbiAgICBkaXJlY3RpdmU6IGFueTtcbiAgICBwaXBlOiBhbnk7XG4gICAgZ3VhcmQ6IGFueTtcbiAgICBpbnRlcmNlcHRvcjogYW55O1xuICAgIGVudGl0eTogYW55O1xuICAgIGNvbnRyb2xsZXI6IGFueTtcbiAgICBtaXNjZWxsYW5lb3VzOiBhbnk7XG4gICAgb3ZlcnZpZXc6IGFueTtcbiAgICBpbmRleDogYW55O1xufVxuXG5leHBvcnQgY29uc3QgRVhBTVBMRV9EQVRBOiBFeGFtcGxlRGF0YSA9IHtcbiAgICBjb21wb25lbnQ6IHtcbiAgICAgICAgbmFtZTogJ1VzZXJQcm9maWxlQ29tcG9uZW50JyxcbiAgICAgICAgZmlsZTogJ3NyYy9hcHAvY29tcG9uZW50cy91c2VyLXByb2ZpbGUuY29tcG9uZW50LnRzJyxcbiAgICAgICAgZGVwcmVjYXRlZDogZmFsc2UsXG4gICAgICAgIHNlbGVjdG9yOiAnYXBwLXVzZXItcHJvZmlsZScsXG4gICAgICAgIHRlbXBsYXRlVXJsOiAnLi91c2VyLXByb2ZpbGUuY29tcG9uZW50Lmh0bWwnLFxuICAgICAgICBzdHlsZVVybHM6IFsnLi91c2VyLXByb2ZpbGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdDb21wb25lbnQgZm9yIGRpc3BsYXlpbmcgYW5kIGVkaXRpbmcgdXNlciBwcm9maWxlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaW5wdXRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3VzZXInLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdVc2VyJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSB1c2VyIG9iamVjdCB0byBkaXNwbGF5JyxcbiAgICAgICAgICAgICAgICBsaW5lOiAxNSxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6ICdudWxsJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZWRpdGFibGUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgdGhlIHByb2ZpbGUgY2FuIGJlIGVkaXRlZCcsXG4gICAgICAgICAgICAgICAgbGluZTogMTgsXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAnZmFsc2UnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIG91dHB1dHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndXNlclVwZGF0ZWQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdFdmVudEVtaXR0ZXI8VXNlcj4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRW1pdHRlZCB3aGVuIHVzZXIgcHJvZmlsZSBpcyB1cGRhdGVkJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAyMVxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2lzTG9hZGluZycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ2ZhbHNlJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0xvYWRpbmcgc3RhdGUgaW5kaWNhdG9yJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAyNSxcbiAgICAgICAgICAgICAgICBtb2RpZmllcktpbmQ6IFsxMTldIC8vIHB1YmxpY1xuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBtZXRob2RzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3NhdmVQcm9maWxlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAndm9pZCcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdTYXZlcyB0aGUgdXNlciBwcm9maWxlIGNoYW5nZXMnLFxuICAgICAgICAgICAgICAgIGxpbmU6IDMwLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyS2luZDogWzExOV0sIC8vIHB1YmxpY1xuICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3VzZXJEYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQYXJ0aWFsPFVzZXI+JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXBkYXRlZCB1c2VyIGRhdGEnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGltcGxlbWVudHM6IFsnT25Jbml0JywgJ09uRGVzdHJveSddLFxuICAgICAgICBob3N0TGlzdGVuZXJzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ3dpbmRvdzpyZXNpemUnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFsnJGV2ZW50J10sXG4gICAgICAgICAgICAgICAgYXJnc0RlY29yYXRvcjogWyckZXZlbnQnXSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0hhbmRsZSB3aW5kb3cgcmVzaXplIGV2ZW50cydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwidXNlci1wcm9maWxlXCI+Li4uPC9kaXY+JyxcbiAgICAgICAgc3R5bGVzOiBbJy51c2VyLXByb2ZpbGUgeyBwYWRkaW5nOiAxcmVtOyB9J10sXG4gICAgICAgIHJlYWRtZTogJ1RoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgY29tcHJlaGVuc2l2ZSB1c2VyIHByb2ZpbGUgbWFuYWdlbWVudCBpbnRlcmZhY2UuJyxcbiAgICAgICAgbmF2VGFiczogW1xuICAgICAgICAgICAgeyBocmVmOiAnI2luZm8nLCBpZDogJ2luZm8nLCBsYWJlbDogJ2luZm8nLCAnZGF0YS1saW5rJzogJ2luZm8nIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjcmVhZG1lJywgaWQ6ICdyZWFkbWUnLCBsYWJlbDogJ3JlYWRtZScsICdkYXRhLWxpbmsnOiAncmVhZG1lJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3NvdXJjZScsIGlkOiAnc291cmNlJywgbGFiZWw6ICdzb3VyY2UnLCAnZGF0YS1saW5rJzogJ3NvdXJjZScgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyN0ZW1wbGF0ZScsIGlkOiAndGVtcGxhdGUnLCBsYWJlbDogJ3RlbXBsYXRlJywgJ2RhdGEtbGluayc6ICd0ZW1wbGF0ZScgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNzdHlsZXMnLCBpZDogJ3N0eWxlcycsIGxhYmVsOiAnc3R5bGVzJywgJ2RhdGEtbGluayc6ICdzdHlsZXMnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjZG9tLXRyZWUnLCBpZDogJ2RvbS10cmVlJywgbGFiZWw6ICdkb20tdHJlZScsICdkYXRhLWxpbmsnOiAnZG9tLXRyZWUnIH1cbiAgICAgICAgXVxuICAgIH0sXG5cbiAgICBtb2R1bGU6IHtcbiAgICAgICAgbmFtZTogJ1VzZXJNb2R1bGUnLFxuICAgICAgICBmaWxlOiAnc3JjL2FwcC9tb2R1bGVzL3VzZXIvdXNlci5tb2R1bGUudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdNb2R1bGUgY29udGFpbmluZyBhbGwgdXNlci1yZWxhdGVkIGNvbXBvbmVudHMgYW5kIHNlcnZpY2VzJyxcbiAgICAgICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdVc2VyUHJvZmlsZUNvbXBvbmVudCcsIHR5cGU6ICdjb21wb25lbnQnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdVc2VyTGlzdENvbXBvbmVudCcsIHR5cGU6ICdjb21wb25lbnQnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdVc2VyRGlyZWN0aXZlJywgdHlwZTogJ2RpcmVjdGl2ZScgfVxuICAgICAgICBdLFxuICAgICAgICBpbXBvcnRzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdDb21tb25Nb2R1bGUnLCB0eXBlOiAnbW9kdWxlJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnRm9ybXNNb2R1bGUnLCB0eXBlOiAnbW9kdWxlJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnSHR0cENsaWVudE1vZHVsZScsIHR5cGU6ICdtb2R1bGUnIH1cbiAgICAgICAgXSxcbiAgICAgICAgZXhwb3J0czogW1xuICAgICAgICAgICAgeyBuYW1lOiAnVXNlclByb2ZpbGVDb21wb25lbnQnLCB0eXBlOiAnY29tcG9uZW50JyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnVXNlckxpc3RDb21wb25lbnQnLCB0eXBlOiAnY29tcG9uZW50JyB9XG4gICAgICAgIF0sXG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnVXNlclNlcnZpY2UnLCB0eXBlOiAnc2VydmljZScgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1VzZXJSZXNvbHZlcicsIHR5cGU6ICdyZXNvbHZlcicgfVxuICAgICAgICBdLFxuICAgICAgICBib290c3RyYXA6IFtdLFxuICAgICAgICBncmFwaDogJzxzdmc+Li4uPC9zdmc+JywgLy8gU1ZHIGRlcGVuZGVuY3kgZ3JhcGhcbiAgICAgICAgbmF2VGFiczogW1xuICAgICAgICAgICAgeyBocmVmOiAnI2luZm8nLCBpZDogJ2luZm8nLCBsYWJlbDogJ2luZm8nLCAnZGF0YS1saW5rJzogJ2luZm8nIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjcmVhZG1lJywgaWQ6ICdyZWFkbWUnLCBsYWJlbDogJ3JlYWRtZScsICdkYXRhLWxpbmsnOiAncmVhZG1lJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3NvdXJjZScsIGlkOiAnc291cmNlJywgbGFiZWw6ICdzb3VyY2UnLCAnZGF0YS1saW5rJzogJ3NvdXJjZScgfVxuICAgICAgICBdXG4gICAgfSxcblxuICAgIGludGVyZmFjZToge1xuICAgICAgICBuYW1lOiAnVXNlcicsXG4gICAgICAgIGZpbGU6ICdzcmMvYXBwL2ludGVyZmFjZXMvdXNlci5pbnRlcmZhY2UudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdJbnRlcmZhY2UgZGVmaW5pbmcgdGhlIHN0cnVjdHVyZSBvZiBhIHVzZXIgb2JqZWN0JyxcbiAgICAgICAgcHJvcGVydGllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHVzZXInLFxuICAgICAgICAgICAgICAgIGxpbmU6IDMsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdlbWFpbCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGVtYWlsIGFkZHJlc3MnLFxuICAgICAgICAgICAgICAgIGxpbmU6IDQsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWw6IGZhbHNlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdmaXJzdE5hbWUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBmaXJzdCBuYW1lJyxcbiAgICAgICAgICAgICAgICBsaW5lOiA1LFxuICAgICAgICAgICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdsYXN0TmFtZScsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGxhc3QgbmFtZScsXG4gICAgICAgICAgICAgICAgbGluZTogNixcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnYXZhdGFyJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VSTCB0byB1c2VyIGF2YXRhciBpbWFnZScsXG4gICAgICAgICAgICAgICAgbGluZTogNyxcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbmRleFNpZ25hdHVyZXM6IFtdLFxuICAgICAgICBraW5kOiAnaW50ZXJmYWNlJyxcbiAgICAgICAgbmF2VGFiczogW1xuICAgICAgICAgICAgeyBocmVmOiAnI2luZm8nLCBpZDogJ2luZm8nLCBsYWJlbDogJ2luZm8nLCAnZGF0YS1saW5rJzogJ2luZm8nIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjcmVhZG1lJywgaWQ6ICdyZWFkbWUnLCBsYWJlbDogJ3JlYWRtZScsICdkYXRhLWxpbmsnOiAncmVhZG1lJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3NvdXJjZScsIGlkOiAnc291cmNlJywgbGFiZWw6ICdzb3VyY2UnLCAnZGF0YS1saW5rJzogJ3NvdXJjZScgfVxuICAgICAgICBdXG4gICAgfSxcblxuICAgIGNsYXNzOiB7XG4gICAgICAgIG5hbWU6ICdVc2VyUmVwb3NpdG9yeScsXG4gICAgICAgIGZpbGU6ICdzcmMvYXBwL3JlcG9zaXRvcmllcy91c2VyLnJlcG9zaXRvcnkudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZXBvc2l0b3J5IGNsYXNzIGZvciBtYW5hZ2luZyB1c2VyIGRhdGEgb3BlcmF0aW9ucycsXG4gICAgICAgIGNvbnN0cnVjdG9yT2JqOiB7XG4gICAgICAgICAgICBuYW1lOiAnY29uc3RydWN0b3InLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFVzZXJSZXBvc2l0b3J5JyxcbiAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdodHRwQ2xpZW50JyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0h0dHBDbGllbnQnLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0hUVFAgY2xpZW50IGZvciBBUEkgcmVxdWVzdHMnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2Jhc2VVcmwnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogXCInL2FwaS91c2VycydcIixcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Jhc2UgVVJMIGZvciB1c2VyIEFQSSBlbmRwb2ludHMnLFxuICAgICAgICAgICAgICAgIGxpbmU6IDEwLFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyS2luZDogWzEyMV0gLy8gcHJpdmF0ZVxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBtZXRob2RzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2dldFVzZXInLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPYnNlcnZhYmxlPFVzZXI+JyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JldHJpZXZlcyBhIHVzZXIgYnkgSUQnLFxuICAgICAgICAgICAgICAgIGxpbmU6IDE1LFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyS2luZDogWzExOV0sIC8vIHB1YmxpY1xuICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIElEJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAndXBkYXRlVXNlcicsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09ic2VydmFibGU8VXNlcj4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXBkYXRlcyB1c2VyIGluZm9ybWF0aW9uJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAyMCxcbiAgICAgICAgICAgICAgICBtb2RpZmllcktpbmQ6IFsxMTldLCAvLyBwdWJsaWNcbiAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBJRCdcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3VzZXJEYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQYXJ0aWFsPFVzZXI+JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXBkYXRlZCB1c2VyIGRhdGEnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGV4dGVuZHM6IFsnQmFzZVJlcG9zaXRvcnknXSxcbiAgICAgICAgaW1wbGVtZW50czogWydVc2VyUmVwb3NpdG9yeUludGVyZmFjZSddLFxuICAgICAgICBuYXZUYWJzOiBbXG4gICAgICAgICAgICB7IGhyZWY6ICcjaW5mbycsIGlkOiAnaW5mbycsIGxhYmVsOiAnaW5mbycsICdkYXRhLWxpbmsnOiAnaW5mbycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNyZWFkbWUnLCBpZDogJ3JlYWRtZScsIGxhYmVsOiAncmVhZG1lJywgJ2RhdGEtbGluayc6ICdyZWFkbWUnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjc291cmNlJywgaWQ6ICdzb3VyY2UnLCBsYWJlbDogJ3NvdXJjZScsICdkYXRhLWxpbmsnOiAnc291cmNlJyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgaW5qZWN0YWJsZToge1xuICAgICAgICBuYW1lOiAnVXNlclNlcnZpY2UnLFxuICAgICAgICBmaWxlOiAnc3JjL2FwcC9zZXJ2aWNlcy91c2VyLnNlcnZpY2UudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdTZXJ2aWNlIGZvciBtYW5hZ2luZyB1c2VyLXJlbGF0ZWQgYnVzaW5lc3MgbG9naWMnLFxuICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2N1cnJlbnRVc2VyJCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ0JlaGF2aW9yU3ViamVjdDxVc2VyIHwgbnVsbD4nLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ25ldyBCZWhhdmlvclN1YmplY3QobnVsbCknLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnT2JzZXJ2YWJsZSBzdHJlYW0gb2YgdGhlIGN1cnJlbnQgdXNlcicsXG4gICAgICAgICAgICAgICAgbGluZTogMTIsXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJLaW5kOiBbMTIxXSAvLyBwcml2YXRlXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIG1ldGhvZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZ2V0Q3VycmVudFVzZXInLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPYnNlcnZhYmxlPFVzZXIgfCBudWxsPicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBjdXJyZW50IHVzZXIgYXMgYW4gb2JzZXJ2YWJsZScsXG4gICAgICAgICAgICAgICAgbGluZTogMTgsXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJLaW5kOiBbMTE5XSAvLyBwdWJsaWNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2xvZ2luJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnT2JzZXJ2YWJsZTxVc2VyPicsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdBdXRoZW50aWNhdGVzIGEgdXNlcicsXG4gICAgICAgICAgICAgICAgbGluZTogMjUsXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJLaW5kOiBbMTE5XSwgLy8gcHVibGljXG4gICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnY3JlZGVudGlhbHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0xvZ2luQ3JlZGVudGlhbHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdVc2VyIGxvZ2luIGNyZWRlbnRpYWxzJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBjb25zdHJ1Y3Rvck9iajoge1xuICAgICAgICAgICAgbmFtZTogJ2NvbnN0cnVjdG9yJyxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBVc2VyU2VydmljZScsXG4gICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAndXNlclJlcG9zaXRvcnknLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnVXNlclJlcG9zaXRvcnknLFxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1JlcG9zaXRvcnkgZm9yIHVzZXIgZGF0YSBvcGVyYXRpb25zJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgbmF2VGFiczogW1xuICAgICAgICAgICAgeyBocmVmOiAnI2luZm8nLCBpZDogJ2luZm8nLCBsYWJlbDogJ2luZm8nLCAnZGF0YS1saW5rJzogJ2luZm8nIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjcmVhZG1lJywgaWQ6ICdyZWFkbWUnLCBsYWJlbDogJ3JlYWRtZScsICdkYXRhLWxpbmsnOiAncmVhZG1lJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3NvdXJjZScsIGlkOiAnc291cmNlJywgbGFiZWw6ICdzb3VyY2UnLCAnZGF0YS1saW5rJzogJ3NvdXJjZScgfVxuICAgICAgICBdXG4gICAgfSxcblxuICAgIGRpcmVjdGl2ZToge1xuICAgICAgICBuYW1lOiAnSGlnaGxpZ2h0RGlyZWN0aXZlJyxcbiAgICAgICAgZmlsZTogJ3NyYy9hcHAvZGlyZWN0aXZlcy9oaWdobGlnaHQuZGlyZWN0aXZlLnRzJyxcbiAgICAgICAgZGVwcmVjYXRlZDogZmFsc2UsXG4gICAgICAgIHNlbGVjdG9yOiAnW2FwcEhpZ2hsaWdodF0nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0RpcmVjdGl2ZSBmb3IgaGlnaGxpZ2h0aW5nIGVsZW1lbnRzIG9uIGhvdmVyJyxcbiAgICAgICAgaW5wdXRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2hpZ2hsaWdodENvbG9yJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0NvbG9yIHRvIHVzZSBmb3IgaGlnaGxpZ2h0aW5nJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAxMCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IFwiJ3llbGxvdydcIlxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBob3N0TGlzdGVuZXJzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ21vdXNlZW50ZXInLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSGFuZGxlIG1vdXNlIGVudGVyIGV2ZW50cydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ21vdXNlbGVhdmUnLFxuICAgICAgICAgICAgICAgIGFyZ3M6IFtdLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnSGFuZGxlIG1vdXNlIGxlYXZlIGV2ZW50cydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgbmF2VGFiczogW1xuICAgICAgICAgICAgeyBocmVmOiAnI2luZm8nLCBpZDogJ2luZm8nLCBsYWJlbDogJ2luZm8nLCAnZGF0YS1saW5rJzogJ2luZm8nIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjcmVhZG1lJywgaWQ6ICdyZWFkbWUnLCBsYWJlbDogJ3JlYWRtZScsICdkYXRhLWxpbmsnOiAncmVhZG1lJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3NvdXJjZScsIGlkOiAnc291cmNlJywgbGFiZWw6ICdzb3VyY2UnLCAnZGF0YS1saW5rJzogJ3NvdXJjZScgfVxuICAgICAgICBdXG4gICAgfSxcblxuICAgIHBpcGU6IHtcbiAgICAgICAgbmFtZTogJ1RydW5jYXRlUGlwZScsXG4gICAgICAgIGZpbGU6ICdzcmMvYXBwL3BpcGVzL3RydW5jYXRlLnBpcGUudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdQaXBlIGZvciB0cnVuY2F0aW5nIHRleHQgdG8gYSBzcGVjaWZpZWQgbGVuZ3RoJyxcbiAgICAgICAgbWV0aG9kczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVHJhbnNmb3JtcyB0aGUgaW5wdXQgdGV4dCBieSB0cnVuY2F0aW5nIGl0JyxcbiAgICAgICAgICAgICAgICBsaW5lOiA4LFxuICAgICAgICAgICAgICAgIG1vZGlmaWVyS2luZDogWzExOV0sIC8vIHB1YmxpY1xuICAgICAgICAgICAgICAgIGFyZ3M6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3ZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdUZXh0IHRvIHRydW5jYXRlJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbGltaXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ01heGltdW0gbGVuZ3RoJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZWxsaXBzaXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0VsbGlwc2lzIHN0cmluZyB0byBhcHBlbmQnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGltcGxlbWVudHM6IFsnUGlwZVRyYW5zZm9ybSddLFxuICAgICAgICBuYXZUYWJzOiBbXG4gICAgICAgICAgICB7IGhyZWY6ICcjaW5mbycsIGlkOiAnaW5mbycsIGxhYmVsOiAnaW5mbycsICdkYXRhLWxpbmsnOiAnaW5mbycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNyZWFkbWUnLCBpZDogJ3JlYWRtZScsIGxhYmVsOiAncmVhZG1lJywgJ2RhdGEtbGluayc6ICdyZWFkbWUnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjc291cmNlJywgaWQ6ICdzb3VyY2UnLCBsYWJlbDogJ3NvdXJjZScsICdkYXRhLWxpbmsnOiAnc291cmNlJyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgZ3VhcmQ6IHtcbiAgICAgICAgbmFtZTogJ0F1dGhHdWFyZCcsXG4gICAgICAgIGZpbGU6ICdzcmMvYXBwL2d1YXJkcy9hdXRoLmd1YXJkLnRzJyxcbiAgICAgICAgZGVwcmVjYXRlZDogZmFsc2UsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR3VhcmQgZm9yIHByb3RlY3Rpbmcgcm91dGVzIHRoYXQgcmVxdWlyZSBhdXRoZW50aWNhdGlvbicsXG4gICAgICAgIG1ldGhvZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2FuQWN0aXZhdGUnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdPYnNlcnZhYmxlPGJvb2xlYW4+IHwgUHJvbWlzZTxib29sZWFuPiB8IGJvb2xlYW4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRGV0ZXJtaW5lcyBpZiB0aGUgcm91dGUgY2FuIGJlIGFjdGl2YXRlZCcsXG4gICAgICAgICAgICAgICAgbGluZTogMTIsXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJLaW5kOiBbMTE5XSwgLy8gcHVibGljXG4gICAgICAgICAgICAgICAgYXJnczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAncm91dGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0FjdGl2YXRlZFJvdXRlU25hcHNob3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDdXJyZW50IHJvdXRlIHNuYXBzaG90J1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnc3RhdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1JvdXRlclN0YXRlU25hcHNob3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdDdXJyZW50IHJvdXRlciBzdGF0ZSdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaW1wbGVtZW50czogWydDYW5BY3RpdmF0ZSddLFxuICAgICAgICBuYXZUYWJzOiBbXG4gICAgICAgICAgICB7IGhyZWY6ICcjaW5mbycsIGlkOiAnaW5mbycsIGxhYmVsOiAnaW5mbycsICdkYXRhLWxpbmsnOiAnaW5mbycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNyZWFkbWUnLCBpZDogJ3JlYWRtZScsIGxhYmVsOiAncmVhZG1lJywgJ2RhdGEtbGluayc6ICdyZWFkbWUnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjc291cmNlJywgaWQ6ICdzb3VyY2UnLCBsYWJlbDogJ3NvdXJjZScsICdkYXRhLWxpbmsnOiAnc291cmNlJyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgaW50ZXJjZXB0b3I6IHtcbiAgICAgICAgbmFtZTogJ0F1dGhJbnRlcmNlcHRvcicsXG4gICAgICAgIGZpbGU6ICdzcmMvYXBwL2ludGVyY2VwdG9ycy9hdXRoLmludGVyY2VwdG9yLnRzJyxcbiAgICAgICAgZGVwcmVjYXRlZDogZmFsc2UsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnSFRUUCBpbnRlcmNlcHRvciBmb3IgYWRkaW5nIGF1dGhlbnRpY2F0aW9uIGhlYWRlcnMnLFxuICAgICAgICBtZXRob2RzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2ludGVyY2VwdCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ09ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+JyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0ludGVyY2VwdHMgSFRUUCByZXF1ZXN0cyB0byBhZGQgYXV0aCBoZWFkZXJzJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAxMCxcbiAgICAgICAgICAgICAgICBtb2RpZmllcktpbmQ6IFsxMTldLCAvLyBwdWJsaWNcbiAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdyZXEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ0h0dHBSZXF1ZXN0PGFueT4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdIVFRQIHJlcXVlc3QgdG8gaW50ZXJjZXB0J1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnbmV4dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSHR0cEhhbmRsZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdOZXh0IGhhbmRsZXIgaW4gdGhlIGNoYWluJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBpbXBsZW1lbnRzOiBbJ0h0dHBJbnRlcmNlcHRvciddLFxuICAgICAgICBuYXZUYWJzOiBbXG4gICAgICAgICAgICB7IGhyZWY6ICcjaW5mbycsIGlkOiAnaW5mbycsIGxhYmVsOiAnaW5mbycsICdkYXRhLWxpbmsnOiAnaW5mbycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNyZWFkbWUnLCBpZDogJ3JlYWRtZScsIGxhYmVsOiAncmVhZG1lJywgJ2RhdGEtbGluayc6ICdyZWFkbWUnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjc291cmNlJywgaWQ6ICdzb3VyY2UnLCBsYWJlbDogJ3NvdXJjZScsICdkYXRhLWxpbmsnOiAnc291cmNlJyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgZW50aXR5OiB7XG4gICAgICAgIG5hbWU6ICdVc2VyRW50aXR5JyxcbiAgICAgICAgZmlsZTogJ3NyYy9hcHAvZW50aXRpZXMvdXNlci5lbnRpdHkudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdFbnRpdHkgY2xhc3MgcmVwcmVzZW50aW5nIGEgdXNlciBpbiB0aGUgZGF0YWJhc2UnLFxuICAgICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2lkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1ByaW1hcnkga2V5IGlkZW50aWZpZXInLFxuICAgICAgICAgICAgICAgIGxpbmU6IDUsXG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yczogWydAUHJpbWFyeUdlbmVyYXRlZENvbHVtbigpJ11cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2VtYWlsJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1VzZXIgZW1haWwgYWRkcmVzcycsXG4gICAgICAgICAgICAgICAgbGluZTogOCxcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JzOiBbJ0BDb2x1bW4oeyB1bmlxdWU6IHRydWUgfSknXVxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBkZWNvcmF0b3JzOiBbJ0BFbnRpdHkoKSddLFxuICAgICAgICBuYXZUYWJzOiBbXG4gICAgICAgICAgICB7IGhyZWY6ICcjaW5mbycsIGlkOiAnaW5mbycsIGxhYmVsOiAnaW5mbycsICdkYXRhLWxpbmsnOiAnaW5mbycgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNyZWFkbWUnLCBpZDogJ3JlYWRtZScsIGxhYmVsOiAncmVhZG1lJywgJ2RhdGEtbGluayc6ICdyZWFkbWUnIH0sXG4gICAgICAgICAgICB7IGhyZWY6ICcjc291cmNlJywgaWQ6ICdzb3VyY2UnLCBsYWJlbDogJ3NvdXJjZScsICdkYXRhLWxpbmsnOiAnc291cmNlJyB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgY29udHJvbGxlcjoge1xuICAgICAgICBuYW1lOiAnVXNlckNvbnRyb2xsZXInLFxuICAgICAgICBmaWxlOiAnc3JjL2FwcC9jb250cm9sbGVycy91c2VyLmNvbnRyb2xsZXIudHMnLFxuICAgICAgICBkZXByZWNhdGVkOiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdSRVNUIGNvbnRyb2xsZXIgZm9yIHVzZXIgb3BlcmF0aW9ucycsXG4gICAgICAgIG1ldGhvZHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZ2V0VXNlcnMnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdQcm9taXNlPFVzZXJbXT4nLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnR2V0IGFsbCB1c2VycycsXG4gICAgICAgICAgICAgICAgbGluZTogMTIsXG4gICAgICAgICAgICAgICAgbW9kaWZpZXJLaW5kOiBbMTE5XSwgLy8gcHVibGljXG4gICAgICAgICAgICAgICAgZGVjb3JhdG9yczogWydAR2V0KCknXVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZ2V0VXNlckJ5SWQnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdQcm9taXNlPFVzZXI+JyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0dldCB1c2VyIGJ5IElEJyxcbiAgICAgICAgICAgICAgICBsaW5lOiAxOCxcbiAgICAgICAgICAgICAgICBtb2RpZmllcktpbmQ6IFsxMTldLCAvLyBwdWJsaWNcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JzOiBbJ0BHZXQoXCI6aWRcIiknXSxcbiAgICAgICAgICAgICAgICBhcmdzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdpZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVXNlciBJRCdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgZGVjb3JhdG9yczogWydAQ29udHJvbGxlcihcInVzZXJzXCIpJ10sXG4gICAgICAgIG5hdlRhYnM6IFtcbiAgICAgICAgICAgIHsgaHJlZjogJyNpbmZvJywgaWQ6ICdpbmZvJywgbGFiZWw6ICdpbmZvJywgJ2RhdGEtbGluayc6ICdpbmZvJyB9LFxuICAgICAgICAgICAgeyBocmVmOiAnI3JlYWRtZScsIGlkOiAncmVhZG1lJywgbGFiZWw6ICdyZWFkbWUnLCAnZGF0YS1saW5rJzogJ3JlYWRtZScgfSxcbiAgICAgICAgICAgIHsgaHJlZjogJyNzb3VyY2UnLCBpZDogJ3NvdXJjZScsIGxhYmVsOiAnc291cmNlJywgJ2RhdGEtbGluayc6ICdzb3VyY2UnIH1cbiAgICAgICAgXVxuICAgIH0sXG5cbiAgICBtaXNjZWxsYW5lb3VzOiB7XG4gICAgICAgIHZhcmlhYmxlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdBUElfQkFTRV9VUkwnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogXCInaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20nXCIsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdCYXNlIFVSTCBmb3IgQVBJIGVuZHBvaW50cycsXG4gICAgICAgICAgICAgICAgZmlsZTogJ3NyYy9hcHAvY29uc3RhbnRzL2FwaS5jb25zdGFudHMudHMnXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGZ1bmN0aW9uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdmb3JtYXREYXRlJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnKGRhdGU6IERhdGUsIGZvcm1hdD86IHN0cmluZykgPT4gc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0Zvcm1hdHMgYSBkYXRlIGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIGZvcm1hdCcsXG4gICAgICAgICAgICAgICAgZmlsZTogJ3NyYy9hcHAvdXRpbHMvZGF0ZS51dGlscy50cydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgdHlwZUFsaWFzZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnVXNlcklkJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ1R5cGUgYWxpYXMgZm9yIHVzZXIgaWRlbnRpZmllcicsXG4gICAgICAgICAgICAgICAgZmlsZTogJ3NyYy9hcHAvdHlwZXMvdXNlci50eXBlcy50cydcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgZW51bWVyYXRpb25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1VzZXJSb2xlJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0VudW1lcmF0aW9uIG9mIHVzZXIgcm9sZXMnLFxuICAgICAgICAgICAgICAgIGZpbGU6ICdzcmMvYXBwL2VudW1zL3VzZXItcm9sZS5lbnVtLnRzJyxcbiAgICAgICAgICAgICAgICBjaGlsZHM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnQURNSU4nLCB2YWx1ZTogJ2FkbWluJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdVU0VSJywgdmFsdWU6ICd1c2VyJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdHVUVTVCcsIHZhbHVlOiAnZ3Vlc3QnIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICB9LFxuXG4gICAgb3ZlcnZpZXc6IHtcbiAgICAgICAgbW9kdWxlczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnQXBwTW9kdWxlJywgZmlsZTogJ3NyYy9hcHAvYXBwLm1vZHVsZS50cycgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1VzZXJNb2R1bGUnLCBmaWxlOiAnc3JjL2FwcC9tb2R1bGVzL3VzZXIvdXNlci5tb2R1bGUudHMnIH1cbiAgICAgICAgXSxcbiAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgeyBuYW1lOiAnQXBwQ29tcG9uZW50JywgZmlsZTogJ3NyYy9hcHAvYXBwLmNvbXBvbmVudC50cycgfSxcbiAgICAgICAgICAgIHsgbmFtZTogJ1VzZXJQcm9maWxlQ29tcG9uZW50JywgZmlsZTogJ3NyYy9hcHAvY29tcG9uZW50cy91c2VyLXByb2ZpbGUuY29tcG9uZW50LnRzJyB9XG4gICAgICAgIF0sXG4gICAgICAgIGluamVjdGFibGVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdVc2VyU2VydmljZScsIGZpbGU6ICdzcmMvYXBwL3NlcnZpY2VzL3VzZXIuc2VydmljZS50cycgfVxuICAgICAgICBdLFxuICAgICAgICBwaXBlczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnVHJ1bmNhdGVQaXBlJywgZmlsZTogJ3NyYy9hcHAvcGlwZXMvdHJ1bmNhdGUucGlwZS50cycgfVxuICAgICAgICBdLFxuICAgICAgICBkaXJlY3RpdmVzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdIaWdobGlnaHREaXJlY3RpdmUnLCBmaWxlOiAnc3JjL2FwcC9kaXJlY3RpdmVzL2hpZ2hsaWdodC5kaXJlY3RpdmUudHMnIH1cbiAgICAgICAgXSxcbiAgICAgICAgY2xhc3NlczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnVXNlclJlcG9zaXRvcnknLCBmaWxlOiAnc3JjL2FwcC9yZXBvc2l0b3JpZXMvdXNlci5yZXBvc2l0b3J5LnRzJyB9XG4gICAgICAgIF0sXG4gICAgICAgIGludGVyZmFjZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ1VzZXInLCBmaWxlOiAnc3JjL2FwcC9pbnRlcmZhY2VzL3VzZXIuaW50ZXJmYWNlLnRzJyB9XG4gICAgICAgIF0sXG4gICAgICAgIGd1YXJkczogW1xuICAgICAgICAgICAgeyBuYW1lOiAnQXV0aEd1YXJkJywgZmlsZTogJ3NyYy9hcHAvZ3VhcmRzL2F1dGguZ3VhcmQudHMnIH1cbiAgICAgICAgXSxcbiAgICAgICAgaW50ZXJjZXB0b3JzOiBbXG4gICAgICAgICAgICB7IG5hbWU6ICdBdXRoSW50ZXJjZXB0b3InLCBmaWxlOiAnc3JjL2FwcC9pbnRlcmNlcHRvcnMvYXV0aC5pbnRlcmNlcHRvci50cycgfVxuICAgICAgICBdXG4gICAgfSxcblxuICAgIGluZGV4OiB7XG4gICAgICAgIG1vZHVsZXM6IDIsXG4gICAgICAgIGNvbXBvbmVudHM6IDIsXG4gICAgICAgIGluamVjdGFibGVzOiAxLFxuICAgICAgICBwaXBlczogMSxcbiAgICAgICAgZGlyZWN0aXZlczogMSxcbiAgICAgICAgY2xhc3NlczogMSxcbiAgICAgICAgaW50ZXJmYWNlczogMSxcbiAgICAgICAgZ3VhcmRzOiAxLFxuICAgICAgICBpbnRlcmNlcHRvcnM6IDFcbiAgICB9XG59O1xuXG4vLyBHbG9iYWwgdGVtcGxhdGUgY29udGV4dCB0aGF0J3MgYXZhaWxhYmxlIHRvIGFsbCB0ZW1wbGF0ZXNcbmV4cG9ydCBjb25zdCBURU1QTEFURV9DT05URVhUID0ge1xuICAgIC8vIFRyYW5zbGF0aW9uIGZ1bmN0aW9uXG4gICAgdDogKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgICAgICAgICdjb21wb25lbnRzJzogJ0NvbXBvbmVudHMnLFxuICAgICAgICAgICAgJ21vZHVsZXMnOiAnTW9kdWxlcycsXG4gICAgICAgICAgICAnaW50ZXJmYWNlcyc6ICdJbnRlcmZhY2VzJyxcbiAgICAgICAgICAgICdjbGFzc2VzJzogJ0NsYXNzZXMnLFxuICAgICAgICAgICAgJ2luamVjdGFibGVzJzogJ0luamVjdGFibGVzJyxcbiAgICAgICAgICAgICdwaXBlcyc6ICdQaXBlcycsXG4gICAgICAgICAgICAnZGlyZWN0aXZlcyc6ICdEaXJlY3RpdmVzJyxcbiAgICAgICAgICAgICdndWFyZHMnOiAnR3VhcmRzJyxcbiAgICAgICAgICAgICdpbnRlcmNlcHRvcnMnOiAnSW50ZXJjZXB0b3JzJyxcbiAgICAgICAgICAgICdlbnRpdGllcyc6ICdFbnRpdGllcycsXG4gICAgICAgICAgICAnY29udHJvbGxlcnMnOiAnQ29udHJvbGxlcnMnLFxuICAgICAgICAgICAgJ2luZm8nOiAnSW5mbycsXG4gICAgICAgICAgICAncmVhZG1lJzogJ1JlYWRtZScsXG4gICAgICAgICAgICAnc291cmNlJzogJ1NvdXJjZScsXG4gICAgICAgICAgICAndGVtcGxhdGUnOiAnVGVtcGxhdGUnLFxuICAgICAgICAgICAgJ3N0eWxlcyc6ICdTdHlsZXMnLFxuICAgICAgICAgICAgJ2RvbS10cmVlJzogJ0RPTSBUcmVlJyxcbiAgICAgICAgICAgICdmaWxlJzogJ0ZpbGUnLFxuICAgICAgICAgICAgJ292ZXJ2aWV3JzogJ092ZXJ2aWV3JyxcbiAgICAgICAgICAgICdnZXR0aW5nLXN0YXJ0ZWQnOiAnR2V0dGluZyBTdGFydGVkJyxcbiAgICAgICAgICAgICdwcm9wZXJ0aWVzJzogJ1Byb3BlcnRpZXMnLFxuICAgICAgICAgICAgJ21ldGhvZHMnOiAnTWV0aG9kcycsXG4gICAgICAgICAgICAnaW5wdXRzJzogJ0lucHV0cycsXG4gICAgICAgICAgICAnb3V0cHV0cyc6ICdPdXRwdXRzJyxcbiAgICAgICAgICAgICdhY2Nlc3NvcnMnOiAnQWNjZXNzb3JzJyxcbiAgICAgICAgICAgICdjb25zdHJ1Y3Rvcic6ICdDb25zdHJ1Y3RvcicsXG4gICAgICAgICAgICAnem9vbWluJzogJ1pvb20gSW4nLFxuICAgICAgICAgICAgJ3pvb21vdXQnOiAnWm9vbSBPdXQnLFxuICAgICAgICAgICAgJ3Jlc2V0JzogJ1Jlc2V0J1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdHJhbnNsYXRpb25zW2tleV0gfHwga2V5O1xuICAgIH0sXG5cbiAgICAvLyBSZWxhdGl2ZSBVUkwgaGVscGVyXG4gICAgcmVsYXRpdmVVUkw6IChkZXB0aDogbnVtYmVyIHwgc3RyaW5nLCAuLi5hcmdzOiBzdHJpbmdbXSkgPT4ge1xuICAgICAgICBjb25zdCBiYXNlVXJsID0gdHlwZW9mIGRlcHRoID09PSAnbnVtYmVyJyA/ICcuLi8nLnJlcGVhdChkZXB0aCkgOiBkZXB0aDtcbiAgICAgICAgcmV0dXJuIGJhc2VVcmwgKyBhcmdzLmpvaW4oJy8nKTtcbiAgICB9LFxuXG4gICAgLy8gVGVtcGxhdGUgaGVscGVyc1xuICAgIGNvbXBhcmU6IChhOiBhbnksIG9wZXJhdG9yOiBzdHJpbmcsIGI6IGFueSkgPT4ge1xuICAgICAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XG4gICAgICAgICAgICBjYXNlICc9PT0nOiByZXR1cm4gYSA9PT0gYjtcbiAgICAgICAgICAgIGNhc2UgJyE9PSc6IHJldHVybiBhICE9PSBiO1xuICAgICAgICAgICAgY2FzZSAnPT0nOiByZXR1cm4gYSA9PSBiO1xuICAgICAgICAgICAgY2FzZSAnIT0nOiByZXR1cm4gYSAhPSBiO1xuICAgICAgICAgICAgY2FzZSAnPCc6IHJldHVybiBhIDwgYjtcbiAgICAgICAgICAgIGNhc2UgJz4nOiByZXR1cm4gYSA+IGI7XG4gICAgICAgICAgICBjYXNlICc8PSc6IHJldHVybiBhIDw9IGI7XG4gICAgICAgICAgICBjYXNlICc+PSc6IHJldHVybiBhID49IGI7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2sgaWYgdGFiIGlzIGVuYWJsZWRcbiAgICBpc1RhYkVuYWJsZWQ6IChuYXZUYWJzOiBhbnlbXSwgdGFiSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gbmF2VGFicy5zb21lKHRhYiA9PiB0YWIuaWQgPT09IHRhYklkKTtcbiAgICB9LFxuXG4gICAgLy8gQ2hlY2sgaWYgdGFiIGlzIGluaXRpYWwvYWN0aXZlXG4gICAgaXNJbml0aWFsVGFiOiAobmF2VGFiczogYW55W10sIHRhYklkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIG5hdlRhYnMubGVuZ3RoID4gMCAmJiBuYXZUYWJzWzBdLmlkID09PSB0YWJJZDtcbiAgICB9LFxuXG4gICAgLy8gRGVwdGggZm9yIHJlbGF0aXZlIFVSTHNcbiAgICBkZXB0aDogMCxcblxuICAgIC8vIEdsb2JhbCBmbGFnc1xuICAgIGRpc2FibGVTZWFyY2g6IGZhbHNlLFxuICAgIGRpc2FibGVHcmFwaDogZmFsc2UsXG4gICAgZGlzYWJsZUNvdmVyYWdlOiBmYWxzZSxcbiAgICBkaXNhYmxlTGlmZUN5Y2xlSG9va3M6IGZhbHNlLFxuICAgIGRpc2FibGVQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICBkaXNhYmxlRG9tVHJlZTogZmFsc2UsXG4gICAgZGlzYWJsZVRlbXBsYXRlVGFiOiBmYWxzZSxcbiAgICBkaXNhYmxlU3R5bGVUYWI6IGZhbHNlLFxuICAgIGRpc2FibGVQcml2YXRlOiBmYWxzZSxcbiAgICBkaXNhYmxlUHJvdGVjdGVkOiBmYWxzZSxcbiAgICBkaXNhYmxlSW50ZXJuYWw6IGZhbHNlXG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7OztBQUdHO0FBbUJJLElBQU0sWUFBWSxHQUFnQjtBQUNyQyxJQUFBLFNBQVMsRUFBRTtBQUNQLFFBQUEsSUFBSSxFQUFFLHNCQUFzQjtBQUM1QixRQUFBLElBQUksRUFBRSw4Q0FBOEM7QUFDcEQsUUFBQSxVQUFVLEVBQUUsS0FBSztBQUNqQixRQUFBLFFBQVEsRUFBRSxrQkFBa0I7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
|