tango-app-ui-store-builder 1.0.86 → 1.0.88

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.
Files changed (21) hide show
  1. package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +2 -7
  2. package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +8 -4
  3. package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +4 -4
  4. package/esm2022/lib/components/manage-store-plano/verification-feedback/editable-fixture/editable-fixture.component.mjs +8 -6
  5. package/esm2022/lib/components/manage-store-plano/verification-feedback/fixture/fixture.component.mjs +10 -6
  6. package/esm2022/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.mjs +75 -4
  7. package/esm2022/lib/components/onboard-store-plano/create-planogram/create-planogram.component.mjs +18 -9
  8. package/esm2022/lib/components/pid-allocation-engine/pid-allocation-engine.component.mjs +201 -0
  9. package/esm2022/lib/components/pid-allocation-engine-form/pid-allocation-engine-form.component.mjs +262 -0
  10. package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +3 -3
  11. package/esm2022/lib/services/store-builder.service.mjs +32 -1
  12. package/esm2022/lib/tango-store-builder-routing.module.mjs +11 -1
  13. package/esm2022/lib/tango-store-builder.module.mjs +15 -5
  14. package/fesm2022/tango-app-ui-store-builder.mjs +791 -218
  15. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  16. package/lib/components/manage-store-plano/verification-feedback/verification-feedback.component.d.ts +1 -0
  17. package/lib/components/pid-allocation-engine/pid-allocation-engine.component.d.ts +66 -0
  18. package/lib/components/pid-allocation-engine-form/pid-allocation-engine-form.component.d.ts +46 -0
  19. package/lib/services/store-builder.service.d.ts +10 -0
  20. package/lib/tango-store-builder.module.d.ts +32 -29
  21. package/package.json +1 -1
@@ -485,12 +485,7 @@ export class TemplateTreeComponent {
485
485
  }
486
486
  let fontSize = 5;
487
487
  let innerBottomText;
488
- // ? `${mf?.fixtureName} - ${mf?.fixtureCategory} - ${mf?.fixtureWidth.value} ${mf?.fixtureWidth.unit}`
489
- const textContent = isMaster
490
- ? mf?.fixtureName.includes("ft")
491
- ? `${mf?.fixtureName}`
492
- : `${mf?.fixtureName} - ${mf?.fixtureCategory} - ${mf?.fixtureWidth.value} ${mf?.fixtureWidth.unit}`
493
- : `${mf?.fixtureName}`;
488
+ const textContent = `${mf?.fixtureName}`;
494
489
  const createBottomText = (fs) => new fabric.Textbox(textContent, {
495
490
  left: topX + topWidth / 2,
496
491
  top: secondBoxY + innerBoxHeight / 2,
@@ -1262,4 +1257,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1262
1257
  type: ViewChild,
1263
1258
  args: ["templateCanvas", { static: false }]
1264
1259
  }] } });
