Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@ngx-pwa/local-storage

Package Overview
Dependencies
Maintainers
1
Versions
126
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ngx-pwa/local-storage - npm Package Compare versions

Comparing version 11.0.0-0 to 11.0.0-1

2

esm2015/lib/storages/storage-map.service.js

@@ -294,2 +294,2 @@ import { Injectable, Inject } from '@angular/core';

];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1tYXAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvY3lyaWxsZS9XZWIvb3BlbnNvdXJjZS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvcHJvamVjdHMvbmd4LXB3YS9sb2NhbC1zdG9yYWdlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9zdG9yYWdlcy9zdG9yYWdlLW1hcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxVQUFVLEVBQUUsRUFBRSxFQUFvQixhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkYsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7OztBQUsvQyxNQUFNLE9BQU8sVUFBVTtJQUlyQjs7Ozs7T0FLRztJQUNILFlBQ1ksUUFBdUIsRUFDdkIsZ0JBQStCLElBQUksYUFBYSxFQUFFLEVBQy9CLFdBQVcsRUFBRTtRQUZoQyxhQUFRLEdBQVIsUUFBUSxDQUFlO1FBQ3ZCLGtCQUFhLEdBQWIsYUFBYSxDQUFx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QkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBRXpEO3lCQUFNO3dCQUVMLDBDQUEwQzt3QkFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO3FCQUV0QztpQkFFRjtnQkFBQyxXQUFNO29CQUVOLDBDQUEwQztvQkFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO2lCQUV0QztnQkFFRCx3QkFBd0I7Z0JBQ3hCLE9BQU8saUJBQWlCLEVBQUUsQ0FBQzthQUU1QjtpQkFBTTtnQkFFTCxrQ0FBa0M7Z0JBQ2xDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBRTFCO1FBRUgsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDOzs7O1lBM2RGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBUFEsYUFBYTtZQUpiLGFBQWE7NENBeUJqQixNQUFNLFNBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciwgb2YsIE9wZXJhdG9yRnVuY3Rpb24sIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lcmdlTWFwLCBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIEpTT05TY2hlbWEsIEpTT05TY2hlbWFCb29sZWFuLCBKU09OU2NoZW1hSW50ZWdlcixcbiAgSlNPTlNjaGVtYU51bWJlciwgSlNPTlNjaGVtYVN0cmluZywgSlNPTlNjaGVtYUFycmF5T2Zcbn0gZnJvbSAnLi4vdmFsaWRhdGlvbi9qc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBKU09OVmFsaWRhdG9yIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi9qc29uLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBJbmRleGVkREJEYXRhYmFzZSB9IGZyb20gJy4uL2RhdGFiYXNlcy9pbmRleGVkZGItZGF0YWJhc2UnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlRGF0YWJhc2UgfSBmcm9tICcuLi9kYXRhYmFzZXMvbG9jYWxzdG9yYWdlLWRhdGFiYXNlJztcbmltcG9ydCB7IE1lbW9yeURhdGFiYXNlIH0gZnJvbSAnLi4vZGF0YWJhc2VzL21lbW9yeS1kYXRhYmFzZSc7XG5pbXBvcnQgeyBMb2NhbERhdGFiYXNlIH0gZnJvbSAnLi4vZGF0YWJhc2VzL2xvY2FsLWRhdGFiYXNlJztcbmltcG9ydCB7IElEQl9CUk9LRU5fRVJST1IgfSBmcm9tICcuLi9kYXRhYmFzZXMvZXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBMU19QUkVGSVggfSBmcm9tICcuLi90b2tlbnMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi9leGNlcHRpb25zJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU3RvcmFnZU1hcCB7XG5cbiAgcHJvdGVjdGVkIG5vdGlmaWVycyA9IG5ldyBNYXA8c3RyaW5nLCBSZXBsYXlTdWJqZWN0PHVua25vd24+PigpO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvciBwYXJhbXMgYXJlIHByb3ZpZGVkIGJ5IEFuZ3VsYXIgKGJ1dCBjYW4gYWxzbyBiZSBwYXNzZWQgbWFudWFsbHkgaW4gdGVzdHMpXG4gICAqIEBwYXJhbSBkYXRhYmFzZSBTdG9yYWdlIHRvIHVzZVxuICAgKiBAcGFyYW0ganNvblZhbGlkYXRvciBWYWxpZGF0b3Igc2VydmljZVxuICAgKiBAcGFyYW0gTFNQcmVmaXggUHJlZml4IGZvciBgbG9jYWxTdG9yYWdlYCBrZXlzIHRvIGF2b2lkIGNvbGxpc2lvbiBmb3IgbXVsdGlwbGUgYXBwcyBvbiB0aGUgc2FtZSBzdWJkb21haW4gb3IgZm9yIGludGVyb3BlcmFiaWxpdHlcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBkYXRhYmFzZTogTG9jYWxEYXRhYmFzZSxcbiAgICBwcm90ZWN0ZWQganNvblZhbGlkYXRvcjogSlNPTlZhbGlkYXRvciA9IG5ldyBKU09OVmFsaWRhdG9yKCksXG4gICAgQEluamVjdChMU19QUkVGSVgpIHByb3RlY3RlZCBMU1ByZWZpeCA9ICcnLFxuICApIHt9XG5cbiAgLyoqXG4gICAqICoqTnVtYmVyIG9mIGl0ZW1zKiogaW4gc3RvcmFnZSwgd3JhcHBlZCBpbiBhbiBgT2JzZXJ2YWJsZWAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHRoaXMuc3RvcmFnZU1hcC5zaXplLnN1YnNjcmliZSgoc2l6ZSkgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKHNpemUpO1xuICAgKiB9KTtcbiAgICovXG4gIGdldCBzaXplKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5zaXplXG4gICAgICAvKiBDYXRjaCBpZiBgaW5kZXhlZERiYCBpcyBicm9rZW4gKi9cbiAgICAgIC5waXBlKHRoaXMuY2F0Y2hJREJCcm9rZW4oKCkgPT4gdGhpcy5kYXRhYmFzZS5zaXplKSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBUZWxscyB5b3Ugd2hpY2ggc3RvcmFnZSBlbmdpbmUgaXMgdXNlZC4gKk9ubHkgdXNlZnVsIGZvciBpbnRlcm9wZXJhYmlsaXR5LipcbiAgICogTm90ZSB0aGF0IGR1ZSB0byBzb21lIGJyb3dzZXJzIGlzc3VlcyBpbiBzb21lIHNwZWNpYWwgY29udGV4dHNcbiAgICogKEZpcmVmb3ggcHJpdmF0ZSBtb2RlIGFuZCBTYWZhcmkgY3Jvc3Mtb3JpZ2luIGlmcmFtZXMpLFxuICAgKiAqKnRoaXMgaW5mb3JtYXRpb24gbWF5IGJlIHdyb25nIGF0IGluaXRpYWxpemF0aW9uLCoqXG4gICAqIGFzIHRoZSBzdG9yYWdlIGNvdWxkIGZhbGxiYWNrIGZyb20gYGluZGV4ZWREQmAgdG8gYGxvY2FsU3RvcmFnZWBcbiAgICogb25seSBhZnRlciBhIGZpcnN0IHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9uLlxuICAgKiBAcmV0dXJucyBTdG9yYWdlIGVuZ2luZSB1c2VkXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYXN0ZXIvZG9jcy9JTlRFUk9QRVJBQklMSVRZLm1kfVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBpZiAodGhpcy5zdG9yYWdlTWFwLmJhY2tpbmdFbmdpbmUgPT09ICdpbmRleGVkREInKSB7fVxuICAgKi9cbiAgZ2V0IGJhY2tpbmdFbmdpbmUoKTogJ2luZGV4ZWREQicgfCAnbG9jYWxTdG9yYWdlJyB8wqAnbWVtb3J5JyB8ICd1bmtub3duJyB7XG5cbiAgICBpZiAodGhpcy5kYXRhYmFzZSBpbnN0YW5jZW9mIEluZGV4ZWREQkRhdGFiYXNlKSB7XG5cbiAgICAgIHJldHVybiAnaW5kZXhlZERCJztcblxuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhYmFzZSBpbnN0YW5jZW9mIExvY2FsU3RvcmFnZURhdGFiYXNlKSB7XG5cbiAgICAgIHJldHVybiAnbG9jYWxTdG9yYWdlJztcblxuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhYmFzZSBpbnN0YW5jZW9mIE1lbW9yeURhdGFiYXNlKSB7XG5cbiAgICAgIHJldHVybiAnbWVtb3J5JztcblxuICAgIH0gZWxzZSB7XG5cbiAgICAgIHJldHVybiAndW5rbm93bic7XG5cbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmZvIGFib3V0IGBpbmRleGVkREJgIGRhdGFiYXNlLiAqT25seSB1c2VmdWwgZm9yIGludGVyb3BlcmFiaWxpdHkuKlxuICAgKiBAcmV0dXJucyBgaW5kZXhlZERCYCBkYXRhYmFzZSBuYW1lLCBzdG9yZSBuYW1lIGFuZCBkYXRhYmFzZSB2ZXJzaW9uLlxuICAgKiAqKlZhbHVlcyB3aWxsIGJlIGVtcHR5IGlmIHRoZSBzdG9yYWdlIGlzIG5vdCBgaW5kZXhlZERCYCwqKlxuICAgKiAqKnNvIGl0IHNob3VsZCBiZSB1c2VkIGFmdGVyIGFuIGVuZ2luZSBjaGVjayoqLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvSU5URVJPUEVSQUJJTElUWS5tZH1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogaWYgKHRoaXMuc3RvcmFnZU1hcC5iYWNraW5nRW5naW5lID09PSAnaW5kZXhlZERCJykge1xuICAgKiAgIGNvbnN0IHsgZGF0YWJhc2UsIHN0b3JlLCB2ZXJzaW9uIH0gPSB0aGlzLnN0b3JhZ2VNYXAuYmFja2luZ1N0b3JlO1xuICAgKiB9XG4gICAqL1xuICBnZXQgYmFja2luZ1N0b3JlKCk6IHsgZGF0YWJhc2U6IHN0cmluZywgc3RvcmU6IHN0cmluZywgdmVyc2lvbjogbnVtYmVyIH0ge1xuXG4gICAgcmV0dXJuICh0aGlzLmRhdGFiYXNlIGluc3RhbmNlb2YgSW5kZXhlZERCRGF0YWJhc2UpID9cbiAgICAgIHRoaXMuZGF0YWJhc2UuYmFja2luZ1N0b3JlIDpcbiAgICAgIHsgZGF0YWJhc2U6ICcnLCBzdG9yZTogJycsIHZlcnNpb246IDAgfTtcblxuICB9XG5cbiAgLyoqXG4gICAqIEluZm8gYWJvdXQgYGxvY2FsU3RvcmFnZWAgZmFsbGJhY2sgc3RvcmFnZS4gKk9ubHkgdXNlZnVsIGZvciBpbnRlcm9wZXJhYmlsaXR5LipcbiAgICogQHJldHVybnMgYGxvY2FsU3RvcmFnZWAgcHJlZml4LlxuICAgKiAqKlZhbHVlcyB3aWxsIGJlIGVtcHR5IGlmIHRoZSBzdG9yYWdlIGlzIG5vdCBgbG9jYWxTdG9yYWdlYCwqKlxuICAgKiAqKnNvIGl0IHNob3VsZCBiZSB1c2VkIGFmdGVyIGFuIGVuZ2luZSBjaGVjayoqLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvSU5URVJPUEVSQUJJTElUWS5tZH1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogaWYgKHRoaXMuc3RvcmFnZU1hcC5iYWNraW5nRW5naW5lID09PSAnbG9jYWxTdG9yYWdlJykge1xuICAgKiAgIGNvbnN0IHsgcHJlZml4IH0gPSB0aGlzLnN0b3JhZ2VNYXAuZmFsbGJhY2tCYWNraW5nU3RvcmU7XG4gICAqIH1cbiAgICovXG4gIGdldCBmYWxsYmFja0JhY2tpbmdTdG9yZSgpOiB7IHByZWZpeDogc3RyaW5nIH0ge1xuXG4gICAgcmV0dXJuICh0aGlzLmRhdGFiYXNlIGluc3RhbmNlb2YgTG9jYWxTdG9yYWdlRGF0YWJhc2UpID9cbiAgICAgIHsgcHJlZml4OiB0aGlzLmRhdGFiYXNlLnByZWZpeCB9IDpcbiAgICAgIHsgcHJlZml4OiAnJyB9O1xuXG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGl0ZW0gdmFsdWUgaW4gc3RvcmFnZS5cbiAgICogVGhlIHNpZ25hdHVyZSBoYXMgbWFueSBvdmVybG9hZHMgZHVlIHRvIHZhbGlkYXRpb24sICoqcGxlYXNlIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uLioqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYXN0ZXIvZG9jcy9WQUxJREFUSU9OLm1kfVxuICAgKiBAcGFyYW0ga2V5IFRoZSBpdGVtJ3Mga2V5XG4gICAqIEBwYXJhbSBzY2hlbWEgT3B0aW9uYWwgSlNPTiBzY2hlbWEgdG8gdmFsaWRhdGUgdGhlIGRhdGFcbiAgICogQHJldHVybnMgVGhlIGl0ZW0ncyB2YWx1ZSBpZiB0aGUga2V5IGV4aXN0cywgYHVuZGVmaW5lZGAgb3RoZXJ3aXNlLCB3cmFwcGVkIGluIGEgUnhKUyBgT2JzZXJ2YWJsZWBcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdGhpcy5zdG9yYWdlTWFwLmdldCgna2V5JywgeyB0eXBlOiAnc3RyaW5nJyB9KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgKiAgIHJlc3VsdDsgLy8gc3RyaW5nIG9yIHVuZGVmaW5lZFxuICAgKiB9KTtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogaW50ZXJmYWNlIFVzZXIge1xuICAgKiAgIGZpcnN0TmFtZTogc3RyaW5nO1xuICAgKiAgIGxhc3ROYW1lPzogc3RyaW5nO1xuICAgKiB9XG4gICAqXG4gICAqIGNvbnN0IHNjaGVtYSA9IHtcbiAgICogICB0eXBlOiAnb2JqZWN0JyxcbiAgICogICBwcm9wZXJ0aWVzOiB7XG4gICAqICAgICBmaXJzdE5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICogICAgIGxhc3ROYW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAqICAgfSxcbiAgICogICByZXF1aXJlZDogWydmaXJzdE5hbWUnXVxuICAgKiB9O1xuICAgKlxuICAgKiB0aGlzLnN0b3JhZ2VNYXAuZ2V0PFVzZXI+KCd1c2VyJywgc2NoZW1hKS5zdWJzY3JpYmUoKHVzZXIpID0+IHtcbiAgICogICBpZiAodXNlcikge1xuICAgKiAgICAgdXNlci5maXJzdE5hbWU7XG4gICAqICAgfVxuICAgKiB9KTtcbiAgICovXG4gIGdldDxUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hU3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGNhc3QgaXMgdXNlbGVzcyBoZXJlIGFuZCBkb2Vzbid0IG1hdGNoIHRoZSBKU09OIHNjaGVtYS4gSnVzdCByZW1vdmUgdGhlIGNhc3QuXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYXN0ZXIvZG9jcy9WQUxJREFUSU9OLm1kfVxuICAgKi9cbiAgZ2V0PFQgPSBzdHJpbmc+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFTdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIGdldDxUIGV4dGVuZHMgbnVtYmVyID0gbnVtYmVyPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hSW50ZWdlcsKgfCBKU09OU2NoZW1hTnVtYmVyKTogT2JzZXJ2YWJsZTxudW1iZXIgfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGNhc3QgaXMgdXNlbGVzcyBoZXJlIGFuZCBkb2Vzbid0IG1hdGNoIHRoZSBKU09OIHNjaGVtYS4gSnVzdCByZW1vdmUgdGhlIGNhc3QuXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYXN0ZXIvZG9jcy9WQUxJREFUSU9OLm1kfVxuICAgKi9cbiAgZ2V0PFQgPSBudW1iZXI+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFJbnRlZ2VywqB8IEpTT05TY2hlbWFOdW1iZXIpOiBPYnNlcnZhYmxlPG51bWJlciB8IHVuZGVmaW5lZD47XG4gIGdldDxUIGV4dGVuZHMgYm9vbGVhbiA9IGJvb2xlYW4+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFCb29sZWFuKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgdW5kZWZpbmVkPjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBjYXN0IGlzIHVzZWxlc3MgaGVyZSBhbmQgZG9lc24ndCBtYXRjaCB0aGUgSlNPTiBzY2hlbWEuIEp1c3QgcmVtb3ZlIHRoZSBjYXN0LlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvVkFMSURBVElPTi5tZH1cbiAgICovXG4gIGdldDxUID0gYm9vbGVhbj4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUJvb2xlYW4pOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCB1bmRlZmluZWQ+O1xuICBnZXQ8VCBleHRlbmRzIHN0cmluZ1tdID0gc3RyaW5nW10+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFTdHJpbmc+KTogT2JzZXJ2YWJsZTxzdHJpbmdbXSB8IHVuZGVmaW5lZD47XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgY2FzdCBpcyB1c2VsZXNzIGhlcmUgYW5kIGRvZXNuJ3QgbWF0Y2ggdGhlIEpTT04gc2NoZW1hLiBKdXN0IHJlbW92ZSB0aGUgY2FzdC5cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2N5cmlsbGV0dXppL2FuZ3VsYXItYXN5bmMtbG9jYWwtc3RvcmFnZS9ibG9iL21hc3Rlci9kb2NzL1ZBTElEQVRJT04ubWR9XG4gICAqL1xuICBnZXQ8VCA9IHN0cmluZ1tdPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hQXJyYXlPZjxKU09OU2NoZW1hU3RyaW5nPik6IE9ic2VydmFibGU8c3RyaW5nW10gfCB1bmRlZmluZWQ+O1xuICBnZXQ8VCBleHRlbmRzIG51bWJlcltdID0gbnVtYmVyW10+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFJbnRlZ2VywqB8IEpTT05TY2hlbWFOdW1iZXI+KTogT2JzZXJ2YWJsZTxudW1iZXJbXSB8IHVuZGVmaW5lZD47XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgY2FzdCBpcyB1c2VsZXNzIGhlcmUgYW5kIGRvZXNuJ3QgbWF0Y2ggdGhlIEpTT04gc2NoZW1hLiBKdXN0IHJlbW92ZSB0aGUgY2FzdC5cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2N5cmlsbGV0dXppL2FuZ3VsYXItYXN5bmMtbG9jYWwtc3RvcmFnZS9ibG9iL21hc3Rlci9kb2NzL1ZBTElEQVRJT04ubWR9XG4gICAqL1xuICBnZXQ8VCA9IG51bWJlcltdPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hQXJyYXlPZjxKU09OU2NoZW1hSW50ZWdlcsKgfCBKU09OU2NoZW1hTnVtYmVyPik6IE9ic2VydmFibGU8bnVtYmVyW10gfCB1bmRlZmluZWQ+O1xuICBnZXQ8VCBleHRlbmRzIGJvb2xlYW5bXSA9IGJvb2xlYW5bXT4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUFycmF5T2Y8SlNPTlNjaGVtYUJvb2xlYW4+KTogT2JzZXJ2YWJsZTxib29sZWFuW10gfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGNhc3QgaXMgdXNlbGVzcyBoZXJlIGFuZCBkb2Vzbid0IG1hdGNoIHRoZSBKU09OIHNjaGVtYS4gSnVzdCByZW1vdmUgdGhlIGNhc3QuXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYXN0ZXIvZG9jcy9WQUxJREFUSU9OLm1kfVxuICAgKi9cbiAgZ2V0PFQgPSBib29sZWFuW10+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFCb29sZWFuPik6IE9ic2VydmFibGU8Ym9vbGVhbltdIHwgdW5kZWZpbmVkPjtcbiAgZ2V0PFQgPSB1bmtub3duPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hKTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPjtcbiAgZ2V0KGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTx1bmtub3duPjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBjYXN0IGlzIHVzZWxlc3MgaGVyZTogYXMgbm8gSlNPTiBzY2hlbWEgd2FzIHByb3ZpZGVkIGZvciB2YWxpZGF0aW9uLCB0aGUgcmVzdWx0IHdpbGwgc3RpbGwgYmUgYHVua25vd25gLlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvVkFMSURBVElPTi5tZH1cbiAgICovXG4gIGdldDxUPihrZXk6IHN0cmluZywgc2NoZW1hPzogSlNPTlNjaGVtYSk6IE9ic2VydmFibGU8dW5rbm93bj47XG4gIGdldDxUID0gdW5rbm93bj4oa2V5OiBzdHJpbmcsIHNjaGVtYT86IEpTT05TY2hlbWEpOiBPYnNlcnZhYmxlPHVua25vd24+IHtcblxuICAgIC8qIEdldCB0aGUgZGF0YSBpbiBzdG9yYWdlICovXG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZ2V0PFQ+KGtleSkucGlwZShcbiAgICAgIC8qIENoZWNrIGlmIGBpbmRleGVkRGJgIGlzIGJyb2tlbiAqL1xuICAgICAgdGhpcy5jYXRjaElEQkJyb2tlbigoKSA9PiB0aGlzLmRhdGFiYXNlLmdldDxUPihrZXkpKSxcbiAgICAgIG1lcmdlTWFwKChkYXRhKSA9PiB7XG5cbiAgICAgICAgLyogTm8gbmVlZCB0byB2YWxpZGF0ZSBpZiB0aGUgZGF0YSBpcyBlbXB0eSAqL1xuICAgICAgICBpZiAoKGRhdGEgPT09IHVuZGVmaW5lZCkgfHwgKGRhdGEgPT09IG51bGwpKSB7XG5cbiAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcblxuICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYSkge1xuXG4gICAgICAgICAgLyogVmFsaWRhdGUgZGF0YSBhZ2FpbnN0IGEgSlNPTiBzY2hlbWEgaWYgcHJvdmlkZWQgKi9cbiAgICAgICAgICBpZiAoIXRoaXMuanNvblZhbGlkYXRvci52YWxpZGF0ZShkYXRhLCBzY2hlbWEpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXcgVmFsaWRhdGlvbkVycm9yKCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8qIERhdGEgaGF2ZSBiZWVuIGNoZWNrZWQsIHNvIGl0J3MgT0sgdG8gY2FzdCAqL1xuICAgICAgICAgIHJldHVybiBvZihkYXRhIGFzIFQgfCB1bmRlZmluZWQpO1xuXG4gICAgICAgIH1cblxuICAgICAgICAvKiBDYXN0IHRvIHVua25vd24gYXMgdGhlIGRhdGEgd2Fzbid0IGNoZWNrZWQgKi9cbiAgICAgICAgcmV0dXJuIG9mKGRhdGEgYXMgdW5rbm93bik7XG5cbiAgICAgIH0pLFxuICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYW4gaXRlbSBpbiBzdG9yYWdlLlxuICAgKiBOb3RlIHRoYXQgc2V0dGluZyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgd2lsbCByZW1vdmUgdGhlIGl0ZW0gdG8gYXZvaWQgc29tZSBicm93c2VycyBpc3N1ZXMuXG4gICAqIEBwYXJhbSBrZXkgVGhlIGl0ZW0ncyBrZXlcbiAgICogQHBhcmFtIGRhdGEgVGhlIGl0ZW0ncyB2YWx1ZVxuICAgKiBAcGFyYW0gc2NoZW1hIE9wdGlvbmFsIEpTT04gc2NoZW1hIHRvIHZhbGlkYXRlIHRoZSBkYXRhXG4gICAqIEByZXR1cm5zIEEgUnhKUyBgT2JzZXJ2YWJsZWAgdG8gd2FpdCB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdGhpcy5zdG9yYWdlTWFwLnNldCgna2V5JywgJ3ZhbHVlJykuc3Vic2NyaWJlKCgpID0+IHt9KTtcbiAgICovXG4gIHNldChrZXk6IHN0cmluZywgZGF0YTogdW5rbm93biwgc2NoZW1hPzogSlNPTlNjaGVtYSk6IE9ic2VydmFibGU8dW5kZWZpbmVkPiB7XG5cbiAgICAvKiBTdG9yaW5nIGB1bmRlZmluZWRgIG9yIGBudWxsYCBpcyB1c2VsZXNzIGFuZCBjYW4gY2F1c2UgaXNzdWVzIGluIGBpbmRleGVkRGJgIGluIHNvbWUgYnJvd3NlcnMsXG4gICAgICogc28gcmVtb3ZpbmcgaXRlbSBpbnN0ZWFkIGZvciBhbGwgc3RvcmFnZXMgdG8gaGF2ZSBhIGNvbnNpc3RlbnQgQVBJICovXG4gICAgaWYgKChkYXRhID09PSB1bmRlZmluZWQpIHx8IChkYXRhID09PSBudWxsKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVsZXRlKGtleSk7XG4gICAgfVxuXG4gICAgLyogVmFsaWRhdGUgZGF0YSBhZ2FpbnN0IGEgSlNPTiBzY2hlbWEgaWYgcHJvdmlkZWQgKi9cbiAgICBpZiAoc2NoZW1hICYmICF0aGlzLmpzb25WYWxpZGF0b3IudmFsaWRhdGUoZGF0YSwgc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIHRocm93RXJyb3IobmV3IFZhbGlkYXRpb25FcnJvcigpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5zZXQoa2V5LCBkYXRhKS5waXBlKFxuICAgICAgLyogQ2F0Y2ggaWYgYGluZGV4ZWREYmAgaXMgYnJva2VuICovXG4gICAgICB0aGlzLmNhdGNoSURCQnJva2VuKCgpID0+IHRoaXMuZGF0YWJhc2Uuc2V0KGtleSwgZGF0YSkpLFxuICAgICAgLyogTm90aWZ5IHdhdGNoZXJzIChtdXN0IGJlIGxhc3QgYmVjYXVzZSBpdCBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkcykgKi9cbiAgICAgIHRhcCgoKSA9PiB7IHRoaXMubm90aWZ5KGtleSwgZGF0YSk7IH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGFuIGl0ZW0gaW4gc3RvcmFnZVxuICAgKiBAcGFyYW0ga2V5IFRoZSBpdGVtJ3Mga2V5XG4gICAqIEByZXR1cm5zIEEgUnhKUyBgT2JzZXJ2YWJsZWAgdG8gd2FpdCB0aGUgZW5kIG9mIHRoZSBvcGVyYXRpb25cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdGhpcy5zdG9yYWdlTWFwLmRlbGV0ZSgna2V5Jykuc3Vic2NyaWJlKCgpID0+IHt9KTtcbiAgICovXG4gIGRlbGV0ZShrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8dW5kZWZpbmVkPiB7XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5kZWxldGUoa2V5KS5waXBlKFxuICAgICAgLyogQ2F0Y2ggaWYgYGluZGV4ZWREYmAgaXMgYnJva2VuICovXG4gICAgICB0aGlzLmNhdGNoSURCQnJva2VuKCgpID0+IHRoaXMuZGF0YWJhc2UuZGVsZXRlKGtleSkpLFxuICAgICAgLyogTm90aWZ5IHdhdGNoZXJzIChtdXN0IGJlIGxhc3QgYmVjYXVzZSBpdCBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkcykgKi9cbiAgICAgIHRhcCgoKSA9PiB7IHRoaXMubm90aWZ5KGtleSwgdW5kZWZpbmVkKTsgfSksXG4gICAgKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbGwgaXRlbXMgaW4gc3RvcmFnZVxuICAgKiBAcmV0dXJucyBBIFJ4SlMgYE9ic2VydmFibGVgIHRvIHdhaXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHRoaXMuc3RvcmFnZU1hcC5jbGVhcigpLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gICAqL1xuICBjbGVhcigpOiBPYnNlcnZhYmxlPHVuZGVmaW5lZD4ge1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuY2xlYXIoKS5waXBlKFxuICAgICAgLyogQ2F0Y2ggaWYgYGluZGV4ZWREYmAgaXMgYnJva2VuICovXG4gICAgICB0aGlzLmNhdGNoSURCQnJva2VuKCgpID0+IHRoaXMuZGF0YWJhc2UuY2xlYXIoKSksXG4gICAgICAvKiBOb3RpZnkgd2F0Y2hlcnMgKG11c3QgYmUgbGFzdCBiZWNhdXNlIGl0IHNob3VsZCBvbmx5IGhhcHBlbiBpZiB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRzKSAqL1xuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5ub3RpZmllcnMua2V5cygpKSB7XG4gICAgICAgICAgdGhpcy5ub3RpZnkoa2V5LCB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICApO1xuXG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBrZXlzIHN0b3JlZCBpbiBzdG9yYWdlLiBOb3RlICoqdGhpcyBpcyBhbiAqaXRlcmF0aW5nKiBgT2JzZXJ2YWJsZWAqKjpcbiAgICogKiBpZiB0aGVyZSBpcyBubyBrZXksIHRoZSBgbmV4dGAgY2FsbGJhY2sgd2lsbCBub3QgYmUgaW52b2tlZCxcbiAgICogKiBpZiB5b3UgbmVlZCB0byB3YWl0IHRoZSB3aG9sZSBvcGVyYXRpb24gdG8gZW5kLCBiZSBzdXJlIHRvIGFjdCBpbiB0aGUgYGNvbXBsZXRlYCBjYWxsYmFjayxcbiAgICogYXMgdGhpcyBgT2JzZXJ2YWJsZWAgY2FuIGVtaXQgc2V2ZXJhbCB2YWx1ZXMgYW5kIHNvIHdpbGwgaW52b2tlIHRoZSBgbmV4dGAgY2FsbGJhY2sgc2V2ZXJhbCB0aW1lcy5cbiAgICogQHJldHVybnMgQSBsaXN0IG9mIHRoZSBrZXlzIHdyYXBwZWQgaW4gYSBSeEpTIGBPYnNlcnZhYmxlYFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB0aGlzLnN0b3JhZ2VNYXAua2V5cygpLnN1YnNjcmliZSh7XG4gICAqICAgbmV4dDogKGtleSkgPT4geyBjb25zb2xlLmxvZyhrZXkpOyB9LFxuICAgKiAgIGNvbXBsZXRlOiAoKSA9PiB7IGNvbnNvbGUubG9nKCdEb25lJyk7IH0sXG4gICAqIH0pO1xuICAgKi9cbiAga2V5cygpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2Uua2V5cygpXG4gICAgICAvKiBDYXRjaCBpZiBgaW5kZXhlZERiYCBpcyBicm9rZW4gKi9cbiAgICAgIC5waXBlKHRoaXMuY2F0Y2hJREJCcm9rZW4oKCkgPT4gdGhpcy5kYXRhYmFzZS5rZXlzKCkpKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFRlbGxzIGlmIGEga2V5IGV4aXN0cyBpbiBzdG9yYWdlXG4gICAqIEByZXR1cm5zIEEgUnhKUyBgT2JzZXJ2YWJsZWAgdGVsbGluZyBpZiB0aGUga2V5IGV4aXN0c1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB0aGlzLnN0b3JhZ2VNYXAuaGFzKCdrZXknKS5zdWJzY3JpYmUoKGhhc0tleSkgPT4ge1xuICAgKiAgIGlmIChoYXNLZXkpIHt9XG4gICAqIH0pO1xuICAgKi9cbiAgaGFzKGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5oYXMoa2V5KVxuICAgICAgLyogQ2F0Y2ggaWYgYGluZGV4ZWREYmAgaXMgYnJva2VuICovXG4gICAgICAucGlwZSh0aGlzLmNhdGNoSURCQnJva2VuKCgpID0+IHRoaXMuZGF0YWJhc2UuaGFzKGtleSkpKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFdhdGNoIGFuIGl0ZW0gdmFsdWUgaW4gc3RvcmFnZS5cbiAgICogKipOb3RlIG9ubHkgY2hhbmdlcyBkb25lIHZpYSB0aGlzIGxpYiB3aWxsIGJlIHdhdGNoZWQqKiwgZXh0ZXJuYWwgY2hhbmdlcyBpbiBzdG9yYWdlIGNhbid0IGJlIGRldGVjdGVkLlxuICAgKiBUaGUgc2lnbmF0dXJlIGhhcyBtYW55IG92ZXJsb2FkcyBkdWUgdG8gdmFsaWRhdGlvbiwgKipwbGVhc2UgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24uKipcbiAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvVkFMSURBVElPTi5tZFxuICAgKiBAcGFyYW0ga2V5IFRoZSBpdGVtJ3Mga2V5IHRvIHdhdGNoXG4gICAqIEBwYXJhbSBzY2hlbWEgT3B0aW9uYWwgSlNPTiBzY2hlbWEgdG8gdmFsaWRhdGUgdGhlIGluaXRpYWwgdmFsdWVcbiAgICogQHJldHVybnMgQW4gaW5maW5pdGUgYE9ic2VydmFibGVgIGdpdmluZyB0aGUgY3VycmVudCB2YWx1ZVxuICAgKi9cbiAgd2F0Y2g8VCBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYVN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBjYXN0IGlzIHVzZWxlc3MgaGVyZSBhbmQgZG9lc24ndCBtYXRjaCB0aGUgSlNPTiBzY2hlbWEuIEp1c3QgcmVtb3ZlIHRoZSBjYXN0LlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvVkFMSURBVElPTi5tZH1cbiAgICovXG4gIHdhdGNoPFQgPSBzdHJpbmc+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFTdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD47XG4gIHdhdGNoPFQgZXh0ZW5kcyBudW1iZXIgPSBudW1iZXI+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFJbnRlZ2VywqB8IEpTT05TY2hlbWFOdW1iZXIpOiBPYnNlcnZhYmxlPG51bWJlciB8IHVuZGVmaW5lZD47XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgY2FzdCBpcyB1c2VsZXNzIGhlcmUgYW5kIGRvZXNuJ3QgbWF0Y2ggdGhlIEpTT04gc2NoZW1hLiBKdXN0IHJlbW92ZSB0aGUgY2FzdC5cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2N5cmlsbGV0dXppL2FuZ3VsYXItYXN5bmMtbG9jYWwtc3RvcmFnZS9ibG9iL21hc3Rlci9kb2NzL1ZBTElEQVRJT04ubWR9XG4gICAqL1xuICB3YXRjaDxUID0gbnVtYmVyPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hSW50ZWdlciB8IEpTT05TY2hlbWFOdW1iZXIpOiBPYnNlcnZhYmxlPG51bWJlciB8IHVuZGVmaW5lZD47XG4gIHdhdGNoPFQgZXh0ZW5kcyBib29sZWFuID0gYm9vbGVhbj4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUJvb2xlYW4pOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGNhc3QgaXMgdXNlbGVzcyBoZXJlIGFuZCBkb2Vzbid0IG1hdGNoIHRoZSBKU09OIHNjaGVtYS4gSnVzdCByZW1vdmUgdGhlIGNhc3QuXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYXN0ZXIvZG9jcy9WQUxJREFUSU9OLm1kfVxuICAgKi9cbiAgd2F0Y2g8VCA9IGJvb2xlYW4+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFCb29sZWFuKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgdW5kZWZpbmVkPjtcbiAgd2F0Y2g8VCBleHRlbmRzIHN0cmluZ1tdID0gc3RyaW5nW10+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFTdHJpbmc+KTogT2JzZXJ2YWJsZTxzdHJpbmdbXSB8IHVuZGVmaW5lZD47XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgY2FzdCBpcyB1c2VsZXNzIGhlcmUgYW5kIGRvZXNuJ3QgbWF0Y2ggdGhlIEpTT04gc2NoZW1hLiBKdXN0IHJlbW92ZSB0aGUgY2FzdC5cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2N5cmlsbGV0dXppL2FuZ3VsYXItYXN5bmMtbG9jYWwtc3RvcmFnZS9ibG9iL21hc3Rlci9kb2NzL1ZBTElEQVRJT04ubWR9XG4gICAqL1xuICB3YXRjaDxUID0gc3RyaW5nW10+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFTdHJpbmc+KTogT2JzZXJ2YWJsZTxzdHJpbmdbXSB8IHVuZGVmaW5lZD47XG4gIHdhdGNoPFQgZXh0ZW5kcyBudW1iZXJbXSA9IG51bWJlcltdPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hQXJyYXlPZjxKU09OU2NoZW1hSW50ZWdlcsKgfCBKU09OU2NoZW1hTnVtYmVyPik6IE9ic2VydmFibGU8bnVtYmVyW10gfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGNhc3QgaXMgdXNlbGVzcyBoZXJlIGFuZCBkb2Vzbid0IG1hdGNoIHRoZSBKU09OIHNjaGVtYS4gSnVzdCByZW1vdmUgdGhlIGNhc3QuXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYXN0ZXIvZG9jcy9WQUxJREFUSU9OLm1kfVxuICAgKi9cbiAgd2F0Y2g8VCA9IG51bWJlcltdPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hQXJyYXlPZjxKU09OU2NoZW1hSW50ZWdlciB8IEpTT05TY2hlbWFOdW1iZXI+KTogT2JzZXJ2YWJsZTxudW1iZXJbXSB8IHVuZGVmaW5lZD47XG4gIHdhdGNoPFQgZXh0ZW5kcyBib29sZWFuW10gPSBib29sZWFuW10+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFCb29sZWFuPik6IE9ic2VydmFibGU8Ym9vbGVhbltdIHwgdW5kZWZpbmVkPjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBjYXN0IGlzIHVzZWxlc3MgaGVyZSBhbmQgZG9lc24ndCBtYXRjaCB0aGUgSlNPTiBzY2hlbWEuIEp1c3QgcmVtb3ZlIHRoZSBjYXN0LlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvVkFMSURBVElPTi5tZH1cbiAgICovXG4gIHdhdGNoPFQgPSBib29sZWFuW10+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFCb29sZWFuPik6IE9ic2VydmFibGU8Ym9vbGVhbltdIHwgdW5kZWZpbmVkPjtcbiAgd2F0Y2g8VCA9IHVua25vd24+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWEpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+O1xuICB3YXRjaChrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8dW5rbm93bj47XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgY2FzdCBpcyB1c2VsZXNzIGhlcmU6IGFzIG5vIEpTT04gc2NoZW1hIHdhcyBwcm92aWRlZCBmb3IgdmFsaWRhdGlvbiwgdGhlIHJlc3VsdCB3aWxsIHN0aWxsIGJlIGB1bmtub3duYC5cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2N5cmlsbGV0dXppL2FuZ3VsYXItYXN5bmMtbG9jYWwtc3RvcmFnZS9ibG9iL21hc3Rlci9kb2NzL1ZBTElEQVRJT04ubWR9XG4gICAqL1xuICB3YXRjaDxUPihrZXk6IHN0cmluZywgc2NoZW1hPzogSlNPTlNjaGVtYSk6IE9ic2VydmFibGU8dW5rbm93bj47XG4gIHdhdGNoPFQgPSB1bmtub3duPihrZXk6IHN0cmluZywgc2NoZW1hPzogSlNPTlNjaGVtYSk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuXG4gICAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIG5vdGlmaWVyIGFuZCBjYXN0IGFjY29yZGluZyB0byBzY2hlbWEgKi9cbiAgICBsZXQgbm90aWZpZXIgPSB0aGlzLm5vdGlmaWVycy5nZXQoa2V5KSBhcyBSZXBsYXlTdWJqZWN0PHR5cGVvZiBzY2hlbWEgZXh0ZW5kcyBKU09OU2NoZW1hID8gKFQgfCB1bmRlZmluZWQpIDogdW5rbm93bj47XG5cbiAgICBpZiAoIW5vdGlmaWVyKSB7XG5cbiAgICAgIC8qIENyZWF0ZSBhIG5vdGlmaWVyIGFuZCBjYXN0IGFjY29yZGluZyB0byBzY2hlbWEgKi9cbiAgICAgIG5vdGlmaWVyID0gbmV3IFJlcGxheVN1YmplY3Q8dHlwZW9mIHNjaGVtYSBleHRlbmRzIEpTT05TY2hlbWEgPyAoVCB8IHVuZGVmaW5lZCkgOiB1bmtub3duPigxKTtcblxuICAgICAgLyogTWVtb3JpemUgdGhlIG5vdGlmaWVyICovXG4gICAgICB0aGlzLm5vdGlmaWVycy5zZXQoa2V5LCBub3RpZmllcik7XG5cbiAgICAgIC8qIEdldCB0aGUgY3VycmVudCBpdGVtIHZhbHVlICovXG4gICAgICAoc2NoZW1hID8gdGhpcy5nZXQ8VD4oa2V5LCBzY2hlbWEpIDogdGhpcy5nZXQoa2V5KSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3VsdCkgPT4gbm90aWZpZXIubmV4dChyZXN1bHQpLFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiBub3RpZmllci5lcnJvcihlcnJvciksXG4gICAgICB9KTtcblxuICAgIH1cblxuICAgIC8qIE9ubHkgdGhlIHB1YmxpYyBBUEkgb2YgdGhlIGBPYnNlcnZhYmxlYCBzaG91bGQgYmUgcmV0dXJuZWQgKi9cbiAgICByZXR1cm4gbm90aWZpZXIuYXNPYnNlcnZhYmxlKCk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZnkgd2hlbiBhIHZhbHVlIGNoYW5nZXNcbiAgICogQHBhcmFtIGtleSBUaGUgaXRlbSdzIGtleVxuICAgKiBAcGFyYW0gZGF0YSBUaGUgbmV3IHZhbHVlXG4gICAqL1xuICBwcm90ZWN0ZWQgbm90aWZ5KGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuXG4gICAgY29uc3Qgbm90aWZpZXIgPSB0aGlzLm5vdGlmaWVycy5nZXQoa2V5KTtcblxuICAgIGlmIChub3RpZmllcikge1xuICAgICAgbm90aWZpZXIubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogUnhKUyBvcGVyYXRvciB0byBjYXRjaCBpZiBgaW5kZXhlZERCYCBpcyBicm9rZW5cbiAgICogQHBhcmFtIG9wZXJhdGlvbkNhbGxiYWNrIENhbGxiYWNrIHdpdGggdGhlIG9wZXJhdGlvbiB0byByZWRvXG4gICAqL1xuICBwcm90ZWN0ZWQgY2F0Y2hJREJCcm9rZW48VD4ob3BlcmF0aW9uQ2FsbGJhY2s6ICgpID0+IE9ic2VydmFibGU8VD4pOiBPcGVyYXRvckZ1bmN0aW9uPFQsIFQ+IHtcblxuICAgIHJldHVybiBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuXG4gICAgICAvKiBDaGVjayBpZiBgaW5kZXhlZERCYCBpcyBicm9rZW4gYmFzZWQgb24gZXJyb3IgbWVzc2FnZSAodGhlIHNwZWNpZmljIGVycm9yIGNsYXNzIHNlZW1zIHRvIGJlIGxvc3QgaW4gdGhlIHByb2Nlc3MpICovXG4gICAgICBpZiAoKGVycm9yICE9PSB1bmRlZmluZWQpICYmIChlcnJvciAhPT0gbnVsbCkgJiYgKGVycm9yLm1lc3NhZ2UgPT09IElEQl9CUk9LRU5fRVJST1IpKSB7XG5cbiAgICAgICAgLyogV2hlbiBzdG9yYWdlIGlzIGZ1bGx5IGRpc2FibGVkIGluIGJyb3dzZXIgKHZpYSB0aGUgXCJCbG9jayBhbGwgY29va2llc1wiIG9wdGlvbiksXG4gICAgICAgICAqIGp1c3QgdHJ5aW5nIHRvIGNoZWNrIGBsb2NhbFN0b3JhZ2VgIHZhcmlhYmxlIGNhdXNlcyBhIHNlY3VyaXR5IGV4Y2VwdGlvbi5cbiAgICAgICAgICogUHJldmVudHMgaHR0cHM6Ly9naXRodWIuY29tL2N5cmlsbGV0dXppL2FuZ3VsYXItYXN5bmMtbG9jYWwtc3RvcmFnZS9pc3N1ZXMvMTE4XG4gICAgICAgICAqL1xuICAgICAgICB0cnkge1xuXG4gICAgICAgICAgaWYgKCdnZXRJdGVtJyBpbiBsb2NhbFN0b3JhZ2UpIHtcblxuICAgICAgICAgICAgLyogRmFsbGJhY2sgdG8gYGxvY2FsU3RvcmFnZWAgaWYgYXZhaWxhYmxlICovXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlID0gbmV3IExvY2FsU3RvcmFnZURhdGFiYXNlKHRoaXMuTFNQcmVmaXgpO1xuXG4gICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgLyogRmFsbGJhY2sgdG8gbWVtb3J5IHN0b3JhZ2Ugb3RoZXJ3aXNlICovXG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlID0gbmV3IE1lbW9yeURhdGFiYXNlKCk7XG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBjYXRjaCB7XG5cbiAgICAgICAgICAvKiBGYWxsYmFjayB0byBtZW1vcnkgc3RvcmFnZSBvdGhlcndpc2UgKi9cbiAgICAgICAgICB0aGlzLmRhdGFiYXNlID0gbmV3IE1lbW9yeURhdGFiYXNlKCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIC8qIFJlZG8gdGhlIG9wZXJhdGlvbiAqL1xuICAgICAgICByZXR1cm4gb3BlcmF0aW9uQ2FsbGJhY2soKTtcblxuICAgICAgfSBlbHNlIHtcblxuICAgICAgICAvKiBPdGhlcndpc2UsIHJldGhyb3cgdGhlIGVycm9yICovXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcblxuICAgICAgfVxuXG4gICAgfSk7XG5cbiAgfVxuXG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS1tYXAuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvY3lyaWxsZS9XZWIvb3BlbnNvdXJjZS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvcHJvamVjdHMvbmd4LXB3YS9sb2NhbC1zdG9yYWdlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9zdG9yYWdlcy9zdG9yYWdlLW1hcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBYyxVQUFVLEVBQUUsRUFBRSxFQUFvQixhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkYsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDOzs7OztBQUsvQyxNQUFNLE9BQU8sVUFBVTtJQUlyQjs7Ozs7T0FLRztJQUNILFlBQ1ksUUFBdUIsRUFDdkIsZ0JBQStCLElBQUksYUFBYSxFQUFFLEVBQy9CLFdBQVcsRUFBRTtRQUZoQyxhQUFRLEdBQVIsUUFBUSxDQUFlO1FBQ3ZCLGtCQUFhLEdBQWIsYUFBYSxDQUFx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QkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBRXpEO3lCQUFNO3dCQUVMLDBDQUEwQzt3QkFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO3FCQUV0QztpQkFFRjtnQkFBQyxXQUFNO29CQUVOLDBDQUEwQztvQkFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO2lCQUV0QztnQkFFRCx3QkFBd0I7Z0JBQ3hCLE9BQU8saUJBQWlCLEVBQUUsQ0FBQzthQUU1QjtpQkFBTTtnQkFFTCxrQ0FBa0M7Z0JBQ2xDLE9BQU8sVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBRTFCO1FBRUgsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDOzs7O1lBM2RGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7O1lBUFEsYUFBYTtZQUpiLGFBQWE7NENBeUJqQixNQUFNLFNBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciwgb2YsIE9wZXJhdG9yRnVuY3Rpb24sIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lcmdlTWFwLCBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIEpTT05TY2hlbWEsIEpTT05TY2hlbWFCb29sZWFuLCBKU09OU2NoZW1hSW50ZWdlcixcbiAgSlNPTlNjaGVtYU51bWJlciwgSlNPTlNjaGVtYVN0cmluZywgSlNPTlNjaGVtYUFycmF5T2Zcbn0gZnJvbSAnLi4vdmFsaWRhdGlvbi9qc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBKU09OVmFsaWRhdG9yIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi9qc29uLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBJbmRleGVkREJEYXRhYmFzZSB9IGZyb20gJy4uL2RhdGFiYXNlcy9pbmRleGVkZGItZGF0YWJhc2UnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlRGF0YWJhc2UgfSBmcm9tICcuLi9kYXRhYmFzZXMvbG9jYWxzdG9yYWdlLWRhdGFiYXNlJztcbmltcG9ydCB7IE1lbW9yeURhdGFiYXNlIH0gZnJvbSAnLi4vZGF0YWJhc2VzL21lbW9yeS1kYXRhYmFzZSc7XG5pbXBvcnQgeyBMb2NhbERhdGFiYXNlIH0gZnJvbSAnLi4vZGF0YWJhc2VzL2xvY2FsLWRhdGFiYXNlJztcbmltcG9ydCB7IElEQl9CUk9LRU5fRVJST1IgfSBmcm9tICcuLi9kYXRhYmFzZXMvZXhjZXB0aW9ucyc7XG5pbXBvcnQgeyBMU19QUkVGSVggfSBmcm9tICcuLi90b2tlbnMnO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi9leGNlcHRpb25zJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU3RvcmFnZU1hcCB7XG5cbiAgcHJvdGVjdGVkIG5vdGlmaWVycyA9IG5ldyBNYXA8c3RyaW5nLCBSZXBsYXlTdWJqZWN0PHVua25vd24+PigpO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvciBwYXJhbXMgYXJlIHByb3ZpZGVkIGJ5IEFuZ3VsYXIgKGJ1dCBjYW4gYWxzbyBiZSBwYXNzZWQgbWFudWFsbHkgaW4gdGVzdHMpXG4gICAqIEBwYXJhbSBkYXRhYmFzZSBTdG9yYWdlIHRvIHVzZVxuICAgKiBAcGFyYW0ganNvblZhbGlkYXRvciBWYWxpZGF0b3Igc2VydmljZVxuICAgKiBAcGFyYW0gTFNQcmVmaXggUHJlZml4IGZvciBgbG9jYWxTdG9yYWdlYCBrZXlzIHRvIGF2b2lkIGNvbGxpc2lvbiBmb3IgbXVsdGlwbGUgYXBwcyBvbiB0aGUgc2FtZSBzdWJkb21haW4gb3IgZm9yIGludGVyb3BlcmFiaWxpdHlcbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBkYXRhYmFzZTogTG9jYWxEYXRhYmFzZSxcbiAgICBwcm90ZWN0ZWQganNvblZhbGlkYXRvcjogSlNPTlZhbGlkYXRvciA9IG5ldyBKU09OVmFsaWRhdG9yKCksXG4gICAgQEluamVjdChMU19QUkVGSVgpIHByb3RlY3RlZCBMU1ByZWZpeCA9ICcnLFxuICApIHt9XG5cbiAgLyoqXG4gICAqICoqTnVtYmVyIG9mIGl0ZW1zKiogaW4gc3RvcmFnZSwgd3JhcHBlZCBpbiBhbiBgT2JzZXJ2YWJsZWAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHRoaXMuc3RvcmFnZU1hcC5zaXplLnN1YnNjcmliZSgoc2l6ZSkgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKHNpemUpO1xuICAgKiB9KTtcbiAgICovXG4gIGdldCBzaXplKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG5cbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5zaXplXG4gICAgICAvKiBDYXRjaCBpZiBgaW5kZXhlZERiYCBpcyBicm9rZW4gKi9cbiAgICAgIC5waXBlKHRoaXMuY2F0Y2hJREJCcm9rZW4oKCkgPT4gdGhpcy5kYXRhYmFzZS5zaXplKSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBUZWxscyB5b3Ugd2hpY2ggc3RvcmFnZSBlbmdpbmUgaXMgdXNlZC4gKk9ubHkgdXNlZnVsIGZvciBpbnRlcm9wZXJhYmlsaXR5LipcbiAgICogTm90ZSB0aGF0IGR1ZSB0byBzb21lIGJyb3dzZXJzIGlzc3VlcyBpbiBzb21lIHNwZWNpYWwgY29udGV4dHNcbiAgICogKEZpcmVmb3ggcHJpdmF0ZSBtb2RlIGFuZCBTYWZhcmkgY3Jvc3Mtb3JpZ2luIGlmcmFtZXMpLFxuICAgKiAqKnRoaXMgaW5mb3JtYXRpb24gbWF5IGJlIHdyb25nIGF0IGluaXRpYWxpemF0aW9uLCoqXG4gICAqIGFzIHRoZSBzdG9yYWdlIGNvdWxkIGZhbGxiYWNrIGZyb20gYGluZGV4ZWREQmAgdG8gYGxvY2FsU3RvcmFnZWBcbiAgICogb25seSBhZnRlciBhIGZpcnN0IHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9uLlxuICAgKiBAcmV0dXJucyBTdG9yYWdlIGVuZ2luZSB1c2VkXG4gICAqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYXN0ZXIvZG9jcy9JTlRFUk9QRVJBQklMSVRZLm1kfVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBpZiAodGhpcy5zdG9yYWdlTWFwLmJhY2tpbmdFbmdpbmUgPT09ICdpbmRleGVkREInKSB7fVxuICAgKi9cbiAgZ2V0IGJhY2tpbmdFbmdpbmUoKTogJ2luZGV4ZWREQicgfCAnbG9jYWxTdG9yYWdlJyB8wqAnbWVtb3J5JyB8ICd1bmtub3duJyB7XG5cbiAgICBpZiAodGhpcy5kYXRhYmFzZSBpbnN0YW5jZW9mIEluZGV4ZWREQkRhdGFiYXNlKSB7XG5cbiAgICAgIHJldHVybiAnaW5kZXhlZERCJztcblxuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhYmFzZSBpbnN0YW5jZW9mIExvY2FsU3RvcmFnZURhdGFiYXNlKSB7XG5cbiAgICAgIHJldHVybiAnbG9jYWxTdG9yYWdlJztcblxuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRhYmFzZSBpbnN0YW5jZW9mIE1lbW9yeURhdGFiYXNlKSB7XG5cbiAgICAgIHJldHVybiAnbWVtb3J5JztcblxuICAgIH0gZWxzZSB7XG5cbiAgICAgIHJldHVybiAndW5rbm93bic7XG5cbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmZvIGFib3V0IGBpbmRleGVkREJgIGRhdGFiYXNlLiAqT25seSB1c2VmdWwgZm9yIGludGVyb3BlcmFiaWxpdHkuKlxuICAgKiBAcmV0dXJucyBgaW5kZXhlZERCYCBkYXRhYmFzZSBuYW1lLCBzdG9yZSBuYW1lIGFuZCBkYXRhYmFzZSB2ZXJzaW9uLlxuICAgKiAqKlZhbHVlcyB3aWxsIGJlIGVtcHR5IGlmIHRoZSBzdG9yYWdlIGlzIG5vdCBgaW5kZXhlZERCYCwqKlxuICAgKiAqKnNvIGl0IHNob3VsZCBiZSB1c2VkIGFmdGVyIGFuIGVuZ2luZSBjaGVjayoqLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvSU5URVJPUEVSQUJJTElUWS5tZH1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogaWYgKHRoaXMuc3RvcmFnZU1hcC5iYWNraW5nRW5naW5lID09PSAnaW5kZXhlZERCJykge1xuICAgKiAgIGNvbnN0IHsgZGF0YWJhc2UsIHN0b3JlLCB2ZXJzaW9uIH0gPSB0aGlzLnN0b3JhZ2VNYXAuYmFja2luZ1N0b3JlO1xuICAgKiB9XG4gICAqL1xuICBnZXQgYmFja2luZ1N0b3JlKCk6IHsgZGF0YWJhc2U6IHN0cmluZywgc3RvcmU6IHN0cmluZywgdmVyc2lvbjogbnVtYmVyIH0ge1xuXG4gICAgcmV0dXJuICh0aGlzLmRhdGFiYXNlIGluc3RhbmNlb2YgSW5kZXhlZERCRGF0YWJhc2UpID9cbiAgICAgIHRoaXMuZGF0YWJhc2UuYmFja2luZ1N0b3JlIDpcbiAgICAgIHsgZGF0YWJhc2U6ICcnLCBzdG9yZTogJycsIHZlcnNpb246IDAgfTtcblxuICB9XG5cbiAgLyoqXG4gICAqIEluZm8gYWJvdXQgYGxvY2FsU3RvcmFnZWAgZmFsbGJhY2sgc3RvcmFnZS4gKk9ubHkgdXNlZnVsIGZvciBpbnRlcm9wZXJhYmlsaXR5LipcbiAgICogQHJldHVybnMgYGxvY2FsU3RvcmFnZWAgcHJlZml4LlxuICAgKiAqKlZhbHVlcyB3aWxsIGJlIGVtcHR5IGlmIHRoZSBzdG9yYWdlIGlzIG5vdCBgbG9jYWxTdG9yYWdlYCwqKlxuICAgKiAqKnNvIGl0IHNob3VsZCBiZSB1c2VkIGFmdGVyIGFuIGVuZ2luZSBjaGVjayoqLlxuICAgKlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvSU5URVJPUEVSQUJJTElUWS5tZH1cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogaWYgKHRoaXMuc3RvcmFnZU1hcC5iYWNraW5nRW5naW5lID09PSAnbG9jYWxTdG9yYWdlJykge1xuICAgKiAgIGNvbnN0IHsgcHJlZml4IH0gPSB0aGlzLnN0b3JhZ2VNYXAuZmFsbGJhY2tCYWNraW5nU3RvcmU7XG4gICAqIH1cbiAgICovXG4gIGdldCBmYWxsYmFja0JhY2tpbmdTdG9yZSgpOiB7IHByZWZpeDogc3RyaW5nIH0ge1xuXG4gICAgcmV0dXJuICh0aGlzLmRhdGFiYXNlIGluc3RhbmNlb2YgTG9jYWxTdG9yYWdlRGF0YWJhc2UpID9cbiAgICAgIHsgcHJlZml4OiB0aGlzLmRhdGFiYXNlLnByZWZpeCB9IDpcbiAgICAgIHsgcHJlZml4OiAnJyB9O1xuXG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGl0ZW0gdmFsdWUgaW4gc3RvcmFnZS5cbiAgICogVGhlIHNpZ25hdHVyZSBoYXMgbWFueSBvdmVybG9hZHMgZHVlIHRvIHZhbGlkYXRpb24sICoqcGxlYXNlIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uLioqXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYXN0ZXIvZG9jcy9WQUxJREFUSU9OLm1kfVxuICAgKiBAcGFyYW0ga2V5IFRoZSBpdGVtJ3Mga2V5XG4gICAqIEBwYXJhbSBzY2hlbWEgT3B0aW9uYWwgSlNPTiBzY2hlbWEgdG8gdmFsaWRhdGUgdGhlIGRhdGFcbiAgICogQHJldHVybnMgVGhlIGl0ZW0ncyB2YWx1ZSBpZiB0aGUga2V5IGV4aXN0cywgYHVuZGVmaW5lZGAgb3RoZXJ3aXNlLCB3cmFwcGVkIGluIGEgUnhKUyBgT2JzZXJ2YWJsZWBcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdGhpcy5zdG9yYWdlTWFwLmdldCgna2V5JywgeyB0eXBlOiAnc3RyaW5nJyB9KS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgKiAgIHJlc3VsdDsgLy8gc3RyaW5nIG9yIHVuZGVmaW5lZFxuICAgKiB9KTtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogaW50ZXJmYWNlIFVzZXIge1xuICAgKiAgIGZpcnN0TmFtZTogc3RyaW5nO1xuICAgKiAgIGxhc3ROYW1lPzogc3RyaW5nO1xuICAgKiB9XG4gICAqXG4gICAqIGNvbnN0IHNjaGVtYSA9IHtcbiAgICogICB0eXBlOiAnb2JqZWN0JyxcbiAgICogICBwcm9wZXJ0aWVzOiB7XG4gICAqICAgICBmaXJzdE5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICogICAgIGxhc3ROYW1lOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAqICAgfSxcbiAgICogICByZXF1aXJlZDogWydmaXJzdE5hbWUnXVxuICAgKiB9O1xuICAgKlxuICAgKiB0aGlzLnN0b3JhZ2VNYXAuZ2V0PFVzZXI+KCd1c2VyJywgc2NoZW1hKS5zdWJzY3JpYmUoKHVzZXIpID0+IHtcbiAgICogICBpZiAodXNlcikge1xuICAgKiAgICAgdXNlci5maXJzdE5hbWU7XG4gICAqICAgfVxuICAgKiB9KTtcbiAgICovXG4gIGdldDxUIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hU3RyaW5nKTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBjYXN0IGlzIHVzZWxlc3MgaGVyZSBhbmQgZG9lc24ndCBtYXRjaCB0aGUgSlNPTiBzY2hlbWEuIEp1c3QgcmVtb3ZlIHRoZSBjYXN0LlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvVkFMSURBVElPTi5tZH1cbiAgICovXG4gIGdldDxUID0gc3RyaW5nPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hU3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+O1xuICBnZXQ8VCBleHRlbmRzIG51bWJlciA9IG51bWJlcj4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUludGVnZXLCoHwgSlNPTlNjaGVtYU51bWJlcik6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD47XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgY2FzdCBpcyB1c2VsZXNzIGhlcmUgYW5kIGRvZXNuJ3QgbWF0Y2ggdGhlIEpTT04gc2NoZW1hLiBKdXN0IHJlbW92ZSB0aGUgY2FzdC5cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2N5cmlsbGV0dXppL2FuZ3VsYXItYXN5bmMtbG9jYWwtc3RvcmFnZS9ibG9iL21hc3Rlci9kb2NzL1ZBTElEQVRJT04ubWR9XG4gICAqL1xuICBnZXQ8VCA9IG51bWJlcj4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUludGVnZXLCoHwgSlNPTlNjaGVtYU51bWJlcik6IE9ic2VydmFibGU8bnVtYmVyIHwgdW5kZWZpbmVkPjtcbiAgZ2V0PFQgZXh0ZW5kcyBib29sZWFuID0gYm9vbGVhbj4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUJvb2xlYW4pOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGNhc3QgaXMgdXNlbGVzcyBoZXJlIGFuZCBkb2Vzbid0IG1hdGNoIHRoZSBKU09OIHNjaGVtYS4gSnVzdCByZW1vdmUgdGhlIGNhc3QuXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYXN0ZXIvZG9jcy9WQUxJREFUSU9OLm1kfVxuICAgKi9cbiAgZ2V0PFQgPSBib29sZWFuPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hQm9vbGVhbik6IE9ic2VydmFibGU8Ym9vbGVhbiB8IHVuZGVmaW5lZD47XG4gIGdldDxUIGV4dGVuZHMgcmVhZG9ubHkgc3RyaW5nW10gPSBzdHJpbmdbXT4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUFycmF5T2Y8SlNPTlNjaGVtYVN0cmluZz4pOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGNhc3QgaXMgdXNlbGVzcyBoZXJlIGFuZCBkb2Vzbid0IG1hdGNoIHRoZSBKU09OIHNjaGVtYS4gSnVzdCByZW1vdmUgdGhlIGNhc3QuXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYXN0ZXIvZG9jcy9WQUxJREFUSU9OLm1kfVxuICAgKi9cbiAgZ2V0PFQgPSBzdHJpbmdbXT4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUFycmF5T2Y8SlNPTlNjaGVtYVN0cmluZz4pOiBPYnNlcnZhYmxlPHN0cmluZ1tdIHwgdW5kZWZpbmVkPjtcbiAgZ2V0PFQgZXh0ZW5kcyByZWFkb25seSBudW1iZXJbXSA9IG51bWJlcltdPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hQXJyYXlPZjxKU09OU2NoZW1hSW50ZWdlcsKgfCBKU09OU2NoZW1hTnVtYmVyPik6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD47XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgY2FzdCBpcyB1c2VsZXNzIGhlcmUgYW5kIGRvZXNuJ3QgbWF0Y2ggdGhlIEpTT04gc2NoZW1hLiBKdXN0IHJlbW92ZSB0aGUgY2FzdC5cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2N5cmlsbGV0dXppL2FuZ3VsYXItYXN5bmMtbG9jYWwtc3RvcmFnZS9ibG9iL21hc3Rlci9kb2NzL1ZBTElEQVRJT04ubWR9XG4gICAqL1xuICBnZXQ8VCA9IG51bWJlcltdPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hQXJyYXlPZjxKU09OU2NoZW1hSW50ZWdlcsKgfCBKU09OU2NoZW1hTnVtYmVyPik6IE9ic2VydmFibGU8bnVtYmVyW10gfCB1bmRlZmluZWQ+O1xuICBnZXQ8VCBleHRlbmRzIHJlYWRvbmx5IGJvb2xlYW5bXSA9IGJvb2xlYW5bXT4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUFycmF5T2Y8SlNPTlNjaGVtYUJvb2xlYW4+KTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBjYXN0IGlzIHVzZWxlc3MgaGVyZSBhbmQgZG9lc24ndCBtYXRjaCB0aGUgSlNPTiBzY2hlbWEuIEp1c3QgcmVtb3ZlIHRoZSBjYXN0LlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvVkFMSURBVElPTi5tZH1cbiAgICovXG4gIGdldDxUID0gYm9vbGVhbltdPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hQXJyYXlPZjxKU09OU2NoZW1hQm9vbGVhbj4pOiBPYnNlcnZhYmxlPGJvb2xlYW5bXSB8IHVuZGVmaW5lZD47XG4gIGdldDxUID0gdW5rbm93bj4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYSk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD47XG4gIGdldChrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8dW5rbm93bj47XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgY2FzdCBpcyB1c2VsZXNzIGhlcmU6IGFzIG5vIEpTT04gc2NoZW1hIHdhcyBwcm92aWRlZCBmb3IgdmFsaWRhdGlvbiwgdGhlIHJlc3VsdCB3aWxsIHN0aWxsIGJlIGB1bmtub3duYC5cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2N5cmlsbGV0dXppL2FuZ3VsYXItYXN5bmMtbG9jYWwtc3RvcmFnZS9ibG9iL21hc3Rlci9kb2NzL1ZBTElEQVRJT04ubWR9XG4gICAqL1xuICBnZXQ8VD4oa2V5OiBzdHJpbmcsIHNjaGVtYT86IEpTT05TY2hlbWEpOiBPYnNlcnZhYmxlPHVua25vd24+O1xuICBnZXQ8VCA9IHVua25vd24+KGtleTogc3RyaW5nLCBzY2hlbWE/OiBKU09OU2NoZW1hKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG5cbiAgICAvKiBHZXQgdGhlIGRhdGEgaW4gc3RvcmFnZSAqL1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmdldDxUPihrZXkpLnBpcGUoXG4gICAgICAvKiBDaGVjayBpZiBgaW5kZXhlZERiYCBpcyBicm9rZW4gKi9cbiAgICAgIHRoaXMuY2F0Y2hJREJCcm9rZW4oKCkgPT4gdGhpcy5kYXRhYmFzZS5nZXQ8VD4oa2V5KSksXG4gICAgICBtZXJnZU1hcCgoZGF0YSkgPT4ge1xuXG4gICAgICAgIC8qIE5vIG5lZWQgdG8gdmFsaWRhdGUgaWYgdGhlIGRhdGEgaXMgZW1wdHkgKi9cbiAgICAgICAgaWYgKChkYXRhID09PSB1bmRlZmluZWQpIHx8IChkYXRhID09PSBudWxsKSkge1xuXG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChzY2hlbWEpIHtcblxuICAgICAgICAgIC8qIFZhbGlkYXRlIGRhdGEgYWdhaW5zdCBhIEpTT04gc2NoZW1hIGlmIHByb3ZpZGVkICovXG4gICAgICAgICAgaWYgKCF0aGlzLmpzb25WYWxpZGF0b3IudmFsaWRhdGUoZGF0YSwgc2NoZW1hKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IobmV3IFZhbGlkYXRpb25FcnJvcigpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvKiBEYXRhIGhhdmUgYmVlbiBjaGVja2VkLCBzbyBpdCdzIE9LIHRvIGNhc3QgKi9cbiAgICAgICAgICByZXR1cm4gb2YoZGF0YSBhcyBUIHwgdW5kZWZpbmVkKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgLyogQ2FzdCB0byB1bmtub3duIGFzIHRoZSBkYXRhIHdhc24ndCBjaGVja2VkICovXG4gICAgICAgIHJldHVybiBvZihkYXRhIGFzIHVua25vd24pO1xuXG4gICAgICB9KSxcbiAgICApO1xuXG4gIH1cblxuICAvKipcbiAgICogU2V0IGFuIGl0ZW0gaW4gc3RvcmFnZS5cbiAgICogTm90ZSB0aGF0IHNldHRpbmcgYG51bGxgIG9yIGB1bmRlZmluZWRgIHdpbGwgcmVtb3ZlIHRoZSBpdGVtIHRvIGF2b2lkIHNvbWUgYnJvd3NlcnMgaXNzdWVzLlxuICAgKiBAcGFyYW0ga2V5IFRoZSBpdGVtJ3Mga2V5XG4gICAqIEBwYXJhbSBkYXRhIFRoZSBpdGVtJ3MgdmFsdWVcbiAgICogQHBhcmFtIHNjaGVtYSBPcHRpb25hbCBKU09OIHNjaGVtYSB0byB2YWxpZGF0ZSB0aGUgZGF0YVxuICAgKiBAcmV0dXJucyBBIFJ4SlMgYE9ic2VydmFibGVgIHRvIHdhaXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHRoaXMuc3RvcmFnZU1hcC5zZXQoJ2tleScsICd2YWx1ZScpLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gICAqL1xuICBzZXQoa2V5OiBzdHJpbmcsIGRhdGE6IHVua25vd24sIHNjaGVtYT86IEpTT05TY2hlbWEpOiBPYnNlcnZhYmxlPHVuZGVmaW5lZD4ge1xuXG4gICAgLyogU3RvcmluZyBgdW5kZWZpbmVkYCBvciBgbnVsbGAgaXMgdXNlbGVzcyBhbmQgY2FuIGNhdXNlIGlzc3VlcyBpbiBgaW5kZXhlZERiYCBpbiBzb21lIGJyb3dzZXJzLFxuICAgICAqIHNvIHJlbW92aW5nIGl0ZW0gaW5zdGVhZCBmb3IgYWxsIHN0b3JhZ2VzIHRvIGhhdmUgYSBjb25zaXN0ZW50IEFQSSAqL1xuICAgIGlmICgoZGF0YSA9PT0gdW5kZWZpbmVkKSB8fCAoZGF0YSA9PT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIC8qIFZhbGlkYXRlIGRhdGEgYWdhaW5zdCBhIEpTT04gc2NoZW1hIGlmIHByb3ZpZGVkICovXG4gICAgaWYgKHNjaGVtYSAmJiAhdGhpcy5qc29uVmFsaWRhdG9yLnZhbGlkYXRlKGRhdGEsIHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKG5ldyBWYWxpZGF0aW9uRXJyb3IoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2Uuc2V0KGtleSwgZGF0YSkucGlwZShcbiAgICAgIC8qIENhdGNoIGlmIGBpbmRleGVkRGJgIGlzIGJyb2tlbiAqL1xuICAgICAgdGhpcy5jYXRjaElEQkJyb2tlbigoKSA9PiB0aGlzLmRhdGFiYXNlLnNldChrZXksIGRhdGEpKSxcbiAgICAgIC8qIE5vdGlmeSB3YXRjaGVycyAobXVzdCBiZSBsYXN0IGJlY2F1c2UgaXQgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMpICovXG4gICAgICB0YXAoKCkgPT4geyB0aGlzLm5vdGlmeShrZXksIGRhdGEpOyB9KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZSBhbiBpdGVtIGluIHN0b3JhZ2VcbiAgICogQHBhcmFtIGtleSBUaGUgaXRlbSdzIGtleVxuICAgKiBAcmV0dXJucyBBIFJ4SlMgYE9ic2VydmFibGVgIHRvIHdhaXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHRoaXMuc3RvcmFnZU1hcC5kZWxldGUoJ2tleScpLnN1YnNjcmliZSgoKSA9PiB7fSk7XG4gICAqL1xuICBkZWxldGUoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPHVuZGVmaW5lZD4ge1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuZGVsZXRlKGtleSkucGlwZShcbiAgICAgIC8qIENhdGNoIGlmIGBpbmRleGVkRGJgIGlzIGJyb2tlbiAqL1xuICAgICAgdGhpcy5jYXRjaElEQkJyb2tlbigoKSA9PiB0aGlzLmRhdGFiYXNlLmRlbGV0ZShrZXkpKSxcbiAgICAgIC8qIE5vdGlmeSB3YXRjaGVycyAobXVzdCBiZSBsYXN0IGJlY2F1c2UgaXQgc2hvdWxkIG9ubHkgaGFwcGVuIGlmIHRoZSBvcGVyYXRpb24gc3VjY2VlZHMpICovXG4gICAgICB0YXAoKCkgPT4geyB0aGlzLm5vdGlmeShrZXksIHVuZGVmaW5lZCk7IH0pLFxuICAgICk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGUgYWxsIGl0ZW1zIGluIHN0b3JhZ2VcbiAgICogQHJldHVybnMgQSBSeEpTIGBPYnNlcnZhYmxlYCB0byB3YWl0IHRoZSBlbmQgb2YgdGhlIG9wZXJhdGlvblxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiB0aGlzLnN0b3JhZ2VNYXAuY2xlYXIoKS5zdWJzY3JpYmUoKCkgPT4ge30pO1xuICAgKi9cbiAgY2xlYXIoKTogT2JzZXJ2YWJsZTx1bmRlZmluZWQ+IHtcblxuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmNsZWFyKCkucGlwZShcbiAgICAgIC8qIENhdGNoIGlmIGBpbmRleGVkRGJgIGlzIGJyb2tlbiAqL1xuICAgICAgdGhpcy5jYXRjaElEQkJyb2tlbigoKSA9PiB0aGlzLmRhdGFiYXNlLmNsZWFyKCkpLFxuICAgICAgLyogTm90aWZ5IHdhdGNoZXJzIChtdXN0IGJlIGxhc3QgYmVjYXVzZSBpdCBzaG91bGQgb25seSBoYXBwZW4gaWYgdGhlIG9wZXJhdGlvbiBzdWNjZWVkcykgKi9cbiAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMubm90aWZpZXJzLmtleXMoKSkge1xuICAgICAgICAgIHRoaXMubm90aWZ5KGtleSwgdW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwga2V5cyBzdG9yZWQgaW4gc3RvcmFnZS4gTm90ZSAqKnRoaXMgaXMgYW4gKml0ZXJhdGluZyogYE9ic2VydmFibGVgKio6XG4gICAqICogaWYgdGhlcmUgaXMgbm8ga2V5LCB0aGUgYG5leHRgIGNhbGxiYWNrIHdpbGwgbm90IGJlIGludm9rZWQsXG4gICAqICogaWYgeW91IG5lZWQgdG8gd2FpdCB0aGUgd2hvbGUgb3BlcmF0aW9uIHRvIGVuZCwgYmUgc3VyZSB0byBhY3QgaW4gdGhlIGBjb21wbGV0ZWAgY2FsbGJhY2ssXG4gICAqIGFzIHRoaXMgYE9ic2VydmFibGVgIGNhbiBlbWl0IHNldmVyYWwgdmFsdWVzIGFuZCBzbyB3aWxsIGludm9rZSB0aGUgYG5leHRgIGNhbGxiYWNrIHNldmVyYWwgdGltZXMuXG4gICAqIEByZXR1cm5zIEEgbGlzdCBvZiB0aGUga2V5cyB3cmFwcGVkIGluIGEgUnhKUyBgT2JzZXJ2YWJsZWBcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdGhpcy5zdG9yYWdlTWFwLmtleXMoKS5zdWJzY3JpYmUoe1xuICAgKiAgIG5leHQ6IChrZXkpID0+IHsgY29uc29sZS5sb2coa2V5KTsgfSxcbiAgICogICBjb21wbGV0ZTogKCkgPT4geyBjb25zb2xlLmxvZygnRG9uZScpOyB9LFxuICAgKiB9KTtcbiAgICovXG4gIGtleXMoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcblxuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmtleXMoKVxuICAgICAgLyogQ2F0Y2ggaWYgYGluZGV4ZWREYmAgaXMgYnJva2VuICovXG4gICAgICAucGlwZSh0aGlzLmNhdGNoSURCQnJva2VuKCgpID0+IHRoaXMuZGF0YWJhc2Uua2V5cygpKSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBUZWxscyBpZiBhIGtleSBleGlzdHMgaW4gc3RvcmFnZVxuICAgKiBAcmV0dXJucyBBIFJ4SlMgYE9ic2VydmFibGVgIHRlbGxpbmcgaWYgdGhlIGtleSBleGlzdHNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdGhpcy5zdG9yYWdlTWFwLmhhcygna2V5Jykuc3Vic2NyaWJlKChoYXNLZXkpID0+IHtcbiAgICogICBpZiAoaGFzS2V5KSB7fVxuICAgKiB9KTtcbiAgICovXG4gIGhhcyhrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuXG4gICAgcmV0dXJuIHRoaXMuZGF0YWJhc2UuaGFzKGtleSlcbiAgICAgIC8qIENhdGNoIGlmIGBpbmRleGVkRGJgIGlzIGJyb2tlbiAqL1xuICAgICAgLnBpcGUodGhpcy5jYXRjaElEQkJyb2tlbigoKSA9PiB0aGlzLmRhdGFiYXNlLmhhcyhrZXkpKSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBXYXRjaCBhbiBpdGVtIHZhbHVlIGluIHN0b3JhZ2UuXG4gICAqICoqTm90ZSBvbmx5IGNoYW5nZXMgZG9uZSB2aWEgdGhpcyBsaWIgd2lsbCBiZSB3YXRjaGVkKiosIGV4dGVybmFsIGNoYW5nZXMgaW4gc3RvcmFnZSBjYW4ndCBiZSBkZXRlY3RlZC5cbiAgICogVGhlIHNpZ25hdHVyZSBoYXMgbWFueSBvdmVybG9hZHMgZHVlIHRvIHZhbGlkYXRpb24sICoqcGxlYXNlIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uLioqXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2N5cmlsbGV0dXppL2FuZ3VsYXItYXN5bmMtbG9jYWwtc3RvcmFnZS9ibG9iL21hc3Rlci9kb2NzL1ZBTElEQVRJT04ubWRcbiAgICogQHBhcmFtIGtleSBUaGUgaXRlbSdzIGtleSB0byB3YXRjaFxuICAgKiBAcGFyYW0gc2NoZW1hIE9wdGlvbmFsIEpTT04gc2NoZW1hIHRvIHZhbGlkYXRlIHRoZSBpbml0aWFsIHZhbHVlXG4gICAqIEByZXR1cm5zIEFuIGluZmluaXRlIGBPYnNlcnZhYmxlYCBnaXZpbmcgdGhlIGN1cnJlbnQgdmFsdWVcbiAgICovXG4gIHdhdGNoPFQgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFTdHJpbmcpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGNhc3QgaXMgdXNlbGVzcyBoZXJlIGFuZCBkb2Vzbid0IG1hdGNoIHRoZSBKU09OIHNjaGVtYS4gSnVzdCByZW1vdmUgdGhlIGNhc3QuXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYXN0ZXIvZG9jcy9WQUxJREFUSU9OLm1kfVxuICAgKi9cbiAgd2F0Y2g8VCA9IHN0cmluZz4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYVN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPjtcbiAgd2F0Y2g8VCBleHRlbmRzIG51bWJlciA9IG51bWJlcj4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUludGVnZXLCoHwgSlNPTlNjaGVtYU51bWJlcik6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD47XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgY2FzdCBpcyB1c2VsZXNzIGhlcmUgYW5kIGRvZXNuJ3QgbWF0Y2ggdGhlIEpTT04gc2NoZW1hLiBKdXN0IHJlbW92ZSB0aGUgY2FzdC5cbiAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2N5cmlsbGV0dXppL2FuZ3VsYXItYXN5bmMtbG9jYWwtc3RvcmFnZS9ibG9iL21hc3Rlci9kb2NzL1ZBTElEQVRJT04ubWR9XG4gICAqL1xuICB3YXRjaDxUID0gbnVtYmVyPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hSW50ZWdlciB8IEpTT05TY2hlbWFOdW1iZXIpOiBPYnNlcnZhYmxlPG51bWJlciB8IHVuZGVmaW5lZD47XG4gIHdhdGNoPFQgZXh0ZW5kcyBib29sZWFuID0gYm9vbGVhbj4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUJvb2xlYW4pOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGNhc3QgaXMgdXNlbGVzcyBoZXJlIGFuZCBkb2Vzbid0IG1hdGNoIHRoZSBKU09OIHNjaGVtYS4gSnVzdCByZW1vdmUgdGhlIGNhc3QuXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYXN0ZXIvZG9jcy9WQUxJREFUSU9OLm1kfVxuICAgKi9cbiAgd2F0Y2g8VCA9IGJvb2xlYW4+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFCb29sZWFuKTogT2JzZXJ2YWJsZTxib29sZWFuIHwgdW5kZWZpbmVkPjtcbiAgd2F0Y2g8VCBleHRlbmRzIHJlYWRvbmx5IHN0cmluZ1tdID0gc3RyaW5nW10+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFTdHJpbmc+KTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBjYXN0IGlzIHVzZWxlc3MgaGVyZSBhbmQgZG9lc24ndCBtYXRjaCB0aGUgSlNPTiBzY2hlbWEuIEp1c3QgcmVtb3ZlIHRoZSBjYXN0LlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvVkFMSURBVElPTi5tZH1cbiAgICovXG4gIHdhdGNoPFQgPSBzdHJpbmdbXT4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUFycmF5T2Y8SlNPTlNjaGVtYVN0cmluZz4pOiBPYnNlcnZhYmxlPHN0cmluZ1tdIHwgdW5kZWZpbmVkPjtcbiAgd2F0Y2g8VCBleHRlbmRzIHJlYWRvbmx5IG51bWJlcltdID0gbnVtYmVyW10+KGtleTogc3RyaW5nLCBzY2hlbWE6IEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFJbnRlZ2VywqB8IEpTT05TY2hlbWFOdW1iZXI+KTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBjYXN0IGlzIHVzZWxlc3MgaGVyZSBhbmQgZG9lc24ndCBtYXRjaCB0aGUgSlNPTiBzY2hlbWEuIEp1c3QgcmVtb3ZlIHRoZSBjYXN0LlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvVkFMSURBVElPTi5tZH1cbiAgICovXG4gIHdhdGNoPFQgPSBudW1iZXJbXT4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUFycmF5T2Y8SlNPTlNjaGVtYUludGVnZXIgfCBKU09OU2NoZW1hTnVtYmVyPik6IE9ic2VydmFibGU8bnVtYmVyW10gfCB1bmRlZmluZWQ+O1xuICB3YXRjaDxUIGV4dGVuZHMgcmVhZG9ubHkgYm9vbGVhbltdID0gYm9vbGVhbltdPihrZXk6IHN0cmluZywgc2NoZW1hOiBKU09OU2NoZW1hQXJyYXlPZjxKU09OU2NoZW1hQm9vbGVhbj4pOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+O1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhlIGNhc3QgaXMgdXNlbGVzcyBoZXJlIGFuZCBkb2Vzbid0IG1hdGNoIHRoZSBKU09OIHNjaGVtYS4gSnVzdCByZW1vdmUgdGhlIGNhc3QuXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9jeXJpbGxldHV6aS9hbmd1bGFyLWFzeW5jLWxvY2FsLXN0b3JhZ2UvYmxvYi9tYXN0ZXIvZG9jcy9WQUxJREFUSU9OLm1kfVxuICAgKi9cbiAgd2F0Y2g8VCA9IGJvb2xlYW5bXT4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYUFycmF5T2Y8SlNPTlNjaGVtYUJvb2xlYW4+KTogT2JzZXJ2YWJsZTxib29sZWFuW10gfCB1bmRlZmluZWQ+O1xuICB3YXRjaDxUID0gdW5rbm93bj4oa2V5OiBzdHJpbmcsIHNjaGVtYTogSlNPTlNjaGVtYSk6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD47XG4gIHdhdGNoKGtleTogc3RyaW5nKTogT2JzZXJ2YWJsZTx1bmtub3duPjtcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoZSBjYXN0IGlzIHVzZWxlc3MgaGVyZTogYXMgbm8gSlNPTiBzY2hlbWEgd2FzIHByb3ZpZGVkIGZvciB2YWxpZGF0aW9uLCB0aGUgcmVzdWx0IHdpbGwgc3RpbGwgYmUgYHVua25vd25gLlxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvVkFMSURBVElPTi5tZH1cbiAgICovXG4gIHdhdGNoPFQ+KGtleTogc3RyaW5nLCBzY2hlbWE/OiBKU09OU2NoZW1hKTogT2JzZXJ2YWJsZTx1bmtub3duPjtcbiAgd2F0Y2g8VCA9IHVua25vd24+KGtleTogc3RyaW5nLCBzY2hlbWE/OiBKU09OU2NoZW1hKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG5cbiAgICAvKiBDaGVjayBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgbm90aWZpZXIgYW5kIGNhc3QgYWNjb3JkaW5nIHRvIHNjaGVtYSAqL1xuICAgIGxldCBub3RpZmllciA9IHRoaXMubm90aWZpZXJzLmdldChrZXkpIGFzIFJlcGxheVN1YmplY3Q8dHlwZW9mIHNjaGVtYSBleHRlbmRzIEpTT05TY2hlbWEgPyAoVCB8IHVuZGVmaW5lZCkgOiB1bmtub3duPjtcblxuICAgIGlmICghbm90aWZpZXIpIHtcblxuICAgICAgLyogQ3JlYXRlIGEgbm90aWZpZXIgYW5kIGNhc3QgYWNjb3JkaW5nIHRvIHNjaGVtYSAqL1xuICAgICAgbm90aWZpZXIgPSBuZXcgUmVwbGF5U3ViamVjdDx0eXBlb2Ygc2NoZW1hIGV4dGVuZHMgSlNPTlNjaGVtYSA/IChUIHwgdW5kZWZpbmVkKSA6IHVua25vd24+KDEpO1xuXG4gICAgICAvKiBNZW1vcml6ZSB0aGUgbm90aWZpZXIgKi9cbiAgICAgIHRoaXMubm90aWZpZXJzLnNldChrZXksIG5vdGlmaWVyKTtcblxuICAgICAgLyogR2V0IHRoZSBjdXJyZW50IGl0ZW0gdmFsdWUgKi9cbiAgICAgIChzY2hlbWEgPyB0aGlzLmdldDxUPihrZXksIHNjaGVtYSkgOiB0aGlzLmdldChrZXkpKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiBub3RpZmllci5uZXh0KHJlc3VsdCksXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IG5vdGlmaWVyLmVycm9yKGVycm9yKSxcbiAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgLyogT25seSB0aGUgcHVibGljIEFQSSBvZiB0aGUgYE9ic2VydmFibGVgIHNob3VsZCBiZSByZXR1cm5lZCAqL1xuICAgIHJldHVybiBub3RpZmllci5hc09ic2VydmFibGUoKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIE5vdGlmeSB3aGVuIGEgdmFsdWUgY2hhbmdlc1xuICAgKiBAcGFyYW0ga2V5IFRoZSBpdGVtJ3Mga2V5XG4gICAqIEBwYXJhbSBkYXRhIFRoZSBuZXcgdmFsdWVcbiAgICovXG4gIHByb3RlY3RlZCBub3RpZnkoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG5cbiAgICBjb25zdCBub3RpZmllciA9IHRoaXMubm90aWZpZXJzLmdldChrZXkpO1xuXG4gICAgaWYgKG5vdGlmaWVyKSB7XG4gICAgICBub3RpZmllci5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBSeEpTIG9wZXJhdG9yIHRvIGNhdGNoIGlmIGBpbmRleGVkREJgIGlzIGJyb2tlblxuICAgKiBAcGFyYW0gb3BlcmF0aW9uQ2FsbGJhY2sgQ2FsbGJhY2sgd2l0aCB0aGUgb3BlcmF0aW9uIHRvIHJlZG9cbiAgICovXG4gIHByb3RlY3RlZCBjYXRjaElEQkJyb2tlbjxUPihvcGVyYXRpb25DYWxsYmFjazogKCkgPT4gT2JzZXJ2YWJsZTxUPik6IE9wZXJhdG9yRnVuY3Rpb248VCwgVD4ge1xuXG4gICAgcmV0dXJuIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG5cbiAgICAgIC8qIENoZWNrIGlmIGBpbmRleGVkREJgIGlzIGJyb2tlbiBiYXNlZCBvbiBlcnJvciBtZXNzYWdlICh0aGUgc3BlY2lmaWMgZXJyb3IgY2xhc3Mgc2VlbXMgdG8gYmUgbG9zdCBpbiB0aGUgcHJvY2VzcykgKi9cbiAgICAgIGlmICgoZXJyb3IgIT09IHVuZGVmaW5lZCkgJiYgKGVycm9yICE9PSBudWxsKSAmJiAoZXJyb3IubWVzc2FnZSA9PT0gSURCX0JST0tFTl9FUlJPUikpIHtcblxuICAgICAgICAvKiBXaGVuIHN0b3JhZ2UgaXMgZnVsbHkgZGlzYWJsZWQgaW4gYnJvd3NlciAodmlhIHRoZSBcIkJsb2NrIGFsbCBjb29raWVzXCIgb3B0aW9uKSxcbiAgICAgICAgICoganVzdCB0cnlpbmcgdG8gY2hlY2sgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgY2F1c2VzIGEgc2VjdXJpdHkgZXhjZXB0aW9uLlxuICAgICAgICAgKiBQcmV2ZW50cyBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2lzc3Vlcy8xMThcbiAgICAgICAgICovXG4gICAgICAgIHRyeSB7XG5cbiAgICAgICAgICBpZiAoJ2dldEl0ZW0nIGluIGxvY2FsU3RvcmFnZSkge1xuXG4gICAgICAgICAgICAvKiBGYWxsYmFjayB0byBgbG9jYWxTdG9yYWdlYCBpZiBhdmFpbGFibGUgKi9cbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgTG9jYWxTdG9yYWdlRGF0YWJhc2UodGhpcy5MU1ByZWZpeCk7XG5cbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAvKiBGYWxsYmFjayB0byBtZW1vcnkgc3RvcmFnZSBvdGhlcndpc2UgKi9cbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgTWVtb3J5RGF0YWJhc2UoKTtcblxuICAgICAgICAgIH1cblxuICAgICAgICB9IGNhdGNoIHtcblxuICAgICAgICAgIC8qIEZhbGxiYWNrIHRvIG1lbW9yeSBzdG9yYWdlIG90aGVyd2lzZSAqL1xuICAgICAgICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgTWVtb3J5RGF0YWJhc2UoKTtcblxuICAgICAgICB9XG5cbiAgICAgICAgLyogUmVkbyB0aGUgb3BlcmF0aW9uICovXG4gICAgICAgIHJldHVybiBvcGVyYXRpb25DYWxsYmFjaygpO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIC8qIE90aGVyd2lzZSwgcmV0aHJvdyB0aGUgZXJyb3IgKi9cbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuXG4gICAgICB9XG5cbiAgICB9KTtcblxuICB9XG5cbn1cbiJdfQ==

