@sumaris-net/ngx-components 18.21.6 → 18.21.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/doc/changelog.md +7 -0
- package/esm2022/src/app/core/menu/menu.component.mjs +3 -3
- package/esm2022/src/app/core/services/account.service.mjs +8 -1
- package/esm2022/src/app/core/services/model/entity.model.mjs +2 -2
- package/esm2022/src/app/core/services/platform.service.mjs +2 -3
- package/esm2022/src/app/core/table/async-table.class.mjs +1 -4
- package/esm2022/src/app/core/table/table.class.mjs +4 -6
- package/esm2022/src/app/shared/pipes/string.pipes.mjs +3 -3
- package/fesm2022/sumaris-net.ngx-components.mjs +16 -15
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/services/account.service.d.ts +1 -0
- package/src/app/core/table/async-table.class.d.ts +0 -1
- package/src/app/core/table/table.class.d.ts +0 -1
- package/src/app/shared/inputs.d.ts +1 -1
- package/src/app/shared/pipes/string.pipes.d.ts +1 -1
- package/src/assets/manifest.json +1 -1
|
@@ -4,7 +4,7 @@ import { fromDateISOString, toDateISOString } from '../../../shared/dates';
|
|
|
4
4
|
import { TreeItemEntityUtils } from './tree-item-entity.model';
|
|
5
5
|
import { AppPropertiesUtils } from '../../form/properties/properties.utils';
|
|
6
6
|
export function entityToString(obj, properties) {
|
|
7
|
-
return (obj && obj.id && joinPropertiesPath(obj, properties || ['name'])) || undefined;
|
|
7
|
+
return (obj && isNotNil(obj.id) && joinPropertiesPath(obj, properties || ['name'])) || undefined;
|
|
8
8
|
}
|
|
9
9
|
//@dynamic
|
|
10
10
|
export class Entity {
|
|
@@ -337,4 +337,4 @@ export class EntityUtils {
|
|
|
337
337
|
return target;
|
|
338
338
|
}
|
|
339
339
|
}
|
|
340
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFVLE1BQU0sUUFBUSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUcvSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFNNUUsTUFBTSxVQUFVLGNBQWMsQ0FBQyxHQUFzQixFQUFFLFVBQXFCO0lBQzFFLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUN6RixDQUFDO0FBdUJELFVBQVU7QUFDVixNQUFNLE9BQWdCLE1BQU07SUFHMUIsb0RBQW9EO0lBQ3BELE1BQU0sQ0FBQyxRQUFRLENBQVM7SUFFeEIsRUFBRSxHQUFPLElBQUksQ0FBQztJQUNkLFVBQVUsR0FBVyxJQUFJLENBQUM7SUFDMUIsVUFBVSxDQUFTO0lBRW5CLFlBQVksVUFBbUI7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBYztRQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFLLElBQUksQ0FBQyxXQUFtQixFQUFPLENBQUM7UUFDcEQs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TUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTFCLGdCQUFnQjtZQUNoQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQy9FLENBQUM7WUFDRCxzQ0FBc0M7aUJBQ2pDLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM1QyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFDRCxrREFBa0Q7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFFSCw4Q0FBOEM7UUFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV2QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNNb21lbnQsIE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eUJ5UGF0aCwgaXNFbXB0eUFycmF5LCBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgam9pblByb3BlcnRpZXNQYXRoIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBGaWx0ZXJGbiwgS2V5VmFsdWVUeXBlLCBPYmplY3RNYXAsIE9iamVjdE1hcEVudHJ5IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IFN0b3JlT2JqZWN0IH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQgeyBmcm9tRGF0ZUlTT1N0cmluZywgdG9EYXRlSVNPU3RyaW5nIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7IFRyZWVJdGVtRW50aXR5VXRpbHMgfSBmcm9tICcuL3RyZWUtaXRlbS1lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgQXBwUHJvcGVydGllc1V0aWxzIH0gZnJvbSAnLi4vLi4vZm9ybS9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMudXRpbHMnO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ2xvbmVhYmxlPFQ+IHtcbiAgY2xvbmUoKTogVDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVudGl0eVRvU3RyaW5nKG9iajogRW50aXR5PGFueT4gfCBhbnksIHByb3BlcnRpZXM/OiBzdHJpbmdbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiAob2JqICYmIG9iai5pZCAmJiBqb2luUHJvcGVydGllc1BhdGgob2JqLCBwcm9wZXJ0aWVzIHx8IFsnbmFtZSddKSkgfHwgdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVudGl0eUFzT2JqZWN0T3B0aW9ucyB7XG4gIG1pbmlmeT86IGJvb2xlYW47XG4gIGtlZXBUeXBlbmFtZT86IGJvb2xlYW47IC8vIHRydWUgYnkgZGVmYXVsdFxuICBrZWVwTG9jYWxJZD86IGJvb2xlYW47IC8vIHRydWUgYnkgZGVmYXVsdFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElFbnRpdHk8VCwgSUQgPSBudW1iZXIsIEFPIGV4dGVuZHMgRW50aXR5QXNPYmplY3RPcHRpb25zID0gRW50aXR5QXNPYmplY3RPcHRpb25zLCBGTyA9IGFueT4gZXh0ZW5kcyBDbG9uZWFibGU8VD4ge1xuICBpZDogSUQ7XG4gIHVwZGF0ZURhdGU6IE1vbWVudDtcbiAgX190eXBlbmFtZTogc3RyaW5nO1xuICBlcXVhbHMob3RoZXI6IFQpOiBib29sZWFuO1xuICBjbG9uZShvcHRzPzogQU8gJiBGTyk6IFQ7XG4gIGNvcHkodGFyZ2V0OiBULCBvcHRzPzogQU8gJiBGTyk6IHZvaWQ7XG4gIGFzT2JqZWN0KG9wdHM/OiBBTyk6IGFueTtcbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSwgb3B0cz86IEZPKTogdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgT21pdEZ1bmN0aW9uczxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVCBhcyBUW0tdIGV4dGVuZHMgRnVuY3Rpb24gPyBuZXZlciA6IEtdOiBUW0tdO1xufTtcblxuLy9AZHluYW1pY1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVudGl0eTxUIGV4dGVuZHMgRW50aXR5PFQsIElELCBBTywgRk8+LCBJRCA9IG51bWJlciwgQU8gZXh0ZW5kcyBFbnRpdHlBc09iamVjdE9wdGlvbnMgPSBFbnRpdHlBc09iamVjdE9wdGlvbnMsIEZPID0gYW55PlxuICBpbXBsZW1lbnRzIElFbnRpdHk8VCwgSUQsIEFPLCBGTz5cbntcbiAgLy8gVGhlIEdyYXBoUUwgdHlwZW5hbWUgKGluamVjdGVkIGJ5IEBFbnRpdHlDbGFzcygpKVxuICBzdGF0aWMgVFlQRU5BTUU6IHN0cmluZztcblxuICBpZDogSUQgPSBudWxsO1xuICB1cGRhdGVEYXRlOiBNb21lbnQgPSBudWxsO1xuICBfX3R5cGVuYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoX190eXBlbmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuX190eXBlbmFtZSA9IF9fdHlwZW5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGNsb25lKG9wdHM/OiBBTyAmIEZPKTogVCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3ICh0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSkoKSBhcyBUO1xuICAgIHRoaXMuY29weSh0YXJnZXQsIG9wdHMpO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBjb3B5KHRhcmdldDogVCwgb3B0cz86IEFPICYgRk8pIHtcbiAgICB0YXJnZXQuZnJvbU9iamVjdCh0aGlzLmFzT2JqZWN0KG9wdHMpLCBvcHRzKTtcbiAgfVxuXG4gIGFzT2JqZWN0KG9wdHM/OiBBTyk6IFN0b3JlT2JqZWN0IHtcbiAgICBjb25zdCB0YXJnZXQ6IGFueSA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMpOyAvLz0gey4uLnRoaXN9O1xuICAgIGlmICghb3B0cyB8fCBvcHRzLmtlZXBUeXBlbmFtZSAhPT0gdHJ1ZSkgZGVsZXRlIHRhcmdldC5fX3R5cGVuYW1lO1xuICAgIHRhcmdldC51cGRhdGVEYXRlID0gdG9EYXRlSVNPU3RyaW5nKHRoaXMudXBkYXRlRGF0ZSk7XG4gICAgaWYgKHRhcmdldC5pZCA9PSBudWxsIHx8IChvcHRzICYmIG9wdHMua2VlcExvY2FsSWQgPT09IGZhbHNlICYmIHRhcmdldC5pZCA8IDApKSB7XG4gICAgICBkZWxldGUgdGFyZ2V0LmlkO1xuICAgICAgZGVsZXRlIHRhcmdldC51cGRhdGVEYXRlOyAvLyBNYWtlIHRvIHNlbnMgdG8ga2VlcCB1cGRhdGVEYXRlIG9mIGEgbG9jYWwgZW50aXR5IHRvIHNhdmVcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnksIG9wdHM/OiBGTykge1xuICAgIHRoaXMuaWQgPSBzb3VyY2UuaWQgfHwgc291cmNlLmlkID09PSAwID8gc291cmNlLmlkIDogdW5kZWZpbmVkO1xuICAgIHRoaXMudXBkYXRlRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKHNvdXJjZS51cGRhdGVEYXRlKTtcbiAgICB0aGlzLl9fdHlwZW5hbWUgPSBzb3VyY2UuX190eXBlbmFtZSB8fCB0aGlzLl9fdHlwZW5hbWU7IC8vIEtlZXAgb3JpZ2luYWwgdHlwZSAoY2FuIGJlIHNldCBpbiBjb25zdHJ1Y3RvcilcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBvdGhlciAmJiB0aGlzLmlkID09PSBvdGhlci5pZDtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIHVzZSBzdGFuZGFyZCBpbnN0YW5jZW9mIGluc3RlYWRcbiAqIEBwYXJhbSBvYmpcbiAqIEBwYXJhbSBjb25zdHJ1Y3RvclxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNJbnN0YW5jZU9mPFQ+KG9iajogYW55LCBjb25zdHJ1Y3RvcjogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCk6IG9iaiBpcyBUIHtcbiAgaWYgKCFvYmopIHJldHVybiBmYWxzZTtcblxuICByZXR1cm4gb2JqIGluc3RhbmNlb2YgY29uc3RydWN0b3I7XG59XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRW50aXR5VXRpbHMge1xuICAvLyBDaGVjayB0aGF0IHRoZSBvYmplY3QgaXMgYW4gZW50aXR5XG4gIHN0YXRpYyBpc0VudGl0eTxUIGV4dGVuZHMgSUVudGl0eTxhbnk+PihvYmo6IFQgfCBhbnkpOiBvYmogaXMgVCB7XG4gICAgcmV0dXJuIGlzTm90TmlsKG9iaj8uX190eXBlbmFtZSkgJiYgdHlwZW9mIG9iai5mcm9tT2JqZWN0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouYXNPYmplY3QgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICAvLyBDaGVjayB0aGF0IHRoZSBvYmplY3QgaGFzIGEgTk9UIG5pbCBhdHRyaWJ1dGUgKElEIGJ5IGRlZmF1bHQpXG4gIHN0YXRpYyBpc05vdEVtcHR5PFQgZXh0ZW5kcyBJRW50aXR5PGFueT4gfCBhbnk+KG9iajogVCwgY2hlY2tlZEF0dHJpYnV0ZToga2V5b2YgVCA9IDxrZXlvZiBUPidpZCcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFvYmogJiYgb2JqW2NoZWNrZWRBdHRyaWJ1dGVdICE9PSBudWxsICYmIG9ialtjaGVja2VkQXR0cmlidXRlXSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhhdCB0aGUgb2JqZWN0IGhhcyBhIG5pbCBhdHRyaWJ1dGUgKElEIGJ5IGRlZmF1bHQpXG4gIHN0YXRpYyBpc0VtcHR5PFQgZXh0ZW5kcyBJRW50aXR5PGFueT4gfCBhbnk+KG9iajogVCwgY2hlY2tlZEF0dHJpYnV0ZToga2V5b2YgVCA9IDxrZXlvZiBUPidpZCcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIW9iaiB8fCBvYmpbY2hlY2tlZEF0dHJpYnV0ZV0gPT09IG51bGwgfHwgb2JqW2NoZWNrZWRBdHRyaWJ1dGVdID09PSB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGF0aWMgZXF1YWxzPFQgZXh0ZW5kcyBJRW50aXR5PGFueT4gfCBhbnk+KG8xOiBULCBvMjogVCwgY2hlY2tBdHRyaWJ1dGU/OiBrZXlvZiBUKTogYm9vbGVhbiB7XG4gICAgY2hlY2tBdHRyaWJ1dGUgPSBjaGVja0F0dHJpYnV0ZSB8fCAoJ2lkJyBhcyBrZXlvZiBUKTtcbiAgICByZXR1cm4gbzEgPT09IG8yIHx8IChpc05pbChvMSkgJiYgaXNOaWwobzIpKSB8fCAobzEgJiYgbzIgJiYgbzFbY2hlY2tBdHRyaWJ1dGVdID09PSBvMltjaGVja0F0dHJpYnV0ZV0pO1xuICB9XG5cbiAgc3RhdGljIGdldFByb3BlcnR5QnlQYXRoID0gZ2V0UHJvcGVydHlCeVBhdGg7XG5cbiAgc3RhdGljIGdldEFycmF5QXNNYXA8VCA9IGFueT4oc291cmNlPzogT2JqZWN0TWFwRW50cnk8VD5bXSk6IE9iamVjdE1hcDxUPiB7XG4gICAgcmV0dXJuIChzb3VyY2UgfHwgW10pLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XG4gICAgICByZXNbaXRlbS5rZXldID0gaXRlbS52YWx1ZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSwge30pO1xuICB9XG5cbiAgc3RhdGljIGdldE1hcEFzQXJyYXk8VCA9IGFueT4oc291cmNlPzogT2JqZWN0TWFwPFQ+KTogT2JqZWN0TWFwRW50cnk8VD5bXSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkgcmV0dXJuIHNvdXJjZTtcbiAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlIHx8IHt9KS5tYXAoKGtleSkgPT4gKHtcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlOiBzb3VyY2Vba2V5XSxcbiAgICB9KSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0UHJvcGVydHlBcnJheUFzT2JqZWN0ID0gQXBwUHJvcGVydGllc1V0aWxzLmFycmF5QXNPYmplY3Q7XG5cbiAgc3RhdGljIGNvcHlJZEFuZFVwZGF0ZURhdGU8VCBleHRlbmRzIEVudGl0eTxhbnksIGFueSwgYW55Pj4oc291cmNlOiBULCB0YXJnZXQ6IFQpIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuO1xuXG4gICAgLy8gVXBkYXRlIChpZCBhbmQgdXBkYXRlRGF0ZSlcbiAgICB0YXJnZXQuaWQgPSBpc05vdE5pbChzb3VyY2UuaWQpID8gc291cmNlLmlkIDogdGFyZ2V0LmlkO1xuICAgIHRhcmdldC51cGRhdGVEYXRlID0gZnJvbURhdGVJU09TdHJpbmcoc291cmNlLnVwZGF0ZURhdGUpIHx8IHRhcmdldC51cGRhdGVEYXRlO1xuXG4gICAgLy8gVXBkYXRlIGNyZWF0aW9uIERhdGUsIGlmIGV4aXN0c1xuICAgIGlmIChzb3VyY2VbJ2NyZWF0aW9uRGF0ZSddKSB7XG4gICAgICB0YXJnZXRbJ2NyZWF0aW9uRGF0ZSddID0gZnJvbURhdGVJU09TdHJpbmcoc291cmNlWydjcmVhdGlvbkRhdGUnXSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIGZpbGxMb2NhbElkczxUIGV4dGVuZHMgSUVudGl0eTxULCBhbnk+PihpdGVtczogVFtdLCBzZXF1ZW5jZUZhY3Rvcnk6IChmaXJzdEVudGl0eTogVCwgaW5jcmVtZW50U2l6ZTogbnVtYmVyKSA9PiBQcm9taXNlPG51bWJlcj4pIHtcbiAgICBjb25zdCBuZXdJdGVtcyA9IChpdGVtcyB8fCBbXSkuZmlsdGVyKChpdGVtKSA9PiBpc05pbChpdGVtLmlkKSB8fCBpdGVtLmlkID09PSAwKTtcbiAgICBpZiAoaXNFbXB0eUFycmF5KG5ld0l0ZW1zKSkgcmV0dXJuO1xuICAgIC8vIEdldCB0aGUgc2VxdWVuY2VcbiAgICBsZXQgY3VycmVudElkID0gKGF3YWl0IHNlcXVlbmNlRmFjdG9yeShuZXdJdGVtc1swXSwgbmV3SXRlbXMubGVuZ3RoKSkgKyAxO1xuICAgIC8vIFRha2UgdGhlIG1pbiAoc2VxdWVuY2UsIGlkKSwgaW4gY2FzZSB0aGUgc2VxdWVuY2UgaXMgY29ycnVwdGVkXG4gICAgY3VycmVudElkID0gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBpc05vdE5pbChpdGVtLmlkKSAmJiBpdGVtLmlkIDwgMCkucmVkdWNlKChyZXMsIGl0ZW0pID0+IE1hdGgubWluKHJlcywgaXRlbS5pZCksIGN1cnJlbnRJZCk7XG4gICAgbmV3SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4gKGl0ZW0uaWQgPSAtLWN1cnJlbnRJZCkpO1xuICB9XG5cbiAgc3RhdGljIGNsZWFuSWRBbmRVcGRhdGVEYXRlPFQgZXh0ZW5kcyBJRW50aXR5PFQsIGFueT4+KHNvdXJjZTogVCwgZGVmYXVsdFZhbHVlID0gbnVsbCkge1xuICAgIGlmICghc291cmNlKSByZXR1cm47IC8vIFNraXBcbiAgICBzb3VyY2UuaWQgPSBkZWZhdWx0VmFsdWU7XG4gICAgc291cmNlLnVwZGF0ZURhdGUgPSBkZWZhdWx0VmFsdWU7XG4gIH1cblxuICBzdGF0aWMgY2xlYW5JZHNBbmRVcGRhdGVEYXRlczxUIGV4dGVuZHMgSUVudGl0eTxULCBhbnk+PihpdGVtczogVFtdLCBkZWZhdWx0VmFsdWUgPSBudWxsKSB7XG4gICAgKGl0ZW1zIHx8IFtdKS5mb3JFYWNoKChpdGVtKSA9PiBFbnRpdHlVdGlscy5jbGVhbklkQW5kVXBkYXRlRGF0ZShpdGVtLCBkZWZhdWx0VmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyBzb3J0PFQgZXh0ZW5kcyBJRW50aXR5PFQsIGFueT4gfCBhbnk+KGRhdGE6IFRbXSwgc29ydEJ5Pzoga2V5b2YgVCB8IHN0cmluZywgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb24pOiBUW10ge1xuICAgIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCA8PSAxIHx8ICFzb3J0QnkpIHJldHVybiBkYXRhO1xuICAgIHJldHVybiBkYXRhLnNvcnQodGhpcy5zb3J0Q29tcGFyYXRvcihzb3J0QnksIHNvcnREaXJlY3Rpb24pKTtcbiAgfVxuXG4gIHN0YXRpYyBzb3J0Q29tcGFyYXRvcjxUIGV4dGVuZHMgSUVudGl0eTxULCBhbnk+IHwgYW55Pihzb3J0Qnk/OiBrZXlvZiBUIHwgc3RyaW5nLCBzb3J0RGlyZWN0aW9uPzogU29ydERpcmVjdGlvbik6IChhOiBULCBiOiBUKSA9PiBudW1iZXIge1xuICAgIGNvbnN0IGFmdGVyID0gIXNvcnREaXJlY3Rpb24gfHwgc29ydERpcmVjdGlvbiA9PT0gJ2FzYycgPyAxIDogLTE7XG4gICAgY29uc3QgcHJvcGVydHkgPSAoc29ydEJ5IHx8ICdpZCcpIGFzIHN0cmluZztcbiAgICByZXR1cm4gKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlQSA9IEVudGl0eVV0aWxzLmdldFByb3BlcnR5QnlQYXRoKGEsIHByb3BlcnR5KTtcbiAgICAgIGNvbnN0IHZhbHVlQiA9IEVudGl0eVV0aWxzLmdldFByb3BlcnR5QnlQYXRoKGIsIHByb3BlcnR5KTtcbiAgICAgIHJldHVybiBFbnRpdHlVdGlscy5jb21wYXJlKHZhbHVlQSwgdmFsdWVCLCBhZnRlcik7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb21wYXJlPFQgZXh0ZW5kcyBJRW50aXR5PFQsIGFueT4+KHZhbHVlMTogVCwgdmFsdWUyOiBULCBkaXJlY3Rpb246IDEgfCAtMSwgY2hlY2tBdHRyaWJ1dGU/OiBrZXlvZiBUKTogbnVtYmVyIHtcbiAgICBjaGVja0F0dHJpYnV0ZSA9IGNoZWNrQXR0cmlidXRlIHx8ICdpZCc7XG4gICAgaWYgKEVudGl0eVV0aWxzLmlzTm90RW1wdHkodmFsdWUxLCBjaGVja0F0dHJpYnV0ZSkgJiYgRW50aXR5VXRpbHMuaXNOb3RFbXB0eSh2YWx1ZTIsIGNoZWNrQXR0cmlidXRlKSkge1xuICAgICAgcmV0dXJuIEVudGl0eVV0aWxzLmVxdWFscyh2YWx1ZTEsIHZhbHVlMiwgY2hlY2tBdHRyaWJ1dGUpID8gMCA6IHZhbHVlMVtjaGVja0F0dHJpYnV0ZV0gPiB2YWx1ZTJbY2hlY2tBdHRyaWJ1dGVdID8gZGlyZWN0aW9uIDogLTEgKiBkaXJlY3Rpb247XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTEgPT09IHZhbHVlMiA/IDAgOiB2YWx1ZTEgPiB2YWx1ZTIgPyBkaXJlY3Rpb24gOiAtMSAqIGRpcmVjdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBjb21wYXJlVmFsdWU8VD4odmFsdWUxOiBULCB2YWx1ZTI6IFQsIGRpcmVjdGlvbjogMSB8IC0xKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdmFsdWUxID09PSB2YWx1ZTIgPyAwIDogdmFsdWUxID4gdmFsdWUyID8gZGlyZWN0aW9uIDogLTEgKiBkaXJlY3Rpb247XG4gIH1cblxuICBzdGF0aWMgZmlsdGVyPFQgZXh0ZW5kcyBJRW50aXR5PFQsIGFueT4gfCBhbnk+KGRhdGE6IFRbXSwgc2VhcmNoQXR0cmlidXRlOiBzdHJpbmcsIHNlYXJjaFRleHQ6IHN0cmluZyk6IFRbXSB7XG4gICAgY29uc3QgZmlsdGVyRm4gPSB0aGlzLnNlYXJjaFRleHRGaWx0ZXIoc2VhcmNoQXR0cmlidXRlLCBzZWFyY2hUZXh0KTtcbiAgICByZXR1cm4gZGF0YS5maWx0ZXIoZmlsdGVyRm4pO1xuICB9XG5cbiAgc3RhdGljIHNlYXJjaFRleHRGaWx0ZXI8VCBleHRlbmRzIElFbnRpdHk8VCwgYW55PiB8IGFueT4oc2VhcmNoQXR0cmlidXRlOiBzdHJpbmcgfCBzdHJpbmdbXSwgc2VhcmNoVGV4dDogc3RyaW5nKTogRmlsdGVyRm48VD4ge1xuICAgIGlmIChpc05pbE9yQmxhbmsoc2VhcmNoQXR0cmlidXRlKSB8fCBpc05pbE9yQmxhbmsoc2VhcmNoVGV4dCkpIHJldHVybiB1bmRlZmluZWQ7IC8vIGZpbHRlciBub3QgbmVlZFxuXG4gICAgY29uc3Qgc2VhcmNoUmVnZXhwID0gc2VhcmNoVGV4dFxuICAgICAgLy8gRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVyc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgICAucmVwbGFjZSgvWy1cXC9cXFxcXiQrLigpfFtcXF17fV0vZywgJ1xcXFwkJicpXG4gICAgICAvLyBJbnRlcnByZXQgKiBhcyBhbnkgdGV4dFxuICAgICAgLnJlcGxhY2UoL1sqXSsvZywgJy4qJylcbiAgICAgIC8vIEludGVycHJldCA/IGFzIG9uZSBjaGFyYWN0ZXJcbiAgICAgIC5yZXBsYWNlKC9bP10vZywgJy4nKTtcbiAgICBpZiAoc2VhcmNoUmVnZXhwID09PSAnLionKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBmaWx0ZXIgbm90IG5lZWRcblxuICAgIGNvbnN0IGZsYWdzID0gJ2knOyAvLyBkb24ndCB1c2UgZ2xvYmFsIHJlZ2V4IHNlYXJjaFxuICAgIGNvbnN0IGFzUHJlZml4UGF0dGVybiA9ICdeJyArIHNlYXJjaFJlZ2V4cDtcbiAgICBjb25zdCBhbnlNYXRjaFBhdHRlcm4gPSAnXi4qJyArIHNlYXJjaFJlZ2V4cDtcblxuICAgIC8vIE9ubHkgb25lIHNlYXJjaCBhdHRyaWJ1dGVzXG4gICAgaWYgKHR5cGVvZiBzZWFyY2hBdHRyaWJ1dGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBpc1NpbXBsZVBhdGggPSAhc2VhcmNoQXR0cmlidXRlIHx8IHNlYXJjaEF0dHJpYnV0ZS5pbmRleE9mKCcuJykgPT09IC0xO1xuICAgICAgY29uc3Qgc2VhcmNoQXNQcmVmaXggPSBzZWFyY2hBdHRyaWJ1dGUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnbGFiZWwnKSB8fCBzZWFyY2hBdHRyaWJ1dGUudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnY29kZScpO1xuICAgICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cCgoc2VhcmNoQXNQcmVmaXggJiYgYXNQcmVmaXhQYXR0ZXJuKSB8fCBhbnlNYXRjaFBhdHRlcm4sIGZsYWdzKTtcbiAgICAgIGlmIChpc1NpbXBsZVBhdGgpIHtcbiAgICAgICAgcmV0dXJuIChhKSA9PiByZWdleHAudGVzdChhW3NlYXJjaEF0dHJpYnV0ZV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChhKSA9PiByZWdleHAudGVzdChFbnRpdHlVdGlscy5nZXRQcm9wZXJ0eUJ5UGF0aChhLCBzZWFyY2hBdHRyaWJ1dGUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBtYW55IHNlYXJjaCBhdHRyaWJ1dGVzXG4gICAgZWxzZSB7XG4gICAgICBjb25zdCByZWdleHBzID0gc2VhcmNoQXR0cmlidXRlLm1hcCgocGF0aCkgPT4ge1xuICAgICAgICBjb25zdCBzZWFyY2hBc1ByZWZpeCA9IHBhdGgudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnbGFiZWwnKSB8fCBwYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ2NvZGUnKTtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoKHNlYXJjaEFzUHJlZml4ICYmIGFzUHJlZml4UGF0dGVybikgfHwgYW55TWF0Y2hQYXR0ZXJuLCBmbGFncyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoYSkgPT4gc2VhcmNoQXR0cmlidXRlLmZpbmRJbmRleCgocGF0aCwgaW5kZXgpID0+IHJlZ2V4cHNbaW5kZXhdLnRlc3QoRW50aXR5VXRpbHMuZ2V0UHJvcGVydHlCeVBhdGgoYSwgcGF0aCkpKSAhPT0gLTE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhIGJhdGNoIGVudGl0eSB0cmVlIGludG8gYSBhcnJheSBsaXN0LiBUaGlzIG1ldGhvZCBrZWVwIGxpbmtzIHBhcmVudC9jaGlsZHJlbi5cbiAgICpcbiAgICogTWV0aG9kIHVzZWQgdG8gZmluZCBiYXRjaCB3aXRob3V0IGlkIChlLmcuIGJlZm9yZSBsb2NhbCBzdG9yYWdlKVxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlXG4gICAqL1xuICBzdGF0aWMgdHJlZVRvQXJyYXkgPSBUcmVlSXRlbUVudGl0eVV0aWxzLnRyZWVUb0FycmF5O1xuXG4gIHN0YXRpYyBsaXN0T2ZUcmVlVG9BcnJheSA9IFRyZWVJdGVtRW50aXR5VXRpbHMubGlzdE9mVHJlZVRvQXJyYXk7XG5cbiAgLyoqXG4gICAqIEZpbGwgcGFyZW50IGF0dHJpYnV0ZSwgb2YgYWxsIGNoaWxkcmVuIGZvdW5kIGluIHRoZSB0cmVlXG4gICAqXG4gICAqIEBwYXJhbSBzb3VyY2VcbiAgICovXG4gIHN0YXRpYyB0cmVlRmlsbFBhcmVudCA9IFRyZWVJdGVtRW50aXR5VXRpbHMudHJlZUZpbGxQYXJlbnQ7XG5cbiAgc3RhdGljIGlzTG9jYWwoZW50aXR5OiBJRW50aXR5PGFueSwgYW55PiB8IEVudGl0eTxhbnksIGFueT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gZW50aXR5ICYmIGlzTm90TmlsKGVudGl0eS5pZCkgJiYgK2VudGl0eS5pZCA8IDA7XG4gIH1cblxuICBzdGF0aWMgaXNSZW1vdGUoZW50aXR5OiBJRW50aXR5PGFueSwgYW55PiB8IEVudGl0eTxhbnksIGFueT4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gZW50aXR5ICYmICFFbnRpdHlVdGlscy5pc0xvY2FsKGVudGl0eSk7XG4gIH1cblxuICBzdGF0aWMgaXNMb2NhbElkKGlkOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOb3ROaWwoaWQpICYmICtpZCA8IDA7XG4gIH1cblxuICBzdGF0aWMgaXNSZW1vdGVJZChpZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTm90TmlsKGlkKSAmJiAraWQgPj0gMDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRJZDxUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4gPSBJRW50aXR5PGFueSwgYW55PiwgSUQgPSBhbnk+KGVudGl0eTogVCk6IElEIHtcbiAgICByZXR1cm4gZW50aXR5LmlkO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhhdCB0aGUgb2JqZWN0IGhhcyBhbiBJRFxuICBzdGF0aWMgaGFzSWQ8VCBleHRlbmRzIElFbnRpdHk8YW55LCBhbnk+ID0gSUVudGl0eTxhbnksIGFueT4+KGVudGl0eTogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05vdE5pbChlbnRpdHk/LmlkKTtcbiAgfVxuXG4gIC8vIENoZWNrIHRoYXQgdGhlIG9iamVjdCBoYXMgYW4gbmlsIElEXG4gIHN0YXRpYyBoYXNOaWxJZDxUIGV4dGVuZHMgSUVudGl0eTxhbnksIGFueT4gPSBJRW50aXR5PGFueSwgYW55Pj4oZW50aXR5OiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTmlsKGVudGl0eT8uaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwbGl0cyBhbiBhcnJheSBvZiBlbnRpdGllcyBpbnRvIGEga2V5LXZhbHVlIG1hcCB1c2luZyBhbiBlbnRpdHkgSUQgYXMgdGhlIGtleS5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheTxUPn0gZW50aXRpZXMgLSBUaGUgYXJyYXkgb2YgZW50aXRpZXMgdG8gYmUgc3BsaXQgYnkgdGhlaXIgSUQuXG4gICAqIEByZXR1cm4ge0tleVZhbHVlVHlwZTxUPn0gQSBrZXktdmFsdWUgbWFwIHdpdGggZW50aXR5IElEcyBhcyBrZXlzIGFuZCBlbnRpdGllcyBhcyB2YWx1ZXMuXG4gICAqL1xuICBzdGF0aWMgc3BsaXRCeUlkPFQgZXh0ZW5kcyBJRW50aXR5PFQsIElEPiwgSUQgPSBhbnk+KGVudGl0aWVzOiBUW10pOiBLZXlWYWx1ZVR5cGU8VD4ge1xuICAgIHJldHVybiAoZW50aXRpZXMgfHwgW10pLnJlZHVjZShcbiAgICAgIChyZXMsIGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gaXRlbT8uaWQ7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlc1trZXldID0gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSxcbiAgICAgIDxLZXlWYWx1ZVR5cGU8VD4+e31cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3RzIHRoZSBJRHMgZnJvbSBhbiBhcnJheSBvZiBlbnRpdGllcyBhbmQgcmV0dXJucyB0aGVtIGFzIGFuIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge1RbXX0gZW50aXRpZXMgLSBBbiBhcnJheSBvZiBlbnRpdGllcyBmcm9tIHdoaWNoIHRvIGNvbGxlY3QgSURzLlxuICAgKiBAcmV0dXJuIHtJRFtdfSBBbiBhcnJheSBvZiBJRHMgY29sbGVjdGVkIGZyb20gdGhlIGVudGl0aWVzLlxuICAgKi9cbiAgc3RhdGljIGNvbGxlY3RJZHM8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LCBJRCA9IGFueT4oZW50aXRpZXM6IFRbXSk6IElEW10ge1xuICAgIHJldHVybiAoZW50aXRpZXMgfHwgW10pLm1hcCgoZSkgPT4gZS5pZCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGNvbGxlY3RJZHMoKSBpbnN0ZWFkIC0gd2lsbCBiZSByZW1vdmUgaW4gbmV4dCBtYWpvciByZWxlYXNlXG4gICAqL1xuICBzdGF0aWMgY29sbGVjdEJ5SWQ8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+LCBJRCA9IGFueT4oZW50aXRpZXM6IFRbXSk6IElEW10ge1xuICAgIHJldHVybiAoZW50aXRpZXMgfHwgW10pLm1hcCgoZSkgPT4gZS5pZCk7XG4gIH1cblxuICBzdGF0aWMgYXJyYXlEaXN0aW5jdEZpbHRlckZuPEUgZXh0ZW5kcyBJRW50aXR5PGFueSwgYW55Pj4oaXRlbTogRSwgaW5kZXg6IG51bWJlciwgdmFsdWVzOiBFW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdmFsdWVzLmZpbmRJbmRleCgoZSkgPT4gZS5pZCA9PT0gaXRlbS5pZCkgPT09IGluZGV4O1xuICB9XG5cbiAgc3RhdGljIGZpbmRCeUlkPEUgZXh0ZW5kcyBJRW50aXR5PGFueSwgSUQ+ID0gSUVudGl0eTxhbnksIGFueT4sIElEID0gbnVtYmVyPihpdGVtczogRVtdLCBpZDogSUQpOiBFIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gKGl0ZW1zIHx8IFtdKS5maW5kKChnKSA9PiBnLmlkID09PSBpZCk7XG4gIH1cblxuICBzdGF0aWMgZnJvbU9iamVjdDxFIGV4dGVuZHMgSUVudGl0eTxhbnksIGFueT4+KHNvdXJjZTogYW55LCBkYXRhVHlwZTogbmV3ICgpID0+IEUpOiBFIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIHNvdXJjZTtcbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgZGF0YVR5cGUpIHJldHVybiBzb3VyY2UgYXMgRTtcbiAgICBjb25zdCB0YXJnZXQgPSBuZXcgZGF0YVR5cGUoKTtcbiAgICBpZiAoRW50aXR5VXRpbHMuaXNFbnRpdHkodGFyZ2V0KSkge1xuICAgICAgdGFyZ2V0LmZyb21PYmplY3Qoc291cmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSk7XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY29udmVydHMgYW55IG9iamVjdCwgZW50aXR5LCBvciBhcnJheSB0byBhIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0LlxuICAgKiBUaGlzIG1ldGhvZCBoYW5kbGVzIGVudGl0aWVzIGJ5IGNhbGxpbmcgdGhlaXIgYXNPYmplY3QoKSBtZXRob2QsIHByb2Nlc3NlcyBhcnJheXMgcmVjdXJzaXZlbHksXG4gICAqIGFuZCBwcm92aWRlcyBwcm90ZWN0aW9uIGFnYWluc3QgY2lyY3VsYXIgcmVmZXJlbmNlcy5cbiAgICpcbiAgICogQHBhcmFtIHthbnl9IHNvdXJjZSAtIFRoZSBzb3VyY2Ugb2JqZWN0LCBlbnRpdHksIGFycmF5LCBvciBwcmltaXRpdmUgdmFsdWUgdG8gY29udmVydFxuICAgKiBAcGFyYW0ge2FueX0gW29wdHNdIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvYmplY3QgcGFzc2VkIHRvIGVudGl0eSBhc09iamVjdCgpIG1ldGhvZHNcbiAgICogQHBhcmFtIHtXZWFrU2V0fSBbdmlzaXRlZD1uZXcgV2Vha1NldCgpXSAtIEludGVybmFsIHBhcmFtZXRlciBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGlvblxuICAgKiBAcmV0dXJucyB7YW55fSBBIHBsYWluIEphdmFTY3JpcHQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzb3VyY2VcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gQ29udmVydCBhIHNpbXBsZSBlbnRpdHlcbiAgICogY29uc3QgcGxhaW5PYmplY3QgPSBFbnRpdHlVdGlscy5hc09iamVjdChteUVudGl0eSk7XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENvbnZlcnQgYW4gYXJyYXkgb2YgZW50aXRpZXNcbiAgICogY29uc3QgcGxhaW5BcnJheSA9IEVudGl0eVV0aWxzLmFzT2JqZWN0KFtlbnRpdHkxLCBlbnRpdHkyXSk7XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENvbnZlcnQgd2l0aCBvcHRpb25zXG4gICAqIGNvbnN0IHJlc3VsdCA9IEVudGl0eVV0aWxzLmFzT2JqZWN0KG15RW50aXR5LCB7IG1pbmlmeTogdHJ1ZSB9KTtcbiAgICovXG4gIHN0YXRpYyBhc09iamVjdChzb3VyY2U6IGFueSwgb3B0cz86IGFueSwgdmlzaXRlZCA9IG5ldyBXZWFrU2V0KCkpOiBhbnkge1xuICAgIGlmICghc291cmNlKSByZXR1cm4gc291cmNlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpIHJldHVybiBzb3VyY2UubWFwKChpdGVtKSA9PiBFbnRpdHlVdGlscy5hc09iamVjdChpdGVtLCBvcHRzLCB2aXNpdGVkKSk7XG4gICAgaWYgKEVudGl0eVV0aWxzLmlzRW50aXR5KHNvdXJjZSkpIHJldHVybiBzb3VyY2UuYXNPYmplY3Qob3B0cyk7XG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdmdW5jdGlvbicpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnKSByZXR1cm4gc291cmNlO1xuICAgIGlmIChpc01vbWVudChzb3VyY2UpKSByZXR1cm4gdG9EYXRlSVNPU3RyaW5nKHNvdXJjZSk7XG5cbiAgICAvLyBIYW5kbGUgc3BlY2lhbCBvYmplY3RzXG4gICAgaWYgKGlzTW9tZW50KHNvdXJjZSkgfHwgdHlwZW9mIHNvdXJjZS50b0lTT1N0cmluZyA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHNvdXJjZS50b0lTT1N0cmluZygpO1xuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBSZWdFeHApIHJldHVybiBzb3VyY2UudG9TdHJpbmcoKTtcblxuICAgIC8vIFByb3RlY3Rpb24gYWdhaW5zdCBjaXJjdWxhciByZWZlcmVuY2VzXG4gICAgaWYgKHZpc2l0ZWQuaGFzKHNvdXJjZSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0VudGl0eVV0aWxzLmFzT2JqZWN0XSBDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQsIHNraXBwaW5nIG9iamVjdCcpO1xuICAgICAgcmV0dXJuIHt9OyAvLyBvciByZXR1cm4gbnVsbCBiYXNlZCBvbiB5b3VyIG5lZWRzXG4gICAgfVxuICAgIHZpc2l0ZWQuYWRkKHNvdXJjZSk7XG5cbiAgICAvLyBDcmVhdGUgYSBjb3B5XG4gICAgY29uc3QgdGFyZ2V0ID0geyAuLi5zb3VyY2UgfTtcblxuICAgIC8vIFNlcmlhbGl6ZSBhbGwgcHJvcGVydGllcyByZWN1cnNpdmVseVxuICAgIE9iamVjdC5rZXlzKHRhcmdldCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldFtrZXldO1xuXG4gICAgICAvLyBIYW5kbGUgYXJyYXlzXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZS5tYXAoKGl0ZW0pID0+IEVudGl0eVV0aWxzLmFzT2JqZWN0KGl0ZW0sIG9wdHMsIHZpc2l0ZWQpKTtcbiAgICAgIH1cbiAgICAgIC8vIEhhbmRsZSBvYmplY3RzIChpbmNsdWRpbmcgZW50aXRpZXMpXG4gICAgICBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gRW50aXR5VXRpbHMuYXNPYmplY3QodmFsdWUsIG9wdHMsIHZpc2l0ZWQpO1xuICAgICAgfVxuICAgICAgLy8gU3ByZWFkIG9wZXJhdG9yIGFscmVhZHkgY29waWVzIHByaW1pdGl2ZSB2YWx1ZXNcbiAgICB9KTtcblxuICAgIC8vIFJlbW92ZSB0aGUgb2JqZWN0IGZyb20gU2V0IGFmdGVyIHByb2Nlc3NpbmdcbiAgICB2aXNpdGVkLmRlbGV0ZShzb3VyY2UpO1xuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxufVxuIl19
|
|
340
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5Lm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFVLE1BQU0sUUFBUSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUcvSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFNNUUsTUFBTSxVQUFVLGNBQWMsQ0FBQyxHQUFzQixFQUFFLFVBQXFCO0lBQzFFLE9BQU8sQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUNuRyxDQUFDO0FBdUJELFVBQVU7QUFDVixNQUFNLE9BQWdCLE1BQU07SUFHMUIsb0RBQW9EO0lBQ3BELE1BQU0sQ0FBQyxRQUFRLENBQVM7SUFFeEIsRUFBRSxHQUFPLElBQUksQ0FBQztJQUNkLFVBQVUsR0FBVyxJQUFJLENBQUM7SUFDMUIsVUFBVSxDQUFTO0lBRW5CLFlBQVksVUFBbUI7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBYztRQUNsQixNQUFNLE1BQU0sR0FBRyxJQUFLLElBQUksQ0FBQyxXQUFtQixF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TUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTFCLGdCQUFnQjtZQUNoQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQy9FLENBQUM7WUFDRCxzQ0FBc0M7aUJBQ2pDLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM1QyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzNELENBQUM7WUFDRCxrREFBa0Q7UUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFFSCw4Q0FBOEM7UUFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV2QixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNNb21lbnQsIE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBnZXRQcm9wZXJ0eUJ5UGF0aCwgaXNFbXB0eUFycmF5LCBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgam9pblByb3BlcnRpZXNQYXRoIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBGaWx0ZXJGbiwgS2V5VmFsdWVUeXBlLCBPYmplY3RNYXAsIE9iamVjdE1hcEVudHJ5IH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3R5cGVzJztcbmltcG9ydCB7IFN0b3JlT2JqZWN0IH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XG5pbXBvcnQgeyBmcm9tRGF0ZUlTT1N0cmluZywgdG9EYXRlSVNPU3RyaW5nIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7IFRyZWVJdGVtRW50aXR5VXRpbHMgfSBmcm9tICcuL3RyZWUtaXRlbS1lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgU29ydERpcmVjdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgQXBwUHJvcGVydGllc1V0aWxzIH0gZnJvbSAnLi4vLi4vZm9ybS9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMudXRpbHMnO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgQ2xvbmVhYmxlPFQ+IHtcbiAgY2xvbmUoKTogVDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVudGl0eVRvU3RyaW5nKG9iajogRW50aXR5PGFueT4gfCBhbnksIHByb3BlcnRpZXM/OiBzdHJpbmdbXSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiAob2JqICYmIGlzTm90TmlsKG9iai5pZCkgJiYgam9pblByb3BlcnRpZXNQYXRoKG9iaiwgcHJvcGVydGllcyB8fCBbJ25hbWUnXSkpIHx8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlBc09iamVjdE9wdGlvbnMge1xuICBtaW5pZnk/OiBib29sZWFuO1xuICBrZWVwVHlwZW5hbWU/OiBib29sZWFuOyAvLyB0cnVlIGJ5IGRlZmF1bHRcbiAga2VlcExvY2FsSWQ/OiBib29sZWFuOyAvLyB0cnVlIGJ5IGRlZmF1bHRcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRW50aXR5PFQsIElEID0gbnVtYmVyLCBBTyBleHRlbmRzIEVudGl0eUFzT2JqZWN0T3B0aW9ucyA9IEVudGl0eUFzT2JqZWN0T3B0aW9ucywgRk8gPSBhbnk+IGV4dGVuZHMgQ2xvbmVhYmxlPFQ+IHtcbiAgaWQ6IElEO1xuICB1cGRhdGVEYXRlOiBNb21lbnQ7XG4gIF9fdHlwZW5hbWU6IHN0cmluZztcbiAgZXF1YWxzKG90aGVyOiBUKTogYm9vbGVhbjtcbiAgY2xvbmUob3B0cz86IEFPICYgRk8pOiBUO1xuICBjb3B5KHRhcmdldDogVCwgb3B0cz86IEFPICYgRk8pOiB2b2lkO1xuICBhc09iamVjdChvcHRzPzogQU8pOiBhbnk7XG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnksIG9wdHM/OiBGTyk6IHZvaWQ7XG59XG5cbmV4cG9ydCB0eXBlIE9taXRGdW5jdGlvbnM8VD4gPSB7XG4gIFtLIGluIGtleW9mIFQgYXMgVFtLXSBleHRlbmRzIEZ1bmN0aW9uID8gbmV2ZXIgOiBLXTogVFtLXTtcbn07XG5cbi8vQGR5bmFtaWNcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBFbnRpdHk8VCBleHRlbmRzIEVudGl0eTxULCBJRCwgQU8sIEZPPiwgSUQgPSBudW1iZXIsIEFPIGV4dGVuZHMgRW50aXR5QXNPYmplY3RPcHRpb25zID0gRW50aXR5QXNPYmplY3RPcHRpb25zLCBGTyA9IGFueT5cbiAgaW1wbGVtZW50cyBJRW50aXR5PFQsIElELCBBTywgRk8+XG57XG4gIC8vIFRoZSBHcmFwaFFMIHR5cGVuYW1lIChpbmplY3RlZCBieSBARW50aXR5Q2xhc3MoKSlcbiAgc3RhdGljIFRZUEVOQU1FOiBzdHJpbmc7XG5cbiAgaWQ6IElEID0gbnVsbDtcbiAgdXBkYXRlRGF0ZTogTW9tZW50ID0gbnVsbDtcbiAgX190eXBlbmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKF9fdHlwZW5hbWU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9fdHlwZW5hbWUgPSBfX3R5cGVuYW1lIHx8IG51bGw7XG4gIH1cblxuICBjbG9uZShvcHRzPzogQU8gJiBGTyk6IFQge1xuICAgIGNvbnN0IHRhcmdldCA9IG5ldyAodGhpcy5jb25zdHJ1Y3RvciBhcyBhbnkpKCkgYXMgVDtcbiAgICB0aGlzLmNvcHkodGFyZ2V0LCBvcHRzKTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgY29weSh0YXJnZXQ6IFQsIG9wdHM/OiBBTyAmIEZPKSB7XG4gICAgdGFyZ2V0LmZyb21PYmplY3QodGhpcy5hc09iamVjdChvcHRzKSwgb3B0cyk7XG4gIH1cblxuICBhc09iamVjdChvcHRzPzogQU8pOiBTdG9yZU9iamVjdCB7XG4gICAgY29uc3QgdGFyZ2V0OiBhbnkgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzKTsgLy89IHsuLi50aGlzfTtcbiAgICBpZiAoIW9wdHMgfHwgb3B0cy5rZWVwVHlwZW5hbWUgIT09IHRydWUpIGRlbGV0ZSB0YXJnZXQuX190eXBlbmFtZTtcbiAgICB0YXJnZXQudXBkYXRlRGF0ZSA9IHRvRGF0ZUlTT1N0cmluZyh0aGlzLnVwZGF0ZURhdGUpO1xuICAgIGlmICh0YXJnZXQuaWQgPT0gbnVsbCB8fCAob3B0cyAmJiBvcHRzLmtlZXBMb2NhbElkID09PSBmYWxzZSAmJiB0YXJnZXQuaWQgPCAwKSkge1xuICAgICAgZGVsZXRlIHRhcmdldC5pZDtcbiAgICAgIGRlbGV0ZSB0YXJnZXQudXBkYXRlRGF0ZTsgLy8gTWFrZSB0byBzZW5zIHRvIGtlZXAgdXBkYXRlRGF0ZSBvZiBhIGxvY2FsIGVudGl0eSB0byBzYXZlXG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cblxuICBmcm9tT2JqZWN0KHNvdXJjZTogYW55LCBvcHRzPzogRk8pIHtcbiAgICB0aGlzLmlkID0gc291cmNlLmlkIHx8IHNvdXJjZS5pZCA9PT0gMCA/IHNvdXJjZS5pZCA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnVwZGF0ZURhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhzb3VyY2UudXBkYXRlRGF0ZSk7XG4gICAgdGhpcy5fX3R5cGVuYW1lID0gc291cmNlLl9fdHlwZW5hbWUgfHwgdGhpcy5fX3R5cGVuYW1lOyAvLyBLZWVwIG9yaWdpbmFsIHR5cGUgKGNhbiBiZSBzZXQgaW4gY29uc3RydWN0b3IpXG4gIH1cblxuICBlcXVhbHMob3RoZXI6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gb3RoZXIgJiYgdGhpcy5pZCA9PT0gb3RoZXIuaWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCB1c2Ugc3RhbmRhcmQgaW5zdGFuY2VvZiBpbnN0ZWFkXG4gKiBAcGFyYW0gb2JqXG4gKiBAcGFyYW0gY29uc3RydWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW5zdGFuY2VPZjxUPihvYmo6IGFueSwgY29uc3RydWN0b3I6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQpOiBvYmogaXMgVCB7XG4gIGlmICghb2JqKSByZXR1cm4gZmFsc2U7XG5cbiAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yO1xufVxuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVudGl0eVV0aWxzIHtcbiAgLy8gQ2hlY2sgdGhhdCB0aGUgb2JqZWN0IGlzIGFuIGVudGl0eVxuICBzdGF0aWMgaXNFbnRpdHk8VCBleHRlbmRzIElFbnRpdHk8YW55Pj4ob2JqOiBUIHwgYW55KTogb2JqIGlzIFQge1xuICAgIHJldHVybiBpc05vdE5pbChvYmo/Ll9fdHlwZW5hbWUpICYmIHR5cGVvZiBvYmouZnJvbU9iamVjdCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLmFzT2JqZWN0ID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgLy8gQ2hlY2sgdGhhdCB0aGUgb2JqZWN0IGhhcyBhIE5PVCBuaWwgYXR0cmlidXRlIChJRCBieSBkZWZhdWx0KVxuICBzdGF0aWMgaXNOb3RFbXB0eTxUIGV4dGVuZHMgSUVudGl0eTxhbnk+IHwgYW55PihvYmo6IFQsIGNoZWNrZWRBdHRyaWJ1dGU6IGtleW9mIFQgPSA8a2V5b2YgVD4naWQnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhb2JqICYmIG9ialtjaGVja2VkQXR0cmlidXRlXSAhPT0gbnVsbCAmJiBvYmpbY2hlY2tlZEF0dHJpYnV0ZV0gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIENoZWNrIHRoYXQgdGhlIG9iamVjdCBoYXMgYSBuaWwgYXR0cmlidXRlIChJRCBieSBkZWZhdWx0KVxuICBzdGF0aWMgaXNFbXB0eTxUIGV4dGVuZHMgSUVudGl0eTxhbnk+IHwgYW55PihvYmo6IFQsIGNoZWNrZWRBdHRyaWJ1dGU6IGtleW9mIFQgPSA8a2V5b2YgVD4naWQnKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFvYmogfHwgb2JqW2NoZWNrZWRBdHRyaWJ1dGVdID09PSBudWxsIHx8IG9ialtjaGVja2VkQXR0cmlidXRlXSA9PT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhdGljIGVxdWFsczxUIGV4dGVuZHMgSUVudGl0eTxhbnk+IHwgYW55PihvMTogVCwgbzI6IFQsIGNoZWNrQXR0cmlidXRlPzoga2V5b2YgVCk6IGJvb2xlYW4ge1xuICAgIGNoZWNrQXR0cmlidXRlID0gY2hlY2tBdHRyaWJ1dGUgfHwgKCdpZCcgYXMga2V5b2YgVCk7XG4gICAgcmV0dXJuIG8xID09PSBvMiB8fCAoaXNOaWwobzEpICYmIGlzTmlsKG8yKSkgfHwgKG8xICYmIG8yICYmIG8xW2NoZWNrQXR0cmlidXRlXSA9PT0gbzJbY2hlY2tBdHRyaWJ1dGVdKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRQcm9wZXJ0eUJ5UGF0aCA9IGdldFByb3BlcnR5QnlQYXRoO1xuXG4gIHN0YXRpYyBnZXRBcnJheUFzTWFwPFQgPSBhbnk+KHNvdXJjZT86IE9iamVjdE1hcEVudHJ5PFQ+W10pOiBPYmplY3RNYXA8VD4ge1xuICAgIHJldHVybiAoc291cmNlIHx8IFtdKS5yZWR1Y2UoKHJlcywgaXRlbSkgPT4ge1xuICAgICAgcmVzW2l0ZW0ua2V5XSA9IGl0ZW0udmFsdWU7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRNYXBBc0FycmF5PFQgPSBhbnk+KHNvdXJjZT86IE9iamVjdE1hcDxUPik6IE9iamVjdE1hcEVudHJ5PFQ+W10ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpIHJldHVybiBzb3VyY2U7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSB8fCB7fSkubWFwKChrZXkpID0+ICh7XG4gICAgICBrZXksXG4gICAgICB2YWx1ZTogc291cmNlW2tleV0sXG4gICAgfSkpO1xuICB9XG5cbiAgc3RhdGljIGdldFByb3BlcnR5QXJyYXlBc09iamVjdCA9IEFwcFByb3BlcnRpZXNVdGlscy5hcnJheUFzT2JqZWN0O1xuXG4gIHN0YXRpYyBjb3B5SWRBbmRVcGRhdGVEYXRlPFQgZXh0ZW5kcyBFbnRpdHk8YW55LCBhbnksIGFueT4+KHNvdXJjZTogVCwgdGFyZ2V0OiBUKSB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybjtcblxuICAgIC8vIFVwZGF0ZSAoaWQgYW5kIHVwZGF0ZURhdGUpXG4gICAgdGFyZ2V0LmlkID0gaXNOb3ROaWwoc291cmNlLmlkKSA/IHNvdXJjZS5pZCA6IHRhcmdldC5pZDtcbiAgICB0YXJnZXQudXBkYXRlRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKHNvdXJjZS51cGRhdGVEYXRlKSB8fCB0YXJnZXQudXBkYXRlRGF0ZTtcblxuICAgIC8vIFVwZGF0ZSBjcmVhdGlvbiBEYXRlLCBpZiBleGlzdHNcbiAgICBpZiAoc291cmNlWydjcmVhdGlvbkRhdGUnXSkge1xuICAgICAgdGFyZ2V0WydjcmVhdGlvbkRhdGUnXSA9IGZyb21EYXRlSVNPU3RyaW5nKHNvdXJjZVsnY3JlYXRpb25EYXRlJ10pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBmaWxsTG9jYWxJZHM8VCBleHRlbmRzIElFbnRpdHk8VCwgYW55Pj4oaXRlbXM6IFRbXSwgc2VxdWVuY2VGYWN0b3J5OiAoZmlyc3RFbnRpdHk6IFQsIGluY3JlbWVudFNpemU6IG51bWJlcikgPT4gUHJvbWlzZTxudW1iZXI+KSB7XG4gICAgY29uc3QgbmV3SXRlbXMgPSAoaXRlbXMgfHwgW10pLmZpbHRlcigoaXRlbSkgPT4gaXNOaWwoaXRlbS5pZCkgfHwgaXRlbS5pZCA9PT0gMCk7XG4gICAgaWYgKGlzRW1wdHlBcnJheShuZXdJdGVtcykpIHJldHVybjtcbiAgICAvLyBHZXQgdGhlIHNlcXVlbmNlXG4gICAgbGV0IGN1cnJlbnRJZCA9IChhd2FpdCBzZXF1ZW5jZUZhY3RvcnkobmV3SXRlbXNbMF0sIG5ld0l0ZW1zLmxlbmd0aCkpICsgMTtcbiAgICAvLyBUYWtlIHRoZSBtaW4gKHNlcXVlbmNlLCBpZCksIGluIGNhc2UgdGhlIHNlcXVlbmNlIGlzIGNvcnJ1cHRlZFxuICAgIGN1cnJlbnRJZCA9IGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXNOb3ROaWwoaXRlbS5pZCkgJiYgaXRlbS5pZCA8IDApLnJlZHVjZSgocmVzLCBpdGVtKSA9PiBNYXRoLm1pbihyZXMsIGl0ZW0uaWQpLCBjdXJyZW50SWQpO1xuICAgIG5ld0l0ZW1zLmZvckVhY2goKGl0ZW0pID0+IChpdGVtLmlkID0gLS1jdXJyZW50SWQpKTtcbiAgfVxuXG4gIHN0YXRpYyBjbGVhbklkQW5kVXBkYXRlRGF0ZTxUIGV4dGVuZHMgSUVudGl0eTxULCBhbnk+Pihzb3VyY2U6IFQsIGRlZmF1bHRWYWx1ZSA9IG51bGwpIHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuOyAvLyBTa2lwXG4gICAgc291cmNlLmlkID0gZGVmYXVsdFZhbHVlO1xuICAgIHNvdXJjZS51cGRhdGVEYXRlID0gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgc3RhdGljIGNsZWFuSWRzQW5kVXBkYXRlRGF0ZXM8VCBleHRlbmRzIElFbnRpdHk8VCwgYW55Pj4oaXRlbXM6IFRbXSwgZGVmYXVsdFZhbHVlID0gbnVsbCkge1xuICAgIChpdGVtcyB8fCBbXSkuZm9yRWFjaCgoaXRlbSkgPT4gRW50aXR5VXRpbHMuY2xlYW5JZEFuZFVwZGF0ZURhdGUoaXRlbSwgZGVmYXVsdFZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgc29ydDxUIGV4dGVuZHMgSUVudGl0eTxULCBhbnk+IHwgYW55PihkYXRhOiBUW10sIHNvcnRCeT86IGtleW9mIFQgfCBzdHJpbmcsIHNvcnREaXJlY3Rpb24/OiBTb3J0RGlyZWN0aW9uKTogVFtdIHtcbiAgICBpZiAoIWRhdGEgfHwgZGF0YS5sZW5ndGggPD0gMSB8fCAhc29ydEJ5KSByZXR1cm4gZGF0YTtcbiAgICByZXR1cm4gZGF0YS5zb3J0KHRoaXMuc29ydENvbXBhcmF0b3Ioc29ydEJ5LCBzb3J0RGlyZWN0aW9uKSk7XG4gIH1cblxuICBzdGF0aWMgc29ydENvbXBhcmF0b3I8VCBleHRlbmRzIElFbnRpdHk8VCwgYW55PiB8IGFueT4oc29ydEJ5Pzoga2V5b2YgVCB8IHN0cmluZywgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb24pOiAoYTogVCwgYjogVCkgPT4gbnVtYmVyIHtcbiAgICBjb25zdCBhZnRlciA9ICFzb3J0RGlyZWN0aW9uIHx8IHNvcnREaXJlY3Rpb24gPT09ICdhc2MnID8gMSA6IC0xO1xuICAgIGNvbnN0IHByb3BlcnR5ID0gKHNvcnRCeSB8fCAnaWQnKSBhcyBzdHJpbmc7XG4gICAgcmV0dXJuIChhLCBiKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZUEgPSBFbnRpdHlVdGlscy5nZXRQcm9wZXJ0eUJ5UGF0aChhLCBwcm9wZXJ0eSk7XG4gICAgICBjb25zdCB2YWx1ZUIgPSBFbnRpdHlVdGlscy5nZXRQcm9wZXJ0eUJ5UGF0aChiLCBwcm9wZXJ0eSk7XG4gICAgICByZXR1cm4gRW50aXR5VXRpbHMuY29tcGFyZSh2YWx1ZUEsIHZhbHVlQiwgYWZ0ZXIpO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgY29tcGFyZTxUIGV4dGVuZHMgSUVudGl0eTxULCBhbnk+Pih2YWx1ZTE6IFQsIHZhbHVlMjogVCwgZGlyZWN0aW9uOiAxIHwgLTEsIGNoZWNrQXR0cmlidXRlPzoga2V5b2YgVCk6IG51bWJlciB7XG4gICAgY2hlY2tBdHRyaWJ1dGUgPSBjaGVja0F0dHJpYnV0ZSB8fCAnaWQnO1xuICAgIGlmIChFbnRpdHlVdGlscy5pc05vdEVtcHR5KHZhbHVlMSwgY2hlY2tBdHRyaWJ1dGUpICYmIEVudGl0eVV0aWxzLmlzTm90RW1wdHkodmFsdWUyLCBjaGVja0F0dHJpYnV0ZSkpIHtcbiAgICAgIHJldHVybiBFbnRpdHlVdGlscy5lcXVhbHModmFsdWUxLCB2YWx1ZTIsIGNoZWNrQXR0cmlidXRlKSA/IDAgOiB2YWx1ZTFbY2hlY2tBdHRyaWJ1dGVdID4gdmFsdWUyW2NoZWNrQXR0cmlidXRlXSA/IGRpcmVjdGlvbiA6IC0xICogZGlyZWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWUxID09PSB2YWx1ZTIgPyAwIDogdmFsdWUxID4gdmFsdWUyID8gZGlyZWN0aW9uIDogLTEgKiBkaXJlY3Rpb247XG4gIH1cblxuICBzdGF0aWMgY29tcGFyZVZhbHVlPFQ+KHZhbHVlMTogVCwgdmFsdWUyOiBULCBkaXJlY3Rpb246IDEgfCAtMSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHZhbHVlMSA9PT0gdmFsdWUyID8gMCA6IHZhbHVlMSA+IHZhbHVlMiA/IGRpcmVjdGlvbiA6IC0xICogZGlyZWN0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZpbHRlcjxUIGV4dGVuZHMgSUVudGl0eTxULCBhbnk+IHwgYW55PihkYXRhOiBUW10sIHNlYXJjaEF0dHJpYnV0ZTogc3RyaW5nLCBzZWFyY2hUZXh0OiBzdHJpbmcpOiBUW10ge1xuICAgIGNvbnN0IGZpbHRlckZuID0gdGhpcy5zZWFyY2hUZXh0RmlsdGVyKHNlYXJjaEF0dHJpYnV0ZSwgc2VhcmNoVGV4dCk7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKGZpbHRlckZuKTtcbiAgfVxuXG4gIHN0YXRpYyBzZWFyY2hUZXh0RmlsdGVyPFQgZXh0ZW5kcyBJRW50aXR5PFQsIGFueT4gfCBhbnk+KHNlYXJjaEF0dHJpYnV0ZTogc3RyaW5nIHwgc3RyaW5nW10sIHNlYXJjaFRleHQ6IHN0cmluZyk6IEZpbHRlckZuPFQ+IHtcbiAgICBpZiAoaXNOaWxPckJsYW5rKHNlYXJjaEF0dHJpYnV0ZSkgfHwgaXNOaWxPckJsYW5rKHNlYXJjaFRleHQpKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBmaWx0ZXIgbm90IG5lZWRcblxuICAgIGNvbnN0IHNlYXJjaFJlZ2V4cCA9IHNlYXJjaFRleHRcbiAgICAgIC8vIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICAgICAgLnJlcGxhY2UoL1stXFwvXFxcXF4kKy4oKXxbXFxde31dL2csICdcXFxcJCYnKVxuICAgICAgLy8gSW50ZXJwcmV0ICogYXMgYW55IHRleHRcbiAgICAgIC5yZXBsYWNlKC9bKl0rL2csICcuKicpXG4gICAgICAvLyBJbnRlcnByZXQgPyBhcyBvbmUgY2hhcmFjdGVyXG4gICAgICAucmVwbGFjZSgvWz9dL2csICcuJyk7XG4gICAgaWYgKHNlYXJjaFJlZ2V4cCA9PT0gJy4qJykgcmV0dXJuIHVuZGVmaW5lZDsgLy8gZmlsdGVyIG5vdCBuZWVkXG5cbiAgICBjb25zdCBmbGFncyA9ICdpJzsgLy8gZG9uJ3QgdXNlIGdsb2JhbCByZWdleCBzZWFyY2hcbiAgICBjb25zdCBhc1ByZWZpeFBhdHRlcm4gPSAnXicgKyBzZWFyY2hSZWdleHA7XG4gICAgY29uc3QgYW55TWF0Y2hQYXR0ZXJuID0gJ14uKicgKyBzZWFyY2hSZWdleHA7XG5cbiAgICAvLyBPbmx5IG9uZSBzZWFyY2ggYXR0cmlidXRlc1xuICAgIGlmICh0eXBlb2Ygc2VhcmNoQXR0cmlidXRlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgaXNTaW1wbGVQYXRoID0gIXNlYXJjaEF0dHJpYnV0ZSB8fCBzZWFyY2hBdHRyaWJ1dGUuaW5kZXhPZignLicpID09PSAtMTtcbiAgICAgIGNvbnN0IHNlYXJjaEFzUHJlZml4ID0gc2VhcmNoQXR0cmlidXRlLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ2xhYmVsJykgfHwgc2VhcmNoQXR0cmlidXRlLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ2NvZGUnKTtcbiAgICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoKHNlYXJjaEFzUHJlZml4ICYmIGFzUHJlZml4UGF0dGVybikgfHwgYW55TWF0Y2hQYXR0ZXJuLCBmbGFncyk7XG4gICAgICBpZiAoaXNTaW1wbGVQYXRoKSB7XG4gICAgICAgIHJldHVybiAoYSkgPT4gcmVnZXhwLnRlc3QoYVtzZWFyY2hBdHRyaWJ1dGVdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAoYSkgPT4gcmVnZXhwLnRlc3QoRW50aXR5VXRpbHMuZ2V0UHJvcGVydHlCeVBhdGgoYSwgc2VhcmNoQXR0cmlidXRlKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gbWFueSBzZWFyY2ggYXR0cmlidXRlc1xuICAgIGVsc2Uge1xuICAgICAgY29uc3QgcmVnZXhwcyA9IHNlYXJjaEF0dHJpYnV0ZS5tYXAoKHBhdGgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VhcmNoQXNQcmVmaXggPSBwYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ2xhYmVsJykgfHwgcGF0aC50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdjb2RlJyk7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKChzZWFyY2hBc1ByZWZpeCAmJiBhc1ByZWZpeFBhdHRlcm4pIHx8IGFueU1hdGNoUGF0dGVybiwgZmxhZ3MpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gKGEpID0+IHNlYXJjaEF0dHJpYnV0ZS5maW5kSW5kZXgoKHBhdGgsIGluZGV4KSA9PiByZWdleHBzW2luZGV4XS50ZXN0KEVudGl0eVV0aWxzLmdldFByb3BlcnR5QnlQYXRoKGEsIHBhdGgpKSkgIT09IC0xO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gYSBiYXRjaCBlbnRpdHkgdHJlZSBpbnRvIGEgYXJyYXkgbGlzdC4gVGhpcyBtZXRob2Qga2VlcCBsaW5rcyBwYXJlbnQvY2hpbGRyZW4uXG4gICAqXG4gICAqIE1ldGhvZCB1c2VkIHRvIGZpbmQgYmF0Y2ggd2l0aG91dCBpZCAoZS5nLiBiZWZvcmUgbG9jYWwgc3RvcmFnZSlcbiAgICpcbiAgICogQHBhcmFtIHNvdXJjZVxuICAgKi9cbiAgc3RhdGljIHRyZWVUb0FycmF5ID0gVHJlZUl0ZW1FbnRpdHlVdGlscy50cmVlVG9BcnJheTtcblxuICBzdGF0aWMgbGlzdE9mVHJlZVRvQXJyYXkgPSBUcmVlSXRlbUVudGl0eVV0aWxzLmxpc3RPZlRyZWVUb0FycmF5O1xuXG4gIC8qKlxuICAgKiBGaWxsIHBhcmVudCBhdHRyaWJ1dGUsIG9mIGFsbCBjaGlsZHJlbiBmb3VuZCBpbiB0aGUgdHJlZVxuICAgKlxuICAgKiBAcGFyYW0gc291cmNlXG4gICAqL1xuICBzdGF0aWMgdHJlZUZpbGxQYXJlbnQgPSBUcmVlSXRlbUVudGl0eVV0aWxzLnRyZWVGaWxsUGFyZW50O1xuXG4gIHN0YXRpYyBpc0xvY2FsKGVudGl0eTogSUVudGl0eTxhbnksIGFueT4gfCBFbnRpdHk8YW55LCBhbnk+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGVudGl0eSAmJiBpc05vdE5pbChlbnRpdHkuaWQpICYmICtlbnRpdHkuaWQgPCAwO1xuICB9XG5cbiAgc3RhdGljIGlzUmVtb3RlKGVudGl0eTogSUVudGl0eTxhbnksIGFueT4gfCBFbnRpdHk8YW55LCBhbnk+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGVudGl0eSAmJiAhRW50aXR5VXRpbHMuaXNMb2NhbChlbnRpdHkpO1xuICB9XG5cbiAgc3RhdGljIGlzTG9jYWxJZChpZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTm90TmlsKGlkKSAmJiAraWQgPCAwO1xuICB9XG5cbiAgc3RhdGljIGlzUmVtb3RlSWQoaWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05vdE5pbChpZCkgJiYgK2lkID49IDA7XG4gIH1cblxuICBzdGF0aWMgZ2V0SWQ8VCBleHRlbmRzIElFbnRpdHk8VCwgSUQ+ID0gSUVudGl0eTxhbnksIGFueT4sIElEID0gYW55PihlbnRpdHk6IFQpOiBJRCB7XG4gICAgcmV0dXJuIGVudGl0eS5pZDtcbiAgfVxuXG4gIC8vIENoZWNrIHRoYXQgdGhlIG9iamVjdCBoYXMgYW4gSURcbiAgc3RhdGljIGhhc0lkPFQgZXh0ZW5kcyBJRW50aXR5PGFueSwgYW55PiA9IElFbnRpdHk8YW55LCBhbnk+PihlbnRpdHk6IFQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOb3ROaWwoZW50aXR5Py5pZCk7XG4gIH1cblxuICAvLyBDaGVjayB0aGF0IHRoZSBvYmplY3QgaGFzIGFuIG5pbCBJRFxuICBzdGF0aWMgaGFzTmlsSWQ8VCBleHRlbmRzIElFbnRpdHk8YW55LCBhbnk+ID0gSUVudGl0eTxhbnksIGFueT4+KGVudGl0eTogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbChlbnRpdHk/LmlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGxpdHMgYW4gYXJyYXkgb2YgZW50aXRpZXMgaW50byBhIGtleS12YWx1ZSBtYXAgdXNpbmcgYW4gZW50aXR5IElEIGFzIHRoZSBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXk8VD59IGVudGl0aWVzIC0gVGhlIGFycmF5IG9mIGVudGl0aWVzIHRvIGJlIHNwbGl0IGJ5IHRoZWlyIElELlxuICAgKiBAcmV0dXJuIHtLZXlWYWx1ZVR5cGU8VD59IEEga2V5LXZhbHVlIG1hcCB3aXRoIGVudGl0eSBJRHMgYXMga2V5cyBhbmQgZW50aXRpZXMgYXMgdmFsdWVzLlxuICAgKi9cbiAgc3RhdGljIHNwbGl0QnlJZDxUIGV4dGVuZHMgSUVudGl0eTxULCBJRD4sIElEID0gYW55PihlbnRpdGllczogVFtdKTogS2V5VmFsdWVUeXBlPFQ+IHtcbiAgICByZXR1cm4gKGVudGl0aWVzIHx8IFtdKS5yZWR1Y2UoXG4gICAgICAocmVzLCBpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IGl0ZW0/LmlkO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXNba2V5XSA9IGl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0sXG4gICAgICA8S2V5VmFsdWVUeXBlPFQ+Pnt9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0cyB0aGUgSURzIGZyb20gYW4gYXJyYXkgb2YgZW50aXRpZXMgYW5kIHJldHVybnMgdGhlbSBhcyBhbiBhcnJheS5cbiAgICpcbiAgICogQHBhcmFtIHtUW119IGVudGl0aWVzIC0gQW4gYXJyYXkgb2YgZW50aXRpZXMgZnJvbSB3aGljaCB0byBjb2xsZWN0IElEcy5cbiAgICogQHJldHVybiB7SURbXX0gQW4gYXJyYXkgb2YgSURzIGNvbGxlY3RlZCBmcm9tIHRoZSBlbnRpdGllcy5cbiAgICovXG4gIHN0YXRpYyBjb2xsZWN0SWRzPFQgZXh0ZW5kcyBJRW50aXR5PFQsIElEPiwgSUQgPSBhbnk+KGVudGl0aWVzOiBUW10pOiBJRFtdIHtcbiAgICByZXR1cm4gKGVudGl0aWVzIHx8IFtdKS5tYXAoKGUpID0+IGUuaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBjb2xsZWN0SWRzKCkgaW5zdGVhZCAtIHdpbGwgYmUgcmVtb3ZlIGluIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgKi9cbiAgc3RhdGljIGNvbGxlY3RCeUlkPFQgZXh0ZW5kcyBJRW50aXR5PFQsIElEPiwgSUQgPSBhbnk+KGVudGl0aWVzOiBUW10pOiBJRFtdIHtcbiAgICByZXR1cm4gKGVudGl0aWVzIHx8IFtdKS5tYXAoKGUpID0+IGUuaWQpO1xuICB9XG5cbiAgc3RhdGljIGFycmF5RGlzdGluY3RGaWx0ZXJGbjxFIGV4dGVuZHMgSUVudGl0eTxhbnksIGFueT4+KGl0ZW06IEUsIGluZGV4OiBudW1iZXIsIHZhbHVlczogRVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHZhbHVlcy5maW5kSW5kZXgoKGUpID0+IGUuaWQgPT09IGl0ZW0uaWQpID09PSBpbmRleDtcbiAgfVxuXG4gIHN0YXRpYyBmaW5kQnlJZDxFIGV4dGVuZHMgSUVudGl0eTxhbnksIElEPiA9IElFbnRpdHk8YW55LCBhbnk+LCBJRCA9IG51bWJlcj4oaXRlbXM6IEVbXSwgaWQ6IElEKTogRSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIChpdGVtcyB8fCBbXSkuZmluZCgoZykgPT4gZy5pZCA9PT0gaWQpO1xuICB9XG5cbiAgc3RhdGljIGZyb21PYmplY3Q8RSBleHRlbmRzIElFbnRpdHk8YW55LCBhbnk+Pihzb3VyY2U6IGFueSwgZGF0YVR5cGU6IG5ldyAoKSA9PiBFKTogRSB7XG4gICAgaWYgKCFzb3VyY2UpIHJldHVybiBzb3VyY2U7XG4gICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIGRhdGFUeXBlKSByZXR1cm4gc291cmNlIGFzIEU7XG4gICAgY29uc3QgdGFyZ2V0ID0gbmV3IGRhdGFUeXBlKCk7XG4gICAgaWYgKEVudGl0eVV0aWxzLmlzRW50aXR5KHRhcmdldCkpIHtcbiAgICAgIHRhcmdldC5mcm9tT2JqZWN0KHNvdXJjZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UpO1xuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNvbnZlcnRzIGFueSBvYmplY3QsIGVudGl0eSwgb3IgYXJyYXkgdG8gYSBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdC5cbiAgICogVGhpcyBtZXRob2QgaGFuZGxlcyBlbnRpdGllcyBieSBjYWxsaW5nIHRoZWlyIGFzT2JqZWN0KCkgbWV0aG9kLCBwcm9jZXNzZXMgYXJyYXlzIHJlY3Vyc2l2ZWx5LFxuICAgKiBhbmQgcHJvdmlkZXMgcHJvdGVjdGlvbiBhZ2FpbnN0IGNpcmN1bGFyIHJlZmVyZW5jZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSBzb3VyY2UgLSBUaGUgc291cmNlIG9iamVjdCwgZW50aXR5LCBhcnJheSwgb3IgcHJpbWl0aXZlIHZhbHVlIHRvIGNvbnZlcnRcbiAgICogQHBhcmFtIHthbnl9IFtvcHRzXSAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHBhc3NlZCB0byBlbnRpdHkgYXNPYmplY3QoKSBtZXRob2RzXG4gICAqIEBwYXJhbSB7V2Vha1NldH0gW3Zpc2l0ZWQ9bmV3IFdlYWtTZXQoKV0gLSBJbnRlcm5hbCBwYXJhbWV0ZXIgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3Rpb25cbiAgICogQHJldHVybnMge2FueX0gQSBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc291cmNlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENvbnZlcnQgYSBzaW1wbGUgZW50aXR5XG4gICAqIGNvbnN0IHBsYWluT2JqZWN0ID0gRW50aXR5VXRpbHMuYXNPYmplY3QobXlFbnRpdHkpO1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBDb252ZXJ0IGFuIGFycmF5IG9mIGVudGl0aWVzXG4gICAqIGNvbnN0IHBsYWluQXJyYXkgPSBFbnRpdHlVdGlscy5hc09iamVjdChbZW50aXR5MSwgZW50aXR5Ml0pO1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBDb252ZXJ0IHdpdGggb3B0aW9uc1xuICAgKiBjb25zdCByZXN1bHQgPSBFbnRpdHlVdGlscy5hc09iamVjdChteUVudGl0eSwgeyBtaW5pZnk6IHRydWUgfSk7XG4gICAqL1xuICBzdGF0aWMgYXNPYmplY3Qoc291cmNlOiBhbnksIG9wdHM/OiBhbnksIHZpc2l0ZWQgPSBuZXcgV2Vha1NldCgpKTogYW55IHtcbiAgICBpZiAoIXNvdXJjZSkgcmV0dXJuIHNvdXJjZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKSByZXR1cm4gc291cmNlLm1hcCgoaXRlbSkgPT4gRW50aXR5VXRpbHMuYXNPYmplY3QoaXRlbSwgb3B0cywgdmlzaXRlZCkpO1xuICAgIGlmIChFbnRpdHlVdGlscy5pc0VudGl0eShzb3VyY2UpKSByZXR1cm4gc291cmNlLmFzT2JqZWN0KG9wdHMpO1xuICAgIGlmICh0eXBlb2Ygc291cmNlID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGlmICh0eXBlb2Ygc291cmNlICE9PSAnb2JqZWN0JykgcmV0dXJuIHNvdXJjZTtcbiAgICBpZiAoaXNNb21lbnQoc291cmNlKSkgcmV0dXJuIHRvRGF0ZUlTT1N0cmluZyhzb3VyY2UpO1xuXG4gICAgLy8gSGFuZGxlIHNwZWNpYWwgb2JqZWN0c1xuICAgIGlmIChpc01vbWVudChzb3VyY2UpIHx8IHR5cGVvZiBzb3VyY2UudG9JU09TdHJpbmcgPT09ICdmdW5jdGlvbicpIHJldHVybiBzb3VyY2UudG9JU09TdHJpbmcoKTtcbiAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgUmVnRXhwKSByZXR1cm4gc291cmNlLnRvU3RyaW5nKCk7XG5cbiAgICAvLyBQcm90ZWN0aW9uIGFnYWluc3QgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgIGlmICh2aXNpdGVkLmhhcyhzb3VyY2UpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tFbnRpdHlVdGlscy5hc09iamVjdF0gQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkLCBza2lwcGluZyBvYmplY3QnKTtcbiAgICAgIHJldHVybiB7fTsgLy8gb3IgcmV0dXJuIG51bGwgYmFzZWQgb24geW91ciBuZWVkc1xuICAgIH1cbiAgICB2aXNpdGVkLmFkZChzb3VyY2UpO1xuXG4gICAgLy8gQ3JlYXRlIGEgY29weVxuICAgIGNvbnN0IHRhcmdldCA9IHsgLi4uc291cmNlIH07XG5cbiAgICAvLyBTZXJpYWxpemUgYWxsIHByb3BlcnRpZXMgcmVjdXJzaXZlbHlcbiAgICBPYmplY3Qua2V5cyh0YXJnZXQpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0YXJnZXRba2V5XTtcblxuICAgICAgLy8gSGFuZGxlIGFycmF5c1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gdmFsdWUubWFwKChpdGVtKSA9PiBFbnRpdHlVdGlscy5hc09iamVjdChpdGVtLCBvcHRzLCB2aXNpdGVkKSk7XG4gICAgICB9XG4gICAgICAvLyBIYW5kbGUgb2JqZWN0cyAoaW5jbHVkaW5nIGVudGl0aWVzKVxuICAgICAgZWxzZSBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0YXJnZXRba2V5XSA9IEVudGl0eVV0aWxzLmFzT2JqZWN0KHZhbHVlLCBvcHRzLCB2aXNpdGVkKTtcbiAgICAgIH1cbiAgICAgIC8vIFNwcmVhZCBvcGVyYXRvciBhbHJlYWR5IGNvcGllcyBwcmltaXRpdmUgdmFsdWVzXG4gICAgfSk7XG5cbiAgICAvLyBSZW1vdmUgdGhlIG9iamVjdCBmcm9tIFNldCBhZnRlciBwcm9jZXNzaW5nXG4gICAgdmlzaXRlZC5kZWxldGUoc291cmNlKTtcblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -467,8 +467,7 @@ export class PlatformService extends StartableService {
|
|
|
467
467
|
this.registerSubscription(this.accountService.onLogin.subscribe(async (account) => {
|
|
468
468
|
if (account.settings && this.settings.settings.accountInheritance) {
|
|
469
469
|
console.debug('[platform] Copying account settings into local settings...');
|
|
470
|
-
|
|
471
|
-
await this.settings.apply(accountSettings);
|
|
470
|
+
await this.settings.apply(account.settings.asLocalSettings());
|
|
472
471
|
}
|
|
473
472
|
}));
|
|
474
473
|
}
|
|
@@ -624,4 +623,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
624
623
|
}] }, { type: i13.Downloader, decorators: [{
|
|
625
624
|
type: Optional
|
|
626
625
|
}] }] });
|
|
627
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVU3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUYsT0FBTyxFQUFvQixNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUVuRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxPQUFPLEVBQStCLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFD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LElBQUksQ0FBQyxJQUFJLE1BQU0sZUFBZSxPQUFPLElBQUksQ0FBQztRQUMvSCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxJQUFJLGVBQWUsY0FBYyxVQUFVLENBQUM7WUFDckQsQ0FBQztZQUNELE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDWixlQUFlLEVBQUUsSUFBSTtnQkFDckIsT0FBTzthQUNSLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sSUFBSSxnQkFBZ0IsY0FBYyxJQUFJLENBQUM7WUFDaEQsQ0FBQztZQUNELE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPO2dCQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQzt3R0E1bkJVLGVBQWUsbVpBeUJoQixXQUFXLGFBQ0MsbUJBQW1COzRHQTFCOUIsZUFBZSxjQURGLE1BQU07OzRGQUNuQixlQUFlO2tCQUQzQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBMEI3QixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQ3RDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybSwgVG9hc3RDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgTmV0d29ya1NlcnZpY2UgfSBmcm9tICcuL25ldHdvcmsuc2VydmljZSc7XG5pbXBvcnQgeyBBdXRoVG9rZW5UeXBlIH0gZnJvbSAnLi9uZXR3b3JrLnR5cGVzJztcbmltcG9ydCB7IFBsYXRmb3JtcyB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IExvY2FsU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IENhY2hlU2VydmljZSB9IGZyb20gJ2lvbmljLWNhY2hlJztcbmltcG9ydCB7IEF1ZGlvUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvYXVkaW8vYXVkaW8nO1xuaW1wb3J0IHsgUGxhdGZvcm0gYXMgQ2RrUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuXG5pbXBvcnQgeyBpc05pbE9yQmxhbmssIGlzTm90TmlsLCBpc05vdE5pbE9yQmxhbmssIHRvQm9vbGVhbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRW50aXRpZXNTdG9yYWdlIH0gZnJvbSAnLi9zdG9yYWdlL2VudGl0aWVzLXN0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBTaG93VG9hc3RPcHRpb25zLCBUb2FzdHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEFjY291bnRTZXJ2aWNlIH0gZnJvbSAnLi9hY2NvdW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc2tpcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IENPUkVfQ09ORklHX09QVElPTlMgfSBmcm9tICcuL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQgeyBNb21lbnREYXRlQWRhcHRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLW1vbWVudC1hZGFwdGVyJztcbmltcG9ydCB7IERvd25sb2FkZXIsIERvd25sb2FkUmVxdWVzdCwgTm90aWZpY2F0aW9uVmlzaWJpbGl0eSB9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9kb3dubG9hZGVyL25neCc7XG5pbXBvcnQgeyBTdGFydGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IGlzTW9iaWxlLCBpc1dpbmRvd3MgfSBmcm9tICcuLi8uLi9zaGFyZWQvcGxhdGZvcm1zJztcbmltcG9ydCB7IFZlcnNpb25VdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlZC92ZXJzaW9uL3ZlcnNpb25zJztcbmltcG9ydCB7IEZpbGVzVXRpbHMsIE1pbWVUeXBlcyB9IGZyb20gJy4uLy4uL3NoYXJlZC9maWxlL2ZpbGUudXRpbHMnO1xuaW1wb3J0IHsgVXJpVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS91cmkudXRpbHMnO1xuaW1wb3J0IHsgU3BsYXNoU2NyZWVuIH0gZnJvbSAnQGNhcGFjaXRvci9zcGxhc2gtc2NyZWVuJztcbmltcG9ydCB7IFN0YXR1c0JhciB9IGZyb20gJ0BjYXBhY2l0b3Ivc3RhdHVzLWJhcic7XG5pbXBvcnQgeyBCcm93c2VyLCBPcGVuT3B0aW9ucyB9IGZyb20gJ0BjYXBhY2l0b3IvYnJvd3Nlcic7XG5pbXBvcnQgeyBLZXlib2FyZCB9IGZyb20gJ0BjYXBhY2l0b3Iva2V5Ym9hcmQnO1xuaW1wb3J0IHsgQ2FwYWNpdG9yUGx1Z2lucyB9IGZyb20gJy4uLy4uL3NoYXJlZC9jYXBhY2l0b3IvcGx1Z2lucyc7XG5pbXBvcnQgeyBsb2NhbGUgYXMgbW9tZW50TG9jYWxlIH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IElMb2dnZXIsIElMb2dnaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9sb2dnaW5nL2xvZ2dlci5tb2RlbCc7XG5pbXBvcnQgeyBBUFBfTE9HR0lOR19TRVJWSUNFIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dpbmcvbG9nZ2luZy1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IENsaXBib2FyZCBhcyBDZGtDbGlwYm9hcmQgfSBmcm9tICdAYW5ndWxhci9jZGsvY2xpcGJvYXJkJztcbmltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0BjYXBhY2l0b3IvY2xpcGJvYXJkJztcbmltcG9ydCB7IFdyaXRlT3B0aW9ucyB9IGZyb20gJ0BjYXBhY2l0b3IvY2xpcGJvYXJkL2Rpc3QvZXNtL2RlZmluaXRpb25zJztcblxuZXhwb3J0IGNvbnN0IEFuZHJvaWRPc0Vudmlyb25tZW50ID0gT2JqZWN0LmZyZWV6ZSh7XG4gIERJUkVDVE9SWV9ET1dOTE9BRFM6ICdEb3dubG9hZCcsXG4gIERJUkVDVE9SWV9ET1dOTE9BRFNfT0xEOiAnRG93bmxvYWRzJywgLy8gT2xkIG5hbWUsIGZvciBvbGRlciBBbmRyb2lkIHZlcnNpb25cbiAgLy8gVE9ETzogZmluZCB2YWx1ZSBmb3IgdGhpcy4gU2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL29zL0Vudmlyb25tZW50I2dldEV4dGVybmFsU3RvcmFnZVN0YXRlKGphdmEuaW8uRmlsZSlcbiAgLy8gRElSRUNUT1JZX01VU0lDLFxuICAvLyBESVJFQ1RPUllfUE9EQ0FTVFMsXG4gIC8vIERJUkVDVE9SWV9SSU5HVE9ORVMsXG4gIC8vIERJUkVDVE9SWV9BTEFSTVMsXG4gIC8vIERJUkVDVE9SWV9OT1RJRklDQVRJT05TLFxuICAvLyBESVJFQ1RPUllfUElDVFVSRVMsXG4gIC8vIERJUkVDVE9SWV9NT1ZJRVMsXG4gIC8vIERJUkVDVE9SWV9EQ0lNLFxuICAvLyBESVJFQ1RPUllfRE9DVU1FTlRTLFxuICAvLyBESVJFQ1RPUllfQVVESU9CT09LUyxcbn0pO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFBsYXRmb3JtU2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2Uge1xuICBwcml2YXRlIF9sb2dnZXI6IElMb2dnZXI7XG4gIHByaXZhdGUgX21vYmlsZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGVza3RvcDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfY29yZG92YTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfY2FwYWNpdG9yOiBib29sZWFuO1xuICBwcml2YXRlIF9hbmRyb2lkOiBib29sZWFuO1xuICBwcml2YXRlIF9pb3M6IGJvb2xlYW47XG5cbiAgYnVzeVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGlvbmljUGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgY2RrUGxhdGZvcm06IENka1BsYXRmb3JtLFxuICAgIHByaXZhdGUgY2RrQ2xpcGJvYXJkOiBDZGtDbGlwYm9hcmQsXG4gICAgcHJpdmF0ZSB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVBZGFwdGVyOiBNb21lbnREYXRlQWRhcHRlcixcbiAgICBwcml2YXRlIGVudGl0aWVzU3RvcmFnZTogRW50aXRpZXNTdG9yYWdlLFxuICAgIHByaXZhdGUgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgbmV0d29ya1NlcnZpY2U6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWNjb3VudFNlcnZpY2U6IEFjY291bnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdWRpb1Byb3ZpZGVyOiBBdWRpb1Byb3ZpZGVyLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9HR0lOR19TRVJWSUNFKSBsb2dnaW5nU2VydmljZTogSUxvZ2dpbmdTZXJ2aWNlLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZG93bmxvYWRlcjogRG93bmxvYWRlclxuICApIHtcbiAgICBzdXBlcihpb25pY1BsYXRmb3JtKTtcblxuICAgIHRoaXMuX2xvZ2dlciA9IGxvZ2dpbmdTZXJ2aWNlPy5nZXRMb2dnZXIoJ3BsYXRmb3JtJyk7XG4gICAgdGhpcy5fZGVidWcgPSAhZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1twbGF0Zm9ybV0gQ3JlYXRpbmcgc2VydmljZScpO1xuXG4gICAgaWYgKHRoaXMuX2xvZ2dlcikge1xuICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdjdG9yJywgJ0NyZWF0aW5nIHNlcnZpY2UnKTtcbiAgICAgIGlvbmljUGxhdGZvcm0ucGF1c2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ2N0b3InLCAnUGF1c2UgYXBwJyk7XG4gICAgICB9KTtcbiAgICAgIGlvbmljUGxhdGZvcm0ucmVzdW1lLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdjdG9yJywgJ1Jlc3VtZSBhcHAnKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9kb3dubG9hZGluZ0pvYnM6IE1hcDxzdHJpbmcsIE9ic2VydmFibGU8c3RyaW5nPj4gPSBuZXcgTWFwKCk7XG5cbiAgcHJpdmF0ZSBjaGVja0FwcFZlcnNpb25UaW1lcjogU3Vic2NyaXB0aW9uO1xuXG4gIGlzKHBsYXRmb3JtTmFtZTogUGxhdGZvcm1zKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChwbGF0Zm9ybU5hbWUpIHtcbiAgICAgIGNhc2UgJ21vYmlsZSc6XG4gICAgICAgIC8vIEV4Y2x1ZGUgV2luZG93cyB0b3VjaCBzY3JlZW5zIC0gc2VlIHN1bWFyaXMtYXBwIGlzc3VlcyAjMzIzIGFuZCAjMzQ2XG4gICAgICAgIHJldHVybiBpc01vYmlsZSh3aW5kb3cpO1xuICAgICAgY2FzZSAnbW9iaWxld2ViJzpcbiAgICAgICAgLy8gRXhjbHVkZSBXaW5kb3dzIHRvdWNoIHNjcmVlbnMgLSBzZWUgc3VtYXJpcy1hcHAgaXNzdWVzICMzMjMgYW5kICMzNDZcbiAgICAgICAgcmV0dXJuIHRoaXMuaW9uaWNQbGF0Zm9ybS5pcyhwbGF0Zm9ybU5hbWUpICYmICFpc1dpbmRvd3Mod2luZG93KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLmlvbmljUGxhdGZvcm0uaXMocGxhdGZvcm1OYW1lKTtcbiAgICB9XG4gIH1cblxuICBnZXQgbW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05vdE5pbCh0aGlzLl9tb2JpbGUpID8gdGhpcy5fbW9iaWxlIDogdGhpcy5pcygnbW9iaWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogU2F5IGlmIG9wZW5lZCBoYXMgYmVlbiBvcGVuZWQgaW5zaWRlIGFuIEFuZHJvaWQgb3IgaU9zIEFwcC5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGtub3duIGlmIHRoZXJlIGlzIGNvcmRvdmEgZmVhdHVyZXNcbiAgICovXG4gIGlzQ2FwYWNpdG9yKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jYXBhY2l0b3I7XG4gIH1cblxuICAvKipcbiAgICogU2F5IGlmIG9wZW5lZCBoYXMgYmVlbiBvcGVuZWQgaW5zaWRlIGFuIEFuZHJvaWQgb3IgaU9zIEFwcC5cbiAgICogVGhpcyBpcyB1c2VkIHRvIGtub3duIGlmIHRoZXJlIGlzIGNvcmRvdmEgZmVhdHVyZXNcbiAgICovXG4gIGlzQ29yZG92YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY29yZG92YTtcbiAgfVxuXG4gIGlzQW5kcm9pZENvcmRvdmEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLl9hbmRyb2lkICYmIHRoaXMuX2NvcmRvdmEpIHx8IGZhbHNlO1xuICB9XG5cbiAgaXNJT1NDb3Jkb3ZhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5faW9zICYmIHRoaXMuX2NvcmRvdmEpIHx8IGZhbHNlO1xuICB9XG5cbiAgaXNBbmRyb2lkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hbmRyb2lkIHx8IGZhbHNlO1xuICB9XG5cbiAgaXNJT1MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lvcyB8fCBmYWxzZTtcbiAgfVxuXG4gIGlzTWFjT1NEZXNrdG9wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kZXNrdG9wICYmIHRoaXMuaXNDb3Jkb3ZhKCk7XG4gIH1cblxuICAvKipcbiAgICogSXMgYSBuYXRpdmUgQXBwIChhbmQgTk9UIGEgbW9iaWxlIHdlYilcbiAgICovXG4gIGlzQXBwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQW5kcm9pZENvcmRvdmEoKSB8fCB0aGlzLmlzSU9TQ29yZG92YSgpO1xuICB9XG5cbiAgaXNXZWIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzQXBwKCk7XG4gIH1cblxuICBpc01vYmlsZVdlYigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2JpbGUgJiYgdGhpcy5pc1dlYigpO1xuICB9XG5cbiAgZ2V0IGNhbkRvd25sb2FkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRvd25sb2FkZXIgJiYgdGhpcy5pc0FuZHJvaWRDb3Jkb3ZhKCk7XG4gIH1cblxuICBnZXQgY2FuT3BlbkZpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlOyAvLyBUT0RPOiBmaXhtZSB1c2luZyBAY2FwYWNpdG9yL2ZpbGVzeXN0ZW0gP1xuICB9XG5cbiAgd2lkdGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pb25pY1BsYXRmb3JtLndpZHRoKCk7XG4gIH1cblxuICBoZWlnaHQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5pb25pY1BsYXRmb3JtLmhlaWdodCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydCgpOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgdGhpcy5hY2NvdW50U2VydmljZS50b2tlblR5cGUgPSB1bmRlZmluZWQ7XG4gICAgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBTdGFydGluZyBwbGF0Zm9ybS4uLicpO1xuICAgIHRoaXMuX2xvZ2dlcj8uaW5mbygnbmdPblN0YXJ0JywgJ1N0YXJ0aW5nIHBsYXRmb3JtLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fbW9iaWxlID0gdGhpcy5pcygnbW9iaWxlJyk7XG4gICAgICB0aGlzLl9kZXNrdG9wID0gdGhpcy5pcygnZGVza3RvcCcpO1xuICAgICAgdGhpcy5fY29yZG92YSA9IHRoaXMuaXMoJ2NvcmRvdmEnKTtcbiAgICAgIHRoaXMuX2NhcGFjaXRvciA9IHRoaXMuaXMoJ2NhcGFjaXRvcicpO1xuICAgICAgdGhpcy5fYW5kcm9pZCA9IHRoaXMuaXMoJ2FuZHJvaWQnKTtcbiAgICAgIHRoaXMuX2lvcyA9IHRoaXMuaXMoJ2lvcycpO1xuXG4gICAgICBjb25zdCBsb2dNZXNzYWdlID0gYERldGVjdGVkIHttb2JpbGU6ICR7dGhpcy5fbW9iaWxlfSwgZGVza3RvcDogJHt0aGlzLl9kZXNrdG9wfSwgY29yZG92YTogJHt0aGlzLl9jb3Jkb3ZhfSwgY2FwYWNpdG9yOiAke3RoaXMuX2NhcGFjaXRvcn0sIGFuZHJvaWQ6ICR7dGhpcy5fYW5kcm9pZH0sIGlvczogJHt0aGlzLl9pb3N9fWA7XG4gICAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gJyArIGxvZ01lc3NhZ2UpO1xuICAgICAgdGhpcy5fbG9nZ2VyPy5pbmZvKCduZ09uU3RhcnQnLCBsb2dNZXNzYWdlKTtcblxuICAgICAgLy8gQ29uZmlndXJlIHRoZW1lXG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyZVRoZW1lKHRoaXMuX21vYmlsZSk7XG5cbiAgICAgIC8vIENvbmZpZ3VyZSBDYXBhY2l0b3IgcGx1Z2luc1xuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmVDYXBhY2l0b3JQbHVnaW5zKCk7XG5cbiAgICAgIC8vIENvbmZpZ3VyZSB0cmFuc2xhdGlvblxuICAgICAgdGhpcy5jb25maWd1cmVUcmFuc2xhdGUoKTtcblxuICAgICAgLy8gQ29uZmlndXJlIGNhY2hlXG4gICAgICB0aGlzLmNvbmZpZ3VyZUNhY2hlKCk7XG5cbiAgICAgIC8vIFN0YXJ0IHJvb3Qgc2VydmljZXNcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmVudGl0aWVzU3RvcmFnZS5yZWFkeSgpLCB0aGlzLnNldHRpbmdzLnJlYWR5KCksIHRoaXMubmV0d29ya1NlcnZpY2UucmVhZHkoKSwgdGhpcy5hdWRpb1Byb3ZpZGVyLnJlYWR5KCldKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgd2ViIGFwcCBoYXMgdXBkYXRlLCBhbmQgcmVsb2FkIHBhZ2UgaWYgbmVlZFxuICAgICAgaWYgKHRoaXMuaXNXZWIoKSAmJiB0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcFZlcnNpb24oeyBjYW5SZWxvYWQ6IHRydWUgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBjYWNoZSBjb25maWd1cmF0aW9uIHdoZW4gbmV0d29yayBjaGFuZ2VkXG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgICB0aGlzLm5ldHdvcmtTZXJ2aWNlLm9uTmV0d29ya1N0YXR1c0NoYW5nZXNcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHNraXAoMSkgLy8gQWxyZWFkeSBkb25lIG9uY2UsIHNvIHdlIHNraXAgdGhlIGZpcnN0IGV2ZW50XG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHR5cGUpID0+IHRoaXMuY29uZmlndXJlQ2FjaGUodHlwZSAhPT0gJ25vbmUnKSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgYFtwbGF0Zm9ybV0gU3RhcnRpbmcgcGxhdGZvcm0gW09LXSB7bW9iaWxlOiAke3RoaXMuX21vYmlsZX0sIGNhcGFjaXRvcjogJHt0aGlzLl9jYXBhY2l0b3J9LCB3ZWI6ICR7dGhpcy5pc1dlYigpfSwgZG93bmxvYWRlcjogJHt0aGlzLmNhbkRvd25sb2FkfX0gaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYFxuICAgICAgKTtcblxuICAgICAgLy8gUGFzcyBhdXRoIHRva2VuXG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLnN1YnNjcmliZSgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgaWYgKCFjb25maWcpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgICAgICAgLy8gVXBkYXRlIGF1dGhlbnRpY2F0aW9uIHR5cGVcbiAgICAgICAgICBjb25zdCB0b2tlblR5cGU6IEF1dGhUb2tlblR5cGUgPSBjb25maWcuZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5BVVRIX1RPS0VOX1RZUEUpIGFzIEF1dGhUb2tlblR5cGU7XG4gICAgICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayh0b2tlblR5cGUpICYmIHRoaXMuYWNjb3VudFNlcnZpY2UudG9rZW5UeXBlICE9PSB0b2tlblR5cGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBVc2luZyBhdXRoIHRva2VuIHR5cGUgeyR7dG9rZW5UeXBlfX1gKTtcbiAgICAgICAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2UudG9rZW5UeXBlID0gdG9rZW5UeXBlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVuYWJsZSBhdXRoIEFQSSB1c2luZyB0b2tlbnNcbiAgICAgICAgICBjb25zdCBhdXRoQXBpRW5hYmxlZCA9IGNvbmZpZy5nZXRQcm9wZXJ0eUFzQm9vbGVhbihDT1JFX0NPTkZJR19PUFRJT05TLkFVVEhfQVBJX1RPS0VOX0VOQUJMRUQpO1xuICAgICAgICAgIGlmIChpc05vdE5pbChhdXRoQXBpRW5hYmxlZCkgJiYgYXV0aEFwaUVuYWJsZWQgIT09IHRoaXMuYWNjb3VudFNlcnZpY2UuYXBpVG9rZW5FbmFibGVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gVXNpbmcgYXV0aCBBUEkgdG9rZW5zID8gJHthdXRoQXBpRW5hYmxlZH19YCk7XG4gICAgICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLmFwaVRva2VuRW5hYmxlZCA9IGF1dGhBcGlFbmFibGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIC8vIEhpZGUgdGhlIHNwbGFzaHNjcmVlbiAoaWYgbW9iaWxlIG9yIG1hY09TKSAtIGFmdGVyIDFzXG4gICAgICBpZiAodGhpcy5fbW9iaWxlIHx8IHRoaXMuaXNNYWNPU0Rlc2t0b3AoKSkge1xuICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBTcGxhc2hTY3JlZW4uaGlkZSgpO1xuXG4gICAgICAgICAgLy8gUGxheSBzdGFydHVwIHNvdW5kIChpcyBtb2JpbGUpXG4gICAgICAgICAgaWYgKHRoaXMuX21vYmlsZSkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5hdWRpb1Byb3ZpZGVyLnBsYXlTdGFydHVwU291bmQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBuZXcgdmVyc2lvbiwgZXZlcnkgMSBtaW5cbiAgICAgIGNvbnN0IGNoZWNrSW50ZXJ2YWxNcyA9ICh0aGlzLmVudmlyb25tZW50LmNoZWNrQXBwVmVyc2lvbkludGVydmFsSW5TZWNvbmRzIHx8IDApICogMTAwMDtcbiAgICAgIGlmICh0aGlzLmlzV2ViKCkgJiYgdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uICYmIGNoZWNrSW50ZXJ2YWxNcyA+IDApIHtcbiAgICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGltZXIoY2hlY2tJbnRlcnZhbE1zLCBjaGVja0ludGVydmFsTXMpLnN1YnNjcmliZSgoXykgPT5cbiAgICAgICAgICB0aGlzLmNoZWNrQXBwVmVyc2lvbih7IHNpbGVudDogdHJ1ZSwgY2FuUmVsb2FkOiBmYWxzZSAvKmRvIE5PVCBhdXRvIHJlbG9hZCwgd2hlbiBhcHAgaXMgc3RhcnRlZCovIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXIgPSBzdWJzY3JpcHRpb247XG4gICAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgc3Vic2NyaXB0aW9uLmFkZCgoKSA9PiB0aGlzLnVucmVnaXN0ZXJTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBNYW5hZ2Ugc3RhcnR1cCBlcnJvclxuICAgICAgcmV0dXJuIHRoaXMub25TdGFydHVwRXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXNlZCB0byBzaG93IGEgYmFja2Ryb3Agd2hlbiBwbGF0Zm9ybSBpcyBidXN5IChlLmcuIGZyb20gdGhlIGFwcC5jb21wb25lbnQudHMpXG4gICAqL1xuICBtYXJrQXNCdXN5KCkge1xuICAgIGlmICghdGhpcy5idXN5U3ViamVjdC52YWx1ZSkge1xuICAgICAgdGhpcy5idXN5U3ViamVjdC5uZXh0KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIG1hcmtBc05vdEJ1c3koKSB7XG4gICAgaWYgKHRoaXMuYnVzeVN1YmplY3QudmFsdWUpIHtcbiAgICAgIHRoaXMuYnVzeVN1YmplY3QubmV4dChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgb3Blbih1cmw6IHN0cmluZywgb3B0cz86IE9taXQ8T3Blbk9wdGlvbnMsICd1cmwnPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBPcGVuaW5nIGxpbms6ICR7dXJsfWApO1xuICAgIGlmICh0aGlzLl9tb2JpbGUgJiYgdGhpcy5fY2FwYWNpdG9yKSB7XG4gICAgICBhd2FpdCBCcm93c2VyLm9wZW4oeyB1cmwsIC4uLm9wdHMgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbmRvdy5vcGVuKHVybCwgb3B0cz8ud2luZG93TmFtZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RG93bmxvYWRpbmdKb2IodXJpOiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9kb3dubG9hZGluZ0pvYnMuZ2V0KHVyaSk7XG4gIH1cblxuICBkb3dubG9hZChyZXF1ZXN0OiB7IHVyaTogc3RyaW5nOyBmaWxlbmFtZT86IHN0cmluZyB9ICYgUGFydGlhbDxEb3dubG9hZFJlcXVlc3Q+KTogT2JzZXJ2YWJsZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIXJlcXVlc3QgfHwgIXJlcXVlc3QudXJpKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGFyZ3VtZW50ICdyZXF1ZXN0JyBvciAncmVxdWVzdC51cmknXCIpO1xuXG4gICAgaWYgKHRoaXMuY2FuRG93bmxvYWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIG5vdCBhbHJlYWR5IGRvd25sb2FkaW5nIGZpbGVcbiAgICAgIGxldCBqb2IkID0gdGhpcy5fZG93bmxvYWRpbmdKb2JzLmdldChyZXF1ZXN0LnVyaSk7XG4gICAgICBpZiAoam9iJCkgcmV0dXJuIGpvYiQ7XG5cbiAgICAgIC8vIENvbXB1dGUgc3ViUGF0aCAoZmluYWwgZmlsZW5hbWUpXG4gICAgICBsZXQgc3ViUGF0aCA9XG4gICAgICAgIHJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsUHVibGljRGlyPy5zdWJQYXRoIHx8XG4gICAgICAgIHJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXI/LnN1YlBhdGggfHxcbiAgICAgICAgcmVxdWVzdC5maWxlbmFtZSB8fFxuICAgICAgICBVcmlVdGlscy5nZXRGaWxlbmFtZShyZXF1ZXN0LnVyaSkgfHxcbiAgICAgICAgcmVxdWVzdC50aXRsZSB8fFxuICAgICAgICAnZG93bmxvYWQnO1xuXG4gICAgICBzdWJQYXRoID0gc3ViUGF0aFxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAvLyBSZW1vdmUgc3BhY2VzXG4gICAgICAgIC5yZXBsYWNlKC9cXHMrL2csICctJyk7XG5cbiAgICAgIC8vIEZvcmNlIEFQSyB0byBmaW5pc2ggd2l0aCAnLmFwaydcbiAgICAgIGlmIChyZXF1ZXN0Lm1pbWVUeXBlID09PSBNaW1lVHlwZXMuQU5EUk9JRF9BUEsgJiYgIXN1YlBhdGgudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLmFwaycpKSB7XG4gICAgICAgIHN1YlBhdGggKz0gJy5hcGsnO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkb3dubG9hZFJlcXVlc3QgPSA8RG93bmxvYWRSZXF1ZXN0PntcbiAgICAgICAgdmlzaWJsZUluRG93bmxvYWRzVWk6IHRydWUsXG4gICAgICAgIG5vdGlmaWNhdGlvblZpc2liaWxpdHk6IE5vdGlmaWNhdGlvblZpc2liaWxpdHkuVmlzaWJsZU5vdGlmeUNvbXBsZXRlZCxcbiAgICAgICAgLi4ucmVxdWVzdCxcbiAgICAgICAgZmlsZW5hbWU6IHVuZGVmaW5lZCwgLy8gRm9yY2UgdW5zZXRcbiAgICAgICAgZGVzdGluYXRpb25JbkV4dGVybmFsUHVibGljRGlyOiAhcmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxGaWxlc0RpclxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBkaXJUeXBlOiBBbmRyb2lkT3NFbnZpcm9ubWVudC5ESVJFQ1RPUllfRE9XTkxPQURTLFxuICAgICAgICAgICAgICAuLi5yZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbFB1YmxpY0RpcixcbiAgICAgICAgICAgICAgc3ViUGF0aCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXI6IHJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXJcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgZGlyVHlwZTogQW5kcm9pZE9zRW52aXJvbm1lbnQuRElSRUNUT1JZX0RPV05MT0FEUyxcbiAgICAgICAgICAgICAgLi4ucmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxGaWxlc0RpcixcbiAgICAgICAgICAgICAgc3ViUGF0aCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIC8vIFN0YXJ0IGRvd25sb2FkXG4gICAgICBjb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIERvd25sb2FkaW5nLCB1c2luZyByZXF1ZXN0OiAnICsgSlNPTi5zdHJpbmdpZnkoZG93bmxvYWRSZXF1ZXN0KSk7XG4gICAgICBqb2IkID0gZnJvbSh0aGlzLmRvd25sb2FkZXIuZG93bmxvYWQoZG93bmxvYWRSZXF1ZXN0KSk7XG5cbiAgICAgIC8vIFJlbWVtYmVyIHRoaXMgcmVxdWVzdCB1cmlcbiAgICAgIHRoaXMuX2Rvd25sb2FkaW5nSm9icy5zZXQoZG93bmxvYWRSZXF1ZXN0LnVyaSwgam9iJCk7XG4gICAgICByZXR1cm4gam9iJC5waXBlKFxuICAgICAgICB0YXAoKGxvY2F0aW9uKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIEZpbGUgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQgYXQ6JyArIGxvY2F0aW9uKTtcbiAgICAgICAgICAvLyBGb3JnZXQgam9iXG4gICAgICAgICAgdGhpcy5fZG93bmxvYWRpbmdKb2JzLmRlbGV0ZShkb3dubG9hZFJlcXVlc3QudXJpKTtcbiAgICAgICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIFVuYWJsZSB0byBkb3dubG9hZDogJyArICgoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpKTtcbiAgICAgICAgICAvLyBGb3JnZXQgdGhlIHJlcXVlc3RcbiAgICAgICAgICB0aGlzLl9kb3dubG9hZGluZ0pvYnMuZGVsZXRlKGRvd25sb2FkUmVxdWVzdC51cmkpO1xuXG4gICAgICAgICAgLy8gUmV0cnkgd2l0aCBhbm90aGVyIGxvY2F0aW9uIC0gaXNzdWUgaW4gb2xkZXIgQW5kcm9pZCB2ZXJzaW9uXG4gICAgICAgICAgaWYgKGRvd25sb2FkUmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxQdWJsaWNEaXI/LmRpclR5cGUgPT09IEFuZHJvaWRPc0Vudmlyb25tZW50LkRJUkVDVE9SWV9ET1dOTE9BRFMpIHtcbiAgICAgICAgICAgIGRvd25sb2FkUmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxQdWJsaWNEaXIuZGlyVHlwZSA9IEFuZHJvaWRPc0Vudmlyb25tZW50LkRJUkVDVE9SWV9ET1dOTE9BRFNfT0xEO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG93bmxvYWQoZG93bmxvYWRSZXF1ZXN0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayAoaWYgbm90IEFuZHJvaWQgYW5kIENhcGFjaXRvcik6IG9wZW5pbmcgdGhlIFVSSVxuICAgIC8vIFRPRE86IGZpbmQgYSB3YXkgdG8gZG93bmxvYWQgdW5kZXIgaU9TIChzZWUgaHR0cHM6Ly93d3cuYy1zaGFycGNvcm5lci5jb20vYXJ0aWNsZS9ob3ctdG8tZG93bmxvYWQtYS1maWxlLXVzaW5nLWZpbGUtdHJhbnNmZXItcGx1Z2luLWluLWlvbmljLTMvKVxuICAgIGVsc2Uge1xuICAgICAgRmlsZXNVdGlscy5kb3dubG9hZFVyaShyZXF1ZXN0LnVyaSwgcmVxdWVzdC5maWxlbmFtZSk7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjb3B5VG9DbGlwYm9hcmQoZGF0YTogc3RyaW5nIHwgV3JpdGVPcHRpb25zLCBvcHRzPzogU2hvd1RvYXN0T3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8gZGF0YSA6IGRhdGEuc3RyaW5nO1xuICAgIGxldCBjb3BpZWQgPSB0cnVlO1xuICAgIGlmICh0aGlzLmlzQW5kcm9pZENvcmRvdmEoKSkge1xuICAgICAgY29uc3Qgd3JpdGVPcHRpb25zID0gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnID8geyBzdHJpbmc6IHZhbHVlIH0gOiBkYXRhO1xuICAgICAgYXdhaXQgQ2xpcGJvYXJkLndyaXRlKHdyaXRlT3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvcGllZCA9IHRoaXMuY2RrQ2xpcGJvYXJkLmNvcHkodmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChjb3BpZWQpIHtcbiAgICAgIC8vIFNob3cgdG9hc3RcbiAgICAgIGlmIChvcHRzICYmIGlzTm90TmlsT3JCbGFuayhvcHRzLm1lc3NhZ2UpKSB7XG4gICAgICAgIGF3YWl0IFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwge1xuICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAuLi5vcHRzLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBVbmFibGUgdG8gY29weSB0byBjbGlwYm9hcmQ6ICcgKyBkYXRhKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVEYXJrVGhlbWUoZW5hYmxlOiBib29sZWFuKSB7XG4gICAgY29uc3Qgd2FzRW5hYmxlZCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2RhcmsnKTtcbiAgICBpZiAoZW5hYmxlICE9PSB3YXNFbmFibGVkKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbcGxhdGZvcm1dICR7ZW5hYmxlID8gJ0VuYWJsZScgOiAnRGlzYWJsZSd9IGRhcmsgbW9kZS4uLmApO1xuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoJ2RhcmsnLCBlbmFibGUpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUhpZ2hDb250cmFzdChlbmFibGU6IGJvb2xlYW4pIHtcbiAgICBpZiAoZW5hYmxlICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdoaWdoLWNvbnRyYXN0JykpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1twbGF0Zm9ybV0gRW5hYmxlIGhpZ2ggY29udHJhc3QuLi4nKTtcbiAgICB9XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoJ2hpZ2gtY29udHJhc3QnLCBlbmFibGUpO1xuICB9XG5cbiAgc2hvd1RvYXN0KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPEhUTUxJb25Ub2FzdEVsZW1lbnQ+IHtcbiAgICBpZiAoIXRoaXMudG9hc3RDb250cm9sbGVyKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHRvYXN0Q29udHJvbGxlciBpbiBjb21wb25lbnQncyBjb25zdHJ1Y3RvclwiKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+XG4gICAgICBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgb25XaWxsUHJlc2VudDogKHQpID0+IHJlc29sdmUodCksXG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBhc3luYyBjbG9zZVRvYXN0KGlkPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMudG9hc3RDb250cm9sbGVyPy5kaXNtaXNzKG51bGwsIG51bGwsIGlkKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNvbmZpZ3VyZVRoZW1lKG1vYmlsZTogYm9vbGVhbiwgd2luOiBhbnkgPSB3aW5kb3cpIHtcbiAgICAvLyBMaXN0ZW4gZm9yIGNoYW5nZXMgdG8gc2V0dGluZ3MgZGFyayBtb2RlXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuYWxsb3dEYXJrTW9kZSkge1xuICAgICAgY29uc3QgaXNTY3JlZW4kID0gbmV3IE9ic2VydmFibGU8Ym9vbGVhbj4oKG9ic2VydmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoTWVkaWEgPSB3aW4ubWF0Y2hNZWRpYSgnc2NyZWVuJyk7XG4gICAgICAgIG1hdGNoTWVkaWEuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IG9ic2VydmVyLm5leHQoZS5tYXRjaGVzKSk7XG4gICAgICAgIG9ic2VydmVyLm5leHQobWF0Y2hNZWRpYS5tYXRjaGVzKTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgICAgY29tYmluZUxhdGVzdChbaXNTY3JlZW4kLCB0aGlzLnNldHRpbmdzLmRhcmtNb2RlJF0pLnN1YnNjcmliZSgoW2lzU2NyZWVuLCBlbmFibGVdKSA9PiB0aGlzLnRvZ2dsZURhcmtUaGVtZShpc1NjcmVlbiAmJiBlbmFibGUpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBXb3JrYXJvdW5kLCBmb3IgTVMgV2luZG93cyB0b3VjaCBzY3JlZW4gKGRldGVjdGVkIGFzIG1vYmlsZSwgYnV0IGZvcmNlZCBhcyBkZXNrdG9wKVxuICAgIGlmIChcbiAgICAgICFtb2JpbGUgJiZcbiAgICAgICh3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Py5jbGFzc0xpc3QuY29udGFpbnMoJ3BsdC1tb2JpbGUnKSB8fCB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ3BsdC1tb2JpbGV3ZWInKSlcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybignW3BsYXRmb3JtXSBGb3JjZSBjbGFzcyBsaXN0IHRvOiA8aHRtbCBjbGFzcz1cInBsdC1kZXNrdG9wXCI+LiBXb3JrYXJvdW5kIGZvciBXaW5kb3dzIHRvdWNoIHNjcmVlbi4nKTtcbiAgICAgIHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgncGx0LW1vYmlsZScsICdwbHQtbW9iaWxld2ViJyk7XG4gICAgICB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3BsdC1kZXNrdG9wJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNvbmZpZ3VyZUNhcGFjaXRvclBsdWdpbnMoKSB7XG4gICAgaWYgKCF0aGlzLl9jYXBhY2l0b3IpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIENhcGFjaXRvciBwbHVnaW5zLi4uJyk7XG5cbiAgICBsZXQgcGx1Z2luTmFtZTogc3RyaW5nO1xuICAgIHRyeSB7XG4gICAgICBwbHVnaW5OYW1lID0gQ2FwYWNpdG9yUGx1Z2lucy5TdGF0dXNCYXI7XG4gICAgICBpZiAodGhpcy5pc0FwcCgpICYmIHRoaXMuaXNBbmRyb2lkKCkpIHtcbiAgICAgICAgYXdhaXQgU3RhdHVzQmFyLnNldE92ZXJsYXlzV2ViVmlldyh7IG92ZXJsYXk6IGZhbHNlIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBIaWRlIGFjY2Vzc29yeSBiYXIgKGlPUyBvbmx5KVxuICAgICAgaWYgKHRoaXMuaXNBcHAoKSAmJiB0aGlzLmlzSU9TKCkpIHtcbiAgICAgICAgcGx1Z2luTmFtZSA9IENhcGFjaXRvclBsdWdpbnMuS2V5Ym9hcmQ7XG4gICAgICAgIGF3YWl0IEtleWJvYXJkLnNldEFjY2Vzc29yeUJhclZpc2libGUoeyBpc1Zpc2libGU6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgbG9nTWVzc2FnZSA9IGBFcnJvciB3aGlsZSBjb25maWd1cmluZyAke3BsdWdpbk5hbWV9IHBsdWdpbjogJHtlcnIubWVzc2FnZSB8fCBlcnJ9XFxuJHtlcnI/Lm9yaWdpbmFsU3RhY2sgfHwgSlNPTi5zdHJpbmdpZnkoZXJyKX1gO1xuICAgICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSAnICsgbG9nTWVzc2FnZSk7XG4gICAgICB0aGlzLl9sb2dnZXI/LmVycm9yKCdjb25maWd1cmVDYXBhY2l0b3JQbHVnaW5zJywgbG9nTWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNvbmZpZ3VyZVRyYW5zbGF0ZSgpIHtcbiAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gQ29uZmlndXJpbmcgaTE4biAuLi4nKTtcblxuICAgIC8vIHRoaXMgbGFuZ3VhZ2Ugd2lsbCBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgd2hlbiBhIHRyYW5zbGF0aW9uIGlzbid0IGZvdW5kIGluIHRoZSBjdXJyZW50IGxhbmd1YWdlXG4gICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0TG9jYWxlKTtcbiAgICAvLyBhcHBseSBsb2NhbGUgaW1tZWRpYXRlbHlcbiAgICB0aGlzLmFwcGx5TG9jYWxlKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSk7XG5cbiAgICAvLyBXaGVuIGxvY2FsZSBjaGFuZ2VzLCBhcHBseSB0byBkYXRlIGFkYXB0ZXJcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmxhbmcpIHtcbiAgICAgICAgICB0aGlzLmFwcGx5TG9jYWxlKGV2ZW50LmxhbmcpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5zZXR0aW5ncy5vbkNoYW5nZS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAvLyBBcHBseSBsb2NhbGVcbiAgICAgICAgICBpZiAoZGF0YS5sb2NhbGUpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLmxvY2FsZSAhPT0gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcpIHtcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGRhdGEubG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQXBwbHlpbmcgZGVmYXVsdCwgd2hlbiBzZXR0aW5ncyBoYXMgbm8gbG9jYWxlIHByb3BlcnR5IChob3RmaXggLSBsdWRvdmljLnBlY3F1b3RAZS1pcy5wcm8gLSAxNC8xMS8yMDIxIC0gc2luY2UgdjEuMjAuNDIpXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1twbGF0Zm9ybV0gTm8gbG9jYWxlIGZvdW5kIGluIHNldHRpbmdzOiBhcHBseWluZyBkZWZhdWx0TG9jYWxlOiAnLCB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRMb2NhbGUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBVc2UgYWNjb3VudCdzIHNldHRpbmdzLCAobGlrZSBsb2NhbGUpLCB3aGVuIGFjY291bnQgaW5oZXJpdGFuY2UgZW5hYmxlZFxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4uc3Vic2NyaWJlKGFzeW5jIChhY2NvdW50KSA9PiB7XG4gICAgICAgIGlmIChhY2NvdW50LnNldHRpbmdzICYmIHRoaXMuc2V0dGluZ3Muc2V0dGluZ3MuYWNjb3VudEluaGVyaXRhbmNlKSB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBDb3B5aW5nIGFjY291bnQgc2V0dGluZ3MgaW50byBsb2NhbCBzZXR0aW5ncy4uLicpO1xuICAgICAgICAgIGNvbnN0IGFjY291bnRTZXR0aW5ncyA9IGFjY291bnQuc2V0dGluZ3MuYXNMb2NhbFNldHRpbmdzKCk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5hcHBseShhY2NvdW50U2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBwbHlMb2NhbGUobG9jYWxlOiBzdHJpbmcpIHtcbiAgICAvLyBmb3JjZSAnZW4nIGFzICdlbl9HQidcbiAgICBpZiAobG9jYWxlID09PSAnZW4nKSB7XG4gICAgICBsb2NhbGUgPSAnZW5fR0InO1xuICAgIH1cblxuICAgIC8vIGNvbmZpZyBtb21lbnQgbGliXG4gICAgdHJ5IHtcbiAgICAgIG1vbWVudExvY2FsZShsb2NhbGUpO1xuICAgICAgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBVc2UgbG9jYWxlIHsnICsgbG9jYWxlICsgJ30nKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIElmIGVycm9yLCBmYWxsYmFjayB0byBlblxuICAgICAgbW9tZW50TG9jYWxlKCdlbicpO1xuICAgICAgY29uc29sZS53YXJuKCdbcGxhdGZvcm1dIFVua25vd24gbG9jYWxlIGZvciBtb21lbnQgbGliLiBVc2luZyBkZWZhdWx0IFtlbl0nKTtcbiAgICB9XG5cbiAgICAvLyBDb25maWcgZGF0ZSBhZGFwdGVyXG4gICAgdGhpcy5kYXRlQWRhcHRlci5zZXRMb2NhbGUobW9tZW50TG9jYWxlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbmZpZ3VyZUNhY2hlKG9ubGluZT86IGJvb2xlYW4pIHtcbiAgICBvbmxpbmUgPSB0b0Jvb2xlYW4ob25saW5lLCB0aGlzLmNhY2hlLmlzT25saW5lKCkpO1xuICAgIGNvbnN0IGNhY2hlVFRMID0gb25saW5lID8gMzYwMCAvKiAxaCAqLyA6IDM2MDAgKiAyNCAqIDMwOyAvKiAxIG1vbnRoICovXG4gICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIGNhY2hlIFtPS10ge29ubGluZTogJHtvbmxpbmV9LCB0aW1lVG9MaXZlOiAke2NhY2hlVFRMIC8gMzYwMH1oLCBvZmZsaW5lSW52YWxpZGF0ZTogZmFsc2V9YCk7XG4gICAgdGhpcy5jYWNoZS5zZXREZWZhdWx0VFRMKGNhY2hlVFRMKTtcbiAgICB0aGlzLmNhY2hlLnNldE9mZmxpbmVJbnZhbGlkYXRlKGZhbHNlKTsgLy8gRG8gbm90IGludmFsaWRhdGUgY2FjaGUgd2hlbiBvZmZsaW5lXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY2hlY2tBcHBWZXJzaW9uKG9wdHM/OiB7IGNhblJlbG9hZD86IGJvb2xlYW47IHNpbGVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLm5ldHdvcmtTZXJ2aWNlLm9mZmxpbmUgfHwgIXRoaXMuaXNXZWIoKSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBjb25zdCBzaWxlbnQgPSBvcHRzPy5zaWxlbnQgPT09IHRydWU7XG4gICAgY29uc3QgcHJvZHVjdGlvbiA9IHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBjb25zdCBjYW5BdXRvUmVsb2FkID0gIW9wdHMgfHwgb3B0cy5jYW5SZWxvYWQgIT09IGZhbHNlO1xuXG4gICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBDaGVja2luZyByZW1vdGUgYXBwIHZlcnNpb24uLi4nKTtcblxuICAgIGNvbnN0IGFjdHVhbFZlcnNpb24gPSB0aGlzLmVudmlyb25tZW50LnZlcnNpb247XG4gICAgaWYgKGlzTmlsT3JCbGFuayhhY3R1YWxWZXJzaW9uKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIltwbGF0Zm9ybV0gTWlzc2luZyByZXF1aXJlZCB2YWx1ZSBmb3IgJ2Vudmlyb25tZW50LnZlcnNpb24nLiBDYW5ub3QgY2hlY2sgcmVtb3RlIGFwcCB2ZXJzaW9uLlwiKTtcbiAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXI/LnVuc3Vic2NyaWJlKCk7IC8vIFN0b3AgdGltZXIgaWYgZXhpc3RzXG4gICAgICByZXR1cm47IC8vIFNraXBcbiAgICB9XG5cbiAgICBjb25zdCByZW1vdGVWZXJzaW9uID0gYXdhaXQgdGhpcy5uZXR3b3JrU2VydmljZS5nZXRBcHBWZXJzaW9uKCk7XG4gICAgaWYgKGlzTmlsT3JCbGFuayhyZW1vdGVWZXJzaW9uKSkge1xuICAgICAgaWYgKHByb2R1Y3Rpb24gJiYgIXNpbGVudCkgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBDYW5ub3QgbG9hZCByZW1vdGUgYXBwIHZlcnNpb24uIFNraXBwaW5nIHZlcnNpb24gY2hlY2snKTtcbiAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXI/LnVuc3Vic2NyaWJlKCk7IC8vIFN0b3AgdGltZXIgaWYgZXhpc3RzXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFZlcnNpb25VdGlscy5pc0NvbXBhdGlibGUocmVtb3RlVmVyc2lvbiwgYWN0dWFsVmVyc2lvbikpIHtcbiAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gQ2hlY2tpbmcgcmVtb3RlIGFwcCB2ZXJzaW9uIFtPS10ge3JlbW90ZTogJyR7cmVtb3RlVmVyc2lvbn0nLCBhY3R1YWw6ICcke2FjdHVhbFZlcnNpb259J31gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBuZXdlciB2ZXJzaW9uIGV4aXN0c1xuICAgIGxldCByZWxvYWRQYXRoID0gbG9jYXRpb24uaHJlZi5yZXBsYWNlKC9bJj9ddmVyc2lvbj1bXiZdKi9naSwgJycpOyAvLyBSZW1vdmUgb2xkIHZlcnNpb24gaW4gcXVlcnkgcGFyYW1zXG4gICAgcmVsb2FkUGF0aCArPSByZWxvYWRQYXRoLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJic7IC8vIEFkZCBxdWVyeSBwYXJhbSBzZXBhcmF0b3JcbiAgICByZWxvYWRQYXRoICs9ICd2ZXJzaW9uPScgKyByZW1vdGVWZXJzaW9uOyAvLyBBZGQgdmVyc2lvbiAodG8gYXZvaWQgYSByZWxvYWQgaW5maW5pdGUgbG9vcClcblxuICAgIC8vIEFscmVhZHkgdHJ5IHRvIHJlbG9hZCwgYnV0IHZlcnNpb24gc3RpbGwgYmFkXG4gICAgaWYgKHJlbG9hZFBhdGggPT09IGxvY2F0aW9uLmhyZWYpIHtcbiAgICAgIGlmIChjYW5BdXRvUmVsb2FkKVxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBbcGxhdGZvcm1dIFJlbG9hZGVkIHBhZ2UgZmFpbGVkLCBiZWNhdXNlIHZlcnNpb24gc3RpbGwgbWlzbWF0Y2ghIFBsZWFzZSBjaGVjayB2ZXJzaW9uLmFwcHVwIGZpbGUgKGV4cGVjdGVkIGFwcCB2ZXJzaW9uOiAke2FjdHVhbFZlcnNpb259KWBcbiAgICAgICAgKTtcbiAgICAgIC8vIFN0b3AgdGltZXIsIHRvIGF2b2lkIGluZmluaXRlIGxvb3BcbiAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS53YXJuKGBbcGxhdGZvcm1dIE1vcmUgcmVjZW50IHZlcnNpb24gZGV0ZWN0ZWQgKHJlbW90ZTogJHtyZW1vdGVWZXJzaW9ufSwgYWN0dWFsOiAke2FjdHVhbFZlcnNpb259YCk7XG5cbiAgICAvLyBBdXRvIHJlbG9hZFxuICAgIGlmIChjYW5BdXRvUmVsb2FkKSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gV2lsbCByZWxvYWRpbmcgYXQgJyArIHJlbG9hZFBhdGgpO1xuICAgICAgbG9jYXRpb24uaHJlZiA9IHJlbG9hZFBhdGg7XG4gICAgICAvLyBBcHAgc3RvcFxuICAgIH1cbiAgICAvLyBBc2sgdXNlciB0byByZWxvYWRcbiAgICBlbHNlIHtcbiAgICAgIC8vIFN0b3AgdGltZXIsIHRvIGF2b2lkIGluZmluaXRlIGxvb3BcbiAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXI/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgIC8vIERpc3BsYXkgYSByZWxvYWQgdG9hc3RcbiAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogJ0NPTkZJUk0uUkVMT0FEX0FQUCcsXG4gICAgICAgIG1lc3NhZ2VQYXJhbXM6IHsgdmVyc2lvbjogcmVtb3RlVmVyc2lvbiwgbmFtZTogdGhpcy5lbnZpcm9ubWVudC5uYW1lIH0sXG4gICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgZHVyYXRpb246IC0xLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICAvLyBSZWxvYWQgYnV0dG9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnQ09NTU9OLkJUTl9VUERBVEUnKSxcbiAgICAgICAgICAgIHNpZGU6ICdlbmQnLFxuICAgICAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gcmVsb2FkUGF0aDtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25TdGFydHVwRXJyb3IoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBGYWlsZWQgc3RhcnRpbmcgdGhlIHBsYXRmb3JtISAnICsgSlNPTi5zdHJpbmdpZnkoZXJyKSk7XG4gICAgbGV0IG1lc3NhZ2UgPSAoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnI7XG4gICAgY29uc3QgZGV0YWlsc01lc3NhZ2UgPSBlcnIgJiYgKChlcnIuZGV0YWlscyAmJiBlcnIuZGV0YWlscy5tZXNzYWdlKSB8fCBlcnIuZGV0YWlscyk7XG4gICAgLy8gU2V0IHNwZWNpZmljIGVycm9yIHdoZW4gRmlyZWZveCBpcyBpbiBwcml2YXRlIG1vZGUgb3IgaGlzdG9yeSBuZXZlciByZW1lbWJlcmVkIChzZWUgTWFudGlzIElmcmVtZXIgIzU2NDQxKVxuICAgIGlmIChlcnIuY29kZSA9PT0gMTEgJiYgdGhpcy5jZGtQbGF0Zm9ybS5GSVJFRk9YKSB7XG4gICAgICBtZXNzYWdlID0gJ0VSUk9SLkZJUkVGT1hfTk9fU1RPUkFHRSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyYW5zbGF0ZSkge1xuICAgICAgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmluc3RhbnQobWVzc2FnZSk7XG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gYCB7Y29kZTogJHtlcnIuY29kZX19YDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSA9IGBGYXRhbCBlcnJvcjogUGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yLlxcblxcbntjb2RlOiAkeyhlcnIgJiYgZXJyLmNvZGUpIHx8ICdudWxsJ30sIG1lc3NhZ2U6IFwiJHttZXNzYWdlfVwifWA7XG4gICAgfVxuICAgIGlmICh0aGlzLnRvYXN0Q29udHJvbGxlcikge1xuICAgICAgaWYgKGRldGFpbHNNZXNzYWdlKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gYDxici8+PHNtYWxsPiR7ZGV0YWlsc01lc3NhZ2V9PC9zbWFsbD5gO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICBkdXJhdGlvbjogLTEsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAod2luZG93KSB7XG4gICAgICBpZiAoZGV0YWlsc01lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgXFxuXFxue2NhdXNlOiBcIiR7ZGV0YWlsc01lc3NhZ2V9XCJ9YDtcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5hbGVydChtZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgIGlmIChlcnIgJiYgZXJyLmRldGFpbHMpIGNvbnNvbGUuZXJyb3IoJ2NhdXNlJywgZXJyLmRldGFpbHMpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
626
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVU3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUYsT0FBTyxFQUFvQixNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUVuRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxPQUFPLEVBQStCLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDOUcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFD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QUFJLENBQUM7UUFDL0gsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3pCLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sSUFBSSxlQUFlLGNBQWMsVUFBVSxDQUFDO1lBQ3JELENBQUM7WUFDRCxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ25CLElBQUksRUFBRSxPQUFPO2dCQUNiLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ1osZUFBZSxFQUFFLElBQUk7Z0JBQ3JCLE9BQU87YUFDUixDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNsQixJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixPQUFPLElBQUksZ0JBQWdCLGNBQWMsSUFBSSxDQUFDO1lBQ2hELENBQUM7WUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hCLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2QixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTztnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUQsQ0FBQztJQUNILENBQUM7d0dBM25CVSxlQUFlLG1aQXlCaEIsV0FBVyxhQUNDLG1CQUFtQjs0R0ExQjlCLGVBQWUsY0FERixNQUFNOzs0RkFDbkIsZUFBZTtrQkFEM0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQTBCN0IsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUN0QyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGxhdGZvcm0sIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnLi9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0aFRva2VuVHlwZSB9IGZyb20gJy4vbmV0d29yay50eXBlcyc7XG5pbXBvcnQgeyBQbGF0Zm9ybXMgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4vbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBDYWNoZVNlcnZpY2UgfSBmcm9tICdpb25pYy1jYWNoZSc7XG5pbXBvcnQgeyBBdWRpb1Byb3ZpZGVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2F1ZGlvL2F1ZGlvJztcbmltcG9ydCB7IFBsYXRmb3JtIGFzIENka1BsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcblxuaW1wb3J0IHsgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCB0b0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IEVudGl0aWVzU3RvcmFnZSB9IGZyb20gJy4vc3RvcmFnZS9lbnRpdGllcy1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4vYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbSwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHNraXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVudmlyb25tZW50LCBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBDT1JFX0NPTkZJR19PUFRJT05TIH0gZnJvbSAnLi9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHsgTW9tZW50RGF0ZUFkYXB0ZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC1tb21lbnQtYWRhcHRlcic7XG5pbXBvcnQgeyBEb3dubG9hZGVyLCBEb3dubG9hZFJlcXVlc3QsIE5vdGlmaWNhdGlvblZpc2liaWxpdHkgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvZG93bmxvYWRlci9uZ3gnO1xuaW1wb3J0IHsgU3RhcnRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBpc01vYmlsZSwgaXNXaW5kb3dzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5pbXBvcnQgeyBWZXJzaW9uVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdmVyc2lvbi92ZXJzaW9ucyc7XG5pbXBvcnQgeyBGaWxlc1V0aWxzLCBNaW1lVHlwZXMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS9maWxlLnV0aWxzJztcbmltcG9ydCB7IFVyaVV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvdXJpLnV0aWxzJztcbmltcG9ydCB7IFNwbGFzaFNjcmVlbiB9IGZyb20gJ0BjYXBhY2l0b3Ivc3BsYXNoLXNjcmVlbic7XG5pbXBvcnQgeyBTdGF0dXNCYXIgfSBmcm9tICdAY2FwYWNpdG9yL3N0YXR1cy1iYXInO1xuaW1wb3J0IHsgQnJvd3NlciwgT3Blbk9wdGlvbnMgfSBmcm9tICdAY2FwYWNpdG9yL2Jyb3dzZXInO1xuaW1wb3J0IHsgS2V5Ym9hcmQgfSBmcm9tICdAY2FwYWNpdG9yL2tleWJvYXJkJztcbmltcG9ydCB7IENhcGFjaXRvclBsdWdpbnMgfSBmcm9tICcuLi8uLi9zaGFyZWQvY2FwYWNpdG9yL3BsdWdpbnMnO1xuaW1wb3J0IHsgbG9jYWxlIGFzIG1vbWVudExvY2FsZSB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBJTG9nZ2VyLCBJTG9nZ2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2luZy9sb2dnZXIubW9kZWwnO1xuaW1wb3J0IHsgQVBQX0xPR0dJTkdfU0VSVklDRSB9IGZyb20gJy4uLy4uL3NoYXJlZC9sb2dnaW5nL2xvZ2dpbmctc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBDbGlwYm9hcmQgYXMgQ2RrQ2xpcGJvYXJkIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NsaXBib2FyZCc7XG5pbXBvcnQgeyBDbGlwYm9hcmQgfSBmcm9tICdAY2FwYWNpdG9yL2NsaXBib2FyZCc7XG5pbXBvcnQgeyBXcml0ZU9wdGlvbnMgfSBmcm9tICdAY2FwYWNpdG9yL2NsaXBib2FyZC9kaXN0L2VzbS9kZWZpbml0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBBbmRyb2lkT3NFbnZpcm9ubWVudCA9IE9iamVjdC5mcmVlemUoe1xuICBESVJFQ1RPUllfRE9XTkxPQURTOiAnRG93bmxvYWQnLFxuICBESVJFQ1RPUllfRE9XTkxPQURTX09MRDogJ0Rvd25sb2FkcycsIC8vIE9sZCBuYW1lLCBmb3Igb2xkZXIgQW5kcm9pZCB2ZXJzaW9uXG4gIC8vIFRPRE86IGZpbmQgdmFsdWUgZm9yIHRoaXMuIFNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9vcy9FbnZpcm9ubWVudCNnZXRFeHRlcm5hbFN0b3JhZ2VTdGF0ZShqYXZhLmlvLkZpbGUpXG4gIC8vIERJUkVDVE9SWV9NVVNJQyxcbiAgLy8gRElSRUNUT1JZX1BPRENBU1RTLFxuICAvLyBESVJFQ1RPUllfUklOR1RPTkVTLFxuICAvLyBESVJFQ1RPUllfQUxBUk1TLFxuICAvLyBESVJFQ1RPUllfTk9USUZJQ0FUSU9OUyxcbiAgLy8gRElSRUNUT1JZX1BJQ1RVUkVTLFxuICAvLyBESVJFQ1RPUllfTU9WSUVTLFxuICAvLyBESVJFQ1RPUllfRENJTSxcbiAgLy8gRElSRUNUT1JZX0RPQ1VNRU5UUyxcbiAgLy8gRElSRUNUT1JZX0FVRElPQk9PS1MsXG59KTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybVNlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyO1xuICBwcml2YXRlIF9tb2JpbGU6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rlc2t0b3A6IGJvb2xlYW47XG4gIHByaXZhdGUgX2NvcmRvdmE6IGJvb2xlYW47XG4gIHByaXZhdGUgX2NhcGFjaXRvcjogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfYW5kcm9pZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfaW9zOiBib29sZWFuO1xuXG4gIGJ1c3lTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpb25pY1BsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIGNka1BsYXRmb3JtOiBDZGtQbGF0Zm9ybSxcbiAgICBwcml2YXRlIGNka0NsaXBib2FyZDogQ2RrQ2xpcGJvYXJkLFxuICAgIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogTW9tZW50RGF0ZUFkYXB0ZXIsXG4gICAgcHJpdmF0ZSBlbnRpdGllc1N0b3JhZ2U6IEVudGl0aWVzU3RvcmFnZSxcbiAgICBwcml2YXRlIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIG5ldHdvcmtTZXJ2aWNlOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcml2YXRlIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYWNoZTogQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXVkaW9Qcm92aWRlcjogQXVkaW9Qcm92aWRlcixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPR0dJTkdfU0VSVklDRSkgbG9nZ2luZ1NlcnZpY2U6IElMb2dnaW5nU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRvd25sb2FkZXI6IERvd25sb2FkZXJcbiAgKSB7XG4gICAgc3VwZXIoaW9uaWNQbGF0Zm9ybSk7XG5cbiAgICB0aGlzLl9sb2dnZXIgPSBsb2dnaW5nU2VydmljZT8uZ2V0TG9nZ2VyKCdwbGF0Zm9ybScpO1xuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIENyZWF0aW5nIHNlcnZpY2UnKTtcblxuICAgIGlmICh0aGlzLl9sb2dnZXIpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnY3RvcicsICdDcmVhdGluZyBzZXJ2aWNlJyk7XG4gICAgICBpb25pY1BsYXRmb3JtLnBhdXNlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdjdG9yJywgJ1BhdXNlIGFwcCcpO1xuICAgICAgfSk7XG4gICAgICBpb25pY1BsYXRmb3JtLnJlc3VtZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnY3RvcicsICdSZXN1bWUgYXBwJyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZG93bmxvYWRpbmdKb2JzOiBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPHN0cmluZz4+ID0gbmV3IE1hcCgpO1xuXG4gIHByaXZhdGUgY2hlY2tBcHBWZXJzaW9uVGltZXI6IFN1YnNjcmlwdGlvbjtcblxuICBpcyhwbGF0Zm9ybU5hbWU6IFBsYXRmb3Jtcyk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAocGxhdGZvcm1OYW1lKSB7XG4gICAgICBjYXNlICdtb2JpbGUnOlxuICAgICAgICAvLyBFeGNsdWRlIFdpbmRvd3MgdG91Y2ggc2NyZWVucyAtIHNlZSBzdW1hcmlzLWFwcCBpc3N1ZXMgIzMyMyBhbmQgIzM0NlxuICAgICAgICByZXR1cm4gaXNNb2JpbGUod2luZG93KTtcbiAgICAgIGNhc2UgJ21vYmlsZXdlYic6XG4gICAgICAgIC8vIEV4Y2x1ZGUgV2luZG93cyB0b3VjaCBzY3JlZW5zIC0gc2VlIHN1bWFyaXMtYXBwIGlzc3VlcyAjMzIzIGFuZCAjMzQ2XG4gICAgICAgIHJldHVybiB0aGlzLmlvbmljUGxhdGZvcm0uaXMocGxhdGZvcm1OYW1lKSAmJiAhaXNXaW5kb3dzKHdpbmRvdyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5pb25pY1BsYXRmb3JtLmlzKHBsYXRmb3JtTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG1vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fbW9iaWxlKSA/IHRoaXMuX21vYmlsZSA6IHRoaXMuaXMoJ21vYmlsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNheSBpZiBvcGVuZWQgaGFzIGJlZW4gb3BlbmVkIGluc2lkZSBhbiBBbmRyb2lkIG9yIGlPcyBBcHAuXG4gICAqIFRoaXMgaXMgdXNlZCB0byBrbm93biBpZiB0aGVyZSBpcyBjb3Jkb3ZhIGZlYXR1cmVzXG4gICAqL1xuICBpc0NhcGFjaXRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2FwYWNpdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFNheSBpZiBvcGVuZWQgaGFzIGJlZW4gb3BlbmVkIGluc2lkZSBhbiBBbmRyb2lkIG9yIGlPcyBBcHAuXG4gICAqIFRoaXMgaXMgdXNlZCB0byBrbm93biBpZiB0aGVyZSBpcyBjb3Jkb3ZhIGZlYXR1cmVzXG4gICAqL1xuICBpc0NvcmRvdmEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvcmRvdmE7XG4gIH1cblxuICBpc0FuZHJvaWRDb3Jkb3ZhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5fYW5kcm9pZCAmJiB0aGlzLl9jb3Jkb3ZhKSB8fCBmYWxzZTtcbiAgfVxuXG4gIGlzSU9TQ29yZG92YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuX2lvcyAmJiB0aGlzLl9jb3Jkb3ZhKSB8fCBmYWxzZTtcbiAgfVxuXG4gIGlzQW5kcm9pZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYW5kcm9pZCB8fCBmYWxzZTtcbiAgfVxuXG4gIGlzSU9TKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pb3MgfHwgZmFsc2U7XG4gIH1cblxuICBpc01hY09TRGVza3RvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGVza3RvcCAmJiB0aGlzLmlzQ29yZG92YSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIGEgbmF0aXZlIEFwcCAoYW5kIE5PVCBhIG1vYmlsZSB3ZWIpXG4gICAqL1xuICBpc0FwcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0FuZHJvaWRDb3Jkb3ZhKCkgfHwgdGhpcy5pc0lPU0NvcmRvdmEoKTtcbiAgfVxuXG4gIGlzV2ViKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc0FwcCgpO1xuICB9XG5cbiAgaXNNb2JpbGVXZWIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9iaWxlICYmIHRoaXMuaXNXZWIoKTtcbiAgfVxuXG4gIGdldCBjYW5Eb3dubG9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kb3dubG9hZGVyICYmIHRoaXMuaXNBbmRyb2lkQ29yZG92YSgpO1xuICB9XG5cbiAgZ2V0IGNhbk9wZW5GaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTsgLy8gVE9ETzogZml4bWUgdXNpbmcgQGNhcGFjaXRvci9maWxlc3lzdGVtID9cbiAgfVxuXG4gIHdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW9uaWNQbGF0Zm9ybS53aWR0aCgpO1xuICB9XG5cbiAgaGVpZ2h0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW9uaWNQbGF0Zm9ybS5oZWlnaHQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RhcnQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuYWNjb3VudFNlcnZpY2UudG9rZW5UeXBlID0gdW5kZWZpbmVkO1xuICAgIGNvbnNvbGUuZGVidWcoJ1twbGF0Zm9ybV0gU3RhcnRpbmcgcGxhdGZvcm0uLi4nKTtcbiAgICB0aGlzLl9sb2dnZXI/LmluZm8oJ25nT25TdGFydCcsICdTdGFydGluZyBwbGF0Zm9ybS4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX21vYmlsZSA9IHRoaXMuaXMoJ21vYmlsZScpO1xuICAgICAgdGhpcy5fZGVza3RvcCA9IHRoaXMuaXMoJ2Rlc2t0b3AnKTtcbiAgICAgIHRoaXMuX2NvcmRvdmEgPSB0aGlzLmlzKCdjb3Jkb3ZhJyk7XG4gICAgICB0aGlzLl9jYXBhY2l0b3IgPSB0aGlzLmlzKCdjYXBhY2l0b3InKTtcbiAgICAgIHRoaXMuX2FuZHJvaWQgPSB0aGlzLmlzKCdhbmRyb2lkJyk7XG4gICAgICB0aGlzLl9pb3MgPSB0aGlzLmlzKCdpb3MnKTtcblxuICAgICAgY29uc3QgbG9nTWVzc2FnZSA9IGBEZXRlY3RlZCB7bW9iaWxlOiAke3RoaXMuX21vYmlsZX0sIGRlc2t0b3A6ICR7dGhpcy5fZGVza3RvcH0sIGNvcmRvdmE6ICR7dGhpcy5fY29yZG92YX0sIGNhcGFjaXRvcjogJHt0aGlzLl9jYXBhY2l0b3J9LCBhbmRyb2lkOiAke3RoaXMuX2FuZHJvaWR9LCBpb3M6ICR7dGhpcy5faW9zfX1gO1xuICAgICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dICcgKyBsb2dNZXNzYWdlKTtcbiAgICAgIHRoaXMuX2xvZ2dlcj8uaW5mbygnbmdPblN0YXJ0JywgbG9nTWVzc2FnZSk7XG5cbiAgICAgIC8vIENvbmZpZ3VyZSB0aGVtZVxuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmVUaGVtZSh0aGlzLl9tb2JpbGUpO1xuXG4gICAgICAvLyBDb25maWd1cmUgQ2FwYWNpdG9yIHBsdWdpbnNcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJlQ2FwYWNpdG9yUGx1Z2lucygpO1xuXG4gICAgICAvLyBDb25maWd1cmUgdHJhbnNsYXRpb25cbiAgICAgIHRoaXMuY29uZmlndXJlVHJhbnNsYXRlKCk7XG5cbiAgICAgIC8vIENvbmZpZ3VyZSBjYWNoZVxuICAgICAgdGhpcy5jb25maWd1cmVDYWNoZSgpO1xuXG4gICAgICAvLyBTdGFydCByb290IHNlcnZpY2VzXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5lbnRpdGllc1N0b3JhZ2UucmVhZHkoKSwgdGhpcy5zZXR0aW5ncy5yZWFkeSgpLCB0aGlzLm5ldHdvcmtTZXJ2aWNlLnJlYWR5KCksIHRoaXMuYXVkaW9Qcm92aWRlci5yZWFkeSgpXSk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHdlYiBhcHAgaGFzIHVwZGF0ZSwgYW5kIHJlbG9hZCBwYWdlIGlmIG5lZWRcbiAgICAgIGlmICh0aGlzLmlzV2ViKCkgJiYgdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBWZXJzaW9uKHsgY2FuUmVsb2FkOiB0cnVlIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgY2FjaGUgY29uZmlndXJhdGlvbiB3aGVuIG5ldHdvcmsgY2hhbmdlZFxuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgICAgdGhpcy5uZXR3b3JrU2VydmljZS5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBza2lwKDEpIC8vIEFscmVhZHkgZG9uZSBvbmNlLCBzbyB3ZSBza2lwIHRoZSBmaXJzdCBldmVudFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCh0eXBlKSA9PiB0aGlzLmNvbmZpZ3VyZUNhY2hlKHR5cGUgIT09ICdub25lJykpXG4gICAgICApO1xuXG4gICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgIGBbcGxhdGZvcm1dIFN0YXJ0aW5nIHBsYXRmb3JtIFtPS10ge21vYmlsZTogJHt0aGlzLl9tb2JpbGV9LCBjYXBhY2l0b3I6ICR7dGhpcy5fY2FwYWNpdG9yfSwgd2ViOiAke3RoaXMuaXNXZWIoKX0sIGRvd25sb2FkZXI6ICR7dGhpcy5jYW5Eb3dubG9hZH19IGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2BcbiAgICAgICk7XG5cbiAgICAgIC8vIFBhc3MgYXV0aCB0b2tlblxuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5zdWJzY3JpYmUoKGNvbmZpZykgPT4ge1xuICAgICAgICAgIGlmICghY29uZmlnKSByZXR1cm47IC8vIFNraXBcblxuICAgICAgICAgIC8vIFVwZGF0ZSBhdXRoZW50aWNhdGlvbiB0eXBlXG4gICAgICAgICAgY29uc3QgdG9rZW5UeXBlOiBBdXRoVG9rZW5UeXBlID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQVVUSF9UT0tFTl9UWVBFKSBhcyBBdXRoVG9rZW5UeXBlO1xuICAgICAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsodG9rZW5UeXBlKSAmJiB0aGlzLmFjY291bnRTZXJ2aWNlLnRva2VuVHlwZSAhPT0gdG9rZW5UeXBlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gVXNpbmcgYXV0aCB0b2tlbiB0eXBlIHske3Rva2VuVHlwZX19YCk7XG4gICAgICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLnRva2VuVHlwZSA9IHRva2VuVHlwZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBFbmFibGUgYXV0aCBBUEkgdXNpbmcgdG9rZW5zXG4gICAgICAgICAgY29uc3QgYXV0aEFwaUVuYWJsZWQgPSBjb25maWcuZ2V0UHJvcGVydHlBc0Jvb2xlYW4oQ09SRV9DT05GSUdfT1BUSU9OUy5BVVRIX0FQSV9UT0tFTl9FTkFCTEVEKTtcbiAgICAgICAgICBpZiAoaXNOb3ROaWwoYXV0aEFwaUVuYWJsZWQpICYmIGF1dGhBcGlFbmFibGVkICE9PSB0aGlzLmFjY291bnRTZXJ2aWNlLmFwaVRva2VuRW5hYmxlZCkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIFVzaW5nIGF1dGggQVBJIHRva2VucyA/ICR7YXV0aEFwaUVuYWJsZWR9fWApO1xuICAgICAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5hcGlUb2tlbkVuYWJsZWQgPSBhdXRoQXBpRW5hYmxlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICAvLyBIaWRlIHRoZSBzcGxhc2hzY3JlZW4gKGlmIG1vYmlsZSBvciBtYWNPUykgLSBhZnRlciAxc1xuICAgICAgaWYgKHRoaXMuX21vYmlsZSB8fCB0aGlzLmlzTWFjT1NEZXNrdG9wKCkpIHtcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgU3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgICAgICAgIC8vIFBsYXkgc3RhcnR1cCBzb3VuZCAoaXMgbW9iaWxlKVxuICAgICAgICAgIGlmICh0aGlzLl9tb2JpbGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYXVkaW9Qcm92aWRlci5wbGF5U3RhcnR1cFNvdW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxMDAwKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgbmV3IHZlcnNpb24sIGV2ZXJ5IDEgbWluXG4gICAgICBjb25zdCBjaGVja0ludGVydmFsTXMgPSAodGhpcy5lbnZpcm9ubWVudC5jaGVja0FwcFZlcnNpb25JbnRlcnZhbEluU2Vjb25kcyB8fCAwKSAqIDEwMDA7XG4gICAgICBpZiAodGhpcy5pc1dlYigpICYmIHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbiAmJiBjaGVja0ludGVydmFsTXMgPiAwKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRpbWVyKGNoZWNrSW50ZXJ2YWxNcywgY2hlY2tJbnRlcnZhbE1zKS5zdWJzY3JpYmUoKF8pID0+XG4gICAgICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb24oeyBzaWxlbnQ6IHRydWUsIGNhblJlbG9hZDogZmFsc2UgLypkbyBOT1QgYXV0byByZWxvYWQsIHdoZW4gYXBwIGlzIHN0YXJ0ZWQqLyB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNoZWNrQXBwVmVyc2lvblRpbWVyID0gc3Vic2NyaXB0aW9uO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIHN1YnNjcmlwdGlvbi5hZGQoKCkgPT4gdGhpcy51bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gTWFuYWdlIHN0YXJ0dXAgZXJyb3JcbiAgICAgIHJldHVybiB0aGlzLm9uU3RhcnR1cEVycm9yKGVycik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc2hvdyBhIGJhY2tkcm9wIHdoZW4gcGxhdGZvcm0gaXMgYnVzeSAoZS5nLiBmcm9tIHRoZSBhcHAuY29tcG9uZW50LnRzKVxuICAgKi9cbiAgbWFya0FzQnVzeSgpIHtcbiAgICBpZiAoIXRoaXMuYnVzeVN1YmplY3QudmFsdWUpIHtcbiAgICAgIHRoaXMuYnVzeVN1YmplY3QubmV4dCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNOb3RCdXN5KCkge1xuICAgIGlmICh0aGlzLmJ1c3lTdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLmJ1c3lTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW4odXJsOiBzdHJpbmcsIG9wdHM/OiBPbWl0PE9wZW5PcHRpb25zLCAndXJsJz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gT3BlbmluZyBsaW5rOiAke3VybH1gKTtcbiAgICBpZiAodGhpcy5fbW9iaWxlICYmIHRoaXMuX2NhcGFjaXRvcikge1xuICAgICAgYXdhaXQgQnJvd3Nlci5vcGVuKHsgdXJsLCAuLi5vcHRzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cub3Blbih1cmwsIG9wdHM/LndpbmRvd05hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldERvd25sb2FkaW5nSm9iKHVyaTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxvYWRpbmdKb2JzLmdldCh1cmkpO1xuICB9XG5cbiAgZG93bmxvYWQocmVxdWVzdDogeyB1cmk6IHN0cmluZzsgZmlsZW5hbWU/OiBzdHJpbmcgfSAmIFBhcnRpYWw8RG93bmxvYWRSZXF1ZXN0Pik6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCFyZXF1ZXN0IHx8ICFyZXF1ZXN0LnVyaSkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBhcmd1bWVudCAncmVxdWVzdCcgb3IgJ3JlcXVlc3QudXJpJ1wiKTtcblxuICAgIGlmICh0aGlzLmNhbkRvd25sb2FkKSB7XG4gICAgICAvLyBDaGVjayBpZiBub3QgYWxyZWFkeSBkb3dubG9hZGluZyBmaWxlXG4gICAgICBsZXQgam9iJCA9IHRoaXMuX2Rvd25sb2FkaW5nSm9icy5nZXQocmVxdWVzdC51cmkpO1xuICAgICAgaWYgKGpvYiQpIHJldHVybiBqb2IkO1xuXG4gICAgICAvLyBDb21wdXRlIHN1YlBhdGggKGZpbmFsIGZpbGVuYW1lKVxuICAgICAgbGV0IHN1YlBhdGggPVxuICAgICAgICByZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbFB1YmxpY0Rpcj8uc3ViUGF0aCB8fFxuICAgICAgICByZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyPy5zdWJQYXRoIHx8XG4gICAgICAgIHJlcXVlc3QuZmlsZW5hbWUgfHxcbiAgICAgICAgVXJpVXRpbHMuZ2V0RmlsZW5hbWUocmVxdWVzdC51cmkpIHx8XG4gICAgICAgIHJlcXVlc3QudGl0bGUgfHxcbiAgICAgICAgJ2Rvd25sb2FkJztcblxuICAgICAgc3ViUGF0aCA9IHN1YlBhdGhcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLy8gUmVtb3ZlIHNwYWNlc1xuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnLScpO1xuXG4gICAgICAvLyBGb3JjZSBBUEsgdG8gZmluaXNoIHdpdGggJy5hcGsnXG4gICAgICBpZiAocmVxdWVzdC5taW1lVHlwZSA9PT0gTWltZVR5cGVzLkFORFJPSURfQVBLICYmICFzdWJQYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5hcGsnKSkge1xuICAgICAgICBzdWJQYXRoICs9ICcuYXBrJztcbiAgICAgIH1cblxuICAgICAgY29uc3QgZG93bmxvYWRSZXF1ZXN0ID0gPERvd25sb2FkUmVxdWVzdD57XG4gICAgICAgIHZpc2libGVJbkRvd25sb2Fkc1VpOiB0cnVlLFxuICAgICAgICBub3RpZmljYXRpb25WaXNpYmlsaXR5OiBOb3RpZmljYXRpb25WaXNpYmlsaXR5LlZpc2libGVOb3RpZnlDb21wbGV0ZWQsXG4gICAgICAgIC4uLnJlcXVlc3QsXG4gICAgICAgIGZpbGVuYW1lOiB1bmRlZmluZWQsIC8vIEZvcmNlIHVuc2V0XG4gICAgICAgIGRlc3RpbmF0aW9uSW5FeHRlcm5hbFB1YmxpY0RpcjogIXJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXJcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgZGlyVHlwZTogQW5kcm9pZE9zRW52aXJvbm1lbnQuRElSRUNUT1JZX0RPV05MT0FEUyxcbiAgICAgICAgICAgICAgLi4ucmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxQdWJsaWNEaXIsXG4gICAgICAgICAgICAgIHN1YlBhdGgsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyOiByZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGRpclR5cGU6IEFuZHJvaWRPc0Vudmlyb25tZW50LkRJUkVDVE9SWV9ET1dOTE9BRFMsXG4gICAgICAgICAgICAgIC4uLnJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXIsXG4gICAgICAgICAgICAgIHN1YlBhdGgsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICAvLyBTdGFydCBkb3dubG9hZFxuICAgICAgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBEb3dubG9hZGluZywgdXNpbmcgcmVxdWVzdDogJyArIEpTT04uc3RyaW5naWZ5KGRvd25sb2FkUmVxdWVzdCkpO1xuICAgICAgam9iJCA9IGZyb20odGhpcy5kb3dubG9hZGVyLmRvd25sb2FkKGRvd25sb2FkUmVxdWVzdCkpO1xuXG4gICAgICAvLyBSZW1lbWJlciB0aGlzIHJlcXVlc3QgdXJpXG4gICAgICB0aGlzLl9kb3dubG9hZGluZ0pvYnMuc2V0KGRvd25sb2FkUmVxdWVzdC51cmksIGpvYiQpO1xuICAgICAgcmV0dXJuIGpvYiQucGlwZShcbiAgICAgICAgdGFwKChsb2NhdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBGaWxlIHN1Y2Nlc3NmdWxseSBkb3dubG9hZGVkIGF0OicgKyBsb2NhdGlvbik7XG4gICAgICAgICAgLy8gRm9yZ2V0IGpvYlxuICAgICAgICAgIHRoaXMuX2Rvd25sb2FkaW5nSm9icy5kZWxldGUoZG93bmxvYWRSZXF1ZXN0LnVyaSk7XG4gICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBVbmFibGUgdG8gZG93bmxvYWQ6ICcgKyAoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKSk7XG4gICAgICAgICAgLy8gRm9yZ2V0IHRoZSByZXF1ZXN0XG4gICAgICAgICAgdGhpcy5fZG93bmxvYWRpbmdKb2JzLmRlbGV0ZShkb3dubG9hZFJlcXVlc3QudXJpKTtcblxuICAgICAgICAgIC8vIFJldHJ5IHdpdGggYW5vdGhlciBsb2NhdGlvbiAtIGlzc3VlIGluIG9sZGVyIEFuZHJvaWQgdmVyc2lvblxuICAgICAgICAgIGlmIChkb3dubG9hZFJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsUHVibGljRGlyPy5kaXJUeXBlID09PSBBbmRyb2lkT3NFbnZpcm9ubWVudC5ESVJFQ1RPUllfRE9XTkxPQURTKSB7XG4gICAgICAgICAgICBkb3dubG9hZFJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsUHVibGljRGlyLmRpclR5cGUgPSBBbmRyb2lkT3NFbnZpcm9ubWVudC5ESVJFQ1RPUllfRE9XTkxPQURTX09MRDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvd25sb2FkKGRvd25sb2FkUmVxdWVzdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgKGlmIG5vdCBBbmRyb2lkIGFuZCBDYXBhY2l0b3IpOiBvcGVuaW5nIHRoZSBVUklcbiAgICAvLyBUT0RPOiBmaW5kIGEgd2F5IHRvIGRvd25sb2FkIHVuZGVyIGlPUyAoc2VlIGh0dHBzOi8vd3d3LmMtc2hhcnBjb3JuZXIuY29tL2FydGljbGUvaG93LXRvLWRvd25sb2FkLWEtZmlsZS11c2luZy1maWxlLXRyYW5zZmVyLXBsdWdpbi1pbi1pb25pYy0zLylcbiAgICBlbHNlIHtcbiAgICAgIEZpbGVzVXRpbHMuZG93bmxvYWRVcmkocmVxdWVzdC51cmksIHJlcXVlc3QuZmlsZW5hbWUpO1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY29weVRvQ2xpcGJvYXJkKGRhdGE6IHN0cmluZyB8IFdyaXRlT3B0aW9ucywgb3B0cz86IFNob3dUb2FzdE9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IGRhdGEgOiBkYXRhLnN0cmluZztcbiAgICBsZXQgY29waWVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5pc0FuZHJvaWRDb3Jkb3ZhKCkpIHtcbiAgICAgIGNvbnN0IHdyaXRlT3B0aW9ucyA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IHsgc3RyaW5nOiB2YWx1ZSB9IDogZGF0YTtcbiAgICAgIGF3YWl0IENsaXBib2FyZC53cml0ZSh3cml0ZU9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb3BpZWQgPSB0aGlzLmNka0NsaXBib2FyZC5jb3B5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoY29waWVkKSB7XG4gICAgICAvLyBTaG93IHRvYXN0XG4gICAgICBpZiAob3B0cyAmJiBpc05vdE5pbE9yQmxhbmsob3B0cy5tZXNzYWdlKSkge1xuICAgICAgICBhd2FpdCBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1twbGF0Zm9ybV0gVW5hYmxlIHRvIGNvcHkgdG8gY2xpcGJvYXJkOiAnICsgZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRGFya1RoZW1lKGVuYWJsZTogYm9vbGVhbikge1xuICAgIGNvbnN0IHdhc0VuYWJsZWQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkYXJrJyk7XG4gICAgaWYgKGVuYWJsZSAhPT0gd2FzRW5hYmxlZCkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW3BsYXRmb3JtXSAke2VuYWJsZSA/ICdFbmFibGUnIDogJ0Rpc2FibGUnfSBkYXJrIG1vZGUuLi5gKTtcbiAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCdkYXJrJywgZW5hYmxlKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVIaWdoQ29udHJhc3QoZW5hYmxlOiBib29sZWFuKSB7XG4gICAgaWYgKGVuYWJsZSAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnaGlnaC1jb250cmFzdCcpKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIEVuYWJsZSBoaWdoIGNvbnRyYXN0Li4uJyk7XG4gICAgfVxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCdoaWdoLWNvbnRyYXN0JywgZW5hYmxlKTtcbiAgfVxuXG4gIHNob3dUb2FzdChvcHRzOiBTaG93VG9hc3RPcHRpb25zKTogUHJvbWlzZTxIVE1MSW9uVG9hc3RFbGVtZW50PiB7XG4gICAgaWYgKCF0aGlzLnRvYXN0Q29udHJvbGxlcikgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB0b2FzdENvbnRyb2xsZXIgaW4gY29tcG9uZW50J3MgY29uc3RydWN0b3JcIik7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PlxuICAgICAgVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIG9uV2lsbFByZXNlbnQ6ICh0KSA9PiByZXNvbHZlKHQpLFxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgY2xvc2VUb2FzdChpZD86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnRvYXN0Q29udHJvbGxlcj8uZGlzbWlzcyhudWxsLCBudWxsLCBpZCk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBhc3luYyBjb25maWd1cmVUaGVtZShtb2JpbGU6IGJvb2xlYW4sIHdpbjogYW55ID0gd2luZG93KSB7XG4gICAgLy8gTGlzdGVuIGZvciBjaGFuZ2VzIHRvIHNldHRpbmdzIGRhcmsgbW9kZVxuICAgIGlmICh0aGlzLmVudmlyb25tZW50LmFsbG93RGFya01vZGUpIHtcbiAgICAgIGNvbnN0IGlzU2NyZWVuJCA9IG5ldyBPYnNlcnZhYmxlPGJvb2xlYW4+KChvYnNlcnZlcikgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaE1lZGlhID0gd2luLm1hdGNoTWVkaWEoJ3NjcmVlbicpO1xuICAgICAgICBtYXRjaE1lZGlhLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiBvYnNlcnZlci5uZXh0KGUubWF0Y2hlcykpO1xuICAgICAgICBvYnNlcnZlci5uZXh0KG1hdGNoTWVkaWEubWF0Y2hlcyk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW2lzU2NyZWVuJCwgdGhpcy5zZXR0aW5ncy5kYXJrTW9kZSRdKS5zdWJzY3JpYmUoKFtpc1NjcmVlbiwgZW5hYmxlXSkgPT4gdGhpcy50b2dnbGVEYXJrVGhlbWUoaXNTY3JlZW4gJiYgZW5hYmxlKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gV29ya2Fyb3VuZCwgZm9yIE1TIFdpbmRvd3MgdG91Y2ggc2NyZWVuIChkZXRlY3RlZCBhcyBtb2JpbGUsIGJ1dCBmb3JjZWQgYXMgZGVza3RvcClcbiAgICBpZiAoXG4gICAgICAhbW9iaWxlICYmXG4gICAgICAod2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudD8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwbHQtbW9iaWxlJykgfHwgd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3Q/LmNvbnRhaW5zKCdwbHQtbW9iaWxld2ViJykpXG4gICAgKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1twbGF0Zm9ybV0gRm9yY2UgY2xhc3MgbGlzdCB0bzogPGh0bWwgY2xhc3M9XCJwbHQtZGVza3RvcFwiPi4gV29ya2Fyb3VuZCBmb3IgV2luZG93cyB0b3VjaCBzY3JlZW4uJyk7XG4gICAgICB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ3BsdC1tb2JpbGUnLCAncGx0LW1vYmlsZXdlYicpO1xuICAgICAgd2luLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKCdwbHQtZGVza3RvcCcpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjb25maWd1cmVDYXBhY2l0b3JQbHVnaW5zKCkge1xuICAgIGlmICghdGhpcy5fY2FwYWNpdG9yKSByZXR1cm47IC8vIFNraXBcblxuICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBDb25maWd1cmluZyBDYXBhY2l0b3IgcGx1Z2lucy4uLicpO1xuXG4gICAgbGV0IHBsdWdpbk5hbWU6IHN0cmluZztcbiAgICB0cnkge1xuICAgICAgcGx1Z2luTmFtZSA9IENhcGFjaXRvclBsdWdpbnMuU3RhdHVzQmFyO1xuICAgICAgaWYgKHRoaXMuaXNBcHAoKSAmJiB0aGlzLmlzQW5kcm9pZCgpKSB7XG4gICAgICAgIGF3YWl0IFN0YXR1c0Jhci5zZXRPdmVybGF5c1dlYlZpZXcoeyBvdmVybGF5OiBmYWxzZSB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gSGlkZSBhY2Nlc3NvcnkgYmFyIChpT1Mgb25seSlcbiAgICAgIGlmICh0aGlzLmlzQXBwKCkgJiYgdGhpcy5pc0lPUygpKSB7XG4gICAgICAgIHBsdWdpbk5hbWUgPSBDYXBhY2l0b3JQbHVnaW5zLktleWJvYXJkO1xuICAgICAgICBhd2FpdCBLZXlib2FyZC5zZXRBY2Nlc3NvcnlCYXJWaXNpYmxlKHsgaXNWaXNpYmxlOiBmYWxzZSB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IGxvZ01lc3NhZ2UgPSBgRXJyb3Igd2hpbGUgY29uZmlndXJpbmcgJHtwbHVnaW5OYW1lfSBwbHVnaW46ICR7ZXJyLm1lc3NhZ2UgfHwgZXJyfVxcbiR7ZXJyPy5vcmlnaW5hbFN0YWNrIHx8IEpTT04uc3RyaW5naWZ5KGVycil9YDtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1twbGF0Zm9ybV0gJyArIGxvZ01lc3NhZ2UpO1xuICAgICAgdGhpcy5fbG9nZ2VyPy5lcnJvcignY29uZmlndXJlQ2FwYWNpdG9yUGx1Z2lucycsIGxvZ01lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjb25maWd1cmVUcmFuc2xhdGUoKSB7XG4gICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIGkxOG4gLi4uJyk7XG5cbiAgICAvLyB0aGlzIGxhbmd1YWdlIHdpbGwgYmUgdXNlZCBhcyBhIGZhbGxiYWNrIHdoZW4gYSB0cmFuc2xhdGlvbiBpc24ndCBmb3VuZCBpbiB0aGUgY3VycmVudCBsYW5ndWFnZVxuICAgIHRoaXMudHJhbnNsYXRlLnNldERlZmF1bHRMYW5nKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSk7XG4gICAgLy8gYXBwbHkgbG9jYWxlIGltbWVkaWF0ZWx5XG4gICAgdGhpcy5hcHBseUxvY2FsZSh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRMb2NhbGUpO1xuXG4gICAgLy8gV2hlbiBsb2NhbGUgY2hhbmdlcywgYXBwbHkgdG8gZGF0ZSBhZGFwdGVyXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudCAmJiBldmVudC5sYW5nKSB7XG4gICAgICAgICAgdGhpcy5hcHBseUxvY2FsZShldmVudC5sYW5nKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgIHRoaXMuc2V0dGluZ3Mub25DaGFuZ2Uuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgLy8gQXBwbHkgbG9jYWxlXG4gICAgICAgICAgaWYgKGRhdGEubG9jYWxlKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS5sb2NhbGUgIT09IHRoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nKSB7XG4gICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShkYXRhLmxvY2FsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFwcGx5aW5nIGRlZmF1bHQsIHdoZW4gc2V0dGluZ3MgaGFzIG5vIGxvY2FsZSBwcm9wZXJ0eSAoaG90Zml4IC0gbHVkb3ZpYy5wZWNxdW90QGUtaXMucHJvIC0gMTQvMTEvMjAyMSAtIHNpbmNlIHYxLjIwLjQyKVxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbcGxhdGZvcm1dIE5vIGxvY2FsZSBmb3VuZCBpbiBzZXR0aW5nczogYXBwbHlpbmcgZGVmYXVsdExvY2FsZTogJywgdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0TG9jYWxlKTtcbiAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLnVzZSh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRMb2NhbGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gVXNlIGFjY291bnQncyBzZXR0aW5ncywgKGxpa2UgbG9jYWxlKSwgd2hlbiBhY2NvdW50IGluaGVyaXRhbmNlIGVuYWJsZWRcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5vbkxvZ2luLnN1YnNjcmliZShhc3luYyAoYWNjb3VudCkgPT4ge1xuICAgICAgICBpZiAoYWNjb3VudC5zZXR0aW5ncyAmJiB0aGlzLnNldHRpbmdzLnNldHRpbmdzLmFjY291bnRJbmhlcml0YW5jZSkge1xuICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ1twbGF0Zm9ybV0gQ29weWluZyBhY2NvdW50IHNldHRpbmdzIGludG8gbG9jYWwgc2V0dGluZ3MuLi4nKTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnNldHRpbmdzLmFwcGx5KGFjY291bnQuc2V0dGluZ3MuYXNMb2NhbFNldHRpbmdzKCkpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBwbHlMb2NhbGUobG9jYWxlOiBzdHJpbmcpIHtcbiAgICAvLyBmb3JjZSAnZW4nIGFzICdlbl9HQidcbiAgICBpZiAobG9jYWxlID09PSAnZW4nKSB7XG4gICAgICBsb2NhbGUgPSAnZW5fR0InO1xuICAgIH1cblxuICAgIC8vIGNvbmZpZyBtb21lbnQgbGliXG4gICAgdHJ5IHtcbiAgICAgIG1vbWVudExvY2FsZShsb2NhbGUpO1xuICAgICAgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBVc2UgbG9jYWxlIHsnICsgbG9jYWxlICsgJ30nKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIElmIGVycm9yLCBmYWxsYmFjayB0byBlblxuICAgICAgbW9tZW50TG9jYWxlKCdlbicpO1xuICAgICAgY29uc29sZS53YXJuKCdbcGxhdGZvcm1dIFVua25vd24gbG9jYWxlIGZvciBtb21lbnQgbGliLiBVc2luZyBkZWZhdWx0IFtlbl0nKTtcbiAgICB9XG5cbiAgICAvLyBDb25maWcgZGF0ZSBhZGFwdGVyXG4gICAgdGhpcy5kYXRlQWRhcHRlci5zZXRMb2NhbGUobW9tZW50TG9jYWxlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbmZpZ3VyZUNhY2hlKG9ubGluZT86IGJvb2xlYW4pIHtcbiAgICBvbmxpbmUgPSB0b0Jvb2xlYW4ob25saW5lLCB0aGlzLmNhY2hlLmlzT25saW5lKCkpO1xuICAgIGNvbnN0IGNhY2hlVFRMID0gb25saW5lID8gMzYwMCAvKiAxaCAqLyA6IDM2MDAgKiAyNCAqIDMwOyAvKiAxIG1vbnRoICovXG4gICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIGNhY2hlIFtPS10ge29ubGluZTogJHtvbmxpbmV9LCB0aW1lVG9MaXZlOiAke2NhY2hlVFRMIC8gMzYwMH1oLCBvZmZsaW5lSW52YWxpZGF0ZTogZmFsc2V9YCk7XG4gICAgdGhpcy5jYWNoZS5zZXREZWZhdWx0VFRMKGNhY2hlVFRMKTtcbiAgICB0aGlzLmNhY2hlLnNldE9mZmxpbmVJbnZhbGlkYXRlKGZhbHNlKTsgLy8gRG8gbm90IGludmFsaWRhdGUgY2FjaGUgd2hlbiBvZmZsaW5lXG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY2hlY2tBcHBWZXJzaW9uKG9wdHM/OiB7IGNhblJlbG9hZD86IGJvb2xlYW47IHNpbGVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICh0aGlzLm5ldHdvcmtTZXJ2aWNlLm9mZmxpbmUgfHwgIXRoaXMuaXNXZWIoKSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBjb25zdCBzaWxlbnQgPSBvcHRzPy5zaWxlbnQgPT09IHRydWU7XG4gICAgY29uc3QgcHJvZHVjdGlvbiA9IHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbjtcbiAgICBjb25zdCBjYW5BdXRvUmVsb2FkID0gIW9wdHMgfHwgb3B0cy5jYW5SZWxvYWQgIT09IGZhbHNlO1xuXG4gICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBDaGVja2luZyByZW1vdGUgYXBwIHZlcnNpb24uLi4nKTtcblxuICAgIGNvbnN0IGFjdHVhbFZlcnNpb24gPSB0aGlzLmVudmlyb25tZW50LnZlcnNpb247XG4gICAgaWYgKGlzTmlsT3JCbGFuayhhY3R1YWxWZXJzaW9uKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcIltwbGF0Zm9ybV0gTWlzc2luZyByZXF1aXJlZCB2YWx1ZSBmb3IgJ2Vudmlyb25tZW50LnZlcnNpb24nLiBDYW5ub3QgY2hlY2sgcmVtb3RlIGFwcCB2ZXJzaW9uLlwiKTtcbiAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXI/LnVuc3Vic2NyaWJlKCk7IC8vIFN0b3AgdGltZXIgaWYgZXhpc3RzXG4gICAgICByZXR1cm47IC8vIFNraXBcbiAgICB9XG5cbiAgICBjb25zdCByZW1vdGVWZXJzaW9uID0gYXdhaXQgdGhpcy5uZXR3b3JrU2VydmljZS5nZXRBcHBWZXJzaW9uKCk7XG4gICAgaWYgKGlzTmlsT3JCbGFuayhyZW1vdGVWZXJzaW9uKSkge1xuICAgICAgaWYgKHByb2R1Y3Rpb24gJiYgIXNpbGVudCkgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBDYW5ub3QgbG9hZCByZW1vdGUgYXBwIHZlcnNpb24uIFNraXBwaW5nIHZlcnNpb24gY2hlY2snKTtcbiAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXI/LnVuc3Vic2NyaWJlKCk7IC8vIFN0b3AgdGltZXIgaWYgZXhpc3RzXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFZlcnNpb25VdGlscy5pc0NvbXBhdGlibGUocmVtb3RlVmVyc2lvbiwgYWN0dWFsVmVyc2lvbikpIHtcbiAgICAgIGlmICghc2lsZW50KSBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gQ2hlY2tpbmcgcmVtb3RlIGFwcCB2ZXJzaW9uIFtPS10ge3JlbW90ZTogJyR7cmVtb3RlVmVyc2lvbn0nLCBhY3R1YWw6ICcke2FjdHVhbFZlcnNpb259J31gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBuZXdlciB2ZXJzaW9uIGV4aXN0c1xuICAgIGxldCByZWxvYWRQYXRoID0gbG9jYXRpb24uaHJlZi5yZXBsYWNlKC9bJj9ddmVyc2lvbj1bXiZdKi9naSwgJycpOyAvLyBSZW1vdmUgb2xkIHZlcnNpb24gaW4gcXVlcnkgcGFyYW1zXG4gICAgcmVsb2FkUGF0aCArPSByZWxvYWRQYXRoLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJic7IC8vIEFkZCBxdWVyeSBwYXJhbSBzZXBhcmF0b3JcbiAgICByZWxvYWRQYXRoICs9ICd2ZXJzaW9uPScgKyByZW1vdGVWZXJzaW9uOyAvLyBBZGQgdmVyc2lvbiAodG8gYXZvaWQgYSByZWxvYWQgaW5maW5pdGUgbG9vcClcblxuICAgIC8vIEFscmVhZHkgdHJ5IHRvIHJlbG9hZCwgYnV0IHZlcnNpb24gc3RpbGwgYmFkXG4gICAgaWYgKHJlbG9hZFBhdGggPT09IGxvY2F0aW9uLmhyZWYpIHtcbiAgICAgIGlmIChjYW5BdXRvUmVsb2FkKVxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIGBbcGxhdGZvcm1dIFJlbG9hZGVkIHBhZ2UgZmFpbGVkLCBiZWNhdXNlIHZlcnNpb24gc3RpbGwgbWlzbWF0Y2ghIFBsZWFzZSBjaGVjayB2ZXJzaW9uLmFwcHVwIGZpbGUgKGV4cGVjdGVkIGFwcCB2ZXJzaW9uOiAke2FjdHVhbFZlcnNpb259KWBcbiAgICAgICAgKTtcbiAgICAgIC8vIFN0b3AgdGltZXIsIHRvIGF2b2lkIGluZmluaXRlIGxvb3BcbiAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS53YXJuKGBbcGxhdGZvcm1dIE1vcmUgcmVjZW50IHZlcnNpb24gZGV0ZWN0ZWQgKHJlbW90ZTogJHtyZW1vdGVWZXJzaW9ufSwgYWN0dWFsOiAke2FjdHVhbFZlcnNpb259YCk7XG5cbiAgICAvLyBBdXRvIHJlbG9hZFxuICAgIGlmIChjYW5BdXRvUmVsb2FkKSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gV2lsbCByZWxvYWRpbmcgYXQgJyArIHJlbG9hZFBhdGgpO1xuICAgICAgbG9jYXRpb24uaHJlZiA9IHJlbG9hZFBhdGg7XG4gICAgICAvLyBBcHAgc3RvcFxuICAgIH1cbiAgICAvLyBBc2sgdXNlciB0byByZWxvYWRcbiAgICBlbHNlIHtcbiAgICAgIC8vIFN0b3AgdGltZXIsIHRvIGF2b2lkIGluZmluaXRlIGxvb3BcbiAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXI/LnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgIC8vIERpc3BsYXkgYSByZWxvYWQgdG9hc3RcbiAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgICAgbWVzc2FnZTogJ0NPTkZJUk0uUkVMT0FEX0FQUCcsXG4gICAgICAgIG1lc3NhZ2VQYXJhbXM6IHsgdmVyc2lvbjogcmVtb3RlVmVyc2lvbiwgbmFtZTogdGhpcy5lbnZpcm9ubWVudC5uYW1lIH0sXG4gICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgZHVyYXRpb246IC0xLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICAvLyBSZWxvYWQgYnV0dG9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnQ09NTU9OLkJUTl9VUERBVEUnKSxcbiAgICAgICAgICAgIHNpZGU6ICdlbmQnLFxuICAgICAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gcmVsb2FkUGF0aDtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb25TdGFydHVwRXJyb3IoZXJyKSB7XG4gICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBGYWlsZWQgc3RhcnRpbmcgdGhlIHBsYXRmb3JtISAnICsgSlNPTi5zdHJpbmdpZnkoZXJyKSk7XG4gICAgbGV0IG1lc3NhZ2UgPSAoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnI7XG4gICAgY29uc3QgZGV0YWlsc01lc3NhZ2UgPSBlcnIgJiYgKChlcnIuZGV0YWlscyAmJiBlcnIuZGV0YWlscy5tZXNzYWdlKSB8fCBlcnIuZGV0YWlscyk7XG4gICAgLy8gU2V0IHNwZWNpZmljIGVycm9yIHdoZW4gRmlyZWZveCBpcyBpbiBwcml2YXRlIG1vZGUgb3IgaGlzdG9yeSBuZXZlciByZW1lbWJlcmVkIChzZWUgTWFudGlzIElmcmVtZXIgIzU2NDQxKVxuICAgIGlmIChlcnIuY29kZSA9PT0gMTEgJiYgdGhpcy5jZGtQbGF0Zm9ybS5GSVJFRk9YKSB7XG4gICAgICBtZXNzYWdlID0gJ0VSUk9SLkZJUkVGT1hfTk9fU1RPUkFHRSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnRyYW5zbGF0ZSkge1xuICAgICAgbWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmluc3RhbnQobWVzc2FnZSk7XG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gYCB7Y29kZTogJHtlcnIuY29kZX19YDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbWVzc2FnZSA9IGBGYXRhbCBlcnJvcjogUGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yLlxcblxcbntjb2RlOiAkeyhlcnIgJiYgZXJyLmNvZGUpIHx8ICdudWxsJ30sIG1lc3NhZ2U6IFwiJHttZXNzYWdlfVwifWA7XG4gICAgfVxuICAgIGlmICh0aGlzLnRvYXN0Q29udHJvbGxlcikge1xuICAgICAgaWYgKGRldGFpbHNNZXNzYWdlKSB7XG4gICAgICAgIG1lc3NhZ2UgKz0gYDxici8+PHNtYWxsPiR7ZGV0YWlsc01lc3NhZ2V9PC9zbWFsbD5gO1xuICAgICAgfVxuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICBkdXJhdGlvbjogLTEsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAod2luZG93KSB7XG4gICAgICBpZiAoZGV0YWlsc01lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgXFxuXFxue2NhdXNlOiBcIiR7ZGV0YWlsc01lc3NhZ2V9XCJ9YDtcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5hbGVydChtZXNzYWdlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgIGlmIChlcnIgJiYgZXJyLmRldGFpbHMpIGNvbnNvbGUuZXJyb3IoJ2NhdXNlJywgZXJyLmRldGFpbHMpO1xuICAgIH1cbiAgfVxufVxuIl19
|