1265
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS10ZW1wbGF0ZS10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2ZpeHR1cmUtdGVtcGxhdGUtdHJlZS9maXh0dXJlLXRlbXBsYXRlLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvZml4dHVyZS10ZW1wbGF0ZS10cmVlL2ZpeHR1cmUtdGVtcGxhdGUtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBRUwsU0FBUyxFQUVULEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU1uRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQzs7Ozs7OztBQVF4SCxNQUFNLE9BQU8scUJBQXFCO0lBMEJ0QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBN0JELFFBQVEsR0FBdUIsT0FBTyxDQUFDO0lBQ3ZDLFFBQVEsQ0FBVSxDQUFDLHVEQUF1RDtJQUMxRSxpQkFBaUIsQ0FBTyxDQUFDLDJDQUEyQztJQUNwRSxVQUFVLENBQVMsQ0FBQywwQ0FBMEM7SUFHdkUsUUFBUSxDQUFpQztJQUN6QyxNQUFNLENBQWlCO0lBRXZCLGNBQWMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxNQUFNLENBQVM7SUFFZixrQkFBa0IsR0FBVSxF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QUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDN0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUNwRCxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUM5QztZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FDdEIsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLElBQUksMEJBQTBCLENBQ2hELENBQUM7Z0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMzRCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0FuakRVLHFCQUFxQjs0RkFBckIscUJBQXFCLHVUQ3ZCbEMsdWpEQTRCQTs7NEZETGEscUJBQXFCO2tCQU5qQyxTQUFTOytCQUNFLHVCQUF1QixjQUdyQixJQUFJO2dNQUdQLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFHTixRQUFRO3NCQURQLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZmFicmljIGZyb20gXCJmYWJyaWNcIjtcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBmcm9tRXZlbnQsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgTGF5b3V0RWRpdENvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9wb3B1cHMvbGF5b3V0LWVkaXQtY29uZmlybWF0aW9uL2xheW91dC1lZGl0LWNvbmZpcm1hdGlvbi5jb21wb25lbnRcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImZpeHR1cmUtdGVtcGxhdGUtdHJlZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZml4dHVyZS10ZW1wbGF0ZS10cmVlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9maXh0dXJlLXRlbXBsYXRlLXRyZWUuY29tcG9uZW50LnNjc3NcIixcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVUcmVlQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICBASW5wdXQoKSB2aWV3TW9kZTogXCJncm91cFwiIHwgXCJtYXN0ZXJcIiA9IFwiZ3JvdXBcIjtcclxuICBASW5wdXQoKSBjbGllbnRJZD86IHN0cmluZzsgLy8gVXNlZCB0byBmZXRjaCBhbGwgbWFzdGVycyB3aGVuIG1vZGUgaXMgc2V0IHRvIGdyb3VwLlxyXG4gIEBJbnB1dCgpIG1hc3RlckZpeHR1cmVEYXRhPzogYW55OyAvLyBSZXF1aXJlZCB3aGVuIHZpZXdNb2RlIGlzIHNldCB0byBtYXN0ZXIuXHJcbiAgQElucHV0KCkgYWxsRml4dHVyZT86IGFueVtdOyAvLyBSZXF1aXJlZCB3aGVuIHZpZXdNb2RlIGlzIHNldCB0byBzdG9yZS5cclxuXHJcbiAgQFZpZXdDaGlsZChcInRlbXBsYXRlQ2FudmFzXCIsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIGNhbnZhc0VsITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XHJcbiAgY2FudmFzITogZmFicmljLkNhbnZhcztcclxuXHJcbiAgdmVydGljYWxNYXJnaW4gPSAoMS4yNSAvIDEwMCkgKiB0aGlzLnRvUGl4ZWxzKDE1MjQsIFwibW1cIik7XHJcbiAgY2RuVXJsOiBzdHJpbmc7XHJcblxyXG4gIGFsbE1hc3RlclRlbXBsYXRlczogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZE1hc3RlclRlbXBsYXRlczogYW55W10gPSBbXTtcclxuICBzdWJUZW1wbGF0ZXM6IGFueVtdID0gW107XHJcblxyXG4gIHNlbGVjdGVkR3JvdXBOYW1lOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRNYXN0ZXJJZDogc3RyaW5nO1xyXG5cclxuICBpc1BhZ2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcmV2ZW50Q2xpY2s6IGJvb2xlYW4gPSBmYWxzZTsgLy8gRmxhZyB1c2VkIHRvIHJlc3RyaWN0IGZ1cnRoZXIgY2xpY2tzIG9uIGNhbnZhcyBpdGVtcyB3aGlsZSBhbiBBUEkgY2FsbCBpcyBpbiBwcm9ncmVzcy5cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzdG9yZUJ1aWxkZXJTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgbmdiTW9kYWw6IE5nYk1vZGFsLFxyXG4gICkge1xyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB0aGlzLmNkblVybCA9IGUucGxhbm9ncmFtQ0ROO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbnZhcyA9IG5ldyBmYWJyaWMuQ2FudmFzKHRoaXMuY2FudmFzRWw/Lm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgc2VsZWN0aW9uRnVsbHlDb250YWluZWQ6IHRydWUsXHJcbiAgICAgIHBlclBpeGVsVGFyZ2V0RmluZDogdHJ1ZSxcclxuICAgICAgdGFyZ2V0RmluZFRvbGVyYW5jZTogNSxcclxuICAgICAgaGVpZ2h0OiA2MDAsXHJcbiAgICAgIHdpZHRoOiA4MDAsXHJcbiAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5yZXNpemVDYW52YXNUb1BhcmVudFNpemUoKTtcclxuXHJcbiAgICBmcm9tRXZlbnQod2luZG93LCBcInJlc2l6ZVwiKVxyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlc2l6ZUNhbnZhc1RvUGFyZW50U2l6ZSgpKTtcclxuXHJcbiAgICB0aGlzLnNldHVwWm9vbUhhbmRsZXJzKCk7XHJcblxyXG4gICAgdGhpcy5idWlsZFRyZWVWaWV3KCk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTpkb3duXCIsIGFzeW5jIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBwYXJlbnQgPSBvcHQudGFyZ2V0IGFzIGFueTtcclxuICAgICAgY29uc3QgY2hpbGROYW1lID0gb3B0LnN1YlRhcmdldHM/LlswXT8ubmFtZTtcclxuXHJcbiAgICAgIGlmICghY2hpbGROYW1lKSByZXR1cm47XHJcblxyXG4gICAgICBpZiAoY2hpbGROYW1lID09PSBcImVkaXRJY29uXCIpIHtcclxuICAgICAgICBpZiAoIShhd2FpdCB0aGlzLmNvbmZpcm1FZGl0KHBhcmVudC5zdG9yZUNvdW50KSkpIHJldHVybjtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgIFtcIi9tYW5hZ2UvcGxhbm9ncmFtL2ZpeHR1cmUtdGVtcGxhdGUvYmFzaWMtZGV0YWlsc1wiXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICAgICAgICB0ZW1wbGF0ZUlkOiBwYXJlbnQuZml4dHVyZUlkLFxyXG4gICAgICAgICAgICAgIGlzRWRpdDogdHJ1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNoaWxkTmFtZSA9PT0gXCJjb3B5SWNvblwiKSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID1cclxuICAgICAgICAgIHBhcmVudC50ZW1wbGF0ZVR5cGUgPT09IFwibWFzdGVyXCIgPyBwYXJlbnQgOiBvcHQuc3ViVGFyZ2V0cz8uWzBdLmdyb3VwO1xyXG4gICAgICAgIHRoaXMub25EdXBsaWNhdGUodGFyZ2V0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb25maXJtRWRpdChjb3VudDogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAoY291bnQgPD0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubmdiTW9kYWwub3BlbihMYXlvdXRFZGl0Q29uZmlybWF0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aXRsZSA9IGBFZGl0IHRlbXBsYXRlYDtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPSBgWW91IGFyZSBhYm91dCB0byBlZGl0IGFuIGFjdGl2ZSB0ZW1wbGF0ZS4gUGxlYXNlIHJldmlldyBhbmQgcHVibGlzaCB0aGUgY2hhbmdlc2A7XHJcbiAgICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjxib29sZWFuPigocmVzdWx0KSA9PiByZXN1bHQgPT09IFwib2tcIik7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBidWlsZFRyZWVWaWV3KCkge1xyXG4gICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMudmlld01vZGUgPT09IFwiZ3JvdXBcIiAmJiB0aGlzLmNsaWVudElkKSB7XHJcbiAgICAgIHRoaXMuZ2V0TWFzdGVyVGVtcGxhdGVMaXN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudmlld01vZGUgPT09IFwibWFzdGVyXCIgJiYgdGhpcy5tYXN0ZXJGaXh0dXJlRGF0YSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgPSB0aGlzLm1hc3RlckZpeHR1cmVEYXRhLl9pZDtcclxuXHJcbiAgICAgIGNvbnN0IGNhbnZhc1dpZHRoID0gdGhpcy5jYW52YXMuZ2V0V2lkdGgoKTtcclxuICAgICAgbGV0IHggPSBjYW52YXNXaWR0aCAvIDI7XHJcbiAgICAgIGxldCB5ID0gNTA7XHJcbiAgICAgIHRoaXMucmVuZGVyTWFzdGVyRml4dHVyZXMoeCwgeSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRNYXN0ZXJUZW1wbGF0ZUxpc3QoKSB7XHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2VcclxuICAgICAgLmdldFRlbXBsYXRlVHJlZUxpc3QoeyBjbGllbnRJZDogdGhpcy5jbGllbnRJZCB9KVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuYWxsTWFzdGVyVGVtcGxhdGVzID0gcmVzPy5kYXRhID8/IFtdO1xyXG5cclxuICAgICAgICAgIC8vIE9uY2UgdGhlIG1hc3RlciB0ZW1wbGF0ZSBpcyBmZXRjaGVkLCByZW5kZXIgdGhlIGdyb3VwIG5hbWVzLlxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJHcm91cE5hbWVzKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJAQCBnZXRNYXN0ZXJUZW1wbGF0ZUxpc3QgW0VSUl06IFwiLCBlcnIpO1xyXG4gICAgICAgICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldHVwWm9vbUhhbmRsZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTp3aGVlbFwiLCAob3B0OiBmYWJyaWMuVEV2ZW50PFdoZWVsRXZlbnQ+KSA9PiB7XHJcbiAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuXHJcbiAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSB7XHJcbiAgICAgICAgY29uc3QgZGVsdGEgPSBlLmRlbHRhWTtcclxuICAgICAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgICAgICB6b29tICo9IDAuOTk1ICoqIGRlbHRhO1xyXG5cclxuICAgICAgICB6b29tID0gTWF0aC5tYXgoMC4wNSwgTWF0aC5taW4oem9vbSwgNSkpO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcy56b29tVG9Qb2ludChcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgeDogZS5vZmZzZXRYLFxyXG4gICAgICAgICAgICB5OiBlLm9mZnNldFksXHJcbiAgICAgICAgICB9IGFzIGZhYnJpYy5Qb2ludCxcclxuICAgICAgICAgIHpvb20sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICBsZXQgbGFzdFBvc1ggPSAwO1xyXG4gICAgbGV0IGxhc3RQb3NZID0gMDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOmRvd25cIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghb3B0LnRhcmdldCkge1xyXG4gICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuICAgICAgICBsYXN0UG9zWCA9IGUuY2xpZW50WDtcclxuICAgICAgICBsYXN0UG9zWSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTptb3ZlXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXNEcmFnZ2luZyAmJiB0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSkge1xyXG4gICAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuICAgICAgICBjb25zdCB2cHQgPSB0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybTtcclxuICAgICAgICB2cHRbNF0gKz0gZS5jbGllbnRYIC0gbGFzdFBvc1g7XHJcbiAgICAgICAgdnB0WzVdICs9IGUuY2xpZW50WSAtIGxhc3RQb3NZO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICBsYXN0UG9zWCA9IGUuY2xpZW50WDtcclxuICAgICAgICBsYXN0UG9zWSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTp1cFwiLCAoKSA9PiB7XHJcbiAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jYW52YXMuc2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgem9vbUluKCkge1xyXG4gICAgbGV0IHpvb20gPSB0aGlzLmNhbnZhcy5nZXRab29tKCk7XHJcbiAgICBjb25zdCB0YXJnZXRab29tID0gTWF0aC5taW4oem9vbSArIDAuMiwgMyk7XHJcbiAgICB0aGlzLnNtb290aFpvb20odGFyZ2V0Wm9vbSk7XHJcbiAgfVxyXG5cclxuICB6b29tT3V0KCkge1xyXG4gICAgbGV0IHpvb20gPSB0aGlzLmNhbnZhcy5nZXRab29tKCk7XHJcbiAgICBjb25zdCB0YXJnZXRab29tID0gTWF0aC5tYXgoem9vbSAtIDAuMiwgMC4yKTtcclxuICAgIHRoaXMuc21vb3RoWm9vbSh0YXJnZXRab29tKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc21vb3RoWm9vbSh0YXJnZXRab29tOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGNlbnRlciA9IG5ldyBmYWJyaWMuUG9pbnQoXHJcbiAgICAgIHRoaXMuY2FudmFzLmdldFdpZHRoKCkgLyAyLFxyXG4gICAgICB0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKSAvIDIsXHJcbiAgICApO1xyXG4gICAgY29uc3QgY3VycmVudFpvb20gPSB0aGlzLmNhbnZhcy5nZXRab29tKCk7XHJcbiAgICBjb25zdCBzdGVwcyA9IDEwO1xyXG4gICAgY29uc3Qgc3RlcFNpemUgPSAodGFyZ2V0Wm9vbSAtIGN1cnJlbnRab29tKSAvIHN0ZXBzO1xyXG4gICAgbGV0IHN0ZXAgPSAwO1xyXG5cclxuICAgIGNvbnN0IGFuaW1hdGUgPSAoKSA9PiB7XHJcbiAgICAgIGlmIChzdGVwIDwgc3RlcHMpIHtcclxuICAgICAgICB0aGlzLmNhbnZhcy56b29tVG9Qb2ludChjZW50ZXIsIGN1cnJlbnRab29tICsgc3RlcFNpemUgKiAoc3RlcCArIDEpKTtcclxuICAgICAgICBzdGVwKys7XHJcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGFuaW1hdGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnpvb21Ub1BvaW50KGNlbnRlciwgdGFyZ2V0Wm9vbSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgYW5pbWF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVzaXplQ2FudmFzVG9QYXJlbnRTaXplKCkge1xyXG4gICAgY29uc3QgY2FudmFzQ29sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgIFwidHJlZS1jYW52YXMtY2FyZFwiLFxyXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmIChjYW52YXNDb2wpIHtcclxuICAgICAgY29uc3Qgd2lkdGggPSBjYW52YXNDb2wub2Zmc2V0V2lkdGggLSAzMjtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gY2FudmFzQ29sLm9mZnNldEhlaWdodCAtIDMyO1xyXG4gICAgICB0aGlzLmNoYW5nZUNhbnZhc1NpemUod2lkdGgsIGhlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VDYW52YXNTaXplKG5ld1dpZHRoOiBudW1iZXIsIG5ld0hlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCBjYW52YXNFbGVtZW50ID0gdGhpcy5jYW52YXNFbC5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIGNhbnZhc0VsZW1lbnQud2lkdGggPSBuZXdXaWR0aDtcclxuICAgIGNhbnZhc0VsZW1lbnQuaGVpZ2h0ID0gbmV3SGVpZ2h0O1xyXG5cclxuICAgIHRoaXMuY2FudmFzLnNldFdpZHRoKG5ld1dpZHRoKTtcclxuICAgIHRoaXMuY2FudmFzLnNldEhlaWdodChuZXdIZWlnaHQpO1xyXG4gICAgdGhpcy5jYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICB0b1BpeGVscyh2YWx1ZTogbnVtYmVyLCB1bml0OiBzdHJpbmcsIGRwaSA9IDIuOCkge1xyXG4gICAgbGV0IHBpeGVsczogbnVtYmVyO1xyXG5cclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgcGl4ZWxzID0gKHZhbHVlIC8gMjUuNCkgKiBkcGk7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICBwaXhlbHMgPSB2YWx1ZSAqIDEyICogZHBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE51bWJlcihwaXhlbHMudG9GaXhlZCgyKSk7XHJcbiAgfVxyXG5cclxuICByZW5kZXJHcm91cE5hbWVzKCkge1xyXG4gICAgY29uc3QgbWFzdGVyR3JvdXBOYW1lcyA9IEFycmF5LmZyb20oXHJcbiAgICAgIG5ldyBTZXQoXHJcbiAgICAgICAgdGhpcy5hbGxNYXN0ZXJUZW1wbGF0ZXNcclxuICAgICAgICAgIC5maWx0ZXIoKGYpID0+IGYudGVtcGxhdGVUeXBlID09PSBcIm1hc3RlclwiICYmIGYudGVtcGxhdGVHcm91cE5hbWUpXHJcbiAgICAgICAgICAubWFwKChtKSA9PiBtLnRlbXBsYXRlR3JvdXBOYW1lKSxcclxuICAgICAgKSxcclxuICAgICk7XHJcblxyXG4gICAgaWYgKCFtYXN0ZXJHcm91cE5hbWVzLmxlbmd0aCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBcIkBAIH4gcmVuZGVyR3JvdXBOYW1lcyBbRVJSXTogKG5vZSBncm91cCBuYW1lcyBmb3VuZCk6IFwiLFxyXG4gICAgICAgIG1hc3Rlckdyb3VwTmFtZXMsXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID8/PSBtYXN0ZXJHcm91cE5hbWVzWzBdO1xyXG5cclxuICAgIGNvbnN0IHkgPSA1MDtcclxuICAgIGNvbnN0IGdyb3VwU3BhY2luZyA9IDIwO1xyXG5cclxuICAgIGNvbnN0IGdyb3VwczogZmFicmljLkdyb3VwW10gPSBbXTtcclxuICAgIGxldCB0b3RhbFdpZHRoID0gMDtcclxuXHJcbiAgICBtYXN0ZXJHcm91cE5hbWVzLmZvckVhY2goKGcpID0+IHtcclxuICAgICAgaWYgKCFnKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IGxhYmVsID0gZztcclxuICAgICAgY29uc3QgZm9udFNpemUgPSAxMjtcclxuICAgICAgY29uc3QgcGFkZGluZ1ggPSAzMDtcclxuICAgICAgY29uc3QgcGFkZGluZ1kgPSAxNjtcclxuXHJcbiAgICAgIGNvbnN0IG1haW5UZXh0ID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KGxhYmVsLCB7XHJcbiAgICAgICAgZm9udFNpemU6IGZvbnRTaXplLFxyXG4gICAgICAgIGZpbGw6IFwiIzM2M0Y3MlwiLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXIsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgICBvcmlnaW5ZOiBcInRvcFwiLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHJlY3RXaWR0aCA9IG1haW5UZXh0LndpZHRoISArIDIgKiBwYWRkaW5nWDtcclxuICAgICAgY29uc3QgcmVjdEhlaWdodCA9IG1haW5UZXh0LmhlaWdodCEgKyAyICogcGFkZGluZ1k7XHJcbiAgICAgIGNvbnN0IHJlY3RMZWZ0ID0gMzA7XHJcbiAgICAgIGNvbnN0IHJlY3RUb3AgPSAxODtcclxuXHJcbiAgICAgIGNvbnN0IG1haW5SZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICByeDogNixcclxuICAgICAgICByeTogNixcclxuICAgICAgICB3aWR0aDogcmVjdFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICBmaWxsOiB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCA/IFwiI0Y4RjlGQ1wiIDogXCIjZmZmXCIsXHJcbiAgICAgICAgc3Ryb2tlOiB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCA/IFwiI0FGQjVEOVwiIDogXCIjRDBENUREXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgbGVmdDogcmVjdExlZnQsXHJcbiAgICAgICAgdG9wOiByZWN0VG9wLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG1haW5UZXh0LnNldCh7XHJcbiAgICAgICAgbGVmdDogcmVjdExlZnQgKyBwYWRkaW5nWCxcclxuICAgICAgICB0b3A6IHJlY3RUb3AgKyAocmVjdEhlaWdodCAtIG1haW5UZXh0LmhlaWdodCEpIC8gMixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBidWJibGVXID0gMzY7XHJcbiAgICAgIGNvbnN0IGJ1YmJsZUggPSAxODtcclxuICAgICAgY29uc3QgYnViYmxlTGVmdCA9IHJlY3RMZWZ0ICsgcmVjdFdpZHRoIC8gMiAtIGJ1YmJsZVcgLyAyO1xyXG4gICAgICBjb25zdCBidWJibGVUb3AgPSByZWN0SGVpZ2h0ICsgYnViYmxlSCAvIDI7XHJcblxyXG4gICAgICBjb25zdCBidWJibGVSZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICByeDogNCxcclxuICAgICAgICByeTogNCxcclxuICAgICAgICB3aWR0aDogYnViYmxlVyxcclxuICAgICAgICBoZWlnaHQ6IGJ1YmJsZUgsXHJcbiAgICAgICAgZmlsbDogdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9PT0gbGFiZWwgPyBcIiM4Mzg5YzVcIiA6IFwiIzk4QTJCM1wiLFxyXG4gICAgICAgIGxlZnQ6IGJ1YmJsZUxlZnQsXHJcbiAgICAgICAgdG9wOiBidWJibGVUb3AsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZ3JvdXBDb3VudCA9IHRoaXMuYWxsTWFzdGVyVGVtcGxhdGVzLmZpbHRlcihcclxuICAgICAgICAobSkgPT4gbS50ZW1wbGF0ZUdyb3VwTmFtZSA9PT0gZyAmJiBtLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIixcclxuICAgICAgKS5sZW5ndGg7XHJcblxyXG4gICAgICBjb25zdCBudW1iZXJUZXh0ID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KGdyb3VwQ291bnQudG9TdHJpbmcoKSwge1xyXG4gICAgICAgIGZvbnRTaXplOiA4LFxyXG4gICAgICAgIGZpbGw6IFwiI2ZmZlwiLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXIsIEFyaWFsLCBzYW5zLXNlcmlmXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI3MDBcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgbGVmdDogYnViYmxlTGVmdCArIGJ1YmJsZVcgLyAyLFxyXG4gICAgICAgIHRvcDogYnViYmxlVG9wICsgYnViYmxlSCAvIDIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFxyXG4gICAgICAgIFttYWluUmVjdCwgbWFpblRleHQsIGJ1YmJsZVJlY3QsIG51bWJlclRleHRdLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxlZnQ6IDAsXHJcbiAgICAgICAgICB0b3A6IDAsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgICAgICB9LFxyXG4gICAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgICBncm91cE5hbWU6IHN0cmluZztcclxuICAgICAgICBtYXN0ZXJDb3VudDogbnVtYmVyO1xyXG4gICAgICAgIG1haW5SZWN0OiBmYWJyaWMuUmVjdDtcclxuICAgICAgICBidWJibGVSZWN0OiBmYWJyaWMuUmVjdDtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGdyb3VwLmdyb3VwTmFtZSA9IGxhYmVsO1xyXG4gICAgICBncm91cC5tYXN0ZXJDb3VudCA9IGdyb3VwQ291bnQ7XHJcbiAgICAgIGdyb3VwLm1haW5SZWN0ID0gbWFpblJlY3Q7XHJcbiAgICAgIGdyb3VwLmJ1YmJsZVJlY3QgPSBidWJibGVSZWN0O1xyXG5cclxuICAgICAgZ3JvdXAub24oXCJtb3VzZWRvd25cIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPT09IGxhYmVsKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByZXZlbnRDbGljaykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgcHJldkdyb3VwID0gdGhpcy5jYW52YXNcclxuICAgICAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgICAgIC5maW5kKFxyXG4gICAgICAgICAgICAob2JqKSA9PlxyXG4gICAgICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIGZhYnJpYy5Hcm91cCAmJlxyXG4gICAgICAgICAgICAgIChvYmogYXMgYW55KS5ncm91cE5hbWUgPT09IHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUsXHJcbiAgICAgICAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgICAgIG1haW5SZWN0OiBmYWJyaWMuUmVjdDtcclxuICAgICAgICAgIGJ1YmJsZVJlY3Q6IGZhYnJpYy5SZWN0O1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChwcmV2R3JvdXApIHtcclxuICAgICAgICAgIHByZXZHcm91cC5tYWluUmVjdC5zZXQoeyBmaWxsOiBcIiNmZmZmZmZcIiwgc3Ryb2tlOiBcIiNEMEQ1RERcIiB9KTtcclxuICAgICAgICAgIHByZXZHcm91cC5idWJibGVSZWN0LnNldCh7IGZpbGw6IFwiIzk4QTJCM1wiIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ3JvdXAubWFpblJlY3Quc2V0KHsgZmlsbDogXCIjRjhGOUZDXCIsIHN0cm9rZTogXCIjQUZCNUQ5XCIgfSk7XHJcbiAgICAgICAgZ3JvdXAuYnViYmxlUmVjdC5zZXQoeyBmaWxsOiBcIiM4Mzg5YzVcIiB9KTtcclxuXHJcbiAgICAgICAgLy8gQ2xlYXIgYm90aCBtYXN0ZXJzIGFuZCBzdWJzIGFycm93cywgYmVmb3JlIHJlbmRlcmluZyBuZXcgc2V0LlxyXG4gICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZEdyb3VwTmFtZSk7XHJcbiAgICAgICAgdGhpcy5jbGVhckFycm93QnlJZCh0aGlzLnNlbGVjdGVkTWFzdGVySWQpO1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID0gbGFiZWw7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG5cclxuICAgICAgICBjb25zdCB0YXJnZXQgPSBvcHQudGFyZ2V0O1xyXG4gICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0IGluc3RhbmNlb2YgZmFicmljLkdyb3VwKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnRHcm91cCA9IHRhcmdldCBhcyBmYWJyaWMuR3JvdXA7XHJcbiAgICAgICAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShwYXJlbnRHcm91cCk7XHJcbiAgICAgICAgICB0aGlzLnJlbmRlck1hc3RlckZpeHR1cmVzKGd4LCBneSArIDUwLCBwYXJlbnRHcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGdyb3Vwcy5wdXNoKGdyb3VwKTtcclxuICAgICAgdG90YWxXaWR0aCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0b3RhbFdpZHRoIC09IGdyb3VwU3BhY2luZztcclxuXHJcbiAgICBjb25zdCBjYW52YXNXaWR0aCA9IHRoaXMuY2FudmFzLmdldFdpZHRoKCk7XHJcbiAgICBsZXQgeCA9IChjYW52YXNXaWR0aCAtIHRvdGFsV2lkdGgpIC8gMjtcclxuXHJcbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgZ3JvdXAuc2V0KHsgbGVmdDogeCwgdG9wOiB5IH0pO1xyXG4gICAgICB4ICs9IGdyb3VwLndpZHRoISArIGdyb3VwU3BhY2luZztcclxuICAgICAgdGhpcy5jYW52YXMuYWRkKGdyb3VwKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBGYWJyaWNHcm91cCA9IGdyb3Vwc1swXTtcclxuXHJcbiAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShzZWxlY3RlZEdyb3VwRmFicmljR3JvdXApO1xyXG4gICAgdGhpcy5yZW5kZXJNYXN0ZXJGaXh0dXJlcyhneCwgZ3kgKyA1MCwgc2VsZWN0ZWRHcm91cEZhYnJpY0dyb3VwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbmRlck1hc3RlckZpeHR1cmVzKHg6IG51bWJlciwgeTogbnVtYmVyLCBncm91cD86IGFueSkge1xyXG4gICAgaWYgKHRoaXMudmlld01vZGUgPT09IFwibWFzdGVyXCIpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlclRlbXBsYXRlcyA9IFt0aGlzLm1hc3RlckZpeHR1cmVEYXRhXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gdGhpcy5tYXN0ZXJGaXh0dXJlRGF0YS5faWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWFzdGVyVGVtcGxhdGVzID0gdGhpcy5hbGxNYXN0ZXJUZW1wbGF0ZXMuZmlsdGVyKFxyXG4gICAgICAgIChmKSA9PlxyXG4gICAgICAgICAgZi50ZW1wbGF0ZVR5cGUgPT09IFwibWFzdGVyXCIgJiZcclxuICAgICAgICAgIGYudGVtcGxhdGVHcm91cE5hbWUgPT09IHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUsXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCA9IHRoaXMuc2VsZWN0ZWRNYXN0ZXJUZW1wbGF0ZXNbMF0uX2lkO1xyXG4gICAgICB0aGlzLmNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXMoXCJtYXN0ZXJcIik7XHJcbiAgICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcInN1YlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYXN0ZXJzOiBhbnlbXSA9IGF3YWl0IHRoaXMucmVuZGVyRml4dHVyZXMoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJUZW1wbGF0ZXMsXHJcbiAgICAgIHgsXHJcbiAgICAgIHksXHJcbiAgICApO1xyXG5cclxuICAgIGlmICh0aGlzLnZpZXdNb2RlICE9PSBcIm1hc3RlclwiKVxyXG4gICAgICBtYXN0ZXJzLmZvckVhY2goKG0pID0+IHRoaXMuZHJhd0Fycm93KGdyb3VwLCBtLCBncm91cC5ncm91cE5hbWUpKTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZE1hc3RlckZhYnJpY0dyb3VwID0gbWFzdGVyc1swXTtcclxuICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKHNlbGVjdGVkTWFzdGVyRmFicmljR3JvdXApO1xyXG4gICAgdGhpcy5yZW5kZXJTdWJGaXh0dXJlcyhzZWxlY3RlZE1hc3RlckZhYnJpY0dyb3VwLCBneCwgZ3kgKyA1MCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJTdWJGaXh0dXJlcyhncm91cDogYW55LCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlXHJcbiAgICAgIC5nZXRUZW1wbGF0ZVRyZWVMaXN0KHsgbWFzdGVySWQ6IHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCB9KVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3ViVGVtcGxhdGVzID0gcmVzPy5kYXRhID8/IFtdO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc3ViVGVtcGxhdGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdWI6IGFueVtdID0gYXdhaXQgdGhpcy5yZW5kZXJGaXh0dXJlcyhcclxuICAgICAgICAgICAgICB0aGlzLnN1YlRlbXBsYXRlcyxcclxuICAgICAgICAgICAgICB4LFxyXG4gICAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBzdWIuZm9yRWFjaCgobSkgPT4gdGhpcy5kcmF3QXJyb3coZ3JvdXAsIG0sIGdyb3VwLmZpeHR1cmVJZCkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoXCJNYXN0ZXIgZG9lcyBub3QgaGF2ZSBhbnkgdmFyaWFudFwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucHJldmVudENsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJAQCBnZXRNYXN0ZXJUZW1wbGF0ZUxpc3QgW0VSUl06IFwiLCBlcnIpO1xyXG4gICAgICAgICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbmRlckZpeHR1cmVzKFxyXG4gICAgdGVtcGxhdGVzOiBhbnlbXSxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIHBhcmVudEZhYnJpYz86IGFueSxcclxuICApIHtcclxuICAgIGNvbnN0IGdyb3VwU3BhY2luZyA9IDIwO1xyXG5cclxuICAgIHR5cGUgRml4dHVyZUdyb3VwID0gZmFicmljLkdyb3VwICYge1xyXG4gICAgICBmaXh0dXJlSWQ6IHN0cmluZztcclxuICAgICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiO1xyXG4gICAgICBncm91cE5hbWU6IHN0cmluZztcclxuICAgICAgdGVtcGxhdGVUeXBlOiBzdHJpbmc7XHJcbiAgICAgIG5hbWU6IHN0cmluZztcclxuICAgICAgcGFyZW50RmFicmljOiBhbnk7XHJcbiAgICAgIHN0b3JlQ291bnQ6IG51bWJlcjtcclxuICAgIH07XHJcblxyXG4gICAgLy8gUHJvY2VzcyBhbGwgdGVtcGxhdGVzIGluIHBhcmFsbGVsIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uXHJcbiAgICBjb25zdCBncm91cHM6IEZpeHR1cmVHcm91cFtdID0gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgIHRlbXBsYXRlcy5tYXAoYXN5bmMgKG1mKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXNNYXN0ZXIgPSBtZi50ZW1wbGF0ZVR5cGUgPT09IFwibWFzdGVyXCI7XHJcblxyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgICAgbWYuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgbWYuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgcmFkaXVzID0gMztcclxuXHJcbiAgICAgICAgbGV0IG1haW5Db250YWluZXJIZWlnaHQgPSBoZWlnaHQgKyAxO1xyXG4gICAgICAgIGlmIChpc01hc3Rlcikge1xyXG4gICAgICAgICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgICAgICAgIG1haW5Db250YWluZXJIZWlnaHQgPSBoZWlnaHQgLSB0b3BIZWlnaHQgLyAyICsgMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1haW5Db250YWluZXJUb3AgPSBpc01hc3RlclxyXG4gICAgICAgICAgPyB5ICsgKCgxNSAvIDEwMCkgKiBoZWlnaHQpIC8gMiAtIDFcclxuICAgICAgICAgIDogeSAtIDE7XHJcblxyXG4gICAgICAgIGNvbnN0IG1haW5Db250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogeCxcclxuICAgICAgICAgIHRvcDogbWFpbkNvbnRhaW5lclRvcCxcclxuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICAgIGhlaWdodDogbWFpbkNvbnRhaW5lckhlaWdodCxcclxuICAgICAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgICAgICByeTogcmFkaXVzLFxyXG4gICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgdG9wV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICAgICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgICAgICBjb25zdCB0b3BYID0geCArICh3aWR0aCAtIHRvcFdpZHRoKSAvIDI7XHJcbiAgICAgICAgY29uc3QgdG9wWSA9IHkgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgICAgICBjb25zdCB0b3BDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogdG9wWCxcclxuICAgICAgICAgIHRvcDogdG9wWSxcclxuICAgICAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogdG9wSGVpZ2h0LFxyXG4gICAgICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBpbm5lckJveEhlaWdodCA9IHRvcEhlaWdodCAvIDI7XHJcbiAgICAgICAgY29uc3QgaW5uZXJUb3BCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgICBgTSAke3RvcFggKyByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGggLSByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgIFEgJHt0b3BYfSAke3RvcFl9ICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBaYCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGlubmVyVG9wVGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgICAgIGBBc3NpZ25lZCB0byAke21mLnN0b3JlQ291bnQgPz8gMH0gU3RvcmVzYCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbGVmdDogdG9wWCArIHRvcFdpZHRoIC8gMixcclxuICAgICAgICAgICAgdG9wOiB0b3BZICsgaW5uZXJCb3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGlubmVyQm94SGVpZ2h0LFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlY29uZEJveFkgPSB0b3BZICsgaW5uZXJCb3hIZWlnaHQ7XHJcblxyXG4gICAgICAgIGxldCBpbm5lckJvdHRvbUJveDogZmFicmljLlBhdGg7XHJcblxyXG4gICAgICAgIGlmIChpc01hc3Rlcikge1xyXG4gICAgICAgICAgaW5uZXJCb3R0b21Cb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgICAgIGBNICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGggLSByYWRpdXN9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFl9ICR7dG9wWCArIHRvcFdpZHRofSAke1xyXG4gICAgICAgICAgICBzZWNvbmRCb3hZICsgcmFkaXVzXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7XHJcbiAgICAgICAgICAgIHRvcFggKyB0b3BXaWR0aCAtIHJhZGl1c1xyXG4gICAgICAgICAgfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgUSAke3RvcFh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke3RvcFh9ICR7XHJcbiAgICAgICAgICAgIHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c1xyXG4gICAgICAgICAgfSBcclxuICAgICAgICAgIEwgJHt0b3BYfSAke3NlY29uZEJveFkgKyByYWRpdXN9IFxyXG4gICAgICAgICAgUSAke3RvcFh9ICR7c2Vjb25kQm94WX0gJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFl9IFpgLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZmlsbDogXCIjMzYzRjcyXCIsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM3MTdCQkNcIixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlubmVyQm90dG9tQm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICAgICAgICBgTSAke3RvcFh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7XHJcbiAgICAgICAgICAgIHRvcFggKyB0b3BXaWR0aCAtIHJhZGl1c1xyXG4gICAgICAgICAgfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgUSAke3RvcFh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke3RvcFh9ICR7XHJcbiAgICAgICAgICAgIHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c1xyXG4gICAgICAgICAgfSBcclxuICAgICAgICAgIEwgJHt0b3BYfSAke3NlY29uZEJveFl9IFpgLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgZmlsbDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgZm9udFNpemUgPSA1O1xyXG4gICAgICAgIGxldCBpbm5lckJvdHRvbVRleHQ7XHJcblxyXG4gICAgICAgIC8vID8gYCR7bWY/LmZpeHR1cmVOYW1lfSAtICR7bWY/LmZpeHR1cmVDYXRlZ29yeX0gLSAke21mPy5maXh0dXJlV2lkdGgudmFsdWV9ICR7bWY/LmZpeHR1cmVXaWR0aC51bml0fWBcclxuICAgICAgICBjb25zdCB0ZXh0Q29udGVudCA9IGlzTWFzdGVyXHJcbiAgICAgICAgICA/IG1mPy5maXh0dXJlTmFtZS5pbmNsdWRlcyhcImZ0XCIpXHJcbiAgICAgICAgICAgID8gYCR7bWY/LmZpeHR1cmVOYW1lfWBcclxuICAgICAgICAgICAgOiBgJHttZj8uZml4dHVyZU5hbWV9IC0gJHttZj8uZml4dHVyZUNhdGVnb3J5fSAtICR7bWY/LmZpeHR1cmVXaWR0aC52YWx1ZX0gJHttZj8uZml4dHVyZVdpZHRoLnVuaXR9YFxyXG4gICAgICAgICAgOiBgJHttZj8uZml4dHVyZU5hbWV9YDtcclxuXHJcbiAgICAgICAgY29uc3QgY3JlYXRlQm90dG9tVGV4dCA9IChmczogYW55KSA9PlxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHRDb250ZW50LCB7XHJcbiAgICAgICAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgIGZpbGw6IFwiI0ZGRkZGRlwiLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICBpbm5lckJvdHRvbVRleHQgPSBjcmVhdGVCb3R0b21UZXh0KGZvbnRTaXplKTtcclxuICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICB9IHdoaWxlIChpbm5lckJvdHRvbVRleHQuaGVpZ2h0ID4gaW5uZXJCb3hIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWlkV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICAgICAgY29uc3QgbWlkSGVpZ2h0ID0gKDc3IC8gMTAwKSAqIGhlaWdodDtcclxuICAgICAgICBjb25zdCBtaWRYID0geCArICh3aWR0aCAtIG1pZFdpZHRoKSAvIDI7XHJcbiAgICAgICAgY29uc3QgbWlkWSA9IHRvcFkgKyB0b3BIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgICAgICBjb25zdCBtaWRDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgIHRvcDogbWlkWSxcclxuICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogbWlkSGVpZ2h0LFxyXG4gICAgICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBzaGVsZkNvdW50ID0gbWYuc2hlbGZDb25maWc/Lmxlbmd0aDtcclxuICAgICAgICBjb25zdCBib3hIZWlnaHQgPSBtaWRIZWlnaHQgLyAoc2hlbGZDb3VudCArIDIpO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94WSA9IG1pZFk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICAgICAgYE0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGggLSByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIG1pZFdpZHRofSAke1xyXG4gICAgICAgICAgICAgIGZpcnN0Qm94WSArIHJhZGl1c1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgIFEgJHttaWRYfSAke2ZpcnN0Qm94WX0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gWmAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpbGw6IGlzTWFzdGVyID8gXCIjRUFFQ0Y1XCIgOiBcIiNEQUYxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiI0FGQjVEOVwiIDogXCIjNkJDQUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBUcnVuY2F0ZSBtZi5oZWFkZXIubGFiZWwgd2l0aCBlbGxpcHNpcyBpZiBpdCBleGNlZWRzIHRoZSBhdmFpbGFibGUgd2lkdGhcclxuICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBtZj8uaGVhZGVyPy5sYWJlbCA/PyBcIlwiO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94VGV4dEZvbnRTaXplID0gNztcclxuICAgICAgICBjb25zdCBmaXJzdEJveFRleHRGb250RmFtaWx5ID0gXCJJbnRlclwiO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94VGV4dEZvbnRXZWlnaHQgPSBcIjYwMFwiO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94VGV4dFdpZHRoID0gbWlkV2lkdGggLSA0MDsgLy8gbGVhdmUgc3BhY2UgZm9yIGljb25zIG9uIHJpZ2h0XHJcblxyXG4gICAgICAgIC8vIFRydW5jYXRlIHdpdGggZWxsaXBzaXMgaWYgbmVlZGVkXHJcbiAgICAgICAgbGV0IGRpc3BsYXlMYWJlbCA9IGxhYmVsVGV4dDtcclxuICAgICAgICBpZiAobGFiZWxUZXh0KSB7XHJcbiAgICAgICAgICBsZXQgdGVtcFRleHRib3ggPSBuZXcgZmFicmljLlRleHRib3gobGFiZWxUZXh0LCB7XHJcbiAgICAgICAgICAgIGZvbnRTaXplOiBmaXJzdEJveFRleHRGb250U2l6ZSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogZmlyc3RCb3hUZXh0Rm9udEZhbWlseSxcclxuICAgICAgICAgICAgZm9udFdlaWdodDogZmlyc3RCb3hUZXh0Rm9udFdlaWdodCxcclxuICAgICAgICAgICAgd2lkdGg6IGZpcnN0Qm94VGV4dFdpZHRoLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAvLyBJZiB0aGUgdGV4dCBpcyB0b28gd2lkZSwgdHJ1bmNhdGUgYW5kIGFkZCBlbGxpcHNpc1xyXG4gICAgICAgICAgaWYgKHRlbXBUZXh0Ym94LmhlaWdodCA+IGJveEhlaWdodCkge1xyXG4gICAgICAgICAgICBsZXQgZWxsaXBzaXMgPSBcIi4uLlwiO1xyXG4gICAgICAgICAgICAvLyBCaW5hcnkgc2VhcmNoIGZvciBtYXggZml0dGluZyBsZW5ndGhcclxuICAgICAgICAgICAgbGV0IGxlZnQgPSAwO1xyXG4gICAgICAgICAgICBsZXQgcmlnaHQgPSBsYWJlbFRleHQubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKGxlZnQgPCByaWdodCkge1xyXG4gICAgICAgICAgICAgIGxldCBtaWQgPSBNYXRoLmZsb29yKChsZWZ0ICsgcmlnaHQpIC8gMik7XHJcbiAgICAgICAgICAgICAgbGV0IHRlc3RUZXh0ID0gbGFiZWxUZXh0LnNsaWNlKDAsIG1pZCkgKyBlbGxpcHNpcztcclxuICAgICAgICAgICAgICB0ZW1wVGV4dGJveC5zZXQoeyB0ZXh0OiB0ZXN0VGV4dCB9KTtcclxuICAgICAgICAgICAgICBpZiAodGVtcFRleHRib3guaGVpZ2h0ID4gYm94SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICByaWdodCA9IG1pZDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGVmdCA9IG1pZCArIDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGxlZnQtMSBpcyB0aGUgbWF4IGZpdHRpbmcgbGVuZ3RoXHJcbiAgICAgICAgICAgIGRpc3BsYXlMYWJlbCA9IGxhYmVsVGV4dC5zbGljZSgwLCBNYXRoLm1heCgwLCBsZWZ0IC0gMSkpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmaXJzdEJveFRleHQgPSBuZXcgZmFicmljLlRleHRib3goZGlzcGxheUxhYmVsLCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgNixcclxuICAgICAgICAgIHRvcDogZmlyc3RCb3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIGZvbnRTaXplOiBmaXJzdEJveFRleHRGb250U2l6ZSxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IGZpcnN0Qm94VGV4dEZvbnRGYW1pbHksXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBmaXJzdEJveFRleHRGb250V2VpZ2h0LFxyXG4gICAgICAgICAgZmlsbDogaXNNYXN0ZXIgPyBcIiMzNjNGNzJcIiA6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJsZWZ0XCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IGZpcnN0Qm94VGV4dFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICB0ZXh0QWxpZ246IFwibGVmdFwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBpY29uU2l6ZSA9IDEwO1xyXG4gICAgICAgIGNvbnN0IGljb25TcGFjaW5nID0gNDtcclxuXHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3hUZXh0Qm91bmRzID0gZmlyc3RCb3guZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgICAgY29uc3QgaWNvbnNUb3AgPVxyXG4gICAgICAgICAgZmlyc3RCb3hUZXh0Qm91bmRzLnRvcCArIGZpcnN0Qm94VGV4dEJvdW5kcy5oZWlnaHQgLyAyIC0gaWNvblNpemUgLyAyO1xyXG4gICAgICAgIGNvbnN0IGljb25zUGFkZGluZ1JpZ2h0ID0gNjtcclxuICAgICAgICBjb25zdCBpY29uc1RvdGFsV2lkdGggPSBpY29uU2l6ZSAqIDIgKyBpY29uU3BhY2luZztcclxuICAgICAgICBjb25zdCBpY29uc0xlZnRTdGFydCA9XHJcbiAgICAgICAgICBtaWRYICsgbWlkV2lkdGggLSBpY29uc1RvdGFsV2lkdGggLSBpY29uc1BhZGRpbmdSaWdodDtcclxuXHJcbiAgICAgICAgY29uc3QgZWRpdEljb25MZWZ0ID0gaWNvbnNMZWZ0U3RhcnQ7XHJcbiAgICAgICAgY29uc3QgZWRpdEljb25Ub3AgPSBpY29uc1RvcDtcclxuICAgICAgICBjb25zdCBlZGl0SWNvblBhdGggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgICBcIk03LjEwMzU0IDEuMDYwMzVDNy4yMTE0NSAwLjk1MjQzNiA3LjMzOTU2IDAuODY2ODM0IDcuNDgwNTYgMC44MDg0MzJDNy42MjE1NSAwLjc1MDAzIDcuNzcyNjcgMC43MTk5NyA3LjkyNTI4IDAuNzE5OTdDOC4wNzc5IDAuNzE5OTcgOC4yMjkwMiAwLjc1MDAzIDguMzcwMDEgMC44MDg0MzJDOC41MTEwMSAwLjg2NjgzNCA4LjYzOTEyIDAuOTUyNDM2IDguNzQ3MDMgMS4wNjAzNUM4Ljg1NDk1IDEuMTY4MjYgOC45NDA1NSAxLjI5NjM3IDguOTk4OTUgMS40MzczN0M5LjA1NzM1IDEuNTc4MzcgOS4wODc0MSAxLjcyOTQ4IDkuMDg3NDEgMS44ODIxQzkuMDg3NDEgMi4wMzQ3MSA5LjA1NzM1IDIuMTg1ODMgOC45OTg5NSAyLjMyNjgyQzguOTQwNTUgMi40Njc4MiA4Ljg1NDk1IDIuNTk1OTMgOC43NDcwMyAyLjcwMzg0TDMuMjAwMjQgOC4yNTA2NEwwLjk0MDQzIDguODY2OTVMMS41NTY3NCA2LjYwNzE1TDcuMTAzNTQgMS4wNjAzNVpcIixcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbGVmdDogZWRpdEljb25MZWZ0LFxyXG4gICAgICAgICAgICB0b3A6IGVkaXRJY29uVG9wLFxyXG4gICAgICAgICAgICBzY2FsZVg6IGljb25TaXplIC8gMTAsXHJcbiAgICAgICAgICAgIHNjYWxlWTogaWNvblNpemUgLyAxMCxcclxuICAgICAgICAgICAgZmlsbDogXCJcIixcclxuICAgICAgICAgICAgc3Ryb2tlOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNzA0MzU1LFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJ0b3BcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHN0cm9rZUxpbmVDYXA6IFwicm91bmRcIixcclxuICAgICAgICAgICAgc3Ryb2tlTGluZUpvaW46IFwicm91bmRcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICAoZWRpdEljb25QYXRoIGFzIGFueSkubmFtZSA9IFwiZWRpdEljb25cIjtcclxuXHJcbiAgICAgICAgY29uc3QgY29weUljb25MZWZ0ID0gZWRpdEljb25MZWZ0ICsgaWNvblNpemUgKyBpY29uU3BhY2luZztcclxuICAgICAgICBjb25zdCBjb3B5SWNvblRvcCA9IGVkaXRJY29uVG9wO1xyXG4gICAgICAgIGNvbnN0IGNvcHlJY29uUGF0aCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgIFwiTTIuMDc3MzUgNS45OTA3N0wxLjY2NjQ3IDUuOTkwNzdDMS40NDg1MyA1Ljk5MDc3IDEuMjM5NTIgNS45MDQyIDEuMDg1NDEgNS43NTAwOUMwLjkzMTMwMyA1LjU5NTk4IDAuODQ0NzI3IDUuMzg2OTcgMC44NDQ3MjcgNS4xNjkwM0wwLjg0NDcyNyAxLjQ3MTE2QzAuODQ0NzI3IDEuMjUzMjIgMC45MzEzMDMgMS4wNDQyMSAxLjA4NTQxIDAuODkwMDk4QzEuMjM5NTIgMC43MzU5OTEgMS40NDg1MyAwLjY0OTQxNCAxLjY2NjQ3IDAuNjQ5NDE0TDUuMzY0MzQgMC42NDk0MTRDNS41ODIyOCAwLjY0OTQxNCA1Ljc5MTI5IDAuNzM1OTkxIDUuOTQ1NCAwLjg5MDA5OEM2LjA5OTUxIDEuMDQ0MjEgNi4xODYwOSAxLjI1MzIyIDYuMTg2MDkgMS40NzExNkw2LjE4NjA5IDEuODgyMDRNNC41NDI1OSAzLjUyNTUzTDguMjQwNDYgMy41MjU1M0M4LjY5NDI5IDMuNTI1NTMgOS4wNjIyIDMuODkzNDQgOS4wNjIyIDQuMzQ3MjhMOS4wNjIyIDguMDQ1MTRDOS4wNjIyIDguNDk4OTggOC42OTQyOSA4Ljg2Njg5IDguMjQwNDYgOC44NjY4OUw0LjU0MjU5IDguODY2ODlDNC4wODg3NSA4Ljg2Njg5IDMuNzIwODQgOC40OTg5OCAzLjcyMDg0IDguMDQ1MTRMMy43MjA4NCA0LjM0NzI4QzMuNzIwODQgMy44OTM0NCA0LjA4ODc1IDMuNTI1NTMgNC41NDI1OSAzLjUyNTUzWlwiLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0OiBjb3B5SWNvbkxlZnQsXHJcbiAgICAgICAgICAgIHRvcDogY29weUljb25Ub3AsXHJcbiAgICAgICAgICAgIHNjYWxlWDogaWNvblNpemUgLyAxMCxcclxuICAgICAgICAgICAgc2NhbGVZOiBpY29uU2l6ZSAvIDEwLFxyXG4gICAgICAgICAgICBmaWxsOiBcIlwiLFxyXG4gICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjMzYzRjcyXCIgOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNzA0MzU1LFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJ0b3BcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHN0cm9rZUxpbmVDYXA6IFwicm91bmRcIixcclxuICAgICAgICAgICAgc3Ryb2tlTGluZUpvaW46IFwicm91bmRcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgKGNvcHlJY29uUGF0aCBhcyBhbnkpLm5hbWUgPSBcImNvcHlJY29uXCI7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWx2ZXMgPSBbXTtcclxuICAgICAgICBjb25zdCBzaGVsZkhlaWdodCA9IG1pZEhlaWdodCAtIDIgKiBib3hIZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmIChtZi5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwxXCIpIHtcclxuICAgICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2hlbGYgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBzaGVsZkhlaWdodCxcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gbWY/LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgICAvLyBXcmFwIHRleHQgd2l0aGluIGZpeHR1cmUgd2lkdGgsIHNocmluayBmb250IGlmIG5lZWRlZCB0byBmaXQgd2l0aGluIHNoZWxmIGhlaWdodFxyXG4gICAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gc2hlbGZIZWlnaHQgKiAwLjg7XHJcbiAgICAgICAgICBsZXQgZm9udFNpemVMMSA9IDY7IC8vIHN0YXJ0IHNsaWdodGx5IGxhcmdlcjsgd2lsbCBzaHJpbmsgdG8gZml0XHJcblxyXG4gICAgICAgICAgY29uc3QgY3JlYXRlV3JhcHBlZFRleHRib3ggPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBsZXQgd3JhcHBlZFRleHQgPSBjcmVhdGVXcmFwcGVkVGV4dGJveChmb250U2l6ZUwxKTtcclxuICAgICAgICAgIHdoaWxlICh3cmFwcGVkVGV4dC5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0ICYmIGZvbnRTaXplTDEgPiAyKSB7XHJcbiAgICAgICAgICAgIGZvbnRTaXplTDEgLT0gMC41O1xyXG4gICAgICAgICAgICB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IE1hdGgubWluKG1heFRleHRXaWR0aCwgd3JhcHBlZFRleHQud2lkdGghKSArIHBhZGRpbmcsXHJcbiAgICAgICAgICAgIGhlaWdodDogd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyAyLFxyXG4gICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICByeTogMSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZiwgYmFja2dyb3VuZCwgd3JhcHBlZFRleHQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWYucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoZWxmQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGkgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZik7XHJcblxyXG4gICAgICAgICAgICBpZiAobWYuc2hlbGZDb25maWc/LltpXS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBtZi5zaGVsZkNvbmZpZz8uW2ldLnRyYXlSb3dzIHx8IDE7XHJcbiAgICAgICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG5cclxuICAgICAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdGV4dCA9XHJcbiAgICAgICAgICAgICAgbWYuc2hlbGZDb25maWc/LltpXS5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiICsgXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgICAgICAgICAvLyBMMjogU2luZ2xlLWxpbmUgd2l0aCBlbGxpcHNpcyB3aXRoaW4gc2hlbGYgcmVjdCAobWlkV2lkdGgpXHJcbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxQYWRkaW5nID0gNjsgLy8gcGFkZGluZyBpbnNpZGUgc2hlbGYgcmVjdFxyXG4gICAgICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBNYXRoLm1heCgwLCBtaWRXaWR0aCAtIGhvcml6b250YWxQYWRkaW5nKTtcclxuICAgICAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IGJveEhlaWdodCAqIDAuODtcclxuICAgICAgICAgICAgY29uc3QgYmFzZUZvbnRTaXplID0gNTtcclxuXHJcbiAgICAgICAgICAgIC8vIFVzZSBzaW5nbGUtbGluZSB0ZXh0IG1lYXN1cmVtZW50IHRvIGF2b2lkIG11bHRpLWxpbmUgd3JhcHBpbmcgZHVyaW5nIG1lYXN1cmVtZW50XHJcbiAgICAgICAgICAgIGNvbnN0IG1lYXN1cmUgPSAodDogc3RyaW5nKSA9PlxyXG4gICAgICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dCh0LCB7XHJcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGxldCBkaXNwbGF5VGV4dCA9IHRleHQ7XHJcbiAgICAgICAgICAgIGxldCBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuICAgICAgICAgICAgICBsZXQgbGVmdElkeCA9IDA7XHJcbiAgICAgICAgICAgICAgbGV0IHJpZ2h0SWR4ID0gdGV4dC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgIHdoaWxlIChsZWZ0SWR4IDwgcmlnaHRJZHgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1pZElkeCA9IE1hdGguZmxvb3IoKGxlZnRJZHggKyByaWdodElkeCkgLyAyKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRleHQuc2xpY2UoMCwgbWlkSWR4KSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGNhbmRpZGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJpZ2h0SWR4ID0gbWlkSWR4O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgbGVmdElkeCA9IG1pZElkeCArIDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGRpc3BsYXlUZXh0ID0gdGV4dC5zbGljZSgwLCBNYXRoLm1heCgwLCBsZWZ0SWR4IC0gMSkpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLCAvLyBtYXRjaCBzaGVsZiByZWN0IHdpZHRoXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbihtYXhUZXh0SGVpZ2h0LCBtZWFzdXJlZC5oZWlnaHQgPz8gMTApICsgMixcclxuICAgICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICAgIHJ5OiAxLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsVGV4dCA9IG5ldyBmYWJyaWMuVGV4dChkaXNwbGF5VGV4dCwge1xyXG4gICAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2goYmFja2dyb3VuZCwgZmluYWxUZXh0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKG1mLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDNcIikge1xyXG4gICAgICAgICAgY29uc3Qgc2VxdWVudGlhbEdyb3VwczogeyB6b25lOiBzdHJpbmc7IHNoZWx2ZXM6IGFueVtdIH1bXSA9IFtdO1xyXG5cclxuICAgICAgICAgIGxldCBwcmV2aW91c1pvbmU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAgIGZvciAoY29uc3Qgc2hlbGYgb2YgbWYuc2hlbGZDb25maWcpIHtcclxuICAgICAgICAgICAgY29uc3Qgem9uZSA9IHNoZWxmLnpvbmUgfHwgXCJVbmtub3duXCI7XHJcbiAgICAgICAgICAgIGlmICh6b25lICE9PSBwcmV2aW91c1pvbmUpIHtcclxuICAgICAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzLnB1c2goeyB6b25lLCBzaGVsdmVzOiBbc2hlbGZdIH0pO1xyXG4gICAgICAgICAgICAgIHByZXZpb3VzWm9uZSA9IHpvbmU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2VxdWVudGlhbEdyb3Vwc1tzZXF1ZW50aWFsR3JvdXBzLmxlbmd0aCAtIDFdLnNoZWx2ZXMucHVzaChzaGVsZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsZXQgY3VycmVudFNoZWxmSW5kZXggPSAwO1xyXG5cclxuICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc2VxdWVudGlhbEdyb3Vwcykge1xyXG4gICAgICAgICAgICBjb25zdCB7IHpvbmUsIHNoZWx2ZXM6IHNoZWx2ZXNJbkdyb3VwIH0gPSBncm91cDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwU3RhcnRJbmRleCA9IGN1cnJlbnRTaGVsZkluZGV4O1xyXG4gICAgICAgICAgICBjb25zdCBncm91cExlbmd0aCA9IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwVG9wWSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChncm91cFN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21ZID0gZ3JvdXBUb3BZICsgYm94SGVpZ2h0ICogZ3JvdXBMZW5ndGg7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2hlbGZEYXRhID0gc2hlbHZlc0luR3JvdXBbal07XHJcbiAgICAgICAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChjdXJyZW50U2hlbGZJbmRleCArIDEpO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBzaGVsZlJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmUmVjdCk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChzaGVsZkRhdGEuc2hlbGZUeXBlID09PSBcInRyYXlcIikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBzaGVsZkRhdGEudHJheVJvd3MgfHwgMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RQZXJTaGVsZiA9IHNoZWxmRGF0YS5wcm9kdWN0UGVyU2hlbGYgfHwgMDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3dTcGFjaW5nID0gYm94SGVpZ2h0IC8gdHJheVJvd3M7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5TcGFjaW5nID0gbWlkV2lkdGggLyBwcm9kdWN0UGVyU2hlbGY7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgciA9IDE7IHIgPCB0cmF5Um93czsgcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY29uc3QgdHJheUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICAgICAgW21pZFgsIGxpbmVZLCBtaWRYICsgbWlkV2lkdGgsIGxpbmVZXSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDE7IGMgPCBwcm9kdWN0UGVyU2hlbGY7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBsaW5lWCA9IG1pZFggKyBjICogY29sdW1uU3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgICAgICBbbGluZVgsIGJveFksIGxpbmVYLCBib3hZICsgYm94SGVpZ2h0XSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2ZXJ0aWNhbExpbmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjdXJyZW50U2hlbGZJbmRleCsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBncm91cEJvdHRvbUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgW21pZFgsIGdyb3VwQm90dG9tWSwgbWlkWCArIG1pZFdpZHRoLCBncm91cEJvdHRvbVldLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2goZ3JvdXBCb3R0b21MaW5lKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtZi5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxhYmVsVGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveCh6b25lLCB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLSBsYWJlbFBhZGRpbmcsXHJcbiAgICAgICAgICAgICAgICB0b3A6IGdyb3VwQm90dG9tWSxcclxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgICAgIGZpbGw6IFwiIzcwNzA3MFwiLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luWDogXCJyaWdodFwiLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwicmlnaHRcIixcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKGxhYmVsVGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWCA9IG1pZFggKyBtaWRXaWR0aCAvIDI7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWSA9IGdyb3VwVG9wWSArIChncm91cEJvdHRvbVkgLSBncm91cFRvcFkpIC8gMjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25CcmFuZHMgPSBuZXcgU2V0KCk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzSW5Hcm91cD8uZm9yRWFjaCgoc2hlbGYpID0+IHtcclxuICAgICAgICAgICAgICBzaGVsZi5wcm9kdWN0QnJhbmROYW1lPy5mb3JFYWNoKChicmFuZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uQnJhbmRzLmFkZChicmFuZCk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKFsuLi5zZWN0aW9uQnJhbmRzXS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gWy4uLnNlY3Rpb25CcmFuZHNdLmpvaW4oXCIgKyBcIik7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgICAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVjdFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IDIwO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgZm9udFNpemUgPSA2O1xyXG4gICAgICAgICAgICAgIGxldCB3cmFwcGVkVGV4dDtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgY3JlYXRlVGV4dGJveCA9IChmczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNDAwXCIsXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlVGV4dGJveChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICAgICAgICAgICAgfSB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCByZWN0SGVpZ2h0ID0gd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyBwYWRkaW5nO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBncm91cENlbnRlclRleHQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgIHdpZHRoOiByZWN0V2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHJlY3RIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaChncm91cENlbnRlclRleHQsIHdyYXBwZWRUZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1mPy52bUNvbmZpZz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1mLnZtQ29uZmlnLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgdm0gPSBtZi52bUNvbmZpZ1tpXTtcclxuICAgICAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdm0uc3RhcnRZUG9zaXRpb24gLSAxO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdm0uZW5kWVBvc2l0aW9uIC0gMTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3Qgc2hlbGZUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICAgICAgICBjb25zdCBzaGVsZkhlaWdodFNwYW4gPSBib3hIZWlnaHQgKiAoZW5kSW5kZXggLSBzdGFydEluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgICAgICAgIGxldCB2bUhlaWdodFB4OiBudW1iZXIgPSBzaGVsZkhlaWdodFNwYW47XHJcbiAgICAgICAgICAgICAgbGV0IHk6IG51bWJlciA9IHNoZWxmVG9wWTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHZtLnlab25lICYmIHZtLnlab25lICE9PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgICAgICAgdm1IZWlnaHRQeCA9IHNoZWxmSGVpZ2h0U3BhbiAvIDM7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh2bS55Wm9uZSkge1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwidG9wXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFkgKyB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWSArIDIgKiB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBsZXQgeCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgbGV0IHdpZHRoID0gbWlkV2lkdGg7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghdm0ueFpvbmUgfHwgdm0ueFpvbmUgPT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25XaWR0aCA9IG1pZFdpZHRoIC8gMztcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodm0ueFpvbmUpIHtcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcImxlZnRcIjpcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHggPSBtaWRYICsgc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwicmlnaHRcIjpcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gbWlkWCArIDIgKiBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmICh2bT8udm1JbWFnZVVybCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3Qgdm1JbWFnZTogYW55ID0gYXdhaXQgZmFicmljLkZhYnJpY0ltYWdlLmZyb21VUkwoXHJcbiAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5jZG5Vcmx9JHt2bS52bUltYWdlVXJsfWAsXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IFwiYW5vbnltb3VzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHZtSW1hZ2Uuc2V0KHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiB4ICsgd2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogeSArIHZtSGVpZ2h0UHggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBzY2FsZVg6IHdpZHRoIC8gdm1JbWFnZS53aWR0aCEsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVZOiB2bUhlaWdodFB4IC8gdm1JbWFnZS5oZWlnaHQhLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2bUltYWdlKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBsb2FkaW5nIGltYWdlIGZvciBWTTogJHt2bS52bUltYWdlVXJsfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyLFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2bUJveCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgICAgICAgICAgIHRvcDogeSxcclxuICAgICAgICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogdm1IZWlnaHRQeCxcclxuICAgICAgICAgICAgICAgICAgZmlsbDogXCIjNjkzOEVGXCIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBmb250U2l6ZSA9IDU7XHJcbiAgICAgICAgICAgICAgICBsZXQgdm1UZXh0O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVZtVGV4dCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICAgICAgICBuZXcgZmFicmljLlRleHRib3godm0udm1OYW1lIHx8IFwiXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiB4ICsgd2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogeSArIHZtSGVpZ2h0UHggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgICAgdm1UZXh0ID0gY3JlYXRlVm1UZXh0KGZvbnRTaXplKTtcclxuICAgICAgICAgICAgICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgICAgICAgICAgICAgfSB3aGlsZSAodm1UZXh0LmhlaWdodCA+IHZtSGVpZ2h0UHggJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godm1Cb3gsIHZtVGV4dCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBFcnJvciBpbiBkcmF3aW5nIFZNOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBsYXN0Qm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzaGVsZkNvdW50ICsgMSk7XHJcbiAgICAgICAgY29uc3QgbGFzdEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgIGBNICR7bWlkWH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHtcclxuICAgICAgICAgICAgICBtaWRYICsgbWlkV2lkdGggLSByYWRpdXNcclxuICAgICAgICAgICAgfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke21pZFggKyByYWRpdXN9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBRICR7bWlkWH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHttaWRYfSAke1xyXG4gICAgICAgICAgICAgIGxhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2xhc3RCb3hZfSBaYCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmlsbDogaXNNYXN0ZXIgPyBcIiNFQUVDRjVcIiA6IFwiI0RBRjFGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjQUZCNUQ5XCIgOiBcIiM2QkNBRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxhc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYCR7bWY/LmZvb3Rlcj8ubGFiZWwgPyBtZi5mb290ZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogbGFzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBpc01hc3RlciA/IFwiIzM2M0Y3MlwiIDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlndGg6IGJveEhlaWdodCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgYm90dG9tV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICAgICAgY29uc3QgYm90dG9tSGVpZ2h0ID0gKDMgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IGJvdHRvbVggPSB4ICsgKHdpZHRoIC0gYm90dG9tV2lkdGgpIC8gMjtcclxuICAgICAgICBjb25zdCBib3R0b21ZID0gbWlkWSArIG1pZEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgICAgIGNvbnN0IGJvdHRvbUNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBib3R0b21YLFxyXG4gICAgICAgICAgdG9wOiBib3R0b21ZLFxyXG4gICAgICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBib3R0b21IZWlnaHQsXHJcbiAgICAgICAgICByeDogcmFkaXVzLFxyXG4gICAgICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgICAgIHN0cm9rZTogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBhY3R1YWxTaGVsZkNvdW50ID1cclxuICAgICAgICAgIG1mPy5zaGVsZkNvbmZpZz8uZmlsdGVyKChzOiBhbnkpID0+IHMuc2hlbGZUeXBlICE9IFwidm1vbmx5XCIpXHJcbiAgICAgICAgICAgID8ubGVuZ3RoID8/IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IGJvdHRvbVRleHRDb250ZW50ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYFNoZWx2ZXMgLSAke2FjdHVhbFNoZWxmQ291bnR9IC4gUHJvZHVjdHMgLSAgJHttZi5maXh0dXJlQ2FwYWNpdHl9IC4gVk0gLSAke21mLnZtQ29uZmlnLmxlbmd0aH1gLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0OiBib3R0b21YICsgYm90dG9tV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0b3A6IGJvdHRvbVkgKyBib3R0b21IZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWd0aDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cENoaWxkcmVuID0gW1xyXG4gICAgICAgICAgbWFpbkNvbnRhaW5lcixcclxuICAgICAgICAgIC4uLighaXNNYXN0ZXIgPyBbdG9wQ29udGFpbmVyLCBpbm5lclRvcEJveCwgaW5uZXJUb3BUZXh0XSA6IFtdKSxcclxuICAgICAgICAgIGlubmVyQm90dG9tQm94LFxyXG4gICAgICAgICAgaW5uZXJCb3R0b21UZXh0LFxyXG4gICAgICAgICAgbWlkQ29udGFpbmVyLFxyXG4gICAgICAgICAgZmlyc3RCb3gsXHJcbiAgICAgICAgICBmaXJzdEJveFRleHQsXHJcbiAgICAgICAgICAuLi4oIWlzTWFzdGVyID8gW2VkaXRJY29uUGF0aF0gOiBbXSksXHJcbiAgICAgICAgICBjb3B5SWNvblBhdGgsXHJcbiAgICAgICAgICAuLi5zaGVsdmVzLFxyXG4gICAgICAgICAgbGFzdEJveCxcclxuICAgICAgICAgIGxhc3RCb3hUZXh0LFxyXG4gICAgICAgICAgYm90dG9tQ29udGFpbmVyLFxyXG4gICAgICAgICAgYm90dG9tVGV4dENvbnRlbnQsXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChncm91cENoaWxkcmVuLCB7XHJcbiAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICAgICAgICAvLyBhbmdsZTogbWYucmVsYXRpdmVQb3NpdGlvbj8uYW5nbGUgPz8gMFxyXG4gICAgICAgIH0pIGFzIEZpeHR1cmVHcm91cDtcclxuXHJcbiAgICAgICAgZml4dHVyZUdyb3VwLmZpeHR1cmVJZCA9IG1mLl9pZDtcclxuICAgICAgICBmaXh0dXJlR3JvdXAuZml4dHVyZVR5cGUgPSBtZi5maXh0dXJlVHlwZTtcclxuICAgICAgICBmaXh0dXJlR3JvdXAuZ3JvdXBOYW1lID0gbWY/LnRlbXBsYXRlR3JvdXBOYW1lID8/IFwiXCI7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLnRlbXBsYXRlVHlwZSA9IG1mLnRlbXBsYXRlVHlwZTtcclxuICAgICAgICBmaXh0dXJlR3JvdXAubmFtZSA9IG1mLnRlbXBsYXRlVHlwZSA/PyBcImZpeHR1cmVcIjtcclxuICAgICAgICBmaXh0dXJlR3JvdXAuc3RvcmVDb3VudCA9IG1mPy5zdG9yZUNvdW50ID8/IDA7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLnBhcmVudEZhYnJpYyA9IHBhcmVudEZhYnJpYztcclxuXHJcbiAgICAgICAgZml4dHVyZUdyb3VwLm9uKFwibW91c2Vkb3duXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2hpbGROYW1lID0gb3B0LnN1YlRhcmdldHM/LlswXT8ubmFtZTtcclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGNoaWxkTmFtZSA9PT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIGlzTWFzdGVyICYmXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCAhPT0gbWYuX2lkICYmXHJcbiAgICAgICAgICAgICF0aGlzLnByZXZlbnRDbGlja1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckFycm93QnlJZCh0aGlzLnNlbGVjdGVkTWFzdGVySWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXMoXCJzdWJcIik7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCA9IG1mLl9pZDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVHcm91cCBhcyBmYWJyaWMuR3JvdXAsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyU3ViRml4dHVyZXMoZml4dHVyZUdyb3VwLCBneCwgZ3kgKyA1MCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBmaXh0dXJlR3JvdXA7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgdG90YWxXaWR0aCA9IDA7XHJcbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgdG90YWxXaWR0aCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0b3RhbFdpZHRoIC09IGdyb3VwU3BhY2luZztcclxuICAgIGxldCBueCA9IHggLSB0b3RhbFdpZHRoIC8gMjtcclxuXHJcbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgZ3JvdXAuc2V0KHsgbGVmdDogbngsIHRvcDogeSB9KTtcclxuICAgICAgbnggKz0gZ3JvdXAud2lkdGghICsgZ3JvdXBTcGFjaW5nO1xyXG4gICAgICB0aGlzLmNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZ3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgZ2V0R3JvdXBDZW50ZXJCb3R0b20oZ3JvdXA6IGZhYnJpYy5Hcm91cCk6IHsgZ3g6IG51bWJlcjsgZ3k6IG51bWJlciB9IHtcclxuICAgIGNvbnN0IGNlbnRlciA9IGdyb3VwLmdldENlbnRlclBvaW50KCk7XHJcbiAgICBjb25zdCBjZW50ZXJYID0gY2VudGVyLng7XHJcbiAgICBjb25zdCBib3R0b21ZID0gZ3JvdXAudG9wISArIGdyb3VwLmhlaWdodCE7XHJcbiAgICByZXR1cm4geyBneDogY2VudGVyWCwgZ3k6IGJvdHRvbVkgfTtcclxuICB9XHJcblxyXG4gIGNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXModGVtcGxhdGVUeXBlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGdyb3Vwc1RvUmVtb3ZlID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKFxyXG4gICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICBvYmogaW5zdGFuY2VvZiBmYWJyaWMuR3JvdXAgJiZcclxuICAgICAgICAgIChvYmogYXMgYW55KS50ZW1wbGF0ZVR5cGUgPT09IHRlbXBsYXRlVHlwZSxcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoZ3JvdXBzVG9SZW1vdmUpIHtcclxuICAgICAgZ3JvdXBzVG9SZW1vdmUuZm9yRWFjaCgoZ3JvdXApID0+IHRoaXMuY2FudmFzLnJlbW92ZShncm91cCkpO1xyXG4gICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmF3QXJyb3coZnJvbUdyb3VwOiBmYWJyaWMuR3JvdXAsIHRvR3JvdXA6IGZhYnJpYy5Hcm91cCwgYXJyb3dJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmcm9tID0gZnJvbUdyb3VwLmFDb29yZHMgPz8gZnJvbUdyb3VwLmNhbGNPQ29vcmRzKCk7XHJcbiAgICBjb25zdCB0byA9IHRvR3JvdXAuYUNvb3JkcyA/PyB0b0dyb3VwLmNhbGNPQ29vcmRzKCk7XHJcblxyXG4gICAgY29uc3QgZnJvbVggPSAoZnJvbS5ibC54ICsgZnJvbS5ici54KSAvIDI7XHJcbiAgICBjb25zdCBmcm9tWSA9IChmcm9tLmJsLnkgKyBmcm9tLmJyLnkpIC8gMjtcclxuXHJcbiAgICBjb25zdCB0b1ggPSAodG8udGwueCArIHRvLnRyLngpIC8gMjtcclxuICAgIGNvbnN0IHRvWSA9ICh0by50bC55ICsgdG8udHIueSkgLyAyO1xyXG5cclxuICAgIGNvbnN0IGhvcml6b250YWxPZmZzZXQgPSB0b1ggLSBmcm9tWDtcclxuICAgIGNvbnN0IHZlcnRpY2FsT2Zmc2V0ID0gdG9ZIC0gZnJvbVk7XHJcbiAgICBjb25zdCBjdXJ2ZVNpemUgPSAxNDtcclxuXHJcbiAgICBsZXQgcGF0aERhdGEgPSBcIlwiO1xyXG5cclxuICAgIGlmIChNYXRoLmFicyhob3Jpem9udGFsT2Zmc2V0KSA8IDUpIHtcclxuICAgICAgLy8gRGlyZWN0IHZlcnRpY2FsIGxpbmVcclxuICAgICAgcGF0aERhdGEgPSBgTSAke2Zyb21YfSAke2Zyb21ZfSBMICR7dG9YfSAke3RvWX1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbWlkWSA9IGZyb21ZICsgdmVydGljYWxPZmZzZXQgLyAyO1xyXG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBob3Jpem9udGFsT2Zmc2V0ID4gMCA/IDEgOiAtMTtcclxuXHJcbiAgICAgIGNvbnN0IGN1cnZlMVggPSBmcm9tWCArIGRpcmVjdGlvbiAqIGN1cnZlU2l6ZTtcclxuICAgICAgY29uc3QgY3VydmUyWCA9IHRvWCAtIGRpcmVjdGlvbiAqIGN1cnZlU2l6ZTtcclxuXHJcbiAgICAgIHBhdGhEYXRhID0gW1xyXG4gICAgICAgIGBNICR7ZnJvbVh9ICR7ZnJvbVl9YCxcclxuICAgICAgICBgTCAke2Zyb21YfSAke21pZFkgLSBjdXJ2ZVNpemV9YCxcclxuICAgICAgICBgUSAke2Zyb21YfSAke21pZFl9ICR7Y3VydmUxWH0gJHttaWRZfWAsXHJcbiAgICAgICAgYEwgJHtjdXJ2ZTJYfSAke21pZFl9YCxcclxuICAgICAgICBgUSAke3RvWH0gJHttaWRZfSAke3RvWH0gJHttaWRZICsgY3VydmVTaXplfWAsXHJcbiAgICAgICAgYEwgJHt0b1h9ICR7dG9ZfWAsXHJcbiAgICAgIF0uam9pbihcIiBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYXJyb3dMaW5lID0gbmV3IGZhYnJpYy5QYXRoKHBhdGhEYXRhLCB7XHJcbiAgICAgIHN0cm9rZTogXCIjQUZCNUQ5XCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAxLjgsXHJcbiAgICAgIGZpbGw6IFwiXCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEFycm93aGVhZFxyXG4gICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKHRvWSAtICh0b1kgLSAxMCksIHRvWCAtIHRvWCk7XHJcbiAgICBjb25zdCBoZWFkbGVuID0gMTA7XHJcbiAgICBjb25zdCBhcnJvd0hlYWQgPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIFtcclxuICAgICAgICBgTSAke3RvWH0gJHt0b1l9YCxcclxuICAgICAgICBgTCAke3RvWCAtIGhlYWRsZW4gKiBNYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkgLyA1KX0gJHtcclxuICAgICAgICAgIHRvWSAtIGhlYWRsZW4gKiBNYXRoLnNpbihhbmdsZSAtIE1hdGguUEkgLyA1KVxyXG4gICAgICAgIH1gLFxyXG4gICAgICAgIGBNICR7dG9YfSAke3RvWX1gLFxyXG4gICAgICAgIGBMICR7dG9YIC0gaGVhZGxlbiAqIE1hdGguY29zKGFuZ2xlICsgTWF0aC5QSSAvIDUpfSAke1xyXG4gICAgICAgICAgdG9ZIC0gaGVhZGxlbiAqIE1hdGguc2luKGFuZ2xlICsgTWF0aC5QSSAvIDUpXHJcbiAgICAgICAgfWAsXHJcbiAgICAgIF0uam9pbihcIiBcIiksXHJcbiAgICAgIHtcclxuICAgICAgICBzdHJva2U6IFwiI0FGQjVEOVwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLjgsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEdyb3VwaW5nIGJvdGggbGluZSBhbmQgYXJyb3doZWFkXHJcbiAgICBjb25zdCBhcnJvd0dyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbYXJyb3dMaW5lLCBhcnJvd0hlYWRdLCB7XHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHsgYXJyb3dJZDogc3RyaW5nIH07XHJcblxyXG4gICAgLy8gQXR0YWNoIGN1c3RvbSBhcnJvdyBJRFxyXG4gICAgYXJyb3dHcm91cC5hcnJvd0lkID0gYXJyb3dJZDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5hZGQoYXJyb3dHcm91cCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFycm93QnlJZChhcnJvd0lkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGFycm93R3JvdXAgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIGZhYnJpYy5Hcm91cCAmJiAob2JqIGFzIGFueSkuYXJyb3dJZCA9PT0gYXJyb3dJZCxcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoYXJyb3dHcm91cCkge1xyXG4gICAgICBhcnJvd0dyb3VwLmZvckVhY2goKGdyb3VwKSA9PiB0aGlzLmNhbnZhcy5yZW1vdmUoZ3JvdXApKTtcclxuICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EdXBsaWNhdGUoZml4dHVyZTogYW55KSB7XHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2VcclxuICAgICAgLmR1cGxpY2F0ZUZpeHR1cmVUZW1wbGF0ZSh7IHRlbXBsYXRlSWQ6IGZpeHR1cmUuZml4dHVyZUlkIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Rml4dHVyZSA9XHJcbiAgICAgICAgICAgICAgZml4dHVyZS50ZW1wbGF0ZVR5cGUgPT09IFwibWFzdGVyXCJcclxuICAgICAgICAgICAgICAgID8gZml4dHVyZVxyXG4gICAgICAgICAgICAgICAgOiBmaXh0dXJlLnBhcmVudEZhYnJpYztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZE1hc3RlcklkKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKFwic3ViXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgPSBjdXJyZW50Rml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShjdXJyZW50Rml4dHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyU3ViRml4dHVyZXMoY3VycmVudEZpeHR1cmUsIGd4LCBneSArIDUwKTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QocmVzLmRhdGEubWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgICAgICBlcnI/LmVycm9yPy5lcnJvciB8fCBcIkZhaWxlZCB0byBjcmVhdGUgdmFyaWFudFwiLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBkdXBsaWNhdGVGaXh0dXJlVGVtcGxhdGUgW2Vycl06XCIsIGVycik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwidHJlZS1jYW52YXMtY2FyZFwiIGNsYXNzPVwidy0xMDAgcC02XCI+XHJcbiAgPGNhbnZhcyBpZD1cInRlbXBsYXRlLWNhbnZhc1wiICN0ZW1wbGF0ZUNhbnZhcz48L2NhbnZhcz5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LTEwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxMCAxMVwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJtZS0xXCI+XHJcbiAgICAgICAgPGNpcmNsZSBjeD1cIjQuODQzMVwiIGN5PVwiNS40OTk5NlwiIHI9XCI0Ljg0MzFcIiBmaWxsPVwiIzYxNzJGM1wiIC8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgICA8cCBjbGFzcz1cIm0tMCBtZS0zXCI+TWFzdGVyIFRlbXBsYXRlPC9wPlxyXG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjExXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDExIDExXCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm1lLTFcIj5cclxuICAgICAgICA8Y2lyY2xlIGN4PVwiNS40NDQ2NlwiIGN5PVwiNS40OTk5NlwiIHI9XCI0Ljg0MzFcIiBmaWxsPVwiIzMzQjVGRlwiIC8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgICA8cCBjbGFzcz1cIm0tMFwiPlZhcmlhbnQvQ2hpbGQgVGVtcGxhdGU8L3A+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ6b29tXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ6b29tLWluXCIgKGNsaWNrKT1cInpvb21JbigpXCI+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTEyIDVWMTlNNSAxMkgxOVwiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ6b29tLW91dFwiIChjbGljayk9XCJ6b29tT3V0KClcIj5cclxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNNSAxMkgxOVwiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
1260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS10ZW1wbGF0ZS10cmVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL2ZpeHR1cmUtdGVtcGxhdGUtdHJlZS9maXh0dXJlLXRlbXBsYXRlLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvZml4dHVyZS10ZW1wbGF0ZS10cmVlL2ZpeHR1cmUtdGVtcGxhdGUtdHJlZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBRUwsU0FBUyxFQUVULEtBQUssRUFFTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU1uRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQzs7Ozs7OztBQVF4SCxNQUFNLE9BQU8scUJBQXFCO0lBMEJ0QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBN0JELFFBQVEsR0FBdUIsT0FBTyxDQUFDO0lBQ3ZDLFFBQVEsQ0FBVSxDQUFDLHVEQUF1RDtJQUMxRSxpQkFBaUIsQ0FBTyxDQUFDLDJDQUEyQztJQUNwRSxVQUFVLENBQVMsQ0FBQywwQ0FBMEM7SUFHdkUsUUFBUSxDQUFpQztJQUN6QyxNQUFNLENBQWlCO0lBRXZCLGNBQWMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxRCxNQUFNLENBQVM7SUFFZixrQkFBa0IsR0FBVSxF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RSxFQUFFO2dCQUNiLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUN0QixHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssSUFBSSwwQkFBMEIsQ0FDaEQsQ0FBQztnQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzNELENBQUM7U0FDRixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQTlpRFUscUJBQXFCOzRGQUFyQixxQkFBcUIsdVRDdkJsQyx1akRBNEJBOzs0RkRMYSxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBR3JCLElBQUk7Z01BR1AsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdOLFFBQVE7c0JBRFAsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmYWJyaWMgZnJvbSBcImZhYnJpY1wiO1xyXG5pbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZyb21FdmVudCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1nbG9iYWxcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1zaGFyZWRcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBTdG9yZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3JlLWJ1aWxkZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5pbXBvcnQgeyBMYXlvdXRFZGl0Q29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL3BvcHVwcy9sYXlvdXQtZWRpdC1jb25maXJtYXRpb24vbGF5b3V0LWVkaXQtY29uZmlybWF0aW9uLmNvbXBvbmVudFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiZml4dHVyZS10ZW1wbGF0ZS10cmVlXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9maXh0dXJlLXRlbXBsYXRlLXRyZWUuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL2ZpeHR1cmUtdGVtcGxhdGUtdHJlZS5jb21wb25lbnQuc2Nzc1wiLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZVRyZWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIHZpZXdNb2RlOiBcImdyb3VwXCIgfCBcIm1hc3RlclwiID0gXCJncm91cFwiO1xyXG4gIEBJbnB1dCgpIGNsaWVudElkPzogc3RyaW5nOyAvLyBVc2VkIHRvIGZldGNoIGFsbCBtYXN0ZXJzIHdoZW4gbW9kZSBpcyBzZXQgdG8gZ3JvdXAuXHJcbiAgQElucHV0KCkgbWFzdGVyRml4dHVyZURhdGE/OiBhbnk7IC8vIFJlcXVpcmVkIHdoZW4gdmlld01vZGUgaXMgc2V0IHRvIG1hc3Rlci5cclxuICBASW5wdXQoKSBhbGxGaXh0dXJlPzogYW55W107IC8vIFJlcXVpcmVkIHdoZW4gdmlld01vZGUgaXMgc2V0IHRvIHN0b3JlLlxyXG5cclxuICBAVmlld0NoaWxkKFwidGVtcGxhdGVDYW52YXNcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXHJcbiAgY2FudmFzRWwhOiBFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50PjtcclxuICBjYW52YXMhOiBmYWJyaWMuQ2FudmFzO1xyXG5cclxuICB2ZXJ0aWNhbE1hcmdpbiA9ICgxLjI1IC8gMTAwKSAqIHRoaXMudG9QaXhlbHMoMTUyNCwgXCJtbVwiKTtcclxuICBjZG5Vcmw6IHN0cmluZztcclxuXHJcbiAgYWxsTWFzdGVyVGVtcGxhdGVzOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkTWFzdGVyVGVtcGxhdGVzOiBhbnlbXSA9IFtdO1xyXG4gIHN1YlRlbXBsYXRlczogYW55W10gPSBbXTtcclxuXHJcbiAgc2VsZWN0ZWRHcm91cE5hbWU6IHN0cmluZztcclxuICBzZWxlY3RlZE1hc3RlcklkOiBzdHJpbmc7XHJcblxyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHByZXZlbnRDbGljazogYm9vbGVhbiA9IGZhbHNlOyAvLyBGbGFnIHVzZWQgdG8gcmVzdHJpY3QgZnVydGhlciBjbGlja3Mgb24gY2FudmFzIGl0ZW1zIHdoaWxlIGFuIEFQSSBjYWxsIGlzIGluIHByb2dyZXNzLlxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JlQnVpbGRlclNlcnZpY2U6IFN0b3JlQnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBuZ2JNb2RhbDogTmdiTW9kYWwsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgaWYgKGUpIHRoaXMuY2RuVXJsID0gZS5wbGFub2dyYW1DRE47XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FudmFzID0gbmV3IGZhYnJpYy5DYW52YXModGhpcy5jYW52YXNFbD8ubmF0aXZlRWxlbWVudCwge1xyXG4gICAgICBzZWxlY3Rpb25GdWxseUNvbnRhaW5lZDogdHJ1ZSxcclxuICAgICAgcGVyUGl4ZWxUYXJnZXRGaW5kOiB0cnVlLFxyXG4gICAgICB0YXJnZXRGaW5kVG9sZXJhbmNlOiA1LFxyXG4gICAgICBoZWlnaHQ6IDYwMCxcclxuICAgICAgd2lkdGg6IDgwMCxcclxuICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnJlc2l6ZUNhbnZhc1RvUGFyZW50U2l6ZSgpO1xyXG5cclxuICAgIGZyb21FdmVudCh3aW5kb3csIFwicmVzaXplXCIpXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVzaXplQ2FudmFzVG9QYXJlbnRTaXplKCkpO1xyXG5cclxuICAgIHRoaXMuc2V0dXBab29tSGFuZGxlcnMoKTtcclxuXHJcbiAgICB0aGlzLmJ1aWxkVHJlZVZpZXcoKTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOmRvd25cIiwgYXN5bmMgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IG9wdC50YXJnZXQgYXMgYW55O1xyXG4gICAgICBjb25zdCBjaGlsZE5hbWUgPSBvcHQuc3ViVGFyZ2V0cz8uWzBdPy5uYW1lO1xyXG5cclxuICAgICAgaWYgKCFjaGlsZE5hbWUpIHJldHVybjtcclxuXHJcbiAgICAgIGlmIChjaGlsZE5hbWUgPT09IFwiZWRpdEljb25cIikge1xyXG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuY29uZmlybUVkaXQocGFyZW50LnN0b3JlQ291bnQpKSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgW1wiL21hbmFnZS9wbGFub2dyYW0vZml4dHVyZS10ZW1wbGF0ZS9iYXNpYy1kZXRhaWxzXCJdLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IHBhcmVudC5maXh0dXJlSWQsXHJcbiAgICAgICAgICAgICAgaXNFZGl0OiB0cnVlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY2hpbGROYW1lID09PSBcImNvcHlJY29uXCIpIHtcclxuICAgICAgICBjb25zdCB0YXJnZXQgPVxyXG4gICAgICAgICAgcGFyZW50LnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIiA/IHBhcmVudCA6IG9wdC5zdWJUYXJnZXRzPy5bMF0uZ3JvdXA7XHJcbiAgICAgICAgdGhpcy5vbkR1cGxpY2F0ZSh0YXJnZXQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbmZpcm1FZGl0KGNvdW50OiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGlmIChjb3VudCA8PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKExheW91dEVkaXRDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gYEVkaXQgdGVtcGxhdGVgO1xyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9IGBZb3UgYXJlIGFib3V0IHRvIGVkaXQgYW4gYWN0aXZlIHRlbXBsYXRlLiBQbGVhc2UgcmV2aWV3IGFuZCBwdWJsaXNoIHRoZSBjaGFuZ2VzYDtcclxuICAgICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPGJvb2xlYW4+KChyZXN1bHQpID0+IHJlc3VsdCA9PT0gXCJva1wiKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJ1aWxkVHJlZVZpZXcoKSB7XHJcbiAgICB0aGlzLnByZXZlbnRDbGljayA9IHRydWU7XHJcbiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gXCJncm91cFwiICYmIHRoaXMuY2xpZW50SWQpIHtcclxuICAgICAgdGhpcy5nZXRNYXN0ZXJUZW1wbGF0ZUxpc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gXCJtYXN0ZXJcIiAmJiB0aGlzLm1hc3RlckZpeHR1cmVEYXRhKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCA9IHRoaXMubWFzdGVyRml4dHVyZURhdGEuX2lkO1xyXG5cclxuICAgICAgY29uc3QgY2FudmFzV2lkdGggPSB0aGlzLmNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgICBsZXQgeCA9IGNhbnZhc1dpZHRoIC8gMjtcclxuICAgICAgbGV0IHkgPSA1MDtcclxuICAgICAgdGhpcy5yZW5kZXJNYXN0ZXJGaXh0dXJlcyh4LCB5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE1hc3RlclRlbXBsYXRlTGlzdCgpIHtcclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZVxyXG4gICAgICAuZ2V0VGVtcGxhdGVUcmVlTGlzdCh7IGNsaWVudElkOiB0aGlzLmNsaWVudElkIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5hbGxNYXN0ZXJUZW1wbGF0ZXMgPSByZXM/LmRhdGEgPz8gW107XHJcblxyXG4gICAgICAgICAgLy8gT25jZSB0aGUgbWFzdGVyIHRlbXBsYXRlIGlzIGZldGNoZWQsIHJlbmRlciB0aGUgZ3JvdXAgbmFtZXMuXHJcbiAgICAgICAgICB0aGlzLnJlbmRlckdyb3VwTmFtZXMoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkBAIGdldE1hc3RlclRlbXBsYXRlTGlzdCBbRVJSXTogXCIsIGVycik7XHJcbiAgICAgICAgICB0aGlzLnByZXZlbnRDbGljayA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0dXBab29tSGFuZGxlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOndoZWVsXCIsIChvcHQ6IGZhYnJpYy5URXZlbnQ8V2hlZWxFdmVudD4pID0+IHtcclxuICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG5cclxuICAgICAgaWYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHtcclxuICAgICAgICBjb25zdCBkZWx0YSA9IGUuZGVsdGFZO1xyXG4gICAgICAgIGxldCB6b29tID0gdGhpcy5jYW52YXMuZ2V0Wm9vbSgpO1xyXG4gICAgICAgIHpvb20gKj0gMC45OTUgKiogZGVsdGE7XHJcblxyXG4gICAgICAgIHpvb20gPSBNYXRoLm1heCgwLjA1LCBNYXRoLm1pbih6b29tLCA1KSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FudmFzLnpvb21Ub1BvaW50KFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB4OiBlLm9mZnNldFgsXHJcbiAgICAgICAgICAgIHk6IGUub2Zmc2V0WSxcclxuICAgICAgICAgIH0gYXMgZmFicmljLlBvaW50LFxyXG4gICAgICAgICAgem9vbSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIGxldCBsYXN0UG9zWCA9IDA7XHJcbiAgICBsZXQgbGFzdFBvc1kgPSAwO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6ZG93blwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFvcHQudGFyZ2V0KSB7XHJcbiAgICAgICAgaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOm1vdmVcIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc0RyYWdnaW5nICYmIHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtKSB7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGNvbnN0IHZwdCA9IHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtO1xyXG4gICAgICAgIHZwdFs0XSArPSBlLmNsaWVudFggLSBsYXN0UG9zWDtcclxuICAgICAgICB2cHRbNV0gKz0gZS5jbGllbnRZIC0gbGFzdFBvc1k7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOnVwXCIsICgpID0+IHtcclxuICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNhbnZhcy5zZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB6b29tSW4oKSB7XHJcbiAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1pbih6b29tICsgMC4yLCAzKTtcclxuICAgIHRoaXMuc21vb3RoWm9vbSh0YXJnZXRab29tKTtcclxuICB9XHJcblxyXG4gIHpvb21PdXQoKSB7XHJcbiAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1heCh6b29tIC0gMC4yLCAwLjIpO1xyXG4gICAgdGhpcy5zbW9vdGhab29tKHRhcmdldFpvb20pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzbW9vdGhab29tKHRhcmdldFpvb206IG51bWJlcikge1xyXG4gICAgY29uc3QgY2VudGVyID0gbmV3IGZhYnJpYy5Qb2ludChcclxuICAgICAgdGhpcy5jYW52YXMuZ2V0V2lkdGgoKSAvIDIsXHJcbiAgICAgIHRoaXMuY2FudmFzLmdldEhlaWdodCgpIC8gMixcclxuICAgICk7XHJcbiAgICBjb25zdCBjdXJyZW50Wm9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgIGNvbnN0IHN0ZXBzID0gMTA7XHJcbiAgICBjb25zdCBzdGVwU2l6ZSA9ICh0YXJnZXRab29tIC0gY3VycmVudFpvb20pIC8gc3RlcHM7XHJcbiAgICBsZXQgc3RlcCA9IDA7XHJcblxyXG4gICAgY29uc3QgYW5pbWF0ZSA9ICgpID0+IHtcclxuICAgICAgaWYgKHN0ZXAgPCBzdGVwcykge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnpvb21Ub1BvaW50KGNlbnRlciwgY3VycmVudFpvb20gKyBzdGVwU2l6ZSAqIChzdGVwICsgMSkpO1xyXG4gICAgICAgIHN0ZXArKztcclxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoY2VudGVyLCB0YXJnZXRab29tKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBhbmltYXRlKCk7XHJcbiAgfVxyXG5cclxuICByZXNpemVDYW52YXNUb1BhcmVudFNpemUoKSB7XHJcbiAgICBjb25zdCBjYW52YXNDb2wgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgXCJ0cmVlLWNhbnZhcy1jYXJkXCIsXHJcbiAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKGNhbnZhc0NvbCkge1xyXG4gICAgICBjb25zdCB3aWR0aCA9IGNhbnZhc0NvbC5vZmZzZXRXaWR0aCAtIDMyO1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjYW52YXNDb2wub2Zmc2V0SGVpZ2h0IC0gMzI7XHJcbiAgICAgIHRoaXMuY2hhbmdlQ2FudmFzU2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZUNhbnZhc1NpemUobmV3V2lkdGg6IG51bWJlciwgbmV3SGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNhbnZhc0VsZW1lbnQgPSB0aGlzLmNhbnZhc0VsLm5hdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgY2FudmFzRWxlbWVudC53aWR0aCA9IG5ld1dpZHRoO1xyXG4gICAgY2FudmFzRWxlbWVudC5oZWlnaHQgPSBuZXdIZWlnaHQ7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuc2V0V2lkdGgobmV3V2lkdGgpO1xyXG4gICAgdGhpcy5jYW52YXMuc2V0SGVpZ2h0KG5ld0hlaWdodCk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIHRvUGl4ZWxzKHZhbHVlOiBudW1iZXIsIHVuaXQ6IHN0cmluZywgZHBpID0gMi44KSB7XHJcbiAgICBsZXQgcGl4ZWxzOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHVuaXQgPT09IFwibW1cIikge1xyXG4gICAgICBwaXhlbHMgPSAodmFsdWUgLyAyNS40KSAqIGRwaTtcclxuICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJmdFwiKSB7XHJcbiAgICAgIHBpeGVscyA9IHZhbHVlICogMTIgKiBkcGk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB1bml0LiBVc2UgJ21tJyBvciAnZnQnLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTnVtYmVyKHBpeGVscy50b0ZpeGVkKDIpKTtcclxuICB9XHJcblxyXG4gIHJlbmRlckdyb3VwTmFtZXMoKSB7XHJcbiAgICBjb25zdCBtYXN0ZXJHcm91cE5hbWVzID0gQXJyYXkuZnJvbShcclxuICAgICAgbmV3IFNldChcclxuICAgICAgICB0aGlzLmFsbE1hc3RlclRlbXBsYXRlc1xyXG4gICAgICAgICAgLmZpbHRlcigoZikgPT4gZi50ZW1wbGF0ZVR5cGUgPT09IFwibWFzdGVyXCIgJiYgZi50ZW1wbGF0ZUdyb3VwTmFtZSlcclxuICAgICAgICAgIC5tYXAoKG0pID0+IG0udGVtcGxhdGVHcm91cE5hbWUpLFxyXG4gICAgICApLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoIW1hc3Rlckdyb3VwTmFtZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgIFwiQEAgfiByZW5kZXJHcm91cE5hbWVzIFtFUlJdOiAobm9lIGdyb3VwIG5hbWVzIGZvdW5kKTogXCIsXHJcbiAgICAgICAgbWFzdGVyR3JvdXBOYW1lcyxcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPz89IG1hc3Rlckdyb3VwTmFtZXNbMF07XHJcblxyXG4gICAgY29uc3QgeSA9IDUwO1xyXG4gICAgY29uc3QgZ3JvdXBTcGFjaW5nID0gMjA7XHJcblxyXG4gICAgY29uc3QgZ3JvdXBzOiBmYWJyaWMuR3JvdXBbXSA9IFtdO1xyXG4gICAgbGV0IHRvdGFsV2lkdGggPSAwO1xyXG5cclxuICAgIG1hc3Rlckdyb3VwTmFtZXMuZm9yRWFjaCgoZykgPT4ge1xyXG4gICAgICBpZiAoIWcpIHJldHVybjtcclxuICAgICAgY29uc3QgbGFiZWwgPSBnO1xyXG4gICAgICBjb25zdCBmb250U2l6ZSA9IDEyO1xyXG4gICAgICBjb25zdCBwYWRkaW5nWCA9IDMwO1xyXG4gICAgICBjb25zdCBwYWRkaW5nWSA9IDE2O1xyXG5cclxuICAgICAgY29uc3QgbWFpblRleHQgPSBuZXcgZmFicmljLkZhYnJpY1RleHQobGFiZWwsIHtcclxuICAgICAgICBmb250U2l6ZTogZm9udFNpemUsXHJcbiAgICAgICAgZmlsbDogXCIjMzYzRjcyXCIsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlciwgQXJpYWwsIHNhbnMtc2VyaWZcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwibGVmdFwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwidG9wXCIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgcmVjdFdpZHRoID0gbWFpblRleHQud2lkdGghICsgMiAqIHBhZGRpbmdYO1xyXG4gICAgICBjb25zdCByZWN0SGVpZ2h0ID0gbWFpblRleHQuaGVpZ2h0ISArIDIgKiBwYWRkaW5nWTtcclxuICAgICAgY29uc3QgcmVjdExlZnQgPSAzMDtcclxuICAgICAgY29uc3QgcmVjdFRvcCA9IDE4O1xyXG5cclxuICAgICAgY29uc3QgbWFpblJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgIHJ4OiA2LFxyXG4gICAgICAgIHJ5OiA2LFxyXG4gICAgICAgIHdpZHRoOiByZWN0V2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiByZWN0SGVpZ2h0LFxyXG4gICAgICAgIGZpbGw6IHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPT09IGxhYmVsID8gXCIjRjhGOUZDXCIgOiBcIiNmZmZcIixcclxuICAgICAgICBzdHJva2U6IHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPT09IGxhYmVsID8gXCIjQUZCNUQ5XCIgOiBcIiNEMEQ1RERcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICBsZWZ0OiByZWN0TGVmdCxcclxuICAgICAgICB0b3A6IHJlY3RUb3AsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgbWFpblRleHQuc2V0KHtcclxuICAgICAgICBsZWZ0OiByZWN0TGVmdCArIHBhZGRpbmdYLFxyXG4gICAgICAgIHRvcDogcmVjdFRvcCArIChyZWN0SGVpZ2h0IC0gbWFpblRleHQuaGVpZ2h0ISkgLyAyLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IGJ1YmJsZVcgPSAzNjtcclxuICAgICAgY29uc3QgYnViYmxlSCA9IDE4O1xyXG4gICAgICBjb25zdCBidWJibGVMZWZ0ID0gcmVjdExlZnQgKyByZWN0V2lkdGggLyAyIC0gYnViYmxlVyAvIDI7XHJcbiAgICAgIGNvbnN0IGJ1YmJsZVRvcCA9IHJlY3RIZWlnaHQgKyBidWJibGVIIC8gMjtcclxuXHJcbiAgICAgIGNvbnN0IGJ1YmJsZVJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgIHJ4OiA0LFxyXG4gICAgICAgIHJ5OiA0LFxyXG4gICAgICAgIHdpZHRoOiBidWJibGVXLFxyXG4gICAgICAgIGhlaWdodDogYnViYmxlSCxcclxuICAgICAgICBmaWxsOiB0aGlzLnNlbGVjdGVkR3JvdXBOYW1lID09PSBsYWJlbCA/IFwiIzgzODljNVwiIDogXCIjOThBMkIzXCIsXHJcbiAgICAgICAgbGVmdDogYnViYmxlTGVmdCxcclxuICAgICAgICB0b3A6IGJ1YmJsZVRvcCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBncm91cENvdW50ID0gdGhpcy5hbGxNYXN0ZXJUZW1wbGF0ZXMuZmlsdGVyKFxyXG4gICAgICAgIChtKSA9PiBtLnRlbXBsYXRlR3JvdXBOYW1lID09PSBnICYmIG0udGVtcGxhdGVUeXBlID09PSBcIm1hc3RlclwiLFxyXG4gICAgICApLmxlbmd0aDtcclxuXHJcbiAgICAgIGNvbnN0IG51bWJlclRleHQgPSBuZXcgZmFicmljLkZhYnJpY1RleHQoZ3JvdXBDb3VudC50b1N0cmluZygpLCB7XHJcbiAgICAgICAgZm9udFNpemU6IDgsXHJcbiAgICAgICAgZmlsbDogXCIjZmZmXCIsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlciwgQXJpYWwsIHNhbnMtc2VyaWZcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjcwMFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICBsZWZ0OiBidWJibGVMZWZ0ICsgYnViYmxlVyAvIDIsXHJcbiAgICAgICAgdG9wOiBidWJibGVUb3AgKyBidWJibGVIIC8gMixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoXHJcbiAgICAgICAgW21haW5SZWN0LCBtYWluVGV4dCwgYnViYmxlUmVjdCwgbnVtYmVyVGV4dF0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgIHRvcDogMCxcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICAgIGdyb3VwTmFtZTogc3RyaW5nO1xyXG4gICAgICAgIG1hc3RlckNvdW50OiBudW1iZXI7XHJcbiAgICAgICAgbWFpblJlY3Q6IGZhYnJpYy5SZWN0O1xyXG4gICAgICAgIGJ1YmJsZVJlY3Q6IGZhYnJpYy5SZWN0O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgZ3JvdXAuZ3JvdXBOYW1lID0gbGFiZWw7XHJcbiAgICAgIGdyb3VwLm1hc3RlckNvdW50ID0gZ3JvdXBDb3VudDtcclxuICAgICAgZ3JvdXAubWFpblJlY3QgPSBtYWluUmVjdDtcclxuICAgICAgZ3JvdXAuYnViYmxlUmVjdCA9IGJ1YmJsZVJlY3Q7XHJcblxyXG4gICAgICBncm91cC5vbihcIm1vdXNlZG93blwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEdyb3VwTmFtZSA9PT0gbGFiZWwpIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJldmVudENsaWNrKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBwcmV2R3JvdXAgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAgICAgLmZpbmQoXHJcbiAgICAgICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgZmFicmljLkdyb3VwICYmXHJcbiAgICAgICAgICAgICAgKG9iaiBhcyBhbnkpLmdyb3VwTmFtZSA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSxcclxuICAgICAgICAgICkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICAgICAgbWFpblJlY3Q6IGZhYnJpYy5SZWN0O1xyXG4gICAgICAgICAgYnViYmxlUmVjdDogZmFicmljLlJlY3Q7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHByZXZHcm91cCkge1xyXG4gICAgICAgICAgcHJldkdyb3VwLm1haW5SZWN0LnNldCh7IGZpbGw6IFwiI2ZmZmZmZlwiLCBzdHJva2U6IFwiI0QwRDVERFwiIH0pO1xyXG4gICAgICAgICAgcHJldkdyb3VwLmJ1YmJsZVJlY3Quc2V0KHsgZmlsbDogXCIjOThBMkIzXCIgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBncm91cC5tYWluUmVjdC5zZXQoeyBmaWxsOiBcIiNGOEY5RkNcIiwgc3Ryb2tlOiBcIiNBRkI1RDlcIiB9KTtcclxuICAgICAgICBncm91cC5idWJibGVSZWN0LnNldCh7IGZpbGw6IFwiIzgzODljNVwiIH0pO1xyXG5cclxuICAgICAgICAvLyBDbGVhciBib3RoIG1hc3RlcnMgYW5kIHN1YnMgYXJyb3dzLCBiZWZvcmUgcmVuZGVyaW5nIG5ldyBzZXQuXHJcbiAgICAgICAgdGhpcy5jbGVhckFycm93QnlJZCh0aGlzLnNlbGVjdGVkR3JvdXBOYW1lKTtcclxuICAgICAgICB0aGlzLmNsZWFyQXJyb3dCeUlkKHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRHcm91cE5hbWUgPSBsYWJlbDtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IG9wdC50YXJnZXQ7XHJcbiAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQgaW5zdGFuY2VvZiBmYWJyaWMuR3JvdXApIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudEdyb3VwID0gdGFyZ2V0IGFzIGZhYnJpYy5Hcm91cDtcclxuICAgICAgICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKHBhcmVudEdyb3VwKTtcclxuICAgICAgICAgIHRoaXMucmVuZGVyTWFzdGVyRml4dHVyZXMoZ3gsIGd5ICsgNTAsIHBhcmVudEdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgZ3JvdXBzLnB1c2goZ3JvdXApO1xyXG4gICAgICB0b3RhbFdpZHRoICs9IGdyb3VwLndpZHRoISArIGdyb3VwU3BhY2luZztcclxuICAgIH0pO1xyXG5cclxuICAgIHRvdGFsV2lkdGggLT0gZ3JvdXBTcGFjaW5nO1xyXG5cclxuICAgIGNvbnN0IGNhbnZhc1dpZHRoID0gdGhpcy5jYW52YXMuZ2V0V2lkdGgoKTtcclxuICAgIGxldCB4ID0gKGNhbnZhc1dpZHRoIC0gdG90YWxXaWR0aCkgLyAyO1xyXG5cclxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cCkgPT4ge1xyXG4gICAgICBncm91cC5zZXQoeyBsZWZ0OiB4LCB0b3A6IHkgfSk7XHJcbiAgICAgIHggKz0gZ3JvdXAud2lkdGghICsgZ3JvdXBTcGFjaW5nO1xyXG4gICAgICB0aGlzLmNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRHcm91cEZhYnJpY0dyb3VwID0gZ3JvdXBzWzBdO1xyXG5cclxuICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKHNlbGVjdGVkR3JvdXBGYWJyaWNHcm91cCk7XHJcbiAgICB0aGlzLnJlbmRlck1hc3RlckZpeHR1cmVzKGd4LCBneSArIDUwLCBzZWxlY3RlZEdyb3VwRmFicmljR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyTWFzdGVyRml4dHVyZXMoeDogbnVtYmVyLCB5OiBudW1iZXIsIGdyb3VwPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gXCJtYXN0ZXJcIikge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWFzdGVyVGVtcGxhdGVzID0gW3RoaXMubWFzdGVyRml4dHVyZURhdGFdO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgPSB0aGlzLm1hc3RlckZpeHR1cmVEYXRhLl9pZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJUZW1wbGF0ZXMgPSB0aGlzLmFsbE1hc3RlclRlbXBsYXRlcy5maWx0ZXIoXHJcbiAgICAgICAgKGYpID0+XHJcbiAgICAgICAgICBmLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIiAmJlxyXG4gICAgICAgICAgZi50ZW1wbGF0ZUdyb3VwTmFtZSA9PT0gdGhpcy5zZWxlY3RlZEdyb3VwTmFtZSxcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlcklkID0gdGhpcy5zZWxlY3RlZE1hc3RlclRlbXBsYXRlc1swXS5faWQ7XHJcbiAgICAgIHRoaXMuY2xlYXJPbGRGaXh0dXJlVGVtcGxhdGVzRnJvbUNhbnZhcyhcIm1hc3RlclwiKTtcclxuICAgICAgdGhpcy5jbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKFwic3ViXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1hc3RlcnM6IGFueVtdID0gYXdhaXQgdGhpcy5yZW5kZXJGaXh0dXJlcyhcclxuICAgICAgdGhpcy5zZWxlY3RlZE1hc3RlclRlbXBsYXRlcyxcclxuICAgICAgeCxcclxuICAgICAgeSxcclxuICAgICk7XHJcblxyXG4gICAgaWYgKHRoaXMudmlld01vZGUgIT09IFwibWFzdGVyXCIpXHJcbiAgICAgIG1hc3RlcnMuZm9yRWFjaCgobSkgPT4gdGhpcy5kcmF3QXJyb3coZ3JvdXAsIG0sIGdyb3VwLmdyb3VwTmFtZSkpO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkTWFzdGVyRmFicmljR3JvdXAgPSBtYXN0ZXJzWzBdO1xyXG4gICAgY29uc3QgeyBneCwgZ3kgfSA9IHRoaXMuZ2V0R3JvdXBDZW50ZXJCb3R0b20oc2VsZWN0ZWRNYXN0ZXJGYWJyaWNHcm91cCk7XHJcbiAgICB0aGlzLnJlbmRlclN1YkZpeHR1cmVzKHNlbGVjdGVkTWFzdGVyRmFicmljR3JvdXAsIGd4LCBneSArIDUwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbmRlclN1YkZpeHR1cmVzKGdyb3VwOiBhbnksIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2VcclxuICAgICAgLmdldFRlbXBsYXRlVHJlZUxpc3QoeyBtYXN0ZXJJZDogdGhpcy5zZWxlY3RlZE1hc3RlcklkIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zdWJUZW1wbGF0ZXMgPSByZXM/LmRhdGEgPz8gW107XHJcbiAgICAgICAgICBpZiAodGhpcy5zdWJUZW1wbGF0ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN1YjogYW55W10gPSBhd2FpdCB0aGlzLnJlbmRlckZpeHR1cmVzKFxyXG4gICAgICAgICAgICAgIHRoaXMuc3ViVGVtcGxhdGVzLFxyXG4gICAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgICBncm91cCxcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHN1Yi5mb3JFYWNoKChtKSA9PiB0aGlzLmRyYXdBcnJvdyhncm91cCwgbSwgZ3JvdXAuZml4dHVyZUlkKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdChcIk1hc3RlciBkb2VzIG5vdCBoYXZlIGFueSB2YXJpYW50XCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5wcmV2ZW50Q2xpY2sgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkBAIGdldE1hc3RlclRlbXBsYXRlTGlzdCBbRVJSXTogXCIsIGVycik7XHJcbiAgICAgICAgICB0aGlzLnByZXZlbnRDbGljayA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyRml4dHVyZXMoXHJcbiAgICB0ZW1wbGF0ZXM6IGFueVtdLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgcGFyZW50RmFicmljPzogYW55LFxyXG4gICkge1xyXG4gICAgY29uc3QgZ3JvdXBTcGFjaW5nID0gMjA7XHJcblxyXG4gICAgdHlwZSBGaXh0dXJlR3JvdXAgPSBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIGZpeHR1cmVJZDogc3RyaW5nO1xyXG4gICAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCI7XHJcbiAgICAgIGdyb3VwTmFtZTogc3RyaW5nO1xyXG4gICAgICB0ZW1wbGF0ZVR5cGU6IHN0cmluZztcclxuICAgICAgbmFtZTogc3RyaW5nO1xyXG4gICAgICBwYXJlbnRGYWJyaWM6IGFueTtcclxuICAgICAgc3RvcmVDb3VudDogbnVtYmVyO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBQcm9jZXNzIGFsbCB0ZW1wbGF0ZXMgaW4gcGFyYWxsZWwgYW5kIHdhaXQgZm9yIGNvbXBsZXRpb25cclxuICAgIGNvbnN0IGdyb3VwczogRml4dHVyZUdyb3VwW10gPSBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgdGVtcGxhdGVzLm1hcChhc3luYyAobWYpID0+IHtcclxuICAgICAgICBjb25zdCBpc01hc3RlciA9IG1mLnRlbXBsYXRlVHlwZSA9PT0gXCJtYXN0ZXJcIjtcclxuXHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIG1mLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICBtZi5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgICBtZi5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCByYWRpdXMgPSAzO1xyXG5cclxuICAgICAgICBsZXQgbWFpbkNvbnRhaW5lckhlaWdodCA9IGhlaWdodCArIDE7XHJcbiAgICAgICAgaWYgKGlzTWFzdGVyKSB7XHJcbiAgICAgICAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgICAgICAgbWFpbkNvbnRhaW5lckhlaWdodCA9IGhlaWdodCAtIHRvcEhlaWdodCAvIDIgKyAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbWFpbkNvbnRhaW5lclRvcCA9IGlzTWFzdGVyXHJcbiAgICAgICAgICA/IHkgKyAoKDE1IC8gMTAwKSAqIGhlaWdodCkgLyAyIC0gMVxyXG4gICAgICAgICAgOiB5IC0gMTtcclxuXHJcbiAgICAgICAgY29uc3QgbWFpbkNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgdG9wOiBtYWluQ29udGFpbmVyVG9wLFxyXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBtYWluQ29udGFpbmVySGVpZ2h0LFxyXG4gICAgICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCB0b3BXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgICAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IHRvcFggPSB4ICsgKHdpZHRoIC0gdG9wV2lkdGgpIC8gMjtcclxuICAgICAgICBjb25zdCB0b3BZID0geSArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgICAgIGNvbnN0IHRvcENvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiB0b3BYLFxyXG4gICAgICAgICAgdG9wOiB0b3BZLFxyXG4gICAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiB0b3BIZWlnaHQsXHJcbiAgICAgICAgICByeDogcmFkaXVzLFxyXG4gICAgICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGlubmVyQm94SGVpZ2h0ID0gdG9wSGVpZ2h0IC8gMjtcclxuICAgICAgICBjb25zdCBpbm5lclRvcEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgIGBNICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aCAtIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZfSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICAgICAgUSAke3RvcFh9ICR7dG9wWX0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFpgLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgaW5uZXJUb3BUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYEFzc2lnbmVkIHRvICR7bWYuc3RvcmVDb3VudCA/PyAwfSBTdG9yZXNgLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0OiB0b3BYICsgdG9wV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0b3A6IHRvcFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgIGZpbGw6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogaW5uZXJCb3hIZWlnaHQsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2Vjb25kQm94WSA9IHRvcFkgKyBpbm5lckJveEhlaWdodDtcclxuXHJcbiAgICAgICAgbGV0IGlubmVyQm90dG9tQm94OiBmYWJyaWMuUGF0aDtcclxuXHJcbiAgICAgICAgaWYgKGlzTWFzdGVyKSB7XHJcbiAgICAgICAgICBpbm5lckJvdHRvbUJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgICAgYE0gJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFl9IFxyXG4gICAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aCAtIHJhZGl1c30gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7XHJcbiAgICAgICAgICAgIHNlY29uZEJveFkgKyByYWRpdXNcclxuICAgICAgICAgIH0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHtcclxuICAgICAgICAgICAgdG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgICAgICB9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7dG9wWH0gJHtcclxuICAgICAgICAgICAgc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgICAgTCAke3RvcFh9ICR7c2Vjb25kQm94WSArIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZfSAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WX0gWmAsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMzNjNGNzJcIixcclxuICAgICAgICAgICAgICBzdHJva2U6IFwiIzcxN0JCQ1wiLFxyXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaW5uZXJCb3R0b21Cb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgICAgIGBNICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHtcclxuICAgICAgICAgICAgdG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgICAgICB9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICAgIEwgJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7dG9wWH0gJHtcclxuICAgICAgICAgICAgc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgICB9IFxyXG4gICAgICAgICAgTCAke3RvcFh9ICR7c2Vjb25kQm94WX0gWmAsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgICAgICBzdHJva2U6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBmb250U2l6ZSA9IDU7XHJcbiAgICAgICAgbGV0IGlubmVyQm90dG9tVGV4dDtcclxuXHJcbiAgICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBgJHttZj8uZml4dHVyZU5hbWV9YDtcclxuXHJcbiAgICAgICAgY29uc3QgY3JlYXRlQm90dG9tVGV4dCA9IChmczogYW55KSA9PlxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHRDb250ZW50LCB7XHJcbiAgICAgICAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogc2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgIGZpbGw6IFwiI0ZGRkZGRlwiLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICBpbm5lckJvdHRvbVRleHQgPSBjcmVhdGVCb3R0b21UZXh0KGZvbnRTaXplKTtcclxuICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICB9IHdoaWxlIChpbm5lckJvdHRvbVRleHQuaGVpZ2h0ID4gaW5uZXJCb3hIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgY29uc3QgbWlkV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICAgICAgY29uc3QgbWlkSGVpZ2h0ID0gKDc3IC8gMTAwKSAqIGhlaWdodDtcclxuICAgICAgICBjb25zdCBtaWRYID0geCArICh3aWR0aCAtIG1pZFdpZHRoKSAvIDI7XHJcbiAgICAgICAgY29uc3QgbWlkWSA9IHRvcFkgKyB0b3BIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgICAgICBjb25zdCBtaWRDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgIHRvcDogbWlkWSxcclxuICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogbWlkSGVpZ2h0LFxyXG4gICAgICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjNzE3QkJDXCIgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBzaGVsZkNvdW50ID0gbWYuc2hlbGZDb25maWc/Lmxlbmd0aDtcclxuICAgICAgICBjb25zdCBib3hIZWlnaHQgPSBtaWRIZWlnaHQgLyAoc2hlbGZDb3VudCArIDIpO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94WSA9IG1pZFk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICAgICAgYE0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGggLSByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIG1pZFdpZHRofSAke1xyXG4gICAgICAgICAgICAgIGZpcnN0Qm94WSArIHJhZGl1c1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIHJhZGl1c30gXHJcbiAgICAgICAgICAgIFEgJHttaWRYfSAke2ZpcnN0Qm94WX0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gWmAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGZpbGw6IGlzTWFzdGVyID8gXCIjRUFFQ0Y1XCIgOiBcIiNEQUYxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiI0FGQjVEOVwiIDogXCIjNkJDQUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBUcnVuY2F0ZSBtZi5oZWFkZXIubGFiZWwgd2l0aCBlbGxpcHNpcyBpZiBpdCBleGNlZWRzIHRoZSBhdmFpbGFibGUgd2lkdGhcclxuICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBtZj8uaGVhZGVyPy5sYWJlbCA/PyBcIlwiO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94VGV4dEZvbnRTaXplID0gNztcclxuICAgICAgICBjb25zdCBmaXJzdEJveFRleHRGb250RmFtaWx5ID0gXCJJbnRlclwiO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94VGV4dEZvbnRXZWlnaHQgPSBcIjYwMFwiO1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Qm94VGV4dFdpZHRoID0gbWlkV2lkdGggLSA0MDsgLy8gbGVhdmUgc3BhY2UgZm9yIGljb25zIG9uIHJpZ2h0XHJcblxyXG4gICAgICAgIC8vIFRydW5jYXRlIHdpdGggZWxsaXBzaXMgaWYgbmVlZGVkXHJcbiAgICAgICAgbGV0IGRpc3BsYXlMYWJlbCA9IGxhYmVsVGV4dDtcclxuICAgICAgICBpZiAobGFiZWxUZXh0KSB7XHJcbiAgICAgICAgICBsZXQgdGVtcFRleHRib3ggPSBuZXcgZmFicmljLlRleHRib3gobGFiZWxUZXh0LCB7XHJcbiAgICAgICAgICAgIGZvbnRTaXplOiBmaXJzdEJveFRleHRGb250U2l6ZSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogZmlyc3RCb3hUZXh0Rm9udEZhbWlseSxcclxuICAgICAgICAgICAgZm9udFdlaWdodDogZmlyc3RCb3hUZXh0Rm9udFdlaWdodCxcclxuICAgICAgICAgICAgd2lkdGg6IGZpcnN0Qm94VGV4dFdpZHRoLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAvLyBJZiB0aGUgdGV4dCBpcyB0b28gd2lkZSwgdHJ1bmNhdGUgYW5kIGFkZCBlbGxpcHNpc1xyXG4gICAgICAgICAgaWYgKHRlbXBUZXh0Ym94LmhlaWdodCA+IGJveEhlaWdodCkge1xyXG4gICAgICAgICAgICBsZXQgZWxsaXBzaXMgPSBcIi4uLlwiO1xyXG4gICAgICAgICAgICAvLyBCaW5hcnkgc2VhcmNoIGZvciBtYXggZml0dGluZyBsZW5ndGhcclxuICAgICAgICAgICAgbGV0IGxlZnQgPSAwO1xyXG4gICAgICAgICAgICBsZXQgcmlnaHQgPSBsYWJlbFRleHQubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgd2hpbGUgKGxlZnQgPCByaWdodCkge1xyXG4gICAgICAgICAgICAgIGxldCBtaWQgPSBNYXRoLmZsb29yKChsZWZ0ICsgcmlnaHQpIC8gMik7XHJcbiAgICAgICAgICAgICAgbGV0IHRlc3RUZXh0ID0gbGFiZWxUZXh0LnNsaWNlKDAsIG1pZCkgKyBlbGxpcHNpcztcclxuICAgICAgICAgICAgICB0ZW1wVGV4dGJveC5zZXQoeyB0ZXh0OiB0ZXN0VGV4dCB9KTtcclxuICAgICAgICAgICAgICBpZiAodGVtcFRleHRib3guaGVpZ2h0ID4gYm94SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICByaWdodCA9IG1pZDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGVmdCA9IG1pZCArIDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGxlZnQtMSBpcyB0aGUgbWF4IGZpdHRpbmcgbGVuZ3RoXHJcbiAgICAgICAgICAgIGRpc3BsYXlMYWJlbCA9IGxhYmVsVGV4dC5zbGljZSgwLCBNYXRoLm1heCgwLCBsZWZ0IC0gMSkpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmaXJzdEJveFRleHQgPSBuZXcgZmFicmljLlRleHRib3goZGlzcGxheUxhYmVsLCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgNixcclxuICAgICAgICAgIHRvcDogZmlyc3RCb3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIGZvbnRTaXplOiBmaXJzdEJveFRleHRGb250U2l6ZSxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IGZpcnN0Qm94VGV4dEZvbnRGYW1pbHksXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBmaXJzdEJveFRleHRGb250V2VpZ2h0LFxyXG4gICAgICAgICAgZmlsbDogaXNNYXN0ZXIgPyBcIiMzNjNGNzJcIiA6IFwiIzAwOUJGM1wiLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJsZWZ0XCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IGZpcnN0Qm94VGV4dFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICB0ZXh0QWxpZ246IFwibGVmdFwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBpY29uU2l6ZSA9IDEwO1xyXG4gICAgICAgIGNvbnN0IGljb25TcGFjaW5nID0gNDtcclxuXHJcbiAgICAgICAgY29uc3QgZmlyc3RCb3hUZXh0Qm91bmRzID0gZmlyc3RCb3guZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgICAgY29uc3QgaWNvbnNUb3AgPVxyXG4gICAgICAgICAgZmlyc3RCb3hUZXh0Qm91bmRzLnRvcCArIGZpcnN0Qm94VGV4dEJvdW5kcy5oZWlnaHQgLyAyIC0gaWNvblNpemUgLyAyO1xyXG4gICAgICAgIGNvbnN0IGljb25zUGFkZGluZ1JpZ2h0ID0gNjtcclxuICAgICAgICBjb25zdCBpY29uc1RvdGFsV2lkdGggPSBpY29uU2l6ZSAqIDIgKyBpY29uU3BhY2luZztcclxuICAgICAgICBjb25zdCBpY29uc0xlZnRTdGFydCA9XHJcbiAgICAgICAgICBtaWRYICsgbWlkV2lkdGggLSBpY29uc1RvdGFsV2lkdGggLSBpY29uc1BhZGRpbmdSaWdodDtcclxuXHJcbiAgICAgICAgY29uc3QgZWRpdEljb25MZWZ0ID0gaWNvbnNMZWZ0U3RhcnQ7XHJcbiAgICAgICAgY29uc3QgZWRpdEljb25Ub3AgPSBpY29uc1RvcDtcclxuICAgICAgICBjb25zdCBlZGl0SWNvblBhdGggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgICAgICBcIk03LjEwMzU0IDEuMDYwMzVDNy4yMTE0NSAwLjk1MjQzNiA3LjMzOTU2IDAuODY2ODM0IDcuNDgwNTYgMC44MDg0MzJDNy42MjE1NSAwLjc1MDAzIDcuNzcyNjcgMC43MTk5NyA3LjkyNTI4IDAuNzE5OTdDOC4wNzc5IDAuNzE5OTcgOC4yMjkwMiAwLjc1MDAzIDguMzcwMDEgMC44MDg0MzJDOC41MTEwMSAwLjg2NjgzNCA4LjYzOTEyIDAuOTUyNDM2IDguNzQ3MDMgMS4wNjAzNUM4Ljg1NDk1IDEuMTY4MjYgOC45NDA1NSAxLjI5NjM3IDguOTk4OTUgMS40MzczN0M5LjA1NzM1IDEuNTc4MzcgOS4wODc0MSAxLjcyOTQ4IDkuMDg3NDEgMS44ODIxQzkuMDg3NDEgMi4wMzQ3MSA5LjA1NzM1IDIuMTg1ODMgOC45OTg5NSAyLjMyNjgyQzguOTQwNTUgMi40Njc4MiA4Ljg1NDk1IDIuNTk1OTMgOC43NDcwMyAyLjcwMzg0TDMuMjAwMjQgOC4yNTA2NEwwLjk0MDQzIDguODY2OTVMMS41NTY3NCA2LjYwNzE1TDcuMTAzNTQgMS4wNjAzNVpcIixcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbGVmdDogZWRpdEljb25MZWZ0LFxyXG4gICAgICAgICAgICB0b3A6IGVkaXRJY29uVG9wLFxyXG4gICAgICAgICAgICBzY2FsZVg6IGljb25TaXplIC8gMTAsXHJcbiAgICAgICAgICAgIHNjYWxlWTogaWNvblNpemUgLyAxMCxcclxuICAgICAgICAgICAgZmlsbDogXCJcIixcclxuICAgICAgICAgICAgc3Ryb2tlOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNzA0MzU1LFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJ0b3BcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHN0cm9rZUxpbmVDYXA6IFwicm91bmRcIixcclxuICAgICAgICAgICAgc3Ryb2tlTGluZUpvaW46IFwicm91bmRcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICAoZWRpdEljb25QYXRoIGFzIGFueSkubmFtZSA9IFwiZWRpdEljb25cIjtcclxuXHJcbiAgICAgICAgY29uc3QgY29weUljb25MZWZ0ID0gZWRpdEljb25MZWZ0ICsgaWNvblNpemUgKyBpY29uU3BhY2luZztcclxuICAgICAgICBjb25zdCBjb3B5SWNvblRvcCA9IGVkaXRJY29uVG9wO1xyXG4gICAgICAgIGNvbnN0IGNvcHlJY29uUGF0aCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgIFwiTTIuMDc3MzUgNS45OTA3N0wxLjY2NjQ3IDUuOTkwNzdDMS40NDg1MyA1Ljk5MDc3IDEuMjM5NTIgNS45MDQyIDEuMDg1NDEgNS43NTAwOUMwLjkzMTMwMyA1LjU5NTk4IDAuODQ0NzI3IDUuMzg2OTcgMC44NDQ3MjcgNS4xNjkwM0wwLjg0NDcyNyAxLjQ3MTE2QzAuODQ0NzI3IDEuMjUzMjIgMC45MzEzMDMgMS4wNDQyMSAxLjA4NTQxIDAuODkwMDk4QzEuMjM5NTIgMC43MzU5OTEgMS40NDg1MyAwLjY0OTQxNCAxLjY2NjQ3IDAuNjQ5NDE0TDUuMzY0MzQgMC42NDk0MTRDNS41ODIyOCAwLjY0OTQxNCA1Ljc5MTI5IDAuNzM1OTkxIDUuOTQ1NCAwLjg5MDA5OEM2LjA5OTUxIDEuMDQ0MjEgNi4xODYwOSAxLjI1MzIyIDYuMTg2MDkgMS40NzExNkw2LjE4NjA5IDEuODgyMDRNNC41NDI1OSAzLjUyNTUzTDguMjQwNDYgMy41MjU1M0M4LjY5NDI5IDMuNTI1NTMgOS4wNjIyIDMuODkzNDQgOS4wNjIyIDQuMzQ3MjhMOS4wNjIyIDguMDQ1MTRDOS4wNjIyIDguNDk4OTggOC42OTQyOSA4Ljg2Njg5IDguMjQwNDYgOC44NjY4OUw0LjU0MjU5IDguODY2ODlDNC4wODg3NSA4Ljg2Njg5IDMuNzIwODQgOC40OTg5OCAzLjcyMDg0IDguMDQ1MTRMMy43MjA4NCA0LjM0NzI4QzMuNzIwODQgMy44OTM0NCA0LjA4ODc1IDMuNTI1NTMgNC41NDI1OSAzLjUyNTUzWlwiLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0OiBjb3B5SWNvbkxlZnQsXHJcbiAgICAgICAgICAgIHRvcDogY29weUljb25Ub3AsXHJcbiAgICAgICAgICAgIHNjYWxlWDogaWNvblNpemUgLyAxMCxcclxuICAgICAgICAgICAgc2NhbGVZOiBpY29uU2l6ZSAvIDEwLFxyXG4gICAgICAgICAgICBmaWxsOiBcIlwiLFxyXG4gICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjMzYzRjcyXCIgOiBcIiMwMDlCRjNcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuNzA0MzU1LFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImxlZnRcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJ0b3BcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHN0cm9rZUxpbmVDYXA6IFwicm91bmRcIixcclxuICAgICAgICAgICAgc3Ryb2tlTGluZUpvaW46IFwicm91bmRcIixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgKGNvcHlJY29uUGF0aCBhcyBhbnkpLm5hbWUgPSBcImNvcHlJY29uXCI7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWx2ZXMgPSBbXTtcclxuICAgICAgICBjb25zdCBzaGVsZkhlaWdodCA9IG1pZEhlaWdodCAtIDIgKiBib3hIZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmIChtZi5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwxXCIpIHtcclxuICAgICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2hlbGYgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBzaGVsZkhlaWdodCxcclxuICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gbWY/LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgICAvLyBXcmFwIHRleHQgd2l0aGluIGZpeHR1cmUgd2lkdGgsIHNocmluayBmb250IGlmIG5lZWRlZCB0byBmaXQgd2l0aGluIHNoZWxmIGhlaWdodFxyXG4gICAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gc2hlbGZIZWlnaHQgKiAwLjg7XHJcbiAgICAgICAgICBsZXQgZm9udFNpemVMMSA9IDY7IC8vIHN0YXJ0IHNsaWdodGx5IGxhcmdlcjsgd2lsbCBzaHJpbmsgdG8gZml0XHJcblxyXG4gICAgICAgICAgY29uc3QgY3JlYXRlV3JhcHBlZFRleHRib3ggPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBsZXQgd3JhcHBlZFRleHQgPSBjcmVhdGVXcmFwcGVkVGV4dGJveChmb250U2l6ZUwxKTtcclxuICAgICAgICAgIHdoaWxlICh3cmFwcGVkVGV4dC5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0ICYmIGZvbnRTaXplTDEgPiAyKSB7XHJcbiAgICAgICAgICAgIGZvbnRTaXplTDEgLT0gMC41O1xyXG4gICAgICAgICAgICB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IE1hdGgubWluKG1heFRleHRXaWR0aCwgd3JhcHBlZFRleHQud2lkdGghKSArIHBhZGRpbmcsXHJcbiAgICAgICAgICAgIGhlaWdodDogd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyAyLFxyXG4gICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICByeTogMSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZiwgYmFja2dyb3VuZCwgd3JhcHBlZFRleHQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWYucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoZWxmQ291bnQ7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGkgKyAxKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZik7XHJcblxyXG4gICAgICAgICAgICBpZiAobWYuc2hlbGZDb25maWc/LltpXS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBtZi5zaGVsZkNvbmZpZz8uW2ldLnRyYXlSb3dzIHx8IDE7XHJcbiAgICAgICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG5cclxuICAgICAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgdGV4dCA9XHJcbiAgICAgICAgICAgICAgbWYuc2hlbGZDb25maWc/LltpXS5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiICsgXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgICAgICAgICAvLyBMMjogU2luZ2xlLWxpbmUgd2l0aCBlbGxpcHNpcyB3aXRoaW4gc2hlbGYgcmVjdCAobWlkV2lkdGgpXHJcbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxQYWRkaW5nID0gNjsgLy8gcGFkZGluZyBpbnNpZGUgc2hlbGYgcmVjdFxyXG4gICAgICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBNYXRoLm1heCgwLCBtaWRXaWR0aCAtIGhvcml6b250YWxQYWRkaW5nKTtcclxuICAgICAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IGJveEhlaWdodCAqIDAuODtcclxuICAgICAgICAgICAgY29uc3QgYmFzZUZvbnRTaXplID0gNTtcclxuXHJcbiAgICAgICAgICAgIC8vIFVzZSBzaW5nbGUtbGluZSB0ZXh0IG1lYXN1cmVtZW50IHRvIGF2b2lkIG11bHRpLWxpbmUgd3JhcHBpbmcgZHVyaW5nIG1lYXN1cmVtZW50XHJcbiAgICAgICAgICAgIGNvbnN0IG1lYXN1cmUgPSAodDogc3RyaW5nKSA9PlxyXG4gICAgICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dCh0LCB7XHJcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGxldCBkaXNwbGF5VGV4dCA9IHRleHQ7XHJcbiAgICAgICAgICAgIGxldCBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuICAgICAgICAgICAgICBsZXQgbGVmdElkeCA9IDA7XHJcbiAgICAgICAgICAgICAgbGV0IHJpZ2h0SWR4ID0gdGV4dC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgIHdoaWxlIChsZWZ0SWR4IDwgcmlnaHRJZHgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1pZElkeCA9IE1hdGguZmxvb3IoKGxlZnRJZHggKyByaWdodElkeCkgLyAyKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRleHQuc2xpY2UoMCwgbWlkSWR4KSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGNhbmRpZGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJpZ2h0SWR4ID0gbWlkSWR4O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgbGVmdElkeCA9IG1pZElkeCArIDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGRpc3BsYXlUZXh0ID0gdGV4dC5zbGljZSgwLCBNYXRoLm1heCgwLCBsZWZ0SWR4IC0gMSkpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLCAvLyBtYXRjaCBzaGVsZiByZWN0IHdpZHRoXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbihtYXhUZXh0SGVpZ2h0LCBtZWFzdXJlZC5oZWlnaHQgPz8gMTApICsgMixcclxuICAgICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICAgIHJ5OiAxLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsVGV4dCA9IG5ldyBmYWJyaWMuVGV4dChkaXNwbGF5VGV4dCwge1xyXG4gICAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2goYmFja2dyb3VuZCwgZmluYWxUZXh0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKG1mLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDNcIikge1xyXG4gICAgICAgICAgY29uc3Qgc2VxdWVudGlhbEdyb3VwczogeyB6b25lOiBzdHJpbmc7IHNoZWx2ZXM6IGFueVtdIH1bXSA9IFtdO1xyXG5cclxuICAgICAgICAgIGxldCBwcmV2aW91c1pvbmU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAgIGZvciAoY29uc3Qgc2hlbGYgb2YgbWYuc2hlbGZDb25maWcpIHtcclxuICAgICAgICAgICAgY29uc3Qgem9uZSA9IHNoZWxmLnpvbmUgfHwgXCJVbmtub3duXCI7XHJcbiAgICAgICAgICAgIGlmICh6b25lICE9PSBwcmV2aW91c1pvbmUpIHtcclxuICAgICAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzLnB1c2goeyB6b25lLCBzaGVsdmVzOiBbc2hlbGZdIH0pO1xyXG4gICAgICAgICAgICAgIHByZXZpb3VzWm9uZSA9IHpvbmU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc2VxdWVudGlhbEdyb3Vwc1tzZXF1ZW50aWFsR3JvdXBzLmxlbmd0aCAtIDFdLnNoZWx2ZXMucHVzaChzaGVsZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsZXQgY3VycmVudFNoZWxmSW5kZXggPSAwO1xyXG5cclxuICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc2VxdWVudGlhbEdyb3Vwcykge1xyXG4gICAgICAgICAgICBjb25zdCB7IHpvbmUsIHNoZWx2ZXM6IHNoZWx2ZXNJbkdyb3VwIH0gPSBncm91cDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwU3RhcnRJbmRleCA9IGN1cnJlbnRTaGVsZkluZGV4O1xyXG4gICAgICAgICAgICBjb25zdCBncm91cExlbmd0aCA9IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwVG9wWSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChncm91cFN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21ZID0gZ3JvdXBUb3BZICsgYm94SGVpZ2h0ICogZ3JvdXBMZW5ndGg7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2hlbGZEYXRhID0gc2hlbHZlc0luR3JvdXBbal07XHJcbiAgICAgICAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChjdXJyZW50U2hlbGZJbmRleCArIDEpO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBzaGVsZlJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBpc01hc3RlciA/IFwiIzcxN0JCQ1wiIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmUmVjdCk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChzaGVsZkRhdGEuc2hlbGZUeXBlID09PSBcInRyYXlcIikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBzaGVsZkRhdGEudHJheVJvd3MgfHwgMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RQZXJTaGVsZiA9IHNoZWxmRGF0YS5wcm9kdWN0UGVyU2hlbGYgfHwgMDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3dTcGFjaW5nID0gYm94SGVpZ2h0IC8gdHJheVJvd3M7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5TcGFjaW5nID0gbWlkV2lkdGggLyBwcm9kdWN0UGVyU2hlbGY7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgciA9IDE7IHIgPCB0cmF5Um93czsgcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICAgICAgY29uc3QgdHJheUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICAgICAgW21pZFgsIGxpbmVZLCBtaWRYICsgbWlkV2lkdGgsIGxpbmVZXSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDE7IGMgPCBwcm9kdWN0UGVyU2hlbGY7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBsaW5lWCA9IG1pZFggKyBjICogY29sdW1uU3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgICAgICBbbGluZVgsIGJveFksIGxpbmVYLCBib3hZICsgYm94SGVpZ2h0XSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2ZXJ0aWNhbExpbmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjdXJyZW50U2hlbGZJbmRleCsrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBncm91cEJvdHRvbUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgW21pZFgsIGdyb3VwQm90dG9tWSwgbWlkWCArIG1pZFdpZHRoLCBncm91cEJvdHRvbVldLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogaXNNYXN0ZXIgPyBcIiM3MTdCQkNcIiA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2goZ3JvdXBCb3R0b21MaW5lKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtZi5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxhYmVsVGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveCh6b25lLCB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLSBsYWJlbFBhZGRpbmcsXHJcbiAgICAgICAgICAgICAgICB0b3A6IGdyb3VwQm90dG9tWSxcclxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgICAgIGZpbGw6IFwiIzcwNzA3MFwiLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luWDogXCJyaWdodFwiLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwicmlnaHRcIixcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKGxhYmVsVGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWCA9IG1pZFggKyBtaWRXaWR0aCAvIDI7XHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWSA9IGdyb3VwVG9wWSArIChncm91cEJvdHRvbVkgLSBncm91cFRvcFkpIC8gMjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25CcmFuZHMgPSBuZXcgU2V0KCk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzSW5Hcm91cD8uZm9yRWFjaCgoc2hlbGYpID0+IHtcclxuICAgICAgICAgICAgICBzaGVsZi5wcm9kdWN0QnJhbmROYW1lPy5mb3JFYWNoKChicmFuZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uQnJhbmRzLmFkZChicmFuZCk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKFsuLi5zZWN0aW9uQnJhbmRzXS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0ZXh0ID0gWy4uLnNlY3Rpb25CcmFuZHNdLmpvaW4oXCIgKyBcIik7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgICAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVjdFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IDIwO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgZm9udFNpemUgPSA2O1xyXG4gICAgICAgICAgICAgIGxldCB3cmFwcGVkVGV4dDtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgY3JlYXRlVGV4dGJveCA9IChmczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNDAwXCIsXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlVGV4dGJveChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICAgICAgICAgICAgfSB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCByZWN0SGVpZ2h0ID0gd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyBwYWRkaW5nO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBncm91cENlbnRlclRleHQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgIHdpZHRoOiByZWN0V2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHJlY3RIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaChncm91cENlbnRlclRleHQsIHdyYXBwZWRUZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1mPy52bUNvbmZpZz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1mLnZtQ29uZmlnLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgdm0gPSBtZi52bUNvbmZpZ1tpXTtcclxuICAgICAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdm0uc3RhcnRZUG9zaXRpb24gLSAxO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdm0uZW5kWVBvc2l0aW9uIC0gMTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3Qgc2hlbGZUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICAgICAgICBjb25zdCBzaGVsZkhlaWdodFNwYW4gPSBib3hIZWlnaHQgKiAoZW5kSW5kZXggLSBzdGFydEluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgICAgICAgIGxldCB2bUhlaWdodFB4OiBudW1iZXIgPSBzaGVsZkhlaWdodFNwYW47XHJcbiAgICAgICAgICAgICAgbGV0IHk6IG51bWJlciA9IHNoZWxmVG9wWTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKHZtLnlab25lICYmIHZtLnlab25lICE9PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgICAgICAgdm1IZWlnaHRQeCA9IHNoZWxmSGVpZ2h0U3BhbiAvIDM7XHJcblxyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh2bS55Wm9uZSkge1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwidG9wXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFkgKyB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWSArIDIgKiB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBsZXQgeCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgbGV0IHdpZHRoID0gbWlkV2lkdGg7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghdm0ueFpvbmUgfHwgdm0ueFpvbmUgPT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25XaWR0aCA9IG1pZFdpZHRoIC8gMztcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodm0ueFpvbmUpIHtcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcImxlZnRcIjpcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHggPSBtaWRYICsgc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICBjYXNlIFwicmlnaHRcIjpcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gbWlkWCArIDIgKiBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmICh2bT8udm1JbWFnZVVybCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3Qgdm1JbWFnZTogYW55ID0gYXdhaXQgZmFicmljLkZhYnJpY0ltYWdlLmZyb21VUkwoXHJcbiAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5jZG5Vcmx9JHt2bS52bUltYWdlVXJsfWAsXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IFwiYW5vbnltb3VzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHZtSW1hZ2Uuc2V0KHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiB4ICsgd2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogeSArIHZtSGVpZ2h0UHggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBzY2FsZVg6IHdpZHRoIC8gdm1JbWFnZS53aWR0aCEsXHJcbiAgICAgICAgICAgICAgICAgICAgc2NhbGVZOiB2bUhlaWdodFB4IC8gdm1JbWFnZS5oZWlnaHQhLFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2bUltYWdlKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBsb2FkaW5nIGltYWdlIGZvciBWTTogJHt2bS52bUltYWdlVXJsfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyLFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2bUJveCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgICAgICAgICAgIHRvcDogeSxcclxuICAgICAgICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogdm1IZWlnaHRQeCxcclxuICAgICAgICAgICAgICAgICAgZmlsbDogXCIjNjkzOEVGXCIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBmb250U2l6ZSA9IDU7XHJcbiAgICAgICAgICAgICAgICBsZXQgdm1UZXh0O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNyZWF0ZVZtVGV4dCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICAgICAgICBuZXcgZmFicmljLlRleHRib3godm0udm1OYW1lIHx8IFwiXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiB4ICsgd2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogeSArIHZtSGVpZ2h0UHggLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgICAgdm1UZXh0ID0gY3JlYXRlVm1UZXh0KGZvbnRTaXplKTtcclxuICAgICAgICAgICAgICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgICAgICAgICAgICAgfSB3aGlsZSAodm1UZXh0LmhlaWdodCA+IHZtSGVpZ2h0UHggJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godm1Cb3gsIHZtVGV4dCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBFcnJvciBpbiBkcmF3aW5nIFZNOiBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBsYXN0Qm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzaGVsZkNvdW50ICsgMSk7XHJcbiAgICAgICAgY29uc3QgbGFzdEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgICAgIGBNICR7bWlkWH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHtcclxuICAgICAgICAgICAgICBtaWRYICsgbWlkV2lkdGggLSByYWRpdXNcclxuICAgICAgICAgICAgfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICAgICAgTCAke21pZFggKyByYWRpdXN9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgICAgICBRICR7bWlkWH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHttaWRYfSAke1xyXG4gICAgICAgICAgICAgIGxhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIEwgJHttaWRYfSAke2xhc3RCb3hZfSBaYCxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgZmlsbDogaXNNYXN0ZXIgPyBcIiNFQUVDRjVcIiA6IFwiI0RBRjFGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2U6IGlzTWFzdGVyID8gXCIjQUZCNUQ5XCIgOiBcIiM2QkNBRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGxhc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYCR7bWY/LmZvb3Rlcj8ubGFiZWwgPyBtZi5mb290ZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRvcDogbGFzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBpc01hc3RlciA/IFwiIzM2M0Y3MlwiIDogXCIjMDA5QkYzXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlndGg6IGJveEhlaWdodCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgYm90dG9tV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICAgICAgY29uc3QgYm90dG9tSGVpZ2h0ID0gKDMgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgICAgIGNvbnN0IGJvdHRvbVggPSB4ICsgKHdpZHRoIC0gYm90dG9tV2lkdGgpIC8gMjtcclxuICAgICAgICBjb25zdCBib3R0b21ZID0gbWlkWSArIG1pZEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgICAgIGNvbnN0IGJvdHRvbUNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBib3R0b21YLFxyXG4gICAgICAgICAgdG9wOiBib3R0b21ZLFxyXG4gICAgICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBib3R0b21IZWlnaHQsXHJcbiAgICAgICAgICByeDogcmFkaXVzLFxyXG4gICAgICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgICAgIHN0cm9rZTogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBhY3R1YWxTaGVsZkNvdW50ID1cclxuICAgICAgICAgIG1mPy5zaGVsZkNvbmZpZz8uZmlsdGVyKChzOiBhbnkpID0+IHMuc2hlbGZUeXBlICE9IFwidm1vbmx5XCIpXHJcbiAgICAgICAgICAgID8ubGVuZ3RoID8/IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IGJvdHRvbVRleHRDb250ZW50ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICAgICAgYFNoZWx2ZXMgLSAke2FjdHVhbFNoZWxmQ291bnR9IC4gUHJvZHVjdHMgLSAgJHttZi5maXh0dXJlQ2FwYWNpdHl9IC4gVk0gLSAke21mLnZtQ29uZmlnLmxlbmd0aH1gLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsZWZ0OiBib3R0b21YICsgYm90dG9tV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0b3A6IGJvdHRvbVkgKyBib3R0b21IZWlnaHQgLyAyLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWd0aDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cENoaWxkcmVuID0gW1xyXG4gICAgICAgICAgbWFpbkNvbnRhaW5lcixcclxuICAgICAgICAgIC4uLighaXNNYXN0ZXIgPyBbdG9wQ29udGFpbmVyLCBpbm5lclRvcEJveCwgaW5uZXJUb3BUZXh0XSA6IFtdKSxcclxuICAgICAgICAgIGlubmVyQm90dG9tQm94LFxyXG4gICAgICAgICAgaW5uZXJCb3R0b21UZXh0LFxyXG4gICAgICAgICAgbWlkQ29udGFpbmVyLFxyXG4gICAgICAgICAgZmlyc3RCb3gsXHJcbiAgICAgICAgICBmaXJzdEJveFRleHQsXHJcbiAgICAgICAgICAuLi4oIWlzTWFzdGVyID8gW2VkaXRJY29uUGF0aF0gOiBbXSksXHJcbiAgICAgICAgICBjb3B5SWNvblBhdGgsXHJcbiAgICAgICAgICAuLi5zaGVsdmVzLFxyXG4gICAgICAgICAgbGFzdEJveCxcclxuICAgICAgICAgIGxhc3RCb3hUZXh0LFxyXG4gICAgICAgICAgYm90dG9tQ29udGFpbmVyLFxyXG4gICAgICAgICAgYm90dG9tVGV4dENvbnRlbnQsXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChncm91cENoaWxkcmVuLCB7XHJcbiAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICAgICAgICAvLyBhbmdsZTogbWYucmVsYXRpdmVQb3NpdGlvbj8uYW5nbGUgPz8gMFxyXG4gICAgICAgIH0pIGFzIEZpeHR1cmVHcm91cDtcclxuXHJcbiAgICAgICAgZml4dHVyZUdyb3VwLmZpeHR1cmVJZCA9IG1mLl9pZDtcclxuICAgICAgICBmaXh0dXJlR3JvdXAuZml4dHVyZVR5cGUgPSBtZi5maXh0dXJlVHlwZTtcclxuICAgICAgICBmaXh0dXJlR3JvdXAuZ3JvdXBOYW1lID0gbWY/LnRlbXBsYXRlR3JvdXBOYW1lID8/IFwiXCI7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLnRlbXBsYXRlVHlwZSA9IG1mLnRlbXBsYXRlVHlwZTtcclxuICAgICAgICBmaXh0dXJlR3JvdXAubmFtZSA9IG1mLnRlbXBsYXRlVHlwZSA/PyBcImZpeHR1cmVcIjtcclxuICAgICAgICBmaXh0dXJlR3JvdXAuc3RvcmVDb3VudCA9IG1mPy5zdG9yZUNvdW50ID8/IDA7XHJcbiAgICAgICAgZml4dHVyZUdyb3VwLnBhcmVudEZhYnJpYyA9IHBhcmVudEZhYnJpYztcclxuXHJcbiAgICAgICAgZml4dHVyZUdyb3VwLm9uKFwibW91c2Vkb3duXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2hpbGROYW1lID0gb3B0LnN1YlRhcmdldHM/LlswXT8ubmFtZTtcclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGNoaWxkTmFtZSA9PT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgIGlzTWFzdGVyICYmXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCAhPT0gbWYuX2lkICYmXHJcbiAgICAgICAgICAgICF0aGlzLnByZXZlbnRDbGlja1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmVudENsaWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckFycm93QnlJZCh0aGlzLnNlbGVjdGVkTWFzdGVySWQpO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXMoXCJzdWJcIik7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNYXN0ZXJJZCA9IG1mLl9pZDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHsgZ3gsIGd5IH0gPSB0aGlzLmdldEdyb3VwQ2VudGVyQm90dG9tKFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVHcm91cCBhcyBmYWJyaWMuR3JvdXAsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyU3ViRml4dHVyZXMoZml4dHVyZUdyb3VwLCBneCwgZ3kgKyA1MCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBmaXh0dXJlR3JvdXA7XHJcbiAgICAgIH0pLFxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgdG90YWxXaWR0aCA9IDA7XHJcbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgdG90YWxXaWR0aCArPSBncm91cC53aWR0aCEgKyBncm91cFNwYWNpbmc7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0b3RhbFdpZHRoIC09IGdyb3VwU3BhY2luZztcclxuICAgIGxldCBueCA9IHggLSB0b3RhbFdpZHRoIC8gMjtcclxuXHJcbiAgICBncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHtcclxuICAgICAgZ3JvdXAuc2V0KHsgbGVmdDogbngsIHRvcDogeSB9KTtcclxuICAgICAgbnggKz0gZ3JvdXAud2lkdGghICsgZ3JvdXBTcGFjaW5nO1xyXG4gICAgICB0aGlzLmNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZ3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgZ2V0R3JvdXBDZW50ZXJCb3R0b20oZ3JvdXA6IGZhYnJpYy5Hcm91cCk6IHsgZ3g6IG51bWJlcjsgZ3k6IG51bWJlciB9IHtcclxuICAgIGNvbnN0IGNlbnRlciA9IGdyb3VwLmdldENlbnRlclBvaW50KCk7XHJcbiAgICBjb25zdCBjZW50ZXJYID0gY2VudGVyLng7XHJcbiAgICBjb25zdCBib3R0b21ZID0gZ3JvdXAudG9wISArIGdyb3VwLmhlaWdodCE7XHJcbiAgICByZXR1cm4geyBneDogY2VudGVyWCwgZ3k6IGJvdHRvbVkgfTtcclxuICB9XHJcblxyXG4gIGNsZWFyT2xkRml4dHVyZVRlbXBsYXRlc0Zyb21DYW52YXModGVtcGxhdGVUeXBlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGdyb3Vwc1RvUmVtb3ZlID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKFxyXG4gICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICBvYmogaW5zdGFuY2VvZiBmYWJyaWMuR3JvdXAgJiZcclxuICAgICAgICAgIChvYmogYXMgYW55KS50ZW1wbGF0ZVR5cGUgPT09IHRlbXBsYXRlVHlwZSxcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoZ3JvdXBzVG9SZW1vdmUpIHtcclxuICAgICAgZ3JvdXBzVG9SZW1vdmUuZm9yRWFjaCgoZ3JvdXApID0+IHRoaXMuY2FudmFzLnJlbW92ZShncm91cCkpO1xyXG4gICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmF3QXJyb3coZnJvbUdyb3VwOiBmYWJyaWMuR3JvdXAsIHRvR3JvdXA6IGZhYnJpYy5Hcm91cCwgYXJyb3dJZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBmcm9tID0gZnJvbUdyb3VwLmFDb29yZHMgPz8gZnJvbUdyb3VwLmNhbGNPQ29vcmRzKCk7XHJcbiAgICBjb25zdCB0byA9IHRvR3JvdXAuYUNvb3JkcyA/PyB0b0dyb3VwLmNhbGNPQ29vcmRzKCk7XHJcblxyXG4gICAgY29uc3QgZnJvbVggPSAoZnJvbS5ibC54ICsgZnJvbS5ici54KSAvIDI7XHJcbiAgICBjb25zdCBmcm9tWSA9IChmcm9tLmJsLnkgKyBmcm9tLmJyLnkpIC8gMjtcclxuXHJcbiAgICBjb25zdCB0b1ggPSAodG8udGwueCArIHRvLnRyLngpIC8gMjtcclxuICAgIGNvbnN0IHRvWSA9ICh0by50bC55ICsgdG8udHIueSkgLyAyO1xyXG5cclxuICAgIGNvbnN0IGhvcml6b250YWxPZmZzZXQgPSB0b1ggLSBmcm9tWDtcclxuICAgIGNvbnN0IHZlcnRpY2FsT2Zmc2V0ID0gdG9ZIC0gZnJvbVk7XHJcbiAgICBjb25zdCBjdXJ2ZVNpemUgPSAxNDtcclxuXHJcbiAgICBsZXQgcGF0aERhdGEgPSBcIlwiO1xyXG5cclxuICAgIGlmIChNYXRoLmFicyhob3Jpem9udGFsT2Zmc2V0KSA8IDUpIHtcclxuICAgICAgLy8gRGlyZWN0IHZlcnRpY2FsIGxpbmVcclxuICAgICAgcGF0aERhdGEgPSBgTSAke2Zyb21YfSAke2Zyb21ZfSBMICR7dG9YfSAke3RvWX1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgbWlkWSA9IGZyb21ZICsgdmVydGljYWxPZmZzZXQgLyAyO1xyXG4gICAgICBjb25zdCBkaXJlY3Rpb24gPSBob3Jpem9udGFsT2Zmc2V0ID4gMCA/IDEgOiAtMTtcclxuXHJcbiAgICAgIGNvbnN0IGN1cnZlMVggPSBmcm9tWCArIGRpcmVjdGlvbiAqIGN1cnZlU2l6ZTtcclxuICAgICAgY29uc3QgY3VydmUyWCA9IHRvWCAtIGRpcmVjdGlvbiAqIGN1cnZlU2l6ZTtcclxuXHJcbiAgICAgIHBhdGhEYXRhID0gW1xyXG4gICAgICAgIGBNICR7ZnJvbVh9ICR7ZnJvbVl9YCxcclxuICAgICAgICBgTCAke2Zyb21YfSAke21pZFkgLSBjdXJ2ZVNpemV9YCxcclxuICAgICAgICBgUSAke2Zyb21YfSAke21pZFl9ICR7Y3VydmUxWH0gJHttaWRZfWAsXHJcbiAgICAgICAgYEwgJHtjdXJ2ZTJYfSAke21pZFl9YCxcclxuICAgICAgICBgUSAke3RvWH0gJHttaWRZfSAke3RvWH0gJHttaWRZICsgY3VydmVTaXplfWAsXHJcbiAgICAgICAgYEwgJHt0b1h9ICR7dG9ZfWAsXHJcbiAgICAgIF0uam9pbihcIiBcIik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYXJyb3dMaW5lID0gbmV3IGZhYnJpYy5QYXRoKHBhdGhEYXRhLCB7XHJcbiAgICAgIHN0cm9rZTogXCIjQUZCNUQ5XCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAxLjgsXHJcbiAgICAgIGZpbGw6IFwiXCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEFycm93aGVhZFxyXG4gICAgY29uc3QgYW5nbGUgPSBNYXRoLmF0YW4yKHRvWSAtICh0b1kgLSAxMCksIHRvWCAtIHRvWCk7XHJcbiAgICBjb25zdCBoZWFkbGVuID0gMTA7XHJcbiAgICBjb25zdCBhcnJvd0hlYWQgPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIFtcclxuICAgICAgICBgTSAke3RvWH0gJHt0b1l9YCxcclxuICAgICAgICBgTCAke3RvWCAtIGhlYWRsZW4gKiBNYXRoLmNvcyhhbmdsZSAtIE1hdGguUEkgLyA1KX0gJHtcclxuICAgICAgICAgIHRvWSAtIGhlYWRsZW4gKiBNYXRoLnNpbihhbmdsZSAtIE1hdGguUEkgLyA1KVxyXG4gICAgICAgIH1gLFxyXG4gICAgICAgIGBNICR7dG9YfSAke3RvWX1gLFxyXG4gICAgICAgIGBMICR7dG9YIC0gaGVhZGxlbiAqIE1hdGguY29zKGFuZ2xlICsgTWF0aC5QSSAvIDUpfSAke1xyXG4gICAgICAgICAgdG9ZIC0gaGVhZGxlbiAqIE1hdGguc2luKGFuZ2xlICsgTWF0aC5QSSAvIDUpXHJcbiAgICAgICAgfWAsXHJcbiAgICAgIF0uam9pbihcIiBcIiksXHJcbiAgICAgIHtcclxuICAgICAgICBzdHJva2U6IFwiI0FGQjVEOVwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAxLjgsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIC8vIEdyb3VwaW5nIGJvdGggbGluZSBhbmQgYXJyb3doZWFkXHJcbiAgICBjb25zdCBhcnJvd0dyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbYXJyb3dMaW5lLCBhcnJvd0hlYWRdLCB7XHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHsgYXJyb3dJZDogc3RyaW5nIH07XHJcblxyXG4gICAgLy8gQXR0YWNoIGN1c3RvbSBhcnJvdyBJRFxyXG4gICAgYXJyb3dHcm91cC5hcnJvd0lkID0gYXJyb3dJZDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5hZGQoYXJyb3dHcm91cCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckFycm93QnlJZChhcnJvd0lkOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGFycm93R3JvdXAgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIGZhYnJpYy5Hcm91cCAmJiAob2JqIGFzIGFueSkuYXJyb3dJZCA9PT0gYXJyb3dJZCxcclxuICAgICAgKTtcclxuXHJcbiAgICBpZiAoYXJyb3dHcm91cCkge1xyXG4gICAgICBhcnJvd0dyb3VwLmZvckVhY2goKGdyb3VwKSA9PiB0aGlzLmNhbnZhcy5yZW1vdmUoZ3JvdXApKTtcclxuICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EdXBsaWNhdGUoZml4dHVyZTogYW55KSB7XHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2VcclxuICAgICAgLmR1cGxpY2F0ZUZpeHR1cmVUZW1wbGF0ZSh7IHRlbXBsYXRlSWQ6IGZpeHR1cmUuZml4dHVyZUlkIH0pXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Rml4dHVyZSA9XHJcbiAgICAgICAgICAgICAgZml4dHVyZS50ZW1wbGF0ZVR5cGUgPT09IFwibWFzdGVyXCJcclxuICAgICAgICAgICAgICAgID8gZml4dHVyZVxyXG4gICAgICAgICAgICAgICAgOiBmaXh0dXJlLnBhcmVudEZhYnJpYztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBcnJvd0J5SWQodGhpcy5zZWxlY3RlZE1hc3RlcklkKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhck9sZEZpeHR1cmVUZW1wbGF0ZXNGcm9tQ2FudmFzKFwic3ViXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWFzdGVySWQgPSBjdXJyZW50Rml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB7IGd4LCBneSB9ID0gdGhpcy5nZXRHcm91cENlbnRlckJvdHRvbShjdXJyZW50Rml4dHVyZSk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyU3ViRml4dHVyZXMoY3VycmVudEZpeHR1cmUsIGd4LCBneSArIDUwKTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QocmVzLmRhdGEubWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgICAgICBlcnI/LmVycm9yPy5lcnJvciB8fCBcIkZhaWxlZCB0byBjcmVhdGUgdmFyaWFudFwiLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBkdXBsaWNhdGVGaXh0dXJlVGVtcGxhdGUgW2Vycl06XCIsIGVycik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGlkPVwidHJlZS1jYW52YXMtY2FyZFwiIGNsYXNzPVwidy0xMDAgcC02XCI+XHJcbiAgPGNhbnZhcyBpZD1cInRlbXBsYXRlLWNhbnZhc1wiICN0ZW1wbGF0ZUNhbnZhcz48L2NhbnZhcz5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB3LTEwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjExXCIgdmlld0JveD1cIjAgMCAxMCAxMVwiIGZpbGw9XCJub25lXCIgY2xhc3M9XCJtZS0xXCI+XHJcbiAgICAgICAgPGNpcmNsZSBjeD1cIjQuODQzMVwiIGN5PVwiNS40OTk5NlwiIHI9XCI0Ljg0MzFcIiBmaWxsPVwiIzYxNzJGM1wiIC8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgICA8cCBjbGFzcz1cIm0tMCBtZS0zXCI+TWFzdGVyIFRlbXBsYXRlPC9wPlxyXG4gICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjExXCIgaGVpZ2h0PVwiMTFcIiB2aWV3Qm94PVwiMCAwIDExIDExXCIgZmlsbD1cIm5vbmVcIiBjbGFzcz1cIm1lLTFcIj5cclxuICAgICAgICA8Y2lyY2xlIGN4PVwiNS40NDQ2NlwiIGN5PVwiNS40OTk5NlwiIHI9XCI0Ljg0MzFcIiBmaWxsPVwiIzMzQjVGRlwiIC8+XHJcbiAgICAgIDwvc3ZnPlxyXG4gICAgICA8cCBjbGFzcz1cIm0tMFwiPlZhcmlhbnQvQ2hpbGQgVGVtcGxhdGU8L3A+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ6b29tXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ6b29tLWluXCIgKGNsaWNrKT1cInpvb21JbigpXCI+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICA8cGF0aCBkPVwiTTEyIDVWMTlNNSAxMkgxOVwiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ6b29tLW91dFwiIChjbGljayk9XCJ6b29tT3V0KClcIj5cclxuICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgIDxwYXRoIGQ9XCJNNSAxMkgxOVwiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==