@ai-table/grid 0.0.15 → 0.0.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. package/esm2022/components/cell-editors/select/select-editor.component.mjs +2 -2
  2. package/esm2022/grid.component.mjs +11 -9
  3. package/esm2022/renderer/components/add-field-column.component.mjs +29 -18
  4. package/esm2022/renderer/components/field-head.component.mjs +5 -5
  5. package/esm2022/renderer/components/frozen-heads.component.mjs +3 -3
  6. package/esm2022/renderer/components/heads.component.mjs +1 -1
  7. package/esm2022/renderer/creations/create-cells.mjs +4 -4
  8. package/esm2022/renderer/creations/create-heads.mjs +1 -1
  9. package/esm2022/renderer/drawers/add-row-layout-drawer.mjs +4 -4
  10. package/esm2022/renderer/drawers/cell-drawer.mjs +4 -1
  11. package/esm2022/renderer/drawers/layout-drawer.mjs +12 -10
  12. package/esm2022/renderer/drawers/record-row-layout-drawer.mjs +16 -7
  13. package/esm2022/renderer/renderer.component.mjs +7 -10
  14. package/esm2022/services/field.service.mjs +4 -7
  15. package/esm2022/types/component-config.mjs +1 -1
  16. package/esm2022/types/field.mjs +1 -1
  17. package/fesm2022/ai-table-grid.mjs +80 -59
  18. package/fesm2022/ai-table-grid.mjs.map +1 -1
  19. package/grid.component.d.ts +1 -1
  20. package/grid.component.d.ts.map +1 -1
  21. package/package.json +1 -1
  22. package/renderer/components/add-field-column.component.d.ts +3 -6
  23. package/renderer/components/add-field-column.component.d.ts.map +1 -1
  24. package/renderer/components/frozen-heads.component.d.ts +2 -2
  25. package/renderer/components/heads.component.d.ts +2 -2
  26. package/renderer/creations/create-heads.d.ts +2 -2
  27. package/renderer/drawers/add-row-layout-drawer.d.ts +1 -1
  28. package/renderer/drawers/add-row-layout-drawer.d.ts.map +1 -1
  29. package/renderer/drawers/cell-drawer.d.ts.map +1 -1
  30. package/renderer/drawers/layout-drawer.d.ts +2 -2
  31. package/renderer/drawers/layout-drawer.d.ts.map +1 -1
  32. package/renderer/drawers/record-row-layout-drawer.d.ts.map +1 -1
  33. package/renderer/renderer.component.d.ts +1 -1
  34. package/renderer/renderer.component.d.ts.map +1 -1
  35. package/services/field.service.d.ts.map +1 -1
  36. package/types/component-config.d.ts +8 -1
  37. package/types/component-config.d.ts.map +1 -1
  38. package/types/field.d.ts +1 -1
  39. package/types/field.d.ts.map +1 -1
@@ -324,6 +324,9 @@ export class CellDrawer extends Drawer {
324
324
  if (!isValid || transformValue.length === 0) {
325
325
  return;
326
326
  }
327
+ if (!transformValue[0]) {
328
+ console.warn(`single select field unexpected value: ${transformValue[0]}`);
329
+ }
327
330
  const isOperating = isActive;
328
331
  const item = field.settings.options?.find((option) => option._id === transformValue[0]);
329
332
  const itemName = item?.text || '';
@@ -584,4 +587,4 @@ export class CellDrawer extends Drawer {
584
587
  }
585
588
  }
586
589
  export const cellDrawer = new CellDrawer();
