angular-three 1.6.3 → 1.6.4
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/esm2020/lib/events.mjs
CHANGED
|
@@ -246,7 +246,7 @@ export function createEvents(store) {
|
|
|
246
246
|
case 'lostpointercapture':
|
|
247
247
|
return (event) => {
|
|
248
248
|
const { internal } = store.get();
|
|
249
|
-
if ('pointerId' in event &&
|
|
249
|
+
if ('pointerId' in event && internal.capturedMap.has(event.pointerId)) {
|
|
250
250
|
// If the object event interface had onLostPointerCapture, we'd call it here on every
|
|
251
251
|
// object that's getting removed.
|
|
252
252
|
internal.capturedMap.delete(event.pointerId);
|
|
@@ -339,4 +339,4 @@ export function createEvents(store) {
|
|
|
339
339
|
}
|
|
340
340
|
return { handlePointer };
|
|
341
341
|
}
|
|
342
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBVS9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXRDLFNBQVMsNkJBQTZCLENBQ2xDLFdBQXNFLEVBQ3RFLEdBQW1CLEVBQ25CLFFBQXNELEVBQ3RELFNBQWlCO0lBRWpCLE1BQU0sV0FBVyxHQUF3QyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLElBQUksV0FBVyxFQUFFO1FBQ2IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQix3REFBd0Q7UUFDeEQsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNyQixXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLFdBQVcsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdkQ7S0FDSjtBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBMkIsRUFBRSxNQUFzQjtJQUNuRixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZDLG1EQUFtRDtJQUNuRCxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDeEUsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxF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LENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUNsRixDQUFDOzRCQUNGLHVCQUF1Qjs0QkFDdkIsT0FBTyxDQUFDLElBQW1DLENBQUMsQ0FBQzt5QkFDaEQ7cUJBQ0o7eUJBQU07d0JBQ0gsNkdBQTZHO3dCQUM3RyxJQUFJLFlBQVksSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTs0QkFDNUQsYUFBYSxDQUNULEtBQUssRUFDTCxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUNsRixDQUFDO3lCQUNMO3FCQUNKO2lCQUNKO1lBQ0wsQ0FBQztZQUVELGdCQUFnQixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB0eXBlIHsgTmd0UnhTdG9yZSB9IGZyb20gJy4vc3RvcmVzL3J4LXN0b3JlJztcbmltcG9ydCB0eXBlIHtcbiAgICBOZ3REb21FdmVudCxcbiAgICBOZ3RFdmVudEhhbmRsZXJzLFxuICAgIE5ndEludGVyc2VjdGlvbixcbiAgICBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldCxcbiAgICBOZ3RTdGF0ZSxcbiAgICBOZ3RUaHJlZUV2ZW50LFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGdldExvY2FsU3RhdGUgfSBmcm9tICcuL3V0aWxzL2luc3RhbmNlJztcbmltcG9ydCB7IG1ha2VJZCB9IGZyb20gJy4vdXRpbHMvbWFrZSc7XG5cbmZ1bmN0aW9uIHJlbGVhc2VJbnRlcm5hbFBvaW50ZXJDYXB0dXJlKFxuICAgIGNhcHR1cmVkTWFwOiBNYXA8bnVtYmVyLCBNYXA8VEhSRUUuT2JqZWN0M0QsIE5ndFBvaW50ZXJDYXB0dXJlVGFyZ2V0Pj4sXG4gICAgb2JqOiBUSFJFRS5PYmplY3QzRCxcbiAgICBjYXB0dXJlczogTWFwPFRIUkVFLk9iamVjdDNELCBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldD4sXG4gICAgcG9pbnRlcklkOiBudW1iZXJcbik6IHZvaWQge1xuICAgIGNvbnN0IGNhcHR1cmVEYXRhOiBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldCB8IHVuZGVmaW5lZCA9IGNhcHR1cmVzLmdldChvYmopO1xuICAgIGlmIChjYXB0dXJlRGF0YSkge1xuICAgICAgICBjYXB0dXJlcy5kZWxldGUob2JqKTtcbiAgICAgICAgLy8gaWYgdGhpcyB3YXMgdGhlIGxhc3QgY2FwdHVyZWQgb2JqZWN0IGZvciB0aGlzIHBvaW50ZXJcbiAgICAgICAgaWYgKGNhcHR1cmVzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIGNhcHR1cmVkTWFwLmRlbGV0ZShwb2ludGVySWQpO1xuICAgICAgICAgICAgY2FwdHVyZURhdGEudGFyZ2V0LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShwb2ludGVySWQpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlSW50ZXJhY3Rpdml0eShzdG9yZTogTmd0UnhTdG9yZTxOZ3RTdGF0ZT4sIG9iamVjdDogVEhSRUUuT2JqZWN0M0QpOiB2b2lkIHtcbiAgICBjb25zdCBpbnRlcm5hbCA9IHN0b3JlLmdldCgnaW50ZXJuYWwnKTtcbiAgICAvLyByZW1vdmVzIGV2ZXJ5IHRyYWNlIG9mIGFuIG9iamVjdCBmcm9tIGRhdGEgc3RvcmVcbiAgICBpbnRlcm5hbC5pbnRlcmFjdGlvbiA9IGludGVybmFsLmludGVyYWN0aW9uLmZpbHRlcigobykgPT4gbyAhPT0gb2JqZWN0KTtcbiAgICBpbnRlcm5hbC5pbml0aWFsSGl0cyA9IGludGVybmFsLmluaXRpYWxIaXRzLmZpbHRlcigobykgPT4gbyAhPT0gb2JqZWN0KTtcbiAgICBpbnRlcm5hbC5ob3ZlcmVkLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLmV2ZW50T2JqZWN0ID09PSBvYmplY3QgfHwgdmFsdWUub2JqZWN0ID09PSBvYmplY3QpIHtcbiAgICAgICAgICAgIC8vIGNsZWFyIG91dCBpbnRlcnNlY3RzLCB0aGV5IGFyZSBvdXRkYXRlZCBieSBub3dcbiAgICAgICAgICAgIGludGVybmFsLmhvdmVyZWQuZGVsZXRlKGtleSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpbnRlcm5hbC5jYXB0dXJlZE1hcC5mb3JFYWNoKChjYXB0dXJlcywgcG9pbnRlcklkKSA9PiB7XG4gICAgICAgIHJlbGVhc2VJbnRlcm5hbFBvaW50ZXJDYXB0dXJlKGludGVybmFsLmNhcHR1cmVkTWFwLCBvYmplY3QsIGNhcHR1cmVzLCBwb2ludGVySWQpO1xuICAgIH0pO1xuXG4gICAgaWYgKHN0b3JlLmdldCgncHJldmlvdXNTdG9yZScpKSB7XG4gICAgICAgIHJlbW92ZUludGVyYWN0aXZpdHkoc3RvcmUuZ2V0KCdwcmV2aW91c1N0b3JlJykhLCBvYmplY3QpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50cyhzdG9yZTogTmd0UnhTdG9yZTxOZ3RTdGF0ZT4pIHtcbiAgICAvKiogY2FsY3VsYXRlcyBkZWx0YSAqKi9cbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVEaXN0YW5jZShldmVudDogTmd0RG9tRXZlbnQpIHtcbiAgICAgICAgY29uc3QgaW50ZXJuYWwgPSBzdG9yZS5nZXQoJ2ludGVybmFsJyk7XG4gICAgICAgIGNvbnN0IGR4ID0gZXZlbnQub2Zmc2V0WCAtIGludGVybmFsLmluaXRpYWxDbGlja1swXTtcbiAgICAgICAgY29uc3QgZHkgPSBldmVudC5vZmZzZXRZIC0gaW50ZXJuYWwuaW5pdGlhbENsaWNrWzFdO1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpKTtcbiAgICB9XG5cbiAgICAvKiogcmV0dXJucyB0cnVlIGlmIGFuIGluc3RhbmNlIGhhcyBhIHZhbGlkIHBvaW50ZXItZXZlbnQgcmVnaXN0ZXJlZCwgdGhpcyBleGNsdWRlcyBzY3JvbGwsIGNsaWNrcyBldGMuLi4gKiovXG4gICAgZnVuY3Rpb24gZmlsdGVyUG9pbnRlckV2ZW50cyhvYmplY3RzOiBUSFJFRS5PYmplY3QzRFtdKSB7XG4gICAgICAgIHJldHVybiBvYmplY3RzLmZpbHRlcigob2JqKSA9PlxuICAgICAgICAgICAgWydtb3ZlJywgJ292ZXInLCAnZW50ZXInLCAnb3V0JywgJ2xlYXZlJ10uc29tZSgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50TmFtZSA9IGBwb2ludGVyJHtuYW1lfWAgYXMga2V5b2YgTmd0RXZlbnRIYW5kbGVycztcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0TG9jYWxTdGF0ZShvYmopLmhhbmRsZXJzPy5bZXZlbnROYW1lXTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW50ZXJzZWN0KGV2ZW50OiBOZ3REb21FdmVudCwgZmlsdGVyPzogKG9iamVjdHM6IFRIUkVFLk9iamVjdDNEW10pID0+IFRIUkVFLk9iamVjdDNEW10pIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXQoKTtcbiAgICAgICAgY29uc3QgZHVwbGljYXRlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb25zOiBOZ3RJbnRlcnNlY3Rpb25bXSA9IFtdO1xuICAgICAgICAvLyBhbGxvdyBjYWxsZXJzIHRvIGVsaW1pbmF0ZSBldmVudCBvYmplY3RzXG4gICAgICAgIGNvbnN0IGV2ZW50T2JqZWN0cyA9IGZpbHRlciA/IGZpbHRlcihzdGF0ZS5pbnRlcm5hbC5pbnRlcmFjdGlvbikgOiBzdGF0ZS5pbnRlcm5hbC5pbnRlcmFjdGlvbjtcbiAgICAgICAgLy8gcmVzZXQgYWxsIHJheWNhc3RlciBjYW1lcmFzIHRvIHVuZGVmaW5lZFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50T2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2VTdGF0ZSA9IGdldExvY2FsU3RhdGUoZXZlbnRPYmplY3RzW2ldKS5zdG9yZT8uZ2V0KCk7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2VTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA9IHVuZGVmaW5lZCE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN0YXRlLnByZXZpb3VzU3RvcmUpIHtcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSByb290LWxldmVsIHBvaW50ZXIgYW5kIHJheSBhcmUgc2V0dXBcbiAgICAgICAgICAgIHN0YXRlLmV2ZW50cy5jb21wdXRlPy4oZXZlbnQsIHN0b3JlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGhhbmRsZVJheWNhc3Qob2JqOiBUSFJFRS5PYmplY3QzRDxUSFJFRS5FdmVudD4pIHtcbiAgICAgICAgICAgIGNvbnN0IG9iakxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG9iaik7XG4gICAgICAgICAgICBjb25zdCBvYmpTdG9yZSA9IG9iakxvY2FsU3RhdGUuc3RvcmU7XG4gICAgICAgICAgICBjb25zdCBvYmpTdGF0ZSA9IG9ialN0b3JlPy5nZXQoKTtcbiAgICAgICAgICAgIC8vIHNraXAgZXZlbnQgaGFuZGxpbmcgd2hlbiBub0V2ZW50cyBpcyBzZXQsIG9yIHdoZW4gcmF5Y2FzdGVyIGNhbWVyYSBpcyBudWxsXG4gICAgICAgICAgICBpZiAoIW9ialN0YXRlIHx8ICFvYmpTdGF0ZS5ldmVudHMuZW5hYmxlZCB8fCBvYmpTdGF0ZS5yYXljYXN0ZXIuY2FtZXJhID09PSBudWxsKSByZXR1cm4gW107XG4gICAgICAgICAgICAvLyB3aGVuIHRoZSBjYW1lcmEgaXMgdW5kZWZpbmVkLCB3ZSBoYXZlIHRvIGNhbGwgdGhlIGV2ZW50cyBsYXllcnMgdG8gdXBkYXRlIGZ1bmN0aW9uXG4gICAgICAgICAgICBpZiAob2JqU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgb2JqU3RhdGUuZXZlbnRzLmNvbXB1dGU/LihldmVudCwgb2JqU3RvcmUsIG9ialN0YXRlLnByZXZpb3VzU3RvcmUpO1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjYW1lcmEgaXMgc3RpbGwgdW5kZWZpbmVkLCB3ZSBoYXZlIHRvIHNraXAgdGhpcyBsYXllciBlbnRpcmVseVxuICAgICAgICAgICAgICAgIGlmIChvYmpTdGF0ZS5yYXljYXN0ZXIuY2FtZXJhID09PSB1bmRlZmluZWQpIG9ialN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPSBudWxsITtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaW50ZXJzZWN0IG9iamVjdCBieSBvYmplY3RcbiAgICAgICAgICAgIHJldHVybiBvYmpTdGF0ZS5yYXljYXN0ZXIuY2FtZXJhID8gb2JqU3RhdGUucmF5Y2FzdGVyLmludGVyc2VjdE9iamVjdChvYmosIHRydWUpIDogW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb2xsZWN0IGV2ZW50c1xuICAgICAgICBsZXQgaGl0czogVEhSRUUuSW50ZXJzZWN0aW9uPFRIUkVFLk9iamVjdDNEPFRIUkVFLkV2ZW50Pj5bXSA9IGV2ZW50T2JqZWN0c1xuICAgICAgICAgICAgLy8gaW50ZXJzZWN0IG9iamVjdHNcbiAgICAgICAgICAgIC5mbGF0TWFwKGhhbmRsZVJheWNhc3QpXG4gICAgICAgICAgICAvLyBzb3J0IGJ5IGV2ZW50IHByaW9yaXR5XG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFTdGF0ZSA9IGdldExvY2FsU3RhdGUoYS5vYmplY3QpLnN0b3JlLmdldCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJTdGF0ZSA9IGdldExvY2FsU3RhdGUoYi5vYmplY3QpLnN0b3JlLmdldCgpO1xuICAgICAgICAgICAgICAgIGlmICghYVN0YXRlIHx8ICFiU3RhdGUpIHJldHVybiBhLmRpc3RhbmNlIC0gYi5kaXN0YW5jZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYlN0YXRlLmV2ZW50cy5wcmlvcml0eSAtIGFTdGF0ZS5ldmVudHMucHJpb3JpdHkgfHwgYS5kaXN0YW5jZSAtIGIuZGlzdGFuY2U7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLy8gZmlsdGVyIG91dCBkdXBsaWNhdGVzXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBtYWtlSWQoaXRlbSBhcyBOZ3RJbnRlcnNlY3Rpb24pO1xuICAgICAgICAgICAgICAgIGlmIChkdXBsaWNhdGVzLmhhcyhpZCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBkdXBsaWNhdGVzLmFkZChpZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBhbGxvdyBjdXN0b20gdXNlcmxhbmQgaW50ZXJzZWN0IHNvcnQgb3JkZXIsIHRoaXMgbGlrZWx5IG9ubHkgbWFrZXMgc2Vuc2Ugb24gdGhlIHJvb3RcbiAgICAgICAgaWYgKHN0YXRlLmV2ZW50cy5maWx0ZXIpIGhpdHMgPSBzdGF0ZS5ldmVudHMuZmlsdGVyKGhpdHMsIHN0b3JlKTtcblxuICAgICAgICAvLyBidWJibGUgdXAgdGhlIGV2ZW50cywgZmluZCB0aGUgZXZlbnQgc291cmNlXG4gICAgICAgIGZvciAoY29uc3QgaGl0IG9mIGhpdHMpIHtcbiAgICAgICAgICAgIGxldCBldmVudE9iamVjdDogVEhSRUUuT2JqZWN0M0QgfCBudWxsID0gaGl0Lm9iamVjdDtcbiAgICAgICAgICAgIC8vIGJ1YmJsZSBldmVudCB1cFxuICAgICAgICAgICAgd2hpbGUgKGV2ZW50T2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldExvY2FsU3RhdGUoZXZlbnRPYmplY3QpLmV2ZW50Q291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKHsgLi4uaGl0LCBldmVudE9iamVjdCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZXZlbnRPYmplY3QgPSBldmVudE9iamVjdC5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiB0aGUgaW50ZXJhY3Rpb24gaXMgY2FwdHVyZWQsIG1ha2UgYWxsIGNhcHR1cmluZyB0YXJnZXRzIHBhcnQgb2YgdGhlIGludGVyc2VjdHNcbiAgICAgICAgaWYgKCdwb2ludGVySWQnIGluIGV2ZW50ICYmIHN0YXRlLmludGVybmFsLmNhcHR1cmVkTWFwLmhhcyhldmVudC5wb2ludGVySWQpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhcHR1cmVkRGF0YSBvZiBzdGF0ZS5pbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQoZXZlbnQucG9pbnRlcklkKSEudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWR1cGxpY2F0ZXMuaGFzKG1ha2VJZChjYXB0dXJlZERhdGEuaW50ZXJzZWN0aW9uKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9ucy5wdXNoKGNhcHR1cmVkRGF0YS5pbnRlcnNlY3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW50ZXJzZWN0aW9ucztcbiAgICB9XG5cbiAgICAvKiogaGFuZGxlIGludGVyc2VjdGlvbnMgYnkgZm9yd2FyZGluZyB0aGVtIHRvIGhhbmRsZXJzICovXG4gICAgZnVuY3Rpb24gaGFuZGxlSW50ZXJzZWN0cyhcbiAgICAgICAgaW50ZXJzZWN0aW9uczogTmd0SW50ZXJzZWN0aW9uW10sXG4gICAgICAgIGV2ZW50OiBOZ3REb21FdmVudCxcbiAgICAgICAgZGVsdGE6IG51bWJlcixcbiAgICAgICAgY2FsbGJhY2s6IChldmVudDogTmd0VGhyZWVFdmVudDxOZ3REb21FdmVudD4pID0+IHZvaWRcbiAgICApIHtcbiAgICAgICAgY29uc3Qgcm9vdFN0YXRlID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgIC8vIGlmIGFueXRoaW5nIGhhcyBiZWVuIGZvdW5kLCBmb3J3YXJkIGl0IHRvIHRoZSBldmVudCBsaXN0ZW5lcnNcbiAgICAgICAgaWYgKGludGVyc2VjdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBsb2NhbFN0YXRlID0geyBzdG9wcGVkOiBmYWxzZSB9O1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGhpdCBvZiBpbnRlcnNlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBnZXRMb2NhbFN0YXRlKGhpdC5vYmplY3QpLnN0b3JlPy5nZXQoKSB8fCByb290U3RhdGU7XG4gICAgICAgICAgICAgICAgY29uc3QgeyByYXljYXN0ZXIsIHBvaW50ZXIsIGNhbWVyYSwgaW50ZXJuYWwgfSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVucHJvamVjdGVkUG9pbnQgPSBuZXcgVEhSRUUuVmVjdG9yMyhwb2ludGVyLngsIHBvaW50ZXIueSwgMCkudW5wcm9qZWN0KGNhbWVyYSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzUG9pbnRlckNhcHR1cmUgPSAoaWQ6IG51bWJlcikgPT4gaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGlkKT8uaGFzKGhpdC5ldmVudE9iamVjdCkgPz8gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzZXRQb2ludGVyQ2FwdHVyZSA9IChpZDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcHR1cmVEYXRhID0geyBpbnRlcnNlY3Rpb246IGhpdCwgdGFyZ2V0OiBldmVudC50YXJnZXQgYXMgRWxlbWVudCB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWwuY2FwdHVyZWRNYXAuaGFzKGlkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHBvaW50ZXJJZCB3YXMgcHJldmlvdXNseSBjYXB0dXJlZCwgd2UgYWRkIHRoZSBoaXQgdG8gdGhlIGV2ZW50IGNhcHR1cmVkTWFwXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQoaWQpIS5zZXQoaGl0LmV2ZW50T2JqZWN0LCBjYXB0dXJlRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcG9pbnRlcklkIHdhcyBub3QgcHJldmlvdXNseSBjYXB0dXJlZCwgd2UgY3JlYXRlIGEgTWFwIGNvbnRhaW5pbmcgdGhlIGhpdE9iamVjdCwgYW5kIHRoZSBoaXQuIGhpdE9iamVjdCBpcyB1c2VkIGZvciBmYXN0ZXIgYWNjZXNzXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5jYXB0dXJlZE1hcC5zZXQoaWQsIG5ldyBNYXAoW1toaXQuZXZlbnRPYmplY3QsIGNhcHR1cmVEYXRhXV0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBjYWxsIHRoZSBvcmlnaW5hbCBldmVudCBub3dcbiAgICAgICAgICAgICAgICAgICAgKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5zZXRQb2ludGVyQ2FwdHVyZShpZCk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbGVhc2VQb2ludGVyQ2FwdHVyZSA9IChpZDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhcHR1cmVzID0gaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhcHR1cmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlSW50ZXJuYWxQb2ludGVyQ2FwdHVyZShpbnRlcm5hbC5jYXB0dXJlZE1hcCwgaGl0LmV2ZW50T2JqZWN0LCBjYXB0dXJlcywgaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8vIGFkZCBuYXRpdmUgZXZlbnQgcHJvcHNcbiAgICAgICAgICAgICAgICBjb25zdCBleHRyYWN0RXZlbnRQcm9wczogYW55ID0ge307XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpdGVyYXRlcyBvdmVyIHRoZSBldmVudCdzIHByb3BlcnRpZXMgaW5jbHVkaW5nIHRoZSBpbmhlcml0ZWQgb25lcy4gTmF0aXZlIFBvaW50ZXJFdmVudHMgaGF2ZSBtb3N0IG9mIHRoZWlyIHByb3BzIGFzIGdldHRlcnMgd2hpY2ggYXJlIGluaGVyaXRlZCwgYnV0IHBvbHlmaWxsZWQgUG9pbnRlckV2ZW50cyBoYXZlIHRoZW0gYWxsIGFzIHRoZWlyIG93biBwcm9wZXJ0aWVzIChpLmUuIG5vdCBpbmhlcml0ZWQpLiBXZSBjYW4ndCB1c2UgT2JqZWN0LmtleXMoKSBvciBPYmplY3QuZW50cmllcygpIGFzIHRoZXkgb25seSByZXR1cm4gXCJvd25cIiBwcm9wZXJ0aWVzOyBub3IgT2JqZWN0LmdldFByb3RvdHlwZU9mKGV2ZW50KSBhcyB0aGF0ICpkb2Vzbid0KiByZXR1cm4gXCJvd25cIiBwcm9wZXJ0aWVzLCBvbmx5IGluaGVyaXRlZCBvbmVzLlxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiBldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGV2ZW50W3Byb3AgYXMga2V5b2YgTmd0RG9tRXZlbnRdO1xuICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGNvcHkgb3ZlciBhdG9taWNzLCBsZWF2ZSBmdW5jdGlvbnMgYWxvbmUgYXMgdGhlc2Ugc2hvdWxkIGJlIGNhbGxlZCBhcyBldmVudC5uYXRpdmVFdmVudC5mbigpXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RFdmVudFByb3BzW3Byb3BdID0gcHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCByYXljYXN0RXZlbnQ6IE5ndFRocmVlRXZlbnQ8Tmd0RG9tRXZlbnQ+ID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5oaXQsXG4gICAgICAgICAgICAgICAgICAgIC4uLmV4dHJhY3RFdmVudFByb3BzLFxuICAgICAgICAgICAgICAgICAgICBwb2ludGVyLFxuICAgICAgICAgICAgICAgICAgICBpbnRlcnNlY3Rpb25zLFxuICAgICAgICAgICAgICAgICAgICBzdG9wcGVkOiBsb2NhbFN0YXRlLnN0b3BwZWQsXG4gICAgICAgICAgICAgICAgICAgIGRlbHRhLFxuICAgICAgICAgICAgICAgICAgICB1bnByb2plY3RlZFBvaW50LFxuICAgICAgICAgICAgICAgICAgICByYXk6IHJheWNhc3Rlci5yYXksXG4gICAgICAgICAgICAgICAgICAgIGNhbWVyYTogY2FtZXJhLFxuICAgICAgICAgICAgICAgICAgICAvLyBIaWphY2sgc3RvcFByb3BhZ2F0aW9uLCB3aGljaCBqdXN0IHNldHMgYSBmbGFnXG4gICAgICAgICAgICAgICAgICAgIHN0b3BQcm9wYWdhdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wbW5kcnMvcmVhY3QtdGhyZWUtZmliZXIvaXNzdWVzLzU5NlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXZlbnRzIGFyZSBub3QgYWxsb3dlZCB0byBzdG9wIHByb3BhZ2F0aW9uIGlmIHRoZSBwb2ludGVyIGhhcyBiZWVuIGNhcHR1cmVkXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXB0dXJlc0ZvclBvaW50ZXIgPSAncG9pbnRlcklkJyBpbiBldmVudCAmJiBpbnRlcm5hbC5jYXB0dXJlZE1hcC5nZXQoZXZlbnQucG9pbnRlcklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSBhdXRob3JpemUgc3RvcFByb3BhZ2F0aW9uLi4uXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLi4uaWYgdGhpcyBwb2ludGVyIGhhc24ndCBiZWVuIGNhcHR1cmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNhcHR1cmVzRm9yUG9pbnRlciB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLiBvciBpZiB0aGUgaGl0IG9iamVjdCBpcyBjYXB0dXJpbmcgdGhlIHBvaW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlc0ZvclBvaW50ZXIuaGFzKGhpdC5ldmVudE9iamVjdClcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJheWNhc3RFdmVudC5zdG9wcGVkID0gbG9jYWxTdGF0ZS5zdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcm9wYWdhdGlvbiBpcyBzdG9wcGVkLCByZW1vdmUgYWxsIG90aGVyIGhvdmVyIHJlY29yZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbiBldmVudCBoYW5kbGVyIGlzIG9ubHkgYWxsb3dlZCB0byBmbHVzaCBvdGhlciBoYW5kbGVycyBpZiBpdCBpcyBob3ZlcmVkIGl0c2VsZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaG92ZXJlZC5zaXplICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20oaW50ZXJuYWwuaG92ZXJlZC52YWx1ZXMoKSkuZmluZCgoaSkgPT4gaS5ldmVudE9iamVjdCA9PT0gaGl0LmV2ZW50T2JqZWN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBPYmplY3RzIGNhbm5vdCBmbHVzaCBvdXQgaGlnaGVyIHVwIG9iamVjdHMgdGhhdCBoYXZlIGFscmVhZHkgY2F1Z2h0IHRoZSBldmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXIgPSBpbnRlcnNlY3Rpb25zLnNsaWNlKDAsIGludGVyc2VjdGlvbnMuaW5kZXhPZihoaXQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsUG9pbnRlcihbLi4uaGlnaGVyLCBoaXRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlIHNob3VsZCBiZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gdGFyZ2V0IGFuZCBjdXJyZW50VGFyZ2V0XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogeyBoYXNQb2ludGVyQ2FwdHVyZSwgc2V0UG9pbnRlckNhcHR1cmUsIHJlbGVhc2VQb2ludGVyQ2FwdHVyZSB9LFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGFyZ2V0OiB7IGhhc1BvaW50ZXJDYXB0dXJlLCBzZXRQb2ludGVyQ2FwdHVyZSwgcmVsZWFzZVBvaW50ZXJDYXB0dXJlIH0sXG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLy8gY2FsbCBzdWJzY3JpYmVyc1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJheWNhc3RFdmVudCk7XG4gICAgICAgICAgICAgICAgLy8gZXZlbnQgYnViYmxpbmcgbWF5IGJlIGludGVydXB0ZWQgYnkgc3RvcFByb3BhZ2F0aW9uXG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsU3RhdGUuc3RvcHBlZCA9PT0gdHJ1ZSkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvbnM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuY2VsUG9pbnRlcihpbnRlcnNlY3Rpb25zOiBOZ3RJbnRlcnNlY3Rpb25bXSkge1xuICAgICAgICBjb25zdCB7IGludGVybmFsIH0gPSBzdG9yZS5nZXQoKTtcbiAgICAgICAgZm9yIChjb25zdCBob3ZlcmVkT2JqIG9mIGludGVybmFsLmhvdmVyZWQudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gbm8gb2JqZWN0cyB3ZXJlIGhpdCBvciB0aGUgaG92ZXJlZCBvYmplY3Qgd2Fzbid0IGZvdW5kIHVuZGVybmVhdGggdGhlIGN1cnNvclxuICAgICAgICAgICAgLy8gd2UgY2FsbCBvblBvaW50ZXJPdXQgYW5kIGRlbGV0ZSB0aGUgb2JqZWN0IGZyb20gdGhlIGhvdmVyZWQtZWxlbWVudHMgbWFwXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIWludGVyc2VjdGlvbnMubGVuZ3RoIHx8XG4gICAgICAgICAgICAgICAgIWludGVyc2VjdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgKGhpdCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhpdC5vYmplY3QgPT09IGhvdmVyZWRPYmoub2JqZWN0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBoaXQuaW5kZXggPT09IGhvdmVyZWRPYmouaW5kZXggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpdC5pbnN0YW5jZUlkID09PSBob3ZlcmVkT2JqLmluc3RhbmNlSWRcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudE9iamVjdCA9IGhvdmVyZWRPYmouZXZlbnRPYmplY3Q7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBnZXRMb2NhbFN0YXRlKGV2ZW50T2JqZWN0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVycyA9IGluc3RhbmNlPy5oYW5kbGVycztcbiAgICAgICAgICAgICAgICBpbnRlcm5hbC5ob3ZlcmVkLmRlbGV0ZShtYWtlSWQoaG92ZXJlZE9iaikpO1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZT8uZXZlbnRDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciBvdXQgaW50ZXJzZWN0cywgdGhleSBhcmUgb3V0ZGF0ZWQgYnkgbm93XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7IC4uLmhvdmVyZWRPYmosIGludGVyc2VjdGlvbnMgfTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnM/LnBvaW50ZXJvdXQ/LihkYXRhIGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pik7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPy5wb2ludGVybGVhdmU/LihkYXRhIGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9pbnRlck1pc3NlZChldmVudDogTW91c2VFdmVudCwgb2JqZWN0czogVEhSRUUuT2JqZWN0M0RbXSkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0TG9jYWxTdGF0ZShvYmplY3RzW2ldKTtcbiAgICAgICAgICAgIGluc3RhbmNlPy5oYW5kbGVycy5wb2ludGVybWlzc2VkPy4oZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlUG9pbnRlcihuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgLy8gRGVhbCB3aXRoIGNhbmNlbGF0aW9uXG4gICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgY2FzZSAncG9pbnRlcmxlYXZlJzpcbiAgICAgICAgICAgIGNhc2UgJ3BvaW50ZXJjYW5jZWwnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiBjYW5jZWxQb2ludGVyKFtdKTtcbiAgICAgICAgICAgIGNhc2UgJ2xvc3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChldmVudDogTmd0RG9tRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBpbnRlcm5hbCB9ID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgncG9pbnRlcklkJyBpbiBldmVudCAmJiAhaW50ZXJuYWwuY2FwdHVyZWRNYXAuaGFzKGV2ZW50LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgZXZlbnQgaW50ZXJmYWNlIGhhZCBvbkxvc3RQb2ludGVyQ2FwdHVyZSwgd2UnZCBjYWxsIGl0IGhlcmUgb24gZXZlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0aGF0J3MgZ2V0dGluZyByZW1vdmVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuY2FwdHVyZWRNYXAuZGVsZXRlKGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxQb2ludGVyKFtdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbnkgb3RoZXIgcG9pbnRlciBnb2VzIGhlcmUgLi4uXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudDogTmd0RG9tRXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb25Qb2ludGVyTWlzc2VkLCBpbnRlcm5hbCB9ID0gc3RvcmUuZ2V0KCk7XG5cbiAgICAgICAgICAgIC8vIHByZXBhcmVSYXkoZXZlbnQpXG4gICAgICAgICAgICBpbnRlcm5hbC5sYXN0RXZlbnQgPSBldmVudDtcblxuICAgICAgICAgICAgLy8gR2V0IGZyZXNoIGludGVyc2VjdHNcbiAgICAgICAgICAgIGNvbnN0IGlzUG9pbnRlck1vdmUgPSBuYW1lID09PSAncG9pbnRlcm1vdmUnO1xuICAgICAgICAgICAgY29uc3QgaXNDbGlja0V2ZW50ID0gbmFtZSA9PT0gJ2NsaWNrJyB8fCBuYW1lID09PSAnY29udGV4dG1lbnUnIHx8IG5hbWUgPT09ICdkYmxjbGljayc7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBpc1BvaW50ZXJNb3ZlID8gZmlsdGVyUG9pbnRlckV2ZW50cyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIC8vIGNvbnN0IGhpdHMgPSBwYXRjaEludGVyc2VjdHMoaW50ZXJzZWN0KGZpbHRlciksIGV2ZW50KVxuICAgICAgICAgICAgY29uc3QgaGl0cyA9IGludGVyc2VjdChldmVudCwgZmlsdGVyKTtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gaXNDbGlja0V2ZW50ID8gY2FsY3VsYXRlRGlzdGFuY2UoZXZlbnQpIDogMDtcblxuICAgICAgICAgICAgLy8gU2F2ZSBpbml0aWFsIGNvb3JkaW5hdGVzIG9uIHBvaW50ZXItZG93blxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdwb2ludGVyZG93bicpIHtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbml0aWFsQ2xpY2sgPSBbZXZlbnQub2Zmc2V0WCwgZXZlbnQub2Zmc2V0WV07XG4gICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5pdGlhbEhpdHMgPSBoaXRzLm1hcCgoaGl0KSA9PiBoaXQuZXZlbnRPYmplY3QpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiBhIGNsaWNrIHlpZWxkcyBubyByZXN1bHRzLCBwYXNzIGl0IGJhY2sgdG8gdGhlIHVzZXIgYXMgYSBtaXNzXG4gICAgICAgICAgICAvLyBNaXNzZWQgZXZlbnRzIGhhdmUgdG8gY29tZSBmaXJzdCBpbiBvcmRlciB0byBlc3RhYmxpc2ggdXNlci1sYW5kIHNpZGUtZWZmZWN0IGNsZWFuIHVwXG4gICAgICAgICAgICBpZiAoaXNDbGlja0V2ZW50ICYmICFoaXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChkZWx0YSA8PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvaW50ZXJNaXNzZWQoZXZlbnQsIGludGVybmFsLmludGVyYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uUG9pbnRlck1pc3NlZCkgb25Qb2ludGVyTWlzc2VkKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUYWtlIGNhcmUgb2YgdW5ob3ZlclxuICAgICAgICAgICAgaWYgKGlzUG9pbnRlck1vdmUpIGNhbmNlbFBvaW50ZXIoaGl0cyk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG9uSW50ZXJzZWN0KGRhdGE6IE5ndFRocmVlRXZlbnQ8Tmd0RG9tRXZlbnQ+KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRPYmplY3QgPSBkYXRhLmV2ZW50T2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0TG9jYWxTdGF0ZShldmVudE9iamVjdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpbnN0YW5jZT8uaGFuZGxlcnM7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgcHJlc2VuY2Ugb2YgaGFuZGxlcnNcbiAgICAgICAgICAgICAgICBpZiAoIWluc3RhbmNlPy5ldmVudENvdW50KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNQb2ludGVyTW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIGV2ZW50IC4uLlxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz8ucG9pbnRlcm92ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPy5wb2ludGVyZW50ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPy5wb2ludGVyb3V0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz8ucG9pbnRlcmxlYXZlXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBlbnRlciBvciBvdXQgaXMgcHJlc2VudCB0YWtlIGNhcmUgb2YgaG92ZXItc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gbWFrZUlkKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaG92ZXJlZEl0ZW0gPSBpbnRlcm5hbC5ob3ZlcmVkLmdldChpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhvdmVyZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCB3YXNuJ3QgcHJldmlvdXNseSBob3ZlcmVkLCBib29rIGl0IGFuZCBjYWxsIGl0cyBoYW5kbGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaG92ZXJlZC5zZXQoaWQsIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnBvaW50ZXJvdmVyPy4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnBvaW50ZXJlbnRlcj8uKGRhdGEgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaG92ZXJlZEl0ZW0uc3RvcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3Qgd2FzIHByZXZpb3VzbHkgaG92ZXJlZCBhbmQgc3RvcHBlZCwgd2Ugc2hvdWxkbid0IGFsbG93IG90aGVyIGl0ZW1zIHRvIHByb2NlZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIENhbGwgbW91c2UgbW92ZVxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz8ucG9pbnRlcm1vdmU/LihkYXRhIGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWxsIG90aGVyIGV2ZW50cyAuLi5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJzPy5bbmFtZSBhcyBrZXlvZiBOZ3RFdmVudEhhbmRsZXJzXSBhcyAoXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+XG4gICAgICAgICAgICAgICAgICAgICkgPT4gdm9pZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcndhcmQgYWxsIGV2ZW50cyBiYWNrIHRvIHRoZWlyIHJlc3BlY3RpdmUgaGFuZGxlcnMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGNsaWNrIGV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIG11c3QgdXNlIHRoZSBpbml0aWFsIHRhcmdldFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NsaWNrRXZlbnQgfHwgaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMoZXZlbnRPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWlzc2VkIGV2ZW50cyBoYXZlIHRvIGNvbWUgZmlyc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyTWlzc2VkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaW50ZXJhY3Rpb24uZmlsdGVyKChvYmplY3QpID0+ICFpbnRlcm5hbC5pbml0aWFsSGl0cy5pbmNsdWRlcyhvYmplY3QpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IGNhbGwgdGhlIGhhbmRsZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyKGRhdGEgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgb25Qb2ludGVyTWlzc2VkIG9uIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgcG9pbnRlciBvdmVyL291dCBoYW5kbGVycywgYnV0IG5vdCBjbGljayBhbmQgd2VyZW4ndCBoaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NsaWNrRXZlbnQgJiYgaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMoZXZlbnRPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlck1pc3NlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmludGVyYWN0aW9uLmZpbHRlcigob2JqZWN0KSA9PiAhaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMob2JqZWN0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBoYW5kbGVJbnRlcnNlY3RzKGhpdHMsIGV2ZW50LCBkZWx0YSwgb25JbnRlcnNlY3QpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IGhhbmRsZVBvaW50ZXIgfTtcbn1cbiJdfQ==
|
|
342
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXRocmVlL3NyYy9saWIvZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBVS9CLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXRDLFNBQVMsNkJBQTZCLENBQ2xDLFdBQXNFLEVBQ3RFLEdBQW1CLEVBQ25CLFFBQXNELEVBQ3RELFNBQWlCO0lBRWpCLE1BQU0sV0FBVyxHQUF3QyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLElBQUksV0FBVyxFQUFFO1FBQ2IsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQix3REFBd0Q7UUFDeEQsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUNyQixXQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzlCLFdBQVcsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDdkQ7S0FDSjtBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBMkIsRUFBRSxNQUFzQjtJQUNuRixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3ZDLG1EQUFtRDtJQUNuRCxRQUFRLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDeEUsUUFBUSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxF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LFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDbEYsQ0FBQzs0QkFDRix1QkFBdUI7NEJBQ3ZCLE9BQU8sQ0FBQyxJQUFtQyxDQUFDLENBQUM7eUJBQ2hEO3FCQUNKO3lCQUFNO3dCQUNILDZHQUE2Rzt3QkFDN0csSUFBSSxZQUFZLElBQUksUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7NEJBQzVELGFBQWEsQ0FDVCxLQUFLLEVBQ0wsUUFBUSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDbEYsQ0FBQzt5QkFDTDtxQkFDSjtpQkFDSjtZQUNMLENBQUM7WUFFRCxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgdHlwZSB7IE5ndFJ4U3RvcmUgfSBmcm9tICcuL3N0b3Jlcy9yeC1zdG9yZSc7XG5pbXBvcnQgdHlwZSB7XG4gICAgTmd0RG9tRXZlbnQsXG4gICAgTmd0RXZlbnRIYW5kbGVycyxcbiAgICBOZ3RJbnRlcnNlY3Rpb24sXG4gICAgTmd0UG9pbnRlckNhcHR1cmVUYXJnZXQsXG4gICAgTmd0U3RhdGUsXG4gICAgTmd0VGhyZWVFdmVudCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlIH0gZnJvbSAnLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBtYWtlSWQgfSBmcm9tICcuL3V0aWxzL21ha2UnO1xuXG5mdW5jdGlvbiByZWxlYXNlSW50ZXJuYWxQb2ludGVyQ2FwdHVyZShcbiAgICBjYXB0dXJlZE1hcDogTWFwPG51bWJlciwgTWFwPFRIUkVFLk9iamVjdDNELCBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldD4+LFxuICAgIG9iajogVEhSRUUuT2JqZWN0M0QsXG4gICAgY2FwdHVyZXM6IE1hcDxUSFJFRS5PYmplY3QzRCwgTmd0UG9pbnRlckNhcHR1cmVUYXJnZXQ+LFxuICAgIHBvaW50ZXJJZDogbnVtYmVyXG4pOiB2b2lkIHtcbiAgICBjb25zdCBjYXB0dXJlRGF0YTogTmd0UG9pbnRlckNhcHR1cmVUYXJnZXQgfCB1bmRlZmluZWQgPSBjYXB0dXJlcy5nZXQob2JqKTtcbiAgICBpZiAoY2FwdHVyZURhdGEpIHtcbiAgICAgICAgY2FwdHVyZXMuZGVsZXRlKG9iaik7XG4gICAgICAgIC8vIGlmIHRoaXMgd2FzIHRoZSBsYXN0IGNhcHR1cmVkIG9iamVjdCBmb3IgdGhpcyBwb2ludGVyXG4gICAgICAgIGlmIChjYXB0dXJlcy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICBjYXB0dXJlZE1hcC5kZWxldGUocG9pbnRlcklkKTtcbiAgICAgICAgICAgIGNhcHR1cmVEYXRhLnRhcmdldC5yZWxlYXNlUG9pbnRlckNhcHR1cmUocG9pbnRlcklkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUludGVyYWN0aXZpdHkoc3RvcmU6IE5ndFJ4U3RvcmU8Tmd0U3RhdGU+LCBvYmplY3Q6IFRIUkVFLk9iamVjdDNEKTogdm9pZCB7XG4gICAgY29uc3QgaW50ZXJuYWwgPSBzdG9yZS5nZXQoJ2ludGVybmFsJyk7XG4gICAgLy8gcmVtb3ZlcyBldmVyeSB0cmFjZSBvZiBhbiBvYmplY3QgZnJvbSBkYXRhIHN0b3JlXG4gICAgaW50ZXJuYWwuaW50ZXJhY3Rpb24gPSBpbnRlcm5hbC5pbnRlcmFjdGlvbi5maWx0ZXIoKG8pID0+IG8gIT09IG9iamVjdCk7XG4gICAgaW50ZXJuYWwuaW5pdGlhbEhpdHMgPSBpbnRlcm5hbC5pbml0aWFsSGl0cy5maWx0ZXIoKG8pID0+IG8gIT09IG9iamVjdCk7XG4gICAgaW50ZXJuYWwuaG92ZXJlZC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZS5ldmVudE9iamVjdCA9PT0gb2JqZWN0IHx8IHZhbHVlLm9iamVjdCA9PT0gb2JqZWN0KSB7XG4gICAgICAgICAgICAvLyBjbGVhciBvdXQgaW50ZXJzZWN0cywgdGhleSBhcmUgb3V0ZGF0ZWQgYnkgbm93XG4gICAgICAgICAgICBpbnRlcm5hbC5ob3ZlcmVkLmRlbGV0ZShrZXkpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgaW50ZXJuYWwuY2FwdHVyZWRNYXAuZm9yRWFjaCgoY2FwdHVyZXMsIHBvaW50ZXJJZCkgPT4ge1xuICAgICAgICByZWxlYXNlSW50ZXJuYWxQb2ludGVyQ2FwdHVyZShpbnRlcm5hbC5jYXB0dXJlZE1hcCwgb2JqZWN0LCBjYXB0dXJlcywgcG9pbnRlcklkKTtcbiAgICB9KTtcblxuICAgIGlmIChzdG9yZS5nZXQoJ3ByZXZpb3VzU3RvcmUnKSkge1xuICAgICAgICByZW1vdmVJbnRlcmFjdGl2aXR5KHN0b3JlLmdldCgncHJldmlvdXNTdG9yZScpISwgb2JqZWN0KTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFdmVudHMoc3RvcmU6IE5ndFJ4U3RvcmU8Tmd0U3RhdGU+KSB7XG4gICAgLyoqIGNhbGN1bGF0ZXMgZGVsdGEgKiovXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlRGlzdGFuY2UoZXZlbnQ6IE5ndERvbUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGludGVybmFsID0gc3RvcmUuZ2V0KCdpbnRlcm5hbCcpO1xuICAgICAgICBjb25zdCBkeCA9IGV2ZW50Lm9mZnNldFggLSBpbnRlcm5hbC5pbml0aWFsQ2xpY2tbMF07XG4gICAgICAgIGNvbnN0IGR5ID0gZXZlbnQub2Zmc2V0WSAtIGludGVybmFsLmluaXRpYWxDbGlja1sxXTtcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KSk7XG4gICAgfVxuXG4gICAgLyoqIHJldHVybnMgdHJ1ZSBpZiBhbiBpbnN0YW5jZSBoYXMgYSB2YWxpZCBwb2ludGVyLWV2ZW50IHJlZ2lzdGVyZWQsIHRoaXMgZXhjbHVkZXMgc2Nyb2xsLCBjbGlja3MgZXRjLi4uICoqL1xuICAgIGZ1bmN0aW9uIGZpbHRlclBvaW50ZXJFdmVudHMob2JqZWN0czogVEhSRUUuT2JqZWN0M0RbXSkge1xuICAgICAgICByZXR1cm4gb2JqZWN0cy5maWx0ZXIoKG9iaikgPT5cbiAgICAgICAgICAgIFsnbW92ZScsICdvdmVyJywgJ2VudGVyJywgJ291dCcsICdsZWF2ZSddLnNvbWUoKG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudE5hbWUgPSBgcG9pbnRlciR7bmFtZX1gIGFzIGtleW9mIE5ndEV2ZW50SGFuZGxlcnM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldExvY2FsU3RhdGUob2JqKS5oYW5kbGVycz8uW2V2ZW50TmFtZV07XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludGVyc2VjdChldmVudDogTmd0RG9tRXZlbnQsIGZpbHRlcj86IChvYmplY3RzOiBUSFJFRS5PYmplY3QzRFtdKSA9PiBUSFJFRS5PYmplY3QzRFtdKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgIGNvbnN0IGR1cGxpY2F0ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uczogTmd0SW50ZXJzZWN0aW9uW10gPSBbXTtcbiAgICAgICAgLy8gYWxsb3cgY2FsbGVycyB0byBlbGltaW5hdGUgZXZlbnQgb2JqZWN0c1xuICAgICAgICBjb25zdCBldmVudE9iamVjdHMgPSBmaWx0ZXIgPyBmaWx0ZXIoc3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb24pIDogc3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb247XG4gICAgICAgIC8vIHJlc2V0IGFsbCByYXljYXN0ZXIgY2FtZXJhcyB0byB1bmRlZmluZWRcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBldmVudE9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGV2ZW50T2JqZWN0c1tpXSkuc3RvcmU/LmdldCgpO1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPSB1bmRlZmluZWQhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5wcmV2aW91c1N0b3JlKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgcm9vdC1sZXZlbCBwb2ludGVyIGFuZCByYXkgYXJlIHNldHVwXG4gICAgICAgICAgICBzdGF0ZS5ldmVudHMuY29tcHV0ZT8uKGV2ZW50LCBzdG9yZSk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVSYXljYXN0KG9iajogVEhSRUUuT2JqZWN0M0Q8VEhSRUUuRXZlbnQ+KSB7XG4gICAgICAgICAgICBjb25zdCBvYmpMb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShvYmopO1xuICAgICAgICAgICAgY29uc3Qgb2JqU3RvcmUgPSBvYmpMb2NhbFN0YXRlLnN0b3JlO1xuICAgICAgICAgICAgY29uc3Qgb2JqU3RhdGUgPSBvYmpTdG9yZT8uZ2V0KCk7XG4gICAgICAgICAgICAvLyBza2lwIGV2ZW50IGhhbmRsaW5nIHdoZW4gbm9FdmVudHMgaXMgc2V0LCBvciB3aGVuIHJheWNhc3RlciBjYW1lcmEgaXMgbnVsbFxuICAgICAgICAgICAgaWYgKCFvYmpTdGF0ZSB8fCAhb2JqU3RhdGUuZXZlbnRzLmVuYWJsZWQgfHwgb2JqU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA9PT0gbnVsbCkgcmV0dXJuIFtdO1xuICAgICAgICAgICAgLy8gd2hlbiB0aGUgY2FtZXJhIGlzIHVuZGVmaW5lZCwgd2UgaGF2ZSB0byBjYWxsIHRoZSBldmVudHMgbGF5ZXJzIHRvIHVwZGF0ZSBmdW5jdGlvblxuICAgICAgICAgICAgaWYgKG9ialN0YXRlLnJheWNhc3Rlci5jYW1lcmEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIG9ialN0YXRlLmV2ZW50cy5jb21wdXRlPy4oZXZlbnQsIG9ialN0b3JlLCBvYmpTdGF0ZS5wcmV2aW91c1N0b3JlKTtcbiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgY2FtZXJhIGlzIHN0aWxsIHVuZGVmaW5lZCwgd2UgaGF2ZSB0byBza2lwIHRoaXMgbGF5ZXIgZW50aXJlbHlcbiAgICAgICAgICAgICAgICBpZiAob2JqU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA9PT0gdW5kZWZpbmVkKSBvYmpTdGF0ZS5yYXljYXN0ZXIuY2FtZXJhID0gbnVsbCE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGludGVyc2VjdCBvYmplY3QgYnkgb2JqZWN0XG4gICAgICAgICAgICByZXR1cm4gb2JqU3RhdGUucmF5Y2FzdGVyLmNhbWVyYSA/IG9ialN0YXRlLnJheWNhc3Rlci5pbnRlcnNlY3RPYmplY3Qob2JqLCB0cnVlKSA6IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29sbGVjdCBldmVudHNcbiAgICAgICAgbGV0IGhpdHM6IFRIUkVFLkludGVyc2VjdGlvbjxUSFJFRS5PYmplY3QzRDxUSFJFRS5FdmVudD4+W10gPSBldmVudE9iamVjdHNcbiAgICAgICAgICAgIC8vIGludGVyc2VjdCBvYmplY3RzXG4gICAgICAgICAgICAuZmxhdE1hcChoYW5kbGVSYXljYXN0KVxuICAgICAgICAgICAgLy8gc29ydCBieSBldmVudCBwcmlvcml0eVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGEub2JqZWN0KS5zdG9yZS5nZXQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGIub2JqZWN0KS5zdG9yZS5nZXQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFTdGF0ZSB8fCAhYlN0YXRlKSByZXR1cm4gYS5kaXN0YW5jZSAtIGIuZGlzdGFuY2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJTdGF0ZS5ldmVudHMucHJpb3JpdHkgLSBhU3RhdGUuZXZlbnRzLnByaW9yaXR5IHx8IGEuZGlzdGFuY2UgLSBiLmRpc3RhbmNlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC8vIGZpbHRlciBvdXQgZHVwbGljYXRlc1xuICAgICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gbWFrZUlkKGl0ZW0gYXMgTmd0SW50ZXJzZWN0aW9uKTtcbiAgICAgICAgICAgICAgICBpZiAoZHVwbGljYXRlcy5oYXMoaWQpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgZHVwbGljYXRlcy5hZGQoaWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gYWxsb3cgY3VzdG9tIHVzZXJsYW5kIGludGVyc2VjdCBzb3J0IG9yZGVyLCB0aGlzIGxpa2VseSBvbmx5IG1ha2VzIHNlbnNlIG9uIHRoZSByb290XG4gICAgICAgIGlmIChzdGF0ZS5ldmVudHMuZmlsdGVyKSBoaXRzID0gc3RhdGUuZXZlbnRzLmZpbHRlcihoaXRzLCBzdG9yZSk7XG5cbiAgICAgICAgLy8gYnViYmxlIHVwIHRoZSBldmVudHMsIGZpbmQgdGhlIGV2ZW50IHNvdXJjZVxuICAgICAgICBmb3IgKGNvbnN0IGhpdCBvZiBoaXRzKSB7XG4gICAgICAgICAgICBsZXQgZXZlbnRPYmplY3Q6IFRIUkVFLk9iamVjdDNEIHwgbnVsbCA9IGhpdC5vYmplY3Q7XG4gICAgICAgICAgICAvLyBidWJibGUgZXZlbnQgdXBcbiAgICAgICAgICAgIHdoaWxlIChldmVudE9iamVjdCkge1xuICAgICAgICAgICAgICAgIGlmIChnZXRMb2NhbFN0YXRlKGV2ZW50T2JqZWN0KS5ldmVudENvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbnMucHVzaCh7IC4uLmhpdCwgZXZlbnRPYmplY3QgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV2ZW50T2JqZWN0ID0gZXZlbnRPYmplY3QucGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlIGludGVyYWN0aW9uIGlzIGNhcHR1cmVkLCBtYWtlIGFsbCBjYXB0dXJpbmcgdGFyZ2V0cyBwYXJ0IG9mIHRoZSBpbnRlcnNlY3RzXG4gICAgICAgIGlmICgncG9pbnRlcklkJyBpbiBldmVudCAmJiBzdGF0ZS5pbnRlcm5hbC5jYXB0dXJlZE1hcC5oYXMoZXZlbnQucG9pbnRlcklkKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjYXB0dXJlZERhdGEgb2Ygc3RhdGUuaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGV2ZW50LnBvaW50ZXJJZCkhLnZhbHVlcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkdXBsaWNhdGVzLmhhcyhtYWtlSWQoY2FwdHVyZWREYXRhLmludGVyc2VjdGlvbikpKSB7XG4gICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbnMucHVzaChjYXB0dXJlZERhdGEuaW50ZXJzZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGludGVyc2VjdGlvbnM7XG4gICAgfVxuXG4gICAgLyoqIGhhbmRsZSBpbnRlcnNlY3Rpb25zIGJ5IGZvcndhcmRpbmcgdGhlbSB0byBoYW5kbGVycyAqL1xuICAgIGZ1bmN0aW9uIGhhbmRsZUludGVyc2VjdHMoXG4gICAgICAgIGludGVyc2VjdGlvbnM6IE5ndEludGVyc2VjdGlvbltdLFxuICAgICAgICBldmVudDogTmd0RG9tRXZlbnQsXG4gICAgICAgIGRlbHRhOiBudW1iZXIsXG4gICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8Tmd0RG9tRXZlbnQ+KSA9PiB2b2lkXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHJvb3RTdGF0ZSA9IHN0b3JlLmdldCgpO1xuICAgICAgICAvLyBpZiBhbnl0aGluZyBoYXMgYmVlbiBmb3VuZCwgZm9yd2FyZCBpdCB0byB0aGUgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAgIGlmIChpbnRlcnNlY3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbG9jYWxTdGF0ZSA9IHsgc3RvcHBlZDogZmFsc2UgfTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBoaXQgb2YgaW50ZXJzZWN0aW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gZ2V0TG9jYWxTdGF0ZShoaXQub2JqZWN0KS5zdG9yZT8uZ2V0KCkgfHwgcm9vdFN0YXRlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcmF5Y2FzdGVyLCBwb2ludGVyLCBjYW1lcmEsIGludGVybmFsIH0gPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB1bnByb2plY3RlZFBvaW50ID0gbmV3IFRIUkVFLlZlY3RvcjMocG9pbnRlci54LCBwb2ludGVyLnksIDApLnVucHJvamVjdChjYW1lcmEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1BvaW50ZXJDYXB0dXJlID0gKGlkOiBudW1iZXIpID0+IGludGVybmFsLmNhcHR1cmVkTWFwLmdldChpZCk/LmhhcyhoaXQuZXZlbnRPYmplY3QpID8/IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0UG9pbnRlckNhcHR1cmUgPSAoaWQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXB0dXJlRGF0YSA9IHsgaW50ZXJzZWN0aW9uOiBoaXQsIHRhcmdldDogZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludGVybmFsLmNhcHR1cmVkTWFwLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBwb2ludGVySWQgd2FzIHByZXZpb3VzbHkgY2FwdHVyZWQsIHdlIGFkZCB0aGUgaGl0IHRvIHRoZSBldmVudCBjYXB0dXJlZE1hcFxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGlkKSEuc2V0KGhpdC5ldmVudE9iamVjdCwgY2FwdHVyZURhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgdGhlIHBvaW50ZXJJZCB3YXMgbm90IHByZXZpb3VzbHkgY2FwdHVyZWQsIHdlIGNyZWF0ZSBhIE1hcCBjb250YWluaW5nIHRoZSBoaXRPYmplY3QsIGFuZCB0aGUgaGl0LiBoaXRPYmplY3QgaXMgdXNlZCBmb3IgZmFzdGVyIGFjY2Vzc1xuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuY2FwdHVyZWRNYXAuc2V0KGlkLCBuZXcgTWFwKFtbaGl0LmV2ZW50T2JqZWN0LCBjYXB0dXJlRGF0YV1dKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gY2FsbCB0aGUgb3JpZ2luYWwgZXZlbnQgbm93XG4gICAgICAgICAgICAgICAgICAgIChldmVudC50YXJnZXQgYXMgRWxlbWVudCkuc2V0UG9pbnRlckNhcHR1cmUoaWQpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCByZWxlYXNlUG9pbnRlckNhcHR1cmUgPSAoaWQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYXB0dXJlcyA9IGludGVybmFsLmNhcHR1cmVkTWFwLmdldChpZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXB0dXJlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZUludGVybmFsUG9pbnRlckNhcHR1cmUoaW50ZXJuYWwuY2FwdHVyZWRNYXAsIGhpdC5ldmVudE9iamVjdCwgY2FwdHVyZXMsIGlkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvLyBhZGQgbmF0aXZlIGV2ZW50IHByb3BzXG4gICAgICAgICAgICAgICAgY29uc3QgZXh0cmFjdEV2ZW50UHJvcHM6IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXRlcmF0ZXMgb3ZlciB0aGUgZXZlbnQncyBwcm9wZXJ0aWVzIGluY2x1ZGluZyB0aGUgaW5oZXJpdGVkIG9uZXMuIE5hdGl2ZSBQb2ludGVyRXZlbnRzIGhhdmUgbW9zdCBvZiB0aGVpciBwcm9wcyBhcyBnZXR0ZXJzIHdoaWNoIGFyZSBpbmhlcml0ZWQsIGJ1dCBwb2x5ZmlsbGVkIFBvaW50ZXJFdmVudHMgaGF2ZSB0aGVtIGFsbCBhcyB0aGVpciBvd24gcHJvcGVydGllcyAoaS5lLiBub3QgaW5oZXJpdGVkKS4gV2UgY2FuJ3QgdXNlIE9iamVjdC5rZXlzKCkgb3IgT2JqZWN0LmVudHJpZXMoKSBhcyB0aGV5IG9ubHkgcmV0dXJuIFwib3duXCIgcHJvcGVydGllczsgbm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZihldmVudCkgYXMgdGhhdCAqZG9lc24ndCogcmV0dXJuIFwib3duXCIgcHJvcGVydGllcywgb25seSBpbmhlcml0ZWQgb25lcy5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3AgaW4gZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBldmVudFtwcm9wIGFzIGtleW9mIE5ndERvbUV2ZW50XTtcbiAgICAgICAgICAgICAgICAgICAgLy8gb25seSBjb3B5IG92ZXIgYXRvbWljcywgbGVhdmUgZnVuY3Rpb25zIGFsb25lIGFzIHRoZXNlIHNob3VsZCBiZSBjYWxsZWQgYXMgZXZlbnQubmF0aXZlRXZlbnQuZm4oKVxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0RXZlbnRQcm9wc1twcm9wXSA9IHByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgcmF5Y2FzdEV2ZW50OiBOZ3RUaHJlZUV2ZW50PE5ndERvbUV2ZW50PiA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uaGl0LFxuICAgICAgICAgICAgICAgICAgICAuLi5leHRyYWN0RXZlbnRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRlcixcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJzZWN0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgc3RvcHBlZDogbG9jYWxTdGF0ZS5zdG9wcGVkLFxuICAgICAgICAgICAgICAgICAgICBkZWx0YSxcbiAgICAgICAgICAgICAgICAgICAgdW5wcm9qZWN0ZWRQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgcmF5OiByYXljYXN0ZXIucmF5LFxuICAgICAgICAgICAgICAgICAgICBjYW1lcmE6IGNhbWVyYSxcbiAgICAgICAgICAgICAgICAgICAgLy8gSGlqYWNrIHN0b3BQcm9wYWdhdGlvbiwgd2hpY2gganVzdCBzZXRzIGEgZmxhZ1xuICAgICAgICAgICAgICAgICAgICBzdG9wUHJvcGFnYXRpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcG1uZHJzL3JlYWN0LXRocmVlLWZpYmVyL2lzc3Vlcy81OTZcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV2ZW50cyBhcmUgbm90IGFsbG93ZWQgdG8gc3RvcCBwcm9wYWdhdGlvbiBpZiB0aGUgcG9pbnRlciBoYXMgYmVlbiBjYXB0dXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FwdHVyZXNGb3JQb2ludGVyID0gJ3BvaW50ZXJJZCcgaW4gZXZlbnQgJiYgaW50ZXJuYWwuY2FwdHVyZWRNYXAuZ2V0KGV2ZW50LnBvaW50ZXJJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgYXV0aG9yaXplIHN0b3BQcm9wYWdhdGlvbi4uLlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC4uLmlmIHRoaXMgcG9pbnRlciBoYXNuJ3QgYmVlbiBjYXB0dXJlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjYXB0dXJlc0ZvclBvaW50ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuLi4gb3IgaWYgdGhlIGhpdCBvYmplY3QgaXMgY2FwdHVyaW5nIHRoZSBwb2ludGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZXNGb3JQb2ludGVyLmhhcyhoaXQuZXZlbnRPYmplY3QpXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXljYXN0RXZlbnQuc3RvcHBlZCA9IGxvY2FsU3RhdGUuc3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUHJvcGFnYXRpb24gaXMgc3RvcHBlZCwgcmVtb3ZlIGFsbCBvdGhlciBob3ZlciByZWNvcmRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQW4gZXZlbnQgaGFuZGxlciBpcyBvbmx5IGFsbG93ZWQgdG8gZmx1c2ggb3RoZXIgaGFuZGxlcnMgaWYgaXQgaXMgaG92ZXJlZCBpdHNlbGZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmhvdmVyZWQuc2l6ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKGludGVybmFsLmhvdmVyZWQudmFsdWVzKCkpLmZpbmQoKGkpID0+IGkuZXZlbnRPYmplY3QgPT09IGhpdC5ldmVudE9iamVjdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2JqZWN0cyBjYW5ub3QgZmx1c2ggb3V0IGhpZ2hlciB1cCBvYmplY3RzIHRoYXQgaGF2ZSBhbHJlYWR5IGNhdWdodCB0aGUgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlnaGVyID0gaW50ZXJzZWN0aW9ucy5zbGljZSgwLCBpbnRlcnNlY3Rpb25zLmluZGV4T2YoaGl0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFBvaW50ZXIoWy4uLmhpZ2hlciwgaGl0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGVyZSBzaG91bGQgYmUgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRhcmdldCBhbmQgY3VycmVudFRhcmdldFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHsgaGFzUG9pbnRlckNhcHR1cmUsIHNldFBvaW50ZXJDYXB0dXJlLCByZWxlYXNlUG9pbnRlckNhcHR1cmUgfSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRhcmdldDogeyBoYXNQb2ludGVyQ2FwdHVyZSwgc2V0UG9pbnRlckNhcHR1cmUsIHJlbGVhc2VQb2ludGVyQ2FwdHVyZSB9LFxuICAgICAgICAgICAgICAgICAgICBuYXRpdmVFdmVudDogZXZlbnQsXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8vIGNhbGwgc3Vic2NyaWJlcnNcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhyYXljYXN0RXZlbnQpO1xuICAgICAgICAgICAgICAgIC8vIGV2ZW50IGJ1YmJsaW5nIG1heSBiZSBpbnRlcnVwdGVkIGJ5IHN0b3BQcm9wYWdhdGlvblxuICAgICAgICAgICAgICAgIGlmIChsb2NhbFN0YXRlLnN0b3BwZWQgPT09IHRydWUpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnRlcnNlY3Rpb25zO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbmNlbFBvaW50ZXIoaW50ZXJzZWN0aW9uczogTmd0SW50ZXJzZWN0aW9uW10pIHtcbiAgICAgICAgY29uc3QgeyBpbnRlcm5hbCB9ID0gc3RvcmUuZ2V0KCk7XG4gICAgICAgIGZvciAoY29uc3QgaG92ZXJlZE9iaiBvZiBpbnRlcm5hbC5ob3ZlcmVkLnZhbHVlcygpKSB7XG4gICAgICAgICAgICAvLyBXaGVuIG5vIG9iamVjdHMgd2VyZSBoaXQgb3IgdGhlIGhvdmVyZWQgb2JqZWN0IHdhc24ndCBmb3VuZCB1bmRlcm5lYXRoIHRoZSBjdXJzb3JcbiAgICAgICAgICAgIC8vIHdlIGNhbGwgb25Qb2ludGVyT3V0IGFuZCBkZWxldGUgdGhlIG9iamVjdCBmcm9tIHRoZSBob3ZlcmVkLWVsZW1lbnRzIG1hcFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFpbnRlcnNlY3Rpb25zLmxlbmd0aCB8fFxuICAgICAgICAgICAgICAgICFpbnRlcnNlY3Rpb25zLmZpbmQoXG4gICAgICAgICAgICAgICAgICAgIChoaXQpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBoaXQub2JqZWN0ID09PSBob3ZlcmVkT2JqLm9iamVjdCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaGl0LmluZGV4ID09PSBob3ZlcmVkT2JqLmluZGV4ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBoaXQuaW5zdGFuY2VJZCA9PT0gaG92ZXJlZE9iai5pbnN0YW5jZUlkXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRPYmplY3QgPSBob3ZlcmVkT2JqLmV2ZW50T2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0TG9jYWxTdGF0ZShldmVudE9iamVjdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpbnN0YW5jZT8uaGFuZGxlcnM7XG4gICAgICAgICAgICAgICAgaW50ZXJuYWwuaG92ZXJlZC5kZWxldGUobWFrZUlkKGhvdmVyZWRPYmopKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2U/LmV2ZW50Q291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2xlYXIgb3V0IGludGVyc2VjdHMsIHRoZXkgYXJlIG91dGRhdGVkIGJ5IG5vd1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0geyAuLi5ob3ZlcmVkT2JqLCBpbnRlcnNlY3Rpb25zIH07XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPy5wb2ludGVyb3V0Py4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz8ucG9pbnRlcmxlYXZlPy4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvaW50ZXJNaXNzZWQoZXZlbnQ6IE1vdXNlRXZlbnQsIG9iamVjdHM6IFRIUkVFLk9iamVjdDNEW10pIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IGdldExvY2FsU3RhdGUob2JqZWN0c1tpXSk7XG4gICAgICAgICAgICBpbnN0YW5jZT8uaGFuZGxlcnMucG9pbnRlcm1pc3NlZD8uKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVBvaW50ZXIobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIC8vIERlYWwgd2l0aCBjYW5jZWxhdGlvblxuICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3BvaW50ZXJsZWF2ZSc6XG4gICAgICAgICAgICBjYXNlICdwb2ludGVyY2FuY2VsJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gY2FuY2VsUG9pbnRlcihbXSk7XG4gICAgICAgICAgICBjYXNlICdsb3N0cG9pbnRlcmNhcHR1cmUnOlxuICAgICAgICAgICAgICAgIHJldHVybiAoZXZlbnQ6IE5ndERvbUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgaW50ZXJuYWwgfSA9IHN0b3JlLmdldCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoJ3BvaW50ZXJJZCcgaW4gZXZlbnQgJiYgaW50ZXJuYWwuY2FwdHVyZWRNYXAuaGFzKGV2ZW50LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgZXZlbnQgaW50ZXJmYWNlIGhhZCBvbkxvc3RQb2ludGVyQ2FwdHVyZSwgd2UnZCBjYWxsIGl0IGhlcmUgb24gZXZlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0aGF0J3MgZ2V0dGluZyByZW1vdmVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuY2FwdHVyZWRNYXAuZGVsZXRlKGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxQb2ludGVyKFtdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBbnkgb3RoZXIgcG9pbnRlciBnb2VzIGhlcmUgLi4uXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudDogTmd0RG9tRXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb25Qb2ludGVyTWlzc2VkLCBpbnRlcm5hbCB9ID0gc3RvcmUuZ2V0KCk7XG5cbiAgICAgICAgICAgIC8vIHByZXBhcmVSYXkoZXZlbnQpXG4gICAgICAgICAgICBpbnRlcm5hbC5sYXN0RXZlbnQgPSBldmVudDtcblxuICAgICAgICAgICAgLy8gR2V0IGZyZXNoIGludGVyc2VjdHNcbiAgICAgICAgICAgIGNvbnN0IGlzUG9pbnRlck1vdmUgPSBuYW1lID09PSAncG9pbnRlcm1vdmUnO1xuICAgICAgICAgICAgY29uc3QgaXNDbGlja0V2ZW50ID0gbmFtZSA9PT0gJ2NsaWNrJyB8fCBuYW1lID09PSAnY29udGV4dG1lbnUnIHx8IG5hbWUgPT09ICdkYmxjbGljayc7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBpc1BvaW50ZXJNb3ZlID8gZmlsdGVyUG9pbnRlckV2ZW50cyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIC8vIGNvbnN0IGhpdHMgPSBwYXRjaEludGVyc2VjdHMoaW50ZXJzZWN0KGZpbHRlciksIGV2ZW50KVxuICAgICAgICAgICAgY29uc3QgaGl0cyA9IGludGVyc2VjdChldmVudCwgZmlsdGVyKTtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gaXNDbGlja0V2ZW50ID8gY2FsY3VsYXRlRGlzdGFuY2UoZXZlbnQpIDogMDtcblxuICAgICAgICAgICAgLy8gU2F2ZSBpbml0aWFsIGNvb3JkaW5hdGVzIG9uIHBvaW50ZXItZG93blxuICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdwb2ludGVyZG93bicpIHtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbC5pbml0aWFsQ2xpY2sgPSBbZXZlbnQub2Zmc2V0WCwgZXZlbnQub2Zmc2V0WV07XG4gICAgICAgICAgICAgICAgaW50ZXJuYWwuaW5pdGlhbEhpdHMgPSBoaXRzLm1hcCgoaGl0KSA9PiBoaXQuZXZlbnRPYmplY3QpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiBhIGNsaWNrIHlpZWxkcyBubyByZXN1bHRzLCBwYXNzIGl0IGJhY2sgdG8gdGhlIHVzZXIgYXMgYSBtaXNzXG4gICAgICAgICAgICAvLyBNaXNzZWQgZXZlbnRzIGhhdmUgdG8gY29tZSBmaXJzdCBpbiBvcmRlciB0byBlc3RhYmxpc2ggdXNlci1sYW5kIHNpZGUtZWZmZWN0IGNsZWFuIHVwXG4gICAgICAgICAgICBpZiAoaXNDbGlja0V2ZW50ICYmICFoaXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChkZWx0YSA8PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvaW50ZXJNaXNzZWQoZXZlbnQsIGludGVybmFsLmludGVyYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9uUG9pbnRlck1pc3NlZCkgb25Qb2ludGVyTWlzc2VkKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUYWtlIGNhcmUgb2YgdW5ob3ZlclxuICAgICAgICAgICAgaWYgKGlzUG9pbnRlck1vdmUpIGNhbmNlbFBvaW50ZXIoaGl0cyk7XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG9uSW50ZXJzZWN0KGRhdGE6IE5ndFRocmVlRXZlbnQ8Tmd0RG9tRXZlbnQ+KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnRPYmplY3QgPSBkYXRhLmV2ZW50T2JqZWN0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gZ2V0TG9jYWxTdGF0ZShldmVudE9iamVjdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpbnN0YW5jZT8uaGFuZGxlcnM7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgcHJlc2VuY2Ugb2YgaGFuZGxlcnNcbiAgICAgICAgICAgICAgICBpZiAoIWluc3RhbmNlPy5ldmVudENvdW50KSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNQb2ludGVyTW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIGV2ZW50IC4uLlxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz8ucG9pbnRlcm92ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPy5wb2ludGVyZW50ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPy5wb2ludGVyb3V0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz8ucG9pbnRlcmxlYXZlXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBlbnRlciBvciBvdXQgaXMgcHJlc2VudCB0YWtlIGNhcmUgb2YgaG92ZXItc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkID0gbWFrZUlkKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaG92ZXJlZEl0ZW0gPSBpbnRlcm5hbC5ob3ZlcmVkLmdldChpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhvdmVyZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCB3YXNuJ3QgcHJldmlvdXNseSBob3ZlcmVkLCBib29rIGl0IGFuZCBjYWxsIGl0cyBoYW5kbGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaG92ZXJlZC5zZXQoaWQsIGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnBvaW50ZXJvdmVyPy4oZGF0YSBhcyBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzLnBvaW50ZXJlbnRlcj8uKGRhdGEgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaG92ZXJlZEl0ZW0uc3RvcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3Qgd2FzIHByZXZpb3VzbHkgaG92ZXJlZCBhbmQgc3RvcHBlZCwgd2Ugc2hvdWxkbid0IGFsbG93IG90aGVyIGl0ZW1zIHRvIHByb2NlZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIENhbGwgbW91c2UgbW92ZVxuICAgICAgICAgICAgICAgICAgICBoYW5kbGVycz8ucG9pbnRlcm1vdmU/LihkYXRhIGFzIE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWxsIG90aGVyIGV2ZW50cyAuLi5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJzPy5bbmFtZSBhcyBrZXlvZiBOZ3RFdmVudEhhbmRsZXJzXSBhcyAoXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+XG4gICAgICAgICAgICAgICAgICAgICkgPT4gdm9pZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcndhcmQgYWxsIGV2ZW50cyBiYWNrIHRvIHRoZWlyIHJlc3BlY3RpdmUgaGFuZGxlcnMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGNsaWNrIGV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIG11c3QgdXNlIHRoZSBpbml0aWFsIHRhcmdldFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NsaWNrRXZlbnQgfHwgaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMoZXZlbnRPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWlzc2VkIGV2ZW50cyBoYXZlIHRvIGNvbWUgZmlyc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyTWlzc2VkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuaW50ZXJhY3Rpb24uZmlsdGVyKChvYmplY3QpID0+ICFpbnRlcm5hbC5pbml0aWFsSGl0cy5pbmNsdWRlcyhvYmplY3QpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm93IGNhbGwgdGhlIGhhbmRsZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyKGRhdGEgYXMgTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgb25Qb2ludGVyTWlzc2VkIG9uIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgcG9pbnRlciBvdmVyL291dCBoYW5kbGVycywgYnV0IG5vdCBjbGljayBhbmQgd2VyZW4ndCBoaXRcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0NsaWNrRXZlbnQgJiYgaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMoZXZlbnRPYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlck1pc3NlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLmludGVyYWN0aW9uLmZpbHRlcigob2JqZWN0KSA9PiAhaW50ZXJuYWwuaW5pdGlhbEhpdHMuaW5jbHVkZXMob2JqZWN0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBoYW5kbGVJbnRlcnNlY3RzKGhpdHMsIGV2ZW50LCBkZWx0YSwgb25JbnRlcnNlY3QpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IGhhbmRsZVBvaW50ZXIgfTtcbn1cbiJdfQ==
|
|
@@ -1214,7 +1214,7 @@ function createEvents(store) {
|
|
|
1214
1214
|
case 'lostpointercapture':
|
|
1215
1215
|
return (event) => {
|
|
1216
1216
|
const { internal } = store.get();
|
|
1217
|
-
if ('pointerId' in event &&
|
|
1217
|
+
if ('pointerId' in event && internal.capturedMap.has(event.pointerId)) {
|
|
1218
1218
|
// If the object event interface had onLostPointerCapture, we'd call it here on every
|
|
1219
1219
|
// object that's getting removed.
|
|
1220
1220
|
internal.capturedMap.delete(event.pointerId);
|