@experteam-mx/ngx-services 18.8.14 → 18.8.16
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/README.md +24 -24
- package/esm2022/lib/apis/api-billing-do.service.mjs +1 -1
- package/esm2022/lib/apis/api-billing-gt.service.mjs +1 -1
- package/esm2022/lib/apis/api-billing-mx.service.mjs +1 -1
- package/esm2022/lib/apis/api-billing-pa.service.mjs +1 -1
- package/esm2022/lib/apis/api-billing-sv.service.mjs +1 -1
- package/esm2022/lib/apis/api-cash-operations.service.mjs +1 -1
- package/esm2022/lib/apis/api-catalogs.service.mjs +1 -1
- package/esm2022/lib/apis/api-companies.service.mjs +1 -1
- package/esm2022/lib/apis/api-composition.service.mjs +1 -1
- package/esm2022/lib/apis/api-customs.service.mjs +1 -1
- package/esm2022/lib/apis/api-discounts.service.mjs +1 -1
- package/esm2022/lib/apis/api-e-tools-auto-billing.service.mjs +1 -1
- package/esm2022/lib/apis/api-events.service.mjs +1 -1
- package/esm2022/lib/apis/api-external-pickups.service.mjs +1 -1
- package/esm2022/lib/apis/api-inventories.service.mjs +1 -1
- package/esm2022/lib/apis/api-invoices.service.mjs +1 -1
- package/esm2022/lib/apis/api-notifications.service.mjs +1 -1
- package/esm2022/lib/apis/api-open-items.service.mjs +1 -1
- package/esm2022/lib/apis/api-reports.service.mjs +1 -1
- package/esm2022/lib/apis/api-security.service.mjs +1 -1
- package/esm2022/lib/apis/api-services.service.mjs +1 -1
- package/esm2022/lib/apis/api-shipments.service.mjs +1 -1
- package/esm2022/lib/apis/api-supplies.service.mjs +1 -1
- package/esm2022/lib/apis/models/api-billing-do.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-billing-do.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-billing-mx.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-billing-mx.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-billing-pa.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-billing-pa.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-billing-sv.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-billing-sv.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-billing.models.mjs +1 -1
- package/esm2022/lib/apis/models/api-cash-operations.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-cash-operations.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-catalog.enum.mjs +1 -1
- package/esm2022/lib/apis/models/api-catalog.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-catalog.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-companies.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-companies.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-composition.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-composition.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-customs.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-customs.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-discounts.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-discounts.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-e-tools-auto-billing.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-e-tools-auto-billing.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-events.enum.mjs +1 -1
- package/esm2022/lib/apis/models/api-events.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-events.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-external-pickups.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-inventories.enum.mjs +1 -1
- package/esm2022/lib/apis/models/api-inventories.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-inventories.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-invoices.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-invoices.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-notifications.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-notifications.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-open-items.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-open-items.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-reports.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-reports.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-security.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-security.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-services.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-services.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-shipments.enums.mjs +1 -1
- package/esm2022/lib/apis/models/api-shipments.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-shipments.types.mjs +1 -1
- package/esm2022/lib/apis/models/api-supplies.interfaces.mjs +1 -1
- package/esm2022/lib/apis/models/api-supplies.types.mjs +1 -1
- package/esm2022/lib/apis/models/api.models.mjs +1 -1
- package/esm2022/lib/cypher/crypto.service.mjs +1 -1
- package/esm2022/lib/helpers/files.mjs +1 -1
- package/esm2022/lib/helpers/http.mjs +1 -1
- package/esm2022/lib/interceptors/api-headers.interceptor.mjs +1 -1
- package/esm2022/lib/interceptors/api-token.interceptor.mjs +1 -1
- package/esm2022/lib/interceptors/http-caching.interceptor.mjs +1 -1
- package/esm2022/lib/ngx-services.models.mjs +1 -1
- package/esm2022/lib/ngx-services.module.mjs +1 -1
- package/esm2022/lib/websockets/web-sockets.service.mjs +1 -1
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/experteam-mx-ngx-services.mjs.map +1 -1
- package/lib/apis/models/api-reports.interfaces.d.ts +25 -16
- package/package.json +1 -1
|
@@ -1028,4 +1028,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1028
1028
|
type: Inject,
|
|
1029
1029
|
args: ['env']
|
|
1030
1030
|
}] }, { type: i1.HttpClient }] });
|
|
1031
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNvbXBhbmllcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXhwZXJ0ZWFtLW14L25neC1zZXJ2aWNlcy9zcmMvbGliL2FwaXMvYXBpLWNvbXBhbmllcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBOEVsRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQWMsTUFBTSxNQUFNLENBQUE7OztBQVUxRCxNQUFNLE9BQU8sbUJBQW1CO0lBRUw7SUFDZjtJQUZWLFlBQ3lCLFlBQXlCLEVBQ3hDLElBQWdCO1FBREQsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDeEMsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUN0QixDQUFDO0lBRUw7Ozs7T0FJRztJQUNILElBQUksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFBO0lBQ2hELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUFFLE1BQW1CO1FBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQStCLEdBQUcsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUN4RixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxlQUFlLENBQUUsRUFBVTtRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUE4QixHQUFHLElBQUksQ0FBQyxHQUFHLGtCQUFrQixFQUFFLEVBQUUsQ0FBQzthQUNqRixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJ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QUMsR0FBRyxDQUFvQyxHQUFHLElBQUksQ0FBQyxHQUFHLHlCQUF5QixFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7YUFDcEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCwyQkFBMkIsQ0FBRSxNQUFtRDtRQUM5RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFtQyxHQUFHLElBQUksQ0FBQyxHQUFHLHFCQUFxQixFQUFFO1lBQ3ZGLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVztZQUMxQixPQUFPLEVBQUU7Z0JBQ1AsYUFBYSxFQUFFLFVBQVUsTUFBTSxDQUFDLEtBQUssRUFBRTthQUN4QztTQUNGLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO3dHQTdsQ1UsbUJBQW1CLGtCQUVwQixLQUFLOzRHQUZKLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFHSSxNQUFNOzJCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi9uZ3gtc2VydmljZXMubW9kZWxzJ1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHtcbiAgQWNjb3VudENhdGVnb3JpZXNPdXQsXG4gIEFjY291bnRFbnRpdGllc0luLFxuICBBY2NvdW50RW50aXRpZXNPdXQsXG4gIEFjY291bnRJbixcbiAgQWNjb3VudE91dCxcbiAgQWNjb3VudHNPdXQsXG4gIEFjY291bnRUeXBlSW4sXG4gIEFjY291bnRUeXBlT3V0LFxuICBBY2NvdW50VHlwZXNPdXQsXG4gIEJvYXJkaW5nUHJvY2Vzc0lkSW4sXG4gIEJvYXJkaW5nUHJvY2Vzc0luLFxuICBDb21wYW55Q291bnRyaWVzT3V0LFxuICBDb21wYW55Q291bnRyeUluLFxuICBDb21wYW55Q291bnRyeU91dCxcbiAgQ29tcGFueUNvdW50cnlUYXhlc091dCxcbiAgQ29tcGFueUluLFxuICBDb21wYW55T3V0LFxuICBDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY2llc091dCxcbiAgQ291bnRyeVJlZmVyZW5jZUN1cnJlbmN5SW4sXG4gIENvdW50cnlSZWZlcmVuY2VDdXJyZW5jeU91dCxcbiAgQ291bnRyeVJlZmVyZW5jZUV4dHJhQ2hhcmdlSW4sXG4gIENvdW50cnlSZWZlcmVuY2VFeHRyYUNoYXJnZU91dCxcbiAgQ291bnRyeVJlZmVyZW5jZUluLFxuICBDb3VudHJ5UmVmZXJlbmNlT3V0LFxuICBDb3VudHJ5UmVmZXJlbmNlUHJvZHVjdEluLFxuICBDb3VudHJ5UmVmZXJlbmNlUHJvZHVjdE91dCxcbiAgQ291bnRyeVJlZmVyZW5jZVByb2R1Y3RzT3V0LFxuICBDb3VudHJ5UmVmZXJlbmNlc091dCxcbiAgRW1wbG95ZWVDdXN0b21lcnNJbixcbiAgRW1wbG95ZWVDdXN0b21lcnNPdXQsXG4gIEVtcGxveWVlSW4sXG4gIEVtcGxveWVlT3V0LFxuICBFbXBsb3llZXNDdXN0b21lcnNPdXQsXG4gIEVtcGxveWVlc091dCxcbiAgRXhjaGFuZ2VJbixcbiAgRXhjaGFuZ2VPdXQsXG4gIEV4Y2hhbmdlc091dCxcbiAgRXh0cmFDaGFyZ2VFbnRpdGllc0luLFxuICBFeHRyYUNoYXJnZUVudGl0aWVzT3V0LFxuICBJbnN0YWxsYXRpb25JbixcbiAgSW5zdGFsbGF0aW9uT3V0LFxuICBJbnN0YWxsYXRpb25zT3V0LFxuICBMb2NhdGlvbkVtcGxveWVlQmF0Y2hJbixcbiAgTG9jYXRpb25FbXBsb3llZU91dCwgTG9jYXRpb25FbXBsb3llZXNJbixcbiAgTG9jYXRpb25FbXBsb3llZXNPdXQsXG4gIExvY2F0aW9uSW4sXG4gIExvY2F0aW9uT3V0LFxuICBMb2NhdGlvbnNPdXQsXG4gIFBhcmFtZXRlckNvbmZpZ0luLFxuICBQYXJhbWV0ZXJDb25maWdPdXQsXG4gIFBhcmFtZXRlckNvbmZpZ3NPdXQsXG4gIFBhcmFtZXRlcnNCeUxldmVsSW4sXG4gIFBhcmFtZXRlcnNPdXQsXG4gIFBhcmFtZXRlcnNWYWx1ZXNJbixcbiAgUGFyYW1ldGVyc1ZhbHVlc091dCxcbiAgUGFyYW1ldGVyVmFsdWVJbixcbiAgUGFyYW1ldGVyVmFsdWVPdXQsXG4gIFByb2R1Y3RFbnRpdGllc0luLFxuICBQcm9kdWN0RW50aXRpZXNPdXQsXG4gIFN1cHBseUVudGl0aWVzSW4sXG4gIFN1cHBseUVudGl0aWVzT3V0LFxuICBTeXN0ZW1FbnRpdGllc0luLFxuICBTeXN0ZW1FbnRpdGllc091dCxcbiAgU3lzdGVtSW4sXG4gIFN5c3RlbU91dCxcbiAgU3lzdGVtc091dCxcbiAgVERYQWNjb3VudFNldHRpbmdzSW4sXG4gIFREWEFjY291bnRTZXR0aW5nc091dCxcbiAgVERYQWNjb3VudHNTZXR0aW5nc091dCxcbiAgV29ya2Zsb3dDb25maWdzQmF0Y2hJbixcbiAgV29ya2Zsb3dDb25maWdzT3V0LFxuICBXb3JrZmxvd3NPdXRcbn0gZnJvbSAnLi9tb2RlbHMvYXBpLWNvbXBhbmllcy50eXBlcydcbmltcG9ydCB7IEFwaVN1Y2Nlc3MsIFF1ZXJ5UGFyYW1zIH0gZnJvbSAnLi9tb2RlbHMvYXBpLm1vZGVscydcbmltcG9ydCB7IGZvcmtKb2luLCBtYXAsIG1lcmdlTWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcbmltcG9ydCB7XG4gIENvdW50cnlDdXJyZW5jeVJhdGUsXG4gIENvdW50cnlSZWZlcmVuY2VFeHRyYUNoYXJnZSxcbiAgRW1wbG95ZWVDdXN0b21lckRobCxcbn0gZnJvbSAnLi9tb2RlbHMvYXBpLWNvbXBhbmllcy5pbnRlcmZhY2VzJ1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBcGlDb21wYW5pZXNTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IgKFxuICAgIEBJbmplY3QoJ2VudicpIHByaXZhdGUgZW52aXJvbm1lbnRzOiBFbnZpcm9ubWVudCxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnRcbiAgKSB7IH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBVUkwgZm9yIHRoZSBjb21wYW5pZXMgQVBJIGZyb20gdGhlIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVUkwgb2YgdGhlIGNvbXBhbmllcyBBUEkuXG4gICAqL1xuICBnZXQgdXJsICgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50cy5hcGlDb21wYW5pZXNVcmwgPz8gJydcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBpbnN0YWxsYXRpb25zIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB1c2VkIHRvIGZpbHRlciB0aGUgaW5zdGFsbGF0aW9ucyBxdWVyeS5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxJbnN0YWxsYXRpb25zT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBpbnN0YWxsYXRpb24ncyBkYXRhLlxuICAgKi9cbiAgZ2V0SW5zdGFsbGF0aW9ucyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8SW5zdGFsbGF0aW9uc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8SW5zdGFsbGF0aW9uc091dD4+KGAke3RoaXMudXJsfS9pbnN0YWxsYXRpb25zYCwgeyBwYXJhbXMgfSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgaW5zdGFsbGF0aW9uIGRldGFpbHMgYmFzZWQgb24gdGhlIGdpdmVuIGluc3RhbGxhdGlvbiBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBpbnN0YWxsYXRpb24gdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPEluc3RhbGxhdGlvbk91dD59IEFuIG9ic2VydmFibGUgb2YgdGhlIGluc3RhbGxhdGlvbiBkZXRhaWxzLlxuICAgKi9cbiAgZ2V0SW5zdGFsbGF0aW9uIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxJbnN0YWxsYXRpb25PdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEluc3RhbGxhdGlvbk91dD4+KGAke3RoaXMudXJsfS9pbnN0YWxsYXRpb25zLyR7aWR9YClcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcG9zdC1pbnN0YWxsYXRpb24gcmVxdWVzdCB0byB0aGUgc2VydmVyIGFuZCByZXRyaWV2ZXMgdGhlIGluc3RhbGxhdGlvbiBkZXRhaWxzLlxuICAgKlxuICAgKiBAcGFyYW0ge0luc3RhbGxhdGlvbklufSBib2R5IC0gVGhlIGluc3RhbGxhdGlvbiBkZXRhaWxzIHRvIGJlIHNlbnQgaW4gdGhlIHJlcXVlc3QgYm9keS5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxJbnN0YWxsYXRpb25PdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3BvbnNlIGNvbnRhaW5pbmcgaW5zdGFsbGF0aW9uIG91dHB1dCBkZXRhaWxzLlxuICAgKi9cbiAgcG9zdEluc3RhbGxhdGlvbiAoYm9keTogSW5zdGFsbGF0aW9uSW4pOiBPYnNlcnZhYmxlPEluc3RhbGxhdGlvbk91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPEluc3RhbGxhdGlvbk91dD4+KGAke3RoaXMudXJsfS9pbnN0YWxsYXRpb25zYCwgYm9keSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgaW5zdGFsbGF0aW9uIHJlY29yZCBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBpZCBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGluc3RhbGxhdGlvbiB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSBib2R5IFRoZSBkYXRhIHBheWxvYWQgY29udGFpbmluZyB0aGUgdXBkYXRlZCBpbnN0YWxsYXRpb24gaW5mb3JtYXRpb24uXG4gICAqIEByZXR1cm4gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIGluc3RhbGxhdGlvbiBkYXRhIHVwb24gYSBzdWNjZXNzZnVsIHVwZGF0ZS5cbiAgICovXG4gIHB1dEluc3RhbGxhdGlvbiAoaWQ6IG51bWJlciwgYm9keTogSW5zdGFsbGF0aW9uSW4pOiBPYnNlcnZhYmxlPEluc3RhbGxhdGlvbk91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8SW5zdGFsbGF0aW9uT3V0Pj4oYCR7dGhpcy51cmx9L2luc3RhbGxhdGlvbnMvJHtpZH1gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhbiBpbnN0YWxsYXRpb24gYnkgaXRzIHVuaXF1ZSBpZGVudGlmaWVyLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGluc3RhbGxhdGlvbiB0byBiZSBkZWxldGVkLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPHt9Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXNwb25zZSBhZnRlciB0aGUgaW5zdGFsbGF0aW9uIGlzIGRlbGV0ZWQuXG4gICAqL1xuICBkZWxldGVJbnN0YWxsYXRpb24gKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHt9PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8QXBpU3VjY2Vzczx7fT4+KGAke3RoaXMudXJsfS9pbnN0YWxsYXRpb25zLyR7aWR9YClcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgbG9jYXRpb25zIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byB1c2UgZm9yIHF1ZXJ5aW5nIGxvY2F0aW9ucy5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxMb2NhdGlvbnNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGxvY2F0aW9uJ3MgZGF0YS5cbiAgICovXG4gIGdldExvY2F0aW9ucyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8TG9jYXRpb25zT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxMb2NhdGlvbnNPdXQ+PihgJHt0aGlzLnVybH0vbG9jYXRpb25zYCwgeyBwYXJhbXMgfSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGxvY2F0aW9uIGRldGFpbHMgZm9yIGEgZ2l2ZW4gbG9jYXRpb24gSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgbG9jYXRpb24uXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8TG9jYXRpb25PdXQ+fSBBbiBPYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIGxvY2F0aW9uIGRldGFpbHMuXG4gICAqL1xuICBnZXRMb2NhdGlvbiAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8TG9jYXRpb25PdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPExvY2F0aW9uT3V0Pj4oYCR7dGhpcy51cmx9L2xvY2F0aW9ucy8ke2lkfWApXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIGxvY2F0aW9uIG9iamVjdCB0byB0aGUgc2VydmVyIGFuZCByZXR1cm5zIHRoZSBjcmVhdGVkIGxvY2F0aW9uIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7TG9jYXRpb25Jbn0gYm9keSAtIFRoZSBsb2NhdGlvbiBpbnB1dCBvYmplY3QgdG8gYmUgc2VudCBpbiB0aGUgcmVxdWVzdCBib2R5LlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPExvY2F0aW9uT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgY3JlYXRlZCBsb2NhdGlvbiBvdXRwdXQgb2JqZWN0LlxuICAgKi9cbiAgcG9zdExvY2F0aW9uIChib2R5OiBMb2NhdGlvbkluKTogT2JzZXJ2YWJsZTxMb2NhdGlvbk91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPExvY2F0aW9uT3V0Pj4oYCR7dGhpcy51cmx9L2xvY2F0aW9uc2AsIGJvZHkpXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBsb2NhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBsb2NhdGlvbiB0byBiZSB1cGRhdGVkLlxuICAgKiBAcGFyYW0ge0xvY2F0aW9uSW59IGJvZHkgLSBUaGUgdXBkYXRlZCBsb2NhdGlvbiBkYXRhIHRvIGJlIHNlbnQgaW4gdGhlIHJlcXVlc3QgYm9keS5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxMb2NhdGlvbk91dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgdXBkYXRlZCBsb2NhdGlvbiBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHB1dExvY2F0aW9uIChpZDogbnVtYmVyLCBib2R5OiBMb2NhdGlvbkluKTogT2JzZXJ2YWJsZTxMb2NhdGlvbk91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8TG9jYXRpb25PdXQ+PihgJHt0aGlzLnVybH0vbG9jYXRpb25zLyR7aWR9YCwgYm9keSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBsb2NhdGlvbiBieSBpdHMgdW5pcXVlIGlkZW50aWZpZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgbG9jYXRpb24gdG8gYmUgZGVsZXRlZC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTx7fT59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyBhbiBlbXB0eSBvYmplY3QgdXBvbiBzdWNjZXNzZnVsIGRlbGV0aW9uLlxuICAgKi9cbiAgZGVsZXRlTG9jYXRpb24gKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHt9PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8QXBpU3VjY2Vzczx7fT4+KGAke3RoaXMudXJsfS9sb2NhdGlvbnMvJHtpZH1gKVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBhY3RpdmUgc3VwcGx5IGVudGl0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB0byBmaWx0ZXIgc3VwcGx5IGVudGl0aWVzLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFN1cHBseUVudGl0aWVzT3V0Pn0gT2JzZXJ2YWJsZSBlbWl0dGluZyBzdXBwbHkgZW50aXRpZXMgZGF0YS5cbiAgICovXG4gIGdldFN1cHBseUVudGl0aWVzQWN0aXZlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8U3VwcGx5RW50aXRpZXNPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFN1cHBseUVudGl0aWVzT3V0Pj4oYCR7dGhpcy51cmx9L3N1cHBseS1lbnRpdGllcy9hY3RpdmVzYCwgeyBwYXJhbXMgfSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBzdXBwbHkgZW50aXRpZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmlsdGVyIGFuZCBmZXRjaCB0aGUgc3VwcGx5IGVudGl0aWVzLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFN1cHBseUVudGl0aWVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBzdXBwbHkgZW50aXRpZXMgZGF0YS5cbiAgICovXG4gIGdldFN1cHBseUVudGl0aWVzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxTdXBwbHlFbnRpdGllc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8U3VwcGx5RW50aXRpZXNPdXQ+PihgJHt0aGlzLnVybH0vc3VwcGx5LWVudGl0aWVzYCwgeyBwYXJhbXMgfSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIHN1cHBseSBlbnRpdGllcyBpbmZvcm1hdGlvbiB0byB0aGUgc2VydmVyIGFuZCByZWNlaXZlcyB0aGUgcHJvY2Vzc2VkIHN1cHBseSBlbnRpdGllcyBkYXRhIGluIHJlc3BvbnNlLlxuICAgKlxuICAgKiBAcGFyYW0ge1N1cHBseUVudGl0aWVzSW59IGJvZHkgLSBUaGUgc3VwcGx5IGVudGl0aWVzIGRhdGEgdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFN1cHBseUVudGl0aWVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBwcm9jZXNzZWQgc3VwcGx5IGVudGl0aWVzIGRhdGEuXG4gICAqL1xuICBwdXRTdXBwbHlFbnRpdGllcyAoYm9keTogU3VwcGx5RW50aXRpZXNJbik6IE9ic2VydmFibGU8U3VwcGx5RW50aXRpZXNPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPFN1cHBseUVudGl0aWVzT3V0Pj4oYCR7dGhpcy51cmx9L3N1cHBseS1lbnRpdGllc2AsIGJvZHkpXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGEgbGlzdCBvZiBlbXBsb3llZXMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBmaWx0ZXIgYW5kIHNvcnQgdGhlIGVtcGxveWVlcy5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFbXBsb3llZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGxpc3Qgb2YgZW1wbG95ZWVzLlxuICAgKi9cbiAgZ2V0RW1wbG95ZWVzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxFbXBsb3llZXNPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEVtcGxveWVlc091dD4+KGAke3RoaXMudXJsfS9lbXBsb3llZXNgLCB7XG4gICAgICBwYXJhbXMsXG4gICAgfSkucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFuIGVtcGxveWVlJ3MgZGV0YWlscyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZW1wbG95ZWUgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgZW1wbG95ZWUuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RW1wbG95ZWVPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGVtcGxveWVlJ3MgZGV0YWlscy5cbiAgICovXG4gIGdldEVtcGxveWVlIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxFbXBsb3llZU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8RW1wbG95ZWVPdXQ+PihgJHt0aGlzLnVybH0vZW1wbG95ZWVzLyR7aWR9YClcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNyZWF0ZSBhIG5ldyBlbXBsb3llZSByZWNvcmQuXG4gICAqXG4gICAqIEBwYXJhbSB7RW1wbG95ZWVJbn0gYm9keSAtIFRoZSBkYXRhIG9mIHRoZSBlbXBsb3llZSB0byBiZSBjcmVhdGVkLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEVtcGxveWVlT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBjcmVhdGVkIGVtcGxveWVlIGRhdGEuXG4gICAqL1xuICBwb3N0RW1wbG95ZWUgKGJvZHk6IEVtcGxveWVlSW4pOiBPYnNlcnZhYmxlPEVtcGxveWVlT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8RW1wbG95ZWVPdXQ+PihgJHt0aGlzLnVybH0vZW1wbG95ZWVzYCwgYm9keSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgZW1wbG95ZWUgcmVjb3JkIHdpdGggdGhlIHNwZWNpZmllZCBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGVtcGxveWVlIHRvIGJlIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7RW1wbG95ZWVJbn0gYm9keSAtIFRoZSBlbXBsb3llZSBkYXRhIHRvIHVwZGF0ZSB0aGUgcmVjb3JkIHdpdGguXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RW1wbG95ZWVPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgZW1wbG95ZWUgZGF0YS5cbiAgICovXG4gIHB1dEVtcGxveWVlIChpZDogbnVtYmVyLCBib2R5OiBFbXBsb3llZUluKTogT2JzZXJ2YWJsZTxFbXBsb3llZU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8RW1wbG95ZWVPdXQ+PihgJHt0aGlzLnVybH0vZW1wbG95ZWVzLyR7aWR9YCwgYm9keSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gZW1wbG95ZWUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIElELlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGVtcGxveWVlIHRvIGRlbGV0ZS5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTx7fT59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgcmVzcG9uc2UgZGF0YSBhZnRlciB0aGUgZW1wbG95ZWUgaXMgZGVsZXRlZC5cbiAgICovXG4gIGRlbGV0ZUVtcGxveWVlIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTx7fT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPEFwaVN1Y2Nlc3M8e30+PihgJHt0aGlzLnVybH0vZW1wbG95ZWVzLyR7aWR9YClcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiBlbXBsb3llZXMgZm9yIGEgc3BlY2lmaWVkIGxvY2F0aW9uIGJhc2VkIG9uIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmlsdGVyIGFuZCByZXRyaWV2ZSB0aGUgbG9jYXRpb24gZW1wbG95ZWVzLlxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxMb2NhdGlvbkVtcGxveWVlc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgbGlzdCBvZiBlbXBsb3llZXMgZm9yIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uXG4gICAqL1xuICBnZXRMb2NhdGlvbkVtcGxveWVlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8TG9jYXRpb25FbXBsb3llZXNPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPExvY2F0aW9uRW1wbG95ZWVzT3V0Pj4oYCR7dGhpcy51cmx9L2xvY2F0aW9uLWVtcGxveWVlc2AsIHtcbiAgICAgIHBhcmFtcyxcbiAgICB9KS5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGxvY2F0aW9uIGVtcGxveWVlIGRldGFpbHMgZm9yIGEgZ2l2ZW4gZW1wbG95ZWUgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgZW1wbG95ZWUgd2hvc2UgbG9jYXRpb24gZGV0YWlscyBhcmUgdG8gYmUgcmV0cmlldmVkLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPExvY2F0aW9uRW1wbG95ZWVPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIGxvY2F0aW9uIGVtcGxveWVlIGRldGFpbHMuXG4gICAqL1xuICBnZXRMb2NhdGlvbkVtcGxveWVlIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxMb2NhdGlvbkVtcGxveWVlT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxMb2NhdGlvbkVtcGxveWVlT3V0Pj4oYCR7dGhpcy51cmx9L2xvY2F0aW9uLWVtcGxveWVlcy8ke2lkfWApXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgc3BlY2lmaWMgbG9jYXRpb24gZW1wbG95ZWUgYnkgdGhlaXIgdW5pcXVlIGlkZW50aWZpZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgZW1wbG95ZWUgdG8gYmUgZGVsZXRlZC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTx7fT59IC0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgYWZ0ZXIgdGhlIGRlbGV0aW9uLlxuICAgKi9cbiAgZGVsZXRlTG9jYXRpb25FbXBsb3llZSAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8e30+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxBcGlTdWNjZXNzPHt9Pj4oYCR7dGhpcy51cmx9L2xvY2F0aW9uLWVtcGxveWVlcy8ke2lkfWApXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIGJhdGNoIG9mIGxvY2F0aW9uLWVtcGxveWVlIGFzc29jaWF0aW9ucyB0byB0aGUgc2VydmVyIGZvciBwcm9jZXNzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0xvY2F0aW9uRW1wbG95ZWVCYXRjaElufSBib2R5IC0gVGhlIG9iamVjdCBjb250YWluaW5nIGEgYmF0Y2ggb2YgbG9jYXRpb24tZW1wbG95ZWUgZGF0YSB0byBiZSBwb3N0ZWQuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RW1wbG95ZWVPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBwcm9jZXNzZWQgZW1wbG95ZWUgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIncyByZXNwb25zZS5cbiAgICovXG4gIHBvc3RMb2NhdGlvbkVtcGxveWVlQmF0Y2ggKGJvZHk6IExvY2F0aW9uRW1wbG95ZWVCYXRjaEluKTogT2JzZXJ2YWJsZTxFbXBsb3llZU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPEVtcGxveWVlT3V0Pj4oYCR7dGhpcy51cmx9L2xvY2F0aW9uLWVtcGxveWVlcy9iYXRjaGAsIGJvZHkpXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIGNvdW50cmllcyB3aGVyZSB0aGUgY29tcGFueSBvcGVyYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHRoZSBBUEkgcmVxdWVzdC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb21wYW55Q291bnRyaWVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBsaXN0IG9mIGNvbXBhbnkgY291bnRyaWVzLlxuICAgKi9cbiAgZ2V0Q29tcGFueUNvdW50cmllcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8Q29tcGFueUNvdW50cmllc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q29tcGFueUNvdW50cmllc091dD4+KGAke3RoaXMudXJsfS9jb21wYW55LWNvdW50cmllc2AsIHsgcGFyYW1zIH0pXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGNvdW50cnkgaW5mb3JtYXRpb24gZm9yIGEgc3BlY2lmaWVkIGNvbXBhbnkgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvbXBhbnkuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q29tcGFueUNvdW50cnlPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIGNvdW50cnkgaW5mb3JtYXRpb24gb2YgdGhlIGNvbXBhbnkuXG4gICAqL1xuICBnZXRDb21wYW55Q291bnRyeSAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8Q29tcGFueUNvdW50cnlPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPENvbXBhbnlDb3VudHJ5T3V0Pj4oYCR7dGhpcy51cmx9L2NvbXBhbnktY291bnRyaWVzLyR7aWR9YClcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcmVxdWVzdCB0byB1cGRhdGUgb3IgY3JlYXRlIGEgY29tcGFueSBjb3VudHJ5IGVudHJ5IG9uIHRoZSBzZXJ2ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tcGFueUNvdW50cnlJbn0gYm9keSBUaGUgZGF0YSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb21wYW55IGNvdW50cnkgaW5mb3JtYXRpb24gdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENvbXBhbnlDb3VudHJ5T3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBzZXJ2ZXIgcmVzcG9uc2Ugd2l0aCB0aGUgdXBkYXRlZCBvciBjcmVhdGVkIGNvbXBhbnkgY291bnRyeSBkYXRhLlxuICAgKi9cbiAgcG9zdENvbXBhbnlDb3VudHJ5IChib2R5OiBDb21wYW55Q291bnRyeUluKTogT2JzZXJ2YWJsZTxDb21wYW55Q291bnRyeU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPENvbXBhbnlDb3VudHJ5T3V0Pj4oYCR7dGhpcy51cmx9L2NvbXBhbnktY291bnRyaWVzYCwgYm9keSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvdW50cnkgaW5mb3JtYXRpb24gZm9yIGEgc3BlY2lmaWMgY29tcGFueS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb21wYW55IHdob3NlIGNvdW50cnkgaW5mb3JtYXRpb24gbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICogQHBhcmFtIHtDb21wYW55Q291bnRyeUlufSBib2R5IC0gVGhlIHVwZGF0ZWQgY291bnRyeSBpbmZvcm1hdGlvbiB0byBiZSBhcHBsaWVkIHRvIHRoZSBjb21wYW55LlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENvbXBhbnlDb3VudHJ5T3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIGNvbXBhbnkgY291bnRyeSBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHB1dENvbXBhbnlDb3VudHJ5IChpZDogbnVtYmVyLCBib2R5OiBDb21wYW55Q291bnRyeUluKTogT2JzZXJ2YWJsZTxDb21wYW55Q291bnRyeU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8Q29tcGFueUNvdW50cnlPdXQ+PihgJHt0aGlzLnVybH0vY29tcGFueS1jb3VudHJpZXMvJHtpZH1gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhIGNvbXBhbnktY291bnRyeSBhc3NvY2lhdGlvbiBieSBpdHMgdW5pcXVlIGlkZW50aWZpZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29tcGFueS1jb3VudHJ5IHJlY29yZCB0byBiZSBkZWxldGVkLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPHt9Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgcmVzdWx0IG9mIHRoZSBkZWxldGUgb3BlcmF0aW9uLlxuICAgKi9cbiAgZGVsZXRlQ29tcGFueUNvdW50cnkgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHt9PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8QXBpU3VjY2Vzczx7fT4+KGAke3RoaXMudXJsfS9jb21wYW55LWNvdW50cmllcy8ke2lkfWApXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSByZWZlcmVuY2UgY3VycmVuY2llcyBmb3IgYSBnaXZlbiBjb3VudHJ5LlxuICAgKlxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB0byBpbmNsdWRlIGluIHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VDdXJyZW5jaWVzT3V0Pn0gVGhlIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgY291bnRyeSByZWZlcmVuY2UgY3VycmVuY2llcyBkYXRhLlxuICAgKi9cbiAgZ2V0Q291bnRyeVJlZmVyZW5jZUN1cnJlbmNpZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VDdXJyZW5jaWVzT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY2llc091dD4+KGAke3RoaXMudXJsfS9jb3VudHJ5LXJlZmVyZW5jZS1jdXJyZW5jaWVzYCwgeyBwYXJhbXMgfSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcmVmZXJlbmNlIGN1cnJlbmN5IGRldGFpbHMgZm9yIGEgc3BlY2lmaWMgY291bnRyeSB1c2luZyBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY291bnRyeS5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY3lPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBjb3VudHJ5J3MgcmVmZXJlbmNlIGN1cnJlbmN5IGRldGFpbHMuXG4gICAqL1xuICBnZXRDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY3kgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VDdXJyZW5jeU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q291bnRyeVJlZmVyZW5jZUN1cnJlbmN5T3V0Pj4oYCR7dGhpcy51cmx9L2NvdW50cnktcmVmZXJlbmNlLWN1cnJlbmNpZXMvJHtpZH1gKVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBjdXJyZW5jaWVzIGZvciBkaWZmZXJlbnQgY291bnRyaWVzIGFsb25nIHdpdGggdGhlaXIgY3VycmVudCBleGNoYW5nZSByYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdXNlZCB0byBmZXRjaCB0aGUgY291bnRyeSByZWZlcmVuY2UgY3VycmVuY2llcy5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5Q3VycmVuY3lSYXRlW10+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gYXJyYXkgb2YgY291bnRyeSBjdXJyZW5jeSByYXRlcy5cbiAgICovXG4gIGdldENvdW50cnlDdXJyZW5jaWVzV2l0aFJhdGUgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPENvdW50cnlDdXJyZW5jeVJhdGVbXT4ge1xuICAgIHJldHVybiB0aGlzLmdldENvdW50cnlSZWZlcmVuY2VDdXJyZW5jaWVzKHBhcmFtcylcbiAgICAgIC5waXBlKG1lcmdlTWFwKChjdXJyZW5jaWVzRGF0YSkgPT4ge1xuICAgICAgICBjb25zdCAkb2JzZXJ2YWJsZXMgPSBjdXJyZW5jaWVzRGF0YS5jb3VudHJ5X3JlZmVyZW5jZV9jdXJyZW5jaWVzXG4gICAgICAgICAgLm1hcCgoaXRlbSkgPT5cbiAgICAgICAgICAgIHRoaXMuZ2V0Q3VycmVudEV4Y2hhbmdlcyh7XG4gICAgICAgICAgICAgIGN1cnJlbmN5X2lkOiBpdGVtLmN1cnJlbmN5LmlkLFxuICAgICAgICAgICAgfSkucGlwZShcbiAgICAgICAgICAgICAgbWFwKChleGNoYW5nZXNEYXRhKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgcmF0ZTogZXhjaGFuZ2VzRGF0YS5leGNoYW5nZXNbMF0/LnZhbHVlLFxuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKCRvYnNlcnZhYmxlcylcbiAgICAgIH0pKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlZmVyZW5jZSBjdXJyZW5jeSBmb3IgYSBzcGVjaWZpZWQgY291bnRyeS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb3VudHJ5LlxuICAgKiBAcGFyYW0ge0NvdW50cnlSZWZlcmVuY2VDdXJyZW5jeUlufSBib2R5IC0gVGhlIGRhdGEgZm9yIHVwZGF0aW5nIHRoZSBjb3VudHJ5J3MgcmVmZXJlbmNlIGN1cnJlbmN5LlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VDdXJyZW5jeU91dD59IEFuIE9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHVwZGF0ZWQgY291bnRyeSByZWZlcmVuY2UgY3VycmVuY3kgZGF0YS5cbiAgICovXG4gIHB1dENvdW50cnlSZWZlcmVuY2VDdXJyZW5jeSAoaWQ6IG51bWJlciwgYm9keTogQ291bnRyeVJlZmVyZW5jZUN1cnJlbmN5SW4pOiBPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VDdXJyZW5jeU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8Q291bnRyeVJlZmVyZW5jZUN1cnJlbmN5T3V0Pj4oYCR7dGhpcy51cmx9L2NvdW50cnktcmVmZXJlbmNlLWN1cnJlbmNpZXMvJHtpZH1gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gY3JlYXRlIGEgY291bnRyeSByZWZlcmVuY2UgY3VycmVuY3kuXG4gICAqXG4gICAqIEBwYXJhbSB7Q291bnRyeVJlZmVyZW5jZUN1cnJlbmN5SW59IGJvZHkgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBjb3VudHJ5IHJlZmVyZW5jZSBjdXJyZW5jeSBkYXRhLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VDdXJyZW5jeU91dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIGNyZWF0ZWQgY291bnRyeSByZWZlcmVuY2UgY3VycmVuY3kuXG4gICAqL1xuICBwb3N0Q291bnRyeVJlZmVyZW5jZUN1cnJlbmN5IChib2R5OiBDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY3lJbik6IE9ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZUN1cnJlbmN5T3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8Q291bnRyeVJlZmVyZW5jZUN1cnJlbmN5T3V0Pj4oYCR7dGhpcy51cmx9L2NvdW50cnktcmVmZXJlbmNlLWN1cnJlbmNpZXNgLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gY3JlYXRlIG9yIHVwZGF0ZSBhIGNvdW50cnkgcmVmZXJlbmNlIGV4dHJhIGNoYXJnZS5cbiAgICpcbiAgICogQHBhcmFtIHtDb3VudHJ5UmVmZXJlbmNlRXh0cmFDaGFyZ2VJbn0gYm9keSAtIFRoZSByZXF1ZXN0IHBheWxvYWQgY29udGFpbmluZyBkZXRhaWxzIGFib3V0IHRoZSBjb3VudHJ5IHJlZmVyZW5jZSBleHRyYSBjaGFyZ2UuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZUV4dHJhQ2hhcmdlT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSByZXNwb25zZSB3aXRoIHRoZSBjcmVhdGVkIG9yIHVwZGF0ZWQgY291bnRyeSByZWZlcmVuY2UgZXh0cmEgY2hhcmdlLlxuICAgKi9cbiAgcG9zdENvdW50cnlSZWZlcmVuY2VFeHRyYUNoYXJnZSAoYm9keTogQ291bnRyeVJlZmVyZW5jZUV4dHJhQ2hhcmdlSW4pOiBPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VFeHRyYUNoYXJnZU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPENvdW50cnlSZWZlcmVuY2VFeHRyYUNoYXJnZU91dD4+KGAke3RoaXMudXJsfS9jb3VudHJ5LXJlZmVyZW5jZS1leHRyYS1jaGFyZ2VzYCwgYm9keSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBjb3VudHJ5IHJlZmVyZW5jZSBleHRyYSBjaGFyZ2UgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvdW50cnkgcmVmZXJlbmNlIGV4dHJhIGNoYXJnZSB0byBiZSB1cGRhdGVkLlxuICAgKiBAcGFyYW0ge0NvdW50cnlSZWZlcmVuY2VFeHRyYUNoYXJnZUlufSBib2R5IC0gVGhlIGRhdGEgdG8gdXBkYXRlIHRoZSBjb3VudHJ5IHJlZmVyZW5jZSBleHRyYSBjaGFyZ2Ugd2l0aC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5UmVmZXJlbmNlRXh0cmFDaGFyZ2VPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHVwZGF0ZWQgY291bnRyeSByZWZlcmVuY2UgZXh0cmEgY2hhcmdlLlxuICAgKi9cbiAgcHV0Q291bnRyeVJlZmVyZW5jZUV4dHJhQ2hhcmdlIChpZDogbnVtYmVyLCBib2R5OiBDb3VudHJ5UmVmZXJlbmNlRXh0cmFDaGFyZ2VJbik6IE9ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZUV4dHJhQ2hhcmdlT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxDb3VudHJ5UmVmZXJlbmNlRXh0cmFDaGFyZ2VPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1yZWZlcmVuY2UtZXh0cmEtY2hhcmdlcy8ke2lkfWAsIGJvZHkpXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGEgY291bnRyeSByZWZlcmVuY2UgZXh0cmEgY2hhcmdlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvdW50cnlSZWZlcmVuY2VFeHRyYUNoYXJnZX0gZXh0cmFDaGFyZ2UgLSBUaGUgY291bnRyeSByZWZlcmVuY2UgZXh0cmEgY2hhcmdlIG9iamVjdCB0byBiZSB1cGRhdGVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0FjdGl2ZV0gLSBPcHRpb25hbCBwYXJhbWV0ZXIgdG8gZXhwbGljaXRseSBzZXQgdGhlIGFjdGl2ZSBzdGF0dXMgb2YgdGhlIGV4dHJhIGNoYXJnZS5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgY3VycmVudCBhY3RpdmUgc3RhdHVzIHdpbGwgYmUgdG9nZ2xlZC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFbXBsb3llZUN1c3RvbWVyc091dD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdXBkYXRlZCBlbXBsb3llZSBjdXN0b21lcnMgb3V0cHV0LlxuICAgKi9cbiAgcGF0Y2hDb3VudHJ5UmVmZXJlbmNlRXh0cmFDaGFyZ2UgKGV4dHJhQ2hhcmdlOiBDb3VudHJ5UmVmZXJlbmNlRXh0cmFDaGFyZ2UsIGlzQWN0aXZlPzogYm9vbGVhbik6IE9ic2VydmFibGU8RW1wbG95ZWVDdXN0b21lcnNPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBhdGNoPEFwaVN1Y2Nlc3M8RW1wbG95ZWVDdXN0b21lcnNPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1yZWZlcmVuY2UtZXh0cmEtY2hhcmdlcy8ke2V4dHJhQ2hhcmdlLmlkfWAsIHtcbiAgICAgIGlzX2FjdGl2ZTogaXNBY3RpdmUgPz8gIWV4dHJhQ2hhcmdlLmlzX2FjdGl2ZVxuICAgIH0pLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBleGNoYW5nZSBkYXRhIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyBmb3IgcmV0cmlldmluZyBleGNoYW5nZSBkYXRhLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEV4Y2hhbmdlc091dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgZXhjaGFuZ2UgZGF0YS5cbiAgICovXG4gIGdldEV4Y2hhbmdlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8RXhjaGFuZ2VzT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxFeGNoYW5nZXNPdXQ+PihgJHt0aGlzLnVybH0vZXhjaGFuZ2VzYCwgeyBwYXJhbXMgfSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNyZWF0ZSBvciB1cGRhdGUgYW4gZXhjaGFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RXhjaGFuZ2VJbn0gYm9keSAtIFRoZSByZXF1ZXN0IGJvZHkgY29udGFpbmluZyB0aGUgZXhjaGFuZ2UgZGF0YSB0byBiZSBzZW50LlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEV4Y2hhbmdlT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXNwb25zZSBjb250YWluaW5nIHRoZSBjcmVhdGVkIG9yIHVwZGF0ZWQgZXhjaGFuZ2UgZGF0YS5cbiAgICovXG4gIHBvc3RFeGNoYW5nZSAoYm9keTogRXhjaGFuZ2VJbik6IE9ic2VydmFibGU8RXhjaGFuZ2VPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxFeGNoYW5nZU91dD4+KGAke3RoaXMudXJsfS9leGNoYW5nZXNgLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBleGlzdGluZyBleGNoYW5nZSB3aXRoIG5ldyBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGV4Y2hhbmdlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtFeGNoYW5nZUlufSBib2R5IC0gVGhlIGRhdGEgdG8gdXBkYXRlIHRoZSBleGNoYW5nZSB3aXRoLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEV4Y2hhbmdlT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIGV4Y2hhbmdlIGRhdGEuXG4gICAqL1xuICBwdXRFeGNoYW5nZSAoaWQ6IG51bWJlciwgYm9keTogRXhjaGFuZ2VJbik6IE9ic2VydmFibGU8RXhjaGFuZ2VPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPEV4Y2hhbmdlT3V0Pj4oYCR7dGhpcy51cmx9L2V4Y2hhbmdlcy8ke2lkfWAsIGJvZHkpXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgZXhjaGFuZ2VzIGJhc2VkIG9uIHRoZSBnaXZlbiBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB0byBmaWx0ZXIgdGhlIGV4Y2hhbmdlcy5cbiAgICpcbiAgICogQHJldHVybnMge09ic2VydmFibGU8RXhjaGFuZ2VzT3V0Pn0gLSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIEFQSSByZXNwb25zZSBkYXRhIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgZXhjaGFuZ2VzLlxuICAgKi9cbiAgZ2V0Q3VycmVudEV4Y2hhbmdlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8RXhjaGFuZ2VzT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxFeGNoYW5nZXNPdXQ+PihgJHt0aGlzLnVybH0vZXhjaGFuZ2VzL2N1cnJlbnRgLCB7IHBhcmFtcyB9KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgY291bnRyeS1zcGVjaWZpYyB0YXggaW5mb3JtYXRpb24gZm9yIGEgY29tcGFueS5cbiAgICpcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdXNlZCB0byBmaWx0ZXIgYW5kIHF1ZXJ5IHRoZSB0YXhlcy5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb21wYW55Q291bnRyeVRheGVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB0YXggaW5mb3JtYXRpb24uXG4gICAqL1xuICBnZXRDb21wYW55Q291bnRyeVRheGVzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxDb21wYW55Q291bnRyeVRheGVzT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxDb21wYW55Q291bnRyeVRheGVzT3V0Pj4oYCR7dGhpcy51cmx9L2NvbXBhbnktY291bnRyeS10YXhlc2AsIHsgcGFyYW1zIH0pXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFjY291bnQgaW5mb3JtYXRpb24gYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIGZvciBmZXRjaGluZyBhY2NvdW50IGRhdGEuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QWNjb3VudHNPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBhY2NvdW50IGRhdGEuXG4gICAqL1xuICBnZXRBY2NvdW50cyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8QWNjb3VudHNPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEFjY291bnRzT3V0Pj4oYCR7dGhpcy51cmx9L2FjY291bnRzYClcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGFjY291bnQgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgYWNjb3VudCBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBhY2NvdW50IHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEFjY291bnRPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGFjY291bnQgZGV0YWlscy5cbiAgICovXG4gIGdldEFjY291bnQgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPEFjY291bnRPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEFjY291bnRPdXQ+PihgJHt0aGlzLnVybH0vYWNjb3VudHMvJHtpZH1gKVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBhY2NvdW50IGJ5IHNlbmRpbmcgYWNjb3VudCBkZXRhaWxzIGluIHRoZSBib2R5LlxuICAgKlxuICAgKiBAcGFyYW0ge0FjY291bnRJbn0gYm9keSAtIFRoZSBhY2NvdW50IGluZm9ybWF0aW9uIHRvIGJlIHNlbnQgaW4gdGhlIHJlcXVlc3QgYm9keS5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBY2NvdW50T3V0Pn0gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBjcmVhdGVkIGFjY291bnQgZGV0YWlscyB1cG9uIHN1Y2Nlc3MuXG4gICAqL1xuICBwb3N0QWNjb3VudCAoYm9keTogQWNjb3VudEluKTogT2JzZXJ2YWJsZTxBY2NvdW50T3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8QWNjb3VudE91dD4+KGAke3RoaXMudXJsfS9hY2NvdW50c2AsIGJvZHkpXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGFuIGFjY291bnQgd2l0aCB0aGUgc3BlY2lmaWVkIElEIHVzaW5nIHRoZSBwcm92aWRlZCBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGFjY291bnQgdG8gYmUgdXBkYXRlZC5cbiAgICogQHBhcmFtIHtBY2NvdW50SW59IGJvZHkgLSBUaGUgZGF0YSB0byB1cGRhdGUgdGhlIGFjY291bnQgd2l0aC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBY2NvdW50T3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgdXBkYXRlZCBhY2NvdW50IGRldGFpbHMuXG4gICAqL1xuICBwdXRBY2NvdW50IChpZDogbnVtYmVyLCBib2R5OiBBY2NvdW50SW4pOiBPYnNlcnZhYmxlPEFjY291bnRPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPEFjY291bnRPdXQ+PihgJHt0aGlzLnVybH0vYWNjb3VudHMvJHtpZH1gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhY2NvdW50IGVudGl0eSBkYXRhIGZyb20gdGhlIHNlcnZlciBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cbiAgICpcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gYmUgc2VudCB3aXRoIHRoZSBIVFRQIHJlcXVlc3QuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QWNjb3VudEVudGl0aWVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBhY2NvdW50IGVudGl0aWVzIGRhdGEuXG4gICAqL1xuICBnZXRBY2NvdW50RW50aXRpZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEFjY291bnRFbnRpdGllc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8QWNjb3VudEVudGl0aWVzT3V0Pj4oYCR7dGhpcy51cmx9L2FjY291bnQtZW50aXRpZXNgLCB7IHBhcmFtcyB9KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBhY2NvdW50IGVudGl0eSB1c2luZyB0aGUgcHJvdmlkZWQgZGV0YWlscy5cbiAgICpcbiAgICogQHBhcmFtIHtBY2NvdW50RW50aXRpZXNJbn0gYm9keSBUaGUgYWNjb3VudCBlbnRpdHkgZGF0YSB0byBiZSB1cGRhdGVkLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEFjY291bnRFbnRpdGllc091dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgdXBkYXRlZCBhY2NvdW50IGVudGl0eSBkZXRhaWxzLlxuICAgKi9cbiAgcHV0QWNjb3VudEVudGl0eSAoYm9keTogQWNjb3VudEVudGl0aWVzSW4pOiBPYnNlcnZhYmxlPEFjY291bnRFbnRpdGllc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8QWNjb3VudEVudGl0aWVzT3V0Pj4oYCR7dGhpcy51cmx9L2FjY291bnQtZW50aXRpZXNgLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBsaXN0IG9mIGFjdGl2ZSBhY2NvdW50IGVudGl0aWVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBmaWx0ZXIgYW5kIHF1ZXJ5IGFjdGl2ZSBhY2NvdW50IGVudGl0aWVzLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEFjY291bnRFbnRpdGllc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgbGlzdCBvZiBhY3RpdmUgYWNjb3VudCBlbnRpdGllcy5cbiAgICovXG4gIGdldEFjY291bnRFbnRpdGllc0FjdGl2ZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEFjY291bnRFbnRpdGllc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8QWNjb3VudEVudGl0aWVzT3V0Pj4oYCR7dGhpcy51cmx9L2FjY291bnQtZW50aXRpZXMvYWN0aXZlc2AsIHsgcGFyYW1zIH0pXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGEgbGlzdCBvZiBhY2NvdW50IGNhdGVnb3JpZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmlsdGVyIHRoZSBhY2NvdW50IGNhdGVnb3JpZXMuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QWNjb3VudENhdGVnb3JpZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGZldGNoZWQgYWNjb3VudCBjYXRlZ29yaWVzIGRhdGEuXG4gICAqL1xuICBnZXRBY2NvdW50Q2F0ZWdvcmllcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8QWNjb3VudENhdGVnb3JpZXNPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEFjY291bnRDYXRlZ29yaWVzT3V0Pj4oYCR7dGhpcy51cmx9L2FjY291bnQtY2F0ZWdvcmllc2AsIHsgcGFyYW1zLCB9KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBhY2NvdW50IHR5cGVzIGZyb20gdGhlIHNlcnZlci5cbiAgICpcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIG9yIGN1c3RvbWl6ZSB0aGUgcmVxdWVzdC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBY2NvdW50VHlwZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBhY2NvdW50IHR5cGVzIGRhdGEuXG4gICAqL1xuICBnZXRBY2NvdW50VHlwZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEFjY291bnRUeXBlc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8QWNjb3VudFR5cGVzT3V0Pj4oYCR7dGhpcy51cmx9L2FjY291bnQtdHlwZXNgLCB7IHBhcmFtcywgfSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgYWNjb3VudCB0eXBlIGZvciB0aGUgZ2l2ZW4gYWNjb3VudCBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBhY2NvdW50LlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEFjY291bnRUeXBlT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBhY2NvdW50IHR5cGUgZGF0YS5cbiAgICovXG4gIGdldEFjY291bnRUeXBlIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxBY2NvdW50VHlwZU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8QWNjb3VudFR5cGVPdXQ+PihgJHt0aGlzLnVybH0vYWNjb3VudC10eXBlcy8ke2lkfWApXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIFBPU1QgcmVxdWVzdCB0byBjcmVhdGUgYSBuZXcgYWNjb3VudCB0eXBlLlxuICAgKlxuICAgKiBAcGFyYW0ge0FjY291bnRUeXBlSW59IGJvZHkgLSBUaGUgZGF0YSBmb3IgdGhlIGFjY291bnQgdHlwZSB0byBiZSBjcmVhdGVkLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEFjY291bnRUeXBlT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBjcmVhdGVkIGFjY291bnQgdHlwZSBvYmplY3QuXG4gICAqL1xuICBwb3N0QWNjb3VudFR5cGUgKGJvZHk6IEFjY291bnRUeXBlSW4pOiBPYnNlcnZhYmxlPEFjY291bnRUeXBlT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8QWNjb3VudFR5cGVPdXQ+PihgJHt0aGlzLnVybH0vYWNjb3VudC10eXBlc2AsIGJvZHkpXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGFuIGFjY291bnQgdHlwZSB3aXRoIHRoZSBzcGVjaWZpZWQgSUQgdXNpbmcgdGhlIHByb3ZpZGVkIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgYWNjb3VudCB0eXBlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtBY2NvdW50VHlwZUlufSBib2R5IC0gVGhlIGRhdGEgdG8gdXBkYXRlIHRoZSBhY2NvdW50IHR5cGUgd2l0aC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBY2NvdW50VHlwZU91dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgdXBkYXRlZCBhY2NvdW50IHR5cGUgZGF0YS5cbiAgICovXG4gIHB1dEFjY291bnRUeXBlIChpZDogbnVtYmVyLCBib2R5OiBBY2NvdW50VHlwZUluKTogT2JzZXJ2YWJsZTxBY2NvdW50VHlwZU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8QWNjb3VudFR5cGVPdXQ+PihgJHt0aGlzLnVybH0vYWNjb3VudC10eXBlcy8ke2lkfWAsIGJvZHkpXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgcGFyYW1ldGVycyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cbiAgICpcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdXNlZCB0byBmaWx0ZXIgb3IgZmV0Y2ggdGhlIGRlc2lyZWQgcGFyYW1ldGVycy5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQYXJhbWV0ZXJzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBmZXRjaGVkIHBhcmFtZXRlcnMuXG4gICAqL1xuICBnZXRQYXJhbWV0ZXJzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxQYXJhbWV0ZXJzT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxQYXJhbWV0ZXJzT3V0Pj4oYCR7dGhpcy51cmx9L3BhcmFtZXRlcnNgLCB7IHBhcmFtcywgfSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgcGFyYW1ldGVyIHZhbHVlcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGFyYW1ldGVyIG5hbWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhcmFtcy5wYXJhbU5hbWVzIC0gQW4gYXJyYXkgb2YgcGFyYW1ldGVyIG5hbWVzIGZvciB3aGljaCB0aGUgdmFsdWVzIG5lZWQgdG8gYmUgZmV0Y2hlZC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQYXJhbWV0ZXJzVmFsdWVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBmZXRjaGVkIHBhcmFtZXRlciB2YWx1ZXMuXG4gICAqL1xuICBwb3N0UGFyYW1ldGVyc1ZhbHVlcyAoeyBwYXJhbU5hbWVzIH06IFBhcmFtZXRlcnNWYWx1ZXNJbik6IE9ic2VydmFibGU8UGFyYW1ldGVyc1ZhbHVlc091dD4ge1xuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbU5hbWVzLm1hcCgocCkgPT4gKHsgbmFtZTogcCB9KSlcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPFBhcmFtZXRlcnNWYWx1ZXNPdXQ+PihgJHt0aGlzLnVybH0vcGFyYW1ldGVycy12YWx1ZXNgLCB7IHBhcmFtZXRlcnMgfSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBwYXJhbWV0ZXIgdmFsdWVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBsZXZlbCBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcmFtZXRlcnNCeUxldmVsSW59IHBhcmFtZXRlcnMgLSBUaGUgaW5wdXQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNyaXRlcmlhIG9yIGxldmVsIGRldGFpbHMgdG8gcmV0cmlldmUgdGhlIHBhcmFtZXRlcnMuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UGFyYW1ldGVyc1ZhbHVlc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcGFyYW1ldGVyIHZhbHVlcyBmZXRjaGVkIGZyb20gdGhlIHNlcnZlci5cbiAgICovXG4gIHBvc3RQYXJhbWV0ZXJWYWx1ZUJ5TW9kZWwgKHBhcmFtZXRlcnM6IFBhcmFtZXRlcnNCeUxldmVsSW4pOiBPYnNlcnZhYmxlPFBhcmFtZXRlcnNWYWx1ZXNPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxQYXJhbWV0ZXJzVmFsdWVzT3V0Pj4oYCR7dGhpcy51cmx9L3BhcmFtZXRlcnMtdmFsdWVzYCwgeyBwYXJhbWV0ZXJzIH0pXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIGEgc3BlY2lmaWVkIHBhcmFtZXRlci5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0IC0gVGhlIGlucHV0IG9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXIgZGV0YWlscy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnBhcmFtTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgd2hvc2UgdmFsdWUgaXMgdG8gYmUgcmV0cmlldmVkLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFBhcmFtZXRlclZhbHVlT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBwYXJhbWV0ZXIuXG4gICAqL1xuICBnZXRQYXJhbWV0ZXJWYWx1ZSAoe1xuICAgIHBhcmFtTmFtZSxcbiAgfTogUGFyYW1ldGVyVmFsdWVJbik6IE9ic2VydmFibGU8UGFyYW1ldGVyVmFsdWVPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFBhcmFtZXRlclZhbHVlT3V0Pj4oYCR7dGhpcy51cmx9L3BhcmFtZXRlcnMtdmFsdWVzLyR7cGFyYW1OYW1lfWApXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIGNvdW50cnkgcmVmZXJlbmNlcyBiYXNlZCBvbiB0aGUgZ2l2ZW4gcXVlcnkgcGFyYW1ldGVycy5cbiAgICpcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIHJldHJpZXZpbmcgY291bnRyeSByZWZlcmVuY2VzLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBjb3VudHJ5IHJlZmVyZW5jZSBkYXRhLlxuICAgKi9cbiAgZ2V0Q291bnRyeVJlZmVyZW5jZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VzT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxDb3VudHJ5UmVmZXJlbmNlc091dD4+KGAke3RoaXMudXJsfS9jb3VudHJ5LXJlZmVyZW5jZXNgLCB7IHBhcmFtcyB9KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgY291bnRyeSByZWZlcmVuY2UgZGF0YSBmb3IgYSBnaXZlbiBjb3VudHJ5IElELlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvdW50cnkgZm9yIHdoaWNoIHRoZSByZWZlcmVuY2UgZGF0YSBpcyB0byBiZSByZXRyaWV2ZWQuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZU91dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgY291bnRyeSByZWZlcmVuY2UgZGF0YS5cbiAgICovXG4gIGdldENvdW50cnlSZWZlcmVuY2UgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPENvdW50cnlSZWZlcmVuY2VPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1yZWZlcmVuY2VzLyR7aWR9YClcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBjb3VudHJ5IHJlZmVyZW5jZSByZXNvdXJjZSB3aXRoIHRoZSBzcGVjaWZpZWQgSUQgYW5kIGRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY291bnRyeSByZWZlcmVuY2UgdG8gYmUgdXBkYXRlZC5cbiAgICogQHBhcmFtIHtDb3VudHJ5UmVmZXJlbmNlSW59IGJvZHkgLSBUaGUgZGF0YSB0byB1cGRhdGUgdGhlIGNvdW50cnkgcmVmZXJlbmNlIHdpdGguXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZU91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdXBkYXRlZCBjb3VudHJ5IHJlZmVyZW5jZSBvYmplY3QuXG4gICAqL1xuICBwdXRDb3VudHJ5UmVmZXJlbmNlIChpZDogbnVtYmVyLCBib2R5OiBDb3VudHJ5UmVmZXJlbmNlSW4pOiBPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPENvdW50cnlSZWZlcmVuY2VPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1yZWZlcmVuY2VzLyR7aWR9YCwgYm9keSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGxpc3Qgb2Ygd29ya2Zsb3dzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB1c2VkIHRvIGZpbHRlciB3b3JrZmxvd3MuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8V29ya2Zsb3dzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSB3b3JrZmxvdyBkYXRhLlxuICAgKi9cbiAgZ2V0V29ya2Zsb3dzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxXb3JrZmxvd3NPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFdvcmtmbG93c091dD4+KGAke3RoaXMudXJsfS93b3JrZmxvd3NgLCB7IHBhcmFtcyB9KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgbGlzdCBvZiBlbXBsb3llZSBjdXN0b21lclxuICAgKlxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB1c2VkIHRvIGZpbHRlciBlbXBsb3llZSBjdXN0b21lcnMuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RW1wbG95ZWVDdXN0b21lcnNPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIGVtcGxveWVlIGN1c3RvbWVyIGRhdGEuXG4gICAqL1xuICBnZXRFbXBsb3llZXNDdXN0b21lcnMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEVtcGxveWVlc0N1c3RvbWVyc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8RW1wbG95ZWVzQ3VzdG9tZXJzT3V0Pj4oYCR7dGhpcy51cmx9L2VtcGxveWVlLWN1c3RvbWVyc2AsIHsgcGFyYW1zIH0pXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIFBPU1QgcmVxdWVzdCB0byBjcmVhdGUgb3IgdXBkYXRlIGVtcGxveWVlIGN1c3RvbWVyIHJlY29yZHMgYW5kIHByb2Nlc3NlcyB0aGUgc2VydmVyIHJlc3BvbnNlLlxuICAgKlxuICAgKiBAcGFyYW0ge0VtcGxveWVlQ3VzdG9tZXJzSW59IGJvZHkgLSBUaGUgcmVxdWVzdCBwYXlsb2FkIGNvbnRhaW5pbmcgZW1wbG95ZWUgY3VzdG9tZXIgZGF0YSB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RW1wbG95ZWVDdXN0b21lcnNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHVwZGF0ZWQgZW1wbG95ZWUgY3VzdG9tZXIgZGF0YSBvbiBzdWNjZXNzZnVsIHJlc3BvbnNlLlxuICAgKi9cbiAgcG9zdEVtcGxveWVlQ3VzdG9tZXJzIChib2R5OiBFbXBsb3llZUN1c3RvbWVyc0luKTogT2JzZXJ2YWJsZTxFbXBsb3llZUN1c3RvbWVyc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPEVtcGxveWVlQ3VzdG9tZXJzT3V0Pj4oYCR7dGhpcy51cmx9L2VtcGxveWVlLWN1c3RvbWVyc2AsIGJvZHkpXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBlbXBsb3llZS1jdXN0b21lciBhc3NvY2lhdGlvbiByZWNvcmQgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4gSUQgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIGlkZW50aWZpZXIgb2YgdGhlIGVtcGxveWVlLWN1c3RvbWVyIHJlY29yZCB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7RW1wbG95ZWVDdXN0b21lcnNJbn0gYm9keSAtIFRoZSBkYXRhIHRvIHVwZGF0ZSB0aGUgZW1wbG95ZWUtY3VzdG9tZXIgcmVjb3JkIHdpdGguXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RW1wbG95ZWVDdXN0b21lcnNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHVwZGF0ZWQgZW1wbG95ZWUtY3VzdG9tZXIgZGF0YS5cbiAgICovXG4gIHB1dEVtcGxveWVlQ3VzdG9tZXJzIChpZDogbnVtYmVyLCBib2R5OiBFbXBsb3llZUN1c3RvbWVyc0luKTogT2JzZXJ2YWJsZTxFbXBsb3llZUN1c3RvbWVyc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8RW1wbG95ZWVDdXN0b21lcnNPdXQ+PihgJHt0aGlzLnVybH0vZW1wbG95ZWUtY3VzdG9tZXJzLyR7aWR9YCwgYm9keSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGVtcGxveWVlLWN1c3RvbWVyIGRldGFpbHMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGVtcGxveWVlIGN1c3RvbWVyIElELlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgaWRlbnRpZmllciBvZiB0aGUgZW1wbG95ZWUtY3VzdG9tZXIgcmVjb3JkIHRvIHVwZGF0ZS5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFbXBsb3llZUN1c3RvbWVyc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdXBkYXRlZCBlbXBsb3llZS1jdXN0b21lciBkYXRhLlxuICAgKi9cbiAgZ2V0RW1wbG95ZWVDdXN0b21lciAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8RW1wbG95ZWVDdXN0b21lcnNPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEVtcGxveWVlQ3VzdG9tZXJzT3V0Pj4oYCR7dGhpcy51cmx9L2VtcGxveWVlLWN1c3RvbWVycy8ke2lkfWApXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGFuIGVtcGxveWVlIGN1c3RvbWVyJ3MgYWN0aXZlIHN0YXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge0VtcGxveWVlQ3VzdG9tZXJEaGx9IGVtcGxveWVlIC0gVGhlIGVtcGxveWVlIGN1c3RvbWVyIG9iamVjdCB0byBiZSB1cGRhdGVkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpc0FjdGl2ZV0gLSBPcHRpb25hbCBwYXJhbWV0ZXIgdG8gZXhwbGljaXRseSBzZXQgdGhlIGFjdGl2ZSBzdGF0ZS5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG51bGwgb3IgdW5kZWZpbmVkLCB0aGUgYWN0aXZlIHN0YXRlIHdpbGwgYmUgdG9nZ2xlZC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFbXBsb3llZUN1c3RvbWVyc091dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgdXBkYXRlZCBlbXBsb3llZSBjdXN0b21lciBvdXRwdXQuXG4gICAqL1xuICBwYXRjaEVtcGxveWVlQ3VzdG9tZXJzIChlbXBsb3llZTogRW1wbG95ZWVDdXN0b21lckRobCwgaXNBY3RpdmU/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxFbXBsb3llZUN1c3RvbWVyc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8QXBpU3VjY2VzczxFbXBsb3llZUN1c3RvbWVyc091dD4+KGAke3RoaXMudXJsfS9lbXBsb3llZS1jdXN0b21lcnMvJHtlbXBsb3llZS5pZH1gLCB7XG4gICAgICBpc19hY3RpdmU6IGlzQWN0aXZlID8/ICFlbXBsb3llZS5pc19hY3RpdmVcbiAgICB9KS5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdHMgYSBmaWxlIGNvbnRhaW5pbmcgZW1wbG95ZWUgY3VzdG9tZXIgZGF0YSBmb3IgYSBzcGVjaWZpYyBjb3VudHJ5IHRvIHRoZSBzZXJ2ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudHJ5SWQgLSBUaGUgaWRlbnRpZmllciBvZiB0aGUgY291bnRyeSBmb3Igd2hpY2ggdGhlIGRhdGEgaXMgYmVpbmcgdXBsb2FkZWQuXG4gICAqIEBwYXJhbSB7RmlsZX0gZmlsZSAtIFRoZSBmaWxlIGNvbnRhaW5zIGVtcGxveWVlIGN1c3RvbWVyIGRhdGEgdG8gYmUgdXBsb2FkZWQuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Qm9hcmRpbmdQcm9jZXNzSWRJbj59IE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcHJvY2Vzc2VkIGJvYXJkaW5nIHByb2Nlc3MgSUQgb24gc3VjY2Vzcy5cbiAgICovXG4gIHBvc3RFbXBsb3llZUN1c3RvbWVyc0xvYWQgKGNvdW50cnlJZDogbnVtYmVyLCBmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxCb2FyZGluZ1Byb2Nlc3NJZEluPiB7XG4gICAgY29uc3QgYm9keSA9IG5ldyBGb3JtRGF0YSgpXG5cbiAgICBib2R5LmFwcGVuZCgnZmlsZScsIGZpbGUpXG4gICAgYm9keS5hcHBlbmQoJ2NvdW50cnlfaWQnLCBjb3VudHJ5SWQudG9TdHJpbmcoKSlcblxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPEJvYXJkaW5nUHJvY2Vzc0lkSW4+PihgJHt0aGlzLnVybH0vZW1wbG95ZWUtY3VzdG9tZXJzL2xvYWRgLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogRG93bmxvYWRzIGEgZmlsZSBjb250YWluaW5nIGN1c3RvbWVyIGRhdGEgZm9yIGEgc3BlY2lmaWMgZW1wbG95ZWUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvdW50cnkgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgY291bnRyeSB1c2VkIGFzIGEgZmlsdGVyIGZvciBmZXRjaGluZyB0aGUgZW1wbG95ZWUncyBjdXN0b21lcnMuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QmxvYj59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgZmlsZSBibG9iIGNvbnRhaW5pbmcgdGhlIGN1c3RvbWVyIGRhdGEuXG4gICAqL1xuICBnZXRFbXBsb3llZUN1c3RvbWVyc0Rvd25sb2FkIChpZDpudW1iZXIpOk9ic2VydmFibGU8QmxvYj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMudXJsfS9lbXBsb3llZS1jdXN0b21lcnMvZG93bmxvYWRgLCB7XG4gICAgICBwYXJhbXM6IHsgY291bnRyeV9pZDogaWQgfSxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGJvYXJkaW5nIHByb2Nlc3MgZGV0YWlscyBmb3IgYSBnaXZlbiBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBib2FyZGluZyBwcm9jZXNzIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEJvYXJkaW5nUHJvY2Vzc0luPn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBib2FyZGluZyBwcm9jZXNzIGRldGFpbHMuXG4gICAqL1xuICBnZXRCb2FyZGluZ1Byb2Nlc3MgKGlkOm51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Qm9hcmRpbmdQcm9jZXNzSW4+PihgJHt0aGlzLnVybH0vYm9hcmRpbmctcHJvY2Vzcy8ke2lkfWApXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGEgbGlzdCBvZiBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB1c2VkIHRvIGZpbHRlciB0aGUgc3lzdGVtcy5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxTeXN0ZW1zT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXRyaWV2ZWQgc3lzdGVtcyBkYXRhLlxuICAgKi9cbiAgZ2V0U3lzdGVtcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8U3lzdGVtc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8U3lzdGVtc091dD4+KGAke3RoaXMudXJsfS9zeXN0ZW1zYCwgeyBwYXJhbXMgfSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgc3lzdGVtIGJ5IHRoZSBzcGVjaWZpZWQgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgc3lzdGVtIHRvIGJlIHJldHJpZXZlZC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxTeXN0ZW1PdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlcXVlc3RlZCBzeXN0ZW0gaW5mb3JtYXRpb24uXG4gICAqL1xuICBnZXRTeXN0ZW0gKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFN5c3RlbU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8U3lzdGVtT3V0Pj4oYCR7dGhpcy51cmx9L3N5c3RlbXMvJHtpZH1gKVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gY3JlYXRlIG9yIHVwZGF0ZSBhIHN5c3RlbS5cbiAgICpcbiAgICogQHBhcmFtIHtTeXN0ZW1Jbn0gYm9keSAtIFRoZSBkYXRhIHJlcHJlc2VudGluZyB0aGUgc3lzdGVtIHRvIGJlIGNyZWF0ZWQgb3IgdXBkYXRlZC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxTeXN0ZW1PdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSByZXN1bHRpbmcgc3lzdGVtIG91dHB1dCBhZnRlciB0aGUgQVBJIHJlcXVlc3Qgc3VjY2VlZHMuXG4gICAqL1xuICBwb3N0U3lzdGVtIChib2R5OiBTeXN0ZW1Jbik6IE9ic2VydmFibGU8U3lzdGVtT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8U3lzdGVtT3V0Pj4oYCR7dGhpcy51cmx9L3N5c3RlbXNgLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgc3lzdGVtIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIElEIHdpdGggdGhlIHByb3ZpZGVkIHJlcXVlc3QgYm9keSBhbmQgcmV0dXJucyB0aGUgdXBkYXRlZCBzeXN0ZW0gZGV0YWlscy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBzeXN0ZW0gdG8gYmUgdXBkYXRlZC5cbiAgICogQHBhcmFtIHtTeXN0ZW1Jbn0gYm9keSAtIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgc3lzdGVtIGRldGFpbHMuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8U3lzdGVtT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgdXBkYXRlZCBzeXN0ZW0gZGF0YS5cbiAgICovXG4gIHB1dFN5c3RlbSAoaWQ6IG51bWJlciwgYm9keTogU3lzdGVtSW4pOiBPYnNlcnZhYmxlPFN5c3RlbU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8U3lzdGVtT3V0Pj4oYCR7dGhpcy51cmx9L3N5c3RlbXMvJHtpZH1gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBzeXN0ZW0gZW50aXRpZXMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB1c2VkIHRvIGZpbHRlciBvciBzcGVjaWZ5IHRoZSBzeXN0ZW0gZW50aXRpZXMgdG8gcmV0cmlldmUuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8U3lzdGVtRW50aXRpZXNPdXQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJldHJpZXZlZCBzeXN0ZW0gZW50aXRpZXMuXG4gICAqL1xuICBnZXRTeXN0ZW1FbnRpdGllcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8U3lzdGVtRW50aXRpZXNPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFN5c3RlbUVudGl0aWVzT3V0Pj4oYCR7dGhpcy51cmx9L3N5c3RlbS1lbnRpdGllc2AsIHsgcGFyYW1zIH0pXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBzeXN0ZW0gZW50aXRpZXMgYnkgc2VuZGluZyB0aGUgcHJvdmlkZWQgZGF0YSB0byB0aGUgc2VydmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge1N5c3RlbUVudGl0aWVzSW59IGJvZHkgLSBUaGUgZGF0YSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBzeXN0ZW0gZW50aXRpZXMgdG8gYmUgdXBkYXRlZC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxTeXN0ZW1FbnRpdGllc091dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgdXBkYXRlZCBzeXN0ZW0gZW50aXRpZXMgZGF0YS5cbiAgICovXG4gIHB1dFN5c3RlbUVudGl0aWVzIChib2R5OiBTeXN0ZW1FbnRpdGllc0luKTogT2JzZXJ2YWJsZTxTeXN0ZW1FbnRpdGllc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8U3lzdGVtRW50aXRpZXNPdXQ+PihgJHt0aGlzLnVybH0vc3lzdGVtLWVudGl0aWVzYCwgYm9keSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB3b3JrZmxvdyBjb25maWd1cmF0aW9ucyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cbiAgICpcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIHRoZSB3b3JrZmxvdyBjb25maWd1cmF0aW9ucy5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxXb3JrZmxvd0NvbmZpZ3NPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSB3b3JrZmxvdyBjb25maWd1cmF0aW9ucy5cbiAgICovXG4gIGdldFdvcmtmbG93Q29uZmlncyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8V29ya2Zsb3dDb25maWdzT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxXb3JrZmxvd0NvbmZpZ3NPdXQ+PihgJHt0aGlzLnVybH0vd29ya2Zsb3ctY29uZmlnc2AsIHsgcGFyYW1zIH0pXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIGJhdGNoIG9mIHdvcmtmbG93IGNvbmZpZ3VyYXRpb24gZGF0YSB0byB0aGUgc2VydmVyIGZvciBwcm9jZXNzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge1dvcmtmbG93Q29uZmlnc0JhdGNoSW59IGJvZHkgLSBUaGUgaW5wdXQgZGF0YSBjb250YWluaW5nIGEgYmF0Y2ggb2Ygd29ya2Zsb3cgY29uZmlndXJhdGlvbnMgdG8gYmUgc2VudC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxXb3JrZmxvd0NvbmZpZ3NPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHByb2Nlc3NlZCBiYXRjaCBvZiB3b3JrZmxvdyBjb25maWd1cmF0aW9uIGRhdGEgYXMgYSByZXNwb25zZS5cbiAgICovXG4gIHBvc3RXb3JrZmxvd0NvbmZpZ3NCYXRjaCAoYm9keTogV29ya2Zsb3dDb25maWdzQmF0Y2hJbik6IE9ic2VydmFibGU8V29ya2Zsb3dDb25maWdzT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8V29ya2Zsb3dDb25maWdzT3V0Pj4oYCR7dGhpcy51cmx9L3dvcmtmbG93LWNvbmZpZ3MvYmF0Y2hgLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gY3JlYXRlIGEgbmV3IGNvbXBhbnkgYW5kIHJldHVybnMgdGhlIGNyZWF0ZWQgY29tcGFueSdzIGRldGFpbHMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tcGFueUlufSBib2R5IC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgZGV0YWlscyBvZiB0aGUgY29tcGFueSB0byBiZSBjcmVhdGVkLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENvbXBhbnlPdXQ+fSBBbiBPYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSByZXNwb25zZSB3aXRoIHRoZSBjcmVhdGVkIGNvbXBhbnkncyBkZXRhaWxzLlxuICAgKi9cbiAgcG9zdENvbXBhbnkgKGJvZHk6IENvbXBhbnlJbik6IE9ic2VydmFibGU8Q29tcGFueU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPENvbXBhbnlPdXQ+PihgJHt0aGlzLnVybH0vY29tcGFuaWVzYCwgYm9keSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGRldGFpbHMgb2YgYW4gZXhpc3RpbmcgY29tcGFueSB1c2luZyBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29tcGFueSB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Q29tcGFueUlufSBib2R5IC0gVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSB1cGRhdGVkIGNvbXBhbnkgZGF0YS5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb21wYW55T3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIGNvbXBhbnkgZGV0YWlscy5cbiAgICovXG4gIHB1dENvbXBhbnkgKGlkOiBudW1iZXIsIGJvZHk6IENvbXBhbnlJbik6IE9ic2VydmFibGU8Q29tcGFueU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8Q29tcGFueU91dD4+KGAke3RoaXMudXJsfS9jb21wYW5pZXMvJHtpZH1gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhIGNvbXBhbnkgYnkgaXRzIHVuaXF1ZSBpZGVudGlmaWVyLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvbXBhbnkgdG8gYmUgZGVsZXRlZC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTx7fT59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyBhbiBlbXB0eSBvYmplY3QgdXBvbiBzdWNjZXNzZnVsIGRlbGV0aW9uIG9yIGFuIGVycm9yIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuXG4gICAqL1xuICBkZWxldGVDb21wYW55IChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTx7fT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPEFwaVN1Y2Nlc3M8e30+PihgJHt0aGlzLnVybH0vY29tcGFuaWVzLyR7aWR9YClcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgcHJvZHVjdCBlbnRpdGllcyBmcm9tIHRoZSBzZXJ2ZXIgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyBUaGUgcXVlcnkgcGFyYW1ldGVycyB1c2VkIHRvIG1vZGlmeSB0aGUgcmVxdWVzdCBmb3IgcHJvZHVjdCBlbnRpdGllcy5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQcm9kdWN0RW50aXRpZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHByb2R1Y3QgZW50aXRpZXMgcmV0cmlldmVkIGZyb20gdGhlIHNlcnZlci5cbiAgICovXG4gIGdldFByb2R1Y3RFbnRpdGllcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8UHJvZHVjdEVudGl0aWVzT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxQcm9kdWN0RW50aXRpZXNPdXQ+PihgJHt0aGlzLnVybH0vcHJvZHVjdC1lbnRpdGllc2AsIHsgcGFyYW1zIH0pXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIFBVVCByZXF1ZXN0IHRvIHVwZGF0ZSBwcm9kdWN0IGVudGl0aWVzIGFuZCByZXR1cm5zIHRoZSB1cGRhdGVkIGVudGl0eS5cbiAgICpcbiAgICogQHBhcmFtIHtQcm9kdWN0RW50aXRpZXNJbn0gYm9keSAtIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gdXBkYXRlIHRoZSBwcm9kdWN0IGVudGl0eS5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQcm9kdWN0RW50aXRpZXNPdXQ+fSBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHVwZGF0ZWQgcHJvZHVjdCBlbnRpdHkuXG4gICAqL1xuICBwdXRQcm9kdWN0RW50aXRpZXMgKGJvZHk6IFByb2R1Y3RFbnRpdGllc0luKTogT2JzZXJ2YWJsZTxQcm9kdWN0RW50aXRpZXNPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPFByb2R1Y3RFbnRpdGllc091dD4+KGAke3RoaXMudXJsfS9wcm9kdWN0LWVudGl0aWVzYCwgYm9keSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgY291bnRyeSByZWZlcmVuY2UgcHJvZHVjdHMgYmFzZWQgb24gdGhlIGdpdmVuIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyBUaGUgcXVlcnkgcGFyYW1ldGVycyB1c2VkIHRvIGZpbHRlciBhbmQgcmV0cmlldmUgdGhlIGNvdW50cnkgcmVmZXJlbmNlIHByb2R1Y3RzLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VQcm9kdWN0c091dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIGZldGNoZWQgY291bnRyeSByZWZlcmVuY2UgcHJvZHVjdHMgZGF0YS5cbiAgICovXG4gIGdldENvdW50cnlSZWZlcmVuY2VQcm9kdWN0cyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZVByb2R1Y3RzT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxDb3VudHJ5UmVmZXJlbmNlUHJvZHVjdHNPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1yZWZlcmVuY2UtcHJvZHVjdHNgLCB7IHBhcmFtcyB9KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSByZXF1ZXN0IHRvIHVwZGF0ZSBvciBjcmVhdGUgY291bnRyeSByZWZlcmVuY2UgcHJvZHVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q291bnRyeVJlZmVyZW5jZVByb2R1Y3RJbn0gYm9keSAtIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIGRldGFpbHMgb2YgdGhlIGNvdW50cnkgcmVmZXJlbmNlIHByb2R1Y3RzIHRvIHBvc3QuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZVByb2R1Y3RPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHVwZGF0ZWQgb3IgY3JlYXRlZCBjb3VudHJ5IHJlZmVyZW5jZSBwcm9kdWN0IGRhdGEuXG4gICAqL1xuICBwb3N0Q291bnRyeVJlZmVyZW5jZVByb2R1Y3RzIChib2R5OiBDb3VudHJ5UmVmZXJlbmNlUHJvZHVjdEluKTogT2JzZXJ2YWJsZTxDb3VudHJ5UmVmZXJlbmNlUHJvZHVjdE91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPENvdW50cnlSZWZlcmVuY2VQcm9kdWN0T3V0Pj4oYCR7dGhpcy51cmx9L2NvdW50cnktcmVmZXJlbmNlLXByb2R1Y3RzYCwgYm9keSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBjb3VudHJ5IHJlZmVyZW5jZSBwcm9kdWN0IHdpdGggdGhlIHNwZWNpZmllZCBJRCB1c2luZyB0aGUgcHJvdmlkZWQgZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb3VudHJ5IHJlZmVyZW5jZSBwcm9kdWN0IHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHtDb3VudHJ5UmVmZXJlbmNlUHJvZHVjdElufSBib2R5IC0gVGhlIHVwZGF0ZWQgY291bnRyeSByZWZlcmVuY2UgcHJvZHVjdCBkYXRhIHRvIGJlIHNlbnQgaW4gdGhlIHJlcXVlc3QgYm9keS5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5UmVmZXJlbmNlUHJvZHVjdE91dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHVwZGF0ZWQgY291bnRyeSByZWZlcmVuY2UgcHJvZHVjdC5cbiAgICovXG4gIHB1dENvdW50cnlSZWZlcmVuY2VQcm9kdWN0cyAoaWQ6IG51bWJlciwgYm9keTogQ291bnRyeVJlZmVyZW5jZVByb2R1Y3RJbik6IE9ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZVByb2R1Y3RPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPENvdW50cnlSZWZlcmVuY2VQcm9kdWN0T3V0Pj4oYCR7dGhpcy51cmx9L2NvdW50cnktcmVmZXJlbmNlLXByb2R1Y3RzLyR7aWR9YCwgYm9keSlcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGV4dHJhIGNoYXJnZSBlbnRpdGllcyBmcm9tIHRoZSBzZXJ2ZXIgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciB0aGUgZXh0cmEgY2hhcmdlIGVudGl0aWVzLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEV4dHJhQ2hhcmdlRW50aXRpZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGV4dHJhIGNoYXJnZSBlbnRpdGllcyByZXRyaWV2ZWQgZnJvbSB0aGUgc2VydmVyLlxuICAgKi9cbiAgZ2V0RXh0cmFDaGFyZ2VFbnRpdGllcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8RXh0cmFDaGFyZ2VFbnRpdGllc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8RXh0cmFDaGFyZ2VFbnRpdGllc091dD4+KGAke3RoaXMudXJsfS9leHRyYWNoYXJnZS1lbnRpdGllc2AsIHsgcGFyYW1zIH0pXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGV4dHJhIGNoYXJnZSBlbnRpdGllcyBieSBzZW5kaW5nIHRoZSBwcm92aWRlZCBkYXRhIHRvIHRoZSBzZXJ2ZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7RXh0cmFDaGFyZ2VFbnRpdGllc0lufSBib2R5IC0gVGhlIGRhdGEgdG8gdXBkYXRlIHRoZSBleHRyYSBjaGFyZ2UgZW50aXRpZXMuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RXh0cmFDaGFyZ2VFbnRpdGllc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdXBkYXRlZCBleHRyYSBjaGFyZ2UgZW50aXRpZXMuXG4gICAqL1xuICBwdXRFeHRyYUNoYXJnZUVudGl0aWVzIChib2R5OiBFeHRyYUNoYXJnZUVudGl0aWVzSW4pOiBPYnNlcnZhYmxlPEV4dHJhQ2hhcmdlRW50aXRpZXNPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPEV4dHJhQ2hhcmdlRW50aXRpZXNPdXQ+PihgJHt0aGlzLnVybH0vZXh0cmFjaGFyZ2UtZW50aXRpZXNgLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBwYXJhbWV0ZXIgY29uZmlndXJhdGlvbnMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciB0aGUgcGFyYW1ldGVyIGNvbmZpZ3VyYXRpb25zLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFBhcmFtZXRlckNvbmZpZ3NPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHBhcmFtZXRlciBjb25maWd1cmF0aW9ucyBkYXRhLlxuICAgKi9cbiAgZ2V0UGFyYW1ldGVyQ29uZmlncyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8UGFyYW1ldGVyQ29uZmlnc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8UGFyYW1ldGVyQ29uZmlnc091dD4+KGAke3RoaXMudXJsfS9wYXJhbWV0ZXItY29uZmlnc2AsIHsgcGFyYW1zIH0pXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyBhIFBPU1QgcmVxdWVzdCB0byBjcmVhdGUgb3IgdXBkYXRlIGEgcGFyYW1ldGVyIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7UGFyYW1ldGVyQ29uZmlnSW59IGJvZHkgLSBUaGUgaW5wdXQgZGF0YSBvYmplY3QgY29udGFpbmluZyB0aGUgcGFyYW1ldGVyIGNvbmZpZ3VyYXRpb24gdG8gYmUgc2VudCBpbiB0aGUgcmVxdWVzdCBib2R5LlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFBhcmFtZXRlckNvbmZpZ091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgY29udGFpbmluZyB0aGUgdXBkYXRlZCBvciBuZXdseSBjcmVhdGVkIHBhcmFtZXRlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcG9zdFBhcmFtZXRlckNvbmZpZyAoYm9keTogUGFyYW1ldGVyQ29uZmlnSW4pOiBPYnNlcnZhYmxlPFBhcmFtZXRlckNvbmZpZ091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPFBhcmFtZXRlckNvbmZpZ091dD4+KGAke3RoaXMudXJsfS9wYXJhbWV0ZXItY29uZmlnc2AsIGJvZHkpXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgcGFyYW1ldGVyIHdpdGggdGhlIHByb3ZpZGVkIElEIGFuZCBpbnB1dCBkYXRhLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHBhcmFtZXRlciBjb25maWd1cmF0aW9uIHRvIGJlIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7UGFyYW1ldGVyQ29uZmlnSW59IGJvZHkgLSBUaGUgaW5wdXQgZGF0YSBjb250YWluaW5nIHRoZSB1cGRhdGVkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBwYXJhbWV0ZXIuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UGFyYW1ldGVyQ29uZmlnT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIHBhcmFtZXRlciBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHV0UGFyYW1ldGVyQ29uZmlnIChpZDogbnVtYmVyLCBib2R5OiBQYXJhbWV0ZXJDb25maWdJbik6IE9ic2VydmFibGU8UGFyYW1ldGVyQ29uZmlnT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxQYXJhbWV0ZXJDb25maWdPdXQ+PihgJHt0aGlzLnVybH0vcGFyYW1ldGVyLWNvbmZpZ3MvJHtpZH1gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhIHBhcmFtZXRlciBjb25maWd1cmF0aW9uIHNwZWNpZmllZCBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcGFyYW1ldGVyIGNvbmZpZ3VyYXRpb24gdG8gYmUgZGVsZXRlZC5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQYXJhbWV0ZXJDb25maWdPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIGRlbGV0ZWQgcGFyYW1ldGVyIGNvbmZpZ3VyYXRpb24gZGF0YS5cbiAgICovXG4gIGRlbGV0ZVBhcmFtZXRlckNvbmZpZyAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8UGFyYW1ldGVyQ29uZmlnT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8QXBpU3VjY2VzczxQYXJhbWV0ZXJDb25maWdPdXQ+PihgJHt0aGlzLnVybH0vcGFyYW1ldGVyLWNvbmZpZ3MvJHtpZH1gKVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBURFggYWNjb3VudCBzZXR0aW5ncyBiYXNlZCBvbiB0aGUgZ2l2ZW4gcXVlcnkgcGFyYW1ldGVycy5cbiAgICpcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gUXVlcnkgcGFyYW1ldGVycyB1c2VkIHRvIGZpbHRlciBvciBwYWdpbmF0ZSB0aGUgcmVzdWx0cy5cbiAgICogQHJldHVybnMge09ic2VydmFibGU8VERYQWNjb3VudHNTZXR0aW5nc091dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgbGlzdCBvZiBURFggYWNjb3VudCBzZXR0aW5ncy5cbiAgICovXG4gIGdldFREWEFjY291bnRzU2V0dGluZ3MgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFREWEFjY291bnRzU2V0dGluZ3NPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFREWEFjY291bnRzU2V0dGluZ3NPdXQ+PihgJHt0aGlzLnVybH0vdGR4LWFjY291bnQtc2V0dGluZ3NgLCB7IHBhcmFtcyB9KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgc2luZ2xlIFREWCBhY2NvdW50IHNldHRpbmcgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIFREWCBhY2NvdW50IHNldHRpbmcgdG8gYmUgcmV0cmlldmVkLlxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxURFhBY2NvdW50U2V0dGluZ3NPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHJlcXVlc3RlZCBURFggYWNjb3VudCBzZXR0aW5nLlxuICAgKi9cbiAgZ2V0VERYQWNjb3VudFNldHRpbmdzIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxURFhBY2NvdW50U2V0dGluZ3NPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFREWEFjY291bnRTZXR0aW5nc091dD4+KGAke3RoaXMudXJsfS90ZHgtYWNjb3VudC1zZXR0aW5ncy8ke2lkfWApXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IFREWCBhY2NvdW50IHNldHRpbmcgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAgICpcbiAgICogQHBhcmFtIHtURFhBY2NvdW50U2V0dGluZ3NJbn0gYm9keSAtIFRoZSBkYXRhIHVzZWQgdG8gY3JlYXRlIHRoZSBuZXcgVERYIGFjY291bnQgc2V0dGluZy5cbiAgICogQHJldHVybnMge09ic2VydmFibGU8VERYQWNjb3VudFNldHRpbmdzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBuZXdseSBjcmVhdGVkIFREWCBhY2NvdW50IHNldHRpbmcuXG4gICAqL1xuICBwb3N0VERYQWNjb3VudFNldHRpbmdzIChib2R5OlREWEFjY291bnRTZXR0aW5nc0luKTogT2JzZXJ2YWJsZTxURFhBY2NvdW50U2V0dGluZ3NPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxURFhBY2NvdW50U2V0dGluZ3NPdXQ+PihgJHt0aGlzLnVybH0vdGR4LWFjY291bnQtc2V0dGluZ3NgLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBleGlzdGluZyBURFggYWNjb3VudCBzZXR0aW5nIGlkZW50aWZpZWQgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIFREWCBhY2NvdW50IHNldHRpbmcgdG8gYmUgdXBkYXRlZC5cbiAgICogQHBhcmFtIHtURFhBY2NvdW50U2V0dGluZ3NJbn0gYm9keSAtIFRoZSB1cGRhdGVkIGRhdGEgZm9yIHRoZSBURFggYWNjb3VudCBzZXR0aW5nLlxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxURFhBY2NvdW50U2V0dGluZ3NPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgVERYIGFjY291bnQgc2V0dGluZy5cbiAgICovXG4gIHB1dFREWEFjY291bnRTZXR0aW5ncyAoaWQ6IG51bWJlciwgYm9keTpURFhBY2NvdW50U2V0dGluZ3NJbik6IE9ic2VydmFibGU8VERYQWNjb3VudFNldHRpbmdzT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxURFhBY2NvdW50U2V0dGluZ3NPdXQ+PihgJHt0aGlzLnVybH0vdGR4LWFjY291bnQtc2V0dGluZ3MvJHtpZH1gLCBib2R5KVxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBlbXBsb3llZXMgb2YgYSBzcGVjaWZpYyBsb2NhdGlvbiB1c2luZyBhIHByb3ZpZGVkIHRva2VuLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gSW5wdXQgcGFyYW1ldGVycyBmb3IgdGhlIHJlcXVlc3QsIGRlZmluZWQgYnkgdGhlIGBMb2NhdGlvbkVtcGxveWVlc0luYCBpbnRlcmZhY2UuXG4gICAqIEByZXR1cm5zIEFuIGBPYnNlcnZhYmxlPExvY2F0aW9uRW1wbG95ZWVzT3V0PmAgdGhhdCBlbWl0cyB0aGUgZW1wbG95ZWVzXG4gICAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gbG9jYXRpb24uXG4gICAqIEByZXR1cm5zIFRoZSByZXNwb25zZSB0eXBlIGlzIGBBcGlTdWNjZXNzPExvY2F0aW9uRW1wbG95ZWVzT3V0PmAsIGZyb20gd2hpY2ggdGhlIGBkYXRhYCBmaWVsZCBpcyBleHRyYWN0ZWQuXG4gICAqL1xuICBnZXRMb2NhdGlvbkVtcGxveWVlc0J5VG9rZW4gKHBhcmFtczogeyB0b2tlbjogc3RyaW5nLCBxdWVyeVBhcmFtczogUXVlcnlQYXJhbXMgfSk6IE9ic2VydmFibGU8TG9jYXRpb25FbXBsb3llZXNPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPExvY2F0aW9uRW1wbG95ZWVzT3V0Pj4oYCR7dGhpcy51cmx9L2xvY2F0aW9uLWVtcGxveWVlc2AsIHtcbiAgICAgIHBhcmFtczogcGFyYW1zLnF1ZXJ5UGFyYW1zLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7cGFyYW1zLnRva2VufWBcbiAgICAgIH1cbiAgICB9KS5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxuICB9XG59XG4iXX0=
|
|
1031
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNvbXBhbmllcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXhwZXJ0ZWFtLW14L25neC1zZXJ2aWNlcy9zcmMvbGliL2FwaXMvYXBpLWNvbXBhbmllcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBOEVsRCxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQWMsTUFBTSxNQUFNLENBQUE7OztBQVUxRCxNQUFNLE9BQU8sbUJBQW1CO0lBRUw7SUFDZjtJQUZWLFlBQ3lCLFlBQXlCLEVBQ3hDLElBQWdCO1FBREQsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDeEMsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUN0QixDQUFDO0lBRUw7Ozs7T0FJRztJQUNILElBQUksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFBO0lBQ2hELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUFFLE1BQW1CO1FBQ25DLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQStCLEdBQUcsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUN4RixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxlQUFlLENBQUUsRUFBVTtRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUE4QixHQUFHLElBQUksQ0FBQyxHQUFHLGtCQUFrQixFQUFFLEVBQUUsQ0FBQzthQUNqRixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJ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QUMsR0FBRyxDQUFvQyxHQUFHLElBQUksQ0FBQyxHQUFHLHlCQUF5QixFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUM7YUFDcEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCwyQkFBMkIsQ0FBRSxNQUFtRDtRQUM5RSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFtQyxHQUFHLElBQUksQ0FBQyxHQUFHLHFCQUFxQixFQUFFO1lBQ3ZGLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVztZQUMxQixPQUFPLEVBQUU7Z0JBQ1AsYUFBYSxFQUFFLFVBQVUsTUFBTSxDQUFDLEtBQUssRUFBRTthQUN4QztTQUNGLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO3dHQTdsQ1UsbUJBQW1CLGtCQUVwQixLQUFLOzRHQUZKLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFHSSxNQUFNOzJCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uL25neC1zZXJ2aWNlcy5tb2RlbHMnXHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcclxuaW1wb3J0IHtcclxuICBBY2NvdW50Q2F0ZWdvcmllc091dCxcclxuICBBY2NvdW50RW50aXRpZXNJbixcclxuICBBY2NvdW50RW50aXRpZXNPdXQsXHJcbiAgQWNjb3VudEluLFxyXG4gIEFjY291bnRPdXQsXHJcbiAgQWNjb3VudHNPdXQsXHJcbiAgQWNjb3VudFR5cGVJbixcclxuICBBY2NvdW50VHlwZU91dCxcclxuICBBY2NvdW50VHlwZXNPdXQsXHJcbiAgQm9hcmRpbmdQcm9jZXNzSWRJbixcclxuICBCb2FyZGluZ1Byb2Nlc3NJbixcclxuICBDb21wYW55Q291bnRyaWVzT3V0LFxyXG4gIENvbXBhbnlDb3VudHJ5SW4sXHJcbiAgQ29tcGFueUNvdW50cnlPdXQsXHJcbiAgQ29tcGFueUNvdW50cnlUYXhlc091dCxcclxuICBDb21wYW55SW4sXHJcbiAgQ29tcGFueU91dCxcclxuICBDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY2llc091dCxcclxuICBDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY3lJbixcclxuICBDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY3lPdXQsXHJcbiAgQ291bnRyeVJlZmVyZW5jZUV4dHJhQ2hhcmdlSW4sXHJcbiAgQ291bnRyeVJlZmVyZW5jZUV4dHJhQ2hhcmdlT3V0LFxyXG4gIENvdW50cnlSZWZlcmVuY2VJbixcclxuICBDb3VudHJ5UmVmZXJlbmNlT3V0LFxyXG4gIENvdW50cnlSZWZlcmVuY2VQcm9kdWN0SW4sXHJcbiAgQ291bnRyeVJlZmVyZW5jZVByb2R1Y3RPdXQsXHJcbiAgQ291bnRyeVJlZmVyZW5jZVByb2R1Y3RzT3V0LFxyXG4gIENvdW50cnlSZWZlcmVuY2VzT3V0LFxyXG4gIEVtcGxveWVlQ3VzdG9tZXJzSW4sXHJcbiAgRW1wbG95ZWVDdXN0b21lcnNPdXQsXHJcbiAgRW1wbG95ZWVJbixcclxuICBFbXBsb3llZU91dCxcclxuICBFbXBsb3llZXNDdXN0b21lcnNPdXQsXHJcbiAgRW1wbG95ZWVzT3V0LFxyXG4gIEV4Y2hhbmdlSW4sXHJcbiAgRXhjaGFuZ2VPdXQsXHJcbiAgRXhjaGFuZ2VzT3V0LFxyXG4gIEV4dHJhQ2hhcmdlRW50aXRpZXNJbixcclxuICBFeHRyYUNoYXJnZUVudGl0aWVzT3V0LFxyXG4gIEluc3RhbGxhdGlvbkluLFxyXG4gIEluc3RhbGxhdGlvbk91dCxcclxuICBJbnN0YWxsYXRpb25zT3V0LFxyXG4gIExvY2F0aW9uRW1wbG95ZWVCYXRjaEluLFxyXG4gIExvY2F0aW9uRW1wbG95ZWVPdXQsIExvY2F0aW9uRW1wbG95ZWVzSW4sXHJcbiAgTG9jYXRpb25FbXBsb3llZXNPdXQsXHJcbiAgTG9jYXRpb25JbixcclxuICBMb2NhdGlvbk91dCxcclxuICBMb2NhdGlvbnNPdXQsXHJcbiAgUGFyYW1ldGVyQ29uZmlnSW4sXHJcbiAgUGFyYW1ldGVyQ29uZmlnT3V0LFxyXG4gIFBhcmFtZXRlckNvbmZpZ3NPdXQsXHJcbiAgUGFyYW1ldGVyc0J5TGV2ZWxJbixcclxuICBQYXJhbWV0ZXJzT3V0LFxyXG4gIFBhcmFtZXRlcnNWYWx1ZXNJbixcclxuICBQYXJhbWV0ZXJzVmFsdWVzT3V0LFxyXG4gIFBhcmFtZXRlclZhbHVlSW4sXHJcbiAgUGFyYW1ldGVyVmFsdWVPdXQsXHJcbiAgUHJvZHVjdEVudGl0aWVzSW4sXHJcbiAgUHJvZHVjdEVudGl0aWVzT3V0LFxyXG4gIFN1cHBseUVudGl0aWVzSW4sXHJcbiAgU3VwcGx5RW50aXRpZXNPdXQsXHJcbiAgU3lzdGVtRW50aXRpZXNJbixcclxuICBTeXN0ZW1FbnRpdGllc091dCxcclxuICBTeXN0ZW1JbixcclxuICBTeXN0ZW1PdXQsXHJcbiAgU3lzdGVtc091dCxcclxuICBURFhBY2NvdW50U2V0dGluZ3NJbixcclxuICBURFhBY2NvdW50U2V0dGluZ3NPdXQsXHJcbiAgVERYQWNjb3VudHNTZXR0aW5nc091dCxcclxuICBXb3JrZmxvd0NvbmZpZ3NCYXRjaEluLFxyXG4gIFdvcmtmbG93Q29uZmlnc091dCxcclxuICBXb3JrZmxvd3NPdXRcclxufSBmcm9tICcuL21vZGVscy9hcGktY29tcGFuaWVzLnR5cGVzJ1xyXG5pbXBvcnQgeyBBcGlTdWNjZXNzLCBRdWVyeVBhcmFtcyB9IGZyb20gJy4vbW9kZWxzL2FwaS5tb2RlbHMnXHJcbmltcG9ydCB7IGZvcmtKb2luLCBtYXAsIG1lcmdlTWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcclxuaW1wb3J0IHtcclxuICBDb3VudHJ5Q3VycmVuY3lSYXRlLFxyXG4gIENvdW50cnlSZWZlcmVuY2VFeHRyYUNoYXJnZSxcclxuICBFbXBsb3llZUN1c3RvbWVyRGhsLFxyXG59IGZyb20gJy4vbW9kZWxzL2FwaS1jb21wYW5pZXMuaW50ZXJmYWNlcydcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwaUNvbXBhbmllc1NlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yIChcclxuICAgIEBJbmplY3QoJ2VudicpIHByaXZhdGUgZW52aXJvbm1lbnRzOiBFbnZpcm9ubWVudCxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxyXG4gICkgeyB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyB0aGUgVVJMIGZvciB0aGUgY29tcGFuaWVzIEFQSSBmcm9tIHRoZSBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9ucy5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVSTCBvZiB0aGUgY29tcGFuaWVzIEFQSS5cclxuICAgKi9cclxuICBnZXQgdXJsICgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnRzLmFwaUNvbXBhbmllc1VybCA/PyAnJ1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyB0aGUgaW5zdGFsbGF0aW9ucyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmlsdGVyIHRoZSBpbnN0YWxsYXRpb25zIHF1ZXJ5LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8SW5zdGFsbGF0aW9uc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgaW5zdGFsbGF0aW9uJ3MgZGF0YS5cclxuICAgKi9cclxuICBnZXRJbnN0YWxsYXRpb25zIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxJbnN0YWxsYXRpb25zT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEluc3RhbGxhdGlvbnNPdXQ+PihgJHt0aGlzLnVybH0vaW5zdGFsbGF0aW9uc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBpbnN0YWxsYXRpb24gZGV0YWlscyBiYXNlZCBvbiB0aGUgZ2l2ZW4gaW5zdGFsbGF0aW9uIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBpbnN0YWxsYXRpb24gdG8gcmV0cmlldmUuXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8SW5zdGFsbGF0aW9uT3V0Pn0gQW4gb2JzZXJ2YWJsZSBvZiB0aGUgaW5zdGFsbGF0aW9uIGRldGFpbHMuXHJcbiAgICovXHJcbiAgZ2V0SW5zdGFsbGF0aW9uIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxJbnN0YWxsYXRpb25PdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8SW5zdGFsbGF0aW9uT3V0Pj4oYCR7dGhpcy51cmx9L2luc3RhbGxhdGlvbnMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgcG9zdC1pbnN0YWxsYXRpb24gcmVxdWVzdCB0byB0aGUgc2VydmVyIGFuZCByZXRyaWV2ZXMgdGhlIGluc3RhbGxhdGlvbiBkZXRhaWxzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtJbnN0YWxsYXRpb25Jbn0gYm9keSAtIFRoZSBpbnN0YWxsYXRpb24gZGV0YWlscyB0byBiZSBzZW50IGluIHRoZSByZXF1ZXN0IGJvZHkuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxJbnN0YWxsYXRpb25PdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJlc3BvbnNlIGNvbnRhaW5pbmcgaW5zdGFsbGF0aW9uIG91dHB1dCBkZXRhaWxzLlxyXG4gICAqL1xyXG4gIHBvc3RJbnN0YWxsYXRpb24gKGJvZHk6IEluc3RhbGxhdGlvbkluKTogT2JzZXJ2YWJsZTxJbnN0YWxsYXRpb25PdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPEluc3RhbGxhdGlvbk91dD4+KGAke3RoaXMudXJsfS9pbnN0YWxsYXRpb25zYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGFuIGV4aXN0aW5nIGluc3RhbGxhdGlvbiByZWNvcmQgYnkgaXRzIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGlkIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgaW5zdGFsbGF0aW9uIHRvIHVwZGF0ZS5cclxuICAgKiBAcGFyYW0gYm9keSBUaGUgZGF0YSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgaW5zdGFsbGF0aW9uIGluZm9ybWF0aW9uLlxyXG4gICAqIEByZXR1cm4gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIGluc3RhbGxhdGlvbiBkYXRhIHVwb24gYSBzdWNjZXNzZnVsIHVwZGF0ZS5cclxuICAgKi9cclxuICBwdXRJbnN0YWxsYXRpb24gKGlkOiBudW1iZXIsIGJvZHk6IEluc3RhbGxhdGlvbkluKTogT2JzZXJ2YWJsZTxJbnN0YWxsYXRpb25PdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8SW5zdGFsbGF0aW9uT3V0Pj4oYCR7dGhpcy51cmx9L2luc3RhbGxhdGlvbnMvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgYW4gaW5zdGFsbGF0aW9uIGJ5IGl0cyB1bmlxdWUgaWRlbnRpZmllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgaW5zdGFsbGF0aW9uIHRvIGJlIGRlbGV0ZWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTx7fT59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzcG9uc2UgYWZ0ZXIgdGhlIGluc3RhbGxhdGlvbiBpcyBkZWxldGVkLlxyXG4gICAqL1xyXG4gIGRlbGV0ZUluc3RhbGxhdGlvbiAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8e30+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPEFwaVN1Y2Nlc3M8e30+PihgJHt0aGlzLnVybH0vaW5zdGFsbGF0aW9ucy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBsb2NhdGlvbnMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byB1c2UgZm9yIHF1ZXJ5aW5nIGxvY2F0aW9ucy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPExvY2F0aW9uc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgbG9jYXRpb24ncyBkYXRhLlxyXG4gICAqL1xyXG4gIGdldExvY2F0aW9ucyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8TG9jYXRpb25zT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPExvY2F0aW9uc091dD4+KGAke3RoaXMudXJsfS9sb2NhdGlvbnNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgdGhlIGxvY2F0aW9uIGRldGFpbHMgZm9yIGEgZ2l2ZW4gbG9jYXRpb24gSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGxvY2F0aW9uLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8TG9jYXRpb25PdXQ+fSBBbiBPYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIGxvY2F0aW9uIGRldGFpbHMuXHJcbiAgICovXHJcbiAgZ2V0TG9jYXRpb24gKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPExvY2F0aW9uT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPExvY2F0aW9uT3V0Pj4oYCR7dGhpcy51cmx9L2xvY2F0aW9ucy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBsb2NhdGlvbiBvYmplY3QgdG8gdGhlIHNlcnZlciBhbmQgcmV0dXJucyB0aGUgY3JlYXRlZCBsb2NhdGlvbiBkYXRhLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtMb2NhdGlvbklufSBib2R5IC0gVGhlIGxvY2F0aW9uIGlucHV0IG9iamVjdCB0byBiZSBzZW50IGluIHRoZSByZXF1ZXN0IGJvZHkuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxMb2NhdGlvbk91dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIGNyZWF0ZWQgbG9jYXRpb24gb3V0cHV0IG9iamVjdC5cclxuICAgKi9cclxuICBwb3N0TG9jYXRpb24gKGJvZHk6IExvY2F0aW9uSW4pOiBPYnNlcnZhYmxlPExvY2F0aW9uT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxMb2NhdGlvbk91dD4+KGAke3RoaXMudXJsfS9sb2NhdGlvbnNgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGxvY2F0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBsb2NhdGlvbiB0byBiZSB1cGRhdGVkLlxyXG4gICAqIEBwYXJhbSB7TG9jYXRpb25Jbn0gYm9keSAtIFRoZSB1cGRhdGVkIGxvY2F0aW9uIGRhdGEgdG8gYmUgc2VudCBpbiB0aGUgcmVxdWVzdCBib2R5LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8TG9jYXRpb25PdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgbG9jYXRpb24gaW5mb3JtYXRpb24uXHJcbiAgICovXHJcbiAgcHV0TG9jYXRpb24gKGlkOiBudW1iZXIsIGJvZHk6IExvY2F0aW9uSW4pOiBPYnNlcnZhYmxlPExvY2F0aW9uT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPExvY2F0aW9uT3V0Pj4oYCR7dGhpcy51cmx9L2xvY2F0aW9ucy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBhIGxvY2F0aW9uIGJ5IGl0cyB1bmlxdWUgaWRlbnRpZmllci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgbG9jYXRpb24gdG8gYmUgZGVsZXRlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPHt9Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGVtcHR5IG9iamVjdCB1cG9uIHN1Y2Nlc3NmdWwgZGVsZXRpb24uXHJcbiAgICovXHJcbiAgZGVsZXRlTG9jYXRpb24gKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHt9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxBcGlTdWNjZXNzPHt9Pj4oYCR7dGhpcy51cmx9L2xvY2F0aW9ucy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBhY3RpdmUgc3VwcGx5IGVudGl0aWVzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIHN1cHBseSBlbnRpdGllcy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFN1cHBseUVudGl0aWVzT3V0Pn0gT2JzZXJ2YWJsZSBlbWl0dGluZyBzdXBwbHkgZW50aXRpZXMgZGF0YS5cclxuICAgKi9cclxuICBnZXRTdXBwbHlFbnRpdGllc0FjdGl2ZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFN1cHBseUVudGl0aWVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFN1cHBseUVudGl0aWVzT3V0Pj4oYCR7dGhpcy51cmx9L3N1cHBseS1lbnRpdGllcy9hY3RpdmVzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgc3VwcGx5IGVudGl0aWVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdXNlZCB0byBmaWx0ZXIgYW5kIGZldGNoIHRoZSBzdXBwbHkgZW50aXRpZXMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxTdXBwbHlFbnRpdGllc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgc3VwcGx5IGVudGl0aWVzIGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0U3VwcGx5RW50aXRpZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFN1cHBseUVudGl0aWVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFN1cHBseUVudGl0aWVzT3V0Pj4oYCR7dGhpcy51cmx9L3N1cHBseS1lbnRpdGllc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgc3VwcGx5IGVudGl0aWVzIGluZm9ybWF0aW9uIHRvIHRoZSBzZXJ2ZXIgYW5kIHJlY2VpdmVzIHRoZSBwcm9jZXNzZWQgc3VwcGx5IGVudGl0aWVzIGRhdGEgaW4gcmVzcG9uc2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1N1cHBseUVudGl0aWVzSW59IGJvZHkgLSBUaGUgc3VwcGx5IGVudGl0aWVzIGRhdGEgdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8U3VwcGx5RW50aXRpZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHByb2Nlc3NlZCBzdXBwbHkgZW50aXRpZXMgZGF0YS5cclxuICAgKi9cclxuICBwdXRTdXBwbHlFbnRpdGllcyAoYm9keTogU3VwcGx5RW50aXRpZXNJbik6IE9ic2VydmFibGU8U3VwcGx5RW50aXRpZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8U3VwcGx5RW50aXRpZXNPdXQ+PihgJHt0aGlzLnVybH0vc3VwcGx5LWVudGl0aWVzYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGEgbGlzdCBvZiBlbXBsb3llZXMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdG8gZmlsdGVyIGFuZCBzb3J0IHRoZSBlbXBsb3llZXMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFbXBsb3llZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGxpc3Qgb2YgZW1wbG95ZWVzLlxyXG4gICAqL1xyXG4gIGdldEVtcGxveWVlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8RW1wbG95ZWVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEVtcGxveWVlc091dD4+KGAke3RoaXMudXJsfS9lbXBsb3llZXNgLCB7XHJcbiAgICAgIHBhcmFtcyxcclxuICAgIH0pLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGFuIGVtcGxveWVlJ3MgZGV0YWlscyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgZW1wbG95ZWUgSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGVtcGxveWVlLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RW1wbG95ZWVPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGVtcGxveWVlJ3MgZGV0YWlscy5cclxuICAgKi9cclxuICBnZXRFbXBsb3llZSAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8RW1wbG95ZWVPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8RW1wbG95ZWVPdXQ+PihgJHt0aGlzLnVybH0vZW1wbG95ZWVzLyR7aWR9YClcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kcyBhIFBPU1QgcmVxdWVzdCB0byBjcmVhdGUgYSBuZXcgZW1wbG95ZWUgcmVjb3JkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtFbXBsb3llZUlufSBib2R5IC0gVGhlIGRhdGEgb2YgdGhlIGVtcGxveWVlIHRvIGJlIGNyZWF0ZWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFbXBsb3llZU91dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgY3JlYXRlZCBlbXBsb3llZSBkYXRhLlxyXG4gICAqL1xyXG4gIHBvc3RFbXBsb3llZSAoYm9keTogRW1wbG95ZWVJbik6IE9ic2VydmFibGU8RW1wbG95ZWVPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPEVtcGxveWVlT3V0Pj4oYCR7dGhpcy51cmx9L2VtcGxveWVlc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBhbiBleGlzdGluZyBlbXBsb3llZSByZWNvcmQgd2l0aCB0aGUgc3BlY2lmaWVkIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGVtcGxveWVlIHRvIGJlIHVwZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtFbXBsb3llZUlufSBib2R5IC0gVGhlIGVtcGxveWVlIGRhdGEgdG8gdXBkYXRlIHRoZSByZWNvcmQgd2l0aC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEVtcGxveWVlT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSB1cGRhdGVkIGVtcGxveWVlIGRhdGEuXHJcbiAgICovXHJcbiAgcHV0RW1wbG95ZWUgKGlkOiBudW1iZXIsIGJvZHk6IEVtcGxveWVlSW4pOiBPYnNlcnZhYmxlPEVtcGxveWVlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPEVtcGxveWVlT3V0Pj4oYCR7dGhpcy51cmx9L2VtcGxveWVlcy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBhbiBlbXBsb3llZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGVtcGxveWVlIHRvIGRlbGV0ZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPHt9Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSByZXNwb25zZSBkYXRhIGFmdGVyIHRoZSBlbXBsb3llZSBpcyBkZWxldGVkLlxyXG4gICAqL1xyXG4gIGRlbGV0ZUVtcGxveWVlIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTx7fT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8QXBpU3VjY2Vzczx7fT4+KGAke3RoaXMudXJsfS9lbXBsb3llZXMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiBlbXBsb3llZXMgZm9yIGEgc3BlY2lmaWVkIGxvY2F0aW9uIGJhc2VkIG9uIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB1c2VkIHRvIGZpbHRlciBhbmQgcmV0cmlldmUgdGhlIGxvY2F0aW9uIGVtcGxveWVlcy5cclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxMb2NhdGlvbkVtcGxveWVlc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgbGlzdCBvZiBlbXBsb3llZXMgZm9yIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24uXHJcbiAgICovXHJcbiAgZ2V0TG9jYXRpb25FbXBsb3llZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPExvY2F0aW9uRW1wbG95ZWVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPExvY2F0aW9uRW1wbG95ZWVzT3V0Pj4oYCR7dGhpcy51cmx9L2xvY2F0aW9uLWVtcGxveWVlc2AsIHtcclxuICAgICAgcGFyYW1zLFxyXG4gICAgfSkucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgdGhlIGxvY2F0aW9uIGVtcGxveWVlIGRldGFpbHMgZm9yIGEgZ2l2ZW4gZW1wbG95ZWUgSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGVtcGxveWVlIHdob3NlIGxvY2F0aW9uIGRldGFpbHMgYXJlIHRvIGJlIHJldHJpZXZlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPExvY2F0aW9uRW1wbG95ZWVPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIGxvY2F0aW9uIGVtcGxveWVlIGRldGFpbHMuXHJcbiAgICovXHJcbiAgZ2V0TG9jYXRpb25FbXBsb3llZSAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8TG9jYXRpb25FbXBsb3llZU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxMb2NhdGlvbkVtcGxveWVlT3V0Pj4oYCR7dGhpcy51cmx9L2xvY2F0aW9uLWVtcGxveWVlcy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBhIHNwZWNpZmljIGxvY2F0aW9uIGVtcGxveWVlIGJ5IHRoZWlyIHVuaXF1ZSBpZGVudGlmaWVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBlbXBsb3llZSB0byBiZSBkZWxldGVkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8e30+fSAtIEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHNlcnZlcidzIHJlc3BvbnNlIGFmdGVyIHRoZSBkZWxldGlvbi5cclxuICAgKi9cclxuICBkZWxldGVMb2NhdGlvbkVtcGxveWVlIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTx7fT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8QXBpU3VjY2Vzczx7fT4+KGAke3RoaXMudXJsfS9sb2NhdGlvbi1lbXBsb3llZXMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgYmF0Y2ggb2YgbG9jYXRpb24tZW1wbG95ZWUgYXNzb2NpYXRpb25zIHRvIHRoZSBzZXJ2ZXIgZm9yIHByb2Nlc3NpbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0xvY2F0aW9uRW1wbG95ZWVCYXRjaElufSBib2R5IC0gVGhlIG9iamVjdCBjb250YWluaW5nIGEgYmF0Y2ggb2YgbG9jYXRpb24tZW1wbG95ZWUgZGF0YSB0byBiZSBwb3N0ZWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFbXBsb3llZU91dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHByb2Nlc3NlZCBlbXBsb3llZSBkYXRhIGZyb20gdGhlIHNlcnZlcidzIHJlc3BvbnNlLlxyXG4gICAqL1xyXG4gIHBvc3RMb2NhdGlvbkVtcGxveWVlQmF0Y2ggKGJvZHk6IExvY2F0aW9uRW1wbG95ZWVCYXRjaEluKTogT2JzZXJ2YWJsZTxFbXBsb3llZU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8RW1wbG95ZWVPdXQ+PihgJHt0aGlzLnVybH0vbG9jYXRpb24tZW1wbG95ZWVzL2JhdGNoYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIGNvdW50cmllcyB3aGVyZSB0aGUgY29tcGFueSBvcGVyYXRlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIGZvciB0aGUgQVBJIHJlcXVlc3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb21wYW55Q291bnRyaWVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBsaXN0IG9mIGNvbXBhbnkgY291bnRyaWVzLlxyXG4gICAqL1xyXG4gIGdldENvbXBhbnlDb3VudHJpZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPENvbXBhbnlDb3VudHJpZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q29tcGFueUNvdW50cmllc091dD4+KGAke3RoaXMudXJsfS9jb21wYW55LWNvdW50cmllc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBjb3VudHJ5IGluZm9ybWF0aW9uIGZvciBhIHNwZWNpZmllZCBjb21wYW55IGJ5IGl0cyBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29tcGFueS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENvbXBhbnlDb3VudHJ5T3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBjb3VudHJ5IGluZm9ybWF0aW9uIG9mIHRoZSBjb21wYW55LlxyXG4gICAqL1xyXG4gIGdldENvbXBhbnlDb3VudHJ5IChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxDb21wYW55Q291bnRyeU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxDb21wYW55Q291bnRyeU91dD4+KGAke3RoaXMudXJsfS9jb21wYW55LWNvdW50cmllcy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSByZXF1ZXN0IHRvIHVwZGF0ZSBvciBjcmVhdGUgYSBjb21wYW55IGNvdW50cnkgZW50cnkgb24gdGhlIHNlcnZlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Q29tcGFueUNvdW50cnlJbn0gYm9keSBUaGUgZGF0YSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb21wYW55IGNvdW50cnkgaW5mb3JtYXRpb24gdG8gYmUgc2VudCB0byB0aGUgc2VydmVyLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q29tcGFueUNvdW50cnlPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHNlcnZlciByZXNwb25zZSB3aXRoIHRoZSB1cGRhdGVkIG9yIGNyZWF0ZWQgY29tcGFueSBjb3VudHJ5IGRhdGEuXHJcbiAgICovXHJcbiAgcG9zdENvbXBhbnlDb3VudHJ5IChib2R5OiBDb21wYW55Q291bnRyeUluKTogT2JzZXJ2YWJsZTxDb21wYW55Q291bnRyeU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8Q29tcGFueUNvdW50cnlPdXQ+PihgJHt0aGlzLnVybH0vY29tcGFueS1jb3VudHJpZXNgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGNvdW50cnkgaW5mb3JtYXRpb24gZm9yIGEgc3BlY2lmaWMgY29tcGFueS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29tcGFueSB3aG9zZSBjb3VudHJ5IGluZm9ybWF0aW9uIG5lZWRzIHRvIGJlIHVwZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtDb21wYW55Q291bnRyeUlufSBib2R5IC0gVGhlIHVwZGF0ZWQgY291bnRyeSBpbmZvcm1hdGlvbiB0byBiZSBhcHBsaWVkIHRvIHRoZSBjb21wYW55LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q29tcGFueUNvdW50cnlPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHVwZGF0ZWQgY29tcGFueSBjb3VudHJ5IGluZm9ybWF0aW9uLlxyXG4gICAqL1xyXG4gIHB1dENvbXBhbnlDb3VudHJ5IChpZDogbnVtYmVyLCBib2R5OiBDb21wYW55Q291bnRyeUluKTogT2JzZXJ2YWJsZTxDb21wYW55Q291bnRyeU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxDb21wYW55Q291bnRyeU91dD4+KGAke3RoaXMudXJsfS9jb21wYW55LWNvdW50cmllcy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBhIGNvbXBhbnktY291bnRyeSBhc3NvY2lhdGlvbiBieSBpdHMgdW5pcXVlIGlkZW50aWZpZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvbXBhbnktY291bnRyeSByZWNvcmQgdG8gYmUgZGVsZXRlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPHt9Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgcmVzdWx0IG9mIHRoZSBkZWxldGUgb3BlcmF0aW9uLlxyXG4gICAqL1xyXG4gIGRlbGV0ZUNvbXBhbnlDb3VudHJ5IChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTx7fT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8QXBpU3VjY2Vzczx7fT4+KGAke3RoaXMudXJsfS9jb21wYW55LWNvdW50cmllcy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyB0aGUgcmVmZXJlbmNlIGN1cnJlbmNpZXMgZm9yIGEgZ2l2ZW4gY291bnRyeS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGluY2x1ZGUgaW4gdGhlIHJlcXVlc3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY2llc091dD59IFRoZSBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIGNvdW50cnkgcmVmZXJlbmNlIGN1cnJlbmNpZXMgZGF0YS5cclxuICAgKi9cclxuICBnZXRDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY2llcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZUN1cnJlbmNpZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q291bnRyeVJlZmVyZW5jZUN1cnJlbmNpZXNPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1yZWZlcmVuY2UtY3VycmVuY2llc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSByZWZlcmVuY2UgY3VycmVuY3kgZGV0YWlscyBmb3IgYSBzcGVjaWZpYyBjb3VudHJ5IHVzaW5nIGl0cyBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY291bnRyeS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VDdXJyZW5jeU91dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIGNvdW50cnkncyByZWZlcmVuY2UgY3VycmVuY3kgZGV0YWlscy5cclxuICAgKi9cclxuICBnZXRDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY3kgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VDdXJyZW5jeU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY3lPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1yZWZlcmVuY2UtY3VycmVuY2llcy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBjdXJyZW5jaWVzIGZvciBkaWZmZXJlbnQgY291bnRyaWVzIGFsb25nIHdpdGggdGhlaXIgY3VycmVudCBleGNoYW5nZSByYXRlcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmV0Y2ggdGhlIGNvdW50cnkgcmVmZXJlbmNlIGN1cnJlbmNpZXMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5Q3VycmVuY3lSYXRlW10+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gYXJyYXkgb2YgY291bnRyeSBjdXJyZW5jeSByYXRlcy5cclxuICAgKi9cclxuICBnZXRDb3VudHJ5Q3VycmVuY2llc1dpdGhSYXRlIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxDb3VudHJ5Q3VycmVuY3lSYXRlW10+IHtcclxuICAgIHJldHVybiB0aGlzLmdldENvdW50cnlSZWZlcmVuY2VDdXJyZW5jaWVzKHBhcmFtcylcclxuICAgICAgLnBpcGUobWVyZ2VNYXAoKGN1cnJlbmNpZXNEYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc3QgJG9ic2VydmFibGVzID0gY3VycmVuY2llc0RhdGEuY291bnRyeV9yZWZlcmVuY2VfY3VycmVuY2llc1xyXG4gICAgICAgICAgLm1hcCgoaXRlbSkgPT5cclxuICAgICAgICAgICAgdGhpcy5nZXRDdXJyZW50RXhjaGFuZ2VzKHtcclxuICAgICAgICAgICAgICBjdXJyZW5jeV9pZDogaXRlbS5jdXJyZW5jeS5pZCxcclxuICAgICAgICAgICAgfSkucGlwZShcclxuICAgICAgICAgICAgICBtYXAoKGV4Y2hhbmdlc0RhdGEpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgICAgICAgICAgcmF0ZTogZXhjaGFuZ2VzRGF0YS5leGNoYW5nZXNbMF0/LnZhbHVlLFxyXG4gICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICApXHJcblxyXG4gICAgICAgIHJldHVybiBmb3JrSm9pbigkb2JzZXJ2YWJsZXMpXHJcbiAgICAgIH0pKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgcmVmZXJlbmNlIGN1cnJlbmN5IGZvciBhIHNwZWNpZmllZCBjb3VudHJ5LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjb3VudHJ5LlxyXG4gICAqIEBwYXJhbSB7Q291bnRyeVJlZmVyZW5jZUN1cnJlbmN5SW59IGJvZHkgLSBUaGUgZGF0YSBmb3IgdXBkYXRpbmcgdGhlIGNvdW50cnkncyByZWZlcmVuY2UgY3VycmVuY3kuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY3lPdXQ+fSBBbiBPYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSB1cGRhdGVkIGNvdW50cnkgcmVmZXJlbmNlIGN1cnJlbmN5IGRhdGEuXHJcbiAgICovXHJcbiAgcHV0Q291bnRyeVJlZmVyZW5jZUN1cnJlbmN5IChpZDogbnVtYmVyLCBib2R5OiBDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY3lJbik6IE9ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZUN1cnJlbmN5T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPENvdW50cnlSZWZlcmVuY2VDdXJyZW5jeU91dD4+KGAke3RoaXMudXJsfS9jb3VudHJ5LXJlZmVyZW5jZS1jdXJyZW5jaWVzLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kcyBhIFBPU1QgcmVxdWVzdCB0byBjcmVhdGUgYSBjb3VudHJ5IHJlZmVyZW5jZSBjdXJyZW5jeS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Q291bnRyeVJlZmVyZW5jZUN1cnJlbmN5SW59IGJvZHkgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBjb3VudHJ5IHJlZmVyZW5jZSBjdXJyZW5jeSBkYXRhLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZUN1cnJlbmN5T3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgY3JlYXRlZCBjb3VudHJ5IHJlZmVyZW5jZSBjdXJyZW5jeS5cclxuICAgKi9cclxuICBwb3N0Q291bnRyeVJlZmVyZW5jZUN1cnJlbmN5IChib2R5OiBDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY3lJbik6IE9ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZUN1cnJlbmN5T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxDb3VudHJ5UmVmZXJlbmNlQ3VycmVuY3lPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1yZWZlcmVuY2UtY3VycmVuY2llc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gY3JlYXRlIG9yIHVwZGF0ZSBhIGNvdW50cnkgcmVmZXJlbmNlIGV4dHJhIGNoYXJnZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Q291bnRyeVJlZmVyZW5jZUV4dHJhQ2hhcmdlSW59IGJvZHkgLSBUaGUgcmVxdWVzdCBwYXlsb2FkIGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCB0aGUgY291bnRyeSByZWZlcmVuY2UgZXh0cmEgY2hhcmdlLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZUV4dHJhQ2hhcmdlT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSByZXNwb25zZSB3aXRoIHRoZSBjcmVhdGVkIG9yIHVwZGF0ZWQgY291bnRyeSByZWZlcmVuY2UgZXh0cmEgY2hhcmdlLlxyXG4gICAqL1xyXG4gIHBvc3RDb3VudHJ5UmVmZXJlbmNlRXh0cmFDaGFyZ2UgKGJvZHk6IENvdW50cnlSZWZlcmVuY2VFeHRyYUNoYXJnZUluKTogT2JzZXJ2YWJsZTxDb3VudHJ5UmVmZXJlbmNlRXh0cmFDaGFyZ2VPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPENvdW50cnlSZWZlcmVuY2VFeHRyYUNoYXJnZU91dD4+KGAke3RoaXMudXJsfS9jb3VudHJ5LXJlZmVyZW5jZS1leHRyYS1jaGFyZ2VzYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGEgY291bnRyeSByZWZlcmVuY2UgZXh0cmEgY2hhcmdlIGJ5IGl0cyBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY291bnRyeSByZWZlcmVuY2UgZXh0cmEgY2hhcmdlIHRvIGJlIHVwZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtDb3VudHJ5UmVmZXJlbmNlRXh0cmFDaGFyZ2VJbn0gYm9keSAtIFRoZSBkYXRhIHRvIHVwZGF0ZSB0aGUgY291bnRyeSByZWZlcmVuY2UgZXh0cmEgY2hhcmdlIHdpdGguXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5UmVmZXJlbmNlRXh0cmFDaGFyZ2VPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHVwZGF0ZWQgY291bnRyeSByZWZlcmVuY2UgZXh0cmEgY2hhcmdlLlxyXG4gICAqL1xyXG4gIHB1dENvdW50cnlSZWZlcmVuY2VFeHRyYUNoYXJnZSAoaWQ6IG51bWJlciwgYm9keTogQ291bnRyeVJlZmVyZW5jZUV4dHJhQ2hhcmdlSW4pOiBPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VFeHRyYUNoYXJnZU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxDb3VudHJ5UmVmZXJlbmNlRXh0cmFDaGFyZ2VPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1yZWZlcmVuY2UtZXh0cmEtY2hhcmdlcy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBhIGNvdW50cnkgcmVmZXJlbmNlIGV4dHJhIGNoYXJnZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Q291bnRyeVJlZmVyZW5jZUV4dHJhQ2hhcmdlfSBleHRyYUNoYXJnZSAtIFRoZSBjb3VudHJ5IHJlZmVyZW5jZSBleHRyYSBjaGFyZ2Ugb2JqZWN0IHRvIGJlIHVwZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbaXNBY3RpdmVdIC0gT3B0aW9uYWwgcGFyYW1ldGVyIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSBhY3RpdmUgc3RhdHVzIG9mIHRoZSBleHRyYSBjaGFyZ2UuXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgY3VycmVudCBhY3RpdmUgc3RhdHVzIHdpbGwgYmUgdG9nZ2xlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEVtcGxveWVlQ3VzdG9tZXJzT3V0Pn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIGVtcGxveWVlIGN1c3RvbWVycyBvdXRwdXQuXHJcbiAgICovXHJcbiAgcGF0Y2hDb3VudHJ5UmVmZXJlbmNlRXh0cmFDaGFyZ2UgKGV4dHJhQ2hhcmdlOiBDb3VudHJ5UmVmZXJlbmNlRXh0cmFDaGFyZ2UsIGlzQWN0aXZlPzogYm9vbGVhbik6IE9ic2VydmFibGU8RW1wbG95ZWVDdXN0b21lcnNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucGF0Y2g8QXBpU3VjY2VzczxFbXBsb3llZUN1c3RvbWVyc091dD4+KGAke3RoaXMudXJsfS9jb3VudHJ5LXJlZmVyZW5jZS1leHRyYS1jaGFyZ2VzLyR7ZXh0cmFDaGFyZ2UuaWR9YCwge1xyXG4gICAgICBpc19hY3RpdmU6IGlzQWN0aXZlID8/ICFleHRyYUNoYXJnZS5pc19hY3RpdmVcclxuICAgIH0pLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGV4Y2hhbmdlIGRhdGEgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyBmb3IgcmV0cmlldmluZyBleGNoYW5nZSBkYXRhLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8RXhjaGFuZ2VzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBleGNoYW5nZSBkYXRhLlxyXG4gICAqL1xyXG4gIGdldEV4Y2hhbmdlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8RXhjaGFuZ2VzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEV4Y2hhbmdlc091dD4+KGAke3RoaXMudXJsfS9leGNoYW5nZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNyZWF0ZSBvciB1cGRhdGUgYW4gZXhjaGFuZ2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0V4Y2hhbmdlSW59IGJvZHkgLSBUaGUgcmVxdWVzdCBib2R5IGNvbnRhaW5pbmcgdGhlIGV4Y2hhbmdlIGRhdGEgdG8gYmUgc2VudC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEV4Y2hhbmdlT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXNwb25zZSBjb250YWluaW5nIHRoZSBjcmVhdGVkIG9yIHVwZGF0ZWQgZXhjaGFuZ2UgZGF0YS5cclxuICAgKi9cclxuICBwb3N0RXhjaGFuZ2UgKGJvZHk6IEV4Y2hhbmdlSW4pOiBPYnNlcnZhYmxlPEV4Y2hhbmdlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxFeGNoYW5nZU91dD4+KGAke3RoaXMudXJsfS9leGNoYW5nZXNgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgZXhjaGFuZ2Ugd2l0aCBuZXcgZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgZXhjaGFuZ2UgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7RXhjaGFuZ2VJbn0gYm9keSAtIFRoZSBkYXRhIHRvIHVwZGF0ZSB0aGUgZXhjaGFuZ2Ugd2l0aC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEV4Y2hhbmdlT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIGV4Y2hhbmdlIGRhdGEuXHJcbiAgICovXHJcbiAgcHV0RXhjaGFuZ2UgKGlkOiBudW1iZXIsIGJvZHk6IEV4Y2hhbmdlSW4pOiBPYnNlcnZhYmxlPEV4Y2hhbmdlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPEV4Y2hhbmdlT3V0Pj4oYCR7dGhpcy51cmx9L2V4Y2hhbmdlcy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBjdXJyZW50IGV4Y2hhbmdlcyBiYXNlZCBvbiB0aGUgZ2l2ZW4gcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciB0aGUgZXhjaGFuZ2VzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8RXhjaGFuZ2VzT3V0Pn0gLSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIEFQSSByZXNwb25zZSBkYXRhIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgZXhjaGFuZ2VzLlxyXG4gICAqL1xyXG4gIGdldEN1cnJlbnRFeGNoYW5nZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEV4Y2hhbmdlc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxFeGNoYW5nZXNPdXQ+PihgJHt0aGlzLnVybH0vZXhjaGFuZ2VzL2N1cnJlbnRgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgdGhlIGNvdW50cnktc3BlY2lmaWMgdGF4IGluZm9ybWF0aW9uIGZvciBhIGNvbXBhbnkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB1c2VkIHRvIGZpbHRlciBhbmQgcXVlcnkgdGhlIHRheGVzLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q29tcGFueUNvdW50cnlUYXhlc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdGF4IGluZm9ybWF0aW9uLlxyXG4gICAqL1xyXG4gIGdldENvbXBhbnlDb3VudHJ5VGF4ZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPENvbXBhbnlDb3VudHJ5VGF4ZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q29tcGFueUNvdW50cnlUYXhlc091dD4+KGAke3RoaXMudXJsfS9jb21wYW55LWNvdW50cnktdGF4ZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgYWNjb3VudCBpbmZvcm1hdGlvbiBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIGZvciBmZXRjaGluZyBhY2NvdW50IGRhdGEuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBY2NvdW50c091dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIGFjY291bnQgZGF0YS5cclxuICAgKi9cclxuICBnZXRBY2NvdW50cyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8QWNjb3VudHNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8QWNjb3VudHNPdXQ+PihgJHt0aGlzLnVybH0vYWNjb3VudHNgKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgdGhlIGFjY291bnQgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgYWNjb3VudCBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgYWNjb3VudCB0byByZXRyaWV2ZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEFjY291bnRPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGFjY291bnQgZGV0YWlscy5cclxuICAgKi9cclxuICBnZXRBY2NvdW50IChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxBY2NvdW50T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEFjY291bnRPdXQ+PihgJHt0aGlzLnVybH0vYWNjb3VudHMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBuZXcgYWNjb3VudCBieSBzZW5kaW5nIGFjY291bnQgZGV0YWlscyBpbiB0aGUgYm9keS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QWNjb3VudElufSBib2R5IC0gVGhlIGFjY291bnQgaW5mb3JtYXRpb24gdG8gYmUgc2VudCBpbiB0aGUgcmVxdWVzdCBib2R5LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QWNjb3VudE91dD59IE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgY3JlYXRlZCBhY2NvdW50IGRldGFpbHMgdXBvbiBzdWNjZXNzLlxyXG4gICAqL1xyXG4gIHBvc3RBY2NvdW50IChib2R5OiBBY2NvdW50SW4pOiBPYnNlcnZhYmxlPEFjY291bnRPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPEFjY291bnRPdXQ+PihgJHt0aGlzLnVybH0vYWNjb3VudHNgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgYW4gYWNjb3VudCB3aXRoIHRoZSBzcGVjaWZpZWQgSUQgdXNpbmcgdGhlIHByb3ZpZGVkIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGFjY291bnQgdG8gYmUgdXBkYXRlZC5cclxuICAgKiBAcGFyYW0ge0FjY291bnRJbn0gYm9keSAtIFRoZSBkYXRhIHRvIHVwZGF0ZSB0aGUgYWNjb3VudCB3aXRoLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QWNjb3VudE91dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHVwZGF0ZWQgYWNjb3VudCBkZXRhaWxzLlxyXG4gICAqL1xyXG4gIHB1dEFjY291bnQgKGlkOiBudW1iZXIsIGJvZHk6IEFjY291bnRJbik6IE9ic2VydmFibGU8QWNjb3VudE91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxBY2NvdW50T3V0Pj4oYCR7dGhpcy51cmx9L2FjY291bnRzLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGFjY291bnQgZW50aXR5IGRhdGEgZnJvbSB0aGUgc2VydmVyIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gYmUgc2VudCB3aXRoIHRoZSBIVFRQIHJlcXVlc3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBY2NvdW50RW50aXRpZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGFjY291bnQgZW50aXRpZXMgZGF0YS5cclxuICAgKi9cclxuICBnZXRBY2NvdW50RW50aXRpZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEFjY291bnRFbnRpdGllc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxBY2NvdW50RW50aXRpZXNPdXQ+PihgJHt0aGlzLnVybH0vYWNjb3VudC1lbnRpdGllc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBhbiBhY2NvdW50IGVudGl0eSB1c2luZyB0aGUgcHJvdmlkZWQgZGV0YWlscy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7QWNjb3VudEVudGl0aWVzSW59IGJvZHkgVGhlIGFjY291bnQgZW50aXR5IGRhdGEgdG8gYmUgdXBkYXRlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEFjY291bnRFbnRpdGllc091dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgdXBkYXRlZCBhY2NvdW50IGVudGl0eSBkZXRhaWxzLlxyXG4gICAqL1xyXG4gIHB1dEFjY291bnRFbnRpdHkgKGJvZHk6IEFjY291bnRFbnRpdGllc0luKTogT2JzZXJ2YWJsZTxBY2NvdW50RW50aXRpZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8QWNjb3VudEVudGl0aWVzT3V0Pj4oYCR7dGhpcy51cmx9L2FjY291bnQtZW50aXRpZXNgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiBhY3RpdmUgYWNjb3VudCBlbnRpdGllcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGZpbHRlciBhbmQgcXVlcnkgYWN0aXZlIGFjY291bnQgZW50aXRpZXMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBY2NvdW50RW50aXRpZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGxpc3Qgb2YgYWN0aXZlIGFjY291bnQgZW50aXRpZXMuXHJcbiAgICovXHJcbiAgZ2V0QWNjb3VudEVudGl0aWVzQWN0aXZlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8QWNjb3VudEVudGl0aWVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEFjY291bnRFbnRpdGllc091dD4+KGAke3RoaXMudXJsfS9hY2NvdW50LWVudGl0aWVzL2FjdGl2ZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgYSBsaXN0IG9mIGFjY291bnQgY2F0ZWdvcmllcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmlsdGVyIHRoZSBhY2NvdW50IGNhdGVnb3JpZXMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBY2NvdW50Q2F0ZWdvcmllc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgZmV0Y2hlZCBhY2NvdW50IGNhdGVnb3JpZXMgZGF0YS5cclxuICAgKi9cclxuICBnZXRBY2NvdW50Q2F0ZWdvcmllcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8QWNjb3VudENhdGVnb3JpZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8QWNjb3VudENhdGVnb3JpZXNPdXQ+PihgJHt0aGlzLnVybH0vYWNjb3VudC1jYXRlZ29yaWVzYCwgeyBwYXJhbXMsIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBhY2NvdW50IHR5cGVzIGZyb20gdGhlIHNlcnZlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciBvciBjdXN0b21pemUgdGhlIHJlcXVlc3QuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBY2NvdW50VHlwZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSBhY2NvdW50IHR5cGVzIGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0QWNjb3VudFR5cGVzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxBY2NvdW50VHlwZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8QWNjb3VudFR5cGVzT3V0Pj4oYCR7dGhpcy51cmx9L2FjY291bnQtdHlwZXNgLCB7IHBhcmFtcywgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIGFjY291bnQgdHlwZSBmb3IgdGhlIGdpdmVuIGFjY291bnQgSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGFjY291bnQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBY2NvdW50VHlwZU91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgYWNjb3VudCB0eXBlIGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0QWNjb3VudFR5cGUgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPEFjY291bnRUeXBlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEFjY291bnRUeXBlT3V0Pj4oYCR7dGhpcy51cmx9L2FjY291bnQtdHlwZXMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNyZWF0ZSBhIG5ldyBhY2NvdW50IHR5cGUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0FjY291bnRUeXBlSW59IGJvZHkgLSBUaGUgZGF0YSBmb3IgdGhlIGFjY291bnQgdHlwZSB0byBiZSBjcmVhdGVkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QWNjb3VudFR5cGVPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGNyZWF0ZWQgYWNjb3VudCB0eXBlIG9iamVjdC5cclxuICAgKi9cclxuICBwb3N0QWNjb3VudFR5cGUgKGJvZHk6IEFjY291bnRUeXBlSW4pOiBPYnNlcnZhYmxlPEFjY291bnRUeXBlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxBY2NvdW50VHlwZU91dD4+KGAke3RoaXMudXJsfS9hY2NvdW50LXR5cGVzYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGFuIGFjY291bnQgdHlwZSB3aXRoIHRoZSBzcGVjaWZpZWQgSUQgdXNpbmcgdGhlIHByb3ZpZGVkIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGFjY291bnQgdHlwZSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtBY2NvdW50VHlwZUlufSBib2R5IC0gVGhlIGRhdGEgdG8gdXBkYXRlIHRoZSBhY2NvdW50IHR5cGUgd2l0aC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEFjY291bnRUeXBlT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSB1cGRhdGVkIGFjY291bnQgdHlwZSBkYXRhLlxyXG4gICAqL1xyXG4gIHB1dEFjY291bnRUeXBlIChpZDogbnVtYmVyLCBib2R5OiBBY2NvdW50VHlwZUluKTogT2JzZXJ2YWJsZTxBY2NvdW50VHlwZU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxBY2NvdW50VHlwZU91dD4+KGAke3RoaXMudXJsfS9hY2NvdW50LXR5cGVzLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgcGFyYW1ldGVycyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmlsdGVyIG9yIGZldGNoIHRoZSBkZXNpcmVkIHBhcmFtZXRlcnMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQYXJhbWV0ZXJzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBmZXRjaGVkIHBhcmFtZXRlcnMuXHJcbiAgICovXHJcbiAgZ2V0UGFyYW1ldGVycyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8UGFyYW1ldGVyc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxQYXJhbWV0ZXJzT3V0Pj4oYCR7dGhpcy51cmx9L3BhcmFtZXRlcnNgLCB7IHBhcmFtcywgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIHBhcmFtZXRlciB2YWx1ZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHBhcmFtZXRlciBuYW1lcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXJhbXMucGFyYW1OYW1lcyAtIEFuIGFycmF5IG9mIHBhcmFtZXRlciBuYW1lcyBmb3Igd2hpY2ggdGhlIHZhbHVlcyBuZWVkIHRvIGJlIGZldGNoZWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQYXJhbWV0ZXJzVmFsdWVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBmZXRjaGVkIHBhcmFtZXRlciB2YWx1ZXMuXHJcbiAgICovXHJcbiAgcG9zdFBhcmFtZXRlcnNWYWx1ZXMgKHsgcGFyYW1OYW1lcyB9OiBQYXJhbWV0ZXJzVmFsdWVzSW4pOiBPYnNlcnZhYmxlPFBhcmFtZXRlcnNWYWx1ZXNPdXQ+IHtcclxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBwYXJhbU5hbWVzLm1hcCgocCkgPT4gKHsgbmFtZTogcCB9KSlcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxQYXJhbWV0ZXJzVmFsdWVzT3V0Pj4oYCR7dGhpcy51cmx9L3BhcmFtZXRlcnMtdmFsdWVzYCwgeyBwYXJhbWV0ZXJzIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHBhcmFtZXRlciB2YWx1ZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGxldmVsIGNvbmZpZ3VyYXRpb24uXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1BhcmFtZXRlcnNCeUxldmVsSW59IHBhcmFtZXRlcnMgLSBUaGUgaW5wdXQgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNyaXRlcmlhIG9yIGxldmVsIGRldGFpbHMgdG8gcmV0cmlldmUgdGhlIHBhcmFtZXRlcnMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQYXJhbWV0ZXJzVmFsdWVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBwYXJhbWV0ZXIgdmFsdWVzIGZldGNoZWQgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAqL1xyXG4gIHBvc3RQYXJhbWV0ZXJWYWx1ZUJ5TW9kZWwgKHBhcmFtZXRlcnM6IFBhcmFtZXRlcnNCeUxldmVsSW4pOiBPYnNlcnZhYmxlPFBhcmFtZXRlcnNWYWx1ZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPFBhcmFtZXRlcnNWYWx1ZXNPdXQ+PihgJHt0aGlzLnVybH0vcGFyYW1ldGVycy12YWx1ZXNgLCB7IHBhcmFtZXRlcnMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIGEgc3BlY2lmaWVkIHBhcmFtZXRlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBpbnB1dCAtIFRoZSBpbnB1dCBvYmplY3QgY29udGFpbmluZyB0aGUgcGFyYW1ldGVyIGRldGFpbHMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnBhcmFtTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgd2hvc2UgdmFsdWUgaXMgdG8gYmUgcmV0cmlldmVkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UGFyYW1ldGVyVmFsdWVPdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlci5cclxuICAgKi9cclxuICBnZXRQYXJhbWV0ZXJWYWx1ZSAoe1xyXG4gICAgcGFyYW1OYW1lLFxyXG4gIH06IFBhcmFtZXRlclZhbHVlSW4pOiBPYnNlcnZhYmxlPFBhcmFtZXRlclZhbHVlT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFBhcmFtZXRlclZhbHVlT3V0Pj4oYCR7dGhpcy51cmx9L3BhcmFtZXRlcnMtdmFsdWVzLyR7cGFyYW1OYW1lfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBjb3VudHJ5IHJlZmVyZW5jZXMgYmFzZWQgb24gdGhlIGdpdmVuIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyBmb3IgcmV0cmlldmluZyBjb3VudHJ5IHJlZmVyZW5jZXMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5UmVmZXJlbmNlc091dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgY291bnRyeSByZWZlcmVuY2UgZGF0YS5cclxuICAgKi9cclxuICBnZXRDb3VudHJ5UmVmZXJlbmNlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q291bnRyeVJlZmVyZW5jZXNPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1yZWZlcmVuY2VzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIHRoZSBjb3VudHJ5IHJlZmVyZW5jZSBkYXRhIGZvciBhIGdpdmVuIGNvdW50cnkgSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvdW50cnkgZm9yIHdoaWNoIHRoZSByZWZlcmVuY2UgZGF0YSBpcyB0byBiZSByZXRyaWV2ZWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5UmVmZXJlbmNlT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBjb3VudHJ5IHJlZmVyZW5jZSBkYXRhLlxyXG4gICAqL1xyXG4gIGdldENvdW50cnlSZWZlcmVuY2UgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q291bnRyeVJlZmVyZW5jZU91dD4+KGAke3RoaXMudXJsfS9jb3VudHJ5LXJlZmVyZW5jZXMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgYSBjb3VudHJ5IHJlZmVyZW5jZSByZXNvdXJjZSB3aXRoIHRoZSBzcGVjaWZpZWQgSUQgYW5kIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvdW50cnkgcmVmZXJlbmNlIHRvIGJlIHVwZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtDb3VudHJ5UmVmZXJlbmNlSW59IGJvZHkgLSBUaGUgZGF0YSB0byB1cGRhdGUgdGhlIGNvdW50cnkgcmVmZXJlbmNlIHdpdGguXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5UmVmZXJlbmNlT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIGNvdW50cnkgcmVmZXJlbmNlIG9iamVjdC5cclxuICAgKi9cclxuICBwdXRDb3VudHJ5UmVmZXJlbmNlIChpZDogbnVtYmVyLCBib2R5OiBDb3VudHJ5UmVmZXJlbmNlSW4pOiBPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8Q291bnRyeVJlZmVyZW5jZU91dD4+KGAke3RoaXMudXJsfS9jb3VudHJ5LXJlZmVyZW5jZXMvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgdGhlIGxpc3Qgb2Ygd29ya2Zsb3dzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdXNlZCB0byBmaWx0ZXIgd29ya2Zsb3dzLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8V29ya2Zsb3dzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSB3b3JrZmxvdyBkYXRhLlxyXG4gICAqL1xyXG4gIGdldFdvcmtmbG93cyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8V29ya2Zsb3dzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFdvcmtmbG93c091dD4+KGAke3RoaXMudXJsfS93b3JrZmxvd3NgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgdGhlIGxpc3Qgb2YgZW1wbG95ZWUgY3VzdG9tZXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmlsdGVyIGVtcGxveWVlIGN1c3RvbWVycy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEVtcGxveWVlQ3VzdG9tZXJzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSBlbXBsb3llZSBjdXN0b21lciBkYXRhLlxyXG4gICAqL1xyXG4gIGdldEVtcGxveWVlc0N1c3RvbWVycyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8RW1wbG95ZWVzQ3VzdG9tZXJzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEVtcGxveWVlc0N1c3RvbWVyc091dD4+KGAke3RoaXMudXJsfS9lbXBsb3llZS1jdXN0b21lcnNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNyZWF0ZSBvciB1cGRhdGUgZW1wbG95ZWUgY3VzdG9tZXIgcmVjb3JkcyBhbmQgcHJvY2Vzc2VzIHRoZSBzZXJ2ZXIgcmVzcG9uc2UuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0VtcGxveWVlQ3VzdG9tZXJzSW59IGJvZHkgLSBUaGUgcmVxdWVzdCBwYXlsb2FkIGNvbnRhaW5pbmcgZW1wbG95ZWUgY3VzdG9tZXIgZGF0YSB0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFbXBsb3llZUN1c3RvbWVyc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdXBkYXRlZCBlbXBsb3llZSBjdXN0b21lciBkYXRhIG9uIHN1Y2Nlc3NmdWwgcmVzcG9uc2UuXHJcbiAgICovXHJcbiAgcG9zdEVtcGxveWVlQ3VzdG9tZXJzIChib2R5OiBFbXBsb3llZUN1c3RvbWVyc0luKTogT2JzZXJ2YWJsZTxFbXBsb3llZUN1c3RvbWVyc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8RW1wbG95ZWVDdXN0b21lcnNPdXQ+PihgJHt0aGlzLnVybH0vZW1wbG95ZWUtY3VzdG9tZXJzYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBlbXBsb3llZS1jdXN0b21lciBhc3NvY2lhdGlvbiByZWNvcmQgaWRlbnRpZmllZCBieSB0aGUgZ2l2ZW4gSUQgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBlbXBsb3llZS1jdXN0b21lciByZWNvcmQgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7RW1wbG95ZWVDdXN0b21lcnNJbn0gYm9keSAtIFRoZSBkYXRhIHRvIHVwZGF0ZSB0aGUgZW1wbG95ZWUtY3VzdG9tZXIgcmVjb3JkIHdpdGguXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFbXBsb3llZUN1c3RvbWVyc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdXBkYXRlZCBlbXBsb3llZS1jdXN0b21lciBkYXRhLlxyXG4gICAqL1xyXG4gIHB1dEVtcGxveWVlQ3VzdG9tZXJzIChpZDogbnVtYmVyLCBib2R5OiBFbXBsb3llZUN1c3RvbWVyc0luKTogT2JzZXJ2YWJsZTxFbXBsb3llZUN1c3RvbWVyc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxFbXBsb3llZUN1c3RvbWVyc091dD4+KGAke3RoaXMudXJsfS9lbXBsb3llZS1jdXN0b21lcnMvJHtpZH1gLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgdGhlIGVtcGxveWVlLWN1c3RvbWVyIGRldGFpbHMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGVtcGxveWVlIGN1c3RvbWVyIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIGlkZW50aWZpZXIgb2YgdGhlIGVtcGxveWVlLWN1c3RvbWVyIHJlY29yZCB0byB1cGRhdGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFbXBsb3llZUN1c3RvbWVyc091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdXBkYXRlZCBlbXBsb3llZS1jdXN0b21lciBkYXRhLlxyXG4gICAqL1xyXG4gIGdldEVtcGxveWVlQ3VzdG9tZXIgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPEVtcGxveWVlQ3VzdG9tZXJzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEVtcGxveWVlQ3VzdG9tZXJzT3V0Pj4oYCR7dGhpcy51cmx9L2VtcGxveWVlLWN1c3RvbWVycy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlcyBhbiBlbXBsb3llZSBjdXN0b21lcidzIGFjdGl2ZSBzdGF0ZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RW1wbG95ZWVDdXN0b21lckRobH0gZW1wbG95ZWUgLSBUaGUgZW1wbG95ZWUgY3VzdG9tZXIgb2JqZWN0IHRvIGJlIHVwZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbaXNBY3RpdmVdIC0gT3B0aW9uYWwgcGFyYW1ldGVyIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSBhY3RpdmUgc3RhdGUuXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG51bGwgb3IgdW5kZWZpbmVkLCB0aGUgYWN0aXZlIHN0YXRlIHdpbGwgYmUgdG9nZ2xlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEVtcGxveWVlQ3VzdG9tZXJzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSB1cGRhdGVkIGVtcGxveWVlIGN1c3RvbWVyIG91dHB1dC5cclxuICAgKi9cclxuICBwYXRjaEVtcGxveWVlQ3VzdG9tZXJzIChlbXBsb3llZTogRW1wbG95ZWVDdXN0b21lckRobCwgaXNBY3RpdmU/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxFbXBsb3llZUN1c3RvbWVyc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxBcGlTdWNjZXNzPEVtcGxveWVlQ3VzdG9tZXJzT3V0Pj4oYCR7dGhpcy51cmx9L2VtcGxveWVlLWN1c3RvbWVycy8ke2VtcGxveWVlLmlkfWAsIHtcclxuICAgICAgaXNfYWN0aXZlOiBpc0FjdGl2ZSA/PyAhZW1wbG95ZWUuaXNfYWN0aXZlXHJcbiAgICB9KS5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3VibWl0cyBhIGZpbGUgY29udGFpbmluZyBlbXBsb3llZSBjdXN0b21lciBkYXRhIGZvciBhIHNwZWNpZmljIGNvdW50cnkgdG8gdGhlIHNlcnZlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudHJ5SWQgLSBUaGUgaWRlbnRpZmllciBvZiB0aGUgY291bnRyeSBmb3Igd2hpY2ggdGhlIGRhdGEgaXMgYmVpbmcgdXBsb2FkZWQuXHJcbiAgICogQHBhcmFtIHtGaWxlfSBmaWxlIC0gVGhlIGZpbGUgY29udGFpbnMgZW1wbG95ZWUgY3VzdG9tZXIgZGF0YSB0byBiZSB1cGxvYWRlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEJvYXJkaW5nUHJvY2Vzc0lkSW4+fSBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHByb2Nlc3NlZCBib2FyZGluZyBwcm9jZXNzIElEIG9uIHN1Y2Nlc3MuXHJcbiAgICovXHJcbiAgcG9zdEVtcGxveWVlQ3VzdG9tZXJzTG9hZCAoY291bnRyeUlkOiBudW1iZXIsIGZpbGU6IEZpbGUpOiBPYnNlcnZhYmxlPEJvYXJkaW5nUHJvY2Vzc0lkSW4+IHtcclxuICAgIGNvbnN0IGJvZHkgPSBuZXcgRm9ybURhdGEoKVxyXG5cclxuICAgIGJvZHkuYXBwZW5kKCdmaWxlJywgZmlsZSlcclxuICAgIGJvZHkuYXBwZW5kKCdjb3VudHJ5X2lkJywgY291bnRyeUlkLnRvU3RyaW5nKCkpXHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8Qm9hcmRpbmdQcm9jZXNzSWRJbj4+KGAke3RoaXMudXJsfS9lbXBsb3llZS1jdXN0b21lcnMvbG9hZGAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRG93bmxvYWRzIGEgZmlsZSBjb250YWluaW5nIGN1c3RvbWVyIGRhdGEgZm9yIGEgc3BlY2lmaWMgZW1wbG95ZWUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvdW50cnkgSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIGNvdW50cnkgdXNlZCBhcyBhIGZpbHRlciBmb3IgZmV0Y2hpbmcgdGhlIGVtcGxveWVlJ3MgY3VzdG9tZXJzLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8QmxvYj59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgZmlsZSBibG9iIGNvbnRhaW5pbmcgdGhlIGN1c3RvbWVyIGRhdGEuXHJcbiAgICovXHJcbiAgZ2V0RW1wbG95ZWVDdXN0b21lcnNEb3dubG9hZCAoaWQ6bnVtYmVyKTpPYnNlcnZhYmxlPEJsb2I+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMudXJsfS9lbXBsb3llZS1jdXN0b21lcnMvZG93bmxvYWRgLCB7XHJcbiAgICAgIHBhcmFtczogeyBjb3VudHJ5X2lkOiBpZCB9LFxyXG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyB0aGUgYm9hcmRpbmcgcHJvY2VzcyBkZXRhaWxzIGZvciBhIGdpdmVuIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBib2FyZGluZyBwcm9jZXNzIHRvIHJldHJpZXZlLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Qm9hcmRpbmdQcm9jZXNzSW4+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIGJvYXJkaW5nIHByb2Nlc3MgZGV0YWlscy5cclxuICAgKi9cclxuICBnZXRCb2FyZGluZ1Byb2Nlc3MgKGlkOm51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxCb2FyZGluZ1Byb2Nlc3NJbj4+KGAke3RoaXMudXJsfS9ib2FyZGluZy1wcm9jZXNzLyR7aWR9YClcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIGEgbGlzdCBvZiBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgdXNlZCB0byBmaWx0ZXIgdGhlIHN5c3RlbXMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxTeXN0ZW1zT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXRyaWV2ZWQgc3lzdGVtcyBkYXRhLlxyXG4gICAqL1xyXG4gIGdldFN5c3RlbXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFN5c3RlbXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8U3lzdGVtc091dD4+KGAke3RoaXMudXJsfS9zeXN0ZW1zYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIHN5c3RlbSBieSB0aGUgc3BlY2lmaWVkIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBzeXN0ZW0gdG8gYmUgcmV0cmlldmVkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8U3lzdGVtT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXF1ZXN0ZWQgc3lzdGVtIGluZm9ybWF0aW9uLlxyXG4gICAqL1xyXG4gIGdldFN5c3RlbSAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8U3lzdGVtT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFN5c3RlbU91dD4+KGAke3RoaXMudXJsfS9zeXN0ZW1zLyR7aWR9YClcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kcyBhIFBPU1QgcmVxdWVzdCB0byBjcmVhdGUgb3IgdXBkYXRlIGEgc3lzdGVtLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtTeXN0ZW1Jbn0gYm9keSAtIFRoZSBkYXRhIHJlcHJlc2VudGluZyB0aGUgc3lzdGVtIHRvIGJlIGNyZWF0ZWQgb3IgdXBkYXRlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFN5c3RlbU91dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHJlc3VsdGluZyBzeXN0ZW0gb3V0cHV0IGFmdGVyIHRoZSBBUEkgcmVxdWVzdCBzdWNjZWVkcy5cclxuICAgKi9cclxuICBwb3N0U3lzdGVtIChib2R5OiBTeXN0ZW1Jbik6IE9ic2VydmFibGU8U3lzdGVtT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxTeXN0ZW1PdXQ+PihgJHt0aGlzLnVybH0vc3lzdGVtc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgc3lzdGVtIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIElEIHdpdGggdGhlIHByb3ZpZGVkIHJlcXVlc3QgYm9keSBhbmQgcmV0dXJucyB0aGUgdXBkYXRlZCBzeXN0ZW0gZGV0YWlscy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgc3lzdGVtIHRvIGJlIHVwZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtTeXN0ZW1Jbn0gYm9keSAtIFRoZSBwYXlsb2FkIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgc3lzdGVtIGRldGFpbHMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxTeXN0ZW1PdXQ+fSBBbiBvYnNlcnZhYmxlIGVtaXR0aW5nIHRoZSB1cGRhdGVkIHN5c3RlbSBkYXRhLlxyXG4gICAqL1xyXG4gIHB1dFN5c3RlbSAoaWQ6IG51bWJlciwgYm9keTogU3lzdGVtSW4pOiBPYnNlcnZhYmxlPFN5c3RlbU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxTeXN0ZW1PdXQ+PihgJHt0aGlzLnVybH0vc3lzdGVtcy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBzeXN0ZW0gZW50aXRpZXMgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdXNlZCB0byBmaWx0ZXIgb3Igc3BlY2lmeSB0aGUgc3lzdGVtIGVudGl0aWVzIHRvIHJldHJpZXZlLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8U3lzdGVtRW50aXRpZXNPdXQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHJldHJpZXZlZCBzeXN0ZW0gZW50aXRpZXMuXHJcbiAgICovXHJcbiAgZ2V0U3lzdGVtRW50aXRpZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFN5c3RlbUVudGl0aWVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFN5c3RlbUVudGl0aWVzT3V0Pj4oYCR7dGhpcy51cmx9L3N5c3RlbS1lbnRpdGllc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgc3lzdGVtIGVudGl0aWVzIGJ5IHNlbmRpbmcgdGhlIHByb3ZpZGVkIGRhdGEgdG8gdGhlIHNlcnZlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7U3lzdGVtRW50aXRpZXNJbn0gYm9keSAtIFRoZSBkYXRhIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHN5c3RlbSBlbnRpdGllcyB0byBiZSB1cGRhdGVkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8U3lzdGVtRW50aXRpZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgc3lzdGVtIGVudGl0aWVzIGRhdGEuXHJcbiAgICovXHJcbiAgcHV0U3lzdGVtRW50aXRpZXMgKGJvZHk6IFN5c3RlbUVudGl0aWVzSW4pOiBPYnNlcnZhYmxlPFN5c3RlbUVudGl0aWVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPFN5c3RlbUVudGl0aWVzT3V0Pj4oYCR7dGhpcy51cmx9L3N5c3RlbS1lbnRpdGllc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHdvcmtmbG93IGNvbmZpZ3VyYXRpb25zIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIHRoZSB3b3JrZmxvdyBjb25maWd1cmF0aW9ucy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFdvcmtmbG93Q29uZmlnc091dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHdvcmtmbG93IGNvbmZpZ3VyYXRpb25zLlxyXG4gICAqL1xyXG4gIGdldFdvcmtmbG93Q29uZmlncyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8V29ya2Zsb3dDb25maWdzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFdvcmtmbG93Q29uZmlnc091dD4+KGAke3RoaXMudXJsfS93b3JrZmxvdy1jb25maWdzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZW5kcyBhIGJhdGNoIG9mIHdvcmtmbG93IGNvbmZpZ3VyYXRpb24gZGF0YSB0byB0aGUgc2VydmVyIGZvciBwcm9jZXNzaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtXb3JrZmxvd0NvbmZpZ3NCYXRjaElufSBib2R5IC0gVGhlIGlucHV0IGRhdGEgY29udGFpbmluZyBhIGJhdGNoIG9mIHdvcmtmbG93IGNvbmZpZ3VyYXRpb25zIHRvIGJlIHNlbnQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxXb3JrZmxvd0NvbmZpZ3NPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHByb2Nlc3NlZCBiYXRjaCBvZiB3b3JrZmxvdyBjb25maWd1cmF0aW9uIGRhdGEgYXMgYSByZXNwb25zZS5cclxuICAgKi9cclxuICBwb3N0V29ya2Zsb3dDb25maWdzQmF0Y2ggKGJvZHk6IFdvcmtmbG93Q29uZmlnc0JhdGNoSW4pOiBPYnNlcnZhYmxlPFdvcmtmbG93Q29uZmlnc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFwaVN1Y2Nlc3M8V29ya2Zsb3dDb25maWdzT3V0Pj4oYCR7dGhpcy51cmx9L3dvcmtmbG93LWNvbmZpZ3MvYmF0Y2hgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbmRzIGEgUE9TVCByZXF1ZXN0IHRvIGNyZWF0ZSBhIG5ldyBjb21wYW55IGFuZCByZXR1cm5zIHRoZSBjcmVhdGVkIGNvbXBhbnkncyBkZXRhaWxzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtDb21wYW55SW59IGJvZHkgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBkZXRhaWxzIG9mIHRoZSBjb21wYW55IHRvIGJlIGNyZWF0ZWQuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb21wYW55T3V0Pn0gQW4gT2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgcmVzcG9uc2Ugd2l0aCB0aGUgY3JlYXRlZCBjb21wYW55J3MgZGV0YWlscy5cclxuICAgKi9cclxuICBwb3N0Q29tcGFueSAoYm9keTogQ29tcGFueUluKTogT2JzZXJ2YWJsZTxDb21wYW55T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxDb21wYW55T3V0Pj4oYCR7dGhpcy51cmx9L2NvbXBhbmllc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgZGV0YWlscyBvZiBhbiBleGlzdGluZyBjb21wYW55IHVzaW5nIGl0cyBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgY29tcGFueSB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtDb21wYW55SW59IGJvZHkgLSBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgY29tcGFueSBkYXRhLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q29tcGFueU91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdXBkYXRlZCBjb21wYW55IGRldGFpbHMuXHJcbiAgICovXHJcbiAgcHV0Q29tcGFueSAoaWQ6IG51bWJlciwgYm9keTogQ29tcGFueUluKTogT2JzZXJ2YWJsZTxDb21wYW55T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPENvbXBhbnlPdXQ+PihgJHt0aGlzLnVybH0vY29tcGFuaWVzLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIGEgY29tcGFueSBieSBpdHMgdW5pcXVlIGlkZW50aWZpZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvbXBhbnkgdG8gYmUgZGVsZXRlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPHt9Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGVtcHR5IG9iamVjdCB1cG9uIHN1Y2Nlc3NmdWwgZGVsZXRpb24gb3IgYW4gZXJyb3IgaWYgdGhlIG9wZXJhdGlvbiBmYWlscy5cclxuICAgKi9cclxuICBkZWxldGVDb21wYW55IChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTx7fT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8QXBpU3VjY2Vzczx7fT4+KGAke3RoaXMudXJsfS9jb21wYW5pZXMvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZldGNoZXMgcHJvZHVjdCBlbnRpdGllcyBmcm9tIHRoZSBzZXJ2ZXIgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdXNlZCB0byBtb2RpZnkgdGhlIHJlcXVlc3QgZm9yIHByb2R1Y3QgZW50aXRpZXMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQcm9kdWN0RW50aXRpZXNPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHByb2R1Y3QgZW50aXRpZXMgcmV0cmlldmVkIGZyb20gdGhlIHNlcnZlci5cclxuICAgKi9cclxuICBnZXRQcm9kdWN0RW50aXRpZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFByb2R1Y3RFbnRpdGllc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxQcm9kdWN0RW50aXRpZXNPdXQ+PihgJHt0aGlzLnVybH0vcHJvZHVjdC1lbnRpdGllc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBQVVQgcmVxdWVzdCB0byB1cGRhdGUgcHJvZHVjdCBlbnRpdGllcyBhbmQgcmV0dXJucyB0aGUgdXBkYXRlZCBlbnRpdHkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1Byb2R1Y3RFbnRpdGllc0lufSBib2R5IC0gVGhlIHBheWxvYWQgY29udGFpbmluZyB0aGUgZGF0YSB0byB1cGRhdGUgdGhlIHByb2R1Y3QgZW50aXR5LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UHJvZHVjdEVudGl0aWVzT3V0Pn0gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIHByb2R1Y3QgZW50aXR5LlxyXG4gICAqL1xyXG4gIHB1dFByb2R1Y3RFbnRpdGllcyAoYm9keTogUHJvZHVjdEVudGl0aWVzSW4pOiBPYnNlcnZhYmxlPFByb2R1Y3RFbnRpdGllc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxQcm9kdWN0RW50aXRpZXNPdXQ+PihgJHt0aGlzLnVybH0vcHJvZHVjdC1lbnRpdGllc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBjb3VudHJ5IHJlZmVyZW5jZSBwcm9kdWN0cyBiYXNlZCBvbiB0aGUgZ2l2ZW4gcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyBUaGUgcXVlcnkgcGFyYW1ldGVycyB1c2VkIHRvIGZpbHRlciBhbmQgcmV0cmlldmUgdGhlIGNvdW50cnkgcmVmZXJlbmNlIHByb2R1Y3RzLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZVByb2R1Y3RzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgZmV0Y2hlZCBjb3VudHJ5IHJlZmVyZW5jZSBwcm9kdWN0cyBkYXRhLlxyXG4gICAqL1xyXG4gIGdldENvdW50cnlSZWZlcmVuY2VQcm9kdWN0cyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZVByb2R1Y3RzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPENvdW50cnlSZWZlcmVuY2VQcm9kdWN0c091dD4+KGAke3RoaXMudXJsfS9jb3VudHJ5LXJlZmVyZW5jZS1wcm9kdWN0c2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSByZXF1ZXN0IHRvIHVwZGF0ZSBvciBjcmVhdGUgY291bnRyeSByZWZlcmVuY2UgcHJvZHVjdHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0NvdW50cnlSZWZlcmVuY2VQcm9kdWN0SW59IGJvZHkgLSBUaGUgcGF5bG9hZCBjb250YWluaW5nIHRoZSBkZXRhaWxzIG9mIHRoZSBjb3VudHJ5IHJlZmVyZW5jZSBwcm9kdWN0cyB0byBwb3N0LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZVByb2R1Y3RPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHVwZGF0ZWQgb3IgY3JlYXRlZCBjb3VudHJ5IHJlZmVyZW5jZSBwcm9kdWN0IGRhdGEuXHJcbiAgICovXHJcbiAgcG9zdENvdW50cnlSZWZlcmVuY2VQcm9kdWN0cyAoYm9keTogQ291bnRyeVJlZmVyZW5jZVByb2R1Y3RJbik6IE9ic2VydmFibGU8Q291bnRyeVJlZmVyZW5jZVByb2R1Y3RPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPENvdW50cnlSZWZlcmVuY2VQcm9kdWN0T3V0Pj4oYCR7dGhpcy51cmx9L2NvdW50cnktcmVmZXJlbmNlLXByb2R1Y3RzYCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGEgY291bnRyeSByZWZlcmVuY2UgcHJvZHVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgSUQgdXNpbmcgdGhlIHByb3ZpZGVkIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGNvdW50cnkgcmVmZXJlbmNlIHByb2R1Y3QgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7Q291bnRyeVJlZmVyZW5jZVByb2R1Y3RJbn0gYm9keSAtIFRoZSB1cGRhdGVkIGNvdW50cnkgcmVmZXJlbmNlIHByb2R1Y3QgZGF0YSB0byBiZSBzZW50IGluIHRoZSByZXF1ZXN0IGJvZHkuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5UmVmZXJlbmNlUHJvZHVjdE91dD59IEFuIG9ic2VydmFibGUgZW1pdHRpbmcgdGhlIHVwZGF0ZWQgY291bnRyeSByZWZlcmVuY2UgcHJvZHVjdC5cclxuICAgKi9cclxuICBwdXRDb3VudHJ5UmVmZXJlbmNlUHJvZHVjdHMgKGlkOiBudW1iZXIsIGJvZHk6IENvdW50cnlSZWZlcmVuY2VQcm9kdWN0SW4pOiBPYnNlcnZhYmxlPENvdW50cnlSZWZlcmVuY2VQcm9kdWN0T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPENvdW50cnlSZWZlcmVuY2VQcm9kdWN0T3V0Pj4oYCR7dGhpcy51cmx9L2NvdW50cnktcmVmZXJlbmNlLXByb2R1Y3RzLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIHRoZSBleHRyYSBjaGFyZ2UgZW50aXRpZXMgZnJvbSB0aGUgc2VydmVyIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXJzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtRdWVyeVBhcmFtc30gcGFyYW1zIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIHRoZSBleHRyYSBjaGFyZ2UgZW50aXRpZXMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFeHRyYUNoYXJnZUVudGl0aWVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBleHRyYSBjaGFyZ2UgZW50aXRpZXMgcmV0cmlldmVkIGZyb20gdGhlIHNlcnZlci5cclxuICAgKi9cclxuICBnZXRFeHRyYUNoYXJnZUVudGl0aWVzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxFeHRyYUNoYXJnZUVudGl0aWVzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPEV4dHJhQ2hhcmdlRW50aXRpZXNPdXQ+PihgJHt0aGlzLnVybH0vZXh0cmFjaGFyZ2UtZW50aXRpZXNgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgZXh0cmEgY2hhcmdlIGVudGl0aWVzIGJ5IHNlbmRpbmcgdGhlIHByb3ZpZGVkIGRhdGEgdG8gdGhlIHNlcnZlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7RXh0cmFDaGFyZ2VFbnRpdGllc0lufSBib2R5IC0gVGhlIGRhdGEgdG8gdXBkYXRlIHRoZSBleHRyYSBjaGFyZ2UgZW50aXRpZXMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFeHRyYUNoYXJnZUVudGl0aWVzT3V0Pn0gQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIGV4dHJhIGNoYXJnZSBlbnRpdGllcy5cclxuICAgKi9cclxuICBwdXRFeHRyYUNoYXJnZUVudGl0aWVzIChib2R5OiBFeHRyYUNoYXJnZUVudGl0aWVzSW4pOiBPYnNlcnZhYmxlPEV4dHJhQ2hhcmdlRW50aXRpZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8RXh0cmFDaGFyZ2VFbnRpdGllc091dD4+KGAke3RoaXMudXJsfS9leHRyYWNoYXJnZS1lbnRpdGllc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBwYXJhbWV0ZXIgY29uZmlndXJhdGlvbnMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyB0byBmaWx0ZXIgdGhlIHBhcmFtZXRlciBjb25maWd1cmF0aW9ucy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFBhcmFtZXRlckNvbmZpZ3NPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHBhcmFtZXRlciBjb25maWd1cmF0aW9ucyBkYXRhLlxyXG4gICAqL1xyXG4gIGdldFBhcmFtZXRlckNvbmZpZ3MgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPFBhcmFtZXRlckNvbmZpZ3NPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8UGFyYW1ldGVyQ29uZmlnc091dD4+KGAke3RoaXMudXJsfS9wYXJhbWV0ZXItY29uZmlnc2AsIHsgcGFyYW1zIH0pXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VuZHMgYSBQT1NUIHJlcXVlc3QgdG8gY3JlYXRlIG9yIHVwZGF0ZSBhIHBhcmFtZXRlciBjb25maWd1cmF0aW9uLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtQYXJhbWV0ZXJDb25maWdJbn0gYm9keSAtIFRoZSBpbnB1dCBkYXRhIG9iamVjdCBjb250YWluaW5nIHRoZSBwYXJhbWV0ZXIgY29uZmlndXJhdGlvbiB0byBiZSBzZW50IGluIHRoZSByZXF1ZXN0IGJvZHkuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxQYXJhbWV0ZXJDb25maWdPdXQ+fSBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHNlcnZlcidzIHJlc3BvbnNlIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgb3IgbmV3bHkgY3JlYXRlZCBwYXJhbWV0ZXIgY29uZmlndXJhdGlvbi5cclxuICAgKi9cclxuICBwb3N0UGFyYW1ldGVyQ29uZmlnIChib2R5OiBQYXJhbWV0ZXJDb25maWdJbik6IE9ic2VydmFibGU8UGFyYW1ldGVyQ29uZmlnT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxQYXJhbWV0ZXJDb25maWdPdXQ+PihgJHt0aGlzLnVybH0vcGFyYW1ldGVyLWNvbmZpZ3NgLCBib2R5KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYSBwYXJhbWV0ZXIgd2l0aCB0aGUgcHJvdmlkZWQgSUQgYW5kIGlucHV0IGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHBhcmFtZXRlciBjb25maWd1cmF0aW9uIHRvIGJlIHVwZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtQYXJhbWV0ZXJDb25maWdJbn0gYm9keSAtIFRoZSBpbnB1dCBkYXRhIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgY29uZmlndXJhdGlvbiBmb3IgdGhlIHBhcmFtZXRlci5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFBhcmFtZXRlckNvbmZpZ091dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdXBkYXRlZCBwYXJhbWV0ZXIgY29uZmlndXJhdGlvbi5cclxuICAgKi9cclxuICBwdXRQYXJhbWV0ZXJDb25maWcgKGlkOiBudW1iZXIsIGJvZHk6IFBhcmFtZXRlckNvbmZpZ0luKTogT2JzZXJ2YWJsZTxQYXJhbWV0ZXJDb25maWdPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8UGFyYW1ldGVyQ29uZmlnT3V0Pj4oYCR7dGhpcy51cmx9L3BhcmFtZXRlci1jb25maWdzLyR7aWR9YCwgYm9keSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIGEgcGFyYW1ldGVyIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIGJ5IGl0cyBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcGFyYW1ldGVyIGNvbmZpZ3VyYXRpb24gdG8gYmUgZGVsZXRlZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFBhcmFtZXRlckNvbmZpZ091dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgZGVsZXRlZCBwYXJhbWV0ZXIgY29uZmlndXJhdGlvbiBkYXRhLlxyXG4gICAqL1xyXG4gIGRlbGV0ZVBhcmFtZXRlckNvbmZpZyAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8UGFyYW1ldGVyQ29uZmlnT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxBcGlTdWNjZXNzPFBhcmFtZXRlckNvbmZpZ091dD4+KGAke3RoaXMudXJsfS9wYXJhbWV0ZXItY29uZmlncy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgbGlzdCBvZiBURFggYWNjb3VudCBzZXR0aW5ncyBiYXNlZCBvbiB0aGUgZ2l2ZW4gcXVlcnkgcGFyYW1ldGVycy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFF1ZXJ5IHBhcmFtZXRlcnMgdXNlZCB0byBmaWx0ZXIgb3IgcGFnaW5hdGUgdGhlIHJlc3VsdHMuXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8VERYQWNjb3VudHNTZXR0aW5nc091dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgbGlzdCBvZiBURFggYWNjb3VudCBzZXR0aW5ncy5cclxuICAgKi9cclxuICBnZXRURFhBY2NvdW50c1NldHRpbmdzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxURFhBY2NvdW50c1NldHRpbmdzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFREWEFjY291bnRzU2V0dGluZ3NPdXQ+PihgJHt0aGlzLnVybH0vdGR4LWFjY291bnQtc2V0dGluZ3NgLCB7IHBhcmFtcyB9KVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBhIHNpbmdsZSBURFggYWNjb3VudCBzZXR0aW5nIGJ5IGl0cyBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgVERYIGFjY291bnQgc2V0dGluZyB0byBiZSByZXRyaWV2ZWQuXHJcbiAgICogQHJldHVybnMge09ic2VydmFibGU8VERYQWNjb3VudFNldHRpbmdzT3V0Pn0gQW4gb2JzZXJ2YWJsZSBjb250YWluaW5nIHRoZSByZXF1ZXN0ZWQgVERYIGFjY291bnQgc2V0dGluZy5cclxuICAgKi9cclxuICBnZXRURFhBY2NvdW50U2V0dGluZ3MgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFREWEFjY291bnRTZXR0aW5nc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxURFhBY2NvdW50U2V0dGluZ3NPdXQ+PihgJHt0aGlzLnVybH0vdGR4LWFjY291bnQtc2V0dGluZ3MvJHtpZH1gKVxyXG4gICAgICAucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBuZXcgVERYIGFjY291bnQgc2V0dGluZyB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtURFhBY2NvdW50U2V0dGluZ3NJbn0gYm9keSAtIFRoZSBkYXRhIHVzZWQgdG8gY3JlYXRlIHRoZSBuZXcgVERYIGFjY291bnQgc2V0dGluZy5cclxuICAgKiBAcmV0dXJucyB7T2JzZXJ2YWJsZTxURFhBY2NvdW50U2V0dGluZ3NPdXQ+fSBBbiBvYnNlcnZhYmxlIGNvbnRhaW5pbmcgdGhlIG5ld2x5IGNyZWF0ZWQgVERYIGFjY291bnQgc2V0dGluZy5cclxuICAgKi9cclxuICBwb3N0VERYQWNjb3VudFNldHRpbmdzIChib2R5OlREWEFjY291bnRTZXR0aW5nc0luKTogT2JzZXJ2YWJsZTxURFhBY2NvdW50U2V0dGluZ3NPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPFREWEFjY291bnRTZXR0aW5nc091dD4+KGAke3RoaXMudXJsfS90ZHgtYWNjb3VudC1zZXR0aW5nc2AsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBhbiBleGlzdGluZyBURFggYWNjb3VudCBzZXR0aW5nIGlkZW50aWZpZWQgYnkgaXRzIElELlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBURFggYWNjb3VudCBzZXR0aW5nIHRvIGJlIHVwZGF0ZWQuXHJcbiAgICogQHBhcmFtIHtURFhBY2NvdW50U2V0dGluZ3NJbn0gYm9keSAtIFRoZSB1cGRhdGVkIGRhdGEgZm9yIHRoZSBURFggYWNjb3VudCBzZXR0aW5nLlxyXG4gICAqIEByZXR1cm5zIHtPYnNlcnZhYmxlPFREWEFjY291bnRTZXR0aW5nc091dD59IEFuIG9ic2VydmFibGUgY29udGFpbmluZyB0aGUgdXBkYXRlZCBURFggYWNjb3VudCBzZXR0aW5nLlxyXG4gICAqL1xyXG4gIHB1dFREWEFjY291bnRTZXR0aW5ncyAoaWQ6IG51bWJlciwgYm9keTpURFhBY2NvdW50U2V0dGluZ3NJbik6IE9ic2VydmFibGU8VERYQWNjb3VudFNldHRpbmdzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPFREWEFjY291bnRTZXR0aW5nc091dD4+KGAke3RoaXMudXJsfS90ZHgtYWNjb3VudC1zZXR0aW5ncy8ke2lkfWAsIGJvZHkpXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBlbXBsb3llZXMgb2YgYSBzcGVjaWZpYyBsb2NhdGlvbiB1c2luZyBhIHByb3ZpZGVkIHRva2VuLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHBhcmFtcyAtIElucHV0IHBhcmFtZXRlcnMgZm9yIHRoZSByZXF1ZXN0LCBkZWZpbmVkIGJ5IHRoZSBgTG9jYXRpb25FbXBsb3llZXNJbmAgaW50ZXJmYWNlLlxyXG4gICAqIEByZXR1cm5zIEFuIGBPYnNlcnZhYmxlPExvY2F0aW9uRW1wbG95ZWVzT3V0PmAgdGhhdCBlbWl0cyB0aGUgZW1wbG95ZWVzXHJcbiAgICogYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBsb2NhdGlvbi5cclxuICAgKiBAcmV0dXJucyBUaGUgcmVzcG9uc2UgdHlwZSBpcyBgQXBpU3VjY2VzczxMb2NhdGlvbkVtcGxveWVlc091dD5gLCBmcm9tIHdoaWNoIHRoZSBgZGF0YWAgZmllbGQgaXMgZXh0cmFjdGVkLlxyXG4gICAqL1xyXG4gIGdldExvY2F0aW9uRW1wbG95ZWVzQnlUb2tlbiAocGFyYW1zOiB7IHRva2VuOiBzdHJpbmcsIHF1ZXJ5UGFyYW1zOiBRdWVyeVBhcmFtcyB9KTogT2JzZXJ2YWJsZTxMb2NhdGlvbkVtcGxveWVlc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxMb2NhdGlvbkVtcGxveWVlc091dD4+KGAke3RoaXMudXJsfS9sb2NhdGlvbi1lbXBsb3llZXNgLCB7XHJcbiAgICAgIHBhcmFtczogcGFyYW1zLnF1ZXJ5UGFyYW1zLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3BhcmFtcy50b2tlbn1gXHJcbiAgICAgIH1cclxuICAgIH0pLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -52,4 +52,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
52
52
|
type: Inject,
|
|
53
53
|
args: ['env']
|
|
54
54
|
}] }, { type: i1.CookieService }, { type: i2.HttpClient }] });
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWNvbXBvc2l0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHBlcnRlYW0tbXgvbmd4LXNlcnZpY2VzL3NyYy9saWIvYXBpcy9hcGktY29tcG9zaXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUlsRCxPQUFPLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFBOzs7O0FBT3RDLE1BQU0sT0FBTyxxQkFBcUI7SUFFUDtJQUNmO0lBQ0E7SUFIVixZQUN5QixZQUF5QixFQUN4QyxNQUFxQixFQUNyQixJQUFnQjtRQUZELGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3hDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUN2QixDQUFDO0lBRUo7Ozs7T0FJRztJQUNILElBQUksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsSUFBSSxFQUFFLENBQUE7SUFDbEQsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFFLEVBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBMEIsR0FBRyxJQUFJLENBQUMsR0FBRyxjQUFjLEVBQUUsRUFBRSxDQUFDO2FBQ3pFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG9CQUFvQixDQUFFLE1BQW1CO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQThDLEdBQUcsSUFBSSxDQUFDLEdBQUcscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQzthQUM1RyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO3dHQXBDVSxxQkFBcUIsa0JBRXRCLEtBQUs7NEdBRkoscUJBQXFCLGNBRnBCLE1BQU07OzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUdJLE1BQU07MkJBQUMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXHJcbmltcG9ydCB7IEFwaVN1Y2Nlc3MsIFF1ZXJ5UGFyYW1zIH0gZnJvbSAnLi9tb2RlbHMvYXBpLm1vZGVscydcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uL25neC1zZXJ2aWNlcy5tb2RlbHMnXHJcbmltcG9ydCB7IG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnXHJcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICduZ3gtY29va2llLXNlcnZpY2UnXHJcbmltcG9ydCB7IENvbXBvc2l0aW9uQ291bnRyeVJlZmVyZW5jZXNPdXQsIFNoaXBtZW50T3V0IH0gZnJvbSAnLi9tb2RlbHMvYXBpLWNvbXBvc2l0aW9uLnR5cGVzJ1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXBpQ29tcG9zaXRpb25TZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvciAoXHJcbiAgICBASW5qZWN0KCdlbnYnKSBwcml2YXRlIGVudmlyb25tZW50czogRW52aXJvbm1lbnQsXHJcbiAgICBwcml2YXRlIGNvb2tpZTogQ29va2llU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxyXG4gICkge31cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBBUEkgc2VjdXJpdHkgVVJMIGZyb20gdGhlIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBBUEkgc2VjdXJpdHkgVVJMLlxyXG4gICAqL1xyXG4gIGdldCB1cmwgKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5lbnZpcm9ubWVudHMuYXBpQ29tcG9zaXRpb25VcmwgPz8gJydcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBzaGlwbWVudCBkZXRhaWxzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBzaGlwbWVudCBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgc2hpcG1lbnQgdG8gcmV0cmlldmUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxTaGlwbWVudE91dD59IEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgZGV0YWlscyBvZiB0aGUgc2hpcG1lbnQuXHJcbiAgICovXHJcbiAgZ2V0U2hpcG1lbnQgKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPFNoaXBtZW50T3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPFNoaXBtZW50T3V0Pj4oYCR7dGhpcy51cmx9L3NoaXBtZW50cy8ke2lkfWApXHJcbiAgICAgIC5waXBlKG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyB0aGUgY291bnRyeSByZWZlcmVuY2VzIGRhdGEgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBUaGUgcXVlcnkgcGFyYW1ldGVycyBmb3IgdGhlIEFQSSByZXF1ZXN0LlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q29tcG9zaXRpb25Db3VudHJ5UmVmZXJlbmNlc091dD59IC0gQW4gb2JzZXJ2YWJsZSBlbWl0dGluZyB0aGUgY291bnRyeSByZWZlcmVuY2VzLlxyXG4gICAqL1xyXG4gIGdldENvdW50cnlSZWZlcmVuY2VzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxDb21wb3NpdGlvbkNvdW50cnlSZWZlcmVuY2VzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPENvbXBvc2l0aW9uQ291bnRyeVJlZmVyZW5jZXNPdXQ+PihgJHt0aGlzLnVybH0vY291bnRyeS1yZWZlcmVuY2VzYCwgeyBwYXJhbXMgfSlcclxuICAgICAgLnBpcGUobWFwKCh7IGRhdGEgfSkgPT4gZGF0YSkpXHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -154,4 +154,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
154
154
|
type: Inject,
|
|
155
155
|
args: ['env']
|
|
156
156
|
}] }, { type: i1.HttpClient }] });
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWN1c3RvbXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V4cGVydGVhbS1teC9uZ3gtc2VydmljZXMvc3JjL2xpYi9hcGlzL2FwaS1jdXN0b21zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFJbEQsT0FBTyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQTs7O0FBY3RDLE1BQU0sT0FBTyxpQkFBaUI7SUFFSDtJQUNmO0lBRlYsWUFDeUIsWUFBeUIsRUFDeEMsSUFBZ0I7UUFERCxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN4QyxTQUFJLEdBQUosSUFBSSxDQUFZO0lBQ3RCLENBQUM7SUFFTDs7OztPQUlHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUE7SUFDOUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFFLE1BQW1CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsU0FBUyxFQUFFO1lBQ3BCLE1BQU07U0FDUCxDQUNGLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUN4QixDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFFLE1BQW1CO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsWUFBWSxFQUFFO1lBQ3ZCLE1BQU07U0FDUCxDQUNGLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFD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SUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsR0FBRyxhQUFhLEVBQUUsRUFBRSxFQUM1QixJQUFJLENBQ0wsQ0FBQyxJQUFJLENBQ0osR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQ3hCLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsT0FBTyxDQUFFLEVBQVMsRUFBRSxJQUFhO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLEVBQUUsRUFDekIsSUFBSSxDQUNMLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUN4QixDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBRSxNQUFtQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxHQUFHLGlCQUFpQixFQUM1QjtZQUNFLE1BQU07U0FDUCxDQUNGLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUN4QixDQUFBO0lBQ0gsQ0FBQzt3R0FoTlUsaUJBQWlCLGtCQUVsQixLQUFLOzRHQUZKLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFHSSxNQUFNOzJCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi9uZ3gtc2VydmljZXMubW9kZWxzJ1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgQXBpU3VjY2VzcywgUXVlcnlQYXJhbXMgfSBmcm9tICcuL21vZGVscy9hcGkubW9kZWxzJ1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcydcbmltcG9ydCB7XG4gIENhdGFsb2dzT3V0LCBDb3VudHJ5R3JvdXBzT3V0LFxuICBDcml0ZXJpYUluLFxuICBDcml0ZXJpYU91dCxcbiAgRmllbGRzT3V0LFxuICBPdmVycmlkZXNPdXQsIFJ1bGVDcml0ZXJpYUluLCBSdWxlSW4sXG4gIFJ1bGVPdXQsIFJ1bGVzQnlDcml0ZXJpYU91dCwgUnVsZXNJbixcbiAgUnVsZXNPdXRcbn0gZnJvbSAnLi9tb2RlbHMvYXBpLWN1c3RvbXMudHlwZXMnXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFwaUN1c3RvbXNTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IgKFxuICAgIEBJbmplY3QoJ2VudicpIHByaXZhdGUgZW52aXJvbm1lbnRzOiBFbnZpcm9ubWVudCxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnRcbiAgKSB7IH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBVUkwgZm9yIHRoZSBjYXNoIG9wZXJhdGlvbnMgQVBJIGZyb20gdGhlIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb25zLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVUkwgb2YgdGhlIGNhc2ggb3BlcmF0aW9ucyBBUEkuXG4gICAqL1xuICBnZXQgdXJsICgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50cy5hcGlDdXN0b21zVXJsID8/ICcnXG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgYXZhaWxhYmxlIGZpZWxkcyBmb3IgYSBnaXZlbiBsZXZlbC5cbiAgICpcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxGaWVsZHNPdXQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGxpc3Qgb2YgZmllbGRzLlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBnZXRGaWVsZHMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEZpZWxkc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8RmllbGRzT3V0Pj4oXG4gICAgICBgJHt0aGlzLnVybH0vZmllbGRzYCwge1xuICAgICAgICBwYXJhbXNcbiAgICAgIH1cbiAgICApLnBpcGUoXG4gICAgICBtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgb3ZlcnJpZGUgY29uZmlndXJhdGlvbnMgZm9yIGEgZ2l2ZW4gbGV2ZWwuXG4gICAqXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8T3ZlcnJpZGVzT3V0Pn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBvdmVycmlkZXMgY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgZ2V0T3ZlcnJpZGVzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxPdmVycmlkZXNPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPE92ZXJyaWRlc091dD4+KFxuICAgICAgYCR7dGhpcy51cmx9L292ZXJyaWRlc2AsIHtcbiAgICAgICAgcGFyYW1zXG4gICAgICB9XG4gICAgKS5waXBlKFxuICAgICAgbWFwKCh7IGRhdGEgfSkgPT4gZGF0YSlcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgY2F0YWxvZ3MgdXNlZCBpbiBjdXN0b21zIG9wZXJhdGlvbnMuXG4gICAqXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q2F0YWxvZ3NPdXQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGNhdGFsb2dzLlxuICAgKi9cbiAgZ2V0Q2F0YWxvZ3MgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPENhdGFsb2dzT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxDYXRhbG9nc091dD4+KFxuICAgICAgYCR7dGhpcy51cmx9L2NhdGFsb2dzYCwge1xuICAgICAgICBwYXJhbXNcbiAgICAgIH1cbiAgICApLnBpcGUoXG4gICAgICBtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgcnVsZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIEBwYXJhbSB7UXVlcnlQYXJhbXN9IHBhcmFtcyAtIFF1ZXJ5IHBhcmFtZXRlcnMgdG8gZmlsdGVyIHRoZSBydWxlcy5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSdWxlc091dD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgbGlzdCBvZiBydWxlcy5cbiAgICovXG4gIGdldFJ1bGVzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxSdWxlc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8UnVsZXNPdXQ+PihcbiAgICAgIGAke3RoaXMudXJsfS9ydWxlc2AsXG4gICAgICB7IHBhcmFtcyB9XG4gICAgKS5waXBlKFxuICAgICAgbWFwKCh7IGRhdGEgfSkgPT4gZGF0YSlcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBkZXRhaWxzIG9mIGEgc3BlY2lmaWMgcnVsZSBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgcnVsZS5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSdWxlT3V0Pn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBydWxlIGRldGFpbHMuXG4gICAqL1xuICBnZXRSdWxlIChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxSdWxlT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxSdWxlT3V0Pj4oXG4gICAgICBgJHt0aGlzLnVybH0vcnVsZXMvJHtpZH1gXG4gICAgKS5waXBlKFxuICAgICAgbWFwKCh7IGRhdGEgfSkgPT4gZGF0YSlcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjcml0ZXJpYS5cbiAgICpcbiAgICogQHBhcmFtIHtDcml0ZXJpYUlufSBib2R5IC0gVGhlIGNyaXRlcmlhIHBheWxvYWQgdG8gY3JlYXRlLlxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENyaXRlcmlhT3V0Pn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBjcmVhdGVkIGNyaXRlcmlhLlxuICAgKi9cbiAgcG9zdENyaXRlcmlhIChib2R5OiBDcml0ZXJpYUluKTogT2JzZXJ2YWJsZTxDcml0ZXJpYU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPENyaXRlcmlhT3V0Pj4oYCR7dGhpcy51cmx9L2NyaXRlcmlhYCxcbiAgICAgIGJvZHlcbiAgICApLnBpcGUoXG4gICAgICBtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHJ1bGUuXG4gICAqXG4gICAqIEBwYXJhbSB7UnVsZUlufSBib2R5IC0gVGhlIHJ1bGUgcGF5bG9hZCB0byBjcmVhdGUuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UnVsZU91dD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgY3JlYXRlZCBydWxlLlxuICAgKi9cbiAgcG9zdFJ1bGVzIChib2R5OiBSdWxlSW4pOiBPYnNlcnZhYmxlPFJ1bGVPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxSdWxlT3V0Pj4oYCR7dGhpcy51cmx9L3J1bGVzYCxcbiAgICAgIGJvZHlcbiAgICApLnBpcGUoXG4gICAgICBtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgcnVsZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gY3JpdGVyaWEuXG4gICAqXG4gICAqIEBwYXJhbSB7UnVsZUNyaXRlcmlhSW59IHBhcmFtcyAtIENyaXRlcmlhIHVzZWQgdG8gc2VhcmNoIGZvciBtYXRjaGluZyBydWxlcy5cbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSdWxlc0J5Q3JpdGVyaWFPdXQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGxpc3Qgb2YgbWF0Y2hpbmcgcnVsZXMuXG4gICAqL1xuICBwb3N0UnVsZXNCeUNyaXRlcmlhIChwYXJhbXM6IFJ1bGVDcml0ZXJpYUluKTogT2JzZXJ2YWJsZTxSdWxlc0J5Q3JpdGVyaWFPdXQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxSdWxlc0J5Q3JpdGVyaWFPdXQ+PihcbiAgICAgIGAke3RoaXMudXJsfS9ydWxlcy9ieS1jcml0ZXJpYWAsXG4gICAgICBwYXJhbXNcbiAgICApLnBpcGUoXG4gICAgICBtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGVzIGEgc3BlY2lmaWMgcnVsZSBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgcnVsZSB0byBlbmFibGUuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8e30+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gZW1wdHkgYXJyYXkgb24gc3VjY2Vzcy5cbiAgICovXG4gIHB1dFJ1bGVBY3RpdmF0ZSAoaWQ6bnVtYmVyKTogT2JzZXJ2YWJsZTx7fT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8e30+PihcbiAgICAgIGAke3RoaXMudXJsfS9ydWxlcy8ke2lkfS9hY3RpdmF0ZWAsIG51bGxcbiAgICApLnBpcGUoXG4gICAgICBtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNhYmxlcyAoZGVsZXRlcykgYSBzcGVjaWZpYyBydWxlIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIElEIG9mIHRoZSBydWxlIHRvIGRpc2FibGUuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8W10+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gZW1wdHkgYXJyYXkgb24gc3VjY2Vzcy5cbiAgICovXG4gIGRlbGV0ZVJ1bGUgKGlkOm51bWJlcik6IE9ic2VydmFibGU8e30+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxBcGlTdWNjZXNzPHt9Pj4oXG4gICAgICBgJHt0aGlzLnVybH0vcnVsZXMvJHtpZH1gXG4gICAgKS5waXBlKFxuICAgICAgbWFwKCh7IGRhdGEgfSkgPT4gZGF0YSlcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBleGlzdGluZyBjcml0ZXJpYSBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgY3JpdGVyaWEuXG4gICAqIEBwYXJhbSB7Q3JpdGVyaWFJbn0gYm9keSAtIFRoZSB1cGRhdGVkIGNyaXRlcmlhIHBheWxvYWQuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q3JpdGVyaWFPdXQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIHVwZGF0ZWQgY3JpdGVyaWEuXG4gICAqL1xuICBwdXRDcml0ZXJpYSAoaWQ6bnVtYmVyLCBib2R5OiBDcml0ZXJpYUluKTogT2JzZXJ2YWJsZTxDcml0ZXJpYU91dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8Q3JpdGVyaWFPdXQ+PihcbiAgICAgIGAke3RoaXMudXJsfS9jcml0ZXJpYS8ke2lkfWAsXG4gICAgICBib2R5XG4gICAgKS5waXBlKFxuICAgICAgbWFwKCh7IGRhdGEgfSkgPT4gZGF0YSlcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBhbiBleGlzdGluZyBydWxlIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGlkIC0gVGhlIElEIG9mIHRoZSBydWxlLlxuICAgKiBAcGFyYW0ge1J1bGVzSW59IGJvZHkgLSBUaGUgdXBkYXRlZCBydWxlIHBheWxvYWQuXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UnVsZU91dD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdXBkYXRlZCBydWxlLlxuICAgKi9cbiAgcHV0UnVsZSAoaWQ6bnVtYmVyLCBib2R5OiBSdWxlc0luKTogT2JzZXJ2YWJsZTxSdWxlT3V0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxSdWxlT3V0Pj4oXG4gICAgICBgJHt0aGlzLnVybH0vcnVsZXMvJHtpZH1gLFxuICAgICAgYm9keVxuICAgICkucGlwZShcbiAgICAgIG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiBjb3VudHJ5IGdyb3VwcyB1c2VkIGluIGN1c3RvbXMgb3BlcmF0aW9ucy5cbiAgICpcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDb3VudHJ5R3JvdXBzT3V0Pn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBsaXN0IG9mIGNvdW50cnkgZ3JvdXBzLlxuICAgKi9cbiAgZ2V0Q291bnRyeUdyb3VwcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8Q291bnRyeUdyb3Vwc091dD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q291bnRyeUdyb3Vwc091dD4+KFxuICAgICAgYCR7dGhpcy51cmx9L2NvdW50cnktZ3JvdXBzYCxcbiAgICAgIHtcbiAgICAgICAgcGFyYW1zXG4gICAgICB9XG4gICAgKS5waXBlKFxuICAgICAgbWFwKCh7IGRhdGEgfSkgPT4gZGF0YSlcbiAgICApXG4gIH1cbn1cbiJdfQ==
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWN1c3RvbXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V4cGVydGVhbS1teC9uZ3gtc2VydmljZXMvc3JjL2xpYi9hcGlzL2FwaS1jdXN0b21zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFJbEQsT0FBTyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQTs7O0FBY3RDLE1BQU0sT0FBTyxpQkFBaUI7SUFFSDtJQUNmO0lBRlYsWUFDeUIsWUFBeUIsRUFDeEMsSUFBZ0I7UUFERCxpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN4QyxTQUFJLEdBQUosSUFBSSxDQUFZO0lBQ3RCLENBQUM7SUFFTDs7OztPQUlHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUE7SUFDOUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxDQUFFLE1BQW1CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsU0FBUyxFQUFFO1lBQ3BCLE1BQU07U0FDUCxDQUNGLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUN4QixDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUFFLE1BQW1CO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsWUFBWSxFQUFFO1lBQ3ZCLE1BQU07U0FDUCxDQUNGLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFD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SUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsR0FBRyxhQUFhLEVBQUUsRUFBRSxFQUM1QixJQUFJLENBQ0wsQ0FBQyxJQUFJLENBQ0osR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQ3hCLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsT0FBTyxDQUFFLEVBQVMsRUFBRSxJQUFhO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLEdBQUcsVUFBVSxFQUFFLEVBQUUsRUFDekIsSUFBSSxDQUNMLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUN4QixDQUFBO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBRSxNQUFtQjtRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxHQUFHLGlCQUFpQixFQUM1QjtZQUNFLE1BQU07U0FDUCxDQUNGLENBQUMsSUFBSSxDQUNKLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUN4QixDQUFBO0lBQ0gsQ0FBQzt3R0FoTlUsaUJBQWlCLGtCQUVsQixLQUFLOzRHQUZKLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFHSSxNQUFNOzJCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gJy4uL25neC1zZXJ2aWNlcy5tb2RlbHMnXHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcclxuaW1wb3J0IHsgQXBpU3VjY2VzcywgUXVlcnlQYXJhbXMgfSBmcm9tICcuL21vZGVscy9hcGkubW9kZWxzJ1xyXG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJ1xyXG5pbXBvcnQge1xyXG4gIENhdGFsb2dzT3V0LCBDb3VudHJ5R3JvdXBzT3V0LFxyXG4gIENyaXRlcmlhSW4sXHJcbiAgQ3JpdGVyaWFPdXQsXHJcbiAgRmllbGRzT3V0LFxyXG4gIE92ZXJyaWRlc091dCwgUnVsZUNyaXRlcmlhSW4sIFJ1bGVJbixcclxuICBSdWxlT3V0LCBSdWxlc0J5Q3JpdGVyaWFPdXQsIFJ1bGVzSW4sXHJcbiAgUnVsZXNPdXRcclxufSBmcm9tICcuL21vZGVscy9hcGktY3VzdG9tcy50eXBlcydcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFwaUN1c3RvbXNTZXJ2aWNlIHtcclxuICBjb25zdHJ1Y3RvciAoXHJcbiAgICBASW5qZWN0KCdlbnYnKSBwcml2YXRlIGVudmlyb25tZW50czogRW52aXJvbm1lbnQsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnRcclxuICApIHsgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIFVSTCBmb3IgdGhlIGNhc2ggb3BlcmF0aW9ucyBBUEkgZnJvbSB0aGUgZW52aXJvbm1lbnQgY29uZmlndXJhdGlvbnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVUkwgb2YgdGhlIGNhc2ggb3BlcmF0aW9ucyBBUEkuXHJcbiAgICovXHJcbiAgZ2V0IHVybCAoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmVudmlyb25tZW50cy5hcGlDdXN0b21zVXJsID8/ICcnXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaGVzIHRoZSBhdmFpbGFibGUgZmllbGRzIGZvciBhIGdpdmVuIGxldmVsLlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxGaWVsZHNPdXQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGxpc3Qgb2YgZmllbGRzLlxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKi9cclxuICBnZXRGaWVsZHMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPEZpZWxkc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxGaWVsZHNPdXQ+PihcclxuICAgICAgYCR7dGhpcy51cmx9L2ZpZWxkc2AsIHtcclxuICAgICAgICBwYXJhbXNcclxuICAgICAgfVxyXG4gICAgKS5waXBlKFxyXG4gICAgICBtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIG92ZXJyaWRlIGNvbmZpZ3VyYXRpb25zIGZvciBhIGdpdmVuIGxldmVsLlxyXG4gICAqXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxPdmVycmlkZXNPdXQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIG92ZXJyaWRlcyBjb25maWd1cmF0aW9uLlxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKi9cclxuICBnZXRPdmVycmlkZXMgKHBhcmFtczogUXVlcnlQYXJhbXMpOiBPYnNlcnZhYmxlPE92ZXJyaWRlc091dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxPdmVycmlkZXNPdXQ+PihcclxuICAgICAgYCR7dGhpcy51cmx9L292ZXJyaWRlc2AsIHtcclxuICAgICAgICBwYXJhbXNcclxuICAgICAgfVxyXG4gICAgKS5waXBlKFxyXG4gICAgICBtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyB0aGUgY2F0YWxvZ3MgdXNlZCBpbiBjdXN0b21zIG9wZXJhdGlvbnMuXHJcbiAgICpcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENhdGFsb2dzT3V0Pn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBjYXRhbG9ncy5cclxuICAgKi9cclxuICBnZXRDYXRhbG9ncyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8Q2F0YWxvZ3NPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8Q2F0YWxvZ3NPdXQ+PihcclxuICAgICAgYCR7dGhpcy51cmx9L2NhdGFsb2dzYCwge1xyXG4gICAgICAgIHBhcmFtc1xyXG4gICAgICB9XHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgcnVsZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHF1ZXJ5IHBhcmFtZXRlcnMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1F1ZXJ5UGFyYW1zfSBwYXJhbXMgLSBRdWVyeSBwYXJhbWV0ZXJzIHRvIGZpbHRlciB0aGUgcnVsZXMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSdWxlc091dD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgbGlzdCBvZiBydWxlcy5cclxuICAgKi9cclxuICBnZXRSdWxlcyAocGFyYW1zOiBRdWVyeVBhcmFtcyk6IE9ic2VydmFibGU8UnVsZXNPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFwaVN1Y2Nlc3M8UnVsZXNPdXQ+PihcclxuICAgICAgYCR7dGhpcy51cmx9L3J1bGVzYCxcclxuICAgICAgeyBwYXJhbXMgfVxyXG4gICAgKS5waXBlKFxyXG4gICAgICBtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIHRoZSBkZXRhaWxzIG9mIGEgc3BlY2lmaWMgcnVsZSBieSBpdHMgSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHJ1bGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSdWxlT3V0Pn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBydWxlIGRldGFpbHMuXHJcbiAgICovXHJcbiAgZ2V0UnVsZSAoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8UnVsZU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXBpU3VjY2VzczxSdWxlT3V0Pj4oXHJcbiAgICAgIGAke3RoaXMudXJsfS9ydWxlcy8ke2lkfWBcclxuICAgICkucGlwZShcclxuICAgICAgbWFwKCh7IGRhdGEgfSkgPT4gZGF0YSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBuZXcgY3JpdGVyaWEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0NyaXRlcmlhSW59IGJvZHkgLSBUaGUgY3JpdGVyaWEgcGF5bG9hZCB0byBjcmVhdGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDcml0ZXJpYU91dD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgY3JlYXRlZCBjcml0ZXJpYS5cclxuICAgKi9cclxuICBwb3N0Q3JpdGVyaWEgKGJvZHk6IENyaXRlcmlhSW4pOiBPYnNlcnZhYmxlPENyaXRlcmlhT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxDcml0ZXJpYU91dD4+KGAke3RoaXMudXJsfS9jcml0ZXJpYWAsXHJcbiAgICAgIGJvZHlcclxuICAgICkucGlwZShcclxuICAgICAgbWFwKCh7IGRhdGEgfSkgPT4gZGF0YSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgYSBuZXcgcnVsZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7UnVsZUlufSBib2R5IC0gVGhlIHJ1bGUgcGF5bG9hZCB0byBjcmVhdGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSdWxlT3V0Pn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSBjcmVhdGVkIHJ1bGUuXHJcbiAgICovXHJcbiAgcG9zdFJ1bGVzIChib2R5OiBSdWxlSW4pOiBPYnNlcnZhYmxlPFJ1bGVPdXQ+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxBcGlTdWNjZXNzPFJ1bGVPdXQ+PihgJHt0aGlzLnVybH0vcnVsZXNgLFxyXG4gICAgICBib2R5XHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgcnVsZXMgdGhhdCBtYXRjaCB0aGUgZ2l2ZW4gY3JpdGVyaWEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1J1bGVDcml0ZXJpYUlufSBwYXJhbXMgLSBDcml0ZXJpYSB1c2VkIHRvIHNlYXJjaCBmb3IgbWF0Y2hpbmcgcnVsZXMuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxSdWxlc0J5Q3JpdGVyaWFPdXQ+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgdGhlIGxpc3Qgb2YgbWF0Y2hpbmcgcnVsZXMuXHJcbiAgICovXHJcbiAgcG9zdFJ1bGVzQnlDcml0ZXJpYSAocGFyYW1zOiBSdWxlQ3JpdGVyaWFJbik6IE9ic2VydmFibGU8UnVsZXNCeUNyaXRlcmlhT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8QXBpU3VjY2VzczxSdWxlc0J5Q3JpdGVyaWFPdXQ+PihcclxuICAgICAgYCR7dGhpcy51cmx9L3J1bGVzL2J5LWNyaXRlcmlhYCxcclxuICAgICAgcGFyYW1zXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbmFibGVzIGEgc3BlY2lmaWMgcnVsZSBieSBpdHMgSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHJ1bGUgdG8gZW5hYmxlLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8e30+fSBBbiBPYnNlcnZhYmxlIHRoYXQgZW1pdHMgYW4gZW1wdHkgYXJyYXkgb24gc3VjY2Vzcy5cclxuICAgKi9cclxuICBwdXRSdWxlQWN0aXZhdGUgKGlkOm51bWJlcik6IE9ic2VydmFibGU8e30+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PEFwaVN1Y2Nlc3M8e30+PihcclxuICAgICAgYCR7dGhpcy51cmx9L3J1bGVzLyR7aWR9L2FjdGl2YXRlYCwgbnVsbFxyXG4gICAgKS5waXBlKFxyXG4gICAgICBtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKVxyXG4gICAgKVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGlzYWJsZXMgKGRlbGV0ZXMpIGEgc3BlY2lmaWMgcnVsZSBieSBpdHMgSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHJ1bGUgdG8gZGlzYWJsZS5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFtdPn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIGFuIGVtcHR5IGFycmF5IG9uIHN1Y2Nlc3MuXHJcbiAgICovXHJcbiAgZGVsZXRlUnVsZSAoaWQ6bnVtYmVyKTogT2JzZXJ2YWJsZTx7fT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8QXBpU3VjY2Vzczx7fT4+KFxyXG4gICAgICBgJHt0aGlzLnVybH0vcnVsZXMvJHtpZH1gXHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpXHJcbiAgICApXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGFuIGV4aXN0aW5nIGNyaXRlcmlhIGJ5IGl0cyBJRC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpZCAtIFRoZSBJRCBvZiB0aGUgY3JpdGVyaWEuXHJcbiAgICogQHBhcmFtIHtDcml0ZXJpYUlufSBib2R5IC0gVGhlIHVwZGF0ZWQgY3JpdGVyaWEgcGF5bG9hZC5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENyaXRlcmlhT3V0Pn0gQW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSB1cGRhdGVkIGNyaXRlcmlhLlxyXG4gICAqL1xyXG4gIHB1dENyaXRlcmlhIChpZDpudW1iZXIsIGJvZHk6IENyaXRlcmlhSW4pOiBPYnNlcnZhYmxlPENyaXRlcmlhT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcGlTdWNjZXNzPENyaXRlcmlhT3V0Pj4oXHJcbiAgICAgIGAke3RoaXMudXJsfS9jcml0ZXJpYS8ke2lkfWAsXHJcbiAgICAgIGJvZHlcclxuICAgICkucGlwZShcclxuICAgICAgbWFwKCh7IGRhdGEgfSkgPT4gZGF0YSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgcnVsZSBieSBpdHMgSUQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaWQgLSBUaGUgSUQgb2YgdGhlIHJ1bGUuXHJcbiAgICogQHBhcmFtIHtSdWxlc0lufSBib2R5IC0gVGhlIHVwZGF0ZWQgcnVsZSBwYXlsb2FkLlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8UnVsZU91dD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgdXBkYXRlZCBydWxlLlxyXG4gICAqL1xyXG4gIHB1dFJ1bGUgKGlkOm51bWJlciwgYm9keTogUnVsZXNJbik6IE9ic2VydmFibGU8UnVsZU91dD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8QXBpU3VjY2VzczxSdWxlT3V0Pj4oXHJcbiAgICAgIGAke3RoaXMudXJsfS9ydWxlcy8ke2lkfWAsXHJcbiAgICAgIGJvZHlcclxuICAgICkucGlwZShcclxuICAgICAgbWFwKCh7IGRhdGEgfSkgPT4gZGF0YSlcclxuICAgIClcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyB0aGUgbGlzdCBvZiBjb3VudHJ5IGdyb3VwcyB1c2VkIGluIGN1c3RvbXMgb3BlcmF0aW9ucy5cclxuICAgKlxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8Q291bnRyeUdyb3Vwc091dD59IEFuIE9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgbGlzdCBvZiBjb3VudHJ5IGdyb3Vwcy5cclxuICAgKi9cclxuICBnZXRDb3VudHJ5R3JvdXBzIChwYXJhbXM6IFF1ZXJ5UGFyYW1zKTogT2JzZXJ2YWJsZTxDb3VudHJ5R3JvdXBzT3V0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcGlTdWNjZXNzPENvdW50cnlHcm91cHNPdXQ+PihcclxuICAgICAgYCR7dGhpcy51cmx9L2NvdW50cnktZ3JvdXBzYCxcclxuICAgICAge1xyXG4gICAgICAgIHBhcmFtc1xyXG4gICAgICB9XHJcbiAgICApLnBpcGUoXHJcbiAgICAgIG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpXHJcbiAgICApXHJcbiAgfVxyXG59XHJcbiJdfQ==
|