UNPKG

@altack/ngx-onetrust

Version:

OneTrust loader & wrapper for Angular

106 lines 17.6 kB
import { BehaviorSubject, Observable, ReplaySubject } from 'rxjs'; import { debounceTime, filter, map, take } from 'rxjs/operators'; import { countries } from './countries'; export const OneTrust$ = new ReplaySubject(1); export const appliedLocale$ = new BehaviorSubject(''); const MutationObserver$ = (target, config = { childList: true }) => { return new Observable((observer) => { const mutationObserver = new MutationObserver((mutations, instance) => { mutations.forEach((mutation) => { observer.next(mutation); }); }); mutationObserver.observe(target, config); return () => { mutationObserver.disconnect(); }; }); }; const OneTrustReady$ = () => { return MutationObserver$(document.body).pipe(filter((record) => record.addedNodes.length === 1), map((record) => record.addedNodes.item(0)), filter((element) => { return (element && typeof element.getAttribute === 'function' && element.getAttribute('id') === 'onetrust-consent-sdk'); }), debounceTime(300), // tslint:disable-next-line:no-string-literal map(() => window['OneTrust'])); }; const getDefaultLocalization = (country) => { if (countries.has(country.toLowerCase())) { const countriesLocales = countries.get(country.toLowerCase()); if (countriesLocales.locales && countriesLocales.locales.length > 0) { // apply default locale for the current country return countriesLocales.locales[0]; } } return ''; }; const initializeOneTrust = (src, domainScript, documentBasedLang = true, countryCode = '') => { const head = window.document.getElementsByTagName('head')[0]; const oneTrustScript = window.document.createElement('script'); oneTrustScript.id = 'one-trust-script'; oneTrustScript.src = src; if (documentBasedLang) { oneTrustScript.setAttribute('data-document-language', 'true'); } oneTrustScript.setAttribute('type', 'text/javascript'); oneTrustScript.setAttribute('charset', 'UTF-8'); oneTrustScript.setAttribute('data-domain-script', domainScript); head.insertBefore(oneTrustScript, head.firstChild); const oneTrustFuncScript = window.document.createElement('script'); oneTrustFuncScript.type = 'text/javascript'; oneTrustFuncScript.innerHTML = `function OptanonWrapper() { }`; head.appendChild(oneTrustFuncScript); if (countryCode) { const geoLocationScript = window.document.createElement('script'); geoLocationScript.type = 'text/javascript'; geoLocationScript.innerHTML = `var OneTrust = {geolocationResponse: {countryCode: '${countryCode}'}}`; head.appendChild(geoLocationScript); } }; export function loadOneTrust(domainScript, defaultCountry, documentBasedLanguage, src = 'https://cdn.cookielaw.org/scripttemplates/otSDKStub.js') { // Get ready to receive the OneTrust object once loaded OneTrustReady$() .pipe(take(1)) .subscribe((oneTrust) => { OneTrust$.next(oneTrust); }); // Initialize if (defaultCountry) { appliedLocale$.next(defaultCountry); initializeOneTrust(src, domainScript, documentBasedLanguage, defaultCountry); } else { // tslint:disable-next-line:variable-name let __geoLocationData; // tslint:disable-next-line:no-string-literal window['jsonFeed'] = (location) => { __geoLocationData = location; }; const html = window.document.getElementsByTagName('html')[0]; const head = window.document.getElementsByTagName('head')[0]; const localizationScript = window.document.createElement('script'); localizationScript.src = 'https://geolocation.onetrust.com/cookieconsentpub/v1/geo/location'; localizationScript.setAttribute('type', 'text/javascript'); localizationScript.onload = () => { if (__geoLocationData) { const locale = getDefaultLocalization(__geoLocationData.country); if (locale) { html.setAttribute('lang', locale); appliedLocale$.next(locale); initializeOneTrust(src, domainScript, true); } else { console.warn(`Not valid geolocation`, __geoLocationData); initializeOneTrust(src, domainScript, false); } } else { initializeOneTrust(src, domainScript, false); console.warn(`Not able to determine geolocation using 'https://geolocation.onetrust.com/cookieconsentpub/v1/geo/location'`); } }; head.insertBefore(localizationScript, head.firstChild); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1vbmV0cnVzdC9zcmMvbGliL3V0aWwvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDOUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHeEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLElBQUksYUFBYSxDQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV0RCxNQUFNLGlCQUFpQixHQUFHLENBQ3hCLE1BQVksRUFDWixTQUErQixFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFDdEIsRUFBRTtJQUM5QixPQUFPLElBQUksVUFBVSxDQUFDLENBQUMsUUFBb0MsRUFBRSxFQUFFO1FBQzdELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FDM0MsQ0FBQyxTQUEyQixFQUFFLFFBQTBCLEVBQUUsRUFBRTtZQUMxRCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBd0IsRUFBRSxFQUFFO2dCQUM3QyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUNGLENBQUM7UUFDRixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sR0FBRyxFQUFFO1lBQ1YsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDO0lBQ0os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QyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ25FLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxtRUFBbUUsQ0FBQztRQUM3RixrQkFBa0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDM0Qsa0JBQWtCLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtZQUMvQixJQUFJLGlCQUFpQixFQUFFO2dCQUNyQixNQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDakUsSUFBSSxNQUFNLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ2xDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzVCLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQzdDO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztvQkFDekQsa0JBQWtCLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDOUM7YUFDRjtpQkFBTTtnQkFDTCxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLDZHQUE2RyxDQUFDLENBQUM7YUFDN0g7UUFDSCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUN4RDtBQUVILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QsIFN1YnNjcmliZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb3VudHJpZXNMb2NhbGVzLCBHZW9Mb2NhdGlvbkRhdGEsIE9uZVRydXN0IH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgY291bnRyaWVzIH0gZnJvbSAnLi9jb3VudHJpZXMnO1xuXG5kZWNsYXJlIGNvbnN0IHdpbmRvdzogV2luZG93O1xuZXhwb3J0IGNvbnN0IE9uZVRydXN0JCA9IG5ldyBSZXBsYXlTdWJqZWN0PE9uZVRydXN0PigxKTtcbmV4cG9ydCBjb25zdCBhcHBsaWVkTG9jYWxlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuXG5jb25zdCBNdXRhdGlvbk9ic2VydmVyJCA9IChcbiAgdGFyZ2V0OiBOb2RlLFxuICBjb25maWc6IE11dGF0aW9uT2JzZXJ2ZXJJbml0ID0geyBjaGlsZExpc3Q6IHRydWUgfVxuKTogT2JzZXJ2YWJsZTxNdXRhdGlvblJlY29yZD4gPT4ge1xuICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBTdWJzY3JpYmVyPE11dGF0aW9uUmVjb3JkPikgPT4ge1xuICAgIGNvbnN0IG11dGF0aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChtdXRhdGlvbnM6IE11dGF0aW9uUmVjb3JkW10sIGluc3RhbmNlOiBNdXRhdGlvbk9ic2VydmVyKSA9PiB7XG4gICAgICAgIG11dGF0aW9ucy5mb3JFYWNoKChtdXRhdGlvbjogTXV0YXRpb25SZWNvcmQpID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KG11dGF0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGFyZ2V0LCBjb25maWcpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBtdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9O1xuICB9KTtcbn07XG5cbmNvbnN0IE9uZVRydXN0UmVhZHkkID0gKCk6IE9ic2VydmFibGU8T25lVHJ1c3Q+ID0+IHtcbiAgcmV0dXJuIE11dGF0aW9uT2JzZXJ2ZXIkKGRvY3VtZW50LmJvZHkpLnBpcGUoXG4gICAgZmlsdGVyKChyZWNvcmQ6IE11dGF0aW9uUmVjb3JkKSA9PiByZWNvcmQuYWRkZWROb2Rlcy5sZW5ndGggPT09IDEpLFxuICAgIG1hcCgocmVjb3JkOiBNdXRhdGlvblJlY29yZCkgPT4gcmVjb3JkLmFkZGVkTm9kZXMuaXRlbSgwKSBhcyBIVE1MRWxlbWVudCksXG4gICAgZmlsdGVyKChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgICBlbGVtZW50ICYmXG4gICAgICAgICAgdHlwZW9mIGVsZW1lbnQuZ2V0QXR0cmlidXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2lkJykgPT09ICdvbmV0cnVzdC1jb25zZW50LXNkaydcbiAgICAgICk7XG4gICAgfSksXG4gICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXN0cmluZy1saXRlcmFsXG4gICAgbWFwKCgpID0+IHdpbmRvd1snT25lVHJ1c3QnXSBhcyBPbmVUcnVzdClcbiAgKTtcbn07XG5cbmNvbnN0IGdldERlZmF1bHRMb2NhbGl6YXRpb24gPSAoY291bnRyeTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKGNvdW50cmllcy5oYXMoY291bnRyeS50b0xvd2VyQ2FzZSgpKSkge1xuICAgIGNvbnN0IGNvdW50cmllc0xvY2FsZXMgPSBjb3VudHJpZXMuZ2V0KGNvdW50cnkudG9Mb3dlckNhc2UoKSkgYXMgQ291bnRyaWVzTG9jYWxlcztcbiAgICBpZiAoY291bnRyaWVzTG9jYWxlcy5sb2NhbGVzICYmIGNvdW50cmllc0xvY2FsZXMubG9jYWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBhcHBseSBkZWZhdWx0IGxvY2FsZSBmb3IgdGhlIGN1cnJlbnQgY291bnRyeVxuICAgICAgcmV0dXJuIGNvdW50cmllc0xvY2FsZXMubG9jYWxlc1swXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufTtcblxuY29uc3QgaW5pdGlhbGl6ZU9uZVRydXN0ID0gKHNyYzogc3RyaW5nLCBkb21haW5TY3JpcHQ6IHN0cmluZywgZG9jdW1lbnRCYXNlZExhbmc6IGJvb2xlYW4gPSB0cnVlLCBjb3VudHJ5Q29kZTogc3RyaW5nID0gJycpOiB2b2lkID0+IHtcbiAgY29uc3QgaGVhZCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICBjb25zdCBvbmVUcnVzdFNjcmlwdCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgb25lVHJ1c3RTY3JpcHQuaWQgPSAnb25lLXRydXN0LXNjcmlwdCc7XG4gIG9uZVRydXN0U2NyaXB0LnNyYyA9IHNyYztcbiAgaWYgKGRvY3VtZW50QmFzZWRMYW5nKSB7XG4gICAgb25lVHJ1c3RTY3JpcHQuc2V0QXR0cmlidXRlKCdkYXRhLWRvY3VtZW50LWxhbmd1YWdlJywgJ3RydWUnKTtcbiAgfVxuICBvbmVUcnVzdFNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9qYXZhc2NyaXB0Jyk7XG4gIG9uZVRydXN0U2NyaXB0LnNldEF0dHJpYnV0ZSgnY2hhcnNldCcsICdVVEYtOCcpO1xuICBvbmVUcnVzdFNjcmlwdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtZG9tYWluLXNjcmlwdCcsIGRvbWFpblNjcmlwdCk7XG4gIGhlYWQuaW5zZXJ0QmVmb3JlKG9uZVRydXN0U2NyaXB0LCBoZWFkLmZpcnN0Q2hpbGQpO1xuICBjb25zdCBvbmVUcnVzdEZ1bmNTY3JpcHQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gIG9uZVRydXN0RnVuY1NjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gIG9uZVRydXN0RnVuY1NjcmlwdC5pbm5lckhUTUwgPSBgZnVuY3Rpb24gT3B0YW5vbldyYXBwZXIoKSB7IH1gO1xuICBoZWFkLmFwcGVuZENoaWxkKG9uZVRydXN0RnVuY1NjcmlwdCk7XG4gIGlmIChjb3VudHJ5Q29kZSkge1xuICAgIGNvbnN0IGdlb0xvY2F0aW9uU2NyaXB0ID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIGdlb0xvY2F0aW9uU2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICBnZW9Mb2NhdGlvblNjcmlwdC5pbm5lckhUTUwgPSBgdmFyIE9uZVRydXN0ID0ge2dlb2xvY2F0aW9uUmVzcG9uc2U6IHtjb3VudHJ5Q29kZTogJyR7Y291bnRyeUNvZGV9J319YDtcbiAgICBoZWFkLmFwcGVuZENoaWxkKGdlb0xvY2F0aW9uU2NyaXB0KTtcbiAgfVxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRPbmVUcnVzdChcbiAgZG9tYWluU2NyaXB0OiBzdHJpbmcsXG4gIGRlZmF1bHRDb3VudHJ5Pzogc3RyaW5nLFxuICBkb2N1bWVudEJhc2VkTGFuZ3VhZ2U/OiBib29sZWFuLFxuICBzcmM6IHN0cmluZyA9ICdodHRwczovL2Nkbi5jb29raWVsYXcub3JnL3NjcmlwdHRlbXBsYXRlcy9vdFNES1N0dWIuanMnXG4pOiB2b2lkIHtcbiAgLy8gR2V0IHJlYWR5IHRvIHJlY2VpdmUgdGhlIE9uZVRydXN0IG9iamVjdCBvbmNlIGxvYWRlZFxuICBPbmVUcnVzdFJlYWR5JCgpXG4gICAgLnBpcGUodGFrZSgxKSlcbiAgICAuc3Vic2NyaWJlKChvbmVUcnVzdDogT25lVHJ1c3QpID0+IHtcbiAgICAgIE9uZVRydXN0JC5uZXh0KG9uZVRydXN0KTtcbiAgICB9KTtcbiAgLy8gSW5pdGlhbGl6ZVxuICBpZiAoZGVmYXVsdENvdW50cnkpIHtcbiAgICBhcHBsaWVkTG9jYWxlJC5uZXh0KGRlZmF1bHRDb3VudHJ5KTtcbiAgICBpbml0aWFsaXplT25lVHJ1c3Qoc3JjLCBkb21haW5TY3JpcHQsIGRvY3VtZW50QmFzZWRMYW5ndWFnZSwgZGVmYXVsdENvdW50cnkpO1xuICB9IGVsc2Uge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gICAgbGV0IF9fZ2VvTG9jYXRpb25EYXRhOiBHZW9Mb2NhdGlvbkRhdGE7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXN0cmluZy1saXRlcmFsXG4gICAgd2luZG93Wydqc29uRmVlZCddID0gKGxvY2F0aW9uOiBHZW9Mb2NhdGlvbkRhdGEpID0+IHtcbiAgICAgIF9fZ2VvTG9jYXRpb25EYXRhID0gbG9jYXRpb247XG4gICAgfTtcbiAgICBjb25zdCBodG1sID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJylbMF07XG4gICAgY29uc3QgaGVhZCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICAgIGNvbnN0IGxvY2FsaXphdGlvblNjcmlwdCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBsb2NhbGl6YXRpb25TY3JpcHQuc3JjID0gJ2h0dHBzOi8vZ2VvbG9jYXRpb24ub25ldHJ1c3QuY29tL2Nvb2tpZWNvbnNlbnRwdWIvdjEvZ2VvL2xvY2F0aW9uJztcbiAgICBsb2NhbGl6YXRpb25TY3JpcHQuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvamF2YXNjcmlwdCcpO1xuICAgIGxvY2FsaXphdGlvblNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBpZiAoX19nZW9Mb2NhdGlvbkRhdGEpIHtcbiAgICAgICAgY29uc3QgbG9jYWxlID0gZ2V0RGVmYXVsdExvY2FsaXphdGlvbihfX2dlb0xvY2F0aW9uRGF0YS5jb3VudHJ5KTtcbiAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgIGh0bWwuc2V0QXR0cmlidXRlKCdsYW5nJywgbG9jYWxlKTtcbiAgICAgICAgICBhcHBsaWVkTG9jYWxlJC5uZXh0KGxvY2FsZSk7XG4gICAgICAgICAgaW5pdGlhbGl6ZU9uZVRydXN0KHNyYywgZG9tYWluU2NyaXB0LCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYE5vdCB2YWxpZCBnZW9sb2NhdGlvbmAsIF9fZ2VvTG9jYXRpb25EYXRhKTtcbiAgICAgICAgICBpbml0aWFsaXplT25lVHJ1c3Qoc3JjLCBkb21haW5TY3JpcHQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbGl6ZU9uZVRydXN0KHNyYywgZG9tYWluU2NyaXB0LCBmYWxzZSk7XG4gICAgICAgIGNvbnNvbGUud2FybihgTm90IGFibGUgdG8gZGV0ZXJtaW5lIGdlb2xvY2F0aW9uIHVzaW5nICdodHRwczovL2dlb2xvY2F0aW9uLm9uZXRydXN0LmNvbS9jb29raWVjb25zZW50cHViL3YxL2dlby9sb2NhdGlvbidgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGhlYWQuaW5zZXJ0QmVmb3JlKGxvY2FsaXphdGlvblNjcmlwdCwgaGVhZC5maXJzdENoaWxkKTtcbiAgfVxuXG59XG4iXX0=