@hmcts/annotation-ui-lib
Version:
PDF Viewer and ability to highlight text with and comment tracking
244 lines • 19.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Injectable } from '@angular/core';
import { PdfWrapper } from './js-wrapper/pdf-wrapper';
import { PdfAnnotateWrapper } from './js-wrapper/pdf-annotate-wrapper';
import { BehaviorSubject, Subject } from 'rxjs';
import { EmLoggerService } from '../logging/em-logger.service';
import { RotationModel } from '../model/rotation-factory.model';
var PdfRenderService = /** @class */ (function () {
function PdfRenderService(pdfWrapper, log, pdfAnnotateWrapper) {
this.pdfWrapper = pdfWrapper;
this.log = log;
this.pdfAnnotateWrapper = pdfAnnotateWrapper;
this.listPages = [];
this.log.setClass('PdfRenderService');
this.dataLoadedSubject = new BehaviorSubject(false);
this.listPagesSubject = new Subject();
}
/**
* @return {?}
*/
PdfRenderService.prototype.getDataLoadedSub = /**
* @return {?}
*/
function () {
return this.dataLoadedSubject;
};
/**
* @param {?} isLoaded
* @return {?}
*/
PdfRenderService.prototype.dataLoadedUpdate = /**
* @param {?} isLoaded
* @return {?}
*/
function (isLoaded) {
this.dataLoadedSubject.next(isLoaded);
};
/**
* @return {?}
*/
PdfRenderService.prototype.getRenderOptions = /**
* @return {?}
*/
function () {
return Object.assign({}, this.RENDER_OPTIONS);
};
/**
* @param {?} RENDER_OPTIONS
* @return {?}
*/
PdfRenderService.prototype.setRenderOptions = /**
* @param {?} RENDER_OPTIONS
* @return {?}
*/
function (RENDER_OPTIONS) {
this.RENDER_OPTIONS = RENDER_OPTIONS;
};
/**
* @return {?}
*/
PdfRenderService.prototype.getViewerElementRef = /**
* @return {?}
*/
function () {
return this.viewerElementRef;
};
/**
* @return {?}
*/
PdfRenderService.prototype.getPdfPages = /**
* @return {?}
*/
function () {
return this.pdfPages;
};
/**
* @param {?=} viewerElementRef
* @return {?}
*/
PdfRenderService.prototype.render = /**
* @param {?=} viewerElementRef
* @return {?}
*/
function (viewerElementRef) {
var _this = this;
if (viewerElementRef != null) {
this.viewerElementRef = viewerElementRef;
}
/** @type {?} */
var renderOptions = this.getRenderOptions();
this.pdfWrapper.getDocument(renderOptions.documentId)
.then(function (pdf) {
renderOptions.pdfDocument = pdf;
/** @type {?} */
var viewer = _this.viewerElementRef.nativeElement;
viewer.innerHTML = '';
_this.pdfPages = pdf.pdfInfo.numPages;
_this.listPages = [];
var _loop_1 = function (i) {
/** @type {?} */
var pageDom = _this.pdfAnnotateWrapper.createPage(i);
// Create a copy of the render options for each page.
/** @type {?} */
var pageOptions = Object.assign({}, renderOptions);
viewer.appendChild(pageDom);
_this.addDomPage(pageDom, i);
pdf.getPage(i).then(function (pdfPage) {
// Get current page rotation from page rotation objects
pageOptions.rotate = _this.addPageRotation(renderOptions, pageOptions, pdfPage);
setTimeout(function () {
_this.pdfAnnotateWrapper.renderPage(i, pageOptions).then(function () {
if (i === _this.pdfPages) {
_this.setRenderOptions(renderOptions);
_this.dataLoadedUpdate(true);
_this.listPagesSubject.next(_this.listPages);
}
});
});
});
};
for (var i = 1; i < _this.pdfPages + 1; i++) {
_loop_1(i);
}
}).catch(function (error) {
/** @type {?} */
var errorMessage = new Error('Unable to render your supplied PDF. ' +
renderOptions.documentId + '. Error is: ' + error);
_this.log.error('Encountered error while rendering the PDF:' + errorMessage);
});
};
/**
* @param {?} pageDom
* @param {?} pageNumber
* @return {?}
*/
PdfRenderService.prototype.addDomPage = /**
* @param {?} pageDom
* @param {?} pageNumber
* @return {?}
*/
function (pageDom, pageNumber) {
/** @type {?} */
var pagedetails = new RotationModel(pageNumber, pageDom);
/** @type {?} */
var index = this.listPages.findIndex(function (pageElement) { return pageElement.pageNumber === pageNumber; });
if (index > 0) {
this.listPages[index] = pagedetails;
}
else {
this.listPages.push(pagedetails);
}
};
/**
* @param {?} renderOptions
* @param {?} pageOptions
* @param {?} pdfPage
* @return {?}
*/
PdfRenderService.prototype.addPageRotation = /**
* @param {?} renderOptions
* @param {?} pageOptions
* @param {?} pdfPage
* @return {?}
*/
function (renderOptions, pageOptions, pdfPage) {
/** @type {?} */
var rotation = this.getPageRotation(pageOptions, pdfPage);
if (!rotation) {
renderOptions.rotationPages.push({ page: pdfPage.pageNumber, rotate: pdfPage.rotate });
rotation = pdfPage.rotate;
}
return rotation;
};
/**
* @param {?} pageOptions
* @param {?} pdfPage
* @return {?}
*/
PdfRenderService.prototype.getPageRotation = /**
* @param {?} pageOptions
* @param {?} pdfPage
* @return {?}
*/
function (pageOptions, pdfPage) {
return pageOptions.rotationPages
.filter(function (rotateObj) { return rotateObj.page === pdfPage.pageNumber; })
.map(function (rotateObj) { return rotateObj.rotate; })[0];
};
PdfRenderService.decorators = [
{ type: Injectable }
];
PdfRenderService.ctorParameters = function () { return [
{ type: PdfWrapper },
{ type: EmLoggerService },
{ type: PdfAnnotateWrapper }
]; };
return PdfRenderService;
}());
export { PdfRenderService };
if (false) {
/**
* @type {?}
* @private
*/
PdfRenderService.prototype.viewerElementRef;
/**
* @type {?}
* @private
*/
PdfRenderService.prototype.RENDER_OPTIONS;
/**
* @type {?}
* @private
*/
PdfRenderService.prototype.pdfPages;
/**
* @type {?}
* @private
*/
PdfRenderService.prototype.dataLoadedSubject;
/** @type {?} */
PdfRenderService.prototype.listPagesSubject;
/** @type {?} */
PdfRenderService.prototype.listPages;
/**
* @type {?}
* @private
*/
PdfRenderService.prototype.pdfWrapper;
/**
* @type {?}
* @private
*/
PdfRenderService.prototype.log;
/**
* @type {?}
* @private
*/
PdfRenderService.prototype.pdfAnnotateWrapper;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGRmLXJlbmRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGhtY3RzL2Fubm90YXRpb24tdWktbGliLyIsInNvdXJjZXMiOlsibGliL2RhdGEvcGRmLXJlbmRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBRXZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRWhFO0lBV0ksMEJBQW9CLFVBQXNCLEVBQ3RCLEdBQW9CLEVBQ3BCLGtCQUFzQztRQUZ0QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLFFBQUcsR0FBSCxHQUFHLENBQWlCO1FBQ3BCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFKMUQsY0FBUyxHQUFvQixFQUFFLENBQUM7UUFLNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFDMUMsQ0FBQzs7OztJQUVELDJDQUFnQjs7O0lBQWhCO1FBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUNsQyxDQUFDOzs7OztJQUVELDJDQUFnQjs7OztJQUFoQixVQUFpQixRQUFpQjtRQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxD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LENBQUM7Ozs7OztJQUVELDBDQUFlOzs7OztJQUFmLFVBQWdCLFdBQTBCLEVBQUUsT0FBWTtRQUN0RCxNQUFNLENBQUMsV0FBVyxDQUFDLGFBQWE7YUFDN0IsTUFBTSxDQUFDLFVBQUEsU0FBUyxJQUFJLE9BQUEsU0FBUyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsVUFBVSxFQUFyQyxDQUFxQyxDQUFDO2FBQzFELEdBQUcsQ0FBQyxVQUFBLFNBQVMsSUFBSSxPQUFBLFNBQVMsQ0FBQyxNQUFNLEVBQWhCLENBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDOztnQkE1R0osVUFBVTs7O2dCQU5GLFVBQVU7Z0JBR1YsZUFBZTtnQkFGZixrQkFBa0I7O0lBa0gzQix1QkFBQztDQUFBLEFBN0dELElBNkdDO1NBNUdZLGdCQUFnQjs7Ozs7O0lBRXpCLDRDQUFxQzs7Ozs7SUFDckMsMENBQXNDOzs7OztJQUN0QyxvQ0FBeUI7Ozs7O0lBQ3pCLDZDQUFvRDs7SUFFcEQsNENBQTJDOztJQUMzQyxxQ0FBZ0M7Ozs7O0lBRXBCLHNDQUE4Qjs7Ozs7SUFDOUIsK0JBQTRCOzs7OztJQUM1Qiw4Q0FBOEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZW5kZXJPcHRpb25zIH0gZnJvbSAnLi9qcy13cmFwcGVyL3JlbmRlck9wdGlvbnMubW9kZWwnO1xuaW1wb3J0IHsgUGRmV3JhcHBlciB9IGZyb20gJy4vanMtd3JhcHBlci9wZGYtd3JhcHBlcic7XG5pbXBvcnQgeyBQZGZBbm5vdGF0ZVdyYXBwZXIgfSBmcm9tICcuL2pzLXdyYXBwZXIvcGRmLWFubm90YXRlLXdyYXBwZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFbUxvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi9sb2dnaW5nL2VtLWxvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdGF0aW9uTW9kZWwgfSBmcm9tICcuLi9tb2RlbC9yb3RhdGlvbi1mYWN0b3J5Lm1vZGVsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFBkZlJlbmRlclNlcnZpY2Uge1xuXG4gICAgcHJpdmF0ZSB2aWV3ZXJFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICAgIHByaXZhdGUgUkVOREVSX09QVElPTlM6IFJlbmRlck9wdGlvbnM7XG4gICAgcHJpdmF0ZSBwZGZQYWdlczogbnVtYmVyO1xuICAgIHByaXZhdGUgZGF0YUxvYWRlZFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcblxuICAgIGxpc3RQYWdlc1N1YmplY3Q6IFN1YmplY3Q8Um90YXRpb25Nb2RlbFtdPjtcbiAgICBsaXN0UGFnZXM6IFJvdGF0aW9uTW9kZWxbXSA9IFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBwZGZXcmFwcGVyOiBQZGZXcmFwcGVyLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgbG9nOiBFbUxvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBwZGZBbm5vdGF0ZVdyYXBwZXI6IFBkZkFubm90YXRlV3JhcHBlcikge1xuICAgICAgICB0aGlzLmxvZy5zZXRDbGFzcygnUGRmUmVuZGVyU2VydmljZScpO1xuICAgICAgICB0aGlzLmRhdGFMb2FkZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gICAgICAgIHRoaXMubGlzdFBhZ2VzU3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgfVxuXG4gICAgZ2V0RGF0YUxvYWRlZFN1YigpOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhTG9hZGVkU3ViamVjdDtcbiAgICB9XG5cbiAgICBkYXRhTG9hZGVkVXBkYXRlKGlzTG9hZGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZGF0YUxvYWRlZFN1YmplY3QubmV4dChpc0xvYWRlZCk7XG4gICAgfVxuXG4gICAgZ2V0UmVuZGVyT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMuUkVOREVSX09QVElPTlMpO1xuICAgIH1cblxuICAgIHNldFJlbmRlck9wdGlvbnMoUkVOREVSX09QVElPTlM6IFJlbmRlck9wdGlvbnMpOiBhbnkge1xuICAgICAgICB0aGlzLlJFTkRFUl9PUFRJT05TID0gUkVOREVSX09QVElPTlM7XG4gICAgfVxuXG4gICAgZ2V0Vmlld2VyRWxlbWVudFJlZigpOiBFbGVtZW50UmVmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld2VyRWxlbWVudFJlZjtcbiAgICB9XG5cbiAgICBnZXRQZGZQYWdlcygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wZGZQYWdlcztcbiAgICB9XG4gICAgXG4gICAgcmVuZGVyKHZpZXdlckVsZW1lbnRSZWY/OiBFbGVtZW50UmVmKSB7XG4gICAgICAgIGlmICh2aWV3ZXJFbGVtZW50UmVmICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudmlld2VyRWxlbWVudFJlZiA9IHZpZXdlckVsZW1lbnRSZWY7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZW5kZXJPcHRpb25zID0gdGhpcy5nZXRSZW5kZXJPcHRpb25zKCk7XG4gICAgICAgIHRoaXMucGRmV3JhcHBlci5nZXREb2N1bWVudChyZW5kZXJPcHRpb25zLmRvY3VtZW50SWQpXG4gICAgICAgICAgICAudGhlbihwZGYgPT4ge1xuICAgICAgICAgICAgICAgIHJlbmRlck9wdGlvbnMucGRmRG9jdW1lbnQgPSBwZGY7XG4gICAgICAgICAgICAgICAgY29uc3Qgdmlld2VyID0gdGhpcy52aWV3ZXJFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgdmlld2VyLmlubmVySFRNTCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMucGRmUGFnZXMgPSBwZGYucGRmSW5mby5udW1QYWdlcztcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RQYWdlcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLnBkZlBhZ2VzICsgMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2VEb20gPSB0aGlzLnBkZkFubm90YXRlV3JhcHBlci5jcmVhdGVQYWdlKGkpO1xuICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBjb3B5IG9mIHRoZSByZW5kZXIgb3B0aW9ucyBmb3IgZWFjaCBwYWdlLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWdlT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHJlbmRlck9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB2aWV3ZXIuYXBwZW5kQ2hpbGQocGFnZURvbSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRG9tUGFnZShwYWdlRG9tLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgcGRmLmdldFBhZ2UoaSkudGhlbigocGRmUGFnZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IGN1cnJlbnQgcGFnZSByb3RhdGlvbiBmcm9tIHBhZ2Ugcm90YXRpb24gb2JqZWN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU9wdGlvbnMucm90YXRlID0gdGhpcy5hZGRQYWdlUm90YXRpb24ocmVuZGVyT3B0aW9ucywgcGFnZU9wdGlvbnMsIHBkZlBhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZGZBbm5vdGF0ZVdyYXBwZXIucmVuZGVyUGFnZShpLCBwYWdlT3B0aW9ucykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSB0aGlzLnBkZlBhZ2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJlbmRlck9wdGlvbnMocmVuZGVyT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFMb2FkZWRVcGRhdGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RQYWdlc1N1YmplY3QubmV4dCh0aGlzLmxpc3RQYWdlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KS5jYXRjaChcbiAgICAgICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IG5ldyBFcnJvcignVW5hYmxlIHRvIHJlbmRlciB5b3VyIHN1cHBsaWVkIFBERi4gJyArXG4gICAgICAgICAgICAgICAgcmVuZGVyT3B0aW9ucy5kb2N1bWVudElkICsgJy4gRXJyb3IgaXM6ICcgKyBlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2cuZXJyb3IoJ0VuY291bnRlcmVkIGVycm9yIHdoaWxlIHJlbmRlcmluZyB0aGUgUERGOicgKyBlcnJvck1lc3NhZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkRG9tUGFnZShwYWdlRG9tOiBhbnksIHBhZ2VOdW1iZXI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBwYWdlZGV0YWlscyA9IG5ldyBSb3RhdGlvbk1vZGVsKHBhZ2VOdW1iZXIsIHBhZ2VEb20pO1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdFBhZ2VzLmZpbmRJbmRleChwYWdlRWxlbWVudCA9PiBwYWdlRWxlbWVudC5wYWdlTnVtYmVyID09PSBwYWdlTnVtYmVyKTtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgdGhpcy5saXN0UGFnZXNbaW5kZXhdID0gcGFnZWRldGFpbHM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxpc3RQYWdlcy5wdXNoKHBhZ2VkZXRhaWxzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZFBhZ2VSb3RhdGlvbihyZW5kZXJPcHRpb25zOiBSZW5kZXJPcHRpb25zLCBwYWdlT3B0aW9uczogUmVuZGVyT3B0aW9ucywgcGRmUGFnZTogYW55KTogbnVtYmVyIHtcbiAgICAgICAgbGV0IHJvdGF0aW9uID0gdGhpcy5nZXRQYWdlUm90YXRpb24ocGFnZU9wdGlvbnMsIHBkZlBhZ2UpO1xuICAgICAgICBpZiAoIXJvdGF0aW9uKSB7XG4gICAgICAgICAgICByZW5kZXJPcHRpb25zLnJvdGF0aW9uUGFnZXMucHVzaCh7cGFnZTogcGRmUGFnZS5wYWdlTnVtYmVyLCByb3RhdGU6IHBkZlBhZ2Uucm90YXRlfSk7XG4gICAgICAgICAgICByb3RhdGlvbiA9IHBkZlBhZ2Uucm90YXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3RhdGlvbjtcbiAgICB9XG5cbiAgICBnZXRQYWdlUm90YXRpb24ocGFnZU9wdGlvbnM6IFJlbmRlck9wdGlvbnMsIHBkZlBhZ2U6IGFueSk6IG51bWJlciB7XG4gICAgICByZXR1cm4gcGFnZU9wdGlvbnMucm90YXRpb25QYWdlc1xuICAgICAgICAuZmlsdGVyKHJvdGF0ZU9iaiA9PiByb3RhdGVPYmoucGFnZSA9PT0gcGRmUGFnZS5wYWdlTnVtYmVyKVxuICAgICAgICAubWFwKHJvdGF0ZU9iaiA9PiByb3RhdGVPYmoucm90YXRlKVswXTtcbiAgICB9XG59XG4iXX0=