@ditojs/admin 1.9.1 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2251,15 +2251,12 @@ const mi = _.component("dito-dialog", {
2251
2251
  };
2252
2252
  },
2253
2253
  buttonSchemas() {
2254
- return Object.entries(it(this.buttons)).reduce((t, [e, s]) => {
2255
- const { events: n } = s;
2256
- return e === "cancel" && !n && (s = {
2257
- ...s,
2258
- events: {
2259
- click: () => this.cancel()
2260
- }
2261
- }), t[e] = s, t;
2262
- }, {});
2254
+ return Object.fromEntries(Object.entries(it(this.buttons)).map(([t, e]) => (t === "cancel" && !e.events && (e = {
2255
+ ...e,
2256
+ events: {
2257
+ click: () => this.cancel()
2258
+ }
2259
+ }), [t, e])));
2263
2260
  },
2264
2261
  hasCancel() {
2265
2262
  return !!this.buttonSchemas.cancel;
@@ -8075,4 +8072,4 @@ class od {
8075
8072
  export {
8076
8073
  od as default
8077
8074
  };
8078
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL3V0aWxzL2RlcHJlY2F0ZS5qcyIsIi4uL3NyYy9taXhpbnMvRGl0b01peGluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19jcmVkaXRjYXJkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kZWNpbWFscy5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZW1haWwuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2hvc3RuYW1lLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kb21haW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2ludGVnZXIuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21heC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19wYXNzd29yZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmFuZ2UuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JlcXVpcmVkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL191cmwuanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRpb25NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9hY2Nlc3Nvci5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvc2NoZW1hLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvRGl0b0NvbXBvbmVudC5qcyIsIi4uL3NyYy9EaXRvVXNlci5qcyIsIi4uL3NyYy9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzIiwiLi4vc3JjL21peGlucy9Sb3V0ZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWUiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSGVhZGVyLnZ1ZSIsIi4uL3NyYy9taXhpbnMvUHVsbGRvd25NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9BY2NvdW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlIiwiLi4vc3JjL3V0aWxzL21hdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NyZWF0ZUJ1dHRvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY29wZXMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvbWl4aW5zL09yZGVyZWRNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlSGVhZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlQ2VsbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVk5vZGUudnVlIiwiLi4vc3JjL1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRGF0YU1peGluLmpzIiwiLi4vc3JjL21peGlucy9PcHRpb25zTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbG9yLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvZmlsdGVyLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxhYmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTWFya3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTXVsdGlzZWxlY3QudnVlIiwiLi4vc3JjL21peGlucy9OdW1iZXJNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVPYmplY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2xpZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVVcGxvYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWUiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIHJldHVybiBpc1RlbXBvcmFyeUlkKGRhdGE/LltpZEtleV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW1EYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSwgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSwgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQoY29udGV4dClcbiAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAvLyBJZiBgb2JqZWN0YCBleHBsaWNpdGx5IHNldHMgdGhlIGtleSB0byBgdW5kZWZpbmVkYCwgcmV0dXJuIGl0LlxuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCB8fCBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgID8gdmFsdWVcbiAgICA6IGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgPyBkZWZhdWx0VmFsdWUoKVxuICAgICAgOiBkZWZhdWx0VmFsdWVcbn1cblxuZnVuY3Rpb24gc2V0KGNvbnRleHQsIGtleSwgdmFsdWUpIHtcbiAgY29udGV4dHMuZ2V0KGNvbnRleHQpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IChpc0Z1bmN0aW9uKGNvbnRleHQpID8gY29udGV4dCgpIDogeyAuLi5jb250ZXh0IH0pXG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICAvLyBgbmVzdGVkYCBpcyBgdHJ1ZWAgd2hlbiB0aGUgZGF0YS1wYXRoIHBvaW50cyBhIHZhbHVlIGluc2lkZSBhbiBpdGVtLCBhbmRcbiAgLy8gYGZhbHNlYCB3aGVuIGl0IHBvaW50cyB0byB0aGUgaXRlbSBpdHNlbGYuXG4gIGdldCBuZXN0ZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmVzdGVkJywgdHJ1ZSlcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2YWx1ZScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBkYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhUGF0aCcsICcnKVxuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmFtZScsICgpID0+IGdldExhc3REYXRhUGF0aE5hbWUodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaW5kZXgnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldFBhcmVudEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBpdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuaXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5wYXJlbnRJdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgaXRlbSgpIHtcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAgIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YScsICgpID0+XG4gICAgICBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIC8vIE5PVEU6IGBwYXJlbnRJdGVtYCBpc24ndCB0aGUgY2xvc2VzdCBkYXRhIHBhcmVudCB0byBgaXRlbWAsIGl0J3MgdGhlXG4gIC8vIGNsb3Nlc3QgcGFyZW50IHRoYXQgaXNuJ3QgYW4gYXJyYXksIGUuZy4gZm9yIHJlbGF0aW9ucyBvciBuZXN0ZWQgSlNPTlxuICAvLyBkYXRhLiAgVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlXG4gIC8vIHVzZSBvZiBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0XG4gIC8vIHBhcmVudC4gSWYgbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsXG4gIC8vIHNvcnRzIG9mIGRhdGEgcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IHBhcmVudEl0ZW0gPVxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHwgbnVsbFxuICAgIHJldHVybiBwYXJlbnRJdGVtICE9PSB0aGlzLml0ZW0gPyBwYXJlbnRJdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgZXhwb3N1cmUgc2luY2UgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LFxuICAvLyBlLmcuIG5lc3RlZCBmb3JtcyBpbiBgcHJvY2Vzc0RhdGEoKWAuIEluc3RlYWQsIGJpbmQgY29tcG9uZW50IHRvIGB0aGlzYFxuICAvLyBvbmx5IHdoZXJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGV2ZW50czogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQXN5bmMgdmVyc2lvbnMgb2YgVnVlJ3MgJG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGVcbiAgICAvLyBldmVudHMgYWRkZWQgLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrc1xuICAgIC8vIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLiRldmVudHMgfHwgKHRoaXMuJGV2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBldmVudHNbZXZlbnRdIHx8IChldmVudHNbZXZlbnRdID0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGhhbmRsZXJzIGZvciB0aGlzIGV2ZW50XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLCBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZWdhdGUoZXZlbnQsIHRhcmdldCkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlKGV2LCB0YXJnZXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub24oZXZlbnQsICguLi5hcmdzKSA9PiB0YXJnZXQuZW1pdChldmVudCwgLi4uYXJncykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzQm9vbGVhbiwgaXNOdW1iZXIsIGlzRnVuY3Rpb24sIGlzRGF0ZSxcbiAgaXNSZWdFeHAsIGFzQXJyYXlcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNoZWNrZXJzID0ge1xuICBCb29sZWFuOiBpc0Jvb2xlYW4sXG4gIE51bWJlcjogaXNOdW1iZXIsXG4gIFN0cmluZzogaXNTdHJpbmcsXG4gIERhdGU6IGlzRGF0ZSxcbiAgQXJyYXk6IGlzQXJyYXksXG4gIE9iamVjdDogaXNPYmplY3QsXG4gIFJlZ0V4cDogaXNSZWdFeHAsXG4gIEZ1bmN0aW9uOiBpc0Z1bmN0aW9uXG59XG5cbi8vIERlY2xhcmUgdGhlc2Ugc2VwYXJhdGVseSBmcm9tIHRoZSBgdHlwZUNvbnZlcnRlcnNgIG9iamVjdCwgdG8gcHJldmVudFxuLy8gQmFiZWwgaXNzdWVzIHdpdGggYE9iamVjdGAgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIGBPYmplY3RgOlxuY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4gISF2YWx1ZVxuY29uc3QgdG9OdW1iZXIgPSB2YWx1ZSA9PiArdmFsdWVcbmNvbnN0IHRvU3RyaW5nID0gdmFsdWUgPT4gU3RyaW5nKHZhbHVlKVxuXG5jb25zdCB0b0RhdGUgPSB2YWx1ZSA9PiBpc0RhdGUodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+IGlzQXJyYXkodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICA6IGFzQXJyYXkodmFsdWUpXG5cbmNvbnN0IHRvT2JqZWN0ID0gdmFsdWUgPT4gaXNPYmplY3QodmFsdWUpXG4gID8gdmFsdWVcbiAgLy8gSWYgYSBPYmplY3QgaXMgZXhwZWN0ZWQgYnV0IGEgQm9vbGVhbiBwcm92aWRlLCBjb252ZXJ0IHRvIGFuIGVtcHR5XG4gIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICA6IHZhbHVlID09PSB0cnVlXG4gICAgPyB7fVxuICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+IGlzUmVnRXhwKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSkgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICksXG4gICAgICBpZDogYCR7aWR9YFxuICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImNvbnN0IGxvZ2dlZERlcHJlY2F0aW9ucyA9IG5ldyBTZXQoKVxuXG5leHBvcnQgZnVuY3Rpb24gZGVwcmVjYXRlKG1lc3NhZ2UpIHtcbiAgLy8gT25seSBsb2cgZGVwcmVjYXRpb24gbWVzc2FnZXMgb25jZS5cbiAgaWYgKCFsb2dnZWREZXByZWNhdGlvbnMuaGFzKG1lc3NhZ2UpKSB7XG4gICAgbG9nZ2VkRGVwcmVjYXRpb25zLmFkZChtZXNzYWdlKVxuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcsIGlzRnVuY3Rpb24sIGFzQXJyYXksIGVxdWFscyxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoLCBsYWJlbGl6ZSwgaHlwaGVuYXRlLCBmb3JtYXRcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBhcHBTdGF0ZSBmcm9tICcuLi9hcHBTdGF0ZS5qcydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZGVwcmVjYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGVwcmVjYXRlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtFbWl0dGVyTWl4aW5dLFxuXG4gIGluamVjdDogW1xuICAgICdhcGknLFxuICAgICckdmVyYnMnLFxuICAgICckdmlld3MnLFxuICAgICckaXNQb3B1bGF0ZWQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8geyAkZGF0YUNvbXBvbmVudDogKCkgPT4gdGhpcyB9XG4gICAgICA6IHt9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGUsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRjaGlsZHJlblswXVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBVc2UgY29tcHV0ZWQgcHJvcGVydGllcyBhcyBsaW5rcyB0byBpbmplY3RzLCBzbyBEaXRvU2NoZW1hIGNhblxuICAgICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICAgIHJldHVybiB0aGlzLiRzY2hlbWFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIFJvdXRlTWl4aW4gY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzRm9ybSA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlld0NvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzVmlldyA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIGN1cnJlbnQgY29tcG9uZW50LCB0aGF0IGlzIGxpbmtlZCB0byBhIHJlc291cmNlIChhbmQgdGh1cyBsb2FkcyBpdHNcbiAgICAvLyBvd24gZGF0YSBhbmQgZG9lc24ndCBob2xkIG5lc3RlZCBkYXRhKS5cbiAgICBkYXRhQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhID8gdGhpcyA6IHRoaXMuJGRhdGFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZGlhbG9nQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFuZWxDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50Py4kcGFyZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50Py4kcGFyZW50LnJvdXRlQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudEZvcm1Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py4kcGFyZW50LmZvcm1Db21wb25lbnRcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlQ3JlYXRlKCkge1xuICAgIHRoaXMuJHVpZCA9ICsrdWlkXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2V0KHRoaXMuc3RvcmUsIGtleSwgdmFsdWUpXG4gICAgfSxcblxuICAgIGdldENoaWxkU3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdG9yZShrZXkpIHx8IHRoaXMuc2V0U3RvcmUoa2V5LCB7fSlcbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hVmFsdWUoXG4gICAgICBrZXlPckRhdGFQYXRoLFxuICAgICAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIHNjaGVtYSA9IHRoaXMuc2NoZW1hLCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4gICAgKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IHR5cGUgJiYgYXNBcnJheSh0eXBlKVxuICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gICAgICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgICAgIGxldCB2YWx1ZSA9IHNjaGVtYVxuICAgICAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgICAgICA6IHNjaGVtYVtrZXlPckRhdGFQYXRoXVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihkZWYpICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgZGVmKSkge1xuICAgICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgICAgICBkZWYgPSBkZWYuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH1cbiAgICAgIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAgICAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgICAgIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydGVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0TGFiZWwoc2NoZW1hLCBuYW1lKSB7XG4gICAgICByZXR1cm4gc2NoZW1hXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnbGFiZWwnLCB7IHR5cGU6IFN0cmluZywgc2NoZW1hIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBsYWJlbGl6ZSxcblxuICAgIGdldEJ1dHRvbkF0dHJpYnV0ZXMobmFtZSwgYnV0dG9uKSB7XG4gICAgICBjb25zdCB2ZXJiID0gdGhpcy52ZXJic1tuYW1lXSB8fCBuYW1lXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzczogYGRpdG8tYnV0dG9uLSR7dmVyYn1gLFxuICAgICAgICB0aXRsZTogYnV0dG9uPy50ZXh0IHx8IGxhYmVsaXplKHZlcmIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldERyYWdPcHRpb25zKGRyYWdnYWJsZSwgZmFsbGJhY2sgPSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGRpc2FibGVkOiAhZHJhZ2dhYmxlLFxuICAgICAgICBoYW5kbGU6ICcuZGl0by1idXR0b24tZHJhZycsXG4gICAgICAgIGRyYWdDbGFzczogJ2RpdG8tZHJhZy1hY3RpdmUnLFxuICAgICAgICBjaG9zZW5DbGFzczogJ2RpdG8tZHJhZy1jaG9zZW4nLFxuICAgICAgICBnaG9zdENsYXNzOiAnZGl0by1kcmFnLWdob3N0JyxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogJ2RpdG8tZHJhZy1mYWxsYmFjaycsXG4gICAgICAgIGZvcmNlRmFsbGJhY2s6IGZhbGxiYWNrXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFF1ZXJ5TGluayhxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiAhIXNjaGVtYSAmJiB0aGlzLmdldFNjaGVtYVZhbHVlKCdpZicsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHtcbiAgICAgIGNvbXBvbmVudHMsXG4gICAgICBidXR0b25zLFxuICAgICAgZGF0YSxcbiAgICAgIHNldHRpbmdzID0ge1xuICAgICAgICB3aWR0aDogNDgwLFxuICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfVxuICAgIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IHRocm91Z2ggdnVlLWpzLW1vZGFsLCBhbmQgd3JhcHMgaXQgaW4gYVxuICAgICAgLy8gcHJvbWlzZSBzbyB0aGF0IHRoZSBidXR0b25zIGluIHRoZSBkaWFsb2cgY2FuIHVzZSBgZGlhbG9nLnJlc29sdmUoKWBcbiAgICAgIC8vIGFuZCBgZGlhbG9nLnJlamVjdCgpYCB0byBjbG9zZSB0aGUgbW9kYWwgZGlhbG9nIGFuZCByZXNvbHZlIC8gcmVqZWN0XG4gICAgICAvLyB0aGUgcHJvbWlzZSBhdCBvbmNlLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy4kbW9kYWwuc2hvdyhEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1kaWFsb2cnKSwge1xuICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgfSwgc2V0dGluZ3MpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UpXG4gICAgICAvLyBSZXNvdXJjZXMgd2l0aG91dCBhIHBhcmVudCBpbmhlcml0IHRoZSBvbmUgZnJvbSBgZGF0YUNvbXBvbmVudGBcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICBpZiAocmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb3VyY2UucGFyZW50ID0gdGhpcy5kYXRhQ29tcG9uZW50Py5yZXNvdXJjZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkoZ2V0UmVzb3VyY2UocmVzb3VyY2UpKVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVVybChyZXNvdXJjZSkge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgbGV0IHVybCA9IG51bGxcbiAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgIC8vIFVzZSBzYW1lIGFwcHJvYWNoIGFzIGF4aW9zIGludGVybmFsbHkgdG8gam9pbiBiYXNlVVJMIHdpdGggcGF0aDpcbiAgICAgICAgdXJsID0gYCR7XG4gICAgICAgICAgdGhpcy5hcGkudXJsLnJlcGxhY2UoL1xcLyskLywgJycpXG4gICAgICAgIH0vJHtcbiAgICAgICAgICBwYXRoLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgICAgIH1gXG4gICAgICAgIC8vIFN1cHBvcnQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycywgd2hpY2ggYXJlIGFkZGVkIHRvIHRoZSBVUkw6XG4gICAgICAgIGNvbnN0IHsgcXVlcnkgfSA9IHJlc291cmNlXG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KS5tYXAoXG4gICAgICAgICAgICAoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgICBgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWBcbiAgICAgICAgICApXG4gICAgICAgICAgdXJsID0gYCR7dXJsfT8ke3BhcmFtcy5qb2luKCcmJyl9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdXJsXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIHJlc291cmNlLCBkYXRhLCBwYXJhbXMsIGludGVybmFsIH0pIHtcbiAgICAgIHVybCA9IHVybCB8fCB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCA9IG1ldGhvZCB8fCByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlSZXF1ZXN0KHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIGRhdGEsIHBhcmFtcyB9KVxuICAgICAgLy8gRGV0ZWN0IGNoYW5nZSBvZiB0aGUgb3duIHVzZXIsIGFuZCBmZXRjaCBpdCBhZ2FpbiBpZiBpdCB3YXMgY2hhbmdlZC5cbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tVc2VyICYmXG4gICAgICAgIG1ldGhvZCA9PT0gJ3BhdGNoJyAmJlxuICAgICAgICBlcXVhbHMocmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlKHRoaXMudXNlci5pZCwgdGhpcy5hcGkudXNlcnMpKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5mZXRjaFVzZXIoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSxcblxuICAgIHJlcXVlc3QoeyBjYWNoZSwgLi4ub3B0aW9ucyB9KSB7XG4gICAgICAvLyBBbGxvdyBjYWNoaW5nIG9mIGxvYWRlZCBkYXRhIG9uIHR3byBsZXZlbHM6XG4gICAgICAvLyAtICdnbG9iYWwnOiBjYWNoZSBnbG9iYWxseSwgZm9yIHRoZSBlbnRpcmUgYWRtaW4gc2Vzc2lvblxuICAgICAgLy8gLSAnbG9jYWwnOiBjYWNoZSBsb2NhbGx5IHdpdGhpbiB0aGUgY2xvc2VzdCByb3V0ZSBjb21wb25lbnQgdGhhdCBpc1xuICAgICAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UgYW5kIGxvYWRzIGl0cyBvd24gZGF0YS5cbiAgICAgIGNvbnN0IGNhY2hlUGFyZW50ID0gY2FjaGUgJiYge1xuICAgICAgICBnbG9iYWw6IHRoaXMuYXBwU3RhdGUsXG4gICAgICAgIGxvY2FsOiB0aGlzLmRhdGFDb21wb25lbnRcbiAgICAgIH1bY2FjaGVdXG4gICAgICBjb25zdCBsb2FkQ2FjaGUgPSBjYWNoZVBhcmVudD8ubG9hZENhY2hlXG4gICAgICAvLyBCdWlsZCBhIGNhY2hlIGtleSBmcm9tIHRoZSBjb25maWc6XG4gICAgICBjb25zdCBjYWNoZUtleSA9IGxvYWRDYWNoZSAmJiBgJHtcbiAgICAgICAgb3B0aW9ucy5tZXRob2QgfHwgJ2dldCd9ICR7XG4gICAgICAgIG9wdGlvbnMudXJsfSAke1xuICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBhcmFtcyB8fCAnJyl9ICR7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgIH1gXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBsb2FkKG9wdGlvbnMpIHtcbiAgICAgIGRlcHJlY2F0ZSgnbG9hZCgpIGlzIGRlcHJlY2F0ZWQuIFVzZSByZXF1ZXN0KCkgaW5zdGVhZC4nKVxuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChvcHRpb25zKVxuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZSh0cnVlKSxcbiAgICAgICAgICAoKSA9PiByZXNvbHZlKGZhbHNlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgY29uc3QgeyB1cmwsIGZpbGVuYW1lIH0gPSBvcHRpb25zXG4gICAgICAvLyBTZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80OTkxNzA2Ni8xMTYzNzA4XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBhLmhyZWYgPSB1cmxcbiAgICAgIGlmIChmaWxlbmFtZSkge1xuICAgICAgICBhLmRvd25sb2FkID0gZmlsZW5hbWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSlcbiAgICAgIGEuY2xpY2soKVxuICAgICAgYm9keS5yZW1vdmVDaGlsZChhKVxuICAgIH0sXG5cbiAgICBub3RpZnkob3B0aW9ucykge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQuY2xvc2VOb3RpZmljYXRpb25zKClcbiAgICB9LFxuXG4gICAgc2V0dXBTY2hlbWFGaWVsZHMoKSB7XG4gICAgICB0aGlzLnNldHVwTWV0aG9kcygpXG4gICAgICB0aGlzLnNldHVwQ29tcHV0ZWQoKVxuICAgICAgdGhpcy5zZXR1cEV2ZW50cygpXG4gICAgfSxcblxuICAgIHNldHVwTWV0aG9kcygpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLm1ldGhvZHMgfHwge30pKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHRoaXNba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBtZXRob2QgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBDb21wdXRlZCgpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLmNvbXB1dGVkIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IGlzRnVuY3Rpb24odmFsdWUpXG4gICAgICAgICAgPyB7IGdldDogdmFsdWUgfVxuICAgICAgICAgIDogaXNPYmplY3QodmFsdWUpICYmIGlzRnVuY3Rpb24odmFsdWUuZ2V0KVxuICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChhY2Nlc3Nvcikge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIGFjY2Vzc29yKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBjb21wdXRlZCBwcm9wZXJ0eSBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgd2F0Y2gsIGV2ZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmICh3YXRjaCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGlzRnVuY3Rpb24od2F0Y2gpID8gd2F0Y2guY2FsbCh0aGlzKSA6IHdhdGNoXG4gICAgICAgIGlmIChpc09iamVjdChoYW5kbGVycykpIHtcbiAgICAgICAgICAvLyBJbnN0YWxsIHRoZSB3YXRjaCBoYW5kbGVycyBpbiB0aGUgbmV4dCB0aWNrLCBzbyBhbGwgY29tcG9uZW50cyBhcmVcbiAgICAgICAgICAvLyBpbml0aWFsaXplZCBhbmQgd2UgY2FuIGNoZWNrIGFnYWluc3QgdGhlaXIgbmFtZXMuXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgICAgIC8vIEV4cGFuZCBwcm9wZXJ0eSBuYW1lcyB0byAnZGF0YS5wcm9wZXJ0eSc6XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeU5hbWUoa2V5KVxuICAgICAgICAgICAgICAgID8gYGRhdGEuJHtrZXl9YFxuICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgIHRoaXMuJHdhdGNoKGV4cHIsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkRXZlbnQgPSAoa2V5LCBldmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgdGhpcy5vbihoeXBoZW5hdGUoZXZlbnQpLCBjYWxsYmFjaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGV2ZW50IGRlZmluaXRpb246ICR7a2V5fTogJHtjYWxsYmFja31gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzY2FuIHNjaGVtYSBmb3IgYG9uW0EtWl1gLXN0eWxlIGNhbGxiYWNrcyBhbmQgYWRkIHRoZW1cbiAgICAgIC8vIFRPRE86IERlcGVyZWNhdGUgb25lIGZvcm1hdCBvciB0aGUgb3RoZXIsIGluIGZhdm91ciBvZiBvbmx5IG9uZSB3YXkgb2ZcbiAgICAgIC8vIGRvaW5nIHRoaW5ncy4gRGVjaWRlIHdoaWNoIG9uZSB0byByZW1vdmUuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYSkpIHtcbiAgICAgICAgaWYgKC9eb25bQS1aXS8udGVzdChrZXkpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXkuc2xpY2UoMiksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRFdmVudChldmVudCwge1xuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBwYXJlbnQgPSBudWxsXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCBoYXNMaXN0ZW5lcnMgPSB0aGlzLmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGNvbnN0IHBhcmVudEhhc0xpc3RlbmVycyA9IHBhcmVudD8uaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgaWYgKGhhc0xpc3RlbmVycyB8fCBwYXJlbnRIYXNMaXN0ZW5lcnMpIHtcbiAgICAgICAgLy8gVGhlIGVmZmVjdHMgb2Ygc29tZSBldmVudHMgbmVlZCBzb21lIHRpbWUgdG8gcHJvcGFnYXRlIHRocm91Z2ggVnVlLlxuICAgICAgICAvLyBVc2UgJG5leHRUaWNrKCkgdG8gbWFrZSBzdXJlIG91ciBoYW5kbGVycyBzZWUgdGhlc2UgY2hhbmdlcy5cbiAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9jZXNzZWRJdGVtYCBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgY29tcG9uZW50cyB0aGF0XG4gICAgICAgIC8vIGFyZSBuZXdseSByZW5kZXJlZCBkdWUgdG8gZGF0YSBjaGFuZ2VzIGhhdmUgcmVnaXN0ZXJlZCB0aGVtc2VsdmVzLlxuICAgICAgICBpZiAoWydsb2FkJywgJ2NoYW5nZSddLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiAoY29udGV4dCA9IERpdG9Db250ZXh0LmdldCh0aGlzLCBjb250ZXh0KSlcbiAgICAgICAgY29uc3QgcmVzID0gaGFzTGlzdGVuZXJzXG4gICAgICAgICAgPyBhd2FpdCB0aGlzLmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAvLyBEb24ndCBidWJibGUgdG8gcGFyZW50IGlmIGhhbmRsZWQgZXZlbnQgcmV0dXJuZWQgYGZhbHNlYFxuICAgICAgICBpZiAocGFyZW50SGFzTGlzdGVuZXJzICYmIHJlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBwYXJlbnQuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9XG4gIH1cbn1cblxubGV0IHVpZCA9IDBcbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT4gKFxuICAgIGBtdXN0IGJlIG51bWVyaWMgYW5kIG1heSBjb250YWluICR7XG4gICAgICAhZGVjaW1hbHMgfHwgZGVjaW1hbHMgPT09ICcqJyA/ICcnIDogZGVjaW1hbHNcbiAgICB9IGRlY2ltYWwgcG9pbnRzYFxuICApXG59XG4iLCJpbXBvcnQgeyBpc0VtYWlsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGVtYWlsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNFbWFpbCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIGEgdmFsaWQgZW1haWwnXG59XG4iLCJpbXBvcnQgeyBpc0hvc3RuYW1lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGhvc3RuYW1lID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNIb3N0bmFtZSh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBob3N0IG5hbWUnXG59XG4iLCJpbXBvcnQgeyBpc0RvbWFpbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBkb21haW4gPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0RvbWFpbih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBkb21haW4nXG59XG4iLCJpbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaW50ZWdlciA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSW50ZWdlcih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIHdob2xlIG51bWJlcidcbn1cbiIsImV4cG9ydCBjb25zdCBtYXggPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1heCkgPT4gdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBtYXgpIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttYXh9IG9yIGxlc3NgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBtaW4gPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1pbikgPT4gdmFsdWUgPj0gbWluLFxuICBtZXNzYWdlKHZhbHVlLCBtaW4pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttaW59IG9yIG1vcmVgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBwYXNzd29yZCA9IHtcbiAgLy8gQWxsb3cgYW55IHZhbHVlLiBGb3Igbm93IHRoaXMgaXMgb25seSB1c2VkIGFzIGEgbWFya2VyLCB0byBhbGxvdyB0aGVcbiAgLy8gcmVxdWlyZWQgdmFsaWRhdGlvbiB0byBoYW5kbGUgdW5jaGFuZ2VkIHBhc3N3b3JkcyBzZXBhcmF0ZWx5LlxuICB2YWxpZGF0ZTogKCkgPT4gdHJ1ZVxufVxuIiwiZXhwb3J0IGNvbnN0IHJhbmdlID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBbbWluLCBtYXhdKSA9PiB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBbbWluLCBtYXhdKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlIGJldHdlZW4gJHttaW59IGFuZCAke21heH1gXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCByZXF1aXJlZCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgc2V0dGluZ3MsIHsgcGFzc3dvcmQgfSkgPT4gKFxuICAgICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJykgfHxcbiAgICAvLyBQYXNzd29yZCBmaWVsZHMgdXNlIGB1bmRlZmluZWRgIGFzIG9wcG9zZWQgdG8gYG51bGxgIHdoZW4gdGhleSdyZSBzZXRcbiAgICAvLyBidXQgdW5jaGFuZ2VkLCBhbGxvdyB0aGlzIHRvIHBhc3MgdGhyb3VnaDpcbiAgICAocGFzc3dvcmQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgKSxcbiAgbWVzc2FnZTogJ2lzIHJlcXVpcmVkJyxcbiAgbnVsbGlzaDogdHJ1ZVxufVxuIiwiaW1wb3J0IHsgaXNVcmwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgdXJsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNVcmwodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgdmFsaWQgVVJMJ1xufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyB2YWxpZGF0aW9ucyBmcm9tICcuLi92YWxpZGF0aW9ucy9pbmRleC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNUb3VjaGVkOiBmYWxzZSxcbiAgICAgIGlzRGlydHk6IGZhbHNlLFxuICAgICAgaXNWYWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBldmVudHMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNUb3VjaGVkID0gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZSgpXG4gICAgICAgIH0sXG4gICAgICAgIGNoYW5nZTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGUobm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlJywgdGhpcy5kYXRhUGF0aCwgdmFsdWUsIHRoaXMudmFsaWRhdGlvbnMpXG4gICAgICBmb3IgKGNvbnN0IFtydWxlLCBzZXR0aW5nXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB2YWxpZGF0aW9uc1tydWxlXVxuICAgICAgICBpZiAodmFsaWRhdG9yICYmICh2YWxpZGF0b3IubnVsbGlzaCB8fCB2YWx1ZSAhPSBudWxsKSkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsaWRhdGUsIG1lc3NhZ2UgfSA9IHZhbGlkYXRvclxuICAgICAgICAgIGlmICghdmFsaWRhdGUodmFsdWUsIHNldHRpbmcsIHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc0Z1bmN0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlKHZhbHVlLCBzZXR0aW5nLCB0aGlzKVxuICAgICAgICAgICAgICAgIDogbWVzc2FnZVxuICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmlzVmFsaWRhdGVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmlzVmFsaWQgPSBpc1ZhbGlkXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnkoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShmYWxzZSlcbiAgICB9LFxuXG4gICAgbWFya0RpcnR5KCkge1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgLy8gQ2xlYXIgY3VycmVudGx5IGRpc3BsYXllZCBlcnJvcnMgb24gbmV3IGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIGFkZEVycm9yKGVycm9yLCBhZGRMYWJlbCA9IGZhbHNlKSB7XG4gICAgICB0aGlzLmVycm9ycyB8fD0gW11cbiAgICAgIGlmIChhZGRMYWJlbCkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwgfHwgdGhpcy5wbGFjZWhvbGRlciB8fCB0aGlzLm5hbWVcbiAgICAgICAgZXJyb3IgPSBgVGhlICR7bGFiZWx9IGZpZWxkICR7ZXJyb3J9LmBcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgLy8gQ29udmVydCBmcm9tIEFKViBlcnJvcnMgb2JqZWN0cyB0byBhbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlc1xuICAgICAgdGhpcy5lcnJvcnMgPSBbXVxuICAgICAgZm9yIChjb25zdCB7IG1lc3NhZ2UgfSBvZiBlcnJvcnMpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihtZXNzYWdlLCB0cnVlKVxuICAgICAgfVxuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgZ2V0RXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzID8gWy4uLnRoaXMuZXJyb3JzXSA6IG51bGxcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IG51bGxcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFBY2Nlc3NvcihcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIGdldCwgc2V0LCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4pIHtcbiAgLy8gYGtleU9yRGF0YVBhdGhgIGNhbiBiZSBhIHNpbXBsZSBwcm9wZXJ0eSBrZXksXG4gIC8vIG9yIGEgZGF0YS1wYXRoIGludG8gc3ViLXByb3BlcnRpZXMsIGJvdGggaW4gYXJyYXkgb3Igc3RyaW5nIGZvcm1hdC5cbiAgaWYgKGlzU3RyaW5nKGtleU9yRGF0YVBhdGgpICYmIGtleU9yRGF0YVBhdGguaW5jbHVkZXMoJy4nKSkge1xuICAgIGtleU9yRGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIH1cbiAgLy8gVXNlIHRoZSBub3JtYWxpemVkIGRhdGEgcGF0aCBmb3IgdGhlIGhhbmRsaW5nIG92ZXJyaWRlc1xuICBjb25zdCBuYW1lID0gbm9ybWFsaXplRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICAvLyBPbmx5IGRldGVybWluZSBzY2hlbWEgdmFsdWUgaWYgd2UgaGF2ZSBubyBnZXR0ZXIsIG9yIHRoZSBnZXR0ZXJcbiAgICAgIC8vIHdhbnRzIHRvIHJlY2VpdmUgdGhlIHZhbHVlIGFuZCBwcm9jZXNzIGl0IGZ1cnRoZXI6XG4gICAgICBjb25zdCB2YWx1ZSA9ICFnZXQgfHwgZ2V0Lmxlbmd0aCA+IDBcbiAgICAgICAgLy8gTk9URTogQmVjYXVzZSBgc2NoZW1hYCBvYmplY3RzIGFyZSByZXRyaWV2ZWQgZnJvbSBgbWV0YWAgb2JqZWN0LCB0aGV5XG4gICAgICAgIC8vIGRvbid0IHNlZW0gdG8gYmUgcmVhY3RpdmUuIFRvIGFsbG93IGNoYW5nZWQgaW4gYHNjaGVtYWAgdmFsdWVzLFxuICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICA/IHRoaXMub3ZlcnJpZGVzICYmIG5hbWUgaW4gdGhpcy5vdmVycmlkZXNcbiAgICAgICAgICA/IHRoaXMub3ZlcnJpZGVzW25hbWVdXG4gICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBjYWxsYmFjayB9KVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHNldCkge1xuICAgICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzIHx8PSB7fVxuICAgICAgICB0aGlzLiRzZXQodGhpcy5vdmVycmlkZXMsIG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmVBY2Nlc3NvcihuYW1lLCB7IGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQgfSA9IHt9KSB7XG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZGVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnM6XG4gICAgICAgIHZhbHVlID0gaXNGdW5jdGlvbihkZWYpID8gZGVmLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KSA6IGRlZlxuICAgICAgICAvLyBUcmlnZ2VyIHNldHRlciBieSBzZXR0aW5nIHZhbHVlIGFuZCBhY2Nlc3NvciB0byBkZWZhdWx0OlxuICAgICAgICB0aGlzW25hbWVdID0gdmFsdWVcbiAgICAgICAgLy8gTm93IGFjY2VzcyBzdG9yZSBhZ2FpbiwgZm9yIHJlYWN0aXZpdHkgdHJhY2tpbmdcbiAgICAgICAgdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIGdldHRlciB0byBmdXJ0aGVyIGNoYW5nZSBvciBwcm9jZXNzIHRoZSB2YWx1ZVxuICAgICAgLy8gcmV0cmlldmVkIGZyb20gdGhlIHN0b3JlOlxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIHNldHRlciB0byByZXR1cm4gYSBuZXcgdmFsdWUgdG8gc2V0LCBvciBkbyB0aGVcbiAgICAgIC8vIHNldHRpbmcgaXRzZWxmLCBhbmQgdGhlbiByZXR1cm4gYHVuZGVmaW5lZGA6XG4gICAgICBpZiAoIXNldCB8fCAodmFsdWUgPSBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdG9yZShuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImNvbnN0IHVpZE1hcCA9IG5ldyBXZWFrTWFwKClcblxuLy8gR2VuZXJhdGVkIGFuZCByZW1lbWJlcnMgdW5pcXVlIGlkcyBwZXIgcGFzc2VkIG9iamVjdCB1c2luZyBhIHdlYWsgbWFwLlxubGV0IHVpZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBnZXRVaWQob2JqZWN0LCBpdGVtSWQpIHtcbiAgbGV0IGlkID0gdWlkTWFwLmdldChvYmplY3QpXG4gIGlmICghaWQpIHtcbiAgICBpZCA9IGlkID0gaXRlbUlkIHx8IGBAJHsrK3VpZH1gXG4gICAgdWlkTWFwLnNldChvYmplY3QsIGlkKVxuICB9XG4gIHJldHVybiBpZFxufVxuIiwiaW1wb3J0IHsgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzSW50ZWdlciwgYXNBcnJheSwgcGFyc2VEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnXG5cbi8vIFNjaGVtYUdyYXBoIGlzIGEgY2xhc3MgdG8gY29sbGVjdCBzY2hlbWEgZ3JhcGggbWV0YSBpbmZvcm1hdGlvbiBpbiBvcmRlciB0b1xuLy8gcHJvY2VzcyBzb3VyY2VzIGFuZCByZWxhdGlvbnMgZm9yIHRoZSBnaXZlbiB0YXJnZXRzICdzZXJ2ZXInIGFuZCAnY2xpcGJvYXJkJyxcbi8vIGFjY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSAoc3ViR3JhcGhba2V5XSA/Pz0ge30pXG4gICAgfVxuICAgIHN1YkdyYXBoLiRzZXR0aW5ncyA9IHtcbiAgICAgIC4uLmRlZmF1bHRzLCAvLyBTZWUgYGFkZFNvdXJjZShkYXRhUGF0aClgXG4gICAgICAuLi5zdWJHcmFwaC4kc2V0dGluZ3MsXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgLy8gT25seSBzZXQgYHJlbGF0ZWQ6IGZhbHNlYCB0aHJvdWdoIHRoZSBkZWZhdWx0cywgYXMgYHNldFNvdXJjZVJlbGF0ZWQoKWBcbiAgICAvLyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBgYWRkU291cmNlKClgLCBkZXBlbmRpbmcgb24gdGhlIGdyYXBoIHN0cnVjdHVyZS5cbiAgICB0aGlzLnNldChkYXRhUGF0aCwgeyB0eXBlOiAnc291cmNlJywgc2NoZW1hIH0sIHsgcmVsYXRlZDogZmFsc2UgfSlcbiAgfVxuXG4gIHNldFNvdXJjZVJlbGF0ZWQoZGF0YVBhdGgpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgcmVsYXRlZDogdHJ1ZSxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgc2NoZW1hLFxuICAgICAgaW50ZXJuYWw6ICEhcmVsYXRlZERhdGFQYXRoLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChyZWxhdGVkRGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aCkge1xuICAgIHJldHVybiBkYXRhUGF0aFxuICAgICAgPyAodGhpcy5yZWZlcmVuY2VzW2RhdGFQYXRoXSA/Pz0gbmFub2lkKDYpKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBmbGF0dGVuKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSBncmFwaCA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGZvciAoY29uc3QgW2tleSwgeyAkc2V0dGluZ3MsIC4uLnN1YkdyYXBoIH1dIG9mIE9iamVjdC5lbnRyaWVzKGdyYXBoKSkge1xuICAgICAgICBpZiAoJHNldHRpbmdzKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksICRzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbc3ViS2V5LCBzZXR0aW5nc10gb2YgZmxhdHRlbihzdWJHcmFwaCkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2Ake2tleX0vJHtzdWJLZXl9YCwgc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllc1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKHRoaXMuZ3JhcGgpXG4gIH1cblxuICBwcm9jZXNzKHNvdXJjZVNjaGVtYSwgZGF0YSwgeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGNsaXBib2FyZCA9IHRhcmdldCA9PT0gJ2NsaXBib2FyZCdcbiAgICBpZiAoY2xpcGJvYXJkKSB7XG4gICAgICBkZWxldGUgZGF0YVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIHNldHRpbmdzXSBvZiB0aGlzLmZsYXR0ZW4oKSkge1xuICAgICAgY29uc3QgeyB0eXBlLCBzY2hlbWEsIGludGVybmFsLCByZWxhdGVkLCByZWZlcmVuY2UgfSA9IHNldHRpbmdzXG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlID09PSAnc291cmNlJ1xuICAgICAgY29uc3QgcmVsYXRpb24gPSB0eXBlID09PSAncmVsYXRpb24nXG4gICAgICBpZiAoc291cmNlIHx8IHJlbGF0aW9uICYmIGludGVybmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlQXREYXRhUGF0aChkYXRhLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgY29uc3QgcmVtb3ZlSWQgPSBjbGlwYm9hcmQgJiYgc291cmNlICYmICFyZWxhdGVkXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gY2xpcGJvYXJkICYmIChcbiAgICAgICAgICByZWxhdGlvbiAmJiBpbnRlcm5hbCB8fFxuICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhc0FycmF5KHZhbHVlcykuZmxhdCgpKSB7XG4gICAgICAgICAgY29uc3QgaWRLZXkgPSAoXG4gICAgICAgICAgICBzb3VyY2UgJiYgc2NoZW1hLmlkS2V5IHx8XG4gICAgICAgICAgICByZWxhdGlvbiAmJiBzY2hlbWEucmVsYXRlQnkgfHxcbiAgICAgICAgICAgICdpZCdcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWU/LltpZEtleV1cbiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZUlkKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgIH0gaWYgKHJlZmVyZW5jZUlkIHx8IGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgIGlmIChpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICAgIGlkID0gaWQuc2xpY2UoMSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZWZLZXkgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICAvLyBDbGlwYm9hcmQganVzdCBuZWVkcyB0ZW1wb3JhcnkgaWRzIHVuZGVyIHRoZSBhY3R1YWwgYGlkS2V5YC5cbiAgICAgICAgICAgICAgICA/IGlkS2V5XG4gICAgICAgICAgICAgICAgLy8gU2VydmVyIHdhbnRzIE9iamVjdGlvbi1zdHlsZSAnI2lkJyAvICcjcmVmJyBwYWlycy5cbiAgICAgICAgICAgICAgICA6IHNvdXJjZSA/ICcjaWQnIDogJyNyZWYnXG4gICAgICAgICAgICAgIGNvbnN0IHJldlZhbHVlID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyBgQCR7aWR9YFxuICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleSByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAvLyBhY2Nyb3NzIHRoZSBmdWxsIGdyYXBoLlxuICAgICAgICAgICAgICAgIDogcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICA/IGAke3JlZmVyZW5jZX0tJHtpZH1gXG4gICAgICAgICAgICAgICAgICA6IGlkIC8vIEEgdGVtcG9yYXJ5IGlkIHdpdGhvdXQgYSByZWxhdGVkLCBqdXN0IHByZXNlcnZlIGl0LlxuICAgICAgICAgICAgICB2YWx1ZVtyZWZLZXldID0gcmV2VmFsdWVcbiAgICAgICAgICAgICAgaWYgKHJlZktleSAhPT0gaWRLZXkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRVaWQgfSBmcm9tICcuL3VpZC5qcydcbmltcG9ydCB7IFNjaGVtYUdyYXBoIH0gZnJvbSAnLi9TY2hlbWFHcmFwaC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIGNsb25lLCBjYW1lbGl6ZSwgaXNNb2R1bGVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNvbXBvbmVudHMgPSB7fVxuY29uc3QgdW5rbm93blR5cGVSZXBvcnRlZCA9IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KSB7XG4gIHR5cGVDb21wb25lbnRzW3R5cGVdID0gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29tcG9uZW50KHR5cGUsIGFsbG93TnVsbCA9IGZhbHNlKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVDb21wb25lbnRzW3R5cGVdIHx8IG51bGxcbiAgaWYgKCFjb21wb25lbnQgJiYgIWFsbG93TnVsbCAmJiAhdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSkge1xuICAgIC8vIFJlcG9ydCBlYWNoIG1pc3NpbmcgdHlwZSBvbmx5IG9uY2UsIHRvIGF2b2lkIGZsb29kaW5nIHRoZSBjb25zb2xlOlxuICAgIHVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0gPSB0cnVlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERpdG8gY29tcG9uZW50IHR5cGU6ICcke3R5cGV9J2ApXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaFNjaGVtYShzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHNjaGVtYXMgPSBbXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhzY2hlbWE/LnRhYnMgfHwge30pLFxuICAgIHNjaGVtYVxuICBdXG4gIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICBpZiAoc2NoZW1hKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEpXG4gICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgc2NoZW1hID0+IHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKVxuICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBjb21wb25lbnQgOiB1bmRlZmluZWRcbiAgKSB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyB0cnVlIDogdW5kZWZpbmVkXG4gICkgPT09IHRydWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5U2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+ICFjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gZmFsc2UgOiB1bmRlZmluZWRcbiAgKSAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWEoc2NoZW1hLCB1bndyYXBNb2R1bGUgPSBmYWxzZSkge1xuICBpZiAoaXNGdW5jdGlvbihzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gc2NoZW1hKClcbiAgfVxuICBpZiAoaXNQcm9taXNlKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBhd2FpdCBzY2hlbWFcbiAgfVxuICBpZiAoaXNNb2R1bGUoc2NoZW1hKSkge1xuICAgIC8vIENvcHkgdG8gY29udmVydCBmcm9tIG1vZHVsZSB0byBvYmplY3Q6XG4gICAgc2NoZW1hID0geyAuLi5zY2hlbWEgfVxuICAgIC8vIFVud3JhcCBkZWZhdWx0IG9yIG5hbWVkIHNjaGVtYVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgKHVud3JhcE1vZHVsZSB8fCBzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGtleXNbMF1cbiAgICAgICAgc2NoZW1hID0gc2NoZW1hW25hbWVdXG4gICAgICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hcyhcbiAgdW5yZXNvbHZlZFNjaGVtYXMsXG4gIHJlc29sdmVJdGVtID0gcmVzb2x2ZVNjaGVtYVxuKSB7XG4gIGxldCBzY2hlbWFzID0gaXNGdW5jdGlvbih1bnJlc29sdmVkU2NoZW1hcylcbiAgICA/IHVucmVzb2x2ZWRTY2hlbWFzKClcbiAgICA6IHVucmVzb2x2ZWRTY2hlbWFzXG4gIHNjaGVtYXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYXMsIGZhbHNlKVxuICBpZiAoaXNBcnJheShzY2hlbWFzKSkge1xuICAgIC8vIFRyYW5zbGF0ZSBhbiBhcnJheSBvZiBkeW5hbWljIGltcG9ydCwgZWFjaCBpbXBvcnRpbmcgb25lIG5hbWVkIHNjaGVtYVxuICAgIC8vIG1vZHVsZSB0byBhbiBvYmplY3Qgd2l0aCBuYW1lZCBlbnRyaWVzLlxuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoYXdhaXQgUHJvbWlzZS5hbGwoc2NoZW1hcy5tYXAoXG4gICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZUl0ZW0oaXRlbSwgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIFtzY2hlbWEubmFtZSwgc2NoZW1hXVxuICAgICAgfVxuICAgICkpKVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNjaGVtYXMpKSB7XG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhhd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhzY2hlbWFzKS5tYXAoXG4gICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZUl0ZW0oaXRlbSwgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgIH1cbiAgICApKSlcbiAgfVxuICByZXR1cm4gc2NoZW1hc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVBhbmVscyhzY2hlbWEpIHtcbiAgY29uc3QgeyBwYW5lbHMgfSA9IHNjaGVtYVxuICBpZiAoc2NoZW1hLnBhbmVscykge1xuICAgIHNjaGVtYS5wYW5lbHMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhwYW5lbHMpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcykge1xuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgYXdhaXQgcmVzb2x2ZVBhbmVscyhzY2hlbWEpXG4gIGlmIChpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSkge1xuICAgIGF3YWl0IHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEsIG5hbWUsIGNoaWxkcmVuLCAwKVxuICB9IGVsc2Uge1xuICAgIC8vIEEgbXVsdGktY29tcG9uZW50IHZpZXcsIHN0YXJ0IGF0IGxldmVsIDFcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4sIDEpXG4gIH1cbiAgcm91dGVzLnB1c2goe1xuICAgIHBhdGg6IGAvJHtzY2hlbWEucGF0aH1gLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbXBvbmVudCxcbiAgICBtZXRhOiB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzQ29tcG9uZW50KGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gIHNjaGVtYS5sZXZlbCA9IGxldmVsXG4gIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICByZXR1cm4gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ucHJvY2Vzc1NjaGVtYT8uKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSkge1xuICAvLyBVc2VkIGZvciB2aWV3IGFuZCBzb3VyY2Ugc2NoZW1hcywgc2VlIFNvdXJjZU1peGluXG4gIHNjaGVtYS5uYW1lID0gbmFtZVxuICBzY2hlbWEucGF0aCA9IHNjaGVtYS5wYXRoIHx8IGFwaS5ub3JtYWxpemVQYXRoKG5hbWUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbCkge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGZvckVhY2hTY2hlbWFDb21wb25lbnQoc2NoZW1hLCAoY29tcG9uZW50LCBuYW1lKSA9PiB7XG4gICAgcHJvbWlzZXMucHVzaChwcm9jZXNzQ29tcG9uZW50KGFwaSwgY29tcG9uZW50LCBuYW1lLCByb3V0ZXMsIGxldmVsKSlcbiAgfSlcbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKSB7XG4gIC8vIEZpcnN0IHJlc29sdmUgdGhlIGZvcm1zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBiYWNrIG9uIHRoZSBzY2hlbWEuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzIH0gPSBzY2hlbWFcbiAgaWYgKGZvcm1zKSB7XG4gICAgZm9ybXMgPSBzY2hlbWEuZm9ybXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhmb3JtcywgcmVzb2x2ZUZvcm0pXG4gIH0gZWxzZSBpZiAoZm9ybSkge1xuICAgIGZvcm0gPSBzY2hlbWEuZm9ybSA9IGF3YWl0IHJlc29sdmVGb3JtKGZvcm0pXG4gIH0gZWxzZSBpZiAoY29tcG9uZW50cykge1xuICAgIC8vIE5PVEU6IFByb2Nlc3NpbmcgZm9ybXMgaW4gY29tcHV0ZWQgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSBpdFxuICAgIC8vIG9ubHkgY2FuIGJlIGNvbXB1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggYWN0dWFsIGRhdGEuXG4gICAgaWYgKGlzT2JqZWN0KGNvbXBvbmVudHMpKSB7XG4gICAgICBmb3JtID0geyBjb21wb25lbnRzIH1cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9IC8vIE9ubHkgdXNlZCBmb3IgcHJvY2VzcyBsb29wIGJlbG93LlxuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIGZvciAoY29uc3QgZm9ybSBvZiBPYmplY3QudmFsdWVzKGZvcm1zKSkge1xuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgZm9ybSwgY2hpbGRyZW4sIGxldmVsICsgMSlcbiAgfVxuICByZXR1cm4gY2hpbGRyZW5cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGb3JtKGZvcm0pIHtcbiAgZm9ybSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoZm9ybSwgdHJ1ZSlcbiAgaWYgKGZvcm0pIHtcbiAgICBhd2FpdCByZXNvbHZlUGFuZWxzKGZvcm0pXG4gIH1cbiAgcmV0dXJuIGZvcm1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgLy8gSWYgdGhlIHNjaGVtYSBoYXMgYSB0eXBlLCBpdCBpcyBhIHNpbmdsZS1jb21wb25lbnQgdmlldy5cbiAgcmV0dXJuICEhc2NoZW1hLnR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgYm90aCBzaW5nbGUgZm9ybSBhbmQgbXVsdGlwbGUgZm9ybXMgbm90YXRpb24sIGFzIHdlbGwgYXMgaW5saW5lZFxuICAvLyBjb21wb25lbnRzLlxuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hKSAmJiAhIShcbiAgICBzY2hlbWEuZm9ybSB8fFxuICAgIHNjaGVtYS5mb3JtcyB8fFxuICAgIHNjaGVtYS5jb21wb25lbnRzXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB7IHZpZXcgfSA9IHNjaGVtYVxuICBjb25zdCB2aWV3U2NoZW1hID0gdmlldyAmJiBjb250ZXh0LnZpZXdzW3ZpZXddXG4gIHJldHVybiB2aWV3U2NoZW1hXG4gICAgPyBoYXNGb3JtU2NoZW1hKHZpZXdTY2hlbWEpXG4gICAgICA/IHZpZXdTY2hlbWFcbiAgICAgIC8vIE5PVEU6IFZpZXdzIGNhbiBoYXZlIHRhYnMsIGluIHdoaWNoIGNhc2UgdGhlIHZpZXcgY29tcG9uZW50IGlzIG5lc3RlZFxuICAgICAgLy8gaW4gb25lIG9mIHRoZSB0YWJzLCBnbyBmaW5kIGl0LlxuICAgICAgOiBmb3JFYWNoU2NoZW1hKHZpZXdTY2hlbWEsIHNjaGVtYSA9PiB7XG4gICAgICAgIGNvbnN0IHZpZXdDb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50cz8uW3ZpZXddXG4gICAgICAgIGlmIChoYXNGb3JtU2NoZW1hKHZpZXdDb21wb25lbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHZpZXdDb21wb25lbnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICByZXR1cm4gdmlld1xuICAgID8gdmlldy5sZXZlbCA9PT0gMFxuICAgICAgPyBgLyR7dmlldy5wYXRofWAgLy8gQSBzaW5nbGUtY29tcG9uZW50IHZpZXdcbiAgICAgIDogYC8ke3ZpZXcucGF0aH0vJHt2aWV3LnBhdGh9YCAvLyBBIG11bHRpLWNvbXBvbmVudCB2aWV3XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIG1vZGlmeUZvcm0pIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlldykge1xuICAgIHNjaGVtYSA9IHZpZXdcbiAgfSBlbHNlIGlmIChzY2hlbWEudmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB2aWV3OiAnJHtzY2hlbWEudmlld30nYClcbiAgfVxuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzLCBjb21wYWN0IH0gPSBzY2hlbWFcbiAgaWYgKCFmb3JtICYmICFmb3Jtcykge1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAvLyBDb252ZXJ0IGlubGluZWQgY29tcG9uZW50cyB0byBmb3Jtcywgc3VwcG9ydGluZyBgY29tcGFjdGAgc2V0dGluZy5cbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMsIGNvbXBhY3QgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBgZm9ybXNgLCBgZm9ybWAgb3IgYGNvbXBvbmVudHNgLCByZXR1cm4gYW5kIGVtcHR5IGBmb3Jtc2Agb2JqZWN0LlxuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZvcm1zKS5tYXAoKFt0eXBlLCBmb3JtXSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBgc2NoZW1hLmNvbXBvbmVudHNgIGNhbGxiYWNrcyB0byBjcmVhdGUgY29tcG9uZW50cyBvbiB0aGUgZmx5LlxuICAgICAgaWYgKGlzRnVuY3Rpb24oZm9ybS5jb21wb25lbnRzKSkge1xuICAgICAgICBmb3JtID0ge1xuICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgY29tcG9uZW50czogZm9ybS5jb21wb25lbnRzKGNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbdHlwZSwgbW9kaWZ5Rm9ybT8uKGZvcm0pID8/IGZvcm1dXG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pIHtcbiAgcmV0dXJuIGZvcm1zW2l0ZW0/LnR5cGVdIHx8IGZvcm1zLmRlZmF1bHQgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KSB7XG4gIHJldHVybiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyhnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQpLCBpdGVtKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWwoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEubGFiZWwgIT09IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhY3Qoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5jb21wYWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEuaW5saW5lZCB8fCBzY2hlbWEuY29tcG9uZW50cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoXG4gICAgc2NoZW1hLm5lc3RlZCB8fFxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHROZXN0ZWQgPT09IHRydWVcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkT21pdFBhZGRpbmcoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lm9taXRQYWRkaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMgYm90aCBvbiBzY2hlbWEgYW5kIG9uIGNvbXBvbmVudCBsZXZlbC5cbiAgLy8gTk9URTogQXQgdGhlIHRpbWUgb2YgY3JlYXRpb24sIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQsIChlLmcuIGlmXG4gIC8vIGVudHJpZXMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBuZXN0ZWQgZm9ybXMsIHRoZSBwYXJlbnQgZm9ybSBpc24ndCBtb3VudGVkKSBzb1xuICAvLyB3ZSBjYW4ndCB1c2UgYGRhdGFQYXRoYCB0byBnZXQgdG8gY29tcG9uZW50cywgYW5kIHRoZSBgZGVmYXVsdFZhbHVlYCBmcm9tXG4gIC8vIHRoZXJlLiBUaGF0J3Mgd2h5IGBkZWZhdWx0VmFsdWVgIGlzIGRlZmluZWQgc3RhdGljYWxseSBpbiB0aGUgY29tcG9uZW50czpcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gc2NoZW1hLmRlZmF1bHRcbiAgY29uc3QgdmFsdWUgPSBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgID8gZGVmYXVsdFZhbHVlXG4gICAgOiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0VmFsdWVcbiAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUpXG4gICAgPyB2YWx1ZShzY2hlbWEpXG4gICAgOiBjbG9uZSh2YWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpIHtcbiAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG4gIHJldHVybiAhIShcbiAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgdHlwZU9wdGlvbnM/Lmlnbm9yZU1pc3NpbmdWYWx1ZT8uKHNjaGVtYSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWxzKHNjaGVtYSkge1xuICBjb25zdCBjaGVja0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+XG4gICAgT2JqZWN0LnZhbHVlcyhjb21wb25lbnRzIHx8IHt9KS5zb21lKGhhc0xhYmVsKVxuXG4gIHJldHVybiAoXG4gICAgY2hlY2tDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKSB8fFxuICAgIE9iamVjdC52YWx1ZXMoc2NoZW1hLnRhYnMgfHwge30pLnNvbWUoY2hlY2tDb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0cyhzY2hlbWEsIGRhdGEgPSB7fSwgY29tcG9uZW50KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgcm9vdERhdGE6IGRhdGEgfVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lKSA9PiB7XG4gICAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNldHMgdXAgYSBkYXRhIG9iamVjdCB0aGF0IGhhcyBrZXlzIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbFxuICAvLyBmb3JtIGZpZWxkcywgc28gdGhleSBjYW4gYmUgY29ycmVjdGx5IHdhdGNoZWQgZm9yIGNoYW5nZXMuXG4gIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsIGRhdGEsIG51bGwsIG51bGwsIHByb2Nlc3NCZWZvcmUsIG51bGwsIG9wdGlvbnNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50ID0gbnVsbCxcbiAgcm9vdERhdGEgPSBjb21wb25lbnQ/LnJvb3REYXRhXG59ID0ge30pIHtcbiAgY29uc3QgeyBjb21wdXRlIH0gPSBzY2hlbWFcbiAgaWYgKGNvbXB1dGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGUoRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgLy8gT3ZlcnJpZGUgdmFsdWUgdG8gcHJldmVudCBlbmRsZXNzIHJlY3Vyc2lvbiB0aHJvdWdoIGNhbGxpbmcgdGhlXG4gICAgICAvLyBnZXR0ZXIgZm9yIGB0aGlzLnZhbHVlYCBpbiBgRGl0b0NvbnRleHRgOlxuICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGFcbiAgICB9KSlcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVXNlIGAkc2V0KClgIGRpcmVjdGx5IGluc3RlYWQgb2YgYHRoaXMudmFsdWUgPSDigKZgIHRvIHVwZGF0ZSB0aGVcbiAgICAgIC8vIHZhbHVlIHdpdGhvdXQgY2FsbGluZyBwYXJzZSgpOlxuICAgICAgVnVlLnNldChkYXRhLCBuYW1lLCB2YWx1ZSlcbiAgICB9XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIHN0aWxsIG1pc3NpbmcgYWZ0ZXIgY29tcHV0ZSwgc2V0IHRoZSBkZWZhdWx0IGZvciBpdDpcbiAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICBWdWUuc2V0KGRhdGEsIG5hbWUsIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpKVxuICB9XG4gIC8vIE5vdyBhY2Nlc3MgdGhlIHZhbHVlLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgcmVhY3Rpdml0eSBhbmQgbmVlZHMgdG9cbiAgLy8gaGFwcGVuIGFmdGVyIGFsbCBwcmlvciBtYW5pcHVsYXRpb24gdGhyb3VnaCBgJHNldCgpYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHNjaGVtYU9ubHksIC8vIHdoZXRoZXIgdG8gb25seSBpbmNsdWRlIGRhdGEgY292ZXJlZCBieSB0aGUgc2NoZW1hLCBvciBhbGwgZGF0YVxuICB0YXJnZXRcbn0gPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHNjaGVtYU9ubHksIHRhcmdldCwgcm9vdERhdGE6IGRhdGEgfVxuICBjb25zdCBwcm9jZXNzZWREYXRhID0gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgZGF0YSwgb3B0aW9ucylcbiAgY29uc3QgZ3JhcGggPSBuZXcgU2NoZW1hR3JhcGgoKVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBvcHRpb25zKVxuICAgIC8vIFRoZSBzY2hlbWEgZXhwZWN0cyB0aGUgYHdyYXBQcmltaXRpdmVzYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgcHJlc2VudCBvblxuICAgIC8vIHRoZSBkYXRhIHRoYXQgaXQgaXMgYXBwbGllZCBvbiwgc28gd2FycCBiZWZvcmUgYW5kIHVud3JhcCBhZnRlci5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIG9yZGVyS2V5LCBpZEtleSA9ICdpZCcgfSA9IHNjaGVtYVxuICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGVudHJ5ID0+ICh7XG4gICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogZW50cnlcbiAgICAgICAgfSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbHdheXMgc2hhbGxvdy1jbG9uZSBhcnJheSB2YWx1ZXM6XG4gICAgICAgIHZhbHVlID0gWy4uLnZhbHVlXVxuICAgICAgfVxuICAgICAgaWYgKG9yZGVyS2V5ICYmIHRhcmdldCA9PT0gJ2NsaXBib2FyZCcpIHtcbiAgICAgICAgLy8gU29ydCB0aGUgZGF0YSBiYWNrIGludG8gdGhlIG5hdHVyYWwgc2VxdWVuY2UgYXMgZGVmaW5lZCBieSB0aGVpciBpZHMsXG4gICAgICAgIC8vIHNvIGNvcHktcGFzdGluZyBiZXR3ZWVuIHNlcnZlcnMgKGUuZy4gbmVzdGVkIGZvbnQtY3V0cyBvbiBMaW5ldG8pXG4gICAgICAgIC8vIG5hdHVyYWxseSBnZXRzIG1hcHBlZCB0byB0aGUgc2FtZSBlbnRyaWVzIGluIHRoZSBncmFwaC5cbiAgICAgICAgdmFsdWUuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkMSA9IGE/LltpZEtleV1cbiAgICAgICAgICBjb25zdCBpZDIgPSBiPy5baWRLZXldXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlkMSA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQxKSA/IDFcbiAgICAgICAgICAgIDogaWQyID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDIpID8gLTFcbiAgICAgICAgICAgIDogaWQxIC0gaWQyXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgZXhjbHVkZSwgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG5cbiAgICAvLyBOT1RFOiBXZSBkb24ndCBjYWNoZSB0aGlzIGNvbnRleHQsIHNpbmNlIGB2YWx1ZWAgaXMgY2hhbmdpbmcuXG4gICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+IERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgIHZhbHVlLFxuICAgICAgbmFtZSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhLFxuICAgICAgLy8gUGFzcyB0aGUgYWxyZWFkeSBwcm9jZXNzZWQgZGF0YSB0byBgcHJvY2VzcygpYCwgc28gaXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICAvLyB0aHJvdWdoIGBwcm9jZXNzZWRJdGVtYCBmcm9tIHRoZXJlLlxuICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgIH0pXG5cbiAgICAvLyBGaXJzdCB1bndyYXAgdGhlIHdyYXBwZWQgcHJpbWl0aXZlcyBhZ2FpbiwgdG8gYnJpbmcgdGhlIGRhdGEgYmFjayBpbnRvXG4gICAgLy8gaXRzIG5hdGl2ZSBmb3JtLiBTZSBgcHJvY2Vzc0JlZm9yZSgpYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSB1c2VyJ3MgYHByb2Nlc3MoKWAgY2FsbGJhY2sgZmlyc3QsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoKSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgICAvLyBTdXBwb3J0IGZ1bmN0aW9ucyBuZXh0IHRvIGJvb2xlYW5zIGZvciBgc2NoZW1hLmV4Y2x1ZGVgOlxuICAgICAgZXhjbHVkZSA9PT0gdHJ1ZSB8fFxuICAgICAgaXNGdW5jdGlvbihleGNsdWRlKSAmJiBleGNsdWRlKGdldENvbnRleHQoKSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzZWREYXRhW25hbWVdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVhY2ggY29tcG9uZW50IHR5cGUgY2FuIHByb3ZpZGUgaXRzIG93biBzdGF0aWMgYHByb2Nlc3NWYWx1ZSgpYCBtZXRob2RcbiAgICAgIC8vIHRvIGNvbnZlcnQgdGhlIGRhdGEgZm9yIHN0b3JhZ2UuXG4gICAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSB0eXBlT3B0aW9ucz8ucHJvY2Vzc1ZhbHVlXG4gICAgICBpZiAocHJvY2Vzc1ZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaClcbiAgICAgIH1cbiAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIGRhdGFQYXRoLFxuICAgIHByb2Nlc3NlZERhdGEsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgb3B0aW9uc1xuICApXG5cbiAgcmV0dXJuIGdyYXBoLnByb2Nlc3Moc291cmNlU2NoZW1hLCBwcm9jZXNzZWREYXRhLCBvcHRpb25zKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURhdGEoXG4gIHNjaGVtYSxcbiAgZGF0YSxcbiAgZGF0YVBhdGgsXG4gIHByb2Nlc3NlZERhdGEsXG4gIHByb2Nlc3NCZWZvcmUsXG4gIHByb2Nlc3NBZnRlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IHByb2Nlc3NDb21wb25lbnRzID0gY29tcG9uZW50cyA9PiB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoZGF0YVBhdGgsIHRva2VuKSA9PiBkYXRhUGF0aCAhPSBudWxsXG4gICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbilcbiAgICAgIDogbnVsbFxuXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKCFpc05lc3RlZChjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIHVubmVzdGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhLFxuICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RGF0YVBhdGggPSBnZXREYXRhUGF0aChkYXRhUGF0aCwgbmFtZSlcblxuICAgICAgICAgIGNvbnN0IHByb2Nlc3NJdGVtID0gKGl0ZW0sIGluZGV4ID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVBhdGggPSBpbmRleCAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgOiBjb21wb25lbnREYXRhUGF0aFxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IERpdG9Db250ZXh0LmdldChvcHRpb25zLmNvbXBvbmVudCwge1xuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGNvbnN0IGdldEZvcm1zID0gKFxuICAgICAgICAgICAgICBnZXRUeXBlT3B0aW9ucyhjb21wb25lbnRTY2hlbWEpPy5nZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcgfHxcbiAgICAgICAgICAgICAgIGdldEZvcm1TY2hlbWFzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1zKGNvbXBvbmVudFNjaGVtYSwgY29udGV4dClcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSlcbiAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW0gPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyBjbG9uZUl0ZW0oY29tcG9uZW50U2NoZW1hLCBpdGVtLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZEl0ZW0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJdGVtcyB3aXRob3V0IGZvcm1zIHN0aWxsIGdldCBmdWxseSAoYnV0IHNoYWxsb3dseSkgY2xvbmVkLlxuICAgICAgICAgICAgICAvLyBUT0RPOiBGaW5kIG91dCBvZiB0aGlzIGlzIGFjdHVhbGx5IG5lZWRlZCAvIHVzZWQgYXQgYWxsP1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcm9jZXNzQmVmb3JlPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsIGRhdGEsIG5hbWUsIGNvbXBvbmVudERhdGFQYXRoLCBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCB2YWx1ZSA9IHByb2Nlc3NlZERhdGEgPyBwcm9jZXNzZWREYXRhW25hbWVdIDogZGF0YVtuYW1lXVxuICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIGhhc0Zvcm1TY2hlbWEoY29tcG9uZW50U2NoZW1hKSkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIG5lc3RlZCBmb3JtIGl0ZW1zLlxuICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIC8vIE9wdGltaXphdGlvbjogTm8gbmVlZCB0byBjb2xsZWN0IHZhbHVlcyBpZiB3ZSdyZSBub3QgY2xvbmluZyFcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICAgICAgOiB2YWx1ZS5mb3JFYWNoKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzSXRlbSh2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9jZXNzZWREYXRhKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzQWZ0ZXI/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm9jZXNzQ29tcG9uZW50cyhzY2hlbWEuY29tcG9uZW50cylcbiAgaWYgKHNjaGVtYS50YWJzKSB7XG4gICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykpIHtcbiAgICAgIHByb2Nlc3NDb21wb25lbnRzKHRhYi5jb21wb25lbnRzKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldEFsbFBhbmVsU2NoZW1hcyhzY2hlbWEsIGRhdGFQYXRoKSkge1xuICAgIHByb2Nlc3NDb21wb25lbnRzKHBhbmVsLnNjaGVtYS5jb21wb25lbnRzKVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZERhdGEgfHwgZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRTY2hlbWFzKGRlc2NyaXB0aW9ucywgZGVmYXVsdHMpIHtcbiAgY29uc3QgdG9PYmplY3QgPSAoYXJyYXksIHRvU2NoZW1hKSA9PiB7XG4gICAgcmV0dXJuIGFycmF5Lmxlbmd0aCA+IDBcbiAgICAgID8gYXJyYXkucmVkdWNlKChvYmplY3QsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRvU2NoZW1hKHZhbHVlKVxuICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgb2JqZWN0W3NjaGVtYS5uYW1lXSA9IHNjaGVtYSAmJiBkZWZhdWx0c1xuICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgOiBzY2hlbWFcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0XG4gICAgICB9LCB7fSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIGlzQXJyYXkoZGVzY3JpcHRpb25zKVxuICAgID8gdG9PYmplY3QoZGVzY3JpcHRpb25zLCB2YWx1ZSA9PiAoXG4gICAgICBpc09iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IHtcbiAgICAgICAgbmFtZTogY2FtZWxpemUodmFsdWUsIGZhbHNlKVxuICAgICAgfVxuICAgICkpXG4gICAgOiBpc09iamVjdChkZXNjcmlwdGlvbnMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpLFxuICAgICAgICAoW25hbWUsIHZhbHVlXSkgPT5cbiAgICAgICAgICBpc09iamVjdCh2YWx1ZSkgPyB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBpc1N0cmluZyh2YWx1ZSkgPyB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgbGFiZWw6IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpPy5vcHRpb25zID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpPy5nZXRTb3VyY2VUeXBlPy4oXG4gICAgZ2V0VHlwZShzY2hlbWFPclR5cGUpXG4gICkgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWEoc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gIHJldHVybiBzY2hlbWFcbiAgICA/IHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAvLyBUaGlzIGlzIHVzZWQgZS5nLiBmb3IgJGZpbHRlcnMgcGFuZWxzLlxuICAgICAgZGF0YVBhdGg6IHNjaGVtYS5uYW1lXG4gICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGRhdGFQYXRoLFxuICAgICAgdGFiQ29tcG9uZW50XG4gICAgfVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYXMsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQsIHBhbmVscyA9IFtdKSB7XG4gIGlmIChzY2hlbWFzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsU2NoZW1hKFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBrZXkpLFxuICAgICAgICB0YWJDb21wb25lbnRcbiAgICAgIClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbHMucHVzaChwYW5lbClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhbmVsc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsUGFuZWxTY2hlbWFzKFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoLFxuICBzY2hlbWFDb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWwgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhUGF0aCxcbiAgICBzY2hlbWFDb21wb25lbnRcbiAgKVxuICBjb25zdCBwYW5lbHMgPSBwYW5lbCA/IFtnZXRQYW5lbFNjaGVtYShwYW5lbCwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCldIDogW11cbiAgLy8gQWxsb3cgZWFjaCBjb21wb25lbnQgdG8gcHJvdmlkZSBpdHMgb3duIHNldCBvZiBwYW5lbHMsIGluXG4gIC8vIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IG9uZSAoZS5nLiAkZmlsdGVyKTpcbiAgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYS5wYW5lbHMsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQsIHBhbmVscylcbiAgcmV0dXJuIHBhbmVsc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdvYmplY3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xpc3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdsaXN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICBjb25zdCBpZCA9IGl0ZW1bc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gIHJldHVybiBpZCAhPSBudWxsID8gU3RyaW5nKGlkKSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgLy8gVHJ5IHRvIHVzZSB0aGUgaXRlbSBpZCBhcyB0aGUgdWlkLCBmYWxsaW5nIGJhY2sgb24gYXV0by1nZW5lcmF0ZWQgaWRzLCBidXRcbiAgLy8gZWl0aGVyIHdheSwgcGFzcyB0aHJvdWdoIGBnZXRVaWQoKWAgc28gdGhhdCB0aGUgaWRzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlXG4gIC8vIGl0ZW0gdGhyb3VnaCBhIHdlYWsgbWFwLCBhcyB0aGUgaWRzIGNhbiBiZSBmaWx0ZXJlZCBvdXQgaW4gYHByb2Nlc3NEYXRhKClgXG4gIC8vIHdoaWxlIHRoZSBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSB1aWRzIGFzIGtleSBhcmUgc3RpbGwgdmlzaWJsZS5cbiAgcmV0dXJuIGdldFVpZChpdGVtLCBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSlcbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBWYWxpZGF0aW9uTWl4aW4gZnJvbSAnLi9WYWxpZGF0aW9uTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgY29tcHV0ZVZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbSwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRpb25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIE5PVEU6IFdoaWxlIGBkYXRhUGF0aGAgcG9pbnRzIHRvIHRoZSBhY3R1YWwgYHZhbHVlYCwgYGRhdGFgIHJlcHJlc2VudHNcbiAgICAvLyB0aGUgYGl0ZW1gIGluIHdoaWNoIHRoZSBgdmFsdWVgIGlzIGNvbnRhaW5lZCwgdW5kZXIgdGhlIGtleSBgbmFtZWAuXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZWRWYWx1ZTogbnVsbCxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudHlwZVxuICAgIH0sXG5cbiAgICBjb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVHlwZUNvbXBvbmVudCh0aGlzLnNjaGVtYS5jb21wb25lbnQpXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShcbiAgICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgeyBjb21wb25lbnQ6IHRoaXMgfVxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHsgZm9ybWF0IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICAvLyBgc2NoZW1hLmZvcm1hdGAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgcmV0dXJuIGZvcm1hdFxuICAgICAgICAgID8gZm9ybWF0LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgcGFyc2UgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEucGFyc2VgIGlzIG9ubHkgZXZlciBjYWxsZWQgaW4gdGhlIGxpZmUtY3ljbGVcbiAgICAgICAgLy8gb2YgdGhlIGNvbXBvbmVudCBhbmQgdGh1cyBpdCdzIG9rIHRvIGJpbmQgaXQgdG8gYHRoaXNgXG4gICAgICAgIHRoaXMucGFyc2VkVmFsdWUgPSBwYXJzZVxuICAgICAgICAgID8gcGFyc2UuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIHRoaXMubmFtZSwgdGhpcy5wYXJzZWRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIC8vIFdlIGNhbiBvbmx5IGdldCB0aGUgcHJvY2Vzc2VkIGl0ZW1zIHRocm91Z2ggdGhlIHNjaGVtYUNvbXBvbmVudCwgYnV0XG4gICAgICAvLyB0aGF0J3Mgbm90IG5lY2Vzc2FyaWx5IHRoZSBpdGVtIHJlcHJlc2VudGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAgICAgLy8gU29sdXRpb246IEZpbmQgdGhlIHJlbGF0aXZlIHBhdGggYW5kIHRoZSBwcm9jZXNzZWQgc3ViLWl0ZW0gZnJvbSB0aGVyZTpcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gZ2V0SXRlbShcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50LnByb2Nlc3NlZEl0ZW0sXG4gICAgICAgIC8vIEdldCB0aGUgZGF0YVBhdGggcmVsYXRpdmUgdG8gdGhlIHNjaGVtYUNvbXBvbmVudCdzIGRhdGE6XG4gICAgICAgIHRoaXMuZGF0YVBhdGguc2xpY2Uoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCksXG4gICAgICAgIHRoaXMubmVzdGVkXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsOiBnZXRTY2hlbWFBY2Nlc3NvcignbGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcobGFiZWwpXG4gICAgICAgICAgPyBsYWJlbFxuICAgICAgICAgIDogbGFiZWwgIT09IGZhbHNlICYmIHRoaXMuJG9wdGlvbnMuZ2VuZXJhdGVMYWJlbFxuICAgICAgICAgICAgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXVxuICAgIH0pLFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZ1xuICAgIGV4Y2x1ZGU6IGdldFNjaGVtYUFjY2Vzc29yKCdleGNsdWRlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICByZXF1aXJlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlcXVpcmVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIHRvIGEgc3ViLWNsYXNzIGNvbXBvbmVudCB1c2VkIGZvciBhbGwgaW5wdXQgY29tcG9uZW50cz9cbiAgICByZWFkb25seTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlYWRvbmx5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBhdXRvZm9jdXM6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvZm9jdXMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRvIGJlIHVzZWQgZm9yIHNlbGVjdHMgYW5kIGlucHV0cyBvbmx5P1xuICAgIGNsZWFyYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NsZWFyYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdwbGFjZWhvbGRlcicsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgYXV0b2NvbXBsZXRlOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2NvbXBsZXRlJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChuYXRpdmVGaWVsZCkge1xuICAgICAgICBhdHRyaWJ1dGVzLm5hbWUgPSB0aGlzLm5hbWVcbiAgICAgICAgaWYgKHRoaXMubGFiZWwpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnRpdGxlID0gdGhpcy5sYWJlbFxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZXMucmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5XG4gICAgICAgIGF0dHJpYnV0ZXMuYXV0b2ZvY3VzID0gdGhpcy5hdXRvZm9jdXNcbiAgICAgICAgaWYgKHRleHRGaWVsZCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyXG4gICAgICAgICAgYXR0cmlidXRlcy5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICBsaXN0ZW5lcnMoKSB7XG4gICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmdldExpc3RlbmVycygpXG4gICAgICBjb25zdCB7IGV2ZW50cyA9IHt9IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICAvLyBSZWdpc3RlciBjYWxsYmFja3MgZm9yIGFsbCBwcm92aWRlcyBub24tcmVjb2duaXplZCBldmVudHMsXG4gICAgICAgIC8vIGFzc3VtaW5nIHRoZXkgYXJlIG5hdGl2ZSBldmVudHMuXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgT2JqZWN0LmtleXMoZXZlbnRzKSkge1xuICAgICAgICAgIGxpc3RlbmVyc1tldmVudF0gfHw9ICgpID0+IHRoaXMuZW1pdEV2ZW50KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdGVuZXJzXG4gICAgfSxcblxuICAgIHZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7IC4uLnRoaXMuZ2V0VmFsaWRhdGlvbnMoKSB9XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBkZWZhdWx0IHJ1bGVzIGFuZCBhZGQgYW55IG5ldyBvbmVzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEucnVsZXMgfHwge30pKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHZhbGlkYXRpb25zW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uc1trZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBSZXNvdXJjZU1peGluLCB1c2VkIGJ5IGxpc3RzLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHNob3dDbGVhckJ1dHRvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLnZhbHVlICE9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFByZXZlbnQgdW5uZXN0ZWQgdHlwZSBjb21wb25lbnRzIGZyb20gb3ZlcnJpZGluZyBwYXJlbnQgZGF0YSBwYXRoc1xuICAgICAgaWYgKHRoaXMubmVzdGVkKSB7XG4gICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlckNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgICAgIC8vIEluc3RhbGwgLyByZW1vdmUgdGhlIGZpZWxkIGV2ZW50cyB0byB3YXRjaCBvZiBjaGFuZ2VzIGFuZCBoYW5kbGVcbiAgICAgICAgLy8gdmFsaWRhdGlvbiBmbGFncy4gYGV2ZW50c2AgaXMgcHJvdmlkZWQgYnkgYFZhbGlkYXRpb25NaXhpbi5ldmVudHMoKWBcbiAgICAgICAgdGhpc1thZGQgPyAnb24nIDogJ29mZiddKHRoaXMuZXZlbnRzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgaW5wdXQ6IHRoaXMub25JbnB1dCxcbiAgICAgICAgY2hhbmdlOiB0aGlzLm9uQ2hhbmdlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgY29uc3QgW2VsZW1lbnRdID0gYXNBcnJheSh0aGlzLiRyZWZzLmVsZW1lbnQpXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgZWxlbWVudC5mb2N1cygpXG4gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgZGlzYWJsZWQsIGBmb2N1cygpYCB3aWxsIGxpa2VseSBub3QgaGF2ZSB0aGVcbiAgICAgICAgICAvLyBkZXNpcmVkIGVmZmVjdC4gVXNlIGBzY3JvbGxJbnRvVmlldygpYCBpZiBhdmFpbGFibGU6XG4gICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIChlbGVtZW50LiRlbCB8fCBlbGVtZW50KS5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgLy8gQWxzbyBmb2N1cyB0aGlzIGNvbXBvbmVudCdzIHNjaGVtYSBhbmQgcGFuZWwgaW4gY2FzZSBpdCdzIGEgdGFiLlxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuZm9jdXMoKVxuICAgICAgdGhpcy50YWJDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgY2xlYXIoKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgfSxcblxuICAgIG9uRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlXG4gICAgICB0aGlzLmVtaXRFdmVudCgnZm9jdXMnKVxuICAgIH0sXG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2JsdXInKVxuICAgIH0sXG5cbiAgICBvbklucHV0KCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywge1xuICAgICAgICBjb250ZXh0OiB0aGlzLnBhcnNlZFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHsgdmFsdWU6IHRoaXMucGFyc2VkVmFsdWUgfVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgLy8gUGFzcyBgc2NoZW1hQ29tcG9uZW50YCBhcyBwYXJlbnQsIHNvIGNoYW5nZSBldmVudHMgY2FuIHByb3BhZ2F0ZSB1cC5cbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNQcm9taXNlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvTWl4aW4gZnJvbSAnLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG5jb25zdCBEaXRvQ29tcG9uZW50ID0gVnVlLmV4dGVuZCh7XG4gIC8vIE1ha2Ugc3VyZSB0aGF0IHJlZ2lzdGVyZWQgY29tcG9uZW50cyBhcmUgcHJlc2VudCBpbiBhbGwgRGl0b0NvbXBvbmVudC5cbiAgY29tcG9uZW50cyxcbiAgbWl4aW5zOiBbRGl0b01peGluXSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VHlwZUNvbXBvbmVudCxcblxuICAgIHJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBtaXhpbnMgPSBbXSkge1xuICAgICAgLy8gQSBoZWxwZXIgbWV0aG9kIHRvIGFsbG93IHRocmVlIHRoaW5nczpcbiAgICAgIC8vIC0gV2hlbiB1c2VkIGluIGEgY29tcHV0ZWQgcHJvcGVydHksIGl0IHJlbW92ZXMgdGhlIG5lZWQgdG8gaGF2ZSB0b1xuICAgICAgLy8gICBsb2FkIGNvbXBvbmVudHMgd2l0aCBhc3luYyBmdW5jdGlvbnMgYGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KC4uLilgLlxuICAgICAgLy8gICBpbnN0ZWFkLCB0aGV5IGNhbiBiZSBkaXJlY3RseSBwcm92aWRlZDogYGNvbXBvbmVudDogaW1wb3J0KC4uLilgXG4gICAgICAvLyAtIFRoZSBwcm9wZXJ0aWVzIHBhc3NlZCB0byBzdWNoIGNvbXBvbmVudHMgZG9uJ3QgbmVlZCB0byBiZSBkZWZpbmVkLlxuICAgICAgLy8gICBJbnN0ZWFkLCB0aGUgcHJvdmlkZWQgbWl4aW5zIGFyZSBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZC5cbiAgICAgIC8vIC0gVGhlIGNvbXBvbmVudCBjYW4gdXNlIGFsbCBpbnRlcm5hbCBjb21wb25lbnRzIGtub3duIHRvIERpdG8uanMgQWRtaW4uXG4gICAgICByZXR1cm4gY29tcG9uZW50XG4gICAgICAgID8gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIC8vIEF0IGZpcnN0LCByZXNvbHZlIGNvbXBvbmVudCBpcyBpdCBpcyBsb2FkZWQgYXN5bmNocm9ub3VzbHkuXG4gICAgICAgICAgbGV0IGNvbXAgPSBpc0Z1bmN0aW9uKGNvbXBvbmVudCkgPyBhd2FpdCBjb21wb25lbnQoKVxuICAgICAgICAgICAgOiBpc1Byb21pc2UoY29tcG9uZW50KSA/IGF3YWl0IGNvbXBvbmVudFxuICAgICAgICAgICAgOiBjb21wb25lbnRcbiAgICAgICAgICBjb21wID0gY29tcD8uZGVmYXVsdCB8fCBjb21wXG4gICAgICAgICAgY29tcC5taXhpbnMgPSBtaXhpbnNcbiAgICAgICAgICBjb21wLmNvbXBvbmVudHMgPSBjb21wb25lbnRzXG4gICAgICAgICAgcmV0dXJuIGNvbXBcbiAgICAgICAgfVxuICAgICAgICA6IGNvbXBvbmVudFxuICAgIH0sXG5cbiAgICByZXNvbHZlRGl0b0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBbRGl0b01peGluXSlcbiAgICB9LFxuXG4gICAgcmVzb2x2ZVR5cGVDb21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ29tcG9uZW50KGNvbXBvbmVudCwgW0RpdG9NaXhpbiwgVHlwZU1peGluXSlcbiAgICB9XG4gIH1cbn0pXG5cbkRpdG9Db21wb25lbnQuY29tcG9uZW50ID0gZnVuY3Rpb24obmFtZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH1cbiAgICBjb25zdCBjdG9yID0gdGhpcy5leHRlbmQob3B0aW9ucylcbiAgICBjb21wb25lbnRzW25hbWVdID0gY3RvclxuICAgIHJldHVybiBjdG9yXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudHNbbmFtZV0gfHwgVnVlLmNvbXBvbmVudChuYW1lKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnRcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Vc2VyIHtcbiAgaGFzUm9sZSguLi5yb2xlcykge1xuICAgIGlmICh0aGlzLnJvbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICAgICAgaWYgKHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtYUNvbXBvbmVudHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWFpblNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHNbMF1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBgRGl0b1NjaGVtYS5jcmVhdGVkKCkvZGVzdHJveWVkKClgIG9uIGl0c1xuICAgIC8vICRwYXJlbnQsIGlmIHRoZSBwYXJlbnQgdXNlcyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICBfcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQoc2NoZW1hQ29tcG9uZW50LCBhZGQpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgaWYgKGFkZCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnB1c2goc2NoZW1hQ29tcG9uZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5zcGxpY2Uoc2NoZW1hQ29tcG9uZW50cy5pbmRleE9mKHNjaGVtYUNvbXBvbmVudCksIDEpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi9TY2hlbWFQYXJlbnRNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIHsgZXJyb3JzIH0pID0+XG4gICAgICAgICAgZXJyb3JzICYmIHJlc3VsdCA/IHJlc3VsdC5jb25jYXQoZXJyb3JzKSA6IGVycm9ycyxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSkpXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52ZXJpZnlBbGwobWF0Y2gpKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5yZXNldFZhbGlkYXRpb24oKSlcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5jbGVhckVycm9ycygpKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChcbiAgICAgICAgaXQgPT4gaXQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cylcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRDb21tb25QcmVmaXggfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlVXBkYXRlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBiZWZvcmVSb3V0ZUxlYXZlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZWxvYWQ6IGZhbHNlLFxuICAgICAgLy8gRWFjaCByb3V0ZS1jb21wb25lbnQgZGVmaW5lcyBhIHN0b3JlIHRoYXQgZ2V0cyBwYXNzZWQgb24gdG8gaXRzXG4gICAgICAvLyBjaGlsZCBjb21wb25lbnRzLCBzbyB0aGV5IGNhbiBzdG9yZSB2YWx1ZXMgaW4gdGhlbSB0aGF0IGxpdmUgYmV5b25kXG4gICAgICAvLyB0aGVpciBsaWZlLWN5Y2xlLiBTZWU6IERpdG9QYW5lLCBTb3VyY2VNaXhpblxuICAgICAgc3RvcmU6IHt9LFxuICAgICAgbG9hZENhY2hlOiB7fSAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgcm91dGVDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJvdXRlUmVjb3JkKCkge1xuICAgICAgLy8gVE9ETzogQ2FuIHRoaXMuJHJvdXRlLmN1cnJlbnRSb3V0ZSBiZSBvZiB1c2Ugc29tZXdoZXJlIGhlcmU/XG4gICAgICAvLyBSZXRyaWV2ZSB0aGUgcm91dGUtcmVjb3JkIHRvIHdoaWNoIHRoaXMgY29tcG9uZW50IHdhcyBtYXBwZWQgdG86XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTMzOCNpc3N1ZWNvbW1lbnQtMjk2MzgxNDU5XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUubWF0Y2hlZFt0aGlzLiR2bm9kZS5kYXRhLnJvdXRlclZpZXdEZXB0aF1cbiAgICB9LFxuXG4gICAgaXNMYXN0Um91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJvdXRlciBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV1cbiAgICB9LFxuXG4gICAgaXNMYXN0VW5uZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlIHRoYXRcbiAgICAgIC8vIG5lZWRzIGl0cyBvd24gcm91dGVyLXZpZXcgKD0gaXMgbm90IG5lc3RlZCkuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICBmb3IgKGxldCBpID0gbWF0Y2hlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBtYXRjaGVkW2ldXG4gICAgICAgIGlmICghcmVjb3JkLm1ldGEubmVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IHJlY29yZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNOZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEubmVzdGVkXG4gICAgfSxcblxuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZD8ubWV0YVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Um91dGVQYXRoKHRoaXMucm91dGVSZWNvcmQucGF0aClcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYigpIHtcbiAgICAgIGNvbnN0IHsgYnJlYWRjcnVtYiB9ID0gdGhpcy5zY2hlbWEgfHwge31cbiAgICAgIHJldHVybiBicmVhZGNydW1iIHx8IGAke3RoaXMuYnJlYWRjcnVtYlByZWZpeH0gJHt0aGlzLmxhYmVsfWBcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH0sXG5cbiAgICBwYXJhbSgpIHtcbiAgICAgIC8vIFdvcmthcm91bmQgZm9yIHZ1ZS1yb3V0ZXIgbm90IGJlaW5nIGFibGUgdG8gbWFwIG11bHRpcGxlIHVybCBwYXJhbWV0ZXJzXG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gbXVsdGlwbGUgY29tcG9uZW50cywgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXJhbXNbdGhpcy5tZXRhPy5wYXJhbV0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGUsIHNlZSBEaXRvRm9ybVxuICAgIGRvZXNNdXRhdGUoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBLZWVwIGEgc2hhcmVkIHN0YWNrIG9mIHJvb3QgY29tcG9uZW50cyBmb3IgRGl0b1RyYWlsIHRvIHVzZSB0byByZW5kZXJcbiAgICAvLyBsYWJlbHMuIENhbid0IHJlbHkgb24gJHJvdXRlLm1hdGNoZWRbaV0uaW5zdGFuY2VzLmRlZmF1bHQgdW5mb3J0dW5hdGVseSxcbiAgICAvLyBhcyBpbnN0YW5jZXMgYXJlbid0IGltbWVkaWF0ZWx5IHJlYWR5LCBhbmQgaW5zdGFuY2VzIGlzIG5vdCByZWFjdGl2ZS5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5wdXNoKHRoaXMpXG4gIH0sXG5cbiAgZGVzdHJveWVkKCkge1xuICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgcm91dGVDb21wb25lbnRzLnNwbGljZShyb3V0ZUNvbXBvbmVudHMuaW5kZXhPZih0aGlzKSwgMSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpIHtcbiAgICAgIGxldCBvayA9IHRydWVcbiAgICAgIGNvbnN0IGlzQ2xvc2luZyA9IChcbiAgICAgICAgLy8gT25seSBoYW5kbGUgdGhpcyByb3V0ZSBjaGFuZ2UgaWYgdGhlIGZvcm0gaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZVxuICAgICAgICAvLyBgZnJvbWAgcm91dGUsIGJ1dCBpbmNsdWRlIHBhcmVudCBmb3JtcyBvZiBjbG9zaW5nIG5lc3RlZCBmb3JtcyBhcyBhc1xuICAgICAgICAvLyB3ZWxsLCBieSBtYXRjaGluZyB0aGUgdGhlIHN0YXJ0IG9mIGZyb20vdG8gcGF0aCBhZ2FpbnN0IGB0aGlzLnBhdGhgOlxuICAgICAgICBmcm9tLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgICF0by5wYXRoLnN0YXJ0c1dpdGgodGhpcy5wYXRoKSAmJlxuICAgICAgICAvLyBFeGNsdWRlIGhhc2ggY2hhbmdlcyBvbmx5ICg9IHRhYiBjaGFuZ2VzKTpcbiAgICAgICAgZnJvbS5wYXRoICE9PSB0by5wYXRoICYmIChcbiAgICAgICAgICB0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSB8fFxuICAgICAgICAgIC8vIERlY2lkZSBpZiB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhIG5ldyBuZXN0ZWQgZm9ybSwgb3IgY2xvc2luZyAvXG4gICAgICAgICAgLy8gcmVwbGFjaW5nIGFuIGFscmVhZHkgb3BlbiBvbmUgYnkgY29tcGFyaW5nIHBhdGggbGVuZ3Rocy5cbiAgICAgICAgICAvLyBUaGUgY2FzZSBvZiBgPWAgbWF0Y2hlcyB0aGUgcmVwbGFjaW5nIG9mIGFuIGFscmVhZHkgb3BlbiBvbmUuXG4gICAgICAgICAgdG8ucGF0aC5sZW5ndGggPD0gZnJvbS5wYXRoLmxlbmd0aFxuICAgICAgICApXG4gICAgICApXG4gICAgICBpZiAoaXNDbG9zaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmRvZXNNdXRhdGUpIHtcbiAgICAgICAgICAvLyBGb3IgYWN0aXZlIGRpcmVjdGx5IG11dGF0aW5nIChuZXN0ZWQpIGZvcm1zIHRoYXQgd2VyZSBub3QgdmFsaWRhdGVkXG4gICAgICAgICAgLy8geWV0LCB2YWxpZGF0ZSB0aGVtIG9uY2UuIElmIHRoZSB1c2VyIHRoZW4gc3RpbGwgd2FudHMgdG8gbGVhdmVcbiAgICAgICAgICAvLyB0aGVtLCB0aGV5IGNhbiBjbGljayBjbG9zZSAvIG5hdmlnYXRlIGF3YXkgYWdhaW4uXG4gICAgICAgICAgb2sgPSAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRhdGVkIHx8XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlQWxsKClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhlIGZvcm0gZG9lc24ndCBkaXJlY3RseSBtdXRhdGUgZGF0YS4gSWYgaXQgaXMgZGlydHksIGFzayBpZiB1c2VyXG4gICAgICAgICAgLy8gd2FudHMgdG8gcGVyc2lzdCBkYXRhIGZpcnN0LlxuICAgICAgICAgIGlmICh0aGlzLmlzRGlydHkpIHtcbiAgICAgICAgICAgIG9rID0gd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgICAgIGBZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIERvIHlvdSByZWFsbHkgd2FudCB0byAke1xuICAgICAgICAgICAgICAgIHRoaXMudmVyYnMuY2FuY2VsXG4gICAgICAgICAgICAgIH0/YFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV4dChvaylcbiAgICB9LFxuXG4gICAgZ2V0Um91dGVQYXRoKHRlbXBsYXRlUGF0aCkge1xuICAgICAgLy8gTWFwcyB0aGUgcm91dGUncyBhY3R1YWwgcGF0aCB0byB0aGUgbWF0Y2hlZCByb3V0ZXMgYnkgY291bnRpbmcgaXRzXG4gICAgICAvLyBwYXJ0cyBzZXBhcmF0ZWQgYnkgJy8nLCBzcGxpdHRpbmcgdGhlIHBhdGggaW50byB0aGUgbWFwcGVkIHBhcnRzXG4gICAgICAvLyBjb250YWluaW5nIGFjdHVhbCBwYXJhbWV0ZXJzLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGhcbiAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgLnNsaWNlKDAsIHRlbXBsYXRlUGF0aC5zcGxpdCgnLycpLmxlbmd0aClcbiAgICAgICAgLmpvaW4oJy8nKVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiXG4vLyBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4vLyBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbi8vIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuLy8gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG5yb3V0ZXItdmlldyhcbiAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gIDprZXk9XCJuYW1lXCJcbilcbi5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICB2LWVsc2UtaWY9XCJzaG91bGRSZW5kZXIodmlld1NjaGVtYSlcIlxuKVxuICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbiAgLy8gaW5zdGVhZCwgdG8gbmVzdCBmdXJ0aGVyIHJvdXRlIGNvbXBvbmVudHMuXG4gIC8vIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuICAvLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4gIClcbiAgICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IHsgc29tZVNjaGVtYUNvbXBvbmVudCwgaXNTaW5nbGVDb21wb25lbnRWaWV3IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZpZXcnLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgLy8gUmVkaXJlY3QgJHNvdXJjZUNvbXBvbmVudCBhbmQgJHJlc291cmNlQ29tcG9uZW50IHRvIHRoZSBtYWluIGNvbXBvbmVudDpcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5zb3VyY2VDb21wb25lbnQgfHwgbnVsbCxcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5yZXNvdXJjZUNvbXBvbmVudCB8fCBudWxsXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmlldzogdHJ1ZSxcbiAgICAgIC8vIFVwZGF0ZWQgZnJvbSBMb2FkaW5nTWl4aW4gdGhyb3VnaCBgc2V0TG9hZGluZyhpc0xvYWRpbmcpYDpcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAvLyBOT1RFOiBEYXRhIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIHZpZXdzIGJlY2F1c2UgdGhlIHJvdXRlciByZWN5Y2xlcyB0aGVcbiAgICAgIC8vIERpdG9WaWV3IGNvbXBvbmVudC5cbiAgICAgIGRhdGE6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5zY2hlbWFcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50VmlldygpIHtcbiAgICAgIHJldHVybiBpc1NpbmdsZUNvbXBvbmVudFZpZXcodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIG1haW5Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgIFtzY2hlbWEubmFtZV06IHtcbiAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICBsYWJlbDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiBzY2hlbWFcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHNvbWVTY2hlbWFDb21wb25lbnQoXG4gICAgICAgIHRoaXMudmlld1NjaGVtYSxcbiAgICAgICAgY29tcG9uZW50ID0+IGhhc1Jlc291cmNlKGNvbXBvbmVudClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIC8vIFNlZSBpZiB0aGUgcm91dGUgY2hhbmdlcyBjb21wbGV0ZWx5LCBhbmQgY2xlYXIgdGhlIGRhdGEgaWYgaXQgZG9lcy5cbiAgICAgIGlmICh0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSkge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGF0YSA9IHt9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIC8vIExpc3RzIGluc2lkZSBzaW5nbGUtY29tcG9uZW50IHZpZXdzIHVzZSB0aGUgdmlldydzIHBhdGggZm9yIHN1Yi1wYXRoczpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHRoaXMucGF0aFxuICAgICAgICA6IGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWknXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbUhhbmRsZXJzOiBbXVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIGZvciAoY29uc3QgeyByZW1vdmUgfSBvZiB0aGlzLmRvbUhhbmRsZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgICB0aGlzLmRvbUhhbmRsZXJzID0gW11cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZG9tT24oZWxlbWVudCwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkRXZlbnRzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpc09iamVjdCh0eXBlKSA/IHR5cGUgOiB7IFt0eXBlXTogaGFuZGxlciB9XG4gICAgICApXG4gICAgICB0aGlzLmRvbUhhbmRsZXJzLnB1c2gocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1yb290XG4gIG1vZGFscy1jb250YWluZXJcbiAgbm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gIClcbiAgZGl0by1tZW51XG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGRpdG8taGVhZGVyKFxuICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICB2LWlmPVwidXNlclwiXG4gICAgICApXG4gICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgKVxuICAgICAgICBzcGFuIExvZ2luXG4gICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXJvb3RcbiAgICBtb2RhbHMtY29udGFpbmVyXG4gICAgbm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICAgIHBvc2l0aW9uPVwidG9wIHJpZ2h0XCJcbiAgICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gICAgKVxuICAgIGRpdG8tbWVudVxuICAgIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgICAgZGl0by1oZWFkZXIoXG4gICAgICAgIDpzcGlubmVyPVwib3B0aW9ucy5zcGlubmVyXCJcbiAgICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICApXG4gICAgICAgIGRpdG8tYWNjb3VudChcbiAgICAgICAgICB2LWlmPVwidXNlclwiXG4gICAgICAgIClcbiAgICAgICAgYS5kaXRvLWxvZ2luKFxuICAgICAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgICAgIClcbiAgICAgICAgICBzcGFuIExvZ2luXG4gICAgICByb3V0ZXItdmlld1xuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9zdHlsZS5zYXNzJ1xuXG4gIC5kaXRvLXJvb3RcbiAgICBoZWlnaHQ6IDEwMCVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcGFnZVxuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgLy8gVGhlIHJvb3QtbGV2ZWwgdmlld3MgYW5kIGZvcm1zIG1heSBoYXZlIGEgYC5kaXRvLXNjaGVtYS1oZWFkZXJgIHRoYXRcbiAgICAgIC8vIHNob3VsZCBhcHBlYXIgbGF5ZXJlZCBvdmVyIGAuZGl0by1tZW51YCwgd2hpbGUgaGF2aW5nIGBvdmVybGF5OiBoaWRkZW5gXG4gICAgICAvLyBzZXQgYnkgYC5kaXRvLXNjcm9sbC1wYXJlbnRgIHRvIGRlbGVnYXRlIHNjcm9sbGluZyB0byBgLmRpdG8tc2Nyb2xsYC5cbiAgICAgIC8vIEluIG9yZGVyIHRvIG5vdCBoYXZlIHRoZSBoZWFkZXIgY2xpcHBlZCwgYWRqdXN0IHRoZSB0b3AgaGVyZTpcbiAgICAgID4gLmRpdG8tZm9ybSxcbiAgICAgID4gLmRpdG8tdmlld1xuICAgICAgICBtYXJnaW4tdG9wOiAtJG1lbnUtaGVpZ2h0XG4gICAgICAgIHBhZGRpbmctdG9wOiAkbWVudS1oZWlnaHRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBhc0FycmF5LCBzdHJpcFRhZ3MgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvVXNlciBmcm9tICcuLi9EaXRvVXNlci5qcydcbmltcG9ydCBEaXRvVmlldyBmcm9tICcuLi9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBwcm9jZXNzVmlldywgcmVzb2x2ZVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1yb290Jywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHZpZXdzOiAoKSA9PiB0aGlzLnJlc29sdmVkVmlld3NcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB1bnJlc29sdmVkVmlld3M6IHsgdHlwZTogW09iamVjdCwgRnVuY3Rpb24sIFByb21pc2VdLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG9wdGlvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZXNvbHZlZFZpZXdzOiB7fSxcbiAgICAgIGFsbG93TG9naW46IGZhbHNlLFxuICAgICAgbG9hZGluZ0NvdW50OiAwXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLm5vdGlmaWNhdGlvbnNcbiAgICB9LFxuXG4gICAgaXNMb2FkaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGluZ0NvdW50ID4gMFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYXBwU3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZSB8fCAnRGl0by5qcyBBZG1pbidcbiAgICAvLyBXaXRoIGhvdC1yZWxvYWRpbmcsIGl0IGxvb2tzIGxpa2UgZGVzdHJveWVkIGhvb2tzIGFyZW4ndCBhbHdheXMgY2FsbGVkXG4gICAgLy8gZm9yIHJvdXRlIGNvbXBvbmVudHMgc28gcmVzZXQgdGhlIGFycmF5IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzID0gW11cbiAgfSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIC8vIENsZWFyIHRoZSBsYWJlbCBtYXJrZWQgYXMgYWN0aXZlIG9uIGFsbCBtb3VzZSBhbmQga2V5Ym9hcmQgZXZlbnRzLCBleGNlcHRcbiAgICAvLyB0aGUgb25lcyB0aGF0IERpdG9MYWJlbCBpdHNlbGYgaW50ZXJjZXB0cy5cbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjbGljazogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZGl0by1sYWJlbCcpKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IGZhbHNlXG4gICAgICBpZiAoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0IH0gPSB7fSkge1xuICAgICAgdGl0bGUgfHw9IHtcbiAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICBlcnJvcjogJ0Vycm9yJyxcbiAgICAgICAgaW5mbzogJ0luZm9ybWF0aW9uJyxcbiAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICB9W3R5cGVdIHx8ICdOb3RpZmljYXRpb24nXG4gICAgICB0ZXh0ID0gYDxwPiR7XG4gICAgICAgIGFzQXJyYXkodGV4dCkuam9pbignPC9wPiA8cD4nKVxuICAgICAgfTwvcD5gLnJlcGxhY2UoL1xcbnxcXHJcXG58XFxyL2csICc8YnI+JylcbiAgICAgIGNvbnN0IGxvZyA9IHtcbiAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICAgICAgaW5mbzogJ2xvZycsXG4gICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICB9W3R5cGVdIHx8ICdlcnJvcidcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlW2xvZ10oc3RyaXBUYWdzKHRleHQpKVxuICAgICAgY29uc3QgeyBub3RpZmljYXRpb25zID0gdHJ1ZSB9ID0gdGhpcy5hcGlcbiAgICAgIGlmIChub3RpZmljYXRpb25zKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBkaXNwbGF5LWR1cmF0aW9uIGZvciB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGl0cyBjb250ZW50XG4gICAgICAgIC8vIGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgYGR1cmF0aW9uRmFjdG9yYCBjb25maWd1cmF0aW9uLiBJdCBkZWZpbmVzIHRoZVxuICAgICAgICAvLyBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIG11bHRpcGxpZWQgd2l0aCB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnNcbiAgICAgICAgLy8gZGlzcGxheWVkIGluIHRoZSBub3RpZmljYXRpb24sIHBsdXMgNDAgKDQwICsgdGl0bGUgKyBtZXNzYWdlKTpcbiAgICAgICAgY29uc3QgeyBkdXJhdGlvbkZhY3RvciA9IDIwIH0gPSBub3RpZmljYXRpb25zXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKDQwICsgdGV4dC5sZW5ndGggKyB0aXRsZS5sZW5ndGgpICogZHVyYXRpb25GYWN0b3JcbiAgICAgICAgdGhpcy4kbm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQsIGR1cmF0aW9uIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9LFxuXG4gICAgcmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5sb2FkaW5nQ291bnQgKz0gaXNMb2FkaW5nID8gMSA6IC0xXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ2luKCkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICAgICAgY29uc3Qge1xuICAgICAgICBhZGRpdGlvbmFsQ29tcG9uZW50cyxcbiAgICAgICAgcmVkaXJlY3RBZnRlckxvZ2luXG4gICAgICB9ID0gdGhpcy5vcHRpb25zLmxvZ2luIHx8IHt9XG4gICAgICBjb25zdCBsb2dpbkRhdGEgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxDb21wb25lbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGxvZ2luOiB7IHR5cGU6ICdzdWJtaXQnIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChsb2dpbkRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ2luLFxuICAgICAgICAgICAgZGF0YTogbG9naW5EYXRhLFxuICAgICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChyZWRpcmVjdEFmdGVyTG9naW4pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RBZnRlckxvZ2luKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgICAgdGV4dDogZXJyb3IgfHwgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLnJlc3BvbnNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2luKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZUhvbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSgnLycpXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ291dCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ291dCxcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zZXRVc2VyKG51bGwpXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVXNlcigpIHtcbiAgICAgIGxldCB1c2VyID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMuc2Vzc2lvbixcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICB1c2VyID0gcmVzcG9uc2UuZGF0YS51c2VyIHx8IG51bGxcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBlcnJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VXNlcih1c2VyKVxuICAgICAgcmV0dXJuIHVzZXJcbiAgICB9LFxuXG4gICAgc2V0VXNlcih1c2VyKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnVzZXIgPSAoXG4gICAgICAgIHVzZXIgJiZcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHVzZXIsIERpdG9Vc2VyLnByb3RvdHlwZSlcbiAgICAgIClcbiAgICAgIC8vIENsZWFyIHJlc29sdmVkIHZpZXdzIHdoZW4gdXNlciBpcyBsb2dnZWQgb3V0LlxuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IHt9XG4gICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW5zdXJlVXNlcigpIHtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlVmlld3MoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IFtdXG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb2x2ZWRWaWV3cykpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzKSlcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5uYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICBoMSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICB1bC5kaXRvLXNjcm9sbFxuICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHZpZXcpXCJcbiAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgICAgKSB7eyBnZXRMYWJlbCh2aWV3KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8tbWVudS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgICBoMSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICAgIHVsLmRpdG8tc2Nyb2xsXG4gICAgICBsaSh2LWZvcj1cInZpZXcgaW4gdmlld3NcIilcbiAgICAgICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICAgIDp0bz1cImAvJHt2aWV3LnBhdGh9YFwiXG4gICAgICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbWVudVxuICAgIGZsZXg6IGluaXRpYWxcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB1bFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZVxuICAgIGEsXG4gICAgaDFcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgaDFcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdFxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLWxpbmtcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgLmRpdG8tbGlua1xuICAgICY6Zm9jdXM6bm90KDphY3RpdmUpOm5vdCguZGl0by1hY3RpdmUpXG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLW1lbnUnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG48ZGl2IGNsYXNzPVwidi1zcGlubmVyXCIgdi1zaG93PVwibG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UxXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkxXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UyXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkyXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UzXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkzXVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiIsIjx0ZW1wbGF0ZT5cbjxkaXYgY2xhc3M9XCJ2LXNwaW5uZXJcIiB2LXNob3c9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTFcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTFdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTJcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTJdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTNcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTNdXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXG4gIG5hbWU6ICdQdWxzZUxvYWRlcicsXG5cbiAgcHJvcHM6IHtcbiAgICBsb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHsgXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIzVkYzU5NidcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxNXB4J1xuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMnB4J1xuICAgIH0sXG4gICAgcmFkaXVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTAwJSdcbiAgICB9XG4gIH0sXG4gIGRhdGEgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzcGlubmVyU3R5bGU6IHtcbiAgICAgIFx0YmFja2dyb3VuZENvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgXHR3aWR0aDogdGhpcy5zaXplLFxuICAgICAgICBoZWlnaHQ6IHRoaXMuc2l6ZSxcbiAgICAgIFx0bWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgIFx0Ym9yZGVyUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgIGFuaW1hdGlvbk5hbWU6ICd2LXB1bHNlU3RyZXRjaERlbGF5JyxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICcwLjc1cycsXG4gICAgICAgIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAnaW5maW5pdGUnLFxuICAgICAgICBhbmltYXRpb25UaW1pbmdGdW5jdGlvbjogJ2N1YmljLWJlemllciguMiwuNjgsLjE4LDEuMDgpJyxcbiAgICAgICAgYW5pbWF0aW9uRmlsbE1vZGU6ICdib3RoJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTE6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjEycydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkyOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4yNHMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mzoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMzZzJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuLyoudi1zcGlubmVyXG57XG4gICAgbWFyZ2luOiAxMDBweCBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbiovXG5cbkAtd2Via2l0LWtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5XG57XG4gICAgMCUsXG4gICAgODAlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAxOyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA0NSVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAwLjc7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheVxue1xuICAgIDAlLFxuICAgIDgwJVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMTsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNDUlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMC43OyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxufVxuPC9zdHlsZT4iLCJcbm5hdi5kaXRvLWhlYWRlclxuICAuZGl0by10cmFpbFxuICAgIHVsXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoY29tcG9uZW50LCBpbmRleCkgaW4gdHJhaWxcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5kZXggPT09IHRyYWlsLmxlbmd0aCAtIDFcIilcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgIHJvdXRlci1saW5rLmRpdG8tYnJlYWRjcnVtYih2LWVsc2UsIDp0bz1cImNvbXBvbmVudC5wYXRoXCIpXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgIHNwaW5uZXIuZGl0by1zcGlubmVyKHYtaWY9XCJpc0xvYWRpbmdcIilcbiAgc2xvdFxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIHVsXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiKVxuICAgICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgICAgcm91dGVyLWxpbmsuZGl0by1icmVhZGNydW1iKHYtZWxzZSwgOnRvPVwiY29tcG9uZW50LnBhdGhcIilcbiAgICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgc3Bpbm5lci5kaXRvLXNwaW5uZXIodi1pZj1cImlzTG9hZGluZ1wiKVxuICAgIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1oZWFkZXJcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYmxhY2tcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgIHotaW5kZXg6ICRtZW51LXotaW5kZXhcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICBzcGFuXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by10cmFpbFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgaGVpZ2h0OiAzZW1cbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZ1xuICAgICAgdWxcbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYVxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgcGFkZGluZy1yaWdodDogMC40ZW1cbiAgICAgICAgJGFuZ2xlOiAzM2RlZ1xuICAgICAgICAmOmhvdmVyXG4gICAgICAgICAgY29sb3I6ICM5OTlcbiAgICAgICAgJjo6YmVmb3JlLFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgICAgd2lkdGg6IDFweFxuICAgICAgICAgIGhlaWdodDogMS4yZW1cbiAgICAgICAgICByaWdodDogLTFweFxuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrXG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIHRvcDogNTAlXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGFuZ2xlKVxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGJvdHRvbTogNTAlXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLSRhbmdsZSlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b21cbiAgICAuZGl0by1zcGlubmVyXG4gICAgICBtYXJnaW4tdG9wOiAkbWVudS1wYWRkaW5nLXZlclxuICAgIC5kaXRvLWRpcnR5XG4gICAgICAmOmFmdGVyXG4gICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgd2lkdGg6IDhweFxuICAgICAgICBoZWlnaHQ6IDhweFxuICAgICAgICBtYXJnaW46IDJweFxuICAgICAgICBtYXJnaW4tbGVmdDogMC41ZW1cbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJVxuICAgIC5kaXRvLWFjY291bnQsXG4gICAgLmRpdG8tbG9naW5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiAwXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by1hY2NvdW50XG4gICAgICBsZWZ0OiAkY29udGVudC13aWR0aCArICRjb250ZW50LXBhZGRpbmcgKiAyXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxzZUxvYWRlciBmcm9tICd2dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlJ1xuXG5jb25zdCBTcGlubmVyID0gRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ3NwaW5uZXInLCBQdWxzZUxvYWRlcilcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWhlYWRlcicsIHtcbiAgY29tcG9uZW50czogeyBTcGlubmVyIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzcGlubmVyOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBpc0xvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyYWlsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLmZpbHRlcihcbiAgICAgICAgY29tcG9uZW50ID0+ICEhY29tcG9uZW50LnJvdXRlUmVjb3JkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc2l6ZSA9ICc4cHgnLFxuICAgICAgY29sb3IgPSAnIzk5OSdcbiAgICB9ID0gdGhpcy5zcGlubmVyIHx8IHt9XG4gICAgY29uc3QgeyBwcm9wcyB9ID0gU3Bpbm5lci5vcHRpb25zXG4gICAgcHJvcHMuc2l6ZS5kZWZhdWx0ID0gc2l6ZVxuICAgIHByb3BzLmNvbG9yLmRlZmF1bHQgPSBjb2xvclxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1kaXJ0eSc6IGNvbXBvbmVudC5pc0RpcnR5XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1bGxkb3duOiB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBzdGFydFRpbWU6IDAsXG4gICAgICAgIGNoZWNrVGltZTogdHJ1ZSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgbW91c2Vkb3duOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub25QdWxsZG93bk1vdXNlVXAobnVsbCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlcnM6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4odHJ1ZSlcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0VGltZSB9ID0gdGhpcy5wdWxsZG93blxuICAgICAgaWYgKCF0aGlzLmNoZWNrVGltZSB8fCBzdGFydFRpbWUgJiYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiAyNTApKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm9uUHVsbGRvd25TZWxlY3QodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCgvKiB2YWx1ZSAqLykge1xuICAgICAgLy8gTk9URTogVG8gYmUgb3ZlcnJpZGRlbi5cbiAgICB9LFxuXG4gICAgc2V0UHVsbGRvd25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMucHVsbGRvd24ub3BlbiA9IG9wZW5cbiAgICAgIHRoaXMucHVsbGRvd24uc3RhcnRUaW1lID0gb3BlbiA/IERhdGUubm93KCkgOiAwXG4gICAgICBpZiAob3Blbikge1xuICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwgdGhpcy5wdWxsZG93bi5ldmVudHMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLWFjY291bnRcbiAgYShcbiAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICApXG4gICAgc3BhbiB7eyB1c2VyLnVzZXJuYW1lIH19XG4gIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgKVxuICAgIGxpKFxuICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgKVxuICAgICAgYShcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICApIHt7IGxhYmVsIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1hY2NvdW50XG4gICAgYShcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgKVxuICAgICAgc3BhbiB7eyB1c2VyLnVzZXJuYW1lIH19XG4gICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgKVxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgICAgKVxuICAgICAgICBhKFxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICAgICkge3sgbGFiZWwgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1hY2NvdW50XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHRvcDogJHB1bGxkb3duLXBhZGRpbmctdmVyXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYWNjb3VudCcsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHtcbiAgICAgICAgc2V0dGluZ3M6ICdTZXR0aW5ncycsXG4gICAgICAgIGxvZ291dDogJ0xvZ291dCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25TZWxlY3QodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgIGNhc2UgJ2xvZ291dCc6XG4gICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc2V0dGluZ3MnOlxuICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmZvcm0uZGl0by1kaWFsb2coQHN1Ym1pdC5wcmV2ZW50PVwic3VibWl0XCIpXG4gIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gIClcbiAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIilcbiAgICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLnYtLW1vZGFsLW92ZXJsYXlcbiAgICB6LWluZGV4OiAyMDAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZGlhbG9nJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gTWFrZSBzdXJlIGRpYWxvZyBkYXRhIGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQga2V5c1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBjbG9uZSh0aGlzLmRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGlhbG9nRGF0YSkpIHtcbiAgICAgICAgZGlhbG9nRGF0YVtrZXldID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgd2luZG93RXZlbnRzOiBudWxsLFxuICAgICAgZGlhbG9nRGF0YVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Lm5hbWVcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLmJ1dHRvbnMpKS5yZWR1Y2UoXG4gICAgICAgIC8vIFByb2Nlc3MgdGhlIGJ1dHRvbiBzY2hlbWFzIHRvIGFkZCBkZWZhdWx0IGNsaWNrIGV2ZW50c1xuICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgKHNjaGVtYXMsIFtrZXksIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICBjb25zdCB7IGV2ZW50cyB9ID0gc2NoZW1hXG4gICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIWV2ZW50cykge1xuICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgc2NoZW1hc1trZXldID0gc2NoZW1hXG4gICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgfSxcbiAgICAgICAge31cbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2FuY2VsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5idXR0b25TY2hlbWFzLmNhbmNlbFxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMud2luZG93RXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAga2V5dXA6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2FuY2VsICYmIGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBkZXN0cm95ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGlkZSgpIHtcbiAgICAgIHRoaXMuJG1vZGFsLmhpZGUodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICByZXNvbHZlKHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVzb2x2ZSh2YWx1ZSlcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSxcblxuICAgIHN1Ym1pdCgpIHtcbiAgICAgIHRoaXMucmVzb2x2ZSh0aGlzLmRpYWxvZ0RhdGEpXG4gICAgfSxcblxuICAgIGNhbmNlbCgpIHtcbiAgICAgIHRoaXMucmVzb2x2ZShudWxsKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQoXG4gIHYtaWY9XCJjb250ZW50XCJcbiAgOmlzPVwib3B0aW9ucy50YWcgfHwgdGFnXCJcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pIHt7IG9wdGlvbnMudGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjb250ZW50XCJcbiAgICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICAgIDpjbGFzcz1cImNsYXNzZXNcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gICkge3sgb3B0aW9ucy50ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lbGVtZW50Jywge1xuICBwcm9wczoge1xuICAgIHRhZzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzcGFuJyB9LFxuICAgIGNvbnRlbnQ6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgeyBjb250ZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QoY29udGVudCkgPyBjb250ZW50IDogeyB0ZXh0OiBjb250ZW50IH1cbiAgICB9LFxuXG4gICAgY2xhc3NlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLmNsYXNzLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuY2xhc3MpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMuJGF0dHJzLnN0eWxlLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuc3R5bGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBhc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gYXNBcnJheSh2YWx1ZSkucmVkdWNlKChvYmplY3QsIGVudHJ5KSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKGVudHJ5KSkge1xuICAgICAgb2JqZWN0W2VudHJ5XSA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGVudHJ5KSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmplY3QsIGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0XG4gIH0sIHt9KVxufVxuXG48L3NjcmlwdD5cbiIsIlxuY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgOmlzPVwidGFnXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4pXG4gIC5kaXRvLWNoZXZyb24oXG4gICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6ICFjb2xsYXBzZWQgfVwiXG4gIClcbiAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6a2V5PVwiYHByZWZpeC0ke2luZGV4fWBcIlxuICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgKVxuICBsYWJlbCg6Zm9yPVwiZGF0YVBhdGhcIiB2LWh0bWw9XCJ0ZXh0XCIpXG4gIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXN1ZmZpeChcbiAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgdGFnPVwic3BhblwiXG4gICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gIClcbiAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQuZGl0by1sYWJlbChcbiAgICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gICAgOmlzPVwidGFnXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuICApXG4gICAgLmRpdG8tY2hldnJvbihcbiAgICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6ICFjb2xsYXBzZWQgfVwiXG4gICAgKVxuICAgIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXByZWZpeChcbiAgICAgIHYtZm9yPVwiKHByZWZpeCwgaW5kZXgpIG9mIHByZWZpeGVzXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICAgIDpjb250ZW50PVwicHJlZml4XCJcbiAgICApXG4gICAgbGFiZWwoOmZvcj1cImRhdGFQYXRoXCIgdi1odG1sPVwidGV4dFwiKVxuICAgIGRpdG8tZWxlbWVudC5kaXRvLWxhYmVsLXN1ZmZpeChcbiAgICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgICApXG4gICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbGFiZWxcbiAgICAtLWxhYmVsLXBhZGRpbmc6IDBcbiAgICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLy8gVmVydGljYWxseSBjZW50ZXIgYWxsIGl0ZW1zIGluIHRoZSBsYWJlbCwgZS5nLiBjaGV2cm9uLCBlZGl0LWJ1dHRvbnMuXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgIHBhZGRpbmc6IHZhcigtLWxhYmVsLXBhZGRpbmcpXG4gICAgbWFyZ2luOiAwIDAgJGZvcm0tc3BhY2luZy1oYWxmIDBcblxuICAgIGxhYmVsXG4gICAgICBkaXNwbGF5OiBpbmxpbmVcbiAgICAgIGN1cnNvcjogaW5oZXJpdFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcblxuICAgIGxhYmVsLFxuICAgIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgICAuZGl0by1sYWJlbC1zdWZmaXhcbiAgICAgICY6bnRoLWxhc3QtY2hpbGQoMilcbiAgICAgICAgLy8gVG8gc3RyZXRjaCBlaXRoZXIgbGFiZWwgb3IgLmRpdG8tbGFiZWwtc3VmZml4IHRvIGZ1bGwgYXZhaWxhYmxlIHdpZHRoXG4gICAgICAgIC8vIHNvIHRoYXQgYnV0dG9ucyBhbHdheXMgYXBwZWFyIHJpZ2h0LWFsaWduZWQ6XG4gICAgICAgIGZsZXg6IDEgMSBhdXRvXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb250ZW50OiAnXFxhMCcgLy8gJm5icHM7XG5cbiAgICAuZGl0by1sYWJlbC1wcmVmaXgsXG4gICAgLmRpdG8tbGFiZWwtc3VmZml4XG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICtlbGxpcHNpc1xuXG4gICAgLmRpdG8tYnV0dG9uc1xuICAgICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgICAgbWFyZ2luOiBjYWxjKC0xICogdmFyKC0tbGFiZWwtcGFkZGluZykpXG4gICAgICBtYXJnaW4tbGVmdDogMFxuICAgICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZylcblxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogMTAwJVxuICAgICAgLy8gSW4gb3JkZXIgZm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gbGFiZWxzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGxheW91dCxcbiAgICAgIC8vIHdlIG5lZWQgdG8gcG9zaXRpb24gaXQgYWJzb2x1dGVseSBpbnNpZGUgaXRzIGNvbnRhaW5lci5cbiAgICAgIGxhYmVsXG4gICAgICAgICtlbGxpcHNpc1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgICAmOjphZnRlclxuICAgICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgICAvLyBzcGFjZSBvbiBpdHMgcGFyZW50IHRvIGVuZm9yY2UgdGhlIHJpZ2h0IHRleHQgaGVpZ2h0IGluIHRoZSBjb250YWluZXJcbiAgICAgICAgY29udGVudDogJ1xcMjAwYicgLy8gemVyby13aWR0aCBzcGFjZVxuXG4gIGEuZGl0by1sYWJlbFxuICAgICY6aG92ZXJcbiAgICAgIC5kaXRvLWNoZXZyb25cbiAgICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXJcbiAgICAmOmZvY3VzOm5vdCg6YWN0aXZlKTpub3QoLmRpdG8tYWN0aXZlKVxuICAgICAgLmRpdG8tY2hldnJvblxuICAgICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmVcblxuICAvLyBEaXNwbGF5IGxhYmVscyBpbiBjb21wYWN0IHNjaGVtYSBhcyBpbmxpbmUtYmxvY2tzLCB0byBhbGxvdyBjb21wYWN0IGxheW91dHNcbiAgLy8gd2l0aCBgd2lkdGg6ICdhdXRvJ2AgZWxlbWVudHM6XG4gIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgLmRpdG8tc2NoZW1hLWNvbXBhY3RcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICA+IC5kaXRvLXBhbmVcbiAgICAgICAgPiAuZGl0by1jb250YWluZXJcbiAgICAgICAgICA+IC5kaXRvLWxhYmVsOm5vdCguZGl0by1sYWJlbC1jb21wb25lbnQpXG4gICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tbGFiZWwnLCB7XG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlID8gJ2EnIDogJ2RpdidcbiAgICB9LFxuXG4gICAgdGV4dCgpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChsYWJlbCkgPyBsYWJlbD8udGV4dCA6IGxhYmVsXG4gICAgfSxcblxuICAgIHByZWZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8ucHJlZml4KVxuICAgIH0sXG5cbiAgICBzdWZmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnN1ZmZpeClcbiAgICB9LFxuXG4gICAgbGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uKHRoaXMuY29sbGFwc2libGUgJiYge1xuICAgICAgICAgIGNsaWNrOiB0aGlzLm9uQ2xpY2tcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdleHBhbmQnLCB0aGlzLmNvbGxhcHNlZClcbiAgICB9XG4gIH1cbn0pXG5cbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbUZvcm1TY2hlbWEsIGdldEl0ZW1JZCwgZ2V0SXRlbVVpZCwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYSxcblxuICAgIGdldEl0ZW1VaWQsXG5cbiAgICBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50ICYmIGluZGV4ICE9PSBudWxsXG4gICAgICAgID8gU3RyaW5nKGluZGV4KVxuICAgICAgICA6IGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pXG4gICAgfSxcblxuICAgIGdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSB7XG4gICAgICBsZXQgeyBkYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgaWYgKHNvdXJjZVNjaGVtYSAhPT0gdGhpcy5zY2hlbWEpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc291cmNlU2NoZW1hLm5hbWUpXG4gICAgICB9XG4gICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBpbmRleClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhUGF0aFxuICAgIH0sXG5cbiAgICBmaW5kSXRlbUlkSW5kZXgoc291cmNlU2NoZW1hLCBkYXRhLCBpdGVtSWQpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICA/IGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAoaXRlbSwgaW5kZXgpID0+XG4gICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgIClcbiAgICAgIHJldHVybiBpbmRleCAhPT0gLTEgPyBpbmRleCA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0SXRlbUxhYmVsKHNvdXJjZVNjaGVtYSwgaXRlbSwge1xuICAgICAgaW5kZXggPSBudWxsLFxuICAgICAgZXh0ZW5kZWQgPSBmYWxzZSxcbiAgICAgIGFzT2JqZWN0ID0gZmFsc2VcbiAgICB9ID0ge30pIHtcbiAgICAgIGNvbnN0IHsgaXRlbUxhYmVsIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmICghaXRlbSB8fCAhZXh0ZW5kZWQgJiYgaXRlbUxhYmVsID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICBsZXQgZGF0YVBhdGhcbiAgICAgIGNvbnN0IGdldERhdGFQYXRoID0gKCkgPT5cbiAgICAgICAgKGRhdGFQYXRoIHx8PSB0aGlzLmdldEl0ZW1EYXRhUGF0aChzb3VyY2VTY2hlbWEsIGluZGV4KSlcblxuICAgICAgbGV0IGZvcm1MYWJlbFxuICAgICAgY29uc3QgZ2V0Rm9ybUxhYmVsID0gKCkgPT5cbiAgICAgICAgKGZvcm1MYWJlbCB8fD0gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgICBnZXRJdGVtRm9ybVNjaGVtYShzb3VyY2VTY2hlbWEsIGl0ZW0sIHRoaXMuY29udGV4dClcbiAgICAgICAgKSlcblxuICAgICAgbGV0IHRleHRcbiAgICAgIGxldCBwcmVmaXhcbiAgICAgIGxldCBzdWZmaXhcbiAgICAgIGlmIChpc0Z1bmN0aW9uKGl0ZW1MYWJlbCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBpdGVtTGFiZWwuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgaW5kZXgsXG5cbiAgICAgICAgICAgIGdldCBkYXRhUGF0aCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldERhdGFQYXRoKClcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIGdldCBmb3JtTGFiZWwoKSB7XG4gICAgICAgICAgICAgIHJldHVybiBnZXRGb3JtTGFiZWwoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgaWYgKGlzT2JqZWN0KGxhYmVsKSkge1xuICAgICAgICAgICh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgdGV4dCA9IHRleHQgfHwgJydcbiAgICAgIC8vIElmIG5vIGxhYmVsIHdhcyBmb3VuZCBzbyBmYXIsIHRyeSB0byBwcm9kdWNlIG9uZSBmcm9tIHRoZWluZGV4LlxuICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgIC8vIEFsd2F5cyB1c2UgZXh0ZW5kZWQgc3R5bGUgd2hlbiBhdXRvLWdlbmVyYXRpbmcgbGFiZWxzIGZyb20gaW5kZXgvaWQ6XG4gICAgICAgIGV4dGVuZGVkID0gdHJ1ZVxuICAgICAgICBpZiAoaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICB0ZXh0ID0gYCR7aW5kZXggKyAxfWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV4dGVuZGVkKSB7XG4gICAgICAgIGNvbnN0IGZvcm1MYWJlbCA9IGdldEZvcm1MYWJlbCgpXG4gICAgICAgIGlmIChmb3JtTGFiZWwpIHtcbiAgICAgICAgICAvLyBJZiBhIGxhYmVsIHdhcyBwcm92aWRlZCwgcHV0IGluIHF1b3RlcyB3aGVuIHByZWZpeGVkIHdpdGggdGhlXG4gICAgICAgICAgLy8gZm9ybSBsYWJlbCBmb3IgdGhlIGV4dGVuZGVkIHN0eWxlOlxuICAgICAgICAgIHRleHQgPSBgJHtmb3JtTGFiZWx9ICR7aGFkTGFiZWwgPyBgJyR7dGV4dH0nYCA6IHRleHR9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXNPYmplY3QgPyB7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gOiB0ZXh0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXNjaGVtYVxuICAuZGl0by1zY2hlbWEtY29udGVudFxuICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICB2LWlmPVwiaGFzTGFiZWwgfHwgaGFzVGFicyB8fCBjbGlwYm9hcmRcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtbWVudS1oZWFkZXInOiBtZW51SGVhZGVyIH1cIlxuICAgIClcbiAgICAgIGRpdG8tbGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQGV4cGFuZD1cIm9uRXhwYW5kXCJcbiAgICAgIClcbiAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAjZWRpdC1idXR0b25zXG4gICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICApXG4gICAgICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gICAgICBkaXRvLXRhYnMoXG4gICAgICAgIHYtaWY9XCJ0YWJzXCJcbiAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgKVxuICAgICAgZGl0by1jbGlwYm9hcmQoXG4gICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICApXG4gICAgZGl0by1wYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICByZWY9XCJ0YWJzXCJcbiAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgIDp0YWI9XCJ0YWJcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzTWFpblBhbmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgIClcbiAgICB0cmFuc2l0aW9uLWhlaWdodChcbiAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgKVxuICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS1tYWluKFxuICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgc2xvdChcbiAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgKVxuICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiIWhhc0xhYmVsXCJcbiAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgIClcbiAgdGVtcGxhdGUodi1lbHNlLWlmPVwiaXNQb3B1bGF0ZWRcIilcbiAgICBkaXRvLXBhbmVscyhcbiAgICAgIDpwYW5lbHM9XCJwYW5lbFNjaGVtYXNcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2NoZW1hXG4gICAgLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbCB8fCBoYXNUYWJzIHx8IGNsaXBib2FyZFwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLW1lbnUtaGVhZGVyJzogbWVudUhlYWRlciB9XCJcbiAgICAgIClcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgICBAZXhwYW5kPVwib25FeHBhbmRcIlxuICAgICAgICApXG4gICAgICAgICAgLy8gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgICBkaXRvLXRhYnMoXG4gICAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICAgIDp0YWJzPVwidGFic1wiXG4gICAgICAgICAgOnNlbGVjdGVkVGFiPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgICApXG4gICAgICAgIGRpdG8tY2xpcGJvYXJkKFxuICAgICAgICAgIDpjbGlwYm9hcmQ9XCJjbGlwYm9hcmRcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICApXG4gICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLXRhYihcbiAgICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgICAgICB2LWZvcj1cIihzY2hlbWEsIHRhYikgaW4gdGFic1wiXG4gICAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgICA6a2V5PVwidGFiXCJcbiAgICAgICAgOnZpc2libGU9XCJzZWxlY3RlZFRhYiA9PT0gdGFiXCJcbiAgICAgICAgOnRhYj1cInRhYlwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNNYWluUGFuZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgKVxuICAgICAgdHJhbnNpdGlvbi1oZWlnaHQoXG4gICAgICAgIDplbmFibGVkPVwiaW5saW5lZFwiXG4gICAgICApXG4gICAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtbWFpbihcbiAgICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgICByZWY9XCJjb21wb25lbnRzXCJcbiAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc1RhYnNcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIG5hbWU9XCJidXR0b25zXCJcbiAgICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICAgIClcbiAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5saW5lZFwiKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICAgIG5hbWU9XCJlZGl0LWJ1dHRvbnNcIlxuICAgICAgKVxuICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCIpXG4gICAgICBkaXRvLXBhbmVscyhcbiAgICAgICAgOnBhbmVscz1cInBhbmVsU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNjaGVtYVxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAvLyBUbyBkaXNwbGF5IHNjaGVtYSBuZXh0IHRvIHBhbmVsczpcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgbWluLWhlaWdodDogMTAwJVxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgIGZsZXg6IDEgMSAxMDAlXG4gICAgICAvLyBTbyB0aGF0IHNjaGVtYSBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICAgIGRpc3BsYXk6IGdyaWRcbiAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnRcbiAgICAgID4gKjpvbmx5LWNoaWxkXG4gICAgICAgIGdyaWQtcm93LWVuZDogbm9uZVxuICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZ1xuICAgID4gLmRpdG8tYnV0dG9ucyxcbiAgICA+IC5kaXRvLXBhbmVsc1xuICAgICAgZmxleDogMSAxIDAlXG4gICAgPiAuZGl0by1idXR0b25zXG4gICAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZ1xuICAgID4gLmRpdG8tcGFuZWxzXG4gICAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgJGNvbnRlbnQtcGFkZGluZyAwXG4gICAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgICAuZGl0by1wYW5lLXRhYiArIC5kaXRvLXBhbmUtbWFpblxuICAgICAgJjo6YmVmb3JlXG4gICAgICAgIC8vIFVzZSBhIHBzZXVkbyBlbGVtZW50IHRvIGRpc3BsYXkgYSBydWxlciB3aXRoIHByb3BlciBtYXJnaW5zXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGVcbiAgICAgICAgLy8gQWRkIHJlbW92ZWQgJGZvcm0tc3BhY2luZyBhZ2FpbiB0byB0aGUgcnVsZXJcbiAgICAgICAgbWFyZ2luOiAkY29udGVudC1wYWRkaW5nICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgLmRpdG8tc2NoZW1hLWhlYWRlclxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAuZGl0by10YWJzLFxuICAgIC5kaXRvLWNsaXBib2FyZFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYWxpZ24tc2VsZjogZmxleC1lbmRcbiAgICAuZGl0by1jbGlwYm9hcmRcbiAgICAgICY6b25seS1jaGlsZFxuICAgICAgICBtYXJnaW4tbGVmdDogYXV0b1xuICAgICAgLmRpdG8tYnV0dG9uXG4gICAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luXG4gICAgJi5kaXRvLXNjaGVtYS1tZW51LWhlYWRlclxuICAgICAgLy8gQnJpbmcgdGhlIHRhYnMgdXAgdG8gdGhlIG1lbnUuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIGhlaWdodDogJG1lbnUtaGVpZ2h0XG4gICAgICBwYWRkaW5nOiAwICRtZW51LXBhZGRpbmctaG9yXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICB0b3A6IDBcbiAgICAgIGxlZnQ6IDBcbiAgICAgIHJpZ2h0OiAwXG4gICAgICB6LWluZGV4OiAkbWVudS16LWluZGV4XG4gICAgICAvLyBUdXJuIG9mZiBwb2ludGVyIGV2ZW50cyBzbyB0aGF0IERpdG9UcmFpbCBrZWVwcyByZWNlaXZpbmcgZXZlbnRzLi4uXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgLy8gLi4uYnV0IGFsbG93IGludGVyYWN0aW9uIHdpdGggdGhlIHRhYnMgYW5kIGJ1dHRvbnMgKGUuZy4gY2xpcGJvYXJkKVxuICAgICAgLy8gbGF5ZXJlZCBvbiB0b3Agb2YgRGl0b1RyYWlsLlxuICAgICAgLmRpdG8tdGFicyxcbiAgICAgIC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG9cbiAgICAgICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0XG4gICAgICAgIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplXG4gICAgYnV0dG9uLmRpdG8tbGFiZWxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAvLyBDYXRjaCBhbGwgY2xpY2tzLCBldmVuIHdoZW4gaXQgd291bGQgYmUgcGFydGlhbGx5IGNvdmVyZWQgYnkgc2NoZW1hLlxuICAgICAgei1pbmRleDogMVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc1JlZ0V4cCxcbiAgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGgsIGxhYmVsaXplXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBUcmFuc2l0aW9uSGVpZ2h0IH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsIGdldFBhbmVsU2NoZW1hcywgc2V0RGVmYXVsdHMsIHByb2Nlc3NEYXRhXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjaGVtYScsIHtcbiAgY29tcG9uZW50czogeyBUcmFuc2l0aW9uSGVpZ2h0IH0sXG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBpbmplY3Q6IFtcbiAgICAnJHNjaGVtYVBhcmVudENvbXBvbmVudCdcbiAgXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgaW5saW5lZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgaGFzT3duRGF0YTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG1lbnVIZWFkZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIHJldHVybiB7XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gcHJvdmlkZSBtb3JlIGRhdGEgdGhyb3VnaCBgc2NoZW1hLmRhdGFgLCB2dWUtc3R5bGU6XG4gICAgICAuLi4oXG4gICAgICAgIGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICAgID8gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICA6IGRhdGFcbiAgICAgICksXG4gICAgICBjb21wb25lbnRzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZXNSZWdpc3RyeToge30sXG4gICAgICBwYW5lbHNSZWdpc3RyeToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyBzY2hlbWFDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHBhcmVudFNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIERvbid0IHJldHVybiB0aGUgYWN0dWFsIHBhcmVudCBzY2hlbWEgaXMgdGhpcyBzY2hlbWEgaGFuZGxlcyBpdHMgb3duXG4gICAgICAvLyBkYXRhLiBUaGlzIHByZXZlbnRzIGRlbGVnYXRpbmcgZXZlbnRzIHRvIHRoZSBwYXJlbnQsIGFuZCByZWdpc3RlcmluZ1xuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIHRoZSBwYXJlbnQgdGhhdCB3b3VsZCBjYXVzZSBpdCB0byBzZXQgaXNEaXJ0eSBmbGFncy5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyBudWxsIDogdGhpcy4kcGFyZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYXMoKSB7XG4gICAgICBjb25zdCBwYW5lbHMgPSBnZXRQYW5lbFNjaGVtYXModGhpcy5zY2hlbWEucGFuZWxzLCAnJylcbiAgICAgIGZvciAoY29uc3QgcGFuZSBvZiB0aGlzLnBhbmVzKSB7XG4gICAgICAgIHBhbmVscy5wdXNoKC4uLnBhbmUucGFuZWxTY2hlbWFzKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHBhbmVsc1xuICAgIH0sXG5cbiAgICB0YWJzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS50YWJzKVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRUYWIgPSB0aGlzLiRyb3V0ZS5oYXNoPy5zbGljZSgxKSB8fCBudWxsXG4gICAgICBjb25zdCB0YWIgPSBjdXJyZW50VGFiICYmIHRoaXMuc2hvdWxkUmVuZGVyKHRoaXMudGFic1tjdXJyZW50VGFiXSlcbiAgICAgICAgPyBjdXJyZW50VGFiXG4gICAgICAgIDogdGhpcy5kZWZhdWx0VGFiPy5uYW1lIHx8IG51bGxcbiAgICAgIGlmICh0YWIgIT09IGN1cnJlbnRUYWIpIHtcbiAgICAgICAgLy8gQW55IHRhYiBjaGFuZ2UgbmVlZHMgdG8gYmUgcmVmbGVjdGVkIGluIHRoZSByb3V0ZXIgYWxzby5cbiAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBoYXNoOiB0YWIgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiB0YWJcbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgICBmb3IgKGNvbnN0IHRhYiBvZiBPYmplY3QudmFsdWVzKHRoaXMudGFicykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRUYWIgfSA9IHRhYlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpXG4gICAgICAgICAgICA/IGRlZmF1bHRUYWIuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgICA6IGRlZmF1bHRUYWJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0YWJcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICAgICAgZmlyc3QgPSB0YWJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsaXBib2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYT8uY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ3NlcnZlcicsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkRGF0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICRzY2hlbWE6IHRoaXMuc2NoZW1hLm5hbWUsXG4gICAgICAgIC4uLnRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAgIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHMuXG4gICAgLy8gTk9URTogVGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBhczpcbiAgICAvLyByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGlwYm9hcmREYXRhXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwoXG4gICAgICAgIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgdGhpcy5jb250ZXh0KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmV2ZXJ5Q29tcG9uZW50KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZGF0ZWQpXG4gICAgfSxcblxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmxhYmVsIHx8IHRoaXMuY29sbGFwc2libGVcbiAgICB9LFxuXG4gICAgaGFzVGFicygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pbmxpbmVkICYmICEhdGhpcy50YWJzXG4gICAgfSxcblxuICAgIGhhc01haW5QYW5lKCkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuICEhY29tcG9uZW50cyAmJiBPYmplY3Qua2V5cyhjb21wb25lbnRzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIG9wZW5lZDogZ2V0U3RvcmVBY2Nlc3Nvcignb3BlbmVkJywge1xuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbGxhcHNlZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50cygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgY29tcG9uZW50c0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lc0J5RGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbGlzdEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZXNSZWdpc3RyeSlcbiAgICB9LFxuXG4gICAgcGFuZWxzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNSZWdpc3RyeSlcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICAgIC8vIERlbGVnYXRlIGNoYW5nZSBldmVudHMgdGhyb3VnaCB0byBwYXJlbnQgc2NoZW1hOlxuICAgIHRoaXMuZGVsZWdhdGUoJ2NoYW5nZScsIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50KVxuICAgIHRoaXMuZW1pdEV2ZW50KCdpbml0aWFsaXplJykgLy8gTm90IGAnY3JlYXRlJ2AsIHNpbmNlIHRoYXQncyBmb3IgZGF0YS5cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuZW1pdEV2ZW50KCdkZXN0cm95JylcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgoXG4gICAgICAgIHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHNCeU5hbWUoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5TmFtZSh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5TmFtZShuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRDb21wb25lbnQoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzKGRhdGFQYXRoT3JOYW1lLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoLCBtYXRjaClbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLnBhbmVsc0J5RGF0YVBhdGgsIGRhdGFQYXRoT3JOYW1lLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWwoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIHNvbWVDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5zb21lKGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBldmVyeUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLmV2ZXJ5KGNhbGxiYWNrKVxuICAgIH0sXG5cbiAgICBvbkV4cGFuZChleHBhbmQpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdleHBhbmQnLCB7XG4gICAgICAgIC8vIFRPRE86IEFjdHVhbGx5IGV4cG9zZSB0aGlzIG9uIERpdG9Db250ZXh0P1xuICAgICAgICBjb250ZXh0OiB7IGV4cGFuZCB9XG4gICAgICB9KVxuICAgICAgLy8gUHJldmVudCBjbG9zaW5nIHRoZSBzY2hlbWEgd2l0aCBpbnZhbGlkIGRhdGEsIHNpbmNlIHRoZSBpbi1jb21wb25lbnRcbiAgICAgIC8vIHZhbGlkYXRpb24gd2lsbCBub3QgYmUgZXhlY3V0ZWQgb25jZSBpdCdzIGNsb3NlZC5cblxuICAgICAgLy8gVE9ETzogTW92ZSB2YWxpZGF0aW9uIG91dCBvZiBjb21wb25lbnRzLCB0byBzY2hlbWEsIGp1c3QgbGlrZVxuICAgICAgLy8gcHJvY2Vzc2luZywgYW5kIHVzZSBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgZm9yIHRoZSByZXN1bHRpbmcgZXJyb3JzLFxuICAgICAgLy8gdGhlbiByZW1vdmUgdGhpcyByZXF1aXJlbWVudCwgc2luY2Ugd2UgY2FuIHZhbGlkYXRlIGNsb3NlZCBmb3JtcyBhbmRcbiAgICAgIC8vIHNjaGVtYXMgdGhlbi5cbiAgICAgIGlmICghdGhpcy5vcGVuZWQgfHwgZXhwYW5kIHx8IHRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICB0aGlzLm9wZW5lZCA9IGV4cGFuZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdjaGFuZ2UnKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICAgIGNvbXBvbmVudC5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMub3BlbmVkID0gdHJ1ZVxuICAgIH0sXG5cbiAgICB2YWxpZGF0ZUFsbChtYXRjaCwgbm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgY29uc3QgeyBjb21wb25lbnRzQnlEYXRhUGF0aCB9ID0gdGhpc1xuICAgICAgbGV0IGRhdGFQYXRoc1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrID0gaXNGdW5jdGlvbihtYXRjaClcbiAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgOiBpc1JlZ0V4cChtYXRjaClcbiAgICAgICAgICAgID8gZmllbGQgPT4gbWF0Y2gudGVzdChmaWVsZClcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICBkYXRhUGF0aHMgPSBjaGVja1xuICAgICAgICAgID8gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpLmZpbHRlcihjaGVjaylcbiAgICAgICAgICA6IGlzQXJyYXkobWF0Y2gpXG4gICAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgICA6IFttYXRjaF1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICB9XG4gICAgICBsZXQgaXNWYWxpZCA9IHRydWVcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGRhdGFQYXRocyB8fD0gT2JqZWN0LmtleXMoY29tcG9uZW50c0J5RGF0YVBhdGgpXG4gICAgICBmb3IgKGNvbnN0IGRhdGFQYXRoIG9mIGRhdGFQYXRocykge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmICghY29tcG9uZW50LnZhbGlkYXRlKG5vdGlmeSkpIHtcbiAgICAgICAgICAgIC8vIEZvY3VzIGZpcnN0IGVycm9yIGZpZWxkXG4gICAgICAgICAgICBpZiAobm90aWZ5ICYmIGZpcnN0KSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5mb2N1cygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkgJiYgIWlzVmFsaWQpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5QWxsKG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZUFsbChtYXRjaCwgZmFsc2UpXG4gICAgfSxcblxuICAgIGFzeW5jIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgY29uc3QgdW5tYXRjaGVkID0gW11cbiAgICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBlcnJzXSBvZiBPYmplY3QuZW50cmllcyhlcnJvcnMpKSB7XG4gICAgICAgIC8vIElmIHRoZSBzY2hlbWEgaXMgYSBkYXRhLXJvb3QsIHByZWZpeCBpdHMgb3duIGRhdGFQYXRoIHRvIGFsbCBlcnJvcnMsXG4gICAgICAgIC8vIHNpbmNlIHRoZSBkYXRhIHRoYXQgaXQgc2VuZHMgYW5kIHZhbGlkYXRlcyB3aWxsIGJlIHVucHJlZml4ZWQuXG4gICAgICAgIGNvbnN0IGZ1bGxEYXRhUGF0aCA9IHRoaXMuaGFzT3duRGF0YVxuICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgICAgICAgOiBkYXRhUGF0aFxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLCB0aGlzLmRhdGFQYXRoLCB0aGlzLmhhc093bkRhdGEsIGZ1bGxEYXRhUGF0aClcbiAgICAgICAgLy8gQ29udmVydCBmcm9tIEphdmFTY3JpcHQgcHJvcGVydHkgYWNjZXNzIG5vdGF0aW9uLCB0byBvdXIgb3duIGZvcm1cbiAgICAgICAgLy8gb2YgcmVsYXRpdmUgSlNPTiBwb2ludGVycyBhcyBkYXRhLXBhdGhzOlxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChmdWxsRGF0YVBhdGgpXG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKSkge1xuICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAvLyBDb3VsZG4ndCBmaW5kIGEgY29tcG9uZW50IGluIGFuIGFjdGl2ZSBmb3JtIGZvciB0aGUgZ2l2ZW4gZGF0YVBhdGguXG4gICAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgY29tcG9uZW50IHNlcnZpbmcgYSBwYXJ0IG9mIHRoZSBkYXRhUGF0aCxcbiAgICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICAgIGNvbnN0IHByb3BlcnR5ID0gZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoUGFydHMpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgIGlmIChhd2FpdCBjb21wb25lbnQubmF2aWdhdGVUb0NvbXBvbmVudD8uKFxuICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICBzdWJDb21wb25lbnRzID0+IHtcbiAgICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycnMgPSBlcnJvcnNbY29tcG9uZW50LmRhdGFQYXRoXVxuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgZXJycyAmJlxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cylcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3VuZCBhIG5lc3RlZCBmb3JtIHRvIGRpc3BsYXkgYXQgbGVhc3QgcGFydHMgZm8gdGhlIGVycm9ycy5cbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBzaG93IGFsbCBlcnJvcnMgYXQgb25jZSwgc28gd2UncmUgZG9uZS4gRG9uJ3QgY2FsbFxuICAgICAgICAgICAgICAgIC8vIGBub3RpZnlFcnJvcnMoKWAgeWV0LCBhcyB3ZSBjYW4gb25seSBkaXNwbGF5IGl0IG9uY2VcbiAgICAgICAgICAgICAgICAvLyBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgd2FzIGNhbGxlZCBmcm9tIGBEaXRvRm9ybS5tb3VudGVkKClgXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0aWxsIGhlcmUsIHNvIGtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFdoZW4gdGhlIGVycm9yIGNhbid0IGJlIG1hdGNoZWQsIGFkZCBpdCB0byBhIGxpc3Qgb2YgdW5tYXRjaGVkXG4gICAgICAgICAgLy8gZXJyb3JzIHdpdGggZGVjZW50IG1lc3NhZ2UsIHRvIHJlcG9ydCBhdCB0aGUgZW5kLlxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gbGFiZWxpemUocHJvcGVydHkpXG4gICAgICAgICAgZm9yIChjb25zdCBlcnIgb2YgZXJycykge1xuICAgICAgICAgICAgY29uc3QgcHJlZml4ID0gZmllbGRcbiAgICAgICAgICAgICAgPyBgVGhlIGZpZWxkICR7ZmllbGR9YFxuICAgICAgICAgICAgICA6IGBUaGUgJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICAgICB1bm1hdGNoZWQucHVzaChgJHtwcmVmaXh9ICR7ZXJyLm1lc3NhZ2V9YClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgfVxuICAgICAgaWYgKCFmaXJzdCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycyh1bm1hdGNoZWQuam9pbignXFxuJykpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG5vdGlmeUVycm9ycyhtZXNzYWdlKSB7XG4gICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnVmFsaWRhdGlvbiBFcnJvcnMnLFxuICAgICAgICB0ZXh0OiBtZXNzYWdlIHx8ICdQbGVhc2UgY29ycmVjdCB0aGUgaGlnaGxpZ2h0ZWQgZXJyb3JzLidcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlc2V0RGF0YSgpIHtcbiAgICAgIC8vIFdlIGNhbid0IHNldCBgdGhpcy5kYXRhID0gLi4uYCBiZWNhdXNlIGl0J3MgYSBwcm9wZXJ0eSwgYnV0IHdlIGNhblxuICAgICAgLy8gc2V0IGFsbCBrbm93biBwcm9wZXJ0aWVzIG9uIGl0IHRvIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnlcbiAgICAgIC8vIGBzZXREZWZhdWx0cygpYCwgYXMgdGhleSBhcmUgYWxsIHJlYWN0aXZlIGFscmVhZHkgZnJvbSB0aGUgc3RhcnRzOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIHNldERlZmF1bHRzKHRoaXMuc2NoZW1hLCB7fSwgdGhpcykpXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgICAgICBpZiAobmFtZSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICB0aGlzLiRzZXQodGhpcy5kYXRhLCBuYW1lLCBkYXRhW25hbWVdKVxuICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKSkge1xuICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2sgYnkgZGF0YSByZXNvdXJjZXNcbiAgICAgIC8vIHRoZW1zZWx2ZXMsIGFzIHRob3NlIGFyZSBhbHJlYWR5IHRha2luZyBjYXJlIG9mIHRocm91Z2ggdGhlaXIgb3duIEFQSVxuICAgICAgLy8gcmVzb3VyY2UgZW5kLXBvaW50cyBhbmQgc2hvdWxkbid0IGJlIHNldC5cbiAgICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcHlbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLCB7XG4gICAgICAgICAgLy8gTmVlZGVkIGZvciBEaXRvQ29udGV4dCBoYW5kbGluZyBpbnNpZGUgYHByb2Nlc3NEYXRhYCBhbmRcbiAgICAgICAgICAvLyBgcHJvY2Vzc1NjaGVtYURhdGEoKWA6XG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHNjaGVtYU9ubHksXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnQoKWAgaXMgb25seSBzZXQgaWYgb25lIG9mIHRoZSBhbmNlc3RvcnMgdXNlc1xuICAgICAgLy8gdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgICB0aGlzLiRzY2hlbWFQYXJlbnRDb21wb25lbnQoKT8uX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5LCBjb21wb25lbnQsIGFkZClcbiAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgd2l0aCB0aGUgcGFyZW50IGlmIHNjaGVtYSBzaGFyZXMgZGF0YSB3aXRoIGl0LlxuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/Ll9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZShwYW5lLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lc1JlZ2lzdHJ5LCBwYW5lLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmVsKHBhbmVsLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lbHNSZWdpc3RyeSwgcGFuZWwsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyRW50cnkocmVnaXN0cnksIGVudHJ5LCBhZGQpIHtcbiAgICAgIGNvbnN0IHVpZCA9IGVudHJ5LiR1aWRcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgdGhpcy4kc2V0KHJlZ2lzdHJ5LCB1aWQsIGVudHJ5KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy4kZGVsZXRlKHJlZ2lzdHJ5LCB1aWQpXG4gICAgICB9XG4gICAgfSxcblxuICAgIF9saXN0RW50cmllc0J5RGF0YVBhdGgocmVnaXN0cnkpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlZ2lzdHJ5KS5yZWR1Y2UoKGVudHJpZXNCeURhdGFQYXRoLCBlbnRyeSkgPT4ge1xuICAgICAgICAvLyBNdWx0aXBsZSBlbnRyaWVzIGNhbiBiZSBsaW5rZWQgdG8gdGhlIHNhbWUgZGF0YS1wYXRoLCBlLmcuIHdoZW5cbiAgICAgICAgLy8gdGhlcmUgYXJlIHRhYnMuIExpbmsgZWFjaCBkYXRhLXBhdGggdG8gYW4gYXJyYXkgb2YgZW50cmllcy5cbiAgICAgICAgY29uc3QgeyBkYXRhUGF0aCB9ID0gZW50cnlcbiAgICAgICAgY29uc3QgZW50cmllcyA9IGVudHJpZXNCeURhdGFQYXRoW2RhdGFQYXRoXSB8fD0gW11cbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhcbiAgICAgIH0sIHt9KVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllcyhlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgPyB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgICAgICA6IHRoaXMuX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFtub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgbmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFthcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9maWx0ZXJFbnRyaWVzKGVudHJpZXMsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2ggPyBlbnRyaWVzLmZpbHRlcihtYXRjaCkgOiBlbnRyaWVzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmRpdG8tc2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gIDpzY2hlbWE9XCJzY2hlbWFcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuKVxuICAvLyBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2hlbWFzIHNlcGFyYXRlbHkgZnJvbSBhbGxcbiAgLy8gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGRpdG8tc2NoZW1hLmRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmxhYmVsPVwiaXNDb21wYWN0ID8gbnVsbCA6IGxhYmVsXCJcbiAgICA6aW5saW5lZD1cInRydWVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbiAgKVxuICAgIC8vIFJlbmRlciBkaXRvLWVkaXQtYnV0dG9ucyBmb3IgaW5saW5lZCBzaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAgIC8vIG90aGVycyBpbiBgVHlwZUxpc3RgIGFzIGEgc2NvcGUsIGZvciBiZXR0ZXIgaGFuZGxpbmcgb2YgbGF5b3V0LlxuICAgIHRlbXBsYXRlKCNlZGl0LWJ1dHRvbnMpXG4gICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZSB8fCBkcmFnZ2FibGUgfHwgZWRpdGFibGVcIlxuICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNjaGVtYS1pbmxpbmVkXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgICAgIC8vIENoYW5nZSBzcGFjaW5nIHNvIC5kaXRvLWxhYmVsIGNvdmVycyB0aGUgZnVsbCAuZGl0by1zY2hlbWEtaGVhZGVyLlxuICAgICAgICBtYXJnaW46IC0kZm9ybS1zcGFjaW5nXG4gICAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgICAgLy8gQWRkIHJlbW92ZWQgJGZvcm0tc3BhY2luZyBhZ2FpblxuICAgICAgICAgIC0tbGFiZWwtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIG1hcmdpbjogMFxuICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICAgIC8vIEJlY2F1c2UgdGFibGVzIGhhdmUgYSBmdW5ueSB3YXkgb2YgYWxsb3dpbmcgdG9vIG11Y2ggd2lkdGggZ3Jvd3RoOlxuICAgICAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgICAgJiArLmRpdG8tcGFuZVxuICAgICAgICAgIC8vIE5lZWRlZCBmb3IgdHJhbnNpdGlvbi1oZWlnaHQgaW4gRGl0b1NjaGVtYTpcbiAgICAgICAgICBtaW4taGVpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGlzQ29tcGFjdCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1zY2hlbWEtaW5saW5lZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gaXNDb21wYWN0KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBhY3QgJiYgISF0aGlzLmxhYmVsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXBhbmUoXG4gIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICB2LXNob3c9XCJ2aXNpYmxlXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0gaW4gY29tcG9uZW50U2NoZW1hc2BcbiAgKVxuICAgIC5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwibmVzdGVkRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICApXG4gICAgLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYW5lKFxuICAgIHYtaWY9XCJpc1BvcHVsYXRlZCAmJiBjb21wb25lbnRTY2hlbWFzLmxlbmd0aCA+IDBcIlxuICAgIHYtc2hvdz1cInZpc2libGVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWZvcj1ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBzdG9yZVxuICAgICAgfSBpbiBjb21wb25lbnRTY2hlbWFzYFxuICAgIClcbiAgICAgIC5kaXRvLWJyZWFrKFxuICAgICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgICApXG4gICAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiaXNTaW5nbGVDb21wb25lbnRcIlxuICAgICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgICAuZGl0by1icmVhayhcbiAgICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJ1wiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcGFuZVxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICBmbGV4LWZsb3c6IHJvdyB3cmFwXG4gICAgYWxpZ24tY29udGVudDogZmxleC1zdGFydFxuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZVxuICAgIC8vIFJlbW92ZSBwYWRkaW5nIGFkZGVkIGJ5IGAuZGl0by1jb250YWluZXJgXG4gICAgbWFyZ2luOiAoLSRmb3JtLXNwYWNpbmcpICgtJGZvcm0tc3BhY2luZy1oYWxmKVxuICAgIC8vIEFkZCByZW1vdmVkIGhvcml6b250YWwgbWFyZ2luIGFnYWluIHRvIG1heC13aWR0aDpcbiAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgMiAqICRmb3JtLXNwYWNpbmctaGFsZlxuICAgIC8vIFVzZSBgZmxleDogMCVgIGZvciBhbGwgYC5kaXRvLXBhbmVgIGV4Y2VwdCBgLmRpdG8tcGFuZS1tYWluYCxcbiAgICAvLyBzbyB0aGF0IHRoZSBgLmRpdG8tYnV0dG9ucy1tYWluYCBjYW4gYmUgbW92ZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbS5cbiAgICBmbGV4OiAwJVxuXG4gICAgJi5kaXRvLXBhbmUtbWFpblxuICAgICAgZmxleDogMTAwJVxuXG4gICAgLmRpdG8tc2NoZW1hLWhlYWRlcjpub3QoLmRpdG8tc2NoZW1hLW1lbnUtaGVhZGVyKSArICZcbiAgICAgIC8vIENsZWFyIHRvcC1tYXJnaW4gaWYgdGhlIGNvbXBvbmVudHMgYXJlIHByZWNlZGVkIGJ5IGEgc2NoZW1hIGhlYWRlci5cbiAgICAgIG1hcmdpbi10b3A6IDBcblxuICAgIC5kaXRvLWNvbnRhaW5lci5kaXRvLW9taXQtcGFkZGluZyA+ICZcbiAgICAgIC8vIENsZWFyIG1hcmdpbnMgc2V0IGFib3ZlIGFnYWluIGlmIHBhcmVudCBpcyBvbWl0dGluZyBwYWRkaW5nLlxuICAgICAgbWFyZ2luOiAwXG4gICAgICBtYXgtd2lkdGg6IHVuc2V0XG5cbiAgICAuZGl0by1icmVha1xuICAgICAgZmxleDogMTAwJVxuICAgICAgaGVpZ2h0OiAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGdldEFsbFBhbmVsU2NoZW1hcywgaXNOZXN0ZWQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB2aXNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFiID8gdGhpcyA6IHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgY29tcG9uZW50cyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5c1xuICAgICAgLy8gYW5kIGFkZHMgdGhlIGtleSBhcyB0aGUgbmFtZSB0byBlYWNoIGNvbXBvbmVudCwgdXNlZCBmb3IgbGFiZWxzLCBldGMuXG4gICAgICAvLyBOT1RFOiBzY2hlbWEgY2FuIGJlIG51bGwgd2hpbGUgbXVsdGktZm9ybSBsaXN0cyBsb2FkIHRoZWlyIGRhdGEsXG4gICAgICAvLyBiZWNhdXNlIG9ubHkgdGhlIGF2YWlsYWJsZSBkYXRhIHdpbGwgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGZvcm0uXG4gICAgICAvLyBXaGVuIGVkaXRpbmcgcHJpbWl0aXZlIHZhbHVlcyB0aHJvdWdoIGEgZm9ybSwgZG8gbm90IGFwcGVuZCAnbmFtZScgdG9cbiAgICAgIC8vIHRoZSBjb21wb25lbnQncyBkYXRhUGF0aCBzbyBpdCBjYW4gYmUgbWFwcGVkIHRvIGZyb20gdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAgICAvLyBOT1RFOiBOb3QgYWxsIHNjaGVtYXMgLyBjb21wb25lbnRzIGhhdmUgYSBzb3VyY2VTY2hlbWEsIGUuZy4gZGlhbG9ncy5cbiAgICAgIGNvbnN0IHdyYXBQcmltaXRpdmVzID0gdGhpcy5zb3VyY2VTY2hlbWE/LndyYXBQcmltaXRpdmVzXG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWE/LmNvbXBvbmVudHMgfHwge30pLm1hcChcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgLy8gQWx3YXlzIGFkZCBuYW1lIHRvIGNvbXBvbmVudCBzY2hlbWEuXG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgICAgLy8gU2hhcmUgZGF0YVBhdGggYW5kIHN0b3JlIHdpdGggcGFyZW50IGlmIG5vdCBuZXN0ZWQ6XG4gICAgICAgICAgY29uc3QgbmVzdGVkID0gaXNOZXN0ZWQoc2NoZW1hKVxuICAgICAgICAgIGNvbnN0IG5lc3RlZERhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgZGF0YVBhdGg6IG5lc3RlZCAmJiAhd3JhcFByaW1pdGl2ZXNcbiAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICA6IHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICAgIHN0b3JlOiBuZXN0ZWQgPyB0aGlzLmdldENoaWxkU3RvcmUobmFtZSkgOiB0aGlzLnN0b3JlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hcygpIHtcbiAgICAgIC8vIEdhdGhlciBhbGwgcGFuZWwgc2NoZW1hcyBmcm9tIGFsbCBjb21wb25lbnQgc2NoZW1hcywgYnkgZmluZGluZyB0aG9zZVxuICAgICAgLy8gdGhhdCB3YW50IHRvIHByb3ZpZGUgYSBwYW5lbC4gU2VlIGBnZXRBbGxQYW5lbFNjaGVtYXMoKWAgZm9yIGRldGFpbHMuXG4gICAgICByZXR1cm4gdGhpcy5jb21wb25lbnRTY2hlbWFzLmZsYXRNYXAoXG4gICAgICAgICh7IHNjaGVtYSwgbmVzdGVkRGF0YVBhdGg6IGRhdGFQYXRoIH0pID0+IGdldEFsbFBhbmVsU2NoZW1hcyhcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQsXG4gICAgICAgICAgdGhpcy50YWJDb21wb25lbnRcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNpbmdsZSAmJiB0aGlzLmNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID09PSAxXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lKHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy50YWIpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBoYXNoOiB0aGlzLnRhYiB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFjdGlvbih2YWx1ZSkge1xuICBjb25zdCBtYXRjaCA9IChcbiAgICBpc1N0cmluZyh2YWx1ZSkgJiZcbiAgICB2YWx1ZS5tYXRjaCgvXlxccyooWystXT9cXGQrKVxccypcXC9cXHMqKFsrLV0/XFxkKylcXHMqJC8pXG4gIClcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgWywgZGl2aWRlbmQsIGRpdmlzb3JdID0gbWF0Y2hcbiAgICByZXR1cm4gcGFyc2VGbG9hdChkaXZpZGVuZCkgLyBwYXJzZUZsb2F0KGRpdmlzb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gIH1cbn1cbiIsIlxuLmRpdG8tY29udGFpbmVyKFxuICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgOmNsYXNzPVwiY29udGFpbmVyQ2xhc3NcIlxuICA6c3R5bGU9XCJjb250YWluZXJTdHlsZVwiXG4pXG4gIGRpdG8tbGFiZWwoXG4gICAgdi1pZj1cImxhYmVsXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICApXG4gIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRUeXBlQ29tcG9uZW50KHNjaGVtYS50eXBlKVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICApXG4gIGRpdG8tZXJyb3JzKFxuICAgIDplcnJvcnM9XCJlcnJvcnNcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jb250YWluZXIoXG4gICAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gICAgOmNsYXNzPVwiY29udGFpbmVyQ2xhc3NcIlxuICAgIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbiAgKVxuICAgIGRpdG8tbGFiZWwoXG4gICAgICB2LWlmPVwibGFiZWxcIlxuICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgOmRhdGFQYXRoPVwibGFiZWxEYXRhUGF0aFwiXG4gICAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgKVxuICAgIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICAgIDppcz1cImdldFR5cGVDb21wb25lbnQoc2NoZW1hLnR5cGUpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgICApXG4gICAgZGl0by1lcnJvcnMoXG4gICAgICA6ZXJyb3JzPVwiZXJyb3JzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY29udGFpbmVyXG4gICAgLy8gTmVlZGVkIGZvciBiZXR0ZXIgdmVydGljYWwgYWxpZ25tZW50OlxuICAgIGFsaWduLXNlbGY6IHN0cmV0Y2hcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgLy8gVG8gcHJldmVudCBsaXN0IHRhYmxlcyBmcm9tIGJsb3dpbmcgb3V0IG9mIHRoZWlyIGZsZXggYm94IGNvbnRhaW5lcnMuXG4gICAgbWF4LXdpZHRoOiAxMDAlXG4gICAgLy8gQ2Fubm90IHVzZSBtYXJnaW4gaGVyZSBhcyBpdCBuZWVkcyB0byBiZSBwYXJ0IG9mIGJveC1zaXppbmcgZm9yXG4gICAgLy8gcGVyY2VudGFnZXMgaW4gZmxleC1iYXNpcyB0byB3b3JrLlxuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgJjplbXB0eVxuICAgICAgcGFkZGluZzogMFxuICAgICYuZGl0by1vbWl0LXBhZGRpbmdcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAkZm9ybS1zcGFjaW5nICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgJi5kaXRvLXNpbmdsZVxuICAgICAgaGVpZ2h0OiAxMDAlIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgYXQgdGhlIGJvdHRvbVxuICAvLyBOT1RFOiBUaGlzIGlzIG5vdCBuZXN0ZWQgaW5zaWRlIGAuZGl0by1jb250YWluZXJgIHNvIHRoYXQgb3RoZXJcbiAgLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbiAgLmRpdG8tY29tcG9uZW50XG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgICAmLmRpdG8tcmFkaW8tYnV0dG9uXG4gICAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGxpa2UgY2hhbmdlZCB3aWR0aCBvbiBjaGVja2JveGVzIGFuZCByYWRpb3MsIG92ZXJyaWRlOlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgICAgd2lkdGg6IGF1dG9cbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRUeXBlT3B0aW9ucywgc2hvdWxkT21pdFBhZGRpbmcgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWNvbnRhaW5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB0eXBlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlT3B0aW9ucyh0aGlzLnNjaGVtYSkgfHwge31cbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsYWJlbCAhPT0gZmFsc2UgJiZcbiAgICAgICAgKCEhbGFiZWwgfHwgdGhpcy50eXBlT3B0aW9ucy5nZW5lcmF0ZUxhYmVsICYmIHRoaXMuZ2VuZXJhdGVMYWJlbHMpXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKSA6IG51bGxcbiAgICB9LFxuXG4gICAgbGFiZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIFVubmVzdGVkIHR5cGVzIGRvbid0IGhhdmUgYSBkYXRhUGF0aCBmb3IgdGhlbXNlbHZlcywgZG9uJ3QgdXNlIGl0OlxuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy5kYXRhUGF0aCA6IG51bGxcbiAgICB9LFxuXG4gICAgY29tcG9uZW50V2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlT3B0aW9ucy5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRXaWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVPcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb250YWluZXJDbGFzcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNvbnRhaW5lckNsYXNzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLW9taXQtcGFkZGluZyc6IHNob3VsZE9taXRQYWRkaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGlzU3RyaW5nKGNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgPyB7IFtjb250YWluZXJDbGFzc106IHRydWUgfVxuICAgICAgICAgICAgOiBjb250YWluZXJDbGFzc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNvbXBvbmVudFdpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgY29uc3QgYmFzaXMgPSAoXG4gICAgICAgIFtudWxsLCAnYXV0bycsICdmaWxsJ10uaW5jbHVkZXMod2lkdGgpID8gJ2F1dG8nXG4gICAgICAgIDogLyUkLy50ZXN0KHdpZHRoKSA/IHBhcnNlRmxvYXQod2lkdGgpIC8vIHBlcmNlbnRhZ2VcbiAgICAgICAgOiAvW2Etel0vLnRlc3Qod2lkdGgpID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgIDogcGFyc2VGcmFjdGlvbih3aWR0aCkgKiAxMDAgLy8gZnJhY3Rpb25cbiAgICAgIClcbiAgICAgIHJldHVybiBpc051bWJlcihiYXNpcykgPyBgJHtiYXNpc30lYCA6IGJhc2lzXG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlKCkge1xuICAgICAgLy8gSW50ZXJwcmV0ICc+NTAlJyBhcyAnNTAlLCBmbGV4LWdyb3c6IDFgXG4gICAgICBjb25zdCBncm93ID0gKFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc+JyB8fFxuICAgICAgICB0aGlzLmNvbXBvbmVudFdpZHRoID09PSAnZmlsbCdcbiAgICAgIClcbiAgICAgIC8vIEludGVycHJldCAnPDUwJScgYXMgJzUwJSwgZmxleC1zaHJpbms6IDFgXG4gICAgICBjb25zdCBzaHJpbmsgPSB0aGlzLmNvbXBvbmVudFdpZHRoT3BlcmF0b3IgPT09ICc8J1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmxleDogYCR7Z3JvdyA/IDEgOiAwfSAke3NocmluayA/IDEgOiAwfSAke3RoaXMuY29tcG9uZW50QmFzaXN9YFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzcygpIHtcbiAgICAgIGNvbnN0IGJhc2lzSXNBdXRvID0gdGhpcy5jb21wb25lbnRCYXNpcyA9PT0gJ2F1dG8nXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogIWJhc2lzSXNBdXRvIHx8IHRoaXMuY29tcG9uZW50V2lkdGggPT09ICdmaWxsJyxcbiAgICAgICAgJ2RpdG8td2lkdGgtYXV0byc6IGJhc2lzSXNBdXRvLFxuICAgICAgICAnZGl0by1oYXMtZXJyb3JzJzogISF0aGlzLmVycm9yc1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25FcnJvcnMoZXJyb3JzKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGVycm9yc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by10YWJzXG4gIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICB2LWZvcj1cIih0YWJTY2hlbWEsIGtleSkgaW4gdGFic1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcih0YWJTY2hlbWEpXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJ7IGhhc2g6IGtleSB9XCJcbiAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gIClcbiAgICB8IHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdGFic1xuICAgIHJvdXRlci1saW5rLmRpdG8tbGluayhcbiAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodGFiU2NoZW1hKVwiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cInsgaGFzaDoga2V5IH1cIlxuICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWwodGFiU2NoZW1hLCBrZXkpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgJHRhYi1jb2xvci1iYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3RcbiAgJHRhYi1jb2xvci1pbmFjdGl2ZTogJGNvbG9yLWxpZ2h0XG4gICR0YWItY29sb3ItYWN0aXZlOiAkY29sb3ItbGlnaHRlc3RcbiAgJHRhYi1jb2xvci1ob3ZlcjogJGNvbG9yLXdoaXRlXG5cbiAgLmRpdG8tdGFic1xuICAgIC8vIFNlZTogaHR0cHM6Ly9jb2RlcGVuLmlvL3Rob2xleC9wZW4vaHZlQngvXG4gICAgbWFyZ2luLWxlZnQ6IGF1dG9cbiAgICBhXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWluYWN0aXZlXG4gICAgICBwYWRkaW5nOiAkdGFiLXBhZGRpbmctdmVyICR0YWItcGFkZGluZy1ob3JcbiAgICAgIG1hcmdpbi1sZWZ0OiAkdGFiLW1hcmdpblxuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXNcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1c1xuICAgICAgJjpob3ZlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWhvdmVyXG4gICAgICAmOmFjdGl2ZVxuICAgICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWFjdGl2ZVxuICAgICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWJhY2tncm91bmRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdGFicycsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWJzOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNlbGVjdGVkVGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8gT25seSBzaG93IHBhbmVscyBpbiB0YWJzIHdoZW4gdGhlIHRhYnMgYXJlIGFsc28gdmlzaWJsZS5cbmNvbXBvbmVudC5kaXRvLXBhbmVsKFxuICA6aXM9XCJwYW5lbFRhZ1wiXG4gIHYtc2hvdz1cInZpc2libGUgJiYgKCFwYW5lbFRhYkNvbXBvbmVudCB8fCBwYW5lbFRhYkNvbXBvbmVudC52aXNpYmxlKVwiXG4gIEBzdWJtaXQucHJldmVudFxuKVxuICBsYWJlbC5kaXRvLXBhbmVsLXRpdGxlIHt7IGdldExhYmVsKHNjaGVtYSkgfX1cbiAgZGl0by1zY2hlbWEuZGl0by1wYW5lbC1zY2hlbWEoXG4gICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gIClcbiAgICBkaXRvLWJ1dHRvbnMoXG4gICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vIE9ubHkgc2hvdyBwYW5lbHMgaW4gdGFicyB3aGVuIHRoZSB0YWJzIGFyZSBhbHNvIHZpc2libGUuXG4gIGNvbXBvbmVudC5kaXRvLXBhbmVsKFxuICAgIDppcz1cInBhbmVsVGFnXCJcbiAgICB2LXNob3c9XCJ2aXNpYmxlICYmICghcGFuZWxUYWJDb21wb25lbnQgfHwgcGFuZWxUYWJDb21wb25lbnQudmlzaWJsZSlcIlxuICAgIEBzdWJtaXQucHJldmVudFxuICApXG4gICAgbGFiZWwuZGl0by1wYW5lbC10aXRsZSB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gICAgZGl0by1zY2hlbWEuZGl0by1wYW5lbC1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwicGFuZWxTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmhhc093bkRhdGE9XCJoYXNPd25EYXRhXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcGFuZWxcbiAgICBtYXJnaW4tYm90dG9tOiAkY29udGVudC1wYWRkaW5nXG4gICAgLmRpdG8tcGFuZWwtdGl0bGVcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgYmFja2dyb3VuZDogJGJ1dHRvbi1jb2xvclxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgLmRpdG8tcGFuZWwtc2NoZW1hXG4gICAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGxcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmRcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXRvcDogMFxuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZ1xuICAgICAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgICAtLWJ1dHRvbi1tYXJnaW46ICN7JGZvcm0tc3BhY2luZ31cbiAgICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuICAgICAgLmRpdG8tb2JqZWN0XG4gICAgICAgIGJvcmRlcjogMFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAuZGl0by1sYWJlbFxuICAgICAgICBtYXJnaW46IDBcbiAgICAgICAgbGFiZWxcbiAgICAgICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAuZGl0by1wYW5lXG4gICAgICAgIG1hcmdpbjogMCAoLSRmb3JtLXNwYWNpbmctaGFsZilcbiAgICAgIC5kaXRvLWNvbnRhaW5lclxuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGZcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0QnV0dG9uU2NoZW1hcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lbCcsIHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYW5lbFRhYkNvbXBvbmVudDogeyB0eXBlOiBEaXRvQ29tcG9uZW50LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25EYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgdGFyZ2V0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnRhcmdldCB8fCB0aGlzLmRhdGFQYXRoXG4gICAgfSxcblxuICAgIGhhc093bkRhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm93bkRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3duRGF0YSB8fCB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWEoKSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25EYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBkYXRhYCBmcm9tIHRoZSBzY2hlbWEsIHNvIHRoYXQgRGl0b1NjaGVtYSBpc24ndCB1c2luZyBpdCB0b1xuICAgICAgICAvLyBwcm9kdWNlIGl0cyBvd24gZGF0YS4gU2VlICRmaWx0ZXJzIHBhbmVsIGZvciBtb3JlIGRldGFpbHMgb24gZGF0YS5cbiAgICAgICAgY29uc3QgeyBkYXRhLCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxUYWcoKSB7XG4gICAgICAvLyBQYW5lbHMgdGhhdCBwcm92aWRlIHRoZWlyIG93biBkYXRhIG5lZWQgdGhlaXIgb3duIGZvcm0uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gJ2Zvcm0nIDogJ2RpdidcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIGRhdGEsIHRoZW4gaXQgbmVlZHMgdG8gcHJlZml4IGFsbFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIGl0cyBkYXRhLXBhdGgsIGJ1dCBpZiBpdCBzaGFyZXMgZGF0YSB3aXRoIHRoZSBzY2hlbWFcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhlbiBpdCBzaG91bGQgc2hhcmUgdGhlIGRhdGEtcGF0aCBuYW1lIHNwYWNlIHRvby5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyB0aGlzLmRhdGFQYXRoIDogdGhpcy5zY2hlbWFDb21wb25lbnQuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIC8vIE5PVEU6IFRoaXMgaXMgbm90IHRoZSBzYW1lIGFzIGBzY2hlbWEuZGF0YWAgaGFuZGxpbmcgaW4gRGl0b1NjaGVtYSxcbiAgICAvLyB3aGVyZSB0aGUgZGF0YSBpcyBhZGRlZCB0byB0aGUgYWN0dWFsIGNvbXBvbmVudC5cbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIHRoaXMub3duRGF0YSA9IGlzRnVuY3Rpb24oZGF0YSlcbiAgICAgICAgPyBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICA6IGRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUmVnaXN0ZXIgdGhlIHBhbmVscyBzbyB0aGF0IG90aGVyIGNvbXBvbmVudHMgY2FuIGZpbmQgdGhlbSBieSB0aGVpclxuICAgICAgLy8gZGF0YS1wYXRoLCBlLmcuIGluIFR5cGVMaXN0Lm9uRmlsdGVyRXJyb3JzKClcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmVsKHRoaXMsIGFkZClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tcGFuZWxzKFxuICB2LWlmPVwicGFuZWxzLmxlbmd0aCA+IDBcIlxuKVxuICBkaXRvLXBhbmVsKFxuICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoc2NoZW1hLm5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICA6cGFuZWxUYWJDb21wb25lbnQ9XCJ0YWJDb21wb25lbnRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1wYW5lbHMoXG4gICAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIGRpdG8tcGFuZWwoXG4gICAgICB2LWZvcj1cInsgc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50IH0gaW4gcGFuZWxzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoc2NoZW1hKVwiXG4gICAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoc2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCAhPSBudWxsID8gc2NoZW1hLmRpc2FibGVkIDogZGlzYWJsZWRcIlxuICAgICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcGFuZWxzXG4gICAgbWF4LXdpZHRoOiAkY29udGVudC1zaWRlYmFyLXdpZHRoXG4gICAgbWluLXdpZHRoOiBjYWxjKCRjb250ZW50LXNpZGViYXItd2lkdGggLyAyKVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1wYW5lbHMnLCB7XG4gIHByb3BzOiB7XG4gICAgcGFuZWxzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudCkge1xuICAgICAgLy8gQWxsb3cgc2VwYXJhdGUgdGFicyB0byB1c2UgcGFuZWxzIG9mIHRoZSBzYW1lIG5hbWUsIGJ5XG4gICAgICAvLyBwcmVmaXhpbmcgdGhlaXIga2V5IHdpdGggdGhlIHRhYiBuYW1lLlxuICAgICAgcmV0dXJuIHRhYkNvbXBvbmVudCA/IGAke3RhYkNvbXBvbmVudC50YWJ9XyR7ZGF0YVBhdGh9YCA6IGRhdGFQYXRoXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgLyogUGFzcyBvbiAkbGlzdGVuZXJzIHNvIHRoYXQgZGl0by1lZGl0LWJ1dHRvbnMgY2FuIHBhc3MgZXZlbnRzLiAqL1xuICB2LW9uPVwiJGxpc3RlbmVyc1wiXG4pXG4gIGRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgOmtleT1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICA6c2NoZW1hPVwiYnV0dG9uU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICApXG4gIC8vIFJlbmRlciBlYWNoIG5vZGUgaW4gdGhlIGRlZmF1bHQgc2xvdCB0aHJvdWdoIGBkaXRvLXZub2RlYCwgc28gaXQgY2FuIGJlXG4gIC8vIHdyYXBwZWQgaW4gYSBgLmRpdG8tY29udGFpbmVyYCBjbGFzcy5cbiAgLmRpdG8tY29udGFpbmVyKFxuICAgIHYtZm9yPVwibm9kZSBpbiAkc2xvdHMuZGVmYXVsdFwiXG4gICAgdi1pZj1cIm5vZGUudGFnXCJcbiAgKVxuICAgIGRpdG8tdm5vZGUoOm5vZGU9XCJub2RlXCIpXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1idXR0b25zKFxuICAgIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8ICRzbG90cy5kZWZhdWx0XCJcbiAgICAvKiBQYXNzIG9uICRsaXN0ZW5lcnMgc28gdGhhdCBkaXRvLWVkaXQtYnV0dG9ucyBjYW4gcGFzcyBldmVudHMuICovXG4gICAgdi1vbj1cIiRsaXN0ZW5lcnNcIlxuICApXG4gICAgZGl0by1jb250YWluZXIoXG4gICAgICB2LWZvcj1cIihidXR0b25TY2hlbWEsIGJ1dHRvbkRhdGFQYXRoKSBpbiBidXR0b25TY2hlbWFzXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImZhbHNlXCJcbiAgICApXG4gICAgLy8gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLCBzbyBpdCBjYW4gYmVcbiAgICAvLyB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1mb3I9XCJub2RlIGluICRzbG90cy5kZWZhdWx0XCJcbiAgICAgIHYtaWY9XCJub2RlLnRhZ1wiXG4gICAgKVxuICAgICAgZGl0by12bm9kZSg6bm9kZT1cIm5vZGVcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuLmRpdG8tYnV0dG9uc1xuICA+IC5kaXRvLWNvbnRhaW5lclxuICAgIHBhZGRpbmc6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYnV0dG9ucycsIHtcbiAgcHJvdmlkZToge1xuICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgfSxcblxuICBwcm9wczoge1xuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGJ1dHRvbnMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXMuXG4gICAgICBjb25zdCB7IGRhdGFQYXRoLCBidXR0b25zIH0gPSB0aGlzXG4gICAgICByZXR1cm4gYnV0dG9uc1xuICAgICAgICA/IE9iamVjdC52YWx1ZXMoYnV0dG9ucykucmVkdWNlKChzY2hlbWFzLCBidXR0b24pID0+IHtcbiAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgfSwge30pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICBAY2xpY2suc3RvcFxuKVxuICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICBhLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RyYWdnYWJsZVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gIClcbiAgcm91dGVyLWxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiIGFwcGVuZFxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICApXG4gIGRpdG8tY3JlYXRlLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNDcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBkaXRvLWJ1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgLyogUHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsOiAqL1xuICAgIEBjbGljay5zdG9wXG4gIClcbiAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgIGEuZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgKVxuICAgIHJvdXRlci1saW5rLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgICAgOnRvPVwieyBwYXRoOiBlZGl0UGF0aCB9XCIgYXBwZW5kXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICApXG4gICAgZGl0by1jcmVhdGUtYnV0dG9uKFxuICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICAgIDp2ZXJiPVwidmVyYnMuY3JlYXRlXCJcbiAgICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1lZGl0LWJ1dHRvbnNcbiAgICAvLyBPdmVycmlkZSBjdXJzb3IgZnJvbSBjb2xsYXBzaWJsZSBkaXRvLWxhYmVsOlxuICAgIGN1cnNvcjogZGVmYXVsdFxuICAgIGZsZXg6IG5vbmVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lZGl0LWJ1dHRvbnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjcmVhdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjcmVhdGVQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hLmZvcm0pXG4gICAgfSxcblxuICAgIGlzRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdkcmFnZ2FibGUnKVxuICAgIH0sXG5cbiAgICBpc0VkaXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdlZGl0YWJsZScpICYmICEhdGhpcy5lZGl0UGF0aFxuICAgIH0sXG5cbiAgICBpc0NyZWF0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignY3JlYXRhYmxlJykgJiYgISF0aGlzLmNyZWF0ZVBhdGhcbiAgICB9LFxuXG4gICAgaXNEZWxldGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RlbGV0YWJsZScpXG4gICAgfSxcblxuICAgIGNyZWF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgY3JlYXRlIGJ1dHRvbiB0aHJvdWdoIGNyZWF0YWJsZSBvYmplY3Q6XG4gICAgICAgIHRoaXMuc2NoZW1hLmNyZWF0YWJsZT8ubGFiZWwgfHxcbiAgICAgICAgKFxuICAgICAgICAgIC8vIEF1dG8tZ2VuZXJhdGUgY3JlYXRlIGJ1dHRvbiBsYWJlbHMgZnJvbSBmcm9tIGxhYmVscyBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMgd2l0aCBvbmx5IG9uZSBmb3JtOlxuICAgICAgICAgIHRoaXMuZm9ybUxhYmVsICYmXG4gICAgICAgICAgYCR7Y2FwaXRhbGl6ZSh0aGlzLnZlcmJzLmNyZWF0ZSl9ICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICApIHx8XG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc09wdGlvbihuYW1lKSB7XG4gICAgICAvLyBUaGUgb3B0aW9ucyBvZiB0aGUgb3V0ZXIgY29tcG9uZW50IGFyZSBwYXNzZWQgdG8gdGhlIGJ1dHRvbnMgY29tcG9uZW50XG4gICAgICAvLyB0aHJvdWdoIHByb3BlcnRpZXMgYHRoaXNbbmFtZV1gLCBidXQgY2FuIGJlIGRpc2FibGVkIG9uIGEgcGVyLWZvcm1cbiAgICAgIC8vIGJhc2lzIGJ5IHNldHRpbmcgYHNjaGVtYVtuYW1lXWAgdG8gYGZhbHNlYC5cbiAgICAgIHJldHVybiAhISh0aGlzW25hbWVdICYmIHRoaXMuc2NoZW1hW25hbWVdICE9PSBmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tY3JlYXRlLWJ1dHRvblxuICB0ZW1wbGF0ZSh2LWlmPVwic2hvd1B1bGxkb3duXCIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICApIHt7IHRleHQgfX1cbiAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICApXG4gICAgICBsaSh2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiKVxuICAgICAgICBhKFxuICAgICAgICAgIHYtaWY9XCJpc0NyZWF0YWJsZShmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiYGRpdG8tdHlwZS0ke3R5cGV9YFwiXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtZWxzZVxuICAgIDp0eXBlPVwiaXNJbmxpbmVkID8gJ2J1dHRvbicgOiAnc3VibWl0J1wiXG4gICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICkge3sgdGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY3JlYXRlLWJ1dHRvblxuICAgIHRlbXBsYXRlKHYtaWY9XCJzaG93UHVsbGRvd25cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICAgICkge3sgdGV4dCB9fVxuICAgICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgICAgIClcbiAgICAgICAgbGkodi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gZm9ybXNcIilcbiAgICAgICAgICBhKFxuICAgICAgICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlKGZvcm0pXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImBkaXRvLXR5cGUtJHt0eXBlfWBcIlxuICAgICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsKGZvcm0pIH19XG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1lbHNlXG4gICAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgICAgQGNsaWNrPVwiY3JlYXRlSXRlbShmb3Jtcy5kZWZhdWx0KVwiXG4gICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICAgICkge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNyZWF0ZS1idXR0b25cbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAuZGl0by1wdWxsZG93blxuICAgICAgcmlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRGb3JtU2NoZW1hcywgaXNJbmxpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY3JlYXRlLWJ1dHRvbicsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHZlcmI6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRleHQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHNob3dQdWxsZG93bigpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmZvcm1zKS5sZW5ndGggPiAxIHx8ICF0aGlzLmZvcm1zLmRlZmF1bHRcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGlzQ3JlYXRhYmxlKGZvcm0pIHtcbiAgICAgIC8vIEZvcm1zIGNhbiBiZSBleGNsdWRlZCBmcm9tIHRoZSBsaXN0IGJ5IHByb3ZpZGluZyBgY3JlYXRhYmxlOiBmYWxzZWBcbiAgICAgIHJldHVybiBmb3JtLmNyZWF0YWJsZSAhPT0gZmFsc2VcbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGFibGUoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfSxcbiAgICAgICAgICAgIGFwcGVuZDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICAgIHYtaWY9XCJjbGlwYm9hcmRcIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHJlZj1cImNvcHlEYXRhXCJcbiAgICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgICBAY2xpY2s9XCJvbkNvcHlcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICAgIEBjbGljaz1cIm9uUGFzdGVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY2xpcGJvYXJkJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBjbGlwYm9hcmQ6IHsgdHlwZTogW0Jvb2xlYW4sIE9iamVjdF0sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb3B5RW5hYmxlZDogZmFsc2UsXG4gICAgICBwYXN0ZUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgZml4Q2xpcGJvYXJkOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xpcGJvYXJkT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiBpc09iamVjdCh0aGlzLmNsaXBib2FyZCkgPyB0aGlzLmNsaXBib2FyZCA6IHt9XG4gICAgfSxcblxuICAgIGNvcHlEYXRhKCkge1xuICAgICAgY29uc3QgeyBjb3B5IH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBjb3B5XG4gICAgICAgID8gY2xpcGJvYXJkRGF0YSA9PiBjb3B5LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+IHBhc3RlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY29weTogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGZvY3VzOiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLiR3YXRjaCgnZGF0YScsIHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICh0bywgZnJvbSkgPT4ge1xuICAgICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKHRoaXMuZml4Q2xpcGJvYXJkICYmIGpzb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgbmVlZGVkIG9uIFNhZmFyaSB0byBwcmV2ZW50IGEgc3RyYW5nZSBcIlBhc3RlXCJcbiAgICAgICAgICAvLyBidXR0b24gZnJvbSBhcHBlYXJpbmcgd2hlbiB0aGUgY2xpcGJvYXJkIGlzIGFjY2Vzc2VkICh3aHk/ISkuXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICB0aGlzLmZpeENsaXBib2FyZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBjaGVja0NsaXBib2FyZCgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSAhIXRoaXMuZGF0YVxuICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhKGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkpIC8vIGRvbid0IHJlcG9ydFxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGFjdGl2YXRlIHRoZSBwYXN0ZSBidXR0b24sIGRlcGVuZGRpbmcgb24gYnJvd3NlcnM6XG4gICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0NsaXBib2FyZCgpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uUGFzdGUoKSB7XG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YSh0cnVlKSAvLyByZXBvcnRcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBkYXRhICYmIHRoaXMucGFzdGVEYXRhKGRhdGEpXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcsIHsgdXBkYXRlUm9vdCA9IGZhbHNlLCB1cGRhdGVWaWV3ID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nIF4gIWlzTG9hZGluZykgeyAvLyBCb29sZWFuIHhvclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgICAgIGlmICh1cGRhdGVSb290KSB7XG4gICAgICAgICAgdGhpcy5yb290Q29tcG9uZW50LnJlZ2lzdGVyTG9hZGluZyhpc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZVZpZXcpIHtcbiAgICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0TG9hZGluZyh0aGlzLmlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5pbXBvcnQgeyBzZXREZWZhdWx0cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBMb2FkaW5nTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgIC8vIFBhc3MgbG9jYWwgdmVyYnMgb3ZlcnJpZGVzIG9uIHRvIGNoaWxkcmVuLCBzZWUgdmVyYnMoKSBjb21wdXRlZCBwcm9wLlxuICAgICAgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzLFxuICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0aGlzLmhhc0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9hZGVkRGF0YTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZSBmb3IgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIHNvdXJjZSBzY2hlbWEuXG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGEgZGF0YS1zb3VyY2UgaWYgaXQgaGFzIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlOlxuICAgICAgcmV0dXJuICEhdGhpcy5yZXNvdXJjZVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIC8vIFJldHVybnMgYGZhbHNlYGhlcmUsIGJ1dCBpcyBvdmVycmlkZGVuIHRvIHJldHVybiBgdHJ1ZWAgaW5cbiAgICAgIC8vIGBTb3VyY2VNaXhpbmAgZm9yIGNvbXBvbmVudCB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWlyIG93biBkYXRhLCBidXRcbiAgICAgIC8vIGVkaXQgdGhlaXIgaXRlbXMgdGhyb3VnaCBhIGxpbmtlZCB2aWV3LiAgSW4gdGhpcyBjYXNlLCByZWFsIGlkcyBuZWVkIHRvXG4gICAgICAvLyBiZSB1c2VkLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBiZWxvbmdzIHRvIGFzIHdlbGwsIHNpbmNlIGl0IG1heSBiZVxuICAgICAgLy8gaW4gY3JlYXRpb24gbW9kZSwgd2hpY2ggbWFrZXMgaXQgdHJhbnNpZW50LlxuICAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBsb29wIGVuZGxlc3NseSBiZWNhdXNlIERpdG9Gb3JtIHJlZGVmaW5lc1xuICAgICAgLy8gYGlzVHJhbnNpZW50KClgIHRvIG9ubHkgcmV0dXJuIGAhdGhpcy5wcm92aWRlc0RhdGFgLlxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNvbXBvbmVudFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICF0aGlzLmxpbmtzVG9WaWV3IHx8XG4gICAgICAgIGZvcm0gJiYgKFxuICAgICAgICAgIGZvcm0uaXNUcmFuc2llbnQgfHxcbiAgICAgICAgICBmb3JtLmlzQ3JlYXRpbmdcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0cmFuc2llbnROb3RlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICAnPGI+Tm90ZTwvYj46IHRoZSBwYXJlbnQgc3RpbGwgbmVlZHMgdG8gYmUgc2F2ZWQgJyArXG4gICAgICAgICdpbiBvcmRlciB0byBwZXJzaXN0IHRoaXMgY2hhbmdlLidcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcXVlcnlQYXJhbXMoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucGFnaW5hdGlvblJhbmdlXG4gICAgICBjb25zdCB7IHBhZ2UsIC4uLnF1ZXJ5IH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5xdWVyeSwgLy8gUXVlcnkgbWF5IG92ZXJyaWRlIHNjb3BlLlxuICAgICAgICAuLi4ocmFuZ2UgJiYge1xuICAgICAgICAgIC8vIFBhc3MgcGFnaW5hdGlvbiBhcyByYW5nZSwgc28gdGhhdCB3ZSBhdXRvbWF0aWNhbGx5IGdldCBPYmplY3Rpb24nc1xuICAgICAgICAgIC8vIHJlc3VsdHMgY291bnRpbmc6XG4gICAgICAgICAgcmFuZ2U6IHJhbmdlLmpvaW4oJywnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIFdoZW4gY3JlYXRpbmcgbmVzdGVkIGRhdGEsIHdlIHN0aWxsIG5lZWQgdG8gY2FsbCBzZXR1cERhdGEoKVxuICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSB8fCB0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRhKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFJlc291cmNlKCkge1xuICAgICAgLy8gVGhpcyBpcyBkZWZpbmVkIGFzIGEgbWV0aG9kIHNvIHRoZSBjb21wdXRlZCBgcmVzb3VyY2VgIGdldHRlciBjYW5cbiAgICAgIC8vIGJlIG92ZXJyaWRkZW4gYW5kIGBzdXBlcmAgZnVuY3Rpb25hbGl0eSBjYW4gc3RpbGwgYmUgYWNjZXNzZWQuXG4gICAgICByZXR1cm4gZ2V0UmVzb3VyY2UodGhpcy5zb3VyY2VTY2hlbWE/LnJlc291cmNlLCB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudEZvcm1Db21wb25lbnQ/LnJlc291cmNlID8/IG51bGxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFZlcmJzKCkge1xuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLiR2ZXJicygpXG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IHtcbiAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAvLyBPdmVycmlkZSBkZWZhdWx0IHZlcmJzIHdpdGggdGhlaXIgdHJhbnNpZW50IHZlcnNpb25zOlxuICAgICAgICAgIGNyZWF0ZTogJ2FkZCcsXG4gICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICBzYXZlOiAnYXBwbHknLFxuICAgICAgICAgIHNhdmVkOiAnYXBwbGllZCcsXG4gICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICBkZWxldGVkOiAncmVtb3ZlZCdcbiAgICAgICAgfVxuICAgICAgICA6IHZlcmJzXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIC8vIEFjdHVhbCBjb2RlIGlzIGluIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0J3MgZWFzZXIgdG8gb3ZlcnJpZGVcbiAgICAgIC8vIGBzZXR1cERhdGEoKWAgYW5kIGFuZCBjYWxsIGBlbnN1cmVEYXRhKClgIGZyb20gdGhlIG92ZXJyaWRlcyxcbiAgICAgIC8vIHNlZSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW4uXG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICBlbnN1cmVEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkTG9hZCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVsb2FkRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgfSxcblxuICAgIGxvYWREYXRhKGNsZWFyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckRhdGEoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHNldERlZmF1bHRzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5xdWVyeVBhcmFtc1xuICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZ2V0JywgcGFyYW1zIH0sIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2VcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZGF0YT8udHlwZSA9PT0gJ0ZpbHRlclZhbGlkYXRpb24nICYmXG4gICAgICAgICAgICAgIHRoaXMub25GaWx0ZXJFcnJvcnM/LihkYXRhLmVycm9ycykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdCh7XG4gICAgICBtZXRob2QsXG4gICAgICByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UsXG4gICAgICBkYXRhLFxuICAgICAgcGFyYW1zXG4gICAgfSwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHBhcmFtcyB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdClcbiAgICAgICAgLy8gUGFzcyBib3RoIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHRvIHRoZSBjYWxsYmFjaywgc28gdGhleSBjYW4gYmVcbiAgICAgICAgLy8gZXhwb3NlZCB0byBmdXJ0aGVyIGNhbGxiYWNrcyB0aHJvdWdoIERpdG9Db250ZXh0LlxuICAgICAgICBjYWxsYmFjayhudWxsLCByZXNwb25zZSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIGNhbGxiYWNrIHJldHVybnMgdHJ1ZSwgZXJyb3JzIHdlcmUgYWxyZWFkeSBoYW5kbGVkLlxuICAgICAgICBjb25zdCB7IHJlc3BvbnNlIH0gPSBlcnJvclxuICAgICAgICBpZiAoIWNhbGxiYWNrKGVycm9yLCByZXNwb25zZSkpIHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICBpZiAoZGF0YSAmJiBpc1N0cmluZyhkYXRhLnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiBsYWJlbGl6ZShkYXRhLnR5cGUpLFxuICAgICAgICAgICAgICB0ZXh0OiBkYXRhLm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogZXJyb3JcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgIH0sXG5cbiAgICBnZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZCkge1xuICAgICAgLy8gQ29udmVudGlvbjogb25seSBwb3N0LCBwdXQgYW5kIHBhdGNoIHJlcXVlc3RzIHBhc3MgdGhlIGRhdGEgYXMgcGF5bG9hZC5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmNsdWRlcyhtZXRob2QpICYmIChcbiAgICAgICAgICAvLyBUT0RPOiBVc2UgYGhhbmRsZURhdGFTY2hlbWEoKWAgYXN5bmNocm9ub3VzbHkgaGVyZSBpbnN0ZWFkLCB0b1xuICAgICAgICAgIC8vIG9mZmVyIHRoZSBzYW1lIGFtb3VudCBvZiBwb3NzaWJpbGl0aWVzIGZvciBkYXRhIGxvYWRpbmcuXG4gICAgICAgICAgYnV0dG9uLmdldFNjaGVtYVZhbHVlKFsncmVzb3VyY2UnLCAnZGF0YSddKSB8fFxuICAgICAgICAgIGJ1dHRvbi5wcm9jZXNzZWRJdGVtXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbikge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCB7IG1ldGhvZCB9ID0gcmVzb3VyY2VcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgIHNldERhdGEgPSBmYWxzZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzID0gKCkgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgdGV4dDogJ1JlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBzZW50LidcbiAgICAgIH0pLFxuICAgICAgbm90aWZ5RXJyb3IgPSBlcnJvciA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgIHRleHQ6IFtcbiAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgIF1cbiAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgZGF0YSwgcmVzb3VyY2UgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuKVxuICAvLyBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLyBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLyBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQuZGl0by1zY3JvbGwoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLyBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZD1cInRydWVcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICApXG4gICAgZGl0by1zY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gICAgKVxuICAgICAgZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIG1lcmdlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzLCBpc09iamVjdFNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWZvcm0nLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW4sIFJlc291cmNlTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZWREYXRhOiBudWxsLFxuICAgICAgY2xvbmVkRGF0YTogdW5kZWZpbmVkLFxuICAgICAgc291cmNlS2V5OiBudWxsLFxuICAgICAgaXNGb3JtOiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBBZGQgc3VibWl0IC8gc3VibWl0dGVkIHRvIHRoZSB2ZXJicyByZXR1cm5lZCBieSBSZXNvdXJjZU1peGluXG4gICAgICAvLyBOT1RFOiBUaGVzZSBnZXQgcGFzc2VkIG9uIHRvIGNoaWxkcmVuIHRocm91Z2g6XG4gICAgICAvLyBgcHJvdmlkZSgpIC4uLiB7ICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyB9YCBpbiBSZXNvdXJjZU1peGluXG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuZ2V0VmVyYnMoKVxuICAgICAgY29uc3QgeyBpc0NyZWF0aW5nLCBwcm92aWRlc0RhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnZlcmJzLFxuICAgICAgICBzdWJtaXQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGUgOiB2ZXJicy5zYXZlLFxuICAgICAgICBzdWJtaXR0ZWQ6IGlzQ3JlYXRpbmcgPyB2ZXJicy5jcmVhdGVkIDogdmVyYnMuc2F2ZWQsXG4gICAgICAgIGNhbmNlbDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsIDogdmVyYnMuY2xvc2UsXG4gICAgICAgIGNhbmNlbGxlZDogcHJvdmlkZXNEYXRhID8gdmVyYnMuY2FuY2VsbGVkIDogdmVyYnMuY2xvc2VkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZGF0YSB5ZXQsIHByb3ZpZGUgYW4gZW1wdHkgb2JqZWN0IHdpdGgganVzdCB0aGUgcmlnaHRcbiAgICAgICAgLy8gdHlwZSBzZXQsIHNvIHRoZSBmb3JtIGNhbiBhbHdheXMgYmUgZGV0ZXJtaW5lZC5cbiAgICAgICAgdGhpcy5kYXRhIHx8IHsgdHlwZTogdGhpcy50eXBlIH0sXG4gICAgICAgIHRoaXMuY29udGV4dFxuICAgICAgKSB8fCB7fSAvLyBBbHdheXMgcmV0dXJuIGEgc2NoZW1hIG9iamVjdCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBpdC5cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKFxuICAgICAgICBtZXJnZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHN1Ym1pdDogIXRoaXMuZG9lc011dGF0ZSAmJiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgICAvLyBTdWJtaXQgYnV0dG9ucyBjbG9zZSB0aGUgZm9ybSBieSBkZWZhdWx0OlxuICAgICAgICAgICAgICBjbG9zZUZvcm06IHRydWUsXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgIGNsaWNrOiAoeyBjb21wb25lbnQ6IGJ1dHRvbiB9KSA9PiBidXR0b24uc3VibWl0KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5zY2hlbWEuYnV0dG9uc1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMYXN0Um91dGUgfHwgdGhpcy5pc0xhc3RVbm5lc3RlZFJvdXRlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgcmV0dXJuICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0NyZWF0aW5nKCkge1xuICAgICAgLy8gdGhpcy5wYXJhbSBpcyBpbmhlcml0ZWQgZnJvbSBSb3V0ZU1peGluXG4gICAgICByZXR1cm4gdGhpcy5wYXJhbSA9PT0gJ2NyZWF0ZSdcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5kb2VzTXV0YXRlICYmICEhdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5pc0RpcnR5XG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkb2VzTXV0YXRlKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIGFwcGxpY2F0aW9uIHVwb24gc3VibWl0LlxuICAgICAgLy8gU2VlIGBpbmhlcml0ZWREYXRhKClgIGNvbXB1dGVkIHByb3BlcnR5IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICAvLyBUaGUgdHlwZSBvZiBmb3JtIHRvIGNyZWF0ZSwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGVcbiAgICB9LFxuXG4gICAgaXRlbUlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IG51bGxcbiAgICAgICAgOiAodGhpcy5wYXJhbSA/PyBudWxsKVxuICAgIH0sXG5cbiAgICBtZXRob2QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nID8gJ3Bvc3QnIDogJ3BhdGNoJ1xuICAgIH0sXG5cbiAgICByZXNvdXJjZSgpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgICByZXR1cm4gZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy5pdGVtSWQsIHJlc291cmNlKSB8fCByZXNvdXJjZVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuIGNhcGl0YWxpemUodGhpcy5pc0NyZWF0aW5nID8gdGhpcy52ZXJicy5jcmVhdGUgOiB0aGlzLnZlcmJzLmVkaXQpXG4gICAgfSxcblxuICAgIGRhdGEoKSB7XG4gICAgICAvLyBSZXR1cm4gZGlmZmVyZW50IGRhdGEgXCJjb250YWluZXJzXCIgYmFzZWQgb24gZGlmZmVyZW50IHNjZW5hcmlvczpcbiAgICAgIC8vIDEuIGNyZWF0ZWREYXRhLCBpZiB3ZSdyZSBpbiBhIGZvcm0gZm9yIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG4gICAgICAvLyAyLiBsb2FkZWREYXRhLCBpZiB0aGUgZm9ybSBpdHNlbGYgaXMgdGhlIHJvb3Qgb2YgdGhlIGRhdGEgKGUuZy4gd2hlblxuICAgICAgLy8gICAgZGlyZWN0bHkgbG9hZGluZyBhbiBlZGl0aW5nIHJvb3QpLlxuICAgICAgLy8gMy4gVGhlIGRhdGEgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCwgd2hpY2ggaXRzZWxmIG1heSBiZSBlaXRoZXIgYVxuICAgICAgLy8gICAgdmlldyB0aGF0IGxvYWRlZCB0aGUgZGF0YSwgb3IgYSBmb3JtIHRoYXQgZWl0aGVyIGxvYWRlZCB0aGUgZGF0YSwgb3JcbiAgICAgIC8vICAgIGFsc28gaW5oZXJpdGVkIGl0IGZyb20gaXRzIHBhcmVudC4gTm90ZSB0aGF0IHdlIHVzZSBhIGNsb25lIG9mIGl0LFxuICAgICAgLy8gICAgc28sIGRhdGEgY2hhbmdlcyBhcmVuJ3QgYXBwbGllZCB1bnRpbCBzZXRTb3VyY2VEYXRhKCkgaXMgY2FsbGVkLlxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlZERhdGEgfHwgdGhpcy5sb2FkZWREYXRhIHx8IHRoaXMuaW5oZXJpdGVkRGF0YSB8fCBudWxsXG4gICAgfSxcblxuICAgIGRhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMuZGF0YUNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgc291cmNlRGF0YSgpIHtcbiAgICAgIC8vIFBvc3NpYmxlIHBhcmVudHMgYXJlIERpdG9Gb3JtIGZvciBmb3Jtcywgb3IgRGl0b1ZpZXcgZm9yIHJvb3QgbGlzdHMuXG4gICAgICAvLyBCb3RoIGhhdmUgYSBkYXRhIHByb3BlcnR5IHdoaWNoIGFic3RyYWN0cyBhd2F5IGxvYWRpbmcgYW5kIGluaGVyaXRpbmdcbiAgICAgIC8vIG9mIGRhdGEuXG4gICAgICBsZXQgeyBkYXRhIH0gPSB0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICAvLyBIYW5kbGUgbmVzdGVkIGRhdGEgYnkgc3BsaXR0aW5nIHRoZSBkYXRhUGF0aCwgaXRlcmF0ZSB0aHJvdWdoIHRoZVxuICAgICAgICAvLyBhY3R1YWwgZGF0YSBhbmQgbG9vayBuZXN0IGNoaWxkLWRhdGEgdXAuXG4gICAgICAgIGNvbnN0IGRhdGFQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudClcbiAgICAgICAgKVxuICAgICAgICAvLyBDb21wYXJlIGRhdGFQYXJ0cyBhZ2FpbnN0IG1hdGNoZWQgcm91dGVQYXRoIHBhcnRzLCB0byBpZGVudGlmeSB0aG9zZVxuICAgICAgICAvLyBwYXJ0cyB0aGF0IG5lZWQgdG8gYmUgdHJlYXRlZCBsaWtlIGlkcyBhbmQgbWFwcGVkIHRvIGluZGljZXMgaW4gZGF0YS5cbiAgICAgICAgY29uc3QgcGF0aFBhcnRzID0gdGhpcy5yb3V0ZVJlY29yZC5wYXRoLnNwbGl0KCcvJylcbiAgICAgICAgY29uc3Qgcm91dGVQYXJ0cyA9IHBhdGhQYXJ0cy5zbGljZShwYXRoUGFydHMubGVuZ3RoIC0gZGF0YVBhcnRzLmxlbmd0aClcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZUtleSA9IGtleVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gZGF0YVtrZXldXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBpbmhlcml0ZWREYXRhKCkge1xuICAgICAgLy8gRGF0YSBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIGFuZCBjbG9uZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlYWN0aXZlXG4gICAgICAvLyBjaGFuZ2VzIHVudGlsIGNoYW5nZXMgYXJlIGFwcGxpZWQgdGhyb3VnaCBzZXRTb3VyY2VEYXRhKCksIHVubGVzc1xuICAgICAgLy8gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIGluIHdoaWNoIGNhc2UgZGF0YSBpcyBtdXRhdGVkIGRpcmVjdGx5LlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHRoaXMuc291cmNlRGF0YSAmJlxuICAgICAgICB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5zb3VyY2VEYXRhW3RoaXMuc291cmNlS2V5XVxuICAgICAgICBpZiAoIXRoaXMuZG9lc011dGF0ZSkge1xuICAgICAgICAgIC8vIFVzZSBhIHRyaWNrIHRvIHN0b3JlIGNsb25lZCBpbmhlcml0ZWQgZGF0YSBpbiBjbG9uZWREYXRhLCB0byBtYWtlXG4gICAgICAgICAgLy8gaXQgcmVhY3RpdmUgYW5kIHByZXZlbnQgaXQgZnJvbSBiZWluZyBjbG9uZWQgbXVsdGlwbGUgdGltZXMuXG4gICAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gZGF0YSA9IGNsb25lKGRhdGEpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEgPT09IG51bGwgJiZcbiAgICAgICAgICAhdGhpcy5pc0NyZWF0aW5nICYmXG4gICAgICAgICAgaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIGRhdGEgb2YgYW4gb2JqZWN0IHNvdXJjZSBpcyBudWxsLCByZWRpcmVjdCB0byBpdHMgY3JlYXRlIHJvdXRlLlxuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogJ2NyZWF0ZScsIGFwcGVuZDogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jbG9uZWREYXRhXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaXRlbUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHsgZXh0ZW5kZWQ6IHRydWUgfSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzb3VyY2VEYXRhOiAnY2xlYXJDbG9uZWREYXRhJyxcbiAgICAvLyBOZWVkZWQgZm9yIHRoZSAnY3JlYXRlJyByZWRpcmVjdCBpbiBgaW5oZXJpdGVkRGF0YSgpYCB0byB3b3JrOlxuICAgIGNyZWF0ZTogJ3NldHVwRGF0YSdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfSxcblxuICAgIGdldERhdGFQYXRoRnJvbShyb3V0ZSkge1xuICAgICAgLy8gR2V0IHRoZSBkYXRhIHBhdGggYnkgZGVub3JtYWxpemVQYXRoIHRoZSByZWxhdGl2ZSByb3V0ZSBwYXRoXG4gICAgICByZXR1cm4gdGhpcy5hcGkuZGVub3JtYWxpemVQYXRoKHRoaXMucGF0aFxuICAgICAgICAvLyBEaXRvVmlld3MgaGF2ZSBuZXN0ZWQgcm91dGVzLCBzbyBkb24ndCByZW1vdmUgdGhlaXIgcGF0aC5cbiAgICAgICAgLnNsaWNlKChyb3V0ZS5pc1ZpZXcgPyAwIDogcm91dGUucGF0aC5sZW5ndGgpICsgMSkpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldHVwRGF0YSgpXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gdGhpcy5jcmVhdGVkRGF0YSB8fFxuICAgICAgICAgIHRoaXMuY3JlYXRlRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy50eXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0U291cmNlRGF0YShkYXRhKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VEYXRhICYmIHRoaXMuc291cmNlS2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWFpblNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgICB0aGlzLiRzZXQoXG4gICAgICAgICAgdGhpcy5zb3VyY2VEYXRhLFxuICAgICAgICAgIHRoaXMuc291cmNlS2V5LFxuICAgICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQuZmlsdGVyRGF0YShkYXRhKVxuICAgICAgICApXG4gICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQub25DaGFuZ2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFkZFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICA/IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgICA6ICEhdGhpcy5zb3VyY2VEYXRhPy5wdXNoKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5zZXREYXRhKG51bGwpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gc2V0RGF0YSgpIGlzIGNhbGxlZCBhZnRlciBzdWJtaXQgd2hlbiBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgLy8gRm9yIGNvbXBvbmVudHMgd2l0aCB0cmFuc2llbnQgZGF0YSwgbW9kaWZ5IHRoaXMuc291cmNlRGF0YS5cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gbnVsbFxuICAgICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyQ2xvbmVkRGF0YShuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgIC8vIE9ubHkgY2xlYXIgaWYgdGhlIHdhdGNoZWQgc291cmNlRGF0YSBpdHNlbGYgY2hhbmdlcyBpbiB0aGUgZm9ybS5cbiAgICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LnBhdGgpXG4gICAgfSxcblxuICAgIGdldFN1Ym1pdFZlcmIocHJlc2VudCA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBwcmVzZW50ID8gJ2NyZWF0ZScgOiAnY3JlYXRlZCdcbiAgICAgICAgOiBwcmVzZW50ID8gJ3N1Ym1pdCcgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgY29uc3QgYnV0dHRvblJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXNvdXJjZSA9IGJ1dHR0b25SZXNvdXJjZSB8fCB0aGlzLnJlc291cmNlXG4gICAgICBjb25zdCBtZXRob2QgPSByZXNvdXJjZT8ubWV0aG9kIHx8IHRoaXMubWV0aG9kXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgIGxldCBzdWNjZXNzXG4gICAgICBpZiAoIWJ1dHR0b25SZXNvdXJjZSAmJiB0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zaWVudChidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgPyBgSXRlbSAke2NhcGl0YWxpemUodmVyYil9YFxuICAgICAgICAgICAgICAgIDogYENoYW5nZSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgICAgICAgOiBgQ2hhbmdlcyB0byAke3RoaXMuaXRlbUxhYmVsfSB3ZXJlICR7dmVyYn0uYCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBzZXREYXRhOiB0cnVlLFxuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHRpdGxlOiBgU3VjY2Vzc2Z1bGx5ICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICAgIGlmIChjbG9zZUZvcm0gfHwgYnV0dG9uLmNsb3NlRm9ybSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBmb3JtIGVkaXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbTpcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBwYXRoOiBgLi4vJHtpZH1gLCBhcHBlbmQ6IHRydWUgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgX3Jlc291cmNlLCBfbWV0aG9kLCBkYXRhLCB7XG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyxcbiAgICAgIG5vdGlmeUVycm9yXG4gICAgfSkge1xuICAgICAgLy8gSGFuZGxlIHRoZSBkZWZhdWx0IFwic3VibWl0dGluZ1wiIG9mIHRyYW5zaWVudCwgbmVzdGVkIGRhdGE6XG4gICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gdGhpcy5hZGRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdDb3VsZCBub3Qgc3VibWl0IHRyYW5zaWVudCBpdGVtJ1xuICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tZm9ybS1uZXN0ZWRcbiAgICAmLFxuICAgIC5kaXRvLXNjcm9sbFxuICAgICAgLy8gTm8gc2Nyb2xsaW5nIGluc2lkZSBuZXN0ZWQgZm9ybXMsIGFuZCBwcmV2ZW50IG9wZW4gLm11bHRpc2VsZWN0IGZyb21cbiAgICAgIC8vIGJlaW5nIGNyb3BwZWQuXG4gICAgICBvdmVyZmxvdzogdmlzaWJsZVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvRm9ybSBmcm9tICcuL0RpdG9Gb3JtLnZ1ZSdcblxuZXhwb3J0IGRlZmF1bHQgRGl0b0Zvcm0uY29tcG9uZW50KCdkaXRvLWZvcm0tbmVzdGVkJywge30pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tZXJyb3JzKFxuICB2LWlmPVwiZXJyb3JzXCJcbilcbiAgdWxcbiAgICBsaSh2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiKVxuICAgICAgfCB7eyBlcnJvciB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZXJyb3JzKFxuICAgIHYtaWY9XCJlcnJvcnNcIlxuICApXG4gICAgdWxcbiAgICAgIGxpKHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCIpXG4gICAgICAgIHwge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1lcnJvcnNcbiAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICB6LWluZGV4OiAxXG4gICAgdWxcbiAgICAgIG1hcmdpbi10b3A6IDFweFxuICAgICAgY29sb3I6ICRjb2xvci1lcnJvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1lcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zY29wZXNcbiAgcm91dGVyLWxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zY29wZXNcbiAgICByb3V0ZXItbGluayhcbiAgICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgICAgY3VzdG9tIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2NvcGVzXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1idXR0b25cbiAgICAgICtlbGxpcHNpc1xuICAgICAgYm9yZGVyLXJhZGl1czogMFxuICAgICAgLy8gQSBiaXQgbW9yZSB0aGFuIHRoZSB3aWR0aCBvZiBlbGxpcHNpcywgdG8gcHJldmVudCByZXBsYWNpbmcgc2hvcnQgd29yZHNcbiAgICAgIC8vIHdpdGggZWxsaXBzaXMuXG4gICAgICBtaW4td2lkdGg6IDNlbVxuICAgICAgZmxleDogMCAxIGF1dG9cbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMWVtXG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDFlbVxuICAgICAgICBwYWRkaW5nLWxlZnQ6IDFlbVxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxZW1cbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDFlbVxuICAgICAgICBwYWRkaW5nLXJpZ2h0OiAxZW1cbiAgICAgICYgKyAuZGl0by1idXR0b25cbiAgICAgICAgbWFyZ2luLWxlZnQ6IC0xcHhcbiAgICAgIC8vIERvbid0IGNvdmVyIHRoZSBmb2N1c2VkIGJvcmRlciBvZiBidXR0b25zOlxuICAgICAgJjpmb2N1c1xuICAgICAgICB6LWluZGV4OiAxXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjb3BlcycsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NvcGVzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTY29wZUxpbmsoc2NvcGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyAuLi50aGlzLnF1ZXJ5LCBzY29wZTogc2NvcGUubmFtZSB9XG4gICAgICBpZiAocXVlcnkucGFnZSkge1xuICAgICAgICBxdWVyeS5wYWdlID0gMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHF1ZXJ5KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5wYWdpbmF0aW9uKFxuICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gIDp0b3RhbD1cInRvdGFsXCJcbiAgOnBhZ2Uuc3luYz1cInBhZ2VcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgcGFnaW5hdGlvbihcbiAgICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gICAgOnRvdGFsPVwidG90YWxcIlxuICAgIDpwYWdlLnN5bmM9XCJwYWdlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhZ2luYXRpb24nLCB7XG4gIGNvbXBvbmVudHM6IHsgUGFnaW5hdGlvbiB9LFxuXG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxpbWl0OiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhZ2U6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICgrdGhpcy5xdWVyeS5wYWdlIHx8IDApICsgMVxuICAgICAgfSxcblxuICAgICAgc2V0KHBhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSAhPT0gcGFnZSkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgICBwYWdlOiAocGFnZSAtIDEpXG4gICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uU3RhcnREcmFnKCkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWVcbiAgICB9LFxuXG4gICAgb25FbmREcmFnKHsgb2xkSW5kZXgsIG5ld0luZGV4IH0pIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgaWYgKG9sZEluZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0LCBwYWdpbmF0aW9uUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHsgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICAgIC8vIFJlb3JkZXIgdGhlIGNoYW5nZWQgZW50cmllcyBieSB0aGVpciBvcmRlciBrZXksIHRha2luZyBwYWdpbmF0aW9uXG4gICAgICAgIC8vIG9mZnNldHMgaW50byBhY2NvdW50OlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBwYWdpbmF0aW9uUmFuZ2U/LlswXSB8fCAwXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxpc3RbaV1bb3JkZXJLZXldID0gaSArIG9mZnNldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by10cmVlLWl0ZW0oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tZHJhZ2dpbmcnOiBkcmFnZ2luZyxcbiAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgfWBcbiAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbilcbiAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgLmRpdG8tdHJlZS1icmFuY2goXG4gICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgIClcbiAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiBvcGVuZWQgfVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWluZm8odi1pZj1cImRldGFpbHNcIikge3sgZGV0YWlscyB9fVxuICAgIC5kaXRvLXRyZWUtbGVhZih2LWVsc2UpXG4gICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgKVxuICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgdnVlLWRyYWdnYWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgQGVuZD1cIm9uRW5kRHJhZygkZXZlbnQsIGNoaWxkcmVuU2NoZW1hKVwiXG4gIClcbiAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgKVxuICAgIC8vIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyZWUtaXRlbShcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gICAgfWBcbiAgICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuICApXG4gICAgLmRpdG8tdHJlZS1oZWFkZXIodi1pZj1cImxhYmVsXCIpXG4gICAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgICAgKVxuICAgICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgICAgKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAgIC5kaXRvLXRyZWUtaW5mbyh2LWlmPVwiZGV0YWlsc1wiKSB7eyBkZXRhaWxzIH19XG4gICAgICAuZGl0by10cmVlLWxlYWYodi1lbHNlKVxuICAgICAgICAuZGl0by10cmVlLWxhYmVsKHYtaHRtbD1cImxhYmVsXCIpXG4gICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgKVxuICAgIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgICApXG4gICAgICAgIHRkXG4gICAgICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgICApXG4gICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGNoaWxkcmVuRHJhZ2dhYmxlLCB0cnVlKVwiXG4gICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWcoJGV2ZW50LCBjaGlsZHJlblNjaGVtYSlcIlxuICAgIClcbiAgICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gY2hpbGRyZW5JdGVtc1wiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0SXRlbURhdGFQYXRoKGNoaWxkcmVuU2NoZW1hLCBpbmRleClcIlxuICAgICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgICAgOm9wZW49XCJpdGVtLm9wZW5cIlxuICAgICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSwgeyBpbmRleCB9KVwiXG4gICAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgICApXG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgICAvLyBwYXNzIGBhc09iamVjdDogdHJ1ZWAgaW4gdGhlIGBnZXRJdGVtTGFiZWwoKWAgY2FsbCBhYm92ZS5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10cmVlLWl0ZW1cbiAgICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH1cbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgICAgPiAuZGl0by10cmVlLWxlYWZcbiAgICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by10cmVlLWhlYWRlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgLmRpdG8tdHJlZS1sZWFmXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgIG1hcmdpbjogMXB4IDBcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIC5kaXRvLXRyZWUtbGFiZWwsXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgLmRpdG8tdHJlZS1pbmZvXG4gICAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbVxuICAgICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAuMilcbiAgICAuZGl0by1idXR0b25zXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgbWFyZ2luLWxlZnQ6IDFlbVxuICAgICAgbWFyZ2luOiAxcHggMCAxcHggMWVtXG4gICAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXJcbiAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlXG4gICAgLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICAgICYuZGl0by1kcmFnZ2luZ1xuICAgICAgLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuXG4gICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgPiAuZGl0by10cmVlLWhlYWRlclxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgPiAuZGl0by10cmVlLWJyYW5jaFxuICAgICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlXG4gICAgICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbFxuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by1wcm9wZXJ0aWVzXG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudFxuICAgICAgPiB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmVcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGNvbnRlbnQ6ICc6ICdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgT3JkZXJlZE1peGluIGZyb20gJy4uL21peGlucy9PcmRlcmVkTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBoYXNGb3JtU2NoZW1hIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdHJlZS1pdGVtJywge1xuICBjb21wb25lbnRzOiB7IFZ1ZURyYWdnYWJsZSB9LFxuICBtaXhpbnM6IFtPcmRlcmVkTWl4aW5dLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0KCkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgKVxuICAgICAgICAgIGNvbnN0IG9wZW4gPSBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gbnVtQ2hpbGRyZW4gJiYgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgfWBcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGgoXG4gICAgICB2LWZvcj1cIihjb2x1bW4sIGluZGV4KSBpbiBjb2x1bW5zXCJcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICApXG4gICAgICByb3V0ZXItbGluayhcbiAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgIClcbiAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAvLyBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNhc3NcbiAgICAgIHNwYW5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgIHRyXG4gICAgICB0aChcbiAgICAgICAgdi1mb3I9XCIoY29sdW1uLCBpbmRleCkgaW4gY29sdW1uc1wiXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICByb3V0ZXItbGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgdGgodi1pZj1cImhhc0VkaXRCdXR0b25zXCIpXG4gICAgICAgIC8vIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Fzc1xuICAgICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdGFibGUtaGVhZFxuICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgIHRyXG4gICAgICB0aFxuICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdFxuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgICAgIC5kaXRvLWJ1dHRvblxuICAgICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZywgc2VlIGJlbG93XG4gICAgICAgICAgcGFkZGluZzogMFxuICAgICAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAgICAgdGV4dC1hbGlnbjogaW5oZXJpdFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDBcbiAgICAgICAgc3BhblxuICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZ1xuICAgICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICAgICAgJjplbXB0eTo6YWZ0ZXJcbiAgICAgICAgICAgIC8vIFByZXZlbnQgZW1wdHkgPHRoPiBmcm9tIGNvbGxhcHNpbmdcbiAgICAgICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInIC8vIHplcm8td2lkdGggc3BhY2VcbiAgICAgICAgPiBzcGFuXG4gICAgICAgICAgZGlzcGxheTogYmxvY2tcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXRhYmxlLWhlYWQnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbHVtbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGhhc0VkaXRCdXR0b25zOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvcnQoKSB7XG4gICAgICBjb25zdCBvcmRlciA9ICh0aGlzLnF1ZXJ5Lm9yZGVyIHx8ICcnKS5zcGxpdCgvXFxzKy8pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBvcmRlclswXSxcbiAgICAgICAgb3JkZXI6IG9yZGVyWzFdXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb2x1bW5DbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jb2x1bW4tJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0U29ydENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZVxuICAgICAgICA/IGBkaXRvLXNlbGVjdGVkIGRpdG8tb3JkZXItJHt0aGlzLnNvcnQub3JkZXJ9YFxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0U29ydExpbmsoY29sdW1uKSB7XG4gICAgICAvLyBUb2dnbGUgb3JkZXIgaWYgdGhlIHNhbWUgY29sdW1uIGlzIGNsaWNrZWQgYWdhaW4uXG4gICAgICBjb25zdCBvcmRlciA9IHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSAmJiB0aGlzLnNvcnQub3JkZXIgPT09ICdhc2MnXG4gICAgICAgID8gJ2Rlc2MnXG4gICAgICAgIDogJ2FzYydcbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgIG9yZGVyOiBgJHtjb2x1bW4ubmFtZX0gJHtvcmRlcn1gXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50ZChcbiAgOmNsYXNzPVwiY2VsbC5jbGFzc1wiXG4gIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuKVxuICAvLyBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgY29tcG9uZW50KFxuICAgIHYtaWY9XCJjb21wb25lbnRcIlxuICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4gIHNwYW4oXG4gICAgdi1lbHNlXG4gICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRkKFxuICAgIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICAgIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuICApXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1pZj1cImNvbXBvbmVudFwiXG4gICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlXG4gICAgICB2LWh0bWw9XCJyZW5kZXJDZWxsKGRhdGEpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGVzY2FwZUh0bWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdGFibGUtY2VsbCcsIHtcbiAgcHJvcHM6IHtcbiAgICBjZWxsOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVHlwZUNvbXBvbmVudCh0aGlzLmNlbGwuY29tcG9uZW50KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyQ2VsbChpdGVtKSB7XG4gICAgICBjb25zdCB7IG5hbWUsIHJlbmRlciB9ID0gdGhpcy5jZWxsXG4gICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bbmFtZV1cbiAgICAgIHJldHVybiByZW5kZXJcbiAgICAgICAgPyByZW5kZXIuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwodmFsdWUpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQSBjb21wb25lbnQgdG8gc2ltcGx5IHBhc3MgdGhyb3VnaCBhbiBleGlzdGluZyB2dWUgdm5vZGUuXG4vLyBTZWU6IGh0dHBzOi8vZm9ydW0udnVlanMub3JnL3QvMjgxNjIvNFxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdm5vZGUnLCB7XG4gIGZ1bmN0aW9uYWw6IHRydWUsXG4gIHJlbmRlcjogKGgsIGNvbnRleHQpID0+IGNvbnRleHQucHJvcHMubm9kZVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gVHlwZUNvbXBvbmVudCBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjb21wb25lbnQgZm9yIGFsbCBvdGhlciB0eXBlIGNvbXBvbmVudHNcbi8vIGluc2lkZSB0aGUgdHlwZXMvIGZvbGRlci4gVGhlcmUncyBhbHNvIGEgc2VwYXJhdGUgY29uY3JldGVcbi8vIGBUeXBlQ29tcG9uZW50LnZ1ZWAgY29tcG9uZW50LCB1c2UgdG8gcmVuZGVyIHRoZSBgdHlwZTogJ2NvbXBvbmVudCdgIHR5cGVzLlxuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IHJlZ2lzdGVyVHlwZUNvbXBvbmVudCwgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5jb25zdCBUeXBlQ29tcG9uZW50ID0gRGl0b0NvbXBvbmVudC5leHRlbmQoe1xuICBtaXhpbnM6IFtUeXBlTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiBmYWxzZSxcbiAgdGV4dEZpZWxkOiBmYWxzZSxcbiAgLy8gU2V0IHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIGFsbCBvZiB0aGVzZSB0aGF0IGFyZSB1c2VkIGJ5IG1vc3QgdHlwZVxuICAvLyBjb21wb25lbnRzLiBUaGVzZSBvbmx5IG5lZWQgZGVmaW5pbmcgaW4gc3ViLWNsYXNzZXMgd2hlbiB0aGV5IGRpZmZlci5cbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkZWZhdWx0TmVzdGVkOiB0cnVlLFxuICBkZWZhdWx0VmlzaWJsZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogdHJ1ZSxcbiAgZXhjbHVkZVZhbHVlOiBmYWxzZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBudWxsLFxuICBvbWl0UGFkZGluZzogZmFsc2Vcbn0pXG5cblR5cGVDb21wb25lbnQucmVnaXN0ZXIgPSBmdW5jdGlvbih0eXBlcywgZGVmaW5pdGlvbiA9IHt9KSB7XG4gIHR5cGVzID0gYXNBcnJheSh0eXBlcylcbiAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQoYGRpdG8tdHlwZS0ke3R5cGVzWzBdfWAsIGRlZmluaXRpb24pXG4gIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5UeXBlQ29tcG9uZW50LmdldCA9IGdldFR5cGVDb21wb25lbnRcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudFxuIiwiXG5idXR0b24uZGl0by1idXR0b24oXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDp0eXBlPVwidHlwZVwiXG4gIDp0aXRsZT1cInRleHRcIlxuICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pIHt7IHRleHQgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnR5cGU9XCJ0eXBlXCJcbiAgICA6dGl0bGU9XCJ0ZXh0XCJcbiAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnYnV0dG9uJywgJ3N1Ym1pdCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcbiAgLy8gVE9ETzogQ29uc2lkZXIgbWFraW5nIHRoaXMgd29yayBuaWNlbHk6XG4gIC8vIG9taXRGbGV4R3JvdzogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmIoKSB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJic1t0aGlzLm5hbWVdIHx8IHRoaXMubmFtZVxuICAgIH0sXG5cbiAgICB0ZXh0OiBnZXRTY2hlbWFBY2Nlc3NvcigndGV4dCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGdldCh0ZXh0KSB7XG4gICAgICAgIHJldHVybiB0ZXh0IHx8IGxhYmVsaXplKHRoaXMudmVyYilcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNsb3NlRm9ybTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Nsb3NlRm9ybScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEBvdmVycmlkZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBjbGljazogdGhpcy5vbkNsaWNrXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZUNvbXBvbmVudD8uc3VibWl0KHRoaXMsIG9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmVtaXRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgICAvLyBIYXZlIGJ1dHRvbnMgdGhhdCBkZWZpbmUgcmVzb3VyY2VzIGNhbGwgYHRoaXMuc3VibWl0KClgIGJ5IGRlZmF1bHQ6XG4gICAgICBpZiAoXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgaGFzUmVzb3VyY2UodGhpcy5zY2hlbWEpXG4gICAgICApIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5pbnB1dC5kaXRvLWNoZWNrYm94KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB0eXBlPVwiY2hlY2tib3hcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jaGVja2JveFxuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3Ncbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNGdW5jdGlvbiwgaXNQcm9taXNlLCBub3JtYWxpemVEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtMb2FkaW5nTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBhc3luY0RhdGFFbnRyaWVzOiB7fVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsIG5hbWUsIHtcbiAgICAgIHJlc29sdmVDb3VudGVyID0gMSxcbiAgICAgIC4uLmxvYWRpbmdPcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgICAgc2NoZW1hID0geyBkYXRhOiBzY2hlbWEgfVxuICAgICAgfVxuICAgICAgbGV0IHsgZGF0YSA9IHVuZGVmaW5lZCwgZGF0YVBhdGggPSBudWxsIH0gPSBzY2hlbWFcbiAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhc3luYyBkYXRhIGxvYWRpbmcgYWxyZWFkeSBpbiBwcm9jZXNzLlxuICAgICAgY29uc3QgYXN5bmNFbnRyeSA9IChcbiAgICAgICAgdGhpcy5hc3luY0RhdGFFbnRyaWVzW25hbWVdIHx8XG4gICAgICAgIHRoaXMuJHNldCh0aGlzLmFzeW5jRGF0YUVudHJpZXMsIG5hbWUsIHtcbiAgICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDAsXG4gICAgICAgICAgcmVzb2x2ZWREYXRhOiBudWxsLFxuICAgICAgICAgIHJlc29sdmluZzogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC8vIElmIHRoZSBkYXRhIGNhbGxiYWNrIHByb3ZpZGVkIGEgZGVwZW5kZW5jeSBmdW5jdGlvbiB3aGVuIGl0IHdhcyBjYWxsZWQsXG4gICAgICAvLyBjYWwgaXQgaW4gZXZlcnkgY2FsbCBvZiBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBmb3JjZSBWdWUgdG8ga2VlcCB0cmFja1xuICAgICAgLy8gb2YgdGhlIGFzeW5jIGRlcGVuZGVuY2llcy5cbiAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uPy5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcblxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPiAwKSB7XG4gICAgICAgIC8vIElmIHRoZSBkYXRhIHdhcyByZXNvbHZlZCBhbHJlYWR5LCByZXR1cm4gaXQgYW5kIGNsZWFyIHRoZSB2YWx1ZSBvbmNlXG4gICAgICAgIC8vIGByZXNvbHZlQ291bnRlcmAgcmVhY2hlcyB6ZXJvLiBDb3VudGluZyBpcyBuZWVkZWQgYmVjYXVzZSBkZXBlbmRpbmdcbiAgICAgICAgLy8gb24gdGhlIHVzZSBvZiBkYXRhIGFuZCByZWFjdGl2aXR5LCBtdWx0aXBsZSBjYWxscyB0byB0aGUgY29tcHV0ZWRcbiAgICAgICAgLy8gZ2V0dGVyIGFyZSB0cmlnZ2VyZWQgd2hlbiB0aGUgZGF0YSBpcyBjaGFuZ2luZy4gQ2xlYXJpbmcgdGhlIHJlc29sdmVkXG4gICAgICAgIC8vIGRhdGEgd29ya3MgYmVjYXVzZSBWdWUgY2FjaGVzIHRoZSByZXN1bHQgb2YgY29tcHV0ZWQgZ2V0dGVycyBhbmQgb25seVxuICAgICAgICAvLyByZWV2YWx1YXRlcyBpZiBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VkLiBUaGlzIGlzIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IGEgY2FjaGVkIHZhbHVlIGhlcmUgZG9lc24ndCBibG9jayAvIG92ZXJyaWRlIHJlZXZhbHVhdGlvbjpcbiAgICAgICAgY29uc3QgeyByZXNvbHZlZERhdGEgfSA9IGFzeW5jRW50cnlcbiAgICAgICAgaWYgKC0tYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9PT0gMCkge1xuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNvbHZlZERhdGFcbiAgICAgIH1cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgdGhlIGRhdGEgZnVuY3Rpb24gdHdpY2U6XG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZpbmcpIHtcbiAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBmdW5jdGlvbiBpcyBhbm90aGVyIGZ1bmN0aW9uLCB0aGVuIHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGRhdGEgZnVuY3Rpb24gaXMgdGhlcmUgdG8gdHJhY2sgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmVhbFxuICAgICAgICAgIC8vIGRhdGEgbG9hZGluZyBoYXBwZW5zIGluIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkLiBLZWVwIHRyYWNrXG4gICAgICAgICAgLy8gaXQgaW4gYGRlcGVuZGVuY3lGdW5jdGlvbmAgc28gaXQgY2FuIGJlIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2ZcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgaW50YWN0LCBhbmQgY2FsbFxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkIG9uY2UgdG8gZ2V0IHRoZSBhY3R1YWwgZGF0YTpcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbiA9IGRhdGFcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHQuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9IHJlc29sdmVDb3VudGVyXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IGRhdGFcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi9EYXRhTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgc2V0VGVtcG9yYXJ5SWQsIGlzUmVmZXJlbmNlIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZywgaXNGdW5jdGlvbixcbiAgbm9ybWFsaXplRGF0YVBhdGgsIGxhYmVsaXplLCBkZWJvdW5jZUFzeW5jXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzT3B0aW9uczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmhhc09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgID8gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICAgICAgPyB0aGlzLnZhbHVlLm1hcChjb252ZXJ0VmFsdWUpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICA6IGNvbnZlcnRWYWx1ZSh0aGlzLnZhbHVlKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gV2hlbiByZWxhdGluZyBhbmQgYXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLi4uXG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgdGhpcy5oYXNPcHRpb25zICYmIChcbiAgICAgICAgICAgIC8vIC4uLmlmIHRoZSB2YWx1ZSBpcyBmb3JjZWQgdG8gbnVsbCBiZWNhdXNlIGEgZGlzYXBwZWFyZWQgb3B0aW9uLi4uXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbCAmJiB0aGlzLnZhbHVlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAvLyAuLi5vciBpZiB0aGUgdmFsdWUgaXMgYSByZWZlcmVuY2UsIHJlcGxhY2UgaXQgd2l0aCBpdHMgb3B0aW9uXG4gICAgICAgICAgICAvLyB2YWx1ZSwgc28gdGhhdCBpdCdsbCBob2xkIGFjdHVhbCBkYXRhLCBub3QganVzdCBhIHJlZmVyZW5jZSBpZC5cbiAgICAgICAgICAgIGlzUmVmZXJlbmNlKHRoaXMudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSB2YWx1ZSA9PiB0aGlzLnJlbGF0ZVxuICAgICAgICAgID8gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnQpXG4gICAgICAgICAgOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnLCB7XG4gICAgICAgIHJlc29sdmVDb3VudGVyOiAxXG4gICAgICB9KSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICB0aGlzLmhhc09wdGlvbnMgPSBkYXRhLmxlbmd0aCA+IDBcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcHRpb25zKGRhdGEpXG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gYFR5cGVNdWx0aXNlbGVjdGAgdG8gcmV0dXJuIHRoZSBgc2VhcmNoZWRPcHRpb25zYFxuICAgICAgLy8gd2hlbiBhIHNlYXJjaCBmaWx0ZXIgd2FzIGFwcGxpZWQuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBncm91cEJ5TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ2xhYmVsJyA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ29wdGlvbnMnIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0T3B0aW9uS2V5KGtleSkge1xuICAgICAgY29uc3QgW29wdGlvbl0gPSB0aGlzLmFjdGl2ZU9wdGlvbnNcbiAgICAgIHJldHVybiBpc09iamVjdChvcHRpb24pICYmIGtleSBpbiBvcHRpb24gPyBrZXkgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5yZWxhdGUpIHtcbiAgICAgICAgICAvLyBJZiBpZHMgYXJlIG1pc3NpbmcgYW5kIHdlIHdhbnQgdG8gcmVsYXRlLCBzZXQgdGVtcG9yYXJ5IGlkcy5cbiAgICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgYWN0dWFsIGRhdGEsIG1ha2luZyBhIGNvcHkgd29uJ3Qgd29ya1xuICAgICAgICAgIC8vIGFzIGl0IHdvbid0IHByb3BhZ2F0ZS5cbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGRhdGEgaXMgZnJvbSB0aGUgZ3JhcGggdGhhdFxuICAgICAgICAgIC8vIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nLlxuICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghKCdpZCcgaW4gb3B0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUZW1wb3JhcnlJZChvcHRpb24sICdpZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICBjb25zdCBncm91cGVkID0ge31cbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzdWx0cywgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uW3RoaXMuZ3JvdXBCeV1cbiAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gZ3JvdXBlZFtncm91cF1cbiAgICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gZ3JvdXBlZFtncm91cF0gPSB7XG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5TGFiZWxdOiBncm91cCxcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlPcHRpb25zXTogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVudHJ5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVudHJ5Lm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW11cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfSxcblxuICAgIGhhc09wdGlvbihvcHRpb24pIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgIH0sXG5cbiAgICBnZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3QgZmluZE9wdGlvbiA9IChvcHRpb25zLCB2YWx1ZSwgZ3JvdXBCeSkgPT4ge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBvcHRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIHdob2xlIG9iamVjdC5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb24ob3B0aW9uLm9wdGlvbnMsIHZhbHVlLCBudWxsKVxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZVxuICAgICAgICA/IGZpbmRPcHRpb24odGhpcy5hY3RpdmVPcHRpb25zLCB2YWx1ZSwgdGhpcy5ncm91cEJ5KVxuICAgICAgICA6IHZhbHVlXG4gICAgfSxcblxuICAgIGdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvblZhbHVlKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvblZhbHVlXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBsYWJlbGl6ZShgJHtvcHRpb259YClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiB2YWx1ZSA/IHsgaWQ6IHZhbHVlLmlkIH0gOiB2YWx1ZVxuICAgICAgLy8gU2VsZWN0ZWQgb3B0aW9ucyBjYW4gYmUgYm90aCBvYmplY3RzICYgYXJyYXlzLCBlLmcuICdjaGVja2JveGVzJzpcbiAgICAgIHZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc1JlbGF0ZSlcbiAgICAgICAgOiBwcm9jZXNzUmVsYXRlKHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiXG51bC5kaXRvLWNoZWNrYm94ZXMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdWwuZGl0by1jaGVja2JveGVzKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4gIClcbiAgICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgICBsYWJlbFxuICAgICAgICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY2hlY2tib3hlc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tY2hlY2tib3hcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IChvcHRpb24gfHwgW10pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWNvZGUoXG4gIHJlZj1cImNvZGVcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvZGUoXG4gICAgcmVmPVwiY29kZVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzdHlsZT1cInN0eWxlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNvZGVcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC8vIEZvciBwcm9wcGVyIHNpemluZyBvZiBjb250ZW50IGFsb25nIHdpdGggOnN0eWxlPVwic3R5bGVcIiBzZXR0aW5nIGFib3ZlLFxuICAgIC8vIGZvciBwcm9wZXIgbGluZS1oZWlnaHQgY2FsY3VsYXRpb24uXG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IGF1dG9cbiAgICAuY29kZWZsYXNrXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICAvLyBJZ25vcmUgdGhlcGFyZW50IHBhZGRpbmcgZGVmaW5lZCBhYm92ZSB3aGljaCBpcyBvbmx5IG5lZWRlZCB0byBzZXRcbiAgICAgIC8vIHRoZSBkZXNpcmVkIGhlaWdodCB3aXRoIDpzdHlsZT1cInN0eWxlXCIuXG4gICAgICB0b3A6IDBcbiAgICAgIGxlZnQ6IDBcbiAgICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgICAuY29kZWZsYXNrX19wcmVcbiAgICAgIC8vIFVzZSBzYW1lIHBhZGRpbmcgYXMgLmRpdG8tY29kZVxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgICAuY29kZWZsYXNrX19jb2RlLFxuICAgIC5jb2RlZmxhc2tfX2xpbmVzXG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9cbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplKVxuICAgICAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KVxuICAgIC5jb2RlZmxhc2tfX2xpbmVzXG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IENvZGVGbGFzayBmcm9tICdjb2RlZmxhc2snXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2RlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAzXG4gICAgfSxcblxuICAgIHN0eWxlKCkge1xuICAgICAgcmV0dXJuIGBoZWlnaHQ6IGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBmbGFzayA9IG5ldyBDb2RlRmxhc2sodGhpcy4kcmVmcy5jb2RlLCB7XG4gICAgICBsYW5ndWFnZTogdGhpcy5zY2hlbWEubGFuZ3VhZ2UgfHwgJ2phdmFzY3JpcHQnLFxuICAgICAgdGFiU2l6ZTogdGhpcy5zY2hlbWEuaW5kZW50U2l6ZSB8fCAyLFxuICAgICAgbGluZU51bWJlcnM6IGZhbHNlXG4gICAgfSlcblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgIGxldCBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICB0aGlzLmRvbU9uKHRoaXMuJHJlZnMuY29kZS5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpLCB7XG4gICAgICBmb2N1czogb25Gb2N1cyxcbiAgICAgIGJsdXI6IG9uQmx1clxuICAgIH0pXG5cbiAgICBjb25zdCBzZXRDb2RlID0gY29kZSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gZmxhc2suY29kZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSB0cnVlXG4gICAgICAgIGZsYXNrLnVwZGF0ZUNvZGUoY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICAgIG9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmbGFzay5vblVwZGF0ZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlVXBkYXRlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldENvZGUodmFsdWUgfHwgJycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldENvZGUodGhpcy52YWx1ZSB8fCAnJylcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50cmlnZ2VyLmRpdG8tY29sb3IoXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuKVxuICAuZGl0by1pbnB1dChcbiAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgKVxuICAgIGlucHV0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB0eXBlPVwiaW5wdXRcIlxuICAgICAgc2l6ZT1cIjhcIlxuICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuICAgIC5kaXRvLWNvbG9yLXByZXZpZXcuZGl0by1pbmhlcml0LWZvY3VzKFxuICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICApXG4gICAgICBkaXYoOnN0eWxlPVwieyBiYWNrZ3JvdW5kOiBgIyR7aGV4VmFsdWUgfHwgJzAwMDAwMDAwJ31gIH1cIilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICBza2V0Y2gtcGlja2VyLmRpdG8tY29sb3ItcGlja2VyKFxuICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgIDpkaXNhYmxlLWFscGhhPVwiIWFscGhhXCJcbiAgICA6ZGlzYWJsZS1maWVsZHM9XCIhaW5wdXRzXCJcbiAgICA6cHJlc2V0LWNvbG9ycz1cInByZXNldHNcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB0cmlnZ2VyLmRpdG8tY29sb3IoXG4gICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICA6c2hvdy5zeW5jPVwic2hvd1BvcHVwXCJcbiAgKVxuICAgIC5kaXRvLWlucHV0KFxuICAgICAgc2xvdD1cInRyaWdnZXJcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCJcbiAgICApXG4gICAgICBpbnB1dChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgICAgc2l6ZT1cIjhcIlxuICAgICAgICB2LW1vZGVsPVwiaGV4VmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICAuZGl0by1jb2xvci1wcmV2aWV3LmRpdG8taW5oZXJpdC1mb2N1cyhcbiAgICAgICAgdi1pZj1cInZhbHVlXCJcbiAgICAgIClcbiAgICAgICAgZGl2KDpzdHlsZT1cInsgYmFja2dyb3VuZDogYCMke2hleFZhbHVlIHx8ICcwMDAwMDAwMCd9YCB9XCIpXG4gICAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gICAgc2tldGNoLXBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICAgIHNsb3Q9XCJwb3B1cFwiXG4gICAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgICA6ZGlzYWJsZS1hbHBoYT1cIiFhbHBoYVwiXG4gICAgICA6ZGlzYWJsZS1maWVsZHM9XCIhaW5wdXRzXCJcbiAgICAgIDpwcmVzZXQtY29sb3JzPVwicHJlc2V0c1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gICRjb2xvci1zd2F0Y2gtd2lkdGg6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeS1zaXplXG4gICRjb2xvci1zd2F0Y2gtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtICRib3JkZXItd2lkdGhcbiAgLmRpdG8tY29sb3JcbiAgICAuZGl0by1pbnB1dFxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgaW5wdXRcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIG1hcmdpbi1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgIC5kaXRvLWNvbG9yLXBpY2tlclxuICAgICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGVcbiAgICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93XG4gICAgLmRpdG8tY29sb3ItcHJldmlld1xuICAgICAgYmFja2dyb3VuZDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5XG4gICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZVxuICAgICAgJixcbiAgICAgIGRpdlxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgd2lkdGg6ICRjb2xvci1zd2F0Y2gtd2lkdGhcbiAgICAgICAgdG9wOiAwXG4gICAgICAgIHJpZ2h0OiAwXG4gICAgICAgIGJvdHRvbTogMFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXNcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHRpbnljb2xvciBmcm9tICd0aW55Y29sb3IyJ1xuaW1wb3J0IHsgU2tldGNoIGFzIFNrZXRjaFBpY2tlciB9IGZyb20gJ3Z1ZS1jb2xvcidcbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBUcmlnZ2VyIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2xvcicsIHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBTa2V0Y2hQaWNrZXIgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IGZhbHNlLFxuICAgICAgY29udmVydGVkSGV4VmFsdWU6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb2xvclZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlIHx8IHt9XG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gdGhpcy5jb2xvckZvcm1hdFxuICAgICAgICBjb25zdCBrZXkgPSB7XG4gICAgICAgICAgLy8gTk9URTogdnVlLWNvbG9yIGNhbGxzIGl0ICdoZXgnLCB3aGlsZSB0aW55Y29sb3IgY2FsbHMgaXQgJ2hleDYnXG4gICAgICAgICAgaGV4OiB2YWx1ZT8uYSA8IDEgPyAnaGV4OCcgOiAnaGV4JyxcbiAgICAgICAgICByZ2I6ICdyZ2JhJ1xuICAgICAgICB9W2Zvcm1hdF0gfHwgZm9ybWF0XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aW55Y29sb3IodmFsdWUpLnRvU3RyaW5nKGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgYWxwaGE6IGdldFNjaGVtYUFjY2Vzc29yKCdhbHBoYScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgZm9jdXNlZChmb2N1c2VkKSB7XG4gICAgICBpZiAoIWZvY3VzZWQgJiYgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcihgIyR7dGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZX1gKVxuICAgICAgICBpZiAoY29sb3I/LmlzVmFsaWQoKSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBjb2xvci50b1N0cmluZyh0aGlzLmNvbG9yRm9ybWF0KVxuICAgICAgICAgIC8vIFRPRE86IEVtaXQgJ2lucHV0JyBoZXJlIGluc3RlYWQsIGFuZCAnY2hhbmdlJyBpbiBibHVyLCBsaWtlIG90aGVycy5cbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgOmlzPVwiY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgIHYtYmluZD1cIiRwcm9wc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVUeXBlQ29tcG9uZW50KClgLiBUaGlzIGNhblxuLy8gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8gIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4gIC8vICBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG4gIGlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bmFtZT1cIm5hbWVcIlxuICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICA6dmFsdWU9XCJ2YWx1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInRydWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbidcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJywge1xuICAgICAgICAgICAgLy8gTW9kaWZ5aW5nIGB0aGlzLmRhdGFgIGJlbG93IHRyaWdnZXJzIGFub3RoZXIgY2FsbCBvZiB0aGUgYHZhbHVlYFxuICAgICAgICAgICAgLy8gZ2V0dGVyLCBzbyB1c2UgYSB2YWx1ZSBvZiAyIGZvciBgcmVzb2x2ZUNvdW50ZXJgIHRvIHJldHVybiB0aGVcbiAgICAgICAgICAgIC8vIHJlc29sdmVkIGRhdGEgdHdpY2UuXG4gICAgICAgICAgICByZXNvbHZlQ291bnRlcjogMlxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy4kc2V0KHRoaXMuZGF0YSwgdGhpcy5uYW1lLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLmdldC5jYWxsKHRoaXMpXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgVHlwZU1peGluLmNvbXB1dGVkLnZhbHVlLnNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1kYXRlXG4gIGNvbXBvbmVudChcbiAgICA6aXM9XCJnZXRDb21wb25lbnQodHlwZSlcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6bG9jYWxlPVwibG9jYWxlXCJcbiAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tZGF0ZVxuICAgIGNvbXBvbmVudChcbiAgICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgICB2LW1vZGVsPVwiZGF0ZVZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IHsgaXNEYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWUnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9LFxuICAvLyBUT0RPOiBUaGlzIGlzIG9ubHkgaGVyZSBzbyB3ZSBnZXQgcGxhY2Vob2xkZXIgYWRkZWQuIENvbWUgdXAgd2l0aCBhIGJldHRlclxuICAvLyB3YXkgdG8gc3VwcG9ydCBhdHRyaWJ1dGVzIHBlciBjb21wb25lbnQgKGEgbGlzdCBvZiBhY3R1YWxseSBzdXBwb3J0ZWRcbiAgLy8gYXR0cmlidXRlcylcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGRhdGVWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRhdGVGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkYXRlRm9ybWF0Jywge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbXBvbmVudCh0eXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkYXRlOiAnZGF0ZS1waWNrZXInLFxuICAgICAgICB0aW1lOiAndGltZS1waWNrZXInLFxuICAgICAgICBkYXRldGltZTogJ2RhdGUtdGltZS1waWNrZXInXG4gICAgICB9W3R5cGVdXG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRGF0ZSh2YWx1ZSkgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogdmFsdWVcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4vUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuLi9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciwgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYSwgcHJvY2Vzc0Zvcm1zLCBnZXROYW1lZFNjaGVtYXMsIGdldEJ1dHRvblNjaGVtYXMsXG4gIGhhc0Zvcm1TY2hlbWEsIGdldEZvcm1TY2hlbWFzLCBnZXRWaWV3U2NoZW1hLFxuICBoYXNMYWJlbHMsIGlzQ29tcGFjdCwgaXNJbmxpbmVkLFxuICBpc09iamVjdFNvdXJjZSwgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc1N0cmluZywgaXNBcnJheSwgaXNOdW1iZXIsIGVxdWFscyxcbiAgcGFyc2VEYXRhUGF0aCwgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbUmVzb3VyY2VNaXhpbiwgU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGRlZmF1bHRWYWx1ZShzY2hlbWEpIHtcbiAgICByZXR1cm4gaXNMaXN0U291cmNlKHNjaGVtYSkgPyBbXSA6IG51bGxcbiAgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyYXBwZWRQcmltaXRpdmVzOiBudWxsLFxuICAgICAgdW53cmFwcGluZ1ByaW1pdGl2ZXM6IGZhbHNlLFxuICAgICAgaWdub3JlUm91dGVDaGFuZ2U6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgaXNPYmplY3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICBpc0xpc3RTb3VyY2UoKSB7XG4gICAgICByZXR1cm4gaXNMaXN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgaXNSZWFkeSgpIHtcbiAgICAgIC8vIExpc3RzIHRoYXQgaGF2ZSBubyBkYXRhIGFuZCBubyBhc3NvY2lhdGVkIHJlc291cmNlIHNob3VsZCBzdGlsbCByZW5kZXIsXG4gICAgICAvLyBhcyB0aGV5IG1heSBiZSBnZXR0aW5nIHRoZWlyIGRhdGEgZWxzZXdoZXJlLCBlLmcuIGBjb21wdXRlKClgLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzRGF0YSB8fCAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNJblZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdDb21wb25lbnRcbiAgICB9LFxuXG4gICAgd3JhcFByaW1pdGl2ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEud3JhcFByaW1pdGl2ZXNcbiAgICB9LFxuXG4gICAgbGlzdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnZhbHVlXG4gICAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgICAgLy8gQ29udmVydCB0byBsaXN0IGFycmF5LlxuICAgICAgICAgIGRhdGEgPSBkYXRhICE9IG51bGwgPyBbZGF0YV0gOiBbXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIGRhdGEgZ2V0cyBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIHVud3JhcHBpbmcgaXMgbm90IGhhcHBlbmluZ1xuICAgICAgICAgIC8vIGF0IHRoZSByb290IGluIGBzZXREYXRhKClgLCBidXQgaGVyZSBpbnN0ZWFkLlxuICAgICAgICAgIGRhdGEgPSB0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpIHx8IGRhdGFcbiAgICAgICAgfVxuICAgICAgICBkYXRhID0gZGF0YSB8fCBbXVxuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICAgIGlmICh0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBkb25lIHVud3JhcHBpbmcgb25jZSBgbGlzdERhdGFgIGlzIHJlZXZhbHVhdGVkLCBzbyBzZXRcbiAgICAgICAgICAgIC8vIHRoaXMgdG8gYGZhbHNlYCBhZ2Fpbi4gU2VlIGB3cmFwcGVkUHJpbWl0aXZlc2Agd2F0Y2hlciBhYm92ZS5cbiAgICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEgdG8gYSBsaXN0IG9mIHdyYXBwZWQgcHJpbWl0aXZlcywgYW5kIHJldHVybiBpdC5cbiAgICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhLm1hcCh2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiB2YWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRQcmltaXRpdmVzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAoZGF0YSAmJiBkYXRhLmxlbmd0aCA+IDAgPyBkYXRhWzBdIDogbnVsbClcbiAgICAgICAgICAgIDogZGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9iamVjdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gQWx3YXlzIGdvIHRocm91Z2ggYGxpc3REYXRhYCBpbnRlcm5hbGx5LCB3aGljaCBkb2VzIGFsbCB0aGVcbiAgICAgICAgLy8gcHJvY2Vzc2luZyBvZiBgd3JhcFByaW1pdGl2ZXNgLCBldGMuXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3REYXRhWzBdIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBkYXRhID8gW2RhdGFdIDogW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgLy8gVGhlIHNvdXJjZVNjaGVtYSBvZiBhIGxpc3QgaXMgdGhlIGxpc3QncyBzY2hlbWEgaXRzZWxmLlxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICAvLyBUaGlzIGlzIHVzZWQgaW4gVHlwZUxpc3QgZm9yIERpdG9Gb3JtQ2hvb3Nlci5cbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aCh0aGlzLnNjaGVtYS5wYXRoKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0UXVlcnkoKSB7XG4gICAgICBjb25zdCB7IGRlZmF1bHRPcmRlcjogb3JkZXIgfSA9IHRoaXNcbiAgICAgIHJldHVybiBvcmRlciA/IHsgb3JkZXIgfSA6IHt9XG4gICAgfSxcblxuICAgIHF1ZXJ5OiBnZXRTdG9yZUFjY2Vzc29yKCdxdWVyeScsIHtcbiAgICAgIGdldChxdWVyeSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdFF1ZXJ5LFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAvLyBBbHdheXMga2VlcCB0aGUgZGlzcGxheWVkIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gc3luYyB3aXRoIHRoZSBzdG9yZWRcbiAgICAgICAgLy8gb25lcy4gVXNlIHNjb3BlIGFuZCBwYWdlIGZyb20gdGhlIGxpc3Qgc2NoZW1hIGFzIGRlZmF1bHRzLCBidXQgYWxsb3dcbiAgICAgICAgLy8gdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gb3ZlcnJpZGUgdGhlbS5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNjb3BlID0gdGhpcy5kZWZhdWx0U2NvcGU/Lm5hbWUsXG4gICAgICAgICAgcGFnZSA9IHRoaXMuc2NoZW1hLnBhZ2VcbiAgICAgICAgfSA9IHRoaXMucXVlcnlcbiAgICAgICAgLy8gUHJlc2VydmUgLyBtZXJnZSBjdXJyZW50bHkgc3RvcmVkIHZhbHVlcy5cbiAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAuLi4oc2NvcGUgIT0gbnVsbCAmJiB7IHNjb3BlIH0pLFxuICAgICAgICAgIC4uLihwYWdlICE9IG51bGwgJiYgeyBwYWdlIH0pLFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlcXVhbHMocXVlcnksIHRoaXMuJHJvdXRlLnF1ZXJ5KSkge1xuICAgICAgICAgIC8vIFRlbGwgdGhlIGAkcm91dGVgIHdhdGNoZXIgdG8gaWdub3JlIHRoZSBjaGFuZ2VkIHRyaWdnZXJlZCBoZXJlOlxuICAgICAgICAgIHRoaXMuaWdub3JlUm91dGVDaGFuZ2UgPSB0cnVlXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBxdWVyeSwgaGFzaDogdGhpcy4kcm91dGUuaGFzaCB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBxdWVyeSAvLyBMZXQgZ2V0U3RvcmVBY2Nlc3NvcigpIGRvIHRoZSBhY3R1YWwgc2V0dGluZ1xuICAgICAgfVxuICAgIH0pLFxuXG4gICAgdG90YWw6IGdldFN0b3JlQWNjZXNzb3IoJ3RvdGFsJyksXG5cbiAgICBjb2x1bW5zKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5jb2x1bW5zKVxuICAgIH0sXG5cbiAgICBzY29wZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnNjb3BlcylcbiAgICB9LFxuXG4gICAgZGVmYXVsdFNjb3BlKCkge1xuICAgICAgaWYgKHRoaXMuc2NvcGVzKSB7XG4gICAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2NvcGVzKSkge1xuICAgICAgICAgIGlmIChzY29wZS5kZWZhdWx0U2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaXJzdFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWZhdWx0T3JkZXIoKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFNvcnQgfSA9IGNvbHVtblxuICAgICAgICAgIGlmIChkZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaXNTdHJpbmcoZGVmYXVsdFNvcnQpID8gZGVmYXVsdFNvcnQgOiAnYXNjJ1xuICAgICAgICAgICAgcmV0dXJuIGAke2NvbHVtbi5uYW1lfSAke2RpcmVjdGlvbn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhnZXRGb3JtU2NoZW1hcyh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KSlcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgbGlua2VkIHZpZXcgc2NoZW1hIGlmIHRoaXMgc291cmNlIGVkaXRzIGl0IGl0cyBpdGVtcyB0aHJvdWdoXG4gICAgLy8gYSBsaW5rZWQgdmlldy5cbiAgICB2aWV3KCkge1xuICAgICAgcmV0dXJuIGdldFZpZXdTY2hlbWEodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZpZXdcbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKHRoaXMuc2NoZW1hLmJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGhhc0xhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1zLnNvbWUoaGFzTGFiZWxzKVxuICAgIH0sXG5cbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5ldmVyeShpc0NvbXBhY3QpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHBhZ2luYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncGFnaW5hdGUnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHJlbmRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbmRlcicsIHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICAgICAgPyB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/ICF0aGlzLnZhbHVlXG4gICAgICAgICAgICA6IHRydWVcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiAhdGhpcy5pc0lubGluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2UgJiYgdGhpcy5saXN0RGF0YS5sZW5ndGggPiAxICYmIGRyYWdnYWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsLCAvLyBzbyB0aGF0IGA/P2AgYmVsb3cgY2FuIGRvIGl0cyB0aGluZzpcbiAgICAgIGdldChjb2xsYXBzaWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0lubGluZWQgJiYgISEoY29sbGFwc2libGUgPz8gdGhpcy5jb2xsYXBzZWQgIT09IG51bGwpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIGlmICh0aGlzLmlnbm9yZVJvdXRlQ2hhbmdlKSB7XG4gICAgICAgIHRoaXMuaWdub3JlUm91dGVDaGFuZ2UgPSBmYWxzZVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChmcm9tLnBhdGggPT09IHRvLnBhdGggJiYgZnJvbS5oYXNoID09PSB0by5oYXNoKSB7XG4gICAgICAgIC8vIFBhdGhzIGFuZCBoYXNoZXMgcmVtYWluIHRoZSBzYW1lLCBzbyBvbmx5IHF1ZXJpZXMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgICAvLyBVcGRhdGUgZmlsdGVyIGFuZCByZWxvYWQgZGF0YSB3aXRob3V0IGNsZWFyaW5nLlxuICAgICAgICB0aGlzLnF1ZXJ5ID0gdG8ucXVlcnlcbiAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JhcHBlZFByaW1pdGl2ZXM6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIC8vIFNraXAgdGhlIGluaXRpYWwgc2V0dGluZyBvZiB3cmFwcGVkUHJpbWl0aXZlcyBhcnJheVxuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgb2xkVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciB0aGUgd3JhcHBlZFByaW1pdGl2ZXMgY2hhbmdlLCBtYXAgdGhlaXIgdmFsdWVzIGJhY2sgdG9cbiAgICAgICAgICAvLyB0aGUgYXJyYXkgb2YgcHJpbWl0aXZlcywgaW4gYSBwcmltaXRpdmUgd2F5IDopXG4gICAgICAgICAgLy8gQnV0IHNldCBgdW53cmFwcGluZ1ByaW1pdGl2ZXMgPSB0cnVlYCwgc28gdGhlIGBsaXN0RGF0YWAgY29tcHV0ZWRcbiAgICAgICAgICAvLyBwcm9wZXJ0eSBrbm93cyBhYm91dCBpdCwgd2hpY2ggc2V0cyBpdCB0byBgZmFsc2VgIGFnYWluLlxuICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSB0cnVlXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5jbGVhckRhdGEoKVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMudG90YWwgPSAwXG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXREYXRhKClcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIC8vIFdoZW4gbmV3IGRhdGEgaXMgbG9hZGVkLCB3ZSBjYW4gc3RvcmUgaXQgcmlnaHQgYmFjayBpbiB0aGUgZGF0YSBvZiB0aGVcbiAgICAgIC8vIHZpZXcgb3IgZm9ybSB0aGF0IGNyZWF0ZWQgdGhpcyBsaXN0IGNvbXBvbmVudC5cbiAgICAgIC8vIFN1cHBvcnQgdHdvIGZvcm1hdHMgZm9yIGxpc3QgZGF0YTpcbiAgICAgIC8vIC0gQXJyYXk6IGBbLi4uXWBcbiAgICAgIC8vIC0gT2JqZWN0OiBgeyByZXN1bHRzOiBbLi4uXSwgdG90YWwgfWAsIHNlZSBgdW53cmFwTGlzdERhdGEoKWBcbiAgICAgIGlmIChcbiAgICAgICAgIWRhdGEgfHxcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiYgaXNBcnJheShkYXRhKSB8fFxuICAgICAgICB0aGlzLmlzT2JqZWN0U291cmNlICYmIGlzT2JqZWN0KGRhdGEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSkge1xuICAgICAgICAvLyBUaGUgZm9ybWF0IGRpZG4ndCBtYXRjaCwgc2VlIGlmIHdlIHJlY2VpdmVkIGEgYHsgcmVzdWx0cywgdG90YWwgfWBcbiAgICAgICAgLy8gb2JqZWN0LCBpbiB3aGljaCBjYXNlIGB0aGlzLnZhbHVlYCB3YXMgYWxyZWFkeSBzZXQgYnlcbiAgICAgICAgLy8gYHVud3JhcExpc3REYXRhKClgIGFuZCB3ZSdyZSBkb25lIG5vdy5cbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGF0YSkgJiYgdGhpcy5pc0luVmlldykge1xuICAgICAgICAvLyBUaGUgY29udHJvbGxlciBpcyBzZW5kaW5nIGRhdGEgZm9yIGEgZnVsbCBtdWx0aS1jb21wb25lbnQgdmlldyxcbiAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSBuZXN0ZWQgbGlzdCBkYXRhLlxuICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1bndyYXBMaXN0RGF0YShkYXRhKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmXG4gICAgICAgIGlzT2JqZWN0KGRhdGEpICYmXG4gICAgICAgIGlzTnVtYmVyKGRhdGEudG90YWwpICYmXG4gICAgICAgIGlzQXJyYXkoZGF0YS5yZXN1bHRzKVxuICAgICAgKSB7XG4gICAgICAgIC8vIElmIEBkaXRvanMvc2VydmVyIHNlbmRzIGRhdGEgaW4gdGhlIGZvcm0gb2YgYHsgcmVzdWx0cywgdG90YWwgfWBcbiAgICAgICAgLy8gcmVwbGFjZSB0aGUgdmFsdWUgd2l0aCByZXN1bHQsIGJ1dCByZW1lbWJlciB0aGUgdG90YWwgaW4gdGhlIHN0b3JlLlxuICAgICAgICB0aGlzLnRvdGFsID0gZGF0YS50b3RhbFxuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YS5yZXN1bHRzXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oc2NoZW1hLCB0eXBlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5jcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSlcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IGl0ZW1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEucHVzaChpdGVtKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy5vcGVuU2NoZW1hQ29tcG9uZW50KC0xKSlcbiAgICAgIH1cbiAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgcmV0dXJuIGl0ZW1cbiAgICB9LFxuXG4gICAgcmVtb3ZlSXRlbShpdGVtKSB7XG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBpbmRleCA9IGxpc3REYXRhICYmIGxpc3REYXRhLmluZGV4T2YoaXRlbSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBsaXN0RGF0YS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZXRlSXRlbShpdGVtLCBpbmRleCkge1xuICAgICAgY29uc3QgbGFiZWwgPSBpdGVtICYmIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCBpdGVtLCB7XG4gICAgICAgIGluZGV4LFxuICAgICAgICBleHRlbmRlZDogdHJ1ZVxuICAgICAgfSlcblxuICAgICAgY29uc3Qgbm90aWZ5ID0gKCkgPT4gdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiB0aGlzLmlzVHJhbnNpZW50ID8gJ2luZm8nIDogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgdGV4dDogW1xuICAgICAgICAgIGAke2xhYmVsfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmAsXG4gICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgIF1cbiAgICAgIH0pXG5cbiAgICAgIGlmIChpdGVtICYmIHdpbmRvdy5jb25maXJtKFxuICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5kZWxldGV9ICR7bGFiZWx9P2ApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICBub3RpZnkoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtKVxuICAgICAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0TWVtYmVyUmVzb3VyY2UoaXRlbUlkLCB0aGlzLnJlc291cmNlKVxuICAgICAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZGVsZXRlJywgcmVzb3VyY2UgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICAgICAgICBub3RpZnkoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHNjaGVtYUNvbXBvbmVudHNcbiAgICAgIHJldHVybiBzY2hlbWFDb21wb25lbnRzWygoaW5kZXggJSBsZW5ndGgpICsgbGVuZ3RoKSAlIGxlbmd0aF1cbiAgICB9LFxuXG4gICAgb3BlblNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpXG4gICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlVG9Db21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVBhdGguc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICAgID8gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gcGFyc2VEYXRhUGF0aChkYXRhUGF0aC5zbGljZSh0aGlzLmRhdGFQYXRoLmxlbmd0aCArIDEpKVswXSA/PyBudWxsXG4gICAgICAgICAgICA6IDBcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIGlzTnVtYmVyKCtpbmRleCkpIHtcbiAgICAgICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudCgraW5kZXgpXG4gICAgICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBvcGVuZWQgfSA9IHNjaGVtYUNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDAgJiYgKG9uQ29tcGxldGU/Lihjb21wb25lbnRzKSA/PyB0cnVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IG9wZW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxPbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCwgd2hpY2ggd2lsbCBiZSB0aGUgY29tcG9uZW50IHRoYXRcbiAgICAgICAgICAvLyB3ZSBqdXN0IG5hdmlnYXRlZCB0bywgYW5kIHBhc3MgaXQgb24gdG8gYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgICAgIGNvbnN0IHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnRzW3JvdXRlQ29tcG9uZW50cy5sZW5ndGggLSAxXVxuICAgICAgICAgIHJlc29sdmUob25Db21wbGV0ZT8uKFtyb3V0ZUNvbXBvbmVudF0pID8/IHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgcm91dGUgdGhhdCBjYW4gc2VydmUgcGFydCBvZiB0aGUgZ2l2ZW4gZGF0YVBhdGgsXG4gICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgoXG4gICAgICAgICAgICB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoUGFydHMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYWN0dWFsbHkgaXMgYSByb3V0ZSBmb3IgdGhpcyBzdWItY29tcG9uZW50OlxuICAgICAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVyLm1hdGNoKHBhdGgpXG4gICAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kcm91dGUucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSB0aGVyZSwgc28ganVzdCBjYWxsIGBvbkNvbXBsZXRlKClgOlxuICAgICAgICAgICAgICBjYWxsT25Db21wbGV0ZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIGNvbXBvbmVudCdzIHBhdGgsIHRoZW4gY2FsbCBgb25Db21wbGV0ZSgpYF86XG4gICAgICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgICAgICAgIHsgcGF0aCB9LFxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCB0byBiZSBtb3VudGVkIGluIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgLy8gdGljayBiZWZvcmUgY2FsbGluZyBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGNhbGxPbkNvbXBsZXRlKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gS2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgIH0pXG4gICAgfVxuICB9LCAvLyBlbmQgb2YgYG1ldGhvZHNgXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSwgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0xpc3RzIHdpdGggbmVzdGVkIGZvcm1zIGNhbm5vdCBsb2FkIGRhdGEgZnJvbSB0aGVpciBvd24gcmVzb3VyY2VzJ1xuICAgICAgKVxuICAgIH1cbiAgICAvLyBVc2UgZGlmZmVyZW50bHkgbmFtZWQgdXJsIHBhcmFtZXRlcnMgb24gZWFjaCBuZXN0ZWQgbGV2ZWwgZm9yIGlkIGFzXG4gICAgLy8gb3RoZXJ3aXNlIHRoZXkgd291bGQgY2xhc2ggYW5kIG92ZXJyaWRlIGVhY2ggb3RoZXIgaW5zaWRlICRyb3V0ZS5wYXJhbXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgY29uc3QgcGFyYW0gPSBgaWQke2xldmVsICsgMX1gXG4gICAgY29uc3QgbWV0YSA9IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgICBjb25zdCBmb3JtTWV0YSA9IHtcbiAgICAgIC4uLm1ldGEsXG4gICAgICAvLyBXaGVuIGNoaWxkcmVuIGFyZSBmbGF0dGVuZWQgKGUuZy4gdHJlZS1saXN0cyksIGluY2x1ZGUgdGhlIGBmbGF0dGVuYFxuICAgICAgLy8gc2V0dGluZyBhbHNvLCBmb3IgZmxhdHRlbmluZyBiZWxvdy5cbiAgICAgIGZsYXR0ZW4sXG4gICAgICBuZXN0ZWQsXG4gICAgICBwYXJhbVxuICAgIH1cbiAgICBjb25zdCBjaGlsZFJvdXRlcyA9IGF3YWl0IHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3MoY2hpbGRSb3V0ZXMsIGxldmVsICsgMSlcbiAgICB9XG4gICAgLy8gSW5saW5lZCBmb3JtcyBkb24ndCBuZWVkIHRvIGFjdHVhbGx5IGFkZCByb3V0ZXMuXG4gICAgaWYgKGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAhaW5saW5lZCkge1xuICAgICAgY29uc3QgZ2V0UGF0aFdpdGhQYXJhbSA9IChwYXRoLCBwYXJhbSkgPT4gcGFyYW1cbiAgICAgICAgPyBwYXRoXG4gICAgICAgICAgPyBgJHtwYXRofS86JHtwYXJhbX1gXG4gICAgICAgICAgOiBgOiR7cGFyYW19YFxuICAgICAgICA6IHBhdGhcblxuICAgICAgLy8gTGlzdHMgaW4gc2luZ2xlLWNvbXBvbmVudC12aWV3cyAobGV2ZWwgPT09IDApIHVzZSB0aGVpciB2aWV3J3MgcGF0aCxcbiAgICAgIC8vIHdoaWxlIGFsbCBvdGhlcnMgbmVlZCB0aGVpciBwYXRoIHByZWZpeGVkIHdpdGggdGhlIHBhcmVudCdzIHBhdGg6XG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gbGV2ZWwgPT09IDAgPyAnJyA6IHNjaGVtYS5wYXRoXG4gICAgICBjb25zdCBmb3JtUm91dGUgPSB7XG4gICAgICAgIC8vIE9iamVjdCBzb3VyY2VzIGRvbid0IG5lZWQgaWQgcGFyYW1zIGluIHRoZWlyIGZvcm0gcGF0aHMsIGFzIHRoZXlcbiAgICAgICAgLy8gZGlyZWN0bHkgZWRpdCBvbmUgb2JqZWN0LlxuICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIGlzTGlzdFNvdXJjZShzY2hlbWEpICYmIHBhcmFtKSxcbiAgICAgICAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudChcbiAgICAgICAgICBuZXN0ZWQgPyAnZGl0by1mb3JtLW5lc3RlZCcgOiAnZGl0by1mb3JtJ1xuICAgICAgICApLFxuICAgICAgICBtZXRhOiBmb3JtTWV0YVxuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHNjaGVtYSkpIHtcbiAgICAgICAgLy8gQWxzbyBhZGQgYSBwYXJhbSByb3V0ZSwgc2ltcGx5IHRvIGhhbmRsZSAnL2NyZWF0ZScgbGlua3MgdGhlIHNhbWVcbiAgICAgICAgLy8gd2F5IHRoYXQgbGlzdHMgZG8sIHdoZXJlIGl0IG92ZXJsYXBzIHdpdGggOmlkIGZvciBpdGVtIGlkcy5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIC4uLmZvcm1Sb3V0ZSxcbiAgICAgICAgICBwYXRoOiBnZXRQYXRoV2l0aFBhcmFtKHNvdXJjZVBhdGgsIHBhcmFtKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZVBhdGgpIHtcbiAgICAgICAgLy8gSnVzdCByZWRpcmVjdCBiYWNrIHRvIHRoZSBwYXJlbnQgd2hlbiBhIG5lc3RlZCBzb3VyY2Ugcm91dGUgaXMgaGl0LlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgcGF0aDogc291cmNlUGF0aCxcbiAgICAgICAgICByZWRpcmVjdDogJy4nLFxuICAgICAgICAgIG1ldGFcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIC8vIFBhcnRpdGlvbiBjaGlsZFJvdXRlcyBpbnRvIHRob3NlIHRoYXQgbmVlZCBmbGF0dGVuaW5nIChlLmcuIHRyZWUtbGlzdHMpXG4gICAgICAvLyBhbmQgdGhvc2UgdGhhdCBkb24ndCwgYW5kIHByb2Nlc3MgZWFjaCBncm91cCBzZXBhcmF0ZWx5IGFmdGVyLlxuICAgICAgY29uc3QgW2ZsYXRSb3V0ZXMsIHN1YlJvdXRlc10gPSBjaGlsZFJvdXRlcy5yZWR1Y2UoXG4gICAgICAgIChyZXMsIHJvdXRlKSA9PiB7XG4gICAgICAgICAgcmVzW3JvdXRlLm1ldGEuZmxhdHRlbiA/IDAgOiAxXS5wdXNoKHJvdXRlKVxuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfSxcbiAgICAgICAgW1tdLCBbXV1cbiAgICAgIClcbiAgICAgIGlmIChzdWJSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvcm1Sb3V0ZS5jaGlsZHJlbiA9IHN1YlJvdXRlc1xuICAgICAgfVxuICAgICAgcm91dGVzLnB1c2goZm9ybVJvdXRlKVxuICAgICAgLy8gQWRkIHRoZSBwcmVmaXhlZCBmb3JtUm91dGVzIHdpdGggdGhlaXIgY2hpbGRyZW4gZm9yIG5lc3RlZCBsaXN0cy5cbiAgICAgIGlmIChmbGF0Um91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkUm91dGUgb2YgZmxhdFJvdXRlcykge1xuICAgICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLihjaGlsZFJvdXRlLnJlZGlyZWN0ID8gY2hpbGRSb3V0ZSA6IGZvcm1Sb3V0ZSksXG4gICAgICAgICAgICBwYXRoOiBgJHtmb3JtUm91dGUucGF0aH0vJHtjaGlsZFJvdXRlLnBhdGh9YCxcbiAgICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgICAgLi4uY2hpbGRSb3V0ZS5tZXRhLFxuICAgICAgICAgICAgICBmbGF0dGVuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgZ3JhcGguYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpXG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGFzQXJyYXksIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGZpbHRlckNvbXBvbmVudHMgPSB7XG4gIHRleHQoZmlsdGVyKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdjb250YWlucycsXG4gICAgICAgIHZhbHVlOiAnY29udGFpbnMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VxdWFscycsXG4gICAgICAgIHZhbHVlOiAnZXF1YWxzJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdzdGFydHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnc3RhcnRzLXdpdGgnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ2VuZHMgd2l0aCcsXG4gICAgICAgIHZhbHVlOiAnZW5kcy13aXRoJ1xuICAgICAgfVxuICAgIF1cbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvcnNcbiAgICAgICAgPyB7XG4gICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgb3B0aW9uczpcbiAgICAgICAgICAgIGlzQXJyYXkoZmlsdGVyLm9wZXJhdG9ycylcbiAgICAgICAgICAgICAgPyBvcHRpb25zLmZpbHRlcihcbiAgICAgICAgICAgICAgICBvcHRpb24gPT4gZmlsdGVyLm9wZXJhdG9ycy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBvcHRpb25zLFxuICAgICAgICAgIHdpZHRoOiAnNDAlJ1xuICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB3aWR0aDogZmlsdGVyLm9wZXJhdG9ycyA/ICc2MCUnIDogJ2ZpbGwnXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gICdkYXRlLXJhbmdlJygpIHtcbiAgICAvLyBVc2Ugc2hvcnRlciBkYXRlIGZvcm1hdCBpbiBkYXRlLXJhbmdlIGZpbHRlcnM6XG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHtcbiAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbToge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgIGRhdGVGb3JtYXRcbiAgICAgIH0sXG4gICAgICB0bzoge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzUwJScsXG4gICAgICAgIGRhdGVGb3JtYXRcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbHRlcnNQYW5lbChmaWx0ZXJzLCBkYXRhUGF0aCwgcHJveHkpIHtcbiAgY29uc3QgcGFuZWwgPSB7XG4gICAgbGFiZWw6ICdGaWx0ZXJzJyxcbiAgICBuYW1lOiAnJGZpbHRlcnMnLFxuICAgIHRhcmdldDogZGF0YVBhdGgsXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgLy8gTk9URTogT24gcGFuZWxzLCB0aGUgZGF0YSgpIGNhbGxiYWNrIGRvZXMgc29tZXRoaW5nIGVsc2UgdGhhbiBvbiBub3JtYWxcbiAgICAvLyBzY2hlbWE6IEl0IHByb2R1Y2VzIHRoZSBgZGF0YWAgcHJvcGVydHkgdG8gYmUgcGFzc2VkIHRvIHRoZSBwYW5lbCdzXG4gICAgLy8gc2NoZW1hLCBub3QgdGhlIGRhdGEgdG8gYmUgdXNlZCBmb3IgdGhlIHBhbmVsIGNvbXBvbmVudCBkaXJlY3RseS5cbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmlsdGVyc0RhdGEoXG4gICAgICAgIHBhbmVsLFxuICAgICAgICBwcm94eS5xdWVyeVxuICAgICAgKVxuICAgIH0sXG4gICAgY29tcG9uZW50czogZ2V0RmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycyksXG4gICAgYnV0dG9uczoge1xuICAgICAgY2xlYXI6IHtcbiAgICAgICAgdGV4dDogJ0NsZWFyJyxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LnJlc2V0RGF0YSgpXG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGZpbHRlcjoge1xuICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgdGV4dDogJ0ZpbHRlcicsXG4gICAgICAgIGV2ZW50czoge1xuICAgICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgYXBwbHlGaWx0ZXJzKCkge1xuICAgICAgICBwcm94eS5xdWVyeSA9IHtcbiAgICAgICAgICAuLi5wcm94eS5xdWVyeSxcbiAgICAgICAgICBmaWx0ZXI6IGZvcm1hdEZpbHRlcnNEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpLFxuICAgICAgICAgIC8vIENsZWFyIHBhZ2luYXRpb24gd2hlbiBhcHBseWluZyBvciBjbGVhcmluZyBmaWx0ZXJzOlxuICAgICAgICAgIHBhZ2U6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbFxufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSB7XG4gIGNvbnN0IGNvbXBzID0ge31cbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgT2JqZWN0LnZhbHVlcyhmaWx0ZXJzIHx8IHt9KSkge1xuICAgIC8vIFN1cHBvcnQgYm90aCBjdXN0b20gZm9ybXMgYW5kIGRlZmF1bHQgZmlsdGVyIGNvbXBvbmVudHMsIHRocm91Z2ggdGhlXG4gICAgLy8gYGZpbHRlckNvbXBvbmVudHNgIHJlZ2lzdHJ5LiBFdmVuIGZvciBkZWZhdWx0IGZpbHRlcnMsIHN0aWxsIHVzZSB0aGVcbiAgICAvLyBwcm9wZXJ0aWVzIGluIGBmaWx0ZXJgIGFzIHRoZSBiYXNlIGZvciBgZm9ybWAsIHNvIHRoaW5ncyBsaWtlIGBsYWJlbGBcbiAgICAvLyBjYW4gYmUgY2hhbmdlZCBvbiB0aGUgcmVzdWx0aW5nIGZvcm0uXG4gICAgY29uc3QgeyBmaWx0ZXI6IHR5cGUsIC4uLmZvcm0gfSA9IGZpbHRlclxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0eXBlXG4gICAgICA/IGZpbHRlckNvbXBvbmVudHNbdHlwZV0/LihmaWx0ZXIpXG4gICAgICA6IGZpbHRlci5jb21wb25lbnRzXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvcm0uY29tcG9uZW50cyA9IHt9XG4gICAgICAvLyBDb252ZXJ0IGxhYmVscyB0byBwbGFjZWhvbGRlcnM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gY29tcG9uZW50LmxhYmVsIHx8IGxhYmVsaXplKGNvbXBvbmVudC5uYW1lIHx8IGtleSlcbiAgICAgICAgICBmb3JtLmNvbXBvbmVudHNba2V5XSA9IHtcbiAgICAgICAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYWJlbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29tcHNbZmlsdGVyLm5hbWVdID0ge1xuICAgICAgICBsYWJlbDogZm9ybS5sYWJlbCxcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlubGluZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBmaWx0ZXIgJyR7ZmlsdGVyLm5hbWV9JzogVW5rbm93biBmaWx0ZXIgdHlwZSAnJHt0eXBlfScuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcHNcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHNbbmFtZV1cbiAgcmV0dXJuIGNvbXBvbmVudD8uZm9ybT8uY29tcG9uZW50c1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGaWx0ZXJzRGF0YShzY2hlbWEsIGRhdGEpIHtcbiAgY29uc3QgZmlsdGVycyA9IFtdXG4gIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZW50cnkgPSBkYXRhW25hbWVdXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICAvLyBNYXAgY29tcG9uZW50cyBzZXF1ZW5jZSB0byBhcmd1bWVudHM6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmtleXMoZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpKS5tYXAoXG4gICAgICAgIGtleSA9PiBlbnRyeVtrZXldID8/IG51bGxcbiAgICAgIClcbiAgICAgIC8vIE9ubHkgYXBwbHkgZmlsdGVyIGlmIHRoZXJlIGFyZSBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZW4ndCBudWxsOlxuICAgICAgaWYgKGFyZ3Muc29tZSh2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKGAke25hbWV9OiR7YXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywnKX1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVycy5sZW5ndGggPyBmaWx0ZXJzIDogdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIHBhcnNlRmlsdGVyc0RhdGEoc2NoZW1hLCBxdWVyeSkge1xuICBjb25zdCBmaWx0ZXJzID0ge31cbiAgLy8gU2FtZSBhcyBAZGl0b2pzL3NlcnZlcidzIFF1ZXJ5UGFyYW1ldGVycy5maWx0ZXI6IFRyYW5zbGF0ZSB0aGUgc3RyaW5nIGRhdGFcbiAgLy8gZnJvbSAkcm91dGUucXVlcnkgYmFjayB0byBwYXJhbSBsaXN0cyBwZXIgZmlsdGVyOlxuICBpZiAocXVlcnkpIHtcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBhc0FycmF5KHF1ZXJ5LmZpbHRlcikpIHtcbiAgICAgIGNvbnN0IFssIG5hbWUsIGpzb25dID0gZmlsdGVyLm1hdGNoKC9eKFxcdyspOiguKikkLylcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbHRlcnNbbmFtZV0gPSBhc0FycmF5KEpTT04ucGFyc2UoYFske2pzb259XWApKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3QgZmlsdGVyc0RhdGEgPSB7fVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gc2NoZW1hLmNvbXBvbmVudHMpIHtcbiAgICBjb25zdCBkYXRhID0ge31cbiAgICAvLyBJZiB3ZSBoYXZlIHJldHJpZXZlZCBwYXJhbXMgZnJvbSB0aGUgcXVlcnksIGZldGNoIHRoZSBhc3NvY2lhdGVkXG4gICAgLy8gZm9ybSBjb21wb25lbnRzIHNvIHdlIGNhbiBtYXAgdGhlIHZhbHVlcyBiYWNrIHRvIG9iamVjdCBrZXlzOlxuICAgIGNvbnN0IGFyZ3MgPSBmaWx0ZXJzW25hbWVdXG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSlcbiAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29tcG9uZW50cykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IGFyZ3NbaW5kZXgrK11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaWx0ZXJzRGF0YVtuYW1lXSA9IGRhdGFcbiAgfVxuICByZXR1cm4gZmlsdGVyc0RhdGFcbn1cbiIsIlxuLmRpdG8tbGlzdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4pXG4gIC5kaXRvLW5hdmlnYXRpb25cbiAgICBkaXRvLXNjb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAvLyBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cInBhZ2luYXRlXCJcbiAgICApXG4gICAgZGl0by1wYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cInBhZ2luYXRlXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgIClcbiAgdGFibGUuZGl0by10YWJsZShcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICB9YFxuICApXG4gICAgZGl0by10YWJsZS1oZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgOmxpc3Q9XCJ1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3REYXRhLCBwYWdpbmF0aW9uUmFuZ2UpXCJcbiAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIml0ZW0sIGluZGV4IGluIGxpc3REYXRhXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoc2NoZW1hLCBpdGVtKVwiXG4gICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKHYtaWY9XCJjb2x1bW5zXCIpXG4gICAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKGNvbHVtbilcIlxuICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIDpjZWxsPVwiY29sdW1uXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICA6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIlxuICAgICAgICApXG4gICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgKVxuICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICBkaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmIHNpbmdsZVwiXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbGlzdChcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gICAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbiAgKVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpdG8tc2NvcGVzKFxuICAgICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICAgIClcbiAgICAgIC8vIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAgIC8vIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgICAuZGl0by1zcGFjZXIoXG4gICAgICAgIHYtZWxzZS1pZj1cInBhZ2luYXRlXCJcbiAgICAgIClcbiAgICAgIGRpdG8tcGFnaW5hdGlvbihcbiAgICAgICAgdi1pZj1cInBhZ2luYXRlXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgICAgKVxuICAgIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgICA6Y2xhc3M9YHtcbiAgICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgICAgfWBcbiAgICApXG4gICAgICBkaXRvLXRhYmxlLWhlYWQoXG4gICAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgICApXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIml0ZW0sIGluZGV4IGluIGxpc3REYXRhXCJcbiAgICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImNvbHVtbnNcIilcbiAgICAgICAgICAgIGRpdG8tdGFibGUtY2VsbChcbiAgICAgICAgICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgIHRkXG4gICAgICAgICAgICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCwgYXNPYmplY3Q6IHRydWUgfSlcIlxuICAgICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgICAgdGZvb3QoXG4gICAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiAhc2luZ2xlXCJcbiAgICAgIClcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgOmNvbHNwYW49XCJudW1Db2x1bW5zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICApXG4gICAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICBkaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbGlzdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLW5hdmlnYXRpb25cbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgcGFkZGluZy1ib3R0b206ICRjb250ZW50LXBhZGRpbmctaGFsZlxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgICAmOmVtcHR5XG4gICAgICAgIGRpc3BsYXk6IG5vbmVcbiAgICAgIC5kaXRvLXNjb3BlcyxcbiAgICAgIC5kaXRvLXBhZ2luYXRpb25cbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgICBmbGV4OiAwIDEgYXV0b1xuICAgICAgICBtaW4td2lkdGg6IDBcbiAgICAmLmRpdG8tc2luZ2xlXG4gICAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgICBkaXNwbGF5OiBncmlkXG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50XG4gICAgICBoZWlnaHQ6IDEwMCVcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBnZXRWaWV3RWRpdFBhdGggfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlRHJhZ2dhYmxlIH0sXG4gIG1peGluczogW1NvdXJjZU1peGluLCBPcmRlcmVkTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEsIGRhdGFQYXRoLCBzY2hlbWFDb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAvLyBBdCB0aGUgdGltZSBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHBhbmVsIHNjaGVtYSwgdGhlIHNjaGVtYUNvbXBvbmVudCBpc1xuICAgICAgLy8gbm90IGZpbGxlZCB5ZXQsIHNvIHdlIGNhbid0IGdldCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAoZGF0YVBhdGgpIHJpZ2h0XG4gICAgICAvLyBhd2F5LiBVc2UgYSBwcm94eSBhbmQgYSBnZXR0ZXIgaW5zdGVhZCwgdG8gZ2V0IGFyb3VuZCB0aGlzOlxuICAgICAgY29uc3QgZ2V0TGlzdENvbXBvbmVudCA9ICgpID0+IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgY29tcG9uZW50ID0+IGNvbXBvbmVudC50eXBlID09PSAnbGlzdCdcbiAgICAgIClcblxuICAgICAgcmV0dXJuIGdldEZpbHRlcnNQYW5lbChcbiAgICAgICAgZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpLFxuICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgeyAvLyBDcmVhdGUgYSBzaW1wbGUgcHJveHkgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgICAgZ2V0IHF1ZXJ5KCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldExpc3RDb21wb25lbnQoKT8ucXVlcnlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldCBxdWVyeShxdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gZ2V0TGlzdENvbXBvbmVudCgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIHZhbHVlcyBmb3IgY29tcGFyaW5nIHdpdGggZXF1YWxzKClcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHBpY2tCeShvYmosIHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5xdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzTGlzdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gISEoXG4gICAgICAgIHRoaXMuYnV0dG9uU2NoZW1hcyB8fFxuICAgICAgICB0aGlzLmNyZWF0YWJsZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiBsaXN0RGF0YS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgdGhpcy5lZGl0YWJsZSB8fFxuICAgICAgICB0aGlzLmRlbGV0YWJsZSB8fFxuICAgICAgICB0aGlzLmRyYWdnYWJsZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDZWxsRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNJbmxpbmVkICYmIHRoaXMuaGFzRWRpdEJ1dHRvbnNcbiAgICB9LFxuXG4gICAgaGFzRXZlbkNvdW50KCkge1xuICAgICAgcmV0dXJuICEodGhpcy5saXN0RGF0YS5sZW5ndGggJSAyKVxuICAgIH0sXG5cbiAgICBudW1Db2x1bW5zKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29sdW1ucyA/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucykubGVuZ3RoIDogMSkgK1xuICAgICAgICAodGhpcy5oYXNDZWxsRWRpdEJ1dHRvbnMgPyAxIDogMClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERhdGFQYXRoKGluZGV4KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgfSxcblxuICAgIGdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpIHx8IHRoaXMucGF0aFxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgcmV0dXJuIGAke3BhdGh9LyR7aWR9YFxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q2VsbENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNlbGwtJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0Q29udGV4dChpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgZGF0YVBhdGg6IHRoaXMuZ2V0RGF0YVBhdGgoaW5kZXgpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZpbHRlckVycm9ycyhlcnJvcnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNEYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsICckZmlsdGVycycpXG4gICAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldFBhbmVsQnlEYXRhUGF0aChmaWx0ZXJzRGF0YVBhdGgpXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWwuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5kaXRvLWxhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KDpsYWJlbD1cInZhbHVlXCIgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGRpdG8tbGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoOmxhYmVsPVwidmFsdWVcIiA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWxhYmVsLWNvbXBvbmVudFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBoZWlnaHQ6IDJlbVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsYWJlbCcsIHtcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1tYXJrdXAoXG4gIDppZD1cImRhdGFQYXRoXCJcbilcbiAgZWRpdG9yLW1lbnUtYmFyLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gICAgKVxuICAgICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCIsXG4gICAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICAgIClcbiAgICAgICAgICBpY29uKDpuYW1lPVwiaWNvblwiKVxuICBlZGl0b3ItY29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgcmVmPVwiZWRpdG9yXCJcbiAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gIC5kaXRvLXJlc2l6ZShcbiAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW1hcmt1cChcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gIClcbiAgICBlZGl0b3ItbWVudS1iYXIuZGl0by1tYXJrdXAtdG9vbGJhcig6ZWRpdG9yPVwiZWRpdG9yXCIpXG4gICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIixcbiAgICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGljb24oOm5hbWU9XCJpY29uXCIpXG4gICAgZWRpdG9yLWNvbnRlbnQuZGl0by1tYXJrdXAtZWRpdG9yKFxuICAgICAgcmVmPVwiZWRpdG9yXCJcbiAgICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgICApXG4gICAgLmRpdG8tcmVzaXplKFxuICAgICAgdi1pZj1cInJlc2l6YWJsZVwiXG4gICAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLW1hcmt1cFxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgICAuZGl0by1yZXNpemVcbiAgICAgIEBleHRlbmQgJWljb24tcmVzaXplXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgIHRvcDogdW5zZXRcbiAgICAgIGxlZnQ6IHVuc2V0XG4gICAgICByaWdodDogMFxuICAgICAgYm90dG9tOiAwXG4gICAgICB3aWR0aDogMWVtXG4gICAgICBoZWlnaHQ6IDFlbVxuXG4gICAgLlByb3NlTWlycm9yXG4gICAgICBoZWlnaHQ6IDEwMCVcbiAgICAgIG91dGxpbmU6IG5vbmVcblxuICAgIC5kaXRvLW1hcmt1cC1lZGl0b3JcbiAgICAgIG92ZXJmbG93LXk6IHNjcm9sbFxuICAgICAgLy8gTW92ZSBwYWRkaW5nIFwiaW5zaWRlXCIgZWRpdG9yIHRvIGNvcnJlY3RseSBwb3NpdGlvbiBzY3JvbGxiYXJcbiAgICAgIG1hcmdpbi1yaWdodDogLSRpbnB1dC1wYWRkaW5nLWhvclxuICAgICAgcGFkZGluZy1yaWdodDogJGlucHV0LXBhZGRpbmctaG9yXG5cbiAgICAuZGl0by1idXR0b25zLXRvb2xiYXJcbiAgICAgIG1hcmdpbjogJGlucHV0LXBhZGRpbmctdmVyIDBcblxuICAgIGgxLFxuICAgIGgyLFxuICAgIGgzLFxuICAgIHAsXG4gICAgdWwsXG4gICAgb2wsXG4gICAgcHJlLFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIG1hcmdpbjogMXJlbSAwXG4gICAgICAmOmZpcnN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi10b3A6IDBcbiAgICAgICY6bGFzdC1jaGlsZFxuICAgICAgICBtYXJnaW4tYm90dG9tOiAwXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDNcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkXG4gICAgaDFcbiAgICAgIGZvbnQtc2l6ZTogMS40cmVtXG4gICAgaDJcbiAgICAgIGZvbnQtc2l6ZTogMS4ycmVtXG4gICAgdWxcbiAgICAgIGxpc3Qtc3R5bGU6IGRpc2NcbiAgICBjb2RlXG4gICAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm9cbiAgICBwcmVcbiAgICAgIHBhZGRpbmc6IDAuN3JlbSAxcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlclxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgb3ZlcmZsb3cteDogYXV0b1xuICAgICAgY29kZVxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgIHAgY29kZVxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICBwYWRkaW5nOiAwIDAuM3JlbVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyXG4gICAgYVxuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmVcbiAgICAgIGN1cnNvcjogZGVmYXVsdFxuICAgICAgY29sb3I6IGJsdWVcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lXG4gICAgdWwsXG4gICAgb2xcbiAgICAgIHBhZGRpbmctbGVmdDogMnJlbVxuICAgIGxpXG4gICAgICAmID4gcCxcbiAgICAgICYgPiBvbCxcbiAgICAgICYgPiB1bFxuICAgICAgICBtYXJnaW46IDBcbiAgICBibG9ja3F1b3RlXG4gICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICRjb2xvci1saWdodGVyXG4gICAgICBwYWRkaW5nLWxlZnQ6IDFyZW1cbiAgICAgIGZvbnQtc3R5bGU6IGl0YWxpY1xuICAgICAgcFxuICAgICAgICBtYXJnaW46IDBcblxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IEVkaXRvciwgRWRpdG9yQ29udGVudCwgRWRpdG9yTWVudUJhciwgTWFyayB9IGZyb20gJ3RpcHRhcCdcbmltcG9ydCB7IHRvZ2dsZU1hcmsgfSBmcm9tICd0aXB0YXAtY29tbWFuZHMnXG5pbXBvcnQge1xuICAvLyBNYXJrczpcbiAgQm9sZCwgQ29kZSwgSXRhbGljLCBMaW5rLCBTdHJpa2UsIFVuZGVybGluZSxcbiAgLy8gTm9kZXM6XG4gIEJsb2NrcXVvdGUsIENvZGVCbG9jaywgSGFyZEJyZWFrLCBIZWFkaW5nLCBIb3Jpem9udGFsUnVsZSxcbiAgT3JkZXJlZExpc3QsIEJ1bGxldExpc3QsIExpc3RJdGVtLFxuICAvLyBUT0RPOlxuICAvLyAtIEltYWdlLCBNZW50aW9uLCBDb2RlQmxvY2tIaWdobGlnaHRcbiAgLy8gLSBUYWJsZSwgVGFibGVDZWxsLCBUYWJsZUhlYWRlciwgVGFibGVOb2RlcywgVGFibGVSb3csXG4gIC8vIC0gVG9kb0l0ZW0sIFRvZG9MaXN0XG4gIC8vIFRvb2xzOlxuICBIaXN0b3J5XG59IGZyb20gJ3RpcHRhcC1leHRlbnNpb25zJ1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgdW5kZXJzY29yZSwgaHlwaGVuYXRlLCBkZWJvdW5jZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbWFya3VwJywge1xuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBFZGl0b3JNZW51QmFyLFxuICAgIEljb25cbiAgfSxcblxuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGNvbW1hbmQgPT4gdGhpcy5vbkNsaWNrTGluayhjb21tYW5kKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBiYXNpY05vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIHBhcmFncmFwaDoge1xuICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGUgcGFyYWdyYXBoIGNvbW1hbmQgYXMgYWN0aXZlIGlmIGFueSBvZiB0aGUgYmxvY2tcbiAgICAgICAgLy8gY29tbWFuZHMgYXJlIGFsc28gYWN0aXZlOlxuICAgICAgICAgIGlnbm9yZUFjdGl2ZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMub3RoZXJOb2RlQnV0dG9ucy5zb21lKGJ1dHRvbiA9PiBidXR0b24uaXNBY3RpdmUpXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRpbmc6IHtcbiAgICAgICAgICBhdHRyOiAnbGV2ZWwnLFxuICAgICAgICAgIHZhbHVlczogWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG90aGVyTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcbiAgICAgICAgb3JkZXJlZExpc3Q6IHRydWUsXG4gICAgICAgIGJsb2NrcXVvdGU6IHRydWUsXG4gICAgICAgIGNvZGVCbG9jazogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdG9vbEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCd0b29scycsIHtcbiAgICAgICAgdW5kbzogdHJ1ZSxcbiAgICAgICAgcmVkbzogdHJ1ZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ3JvdXBlZEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgfSA9IHRoaXNcbiAgICAgIHJldHVybiBbXG4gICAgICAgIG1hcmtCdXR0b25zLFxuICAgICAgICBiYXNpY05vZGVCdXR0b25zLFxuICAgICAgICBvdGhlck5vZGVCdXR0b25zLFxuICAgICAgICB0b29sQnV0dG9uc1xuICAgICAgXS5maWx0ZXIoYnV0dG9ucyA9PiBidXR0b25zLmxlbmd0aCA+IDApXG4gICAgfSxcblxuICAgIHBhcnNlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByZXNlcnZlV2hpdGVzcGFjZToge1xuICAgICAgICAgICdjb2xsYXBzZSc6IGZhbHNlLFxuICAgICAgICAgICdwcmVzZXJ2ZSc6IHRydWUsXG4gICAgICAgICAgJ3ByZXNlcnZlLWFsbCc6ICdmdWxsJ1xuICAgICAgICB9W3RoaXMud2hpdGVzcGFjZV1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVkaXRhYmxlOiAhdGhpcy5yZWFkeW9ubHksXG4gICAgICAgIGF1dG9Gb2N1czogdGhpcy5hdXRvZm9jdXMsXG4gICAgICAgIGRpc2FibGVJbnB1dFJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5pbnB1dCxcbiAgICAgICAgZGlzYWJsZVBhc3RlUnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLnBhc3RlLFxuICAgICAgICBwYXJzZU9wdGlvbnM6IHRoaXMucGFyc2VPcHRpb25zXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgd2hpdGVzcGFjZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3doaXRlc3BhY2UnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnY29sbGFwc2UnXG4gICAgICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlOiAnY29sbGFwc2UnLCAncHJlc2VydmUnLCAncHJlc2VydmUtYWxsJ1xuICAgIH0pLFxuXG4gICAgZW5hYmxlUnVsZXM6IGdldFNjaGVtYUFjY2Vzc29yKCdlbmFibGVSdWxlcycsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZW5hYmxlUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGVuYWJsZVJ1bGVzKVxuICAgICAgICAgID8gZW5hYmxlUnVsZXNcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHJlYWR5b25seTogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGF1dG9mb2N1czogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnLFxuICAgIGVuYWJsZVJ1bGVzOiAndXBkYXRlRWRpdG9yT3B0aW9ucydcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZURlYm91bmNlZCA9IGRlYm91bmNlKGdldFZhbHVlID0+IHtcbiAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgdGhpcy52YWx1ZSA9IGdldFZhbHVlKClcbiAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfSwgMTAwKVxuXG4gICAgY29uc3Qgb25VcGRhdGUgPSAoeyBnZXRIVE1MIH0pID0+IHtcbiAgICAgIHNldFZhbHVlRGVib3VuY2VkKGdldEhUTUwpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmNyZWF0ZUV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhjb21tYW5kKSB7XG4gICAgICBjb25zdCBhdHRycyA9IGF3YWl0IHRoaXMuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgaHJlZjogbnVsbCxcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiBudWxsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogdGhpcy5lZGl0b3IuZ2V0TWFya0F0dHJzKCdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cnMpIHtcbiAgICAgICAgbGV0IHsgaHJlZiwgdGl0bGUgfSA9IGF0dHJzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LCBwcmVmaXggaXQgd2l0aFxuICAgICAgICAgIC8vIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwOi8vJHtocmVmfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tbWFuZCh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUV4dGVuc2lvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtzID0ge30sXG4gICAgICAgIG5vZGVzID0ge30sXG4gICAgICAgIHRvb2xzID0ge31cbiAgICAgIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy8gc2NoZW1hLm1hcmtzOlxuICAgICAgICBtYXJrcy5ib2xkICYmIG5ldyBCb2xkKCksXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBuZXcgSXRhbGljKCksXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBuZXcgVW5kZXJsaW5lKCksXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBuZXcgU3RyaWtlKCksXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIG5ldyBTbWFsbCgpLFxuICAgICAgICBtYXJrcy5jb2RlICYmIG5ldyBDb2RlKCksXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgbmV3IExpbmtXaXRoVGl0bGUoKSxcblxuICAgICAgICAvLyBzY2hlbWEubm9kZXM6XG4gICAgICAgIG5vZGVzLmJsb2NrcXVvdGUgJiYgbmV3IEJsb2NrcXVvdGUoKSxcbiAgICAgICAgbm9kZXMuY29kZUJsb2NrICYmIG5ldyBDb2RlQmxvY2soKSxcbiAgICAgICAgbmV3IEhhcmRCcmVhaygpLCAvLyBUT0RPOiBTaG91bGQgdGhpcyBhbHdheXMgb24/XG4gICAgICAgIG5vZGVzLmhlYWRpbmcgJiYgbmV3IEhlYWRpbmcoeyBsZXZlbHM6IG5vZGVzLmhlYWRpbmcgfSksXG4gICAgICAgIG5vZGVzLmhvcml6b250YWxSdWxlICYmIG5ldyBIb3Jpem9udGFsUnVsZSgpLFxuICAgICAgICAobm9kZXMub3JkZXJlZExpc3QgfHwgbm9kZXMuYnVsbGV0TGlzdCkgJiYgbmV3IExpc3RJdGVtKCksXG4gICAgICAgIG5vZGVzLmJ1bGxldExpc3QgJiYgbmV3IEJ1bGxldExpc3QoKSxcbiAgICAgICAgbm9kZXMub3JkZXJlZExpc3QgJiYgbmV3IE9yZGVyZWRMaXN0KCksXG4gICAgICAgIC8vIFRPRE86XG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIG5ldyBUb2RvSXRlbSgpLFxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBuZXcgVG9kb0xpc3QoKSxcblxuICAgICAgICAvLyBzY2hlbWEudG9vbHM6XG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgbmV3IEhpc3RvcnkoKVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgYXR0cnMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5lZGl0b3IuaXNBY3RpdmVbbmFtZV1cbiAgICAgICAgY29uc3QgY29tbWFuZCA9IHRoaXMuZWRpdG9yLmNvbW1hbmRzW25hbWVdXG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiAoXG4gICAgICAgICAgICBpc0FjdGl2ZT8uKGF0dHJzKSAmJlxuICAgICAgICAgICAgKGlnbm9yZUFjdGl2ZSA9PSBudWxsIHx8ICFpZ25vcmVBY3RpdmUoKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IG9uQ2xpY2tcbiAgICAgICAgICAgID8gb25DbGljayhjb21tYW5kLCBhdHRycylcbiAgICAgICAgICAgIDogY29tbWFuZChhdHRycylcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhrZXkpID8gJ2hpc3RvcnknIDoga2V5XG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IG5hbWUgPSB1bmRlcnNjb3JlKGtleSlcbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKGtleSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYXR0ciwgdmFsdWVzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzOiB7IFthdHRyXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG5cbmNsYXNzIFNtYWxsIGV4dGVuZHMgTWFyayB7XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiAnc21hbGwnXG4gIH1cblxuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZURPTTogW1xuICAgICAgICB7IHRhZzogJ3NtYWxsJyB9XG4gICAgICBdLFxuICAgICAgdG9ET006ICgpID0+IFsnc21hbGwnLCAwXVxuICAgIH1cbiAgfVxuXG4gIGNvbW1hbmRzKHsgdHlwZSB9KSB7XG4gICAgcmV0dXJuICgpID0+IHRvZ2dsZU1hcmsodHlwZSlcbiAgfVxufVxuY2xhc3MgTGlua1dpdGhUaXRsZSBleHRlbmRzIExpbmsge1xuICBnZXQgc2NoZW1hKCkge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRyczoge1xuICAgICAgICBocmVmOiB7XG4gICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9LFxuICAgICAgICB0aXRsZToge1xuICAgICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICBwYXJzZURPTTogW3tcbiAgICAgICAgdGFnOiAnYScsXG4gICAgICAgIGdldEF0dHJzOiBkb20gPT4gKHtcbiAgICAgICAgICBocmVmOiBkb20uZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgdGl0bGU6IGRvbS5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgfSlcbiAgICAgIH1dLFxuICAgICAgdG9ET006IG5vZGUgPT4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1tdWx0aXNlbGVjdChcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgfWBcbilcbiAgdnVlLW11bHRpc2VsZWN0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpzaG93LWxhYmVscz1cImZhbHNlXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgdGFnLXBsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIixcbiAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgOnRyYWNrLWJ5PVwib3B0aW9uVmFsdWVcIlxuICAgIDpncm91cC1sYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgOmludGVybmFsLXNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpwcmVzZXJ2ZS1zZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbG9zZS1vbi1zZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1tdWx0aXNlbGVjdChcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LXNpbmdsZSc6ICFtdWx0aXBsZSxcbiAgICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgICB9YFxuICApXG4gICAgdnVlLW11bHRpc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6c2hvdy1sYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgICB0YWctcGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiLFxuICAgICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICAgIDpjdXN0b20tbGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgICA6dHJhY2stYnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgICA6Z3JvdXAtbGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgICAgOmdyb3VwLXZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgICA6aW50ZXJuYWwtc2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6cHJlc2VydmUtc2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsZWFyLW9uLXNlbGVjdD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsb3NlLW9uLXNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICBAb3Blbj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgQGltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0Lm1pbi5jc3MnXG5cbiAgJHNwaW5uZXItd2lkdGg6ICRzZWxlY3QtYXJyb3ctd2lkdGhcbiAgJHRhZy1pY29uLXdpZHRoOiAxLjhlbVxuICAkdGFnLW1hcmdpbjogMnB4XG4gICR0YWctcGFkZGluZzogM3B4XG4gICR0YWctbGluZS1oZWlnaHQ6IDEuMWVtXG5cbiAgLmRpdG8tbXVsdGlzZWxlY3RcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5tdWx0aXNlbGVjdFxuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0XG4gICAgICBjb2xvcjogJGNvbG9yLWJsYWNrXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdFxuICAgICAgb3ZlcmZsb3c6IGF1dG9cbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIHBhZGRpbmc6IDAgJHNwaW5uZXItd2lkdGggMCAwXG4gICAgICAvLyBTbyB0YWdzIGNhbiBmbG9hdCBvbiBtdWx0aXBsZSBsaW5lcyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2luczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkdGFnLW1hcmdpblxuXG4gICAgLm11bHRpc2VsZWN0X190YWdcbiAgICAgIGZsb2F0OiBsZWZ0XG4gICAgICBtYXJnaW46ICR0YWctbWFyZ2luIDAgMCAkdGFnLW1hcmdpblxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBwYWRkaW5nOiAkdGFnLXBhZGRpbmcgJHRhZy1pY29uLXdpZHRoICR0YWctcGFkZGluZyAwLjhlbVxuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFncy13cmFwXG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbGluZS1oZWlnaHQ6IDBcblxuICAgIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXIsXG4gICAgLm11bHRpc2VsZWN0X19pbnB1dFxuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdFxuICAgICAgbWluLWhlaWdodDogMFxuICAgICAgbWFyZ2luOiAwIDAgMXB4IDBcbiAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgc3R5bGU9XCJwYWRkaW5nOiAuLi47XCIgaW4gYWRkaXRpb24gdG8gdXNpbmdcbiAgICAgIC8vIGNsYXNzZXMsIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZyAhaW1wb3J0YW50XG4gICAgICAvLyBTbyBpbnB1dCBjYW4gZmxvYXQgbmV4dCB0byB0YWdzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zIHdpdGhcbiAgICAgIC8vIC5tdWx0aXNlbGVjdF9fdGFnczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnRcbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcblxuICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXIsXG4gICAgLm11bHRpc2VsZWN0X19pbnB1dDo6cGxhY2Vob2xkZXJcbiAgICAgIGNvbG9yOiAkY29sb3ItcGxhY2Vob2xkZXJcblxuICAgIC5tdWx0aXNlbGVjdC0tYWN0aXZlXG4gICAgICAubXVsdGlzZWxlY3RfX3BsYWNlaG9sZGVyXG4gICAgICAgIC8vIERvbid0IHVzZSBgZGlzcGxheTogbm9uZWAgdG8gaGlkZSBwbGFjZS1ob2xkZXIsIGFzIHRoZSBsYXlvdXQgd291bGRcbiAgICAgICAgLy8gY29sbGFwc2UuXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cblxuICAgIC5tdWx0aXNlbGVjdF9fc2VsZWN0LFxuICAgIC5tdWx0aXNlbGVjdF9fc3Bpbm5lclxuICAgICAgcGFkZGluZzogMFxuICAgICAgLy8gJGJvcmRlci13aWR0aCB0byBwcmV2ZW50IG1hc2tpbmcgYm9yZGVyIHdpdGggLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICB0b3A6ICRib3JkZXItd2lkdGhcbiAgICAgIHJpZ2h0OiAkYm9yZGVyLXdpZHRoXG4gICAgICBib3R0b206ICRib3JkZXItd2lkdGhcbiAgICAgIGhlaWdodDogaW5oZXJpdFxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcblxuICAgIC5tdWx0aXNlbGVjdF9fc2VsZWN0XG4gICAgICB3aWR0aDogMFxuICAgICAgbWFyZ2luLXJpZ2h0OiBjYWxjKCRzZWxlY3QtYXJyb3ctd2lkdGggLyAyKVxuICAgICAgJjo6YmVmb3JlXG4gICAgICAgICthcnJvdygkc2VsZWN0LWFycm93LXNpemUpXG4gICAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b21cbiAgICAgICAgcmlnaHQ6IGNhbGMoLTEgKiAkc2VsZWN0LWFycm93LXNpemUgLyAyKVxuXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGhcbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIENoYW5nZSB0aGUgd2lkdGggb2YgdGhlIGxvYWRpbmcgc3Bpbm5lclxuICAgICAgICBib3JkZXItd2lkdGg6IDNweFxuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkY29sb3ItYWN0aXZlXG4gICAgICAgIGluc2V0OiAwXG4gICAgICAgIG1hcmdpbjogYXV0b1xuXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb25cbiAgICAgIG1pbi1oZWlnaHQ6IHVuc2V0XG4gICAgICBoZWlnaHQ6IHVuc2V0XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIEluc3RydWN0aW9uIHRleHQgZm9yIG9wdGlvbnNcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHRcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICAmOjphZnRlclxuICAgICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnRcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1kaXNhYmxlZFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWctaWNvblxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuICAgICAgYm9yZGVyLXJhZGl1czogMWVtXG4gICAgICBmb250LXdlaWdodDogaW5oZXJpdFxuICAgICAgbGluZS1oZWlnaHQ6IDEuNGVtXG4gICAgICB3aWR0aDogJHRhZy1pY29uLXdpZHRoXG4gICAgICAmOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcbiAgICAgICAgZm9udC1zaXplOiAxLjNlbVxuICAgICAgJjpob3Zlcjo6YWZ0ZXJcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0tc2VsZWN0ZWRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHRcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dFxuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgJi5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZyxcbiAgICAubXVsdGlzZWxlY3RfX29wdGlvbi0taGlnaGxpZ2h0XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlXG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFncyxcbiAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LXNpbmdsZVxuICAgICAgLS1pbnB1dC13aWR0aDogMTAwJVxuICAgICYuZGl0by1tdWx0aXNlbGVjdC1tdWx0aXBsZVxuICAgICAgLS1pbnB1dC13aWR0aDogYXV0b1xuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fc2luZ2xlLFxuICAgICAgLm11bHRpc2VsZWN0X19pbnB1dFxuICAgICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIGBzdHlsZT1cIndpZHRoXCJgIGluIGFkZGl0aW9uIHRvIHVzaW5nIGNsYXNzZXNcbiAgICAgICAgLy8gc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgICAgd2lkdGg6IHZhcigtLWlucHV0LXdpZHRoKSAhaW1wb3J0YW50XG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgIG1hcmdpbjogLTFweCAwIDBcbiAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgICAmLm11bHRpc2VsZWN0LS1hYm92ZVxuICAgICAgICAubXVsdGlzZWxlY3RfX3RhZ3NcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMFxuICAgICAgICAubXVsdGlzZWxlY3RfX2NvbnRlbnQtd3JhcHBlclxuICAgICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGJvcmRlci1jb2xvclxuICAgICAgICAgIG1hcmdpbjogMCAwIC0xcHhcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDBcbiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMFxuXG4gICAgJi5kaXRvLWhhcy1lcnJvcnNcbiAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1lcnJvclxuXG4gICAgLmRpdG8tYnV0dG9uLWNsZWFyXG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGhcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuaW1wb3J0IFZ1ZU11bHRpc2VsZWN0IGZyb20gJ3Z1ZS1tdWx0aXNlbGVjdCdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgJ3Z1ZS1tdWx0aXNlbGVjdC9kaXN0L3Z1ZS1tdWx0aXNlbGVjdC5taW4uY3NzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbXVsdGlzZWxlY3QnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlTXVsdGlzZWxlY3QgfSxcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZWFyY2hlZE9wdGlvbnM6IG51bGwsXG4gICAgICBwb3B1bGF0ZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/ICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAvLyBJZiBhbiBvcHRpb24gY2Fubm90IGJlIGZvdW5kLCB3ZSBtYXkgYmUgaW4gdGFnZ2FibGUgbW9kZSBhbmRcbiAgICAgICAgICAgICAgLy8gY2FuIGFkZCBpdC5cbiAgICAgICAgICAgICAgdmFsdWUgPT4gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkgfHwgdGhpcy5hZGRUYWdPcHRpb24odmFsdWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IG9wdGlvbnMgdGhhdCB3ZSBjb3VsZG4ndCBtYXRjaC5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIHJlYWxseSBzaG91bGQgZGlzcGxheSBhbiBlcnJvciBpbnN0ZWFkXG4gICAgICAgICAgICAuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgICAgIDogdGhpcy5zZWxlY3RlZE9wdGlvblxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIG9wdGlvbnMgb2JqZWN0LCBzaW5jZSB2dWUtbXVsdGlzZWxlY3QgY2FuJ3QgbWFwIHRoYXRcbiAgICAgICAgLy8gaXRzZWxmIHVuZm9ydHVuYXRlbHkuIGB0cmFjay1ieWAgaXMgdXNlZCBmb3IgOmtleSBtYXBwaW5nIGl0IHNlZW1zLlxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAob3B0aW9uIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSkpXG4gICAgICAgICAgOiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVkT3B0aW9ucyB8fCB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc2VhcmNoYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHRhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndGFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHN0YXlPcGVuOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RheU9wZW4nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyKCkge1xuICAgICAgY29uc3QgeyBwbGFjZWhvbGRlciwgc2VhcmNoYWJsZSwgdGFnZ2FibGUgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXIgfHwgKFxuICAgICAgICBzZWFyY2hhYmxlICYmIHRhZ2dhYmxlID8gJ1NlYXJjaCBvciBhZGQgYSB0YWcnXG4gICAgICAgIDogc2VhcmNoYWJsZSA/ICdTZWxlY3Qgb3Igc2VhcmNoIGVudHJ5J1xuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGlmICh0aGlzLmF1dG9mb2N1cykge1xuICAgICAgLy8gdnVlLW11bHRpc2VsZWN0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgYXV0b2ZvY3VzIGF0dHJpYnV0ZS4gV2UgbmVlZCB0b1xuICAgICAgLy8gaGFuZGxlIGl0IGhlcmUuXG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEBvdmVycmlkZVxuICAgIGdldExpc3RlbmVycygpIHtcbiAgICAgIC8vIG92ZXJyaWRlIGBUeXBlTWl4aW4uZ2V0TGlzdGVuZXJzKClgIHRvIHJlLXJvdXRlICdpbnB1dCcgdG8gYG9uQ2hhbmdlKClgXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgaW5wdXQ6IHRoaXMub25DaGFuZ2VcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWRkVGFnT3B0aW9uKHRhZykge1xuICAgICAgaWYgKHRoaXMudGFnZ2FibGUpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCwgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gb3B0aW9uTGFiZWwgJiYgb3B0aW9uVmFsdWVcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIFtvcHRpb25MYWJlbF06IHRhZyxcbiAgICAgICAgICAgIC8vIFRPRE86IERlZmluZSBhIHNpbXBsZSBzY2hlbWEgb3B0aW9uIHRvIGNvbnZlcnQgdGhlIHRhZyB2YWx1ZSB0b1xuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGVsc2UsIGUuZy4gYHRvVGFnOiB0YWcgPT4gdW5kZXJzY29yZSh0YWcpYFxuICAgICAgICAgICAgW29wdGlvblZhbHVlXTogdGFnXG4gICAgICAgICAgfVxuICAgICAgICAgIDogdGFnXG4gICAgICAgIHRoaXMub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuYWN0aXZhdGUoKVxuICAgIH0sXG5cbiAgICBvbkFkZFRhZyh0YWcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuYWRkVGFnT3B0aW9uKHRhZylcbiAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25TZWFyY2hDaGFuZ2UocXVlcnkpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZpbHRlcikge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAvLyBTZXQgYHNlYXJjaGVkT3B0aW9uc2AgdG8gYW4gZW1wdHkgYXJyYXksIGJlZm9yZSBpdCB3aWxsIGJlXG4gICAgICAgICAgLy8gcG9wdWxhdGVkIGFzeW5jaHJvbm91c2x5IHdpdGggdGhlIGFjdHVhbCByZXN1bHRzLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gW11cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IGF3YWl0IHRoaXMucmVzb2x2ZURhdGEoXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnNlYXJjaEZpbHRlcihuZXcgRGl0b0NvbnRleHQodGhpcywgeyBxdWVyeSB9KSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ2xlYXIgYHNlYXJjaGVkT3B0aW9uc2Agd2hlbiB0aGUgcXVlcnkgaXMgY2xlYXJlZC5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgIT09IG51bGwgPyB0aGlzLnZhbHVlIDogJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWUgIT09ICcnXG4gICAgICAgICAgPyB0aGlzLmlzSW50ZWdlciA/IHBhcnNlSW50KHZhbHVlLCAxMCkgOiBwYXJzZUZsb2F0KHZhbHVlKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc3RlcFZhbHVlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RlcCA9PSBudWxsICYmICF0aGlzLmlzSW50ZWdlciA/ICdhbnknIDogdGhpcy5zdGVwXG4gICAgfSxcblxuICAgIGRlY2ltYWxzOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVjaW1hbHMnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHN0ZXA6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGVwJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KHN0ZXApIHtcbiAgICAgICAgLy8gRm9yIGludGVnZXJzLCByb3VuZCB0aGUgc3RlcHMgdG8gdGhlIG5leHQgYmlnZ2VyIGludGVnZXIgdmFsdWU6XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBzdGVwICE9IG51bGwgPyBNYXRoLmNlaWwoc3RlcCkgOiBzdGVwXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtaW46IGdldFNjaGVtYUFjY2Vzc29yKCdtaW4nLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWluKSB7XG4gICAgICAgIG1pbiA9IG1pbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlswXVxuICAgICAgICAgIDogbWluXG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtaW4gIT0gbnVsbCA/IE1hdGguZmxvb3IobWluKSA6IG1pblxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4OiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4Jywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1heCkge1xuICAgICAgICBtYXggPSBtYXggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMV1cbiAgICAgICAgICA6IG1heFxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWF4ICE9IG51bGwgPyBNYXRoLmNlaWwobWF4KSA6IG1heFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgcmFuZ2U6IGdldFNjaGVtYUFjY2Vzc29yKCdyYW5nZScsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBgdGhpcy5taW5gLCBgdGhpcy5tYXhgIGFscmVhZHkgc3VwcG9ydCBgc2NoZW1hLnJhbmdlYCxcbiAgICAgICAgLy8gc28gcmVkaXJlY3QgdGhlcmUuXG4gICAgICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIG1pbiAhPSBudWxsICYmIG1heCAhPSBudWxsID8gW21pbiwgbWF4XSA6IHVuZGVmaW5lZFxuICAgICAgfSxcblxuICAgICAgc2V0KHJhbmdlKSB7XG4gICAgICAgIC8vIFByb3ZpZGUgYSBzZXR0ZXIgdGhhdCBkZWxlZ2F0ZXMgdG8gYFt0aGlzLm1pbiwgdGhpcy5tYXhdYCxcbiAgICAgICAgLy8gc2luY2UgdGhvc2UgYWxyZWFkeSBoYW5kbGUgYHNjaGVtYS5yYW5nZWAuXG4gICAgICAgIGlmIChpc0FycmF5KHJhbmdlKSkge1xuICAgICAgICAgIFt0aGlzLm1pbiwgdGhpcy5tYXhdID0gcmFuZ2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7fVxuICAgICAgY29uc3QgeyByYW5nZSwgbWluLCBtYXgsIGRlY2ltYWxzLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmFuZ2UgPSByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1pbiAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWluID0gbWluXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWF4ID0gbWF4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkZWNpbWFscyAhPSBudWxsKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCkge1xuICAgICAgICBjb25zdCBkZWNpbWFscyA9IChgJHtzdGVwfWAuc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoXG4gICAgICAgIGlmIChkZWNpbWFscyA+IDApIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNJbnRlZ2VyKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9XG4gIH1cbn1cbiIsIlxuaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHR5cGU9XCJudW1iZXJcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOm1pbj1cIm1pblwiXG4gIDptYXg9XCJtYXhcIlxuICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC8vIE9ubHkgc2hvdyBzcGluIGJ1dHRvbnMgaWYgdGhlIG51bWJlciBjb21wb25lbnQgZGVmaW5lcyBhIHN0ZXAgc2l6ZS5cbiAgaW5wdXRbdHlwZT1cIm51bWJlclwiXTpub3QoW3N0ZXBdKVxuICAgICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICAgJjo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvblxuICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lXG4gICAgICBtYXJnaW46IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ251bWJlcicsICdpbnRlZ2VyJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW50ZWdlcidcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tb2JqZWN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbilcbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQoXG4gICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICApXG4gICAgLy8gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICApXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICApXG4gIGRpdG8tZWRpdC1idXR0b25zKFxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgOmVkaXRhYmxlPVwib2JqZWN0RGF0YSAmJiBlZGl0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgIDpwYXRoPVwicGF0aFwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1vYmplY3QoXG4gICAgdi1pZj1cImlzUmVhZHlcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICAgIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4gIClcbiAgICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgICApXG4gICAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICApXG4gICAgICBjb21wb25lbnQoXG4gICAgICAgIHYtZWxzZS1pZj1cImNvbXBvbmVudFwiXG4gICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtZWxzZVxuICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgICApXG4gICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6cGF0aD1cInBhdGhcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tb2JqZWN0XG4gICAgZGlzcGxheTogZmxleFxuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgbWFyZ2luOiAwXG4gICAgcGFkZGluZzogJGZvcm0tc3BhY2luZ1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAuZGl0by1vYmplY3QtY29udGVudFxuICAgICAgZmxleDogMCAxIDEwMCVcbiAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgIGZsZXg6IDEgMCAwJVxuICAgICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBkYXRhOiB0aGlzLm9iamVjdERhdGEgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncGFuZWwnLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0UGFkZGluZzogdHJ1ZSxcblxuICBnZXRQYW5lbFNjaGVtYShzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICAgIDptYXg9XCJwcm9ncmVzc01heFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHJldHVybiByYW5nZVsxXSAtIHJhbmdlWzBdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuICApXG4gICAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgICAgbGFiZWxcbiAgICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICAgIClcbiAgICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tcmFkaW8tYnV0dG9uc1xuICAgIGxhYmVsXG4gICAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzXG4gICAgLmRpdG8tcmFkaW8tYnV0dG9uXG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncmFkaW8nLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tc2VjdGlvbihcbiAgOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLWxhYmVsbGVkJyA6ICEhc2NoZW1hLmxhYmVsIH1cIlxuKVxuICBkaXRvLXBhbmUuZGl0by1zZWN0aW9uLXBhbmUoXG4gICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIml0ZW1cIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2VjdGlvbihcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tbGFiZWxsZWQnIDogISFzY2hlbWEubGFiZWwgfVwiXG4gIClcbiAgICBkaXRvLXBhbmUuZGl0by1zZWN0aW9uLXBhbmUoXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2VjdGlvblxuICAgICYuZGl0by1zZWN0aW9uLWxhYmVsbGVkXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nXG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlY3Rpb24nLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhc2NoZW1hLm5lc3RlZCAmJiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuICBkZWZhdWx0TmVzdGVkOiBmYWxzZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRGbGV4R3JvdzogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5kYXRhXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgICAvLyBQcm9jZXNzIHNlY3Rpb24gY29tcG9uZW50cyBzbyB0aGVpciBmb3JtcyBnZXQgcmVzb2x2ZWQgdG9vLlxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbi5kaXRvLXNlbGVjdFxuICBzZWxlY3QoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICApXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgIClcbiAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgIG9wdGlvbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgKVxuICAgICAgb3B0aW9uKFxuICAgICAgICA6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24oc2VsZWN0ZWRPcHRpb24pIH19XG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbiAgLmRpdG8tc2VsZWN0XG4gICAgc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgICBAZm9jdXM9XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwicG9wdWxhdGVcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgICAgdi1pZj1cImdyb3VwQnlcIlxuICAgICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHQpIH19XG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJzZWxlY3RlZE9wdGlvblwiXG4gICAgICApXG4gICAgICAgIG9wdGlvbihcbiAgICAgICAgICA6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAvLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiAgJHNlbGVjdC1hcnJvdy1yaWdodDogY2FsYygoJHNlbGVjdC1hcnJvdy13aWR0aCAtICRzZWxlY3QtYXJyb3ctc2l6ZSkgLyAyKVxuXG4gIC5kaXRvLXNlbGVjdFxuICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgc2VsZWN0XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkc2VsZWN0LWFycm93LXdpZHRoXG5cbiAgICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgc2VsZWN0XG4gICAgICAgIHdpZHRoOiAxMDAlXG5cbiAgICAmOjphZnRlclxuICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICArYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKVxuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgcmlnaHQ6IGNhbGMoI3skc2VsZWN0LWFycm93LXJpZ2h0fSArICN7JGJvcmRlci13aWR0aH0pXG5cbiAgICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyXG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdHlwZT1cInJhbmdlXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tc2xpZGVyXG4gICAgaW5wdXQuZGl0by1yYW5nZShcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbiAgICBpbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICA6bWluPVwibWluXCJcbiAgICAgIDptYXg9XCJtYXhcIlxuICAgICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zbGlkZXJcbiAgICBAZXh0ZW5kICVpbnB1dFxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICAuZGl0by1yYW5nZVxuICAgICAgZmxleDogYXV0b1xuICAgICAgaGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlcbiAgICAuZGl0by1udW1iZXJcbiAgICAgIGJvcmRlcjogMFxuICAgICAgcGFkZGluZzogMFxuICAgICAgdGV4dC1hbGlnbjogcmlnaHRcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NsaWRlcicsIHtcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnN3aXRjaC1idXR0b24uZGl0by1zd2l0Y2goXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpzeW5jPVwidHJ1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBzd2l0Y2gtYnV0dG9uLmRpdG8tc3dpdGNoKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6c3luYz1cInRydWVcIlxuICAgIDpsYWJlbHM9XCJsYWJlbHNcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zd2l0Y2hcbiAgICAuZGl0by1zd2l0Y2gtbGFiZWxcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBTd2l0Y2hCdXR0b24gfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc3dpdGNoJywge1xuICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgU3dpdGNoQnV0dG9uXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGFiZWxzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmlucHV0LWZpZWxkLmRpdG8tdGV4dChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnR5cGU9XCJpbnB1dFR5cGVcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGlucHV0LWZpZWxkLmRpdG8tdGV4dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnR5cGU9XCJpbnB1dFR5cGVcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aSdcblxuY29uc3QgbWFza2VkUGFzc3dvcmQgPSAnKioqKioqKioqKioqKioqKidcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICd0ZXh0JywgJ2VtYWlsJywgJ3VybCcsICdob3N0bmFtZScsICdkb21haW4nLCAndGVsJywgJ3Bhc3N3b3JkJywgJ2NyZWRpdGNhcmQnXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+IHNjaGVtYS50eXBlID09PSAncGFzc3dvcmQnLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRUeXBlKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3JlZGl0Y2FyZDogJ3RleHQnLFxuICAgICAgICBob3N0bmFtZTogJ3RleHQnLFxuICAgICAgICBkb21haW46ICd0ZXh0J1xuICAgICAgfVt0aGlzLnR5cGVdIHx8IHRoaXMudHlwZVxuICAgIH0sXG5cbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmXG4gICAgICAgICAgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgIXRoaXMuZm9jdXNlZFxuICAgICAgICApXG4gICAgICAgICAgPyBtYXNrZWRQYXNzd29yZFxuICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCBydWxlID0ge1xuICAgICAgICBlbWFpbDogJ2VtYWlsJyxcbiAgICAgICAgdXJsOiAndXJsJyxcbiAgICAgICAgaG9zdG5hbWU6ICdob3N0bmFtZScsXG4gICAgICAgIGRvbWFpbjogJ2RvbWFpbicsXG4gICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQnLFxuICAgICAgICBjcmVkaXRjYXJkOiAnY3JlZGl0Y2FyZCdcbiAgICAgIH1bdGhpcy50eXBlXVxuICAgICAgcmV0dXJuIHJ1bGUgPyB7IFtydWxlXTogdHJ1ZSB9IDoge31cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgdi1vbj1cImxpc3RlbmVyc1wiXG4gIDpyb3dzPVwibGluZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6cm93cz1cImxpbmVzXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXRleHRhcmVhXG4gICAgZGlzcGxheTogYmxvY2tcbiAgICByZXNpemU6IG5vbmVcbiAgICBtaW4taGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSArICN7IDIgKiAkaW5wdXQtcGFkZGluZy12ZXIgfSlcbiAgICAmLmRpdG8tcmVzaXphYmxlXG4gICAgICByZXNpemU6IHZlcnRpY2FsXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd0ZXh0YXJlYScsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDRcbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by10cmVlLWxpc3RcbiAgZGl0by1zY29wZXMoXG4gICAgdi1pZj1cInNjb3Blc1wiXG4gICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICApXG4gIC5kaXRvLXRyZWUtcGFuZWxcbiAgICBkaXRvLXRyZWUtaXRlbShcbiAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInRyZWVEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOm9wZW49XCJ0cnVlXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNFZGl0YWJsZUZvcm1zXCJcbiAgICApXG4gICAgICAvLyBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgIHJvdXRlci12aWV3XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by10cmVlLWxpc3RcbiAgICBkaXRvLXNjb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtcGFuZWxcbiAgICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cInRyZWVEYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgOm9wZW49XCJ0cnVlXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICAgIHYtaWY9XCJoYXNFZGl0YWJsZUZvcm1zXCJcbiAgICAgIClcbiAgICAgICAgLy8gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICAgIHJvdXRlci12aWV3XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdHJlZS1saXN0XG4gICAgQGV4dGVuZCAlZmllbGRcbiAgICAuZGl0by10cmVlLXBhbmVsXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAgID4gLmRpdG8tdHJlZS1pdGVtXG4gICAgICAgIGZsZXg6IDEgMSAyNSVcbiAgICAgID4gLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lclxuICAgICAgICBmbGV4OiAwIDEgNzUlXG4gICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2hcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZVxuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgbWFyZ2luOiAoLSRpbnB1dC1wYWRkaW5nLXZlcikgKC0kaW5wdXQtcGFkZGluZy1ob3IpXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAkaW5wdXQtcGFkZGluZy1ob3Jcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IGhhc0Zvcm1TY2hlbWEsIGdldEZvcm1TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ3RyZWUtbGlzdCcsICd0cmVlLW9iamVjdCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4geyBjb250YWluZXI6IHRoaXMgfVxuICB9LFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIHJldHVybiB0eXBlID09PSAndHJlZS1vYmplY3QnID8gJ29iamVjdCcgOiAnbGlzdCdcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIucGF0aGA6XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXRoXG4gICAgfSxcblxuICAgIGVkaXRQYXRoKCkge1xuICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLmVkaXRQYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXRoLnNsaWNlKHRoaXMucGF0aD8ubGVuZ3RoKVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHsgW3RoaXMubmFtZV06IHRoaXMudmFsdWUgfVxuICAgICAgICA6IHRoaXMudmFsdWVcbiAgICB9LFxuXG4gICAgdHJlZURhdGFQYXRoKCkge1xuICAgICAgLy8gUmVtb3ZlIGBuYW1lYCBmcm9tIGBkYXRhUGF0aGAsIGFzIGl0IGlzIGFkZGVlZFxuICAgICAgLy8gdG8gYHRyZWVEYXRhYCBhbmQgYHRyZWVTY2hlbWFgXG4gICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgPyB0aGlzLmRhdGFQYXRoLnNsaWNlKDAsIHRoaXMuZGF0YVBhdGgubGVuZ3RoIC0gdGhpcy5uYW1lLmxlbmd0aClcbiAgICAgICAgOiB0aGlzLmRhdGFQYXRoXG4gICAgfSxcblxuICAgIHRyZWVTY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgPyB7XG4gICAgICAgICAgY2hpbGRyZW46IHtcbiAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgIC4uLnRoaXMuc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIDogdGhpcy5zY2hlbWFcbiAgICB9LFxuXG4gICAgaGFzRWRpdGFibGVGb3JtcygpIHtcbiAgICAgIGNvbnN0IGhhc0VkaXRhYmxlRm9ybXMgPSBzY2hlbWEgPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAoXG4gICAgICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdlZGl0YWJsZScsIHtcbiAgICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgIHNjaGVtYVxuICAgICAgICAgICAgfSkgfHxcbiAgICAgICAgICAgIHNjaGVtYS5jaGlsZHJlbiAmJlxuICAgICAgICAgICAgaGFzRWRpdGFibGVGb3JtcyhzY2hlbWEuY2hpbGRyZW4pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzRWRpdGFibGVGb3Jtcyh0aGlzLnNjaGVtYSlcbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCxcbiAgICBuZXN0ZWQgPSB0cnVlLCBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcmV0dXJuIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICBhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCxcbiAgICAgIG5lc3RlZCwgZmxhdHRlbixcbiAgICAgIC8vIFBhc3MgcHJvY2VzcygpIHRvIGFkZCBtb3JlIHJvdXRlcyB0byBjaGlsZFJvdXRlczpcbiAgICAgIChjaGlsZFJvdXRlcywgbGV2ZWwpID0+IHtcbiAgICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgIC8vIEFkZCBgdHlwZWAgdG8gdGhlIG5lc3RlZCB0cmVlIGxpc3QuXG4gICAgICAgICAgY2hpbGRyZW4udHlwZSA9ICd0cmVlLWxpc3QnXG4gICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICAgIGFwaSwgY2hpbGRyZW4sIGNoaWxkcmVuLm5hbWUsIGNoaWxkUm91dGVzLCBsZXZlbCxcbiAgICAgICAgICAgIG5lc3RlZCwgdHJ1ZSwgLy8gUGFzcyBgdHJ1ZWAgZm9yIGBmbGF0dGVuYCBpbiB0cmVlIGxpc3RzLlxuICAgICAgICAgICAgcHJvY2Vzc1xuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgfSxcblxuICBnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3Npbmcoc2NoZW1hLCBjb250ZXh0KSB7XG4gICAgLy8gQ29udmVydCBuZXN0ZWQgY2hpbGRyZW4gc2NoZW1hIHRvIHN0YW5kLWFsb25lIHNjaGVtYSBjb21wb25lbnQsXG4gICAgLy8gcHJlc2VudCBpbiBlYWNoIG9mIHRoZSBmb3JtcywgYXMgcmVxdWlyZWQgYnkgYHByb2Nlc3NTY2hlbWFEYXRhKClgXG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCwgY2hpbGRyZW5cbiAgICAgID8gZm9ybSA9PiAoe1xuICAgICAgICAuLi5mb3JtLFxuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgLi4uZm9ybS5jb21wb25lbnRzLFxuICAgICAgICAgIFtjaGlsZHJlbi5uYW1lXTogY2hpbGRyZW5cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIDogbnVsbFxuICAgIClcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IGZpbGVzaXplIGZyb20gJ2ZpbGVzaXplJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xuICByZXR1cm4gZmlsZXNpemUoc2l6ZSwgeyBiYXNlOiAxMCB9KVxufVxuIiwiXG4uZGl0by11cGxvYWRcbiAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICB0clxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhblxuICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhkcmFnZ2FibGUpXCJcbiAgICAgIDpsaXN0PVwiZmlsZXNcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGZpbGUsIGluZGV4KSBpbiBmaWxlc1wiXG4gICAgICAgIDprZXk9XCJmaWxlLmtleVwiXG4gICAgICApXG4gICAgICAgIHRkKHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCIpXG4gICAgICAgIHRkIHt7IGZpbGUuc2l6ZSB8IGZvcm1hdEZpbGVTaXplIH19XG4gICAgICAgIHRkXG4gICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkXCIpXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIilcbiAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgIClcbiAgICB0Zm9vdFxuICAgICAgdHJcbiAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgdnVlLXVwbG9hZC5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkKFxuICAgICAgICAgICAgICAgIDppbnB1dC1pZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgOnBvc3QtYWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXVwbG9hZFxuICAgIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgICAgdHJcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBOYW1lXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuXG4gICAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgICA6bGlzdD1cImZpbGVzXCJcbiAgICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgICApXG4gICAgICAgICAgdGQodi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIilcbiAgICAgICAgICB0ZCB7eyBmaWxlLnNpemUgfCBmb3JtYXRGaWxlU2l6ZSB9fVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWRcIilcbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCIpXG4gICAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCIpXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgdGZvb3RcbiAgICAgICAgdHJcbiAgICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSB0cnVlXCJcbiAgICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgICB2dWUtdXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgICA6aW5wdXQtaWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIDpwb3N0LWFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dC1maWx0ZXI9XCJpbnB1dEZpbHRlclwiXG4gICAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgICAgdGl0bGU9XCJVcGxvYWQgRmlsZXNcIlxuICAgICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by11cGxvYWRcbiAgICAuZGl0by10YWJsZVxuICAgICAgdHJcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZVxuICAgIC5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+ICpcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlXG4gICAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmRcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXJcbiAgICAgIC5kaXRvLXByb2dyZXNzXG4gICAgICAgIGZsZXg6IGF1dG9cbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCBWdWVVcGxvYWQgZnJvbSAndnVlLXVwbG9hZC1jb21wb25lbnQnXG5pbXBvcnQgVnVlRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcbmltcG9ydCBwYXJzZUZpbGVTaXplIGZyb20gJ2ZpbGVzaXplLXBhcnNlcidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL3V0aWxzL3VuaXRzLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCd1cGxvYWQnLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlVXBsb2FkLCBWdWVEcmFnZ2FibGUgfSxcbiAgZmlsdGVyczogeyBmb3JtYXRGaWxlU2l6ZSB9LFxuICBtaXhpbnM6IFtPcmRlcmVkTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwbG9hZHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdXBsb2FkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMudXBsb2FkXG4gICAgfSxcblxuICAgIGZpbGVzKCkge1xuICAgICAgcmV0dXJuIGFzRmlsZXModGhpcy52YWx1ZSlcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIE5vIGNhbGxiYWNrIGFzIGl0J3MgdXNlZCBpbiBgcHJvY2Vzc1ZhbHVlKClgXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGV4dGVuc2lvbnM6IGdldFNjaGVtYUFjY2Vzc29yKCdleHRlbnNpb25zJywge1xuICAgICAgdHlwZTogW0FycmF5LCBTdHJpbmcsIFJlZ0V4cF1cbiAgICB9KSxcblxuICAgIGFjY2VwdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FjY2VwdCcsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KGFjY2VwdCkge1xuICAgICAgICByZXR1cm4gaXNBcnJheShhY2NlcHQpID8gYWNjZXB0LmpvaW4oJywnKSA6IGFjY2VwdFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4U2l6ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heFNpemUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZ2V0KG1heFNpemUpIHtcbiAgICAgICAgcmV0dXJuIG1heFNpemUgPyBwYXJzZUZpbGVTaXplKG1heFNpemUpIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiBkcmFnZ2FibGUgJiYgdGhpcy5maWxlcy5sZW5ndGggPiAxXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGlzVXBsb2FkUmVhZHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRzLmxlbmd0aCAmJlxuICAgICAgICAhKHRoaXMudXBsb2FkLmFjdGl2ZSB8fCB0aGlzLnVwbG9hZC51cGxvYWRlZClcbiAgICB9LFxuXG4gICAgaXNVcGxvYWRBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRzLmxlbmd0aCAmJiB0aGlzLnVwbG9hZC5hY3RpdmVcbiAgICB9LFxuXG4gICAgdXBsb2FkUHJvZ3Jlc3MoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnVwbG9hZHMucmVkdWNlKCh0b3RhbCwgZmlsZSkgPT4gdG90YWwgKyBmaWxlLnByb2dyZXNzLCAwKSAvXG4gICAgICAgIHRoaXMudXBsb2Fkcy5sZW5ndGhcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdXBsb2FkUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlVXJsKHtcbiAgICAgICAgdHlwZTogJ3VwbG9hZCcsXG4gICAgICAgIHBhdGg6IHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgodGhpcy5kYXRhUGF0aClcbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IHJlbmRlciB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiByZW5kZXJcbiAgICAgICAgPyByZW5kZXIuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICB2YWx1ZTogZmlsZSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZmlsZXMsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbChmaWxlLm5hbWUpXG4gICAgfSxcblxuICAgIGRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSB9ID0gZmlsZVxuXG4gICAgICBpZiAoZmlsZSAmJiB3aW5kb3cuY29uZmlybShcbiAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMucmVtb3ZlfSAke25hbWV9P2ApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxlLnVwbG9hZCkge1xuICAgICAgICAgIHRoaXMudXBsb2FkLnJlbW92ZShmaWxlLnVwbG9hZClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgICB0ZXh0OiBgJHtuYW1lfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RmlsZUluZGV4KGZpbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlICYmIHRoaXMudmFsdWVcbiAgICAgICAgPyB0aGlzLnZhbHVlLmZpbmRJbmRleChpdCA9PiBpdC5pZCA9PT0gZmlsZS5pZClcbiAgICAgICAgOiAtMVxuICAgIH0sXG5cbiAgICBhZGRGaWxlKGZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IFtmaWxlXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gZmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXBsYWNlRmlsZShmaWxlLCBuZXdGaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RmlsZUluZGV4KGZpbGUpXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5ld0ZpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuJHNldCh0aGlzLnZhbHVlLCBpbmRleCwgbmV3RmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3RmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZW1vdmVGaWxlKGZpbGUpIHtcbiAgICAgIHRoaXMucmVwbGFjZUZpbGUoZmlsZSwgbnVsbClcbiAgICB9LFxuXG4gICAgaW5wdXRGaWxlKG5ld0ZpbGUsIG9sZEZpbGUpIHtcbiAgICAgIGlmIChuZXdGaWxlICYmICFvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgaWQsIG5hbWUsIHNpemUgfSA9IG5ld0ZpbGVcbiAgICAgICAgdGhpcy5hZGRGaWxlKHsgaWQsIG5hbWUsIHNpemUsIHVwbG9hZDogbmV3RmlsZSB9KVxuICAgICAgfVxuICAgICAgaWYgKG5ld0ZpbGUgJiYgb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IHN1Y2Nlc3MsIGVycm9yIH0gPSBuZXdGaWxlXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgICAgY29uc3QgZmlsZSA9IG5ld0ZpbGUucmVzcG9uc2VbMF1cbiAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgZmlsZS51cGxvYWQgPSBuZXdGaWxlXG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSB1cGxvYWQgZmlsZSBvYmplY3Qgd2l0aCB0aGUgZmlsZSBvYmplY3QgcmVjZWl2ZWRcbiAgICAgICAgICAgIC8vIGZyb20gdGhlIHVwbG9hZCByZXNwb25zZS5cbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUZpbGUobmV3RmlsZSwgZmlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IHtcbiAgICAgICAgICAgIGFib3J0OiAnVXBsb2FkIGFib3J0ZWQnLFxuICAgICAgICAgICAgZGVuaWVkOiAnVXBsb2FkIGRlbmllZCcsXG4gICAgICAgICAgICBleHRlbnNpb246IGBVbnN1cHBvcnRlZCBmaWxlLXR5cGU6ICR7bmV3RmlsZS5uYW1lfWAsXG4gICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29yayBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgIHNlcnZlcjogJ1NlcnZlciBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgIHNpemU6IGBGaWxlIGlzIHRvbyBsYXJnZTogJHtmb3JtYXRGaWxlU2l6ZShuZXdGaWxlLnNpemUpfWAsXG4gICAgICAgICAgICB0aW1lb3V0OiAnVGltZW91dCBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJ1xuXG4gICAgICAgICAgfVtlcnJvcl0gfHwgYFVua25vd24gRmlsZSBVcGxvYWQgRXJyb3I6ICcke2Vycm9yfSdgXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnRmlsZSBVcGxvYWQgRXJyb3InLFxuICAgICAgICAgICAgdGV4dFxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaW5wdXRGaWx0ZXIobmV3RmlsZS8qLCBvbGRGaWxlLCBwcmV2ZW50ICovKSB7XG4gICAgICBjb25zdCB4aHIgPSBuZXdGaWxlPy54aHJcbiAgICAgIGlmICh0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFscyAmJiB4aHIgJiYgIXhoci53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAvLyBGaWx0ZXIgb3V0IGFsbCBuZXdseSBhZGRlZCBmaWxlcyB0aGF0IHdlcmVuJ3QgYWN0dWFsbHkgdXBsb2FkZWQuXG4gICAgY29uc3QgZmlsZXMgPSBhc0ZpbGVzKHZhbHVlKVxuICAgICAgLm1hcChcbiAgICAgICAgKHsgdXBsb2FkLCAuLi5maWxlIH0pID0+ICF1cGxvYWQgfHwgdXBsb2FkLnN1Y2Nlc3MgPyBmaWxlIDogbnVsbFxuICAgICAgKVxuICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUpXG4gICAgcmV0dXJuIHNjaGVtYS5tdWx0aXBsZSA/IGZpbGVzIDogZmlsZXNbMF0gfHwgbnVsbFxuICB9XG59KVxuXG5mdW5jdGlvbiBhc0ZpbGVzKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IGFzQXJyYXkodmFsdWUpIDogW11cbn1cblxuPC9zY3JpcHQ+XG4iLCJleHBvcnQgZGVmYXVsdCBbXG4gICdjcmVhdGUnLCAnY3JlYXRlZCcsXG4gICdzYXZlJywgJ3NhdmVkJyxcbiAgJ3N1Ym1pdCcsICdzdWJtaXR0ZWQnLFxuICAnZGVsZXRlJywgJ2RlbGV0ZWQnLFxuICAnZWRpdCcsICdlZGl0ZWQnLFxuICAnY2xvc2UnLCAnY2xvc2VkJyxcbiAgJ2NhbmNlbCcsICdjYW5jZWxsZWQnLFxuICAnZHJhZycsICdkcmFnZ2VkJ1xuXS5yZWR1Y2UoKHZlcmJzLCB2ZXJiKSA9PiB7XG4gIHZlcmJzW3ZlcmJdID0gdmVyYlxuICByZXR1cm4gdmVyYnNcbn0sIHt9KVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgVnVlTW9kYWwgZnJvbSAndnVlLWpzLW1vZGFsJ1xuaW1wb3J0IFZ1ZVJvdXRlciBmcm9tICd2dWUtcm91dGVyJ1xuaW1wb3J0IFZ1ZU5vdGlmaWNhdGlvbnMgZnJvbSAndnVlLW5vdGlmaWNhdGlvbidcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcydcbmltcG9ydCB7XG4gIGlzU3RyaW5nLCBpc0Fic29sdXRlVXJsLCBtZXJnZSwgaHlwaGVuYXRlLCBjYW1lbGl6ZSwgZGVmYXVsdEZvcm1hdHNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIGNvbXBvbmVudHMgZnJvbSAnLi9jb21wb25lbnRzL2luZGV4LmpzJ1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi90eXBlcy9pbmRleC5qcydcbmltcG9ydCBEaXRvUm9vdCBmcm9tICcuL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlJ1xuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHZlcmJzIGZyb20gJy4vdmVyYnMuanMnXG5cblZ1ZS5jb25maWcucHJvZHVjdGlvblRpcCA9IGZhbHNlXG5cbi8vIEFsbCBnbG9iYWwgcGx1Z2lucyB0aGF0IG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCBvbiBgVnVlYDpcblZ1ZS51c2UoVnVlUm91dGVyKVxuVnVlLnVzZShWdWVNb2RhbCwgeyBkeW5hbWljOiB0cnVlIH0pXG5WdWUudXNlKFZ1ZU5vdGlmaWNhdGlvbnMpXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9BZG1pbiB7XG4gIGNvbnN0cnVjdG9yKGVsLCB7XG4gICAgLy8gYGRpdG9gIGNvbnRhaW5zIHRoZSBiYXNlIGFuZCBhcGkgc2V0dGluZ3MgcGFzc2VkIGZyb20gYEFkbWluQ29udHJvbGxlcmBcbiAgICBkaXRvID0ge30sXG4gICAgYXBpLFxuICAgIHZpZXdzID0ge30sXG4gICAgLi4ub3B0aW9uc1xuICB9ID0ge30pIHtcbiAgICB0aGlzLmVsID0gZWxcbiAgICAvLyBNZXJnZSBpbiBgYXBpYCBzZXR0aW5ncyBhcyBwYXNzZWQgZnJvbSBgY29uZmlnLmFkbWluYCBhbmQgdGhyb3VnaCB0aGVcbiAgICAvLyBgQWRtaW5Db250cm9sbGVyYCB3aXRoIGBhcGlgIHZhbHVlcyBmcm9tIGZyb20gJ2FkbWluL2luZGV4LmpzJ1xuICAgIC8vIE5PVEU6IGBBZG1pbkNvbnRyb2xsZXJgIHByb3ZpZGVzIGBkaXRvLmFwaS5iYXNlYFxuICAgIHRoaXMuYXBpID0gYXBpID0gbWVyZ2UoeyBiYXNlOiAnLycgfSwgZGl0by5hcGksIGFwaSlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cbiAgICAvLyBTZXR1cCBkZWZhdWx0IGFwaSBzZXR0dGluZ3M6XG4gICAgYXBpLmxvY2FsZSB8fD0gJ2VuLVVTJ1xuXG4gICAgYXBpLmZvcm1hdHMgPSBtZXJnZSh7fSwgZGVmYXVsdEZvcm1hdHMsIGFwaS5mb3JtYXRzKVxuXG4gICAgYXBpLnJlcXVlc3QgfHw9IG9wdGlvbnMgPT4gdGhpcy5yZXF1ZXN0KG9wdGlvbnMpXG5cbiAgICAvLyBTZXR0aW5nIGBhcGkubm9ybWFsaXplUGF0aHMgPSB0cnVlIChwbHVyYWwpIHNldHMgYm90aDpcbiAgICAvLyBgYXBpLm5vcm1hbGl6ZVBhdGggPSBoeXBoZW5hdGVgIGFuZCBgYXBpLmRlbm9ybWFsaXplUGF0aCA9IGNhbWVsaXplYFxuICAgIGFwaS5ub3JtYWxpemVQYXRoID0gKFxuICAgICAgYXBpLm5vcm1hbGl6ZVBhdGggfHxcbiAgICAgIGFwaS5ub3JtYWxpemVQYXRoc1xuICAgICAgICA/IGh5cGhlbmF0ZVxuICAgICAgICA6IHZhbCA9PiB2YWxcbiAgICApXG4gICAgYXBpLmRlbm9ybWFsaXplUGF0aCA9IChcbiAgICAgIGFwaS5kZW5vcm1hbGl6ZVBhdGggfHxcbiAgICAgIGFwaS5ub3JtYWxpemVQYXRoc1xuICAgICAgICA/IGNhbWVsaXplXG4gICAgICAgIDogdmFsID0+IHZhbFxuICAgIClcblxuICAgIC8vIEFsbG93IHRoZSBjb25maWd1cmF0aW9uIG9mIGFsbCBhdXRoIHJlc291cmNlcywgbGlrZSBzbzpcbiAgICAvLyBhcGkudXNlcnMgPSB7XG4gICAgLy8gICBwYXRoOiAnL2FkbWlucycsXG4gICAgLy8gICAvLyBUaGVzZSBhcmUgdGhlIGRlZmF1bHRzOlxuICAgIC8vICAgbG9naW46IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ2luJyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBsb2dvdXQ6IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ291dCcsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgc2Vzc2lvbjoge1xuICAgIC8vICAgICBwYXRoOiAnc2Vzc2lvbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ2dldCdcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgY29uc3QgdXNlcnMgPSBhcGkudXNlcnMgPSBnZXRSZXNvdXJjZShhcGkudXNlcnMsIHtcbiAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJ1xuICAgIH0pIHx8IHt9XG4gICAgdXNlcnMubG9naW4gPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dpbiB8fCAnbG9naW4nLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLmxvZ291dCA9IGdldFJlc291cmNlKHVzZXJzLmxvZ291dCB8fCAnbG9nb3V0Jywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5zZXNzaW9uID0gZ2V0UmVzb3VyY2UodXNlcnMuc2Vzc2lvbiB8fCAnc2Vzc2lvbicsIHtcbiAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgb2YgcmVzb3VyY2UgcGF0aCBoYW5kbGVyczpcbiAgICAvLyBhcGkucmVzb3VyY2VzID0ge1xuICAgIC8vICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgIC8vICAgICByZXR1cm4gcmVzb3VyY2UucGFyZW50XG4gICAgLy8gICAgICAgPyBgJHtyZXNvdXJjZS5wYXRofT8ke3Jlc291cmNlLnBhcmVudC5wYXRofV9pZD0ke1xuICAgIC8vICAgICAgICAgIHJlc291cmNlLnBhcmVudC5pZH1gXG4gICAgLy8gICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLnJlc291cmNlcyA9IHtcbiAgICAgIGFueShyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpc1tyZXNvdXJjZT8udHlwZV0gfHwgdGhpcy5kZWZhdWx0XG4gICAgICAgIHJldHVybiByZXNvdXJjZSAmJiBoYW5kbGVyLmNhbGwodGhpcywgcmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBkZWZhdWx0KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0aGlzLmFueShyZXNvdXJjZS5wYXJlbnQpXG4gICAgICAgIHJldHVybiBwYXJlbnRQYXRoXG4gICAgICAgICAgPyBgJHtwYXJlbnRQYXRofS8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgICAgfSxcblxuICAgICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0KHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgbWVtYmVyKHJlc291cmNlKSB7XG4gICAgICAgIC8vIE5PVEU6IFdlIGFzc3VtZSB0aGF0IGFsbCBtZW1iZXJzIGhhdmUgcm9vdC1sZXZlbCBjb2xsZWN0aW9uIHJvdXRlcyxcbiAgICAgICAgLy8gdG8gYXZvaWQgZXhjZXNzaXZlIG5lc3Rpbmcgb2YgKHN1Yi0pY29sbGVjdGlvbiByb3V0ZXMuXG4gICAgICAgIHJldHVybiBgJHtyZXNvdXJjZS5wYXRofS8ke3Jlc291cmNlLmlkfWBcbiAgICAgIH0sXG5cbiAgICAgIHVwbG9hZChyZXNvdXJjZSkge1xuICAgICAgICAvLyBEaXRvIFNlcnZlciBoYW5kbGVzIHVwbG9hZCByb3V0ZXMgb24gdGhlIGNvbGxlY3Rpb24gcmVzb3VyY2U6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbGxlY3Rpb24ocmVzb3VyY2UucGFyZW50KX0vdXBsb2FkLyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICB9LFxuXG4gICAgICAuLi5hcGkucmVzb3VyY2VzXG4gICAgfVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyAvIGV4dGVuZGluZyBvZiBoZWFkZXJzOlxuICAgIC8vIGFwaS5oZWFkZXJzID0ge1xuICAgIC8vICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIC8vIH1cbiAgICBhcGkuaGVhZGVycyA9IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAuLi5hcGkuaGVhZGVyc1xuICAgIH1cblxuICAgIGFwaS5pc0FwaVJlcXVlc3QgPSBhcGkuaXNBcGlSZXF1ZXN0IHx8IGZ1bmN0aW9uKHVybCkge1xuICAgICAgcmV0dXJuICFpc0Fic29sdXRlVXJsKHVybCkgfHwgdXJsLnN0YXJ0c1dpdGgoYXBpLnVybClcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZWwpKSB7XG4gICAgICBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpXG4gICAgfVxuXG4gICAgdGhpcy5yb290ID0gbmV3IFZ1ZSh7XG4gICAgICBlbCxcbiAgICAgIHJvdXRlcjogbmV3IFZ1ZVJvdXRlcih7XG4gICAgICAgIG1vZGU6ICdoaXN0b3J5JyxcbiAgICAgICAgYmFzZTogZGl0by5iYXNlLFxuICAgICAgICBsaW5rQWN0aXZlQ2xhc3M6ICcnLFxuICAgICAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJydcbiAgICAgIH0pLFxuICAgICAgY29tcG9uZW50czogeyBEaXRvUm9vdCB9LFxuICAgICAgLy8gTW9zdCBpbmplY3RzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmUgcmVhY3RpdmVuZXNzIGFjcm9zc1xuICAgICAgLy8gcHJvdmlkZS9pbmplY3QsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgICAgcHJvdmlkZToge1xuICAgICAgICBhcGksXG4gICAgICAgIC8vIEEgZGVmYXVsdCBsaXN0IG9mIHZlcmJzIGFyZSBwcm92aWRlZCBieSAkdmVyYnMoKSBhbmQgY2FuIGJlXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gYXQgYW55IHBvaW50IGluIHRoZSBjb21wb25lbnQgaGllcmFyY2h5LlxuICAgICAgICAkdmVyYnM6ICgpID0+IHZlcmJzLFxuICAgICAgICAvLyBQcm92aWRlIGRlZmF1bHRzIHNvIERpdG9NaXhpbiBjYW4gaW5qZWN0IHRoZW0gZm9yIGFsbCBjb21wb25lbnRzOlxuICAgICAgICAvLyAgIGluamVjdDogWyAgJyRpc1BvcHVsYXRlZCcsICckc2NoZW1hQ29tcG9uZW50JywgJyRyb3V0ZUNvbXBvbmVudCcgXVxuICAgICAgICAkdmlld3M6ICgpID0+IHt9LFxuICAgICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRydWUsXG4gICAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gICAgICB9LFxuXG4gICAgICByZW5kZXI6IGNyZWF0ZUVsZW1lbnQgPT4gY3JlYXRlRWxlbWVudChEaXRvUm9vdCwge1xuICAgICAgICAvLyBQcmVzZXJ2ZSB0aGUgcm9vdCBjb250YWluZXIncyBpZCwgYXMgcmVxdWlyZWQgYnkgaG90LXJlbG9hZGluZzpcbiAgICAgICAgYXR0cnM6IHtcbiAgICAgICAgICBpZDogZWwuaWRcbiAgICAgICAgfSxcbiAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICB1bnJlc29sdmVkVmlld3M6IHZpZXdzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAgLy8gVGhpcyBtYXkgb25seSBiZSBuZWVkZWQgdG8gYXZvaWQgdHJlZS1zaGFja2luZyBvZiB0aGVzZSBjb21wb25lbnRzLFxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFjdHVhbGx5IGhhbmRsZSByZWdpc3RyeSBpbnRlcm5hbGx5IGFscmVhZHkuXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgICAgIC4uLnR5cGVzXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gVHlwZUNvbXBvbmVudC5yZWdpc3Rlcih0eXBlLCBvcHRpb25zKVxuICB9XG5cbiAgcmVxdWVzdCh7XG4gICAgdXJsLFxuICAgIG1ldGhvZCA9ICdnZXQnLFxuICAgIGRhdGEgPSBudWxsLFxuICAgIHBhcmFtcyA9IG51bGwsXG4gICAgaGVhZGVycyA9IG51bGxcbiAgfSkge1xuICAgIGNvbnN0IGlzQXBpUmVxdWVzdCA9IHRoaXMuYXBpLmlzQXBpUmVxdWVzdCh1cmwpXG4gICAgcmV0dXJuIGF4aW9zLnJlcXVlc3Qoe1xuICAgICAgdXJsLFxuICAgICAgbWV0aG9kLFxuICAgICAgcGFyYW1zLFxuICAgICAgLi4uKGRhdGEgJiYgeyBkYXRhIH0pLFxuICAgICAgYmFzZVVSTDogaXNBcGlSZXF1ZXN0ID8gdGhpcy5hcGkudXJsIDogbnVsbCxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgLi4uKGlzQXBpUmVxdWVzdCAmJiB0aGlzLmFwaS5oZWFkZXJzKSxcbiAgICAgICAgLi4uaGVhZGVyc1xuICAgICAgfSxcbiAgICAgIHdpdGhDcmVkZW50aWFsczogaXNBcGlSZXF1ZXN0ICYmICEhdGhpcy5hcGkuY29ycz8uY3JlZGVudGlhbHNcbiAgICB9KVxuICB9XG59XG4iXSwibmFtZXMiOlsidWlkIiwiY29tcG9uZW50cyIsInJlbmRlciIsInN0YXRpY1JlbmRlckZucyIsIl9fdnVlMl9zY3JpcHQiLCJUeXBlQ29tcG9uZW50IiwiU2tldGNoUGlja2VyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsTUFBZSxLQUFBO0FBQUEsRUFDYixPQUFPO0FBQUEsRUFDUCxpQkFBaUIsQ0FBRTtBQUFBLEVBQ25CLE1BQU07QUFBQSxF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O0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxnQkFBQTtBQUNBLGFBQUEsS0FBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLGFBQUEsS0FBQSxlQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLFNBQUEsUUFBQSxTQUFBLFNBQUEsaUJBR0EsS0FBQSxTQUFBLGtCQUFBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxNQUFBLFVBQUE7QUFHQSxTQUFBLE1BQUEsVUFBQTtBQUFBLE1BQ0EsT0FBQSxPQUFBO0FBQ0EsUUFBQSxFQUFBLE9BQUEsUUFBQSxhQUFBLEtBQ0EsTUFBQSxTQUFBLGNBQUE7QUFBQSxNQUVBO0FBQUEsTUFFQSxPQUFBLE9BQUE7QUFDQSxRQUFBLEVBQUEsU0FBQSxTQUNBLE1BQUEsU0FBQSxjQUFBO0FBQUEsTUFFQTtBQUFBLElBQ0EsQ0FBQTtBQUNBLFFBQUE7QUFDQSxXQUFBLGFBQUEsSUFDQSxBQUFBLE1BQUEsS0FBQSxjQUNBLE1BQUEsS0FBQSxhQUFBLElBRUEsTUFBQSxLQUFBLE1BQUE7QUFBQSxJQUVBLFNBQUEsR0FBQTtBQUNBLGNBQUEsTUFBQSxDQUFBO0FBQUEsSUFDQTtBQUNBLFNBQUEsYUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxVQUFBLFFBQUEsVUFBQSxZQUFBLElBQUE7QUFDQSxnQkFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLFFBQ0EsT0FBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLE1BQ0EsRUFBQSxNQUFBLGlCQUNBLElBQUEsTUFDQSxFQUFBLENBQUEsRUFBQSxLQUFBLFVBQUEsUUFDQSxRQUFBLGVBQUEsTUFBQTtBQUNBLFlBQUEsSUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLFFBQ0EsT0FBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLE1BQ0EsRUFBQSxNQUFBO0FBRUEsY0FBQSxHQUFBLEdBQUEsQ0FBQSxDQUFBO0FBQ0EsWUFBQSxFQUFBLG1CQUFBLE9BQUEsS0FBQTtBQUNBLFVBQUEsR0FBQTtBQUtBLGNBQUEsRUFBQSxvQkFBQSxPQUFBLEdBQ0EsSUFBQSxNQUFBLEVBQUEsU0FBQSxFQUFBLFVBQUE7QUFDQSxhQUFBLFFBQUEsRUFBQSxTQUFBLFVBQUEsU0FBQSxhQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHFCQUFBO0FBQ0EsV0FBQSxjQUFBLFdBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQSxHQUFBO0FBQ0EsV0FBQSxnQkFBQSxJQUFBLElBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxNQUFBLFFBQUE7O0FBQ0EsV0FBQSxhQUFBO0FBQ0EsWUFBQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsVUFDQSxLQUFBLFFBQUEsU0FBQSxDQUFBLEdBQ0EsSUFBQSxNQUFBLEtBQUEsV0FBQTtBQUFBLFFBQ0EsWUFBQTtBQUFBLFVBQ0EsVUFBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0EsV0FBQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLFVBQUE7QUFBQSxZQUNBLE1BQUE7QUFBQSxVQUNBO0FBQUEsVUFDQSxHQUFBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLFVBQ0EsUUFBQSxDQUFBO0FBQUEsVUFDQSxPQUFBLEVBQUEsTUFBQSxTQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FBQTtBQUNBLFVBQUE7QUFDQSxZQUFBO0FBQ0EsZ0JBQUEsSUFBQSxNQUFBLEtBQUEsWUFBQTtBQUFBLFlBQ0EsVUFBQSxLQUFBLElBQUEsTUFBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0EsVUFBQTtBQUFBLFVBQ0EsQ0FBQTtBQUNBLFVBQUEsSUFDQSxTQUFBLFFBQUEsQ0FBQSxJQUVBLE1BQUEsUUFBQSxFQUFBLEtBQUEsSUFBQSxHQUNBLE1BQUEsS0FBQSxhQUFBO0FBQUEsUUFFQSxTQUFBLEdBQUE7QUFDQSxnQkFBQSxJQUFBLFlBQUEsYUFBQSxrQkFBQSxTQUFBLGtCQUFBO0FBQ0EsZUFBQSxPQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsWUFDQSxPQUFBO0FBQUEsWUFDQSxNQUFBLEtBQUE7QUFBQSxVQUNBLENBQUEsR0FDQSxLQUNBLFFBQUEsTUFBQSxHQUFBLEVBQUEsUUFBQSxHQUVBLEtBQUEsTUFBQTtBQUFBLFFBQ0E7QUFBQSxJQUVBO0FBQUEsSUFFQSxlQUFBO0FBQ0EsYUFBQSxLQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEsU0FBQTtBQUNBLFVBQUE7QUFLQSxRQUFBLEFBSkEsT0FBQSxLQUFBLFlBQUE7QUFBQSxVQUNBLFVBQUEsS0FBQSxJQUFBLE1BQUE7QUFBQSxVQUNBLFVBQUE7QUFBQSxRQUNBLENBQUEsR0FDQSxLQUFBLFdBQ0EsTUFBQSxRQUFBLElBQUEsR0FDQSxLQUFBLGFBQUE7QUFBQSxNQUVBLFNBQUEsR0FBQTtBQUNBLGdCQUFBLE1BQUEsQ0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxNQUFBLFlBQUE7QUFDQSxVQUFBLElBQUE7QUFDQSxVQUFBO0FBS0EsWUFBQSxBQUpBLE9BQUEsS0FBQSxZQUFBO0FBQUEsVUFDQSxVQUFBLEtBQUEsSUFBQSxNQUFBO0FBQUEsVUFDQSxVQUFBO0FBQUEsUUFDQSxDQUFBLEdBQ0EsS0FBQSxRQUFBO0FBQUEsTUFDQSxTQUFBLEdBQUE7QUFDQSxhQUFBLE9BQUE7QUFBQSxVQUNBLE1BQUE7QUFBQSxVQUNBLE9BQUE7QUFBQSxVQUNBLE1BQUE7QUFBQSxRQUNBLENBQUE7QUFBQSxNQUNBO0FBQ0Esa0JBQUEsUUFBQSxDQUFBLEdBQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBLEdBQUE7QUFDQSxXQUFBLFNBQUEsT0FDQSxLQUNBLE9BQUEsZUFBQSxHQUFBLEdBQUEsU0FBQSxHQUdBLEtBQ0EsTUFBQSxnQkFBQSxDQUFBLEdBQ0EsS0FBQSxhQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsTUFBQSxhQUFBO0FBQ0EsTUFBQSxNQUFBLEtBQUEsVUFBQSxLQUNBLE1BQUEsS0FBQSxNQUFBO0FBQUEsSUFFQTtB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SUFDQSxTQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsU0FBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxNQUFBLEVBQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFFQSxVQUFBLElBQUEsR0FBQSxLQUFBLElBQUE7QUFDQSxlQUFBLEtBQUEsS0FBQTtBQUNBLE1BQUEsS0FBQSxLQUNBLEdBQUEsS0FBQTtBQUdBLFdBQUE7QUFBQSxNQUNBLGNBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLGtCQUFBO0FBQ0EsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFDQSxhQUFBLEtBQUEsUUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxZQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBLE9BQUEsUUFBQSxHQUFBLEtBQUEsT0FBQSxDQUFBLEVBQUEsT0FHQSxDQUFBLEdBQUEsQ0FBQSxHQUFBLE9BQUE7QUFDQSxjQUFBLEVBQUEsY0FBQTtBQUNBLGVBQUEsTUFBQSxZQUFBLENBQUEsS0FDQSxLQUFBO0FBQUEsVUFDQSxHQUFBO0FBQUEsVUFDQSxRQUFBO0FBQUEsWUFDQSxPQUFBLE1BQUEsS0FBQSxPQUFBO0FBQUEsVUFDQTtBQUFBLFFBQ0EsSUFFQSxFQUFBLEtBQUEsR0FDQTtBQUFBLE1BQ0EsR0FDQSxDQUFBLENBQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQSxDQUFBLENBQUEsS0FBQSxjQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLGVBQUEsR0FBQSxRQUFBO0FBQUEsTUFDQSxPQUFBLE1BQUE7QUFDQSxRQUFBLEtBQUEsYUFBQSxNQUFBLFlBQUEsTUFDQSxLQUFBLE9BQUE7QUFB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R0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFdBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxhQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsWUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsVUFBQSxFQUFBLFlBQUEsS0FBQTtBQUNBLFdBQUE7QUFBQSxNQUVBLEdBQ0EsS0FBQSxFQUFBLENBQUEsSUFDQSxFQUFBLEtBQUEsTUFBQSxLQUFBLE9BQUEsSUFDQTtBQUFBLE1BRUEsb0JBQUEsQ0FBQTtBQUFBLE1BQ0EsZUFBQSxDQUFBO0FBQUEsTUFDQSxnQkFBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLGtCQUFBO0FBRUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHdCQUFBO0FBSUEsYUFBQSxLQUFBLGFBQUEsT0FBQSxLQUFBLFFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBO0FBQ0EsWUFBQSxJQUFBLEdBQUEsS0FBQSxPQUFBLFFBQUEsRUFBQTtBQUNBLGlCQUFBLEtBQUEsS0FBQTtBQUNBLFVBQUEsS0FBQSxHQUFBLEVBQUEsWUFBQTtBQUVBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBQ0EsYUFBQSxFQUFBLEtBQUEsT0FBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTs7QUFDQSxZQUFBLElBQUEsV0FBQSxPQUFBLFNBQUEsa0JBQUEsTUFBQSxPQUFBLE1BQ0EsSUFBQSxLQUFBLEtBQUEsYUFBQSxLQUFBLEtBQUEsRUFBQSxJQUNBLElBQ0EsV0FBQSxlQUFBLGtCQUFBLFNBQUE7QUFDQSxhQUFBLE1BQUEsS0FFQSxLQUFBLFFBQUEsUUFBQSxFQUFBLE1BQUEsRUFBQSxDQUFBLEdBRUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsVUFBQSxLQUFBLE1BQUE7QUFDQSxZQUFBLElBQUE7QUFDQSxtQkFBQSxLQUFBLE9BQUEsT0FBQSxLQUFBLElBQUEsR0FBQTtBQUNBLGdCQUFBLEVBQUEsa0JBQUE7QUFDQSxjQUFBLEVBQUEsQ0FBQSxJQUNBLEVBQUEsS0FBQSxNQUFBLEtBQUEsT0FBQSxJQUNBO0FBRUEsbUJBQUE7QUFFQSxVQUFBLEtBQ0EsS0FBQTtBQUFBLFFBRUE7QUFDQSxlQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUE7O0FBQ0EsYUFBQSxVQUFBLFdBQUEsa0JBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUEsS0FBQSxZQUFBLEVBQUEsUUFBQSxVQUFBLFlBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsU0FBQSxLQUFBLE9BQUE7QUFBQSxRQUNBLEdBQUEsS0FBQSxZQUFBLEVBQUEsUUFBQSxhQUFBLFlBQUEsSUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFRQSxPQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQSxHQUFBLEtBQUEsVUFBQSxLQUFBLFVBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUE7QUFDQSxhQUFBLEtBQUEsU0FDQSxLQUFBLGtCQUFBLEtBQUEsY0FBQSxLQUFBLE1BQUEsS0FBQSxPQUFBLENBQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxLQUFBLGNBQUEsT0FBQSxFQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQSxLQUFBLGNBQUEsT0FBQSxFQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsT0FBQSxFQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsT0FBQSxFQUFBLFdBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxDQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7QUFDQSxhQUFBLENBQUEsQ0FBQSxLQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBLENBQUEsS0FBQSxXQUFBLENBQUEsQ0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLFlBQUEsRUFBQSxrQkFBQSxLQUFBO0FBQ0EsYUFBQSxDQUFBLENBQUEsS0FBQSxPQUFBLEtBQUEsQ0FBQSxFQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBLEdBQUEsVUFBQTtBQUFBLE1BQ0EsVUFBQTtBQUNBLGVBQUEsQ0FBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsYUFBQTtBQUNBLGFBQUEsT0FBQSxPQUFBLEtBQUEsa0JBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLGFBQUEsT0FBQSxPQUFBLEtBQUEsY0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHVCQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsa0JBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxrQkFBQTtBQUNBLGFBQUEsS0FBQSx1QkFBQSxLQUFBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTtBQUNBLGFBQUEsS0FBQSx1QkFBQSxLQUFBLGNBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsVUFBQSxFQUFBLEdBQ0EsS0FBQSxrQkFBQSxHQUVBLEtBQUEsU0FBQSxVQUFBLEtBQUEscUJBQUEsR0FDQSxLQUFBLFVBQUEsWUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLGdCQUFBO0FBQ0EsU0FBQSxVQUFBLFNBQUEsR0FDQSxLQUFBLFVBQUEsRUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLHdCQUFBLEdBQUEsR0FBQTtBQUNBLGFBQUEsS0FBQSxzQkFDQSxLQUFBLHNCQUFBLEdBQUEsQ0FDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHVCQUFBLEdBQUEsR0FBQTtBQUNBLGFBQUEsS0FBQSx3QkFBQSxHQUFBLENBQUEsRUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsb0JBQUEsR0FBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLGtCQUFBLEtBQUEsc0JBQUEsR0FBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsbUJBQUEsR0FBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLG9CQUFBLEdBQUEsQ0FBQSxFQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBLEdBQUEsR0FBQTtBQUNBLGFBQUEsS0FBQSxZQUFBLEtBQUEsc0JBQUEsR0FBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQSxHQUFBLEdBQUE7QUFDQSxhQUFBLEtBQUEsY0FBQSxHQUFBLENBQUEsRUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsb0JBQUEsR0FBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLHNCQUFBLEtBQUEsa0JBQUEsR0FBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsbUJBQUEsR0FBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLG9CQUFBLEdBQUEsQ0FBQSxFQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBLEdBQUEsR0FBQTtBQUNBLGFBQUEsS0FBQSxZQUFBLEtBQUEsa0JBQUEsR0FBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQSxHQUFBLEdBQUE7QUFDQSxhQUFBLEtBQUEsVUFBQSxHQUFBLENBQUEsRUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsS0FBQSxXQUFBLEtBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUEsR0FBQTtBQUNBLGFBQUEsS0FBQSxlQUFBLEtBQUEsV0FBQSxNQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBLEdBQUE7QUFDQSxXQUFBLFVBQUEsVUFBQTtBQUFBLFFBRUEsU0FBQSxFQUFBLFVBQUE7QUFBQSxNQUNBLENBQUEsR0FRQSxFQUFBLEtBQUEsVUFBQSxLQUFBLEtBQUEsWUFBQSxNQUNBLE1BQUEsU0FBQTtBQUFBLElBRUE7QUFBQSxJQUVBLFdBQUE7QUFDQSxXQUFBLFVBQUEsUUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGtCQUFBO0FBQ0EsaUJBQUEsS0FBQSxLQUFBO0FBQ0EsVUFBQSxnQkFBQTtBQUFBLElBRUE7QUFBQSxJQUVBLGNBQUE7QUFDQSxpQkFBQSxLQUFBLEtBQUE7QUFDQSxVQUFBLFlBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxRQUFBOztBQUNBLGdCQUFBLDBCQUFBLFVBQUEsU0FDQSxLQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBLEdBQUEsSUFBQSxJQUFBO0FBQ0EsWUFBQSxFQUFBLDRCQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUEsR0FBQTtBQUNBLGNBQUEsSUFBQSxFQUFBLENBQUEsSUFDQSxJQUNBLEdBQUEsQ0FBQSxJQUNBLE9BQUEsRUFBQSxLQUFBLENBQUEsSUFDQTtBQUNBLFlBQUEsSUFDQSxPQUFBLEtBQUEsQ0FBQSxFQUFBLE9BQUEsQ0FBQSxJQUNBLEVBQUEsQ0FBQSxJQUNBLElBQ0EsQ0FBQSxDQUFBO0FBQUEsTUFDQTtBQUNBLE1BQUEsS0FDQSxLQUFBLFlBQUE7QUFFQSxVQUFBLElBQUEsSUFDQSxJQUFBO0FBQ0EsZ0JBQUEsT0FBQSxLQUFBLENBQUE7QUFDQSxpQkFBQSxLQUFBLEdBQUE7QUFDQSxjQUFBLElBQUEsS0FBQSx3QkFBQSxDQUFBO0FBQ0EsbUJBQUEsS0FBQTtBQUNBLFVBQUEsRUFBQSxTQUFBLENBQUEsS0FFQSxNQUFBLEtBQ0EsRUFBQSxNQUFBLEdBRUEsSUFBQSxJQUNBLElBQUE7QUFBQSxNQUdBO0FBQ0EsYUFBQSxLQUFBLENBQUEsS0FDQSxLQUFBLGFBQUEsR0FFQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUEsR0FBQTtBQUNBLGFBQUEsS0FBQSxZQUFBLEdBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEscUJBQUEsR0FBQSxHQUFBOztBQUNBLFdBQUEsWUFBQTtBQUNBLFVBQUEsSUFBQTtBQUNBLFlBQUEsSUFBQSxDQUFBO0FBQ0EsaUJBQUEsQ0FBQSxHQUFBLE1BQUEsT0FBQSxRQUFBLENBQUEsR0FBQTtBQUdBLGNBQUEsSUFBQSxLQUFBLGFBQ0EsRUFBQSxLQUFBLFVBQUEsQ0FBQSxJQUNBLEdBSUEsSUFBQSxFQUFBLENBQUE7QUFDQSxZQUFBLElBQUE7QUFDQSxjQUFBLElBQUEsS0FBQSx3QkFBQSxDQUFBO0FBQ0EsbUJBQUEsS0FBQTtBQUNBLFVBQUEsRUFBQSxxQkFBQSxHQUFBLEtBQUEsQ0FBQSxLQUNBLEtBQUEsSUFDQSxJQUFBO0FBR0EsWUFBQSxDQUFBLEdBQUE7QUFJQSxnQkFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLGlCQUFBLEVBQUEsU0FBQSxLQUFBO0FBQ0Esa0JBQUEsSUFBQSxLQUFBLHdCQUFBLENBQUE7QUFDQSx1QkFBQSxLQUFBO0FBQ0Esa0JBQUEsTUFBQSxRQUFBLHdCQUFBLDBCQUNBLEdBQ0EsT0FBQTtBQUNBLG9CQUFBLElBQUE7QUFDQSwyQkFBQSxLQUFBLEdBQUE7QUFDQSx3QkFBQSxJQUFBLEVBQUEsRUFBQTtBQUNBLGtCQUNBLEtBQ0EsRUFBQSxxQkFBQSxHQUFBLEtBQUEsQ0FBQSxLQUVBLEtBQUEsSUFDQSxJQUFBO0FBQUEsZ0JBRUE7QUFDQSx1QkFBQTtBQUFBLGNBQ0E7QUFNQTtBQUlBLGNBQUEsSUFBQTtBQUFBLFVBQ0E7QUFHQSxnQkFBQSxJQUFBLEVBQUEsQ0FBQTtBQUNBLHFCQUFBLEtBQUEsR0FBQTtBQUNBLGtCQUFBLElBQUEsSUFDQSxhQUFBLE1BQ0EsT0FBQSxLQUFBO0FBQ0EsY0FBQSxLQUFBLEdBQUEsS0FBQSxFQUFBLFNBQUE7QUFBQSxVQUNBO0FBQUEsUUFDQTtBQUNBLFlBQUE7QUFBQSxNQUNBO0FBQ0EsTUFBQSxLQUNBLEtBQUEsYUFBQSxFQUFBLEtBQUE7QUFBQSxDQUFBLENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxhQUFBLEdBQUE7QUFDQSxXQUFBLE9BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxRQUNBLE9BQUE7QUFBQSxRQUNBLE1BQUEsS0FBQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUE7QUFJQSxhQUFBLE9BQUEsS0FBQSxNQUFBLEdBQUEsS0FBQSxRQUFBLElBQUEsSUFBQSxDQUFBLEdBQ0EsS0FBQSxZQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQSxHQUFBO0FBQ0EsaUJBQUEsS0FBQTtBQUNBLFlBQUEsS0FBQSxLQUFBLE1BQUE7QUFDQSxlQUFBLEtBQUEsS0FBQSxNQUFBLEdBQUEsRUFBQSxFQUFBO0FBQ0EscUJBQUEsS0FBQSxLQUFBLG9CQUFBLENBQUE7QUFDQSxjQUFBLFVBQUE7QUFBQSxRQUVBO0FBQUEsSUFFQTtBQUFBLElBRUEsV0FBQSxHQUFBO0FBSUEsWUFBQSxJQUFBLENBQUE7QUFDQSxpQkFBQSxDQUFBLEdBQUEsTUFBQSxPQUFBLFFBQUEsQ0FBQTtBQUNBLFFBQUEsR0FBQSxDQUFBLEtBQUEsRUFBQSxDQUFBLE1BRUEsQUFEQSxLQUFBLG9CQUFBLENBQUEsRUFDQSxLQUFBLE9BQUEsRUFBQSxZQUFBLEtBSUEsR0FBQSxLQUFBO0FBRUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUEsRUFBQSxZQUFBLGFBQUEsZ0JBQUEsT0FBQSxJQUFBO0FBQ0EsYUFBQSxHQUNBLEtBQUEsUUFDQSxLQUFBLGNBQ0EsS0FBQSxNQUNBLEtBQUEsVUFBQTtBQUFBLFFBR0EsV0FBQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDQSxDQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQSxHQUFBOztBQUdBLGdCQUFBLHVCQUFBLE1BQUEsVUFBQSx5QkFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsbUJBQUEsR0FBQSxHQUFBOztBQUNBLFdBQUEsZUFBQSxLQUFBLG9CQUFBLEdBQUEsQ0FBQSxHQUVBLFVBQUEsMEJBQUEsVUFBQSxtQkFBQSxHQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQSxHQUFBLEdBQUE7QUFDQSxXQUFBLGVBQUEsS0FBQSxlQUFBLEdBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUEsR0FBQSxHQUFBO0FBQ0EsV0FBQSxlQUFBLEtBQUEsZ0JBQUEsR0FBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZUFBQSxHQUFBLEdBQUEsR0FBQTtBQUNBLFlBQUEsSUFBQSxFQUFBO0FBQ0EsTUFBQSxJQUNBLEtBQUEsS0FBQSxHQUFBLEdBQUEsQ0FBQSxJQUVBLEtBQUEsUUFBQSxHQUFBLENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSx1QkFBQSxHQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsQ0FBQSxFQUFBLE9BQUEsQ0FBQSxHQUFBLE1BQUE7QUFHQSxjQUFBLEVBQUEsZ0JBQUE7QUFFQSxlQURBLGlCQUFBLENBQUEsSUFDQSxLQUFBLENBQUEsR0FDQTtBQUFBLE1BQ0EsR0FBQSxFQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQSxHQUFBLEdBQUEsR0FBQTtBQUNBLGFBQUEsRUFBQSxDQUFBLEVBQUEsV0FBQSxLQUFBLFFBQUEsSUFDQSxLQUFBLHNCQUFBLEdBQUEsR0FBQSxDQUFBLElBQ0EsS0FBQSxrQkFBQSxHQUFBLEdBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHNCQUFBLEdBQUEsR0FBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQ0EsRUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLEdBQ0EsQ0FD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R0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsQ0FBQSxRQUFBLEtBQUEsR0FBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLFFBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsVUFBQTtBQUNBLGFBQUEsSUFBQSxFQUFBLE1BQUEsRUFBQSxRQUFBLEtBQUEsUUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLEVBQUEsS0FBQSxNQUFBLEtBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7QUFDQSxZQUFBLEVBQUEsY0FBQSxNQUNBLEVBQUEsYUFBQTtBQUNBLGFBQ0EsTUFBQSxNQUNBLEVBQUEsQ0FBQSxLQUFBLEtBQUEsWUFBQSxpQkFBQSxLQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsUUFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLEtBQUEsU0FBQSxLQUFBLE1BQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBRUEsYUFBQSxLQUFBLFNBQUEsS0FBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUEsRUFBQSxTQUFBO0FBQUEsTUFDQSxNQUFBLENBQUEsUUFBQSxNQUFBO0FBQUEsTUFDQSxVQUFBO0FBQ0EsZUFBQSxLQUFBLFlBQUE7QUFBQSxNQUNBO0FBQUEsTUFDQSxJQUFBLEdBQUE7QUFFQSxlQUFBLE1BQUEsU0FDQSxJQUNBLEVBQUEsQ0FBQSxJQUNBLEVBQUEsTUFBQSxtQkFBQSxFQUFBLEtBQ0E7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSx3QkFBQSxFQUFBLFNBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLElBQUEsR0FBQTtBQUNBLGVBQUEsRUFBQSxDQUFBLEtBQ0EsRUFBQSxNQUFBLGFBQUEsRUFBQSxNQUFBO0FBQUEsTUFFQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsa0JBQUEsRUFBQSxXQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxVQUFBO0FBQ0EsZUFBQSxLQUFBLFlBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxtQkFBQSxFQUFBLFlBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxNQUNBLElBQUEsR0FBQTtBQUNBLGVBQUEsS0FBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsaUJBQUE7QUFDQSxZQUFBLEVBQUEsT0FBQSxNQUFBLEtBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxlQUFBLEtBQUE7QUFBQSxRQUNBLHFCQUFBLEdBQUEsS0FBQSxNQUFBO0FBQUEsUUFDQSxHQUNBLEVBQUEsQ0FBQSxJQUNBLEVBQUEsQ0FBQSxJQUFBLEdBQUEsSUFDQTtBQUFBLE1BRUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxpQkFBQTtBQUNBLFlBQUEsSUFBQSxLQUFBLGdCQUVBLElBQ0EsQ0FBQSxNQUFBLFFBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQSxJQUFBLFNBQ0EsS0FBQSxLQUFBLENBQUEsSUFBQSxXQUFBLENBQUEsSUFDQSxRQUFBLEtBQUEsQ0FBQSxJQUFBLElBQ0EsR0FBQSxDQUFBLElBQUE7QUFFQSxhQUFBLEVBQUEsQ0FBQSxJQUFBLEdBQUEsT0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGlCQUFBO0FBRUEsWUFBQSxJQUNBLEtBQUEsMkJBQUEsT0FDQSxLQUFBLG1CQUFBLFFBR0EsSUFBQSxLQUFBLDJCQUFB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QUFBLEVBQUEsTUFBQSxDQUFBLFFBQUEsS0FBQSxHQUFBLFNBQUEsS0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxhQUFBO0FBQUEsTUFDQSxjQUFBO0FBQUEsTUFDQSxjQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLG1CQUFBO0FBQ0EsYUFBQSxFQUFBLEtBQUEsU0FBQSxJQUFBLEtBQUEsWUFBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLFlBQUEsRUFBQSxZQUFBLEtBQUE7QUFDQSxhQUFBLElBQ0EsT0FBQSxFQUFBLEtBQUEsTUFBQSxJQUFBLEVBQUEsTUFBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUEsQ0FBQSxJQUNBLE9BQUEsR0FBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQTtBQUNBLFlBQUEsRUFBQSxhQUFBLEtBQUE7QUFDQSxhQUFBLElBQ0EsT0FBQSxFQUFBLEtBQUEsTUFBQSxJQUFBLEVBQUEsTUFBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUEsQ0FBQSxJQUNBLE9BQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUdBLFNBQUEsTUFBQSxVQUFBO0FBQUEsTUFDQSxNQUFBLEtBQUE7QUFBQSxJQUNBLENBQUEsR0FDQSxLQUFBLE1BQUEsUUFBQTtBQUFBLE1BQ0EsT0FBQSxLQUFBO0FBQUEsSUFDQSxDQUFBLEdBQ0EsS0FBQSxPQUFBLFFBQUE7QUFBQSxNQUVBLFdBQUE7QUFBQSxNQUNBLFNBQUEsQ0FBQSxHQUFBLE1BQUE7QUFDQSxRQUFBLE1BQUEsS0FDQSxLQUFBLGVBQUE7QUFBQSxNQUVBO0FBQUEsSUFDQSxDQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsTUFBQSxpQkFBQSxHQUFBOztBQUVBLFVBQUEsRUFBQSxxQkFBQSxLQUFBO0FBQ0EsVUFBQTtBQUNBLGNBQUEsSUFBQSxNQUFBLHFCQUFBLGNBQUEsa0JBQUEsYUFBQTtBQUNBLFFBQUEsS0FBQSxnQkFBQSxLQUdBLE9BQUEscUJBQUEsY0FBQSxrQkFBQSxjQUFBLDBCQUFBLEtBQ0EsS0FBQSxlQUFBLEtBRUEsS0FDQSxLQUFBLEtBQUEsTUFBQSxDQUFBO0FBQUEsTUFFQSxTQUFBLEdBQUE7QUFDQSxRQUFBLEtBQ0EsU0FBQSxNQUFBLEdBQUEsRUFBQSxNQUFBLEVBQUEsT0FBQSxHQUNBLEVBQUEsU0FBQSxpQkFDQSxNQUFBO0FBQUE7QUFBQSxnQkFFQSxFQUFBO0FBQUEsYUFDQTtBQUFBLE1BR0E7QUFDQSxZQUFBLEVBQUEsZUFBQSxNQUFBLEtBQUEsQ0FBQTtBQUNBLGFBQUEsTUFBQSxXQUFBLG9CQUFBLGtCQUFBLE9BQUEsUUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxpQkFBQTtBQUNBLFdBQUEsY0FBQSxDQUFBLENBQUEsS0FBQSxNQUdBLEtBQUEsZUFBQSxDQUFBLENBQUEsTUFBQSxLQUFBLGlCQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxNQUFBLFNBQUE7O0FBQ0EsVUFBQSxJQUFBLFVBQUEsb0JBQUEsa0JBQUE7QUFDQSxVQUFBO0FBQ0EsWUFBQSxLQUFBLEtBQUEsU0FBQSxDQUFBLEdBRUEsS0FBQSxTQUFBLGdCQUFBO0FBQ0EsWUFBQTtBQUNBLGdCQUFBLElBQUEsS0FBQSxVQUFBLEdBQUEsTUFBQSxDQUFBO0FBQ0EsZ0JBQUEscUJBQUEsY0FBQSxrQkFBQSxjQUFBLDBCQUFBLEtBRUEsTUFBQSxLQUFBLGVBQUE7QUFBQSxRQUNBLFNBQUEsR0FBQTtBQUNBLGtCQUFBLE1BQUEsR0FBQSxFQUFBLE1BQUEsRUFBQSxPQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsU0FBQSxHQUFBO0FBQ0EsZ0JBQUEsTUFBQSxDQUFBLEdBQ0EsTUFBQSxFQUFBLE9BQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxVQUFBO0FBQ0EsVUFBQSxJQUFBLE1BQUEsS0FBQSxpQkFBQSxFQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUEsS0FBQSxLQUFBLFVBQUEsQ0FBQSxHQUNBLEtBQ0EsS0FBQSxnQkFBQSxRQUFBLENBQUE7QUFBQSxNQUVBLFNBQUEsR0FBQTtBQUNBLGdCQUFBLE1BQUEsQ0FBQSxHQUNBLE1BQUEsRUFBQSxPQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTs7Ozs7Ozs7S0M1SmUsS0FBQTtBQUFBLEVBQ2IsT0FBTztBQUNMLFdBQU87QUFBQSxNQUNMLFdBQVc7QUFBQSxJQUNaO0FBQUEsRUFDRjtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsV0FBVyxHQUFXLEVBQUUsZ0JBQWEsSUFBTyxnQkFBYSxPQUFVLElBQUk7QUFDckUsTUFBSSxDQUFDLEtBQUssWUFBWSxDQUFDLEtBQ3JCLE1BQUssWUFBWSxDQUFDLENBQUMsR0FDZixLQUNGLEtBQUssY0FBYyxnQkFBZ0IsQ0FBUyxHQUUxQyxLQUNGLEtBQUssY0FBYyxXQUFXLEtBQUssU0FBUztBQUFBLElBR2pEO0FBQUEsRUFDRjtBQUNILEdDYmUsS0FBQTtBQUFBLEVBQ2IsUUFBUSxDQUFDLElBQVcsRUFBWTtBQUFBLEVBRWhDLFVBQVU7QUFDUixXQUFPO0FBQUEsTUFDTCxvQkFBb0IsTUFBTTtBQUFBLE1BRTFCLFFBQVEsTUFBTSxLQUFLO0FBQUEsTUFDbkIsY0FBYyxNQUFNLEtBQUs7QUFBQSxJQUMxQjtBQUFBLEVBQ0Y7QUFBQSxFQUVELE9BQU87QUFDTCxXQUFPO0FBQUEsTUFDTCxZQUFZO0FBQUEsSUFDYjtBQUFBLEVBQ0Y7QUFBQSxFQUVELFVBQVU7QUFBQSxJQUNSLG9CQUFvQjtBQUNsQixhQUFPO0FBQUEsSUFDUjtBQUFBLElBRUQsV0FBVztBQUdULGFBQU8sS0FBSyxZQUFhO0FBQUEsSUFDMUI7QUFBQSxJQUVELGVBQWU7QUFFYixhQUFPLENBQUMsQ0FBQyxLQUFLO0FBQUEsSUFDZjtBQUFBLElBRUQsY0FBYztBQUtaLGFBQU87QUFBQSxJQUNSO0FBQUEsSUFFRCxjQUFjO0FBS1osWUFBTSxJQUFPLEtBQUs7QUFDbEIsYUFDRSxDQUFDLEtBQUssZ0JBQ04sQ0FBQyxLQUFLLGVBQ04sS0FDRSxHQUFLLGVBQ0wsRUFBSztBQUFBLElBR1Y7QUFBQSxJQUVELGdCQUFnQjtBQUNkLGFBQ0UsS0FBSyxlQUNMO0FBQUEsSUFHSDtBQUFBLElBRUQsYUFBYTtBQUNYLGFBQ0UsQ0FBQyxLQUFLLGVBQ04sQ0FBQyxLQUFLO0FBQUEsSUFFVDtBQUFBLElBR0QsVUFBVTtBQUVSLGFBQU8sQ0FBQyxDQUFDLEtBQUs7QUFBQSxJQUNmO0FBQUEsSUFFRCxRQUFRO0FBR04sYUFBTyxLQUFLLFNBQVU7QUFBQSxJQUN2QjtBQUFBLElBRUQsa0JBQWtCO0FBRWhCLFlBQU0sRUFBRSxVQUFVLE1BQVcsS0FBSztBQUNsQyxVQUFJLEtBQUssZ0JBQWdCLEdBQVE7QUFDL0IsY0FBTSxFQUFFLFVBQU8sTUFBTSxLQUFLLFNBQVMsQ0FBRSxHQUMvQixJQUFRLElBQU87QUFDckIsZUFBTyxDQUFDLEdBQU8sSUFBUSxJQUFTLENBQUM7QUFBQSxNQUNsQztBQUFBLElBQ0Y7QUFBQSxJQUVELGNBQWM7QUFDWixZQUFNLElBQVEsS0FBSyxpQkFDYixFQUFFLFlBQVMsTUFBVSxLQUFLLFNBQVMsQ0FBRTtBQUMzQyxhQUFPO0FBQUEsUUFDTCxHQUFHO0FBQUEsUUFDSCxHQUFJLEtBQVM7QUFBQSxVQUdYLE9BQU8sRUFBTSxLQUFLLEdBQUc7QUFBQSxRQUMvQjtBQUFBLE1BQ087QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBRUQsVUFBVTtBQUVSLElBQUksTUFBSyxnQkFBZ0IsS0FBSyxlQUM1QixLQUFLLFVBQVc7QUFBQSxFQUVuQjtBQUFBLEVBRUQsU0FBUztBQUFBLElBQ1AsY0FBYzs7QUFHWixhQUFPLEVBQVksVUFBSyxpQkFBTCxrQkFBbUIsVUFBVTtBQUFBLFFBQzlDLE1BQU07QUFBQSxRQUNOLFFBQVEsZUFBSyx3QkFBTCxrQkFBMEIsYUFBMUIsV0FBc0M7QUFBQSxNQUN0RCxDQUFPO0FBQUEsSUFDRjtBQUFBLElBRUQsV0FBVztBQUNULFlBQU0sSUFBUSxLQUFLLE9BQVE7QUFDM0IsYUFBTyxLQUFLLGNBQ1I7QUFBQSxRQUNBLEdBQUc7QUFBQSxRQUVILFFBQVE7QUFBQSxRQUNSLFNBQVM7QUFBQSxRQUNULE1BQU07QUFBQSxRQUNOLE9BQU87QUFBQSxRQUNQLFFBQVE7QUFBQSxRQUNSLFNBQVM7QUFBQSxNQUNWLElBQ0M7QUFBQSxJQUNMO0FBQUEsSUFHRCxZQUFZO0FBQ1YsV0FBSyxhQUFhO0FBQUEsSUFDbkI7QUFBQSxJQUdELFFBQVEsR0FBTTtBQUNaLFdBQUssYUFBYTtBQUFBLElBQ25CO0FBQUEsSUFFRCxZQUFZO0FBSVYsV0FBSyxXQUFZO0FBQUEsSUFDbEI7QUFBQSxJQUVELGFBQWE7QUFDWCxNQUFJLEtBQUssY0FDUCxDQUFJLEtBQUssVUFDUCxLQUFLLFdBQVksSUFFakIsS0FBSyxTQUFTLEVBQUk7QUFBQSxJQUd2QjtBQUFBLElBRUQsYUFBYTtBQUNYLFdBQUssU0FBUyxFQUFLO0FBQUEsSUFDcEI7QUFBQSxJQUVELFNBQVMsR0FBTztBQUNkLE1BQUssS0FBSyxlQUNKLE1BQ0YsS0FBSyxVQUFXLEdBRWxCLEtBQUssWUFBYTtBQUFBLElBRXJCO0FBQUEsSUFFRCxXQUFXLEdBQVEsR0FBTTtBQUN2QixhQUFPLEdBQVksR0FBUSxJQUFPLEVBQUUsUUFBTSxJQUFHLENBQUUsR0FBRSxJQUFJO0FBQUEsSUFDdEQ7QUFBQSxJQUVELGNBQWM7QUFDWixZQUFNLElBQVMsS0FBSztBQUNwQixXQUFLLGNBQWMsRUFBRSxRQUFRLE9BQU8sYUFBVSxDQUFDLEdBQUssTUFBYTs7QUFDL0QsWUFBSTtBQUNGLGNBQUksR0FBVTtBQUNaLGtCQUFNLEVBQUUsWUFBUztBQUNqQixnQkFDRSx3QkFBTSxVQUFTLHNCQUNmLFdBQUssbUJBQUwsNkJBQXNCLEVBQUs7QUFDM0IscUJBQU87QUFDRixnQkFBSSxLQUFLLG9CQUFvQixDQUFRO0FBRzFDLHFCQUFPO0FBQUEsVUFFVjtBQUFBO0FBRUQsZUFBSyxRQUFRLEVBQVMsSUFBSSxHQUMxQixLQUFLLGdCQUFnQixNQUFNO0FBQUEsTUFFckMsQ0FBTztBQUFBLElBQ0Y7QUFBQSxJQUVELGtCQUFrQixHQUFVO0FBQzFCLGFBQU8sd0JBQVUsWUFBVztBQUFBLElBQzdCO0FBQUEsSUFFRCxvQkFBb0IsR0FBVTtBQUM1QixhQUFPLHdCQUFVLFlBQVc7QUFBQSxJQUM3QjtBQUFBLElBRUQsTUFBTSxjQUFjO0FBQUEsTUFDbEI7QUFBQSxNQUNBLGNBQVcsS0FBSztBQUFBLE1BQ2hCO0FBQUEsTUFDQTtBQUFBLE9BQ0MsR0FBVTtBQUNYLFlBQU0sSUFBaUI7QUFBQSxRQUNyQixZQUFZO0FBQUEsUUFDWixZQUFZLEtBQUs7QUFBQSxNQUNsQjtBQUNELFdBQUssV0FBVyxJQUFNLENBQWM7QUFDcEMsWUFBTSxJQUFVLEVBQUUsV0FBUSxhQUFVLFNBQU0sVUFBUTtBQUNsRCxVQUFJO0FBQ0YsY0FBTSxJQUFXLE1BQU0sS0FBSyxZQUFZLENBQU87QUFHL0MsVUFBUyxNQUFNLENBQVE7QUFBQSxNQUN4QixTQUFRLEdBQVA7QUFFQSxjQUFNLEVBQUUsZ0JBQWE7QUFDckIsWUFBSSxDQUFDLEVBQVMsR0FBTyxDQUFRLEdBQUc7QUFDOUIsZ0JBQU0sSUFBTyx1QkFBVTtBQUN2QixVQUFJLEtBQVEsRUFBUyxFQUFLLElBQUksSUFDNUIsS0FBSyxPQUFPO0FBQUEsWUFDVixNQUFNO0FBQUEsWUFDTixPQUFPLEVBQVMsRUFBSyxJQUFJO0FBQUEsWUFDekIsTUFBTSxFQUFLLFdBQVc7QUFBQSxVQUNwQyxDQUFhLElBRUQsS0FBSyxPQUFPO0FBQUEsWUFDVixNQUFNO0FBQUEsWUFDTixPQUFPO0FBQUEsWUFDUCxNQUFNO0FBQUEsVUFDcEIsQ0FBYTtBQUFBLFFBRUo7QUFBQSxNQUNGO0FBQ0QsV0FBSyxXQUFXLElBQU8sQ0FBYztBQUFBLElBQ3RDO0FBQUEsSUFFRCxlQUFlLEdBQVEsR0FBUTtBQUU3QixhQUNFLENBQUMsUUFBUSxPQUFPLE9BQU8sRUFBRSxTQUFTLENBQU0sS0FHdEMsR0FBTyxlQUFlLENBQUMsWUFBWSxNQUFNLENBQUMsS0FDMUMsRUFBTztBQUFBLElBR1o7QUFBQSxJQUVELE1BQU0sT0FBTyxHQUFRO0FBQ25CLFlBQU0sSUFBVyxFQUFZLEVBQU8sT0FBTyxVQUFVO0FBQUEsUUFDbkQsUUFBUSxLQUFLO0FBQUEsTUFDckIsQ0FBTztBQUNELFVBQUksR0FBVTtBQUNaLGNBQU0sRUFBRSxjQUFXLEdBQ2IsSUFBTyxLQUFLLGVBQWUsR0FBUSxDQUFNO0FBQy9DLGVBQU8sS0FBSyxlQUFlLEdBQVEsR0FBVSxHQUFRLENBQUk7QUFBQSxNQUMxRDtBQUNELGFBQU87QUFBQSxJQUNSO0FBQUEsSUFFRCxNQUFNLGVBQWUsR0FBUSxHQUFVLEdBQVEsR0FBTTtBQUFBLE1BQ25ELGFBQVU7QUFBQSxNQUNWO0FBQUEsTUFDQTtBQUFBLE1BQ0EsbUJBQWdCLE1BQU0sS0FBSyxPQUFPO0FBQUEsUUFDaEMsTUFBTTtBQUFBLFFBQ04sT0FBTztBQUFBLFFBQ1AsTUFBTTtBQUFBLE1BQ2QsQ0FBTztBQUFBLE1BQ0QsaUJBQWMsT0FBUyxLQUFLLE9BQU87QUFBQSxRQUNqQyxNQUFNO0FBQUEsUUFDTixPQUFPO0FBQUEsUUFDUCxNQUFNO0FBQUEsVUFDSix5QkFBeUIsSUFBUSxNQUFNO0FBQUEsVUFDdkMsd0JBQU8sWUFBVztBQUFBLFFBQ25CO0FBQUEsTUFDVCxDQUFPO0FBQUEsUUFDQyxJQUFJO0FBQ04sYUFBTyxJQUFJLFFBQVEsT0FBVztBQUM1QixhQUFLLGNBQ0gsRUFBRSxXQUFRLFNBQU0sWUFBVSxHQUMxQixPQUFPLEdBQUssTUFBYTtBQUN2QixnQkFBTSxJQUFPLHVCQUFVO0FBQ3ZCLGNBQUksR0FBSztBQUVQLGtCQUFNLElBQVMsS0FBSyxrQkFBa0IsQ0FBUSxLQUFLLEVBQUs7QUFDeEQsZ0JBQUk7QUFDRixvQkFBTSxLQUFLLHFCQUFxQixHQUFRLEVBQUk7QUFBQSxpQkFDdkM7QUFDTCxvQkFBTSxJQUFRLEVBQVMsQ0FBSSxJQUFJLElBQU87QUFDdEMsNkJBQVUsSUFDVixNQUFNLEtBQUssZ0JBQWdCLEdBQVEsU0FBUztBQUFBLGdCQUMxQyxRQUFRO0FBQUEsZ0JBQ1I7QUFBQSxjQUNsQixDQUFpQjtBQUFBLFlBQ0Y7QUFDRCxjQUFRLEVBQUs7QUFBQSxVQUMzQjtBQUdjLFlBQUksS0FBVyxLQUNiLEtBQUssUUFBUSxDQUFJLEdBRW5CLGtCQUNBLE1BQU0sS0FBSyxnQkFBZ0IsR0FBUSxXQUFXO0FBQUEsY0FDNUMsUUFBUTtBQUFBLFlBQ3hCLENBQWUsR0FDRCxFQUFRLEVBQUk7QUFBQSxRQUVmLENBQ0Y7QUFBQSxNQUNULENBQU87QUFBQSxJQUNGO0FBQUEsSUFFRCxNQUFNLGdCQUFnQixHQUFRLEdBQU8sRUFBRSxXQUFRLFlBQVM7QUFHdEQsWUFBTSxJQUFVLElBQUksRUFBWSxHQUFRO0FBQUEsUUFDdEMsUUFBUTtBQUFBLFFBQ1IsTUFBTSxLQUFLO0FBQUEsUUFDWCxXQUFXLEtBQUs7QUFBQSxRQUNoQjtBQUFBLE1BQ1IsQ0FBTyxHQUNLLElBQU0sTUFBTSxFQUFPLFVBQVUsR0FBTyxFQUFFLFlBQVM7QUFDckQsYUFDRSxLQUVBLE1BQVEsVUFHUixDQUFDLEVBQVEsZUFFVCxFQUFPLENBQUssR0FFUDtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBQ0g7QUM5V0EsSUFBSUYsS0FBUyxXQUFZO0FBQ3ZCLE1BQUksSUFBSSxNQUNKLElBQUcsRUFBSSxnQkFDUCxJQUFHLEVBQUksTUFBTSxNQUFJO0FBRXJCLFNBQU8sRUFBRyxPQUFPO0FBQUEsSUFDZixhQUFhO0FBQUEsSUFDYixPQUFPO0FBQUEsTUFDTCxvQkFBb0IsRUFBSTtBQUFBLElBQ3pCO0FBQUEsRUFDTCxHQUFLLENBQUMsQUFBRSxFQUFJLHVCQUF1QixFQUFJLGdCQU9oQyxFQUFJLE9BUDZDLEVBQUcsZUFBZTtBQUFBLElBQ3RFLFlBQVksQ0FBQztBQUFBLE1BQ1gsTUFBTTtBQUFBLE1BQ04sU0FBUztBQUFBLE1BQ1QsT0FBTyxDQUFDLEVBQUk7QUFBQSxNQUNaLFlBQVk7QUFBQSxJQUNsQixDQUFLO0FBQUEsRUFDTCxDQUFHLEdBQWMsRUFBRyxFQUFJLGdCQUFnQixRQUFRLFFBQVE7QUFBQSxJQUNwRCxZQUFZLENBQUM7QUFBQSxNQUNYLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxNQUNULE9BQU8sRUFBSTtBQUFBLE1BQ1gsWUFBWTtBQUFBLElBQ2xCLENBQUs7QUFBQSxJQUNELEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLElBQUk7QUFBQSxNQUNGLFFBQVUsU0FBVSxHQUFRO0FBQzFCLFVBQU8sZUFBYztBQUFBLE1BQ3RCO0FBQUEsSUFDRjtBQUFBLEVBQ0wsR0FBSyxDQUFDLEVBQUcsVUFBVTtBQUFBLElBQ2YsWUFBWSxDQUFDO0FBQUEsTUFDWCxNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsTUFDVCxPQUFPO0FBQUEsTUFDUCxZQUFZO0FBQUEsSUFDbEIsQ0FBSztBQUFBLElBQ0QsT0FBTztBQUFBLE1BQ0wsTUFBUTtBQUFBLE1BQ1IsVUFBWTtBQUFBLE1BQ1osZUFBZTtBQUFBLElBQ2hCO0FBQUEsRUFDTCxDQUFHLEdBQUcsRUFBRyxlQUFlO0FBQUEsSUFDcEIsT0FBTztBQUFBLE1BQ0wsUUFBVSxFQUFJO0FBQUEsTUFDZCxVQUFZLEVBQUk7QUFBQSxNQUNoQixNQUFRLEVBQUk7QUFBQSxNQUNaLE1BQVEsRUFBSTtBQUFBLE1BQ1osT0FBUyxFQUFJO0FBQUEsTUFDYixVQUFZLEVBQUk7QUFBQSxNQUNoQixZQUFjO0FBQUEsSUFDZjtBQUFBLEVBQ0wsR0FBSyxDQUFDLEVBQUcsZ0JBQWdCO0FBQUEsSUFDckIsYUFBYTtBQUFBLElBQ2IsT0FBTztBQUFBLE1BQ0wsTUFBUTtBQUFBLE1BQ1IsU0FBVyxFQUFJO0FBQUEsTUFDZixVQUFZLEVBQUk7QUFBQSxNQUNoQixNQUFRLEVBQUk7QUFBQSxNQUNaLE1BQVEsRUFBSTtBQUFBLE1BQ1osT0FBUyxFQUFJO0FBQUEsTUFDYixVQUFZLEVBQUk7QUFBQSxJQUNqQjtBQUFBLElBQ0QsTUFBTTtBQUFBLEVBQ1YsQ0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNsQixHQUVJQyxLQUFrQixDQUFFO0FDWnhCLE1BQUFDLEtBQUEsRUFBQSxVQUFBLGFBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQSxJQUFBLEVBQUE7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxhQUFBO0FBQUEsTUFDQSxZQUFBO0FBQUEsTUFDQSxXQUFBO0FBQUEsTUFDQSxRQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFFBQUE7QUFJQSxZQUFBLElBQUEsS0FBQSxTQUFBLEdBQ0EsRUFBQSxlQUFBLG9CQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsR0FBQTtBQUFBLFFBQ0EsUUFBQSxJQUFBLEVBQUEsU0FBQSxFQUFBO0FBQUEsUUFDQSxXQUFBLElBQUEsRUFBQSxVQUFBLEVBQUE7QUFBQSxRQUNBLFFBQUEsSUFBQSxFQUFBLFNBQUEsRUFBQTtBQUFBLFFBQ0EsV0FBQSxJQUFBLEVBQUEsWUFBQSxFQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFDQSxhQUFBLEtBQUEsa0JBQ0EsS0FBQSxjQUdBLEtBQUEsUUFBQSxFQUFBLE1BQUEsS0FBQSxLQUFBLEdBQ0EsS0FBQSxPQUNBLEtBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxHQUNBLEdBQ0E7QUFBQSxRQUNBLFFBQUE7QUFBQSxVQUNBLE1BQUE7QUFBQSxVQUNBLFFBQUE7QUFBQSxZQUNBLE9BQUEsTUFBQSxLQUFBLE9BQUE7QUFBQSxVQUNBO0FBQUEsUUFDQTtBQUFBLFFBRUEsUUFBQSxDQUFBLEtBQUEsY0FBQTtBQUFBLFVBQ0EsTUFBQTtBQUFBLFVBRUEsV0FBQTtBQUFBLFVBQ0EsUUFBQTtBQUFBLFlBQ0EsT0FBQSxDQUFBLEVBQUEsV0FBQSxRQUFBLEVBQUEsT0FBQTtBQUFBLFVBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDQSxHQUNBLEtBQUEsT0FBQSxPQUNBLENBQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFFQSxhQUFBLEtBQUEsVUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7O0FBQ0EsYUFBQSxDQUFBLEtBQUEsY0FBQSxDQUFBLENBQUEsV0FBQSx3QkFBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTs7QUFDQSxhQUFBLFdBQUEsd0JBQUEsa0JBQUEsZ0JBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBSUEsYUFBQSxLQUFBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBRUEsYUFBQSxLQUFBLE9BQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7O0FBQ0EsYUFBQSxLQUFBLGFBQ0EsT0FDQSxVQUFBLFVBQUEsV0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFDQSxhQUFBLEtBQUEsYUFBQSxTQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLFlBQUEsSUFBQSxLQUFBLFlBQUE7QUFDQSxhQUFBLEdBQUEsS0FBQSxRQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBO0FBQ0EsYUFBQSxFQUFBLEtBQUEsYUFBQSxLQUFBLE1BQUEsU0FBQSxLQUFBLE1BQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFTQSxhQUFBLEtBQUEsZUFBQSxLQUFBLGNBQUEsS0FBQSxpQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7QUFDQSxhQUFBLEtBQUEsZ0JBQUEsS0FBQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQTtBQUlBLFVBQUEsRUFBQSxZQUFBLEtBQUE7QUFDQSxVQUFBLEdBQUE7QUFHQSxjQUFBLElBQUEsRUFDQSxLQUFBLGdCQUFBLEtBQUEsb0JBQUEsQ0FDQSxHQUdBLElBQUEsS0FBQSxZQUFBLEtBQUEsTUFBQSxHQUFBLEdBQ0EsSUFBQSxFQUFBLE1BQUEsRUFBQSxTQUFBLEVBQUEsTUFBQTtBQUNBLGFBQUEsWUFBQTtBQUNBLGNBQUEsSUFBQSxFQUFBLEVBQUEsU0FBQTtBQUNBLFFBQUEsRUFBQSxLQUFBLFlBQUEsS0FBQSxNQUFBLFlBSUEsRUFBQTtBQUVBLGlCQUFBLElBQUEsR0FBQSxJQUFBLEVBQUEsUUFBQSxJQUFBLEtBQUEsR0FBQSxLQUFBO0FBQ0EsZ0JBQUEsSUFBQSxFQUFBLElBRUEsSUFBQSxPQUFBLEtBQUEsRUFBQSxFQUFBLElBQ0EsTUFBQSxXQUNBLE9BQ0EsS0FBQSxnQkFBQSxLQUFBLGNBQUEsR0FBQSxDQUFBLElBQ0E7QUFHQSxVQUFBLE1BQUEsSUFBQSxJQUNBLEtBQUEsWUFBQSxJQUVBLElBQUEsRUFBQTtBQUFBLFFBRUE7QUFBQSxNQUNBO0FBQ0EsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBSUEsVUFDQSxLQUFBLGVBQ0EsS0FBQSxlQUFBLFVBQ0EsS0FBQSxjQUNBLEtBQUEsY0FBQSxNQUNBO0FBQ0EsWUFBQSxJQUFBLEtBQUEsV0FBQSxLQUFBO0FBQ0EsZUFBQSxLQUFBLGNBR0EsTUFBQSxhQUFBLElBQUEsR0FBQSxDQUFBLElBR0EsTUFBQSxRQUNBLENBQUEsS0FBQSxjQUNBLEVBQUEsS0FBQSxZQUFBLEtBR0EsS0FBQSxRQUFBLEtBQUEsRUFBQSxNQUFBLFVBQUEsUUFBQSxJQUFBLEdBRUE7QUFBQSxNQUNBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBR0EsVUFBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQSxLQUFBLGFBQUEsS0FBQSxjQUFBLEtBQUEsTUFBQSxFQUFBLFVBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxZQUFBO0FBQUEsSUFFQSxRQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsZ0JBQUEsR0FBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLG9CQUFBLFVBQUEsR0FBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUEsR0FBQTtBQUVBLGFBQUEsS0FBQSxJQUFBLGdCQUFBLEtBQUEsS0FFQSxNQUFBLEdBQUEsU0FBQSxJQUFBLEVBQUEsS0FBQSxVQUFBLENBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUdBLFlBQUE7QUFDQSxNQUFBLEtBQUEsYUFDQSxLQUFBLGNBQUEsS0FBQSxlQUNBLEtBQUEsV0FBQSxLQUFBLFFBQUEsS0FBQSxJQUFBLElBRUEsS0FBQSxXQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsY0FBQSxHQUFBO0FBQ0EsVUFBQSxLQUFBLGNBQUEsS0FBQSxjQUFBLE1BQUE7QUFDQSxjQUFBLEVBQUEsMkJBQUE7QUFDQSxvQkFBQSxLQUNBLEtBQUEsWUFDQSxLQUFBLFdBQ0EsRUFBQSxXQUFBLENBQUEsQ0FDQSxHQUNBLEVBQUEsU0FBQSxHQUNBO0FBQUEsTUFDQTtBQUNBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBLEdBQUE7O0FBQ0EsYUFBQSxFQUFBLEtBQUEsWUFBQSxJQUNBLEtBQUEsY0FBQSxDQUFBLElBQ0EsQ0FBQSxDQUFBLFdBQUEsZUFBQSxVQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFHQSxZQUFBO0FBQ0EsV0FBQSxRQUFBLElBQUE7QUFBQSxJQUNBO0FBQUEsSUFHQSxRQUFBLEdBQUE7QUFFQSxNQUFBLEtBQUEsY0FFQSxLQUFBLGNBQUEsQ0FBQSxJQUVBLE1BQUEsY0FBQSxNQUNBLEtBQUEsYUFBQTtBQUFBLElBRUE7QUFBQSxJQUVBLGdCQUFBLEdBQUEsR0FBQTtBQUVBLE1BQUEsTUFBQSxLQUNBLE1BQUEsYUFBQTtBQUFBLElBRUE7QUFBQSxJQUVBLE1BQUEsU0FBQTtBQUNBLGFBQUEsS0FBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxRQUFBO0FBQ0EsYUFBQSxLQUFBLFNBQUEsS0FBQSxxQkFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQSxJQUFBLElBQUE7QUFDQSxhQUFBLEtBQUEsYUFDQSxJQUFBLFdBQUEsWUFDQSxJQUFBLFdBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxNQUFBLE9BQUEsR0FBQSxFQUFBLGNBQUEsSUFBQSxlQUFBLE9BQUEsSUFBQTtBQUNBLFVBQUEsS0FBQSxDQUFBLEtBQUE7QUFDQSxlQUFBO0FBR0EsWUFBQSxJQUFBLE9BQUEsS0FBQSxNQUFBLEtBQUEsY0FBQSxDQUFBLElBR0EsSUFBQSxFQUFBLEVBQUEsT0FBQSxVQUFBO0FBQUEsUUFDQSxRQUFBLEtBQUE7QUFBQSxNQUNBLENBQUEsR0FDQSxJQUFBLEtBQUEsS0FBQSxVQUNBLElBQUEsd0JBQUEsV0FBQSxLQUFBLFFBQ0EsSUFBQSxLQUFBLGVBQUEsR0FBQSxDQUFBO0FBQ0EsVUFBQTtBQTJEQSxVQTFEQSxBQUFBLENBQUEsS0FBQSxLQUFBLGNBQ0EsSUFBQSxNQUFBLEtBQUEsZ0JBQUEsR0FBQSxHQUFBLEdBQUEsR0FBQTtBQUFBLFFBQ0EsV0FBQSxNQUFBLEtBQUEsZ0JBQUEsS0FBQSxjQUFBLENBQUE7QUFBQSxRQUNBLFNBQUEsT0FBQSxLQUFBLGdCQUFBLFNBQUE7QUFBQSxVQUNBLFNBQUEsRUFBQSxTQUFBO0FBQUEsUUFDQSxDQUFBO0FBQUEsUUFDQSxlQUFBLE1BQUE7QUFDQSxnQkFBQSxJQUFBLEVBQUEsRUFBQTtBQUNBLGVBQUEsT0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0EsT0FBQSxLQUFBLGFBQ0EsUUFBQSxFQUFBLENBQUEsTUFDQSxVQUFBLEVBQUEsQ0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLGNBQ0EsS0FBQSxhQUNBLEdBQUEsS0FBQSxpQkFBQSxPQUNBLGNBQUEsS0FBQSxrQkFBQTtBQUFBLGNBQ0EsS0FBQTtBQUFBLFlBQ0E7QUFBQSxVQUNBLENBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQSxhQUFBLE1BQUE7QUFDQSxnQkFBQSxJQUFBLEVBQUEsRUFBQTtBQUNBLGVBQUEsT0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0EsT0FBQTtBQUFBLFlBQ0EsTUFBQSxhQUFBLEtBQUEsS0FBQTtBQUFBLFVBQ0EsQ0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUEsSUFFQSxJQUFBLE1BQUEsS0FBQSxlQUFBLEdBQUEsR0FBQSxHQUFBLEdBQUE7QUFBQSxRQUNBLFNBQUE7QUFBQSxRQUNBLFdBQUEsTUFBQSxLQUFBLGdCQUFBLEtBQUEsY0FBQSxDQUFBO0FBQUEsUUFDQSxTQUFBLE9BQUEsS0FBQSxnQkFBQSxTQUFBO0FBQUEsVUFDQSxTQUFBLEVBQUEsU0FBQTtBQUFBLFFBQ0EsQ0FBQTtBQUFBLFFBQ0EsZUFBQSxNQUFBO0FBQ0EsZ0JBQUEsSUFBQSxFQUFBLEVBQUE7QUFDQSxlQUFBLE9BQUE7QUFBQSxZQUNBLE1BQUE7QUFBQSxZQUNBLE9BQUEsZ0JBQUEsRUFBQSxDQUFBO0FBQUEsWUFDQSxNQUFBLEdBQUEsS0FBQSxpQkFBQTtBQUFBLFVBQ0EsQ0FBQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLGFBQUEsT0FBQTtBQUNBLGdCQUFBLElBQUEsRUFBQSxFQUFBO0FBQ0EsZUFBQSxPQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsWUFDQSxPQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsY0FDQSxhQUFBLEtBQUEsS0FBQSxZQUFBLElBQUEsTUFBQTtBQUFBLGNBQ0Esd0JBQUEsWUFBQTtBQUFBLFlBQ0E7QUFBQSxVQUNBLENBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQSxDQUFBLEdBRUE7QUFFQSxZQURBLEtBQUEsZ0JBQUEsR0FDQSxLQUFBLEVBQUE7QUFDQSxlQUFBLE1BQUE7QUFBQSxpQkFDQSxLQUFBLFlBQUE7QUFFQSxnQkFBQSxJQUFBLEtBQUEsVUFBQSxLQUFBLFFBQUEsS0FBQSxJQUFBO0FBQ0EsZUFBQSxRQUFBLFFBQUEsRUFBQSxNQUFBLE1BQUEsS0FBQSxRQUFBLElBQUE7QUFBQSxRQUNBO0FBQUE7QUFFQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxnQkFBQSxHQUFBLEdBQUEsR0FBQSxHQUFBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE9BQ0E7QUFFQSxZ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LEtBQWtCLENBQUU7QUNnQ3hCLE1BQUFDLEtBQUEsRUFBQSxVQUFBLGtCQUFBO0FBQUEsRUFDQSxZQUFBLEVBQUEsaUJBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQSxFQUFBO0FBQUEsRUFDQSxRQUFBLENBQUEsV0FBQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxDQUFBLE9BQUEsTUFBQSxHQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsRUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxRQUFBLEtBQUEsUUFBQSxLQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsT0FBQTtBQUNBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTtBQUNBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLEdBQUEsS0FBQTtBQUFBLFFBQ0EsUUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBLEVBQUEsS0FBQSxPQUFBLFVBQUE7QUFBQSxJQUNBO0FBQUEsSUFHQSxpQkFBQTtBQUNBLGFBQUEsS0FBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZUFBQTs7QUFDQSxZQUFBLElBQUEsVUFBQSxtQkFBQSxrQkFBQTtBQUNBLGFBQUEsS0FBQSxLQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxvQkFBQTs7QUFDQSxhQUNBLFdBQUEsaUJBQUEsa0JBQUEsVUFBQSxLQUNBLEtBQUEsZUFBQSxhQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxTQUFBO0FBQUEsUUFDQSxRQUFBLEtBQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxjQUFBOztBQUNBLGFBQUEsV0FBQSxpQkFBQSxrQkFBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7O0FBQ0EsYUFBQSxXQUFBLGVBQUEsa0JBQUEsV0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBLEtBQUEsZ0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBOztBQUNBLFlBQUEsRUFBQSxzQkFBQTtBQUNBLFVBQUEsR0FBQTtBQUNBLGNBQUEsRUFBQSxnQkFBQSxLQUFBLFdBQ0EsSUFBQSxDQUFBLEtBQUEsUUFBQSxFQUFBO0FBRUEsZUFBQSxXQUFBLGlCQUFBLGtCQUFBLElBQUEsQ0FBQSxHQUFBLE1BQUE7QUFDQSxnQkFBQSxJQUNBLEVBQUEsUUFDQSxHQUFBLEtBQUEsUUFBQSxFQUFBLFFBQUEsS0FFQSxJQUFBLEtBRUEsRUFBQSxXQUFBLENBQUEsS0FBQSxFQUFBLFNBQUEsRUFBQTtBQUVBLGlCQUFBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQSxRQUxBLE1BQUE7QUFBQSxVQU1BO0FBQUEsUUFDQSxPQUFBLENBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTtBQUNBLFlBQUEsRUFBQSxtQkFBQTtBQUNBLGFBQUEsS0FBQSxHQUFBLEtBQ0EsTUFBQSxJQUFBLFNBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxpQkFB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LFNBQUEsT0FBQSxLQUFBLFlBQUEsQ0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLFNBQUE7QUFBQSxRQUNBLFdBQUE7QUFBQSxVQUdBLGNBQUEsTUFDQSxLQUFBLGlCQUFBLEtBQUEsT0FBQSxFQUFBLFFBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQSxTQUFBO0FBQUEsVUFDQSxNQUFBO0FBQUEsVUFDQSxRQUFBLENBQUEsR0FBQSxHQUFBLEdBQUEsR0FBQSxHQUFBLENBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsbUJBQUE7QUFDQSxhQUFBLEtBQUEsV0FBQSxTQUFBO0FBQUEsUUFDQSxZQUFBO0FBQUEsUUFDQSxhQUFBO0FBQUEsUUFDQSxZQUFBO0FBQUEsUUFDQSxXQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLFNBQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxpQkFBQTtBQUNBLFlBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsVUFDQTtBQUNBLGFBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDQSxFQUFBLE9BQUEsT0FBQSxFQUFBLFNBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxvQkFBQTtBQUFBLFVBQ0EsVUFBQTtBQUFBLFVBQ0EsVUFBQTtBQUFBLFVBQ0EsZ0JBQUE7QUFBQSxRQUNBLEVBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLFVBQUEsQ0FBQSxLQUFBO0FBQUEsUUFDQSxXQUFBLEtBQUE7QUFBQSxRQUNBLG1CQUFBLENBQUEsS0FBQSxZQUFBO0FBQUEsUUFDQSxtQkFBQSxDQUFBLEtBQUEsWUFBQTtBQUFBLFFBQ0EsY0FBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUEsRUFBQSxhQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxZQUFBLEVBQUEsY0FBQTtBQUFBLE1BQ0EsTUFBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBRUEsQ0FBQTtBQUFBLElBRUEsYUFBQSxFQUFBLGVBQUE7QUFBQSxNQUNBLE1BQUEsQ0FBQSxRQUFBLE9BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxNQUNBLElBQUEsR0FBQTtBQUNBLGVBQUEsRUFBQSxDQUFBLElBQ0EsSUFDQTtBQUFBLFVBQ0EsT0FBQSxDQUFBLENBQUE7QUFBQSxVQUNBLE9BQUEsQ0FBQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxXQUFBO0FBQUEsSUFDQSxXQUFBO0FBQUEsSUFDQSxhQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFFBQUEsSUFBQSxJQUNBLElBQUE7QUFFQSxVQUFBLElBQUEsTUFBQTtBQUNBLE1BQUEsQ0FBQSxLQUFBLFdBQUEsS0FDQSxLQUFBLElBQ0EsS0FBQSxTQUFBO0FBQUEsSUFFQSxHQUVBLElBQUEsTUFBQSxLQUFBLFFBQUEsR0FFQSxJQUFBLE1BQUE7QUFDQSxXQUFBLE9BQUEsR0FDQSxFQUFBO0FBQUEsSUFDQSxHQUVBLElBQUEsR0FBQSxPQUFBO0FBQ0EsVUFBQSxJQUNBLEtBQUEsUUFBQSxFQUFBLEdBQ0EsSUFBQSxJQUNBLEVBQUE7QUFBQSxJQUNBLEdBQUEsR0FBQSxHQUVBLElBQUEsQ0FBQSxFQUFBLGlCQUFBO0FBQ0EsUUFBQSxDQUFBLEdBQ0EsS0FBQSxRQUFBO0FBQUEsSUFDQTtBQUVBLFNBQUEsT0FBQSxTQUFBLE9BQUE7QUFDQSxNQUFBLElBQ0EsSUFBQSxLQUVBLEtBQUEsT0FBQSxXQUFBLEdBQUEsSUFBQSxLQUFBLFlBQUE7QUFBQSxJQUVBLENBQUEsR0FFQSxLQUFBLFNBQUEsSUFBQSxHQUFBO0FBQUEsTUFDQSxHQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFlBQUEsS0FBQSxpQkFBQTtBQUFBLE1BQ0EsU0FBQSxLQUFBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxnQkFBQTtBQUNBLFNBQUEsT0FBQSxRQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsYUFBQSxHQUFBO0FBQ0EsWUFBQSxJQUFBLENBQUEsRUFBQSxTQUFBLEdBQUEsU0FBQSxRQUFBLEdBQUEsTUFBQTtBQUVBLFVBQUEsSUFBQSxFQUFBLENBQUEsRUFBQSxHQUNBLElBQUEsV0FBQSxpQkFBQSxLQUFBLE1BQUEsT0FBQSxHQUFBLEVBQUEsTUFBQTtBQUVBLFlBQUEsSUFBQSxPQUFBO0FBQ0EsY0FBQSxFQUFBLFNBQUEsRUFBQSxDQUFBO0FBQ0EsYUFBQSxJQUFBLEdBQ0EsSUFBQSxHQUNBLEtBQUEsU0FBQSxHQUFBLEtBQUEsSUFBQSxHQUFBLENBQUE7QUFBQSxNQUNBLEdBRUEsSUFBQSxLQUFBLE1BQUEsVUFBQTtBQUFBLFFBQ0E7QUFBQSxRQUVBLFFBQUEsR0FBQTtBQUNBLFlBQUEsQ0FBQSxHQUNBLEVBQUEsT0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxzQkFBQTtBQUNBLFdBQUEsT0FBQSxXQUFBLEtBQUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEsWUFBQSxHQUFBO0FBQ0EsWUFBQSxJQUFBLE1BQUEsS0FBQSxXQUFBO0FBQUEsUUFDQSxZQUFBO0FBQUEsVUFDQSxNQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsWUFDQSxPQUFBO0FBQUEsWUFDQSxXQUFBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsT0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0EsT0FBQTtBQUFBLFVBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxTQUFBO0FBQUEsVUFDQSxRQUFBLENBQUE7QUFBQSxVQUNBLE9BQUEsRUFBQSxNQUFBLFNBQUE7QUFBQSxVQUNBLFFBQUE7QUFBQSxZQUNBLFFBQUE7QUFBQSxjQUNBLE1BQUEsRUFBQSxzQkFBQTtBQUNBLGtCQUFBLFFBQUE7QUFBQSxrQkFDQSxNQUFBO0FBQUEsa0JBQ0EsT0FBQTtBQUFBLGdCQUNBLENBQUE7QUFBQSxjQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxNQUFBLEtBQUEsT0FBQSxhQUFBLE1BQUE7QUFBQSxNQUNBLENBQUE7QUFDQSxVQUFBLEdBQUE7QUFDQSxZQUFBLEVBQUEsU0FBQSxhQUFBO0FBQ0EsWUFBQTtBQUdBLGNBQUE7QUFDQSxnQkFBQSxJQUFBLENBQUE7QUFBQSxVQUNBLFFBQUE7QUFDQSxnQkFBQSxVQUFBO0FBQUEsVUFDQTtBQUVBLFVBQUEsRUFBQSxTQUFBLFVBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsbUJBQUE7QUFDQSxZQUFBO0FBQUEsUUFDQSxXQUFBLENBQUE7QUFBQSxRQUNBLFdBQUEsQ0FBQTtBQUFBLFFBQ0EsV0FBQSxDQUFBO0FBQUEsVUFDQSxLQUFBO0FBQ0EsYUFBQTtBQUFBLFFBRUEsRUFBQSxRQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxVQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxhQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxVQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxTQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxRQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxRQUFBLElBQUEsR0FBQTtBQUFBLFFBR0EsRUFBQSxjQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxhQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsSUFBQSxHQUFBO0FBQUEsUUFDQSxFQUFBLFdBQUEsSUFBQSxHQUFBLEVBQUEsUUFBQSxFQUFBLFNBQUE7QUFBQSxRQUNBLEVBQUEsa0JBQUEsSUFBQSxHQUFBO0FBQUEsUUFDQSxHQUFBLGVBQUEsRUFBQSxlQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxjQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxlQUFBLElBQUEsR0FBQTtBQUFBLFFBTUEsRUFBQSxXQUFBLElBQUEsR0FBQTtBQUFBLE1BQ0EsRUFBQSxPQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBLEdBQUEsR0FBQTtBQUNBLFlBQUEsSUFBQSxDQUFBLEdBRUEsSUFBQSxDQUFBLEVBQUEsU0FBQSxTQUFBLFVBQUEsaUJBQUEsaUJBQUE7QUFDQSxjQUFBLElBQUEsS0FBQSxPQUFBLFNBQUEsSUFDQSxJQUFBLEtBQUEsT0FBQSxTQUFBO0FBQ0EsVUFBQSxLQUFBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLFVBQ0Esd0JBQUEsT0FDQSxNQUFBLFFBQUEsQ0FBQTtVQUVBLFNBQUEsTUFBQSxJQUNBLEVBQUEsR0FBQSxDQUFBLElBQ0EsRUFBQSxDQUFBO0FBQUEsUUFDQSxDQUFBO0FBQUEsTUFDQSxHQUVBLElBQUEsS0FBQSxPQUFBO0FBQ0EsVUFBQTtBQUNBLG1CQUFBLENBQUEsR0FBQSxNQUFBLE9BQUEsUUFBQSxDQUFBLEdBQUE7QUFDQSxnQkFBQSxJQUFBLENBQUEsUUFBQSxNQUFBLEVBQUEsU0FBQSxDQUFBLElBQUEsWUFBQSxHQUNBLElBQUEsRUFBQSxJQUNBLElBQUEsR0FBQSxDQUFBLEdBQ0EsSUFBQSxFQUFBLENBQUE7QUFDQSxjQUFBO0FBQ0EsZ0JBQUEsTUFBQTtBQUNBLGdCQUFBLEVBQUEsU0FBQSxTQUFBO0FBQUEscUJBQ0EsRUFBQSxDQUFBLEdBQUE7QUFDQSxvQkFBQSxFQUFBLFNBQUEsV0FBQSxpQkFBQSxlQUFBO0FBQ0Esa0JBQUE7QUFDQSxvQkFBQSxFQUFBLENBQUEsS0FBQSxFQUFBLENBQUE7QUFFQSw2QkFBQSxLQUFBO0FBQ0Esb0JBQUEsRUFBQSxTQUFBLENBQUEsS0FDQSxFQUFBO0FBQUEsc0JBQ0E7QUFBQSxzQkFDQSxNQUFBLEdBQUEsS0FBQTtBQUFBLHNCQUNBLE9BQUEsRUFBQSxDQUFBLElBQUEsRUFBQTtBQUFBLHNCQUNBO0FBQUEsc0JBQ0E7QUFBQSxvQkFDQSxDQUFBO0FBQUE7QUFLQSxrQkFBQSxFQUFBLFNBQUEsU0FBQSxpQkFBQSxXQUFBLENBQUE7QUFBQSxZQUVBO0FBQUE7QUFBQSxRQUVBO0FBRUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7O0FBQ0EscUJBQUEsS0FBQSxtQkFBQSxtQkFDQSxLQUFBLE9BQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTtBQUVBLE1BQUEsV0FBQSxHQUFBO0FBQUEsRUFDQSxJQUFBLE9BQUE7QUFDQSxXQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsSUFBQSxTQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsVUFBQTtBQUFBLFFBQ0EsRUFBQSxLQUFBLFFBQUE7QUFBQSxNQUNBO0FBQUEsTUFDQSxPQUFBLE1BQUEsQ0FBQSxTQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQSxFQUFBLFdBQUE7QUFDQSxXQUFBLE1BQUEsR0FBQSxDQUFBO0FBQUEsRUFDQTtBQUNBO0FBQ0EsTUFBQSxXQUFBLEdBQUE7QUFBQSxFQUNBLElBQUEsU0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLE9BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxVQUNBLFNBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQSxPQUFBO0FBQUEsVUFDQSxTQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFdBQUE7QUFBQSxNQUNBLFVBQUEsQ0FBQTtBQUFBLFFBQ0EsS0FBQTtBQUFBLFFBQ0EsVUFBQSxPQUFBO0FBQUEsVUFDQSxNQUFBLEVBQUEsYUFBQSxNQUFBO0FBQUEsVUFDQSxPQUFBLEVBQUEsYUFBQSxPQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0Es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QSxZQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxZQUFBLEVBQUEsY0FBQTtBQUFBLE1BQ0EsTUFBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsVUFBQSxFQUFBLFlBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFVBQUEsRUFBQSxZQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsWUFBQSxFQUFBLGdCQUFBLGVBQUEsZ0JBQUEsS0FBQTtBQUNBLGFBQUEsS0FDQSxNQUFBLElBQUEsd0JBQ0EsSUFBQSwyQkFDQTtBQUFBLElBRUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsSUFBQSxLQUFBLGFBR0EsS0FBQSxNQUFBO0FBQUEsRUFFQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBRUEsZUFBQTtBQUVBLGFBQUE7QUFBQSxRQUNBLE9BQUEsS0FBQTtBQUFBLFFBQ0EsTUFBQSxLQUFBO0FBQUEsUUFDQSxPQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQSxHQUFBO0FBQ0EsVUFBQSxLQUFBLFVBQUE7QUFDQSxjQUFBLEVBQUEsZ0JBQUEsbUJBQUEsTUFDQSxJQUFBLEtBQUEsSUFDQTtBQUFBLFVBQ0EsQ0FBQSxJQUFBO0FBQUEsVUFHQSxDQUFBLElBQUE7QUFBQSxRQUNBLElBQ0E7QUFDQSxvQkFBQSxRQUFBLEtBQUEsQ0FBQSxHQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7QUFDQSxXQUFBLE1BQUEsUUFBQSxTQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQSxHQUFBO0FBQ0EsWUFBQSxJQUFBLEtBQUEsYUFBQSxDQUFBO0FBQ0EsTUFBQSxLQUNBLEtBQUEsTUFBQSxLQUFBLEtBQUEsa0JBQUEsQ0FBQSxDQUFBO0FBQUEs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QUFBLE1BQUEsR0FBQSxLQUFBLFNBQUEsU0FBQSxLQUFBLEtBQUEsTUFBQSxJQUNBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQ0E7QUFBQSxRQUNBLFVBQUE7QUFBQSxVQUNBLE1BQUEsS0FBQTtBQUFBLFVBQ0EsR0FBQSxLQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsSUFDQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsbUJBQUE7QUFDQSxZQUFBLElBQUEsT0FFQSxFQUFBLENBQUEsS0FDQSxNQUFBLGVBQUEsWUFBQTtBQUFBLFFBQ0EsTUFBQTtBQUFBLFFBQ0EsU0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUEsS0FDQSxFQUFBLFlBQ0EsRUFBQSxFQUFBLFFBQUE7QUFJQSxhQUFBLEVBQUEsS0FBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE1BQUEsY0FDQSxHQUFBLEdBQUEsR0FBQSxHQUFBLEdBQ0EsSUFBQSxJQUFBLElBQUEsSUFDQSxJQUFBLE1BQ0E7QUFDQSxXQUFBLEdBQUEsY0FDQSxHQUFBLEdBQUEsR0FBQSxHQUFBLEdBQ0EsR0FBQSxHQUVBLENBQUEsR0FBQSxNQUFBO0FBQ0EsWUFBQSxFQUFBLGdCQUFBO0FBQ0EsVUFBQTtBQUVBLGlCQUFBLE9BQUEsYUFDQSxLQUFBLGNBQ0EsR0FBQSxHQUFBLEVBQUEsTUFBQSxHQUFBLEdBQ0EsR0FBQSxJQUNBLENBQ0E7QUFBQSxJQUVBLENBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSw0QkFBQSxHQUFBLEdBQUE7QUFHQSxVQUFBLEVBQUEsZ0JBQUE7QUFDQSxXQUFBLEVBQUEsR0FBQSxHQUFBLElBQ0EsT0FBQTtBQUFBLE1BQ0EsR0FBQTtBQUFBLE1BQ0EsWUFBQTtBQUFBLFFBQ0EsR0FBQSxFQUFBO0FBQUEsUUFDQSxDQUFBLEVBQUEsT0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBLEtBQ0EsSUFDQTtBQUFBLEVBQ0E7QUFDQSxDQUFBOzs7Ozs7Ozs7QUN4Sk8sWUFBd0IsR0FBTTtB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QUFBLElBRUEsVUFBQSxFQUFBLFlBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxNQUVBLFVBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFlBQUEsRUFBQSxjQUFBO0FBQUEsTUFDQSxNQUFBLENBQUEsT0FBQSxRQUFBLE1BQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFFBQUEsRUFBQSxVQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxJQUFBLEdBQUE7QUFDQSxlQUFBLEVBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxHQUFBLElBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxTQUFBLEVBQUEsV0FBQTtBQUFBLE1BQ0EsTUFBQSxDQUFBLFFBQUEsTUFBQTtBQUFBLE1BQ0EsSUFBQSxHQUFBO0FBQ0EsZUFBQSxJQUFBLEdBQUEsQ0FBQSxJQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsV0FBQSxFQUFBLGFBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxNQUNBLElBQUEsR0FBQTtBQUNBLGVBQUEsS0FBQSxLQUFBLE1BQUEsU0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFdBQUEsRUFBQSxhQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUEsS0FBQSxRQUFBLFVBQ0EsQ0FBQSxNQUFBLE9BQUEsVUFBQSxLQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxpQkFBQTtBQUNBLGFBQUEsS0FBQSxRQUFBLFVBQUEsS0FBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsaUJBQUE7QUFDQSxhQUNBLEtBQUEsUUFBQSxPQUFBLENBQUEsR0FBQSxNQUFBLElBQUEsRUFBQSxVQUFBLENBQUEsSUFDQSxLQUFBLFFBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxRQUNBLE1BQUEsS0FBQSxJQUFBLGNBQUEsS0FBQSxRQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFdBQUEsR0FBQSxHQUFBO0FBQ0EsWUFBQSxFQUFBLGNBQUEsS0FBQTtBQUNBLGFBQUEsSUFDQSxFQUFBLEtBQ0EsTUFDQSxJQUFBLEVBQUEsTUFBQTtBQUFBLFFBQ0EsT0FBQTtBQUFBLFFBQ0EsTUFBQSxLQUFBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsVUFBQSxFQUFBLEtBQUEsVUFBQSxDQUFBO0FBQUEsTUFDQSxDQUFBLENBQ0EsSUFDQSxHQUFBLEVBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUEsR0FBQSxHQUFBO0FBQ0EsWUFBQSxFQUFBLFlBQUE7QUFFQSxNQUFBLEtBQUEsT0FBQSxRQUNBLHlCQUFBLEtBQUEsTUFBQSxVQUFBLElBQUEsS0FFQSxDQUFBLEtBQUEsV0FDQSxLQUFBLE1BQUEsT0FBQSxHQUFBLENBQUEsSUFFQSxLQUFBLFFBQUEsTUFFQSxFQUFBLFVBQ0EsS0FBQSxPQUFBLE9BQUEsRUFBQSxNQUFBLEdBRUEsS0FBQSxTQUFBLEdBQ0EsS0FBQSxPQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxPQUFBO0FBQUEsUUFDQSxNQUFBLEdBQUEsU0FBQSxLQUFBLE1BQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxhQUFBLEdBQUE7QUFDQSxhQUFBLEtBQUEsWUFBQSxLQUFBLFFBQ0EsS0FBQSxNQUFBLFVBQUEsT0FBQSxFQUFBLE9BQUEsRUFBQSxFQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBLEdBQUE7QUFDQSxNQUFBLEtBQUEsV0FDQSxBQUFBLEtBQUEsUUFDQSxLQUFBLE1BQUEsS0FBQSxDQUFBLElBRUEsS0FBQSxRQUFBLENBQUEsQ0FBQSxJQUdBLEtBQUEsUUFBQTtBQUFBLElBRUE7QUFBQSxJQUVBLFlBQUEsR0FBQSxHQUFBO0FBQ0EsVUFBQSxLQUFBLFVBQUE7QUFDQSxjQUFBLElBQUEsS0FBQSxhQUFBLENBQUE7QUFDQSxRQUFBLEtBQUEsS0FDQSxDQUFBLElBQ0EsS0FBQSxLQUFBLEtBQUEsT0FBQSxHQUFBLENBQUEsSUFFQSxLQUFBLE1BQUEsT0FBQSxHQUFBLENBQUE7QUFBQSxNQUdBO0FBQ0EsYUFBQSxRQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsV0FBQSxHQUFBO0FBQ0EsV0FBQSxZQUFBLEdBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUEsR0FBQSxHQUFBO0FBQ0EsVUFBQSxLQUFBLENBQUEsR0FBQTtBQUNBLGNBQUEsRUFBQSxPQUFBLFNBQUEsWUFBQTtBQUNBLGFBQUEsUUFBQSxFQUFBLE9BQUEsU0FBQSxTQUFBLFFBQUEsR0FBQTtBQUFBLE1BQ0E7QUFDQSxVQUFBLEtBQUEsR0FBQTtBQUNBLGNBQUEsRUFBQSxZQUFBLGFBQUE7QUFDQSxZQUFBLEdBQUE7QUFDQSxlQUFBLFNBQUE7QUFDQSxnQkFBQSxJQUFBLEVBQUEsU0FBQTtBQUNBLFVBQUEsSUFDQSxHQUFBLFNBQUEsR0FHQSxLQUFBLFlBQUEsR0FBQSxDQUFBLEtBRUEsS0FBQSxXQUFBLENBQUE7QUFBQSxRQUVBLFdBQUEsR0FBQTtBQUNBLGdCQUFBLElBQUE7QUFBQSxZQUNBLE9BQUE7QUFBQSxZQUNBLFFBQUE7QUFBQSxZQUNBLFdBQUEsMEJBQUEsRUFBQTtBQUFBLFlBQ0EsU0FBQTtBQUFBLFlBQ0EsUUFBQTtBQUFBLFlBQ0EsTUFBQSxzQkFBQSxHQUFBLEVBQUEsSUFBQTtBQUFBLFlBQ0EsU0FBQTtBQUFBLFVBRUEsRUFBQSxNQUFBLCtCQUFBO0FBQ0EsZUFBQSxPQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsWUFDQSxPQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0EsQ0FBQSxHQUNBLEtBQUEsV0FBQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBLEdBQUE7O0FBQ0EsWUFBQSxJQUFBLHVCQUFBO0FBQ0Es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
8075
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy91dGlscy90eXBlLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL3V0aWxzL2RlcHJlY2F0ZS5qcyIsIi4uL3NyYy9taXhpbnMvRGl0b01peGluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19jcmVkaXRjYXJkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kZWNpbWFscy5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZW1haWwuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2hvc3RuYW1lLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kb21haW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2ludGVnZXIuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21heC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19wYXNzd29yZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmFuZ2UuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JlcXVpcmVkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL191cmwuanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRpb25NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9hY2Nlc3Nvci5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvc2NoZW1hLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvRGl0b0NvbXBvbmVudC5qcyIsIi4uL3NyYy9EaXRvVXNlci5qcyIsIi4uL3NyYy9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzIiwiLi4vc3JjL21peGlucy9Sb3V0ZU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVmlldy52dWUiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUm9vdC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTWVudS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9NZW51LnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy92dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvdnVlLXNwaW5uZXIvc3JjL1B1bHNlTG9hZGVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvSGVhZGVyLnZ1ZSIsIi4uL3NyYy9taXhpbnMvUHVsbGRvd25NaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9BY2NvdW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmUudnVlIiwiLi4vc3JjL3V0aWxzL21hdGguanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ29udGFpbmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWxzLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9CdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FZGl0QnV0dG9ucy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ3JlYXRlQnV0dG9uLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NyZWF0ZUJ1dHRvbi52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQ2xpcGJvYXJkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Gb3JtLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9FcnJvcnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Njb3Blcy52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY29wZXMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhZ2luYXRpb24udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFnaW5hdGlvbi52dWUiLCIuLi9zcmMvbWl4aW5zL09yZGVyZWRNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlSGVhZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVDZWxsLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYmxlQ2VsbC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVk5vZGUudnVlIiwiLi4vc3JjL1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUJ1dHRvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQnV0dG9uLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ2hlY2tib3gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94LnZ1ZSIsIi4uL3NyYy9taXhpbnMvRGF0YU1peGluLmpzIiwiLi4vc3JjL21peGlucy9PcHRpb25zTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb2RlLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29sb3IudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUNvbG9yLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcG9uZW50LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVDb21wdXRlZC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVEYXRlLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU291cmNlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvZmlsdGVyLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVMaXN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTGFiZWwudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZUxhYmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlTWFya3VwLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVNYXJrdXAudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVNdWx0aXNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTXVsdGlzZWxlY3QudnVlIiwiLi4vc3JjL21peGlucy9OdW1iZXJNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9UeXBlTnVtYmVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVPYmplY3QudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZU9iamVjdC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUHJvZ3Jlc3MudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlUmFkaW8udnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VjdGlvbi52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVNlbGVjdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9UeXBlU2xpZGVyLnZ1ZT92dWUmdHlwZT10ZW1wbGF0ZSZsYW5nLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVTbGlkZXIudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVTd2l0Y2gudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVN3aXRjaC52dWUiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVRleHQudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUZXh0YXJlYS52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVGV4dGFyZWEudnVlIiwiLi4vc3JjL3R5cGVzL1R5cGVUcmVlTGlzdC52dWU/dnVlJnR5cGU9dGVtcGxhdGUmbGFuZy5qcyIsIi4uL3NyYy90eXBlcy9UeXBlVHJlZUxpc3QudnVlIiwiLi4vc3JjL3V0aWxzL3VuaXRzLmpzIiwiLi4vc3JjL3R5cGVzL1R5cGVVcGxvYWQudnVlP3Z1ZSZ0eXBlPXRlbXBsYXRlJmxhbmcuanMiLCIuLi9zcmMvdHlwZXMvVHlwZVVwbG9hZC52dWUiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcbiAgdGl0bGU6ICcnLFxuICByb3V0ZUNvbXBvbmVudHM6IFtdLFxuICB1c2VyOiBudWxsLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLCBwYXJzZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzVGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIHJldHVybiBpc1RlbXBvcmFyeUlkKGRhdGE/LltpZEtleV0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZShkYXRhLCBpZEtleSA9ICdpZCcpIHtcbiAgLy8gUmV0dXJucyB0cnVlIGlmIHZhbHVlIGlzIGFuIG9iamVjdCB0aGF0IGhvbGRzIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGlkLlxuICByZXR1cm4gZGF0YT8uW2lkS2V5XSAhPSBudWxsICYmIE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMVxufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsIGdldFBhcmVudEl0ZW1EYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSwgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSwgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQoY29udGV4dClcbiAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAvLyBJZiBgb2JqZWN0YCBleHBsaWNpdGx5IHNldHMgdGhlIGtleSB0byBgdW5kZWZpbmVkYCwgcmV0dXJuIGl0LlxuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCB8fCBvYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KVxuICAgID8gdmFsdWVcbiAgICA6IGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgPyBkZWZhdWx0VmFsdWUoKVxuICAgICAgOiBkZWZhdWx0VmFsdWVcbn1cblxuZnVuY3Rpb24gc2V0KGNvbnRleHQsIGtleSwgdmFsdWUpIHtcbiAgY29udGV4dHMuZ2V0KGNvbnRleHQpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IChpc0Z1bmN0aW9uKGNvbnRleHQpID8gY29udGV4dCgpIDogeyAuLi5jb250ZXh0IH0pXG4gICAgICA6IHt9XG4gICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc2V0ICh0byBmYWxzZSksIGRlZmF1bHQgdG8gdHJ1ZSBzbyB3ZSBkb24ndCBmYWxsIGJhY2tcbiAgICAvLyB0byBgY29tcG9uZW50YCBmb3IgaXRzIHZhbHVlLlxuICAgIGNvbnRleHQubmVzdGVkID8/PSB0cnVlXG4gICAgY29udGV4dC5jb21wb25lbnQgPSBjb21wb25lbnRcbiAgICAvLyBIYXZlIGBvYmplY3RgIGluaGVyaXQgZnJvbSB0aGUgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvIGl0IGNhbiBvdmVycmlkZVxuICAgIC8vIGl0cyB2YWx1ZXMgYW5kIHN0aWxsIHJldHJpZXZlIGZyb20gaXQsIGFuZCBhc3NvY2lhdGUgaXQgd2l0aCBgdGhpc2BcbiAgICAvLyB0aHJvdWdoIGBjb250ZXh0c2AgbWFwOlxuICAgIGNvbnN0IG9iamVjdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZihjb250ZXh0LCBjb21wb25lbnQpXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICAvLyBgbmVzdGVkYCBpcyBgdHJ1ZWAgd2hlbiB0aGUgZGF0YS1wYXRoIHBvaW50cyBhIHZhbHVlIGluc2lkZSBhbiBpdGVtLCBhbmRcbiAgLy8gYGZhbHNlYCB3aGVuIGl0IHBvaW50cyB0byB0aGUgaXRlbSBpdHNlbGYuXG4gIGdldCBuZXN0ZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmVzdGVkJywgdHJ1ZSlcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2YWx1ZScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBkYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhUGF0aCcsICcnKVxuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmFtZScsICgpID0+IGdldExhc3REYXRhUGF0aE5hbWUodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaW5kZXgnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldFBhcmVudEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBpdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuaXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5wYXJlbnRJdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgaXRlbSgpIHtcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAgIC8vIElmIGBkYXRhYCBpc24ndCBwcm92aWRlZCwgd2UgY2FuIGRldGVybWluZSBpdCBmcm9tIHJvb3REYXRhICYgZGF0YVBhdGg6XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YScsICgpID0+XG4gICAgICBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIC8vIE5PVEU6IGBwYXJlbnRJdGVtYCBpc24ndCB0aGUgY2xvc2VzdCBkYXRhIHBhcmVudCB0byBgaXRlbWAsIGl0J3MgdGhlXG4gIC8vIGNsb3Nlc3QgcGFyZW50IHRoYXQgaXNuJ3QgYW4gYXJyYXksIGUuZy4gZm9yIHJlbGF0aW9ucyBvciBuZXN0ZWQgSlNPTlxuICAvLyBkYXRhLiAgVGhpcyBpcyB3aHkgdGhlIHRlcm0gYGl0ZW1gIHdhcyBjaG9zZW4gb3ZlciBgZGF0YWAsIGUuZy4gVlMgdGhlXG4gIC8vIHVzZSBvZiBgcGFyZW50RGF0YWAgaW4gc2VydmVyLXNpZGVkIHZhbGlkYXRpb24sIHdoaWNoIGlzIHRoZSBjbG9zZXN0XG4gIC8vIHBhcmVudC4gSWYgbmVlZGVkLCB3ZSBjb3VsZCBleHBvc2UgdGhpcyBkYXRhIGhlcmUgdG9vLCBhcyB3ZSBjYW4gZG8gYWxsXG4gIC8vIHNvcnRzIG9mIGRhdGEgcHJvY2Vzc2luZyB3aXRoIGByb290RGF0YWAgYW5kIGBkYXRhUGF0aGAuXG4gIGdldCBwYXJlbnRJdGVtKCkge1xuICAgIGNvbnN0IHBhcmVudEl0ZW0gPVxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHwgbnVsbFxuICAgIHJldHVybiBwYXJlbnRJdGVtICE9PSB0aGlzLml0ZW0gPyBwYXJlbnRJdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBSZW1vdmUgZXhwb3N1cmUgc2luY2UgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LFxuICAvLyBlLmcuIG5lc3RlZCBmb3JtcyBpbiBgcHJvY2Vzc0RhdGEoKWAuIEluc3RlYWQsIGJpbmQgY29tcG9uZW50IHRvIGB0aGlzYFxuICAvLyBvbmx5IHdoZXJlIGF2YWlsYWJsZS5cbiAgZ2V0IGNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gVE9ETzogQWRkIGBjb21wb25lbnRTY2hlbWFgIGdldHRlciBmb3IgdGhlIHNjaGVtYSBvZiB0aGUgY3VycmVudCBjb21wb25lbnQsXG4gIC8vIGV2ZW4gd2hlbiB0aGUgY29tcG9uZW50IGlzbid0IGFjdHVhbGx5IGluc3RhbnRpYXRlZC4gQ29uc2lkZXIgYWRkaW5nXG4gIC8vIGBzb3VyY2VTY2hlbWFgIGFzIHdlbGw/XG5cbiAgLy8gVE9ETzogRml4IHVuY2xlYXIgbmFtaW5nOiBXaGljaCBzY2hlbWEgaXMgdGhpcywgdGhhdCBvZiB0aGUgY29tcG9uZW50IG9yIG9mXG4gIC8vIGl0cyBwYXJlbnQ/IElzbid0IGV4cG9zaW5nIGBmb3JtQ29tcG9uZW50YCBhbmQgYHZpZXdDb21wb25lbnRgIGVub3VnaCwgb25jZVxuICAvLyB3ZSBvZmZlciBhY2Nlc3MgdG8gdGhlaXIgY29tcG9uZW50cyB0aGVyZSB0aHJvdWdoIGBnZXRDb21wb25lbnQoKWAgJiBjby4gb25cbiAgLy8gYERpdG9NaXhpbmAgcGVyaGFwcz8gIEFsc28sIHRoZXJlIGNvdWxkIGJlIGEgYHRhYkNvbXBvbmVudGAgZ2V0dGVyIGZvclxuICAvLyBzY2hlbWFzIGluIHRhYnM/XG4gIGdldCBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBmb3JtQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1Db21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAndmlld0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RpYWxvZ0NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncGFuZWxDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jlc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc291cmNlQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIC8vIFdoZW4gdXNlZCBpbiBPcHRpb25zTWl4aW4gZm9yIGBzY2hlbWEub3B0aW9ucy52YWx1ZSgpYCxcbiAgLy8gYHNjaGVtYS5vcHRpb25zLmxhYmVsKClgIGFuZCAgYHNjaGVtYS5zZWFyY2guZmlsdGVyKClgIGNhbGxiYWNrczpcbiAgZ2V0IG9wdGlvbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb24nLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcHRpb25zJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGV2ZW50czogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQXN5bmMgdmVyc2lvbnMgb2YgVnVlJ3MgJG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGVcbiAgICAvLyBldmVudHMgYWRkZWQgLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrc1xuICAgIC8vIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBldmVudHMgPSB0aGlzLiRldmVudHMgfHwgKHRoaXMuJGV2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBldmVudHNbZXZlbnRdIHx8IChldmVudHNbZXZlbnRdID0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYWxsIGhhbmRsZXJzIGZvciB0aGlzIGV2ZW50XG4gICAgICAgICAgICBkZWxldGUgdGhpcy4kZXZlbnRzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuJGV2ZW50cz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLCBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLiRldmVudHM/LltldmVudF1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVsZWdhdGUoZXZlbnQsIHRhcmdldCkge1xuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlKGV2LCB0YXJnZXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub24oZXZlbnQsICguLi5hcmdzKSA9PiB0YXJnZXQuZW1pdChldmVudCwgLi4uYXJncykpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LCBpc09iamVjdCwgaXNTdHJpbmcsIGlzQm9vbGVhbiwgaXNOdW1iZXIsIGlzRnVuY3Rpb24sIGlzRGF0ZSxcbiAgaXNSZWdFeHAsIGFzQXJyYXlcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNoZWNrZXJzID0ge1xuICBCb29sZWFuOiBpc0Jvb2xlYW4sXG4gIE51bWJlcjogaXNOdW1iZXIsXG4gIFN0cmluZzogaXNTdHJpbmcsXG4gIERhdGU6IGlzRGF0ZSxcbiAgQXJyYXk6IGlzQXJyYXksXG4gIE9iamVjdDogaXNPYmplY3QsXG4gIFJlZ0V4cDogaXNSZWdFeHAsXG4gIEZ1bmN0aW9uOiBpc0Z1bmN0aW9uXG59XG5cbi8vIERlY2xhcmUgdGhlc2Ugc2VwYXJhdGVseSBmcm9tIHRoZSBgdHlwZUNvbnZlcnRlcnNgIG9iamVjdCwgdG8gcHJldmVudFxuLy8gQmFiZWwgaXNzdWVzIHdpdGggYE9iamVjdGAgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIGBPYmplY3RgOlxuY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4gISF2YWx1ZVxuY29uc3QgdG9OdW1iZXIgPSB2YWx1ZSA9PiArdmFsdWVcbmNvbnN0IHRvU3RyaW5nID0gdmFsdWUgPT4gU3RyaW5nKHZhbHVlKVxuXG5jb25zdCB0b0RhdGUgPSB2YWx1ZSA9PiBpc0RhdGUodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+IGlzQXJyYXkodmFsdWUpXG4gID8gdmFsdWVcbiAgOiBpc1N0cmluZyh2YWx1ZSlcbiAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICA6IGFzQXJyYXkodmFsdWUpXG5cbmNvbnN0IHRvT2JqZWN0ID0gdmFsdWUgPT4gaXNPYmplY3QodmFsdWUpXG4gID8gdmFsdWVcbiAgLy8gSWYgYSBPYmplY3QgaXMgZXhwZWN0ZWQgYnV0IGEgQm9vbGVhbiBwcm92aWRlLCBjb252ZXJ0IHRvIGFuIGVtcHR5XG4gIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICA6IHZhbHVlID09PSB0cnVlXG4gICAgPyB7fVxuICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+IGlzUmVnRXhwKHZhbHVlKVxuICA/IHZhbHVlXG4gIDogbmV3IFJlZ0V4cCh2YWx1ZSlcblxuY29uc3QgdHlwZUNvbnZlcnRlcnMgPSB7XG4gIEJvb2xlYW46IHRvQm9vbGVhbixcbiAgTnVtYmVyOiB0b051bWJlcixcbiAgU3RyaW5nOiB0b1N0cmluZyxcbiAgRGF0ZTogdG9EYXRlLFxuICBBcnJheTogdG9BcnJheSxcbiAgT2JqZWN0OiB0b09iamVjdCxcbiAgUmVnRXhwOiB0b1JlZ0V4cFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSB7XG4gIC8vIFNlZSBpZiBhbnkgb2YgdGhlIGV4cGVjdCB0eXBlcyBtYXRjaCwgcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZXkgZG86XG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBpZiAodHlwZUNoZWNrZXJzW3R5cGUubmFtZV0/Lih2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSkge1xuICBjb25zdCBjb252ZXJ0ZXIgPSB0eXBlICYmIHR5cGVDb252ZXJ0ZXJzW3R5cGUubmFtZSB8fCB0eXBlXVxuICByZXR1cm4gY29udmVydGVyID8gY29udmVydGVyKHZhbHVlKSA6IHZhbHVlXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpID8geyAuLi5kZWZzLCAuLi5yZXNvdXJjZSB9XG4gICAgOiBpc1N0cmluZyhyZXNvdXJjZSkgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICA6IG51bGxcbiAgLy8gT25seSBzZXQgcGFyZW50IGlmIHBhdGggZG9lc24ndCBzdGFydCB3aXRoICcvJywgc28gcmVsYXRpdmUgVVJMcyBhcmVcbiAgLy8gZGVhbHQgd2l0aCBjb3JyZWN0bHkuXG4gIGlmIChcbiAgICByZXNvdXJjZSAmJlxuICAgIHBhcmVudCAhPT0gdW5kZWZpbmVkICYmXG4gICAgcmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQgJiZcbiAgICAhcmVzb3VyY2UucGF0aD8uc3RhcnRzV2l0aCgnLycpXG4gICkge1xuICAgIHJlc291cmNlLnBhcmVudCA9IHBhcmVudFxuICAgIGlmICghcmVzb3VyY2UucGF0aCkge1xuICAgICAgcmVzb3VyY2UucGF0aCA9ICcuJ1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzb3VyY2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbWJlclJlc291cmNlKGlkLCByZXNvdXJjZSkge1xuICByZXR1cm4gaWQgIT0gbnVsbCAmJiByZXNvdXJjZT8udHlwZSA9PT0gJ2NvbGxlY3Rpb24nXG4gICAgPyB7XG4gICAgICB0eXBlOiAnbWVtYmVyJyxcbiAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgcmVzb3VyY2UsXG4gICAgICAgICh2YWx1ZSwga2V5KSA9PiBbJ21ldGhvZCcsICdwYXRoJywgJ3BhcmVudCddLmluY2x1ZGVzKGtleSlcbiAgICAgICksXG4gICAgICBpZDogYCR7aWR9YFxuICAgIH1cbiAgICA6IG51bGxcbn1cbiIsImNvbnN0IGxvZ2dlZERlcHJlY2F0aW9ucyA9IG5ldyBTZXQoKVxuXG5leHBvcnQgZnVuY3Rpb24gZGVwcmVjYXRlKG1lc3NhZ2UpIHtcbiAgLy8gT25seSBsb2cgZGVwcmVjYXRpb24gbWVzc2FnZXMgb25jZS5cbiAgaWYgKCFsb2dnZWREZXByZWNhdGlvbnMuaGFzKG1lc3NhZ2UpKSB7XG4gICAgbG9nZ2VkRGVwcmVjYXRpb25zLmFkZChtZXNzYWdlKVxuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcsIGlzRnVuY3Rpb24sIGFzQXJyYXksIGVxdWFscyxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoLCBsYWJlbGl6ZSwgaHlwaGVuYXRlLCBmb3JtYXRcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBhcHBTdGF0ZSBmcm9tICcuLi9hcHBTdGF0ZS5qcydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgaXNNYXRjaGluZ1R5cGUsIGNvbnZlcnRUeXBlIH0gZnJvbSAnLi4vdXRpbHMvdHlwZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZGVwcmVjYXRlIH0gZnJvbSAnLi4vdXRpbHMvZGVwcmVjYXRlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtFbWl0dGVyTWl4aW5dLFxuXG4gIGluamVjdDogW1xuICAgICdhcGknLFxuICAgICckdmVyYnMnLFxuICAgICckdmlld3MnLFxuICAgICckaXNQb3B1bGF0ZWQnLFxuICAgICckc2NoZW1hQ29tcG9uZW50JyxcbiAgICAnJHJvdXRlQ29tcG9uZW50JyxcbiAgICAnJGRhdGFDb21wb25lbnQnLFxuICAgICckc291cmNlQ29tcG9uZW50JyxcbiAgICAnJHJlc291cmNlQ29tcG9uZW50JyxcbiAgICAnJGRpYWxvZ0NvbXBvbmVudCcsXG4gICAgJyRwYW5lbENvbXBvbmVudCcsXG4gICAgJyR0YWJDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8geyAkZGF0YUNvbXBvbmVudDogKCkgPT4gdGhpcyB9XG4gICAgICA6IHt9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGUsXG4gICAgICBvdmVycmlkZXM6IG51bGwgLy8gU2VlIGFjY2Vzc29yLmpzXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YT8uc2NoZW1hXG4gICAgfSxcblxuICAgIHVzZXIoKSB7XG4gICAgICByZXR1cm4gYXBwU3RhdGUudXNlclxuICAgIH0sXG5cbiAgICAvLyAkdmVyYnMsICR2ZXJicyBhbmQgJGlzUG9wdWxhdGVkIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmVcbiAgICAvLyByZWFjdGl2ZW5lc3MgYWNyb3NzIHByb3ZpZGUvaW5qZWN0LlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgdmVyYnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmVyYnMoKVxuICAgIH0sXG5cbiAgICB2aWV3cygpIHtcbiAgICAgIHJldHVybiB0aGlzLiR2aWV3cygpXG4gICAgfSxcblxuICAgIGlzUG9wdWxhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGlzUG9wdWxhdGVkKClcbiAgICB9LFxuXG4gICAgbG9jYWxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBpLmxvY2FsZVxuICAgIH0sXG5cbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogZmFsc2UgfSlcbiAgICB9LFxuXG4gICAgcm9vdENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb290LiRjaGlsZHJlblswXVxuICAgIH0sXG5cbiAgICBzY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBVc2UgY29tcHV0ZWQgcHJvcGVydGllcyBhcyBsaW5rcyB0byBpbmplY3RzLCBzbyBEaXRvU2NoZW1hIGNhblxuICAgICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICAgIHJldHVybiB0aGlzLiRzY2hlbWFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIFJvdXRlTWl4aW4gY2FuXG4gICAgICAvLyBvdmVycmlkZSB0aGUgcHJvcGVydHkgYW5kIHJldHVybiBgdGhpc2AgaW5zdGVhZCBvZiB0aGUgcGFyZW50LlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzRm9ybSA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlld0NvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzVmlldyA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIGN1cnJlbnQgY29tcG9uZW50LCB0aGF0IGlzIGxpbmtlZCB0byBhIHJlc291cmNlIChhbmQgdGh1cyBsb2FkcyBpdHNcbiAgICAvLyBvd24gZGF0YSBhbmQgZG9lc24ndCBob2xkIG5lc3RlZCBkYXRhKS5cbiAgICBkYXRhQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhID8gdGhpcyA6IHRoaXMuJGRhdGFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZGlhbG9nQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFuZWxDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50Py4kcGFyZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50Py4kcGFyZW50LnJvdXRlQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudEZvcm1Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py4kcGFyZW50LmZvcm1Db21wb25lbnRcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlQ3JlYXRlKCkge1xuICAgIHRoaXMuJHVpZCA9ICsrdWlkXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoZSBzdGF0ZSBvZiBjb21wb25lbnRzIGlzIG9ubHkgYXZhaWxhYmxlIGR1cmluZyB0aGUgbGlmZS1jeWNsZSBvZiBhXG4gICAgLy8gY29tcG9uZW50LiBTb21lIGluZm9ybWF0aW9uIHdlIG5lZWQgYXZhaWxhYmxlIGxvbmdlciB0aGFuIHRoYXQsIGUuZy5cbiAgICAvLyBgcXVlcnlgICYgYHRvdGFsYCBvbiBUeXBlTGlzdCwgc28gdGhhdCB3aGVuIHRoZSB1c2VyIG5hdmlnYXRlcyBiYWNrIGZyb21cbiAgICAvLyBlZGl0aW5nIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIHRoZSBzdGF0ZSBvZiB0aGUgbGlzdCBpcyBzdGlsbCB0aGUgc2FtZS5cbiAgICAvLyBXZSBjYW4ndCBzdG9yZSB0aGlzIGluIGBkYXRhYCwgYXMgdGhpcyBpcyBhbHJlYWR5IHRoZSBwdXJlIGRhdGEgZnJvbSB0aGVcbiAgICAvLyBBUEkgc2VydmVyLiBUaGF0J3Mgd2hhdCB0aGUgYHN0b3JlYCBpcyBmb3I6IE1lbW9yeSB0aGF0J3MgYXZhaWxhYmxlIGFzXG4gICAgLy8gbG9uZyBhcyB0aGUgY3VycmVudCBlZGl0aW5nIHBhdGggaXMgc3RpbGwgdmFsaWQuIEZvciB0eXBlIGNvbXBvbmVudHMsXG4gICAgLy8gdGhpcyBtZW1vcnkgaXMgcHJvdmlkZWQgYnkgdGhlIHBhcmVudCwgc2VlIFJvdXRlTWl4aW4gYW5kIERpdG9QYW5lLlxuICAgIGdldFN0b3JlKGtleSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmVba2V5XVxuICAgIH0sXG5cbiAgICBzZXRTdG9yZShrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc2V0KHRoaXMuc3RvcmUsIGtleSwgdmFsdWUpXG4gICAgfSxcblxuICAgIGdldENoaWxkU3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdG9yZShrZXkpIHx8IHRoaXMuc2V0U3RvcmUoa2V5LCB7fSlcbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hVmFsdWUoXG4gICAgICBrZXlPckRhdGFQYXRoLFxuICAgICAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIHNjaGVtYSA9IHRoaXMuc2NoZW1hLCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4gICAgKSB7XG4gICAgICBjb25zdCB0eXBlcyA9IHR5cGUgJiYgYXNBcnJheSh0eXBlKVxuICAgICAgLy8gRm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGRhdGEtcGF0aHMgaW4gYGtleU9yRGF0YVBhdGhgIGNhbiBvbmx5IGJlXG4gICAgICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgICAgIGxldCB2YWx1ZSA9IHNjaGVtYVxuICAgICAgICA/IGlzQXJyYXkoa2V5T3JEYXRhUGF0aClcbiAgICAgICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgICAgICA6IHNjaGVtYVtrZXlPckRhdGFQYXRoXVxuICAgICAgICA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbihkZWYpICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgZGVmKSkge1xuICAgICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zIGZvciBhbnkgdHlwZSBleGNlcHQgYEZ1bmN0aW9uYDpcbiAgICAgICAgICBkZWYgPSBkZWYuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZlxuICAgICAgfVxuXG4gICAgICBpZiAoaXNNYXRjaGluZ1R5cGUodHlwZXMsIHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH1cbiAgICAgIC8vIEFueSBzY2hlbWEgdmFsdWUgaGFuZGxlZCB0aHJvdWdoIGBnZXRTY2hlbWFWYWx1ZSgpYCBjYW4gcHJvdmlkZVxuICAgICAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICAgICAgaWYgKGNhbGxiYWNrICYmIGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyBOb3cgZmluYWxseSBzZWUgaWYgd2UgY2FuIGNvbnZlcnQgdG8gdGhlIGV4cGVjdCB0eXBlcy5cbiAgICAgIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnRlZCA9IGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKVxuICAgICAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udmVydGVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0TGFiZWwoc2NoZW1hLCBuYW1lKSB7XG4gICAgICByZXR1cm4gc2NoZW1hXG4gICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnbGFiZWwnLCB7IHR5cGU6IFN0cmluZywgc2NoZW1hIH0pIHx8XG4gICAgICAgICAgbGFiZWxpemUobmFtZSB8fCBzY2hlbWEubmFtZSlcbiAgICAgICAgOiBsYWJlbGl6ZShuYW1lKSB8fCAnJ1xuICAgIH0sXG5cbiAgICBsYWJlbGl6ZSxcblxuICAgIGdldEJ1dHRvbkF0dHJpYnV0ZXMobmFtZSwgYnV0dG9uKSB7XG4gICAgICBjb25zdCB2ZXJiID0gdGhpcy52ZXJic1tuYW1lXSB8fCBuYW1lXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzczogYGRpdG8tYnV0dG9uLSR7dmVyYn1gLFxuICAgICAgICB0aXRsZTogYnV0dG9uPy50ZXh0IHx8IGxhYmVsaXplKHZlcmIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldERyYWdPcHRpb25zKGRyYWdnYWJsZSwgZmFsbGJhY2sgPSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGRpc2FibGVkOiAhZHJhZ2dhYmxlLFxuICAgICAgICBoYW5kbGU6ICcuZGl0by1idXR0b24tZHJhZycsXG4gICAgICAgIGRyYWdDbGFzczogJ2RpdG8tZHJhZy1hY3RpdmUnLFxuICAgICAgICBjaG9zZW5DbGFzczogJ2RpdG8tZHJhZy1jaG9zZW4nLFxuICAgICAgICBnaG9zdENsYXNzOiAnZGl0by1kcmFnLWdob3N0JyxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogJ2RpdG8tZHJhZy1mYWxsYmFjaycsXG4gICAgICAgIGZvcmNlRmFsbGJhY2s6IGZhbGxiYWNrXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFF1ZXJ5TGluayhxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiAhIXNjaGVtYSAmJiB0aGlzLmdldFNjaGVtYVZhbHVlKCdpZicsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHtcbiAgICAgIGNvbXBvbmVudHMsXG4gICAgICBidXR0b25zLFxuICAgICAgZGF0YSxcbiAgICAgIHNldHRpbmdzID0ge1xuICAgICAgICB3aWR0aDogNDgwLFxuICAgICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgICAgY2xpY2tUb0Nsb3NlOiBmYWxzZVxuICAgICAgfVxuICAgIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IHRocm91Z2ggdnVlLWpzLW1vZGFsLCBhbmQgd3JhcHMgaXQgaW4gYVxuICAgICAgLy8gcHJvbWlzZSBzbyB0aGF0IHRoZSBidXR0b25zIGluIHRoZSBkaWFsb2cgY2FuIHVzZSBgZGlhbG9nLnJlc29sdmUoKWBcbiAgICAgIC8vIGFuZCBgZGlhbG9nLnJlamVjdCgpYCB0byBjbG9zZSB0aGUgbW9kYWwgZGlhbG9nIGFuZCByZXNvbHZlIC8gcmVqZWN0XG4gICAgICAvLyB0aGUgcHJvbWlzZSBhdCBvbmNlLlxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy4kbW9kYWwuc2hvdyhEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1kaWFsb2cnKSwge1xuICAgICAgICAgIGNvbXBvbmVudHMsXG4gICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgfSwgc2V0dGluZ3MpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVBhdGgocmVzb3VyY2UpIHtcbiAgICAgIHJlc291cmNlID0gZ2V0UmVzb3VyY2UocmVzb3VyY2UpXG4gICAgICAvLyBSZXNvdXJjZXMgd2l0aG91dCBhIHBhcmVudCBpbmhlcml0IHRoZSBvbmUgZnJvbSBgZGF0YUNvbXBvbmVudGBcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkuXG4gICAgICBpZiAocmVzb3VyY2UucGFyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVzb3VyY2UucGFyZW50ID0gdGhpcy5kYXRhQ29tcG9uZW50Py5yZXNvdXJjZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXBpLnJlc291cmNlcy5hbnkoZ2V0UmVzb3VyY2UocmVzb3VyY2UpKVxuICAgIH0sXG5cbiAgICBnZXRSZXNvdXJjZVVybChyZXNvdXJjZSkge1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgbGV0IHVybCA9IG51bGxcbiAgICAgIGlmIChwYXRoKSB7XG4gICAgICAgIC8vIFVzZSBzYW1lIGFwcHJvYWNoIGFzIGF4aW9zIGludGVybmFsbHkgdG8gam9pbiBiYXNlVVJMIHdpdGggcGF0aDpcbiAgICAgICAgdXJsID0gYCR7XG4gICAgICAgICAgdGhpcy5hcGkudXJsLnJlcGxhY2UoL1xcLyskLywgJycpXG4gICAgICAgIH0vJHtcbiAgICAgICAgICBwYXRoLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgICAgIH1gXG4gICAgICAgIC8vIFN1cHBvcnQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycywgd2hpY2ggYXJlIGFkZGVkIHRvIHRoZSBVUkw6XG4gICAgICAgIGNvbnN0IHsgcXVlcnkgfSA9IHJlc291cmNlXG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KS5tYXAoXG4gICAgICAgICAgICAoW2tleSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgICBgJHtlbmNvZGVVUklDb21wb25lbnQoa2V5KX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsdWUpfWBcbiAgICAgICAgICApXG4gICAgICAgICAgdXJsID0gYCR7dXJsfT8ke3BhcmFtcy5qb2luKCcmJyl9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdXJsXG4gICAgfSxcblxuICAgIGFzeW5jIHNlbmRSZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIHJlc291cmNlLCBkYXRhLCBwYXJhbXMsIGludGVybmFsIH0pIHtcbiAgICAgIHVybCA9IHVybCB8fCB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIG1ldGhvZCA9IG1ldGhvZCB8fCByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlSZXF1ZXN0KHVybClcbiAgICAgIGlmIChjaGVja1VzZXIpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yb290Q29tcG9uZW50LmVuc3VyZVVzZXIoKVxuICAgICAgfVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaS5yZXF1ZXN0KHsgbWV0aG9kLCB1cmwsIGRhdGEsIHBhcmFtcyB9KVxuICAgICAgLy8gRGV0ZWN0IGNoYW5nZSBvZiB0aGUgb3duIHVzZXIsIGFuZCBmZXRjaCBpdCBhZ2FpbiBpZiBpdCB3YXMgY2hhbmdlZC5cbiAgICAgIGlmIChcbiAgICAgICAgY2hlY2tVc2VyICYmXG4gICAgICAgIG1ldGhvZCA9PT0gJ3BhdGNoJyAmJlxuICAgICAgICBlcXVhbHMocmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlKHRoaXMudXNlci5pZCwgdGhpcy5hcGkudXNlcnMpKVxuICAgICAgKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5mZXRjaFVzZXIoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfSxcblxuICAgIHJlcXVlc3QoeyBjYWNoZSwgLi4ub3B0aW9ucyB9KSB7XG4gICAgICAvLyBBbGxvdyBjYWNoaW5nIG9mIGxvYWRlZCBkYXRhIG9uIHR3byBsZXZlbHM6XG4gICAgICAvLyAtICdnbG9iYWwnOiBjYWNoZSBnbG9iYWxseSwgZm9yIHRoZSBlbnRpcmUgYWRtaW4gc2Vzc2lvblxuICAgICAgLy8gLSAnbG9jYWwnOiBjYWNoZSBsb2NhbGx5IHdpdGhpbiB0aGUgY2xvc2VzdCByb3V0ZSBjb21wb25lbnQgdGhhdCBpc1xuICAgICAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UgYW5kIGxvYWRzIGl0cyBvd24gZGF0YS5cbiAgICAgIGNvbnN0IGNhY2hlUGFyZW50ID0gY2FjaGUgJiYge1xuICAgICAgICBnbG9iYWw6IHRoaXMuYXBwU3RhdGUsXG4gICAgICAgIGxvY2FsOiB0aGlzLmRhdGFDb21wb25lbnRcbiAgICAgIH1bY2FjaGVdXG4gICAgICBjb25zdCBsb2FkQ2FjaGUgPSBjYWNoZVBhcmVudD8ubG9hZENhY2hlXG4gICAgICAvLyBCdWlsZCBhIGNhY2hlIGtleSBmcm9tIHRoZSBjb25maWc6XG4gICAgICBjb25zdCBjYWNoZUtleSA9IGxvYWRDYWNoZSAmJiBgJHtcbiAgICAgICAgb3B0aW9ucy5tZXRob2QgfHwgJ2dldCd9ICR7XG4gICAgICAgIG9wdGlvbnMudXJsfSAke1xuICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLnBhcmFtcyB8fCAnJyl9ICR7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMuZGF0YSB8fCAnJylcbiAgICAgIH1gXG4gICAgICBpZiAobG9hZENhY2hlICYmIChjYWNoZUtleSBpbiBsb2FkQ2FjaGUpKSB7XG4gICAgICAgIHJldHVybiBsb2FkQ2FjaGVbY2FjaGVLZXldXG4gICAgICB9XG4gICAgICAvLyBOT1RFOiBObyBhd2FpdCBoZXJlLCByZXMgaXMgYSBwcm9taXNlIHRoYXQgd2UgY2FuIGVhc2lseSBjYWNoZS5cbiAgICAgIC8vIFRoYXQncyBmaW5lIGJlY2F1c2UgcHJvbWlzZXMgY2FuIGJlIHJlc29sdmVkIG92ZXIgYW5kIG92ZXIgYWdhaW4uXG4gICAgICBjb25zdCByZXMgPSB0aGlzLnNlbmRSZXF1ZXN0KG9wdGlvbnMpXG4gICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHJlc3BvbnNlLmRhdGEpXG4gICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgLy8gQ29udmVydCBheGlvcyBlcnJvcnMgdG8gbm9ybWFsIGVycm9yc1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBlcnJvci5yZXNwb25zZT8uZGF0YVxuICAgICAgICAgIHRocm93IGRhdGFcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZGF0YS5tZXNzYWdlKSwgZGF0YSlcbiAgICAgICAgICAgIDogZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIGlmIChsb2FkQ2FjaGUpIHtcbiAgICAgICAgbG9hZENhY2hlW2NhY2hlS2V5XSA9IHJlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH0sXG5cbiAgICBsb2FkKG9wdGlvbnMpIHtcbiAgICAgIGRlcHJlY2F0ZSgnbG9hZCgpIGlzIGRlcHJlY2F0ZWQuIFVzZSByZXF1ZXN0KCkgaW5zdGVhZC4nKVxuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChvcHRpb25zKVxuICAgIH0sXG5cbiAgICBmb3JtYXQodmFsdWUsIHtcbiAgICAgIGxvY2FsZSA9IHRoaXMuYXBpLmxvY2FsZSxcbiAgICAgIGRlZmF1bHRzID0gdGhpcy5hcGkuZm9ybWF0cyxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIHtcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgKCkgPT4gcmVzb2x2ZSh0cnVlKSxcbiAgICAgICAgICAoKSA9PiByZXNvbHZlKGZhbHNlKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkb3dubG9hZChvcHRpb25zID0ge30pIHtcbiAgICAgIGlmIChpc1N0cmluZyhvcHRpb25zKSkge1xuICAgICAgICBvcHRpb25zID0geyB1cmw6IG9wdGlvbnMgfVxuICAgICAgfVxuICAgICAgY29uc3QgeyB1cmwsIGZpbGVuYW1lIH0gPSBvcHRpb25zXG4gICAgICAvLyBTZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80OTkxNzA2Ni8xMTYzNzA4XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBhLmhyZWYgPSB1cmxcbiAgICAgIGlmIChmaWxlbmFtZSkge1xuICAgICAgICBhLmRvd25sb2FkID0gZmlsZW5hbWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSlcbiAgICAgIGEuY2xpY2soKVxuICAgICAgYm9keS5yZW1vdmVDaGlsZChhKVxuICAgIH0sXG5cbiAgICBub3RpZnkob3B0aW9ucykge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQuY2xvc2VOb3RpZmljYXRpb25zKClcbiAgICB9LFxuXG4gICAgc2V0dXBTY2hlbWFGaWVsZHMoKSB7XG4gICAgICB0aGlzLnNldHVwTWV0aG9kcygpXG4gICAgICB0aGlzLnNldHVwQ29tcHV0ZWQoKVxuICAgICAgdGhpcy5zZXR1cEV2ZW50cygpXG4gICAgfSxcblxuICAgIHNldHVwTWV0aG9kcygpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLm1ldGhvZHMgfHwge30pKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHRoaXNba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBtZXRob2QgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBDb21wdXRlZCgpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLmNvbXB1dGVkIHx8IHt9KSkge1xuICAgICAgICBjb25zdCBhY2Nlc3NvciA9IGlzRnVuY3Rpb24odmFsdWUpXG4gICAgICAgICAgPyB7IGdldDogdmFsdWUgfVxuICAgICAgICAgIDogaXNPYmplY3QodmFsdWUpICYmIGlzRnVuY3Rpb24odmFsdWUuZ2V0KVxuICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChhY2Nlc3Nvcikge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIGFjY2Vzc29yKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBjb21wdXRlZCBwcm9wZXJ0eSBkZWZpbml0aW9uOiAke2tleX06ICR7dmFsdWV9YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXR1cEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgd2F0Y2gsIGV2ZW50cyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmICh3YXRjaCkge1xuICAgICAgICBjb25zdCBoYW5kbGVycyA9IGlzRnVuY3Rpb24od2F0Y2gpID8gd2F0Y2guY2FsbCh0aGlzKSA6IHdhdGNoXG4gICAgICAgIGlmIChpc09iamVjdChoYW5kbGVycykpIHtcbiAgICAgICAgICAvLyBJbnN0YWxsIHRoZSB3YXRjaCBoYW5kbGVycyBpbiB0aGUgbmV4dCB0aWNrLCBzbyBhbGwgY29tcG9uZW50cyBhcmVcbiAgICAgICAgICAvLyBpbml0aWFsaXplZCBhbmQgd2UgY2FuIGNoZWNrIGFnYWluc3QgdGhlaXIgbmFtZXMuXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCBjYWxsYmFja10gb2YgT2JqZWN0LmVudHJpZXMoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgICAgIC8vIEV4cGFuZCBwcm9wZXJ0eSBuYW1lcyB0byAnZGF0YS5wcm9wZXJ0eSc6XG4gICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeU5hbWUoa2V5KVxuICAgICAgICAgICAgICAgID8gYGRhdGEuJHtrZXl9YFxuICAgICAgICAgICAgICAgIDoga2V5XG4gICAgICAgICAgICAgIHRoaXMuJHdhdGNoKGV4cHIsIGNhbGxiYWNrKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYWRkRXZlbnQgPSAoa2V5LCBldmVudCwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY2FsbGJhY2spKSB7XG4gICAgICAgICAgdGhpcy5vbihoeXBoZW5hdGUoZXZlbnQpLCBjYWxsYmFjaylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBJbnZhbGlkIGV2ZW50IGRlZmluaXRpb246ICR7a2V5fTogJHtjYWxsYmFja31gKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQWxzbyBzY2FuIHNjaGVtYSBmb3IgYG9uW0EtWl1gLXN0eWxlIGNhbGxiYWNrcyBhbmQgYWRkIHRoZW1cbiAgICAgIC8vIFRPRE86IERlcGVyZWNhdGUgb25lIGZvcm1hdCBvciB0aGUgb3RoZXIsIGluIGZhdm91ciBvZiBvbmx5IG9uZSB3YXkgb2ZcbiAgICAgIC8vIGRvaW5nIHRoaW5ncy4gRGVjaWRlIHdoaWNoIG9uZSB0byByZW1vdmUuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYSkpIHtcbiAgICAgICAgaWYgKC9eb25bQS1aXS8udGVzdChrZXkpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXkuc2xpY2UoMiksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRFdmVudChldmVudCwge1xuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBwYXJlbnQgPSBudWxsXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCBoYXNMaXN0ZW5lcnMgPSB0aGlzLmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGNvbnN0IHBhcmVudEhhc0xpc3RlbmVycyA9IHBhcmVudD8uaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgaWYgKGhhc0xpc3RlbmVycyB8fCBwYXJlbnRIYXNMaXN0ZW5lcnMpIHtcbiAgICAgICAgLy8gVGhlIGVmZmVjdHMgb2Ygc29tZSBldmVudHMgbmVlZCBzb21lIHRpbWUgdG8gcHJvcGFnYXRlIHRocm91Z2ggVnVlLlxuICAgICAgICAvLyBVc2UgJG5leHRUaWNrKCkgdG8gbWFrZSBzdXJlIG91ciBoYW5kbGVycyBzZWUgdGhlc2UgY2hhbmdlcy5cbiAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9jZXNzZWRJdGVtYCBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgY29tcG9uZW50cyB0aGF0XG4gICAgICAgIC8vIGFyZSBuZXdseSByZW5kZXJlZCBkdWUgdG8gZGF0YSBjaGFuZ2VzIGhhdmUgcmVnaXN0ZXJlZCB0aGVtc2VsdmVzLlxuICAgICAgICBpZiAoWydsb2FkJywgJ2NoYW5nZSddLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiAoY29udGV4dCA9IERpdG9Db250ZXh0LmdldCh0aGlzLCBjb250ZXh0KSlcbiAgICAgICAgY29uc3QgcmVzID0gaGFzTGlzdGVuZXJzXG4gICAgICAgICAgPyBhd2FpdCB0aGlzLmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAvLyBEb24ndCBidWJibGUgdG8gcGFyZW50IGlmIGhhbmRsZWQgZXZlbnQgcmV0dXJuZWQgYGZhbHNlYFxuICAgICAgICBpZiAocGFyZW50SGFzTGlzdGVuZXJzICYmIHJlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBwYXJlbnQuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9XG4gIH1cbn1cblxubGV0IHVpZCA9IDBcbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT4gKFxuICAgIGBtdXN0IGJlIG51bWVyaWMgYW5kIG1heSBjb250YWluICR7XG4gICAgICAhZGVjaW1hbHMgfHwgZGVjaW1hbHMgPT09ICcqJyA/ICcnIDogZGVjaW1hbHNcbiAgICB9IGRlY2ltYWwgcG9pbnRzYFxuICApXG59XG4iLCJpbXBvcnQgeyBpc0VtYWlsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGVtYWlsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNFbWFpbCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIGEgdmFsaWQgZW1haWwnXG59XG4iLCJpbXBvcnQgeyBpc0hvc3RuYW1lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGhvc3RuYW1lID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNIb3N0bmFtZSh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBob3N0IG5hbWUnXG59XG4iLCJpbXBvcnQgeyBpc0RvbWFpbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBkb21haW4gPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0RvbWFpbih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSBkb21haW4nXG59XG4iLCJpbXBvcnQgeyBpc0ludGVnZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaW50ZWdlciA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSW50ZWdlcih2YWx1ZSksXG4gIG1lc3NhZ2U6ICdtdXN0IGJlIHdob2xlIG51bWJlcidcbn1cbiIsImV4cG9ydCBjb25zdCBtYXggPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1heCkgPT4gdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBtYXgpIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttYXh9IG9yIGxlc3NgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBtaW4gPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIG1pbikgPT4gdmFsdWUgPj0gbWluLFxuICBtZXNzYWdlKHZhbHVlLCBtaW4pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgJHttaW59IG9yIG1vcmVgXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBwYXNzd29yZCA9IHtcbiAgLy8gQWxsb3cgYW55IHZhbHVlLiBGb3Igbm93IHRoaXMgaXMgb25seSB1c2VkIGFzIGEgbWFya2VyLCB0byBhbGxvdyB0aGVcbiAgLy8gcmVxdWlyZWQgdmFsaWRhdGlvbiB0byBoYW5kbGUgdW5jaGFuZ2VkIHBhc3N3b3JkcyBzZXBhcmF0ZWx5LlxuICB2YWxpZGF0ZTogKCkgPT4gdHJ1ZVxufVxuIiwiZXhwb3J0IGNvbnN0IHJhbmdlID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBbbWluLCBtYXhdKSA9PiB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPD0gbWF4LFxuICBtZXNzYWdlKHZhbHVlLCBbbWluLCBtYXhdKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlIGJldHdlZW4gJHttaW59IGFuZCAke21heH1gXG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCByZXF1aXJlZCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgc2V0dGluZ3MsIHsgcGFzc3dvcmQgfSkgPT4gKFxuICAgICh2YWx1ZSAhPSBudWxsICYmIHZhbHVlICE9PSAnJykgfHxcbiAgICAvLyBQYXNzd29yZCBmaWVsZHMgdXNlIGB1bmRlZmluZWRgIGFzIG9wcG9zZWQgdG8gYG51bGxgIHdoZW4gdGhleSdyZSBzZXRcbiAgICAvLyBidXQgdW5jaGFuZ2VkLCBhbGxvdyB0aGlzIHRvIHBhc3MgdGhyb3VnaDpcbiAgICAocGFzc3dvcmQgJiYgdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgKSxcbiAgbWVzc2FnZTogJ2lzIHJlcXVpcmVkJyxcbiAgbnVsbGlzaDogdHJ1ZVxufVxuIiwiaW1wb3J0IHsgaXNVcmwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgdXJsID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNVcmwodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgdmFsaWQgVVJMJ1xufVxuIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyB2YWxpZGF0aW9ucyBmcm9tICcuLi92YWxpZGF0aW9ucy9pbmRleC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNUb3VjaGVkOiBmYWxzZSxcbiAgICAgIGlzRGlydHk6IGZhbHNlLFxuICAgICAgaXNWYWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBldmVudHMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNUb3VjaGVkID0gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0ZSgpXG4gICAgICAgIH0sXG4gICAgICAgIGNoYW5nZTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgICAgfSxcbiAgICAgICAgaW5wdXQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIHRoaXMuaXNUb3VjaGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWRhdGVkID0gZmFsc2VcbiAgICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGUobm90aWZ5ID0gdHJ1ZSkge1xuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgLy8gY29uc29sZS5sb2coJ3ZhbGlkYXRlJywgdGhpcy5kYXRhUGF0aCwgdmFsdWUsIHRoaXMudmFsaWRhdGlvbnMpXG4gICAgICBmb3IgKGNvbnN0IFtydWxlLCBzZXR0aW5nXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB2YWxpZGF0aW9uc1tydWxlXVxuICAgICAgICBpZiAodmFsaWRhdG9yICYmICh2YWxpZGF0b3IubnVsbGlzaCB8fCB2YWx1ZSAhPSBudWxsKSkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsaWRhdGUsIG1lc3NhZ2UgfSA9IHZhbGlkYXRvclxuICAgICAgICAgIGlmICghdmFsaWRhdGUodmFsdWUsIHNldHRpbmcsIHRoaXMudmFsaWRhdGlvbnMpKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc0Z1bmN0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlKHZhbHVlLCBzZXR0aW5nLCB0aGlzKVxuICAgICAgICAgICAgICAgIDogbWVzc2FnZVxuICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLCB0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmlzVmFsaWRhdGVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmlzVmFsaWQgPSBpc1ZhbGlkXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnkoKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShmYWxzZSlcbiAgICB9LFxuXG4gICAgbWFya0RpcnR5KCkge1xuICAgICAgdGhpcy5pc0RpcnR5ID0gdHJ1ZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgLy8gQ2xlYXIgY3VycmVudGx5IGRpc3BsYXllZCBlcnJvcnMgb24gbmV3IGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIGFkZEVycm9yKGVycm9yLCBhZGRMYWJlbCA9IGZhbHNlKSB7XG4gICAgICB0aGlzLmVycm9ycyB8fD0gW11cbiAgICAgIGlmIChhZGRMYWJlbCkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMubGFiZWwgfHwgdGhpcy5wbGFjZWhvbGRlciB8fCB0aGlzLm5hbWVcbiAgICAgICAgZXJyb3IgPSBgVGhlICR7bGFiZWx9IGZpZWxkICR7ZXJyb3J9LmBcbiAgICAgIH1cbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgLy8gQ29udmVydCBmcm9tIEFKViBlcnJvcnMgb2JqZWN0cyB0byBhbiBhcnJheSBvZiBlcnJvciBtZXNzYWdlc1xuICAgICAgdGhpcy5lcnJvcnMgPSBbXVxuICAgICAgZm9yIChjb25zdCB7IG1lc3NhZ2UgfSBvZiBlcnJvcnMpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihtZXNzYWdlLCB0cnVlKVxuICAgICAgfVxuICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgZ2V0RXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXJyb3JzID8gWy4uLnRoaXMuZXJyb3JzXSA6IG51bGxcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IG51bGxcbiAgICAgIHRoaXMuJGVtaXQoJ2Vycm9ycycsIHRoaXMuZXJyb3JzKVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgaXNGdW5jdGlvbiwgaXNTdHJpbmcsIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFBY2Nlc3NvcihcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBkZWZhdWx0OiBkZWYsIGdldCwgc2V0LCBjYWxsYmFjayA9IHRydWUgfSA9IHt9XG4pIHtcbiAgLy8gYGtleU9yRGF0YVBhdGhgIGNhbiBiZSBhIHNpbXBsZSBwcm9wZXJ0eSBrZXksXG4gIC8vIG9yIGEgZGF0YS1wYXRoIGludG8gc3ViLXByb3BlcnRpZXMsIGJvdGggaW4gYXJyYXkgb3Igc3RyaW5nIGZvcm1hdC5cbiAgaWYgKGlzU3RyaW5nKGtleU9yRGF0YVBhdGgpICYmIGtleU9yRGF0YVBhdGguaW5jbHVkZXMoJy4nKSkge1xuICAgIGtleU9yRGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIH1cbiAgLy8gVXNlIHRoZSBub3JtYWxpemVkIGRhdGEgcGF0aCBmb3IgdGhlIGhhbmRsaW5nIG92ZXJyaWRlc1xuICBjb25zdCBuYW1lID0gbm9ybWFsaXplRGF0YVBhdGgoa2V5T3JEYXRhUGF0aClcbiAgcmV0dXJuIHtcbiAgICBnZXQoKSB7XG4gICAgICAvLyBPbmx5IGRldGVybWluZSBzY2hlbWEgdmFsdWUgaWYgd2UgaGF2ZSBubyBnZXR0ZXIsIG9yIHRoZSBnZXR0ZXJcbiAgICAgIC8vIHdhbnRzIHRvIHJlY2VpdmUgdGhlIHZhbHVlIGFuZCBwcm9jZXNzIGl0IGZ1cnRoZXI6XG4gICAgICBjb25zdCB2YWx1ZSA9ICFnZXQgfHwgZ2V0Lmxlbmd0aCA+IDBcbiAgICAgICAgLy8gTk9URTogQmVjYXVzZSBgc2NoZW1hYCBvYmplY3RzIGFyZSByZXRyaWV2ZWQgZnJvbSBgbWV0YWAgb2JqZWN0LCB0aGV5XG4gICAgICAgIC8vIGRvbid0IHNlZW0gdG8gYmUgcmVhY3RpdmUuIFRvIGFsbG93IGNoYW5nZWQgaW4gYHNjaGVtYWAgdmFsdWVzLFxuICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICA/IHRoaXMub3ZlcnJpZGVzICYmIG5hbWUgaW4gdGhpcy5vdmVycmlkZXNcbiAgICAgICAgICA/IHRoaXMub3ZlcnJpZGVzW25hbWVdXG4gICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBjYWxsYmFjayB9KVxuICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgaWYgKHNldCkge1xuICAgICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzIHx8PSB7fVxuICAgICAgICB0aGlzLiRzZXQodGhpcy5vdmVycmlkZXMsIG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RvcmVBY2Nlc3NvcihuYW1lLCB7IGRlZmF1bHQ6IGRlZiwgZ2V0LCBzZXQgfSA9IHt9KSB7XG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgbGV0IHZhbHVlID0gdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgZGVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBgZGVmYXVsdCgpYCBmdW5jdGlvbnM6XG4gICAgICAgIHZhbHVlID0gaXNGdW5jdGlvbihkZWYpID8gZGVmLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KSA6IGRlZlxuICAgICAgICAvLyBUcmlnZ2VyIHNldHRlciBieSBzZXR0aW5nIHZhbHVlIGFuZCBhY2Nlc3NvciB0byBkZWZhdWx0OlxuICAgICAgICB0aGlzW25hbWVdID0gdmFsdWVcbiAgICAgICAgLy8gTm93IGFjY2VzcyBzdG9yZSBhZ2FpbiwgZm9yIHJlYWN0aXZpdHkgdHJhY2tpbmdcbiAgICAgICAgdGhpcy5nZXRTdG9yZShuYW1lKVxuICAgICAgfVxuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIGdldHRlciB0byBmdXJ0aGVyIGNoYW5nZSBvciBwcm9jZXNzIHRoZSB2YWx1ZVxuICAgICAgLy8gcmV0cmlldmVkIGZyb20gdGhlIHN0b3JlOlxuICAgICAgcmV0dXJuIGdldCA/IGdldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHZhbHVlXG4gICAgfSxcblxuICAgIHNldCh2YWx1ZSkge1xuICAgICAgLy8gQWxsb3cgdGhlIHByb3ZpZGVkIHNldHRlciB0byByZXR1cm4gYSBuZXcgdmFsdWUgdG8gc2V0LCBvciBkbyB0aGVcbiAgICAgIC8vIHNldHRpbmcgaXRzZWxmLCBhbmQgdGhlbiByZXR1cm4gYHVuZGVmaW5lZGA6XG4gICAgICBpZiAoIXNldCB8fCAodmFsdWUgPSBzZXQuY2FsbCh0aGlzLCB2YWx1ZSkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5zZXRTdG9yZShuYW1lLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImNvbnN0IHVpZE1hcCA9IG5ldyBXZWFrTWFwKClcblxuLy8gR2VuZXJhdGVkIGFuZCByZW1lbWJlcnMgdW5pcXVlIGlkcyBwZXIgcGFzc2VkIG9iamVjdCB1c2luZyBhIHdlYWsgbWFwLlxubGV0IHVpZCA9IDBcbmV4cG9ydCBmdW5jdGlvbiBnZXRVaWQob2JqZWN0LCBpdGVtSWQpIHtcbiAgbGV0IGlkID0gdWlkTWFwLmdldChvYmplY3QpXG4gIGlmICghaWQpIHtcbiAgICBpZCA9IGlkID0gaXRlbUlkIHx8IGBAJHsrK3VpZH1gXG4gICAgdWlkTWFwLnNldChvYmplY3QsIGlkKVxuICB9XG4gIHJldHVybiBpZFxufVxuIiwiaW1wb3J0IHsgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzSW50ZWdlciwgYXNBcnJheSwgcGFyc2VEYXRhUGF0aCwgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBuYW5vaWQgfSBmcm9tICduYW5vaWQnXG5cbi8vIFNjaGVtYUdyYXBoIGlzIGEgY2xhc3MgdG8gY29sbGVjdCBzY2hlbWEgZ3JhcGggbWV0YSBpbmZvcm1hdGlvbiBpbiBvcmRlciB0b1xuLy8gcHJvY2VzcyBzb3VyY2VzIGFuZCByZWxhdGlvbnMgZm9yIHRoZSBnaXZlbiB0YXJnZXRzICdzZXJ2ZXInIGFuZCAnY2xpcGJvYXJkJyxcbi8vIGFjY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSAoc3ViR3JhcGhba2V5XSA/Pz0ge30pXG4gICAgfVxuICAgIHN1YkdyYXBoLiRzZXR0aW5ncyA9IHtcbiAgICAgIC4uLmRlZmF1bHRzLCAvLyBTZWUgYGFkZFNvdXJjZShkYXRhUGF0aClgXG4gICAgICAuLi5zdWJHcmFwaC4kc2V0dGluZ3MsXG4gICAgICAuLi5zZXR0aW5nc1xuICAgIH1cbiAgfVxuXG4gIGFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgLy8gT25seSBzZXQgYHJlbGF0ZWQ6IGZhbHNlYCB0aHJvdWdoIHRoZSBkZWZhdWx0cywgYXMgYHNldFNvdXJjZVJlbGF0ZWQoKWBcbiAgICAvLyBtYXkgYmUgY2FsbGVkIGJlZm9yZSBgYWRkU291cmNlKClgLCBkZXBlbmRpbmcgb24gdGhlIGdyYXBoIHN0cnVjdHVyZS5cbiAgICB0aGlzLnNldChkYXRhUGF0aCwgeyB0eXBlOiAnc291cmNlJywgc2NoZW1hIH0sIHsgcmVsYXRlZDogZmFsc2UgfSlcbiAgfVxuXG4gIHNldFNvdXJjZVJlbGF0ZWQoZGF0YVBhdGgpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgcmVsYXRlZDogdHJ1ZSxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICB0eXBlOiAncmVsYXRpb24nLFxuICAgICAgc2NoZW1hLFxuICAgICAgaW50ZXJuYWw6ICEhcmVsYXRlZERhdGFQYXRoLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChyZWxhdGVkRGF0YVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIGdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aCkge1xuICAgIHJldHVybiBkYXRhUGF0aFxuICAgICAgPyAodGhpcy5yZWZlcmVuY2VzW2RhdGFQYXRoXSA/Pz0gbmFub2lkKDYpKVxuICAgICAgOiBudWxsXG4gIH1cblxuICBmbGF0dGVuKCkge1xuICAgIGNvbnN0IGZsYXR0ZW4gPSBncmFwaCA9PiB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gW11cbiAgICAgIGZvciAoY29uc3QgW2tleSwgeyAkc2V0dGluZ3MsIC4uLnN1YkdyYXBoIH1dIG9mIE9iamVjdC5lbnRyaWVzKGdyYXBoKSkge1xuICAgICAgICBpZiAoJHNldHRpbmdzKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksICRzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBbc3ViS2V5LCBzZXR0aW5nc10gb2YgZmxhdHRlbihzdWJHcmFwaCkpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2Ake2tleX0vJHtzdWJLZXl9YCwgc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW50cmllc1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKHRoaXMuZ3JhcGgpXG4gIH1cblxuICBwcm9jZXNzKHNvdXJjZVNjaGVtYSwgZGF0YSwgeyB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGNsaXBib2FyZCA9IHRhcmdldCA9PT0gJ2NsaXBib2FyZCdcbiAgICBpZiAoY2xpcGJvYXJkKSB7XG4gICAgICBkZWxldGUgZGF0YVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgICB9XG4gICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIHNldHRpbmdzXSBvZiB0aGlzLmZsYXR0ZW4oKSkge1xuICAgICAgY29uc3QgeyB0eXBlLCBzY2hlbWEsIGludGVybmFsLCByZWxhdGVkLCByZWZlcmVuY2UgfSA9IHNldHRpbmdzXG4gICAgICBjb25zdCBzb3VyY2UgPSB0eXBlID09PSAnc291cmNlJ1xuICAgICAgY29uc3QgcmVsYXRpb24gPSB0eXBlID09PSAncmVsYXRpb24nXG4gICAgICBpZiAoc291cmNlIHx8IHJlbGF0aW9uICYmIGludGVybmFsKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGdldFZhbHVlQXREYXRhUGF0aChkYXRhLCBkYXRhUGF0aCwgKCkgPT4gbnVsbClcbiAgICAgICAgY29uc3QgcmVtb3ZlSWQgPSBjbGlwYm9hcmQgJiYgc291cmNlICYmICFyZWxhdGVkXG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUlkID0gY2xpcGJvYXJkICYmIChcbiAgICAgICAgICByZWxhdGlvbiAmJiBpbnRlcm5hbCB8fFxuICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBhc0FycmF5KHZhbHVlcykuZmxhdCgpKSB7XG4gICAgICAgICAgY29uc3QgaWRLZXkgPSAoXG4gICAgICAgICAgICBzb3VyY2UgJiYgc2NoZW1hLmlkS2V5IHx8XG4gICAgICAgICAgICByZWxhdGlvbiAmJiBzY2hlbWEucmVsYXRlQnkgfHxcbiAgICAgICAgICAgICdpZCdcbiAgICAgICAgICApXG4gICAgICAgICAgbGV0IGlkID0gdmFsdWU/LltpZEtleV1cbiAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZUlkKSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgIH0gaWYgKHJlZmVyZW5jZUlkIHx8IGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgIGlmIChpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICAgIGlkID0gaWQuc2xpY2UoMSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZWZLZXkgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICAvLyBDbGlwYm9hcmQganVzdCBuZWVkcyB0ZW1wb3JhcnkgaWRzIHVuZGVyIHRoZSBhY3R1YWwgYGlkS2V5YC5cbiAgICAgICAgICAgICAgICA/IGlkS2V5XG4gICAgICAgICAgICAgICAgLy8gU2VydmVyIHdhbnRzIE9iamVjdGlvbi1zdHlsZSAnI2lkJyAvICcjcmVmJyBwYWlycy5cbiAgICAgICAgICAgICAgICA6IHNvdXJjZSA/ICcjaWQnIDogJyNyZWYnXG4gICAgICAgICAgICAgIGNvbnN0IHJldlZhbHVlID0gY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgPyBgQCR7aWR9YFxuICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleSByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAvLyBhY2Nyb3NzIHRoZSBmdWxsIGdyYXBoLlxuICAgICAgICAgICAgICAgIDogcmVmZXJlbmNlXG4gICAgICAgICAgICAgICAgICA/IGAke3JlZmVyZW5jZX0tJHtpZH1gXG4gICAgICAgICAgICAgICAgICA6IGlkIC8vIEEgdGVtcG9yYXJ5IGlkIHdpdGhvdXQgYSByZWxhdGVkLCBqdXN0IHByZXNlcnZlIGl0LlxuICAgICAgICAgICAgICB2YWx1ZVtyZWZLZXldID0gcmV2VmFsdWVcbiAgICAgICAgICAgICAgaWYgKHJlZktleSAhPT0gaWRLZXkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFcbiAgfVxufVxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBnZXRVaWQgfSBmcm9tICcuL3VpZC5qcydcbmltcG9ydCB7IFNjaGVtYUdyYXBoIH0gZnJvbSAnLi9TY2hlbWFHcmFwaC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0FycmF5LCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIGNsb25lLCBjYW1lbGl6ZSwgaXNNb2R1bGVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNvbXBvbmVudHMgPSB7fVxuY29uc3QgdW5rbm93blR5cGVSZXBvcnRlZCA9IHt9XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KSB7XG4gIHR5cGVDb21wb25lbnRzW3R5cGVdID0gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlQ29tcG9uZW50KHR5cGUsIGFsbG93TnVsbCA9IGZhbHNlKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHR5cGVDb21wb25lbnRzW3R5cGVdIHx8IG51bGxcbiAgaWYgKCFjb21wb25lbnQgJiYgIWFsbG93TnVsbCAmJiAhdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSkge1xuICAgIC8vIFJlcG9ydCBlYWNoIG1pc3NpbmcgdHlwZSBvbmx5IG9uY2UsIHRvIGF2b2lkIGZsb29kaW5nIHRoZSBjb25zb2xlOlxuICAgIHVua25vd25UeXBlUmVwb3J0ZWRbdHlwZV0gPSB0cnVlXG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIERpdG8gY29tcG9uZW50IHR5cGU6ICcke3R5cGV9J2ApXG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaFNjaGVtYShzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IHNjaGVtYXMgPSBbXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhzY2hlbWE/LnRhYnMgfHwge30pLFxuICAgIHNjaGVtYVxuICBdXG4gIGZvciAoY29uc3Qgc2NoZW1hIG9mIHNjaGVtYXMpIHtcbiAgICBpZiAoc2NoZW1hKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEpXG4gICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yRWFjaFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiBmb3JFYWNoU2NoZW1hKHNjaGVtYSwgc2NoZW1hID0+IHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgY29uc3QgcmVzID0gY2FsbGJhY2soY29tcG9uZW50LCBuYW1lKVxuICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyBjb21wb25lbnQgOiB1bmRlZmluZWRcbiAgKSB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+IGNhbGxiYWNrKGNvbXBvbmVudCwgbmFtZSkgPyB0cnVlIDogdW5kZWZpbmVkXG4gICkgPT09IHRydWVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5U2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZvckVhY2hTY2hlbWFDb21wb25lbnQoXG4gICAgc2NoZW1hLFxuICAgIChjb21wb25lbnQsIG5hbWUpID0+ICFjYWxsYmFjayhjb21wb25lbnQsIG5hbWUpID8gZmFsc2UgOiB1bmRlZmluZWRcbiAgKSAhPT0gZmFsc2Vcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWEoc2NoZW1hLCB1bndyYXBNb2R1bGUgPSBmYWxzZSkge1xuICBpZiAoaXNGdW5jdGlvbihzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gc2NoZW1hKClcbiAgfVxuICBpZiAoaXNQcm9taXNlKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBhd2FpdCBzY2hlbWFcbiAgfVxuICBpZiAoaXNNb2R1bGUoc2NoZW1hKSkge1xuICAgIC8vIENvcHkgdG8gY29udmVydCBmcm9tIG1vZHVsZSB0byBvYmplY3Q6XG4gICAgc2NoZW1hID0geyAuLi5zY2hlbWEgfVxuICAgIC8vIFVud3JhcCBkZWZhdWx0IG9yIG5hbWVkIHNjaGVtYVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgKHVud3JhcE1vZHVsZSB8fCBzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpXG4gICAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGtleXNbMF1cbiAgICAgICAgc2NoZW1hID0gc2NoZW1hW25hbWVdXG4gICAgICAgIGlmIChuYW1lICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hcyhcbiAgdW5yZXNvbHZlZFNjaGVtYXMsXG4gIHJlc29sdmVJdGVtID0gcmVzb2x2ZVNjaGVtYVxuKSB7XG4gIGxldCBzY2hlbWFzID0gaXNGdW5jdGlvbih1bnJlc29sdmVkU2NoZW1hcylcbiAgICA/IHVucmVzb2x2ZWRTY2hlbWFzKClcbiAgICA6IHVucmVzb2x2ZWRTY2hlbWFzXG4gIHNjaGVtYXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hKHNjaGVtYXMsIGZhbHNlKVxuICBpZiAoaXNBcnJheShzY2hlbWFzKSkge1xuICAgIC8vIFRyYW5zbGF0ZSBhbiBhcnJheSBvZiBkeW5hbWljIGltcG9ydCwgZWFjaCBpbXBvcnRpbmcgb25lIG5hbWVkIHNjaGVtYVxuICAgIC8vIG1vZHVsZSB0byBhbiBvYmplY3Qgd2l0aCBuYW1lZCBlbnRyaWVzLlxuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoYXdhaXQgUHJvbWlzZS5hbGwoc2NoZW1hcy5tYXAoXG4gICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZUl0ZW0oaXRlbSwgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIFtzY2hlbWEubmFtZSwgc2NoZW1hXVxuICAgICAgfVxuICAgICkpKVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNjaGVtYXMpKSB7XG4gICAgc2NoZW1hcyA9IE9iamVjdC5mcm9tRW50cmllcyhhd2FpdCBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhzY2hlbWFzKS5tYXAoXG4gICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZUl0ZW0oaXRlbSwgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIFtrZXksIHNjaGVtYV1cbiAgICAgIH1cbiAgICApKSlcbiAgfVxuICByZXR1cm4gc2NoZW1hc1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVBhbmVscyhzY2hlbWEpIHtcbiAgY29uc3QgeyBwYW5lbHMgfSA9IHNjaGVtYVxuICBpZiAoc2NoZW1hLnBhbmVscykge1xuICAgIHNjaGVtYS5wYW5lbHMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhwYW5lbHMpXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcykge1xuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgYXdhaXQgcmVzb2x2ZVBhbmVscyhzY2hlbWEpXG4gIGlmIChpc1NpbmdsZUNvbXBvbmVudFZpZXcoc2NoZW1hKSkge1xuICAgIGF3YWl0IHByb2Nlc3NDb21wb25lbnQoYXBpLCBzY2hlbWEsIG5hbWUsIGNoaWxkcmVuLCAwKVxuICB9IGVsc2Uge1xuICAgIC8vIEEgbXVsdGktY29tcG9uZW50IHZpZXcsIHN0YXJ0IGF0IGxldmVsIDFcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4sIDEpXG4gIH1cbiAgcm91dGVzLnB1c2goe1xuICAgIHBhdGg6IGAvJHtzY2hlbWEucGF0aH1gLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbXBvbmVudCxcbiAgICBtZXRhOiB7XG4gICAgICBhcGksXG4gICAgICBzY2hlbWFcbiAgICB9XG4gIH0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzQ29tcG9uZW50KGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gIHNjaGVtYS5sZXZlbCA9IGxldmVsXG4gIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICByZXR1cm4gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8ucHJvY2Vzc1NjaGVtYT8uKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSkge1xuICAvLyBVc2VkIGZvciB2aWV3IGFuZCBzb3VyY2Ugc2NoZW1hcywgc2VlIFNvdXJjZU1peGluXG4gIHNjaGVtYS5uYW1lID0gbmFtZVxuICBzY2hlbWEucGF0aCA9IHNjaGVtYS5wYXRoIHx8IGFwaS5ub3JtYWxpemVQYXRoKG5hbWUpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbCkge1xuICBjb25zdCBwcm9taXNlcyA9IFtdXG4gIGZvckVhY2hTY2hlbWFDb21wb25lbnQoc2NoZW1hLCAoY29tcG9uZW50LCBuYW1lKSA9PiB7XG4gICAgcHJvbWlzZXMucHVzaChwcm9jZXNzQ29tcG9uZW50KGFwaSwgY29tcG9uZW50LCBuYW1lLCByb3V0ZXMsIGxldmVsKSlcbiAgfSlcbiAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRm9ybXMoYXBpLCBzY2hlbWEsIGxldmVsKSB7XG4gIC8vIEZpcnN0IHJlc29sdmUgdGhlIGZvcm1zIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBiYWNrIG9uIHRoZSBzY2hlbWEuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzIH0gPSBzY2hlbWFcbiAgaWYgKGZvcm1zKSB7XG4gICAgZm9ybXMgPSBzY2hlbWEuZm9ybXMgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyhmb3JtcywgcmVzb2x2ZUZvcm0pXG4gIH0gZWxzZSBpZiAoZm9ybSkge1xuICAgIGZvcm0gPSBzY2hlbWEuZm9ybSA9IGF3YWl0IHJlc29sdmVGb3JtKGZvcm0pXG4gIH0gZWxzZSBpZiAoY29tcG9uZW50cykge1xuICAgIC8vIE5PVEU6IFByb2Nlc3NpbmcgZm9ybXMgaW4gY29tcHV0ZWQgY29tcG9uZW50cyBpcyBub3Qgc3VwcG9ydGVkLCBzaW5jZSBpdFxuICAgIC8vIG9ubHkgY2FuIGJlIGNvbXB1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggYWN0dWFsIGRhdGEuXG4gICAgaWYgKGlzT2JqZWN0KGNvbXBvbmVudHMpKSB7XG4gICAgICBmb3JtID0geyBjb21wb25lbnRzIH1cbiAgICB9XG4gIH1cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9IC8vIE9ubHkgdXNlZCBmb3IgcHJvY2VzcyBsb29wIGJlbG93LlxuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIGZvciAoY29uc3QgZm9ybSBvZiBPYmplY3QudmFsdWVzKGZvcm1zKSkge1xuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgZm9ybSwgY2hpbGRyZW4sIGxldmVsICsgMSlcbiAgfVxuICByZXR1cm4gY2hpbGRyZW5cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVGb3JtKGZvcm0pIHtcbiAgZm9ybSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoZm9ybSwgdHJ1ZSlcbiAgaWYgKGZvcm0pIHtcbiAgICBhd2FpdCByZXNvbHZlUGFuZWxzKGZvcm0pXG4gIH1cbiAgcmV0dXJuIGZvcm1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgLy8gSWYgdGhlIHNjaGVtYSBoYXMgYSB0eXBlLCBpdCBpcyBhIHNpbmdsZS1jb21wb25lbnQgdmlldy5cbiAgcmV0dXJuICEhc2NoZW1hLnR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgYm90aCBzaW5nbGUgZm9ybSBhbmQgbXVsdGlwbGUgZm9ybXMgbm90YXRpb24sIGFzIHdlbGwgYXMgaW5saW5lZFxuICAvLyBjb21wb25lbnRzLlxuICByZXR1cm4gaXNPYmplY3Qoc2NoZW1hKSAmJiAhIShcbiAgICBzY2hlbWEuZm9ybSB8fFxuICAgIHNjaGVtYS5mb3JtcyB8fFxuICAgIHNjaGVtYS5jb21wb25lbnRzXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc011bHRpcGxlRm9ybVNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB7IHZpZXcgfSA9IHNjaGVtYVxuICBjb25zdCB2aWV3U2NoZW1hID0gdmlldyAmJiBjb250ZXh0LnZpZXdzW3ZpZXddXG4gIHJldHVybiB2aWV3U2NoZW1hXG4gICAgPyBoYXNGb3JtU2NoZW1hKHZpZXdTY2hlbWEpXG4gICAgICA/IHZpZXdTY2hlbWFcbiAgICAgIC8vIE5PVEU6IFZpZXdzIGNhbiBoYXZlIHRhYnMsIGluIHdoaWNoIGNhc2UgdGhlIHZpZXcgY29tcG9uZW50IGlzIG5lc3RlZFxuICAgICAgLy8gaW4gb25lIG9mIHRoZSB0YWJzLCBnbyBmaW5kIGl0LlxuICAgICAgOiBmb3JFYWNoU2NoZW1hKHZpZXdTY2hlbWEsIHNjaGVtYSA9PiB7XG4gICAgICAgIGNvbnN0IHZpZXdDb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50cz8uW3ZpZXddXG4gICAgICAgIGlmIChoYXNGb3JtU2NoZW1hKHZpZXdDb21wb25lbnQpKSB7XG4gICAgICAgICAgcmV0dXJuIHZpZXdDb21wb25lbnRcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGNvbnRleHQpIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICByZXR1cm4gdmlld1xuICAgID8gdmlldy5sZXZlbCA9PT0gMFxuICAgICAgPyBgLyR7dmlldy5wYXRofWAgLy8gQSBzaW5nbGUtY29tcG9uZW50IHZpZXdcbiAgICAgIDogYC8ke3ZpZXcucGF0aH0vJHt2aWV3LnBhdGh9YCAvLyBBIG11bHRpLWNvbXBvbmVudCB2aWV3XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQsIG1vZGlmeUZvcm0pIHtcbiAgY29uc3QgdmlldyA9IGdldFZpZXdTY2hlbWEoc2NoZW1hLCBjb250ZXh0KVxuICBpZiAodmlldykge1xuICAgIHNjaGVtYSA9IHZpZXdcbiAgfSBlbHNlIGlmIChzY2hlbWEudmlldykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB2aWV3OiAnJHtzY2hlbWEudmlld30nYClcbiAgfVxuXG4gIGxldCB7IGZvcm0sIGZvcm1zLCBjb21wb25lbnRzLCBjb21wYWN0IH0gPSBzY2hlbWFcbiAgaWYgKCFmb3JtICYmICFmb3Jtcykge1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAvLyBDb252ZXJ0IGlubGluZWQgY29tcG9uZW50cyB0byBmb3Jtcywgc3VwcG9ydGluZyBgY29tcGFjdGAgc2V0dGluZy5cbiAgICAgIGZvcm0gPSB7IGNvbXBvbmVudHMsIGNvbXBhY3QgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBgZm9ybXNgLCBgZm9ybWAgb3IgYGNvbXBvbmVudHNgLCByZXR1cm4gYW5kIGVtcHR5IGBmb3Jtc2Agb2JqZWN0LlxuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZvcm1zKS5tYXAoKFt0eXBlLCBmb3JtXSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBgc2NoZW1hLmNvbXBvbmVudHNgIGNhbGxiYWNrcyB0byBjcmVhdGUgY29tcG9uZW50cyBvbiB0aGUgZmx5LlxuICAgICAgaWYgKGlzRnVuY3Rpb24oZm9ybS5jb21wb25lbnRzKSkge1xuICAgICAgICBmb3JtID0ge1xuICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgY29tcG9uZW50czogZm9ybS5jb21wb25lbnRzKGNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbdHlwZSwgbW9kaWZ5Rm9ybT8uKGZvcm0pID8/IGZvcm1dXG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pIHtcbiAgcmV0dXJuIGZvcm1zW2l0ZW0/LnR5cGVdIHx8IGZvcm1zLmRlZmF1bHQgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KSB7XG4gIHJldHVybiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyhnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQpLCBpdGVtKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWwoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEubGFiZWwgIT09IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhY3Qoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5jb21wYWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEuaW5saW5lZCB8fCBzY2hlbWEuY29tcG9uZW50cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoXG4gICAgc2NoZW1hLm5lc3RlZCB8fFxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmRlZmF1bHROZXN0ZWQgPT09IHRydWVcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkT21pdFBhZGRpbmcoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lm9taXRQYWRkaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gIC8vIFN1cHBvcnQgZGVmYXVsdCB2YWx1ZXMgYm90aCBvbiBzY2hlbWEgYW5kIG9uIGNvbXBvbmVudCBsZXZlbC5cbiAgLy8gTk9URTogQXQgdGhlIHRpbWUgb2YgY3JlYXRpb24sIGNvbXBvbmVudHMgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQsIChlLmcuIGlmXG4gIC8vIGVudHJpZXMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBuZXN0ZWQgZm9ybXMsIHRoZSBwYXJlbnQgZm9ybSBpc24ndCBtb3VudGVkKSBzb1xuICAvLyB3ZSBjYW4ndCB1c2UgYGRhdGFQYXRoYCB0byBnZXQgdG8gY29tcG9uZW50cywgYW5kIHRoZSBgZGVmYXVsdFZhbHVlYCBmcm9tXG4gIC8vIHRoZXJlLiBUaGF0J3Mgd2h5IGBkZWZhdWx0VmFsdWVgIGlzIGRlZmluZWQgc3RhdGljYWxseSBpbiB0aGUgY29tcG9uZW50czpcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gc2NoZW1hLmRlZmF1bHRcbiAgY29uc3QgdmFsdWUgPSBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgID8gZGVmYXVsdFZhbHVlXG4gICAgOiBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0VmFsdWVcbiAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUpXG4gICAgPyB2YWx1ZShzY2hlbWEpXG4gICAgOiBjbG9uZSh2YWx1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZU1pc3NpbmdWYWx1ZShzY2hlbWEpIHtcbiAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG4gIHJldHVybiAhIShcbiAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgdHlwZU9wdGlvbnM/Lmlnbm9yZU1pc3NpbmdWYWx1ZT8uKHNjaGVtYSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWxzKHNjaGVtYSkge1xuICBjb25zdCBjaGVja0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+XG4gICAgT2JqZWN0LnZhbHVlcyhjb21wb25lbnRzIHx8IHt9KS5zb21lKGhhc0xhYmVsKVxuXG4gIHJldHVybiAoXG4gICAgY2hlY2tDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKSB8fFxuICAgIE9iamVjdC52YWx1ZXMoc2NoZW1hLnRhYnMgfHwge30pLnNvbWUoY2hlY2tDb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0cyhzY2hlbWEsIGRhdGEgPSB7fSwgY29tcG9uZW50KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IGNvbXBvbmVudCwgcm9vdERhdGE6IGRhdGEgfVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lKSA9PiB7XG4gICAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICAgIGRhdGFbbmFtZV0gPSBnZXREZWZhdWx0VmFsdWUoc2NoZW1hKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNldHMgdXAgYSBkYXRhIG9iamVjdCB0aGF0IGhhcyBrZXlzIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGFsbFxuICAvLyBmb3JtIGZpZWxkcywgc28gdGhleSBjYW4gYmUgY29ycmVjdGx5IHdhdGNoZWQgZm9yIGNoYW5nZXMuXG4gIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsIGRhdGEsIG51bGwsIG51bGwsIHByb2Nlc3NCZWZvcmUsIG51bGwsIG9wdGlvbnNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVZhbHVlKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHtcbiAgY29tcG9uZW50ID0gbnVsbCxcbiAgcm9vdERhdGEgPSBjb21wb25lbnQ/LnJvb3REYXRhXG59ID0ge30pIHtcbiAgY29uc3QgeyBjb21wdXRlIH0gPSBzY2hlbWFcbiAgaWYgKGNvbXB1dGUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGUoRGl0b0NvbnRleHQuZ2V0KGNvbXBvbmVudCwge1xuICAgICAgLy8gT3ZlcnJpZGUgdmFsdWUgdG8gcHJldmVudCBlbmRsZXNzIHJlY3Vyc2lvbiB0aHJvdWdoIGNhbGxpbmcgdGhlXG4gICAgICAvLyBnZXR0ZXIgZm9yIGB0aGlzLnZhbHVlYCBpbiBgRGl0b0NvbnRleHRgOlxuICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICBuYW1lLFxuICAgICAgZGF0YSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgcm9vdERhdGFcbiAgICB9KSlcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVXNlIGAkc2V0KClgIGRpcmVjdGx5IGluc3RlYWQgb2YgYHRoaXMudmFsdWUgPSDigKZgIHRvIHVwZGF0ZSB0aGVcbiAgICAgIC8vIHZhbHVlIHdpdGhvdXQgY2FsbGluZyBwYXJzZSgpOlxuICAgICAgVnVlLnNldChkYXRhLCBuYW1lLCB2YWx1ZSlcbiAgICB9XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIHN0aWxsIG1pc3NpbmcgYWZ0ZXIgY29tcHV0ZSwgc2V0IHRoZSBkZWZhdWx0IGZvciBpdDpcbiAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICBWdWUuc2V0KGRhdGEsIG5hbWUsIGdldERlZmF1bHRWYWx1ZShzY2hlbWEpKVxuICB9XG4gIC8vIE5vdyBhY2Nlc3MgdGhlIHZhbHVlLiBUaGlzIGlzIGltcG9ydGFudCBmb3IgcmVhY3Rpdml0eSBhbmQgbmVlZHMgdG9cbiAgLy8gaGFwcGVuIGFmdGVyIGFsbCBwcmlvciBtYW5pcHVsYXRpb24gdGhyb3VnaCBgJHNldCgpYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHNjaGVtYU9ubHksIC8vIHdoZXRoZXIgdG8gb25seSBpbmNsdWRlIGRhdGEgY292ZXJlZCBieSB0aGUgc2NoZW1hLCBvciBhbGwgZGF0YVxuICB0YXJnZXRcbn0gPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHNjaGVtYU9ubHksIHRhcmdldCwgcm9vdERhdGE6IGRhdGEgfVxuICBjb25zdCBwcm9jZXNzZWREYXRhID0gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgZGF0YSwgb3B0aW9ucylcbiAgY29uc3QgZ3JhcGggPSBuZXcgU2NoZW1hR3JhcGgoKVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBvcHRpb25zKVxuICAgIC8vIFRoZSBzY2hlbWEgZXhwZWN0cyB0aGUgYHdyYXBQcmltaXRpdmVzYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgcHJlc2VudCBvblxuICAgIC8vIHRoZSBkYXRhIHRoYXQgaXQgaXMgYXBwbGllZCBvbiwgc28gd2FycCBiZWZvcmUgYW5kIHVud3JhcCBhZnRlci5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIG9yZGVyS2V5LCBpZEtleSA9ICdpZCcgfSA9IHNjaGVtYVxuICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGVudHJ5ID0+ICh7XG4gICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogZW50cnlcbiAgICAgICAgfSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbHdheXMgc2hhbGxvdy1jbG9uZSBhcnJheSB2YWx1ZXM6XG4gICAgICAgIHZhbHVlID0gWy4uLnZhbHVlXVxuICAgICAgfVxuICAgICAgaWYgKG9yZGVyS2V5ICYmIHRhcmdldCA9PT0gJ2NsaXBib2FyZCcpIHtcbiAgICAgICAgLy8gU29ydCB0aGUgZGF0YSBiYWNrIGludG8gdGhlIG5hdHVyYWwgc2VxdWVuY2UgYXMgZGVmaW5lZCBieSB0aGVpciBpZHMsXG4gICAgICAgIC8vIHNvIGNvcHktcGFzdGluZyBiZXR3ZWVuIHNlcnZlcnMgKGUuZy4gbmVzdGVkIGZvbnQtY3V0cyBvbiBMaW5ldG8pXG4gICAgICAgIC8vIG5hdHVyYWxseSBnZXRzIG1hcHBlZCB0byB0aGUgc2FtZSBlbnRyaWVzIGluIHRoZSBncmFwaC5cbiAgICAgICAgdmFsdWUuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkMSA9IGE/LltpZEtleV1cbiAgICAgICAgICBjb25zdCBpZDIgPSBiPy5baWRLZXldXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlkMSA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQxKSA/IDFcbiAgICAgICAgICAgIDogaWQyID09IG51bGwgfHwgaXNUZW1wb3JhcnlJZChpZDIpID8gLTFcbiAgICAgICAgICAgIDogaWQxIC0gaWQyXG4gICAgICAgICAgKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgZXhjbHVkZSwgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG5cbiAgICAvLyBOT1RFOiBXZSBkb24ndCBjYWNoZSB0aGlzIGNvbnRleHQsIHNpbmNlIGB2YWx1ZWAgaXMgY2hhbmdpbmcuXG4gICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+IERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgIHZhbHVlLFxuICAgICAgbmFtZSxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhLFxuICAgICAgLy8gUGFzcyB0aGUgYWxyZWFkeSBwcm9jZXNzZWQgZGF0YSB0byBgcHJvY2VzcygpYCwgc28gaXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICAvLyB0aHJvdWdoIGBwcm9jZXNzZWRJdGVtYCBmcm9tIHRoZXJlLlxuICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgIH0pXG5cbiAgICAvLyBGaXJzdCB1bndyYXAgdGhlIHdyYXBwZWQgcHJpbWl0aXZlcyBhZ2FpbiwgdG8gYnJpbmcgdGhlIGRhdGEgYmFjayBpbnRvXG4gICAgLy8gaXRzIG5hdGl2ZSBmb3JtLiBTZSBgcHJvY2Vzc0JlZm9yZSgpYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSB1c2VyJ3MgYHByb2Nlc3MoKWAgY2FsbGJhY2sgZmlyc3QsIGlmIG9uZSBpcyBwcm92aWRlZCwgc28gdGhhdFxuICAgIC8vIGl0IGNhbiBtb2RpZnkgZGF0YSBpbiBgcHJvY2Vzc2VkRGF0YWAgZXZlbiBpZiBpdCBwcm92aWRlcyBgZXhjbHVkZTogdHJ1ZWBcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgdmFsdWUgPSBwcm9jZXNzKGdldENvbnRleHQoKSlcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICB0eXBlT3B0aW9ucz8uZXhjbHVkZVZhbHVlIHx8XG4gICAgICAvLyBTdXBwb3J0IGZ1bmN0aW9ucyBuZXh0IHRvIGJvb2xlYW5zIGZvciBgc2NoZW1hLmV4Y2x1ZGVgOlxuICAgICAgZXhjbHVkZSA9PT0gdHJ1ZSB8fFxuICAgICAgaXNGdW5jdGlvbihleGNsdWRlKSAmJiBleGNsdWRlKGdldENvbnRleHQoKSlcbiAgICApIHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzZWREYXRhW25hbWVdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVhY2ggY29tcG9uZW50IHR5cGUgY2FuIHByb3ZpZGUgaXRzIG93biBzdGF0aWMgYHByb2Nlc3NWYWx1ZSgpYCBtZXRob2RcbiAgICAgIC8vIHRvIGNvbnZlcnQgdGhlIGRhdGEgZm9yIHN0b3JhZ2UuXG4gICAgICBjb25zdCBwcm9jZXNzVmFsdWUgPSB0eXBlT3B0aW9ucz8ucHJvY2Vzc1ZhbHVlXG4gICAgICBpZiAocHJvY2Vzc1ZhbHVlKSB7XG4gICAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaClcbiAgICAgIH1cbiAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIGRhdGFQYXRoLFxuICAgIHByb2Nlc3NlZERhdGEsXG4gICAgcHJvY2Vzc0JlZm9yZSxcbiAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgb3B0aW9uc1xuICApXG5cbiAgcmV0dXJuIGdyYXBoLnByb2Nlc3Moc291cmNlU2NoZW1hLCBwcm9jZXNzZWREYXRhLCBvcHRpb25zKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURhdGEoXG4gIHNjaGVtYSxcbiAgZGF0YSxcbiAgZGF0YVBhdGgsXG4gIHByb2Nlc3NlZERhdGEsXG4gIHByb2Nlc3NCZWZvcmUsXG4gIHByb2Nlc3NBZnRlcixcbiAgb3B0aW9uc1xuKSB7XG4gIGNvbnN0IHByb2Nlc3NDb21wb25lbnRzID0gY29tcG9uZW50cyA9PiB7XG4gICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoZGF0YVBhdGgsIHRva2VuKSA9PiBkYXRhUGF0aCAhPSBudWxsXG4gICAgICA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCB0b2tlbilcbiAgICAgIDogbnVsbFxuXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKCFpc05lc3RlZChjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIHVubmVzdGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhLFxuICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RGF0YVBhdGggPSBnZXREYXRhUGF0aChkYXRhUGF0aCwgbmFtZSlcblxuICAgICAgICAgIGNvbnN0IHByb2Nlc3NJdGVtID0gKGl0ZW0sIGluZGV4ID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVBhdGggPSBpbmRleCAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgOiBjb21wb25lbnREYXRhUGF0aFxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IERpdG9Db250ZXh0LmdldChvcHRpb25zLmNvbXBvbmVudCwge1xuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGNvbnN0IGdldEZvcm1zID0gKFxuICAgICAgICAgICAgICBnZXRUeXBlT3B0aW9ucyhjb21wb25lbnRTY2hlbWEpPy5nZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcgfHxcbiAgICAgICAgICAgICAgIGdldEZvcm1TY2hlbWFzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1zKGNvbXBvbmVudFNjaGVtYSwgY29udGV4dClcbiAgICAgICAgICAgIGNvbnN0IGZvcm0gPSBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSlcbiAgICAgICAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NlZEl0ZW0gPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyBjbG9uZUl0ZW0oY29tcG9uZW50U2NoZW1hLCBpdGVtLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICAgICAgZm9ybSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NlZEl0ZW0sXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJdGVtcyB3aXRob3V0IGZvcm1zIHN0aWxsIGdldCBmdWxseSAoYnV0IHNoYWxsb3dseSkgY2xvbmVkLlxuICAgICAgICAgICAgICAvLyBUT0RPOiBGaW5kIG91dCBvZiB0aGlzIGlzIGFjdHVhbGx5IG5lZWRlZCAvIHVzZWQgYXQgYWxsP1xuICAgICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwcm9jZXNzQmVmb3JlPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsIGRhdGEsIG5hbWUsIGNvbXBvbmVudERhdGFQYXRoLCBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCB2YWx1ZSA9IHByb2Nlc3NlZERhdGEgPyBwcm9jZXNzZWREYXRhW25hbWVdIDogZGF0YVtuYW1lXVxuICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIGhhc0Zvcm1TY2hlbWEoY29tcG9uZW50U2NoZW1hKSkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIG5lc3RlZCBmb3JtIGl0ZW1zLlxuICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIC8vIE9wdGltaXphdGlvbjogTm8gbmVlZCB0byBjb2xsZWN0IHZhbHVlcyBpZiB3ZSdyZSBub3QgY2xvbmluZyFcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICAgICAgOiB2YWx1ZS5mb3JFYWNoKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzSXRlbSh2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9jZXNzZWREYXRhKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzQWZ0ZXI/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSwgZGF0YSwgbmFtZSwgY29tcG9uZW50RGF0YVBhdGgsIHByb2Nlc3NlZERhdGFcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm9jZXNzQ29tcG9uZW50cyhzY2hlbWEuY29tcG9uZW50cylcbiAgaWYgKHNjaGVtYS50YWJzKSB7XG4gICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykpIHtcbiAgICAgIHByb2Nlc3NDb21wb25lbnRzKHRhYi5jb21wb25lbnRzKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldEFsbFBhbmVsU2NoZW1hcyhzY2hlbWEsIGRhdGFQYXRoKSkge1xuICAgIHByb2Nlc3NDb21wb25lbnRzKHBhbmVsLnNjaGVtYS5jb21wb25lbnRzKVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZERhdGEgfHwgZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRTY2hlbWFzKGRlc2NyaXB0aW9ucywgZGVmYXVsdHMpIHtcbiAgY29uc3QgdG9PYmplY3QgPSAoYXJyYXksIHRvU2NoZW1hKSA9PiB7XG4gICAgcmV0dXJuIGFycmF5Lmxlbmd0aCA+IDBcbiAgICAgID8gYXJyYXkucmVkdWNlKChvYmplY3QsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHRvU2NoZW1hKHZhbHVlKVxuICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgb2JqZWN0W3NjaGVtYS5uYW1lXSA9IHNjaGVtYSAmJiBkZWZhdWx0c1xuICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgOiBzY2hlbWFcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0XG4gICAgICB9LCB7fSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIGlzQXJyYXkoZGVzY3JpcHRpb25zKVxuICAgID8gdG9PYmplY3QoZGVzY3JpcHRpb25zLCB2YWx1ZSA9PiAoXG4gICAgICBpc09iamVjdCh2YWx1ZSkgPyB2YWx1ZSA6IHtcbiAgICAgICAgbmFtZTogY2FtZWxpemUodmFsdWUsIGZhbHNlKVxuICAgICAgfVxuICAgICkpXG4gICAgOiBpc09iamVjdChkZXNjcmlwdGlvbnMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpLFxuICAgICAgICAoW25hbWUsIHZhbHVlXSkgPT5cbiAgICAgICAgICBpc09iamVjdCh2YWx1ZSkgPyB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgOiBpc1N0cmluZyh2YWx1ZSkgPyB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgbGFiZWw6IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpPy5vcHRpb25zID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpPy5nZXRTb3VyY2VUeXBlPy4oXG4gICAgZ2V0VHlwZShzY2hlbWFPclR5cGUpXG4gICkgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWEoc2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gIHJldHVybiBzY2hlbWFcbiAgICA/IHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAvLyBUaGlzIGlzIHVzZWQgZS5nLiBmb3IgJGZpbHRlcnMgcGFuZWxzLlxuICAgICAgZGF0YVBhdGg6IHNjaGVtYS5uYW1lXG4gICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGRhdGFQYXRoLFxuICAgICAgdGFiQ29tcG9uZW50XG4gICAgfVxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYXMsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQsIHBhbmVscyA9IFtdKSB7XG4gIGlmIChzY2hlbWFzKSB7XG4gICAgZm9yIChjb25zdCBba2V5LCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsU2NoZW1hKFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBrZXkpLFxuICAgICAgICB0YWJDb21wb25lbnRcbiAgICAgIClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbHMucHVzaChwYW5lbClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhbmVsc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsUGFuZWxTY2hlbWFzKFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoLFxuICBzY2hlbWFDb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWwgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhUGF0aCxcbiAgICBzY2hlbWFDb21wb25lbnRcbiAgKVxuICBjb25zdCBwYW5lbHMgPSBwYW5lbCA/IFtnZXRQYW5lbFNjaGVtYShwYW5lbCwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCldIDogW11cbiAgLy8gQWxsb3cgZWFjaCBjb21wb25lbnQgdG8gcHJvdmlkZSBpdHMgb3duIHNldCBvZiBwYW5lbHMsIGluXG4gIC8vIGFkZGl0aW9uIHRvIHRoZSBkZWZhdWx0IG9uZSAoZS5nLiAkZmlsdGVyKTpcbiAgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYS5wYW5lbHMsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQsIHBhbmVscylcbiAgcmV0dXJuIHBhbmVsc1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdvYmplY3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0xpc3RTb3VyY2Uoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRTb3VyY2VUeXBlKHNjaGVtYU9yVHlwZSkgPT09ICdsaXN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICBjb25zdCBpZCA9IGl0ZW1bc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gIHJldHVybiBpZCAhPSBudWxsID8gU3RyaW5nKGlkKSA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgLy8gVHJ5IHRvIHVzZSB0aGUgaXRlbSBpZCBhcyB0aGUgdWlkLCBmYWxsaW5nIGJhY2sgb24gYXV0by1nZW5lcmF0ZWQgaWRzLCBidXRcbiAgLy8gZWl0aGVyIHdheSwgcGFzcyB0aHJvdWdoIGBnZXRVaWQoKWAgc28gdGhhdCB0aGUgaWRzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlXG4gIC8vIGl0ZW0gdGhyb3VnaCBhIHdlYWsgbWFwLCBhcyB0aGUgaWRzIGNhbiBiZSBmaWx0ZXJlZCBvdXQgaW4gYHByb2Nlc3NEYXRhKClgXG4gIC8vIHdoaWxlIHRoZSBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSB1aWRzIGFzIGtleSBhcmUgc3RpbGwgdmlzaWJsZS5cbiAgcmV0dXJuIGdldFVpZChpdGVtLCBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSlcbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBWYWxpZGF0aW9uTWl4aW4gZnJvbSAnLi9WYWxpZGF0aW9uTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgY29tcHV0ZVZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbSwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1ZhbGlkYXRpb25NaXhpbl0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIC8vIE5PVEU6IFdoaWxlIGBkYXRhUGF0aGAgcG9pbnRzIHRvIHRoZSBhY3R1YWwgYHZhbHVlYCwgYGRhdGFgIHJlcHJlc2VudHNcbiAgICAvLyB0aGUgYGl0ZW1gIGluIHdoaWNoIHRoZSBgdmFsdWVgIGlzIGNvbnRhaW5lZCwgdW5kZXIgdGhlIGtleSBgbmFtZWAuXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZWRWYWx1ZTogbnVsbCxcbiAgICAgIGZvY3VzZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudHlwZVxuICAgIH0sXG5cbiAgICBjb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlVHlwZUNvbXBvbmVudCh0aGlzLnNjaGVtYS5jb21wb25lbnQpXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB2YWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShcbiAgICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgICAgdGhpcy5uYW1lLFxuICAgICAgICAgIHRoaXMuZGF0YVBhdGgsXG4gICAgICAgICAgeyBjb21wb25lbnQ6IHRoaXMgfVxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHsgZm9ybWF0IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgICAvLyBgc2NoZW1hLmZvcm1hdGAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgcmV0dXJuIGZvcm1hdFxuICAgICAgICAgID8gZm9ybWF0LmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgdmFsdWUgfSkpXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgcGFyc2UgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEucGFyc2VgIGlzIG9ubHkgZXZlciBjYWxsZWQgaW4gdGhlIGxpZmUtY3ljbGVcbiAgICAgICAgLy8gb2YgdGhlIGNvbXBvbmVudCBhbmQgdGh1cyBpdCdzIG9rIHRvIGJpbmQgaXQgdG8gYHRoaXNgXG4gICAgICAgIHRoaXMucGFyc2VkVmFsdWUgPSBwYXJzZVxuICAgICAgICAgID8gcGFyc2UuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIHRoaXMubmFtZSwgdGhpcy5wYXJzZWRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIC8vIFdlIGNhbiBvbmx5IGdldCB0aGUgcHJvY2Vzc2VkIGl0ZW1zIHRocm91Z2ggdGhlIHNjaGVtYUNvbXBvbmVudCwgYnV0XG4gICAgICAvLyB0aGF0J3Mgbm90IG5lY2Vzc2FyaWx5IHRoZSBpdGVtIHJlcHJlc2VudGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAgICAgLy8gU29sdXRpb246IEZpbmQgdGhlIHJlbGF0aXZlIHBhdGggYW5kIHRoZSBwcm9jZXNzZWQgc3ViLWl0ZW0gZnJvbSB0aGVyZTpcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gZ2V0SXRlbShcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50LnByb2Nlc3NlZEl0ZW0sXG4gICAgICAgIC8vIEdldCB0aGUgZGF0YVBhdGggcmVsYXRpdmUgdG8gdGhlIHNjaGVtYUNvbXBvbmVudCdzIGRhdGE6XG4gICAgICAgIHRoaXMuZGF0YVBhdGguc2xpY2Uoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCksXG4gICAgICAgIHRoaXMubmVzdGVkXG4gICAgICApXG4gICAgfSxcblxuICAgIGxhYmVsOiBnZXRTY2hlbWFBY2Nlc3NvcignbGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBCb29sZWFuXSxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcobGFiZWwpXG4gICAgICAgICAgPyBsYWJlbFxuICAgICAgICAgIDogbGFiZWwgIT09IGZhbHNlICYmIHRoaXMuJG9wdGlvbnMuZ2VuZXJhdGVMYWJlbFxuICAgICAgICAgICAgPyB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXVxuICAgIH0pLFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZ1xuICAgIGV4Y2x1ZGU6IGdldFNjaGVtYUFjY2Vzc29yKCdleGNsdWRlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICByZXF1aXJlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlcXVpcmVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIHRvIGEgc3ViLWNsYXNzIGNvbXBvbmVudCB1c2VkIGZvciBhbGwgaW5wdXQgY29tcG9uZW50cz9cbiAgICByZWFkb25seTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlYWRvbmx5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBhdXRvZm9jdXM6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvZm9jdXMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRvIGJlIHVzZWQgZm9yIHNlbGVjdHMgYW5kIGlucHV0cyBvbmx5P1xuICAgIGNsZWFyYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NsZWFyYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdwbGFjZWhvbGRlcicsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgYXV0b2NvbXBsZXRlOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2NvbXBsZXRlJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChuYXRpdmVGaWVsZCkge1xuICAgICAgICBhdHRyaWJ1dGVzLm5hbWUgPSB0aGlzLm5hbWVcbiAgICAgICAgaWYgKHRoaXMubGFiZWwpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnRpdGxlID0gdGhpcy5sYWJlbFxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZXMucmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5XG4gICAgICAgIGF0dHJpYnV0ZXMuYXV0b2ZvY3VzID0gdGhpcy5hdXRvZm9jdXNcbiAgICAgICAgaWYgKHRleHRGaWVsZCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyXG4gICAgICAgICAgYXR0cmlidXRlcy5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICBsaXN0ZW5lcnMoKSB7XG4gICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLmdldExpc3RlbmVycygpXG4gICAgICBjb25zdCB7IGV2ZW50cyA9IHt9IH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICAvLyBSZWdpc3RlciBjYWxsYmFja3MgZm9yIGFsbCBwcm92aWRlcyBub24tcmVjb2duaXplZCBldmVudHMsXG4gICAgICAgIC8vIGFzc3VtaW5nIHRoZXkgYXJlIG5hdGl2ZSBldmVudHMuXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgT2JqZWN0LmtleXMoZXZlbnRzKSkge1xuICAgICAgICAgIGxpc3RlbmVyc1tldmVudF0gfHw9ICgpID0+IHRoaXMuZW1pdEV2ZW50KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdGVuZXJzXG4gICAgfSxcblxuICAgIHZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7IC4uLnRoaXMuZ2V0VmFsaWRhdGlvbnMoKSB9XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBkZWZhdWx0IHJ1bGVzIGFuZCBhZGQgYW55IG5ldyBvbmVzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEucnVsZXMgfHwge30pKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHZhbGlkYXRpb25zW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uc1trZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBSZXNvdXJjZU1peGluLCB1c2VkIGJ5IGxpc3RzLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHNob3dDbGVhckJ1dHRvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLnZhbHVlICE9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFByZXZlbnQgdW5uZXN0ZWQgdHlwZSBjb21wb25lbnRzIGZyb20gb3ZlcnJpZGluZyBwYXJlbnQgZGF0YSBwYXRoc1xuICAgICAgaWYgKHRoaXMubmVzdGVkKSB7XG4gICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlckNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgICAgIC8vIEluc3RhbGwgLyByZW1vdmUgdGhlIGZpZWxkIGV2ZW50cyB0byB3YXRjaCBvZiBjaGFuZ2VzIGFuZCBoYW5kbGVcbiAgICAgICAgLy8gdmFsaWRhdGlvbiBmbGFncy4gYGV2ZW50c2AgaXMgcHJvdmlkZWQgYnkgYFZhbGlkYXRpb25NaXhpbi5ldmVudHMoKWBcbiAgICAgICAgdGhpc1thZGQgPyAnb24nIDogJ29mZiddKHRoaXMuZXZlbnRzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBnZXRMaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICBibHVyOiB0aGlzLm9uQmx1cixcbiAgICAgICAgaW5wdXQ6IHRoaXMub25JbnB1dCxcbiAgICAgICAgY2hhbmdlOiB0aGlzLm9uQ2hhbmdlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgY29uc3QgW2VsZW1lbnRdID0gYXNBcnJheSh0aGlzLiRyZWZzLmVsZW1lbnQpXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgZWxlbWVudC5mb2N1cygpXG4gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgZGlzYWJsZWQsIGBmb2N1cygpYCB3aWxsIGxpa2VseSBub3QgaGF2ZSB0aGVcbiAgICAgICAgICAvLyBkZXNpcmVkIGVmZmVjdC4gVXNlIGBzY3JvbGxJbnRvVmlldygpYCBpZiBhdmFpbGFibGU6XG4gICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIChlbGVtZW50LiRlbCB8fCBlbGVtZW50KS5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgLy8gQWxzbyBmb2N1cyB0aGlzIGNvbXBvbmVudCdzIHNjaGVtYSBhbmQgcGFuZWwgaW4gY2FzZSBpdCdzIGEgdGFiLlxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuZm9jdXMoKVxuICAgICAgdGhpcy50YWJDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgY2xlYXIoKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgfSxcblxuICAgIG9uRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlXG4gICAgICB0aGlzLmVtaXRFdmVudCgnZm9jdXMnKVxuICAgIH0sXG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2JsdXInKVxuICAgIH0sXG5cbiAgICBvbklucHV0KCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywge1xuICAgICAgICBjb250ZXh0OiB0aGlzLnBhcnNlZFZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHsgdmFsdWU6IHRoaXMucGFyc2VkVmFsdWUgfVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgLy8gUGFzcyBgc2NoZW1hQ29tcG9uZW50YCBhcyBwYXJlbnQsIHNvIGNoYW5nZSBldmVudHMgY2FuIHByb3BhZ2F0ZSB1cC5cbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWdWUgZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNQcm9taXNlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvTWl4aW4gZnJvbSAnLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG5jb25zdCBEaXRvQ29tcG9uZW50ID0gVnVlLmV4dGVuZCh7XG4gIC8vIE1ha2Ugc3VyZSB0aGF0IHJlZ2lzdGVyZWQgY29tcG9uZW50cyBhcmUgcHJlc2VudCBpbiBhbGwgRGl0b0NvbXBvbmVudC5cbiAgY29tcG9uZW50cyxcbiAgbWl4aW5zOiBbRGl0b01peGluXSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VHlwZUNvbXBvbmVudCxcblxuICAgIHJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBtaXhpbnMgPSBbXSkge1xuICAgICAgLy8gQSBoZWxwZXIgbWV0aG9kIHRvIGFsbG93IHRocmVlIHRoaW5nczpcbiAgICAgIC8vIC0gV2hlbiB1c2VkIGluIGEgY29tcHV0ZWQgcHJvcGVydHksIGl0IHJlbW92ZXMgdGhlIG5lZWQgdG8gaGF2ZSB0b1xuICAgICAgLy8gICBsb2FkIGNvbXBvbmVudHMgd2l0aCBhc3luYyBmdW5jdGlvbnMgYGNvbXBvbmVudDogKCkgPT4gaW1wb3J0KC4uLilgLlxuICAgICAgLy8gICBpbnN0ZWFkLCB0aGV5IGNhbiBiZSBkaXJlY3RseSBwcm92aWRlZDogYGNvbXBvbmVudDogaW1wb3J0KC4uLilgXG4gICAgICAvLyAtIFRoZSBwcm9wZXJ0aWVzIHBhc3NlZCB0byBzdWNoIGNvbXBvbmVudHMgZG9uJ3QgbmVlZCB0byBiZSBkZWZpbmVkLlxuICAgICAgLy8gICBJbnN0ZWFkLCB0aGUgcHJvdmlkZWQgbWl4aW5zIGFyZSBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZC5cbiAgICAgIC8vIC0gVGhlIGNvbXBvbmVudCBjYW4gdXNlIGFsbCBpbnRlcm5hbCBjb21wb25lbnRzIGtub3duIHRvIERpdG8uanMgQWRtaW4uXG4gICAgICByZXR1cm4gY29tcG9uZW50XG4gICAgICAgID8gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIC8vIEF0IGZpcnN0LCByZXNvbHZlIGNvbXBvbmVudCBpcyBpdCBpcyBsb2FkZWQgYXN5bmNocm9ub3VzbHkuXG4gICAgICAgICAgbGV0IGNvbXAgPSBpc0Z1bmN0aW9uKGNvbXBvbmVudCkgPyBhd2FpdCBjb21wb25lbnQoKVxuICAgICAgICAgICAgOiBpc1Byb21pc2UoY29tcG9uZW50KSA/IGF3YWl0IGNvbXBvbmVudFxuICAgICAgICAgICAgOiBjb21wb25lbnRcbiAgICAgICAgICBjb21wID0gY29tcD8uZGVmYXVsdCB8fCBjb21wXG4gICAgICAgICAgY29tcC5taXhpbnMgPSBtaXhpbnNcbiAgICAgICAgICBjb21wLmNvbXBvbmVudHMgPSBjb21wb25lbnRzXG4gICAgICAgICAgcmV0dXJuIGNvbXBcbiAgICAgICAgfVxuICAgICAgICA6IGNvbXBvbmVudFxuICAgIH0sXG5cbiAgICByZXNvbHZlRGl0b0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVDb21wb25lbnQoY29tcG9uZW50LCBbRGl0b01peGluXSlcbiAgICB9LFxuXG4gICAgcmVzb2x2ZVR5cGVDb21wb25lbnQoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZlQ29tcG9uZW50KGNvbXBvbmVudCwgW0RpdG9NaXhpbiwgVHlwZU1peGluXSlcbiAgICB9XG4gIH1cbn0pXG5cbkRpdG9Db21wb25lbnQuY29tcG9uZW50ID0gZnVuY3Rpb24obmFtZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7XG4gICAgICBuYW1lLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH1cbiAgICBjb25zdCBjdG9yID0gdGhpcy5leHRlbmQob3B0aW9ucylcbiAgICBjb21wb25lbnRzW25hbWVdID0gY3RvclxuICAgIHJldHVybiBjdG9yXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudHNbbmFtZV0gfHwgVnVlLmNvbXBvbmVudChuYW1lKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnRcbiIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9Vc2VyIHtcbiAgaGFzUm9sZSguLi5yb2xlcykge1xuICAgIGlmICh0aGlzLnJvbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICAgICAgaWYgKHRoaXMucm9sZXMuaW5jbHVkZXMocm9sZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNjaGVtYUNvbXBvbmVudHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWFpblNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHNbMF1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBieSBgRGl0b1NjaGVtYS5jcmVhdGVkKCkvZGVzdHJveWVkKClgIG9uIGl0c1xuICAgIC8vICRwYXJlbnQsIGlmIHRoZSBwYXJlbnQgdXNlcyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICBfcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQoc2NoZW1hQ29tcG9uZW50LCBhZGQpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgaWYgKGFkZCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnRzLnB1c2goc2NoZW1hQ29tcG9uZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5zcGxpY2Uoc2NoZW1hQ29tcG9uZW50cy5pbmRleE9mKHNjaGVtYUNvbXBvbmVudCksIDEpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi9TY2hlbWFQYXJlbnRNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbU2NoZW1hUGFyZW50TWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIHsgZXJyb3JzIH0pID0+XG4gICAgICAgICAgZXJyb3JzICYmIHJlc3VsdCA/IHJlc3VsdC5jb25jYXQoZXJyb3JzKSA6IGVycm9ycyxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSkpXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52ZXJpZnlBbGwobWF0Y2gpKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5yZXNldFZhbGlkYXRpb24oKSlcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5jbGVhckVycm9ycygpKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChcbiAgICAgICAgaXQgPT4gaXQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cylcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRDb21tb25QcmVmaXggfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlVXBkYXRlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBiZWZvcmVSb3V0ZUxlYXZlKHRvLCBmcm9tLCBuZXh0KSB7XG4gICAgdGhpcy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZWxvYWQ6IGZhbHNlLFxuICAgICAgLy8gRWFjaCByb3V0ZS1jb21wb25lbnQgZGVmaW5lcyBhIHN0b3JlIHRoYXQgZ2V0cyBwYXNzZWQgb24gdG8gaXRzXG4gICAgICAvLyBjaGlsZCBjb21wb25lbnRzLCBzbyB0aGV5IGNhbiBzdG9yZSB2YWx1ZXMgaW4gdGhlbSB0aGF0IGxpdmUgYmV5b25kXG4gICAgICAvLyB0aGVpciBsaWZlLWN5Y2xlLiBTZWU6IERpdG9QYW5lLCBTb3VyY2VNaXhpblxuICAgICAgc3RvcmU6IHt9LFxuICAgICAgbG9hZENhY2hlOiB7fSAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgcm91dGVDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJvdXRlUmVjb3JkKCkge1xuICAgICAgLy8gVE9ETzogQ2FuIHRoaXMuJHJvdXRlLmN1cnJlbnRSb3V0ZSBiZSBvZiB1c2Ugc29tZXdoZXJlIGhlcmU/XG4gICAgICAvLyBSZXRyaWV2ZSB0aGUgcm91dGUtcmVjb3JkIHRvIHdoaWNoIHRoaXMgY29tcG9uZW50IHdhcyBtYXBwZWQgdG86XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTMzOCNpc3N1ZWNvbW1lbnQtMjk2MzgxNDU5XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUubWF0Y2hlZFt0aGlzLiR2bm9kZS5kYXRhLnJvdXRlclZpZXdEZXB0aF1cbiAgICB9LFxuXG4gICAgaXNMYXN0Um91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJvdXRlciBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV1cbiAgICB9LFxuXG4gICAgaXNMYXN0VW5uZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlIHRoYXRcbiAgICAgIC8vIG5lZWRzIGl0cyBvd24gcm91dGVyLXZpZXcgKD0gaXMgbm90IG5lc3RlZCkuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICBmb3IgKGxldCBpID0gbWF0Y2hlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBtYXRjaGVkW2ldXG4gICAgICAgIGlmICghcmVjb3JkLm1ldGEubmVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IHJlY29yZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNOZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEubmVzdGVkXG4gICAgfSxcblxuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZD8ubWV0YVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Um91dGVQYXRoKHRoaXMucm91dGVSZWNvcmQucGF0aClcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYigpIHtcbiAgICAgIGNvbnN0IHsgYnJlYWRjcnVtYiB9ID0gdGhpcy5zY2hlbWEgfHwge31cbiAgICAgIHJldHVybiBicmVhZGNydW1iIHx8IGAke3RoaXMuYnJlYWRjcnVtYlByZWZpeH0gJHt0aGlzLmxhYmVsfWBcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH0sXG5cbiAgICBwYXJhbSgpIHtcbiAgICAgIC8vIFdvcmthcm91bmQgZm9yIHZ1ZS1yb3V0ZXIgbm90IGJlaW5nIGFibGUgdG8gbWFwIG11bHRpcGxlIHVybCBwYXJhbWV0ZXJzXG4gICAgICAvLyB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gbXVsdGlwbGUgY29tcG9uZW50cywgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXJhbXNbdGhpcy5tZXRhPy5wYXJhbV0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGUsIHNlZSBEaXRvRm9ybVxuICAgIGRvZXNNdXRhdGUoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBLZWVwIGEgc2hhcmVkIHN0YWNrIG9mIHJvb3QgY29tcG9uZW50cyBmb3IgRGl0b1RyYWlsIHRvIHVzZSB0byByZW5kZXJcbiAgICAvLyBsYWJlbHMuIENhbid0IHJlbHkgb24gJHJvdXRlLm1hdGNoZWRbaV0uaW5zdGFuY2VzLmRlZmF1bHQgdW5mb3J0dW5hdGVseSxcbiAgICAvLyBhcyBpbnN0YW5jZXMgYXJlbid0IGltbWVkaWF0ZWx5IHJlYWR5LCBhbmQgaW5zdGFuY2VzIGlzIG5vdCByZWFjdGl2ZS5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5wdXNoKHRoaXMpXG4gIH0sXG5cbiAgZGVzdHJveWVkKCkge1xuICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgcm91dGVDb21wb25lbnRzLnNwbGljZShyb3V0ZUNvbXBvbmVudHMuaW5kZXhPZih0aGlzKSwgMSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYmVmb3JlUm91dGVDaGFuZ2UodG8sIGZyb20sIG5leHQpIHtcbiAgICAgIGxldCBvayA9IHRydWVcbiAgICAgIGNvbnN0IGlzQ2xvc2luZyA9IChcbiAgICAgICAgLy8gT25seSBoYW5kbGUgdGhpcyByb3V0ZSBjaGFuZ2UgaWYgdGhlIGZvcm0gaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZVxuICAgICAgICAvLyBgZnJvbWAgcm91dGUsIGJ1dCBpbmNsdWRlIHBhcmVudCBmb3JtcyBvZiBjbG9zaW5nIG5lc3RlZCBmb3JtcyBhcyBhc1xuICAgICAgICAvLyB3ZWxsLCBieSBtYXRjaGluZyB0aGUgdGhlIHN0YXJ0IG9mIGZyb20vdG8gcGF0aCBhZ2FpbnN0IGB0aGlzLnBhdGhgOlxuICAgICAgICBmcm9tLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgICF0by5wYXRoLnN0YXJ0c1dpdGgodGhpcy5wYXRoKSAmJlxuICAgICAgICAvLyBFeGNsdWRlIGhhc2ggY2hhbmdlcyBvbmx5ICg9IHRhYiBjaGFuZ2VzKTpcbiAgICAgICAgZnJvbS5wYXRoICE9PSB0by5wYXRoICYmIChcbiAgICAgICAgICB0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSB8fFxuICAgICAgICAgIC8vIERlY2lkZSBpZiB3ZSdyZSBtb3ZpbmcgdG93YXJkcyBhIG5ldyBuZXN0ZWQgZm9ybSwgb3IgY2xvc2luZyAvXG4gICAgICAgICAgLy8gcmVwbGFjaW5nIGFuIGFscmVhZHkgb3BlbiBvbmUgYnkgY29tcGFyaW5nIHBhdGggbGVuZ3Rocy5cbiAgICAgICAgICAvLyBUaGUgY2FzZSBvZiBgPWAgbWF0Y2hlcyB0aGUgcmVwbGFjaW5nIG9mIGFuIGFscmVhZHkgb3BlbiBvbmUuXG4gICAgICAgICAgdG8ucGF0aC5sZW5ndGggPD0gZnJvbS5wYXRoLmxlbmd0aFxuICAgICAgICApXG4gICAgICApXG4gICAgICBpZiAoaXNDbG9zaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmRvZXNNdXRhdGUpIHtcbiAgICAgICAgICAvLyBGb3IgYWN0aXZlIGRpcmVjdGx5IG11dGF0aW5nIChuZXN0ZWQpIGZvcm1zIHRoYXQgd2VyZSBub3QgdmFsaWRhdGVkXG4gICAgICAgICAgLy8geWV0LCB2YWxpZGF0ZSB0aGVtIG9uY2UuIElmIHRoZSB1c2VyIHRoZW4gc3RpbGwgd2FudHMgdG8gbGVhdmVcbiAgICAgICAgICAvLyB0aGVtLCB0aGV5IGNhbiBjbGljayBjbG9zZSAvIG5hdmlnYXRlIGF3YXkgYWdhaW4uXG4gICAgICAgICAgb2sgPSAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWRhdGVkIHx8XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlQWxsKClcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhlIGZvcm0gZG9lc24ndCBkaXJlY3RseSBtdXRhdGUgZGF0YS4gSWYgaXQgaXMgZGlydHksIGFzayBpZiB1c2VyXG4gICAgICAgICAgLy8gd2FudHMgdG8gcGVyc2lzdCBkYXRhIGZpcnN0LlxuICAgICAgICAgIGlmICh0aGlzLmlzRGlydHkpIHtcbiAgICAgICAgICAgIG9rID0gd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgICAgIGBZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIERvIHlvdSByZWFsbHkgd2FudCB0byAke1xuICAgICAgICAgICAgICAgIHRoaXMudmVyYnMuY2FuY2VsXG4gICAgICAgICAgICAgIH0/YFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmV4dChvaylcbiAgICB9LFxuXG4gICAgZ2V0Um91dGVQYXRoKHRlbXBsYXRlUGF0aCkge1xuICAgICAgLy8gTWFwcyB0aGUgcm91dGUncyBhY3R1YWwgcGF0aCB0byB0aGUgbWF0Y2hlZCByb3V0ZXMgYnkgY291bnRpbmcgaXRzXG4gICAgICAvLyBwYXJ0cyBzZXBhcmF0ZWQgYnkgJy8nLCBzcGxpdHRpbmcgdGhlIHBhdGggaW50byB0aGUgbWFwcGVkIHBhcnRzXG4gICAgICAvLyBjb250YWluaW5nIGFjdHVhbCBwYXJhbWV0ZXJzLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGhcbiAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgLnNsaWNlKDAsIHRlbXBsYXRlUGF0aC5zcGxpdCgnLycpLmxlbmd0aClcbiAgICAgICAgLmpvaW4oJy8nKVxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiXG4vLyBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4vLyBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbi8vIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuLy8gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG5yb3V0ZXItdmlldyhcbiAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gIDprZXk9XCJuYW1lXCJcbilcbi5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICB2LWVsc2UtaWY9XCJzaG91bGRSZW5kZXIodmlld1NjaGVtYSlcIlxuKVxuICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgIDptZW51SGVhZGVyPVwidHJ1ZVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC8vIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbiAgLy8gaW5zdGVhZCwgdG8gbmVzdCBmdXJ0aGVyIHJvdXRlIGNvbXBvbmVudHMuXG4gIC8vIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuICAvLyB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbiAgcm91dGVyLXZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlcih2aWV3U2NoZW1hKVwiXG4gIClcbiAgICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgIDpzY2hlbWE9XCJ2aWV3U2NoZW1hXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShuYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IHsgc29tZVNjaGVtYUNvbXBvbmVudCwgaXNTaW5nbGVDb21wb25lbnRWaWV3IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXZpZXcnLCB7XG4gIG1peGluczogW1JvdXRlTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgLy8gUmVkaXJlY3QgJHNvdXJjZUNvbXBvbmVudCBhbmQgJHJlc291cmNlQ29tcG9uZW50IHRvIHRoZSBtYWluIGNvbXBvbmVudDpcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5zb3VyY2VDb21wb25lbnQgfHwgbnVsbCxcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcy5tYWluQ29tcG9uZW50Py5yZXNvdXJjZUNvbXBvbmVudCB8fCBudWxsXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmlldzogdHJ1ZSxcbiAgICAgIC8vIFVwZGF0ZWQgZnJvbSBMb2FkaW5nTWl4aW4gdGhyb3VnaCBgc2V0TG9hZGluZyhpc0xvYWRpbmcpYDpcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAvLyBOT1RFOiBEYXRhIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIHZpZXdzIGJlY2F1c2UgdGhlIHJvdXRlciByZWN5Y2xlcyB0aGVcbiAgICAgIC8vIERpdG9WaWV3IGNvbXBvbmVudC5cbiAgICAgIGRhdGE6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YS5zY2hlbWFcbiAgICB9LFxuXG4gICAgbmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5uYW1lXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50VmlldygpIHtcbiAgICAgIHJldHVybiBpc1NpbmdsZUNvbXBvbmVudFZpZXcodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIG1haW5Db21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgodGhpcy5uYW1lKVxuICAgIH0sXG5cbiAgICB2aWV3U2NoZW1hKCkge1xuICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgIC8vIFRyYW5zbGF0ZSBzaW5nbGUtY29tcG9uZW50IHNjaGVtYXMgaW50byBtdWx0aS1jb21wb25lbnQgc2NoZW1hcyxcbiAgICAgIC8vIHNvIHRoZXkgY2FuIGJlIHJlbmRlcmVkIGRpcmVjdGx5IHRocm91Z2ggRGl0b1NjaGVtYSBhbHNvOlxuICAgICAgcmV0dXJuIHRoaXMuaXNTaW5nbGVDb21wb25lbnRWaWV3XG4gICAgICAgID8ge1xuICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgIFtzY2hlbWEubmFtZV06IHtcbiAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICBsYWJlbDogZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiBzY2hlbWFcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHNvbWVTY2hlbWFDb21wb25lbnQoXG4gICAgICAgIHRoaXMudmlld1NjaGVtYSxcbiAgICAgICAgY29tcG9uZW50ID0+IGhhc1Jlc291cmNlKGNvbXBvbmVudClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIC8vIFNlZSBpZiB0aGUgcm91dGUgY2hhbmdlcyBjb21wbGV0ZWx5LCBhbmQgY2xlYXIgdGhlIGRhdGEgaWYgaXQgZG9lcy5cbiAgICAgIGlmICh0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSkge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGF0YSA9IHt9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIC8vIExpc3RzIGluc2lkZSBzaW5nbGUtY29tcG9uZW50IHZpZXdzIHVzZSB0aGUgdmlldydzIHBhdGggZm9yIHN1Yi1wYXRoczpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHRoaXMucGF0aFxuICAgICAgICA6IGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWknXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbUhhbmRsZXJzOiBbXVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIGZvciAoY29uc3QgeyByZW1vdmUgfSBvZiB0aGlzLmRvbUhhbmRsZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgICB0aGlzLmRvbUhhbmRsZXJzID0gW11cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZG9tT24oZWxlbWVudCwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkRXZlbnRzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpc09iamVjdCh0eXBlKSA/IHR5cGUgOiB7IFt0eXBlXTogaGFuZGxlciB9XG4gICAgICApXG4gICAgICB0aGlzLmRvbUhhbmRsZXJzLnB1c2gocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1yb290XG4gIG1vZGFscy1jb250YWluZXJcbiAgbm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgcmVmPVwibm90aWZpY2F0aW9uc1wiXG4gICAgcG9zaXRpb249XCJ0b3AgcmlnaHRcIlxuICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gIClcbiAgZGl0by1tZW51XG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIGRpdG8taGVhZGVyKFxuICAgICAgOnNwaW5uZXI9XCJvcHRpb25zLnNwaW5uZXJcIlxuICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAgICAgZGl0by1hY2NvdW50KFxuICAgICAgICB2LWlmPVwidXNlclwiXG4gICAgICApXG4gICAgICBhLmRpdG8tbG9naW4oXG4gICAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgICBAY2xpY2s9XCJyb290Q29tcG9uZW50LmxvZ2luKClcIlxuICAgICAgKVxuICAgICAgICBzcGFuIExvZ2luXG4gICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXJvb3RcbiAgICBtb2RhbHMtY29udGFpbmVyXG4gICAgbm90aWZpY2F0aW9ucy5kaXRvLW5vdGlmaWNhdGlvbnMoXG4gICAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICAgIHBvc2l0aW9uPVwidG9wIHJpZ2h0XCJcbiAgICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gICAgKVxuICAgIGRpdG8tbWVudVxuICAgIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgICAgZGl0by1oZWFkZXIoXG4gICAgICAgIDpzcGlubmVyPVwib3B0aW9ucy5zcGlubmVyXCJcbiAgICAgICAgOmlzTG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICApXG4gICAgICAgIGRpdG8tYWNjb3VudChcbiAgICAgICAgICB2LWlmPVwidXNlclwiXG4gICAgICAgIClcbiAgICAgICAgYS5kaXRvLWxvZ2luKFxuICAgICAgICAgIHYtZWxzZS1pZj1cImFsbG93TG9naW5cIlxuICAgICAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgICAgIClcbiAgICAgICAgICBzcGFuIExvZ2luXG4gICAgICByb3V0ZXItdmlld1xuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIEBpbXBvcnQgJy4uL3N0eWxlcy9zdHlsZS5zYXNzJ1xuXG4gIC5kaXRvLXJvb3RcbiAgICBoZWlnaHQ6IDEwMCVcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgLmRpdG8tcGFnZVxuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgLy8gVGhlIHJvb3QtbGV2ZWwgdmlld3MgYW5kIGZvcm1zIG1heSBoYXZlIGEgYC5kaXRvLXNjaGVtYS1oZWFkZXJgIHRoYXRcbiAgICAgIC8vIHNob3VsZCBhcHBlYXIgbGF5ZXJlZCBvdmVyIGAuZGl0by1tZW51YCwgd2hpbGUgaGF2aW5nIGBvdmVybGF5OiBoaWRkZW5gXG4gICAgICAvLyBzZXQgYnkgYC5kaXRvLXNjcm9sbC1wYXJlbnRgIHRvIGRlbGVnYXRlIHNjcm9sbGluZyB0byBgLmRpdG8tc2Nyb2xsYC5cbiAgICAgIC8vIEluIG9yZGVyIHRvIG5vdCBoYXZlIHRoZSBoZWFkZXIgY2xpcHBlZCwgYWRqdXN0IHRoZSB0b3AgaGVyZTpcbiAgICAgID4gLmRpdG8tZm9ybSxcbiAgICAgID4gLmRpdG8tdmlld1xuICAgICAgICBtYXJnaW4tdG9wOiAtJG1lbnUtaGVpZ2h0XG4gICAgICAgIHBhZGRpbmctdG9wOiAkbWVudS1oZWlnaHRcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBhc0FycmF5LCBzdHJpcFRhZ3MgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvVXNlciBmcm9tICcuLi9EaXRvVXNlci5qcydcbmltcG9ydCBEaXRvVmlldyBmcm9tICcuLi9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBwcm9jZXNzVmlldywgcmVzb2x2ZVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1yb290Jywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHZpZXdzOiAoKSA9PiB0aGlzLnJlc29sdmVkVmlld3NcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICB1bnJlc29sdmVkVmlld3M6IHsgdHlwZTogW09iamVjdCwgRnVuY3Rpb24sIFByb21pc2VdLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG9wdGlvbnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZXNvbHZlZFZpZXdzOiB7fSxcbiAgICAgIGFsbG93TG9naW46IGZhbHNlLFxuICAgICAgbG9hZGluZ0NvdW50OiAwXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLm5vdGlmaWNhdGlvbnNcbiAgICB9LFxuXG4gICAgaXNMb2FkaW5nKCkge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGluZ0NvdW50ID4gMFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYXBwU3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZSB8fCAnRGl0by5qcyBBZG1pbidcbiAgICAvLyBXaXRoIGhvdC1yZWxvYWRpbmcsIGl0IGxvb2tzIGxpa2UgZGVzdHJveWVkIGhvb2tzIGFyZW4ndCBhbHdheXMgY2FsbGVkXG4gICAgLy8gZm9yIHJvdXRlIGNvbXBvbmVudHMgc28gcmVzZXQgdGhlIGFycmF5IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzID0gW11cbiAgfSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIC8vIENsZWFyIHRoZSBsYWJlbCBtYXJrZWQgYXMgYWN0aXZlIG9uIGFsbCBtb3VzZSBhbmQga2V5Ym9hcmQgZXZlbnRzLCBleGNlcHRcbiAgICAvLyB0aGUgb25lcyB0aGF0IERpdG9MYWJlbCBpdHNlbGYgaW50ZXJjZXB0cy5cbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjbGljazogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZGl0by1sYWJlbCcpKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IGZhbHNlXG4gICAgICBpZiAoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0IH0gPSB7fSkge1xuICAgICAgdGl0bGUgfHw9IHtcbiAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICBlcnJvcjogJ0Vycm9yJyxcbiAgICAgICAgaW5mbzogJ0luZm9ybWF0aW9uJyxcbiAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICB9W3R5cGVdIHx8ICdOb3RpZmljYXRpb24nXG4gICAgICB0ZXh0ID0gYDxwPiR7XG4gICAgICAgIGFzQXJyYXkodGV4dCkuam9pbignPC9wPiA8cD4nKVxuICAgICAgfTwvcD5gLnJlcGxhY2UoL1xcbnxcXHJcXG58XFxyL2csICc8YnI+JylcbiAgICAgIGNvbnN0IGxvZyA9IHtcbiAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICAgICAgaW5mbzogJ2xvZycsXG4gICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICB9W3R5cGVdIHx8ICdlcnJvcidcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlW2xvZ10oc3RyaXBUYWdzKHRleHQpKVxuICAgICAgY29uc3QgeyBub3RpZmljYXRpb25zID0gdHJ1ZSB9ID0gdGhpcy5hcGlcbiAgICAgIGlmIChub3RpZmljYXRpb25zKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBkaXNwbGF5LWR1cmF0aW9uIGZvciB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGl0cyBjb250ZW50XG4gICAgICAgIC8vIGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgYGR1cmF0aW9uRmFjdG9yYCBjb25maWd1cmF0aW9uLiBJdCBkZWZpbmVzIHRoZVxuICAgICAgICAvLyBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIG11bHRpcGxpZWQgd2l0aCB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnNcbiAgICAgICAgLy8gZGlzcGxheWVkIGluIHRoZSBub3RpZmljYXRpb24sIHBsdXMgNDAgKDQwICsgdGl0bGUgKyBtZXNzYWdlKTpcbiAgICAgICAgY29uc3QgeyBkdXJhdGlvbkZhY3RvciA9IDIwIH0gPSBub3RpZmljYXRpb25zXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKDQwICsgdGV4dC5sZW5ndGggKyB0aXRsZS5sZW5ndGgpICogZHVyYXRpb25GYWN0b3JcbiAgICAgICAgdGhpcy4kbm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQsIGR1cmF0aW9uIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9LFxuXG4gICAgcmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5sb2FkaW5nQ291bnQgKz0gaXNMb2FkaW5nID8gMSA6IC0xXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ2luKCkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICAgICAgY29uc3Qge1xuICAgICAgICBhZGRpdGlvbmFsQ29tcG9uZW50cyxcbiAgICAgICAgcmVkaXJlY3RBZnRlckxvZ2luXG4gICAgICB9ID0gdGhpcy5vcHRpb25zLmxvZ2luIHx8IHt9XG4gICAgICBjb25zdCBsb2dpbkRhdGEgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxDb21wb25lbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHt9LFxuICAgICAgICAgIGxvZ2luOiB7IHR5cGU6ICdzdWJtaXQnIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChsb2dpbkRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ2luLFxuICAgICAgICAgICAgZGF0YTogbG9naW5EYXRhLFxuICAgICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChyZWRpcmVjdEFmdGVyTG9naW4pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RBZnRlckxvZ2luKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgICAgdGV4dDogZXJyb3IgfHwgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLnJlc3BvbnNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2luKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZUhvbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSgnLycpXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ291dCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ291dCxcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zZXRVc2VyKG51bGwpXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVXNlcigpIHtcbiAgICAgIGxldCB1c2VyID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMuc2Vzc2lvbixcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICB1c2VyID0gcmVzcG9uc2UuZGF0YS51c2VyIHx8IG51bGxcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBlcnJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VXNlcih1c2VyKVxuICAgICAgcmV0dXJuIHVzZXJcbiAgICB9LFxuXG4gICAgc2V0VXNlcih1c2VyKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnVzZXIgPSAoXG4gICAgICAgIHVzZXIgJiZcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHVzZXIsIERpdG9Vc2VyLnByb3RvdHlwZSlcbiAgICAgIClcbiAgICAgIC8vIENsZWFyIHJlc29sdmVkIHZpZXdzIHdoZW4gdXNlciBpcyBsb2dnZWQgb3V0LlxuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IHt9XG4gICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW5zdXJlVXNlcigpIHtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlVmlld3MoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IFtdXG4gICAgICBjb25zdCBwcm9taXNlcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBzY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMucmVzb2x2ZWRWaWV3cykpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzKSlcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5uYXYuZGl0by1tZW51LmRpdG8tc2Nyb2xsLXBhcmVudFxuICBoMSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICB1bC5kaXRvLXNjcm9sbFxuICAgIGxpKHYtZm9yPVwidmlldyBpbiB2aWV3c1wiKVxuICAgICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHZpZXcpXCJcbiAgICAgICAgOnRvPVwiYC8ke3ZpZXcucGF0aH1gXCJcbiAgICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgICAgKSB7eyBnZXRMYWJlbCh2aWV3KSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8tbWVudS5kaXRvLXNjcm9sbC1wYXJlbnRcbiAgICBoMSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICAgIHVsLmRpdG8tc2Nyb2xsXG4gICAgICBsaSh2LWZvcj1cInZpZXcgaW4gdmlld3NcIilcbiAgICAgICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIodmlldylcIlxuICAgICAgICAgIDp0bz1cImAvJHt2aWV3LnBhdGh9YFwiXG4gICAgICAgICAgYWN0aXZlLWNsYXNzPVwiZGl0by1hY3RpdmVcIlxuICAgICAgICApIHt7IGdldExhYmVsKHZpZXcpIH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbWVudVxuICAgIGZsZXg6IGluaXRpYWxcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICB1bFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZVxuICAgIGEsXG4gICAgaDFcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgaDFcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXJcbiAgICAgIGJvcmRlci1yaWdodDogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItZGFya2VzdFxuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLWxpbmtcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgICAgJi5kaXRvLWFjdGl2ZVxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgLmRpdG8tbGlua1xuICAgICY6Zm9jdXM6bm90KDphY3RpdmUpOm5vdCguZGl0by1hY3RpdmUpXG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLW1lbnUnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG48ZGl2IGNsYXNzPVwidi1zcGlubmVyXCIgdi1zaG93PVwibG9hZGluZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UxXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkxXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UyXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkyXVwiPlxuICAgIDwvZGl2PjxkaXYgY2xhc3M9XCJ2LXB1bHNlIHYtcHVsc2UzXCIgdi1iaW5kOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSxzcGlubmVyRGVsYXkzXVwiPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiIsIjx0ZW1wbGF0ZT5cbjxkaXYgY2xhc3M9XCJ2LXNwaW5uZXJcIiB2LXNob3c9XCJsb2FkaW5nXCI+XG4gICAgPGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTFcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTFdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTJcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTJdXCI+XG4gICAgPC9kaXY+PGRpdiBjbGFzcz1cInYtcHVsc2Ugdi1wdWxzZTNcIiB2LWJpbmQ6c3R5bGU9XCJbc3Bpbm5lclN0eWxlLHNwaW5uZXJEZWxheTNdXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgXG4gIG5hbWU6ICdQdWxzZUxvYWRlcicsXG5cbiAgcHJvcHM6IHtcbiAgICBsb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHsgXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIzVkYzU5NidcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxNXB4J1xuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMnB4J1xuICAgIH0sXG4gICAgcmFkaXVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTAwJSdcbiAgICB9XG4gIH0sXG4gIGRhdGEgKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzcGlubmVyU3R5bGU6IHtcbiAgICAgIFx0YmFja2dyb3VuZENvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgXHR3aWR0aDogdGhpcy5zaXplLFxuICAgICAgICBoZWlnaHQ6IHRoaXMuc2l6ZSxcbiAgICAgIFx0bWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgIFx0Ym9yZGVyUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgIGFuaW1hdGlvbk5hbWU6ICd2LXB1bHNlU3RyZXRjaERlbGF5JyxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICcwLjc1cycsXG4gICAgICAgIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAnaW5maW5pdGUnLFxuICAgICAgICBhbmltYXRpb25UaW1pbmdGdW5jdGlvbjogJ2N1YmljLWJlemllciguMiwuNjgsLjE4LDEuMDgpJyxcbiAgICAgICAgYW5pbWF0aW9uRmlsbE1vZGU6ICdib3RoJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTE6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjEycydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkyOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4yNHMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mzoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMzZzJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG59XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuLyoudi1zcGlubmVyXG57XG4gICAgbWFyZ2luOiAxMDBweCBhdXRvO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbiovXG5cbkAtd2Via2l0LWtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5XG57XG4gICAgMCUsXG4gICAgODAlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAxOyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbiAgICA0NSVcbiAgICB7XG4gICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgLXdlYmtpdC1vcGFjaXR5OiAwLjc7ICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICB9XG59XG5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheVxue1xuICAgIDAlLFxuICAgIDgwJVxuICAgIHtcbiAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMTsgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNDUlXG4gICAge1xuICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMC4xKTtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgICAgIC13ZWJraXQtb3BhY2l0eTogMC43OyAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBvcGFjaXR5OiAwLjc7XG4gICAgfVxufVxuPC9zdHlsZT4iLCJcbm5hdi5kaXRvLWhlYWRlclxuICAuZGl0by10cmFpbFxuICAgIHVsXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoY29tcG9uZW50LCBpbmRleCkgaW4gdHJhaWxcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiaW5kZXggPT09IHRyYWlsLmxlbmd0aCAtIDFcIilcbiAgICAgICAgICBzcGFuKDpjbGFzcz1cImdldEJyZWFkY3J1bWJDbGFzcyhjb21wb25lbnQpXCIpXG4gICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgIHJvdXRlci1saW5rLmRpdG8tYnJlYWRjcnVtYih2LWVsc2UsIDp0bz1cImNvbXBvbmVudC5wYXRoXCIpXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgIHNwaW5uZXIuZGl0by1zcGlubmVyKHYtaWY9XCJpc0xvYWRpbmdcIilcbiAgc2xvdFxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgLmRpdG8tdHJhaWxcbiAgICAgIHVsXG4gICAgICAgIGxpKFxuICAgICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJpbmRleCA9PT0gdHJhaWwubGVuZ3RoIC0gMVwiKVxuICAgICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gICAgICAgICAgcm91dGVyLWxpbmsuZGl0by1icmVhZGNydW1iKHYtZWxzZSwgOnRvPVwiY29tcG9uZW50LnBhdGhcIilcbiAgICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgICAgc3Bpbm5lci5kaXRvLXNwaW5uZXIodi1pZj1cImlzTG9hZGluZ1wiKVxuICAgIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1oZWFkZXJcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYmxhY2tcbiAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZVxuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodFxuICAgIHotaW5kZXg6ICRtZW51LXotaW5kZXhcbiAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICBzcGFuXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmdcbiAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAuZGl0by10cmFpbFxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgICAgaGVpZ2h0OiAzZW1cbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZ1xuICAgICAgdWxcbiAgICAgICAgZGlzcGxheTogZmxleFxuICAgICAgYVxuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgcGFkZGluZy1yaWdodDogMC40ZW1cbiAgICAgICAgJGFuZ2xlOiAzM2RlZ1xuICAgICAgICAmOmhvdmVyXG4gICAgICAgICAgY29sb3I6ICM5OTlcbiAgICAgICAgJjo6YmVmb3JlLFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgICAgd2lkdGg6IDFweFxuICAgICAgICAgIGhlaWdodDogMS4yZW1cbiAgICAgICAgICByaWdodDogLTFweFxuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrXG4gICAgICAgICY6OmJlZm9yZVxuICAgICAgICAgIHRvcDogNTAlXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGFuZ2xlKVxuICAgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IHRvcFxuICAgICAgICAmOjphZnRlclxuICAgICAgICAgIGJvdHRvbTogNTAlXG4gICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLSRhbmdsZSlcbiAgICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b21cbiAgICAuZGl0by1zcGlubmVyXG4gICAgICBtYXJnaW4tdG9wOiAkbWVudS1wYWRkaW5nLXZlclxuICAgIC5kaXRvLWRpcnR5XG4gICAgICAmOmFmdGVyXG4gICAgICAgIGNvbnRlbnQ6ICcnXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkY29sb3Itd2hpdGVcbiAgICAgICAgd2lkdGg6IDhweFxuICAgICAgICBoZWlnaHQ6IDhweFxuICAgICAgICBtYXJnaW46IDJweFxuICAgICAgICBtYXJnaW4tbGVmdDogMC41ZW1cbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTAwJVxuICAgIC5kaXRvLWFjY291bnQsXG4gICAgLmRpdG8tbG9naW5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiAwXG4gICAgICBjdXJzb3I6IHBvaW50ZXJcbiAgICAuZGl0by1hY2NvdW50XG4gICAgICBsZWZ0OiAkY29udGVudC13aWR0aCArICRjb250ZW50LXBhZGRpbmcgKiAyXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxzZUxvYWRlciBmcm9tICd2dWUtc3Bpbm5lci9zcmMvUHVsc2VMb2FkZXIudnVlJ1xuXG5jb25zdCBTcGlubmVyID0gRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ3NwaW5uZXInLCBQdWxzZUxvYWRlcilcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWhlYWRlcicsIHtcbiAgY29tcG9uZW50czogeyBTcGlubmVyIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzcGlubmVyOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBpc0xvYWRpbmc6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyYWlsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLmZpbHRlcihcbiAgICAgICAgY29tcG9uZW50ID0+ICEhY29tcG9uZW50LnJvdXRlUmVjb3JkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc2l6ZSA9ICc4cHgnLFxuICAgICAgY29sb3IgPSAnIzk5OSdcbiAgICB9ID0gdGhpcy5zcGlubmVyIHx8IHt9XG4gICAgY29uc3QgeyBwcm9wcyB9ID0gU3Bpbm5lci5vcHRpb25zXG4gICAgcHJvcHMuc2l6ZS5kZWZhdWx0ID0gc2l6ZVxuICAgIHByb3BzLmNvbG9yLmRlZmF1bHQgPSBjb2xvclxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1kaXJ0eSc6IGNvbXBvbmVudC5pc0RpcnR5XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1bGxkb3duOiB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBzdGFydFRpbWU6IDAsXG4gICAgICAgIGNoZWNrVGltZTogdHJ1ZSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgbW91c2Vkb3duOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub25QdWxsZG93bk1vdXNlVXAobnVsbCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlcnM6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4odHJ1ZSlcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0VGltZSB9ID0gdGhpcy5wdWxsZG93blxuICAgICAgaWYgKCF0aGlzLmNoZWNrVGltZSB8fCBzdGFydFRpbWUgJiYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiAyNTApKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm9uUHVsbGRvd25TZWxlY3QodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCgvKiB2YWx1ZSAqLykge1xuICAgICAgLy8gTk9URTogVG8gYmUgb3ZlcnJpZGRlbi5cbiAgICB9LFxuXG4gICAgc2V0UHVsbGRvd25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMucHVsbGRvd24ub3BlbiA9IG9wZW5cbiAgICAgIHRoaXMucHVsbGRvd24uc3RhcnRUaW1lID0gb3BlbiA/IERhdGUubm93KCkgOiAwXG4gICAgICBpZiAob3Blbikge1xuICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwgdGhpcy5wdWxsZG93bi5ldmVudHMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLWFjY291bnRcbiAgYShcbiAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICApXG4gICAgc3BhbiB7eyB1c2VyLnVzZXJuYW1lIH19XG4gIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCJcbiAgKVxuICAgIGxpKFxuICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgKVxuICAgICAgYShcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICApIHt7IGxhYmVsIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1hY2NvdW50XG4gICAgYShcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgKVxuICAgICAgc3BhbiB7eyB1c2VyLnVzZXJuYW1lIH19XG4gICAgdWwuZGl0by1wdWxsZG93bihcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiXG4gICAgKVxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgICAgKVxuICAgICAgICBhKFxuICAgICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICAgICkge3sgbGFiZWwgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1hY2NvdW50XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tcHVsbGRvd25cbiAgICAgIHRvcDogJHB1bGxkb3duLXBhZGRpbmctdmVyXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tYWNjb3VudCcsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHtcbiAgICAgICAgc2V0dGluZ3M6ICdTZXR0aW5ncycsXG4gICAgICAgIGxvZ291dDogJ0xvZ291dCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25TZWxlY3QodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgIGNhc2UgJ2xvZ291dCc6XG4gICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnc2V0dGluZ3MnOlxuICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmZvcm0uZGl0by1kaWFsb2coQHN1Ym1pdC5wcmV2ZW50PVwic3VibWl0XCIpXG4gIGRpdG8tc2NoZW1hLmRpdG8tc2Nyb2xsKFxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gIClcbiAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZm9ybS5kaXRvLWRpYWxvZyhAc3VibWl0LnByZXZlbnQ9XCJzdWJtaXRcIilcbiAgICBkaXRvLXNjaGVtYS5kaXRvLXNjcm9sbChcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICBzbG90PVwiYnV0dG9uc1wiXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLnYtLW1vZGFsLW92ZXJsYXlcbiAgICB6LWluZGV4OiAyMDAwXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZGlhbG9nJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgY29tcG9uZW50czogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcHJvbWlzZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gTWFrZSBzdXJlIGRpYWxvZyBkYXRhIGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQga2V5c1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBjbG9uZSh0aGlzLmRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGlhbG9nRGF0YSkpIHtcbiAgICAgICAgZGlhbG9nRGF0YVtrZXldID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgd2luZG93RXZlbnRzOiBudWxsLFxuICAgICAgZGlhbG9nRGF0YVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Lm5hbWVcbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICBrZXl1cDogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5oYXNDYW5jZWwgJiYgZXZlbnQua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICB0aGlzLmNhbmNlbCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIGRlc3Ryb3llZCgpIHtcbiAgICB0aGlzLndpbmRvd0V2ZW50cy5yZW1vdmUoKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoaWRlKCkge1xuICAgICAgdGhpcy4kbW9kYWwuaGlkZSh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgcmVqZWN0KHZhbHVlKSB7XG4gICAgICB0aGlzLnByb21pc2UucmVqZWN0KHZhbHVlKVxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgdGhpcy5yZXNvbHZlKG51bGwpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmNvbXBvbmVudChcbiAgdi1pZj1cImNvbnRlbnRcIlxuICA6aXM9XCJvcHRpb25zLnRhZyB8fCB0YWdcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNvbnRlbnRcIlxuICAgIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gICAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gICAgOnN0eWxlPVwic3R5bGVzXCJcbiAgKSB7eyBvcHRpb25zLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWVsZW1lbnQnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFnOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NwYW4nIH0sXG4gICAgY29udGVudDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCB7IGNvbnRlbnQgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc09iamVjdChjb250ZW50KSA/IGNvbnRlbnQgOiB7IHRleHQ6IGNvbnRlbnQgfVxuICAgIH0sXG5cbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuY2xhc3MsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5jbGFzcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy4kYXR0cnMuc3R5bGUsXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5zdHlsZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiBhc0FycmF5KHZhbHVlKS5yZWR1Y2UoKG9iamVjdCwgZW50cnkpID0+IHtcbiAgICBpZiAoaXNTdHJpbmcoZW50cnkpKSB7XG4gICAgICBvYmplY3RbZW50cnldID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZW50cnkpKSB7XG4gICAgICBPYmplY3QuYXNzaWduKG9iamVjdCwgZW50cnkpXG4gICAgfVxuICAgIHJldHVybiBvYmplY3RcbiAgfSwge30pXG59XG5cbjwvc2NyaXB0PlxuIiwiXG5jb21wb25lbnQuZGl0by1sYWJlbChcbiAgdi1pZj1cInRleHQgfHwgY29sbGFwc2libGVcIlxuICA6aXM9XCJ0YWdcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbilcbiAgLmRpdG8tY2hldnJvbihcbiAgICB2LWlmPVwiY29sbGFwc2libGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgKVxuICBkaXRvLWVsZW1lbnQuZGl0by1sYWJlbC1wcmVmaXgoXG4gICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgIHRhZz1cInNwYW5cIlxuICAgIDprZXk9XCJgcHJlZml4LSR7aW5kZXh9YFwiXG4gICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICApXG4gIGxhYmVsKDpmb3I9XCJkYXRhUGF0aFwiIHYtaHRtbD1cInRleHRcIilcbiAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgIHYtZm9yPVwiKHN1ZmZpeCwgaW5kZXgpIG9mIHN1ZmZpeGVzXCJcbiAgICB0YWc9XCJzcGFuXCJcbiAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgIDpjb250ZW50PVwic3VmZml4XCJcbiAgKVxuICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICAgIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgICA6aXM9XCJ0YWdcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4gIClcbiAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogIWNvbGxhcHNlZCB9XCJcbiAgICApXG4gICAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6a2V5PVwiYHByZWZpeC0ke2luZGV4fWBcIlxuICAgICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICAgIClcbiAgICBsYWJlbCg6Zm9yPVwiZGF0YVBhdGhcIiB2LWh0bWw9XCJ0ZXh0XCIpXG4gICAgZGl0by1lbGVtZW50LmRpdG8tbGFiZWwtc3VmZml4KFxuICAgICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICAgIClcbiAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1sYWJlbFxuICAgIC0tbGFiZWwtcGFkZGluZzogMFxuICAgIC8vIEZvciBidXR0b25zIGFuZCBjaGV2cm9uIHRvIGFsaWduIHJpZ2h0OlxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBhbGwgaXRlbXMgaW4gdGhlIGxhYmVsLCBlLmcuIGNoZXZyb24sIGVkaXQtYnV0dG9ucy5cbiAgICBhbGlnbi1pdGVtczogY2VudGVyXG4gICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZylcbiAgICBtYXJnaW46IDAgMCAkZm9ybS1zcGFjaW5nLWhhbGYgMFxuXG4gICAgbGFiZWxcbiAgICAgIGRpc3BsYXk6IGlubGluZVxuICAgICAgY3Vyc29yOiBpbmhlcml0XG4gICAgICBmb250LXdlaWdodDogYm9sZFxuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcFxuXG4gICAgbGFiZWwsXG4gICAgLmRpdG8tbGFiZWwtcHJlZml4LFxuICAgIC5kaXRvLWxhYmVsLXN1ZmZpeFxuICAgICAgJjpudGgtbGFzdC1jaGlsZCgyKVxuICAgICAgICAvLyBUbyBzdHJldGNoIGVpdGhlciBsYWJlbCBvciAuZGl0by1sYWJlbC1zdWZmaXggdG8gZnVsbCBhdmFpbGFibGUgd2lkdGhcbiAgICAgICAgLy8gc28gdGhhdCBidXR0b25zIGFsd2F5cyBhcHBlYXIgcmlnaHQtYWxpZ25lZDpcbiAgICAgICAgZmxleDogMSAxIGF1dG9cbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGNvbnRlbnQ6ICdcXGEwJyAvLyAmbmJwcztcblxuICAgIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgICAuZGl0by1sYWJlbC1zdWZmaXhcbiAgICAgICt1c2VyLXNlbGVjdChub25lKVxuICAgICAgK2VsbGlwc2lzXG5cbiAgICAuZGl0by1idXR0b25zXG4gICAgICAvLyBNb3ZlIHRoZSBsYWJlbCBwYWRkaW5nIGluc2lkZSAuZGl0by1idXR0b25zLCBzbyB0aGF0IGl0IGNhcHR1cmVzIGFsbFxuICAgICAgLy8gbmVhciBtb3VzZSBldmVudHM6XG4gICAgICBtYXJnaW46IGNhbGMoLTEgKiB2YXIoLS1sYWJlbC1wYWRkaW5nKSlcbiAgICAgIG1hcmdpbi1sZWZ0OiAwXG4gICAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKVxuXG4gICAgJi5kaXRvLXdpZHRoLWZpbGxcbiAgICAgIHdpZHRoOiAxMDAlXG4gICAgICAvLyBJbiBvcmRlciBmb3IgZWxsaXBzaXMgdG8gd29yayBvbiBsYWJlbHMgd2l0aG91dCBhZmZlY3Rpbmcgb3RoZXIgbGF5b3V0LFxuICAgICAgLy8gd2UgbmVlZCB0byBwb3NpdGlvbiBpdCBhYnNvbHV0ZWx5IGluc2lkZSBpdHMgY29udGFpbmVyLlxuICAgICAgbGFiZWxcbiAgICAgICAgK2VsbGlwc2lzXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBtYXgtd2lkdGg6IDEwMCVcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIC8vIFNpbmNlIDxsYWJlbD4gdXNlcyBgcG9zaXRpb246IGFic29sdXRlYCwgc2V0IGNvbnRlbnQgdG8gYSB6ZXJvLXdpZHRoXG4gICAgICAgIC8vIHNwYWNlIG9uIGl0cyBwYXJlbnQgdG8gZW5mb3JjZSB0aGUgcmlnaHQgdGV4dCBoZWlnaHQgaW4gdGhlIGNvbnRhaW5lclxuICAgICAgICBjb250ZW50OiAnXFwyMDBiJyAvLyB6ZXJvLXdpZHRoIHNwYWNlXG5cbiAgYS5kaXRvLWxhYmVsXG4gICAgJjpob3ZlclxuICAgICAgLmRpdG8tY2hldnJvblxuICAgICAgICBjb2xvcjogJGNvbG9yLWRhcmtlclxuICAgICY6Zm9jdXM6bm90KDphY3RpdmUpOm5vdCguZGl0by1hY3RpdmUpXG4gICAgICAuZGl0by1jaGV2cm9uXG4gICAgICAgIC13ZWJraXQtdGV4dC1zdHJva2U6ICRib3JkZXItd2lkdGggJGNvbG9yLWFjdGl2ZVxuXG4gIC8vIERpc3BsYXkgbGFiZWxzIGluIGNvbXBhY3Qgc2NoZW1hIGFzIGlubGluZS1ibG9ja3MsIHRvIGFsbG93IGNvbXBhY3QgbGF5b3V0c1xuICAvLyB3aXRoIGB3aWR0aDogJ2F1dG8nYCBlbGVtZW50czpcbiAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gY29udHJvbCB0aGlzIGJlaGF2aW9yLlxuICAuZGl0by1zY2hlbWEtY29tcGFjdFxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnRcbiAgICAgID4gLmRpdG8tcGFuZVxuICAgICAgICA+IC5kaXRvLWNvbnRhaW5lclxuICAgICAgICAgID4gLmRpdG8tbGFiZWw6bm90KC5kaXRvLWxhYmVsLWNvbXBvbmVudClcbiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1sYWJlbCcsIHtcbiAgcHJvcHM6IHtcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdGFnKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGUgPyAnYScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICB0ZXh0KCkge1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGxhYmVsKSA/IGxhYmVsPy50ZXh0IDogbGFiZWxcbiAgICB9LFxuXG4gICAgcHJlZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5wcmVmaXgpXG4gICAgfSxcblxuICAgIHN1ZmZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8uc3VmZml4KVxuICAgIH0sXG5cbiAgICBsaXN0ZW5lcnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi4odGhpcy5jb2xsYXBzaWJsZSAmJiB7XG4gICAgICAgICAgY2xpY2s6IHRoaXMub25DbGlja1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID09PSB0aGlzXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrKCkge1xuICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IHRoaXNcbiAgICAgIHRoaXMuJGVtaXQoJ2V4cGFuZCcsIHRoaXMuY29sbGFwc2VkKVxuICAgIH1cbiAgfVxufSlcblxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQge1xuICBnZXRJdGVtRm9ybVNjaGVtYSwgZ2V0SXRlbUlkLCBnZXRJdGVtVWlkLCBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hLFxuXG4gICAgZ2V0SXRlbVVpZCxcblxuICAgIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4ID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnQgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgPyBTdHJpbmcoaW5kZXgpXG4gICAgICAgIDogZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSlcbiAgICB9LFxuXG4gICAgZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpIHtcbiAgICAgIGxldCB7IGRhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBpZiAoc291cmNlU2NoZW1hICE9PSB0aGlzLnNjaGVtYSkge1xuICAgICAgICBkYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBzb3VyY2VTY2hlbWEubmFtZSlcbiAgICAgIH1cbiAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGluZGV4KVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgfSxcblxuICAgIGZpbmRJdGVtSWRJbmRleChzb3VyY2VTY2hlbWEsIGRhdGEsIGl0ZW1JZCkge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmlzVHJhbnNpZW50XG4gICAgICAgIC8vIEZvciB0cmFuc2llbnQgZGF0YSwgdGhlIGluZGV4IGlzIHVzZWQgYXMgdGhlIGlkXG4gICAgICAgID8gaXRlbUlkXG4gICAgICAgIDogZGF0YT8uZmluZEluZGV4KFxuICAgICAgICAgIChpdGVtLCBpbmRleCkgPT5cbiAgICAgICAgICAgIHRoaXMuZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXgpID09PSBpdGVtSWRcbiAgICAgICAgKVxuICAgICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IGluZGV4IDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRJdGVtTGFiZWwoc291cmNlU2NoZW1hLCBpdGVtLCB7XG4gICAgICBpbmRleCA9IG51bGwsXG4gICAgICBleHRlbmRlZCA9IGZhbHNlLFxuICAgICAgYXNPYmplY3QgPSBmYWxzZVxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgeyBpdGVtTGFiZWwgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKCFpdGVtIHx8ICFleHRlbmRlZCAmJiBpdGVtTGFiZWwgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhUGF0aFxuICAgICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoKSA9PlxuICAgICAgICAoZGF0YVBhdGggfHw9IHRoaXMuZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpKVxuXG4gICAgICBsZXQgZm9ybUxhYmVsXG4gICAgICBjb25zdCBnZXRGb3JtTGFiZWwgPSAoKSA9PlxuICAgICAgICAoZm9ybUxhYmVsIHx8PSB0aGlzLmdldExhYmVsKFxuICAgICAgICAgIGdldEl0ZW1Gb3JtU2NoZW1hKHNvdXJjZVNjaGVtYSwgaXRlbSwgdGhpcy5jb250ZXh0KVxuICAgICAgICApKVxuXG4gICAgICBsZXQgdGV4dFxuICAgICAgbGV0IHByZWZpeFxuICAgICAgbGV0IHN1ZmZpeFxuICAgICAgaWYgKGlzRnVuY3Rpb24oaXRlbUxhYmVsKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1MYWJlbC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICBpbmRleCxcblxuICAgICAgICAgICAgZ2V0IGRhdGFQYXRoKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RGF0YVBhdGgoKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1MYWJlbCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBpZiAoaXNPYmplY3QobGFiZWwpKSB7XG4gICAgICAgICAgKHsgdGV4dCwgcHJlZml4LCBzdWZmaXggfSA9IGxhYmVsKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHQgPSBsYWJlbFxuICAgICAgICB9XG4gICAgICAgIC8vIEl0J3MgdXAgdG8gYGl0ZW1MYWJlbCgpYCBlbnRpcmVseSB0byBwcm9kdWNlIHRoZSBsYWJlbDpcbiAgICAgICAgZXh0ZW5kZWQgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTG9vayB1cCB0aGUgbmFtZSBvbiB0aGUgaXRlbSwgYnkgdGhlc2UgcnVsZXM6XG4gICAgICAgIC8vIDEuIElmIGBpdGVtTGFiZWxgIGlzIGEgc3RyaW5nLCB1c2UgaXQgYXMgdGhlIHByb3BlcnR5IGtleVxuICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZXJlIGFyZSBjb2x1bW5zLCB1c2UgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdFxuICAgICAgICAvLyAzLiBPdGhlcndpc2UsIHNlZSBpZiB0aGUgaXRlbSBoYXMgYSBwcm9wZXJ0eSBuYW1lZCAnbmFtZSdcbiAgICAgICAgY29uc3QgeyBjb2x1bW5zIH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgICAgY29uc3Qga2V5ID0gKFxuICAgICAgICAgIGlzU3RyaW5nKGl0ZW1MYWJlbCkgJiYgaXRlbUxhYmVsIHx8XG4gICAgICAgICAgaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgY29sdW1ucyAmJiBPYmplY3Qua2V5cyhjb2x1bW5zKVswXSB8fFxuICAgICAgICAgICduYW1lJ1xuICAgICAgICApXG4gICAgICAgIHRleHQgPSBpdGVtW2tleV1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGhhZExhYmVsID0gISF0ZXh0XG4gICAgICB0ZXh0ID0gdGV4dCB8fCAnJ1xuICAgICAgLy8gSWYgbm8gbGFiZWwgd2FzIGZvdW5kIHNvIGZhciwgdHJ5IHRvIHByb2R1Y2Ugb25lIGZyb20gdGhlaW5kZXguXG4gICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgLy8gQWx3YXlzIHVzZSBleHRlbmRlZCBzdHlsZSB3aGVuIGF1dG8tZ2VuZXJhdGluZyBsYWJlbHMgZnJvbSBpbmRleC9pZDpcbiAgICAgICAgZXh0ZW5kZWQgPSB0cnVlXG4gICAgICAgIGlmIChpc0xpc3RTb3VyY2Uoc291cmNlU2NoZW1hKSAmJiBpbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgIHRleHQgPSBgJHtpbmRleCArIDF9YFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXh0ZW5kZWQpIHtcbiAgICAgICAgY29uc3QgZm9ybUxhYmVsID0gZ2V0Rm9ybUxhYmVsKClcbiAgICAgICAgaWYgKGZvcm1MYWJlbCkge1xuICAgICAgICAgIC8vIElmIGEgbGFiZWwgd2FzIHByb3ZpZGVkLCBwdXQgaW4gcXVvdGVzIHdoZW4gcHJlZml4ZWQgd2l0aCB0aGVcbiAgICAgICAgICAvLyBmb3JtIGxhYmVsIGZvciB0aGUgZXh0ZW5kZWQgc3R5bGU6XG4gICAgICAgICAgdGV4dCA9IGAke2Zvcm1MYWJlbH0gJHtoYWRMYWJlbCA/IGAnJHt0ZXh0fSdgIDogdGV4dH1gXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhc09iamVjdCA/IHsgdGV4dCwgcHJlZml4LCBzdWZmaXggfSA6IHRleHRcbiAgICB9XG4gIH1cbn1cbiIsIlxuLmRpdG8tc2NoZW1hXG4gIC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgLmRpdG8tc2NoZW1hLWhlYWRlcihcbiAgICAgIHYtaWY9XCJoYXNMYWJlbCB8fCBoYXNUYWJzIHx8IGNsaXBib2FyZFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1tZW51LWhlYWRlcic6IG1lbnVIZWFkZXIgfVwiXG4gICAgKVxuICAgICAgZGl0by1sYWJlbChcbiAgICAgICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgOmNvbGxhcHNlZD1cIiFvcGVuZWRcIlxuICAgICAgICBAZXhwYW5kPVwib25FeHBhbmRcIlxuICAgICAgKVxuICAgICAgICAvLyBQYXNzIGVkaXQtYnV0dG9ucyB0aHJvdWdoIHRvIGRpdG8tbGFiZWwncyBvd24gZWRpdC1idXR0b25zIHNsb3Q6XG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICNlZGl0LWJ1dHRvbnNcbiAgICAgICAgICB2LWlmPVwiaW5saW5lZFwiXG4gICAgICAgIClcbiAgICAgICAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiAgICAgIGRpdG8tdGFicyhcbiAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICA6c2VsZWN0ZWRUYWI9XCJzZWxlY3RlZFRhYlwiXG4gICAgICApXG4gICAgICBkaXRvLWNsaXBib2FyZChcbiAgICAgICAgOmNsaXBib2FyZD1cImNsaXBib2FyZFwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIClcbiAgICBkaXRvLXBhbmUuZGl0by1wYW5lLXRhYihcbiAgICAgIHYtaWY9XCJoYXNUYWJzXCJcbiAgICAgIHYtZm9yPVwiKHNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgIHJlZj1cInRhYnNcIlxuICAgICAgOmtleT1cInRhYlwiXG4gICAgICA6dmlzaWJsZT1cInNlbGVjdGVkVGFiID09PSB0YWJcIlxuICAgICAgOnRhYj1cInRhYlwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNNYWluUGFuZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgKVxuICAgIHRyYW5zaXRpb24taGVpZ2h0KFxuICAgICAgOmVuYWJsZWQ9XCJpbmxpbmVkXCJcbiAgICApXG4gICAgICBkaXRvLXBhbmUuZGl0by1wYW5lLW1haW4oXG4gICAgICAgIHYtaWY9XCJoYXNNYWluUGFuZSAmJiBvcGVuZWRcIlxuICAgICAgICByZWY9XCJjb21wb25lbnRzXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc1RhYnNcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIClcbiAgICBzbG90KFxuICAgICAgbmFtZT1cImJ1dHRvbnNcIlxuICAgICAgdi1pZj1cIiFpbmxpbmVkICYmIGlzUG9wdWxhdGVkXCJcbiAgICApXG4gIHRlbXBsYXRlKHYtaWY9XCJpbmxpbmVkXCIpXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIhaGFzTGFiZWxcIlxuICAgICAgbmFtZT1cImVkaXQtYnV0dG9uc1wiXG4gICAgKVxuICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJpc1BvcHVsYXRlZFwiKVxuICAgIGRpdG8tcGFuZWxzKFxuICAgICAgOnBhbmVscz1cInBhbmVsU2NoZW1hc1wiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zY2hlbWFcbiAgICAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgLmRpdG8tc2NoZW1hLWhlYWRlcihcbiAgICAgICAgdi1pZj1cImhhc0xhYmVsIHx8IGhhc1RhYnMgfHwgY2xpcGJvYXJkXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtbWVudS1oZWFkZXInOiBtZW51SGVhZGVyIH1cIlxuICAgICAgKVxuICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgOmNvbGxhcHNlZD1cIiFvcGVuZWRcIlxuICAgICAgICAgIEBleHBhbmQ9XCJvbkV4cGFuZFwiXG4gICAgICAgIClcbiAgICAgICAgICAvLyBQYXNzIGVkaXQtYnV0dG9ucyB0aHJvdWdoIHRvIGRpdG8tbGFiZWwncyBvd24gZWRpdC1idXR0b25zIHNsb3Q6XG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAjZWRpdC1idXR0b25zXG4gICAgICAgICAgICB2LWlmPVwiaW5saW5lZFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgc2xvdChuYW1lPVwiZWRpdC1idXR0b25zXCIpXG4gICAgICAgIGRpdG8tdGFicyhcbiAgICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgICA6c2VsZWN0ZWRUYWI9XCJzZWxlY3RlZFRhYlwiXG4gICAgICAgIClcbiAgICAgICAgZGl0by1jbGlwYm9hcmQoXG4gICAgICAgICAgOmNsaXBib2FyZD1cImNsaXBib2FyZFwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIClcbiAgICAgIGRpdG8tcGFuZS5kaXRvLXBhbmUtdGFiKFxuICAgICAgICB2LWlmPVwiaGFzVGFic1wiXG4gICAgICAgIHYtZm9yPVwiKHNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgICAgcmVmPVwidGFic1wiXG4gICAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgICA6dmlzaWJsZT1cInNlbGVjdGVkVGFiID09PSB0YWJcIlxuICAgICAgICA6dGFiPVwidGFiXCJcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgICB0cmFuc2l0aW9uLWhlaWdodChcbiAgICAgICAgOmVuYWJsZWQ9XCJpbmxpbmVkXCJcbiAgICAgIClcbiAgICAgICAgZGl0by1wYW5lLmRpdG8tcGFuZS1tYWluKFxuICAgICAgICAgIHYtaWY9XCJoYXNNYWluUGFuZSAmJiBvcGVuZWRcIlxuICAgICAgICAgIHJlZj1cImNvbXBvbmVudHNcIlxuICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpzaW5nbGU9XCIhaW5saW5lZCAmJiAhaGFzVGFic1wiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgbmFtZT1cImJ1dHRvbnNcIlxuICAgICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgICAgKVxuICAgIHRlbXBsYXRlKHYtaWY9XCJpbmxpbmVkXCIpXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwiIWhhc0xhYmVsXCJcbiAgICAgICAgbmFtZT1cImVkaXQtYnV0dG9uc1wiXG4gICAgICApXG4gICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiaXNQb3B1bGF0ZWRcIilcbiAgICAgIGRpdG8tcGFuZWxzKFxuICAgICAgICA6cGFuZWxzPVwicGFuZWxTY2hlbWFzXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2NoZW1hXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC8vIFRvIGRpc3BsYXkgc2NoZW1hIG5leHQgdG8gcGFuZWxzOlxuICAgIGRpc3BsYXk6IGZsZXhcbiAgICBtaW4taGVpZ2h0OiAxMDAlXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudFxuICAgICAgZmxleDogMSAxIDEwMCVcbiAgICAgIC8vIFNvIHRoYXQgc2NoZW1hIGJ1dHRvbnMgY2FuIGJlIHN0aWNreSB0byB0aGUgYm90dG9tOlxuICAgICAgZGlzcGxheTogZ3JpZFxuICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW4tY29udGVudFxuICAgICAgPiAqOm9ubHktY2hpbGRcbiAgICAgICAgZ3JpZC1yb3ctZW5kOiBub25lXG4gICAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoXG4gICAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nXG4gICAgPiAuZGl0by1idXR0b25zLFxuICAgID4gLmRpdG8tcGFuZWxzXG4gICAgICBmbGV4OiAxIDEgMCVcbiAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nXG4gICAgPiAuZGl0by1wYW5lbHNcbiAgICAgIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmcgJGNvbnRlbnQtcGFkZGluZyAkY29udGVudC1wYWRkaW5nIDBcbiAgICAvLyBEaXNwbGF5IGEgcnVsZXIgYmV0d2VlbiB0YWJiZWQgY29tcG9uZW50cyBhbmQgdG93YXJkcyB0aGUgLmRpdG8tYnV0dG9uc1xuICAgIC5kaXRvLXBhbmUtdGFiICsgLmRpdG8tcGFuZS1tYWluXG4gICAgICAmOjpiZWZvcmVcbiAgICAgICAgLy8gVXNlIGEgcHNldWRvIGVsZW1lbnQgdG8gZGlzcGxheSBhIHJ1bGVyIHdpdGggcHJvcGVyIG1hcmdpbnNcbiAgICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgICAgY29udGVudDogJydcbiAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZVxuICAgICAgICAvLyBBZGQgcmVtb3ZlZCAkZm9ybS1zcGFjaW5nIGFnYWluIHRvIHRoZSBydWxlclxuICAgICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmcgJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmctaGFsZlxuICAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgZGlzcGxheTogZmxleFxuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgIC5kaXRvLXRhYnMsXG4gICAgLmRpdG8tY2xpcGJvYXJkXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZFxuICAgIC5kaXRvLWNsaXBib2FyZFxuICAgICAgJjpvbmx5LWNoaWxkXG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvXG4gICAgICAuZGl0by1idXR0b25cbiAgICAgICAgbWFyZ2luOiAwIDAgJHRhYi1tYXJnaW4gJHRhYi1tYXJnaW5cbiAgICAmLmRpdG8tc2NoZW1hLW1lbnUtaGVhZGVyXG4gICAgICAvLyBCcmluZyB0aGUgdGFicyB1cCB0byB0aGUgbWVudS5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgaGVpZ2h0OiAkbWVudS1oZWlnaHRcbiAgICAgIHBhZGRpbmc6IDAgJG1lbnUtcGFkZGluZy1ob3JcbiAgICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGhcbiAgICAgIHRvcDogMFxuICAgICAgbGVmdDogMFxuICAgICAgcmlnaHQ6IDBcbiAgICAgIHotaW5kZXg6ICRtZW51LXotaW5kZXhcbiAgICAgIC8vIFR1cm4gb2ZmIHBvaW50ZXIgZXZlbnRzIHNvIHRoYXQgRGl0b1RyYWlsIGtlZXBzIHJlY2VpdmluZyBldmVudHMuLi5cbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lXG4gICAgICAvLyAuLi5idXQgYWxsb3cgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdGFicyBhbmQgYnV0dG9ucyAoZS5nLiBjbGlwYm9hcmQpXG4gICAgICAvLyBsYXllcmVkIG9uIHRvcCBvZiBEaXRvVHJhaWwuXG4gICAgICAuZGl0by10YWJzLFxuICAgICAgLmRpdG8tYnV0dG9uc1xuICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0b1xuICAgICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHRcbiAgICAgICAgZm9udC1zaXplOiAkbWVudS1mb250LXNpemVcbiAgICBidXR0b24uZGl0by1sYWJlbFxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgIC8vIENhdGNoIGFsbCBjbGlja3MsIGV2ZW4gd2hlbiBpdCB3b3VsZCBiZSBwYXJ0aWFsbHkgY292ZXJlZCBieSBzY2hlbWEuXG4gICAgICB6LWluZGV4OiAxXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzQXJyYXksIGlzRnVuY3Rpb24sIGlzUmVnRXhwLFxuICBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aCwgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGdldE5hbWVkU2NoZW1hcywgZ2V0UGFuZWxTY2hlbWFzLCBzZXREZWZhdWx0cywgcHJvY2Vzc0RhdGFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NoZW1hJywge1xuICBjb21wb25lbnRzOiB7IFRyYW5zaXRpb25IZWlnaHQgfSxcbiAgbWl4aW5zOiBbSXRlbU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGluamVjdDogW1xuICAgICckc2NoZW1hUGFyZW50Q29tcG9uZW50J1xuICBdLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBpbmxpbmVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoYXNPd25EYXRhOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbWVudUhlYWRlcjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBwcm92aWRlIG1vcmUgZGF0YSB0aHJvdWdoIGBzY2hlbWEuZGF0YWAsIHZ1ZS1zdHlsZTpcbiAgICAgIC4uLihcbiAgICAgICAgZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgICAgPyBkYXRhLmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuICAgICAgICAgIDogZGF0YVxuICAgICAgKSxcbiAgICAgIGNvbXBvbmVudHNSZWdpc3RyeToge30sXG4gICAgICBwYW5lc1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVsc1JlZ2lzdHJ5OiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHNjaGVtYUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFyZW50IHNjaGVtYSBpcyB0aGlzIHNjaGVtYSBoYW5kbGVzIGl0cyBvd25cbiAgICAgIC8vIGRhdGEuIFRoaXMgcHJldmVudHMgZGVsZWdhdGluZyBldmVudHMgdG8gdGhlIHBhcmVudCwgYW5kIHJlZ2lzdGVyaW5nXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggdGhlIHBhcmVudCB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIHNldCBpc0RpcnR5IGZsYWdzLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IG51bGwgOiB0aGlzLiRwYXJlbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhbmVsU2NoZW1hcygpIHtcbiAgICAgIGNvbnN0IHBhbmVscyA9IGdldFBhbmVsU2NoZW1hcyh0aGlzLnNjaGVtYS5wYW5lbHMsICcnKVxuICAgICAgZm9yIChjb25zdCBwYW5lIG9mIHRoaXMucGFuZXMpIHtcbiAgICAgICAgcGFuZWxzLnB1c2goLi4ucGFuZS5wYW5lbFNjaGVtYXMpXG4gICAgICB9XG4gICAgICByZXR1cm4gcGFuZWxzXG4gICAgfSxcblxuICAgIHRhYnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnRhYnMpXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgY29uc3QgY3VycmVudFRhYiA9IHRoaXMuJHJvdXRlLmhhc2g/LnNsaWNlKDEpIHx8IG51bGxcbiAgICAgIGNvbnN0IHRhYiA9IGN1cnJlbnRUYWIgJiYgdGhpcy5zaG91bGRSZW5kZXIodGhpcy50YWJzW2N1cnJlbnRUYWJdKVxuICAgICAgICA/IGN1cnJlbnRUYWJcbiAgICAgICAgOiB0aGlzLmRlZmF1bHRUYWI/Lm5hbWUgfHwgbnVsbFxuICAgICAgaWYgKHRhYiAhPT0gY3VycmVudFRhYikge1xuICAgICAgICAvLyBBbnkgdGFiIGNoYW5nZSBuZWVkcyB0byBiZSByZWZsZWN0ZWQgaW4gdGhlIHJvdXRlciBhbHNvLlxuICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IGhhc2g6IHRhYiB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRhYlxuICAgIH0sXG5cbiAgICBkZWZhdWx0VGFiKCkge1xuICAgICAgaWYgKHRoaXMudGFicykge1xuICAgICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICAgIGZvciAoY29uc3QgdGFiIG9mIE9iamVjdC52YWx1ZXModGhpcy50YWJzKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFRhYiB9ID0gdGFiXG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdFRhYilcbiAgICAgICAgICAgID8gZGVmYXVsdFRhYi5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAgIDogZGVmYXVsdFRhYlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hPy5jbGlwYm9hcmRcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnc2VydmVyJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmREYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJHNjaGVtYTogdGhpcy5zY2hlbWEubmFtZSxcbiAgICAgICAgLi4udGhpcy5wcm9jZXNzRGF0YSh7IHRhcmdldDogJ2NsaXBib2FyZCcsIHNjaGVtYU9ubHk6IHRydWUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFyZSBzaW1pbGFyIHRvIGBEaXRvQ29udGV4dGBcbiAgICAvLyBwcm9wZXJ0aWVzLCBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlc2Ugb24gYHRoaXNgIGFzIHdlbGw6XG4gICAgLy8gTk9URTogV2hpbGUgaW50ZXJuYWxseSwgd2Ugc3BlYWsgb2YgYGRhdGFgLCBpbiB0aGUgQVBJIHN1cmZhY2UgdGhlXG4gICAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0cy5cbiAgICAvLyBOT1RFOiBUaGlzIHNob3VsZCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIGFzOlxuICAgIC8vIHJldHVybiBnZXRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZERhdGFcbiAgICB9LFxuXG4gICAgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsaXBib2FyZERhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkYXRlZClcbiAgICB9LFxuXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMubGFiZWwgfHwgdGhpcy5jb2xsYXBzaWJsZVxuICAgIH0sXG5cbiAgICBoYXNUYWJzKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlubGluZWQgJiYgISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaGFzTWFpblBhbmUoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gISFjb21wb25lbnRzICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgb3BlbmVkOiBnZXRTdG9yZUFjY2Vzc29yKCdvcGVuZWQnLCB7XG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sbGFwc2VkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gICAgLy8gRGVsZWdhdGUgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIHBhcmVudCBzY2hlbWE6XG4gICAgdGhpcy5kZWxlZ2F0ZSgnY2hhbmdlJywgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQpXG4gICAgdGhpcy5lbWl0RXZlbnQoJ2luaXRpYWxpemUnKSAvLyBOb3QgYCdjcmVhdGUnYCwgc2luY2UgdGhhdCdzIGZvciBkYXRhLlxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5lbWl0RXZlbnQoJ2Rlc3Ryb3knKVxuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChcbiAgICAgICAgdGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5TmFtZShkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlOYW1lKG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgc29tZUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLnNvbWUoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIGV2ZXJ5Q29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuZXZlcnkoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIG9uRXhwYW5kKGV4cGFuZCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2V4cGFuZCcsIHtcbiAgICAgICAgLy8gVE9ETzogQWN0dWFsbHkgZXhwb3NlIHRoaXMgb24gRGl0b0NvbnRleHQ/XG4gICAgICAgIGNvbnRleHQ6IHsgZXhwYW5kIH1cbiAgICAgIH0pXG4gICAgICAvLyBQcmV2ZW50IGNsb3NpbmcgdGhlIHNjaGVtYSB3aXRoIGludmFsaWQgZGF0YSwgc2luY2UgdGhlIGluLWNvbXBvbmVudFxuICAgICAgLy8gdmFsaWRhdGlvbiB3aWxsIG5vdCBiZSBleGVjdXRlZCBvbmNlIGl0J3MgY2xvc2VkLlxuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHZhbGlkYXRpb24gb3V0IG9mIGNvbXBvbmVudHMsIHRvIHNjaGVtYSwganVzdCBsaWtlXG4gICAgICAvLyBwcm9jZXNzaW5nLCBhbmQgdXNlIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCBmb3IgdGhlIHJlc3VsdGluZyBlcnJvcnMsXG4gICAgICAvLyB0aGVuIHJlbW92ZSB0aGlzIHJlcXVpcmVtZW50LCBzaW5jZSB3ZSBjYW4gdmFsaWRhdGUgY2xvc2VkIGZvcm1zIGFuZFxuICAgICAgLy8gc2NoZW1hcyB0aGVuLlxuICAgICAgaWYgKCF0aGlzLm9wZW5lZCB8fCBleHBhbmQgfHwgdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHRoaXMub3BlbmVkID0gZXhwYW5kXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlXG4gICAgfSxcblxuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHNCeURhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBsZXQgZGF0YVBhdGhzXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSBpc0Z1bmN0aW9uKG1hdGNoKVxuICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICA6IGlzUmVnRXhwKG1hdGNoKVxuICAgICAgICAgICAgPyBmaWVsZCA9PiBtYXRjaC50ZXN0KGZpZWxkKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGRhdGFQYXRocyA9IGNoZWNrXG4gICAgICAgICAgPyBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aCkuZmlsdGVyKGNoZWNrKVxuICAgICAgICAgIDogaXNBcnJheShtYXRjaClcbiAgICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICAgIDogW21hdGNoXVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgZGF0YVBhdGhzIHx8PSBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aClcbiAgICAgIGZvciAoY29uc3QgZGF0YVBhdGggb2YgZGF0YVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKCFjb21wb25lbnQudmFsaWRhdGUobm90aWZ5KSkge1xuICAgICAgICAgICAgLy8gRm9jdXMgZmlyc3QgZXJyb3IgZmllbGRcbiAgICAgICAgICAgIGlmIChub3RpZnkgJiYgZmlyc3QpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LmZvY3VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSAmJiAhaXNWYWxpZCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycygpXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsKG1hdGNoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBjb25zdCB1bm1hdGNoZWQgPSBbXVxuICAgICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIGVycnNdIG9mIE9iamVjdC5lbnRyaWVzKGVycm9ycykpIHtcbiAgICAgICAgLy8gSWYgdGhlIHNjaGVtYSBpcyBhIGRhdGEtcm9vdCwgcHJlZml4IGl0cyBvd24gZGF0YVBhdGggdG8gYWxsIGVycm9ycyxcbiAgICAgICAgLy8gc2luY2UgdGhlIGRhdGEgdGhhdCBpdCBzZW5kcyBhbmQgdmFsaWRhdGVzIHdpbGwgYmUgdW5wcmVmaXhlZC5cbiAgICAgICAgY29uc3QgZnVsbERhdGFQYXRoID0gdGhpcy5oYXNPd25EYXRhXG4gICAgICAgICAgPyBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgICA6IGRhdGFQYXRoXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMsIHRoaXMuZGF0YVBhdGgsIHRoaXMuaGFzT3duRGF0YSwgZnVsbERhdGFQYXRoKVxuICAgICAgICAvLyBDb252ZXJ0IGZyb20gSmF2YVNjcmlwdCBwcm9wZXJ0eSBhY2Nlc3Mgbm90YXRpb24sIHRvIG91ciBvd24gZm9ybVxuICAgICAgICAvLyBvZiByZWxhdGl2ZSBKU09OIHBvaW50ZXJzIGFzIGRhdGEtcGF0aHM6XG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGZ1bGxEYXRhUGF0aClcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmIChjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIC8vIENvdWxkbid0IGZpbmQgYSBjb21wb25lbnQgaW4gYW4gYWN0aXZlIGZvcm0gZm9yIHRoZSBnaXZlbiBkYXRhUGF0aC5cbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjb21wb25lbnQgc2VydmluZyBhIHBhcnQgb2YgdGhlIGRhdGFQYXRoLFxuICAgICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgaWYgKGF3YWl0IGNvbXBvbmVudC5uYXZpZ2F0ZVRvQ29tcG9uZW50Py4oXG4gICAgICAgICAgICAgICAgZnVsbERhdGFQYXRoLFxuICAgICAgICAgICAgICAgIHN1YkNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHN1YkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJycyA9IGVycm9yc1tjb21wb25lbnQuZGF0YVBhdGhdXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICBlcnJzICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgbmVzdGVkIGZvcm0gdG8gZGlzcGxheSBhdCBsZWFzdCBwYXJ0cyBmbyB0aGUgZXJyb3JzLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHNob3cgYWxsIGVycm9ycyBhdCBvbmNlLCBzbyB3ZSdyZSBkb25lLiBEb24ndCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYG5vdGlmeUVycm9ycygpYCB5ZXQsIGFzIHdlIGNhbiBvbmx5IGRpc3BsYXkgaXQgb25jZVxuICAgICAgICAgICAgICAgIC8vIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCB3YXMgY2FsbGVkIGZyb20gYERpdG9Gb3JtLm1vdW50ZWQoKWBcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RpbGwgaGVyZSwgc28ga2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2hlbiB0aGUgZXJyb3IgY2FuJ3QgYmUgbWF0Y2hlZCwgYWRkIGl0IHRvIGEgbGlzdCBvZiB1bm1hdGNoZWRcbiAgICAgICAgICAvLyBlcnJvcnMgd2l0aCBkZWNlbnQgbWVzc2FnZSwgdG8gcmVwb3J0IGF0IHRoZSBlbmQuXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBsYWJlbGl6ZShwcm9wZXJ0eSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBmaWVsZFxuICAgICAgICAgICAgICA/IGBUaGUgZmllbGQgJHtmaWVsZH1gXG4gICAgICAgICAgICAgIDogYFRoZSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKGAke3ByZWZpeH0gJHtlcnIubWVzc2FnZX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKHVubWF0Y2hlZC5qb2luKCdcXG4nKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbm90aWZ5RXJyb3JzKG1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdWYWxpZGF0aW9uIEVycm9ycycsXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UgfHwgJ1BsZWFzZSBjb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBlcnJvcnMuJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVzZXREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGB0aGlzLmRhdGEgPSAuLi5gIGJlY2F1c2UgaXQncyBhIHByb3BlcnR5LCBidXQgd2UgY2FuXG4gICAgICAvLyBzZXQgYWxsIGtub3duIHByb3BlcnRpZXMgb24gaXQgdG8gdGhlIHZhbHVlcyByZXR1cm5lZCBieVxuICAgICAgLy8gYHNldERlZmF1bHRzKClgLCBhcyB0aGV5IGFyZSBhbGwgcmVhY3RpdmUgYWxyZWFkeSBmcm9tIHRoZSBzdGFydHM6XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGF0YSwgc2V0RGVmYXVsdHModGhpcy5zY2hlbWEsIHt9LCB0aGlzKSlcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgIHRoaXMuJHNldCh0aGlzLmRhdGEsIG5hbWUsIGRhdGFbbmFtZV0pXG4gICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpKSB7XG4gICAgICAgICAgICBjb21wb25lbnQubWFya0RpcnR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZmlsdGVyRGF0YShkYXRhKSB7XG4gICAgICAvLyBGaWx0ZXJzIG91dCBhcnJheXMgYW5kIG9iamVjdHMgdGhhdCBhcmUgYmFjayBieSBkYXRhIHJlc291cmNlc1xuICAgICAgLy8gdGhlbXNlbHZlcywgYXMgdGhvc2UgYXJlIGFscmVhZHkgdGFraW5nIGNhcmUgb2YgdGhyb3VnaCB0aGVpciBvd24gQVBJXG4gICAgICAvLyByZXNvdXJjZSBlbmQtcG9pbnRzIGFuZCBzaG91bGRuJ3QgYmUgc2V0LlxuICAgICAgY29uc3QgY29weSA9IHt9XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpIHx8IGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSlcbiAgICAgICAgICBpZiAoY29tcG9uZW50cy5zb21lKGNvbXBvbmVudCA9PiBjb21wb25lbnQucHJvdmlkZXNEYXRhKSkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29weVtuYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gY29weVxuICAgIH0sXG5cbiAgICBwcm9jZXNzRGF0YSh7IHRhcmdldCA9ICdjbGlwYm9hcmQnLCBzY2hlbWFPbmx5ID0gdHJ1ZSB9ID0ge30pIHtcbiAgICAgIHJldHVybiBwcm9jZXNzRGF0YShcbiAgICAgICAgdGhpcy5zY2hlbWEsXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICB0aGlzLmRhdGEsXG4gICAgICAgIHRoaXMuZGF0YVBhdGgsIHtcbiAgICAgICAgICAvLyBOZWVkZWQgZm9yIERpdG9Db250ZXh0IGhhbmRsaW5nIGluc2lkZSBgcHJvY2Vzc0RhdGFgIGFuZFxuICAgICAgICAgIC8vIGBwcm9jZXNzU2NoZW1hRGF0YSgpYDpcbiAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgc2NoZW1hT25seSxcbiAgICAgICAgICB0YXJnZXRcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBgJHNjaGVtYVBhcmVudENvbXBvbmVudCgpYCBpcyBvbmx5IHNldCBpZiBvbmUgb2YgdGhlIGFuY2VzdG9ycyB1c2VzXG4gICAgICAvLyB0aGUgYFNjaGVtYVBhcmVudE1peGluYDpcbiAgICAgIHRoaXMuJHNjaGVtYVBhcmVudENvbXBvbmVudCgpPy5fcmVnaXN0ZXJTY2hlbWFDb21wb25lbnQodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50LCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5jb21wb25lbnRzUmVnaXN0cnksIGNvbXBvbmVudCwgYWRkKVxuICAgICAgLy8gT25seSByZWdpc3RlciB3aXRoIHRoZSBwYXJlbnQgaWYgc2NoZW1hIHNoYXJlcyBkYXRhIHdpdGggaXQuXG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJQYW5lKHBhbmUsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVzUmVnaXN0cnksIHBhbmUsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZWwocGFuZWwsIGFkZCkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJFbnRyeSh0aGlzLnBhbmVsc1JlZ2lzdHJ5LCBwYW5lbCwgYWRkKVxuICAgIH0sXG5cbiAgICBfcmVnaXN0ZXJFbnRyeShyZWdpc3RyeSwgZW50cnksIGFkZCkge1xuICAgICAgY29uc3QgdWlkID0gZW50cnkuJHVpZFxuICAgICAgaWYgKGFkZCkge1xuICAgICAgICB0aGlzLiRzZXQocmVnaXN0cnksIHVpZCwgZW50cnkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiRkZWxldGUocmVnaXN0cnksIHVpZClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2xpc3RFbnRyaWVzQnlEYXRhUGF0aChyZWdpc3RyeSkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVnaXN0cnkpLnJlZHVjZSgoZW50cmllc0J5RGF0YVBhdGgsIGVudHJ5KSA9PiB7XG4gICAgICAgIC8vIE11bHRpcGxlIGVudHJpZXMgY2FuIGJlIGxpbmtlZCB0byB0aGUgc2FtZSBkYXRhLXBhdGgsIGUuZy4gd2hlblxuICAgICAgICAvLyB0aGVyZSBhcmUgdGFicy4gTGluayBlYWNoIGRhdGEtcGF0aCB0byBhbiBhcnJheSBvZiBlbnRyaWVzLlxuICAgICAgICBjb25zdCB7IGRhdGFQYXRoIH0gPSBlbnRyeVxuICAgICAgICBjb25zdCBlbnRyaWVzID0gZW50cmllc0J5RGF0YVBhdGhbZGF0YVBhdGhdIHx8PSBbXVxuICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFxuICAgICAgfSwge30pXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCkuc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICA/IHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgICAgIDogdGhpcy5fZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5RGF0YVBhdGgoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW25vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBuYW1lLCBtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlckVudHJpZXMoXG4gICAgICAgIGVudHJpZXNCeURhdGFQYXRoW2FwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXSB8fCBbXSxcbiAgICAgICAgbWF0Y2hcbiAgICAgIClcbiAgICB9LFxuXG4gICAgX2ZpbHRlckVudHJpZXMoZW50cmllcywgbWF0Y2gpIHtcbiAgICAgIHJldHVybiBtYXRjaCA/IGVudHJpZXMuZmlsdGVyKG1hdGNoKSA6IGVudHJpZXNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuZGl0by1zY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgOnNjaGVtYT1cInNjaGVtYVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICA6aW5saW5lZD1cInRydWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWNvbXBhY3QnOiBpc0NvbXBhY3QgfVwiXG4pXG4gIC8vIFJlbmRlciBkaXRvLWVkaXQtYnV0dG9ucyBmb3IgaW5saW5lZCBzaGVtYXMgc2VwYXJhdGVseSBmcm9tIGFsbFxuICAvLyBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIHYtaWY9XCJkZWxldGFibGUgfHwgZHJhZ2dhYmxlIHx8IGVkaXRhYmxlXCJcbiAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1zY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICAgIDppbmxpbmVkPVwidHJ1ZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuICApXG4gICAgLy8gUmVuZGVyIGRpdG8tZWRpdC1idXR0b25zIGZvciBpbmxpbmVkIHNoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gICAgLy8gb3RoZXJzIGluIGBUeXBlTGlzdGAgYXMgYSBzY29wZSwgZm9yIGJldHRlciBoYW5kbGluZyBvZiBsYXlvdXQuXG4gICAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgQGRlbGV0ZT1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tc2NoZW1hLWlubGluZWRcbiAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICBwYWRkaW5nOiAwXG4gICAgICA+IC5kaXRvLXNjaGVtYS1oZWFkZXJcbiAgICAgICAgLy8gQ2hhbmdlIHNwYWNpbmcgc28gLmRpdG8tbGFiZWwgY292ZXJzIHRoZSBmdWxsIC5kaXRvLXNjaGVtYS1oZWFkZXIuXG4gICAgICAgIG1hcmdpbjogLSRmb3JtLXNwYWNpbmdcbiAgICAgICAgLmRpdG8tbGFiZWxcbiAgICAgICAgICAvLyBBZGQgcmVtb3ZlZCAkZm9ybS1zcGFjaW5nIGFnYWluXG4gICAgICAgICAgLS1sYWJlbC1wYWRkaW5nOiAjeyRmb3JtLXNwYWNpbmd9XG4gICAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICAgICAgLy8gQmVjYXVzZSB0YWJsZXMgaGF2ZSBhIGZ1bm55IHdheSBvZiBhbGxvd2luZyB0b28gbXVjaCB3aWR0aCBncm93dGg6XG4gICAgICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aFxuICAgICAgICAmICsuZGl0by1wYW5lXG4gICAgICAgICAgLy8gTmVlZGVkIGZvciB0cmFuc2l0aW9uLWhlaWdodCBpbiBEaXRvU2NoZW1hOlxuICAgICAgICAgIG1pbi1oZWlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNDb21wYWN0IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXNjaGVtYS1pbmxpbmVkJywge1xuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzQ29tcGFjdCgpIHtcbiAgICAgIHJldHVybiBpc0NvbXBhY3QodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzQ29tcGFjdCAmJiAhIXRoaXMubGFiZWxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tcGFuZShcbiAgdi1pZj1cImlzUG9wdWxhdGVkICYmIGNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID4gMFwiXG4gIHYtc2hvdz1cInZpc2libGVcIlxuKVxuICB0ZW1wbGF0ZShcbiAgICB2LWZvcj1ge1xuICAgICAgc2NoZW1hLFxuICAgICAgZGF0YVBhdGgsXG4gICAgICBuZXN0ZWREYXRhUGF0aCxcbiAgICAgIG5lc3RlZCxcbiAgICAgIHN0b3JlXG4gICAgfSBpbiBjb21wb25lbnRTY2hlbWFzYFxuICApXG4gICAgLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgKVxuICAgIGRpdG8tY29udGFpbmVyKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJuZXN0ZWREYXRhUGF0aFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgIClcbiAgICAuZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXBhbmUoXG4gICAgdi1pZj1cImlzUG9wdWxhdGVkICYmIGNvbXBvbmVudFNjaGVtYXMubGVuZ3RoID4gMFwiXG4gICAgdi1zaG93PVwidmlzaWJsZVwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZm9yPWB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIHN0b3JlXG4gICAgICB9IGluIGNvbXBvbmVudFNjaGVtYXNgXG4gICAgKVxuICAgICAgLmRpdG8tYnJlYWsoXG4gICAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdiZWZvcmUnXCJcbiAgICAgIClcbiAgICAgIGRpdG8tY29udGFpbmVyKFxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHNjaGVtYSlcIlxuICAgICAgICA6a2V5PVwibmVzdGVkRGF0YVBhdGhcIlxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLWJyZWFrKFxuICAgICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1wYW5lXG4gICAgZGlzcGxheTogZmxleFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIGZsZXgtZmxvdzogcm93IHdyYXBcbiAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lXG4gICAgLy8gUmVtb3ZlIHBhZGRpbmcgYWRkZWQgYnkgYC5kaXRvLWNvbnRhaW5lcmBcbiAgICBtYXJnaW46ICgtJGZvcm0tc3BhY2luZykgKC0kZm9ybS1zcGFjaW5nLWhhbGYpXG4gICAgLy8gQWRkIHJlbW92ZWQgaG9yaXpvbnRhbCBtYXJnaW4gYWdhaW4gdG8gbWF4LXdpZHRoOlxuICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGggKyAyICogJGZvcm0tc3BhY2luZy1oYWxmXG4gICAgLy8gVXNlIGBmbGV4OiAwJWAgZm9yIGFsbCBgLmRpdG8tcGFuZWAgZXhjZXB0IGAuZGl0by1wYW5lLW1haW5gLFxuICAgIC8vIHNvIHRoYXQgdGhlIGAuZGl0by1idXR0b25zLW1haW5gIGNhbiBiZSBtb3ZlZCBhbGwgdGhlIHdheSB0byB0aGUgYm90dG9tLlxuICAgIGZsZXg6IDAlXG5cbiAgICAmLmRpdG8tcGFuZS1tYWluXG4gICAgICBmbGV4OiAxMDAlXG5cbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyOm5vdCguZGl0by1zY2hlbWEtbWVudS1oZWFkZXIpICsgJlxuICAgICAgLy8gQ2xlYXIgdG9wLW1hcmdpbiBpZiB0aGUgY29tcG9uZW50cyBhcmUgcHJlY2VkZWQgYnkgYSBzY2hlbWEgaGVhZGVyLlxuICAgICAgbWFyZ2luLXRvcDogMFxuXG4gICAgLmRpdG8tY29udGFpbmVyLmRpdG8tb21pdC1wYWRkaW5nID4gJlxuICAgICAgLy8gQ2xlYXIgbWFyZ2lucyBzZXQgYWJvdmUgYWdhaW4gaWYgcGFyZW50IGlzIG9taXR0aW5nIHBhZGRpbmcuXG4gICAgICBtYXJnaW46IDBcbiAgICAgIG1heC13aWR0aDogdW5zZXRcblxuICAgIC5kaXRvLWJyZWFrXG4gICAgICBmbGV4OiAxMDAlXG4gICAgICBoZWlnaHQ6IDBcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0QWxsUGFuZWxTY2hlbWFzLCBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmUnLCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMudGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGFiOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHZpc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy50YWIgPyB0aGlzIDogdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgY29tcG9uZW50U2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBjb21wb25lbnRzIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzXG4gICAgICAvLyBhbmQgYWRkcyB0aGUga2V5IGFzIHRoZSBuYW1lIHRvIGVhY2ggY29tcG9uZW50LCB1c2VkIGZvciBsYWJlbHMsIGV0Yy5cbiAgICAgIC8vIE5PVEU6IHNjaGVtYSBjYW4gYmUgbnVsbCB3aGlsZSBtdWx0aS1mb3JtIGxpc3RzIGxvYWQgdGhlaXIgZGF0YSxcbiAgICAgIC8vIGJlY2F1c2Ugb25seSB0aGUgYXZhaWxhYmxlIGRhdGEgd2lsbCBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgZm9ybS5cbiAgICAgIC8vIFdoZW4gZWRpdGluZyBwcmltaXRpdmUgdmFsdWVzIHRocm91Z2ggYSBmb3JtLCBkbyBub3QgYXBwZW5kICduYW1lJyB0b1xuICAgICAgLy8gdGhlIGNvbXBvbmVudCdzIGRhdGFQYXRoIHNvIGl0IGNhbiBiZSBtYXBwZWQgdG8gZnJvbSB2YWxpZGF0aW9uIGVycm9ycy5cbiAgICAgIC8vIE5PVEU6IE5vdCBhbGwgc2NoZW1hcyAvIGNvbXBvbmVudHMgaGF2ZSBhIHNvdXJjZVNjaGVtYSwgZS5nLiBkaWFsb2dzLlxuICAgICAgY29uc3Qgd3JhcFByaW1pdGl2ZXMgPSB0aGlzLnNvdXJjZVNjaGVtYT8ud3JhcFByaW1pdGl2ZXNcbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYT8uY29tcG9uZW50cyB8fCB7fSkubWFwKFxuICAgICAgICAoW25hbWUsIHNjaGVtYV0pID0+IHtcbiAgICAgICAgICAvLyBBbHdheXMgYWRkIG5hbWUgdG8gY29tcG9uZW50IHNjaGVtYS5cbiAgICAgICAgICBzY2hlbWEubmFtZSA9IG5hbWVcbiAgICAgICAgICAvLyBTaGFyZSBkYXRhUGF0aCBhbmQgc3RvcmUgd2l0aCBwYXJlbnQgaWYgbm90IG5lc3RlZDpcbiAgICAgICAgICBjb25zdCBuZXN0ZWQgPSBpc05lc3RlZChzY2hlbWEpXG4gICAgICAgICAgY29uc3QgbmVzdGVkRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBkYXRhUGF0aDogbmVzdGVkICYmICF3cmFwUHJpbWl0aXZlc1xuICAgICAgICAgICAgICA/IG5lc3RlZERhdGFQYXRoXG4gICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IG5lc3RlZCA/IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKSA6IHRoaXMuc3RvcmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWFzKCkge1xuICAgICAgLy8gR2F0aGVyIGFsbCBwYW5lbCBzY2hlbWFzIGZyb20gYWxsIGNvbXBvbmVudCBzY2hlbWFzLCBieSBmaW5kaW5nIHRob3NlXG4gICAgICAvLyB0aGF0IHdhbnQgdG8gcHJvdmlkZSBhIHBhbmVsLiBTZWUgYGdldEFsbFBhbmVsU2NoZW1hcygpYCBmb3IgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFNjaGVtYXMuZmxhdE1hcChcbiAgICAgICAgKHsgc2NoZW1hLCBuZXN0ZWREYXRhUGF0aDogZGF0YVBhdGggfSkgPT4gZ2V0QWxsUGFuZWxTY2hlbWFzKFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudCxcbiAgICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlICYmIHRoaXMuY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPT09IDFcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICB9LFxuXG4gIGJlZm9yZURlc3Ryb3koKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlclBhbmUodGhpcywgYWRkKVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIGlmICh0aGlzLnRhYikge1xuICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IGhhc2g6IHRoaXMudGFiIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyYWN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IG1hdGNoID0gKFxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJlxuICAgIHZhbHVlLm1hdGNoKC9eXFxzKihbKy1dP1xcZCspXFxzKlxcL1xccyooWystXT9cXGQrKVxccyokLylcbiAgKVxuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBkaXZpZGVuZCwgZGl2aXNvcl0gPSBtYXRjaFxuICAgIHJldHVybiBwYXJzZUZsb2F0KGRpdmlkZW5kKSAvIHBhcnNlRmxvYXQoZGl2aXNvcilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgfVxufVxuIiwiXG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gIDpzdHlsZT1cImNvbnRhaW5lclN0eWxlXCJcbilcbiAgZGl0by1sYWJlbChcbiAgICB2LWlmPVwibGFiZWxcIlxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gIClcbiAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgIDppcz1cImdldFR5cGVDb21wb25lbnQoc2NoZW1hLnR5cGUpXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6c2luZ2xlPVwic2luZ2xlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgOmNsYXNzPVwiY29tcG9uZW50Q2xhc3NcIlxuICAgIEBlcnJvcnM9XCJvbkVycm9yc1wiXG4gIClcbiAgZGl0by1lcnJvcnMoXG4gICAgOmVycm9ycz1cImVycm9yc1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWNvbnRhaW5lcihcbiAgICB2LXNob3c9XCJjb21wb25lbnRWaXNpYmxlXCJcbiAgICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc1wiXG4gICAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuICApXG4gICAgZGl0by1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbFwiXG4gICAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICApXG4gICAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgICAgOmlzPVwiZ2V0VHlwZUNvbXBvbmVudChzY2hlbWEudHlwZSlcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJjb21wb25lbnREaXNhYmxlZFwiXG4gICAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICAgIClcbiAgICBkaXRvLWVycm9ycyhcbiAgICAgIDplcnJvcnM9XCJlcnJvcnNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jb250YWluZXJcbiAgICAvLyBOZWVkZWQgZm9yIGJldHRlciB2ZXJ0aWNhbCBhbGlnbm1lbnQ6XG4gICAgYWxpZ24tc2VsZjogc3RyZXRjaFxuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAvLyBUbyBwcmV2ZW50IGxpc3QgdGFibGVzIGZyb20gYmxvd2luZyBvdXQgb2YgdGhlaXIgZmxleCBib3ggY29udGFpbmVycy5cbiAgICBtYXgtd2lkdGg6IDEwMCVcbiAgICAvLyBDYW5ub3QgdXNlIG1hcmdpbiBoZXJlIGFzIGl0IG5lZWRzIHRvIGJlIHBhcnQgb2YgYm94LXNpemluZyBmb3JcbiAgICAvLyBwZXJjZW50YWdlcyBpbiBmbGV4LWJhc2lzIHRvIHdvcmsuXG4gICAgcGFkZGluZzogJGZvcm0tc3BhY2luZyAkZm9ybS1zcGFjaW5nLWhhbGZcbiAgICAmOmVtcHR5XG4gICAgICBwYWRkaW5nOiAwXG4gICAgJi5kaXRvLW9taXQtcGFkZGluZ1xuICAgICAgcGFkZGluZzogMFxuICAgICAgPiAuZGl0by1sYWJlbFxuICAgICAgICBtYXJnaW46ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmIDBcbiAgICAmLmRpdG8tc2luZ2xlXG4gICAgICBoZWlnaHQ6IDEwMCUgLy8gU28gdGhhdCBsaXN0IGJ1dHRvbnMgY2FuIGJlIHN0aWNreSBhdCB0aGUgYm90dG9tXG4gIC8vIE5PVEU6IFRoaXMgaXMgbm90IG5lc3RlZCBpbnNpZGUgYC5kaXRvLWNvbnRhaW5lcmAgc28gdGhhdCBvdGhlclxuICAvLyB0eXBlIGNvbXBvbmVudHMgY2FuIG92ZXJyaWRlIGAuZGl0by13aWR0aC1maWxsYCBjbGFzcyAoZmlsdGVyIHByZWNlZGVuY2UpLlxuICAuZGl0by1jb21wb25lbnRcbiAgICAmLmRpdG8td2lkdGgtZmlsbFxuICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICYuZGl0by1jaGVja2JveCxcbiAgICAgICYuZGl0by1yYWRpby1idXR0b25cbiAgICAgICAgLy8gV2ViS2l0IGRvZXNuJ3QgbGlrZSBjaGFuZ2VkIHdpZHRoIG9uIGNoZWNrYm94ZXMgYW5kIHJhZGlvcywgb3ZlcnJpZGU6XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9ja1xuICAgICAgICB3aWR0aDogYXV0b1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBpc051bWJlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldFR5cGVPcHRpb25zLCBzaG91bGRPbWl0UGFkZGluZyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHBhcnNlRnJhY3Rpb24gfSBmcm9tICcuLi91dGlscy9tYXRoLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tY29udGFpbmVyJywge1xuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHR5cGVPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGdldFR5cGVPcHRpb25zKHRoaXMuc2NoZW1hKSB8fCB7fVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSBzY2hlbWFcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGxhYmVsICE9PSBmYWxzZSAmJlxuICAgICAgICAoISFsYWJlbCB8fCB0aGlzLnR5cGVPcHRpb25zLmdlbmVyYXRlTGFiZWwgJiYgdGhpcy5nZW5lcmF0ZUxhYmVscylcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNMYWJlbCA/IHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEpIDogbnVsbFxuICAgIH0sXG5cbiAgICBsYWJlbERhdGFQYXRoKCkge1xuICAgICAgLy8gVW5uZXN0ZWQgdHlwZXMgZG9uJ3QgaGF2ZSBhIGRhdGFQYXRoIGZvciB0aGVtc2VsdmVzLCBkb24ndCB1c2UgaXQ6XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLmRhdGFQYXRoIDogbnVsbFxuICAgIH0sXG5cbiAgICBjb21wb25lbnRXaWR0aDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3dpZHRoJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVPcHRpb25zLmRlZmF1bHRXaWR0aFxuICAgICAgfSxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICAvLyBVc2UgMTAwJSA9PSAxLjAgYXMgZGVmYXVsdCB3aWR0aCB3aGVuIG5vdGhpbmcgaXMgc2V0OlxuICAgICAgICByZXR1cm4gd2lkdGggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gMS4wXG4gICAgICAgICAgOiBpc1N0cmluZyh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqWzw+XT9cXHMqKC4qKSQvKVsxXSAvLyBSZW1vdmUgd2lkdGggb3BlcmF0b3JcbiAgICAgICAgICAgIDogd2lkdGhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFdpZHRoT3BlcmF0b3I6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGdldCh3aWR0aCkge1xuICAgICAgICByZXR1cm4gaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgPyB3aWR0aC5tYXRjaCgvXlxccyooWzw+XT8pLylbMV0gfHwgbnVsbFxuICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29tcG9uZW50VmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZU9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudERpc2FibGVkOiBnZXRTY2hlbWFBY2Nlc3NvcignZGlzYWJsZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIGRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbnRhaW5lckNsYXNzKCkge1xuICAgICAgY29uc3QgeyBjbGFzczogY29udGFpbmVyQ2xhc3MgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tb21pdC1wYWRkaW5nJzogc2hvdWxkT21pdFBhZGRpbmcodGhpcy5zY2hlbWEpLFxuICAgICAgICAuLi4oXG4gICAgICAgICAgaXNTdHJpbmcoY29udGFpbmVyQ2xhc3MpXG4gICAgICAgICAgICA/IHsgW2NvbnRhaW5lckNsYXNzXTogdHJ1ZSB9XG4gICAgICAgICAgICA6IGNvbnRhaW5lckNsYXNzXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50QmFzaXMoKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IHRoaXMuY29tcG9uZW50V2lkdGhcbiAgICAgIC8vICdhdXRvJyA9IG5vIGZpdHRpbmc6XG4gICAgICBjb25zdCBiYXNpcyA9IChcbiAgICAgICAgW251bGwsICdhdXRvJywgJ2ZpbGwnXS5pbmNsdWRlcyh3aWR0aCkgPyAnYXV0bydcbiAgICAgICAgOiAvJSQvLnRlc3Qod2lkdGgpID8gcGFyc2VGbG9hdCh3aWR0aCkgLy8gcGVyY2VudGFnZVxuICAgICAgICA6IC9bYS16XS8udGVzdCh3aWR0aCkgPyB3aWR0aCAvLyBuYXRpdmUgdW5pdHNcbiAgICAgICAgOiBwYXJzZUZyYWN0aW9uKHdpZHRoKSAqIDEwMCAvLyBmcmFjdGlvblxuICAgICAgKVxuICAgICAgcmV0dXJuIGlzTnVtYmVyKGJhc2lzKSA/IGAke2Jhc2lzfSVgIDogYmFzaXNcbiAgICB9LFxuXG4gICAgY29udGFpbmVyU3R5bGUoKSB7XG4gICAgICAvLyBJbnRlcnByZXQgJz41MCUnIGFzICc1MCUsIGZsZXgtZ3JvdzogMWBcbiAgICAgIGNvbnN0IGdyb3cgPSAoXG4gICAgICAgIHRoaXMuY29tcG9uZW50V2lkdGhPcGVyYXRvciA9PT0gJz4nIHx8XG4gICAgICAgIHRoaXMuY29tcG9uZW50V2lkdGggPT09ICdmaWxsJ1xuICAgICAgKVxuICAgICAgLy8gSW50ZXJwcmV0ICc8NTAlJyBhcyAnNTAlLCBmbGV4LXNocmluazogMWBcbiAgICAgIGNvbnN0IHNocmluayA9IHRoaXMuY29tcG9uZW50V2lkdGhPcGVyYXRvciA9PT0gJzwnXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmbGV4OiBgJHtncm93ID8gMSA6IDB9ICR7c2hyaW5rID8gMSA6IDB9ICR7dGhpcy5jb21wb25lbnRCYXNpc31gXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudENsYXNzKCkge1xuICAgICAgY29uc3QgYmFzaXNJc0F1dG8gPSB0aGlzLmNvbXBvbmVudEJhc2lzID09PSAnYXV0bydcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXNpbmdsZSc6IHRoaXMuc2luZ2xlLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IHRoaXMuY29tcG9uZW50RGlzYWJsZWQsXG4gICAgICAgICdkaXRvLXdpZHRoLWZpbGwnOiAhYmFzaXNJc0F1dG8gfHwgdGhpcy5jb21wb25lbnRXaWR0aCA9PT0gJ2ZpbGwnLFxuICAgICAgICAnZGl0by13aWR0aC1hdXRvJzogYmFzaXNJc0F1dG8sXG4gICAgICAgICdkaXRvLWhhcy1lcnJvcnMnOiAhIXRoaXMuZXJyb3JzXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkVycm9ycyhlcnJvcnMpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXRhYnNcbiAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgICB2LWlmPVwic2hvdWxkUmVuZGVyKHRhYlNjaGVtYSlcIlxuICAgIDprZXk9XCJrZXlcIlxuICAgIDp0bz1cInsgaGFzaDoga2V5IH1cIlxuICAgIGFjdGl2ZS1jbGFzcz1cImRpdG8tYWN0aXZlXCJcbiAgKVxuICAgIHwge3sgZ2V0TGFiZWwodGFiU2NoZW1hLCBrZXkpIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by10YWJzXG4gICAgcm91dGVyLWxpbmsuZGl0by1saW5rKFxuICAgICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcih0YWJTY2hlbWEpXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOnRvPVwieyBoYXNoOiBrZXkgfVwiXG4gICAgICBhY3RpdmUtY2xhc3M9XCJkaXRvLWFjdGl2ZVwiXG4gICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbCh0YWJTY2hlbWEsIGtleSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAkdGFiLWNvbG9yLWJhY2tncm91bmQ6ICRjb2xvci1saWdodGVzdFxuICAkdGFiLWNvbG9yLWluYWN0aXZlOiAkY29sb3ItbGlnaHRcbiAgJHRhYi1jb2xvci1hY3RpdmU6ICRjb2xvci1saWdodGVzdFxuICAkdGFiLWNvbG9yLWhvdmVyOiAkY29sb3Itd2hpdGVcblxuICAuZGl0by10YWJzXG4gICAgLy8gU2VlOiBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgICBtYXJnaW4tbGVmdDogYXV0b1xuICAgIGFcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItaW5hY3RpdmVcbiAgICAgIHBhZGRpbmc6ICR0YWItcGFkZGluZy12ZXIgJHRhYi1wYWRkaW5nLWhvclxuICAgICAgbWFyZ2luLWxlZnQ6ICR0YWItbWFyZ2luXG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1c1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzXG4gICAgICAmOmhvdmVyXG4gICAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItaG92ZXJcbiAgICAgICY6YWN0aXZlXG4gICAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItYWN0aXZlXG4gICAgICAmLmRpdG8tYWN0aXZlXG4gICAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItYmFja2dyb3VuZFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJzJywge1xuICBwcm9wczoge1xuICAgIHRhYnM6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2VsZWN0ZWRUYWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4vLyBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuY29tcG9uZW50LmRpdG8tcGFuZWwoXG4gIDppcz1cInBhbmVsVGFnXCJcbiAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgQHN1Ym1pdC5wcmV2ZW50XG4pXG4gIGxhYmVsLmRpdG8tcGFuZWwtdGl0bGUge3sgZ2V0TGFiZWwoc2NoZW1hKSB9fVxuICBkaXRvLXNjaGVtYS5kaXRvLXBhbmVsLXNjaGVtYShcbiAgICA6c2NoZW1hPVwicGFuZWxTY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOmhhc093bkRhdGE9XCJoYXNPd25EYXRhXCJcbiAgKVxuICAgIGRpdG8tYnV0dG9ucyhcbiAgICAgIHNsb3Q9XCJidXR0b25zXCJcbiAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8gT25seSBzaG93IHBhbmVscyBpbiB0YWJzIHdoZW4gdGhlIHRhYnMgYXJlIGFsc28gdmlzaWJsZS5cbiAgY29tcG9uZW50LmRpdG8tcGFuZWwoXG4gICAgOmlzPVwicGFuZWxUYWdcIlxuICAgIHYtc2hvdz1cInZpc2libGUgJiYgKCFwYW5lbFRhYkNvbXBvbmVudCB8fCBwYW5lbFRhYkNvbXBvbmVudC52aXNpYmxlKVwiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICBsYWJlbC5kaXRvLXBhbmVsLXRpdGxlIHt7IGdldExhYmVsKHNjaGVtYSkgfX1cbiAgICBkaXRvLXNjaGVtYS5kaXRvLXBhbmVsLXNjaGVtYShcbiAgICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICAgIClcbiAgICAgIGRpdG8tYnV0dG9ucyhcbiAgICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1wYW5lbFxuICAgIG1hcmdpbi1ib3R0b206ICRjb250ZW50LXBhZGRpbmdcbiAgICAuZGl0by1wYW5lbC10aXRsZVxuICAgICAgZGlzcGxheTogYmxvY2tcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG4gICAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWNvbG9yXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAuZGl0by1wYW5lbC1zY2hlbWFcbiAgICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbFxuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZFxuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgICBib3JkZXItdG9wOiAwXG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICA+IC5kaXRvLXNjaGVtYS1jb250ZW50XG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZiAkZm9ybS1zcGFjaW5nXG4gICAgICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgICAgIC0tYnV0dG9uLW1hcmdpbjogI3skZm9ybS1zcGFjaW5nfVxuICAgICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZiAwXG4gICAgICAuZGl0by1vYmplY3RcbiAgICAgICAgYm9yZGVyOiAwXG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgIC5kaXRvLWxhYmVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgICAgICBsYWJlbFxuICAgICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWxcbiAgICAgIC5kaXRvLXBhbmVcbiAgICAgICAgbWFyZ2luOiAwICgtJGZvcm0tc3BhY2luZy1oYWxmKVxuICAgICAgLmRpdG8tY29udGFpbmVyXG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZlxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmVsJywge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhbmVsVGFiQ29tcG9uZW50OiB7IHR5cGU6IERpdG9Db21wb25lbnQsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bkRhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICB0YXJnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudGFyZ2V0IHx8IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgaGFzT3duRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMub3duRGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25EYXRhIHx8IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYSgpIHtcbiAgICAgIGlmICh0aGlzLmhhc093bkRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgYGRhdGFgIGZyb20gdGhlIHNjaGVtYSwgc28gdGhhdCBEaXRvU2NoZW1hIGlzbid0IHVzaW5nIGl0IHRvXG4gICAgICAgIC8vIHByb2R1Y2UgaXRzIG93biBkYXRhLiBTZWUgJGZpbHRlcnMgcGFuZWwgZm9yIG1vcmUgZGV0YWlscyBvbiBkYXRhLlxuICAgICAgICBjb25zdCB7IGRhdGEsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbFRhZygpIHtcbiAgICAgIC8vIFBhbmVscyB0aGF0IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEgbmVlZCB0aGVpciBvd24gZm9ybS5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyAnZm9ybScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICBwYW5lbERhdGFQYXRoKCkge1xuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gZGF0YSwgdGhlbiBpdCBuZWVkcyB0byBwcmVmaXggYWxsXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggaXRzIGRhdGEtcGF0aCwgYnV0IGlmIGl0IHNoYXJlcyBkYXRhIHdpdGggdGhlIHNjaGVtYVxuICAgICAgLy8gY29tcG9uZW50LCB0aGVuIGl0IHNob3VsZCBzaGFyZSB0aGUgZGF0YS1wYXRoIG5hbWUgc3BhY2UgdG9vLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IHRoaXMuZGF0YVBhdGggOiB0aGlzLnNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYHNjaGVtYS5kYXRhYCBoYW5kbGluZyBpbiBEaXRvU2NoZW1hLFxuICAgIC8vIHdoZXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBhY3R1YWwgY29tcG9uZW50LlxuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5vd25EYXRhID0gaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICA/IGRhdGEuY2FsbCh0aGlzLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIDogZGF0YVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVEZXN0cm95KCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWxzIHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gZmluZCB0aGVtIGJ5IHRoZWlyXG4gICAgICAvLyBkYXRhLXBhdGgsIGUuZy4gaW4gVHlwZUxpc3Qub25GaWx0ZXJFcnJvcnMoKVxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZWwodGhpcywgYWRkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1wYW5lbHMoXG4gIHYtaWY9XCJwYW5lbHMubGVuZ3RoID4gMFwiXG4pXG4gIGRpdG8tcGFuZWwoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICA6a2V5PVwiZ2V0UGFuZWxLZXkoZGF0YVBhdGgsIHRhYkNvbXBvbmVudClcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cInNjaGVtYS5kaXNhYmxlZCAhPSBudWxsID8gc2NoZW1hLmRpc2FibGVkIDogZGlzYWJsZWRcIlxuICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXBhbmVscyhcbiAgICB2LWlmPVwicGFuZWxzLmxlbmd0aCA+IDBcIlxuICApXG4gICAgZGl0by1wYW5lbChcbiAgICAgIHYtZm9yPVwieyBzY2hlbWEsIGRhdGFQYXRoLCB0YWJDb21wb25lbnQgfSBpbiBwYW5lbHNcIlxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihzY2hlbWEpXCJcbiAgICAgIDprZXk9XCJnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShzY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwic2NoZW1hLmRpc2FibGVkICE9IG51bGwgPyBzY2hlbWEuZGlzYWJsZWQgOiBkaXNhYmxlZFwiXG4gICAgICA6cGFuZWxUYWJDb21wb25lbnQ9XCJ0YWJDb21wb25lbnRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1wYW5lbHNcbiAgICBtYXgtd2lkdGg6ICRjb250ZW50LXNpZGViYXItd2lkdGhcbiAgICBtaW4td2lkdGg6IGNhbGMoJGNvbnRlbnQtc2lkZWJhci13aWR0aCAvIDIpXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLXBhbmVscycsIHtcbiAgcHJvcHM6IHtcbiAgICBwYW5lbHM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gICAgICAvLyBBbGxvdyBzZXBhcmF0ZSB0YWJzIHRvIHVzZSBwYW5lbHMgb2YgdGhlIHNhbWUgbmFtZSwgYnlcbiAgICAgIC8vIHByZWZpeGluZyB0aGVpciBrZXkgd2l0aCB0aGUgdGFiIG5hbWUuXG4gICAgICByZXR1cm4gdGFiQ29tcG9uZW50ID8gYCR7dGFiQ29tcG9uZW50LnRhYn1fJHtkYXRhUGF0aH1gIDogZGF0YVBhdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tYnV0dG9ucyhcbiAgdi1pZj1cImJ1dHRvblNjaGVtYXMgfHwgJHNsb3RzLmRlZmF1bHRcIlxuICAvKiBQYXNzIG9uICRsaXN0ZW5lcnMgc28gdGhhdCBkaXRvLWVkaXQtYnV0dG9ucyBjYW4gcGFzcyBldmVudHMuICovXG4gIHYtb249XCIkbGlzdGVuZXJzXCJcbilcbiAgZGl0by1jb250YWluZXIoXG4gICAgdi1mb3I9XCIoYnV0dG9uU2NoZW1hLCBidXR0b25EYXRhUGF0aCkgaW4gYnV0dG9uU2NoZW1hc1wiXG4gICAgdi1pZj1cInNob3VsZFJlbmRlcihidXR0b25TY2hlbWEpXCJcbiAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgIDpzY2hlbWE9XCJidXR0b25TY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShidXR0b25TY2hlbWEubmFtZSlcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6Z2VuZXJhdGVMYWJlbHM9XCJmYWxzZVwiXG4gIClcbiAgLy8gUmVuZGVyIGVhY2ggbm9kZSBpbiB0aGUgZGVmYXVsdCBzbG90IHRocm91Z2ggYGRpdG8tdm5vZGVgLCBzbyBpdCBjYW4gYmVcbiAgLy8gd3JhcHBlZCBpbiBhIGAuZGl0by1jb250YWluZXJgIGNsYXNzLlxuICAuZGl0by1jb250YWluZXIoXG4gICAgdi1mb3I9XCJub2RlIGluICRzbG90cy5kZWZhdWx0XCJcbiAgICB2LWlmPVwibm9kZS50YWdcIlxuICApXG4gICAgZGl0by12bm9kZSg6bm9kZT1cIm5vZGVcIilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLWJ1dHRvbnMoXG4gICAgdi1pZj1cImJ1dHRvblNjaGVtYXMgfHwgJHNsb3RzLmRlZmF1bHRcIlxuICAgIC8qIFBhc3Mgb24gJGxpc3RlbmVycyBzbyB0aGF0IGRpdG8tZWRpdC1idXR0b25zIGNhbiBwYXNzIGV2ZW50cy4gKi9cbiAgICB2LW9uPVwiJGxpc3RlbmVyc1wiXG4gIClcbiAgICBkaXRvLWNvbnRhaW5lcihcbiAgICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihidXR0b25TY2hlbWEpXCJcbiAgICAgIDprZXk9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6c2NoZW1hPVwiYnV0dG9uU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImJ1dHRvbkRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShidXR0b25TY2hlbWEubmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZmFsc2VcIlxuICAgIClcbiAgICAvLyBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsIHNvIGl0IGNhbiBiZVxuICAgIC8vIHdyYXBwZWQgaW4gYSBgLmRpdG8tY29udGFpbmVyYCBjbGFzcy5cbiAgICAuZGl0by1jb250YWluZXIoXG4gICAgICB2LWZvcj1cIm5vZGUgaW4gJHNsb3RzLmRlZmF1bHRcIlxuICAgICAgdi1pZj1cIm5vZGUudGFnXCJcbiAgICApXG4gICAgICBkaXRvLXZub2RlKDpub2RlPVwibm9kZVwiKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4uZGl0by1idXR0b25zXG4gID4gLmRpdG8tY29udGFpbmVyXG4gICAgcGFkZGluZzogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1idXR0b25zJywge1xuICBwcm92aWRlOiB7XG4gICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgYnV0dG9ucyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5cy5cbiAgICAgIGNvbnN0IHsgZGF0YVBhdGgsIGJ1dHRvbnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgICAgID8gT2JqZWN0LnZhbHVlcyhidXR0b25zKS5yZWR1Y2UoKHNjaGVtYXMsIGJ1dHRvbikgPT4ge1xuICAgICAgICAgIHNjaGVtYXNbYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIGJ1dHRvbi5uYW1lKV0gPSBidXR0b25cbiAgICAgICAgICByZXR1cm4gc2NoZW1hc1xuICAgICAgICB9LCB7fSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmRpdG8tYnV0dG9ucy5kaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICAvKiBQcmV2ZW50IGNsaWNrIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIGRpdG8tbGFiZWw6ICovXG4gIEBjbGljay5zdG9wXG4pXG4gIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gIGEuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRHJhZ2dhYmxlXCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgKVxuICByb3V0ZXItbGluay5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNFZGl0YWJsZVwiXG4gICAgOnRvPVwieyBwYXRoOiBlZGl0UGF0aCB9XCIgYXBwZW5kXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gIClcbiAgZGl0by1jcmVhdGUtYnV0dG9uKFxuICAgIHYtaWY9XCJpc0NyZWF0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgOnRleHQ9XCJjcmVhdGVCdXR0b25UZXh0XCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRGVsZXRhYmxlXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgIEBjbGljaz1cIiRlbWl0KCdkZWxldGUnKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGRpdG8tYnV0dG9ucy5kaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gICAgOmJ1dHRvbnM9XCJidXR0b25zXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAvKiBQcmV2ZW50IGNsaWNrIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIGRpdG8tbGFiZWw6ICovXG4gICAgQGNsaWNrLnN0b3BcbiAgKVxuICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgIHYtaWY9XCJpc0RyYWdnYWJsZVwiXG4gICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICApXG4gICAgcm91dGVyLWxpbmsuZGl0by1idXR0b24oXG4gICAgICB2LWlmPVwiaXNFZGl0YWJsZVwiXG4gICAgICA6dG89XCJ7IHBhdGg6IGVkaXRQYXRoIH1cIiBhcHBlbmRcbiAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgIClcbiAgICBkaXRvLWNyZWF0ZS1idXR0b24oXG4gICAgICB2LWlmPVwiaXNDcmVhdGFibGVcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6cGF0aD1cImNyZWF0ZVBhdGhcIlxuICAgICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgICAgOnRleHQ9XCJjcmVhdGVCdXR0b25UZXh0XCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdi1pZj1cImlzRGVsZXRhYmxlXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgIEBjbGljaz1cIiRlbWl0KCdkZWxldGUnKVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWVkaXQtYnV0dG9uc1xuICAgIC8vIE92ZXJyaWRlIGN1cnNvciBmcm9tIGNvbGxhcHNpYmxlIGRpdG8tbGFiZWw6XG4gICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgZmxleDogbm9uZVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWVkaXQtYnV0dG9ucycsIHtcbiAgcHJvcHM6IHtcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNyZWF0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNyZWF0ZVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEuZm9ybSlcbiAgICB9LFxuXG4gICAgaXNEcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RyYWdnYWJsZScpXG4gICAgfSxcblxuICAgIGlzRWRpdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2VkaXRhYmxlJykgJiYgISF0aGlzLmVkaXRQYXRoXG4gICAgfSxcblxuICAgIGlzQ3JlYXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdjcmVhdGFibGUnKSAmJiAhIXRoaXMuY3JlYXRlUGF0aFxuICAgIH0sXG5cbiAgICBpc0RlbGV0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZGVsZXRhYmxlJylcbiAgICB9LFxuXG4gICAgY3JlYXRlQnV0dG9uVGV4dCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBjcmVhdGUgYnV0dG9uIHRocm91Z2ggY3JlYXRhYmxlIG9iamVjdDpcbiAgICAgICAgdGhpcy5zY2hlbWEuY3JlYXRhYmxlPy5sYWJlbCB8fFxuICAgICAgICAoXG4gICAgICAgICAgLy8gQXV0by1nZW5lcmF0ZSBjcmVhdGUgYnV0dG9uIGxhYmVscyBmcm9tIGZyb20gbGFiZWxzIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcyB3aXRoIG9ubHkgb25lIGZvcm06XG4gICAgICAgICAgdGhpcy5mb3JtTGFiZWwgJiZcbiAgICAgICAgICBgJHtjYXBpdGFsaXplKHRoaXMudmVyYnMuY3JlYXRlKX0gJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICkgfHxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzT3B0aW9uKG5hbWUpIHtcbiAgICAgIC8vIFRoZSBvcHRpb25zIG9mIHRoZSBvdXRlciBjb21wb25lbnQgYXJlIHBhc3NlZCB0byB0aGUgYnV0dG9ucyBjb21wb25lbnRcbiAgICAgIC8vIHRocm91Z2ggcHJvcGVydGllcyBgdGhpc1tuYW1lXWAsIGJ1dCBjYW4gYmUgZGlzYWJsZWQgb24gYSBwZXItZm9ybVxuICAgICAgLy8gYmFzaXMgYnkgc2V0dGluZyBgc2NoZW1hW25hbWVdYCB0byBgZmFsc2VgLlxuICAgICAgcmV0dXJuICEhKHRoaXNbbmFtZV0gJiYgdGhpcy5zY2hlbWFbbmFtZV0gIT09IGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1jcmVhdGUtYnV0dG9uXG4gIHRlbXBsYXRlKHYtaWY9XCJzaG93UHVsbGRvd25cIilcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICAgICkge3sgdGV4dCB9fVxuICAgIHVsLmRpdG8tcHVsbGRvd24oXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICAgIClcbiAgICAgIGxpKHYtZm9yPVwiKGZvcm0sIHR5cGUpIGluIGZvcm1zXCIpXG4gICAgICAgIGEoXG4gICAgICAgICAgdi1pZj1cImlzQ3JlYXRhYmxlKGZvcm0pXCJcbiAgICAgICAgICA6Y2xhc3M9XCJgZGl0by10eXBlLSR7dHlwZX1gXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHR5cGUpXCJcbiAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1lbHNlXG4gICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICBAY2xpY2s9XCJjcmVhdGVJdGVtKGZvcm1zLmRlZmF1bHQpXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgKSB7eyB0ZXh0IH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1jcmVhdGUtYnV0dG9uXG4gICAgdGVtcGxhdGUodi1pZj1cInNob3dQdWxsZG93blwiKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgICAgOnRpdGxlPVwibGFiZWxpemUodmVyYilcIlxuICAgICAgKSB7eyB0ZXh0IH19XG4gICAgICB1bC5kaXRvLXB1bGxkb3duKFxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIlxuICAgICAgKVxuICAgICAgICBsaSh2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiKVxuICAgICAgICAgIGEoXG4gICAgICAgICAgICB2LWlmPVwiaXNDcmVhdGFibGUoZm9ybSlcIlxuICAgICAgICAgICAgOmNsYXNzPVwiYGRpdG8tdHlwZS0ke3R5cGV9YFwiXG4gICAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHR5cGUpXCJcbiAgICAgICAgICAgIEBtb3VzZXVwPVwib25QdWxsZG93bk1vdXNlVXAodHlwZSlcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB2LWVsc2VcbiAgICAgIDp0eXBlPVwiaXNJbmxpbmVkID8gJ2J1dHRvbicgOiAnc3VibWl0J1wiXG4gICAgICBAY2xpY2s9XCJjcmVhdGVJdGVtKGZvcm1zLmRlZmF1bHQpXCJcbiAgICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgICA6dGl0bGU9XCJsYWJlbGl6ZSh2ZXJiKVwiXG4gICAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY3JlYXRlLWJ1dHRvblxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgIC5kaXRvLXB1bGxkb3duXG4gICAgICByaWdodDogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsbGRvd25NaXhpbiBmcm9tICcuLi9taXhpbnMvUHVsbGRvd25NaXhpbi5qcydcbmltcG9ydCB7IGdldEZvcm1TY2hlbWFzLCBpc0lubGluZWQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1jcmVhdGUtYnV0dG9uJywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdmVyYjogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGV4dDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgaXNJbmxpbmVkKCkge1xuICAgICAgcmV0dXJuIGlzSW5saW5lZCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgc2hvd1B1bGxkb3duKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZm9ybXMpLmxlbmd0aCA+IDEgfHwgIXRoaXMuZm9ybXMuZGVmYXVsdFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaXNDcmVhdGFibGUoZm9ybSkge1xuICAgICAgLy8gRm9ybXMgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGxpc3QgYnkgcHJvdmlkaW5nIGBjcmVhdGFibGU6IGZhbHNlYFxuICAgICAgcmV0dXJuIGZvcm0uY3JlYXRhYmxlICE9PSBmYWxzZVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKGZvcm0sIHR5cGUgPSBudWxsKSB7XG4gICAgICBpZiAodGhpcy5pc0NyZWF0YWJsZShmb3JtKSkge1xuICAgICAgICBpZiAodGhpcy5pc0lubGluZWQpIHtcbiAgICAgICAgICB0aGlzLnNvdXJjZUNvbXBvbmVudC5jcmVhdGVJdGVtKGZvcm0sIHR5cGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICAgICAgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgLFxuICAgICAgICAgICAgcXVlcnk6IHsgdHlwZSB9LFxuICAgICAgICAgICAgYXBwZW5kOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYWxsb3dlZCB0byBjcmVhdGUgaXRlbSBmb3IgZ2l2ZW4gZm9ybScpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QodHlwZSkge1xuICAgICAgdGhpcy5jcmVhdGVJdGVtKHRoaXMuZm9ybXNbdHlwZV0sIHR5cGUpXG4gICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tY2xpcGJvYXJkLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIHYtaWY9XCJjbGlwYm9hcmRcIlxuKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tY29weShcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgdGl0bGU9XCJDb3B5IERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25Db3B5XCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJQYXN0ZSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY2xpcGJvYXJkLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gICAgdi1pZj1cImNsaXBib2FyZFwiXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tY29weShcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgcmVmPVwiY29weURhdGFcIlxuICAgICAgdGl0bGU9XCJDb3B5IERhdGFcIlxuICAgICAgOmRpc2FibGVkPVwiIWNvcHlFbmFibGVkXCJcbiAgICAgIEBjbGljaz1cIm9uQ29weVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi5kaXRvLWJ1dHRvbi1wYXN0ZShcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgdGl0bGU9XCJQYXN0ZSBEYXRhXCJcbiAgICAgIDpkaXNhYmxlZD1cIiFwYXN0ZUVuYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzT2JqZWN0LCBjbG9uZSwgZGVpbmRlbnQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by1jbGlwYm9hcmQnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm9wczoge1xuICAgIGNsaXBib2FyZDogeyB0eXBlOiBbQm9vbGVhbiwgT2JqZWN0XSwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvcHlFbmFibGVkOiBmYWxzZSxcbiAgICAgIHBhc3RlRW5hYmxlZDogZmFsc2UsXG4gICAgICBmaXhDbGlwYm9hcmQ6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGlwYm9hcmRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KHRoaXMuY2xpcGJvYXJkKSA/IHRoaXMuY2xpcGJvYXJkIDoge31cbiAgICB9LFxuXG4gICAgY29weURhdGEoKSB7XG4gICAgICBjb25zdCB7IGNvcHkgfSA9IHRoaXMuY2xpcGJvYXJkT3B0aW9uc1xuICAgICAgcmV0dXJuIGNvcHlcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+IGNvcHkuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgIGNsaXBib2FyZERhdGFcbiAgICAgICAgfSkpXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbG9uZShjbGlwYm9hcmREYXRhKVxuICAgIH0sXG5cbiAgICBwYXN0ZURhdGEoKSB7XG4gICAgICBjb25zdCB7IHBhc3RlIH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBwYXN0ZVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT4gcGFzdGUuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgIGNsaXBib2FyZERhdGFcbiAgICAgICAgfSkpXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbGlwYm9hcmREYXRhXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgLy8gQ2hlY2sgY2xpcGJvYXJkIGNvbnRlbnQgd2hlbmV2ZXIgc29tZXRoaW5nIGdldHMgY29waWVkIG9yIHRoZSB3aW5kb3cgZ2V0c1xuICAgIC8vIChyZSlhY3RpdmF0ZWQsIGFzIHRob3NlIGFyZSB0aGUgbW9tZW50cyB3aGVuIHRoZSBjbGlwYm9hcmQgY2FuIGNoYW5nZTpcbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjb3B5OiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLmRvbU9uKHdpbmRvdywge1xuICAgICAgZm9jdXM6IHRoaXMuY2hlY2tDbGlwYm9hcmRcbiAgICB9KVxuICAgIHRoaXMuJHdhdGNoKCdkYXRhJywge1xuICAgICAgLy8gQ2hlY2sgcmlnaHQgYXdheSBhbHNvIGluIGNhc2UgdGhlcmUncyBhbHJlYWR5IGRhdGEgKGUuZy4gY3JlYXRlIGZvcm0pLlxuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcjogKHRvLCBmcm9tKSA9PiB7XG4gICAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICAgIHRoaXMuY2hlY2tDbGlwYm9hcmQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYXN5bmMgZ2V0Q2xpcGJvYXJkRGF0YShyZXBvcnQpIHtcbiAgICAgIC8vIFVzZSB0aGUgaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgbGV0IHsgY2xpcGJvYXJkRGF0YSB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LnJlYWRUZXh0Py4oKVxuICAgICAgICBpZiAodGhpcy5maXhDbGlwYm9hcmQgJiYganNvbikge1xuICAgICAgICAgIC8vIFRoaXMgYXBwZWFycyB0byBiZSBuZWVkZWQgb24gU2FmYXJpIHRvIHByZXZlbnQgYSBzdHJhbmdlIFwiUGFzdGVcIlxuICAgICAgICAgIC8vIGJ1dHRvbiBmcm9tIGFwcGVhcmluZyB3aGVuIHRoZSBjbGlwYm9hcmQgaXMgYWNjZXNzZWQgKHdoeT8hKS5cbiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQ/Lihqc29uKVxuICAgICAgICAgIHRoaXMuZml4Q2xpcGJvYXJkID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBpZiAoanNvbikge1xuICAgICAgICAgIGNsaXBib2FyZERhdGEgPSBKU09OLnBhcnNlKGpzb24pXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAocmVwb3J0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgICBpZiAoZXJyLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIGFsZXJ0KGRlaW5kZW50YFxuICAgICAgICAgICAgICBUaGUgZGF0YSBpbiB0aGUgY2xpcGJvYXJkIGFwcGVhcnMgdG8gYmUgbWFsZm9ybWVkOlxuICAgICAgICAgICAgICAke2Vyci5tZXNzYWdlfVxuICAgICAgICAgICAgYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgJHNjaGVtYSwgLi4uZGF0YSB9ID0gY2xpcGJvYXJkRGF0YSB8fCB7fVxuICAgICAgcmV0dXJuICRzY2hlbWEgPT09IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5zY2hlbWEubmFtZSA/IGRhdGEgOiBudWxsXG4gICAgfSxcblxuICAgIGFzeW5jIGNoZWNrQ2xpcGJvYXJkKCkge1xuICAgICAgdGhpcy5jb3B5RW5hYmxlZCA9ICEhdGhpcy5kYXRhXG4gICAgICAvLyBTZWUgaWYgdGhlIGNsaXBib2FyZCBjb250ZW50IGlzIHZhbGlkIEpTT04gZGF0YSB0aGF0IGlzIGNvbXBhdGlibGVcbiAgICAgIC8vIHdpdGggdGhlIGN1cnJlbnQgdGFyZ2V0IHNjaGVtYSwgYW5kIG9ubHkgdGhlbiBhY3RpdmF0ZSB0aGUgcGFzdGluZzpcbiAgICAgIHRoaXMucGFzdGVFbmFibGVkID0gISEoYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKGZhbHNlKSkgLy8gZG9uJ3QgcmVwb3J0XG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ29weSgpIHtcbiAgICAgIGxldCBkYXRhID0gdGhpcy5zY2hlbWFDb21wb25lbnQ/LmNsaXBib2FyZERhdGFcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBkYXRhICYmIHRoaXMuY29weURhdGEoZGF0YSlcbiAgICAgICAgLy8gS2VlcCBhbiBpbnRlcm5hbCBjbGlwYm9hcmQgYXMgZmFsbGJhY2suXG4gICAgICAgIHRoaXMuYXBwU3RhdGUuY2xpcGJvYXJkRGF0YSA9IGRhdGFcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMilcbiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQ/Lihqc29uKVxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gYWN0aXZhdGUgdGhlIHBhc3RlIGJ1dHRvbiwgZGVwZW5kZGluZyBvbiBicm93c2VyczpcbiAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25QYXN0ZSgpIHtcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKHRydWUpIC8vIHJlcG9ydFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5wYXN0ZURhdGEoZGF0YSlcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZywgeyB1cGRhdGVSb290ID0gZmFsc2UsIHVwZGF0ZVZpZXcgPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICghdGhpcy5pc0xvYWRpbmcgXiAhaXNMb2FkaW5nKSB7IC8vIEJvb2xlYW4geG9yXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICAgICAgaWYgKHVwZGF0ZVJvb3QpIHtcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQucmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlVmlldykge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXRMb2FkaW5nKHRoaXMuaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcbmltcG9ydCB7IHNldERlZmF1bHRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIExvYWRpbmdNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgLy8gUGFzcyBsb2NhbCB2ZXJicyBvdmVycmlkZXMgb24gdG8gY2hpbGRyZW4sIHNlZSB2ZXJicygpIGNvbXB1dGVkIHByb3AuXG4gICAgICAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMsXG4gICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRoaXMuaGFzRGF0YVxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsb2FkZWREYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICByZXNvdXJjZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdGhlIHJlc291cmNlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHJlc291cmNlIGZvciB0aGVcbiAgICAgIC8vIGFzc29jaWF0ZWQgc291cmNlIHNjaGVtYS5cbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlKClcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgLy8gVGhpcyBjb21wb25lbnQgaXMgYSBkYXRhLXNvdXJjZSBpZiBpdCBoYXMgYW4gYXNzb2NpYXRlZCBBUEkgcmVzb3VyY2U6XG4gICAgICByZXR1cm4gISF0aGlzLnJlc291cmNlXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgLy8gUmV0dXJucyBgZmFsc2VgaGVyZSwgYnV0IGlzIG92ZXJyaWRkZW4gdG8gcmV0dXJuIGB0cnVlYCBpblxuICAgICAgLy8gYFNvdXJjZU1peGluYCBmb3IgY29tcG9uZW50IHRoYXQgZG8gbm90IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEsIGJ1dFxuICAgICAgLy8gZWRpdCB0aGVpciBpdGVtcyB0aHJvdWdoIGEgbGlua2VkIHZpZXcuICBJbiB0aGlzIGNhc2UsIHJlYWwgaWRzIG5lZWQgdG9cbiAgICAgIC8vIGJlIHVzZWQuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNUcmFuc2llbnQoKSB7XG4gICAgICAvLyBDaGVjayB0aGUgZm9ybSB0aGF0IHRoaXMgY29tcG9uZW50IGJlbG9uZ3MgdG8gYXMgd2VsbCwgc2luY2UgaXQgbWF5IGJlXG4gICAgICAvLyBpbiBjcmVhdGlvbiBtb2RlLCB3aGljaCBtYWtlcyBpdCB0cmFuc2llbnQuXG4gICAgICAvLyBOT1RFOiBUaGlzIGRvZXMgbm90IGxvb3AgZW5kbGVzc2x5IGJlY2F1c2UgRGl0b0Zvcm0gcmVkZWZpbmVzXG4gICAgICAvLyBgaXNUcmFuc2llbnQoKWAgdG8gb25seSByZXR1cm4gYCF0aGlzLnByb3ZpZGVzRGF0YWAuXG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5mb3JtQ29tcG9uZW50XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhdGhpcy5wcm92aWRlc0RhdGEgJiZcbiAgICAgICAgIXRoaXMubGlua3NUb1ZpZXcgfHxcbiAgICAgICAgZm9ybSAmJiAoXG4gICAgICAgICAgZm9ybS5pc1RyYW5zaWVudCB8fFxuICAgICAgICAgIGZvcm0uaXNDcmVhdGluZ1xuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIHRyYW5zaWVudE5vdGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICc8Yj5Ob3RlPC9iPjogdGhlIHBhcmVudCBzdGlsbCBuZWVkcyB0byBiZSBzYXZlZCAnICtcbiAgICAgICAgJ2luIG9yZGVyIHRvIHBlcnNpc3QgdGhpcyBjaGFuZ2UuJ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICBzaG91bGRMb2FkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgIXRoaXMuaXNMb2FkaW5nXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICAvLyBCYXNlIGRlZmluaXRpb24sIHdpbGwgYmUgb3ZlcnJpZGRlbiBieSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW5cbiAgICAgIHJldHVybiAhIXRoaXMubG9hZGVkRGF0YVxuICAgIH0sXG5cbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIFRoZSBhY3R1YWwgY29kZSBpcyB0aGUgYGdldFZlcmJzKClgIG1ldGhvZCwgZm9yIGVhc2llciBvdmVycmlkaW5nIG9mXG4gICAgICAvLyB0aGlzIGNvbXB1dGVkIHByb3BlcnR5IGluIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIFJlc291cmNlTWl4aW4uXG4gICAgICByZXR1cm4gdGhpcy5nZXRWZXJicygpXG4gICAgfSxcblxuICAgIHBhZ2luYXRpb25SYW5nZSgpIHtcbiAgICAgIC8vIE9ubHkgYXBwbHkgcGFnaW5hdGlvbiB0byBsaXN0cy5cbiAgICAgIGNvbnN0IHsgcGFnaW5hdGU6IGFtb3VudCB9ID0gdGhpcy5zb3VyY2VTY2hlbWFcbiAgICAgIGlmICh0aGlzLmlzTGlzdFNvdXJjZSAmJiBhbW91bnQpIHtcbiAgICAgICAgY29uc3QgeyBwYWdlID0gMCB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgICBjb25zdCBzdGFydCA9IHBhZ2UgKiBhbW91bnRcbiAgICAgICAgcmV0dXJuIFtzdGFydCwgc3RhcnQgKyBhbW91bnQgLSAxXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBxdWVyeVBhcmFtcygpIHtcbiAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5wYWdpbmF0aW9uUmFuZ2VcbiAgICAgIGNvbnN0IHsgcGFnZSwgLi4ucXVlcnkgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnF1ZXJ5LCAvLyBRdWVyeSBtYXkgb3ZlcnJpZGUgc2NvcGUuXG4gICAgICAgIC4uLihyYW5nZSAmJiB7XG4gICAgICAgICAgLy8gUGFzcyBwYWdpbmF0aW9uIGFzIHJhbmdlLCBzbyB0aGF0IHdlIGF1dG9tYXRpY2FsbHkgZ2V0IE9iamVjdGlvbidzXG4gICAgICAgICAgLy8gcmVzdWx0cyBjb3VudGluZzpcbiAgICAgICAgICByYW5nZTogcmFuZ2Uuam9pbignLCcpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgLy8gV2hlbiBjcmVhdGluZyBuZXN0ZWQgZGF0YSwgd2Ugc3RpbGwgbmVlZCB0byBjYWxsIHNldHVwRGF0YSgpXG4gICAgaWYgKHRoaXMucHJvdmlkZXNEYXRhIHx8IHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgdGhpcy5zZXR1cERhdGEoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UmVzb3VyY2UoKSB7XG4gICAgICAvLyBUaGlzIGlzIGRlZmluZWQgYXMgYSBtZXRob2Qgc28gdGhlIGNvbXB1dGVkIGByZXNvdXJjZWAgZ2V0dGVyIGNhblxuICAgICAgLy8gYmUgb3ZlcnJpZGRlbiBhbmQgYHN1cGVyYCBmdW5jdGlvbmFsaXR5IGNhbiBzdGlsbCBiZSBhY2Nlc3NlZC5cbiAgICAgIHJldHVybiBnZXRSZXNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYT8ucmVzb3VyY2UsIHtcbiAgICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nLFxuICAgICAgICBwYXJlbnQ6IHRoaXMucGFyZW50Rm9ybUNvbXBvbmVudD8ucmVzb3VyY2UgPz8gbnVsbFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0VmVyYnMoKSB7XG4gICAgICBjb25zdCB2ZXJicyA9IHRoaXMuJHZlcmJzKClcbiAgICAgIHJldHVybiB0aGlzLmlzVHJhbnNpZW50XG4gICAgICAgID8ge1xuICAgICAgICAgIC4uLnZlcmJzLFxuICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgdmVyYnMgd2l0aCB0aGVpciB0cmFuc2llbnQgdmVyc2lvbnM6XG4gICAgICAgICAgY3JlYXRlOiAnYWRkJyxcbiAgICAgICAgICBjcmVhdGVkOiAnYWRkZWQnLFxuICAgICAgICAgIHNhdmU6ICdhcHBseScsXG4gICAgICAgICAgc2F2ZWQ6ICdhcHBsaWVkJyxcbiAgICAgICAgICBkZWxldGU6ICdyZW1vdmUnLFxuICAgICAgICAgIGRlbGV0ZWQ6ICdyZW1vdmVkJ1xuICAgICAgICB9XG4gICAgICAgIDogdmVyYnNcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgLy8gQWN0dWFsIGNvZGUgaXMgaW4gc2VwYXJhdGUgZnVuY3Rpb24gc28gaXQncyBlYXNlciB0byBvdmVycmlkZVxuICAgICAgLy8gYHNldHVwRGF0YSgpYCBhbmQgYW5kIGNhbGwgYGVuc3VyZURhdGEoKWAgZnJvbSB0aGUgb3ZlcnJpZGVzLFxuICAgICAgLy8gc2VlIERpdG9Gb3JtIGFuZCBTb3VyY2VNaXhpbi5cbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIGVuc3VyZURhdGEoKSB7XG4gICAgICBpZiAodGhpcy5zaG91bGRMb2FkKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc0RhdGEpIHtcbiAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9hZERhdGEodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZWxvYWREYXRhKCkge1xuICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICB9LFxuXG4gICAgbG9hZERhdGEoY2xlYXIpIHtcbiAgICAgIGlmICghdGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICBpZiAoY2xlYXIpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyRGF0YSgpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXF1ZXN0RGF0YSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKSB7XG4gICAgICByZXR1cm4gc2V0RGVmYXVsdHMoc2NoZW1hLCB0eXBlID8geyB0eXBlIH0gOiB7fSwgdGhpcylcbiAgICB9LFxuXG4gICAgcmVxdWVzdERhdGEoKSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBwYXJhbXMgfSwgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBkYXRhPy50eXBlID09PSAnRmlsdGVyVmFsaWRhdGlvbicgJiZcbiAgICAgICAgICAgICAgdGhpcy5vbkZpbHRlckVycm9ycz8uKGRhdGEuZXJyb3JzKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IENhbiB3ZSByZWFsbHkgc3dhbGxvdyB0aGVzZSBlcnJvcnM/XG4gICAgICAgICAgICAgIC8vIElzIGNhbGxpbmcgYGVuc3VyZVVzZXIoKWAgaW4gYG9uQmVmb3JlUmVxdWVzdCgpYCBlbm91Z2g/XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShyZXNwb25zZS5kYXRhKVxuICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdsb2FkJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDBcbiAgICB9LFxuXG4gICAgaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMVxuICAgIH0sXG5cbiAgICBhc3luYyBoYW5kbGVSZXF1ZXN0KHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSxcbiAgICAgIGRhdGEsXG4gICAgICBwYXJhbXNcbiAgICB9LCBjYWxsYmFjaykge1xuICAgICAgY29uc3QgbG9hZGluZ09wdGlvbnMgPSB7XG4gICAgICAgIHVwZGF0ZVJvb3Q6IHRydWUsIC8vIERpc3BsYXkgc3Bpbm5lciBpbiBoZWFkZXIgd2hlbiBsb2FkaW5nIGluIHJlc291cmNlc1xuICAgICAgICB1cGRhdGVWaWV3OiB0aGlzLmlzSW5WaWV3IC8vIE5vdGlmeSB2aWV3IG9mIGxvYWRpbmcgZm9yIHZpZXcgY29tcG9uZW50c1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgY29uc3QgcmVxdWVzdCA9IHsgbWV0aG9kLCByZXNvdXJjZSwgZGF0YSwgcGFyYW1zIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgIGlmICghY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgIGlmIChkYXRhICYmIGlzU3RyaW5nKGRhdGEudHlwZSkpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGxhYmVsaXplKGRhdGEudHlwZSksXG4gICAgICAgICAgICAgIHRleHQ6IGRhdGEubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBlcnJvclxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IFN1Y2Nlc3NmdWwnLFxuICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgfSksXG4gICAgICBub3RpZnlFcnJvciA9IGVycm9yID0+IHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgdGV4dDogW1xuICAgICAgICAgIGBVbmFibGUgdG8gc2VuZCByZXF1ZXN0JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgXVxuICAgICAgfSlcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KFxuICAgICAgICAgIHsgbWV0aG9kLCBkYXRhLCByZXNvdXJjZSB9LFxuICAgICAgICAgIGFzeW5jIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIERpdG8gdmFsaWRhdGlvbiBlcnJvcjpcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5pc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkgJiYgZGF0YS5lcnJvcnNcbiAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNPYmplY3QoZGF0YSkgPyBkYXRhIDogZXJyXG4gICAgICAgICAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB1bmRlcmx5aW5nIGRhdGEgYmVmb3JlIGNhbGxpbmcgYG5vdGlmeSgpYCBvclxuICAgICAgICAgICAgICAvLyBgdGhpcy5pdGVtTGFiZWxgLCBzbyBpZCBpcyBzZXQgYWZ0ZXIgY3JlYXRpbmcgbmV3IGl0ZW1zLlxuICAgICAgICAgICAgICBpZiAoc2V0RGF0YSAmJiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCBldmVudCwgeyBub3RpZnksIGVycm9yIH0pIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgY29udGV4dCBvdXRzaWRlIG9mIGBlbWl0RXZlbnQoKWAsIHNvIHRoYXRcbiAgICAgIC8vIGBjb250ZXh0Lndhc05vdGlmaWVkYCBjYW4gYmUgY2hlY2tlZCBhZnRlci5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRGl0b0NvbnRleHQoYnV0dG9uLCB7XG4gICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgaXRlbUxhYmVsOiB0aGlzLml0ZW1MYWJlbCxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBidXR0b24uZW1pdEV2ZW50KGV2ZW50LCB7IGNvbnRleHQgfSlcbiAgICAgIGlmIChcbiAgICAgICAgbm90aWZ5ICYmXG4gICAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBpZiBhbnl0aGluZyB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgLy8gRG8gbm90IGRpc3BsYXkgZGVmYXVsdCBub3RpZmljYXRpb24gaWYgdGhlIGV2ZW50IGhhbmRsZXIgYWxyZWFkeVxuICAgICAgICAvLyBkaXNwbGF5ZWQgYSBub3RpZmljYXRpb24uXG4gICAgICAgICFjb250ZXh0Lndhc05vdGlmaWVkXG4gICAgICApIHtcbiAgICAgICAgbm90aWZ5KGVycm9yKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxufVxuIiwiXG4uZGl0by1mb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgOmNsYXNzPVwieyAnZGl0by1mb3JtLW5lc3RlZCc6IGlzTmVzdGVkUm91dGUgfVwiXG4pXG4gIC8vIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLyBgdi1pZmAgaGVyZSwgc28gZXZlbnQgaGFuZGxpbmcgYW5kIG90aGVyIHRoaW5ncyBzdGlsbCB3b3JrIHdpdGggbmVzdGVkXG4gIC8vIGVkaXRpbmcuIE9ubHkgcmVuZGVyIGEgcm91dGVyLXZpZXcgaGVyZSBpZiB0aGlzIGlzbid0IHRoZSBsYXN0IGRhdGEgcm91dGVcbiAgLy8gYW5kIG5vdCBhIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICByb3V0ZXItdmlldyhcbiAgICB2LWlmPVwiIShpc0xhc3RVbm5lc3RlZFJvdXRlIHx8IGlzTmVzdGVkUm91dGUpXCJcbiAgICB2LXNob3c9XCIhaXNBY3RpdmVcIlxuICApXG4gIC8vIFVzZSBhIDxkaXY+IGZvciBpbmxpbmVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG4gIGNvbXBvbmVudC5kaXRvLXNjcm9sbChcbiAgICB2LXNob3c9XCJpc0FjdGl2ZVwiXG4gICAgOmlzPVwiaXNOZXN0ZWRSb3V0ZSA/ICdkaXYnIDogJ2Zvcm0nXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIC8vIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLyBpbiBhbiBpbnB1dCBmaWVsZC5cbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTE1MDc4MDZcbiAgICBidXR0b24oXG4gICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIGRpc2FibGVkPVwidHJ1ZVwiXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIClcbiAgICBkaXRvLXNjaGVtYShcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1mb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgOmNsYXNzPVwieyAnZGl0by1mb3JtLW5lc3RlZCc6IGlzTmVzdGVkUm91dGUgfVwiXG4pXG4gIC8vIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLyBgdi1pZmAgaGVyZSwgc28gZXZlbnQgaGFuZGxpbmcgYW5kIG90aGVyIHRoaW5ncyBzdGlsbCB3b3JrIHdpdGggbmVzdGVkXG4gIC8vIGVkaXRpbmcuIE9ubHkgcmVuZGVyIGEgcm91dGVyLXZpZXcgaGVyZSBpZiB0aGlzIGlzbid0IHRoZSBsYXN0IGRhdGEgcm91dGVcbiAgLy8gYW5kIG5vdCBhIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICByb3V0ZXItdmlldyhcbiAgICB2LWlmPVwiIShpc0xhc3RVbm5lc3RlZFJvdXRlIHx8IGlzTmVzdGVkUm91dGUpXCJcbiAgICB2LXNob3c9XCIhaXNBY3RpdmVcIlxuICApXG4gIC8vIFVzZSBhIDxkaXY+IGZvciBpbmxpbmVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG4gIGNvbXBvbmVudC5kaXRvLXNjcm9sbChcbiAgICB2LXNob3c9XCJpc0FjdGl2ZVwiXG4gICAgOmlzPVwiaXNOZXN0ZWRSb3V0ZSA/ICdkaXYnIDogJ2Zvcm0nXCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIC8vIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLyBpbiBhbiBpbnB1dCBmaWVsZC5cbiAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTE1MDc4MDZcbiAgICBidXR0b24oXG4gICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIGRpc2FibGVkPVwidHJ1ZVwiXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgIClcbiAgICBkaXRvLXNjaGVtYShcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgOm1lbnVIZWFkZXI9XCJ0cnVlXCJcbiAgICApXG4gICAgICBkaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgc2xvdD1cImJ1dHRvbnNcIlxuICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSwgY2FwaXRhbGl6ZSwgcGFyc2VEYXRhUGF0aCwgbWVyZ2UgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMsIGlzT2JqZWN0U291cmNlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tZm9ybScsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbiwgUmVzb3VyY2VNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlZERhdGE6IG51bGwsXG4gICAgICBjbG9uZWREYXRhOiB1bmRlZmluZWQsXG4gICAgICBzb3VyY2VLZXk6IG51bGwsXG4gICAgICBpc0Zvcm06IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIEFkZCBzdWJtaXQgLyBzdWJtaXR0ZWQgdG8gdGhlIHZlcmJzIHJldHVybmVkIGJ5IFJlc291cmNlTWl4aW5cbiAgICAgIC8vIE5PVEU6IFRoZXNlIGdldCBwYXNzZWQgb24gdG8gY2hpbGRyZW4gdGhyb3VnaDpcbiAgICAgIC8vIGBwcm92aWRlKCkgLi4uIHsgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzIH1gIGluIFJlc291cmNlTWl4aW5cbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy5nZXRWZXJicygpXG4gICAgICBjb25zdCB7IGlzQ3JlYXRpbmcsIHByb3ZpZGVzRGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmVyYnMsXG4gICAgICAgIHN1Ym1pdDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZSA6IHZlcmJzLnNhdmUsXG4gICAgICAgIHN1Ym1pdHRlZDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZWQgOiB2ZXJicy5zYXZlZCxcbiAgICAgICAgY2FuY2VsOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWwgOiB2ZXJicy5jbG9zZSxcbiAgICAgICAgY2FuY2VsbGVkOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWxsZWQgOiB2ZXJicy5jbG9zZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUZvcm1TY2hlbWEoXG4gICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCwgcHJvdmlkZSBhbiBlbXB0eSBvYmplY3Qgd2l0aCBqdXN0IHRoZSByaWdodFxuICAgICAgICAvLyB0eXBlIHNldCwgc28gdGhlIGZvcm0gY2FuIGFsd2F5cyBiZSBkZXRlcm1pbmVkLlxuICAgICAgICB0aGlzLmRhdGEgfHwgeyB0eXBlOiB0aGlzLnR5cGUgfSxcbiAgICAgICAgdGhpcy5jb250ZXh0XG4gICAgICApIHx8IHt9IC8vIEFsd2F5cyByZXR1cm4gYSBzY2hlbWEgb2JqZWN0IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIGl0LlxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXMoXG4gICAgICAgIG1lcmdlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhbmNlbDoge1xuICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc3VibWl0OiAhdGhpcy5kb2VzTXV0YXRlICYmIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgIC8vIFN1Ym1pdCBidXR0b25zIGNsb3NlIHRoZSBmb3JtIGJ5IGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNsb3NlRm9ybTogdHJ1ZSxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICh7IGNvbXBvbmVudDogYnV0dG9uIH0pID0+IGJ1dHRvbi5zdWJtaXQoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnNjaGVtYS5idXR0b25zXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RSb3V0ZSB8fCB0aGlzLmlzTGFzdFVubmVzdGVkUm91dGVcbiAgICB9LFxuXG4gICAgaXNUcmFuc2llbnQoKSB7XG4gICAgICByZXR1cm4gIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzQ3JlYXRpbmcoKSB7XG4gICAgICAvLyB0aGlzLnBhcmFtIGlzIGluaGVyaXRlZCBmcm9tIFJvdXRlTWl4aW5cbiAgICAgIHJldHVybiB0aGlzLnBhcmFtID09PSAnY3JlYXRlJ1xuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLmRvZXNNdXRhdGUgJiYgISF0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LmlzRGlydHlcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5zZWxlY3RlZFRhYiB8fCBudWxsXG4gICAgfSxcblxuICAgIGRvZXNNdXRhdGUoKSB7XG4gICAgICAvLyBXaGVuIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCB0aGUgZm9ybSBlZGl0cyB0aGUgaW5oZXJpdGVkIGRhdGFcbiAgICAgIC8vIGRpcmVjdGx5IGluc3RlYWQgb2YgbWFraW5nIGEgY29weSBmb3IgYXBwbGljYXRpb24gdXBvbiBzdWJtaXQuXG4gICAgICAvLyBTZWUgYGluaGVyaXRlZERhdGEoKWAgY29tcHV0ZWQgcHJvcGVydHkgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZVNjaGVtYS5tdXRhdGVcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIC8vIFRoZSB0eXBlIG9mIGZvcm0gdG8gY3JlYXRlLCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZm9ybXMgdG8gY2hvb3NlIGZyb20uXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucXVlcnkudHlwZVxuICAgIH0sXG5cbiAgICBpdGVtSWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6ICh0aGlzLnBhcmFtID8/IG51bGwpXG4gICAgfSxcblxuICAgIG1ldGhvZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmcgPyAncG9zdCcgOiAncGF0Y2gnXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKClcbiAgICAgIHJldHVybiBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLml0ZW1JZCwgcmVzb3VyY2UpIHx8IHJlc291cmNlXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZSh0aGlzLmlzQ3JlYXRpbmcgPyB0aGlzLnZlcmJzLmNyZWF0ZSA6IHRoaXMudmVyYnMuZWRpdClcbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIC8vIFJldHVybiBkaWZmZXJlbnQgZGF0YSBcImNvbnRhaW5lcnNcIiBiYXNlZCBvbiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgICAgLy8gMS4gY3JlYXRlZERhdGEsIGlmIHdlJ3JlIGluIGEgZm9ybSBmb3IgYSBuZXdseSBjcmVhdGVkIG9iamVjdC5cbiAgICAgIC8vIDIuIGxvYWRlZERhdGEsIGlmIHRoZSBmb3JtIGl0c2VsZiBpcyB0aGUgcm9vdCBvZiB0aGUgZGF0YSAoZS5nLiB3aGVuXG4gICAgICAvLyAgICBkaXJlY3RseSBsb2FkaW5nIGFuIGVkaXRpbmcgcm9vdCkuXG4gICAgICAvLyAzLiBUaGUgZGF0YSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LCB3aGljaCBpdHNlbGYgbWF5IGJlIGVpdGhlciBhXG4gICAgICAvLyAgICB2aWV3IHRoYXQgbG9hZGVkIHRoZSBkYXRhLCBvciBhIGZvcm0gdGhhdCBlaXRoZXIgbG9hZGVkIHRoZSBkYXRhLCBvclxuICAgICAgLy8gICAgYWxzbyBpbmhlcml0ZWQgaXQgZnJvbSBpdHMgcGFyZW50LiBOb3RlIHRoYXQgd2UgdXNlIGEgY2xvbmUgb2YgaXQsXG4gICAgICAvLyAgICBzbywgZGF0YSBjaGFuZ2VzIGFyZW4ndCBhcHBsaWVkIHVudGlsIHNldFNvdXJjZURhdGEoKSBpcyBjYWxsZWQuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVkRGF0YSB8fCB0aGlzLmxvYWRlZERhdGEgfHwgdGhpcy5pbmhlcml0ZWREYXRhIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5kYXRhQ29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhKCkge1xuICAgICAgLy8gUG9zc2libGUgcGFyZW50cyBhcmUgRGl0b0Zvcm0gZm9yIGZvcm1zLCBvciBEaXRvVmlldyBmb3Igcm9vdCBsaXN0cy5cbiAgICAgIC8vIEJvdGggaGF2ZSBhIGRhdGEgcHJvcGVydHkgd2hpY2ggYWJzdHJhY3RzIGF3YXkgbG9hZGluZyBhbmQgaW5oZXJpdGluZ1xuICAgICAgLy8gb2YgZGF0YS5cbiAgICAgIGxldCB7IGRhdGEgfSA9IHRoaXMucGFyZW50Um91dGVDb21wb25lbnRcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZGF0YSBieSBzcGxpdHRpbmcgdGhlIGRhdGFQYXRoLCBpdGVyYXRlIHRocm91Z2ggdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkYXRhIGFuZCBsb29rIG5lc3QgY2hpbGQtZGF0YSB1cC5cbiAgICAgICAgY29uc3QgZGF0YVBhcnRzID0gcGFyc2VEYXRhUGF0aChcbiAgICAgICAgICB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50KVxuICAgICAgICApXG4gICAgICAgIC8vIENvbXBhcmUgZGF0YVBhcnRzIGFnYWluc3QgbWF0Y2hlZCByb3V0ZVBhdGggcGFydHMsIHRvIGlkZW50aWZ5IHRob3NlXG4gICAgICAgIC8vIHBhcnRzIHRoYXQgbmVlZCB0byBiZSB0cmVhdGVkIGxpa2UgaWRzIGFuZCBtYXBwZWQgdG8gaW5kaWNlcyBpbiBkYXRhLlxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnJvdXRlUmVjb3JkLnBhdGguc3BsaXQoJy8nKVxuICAgICAgICBjb25zdCByb3V0ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKHBhdGhQYXJ0cy5sZW5ndGggLSBkYXRhUGFydHMubGVuZ3RoKVxuICAgICAgICB0aGlzLnNvdXJjZUtleSA9IG51bGxcbiAgICAgICAgY29uc3QgbGFzdERhdGFQYXJ0ID0gZGF0YVBhcnRzW2RhdGFQYXJ0cy5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpICYmIGxhc3REYXRhUGFydCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9iamVjdCBzb3VyY2UgYW5kIGFyZSBjcmVhdGluZywgdGhlIGRhdGFQYXRoIG5lZWRzIHRvXG4gICAgICAgICAgLy8gYmUgc2hvcnRlbmVkIGJ5IHRoZSAnY3JlYXRlJyBlbnRyeS4gVGhpcyBpc24ndCBuZWVkZWQgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzLCBhcyB0aGVyZSB0aGUgcGFyYW1ldGVyIGlzIGFjdHVhbGx5IG1hcHBlZCB0byB0aGUgaXRlbSBpZC5cbiAgICAgICAgICBkYXRhUGFydHMubGVuZ3RoLS1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGRhdGFQYXJ0cy5sZW5ndGg7IGkgPCBsICYmIGRhdGE7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGFQYXJ0ID0gZGF0YVBhcnRzW2ldXG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiA6aWQgcGFydCwgZmluZCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2l0aCBnaXZlbiBpZC5cbiAgICAgICAgICBjb25zdCBrZXkgPSAvXjppZC8udGVzdChyb3V0ZVBhcnRzW2ldKVxuICAgICAgICAgICAgPyBkYXRhUGFydCA9PT0gJ2NyZWF0ZSdcbiAgICAgICAgICAgICAgPyBudWxsIC8vIFRoZXJlJ3Mgbm8gaW5kZXggZm9yIGVudHJpZXMgYWJvdXQgdG8gYmUgY3JlYXRlZFxuICAgICAgICAgICAgICA6IHRoaXMuZmluZEl0ZW1JZEluZGV4KHRoaXMuc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGFydClcbiAgICAgICAgICAgIDogZGF0YVBhcnRcbiAgICAgICAgICAvLyBTa2lwIHRoZSBmaW5hbCBsb29rdXAgYnV0IHJlbWVtYmVyIGBzb3VyY2VLZXlgLCBhcyB3ZSB3YW50IHRoZVxuICAgICAgICAgIC8vIHBhcmVudCBkYXRhIHNvIHdlIGNhbiByZXBsYWNlIHRoZSBlbnRyeSBhdCBgc291cmNlS2V5YCBvbiBpdC5cbiAgICAgICAgICBpZiAoaSA9PT0gbCAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlS2V5ID0ga2V5XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGluaGVyaXRlZERhdGEoKSB7XG4gICAgICAvLyBEYXRhIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgYW5kIGNsb25lZCB0byBwcm90ZWN0IGFnYWluc3QgcmVhY3RpdmVcbiAgICAgIC8vIGNoYW5nZXMgdW50aWwgY2hhbmdlcyBhcmUgYXBwbGllZCB0aHJvdWdoIHNldFNvdXJjZURhdGEoKSwgdW5sZXNzXG4gICAgICAvLyBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBkYXRhIGlzIG11dGF0ZWQgZGlyZWN0bHkuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhICYmXG4gICAgICAgIHRoaXMuc291cmNlS2V5ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldXG4gICAgICAgIGlmICghdGhpcy5kb2VzTXV0YXRlKSB7XG4gICAgICAgICAgLy8gVXNlIGEgdHJpY2sgdG8gc3RvcmUgY2xvbmVkIGluaGVyaXRlZCBkYXRhIGluIGNsb25lZERhdGEsIHRvIG1ha2VcbiAgICAgICAgICAvLyBpdCByZWFjdGl2ZSBhbmQgcHJldmVudCBpdCBmcm9tIGJlaW5nIGNsb25lZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgICAgICB0aGlzLmNsb25lZERhdGEgPSBkYXRhID0gY2xvbmUoZGF0YSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YSA9PT0gbnVsbCAmJlxuICAgICAgICAgICF0aGlzLmlzQ3JlYXRpbmcgJiZcbiAgICAgICAgICBpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBvZiBhbiBvYmplY3Qgc291cmNlIGlzIG51bGwsIHJlZGlyZWN0IHRvIGl0cyBjcmVhdGUgcm91dGUuXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoOiAnY3JlYXRlJywgYXBwZW5kOiB0cnVlIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNsb25lZERhdGFcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBpdGVtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgeyBleHRlbmRlZDogdHJ1ZSB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNvdXJjZURhdGE6ICdjbGVhckNsb25lZERhdGEnLFxuICAgIC8vIE5lZWRlZCBmb3IgdGhlICdjcmVhdGUnIHJlZGlyZWN0IGluIGBpbmhlcml0ZWREYXRhKClgIHRvIHdvcms6XG4gICAgY3JlYXRlOiAnc2V0dXBEYXRhJ1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9LFxuXG4gICAgZ2V0RGF0YVBhdGhGcm9tKHJvdXRlKSB7XG4gICAgICAvLyBHZXQgdGhlIGRhdGEgcGF0aCBieSBkZW5vcm1hbGl6ZVBhdGggdGhlIHJlbGF0aXZlIHJvdXRlIHBhdGhcbiAgICAgIHJldHVybiB0aGlzLmFwaS5kZW5vcm1hbGl6ZVBhdGgodGhpcy5wYXRoXG4gICAgICAgIC8vIERpdG9WaWV3cyBoYXZlIG5lc3RlZCByb3V0ZXMsIHNvIGRvbid0IHJlbW92ZSB0aGVpciBwYXRoLlxuICAgICAgICAuc2xpY2UoKHJvdXRlLmlzVmlldyA/IDAgOiByb3V0ZS5wYXRoLmxlbmd0aCkgKyAxKSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0dXBEYXRhKClcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSB0aGlzLmNyZWF0ZWREYXRhIHx8XG4gICAgICAgICAgdGhpcy5jcmVhdGVEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLnR5cGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZURhdGEgJiYgdGhpcy5zb3VyY2VLZXkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtYWluU2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICAgIHRoaXMuJHNldChcbiAgICAgICAgICB0aGlzLnNvdXJjZURhdGEsXG4gICAgICAgICAgdGhpcy5zb3VyY2VLZXksXG4gICAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5maWx0ZXJEYXRhKGRhdGEpXG4gICAgICAgIClcbiAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5vbkNoYW5nZSgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYWRkU291cmNlRGF0YShkYXRhKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgID8gdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogISF0aGlzLnNvdXJjZURhdGE/LnB1c2goZGF0YSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnNldERhdGEobnVsbClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBzZXREYXRhKCkgaXMgY2FsbGVkIGFmdGVyIHN1Ym1pdCB3aGVuIGRhdGEgaGFzIGNoYW5nZWQuXG4gICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIHRyYW5zaWVudCBkYXRhLCBtb2RpZnkgdGhpcy5zb3VyY2VEYXRhLlxuICAgICAgICB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJDbG9uZWREYXRhKG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICAgICAgLy8gT25seSBjbGVhciBpZiB0aGUgd2F0Y2hlZCBzb3VyY2VEYXRhIGl0c2VsZiBjaGFuZ2VzIGluIHRoZSBmb3JtLlxuICAgICAgaWYgKG5ld1ZhbHVlICE9PSBvbGRWYWx1ZSkge1xuICAgICAgICB0aGlzLmNsb25lZERhdGEgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKVxuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQucGF0aClcbiAgICB9LFxuXG4gICAgZ2V0U3VibWl0VmVyYihwcmVzZW50ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHByZXNlbnQgPyAnY3JlYXRlJyA6ICdjcmVhdGVkJ1xuICAgICAgICA6IHByZXNlbnQgPyAnc3VibWl0JyA6ICdzdWJtaXR0ZWQnXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24sIHsgdmFsaWRhdGUgPSB0cnVlLCBjbG9zZUZvcm0gPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICh2YWxpZGF0ZSAmJiAhdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBnZXRWZXJiID0gcHJlc2VudCA9PiB0aGlzLnZlcmJzW3RoaXMuZ2V0U3VibWl0VmVyYihwcmVzZW50KV1cblxuICAgICAgLy8gQWxsb3cgYnV0dG9ucyB0byBvdmVycmlkZSBib3RoIG1ldGhvZCBhbmQgcmVzb3VyY2UgcGF0aCB0byBzdWJtaXQgdG86XG4gICAgICBjb25zdCBidXR0dG9uUmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc291cmNlID0gYnV0dHRvblJlc291cmNlIHx8IHRoaXMucmVzb3VyY2VcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlc291cmNlPy5tZXRob2QgfHwgdGhpcy5tZXRob2RcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgbGV0IHN1Y2Nlc3NcbiAgICAgIGlmICghYnV0dHRvblJlc291cmNlICYmIHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICA/IGBJdGVtICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gXG4gICAgICAgICAgICAgICAgOiBgQ2hhbmdlICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgICA/IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICAgICAgICA6IGBDaGFuZ2VzIHRvICR7dGhpcy5pdGVtTGFiZWx9IHdlcmUgJHt2ZXJifS5gLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIHNldERhdGE6IHRydWUsXG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGBTdWNjZXNzZnVsbHkgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0ke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgICAgaWYgKGNsb3NlRm9ybSB8fCBidXR0b24uY2xvc2VGb3JtKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGZvcm0gZWRpdGluZyB0aGUgbmV3bHkgY3JlYXRlZCBpdGVtOlxuICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHBhdGg6IGAuLi8ke2lkfWAsIGFwcGVuZDogdHJ1ZSB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRUcmFuc2llbnQoYnV0dG9uLCBfcmVzb3VyY2UsIF9tZXRob2QsIGRhdGEsIHtcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzLFxuICAgICAgbm90aWZ5RXJyb3JcbiAgICB9KSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIGRlZmF1bHQgXCJzdWJtaXR0aW5nXCIgb2YgdHJhbnNpZW50LCBuZXN0ZWQgZGF0YTpcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyB0aGlzLmFkZFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gJ0NvdWxkIG5vdCBzdWJtaXQgdHJhbnNpZW50IGl0ZW0nXG4gICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1mb3JtLW5lc3RlZFxuICAgICYsXG4gICAgLmRpdG8tc2Nyb2xsXG4gICAgICAvLyBObyBzY3JvbGxpbmcgaW5zaWRlIG5lc3RlZCBmb3JtcywgYW5kIHByZXZlbnQgb3BlbiAubXVsdGlzZWxlY3QgZnJvbVxuICAgICAgLy8gYmVpbmcgY3JvcHBlZC5cbiAgICAgIG92ZXJmbG93OiB2aXNpYmxlXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Gb3JtIGZyb20gJy4vRGl0b0Zvcm0udnVlJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvRm9ybS5jb21wb25lbnQoJ2RpdG8tZm9ybS1uZXN0ZWQnLCB7fSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1lcnJvcnMoXG4gIHYtaWY9XCJlcnJvcnNcIlxuKVxuICB1bFxuICAgIGxpKHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCIpXG4gICAgICB8IHt7IGVycm9yIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1lcnJvcnMoXG4gICAgdi1pZj1cImVycm9yc1wiXG4gIClcbiAgICB1bFxuICAgICAgbGkodi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIilcbiAgICAgICAgfCB7eyBlcnJvciB9fVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWVycm9yc1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgIHotaW5kZXg6IDFcbiAgICB1bFxuICAgICAgbWFyZ2luLXRvcDogMXB4XG4gICAgICBjb2xvcjogJGNvbG9yLWVycm9yXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdkaXRvLWVycm9ycycsIHtcbiAgcHJvcHM6IHtcbiAgICBlcnJvcnM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXNjb3Blc1xuICByb3V0ZXItbGluayhcbiAgICB2LWZvcj1cIihzY29wZSwga2V5KSBpbiBzY29wZXNcIlxuICAgIDprZXk9XCJrZXlcIlxuICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgIGN1c3RvbSB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNlbGVjdGVkJzogc2NvcGUubmFtZSA9PT0gcXVlcnkuc2NvcGUgfVwiXG4gICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgKSB7eyBnZXRMYWJlbChzY29wZSkgfX1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXNjb3Blc1xuICAgIHJvdXRlci1saW5rKFxuICAgICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOnRvPVwiZ2V0U2NvcGVMaW5rKHNjb3BlKVwiXG4gICAgICBjdXN0b20gdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNlbGVjdGVkJzogc2NvcGUubmFtZSA9PT0gcXVlcnkuc2NvcGUgfVwiXG4gICAgICAgIDp0aXRsZT1cInNjb3BlLmhpbnQgfHwgZ2V0TGFiZWwoc2NvcGUpXCJcbiAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgKSB7eyBnZXRMYWJlbChzY29wZSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zY29wZXNcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwXG4gICAgZGlzcGxheTogZmxleFxuICAgIC5kaXRvLWJ1dHRvblxuICAgICAgK2VsbGlwc2lzXG4gICAgICBib3JkZXItcmFkaXVzOiAwXG4gICAgICAvLyBBIGJpdCBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIGVsbGlwc2lzLCB0byBwcmV2ZW50IHJlcGxhY2luZyBzaG9ydCB3b3Jkc1xuICAgICAgLy8gd2l0aCBlbGxpcHNpcy5cbiAgICAgIG1pbi13aWR0aDogM2VtXG4gICAgICBmbGV4OiAwIDEgYXV0b1xuICAgICAgJjpmaXJzdC1jaGlsZFxuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxZW1cbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMWVtXG4gICAgICAgIHBhZGRpbmctbGVmdDogMWVtXG4gICAgICAmOmxhc3QtY2hpbGRcbiAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDFlbVxuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMWVtXG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbVxuICAgICAgJiArIC5kaXRvLWJ1dHRvblxuICAgICAgICBtYXJnaW4tbGVmdDogLTFweFxuICAgICAgLy8gRG9uJ3QgY292ZXIgdGhlIGZvY3VzZWQgYm9yZGVyIG9mIGJ1dHRvbnM6XG4gICAgICAmOmZvY3VzXG4gICAgICAgIHotaW5kZXg6IDFcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tc2NvcGVzJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY29wZXM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFNjb3BlTGluayhzY29wZSkge1xuICAgICAgY29uc3QgcXVlcnkgPSB7IC4uLnRoaXMucXVlcnksIHNjb3BlOiBzY29wZS5uYW1lIH1cbiAgICAgIGlmIChxdWVyeS5wYWdlKSB7XG4gICAgICAgIHF1ZXJ5LnBhZ2UgPSAwXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsocXVlcnkpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnBhZ2luYXRpb24oXG4gIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgOnRvdGFsPVwidG90YWxcIlxuICA6cGFnZS5zeW5jPVwicGFnZVwiXG4pXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICBwYWdpbmF0aW9uKFxuICAgIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgICA6dG90YWw9XCJ0b3RhbFwiXG4gICAgOnBhZ2Uuc3luYz1cInBhZ2VcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tcGFnaW5hdGlvbicsIHtcbiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKCt0aGlzLnF1ZXJ5LnBhZ2UgfHwgMCkgKyAxXG4gICAgICB9LFxuXG4gICAgICBzZXQocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2godGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2U6IChwYWdlIC0gMSlcbiAgICAgICAgICB9KSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuLi9taXhpbnMvSXRlbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkVuZERyYWcoeyBvbGRJbmRleCwgbmV3SW5kZXggfSkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlXG4gICAgICBpZiAob2xkSW5kZXggIT09IG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3QsIHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgY29uc3QgeyBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgICAgLy8gUmVvcmRlciB0aGUgY2hhbmdlZCBlbnRyaWVzIGJ5IHRoZWlyIG9yZGVyIGtleSwgdGFraW5nIHBhZ2luYXRpb25cbiAgICAgICAgLy8gb2Zmc2V0cyBpbnRvIGFjY291bnQ6XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhZ2luYXRpb25SYW5nZT8uWzBdIHx8IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXVtvcmRlcktleV0gPSBpICsgb2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG59XG4iLCJcbi5kaXRvLXRyZWUtaXRlbShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICdkaXRvLWFjdGl2ZSc6IGFjdGl2ZVxuICB9YFxuICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuKVxuICAuZGl0by10cmVlLWhlYWRlcih2LWlmPVwibGFiZWxcIilcbiAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgKVxuICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW5lZCc6IG9wZW5lZCB9XCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLXRyZWUtaW5mbyh2LWlmPVwiZGV0YWlsc1wiKSB7eyBkZXRhaWxzIH19XG4gICAgLmRpdG8tdHJlZS1sZWFmKHYtZWxzZSlcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICApXG4gIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICB2LWlmPVwicHJvcGVydGllc1wiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgKVxuICAgIHRyKFxuICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICApXG4gICAgICB0ZFxuICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICApXG4gICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICB2dWUtZHJhZ2dhYmxlKFxuICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICB2LWJpbmQ9XCJnZXREcmFnT3B0aW9ucyhjaGlsZHJlbkRyYWdnYWJsZSwgdHJ1ZSlcIlxuICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICBAZW5kPVwib25FbmREcmFnKCRldmVudCwgY2hpbGRyZW5TY2hlbWEpXCJcbiAgKVxuICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICApXG4gICAgLy8gVE9ETzogQ29udmVydCBkaXRvLXRyZWUtaXRlbSB0byB1c2UgZGl0by1sYWJlbCBpbnRlcm5hbGx5LCBhbmQgdGhlblxuICAgIC8vIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdHJlZS1pdGVtKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLWRyYWdnaW5nJzogZHJhZ2dpbmcsXG4gICAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgICB9YFxuICAgIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4gIClcbiAgICAuZGl0by10cmVlLWhlYWRlcih2LWlmPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogb3BlbmVkIH1cIlxuICAgICAgICApXG4gICAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgICAgLmRpdG8tdHJlZS1pbmZvKHYtaWY9XCJkZXRhaWxzXCIpIHt7IGRldGFpbHMgfX1cbiAgICAgIC5kaXRvLXRyZWUtbGVhZih2LWVsc2UpXG4gICAgICAgIC5kaXRvLXRyZWUtbGFiZWwodi1odG1sPVwibGFiZWxcIilcbiAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiKVxuICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICApXG4gICAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICAgIClcbiAgICAgICAgdGRcbiAgICAgICAgICBkaXRvLWxhYmVsKFxuICAgICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICAgIClcbiAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICApXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoY2hpbGRyZW5EcmFnZ2FibGUsIHRydWUpXCJcbiAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZygkZXZlbnQsIGNoaWxkcmVuU2NoZW1hKVwiXG4gICAgKVxuICAgICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgICA6c2NoZW1hPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgICAgOnBhdGg9XCJpdGVtLnBhdGhcIlxuICAgICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJjaGlsZHJlbkRyYWdnYWJsZVwiXG4gICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAgIC8vIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXRyZWUtaXRlbVxuICAgIC0tY2hldnJvbi1pbmRlbnQ6ICN7JGNoZXZyb24taW5kZW50fVxuICAgID4gLmRpdG8tdHJlZS1oZWFkZXJcbiAgICAgID4gLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgICA+IC5kaXRvLXRyZWUtbGVhZlxuICAgICAgICAvLyBVc2UgYC0tbGV2ZWxgIENTUyB2YXJpYWJsZSB0byBjYWxjdWxhdGVkIHRoZSBhY2N1bXVsYXRlZCBpbmRlbnRcbiAgICAgICAgLy8gcGFkZGluZyBkaXJlY3RseSBpbnN0ZWFkIG9mIGhhdmluZyBpdCBhY2N1bXVsYXRlIGluIG5lc3RlZCBDU1MuXG4gICAgICAgIC8vIFRoaXMgd2F5LCB3ZSBjYW4ga2VlcCB0aGUgLmRpdG8tYWN0aXZlIGFyZWEgY292ZXIgdGhlIGZ1bGwgd2lkdGg6XG4gICAgICAgIHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS1jaGV2cm9uLWluZGVudCkgKiAodmFyKC0tbGV2ZWwsIDEpIC0gMSkpXG4gICAgLmRpdG8tdHJlZS1icmFuY2hcbiAgICAgIGN1cnNvcjogcG9pbnRlclxuICAgIC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW5cbiAgICAuZGl0by10cmVlLWJyYW5jaCxcbiAgICAuZGl0by10cmVlLWxlYWZcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGZsZXg6IGF1dG9cbiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuICAgICAgbWFyZ2luOiAxcHggMFxuICAgICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgLmRpdG8tdHJlZS1sYWJlbCxcbiAgICAuZGl0by10cmVlLWluZm9cbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICAuZGl0by10cmVlLWluZm9cbiAgICAgIHBhZGRpbmctbGVmdDogMC4zNWVtXG4gICAgICBjb2xvcjogcmdiYSgkY29sb3ItYmxhY2ssIC4yKVxuICAgIC5kaXRvLWJ1dHRvbnNcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuICAgICAgaGVpZ2h0OiAxMDAlXG4gICAgICBtYXJnaW4tbGVmdDogMWVtXG4gICAgICBtYXJnaW46IDFweCAwIDFweCAxZW1cbiAgICAuZGl0by10cmVlLWhlYWRlcjpob3ZlclxuICAgICAgPiAuZGl0by1idXR0b25zXG4gICAgICAgIHZpc2liaWxpdHk6IHZpc2libGVcbiAgICAvLyBIaWRlIGJ1dHRvbnMgZHVyaW5nIGRyYWdnaW5nXG4gICAgJi5kaXRvLWRyYWdnaW5nXG4gICAgICAuZGl0by10cmVlLWhlYWRlclxuICAgICAgICA+IC5kaXRvLWJ1dHRvbnNcbiAgICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW5cbiAgICAmLmRpdG8tYWN0aXZlXG4gICAgICA+IC5kaXRvLXRyZWUtaGVhZGVyXG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgcGFkZGluZzogMCAkaW5wdXQtcGFkZGluZy1ob3JcbiAgICAgICAgbWFyZ2luOiAwICgtJGlucHV0LXBhZGRpbmctaG9yKVxuICAgICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoXG4gICAgICAgICAgPiAuZGl0by1jaGV2cm9uOjpiZWZvcmVcbiAgICAgICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgICAgICA+ICogPiAuZGl0by10cmVlLWxhYmVsXG4gICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZVxuICAgIC5kaXRvLXByb3BlcnRpZXNcbiAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICBtYXJnaW4tbGVmdDogJGNoZXZyb24taW5kZW50XG4gICAgICA+IHRyXG4gICAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZVxuICAgICAgLmRpdG8tbGFiZWxcbiAgICAgICAgbWFyZ2luOiAwXG4gICAgICAgICY6OmFmdGVyXG4gICAgICAgICAgY29udGVudDogJzogJ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBPcmRlcmVkTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09yZGVyZWRNaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIGhhc0Zvcm1TY2hlbWEgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10cmVlLWl0ZW0nLCB7XG4gIGNvbXBvbmVudHM6IHsgVnVlRHJhZ2dhYmxlIH0sXG4gIG1peGluczogW09yZGVyZWRNaXhpbl0sXG4gIGluamVjdDogWydjb250YWluZXInXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW0FycmF5LCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgb3BlbjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjdGl2ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxldmVsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbmVkOiB0aGlzLm9wZW4gfHwgdGhpcy5zY2hlbWEub3BlblxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIubWV0YVxuICAgIH0sXG5cbiAgICBzdG9yZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5zdG9yZVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5kaXNhYmxlZFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnByb3BlcnRpZXMpXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFNob3VsZCB0aGlzIGJlIG5hbWVkIGBzb3VyY2VTY2hlbWFgIGluc3RlYWQ/IFVzZSBTb3VyY2VNaXhpbj9cbiAgICBjaGlsZHJlblNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5jaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkxpc3QoKSB7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5jaGlsZHJlblNjaGVtYT8ubmFtZVxuICAgICAgcmV0dXJuIG5hbWUgJiYgdGhpcy5kYXRhW25hbWVdXG4gICAgfSxcblxuICAgIGNoaWxkcmVuRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZHJhZ2dhYmxlJywge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgc2NoZW1hOiB0aGlzLmNoaWxkcmVuU2NoZW1hXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG51bUNoaWxkcmVuKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1Qcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcz8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtRW50cmllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLm51bVByb3BlcnRpZXMgKyB0aGlzLm51bUNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuSXRlbXMoKSB7XG4gICAgICBjb25zdCB7IGNoaWxkcmVuU2NoZW1hIH0gPSB0aGlzXG4gICAgICBpZiAoY2hpbGRyZW5TY2hlbWEpIHtcbiAgICAgICAgY29uc3QgeyBlZGl0UGF0aCB9ID0gdGhpcy5jb250YWluZXJcbiAgICAgICAgY29uc3QgY2hpbGRyZW5PcGVuID0gIXRoaXMucGF0aCAmJiBjaGlsZHJlblNjaGVtYS5vcGVuXG4gICAgICAgIC8vIEJ1aWxkIGEgY2hpbGRyZW4gbGlzdCB3aXRoIGNoaWxkIG1ldGEgaW5mb3JtYXRpb24gZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5MaXN0Py5tYXAoKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IChcbiAgICAgICAgICAgIGNoaWxkcmVuU2NoZW1hLnBhdGggJiZcbiAgICAgICAgICAgIGAke3RoaXMucGF0aH0vJHtjaGlsZHJlblNjaGVtYS5wYXRofS8ke2luZGV4fWBcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc3Qgb3BlbiA9IGNoaWxkcmVuT3BlbiB8fFxuICAgICAgICAgICAgLy8gT25seSBjb3VudCBhcyBcImluIGVkaXQgcGF0aFwiIHdoZW4gaXQncyBub3QgdGhlIGZ1bGwgZWRpdCBwYXRoLlxuICAgICAgICAgICAgZWRpdFBhdGguc3RhcnRzV2l0aChwYXRoKSAmJiBwYXRoLmxlbmd0aCA8IGVkaXRQYXRoLmxlbmd0aFxuICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IGVkaXRQYXRoID09PSBwYXRoXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgb3BlbixcbiAgICAgICAgICAgIGFjdGl2ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGV0YWlscygpIHtcbiAgICAgIGNvbnN0IHsgbnVtQ2hpbGRyZW4gfSA9IHRoaXNcbiAgICAgIHJldHVybiBudW1DaGlsZHJlbiAmJiBgJHtudW1DaGlsZHJlbn0gJHtcbiAgICAgICAgbnVtQ2hpbGRyZW4gPT09IDEgPyAnaXRlbScgOiAnaXRlbXMnXG4gICAgICB9YFxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmRyYWdnYWJsZSB8fCB0aGlzLmVkaXRhYmxlIHx8IHRoaXMuZGVsZXRhYmxlXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFN1cHBvcnQgY3JlYXRhYmxlIVxuICAgIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciBjcmVhdGFibGUsIGVkaXRhYmxlIGFuZCBkZWxldGFibGUgb3ZlcnJpZGVzIG9uIHRoZVxuICAgIC8vIGFzc29jaWF0ZWQgZm9ybXMsIGp1c3QgbGlrZSBpbiBgVHlwZUxpc3RgIGFuZCBgVHlwZU9iamVjdGAsIHRocm91Z2hcbiAgICAvLyBgRGl0b0VkaXRCdXR0b25zYC4gSXQgd291bGQgYmUgYmVzdCB0byB1c2UgYERpdG9FZGl0QnV0dG9uc2AgaGVyZSB0b28uXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHByb3BlcnR5Lm5hbWUpXG4gICAgfSxcblxuICAgIG9uRWRpdCgpIHtcbiAgICAgIC8vIEFsbCB3ZSBnb3QgdG8gZG8gaXMgcHVzaCB0aGUgcmlnaHQgZWRpdCBwYXRoIHRvIHRoZSByb3V0ZXIsIHRoZSByZXN0XG4gICAgICAvLyBpcyBoYW5kbGVkIGJ5IG91ciByb3V0ZXMsIGFsbG93aW5nIHJlbG9hZHMgYXMgd2VsbC5cbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgcGF0aDogYCR7dGhpcy5jb250YWluZXIucGF0aH0ke3RoaXMucGF0aH1gLFxuICAgICAgICAvLyBQcmVzZXJ2ZSBjdXJyZW50IHF1ZXJ5XG4gICAgICAgIHF1ZXJ5OiB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25EZWxldGUoKSB7XG4gICAgICAvLyBUT0RPOiBJbXBsZW1lbnQhXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5jb250YWluZXIub25DaGFuZ2UoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgdHJcbiAgICB0aChcbiAgICAgIHYtZm9yPVwiKGNvbHVtbiwgaW5kZXgpIGluIGNvbHVtbnNcIlxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgIClcbiAgICAgIHJvdXRlci1saW5rKFxuICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgOnRvPVwiZ2V0U29ydExpbmsoY29sdW1uKVwiXG4gICAgICAgIGN1c3RvbSB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlXG4gICAgICApIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICB0aCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgIC8vIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Fzc1xuICAgICAgc3BhblxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgdHJcbiAgICAgIHRoKFxuICAgICAgICB2LWZvcj1cIihjb2x1bW4sIGluZGV4KSBpbiBjb2x1bW5zXCJcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKVwiXG4gICAgICApXG4gICAgICAgIHJvdXRlci1saW5rKFxuICAgICAgICAgIHYtaWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICAgIGN1c3RvbSB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgICAgICApXG4gICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRTb3J0Q2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tb3JkZXItYXJyb3dzXG4gICAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgICAgc3BhbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICB0aCh2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIilcbiAgICAgICAgLy8gRW1wdHkgPHNwYW4+IGlzIG5lZWRlZCBmb3Igc3R5bGluZywgc2VlIF90YWJsZS5zYXNzXG4gICAgICAgIHNwYW5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10YWJsZS1oZWFkXG4gICAgK3VzZXItc2VsZWN0KG5vbmUpXG4gICAgdHJcbiAgICAgIHRoXG4gICAgICAgIHBhZGRpbmc6IDBcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbFxuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXBcbiAgICAgICAgLmRpdG8tYnV0dG9uXG4gICAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nLCBzZWUgYmVsb3dcbiAgICAgICAgICBwYWRkaW5nOiAwXG4gICAgICAgICAgd2lkdGg6IDEwMCVcbiAgICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMFxuICAgICAgICBzcGFuXG4gICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nXG4gICAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmdcbiAgICAgICAgICAmOmVtcHR5OjphZnRlclxuICAgICAgICAgICAgLy8gUHJldmVudCBlbXB0eSA8dGg+IGZyb20gY29sbGFwc2luZ1xuICAgICAgICAgICAgY29udGVudDogJ1xcMjAwYicgLy8gemVyby13aWR0aCBzcGFjZVxuICAgICAgICA+IHNwYW5cbiAgICAgICAgICBkaXNwbGF5OiBibG9ja1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ2RpdG8tdGFibGUtaGVhZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sdW1uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgaGFzRWRpdEJ1dHRvbnM6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc29ydCgpIHtcbiAgICAgIGNvbnN0IG9yZGVyID0gKHRoaXMucXVlcnkub3JkZXIgfHwgJycpLnNwbGl0KC9cXHMrLylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG9yZGVyWzBdLFxuICAgICAgICBvcmRlcjogb3JkZXJbMV1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbHVtbkNsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNvbHVtbi0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRTb3J0Q2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lXG4gICAgICAgID8gYGRpdG8tc2VsZWN0ZWQgZGl0by1vcmRlci0ke3RoaXMuc29ydC5vcmRlcn1gXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRTb3J0TGluayhjb2x1bW4pIHtcbiAgICAgIC8vIFRvZ2dsZSBvcmRlciBpZiB0aGUgc2FtZSBjb2x1bW4gaXMgY2xpY2tlZCBhZ2Fpbi5cbiAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lICYmIHRoaXMuc29ydC5vcmRlciA9PT0gJ2FzYydcbiAgICAgICAgPyAnZGVzYydcbiAgICAgICAgOiAnYXNjJ1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgb3JkZXI6IGAke2NvbHVtbi5uYW1lfSAke29yZGVyfWBcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRkKFxuICA6Y2xhc3M9XCJjZWxsLmNsYXNzXCJcbiAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4pXG4gIC8vIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNvbXBvbmVudFwiXG4gICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiAgc3BhbihcbiAgICB2LWVsc2VcbiAgICB2LWh0bWw9XCJyZW5kZXJDZWxsKGRhdGEpXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdGQoXG4gICAgOmNsYXNzPVwiY2VsbC5jbGFzc1wiXG4gICAgOnN0eWxlPVwiY2VsbC5zdHlsZVwiXG4gIClcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgaW5saW5lZCBjb21wb25lbnRzIGluIGNlbGwgbW9kZSFcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWlmPVwiY29tcG9uZW50XCJcbiAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cInJlbmRlckNlbGwoZGF0YSlcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by10YWJsZS1jZWxsJywge1xuICBwcm9wczoge1xuICAgIGNlbGw6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVUeXBlQ29tcG9uZW50KHRoaXMuY2VsbC5jb21wb25lbnQpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZW5kZXJDZWxsKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHsgbmFtZSwgcmVuZGVyIH0gPSB0aGlzLmNlbGxcbiAgICAgIGNvbnN0IHZhbHVlID0gaXRlbVtuYW1lXVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbCh2YWx1ZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBBIGNvbXBvbmVudCB0byBzaW1wbHkgcGFzcyB0aHJvdWdoIGFuIGV4aXN0aW5nIHZ1ZSB2bm9kZS5cbi8vIFNlZTogaHR0cHM6Ly9mb3J1bS52dWVqcy5vcmcvdC8yODE2Mi80XG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnZGl0by12bm9kZScsIHtcbiAgZnVuY3Rpb25hbDogdHJ1ZSxcbiAgcmVuZGVyOiAoaCwgY29udGV4dCkgPT4gY29udGV4dC5wcm9wcy5ub2RlXG59KVxuPC9zY3JpcHQ+XG4iLCIvLyBUeXBlQ29tcG9uZW50IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNvbXBvbmVudCBmb3IgYWxsIG90aGVyIHR5cGUgY29tcG9uZW50c1xuLy8gaW5zaWRlIHRoZSB0eXBlcy8gZm9sZGVyLiBUaGVyZSdzIGFsc28gYSBzZXBhcmF0ZSBjb25jcmV0ZVxuLy8gYFR5cGVDb21wb25lbnQudnVlYCBjb21wb25lbnQsIHVzZSB0byByZW5kZXIgdGhlIGB0eXBlOiAnY29tcG9uZW50J2AgdHlwZXMuXG5pbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVnaXN0ZXJUeXBlQ29tcG9uZW50LCBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbmNvbnN0IFR5cGVDb21wb25lbnQgPSBEaXRvQ29tcG9uZW50LmV4dGVuZCh7XG4gIG1peGluczogW1R5cGVNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IGZhbHNlLFxuICB0ZXh0RmllbGQ6IGZhbHNlLFxuICAvLyBTZXQgcmVhc29uYWJsZSBkZWZhdWx0cyBmb3IgYWxsIG9mIHRoZXNlIHRoYXQgYXJlIHVzZWQgYnkgbW9zdCB0eXBlXG4gIC8vIGNvbXBvbmVudHMuIFRoZXNlIG9ubHkgbmVlZCBkZWZpbmluZyBpbiBzdWItY2xhc3NlcyB3aGVuIHRoZXkgZGlmZmVyLlxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRlZmF1bHROZXN0ZWQ6IHRydWUsXG4gIGRlZmF1bHRWaXNpYmxlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiB0cnVlLFxuICBleGNsdWRlVmFsdWU6IGZhbHNlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IG51bGwsXG4gIG9taXRQYWRkaW5nOiBmYWxzZVxufSlcblxuVHlwZUNvbXBvbmVudC5yZWdpc3RlciA9IGZ1bmN0aW9uKHR5cGVzLCBkZWZpbml0aW9uID0ge30pIHtcbiAgdHlwZXMgPSBhc0FycmF5KHR5cGVzKVxuICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudChgZGl0by10eXBlLSR7dHlwZXNbMF19YCwgZGVmaW5pdGlvbilcbiAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cblR5cGVDb21wb25lbnQuZ2V0ID0gZ2V0VHlwZUNvbXBvbmVudFxuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50XG4iLCJcbmJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnR5cGU9XCJ0eXBlXCJcbiAgOnRpdGxlPVwidGV4dFwiXG4gIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbikge3sgdGV4dCB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dHlwZT1cInR5cGVcIlxuICAgIDp0aXRsZT1cInRleHRcIlxuICAgIDpjbGFzcz1cImBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICkge3sgdGV4dCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcihbXG4gICdidXR0b24nLCAnc3VibWl0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuICAvLyBUT0RPOiBDb25zaWRlciBtYWtpbmcgdGhpcyB3b3JrIG5pY2VseTpcbiAgLy8gb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdmVyYigpIHtcbiAgICAgIHJldHVybiB0aGlzLnZlcmJzW3RoaXMubmFtZV0gfHwgdGhpcy5uYW1lXG4gICAgfSxcblxuICAgIHRleHQ6IGdldFNjaGVtYUFjY2Vzc29yKCd0ZXh0Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZ2V0KHRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRleHQgfHwgbGFiZWxpemUodGhpcy52ZXJiKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY2xvc2VGb3JtOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xvc2VGb3JtJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQG92ZXJyaWRlXG4gICAgZ2V0TGlzdGVuZXJzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgYmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICAgIGNsaWNrOiB0aGlzLm9uQ2xpY2tcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc291cmNlQ29tcG9uZW50Py5zdWJtaXQodGhpcywgb3B0aW9ucylcbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGljaygpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZW1pdEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgfSlcbiAgICAgIC8vIEhhdmUgYnV0dG9ucyB0aGF0IGRlZmluZSByZXNvdXJjZXMgY2FsbCBgdGhpcy5zdWJtaXQoKWAgYnkgZGVmYXVsdDpcbiAgICAgIGlmIChcbiAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiYgLy8gTWVhbmluZzogZG9uJ3QgcHJldmVudCBkZWZhdWx0LlxuICAgICAgICBoYXNSZXNvdXJjZSh0aGlzLnNjaGVtYSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnN1Ym1pdCgpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmlucHV0LmRpdG8tY2hlY2tib3goXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHR5cGU9XCJjaGVja2JveFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLWNoZWNrYm94XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzc1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveCcsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc0Z1bmN0aW9uLCBpc1Byb21pc2UsIG5vcm1hbGl6ZURhdGFQYXRoLCBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IHt9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwge1xuICAgICAgcmVzb2x2ZUNvdW50ZXIgPSAxLFxuICAgICAgLi4ubG9hZGluZ09wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFzeW5jIGRhdGEgbG9hZGluZyBhbHJlYWR5IGluIHByb2Nlc3MuXG4gICAgICBjb25zdCBhc3luY0VudHJ5ID0gKFxuICAgICAgICB0aGlzLmFzeW5jRGF0YUVudHJpZXNbbmFtZV0gfHxcbiAgICAgICAgdGhpcy4kc2V0KHRoaXMuYXN5bmNEYXRhRW50cmllcywgbmFtZSwge1xuICAgICAgICAgIGRlcGVuZGVuY3lGdW5jdGlvbjogbnVsbCxcbiAgICAgICAgICByZXNvbHZlQ291bnRlcjogMCxcbiAgICAgICAgICByZXNvbHZlZERhdGE6IG51bGwsXG4gICAgICAgICAgcmVzb2x2aW5nOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLy8gSWYgdGhlIGRhdGEgY2FsbGJhY2sgcHJvdmlkZWQgYSBkZXBlbmRlbmN5IGZ1bmN0aW9uIHdoZW4gaXQgd2FzIGNhbGxlZCxcbiAgICAgIC8vIGNhbCBpdCBpbiBldmVyeSBjYWxsIG9mIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGZvcmNlIFZ1ZSB0byBrZWVwIHRyYWNrXG4gICAgICAvLyBvZiB0aGUgYXN5bmMgZGVwZW5kZW5jaWVzLlxuICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24/LmNhbGwodGhpcywgdGhpcy5jb250ZXh0KVxuXG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA+IDApIHtcbiAgICAgICAgLy8gSWYgdGhlIGRhdGEgd2FzIHJlc29sdmVkIGFscmVhZHksIHJldHVybiBpdCBhbmQgY2xlYXIgdGhlIHZhbHVlIG9uY2VcbiAgICAgICAgLy8gYHJlc29sdmVDb3VudGVyYCByZWFjaGVzIHplcm8uIENvdW50aW5nIGlzIG5lZWRlZCBiZWNhdXNlIGRlcGVuZGluZ1xuICAgICAgICAvLyBvbiB0aGUgdXNlIG9mIGRhdGEgYW5kIHJlYWN0aXZpdHksIG11bHRpcGxlIGNhbGxzIHRvIHRoZSBjb21wdXRlZFxuICAgICAgICAvLyBnZXR0ZXIgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBkYXRhIGlzIGNoYW5naW5nLiBDbGVhcmluZyB0aGUgcmVzb2x2ZWRcbiAgICAgICAgLy8gZGF0YSB3b3JrcyBiZWNhdXNlIFZ1ZSBjYWNoZXMgdGhlIHJlc3VsdCBvZiBjb21wdXRlZCBnZXR0ZXJzIGFuZCBvbmx5XG4gICAgICAgIC8vIHJlZXZhbHVhdGVzIGlmIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZWQuIFRoaXMgaXMgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgYSBjYWNoZWQgdmFsdWUgaGVyZSBkb2Vzbid0IGJsb2NrIC8gb3ZlcnJpZGUgcmVldmFsdWF0aW9uOlxuICAgICAgICBjb25zdCB7IHJlc29sdmVkRGF0YSB9ID0gYXN5bmNFbnRyeVxuICAgICAgICBpZiAoLS1hc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID09PSAwKSB7XG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkRGF0YVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgY2FsbGluZyB0aGUgZGF0YSBmdW5jdGlvbiB0d2ljZTpcbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmluZykge1xuICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YS5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBkYXRhIGZ1bmN0aW9uIGlzIGFub3RoZXIgZnVuY3Rpb24sIHRoZW4gdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZGF0YSBmdW5jdGlvbiBpcyB0aGVyZSB0byB0cmFjayBkZXBlbmRlbmNpZXMgYW5kIHRoZSByZWFsXG4gICAgICAgICAgLy8gZGF0YSBsb2FkaW5nIGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQuIEtlZXAgdHJhY2tcbiAgICAgICAgICAvLyBpdCBpbiBgZGVwZW5kZW5jeUZ1bmN0aW9uYCBzbyBpdCBjYW4gYmUgY2FsbGVkIG9uIGVhY2ggY2FsbCBvZlxuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBpbnRhY3QsIGFuZCBjYWxsXG4gICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQgb25jZSB0byBnZXQgdGhlIGFjdHVhbCBkYXRhOlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uID0gZGF0YVxuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdC5jYWxsKHRoaXMsIHRoaXMuY29udGV4dClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGRhdGEpKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRhdGEgaXMgYXN5bmNocm9ub3VzLCBpdCBjYW4ndCBiZSByZXR1cm5lZCBzdHJhaWdodCBhd2F5LlxuICAgICAgICAgIC8vIEJ1dCB3ZSBjYW4gY2hlYXQgdXNpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhbmQgYHJlc29sdmVkRGF0YWAsXG4gICAgICAgICAgLy8gd2hpY2ggaXMgZ29pbmcgdG8gcmVjZWl2ZSB0aGUgbG9hZGVkIGRhdGEgYXN5bmNocm9ub3VzbHksXG4gICAgICAgICAgLy8gdHJpZ2dlcmluZyBhIHJlY29tcHV0ZSBvZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCBjYWxsc1xuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgLlxuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gdHJ1ZVxuICAgICAgICAgIHRoaXMucmVzb2x2ZURhdGEoZGF0YSwgbG9hZGluZ09wdGlvbnMpLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID0gcmVzb2x2ZUNvdW50ZXJcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZWREYXRhID0gZGF0YVxuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gQ2xlYXIgZGF0YSB1bnRpbCBwcm9taXNlIGlzIHJlc29sdmVkIGFuZCBgcmVzb2x2ZWREYXRhYCBpcyBzZXRcbiAgICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGFQYXRoKSB7XG4gICAgICAgIGRhdGEgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5yb290RGF0YSxcbiAgICAgICAgICBub3JtYWxpemVEYXRhUGF0aChgJHt0aGlzLmRhdGFQYXRofS8ke2RhdGFQYXRofWApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVEYXRhKGxvYWQsIGxvYWRpbmdPcHRpb25zID0ge30pIHtcbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGxldCBkYXRhID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IChpc0Z1bmN0aW9uKGxvYWQpID8gbG9hZCgpIDogbG9hZClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBlcnJvcilcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuL0RhdGFNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBzZXRUZW1wb3JhcnlJZCwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzQXJyYXksIGlzU3RyaW5nLCBpc0Z1bmN0aW9uLFxuICBub3JtYWxpemVEYXRhUGF0aCwgbGFiZWxpemUsIGRlYm91bmNlQXN5bmNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNPcHRpb25zOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gdmFsdWUgPT4gdGhpcy5yZWxhdGVcbiAgICAgICAgICA/IHRoaXMuaGFzT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgPyB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQXJyYXkodGhpcy52YWx1ZSlcbiAgICAgICAgICA/IHRoaXMudmFsdWUubWFwKGNvbnZlcnRWYWx1ZSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHRoaXMudmFsdWUpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBXaGVuIHJlbGF0aW5nIGFuZCBhcyBzb29uIGFzIHRoZSBvcHRpb25zIGFyZSBhdmFpbGFibGUuLi5cbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJiB0aGlzLmhhc09wdGlvbnMgJiYgKFxuICAgICAgICAgICAgLy8gLi4uaWYgdGhlIHZhbHVlIGlzIGZvcmNlZCB0byBudWxsIGJlY2F1c2UgYSBkaXNhcHBlYXJlZCBvcHRpb24uLi5cbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsICYmIHRoaXMudmFsdWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIC8vIC4uLm9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlZmVyZW5jZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBvcHRpb25cbiAgICAgICAgICAgIC8vIHZhbHVlLCBzbyB0aGF0IGl0J2xsIGhvbGQgYWN0dWFsIGRhdGEsIG5vdCBqdXN0IGEgcmVmZXJlbmNlIGlkLlxuICAgICAgICAgICAgaXNSZWZlcmVuY2UodGhpcy52YWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29udmVydCA9IHZhbHVlID0+IHRoaXMucmVsYXRlXG4gICAgICAgICAgPyB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5tYXAoY29udmVydClcbiAgICAgICAgICA6IGNvbnZlcnQodmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdGVkT3B0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgIH0sXG5cbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYSh0aGlzLnNjaGVtYS5vcHRpb25zLCAnb3B0aW9ucycsIHtcbiAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDFcbiAgICAgIH0pID8/IFtdXG4gICAgICBpZiAoIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9wdGlvbnMgZGF0YSwgc2hvdWxkIGJlIGFycmF5OiAke2RhdGF9YClcbiAgICAgIH1cbiAgICAgIHRoaXMuaGFzT3B0aW9ucyA9IGRhdGEubGVuZ3RoID4gMFxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wdGlvbnMoZGF0YSlcbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIC8vIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBgVHlwZU11bHRpc2VsZWN0YCB0byByZXR1cm4gdGhlIGBzZWFyY2hlZE9wdGlvbnNgXG4gICAgICAvLyB3aGVuIGEgc2VhcmNoIGZpbHRlciB3YXMgYXBwbGllZC5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgcmVsYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVsYXRlJywge1xuICAgICAgLy8gVE9ETzogQ29udmVydCB0byBgcmVsYXRlQnk6ICdpZCdgXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBXZSBjYW5ub3QgdXNlIHNjaGVtYSBhY2Nlc3NvciBjYWxsYmFjayBtYWdpYyBmb3IgYHJlbGF0ZWAgYXMgd2UgbmVlZFxuICAgICAgLy8gdGhpcyBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQncyBsaWZlLXNwYW4sIHNlZSBgcHJvY2Vzc0RhdGEoKWAgYmVsb3cuXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGdyb3VwQnk6IGdldFNjaGVtYUFjY2Vzc29yKCdncm91cEJ5Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgb3B0aW9uTGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLmxhYmVsJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ2xhYmVsJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBsYWJlbCB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCdsYWJlbCcpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBvcHRpb25WYWx1ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMudmFsdWUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHZhbHVlKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAndmFsdWUnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHZhbHVlIHx8XG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgJ2lkJyB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCd2YWx1ZScpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBDb25zaWRlciBtb3Zpbmcgc2VhcmNoIHRvIGBvcHRpb25zLnNlYXJjaGA/XG4gICAgc2VhcmNoRmlsdGVyOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoJywge1xuICAgICAgdHlwZTogW09iamVjdCwgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChzZWFyY2gpIHtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsdGVyLCBkZWJvdW5jZSB9ID0gaXNGdW5jdGlvbihzZWFyY2gpXG4gICAgICAgICAgICA/IHsgZmlsdGVyOiBzZWFyY2ggfVxuICAgICAgICAgICAgOiBzZWFyY2hcbiAgICAgICAgICByZXR1cm4gZGVib3VuY2UgPyBkZWJvdW5jZUFzeW5jKGZpbHRlciwgZGVib3VuY2UpIDogZmlsdGVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRlbXBvcmFyeUlkKG9wdGlvbiwgJ2lkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB7fVxuICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgICAgIChyZXN1bHRzLCBvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25bdGhpcy5ncm91cEJ5XVxuICAgICAgICAgICAgICBsZXQgZW50cnkgPSBncm91cGVkW2dyb3VwXVxuICAgICAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSBncm91cGVkW2dyb3VwXSA9IHtcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlMYWJlbF06IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeU9wdGlvbnNdOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZW50cnkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW50cnkub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgaGFzT3B0aW9uKG9wdGlvbikge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgfSxcblxuICAgIGdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB7XG4gICAgICBjb25zdCBmaW5kT3B0aW9uID0gKG9wdGlvbnMsIHZhbHVlLCBncm91cEJ5KSA9PiB7XG4gICAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIG9wdGlvbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHJldHVybiB0aGVcbiAgICAgICAgLy8gd2hvbGUgb2JqZWN0LlxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmluZE9wdGlvbihvcHRpb24ub3B0aW9ucywgdmFsdWUsIG51bGwpXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlXG4gICAgICAgID8gZmluZE9wdGlvbih0aGlzLmFjdGl2ZU9wdGlvbnMsIHZhbHVlLCB0aGlzLmdyb3VwQnkpXG4gICAgICAgIDogdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uVmFsdWUpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uVmFsdWVdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25WYWx1ZSlcbiAgICAgICAgICA/IG9wdGlvblZhbHVlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogb3B0aW9uXG4gICAgfSxcblxuICAgIGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvbkxhYmVsKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvbkxhYmVsXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uTGFiZWwpXG4gICAgICAgICAgPyBvcHRpb25MYWJlbC5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IGxhYmVsaXplKGAke29wdGlvbn1gKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgaWYgKHNjaGVtYS5yZWxhdGUpIHtcbiAgICAgIC8vIEZvciBpbnRlcm5hbGx5IHJlbGF0aW5nIGRhdGEgKGBzY2hlbWEub3B0aW9ucy5kYXRhUGF0aGApLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBwcm9jZXNzIGJvdGggdGhlIG9wdGlvbnMgKGZvciAnI3JlZicpIGFuZCB0aGUgdmFsdWUgKCcjaWQnKS5cbiAgICAgIC8vIFNlZSBgRGF0YU1peGluLmhhbmRsZURhdGFTY2hlbWEoKWA6XG4gICAgICBjb25zdCBwYXRoID0gc2NoZW1hLm9wdGlvbnM/LmRhdGFQYXRoXG4gICAgICBjb25zdCByZWxhdGVkRGF0YVBhdGggPSBwYXRoXG4gICAgICAgID8gbm9ybWFsaXplRGF0YVBhdGgoYCR7ZGF0YVBhdGh9LyR7cGF0aH1gKVxuICAgICAgICA6IG51bGxcbiAgICAgIGdyYXBoLmFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSlcbiAgICAgIGlmIChyZWxhdGVkRGF0YVBhdGgpIHtcbiAgICAgICAgZ3JhcGguc2V0U291cmNlUmVsYXRlZChyZWxhdGVkRGF0YVBhdGgpXG4gICAgICB9XG4gICAgICAvLyBDb252ZXJ0IHJlbGF0aW5nIG9iamVjdHMgdG8gYSBzaGFsbG93IGNvcHkgd2l0aCBvbmx5IHRoZSBpZCBsZWZ0LlxuICAgICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBgcmVsYXRlQnlgOlxuICAgICAgY29uc3QgcHJvY2Vzc1JlbGF0ZSA9IHZhbHVlID0+IHZhbHVlID8geyBpZDogdmFsdWUuaWQgfSA6IHZhbHVlXG4gICAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBib3RoIG9iamVjdHMgJiBhcnJheXMsIGUuZy4gJ2NoZWNrYm94ZXMnOlxuICAgICAgdmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzUmVsYXRlKVxuICAgICAgICA6IHByb2Nlc3NSZWxhdGUodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJcbnVsLmRpdG8tY2hlY2tib3hlcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICB1bC5kaXRvLWNoZWNrYm94ZXMoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbiAgKVxuICAgIGxpKHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIilcbiAgICAgIGxhYmVsXG4gICAgICAgIGlucHV0LmRpdG8tY2hlY2tib3goXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgICAgKVxuICAgICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1jaGVja2JveGVzXG4gICAgbGFiZWxcbiAgICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3NcbiAgICAuZGl0by1jaGVja2JveFxuICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94ZXMnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIGRlZmF1bHRWYWx1ZTogW10sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gKG9wdGlvbiB8fCBbXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLmRpdG8tY29kZShcbiAgcmVmPVwiY29kZVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnN0eWxlPVwic3R5bGVcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tY29kZShcbiAgICByZWY9XCJjb2RlXCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnN0eWxlPVwic3R5bGVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tY29kZVxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLy8gRm9yIHByb3BwZXIgc2l6aW5nIG9mIGNvbnRlbnQgYWxvbmcgd2l0aCA6c3R5bGU9XCJzdHlsZVwiIHNldHRpbmcgYWJvdmUsXG4gICAgLy8gZm9yIHByb3BlciBsaW5lLWhlaWdodCBjYWxjdWxhdGlvbi5cbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICB3aWR0aDogYXV0b1xuICAgIC5jb2RlZmxhc2tcbiAgICAgIGJhY2tncm91bmQ6IG5vbmVcbiAgICAgIC8vIElnbm9yZSB0aGVwYXJlbnQgcGFkZGluZyBkZWZpbmVkIGFib3ZlIHdoaWNoIGlzIG9ubHkgbmVlZGVkIHRvIHNldFxuICAgICAgLy8gdGhlIGRlc2lyZWQgaGVpZ2h0IHdpdGggOnN0eWxlPVwic3R5bGVcIi5cbiAgICAgIHRvcDogMFxuICAgICAgbGVmdDogMFxuICAgIC5jb2RlZmxhc2tfX3RleHRhcmVhLFxuICAgIC5jb2RlZmxhc2tfX3ByZVxuICAgICAgLy8gVXNlIHNhbWUgcGFkZGluZyBhcyAuZGl0by1jb2RlXG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgIC5jb2RlZmxhc2tfX3RleHRhcmVhLFxuICAgIC5jb2RlZmxhc2tfX2NvZGUsXG4gICAgLmNvZGVmbGFza19fbGluZXNcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpXG4gICAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpXG4gICAgLmNvZGVmbGFza19fbGluZXNcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgQ29kZUZsYXNrIGZyb20gJ2NvZGVmbGFzaydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvZGUnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDNcbiAgICB9LFxuXG4gICAgc3R5bGUoKSB7XG4gICAgICByZXR1cm4gYGhlaWdodDogY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IGZsYXNrID0gbmV3IENvZGVGbGFzayh0aGlzLiRyZWZzLmNvZGUsIHtcbiAgICAgIGxhbmd1YWdlOiB0aGlzLnNjaGVtYS5sYW5ndWFnZSB8fCAnamF2YXNjcmlwdCcsXG4gICAgICB0YWJTaXplOiB0aGlzLnNjaGVtYS5pbmRlbnRTaXplIHx8IDIsXG4gICAgICBsaW5lTnVtYmVyczogZmFsc2VcbiAgICB9KVxuXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIHRoaXMuZG9tT24odGhpcy4kcmVmcy5jb2RlLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyksIHtcbiAgICAgIGZvY3VzOiBvbkZvY3VzLFxuICAgICAgYmx1cjogb25CbHVyXG4gICAgfSlcblxuICAgIGNvbnN0IHNldENvZGUgPSBjb2RlID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSBmbGFzay5jb2RlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IHRydWVcbiAgICAgICAgZmxhc2sudXBkYXRlQ29kZShjb2RlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgICAgb25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZsYXNrLm9uVXBkYXRlKHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVVcGRhdGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Q29kZSh2YWx1ZSB8fCAnJylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgc2V0Q29kZSh0aGlzLnZhbHVlIHx8ICcnKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpPy5mb2N1cygpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbnRyaWdnZXIuZGl0by1jb2xvcihcbiAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgOnNob3cuc3luYz1cInNob3dQb3B1cFwiXG4pXG4gIC5kaXRvLWlucHV0KFxuICAgIHNsb3Q9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICApXG4gICAgaW5wdXQoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHR5cGU9XCJpbnB1dFwiXG4gICAgICBzaXplPVwiOFwiXG4gICAgICB2LW1vZGVsPVwiaGV4VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICApXG4gICAgLmRpdG8tY29sb3ItcHJldmlldy5kaXRvLWluaGVyaXQtZm9jdXMoXG4gICAgICB2LWlmPVwidmFsdWVcIlxuICAgIClcbiAgICAgIGRpdig6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGAjJHtoZXhWYWx1ZSB8fCAnMDAwMDAwMDAnfWAgfVwiKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIHNrZXRjaC1waWNrZXIuZGl0by1jb2xvci1waWNrZXIoXG4gICAgc2xvdD1cInBvcHVwXCJcbiAgICB2LW1vZGVsPVwiY29sb3JWYWx1ZVwiXG4gICAgOmRpc2FibGUtYWxwaGE9XCIhYWxwaGFcIlxuICAgIDpkaXNhYmxlLWZpZWxkcz1cIiFpbnB1dHNcIlxuICAgIDpwcmVzZXQtY29sb3JzPVwicHJlc2V0c1wiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHRyaWdnZXIuZGl0by1jb2xvcihcbiAgICB0cmlnZ2VyPVwiY2xpY2tcIlxuICAgIDpzaG93LnN5bmM9XCJzaG93UG9wdXBcIlxuICApXG4gICAgLmRpdG8taW5wdXQoXG4gICAgICBzbG90PVwidHJpZ2dlclwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgIClcbiAgICAgIGlucHV0KFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgICB0eXBlPVwiaW5wdXRcIlxuICAgICAgICBzaXplPVwiOFwiXG4gICAgICAgIHYtbW9kZWw9XCJoZXhWYWx1ZVwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLWNvbG9yLXByZXZpZXcuZGl0by1pbmhlcml0LWZvY3VzKFxuICAgICAgICB2LWlmPVwidmFsdWVcIlxuICAgICAgKVxuICAgICAgICBkaXYoOnN0eWxlPVwieyBiYWNrZ3JvdW5kOiBgIyR7aGV4VmFsdWUgfHwgJzAwMDAwMDAwJ31gIH1cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgICBza2V0Y2gtcGlja2VyLmRpdG8tY29sb3ItcGlja2VyKFxuICAgICAgc2xvdD1cInBvcHVwXCJcbiAgICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICAgIDpkaXNhYmxlLWFscGhhPVwiIWFscGhhXCJcbiAgICAgIDpkaXNhYmxlLWZpZWxkcz1cIiFpbnB1dHNcIlxuICAgICAgOnByZXNldC1jb2xvcnM9XCJwcmVzZXRzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemVcbiAgJGNvbG9yLXN3YXRjaC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gJGJvcmRlci13aWR0aFxuICAuZGl0by1jb2xvclxuICAgIC5kaXRvLWlucHV0XG4gICAgICBkaXNwbGF5OiBibG9ja1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICBpbnB1dFxuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94XG4gICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXNcbiAgICAgICAgcGFkZGluZy1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgIC5kaXRvLWJ1dHRvbi1jbGVhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoXG4gICAgLmRpdG8tY29sb3ItcGlja2VyXG4gICAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW5cbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZVxuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3dcbiAgICAuZGl0by1jb2xvci1wcmV2aWV3XG4gICAgICBiYWNrZ3JvdW5kOiAkcGF0dGVybi10cmFuc3BhcmVuY3lcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAmLFxuICAgICAgZGl2XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICB3aWR0aDogJGNvbG9yLXN3YXRjaC13aWR0aFxuICAgICAgICB0b3A6IDBcbiAgICAgICAgcmlnaHQ6IDBcbiAgICAgICAgYm90dG9tOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1c1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXNcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlueWNvbG9yIGZyb20gJ3Rpbnljb2xvcjInXG5pbXBvcnQgeyBTa2V0Y2ggYXMgU2tldGNoUGlja2VyIH0gZnJvbSAndnVlLWNvbG9yJ1xuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFRyaWdnZXIgfSBmcm9tICdAZGl0b2pzL3VpJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbG9yJywge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIFNrZXRjaFBpY2tlciB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogZmFsc2UsXG4gICAgICBjb252ZXJ0ZWRIZXhWYWx1ZTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbG9yVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgfHwge31cbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLmNvbG9yRm9ybWF0XG4gICAgICAgIGNvbnN0IGtleSA9IHtcbiAgICAgICAgICAvLyBOT1RFOiB2dWUtY29sb3IgY2FsbHMgaXQgJ2hleCcsIHdoaWxlIHRpbnljb2xvciBjYWxscyBpdCAnaGV4NidcbiAgICAgICAgICBoZXg6IHZhbHVlPy5hIDwgMSA/ICdoZXg4JyA6ICdoZXgnLFxuICAgICAgICAgIHJnYjogJ3JnYmEnXG4gICAgICAgIH1bZm9ybWF0XSB8fCBmb3JtYXRcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVtrZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRpbnljb2xvcih2YWx1ZSkudG9TdHJpbmcoZm9ybWF0KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBoZXhWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IG51bGxcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgY29uc3QgY29sb3IgPSB0aW55Y29sb3IodGhpcy52YWx1ZSlcbiAgICAgICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gY29sb3JcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKGNvbG9yLmdldEFscGhhKCkgPCAxID8gJ2hleDgnIDogJ2hleDYnKVxuICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkSGV4VmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVE9ETzogYGZvcm1hdGAgY2xhc2hlcyB3aXRoIFR5cGVNaXhpbi5mb3JtYXQoKWAsIHdoaWNoIHNoYWxsIGJlIHJlbmFtZWRcbiAgICAvLyBzb29uIHRvIGBmb3JtYXRWYWx1ZSgpYC4gUmVuYW1lIGBjb2xvckZvcm1hdGAgYmFjayB0byBgZm9ybWF0YCBhZnRlci5cbiAgICBjb2xvckZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdoZXgnXG4gICAgfSksXG5cbiAgICBhbHBoYTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FscGhhJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBpbnB1dHM6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dHMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgcHJlc2V0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ3ByZXNldHMnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgJyNmZmZmZmYnLFxuICAgICAgICAnI2MzYzNjMycsXG4gICAgICAgICcjN2Y3ZjdmJyxcbiAgICAgICAgJyMwMDAwMDAnLFxuICAgICAgICAnIzg4MDAxNScsXG4gICAgICAgICcjZWQxYzI0JyxcbiAgICAgICAgJyNmZjdmMjcnLFxuICAgICAgICAnI2ZmZjIwMCcsXG5cbiAgICAgICAgJyMyMmIxNGMnLFxuICAgICAgICAnIzAwYTJlOCcsXG4gICAgICAgICcjM2Y0OGNjJyxcbiAgICAgICAgJyNhMzQ5YTQnLFxuICAgICAgICAnI2I5N2E1NycsXG4gICAgICAgICcjZmZhZWM5JyxcbiAgICAgICAgJyNmZmM5MGUnLFxuICAgICAgICAnIzAwMDAwMDAwJ1xuICAgICAgXVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBmb2N1c2VkKGZvY3VzZWQpIHtcbiAgICAgIGlmICghZm9jdXNlZCAmJiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKGAjJHt0aGlzLmNvbnZlcnRlZEhleFZhbHVlfWApXG4gICAgICAgIGlmIChjb2xvcj8uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbG9yLnRvU3RyaW5nKHRoaXMuY29sb3JGb3JtYXQpXG4gICAgICAgICAgLy8gVE9ETzogRW1pdCAnaW5wdXQnIGhlcmUgaW5zdGVhZCwgYW5kICdjaGFuZ2UnIGluIGJsdXIsIGxpa2Ugb3RoZXJzLlxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG48L3NjcmlwdD5cbiIsIlxuY29tcG9uZW50KFxuICA6aXM9XCJjb21wb25lbnRcIlxuICB2LWJpbmQ9XCIkcHJvcHNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgY29tcG9uZW50KFxuICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgdi1iaW5kPVwiJHByb3BzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbi8vIFRoaXMgaXMgdGhlIGdlbmVyYWwgcHVycG9zZSAnY29tcG9uZW50JyB0eXBlLCB3aGljaCBjYW4gcmVzb2x2ZSB0byBhbnkgY3VzdG9tXG4vLyBjb21wb25lbnQgdGhyb3VnaCBgc2NoZW1hLmNvbXBvbmVudGAsIHNlZSBgcmVzb2x2ZVR5cGVDb21wb25lbnQoKWAuIFRoaXMgY2FuXG4vLyBiZSB1c2VkIHRvIG5lc3QgYXJiaXRyYXJ5IHZ1ZSBjb21wb25lbnRzIGluIHNjaGVtYTpcbi8vIHtcbi8vICAgdHlwZTogJ2NvbXBvbmVudCcsXG4vLyAgIGNvbXBvbmVudDogaW1wb3J0KCcuL2NvbXBvbmVudCcpXG4vLyB9XG5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb21wb25lbnQnLCB7XG4gIC8vIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCBgZGVmYXVsdFZhbHVlOiBudWxsYCB0byBub3Qgc2V0IGFueSBkYXRhIGZvciBjdXN0b21cbiAgLy8gY29tcG9uZW50cywgdW5sZXNzIHRoZXkgcHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4vLyAgaW52b2x2ZSBhY3R1YWxseSByZW5kZXJpbmcgaXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCB2aXNpYmxlLlxuaW5wdXQuZGl0by10ZXh0LmRpdG8taW5wdXQoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpuYW1lPVwibmFtZVwiXG4gIHR5cGU9XCJ0ZXh0XCJcbiAgOnZhbHVlPVwidmFsdWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpyZWFkb25seT1cInRydWVcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8tIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHRyaWdnZXIgZXZhbHVhdGlvbiBvZiBgdmFsdWVgIHRoYXQgZG9zZSBub3RcbiAgLy8gIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbiAgaW5wdXQuZGl0by10ZXh0LmRpdG8taW5wdXQoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpuYW1lPVwibmFtZVwiXG4gICAgdHlwZT1cInRleHRcIlxuICAgIDp2YWx1ZT1cInZhbHVlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgOnJlYWRvbmx5PVwidHJ1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuLi9taXhpbnMvRGF0YU1peGluLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ2NvbXB1dGVkJywgJ2RhdGEnLCAnaGlkZGVuJ1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGRlZmF1bHRWaXNpYmxlOiBmYWxzZSxcblxuICBjb21wdXRlZDoge1xuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSB0aGlzXG4gICAgICAgIGlmIChzY2hlbWEuZGF0YSB8fCBzY2hlbWEuZGF0YVBhdGgpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsICdzY2hlbWEnLCB7XG4gICAgICAgICAgICAvLyBNb2RpZnlpbmcgYHRoaXMuZGF0YWAgYmVsb3cgdHJpZ2dlcnMgYW5vdGhlciBjYWxsIG9mIHRoZSBgdmFsdWVgXG4gICAgICAgICAgICAvLyBnZXR0ZXIsIHNvIHVzZSBhIHZhbHVlIG9mIDIgZm9yIGByZXNvbHZlQ291bnRlcmAgdG8gcmV0dXJuIHRoZVxuICAgICAgICAgICAgLy8gcmVzb2x2ZWQgZGF0YSB0d2ljZS5cbiAgICAgICAgICAgIHJlc29sdmVDb3VudGVyOiAyXG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLiRzZXQodGhpcy5kYXRhLCB0aGlzLm5hbWUsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBUeXBlTWl4aW4uY29tcHV0ZWQudmFsdWUuZ2V0LmNhbGwodGhpcylcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBUeXBlTWl4aW4uY29tcHV0ZWQudmFsdWUuc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLWRhdGVcbiAgY29tcG9uZW50KFxuICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgIDpkYXRlRm9ybWF0PVwieyAuLi5hcGkuZm9ybWF0cy5kYXRlLCAuLi5kYXRlRm9ybWF0IH1cIlxuICAgIHYtbW9kZWw9XCJkYXRlVmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1kYXRlXG4gICAgY29tcG9uZW50KFxuICAgICAgOmlzPVwiZ2V0Q29tcG9uZW50KHR5cGUpXCJcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgOmxvY2FsZT1cImxvY2FsZVwiXG4gICAgICA6ZGF0ZUZvcm1hdD1cInsgLi4uYXBpLmZvcm1hdHMuZGF0ZSwgLi4uZGF0ZUZvcm1hdCB9XCJcbiAgICAgIHYtbW9kZWw9XCJkYXRlVmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9IGZyb20gJ0BkaXRvanMvdWknXG5pbXBvcnQgeyBpc0RhdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ2RhdGUnLCAnZGF0ZXRpbWUnLCAndGltZSdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0sXG4gIC8vIFRPRE86IFRoaXMgaXMgb25seSBoZXJlIHNvIHdlIGdldCBwbGFjZWhvbGRlciBhZGRlZC4gQ29tZSB1cCB3aXRoIGEgYmV0dGVyXG4gIC8vIHdheSB0byBzdXBwb3J0IGF0dHJpYnV0ZXMgcGVyIGNvbXBvbmVudCAoYSBsaXN0IG9mIGFjdHVhbGx5IHN1cHBvcnRlZFxuICAvLyBhdHRyaWJ1dGVzKVxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZGF0ZVZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGF0ZUZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RhdGVGb3JtYXQnLCB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50KHR5cGUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGU6ICdkYXRlLXBpY2tlcicsXG4gICAgICAgIHRpbWU6ICd0aW1lLXBpY2tlcicsXG4gICAgICAgIGRhdGV0aW1lOiAnZGF0ZS10aW1lLXBpY2tlcidcbiAgICAgIH1bdHlwZV1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICByZXR1cm4gaXNEYXRlKHZhbHVlKSA/IHZhbHVlLnRvSVNPU3RyaW5nKCkgOiB2YWx1ZVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4uL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yLCBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1JvdXRlU2NoZW1hLCBwcm9jZXNzRm9ybXMsIGdldE5hbWVkU2NoZW1hcywgZ2V0QnV0dG9uU2NoZW1hcyxcbiAgaGFzRm9ybVNjaGVtYSwgZ2V0Rm9ybVNjaGVtYXMsIGdldFZpZXdTY2hlbWEsXG4gIGhhc0xhYmVscywgaXNDb21wYWN0LCBpc0lubGluZWQsXG4gIGlzT2JqZWN0U291cmNlLCBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsIGlzU3RyaW5nLCBpc0FycmF5LCBpc051bWJlciwgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtSZXNvdXJjZU1peGluLCBTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgZGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAgIHJldHVybiBpc0xpc3RTb3VyY2Uoc2NoZW1hKSA/IFtdIDogbnVsbFxuICB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JhcHBlZFByaW1pdGl2ZXM6IG51bGwsXG4gICAgICB1bndyYXBwaW5nUHJpbWl0aXZlczogZmFsc2UsXG4gICAgICBpZ25vcmVSb3V0ZUNoYW5nZTogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBpc09iamVjdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIGlzTGlzdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc0xpc3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICBpc1JlYWR5KCkge1xuICAgICAgLy8gTGlzdHMgdGhhdCBoYXZlIG5vIGRhdGEgYW5kIG5vIGFzc29jaWF0ZWQgcmVzb3VyY2Ugc2hvdWxkIHN0aWxsIHJlbmRlcixcbiAgICAgIC8vIGFzIHRoZXkgbWF5IGJlIGdldHRpbmcgdGhlaXIgZGF0YSBlbHNld2hlcmUsIGUuZy4gYGNvbXB1dGUoKWAuXG4gICAgICByZXR1cm4gdGhpcy5oYXNEYXRhIHx8ICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0luVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld0NvbXBvbmVudFxuICAgIH0sXG5cbiAgICB3cmFwUHJpbWl0aXZlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS53cmFwUHJpbWl0aXZlc1xuICAgIH0sXG5cbiAgICBsaXN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMudmFsdWVcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IHRvIGxpc3QgYXJyYXkuXG4gICAgICAgICAgZGF0YSA9IGRhdGEgIT0gbnVsbCA/IFtkYXRhXSA6IFtdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBnZXRzIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgdW53cmFwcGluZyBpcyBub3QgaGFwcGVuaW5nXG4gICAgICAgICAgLy8gYXQgdGhlIHJvb3QgaW4gYHNldERhdGEoKWAsIGJ1dCBoZXJlIGluc3RlYWQuXG4gICAgICAgICAgZGF0YSA9IHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkgfHwgZGF0YVxuICAgICAgICB9XG4gICAgICAgIGRhdGEgPSBkYXRhIHx8IFtdXG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgaWYgKHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgdW53cmFwcGluZyBvbmNlIGBsaXN0RGF0YWAgaXMgcmVldmFsdWF0ZWQsIHNvIHNldFxuICAgICAgICAgICAgLy8gdGhpcyB0byBgZmFsc2VgIGFnYWluLiBTZWUgYHdyYXBwZWRQcmltaXRpdmVzYCB3YXRjaGVyIGFib3ZlLlxuICAgICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENvbnZlcnQgZGF0YSB0byBhIGxpc3Qgb2Ygd3JhcHBlZCBwcmltaXRpdmVzLCBhbmQgcmV0dXJuIGl0LlxuICAgICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGEubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IHZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZFByaW1pdGl2ZXNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/IChkYXRhICYmIGRhdGEubGVuZ3RoID4gMCA/IGRhdGFbMF0gOiBudWxsKVxuICAgICAgICAgICAgOiBkYXRhXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb2JqZWN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBBbHdheXMgZ28gdGhyb3VnaCBgbGlzdERhdGFgIGludGVybmFsbHksIHdoaWNoIGRvZXMgYWxsIHRoZVxuICAgICAgICAvLyBwcm9jZXNzaW5nIG9mIGB3cmFwUHJpbWl0aXZlc2AsIGV0Yy5cbiAgICAgICAgcmV0dXJuIHRoaXMubGlzdERhdGFbMF0gfHwgbnVsbFxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YSA9IGRhdGEgPyBbZGF0YV0gOiBbXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzb3VyY2VTY2hlbWEoKSB7XG4gICAgICAvLyBUaGUgc291cmNlU2NoZW1hIG9mIGEgbGlzdCBpcyB0aGUgbGlzdCdzIHNjaGVtYSBpdHNlbGYuXG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIFRoaXMgaXMgdXNlZCBpbiBUeXBlTGlzdCBmb3IgRGl0b0Zvcm1DaG9vc2VyLlxuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKHRoaXMuc2NoZW1hLnBhdGgpXG4gICAgfSxcblxuICAgIGRlZmF1bHRRdWVyeSgpIHtcbiAgICAgIGNvbnN0IHsgZGVmYXVsdE9yZGVyOiBvcmRlciB9ID0gdGhpc1xuICAgICAgcmV0dXJuIG9yZGVyID8geyBvcmRlciB9IDoge31cbiAgICB9LFxuXG4gICAgcXVlcnk6IGdldFN0b3JlQWNjZXNzb3IoJ3F1ZXJ5Jywge1xuICAgICAgZ2V0KHF1ZXJ5KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGhpcy5kZWZhdWx0UXVlcnksXG4gICAgICAgICAgLi4ucXVlcnlcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgc2V0KHF1ZXJ5KSB7XG4gICAgICAgIC8vIEFsd2F5cyBrZWVwIHRoZSBkaXNwbGF5ZWQgcXVlcnkgcGFyYW1ldGVycyBpbiBzeW5jIHdpdGggdGhlIHN0b3JlZFxuICAgICAgICAvLyBvbmVzLiBVc2Ugc2NvcGUgYW5kIHBhZ2UgZnJvbSB0aGUgbGlzdCBzY2hlbWEgYXMgZGVmYXVsdHMsIGJ1dCBhbGxvd1xuICAgICAgICAvLyB0aGUgcm91dGUgcXVlcnkgcGFyYW1ldGVycyB0byBvdmVycmlkZSB0aGVtLlxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgc2NvcGUgPSB0aGlzLmRlZmF1bHRTY29wZT8ubmFtZSxcbiAgICAgICAgICBwYWdlID0gdGhpcy5zY2hlbWEucGFnZVxuICAgICAgICB9ID0gdGhpcy5xdWVyeVxuICAgICAgICAvLyBQcmVzZXJ2ZSAvIG1lcmdlIGN1cnJlbnRseSBzdG9yZWQgdmFsdWVzLlxuICAgICAgICBxdWVyeSA9IHtcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgIC4uLihzY29wZSAhPSBudWxsICYmIHsgc2NvcGUgfSksXG4gICAgICAgICAgLi4uKHBhZ2UgIT0gbnVsbCAmJiB7IHBhZ2UgfSksXG4gICAgICAgICAgLi4ucXVlcnlcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWVxdWFscyhxdWVyeSwgdGhpcy4kcm91dGUucXVlcnkpKSB7XG4gICAgICAgICAgLy8gVGVsbCB0aGUgYCRyb3V0ZWAgd2F0Y2hlciB0byBpZ25vcmUgdGhlIGNoYW5nZWQgdHJpZ2dlcmVkIGhlcmU6XG4gICAgICAgICAgdGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSA9IHRydWVcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IHF1ZXJ5LCBoYXNoOiB0aGlzLiRyb3V0ZS5oYXNoIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5IC8vIExldCBnZXRTdG9yZUFjY2Vzc29yKCkgZG8gdGhlIGFjdHVhbCBzZXR0aW5nXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB0b3RhbDogZ2V0U3RvcmVBY2Nlc3NvcigndG90YWwnKSxcblxuICAgIGNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLmNvbHVtbnMpXG4gICAgfSxcblxuICAgIHNjb3BlcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuc2NvcGVzKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0U2NvcGUoKSB7XG4gICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgbGV0IGZpcnN0ID0gbnVsbFxuICAgICAgICBmb3IgKGNvbnN0IHNjb3BlIG9mIE9iamVjdC52YWx1ZXModGhpcy5zY29wZXMpKSB7XG4gICAgICAgICAgaWYgKHNjb3BlLmRlZmF1bHRTY29wZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlZmF1bHRPcmRlcigpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0U29ydCB9ID0gY29sdW1uXG4gICAgICAgICAgaWYgKGRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBpc1N0cmluZyhkZWZhdWx0U29ydCkgPyBkZWZhdWx0U29ydCA6ICdhc2MnXG4gICAgICAgICAgICByZXR1cm4gYCR7Y29sdW1uLm5hbWV9ICR7ZGlyZWN0aW9ufWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpKVxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBsaW5rZWQgdmlldyBzY2hlbWEgaWYgdGhpcyBzb3VyY2UgZWRpdHMgaXQgaXRzIGl0ZW1zIHRocm91Z2hcbiAgICAvLyBhIGxpbmtlZCB2aWV3LlxuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gZ2V0Vmlld1NjaGVtYSh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld1xuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgaGFzTGFiZWxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuc29tZShoYXNMYWJlbHMpXG4gICAgfSxcblxuICAgIGlzQ29tcGFjdCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1zLmV2ZXJ5KGlzQ29tcGFjdClcbiAgICB9LFxuXG4gICAgaXNJbmxpbmVkKCkge1xuICAgICAgcmV0dXJuIGlzSW5saW5lZCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgcGFnaW5hdGU6IGdldFNjaGVtYUFjY2Vzc29yKCdwYWdpbmF0ZScsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgcmVuZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVuZGVyJywge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgICAgICA/IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgID8gIXRoaXMudmFsdWVcbiAgICAgICAgICAgIDogdHJ1ZVxuICAgICAgICAgIDogZmFsc2VcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmICF0aGlzLmlzSW5saW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZSAmJiB0aGlzLmxpc3REYXRhLmxlbmd0aCA+IDEgJiYgZHJhZ2dhYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGwsIC8vIHNvIHRoYXQgYD8/YCBiZWxvdyBjYW4gZG8gaXRzIHRoaW5nOlxuICAgICAgZ2V0KGNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW5saW5lZCAmJiAhIShjb2xsYXBzaWJsZSA/PyB0aGlzLmNvbGxhcHNlZCAhPT0gbnVsbClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NvbGxhcHNlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRoaXMuaWdub3JlUm91dGVDaGFuZ2UpIHtcbiAgICAgICAgdGhpcy5pZ25vcmVSb3V0ZUNoYW5nZSA9IGZhbHNlXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKGZyb20ucGF0aCA9PT0gdG8ucGF0aCAmJiBmcm9tLmhhc2ggPT09IHRvLmhhc2gpIHtcbiAgICAgICAgLy8gUGF0aHMgYW5kIGhhc2hlcyByZW1haW4gdGhlIHNhbWUsIHNvIG9ubHkgcXVlcmllcyBoYXZlIGNoYW5nZWQuXG4gICAgICAgIC8vIFVwZGF0ZSBmaWx0ZXIgYW5kIHJlbG9hZCBkYXRhIHdpdGhvdXQgY2xlYXJpbmcuXG4gICAgICAgIHRoaXMucXVlcnkgPSB0by5xdWVyeVxuICAgICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB3cmFwcGVkUHJpbWl0aXZlczoge1xuICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgIGhhbmRsZXIobmV3VmFsdWUsIG9sZFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgLy8gU2tpcCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIHdyYXBwZWRQcmltaXRpdmVzIGFycmF5XG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBvbGRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIHRoZSB3cmFwcGVkUHJpbWl0aXZlcyBjaGFuZ2UsIG1hcCB0aGVpciB2YWx1ZXMgYmFjayB0b1xuICAgICAgICAgIC8vIHRoZSBhcnJheSBvZiBwcmltaXRpdmVzLCBpbiBhIHByaW1pdGl2ZSB3YXkgOilcbiAgICAgICAgICAvLyBCdXQgc2V0IGB1bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVgLCBzbyB0aGUgYGxpc3REYXRhYCBjb21wdXRlZFxuICAgICAgICAgIC8vIHByb3BlcnR5IGtub3dzIGFib3V0IGl0LCB3aGljaCBzZXRzIGl0IHRvIGBmYWxzZWAgYWdhaW4uXG4gICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWUubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy50b3RhbCA9IDBcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gV2hlbiBuZXcgZGF0YSBpcyBsb2FkZWQsIHdlIGNhbiBzdG9yZSBpdCByaWdodCBiYWNrIGluIHRoZSBkYXRhIG9mIHRoZVxuICAgICAgLy8gdmlldyBvciBmb3JtIHRoYXQgY3JlYXRlZCB0aGlzIGxpc3QgY29tcG9uZW50LlxuICAgICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBmb3IgbGlzdCBkYXRhOlxuICAgICAgLy8gLSBBcnJheTogYFsuLi5dYFxuICAgICAgLy8gLSBPYmplY3Q6IGB7IHJlc3VsdHM6IFsuLi5dLCB0b3RhbCB9YCwgc2VlIGB1bndyYXBMaXN0RGF0YSgpYFxuICAgICAgaWYgKFxuICAgICAgICAhZGF0YSB8fFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJiBpc0FycmF5KGRhdGEpIHx8XG4gICAgICAgIHRoaXMuaXNPYmplY3RTb3VyY2UgJiYgaXNPYmplY3QoZGF0YSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSBmb3JtYXQgZGlkbid0IG1hdGNoLCBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyBvYmplY3QsIGluIHdoaWNoIGNhc2UgYHRoaXMudmFsdWVgIHdhcyBhbHJlYWR5IHNldCBieVxuICAgICAgICAvLyBgdW53cmFwTGlzdERhdGEoKWAgYW5kIHdlJ3JlIGRvbmUgbm93LlxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSAmJiB0aGlzLmlzSW5WaWV3KSB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sbGVyIGlzIHNlbmRpbmcgZGF0YSBmb3IgYSBmdWxsIG11bHRpLWNvbXBvbmVudCB2aWV3LFxuICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIG5lc3RlZCBsaXN0IGRhdGEuXG4gICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVud3JhcExpc3REYXRhKGRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiZcbiAgICAgICAgaXNPYmplY3QoZGF0YSkgJiZcbiAgICAgICAgaXNOdW1iZXIoZGF0YS50b3RhbCkgJiZcbiAgICAgICAgaXNBcnJheShkYXRhLnJlc3VsdHMpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgQGRpdG9qcy9zZXJ2ZXIgc2VuZHMgZGF0YSBpbiB0aGUgZm9ybSBvZiBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIHJlc3VsdCwgYnV0IHJlbWVtYmVyIHRoZSB0b3RhbCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnRvdGFsXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhLnJlc3VsdHNcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9wZW5TY2hlbWFDb21wb25lbnQoLTEpKVxuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICByZXR1cm4gaXRlbVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtKGl0ZW0pIHtcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdERhdGEgJiYgbGlzdERhdGEuaW5kZXhPZihpdGVtKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGxpc3REYXRhLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxldGVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBjb25zdCBsYWJlbCA9IGl0ZW0gJiYgdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIGl0ZW0sIHtcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGV4dGVuZGVkOiB0cnVlXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBub3RpZnkgPSAoKSA9PiB0aGlzLm5vdGlmeSh7XG4gICAgICAgIHR5cGU6IHRoaXMuaXNUcmFuc2llbnQgPyAnaW5mbycgOiAnc3VjY2VzcycsXG4gICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgYCR7bGFiZWx9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYCxcbiAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgXVxuICAgICAgfSlcblxuICAgICAgaWYgKGl0ZW0gJiYgd2luZG93LmNvbmZpcm0oXG4gICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLmRlbGV0ZX0gJHtsYWJlbH0/YClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtKVxuICAgICAgICAgIG5vdGlmeSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaXRlbUlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0pXG4gICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRNZW1iZXJSZXNvdXJjZShpdGVtSWQsIHRoaXMucmVzb3VyY2UpXG4gICAgICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdkZWxldGUnLCByZXNvdXJjZSB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtKVxuICAgICAgICAgICAgICAgIG5vdGlmeSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3QgeyBzY2hlbWFDb21wb25lbnRzIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gc2NoZW1hQ29tcG9uZW50c1xuICAgICAgcmV0dXJuIHNjaGVtYUNvbXBvbmVudHNbKChpbmRleCAlIGxlbmd0aCkgKyBsZW5ndGgpICUgbGVuZ3RoXVxuICAgIH0sXG5cbiAgICBvcGVuU2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudChpbmRleClcbiAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgbmF2aWdhdGVUb0NvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBkYXRhUGF0aC5zdGFydHNXaXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICAgICAgPyB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgICAgPyBwYXJzZURhdGFQYXRoKGRhdGFQYXRoLnNsaWNlKHRoaXMuZGF0YVBhdGgubGVuZ3RoICsgMSkpWzBdID8/IG51bGxcbiAgICAgICAgICAgIDogMFxuICAgICAgICAgIDogbnVsbFxuICAgICAgICBpZiAoaW5kZXggIT09IG51bGwgJiYgaXNOdW1iZXIoK2luZGV4KSkge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KCtpbmRleClcbiAgICAgICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IG9wZW5lZCB9ID0gc2NoZW1hQ29tcG9uZW50XG4gICAgICAgICAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudHMubGVuZ3RoID4gMCAmJiAob25Db21wbGV0ZT8uKGNvbXBvbmVudHMpID8/IHRydWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gb3BlbmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpXG4gICAgfSxcblxuICAgIG5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgY2FsbE9uQ29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgICAgLy8gUmV0cmlldmUgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50LCB3aGljaCB3aWxsIGJlIHRoZSBjb21wb25lbnQgdGhhdFxuICAgICAgICAgIC8vIHdlIGp1c3QgbmF2aWdhdGVkIHRvLCBhbmQgcGFzcyBpdCBvbiB0byBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgIGNvbnN0IHsgcm91dGVDb21wb25lbnRzIH0gPSB0aGlzLmFwcFN0YXRlXG4gICAgICAgICAgY29uc3Qgcm91dGVDb21wb25lbnQgPSByb3V0ZUNvbXBvbmVudHNbcm91dGVDb21wb25lbnRzLmxlbmd0aCAtIDFdXG4gICAgICAgICAgcmVzb2x2ZShvbkNvbXBsZXRlPy4oW3JvdXRlQ29tcG9uZW50XSkgPz8gdHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSByb3V0ZSB0aGF0IGNhbiBzZXJ2ZSBwYXJ0IG9mIHRoZSBnaXZlbiBkYXRhUGF0aCxcbiAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aChcbiAgICAgICAgICAgIHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgobm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGhQYXJ0cykpXG4gICAgICAgICAgKVxuICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBhY3R1YWxseSBpcyBhIHJvdXRlIGZvciB0aGlzIHN1Yi1jb21wb25lbnQ6XG4gICAgICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZXIubWF0Y2gocGF0aClcbiAgICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiRyb3V0ZS5wYXRoID09PSBwYXRoKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IHRoZXJlLCBzbyBqdXN0IGNhbGwgYG9uQ29tcGxldGUoKWA6XG4gICAgICAgICAgICAgIGNhbGxPbkNvbXBsZXRlKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgY29tcG9uZW50J3MgcGF0aCwgdGhlbiBjYWxsIGBvbkNvbXBsZXRlKClgXzpcbiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgICAgICAgeyBwYXRoIH0sXG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50IHRvIGJlIG1vdW50ZWQgaW4gdGhlIG5leHRcbiAgICAgICAgICAgICAgICAvLyB0aWNrIGJlZm9yZSBjYWxsaW5nIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soY2FsbE9uQ29tcGxldGUpXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBLZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIC8vIGVuZCBvZiBgbWV0aG9kc2BcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLCBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICAgIGNvbnN0IGlubGluZWQgPSBpc0lubGluZWQoc2NoZW1hKVxuICAgIGlmIChpbmxpbmVkICYmIHNjaGVtYS5yZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTGlzdHMgd2l0aCBuZXN0ZWQgZm9ybXMgY2Fubm90IGxvYWQgZGF0YSBmcm9tIHRoZWlyIG93biByZXNvdXJjZXMnXG4gICAgICApXG4gICAgfVxuICAgIC8vIFVzZSBkaWZmZXJlbnRseSBuYW1lZCB1cmwgcGFyYW1ldGVycyBvbiBlYWNoIG5lc3RlZCBsZXZlbCBmb3IgaWQgYXNcbiAgICAvLyBvdGhlcndpc2UgdGhleSB3b3VsZCBjbGFzaCBhbmQgb3ZlcnJpZGUgZWFjaCBvdGhlciBpbnNpZGUgJHJvdXRlLnBhcmFtc1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICBjb25zdCBwYXJhbSA9IGBpZCR7bGV2ZWwgKyAxfWBcbiAgICBjb25zdCBtZXRhID0ge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICAgIGNvbnN0IGZvcm1NZXRhID0ge1xuICAgICAgLi4ubWV0YSxcbiAgICAgIC8vIFdoZW4gY2hpbGRyZW4gYXJlIGZsYXR0ZW5lZCAoZS5nLiB0cmVlLWxpc3RzKSwgaW5jbHVkZSB0aGUgYGZsYXR0ZW5gXG4gICAgICAvLyBzZXR0aW5nIGFsc28sIGZvciBmbGF0dGVuaW5nIGJlbG93LlxuICAgICAgZmxhdHRlbixcbiAgICAgIG5lc3RlZCxcbiAgICAgIHBhcmFtXG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVzID0gYXdhaXQgcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbClcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgYXdhaXQgcHJvY2VzcyhjaGlsZFJvdXRlcywgbGV2ZWwgKyAxKVxuICAgIH1cbiAgICAvLyBJbmxpbmVkIGZvcm1zIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgYWRkIHJvdXRlcy5cbiAgICBpZiAoaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmICFpbmxpbmVkKSB7XG4gICAgICBjb25zdCBnZXRQYXRoV2l0aFBhcmFtID0gKHBhdGgsIHBhcmFtKSA9PiBwYXJhbVxuICAgICAgICA/IHBhdGhcbiAgICAgICAgICA/IGAke3BhdGh9Lzoke3BhcmFtfWBcbiAgICAgICAgICA6IGA6JHtwYXJhbX1gXG4gICAgICAgIDogcGF0aFxuXG4gICAgICAvLyBMaXN0cyBpbiBzaW5nbGUtY29tcG9uZW50LXZpZXdzIChsZXZlbCA9PT0gMCkgdXNlIHRoZWlyIHZpZXcncyBwYXRoLFxuICAgICAgLy8gd2hpbGUgYWxsIG90aGVycyBuZWVkIHRoZWlyIHBhdGggcHJlZml4ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGF0aDpcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBsZXZlbCA9PT0gMCA/ICcnIDogc2NoZW1hLnBhdGhcbiAgICAgIGNvbnN0IGZvcm1Sb3V0ZSA9IHtcbiAgICAgICAgLy8gT2JqZWN0IHNvdXJjZXMgZG9uJ3QgbmVlZCBpZCBwYXJhbXMgaW4gdGhlaXIgZm9ybSBwYXRocywgYXMgdGhleVxuICAgICAgICAvLyBkaXJlY3RseSBlZGl0IG9uZSBvYmplY3QuXG4gICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgaXNMaXN0U291cmNlKHNjaGVtYSkgJiYgcGFyYW0pLFxuICAgICAgICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50KFxuICAgICAgICAgIG5lc3RlZCA/ICdkaXRvLWZvcm0tbmVzdGVkJyA6ICdkaXRvLWZvcm0nXG4gICAgICAgICksXG4gICAgICAgIG1ldGE6IGZvcm1NZXRhXG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3RTb3VyY2Uoc2NoZW1hKSkge1xuICAgICAgICAvLyBBbHNvIGFkZCBhIHBhcmFtIHJvdXRlLCBzaW1wbHkgdG8gaGFuZGxlICcvY3JlYXRlJyBsaW5rcyB0aGUgc2FtZVxuICAgICAgICAvLyB3YXkgdGhhdCBsaXN0cyBkbywgd2hlcmUgaXQgb3ZlcmxhcHMgd2l0aCA6aWQgZm9yIGl0ZW0gaWRzLlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgLi4uZm9ybVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgcGFyYW0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aCkge1xuICAgICAgICAvLyBKdXN0IHJlZGlyZWN0IGJhY2sgdG8gdGhlIHBhcmVudCB3aGVuIGEgbmVzdGVkIHNvdXJjZSByb3V0ZSBpcyBoaXQuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgICAgIHJlZGlyZWN0OiAnLicsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gUGFydGl0aW9uIGNoaWxkUm91dGVzIGludG8gdGhvc2UgdGhhdCBuZWVkIGZsYXR0ZW5pbmcgKGUuZy4gdHJlZS1saXN0cylcbiAgICAgIC8vIGFuZCB0aG9zZSB0aGF0IGRvbid0LCBhbmQgcHJvY2VzcyBlYWNoIGdyb3VwIHNlcGFyYXRlbHkgYWZ0ZXIuXG4gICAgICBjb25zdCBbZmxhdFJvdXRlcywgc3ViUm91dGVzXSA9IGNoaWxkUm91dGVzLnJlZHVjZShcbiAgICAgICAgKHJlcywgcm91dGUpID0+IHtcbiAgICAgICAgICByZXNbcm91dGUubWV0YS5mbGF0dGVuID8gMCA6IDFdLnB1c2gocm91dGUpXG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9LFxuICAgICAgICBbW10sIFtdXVxuICAgICAgKVxuICAgICAgaWYgKHN1YlJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9ybVJvdXRlLmNoaWxkcmVuID0gc3ViUm91dGVzXG4gICAgICB9XG4gICAgICByb3V0ZXMucHVzaChmb3JtUm91dGUpXG4gICAgICAvLyBBZGQgdGhlIHByZWZpeGVkIGZvcm1Sb3V0ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBmb3IgbmVzdGVkIGxpc3RzLlxuICAgICAgaWYgKGZsYXRSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRSb3V0ZSBvZiBmbGF0Um91dGVzKSB7XG4gICAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgICAgLi4uKGNoaWxkUm91dGUucmVkaXJlY3QgPyBjaGlsZFJvdXRlIDogZm9ybVJvdXRlKSxcbiAgICAgICAgICAgIHBhdGg6IGAke2Zvcm1Sb3V0ZS5wYXRofS8ke2NoaWxkUm91dGUucGF0aH1gLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAuLi5jaGlsZFJvdXRlLm1ldGEsXG4gICAgICAgICAgICAgIGZsYXR0ZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBncmFwaC5hZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQ29tcG9uZW50cyA9IHtcbiAgdGV4dChmaWx0ZXIpIHtcbiAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ2NvbnRhaW5zJyxcbiAgICAgICAgdmFsdWU6ICdjb250YWlucydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZXF1YWxzJyxcbiAgICAgICAgdmFsdWU6ICdlcXVhbHMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ3N0YXJ0cyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdzdGFydHMtd2l0aCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZW5kcyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdlbmRzLXdpdGgnXG4gICAgICB9XG4gICAgXVxuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yc1xuICAgICAgICA/IHtcbiAgICAgICAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICAgICAgICBvcHRpb25zOlxuICAgICAgICAgICAgaXNBcnJheShmaWx0ZXIub3BlcmF0b3JzKVxuICAgICAgICAgICAgICA/IG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgIG9wdGlvbiA9PiBmaWx0ZXIub3BlcmF0b3JzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMsXG4gICAgICAgICAgd2lkdGg6ICc0MCUnXG4gICAgICAgIH1cbiAgICAgICAgOiBudWxsLFxuICAgICAgdGV4dDoge1xuICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgIHdpZHRoOiBmaWx0ZXIub3BlcmF0b3JzID8gJzYwJScgOiAnZmlsbCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgJ2RhdGUtcmFuZ2UnKCkge1xuICAgIC8vIFVzZSBzaG9ydGVyIGRhdGUgZm9ybWF0IGluIGRhdGUtcmFuZ2UgZmlsdGVyczpcbiAgICBjb25zdCBkYXRlRm9ybWF0ID0ge1xuICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgeWVhcjogJ251bWVyaWMnXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgICAgZGF0ZUZvcm1hdFxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnNTAlJyxcbiAgICAgICAgZGF0ZUZvcm1hdFxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsdGVyc1BhbmVsKGZpbHRlcnMsIGRhdGFQYXRoLCBwcm94eSkge1xuICBjb25zdCBwYW5lbCA9IHtcbiAgICBsYWJlbDogJ0ZpbHRlcnMnLFxuICAgIG5hbWU6ICckZmlsdGVycycsXG4gICAgdGFyZ2V0OiBkYXRhUGF0aCxcbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAvLyBOT1RFOiBPbiBwYW5lbHMsIHRoZSBkYXRhKCkgY2FsbGJhY2sgZG9lcyBzb21ldGhpbmcgZWxzZSB0aGFuIG9uIG5vcm1hbFxuICAgIC8vIHNjaGVtYTogSXQgcHJvZHVjZXMgdGhlIGBkYXRhYCBwcm9wZXJ0eSB0byBiZSBwYXNzZWQgdG8gdGhlIHBhbmVsJ3NcbiAgICAvLyBzY2hlbWEsIG5vdCB0aGUgZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgcGFuZWwgY29tcG9uZW50IGRpcmVjdGx5LlxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzRGF0YShcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIHByb3h5LnF1ZXJ5XG4gICAgICApXG4gICAgfSxcbiAgICBjb21wb25lbnRzOiBnZXRGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSxcbiAgICBidXR0b25zOiB7XG4gICAgICBjbGVhcjoge1xuICAgICAgICB0ZXh0OiAnQ2xlYXInLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICBzY2hlbWFDb21wb25lbnQucmVzZXREYXRhKClcbiAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZmlsdGVyOiB7XG4gICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICB0ZXh0OiAnRmlsdGVyJyxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICBhcHBseUZpbHRlcnMoKSB7XG4gICAgICAgIHByb3h5LnF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnByb3h5LnF1ZXJ5LFxuICAgICAgICAgIGZpbHRlcjogZm9ybWF0RmlsdGVyc0RhdGEodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSksXG4gICAgICAgICAgLy8gQ2xlYXIgcGFnaW5hdGlvbiB3aGVuIGFwcGx5aW5nIG9yIGNsZWFyaW5nIGZpbHRlcnM6XG4gICAgICAgICAgcGFnZTogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhbmVsXG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlcnNDb21wb25lbnRzKGZpbHRlcnMpIHtcbiAgY29uc3QgY29tcHMgPSB7fVxuICBmb3IgKGNvbnN0IGZpbHRlciBvZiBPYmplY3QudmFsdWVzKGZpbHRlcnMgfHwge30pKSB7XG4gICAgLy8gU3VwcG9ydCBib3RoIGN1c3RvbSBmb3JtcyBhbmQgZGVmYXVsdCBmaWx0ZXIgY29tcG9uZW50cywgdGhyb3VnaCB0aGVcbiAgICAvLyBgZmlsdGVyQ29tcG9uZW50c2AgcmVnaXN0cnkuIEV2ZW4gZm9yIGRlZmF1bHQgZmlsdGVycywgc3RpbGwgdXNlIHRoZVxuICAgIC8vIHByb3BlcnRpZXMgaW4gYGZpbHRlcmAgYXMgdGhlIGJhc2UgZm9yIGBmb3JtYCwgc28gdGhpbmdzIGxpa2UgYGxhYmVsYFxuICAgIC8vIGNhbiBiZSBjaGFuZ2VkIG9uIHRoZSByZXN1bHRpbmcgZm9ybS5cbiAgICBjb25zdCB7IGZpbHRlcjogdHlwZSwgLi4uZm9ybSB9ID0gZmlsdGVyXG4gICAgY29uc3QgY29tcG9uZW50cyA9IHR5cGVcbiAgICAgID8gZmlsdGVyQ29tcG9uZW50c1t0eXBlXT8uKGZpbHRlcilcbiAgICAgIDogZmlsdGVyLmNvbXBvbmVudHNcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgZm9ybS5jb21wb25lbnRzID0ge31cbiAgICAgIC8vIENvbnZlcnQgbGFiZWxzIHRvIHBsYWNlaG9sZGVyczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBjb21wb25lbnQubGFiZWwgfHwgbGFiZWxpemUoY29tcG9uZW50Lm5hbWUgfHwga2V5KVxuICAgICAgICAgIGZvcm0uY29tcG9uZW50c1trZXldID0ge1xuICAgICAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhYmVsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb21wc1tmaWx0ZXIubmFtZV0gPSB7XG4gICAgICAgIGxhYmVsOiBmb3JtLmxhYmVsLFxuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgICAgZm9ybSxcbiAgICAgICAgaW5saW5lZDogdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZpbHRlciAnJHtmaWx0ZXIubmFtZX0nOiBVbmtub3duIGZpbHRlciB0eXBlICcke3R5cGV9Jy5gXG4gICAgICApXG4gICAgfVxuICB9XG4gIHJldHVybiBjb21wc1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkge1xuICBjb25zdCBjb21wb25lbnQgPSBzY2hlbWEuY29tcG9uZW50c1tuYW1lXVxuICByZXR1cm4gY29tcG9uZW50Py5mb3JtPy5jb21wb25lbnRzXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbHRlcnNEYXRhKHNjaGVtYSwgZGF0YSkge1xuICBjb25zdCBmaWx0ZXJzID0gW11cbiAgZm9yIChjb25zdCBuYW1lIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbnRyeSA9IGRhdGFbbmFtZV1cbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIC8vIE1hcCBjb21wb25lbnRzIHNlcXVlbmNlIHRvIGFyZ3VtZW50czpcbiAgICAgIGNvbnN0IGFyZ3MgPSBPYmplY3Qua2V5cyhnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSkpLm1hcChcbiAgICAgICAga2V5ID0+IGVudHJ5W2tleV0gPz8gbnVsbFxuICAgICAgKVxuICAgICAgLy8gT25seSBhcHBseSBmaWx0ZXIgaWYgdGhlcmUgYXJlIHNvbWUgYXJndW1lbnRzIHRoYXQgYXJlbid0IG51bGw6XG4gICAgICBpZiAoYXJncy5zb21lKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKSkge1xuICAgICAgICBmaWx0ZXJzLnB1c2goYCR7bmFtZX06JHthcmdzLm1hcChKU09OLnN0cmluZ2lmeSkuam9pbignLCcpfWApXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWx0ZXJzLmxlbmd0aCA/IGZpbHRlcnMgOiB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gcGFyc2VGaWx0ZXJzRGF0YShzY2hlbWEsIHF1ZXJ5KSB7XG4gIGNvbnN0IGZpbHRlcnMgPSB7fVxuICAvLyBTYW1lIGFzIEBkaXRvanMvc2VydmVyJ3MgUXVlcnlQYXJhbWV0ZXJzLmZpbHRlcjogVHJhbnNsYXRlIHRoZSBzdHJpbmcgZGF0YVxuICAvLyBmcm9tICRyb3V0ZS5xdWVyeSBiYWNrIHRvIHBhcmFtIGxpc3RzIHBlciBmaWx0ZXI6XG4gIGlmIChxdWVyeSkge1xuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGFzQXJyYXkocXVlcnkuZmlsdGVyKSkge1xuICAgICAgY29uc3QgWywgbmFtZSwganNvbl0gPSBmaWx0ZXIubWF0Y2goL14oXFx3Kyk6KC4qKSQvKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsdGVyc1tuYW1lXSA9IGFzQXJyYXkoSlNPTi5wYXJzZShgWyR7anNvbn1dYCkpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBmaWx0ZXJzRGF0YSA9IHt9XG4gIGZvciAoY29uc3QgbmFtZSBpbiBzY2hlbWEuY29tcG9uZW50cykge1xuICAgIGNvbnN0IGRhdGEgPSB7fVxuICAgIC8vIElmIHdlIGhhdmUgcmV0cmlldmVkIHBhcmFtcyBmcm9tIHRoZSBxdWVyeSwgZmV0Y2ggdGhlIGFzc29jaWF0ZWRcbiAgICAvLyBmb3JtIGNvbXBvbmVudHMgc28gd2UgY2FuIG1hcCB0aGUgdmFsdWVzIGJhY2sgdG8gb2JqZWN0IGtleXM6XG4gICAgY29uc3QgYXJncyA9IGZpbHRlcnNbbmFtZV1cbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKVxuICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgbGV0IGluZGV4ID0gMFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gYXJnc1tpbmRleCsrXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZpbHRlcnNEYXRhW25hbWVdID0gZGF0YVxuICB9XG4gIHJldHVybiBmaWx0ZXJzRGF0YVxufVxuIiwiXG4uZGl0by1saXN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbilcbiAgLmRpdG8tbmF2aWdhdGlvblxuICAgIGRpdG8tc2NvcGVzKFxuICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICApXG4gICAgLy8gV2hlbiB0aGVyZSdzIG9ubHkgcGFnaW5hdGlvbiB3aXRob3V0IHNjb3Blcywgd2UgbmVlZCBhIGdvb2Qgb2wnIHNwYWNlclxuICAgIC8vIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgLmRpdG8tc3BhY2VyKFxuICAgICAgdi1lbHNlLWlmPVwicGFnaW5hdGVcIlxuICAgIClcbiAgICBkaXRvLXBhZ2luYXRpb24oXG4gICAgICB2LWlmPVwicGFnaW5hdGVcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgKVxuICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgIH1gXG4gIClcbiAgICBkaXRvLXRhYmxlLWhlYWQoXG4gICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgOmhhc0VkaXRCdXR0b25zPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICB2dWUtZHJhZ2dhYmxlKFxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICA6bGlzdD1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgQHN0YXJ0PVwib25TdGFydERyYWdcIlxuICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiaXRlbSwgaW5kZXggaW4gbGlzdERhdGFcIlxuICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgICAgOmlkPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUodi1pZj1cImNvbHVtbnNcIilcbiAgICAgICAgICBkaXRvLXRhYmxlLWNlbGwoXG4gICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXIoY29sdW1uKVwiXG4gICAgICAgICAgICA6a2V5PVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0Q2VsbENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICApXG4gICAgICAgIHRlbXBsYXRlKHYtZWxzZSlcbiAgICAgICAgICB0ZFxuICAgICAgICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29tcG9uZW50KFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICA6aXM9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgLy8gUmVuZGVyIGNyZWF0ZSBidXR0b25zIGluc2lkZSB0YWJsZSB3aGVuIG5vdCBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgICB0Zm9vdChcbiAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiAhc2luZ2xlXCJcbiAgICApXG4gICAgICB0clxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIDpjb2xzcGFuPVwibnVtQ29sdW1uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICApXG4gIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gIGRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1saXN0KFxuICAgIHYtaWY9XCJpc1JlYWR5XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuICApXG4gICAgLmRpdG8tbmF2aWdhdGlvblxuICAgICAgZGl0by1zY29wZXMoXG4gICAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgICAgKVxuICAgICAgLy8gV2hlbiB0aGVyZSdzIG9ubHkgcGFnaW5hdGlvbiB3aXRob3V0IHNjb3Blcywgd2UgbmVlZCBhIGdvb2Qgb2wnIHNwYWNlclxuICAgICAgLy8gZGl2LCBmb3IgdGhlIGxheW91dCBub3QgdG8gYnJlYWsuLi5cbiAgICAgIC5kaXRvLXNwYWNlcihcbiAgICAgICAgdi1lbHNlLWlmPVwicGFnaW5hdGVcIlxuICAgICAgKVxuICAgICAgZGl0by1wYWdpbmF0aW9uKFxuICAgICAgICB2LWlmPVwicGFnaW5hdGVcIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgICApXG4gICAgdGFibGUuZGl0by10YWJsZShcbiAgICAgIDpjbGFzcz1ge1xuICAgICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgICB9YFxuICAgIClcbiAgICAgIGRpdG8tdGFibGUtaGVhZChcbiAgICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICAgIDpsaXN0PVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICAgIEBzdGFydD1cIm9uU3RhcnREcmFnXCJcbiAgICAgICAgQGVuZD1cIm9uRW5kRHJhZ1wiXG4gICAgICApXG4gICAgICAgIHRyKFxuICAgICAgICAgIHYtZm9yPVwiaXRlbSwgaW5kZXggaW4gbGlzdERhdGFcIlxuICAgICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiY29sdW1uc1wiKVxuICAgICAgICAgICAgZGl0by10YWJsZS1jZWxsKFxuICAgICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlcihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmtleT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwiZ2V0Q2VsbENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6Y2VsbD1cImNvbHVtblwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgdGRcbiAgICAgICAgICAgICAgZGl0by1zY2hlbWEtaW5saW5lZChcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgICAgICAgICAgIDppcz1cImNvbXBvbmVudFwiXG4gICAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgIC8vIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgICB0Zm9vdChcbiAgICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgICAgKVxuICAgICAgICB0clxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgICA6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGRpdG8tZWRpdC1idXR0b25zKFxuICAgICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgIClcbiAgICAvLyBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIGRpdG8tZWRpdC1idXR0b25zLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgIHYtaWY9XCJoYXNMaXN0QnV0dG9ucyAmJiBzaW5nbGVcIlxuICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1saXN0XG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgLmRpdG8tbmF2aWdhdGlvblxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuXG4gICAgICBwYWRkaW5nLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZy1oYWxmXG4gICAgICArdXNlci1zZWxlY3Qobm9uZSlcbiAgICAgICY6ZW1wdHlcbiAgICAgICAgZGlzcGxheTogbm9uZVxuICAgICAgLmRpdG8tc2NvcGVzLFxuICAgICAgLmRpdG8tcGFnaW5hdGlvblxuICAgICAgICBkaXNwbGF5OiBmbGV4XG4gICAgICAgIGZsZXg6IDAgMSBhdXRvXG4gICAgICAgIG1pbi13aWR0aDogMFxuICAgICYuZGl0by1zaW5nbGVcbiAgICAgIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICAgIGRpc3BsYXk6IGdyaWRcbiAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnRcbiAgICAgIGhlaWdodDogMTAwJVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IE9yZGVyZWRNaXhpbiBmcm9tICcuLi9taXhpbnMvT3JkZXJlZE1peGluLmpzJ1xuaW1wb3J0IFZ1ZURyYWdnYWJsZSBmcm9tICd2dWVkcmFnZ2FibGUnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIGdldFZpZXdFZGl0UGF0aCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldEZpbHRlcnNQYW5lbCB9IGZyb20gJy4uL3V0aWxzL2ZpbHRlci5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IHBpY2tCeSwgZXF1YWxzLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGlzdCcsIHtcbiAgY29tcG9uZW50czogeyBWdWVEcmFnZ2FibGUgfSxcbiAgbWl4aW5zOiBbU291cmNlTWl4aW4sIE9yZGVyZWRNaXhpbl0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIGdldFBhbmVsU2NoZW1hKHNjaGVtYSwgZGF0YVBhdGgsIHNjaGVtYUNvbXBvbmVudCkge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gc2NoZW1hXG4gICAgLy8gU2VlIGlmIHRoaXMgbGlzdCBjb21wb25lbnQgd2FudHMgdG8gZGlzcGxheSBhIGZpbHRlciBwYW5lbCwgYW5kIGlmIHNvLFxuICAgIC8vIGNyZWF0ZSB0aGUgcGFuZWwgc2NoZW1hIGZvciBpdCB0aHJvdWdoIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIC8vIEF0IHRoZSB0aW1lIG9mIHRoZSBjcmVhdGlvbiBvZiB0aGUgcGFuZWwgc2NoZW1hLCB0aGUgc2NoZW1hQ29tcG9uZW50IGlzXG4gICAgICAvLyBub3QgZmlsbGVkIHlldCwgc28gd2UgY2FuJ3QgZ2V0IHRoZSB0YXJnZXQgY29tcG9uZW50IChkYXRhUGF0aCkgcmlnaHRcbiAgICAgIC8vIGF3YXkuIFVzZSBhIHByb3h5IGFuZCBhIGdldHRlciBpbnN0ZWFkLCB0byBnZXQgYXJvdW5kIHRoaXM6XG4gICAgICBjb25zdCBnZXRMaXN0Q29tcG9uZW50ID0gKCkgPT4gc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5RGF0YVBhdGgoXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICBjb21wb25lbnQgPT4gY29tcG9uZW50LnR5cGUgPT09ICdsaXN0J1xuICAgICAgKVxuXG4gICAgICByZXR1cm4gZ2V0RmlsdGVyc1BhbmVsKFxuICAgICAgICBnZXROYW1lZFNjaGVtYXMoZmlsdGVycyksXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICB7IC8vIENyZWF0ZSBhIHNpbXBsZSBwcm94eSB0byBnZXQgLyBzZXQgdGhlIHF1ZXJ5LCBzZWUgZ2V0RmlsdGVyc1BhbmVsKClcbiAgICAgICAgICBnZXQgcXVlcnkoKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0TGlzdENvbXBvbmVudCgpPy5xdWVyeVxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2V0IHF1ZXJ5KHF1ZXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBnZXRMaXN0Q29tcG9uZW50KClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgLy8gRmlsdGVyIG91dCB1bmRlZmluZWQgdmFsdWVzIGZvciBjb21wYXJpbmcgd2l0aCBlcXVhbHMoKVxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBvYmogPT4gcGlja0J5KG9iaiwgdmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgaWYgKCFlcXVhbHMoZmlsdGVyKHF1ZXJ5KSwgZmlsdGVyKGNvbXBvbmVudC5xdWVyeSkpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LnF1ZXJ5ID0gcXVlcnlcbiAgICAgICAgICAgICAgICBjb21wb25lbnQubG9hZERhdGEoZmFsc2UpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBoYXNMaXN0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhIShcbiAgICAgICAgdGhpcy5idXR0b25TY2hlbWFzIHx8XG4gICAgICAgIHRoaXMuY3JlYXRhYmxlXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGxpc3REYXRhLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICB0aGlzLmVkaXRhYmxlIHx8XG4gICAgICAgIHRoaXMuZGVsZXRhYmxlIHx8XG4gICAgICAgIHRoaXMuZHJhZ2dhYmxlXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NlbGxFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0lubGluZWQgJiYgdGhpcy5oYXNFZGl0QnV0dG9uc1xuICAgIH0sXG5cbiAgICBoYXNFdmVuQ291bnQoKSB7XG4gICAgICByZXR1cm4gISh0aGlzLmxpc3REYXRhLmxlbmd0aCAlIDIpXG4gICAgfSxcblxuICAgIG51bUNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodGhpcy5jb2x1bW5zID8gT2JqZWN0LmtleXModGhpcy5jb2x1bW5zKS5sZW5ndGggOiAxKSArXG4gICAgICAgICh0aGlzLmhhc0NlbGxFZGl0QnV0dG9ucyA/IDEgOiAwKVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0RGF0YVBhdGgoaW5kZXgpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICB9LFxuXG4gICAgZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRWaWV3RWRpdFBhdGgodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkgfHwgdGhpcy5wYXRoXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICByZXR1cm4gYCR7cGF0aH0vJHtpZH1gXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDZWxsQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY2VsbC0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBkYXRhUGF0aDogdGhpcy5nZXREYXRhUGF0aChpbmRleClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRmlsdGVyRXJyb3JzKGVycm9ycykge1xuICAgICAgY29uc3QgZmlsdGVyc0RhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgJyRmaWx0ZXJzJylcbiAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0UGFuZWxCeURhdGFQYXRoKGZpbHRlcnNEYXRhUGF0aClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbmRpdG8tbGFiZWwuZGl0by1sYWJlbC1jb21wb25lbnQoOmxhYmVsPVwidmFsdWVcIiA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgZGl0by1sYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudCg6bGFiZWw9XCJ2YWx1ZVwiIDpkYXRhUGF0aD1cImRhdGFQYXRoXCIpXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbGFiZWwtY29tcG9uZW50XG4gICAgZGlzcGxheTogZmxleFxuICAgIGhlaWdodDogMmVtXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xhYmVsJywge1xuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlXG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLW1hcmt1cChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuKVxuICBlZGl0b3ItbWVudS1iYXIuZGl0by1tYXJrdXAtdG9vbGJhcig6ZWRpdG9yPVwiZWRpdG9yXCIpXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtdG9vbGJhcihcbiAgICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgICApXG4gICAgICAuZGl0by1idXR0b24tZ3JvdXAoXG4gICAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgICApXG4gICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIixcbiAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgICAgKVxuICAgICAgICAgIGljb24oOm5hbWU9XCJpY29uXCIpXG4gIGVkaXRvci1jb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICByZWY9XCJlZGl0b3JcIlxuICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gIClcbiAgLmRpdG8tcmVzaXplKFxuICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tbWFya3VwKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgKVxuICAgIGVkaXRvci1tZW51LWJhci5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiLFxuICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgaWNvbig6bmFtZT1cImljb25cIilcbiAgICBlZGl0b3ItY29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgICByZWY9XCJlZGl0b3JcIlxuICAgICAgOmVkaXRvcj1cImVkaXRvclwiXG4gICAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICAgIClcbiAgICAuZGl0by1yZXNpemUoXG4gICAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tbWFya3VwXG4gICAgQGV4dGVuZCAlaW5wdXRcbiAgICBwb3NpdGlvbjogcmVsYXRpdmVcblxuICAgIC5kaXRvLXJlc2l6ZVxuICAgICAgQGV4dGVuZCAlaWNvbi1yZXNpemVcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgdG9wOiB1bnNldFxuICAgICAgbGVmdDogdW5zZXRcbiAgICAgIHJpZ2h0OiAwXG4gICAgICBib3R0b206IDBcbiAgICAgIHdpZHRoOiAxZW1cbiAgICAgIGhlaWdodDogMWVtXG5cbiAgICAuUHJvc2VNaXJyb3JcbiAgICAgIGhlaWdodDogMTAwJVxuICAgICAgb3V0bGluZTogbm9uZVxuXG4gICAgLmRpdG8tbWFya3VwLWVkaXRvclxuICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsXG4gICAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgICAgbWFyZ2luLXJpZ2h0OiAtJGlucHV0LXBhZGRpbmctaG9yXG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3JcblxuICAgIC5kaXRvLWJ1dHRvbnMtdG9vbGJhclxuICAgICAgbWFyZ2luOiAkaW5wdXQtcGFkZGluZy12ZXIgMFxuXG4gICAgaDEsXG4gICAgaDIsXG4gICAgaDMsXG4gICAgcCxcbiAgICB1bCxcbiAgICBvbCxcbiAgICBwcmUsXG4gICAgYmxvY2txdW90ZVxuICAgICAgbWFyZ2luOiAxcmVtIDBcbiAgICAgICY6Zmlyc3QtY2hpbGRcbiAgICAgICAgbWFyZ2luLXRvcDogMFxuICAgICAgJjpsYXN0LWNoaWxkXG4gICAgICAgIG1hcmdpbi1ib3R0b206IDBcbiAgICBoMSxcbiAgICBoMixcbiAgICBoM1xuICAgICAgZm9udC13ZWlnaHQ6IGJvbGRcbiAgICBoMVxuICAgICAgZm9udC1zaXplOiAxLjRyZW1cbiAgICBoMlxuICAgICAgZm9udC1zaXplOiAxLjJyZW1cbiAgICB1bFxuICAgICAgbGlzdC1zdHlsZTogZGlzY1xuICAgIGNvZGVcbiAgICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ub1xuICAgIHByZVxuICAgICAgcGFkZGluZzogMC43cmVtIDFyZW1cbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyXG4gICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgICBvdmVyZmxvdy14OiBhdXRvXG4gICAgICBjb2RlXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgcCBjb2RlXG4gICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2tcbiAgICAgIHBhZGRpbmc6IDAgMC4zcmVtXG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXJcbiAgICBhXG4gICAgICBwb2ludGVyLWV2ZW50czogbm9uZVxuICAgICAgY3Vyc29yOiBkZWZhdWx0XG4gICAgICBjb2xvcjogYmx1ZVxuICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVcbiAgICB1bCxcbiAgICBvbFxuICAgICAgcGFkZGluZy1sZWZ0OiAycmVtXG4gICAgbGlcbiAgICAgICYgPiBwLFxuICAgICAgJiA+IG9sLFxuICAgICAgJiA+IHVsXG4gICAgICAgIG1hcmdpbjogMFxuICAgIGJsb2NrcXVvdGVcbiAgICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXJcbiAgICAgIHBhZGRpbmctbGVmdDogMXJlbVxuICAgICAgZm9udC1zdHlsZTogaXRhbGljXG4gICAgICBwXG4gICAgICAgIG1hcmdpbjogMFxuXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBFZGl0b3JNZW51QmFyLCBNYXJrIH0gZnJvbSAndGlwdGFwJ1xuaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbmltcG9ydCB7XG4gIC8vIE1hcmtzOlxuICBCb2xkLCBDb2RlLCBJdGFsaWMsIExpbmssIFN0cmlrZSwgVW5kZXJsaW5lLFxuICAvLyBOb2RlczpcbiAgQmxvY2txdW90ZSwgQ29kZUJsb2NrLCBIYXJkQnJlYWssIEhlYWRpbmcsIEhvcml6b250YWxSdWxlLFxuICBPcmRlcmVkTGlzdCwgQnVsbGV0TGlzdCwgTGlzdEl0ZW0sXG4gIC8vIFRPRE86XG4gIC8vIC0gSW1hZ2UsIE1lbnRpb24sIENvZGVCbG9ja0hpZ2hsaWdodFxuICAvLyAtIFRhYmxlLCBUYWJsZUNlbGwsIFRhYmxlSGVhZGVyLCBUYWJsZU5vZGVzLCBUYWJsZVJvdyxcbiAgLy8gLSBUb2RvSXRlbSwgVG9kb0xpc3RcbiAgLy8gVG9vbHM6XG4gIEhpc3Rvcnlcbn0gZnJvbSAndGlwdGFwLWV4dGVuc2lvbnMnXG5pbXBvcnQgeyBJY29uIH0gZnJvbSAnQGRpdG9qcy91aSdcbmltcG9ydCB7XG4gIGlzQXJyYXksIGlzT2JqZWN0LCB1bmRlcnNjb3JlLCBoeXBoZW5hdGUsIGRlYm91bmNlXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtYXJrdXAnLCB7XG4gIGNvbXBvbmVudHM6IHtcbiAgICBFZGl0b3JDb250ZW50LFxuICAgIEVkaXRvck1lbnVCYXIsXG4gICAgSWNvblxuICB9LFxuXG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlZGl0b3I6IG51bGwsXG4gICAgICBoZWlnaHQ6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAxMFxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0IHx8IGBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1hcmtCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbWFya3MnLCB7XG4gICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgIGl0YWxpYzogdHJ1ZSxcbiAgICAgICAgdW5kZXJsaW5lOiB0cnVlLFxuICAgICAgICBzdHJpa2U6IHRydWUsXG4gICAgICAgIHNtYWxsOiB0cnVlLFxuICAgICAgICBjb2RlOiB0cnVlLFxuICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgb25DbGljazogY29tbWFuZCA9PiB0aGlzLm9uQ2xpY2tMaW5rKGNvbW1hbmQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGJhc2ljTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgcGFyYWdyYXBoOiB7XG4gICAgICAgIC8vIERvIG5vdCBzaG93IHRoZSBwYXJhZ3JhcGggY29tbWFuZCBhcyBhY3RpdmUgaWYgYW55IG9mIHRoZSBibG9ja1xuICAgICAgICAvLyBjb21tYW5kcyBhcmUgYWxzbyBhY3RpdmU6XG4gICAgICAgICAgaWdub3JlQWN0aXZlOiAoKSA9PlxuICAgICAgICAgICAgdGhpcy5vdGhlck5vZGVCdXR0b25zLnNvbWUoYnV0dG9uID0+IGJ1dHRvbi5pc0FjdGl2ZSlcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGluZzoge1xuICAgICAgICAgIGF0dHI6ICdsZXZlbCcsXG4gICAgICAgICAgdmFsdWVzOiBbMSwgMiwgMywgNCwgNSwgNl1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb3RoZXJOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBidWxsZXRMaXN0OiB0cnVlLFxuICAgICAgICBvcmRlcmVkTGlzdDogdHJ1ZSxcbiAgICAgICAgYmxvY2txdW90ZTogdHJ1ZSxcbiAgICAgICAgY29kZUJsb2NrOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB0b29sQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ3Rvb2xzJywge1xuICAgICAgICB1bmRvOiB0cnVlLFxuICAgICAgICByZWRvOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBncm91cGVkQnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya0J1dHRvbnMsXG4gICAgICAgIGJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIG90aGVyTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRvb2xCdXR0b25zXG4gICAgICB9ID0gdGhpc1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgbWFya0J1dHRvbnMsXG4gICAgICAgIGJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIG90aGVyTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRvb2xCdXR0b25zXG4gICAgICBdLmZpbHRlcihidXR0b25zID0+IGJ1dHRvbnMubGVuZ3RoID4gMClcbiAgICB9LFxuXG4gICAgcGFyc2VPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlOiB7XG4gICAgICAgICAgJ2NvbGxhcHNlJzogZmFsc2UsXG4gICAgICAgICAgJ3ByZXNlcnZlJzogdHJ1ZSxcbiAgICAgICAgICAncHJlc2VydmUtYWxsJzogJ2Z1bGwnXG4gICAgICAgIH1bdGhpcy53aGl0ZXNwYWNlXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBlZGl0b3JPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWRpdGFibGU6ICF0aGlzLnJlYWR5b25seSxcbiAgICAgICAgYXV0b0ZvY3VzOiB0aGlzLmF1dG9mb2N1cyxcbiAgICAgICAgZGlzYWJsZUlucHV0UnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLmlucHV0LFxuICAgICAgICBkaXNhYmxlUGFzdGVSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMucGFzdGUsXG4gICAgICAgIHBhcnNlT3B0aW9uczogdGhpcy5wYXJzZU9wdGlvbnNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB3aGl0ZXNwYWNlOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2hpdGVzcGFjZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdjb2xsYXBzZSdcbiAgICAgIC8vIFBvc3NpYmxlIHZhbHVlcyBhcmU6ICdjb2xsYXBzZScsICdwcmVzZXJ2ZScsICdwcmVzZXJ2ZS1hbGwnXG4gICAgfSksXG5cbiAgICBlbmFibGVSdWxlczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VuYWJsZVJ1bGVzJywge1xuICAgICAgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlbmFibGVSdWxlcykge1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoZW5hYmxlUnVsZXMpXG4gICAgICAgICAgPyBlbmFibGVSdWxlc1xuICAgICAgICAgIDoge1xuICAgICAgICAgICAgaW5wdXQ6ICEhZW5hYmxlUnVsZXMsXG4gICAgICAgICAgICBwYXN0ZTogISFlbmFibGVSdWxlc1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgcmVhZHlvbmx5OiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgYXV0b2ZvY3VzOiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgZW5hYmxlUnVsZXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJ1xuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlRGVib3VuY2VkID0gZGVib3VuY2UoZ2V0VmFsdWUgPT4ge1xuICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICB0aGlzLnZhbHVlID0gZ2V0VmFsdWUoKVxuICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9LCAxMDApXG5cbiAgICBjb25zdCBvblVwZGF0ZSA9ICh7IGdldEhUTUwgfSkgPT4ge1xuICAgICAgc2V0VmFsdWVEZWJvdW5jZWQoZ2V0SFRNTClcbiAgICAgIHRoaXMub25JbnB1dCgpXG4gICAgfVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZWRpdG9yLnNldENvbnRlbnQodmFsdWUsIGZhbHNlLCB0aGlzLnBhcnNlT3B0aW9ucylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5lZGl0b3IgPSBuZXcgRWRpdG9yKHtcbiAgICAgIC4uLnRoaXMuZWRpdG9yT3B0aW9ucyxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbkJsdXIsXG4gICAgICBvblVwZGF0ZSxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuY3JlYXRlRXh0ZW5zaW9ucygpLFxuICAgICAgY29udGVudDogdGhpcy52YWx1ZSB8fCAnJ1xuICAgIH0pXG4gIH0sXG5cbiAgYmVmb3JlRGVzdHJveSgpIHtcbiAgICB0aGlzLmVkaXRvci5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25EcmFnUmVzaXplKGV2ZW50KSB7XG4gICAgICBjb25zdCBnZXRQb2ludCA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfSkgPT4gKHsgeCwgeSB9KVxuXG4gICAgICBsZXQgcHJldlkgPSBnZXRQb2ludChldmVudCkueVxuICAgICAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRyZWZzLmVkaXRvci4kZWwpLmhlaWdodClcblxuICAgICAgY29uc3QgbW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IHkgfSA9IGdldFBvaW50KGV2ZW50KVxuICAgICAgICBoZWlnaHQgKz0geSAtIHByZXZZXG4gICAgICAgIHByZXZZID0geVxuICAgICAgICB0aGlzLmhlaWdodCA9IGAke01hdGgubWF4KGhlaWdodCwgMCl9cHhgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZW1vdmUsXG5cbiAgICAgICAgbW91c2V1cChldmVudCkge1xuICAgICAgICAgIG1vdXNlbW92ZShldmVudClcbiAgICAgICAgICBoYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVFZGl0b3JPcHRpb25zKCkge1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9ucyh0aGlzLmVkaXRvck9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2tMaW5rKGNvbW1hbmQpIHtcbiAgICAgIGNvbnN0IGF0dHJzID0gYXdhaXQgdGhpcy5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIGhyZWY6IHtcbiAgICAgICAgICAgIHR5cGU6ICd1cmwnLFxuICAgICAgICAgICAgbGFiZWw6ICdMaW5rJyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnVGl0bGUnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7fSxcbiAgICAgICAgICBhcHBseTogeyB0eXBlOiAnc3VibWl0JyB9LFxuICAgICAgICAgIHJlbW92ZToge1xuICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgIGNsaWNrKHsgZGlhbG9nQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICBocmVmOiBudWxsLFxuICAgICAgICAgICAgICAgICAgdGl0bGU6IG51bGxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiB0aGlzLmVkaXRvci5nZXRNYXJrQXR0cnMoJ2xpbmsnKVxuICAgICAgfSlcbiAgICAgIGlmIChhdHRycykge1xuICAgICAgICBsZXQgeyBocmVmLCB0aXRsZSB9ID0gYXR0cnNcbiAgICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgICAvLyBTZWUgaWYgYGhyZWZgIGNhbiBiZSBwYXJzZWQgYXMgYSBVUkwsIGFuZCBpZiBub3QsIHByZWZpeCBpdCB3aXRoXG4gICAgICAgICAgLy8gYSBkZWZhdWx0IHByb3RvY29sLlxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgVVJMKGhyZWYpXG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBocmVmID0gYGh0dHA6Ly8ke2hyZWZ9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb21tYW5kKHsgaHJlZiwgdGl0bGUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRXh0ZW5zaW9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya3MgPSB7fSxcbiAgICAgICAgbm9kZXMgPSB7fSxcbiAgICAgICAgdG9vbHMgPSB7fVxuICAgICAgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gW1xuICAgICAgICAvLyBzY2hlbWEubWFya3M6XG4gICAgICAgIG1hcmtzLmJvbGQgJiYgbmV3IEJvbGQoKSxcbiAgICAgICAgbWFya3MuaXRhbGljICYmIG5ldyBJdGFsaWMoKSxcbiAgICAgICAgbWFya3MudW5kZXJsaW5lICYmIG5ldyBVbmRlcmxpbmUoKSxcbiAgICAgICAgbWFya3Muc3RyaWtlICYmIG5ldyBTdHJpa2UoKSxcbiAgICAgICAgbWFya3Muc21hbGwgJiYgbmV3IFNtYWxsKCksXG4gICAgICAgIG1hcmtzLmNvZGUgJiYgbmV3IENvZGUoKSxcbiAgICAgICAgbWFya3MubGluayAmJiBuZXcgTGlua1dpdGhUaXRsZSgpLFxuXG4gICAgICAgIC8vIHNjaGVtYS5ub2RlczpcbiAgICAgICAgbm9kZXMuYmxvY2txdW90ZSAmJiBuZXcgQmxvY2txdW90ZSgpLFxuICAgICAgICBub2Rlcy5jb2RlQmxvY2sgJiYgbmV3IENvZGVCbG9jaygpLFxuICAgICAgICBuZXcgSGFyZEJyZWFrKCksIC8vIFRPRE86IFNob3VsZCB0aGlzIGFsd2F5cyBvbj9cbiAgICAgICAgbm9kZXMuaGVhZGluZyAmJiBuZXcgSGVhZGluZyh7IGxldmVsczogbm9kZXMuaGVhZGluZyB9KSxcbiAgICAgICAgbm9kZXMuaG9yaXpvbnRhbFJ1bGUgJiYgbmV3IEhvcml6b250YWxSdWxlKCksXG4gICAgICAgIChub2Rlcy5vcmRlcmVkTGlzdCB8fCBub2Rlcy5idWxsZXRMaXN0KSAmJiBuZXcgTGlzdEl0ZW0oKSxcbiAgICAgICAgbm9kZXMuYnVsbGV0TGlzdCAmJiBuZXcgQnVsbGV0TGlzdCgpLFxuICAgICAgICBub2Rlcy5vcmRlcmVkTGlzdCAmJiBuZXcgT3JkZXJlZExpc3QoKSxcbiAgICAgICAgLy8gVE9ETzpcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgbmV3IFRvZG9JdGVtKCksXG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIG5ldyBUb2RvTGlzdCgpLFxuXG4gICAgICAgIC8vIHNjaGVtYS50b29sczpcbiAgICAgICAgdG9vbHMuaGlzdG9yeSAmJiBuZXcgSGlzdG9yeSgpXG4gICAgICBdLmZpbHRlcihleHRlbnNpb24gPT4gISFleHRlbnNpb24pXG4gICAgfSxcblxuICAgIGdldEJ1dHRvbnMoc2V0dGluZ3NOYW1lLCBkZXNjcmlwdGlvbnMpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSBbXVxuXG4gICAgICBjb25zdCBhZGRCdXR0b24gPSAoeyBuYW1lLCBpY29uLCBhdHRycywgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0pID0+IHtcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLmVkaXRvci5pc0FjdGl2ZVtuYW1lXVxuICAgICAgICBjb25zdCBjb21tYW5kID0gdGhpcy5lZGl0b3IuY29tbWFuZHNbbmFtZV1cbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgaXNBY3RpdmU6IChcbiAgICAgICAgICAgIGlzQWN0aXZlPy4oYXR0cnMpICYmXG4gICAgICAgICAgICAoaWdub3JlQWN0aXZlID09IG51bGwgfHwgIWlnbm9yZUFjdGl2ZSgpKVxuICAgICAgICAgICksXG4gICAgICAgICAgb25DbGljazogKCkgPT4gb25DbGlja1xuICAgICAgICAgICAgPyBvbkNsaWNrKGNvbW1hbmQsIGF0dHJzKVxuICAgICAgICAgICAgOiBjb21tYW5kKGF0dHJzKVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2NoZW1hW3NldHRpbmdzTmFtZV1cbiAgICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGRlc2NyaXB0aW9uXSBvZiBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpKSB7XG4gICAgICAgICAgY29uc3Qgc2V0dGluZ05hbWUgPSBbJ3VuZG8nLCAncmVkbyddLmluY2x1ZGVzKGtleSkgPyAnaGlzdG9yeScgOiBrZXlcbiAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nbc2V0dGluZ05hbWVdXG4gICAgICAgICAgY29uc3QgbmFtZSA9IHVuZGVyc2NvcmUoa2V5KVxuICAgICAgICAgIGNvbnN0IGljb24gPSBoeXBoZW5hdGUoa2V5KVxuICAgICAgICAgIGlmIChzZXR0aW5nKSB7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkZXNjcmlwdGlvbikpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBhdHRyLCB2YWx1ZXMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9ID0gZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgaWYgKGF0dHIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZXMpICYmIGlzQXJyYXkoc2V0dGluZykpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgaGVhZGluZyBsZXZlbCBhdHRyczpcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYCR7aWNvbn0tJHt2YWx1ZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cnM6IHsgW2F0dHJdOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiwgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgdGhpcy5lZGl0b3IuZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcblxuY2xhc3MgU21hbGwgZXh0ZW5kcyBNYXJrIHtcbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuICdzbWFsbCdcbiAgfVxuXG4gIGdldCBzY2hlbWEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlRE9NOiBbXG4gICAgICAgIHsgdGFnOiAnc21hbGwnIH1cbiAgICAgIF0sXG4gICAgICB0b0RPTTogKCkgPT4gWydzbWFsbCcsIDBdXG4gICAgfVxuICB9XG5cbiAgY29tbWFuZHMoeyB0eXBlIH0pIHtcbiAgICByZXR1cm4gKCkgPT4gdG9nZ2xlTWFyayh0eXBlKVxuICB9XG59XG5jbGFzcyBMaW5rV2l0aFRpdGxlIGV4dGVuZHMgTGluayB7XG4gIGdldCBzY2hlbWEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGF0dHJzOiB7XG4gICAgICAgIGhyZWY6IHtcbiAgICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgIHBhcnNlRE9NOiBbe1xuICAgICAgICB0YWc6ICdhJyxcbiAgICAgICAgZ2V0QXR0cnM6IGRvbSA9PiAoe1xuICAgICAgICAgIGhyZWY6IGRvbS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSxcbiAgICAgICAgICB0aXRsZTogZG9tLmdldEF0dHJpYnV0ZSgndGl0bGUnKVxuICAgICAgICB9KVxuICAgICAgfV0sXG4gICAgICB0b0RPTTogbm9kZSA9PiBbJ2EnLCBub2RlLmF0dHJzLCAwXVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLW11bHRpc2VsZWN0KFxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1tdWx0aXNlbGVjdC1zaW5nbGUnOiAhbXVsdGlwbGUsXG4gICAgJ2RpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGUnOiBtdWx0aXBsZVxuICB9YFxuKVxuICB2dWUtbXVsdGlzZWxlY3QoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOnNob3ctbGFiZWxzPVwiZmFsc2VcIlxuICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICB0YWctcGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiLFxuICAgIDpvcHRpb25zPVwicG9wdWxhdGUgJiYgYWN0aXZlT3B0aW9ucyB8fCBbXVwiXG4gICAgOmN1c3RvbS1sYWJlbD1cImdldExhYmVsRm9yT3B0aW9uXCJcbiAgICA6dHJhY2stYnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgOmdyb3VwLWxhYmVsPVwiZ3JvdXBCeUxhYmVsXCJcbiAgICA6Z3JvdXAtdmFsdWVzPVwiZ3JvdXBCeU9wdGlvbnNcIlxuICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICA6dGFnZ2FibGU9XCJ0YWdnYWJsZVwiXG4gICAgOnNlYXJjaGFibGU9XCJzZWFyY2hhYmxlXCJcbiAgICA6aW50ZXJuYWwtc2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgOnByZXNlcnZlLXNlYXJjaD1cIiEhc2VhcmNoRmlsdGVyXCJcbiAgICA6Y2xlYXItb24tc2VsZWN0PVwiIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsb3NlLW9uLXNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgOmxvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgIEBvcGVuPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgIEBzZWFyY2gtY2hhbmdlPVwib25TZWFyY2hDaGFuZ2VcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW11bHRpc2VsZWN0KFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICAgJ2RpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGUnOiBtdWx0aXBsZVxuICAgIH1gXG4gIClcbiAgICB2dWUtbXVsdGlzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDpzaG93LWxhYmVscz1cImZhbHNlXCJcbiAgICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICAgIHRhZy1wbGFjZWhvbGRlcj1cIlByZXNzIGVudGVyIHRvIGFkZCBuZXcgdGFnXCIsXG4gICAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgICAgOmN1c3RvbS1sYWJlbD1cImdldExhYmVsRm9yT3B0aW9uXCJcbiAgICAgIDp0cmFjay1ieT1cIm9wdGlvblZhbHVlXCJcbiAgICAgIDpncm91cC1sYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgICA6Z3JvdXAtdmFsdWVzPVwiZ3JvdXBCeU9wdGlvbnNcIlxuICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgICAgOnNlYXJjaGFibGU9XCJzZWFyY2hhYmxlXCJcbiAgICAgIDppbnRlcm5hbC1zZWFyY2g9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpwcmVzZXJ2ZS1zZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xlYXItb24tc2VsZWN0PVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xvc2Utb24tc2VsZWN0PVwiIXN0YXlPcGVuXCJcbiAgICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIEBvcGVuPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEB0YWc9XCJvbkFkZFRhZ1wiXG4gICAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICBAaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QubWluLmNzcydcblxuICAkc3Bpbm5lci13aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aFxuICAkdGFnLWljb24td2lkdGg6IDEuOGVtXG4gICR0YWctbWFyZ2luOiAycHhcbiAgJHRhZy1wYWRkaW5nOiAzcHhcbiAgJHRhZy1saW5lLWhlaWdodDogMS4xZW1cblxuICAuZGl0by1tdWx0aXNlbGVjdFxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4gICAgLm11bHRpc2VsZWN0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIG1pbi1oZWlnaHQ6IGluaGVyaXRcbiAgICAgIGNvbG9yOiAkY29sb3ItYmxhY2tcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0XG4gICAgICBvdmVyZmxvdzogYXV0b1xuICAgICAgbWluLWhlaWdodDogaW5oZXJpdFxuICAgICAgcGFkZGluZzogMCAkc3Bpbm5lci13aWR0aCAwIDBcbiAgICAgIC8vIFNvIHRhZ3MgY2FuIGZsb2F0IG9uIG11bHRpcGxlIGxpbmVzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zOlxuICAgICAgcGFkZGluZy1ib3R0b206ICR0YWctbWFyZ2luXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZ1xuICAgICAgZmxvYXQ6IGxlZnRcbiAgICAgIG1hcmdpbjogJHRhZy1tYXJnaW4gMCAwICR0YWctbWFyZ2luXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIHBhZGRpbmc6ICR0YWctcGFkZGluZyAkdGFnLWljb24td2lkdGggJHRhZy1wYWRkaW5nIDAuOGVtXG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLXdyYXBcbiAgICAgIG92ZXJmbG93OiBhdXRvXG4gICAgICBsaW5lLWhlaWdodDogMFxuXG4gICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICBmb250LXNpemU6IGluaGVyaXRcbiAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0XG4gICAgICBtaW4taGVpZ2h0OiAwXG4gICAgICBtYXJnaW46IDAgMCAxcHggMFxuICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBzdHlsZT1cInBhZGRpbmc6IC4uLjtcIiBpbiBhZGRpdGlvbiB0byB1c2luZ1xuICAgICAgLy8gY2xhc3Nlcywgc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nICFpbXBvcnRhbnRcbiAgICAgIC8vIFNvIGlucHV0IGNhbiBmbG9hdCBuZXh0IHRvIHRhZ3MgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnMgd2l0aFxuICAgICAgLy8gLm11bHRpc2VsZWN0X190YWdzOlxuICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudFxuICAgICAgYmFja2dyb3VuZDogbm9uZVxuXG4gICAgLm11bHRpc2VsZWN0X19wbGFjZWhvbGRlcixcbiAgICAubXVsdGlzZWxlY3RfX2lucHV0OjpwbGFjZWhvbGRlclxuICAgICAgY29sb3I6ICRjb2xvci1wbGFjZWhvbGRlclxuXG4gICAgLm11bHRpc2VsZWN0LS1hY3RpdmVcbiAgICAgIC5tdWx0aXNlbGVjdF9fcGxhY2Vob2xkZXJcbiAgICAgICAgLy8gRG9uJ3QgdXNlIGBkaXNwbGF5OiBub25lYCB0byBoaWRlIHBsYWNlLWhvbGRlciwgYXMgdGhlIGxheW91dCB3b3VsZFxuICAgICAgICAvLyBjb2xsYXBzZS5cbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlblxuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3QsXG4gICAgLm11bHRpc2VsZWN0X19zcGlubmVyXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICAvLyAkYm9yZGVyLXdpZHRoIHRvIHByZXZlbnQgbWFza2luZyBib3JkZXIgd2l0aCAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHRvcDogJGJvcmRlci13aWR0aFxuICAgICAgcmlnaHQ6ICRib3JkZXItd2lkdGhcbiAgICAgIGJvdHRvbTogJGJvcmRlci13aWR0aFxuICAgICAgaGVpZ2h0OiBpbmhlcml0XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1c1xuXG4gICAgLm11bHRpc2VsZWN0X19zZWxlY3RcbiAgICAgIHdpZHRoOiAwXG4gICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoJHNlbGVjdC1hcnJvdy13aWR0aCAvIDIpXG4gICAgICAmOjpiZWZvcmVcbiAgICAgICAgK2Fycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSlcbiAgICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbVxuICAgICAgICByaWdodDogY2FsYygtMSAqICRzZWxlY3QtYXJyb3ctc2l6ZSAvIDIpXG5cbiAgICAubXVsdGlzZWxlY3RfX3NwaW5uZXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgbG9hZGluZyBzcGlubmVyXG4gICAgICAgIGJvcmRlci13aWR0aDogM3B4XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci1hY3RpdmVcbiAgICAgICAgaW5zZXQ6IDBcbiAgICAgICAgbWFyZ2luOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3RfX29wdGlvblxuICAgICAgbWluLWhlaWdodDogdW5zZXRcbiAgICAgIGhlaWdodDogdW5zZXRcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgJjo6YWZ0ZXJcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdGV4dCBmb3Igb3B0aW9uc1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZ1xuICAgICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrXG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZVxuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudFxuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlXG4gICAgLm11bHRpc2VsZWN0X19vcHRpb24tLWRpc2FibGVkXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkXG5cbiAgICAubXVsdGlzZWxlY3RfX3RhZy1pY29uXG4gICAgICBiYWNrZ3JvdW5kOiBub25lXG4gICAgICBib3JkZXItcmFkaXVzOiAxZW1cbiAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0XG4gICAgICBsaW5lLWhlaWdodDogMS40ZW1cbiAgICAgIHdpZHRoOiAkdGFnLWljb24td2lkdGhcbiAgICAgICY6OmFmdGVyXG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuICAgICAgICBmb250LXNpemU6IDEuM2VtXG4gICAgICAmOmhvdmVyOjphZnRlclxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHRcblxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1zZWxlY3RlZFxuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodFxuICAgICAgY29sb3I6ICRjb2xvci10ZXh0XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsXG4gICAgICAmLm11bHRpc2VsZWN0X19vcHRpb24tLWhpZ2hsaWdodFxuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWRcblxuICAgIC5tdWx0aXNlbGVjdF9fdGFnLFxuICAgIC5tdWx0aXNlbGVjdF9fb3B0aW9uLS1oaWdobGlnaHRcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmVcbiAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZFxuXG4gICAgLm11bHRpc2VsZWN0X190YWdzLFxuICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGVcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG5cbiAgICAmLmRpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlXG4gICAgICAtLWlucHV0LXdpZHRoOiAxMDAlXG4gICAgJi5kaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlXG4gICAgICAtLWlucHV0LXdpZHRoOiBhdXRvXG5cbiAgICAubXVsdGlzZWxlY3QtLWFjdGl2ZVxuICAgICAgLm11bHRpc2VsZWN0X19zaW5nbGUsXG4gICAgICAubXVsdGlzZWxlY3RfX2lucHV0XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnRcblxuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZVxuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlXG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXItY29sb3JcbiAgICAgICAgbWFyZ2luOiAtMXB4IDAgMFxuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAgICYubXVsdGlzZWxlY3QtLWFib3ZlXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fdGFnc1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwXG4gICAgICAgIC5tdWx0aXNlbGVjdF9fY29udGVudC13cmFwcGVyXG4gICAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmVcbiAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyLWNvbG9yXG4gICAgICAgICAgbWFyZ2luOiAwIDAgLTFweFxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzXG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMFxuICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwXG5cbiAgICAmLmRpdG8taGFzLWVycm9yc1xuICAgICAgLm11bHRpc2VsZWN0X190YWdzXG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWVycm9yXG5cbiAgICAuZGl0by1idXR0b24tY2xlYXJcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5pbXBvcnQgVnVlTXVsdGlzZWxlY3QgZnJvbSAndnVlLW11bHRpc2VsZWN0J1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0Lm1pbi5jc3MnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtdWx0aXNlbGVjdCcsIHtcbiAgY29tcG9uZW50czogeyBWdWVNdWx0aXNlbGVjdCB9LFxuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlYXJjaGVkT3B0aW9uczogbnVsbCxcbiAgICAgIHBvcHVsYXRlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgIC8vIElmIGFuIG9wdGlvbiBjYW5ub3QgYmUgZm91bmQsIHdlIG1heSBiZSBpbiB0YWdnYWJsZSBtb2RlIGFuZFxuICAgICAgICAgICAgICAvLyBjYW4gYWRkIGl0LlxuICAgICAgICAgICAgICB2YWx1ZSA9PiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB8fCB0aGlzLmFkZFRhZ09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgb3B0aW9ucyB0aGF0IHdlIGNvdWxkbid0IG1hdGNoLlxuICAgICAgICAgICAgLy8gVE9ETzogV2UgcmVhbGx5IHNob3VsZCBkaXNwbGF5IGFuIGVycm9yIGluc3RlYWRcbiAgICAgICAgICAgIC5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICAgICAgOiB0aGlzLnNlbGVjdGVkT3B0aW9uXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gb3B0aW9ucyBvYmplY3QsIHNpbmNlIHZ1ZS1tdWx0aXNlbGVjdCBjYW4ndCBtYXAgdGhhdFxuICAgICAgICAvLyBpdHNlbGYgdW5mb3J0dW5hdGVseS4gYHRyYWNrLWJ5YCBpcyB1c2VkIGZvciA6a2V5IG1hcHBpbmcgaXQgc2VlbXMuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/IChvcHRpb24gfHwgW10pLm1hcCh2YWx1ZSA9PiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKSlcbiAgICAgICAgICA6IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoZWRPcHRpb25zIHx8IHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzZWFyY2hhYmxlOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgdGFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCd0YWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc3RheU9wZW46IGdldFNjaGVtYUFjY2Vzc29yKCdzdGF5T3BlbicsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcGxhY2Vob2xkZXIoKSB7XG4gICAgICBjb25zdCB7IHBsYWNlaG9sZGVyLCBzZWFyY2hhYmxlLCB0YWdnYWJsZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBwbGFjZWhvbGRlciB8fCAoXG4gICAgICAgIHNlYXJjaGFibGUgJiYgdGFnZ2FibGUgPyAnU2VhcmNoIG9yIGFkZCBhIHRhZydcbiAgICAgICAgOiBzZWFyY2hhYmxlID8gJ1NlbGVjdCBvciBzZWFyY2ggZW50cnknXG4gICAgICAgIDogdW5kZWZpbmVkXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICAvLyB2dWUtbXVsdGlzZWxlY3QgZG9lc24ndCBzdXBwb3J0IHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlLiBXZSBuZWVkIHRvXG4gICAgICAvLyBoYW5kbGUgaXQgaGVyZS5cbiAgICAgIHRoaXMuZm9jdXMoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gQG92ZXJyaWRlXG4gICAgZ2V0TGlzdGVuZXJzKCkge1xuICAgICAgLy8gb3ZlcnJpZGUgYFR5cGVNaXhpbi5nZXRMaXN0ZW5lcnMoKWAgdG8gcmUtcm91dGUgJ2lucHV0JyB0byBgb25DaGFuZ2UoKWBcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgIGJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgICBpbnB1dDogdGhpcy5vbkNoYW5nZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhZGRUYWdPcHRpb24odGFnKSB7XG4gICAgICBpZiAodGhpcy50YWdnYWJsZSkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbkxhYmVsLCBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25MYWJlbCAmJiBvcHRpb25WYWx1ZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgW29wdGlvbkxhYmVsXTogdGFnLFxuICAgICAgICAgICAgLy8gVE9ETzogRGVmaW5lIGEgc2ltcGxlIHNjaGVtYSBvcHRpb24gdG8gY29udmVydCB0aGUgdGFnIHZhbHVlIHRvXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgZWxzZSwgZS5nLiBgdG9UYWc6IHRhZyA9PiB1bmRlcnNjb3JlKHRhZylgXG4gICAgICAgICAgICBbb3B0aW9uVmFsdWVdOiB0YWdcbiAgICAgICAgICB9XG4gICAgICAgICAgOiB0YWdcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5hY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIG9uQWRkVGFnKHRhZykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5hZGRUYWdPcHRpb24odGFnKVxuICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2godGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblNlYXJjaENoYW5nZShxdWVyeSkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRmlsdGVyKSB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIC8vIFNldCBgc2VhcmNoZWRPcHRpb25zYCB0byBhbiBlbXB0eSBhcnJheSwgYmVmb3JlIGl0IHdpbGwgYmVcbiAgICAgICAgICAvLyBwb3B1bGF0ZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgYWN0dWFsIHJlc3VsdHMuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBbXVxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gYXdhaXQgdGhpcy5yZXNvbHZlRGF0YShcbiAgICAgICAgICAgICgpID0+IHRoaXMuc2VhcmNoRmlsdGVyKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHF1ZXJ5IH0pKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDbGVhciBgc2VhcmNoZWRPcHRpb25zYCB3aGVuIHRoZSBxdWVyeSBpcyBjbGVhcmVkLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gbnVsbCA/IHRoaXMudmFsdWUgOiAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZSAhPT0gJydcbiAgICAgICAgICA/IHRoaXMuaXNJbnRlZ2VyID8gcGFyc2VJbnQodmFsdWUsIDEwKSA6IHBhcnNlRmxvYXQodmFsdWUpXG4gICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzdGVwVmFsdWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGVwID09IG51bGwgJiYgIXRoaXMuaXNJbnRlZ2VyID8gJ2FueScgOiB0aGlzLnN0ZXBcbiAgICB9LFxuXG4gICAgZGVjaW1hbHM6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWNpbWFscycsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgc3RlcDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0ZXAnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQoc3RlcCkge1xuICAgICAgICAvLyBGb3IgaW50ZWdlcnMsIHJvdW5kIHRoZSBzdGVwcyB0byB0aGUgbmV4dCBiaWdnZXIgaW50ZWdlciB2YWx1ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIHN0ZXAgIT0gbnVsbCA/IE1hdGguY2VpbChzdGVwKSA6IHN0ZXBcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1pbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ21pbicsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtaW4pIHtcbiAgICAgICAgbWluID0gbWluID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzBdXG4gICAgICAgICAgOiBtaW5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1pbiAhPSBudWxsID8gTWF0aC5mbG9vcihtaW4pIDogbWluXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXgnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWF4KSB7XG4gICAgICAgIG1heCA9IG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlsxXVxuICAgICAgICAgIDogbWF4XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtYXggIT0gbnVsbCA/IE1hdGguY2VpbChtYXgpIDogbWF4XG4gICAgICB9XG4gICAgfSksXG5cbiAgICByYW5nZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JhbmdlJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIGB0aGlzLm1pbmAsIGB0aGlzLm1heGAgYWxyZWFkeSBzdXBwb3J0IGBzY2hlbWEucmFuZ2VgLFxuICAgICAgICAvLyBzbyByZWRpcmVjdCB0aGVyZS5cbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gbWluICE9IG51bGwgJiYgbWF4ICE9IG51bGwgPyBbbWluLCBtYXhdIDogdW5kZWZpbmVkXG4gICAgICB9LFxuXG4gICAgICBzZXQocmFuZ2UpIHtcbiAgICAgICAgLy8gUHJvdmlkZSBhIHNldHRlciB0aGF0IGRlbGVnYXRlcyB0byBgW3RoaXMubWluLCB0aGlzLm1heF1gLFxuICAgICAgICAvLyBzaW5jZSB0aG9zZSBhbHJlYWR5IGhhbmRsZSBgc2NoZW1hLnJhbmdlYC5cbiAgICAgICAgaWYgKGlzQXJyYXkocmFuZ2UpKSB7XG4gICAgICAgICAgW3RoaXMubWluLCB0aGlzLm1heF0gPSByYW5nZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHt9XG4gICAgICBjb25zdCB7IHJhbmdlLCBtaW4sIG1heCwgZGVjaW1hbHMsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yYW5nZSA9IHJhbmdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWluICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5taW4gPSBtaW5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5tYXggPSBtYXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlY2ltYWxzICE9IG51bGwpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgfSBlbHNlIGlmIChzdGVwKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxzID0gKGAke3N0ZXB9YC5zcGxpdCgnLicpWzFdIHx8ICcnKS5sZW5ndGhcbiAgICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0ludGVnZXIpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH1cbiAgfVxufVxuIiwiXG5pbnB1dC1maWVsZC5kaXRvLW51bWJlcihcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgdHlwZT1cIm51bWJlclwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuICA6bWluPVwibWluXCJcbiAgOm1heD1cIm1heFwiXG4gIDpzdGVwPVwic3RlcFZhbHVlXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLy8gT25seSBzaG93IHNwaW4gYnV0dG9ucyBpZiB0aGUgbnVtYmVyIGNvbXBvbmVudCBkZWZpbmVzIGEgc3RlcCBzaXplLlxuICBpbnB1dFt0eXBlPVwibnVtYmVyXCJdOm5vdChbc3RlcF0pXG4gICAgJjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uXG4gICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmVcbiAgICAgIG1hcmdpbjogMFxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWknXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAnbnVtYmVyJywgJ2ludGVnZXInXG5dLFxuLy8gQHZ1ZS9jb21wb25lbnRcbntcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdpbnRlZ2VyJ1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLyBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgIGRpdG8tc2NoZW1hLWlubGluZWQoXG4gICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgIClcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWVsc2UtaWY9XCJjb21wb25lbnRcIlxuICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgIClcbiAgZGl0by1lZGl0LWJ1dHRvbnMoXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICA6ZWRpdGFibGU9XCJvYmplY3REYXRhICYmIGVkaXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgOnBhdGg9XCJwYXRoXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gIClcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLW9iamVjdChcbiAgICB2LWlmPVwiaXNSZWFkeVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gICAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbiAgKVxuICAgIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICAgIClcbiAgICAgIC8vIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgICBkaXRvLXNjaGVtYS1pbmxpbmVkKFxuICAgICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgIClcbiAgICAgIGNvbXBvbmVudChcbiAgICAgICAgdi1lbHNlLWlmPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmlzPVwiY29tcG9uZW50XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgICAgKVxuICAgICAgc3BhbihcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICAgIClcbiAgICBkaXRvLWVkaXQtYnV0dG9ucyhcbiAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgIDplZGl0UGF0aD1cInBhdGhcIlxuICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpwYXRoPVwicGF0aFwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1vYmplY3RcbiAgICBkaXNwbGF5OiBmbGV4XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlXG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICBtYXJnaW46IDBcbiAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nXG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveFxuICAgIC5kaXRvLW9iamVjdC1jb250ZW50XG4gICAgICBmbGV4OiAwIDEgMTAwJVxuICAgID4gLmRpdG8tYnV0dG9uc1xuICAgICAgZmxleDogMSAwIDAlXG4gICAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignb2JqZWN0Jywge1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGRhdGE6IHRoaXMub2JqZWN0RGF0YSB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwYW5lbCcsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRQYWRkaW5nOiB0cnVlLFxuXG4gIGdldFBhbmVsU2NoZW1hKHNjaGVtYSkge1xuICAgIC8vIEZvciBhIFR5cGVQYW5lbCwgdGhlIGNvbXBvbmVudCBzY2hlbWEgaXMgYWxzbyB0aGUgcGFuZWwgc2NoZW1hLCBidXRcbiAgICAvLyByZW1vdmUgdGhlIGFkZGVkIG5hbWUsIHNvIGl0IGRvZXNuJ3QgZ2V0IGFwcGVuZGVkIHR3aWNlIHRvIGRhdGEtcGF0aC5cbiAgICBjb25zdCB7IG5hbWUsIC4uLnBhbmVsIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gcGFuZWxcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG5wcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgOm1heD1cInByb2dyZXNzTWF4XCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gICAgOm1heD1cInByb2dyZXNzTWF4XCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncHJvZ3Jlc3MnLCB7XG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm9ncmVzc1ZhbHVlKCkge1xuICAgICAgbGV0IHsgdmFsdWUsIHJhbmdlLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgdmFsdWUgLT0gcmFuZ2VbMF1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHN0ZXApICogc3RlcFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICcnXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgcHJvZ3Jlc3NNYXgoKSB7XG4gICAgICBjb25zdCB7IHJhbmdlIH0gPSB0aGlzXG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgcmV0dXJuIHJhbmdlWzFdIC0gcmFuZ2VbMF1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxudWwuZGl0by1yYWRpby1idXR0b25zKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkodi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiKVxuICAgIGxhYmVsXG4gICAgICBpbnB1dC5kaXRvLXJhZGlvLWJ1dHRvbihcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdWwuZGl0by1yYWRpby1idXR0b25zKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4gIClcbiAgICBsaSh2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCIpXG4gICAgICBsYWJlbFxuICAgICAgICBpbnB1dC5kaXRvLXJhZGlvLWJ1dHRvbihcbiAgICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgICAgKVxuICAgICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1yYWRpby1idXR0b25zXG4gICAgbGFiZWxcbiAgICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3NcbiAgICAuZGl0by1yYWRpby1idXR0b25cbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZ1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdyYWRpbycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuIiwiXG4uZGl0by1zZWN0aW9uKFxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tbGFiZWxsZWQnIDogISFzY2hlbWEubGFiZWwgfVwiXG4pXG4gIGRpdG8tcGFuZS5kaXRvLXNlY3Rpb24tcGFuZShcbiAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zZWN0aW9uKFxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VjdGlvbi1sYWJlbGxlZCcgOiAhIXNjaGVtYS5sYWJlbCB9XCJcbiAgKVxuICAgIGRpdG8tcGFuZS5kaXRvLXNlY3Rpb24tcGFuZShcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by1zZWN0aW9uXG4gICAgJi5kaXRvLXNlY3Rpb24tbGFiZWxsZWRcbiAgICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZVxuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXNcbiAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmdcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3hcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbUZvcm1TY2hlbWEsIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VjdGlvbicsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICFzY2hlbWEubmVzdGVkICYmICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG4gIGRlZmF1bHROZXN0ZWQ6IGZhbHNlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgb21pdEZsZXhHcm93OiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMudmFsdWUgOiB0aGlzLmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hXG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICAgIC8vIFByb2Nlc3Mgc2VjdGlvbiBjb21wb25lbnRzIHNvIHRoZWlyIGZvcm1zIGdldCByZXNvbHZlZCB0b28uXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIHNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgKVxuICAgICAgICBvcHRncm91cChcbiAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICApXG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICApXG4gICAgICBvcHRpb24oXG4gICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuICAuZGl0by1zZWxlY3RcbiAgICBzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICAgIClcbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC8vIFRPRE86IE1vdmUgdG8gZGl0by11aVxuICAkc2VsZWN0LWFycm93LXJpZ2h0OiBjYWxjKCgkc2VsZWN0LWFycm93LXdpZHRoIC0gJHNlbGVjdC1hcnJvdy1zaXplKSAvIDIpXG5cbiAgLmRpdG8tc2VsZWN0XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrXG4gICAgcG9zaXRpb246IHJlbGF0aXZlXG5cbiAgICBzZWxlY3RcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICRzZWxlY3QtYXJyb3ctd2lkdGhcblxuICAgIC8vIEhhbmRsZSAuZGl0by13aWR0aC1maWxsIHNlcGFyYXRlbHkgZHVlIHRvIHJlcXVpcmVkIG5lc3Rpbmcgb2Ygc2VsZWN0OlxuICAgICYuZGl0by13aWR0aC1maWxsXG4gICAgICBzZWxlY3RcbiAgICAgICAgd2lkdGg6IDEwMCVcblxuICAgICY6OmFmdGVyXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICthcnJvdygkc2VsZWN0LWFycm93LXNpemUpXG4gICAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tXG4gICAgICByaWdodDogY2FsYygjeyRzZWxlY3QtYXJyb3ctcmlnaHR9ICsgI3skYm9yZGVyLXdpZHRofSlcblxuICAgICYuZGl0by1kaXNhYmxlZDo6YWZ0ZXJcbiAgICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gRGlzYWJsZSBsYXp5LXBvcHVsYXRpb24gZm9yIG5vdy5cbiAgICAgIC8vIFRPRE86IFNldCB0byBgZmFsc2VgIE9uY2UgbGluZXRvIGUyZSB0ZXN0cyBhZGRyZXNzIHRoZWlyIGlzc3Vlcy5cbiAgICAgIHBvcHVsYXRlOiB0cnVlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXNsaWRlclxuICBpbnB1dC5kaXRvLXJhbmdlKFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB0eXBlPVwicmFuZ2VcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbiAgaW5wdXQtZmllbGQuZGl0by1udW1iZXIoXG4gICAgdi1pZj1cImlucHV0XCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgdi1vbj1cImxpc3RlbmVyc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuICAuZGl0by1zbGlkZXJcbiAgICBpbnB1dC5kaXRvLXJhbmdlKFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICB0eXBlPVwicmFuZ2VcIlxuICAgICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDptaW49XCJtaW5cIlxuICAgICAgOm1heD1cIm1heFwiXG4gICAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gICAgKVxuICAgIGlucHV0LWZpZWxkLmRpdG8tbnVtYmVyKFxuICAgICAgdi1pZj1cImlucHV0XCJcbiAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgICAgIDptaW49XCJtaW5cIlxuICAgICAgOm1heD1cIm1heFwiXG4gICAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXNsaWRlclxuICAgIEBleHRlbmQgJWlucHV0XG4gICAgZGlzcGxheTogZmxleFxuICAgIC5kaXRvLXJhbmdlXG4gICAgICBmbGV4OiBhdXRvXG4gICAgICBoZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpKVxuICAgIC5kaXRvLW51bWJlclxuICAgICAgYm9yZGVyOiAwXG4gICAgICBwYWRkaW5nOiAwXG4gICAgICB0ZXh0LWFsaWduOiByaWdodFxuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtc1xuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIGlucHV0OiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuc3dpdGNoLWJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOnN5bmM9XCJ0cnVlXCJcbiAgOmxhYmVscz1cImxhYmVsc1wiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbilcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIHN3aXRjaC1idXR0b24uZGl0by1zd2l0Y2goXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIDpzeW5jPVwidHJ1ZVwiXG4gICAgOmxhYmVscz1cImxhYmVsc1wiXG4gICAgdi1tb2RlbD1cInZhbHVlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXN3aXRjaFxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbFxuICAgICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsXG48L3N0eWxlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFN3aXRjaEJ1dHRvbiB9IGZyb20gJ0BkaXRvanMvdWknXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIlxuaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICByZWY9XCJlbGVtZW50XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIHYtb249XCJsaXN0ZW5lcnNcIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgaW5wdXQtZmllbGQuZGl0by10ZXh0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICA6dHlwZT1cImlucHV0VHlwZVwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFR5cGVDb21wb25lbnQgZnJvbSAnLi4vVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpJ1xuXG5jb25zdCBtYXNrZWRQYXNzd29yZCA9ICcqKioqKioqKioqKioqKioqJ1xuXG5leHBvcnQgZGVmYXVsdCBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFtcbiAgJ3RleHQnLCAnZW1haWwnLCAndXJsJywgJ2hvc3RuYW1lJywgJ2RvbWFpbicsICd0ZWwnLCAncGFzc3dvcmQnLCAnY3JlZGl0Y2FyZCdcbl0sXG4vLyBAdnVlL2NvbXBvbmVudFxue1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIHRleHRGaWVsZDogdHJ1ZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gc2NoZW1hLnR5cGUgPT09ICdwYXNzd29yZCcsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFR5cGUoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjcmVkaXRjYXJkOiAndGV4dCcsXG4gICAgICAgIGhvc3RuYW1lOiAndGV4dCcsXG4gICAgICAgIGRvbWFpbjogJ3RleHQnXG4gICAgICB9W3RoaXMudHlwZV0gfHwgdGhpcy50eXBlXG4gICAgfSxcblxuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0aGlzLnR5cGUgPT09ICdwYXNzd29yZCcgJiZcbiAgICAgICAgICB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAhdGhpcy5mb2N1c2VkXG4gICAgICAgIClcbiAgICAgICAgICA/IG1hc2tlZFBhc3N3b3JkXG4gICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgIGVtYWlsOiAnZW1haWwnLFxuICAgICAgICB1cmw6ICd1cmwnLFxuICAgICAgICBob3N0bmFtZTogJ2hvc3RuYW1lJyxcbiAgICAgICAgZG9tYWluOiAnZG9tYWluJyxcbiAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZCcsXG4gICAgICAgIGNyZWRpdGNhcmQ6ICdjcmVkaXRjYXJkJ1xuICAgICAgfVt0aGlzLnR5cGVdXG4gICAgICByZXR1cm4gcnVsZSA/IHsgW3J1bGVdOiB0cnVlIH0gOiB7fVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiXG50ZXh0YXJlYS5kaXRvLXRleHRhcmVhLmRpdG8taW5wdXQoXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICB2LW9uPVwibGlzdGVuZXJzXCJcbiAgOnJvd3M9XCJsaW5lc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgdGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIHYtb249XCJsaXN0ZW5lcnNcIlxuICAgIDpyb3dzPVwibGluZXNcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuICApXG48L3RlbXBsYXRlPlxuXG48c3R5bGUgbGFuZz1cInNhc3NcIj5cbiAgLmRpdG8tdGV4dGFyZWFcbiAgICBkaXNwbGF5OiBibG9ja1xuICAgIHJlc2l6ZTogbm9uZVxuICAgIG1pbi1oZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpICsgI3sgMiAqICRpbnB1dC1wYWRkaW5nLXZlciB9KVxuICAgICYuZGl0by1yZXNpemFibGVcbiAgICAgIHJlc2l6ZTogdmVydGljYWxcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3RleHRhcmVhJywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgNFxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJcbi5kaXRvLXRyZWUtbGlzdFxuICBkaXRvLXNjb3BlcyhcbiAgICB2LWlmPVwic2NvcGVzXCJcbiAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gIClcbiAgLmRpdG8tdHJlZS1wYW5lbFxuICAgIGRpdG8tdHJlZS1pdGVtKFxuICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6b3Blbj1cInRydWVcIlxuICAgIClcbiAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgIClcbiAgICAgIC8vIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgcm91dGVyLXZpZXdcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4gIC5kaXRvLXRyZWUtbGlzdFxuICAgIGRpdG8tc2NvcGVzKFxuICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1wYW5lbFxuICAgICAgZGl0by10cmVlLWl0ZW0oXG4gICAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICA6b3Blbj1cInRydWVcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgICAgKVxuICAgICAgICAvLyBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgICAgcm91dGVyLXZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBsYW5nPVwic2Fzc1wiPlxuICAuZGl0by10cmVlLWxpc3RcbiAgICBAZXh0ZW5kICVmaWVsZFxuICAgIC5kaXRvLXRyZWUtcGFuZWxcbiAgICAgIGRpc3BsYXk6IGZsZXhcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlblxuICAgICAgPiAuZGl0by10cmVlLWl0ZW1cbiAgICAgICAgZmxleDogMSAxIDI1JVxuICAgICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyXG4gICAgICAgIGZsZXg6IDAgMSA3NSVcbiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaFxuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kXG4gICAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlXG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDFcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMVxuICAgICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcilcbiAgICAgICAgbWFyZ2luLWxlZnQ6ICRpbnB1dC1wYWRkaW5nLWhvclxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBUeXBlQ29tcG9uZW50IGZyb20gJy4uL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgaGFzRm9ybVNjaGVtYSwgZ2V0Rm9ybVNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoW1xuICAndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J1xuXSxcbi8vIEB2dWUvY29tcG9uZW50XG57XG4gIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gIH0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGF0aCgpIHtcbiAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICB9LFxuXG4gICAgZWRpdFBhdGgoKSB7XG4gICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgfSxcblxuICAgIHRyZWVEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgIDogdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWVkXG4gICAgICAvLyB0byBgdHJlZURhdGFgIGFuZCBgdHJlZVNjaGVtYWBcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICA6IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICA/IHtcbiAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgOiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgaGFzRWRpdGFibGVGb3JtcyA9IHNjaGVtYSA9PiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2VkaXRhYmxlJywge1xuICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgc2NoZW1hXG4gICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICBoYXNFZGl0YWJsZUZvcm1zKHNjaGVtYS5jaGlsZHJlbilcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgIG5lc3RlZCA9IHRydWUsIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsLFxuICAgICAgbmVzdGVkLCBmbGF0dGVuLFxuICAgICAgLy8gUGFzcyBwcm9jZXNzKCkgdG8gYWRkIG1vcmUgcm91dGVzIHRvIGNoaWxkUm91dGVzOlxuICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgYXBpLCBjaGlsZHJlbiwgY2hpbGRyZW4ubmFtZSwgY2hpbGRSb3V0ZXMsIGxldmVsLFxuICAgICAgICAgICAgbmVzdGVkLCB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9LFxuXG4gIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAvLyBwcmVzZW50IGluIGVhY2ggb2YgdGhlIGZvcm1zLCBhcyByZXF1aXJlZCBieSBgcHJvY2Vzc1NjaGVtYURhdGEoKWBcbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBjaGlsZHJlblxuICAgICAgPyBmb3JtID0+ICh7XG4gICAgICAgIC4uLmZvcm0sXG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAuLi5mb3JtLmNvbXBvbmVudHMsXG4gICAgICAgICAgW2NoaWxkcmVuLm5hbWVdOiBjaGlsZHJlblxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgOiBudWxsXG4gICAgKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgZmlsZXNpemUgZnJvbSAnZmlsZXNpemUnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XG4gIHJldHVybiBmaWxlc2l6ZShzaXplLCB7IGJhc2U6IDEwIH0pXG59XG4iLCJcbi5kaXRvLXVwbG9hZFxuICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIERpdG9UYWJsZUhlYWRcbiAgICB0aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgICAgIHRyXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBOYW1lXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTaXplXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhbiBTdGF0dXNcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuXG4gICAgdnVlLWRyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIHYtYmluZD1cImdldERyYWdPcHRpb25zKGRyYWdnYWJsZSlcIlxuICAgICAgOmxpc3Q9XCJmaWxlc1wiXG4gICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICBAZW5kPVwib25FbmREcmFnXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgOmtleT1cImZpbGUua2V5XCJcbiAgICAgIClcbiAgICAgICAgdGQodi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIilcbiAgICAgICAgdGQge3sgZmlsZS5zaXplIHwgZm9ybWF0RmlsZVNpemUgfX1cbiAgICAgICAgdGRcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWRcIilcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiKVxuICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCIpXG4gICAgICAgICAgICAgIHwgVXBsb2FkaW5nLi4uXG4gICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCIpXG4gICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UpXG4gICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgKVxuICAgIHRmb290XG4gICAgICB0clxuICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiaXNVcGxvYWRSZWFkeVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICkgVXBsb2FkIEFsbFxuICAgICAgICAgICAgICB2dWUtdXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgOmlucHV0LWlkPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICA6cG9zdC1hY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsdGVyPVwiaW5wdXRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIEBpbnB1dC1maWxlPVwiaW5wdXRGaWxlXCJcbiAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiVXBsb2FkIEZpbGVzXCJcbiAgICAgICAgICAgICAgKVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbiAgLmRpdG8tdXBsb2FkXG4gICAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIERpdG9UYWJsZUhlYWRcbiAgICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgICB0clxuICAgICAgICAgIHRoXG4gICAgICAgICAgICBzcGFuIE5hbWVcbiAgICAgICAgICB0aFxuICAgICAgICAgICAgc3BhbiBTaXplXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgICAgdGhcbiAgICAgICAgICAgIHNwYW5cbiAgICAgIHZ1ZS1kcmFnZ2FibGUoXG4gICAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0RHJhZ09wdGlvbnMoZHJhZ2dhYmxlKVwiXG4gICAgICAgIDpsaXN0PVwiZmlsZXNcIlxuICAgICAgICBAc3RhcnQ9XCJvblN0YXJ0RHJhZ1wiXG4gICAgICAgIEBlbmQ9XCJvbkVuZERyYWdcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICAgIDprZXk9XCJmaWxlLmtleVwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZCh2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiKVxuICAgICAgICAgIHRkIHt7IGZpbGUuc2l6ZSB8IGZvcm1hdEZpbGVTaXplIH19XG4gICAgICAgICAgdGRcbiAgICAgICAgICAgIHRlbXBsYXRlKHYtaWY9XCJmaWxlLnVwbG9hZFwiKVxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWlmPVwiZmlsZS51cGxvYWQuZXJyb3JcIilcbiAgICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIilcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgICB0ZW1wbGF0ZSh2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCIpXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgICAgdGVtcGxhdGUodi1lbHNlKVxuICAgICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnNcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgICApXG4gICAgICB0Zm9vdFxuICAgICAgICB0clxuICAgICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKSBDYW5jZWwgQWxsXG4gICAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiaXNVcGxvYWRSZWFkeVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICAgICkgVXBsb2FkIEFsbFxuICAgICAgICAgICAgICAgIHZ1ZS11cGxvYWQuZGl0by1idXR0b24uZGl0by1idXR0b24tYWRkLXVwbG9hZChcbiAgICAgICAgICAgICAgICAgIDppbnB1dC1pZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgOnBvc3QtYWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgICAgICAgICAgICAgICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgIEBpbnB1dC1maWxlPVwiaW5wdXRGaWxlXCJcbiAgICAgICAgICAgICAgICAgIHJlZj1cInVwbG9hZFwiXG4gICAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHN0eWxlIGxhbmc9XCJzYXNzXCI+XG4gIC5kaXRvLXVwbG9hZFxuICAgIC5kaXRvLXRhYmxlXG4gICAgICB0clxuICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlXG4gICAgLmRpdG8tYnV0dG9uLWFkZC11cGxvYWRcbiAgICAgIHBhZGRpbmc6IDBcbiAgICAgID4gKlxuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGVcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyXG4gICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgZGlzcGxheTogZmxleFxuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZFxuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlclxuICAgICAgLmRpdG8tcHJvZ3Jlc3NcbiAgICAgICAgZmxleDogYXV0b1xuICAgICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmdcbjwvc3R5bGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuLi9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IE9yZGVyZWRNaXhpbiBmcm9tICcuLi9taXhpbnMvT3JkZXJlZE1peGluLmpzJ1xuaW1wb3J0IFZ1ZVVwbG9hZCBmcm9tICd2dWUtdXBsb2FkLWNvbXBvbmVudCdcbmltcG9ydCBWdWVEcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuaW1wb3J0IHBhcnNlRmlsZVNpemUgZnJvbSAnZmlsZXNpemUtcGFyc2VyJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vdXRpbHMvdW5pdHMuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IFR5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3VwbG9hZCcsIHtcbiAgY29tcG9uZW50czogeyBWdWVVcGxvYWQsIFZ1ZURyYWdnYWJsZSB9LFxuICBmaWx0ZXJzOiB7IGZvcm1hdEZpbGVTaXplIH0sXG4gIG1peGluczogW09yZGVyZWRNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy51cGxvYWRcbiAgICB9LFxuXG4gICAgZmlsZXMoKSB7XG4gICAgICByZXR1cm4gYXNGaWxlcyh0aGlzLnZhbHVlKVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gTm8gY2FsbGJhY2sgYXMgaXQncyB1c2VkIGluIGBwcm9jZXNzVmFsdWUoKWBcbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZXh0ZW5zaW9uczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4dGVuc2lvbnMnLCB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgUmVnRXhwXVxuICAgIH0pLFxuXG4gICAgYWNjZXB0OiBnZXRTY2hlbWFBY2Nlc3NvcignYWNjZXB0Jywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoYWNjZXB0KSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KGFjY2VwdCkgPyBhY2NlcHQuam9pbignLCcpIDogYWNjZXB0XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhTaXplOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4U2l6ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBnZXQobWF4U2l6ZSkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZSA/IHBhcnNlRmlsZVNpemUobWF4U2l6ZSkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGRyYWdnYWJsZSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgaXNVcGxvYWRSZWFkeSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmXG4gICAgICAgICEodGhpcy51cGxvYWQuYWN0aXZlIHx8IHRoaXMudXBsb2FkLnVwbG9hZGVkKVxuICAgIH0sXG5cbiAgICBpc1VwbG9hZEFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmIHRoaXMudXBsb2FkLmFjdGl2ZVxuICAgIH0sXG5cbiAgICB1cGxvYWRQcm9ncmVzcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5yZWR1Y2UoKHRvdGFsLCBmaWxlKSA9PiB0b3RhbCArIGZpbGUucHJvZ3Jlc3MsIDApIC9cbiAgICAgICAgdGhpcy51cGxvYWRzLmxlbmd0aFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB1cGxvYWRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VVcmwoe1xuICAgICAgICB0eXBlOiAndXBsb2FkJyxcbiAgICAgICAgcGF0aDogdGhpcy5hcGkubm9ybWFsaXplUGF0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgcmVuZGVyIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIHJlbmRlclxuICAgICAgICA/IHJlbmRlci5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWxlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlcyxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKGZpbGUubmFtZSlcbiAgICB9LFxuXG4gICAgZGVsZXRlRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBmaWxlXG5cbiAgICAgIGlmIChmaWxlICYmIHdpbmRvdy5jb25maXJtKFxuICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5yZW1vdmV9ICR7bmFtZX0/YClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUudXBsb2FkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWQucmVtb3ZlKGZpbGUudXBsb2FkKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IGAke25hbWV9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGaWxlSW5kZXgoZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZVxuICAgICAgICA/IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ID0+IGl0LmlkID09PSBmaWxlLmlkKVxuICAgICAgICA6IC0xXG4gICAgfSxcblxuICAgIGFkZEZpbGUoZmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gW2ZpbGVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VGaWxlKGZpbGUsIG5ld0ZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGaWxlSW5kZXgoZmlsZSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdGhpcy4kc2V0KHRoaXMudmFsdWUsIGluZGV4LCBuZXdGaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdGaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUZpbGUoZmlsZSkge1xuICAgICAgdGhpcy5yZXBsYWNlRmlsZShmaWxlLCBudWxsKVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbGUobmV3RmlsZSwgb2xkRmlsZSkge1xuICAgICAgaWYgKG5ld0ZpbGUgJiYgIW9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBpZCwgbmFtZSwgc2l6ZSB9ID0gbmV3RmlsZVxuICAgICAgICB0aGlzLmFkZEZpbGUoeyBpZCwgbmFtZSwgc2l6ZSwgdXBsb2FkOiBuZXdGaWxlIH0pXG4gICAgICB9XG4gICAgICBpZiAobmV3RmlsZSAmJiBvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IG5ld0ZpbGVcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgICBjb25zdCBmaWxlID0gbmV3RmlsZS5yZXNwb25zZVswXVxuICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnVwbG9hZCA9IG5ld0ZpbGVcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIHVwbG9hZCBmaWxlIG9iamVjdCB3aXRoIHRoZSBmaWxlIG9iamVjdCByZWNlaXZlZFxuICAgICAgICAgICAgLy8gZnJvbSB0aGUgdXBsb2FkIHJlc3BvbnNlLlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlRmlsZShuZXdGaWxlLCBmaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0ge1xuICAgICAgICAgICAgYWJvcnQ6ICdVcGxvYWQgYWJvcnRlZCcsXG4gICAgICAgICAgICBkZW5pZWQ6ICdVcGxvYWQgZGVuaWVkJyxcbiAgICAgICAgICAgIGV4dGVuc2lvbjogYFVuc3VwcG9ydGVkIGZpbGUtdHlwZTogJHtuZXdGaWxlLm5hbWV9YCxcbiAgICAgICAgICAgIG5ldHdvcms6ICdOZXR3b3JrIGVycm9yIGVuY291bnRlcmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgc2VydmVyOiAnU2VydmVyIGVycm9yIG9jY3VycmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgc2l6ZTogYEZpbGUgaXMgdG9vIGxhcmdlOiAke2Zvcm1hdEZpbGVTaXplKG5ld0ZpbGUuc2l6ZSl9YCxcbiAgICAgICAgICAgIHRpbWVvdXQ6ICdUaW1lb3V0IG9jY3VycmVkIGR1cmluZyB1cGxvYWQnXG5cbiAgICAgICAgICB9W2Vycm9yXSB8fCBgVW5rbm93biBGaWxlIFVwbG9hZCBFcnJvcjogJyR7ZXJyb3J9J2BcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdGaWxlIFVwbG9hZCBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbHRlcihuZXdGaWxlLyosIG9sZEZpbGUsIHByZXZlbnQgKi8pIHtcbiAgICAgIGNvbnN0IHhociA9IG5ld0ZpbGU/LnhoclxuICAgICAgaWYgKHRoaXMuYXBpLmNvcnM/LmNyZWRlbnRpYWxzICYmIHhociAmJiAheGhyLndpdGhDcmVkZW50aWFscykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIC8vIEZpbHRlciBvdXQgYWxsIG5ld2x5IGFkZGVkIGZpbGVzIHRoYXQgd2VyZW4ndCBhY3R1YWxseSB1cGxvYWRlZC5cbiAgICBjb25zdCBmaWxlcyA9IGFzRmlsZXModmFsdWUpXG4gICAgICAubWFwKFxuICAgICAgICAoeyB1cGxvYWQsIC4uLmZpbGUgfSkgPT4gIXVwbG9hZCB8fCB1cGxvYWQuc3VjY2VzcyA/IGZpbGUgOiBudWxsXG4gICAgICApXG4gICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZSlcbiAgICByZXR1cm4gc2NoZW1hLm11bHRpcGxlID8gZmlsZXMgOiBmaWxlc1swXSB8fCBudWxsXG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzRmlsZXModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gYXNBcnJheSh2YWx1ZSkgOiBbXVxufVxuXG48L3NjcmlwdD5cbiIsImV4cG9ydCBkZWZhdWx0IFtcbiAgJ2NyZWF0ZScsICdjcmVhdGVkJyxcbiAgJ3NhdmUnLCAnc2F2ZWQnLFxuICAnc3VibWl0JywgJ3N1Ym1pdHRlZCcsXG4gICdkZWxldGUnLCAnZGVsZXRlZCcsXG4gICdlZGl0JywgJ2VkaXRlZCcsXG4gICdjbG9zZScsICdjbG9zZWQnLFxuICAnY2FuY2VsJywgJ2NhbmNlbGxlZCcsXG4gICdkcmFnJywgJ2RyYWdnZWQnXG5dLnJlZHVjZSgodmVyYnMsIHZlcmIpID0+IHtcbiAgdmVyYnNbdmVyYl0gPSB2ZXJiXG4gIHJldHVybiB2ZXJic1xufSwge30pXG4iLCJpbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBWdWVNb2RhbCBmcm9tICd2dWUtanMtbW9kYWwnXG5pbXBvcnQgVnVlUm91dGVyIGZyb20gJ3Z1ZS1yb3V0ZXInXG5pbXBvcnQgVnVlTm90aWZpY2F0aW9ucyBmcm9tICd2dWUtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsIGlzQWJzb2x1dGVVcmwsIG1lcmdlLCBoeXBoZW5hdGUsIGNhbWVsaXplLCBkZWZhdWx0Rm9ybWF0c1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgVHlwZUNvbXBvbmVudCBmcm9tICcuL1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgdmVyYnMgZnJvbSAnLi92ZXJicy5qcydcblxuVnVlLmNvbmZpZy5wcm9kdWN0aW9uVGlwID0gZmFsc2VcblxuLy8gQWxsIGdsb2JhbCBwbHVnaW5zIHRoYXQgbmVlZCB0byBiZSByZWdpc3RlcmVkIG9uIGBWdWVgOlxuVnVlLnVzZShWdWVSb3V0ZXIpXG5WdWUudXNlKFZ1ZU1vZGFsLCB7IGR5bmFtaWM6IHRydWUgfSlcblZ1ZS51c2UoVnVlTm90aWZpY2F0aW9ucylcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0FkbWluIHtcbiAgY29uc3RydWN0b3IoZWwsIHtcbiAgICAvLyBgZGl0b2AgY29udGFpbnMgdGhlIGJhc2UgYW5kIGFwaSBzZXR0aW5ncyBwYXNzZWQgZnJvbSBgQWRtaW5Db250cm9sbGVyYFxuICAgIGRpdG8gPSB7fSxcbiAgICBhcGksXG4gICAgdmlld3MgPSB7fSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIC8vIE1lcmdlIGluIGBhcGlgIHNldHRpbmdzIGFzIHBhc3NlZCBmcm9tIGBjb25maWcuYWRtaW5gIGFuZCB0aHJvdWdoIHRoZVxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgIHdpdGggYGFwaWAgdmFsdWVzIGZyb20gZnJvbSAnYWRtaW4vaW5kZXguanMnXG4gICAgLy8gTk9URTogYEFkbWluQ29udHJvbGxlcmAgcHJvdmlkZXMgYGRpdG8uYXBpLmJhc2VgXG4gICAgdGhpcy5hcGkgPSBhcGkgPSBtZXJnZSh7IGJhc2U6ICcvJyB9LCBkaXRvLmFwaSwgYXBpKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIC8vIFNldHVwIGRlZmF1bHQgYXBpIHNldHR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG5cbiAgICBhcGkuZm9ybWF0cyA9IG1lcmdlKHt9LCBkZWZhdWx0Rm9ybWF0cywgYXBpLmZvcm1hdHMpXG5cbiAgICBhcGkucmVxdWVzdCB8fD0gb3B0aW9ucyA9PiB0aGlzLnJlcXVlc3Qob3B0aW9ucylcblxuICAgIC8vIFNldHRpbmcgYGFwaS5ub3JtYWxpemVQYXRocyA9IHRydWUgKHBsdXJhbCkgc2V0cyBib3RoOlxuICAgIC8vIGBhcGkubm9ybWFsaXplUGF0aCA9IGh5cGhlbmF0ZWAgYW5kIGBhcGkuZGVub3JtYWxpemVQYXRoID0gY2FtZWxpemVgXG4gICAgYXBpLm5vcm1hbGl6ZVBhdGggPSAoXG4gICAgICBhcGkubm9ybWFsaXplUGF0aCB8fFxuICAgICAgYXBpLm5vcm1hbGl6ZVBhdGhzXG4gICAgICAgID8gaHlwaGVuYXRlXG4gICAgICAgIDogdmFsID0+IHZhbFxuICAgIClcbiAgICBhcGkuZGVub3JtYWxpemVQYXRoID0gKFxuICAgICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fFxuICAgICAgYXBpLm5vcm1hbGl6ZVBhdGhzXG4gICAgICAgID8gY2FtZWxpemVcbiAgICAgICAgOiB2YWwgPT4gdmFsXG4gICAgKVxuXG4gICAgLy8gQWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGF1dGggcmVzb3VyY2VzLCBsaWtlIHNvOlxuICAgIC8vIGFwaS51c2VycyA9IHtcbiAgICAvLyAgIHBhdGg6ICcvYWRtaW5zJyxcbiAgICAvLyAgIC8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdHM6XG4gICAgLy8gICBsb2dpbjoge1xuICAgIC8vICAgICBwYXRoOiAnbG9naW4nLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGxvZ291dDoge1xuICAgIC8vICAgICBwYXRoOiAnbG9nb3V0JyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzZXNzaW9uOiB7XG4gICAgLy8gICAgIHBhdGg6ICdzZXNzaW9uJyxcbiAgICAvLyAgICAgbWV0aG9kOiAnZ2V0J1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBjb25zdCB1c2VycyA9IGFwaS51c2VycyA9IGdldFJlc291cmNlKGFwaS51c2Vycywge1xuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nXG4gICAgfSkgfHwge31cbiAgICB1c2Vycy5sb2dpbiA9IGdldFJlc291cmNlKHVzZXJzLmxvZ2luIHx8ICdsb2dpbicsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMubG9nb3V0ID0gZ2V0UmVzb3VyY2UodXNlcnMubG9nb3V0IHx8ICdsb2dvdXQnLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLnNlc3Npb24gPSBnZXRSZXNvdXJjZSh1c2Vycy5zZXNzaW9uIHx8ICdzZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyBvZiByZXNvdXJjZSBwYXRoIGhhbmRsZXJzOlxuICAgIC8vIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgLy8gICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgLy8gICAgIHJldHVybiByZXNvdXJjZS5wYXJlbnRcbiAgICAvLyAgICAgICA/IGAke3Jlc291cmNlLnBhdGh9PyR7cmVzb3VyY2UucGFyZW50LnBhdGh9X2lkPSR7XG4gICAgLy8gICAgICAgICAgcmVzb3VyY2UucGFyZW50LmlkfWBcbiAgICAvLyAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkucmVzb3VyY2VzID0ge1xuICAgICAgYW55KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzW3Jlc291cmNlPy50eXBlXSB8fCB0aGlzLmRlZmF1bHRcbiAgICAgICAgcmV0dXJuIHJlc291cmNlICYmIGhhbmRsZXIuY2FsbCh0aGlzLCByZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIGRlZmF1bHQocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHRoaXMuYW55KHJlc291cmNlLnBhcmVudClcbiAgICAgICAgcmV0dXJuIHBhcmVudFBhdGhcbiAgICAgICAgICA/IGAke3BhcmVudFBhdGh9LyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgICB9LFxuXG4gICAgICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQocmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBtZW1iZXIocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gTk9URTogV2UgYXNzdW1lIHRoYXQgYWxsIG1lbWJlcnMgaGF2ZSByb290LWxldmVsIGNvbGxlY3Rpb24gcm91dGVzLFxuICAgICAgICAvLyB0byBhdm9pZCBleGNlc3NpdmUgbmVzdGluZyBvZiAoc3ViLSljb2xsZWN0aW9uIHJvdXRlcy5cbiAgICAgICAgcmV0dXJuIGAke3Jlc291cmNlLnBhdGh9LyR7cmVzb3VyY2UuaWR9YFxuICAgICAgfSxcblxuICAgICAgdXBsb2FkKHJlc291cmNlKSB7XG4gICAgICAgIC8vIERpdG8gU2VydmVyIGhhbmRsZXMgdXBsb2FkIHJvdXRlcyBvbiB0aGUgY29sbGVjdGlvbiByZXNvdXJjZTpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29sbGVjdGlvbihyZXNvdXJjZS5wYXJlbnQpfS91cGxvYWQvJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgIH0sXG5cbiAgICAgIC4uLmFwaS5yZXNvdXJjZXNcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIC8gZXh0ZW5kaW5nIG9mIGhlYWRlcnM6XG4gICAgLy8gYXBpLmhlYWRlcnMgPSB7XG4gICAgLy8gICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgLy8gfVxuICAgIGFwaS5oZWFkZXJzID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIC4uLmFwaS5oZWFkZXJzXG4gICAgfVxuXG4gICAgYXBpLmlzQXBpUmVxdWVzdCA9IGFwaS5pc0FwaVJlcXVlc3QgfHwgZnVuY3Rpb24odXJsKSB7XG4gICAgICByZXR1cm4gIWlzQWJzb2x1dGVVcmwodXJsKSB8fCB1cmwuc3RhcnRzV2l0aChhcGkudXJsKVxuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhlbCkpIHtcbiAgICAgIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbClcbiAgICB9XG5cbiAgICB0aGlzLnJvb3QgPSBuZXcgVnVlKHtcbiAgICAgIGVsLFxuICAgICAgcm91dGVyOiBuZXcgVnVlUm91dGVyKHtcbiAgICAgICAgbW9kZTogJ2hpc3RvcnknLFxuICAgICAgICBiYXNlOiBkaXRvLmJhc2UsXG4gICAgICAgIGxpbmtBY3RpdmVDbGFzczogJycsXG4gICAgICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAnJ1xuICAgICAgfSksXG4gICAgICBjb21wb25lbnRzOiB7IERpdG9Sb290IH0sXG4gICAgICAvLyBNb3N0IGluamVjdHMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZSByZWFjdGl2ZW5lc3MgYWNyb3NzXG4gICAgICAvLyBwcm92aWRlL2luamVjdCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgICBwcm92aWRlOiB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgLy8gQSBkZWZhdWx0IGxpc3Qgb2YgdmVyYnMgYXJlIHByb3ZpZGVkIGJ5ICR2ZXJicygpIGFuZCBjYW4gYmVcbiAgICAgICAgLy8gb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkuXG4gICAgICAgICR2ZXJiczogKCkgPT4gdmVyYnMsXG4gICAgICAgIC8vIFByb3ZpZGUgZGVmYXVsdHMgc28gRGl0b01peGluIGNhbiBpbmplY3QgdGhlbSBmb3IgYWxsIGNvbXBvbmVudHM6XG4gICAgICAgIC8vICAgaW5qZWN0OiBbICAnJGlzUG9wdWxhdGVkJywgJyRzY2hlbWFDb21wb25lbnQnLCAnJHJvdXRlQ29tcG9uZW50JyBdXG4gICAgICAgICR2aWV3czogKCkgPT4ge30sXG4gICAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGF0YUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHJlbmRlcjogY3JlYXRlRWxlbWVudCA9PiBjcmVhdGVFbGVtZW50KERpdG9Sb290LCB7XG4gICAgICAgIC8vIFByZXNlcnZlIHRoZSByb290IGNvbnRhaW5lcidzIGlkLCBhcyByZXF1aXJlZCBieSBob3QtcmVsb2FkaW5nOlxuICAgICAgICBhdHRyczoge1xuICAgICAgICAgIGlkOiBlbC5pZFxuICAgICAgICB9LFxuICAgICAgICBwcm9wczoge1xuICAgICAgICAgIHVucmVzb2x2ZWRWaWV3czogdmlld3MsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICB9LFxuICAgICAgICAvLyBUaGlzIG1heSBvbmx5IGJlIG5lZWRlZCB0byBhdm9pZCB0cmVlLXNoYWNraW5nIG9mIHRoZXNlIGNvbXBvbmVudHMsXG4gICAgICAgIC8vIHNpbmNlIHRoZXkgYWN0dWFsbHkgaGFuZGxlIHJlZ2lzdHJ5IGludGVybmFsbHkgYWxyZWFkeS5cbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICAgICAgLi4udHlwZXNcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcmVnaXN0ZXIodHlwZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBUeXBlQ29tcG9uZW50LnJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpXG4gIH1cblxuICByZXF1ZXN0KHtcbiAgICB1cmwsXG4gICAgbWV0aG9kID0gJ2dldCcsXG4gICAgZGF0YSA9IG51bGwsXG4gICAgcGFyYW1zID0gbnVsbCxcbiAgICBoZWFkZXJzID0gbnVsbFxuICB9KSB7XG4gICAgY29uc3QgaXNBcGlSZXF1ZXN0ID0gdGhpcy5hcGkuaXNBcGlSZXF1ZXN0KHVybClcbiAgICByZXR1cm4gYXhpb3MucmVxdWVzdCh7XG4gICAgICB1cmwsXG4gICAgICBtZXRob2QsXG4gICAgICBwYXJhbXMsXG4gICAgICAuLi4oZGF0YSAmJiB7IGRhdGEgfSksXG4gICAgICBiYXNlVVJMOiBpc0FwaVJlcXVlc3QgPyB0aGlzLmFwaS51cmwgOiBudWxsLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAuLi4oaXNBcGlSZXF1ZXN0ICYmIHRoaXMuYXBpLmhlYWRlcnMpLFxuICAgICAgICAuLi5oZWFkZXJzXG4gICAgICB9LFxuICAgICAgd2l0aENyZWRlbnRpYWxzOiBpc0FwaVJlcXVlc3QgJiYgISF0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgIH0pXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJ1aWQiLCJjb21wb25lbnRzIiwicmVuZGVyIiwic3RhdGljUmVuZGVyRm5zIiwiX192dWUyX3NjcmlwdCIsIlR5cGVDb21wb25lbnQiLCJTa2V0Y2hQaWNrZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxNQUFlLEtBQUE7QUFBQSxFQUNiLE9BQU87QUFBQSxFQUNQLGlCQUFpQixDQUFFO0FBQUEsRUFDbkIsTUFBTTtBQUFBLEVBQ04sV0FBVyxDQUFFO0FB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QUFBQSxJQUNBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsU0FBQSxRQUFBLFNBQUEsU0FBQSxpQkFHQSxLQUFBLFNBQUEsa0JBQUEsQ0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE1BQUEsVUFBQTtBQUdBLFNBQUEsTUFBQSxVQUFBO0FBQUEsTUFDQSxPQUFBLE9BQUE7QUFDQSxRQUFBLEVBQUEsT0FBQSxRQUFBLGFBQUEsS0FDQSxNQUFBLFNBQUEsY0FBQTtBQUFBLE1BRUE7QUFBQSxNQUVBLE9BQUEsT0FBQTtBQUNBLFFBQUEsRUFBQSxTQUFBLFNBQ0EsTUFBQSxTQUFBLGNBQUE7QUFBQSxNQUVBO0FBQUEsSUFDQSxDQUFBO0FBQ0EsUUFBQTtBQUNBLFdBQUEsYUFBQSxJQUNBLEFBQUEsTUFBQSxLQUFBLGNBQ0EsTUFBQSxLQUFBLGFBQUEsSUFFQSxNQUFBLEtBQUEsTUFBQTtBQUFBLElBRUEsU0FBQSxHQUFBO0FBQ0EsY0FBQSxNQUFBLENBQUE7QUFBQSxJQUNBO0FBQ0EsU0FBQSxhQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsT0FBQSxFQUFBLFVBQUEsUUFBQSxVQUFBLFlBQUEsSUFBQTtBQUNBLGdCQUFBO0FBQUEsUUFDQSxTQUFBO0FBQUEsUUFDQSxPQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxTQUFBO0FBQUEsTUFDQSxFQUFBLE1BQUEsaUJBQ0EsSUFBQSxNQUNBLEVBQUEsQ0FBQSxFQUFBLEtBQUEsVUFBQSxRQUNBLFFBQUEsZUFBQSxNQUFBO0FBQ0EsWUFBQSxJQUFBO0FBQUEsUUFDQSxTQUFBO0FBQUEsUUFDQSxPQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxTQUFBO0FBQUEsTUFDQSxFQUFBLE1BQUE7QUFFQSxjQUFBLEdBQUEsR0FBQSxDQUFBLENBQUE7QUFDQSxZQUFBLEVBQUEsbUJBQUEsT0FBQSxLQUFBO0FBQ0EsVUFBQSxHQUFBO0FBS0EsY0FBQSxFQUFBLG9CQUFBLE9BQUEsR0FDQSxJQUFBLE1BQUEsRUFBQSxTQUFBLEVBQUEsVUFBQTtBQUNBLGFBQUEsUUFBQSxFQUFBLFNBQUEsVUFBQSxTQUFBLGFBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEscUJBQUE7QUFDQSxXQUFBLGNBQUEsV0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBLEdBQUE7QUFDQSxXQUFBLGdCQUFBLElBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEsUUFBQTs7QUFDQSxXQUFBLGFBQUE7QUFDQSxZQUFBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxVQUNBLEtBQUEsUUFBQSxTQUFBLENBQUEsR0FDQSxJQUFBLE1BQUEsS0FBQSxXQUFBO0FBQUEsUUFDQSxZQUFBO0FBQUEsVUFDQSxVQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsWUFDQSxXQUFBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsVUFBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLEdBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQSxTQUFBO0FBQUEsVUFDQSxRQUFBLENBQUE7QUFBQSxVQUNBLE9BQUEsRUFBQSxNQUFBLFNBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQSxDQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUE7QUFDQSxnQkFBQSxJQUFBLE1BQUEsS0FBQSxZQUFBO0FBQUEsWUFDQSxVQUFBLEtBQUEsSUFBQSxNQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsWUFDQSxVQUFBO0FBQUEsVUFDQSxDQUFBO0FBQ0EsVUFBQSxJQUNBLFNBQUEsUUFBQSxDQUFBLElBRUEsTUFBQSxRQUFBLEVBQUEsS0FBQSxJQUFBLEdBQ0EsTUFBQSxLQUFBLGFBQUE7QUFBQSxRQUVBLFNBQUEsR0FBQTtBQUNBLGdCQUFBLElBQUEsWUFBQSxhQUFBLGtCQUFBLFNBQUEsa0JBQUE7QUFDQSxlQUFBLE9BQUE7QUFBQSxZQUNBLE1BQUE7QUFBQSxZQUNBLE9BQUE7QUFBQSxZQUNBLE1BQUEsS0FBQTtBQUFBLFVBQ0EsQ0FBQSxHQUNBLEtBQ0EsUUFBQSxNQUFBLEdBQUEsRUFBQSxRQUFBLEdBRUEsS0FBQSxNQUFBO0FBQUEsUUFDQTtBQUFBLElBRUE7QUFBQSxJQUVBLGVBQUE7QUFDQSxhQUFBLEtBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxTQUFBO0FBQ0EsVUFBQTtBQUtBLFFBQUEsQUFKQSxPQUFBLEtBQUEsWUFBQTtBQUFBLFVBQ0EsVUFBQSxLQUFBLElBQUEsTUFBQTtBQUFBLFVBQ0EsVUFBQTtBQUFBLFFBQ0EsQ0FBQSxHQUNBLEtBQUEsV0FDQSxNQUFBLFFBQUEsSUFBQSxHQUNBLEtBQUEsYUFBQTtBQUFBLE1BRUEsU0FBQSxHQUFBO0FBQ0EsZ0JBQUEsTUFBQSxDQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEsWUFBQTtBQUNBLFVBQUEsSUFBQTtBQUNBLFVBQUE7QUFLQSxZQUFBLEFBSkEsT0FBQSxLQUFBLFlBQUE7QUFBQSxVQUNBLFVBQUEsS0FBQSxJQUFBLE1BQUE7QUFBQSxVQUNBLFVBQUE7QUFBQSxRQUNBLENBQUEsR0FDQSxLQUFBLFFBQUE7QUFBQSxNQUNBLFNBQUEsR0FBQTtBQUNBLGFBQUEsT0FBQTtBQUFBLFVBQ0EsTUFBQTtBQUFBLFVBQ0EsT0FBQTtBQUFBLFVBQ0EsTUFBQTtBQUFBLFFBQ0EsQ0FBQTtBQUFBLE1BQ0E7QUFDQSxrQkFBQSxRQUFBLENBQUEsR0FDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFFBQUEsR0FBQTtBQUNBLFdBQUEsU0FBQSxPQUNBLEtBQ0EsT0FBQSxlQUFBLEdBQUEsR0FBQSxTQUFBLEdBR0EsS0FDQSxNQUFBLGdCQUFBLENBQUEsR0FDQSxLQUFBLGFBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxNQUFBLGFBQUE7QUFDQSxNQUFBLE1BQUEsS0FBQSxVQUFBLEtBQ0EsTUFBQSxLQUFBLE1BQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxNQUFBLGVB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QUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxTQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLE1BQUEsRUFBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUVBLFVBQUEsSUFBQSxHQUFBLEtBQUEsSUFBQTtBQUNBLGVBQUEsS0FBQSxLQUFBO0FBQ0EsTUFBQSxLQUFBLEtBQ0EsR0FBQSxLQUFBO0FBR0EsV0FBQTtBQUFBLE1BQ0EsY0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0Esa0JBQUE7QUFDQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsT0FBQTtBQUNBLGFBQUEsS0FBQSxRQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLFlBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUEsT0FBQSxZQUNBLE9BQUEsUUFBQSxHQUFBLEtBQUEsT0FBQSxDQUFBLEVBQUEsSUFHQSxDQUFBLENBQUEsR0FBQSxPQUNBLE9BQUEsWUFBQSxDQUFBLEVBQUEsVUFDQSxLQUFBO0FBQUEsUUFDQSxHQUFBO0FBQUEsUUFDQSxRQUFBO0FBQUEsVUFDQSxPQUFBLE1BQUEsS0FBQSxPQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsSUFFQSxDQUFBLEdBQUEsQ0FBQSxFQUVBLENBQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQSxDQUFBLENBQUEsS0FBQSxjQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxTQUFBLGVBQUEsR0FBQSxRQUFBO0FBQUEsTUFDQSxPQUFBLE1BQUE7QUFDQSxRQUFBLEtBQUEsYUFBQSxNQUFBLFlBQUEsTUFDQSxLQUFBLE9BQUE7QUFBQSxNQUVBO0FBQUEsSUFDQSxDQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsWUFBQTtBQUNB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QUNBLFdBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxhQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxZQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsWUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQ0EsVUFBQSxFQUFBLFlBQUEsS0FBQTtBQUNBLFdBQUE7QUFBQSxNQUVBLEdBQ0EsS0FBQSxFQUFBLENBQUEsSUFDQSxFQUFBLEtBQUEsTUFBQSxLQUFBLE9BQUEsSUFDQTtBQUFBLE1BRUEsb0JBQUEsQ0FBQTtBQUFBLE1BQ0EsZUFBQSxDQUFBO0FBQUEsTUFDQSxnQkFBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLGtCQUFBO0FBRUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHdCQUFBO0FBSUEsYUFBQSxLQUFBLGFBQUEsT0FBQSxLQUFBLFFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxlQUFBO0FBQ0EsWUFBQSxJQUFBLEdBQUEsS0FBQSxPQUFBLFFBQUEsRUFBQTtBQUNBLGlCQUFBLEtBQUEsS0FBQTtBQUNBLFVBQUEsS0FBQSxHQUFBLEVBQUEsWUFBQTtBQUVBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBQ0EsYUFBQSxFQUFBLEtBQUEsT0FBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTs7QUFDQSxZQUFBLElBQUEsV0FBQSxPQUFBLFNBQUEsa0JBQUEsTUFBQSxPQUFBLE1BQ0EsSUFBQSxLQUFBLEtBQUEsYUFBQSxLQUFBLEtBQUEsRUFBQSxJQUNBLElBQ0EsV0FBQSxlQUFBLGtCQUFBLFNBQUE7QUFDQSxhQUFBLE1BQUEsS0FFQSxLQUFBLFFBQUEsUUFBQSxFQUFBLE1BQUEsRUFBQSxDQUFBLEdBRUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsVUFBQSxLQUFBLE1BQUE7QUFDQSxZQUFBLElBQUE7QUFDQSxtQkFBQSxLQUFBLE9BQUEsT0FBQSxLQUFBLElBQUEsR0FBQTtBQUNBLGdCQUFBLEVBQUEsa0JBQUE7QUFDQSxjQUFBLEVBQUEsQ0FBQSxJQUNBLEVBQUEsS0FBQSxNQUFBLEtBQUEsT0FBQSxJQUNBO0FBRUEsbUJBQUE7QUFFQSxVQUFBLEtBQ0EsS0FBQTtBQUFBLFFBRUE7QUFDQSxlQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUE7O0FBQ0EsYUFBQSxVQUFBLFdBQUEsa0JBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUEsS0FBQSxZQUFBLEVBQUEsUUFBQSxVQUFBLFlBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsU0FBQSxLQUFBLE9BQUE7QUFBQSxRQUNBLEdBQUEsS0FBQSxZQUFBLEVBQUEsUUFBQSxhQUFBLFlBQUEsSUFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFRQSxPQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLGFBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7QUFDQSxhQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQSxHQUFBLEtBQUEsVUFBQSxLQUFBLFVBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUE7QUFDQSxhQUFBLEtBQUEsU0FDQSxLQUFBLGtCQUFBLEtBQUEsY0FBQSxLQUFBLE1BQUEsS0FBQSxPQUFBLENBQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxLQUFBLGNBQUEsT0FBQSxFQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQSxLQUFBLGNBQUEsT0FBQSxFQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsT0FBQSxFQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsT0FBQSxFQUFBLFdBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBO0FBQ0EsYUFBQSxDQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7QUFDQSxhQUFBLENBQUEsQ0FBQSxLQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFDQSxhQUFBLENBQUEsS0FBQSxXQUFBLENBQUEsQ0FBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLFlBQUEsRUFBQSxrQkFBQSxLQUFBO0FBQ0EsYUFBQSxDQUFBLENBQUEsS0FBQSxPQUFBLEtBQUEsQ0FBQSxFQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBLEdBQUEsVUFBQTtBQUFBLE1BQ0EsVUFBQTtBQUNBLGVBQUEsQ0FBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsYUFBQTtBQUNBLGFBQUEsT0FBQSxPQUFBLEtBQUEsa0JBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsS0FBQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQTtBQUNBLGFBQUEsT0FBQSxPQUFBLEtBQUEsY0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHVCQUFBO0FBQ0EsYUFBQSxLQUFBLHVCQUFBLEtBQUEsa0JBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxrQkFBQTtBQUNBLGFBQUEsS0FBQSx1QkFBQSxLQUFBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTtBQUNBLGFBQUEsS0FBQSx1QkFBQSxLQUFBLGNBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFNBQUEsVUFBQSxFQUFBLEdBQ0EsS0FBQSxrQkFBQSxHQUVBLEtBQUEsU0FBQSxVQUFBLEtBQUEscUJBQUEsR0FDQSxLQUFBLFVBQUEsWUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLGdCQUFBO0FBQ0EsU0FBQSxVQUFBLFNBQUEsR0FDQSxLQUFBLFVBQUEsRUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLHdCQUFBLEdBQUEsR0FBQTtBQUNBLGFBQUEsS0FBQSxzQkFDQSxLQUFBLHNCQUFBLEdBQUEsQ0FDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHVCQUFBLEdBQUEsR0FBQTtBQUNBLGFBQUEsS0FBQSx3QkFBQSxHQUFBLENBQUEsRUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsb0JBQUEsR0FBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLGtCQUFBLEtBQUEsc0JBQUEsR0FBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsbUJBQUEsR0FBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLG9CQUFBLEdBQUEsQ0FBQSxFQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBLEdBQUEsR0FBQTtBQUNBLGFBQUEsS0FBQSxZQUFBLEtBQUEsc0JBQUEsR0FBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQSxHQUFBLEdBQUE7QUFDQSxhQUFBLEtBQUEsY0FBQSxHQUFBLENBQUEsRUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsb0JBQUEsR0FBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLHNCQUFBLEtBQUEsa0JBQUEsR0FBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsbUJBQUEsR0FBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLG9CQUFBLEdBQUEsQ0FBQSxFQUFBLE1BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxVQUFBLEdBQUEsR0FBQTtBQUNBLGFBQUEsS0FBQSxZQUFBLEtBQUEsa0JBQUEsR0FBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQSxHQUFBLEdBQUE7QUFDQSxhQUFBLEtBQUEsVUFBQSxHQUFBLENBQUEsRUFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsS0FBQSxXQUFBLEtBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUEsR0FBQTtBQUNBLGFBQUEsS0FBQSxlQUFBLEtBQUEsV0FBQSxNQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxTQUFBLEdBQUE7QUFDQSxXQUFBLFVBQUEsVUFBQTtBQUFBLFFBRUEsU0FBQSxFQUFBLFVBQUE7QUFBQSxNQUNBLENBQUEsR0FRQSxFQUFBLEtBQUEsVUFBQSxLQUFBLEtBQUEsWUFBQSxNQUNBLE1BQUEsU0FBQTtBQUFBLElBRUE7QUFBQSxJQUVBLFdBQUE7QUFDQSxXQUFBLFVBQUEsUUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGtCQUFBO0FBQ0EsaUJBQUEsS0FBQSxLQUFBO0FBQ0EsVUFBQSxnQkFBQTtBQUFBLElBRUE7QUFBQSxJQUVBLGNBQUE7QUFDQSxpQkFBQSxLQUFBLEtBQUE7QUFDQSxVQUFBLFlBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxRQUFBOztBQUNBLGdCQUFBLDBCQUFBLFVBQUEsU0FDQSxLQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBLEdBQUEsSUFBQSxJQUFBO0FBQ0EsWUFBQSxFQUFBLDRCQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUEsR0FBQTtBQUNBLGNBQUEsSUFBQSxFQUFBLENBQUEsSUFDQSxJQUNBLEdBQUEsQ0FBQSxJQUNBLE9BQUEsRUFBQSxLQUFBLENBQUEsSUFDQTtBQUNBLFlBQUEsSUFDQSxPQUFBLEtBQUEsQ0FBQSxFQUFBLE9BQUEsQ0FBQSxJQUNBLEVBQUEsQ0FBQSxJQUNBLElBQ0EsQ0FBQSxDQUFBO0FBQUEsTUFDQTtBQUNBLE1BQUEsS0FDQSxLQUFBLFlBQUE7QUFFQSxVQUFBLElBQUEsSUFDQSxJQUFBO0FBQ0EsZ0JBQUEsT0FBQSxLQUFBLENBQUE7QUFDQSxpQkFBQSxLQUFBLEdBQUE7QUFDQSxjQUFBLElBQUEsS0FBQSx3QkFBQSxDQUFBO0FBQ0EsbUJBQUEsS0FBQTtBQUNBLFVBQUEsRUFBQSxTQUFBLENBQUEsS0FFQSxNQUFBLEtBQ0EsRUFBQSxNQUFBLEdBRUEsSUFBQSxJQUNBLElBQUE7QUFBQSxNQUdBO0FBQ0EsYUFBQSxLQUFBLENBQUEsS0FDQSxLQUFBLGFBQUEsR0FFQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUEsR0FBQTtBQUNBLGFBQUEsS0FBQSxZQUFBLEdBQUEsRUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEscUJBQUEsR0FBQSxHQUFBOztBQUNBLFdBQUEsWUFBQTtBQUNBLFVBQUEsSUFBQTtBQUNBLFlBQUEsSUFBQSxDQUFBO0FBQ0EsaUJBQUEsQ0FBQSxHQUFBLE1BQUEsT0FBQSxRQUFBLENBQUEsR0FBQTtBQUdBLGNBQUEsSUFBQSxLQUFBLGFBQ0EsRUFBQSxLQUFBLFVBQUEsQ0FBQSxJQUNBLEdBSUEsSUFBQSxFQUFBLENBQUE7QUFDQSxZQUFBLElBQUE7QUFDQSxjQUFBLElBQUEsS0FBQSx3QkFBQSxDQUFBO0FBQ0EsbUJBQUEsS0FBQTtBQUNBLFVBQUEsRUFBQSxxQkFBQSxHQUFBLEtBQUEsQ0FBQSxLQUNBLEtBQUEsSUFDQSxJQUFBO0FBR0EsWUFBQSxDQUFBLEdBQUE7QUFJQSxnQkFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLGlCQUFBLEVBQUEsU0FBQSxLQUFBO0FBQ0Esa0JBQUEsSUFBQSxLQUFBLHdCQUFBLENBQUE7QUFDQSx1QkFBQSxLQUFBO0FBQ0Esa0JBQUEsTUFBQSxRQUFBLHdCQUFBLDBCQUNBLEdBQ0EsT0FBQTtBQUNBLG9CQUFBLElBQUE7QUFDQSwyQkFBQSxLQUFBLEdBQUE7QUFDQSx3QkFBQSxJQUFBLEVBQUEsRUFBQTtBQUNBLGtCQUNBLEtBQ0EsRUFBQSxxQkFBQSxHQUFBLEtBQUEsQ0FBQSxLQUVBLEtBQUEsSUFDQSxJQUFBO0FBQUEsZ0JBRUE7QUFDQSx1QkFBQTtBQUFBLGNBQ0E7QUFNQTtBQUlBLGNBQUEsSUFBQTtBQUFBLFVBQ0E7QUFHQSxnQkFBQSxJQUFBLEVBQUEsQ0FBQTtBQUNBLHFCQUFBLEtBQUEsR0FBQTtBQUNBLGtCQUFBLElBQUEsSUFDQSxhQUFBLE1BQ0EsT0FBQSxLQUFBO0FBQ0EsY0FBQSxLQUFBLEdBQUEsS0FBQSxFQUFBLFNBQUE7QUFBQSxVQUNBO0FBQUEsUUFDQTtBQUNBLFlBQUE7QUFBQSxNQUNBO0FBQ0EsTUFBQSxLQUNBLEtBQUEsYUFBQSxFQUFBLEtBQUE7QUFBQSxDQUFBLENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxhQUFBLEdBQUE7QUFDQSxXQUFBLE9BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxRQUNBLE9BQUE7QUFBQSxRQUNBLE1BQUEsS0FBQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUE7QUFJQSxhQUFBLE9BQUEsS0FBQSxNQUFBLEdBQUEsS0FBQSxRQUFBLElBQUEsSUFBQSxDQUFBLEdBQ0EsS0FBQSxZQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQSxHQUFBO0FBQ0EsaUJBQUEsS0FBQTtBQUNBLFlBQUEsS0FBQSxLQUFBLE1BQUE7QUFDQSxlQUFBLEtBQUEsS0FBQSxNQUFBLEdBQUEsRUFBQSxFQUFBO0FBQ0EscUJBQUEsS0FBQSxLQUFBLG9CQUFBLENBQUE7QUFDQSxjQUFBLFVBQUE7QUFBQSxRQUVBO0FBQUEsSUFFQTtBQUFBLElBRUEsV0FBQSxHQUFBO0FBSUEsWUFBQSxJQUFBLENBQUE7QUFDQSxpQkFBQSxDQUFBLEdBQUEsTUFBQSxPQUFBLFFBQUEsQ0FBQTtBQUNBLFFBQUEsR0FBQSxDQUFBLEtBQUEsRUFBQSxDQUFBLE1BRUEsQUFEQSxLQUFBLG9CQUFBLENBQUEsRUFDQSxLQUFBLE9BQUEsRUFBQSxZQUFBLEtBSUEsR0FBQSxLQUFBO0FBRUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFlBQUEsRUFBQSxZQUFBLGFBQUEsZ0JBQUEsT0FBQSxJQUFBO0FBQ0EsYUFBQSxHQUNBLEtBQUEsUUFDQSxLQUFBLGNBQ0EsS0FBQSxNQUNBLEtBQUEsVUFBQTtBQUFBLFFBR0EsV0FBQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDQSxDQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQSxHQUFBOztBQUdBLGdCQUFBLHVCQUFBLE1BQUEsVUFBQSx5QkFBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsbUJBQUEsR0FBQSxHQUFBOztBQUNBLFdBQUEsZUFBQSxLQUFBLG9CQUFBLEdBQUEsQ0FBQSxHQUVBLFVBQUEsMEJBQUEsVUFBQSxtQkFBQSxHQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQSxHQUFBLEdBQUE7QUFDQSxXQUFBLGVBQUEsS0FBQSxlQUFBLEdBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUEsR0FBQSxHQUFBO0FBQ0EsV0FBQSxlQUFBLEtBQUEsZ0JBQUEsR0FBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZUFBQSxHQUFBLEdBQUEsR0FBQTtBQUNBLFlBQUEsSUFBQSxFQUFBO0FBQ0EsTUFBQSxJQUNBLEtBQUEsS0FBQSxHQUFBLEdBQUEsQ0FBQSxJQUVBLEtBQUEsUUFBQSxHQUFBLENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSx1QkFBQSxHQUFBO0FBQ0EsYUFBQSxPQUFBLE9BQUEsQ0FBQSxFQUFBLE9BQUEsQ0FBQSxHQUFBLE1BQUE7QUFHQSxjQUFBLEVBQUEsZ0JBQUE7QUFFQSxlQURBLGlCQUFBLENBQUEsSUFDQSxLQUFBLENBQUEsR0FDQTtBQUFBLE1BQ0EsR0FBQSxFQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsWUFBQSxHQUFBLEdBQUEsR0FBQTtBQUNBLGFBQUEsRUFBQSxDQUFBLEVBQUEsV0FBQSxLQUFBLFFBQUEsSUFDQSxLQUFBLHNCQUFBLEdBQUEsR0FBQSxDQUFBLElBQ0EsS0FBQSxrQkFBQSxHQUFBLEdBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLHNCQUFBLEdBQUEsR0FBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQ0EsRUFBQSxFQUFBLENBQUEsTUFBQSxDQUFBLEdBQ0EsQ0FDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGtCQUFBLEdBQUEsR0FBQSxHQUFBO0FBQ0EsYUFB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QUFHLENBQUMsSUFBSSxFQUFJLEdBQUU7QUFDbEIsR0FFSUMsS0FBa0IsQ0FBRTtBQ2lDeEIsTUFBQUMsS0FBQSxFQUFBLFVBQUEsYUFBQTtBQUFBLEVBQ0EsVUFBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLGVBQUEsTUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsS0FBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEtBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxTQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsVUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLGdCQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLGVBQUE7QUFDQSxhQUFBLEtBQUEsTUFBQSxPQUFBLEtBQUEsY0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBOztBQVFBLFlBQUEsSUFBQSxVQUFBLGlCQUFBLGtCQUFBO0FBQ0EsYUFBQSxPQUFBLFFBQUEsV0FBQSxXQUFBLGtCQUFBLGVBQUEsQ0FBQSxDQUFBLEVBQUEsSUFDQSxDQUFBLENBQUEsR0FBQSxPQUFBO0FBRUEsVUFBQSxPQUFBO0FBRUEsY0FBQSxJQUFBLEdBQUEsQ0FBQSxHQUNBLElBQUEsRUFBQSxLQUFBLFVBQUEsQ0FBQTtBQUNBLGVBQUE7QUFBQSxVQUNBO0FBQUEsVUFDQSxVQUFBLEtBQUEsQ0FBQSxJQUNB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QUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLFFBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxVQUFBLEVBQUEsTUFBQSxTQUFBLFVBQUEsR0FBQTtBQUFBLElBQ0EsZ0JBQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLFFBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsVUFBQTtBQUNBLGFBQUEsSUFBQSxFQUFBLE1BQUEsRUFBQSxRQUFBLEtBQUEsUUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLEVBQUEsS0FBQSxNQUFBLEtBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7QUFDQSxZQUFBLEVBQUEsY0FBQSxNQUNBLEVBQUEsYUFBQTtBQUNBLGFBQ0EsTUFBQSxNQUNBLEVBQUEsQ0FBQSxLQUFBLEtBQUEsWUFBQSxpQkFBQSxLQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsUUFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLEtBQUEsU0FBQSxLQUFBLE1BQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBRUEsYUFBQSxLQUFBLFNBQUEsS0FBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUEsRUFBQSxTQUFBO0FBQUEsTUFDQSxNQUFBLENBQUEsUUFBQSxNQUFBO0FBQUEsTUFDQSxVQUFBO0FBQ0EsZUFBQSxLQUFBLFlBQUE7QUFBQSxNQUNBO0FBQUEsTUFDQSxJQUFBLEdBQUE7QUFFQSxlQUFBLE1BQUEsU0FDQSxJQUNBLEVBQUEsQ0FBQSxJQUNBLEVBQUEsTUFBQSxtQkFBQSxFQUFBLEtBQ0E7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSx3QkFBQSxFQUFBLFNBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLElBQUEsR0FBQTtBQUNBLGVBQUEsRUFBQSxDQUFBLEtBQ0EsRUFBQSxNQUFBLGFBQUEsRUFBQSxNQUFBO0FBQUEsTUFFQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsa0JBQUEsRUFBQSxXQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxVQUFBO0FBQ0EsZUFBQSxLQUFBLFlBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxtQkFBQSxFQUFBLFlBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxNQUNBLElBQUEsR0FBQTtBQUNBLGVBQUEsS0FBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsaUJBQUE7QUFDQSxZQUFBLEVBQUEsT0FBQSxNQUFBLEtBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxlQUFBLEtBQUE7QUFBQSxRQUNBLHFCQUFBLEdBQUEsS0FBQSxNQUFBO0FBQUEsUUFDQSxHQUNBLEVBQUEsQ0FBQSxJQUNBLEVBQUEsQ0FBQSxJQUFBLEdBQUEsSUFDQTtBQUFBLE1BRUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxpQkFBQTtBQUNBLFlBQUEsSUFBQSxLQUFBLGdCQUVBLElBQ0EsQ0FBQSxNQUFBLFFBQUEsTUFBQSxFQUFBLFNBQUEsQ0FBQSxJQUFBLFNBQ0EsS0FBQSxLQUFBLENBQUEsSUFBQSxXQUFBLENBQUEsSUFDQSxRQUFBLEtBQUEsQ0FBQSxJQUFBLElBQ0EsR0FBQSxDQUFBLElBQUE7QUFFQSxhQUFBLEVBQUEsQ0FBQSxJQUFBLEdBQUEsT0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGlCQUFBO0FBRUEsWUFBQSxJQUNBLEtBQUEsMkJBQUEsT0FDQSxLQUFBLG1CQUFBLFFBR0EsSUFBQSxLQUFBLDJCQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsTUFBQSxHQUFBLElBQUEsSUFBQSxLQUFBLElBQUEs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QSxjQUFBLDBCQUFBLEtBQ0EsS0FBQSxlQUFBLEtBRUEsS0FDQSxLQUFBLEtBQUEsTUFBQSxDQUFBO0FBQUEsTUFFQSxTQUFBLEdBQUE7QUFDQSxRQUFBLEtBQ0EsU0FBQSxNQUFBLEdBQUEsRUFBQSxNQUFBLEVBQUEsT0FBQSxHQUNBLEVBQUEsU0FBQSxpQkFDQSxNQUFBO0FBQUE7QUFBQSxnQkFFQSxFQUFBO0FBQUEsYUFDQTtBQUFBLE1BR0E7QUFDQSxZQUFBLEVBQUEsZUFBQSxNQUFBLEtBQUEsQ0FBQTtBQUNBLGFBQUEsTUFBQSxXQUFBLG9CQUFBLGtCQUFBLE9BQUEsUUFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxpQkFBQTtBQUNBLFdBQUEsY0FBQSxDQUFBLENBQUEsS0FBQSxNQUdBLEtBQUEsZUFBQSxDQUFBLENBQUEsTUFBQSxLQUFBLGlCQUFBLEVBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxNQUFBLFNBQUE7O0FBQ0EsVUFBQSxJQUFBLFVBQUEsb0JBQUEsa0JBQUE7QUFDQSxVQUFBO0FBQ0EsWUFBQSxLQUFBLEtBQUEsU0FBQSxDQUFBLEdBRUEsS0FBQSxTQUFBLGdCQUFBO0FBQ0EsWUFBQTtBQUNBLGdCQUFBLElBQUEsS0FBQSxVQUFBLEdBQUEsTUFBQSxDQUFBO0FBQ0EsZ0JBQUEscUJBQUEsY0FBQSxrQkFBQSxjQUFBLDBCQUFBLEtBRUEsTUFBQSxLQUFBLGVBQUE7QUFBQSxRQUNBLFNBQUEsR0FBQTtBQUNBLGtCQUFBLE1BQUEsR0FBQSxFQUFBLE1BQUEsRUFBQSxPQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsU0FBQSxHQUFBO0FBQ0EsZ0JBQUEsTUFBQSxDQUFBLEdBQ0EsTUFBQSxFQUFBLE9BQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxVQUFBO0FBQ0EsVUFBQSxJQUFBLE1BQUEsS0FBQSxpQkFBQSxFQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUEsS0FBQSxLQUFBLFVBQUEsQ0FBQSxHQUNBLEtBQ0EsS0FBQSxnQkFBQSxRQUFBLENBQUE7QUFB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QUFBLEVBQUE7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxhQUFBO0FBQUEsTUFDQSxZQUFBO0FBQUEsTUFDQSxXQUFBO0FBQUEsTUFDQSxRQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFFBQUE7QUFJQSxZQUFBLElBQUEsS0FBQSxTQUFBLEdBQ0EsRUFBQSxlQUFBLG9CQUFBO0FBQ0EsYUFBQTtBQUFBLFFBQ0EsR0FBQTtBQUFBLFFBQ0EsUUFBQSxJQUFBLEVBQUEsU0FBQSxFQUFBO0FBQUEsUUFDQSxXQUFBLElBQUEsRUFBQSxVQUFBLEVBQUE7QUFBQSxRQUNBLFFBQUEsSUFBQSxFQUFBLFNBQUEsRUFBQTtBQUFBLFFBQ0EsV0FBQSxJQUFBLEVBQUEsWUFBQSxFQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFDQSxhQUFBLEtBQUEsa0JBQ0EsS0FBQSxjQUdBLEtBQUEsUUFBQSxFQUFBLE1BQUEsS0FBQSxLQUFBLEdBQ0EsS0FBQSxPQUNBLEtBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBQ0EsYUFBQSxHQUNBLEdBQ0E7QUFBQSxRQUNBLFFBQUE7QUFBQSxVQUNBLE1BQUE7QUFBQSxVQUNBLFFBQUE7QUFBQSxZQUNBLE9BQUEsTUFBQSxLQUFBLE9BQUE7QUFBQSxVQUNBO0FBQUEsUUFDQTtBQUFBLFFBRUEsUUFBQSxDQUFBLEtBQUEsY0FBQTtBQUFBLFVBQ0EsTUFBQTtBQUFBLFVBRUEsV0FBQTtBQUFBLFVBQ0EsUUFBQTtBQUFBLFlBQ0EsT0FBQSxDQUFBLEVBQUEsV0FBQSxRQUFBLEVBQUEsT0FBQTtBQUFBLFVBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDQSxHQUNBLEtBQUEsT0FBQSxPQUNBLENBQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGNBQUE7QUFDQSxhQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFFQSxhQUFBLEtBQUEsVUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7O0FBQ0EsYUFBQSxDQUFBLEtBQUEsY0FBQSxDQUFBLENBQUEsV0FBQSx3QkFBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTs7QUFDQSxhQUFBLFdBQUEsd0JBQUEsa0JBQUEsZ0JBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBSUEsYUFBQSxLQUFBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxPQUFBO0FBRUEsYUFBQSxLQUFBLE9BQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7O0FBQ0EsYUFBQSxLQUFBLGFBQ0EsT0FDQSxVQUFBLFVBQUEsV0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFNBQUE7QUFDQSxhQUFBLEtBQUEsYUFBQSxTQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLFlBQUEsSUFBQSxLQUFBLFlBQUE7QUFDQSxhQUFBLEdBQUEsS0FBQSxRQUFBLENBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLG1CQUFBO0FBQ0EsYUFBQSxFQUFBLEtBQUEsYUFBQSxLQUFBLE1BQUEsU0FBQSxLQUFBLE1BQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE9BQUE7QUFTQSxhQUFBLEtBQUEsZUFBQSxLQUFBLGNBQUEsS0FBQSxpQkFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUE7QUFDQSxhQUFBLEtBQUEsZ0JBQUEsS0FBQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQTtBQUlBLFVBQUEsRUFBQSxZQUFBLEtBQUE7QUFDQSxVQUFBLEdBQUE7QUFHQSxjQUFBLElBQUEsRUFDQSxLQUFBLGdCQUFBLEtBQUEsb0JBQUEsQ0FDQSxHQUdBLElBQUEsS0FBQSxZQUFBLEtBQUEsTUFBQSxHQUFBLEdBQ0EsSUFBQSxFQUFBLE1BQUEsRUFBQSxTQUFBLEVBQUEsTUFBQTtBQUNBLGFBQUEsWUFBQTtBQUNBLGNBQUEsSUFBQSxFQUFBLEVBQUEsU0FBQTtBQUNBLFFBQUEsRUFBQSxLQUFBLFlBQUEsS0FBQSxNQUFBLFlBSUEsRUFBQTtBQUVBLGlCQUFBLElBQUEsR0FBQSxJQUFBLEVBQUEsUUFBQSxJQUFBLEtBQUEsR0FBQSxLQUFBO0FBQ0EsZ0JBQUEsSUFBQSxFQUFBLElBRUEsSUFBQSxPQUFBLEtBQUEsRUFBQSxFQUFBLElBQ0EsTUFBQSxXQUNBLE9BQ0EsS0FBQSxnQkFBQSxLQUFBLGNBQUEsR0FBQSxDQUFBLElBQ0E7QUFHQSxVQUFBLE1BQUEsSUFBQSxJQUNBLEtBQUEsWUFBQSxJQUVBLElBQUEsRUFBQTtBQUFBLFFBRUE7QUFBQSxNQUNBO0FBQ0EsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBO0FBSUEsVUFDQSxLQUFBLGVBQ0EsS0FBQSxlQUFBLFVBQ0EsS0FBQSxjQUNBLEtBQUEsY0FBQSxNQUNBO0FBQ0EsWUFBQSxJQUFBLEtBQUEsV0FBQSxLQUFBO0FBQ0EsZUFBQSxLQUFBLGNBR0EsTUFBQSxhQUFBLElBQUEsR0FBQSxDQUFBLElBR0EsTUFBQSxRQUNBLENBQUEsS0FBQSxjQUNBLEVBQUEsS0FBQSxZQUFBLEtBR0EsS0FBQSxRQUFBLEtBQUEsRUFBQSxNQUFBLFVBQUEsUUFBQSxJQUFBLEdBRUE7QUFBQSxNQUNBO0FBQ0EsYUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLElBR0EsVUFBQTtBQUNBLGFBQUEsQ0FBQSxDQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBO0FBQ0EsYUFBQSxLQUFBLGFBQUEsS0FBQSxjQUFBLEtBQUEsTUFBQSxFQUFBLFVBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxZQUFBO0FBQUEsSUFFQSxRQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsZ0JBQUEsR0FBQSxHQUFBO0FBQ0EsYUFBQSxLQUFBLG9CQUFBLFVBQUEsR0FBQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUEsR0FBQTtBQUVBLGFBQUEsS0FBQSxJQUFBLGdCQUFBLEtBQUEsS0FFQSxNQUFBLEdBQUEsU0FBQSxJQUFBLEVBQUEsS0FBQSxVQUFBLENBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUdBLFlBQUE7QUFDQSxNQUFBLEtBQUEsYUFDQSxLQUFBLGNBQUEsS0FBQSxlQUNBLEtBQUEsV0FBQSxLQUFBLFFBQUEsS0FBQSxJQUFBLElBRUEsS0FBQSxXQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsY0FBQSxHQUFBO0FBQ0EsVUFBQSxLQUFBLGNBQUEsS0FBQSxjQUFBLE1BQUE7QUFDQSxjQUFBLEVBQUEsMkJBQUE7QUFDQSxvQkFBQSxLQUNBLEtBQUEsWUFDQSxLQUFBLFdBQ0EsRUFBQSxXQUFBLENBQUEsQ0FDQSxHQUNBLEVBQUEsU0FBQSxHQUNBO0FBQUEsTUFDQTtBQUNBLGFBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxjQUFBLEdBQUE7O0FBQ0EsYUFBQSxFQUFBLEtBQUEsWUFBQSxJQUNBLEtBQUEsY0FBQSxDQUFBLElBQ0EsQ0FBQSxDQUFBLFdBQUEsZUFBQSxVQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFHQSxZQUFBO0FBQ0EsV0FBQSxRQUFBLElBQUE7QUFBQSxJQUNBO0FBQUEsSUFHQSxRQUFBLEdBQUE7QUFFQSxNQUFBLEtBQUEsY0FFQSxLQUFBLGNBQUEsQ0FBQSxJQUVBLE1BQUEsY0FBQSxNQUNBLEtBQUEsYUFBQTtBQUFBLElBRUE7QUFBQSxJQUVBLGdCQUFBLEdBQUEsR0FBQTtBQUVBLE1BQUEsTUFBQSxLQUNBLE1BQUEsYUFBQTtBQUFBLElBRUE7QUFBQSxJQUVBLE1BQUEsU0FBQTtBQUNBLGFBQUEsS0FBQSxNQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxRQUFBO0FBQ0EsYUFBQSxLQUFBLFNBQUEsS0FBQSxxQkFBQSxJQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQSxJQUFBLElBQUE7QUFDQSxhQUFBLEtBQUEsYUFDQSxJQUFBLFdBQUEsWUFDQSxJQUFBLFdBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxNQUFBLE9BQUEsR0FBQSxFQUFBLGNBQUEsSUFBQSxlQUFBLE9BQUEsSUFBQTtBQUNBLFVBQUEsS0FBQSxDQUFBLEtBQUE7QUFDQSxlQUFBO0FBR0EsWUFBQSxJQUFBLE9BQUEsS0FBQSxNQUFBLEtBQUEsY0FBQSxDQUFBLElBR0EsSUFBQSxFQUFBLEVBQUEsT0FBQSxVQUFBO0FBQUEsUUFDQSxRQUFBLEtBQUE7QUFBQSxNQUNBLENBQUEsR0FDQSxJQUFBLEtBQUEsS0FBQSxVQUNBLElBQUEsd0JBQUEsV0FBQSxLQUFBLFFBQ0EsSUFBQSxLQUFBLGVBQUEsR0FBQSxDQUFBO0FBQ0EsVUFBQTtBQTJEQSxVQTFEQSxBQUFBLENBQUEsS0FBQSxLQUFBLGNBQ0EsSUFBQSxNQUFBLEtBQUEsZ0JBQUEsR0FBQSxHQUFBLEdBQUEsR0FBQTtBQUFBLFFBQ0EsV0FBQSxNQUFBLEtBQUEsZ0JBQUEsS0FBQSxjQUFBLENBQUE7QUFBQSxRQUNBLFNBQUEsT0FBQSxLQUFBLGdCQUFBLFNBQUE7QUFBQSxVQUNBLFNBQUEsRUFBQSxTQUFBO0FBQUEsUUFDQSxDQUFBO0FBQUEsUUFDQSxlQUFBLE1BQUE7QUFDQSxnQkFBQSxJQUFBLEVBQUEsRUFBQTtBQUNBLGVBQUEsT0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0EsT0FBQSxLQUFBLGFBQ0EsUUFBQSxFQUFBLENBQUEsTUFDQSxVQUFBLEVBQUEsQ0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLGNBQ0EsS0FBQSxhQUNBLEdBQUEsS0FBQSxpQkFBQSxPQUNBLGNBQUEsS0FBQSxrQkFBQTtBQUFBLGNBQ0EsS0FBQTtBQUFBLFlBQ0E7QUFBQSxVQUNBLENBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQSxhQUFBLE1BQUE7QUFDQSxnQkFBQSxJQUFBLEVBQUEsRUFBQTtBQUNBLGVBQUEsT0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0EsT0FBQTtBQUFBLFlBQ0EsTUFBQSxhQUFBLEtBQUEsS0FBQTtBQUFBLFVBQ0EsQ0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUEsSUFFQSxJQUFBLE1BQUEsS0FBQSxlQUFBLEdBQUEsR0FBQSxHQUFBLEdBQUE7QUFBQSxRQUNBLFNBQUE7QUFBQSxRQUNBLFdBQUEsTUFBQSxLQUFBLGdCQUFBLEtBQUEsY0FBQSxDQUFBO0FBQUEsUUFDQSxTQUFBLE9BQUEsS0FBQSxnQkFBQSxTQUFBO0FBQUEsVUFDQSxTQUFBLEVBQUEsU0FBQTtBQUFBLFFBQ0EsQ0FBQTtBQUFBLFFBQ0EsZUFBQSxNQUFBO0FBQ0EsZ0JBQUEsSUFBQSxFQUFBLEVBQUE7QUFDQSxlQUFBLE9BQUE7QUFBQSxZQUNBLE1BQUE7QUFBQSxZQUNBLE9BQUEsZ0JBQUEsRUFBQSxDQUFBO0FBQUEsWUFDQSxNQUFBLEdBQUEsS0FBQSxpQkFBQTtBQUFBLFVBQ0EsQ0FBQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLGFBQUEsT0FBQTtBQUNBLGdCQUFBLElBQUEsRUFBQSxFQUFBO0FBQ0EsZUFBQSxPQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsWUFDQSxPQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsY0FDQSxhQUFBLEtBQUEsS0FBQSxZQUFBLElBQUEsTUFBQTtBQUFBLGNBQ0Esd0JBQUEsWUFBQTtBQUFBLFlBQ0E7QUFBQSxVQUNBLENBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQSxDQUFBLEdBRUE7QUFFQSxZQURBLEtBQUEsZ0JBQUEsR0FDQSxLQUFBLEVBQUE7QUFDQSxlQUFBLE1BQUE7QUFBQSxpQkFDQSxLQUFBLFlBQUE7QUFFQSxnQkFBQSxJQUFBLEtBQUEsVUFBQSxLQUFBLFFBQUEsS0FBQSxJQUFBO0FBQ0EsZUFBQSxRQUFBLFFBQUEsRUFBQSxNQUFBLE1BQUEsS0FBQSxRQUFBLElBQUE7QUFBQSxRQUNBO0FBQUE7QUFFQSxhQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsTUFBQSxnQkFBQSxHQUFBLEdBQUEsR0FBQSxHQUFBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE9BQ0E7QUFFQSxZQUFBLElBQUEsS0FBQSxhQUNBLEtBQUEsY0FBQSxDQUFBLElBQ0EsS0FBQSxjQUFBLENB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RUFDQSxZQUFBLEVBQUEsaUJBQUE7QUFBQSxFQUNBLFFBQUEsQ0FBQSxFQUFBO0FBQUEsRUFDQSxRQUFBLENBQUEsV0FBQTtBQUFBLEVBRUEsT0FBQTtBQUFBLElBQ0EsUUFBQSxFQUFBLE1BQUEsUUFBQSxVQUFBLEdBQUE7QUFBQSxJQUNBLFVBQUEsRUFBQSxNQUFBLFFBQUEsVUFBQSxHQUFBO0FBQUEsSUFDQSxNQUFBLEVBQUEsTUFBQSxDQUFBLE9BQUEsTUFBQSxHQUFBLFNBQUEsS0FBQTtBQUFBLElBQ0EsTUFBQSxFQUFBLE1BQUEsUUFBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLE1BQUEsRUFBQSxNQUFBLFNBQUEsU0FBQSxHQUFBO0FBQUEsSUFDQSxRQUFBLEVBQUEsTUFBQSxTQUFBLFNBQUEsR0FBQTtBQUFBLElBQ0EsV0FBQSxFQUFBLE1BQUEsU0FBQSxTQUFBLEdBQUE7QUFBQSxJQUNBLE9BQUEsRUFBQSxNQUFBLFFBQUEsU0FBQSxLQUFBO0FBQUEsSUFDQSxPQUFBLEVBQUEsTUFBQSxRQUFBLFNBQUEsRUFBQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLE9BQUE7QUFDQSxXQUFBO0FBQUEsTUFDQSxRQUFBLEtBQUEsUUFBQSxLQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsT0FBQTtBQUNBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsUUFBQTtBQUNBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsV0FBQTtBQUNBLGFBQUEsS0FBQSxVQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLEdBQUEsS0FBQTtBQUFBLFFBQ0EsUUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBLEVBQUEsS0FBQSxPQUFBLFVBQUE7QUFBQSxJQUNBO0FBQUEsSUFHQSxpQkFBQTtBQUNBLGFBQUEsS0FBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZUFBQTs7QUFDQSxZQUFBLElBQUEsVUFBQSxtQkFBQSxrQkFBQTtBQUNBLGFBQUEsS0FBQSxLQUFBLEtBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxvQkFBQTs7QUFDQSxhQUNBLFdBQUEsaUJBQUEsa0JBQUEsVUFBQSxLQUNBLEtBQUEsZUFBQSxhQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxTQUFBO0FBQUEsUUFDQSxRQUFBLEtBQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxjQUFBOztBQUNBLGFBQUEsV0FBQSxpQkFBQSxrQkFBQSxXQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsZ0JBQUE7O0FBQ0EsYUFBQSxXQUFBLGVBQUEsa0JBQUEsV0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGFBQUE7QUFDQSxhQUFBLEtBQUEsZ0JBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGdCQUFBOztBQUNBLFlBQUEsRUFBQSxzQkFBQTtBQUNBLFVBQUEsR0FBQTtBQUNBLGNBQUEsRUFBQSxnQkFBQSxLQUFBLFdBQ0EsSUFBQSxDQUFBLEtBQUEsUUFBQSxFQUFBO0FBRUEsZUFBQSxXQUFBLGlCQUFBLGtCQUFBLElBQUEsQ0FBQSxHQUFBLE1BQUE7QUFDQSxnQkFBQSxJQUNBLEVBQUEsUUFDQSxHQUFBLEtBQUEsUUFBQSxFQUFBLFFBQUEsS0FFQSxJQUFBLEtBRUEsRUFBQSxXQUFBLENBQUEsS0FBQSxFQUFBLFNBQUEsRUFBQTtBQUVBLGlCQUFBO0FBQUEsWUFDQTtBQUFBLFlBQ0E7QUFBQSxZQUNBO0FBQUEsWUFDQSxRQUxBLE1BQUE7QUFBQSxVQU1BO0FBQUEsUUFDQSxPQUFBLENBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsVUFBQTtBQUNBLFlBQUEsRUFBQSxtQkFBQTtBQUNBLGFBQUEsS0FBQSxHQUFBLEtBQ0EsTUFBQSxJQUFBLFNBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxpQkFBQTtBQUNBLGFBQUEsS0FBQSxhQUFBLEtBQUEsWUFBQSxLQUFBO0FBQUEsSUFDQTtBQUFB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LEVBQ0wsQ0FBRztBQUNILEdBRUlDLEtBQWtCLENBQUU7QUM0QnhCLE1BQUFDLEtBQUFDLEVBQUEsU0FBQSxRQUFBO0FBQUEsRUFDQSxRQUFBLENBQUEsQ0FBQTtBQUFBLEVBRUEsVUFBQTtBQUFBLElBQ0EsUUFBQTtBQUNBLGFBQUEsS0FBQSxPQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBO0FBQ0EsYUFBQSxnQkFBQSxLQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFDQSxVQUFBLElBQUEsSUFBQSxHQUFBLEtBQUEsTUFBQSxNQUFBO0FBQUEsTUFDQSxVQUFBLEtBQUEsT0FBQSxZQUFBO0FBQUEsTUFDQSxTQUFBLEtBQUEsT0FBQSxjQUFBO0FBQUEsTUFDQSxhQUFBO0FBQUEsSUFDQSxDQUFBO0FBRUEsUUFBQSxJQUFBLElBQ0EsSUFBQSxJQUNBLElBQUE7QUFFQSxVQUFBLElBQUEsTUFBQTtBQUNBLE1BQUEsQ0FBQSxLQUFBLFdBQUEsS0FDQSxLQUFBLElBQ0EsS0FBQSxTQUFBO0FBQUEsSUFFQSxHQUVBLElBQUEsTUFBQSxLQUFBLFFBQUEsR0FFQSxJQUFBLE1BQUE7QUFDQSxXQUFBLE9BQUEsR0FDQSxFQUFBO0FBQUEsSUFDQTtBQUVBLFNBQUEsTUFBQSxLQUFBLE1BQUEsS0FBQSxjQUFBLFVBQUEsR0FBQTtBQUFBLE1BQ0EsT0FBQTtBQUFBLE1BQ0EsTUFBQTtBQUFBLElBQ0EsQ0FBQTtBQUVBLFVBQUEsSUFBQSxPQUFBO0FBQ0EsTUFBQSxNQUFBLEVBQUEsUUFDQSxLQUFBLElBQ0EsRUFBQSxXQUFBLENBQUE7QUFBQSxJQUVBLEdBRUEsSUFBQSxPQUFBO0FBQ0EsTUFBQSxNQUFBLEtBQUEsU0FDQSxLQUFBLElBQ0EsS0FBQSxRQUFBLEdBQ0EsSUFBQSxJQUNBLEVBQUE7QUFBQSxJQUVBO0FBRUEsTUFBQSxTQUFBLE9BQUE7QUFDQSxNQUFBLElBQ0EsSUFBQSxLQUVBLEVBQUEsQ0FBQTtBQUFBLElBRUEsQ0FBQSxHQUVBLEtBQUEsT0FBQSxTQUFBLE9B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QyxFQUFBLFNBQUEsU0FBQTtBQUFBLEVBQ0EsWUFBQSxFQUFBLGFBQUEsY0FBQUMsR0FBQTtBQUFBLEVBRUEsT0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLFdBQUE7QUFBQSxNQUNBLG1CQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFVBQUE7QUFBQSxJQUNBLFlBQUE7QUFBQSxNQUNBLE1BQUE7QUFDQSxlQUFBLEtBQUEsU0FBQSxDQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsSUFBQSxHQUFBO0FBQ0EsY0FBQSxJQUFBLEtBQUEsYUFDQSxJQUFBO0FBQUEsVUFFQSxLQUFBLHdCQUFBLEtBQUEsSUFBQSxTQUFBO0FBQUEsVUFDQSxLQUFBO0FBQUEsUUFDQSxFQUFBLE1BQUE7QUFDQSxRQUFBLElBQ0EsS0FBQSxRQUFBLEVBQUEsS0FFQSxLQUFBLFFBQUEsR0FBQSxDQUFBLEVBQUEsU0FBQSxDQUFBLEdBRUEsS0FBQSxTQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUE7QUFBQSxNQUNBLE1BQUE7QUFDQSxZQUFBLEtBQUEsU0FBQTtBQUNBLGVBQUEsb0JBQUE7QUFBQSxpQkFDQSxDQUFBLEtBQUEsU0FBQTtBQUNBLGdCQUFBLElBQUEsR0FBQSxLQUFBLEtBQUE7QUFDQSxVQUFBLEVBQUEsYUFDQSxNQUFBLG9CQUFBLEVBQ0EsU0FBQSxFQUFBLFNBQUEsSUFBQSxJQUFBLFNBQUEsTUFBQSxFQUNBLE1BQUEsQ0FBQSxFQUNBLFlBQUE7QUFBQSxRQUVBO0FBQ0EsZUFBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLE1BRUEsSUFBQSxHQUFBO0FBQ0EsYUFBQSxvQkFBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFJQSxhQUFBLEVBQUEsVUFBQTtBQUFBLE1BQ0EsTUFBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsT0FBQSxFQUFBLFNBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFFBQUEs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QUFBQyxLQUFBQyxFQUFBLFNBQUEsUUFBQTtBQUFBLEVBQ0EsWUFBQSxFQUFBLGlCQUFBO0FBQUEsRUFDQSxRQUFBLENBQUEsSUFBQSxFQUFBO0FBQUEsRUFFQSxjQUFBLEdBQUE7QUFFQSxXQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsZUFBQSxHQUFBLEdBQUEsR0FBQTtBQUNBLFVBQUEsRUFBQSxlQUFBO0FBR0EsUUFBQSxHQUFBO0FBSUEsWUFBQSxJQUFBLE1BQUEsRUFBQSx1QkFDQSxHQUNBLE9BQUEsRUFBQSxTQUFBLE1BQ0E7QUFFQSxhQUFBLEdBQ0EsRUFBQSxDQUFBLEdBQ0EsR0FDQTtBQUFBLFFBQ0EsSUFBQSxRQUFBOztBQUNBLGlCQUFBLE9BQUEsTUFBQSxrQkFBQTtBQUFBLFFBQ0E7QUFBQSxRQUNBLElBQUEsTUFBQSxHQUFBO0FBQ0EsZ0JBQUEsSUFBQSxFQUFBO0FBQ0EsY0FBQSxHQUFBO0FBRUEsa0JBQUEsSUFBQSxPQUFBLEdBQUEsR0FBQSxPQUFBLE1BQUEsTUFBQTtBQUNBLFlBQUEsR0FBQSxFQUFBLENBQUEsR0FBQSxFQUFBLEVBQUEsS0FBQSxDQUFBLEtBQ0EsR0FBQSxRQUFBLEdBQ0EsRUFBQSxTQUFBLEVBQUE7QUFBQSxVQUVBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FDQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQUEsSUFDQSxpQkFBQTtBQUNBLGFBQUEsQ0FBQSxDQUNBLE1BQUEsaUJBQ0EsS0FBQTtBQUFBLElBRUE7QUFBQSxJQUVBLGlCQUFBO0FBQ0EsWUFBQSxFQUFBLGdCQUFBO0FBQ0EsYUFBQSxFQUFBLFNBQUEsS0FDQSxNQUFBLFlBQ0EsS0FBQSxhQUNBLEtBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxxQkFBQTtBQUNBLGFBQUEsQ0FBQSxLQUFBLGFBQUEsS0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7QUFDQSxhQUFBLENBQUEsTUFBQSxTQUFBLFNBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFDQSxNQUFBLFVB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QUFBQSxJQUNBO0FBQUEsSUFFQSxtQkFBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLFNBQUE7QUFBQSxRQUNBLFdBQUE7QUFBQSxVQUdBLGNBQUEsTUFDQSxLQUFBLGlCQUFBLEtBQUEsT0FBQSxFQUFBLFFBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQSxTQUFBO0FBQUEsVUFDQSxNQUFBO0FBQUEsVUFDQSxRQUFBLENBQUEsR0FBQSxHQUFBLEdBQUEsR0FBQSxHQUFBLENBQUE7QUFBQSxRQUNBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsbUJBQUE7QUFDQSxhQUFBLEtBQUEsV0FBQSxTQUFBO0FBQUEsUUFDQSxZQUFBO0FBQUEsUUFDQSxhQUFBO0FBQUEsUUFDQSxZQUFBO0FBQUEsUUFDQSxXQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsY0FBQTtBQUNBLGFBQUEsS0FBQSxXQUFBLFNBQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxpQkFBQTtBQUNBLFlBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsVUFDQTtBQUNBLGFBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDQSxFQUFBLE9BQUEsT0FBQSxFQUFBLFNBQUEsQ0FBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7QUFDQSxhQUFBO0FBQUEsUUFDQSxvQkFBQTtBQUFBLFVBQ0EsVUFBQTtBQUFBLFVBQ0EsVUFBQTtBQUFBLFVBQ0EsZ0JBQUE7QUFBQSxRQUNBLEVBQUEsS0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUE7QUFBQSxRQUNBLFVBQUEsQ0FBQSxLQUFBO0FBQUEsUUFDQSxXQUFBLEtBQUE7QUFBQSxRQUNBLG1CQUFBLENBQUEsS0FBQSxZQUFBO0FBQUEsUUFDQSxtQkFBQSxDQUFBLEtBQUEsWUFBQTtBQUFBLFFBQ0EsY0FBQSxLQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUEsRUFBQSxhQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxZQUFBLEVBQUEsY0FBQTtBQUFBLE1BQ0EsTUFBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBRUEsQ0FBQTtBQUFBLElBRUEsYUFBQSxFQUFBLGVBQUE7QUFBQSxNQUNBLE1BQUEsQ0FBQSxRQUFBLE9BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxNQUNBLElBQUEsR0FBQTtBQUNBLGVBQUEsRUFBQSxDQUFBLElBQ0EsSUFDQTtBQUFBLFVBQ0EsT0FBQSxDQUFBLENBQUE7QUFBQSxVQUNBLE9BQUEsQ0FBQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxPQUFBO0FBQUEsSUFDQSxXQUFBO0FBQUEsSUFDQSxXQUFBO0FBQUEsSUFDQSxhQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsVUFBQTtBQUNBLFFBQUEsSUFBQSxJQUNBLElBQUE7QUFFQSxVQUFBLElBQUEsTUFBQTtBQUNBLE1BQUEsQ0FBQSxLQUFBLFdBQUEsS0FDQSxLQUFBLElBQ0EsS0FBQSxTQUFBO0FBQUEsSUFFQSxHQUVBLElBQUEsTUFBQSxLQUFBLFFBQUEsR0FFQSxJQUFBLE1BQUE7QUFDQSxXQUFBLE9BQUEsR0FDQSxFQUFBO0FBQUEsSUFDQSxHQUVBLElBQUEsR0FBQSxPQUFBO0FBQ0EsVUFBQSxJQUNBLEtBQUEsUUFBQSxFQUFBLEdBQ0EsSUFBQSxJQUNBLEVBQUE7QUFBQSxJQUNBLEdBQUEsR0FBQSxHQUVBLElBQUEsQ0FBQSxFQUFBLGlCQUFBO0FBQ0EsUUFBQSxDQUFBLEdBQ0EsS0FBQSxRQUFBO0FBQUEsSUFDQTtBQUVBLFNBQUEsT0FBQSxTQUFBLE9BQUE7QUFDQSxNQUFBLElBQ0EsSUFBQSxLQUVBLEtBQUEsT0FBQSxXQUFBLEdBQUEsSUFBQSxLQUFBLFlBQUE7QUFBQSxJQUVBLENBQUEsR0FFQSxLQUFBLFNBQUEsSUFBQSxHQUFBO0FBQUEsTUFDQSxHQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFlBQUEsS0FBQSxpQkFBQTtBQUFBLE1BQ0EsU0FBQSxLQUFBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxnQkFBQTtBQUNBLFNBQUEsT0FBQSxRQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBQ0EsYUFBQSxHQUFBO0FBQ0EsWUFBQSxJQUFBLENBQUEsRUFBQSxTQUFBLEdBQUEsU0FBQSxRQUFBLEdBQUEsTUFBQTtBQUVBLFVBQUEsSUFBQSxFQUFBLENBQUEsRUFBQSxHQUNBLElBQUEsV0FBQSxpQkFBQSxLQUFBLE1BQUEsT0FBQSxHQUFBLEVBQUEsTUFBQTtBQUVBLFlBQUEsSUFBQSxPQUFBO0FBQ0EsY0FBQSxFQUFBLFNBQUEsRUFBQSxDQUFBO0FBQ0EsYUFBQSxJQUFBLEdBQ0EsSUFBQSxHQUNBLEtBQUEsU0FBQSxHQUFBLEtBQUEsSUFBQSxHQUFBLENBQUE7QUFBQSxNQUNBLEdBRUEsSUFBQSxLQUFBLE1BQUEsVUFBQTtBQUFBLFFBQ0E7QUFBQSxRQUVBLFFBQUEsR0FBQTtBQUNBLFlBQUEsQ0FBQSxHQUNBLEVBQUEsT0FBQTtBQUFBLFFBQ0E7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxzQkFBQTtBQUNBLFdBQUEsT0FBQSxXQUFBLEtBQUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLE1BQUEsWUFBQSxHQUFBO0FBQ0EsWUFBQSxJQUFBLE1BQUEsS0FBQSxXQUFBO0FBQUEsUUFDQSxZQUFBO0FBQUEsVUFDQSxNQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsWUFDQSxPQUFBO0FBQUEsWUFDQSxXQUFBO0FBQUEsVUFDQTtBQUFBLFVBQ0EsT0FBQTtBQUFBLFlBQ0EsTUFBQTtBQUFBLFlBQ0EsT0FBQTtBQUFBLFVBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxTQUFBO0FBQUEsVUFDQSxRQUFBLENBQUE7QUFBQSxVQUNBLE9BQUEsRUFBQSxNQUFBLFNBQUE7QUFBQSxVQUNBLFFBQUE7QUFBQSxZQUNBLFFBQUE7QUFBQSxjQUNBLE1BQUEsRUFBQSxzQkFBQTtBQUNBLGtCQUFBLFFBQUE7QUFBQSxrQkFDQSxNQUFBO0FBQUEsa0JBQ0EsT0FBQTtBQUFBLGdCQUNBLENBQUE7QUFBQSxjQUNBO0FBQUEsWUFDQTtBQUFBLFVBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQSxNQUFBLEtBQUEsT0FBQSxhQUFBLE1BQUE7QUFBQSxNQUNBLENBQUE7QUFDQSxVQUFBLEdBQUE7QUFDQSxZQUFBLEVBQUEsU0FBQSxhQUFBO0FBQ0EsWUFBQTtBQUdBLGNBQUE7QUFDQSxnQkFBQSxJQUFBLENBQUE7QUFBQSxVQUNBLFFBQUE7QUFDQSxnQkFBQSxVQUFBO0FBQUEsVUFDQTtBQUVBLFVBQUEsRUFBQSxTQUFBLFVBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsbUJBQUE7QUFDQSxZQUFBO0FBQUEsUUFDQSxXQUFBLENBQUE7QUFBQSxRQUNBLFdBQUEsQ0FBQTtBQUFBLFFBQ0EsV0FBQSxDQUFBO0FBQUEsVUFDQSxLQUFBO0FBQ0EsYUFBQTtBQUFBLFFBRUEsRUFBQSxRQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxVQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxhQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxVQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxTQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxRQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxRQUFBLElBQUEsR0FBQTtBQUFBLFFBR0EsRUFBQSxjQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxhQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsSUFBQSxHQUFBO0FBQUEsUUFDQSxFQUFBLFdBQUEsSUFBQSxHQUFBLEVBQUEsUUFBQSxFQUFBLFNBQUE7QUFBQSxRQUNBLEVBQUEsa0JBQUEsSUFBQSxHQUFBO0FBQUEsUUFDQSxHQUFBLGVBQUEsRUFBQSxlQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxjQUFBLElBQUEsR0FBQTtBQUFBLFFBQ0EsRUFBQSxlQUFBLElBQUEsR0FBQTtBQUFBLFFBTUEsRUFBQSxXQUFBLElBQUEsR0FBQTtBQUFBLE1BQ0EsRUFBQSxPQUFBLE9BQUEsQ0FBQSxDQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxXQUFBLEdBQUEsR0FBQTtBQUNBLFlBQUEsSUFBQSxDQUFBLEdBRUEsSUFBQSxDQUFBLEVBQUEsU0FBQSxTQUFBLFVBQUEsaUJBQUEsaUJBQUE7QUFDQSxjQUFBLElBQUEsS0FBQSxPQUFBLFNBQUEsSUFDQSxJQUFBLEtBQUEsT0FBQSxTQUFBO0FBQ0EsVUFBQSxLQUFBO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxVQUNBLFVBQ0Esd0JBQUEsT0FDQSxNQUFBLFFBQUEsQ0FBQTtVQUVBLFNBQUEsTUFBQSxJQUNBLEVBQUEsR0FBQSxDQUFBLElBQ0EsRUFBQSxDQUFBO0FBQUEsUUFDQSxDQUFBO0FBQUEsTUFDQSxHQUVBLElBQUEsS0FBQSxPQUFBO0FBQ0EsVUFBQTtBQUNBLG1CQUFBLENBQUEsR0FBQSxNQUFBLE9BQUEsUUFBQSxDQUFBLEdBQUE7QUFDQSxnQkFBQSxJQUFBLENBQUEsUUFBQSxNQUFBLEVBQUEsU0FBQSxDQUFBLElBQUEsWUFBQSxHQUNBLElBQUEsRUFBQSxJQUNBLElBQUEsR0FBQSxDQUFBLEdBQ0EsSUFBQSxFQUFBLENBQUE7QUFDQSxjQUFBO0FBQ0EsZ0JBQUEsTUFBQTtBQUNBLGdCQUFBLEVBQUEsU0FBQSxTQUFBO0FBQUEscUJBQ0EsRUFBQSxDQUFBLEdBQUE7QUFDQSxvQkFBQSxFQUFBLFNBQUEsV0FBQSxpQkFBQSxlQUFBO0FBQ0Esa0JBQUE7QUFDQSxvQkFBQSxFQUFBLENBQUEsS0FBQSxFQUFBLENBQUE7QUFFQSw2QkFBQSxLQUFBO0FBQ0Esb0JBQUEsRUFBQSxTQUFBLENBQUEsS0FDQSxFQUFBO0FBQUEsc0JBQ0E7QUFBQSxzQkFDQSxNQUFBLEdBQUEsS0FBQTtBQUFBLHNCQUNBLE9BQUEsRUFBQSxDQUFBLElBQUEsRUFBQTtBQUFBLHNCQUNBO0FBQUEsc0JBQ0E7QUFBQSxvQkFDQSxDQUFBO0FBQUE7QUFLQSxrQkFBQSxFQUFBLFNBQUEsU0FBQSxpQkFBQSxXQUFBLENBQUE7QUFBQSxZQUVBO0FBQUE7QUFBQSxRQUVBO0FBRUEsYUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7O0FBQ0EscUJBQUEsS0FBQSxtQkFBQSxtQkFDQSxLQUFBLE9BQUEsTUFBQTtBQUFBLElBQ0E7QUFBQSxFQUNBO0FBQ0EsQ0FBQTtBQUVBLE1BQUEsV0FBQSxHQUFBO0FBQUEsRUFDQSxJQUFBLE9BQUE7QUFDQSxXQUFBO0FBQUEsRUFDQTtBQUFBLEVBRUEsSUFBQSxTQUFBO0FBQ0EsV0FBQTtBQUFBLE1BQ0EsVUFBQTtBQUFBLFFBQ0EsRUFBQSxLQUFBLFFBQUE7QUFBQSxNQUNBO0FBQUEsTUFDQSxPQUFBLE1BQUEsQ0FBQSxTQUFBLENBQUE7QUFBQSxJQUNBO0FBQUEsRUFDQTtBQUFBLEVBRUEsU0FBQSxFQUFBLFdBQUE7QUFDQSxXQUFBLE1BQUEsR0FBQSxDQUFBO0FBQUEsRUFDQTtBQUNBO0FBQ0EsTUFBQSxXQUFBLEdBQUE7QUFBQSxFQUNBLElBQUEsU0FBQTtBQUNBLFdBQUE7QUFBQSxNQUNBLE9BQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxVQUNBLFNBQUE7QUFBQSxRQUNBO0FBQUEsUUFDQSxPQUFBO0FBQUEsVUFDQSxTQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLFdBQUE7QUFBQSxNQUNBLFVBQUEsQ0FBQTtBQUFBLFFBQ0EsS0FBQTtBQUFBLFFBQ0EsVUFBQSxPQUFBO0FBQUEsVUFDQSxNQUFBLEVBQUEsYUFBQSxNQUFBO0FBQUEsVUFDQSxPQUFBLEVBQUEsYUFBQSxPQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0EsQ0FBQTtBQUFBLE1BQ0EsT0FBQSxPQUFBLENBQUEsS0FBQSxFQUFBLE9BQUEsQ0FBQTtB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O0FBQUEsSUFFQSxZQUFBLEVBQUEsY0FBQTtBQUFBLE1BQ0EsTUFBQTtBQUFBLE1BQ0EsU0FBQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsVUFBQSxFQUFBLFlBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFVBQUEsRUFBQSxZQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxjQUFBO0FBQ0EsWUFBQSxFQUFBLGdCQUFBLGVBQUEsZ0JBQUEsS0FBQTtBQUNBLGFBQUEsS0FDQSxNQUFBLElBQUEsd0JBQ0EsSUFBQSwyQkFDQTtBQUFBLElBRUE7QUFBQSxFQUNBO0FBQUEsRUFFQSxVQUFBO0FBQ0EsSUFBQSxLQUFBLGFBR0EsS0FBQSxNQUFBO0FBQUEsRUFFQTtBQUFBLEVBRUEsU0FBQTtBQUFBLElBRUEsZUFBQTtBQUVBLGFBQUE7QUFBQSxRQUNBLE9BQUEsS0FBQTtBQUFBLFFBQ0EsTUFBQSxLQUFBO0FBQUEsUUFDQSxPQUFBLEtBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQTtBQUFBLElBRUEsYUFBQSxHQUFBO0FBQ0EsVUFBQSxLQUFBLFVBQUE7QUFDQSxjQUFBLEVBQUEsZ0JBQUEsbUJBQUEsTUFDQSxJQUFBLEtBQUEsSUFDQTtBQUFBLFVBQ0EsQ0FBQSxJQUFBO0FBQUEsVUFHQSxDQUFBLElBQUE7QUFBQSxRQUNBLElBQ0E7QUFDQSxvQkFBQSxRQUFBLEtBQUEsQ0FBQSxHQUNBO0FBQUEsTUFDQTtBQUFBLElBQ0E7QUFBQSxJQUVBLGVBQUE7QUFDQSxXQUFBLE1BQUEsUUFBQSxTQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsU0FBQSxHQUFBO0FBQ0EsWUFBQSxJQUFBLEtBQUEsYUFBQSxDQUFBO0FBQ0EsTUFBQSxLQUNBLEtBQUEsTUFBQSxLQUFBLEtBQUEsa0JBQUEsQ0FBQSxDQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsTUFBQSxlQUFBLEdBQUE7QUFDQSxNQUFBLEtBQUEsZ0JBQ0Es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QUE7QUFBQSxNQUVBLFVBQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFlBQUEsRUFBQSxjQUFBO0FBQUEsTUFDQSxNQUFBLENBQUEsT0FBQSxRQUFBLE1BQUE7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFFBQUEsRUFBQSxVQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxJQUFBLEdBQUE7QUFDQSxlQUFBLEVBQUEsQ0FBQSxJQUFBLEVBQUEsS0FBQSxHQUFBLElBQUE7QUFBQSxNQUNBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxTQUFBLEVBQUEsV0FBQTtBQUFBLE1BQ0EsTUFBQSxDQUFBLFFBQUEsTUFBQTtBQUFBLE1BQ0EsSUFBQSxHQUFBO0FBQ0EsZUFBQSxJQUFBLEdBQUEsQ0FBQSxJQUFBO0FBQUEsTUFDQTtBQUFBLElBQ0EsQ0FBQTtBQUFBLElBRUEsV0FBQSxFQUFBLGFBQUE7QUFBQSxNQUNBLE1BQUE7QUFBQSxNQUNBLFNBQUE7QUFBQSxNQUNBLElBQUEsR0FBQTtBQUNBLGVBQUEsS0FBQSxLQUFBLE1BQUEsU0FBQTtBQUFBLE1BQ0E7QUFBQSxJQUNBLENBQUE7QUFBQSxJQUVBLFdBQUEsRUFBQSxhQUFBO0FBQUEsTUFDQSxNQUFBO0FBQUEsTUFDQSxTQUFBO0FBQUEsSUFDQSxDQUFBO0FBQUEsSUFFQSxnQkFBQTtBQUNBLGFBQUEsS0FBQSxRQUFBLFVBQ0EsQ0FBQSxNQUFBLE9BQUEsVUFBQSxLQUFBLE9BQUE7QUFBQSxJQUNBO0FBQUEsSUFFQSxpQkFBQTtBQUNBLGFBQUEsS0FBQSxRQUFBLFVBQUEsS0FBQSxPQUFBO0FBQUEsSUFDQTtBQUFBLElBRUEsaUJBQUE7QUFDQSxhQUNBLEtBQUEsUUFBQSxPQUFBLENBQUEsR0FBQSxNQUFBLElBQUEsRUFBQSxVQUFBLENBQUEsSUFDQSxLQUFBLFFBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxhQUFBO0FBQ0EsYUFBQSxLQUFBLGVBQUE7QUFBQSxRQUNBLE1BQUE7QUFBQSxRQUNBLE1BQUEsS0FBQSxJQUFBLGNBQUEsS0FBQSxRQUFBO0FBQUEsTUFDQSxDQUFBO0FBQUEsSUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLFNBQUE7QUFBQSxJQUNBLFdBQUEsR0FBQSxHQUFBO0FBQ0EsWUFBQSxFQUFBLGNBQUEsS0FBQTtBQUNBLGFBQUEsSUFDQSxFQUFBLEtBQ0EsTUFDQSxJQUFBLEVBQUEsTUFBQTtBQUFBLFFBQ0EsT0FBQTtBQUFBLFFBQ0EsTUFBQSxLQUFBO0FBQUEsUUFDQTtBQUFBLFFBQ0EsVUFBQSxFQUFBLEtBQUEsVUFBQSxDQUFBO0FBQUEsTUFDQSxDQUFBLENBQ0EsSUFDQSxHQUFBLEVBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFdBQUEsR0FBQSxHQUFBO0FBQ0EsWUFBQSxFQUFBLFlBQUE7QUFFQSxNQUFBLEtBQUEsT0FBQSxRQUNBLHlCQUFBLEtBQUEsTUFBQSxVQUFBLElBQUEsS0FFQSxDQUFBLEtBQUEsV0FDQSxLQUFBLE1BQUEsT0FBQSxHQUFBLENBQUEsSUFFQSxLQUFBLFFBQUEsTUFFQSxFQUFBLFVBQ0EsS0FBQSxPQUFBLE9BQUEsRUFBQSxNQUFBLEdBRUEsS0FBQSxTQUFBLEdBQ0EsS0FBQSxPQUFBO0FBQUEsUUFDQSxNQUFBO0FBQUEsUUFDQSxPQUFBO0FBQUEsUUFDQSxNQUFBLEdBQUEsU0FBQSxLQUFBLE1BQUE7QUFBQSxNQUNBLENBQUE7QUFBQSxJQUVBO0FBQUEsSUFFQSxhQUFBLEdBQUE7QUFDQSxhQUFBLEtBQUEsWUFBQSxLQUFBLFFBQ0EsS0FBQSxNQUFBLFVBQUEsT0FBQSxFQUFBLE9BQUEsRUFBQSxFQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxRQUFBLEdBQUE7QUFDQSxNQUFBLEtBQUEsV0FDQSxBQUFBLEtBQUEsUUFDQSxLQUFBLE1BQUEsS0FBQSxDQUFBLElBRUEsS0FBQSxRQUFBLENBQUEsQ0FBQSxJQUdBLEtBQUEsUUFBQTtBQUFBLElBRUE7QUFBQSxJQUVBLFlBQUEsR0FBQSxHQUFBO0FBQ0EsVUFBQSxLQUFBLFVBQUE7QUFDQSxjQUFBLElBQUEsS0FBQSxhQUFBLENBQUE7QUFDQSxRQUFBLEtBQUEsS0FDQSxDQUFBLElBQ0EsS0FBQSxLQUFBLEtBQUEsT0FBQSxHQUFBLENBQUEsSUFFQSxLQUFBLE1BQUEsT0FBQSxHQUFBLENBQUE7QUFBQSxNQUdBO0FBQ0EsYUFBQSxRQUFBO0FBQUEsSUFFQTtBQUFBLElBRUEsV0FBQSxHQUFBO0FBQ0EsV0FBQSxZQUFBLEdBQUEsSUFBQTtBQUFBLElBQ0E7QUFBQSxJQUVBLFVBQUEsR0FBQSxHQUFBO0FBQ0EsVUFBQSxLQUFBLENBQUEsR0FBQTtBQUNBLGNBQUEsRUFBQSxPQUFBLFNBQUEsWUFBQTtBQUNBLGFBQUEsUUFBQSxFQUFBLE9BQUEsU0FBQSxTQUFBLFFBQUEsR0FBQTtBQUFBLE1BQ0E7QUFDQSxVQUFBLEtBQUEsR0FBQTtBQUNBLGNBQUEsRUFBQSxZQUFBLGFBQUE7QUFDQSxZQUFBLEdBQUE7QUFDQSxlQUFBLFNBQUE7QUFDQSxnQkFBQSxJQUFBLEVBQUEsU0FBQTtBQUNBLFVBQUEsSUFDQSxHQUFBLFNBQUEsR0FHQSxLQUFBLFlBQUEsR0FBQSxDQUFBLEtBRUEsS0FBQSxXQUFBLENBQUE7QUFBQSxRQUVBLFdBQUEsR0FBQTtBQUNBLGdCQUFBLElBQUE7QUFBQSxZQUNBLE9BQUE7QUFBQSxZQUNBLFFBQUE7QUFBQSxZQUNBLFdBQUEsMEJBQUEsRUFBQTtBQUFBLFlBQ0EsU0FBQTtBQUFBLFlBQ0EsUUFBQTtBQUFBLFlBQ0EsTUFBQSxzQkFBQSxHQUFBLEVBQUEsSUFBQTtBQUFBLFlBQ0EsU0FBQTtBQUFBLFVBRUEsRUFBQSxNQUFBLCtCQUFBO0FBQ0EsZUFBQSxPQUFBO0FBQUEsWUFDQSxNQUFBO0FBQUEsWUFDQSxPQUFBO0FBQUEsWUFDQTtBQUFBLFVBQ0EsQ0FBQSxHQUNBLEtBQUEsV0FBQSxDQUFBO0FBQUEsUUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNBO0FBQUEsSUFFQSxZQUFBLEdBQUE7O0FBQ0EsWUFBQSxJQUFBLHVCQUFBO0FBQ0EsTUFBQSxXQUFBLElBQUEsU0FBQSxrQkFBQSxnQkFBQSxLQUFBLENBQUEsRUFBQSxtQkFDQSxHQUFBLGtCQUFBO0FBQUEsSUFFQTtBQUFBLEVBQ0E7QUFBQSxFQUVBLGFBQUEsR0FBQSxHQUFBO0FBRUEsVUFBQSxJQUFBLEdBQUEsQ0FBQSxFQUNBLElBQ0EsQ0FBQSxFQUFBLGNBQUEsUUFBQSxDQUFBLEtBQUEsRUFBQSxVQUFBLElBQUEsSUFDQSxFQUNBLE9BQUEsT0FBQSxDQUFBO0FBQ0EsV0FBQSxFQUFBLFdBQUEsSUFBQSxFQUFBLE1BQUE7QUFBQSxFQUNBO0FBQ0EsQ0FBQTtBQUVBLFlBQUEsR0FBQTtBQUNBLFNBQUEsSUFBQSxFQUFBLENBQUEsSUFBQSxDQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4Q0NqVmUsS0FBQTtBQUFBLEVBQ2I7QUFBQSxFQUFVO0FBQUEsRUFDVjtBQUFBLEVBQVE7QUFBQSxFQUNSO0FBQUEsRUFBVTtBQUFBLEVBQ1Y7QUFBQSxFQUFVO0FBQUEsRUFDVjtBQUFBLEVBQVE7QUFBQSxFQUNSO0FBQUEsRUFBUztBQUFBLEVBQ1Q7QUFBQSxFQUFVO0FBQUEsRUFDVjtBQUFBLEVBQVE7QUFDVixFQUFFLE9BQU8sQ0FBQyxHQUFPLE1BQ2YsR0FBTSxLQUFRLEdBQ1AsSUFDTixDQUFFLENBQUE7QUNHTCxFQUFJLE9BQU8sZ0JBQWdCO0FBRzNCLEVBQUksSUFBSSxFQUFTO0FBQ2pCLEVBQUksSUFBSSxJQUFVLEVBQUUsU0FBUyxHQUFJLENBQUU7QUFDbkMsRUFBSSxJQUFJLEVBQWdCO0FBRVQsTUFBTSxHQUFVO0FBQUEsRUFDN0IsWUFBWSxHQUFJO0FBQUEsSUFFZCxVQUFPLENBQUU7QUFBQSxJQUNUO0FBQUEsSUFDQSxXQUFRLENBQUU7QUFBQSxPQUNQO0FBQUEsTUFDRCxJQUFJO0FBQ04sU0FBSyxLQUFLLEdBSVYsS0FBSyxNQUFNLElBQU0sR0FBTSxFQUFFLE1BQU0sT0FBTyxFQUFLLEtBQUssQ0FBRyxHQUNuRCxLQUFLLFVBQVUsR0FHZixFQUFJLFVBQUosR0FBSSxTQUFXLFVBRWYsRUFBSSxVQUFVLEdBQU0sQ0FBRSxHQUFFLElBQWdCLEVBQUksT0FBTyxHQUVuRCxFQUFJLFdBQUosR0FBSSxVQUFZLE9BQVcsS0FBSyxRQUFRLENBQU8sSUFJL0MsRUFBSSxnQkFDRixFQUFJLGlCQUNKLEVBQUksaUJBQ0EsSUFDQSxPQUFPLEdBRWIsRUFBSSxrQkFDRixFQUFJLG1CQUNKLEVBQUksaUJBQ0EsS0FDQSxPQUFPO0FBb0JiLFVBQU0sSUFBUSxFQUFJLFFBQVEsRUFBWSxFQUFJLE9BQU87QUFBQSxNQUMvQyxNQUFNO0FBQUEsSUFDUCxDQUFBLEtBQUssQ0FBRTtBQUNSLE1BQU0sUUFBUSxFQUFZLEVBQU0sU0FBUyxTQUFTO0FBQUEsTUFDaEQsUUFBUTtBQUFBLE1BQ1IsUUFBUTtBQUFBLElBQ2QsQ0FBSyxHQUNELEVBQU0sU0FBUyxFQUFZLEVBQU0sVUFBVSxVQUFVO0FBQUEsTUFDbkQsUUFBUTtBQUFBLE1BQ1IsUUFBUTtBQUFBLElBQ2QsQ0FBSyxHQUNELEVBQU0sVUFBVSxFQUFZLEVBQU0sV0FBVyxXQUFXO0FBQUEsTUFDdEQsUUFBUTtBQUFBLE1BQ1IsUUFBUTtBQUFBLElBQ2QsQ0FBSyxHQVlELEVBQUksWUFBWTtBQUFBLE1BQ2QsSUFBSSxHQUFVO0FBQ1osY0FBTSxJQUFVLEtBQUssdUJBQVUsU0FBUyxLQUFLO0FBQzdDLGVBQU8sS0FBWSxFQUFRLEtBQUssTUFBTSxDQUFRO0FBQUEsTUFDL0M7QUFBQSxNQUVELFFBQVEsR0FBVTtBQUNoQixjQUFNLElBQWEsS0FBSyxJQUFJLEVBQVMsTUFBTTtBQUMzQyxlQUFPLElBQ0gsR0FBRyxLQUFjLEVBQVMsU0FDMUIsRUFBUztBQUFBLE1BQ2Q7QUFBQSxNQUVELFdBQVcsR0FBVTtBQUNuQixlQUFPLEtBQUssUUFBUSxDQUFRO0FBQUEsTUFDN0I7QUFBQSxNQUVELE9BQU8sR0FBVTtBQUdmLGVBQU8sR0FBRyxFQUFTLFFBQVEsRUFBUztBQUFBLE1BQ3JDO0FBQUEsTUFFRCxPQUFPLEdBQVU7QUFFZixlQUFPLEdBQUcsS0FBSyxXQUFXLEVBQVMsTUFBTSxZQUFZLEVBQVM7QUFBQSxNQUMvRDtBQUFBLE1BRUQsR0FBRyxFQUFJO0FBQUEsSUFDUixHQU1ELEVBQUksVUFBVTtBQUFBLE1BQ1osZ0JBQWdCO0FBQUEsTUFDaEIsR0FBRyxFQUFJO0FBQUEsSUFDUixHQUVELEVBQUksZUFBZSxFQUFJLGdCQUFnQixTQUFTLEdBQUs7QUFDbkQsYUFBTyxDQUFDLEdBQWMsQ0FBRyxLQUFLLEVBQUksV0FBVyxFQUFJLEdBQUc7QUFBQSxJQUNyRCxHQUVHLEVBQVMsQ0FBRSxLQUNiLEtBQUssU0FBUyxjQUFjLENBQUUsSUFHaEMsS0FBSyxPQUFPLElBQUksRUFBSTtBQUFBLE1BQ2xCO0FBQUEsTUFDQSxRQUFRLElBQUksR0FBVTtBQUFBLFFBQ3BCLE1BQU07QUFBQSxRQUNOLE1BQU0sRUFBSztBQUFBLFFBQ1gsaUJBQWlCO0FBQUEsUUFDakIsc0JBQXNCO0FBQUEsTUFDOUIsQ0FBTztBQUFBLE1BQ0QsWUFBWSxFQUFFLGFBQVU7QUFBQSxNQUl4QixTQUFTO0FBQUEsUUFDUDtBQUFBLFFBR0EsUUFBUSxNQUFNO0FBQUEsUUFHZCxRQUFRLE1BQU07QUFBQSxRQUFFO0FBQUEsUUFDaEIsY0FBYyxNQUFNO0FBQUEsUUFDcEIsa0JBQWtCLE1BQU07QUFBQSxRQUN4Qix3QkFBd0IsTUFBTTtBQUFBLFFBQzlCLGlCQUFpQixNQUFNO0FBQUEsUUFDdkIsZ0JBQWdCLE1BQU07QUFBQSxRQUN0QixrQkFBa0IsTUFBTTtBQUFBLFFBQ3hCLG9CQUFvQixNQUFNO0FBQUEsUUFDMUIsa0JBQWtCLE1BQU07QUFBQSxRQUN4QixpQkFBaUIsTUFBTTtBQUFBLFFBQ3ZCLGVBQWUsTUFBTTtBQUFBLE1BQ3RCO0FBQUEsTUFFRCxRQUFRLE9BQWlCLEVBQWMsSUFBVTtBQUFBLFFBRS9DLE9BQU87QUFBQSxVQUNMLElBQUksRUFBRztBQUFBLFFBQ1I7QUFBQSxRQUNELE9BQU87QUFBQSxVQUNMLGlCQUFpQjtBQUFBLFVBQ2pCO0FBQUEsUUFDRDtBQUFBLFFBR0QsWUFBWTtBQUFBLFVBQ1YsR0FBRztBQUFBLFVBQ0gsR0FBRztBQUFBLFFBQ0o7QUFBQSxNQUNULENBQU87QUFBQSxJQUNQLENBQUs7QUFBQSxFQUNGO0FBQUEsRUFFRCxTQUFTLEdBQU0sR0FBUztBQUN0QixXQUFPQSxFQUFjLFNBQVMsR0FBTSxDQUFPO0FBQUEsRUFDNUM7QUFBQSxFQUVELFFBQVE7QUFBQSxJQUNOO0FBQUEsSUFDQSxZQUFTO0FBQUEsSUFDVCxVQUFPO0FBQUEsSUFDUCxZQUFTO0FBQUEsSUFDVCxhQUFVO0FBQUEsS0FDVDs7QUFDRCxVQUFNLElBQWUsS0FBSyxJQUFJLGFBQWEsQ0FBRztBQUM5QyxXQUFPLEdBQU0sUUFBUTtBQUFBLE1BQ25CO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLEdBQUksS0FBUSxFQUFFO01BQ2QsU0FBUyxJQUFlLEtBQUssSUFBSSxNQUFNO0FBQUEsTUFDdkMsU0FBUztBQUFBLFFBQ1AsR0FBSSxLQUFnQixLQUFLLElBQUk7QUFBQSxRQUM3QixHQUFHO0FBQUEsTUFDSjtBQUFBLE1BQ0QsaUJBQWlCLEtBQWdCLENBQUMsQ0FBQyxXQUFLLElBQUksU0FBVCxVQUFlO0FBQUEsSUFDeEQsQ0FBSztBQUFBLEVBQ0Y7QUFDSDsifQ==