@sumaris-net/ngx-components 2.18.0-beta2 → 2.18.0-beta3

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.
@@ -164,6 +164,20 @@ export function getFormErrors(control, opts) {
164
164
  }
165
165
  // Form array
166
166
  else if (control instanceof UntypedFormArray) {
167
+ // Copy errors
168
+ if (control.errors) {
169
+ if (opts.controlName) {
170
+ opts.result[opts.controlName] = {
171
+ ...control.errors,
172
+ };
173
+ }
174
+ else {
175
+ opts.result = {
176
+ ...opts.result,
177
+ ...control.errors,
178
+ };
179
+ }
180
+ }
167
181
  control.controls.forEach((child, index) => {
168
182
  getFormErrors(child, {
169
183
  ...opts,
@@ -435,4 +449,4 @@ export function filterFormErrors(errors, filter) {
435
449
  return res;
436
450
  }, undefined);
437
451
  }
438
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9mb3Jtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQzNILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBR3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQU03RDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQVcsRUFBRSxNQUF3QixFQUFFLElBQWtEO0lBQ3ZILE1BQU0sSUFBSSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE1BQXVCLEVBQUUsSUFBc0I7SUFDcEYsT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUEyQixDQUFDO0FBQ3JFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBdUIsRUFBRSxPQUF3QixFQUFFLElBQWE7SUFDbEcsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFMUMsYUFBYTtJQUNiLElBQUksT0FBTyxZ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QUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZHLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFBa0IsRUFBRSxNQUF5QjtJQUNsRixJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVU7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNoRCxPQUFPLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE1BQWtCLEVBQUUsTUFBZ0M7SUFDbkYsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDaEQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztTQUMxQixNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ2QsTUFBTSxDQUNMLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7UUFDckIsaUJBQWlCO1FBQ2pCLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ2hCLG9CQUFvQjtRQUNwQixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUNXLFNBQVMsQ0FDdEIsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbE9yTmFOLCBudWxsSWZVbmRlZmluZWQgfSBmcm9tICcuL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyB0b0RhdGVJU09TdHJpbmcgfSBmcm9tICcuL2RhdGVzJztcbmltcG9ydCB7IHdhaXRGb3IsIFdhaXRGb3JPcHRpb25zIH0gZnJvbSAnLi9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBQcmVkaWNhdGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQXBwRm9ybUFycmF5IH0gZnJvbSAnLi4vY29yZS9mb3JtL2FycmF5L2Zvcm0tYXJyYXknO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1FcnJvcnMge1xuICBba2V5OiBzdHJpbmddOiBWYWxpZGF0aW9uRXJyb3JzO1xufVxuXG4vKipcbiAqIEZpbGwgYSBmb3JtIHVzaW5nIGEgc291cmNlIGVudGl0eVxuICpcbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEBwYXJhbSBlbnRpdHlcbiAqIEBwYXJhbSBvcHRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5RW50aXR5MkZvcm0oZW50aXR5OiBhbnksIHRhcmdldDogVW50eXBlZEZvcm1Hcm91cCwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgb25seVNlbGY/OiBib29sZWFuIH0pIHtcbiAgY29uc3QganNvbiA9IGdldEZvcm1WYWx1ZUZyb21FbnRpdHkoZW50aXR5LCB0YXJnZXQpO1xuICB0YXJnZXQucGF0Y2hWYWx1ZShqc29uLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1WYWx1ZUZyb21FbnRpdHkoZW50aXR5OiBhbnkgfCB1bmRlZmluZWQsIGZvcm06IFVudHlwZWRGb3JtR3JvdXApOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgcmV0dXJuIGFkYXB0VmFsdWVUb0NvbnRyb2woZW50aXR5LCBmb3JtKSBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhbiBlbnRpdHkgaW50byBhIHNpbXBsZSBvYmplY3QsIGNvbXBhdGlibGUgd2l0aCB0aGUgZ2l2ZW4gZm9ybVxuICpcbiAqIEBwYXJhbSBzb3VyY2UgYW4gZW50aXR5IChvciBzdWJlbnRpdHkpXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHBhcmFtIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkYXB0VmFsdWVUb0NvbnRyb2woc291cmNlOiBhbnkgfCB1bmRlZmluZWQsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aD86IHN0cmluZyk6IGFueSB7XG4gIGNvbnN0IHBhdGhQcmVmaXggPSBwYXRoID8gcGF0aCArICcuJyA6ICcnO1xuXG4gIC8vIEZvcm0gZ3JvdXBcbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pblxuICAgIGZvciAoY29uc3Qga2V5IGluIGNvbnRyb2wuY29udHJvbHMpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gYWRhcHRWYWx1ZVRvQ29udHJvbChzb3VyY2UgJiYgc291cmNlW2tleV0sIGNvbnRyb2wuY29udHJvbHNba2V5XSwgcGF0aFByZWZpeCArIGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBBcnJheVxuICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcbiAgICAvLyBTcGxpdCwgaWYgbWFueSB2YWx1ZXMgaW4gYSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHNvdXJjZSA9IHNvdXJjZS5zcGxpdCgnfCcpO1xuICAgIH1cbiAgICAvLyBTa2lwIGlmIHZhbHVlIGlzIG5vdCBhbiBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gUmVzaXphYmxlIGFycmF5XG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBBcHBGb3JtQXJyYXkpIHtcbiAgICAgIGNvbnN0IGV4YW1wbGVDb250cm9sID0gY29udHJvbC5jcmVhdGVDb250cm9sKCk7XG4gICAgICByZXR1cm4gc291cmNlLm1hcCgoaXRlbSwgaW5kZXgpID0+IGFkYXB0VmFsdWVUb0NvbnRyb2woaXRlbSwgZXhhbXBsZUNvbnRyb2wsIHBhdGhQcmVmaXggKyAnIycgKyBpbmRleCkpIGFzIGFueVtdO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBhcnJheVxuICAgIGVsc2UgaWYgKGNvbnRyb2wubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3RDb250cm9sID0gY29udHJvbC5hdCgwKTtcbiAgICAgIC8vIFVzZSB0aGUgZmlyc3QgZm9ybSBncm91cCwgYXMgbW9kZWxcbiAgICAgIGxldCByZXN1bHQgPSBzb3VyY2UubWFwKChpdGVtLCBpbmRleCkgPT4gYWRhcHRWYWx1ZVRvQ29udHJvbChpdGVtLCBmaXJzdENvbnRyb2wsIHBhdGhQcmVmaXggKyAnIycgKyBpbmRleCkpIGFzIGFueVtdO1xuXG4gICAgICAvLyBUcnVuY2F0ZSBpZiB0b28gbWFueSB2YWx1ZXNcbiAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gY29udHJvbC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGZpcnN0Q29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQ29udHJvbCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSBjb250cm9sLmxlbmd0aDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29udHJvbC5wdXNoKG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobnVsbCwgZmlyc3RDb250cm9sLnZhbGlkYXRvcikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFdBUk46IHBsZWFzZSByZXNpemUgdGhlIEZvcm1BcnJheSAnJHtwYXRoIHx8ICcnfScgdG8gdGhlIHNhbWUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBhcnJheWApO1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCBjb250cm9sLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHZhbHVlcyBpZiBub3QgZW5vdWdodFxuICAgICAgZWxzZSBpZiAocmVzdWx0Lmxlbmd0aCA8IGNvbnRyb2wubGVuZ3RoKSB7XG4gICAgICAgIC8vY29uc29sZS53YXJuKGBXQVJOOiBBZGRpbmcgbnVsbCB2YWx1ZSB0byBhcnJheSB2YWx1ZXNgKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJlc3VsdC5sZW5ndGg7IGkgPCBjb250cm9sLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2gobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8vIFNraXAgaWYgdW5hYmxlIHRvIGZpbmQgYSBjb250cm9sIGluIHRoZSBhcnJheVxuICAgIGVsc2Uge1xuICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShzb3VyY2UpKSBjb25zb2xlLndhcm4oYFdBUk46IHBsZWFzZSByZXNpemUgdGhlIEZvcm1BcnJheSAnJHtwYXRofScgdG8gdGhlIHNhbWUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBhcnJheWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvcm0gY29udHJvbFxuICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQ29udHJvbCkge1xuICAgIC8vIERhdGVcbiAgICBpZiAoaXNNb21lbnQoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHRvRGF0ZUlTT1N0cmluZyhzb3VyY2UpO1xuICAgIH1cbiAgICAvLyBBbnkgb3RoZXIgY29udHJvbDogcmVwbGFjZSB1bmRlZmluZWQgYnkgbnVsbCB2YWx1ZVxuICAgIC8vIGJlY2F1c2UgVW5kZWZpbmVkIGlzIG5vdCBhdXRob3JpemVkIGFzIGNvbnRyb2wgdmFsdWVcbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsSWZVbmRlZmluZWQoc291cmNlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ0Zvcm1FcnJvcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBsb2dQcmVmaXg/OiBzdHJpbmcsIHBhdGg/OiBzdHJpbmcpIHtcbiAgaWYgKCFjb250cm9sIHx8IGNvbnRyb2wudmFsaWQpIHJldHVybjtcbiAgbG9nUHJlZml4ID0gbG9nUHJlZml4IHx8ICcnO1xuICAvLyBGb3JtIGdyb3VwXG4gIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuICAgIGlmICghcGF0aCkgY29uc29sZS53YXJuKGAke2xvZ1ByZWZpeH0gRm9ybSBlcnJvcnM6YCk7XG4gICAgaWYgKGNvbnRyb2wuZXJyb3JzKSB7XG4gICAgICBPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycykuZm9yRWFjaCgoZXJyb3IpID0+IGNvbnNvbGUud2FybihgJHtsb2dQcmVmaXh9IC0+ICR7cGF0aCB8fCAnJ30gKCR7ZXJyb3J9KWApKTtcbiAgICB9XG4gICAgaWYgKGNvbnRyb2wuY29udHJvbHMpIHtcbiAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2wuY29udHJvbHMpLmZvckVhY2goXG4gICAgICAgIChjaGlsZCkgPT4gbG9nRm9ybUVycm9ycyhjb250cm9sLmNvbnRyb2xzW2NoaWxkXSwgbG9nUHJlZml4LCBwYXRoID8gYCR7cGF0aH0uJHtjaGlsZH1gIDogY2hpbGQpIC8vIFJlY3Vyc2l2ZSBjYWxsXG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvLyBGb3JtIGFycmF5XG4gIGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG4gICAgaWYgKGNvbnRyb2wuZXJyb3JzKSB7XG4gICAgICBPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycykuZm9yRWFjaCgoZXJyb3IpID0+IGNvbnNvbGUud2FybihgJHtsb2dQcmVmaXh9IC0+ICR7cGF0aCB8fCAnJ30gKCR7ZXJyb3J9KWApKTtcbiAgICB9XG4gICAgY29udHJvbC5jb250cm9scy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgIGxvZ0Zvcm1FcnJvcnMoY2hpbGQsIGxvZ1ByZWZpeCwgcGF0aCA/IGAke3BhdGh9LiR7aW5kZXh9YCA6IGAke2luZGV4fWApOyAvLyBSZWN1cnNpdmUgY2FsbFxuICAgIH0pO1xuICB9XG4gIC8vIE90aGVyIGNvbnRyb2wncyBlcnJvcnNcbiAgZWxzZSBpZiAoY29udHJvbC5lcnJvcnMpIHtcbiAgICBPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycykuZm9yRWFjaCgoZXJyb3IpID0+IGNvbnNvbGUud2FybihgJHtsb2dQcmVmaXh9IC0+ICR7cGF0aCB8fCAnJ30gKCR7ZXJyb3J9KWApKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUVycm9ycyhcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxuICBvcHRzPzoge1xuICAgIGNvbnRyb2xOYW1lPzogc3RyaW5nO1xuICAgIHJlc3VsdD86IEZvcm1FcnJvcnM7XG4gICAgcmVjdXJzaXZlPzogYm9vbGVhbjtcbiAgfVxuKTogRm9ybUVycm9ycyB7XG4gIGlmICghY29udHJvbCB8fCBjb250cm9sLnZhbGlkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICBvcHRzLnJlc3VsdCA9IG9wdHMucmVzdWx0IHx8IHt9O1xuXG4gIC8vIEZvcm0gZ3JvdXBcbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgLy8gQ29weSBlcnJvcnNcbiAgICBpZiAoY29udHJvbC5lcnJvcnMpIHtcbiAgICAgIGlmIChvcHRzLmNvbnRyb2xOYW1lKSB7XG4gICAgICAgIG9wdHMucmVzdWx0W29wdHMuY29udHJvbE5hbWVdID0ge1xuICAgICAgICAgIC4uLmNvbnRyb2wuZXJyb3JzLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0cy5yZXN1bHQgPSB7XG4gICAgICAgICAgLi4ub3B0cy5yZXN1bHQsXG4gICAgICAgICAgLi4uY29udHJvbC5lcnJvcnMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMucmVjdXJzaXZlICE9PSBmYWxzZSkge1xuICAgICAgLy8gTG9vcCBvbiBjaGlsZHJlbiBjb250cm9sc1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29udHJvbC5jb250cm9scykge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGNvbnRyb2wuY29udHJvbHNba2V5XTtcbiAgICAgICAgaWYgKGNoaWxkPy5lbmFibGVkKSB7XG4gICAgICAgICAgZ2V0Rm9ybUVycm9ycyhjaGlsZCwge1xuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIGNvbnRyb2xOYW1lOiBvcHRzLmNvbnRyb2xOYW1lID8gW29wdHMuY29udHJvbE5hbWUsIGtleV0uam9pbignLicpIDoga2V5LFxuICAgICAgICAgICAgcmVzdWx0OiBvcHRzLnJlc3VsdCwgLy8gTWFrZSBzdXJlIHRvIGtlZXAgdGhlIHNhbWUgcmVzdWx0IG9iamVjdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRm9ybSBhcnJheVxuICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuICAgIGNvbnRyb2wuY29udHJvbHMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICBnZXRGb3JtRXJyb3JzKGNoaWxkLCB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIGNvbnRyb2xOYW1lOiAob3B0cy5jb250cm9sTmFtZSB8fCAnJykgKyAnLicgKyBpbmRleCxcbiAgICAgICAgcmVzdWx0OiBvcHRzLnJlc3VsdCwgLy8gTWFrZSBzdXJlIHRvIGtlZXAgdGhlIHNhbWUgcmVzdWx0IG9iamVjdFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBPdGhlciB0eXBlIG9mIGNvbnRyb2wgKGUuZyBzaW1wbGUgY29udHJvbClcbiAgZWxzZSBpZiAoY29udHJvbC5lcnJvcnMpIHtcbiAgICBpZiAob3B0cy5jb250cm9sTmFtZSkge1xuICAgICAgb3B0cy5yZXN1bHRbb3B0cy5jb250cm9sTmFtZV0gPSB7XG4gICAgICAgIC4uLmNvbnRyb2wuZXJyb3JzLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0cy5yZXN1bHQgPSB7XG4gICAgICAgIC4uLm9wdHMucmVzdWx0LFxuICAgICAgICAuLi5jb250cm9sLmVycm9ycyxcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzLnJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRyb2xGcm9tUGF0aChmb3JtOiBVbnR5cGVkRm9ybUdyb3VwLCBwYXRoOiBzdHJpbmcpOiBBYnN0cmFjdENvbnRyb2wge1xuICBjb25zdCBpID0gcGF0aC5pbmRleE9mKCcuJyk7XG4gIGlmIChpID09PSAtMSkge1xuICAgIHJldHVybiBmb3JtLmNvbnRyb2xzW3BhdGhdO1xuICB9XG4gIGNvbnN0IGtleSA9IHBhdGguc3Vic3RyaW5nKDAsIGkpO1xuICBpZiAoZm9ybS5jb250cm9sc1trZXldIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuICAgIHJldHVybiBnZXRDb250cm9sRnJvbVBhdGgoZm9ybS5jb250cm9sc1trZXldIGFzIFVudHlwZWRGb3JtR3JvdXAsIHBhdGguc3Vic3RyaW5nKGkgKyAxKSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZvcm0gcGF0aDogJyR7a2V5fScgc2hvdWxkIGJlIGEgZm9ybSBncm91cC5gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVDb250cm9scyhmb3JtOiBVbnR5cGVkRm9ybUdyb3VwLCBwYXRoczogc3RyaW5nW10sIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gIChwYXRocyB8fCBbXSkuZm9yRWFjaCgocGF0aCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBnZXRDb250cm9sRnJvbVBhdGgoZm9ybSwgcGF0aCk7XG4gICAgaWYgKGNvbnRyb2wpIGNvbnRyb2wuZGlzYWJsZShvcHRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRWYWx1ZUluQXJyYXkoXG4gIGFycmF5Q29udHJvbDogVW50eXBlZEZvcm1BcnJheSxcbiAgY3JlYXRlQ29udHJvbDogKHZhbHVlPzogYW55KSA9PiBBYnN0cmFjdENvbnRyb2wsXG4gIGVxdWFsczogKHYxOiBhbnksIHYyOiBhbnkpID0+IGJvb2xlYW4sXG4gIGlzRW1wdHk6ICh2YWx1ZTogYW55KSA9PiBib29sZWFuLFxuICB2YWx1ZTogYW55LFxuICBvcHRpb25zPzogeyBlbWl0RXZlbnQ6IGJvb2xlYW47IGluc2VydEF0PzogbnVtYmVyOyBhbGxvd01hbnlOdWxsVmFsdWVzPzogYm9vbGVhbjsgYWxsb3dEdXBsaWNhdGVWYWx1ZT86IGJvb2xlYW4gfVxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRpc2FibGVkID0gYXJyYXlDb250cm9sLmRpc2FibGVkO1xuXG4gIGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XG4gIGxldCBpbmRleCA9IC0xO1xuICBsZXQgaXNFbXB0eVZhbHVlID0gaXNFbXB0eSh2YWx1ZSk7XG5cbiAgLy8gU2VhcmNoIGlmIHZhbHVlIGFscmVhZHkgZXhpc3RzXG4gIGlmICghaXNFbXB0eVZhbHVlICYmIG9wdGlvbnM/LmFsbG93RHVwbGljYXRlVmFsdWUgIT09IHRydWUpIHtcbiAgICBpbmRleCA9IChhcnJheUNvbnRyb2wudmFsdWUgfHwgW10pLmZpbmRJbmRleCgodikgPT4gZXF1YWxzKHZhbHVlLCB2KSk7XG4gIH1cblxuICAvLyBJZiB2YWx1ZSBub3QgZXhpc3RzLCBidXQgbGFzdCB2YWx1ZSBpcyBlbXB0eTogcmV1c2UgbGFzdCB2YWx1ZVxuICBpZiAoaW5kZXggPT09IC0xICYmIG9wdGlvbnM/LmFsbG93TWFueU51bGxWYWx1ZXMgIT09IHRydWUgJiYgYXJyYXlDb250cm9sLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsYXN0VmFsdWUgPSBhcnJheUNvbnRyb2wuYXQoYXJyYXlDb250cm9sLmxlbmd0aCAtIDEpLnZhbHVlO1xuICAgIGlmIChpc0VtcHR5KGxhc3RWYWx1ZSkpIHtcbiAgICAgIGluZGV4ID0gYXJyYXlDb250cm9sLmxlbmd0aCAtIDE7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVwbGFjZSB0aGUgZXhpc3RpbmcgdmFsdWVcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIGlmICghaXNFbXB0eVZhbHVlKSB7XG4gICAgICBhcnJheUNvbnRyb2wuYXQoaW5kZXgpLnBhdGNoVmFsdWUodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBjcmVhdGVDb250cm9sKHZhbHVlKTtcblxuICAgIC8vIEFwcGx5IHBhcmVudCBkaXNhYmxlZCBzdGF0ZSwgYmVmb3JlIHRvIHB1c2ggaXQgaW50byB0aGUgYXJyYXlcbiAgICAvLyBUaGlzIGlzIG5lZWQgdG8gYXZvaWQgcGFyZW50IGZvcm0gdG8gYmUgZW5hYmxlZFxuICAgIGlmIChkaXNhYmxlZCAmJiBjb250cm9sLmVuYWJsZWQpIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgZWxzZSBpZiAoIWRpc2FibGVkICYmIGNvbnRyb2wuZGlzYWJsZWQpIGNvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgIGlmIChpc05vdE5pbE9yTmFOKG9wdGlvbnM/Lmluc2VydEF0KSkge1xuICAgICAgYXJyYXlDb250cm9sLmluc2VydChvcHRpb25zLmluc2VydEF0LCBjb250cm9sLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJyYXlDb250cm9sLnB1c2goY29udHJvbCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGhhc0NoYW5nZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGhhc0NoYW5nZWQpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAvLyBNYXJrIGFycmF5IGNvbnRyb2wgZGlydHlcbiAgICAgIGlmICghaXNFbXB0eVZhbHVlKSB7XG4gICAgICAgIGFycmF5Q29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBoYXNDaGFuZ2VkO1xufVxuXG4vKipcbiAqIFNldCBhbiBhcnJheSB1c2luZyBnaXZlbiBkZWZhdWx0IHZhbHVlcy4gRWFjaCBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgcGFzcyB0byB0aGUgJ2NyZWF0ZUNvbnRyb2woKScgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gYXJyYXlDb250cm9sXG4gKiBAcGFyYW0gY3JlYXRlQ29udHJvbFxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZXNcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0QXJyYXlDb250cm9sc0Zyb21WYWx1ZXMoXG4gIGFycmF5Q29udHJvbDogVW50eXBlZEZvcm1BcnJheSxcbiAgY3JlYXRlQ29udHJvbDogKHZhbHVlPzogYW55KSA9PiBBYnN0cmFjdENvbnRyb2wsXG4gIGRlZmF1bHRWYWx1ZXM6IGFueVtdLFxuICBvcHRpb25zPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH1cbik6IGJvb2xlYW4ge1xuICBpZiAoYXJyYXlDb250cm9sLmxlbmd0aCA9PT0gMCAmJiAoIWRlZmF1bHRWYWx1ZXMgfHwgZGVmYXVsdFZhbHVlcy5sZW5ndGggPT09IDApKSByZXR1cm4gZmFsc2U7IC8vIE5vIGNoYW5nZXMgbmVlZFxuXG4gIGNvbnN0IGRpc2FibGVkID0gYXJyYXlDb250cm9sLmRpc2FibGVkO1xuXG4gIHdoaWxlIChhcnJheUNvbnRyb2wubGVuZ3RoID4gMCkge1xuICAgIGFycmF5Q29udHJvbC5yZW1vdmVBdChhcnJheUNvbnRyb2wubGVuZ3RoIC0gMSwgb3B0aW9ucyk7XG4gIH1cblxuICAoZGVmYXVsdFZhbHVlcyB8fCBbXSkuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICBjb25zdCBjb250cm9sID0gY3JlYXRlQ29udHJvbCh2YWx1ZSk7XG5cbiAgICAvLyBBcHBseSBwYXJlbnQgZGlzYWJsZWQgc3RhdGUsIGJlZm9yZSB0byBwdXNoIGl0IGludG8gdGhlIGFycmF5XG4gICAgLy8gVGhpcyBpcyBuZWVkIHRvIGF2b2lkIHBhcmVudCBmb3JtIHRvIGJlIGVuYWJsZWRcbiAgICBpZiAoZGlzYWJsZWQgJiYgY29udHJvbC5lbmFibGVkKSBjb250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIGVsc2UgaWYgKCFkaXNhYmxlZCAmJiBjb250cm9sLmRpc2FibGVkKSBjb250cm9sLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cbiAgICBhcnJheUNvbnRyb2wucHVzaChjb250cm9sLCBvcHRpb25zKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRydWU7IC8vIEhhcyBzb21lIGNoYW5nZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZUFycmF5KFxuICBhcnJheUNvbnRyb2w6IFVudHlwZWRGb3JtQXJyYXksXG4gIGNyZWF0ZUNvbnRyb2w6ICgpID0+IEFic3RyYWN0Q29udHJvbCxcbiAgbGVuZ3RoOiBudW1iZXIsXG4gIG9wdGlvbnM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfVxuKTogYm9vbGVhbiB7XG4gIGlmIChhcnJheUNvbnRyb2wubGVuZ3RoID09PSBsZW5ndGgpIHJldHVybiBmYWxzZTsgLy8gTm8gY2hhbmdlcyBuZWVkXG5cbiAgY29uc3QgZGlzYWJsZWQgPSBhcnJheUNvbnRyb2wuZGlzYWJsZWQ7XG5cbiAgLy8gUmVkdWNlIHNpemVcbiAgd2hpbGUgKGFycmF5Q29udHJvbC5sZW5ndGggPiBsZW5ndGgpIHtcbiAgICBhcnJheUNvbnRyb2wucmVtb3ZlQXQoYXJyYXlDb250cm9sLmxlbmd0aCAtIDEsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gSW5jcmVhc2Ugc2l6ZVxuICB3aGlsZSAoYXJyYXlDb250cm9sLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBjcmVhdGVDb250cm9sKCk7XG5cbiAgICAvLyBBcHBseSBwYXJlbnQgZGlzYWJsZWQgc3RhdGUsIGJlZm9yZSB0byBwdXNoIGl0IGludG8gdGhlIGFycmF5XG4gICAgLy8gVGhpcyBpcyBuZWVkIHRvIGF2b2lkIHBhcmVudCBmb3JtIHRvIGJlIGVuYWJsZWQsIGFmdGVyIGNhbGxpbmcgcmVzaXplQXJyYXkoKVxuICAgIGlmIChkaXNhYmxlZCAmJiBjb250cm9sLmVuYWJsZWQpIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgZWxzZSBpZiAoIWRpc2FibGVkICYmIGNvbnRyb2wuZGlzYWJsZWQpIGNvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgIGFycmF5Q29udHJvbC5wdXNoKGNvbnRyb2wsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7IC8vIEhhcyBzb21lIGNoYW5nZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVZhbHVlSW5BcnJheShhcnJheUNvbnRyb2w6IFVudHlwZWRGb3JtQXJyYXksIGlzRW1wdHk6ICh2YWx1ZTogYW55KSA9PiBib29sZWFuLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGFycmF5Q29udHJvbC5yZW1vdmVBdChpbmRleCk7XG4gIGFycmF5Q29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyVmFsdWVJbkFycmF5KGFycmF5Q29udHJvbDogVW50eXBlZEZvcm1BcnJheSwgaXNFbXB0eTogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW4sIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgY29uc3QgY29udHJvbCA9IGFycmF5Q29udHJvbC5hdChpbmRleCk7XG4gIGlmIChpc0VtcHR5KGNvbnRyb2wudmFsdWUpKSByZXR1cm4gZmFsc2U7IC8vIHNraXAgKG5vdCBuZWVkIHRvIGNsZWFyKVxuXG4gIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuICAgIGNvcHlFbnRpdHkyRm9ybSh7fSwgY29udHJvbCk7XG4gIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcbiAgICBjb250cm9sLnNldFZhbHVlKFtdKTtcbiAgfSBlbHNlIHtcbiAgICBjb250cm9sLnNldFZhbHVlKG51bGwpO1xuICB9XG4gIGFycmF5Q29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcmtBbGxBc1RvdWNoZWQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICBpZiAoIWNvbnRyb2wpIHJldHVybjtcbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgbWFya0Zvcm1Hcm91cEFzVG91Y2hlZChjb250cm9sLCB7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pOyAvLyByZWN1cnNpdmUgY2FsbFxuICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG4gICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgKGNvbnRyb2wuY29udHJvbHMgfHwgW10pLmZvckVhY2goKGMpID0+IG1hcmtDb250cm9sQXNUb3VjaGVkKGMsIHsgLi4ub3B0cywgb25seVNlbGY6IHRydWUgfSkpOyAvLyByZWN1cnNpdmUgY2FsbFxuICB9IGVsc2Uge1xuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrRm9ybUdyb3VwQXNUb3VjaGVkKGZvcm06IFVudHlwZWRGb3JtR3JvdXAsIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gIGlmICghZm9ybSkgcmV0dXJuO1xuICBmb3JtLm1hcmtBc1RvdWNoZWQob3B0cyk7XG4gIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpXG4gICAgLm1hcCgoa2V5KSA9PiBmb3JtLmNvbnRyb2xzW2tleV0pXG4gICAgLmZpbHRlcigoY29udHJvbCkgPT4gY29udHJvbC5lbmFibGVkKVxuICAgIC5mb3JFYWNoKChjb250cm9sKSA9PiBtYXJrQ29udHJvbEFzVG91Y2hlZChjb250cm9sLCBvcHRzKSk7XG4gIGZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFya0NvbnRyb2xBc1RvdWNoZWQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICBpZiAoIWNvbnRyb2wpIHJldHVybjtcbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgbWFya0FsbEFzVG91Y2hlZChjb250cm9sLCB7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pOyAvLyByZWN1cnNpdmUgY2FsbFxuICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG4gICAgKGNvbnRyb2wuY29udHJvbHMgfHwgW10pLmZvckVhY2goKGMpID0+IG1hcmtDb250cm9sQXNUb3VjaGVkKGMsIHsgLi4ub3B0cywgb25seVNlbGY6IHRydWUgfSkpOyAvLyByZWN1cnNpdmUgY2FsbFxuICB9IGVsc2Uge1xuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGZvcm06IFVudHlwZWRGb3JtR3JvdXAsIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gIGlmICghZm9ybSkgcmV0dXJuO1xuICBmb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0cyk7XG4gIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpXG4gICAgLm1hcCgoa2V5KSA9PiBmb3JtLmNvbnRyb2xzW2tleV0pXG4gICAgLmZpbHRlcigoY29udHJvbCkgPT4gY29udHJvbC5lbmFibGVkKVxuICAgIC5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcbiAgICAgICAgdXBkYXRlVmFsdWVBbmRWYWxpZGl0eShjb250cm9sLCB7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pOyAvLyByZWN1cnNpdmUgY2FsbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgLi4ub3B0cywgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrQXNVbnRvdWNoZWQoZm9ybTogVW50eXBlZEZvcm1Hcm91cCwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuIH0pIHtcbiAgaWYgKCFmb3JtKSByZXR1cm47XG4gIGZvcm0ubWFya0FzVW50b3VjaGVkKG9wdHMpO1xuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCBjb250cm9sID0gZm9ybS5nZXQoa2V5KTtcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcbiAgICAgIG1hcmtBc1VudG91Y2hlZChjb250cm9sLCB7IG9ubHlTZWxmOiB0cnVlIH0pOyAvLyByZWN1cnNpdmUgY2FsbFxuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBXYWl0IGVuZCBvZiBhc3luYyB2YWxpZGF0aW9uIChub3QgcGVuZGluZykuIFRoaXMgbmVlZCB0byBpbXBsZW1lbnQge3BlbmRpbmc6IGJvb2xlYW59XG4gKiByZXR1cm4gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRXaGlsZVBlbmRpbmc8VCBleHRlbmRzIHsgcGVuZGluZzogYm9vbGVhbiB9Pihmb3JtOiBULCBvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJlZGljYXRlOiBQcmVkaWNhdGU8dm9pZD4gPSAoKSA9PiBmb3JtLnBlbmRpbmcgIT09IHRydWU7XG4gIHJldHVybiB3YWl0Rm9yKHByZWRpY2F0ZSwgb3B0cyk7XG59XG5cbi8qKlxuICogV2FpdCBmb3JtIGlzIGlkbGUgKG5vdCBsb2FkaW5nKS4gVGhpcyBuZWVkIHRvIGltcGxlbWVudCB7bG9hZGluZzogYm9vbGVhbn1cbiAqXG4gKiBAcGFyYW0gZm9ybVxuICogQHBhcmFtIG9wdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRJZGxlPFQgZXh0ZW5kcyB7IGxvYWRpbmc6IGJvb2xlYW4gfT4oZm9ybTogVCwgb3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByZWRpY2F0ZTogUHJlZGljYXRlPHZvaWQ+ID0gKCkgPT4gZm9ybS5sb2FkaW5nICE9PSB0cnVlO1xuICByZXR1cm4gd2FpdEZvcihwcmVkaWNhdGUsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRm9ybUVycm9yc0J5UHJlZml4KGVycm9yczogRm9ybUVycm9ycywgLi4ucHJlZml4ZXM6IHN0cmluZ1tdKTogRm9ybUVycm9ycyB7XG4gIGlmIChpc0VtcHR5QXJyYXkocHJlZml4ZXMpKSByZXR1cm4gZXJyb3JzO1xuICByZXR1cm4gZmlsdGVyRm9ybUVycm9yc0J5UGF0aChlcnJvcnMsIChwYXRoKSA9PiBwcmVmaXhlcz8uc29tZSgocHJlZml4KSA9PiBwYXRoLnN0YXJ0c1dpdGgocHJlZml4KSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRm9ybUVycm9yc0J5UGF0aChlcnJvcnM6IEZvcm1FcnJvcnMsIGZpbHRlcjogUHJlZGljYXRlPHN0cmluZz4pOiBGb3JtRXJyb3JzIHtcbiAgaWYgKHR5cGVvZiBmaWx0ZXIgIT09ICdmdW5jdGlvbicpIHJldHVybiBlcnJvcnM7XG4gIHJldHVybiBmaWx0ZXJGb3JtRXJyb3JzKGVycm9ycywgKFtwYXRoLCBfXSkgPT4gZmlsdGVyKHBhdGgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckZvcm1FcnJvcnMoZXJyb3JzOiBGb3JtRXJyb3JzLCBmaWx0ZXI6IFByZWRpY2F0ZTxbc3RyaW5nLCBhbnldPik6IEZvcm1FcnJvcnMge1xuICBpZiAodHlwZW9mIGZpbHRlciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGVycm9ycztcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGVycm9ycylcbiAgICAuZmlsdGVyKGZpbHRlcilcbiAgICAucmVkdWNlKFxuICAgICAgKHJlcywgW3BhdGgsIGVycm9yXSkgPT4ge1xuICAgICAgICAvLyBJbml0IGVycm9yIG1hcFxuICAgICAgICByZXMgPSByZXMgfHwge307XG4gICAgICAgIC8vIEFkZCBjdXJyZW50IGVycm9yXG4gICAgICAgIHJlc1twYXRoXSA9IGVycm9yO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSxcbiAgICAgIDxGb3JtRXJyb3JzPnVuZGVmaW5lZFxuICAgICk7XG59XG4iXX0=
452
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9mb3Jtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFvQixNQUFNLGdCQUFnQixDQUFDO0FBQzNILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxPQUFPLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBR3hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQU03RDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLE1BQVcsRUFBRSxNQUF3QixFQUFFLElBQWtEO0lBQ3ZILE1BQU0sSUFBSSxHQUFHLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNwRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE1BQXVCLEVBQUUsSUFBc0I7SUFDcEYsT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUEyQixDQUFDO0FBQ3JFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBdUIsRUFBRSxPQUF3QixFQUFFLElBQWE7SUFDbEcsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFFMUMsYUFBYTtJQUNiLElBQUksT0FBTyxZ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LENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQyxFQUNXLFNBQVMsQ0FDdEIsQ0FBQztBQUNOLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbE9yTmFOLCBudWxsSWZVbmRlZmluZWQgfSBmcm9tICcuL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyB0b0RhdGVJU09TdHJpbmcgfSBmcm9tICcuL2RhdGVzJztcbmltcG9ydCB7IHdhaXRGb3IsIFdhaXRGb3JPcHRpb25zIH0gZnJvbSAnLi9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBQcmVkaWNhdGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQXBwRm9ybUFycmF5IH0gZnJvbSAnLi4vY29yZS9mb3JtL2FycmF5L2Zvcm0tYXJyYXknO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZvcm1FcnJvcnMge1xuICBba2V5OiBzdHJpbmddOiBWYWxpZGF0aW9uRXJyb3JzO1xufVxuXG4vKipcbiAqIEZpbGwgYSBmb3JtIHVzaW5nIGEgc291cmNlIGVudGl0eVxuICpcbiAqIEBwYXJhbSB0YXJnZXRcbiAqIEBwYXJhbSBlbnRpdHlcbiAqIEBwYXJhbSBvcHRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5RW50aXR5MkZvcm0oZW50aXR5OiBhbnksIHRhcmdldDogVW50eXBlZEZvcm1Hcm91cCwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgb25seVNlbGY/OiBib29sZWFuIH0pIHtcbiAgY29uc3QganNvbiA9IGdldEZvcm1WYWx1ZUZyb21FbnRpdHkoZW50aXR5LCB0YXJnZXQpO1xuICB0YXJnZXQucGF0Y2hWYWx1ZShqc29uLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZvcm1WYWx1ZUZyb21FbnRpdHkoZW50aXR5OiBhbnkgfCB1bmRlZmluZWQsIGZvcm06IFVudHlwZWRGb3JtR3JvdXApOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgcmV0dXJuIGFkYXB0VmFsdWVUb0NvbnRyb2woZW50aXR5LCBmb3JtKSBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhbiBlbnRpdHkgaW50byBhIHNpbXBsZSBvYmplY3QsIGNvbXBhdGlibGUgd2l0aCB0aGUgZ2l2ZW4gZm9ybVxuICpcbiAqIEBwYXJhbSBzb3VyY2UgYW4gZW50aXR5IChvciBzdWJlbnRpdHkpXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHBhcmFtIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkYXB0VmFsdWVUb0NvbnRyb2woc291cmNlOiBhbnkgfCB1bmRlZmluZWQsIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgcGF0aD86IHN0cmluZyk6IGFueSB7XG4gIGNvbnN0IHBhdGhQcmVmaXggPSBwYXRoID8gcGF0aCArICcuJyA6ICcnO1xuXG4gIC8vIEZvcm0gZ3JvdXBcbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pblxuICAgIGZvciAoY29uc3Qga2V5IGluIGNvbnRyb2wuY29udHJvbHMpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gYWRhcHRWYWx1ZVRvQ29udHJvbChzb3VyY2UgJiYgc291cmNlW2tleV0sIGNvbnRyb2wuY29udHJvbHNba2V5XSwgcGF0aFByZWZpeCArIGtleSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBBcnJheVxuICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcbiAgICAvLyBTcGxpdCwgaWYgbWFueSB2YWx1ZXMgaW4gYSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHNvdXJjZSA9IHNvdXJjZS5zcGxpdCgnfCcpO1xuICAgIH1cbiAgICAvLyBTa2lwIGlmIHZhbHVlIGlzIG5vdCBhbiBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gUmVzaXphYmxlIGFycmF5XG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBBcHBGb3JtQXJyYXkpIHtcbiAgICAgIGNvbnN0IGV4YW1wbGVDb250cm9sID0gY29udHJvbC5jcmVhdGVDb250cm9sKCk7XG4gICAgICByZXR1cm4gc291cmNlLm1hcCgoaXRlbSwgaW5kZXgpID0+IGFkYXB0VmFsdWVUb0NvbnRyb2woaXRlbSwgZXhhbXBsZUNvbnRyb2wsIHBhdGhQcmVmaXggKyAnIycgKyBpbmRleCkpIGFzIGFueVtdO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBhcnJheVxuICAgIGVsc2UgaWYgKGNvbnRyb2wubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3RDb250cm9sID0gY29udHJvbC5hdCgwKTtcbiAgICAgIC8vIFVzZSB0aGUgZmlyc3QgZm9ybSBncm91cCwgYXMgbW9kZWxcbiAgICAgIGxldCByZXN1bHQgPSBzb3VyY2UubWFwKChpdGVtLCBpbmRleCkgPT4gYWRhcHRWYWx1ZVRvQ29udHJvbChpdGVtLCBmaXJzdENvbnRyb2wsIHBhdGhQcmVmaXggKyAnIycgKyBpbmRleCkpIGFzIGFueVtdO1xuXG4gICAgICAvLyBUcnVuY2F0ZSBpZiB0b28gbWFueSB2YWx1ZXNcbiAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gY29udHJvbC5sZW5ndGgpIHtcbiAgICAgICAgaWYgKGZpcnN0Q29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQ29udHJvbCkge1xuICAgICAgICAgIGZvciAobGV0IGkgPSBjb250cm9sLmxlbmd0aDsgaSA8IHJlc3VsdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29udHJvbC5wdXNoKG5ldyBVbnR5cGVkRm9ybUNvbnRyb2wobnVsbCwgZmlyc3RDb250cm9sLnZhbGlkYXRvcikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oYFdBUk46IHBsZWFzZSByZXNpemUgdGhlIEZvcm1BcnJheSAnJHtwYXRoIHx8ICcnfScgdG8gdGhlIHNhbWUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBhcnJheWApO1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCBjb250cm9sLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHZhbHVlcyBpZiBub3QgZW5vdWdodFxuICAgICAgZWxzZSBpZiAocmVzdWx0Lmxlbmd0aCA8IGNvbnRyb2wubGVuZ3RoKSB7XG4gICAgICAgIC8vY29uc29sZS53YXJuKGBXQVJOOiBBZGRpbmcgbnVsbCB2YWx1ZSB0byBhcnJheSB2YWx1ZXNgKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJlc3VsdC5sZW5ndGg7IGkgPCBjb250cm9sLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2gobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8vIFNraXAgaWYgdW5hYmxlIHRvIGZpbmQgYSBjb250cm9sIGluIHRoZSBhcnJheVxuICAgIGVsc2Uge1xuICAgICAgaWYgKGlzTm90RW1wdHlBcnJheShzb3VyY2UpKSBjb25zb2xlLndhcm4oYFdBUk46IHBsZWFzZSByZXNpemUgdGhlIEZvcm1BcnJheSAnJHtwYXRofScgdG8gdGhlIHNhbWUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBhcnJheWApO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZvcm0gY29udHJvbFxuICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQ29udHJvbCkge1xuICAgIC8vIERhdGVcbiAgICBpZiAoaXNNb21lbnQoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHRvRGF0ZUlTT1N0cmluZyhzb3VyY2UpO1xuICAgIH1cbiAgICAvLyBBbnkgb3RoZXIgY29udHJvbDogcmVwbGFjZSB1bmRlZmluZWQgYnkgbnVsbCB2YWx1ZVxuICAgIC8vIGJlY2F1c2UgVW5kZWZpbmVkIGlzIG5vdCBhdXRob3JpemVkIGFzIGNvbnRyb2wgdmFsdWVcbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsSWZVbmRlZmluZWQoc291cmNlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ0Zvcm1FcnJvcnMoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBsb2dQcmVmaXg/OiBzdHJpbmcsIHBhdGg/OiBzdHJpbmcpIHtcbiAgaWYgKCFjb250cm9sIHx8IGNvbnRyb2wudmFsaWQpIHJldHVybjtcbiAgbG9nUHJlZml4ID0gbG9nUHJlZml4IHx8ICcnO1xuICAvLyBGb3JtIGdyb3VwXG4gIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuICAgIGlmICghcGF0aCkgY29uc29sZS53YXJuKGAke2xvZ1ByZWZpeH0gRm9ybSBlcnJvcnM6YCk7XG4gICAgaWYgKGNvbnRyb2wuZXJyb3JzKSB7XG4gICAgICBPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycykuZm9yRWFjaCgoZXJyb3IpID0+IGNvbnNvbGUud2FybihgJHtsb2dQcmVmaXh9IC0+ICR7cGF0aCB8fCAnJ30gKCR7ZXJyb3J9KWApKTtcbiAgICB9XG4gICAgaWYgKGNvbnRyb2wuY29udHJvbHMpIHtcbiAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2wuY29udHJvbHMpLmZvckVhY2goXG4gICAgICAgIChjaGlsZCkgPT4gbG9nRm9ybUVycm9ycyhjb250cm9sLmNvbnRyb2xzW2NoaWxkXSwgbG9nUHJlZml4LCBwYXRoID8gYCR7cGF0aH0uJHtjaGlsZH1gIDogY2hpbGQpIC8vIFJlY3Vyc2l2ZSBjYWxsXG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvLyBGb3JtIGFycmF5XG4gIGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG4gICAgaWYgKGNvbnRyb2wuZXJyb3JzKSB7XG4gICAgICBPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycykuZm9yRWFjaCgoZXJyb3IpID0+IGNvbnNvbGUud2FybihgJHtsb2dQcmVmaXh9IC0+ICR7cGF0aCB8fCAnJ30gKCR7ZXJyb3J9KWApKTtcbiAgICB9XG4gICAgY29udHJvbC5jb250cm9scy5mb3JFYWNoKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgIGxvZ0Zvcm1FcnJvcnMoY2hpbGQsIGxvZ1ByZWZpeCwgcGF0aCA/IGAke3BhdGh9LiR7aW5kZXh9YCA6IGAke2luZGV4fWApOyAvLyBSZWN1cnNpdmUgY2FsbFxuICAgIH0pO1xuICB9XG4gIC8vIE90aGVyIGNvbnRyb2wncyBlcnJvcnNcbiAgZWxzZSBpZiAoY29udHJvbC5lcnJvcnMpIHtcbiAgICBPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycykuZm9yRWFjaCgoZXJyb3IpID0+IGNvbnNvbGUud2FybihgJHtsb2dQcmVmaXh9IC0+ICR7cGF0aCB8fCAnJ30gKCR7ZXJyb3J9KWApKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUVycm9ycyhcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxuICBvcHRzPzoge1xuICAgIGNvbnRyb2xOYW1lPzogc3RyaW5nO1xuICAgIHJlc3VsdD86IEZvcm1FcnJvcnM7XG4gICAgcmVjdXJzaXZlPzogYm9vbGVhbjtcbiAgfVxuKTogRm9ybUVycm9ycyB7XG4gIGlmICghY29udHJvbCB8fCBjb250cm9sLnZhbGlkKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICBvcHRzLnJlc3VsdCA9IG9wdHMucmVzdWx0IHx8IHt9O1xuXG4gIC8vIEZvcm0gZ3JvdXBcbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgLy8gQ29weSBlcnJvcnNcbiAgICBpZiAoY29udHJvbC5lcnJvcnMpIHtcbiAgICAgIGlmIChvcHRzLmNvbnRyb2xOYW1lKSB7XG4gICAgICAgIG9wdHMucmVzdWx0W29wdHMuY29udHJvbE5hbWVdID0ge1xuICAgICAgICAgIC4uLmNvbnRyb2wuZXJyb3JzLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3B0cy5yZXN1bHQgPSB7XG4gICAgICAgICAgLi4ub3B0cy5yZXN1bHQsXG4gICAgICAgICAgLi4uY29udHJvbC5lcnJvcnMsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMucmVjdXJzaXZlICE9PSBmYWxzZSkge1xuICAgICAgLy8gTG9vcCBvbiBjaGlsZHJlbiBjb250cm9sc1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29udHJvbC5jb250cm9scykge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGNvbnRyb2wuY29udHJvbHNba2V5XTtcbiAgICAgICAgaWYgKGNoaWxkPy5lbmFibGVkKSB7XG4gICAgICAgICAgZ2V0Rm9ybUVycm9ycyhjaGlsZCwge1xuICAgICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgICAgIGNvbnRyb2xOYW1lOiBvcHRzLmNvbnRyb2xOYW1lID8gW29wdHMuY29udHJvbE5hbWUsIGtleV0uam9pbignLicpIDoga2V5LFxuICAgICAgICAgICAgcmVzdWx0OiBvcHRzLnJlc3VsdCwgLy8gTWFrZSBzdXJlIHRvIGtlZXAgdGhlIHNhbWUgcmVzdWx0IG9iamVjdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRm9ybSBhcnJheVxuICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1BcnJheSkge1xuICAgIC8vIENvcHkgZXJyb3JzXG4gICAgaWYgKGNvbnRyb2wuZXJyb3JzKSB7XG4gICAgICBpZiAob3B0cy5jb250cm9sTmFtZSkge1xuICAgICAgICBvcHRzLnJlc3VsdFtvcHRzLmNvbnRyb2xOYW1lXSA9IHtcbiAgICAgICAgICAuLi5jb250cm9sLmVycm9ycyxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wdHMucmVzdWx0ID0ge1xuICAgICAgICAgIC4uLm9wdHMucmVzdWx0LFxuICAgICAgICAgIC4uLmNvbnRyb2wuZXJyb3JzLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnRyb2wuY29udHJvbHMuZm9yRWFjaCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICBnZXRGb3JtRXJyb3JzKGNoaWxkLCB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIGNvbnRyb2xOYW1lOiAob3B0cy5jb250cm9sTmFtZSB8fCAnJykgKyAnLicgKyBpbmRleCxcbiAgICAgICAgcmVzdWx0OiBvcHRzLnJlc3VsdCwgLy8gTWFrZSBzdXJlIHRvIGtlZXAgdGhlIHNhbWUgcmVzdWx0IG9iamVjdFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBPdGhlciB0eXBlIG9mIGNvbnRyb2wgKGUuZyBzaW1wbGUgY29udHJvbClcbiAgZWxzZSBpZiAoY29udHJvbC5lcnJvcnMpIHtcbiAgICBpZiAob3B0cy5jb250cm9sTmFtZSkge1xuICAgICAgb3B0cy5yZXN1bHRbb3B0cy5jb250cm9sTmFtZV0gPSB7XG4gICAgICAgIC4uLmNvbnRyb2wuZXJyb3JzLFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3B0cy5yZXN1bHQgPSB7XG4gICAgICAgIC4uLm9wdHMucmVzdWx0LFxuICAgICAgICAuLi5jb250cm9sLmVycm9ycyxcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIHJldHVybiBvcHRzLnJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENvbnRyb2xGcm9tUGF0aChmb3JtOiBVbnR5cGVkRm9ybUdyb3VwLCBwYXRoOiBzdHJpbmcpOiBBYnN0cmFjdENvbnRyb2wge1xuICBjb25zdCBpID0gcGF0aC5pbmRleE9mKCcuJyk7XG4gIGlmIChpID09PSAtMSkge1xuICAgIHJldHVybiBmb3JtLmNvbnRyb2xzW3BhdGhdO1xuICB9XG4gIGNvbnN0IGtleSA9IHBhdGguc3Vic3RyaW5nKDAsIGkpO1xuICBpZiAoZm9ybS5jb250cm9sc1trZXldIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuICAgIHJldHVybiBnZXRDb250cm9sRnJvbVBhdGgoZm9ybS5jb250cm9sc1trZXldIGFzIFVudHlwZWRGb3JtR3JvdXAsIHBhdGguc3Vic3RyaW5nKGkgKyAxKSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGZvcm0gcGF0aDogJyR7a2V5fScgc2hvdWxkIGJlIGEgZm9ybSBncm91cC5gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVDb250cm9scyhmb3JtOiBVbnR5cGVkRm9ybUdyb3VwLCBwYXRoczogc3RyaW5nW10sIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gIChwYXRocyB8fCBbXSkuZm9yRWFjaCgocGF0aCkgPT4ge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBnZXRDb250cm9sRnJvbVBhdGgoZm9ybSwgcGF0aCk7XG4gICAgaWYgKGNvbnRyb2wpIGNvbnRyb2wuZGlzYWJsZShvcHRzKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRWYWx1ZUluQXJyYXkoXG4gIGFycmF5Q29udHJvbDogVW50eXBlZEZvcm1BcnJheSxcbiAgY3JlYXRlQ29udHJvbDogKHZhbHVlPzogYW55KSA9PiBBYnN0cmFjdENvbnRyb2wsXG4gIGVxdWFsczogKHYxOiBhbnksIHYyOiBhbnkpID0+IGJvb2xlYW4sXG4gIGlzRW1wdHk6ICh2YWx1ZTogYW55KSA9PiBib29sZWFuLFxuICB2YWx1ZTogYW55LFxuICBvcHRpb25zPzogeyBlbWl0RXZlbnQ6IGJvb2xlYW47IGluc2VydEF0PzogbnVtYmVyOyBhbGxvd01hbnlOdWxsVmFsdWVzPzogYm9vbGVhbjsgYWxsb3dEdXBsaWNhdGVWYWx1ZT86IGJvb2xlYW4gfVxuKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRpc2FibGVkID0gYXJyYXlDb250cm9sLmRpc2FibGVkO1xuXG4gIGxldCBoYXNDaGFuZ2VkID0gZmFsc2U7XG4gIGxldCBpbmRleCA9IC0xO1xuICBsZXQgaXNFbXB0eVZhbHVlID0gaXNFbXB0eSh2YWx1ZSk7XG5cbiAgLy8gU2VhcmNoIGlmIHZhbHVlIGFscmVhZHkgZXhpc3RzXG4gIGlmICghaXNFbXB0eVZhbHVlICYmIG9wdGlvbnM/LmFsbG93RHVwbGljYXRlVmFsdWUgIT09IHRydWUpIHtcbiAgICBpbmRleCA9IChhcnJheUNvbnRyb2wudmFsdWUgfHwgW10pLmZpbmRJbmRleCgodikgPT4gZXF1YWxzKHZhbHVlLCB2KSk7XG4gIH1cblxuICAvLyBJZiB2YWx1ZSBub3QgZXhpc3RzLCBidXQgbGFzdCB2YWx1ZSBpcyBlbXB0eTogcmV1c2UgbGFzdCB2YWx1ZVxuICBpZiAoaW5kZXggPT09IC0xICYmIG9wdGlvbnM/LmFsbG93TWFueU51bGxWYWx1ZXMgIT09IHRydWUgJiYgYXJyYXlDb250cm9sLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBsYXN0VmFsdWUgPSBhcnJheUNvbnRyb2wuYXQoYXJyYXlDb250cm9sLmxlbmd0aCAtIDEpLnZhbHVlO1xuICAgIGlmIChpc0VtcHR5KGxhc3RWYWx1ZSkpIHtcbiAgICAgIGluZGV4ID0gYXJyYXlDb250cm9sLmxlbmd0aCAtIDE7XG4gICAgfVxuICB9XG5cbiAgLy8gUmVwbGFjZSB0aGUgZXhpc3RpbmcgdmFsdWVcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIGlmICghaXNFbXB0eVZhbHVlKSB7XG4gICAgICBhcnJheUNvbnRyb2wuYXQoaW5kZXgpLnBhdGNoVmFsdWUodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgaGFzQ2hhbmdlZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBjcmVhdGVDb250cm9sKHZhbHVlKTtcblxuICAgIC8vIEFwcGx5IHBhcmVudCBkaXNhYmxlZCBzdGF0ZSwgYmVmb3JlIHRvIHB1c2ggaXQgaW50byB0aGUgYXJyYXlcbiAgICAvLyBUaGlzIGlzIG5lZWQgdG8gYXZvaWQgcGFyZW50IGZvcm0gdG8gYmUgZW5hYmxlZFxuICAgIGlmIChkaXNhYmxlZCAmJiBjb250cm9sLmVuYWJsZWQpIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgZWxzZSBpZiAoIWRpc2FibGVkICYmIGNvbnRyb2wuZGlzYWJsZWQpIGNvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgIGlmIChpc05vdE5pbE9yTmFOKG9wdGlvbnM/Lmluc2VydEF0KSkge1xuICAgICAgYXJyYXlDb250cm9sLmluc2VydChvcHRpb25zLmluc2VydEF0LCBjb250cm9sLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJyYXlDb250cm9sLnB1c2goY29udHJvbCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGhhc0NoYW5nZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKGhhc0NoYW5nZWQpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICAvLyBNYXJrIGFycmF5IGNvbnRyb2wgZGlydHlcbiAgICAgIGlmICghaXNFbXB0eVZhbHVlKSB7XG4gICAgICAgIGFycmF5Q29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBoYXNDaGFuZ2VkO1xufVxuXG4vKipcbiAqIFNldCBhbiBhcnJheSB1c2luZyBnaXZlbiBkZWZhdWx0IHZhbHVlcy4gRWFjaCBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgcGFzcyB0byB0aGUgJ2NyZWF0ZUNvbnRyb2woKScgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0gYXJyYXlDb250cm9sXG4gKiBAcGFyYW0gY3JlYXRlQ29udHJvbFxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZXNcbiAqIEBwYXJhbSBvcHRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0QXJyYXlDb250cm9sc0Zyb21WYWx1ZXMoXG4gIGFycmF5Q29udHJvbDogVW50eXBlZEZvcm1BcnJheSxcbiAgY3JlYXRlQ29udHJvbDogKHZhbHVlPzogYW55KSA9PiBBYnN0cmFjdENvbnRyb2wsXG4gIGRlZmF1bHRWYWx1ZXM6IGFueVtdLFxuICBvcHRpb25zPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH1cbik6IGJvb2xlYW4ge1xuICBpZiAoYXJyYXlDb250cm9sLmxlbmd0aCA9PT0gMCAmJiAoIWRlZmF1bHRWYWx1ZXMgfHwgZGVmYXVsdFZhbHVlcy5sZW5ndGggPT09IDApKSByZXR1cm4gZmFsc2U7IC8vIE5vIGNoYW5nZXMgbmVlZFxuXG4gIGNvbnN0IGRpc2FibGVkID0gYXJyYXlDb250cm9sLmRpc2FibGVkO1xuXG4gIHdoaWxlIChhcnJheUNvbnRyb2wubGVuZ3RoID4gMCkge1xuICAgIGFycmF5Q29udHJvbC5yZW1vdmVBdChhcnJheUNvbnRyb2wubGVuZ3RoIC0gMSwgb3B0aW9ucyk7XG4gIH1cblxuICAoZGVmYXVsdFZhbHVlcyB8fCBbXSkuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICBjb25zdCBjb250cm9sID0gY3JlYXRlQ29udHJvbCh2YWx1ZSk7XG5cbiAgICAvLyBBcHBseSBwYXJlbnQgZGlzYWJsZWQgc3RhdGUsIGJlZm9yZSB0byBwdXNoIGl0IGludG8gdGhlIGFycmF5XG4gICAgLy8gVGhpcyBpcyBuZWVkIHRvIGF2b2lkIHBhcmVudCBmb3JtIHRvIGJlIGVuYWJsZWRcbiAgICBpZiAoZGlzYWJsZWQgJiYgY29udHJvbC5lbmFibGVkKSBjb250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIGVsc2UgaWYgKCFkaXNhYmxlZCAmJiBjb250cm9sLmRpc2FibGVkKSBjb250cm9sLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cbiAgICBhcnJheUNvbnRyb2wucHVzaChjb250cm9sLCBvcHRpb25zKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRydWU7IC8vIEhhcyBzb21lIGNoYW5nZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2l6ZUFycmF5KFxuICBhcnJheUNvbnRyb2w6IFVudHlwZWRGb3JtQXJyYXksXG4gIGNyZWF0ZUNvbnRyb2w6ICgpID0+IEFic3RyYWN0Q29udHJvbCxcbiAgbGVuZ3RoOiBudW1iZXIsXG4gIG9wdGlvbnM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfVxuKTogYm9vbGVhbiB7XG4gIGlmIChhcnJheUNvbnRyb2wubGVuZ3RoID09PSBsZW5ndGgpIHJldHVybiBmYWxzZTsgLy8gTm8gY2hhbmdlcyBuZWVkXG5cbiAgY29uc3QgZGlzYWJsZWQgPSBhcnJheUNvbnRyb2wuZGlzYWJsZWQ7XG5cbiAgLy8gUmVkdWNlIHNpemVcbiAgd2hpbGUgKGFycmF5Q29udHJvbC5sZW5ndGggPiBsZW5ndGgpIHtcbiAgICBhcnJheUNvbnRyb2wucmVtb3ZlQXQoYXJyYXlDb250cm9sLmxlbmd0aCAtIDEsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gSW5jcmVhc2Ugc2l6ZVxuICB3aGlsZSAoYXJyYXlDb250cm9sLmxlbmd0aCA8IGxlbmd0aCkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSBjcmVhdGVDb250cm9sKCk7XG5cbiAgICAvLyBBcHBseSBwYXJlbnQgZGlzYWJsZWQgc3RhdGUsIGJlZm9yZSB0byBwdXNoIGl0IGludG8gdGhlIGFycmF5XG4gICAgLy8gVGhpcyBpcyBuZWVkIHRvIGF2b2lkIHBhcmVudCBmb3JtIHRvIGJlIGVuYWJsZWQsIGFmdGVyIGNhbGxpbmcgcmVzaXplQXJyYXkoKVxuICAgIGlmIChkaXNhYmxlZCAmJiBjb250cm9sLmVuYWJsZWQpIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgZWxzZSBpZiAoIWRpc2FibGVkICYmIGNvbnRyb2wuZGlzYWJsZWQpIGNvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgIGFycmF5Q29udHJvbC5wdXNoKGNvbnRyb2wsIG9wdGlvbnMpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7IC8vIEhhcyBzb21lIGNoYW5nZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVZhbHVlSW5BcnJheShhcnJheUNvbnRyb2w6IFVudHlwZWRGb3JtQXJyYXksIGlzRW1wdHk6ICh2YWx1ZTogYW55KSA9PiBib29sZWFuLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gIGFycmF5Q29udHJvbC5yZW1vdmVBdChpbmRleCk7XG4gIGFycmF5Q29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyVmFsdWVJbkFycmF5KGFycmF5Q29udHJvbDogVW50eXBlZEZvcm1BcnJheSwgaXNFbXB0eTogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW4sIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgY29uc3QgY29udHJvbCA9IGFycmF5Q29udHJvbC5hdChpbmRleCk7XG4gIGlmIChpc0VtcHR5KGNvbnRyb2wudmFsdWUpKSByZXR1cm4gZmFsc2U7IC8vIHNraXAgKG5vdCBuZWVkIHRvIGNsZWFyKVxuXG4gIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xuICAgIGNvcHlFbnRpdHkyRm9ybSh7fSwgY29udHJvbCk7XG4gIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcbiAgICBjb250cm9sLnNldFZhbHVlKFtdKTtcbiAgfSBlbHNlIHtcbiAgICBjb250cm9sLnNldFZhbHVlKG51bGwpO1xuICB9XG4gIGFycmF5Q29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcmtBbGxBc1RvdWNoZWQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICBpZiAoIWNvbnRyb2wpIHJldHVybjtcbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgbWFya0Zvcm1Hcm91cEFzVG91Y2hlZChjb250cm9sLCB7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pOyAvLyByZWN1cnNpdmUgY2FsbFxuICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG4gICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgKGNvbnRyb2wuY29udHJvbHMgfHwgW10pLmZvckVhY2goKGMpID0+IG1hcmtDb250cm9sQXNUb3VjaGVkKGMsIHsgLi4ub3B0cywgb25seVNlbGY6IHRydWUgfSkpOyAvLyByZWN1cnNpdmUgY2FsbFxuICB9IGVsc2Uge1xuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrRm9ybUdyb3VwQXNUb3VjaGVkKGZvcm06IFVudHlwZWRGb3JtR3JvdXAsIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gIGlmICghZm9ybSkgcmV0dXJuO1xuICBmb3JtLm1hcmtBc1RvdWNoZWQob3B0cyk7XG4gIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpXG4gICAgLm1hcCgoa2V5KSA9PiBmb3JtLmNvbnRyb2xzW2tleV0pXG4gICAgLmZpbHRlcigoY29udHJvbCkgPT4gY29udHJvbC5lbmFibGVkKVxuICAgIC5mb3JFYWNoKChjb250cm9sKSA9PiBtYXJrQ29udHJvbEFzVG91Y2hlZChjb250cm9sLCBvcHRzKSk7XG4gIGZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFya0NvbnRyb2xBc1RvdWNoZWQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBvcHRzPzogeyBvbmx5U2VsZj86IGJvb2xlYW47IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICBpZiAoIWNvbnRyb2wpIHJldHVybjtcbiAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSB7XG4gICAgbWFya0FsbEFzVG91Y2hlZChjb250cm9sLCB7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pOyAvLyByZWN1cnNpdmUgY2FsbFxuICB9IGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XG4gICAgKGNvbnRyb2wuY29udHJvbHMgfHwgW10pLmZvckVhY2goKGMpID0+IG1hcmtDb250cm9sQXNUb3VjaGVkKGMsIHsgLi4ub3B0cywgb25seVNlbGY6IHRydWUgfSkpOyAvLyByZWN1cnNpdmUgY2FsbFxuICB9IGVsc2Uge1xuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGZvcm06IFVudHlwZWRGb3JtR3JvdXAsIG9wdHM/OiB7IG9ubHlTZWxmPzogYm9vbGVhbjsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KSB7XG4gIGlmICghZm9ybSkgcmV0dXJuO1xuICBmb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkob3B0cyk7XG4gIE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpXG4gICAgLm1hcCgoa2V5KSA9PiBmb3JtLmNvbnRyb2xzW2tleV0pXG4gICAgLmZpbHRlcigoY29udHJvbCkgPT4gY29udHJvbC5lbmFibGVkKVxuICAgIC5mb3JFYWNoKChjb250cm9sKSA9PiB7XG4gICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcbiAgICAgICAgdXBkYXRlVmFsdWVBbmRWYWxpZGl0eShjb250cm9sLCB7IC4uLm9wdHMsIG9ubHlTZWxmOiB0cnVlIH0pOyAvLyByZWN1cnNpdmUgY2FsbFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgLi4ub3B0cywgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrQXNVbnRvdWNoZWQoZm9ybTogVW50eXBlZEZvcm1Hcm91cCwgb3B0cz86IHsgb25seVNlbGY/OiBib29sZWFuIH0pIHtcbiAgaWYgKCFmb3JtKSByZXR1cm47XG4gIGZvcm0ubWFya0FzVW50b3VjaGVkKG9wdHMpO1xuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBjb25zdCBjb250cm9sID0gZm9ybS5nZXQoa2V5KTtcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcbiAgICAgIG1hcmtBc1VudG91Y2hlZChjb250cm9sLCB7IG9ubHlTZWxmOiB0cnVlIH0pOyAvLyByZWN1cnNpdmUgY2FsbFxuICAgIH0gZWxzZSB7XG4gICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBXYWl0IGVuZCBvZiBhc3luYyB2YWxpZGF0aW9uIChub3QgcGVuZGluZykuIFRoaXMgbmVlZCB0byBpbXBsZW1lbnQge3BlbmRpbmc6IGJvb2xlYW59XG4gKiByZXR1cm4gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRXaGlsZVBlbmRpbmc8VCBleHRlbmRzIHsgcGVuZGluZzogYm9vbGVhbiB9Pihmb3JtOiBULCBvcHRzPzogV2FpdEZvck9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJlZGljYXRlOiBQcmVkaWNhdGU8dm9pZD4gPSAoKSA9PiBmb3JtLnBlbmRpbmcgIT09IHRydWU7XG4gIHJldHVybiB3YWl0Rm9yKHByZWRpY2F0ZSwgb3B0cyk7XG59XG5cbi8qKlxuICogV2FpdCBmb3JtIGlzIGlkbGUgKG5vdCBsb2FkaW5nKS4gVGhpcyBuZWVkIHRvIGltcGxlbWVudCB7bG9hZGluZzogYm9vbGVhbn1cbiAqXG4gKiBAcGFyYW0gZm9ybVxuICogQHBhcmFtIG9wdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdhaXRJZGxlPFQgZXh0ZW5kcyB7IGxvYWRpbmc6IGJvb2xlYW4gfT4oZm9ybTogVCwgb3B0cz86IFdhaXRGb3JPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByZWRpY2F0ZTogUHJlZGljYXRlPHZvaWQ+ID0gKCkgPT4gZm9ybS5sb2FkaW5nICE9PSB0cnVlO1xuICByZXR1cm4gd2FpdEZvcihwcmVkaWNhdGUsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRm9ybUVycm9yc0J5UHJlZml4KGVycm9yczogRm9ybUVycm9ycywgLi4ucHJlZml4ZXM6IHN0cmluZ1tdKTogRm9ybUVycm9ycyB7XG4gIGlmIChpc0VtcHR5QXJyYXkocHJlZml4ZXMpKSByZXR1cm4gZXJyb3JzO1xuICByZXR1cm4gZmlsdGVyRm9ybUVycm9yc0J5UGF0aChlcnJvcnMsIChwYXRoKSA9PiBwcmVmaXhlcz8uc29tZSgocHJlZml4KSA9PiBwYXRoLnN0YXJ0c1dpdGgocHJlZml4KSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyRm9ybUVycm9yc0J5UGF0aChlcnJvcnM6IEZvcm1FcnJvcnMsIGZpbHRlcjogUHJlZGljYXRlPHN0cmluZz4pOiBGb3JtRXJyb3JzIHtcbiAgaWYgKHR5cGVvZiBmaWx0ZXIgIT09ICdmdW5jdGlvbicpIHJldHVybiBlcnJvcnM7XG4gIHJldHVybiBmaWx0ZXJGb3JtRXJyb3JzKGVycm9ycywgKFtwYXRoLCBfXSkgPT4gZmlsdGVyKHBhdGgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckZvcm1FcnJvcnMoZXJyb3JzOiBGb3JtRXJyb3JzLCBmaWx0ZXI6IFByZWRpY2F0ZTxbc3RyaW5nLCBhbnldPik6IEZvcm1FcnJvcnMge1xuICBpZiAodHlwZW9mIGZpbHRlciAhPT0gJ2Z1bmN0aW9uJykgcmV0dXJuIGVycm9ycztcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGVycm9ycylcbiAgICAuZmlsdGVyKGZpbHRlcilcbiAgICAucmVkdWNlKFxuICAgICAgKHJlcywgW3BhdGgsIGVycm9yXSkgPT4ge1xuICAgICAgICAvLyBJbml0IGVycm9yIG1hcFxuICAgICAgICByZXMgPSByZXMgfHwge307XG4gICAgICAgIC8vIEFkZCBjdXJyZW50IGVycm9yXG4gICAgICAgIHJlc1twYXRoXSA9IGVycm9yO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSxcbiAgICAgIDxGb3JtRXJyb3JzPnVuZGVmaW5lZFxuICAgICk7XG59XG4iXX0=
@@ -3514,6 +3514,20 @@ function getFormErrors(control, opts) {
3514
3514
  }
3515
3515
  // Form array
3516
3516
  else if (control instanceof UntypedFormArray) {
3517
+ // Copy errors
3518
+ if (control.errors) {
3519
+ if (opts.controlName) {
3520
+ opts.result[opts.controlName] = {
3521
+ ...control.errors,
3522
+ };
3523
+ }
3524
+ else {
3525
+ opts.result = {
3526
+ ...opts.result,
3527
+ ...control.errors,
3528
+ };
3529
+ }
3530
+ }
3517
3531
  control.controls.forEach((child, index) => {
3518
3532
  getFormErrors(child, {
3519
3533
  ...opts,