587
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1kcmF3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9kcmF3ZXJzL2NlbGwtZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQ0gsa0NBQWtDLEVBQ2xDLHFDQUFxQyxFQUNyQyw0Q0FBNEMsRUFDNUMsMkJBQTJCLEVBQzNCLHdCQUF3QixFQUN4QiwyQkFBMkIsRUFDM0IsZ0NBQWdDLEVBQ2hDLGlDQUFpQyxFQUNqQyw4QkFBOEIsRUFDOUIsbUNBQW1DLEVBQ25DLGtDQUFrQyxFQUNsQyxnQ0FBZ0MsRUFDaEMsK0JBQStCLEVBQy9CLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIsbUJBQW1CLEVBQ25CLDJCQUEyQixFQUMzQix3Q0FBd0MsRUFDeEMsa0NBQWtDLEVBQ2xDLHVCQUF1QixFQUN2QixlQUFlLEVBQ2YsOEJBQThCLEVBQzlCLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUM1Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQix1QkFBdUIsRUFDdkIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2Qix3QkFBd0IsRUFDeEIsa0NBQWtDLEVBQ2xDLFlBQVksRUFDWixRQUFRLEVBQ1gsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsT0FBTyxFQUFnQixnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBa0MsTUFBTSxZQUFZLENBQUM7QUFDL0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGlC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TTtpQkFDakMsQ0FBQyxDQUFDO2dCQUVILElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1QsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNYLEdBQUcsQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDO29CQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDO3dCQUNOLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUTt3QkFDZixDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVE7d0JBQ2YsS0FBSyxFQUFFLGlCQUFpQixDQUFDLE1BQU07d0JBQy9CLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxNQUFNO3dCQUNoQyxNQUFNLEVBQUUsRUFBRTt3QkFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLO3FCQUMxQixDQUFDLENBQUM7b0JBQ0gsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNkLElBQUksQ0FBQyxJQUFJLENBQUM7d0JBQ04sQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEdBQUcsWUFBWSxHQUFHLENBQUM7d0JBQ2xDLENBQUMsRUFBRSxDQUFDLEdBQUcseUJBQXlCLEdBQUcsQ0FBQzt3QkFDcEMsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSzt3QkFDNUIsUUFBUSxFQUFFLFlBQVk7d0JBQ3RCLElBQUksRUFBRSxJQUFJLFNBQVMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFO3dCQUNqQyxhQUFhLEVBQUUsa0NBQWtDO3FCQUNwRCxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgICBBSV9UQUJMRV9DRUxMX0FERF9JVEVNX0JVVFRPTl9TSVpFLFxuICAgIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUsXG4gICAgQUlfVEFCTEVfQ0VMTF9ERUxFVEVfSVRFTV9CVVRUT05fU0laRV9PRkZTRVQsXG4gICAgQUlfVEFCTEVfQ0VMTF9FTU9KSV9QQURESU5HLFxuICAgIEFJX1RBQkxFX0NFTExfRU1PSklfU0laRSxcbiAgICBBSV9UQUJMRV9DRUxMX01BWF9ST1dfQ09VTlQsXG4gICAgQUlfVEFCTEVfQ0VMTF9NRU1CRVJfSVRFTV9IRUlHSFQsXG4gICAgQUlfVEFCTEVfQ0VMTF9NRU1CRVJfSVRFTV9QQURESU5HLFxuICAgIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX0lURU1fTUFSR0lOX1RPUCxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX0lURU1fTUlOX1dJRFRILFxuICAgIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZULFxuICAgIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19UT1AsXG4gICAgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgIEFJX1RBQkxFX0NPTU1PTl9GT05UX1NJWkUsXG4gICAgQUlfVEFCTEVfRE9UX1JBRElVUyxcbiAgICBBSV9UQUJMRV9NRU1CRVJfQVZBVEFSX1NJWkUsXG4gICAgQUlfVEFCTEVfTUVNQkVSX0lURU1fQVZBVEFSX01BUkdJTl9SSUdIVCxcbiAgICBBSV9UQUJMRV9NRU1CRVJfSVRFTV9QQURESU5HX1JJR0hULFxuICAgIEFJX1RBQkxFX01JTl9URVhUX1dJRFRILFxuICAgIEFJX1RBQkxFX09GRlNFVCxcbiAgICBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUsXG4gICAgQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgIEFJX1RBQkxFX09QVElPTl9JVEVNX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfT1BUSU9OX0lURU1fUkFESVVTLFxuICAgIEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICBBSV9UQUJMRV9QSUVDRV9XSURUSCxcbiAgICBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hULFxuICAgIEFJX1RBQkxFX1BST0dSRVNTX0JBUl9SQURJVVMsXG4gICAgQUlfVEFCTEVfUFJPR1JFU1NfVEVYVF9XaWR0aCxcbiAgICBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hULFxuICAgIEFJX1RBQkxFX1RBR19GT05UX1NJWkUsXG4gICAgQUlfVEFCTEVfVEFHX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfVEVYVF9HQVAsXG4gICAgQ29sb3JzLFxuICAgIERFRkFVTFRfRk9OVF9GQU1JTFksXG4gICAgREVGQVVMVF9GT05UX1NJWkUsXG4gICAgREVGQVVMVF9GT05UX1dFSUdIVCxcbiAgICBERUZBVUxUX1RFWFRfQUxJR05fTEVGVCxcbiAgICBERUZBVUxUX1RFWFRfQUxJR05fUklHSFQsXG4gICAgREVGQVVMVF9URVhUX0RFQ09SQVRJT04sXG4gICAgREVGQVVMVF9URVhUX0xJTkVfSEVJR0hULFxuICAgIERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEUsXG4gICAgRk9OVF9TSVpFX1NNLFxuICAgIFN0YXJGaWxsXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVRhYmxlLCBBSVRhYmxlRmllbGQsIEFJVGFibGVGaWVsZFR5cGUsIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZSwgTWVtYmVyU2V0dGluZ3MsIFJhdGVGaWVsZFZhbHVlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQXZhdGFyU2l6ZSwgQUlUYWJsZUF2YXRhclR5cGUsIEFJVGFibGVNZW1iZXJUeXBlLCBBSVRhYmxlUmVuZGVyLCBBSVRhYmxlU2VsZWN0RmllbGQgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBnZXRBdmF0YXJCZ0NvbG9yLCBnZXRBdmF0YXJTaG9ydE5hbWUsIGdldFRleHRXaWR0aCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IERyYXdlciB9IGZyb20gJy4vZHJhd2VyJztcblxuLyoqXG4gKiDlpITnkIblkozmuLLmn5PooajmoLzljZXlhYPmoLznmoTlhoXlrrlcbiAqL1xuZXhwb3J0IGNsYXNzIENlbGxEcmF3ZXIgZXh0ZW5kcyBEcmF3ZXIge1xuICAgIC8vIOagt+W8j+WIneWni+WMllxuICAgIHB1YmxpYyBpbml0U3R5bGUoZmllbGQ6IEFJVGFibGVGaWVsZCwgc3R5bGVQcm9wczogeyBmb250V2VpZ2h0OiBhbnkgfSk6IHZvaWQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgeyB0eXBlOiBmaWVsZFR5cGUgfSA9IGZpZWxkO1xuICAgICAgICBjb25zdCB7IGZvbnRXZWlnaHQgPSBERUZBVUxUX0ZPTlRfV0VJR0hUIH0gPSBzdHlsZVByb3BzO1xuXG4gICAgICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudGV4dDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5kYXRlOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRBdDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQXQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUucmF0ZTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5wcm9ncmVzczpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5tZW1iZXI6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEJ5OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRCeTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRTdHlsZSh7IGZvbnRTaXplOiBERUZBVUxUX0ZPTlRfU0laRSwgZm9udFdlaWdodCB9KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDljZXlhYPmoLzmuLLmn5NcbiAgICBwdWJsaWMgcmVuZGVyQ2VsbChyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB7IGZpZWxkIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG5cbiAgICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS50ZXh0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLm51bWJlcjpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5saW5rOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxUZXh0KHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5zZWxlY3Q6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFNlbGVjdChyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuZGF0ZTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQXQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEF0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxEYXRlKHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5yYXRlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxSYXRlKHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5wcm9ncmVzczpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsUHJvZ3Jlc3MocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLm1lbWJlcjpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQnk6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEJ5OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxNZW1iZXIocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbFRleHQocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgZmllbGQsIGNvbHVtbldpZHRoLCBzdHlsZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBmaWVsZC50eXBlO1xuICAgICAgICBsZXQgcmVuZGVyVGV4dDogc3RyaW5nIHwgbnVsbCA9IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5saW5rID8gdHJhbnNmb3JtVmFsdWUudGV4dCA6IHRyYW5zZm9ybVZhbHVlO1xuICAgICAgICBpZiAocmVuZGVyVGV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNTaW5nbGVMaW5lID0gIWNvbHVtbldpZHRoO1xuICAgICAgICBjb25zdCBpc1RleHRGaWVsZCA9IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS50ZXh0O1xuICAgICAgICBjb25zdCBpc051bWJlckZpZWxkID0gZmllbGRUeXBlID09PSBBSVRhYmxlRmllbGRUeXBlLm51bWJlcjtcblxuICAgICAgICBpZiAoaXNUZXh0RmllbGQgJiYgaXNTaW5nbGVMaW5lKSB7XG4gICAgICAgICAgICByZW5kZXJUZXh0ID0gcmVuZGVyVGV4dC5yZXBsYWNlKC9cXHJ8XFxuL2csICcgJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb2xvciA9IHN0eWxlPy5jb2xvciB8fCB0aGlzLmNvbG9ycy5ncmF5ODAwO1xuICAgICAgICBjb25zdCB0ZXh0QWxpZ24gPSBzdHlsZT8udGV4dEFsaWduIHx8IERFRkFVTFRfVEVYVF9BTElHTl9MRUZUO1xuICAgICAgICBjb25zdCBmb250V2VpZ2h0ID0gc3R5bGU/LmZvbnRXZWlnaHQ7XG4gICAgICAgIGNvbnN0IHRleHRNYXhXaWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3QgcmVuZGVyWCA9IHRleHRBbGlnbiA9PT0gREVGQVVMVF9URVhUX0FMSUdOX1JJR0hUID8geCArIGNvbHVtbldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HIDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3QgcmVuZGVyWSA9IHkgKyBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC8gMjtcbiAgICAgICAgY29uc3QgdGV4dERlY29yYXRpb24gPSBERUZBVUxUX1RFWFRfREVDT1JBVElPTjtcblxuICAgICAgICBpZiAoaXNOdW1iZXJGaWVsZCkge1xuICAgICAgICAgICAgcmVuZGVyVGV4dCA9IFN0cmluZyhyZW5kZXJUZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgIHRleHQ6IHJlbmRlclRleHQsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IGNvbHVtbldpZHRoICYmIHRleHRNYXhXaWR0aCxcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgICAgICBsZXQgcHVyZVRleHQgPSB0ZXh0O1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHg6IHJlbmRlclgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHJlbmRlclksXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHB1cmVUZXh0LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ24sXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3IsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndyYXBUZXh0KHtcbiAgICAgICAgICAgICAgICB4OiByZW5kZXJYLFxuICAgICAgICAgICAgICAgIHk6IHJlbmRlclksXG4gICAgICAgICAgICAgICAgdGV4dDogcmVuZGVyVGV4dCxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogdGV4dE1heFdpZHRoLFxuICAgICAgICAgICAgICAgIG1heFJvdzogQUlfVEFCTEVfQ0VMTF9NQVhfUk9XX0NPVU5ULFxuICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IERFRkFVTFRfVEVYVF9MSU5FX0hFSUdIVCxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ24sXG4gICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRSxcbiAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5saW5rID8gQ29sb3JzLnByaW1hcnkgOiBjb2xvcixcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0LFxuICAgICAgICAgICAgICAgIHRleHREZWNvcmF0aW9uLFxuICAgICAgICAgICAgICAgIGZpZWxkVHlwZSxcbiAgICAgICAgICAgICAgICBuZWVkRHJhdzogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxTZWxlY3QocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBmaWVsZCB9ID0gcmVuZGVyO1xuICAgICAgICBpZiAoKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3M/LmlzX211bHRpcGxlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckNlbGxNdWx0aVNlbGVjdChyZW5kZXIsIGN0eCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlclNpbmdsZVNlbGVjdENlbGwocmVuZGVyLCBjdHgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsTXVsdGlTZWxlY3QocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCBmaWVsZCwgdHJhbnNmb3JtVmFsdWUsIGNvbHVtbldpZHRoIH0gPSByZW5kZXI7XG4gICAgICAgIGlmICghdHJhbnNmb3JtVmFsdWU/Lmxlbmd0aCB8fCAhQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1WYWx1ZSkpIHJldHVybjtcbiAgICAgICAgbGV0IGN1cnJlbnRYID0geCArIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3QgbWF4Q29udGFpbmVyV2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IG9wdGlvblN0eWxlID0gKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3Mub3B0aW9uX3N0eWxlO1xuICAgICAgICBjb25zdCBmb250U3R5bGUgPSBgJHtERUZBVUxUX0ZPTlRfV0VJR0hUfSAke0FJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRX1weCAke0RFRkFVTFRfRk9OVF9GQU1JTFl9YDtcbiAgICAgICAgY29uc3QgaXNEb3RPclBpZWNlID0gb3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5kb3QgfHwgb3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZTtcblxuICAgICAgICBsZXQgdG90YWxXaWR0aCA9IDA7XG4gICAgICAgIGNvbnN0IGNlbGxJdGVtSW5mb01hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgbGV0IGRyYXdhYmxlSW5kZXggPSAwO1xuICAgICAgICB0cmFuc2Zvcm1WYWx1ZS5mb3JFYWNoKChvcHRpb25JZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSAoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncy5vcHRpb25zPy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5faWQgPT09IG9wdGlvbklkKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGdldFRleHRXaWR0aChjdHgsIGl0ZW0/LnRleHQgYXMgc3RyaW5nLCBmb250U3R5bGUpO1xuICAgICAgICAgICAgdG90YWxXaWR0aCArPSB0ZXh0V2lkdGggKyAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgdHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIHRvdGFsV2lkdGggKz0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEb3RPclBpZWNlKSB7XG4gICAgICAgICAgICAgICAgdG90YWxXaWR0aCArPSBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodG90YWxXaWR0aCA8IG1heENvbnRhaW5lcldpZHRoIHx8IHRvdGFsV2lkdGggPT09IG1heENvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICAgICAgZHJhd2FibGVJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2VsbEl0ZW1JbmZvTWFwLnNldChvcHRpb25JZCwgeyB0ZXh0V2lkdGgsIGl0ZW0sIG9mZnNldDogdG90YWxXaWR0aCB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYmFzZVdpZHRoID0gQUlfVEFCTEVfTUlOX1RFWFRfV0lEVEggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKiAyO1xuICAgICAgICBjb25zdCBtaW5XaWR0aCA9IGlzRG90T3JQaWVjZSA/IGJhc2VXaWR0aCArIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCA6IGJhc2VXaWR0aDtcblxuICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWVbZHJhd2FibGVJbmRleCArIDFdKSB7XG4gICAgICAgICAgICBjb25zdCB7IG9mZnNldDogY3VycmVudE9mZnNldCB9ID0gY2VsbEl0ZW1JbmZvTWFwLmdldCh0cmFuc2Zvcm1WYWx1ZVtkcmF3YWJsZUluZGV4XSk7XG4gICAgICAgICAgICBjb25zdCBjYW5EcmF3ZXJOZXh0ID0gbWF4Q29udGFpbmVyV2lkdGggLSBjdXJyZW50T2Zmc2V0ID4gbWluV2lkdGg7XG4gICAgICAgICAgICBkcmF3YWJsZUluZGV4ID0gY2FuRHJhd2VyTmV4dCA/IGRyYXdhYmxlSW5kZXggKyAxIDogZHJhd2FibGVJbmRleDtcbiAgICAgICAgICAgIC8vIOS4iumdoui/h+eoi+aYryAg5rKh5pyJICvmlbDlrZcgIOeahOaDheWGteS4i+acgOWkp+iDveaUvuWHoOS4qu+8m1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gdHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gKGRyYXdhYmxlSW5kZXggKyAxKTtcblxuICAgICAgICAgICAgaWYgKG51bWJlciA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyDor7TmmI7mnIkgK+aVsOWtl++8jOmHjeaWsOiuoeeul1xuICAgICAgICAgICAgICAgIGNvbnN0IGNpcmNsZVdpZHRoID0gZ2V0VGV4dFdpZHRoKGN0eCwgYCt7bnVtYmVyfWAsIGZvbnRTdHlsZSkgKyAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heCA9IG1heENvbnRhaW5lcldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQgLSBjaXJjbGVXaWR0aDtcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzlvZPliY3lt7Lnu4/otoXlh7rkuobvvIznnIvmmK/lkKbog73lrrnkuIvlvZPliY3nmoTvvIzkuI3og73lsLHlh4/ljrsgIDHvvJtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50SXRlbUhhc092ZXIgPSBjdXJyZW50T2Zmc2V0ID4gbWF4O1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SXRlbUhhc092ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdE9mZnNldCA9IGRyYXdhYmxlSW5kZXggPT09IDAgPyAwIDogY2VsbEl0ZW1JbmZvTWFwLmdldCh0cmFuc2Zvcm1WYWx1ZVtkcmF3YWJsZUluZGV4IC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICBkcmF3YWJsZUluZGV4ID0gbWF4IC0gbGFzdE9mZnNldCA+IG1pbldpZHRoID8gZHJhd2FibGVJbmRleCA6IGRyYXdhYmxlSW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOi/mOacieWJqeS9meepuumXtCwg55yL5piv5ZCm6IO95aSa5riy5p+T5LiA5LiqXG4gICAgICAgICAgICAgICAgICAgIGRyYXdhYmxlSW5kZXggPSBtYXggLSBjdXJyZW50T2Zmc2V0ID4gbWluV2lkdGggPyBkcmF3YWJsZUluZGV4ICsgMSA6IGRyYXdhYmxlSW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2lyY2xlVGV4dCA9IGArJHt0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAoZHJhd2FibGVJbmRleCArIDEpfWA7XG4gICAgICAgIGNvbnN0IGNpcmNsZVdpZHRoID1cbiAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVlLmxlbmd0aCAtIChkcmF3YWJsZUluZGV4ICsgMSkgPiAwID8gZ2V0VGV4dFdpZHRoKGN0eCwgY2lyY2xlVGV4dCwgZm9udFN0eWxlKSArIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgOiAwO1xuICAgICAgICAvLyDliankvZnnqbrpl7RcbiAgICAgICAgbGV0IHJlbWFpblNwYWNlID0gbWF4Q29udGFpbmVyV2lkdGggLSBjaXJjbGVXaWR0aCAtIChjaXJjbGVXaWR0aCA+IDAgPyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCA6IDApO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbklkID0gdHJhbnNmb3JtVmFsdWVbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgYmdDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgeDogY3VycmVudFgsXG4gICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QSUVDRV9SQURJVVMsXG4gICAgICAgICAgICAgICAgZmlsbDogQ29sb3JzLmdyYXkxMDAsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDBcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbW1vbkl0ZW0gPSAob3B0aW9uU3R5bGU6IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZSwgc2hhcGU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2VXaWR0aCA9IGlzRG90T3JQaWVjZVxuICAgICAgICAgICAgICAgICAgICA/IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCArIEFJX1RBQkxFX0NFTExfUEFERElORyAqIDJcbiAgICAgICAgICAgICAgICAgICAgOiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKiAyO1xuICAgICAgICAgICAgICAgIGlmIChyZW1haW5TcGFjZSA8IG1pbldpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0V2lkdGgsIGl0ZW0gfSA9IGNlbGxJdGVtSW5mb01hcC5nZXQob3B0aW9uSWQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXRlV2lkdGggPSBiYXNlV2lkdGggKyB0ZXh0V2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbWFpblNwYWNlIC09IEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBiZ1dpZHRoID0gcmVtYWluU3BhY2UgPiBjb21wbGV0ZVdpZHRoID8gY29tcGxldGVXaWR0aCA6IHJlbWFpblNwYWNlO1xuICAgICAgICAgICAgICAgIGJnQ29uZmlnLndpZHRoID0gYmdXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoaXNEb3RPclBpZWNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdChiZ0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaGFwZSA9PT0gJ3JlY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLnggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMikgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBpdGVtPy5iZ19jb2xvciA/PyBpdGVtPy5jb2xvciA/PyBDb2xvcnMucHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGUgPT09ICdhcmMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFyYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyKSAvIDIgKyBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogaXRlbT8uYmdfY29sb3IgPz8gaXRlbT8uY29sb3IgPz8gQ29sb3JzLnByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLnggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGJnV2lkdGggLSBiYXNlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGJnQ29uZmlnLnksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogYmdDb25maWcud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBiZ1dpZHRoIC0gYmFzZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgICAgICAgICB9KS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogYmdDb25maWcuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IENvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6IGl0ZW0/LmJnX2NvbG9yID8/IGl0ZW0/LmNvbG9yID8/IENvbG9ycy5wcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdChiZ0NvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBiZ0NvbmZpZy54ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogYmdXaWR0aCAtIGJhc2VXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gYmdDb25maWcud2lkdGg7XG4gICAgICAgICAgICAgICAgcmVtYWluU3BhY2UgLT0gY3VycmVudFdpZHRoO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRYICs9IGN1cnJlbnRXaWR0aCArIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgc3dpdGNoIChvcHRpb25TdHlsZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLmRvdDpcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uSXRlbShBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUuZG90LCAnYXJjJyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnBpZWNlOlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZSwgJ3JlY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnOlxuICAgICAgICAgICAgICAgICAgICBjb21tb25JdGVtKEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWcsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uSXRlbShBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGV4dCwgJycpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaXJjbGVXaWR0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25TdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZykge1xuICAgICAgICAgICAgICAgIHRoaXMudGFnKHtcbiAgICAgICAgICAgICAgICAgICAgeDogY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCkgLyAyLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogY2lyY2xlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjaXJjbGVUZXh0LFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBDb2xvcnMuZ3JheTEwMCxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IENvbG9ycy5ncmF5NzAwLFxuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX09QVElPTl9JVEVNX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjaXJjbGVXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6IENvbG9ycy5ncmF5MTAwLFxuICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVU1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgIHg6IGN1cnJlbnRYICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNpcmNsZVRleHQsXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogQ29sb3JzLmdyYXk3MDAsXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclNpbmdsZVNlbGVjdENlbGwocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgZmllbGQsIGNvbHVtbldpZHRoLCBpc0FjdGl2ZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBpc1ZhbGlkID0gdHJhbnNmb3JtVmFsdWUgJiYgQXJyYXkuaXNBcnJheSh0cmFuc2Zvcm1WYWx1ZSk7XG4gICAgICAgIGlmICghaXNWYWxpZCB8fCB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc09wZXJhdGluZyA9IGlzQWN0aXZlO1xuICAgICAgICBjb25zdCBpdGVtID0gKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3Mub3B0aW9ucz8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24uX2lkID09PSB0cmFuc2Zvcm1WYWx1ZVswXSk7XG4gICAgICAgIGNvbnN0IGl0ZW1OYW1lID0gaXRlbT8udGV4dCB8fCAnJztcbiAgICAgICAgY29uc3QgZ2V0VGV4dEVsbGlwc2lzID0gKG1heFRleHRXaWR0aDogbnVtYmVyLCBmb250U2l6ZTogbnVtYmVyID0gQUlfVEFCTEVfQ09NTU9OX0ZPTlRfU0laRSkgPT4ge1xuICAgICAgICAgICAgbWF4VGV4dFdpZHRoIC09IGlzT3BlcmF0aW5nID8gQUlfVEFCTEVfQ0VMTF9ERUxFVEVfSVRFTV9CVVRUT05fU0laRSAtIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkVfT0ZGU0VUIDogMDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgdGV4dDogaXRlbU5hbWUsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IGNvbHVtbldpZHRoICYmIG1heFRleHRXaWR0aCxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogZm9udFNpemVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25TdHlsZSA9IChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbl9zdHlsZTtcbiAgICAgICAgICAgIGxldCBiYWNrZ3JvdW5kID0gaXRlbT8uYmdfY29sb3IgPz8gaXRlbT8uY29sb3IgPz8gY29sb3JzLnByaW1hcnk7XG4gICAgICAgICAgICBjb25zdCBkb3RNYXhUZXh0V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkcgLSBBSV9UQUJMRV9QSUVDRV9XSURUSCAtIEFJX1RBQkxFX1RFWFRfR0FQO1xuICAgICAgICAgICAgY29uc3QgYm9yZGVyV2lkdGggPSAxO1xuICAgICAgICAgICAgc3dpdGNoIChvcHRpb25TdHlsZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLmRvdDpcbiAgICAgICAgICAgICAgICAgICAgLy8g6L+Z6YeM55qEIEFJX1RBQkxFX09GRlNFVCDlgY/np7vkuI3noa7lrprmmK/kuLrllaXvvIjljIXmi6wgcGllY2Ug55qE77yJ77yM5Y+q5piv5Li65LqG5L+d5oyB5ZKM57yW6L6R57uE5Lu25Lit55qE5a+56b2QXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJjKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9ET1RfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfUElFQ0VfV0lEVEgpIC8gMiArIEFJX1RBQkxFX0RPVF9SQURJVVMgLSBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX0RPVF9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX1BJRUNFX1dJRFRIICsgQUlfVEFCTEVfVEVYVF9HQVAgKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGdldFRleHRFbGxpcHNpcyhkb3RNYXhUZXh0V2lkdGgpLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9ycy5ncmF5ODAwXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZTpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9QSUVDRV9XSURUSCkgLyAyIC0gQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IEFJX1RBQkxFX1BJRUNFX1dJRFRILFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9QSUVDRV9XSURUSCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUElFQ0VfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogYmFja2dyb3VuZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9QSUVDRV9XSURUSCArIEFJX1RBQkxFX1RFWFRfR0FQICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0RWxsaXBzaXMoZG90TWF4VGV4dFdpZHRoKS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIChBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9UQUdfUEFERElORyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dFdpZHRoLCB0ZXh0IH0gPSBnZXRUZXh0RWxsaXBzaXMobWF4VGV4dFdpZHRoLCBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCh0ZXh0V2lkdGggKyAyICogQUlfVEFCTEVfVEFHX1BBRERJTkcsIEFJX1RBQkxFX0NFTExfTVVMVElfSVRFTV9NSU5fV0lEVEgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogY29sb3JzLndoaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IGJhY2tncm91bmRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRNYXhUZXh0V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0RWxsaXBzaXModGV4dE1heFRleHRXaWR0aCkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3JzLmdyYXk4MDBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsRGF0ZShyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IGFueSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHRyYW5zZm9ybVZhbHVlLCBjb2x1bW5XaWR0aCwgc3R5bGUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgY29sb3JzID0gQUlUYWJsZS5nZXRDb2xvcnMoKTtcbiAgICAgICAgbGV0IGNlbGxUZXh0ID0gdHJhbnNmb3JtVmFsdWU7XG5cbiAgICAgICAgaWYgKGNlbGxUZXh0ID09IG51bGwgfHwgIV8uaXNTdHJpbmcoY2VsbFRleHQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZXh0TWF4V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHsgdGV4dCB9ID0gdGhpcy50ZXh0RWxsaXBzaXMoeyB0ZXh0OiBjZWxsVGV4dCwgbWF4V2lkdGg6IGNvbHVtbldpZHRoICYmIHRleHRNYXhXaWR0aCB9KTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY29uc3QgY29sb3IgPSBzdHlsZT8uY29sb3IgfHwgY29sb3JzLmdyYXk4MDA7XG4gICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgeTogeSArIEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLyAyLFxuICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcixcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBzdHlsZT8uZm9udFdlaWdodCxcbiAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbFJhdGUocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZTogX2NlbGxWYWx1ZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBtYXggPSA1O1xuICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSAoX2NlbGxWYWx1ZSBhcyBSYXRlRmllbGRWYWx1ZSkgfHwgMDtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IEFJX1RBQkxFX0NFTExfRU1PSklfU0laRTtcblxuICAgICAgICByZXR1cm4gWy4uLkFycmF5KG1heCkua2V5cygpXS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGluZGV4ICsgMTtcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWQgPSB2YWx1ZSA8PSBjZWxsVmFsdWU7XG4gICAgICAgICAgICBjb25zdCBpY29uWCA9IGluZGV4ICogc2l6ZSArIEFJX1RBQkxFX0NFTExfUEFERElORyArIGluZGV4ICogQUlfVEFCTEVfQ0VMTF9FTU9KSV9QQURESU5HO1xuICAgICAgICAgICAgY29uc3QgaWNvblkgPSAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIHNpemUpIC8gMjtcblxuICAgICAgICAgICAgaWYgKGN0eCAmJiBjaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXRoKHtcbiAgICAgICAgICAgICAgICAgICAgeDogeCArIGljb25YLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgaWNvblksXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IDIyLFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBTdGFyRmlsbCxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogdGhpcy5jb2xvcnMud2FyaW5nLFxuICAgICAgICAgICAgICAgICAgICBzY2FsZVg6IDEuMTQsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlWTogMS4xNFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxQcm9ncmVzcyhyZW5kZXI6IEFJVGFibGVSZW5kZXIsIGN0eD86IGFueSkge1xuICAgICAgICBjb25zdCB7IHgsIHksIHRyYW5zZm9ybVZhbHVlLCBjb2x1bW5XaWR0aCwgc3R5bGUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgY29sb3JzID0gQUlUYWJsZS5nZXRDb2xvcnMoKTtcbiAgICAgICAgY29uc3QgY2VsbFRleHQgPSB0cmFuc2Zvcm1WYWx1ZTtcblxuICAgICAgICBpZiAoY2VsbFRleHQgPT0gbnVsbCB8fCAhXy5pc051bWJlcihjZWxsVGV4dCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HIC0gQUlfVEFCTEVfUFJPR1JFU1NfVEVYVF9XaWR0aDtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gQUlfVEFCTEVfUFJPR1JFU1NfQkFSX0hFSUdIVDtcbiAgICAgICAgY29uc3QgdGV4dEhlaWdodCA9IEFJX1RBQkxFX0NPTU1PTl9GT05UX1NJWkU7XG4gICAgICAgIGNvbnN0IG9mZnNldFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IG9mZnNldFkgPSAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX1BST0dSRVNTX0JBUl9IRUlHSFQpIC8gMjtcbiAgICAgICAgY29uc3QgdGV4dE9mZnNldFkgPSAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIHRleHRIZWlnaHQpIC8gMjtcblxuICAgICAgICAvLyDnu5jliLbog4zmma9cbiAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgIHg6IHggKyBvZmZzZXRYLFxuICAgICAgICAgICAgeTogeSArIG9mZnNldFksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUFJPR1JFU1NfQkFSX1JBRElVUyxcbiAgICAgICAgICAgIGZpbGw6IGNvbG9ycy5ncmF5MjAwXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIOiuoeeul+W5tue7mOWItui/m+W6plxuICAgICAgICBjb25zdCBwcm9ncmVzc1dpZHRoID0gKHRyYW5zZm9ybVZhbHVlIC8gMTAwKSAqIHdpZHRoO1xuICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgeDogeCArIG9mZnNldFgsXG4gICAgICAgICAgICB5OiB5ICsgb2Zmc2V0WSxcbiAgICAgICAgICAgIHdpZHRoOiBwcm9ncmVzc1dpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUkFESVVTLFxuICAgICAgICAgICAgZmlsbDogY29sb3JzLnN1Y2Nlc3NcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgIHg6IHggKyBvZmZzZXRYICsgd2lkdGggKyBBSV9UQUJMRV9URVhUX0dBUCxcbiAgICAgICAgICAgIHk6IHkgKyB0ZXh0T2Zmc2V0WSxcbiAgICAgICAgICAgIHRleHQ6IGAke3RyYW5zZm9ybVZhbHVlfSVgLFxuICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxNZW1iZXIocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyByZWZlcmVuY2VzLCB4LCB5LCBmaWVsZCwgdHJhbnNmb3JtVmFsdWU6IF9jZWxsVmFsdWUsIHJvd0hlaWdodCwgY29sdW1uV2lkdGgsIGlzQWN0aXZlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNlbGxWYWx1ZSA9IF9jZWxsVmFsdWU7XG5cbiAgICAgICAgaWYgKCFjZWxsVmFsdWU/Lmxlbmd0aCB8fCAhcmVmZXJlbmNlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gZmllbGQuc2V0dGluZ3MgYXMgTWVtYmVyU2V0dGluZ3M7XG4gICAgICAgIGNvbnN0IGF2YXRhclNpemUgPSBBSV9UQUJMRV9NRU1CRVJfQVZBVEFSX1NJWkU7XG4gICAgICAgIGNvbnN0IGl0ZW1IZWlnaHQgPSBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX0hFSUdIVDtcbiAgICAgICAgY29uc3QgaXNPcGVyYXRpbmcgPSBpc0FjdGl2ZTtcbiAgICAgICAgY29uc3QgaXNNdWx0aSA9IHNldHRpbmdzPy5pc19tdWx0aXBsZTtcblxuICAgICAgICBsZXQgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGxldCBjdXJyZW50WSA9IChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gYXZhdGFyU2l6ZSkgLyAyO1xuICAgICAgICBjb25zdCBpdGVtT3RoZXJXaWR0aCA9IGF2YXRhclNpemUgKyBBSV9UQUJMRV9NRU1CRVJfSVRFTV9QQURESU5HX1JJR0hUICsgQUlfVEFCTEVfTUVNQkVSX0lURU1fQVZBVEFSX01BUkdJTl9SSUdIVDtcbiAgICAgICAgY29uc3QgbWF4SGVpZ2h0ID0gaXNBY3RpdmUgPyAxMzAgLSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QIDogcm93SGVpZ2h0IC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX1RPUDtcbiAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gaXNPcGVyYXRpbmdcbiAgICAgICAgICAgID8gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HIC0gaXRlbU90aGVyV2lkdGggLSBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFIC0gMTJcbiAgICAgICAgICAgIDogY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HIC0gaXRlbU90aGVyV2lkdGg7XG5cbiAgICAgICAgY29uc3QgbGlzdENvdW50ID0gY2VsbFZhbHVlLmxlbmd0aDtcbiAgICAgICAgbGV0IGlzT3ZlcmZsb3cgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGlzdENvdW50OyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCB1c2VySW5mbyA9IHJlZmVyZW5jZXM/Lm1lbWJlcnNbY2VsbFZhbHVlW2luZGV4XV07XG4gICAgICAgICAgICBpZiAoIXVzZXJJbmZvKSBjb250aW51ZTtcblxuICAgICAgICAgICAgY29uc3QgeyB1aWQsIGRpc3BsYXlfbmFtZSwgYXZhdGFyIH0gPSB1c2VySW5mbztcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBBSVRhYmxlTWVtYmVyVHlwZS5tZW1iZXI7XG4gICAgICAgICAgICBjb25zdCBpdGVtV2lkdGggPSBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjQgKyAoaXNNdWx0aSA/IEFJX1RBQkxFX0NFTExfTUVNQkVSX0lURU1fUEFERElORyA6IDApO1xuXG4gICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORyArIGluZGV4ICogaXRlbVdpZHRoO1xuXG4gICAgICAgICAgICBsZXQgcmVhbE1heFRleHRXaWR0aCA9IG1heFRleHRXaWR0aCA8IDAgPyAwIDogbWF4VGV4dFdpZHRoO1xuICAgICAgICAgICAgaWYgKGluZGV4ID09PSAwICYmIGlzT3BlcmF0aW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3BlcmF0aW5nTWF4V2lkdGggPSBtYXhUZXh0V2lkdGggLSAoQUlfVEFCTEVfQ0VMTF9BRERfSVRFTV9CVVRUT05fU0laRSArIDQpO1xuICAgICAgICAgICAgICAgIC8vIGl0ZW0gTm8gc3BhY2UgdG8gZGlzcGxheSwgdGhlbiBwZXJmb3JtIGEgbGluZSBmZWVkXG4gICAgICAgICAgICAgICAgaWYgKG9wZXJhdGluZ01heFdpZHRoIDw9IDIwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WSArPSBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQgKyBBSV9UQUJMRV9DRUxMX01VTFRJX0lURU1fTUFSR0lOX1RPUDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWFsTWF4VGV4dFdpZHRoID0gb3BlcmF0aW5nTWF4V2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgaXNNb3JlID0gY3VycmVudFggKyBpdGVtV2lkdGggPiBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICBpZiAoY29sdW1uV2lkdGggIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIOWcqOmdnua0u+WKqOeKtuaAgeS4i++8jOW9k+i2heWHuuWIl+WuveaXtu+8jOS4jeS8mua4suafk+WQjue7reWGheWuuVxuICAgICAgICAgICAgICAgIGlmICghaXNBY3RpdmUgJiYgY3VycmVudFggPj0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzkuI3mmK/pnZ7mtLvliqjnirbmgIHnmoTmnIDlkI7kuIDooYzvvIzliJnmjaLooYzmuLLmn5PmuqLlh7rlhoXlrrlcbiAgICAgICAgICAgICAgICBpZiAoIWlzQWN0aXZlICYmIGN1cnJlbnRYID4gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNBY3RpdmUgJiYgY3VycmVudFggKyBpdGVtV2lkdGggPiBjb2x1bW5XaWR0aCAtIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gaXRlbUhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZlICYmIGN1cnJlbnRZID49IG1heEhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICBpc092ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdHggJiYgIWlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdmF0YXIoe1xuICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyBjdXJyZW50WSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBhdmF0YXIhLFxuICAgICAgICAgICAgICAgICAgICBpZDogdWlkISxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldEF2YXRhclNob3J0TmFtZShkaXNwbGF5X25hbWUpLFxuICAgICAgICAgICAgICAgICAgICBiZ0NvbG9yOiBnZXRBdmF0YXJCZ0NvbG9yKGRpc3BsYXlfbmFtZSEpLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBBSVRhYmxlQXZhdGFyVHlwZS5tZW1iZXIsXG4gICAgICAgICAgICAgICAgICAgIHNpemU6IEFJVGFibGVBdmF0YXJTaXplLnNpemUyNFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTW9yZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAwLjM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB5ICsgY3VycmVudFksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjQsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IDI0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogdGhpcy5jb2xvcnMuYmxhY2tcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgY3VycmVudFggKyBGT05UX1NJWkVfU00gLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiB0aGlzLmNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBGT05UX1NJWkVfU00sXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBgKyR7bGlzdENvdW50IC0gaW5kZXggLSAxfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbEFsaWduOiBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNlbGxEcmF3ZXIgPSBuZXcgQ2VsbERyYXdlcigpO1xuIl19
590
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1kcmF3ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9kcmF3ZXJzL2NlbGwtZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUN2QixPQUFPLEVBQ0gsa0NBQWtDLEVBQ2xDLHFDQUFxQyxFQUNyQyw0Q0FBNEMsRUFDNUMsMkJBQTJCLEVBQzNCLHdCQUF3QixFQUN4QiwyQkFBMkIsRUFDM0IsZ0NBQWdDLEVBQ2hDLGlDQUFpQyxFQUNqQyw4QkFBOEIsRUFDOUIsbUNBQW1DLEVBQ25DLGtDQUFrQyxFQUNsQyxnQ0FBZ0MsRUFDaEMsK0JBQStCLEVBQy9CLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIsbUJBQW1CLEVBQ25CLDJCQUEyQixFQUMzQix3Q0FBd0MsRUFDeEMsa0NBQWtDLEVBQ2xDLHVCQUF1QixFQUN2QixlQUFlLEVBQ2YsOEJBQThCLEVBQzlCLDJCQUEyQixFQUMzQiw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLHFCQUFxQixFQUNyQixvQkFBb0IsRUFDcEIsNEJBQTRCLEVBQzVCLDRCQUE0QixFQUM1Qiw0QkFBNEIsRUFDNUIseUJBQXlCLEVBQ3pCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQix1QkFBdUIsRUFDdkIsd0JBQXdCLEVBQ3hCLHVCQUF1QixFQUN2Qix3QkFBd0IsRUFDeEIsa0NBQWtDLEVBQ2xDLFlBQVksRUFDWixRQUFRLEVBQ1gsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsT0FBTyxFQUFnQixnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBa0MsTUFBTSxZQUFZLENBQUM7QUFDL0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLGlC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b3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gICAgQUlfVEFCTEVfQ0VMTF9BRERfSVRFTV9CVVRUT05fU0laRSxcbiAgICBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFLFxuICAgIEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkVfT0ZGU0VULFxuICAgIEFJX1RBQkxFX0NFTExfRU1PSklfUEFERElORyxcbiAgICBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkUsXG4gICAgQUlfVEFCTEVfQ0VMTF9NQVhfUk9XX0NPVU5ULFxuICAgIEFJX1RBQkxFX0NFTExfTUVNQkVSX0lURU1fSEVJR0hULFxuICAgIEFJX1RBQkxFX0NFTExfTUVNQkVSX0lURU1fUEFERElORyxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01BUkdJTl9UT1AsXG4gICAgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01JTl9XSURUSCxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVCxcbiAgICBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfVE9QLFxuICAgIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICBBSV9UQUJMRV9DT01NT05fRk9OVF9TSVpFLFxuICAgIEFJX1RBQkxFX0RPVF9SQURJVVMsXG4gICAgQUlfVEFCTEVfTUVNQkVSX0FWQVRBUl9TSVpFLFxuICAgIEFJX1RBQkxFX01FTUJFUl9JVEVNX0FWQVRBUl9NQVJHSU5fUklHSFQsXG4gICAgQUlfVEFCTEVfTUVNQkVSX0lURU1fUEFERElOR19SSUdIVCxcbiAgICBBSV9UQUJMRV9NSU5fVEVYVF9XSURUSCxcbiAgICBBSV9UQUJMRV9PRkZTRVQsXG4gICAgQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFLFxuICAgIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9PUFRJT05fSVRFTV9QQURESU5HLFxuICAgIEFJX1RBQkxFX09QVElPTl9JVEVNX1JBRElVUyxcbiAgICBBSV9UQUJMRV9QSUVDRV9SQURJVVMsXG4gICAgQUlfVEFCTEVfUElFQ0VfV0lEVEgsXG4gICAgQUlfVEFCTEVfUFJPR1JFU1NfQkFSX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9QUk9HUkVTU19CQVJfUkFESVVTLFxuICAgIEFJX1RBQkxFX1BST0dSRVNTX1RFWFRfV2lkdGgsXG4gICAgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFLFxuICAgIEFJX1RBQkxFX1RBR19QQURESU5HLFxuICAgIEFJX1RBQkxFX1RFWFRfR0FQLFxuICAgIENvbG9ycyxcbiAgICBERUZBVUxUX0ZPTlRfRkFNSUxZLFxuICAgIERFRkFVTFRfRk9OVF9TSVpFLFxuICAgIERFRkFVTFRfRk9OVF9XRUlHSFQsXG4gICAgREVGQVVMVF9URVhUX0FMSUdOX0xFRlQsXG4gICAgREVGQVVMVF9URVhUX0FMSUdOX1JJR0hULFxuICAgIERFRkFVTFRfVEVYVF9ERUNPUkFUSU9OLFxuICAgIERFRkFVTFRfVEVYVF9MSU5FX0hFSUdIVCxcbiAgICBERUZBVUxUX1RFWFRfVkVSVElDQUxfQUxJR05fTUlERExFLFxuICAgIEZPTlRfU0laRV9TTSxcbiAgICBTdGFyRmlsbFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQUlUYWJsZSwgQUlUYWJsZUZpZWxkLCBBSVRhYmxlRmllbGRUeXBlLCBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUsIE1lbWJlclNldHRpbmdzLCBSYXRlRmllbGRWYWx1ZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZUF2YXRhclNpemUsIEFJVGFibGVBdmF0YXJUeXBlLCBBSVRhYmxlTWVtYmVyVHlwZSwgQUlUYWJsZVJlbmRlciwgQUlUYWJsZVNlbGVjdEZpZWxkIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0QXZhdGFyQmdDb2xvciwgZ2V0QXZhdGFyU2hvcnROYW1lLCBnZXRUZXh0V2lkdGggfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBEcmF3ZXIgfSBmcm9tICcuL2RyYXdlcic7XG5cbi8qKlxuICog5aSE55CG5ZKM5riy5p+T6KGo5qC85Y2V5YWD5qC855qE5YaF5a65XG4gKi9cbmV4cG9ydCBjbGFzcyBDZWxsRHJhd2VyIGV4dGVuZHMgRHJhd2VyIHtcbiAgICAvLyDmoLflvI/liJ3lp4vljJZcbiAgICBwdWJsaWMgaW5pdFN0eWxlKGZpZWxkOiBBSVRhYmxlRmllbGQsIHN0eWxlUHJvcHM6IHsgZm9udFdlaWdodDogYW55IH0pOiB2b2lkIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHsgdHlwZTogZmllbGRUeXBlIH0gPSBmaWVsZDtcbiAgICAgICAgY29uc3QgeyBmb250V2VpZ2h0ID0gREVGQVVMVF9GT05UX1dFSUdIVCB9ID0gc3R5bGVQcm9wcztcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnRleHQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuZGF0ZTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5jcmVhdGVkQXQ6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudXBkYXRlZEF0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnJhdGU6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUucHJvZ3Jlc3M6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubWVtYmVyOlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmNyZWF0ZWRCeTpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS51cGRhdGVkQnk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0U3R5bGUoeyBmb250U2l6ZTogREVGQVVMVF9GT05UX1NJWkUsIGZvbnRXZWlnaHQgfSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g5Y2V5YWD5qC85riy5p+TXG4gICAgcHVibGljIHJlbmRlckNlbGwocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgeyBmaWVsZCB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBmaWVsZC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUudGV4dDpcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5udW1iZXI6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUubGluazpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsVGV4dChyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuc2VsZWN0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNlbGxTZWxlY3QocmVuZGVyLCBjdHgpO1xuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLmRhdGU6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEF0OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRBdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsRGF0ZShyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUucmF0ZTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsUmF0ZShyZW5kZXIsIGN0eCk7XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUucHJvZ3Jlc3M6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ2VsbFByb2dyZXNzKHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGNhc2UgQUlUYWJsZUZpZWxkVHlwZS5tZW1iZXI6XG4gICAgICAgICAgICBjYXNlIEFJVGFibGVGaWVsZFR5cGUuY3JlYXRlZEJ5OlxuICAgICAgICAgICAgY2FzZSBBSVRhYmxlRmllbGRUeXBlLnVwZGF0ZWRCeTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJDZWxsTWVtYmVyKHJlbmRlciwgY3R4KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxUZXh0KHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgdHJhbnNmb3JtVmFsdWUsIGZpZWxkLCBjb2x1bW5XaWR0aCwgc3R5bGUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgZmllbGRUeXBlID0gZmllbGQudHlwZTtcbiAgICAgICAgbGV0IHJlbmRlclRleHQ6IHN0cmluZyB8IG51bGwgPSBmaWVsZFR5cGUgPT09IEFJVGFibGVGaWVsZFR5cGUubGluayA/IHRyYW5zZm9ybVZhbHVlLnRleHQgOiB0cmFuc2Zvcm1WYWx1ZTtcbiAgICAgICAgaWYgKHJlbmRlclRleHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzU2luZ2xlTGluZSA9ICFjb2x1bW5XaWR0aDtcbiAgICAgICAgY29uc3QgaXNUZXh0RmllbGQgPSBmaWVsZFR5cGUgPT09IEFJVGFibGVGaWVsZFR5cGUudGV4dDtcbiAgICAgICAgY29uc3QgaXNOdW1iZXJGaWVsZCA9IGZpZWxkVHlwZSA9PT0gQUlUYWJsZUZpZWxkVHlwZS5udW1iZXI7XG5cbiAgICAgICAgaWYgKGlzVGV4dEZpZWxkICYmIGlzU2luZ2xlTGluZSkge1xuICAgICAgICAgICAgcmVuZGVyVGV4dCA9IHJlbmRlclRleHQucmVwbGFjZSgvXFxyfFxcbi9nLCAnICcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29sb3IgPSBzdHlsZT8uY29sb3IgfHwgdGhpcy5jb2xvcnMuZ3JheTgwMDtcbiAgICAgICAgY29uc3QgdGV4dEFsaWduID0gc3R5bGU/LnRleHRBbGlnbiB8fCBERUZBVUxUX1RFWFRfQUxJR05fTEVGVDtcbiAgICAgICAgY29uc3QgZm9udFdlaWdodCA9IHN0eWxlPy5mb250V2VpZ2h0O1xuICAgICAgICBjb25zdCB0ZXh0TWF4V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHJlbmRlclggPSB0ZXh0QWxpZ24gPT09IERFRkFVTFRfVEVYVF9BTElHTl9SSUdIVCA/IHggKyBjb2x1bW5XaWR0aCAtIEFJX1RBQkxFX0NFTExfUEFERElORyA6IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHJlbmRlclkgPSB5ICsgQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAvIDI7XG4gICAgICAgIGNvbnN0IHRleHREZWNvcmF0aW9uID0gREVGQVVMVF9URVhUX0RFQ09SQVRJT047XG5cbiAgICAgICAgaWYgKGlzTnVtYmVyRmllbGQpIHtcbiAgICAgICAgICAgIHJlbmRlclRleHQgPSBTdHJpbmcocmVuZGVyVGV4dCk7XG4gICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICB0ZXh0OiByZW5kZXJUZXh0LFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBjb2x1bW5XaWR0aCAmJiB0ZXh0TWF4V2lkdGgsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY3R4KSB7XG4gICAgICAgICAgICAgICAgbGV0IHB1cmVUZXh0ID0gdGV4dDtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICB4OiByZW5kZXJYLFxuICAgICAgICAgICAgICAgICAgICB5OiByZW5kZXJZLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBwdXJlVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduLFxuICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9yLFxuICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53cmFwVGV4dCh7XG4gICAgICAgICAgICAgICAgeDogcmVuZGVyWCxcbiAgICAgICAgICAgICAgICB5OiByZW5kZXJZLFxuICAgICAgICAgICAgICAgIHRleHQ6IHJlbmRlclRleHQsXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IHRleHRNYXhXaWR0aCxcbiAgICAgICAgICAgICAgICBtYXhSb3c6IEFJX1RBQkxFX0NFTExfTUFYX1JPV19DT1VOVCxcbiAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiBERUZBVUxUX1RFWFRfTElORV9IRUlHSFQsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEUsXG4gICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBmaWVsZFR5cGUgPT09IEFJVGFibGVGaWVsZFR5cGUubGluayA/IENvbG9ycy5wcmltYXJ5IDogY29sb3IsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodCxcbiAgICAgICAgICAgICAgICB0ZXh0RGVjb3JhdGlvbixcbiAgICAgICAgICAgICAgICBmaWVsZFR5cGUsXG4gICAgICAgICAgICAgICAgbmVlZERyYXc6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsU2VsZWN0KHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgZmllbGQgfSA9IHJlbmRlcjtcbiAgICAgICAgaWYgKChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzPy5pc19tdWx0aXBsZSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDZWxsTXVsdGlTZWxlY3QocmVuZGVyLCBjdHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJTaW5nbGVTZWxlY3RDZWxsKHJlbmRlciwgY3R4KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbE11bHRpU2VsZWN0KHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgZmllbGQsIHRyYW5zZm9ybVZhbHVlLCBjb2x1bW5XaWR0aCB9ID0gcmVuZGVyO1xuICAgICAgICBpZiAoIXRyYW5zZm9ybVZhbHVlPy5sZW5ndGggfHwgIUFycmF5LmlzQXJyYXkodHJhbnNmb3JtVmFsdWUpKSByZXR1cm47XG4gICAgICAgIGxldCBjdXJyZW50WCA9IHggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IG1heENvbnRhaW5lcldpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCBvcHRpb25TdHlsZSA9IChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbl9zdHlsZTtcbiAgICAgICAgY29uc3QgZm9udFN0eWxlID0gYCR7REVGQVVMVF9GT05UX1dFSUdIVH0gJHtBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkV9cHggJHtERUZBVUxUX0ZPTlRfRkFNSUxZfWA7XG4gICAgICAgIGNvbnN0IGlzRG90T3JQaWVjZSA9IG9wdGlvblN0eWxlID09PSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUuZG90IHx8IG9wdGlvblN0eWxlID09PSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUucGllY2U7XG5cbiAgICAgICAgbGV0IHRvdGFsV2lkdGggPSAwO1xuICAgICAgICBjb25zdCBjZWxsSXRlbUluZm9NYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIGxldCBkcmF3YWJsZUluZGV4ID0gMDtcbiAgICAgICAgdHJhbnNmb3JtVmFsdWUuZm9yRWFjaCgob3B0aW9uSWQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gKGZpZWxkIGFzIEFJVGFibGVTZWxlY3RGaWVsZCkuc2V0dGluZ3Mub3B0aW9ucz8uZmluZCgob3B0aW9uKSA9PiBvcHRpb24uX2lkID09PSBvcHRpb25JZCk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0V2lkdGggPSBnZXRUZXh0V2lkdGgoY3R4LCBpdGVtPy50ZXh0IGFzIHN0cmluZywgZm9udFN0eWxlKTtcbiAgICAgICAgICAgIHRvdGFsV2lkdGggKz0gdGV4dFdpZHRoICsgMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgIGlmIChpbmRleCA8IHRyYW5zZm9ybVZhbHVlLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICB0b3RhbFdpZHRoICs9IEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzRG90T3JQaWVjZSkge1xuICAgICAgICAgICAgICAgIHRvdGFsV2lkdGggKz0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMiArIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRvdGFsV2lkdGggPCBtYXhDb250YWluZXJXaWR0aCB8fCB0b3RhbFdpZHRoID09PSBtYXhDb250YWluZXJXaWR0aCkge1xuICAgICAgICAgICAgICAgIGRyYXdhYmxlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNlbGxJdGVtSW5mb01hcC5zZXQob3B0aW9uSWQsIHsgdGV4dFdpZHRoLCBpdGVtLCBvZmZzZXQ6IHRvdGFsV2lkdGggfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGJhc2VXaWR0aCA9IEFJX1RBQkxFX01JTl9URVhUX1dJRFRIICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HICogMjtcbiAgICAgICAgY29uc3QgbWluV2lkdGggPSBpc0RvdE9yUGllY2UgPyBiYXNlV2lkdGggKyBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQgOiBiYXNlV2lkdGg7XG5cbiAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlW2RyYXdhYmxlSW5kZXggKyAxXSkge1xuICAgICAgICAgICAgY29uc3QgeyBvZmZzZXQ6IGN1cnJlbnRPZmZzZXQgfSA9IGNlbGxJdGVtSW5mb01hcC5nZXQodHJhbnNmb3JtVmFsdWVbZHJhd2FibGVJbmRleF0pO1xuICAgICAgICAgICAgY29uc3QgY2FuRHJhd2VyTmV4dCA9IG1heENvbnRhaW5lcldpZHRoIC0gY3VycmVudE9mZnNldCA+IG1pbldpZHRoO1xuICAgICAgICAgICAgZHJhd2FibGVJbmRleCA9IGNhbkRyYXdlck5leHQgPyBkcmF3YWJsZUluZGV4ICsgMSA6IGRyYXdhYmxlSW5kZXg7XG4gICAgICAgICAgICAvLyDkuIrpnaLov4fnqIvmmK8gIOayoeaciSAr5pWw5a2XICDnmoTmg4XlhrXkuIvmnIDlpKfog73mlL7lh6DkuKrvvJtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IHRyYW5zZm9ybVZhbHVlLmxlbmd0aCAtIChkcmF3YWJsZUluZGV4ICsgMSk7XG5cbiAgICAgICAgICAgIGlmIChudW1iZXIgPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8g6K+05piO5pyJICvmlbDlrZfvvIzph43mlrDorqHnrpdcbiAgICAgICAgICAgICAgICBjb25zdCBjaXJjbGVXaWR0aCA9IGdldFRleHRXaWR0aChjdHgsIGAre251bWJlcn1gLCBmb250U3R5bGUpICsgMiAqIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICBjb25zdCBtYXggPSBtYXhDb250YWluZXJXaWR0aCAtIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZUIC0gY2lyY2xlV2lkdGg7XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5b2T5YmN5bey57uP6LaF5Ye65LqG77yM55yL5piv5ZCm6IO95a655LiL5b2T5YmN55qE77yM5LiN6IO95bCx5YeP5Y67ICAx77ybXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEl0ZW1IYXNPdmVyID0gY3VycmVudE9mZnNldCA+IG1heDtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEl0ZW1IYXNPdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RPZmZzZXQgPSBkcmF3YWJsZUluZGV4ID09PSAwID8gMCA6IGNlbGxJdGVtSW5mb01hcC5nZXQodHJhbnNmb3JtVmFsdWVbZHJhd2FibGVJbmRleCAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgZHJhd2FibGVJbmRleCA9IG1heCAtIGxhc3RPZmZzZXQgPiBtaW5XaWR0aCA/IGRyYXdhYmxlSW5kZXggOiBkcmF3YWJsZUluZGV4IC0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyDov5jmnInliankvZnnqbrpl7QsIOeci+aYr+WQpuiDveWkmua4suafk+S4gOS4qlxuICAgICAgICAgICAgICAgICAgICBkcmF3YWJsZUluZGV4ID0gbWF4IC0gY3VycmVudE9mZnNldCA+IG1pbldpZHRoID8gZHJhd2FibGVJbmRleCArIDEgOiBkcmF3YWJsZUluZGV4O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNpcmNsZVRleHQgPSBgKyR7dHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gKGRyYXdhYmxlSW5kZXggKyAxKX1gO1xuICAgICAgICBjb25zdCBjaXJjbGVXaWR0aCA9XG4gICAgICAgICAgICB0cmFuc2Zvcm1WYWx1ZS5sZW5ndGggLSAoZHJhd2FibGVJbmRleCArIDEpID4gMCA/IGdldFRleHRXaWR0aChjdHgsIGNpcmNsZVRleHQsIGZvbnRTdHlsZSkgKyAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HIDogMDtcbiAgICAgICAgLy8g5Ymp5L2Z56m66Ze0XG4gICAgICAgIGxldCByZW1haW5TcGFjZSA9IG1heENvbnRhaW5lcldpZHRoIC0gY2lyY2xlV2lkdGggLSAoY2lyY2xlV2lkdGggPiAwID8gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQgOiAwKTtcblxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdHJhbnNmb3JtVmFsdWUubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25JZCA9IHRyYW5zZm9ybVZhbHVlW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGJnQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIHg6IGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCkgLyAyLFxuICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUElFQ0VfUkFESVVTLFxuICAgICAgICAgICAgICAgIGZpbGw6IENvbG9ycy5ncmF5MTAwLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAwXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjb21tb25JdGVtID0gKG9wdGlvblN0eWxlOiBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUsIHNoYXBlOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXNlV2lkdGggPSBpc0RvdE9yUGllY2VcbiAgICAgICAgICAgICAgICAgICAgPyBBSV9UQUJMRV9DRUxMX01VTFRJX0RPVF9SQURJVVMgKiAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX0xFRlQgKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKiAyXG4gICAgICAgICAgICAgICAgICAgIDogQUlfVEFCTEVfQ0VMTF9QQURESU5HICogMjtcbiAgICAgICAgICAgICAgICBpZiAocmVtYWluU3BhY2UgPCBtaW5XaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgdGV4dFdpZHRoLCBpdGVtIH0gPSBjZWxsSXRlbUluZm9NYXAuZ2V0KG9wdGlvbklkKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0ZVdpZHRoID0gYmFzZVdpZHRoICsgdGV4dFdpZHRoO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gdHJhbnNmb3JtVmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZW1haW5TcGFjZSAtPSBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYmdXaWR0aCA9IHJlbWFpblNwYWNlID4gY29tcGxldGVXaWR0aCA/IGNvbXBsZXRlV2lkdGggOiByZW1haW5TcGFjZTtcbiAgICAgICAgICAgICAgICBiZ0NvbmZpZy53aWR0aCA9IGJnV2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKGlzRG90T3JQaWVjZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3QoYmdDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hhcGUgPT09ICdyZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBiZ0NvbmZpZy54ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX0NFTExfTVVMVElfRE9UX1JBRElVUyAqIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QSUVDRV9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogaXRlbT8uYmdfY29sb3IgPz8gaXRlbT8uY29sb3IgPz8gQ29sb3JzLnByaW1hcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNoYXBlID09PSAnYXJjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLnggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMikgLyAyICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGl0ZW0/LmJnX2NvbG9yID8/IGl0ZW0/LmNvbG9yID8/IENvbG9ycy5wcmltYXJ5XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBiZ0NvbmZpZy54ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9ET1RfUkFESVVTICogMiArIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19MRUZULFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHRFbGxpcHNpcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBiZ1dpZHRoIC0gYmFzZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IENvbG9ycy5ncmF5NzAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvblN0eWxlID09PSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFnKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGJnQ29uZmlnLngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBiZ0NvbmZpZy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGJnQ29uZmlnLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aDogYmdXaWR0aCAtIGJhc2VXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfT1BUSU9OX0lURU1fUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGJnQ29uZmlnLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBDb2xvcnMud2hpdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBpdGVtPy5iZ19jb2xvciA/PyBpdGVtPy5jb2xvciA/PyBDb2xvcnMucHJpbWFyeVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3QoYmdDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogYmdDb25maWcueCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX1RBR19GT05UX1NJWkUpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMudGV4dEVsbGlwc2lzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGJnV2lkdGggLSBiYXNlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IENvbG9ycy5ncmF5NzAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9IGJnQ29uZmlnLndpZHRoO1xuICAgICAgICAgICAgICAgIHJlbWFpblNwYWNlIC09IGN1cnJlbnRXaWR0aDtcbiAgICAgICAgICAgICAgICBjdXJyZW50WCArPSBjdXJyZW50V2lkdGggKyBBSV9UQUJMRV9DRUxMX01VTFRJX1BBRERJTkdfTEVGVDtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uU3R5bGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5kb3Q6XG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbkl0ZW0oQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLmRvdCwgJ2FyYycpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5waWVjZTpcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uSXRlbShBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUucGllY2UsICdyZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZzpcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uSXRlbShBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbkl0ZW0oQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRleHQsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2lyY2xlV2lkdGggPiAwKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uU3R5bGUgPT09IEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS50YWcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhZyh7XG4gICAgICAgICAgICAgICAgICAgIHg6IGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9PUFRJT05fSVRFTV9IRUlHSFQpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGNpcmNsZVdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogY2lyY2xlVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogQ29sb3JzLmdyYXkxMDAsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yOiBDb2xvcnMuZ3JheTcwMCxcbiAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9PUFRJT05fSVRFTV9SQURJVVMsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IEFJX1RBQkxFX1RBR19GT05UX1NJWkVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgeDogY3VycmVudFgsXG4gICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCkgLyAyLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogY2lyY2xlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hULFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiBDb2xvcnMuZ3JheTEwMCxcbiAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9QSUVDRV9SQURJVVNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50WCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBjaXJjbGVUZXh0LFxuICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IENvbG9ycy5ncmF5NzAwLFxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogQUlfVEFCTEVfVEFHX0ZPTlRfU0laRVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJTaW5nbGVTZWxlY3RDZWxsKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogYW55KSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgdHJhbnNmb3JtVmFsdWUsIGZpZWxkLCBjb2x1bW5XaWR0aCwgaXNBY3RpdmUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgaXNWYWxpZCA9IHRyYW5zZm9ybVZhbHVlICYmIEFycmF5LmlzQXJyYXkodHJhbnNmb3JtVmFsdWUpO1xuICAgICAgICBpZiAoIWlzVmFsaWQgfHwgdHJhbnNmb3JtVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0cmFuc2Zvcm1WYWx1ZVswXSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBzaW5nbGUgc2VsZWN0IGZpZWxkIHVuZXhwZWN0ZWQgdmFsdWU6ICR7dHJhbnNmb3JtVmFsdWVbMF19YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNPcGVyYXRpbmcgPSBpc0FjdGl2ZTtcbiAgICAgICAgY29uc3QgaXRlbSA9IChmaWVsZCBhcyBBSVRhYmxlU2VsZWN0RmllbGQpLnNldHRpbmdzLm9wdGlvbnM/LmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLl9pZCA9PT0gdHJhbnNmb3JtVmFsdWVbMF0pO1xuICAgICAgICBjb25zdCBpdGVtTmFtZSA9IGl0ZW0/LnRleHQgfHwgJyc7XG4gICAgICAgIGNvbnN0IGdldFRleHRFbGxpcHNpcyA9IChtYXhUZXh0V2lkdGg6IG51bWJlciwgZm9udFNpemU6IG51bWJlciA9IEFJX1RBQkxFX0NPTU1PTl9GT05UX1NJWkUpID0+IHtcbiAgICAgICAgICAgIG1heFRleHRXaWR0aCAtPSBpc09wZXJhdGluZyA/IEFJX1RBQkxFX0NFTExfREVMRVRFX0lURU1fQlVUVE9OX1NJWkUgLSBBSV9UQUJMRV9DRUxMX0RFTEVURV9JVEVNX0JVVFRPTl9TSVpFX09GRlNFVCA6IDA7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0RWxsaXBzaXMoe1xuICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW1OYW1lLFxuICAgICAgICAgICAgICAgIG1heFdpZHRoOiBjb2x1bW5XaWR0aCAmJiBtYXhUZXh0V2lkdGgsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IGZvbnRTaXplXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGN0eCkge1xuICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IDE7XG4gICAgICAgICAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uU3R5bGUgPSAoZmllbGQgYXMgQUlUYWJsZVNlbGVjdEZpZWxkKS5zZXR0aW5ncy5vcHRpb25fc3R5bGU7XG4gICAgICAgICAgICBsZXQgYmFja2dyb3VuZCA9IGl0ZW0/LmJnX2NvbG9yID8/IGl0ZW0/LmNvbG9yID8/IGNvbG9ycy5wcmltYXJ5O1xuICAgICAgICAgICAgY29uc3QgZG90TWF4VGV4dFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HIC0gQUlfVEFCTEVfUElFQ0VfV0lEVEggLSBBSV9UQUJMRV9URVhUX0dBUDtcbiAgICAgICAgICAgIGNvbnN0IGJvcmRlcldpZHRoID0gMTtcbiAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uU3R5bGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZS5kb3Q6XG4gICAgICAgICAgICAgICAgICAgIC8vIOi/memHjOeahCBBSV9UQUJMRV9PRkZTRVQg5YGP56e75LiN56Gu5a6a5piv5Li65ZWl77yI5YyF5ousIHBpZWNlIOeahO+8ie+8jOWPquaYr+S4uuS6huS/neaMgeWSjOe8lui+kee7hOS7tuS4reeahOWvuem9kFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFyYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgQUlfVEFCTEVfRE9UX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX1BJRUNFX1dJRFRIKSAvIDIgKyBBSV9UQUJMRV9ET1RfUkFESVVTIC0gQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiBBSV9UQUJMRV9ET1RfUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogYmFja2dyb3VuZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHggKyBBSV9UQUJMRV9QSUVDRV9XSURUSCArIEFJX1RBQkxFX1RFWFRfR0FQICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfT1BUSU9OX0lURU1fRk9OVF9TSVpFKSAvIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBnZXRUZXh0RWxsaXBzaXMoZG90TWF4VGV4dFdpZHRoKS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFN0eWxlOiBjb2xvcnMuZ3JheTgwMFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUucGllY2U6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIChBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gQUlfVEFCTEVfUElFQ0VfV0lEVEgpIC8gMiAtIEFJX1RBQkxFX09GRlNFVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBBSV9UQUJMRV9QSUVDRV9XSURUSCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfUElFQ0VfV0lEVEgsXG4gICAgICAgICAgICAgICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BJRUNFX1JBRElVUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGJhY2tncm91bmRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfUElFQ0VfV0lEVEggKyBBSV9UQUJMRV9URVhUX0dBUCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dEVsbGlwc2lzKGRvdE1heFRleHRXaWR0aCkudGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3JzLmdyYXk4MDBcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBjb2x1bW5XaWR0aCAtIDIgKiAoQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgQUlfVEFCTEVfVEFHX1BBRERJTkcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHRleHRXaWR0aCwgdGV4dCB9ID0gZ2V0VGV4dEVsbGlwc2lzKG1heFRleHRXaWR0aCwgQUlfVEFCTEVfVEFHX0ZPTlRfU0laRSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgodGV4dFdpZHRoICsgMiAqIEFJX1RBQkxFX1RBR19QQURESU5HLCBBSV9UQUJMRV9DRUxMX01VTFRJX0lURU1fTUlOX1dJRFRIKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX09QVElPTl9JVEVNX0hFSUdIVCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfT1BUSU9OX0lURU1fUkFESVVTLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogQUlfVEFCTEVfT1BUSU9OX0lURU1fUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBBSV9UQUJMRV9UQUdfRk9OVF9TSVpFLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0TWF4VGV4dFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX09QVElPTl9JVEVNX0ZPTlRfU0laRSkgLyAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZ2V0VGV4dEVsbGlwc2lzKHRleHRNYXhUZXh0V2lkdGgpLnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsU3R5bGU6IGNvbG9ycy5ncmF5ODAwXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyQ2VsbERhdGUocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgICAgIGxldCBjZWxsVGV4dCA9IHRyYW5zZm9ybVZhbHVlO1xuXG4gICAgICAgIGlmIChjZWxsVGV4dCA9PSBudWxsIHx8ICFfLmlzU3RyaW5nKGNlbGxUZXh0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dE1heFdpZHRoID0gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCB7IHRleHQgfSA9IHRoaXMudGV4dEVsbGlwc2lzKHsgdGV4dDogY2VsbFRleHQsIG1heFdpZHRoOiBjb2x1bW5XaWR0aCAmJiB0ZXh0TWF4V2lkdGggfSk7XG4gICAgICAgIGlmIChjdHgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gc3R5bGU/LmNvbG9yIHx8IGNvbG9ycy5ncmF5ODAwO1xuICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICB4OiB4ICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgIHk6IHkgKyBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC8gMixcbiAgICAgICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3IsXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogc3R5bGU/LmZvbnRXZWlnaHQsXG4gICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlckNlbGxSYXRlKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgeCwgeSwgdHJhbnNmb3JtVmFsdWU6IF9jZWxsVmFsdWUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgbWF4ID0gNTtcbiAgICAgICAgY29uc3QgY2VsbFZhbHVlID0gKF9jZWxsVmFsdWUgYXMgUmF0ZUZpZWxkVmFsdWUpIHx8IDA7XG4gICAgICAgIGNvbnN0IHNpemUgPSBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkU7XG5cbiAgICAgICAgcmV0dXJuIFsuLi5BcnJheShtYXgpLmtleXMoKV0ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbmRleCArIDE7XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkID0gdmFsdWUgPD0gY2VsbFZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaWNvblggPSBpbmRleCAqIHNpemUgKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBpbmRleCAqIEFJX1RBQkxFX0NFTExfRU1PSklfUEFERElORztcbiAgICAgICAgICAgIGNvbnN0IGljb25ZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBzaXplKSAvIDI7XG5cbiAgICAgICAgICAgIGlmIChjdHggJiYgY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGF0aCh7XG4gICAgICAgICAgICAgICAgICAgIHg6IHggKyBpY29uWCxcbiAgICAgICAgICAgICAgICAgICAgeTogeSArIGljb25ZLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiAyMixcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogU3RhckZpbGwsXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6IHRoaXMuY29sb3JzLndhcmluZyxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVYOiAxLjE0LFxuICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IDEuMTRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsUHJvZ3Jlc3MocmVuZGVyOiBBSVRhYmxlUmVuZGVyLCBjdHg/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyB4LCB5LCB0cmFuc2Zvcm1WYWx1ZSwgY29sdW1uV2lkdGgsIHN0eWxlIH0gPSByZW5kZXI7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgICAgIGNvbnN0IGNlbGxUZXh0ID0gdHJhbnNmb3JtVmFsdWU7XG5cbiAgICAgICAgaWYgKGNlbGxUZXh0ID09IG51bGwgfHwgIV8uaXNOdW1iZXIoY2VsbFRleHQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aWR0aCA9IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyAtIEFJX1RBQkxFX1BST0dSRVNTX1RFWFRfV2lkdGg7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9IRUlHSFQ7XG4gICAgICAgIGNvbnN0IHRleHRIZWlnaHQgPSBBSV9UQUJMRV9DT01NT05fRk9OVF9TSVpFO1xuICAgICAgICBjb25zdCBvZmZzZXRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCBvZmZzZXRZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9QUk9HUkVTU19CQVJfSEVJR0hUKSAvIDI7XG4gICAgICAgIGNvbnN0IHRleHRPZmZzZXRZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSB0ZXh0SGVpZ2h0KSAvIDI7XG5cbiAgICAgICAgLy8g57uY5Yi26IOM5pmvXG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiB4ICsgb2Zmc2V0WCxcbiAgICAgICAgICAgIHk6IHkgKyBvZmZzZXRZLFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICByYWRpdXM6IEFJX1RBQkxFX1BST0dSRVNTX0JBUl9SQURJVVMsXG4gICAgICAgICAgICBmaWxsOiBjb2xvcnMuZ3JheTIwMFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyDorqHnrpflubbnu5jliLbov5vluqZcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3NXaWR0aCA9ICh0cmFuc2Zvcm1WYWx1ZSAvIDEwMCkgKiB3aWR0aDtcbiAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgIHg6IHggKyBvZmZzZXRYLFxuICAgICAgICAgICAgeTogeSArIG9mZnNldFksXG4gICAgICAgICAgICB3aWR0aDogcHJvZ3Jlc3NXaWR0aCxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHJhZGl1czogQUlfVEFCTEVfUFJPR1JFU1NfQkFSX1JBRElVUyxcbiAgICAgICAgICAgIGZpbGw6IGNvbG9ycy5zdWNjZXNzXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudGV4dCh7XG4gICAgICAgICAgICB4OiB4ICsgb2Zmc2V0WCArIHdpZHRoICsgQUlfVEFCTEVfVEVYVF9HQVAsXG4gICAgICAgICAgICB5OiB5ICsgdGV4dE9mZnNldFksXG4gICAgICAgICAgICB0ZXh0OiBgJHt0cmFuc2Zvcm1WYWx1ZX0lYCxcbiAgICAgICAgICAgIGZpbGxTdHlsZTogY29sb3JzLmdyYXk4MDBcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJDZWxsTWVtYmVyKHJlbmRlcjogQUlUYWJsZVJlbmRlciwgY3R4PzogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHsgcmVmZXJlbmNlcywgeCwgeSwgZmllbGQsIHRyYW5zZm9ybVZhbHVlOiBfY2VsbFZhbHVlLCByb3dIZWlnaHQsIGNvbHVtbldpZHRoLCBpc0FjdGl2ZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSBfY2VsbFZhbHVlO1xuXG4gICAgICAgIGlmICghY2VsbFZhbHVlPy5sZW5ndGggfHwgIXJlZmVyZW5jZXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IGZpZWxkLnNldHRpbmdzIGFzIE1lbWJlclNldHRpbmdzO1xuICAgICAgICBjb25zdCBhdmF0YXJTaXplID0gQUlfVEFCTEVfTUVNQkVSX0FWQVRBUl9TSVpFO1xuICAgICAgICBjb25zdCBpdGVtSGVpZ2h0ID0gQUlfVEFCTEVfQ0VMTF9NRU1CRVJfSVRFTV9IRUlHSFQ7XG4gICAgICAgIGNvbnN0IGlzT3BlcmF0aW5nID0gaXNBY3RpdmU7XG4gICAgICAgIGNvbnN0IGlzTXVsdGkgPSBzZXR0aW5ncz8uaXNfbXVsdGlwbGU7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRYID0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBsZXQgY3VycmVudFkgPSAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIGF2YXRhclNpemUpIC8gMjtcbiAgICAgICAgY29uc3QgaXRlbU90aGVyV2lkdGggPSBhdmF0YXJTaXplICsgQUlfVEFCTEVfTUVNQkVSX0lURU1fUEFERElOR19SSUdIVCArIEFJX1RBQkxFX01FTUJFUl9JVEVNX0FWQVRBUl9NQVJHSU5fUklHSFQ7XG4gICAgICAgIGNvbnN0IG1heEhlaWdodCA9IGlzQWN0aXZlID8gMTMwIC0gQUlfVEFCTEVfQ0VMTF9NVUxUSV9QQURESU5HX1RPUCA6IHJvd0hlaWdodCAtIEFJX1RBQkxFX0NFTExfTVVMVElfUEFERElOR19UT1A7XG4gICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IGlzT3BlcmF0aW5nXG4gICAgICAgICAgICA/IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyAtIGl0ZW1PdGhlcldpZHRoIC0gQUlfVEFCTEVfQ0VMTF9ERUxFVEVfSVRFTV9CVVRUT05fU0laRSAtIDEyXG4gICAgICAgICAgICA6IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyAtIGl0ZW1PdGhlcldpZHRoO1xuXG4gICAgICAgIGNvbnN0IGxpc3RDb3VudCA9IGNlbGxWYWx1ZS5sZW5ndGg7XG4gICAgICAgIGxldCBpc092ZXJmbG93ID0gZmFsc2U7XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGxpc3RDb3VudDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgdXNlckluZm8gPSByZWZlcmVuY2VzPy5tZW1iZXJzW2NlbGxWYWx1ZVtpbmRleF1dO1xuICAgICAgICAgICAgaWYgKCF1c2VySW5mbykgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnN0IHsgdWlkLCBkaXNwbGF5X25hbWUsIGF2YXRhciB9ID0gdXNlckluZm87XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gQUlUYWJsZU1lbWJlclR5cGUubWVtYmVyO1xuICAgICAgICAgICAgY29uc3QgaXRlbVdpZHRoID0gQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0ICsgKGlzTXVsdGkgPyBBSV9UQUJMRV9DRUxMX01FTUJFUl9JVEVNX1BBRERJTkcgOiAwKTtcblxuICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBpbmRleCAqIGl0ZW1XaWR0aDtcblxuICAgICAgICAgICAgbGV0IHJlYWxNYXhUZXh0V2lkdGggPSBtYXhUZXh0V2lkdGggPCAwID8gMCA6IG1heFRleHRXaWR0aDtcbiAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCAmJiBpc09wZXJhdGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wZXJhdGluZ01heFdpZHRoID0gbWF4VGV4dFdpZHRoIC0gKEFJX1RBQkxFX0NFTExfQUREX0lURU1fQlVUVE9OX1NJWkUgKyA0KTtcbiAgICAgICAgICAgICAgICAvLyBpdGVtIE5vIHNwYWNlIHRvIGRpc3BsYXksIHRoZW4gcGVyZm9ybSBhIGxpbmUgZmVlZFxuICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpbmdNYXhXaWR0aCA8PSAyMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFkgKz0gQUlfVEFCTEVfT1BUSU9OX0lURU1fSEVJR0hUICsgQUlfVEFCTEVfQ0VMTF9NVUxUSV9JVEVNX01BUkdJTl9UT1A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVhbE1heFRleHRXaWR0aCA9IG9wZXJhdGluZ01heFdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGlzTW9yZSA9IGN1cnJlbnRYICsgaXRlbVdpZHRoID4gY29sdW1uV2lkdGggLSAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICAgICAgaWYgKGNvbHVtbldpZHRoICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyDlnKjpnZ7mtLvliqjnirbmgIHkuIvvvIzlvZPotoXlh7rliJflrr3ml7bvvIzkuI3kvJrmuLLmn5PlkI7nu63lhoXlrrlcbiAgICAgICAgICAgICAgICBpZiAoIWlzQWN0aXZlICYmIGN1cnJlbnRYID49IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8g5aaC5p6c5LiN5piv6Z2e5rS75Yqo54q25oCB55qE5pyA5ZCO5LiA6KGM77yM5YiZ5o2i6KGM5riy5p+T5rqi5Ye65YaF5a65XG4gICAgICAgICAgICAgICAgaWYgKCFpc0FjdGl2ZSAmJiBjdXJyZW50WCA+IGNvbHVtbldpZHRoIC0gMiAqIEFJX1RBQkxFX0NFTExfUEFERElORykge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50WCA9IEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZlICYmIGN1cnJlbnRYICsgaXRlbVdpZHRoID4gY29sdW1uV2lkdGggLSBBSV9UQUJMRV9DRUxMX1BBRERJTkcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFggPSBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IGl0ZW1IZWlnaHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc0FjdGl2ZSAmJiBjdXJyZW50WSA+PSBtYXhIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3R4ICYmICFpc0FjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXZhdGFyKHtcbiAgICAgICAgICAgICAgICAgICAgeDogeCArIGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICB5OiB5ICsgY3VycmVudFksXG4gICAgICAgICAgICAgICAgICAgIHVybDogYXZhdGFyISxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHVpZCEsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRBdmF0YXJTaG9ydE5hbWUoZGlzcGxheV9uYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgYmdDb2xvcjogZ2V0QXZhdGFyQmdDb2xvcihkaXNwbGF5X25hbWUhKSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogQUlUYWJsZUF2YXRhclR5cGUubWVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBzaXplOiBBSVRhYmxlQXZhdGFyU2l6ZS5zaXplMjRcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChpc01vcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gMC4zO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIGN1cnJlbnRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogeSArIGN1cnJlbnRZLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IEFJVGFibGVBdmF0YXJTaXplLnNpemUyNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogQUlUYWJsZUF2YXRhclNpemUuc2l6ZTI0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmFkaXVzOiAyNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IHRoaXMuY29sb3JzLmJsYWNrXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogeCArIGN1cnJlbnRYICsgRk9OVF9TSVpFX1NNIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHkgKyBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogdGhpcy5jb2xvcnMud2hpdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogRk9OVF9TSVpFX1NNLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogYCske2xpc3RDb3VudCAtIGluZGV4IC0gMX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBjZWxsRHJhd2VyID0gbmV3IENlbGxEcmF3ZXIoKTtcbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { AI_TABLE_FIELD_ADD_BUTTON_WIDTH } from '../../constants/table';
1
+ import { AI_TABLE_FIELD_ADD_BUTTON_WIDTH, AI_TABLE_OFFSET } from '../../constants/table';
2
2
  import { Drawer } from './drawer';