@@ -5,2 +5,2 @@ /* All schemas interfaces must have a required and different `type`,

export {};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2N5cmlsbGUvV2ViL29wZW5zb3VyY2UvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL3Byb2plY3RzL25neC1wd2EvbG9jYWwtc3RvcmFnZS9zcmMvIiwic291cmNlcyI6WyJsaWIvdmFsaWRhdGlvbi9qc29uLXNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Z0ZBRWdGIiwic291cmNlc0NvbnRlbnQiOlsiLyogQWxsIHNjaGVtYXMgaW50ZXJmYWNlcyBtdXN0IGhhdmUgYSByZXF1aXJlZCBhbmQgZGlmZmVyZW50IGB0eXBlYCxcbiAqIHRvIGNyZWF0ZSBhIFR5cGVTY3JpcHQgZGlzY3JpbWluYW50IHVuaW9uIHR5cGUuXG4gKiBBdm9pZCBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2lzc3Vlcy82NCAqL1xuXG4vKipcbiAqIEpTT04gU2NoZW1hIHRvIGRlc2NyaWJlIGEgYm9vbGVhbiB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKU09OU2NoZW1hQm9vbGVhbiB7XG5cbiAgLyoqXG4gICAqIFR5cGUgZm9yIGEgYm9vbGVhbiB2YWx1ZS5cbiAgICovXG4gIHR5cGU6ICdib29sZWFuJztcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgdmFsdWUgaXMgc3RyaWN0bHkgZXF1YWwgdG8gdGhpcy5cbiAgICovXG4gIGNvbnN0PzogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIEpTT04gU2NoZW1hIHRvIGRlc2NyaWJlIGEgbnVtYmVyIHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpTT05TY2hlbWFOdW1iZXIge1xuXG4gIC8qKlxuICAgKiBUeXBlIGZvciBhIG51bWVyaWMgdmFsdWUuXG4gICAqL1xuICB0eXBlOiAnbnVtYmVyJztcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgdmFsdWUgaXMgc3RyaWN0bHkgZXF1YWwgdG8gdGhpcy5cbiAgICovXG4gIGNvbnN0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBzdHJpY3RseSBlcXVhbCB0byBvbmUgb2YgdGhlIHZhbHVlIG9mIGVudW0uXG4gICAqL1xuICBlbnVtPzogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbnVtYmVyIGlzIGEgbXVsdGlwbGUgb2YgeC5cbiAgICogTXVzdCBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gMC5cbiAgICovXG4gIG11bHRpcGxlT2Y/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbnVtYmVyIGlzIGxvd2VyIG9yIGVxdWFsIHRoYW4gdGhpcyBtYXhpbXVtLlxuICAgKi9cbiAgbWF4aW11bT86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBudW1iZXIgaXMgc3RyaWN0bHkgbG93ZXIgdGhhbiB0aGlzIG1heGltdW0uXG4gICAqL1xuICBleGNsdXNpdmVNYXhpbXVtPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG51bWJlciBpcyBncmVhdGVyIG9yIGVxdWFsIHRoYW4gdGhpcyBtaW5pbXVtLlxuICAgKi9cbiAgbWluaW11bT86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBudW1iZXIgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIHRoaXMgbWluaW11bS5cbiAgICovXG4gIGV4Y2x1c2l2ZU1pbmltdW0/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBKU09OIFNjaGVtYSB0byBkZXNjcmliZSBhbiBpbnRlZ2VyIHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpTT05TY2hlbWFJbnRlZ2VyIHtcblxuICAvKipcbiAgICogVHlwZSBmb3IgYW4gaW50ZWdlciB2YWx1ZS5cbiAgICovXG4gIHR5cGU6ICdpbnRlZ2VyJztcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgdmFsdWUgaXMgc3RyaWN0bHkgZXF1YWwgdG8gdGhpcy5cbiAgICovXG4gIGNvbnN0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBzdHJpY3RseSBlcXVhbCB0byBvbmUgb2YgdGhlIHZhbHVlIG9mIGVudW0uXG4gICAqL1xuICBlbnVtPzogbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbnVtYmVyIGlzIGEgbXVsdGlwbGUgb2YgeC5cbiAgICogTXVzdCBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gMC5cbiAgICovXG4gIG11bHRpcGxlT2Y/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbnVtYmVyIGlzIGxvd2VyIG9yIGVxdWFsIHRoYW4gdGhpcyBtYXhpbXVtLlxuICAgKi9cbiAgbWF4aW11bT86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBudW1iZXIgaXMgc3RyaWN0bHkgbG93ZXIgdGhhbiB0aGlzIG1heGltdW0uXG4gICAqL1xuICBleGNsdXNpdmVNYXhpbXVtPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG51bWJlciBpcyBncmVhdGVyIG9yIGVxdWFsIHRoYW4gdGhpcyBtaW5pbXVtLlxuICAgKi9cbiAgbWluaW11bT86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBudW1iZXIgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIHRoaXMgbWluaW11bS5cbiAgICovXG4gIGV4Y2x1c2l2ZU1pbmltdW0/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBKU09OIFNjaGVtYSB0byBkZXNjcmliZSBhIHN0cmluZyB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKU09OU2NoZW1hU3RyaW5nIHtcblxuICAvKipcbiAgICogVHlwZSBmb3IgYSBzdHJpbmcgdmFsdWUuXG4gICAqL1xuICB0eXBlOiAnc3RyaW5nJztcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgdmFsdWUgaXMgc3RyaWN0bHkgZXF1YWwgdG8gdGhpcy5cbiAgICovXG4gIGNvbnN0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBzdHJpY3RseSBlcXVhbCB0byBvbmUgb2YgdGhlIHZhbHVlIG9mIGVudW0uXG4gICAqL1xuICBlbnVtPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE1heGl1bSBsZW5ndGggZm9yIGEgc3RyaW5nLlxuICAgKiBNdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuXG4gICAqL1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gbGVuZ3RoIGZvciBhIHN0cmluZy5cbiAgICogTXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLlxuICAgKi9cbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQYXR0ZXJuIHRvIG1hdGNoIGZvciBhIHN0cmluZy5cbiAgICogTXVzdCBiZSBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiwgKndpdGhvdXQqIHRoZSBgL2AgZGVsaW1pdGVycy5cbiAgICovXG4gIHBhdHRlcm4/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBKU09OIHNjaGVtYSB0byBkZXNjcmliZSBhbiBhcnJheSBvZiB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTlNjaGVtYUFycmF5IHtcblxuICAvKipcbiAgICogVHlwZSBmb3IgYW4gYXJyYXkgb2YgdmFsdWVzLlxuICAgKi9cbiAgdHlwZTogJ2FycmF5JztcblxuICAvKipcbiAgICogU2NoZW1hIGZvciB0aGUgdmFsdWVzIG9mIGFuIGFycmF5LCBvciBhcnJheSBvZiBzY2hlbWFzIGZvciBhIHR1cGxlLlxuICAgKi9cbiAgaXRlbXM6IEpTT05TY2hlbWEgfCBKU09OU2NoZW1hW107XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFycmF5IGxlbmd0aCBpcyBsb3dlciBvciBlcXVhbCB0byB0aGlzIHZhbHVlLlxuICAgKiBNdXN0IGJlIGEgbm9uIG5lZ2F0aXZlIGludGVnZXIuXG4gICAqL1xuICBtYXhJdGVtcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXJyYXkgbGVuZ3RoIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhpcyB2YWx1ZS5cbiAgICogTXVzdCBiZSBhIG5vbiBuZWdhdGl2ZSBpbnRlZ2VyLlxuICAgKi9cbiAgbWluSXRlbXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFycmF5IG9ubHkgaGF2ZSB1bmlxdWUgdmFsdWVzLlxuICAgKi9cbiAgdW5pcXVlSXRlbXM/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogSlNPTiBTY2hlbWEgdG8gZGVzY3JpYmUgYW4gYXJyYXkgb2YgcHJpbWl0aXZlIHZhbHVlczpcbiAqIC0gYXJyYXkgb2YgYm9vbGVhbnM6IGBKU09OU2NoZW1hQXJyYXlPZjxKU09OU2NoZW1hQm9vbGVhbj5gLFxuICogLSBhcnJheSBvZiBudW1iZXJzOiBgSlNPTlNjaGVtYUFycmF5T2Y8SlNPTlNjaGVtYU51bWJlcj5gLFxuICogLSBhcnJheSBvZiBpbnRlZ2VyczogYEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFJbnRlZ2VyPmAsXG4gKiAtIGFycmF5IG9mIHN0cmluZ3M6IGBKU09OU2NoZW1hQXJyYXlPZjxKU09OU2NoZW1hU3RyaW5nPmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTlNjaGVtYUFycmF5T2Y8VCBleHRlbmRzIEpTT05TY2hlbWFCb29sZWFuIHwgSlNPTlNjaGVtYU51bWJlciB8IEpTT05TY2hlbWFJbnRlZ2VyIHwgSlNPTlNjaGVtYVN0cmluZz4ge1xuXG4gIC8qKlxuICAgKiBUeXBlIGZvciBhbiBhcnJheSBvZiB2YWx1ZXMuXG4gICAqL1xuICB0eXBlOiAnYXJyYXknO1xuXG4gIC8qKlxuICAgKiBTY2hlbWEgZm9yIHRoZSB2YWx1ZXMgb2YgYW4gYXJyYXkuXG4gICAqL1xuICBpdGVtczogVDtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXJyYXkgbGVuZ3RoIGlzIGxvd2VyIG9yIGVxdWFsIHRvIHRoaXMgdmFsdWUuXG4gICAqIE11c3QgYmUgYSBub24gbmVnYXRpdmUgaW50ZWdlci5cbiAgICovXG4gIG1heEl0ZW1zPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhcnJheSBsZW5ndGggaXMgZ3JlYXRlciBvciBlcXVhbCB0byB0aGlzIHZhbHVlLlxuICAgKiBNdXN0IGJlIGEgbm9uIG5lZ2F0aXZlIGludGVnZXIuXG4gICAqL1xuICBtaW5JdGVtcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXJyYXkgb25seSBoYXZlIHVuaXF1ZSB2YWx1ZXMuXG4gICAqL1xuICB1bmlxdWVJdGVtcz86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBKU09OIHNjaGVtYSB0byBkZXNjcmliZSBhbiBvYmplY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTlNjaGVtYU9iamVjdCB7XG5cbiAgLyoqXG4gICAqIFR5cGUgZm9yIGFuIG9iamVjdC5cbiAgICovXG4gIHR5cGU6ICdvYmplY3QnO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBhbmQgdGhlaXIgYXNzb2NpYXRlZCBKU09OIHNjaGVtYXMuXG4gICAqL1xuICBwcm9wZXJ0aWVzOiB7XG4gICAgW2s6IHN0cmluZ106IEpTT05TY2hlbWE7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIG5hbWVzIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIGZvciBhbiBvYmplY3QuXG4gICAqIFByb3BlcnRpZXMgc2V0IGFzIHJlcXVpcmVkIHNob3VsZCBiZSBwcmVzZW50IGluIGBwcm9wZXJ0aWVzYCB0b28uXG4gICAqL1xuICByZXF1aXJlZD86IHN0cmluZ1tdO1xuXG59XG5cbi8qKlxuICogU3Vic2V0IG9mIHRoZSBKU09OIFNjaGVtYSBzdGFuZGFyZC5cbiAqIFR5cGVzIGFyZSBlbmZvcmNlZCB0byB2YWxpZGF0ZSBldmVyeXRoaW5nOiBlYWNoIHZhbHVlICoqbXVzdCoqIGhhdmUgYSBgdHlwZWAuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvVkFMSURBVElPTi5tZH1cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2NoZW1hOiBKU09OU2NoZW1hID0geyB0eXBlOiAnc3RyaW5nJyB9O1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzY2hlbWE6IEpTT05TY2hlbWEgPSB7IHR5cGU6ICdudW1iZXInIH07XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNjaGVtYTogSlNPTlNjaGVtYSA9IHsgdHlwZTogJ2ludGVnZXInIH07XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNjaGVtYTogSlNPTlNjaGVtYSA9IHsgdHlwZTogJ2Jvb2xlYW4nIH07XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNjaGVtYTogSlNPTlNjaGVtYSA9IHtcbiAqICAgdHlwZTogJ2FycmF5JyxcbiAqICAgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAqIH07XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNjaGVtYTogSlNPTlNjaGVtYSA9IHtcbiAqICAgdHlwZTogJ29iamVjdCcsXG4gKiAgIHByb3BlcnRpZXM6IHtcbiAqICAgICBmaXJzdE5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAqICAgICBsYXN0TmFtZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICogICB9LFxuICogICByZXF1aXJlZDogWydmaXJzdE5hbWUnXSxcbiAqIH07XG4gKi9cbmV4cG9ydCB0eXBlIEpTT05TY2hlbWEgPSBKU09OU2NoZW1hU3RyaW5nIHwgSlNPTlNjaGVtYU51bWJlciB8IEpTT05TY2hlbWFJbnRlZ2VyIHwgSlNPTlNjaGVtYUJvb2xlYW4gfCBKU09OU2NoZW1hQXJyYXkgfCBKU09OU2NoZW1hT2JqZWN0O1xuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1zY2hlbWEuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2N5cmlsbGUvV2ViL29wZW5zb3VyY2UvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL3Byb2plY3RzL25neC1wd2EvbG9jYWwtc3RvcmFnZS9zcmMvIiwic291cmNlcyI6WyJsaWIvdmFsaWRhdGlvbi9qc29uLXNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Z0ZBRWdGIiwic291cmNlc0NvbnRlbnQiOlsiLyogQWxsIHNjaGVtYXMgaW50ZXJmYWNlcyBtdXN0IGhhdmUgYSByZXF1aXJlZCBhbmQgZGlmZmVyZW50IGB0eXBlYCxcbiAqIHRvIGNyZWF0ZSBhIFR5cGVTY3JpcHQgZGlzY3JpbWluYW50IHVuaW9uIHR5cGUuXG4gKiBBdm9pZCBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2lzc3Vlcy82NCAqL1xuXG4vKipcbiAqIEpTT04gU2NoZW1hIHRvIGRlc2NyaWJlIGEgYm9vbGVhbiB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKU09OU2NoZW1hQm9vbGVhbiB7XG5cbiAgLyoqXG4gICAqIFR5cGUgZm9yIGEgYm9vbGVhbiB2YWx1ZS5cbiAgICovXG4gIHR5cGU6ICdib29sZWFuJztcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgdmFsdWUgaXMgc3RyaWN0bHkgZXF1YWwgdG8gdGhpcy5cbiAgICovXG4gIGNvbnN0PzogYm9vbGVhbjtcblxufVxuXG4vKipcbiAqIEpTT04gU2NoZW1hIHRvIGRlc2NyaWJlIGEgbnVtYmVyIHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpTT05TY2hlbWFOdW1iZXIge1xuXG4gIC8qKlxuICAgKiBUeXBlIGZvciBhIG51bWVyaWMgdmFsdWUuXG4gICAqL1xuICB0eXBlOiAnbnVtYmVyJztcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgdmFsdWUgaXMgc3RyaWN0bHkgZXF1YWwgdG8gdGhpcy5cbiAgICovXG4gIGNvbnN0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBzdHJpY3RseSBlcXVhbCB0byBvbmUgb2YgdGhlIHZhbHVlIG9mIGVudW0uXG4gICAqL1xuICBlbnVtPzogcmVhZG9ubHkgbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbnVtYmVyIGlzIGEgbXVsdGlwbGUgb2YgeC5cbiAgICogTXVzdCBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gMC5cbiAgICovXG4gIG11bHRpcGxlT2Y/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbnVtYmVyIGlzIGxvd2VyIG9yIGVxdWFsIHRoYW4gdGhpcyBtYXhpbXVtLlxuICAgKi9cbiAgbWF4aW11bT86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBudW1iZXIgaXMgc3RyaWN0bHkgbG93ZXIgdGhhbiB0aGlzIG1heGltdW0uXG4gICAqL1xuICBleGNsdXNpdmVNYXhpbXVtPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG51bWJlciBpcyBncmVhdGVyIG9yIGVxdWFsIHRoYW4gdGhpcyBtaW5pbXVtLlxuICAgKi9cbiAgbWluaW11bT86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBudW1iZXIgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIHRoaXMgbWluaW11bS5cbiAgICovXG4gIGV4Y2x1c2l2ZU1pbmltdW0/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBKU09OIFNjaGVtYSB0byBkZXNjcmliZSBhbiBpbnRlZ2VyIHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEpTT05TY2hlbWFJbnRlZ2VyIHtcblxuICAvKipcbiAgICogVHlwZSBmb3IgYW4gaW50ZWdlciB2YWx1ZS5cbiAgICovXG4gIHR5cGU6ICdpbnRlZ2VyJztcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgdmFsdWUgaXMgc3RyaWN0bHkgZXF1YWwgdG8gdGhpcy5cbiAgICovXG4gIGNvbnN0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBzdHJpY3RseSBlcXVhbCB0byBvbmUgb2YgdGhlIHZhbHVlIG9mIGVudW0uXG4gICAqL1xuICBlbnVtPzogcmVhZG9ubHkgbnVtYmVyW107XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbnVtYmVyIGlzIGEgbXVsdGlwbGUgb2YgeC5cbiAgICogTXVzdCBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gMC5cbiAgICovXG4gIG11bHRpcGxlT2Y/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgbnVtYmVyIGlzIGxvd2VyIG9yIGVxdWFsIHRoYW4gdGhpcyBtYXhpbXVtLlxuICAgKi9cbiAgbWF4aW11bT86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBudW1iZXIgaXMgc3RyaWN0bHkgbG93ZXIgdGhhbiB0aGlzIG1heGltdW0uXG4gICAqL1xuICBleGNsdXNpdmVNYXhpbXVtPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIG51bWJlciBpcyBncmVhdGVyIG9yIGVxdWFsIHRoYW4gdGhpcyBtaW5pbXVtLlxuICAgKi9cbiAgbWluaW11bT86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSBudW1iZXIgaXMgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIHRoaXMgbWluaW11bS5cbiAgICovXG4gIGV4Y2x1c2l2ZU1pbmltdW0/OiBudW1iZXI7XG5cbn1cblxuLyoqXG4gKiBKU09OIFNjaGVtYSB0byBkZXNjcmliZSBhIHN0cmluZyB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKU09OU2NoZW1hU3RyaW5nIHtcblxuICAvKipcbiAgICogVHlwZSBmb3IgYSBzdHJpbmcgdmFsdWUuXG4gICAqL1xuICB0eXBlOiAnc3RyaW5nJztcblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgdmFsdWUgaXMgc3RyaWN0bHkgZXF1YWwgdG8gdGhpcy5cbiAgICovXG4gIGNvbnN0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSB2YWx1ZSBpcyBzdHJpY3RseSBlcXVhbCB0byBvbmUgb2YgdGhlIHZhbHVlIG9mIGVudW0uXG4gICAqL1xuICBlbnVtPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIE1heGl1bSBsZW5ndGggZm9yIGEgc3RyaW5nLlxuICAgKiBNdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIuXG4gICAqL1xuICBtYXhMZW5ndGg/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gbGVuZ3RoIGZvciBhIHN0cmluZy5cbiAgICogTXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLlxuICAgKi9cbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQYXR0ZXJuIHRvIG1hdGNoIGZvciBhIHN0cmluZy5cbiAgICogTXVzdCBiZSBhIHZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiwgKndpdGhvdXQqIHRoZSBgL2AgZGVsaW1pdGVycy5cbiAgICovXG4gIHBhdHRlcm4/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBKU09OIHNjaGVtYSB0byBkZXNjcmliZSBhbiBhcnJheSBvZiB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTlNjaGVtYUFycmF5IHtcblxuICAvKipcbiAgICogVHlwZSBmb3IgYW4gYXJyYXkgb2YgdmFsdWVzLlxuICAgKi9cbiAgdHlwZTogJ2FycmF5JztcblxuICAvKipcbiAgICogU2NoZW1hIGZvciB0aGUgdmFsdWVzIG9mIGFuIGFycmF5LCBvciBhcnJheSBvZiBzY2hlbWFzIGZvciBhIHR1cGxlLlxuICAgKi9cbiAgaXRlbXM6IEpTT05TY2hlbWEgfCByZWFkb25seSBKU09OU2NoZW1hW107XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFycmF5IGxlbmd0aCBpcyBsb3dlciBvciBlcXVhbCB0byB0aGlzIHZhbHVlLlxuICAgKiBNdXN0IGJlIGEgbm9uIG5lZ2F0aXZlIGludGVnZXIuXG4gICAqL1xuICBtYXhJdGVtcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXJyYXkgbGVuZ3RoIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhpcyB2YWx1ZS5cbiAgICogTXVzdCBiZSBhIG5vbiBuZWdhdGl2ZSBpbnRlZ2VyLlxuICAgKi9cbiAgbWluSXRlbXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFuIGFycmF5IG9ubHkgaGF2ZSB1bmlxdWUgdmFsdWVzLlxuICAgKi9cbiAgdW5pcXVlSXRlbXM/OiBib29sZWFuO1xuXG59XG5cbi8qKlxuICogSlNPTiBTY2hlbWEgdG8gZGVzY3JpYmUgYW4gYXJyYXkgb2YgcHJpbWl0aXZlIHZhbHVlczpcbiAqIC0gYXJyYXkgb2YgYm9vbGVhbnM6IGBKU09OU2NoZW1hQXJyYXlPZjxKU09OU2NoZW1hQm9vbGVhbj5gLFxuICogLSBhcnJheSBvZiBudW1iZXJzOiBgSlNPTlNjaGVtYUFycmF5T2Y8SlNPTlNjaGVtYU51bWJlcj5gLFxuICogLSBhcnJheSBvZiBpbnRlZ2VyczogYEpTT05TY2hlbWFBcnJheU9mPEpTT05TY2hlbWFJbnRlZ2VyPmAsXG4gKiAtIGFycmF5IG9mIHN0cmluZ3M6IGBKU09OU2NoZW1hQXJyYXlPZjxKU09OU2NoZW1hU3RyaW5nPmAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTlNjaGVtYUFycmF5T2Y8VCBleHRlbmRzIEpTT05TY2hlbWFCb29sZWFuIHwgSlNPTlNjaGVtYU51bWJlciB8IEpTT05TY2hlbWFJbnRlZ2VyIHwgSlNPTlNjaGVtYVN0cmluZz4ge1xuXG4gIC8qKlxuICAgKiBUeXBlIGZvciBhbiBhcnJheSBvZiB2YWx1ZXMuXG4gICAqL1xuICB0eXBlOiAnYXJyYXknO1xuXG4gIC8qKlxuICAgKiBTY2hlbWEgZm9yIHRoZSB2YWx1ZXMgb2YgYW4gYXJyYXkuXG4gICAqL1xuICBpdGVtczogVDtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXJyYXkgbGVuZ3RoIGlzIGxvd2VyIG9yIGVxdWFsIHRvIHRoaXMgdmFsdWUuXG4gICAqIE11c3QgYmUgYSBub24gbmVnYXRpdmUgaW50ZWdlci5cbiAgICovXG4gIG1heEl0ZW1zPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhcnJheSBsZW5ndGggaXMgZ3JlYXRlciBvciBlcXVhbCB0byB0aGlzIHZhbHVlLlxuICAgKiBNdXN0IGJlIGEgbm9uIG5lZ2F0aXZlIGludGVnZXIuXG4gICAqL1xuICBtaW5JdGVtcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXJyYXkgb25seSBoYXZlIHVuaXF1ZSB2YWx1ZXMuXG4gICAqL1xuICB1bmlxdWVJdGVtcz86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBKU09OIHNjaGVtYSB0byBkZXNjcmliZSBhbiBvYmplY3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSlNPTlNjaGVtYU9iamVjdCB7XG5cbiAgLyoqXG4gICAqIFR5cGUgZm9yIGFuIG9iamVjdC5cbiAgICovXG4gIHR5cGU6ICdvYmplY3QnO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCBhbmQgdGhlaXIgYXNzb2NpYXRlZCBKU09OIHNjaGVtYXMuXG4gICAqL1xuICBwcm9wZXJ0aWVzOiB7XG4gICAgW2s6IHN0cmluZ106IEpTT05TY2hlbWE7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIG5hbWVzIG9mIHRoZSByZXF1aXJlZCBwcm9wZXJ0aWVzIGZvciBhbiBvYmplY3QuXG4gICAqIFByb3BlcnRpZXMgc2V0IGFzIHJlcXVpcmVkIHNob3VsZCBiZSBwcmVzZW50IGluIGBwcm9wZXJ0aWVzYCB0b28uXG4gICAqL1xuICByZXF1aXJlZD86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG59XG5cbi8qKlxuICogU3Vic2V0IG9mIHRoZSBKU09OIFNjaGVtYSBzdGFuZGFyZC5cbiAqIFR5cGVzIGFyZSBlbmZvcmNlZCB0byB2YWxpZGF0ZSBldmVyeXRoaW5nOiBlYWNoIHZhbHVlICoqbXVzdCoqIGhhdmUgYSBgdHlwZWAuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvVkFMSURBVElPTi5tZH1cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2NoZW1hOiBKU09OU2NoZW1hID0geyB0eXBlOiAnc3RyaW5nJyB9O1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzY2hlbWE6IEpTT05TY2hlbWEgPSB7IHR5cGU6ICdudW1iZXInIH07XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNjaGVtYTogSlNPTlNjaGVtYSA9IHsgdHlwZTogJ2ludGVnZXInIH07XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNjaGVtYTogSlNPTlNjaGVtYSA9IHsgdHlwZTogJ2Jvb2xlYW4nIH07XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNjaGVtYTogSlNPTlNjaGVtYSA9IHtcbiAqICAgdHlwZTogJ2FycmF5JyxcbiAqICAgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAqIH07XG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNjaGVtYTogSlNPTlNjaGVtYSA9IHtcbiAqICAgdHlwZTogJ29iamVjdCcsXG4gKiAgIHByb3BlcnRpZXM6IHtcbiAqICAgICBmaXJzdE5hbWU6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAqICAgICBsYXN0TmFtZTogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICogICB9LFxuICogICByZXF1aXJlZDogWydmaXJzdE5hbWUnXSxcbiAqIH07XG4gKi9cbmV4cG9ydCB0eXBlIEpTT05TY2hlbWEgPSBKU09OU2NoZW1hU3RyaW5nIHwgSlNPTlNjaGVtYU51bWJlciB8IEpTT05TY2hlbWFJbnRlZ2VyIHwgSlNPTlNjaGVtYUJvb2xlYW4gfCBKU09OU2NoZW1hQXJyYXkgfCBKU09OU2NoZW1hT2JqZWN0O1xuIl19

@@ -142,2 +142,4 @@ import { Injectable } from '@angular/core';

for (const value of data) {
// TODO: remove when TypeScript 4.1 is available
// (currently the narrowed type from `Array.isArray()` is lost on readonly arrays)
if (!this.validate(value, schema.items)) {

@@ -235,2 +237,2 @@ return false;

];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi12YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2N5cmlsbGUvV2ViL29wZW5zb3VyY2UvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL3Byb2plY3RzL25neC1wd2EvbG9jYWwtc3RvcmFnZS9zcmMvIiwic291cmNlcyI6WyJsaWIvdmFsaWRhdGlvbi9qc29uLXZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVUzQyxNQUFNLE9BQU8sYUFBYTtJQUV4Qjs7Ozs7OztPQU9HO0lBQ0gsUUFBUSxDQUFDLElBQWEsRUFBRSxNQUFrQjtRQUV4QyxRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFFbkIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDM0MsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMzQyxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM1QyxLQUFLLE9BQU87Z0JBQ1YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxQyxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUU1QztJQUVILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLGNBQWMsQ0FBQyxJQUFhLEVBQUUsTUFBd0I7UUFFOUQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDNUIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElB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LENBQUMsRUFBRTtvQkFDdEMsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7YUFFRjtTQUVGO1FBRUQseUNBQXlDO1FBQ3pDLEtBQUssTUFBTSxRQUFRLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUV4QywyR0FBMkc7WUFDM0csSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUUvRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBRSxJQUFrQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtvQkFDOUYsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7YUFFRjtTQUVGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFFZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxhQUFhLENBQUMsSUFBYSxFQUFFLE1BQW1GO1FBRXhILElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxZQUFZLENBQUMsSUFBYSxFQUFFLE1BQStEO1FBRW5HLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ2hCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCwwRUFBMEU7UUFDMUUsT0FBTyxDQUFFLE1BQU0sQ0FBQyxJQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRXJELENBQUM7Ozs7WUF0VEYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBKU09OU2NoZW1hLCBKU09OU2NoZW1hU3RyaW5nLCBKU09OU2NoZW1hSW50ZWdlciwgSlNPTlNjaGVtYU51bWJlciwgSlNPTlNjaGVtYUJvb2xlYW4sXG4gIEpTT05TY2hlbWFBcnJheSwgSlNPTlNjaGVtYU9iamVjdFxufSBmcm9tICcuL2pzb24tc2NoZW1hJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSlNPTlZhbGlkYXRvciB7XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgSlNPTiBkYXRhIGFnYWluc3QgYSBKc3Vic2V0IG9mIHRoZSBKU09OIFNjaGVtYSBzdGFuZGFyZC5cbiAgICogVHlwZXMgYXJlIGVuZm9yY2VkIHRvIHZhbGlkYXRlIGV2ZXJ5dGhpbmc6IGVhY2ggc2NoZW1hIG11c3RcbiAgICogQHBhcmFtIGRhdGEgSlNPTiBkYXRhIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSBzY2hlbWEgU3Vic2V0IG9mIEpTT04gU2NoZW1hLiBNdXN0IGhhdmUgYSBgdHlwZWAuXG4gICAqIEByZXR1cm5zIElmIGRhdGEgaXMgdmFsaWQ6IGB0cnVlYCwgaWYgaXQgaXMgaW52YWxpZDogYGZhbHNlYFxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvVkFMSURBVElPTi5tZH1cbiAgICovXG4gIHZhbGlkYXRlKGRhdGE6IHVua25vd24sIHNjaGVtYTogSlNPTlNjaGVtYSk6IGJvb2xlYW4ge1xuXG4gICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuXG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVN0cmluZyhkYXRhLCBzY2hlbWEpO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZU51bWJlcihkYXRhLCBzY2hlbWEpO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQm9vbGVhbihkYXRhLCBzY2hlbWEpO1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFycmF5KGRhdGEsIHNjaGVtYSk7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZU9iamVjdChkYXRhLCBzY2hlbWEpO1xuXG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYSBzdHJpbmdcbiAgICogQHBhcmFtIGRhdGEgRGF0YSB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0gc2NoZW1hIFNjaGVtYSBkZXNjcmliaW5nIHRoZSBzdHJpbmdcbiAgICogQHJldHVybnMgSWYgZGF0YSBpcyB2YWxpZDogYHRydWVgLCBpZiBpdCBpcyBpbnZhbGlkOiBgZmFsc2VgXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGVTdHJpbmcoZGF0YTogdW5rbm93biwgc2NoZW1hOiBKU09OU2NoZW1hU3RyaW5nKTogYm9vbGVhbiB7XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlQ29uc3QoZGF0YSwgc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZGF0ZUVudW0oZGF0YSwgc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICgoc2NoZW1hLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSAmJiAoZGF0YS5sZW5ndGggPiBzY2hlbWEubWF4TGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICgoc2NoZW1hLm1pbkxlbmd0aCAhPT0gdW5kZWZpbmVkKSAmJiAoZGF0YS5sZW5ndGggPCBzY2hlbWEubWluTGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEucGF0dGVybikge1xuXG4gICAgICBsZXQgcmVndWxhckV4cHJlc3Npb246IFJlZ0V4cCB8IG51bGwgPSBudWxsO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoc2NoZW1hLnBhdHRlcm4pO1xuICAgICAgfSBjYXRjaCB7fVxuXG4gICAgICBpZiAocmVndWxhckV4cHJlc3Npb24gJiYgIXJlZ3VsYXJFeHByZXNzaW9uLnRlc3QoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhIG51bWJlciBvciBhbiBpbnRlZ2VyXG4gICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHNjaGVtYSBTY2hlbWEgZGVzY3JpYmluZyB0aGUgbnVtYmVyIG9yIGludGVnZXJcbiAgICogQHJldHVybnMgSWYgZGF0YSBpcyB2YWxpZDogYHRydWVgLCBpZiBpdCBpcyBpbnZhbGlkOiBgZmFsc2VgXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGVOdW1iZXIoZGF0YTogdW5rbm93biwgc2NoZW1hOiBKU09OU2NoZW1hTnVtYmVyIHzCoEpTT05TY2hlbWFJbnRlZ2VyKTogYm9vbGVhbiB7XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKChzY2hlbWEudHlwZSA9PT0gJ2ludGVnZXInKSAmJiAhTnVtYmVyLmlzSW50ZWdlcihkYXRhKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZGF0ZUNvbnN0KGRhdGEsIHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVFbnVtKGRhdGEsIHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiBUZXN0IGlzIGRvbmUgdGhpcyB3YXkgdG8gbm90IGRpdmlkZSBieSAwICovXG4gICAgaWYgKHNjaGVtYS5tdWx0aXBsZU9mICYmICFOdW1iZXIuaXNJbnRlZ2VyKGRhdGEgLyBzY2hlbWEubXVsdGlwbGVPZikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoKHNjaGVtYS5tYXhpbXVtICE9PSB1bmRlZmluZWQpICYmIChkYXRhID4gc2NoZW1hLm1heGltdW0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoKHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtICE9PSB1bmRlZmluZWQpICYmIChkYXRhID49IHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgfVxuXG4gICAgaWYgKChzY2hlbWEubWluaW11bSAhPT0gdW5kZWZpbmVkKSAmJiAoZGF0YSA8IHNjaGVtYS5taW5pbXVtKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgfVxuXG4gICAgaWYgKChzY2hlbWEuZXhjbHVzaXZlTWluaW11bSAhPT0gdW5kZWZpbmVkKSAmJiAoZGF0YSA8PSBzY2hlbWEuZXhjbHVzaXZlTWluaW11bSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYSBib29sZWFuXG4gICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHNjaGVtYSBTY2hlbWEgZGVzY3JpYmluZyB0aGUgYm9vbGVhblxuICAgKiBAcmV0dXJucyBJZiBkYXRhIGlzIHZhbGlkOiBgdHJ1ZWAsIGlmIGl0IGlzIGludmFsaWQ6IGBmYWxzZWBcbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUJvb2xlYW4oZGF0YTogdW5rbm93biwgc2NoZW1hOiBKU09OU2NoZW1hQm9vbGVhbik6IGJvb2xlYW4ge1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVDb25zdChkYXRhLCBzY2hlbWEpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhbiBhcnJheVxuICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSBzY2hlbWEgU2NoZW1hIGRlc2NyaWJpbmcgdGhlIGFycmF5XG4gICAqIEByZXR1cm5zIElmIGRhdGEgaXMgdmFsaWQ6IGB0cnVlYCwgaWYgaXQgaXMgaW52YWxpZDogYGZhbHNlYFxuICAgKi9cbiAgcHJvdGVjdGVkIHZhbGlkYXRlQXJyYXkoZGF0YTogdW5rbm93biwgc2NoZW1hOiBKU09OU2NoZW1hQXJyYXkpOiBib29sZWFuIHtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICgoc2NoZW1hLm1heEl0ZW1zICE9PSB1bmRlZmluZWQpICYmIChkYXRhLmxlbmd0aCA+IHNjaGVtYS5tYXhJdGVtcykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoKHNjaGVtYS5taW5JdGVtcyAhPT0gdW5kZWZpbmVkKSAmJiAoZGF0YS5sZW5ndGggPCBzY2hlbWEubWluSXRlbXMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS51bmlxdWVJdGVtcykge1xuXG4gICAgICAvKiBDcmVhdGUgYSBzZXQgdG8gZWxpbWluYXRlIHZhbHVlcyB3aXRoIG11bHRpcGxlIG9jY3VyZW5jZXMgKi9cbiAgICAgIGNvbnN0IGRhdGFTZXQgPSBuZXcgU2V0KGRhdGEpO1xuXG4gICAgICBpZiAoZGF0YS5sZW5ndGggIT09IGRhdGFTZXQuc2l6ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICAvKiBTcGVjaWZpYyB0ZXN0IGZvciB0dXBsZXMgKi9cbiAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG5cbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlVHVwbGUoZGF0YSwgc2NoZW1hLml0ZW1zKTtcblxuICAgIH1cblxuICAgIC8qIFZhbGlkYXRlIGFsbCB0aGUgdmFsdWVzIGluIGFycmF5ICovXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBkYXRhKSB7XG5cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZSh2YWx1ZSwgc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgdHVwbGUgKGFycmF5IHdpdGggZml4ZWQgbGVuZ3RoIGFuZCBtdWx0aXBsZSB0eXBlcylcbiAgICogQHBhcmFtIGRhdGEgRGF0YSB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0gc2NoZW1hcyBTY2hlbWFzIGRlc2NyaWJpbmcgdGhlIHR1cGxlXG4gICAqIEByZXR1cm5zIElmIGRhdGEgaXMgdmFsaWQ6IGB0cnVlYCwgaWYgaXQgaXMgaW52YWxpZDogYGZhbHNlYFxuICAgKi9cbiAgcHJvdGVjdGVkIHZhbGlkYXRlVHVwbGUoZGF0YTogdW5rbm93bltdLCBzY2hlbWFzOiBKU09OU2NoZW1hW10pOiBib29sZWFuIHtcblxuICAgIC8qIFR1cGxlcyBoYXZlIGEgZml4ZWQgbGVuZ3RoICovXG4gICAgaWYgKGRhdGEubGVuZ3RoICE9PSBzY2hlbWFzLmxlbmd0aCkge1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNjaGVtYXMubGVuZ3RoOyBpICs9IDEpIHtcblxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlKGRhdGFbaV0sIHNjaGVtYXNbaV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYW4gb2JqZWN0XG4gICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHNjaGVtYSBKU09OIHNjaGVtYSBkZXNjcmliaW5nIHRoZSBvYmplY3RcbiAgICogQHJldHVybnMgSWYgZGF0YSBpcyB2YWxpZDogYHRydWVgLCBpZiBpdCBpcyBpbnZhbGlkOiBgZmFsc2VgXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGVPYmplY3QoZGF0YTogdW5rbm93biwgc2NoZW1hOiBKU09OU2NoZW1hT2JqZWN0KTogYm9vbGVhbiB7XG5cbiAgICAvKiBDaGVjayB0aGUgdHlwZSBhbmQgaWYgbm90IGBudWxsYCBhcyBgbnVsbGAgYWxzbyBoYXZlIHRoZSB0eXBlIGBvYmplY3RgIGluIG9sZCBicm93c2VycyAqL1xuICAgIGlmICgodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB8fCAoZGF0YSA9PT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiBDaGVjayBpZiB0aGUgb2JqZWN0IGRvZXNuJ3QgaGF2ZSBtb3JlIHByb3BlcnRpZXMgdGhhbiBleHBlY3RlZFxuICAgICAqIEVxdWl2YWxlbnQgb2YgYGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZWBcbiAgICAgKi9cbiAgICBpZiAoT2JqZWN0LmtleXMoc2NoZW1hLnByb3BlcnRpZXMpLmxlbmd0aCA8IE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qIFZhbGlkYXRlIHJlcXVpcmVkIHByb3BlcnRpZXMgKi9cbiAgICBpZiAoc2NoZW1hLnJlcXVpcmVkKSB7XG5cbiAgICAgIGZvciAoY29uc3QgcmVxdWlyZWRQcm9wIG9mIHNjaGVtYS5yZXF1aXJlZCkge1xuXG4gICAgICAgIGlmICghZGF0YS5oYXNPd25Qcm9wZXJ0eShyZXF1aXJlZFByb3ApKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgIH1cblxuICAgIC8qIFJlY3Vyc2l2ZWx5IHZhbGlkYXRlIGFsbCBwcm9wZXJ0aWVzICovXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBpbiBzY2hlbWEucHJvcGVydGllcykge1xuXG4gICAgICAvKiBGaWx0ZXIgdG8ga2VlcCBvbmx5IHJlYWwgcHJvcGVydGllcyAobm8gaW50ZXJuYWwgSlMgc3R1ZmYpIGFuZCBjaGVjayBpZiB0aGUgZGF0YSBoYXMgdGhlIHByb3BlcnR5IHRvbyAqL1xuICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHByb3BlcnR5KSAmJiBkYXRhLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuXG4gICAgICAgIGlmICghdGhpcy52YWxpZGF0ZSgoZGF0YSBhcyB7IFtrOiBzdHJpbmddOiB1bmtub3duOyB9KVtwcm9wZXJ0eV0sIHNjaGVtYS5wcm9wZXJ0aWVzW3Byb3BlcnR5XSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhIGNvbnN0YW50XG4gICAqIEBwYXJhbSBkYXRhIERhdGEgdGEgdmFsaWRhdGVcbiAgICogQHBhcmFtIHNjaGVtYSBKU09OIHNjaGVtYSBkZXNjcmliaW5nIHRoZSBjb25zdGFudFxuICAgKiBAcmV0dXJucyBJZiBkYXRhIGlzIHZhbGlkOiBgdHJ1ZWAsIGlmIGl0IGlzIGludmFsaWQ6IGBmYWxzZWBcbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUNvbnN0KGRhdGE6IHVua25vd24sIHNjaGVtYTogSlNPTlNjaGVtYUJvb2xlYW4gfCBKU09OU2NoZW1hSW50ZWdlciB8IEpTT05TY2hlbWFOdW1iZXIgfCBKU09OU2NoZW1hU3RyaW5nKTogYm9vbGVhbiB7XG5cbiAgICBpZiAoIXNjaGVtYS5jb25zdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIChkYXRhID09PSBzY2hlbWEuY29uc3QpO1xuXG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYW4gZW51bVxuICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRhIHZhbGlkYXRlXG4gICAqIEBwYXJhbSBzY2hlbWEgSlNPTiBzY2hlbWEgZGVzY3JpYmluZyB0aGUgZW51bVxuICAgKiBAcmV0dXJucyBJZiBkYXRhIGlzIHZhbGlkOiBgdHJ1ZWAsIGlmIGl0IGlzIGludmFsaWQ6IGBmYWxzZWBcbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUVudW0oZGF0YTogdW5rbm93biwgc2NoZW1hOiBKU09OU2NoZW1hSW50ZWdlciB8IEpTT05TY2hlbWFOdW1iZXIgfCBKU09OU2NoZW1hU3RyaW5nKTogYm9vbGVhbiB7XG5cbiAgICBpZiAoIXNjaGVtYS5lbnVtKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiBDYXN0IGFzIHRoZSBkYXRhIGNhbiBiZSBvZiBtdWx0aXBsZSB0eXBlcywgYW5kIHNvIFR5cGVTY3JpcHQgaXMgbG9zdCAqL1xuICAgIHJldHVybiAoKHNjaGVtYS5lbnVtIGFzIHVua25vd25bXSkuaW5jbHVkZXMoZGF0YSkpO1xuXG4gIH1cblxufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi12YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiL1VzZXJzL2N5cmlsbGUvV2ViL29wZW5zb3VyY2UvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL3Byb2plY3RzL25neC1wd2EvbG9jYWwtc3RvcmFnZS9zcmMvIiwic291cmNlcyI6WyJsaWIvdmFsaWRhdGlvbi9qc29uLXZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVUzQyxNQUFNLE9BQU8sYUFBYTtJQUV4Qjs7Ozs7OztPQU9HO0lBQ0gsUUFBUSxDQUFDLElBQWEsRUFBRSxNQUFrQjtRQUV4QyxRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFFbkIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDM0MsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMzQyxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM1QyxLQUFLLE9BQU87Z0JBQ1YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxQyxLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUU1QztJQUVILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLGNBQWMsQ0FBQyxJQUFhLEVBQUUsTUFBd0I7UUFFOUQsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDNUIsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNyQyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3hFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3hFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFFbEIsSUFBSSxpQkFBaUIsR0FBa0IsSUFBSSxDQUFDO1lBRTVDLElBQUk7Z0JBQ0YsaUJBQWlCLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2hEO1lBQUMsV0FBTSxHQUFFO1lBRVYsSUFBSSxpQkFBaUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDdEQsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUVGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFFZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxjQUFjLENBQUMsSUFBYSxFQUFFLE1BQTRDO1FBRWxGLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzVCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUQsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNyQyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCw4Q0FBOEM7UUFDOUMsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3BFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDM0QsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ2hGLE9BQU8sS0FBSyxDQUFDO1NBRWQ7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDN0QsT0FBTyxLQUFLLENBQUM7U0FFZDtRQUVELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDOUUsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxPQUFPLElBQUksQ0FBQztJQUVkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLGVBQWUsQ0FBQyxJQUFhLEVBQUUsTUFBeUI7UUFFaEUsSUFBSSxPQUFPLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDN0IsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNyQyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFFZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxhQUFhLENBQUMsSUFBYSxFQUFFLE1BQXVCO1FBRTVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3RFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3RFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFFdEIsK0RBQStEO1lBQy9ELE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTlCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUNoQyxPQUFPLEtBQUssQ0FBQzthQUNkO1NBRUY7UUFFRCw4QkFBOEI7UUFDOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUUvQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUUvQztRQUVELHNDQUFzQztRQUN0QyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksRUFBRTtZQUV4QixnREFBZ0Q7WUFDaEQsa0ZBQWtGO1lBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBbUIsQ0FBQyxFQUFFO2dCQUNyRCxPQUFPLEtBQUssQ0FBQzthQUNkO1NBRUY7UUFFRCxPQUFPLElBQUksQ0FBQztJQUVkLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLGFBQWEsQ0FBQyxJQUFlLEVBQUUsT0FBcUI7UUFFNUQsZ0NBQWdDO1FBQ2hDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBRWxDLE9BQU8sS0FBSyxDQUFDO1NBRWQ7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBRTFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdkMsT0FBTyxLQUFLLENBQUM7YUFDZDtTQUVGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFFZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxjQUFjLENBQUMsSUFBYSxFQUFFLE1BQXdCO1FBRTlELDRGQUE0RjtRQUM1RixJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDakQsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVEOztXQUVHO1FBQ0gsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDcEUsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELGtDQUFrQztRQUNsQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFFbkIsS0FBSyxNQUFNLFlBQVksSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO2dCQUUxQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRTtvQkFDdEMsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7YUFFRjtTQUVGO1FBRUQseUNBQXlDO1FBQ3pDLEtBQUssTUFBTSxRQUFRLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUV4QywyR0FBMkc7WUFDM0csSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUUvRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBRSxJQUFrQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtvQkFDOUYsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7YUFFRjtTQUVGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFFZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxhQUFhLENBQUMsSUFBYSxFQUFFLE1BQW1GO1FBRXhILElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxZQUFZLENBQUMsSUFBYSxFQUFFLE1BQStEO1FBRW5HLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ2hCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCwwRUFBMEU7UUFDMUUsT0FBTyxDQUFFLE1BQU0sQ0FBQyxJQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRXJELENBQUM7Ozs7WUF4VEYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBKU09OU2NoZW1hLCBKU09OU2NoZW1hU3RyaW5nLCBKU09OU2NoZW1hSW50ZWdlciwgSlNPTlNjaGVtYU51bWJlciwgSlNPTlNjaGVtYUJvb2xlYW4sXG4gIEpTT05TY2hlbWFBcnJheSwgSlNPTlNjaGVtYU9iamVjdFxufSBmcm9tICcuL2pzb24tc2NoZW1hJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSlNPTlZhbGlkYXRvciB7XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgSlNPTiBkYXRhIGFnYWluc3QgYSBKc3Vic2V0IG9mIHRoZSBKU09OIFNjaGVtYSBzdGFuZGFyZC5cbiAgICogVHlwZXMgYXJlIGVuZm9yY2VkIHRvIHZhbGlkYXRlIGV2ZXJ5dGhpbmc6IGVhY2ggc2NoZW1hIG11c3RcbiAgICogQHBhcmFtIGRhdGEgSlNPTiBkYXRhIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSBzY2hlbWEgU3Vic2V0IG9mIEpTT04gU2NoZW1hLiBNdXN0IGhhdmUgYSBgdHlwZWAuXG4gICAqIEByZXR1cm5zIElmIGRhdGEgaXMgdmFsaWQ6IGB0cnVlYCwgaWYgaXQgaXMgaW52YWxpZDogYGZhbHNlYFxuICAgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vY3lyaWxsZXR1emkvYW5ndWxhci1hc3luYy1sb2NhbC1zdG9yYWdlL2Jsb2IvbWFzdGVyL2RvY3MvVkFMSURBVElPTi5tZH1cbiAgICovXG4gIHZhbGlkYXRlKGRhdGE6IHVua25vd24sIHNjaGVtYTogSlNPTlNjaGVtYSk6IGJvb2xlYW4ge1xuXG4gICAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuXG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVN0cmluZyhkYXRhLCBzY2hlbWEpO1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZU51bWJlcihkYXRhLCBzY2hlbWEpO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQm9vbGVhbihkYXRhLCBzY2hlbWEpO1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFycmF5KGRhdGEsIHNjaGVtYSk7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZU9iamVjdChkYXRhLCBzY2hlbWEpO1xuXG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYSBzdHJpbmdcbiAgICogQHBhcmFtIGRhdGEgRGF0YSB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0gc2NoZW1hIFNjaGVtYSBkZXNjcmliaW5nIHRoZSBzdHJpbmdcbiAgICogQHJldHVybnMgSWYgZGF0YSBpcyB2YWxpZDogYHRydWVgLCBpZiBpdCBpcyBpbnZhbGlkOiBgZmFsc2VgXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGVTdHJpbmcoZGF0YTogdW5rbm93biwgc2NoZW1hOiBKU09OU2NoZW1hU3RyaW5nKTogYm9vbGVhbiB7XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlQ29uc3QoZGF0YSwgc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZGF0ZUVudW0oZGF0YSwgc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICgoc2NoZW1hLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkKSAmJiAoZGF0YS5sZW5ndGggPiBzY2hlbWEubWF4TGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICgoc2NoZW1hLm1pbkxlbmd0aCAhPT0gdW5kZWZpbmVkKSAmJiAoZGF0YS5sZW5ndGggPCBzY2hlbWEubWluTGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEucGF0dGVybikge1xuXG4gICAgICBsZXQgcmVndWxhckV4cHJlc3Npb246IFJlZ0V4cCB8IG51bGwgPSBudWxsO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZWd1bGFyRXhwcmVzc2lvbiA9IG5ldyBSZWdFeHAoc2NoZW1hLnBhdHRlcm4pO1xuICAgICAgfSBjYXRjaCB7fVxuXG4gICAgICBpZiAocmVndWxhckV4cHJlc3Npb24gJiYgIXJlZ3VsYXJFeHByZXNzaW9uLnRlc3QoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhIG51bWJlciBvciBhbiBpbnRlZ2VyXG4gICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHNjaGVtYSBTY2hlbWEgZGVzY3JpYmluZyB0aGUgbnVtYmVyIG9yIGludGVnZXJcbiAgICogQHJldHVybnMgSWYgZGF0YSBpcyB2YWxpZDogYHRydWVgLCBpZiBpdCBpcyBpbnZhbGlkOiBgZmFsc2VgXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGVOdW1iZXIoZGF0YTogdW5rbm93biwgc2NoZW1hOiBKU09OU2NoZW1hTnVtYmVyIHzCoEpTT05TY2hlbWFJbnRlZ2VyKTogYm9vbGVhbiB7XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKChzY2hlbWEudHlwZSA9PT0gJ2ludGVnZXInKSAmJiAhTnVtYmVyLmlzSW50ZWdlcihkYXRhKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy52YWxpZGF0ZUNvbnN0KGRhdGEsIHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVFbnVtKGRhdGEsIHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiBUZXN0IGlzIGRvbmUgdGhpcyB3YXkgdG8gbm90IGRpdmlkZSBieSAwICovXG4gICAgaWYgKHNjaGVtYS5tdWx0aXBsZU9mICYmICFOdW1iZXIuaXNJbnRlZ2VyKGRhdGEgLyBzY2hlbWEubXVsdGlwbGVPZikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoKHNjaGVtYS5tYXhpbXVtICE9PSB1bmRlZmluZWQpICYmIChkYXRhID4gc2NoZW1hLm1heGltdW0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoKHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtICE9PSB1bmRlZmluZWQpICYmIChkYXRhID49IHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgfVxuXG4gICAgaWYgKChzY2hlbWEubWluaW11bSAhPT0gdW5kZWZpbmVkKSAmJiAoZGF0YSA8IHNjaGVtYS5taW5pbXVtKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgfVxuXG4gICAgaWYgKChzY2hlbWEuZXhjbHVzaXZlTWluaW11bSAhPT0gdW5kZWZpbmVkKSAmJiAoZGF0YSA8PSBzY2hlbWEuZXhjbHVzaXZlTWluaW11bSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYSBib29sZWFuXG4gICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHNjaGVtYSBTY2hlbWEgZGVzY3JpYmluZyB0aGUgYm9vbGVhblxuICAgKiBAcmV0dXJucyBJZiBkYXRhIGlzIHZhbGlkOiBgdHJ1ZWAsIGlmIGl0IGlzIGludmFsaWQ6IGBmYWxzZWBcbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZUJvb2xlYW4oZGF0YTogdW5rbm93biwgc2NoZW1hOiBKU09OU2NoZW1hQm9vbGVhbik6IGJvb2xlYW4ge1xuXG4gICAgaWYgKHR5cGVvZiBkYXRhICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMudmFsaWRhdGVDb25zdChkYXRhLCBzY2hlbWEpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhbiBhcnJheVxuICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSBzY2hlbWEgU2NoZW1hIGRlc2NyaWJpbmcgdGhlIGFycmF5XG4gICAqIEByZXR1cm5zIElmIGRhdGEgaXMgdmFsaWQ6IGB0cnVlYCwgaWYgaXQgaXMgaW52YWxpZDogYGZhbHNlYFxuICAgKi9cbiAgcHJvdGVjdGVkIHZhbGlkYXRlQXJyYXkoZGF0YTogdW5rbm93biwgc2NoZW1hOiBKU09OU2NoZW1hQXJyYXkpOiBib29sZWFuIHtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmICgoc2NoZW1hLm1heEl0ZW1zICE9PSB1bmRlZmluZWQpICYmIChkYXRhLmxlbmd0aCA+IHNjaGVtYS5tYXhJdGVtcykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoKHNjaGVtYS5taW5JdGVtcyAhPT0gdW5kZWZpbmVkKSAmJiAoZGF0YS5sZW5ndGggPCBzY2hlbWEubWluSXRlbXMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS51bmlxdWVJdGVtcykge1xuXG4gICAgICAvKiBDcmVhdGUgYSBzZXQgdG8gZWxpbWluYXRlIHZhbHVlcyB3aXRoIG11bHRpcGxlIG9jY3VyZW5jZXMgKi9cbiAgICAgIGNvbnN0IGRhdGFTZXQgPSBuZXcgU2V0KGRhdGEpO1xuXG4gICAgICBpZiAoZGF0YS5sZW5ndGggIT09IGRhdGFTZXQuc2l6ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICAvKiBTcGVjaWZpYyB0ZXN0IGZvciB0dXBsZXMgKi9cbiAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpKSB7XG5cbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlVHVwbGUoZGF0YSwgc2NoZW1hLml0ZW1zKTtcblxuICAgIH1cblxuICAgIC8qIFZhbGlkYXRlIGFsbCB0aGUgdmFsdWVzIGluIGFycmF5ICovXG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiBkYXRhKSB7XG5cbiAgICAgIC8vIFRPRE86IHJlbW92ZSB3aGVuIFR5cGVTY3JpcHQgNC4xIGlzIGF2YWlsYWJsZVxuICAgICAgLy8gKGN1cnJlbnRseSB0aGUgbmFycm93ZWQgdHlwZSBmcm9tIGBBcnJheS5pc0FycmF5KClgIGlzIGxvc3Qgb24gcmVhZG9ubHkgYXJyYXlzKVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlKHZhbHVlLCBzY2hlbWEuaXRlbXMgYXMgSlNPTlNjaGVtYSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBhIHR1cGxlIChhcnJheSB3aXRoIGZpeGVkIGxlbmd0aCBhbmQgbXVsdGlwbGUgdHlwZXMpXG4gICAqIEBwYXJhbSBkYXRhIERhdGEgdG8gdmFsaWRhdGVcbiAgICogQHBhcmFtIHNjaGVtYXMgU2NoZW1hcyBkZXNjcmliaW5nIHRoZSB0dXBsZVxuICAgKiBAcmV0dXJucyBJZiBkYXRhIGlzIHZhbGlkOiBgdHJ1ZWAsIGlmIGl0IGlzIGludmFsaWQ6IGBmYWxzZWBcbiAgICovXG4gIHByb3RlY3RlZCB2YWxpZGF0ZVR1cGxlKGRhdGE6IHVua25vd25bXSwgc2NoZW1hczogSlNPTlNjaGVtYVtdKTogYm9vbGVhbiB7XG5cbiAgICAvKiBUdXBsZXMgaGF2ZSBhIGZpeGVkIGxlbmd0aCAqL1xuICAgIGlmIChkYXRhLmxlbmd0aCAhPT0gc2NoZW1hcy5sZW5ndGgpIHtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzY2hlbWFzLmxlbmd0aDsgaSArPSAxKSB7XG5cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZShkYXRhW2ldLCBzY2hlbWFzW2ldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFuIG9iamVjdFxuICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRvIHZhbGlkYXRlXG4gICAqIEBwYXJhbSBzY2hlbWEgSlNPTiBzY2hlbWEgZGVzY3JpYmluZyB0aGUgb2JqZWN0XG4gICAqIEByZXR1cm5zIElmIGRhdGEgaXMgdmFsaWQ6IGB0cnVlYCwgaWYgaXQgaXMgaW52YWxpZDogYGZhbHNlYFxuICAgKi9cbiAgcHJvdGVjdGVkIHZhbGlkYXRlT2JqZWN0KGRhdGE6IHVua25vd24sIHNjaGVtYTogSlNPTlNjaGVtYU9iamVjdCk6IGJvb2xlYW4ge1xuXG4gICAgLyogQ2hlY2sgdGhlIHR5cGUgYW5kIGlmIG5vdCBgbnVsbGAgYXMgYG51bGxgIGFsc28gaGF2ZSB0aGUgdHlwZSBgb2JqZWN0YCBpbiBvbGQgYnJvd3NlcnMgKi9cbiAgICBpZiAoKHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0JykgfHwgKGRhdGEgPT09IG51bGwpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyogQ2hlY2sgaWYgdGhlIG9iamVjdCBkb2Vzbid0IGhhdmUgbW9yZSBwcm9wZXJ0aWVzIHRoYW4gZXhwZWN0ZWRcbiAgICAgKiBFcXVpdmFsZW50IG9mIGBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VgXG4gICAgICovXG4gICAgaWYgKE9iamVjdC5rZXlzKHNjaGVtYS5wcm9wZXJ0aWVzKS5sZW5ndGggPCBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKiBWYWxpZGF0ZSByZXF1aXJlZCBwcm9wZXJ0aWVzICovXG4gICAgaWYgKHNjaGVtYS5yZXF1aXJlZCkge1xuXG4gICAgICBmb3IgKGNvbnN0IHJlcXVpcmVkUHJvcCBvZiBzY2hlbWEucmVxdWlyZWQpIHtcblxuICAgICAgICBpZiAoIWRhdGEuaGFzT3duUHJvcGVydHkocmVxdWlyZWRQcm9wKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICB9XG5cbiAgICAvKiBSZWN1cnNpdmVseSB2YWxpZGF0ZSBhbGwgcHJvcGVydGllcyAqL1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gc2NoZW1hLnByb3BlcnRpZXMpIHtcblxuICAgICAgLyogRmlsdGVyIHRvIGtlZXAgb25seSByZWFsIHByb3BlcnRpZXMgKG5vIGludGVybmFsIEpTIHN0dWZmKSBhbmQgY2hlY2sgaWYgdGhlIGRhdGEgaGFzIHRoZSBwcm9wZXJ0eSB0b28gKi9cbiAgICAgIGlmIChzY2hlbWEucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkgJiYgZGF0YS5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblxuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGUoKGRhdGEgYXMgeyBbazogc3RyaW5nXTogdW5rbm93bjsgfSlbcHJvcGVydHldLCBzY2hlbWEucHJvcGVydGllc1twcm9wZXJ0eV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuXG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYSBjb25zdGFudFxuICAgKiBAcGFyYW0gZGF0YSBEYXRhIHRhIHZhbGlkYXRlXG4gICAqIEBwYXJhbSBzY2hlbWEgSlNPTiBzY2hlbWEgZGVzY3JpYmluZyB0aGUgY29uc3RhbnRcbiAgICogQHJldHVybnMgSWYgZGF0YSBpcyB2YWxpZDogYHRydWVgLCBpZiBpdCBpcyBpbnZhbGlkOiBgZmFsc2VgXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGVDb25zdChkYXRhOiB1bmtub3duLCBzY2hlbWE6IEpTT05TY2hlbWFCb29sZWFuIHwgSlNPTlNjaGVtYUludGVnZXIgfCBKU09OU2NoZW1hTnVtYmVyIHwgSlNPTlNjaGVtYVN0cmluZyk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKCFzY2hlbWEuY29uc3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiAoZGF0YSA9PT0gc2NoZW1hLmNvbnN0KTtcblxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGFuIGVudW1cbiAgICogQHBhcmFtIGRhdGEgRGF0YSB0YSB2YWxpZGF0ZVxuICAgKiBAcGFyYW0gc2NoZW1hIEpTT04gc2NoZW1hIGRlc2NyaWJpbmcgdGhlIGVudW1cbiAgICogQHJldHVybnMgSWYgZGF0YSBpcyB2YWxpZDogYHRydWVgLCBpZiBpdCBpcyBpbnZhbGlkOiBgZmFsc2VgXG4gICAqL1xuICBwcm90ZWN0ZWQgdmFsaWRhdGVFbnVtKGRhdGE6IHVua25vd24sIHNjaGVtYTogSlNPTlNjaGVtYUludGVnZXIgfCBKU09OU2NoZW1hTnVtYmVyIHwgSlNPTlNjaGVtYVN0cmluZyk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKCFzY2hlbWEuZW51bSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyogQ2FzdCBhcyB0aGUgZGF0YSBjYW4gYmUgb2YgbXVsdGlwbGUgdHlwZXMsIGFuZCBzbyBUeXBlU2NyaXB0IGlzIGxvc3QgKi9cbiAgICByZXR1cm4gKChzY2hlbWEuZW51bSBhcyB1bmtub3duW10pLmluY2x1ZGVzKGRhdGEpKTtcblxuICB9XG5cbn1cbiJdfQ==

@@ -145,2 +145,4 @@ import { ɵɵdefineInjectable, Injectable, InjectionToken, ɵɵinject, Inject, PLATFORM_ID, NgModule } from '@angular/core';

for (const value of data) {
// TODO: remove when TypeScript 4.1 is available
// (currently the narrowed type from `Array.isArray()` is lost on readonly arrays)
if (!this.validate(value, schema.items)) {

@@ -147,0 +149,0 @@ return false;

@@ -109,3 +109,3 @@ import { Observable, OperatorFunction, ReplaySubject } from 'rxjs';

*/
get<T extends string = string>(key: string, schema: JSONSchemaString): Observable<string | undefined>;
get<T extends string = string>(key: string, schema: JSONSchemaString): Observable<T | undefined>;
/**

@@ -116,3 +116,3 @@ * @deprecated The cast is useless here and doesn't match the JSON schema. Just remove the cast.

get<T = string>(key: string, schema: JSONSchemaString): Observable<string | undefined>;
get<T extends number = number>(key: string, schema: JSONSchemaInteger | JSONSchemaNumber): Observable<number | undefined>;
get<T extends number = number>(key: string, schema: JSONSchemaInteger | JSONSchemaNumber): Observable<T | undefined>;
/**

@@ -123,3 +123,3 @@ * @deprecated The cast is useless here and doesn't match the JSON schema. Just remove the cast.

get<T = number>(key: string, schema: JSONSchemaInteger | JSONSchemaNumber): Observable<number | undefined>;
get<T extends boolean = boolean>(key: string, schema: JSONSchemaBoolean): Observable<boolean | undefined>;
get<T extends boolean = boolean>(key: string, schema: JSONSchemaBoolean): Observable<T | undefined>;
/**

@@ -130,3 +130,3 @@ * @deprecated The cast is useless here and doesn't match the JSON schema. Just remove the cast.

get<T = boolean>(key: string, schema: JSONSchemaBoolean): Observable<boolean | undefined>;
get<T extends string[] = string[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaString>): Observable<string[] | undefined>;
get<T extends readonly string[] = string[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaString>): Observable<T | undefined>;
/**

@@ -137,3 +137,3 @@ * @deprecated The cast is useless here and doesn't match the JSON schema. Just remove the cast.

get<T = string[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaString>): Observable<string[] | undefined>;
get<T extends number[] = number[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaInteger | JSONSchemaNumber>): Observable<number[] | undefined>;
get<T extends readonly number[] = number[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaInteger | JSONSchemaNumber>): Observable<T | undefined>;
/**

@@ -144,3 +144,3 @@ * @deprecated The cast is useless here and doesn't match the JSON schema. Just remove the cast.

get<T = number[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaInteger | JSONSchemaNumber>): Observable<number[] | undefined>;
get<T extends boolean[] = boolean[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaBoolean>): Observable<boolean[] | undefined>;
get<T extends readonly boolean[] = boolean[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaBoolean>): Observable<T | undefined>;
/**

@@ -220,3 +220,3 @@ * @deprecated The cast is useless here and doesn't match the JSON schema. Just remove the cast.

*/
watch<T extends string = string>(key: string, schema: JSONSchemaString): Observable<string | undefined>;
watch<T extends string = string>(key: string, schema: JSONSchemaString): Observable<T | undefined>;
/**

@@ -227,3 +227,3 @@ * @deprecated The cast is useless here and doesn't match the JSON schema. Just remove the cast.

watch<T = string>(key: string, schema: JSONSchemaString): Observable<string | undefined>;
watch<T extends number = number>(key: string, schema: JSONSchemaInteger | JSONSchemaNumber): Observable<number | undefined>;
watch<T extends number = number>(key: string, schema: JSONSchemaInteger | JSONSchemaNumber): Observable<T | undefined>;
/**

@@ -234,3 +234,3 @@ * @deprecated The cast is useless here and doesn't match the JSON schema. Just remove the cast.

watch<T = number>(key: string, schema: JSONSchemaInteger | JSONSchemaNumber): Observable<number | undefined>;
watch<T extends boolean = boolean>(key: string, schema: JSONSchemaBoolean): Observable<boolean | undefined>;
watch<T extends boolean = boolean>(key: string, schema: JSONSchemaBoolean): Observable<T | undefined>;
/**

@@ -241,3 +241,3 @@ * @deprecated The cast is useless here and doesn't match the JSON schema. Just remove the cast.

watch<T = boolean>(key: string, schema: JSONSchemaBoolean): Observable<boolean | undefined>;
watch<T extends string[] = string[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaString>): Observable<string[] | undefined>;
watch<T extends readonly string[] = string[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaString>): Observable<T | undefined>;
/**

@@ -248,3 +248,3 @@ * @deprecated The cast is useless here and doesn't match the JSON schema. Just remove the cast.

watch<T = string[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaString>): Observable<string[] | undefined>;
watch<T extends number[] = number[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaInteger | JSONSchemaNumber>): Observable<number[] | undefined>;
watch<T extends readonly number[] = number[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaInteger | JSONSchemaNumber>): Observable<T | undefined>;
/**

@@ -255,3 +255,3 @@ * @deprecated The cast is useless here and doesn't match the JSON schema. Just remove the cast.

watch<T = number[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaInteger | JSONSchemaNumber>): Observable<number[] | undefined>;
watch<T extends boolean[] = boolean[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaBoolean>): Observable<boolean[] | undefined>;
watch<T extends readonly boolean[] = boolean[]>(key: string, schema: JSONSchemaArrayOf<JSONSchemaBoolean>): Observable<T | undefined>;
/**

@@ -258,0 +258,0 @@ * @deprecated The cast is useless here and doesn't match the JSON schema. Just remove the cast.

@@ -29,3 +29,3 @@ /**

*/
enum?: number[];
enum?: readonly number[];
/**

@@ -68,3 +68,3 @@ * Check if a number is a multiple of x.

*/
enum?: number[];
enum?: readonly number[];
/**

@@ -107,3 +107,3 @@ * Check if a number is a multiple of x.

*/
enum?: string[];
enum?: readonly string[];
/**

@@ -136,3 +136,3 @@ * Maxium length for a string.

*/
items: JSONSchema | JSONSchema[];
items: JSONSchema | readonly JSONSchema[];
/**

@@ -202,3 +202,3 @@ * Check if an array length is lower or equal to this value.

*/
required?: string[];
required?: readonly string[];
}

@@ -205,0 +205,0 @@ /**

{
"name": "@ngx-pwa/local-storage",
"version": "11.0.0-0",
"version": "11.0.0-1",
"funding": {

@@ -5,0 +5,0 @@ "type": "github",

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc