@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
122 lines • 14.2 kB
JavaScript
import { LogLevel } from '@microsoft/windows-admin-center-sdk/core/diagnostics/log-level';
import { Logging } from '@microsoft/windows-admin-center-sdk/core/diagnostics/logging';
import { ResourceService } from '../../service/resource.service';
/**
* SVG resource class for CSS class.
*/
export class SvgResource {
/**
* Initializes a new instance of the SvgResource class.
*
* @param svg the svg object generated by gulp-svg-code.
*/
constructor(svg) {
this.svg = svg;
this.svgInlineResource = new SvgInlineResource(this.svg);
}
/**
* Build svg resources from SVG object, and register the resource service.
*
* @param resourceService the resource service.
* @param svg the svg object generated by gulp-svg-code.
*/
static buildRegister(resourceService, svg) {
// register SVG resources to resource service.
resourceService.register(ResourceService.svgType, new SvgResource(svg));
resourceService.register(ResourceService.svgInlineType, new SvgInlineResource(svg));
}
/**
* Find SVG string by id.
*
* @param id the identification of SVG. (id must be lower case)
*/
find(id) {
const result = this.svgInlineResource.findIndex(id);
if (!result) {
return null;
}
const segments = result.name.split('/');
return 'svg-' + segments.join('--');
}
}
/**
* SVG inline resource class for ram SVG insertion.
*/
export class SvgInlineResource {
/**
* Initializes a new instance of the SvgInlineResource class.
*
* @param svg the svg object generated by gulp-svg-code.
*/
constructor(svg) {
this.svg = svg;
this.lowerSvg = this.createLowercaseIndexing(this.svg);
}
/**
* Find SVG string by id.
*
* @param id the identification of SVG. (id must be lower case)
* @return string the Svg resource string.
*/
find(id) {
const result = this.lowerSvg[id];
if (!result) {
Logging.log({
level: LogLevel.Warning,
message: `Unable to find SVG resource for ${id}`,
params: {
id: id
},
source: 'SvgInlineResource'
});
return null;
}
return result.value;
}
/**
* Find index data.
*
* @param id the identification of SVG.
* @return SvgIndexedData the indexed data.
*/
findIndex(id) {
return this.lowerSvg[id];
}
/**
* Create lower case property version.
*
* @param svg the original svg data.
* @return any the lower case version of svg.
*/
createLowercaseIndexing(svg) {
const newSvg = {};
let nextCollection = [{ target: svg, path: '' }];
while (nextCollection.length > 0) {
const collection = nextCollection;
nextCollection = [];
for (const current of collection) {
MsftSme.forEachKey(current.target, (key, value) => {
const path = this.nextPath(current.path, key);
if (value && typeof value === 'object') {
// add to next level traverse.
nextCollection.push({ target: value, path: path });
}
else {
// register to the collection.
const lower = path.toLowerCase();
newSvg[lower] = {
name: path,
lower: lower,
value: value
};
}
});
}
}
return newSvg;
}
nextPath(path, key) {
return path === '' ? key : path + '/' + key;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZnLXJlc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vYW5ndWxhci9zcmMvZGlyZWN0aXZlcy9zdmcvc3ZnLXJlc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBYWpFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFdBQVc7SUFlcEI7Ozs7T0FJRztJQUNILFlBQW9CLEdBQVE7UUFBUixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBbkJEOzs7OztPQUtHO0lBQ0ksTUFBTSxDQUFDLGFBQWEsQ0FBQyxlQUFnQyxFQUFFLEdBQVE7UUFDbEUsOENBQThDO1FBQzlDLGVBQWUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLGVBQWUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDeEYsQ0FBQztJQVdEOzs7O09BSUc7SUFDSSxJQUFJLENBQUMsRUFBVTtRQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsT0FBTyxNQUFNLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0NBQ0o7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFHMUI7Ozs7T0FJRztJQUNILFlBQW9CLEdBQVE7UUFBUixRQUFHLEdBQUgsR0FBRyxDQUFLO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxJQUFJLENBQUMsRUFBVTtRQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNSLEtBQUssRUFBRSxRQUFRLENBQUMsT0FBTztnQkFDdkIsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLEVBQUU7Z0JBQ2hELE1BQU0sRUFBRTtvQkFDSixFQUFFLEVBQUUsRUFBRTtpQkFDVDtnQkFDRCxNQUFNLEVBQUUsbUJBQW1CO2FBQzlCLENBQUMsQ0FBQztZQUVILE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUyxDQUFDLEVBQVU7UUFDdkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLHVCQUF1QixDQUFDLEdBQVE7UUFDcEMsTUFBTSxNQUFNLEdBQXdDLEVBQUUsQ0FBQztRQUN2RCxJQUFJLGNBQWMsR0FBZSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3RCxPQUFPLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzlCLE1BQU0sVUFBVSxHQUFlLGNBQWMsQ0FBQztZQUM5QyxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLEtBQUssTUFBTSxPQUFPLElBQUksVUFBVSxFQUFFO2dCQUM5QixPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFXLEVBQUUsS0FBVSxFQUFFLEVBQUU7b0JBQzNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDOUMsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO3dCQUNwQyw4QkFBOEI7d0JBQzlCLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3FCQUN0RDt5QkFBTTt3QkFDSCw4QkFBOEI7d0JBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzt3QkFDakMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFtQjs0QkFDNUIsSUFBSSxFQUFFLElBQUk7NEJBQ1YsS0FBSyxFQUFFLEtBQUs7NEJBQ1osS0FBSyxFQUFFLEtBQUs7eUJBQ2YsQ0FBQztxQkFDTDtnQkFDTCxDQUFDLENBQUMsQ0FBQzthQUNOO1NBQ0o7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sUUFBUSxDQUFDLElBQVksRUFBRSxHQUFXO1FBQ3RDLE9BQU8sSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNoRCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXNvdXJjZUNhY2hlRmluZCB9IGZyb20gJ0BtaWNyb3NvZnQvd2luZG93cy1hZG1pbi1jZW50ZXItc2RrL2NvcmUvZGF0YS9yZXNvdXJjZS1jYWNoZSc7XHJcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2ctbGV2ZWwnO1xyXG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSAnQG1pY3Jvc29mdC93aW5kb3dzLWFkbWluLWNlbnRlci1zZGsvY29yZS9kaWFnbm9zdGljcy9sb2dnaW5nJztcclxuaW1wb3J0IHsgUmVzb3VyY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9yZXNvdXJjZS5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU3ZnSW5kZXhlZERhdGEge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgbG93ZXI6IHN0cmluZztcclxuICAgIHZhbHVlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBTdmdTdGFjayB7XHJcbiAgICB0YXJnZXQ6IGFueTtcclxuICAgIHBhdGg6IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIFNWRyByZXNvdXJjZSBjbGFzcyBmb3IgQ1NTIGNsYXNzLlxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFN2Z1Jlc291cmNlIGltcGxlbWVudHMgUmVzb3VyY2VDYWNoZUZpbmQ8c3RyaW5nPiB7XHJcbiAgICBwcml2YXRlIHN2Z0lubGluZVJlc291cmNlOiBTdmdJbmxpbmVSZXNvdXJjZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEJ1aWxkIHN2ZyByZXNvdXJjZXMgZnJvbSBTVkcgb2JqZWN0LCBhbmQgcmVnaXN0ZXIgdGhlIHJlc291cmNlIHNlcnZpY2UuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHJlc291cmNlU2VydmljZSB0aGUgcmVzb3VyY2Ugc2VydmljZS5cclxuICAgICAqIEBwYXJhbSBzdmcgdGhlIHN2ZyBvYmplY3QgZ2VuZXJhdGVkIGJ5IGd1bHAtc3ZnLWNvZGUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgYnVpbGRSZWdpc3RlcihyZXNvdXJjZVNlcnZpY2U6IFJlc291cmNlU2VydmljZSwgc3ZnOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICAvLyByZWdpc3RlciBTVkcgcmVzb3VyY2VzIHRvIHJlc291cmNlIHNlcnZpY2UuXHJcbiAgICAgICAgcmVzb3VyY2VTZXJ2aWNlLnJlZ2lzdGVyKFJlc291cmNlU2VydmljZS5zdmdUeXBlLCBuZXcgU3ZnUmVzb3VyY2Uoc3ZnKSk7XHJcbiAgICAgICAgcmVzb3VyY2VTZXJ2aWNlLnJlZ2lzdGVyKFJlc291cmNlU2VydmljZS5zdmdJbmxpbmVUeXBlLCBuZXcgU3ZnSW5saW5lUmVzb3VyY2Uoc3ZnKSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgU3ZnUmVzb3VyY2UgY2xhc3MuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN2ZyB0aGUgc3ZnIG9iamVjdCBnZW5lcmF0ZWQgYnkgZ3VscC1zdmctY29kZS5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdmc6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc3ZnSW5saW5lUmVzb3VyY2UgPSBuZXcgU3ZnSW5saW5lUmVzb3VyY2UodGhpcy5zdmcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZCBTVkcgc3RyaW5nIGJ5IGlkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBpZCB0aGUgaWRlbnRpZmljYXRpb24gb2YgU1ZHLiAoaWQgbXVzdCBiZSBsb3dlciBjYXNlKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluZChpZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnN2Z0lubGluZVJlc291cmNlLmZpbmRJbmRleChpZCk7XHJcbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzZWdtZW50cyA9IHJlc3VsdC5uYW1lLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgcmV0dXJuICdzdmctJyArIHNlZ21lbnRzLmpvaW4oJy0tJyk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTVkcgaW5saW5lIHJlc291cmNlIGNsYXNzIGZvciByYW0gU1ZHIGluc2VydGlvbi5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBTdmdJbmxpbmVSZXNvdXJjZSBpbXBsZW1lbnRzIFJlc291cmNlQ2FjaGVGaW5kPHN0cmluZz4ge1xyXG4gICAgcHJpdmF0ZSBsb3dlclN2ZzogeyBbbG93ZXI6IHN0cmluZ106IFN2Z0luZGV4ZWREYXRhIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0aWFsaXplcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgU3ZnSW5saW5lUmVzb3VyY2UgY2xhc3MuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN2ZyB0aGUgc3ZnIG9iamVjdCBnZW5lcmF0ZWQgYnkgZ3VscC1zdmctY29kZS5cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdmc6IGFueSkge1xyXG4gICAgICAgIHRoaXMubG93ZXJTdmcgPSB0aGlzLmNyZWF0ZUxvd2VyY2FzZUluZGV4aW5nKHRoaXMuc3ZnKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmQgU1ZHIHN0cmluZyBieSBpZC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gaWQgdGhlIGlkZW50aWZpY2F0aW9uIG9mIFNWRy4gKGlkIG11c3QgYmUgbG93ZXIgY2FzZSlcclxuICAgICAqIEByZXR1cm4gc3RyaW5nIHRoZSBTdmcgcmVzb3VyY2Ugc3RyaW5nLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluZChpZDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmxvd2VyU3ZnW2lkXTtcclxuICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICBMb2dnaW5nLmxvZyh7XHJcbiAgICAgICAgICAgICAgICBsZXZlbDogTG9nTGV2ZWwuV2FybmluZyxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBVbmFibGUgdG8gZmluZCBTVkcgcmVzb3VyY2UgZm9yICR7aWR9YCxcclxuICAgICAgICAgICAgICAgIHBhcmFtczoge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpZFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHNvdXJjZTogJ1N2Z0lubGluZVJlc291cmNlJ1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmQgaW5kZXggZGF0YS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gaWQgdGhlIGlkZW50aWZpY2F0aW9uIG9mIFNWRy5cclxuICAgICAqIEByZXR1cm4gU3ZnSW5kZXhlZERhdGEgdGhlIGluZGV4ZWQgZGF0YS5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmRJbmRleChpZDogc3RyaW5nKTogU3ZnSW5kZXhlZERhdGEge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvd2VyU3ZnW2lkXTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF0ZSBsb3dlciBjYXNlIHByb3BlcnR5IHZlcnNpb24uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHN2ZyB0aGUgb3JpZ2luYWwgc3ZnIGRhdGEuXHJcbiAgICAgKiBAcmV0dXJuIGFueSB0aGUgbG93ZXIgY2FzZSB2ZXJzaW9uIG9mIHN2Zy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBjcmVhdGVMb3dlcmNhc2VJbmRleGluZyhzdmc6IGFueSk6IHsgW2xvd2VyOiBzdHJpbmddOiBTdmdJbmRleGVkRGF0YSB9IHtcclxuICAgICAgICBjb25zdCBuZXdTdmc6IHsgW2xvd2VyOiBzdHJpbmddOiBTdmdJbmRleGVkRGF0YSB9ID0ge307XHJcbiAgICAgICAgbGV0IG5leHRDb2xsZWN0aW9uOiBTdmdTdGFja1tdID0gW3sgdGFyZ2V0OiBzdmcsIHBhdGg6ICcnIH1dO1xyXG4gICAgICAgIHdoaWxlIChuZXh0Q29sbGVjdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb246IFN2Z1N0YWNrW10gPSBuZXh0Q29sbGVjdGlvbjtcclxuICAgICAgICAgICAgbmV4dENvbGxlY3Rpb24gPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjdXJyZW50IG9mIGNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIE1zZnRTbWUuZm9yRWFjaEtleShjdXJyZW50LnRhcmdldCwgKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMubmV4dFBhdGgoY3VycmVudC5wYXRoLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0byBuZXh0IGxldmVsIHRyYXZlcnNlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Q29sbGVjdGlvbi5wdXNoKHsgdGFyZ2V0OiB2YWx1ZSwgcGF0aDogcGF0aCB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWdpc3RlciB0byB0aGUgY29sbGVjdGlvbi5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG93ZXIgPSBwYXRoLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N2Z1tsb3dlcl0gPSA8U3ZnSW5kZXhlZERhdGE+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogcGF0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd2VyOiBsb3dlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbmV3U3ZnO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbmV4dFBhdGgocGF0aDogc3RyaW5nLCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHBhdGggPT09ICcnID8ga2V5IDogcGF0aCArICcvJyArIGtleTtcclxuICAgIH1cclxufVxyXG4iXX0=