3
3
  /**
4
4
  * 用于处理表格行或单元格的布局和绘制。
@@ -42,17 +42,19 @@ export class Layout extends Drawer {
42
42
  get isLast() {
43
43
  return this.columnIndex === this.columnCount - 1;
44
44
  }
45
- renderAddFieldBlank() {
46
- const width = AI_TABLE_FIELD_ADD_BUTTON_WIDTH;
47
- const y = this.y;
45
+ renderAddFieldBlank({ style, isHoverRow }) {
48
46
  const rowHeight = this.rowHeight;
47
+ const fill = style?.fill || (isHoverRow ? this.colors.gray80 : this.colors.transparent);
48
+ const addFieldBlankX = this.x + this.columnWidth + AI_TABLE_OFFSET;
49
49
  this.rect({
50
- x: this.x + 0.5,
51
- y: y - 0.5,
52
- width: this.containerWidth - this.x < width ? width : this.containerWidth - this.x,
53
- height: rowHeight + 1,
54
- fill: this.colors.transparent
50
+ x: addFieldBlankX,
51
+ y: this.y + AI_TABLE_OFFSET,
52
+ width: this.containerWidth - addFieldBlankX < AI_TABLE_FIELD_ADD_BUTTON_WIDTH
53
+ ? AI_TABLE_FIELD_ADD_BUTTON_WIDTH
54
+ : this.containerWidth - addFieldBlankX,
55
+ height: rowHeight,
56
+ fill
55
57
  });
56
58
  }
57
59
  }
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWRyYXdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3JlbmRlcmVyL2RyYXdlcnMvbGF5b3V0LWRyYXdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRWxDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sTUFBTyxTQUFRLE1BQU07SUFBbEM7O1FBQ0ksZUFBZTtRQUNMLE1BQUMsR0FBRyxDQUFDLENBQUM7UUFDTixNQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLEtBQUs7UUFDSyxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLEtBQUs7UUFDSyxnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUMxQixNQUFNO1FBQ0ksYUFBUSxHQUFHLENBQUMsQ0FBQztRQUN2QixNQUFNO1FBQ0ksZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDMUIsS0FBSztRQUNLLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRWhCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO0lBb0NqQyxDQUFDO0lBbENHLG9EQUFvRDtJQUNwRCxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFpQjtRQUNwRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7SUFDekMsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixJQUFjLE9BQU87UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLElBQWMsTUFBTTtRQUNoQixPQUFPLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVTLG1CQUFtQjtRQUN6QixNQUFNLEtBQUssR0FBRywrQkFBK0IsQ0FBQztRQUM5QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNOLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUc7WUFDZixDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUc7WUFDVixLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sRUFBRSxTQUFTLEdBQUcsQ0FBQztZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXO1NBQ2hDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT05fV0lEVEggfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFibGUnO1xuaW1wb3J0IHsgQUlUYWJsZUxheW91dCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IERyYXdlciB9IGZyb20gJy4vZHJhd2VyJztcblxuLyoqXG4gKiDnlKjkuo7lpITnkIbooajmoLzooYzmiJbljZXlhYPmoLznmoTluIPlsYDlkoznu5jliLbjgIJcbiAqIOWug+aPkOS+m+S6huWfuuacrOeahOW4g+WxgOS/oeaBr++8iOWmguS9jee9ruOAgeWkp+Wwj+etie+8ie+8jOW5tuWumuS5ieS6huW4uOeUqOeahOe7mOWbvuaWueazle+8iOWmgua4suafk+e8qei/m+WMuuWfn+OAgea3u+WKoOaWsOWtl+auteeahOepuueZveWMuuWfn+etie+8ieOAglxuICog6K+l57G757un5om/6IeqIERyYXdlcu+8jOW5tuiiq+WFtuS7luabtOWFt+S9k+eahOW4g+WxgOexu++8iOWmgiBSZWNvcmRSb3dMYXlvdXTvvInmianlsZXlkozkvb/nlKhcbiAqL1xuZXhwb3J0IGNsYXNzIExheW91dCBleHRlbmRzIERyYXdlciB7XG4gICAgLy8g5a6a5LmJ5b2T5YmN5Y2V5YWD5qC85oiW6KGM55qE5L2N572uXG4gICAgcHJvdGVjdGVkIHggPSAwO1xuICAgIHByb3RlY3RlZCB5ID0gMDtcbiAgICAvLyDooYzpq5hcbiAgICBwcm90ZWN0ZWQgcm93SGVpZ2h0ID0gMDtcbiAgICAvLyDliJflrr1cbiAgICBwcm90ZWN0ZWQgY29sdW1uV2lkdGggPSAwO1xuICAgIC8vIOihjOe0ouW8lVxuICAgIHByb3RlY3RlZCByb3dJbmRleCA9IDA7XG4gICAgLy8g5YiX57Si5byVXG4gICAgcHJvdGVjdGVkIGNvbHVtbkluZGV4ID0gMDtcbiAgICAvLyDliJfmlbBcbiAgICBwcm90ZWN0ZWQgY29sdW1uQ291bnQgPSAwO1xuXG4gICAgcHJvdGVjdGVkIGNvbnRhaW5lcldpZHRoID0gMDtcblxuICAgIC8vIOeUqOS6juWIneWni+WMluaIlumHjee9ruW4g+WxgOeahOWfuuacrOWxnuaAp+OAgui/meS4quaWueazlemAmuW4uOWcqOavj+asoea4suafk+aWsOeahOS4gOihjOaIluWNleWFg+agvOaXtuiwg+eUqO+8jOehruS/neW4g+WxgOS/oeaBr+aYr+acgOaWsOeahFxuICAgIGluaXQoeyB4LCB5LCByb3dJbmRleCwgY29sdW1uSW5kZXgsIHJvd0hlaWdodCwgY29sdW1uV2lkdGgsIGNvbHVtbkNvdW50LCBjb250YWluZXJXaWR0aCB9OiBBSVRhYmxlTGF5b3V0KSB7XG4gICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgIHRoaXMucm93SW5kZXggPSByb3dJbmRleDtcbiAgICAgICAgdGhpcy5jb2x1bW5JbmRleCA9IGNvbHVtbkluZGV4O1xuICAgICAgICB0aGlzLnJvd0hlaWdodCA9IHJvd0hlaWdodDtcbiAgICAgICAgdGhpcy5jb2x1bW5XaWR0aCA9IGNvbHVtbldpZHRoO1xuICAgICAgICB0aGlzLmNvbHVtbkNvdW50ID0gY29sdW1uQ291bnQ7XG4gICAgICAgIHRoaXMuY29udGFpbmVyV2lkdGggPSBjb250YWluZXJXaWR0aDtcbiAgICB9XG5cbiAgICAvLyDlvZPliY3ljZXlhYPmoLzmmK/lkKbmmK/ooYznmoTnrKzkuIDliJdcbiAgICBwcm90ZWN0ZWQgZ2V0IGlzRmlyc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbkluZGV4ID09PSAwO1xuICAgIH1cblxuICAgIC8vIOW9k+WJjeWNleWFg+agvOaYr+WQpuaYr+ihjOeahOacgOWQjuS4gOWIl1xuICAgIHByb3RlY3RlZCBnZXQgaXNMYXN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5JbmRleCA9PT0gdGhpcy5jb2x1bW5Db3VudCAtIDE7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbmRlckFkZEZpZWxkQmxhbmsoKSB7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTl9XSURUSDtcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcbiAgICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5yb3dIZWlnaHQ7XG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiB0aGlzLnggKyAwLjUsXG4gICAgICAgICAgICB5OiB5IC0gMC41LFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMuY29udGFpbmVyV2lkdGggLSB0aGlzLnggPCB3aWR0aCA/IHdpZHRoIDogdGhpcy5jb250YWluZXJXaWR0aCAtIHRoaXMueCxcbiAgICAgICAgICAgIGhlaWdodDogcm93SGVpZ2h0ICsgMSxcbiAgICAgICAgICAgIGZpbGw6IHRoaXMuY29sb3JzLnRyYW5zcGFyZW50XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LWRyYXdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL3JlbmRlcmVyL2RyYXdlcnMvbGF5b3V0LWRyYXdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFekYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVsQzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLE1BQU8sU0FBUSxNQUFNO0lBQWxDOztRQUNJLGVBQWU7UUFDTCxNQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ04sTUFBQyxHQUFHLENBQUMsQ0FBQztRQUNoQixLQUFLO1FBQ0ssY0FBUyxHQUFHLENBQUMsQ0FBQztRQUN4QixLQUFLO1FBQ0ssZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDMUIsTUFBTTtRQUNJLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDdkIsTUFBTTtRQUNJLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLEtBQUs7UUFDSyxnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUVoQixtQkFBYyxHQUFHLENBQUMsQ0FBQztJQXVDakMsQ0FBQztJQXJDRyxvREFBb0Q7SUFDcEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBaUI7UUFDcEcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDWCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNYLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsSUFBYyxPQUFPO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixJQUFjLE1BQU07UUFDaEIsT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFUyxtQkFBbUIsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQTZDO1FBQzFGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDakMsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQztRQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ04sQ0FBQyxFQUFFLGNBQWM7WUFDakIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsZUFBZTtZQUMzQixLQUFLLEVBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLEdBQUcsK0JBQStCO2dCQUNsRSxDQUFDLENBQUMsK0JBQStCO2dCQUNqQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjO1lBQzlDLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLElBQUk7U0FDUCxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBSV9UQUJMRV9GSUVMRF9BRERfQlVUVE9OX1dJRFRILCBBSV9UQUJMRV9PRkZTRVQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFibGUnO1xuaW1wb3J0IHsgQUlUYWJsZUNlbGwsIEFJVGFibGVMYXlvdXQgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBEcmF3ZXIgfSBmcm9tICcuL2RyYXdlcic7XG5cbi8qKlxuICog55So5LqO5aSE55CG6KGo5qC86KGM5oiW5Y2V5YWD5qC855qE5biD5bGA5ZKM57uY5Yi244CCXG4gKiDlroPmj5Dkvpvkuobln7rmnKznmoTluIPlsYDkv6Hmga/vvIjlpoLkvY3nva7jgIHlpKflsI/nrYnvvInvvIzlubblrprkuYnkuobluLjnlKjnmoTnu5jlm77mlrnms5XvvIjlpoLmuLLmn5PnvKnov5vljLrln5/jgIHmt7vliqDmlrDlrZfmrrXnmoTnqbrnmb3ljLrln5/nrYnvvInjgIJcbiAqIOivpeexu+e7p+aJv+iHqiBEcmF3ZXLvvIzlubbooqvlhbbku5bmm7TlhbfkvZPnmoTluIPlsYDnsbvvvIjlpoIgUmVjb3JkUm93TGF5b3V077yJ5omp5bGV5ZKM5L2/55SoXG4gKi9cbmV4cG9ydCBjbGFzcyBMYXlvdXQgZXh0ZW5kcyBEcmF3ZXIge1xuICAgIC8vIOWumuS5ieW9k+WJjeWNleWFg+agvOaIluihjOeahOS9jee9rlxuICAgIHByb3RlY3RlZCB4ID0gMDtcbiAgICBwcm90ZWN0ZWQgeSA9IDA7XG4gICAgLy8g6KGM6auYXG4gICAgcHJvdGVjdGVkIHJvd0hlaWdodCA9IDA7XG4gICAgLy8g5YiX5a69XG4gICAgcHJvdGVjdGVkIGNvbHVtbldpZHRoID0gMDtcbiAgICAvLyDooYzntKLlvJVcbiAgICBwcm90ZWN0ZWQgcm93SW5kZXggPSAwO1xuICAgIC8vIOWIl+e0ouW8lVxuICAgIHByb3RlY3RlZCBjb2x1bW5JbmRleCA9IDA7XG4gICAgLy8g5YiX5pWwXG4gICAgcHJvdGVjdGVkIGNvbHVtbkNvdW50ID0gMDtcblxuICAgIHByb3RlY3RlZCBjb250YWluZXJXaWR0aCA9IDA7XG5cbiAgICAvLyDnlKjkuo7liJ3lp4vljJbmiJbph43nva7luIPlsYDnmoTln7rmnKzlsZ7mgKfjgILov5nkuKrmlrnms5XpgJrluLjlnKjmr4/mrKHmuLLmn5PmlrDnmoTkuIDooYzmiJbljZXlhYPmoLzml7bosIPnlKjvvIznoa7kv53luIPlsYDkv6Hmga/mmK/mnIDmlrDnmoRcbiAgICBpbml0KHsgeCwgeSwgcm93SW5kZXgsIGNvbHVtbkluZGV4LCByb3dIZWlnaHQsIGNvbHVtbldpZHRoLCBjb2x1bW5Db3VudCwgY29udGFpbmVyV2lkdGggfTogQUlUYWJsZUxheW91dCkge1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICB0aGlzLnJvd0luZGV4ID0gcm93SW5kZXg7XG4gICAgICAgIHRoaXMuY29sdW1uSW5kZXggPSBjb2x1bW5JbmRleDtcbiAgICAgICAgdGhpcy5yb3dIZWlnaHQgPSByb3dIZWlnaHQ7XG4gICAgICAgIHRoaXMuY29sdW1uV2lkdGggPSBjb2x1bW5XaWR0aDtcbiAgICAgICAgdGhpcy5jb2x1bW5Db3VudCA9IGNvbHVtbkNvdW50O1xuICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyV2lkdGg7XG4gICAgfVxuXG4gICAgLy8g5b2T5YmN5Y2V5YWD5qC85piv5ZCm5piv6KGM55qE56ys5LiA5YiXXG4gICAgcHJvdGVjdGVkIGdldCBpc0ZpcnN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5JbmRleCA9PT0gMDtcbiAgICB9XG5cbiAgICAvLyDlvZPliY3ljZXlhYPmoLzmmK/lkKbmmK/ooYznmoTmnIDlkI7kuIDliJdcbiAgICBwcm90ZWN0ZWQgZ2V0IGlzTGFzdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uSW5kZXggPT09IHRoaXMuY29sdW1uQ291bnQgLSAxO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZW5kZXJBZGRGaWVsZEJsYW5rKHsgc3R5bGUsIGlzSG92ZXJSb3cgfTogUGljazxBSVRhYmxlQ2VsbCwgJ2lzSG92ZXJSb3cnIHwgJ3N0eWxlJz4pIHtcbiAgICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5yb3dIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGZpbGwgPSBzdHlsZT8uZmlsbCB8fCAoaXNIb3ZlclJvdyA/IHRoaXMuY29sb3JzLmdyYXk4MCA6IHRoaXMuY29sb3JzLnRyYW5zcGFyZW50KTtcbiAgICAgICAgY29uc3QgYWRkRmllbGRCbGFua1ggPSB0aGlzLnggKyB0aGlzLmNvbHVtbldpZHRoICsgQUlfVEFCTEVfT0ZGU0VUO1xuICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgeDogYWRkRmllbGRCbGFua1gsXG4gICAgICAgICAgICB5OiB0aGlzLnkgKyBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICB3aWR0aDpcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoIC0gYWRkRmllbGRCbGFua1ggPCBBSV9UQUJMRV9GSUVMRF9BRERfQlVUVE9OX1dJRFRIXG4gICAgICAgICAgICAgICAgICAgID8gQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTl9XSURUSFxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuY29udGFpbmVyV2lkdGggLSBhZGRGaWVsZEJsYW5rWCxcbiAgICAgICAgICAgIGhlaWdodDogcm93SGVpZ2h0LFxuICAgICAgICAgICAgZmlsbFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { AI_TABLE_FIELD_HEAD_HEIGHT, AI_TABLE_OFFSET, AI_TABLE_ROW_HEAD_WIDTH, DEFAULT_FONT_SIZE } from '../../constants';
1
+ import { AI_TABLE_FIELD_ADD_BUTTON_WIDTH, AI_TABLE_FIELD_HEAD_HEIGHT, AI_TABLE_OFFSET, AI_TABLE_ROW_HEAD_WIDTH, DEFAULT_FONT_SIZE } from '../../constants';
2
2
  import { DEFAULT_TEXT_ALIGN_CENTER, DEFAULT_TEXT_VERTICAL_ALIGN_MIDDLE } from '../../constants/text';
3
3
  import { AITable } from '../../core';
4
4
  import { Layout } from './layout-drawer';
@@ -57,22 +57,31 @@ export class RecordRowLayout extends Layout {
57
57
  }
58
58
  }
59
59
  // 尾列
60
- renderLastCell({ style }) {
60
+ renderLastCell({ style, isHoverRow }) {
61
61
  if (!this.isLast || this.isFirst)
62
62
  return;
63
63
  const { fill, stroke } = style;
64
- const columnWidth = this.columnWidth;
65
- const width = columnWidth;
66
64
  const colors = AITable.getColors();
67
65
  // 背景、边框
68
66
  this.rect({
69
67
  x: this.x,
70
68
  y: this.y,
71
- width,
69
+ width: this.columnWidth,
72
70
  height: this.rowHeight,
73
71
  fill: fill || colors.white,
74
72
  stroke: stroke || colors.gray200
75
73
  });
74
+ // 延伸到 FIELD_ADD_BUTTON
75
+ super.renderAddFieldBlank({ style, isHoverRow });
76
+ const rowHeight = this.rowHeight;
77
+ const startX = this.x + this.columnWidth;
78
+ const lineWidth = this.containerWidth - startX < AI_TABLE_FIELD_ADD_BUTTON_WIDTH ? AI_TABLE_FIELD_ADD_BUTTON_WIDTH : this.containerWidth - startX;
79
+ this.line({
80
+ x: startX,
81
+ y: this.y,
82
+ points: [0, rowHeight, lineWidth, rowHeight],
83
+ stroke: this.colors.gray200
84
+ });
76
85
  }
77
86
  // 绘制中间的普通单元格
78
87
  renderCommonCell({ style }) {
@@ -94,8 +103,8 @@ export class RecordRowLayout extends Layout {
94
103
  const { row, style, isCheckedRow, isHoverRow } = config;
95
104
  this.renderFirstCell({ row, style, isCheckedRow, isHoverRow });
96
105
  this.renderCommonCell({ style });
97
- this.renderLastCell({ style });
106
+ this.renderLastCell({ style, isHoverRow });
98
107
  }
99
108
  }
100
109
  export const recordRowLayout = new RecordRowLayout();
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLXJvdy1sYXlvdXQtZHJhd2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvcmVuZGVyZXIvZHJhd2Vycy9yZWNvcmQtcm93LWxheW91dC1kcmF3ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLGVBQWUsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFILE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpDOzs7R0FHRztBQUNILE1BQU0sT0FBTyxlQUFnQixTQUFRLE1BQU07SUFDdkMsS0FBSztJQUNHLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBZTtRQUN6RSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRTFCLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDdkIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNqQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2pDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDckMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25DLFVBQVU7UUFDVixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ2hDLElBQUksWUFBWSxFQUFFLENBQUM7WUFDZixNQUFNLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1FBQ3RDLENBQUM7YUFBTSxJQUFJ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QUNQLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBbUI7UUFDdEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUN4RCxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FDSjtBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQUlfVEFCTEVfRklFTERfSEVBRF9IRUlHSFQsIEFJX1RBQkxFX09GRlNFVCwgQUlfVEFCTEVfUk9XX0hFQURfV0lEVEgsIERFRkFVTFRfRk9OVF9TSVpFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IERFRkFVTFRfVEVYVF9BTElHTl9DRU5URVIsIERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGV4dCc7XG5pbXBvcnQgeyBBSVRhYmxlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQ2VsbCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IExheW91dCB9IGZyb20gJy4vbGF5b3V0LWRyYXdlcic7XG5cbi8qKlxuICog57uY5Yi26KGM55qE5biD5bGA77yM6YCa6L+H55u05o6l5pON5L2cIENhbnZhcyDmj5Dkvpvpq5jmlYjnmoTmuLLmn5Pmlrnms5XjgIJcbiAqIOWug+e7p+aJv+iHqiBMYXlvdXQg57G777yM5YyF5ZCr5LqG55So5LqO57uY5Yi26KGM5Lit5Y2V5YWD5qC877yI5bCk5YW25piv6aaW5YiX5ZKM5bC+5YiX77yJ55qE5Yeg5Liq5pa55rOVXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWNvcmRSb3dMYXlvdXQgZXh0ZW5kcyBMYXlvdXQge1xuICAgIC8vIOmmluWIl1xuICAgIHByaXZhdGUgcmVuZGVyRmlyc3RDZWxsKHsgcm93LCBzdHlsZSwgaXNIb3ZlclJvdywgaXNDaGVja2VkUm93IH06IEFJVGFibGVDZWxsKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgeyBmaWxsIH0gPSBzdHlsZTtcbiAgICAgICAgY29uc3QgeSA9IHRoaXMueTtcbiAgICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5yb3dIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gdGhpcy5jb2x1bW5XaWR0aDtcbiAgICAgICAgY29uc3QgY29sb3JzID0gQUlUYWJsZS5nZXRDb2xvcnMoKTtcbiAgICAgICAgLy8g57yW5Y+355qE5LiK5LiL6L655qGGXG4gICAgICAgIGxldCBmaWxsQmcgPSBjb2xvcnMudHJhbnNwYXJlbnQ7XG4gICAgICAgIGlmIChpc0NoZWNrZWRSb3cpIHtcbiAgICAgICAgICAgIGZpbGxCZyA9IGNvbG9ycy5pdGVtQWN0aXZlQmdDb2xvcjtcbiAgICAgICAgfSBlbHNlIGlmIChpc0hvdmVyUm93KSB7XG4gICAgICAgICAgICBmaWxsQmcgPSBjb2xvcnMuZ3JheTgwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VzdG9tUmVjdCh7XG4gICAgICAgICAgICB4OiBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICB5LFxuICAgICAgICAgICAgd2lkdGg6IEFJX1RBQkxFX1JPV19IRUFEX1dJRFRIIC0gQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgaGVpZ2h0OiByb3dIZWlnaHQsXG4gICAgICAgICAgICBmaWxsOiBmaWxsQmcsXG4gICAgICAgICAgICBzdHJva2VzOiB7XG4gICAgICAgICAgICAgICAgcmlnaHQ6IGNvbG9ycy5ncmF5MjAwLFxuICAgICAgICAgICAgICAgIGJvdHRvbTogY29sb3JzLmdyYXkyMDBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIOesrOS4gOWIl+WNleWFg+agvFxuICAgICAgICB0aGlzLnJlY3Qoe1xuICAgICAgICAgICAgeDogQUlfVEFCTEVfUk9XX0hFQURfV0lEVEgsXG4gICAgICAgICAgICB5LFxuICAgICAgICAgICAgd2lkdGg6IGNvbHVtbldpZHRoICsgQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgaGVpZ2h0OiByb3dIZWlnaHQsXG4gICAgICAgICAgICBmaWxsOiBmaWxsLFxuICAgICAgICAgICAgc3Ryb2tlOiBjb2xvcnMuZ3JheTIwMFxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIWlzQ2hlY2tlZFJvdyAmJiAhaXNIb3ZlclJvdykge1xuICAgICAgICAgICAgLy8g6K6+572u5a2X5L2T5qC35byP77yM5bGF5Lit57uY5Yi26KGM5Y+3XG4gICAgICAgICAgICB0aGlzLnNldFN0eWxlKHsgZm9udFNpemU6IERFRkFVTFRfRk9OVF9TSVpFIH0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0KHtcbiAgICAgICAgICAgICAgICB4OiBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSCAvIDIsXG4gICAgICAgICAgICAgICAgeTogeSArIEFJX1RBQkxFX0ZJRUxEX0hFQURfSEVJR0hUIC8gMixcbiAgICAgICAgICAgICAgICB0ZXh0OiBTdHJpbmcocm93LmRpc3BsYXlJbmRleCksXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiBERUZBVUxUX1RFWFRfQUxJR05fQ0VOVEVSLFxuICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ246IERFRkFVTFRfVEVYVF9WRVJUSUNBTF9BTElHTl9NSURETEVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8g5bC+5YiXXG4gICAgcHJpdmF0ZSByZW5kZXJMYXN0Q2VsbCh7IHN0eWxlIH06IFBpY2s8QUlUYWJsZUNlbGwsICdzdHlsZSc+KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0xhc3QgfHwgdGhpcy5pc0ZpcnN0KSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgeyBmaWxsLCBzdHJva2UgfSA9IHN0eWxlO1xuICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IHRoaXMuY29sdW1uV2lkdGg7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gY29sdW1uV2lkdGg7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG5cbiAgICAgICAgLy8g6IOM5pmv44CB6L655qGGXG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5yb3dIZWlnaHQsXG4gICAgICAgICAgICBmaWxsOiBmaWxsIHx8IGNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgIHN0cm9rZTogc3Ryb2tlIHx8IGNvbG9ycy5ncmF5MjAwXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIOe7mOWItuS4remXtOeahOaZrumAmuWNleWFg+agvFxuICAgIHByaXZhdGUgcmVuZGVyQ29tbW9uQ2VsbCh7IHN0eWxlIH06IFBpY2s8QUlUYWJsZUNlbGwsICdzdHlsZSc+KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRmlyc3QgfHwgdGhpcy5pc0xhc3QpIHJldHVybjtcblxuICAgICAgICBjb25zdCB7IGZpbGwsIHN0cm9rZSB9ID0gc3R5bGU7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG5cbiAgICAgICAgLy8g6IOM5pmv44CB6L655qGGXG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5jb2x1bW5XaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5yb3dIZWlnaHQsXG4gICAgICAgICAgICBmaWxsOiBmaWxsIHx8IGNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgIHN0cm9rZTogc3Ryb2tlIHx8IGNvbG9ycy5ncmF5MjAwXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmRlcihjb25maWc6IEFJVGFibGVDZWxsKSB7XG4gICAgICAgIGNvbnN0IHsgcm93LCBzdHlsZSwgaXNDaGVja2VkUm93LCBpc0hvdmVyUm93IH0gPSBjb25maWc7XG4gICAgICAgIHRoaXMucmVuZGVyRmlyc3RDZWxsKHsgcm93LCBzdHlsZSwgaXNDaGVja2VkUm93LCBpc0hvdmVyUm93IH0pO1xuICAgICAgICB0aGlzLnJlbmRlckNvbW1vbkNlbGwoeyBzdHlsZSB9KTtcbiAgICAgICAgdGhpcy5yZW5kZXJMYXN0Q2VsbCh7IHN0eWxlIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJlY29yZFJvd0xheW91dCA9IG5ldyBSZWNvcmRSb3dMYXlvdXQoKTtcbiJdfQ==
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLXJvdy1sYXlvdXQtZHJhd2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvcmVuZGVyZXIvZHJhd2Vycy9yZWNvcmQtcm93LWxheW91dC1kcmF3ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILCtCQUErQixFQUMvQiwwQkFBMEIsRUFDMUIsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDcEIsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUseUJBQXlCLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXJDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6Qzs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxNQUFNO0lBQ3ZDLEtBQUs7SUFDRyxlQUFlLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQWU7UUFDekUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUUxQixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNqQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQyxVQUFVO1FBQ1YsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUNoQyxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2YsTUFBTSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztRQUN0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ICAgIEFJX1RBQkxFX0ZJRUxEX0hFQURfSEVJR0hULFxuICAgIEFJX1RBQkxFX09GRlNFVCxcbiAgICBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSCxcbiAgICBERUZBVUxUX0ZPTlRfU0laRVxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgREVGQVVMVF9URVhUX0FMSUdOX0NFTlRFUiwgREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90ZXh0JztcbmltcG9ydCB7IEFJVGFibGUgfSBmcm9tICcuLi8uLi9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVDZWxsIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgTGF5b3V0IH0gZnJvbSAnLi9sYXlvdXQtZHJhd2VyJztcblxuLyoqXG4gKiDnu5jliLbooYznmoTluIPlsYDvvIzpgJrov4fnm7TmjqXmk43kvZwgQ2FudmFzIOaPkOS+m+mrmOaViOeahOa4suafk+aWueazleOAglxuICog5a6D57un5om/6IeqIExheW91dCDnsbvvvIzljIXlkKvkuobnlKjkuo7nu5jliLbooYzkuK3ljZXlhYPmoLzvvIjlsKTlhbbmmK/pppbliJflkozlsL7liJfvvInnmoTlh6DkuKrmlrnms5VcbiAqL1xuZXhwb3J0IGNsYXNzIFJlY29yZFJvd0xheW91dCBleHRlbmRzIExheW91dCB7XG4gICAgLy8g6aaW5YiXXG4gICAgcHJpdmF0ZSByZW5kZXJGaXJzdENlbGwoeyByb3csIHN0eWxlLCBpc0hvdmVyUm93LCBpc0NoZWNrZWRSb3cgfTogQUlUYWJsZUNlbGwpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRmlyc3QpIHJldHVybjtcblxuICAgICAgICBjb25zdCB7IGZpbGwgfSA9IHN0eWxlO1xuICAgICAgICBjb25zdCB5ID0gdGhpcy55O1xuICAgICAgICBjb25zdCByb3dIZWlnaHQgPSB0aGlzLnJvd0hlaWdodDtcbiAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSB0aGlzLmNvbHVtbldpZHRoO1xuICAgICAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuICAgICAgICAvLyDnvJblj7fnmoTkuIrkuIvovrnmoYZcbiAgICAgICAgbGV0IGZpbGxCZyA9IGNvbG9ycy50cmFuc3BhcmVudDtcbiAgICAgICAgaWYgKGlzQ2hlY2tlZFJvdykge1xuICAgICAgICAgICAgZmlsbEJnID0gY29sb3JzLml0ZW1BY3RpdmVCZ0NvbG9yO1xuICAgICAgICB9IGVsc2UgaWYgKGlzSG92ZXJSb3cpIHtcbiAgICAgICAgICAgIGZpbGxCZyA9IGNvbG9ycy5ncmF5ODA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXN0b21SZWN0KHtcbiAgICAgICAgICAgIHg6IEFJX1RBQkxFX09GRlNFVCxcbiAgICAgICAgICAgIHksXG4gICAgICAgICAgICB3aWR0aDogQUlfVEFCTEVfUk9XX0hFQURfV0lEVEggLSBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICBoZWlnaHQ6IHJvd0hlaWdodCxcbiAgICAgICAgICAgIGZpbGw6IGZpbGxCZyxcbiAgICAgICAgICAgIHN0cm9rZXM6IHtcbiAgICAgICAgICAgICAgICByaWdodDogY29sb3JzLmdyYXkyMDAsXG4gICAgICAgICAgICAgICAgYm90dG9tOiBjb2xvcnMuZ3JheTIwMFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8g56ys5LiA5YiX5Y2V5YWD5qC8XG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSCxcbiAgICAgICAgICAgIHksXG4gICAgICAgICAgICB3aWR0aDogY29sdW1uV2lkdGggKyBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICBoZWlnaHQ6IHJvd0hlaWdodCxcbiAgICAgICAgICAgIGZpbGw6IGZpbGwsXG4gICAgICAgICAgICBzdHJva2U6IGNvbG9ycy5ncmF5MjAwXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICghaXNDaGVja2VkUm93ICYmICFpc0hvdmVyUm93KSB7XG4gICAgICAgICAgICAvLyDorr7nva7lrZfkvZPmoLflvI/vvIzlsYXkuK3nu5jliLbooYzlj7dcbiAgICAgICAgICAgIHRoaXMuc2V0U3R5bGUoeyBmb250U2l6ZTogREVGQVVMVF9GT05UX1NJWkUgfSk7XG4gICAgICAgICAgICB0aGlzLnRleHQoe1xuICAgICAgICAgICAgICAgIHg6IEFJX1RBQkxFX1JPV19IRUFEX1dJRFRIIC8gMixcbiAgICAgICAgICAgICAgICB5OiB5ICsgQUlfVEFCTEVfRklFTERfSEVBRF9IRUlHSFQgLyAyLFxuICAgICAgICAgICAgICAgIHRleHQ6IFN0cmluZyhyb3cuZGlzcGxheUluZGV4KSxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IERFRkFVTFRfVEVYVF9BTElHTl9DRU5URVIsXG4gICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogREVGQVVMVF9URVhUX1ZFUlRJQ0FMX0FMSUdOX01JRERMRVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyDlsL7liJdcbiAgICBwcml2YXRlIHJlbmRlckxhc3RDZWxsKHsgc3R5bGUsIGlzSG92ZXJSb3cgfTogUGljazxBSVRhYmxlQ2VsbCwgJ3N0eWxlJyB8ICdpc0hvdmVyUm93Jz4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzTGFzdCB8fCB0aGlzLmlzRmlyc3QpIHJldHVybjtcblxuICAgICAgICBjb25zdCB7IGZpbGwsIHN0cm9rZSB9ID0gc3R5bGU7XG4gICAgICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG5cbiAgICAgICAgLy8g6IOM5pmv44CB6L655qGGXG4gICAgICAgIHRoaXMucmVjdCh7XG4gICAgICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgICB3aWR0aDogdGhpcy5jb2x1bW5XaWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogdGhpcy5yb3dIZWlnaHQsXG4gICAgICAgICAgICBmaWxsOiBmaWxsIHx8IGNvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgIHN0cm9rZTogc3Ryb2tlIHx8IGNvbG9ycy5ncmF5MjAwXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIOW7tuS8uOWIsCBGSUVMRF9BRERfQlVUVE9OXG4gICAgICAgIHN1cGVyLnJlbmRlckFkZEZpZWxkQmxhbmsoeyBzdHlsZSwgaXNIb3ZlclJvdyB9KTtcbiAgICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gdGhpcy5yb3dIZWlnaHQ7XG4gICAgICAgIGNvbnN0IHN0YXJ0WCA9IHRoaXMueCArIHRoaXMuY29sdW1uV2lkdGg7XG4gICAgICAgIGNvbnN0IGxpbmVXaWR0aCA9XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lcldpZHRoIC0gc3RhcnRYIDwgQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTl9XSURUSCA/IEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT05fV0lEVEggOiB0aGlzLmNvbnRhaW5lcldpZHRoIC0gc3RhcnRYO1xuICAgICAgICB0aGlzLmxpbmUoe1xuICAgICAgICAgICAgeDogc3RhcnRYLFxuICAgICAgICAgICAgeTogdGhpcy55LFxuICAgICAgICAgICAgcG9pbnRzOiBbMCwgcm93SGVpZ2h0LCBsaW5lV2lkdGgsIHJvd0hlaWdodF0sXG4gICAgICAgICAgICBzdHJva2U6IHRoaXMuY29sb3JzLmdyYXkyMDBcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8g57uY5Yi25Lit6Ze055qE5pmu6YCa5Y2V5YWD5qC8XG4gICAgcHJpdmF0ZSByZW5kZXJDb21tb25DZWxsKHsgc3R5bGUgfTogUGljazxBSVRhYmxlQ2VsbCwgJ3N0eWxlJz4pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNGaXJzdCB8fCB0aGlzLmlzTGFzdCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHsgZmlsbCwgc3Ryb2tlIH0gPSBzdHlsZTtcbiAgICAgICAgY29uc3QgY29sb3JzID0gQUlUYWJsZS5nZXRDb2xvcnMoKTtcblxuICAgICAgICAvLyDog4zmma/jgIHovrnmoYZcbiAgICAgICAgdGhpcy5yZWN0KHtcbiAgICAgICAgICAgIHg6IHRoaXMueCxcbiAgICAgICAgICAgIHk6IHRoaXMueSxcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLmNvbHVtbldpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLnJvd0hlaWdodCxcbiAgICAgICAgICAgIGZpbGw6IGZpbGwgfHwgY29sb3JzLndoaXRlLFxuICAgICAgICAgICAgc3Ryb2tlOiBzdHJva2UgfHwgY29sb3JzLmdyYXkyMDBcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVuZGVyKGNvbmZpZzogQUlUYWJsZUNlbGwpIHtcbiAgICAgICAgY29uc3QgeyByb3csIHN0eWxlLCBpc0NoZWNrZWRSb3csIGlzSG92ZXJSb3cgfSA9IGNvbmZpZztcbiAgICAgICAgdGhpcy5yZW5kZXJGaXJzdENlbGwoeyByb3csIHN0eWxlLCBpc0NoZWNrZWRSb3csIGlzSG92ZXJSb3cgfSk7XG4gICAgICAgIHRoaXMucmVuZGVyQ29tbW9uQ2VsbCh7IHN0eWxlIH0pO1xuICAgICAgICB0aGlzLnJlbmRlckxhc3RDZWxsKHsgc3R5bGUsIGlzSG92ZXJSb3cgfSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVjb3JkUm93TGF5b3V0ID0gbmV3IFJlY29yZFJvd0xheW91dCgpO1xuIl19