{"threadId":"019f706b-56f6-76d2-8dec-f6a85e4ffced","checkpoints":[{"id":"cp-1784616136896-98c38fa2","turnId":"019f81c6-8380-7090-ba22-37d25897767d","createdAt":"2026-07-21T06:42:16.896Z","changedFiles":3,"files":[{"relativePath":"chatbot-unified\\frontend\\widgets\\chatbot-unified.css","existed":true,"content":"LyoqDQogKiBDSEFUQk9UIFVOSUZJRUQgQ1NTDQogKiBFc3RpbG9zIHVuaWZpY2Fkb3MgcGFyYSBsb3MgMyB3aWRnZXRzIGRlbCBTdXBlciBDaGF0Ym90DQogKg0KICogV2lkZ2V0czoNCiAqIDEuIGNoYXRib3Qtd2lkZ2V0LmpzICh2aXNpdGFudGVzKQ0KICogMi4gYWR2ZXJ0aXNlci1jaGF0LXdpZGdldC5qcyAoYW51bmNpYW50ZXMpIOKtkA0KICogMy4gYWRtaW4tcGFuZWwtd2lkZ2V0LmpzIChhZG1pbmlzdHJhZG9yZXMpDQogKg0KICogQ2FyYWN0ZXLDrXN0aWNhczoNCiAqIOKchSBCRU0gbWV0aG9kb2xvZ3kNCiAqIOKchSBDU1MgVmFyaWFibGVzIChjdXN0b20gcHJvcGVydGllcykNCiAqIOKchSBEYXJrIG1vZGUgc3VwcG9ydA0KICog4pyFIFJlc3BvbnNpdmUgZGVzaWduIChtb2JpbGUtZmlyc3QpDQogKiDinIUgU21vb3RoIGFuaW1hdGlvbnMNCiAqIOKchSBBZG1pbkxURSBjb21wYXRpYmxlDQogKiDinIUgQWNjZXNzaWJpbGl0eSAoZm9jdXMgc3RhdGVzLCBoaWdoIGNvbnRyYXN0KQ0KICoNCiAqIFVzbzoNCiAqIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iL2FkbWluL2NoYXRib3QtdW5pZmllZC9mcm9udGVuZC93aWRnZXRzL2NoYXRib3QtdW5pZmllZC5jc3MiPg0KICovDQoNCi8qID09PT09IENTUyBWQVJJQUJMRVMgPT09PT0gKi8NCg0KOnJvb3Qgew0KICAgIC8qIENvbG9ycyAtIExpZ2h0IG1vZGUgKi8NCiAgICAtLWNoYXRib3QtcHJpbWFyeTogIzAwN2JmZjsNCiAgICAtLWNoYXRib3Qtc3VjY2VzczogIzI4YTc0NTsNCiAgICAtLWNoYXRib3Qtd2FybmluZzogI2ZmYzEwNzsNCiAgICAtLWNoYXRib3QtZGFuZ2VyOiAjZGMzNTQ1Ow0KICAgIC0tY2hhdGJvdC1pbmZvOiAjMTdhMmI4Ow0KICAgIC0tY2hhdGJvdC1kYXJrOiAjMzQzYTQwOw0KICAgIC0tY2hhdGJvdC1saWdodDogI2Y4ZjlmYTsNCg0KICAgIC8qIEdyYXlzICovDQogICAgLS1jaGF0Ym90LWdyYXktMTAwOiAjZjhmOWZhOw0KICAgIC0tY2hhdGJvdC1ncmF5LTIwMDogI2U5ZWNlZjsNCiAgICAtLWNoYXRib3QtZ3JheS0zMDA6ICNkZWUyZTY7DQogICAgLS1jaGF0Ym90LWdyYXktNDAwOiAjY2VkNGRhOw0KICAgIC0tY2hhdGJvdC1ncmF5LTUwMDogI2FkYjViZDsNCiAgICAtLWNoYXRib3QtZ3JheS02MDA6ICM2Yzc1N2Q7DQogICAgLS1jaGF0Ym90LWdyYXktNzAwOiAjNDk1MDU3Ow0KICAgIC0tY2hhdGJvdC1ncmF5LTgwMDogIzM0M2E0MDsNCiAgICAtLWNoYXRib3QtZ3JheS05MDA6ICMyMTI1Mjk7DQoNCiAgICAvKiBCYWNrZ3JvdW5kcyAqLw0KICAgIC0tY2hhdGJvdC1iZy1wcmltYXJ5OiAjZmZmZmZmOw0KICAgIC0tY2hhdGJvdC1iZy1zZWNvbmRhcnk6ICNmOGY5ZmE7DQogICAgLS1jaGF0Ym90LWJnLXRlcnRpYXJ5OiAjZTllY2VmOw0KDQogICAgLyogVGV4dCBjb2xvcnMgKi8NCiAgICAtLWNoYXRib3QtdGV4dC1wcmltYXJ5OiAjMjEyNTI5Ow0KICAgIC0tY2hhdGJvdC10ZXh0LXNlY29uZGFyeTogIzZjNzU3ZDsNCiAgICAtLWNoYXRib3QtdGV4dC1tdXRlZDogI2FkYjViZDsNCg0KICAgIC8qIEJvcmRlcnMgKi8NCiAgICAtLWNoYXRib3QtYm9yZGVyLWNvbG9yOiAjZGVlMmU2Ow0KICAgIC0tY2hhdGJvdC1ib3JkZXItcmFkaXVzOiA4cHg7DQogICAgLS1jaGF0Ym90LWJvcmRlci1yYWRpdXMtc206IDRweDsNCiAgICAtLWNoYXRib3QtYm9yZGVyLXJhZGl1cy1sZzogMTJweDsNCg0KICAgIC8qIFNoYWRvd3MgKi8NCiAgICAtLWNoYXRib3Qtc2hhZG93LXNtOiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA1KTsNCiAgICAtLWNoYXRib3Qtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjEpOw0KICAgIC0tY2hhdGJvdC1zaGFkb3ctbGc6IDAgOHB4IDI0cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsNCg0KICAgIC8qIFNwYWNpbmcgKi8NCiAgICAtLWNoYXRib3Qtc3BhY2luZy14czogNHB4Ow0KICAgIC0tY2hhdGJvdC1zcGFjaW5nLXNtOiA4cHg7DQogICAgLS1jaGF0Ym90LXNwYWNpbmctbWQ6IDE2cHg7DQogICAgLS1jaGF0Ym90LXNwYWNpbmctbGc6IDI0cHg7DQogICAgLS1jaGF0Ym90LXNwYWNpbmcteGw6IDMycHg7DQoNCiAgICAvKiBUeXBvZ3JhcGh5ICovDQogICAgLS1jaGF0Ym90LWZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIFJvYm90bywgIkhlbHZldGljYSBOZXVlIiwgQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgLS1jaGF0Ym90LWZvbnQtc2l6ZS14czogMTJweDsNCiAgICAtLWNoYXRib3QtZm9udC1zaXplLXNtOiAxNHB4Ow0KICAgIC0tY2hhdGJvdC1mb250LXNpemUtYmFzZTogMTZweDsNCiAgICAtLWNoYXRib3QtZm9udC1zaXplLWxnOiAxOHB4Ow0KICAgIC0tY2hhdGJvdC1mb250LXNpemUteGw6IDIwcHg7DQoNCiAgICAvKiBUcmFuc2l0aW9ucyAqLw0KICAgIC0tY2hhdGJvdC10cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KICAgIC0tY2hhdGJvdC10cmFuc2l0aW9uLWZhc3Q6IGFsbCAwLjE1cyBlYXNlOw0KDQogICAgLyogWi1pbmRleCAqLw0KICAgIC0tY2hhdGJvdC16LWluZGV4LWRyb3Bkb3duOiAxMDAwOw0KICAgIC0tY2hhdGJvdC16LWluZGV4LW1vZGFsOiAxMDUwOw0KICAgIC0tY2hhdGJvdC16LWluZGV4LWZsb2F0aW5nOiA5OTk5Ow0KfQ0KDQovKiBEYXJrIG1vZGUgdmFyaWFibGVzICovDQpAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7DQogICAgOnJvb3Qgew0KICAgICAgICAtLWNoYXRib3QtYmctcHJpbWFyeTogIzFlMWUxZTsNCiAgICAgICAgLS1jaGF0Ym90LWJnLXNlY29uZGFyeTogIzJkMmQyZDsNCiAgICAgICAgLS1jaGF0Ym90LWJnLXRlcnRpYXJ5OiAjM2EzYTNhOw0KDQogICAgICAgIC0tY2hhdGJvdC10ZXh0LXByaW1hcnk6ICNmZmZmZmY7DQogICAgICAgIC0tY2hhdGJvdC10ZXh0LXNlY29uZGFyeTogI2IwYjBiMDsNCiAgICAgICAgLS1jaGF0Ym90LXRleHQtbXV0ZWQ6ICM4MDgwODA7DQoNCiAgICAgICAgLS1jaGF0Ym90LWJvcmRlci1jb2xvcjogIzQwNDA0MDsNCg0KICAgICAgICAtLWNoYXRib3Qtc2hhZG93LXNtOiAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjMpOw0KICAgICAgICAtLWNoYXRib3Qtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjQpOw0KICAgICAgICAtLWNoYXRib3Qtc2hhZG93LWxnOiAwIDhweCAyNHB4IHJnYmEoMCwgMCwgMCwgMC41KTsNCiAgICB9DQp9DQoNCi8qIEZvcmNlIGRhcmsgbW9kZSAqLw0KLmNoYXRib3QtLWRhcmssDQouYWR2LWNoYXQtLWRhcmssDQouYWRtaW4tcGFuZWwtLWRhcmsgew0KICAgIC0tY2hhdGJvdC1iZy1wcmltYXJ5OiAjMWUxZTFlOw0KICAgIC0tY2hhdGJvdC1iZy1zZWNvbmRhcnk6ICMyZDJkMmQ7DQogICAgLS1jaGF0Ym90LWJnLXRlcnRpYXJ5OiAjM2EzYTNhOw0KDQogICAgLS1jaGF0Ym90LXRleHQtcHJpbWFyeTogI2ZmZmZmZjsNCiAgICAtLWNoYXRib3QtdGV4dC1zZWNvbmRhcnk6ICNiMGIwYjA7DQogICAgLS1jaGF0Ym90LXRleHQtbXV0ZWQ6ICM4MDgwODA7DQoNCiAgICAtLWNoYXRib3QtYm9yZGVyLWNvbG9yOiAjNDA0MDQwOw0KfQ0KDQovKiA9PT09PSBSRVNFVCAmIEJBU0UgPT09PT0gKi8NCg0KLmNoYXRib3Qtd2lkZ2V0ICosDQouYWR2LWNoYXQgKiwNCi5hZG1pbi13aWRnZXQgKiB7DQogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsNCiAgICBtYXJnaW46IDA7DQogICAgcGFkZGluZzogMDsNCn0NCg0KLyogPT09PT0gVklTSVRPUiBXSURHRVQgKGNoYXRib3Qtd2lkZ2V0LmpzKSA9PT09PSAqLw0KDQovKiBGbG9hdGluZyBidXR0b24gKi8NCi5jaGF0Ym90LXdpZGdldF9fYnV0dG9uIHsNCiAgICBwb3NpdGlvbjogZml4ZWQ7DQogICAgYm90dG9tOiAyNHB4Ow0KICAgIHJpZ2h0OiAyNHB4Ow0KICAgIHdpZHRoOiA2MHB4Ow0KICAgIGhlaWdodDogNjBweDsNCiAgICBib3JkZXItcmFkaXVzOiA1MCU7DQogICAgYmFja2dyb3VuZDogdmFyKC0tY2hhdGJvdC1wcmltYXJ5KTsNCiAgICBjb2xvcjogI2ZmZmZmZjsNCiAgICBib3JkZXI6IG5vbmU7DQogICAgYm94LXNoYWRvdzogdmFyKC0tY2hhdGJvdC1zaGFkb3ctbGcpOw0KICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgdHJhbnNpdGlvbjogdmFyKC0tY2hhdGJvdC10cmFuc2l0aW9uKTsNCiAgICB6LWluZGV4OiB2YXIoLS1jaGF0Ym90LXotaW5kZXgtZmxvYXRpbmcpOw0KfQ0KDQouY2hhdGJvdC13aWRnZXRfX2J1dHRvbjpob3ZlciB7DQogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpOw0KICAgIGJveC1zaGFkb3c6IDAgMTJweCAzMnB4IHJnYmEoMCwgMTIzLCAyNTUsIDAuMyk7DQp9DQoNCi5jaGF0Ym90LXdpZGdldF9fYnV0dG9uIHN2ZyB7DQogICAgd2lkdGg6IDI4cHg7DQogICAgaGVpZ2h0OiAyOHB4Ow0KfQ0KDQouY2hhdGJvdC13aWRnZXRfX2JhZGdlIHsNCiAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgdG9wOiAtNHB4Ow0KICAgIHJpZ2h0OiAtNHB4Ow0KICAgIG1pbi13aWR0aDogMjBweDsNCiAgICBoZWlnaHQ6IDIwcHg7DQogICAgYm9yZGVyLXJhZGl1czogMTBweDsNCiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaGF0Ym90LWRhbmdlcik7DQogICAgY29sb3I6ICNmZmZmZmY7DQogICAgZm9udC1zaXplOiB2YXIoLS1jaGF0Ym90LWZvbnQtc2l6ZS14cyk7DQogICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAgIHBhZGRpbmc6IDAgNnB4Ow0KfQ0KDQovKiBNb2RhbCAqLw0KLmNoYXRib3Qtd2lkZ2V0X19tb2RhbCB7DQogICAgcG9zaXRpb246IGZpeGVkOw0KICAgIGJvdHRvbTogOTZweDsNCiAgICByaWdodDogMjRweDsNCiAgICB3aWR0aDogNDAwcHg7DQogICAgbWF4LXdpZHRoOiBjYWxjKDEwMHZ3IC0gNDhweCk7DQogICAgaGVpZ2h0OiA2MDBweDsNCiAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMTIwcHgpOw0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctcHJpbWFyeSk7DQogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2hhdGJvdC1ib3JkZXItcmFkaXVzLWxnKTsNCiAgICBib3gtc2hhZG93OiB2YXIoLS1jaGF0Ym90LXNoYWRvdy1sZyk7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgei1pbmRleDogdmFyKC0tY2hhdGJvdC16LWluZGV4LW1vZGFsKTsNCiAgICBhbmltYXRpb246IGNoYXRib3RTbGlkZUluIDAuM3MgZWFzZTsNCn0NCg0KQGtleWZyYW1lcyBjaGF0Ym90U2xpZGVJbiB7DQogICAgZnJvbSB7DQogICAgICAgIG9wYWNpdHk6IDA7DQogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KSBzY2FsZSgwLjk1KTsNCiAgICB9DQogICAgdG8gew0KICAgICAgICBvcGFjaXR5OiAxOw0KICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMSk7DQogICAgfQ0KfQ0KDQouY2hhdGJvdC13aWRnZXRfX2hlYWRlciB7DQogICAgcGFkZGluZzogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLW1kKTsNCiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaGF0Ym90LXByaW1hcnkpOw0KICAgIGNvbG9yOiAjZmZmZmZmOw0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQp9DQoNCi5jaGF0Ym90LXdpZGdldF9fdGl0bGUgew0KICAgIGZvbnQtc2l6ZTogdmFyKC0tY2hhdGJvdC1mb250LXNpemUtbGcpOw0KICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgIGdhcDogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLXNtKTsNCn0NCg0KLmNoYXRib3Qtd2lkZ2V0X190aXRsZSBzdmcgew0KICAgIHdpZHRoOiAyNHB4Ow0KICAgIGhlaWdodDogMjRweDsNCn0NCg0KLmNoYXRib3Qtd2lkZ2V0X19hY3Rpb25zIHsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGdhcDogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLXhzKTsNCn0NCg0KLmNoYXRib3Qtd2lkZ2V0X19hY3Rpb24tYnRuIHsNCiAgICBiYWNrZ3JvdW5kOiBub25lOw0KICAgIGJvcmRlcjogbm9uZTsNCiAgICBjb2xvcjogI2ZmZmZmZjsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgcGFkZGluZzogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLXhzKTsNCiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1jaGF0Ym90LWJvcmRlci1yYWRpdXMtc20pOw0KICAgIHRyYW5zaXRpb246IHZhcigtLWNoYXRib3QtdHJhbnNpdGlvbi1mYXN0KTsNCn0NCg0KLmNoYXRib3Qtd2lkZ2V0X19hY3Rpb24tYnRuOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7DQp9DQoNCi5jaGF0Ym90LXdpZGdldF9fYWN0aW9uLWJ0biBzdmcgew0KICAgIHdpZHRoOiAyMHB4Ow0KICAgIGhlaWdodDogMjBweDsNCn0NCg0KLyogTWVzc2FnZXMgKi8NCi5jaGF0Ym90LXdpZGdldF9fbWVzc2FnZXMgew0KICAgIGZsZXg6IDE7DQogICAgb3ZlcmZsb3cteTogYXV0bzsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctbWQpOw0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctc2Vjb25kYXJ5KTsNCn0NCg0KLmNoYXRib3Qtd2lkZ2V0X19tZXNzYWdlIHsNCiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctbWQpOw0KICAgIGRpc3BsYXk6IGZsZXg7DQp9DQoNCi5jaGF0Ym90LXdpZGdldF9fbWVzc2FnZS0tb3duIHsNCiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOw0KfQ0KDQouY2hhdGJvdC13aWRnZXRfX21lc3NhZ2UtYnViYmxlIHsNCiAgICBtYXgtd2lkdGg6IDcwJTsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctc20pIHZhcigtLWNoYXRib3Qtc3BhY2luZy1tZCk7DQogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2hhdGJvdC1ib3JkZXItcmFkaXVzKTsNCiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaGF0Ym90LWJnLXByaW1hcnkpOw0KICAgIGJveC1zaGFkb3c6IHZhcigtLWNoYXRib3Qtc2hhZG93LXNtKTsNCn0NCg0KLmNoYXRib3Qtd2lkZ2V0X19tZXNzYWdlLS1vd24gLmNoYXRib3Qtd2lkZ2V0X19tZXNzYWdlLWJ1YmJsZSB7DQogICAgYmFja2dyb3VuZDogdmFyKC0tY2hhdGJvdC1wcmltYXJ5KTsNCiAgICBjb2xvcjogI2ZmZmZmZjsNCn0NCg0KLmNoYXRib3Qtd2lkZ2V0X19tZXNzYWdlLXRleHQgew0KICAgIGZvbnQtc2l6ZTogdmFyKC0tY2hhdGJvdC1mb250LXNpemUtc20pOw0KICAgIGxpbmUtaGVpZ2h0OiAxLjU7DQogICAgd29yZC13cmFwOiBicmVhay13b3JkOw0KfQ0KDQouY2hhdGJvdC13aWRnZXRfX21lc3NhZ2UtbWV0YSB7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7DQogICAgZ2FwOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmcteHMpOw0KICAgIG1hcmdpbi10b3A6IHZhcigtLWNoYXRib3Qtc3BhY2luZy14cyk7DQogICAgZm9udC1zaXplOiB2YXIoLS1jaGF0Ym90LWZvbnQtc2l6ZS14cyk7DQogICAgb3BhY2l0eTogMC43Ow0KfQ0KDQouY2hhdGJvdC13aWRnZXRfX21lc3NhZ2Utc3RhdHVzIHN2ZyB7DQogICAgd2lkdGg6IDE2cHg7DQogICAgaGVpZ2h0OiAxNnB4Ow0KfQ0KDQovKiBUeXBpbmcgaW5kaWNhdG9yICovDQouY2hhdGJvdC13aWRnZXRfX3R5cGluZyB7DQogICAgcGFkZGluZzogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLXNtKSB2YXIoLS1jaGF0Ym90LXNwYWNpbmctbWQpOw0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBnYXA6IHZhcigtLWNoYXRib3Qtc3BhY2luZy1zbSk7DQp9DQoNCi5jaGF0Ym90LXdpZGdldF9fdHlwaW5nLWRvdHMgew0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgZ2FwOiA0cHg7DQp9DQoNCi5jaGF0Ym90LXdpZGdldF9fdHlwaW5nLWRvdHMgc3BhbiB7DQogICAgd2lkdGg6IDhweDsNCiAgICBoZWlnaHQ6IDhweDsNCiAgICBib3JkZXItcmFkaXVzOiA1MCU7DQogICAgYmFja2dyb3VuZDogdmFyKC0tY2hhdGJvdC1ncmF5LTUwMCk7DQogICAgYW5pbWF0aW9uOiBjaGF0Ym90VHlwaW5nIDEuNHMgaW5maW5pdGU7DQp9DQoNCi5jaGF0Ym90LXdpZGdldF9fdHlwaW5nLWRvdHMgc3BhbjpudGgtY2hpbGQoMikgew0KICAgIGFuaW1hdGlvbi1kZWxheTogMC4yczsNCn0NCg0KLmNoYXRib3Qtd2lkZ2V0X190eXBpbmctZG90cyBzcGFuOm50aC1jaGlsZCgzKSB7DQogICAgYW5pbWF0aW9uLWRlbGF5OiAwLjRzOw0KfQ0KDQpAa2V5ZnJhbWVzIGNoYXRib3RUeXBpbmcgew0KICAgIDAlLCA2MCUsIDEwMCUgew0KICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7DQogICAgfQ0KICAgIDMwJSB7DQogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtOHB4KTsNCiAgICB9DQp9DQoNCi8qIElucHV0ICovDQouY2hhdGJvdC13aWRnZXRfX2lucHV0LWFyZWEgew0KICAgIHBhZGRpbmc6IHZhcigtLWNoYXRib3Qtc3BhY2luZy1tZCk7DQogICAgYmFja2dyb3VuZDogdmFyKC0tY2hhdGJvdC1iZy1wcmltYXJ5KTsNCiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY2hhdGJvdC1ib3JkZXItY29sb3IpOw0KfQ0KDQouY2hhdGJvdC13aWRnZXRfX2lucHV0LWJhciB7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7DQogICAgZ2FwOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctc20pOw0KfQ0KDQouY2hhdGJvdC13aWRnZXRfX2lucHV0IHsNCiAgICBmbGV4OiAxOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNoYXRib3QtYm9yZGVyLWNvbG9yKTsNCiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1jaGF0Ym90LWJvcmRlci1yYWRpdXMpOw0KICAgIHBhZGRpbmc6IHZhcigtLWNoYXRib3Qtc3BhY2luZy1zbSkgdmFyKC0tY2hhdGJvdC1zcGFjaW5nLW1kKTsNCiAgICBmb250LWZhbWlseTogdmFyKC0tY2hhdGJvdC1mb250LWZhbWlseSk7DQogICAgZm9udC1zaXplOiB2YXIoLS1jaGF0Ym90LWZvbnQtc2l6ZS1zbSk7DQogICAgcmVzaXplOiBub25lOw0KICAgIG1heC1oZWlnaHQ6IDEyMHB4Ow0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctc2Vjb25kYXJ5KTsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC10ZXh0LXByaW1hcnkpOw0KfQ0KDQouY2hhdGJvdC13aWRnZXRfX2lucHV0OmZvY3VzIHsNCiAgICBvdXRsaW5lOiBub25lOw0KICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY2hhdGJvdC1wcmltYXJ5KTsNCn0NCg0KLmNoYXRib3Qtd2lkZ2V0X19pbnB1dC1idG4gew0KICAgIGJhY2tncm91bmQ6IG5vbmU7DQogICAgYm9yZGVyOiBub25lOw0KICAgIGNvbG9yOiB2YXIoLS1jaGF0Ym90LXRleHQtc2Vjb25kYXJ5KTsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgcGFkZGluZzogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLXNtKTsNCiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1jaGF0Ym90LWJvcmRlci1yYWRpdXMpOw0KICAgIHRyYW5zaXRpb246IHZhcigtLWNoYXRib3QtdHJhbnNpdGlvbi1mYXN0KTsNCn0NCg0KLmNoYXRib3Qtd2lkZ2V0X19pbnB1dC1idG46aG92ZXIgew0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctdGVydGlhcnkpOw0KICAgIGNvbG9yOiB2YXIoLS1jaGF0Ym90LXByaW1hcnkpOw0KfQ0KDQouY2hhdGJvdC13aWRnZXRfX2lucHV0LWJ0biBzdmcgew0KICAgIHdpZHRoOiAyMHB4Ow0KICAgIGhlaWdodDogMjBweDsNCn0NCg0KLmNoYXRib3Qtd2lkZ2V0X19pbnB1dC1idG4tLXNlbmQgew0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtcHJpbWFyeSk7DQogICAgY29sb3I6ICNmZmZmZmY7DQp9DQoNCi5jaGF0Ym90LXdpZGdldF9faW5wdXQtYnRuLS1zZW5kOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kOiAjMDA1NmIzOw0KfQ0KDQovKiA9PT09PSBBRFZFUlRJU0VSIFdJREdFVCAoYWR2ZXJ0aXNlci1jaGF0LXdpZGdldC5qcykgPT09PT0gKi8NCg0KLmFkdi1jaGF0IHsNCiAgICBmb250LWZhbWlseTogdmFyKC0tY2hhdGJvdC1mb250LWZhbWlseSk7DQogICAgY29sb3I6IHZhcigtLWNoYXRib3QtdGV4dC1wcmltYXJ5KTsNCn0NCg0KLmFkdi1jaGF0X19wYW5lbCB7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICAgIGhlaWdodDogMTAwdmg7DQogICAgYmFja2dyb3VuZDogdmFyKC0tY2hhdGJvdC1iZy1zZWNvbmRhcnkpOw0KfQ0KDQouYWR2LWNoYXRfX2hlYWRlciB7DQogICAgcGFkZGluZzogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLW1kKSB2YXIoLS1jaGF0Ym90LXNwYWNpbmctbGcpOw0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctcHJpbWFyeSk7DQogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNoYXRib3QtYm9yZGVyLWNvbG9yKTsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KfQ0KDQouYWR2LWNoYXRfX2hlYWRlci1sZWZ0IHsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgZ2FwOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctbWQpOw0KfQ0KDQouYWR2LWNoYXRfX3RpdGxlIHsNCiAgICBmb250LXNpemU6IHZhcigtLWNoYXRib3QtZm9udC1zaXplLXhsKTsNCiAgICBmb250LXdlaWdodDogNjAwOw0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBnYXA6IHZhcigtLWNoYXRib3Qtc3BhY2luZy1zbSk7DQp9DQoNCi5hZHYtY2hhdF9fdGl0bGUgc3ZnIHsNCiAgICB3aWR0aDogMjhweDsNCiAgICBoZWlnaHQ6IDI4cHg7DQp9DQoNCi5hZHYtY2hhdF9fY29ubmVjdGlvbi1zdGF0dXMgew0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBnYXA6IHZhcigtLWNoYXRib3Qtc3BhY2luZy14cyk7DQogICAgZm9udC1zaXplOiB2YXIoLS1jaGF0Ym90LWZvbnQtc2l6ZS1zbSk7DQogICAgY29sb3I6IHZhcigtLWNoYXRib3QtdGV4dC1zZWNvbmRhcnkpOw0KfQ0KDQouYWR2LWNoYXRfX3ByZXNlbmNlLWRvdCB7DQogICAgd2lkdGg6IDhweDsNCiAgICBoZWlnaHQ6IDhweDsNCiAgICBib3JkZXItcmFkaXVzOiA1MCU7DQogICAgYmFja2dyb3VuZDogdmFyKC0tY2hhdGJvdC1ncmF5LTUwMCk7DQp9DQoNCi5hZHYtY2hhdF9fcHJlc2VuY2UtZG90LS1vbmxpbmUgew0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3Qtc3VjY2Vzcyk7DQogICAgYm94LXNoYWRvdzogMCAwIDhweCB2YXIoLS1jaGF0Ym90LXN1Y2Nlc3MpOw0KfQ0KDQouYWR2LWNoYXRfX3ByZXNlbmNlLWRvdC0tb2ZmbGluZSB7DQogICAgYmFja2dyb3VuZDogdmFyKC0tY2hhdGJvdC1ncmF5LTUwMCk7DQp9DQoNCi5hZHYtY2hhdF9faGVhZGVyLXJpZ2h0IHsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgZ2FwOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctbWQpOw0KfQ0KDQouYWR2LWNoYXRfX2NyZWRpdHMgew0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBnYXA6IHZhcigtLWNoYXRib3Qtc3BhY2luZy14cyk7DQogICAgcGFkZGluZzogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLXhzKSB2YXIoLS1jaGF0Ym90LXNwYWNpbmctbWQpOw0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctc2Vjb25kYXJ5KTsNCiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1jaGF0Ym90LWJvcmRlci1yYWRpdXMpOw0KICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQp9DQoNCi5hZHYtY2hhdF9fY3JlZGl0cyBzdmcgew0KICAgIHdpZHRoOiAyMHB4Ow0KICAgIGhlaWdodDogMjBweDsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC13YXJuaW5nKTsNCn0NCg0KLmFkdi1jaGF0X19jcmVkaXRzLWJhbGFuY2UtLWxvdyB7DQogICAgY29sb3I6IHZhcigtLWNoYXRib3QtZGFuZ2VyKTsNCn0NCg0KLmFkdi1jaGF0X19oZWFkZXItYnRuIHsNCiAgICBiYWNrZ3JvdW5kOiBub25lOw0KICAgIGJvcmRlcjogbm9uZTsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC10ZXh0LXNlY29uZGFyeSk7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KICAgIHBhZGRpbmc6IHZhcigtLWNoYXRib3Qtc3BhY2luZy1zbSk7DQogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2hhdGJvdC1ib3JkZXItcmFkaXVzKTsNCiAgICB0cmFuc2l0aW9uOiB2YXIoLS1jaGF0Ym90LXRyYW5zaXRpb24tZmFzdCk7DQp9DQoNCi5hZHYtY2hhdF9faGVhZGVyLWJ0bjpob3ZlciB7DQogICAgYmFja2dyb3VuZDogdmFyKC0tY2hhdGJvdC1iZy1zZWNvbmRhcnkpOw0KfQ0KDQouYWR2LWNoYXRfX2hlYWRlci1idG4gc3ZnIHsNCiAgICB3aWR0aDogMjBweDsNCiAgICBoZWlnaHQ6IDIwcHg7DQp9DQoNCi8qIENvbnRlbnQgKi8NCi5hZHYtY2hhdF9fY29udGVudCB7DQogICAgZmxleDogMTsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIG92ZXJmbG93OiBoaWRkZW47DQp9DQoNCi8qIFNpZGViYXIgKi8NCi5hZHYtY2hhdF9fc2lkZWJhciB7DQogICAgd2lkdGg6IDMyMHB4Ow0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctcHJpbWFyeSk7DQogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgdmFyKC0tY2hhdGJvdC1ib3JkZXItY29sb3IpOw0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCn0NCg0KLmFkdi1jaGF0X19zZWFyY2ggew0KICAgIHBhZGRpbmc6IHZhcigtLWNoYXRib3Qtc3BhY2luZy1tZCk7DQogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNoYXRib3QtYm9yZGVyLWNvbG9yKTsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgZ2FwOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctc20pOw0KfQ0KDQouYWR2LWNoYXRfX3NlYXJjaCBzdmcgew0KICAgIHdpZHRoOiAyMHB4Ow0KICAgIGhlaWdodDogMjBweDsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC10ZXh0LXNlY29uZGFyeSk7DQp9DQoNCi5hZHYtY2hhdF9fc2VhcmNoLWlucHV0IHsNCiAgICBmbGV4OiAxOw0KICAgIGJvcmRlcjogbm9uZTsNCiAgICBiYWNrZ3JvdW5kOiBub25lOw0KICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1jaGF0Ym90LWZvbnQtZmFtaWx5KTsNCiAgICBmb250LXNpemU6IHZhcigtLWNoYXRib3QtZm9udC1zaXplLXNtKTsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC10ZXh0LXByaW1hcnkpOw0KfQ0KDQouYWR2LWNoYXRfX3NlYXJjaC1pbnB1dDpmb2N1cyB7DQogICAgb3V0bGluZTogbm9uZTsNCn0NCg0KLmFkdi1jaGF0X19jb252ZXJzYXRpb25zIHsNCiAgICBmbGV4OiAxOw0KICAgIG92ZXJmbG93LXk6IGF1dG87DQp9DQoNCi5hZHYtY2hhdF9fY29udmVyc2F0aW9uIHsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctbWQpOw0KICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jaGF0Ym90LWJvcmRlci1jb2xvcik7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBnYXA6IHZhcigtLWNoYXRib3Qtc3BhY2luZy1tZCk7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KICAgIHRyYW5zaXRpb246IHZhcigtLWNoYXRib3QtdHJhbnNpdGlvbi1mYXN0KTsNCn0NCg0KLmFkdi1jaGF0X19jb252ZXJzYXRpb246aG92ZXIgew0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctc2Vjb25kYXJ5KTsNCn0NCg0KLmFkdi1jaGF0X19jb252ZXJzYXRpb24tLWFjdGl2ZSB7DQogICAgYmFja2dyb3VuZDogdmFyKC0tY2hhdGJvdC1wcmltYXJ5KTsNCiAgICBjb2xvcjogI2ZmZmZmZjsNCn0NCg0KLmFkdi1jaGF0X19jb252LWF2YXRhciB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHdpZHRoOiA0OHB4Ow0KICAgIGhlaWdodDogNDhweDsNCiAgICBib3JkZXItcmFkaXVzOiA1MCU7DQogICAgYmFja2dyb3VuZDogdmFyKC0tY2hhdGJvdC1wcmltYXJ5KTsNCiAgICBjb2xvcjogI2ZmZmZmZjsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgICBmbGV4LXNocmluazogMDsNCn0NCg0KLmFkdi1jaGF0X19jb252LWF2YXRhciAuYWR2LWNoYXRfX3ByZXNlbmNlLWRvdCB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIGJvdHRvbTogMnB4Ow0KICAgIHJpZ2h0OiAycHg7DQp9DQoNCi5hZHYtY2hhdF9fY29udi1jb250ZW50IHsNCiAgICBmbGV4OiAxOw0KICAgIG1pbi13aWR0aDogMDsNCn0NCg0KLmFkdi1jaGF0X19jb252LWhlYWRlciB7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmcteHMpOw0KfQ0KDQouYWR2LWNoYXRfX2NvbnYtbmFtZSB7DQogICAgZm9udC1zaXplOiB2YXIoLS1jaGF0Ym90LWZvbnQtc2l6ZS1iYXNlKTsNCiAgICBmb250LXdlaWdodDogNjAwOw0KICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7DQogICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsNCn0NCg0KLmFkdi1jaGF0X19jb252LXRpbWUgew0KICAgIGZvbnQtc2l6ZTogdmFyKC0tY2hhdGJvdC1mb250LXNpemUteHMpOw0KICAgIGNvbG9yOiB2YXIoLS1jaGF0Ym90LXRleHQtc2Vjb25kYXJ5KTsNCn0NCg0KLmFkdi1jaGF0X19jb252LWZvb3RlciB7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCn0NCg0KLmFkdi1jaGF0X19jb252LXByZXZpZXcgew0KICAgIGZvbnQtc2l6ZTogdmFyKC0tY2hhdGJvdC1mb250LXNpemUtc20pOw0KICAgIGNvbG9yOiB2YXIoLS1jaGF0Ym90LXRleHQtc2Vjb25kYXJ5KTsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7DQp9DQoNCi5hZHYtY2hhdF9fY29udi1iYWRnZSB7DQogICAgbWluLXdpZHRoOiAyMHB4Ow0KICAgIGhlaWdodDogMjBweDsNCiAgICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtZGFuZ2VyKTsNCiAgICBjb2xvcjogI2ZmZmZmZjsNCiAgICBmb250LXNpemU6IHZhcigtLWNoYXRib3QtZm9udC1zaXplLXhzKTsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgcGFkZGluZzogMCA2cHg7DQp9DQoNCi8qIE1haW4gY2hhdCBhcmVhICovDQouYWR2LWNoYXRfX21haW4gew0KICAgIGZsZXg6IDE7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctc2Vjb25kYXJ5KTsNCn0NCg0KLmFkdi1jaGF0X19tYWluLWVtcHR5IHsNCiAgICBmbGV4OiAxOw0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAgIGNvbG9yOiB2YXIoLS1jaGF0Ym90LXRleHQtbXV0ZWQpOw0KfQ0KDQouYWR2LWNoYXRfX21haW4tZW1wdHkgc3ZnIHsNCiAgICB3aWR0aDogNjRweDsNCiAgICBoZWlnaHQ6IDY0cHg7DQogICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLW1kKTsNCn0NCg0KLmFkdi1jaGF0X19tYWluLWFjdGl2ZSB7DQogICAgZGlzcGxheTogbm9uZTsNCiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICAgIGhlaWdodDogMTAwJTsNCn0NCg0KLmFkdi1jaGF0X19jaGF0LWhlYWRlciB7DQogICAgcGFkZGluZzogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLW1kKSB2YXIoLS1jaGF0Ym90LXNwYWNpbmctbGcpOw0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctcHJpbWFyeSk7DQogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNoYXRib3QtYm9yZGVyLWNvbG9yKTsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KfQ0KDQouYWR2LWNoYXRfX2NoYXQtdXNlciB7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgIGdhcDogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLW1kKTsNCn0NCg0KLmFkdi1jaGF0X19jaGF0LWF2YXRhciB7DQogICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgIHdpZHRoOiA0MHB4Ow0KICAgIGhlaWdodDogNDBweDsNCiAgICBib3JkZXItcmFkaXVzOiA1MCU7DQogICAgYmFja2dyb3VuZDogdmFyKC0tY2hhdGJvdC1pbmZvKTsNCiAgICBjb2xvcjogI2ZmZmZmZjsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgZm9udC13ZWlnaHQ6IDYwMDsNCn0NCg0KLmFkdi1jaGF0X19jaGF0LWF2YXRhciAuYWR2LWNoYXRfX3ByZXNlbmNlLWRvdCB7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIGJvdHRvbTogMDsNCiAgICByaWdodDogMDsNCn0NCg0KLmFkdi1jaGF0X19jaGF0LW5hbWUgew0KICAgIGZvbnQtc2l6ZTogdmFyKC0tY2hhdGJvdC1mb250LXNpemUtbGcpOw0KICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQp9DQoNCi5hZHYtY2hhdF9fY2hhdC1tZXRhIHsNCiAgICBmb250LXNpemU6IHZhcigtLWNoYXRib3QtZm9udC1zaXplLXNtKTsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC10ZXh0LXNlY29uZGFyeSk7DQp9DQoNCi5hZHYtY2hhdF9fYWN0aW9uLWJ0biB7DQogICAgYmFja2dyb3VuZDogbm9uZTsNCiAgICBib3JkZXI6IG5vbmU7DQogICAgY29sb3I6IHZhcigtLWNoYXRib3QtdGV4dC1zZWNvbmRhcnkpOw0KICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctc20pOw0KICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWNoYXRib3QtYm9yZGVyLXJhZGl1cyk7DQogICAgdHJhbnNpdGlvbjogdmFyKC0tY2hhdGJvdC10cmFuc2l0aW9uLWZhc3QpOw0KfQ0KDQouYWR2LWNoYXRfX2FjdGlvbi1idG46aG92ZXIgew0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctc2Vjb25kYXJ5KTsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC1kYW5nZXIpOw0KfQ0KDQouYWR2LWNoYXRfX2FjdGlvbi1idG4gc3ZnIHsNCiAgICB3aWR0aDogMjBweDsNCiAgICBoZWlnaHQ6IDIwcHg7DQp9DQoNCi5hZHYtY2hhdF9fbWVzc2FnZXMgew0KICAgIGZsZXg6IDE7DQogICAgb3ZlcmZsb3cteTogYXV0bzsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctbGcpOw0KfQ0KDQouYWR2LWNoYXRfX21lc3NhZ2Ugew0KICAgIG1hcmdpbi1ib3R0b206IHZhcigtLWNoYXRib3Qtc3BhY2luZy1tZCk7DQogICAgZGlzcGxheTogZmxleDsNCn0NCg0KLmFkdi1jaGF0X19tZXNzYWdlLS1vd24gew0KICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7DQp9DQoNCi5hZHYtY2hhdF9fbWVzc2FnZS1jb250ZW50IHsNCiAgICBtYXgtd2lkdGg6IDcwJTsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctc20pIHZhcigtLWNoYXRib3Qtc3BhY2luZy1tZCk7DQogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2hhdGJvdC1ib3JkZXItcmFkaXVzKTsNCiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaGF0Ym90LWJnLXByaW1hcnkpOw0KICAgIGJveC1zaGFkb3c6IHZhcigtLWNoYXRib3Qtc2hhZG93LXNtKTsNCn0NCg0KLmFkdi1jaGF0X19tZXNzYWdlLS1vd24gLmFkdi1jaGF0X19tZXNzYWdlLWNvbnRlbnQgew0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtcHJpbWFyeSk7DQogICAgY29sb3I6ICNmZmZmZmY7DQp9DQoNCi5hZHYtY2hhdF9fbWVzc2FnZS10ZXh0IHsNCiAgICBmb250LXNpemU6IHZhcigtLWNoYXRib3QtZm9udC1zaXplLXNtKTsNCiAgICBsaW5lLWhlaWdodDogMS41Ow0KfQ0KDQouYWR2LWNoYXRfX21lc3NhZ2UtbWV0YSB7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7DQogICAgZ2FwOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmcteHMpOw0KICAgIG1hcmdpbi10b3A6IHZhcigtLWNoYXRib3Qtc3BhY2luZy14cyk7DQogICAgZm9udC1zaXplOiB2YXIoLS1jaGF0Ym90LWZvbnQtc2l6ZS14cyk7DQogICAgb3BhY2l0eTogMC43Ow0KfQ0KDQovKiBRdWljayByZXBsaWVzICovDQouYWR2LWNoYXRfX3F1aWNrLXJlcGxpZXMgew0KICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctc20pIHZhcigtLWNoYXRib3Qtc3BhY2luZy1sZyk7DQp9DQoNCi5hZHYtY2hhdF9fcXVpY2stcmVwbHktdG9nZ2xlIHsNCiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaGF0Ym90LWJnLXByaW1hcnkpOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNoYXRib3QtYm9yZGVyLWNvbG9yKTsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC10ZXh0LXByaW1hcnkpOw0KICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctc20pOw0KICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWNoYXRib3QtYm9yZGVyLXJhZGl1cyk7DQogICAgdHJhbnNpdGlvbjogdmFyKC0tY2hhdGJvdC10cmFuc2l0aW9uLWZhc3QpOw0KfQ0KDQouYWR2LWNoYXRfX3F1aWNrLXJlcGx5LXRvZ2dsZTpob3ZlciB7DQogICAgYmFja2dyb3VuZDogdmFyKC0tY2hhdGJvdC1iZy1zZWNvbmRhcnkpOw0KfQ0KDQouYWR2LWNoYXRfX3F1aWNrLXJlcGx5LXRvZ2dsZSBzdmcgew0KICAgIHdpZHRoOiAyMHB4Ow0KICAgIGhlaWdodDogMjBweDsNCn0NCg0KLmFkdi1jaGF0X19xdWljay1yZXBsaWVzLWxpc3Qgew0KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICBib3R0b206IDEwMCU7DQogICAgbGVmdDogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLWxnKTsNCiAgICByaWdodDogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLWxnKTsNCiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaGF0Ym90LWJnLXByaW1hcnkpOw0KICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNoYXRib3QtYm9yZGVyLWNvbG9yKTsNCiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1jaGF0Ym90LWJvcmRlci1yYWRpdXMpOw0KICAgIGJveC1zaGFkb3c6IHZhcigtLWNoYXRib3Qtc2hhZG93KTsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctc20pOw0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICBnYXA6IHZhcigtLWNoYXRib3Qtc3BhY2luZy14cyk7DQogICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLXNtKTsNCn0NCg0KLmFkdi1jaGF0X19xdWljay1yZXBseS1idG4gew0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctc2Vjb25kYXJ5KTsNCiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jaGF0Ym90LWJvcmRlci1jb2xvcik7DQogICAgY29sb3I6IHZhcigtLWNoYXRib3QtdGV4dC1wcmltYXJ5KTsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctc20pIHZhcigtLWNoYXRib3Qtc3BhY2luZy1tZCk7DQogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2hhdGJvdC1ib3JkZXItcmFkaXVzKTsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgdHJhbnNpdGlvbjogdmFyKC0tY2hhdGJvdC10cmFuc2l0aW9uLWZhc3QpOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQogICAgZm9udC1zaXplOiB2YXIoLS1jaGF0Ym90LWZvbnQtc2l6ZS1zbSk7DQp9DQoNCi5hZHYtY2hhdF9fcXVpY2stcmVwbHktYnRuOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaGF0Ym90LXByaW1hcnkpOw0KICAgIGNvbG9yOiAjZmZmZmZmOw0KICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY2hhdGJvdC1wcmltYXJ5KTsNCn0NCg0KLyogPT09PT0gQURNSU4gV0lER0VUUyAoYWRtaW4tcGFuZWwtd2lkZ2V0LmpzKSA9PT09PSAqLw0KDQouYWRtaW4td2lkZ2V0IHsNCiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaGF0Ym90LWJnLXByaW1hcnkpOw0KICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWNoYXRib3QtYm9yZGVyLXJhZGl1cyk7DQogICAgYm94LXNoYWRvdzogdmFyKC0tY2hhdGJvdC1zaGFkb3cpOw0KICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLWxnKTsNCn0NCg0KLmFkbWluLXdpZGdldF9faGVhZGVyIHsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctbWQpIHZhcigtLWNoYXRib3Qtc3BhY2luZy1sZyk7DQogICAgYmFja2dyb3VuZDogdmFyKC0tY2hhdGJvdC1iZy1zZWNvbmRhcnkpOw0KICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jaGF0Ym90LWJvcmRlci1jb2xvcik7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCn0NCg0KLmFkbWluLXdpZGdldF9fdGl0bGUgew0KICAgIGZvbnQtc2l6ZTogdmFyKC0tY2hhdGJvdC1mb250LXNpemUtbGcpOw0KICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgIGdhcDogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLXNtKTsNCn0NCg0KLmFkbWluLXdpZGdldF9fdGl0bGUgc3ZnIHsNCiAgICB3aWR0aDogMjRweDsNCiAgICBoZWlnaHQ6IDI0cHg7DQogICAgY29sb3I6IHZhcigtLWNoYXRib3QtcHJpbWFyeSk7DQp9DQoNCi5hZG1pbi13aWRnZXRfX2FjdGlvbiB7DQogICAgYmFja2dyb3VuZDogbm9uZTsNCiAgICBib3JkZXI6IG5vbmU7DQogICAgY29sb3I6IHZhcigtLWNoYXRib3QtdGV4dC1zZWNvbmRhcnkpOw0KICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmcteHMpOw0KICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWNoYXRib3QtYm9yZGVyLXJhZGl1cyk7DQogICAgdHJhbnNpdGlvbjogdmFyKC0tY2hhdGJvdC10cmFuc2l0aW9uLWZhc3QpOw0KfQ0KDQouYWRtaW4td2lkZ2V0X19hY3Rpb246aG92ZXIgew0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctdGVydGlhcnkpOw0KfQ0KDQouYWRtaW4td2lkZ2V0X19hY3Rpb24gc3ZnIHsNCiAgICB3aWR0aDogMjBweDsNCiAgICBoZWlnaHQ6IDIwcHg7DQp9DQoNCi5hZG1pbi13aWRnZXRfX2JvZHkgew0KICAgIHBhZGRpbmc6IHZhcigtLWNoYXRib3Qtc3BhY2luZy1sZyk7DQp9DQoNCi5hZG1pbi13aWRnZXRfX2VtcHR5LA0KLmFkbWluLXdpZGdldF9fbG9hZGluZyB7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgcGFkZGluZzogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLXhsKTsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC10ZXh0LW11dGVkKTsNCn0NCg0KLmFkbWluLXdpZGdldF9fZW1wdHkgc3ZnLA0KLmFkbWluLXdpZGdldF9fbG9hZGluZyBzdmcgew0KICAgIHdpZHRoOiA0OHB4Ow0KICAgIGhlaWdodDogNDhweDsNCiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctbWQpOw0KfQ0KDQovKiBTdGF0cyBjYXJkcyAqLw0KLmFkbWluLXdpZGdldC1zdGF0cyB7DQogICAgZGlzcGxheTogZ3JpZDsNCiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDI0MHB4LCAxZnIpKTsNCiAgICBnYXA6IHZhcigtLWNoYXRib3Qtc3BhY2luZy1sZyk7DQp9DQoNCi5hZG1pbi1zdGF0LWNhcmQgew0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctcHJpbWFyeSk7DQogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2hhdGJvdC1ib3JkZXItcmFkaXVzKTsNCiAgICBib3gtc2hhZG93OiB2YXIoLS1jaGF0Ym90LXNoYWRvdyk7DQogICAgcGFkZGluZzogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLWxnKTsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgZ2FwOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctbWQpOw0KICAgIHRyYW5zaXRpb246IHZhcigtLWNoYXRib3QtdHJhbnNpdGlvbik7DQp9DQoNCi5hZG1pbi1zdGF0LWNhcmQ6aG92ZXIgew0KICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KTsNCiAgICBib3gtc2hhZG93OiB2YXIoLS1jaGF0Ym90LXNoYWRvdy1sZyk7DQp9DQoNCi5hZG1pbi1zdGF0LWNhcmRfX2ljb24gew0KICAgIHdpZHRoOiA1NnB4Ow0KICAgIGhlaWdodDogNTZweDsNCiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1jaGF0Ym90LWJvcmRlci1yYWRpdXMpOw0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNCiAgICBmbGV4LXNocmluazogMDsNCn0NCg0KLmFkbWluLXN0YXQtY2FyZF9faWNvbi0tcHJpbWFyeSB7DQogICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMjMsIDI1NSwgMC4xKTsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC1wcmltYXJ5KTsNCn0NCg0KLmFkbWluLXN0YXQtY2FyZF9faWNvbi0tc3VjY2VzcyB7DQogICAgYmFja2dyb3VuZDogcmdiYSg0MCwgMTY3LCA2OSwgMC4xKTsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC1zdWNjZXNzKTsNCn0NCg0KLmFkbWluLXN0YXQtY2FyZF9faWNvbi0td2FybmluZyB7DQogICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDE5MywgNywgMC4xKTsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC13YXJuaW5nKTsNCn0NCg0KLmFkbWluLXN0YXQtY2FyZF9faWNvbi0taW5mbyB7DQogICAgYmFja2dyb3VuZDogcmdiYSgyMywgMTYyLCAxODQsIDAuMSk7DQogICAgY29sb3I6IHZhcigtLWNoYXRib3QtaW5mbyk7DQp9DQoNCi5hZG1pbi1zdGF0LWNhcmRfX2ljb24gc3ZnIHsNCiAgICB3aWR0aDogMjhweDsNCiAgICBoZWlnaHQ6IDI4cHg7DQp9DQoNCi5hZG1pbi1zdGF0LWNhcmRfX3ZhbHVlIHsNCiAgICBmb250LXNpemU6IHZhcigtLWNoYXRib3QtZm9udC1zaXplLXhsKTsNCiAgICBmb250LXdlaWdodDogNzAwOw0KICAgIGNvbG9yOiB2YXIoLS1jaGF0Ym90LXRleHQtcHJpbWFyeSk7DQogICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLXhzKTsNCn0NCg0KLmFkbWluLXN0YXQtY2FyZF9fbGFiZWwgew0KICAgIGZvbnQtc2l6ZTogdmFyKC0tY2hhdGJvdC1mb250LXNpemUtc20pOw0KICAgIGNvbG9yOiB2YXIoLS1jaGF0Ym90LXRleHQtc2Vjb25kYXJ5KTsNCn0NCg0KLyogQ29udmVyc2F0aW9ucyBsaXN0ICovDQouYWRtaW4tY29udmVyc2F0aW9uIHsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctbWQpOw0KICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jaGF0Ym90LWJvcmRlci1jb2xvcik7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBnYXA6IHZhcigtLWNoYXRib3Qtc3BhY2luZy1tZCk7DQogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgICB0cmFuc2l0aW9uOiB2YXIoLS1jaGF0Ym90LXRyYW5zaXRpb24tZmFzdCk7DQp9DQoNCi5hZG1pbi1jb252ZXJzYXRpb246aG92ZXIgew0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctc2Vjb25kYXJ5KTsNCn0NCg0KLmFkbWluLWNvbnZlcnNhdGlvbl9fYXZhdGFyIHsNCiAgICB3aWR0aDogNDBweDsNCiAgICBoZWlnaHQ6IDQwcHg7DQogICAgYm9yZGVyLXJhZGl1czogNTAlOw0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtcHJpbWFyeSk7DQogICAgY29sb3I6ICNmZmZmZmY7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQogICAgZmxleC1zaHJpbms6IDA7DQp9DQoNCi5hZG1pbi1jb252ZXJzYXRpb25fX2NvbnRlbnQgew0KICAgIGZsZXg6IDE7DQogICAgbWluLXdpZHRoOiAwOw0KfQ0KDQouYWRtaW4tY29udmVyc2F0aW9uX19oZWFkZXIgew0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KICAgIG1hcmdpbi1ib3R0b206IHZhcigtLWNoYXRib3Qtc3BhY2luZy14cyk7DQp9DQoNCi5hZG1pbi1jb252ZXJzYXRpb25fX3RpdGxlIHsNCiAgICBmb250LXNpemU6IHZhcigtLWNoYXRib3QtZm9udC1zaXplLWJhc2UpOw0KICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQp9DQoNCi5hZG1pbi1jb252ZXJzYXRpb25fX3RpbWUgew0KICAgIGZvbnQtc2l6ZTogdmFyKC0tY2hhdGJvdC1mb250LXNpemUteHMpOw0KICAgIGNvbG9yOiB2YXIoLS1jaGF0Ym90LXRleHQtc2Vjb25kYXJ5KTsNCn0NCg0KLmFkbWluLWNvbnZlcnNhdGlvbl9fbWV0YSB7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBnYXA6IHZhcigtLWNoYXRib3Qtc3BhY2luZy1zbSk7DQogICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLXhzKTsNCn0NCg0KLmFkbWluLWNvbnZlcnNhdGlvbl9fdXNlciB7DQogICAgZm9udC1zaXplOiB2YXIoLS1jaGF0Ym90LWZvbnQtc2l6ZS1zbSk7DQogICAgY29sb3I6IHZhcigtLWNoYXRib3QtdGV4dC1zZWNvbmRhcnkpOw0KfQ0KDQouYWRtaW4tY29udmVyc2F0aW9uX19iYWRnZSB7DQogICAgZm9udC1zaXplOiB2YXIoLS1jaGF0Ym90LWZvbnQtc2l6ZS14cyk7DQogICAgcGFkZGluZzogMnB4IDhweDsNCiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1jaGF0Ym90LWJvcmRlci1yYWRpdXMtc20pOw0KICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQp9DQoNCi5hZG1pbi1jb252ZXJzYXRpb25fX2JhZGdlLS1hY3RpdmUgew0KICAgIGJhY2tncm91bmQ6IHJnYmEoNDAsIDE2NywgNjksIDAuMSk7DQogICAgY29sb3I6IHZhcigtLWNoYXRib3Qtc3VjY2Vzcyk7DQp9DQoNCi5hZG1pbi1jb252ZXJzYXRpb25fX2JhZGdlLS1jbG9zZWQgew0KICAgIGJhY2tncm91bmQ6IHJnYmEoMTA4LCAxMTcsIDEyNSwgMC4xKTsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC1ncmF5LTYwMCk7DQp9DQoNCi5hZG1pbi1jb252ZXJzYXRpb25fX3ByZXZpZXcgew0KICAgIGZvbnQtc2l6ZTogdmFyKC0tY2hhdGJvdC1mb250LXNpemUtc20pOw0KICAgIGNvbG9yOiB2YXIoLS1jaGF0Ym90LXRleHQtc2Vjb25kYXJ5KTsNCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOw0KICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7DQp9DQoNCi8qIEFsZXJ0cyAqLw0KLmFkbWluLWFsZXJ0IHsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctbWQpOw0KICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQ7DQogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2hhdGJvdC1ib3JkZXItcmFkaXVzKTsNCiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaGF0Ym90LWJnLXNlY29uZGFyeSk7DQogICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLXNtKTsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGdhcDogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLW1kKTsNCn0NCg0KLmFkbWluLWFsZXJ0LS1pbmZvIHsNCiAgICBib3JkZXItY29sb3I6IHZhcigtLWNoYXRib3QtaW5mbyk7DQp9DQoNCi5hZG1pbi1hbGVydC0td2FybmluZyB7DQogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jaGF0Ym90LXdhcm5pbmcpOw0KfQ0KDQouYWRtaW4tYWxlcnQtLXN1Y2Nlc3Mgew0KICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY2hhdGJvdC1zdWNjZXNzKTsNCn0NCg0KLmFkbWluLWFsZXJ0LS1lcnJvciB7DQogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jaGF0Ym90LWRhbmdlcik7DQp9DQoNCi5hZG1pbi1hbGVydF9faWNvbiBzdmcgew0KICAgIHdpZHRoOiAyNHB4Ow0KICAgIGhlaWdodDogMjRweDsNCn0NCg0KLmFkbWluLWFsZXJ0X19jb250ZW50IHsNCiAgICBmbGV4OiAxOw0KfQ0KDQouYWRtaW4tYWxlcnRfX3RpdGxlIHsNCiAgICBmb250LXNpemU6IHZhcigtLWNoYXRib3QtZm9udC1zaXplLWJhc2UpOw0KICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQogICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLXhzKTsNCn0NCg0KLmFkbWluLWFsZXJ0X19tZXNzYWdlIHsNCiAgICBmb250LXNpemU6IHZhcigtLWNoYXRib3QtZm9udC1zaXplLXNtKTsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC10ZXh0LXNlY29uZGFyeSk7DQogICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLXhzKTsNCn0NCg0KLmFkbWluLWFsZXJ0X190aW1lIHsNCiAgICBmb250LXNpemU6IHZhcigtLWNoYXRib3QtZm9udC1zaXplLXhzKTsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC10ZXh0LW11dGVkKTsNCn0NCg0KLmFkbWluLWFsZXJ0X19kaXNtaXNzIHsNCiAgICBiYWNrZ3JvdW5kOiBub25lOw0KICAgIGJvcmRlcjogbm9uZTsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC10ZXh0LXNlY29uZGFyeSk7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KICAgIHBhZGRpbmc6IHZhcigtLWNoYXRib3Qtc3BhY2luZy14cyk7DQp9DQoNCi5hZG1pbi1hbGVydF9fZGlzbWlzcyBzdmcgew0KICAgIHdpZHRoOiAxNnB4Ow0KICAgIGhlaWdodDogMTZweDsNCn0NCg0KLyogQ2FtcGFpZ25zICovDQouYWRtaW4tY2FtcGFpZ24gew0KICAgIHBhZGRpbmc6IHZhcigtLWNoYXRib3Qtc3BhY2luZy1tZCk7DQogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNoYXRib3QtYm9yZGVyLWNvbG9yKTsNCn0NCg0KLmFkbWluLWNhbXBhaWduX19oZWFkZXIgew0KICAgIGRpc3BsYXk6IGZsZXg7DQogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOw0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tY2hhdGJvdC1zcGFjaW5nLXNtKTsNCn0NCg0KLmFkbWluLWNhbXBhaWduX19uYW1lIHsNCiAgICBmb250LXNpemU6IHZhcigtLWNoYXRib3QtZm9udC1zaXplLWJhc2UpOw0KICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQp9DQoNCi5hZG1pbi1jYW1wYWlnbl9fYmFkZ2Ugew0KICAgIGZvbnQtc2l6ZTogdmFyKC0tY2hhdGJvdC1mb250LXNpemUteHMpOw0KICAgIHBhZGRpbmc6IDJweCA4cHg7DQogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2hhdGJvdC1ib3JkZXItcmFkaXVzLXNtKTsNCiAgICBmb250LXdlaWdodDogNjAwOw0KfQ0KDQouYWRtaW4tY2FtcGFpZ25fX2JhZGdlLS1hY3RpdmUgew0KICAgIGJhY2tncm91bmQ6IHJnYmEoNDAsIDE2NywgNjksIDAuMSk7DQogICAgY29sb3I6IHZhcigtLWNoYXRib3Qtc3VjY2Vzcyk7DQp9DQoNCi5hZG1pbi1jYW1wYWlnbl9fbWV0YSB7DQogICAgZm9udC1zaXplOiB2YXIoLS1jaGF0Ym90LWZvbnQtc2l6ZS1zbSk7DQogICAgY29sb3I6IHZhcigtLWNoYXRib3QtdGV4dC1zZWNvbmRhcnkpOw0KICAgIG1hcmdpbi1ib3R0b206IHZhcigtLWNoYXRib3Qtc3BhY2luZy1zbSk7DQogICAgZGlzcGxheTogZmxleDsNCiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47DQp9DQoNCi5hZG1pbi1jYW1wYWlnbl9fcHJvZ3Jlc3Mgew0KICAgIGhlaWdodDogNHB4Ow0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3QtYmctdGVydGlhcnkpOw0KICAgIGJvcmRlci1yYWRpdXM6IDJweDsNCiAgICBvdmVyZmxvdzogaGlkZGVuOw0KfQ0KDQouYWRtaW4tY2FtcGFpZ25fX3Byb2dyZXNzLWJhciB7DQogICAgaGVpZ2h0OiAxMDAlOw0KICAgIGJhY2tncm91bmQ6IHZhcigtLWNoYXRib3Qtc3VjY2Vzcyk7DQogICAgdHJhbnNpdGlvbjogd2lkdGggMC4zcyBlYXNlOw0KfQ0KDQovKiBCdXR0b25zICovDQouYWRtaW4tYnRuIHsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctc20pIHZhcigtLWNoYXRib3Qtc3BhY2luZy1tZCk7DQogICAgYm9yZGVyLXJhZGl1czogdmFyKC0tY2hhdGJvdC1ib3JkZXItcmFkaXVzKTsNCiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jaGF0Ym90LWJvcmRlci1jb2xvcik7DQogICAgYmFja2dyb3VuZDogdmFyKC0tY2hhdGJvdC1iZy1wcmltYXJ5KTsNCiAgICBjb2xvcjogdmFyKC0tY2hhdGJvdC10ZXh0LXByaW1hcnkpOw0KICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1jaGF0Ym90LWZvbnQtZmFtaWx5KTsNCiAgICBmb250LXNpemU6IHZhcigtLWNoYXRib3QtZm9udC1zaXplLXNtKTsNCiAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgdHJhbnNpdGlvbjogdmFyKC0tY2hhdGJvdC10cmFuc2l0aW9uLWZhc3QpOw0KfQ0KDQouYWRtaW4tYnRuOmhvdmVyIHsNCiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaGF0Ym90LWJnLXNlY29uZGFyeSk7DQp9DQoNCi5hZG1pbi1idG4tLXNtIHsNCiAgICBwYWRkaW5nOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmcteHMpIHZhcigtLWNoYXRib3Qtc3BhY2luZy1zbSk7DQp9DQoNCi5hZG1pbi1idG4tLWJsb2NrIHsNCiAgICB3aWR0aDogMTAwJTsNCiAgICBkaXNwbGF5OiBmbGV4Ow0KICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgZ2FwOiB2YXIoLS1jaGF0Ym90LXNwYWNpbmctc20pOw0KfQ0KDQovKiBTcGlubmVyICovDQouYWRtaW4tc3Bpbm5lciB7DQogICAgd2lkdGg6IDQwcHg7DQogICAgaGVpZ2h0OiA0MHB4Ow0KICAgIGFuaW1hdGlvbjogc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7DQp9DQoNCi5hZG1pbi1zcGlubmVyIGNpcmNsZSB7DQogICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMjAwOw0KICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwOw0KICAgIGFuaW1hdGlvbjogZGFzaCAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlOw0KfQ0KDQpAa2V5ZnJhbWVzIHNwaW4gew0KICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQ0KfQ0KDQpAa2V5ZnJhbWVzIGRhc2ggew0KICAgIDAlIHsNCiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogMSwgMjAwOw0KICAgICAgICBzdHJva2UtZGFzaG9mZnNldDogMDsNCiAgICB9DQogICAgNTAlIHsNCiAgICAgICAgc3Ryb2tlLWRhc2hhcnJheTogOTAsIDIwMDsNCiAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0zNXB4Ow0KICAgIH0NCiAgICAxMDAlIHsNCiAgICAgICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0xMjVweDsNCiAgICB9DQp9DQoNCi8qID09PT09IFJFU1BPTlNJVkUgPT09PT0gKi8NCg0KQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7DQogICAgLmNoYXRib3Qtd2lkZ2V0X19tb2RhbCB7DQogICAgICAgIHdpZHRoOiAxMDB2dzsNCiAgICAgICAgaGVpZ2h0OiAxMDB2aDsNCiAgICAgICAgbWF4LXdpZHRoOiAxMDB2dzsNCiAgICAgICAgbWF4LWhlaWdodDogMTAwdmg7DQogICAgICAgIGJvdHRvbTogMDsNCiAgICAgICAgcmlnaHQ6IDA7DQogICAgICAgIGJvcmRlci1yYWRpdXM6IDA7DQogICAgfQ0KDQogICAgLmFkdi1jaGF0X19zaWRlYmFyIHsNCiAgICAgICAgd2lkdGg6IDI4MHB4Ow0KICAgIH0NCg0KICAgIC5hZG1pbi13aWRnZXQtc3RhdHMgew0KICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsNCiAgICB9DQp9DQoNCkBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkgew0KICAgIC5hZHYtY2hhdF9fY29udGVudCB7DQogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47DQogICAgfQ0KDQogICAgLmFkdi1jaGF0X19zaWRlYmFyIHsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIG1heC1oZWlnaHQ6IDQwJTsNCiAgICB9DQp9DQoNCi8qID09PT09IEFDQ0VTU0lCSUxJVFkgPT09PT0gKi8NCg0KKjpmb2N1cy12aXNpYmxlIHsNCiAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tY2hhdGJvdC1wcmltYXJ5KTsNCiAgICBvdXRsaW5lLW9mZnNldDogMnB4Ow0KfQ0KDQpidXR0b246Zm9jdXMtdmlzaWJsZSB7DQogICAgb3V0bGluZTogMnB4IHNvbGlkIHZhcigtLWNoYXRib3QtcHJpbWFyeSk7DQogICAgb3V0bGluZS1vZmZzZXQ6IDJweDsNCn0NCg0KLyogSGlnaCBjb250cmFzdCBtb2RlICovDQpAbWVkaWEgKHByZWZlcnMtY29udHJhc3Q6IGhpZ2gpIHsNCiAgICA6cm9vdCB7DQogICAgICAgIC0tY2hhdGJvdC1ib3JkZXItY29sb3I6ICMwMDAwMDA7DQogICAgfQ0KDQogICAgLmNoYXRib3QtLWRhcmssDQogICAgLmFkdi1jaGF0LS1kYXJrIHsNCiAgICAgICAgLS1jaGF0Ym90LWJvcmRlci1jb2xvcjogI2ZmZmZmZjsNCiAgICB9DQp9DQoNCi8qIFJlZHVjZWQgbW90aW9uICovDQpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgew0KICAgICogew0KICAgICAgICBhbmltYXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50Ow0KICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiAxICFpbXBvcnRhbnQ7DQogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IDAuMDFtcyAhaW1wb3J0YW50Ow0KICAgIH0NCn0NCg0KLyogPT09PT0gUFJJTlQgPT09PT0gKi8NCg0KQG1lZGlhIHByaW50IHsNCiAgICAuY2hhdGJvdC13aWRnZXRfX2J1dHRvbiwNCiAgICAuY2hhdGJvdC13aWRnZXRfX21vZGFsLA0KICAgIC5hZHYtY2hhdF9faGVhZGVyLA0KICAgIC5hZHYtY2hhdF9faW5wdXQtd3JhcHBlciwNCiAgICAuYWRtaW4td2lkZ2V0X19hY3Rpb24gew0KICAgICAgICBkaXNwbGF5OiBub25lOw0KICAgIH0NCn0NCg=="},{"relativePath":"chatbot-unified\\frontend\\widgets\\chatbot-widget.js","existed":true,"content":"LyoqDQogKiBDSEFUQk9UIFdJREdFVCAtIFZJU0lUQU5URVMgV0VCDQogKg0KICogV2lkZ2V0IGNoYXQgcGFyYSB2aXNpdGFudGVzIGNvbiB0ZWNub2xvZ8OtYXMgbW9kZXJuYXM6DQogKiDinIUgV2ViU29ja2V0IHJlYWwtdGltZSBiaWRpcmVjY2lvbmFsDQogKiDinIUgU2VydmljZSBXb3JrZXIgKyBQdXNoIE5vdGlmaWNhdGlvbnMgKFBXQSkNCiAqIOKchSBJbmRleGVkREIgb2ZmbGluZSBjYWNoZQ0KICog4pyFIFZvaWNlIG1lc3NhZ2VzIChNZWRpYVJlY29yZGVyIEFQSSkNCiAqIOKchSBHZW9sb2NhdGlvbiBhdXRvbcOhdGljYQ0KICog4pyFIFR5cGluZyBpbmRpY2F0b3JzIGVuIHRpZW1wbyByZWFsDQogKiDinIUgUmVhZCByZWNlaXB0cyAoZG9ibGUgY2hlY2spDQogKiDinIUgRHJhZyAmIGRyb3AgYXJjaGl2b3MNCiAqIOKchSBFbW9qaSBwaWNrZXIgbmF0aXZvDQogKiDinIUgRGFyayBtb2RlIGF1dG9tw6F0aWNvDQogKiDinIUgUmVzcG9uc2l2ZSBtb2JpbGUtZmlyc3QNCiAqIOKchSBBY2Nlc3NpYmlsaXR5IChBUklBKQ0KICoNCiAqIFVzbzoNCiAqIDxzY3JpcHQgc3JjPSIvYWRtaW4vY2hhdGJvdC11bmlmaWVkL2Zyb250ZW5kL2NoYXRib3QtY29uZmlnLmpzIj48L3NjcmlwdD4NCiAqIDxzY3JpcHQgc3JjPSIvYWRtaW4vY2hhdGJvdC11bmlmaWVkL2Zyb250ZW5kL3dpZGdldHMvY2hhdGJvdC13aWRnZXQuanMiPjwvc2NyaXB0Pg0KICogPHNjcmlwdD4NCiAqICAgY29uc3QgY2hhdGJvdCA9IG5ldyBDaGF0Ym90V2lkZ2V0KENIQVRCT1RfQ09ORklHLnZpc2l0b3IpOw0KICogPC9zY3JpcHQ+DQogKi8NCg0KLyogZ2xvYmFsIENIQVRCT1RfQ09ORklHICovDQoNCmNsYXNzIENoYXRib3RXaWRnZXQgew0KICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkgew0KICAgICAgICAvLyBDb25maWd1cmFjacOzbg0KICAgICAgICB0aGlzLmNvbmZpZyA9IHsNCiAgICAgICAgICAgIGFwaVVybDogb3B0aW9ucy5hcGlVcmwgfHwgJy9hZG1pbi9jaGF0Ym90LXVuaWZpZWQvYXBpL1N1cGVyQ2hhdGJvdEFQSS5waHAnLA0KICAgICAgICAgICAgd3NVcmw6IG9wdGlvbnMud3NVcmwgfHwgJ3dzOi8vbG9jYWxob3N0OjgwODAnLA0KICAgICAgICAgICAgZW5hYmxlVm9pY2U6IG9wdGlvbnMuZW5hYmxlVm9pY2UgIT09IGZhbHNlLA0KICAgICAgICAgICAgZW5hYmxlR2VvbG9jYXRpb246IG9wdGlvbnMuZW5hYmxlR2VvbG9jYXRpb24gIT09IGZhbHNlLA0KICAgICAgICAgICAgZW5hYmxlUHVzaDogb3B0aW9ucy5lbmFibGVQdXNoICE9PSBmYWxzZSwNCiAgICAgICAgICAgIHRoZW1lOiBvcHRpb25zLnRoZW1lIHx8ICdhdXRvJywNCiAgICAgICAgICAgIHBvc2l0aW9uOiBvcHRpb25zLnBvc2l0aW9uIHx8ICdib3R0b20tcmlnaHQnLCAvLyBib3R0b20tcmlnaHQsIGJvdHRvbS1sZWZ0DQogICAgICAgICAgICB6SW5kZXg6IG9wdGlvbnMuekluZGV4IHx8IDk5OTkNCiAgICAgICAgfTsNCg0KICAgICAgICAvLyBFc3RhZG8NCiAgICAgICAgdGhpcy5zdGF0ZSA9IHsNCiAgICAgICAgICAgIGlzT3BlbjogZmFsc2UsDQogICAgICAgICAgICBpc0Nvbm5lY3RlZDogZmFsc2UsDQogICAgICAgICAgICBjb252ZXJzYXRpb25JZDogbnVsbCwNCiAgICAgICAgICAgIG1lc3NhZ2VzOiBbXSwNCiAgICAgICAgICAgIGlzVHlwaW5nOiBmYWxzZSwNCiAgICAgICAgICAgIGlzUmVjb3JkaW5nOiBmYWxzZSwNCiAgICAgICAgICAgIGdlb2xvY2F0aW9uOiBudWxsLA0KICAgICAgICAgICAgZGFya01vZGU6IGZhbHNlDQogICAgICAgIH07DQoNCiAgICAgICAgLy8gV2ViU29ja2V0DQogICAgICAgIHRoaXMud3MgPSBudWxsOw0KICAgICAgICB0aGlzLndzUmVjb25uZWN0QXR0ZW1wdHMgPSAwOw0KICAgICAgICB0aGlzLndzTWF4UmVjb25uZWN0QXR0ZW1wdHMgPSA1Ow0KDQogICAgICAgIC8vIE1lZGlhUmVjb3JkZXIgKHZvaWNlKQ0KICAgICAgICB0aGlzLm1lZGlhUmVjb3JkZXIgPSBudWxsOw0KICAgICAgICB0aGlzLmF1ZGlvQ2h1bmtzID0gW107DQoNCiAgICAgICAgLy8gSW5kZXhlZERCDQogICAgICAgIHRoaXMuZGIgPSBudWxsOw0KDQogICAgICAgIC8vIFNlcnZpY2UgV29ya2VyDQogICAgICAgIHRoaXMuc3dSZWdpc3RyYXRpb24gPSBudWxsOw0KDQogICAgICAgIC8vIFR5cGluZyB0aW1lb3V0DQogICAgICAgIHRoaXMudHlwaW5nVGltZW91dCA9IG51bGw7DQoNCiAgICAgICAgLy8gSW5pY2lhbGl6YXINCiAgICAgICAgdGhpcy5pbml0KCk7DQogICAgfQ0KDQogICAgLy8gPT09PT0gTE9HR0lORyBDT05GSUdVUkFCTEUgPT09PT0NCg0KICAgIC8qKg0KICAgICAqIExvZyBkZWJ1ZyBtZXNzYWdlcyByZXNwZWN0aW5nIENIQVRCT1RfQ09ORklHIHNldHRpbmdzDQogICAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgTWFpbiBtZXNzYWdlDQogICAgICogQHBhcmFtIHsqfSBkYXRhIE9wdGlvbmFsIGRhdGEgdG8gbG9nDQogICAgICovDQogICAgZGVidWcobWVzc2FnZSwgZGF0YSA9IG51bGwpIHsNCiAgICAgICAgLy8gQ2hlY2sgaWYgQ0hBVEJPVF9DT05GSUcgZXhpc3RzIGFuZCBkZWJ1ZyBpcyBlbmFibGVkDQogICAgICAgIGlmICh0eXBlb2YgQ0hBVEJPVF9DT05GSUcgPT09ICd1bmRlZmluZWQnKSB7DQogICAgICAgICAgICAvLyBGYWxsYmFjayB0byBkaXJlY3QgY29uc29sZSBpZiBjb25maWcgbm90IGxvYWRlZA0KICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmRlYnVnICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlDQogICAgICAgICAgICAgICAgY29uc29sZS5pbmZvKCdbQ2hhdGJvdFdpZGdldF0nLCBtZXNzYWdlLCBkYXRhKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KDQogICAgICAgIGNvbnN0IGxvZ0xldmVsID0gQ0hBVEJPVF9DT05GSUcuZGV2ZWxvcG1lbnQ/LmxvZ0xldmVsIHx8ICdlcnJvcic7DQogICAgICAgIGNvbnN0IGxvZ1RvQ29uc29sZSA9IENIQVRCT1RfQ09ORklHLmRldmVsb3BtZW50Py5sb2dUb0NvbnNvbGUgIT09IGZhbHNlOw0KICAgICAgICBjb25zdCBsb2dUb1NlcnZlciA9IENIQVRCT1RfQ09ORklHLmRldmVsb3BtZW50Py5sb2dUb1NlcnZlciA9PT0gdHJ1ZTsNCg0KICAgICAgICAvLyBMb2cgdG8gY29uc29sZSBpZiBlbmFibGVkIGFuZCBsZXZlbCBhbGxvd3MNCiAgICAgICAgaWYgKGxvZ1RvQ29uc29sZSAmJiAobG9nTGV2ZWwgPT09ICdkZWJ1ZycgfHwgbG9nTGV2ZWwgPT09ICdpbmZvJykpIHsNCiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlDQogICAgICAgICAgICBjb25zb2xlLmluZm8oJ1tDaGF0Ym90V2lkZ2V0XScsIG1lc3NhZ2UsIGRhdGEpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gTG9nIHRvIHNlcnZlciBpZiBlbmFibGVkDQogICAgICAgIGlmIChsb2dUb1NlcnZlcikgew0KICAgICAgICAgICAgdGhpcy5sb2dUb1NlcnZlcignZGVidWcnLCBtZXNzYWdlLCBkYXRhKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIFNlbmQgbG9nIHRvIHNlcnZlcg0KICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsZXZlbCBMb2cgbGV2ZWwgKGRlYnVnLCBpbmZvLCB3YXJuLCBlcnJvcikNCiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBNZXNzYWdlDQogICAgICogQHBhcmFtIHsqfSBkYXRhIE9wdGlvbmFsIGRhdGENCiAgICAgKi8NCiAgICBsb2dUb1NlcnZlcihsZXZlbCwgbWVzc2FnZSwgZGF0YSkgew0KICAgICAgICAvLyBEb24ndCBsb2cgc2VydmVyIGVycm9ycyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3ANCiAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoJ0FQSSBjYWxsIGZhaWxlZCcpKSByZXR1cm47DQoNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGZldGNoKHRoaXMuY29uZmlnLmFwaVVybCwgew0KICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLA0KICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LA0KICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsNCiAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnQ6ICdsb2dzL2NyZWF0ZScsDQogICAgICAgICAgICAgICAgICAgIGxldmVsOiBsZXZlbCwNCiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYFtDaGF0Ym90V2lkZ2V0XSAke21lc3NhZ2V9YCwNCiAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSA/IEpTT04uc3RyaW5naWZ5KGRhdGEpIDogbnVsbCwNCiAgICAgICAgICAgICAgICAgICAgc291cmNlOiAnY2hhdGJvdC13aWRnZXQnLA0KICAgICAgICAgICAgICAgICAgICB1c2VyX2FnZW50OiBuYXZpZ2F0b3IudXNlckFnZW50LA0KICAgICAgICAgICAgICAgICAgICB1cmw6IHdpbmRvdy5sb2NhdGlvbi5ocmVmDQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHt9KTsgLy8gU2lsZW50IGZhaWwNCiAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAvLyBTaWxlbnQgZmFpbCAtIGRvbid0IGxvZyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3ANCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vID09PT09IElOSUNJQUxJWkFDScOTTiA9PT09PQ0KDQogICAgYXN5bmMgaW5pdCgpIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIC8vIERldGVjdGFyIGRhcmsgbW9kZQ0KICAgICAgICAgICAgdGhpcy5kZXRlY3REYXJrTW9kZSgpOw0KDQogICAgICAgICAgICAvLyBDcmVhciBVSQ0KICAgICAgICAgICAgdGhpcy5jcmVhdGVVSSgpOw0KDQogICAgICAgICAgICAvLyBJbmljaWFsaXphciBJbmRleGVkREINCiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdEluZGV4ZWREQigpOw0KDQogICAgICAgICAgICAvLyBSZWdpc3RyYXIgU2VydmljZSBXb3JrZXINCiAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5lbmFibGVQdXNoKSB7DQogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZWdpc3RlclNlcnZpY2VXb3JrZXIoKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gT2J0ZW5lciBnZW9sb2NhbGl6YWNpw7NuDQogICAgICAgICAgICBpZiAodGhpcy5jb25maWcuZW5hYmxlR2VvbG9jYXRpb24pIHsNCiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdldEdlb2xvY2F0aW9uKCk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIENhcmdhciBjb252ZXJzYWNpw7NuIGRlc2RlIGNhY2hlDQogICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRDYWNoZWRDb252ZXJzYXRpb24oKTsNCg0KICAgICAgICAgICAgLy8gRXZlbnQgbGlzdGVuZXJzDQogICAgICAgICAgICB0aGlzLmF0dGFjaEV2ZW50TGlzdGVuZXJzKCk7DQoNCiAgICAgICAgICAgIHRoaXMuZGVidWcoJ0NoYXRib3RXaWRnZXQgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Jyk7DQoNCiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsNCiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0NoYXRib3RXaWRnZXQgaW5pdCBlcnJvcjonLCBlcnJvcik7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBkZXRlY3REYXJrTW9kZSgpIHsNCiAgICAgICAgaWYgKHRoaXMuY29uZmlnLnRoZW1lID09PSAnYXV0bycpIHsNCiAgICAgICAgICAgIHRoaXMuc3RhdGUuZGFya01vZGUgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLm1hdGNoZXM7DQoNCiAgICAgICAgICAgIC8vIExpc3RlbmVyIHBhcmEgY2FtYmlvcw0KICAgICAgICAgICAgd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoZSkgPT4gew0KICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuZGFya01vZGUgPSBlLm1hdGNoZXM7DQogICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUaGVtZSgpOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aGlzLnN0YXRlLmRhcmtNb2RlID0gdGhpcy5jb25maWcudGhlbWUgPT09ICdkYXJrJzsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGNyZWF0ZVVJKCkgew0KICAgICAgICAvLyBDb250ZW5lZG9yIHByaW5jaXBhbA0KICAgICAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCiAgICAgICAgY29udGFpbmVyLmlkID0gJ2NoYXRib3Qtd2lkZ2V0JzsNCiAgICAgICAgY29udGFpbmVyLmNsYXNzTmFtZSA9IGBjaGF0Ym90LXdpZGdldCBjaGF0Ym90LXdpZGdldC0tJHt0aGlzLmNvbmZpZy5wb3NpdGlvbn1gOw0KICAgICAgICBjb250YWluZXIuc3R5bGUuekluZGV4ID0gdGhpcy5jb25maWcuekluZGV4Ow0KDQogICAgICAgIGlmICh0aGlzLnN0YXRlLmRhcmtNb2RlKSB7DQogICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgnY2hhdGJvdC13aWRnZXQtLWRhcmsnKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBgDQogICAgICAgICAgICA8IS0tIEJvdMOzbiBmbG90YW50ZSAtLT4NCiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNoYXRib3Qtd2lkZ2V0X19idXR0b24iIGFyaWEtbGFiZWw9IkFicmlyIGNoYXQiPg0KICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9ImNoYXRib3Qtd2lkZ2V0X19idXR0b24taWNvbiBjaGF0Ym90LXdpZGdldF9fYnV0dG9uLWljb24tLWNoYXQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+DQogICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSAxNWEyIDIgMCAwIDEtMiAySDdsLTQgNFY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnoiPjwvcGF0aD4NCiAgICAgICAgICAgICAgICA8L3N2Zz4NCiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJjaGF0Ym90LXdpZGdldF9fYnV0dG9uLWljb24gY2hhdGJvdC13aWRnZXRfX2J1dHRvbi1pY29uLS1jbG9zZSIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHlsZT0iZGlzcGxheTpub25lOyI+DQogICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPSIxOCIgeTE9IjYiIHgyPSI2IiB5Mj0iMTgiPjwvbGluZT4NCiAgICAgICAgICAgICAgICAgICAgPGxpbmUgeDE9IjYiIHkxPSI2IiB4Mj0iMTgiIHkyPSIxOCI+PC9saW5lPg0KICAgICAgICAgICAgICAgIDwvc3ZnPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGF0Ym90LXdpZGdldF9fYnV0dG9uLWJhZGdlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+MDwvc3Bhbj4NCiAgICAgICAgICAgIDwvYnV0dG9uPg0KDQogICAgICAgICAgICA8IS0tIE1vZGFsIGNoYXQgLS0+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGF0Ym90LXdpZGdldF9fbW9kYWwiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4NCiAgICAgICAgICAgICAgICA8IS0tIEhlYWRlciAtLT4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGF0Ym90LXdpZGdldF9faGVhZGVyIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hhdGJvdC13aWRnZXRfX2hlYWRlci1pbmZvIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXRib3Qtd2lkZ2V0X19oZWFkZXItYXZhdGFyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iL2Fzc2V0cy9jaGF0Ym90LWF2YXRhci5wbmciIGFsdD0iQ2hhdGJvdCIgb25lcnJvcj0idGhpcy5zdHlsZS5kaXNwbGF5PSdub25lJyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXRib3Qtd2lkZ2V0X19oZWFkZXItdGV4dCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPSJjaGF0Ym90LXdpZGdldF9faGVhZGVyLXRpdGxlIj5YWm9uYXMgQ2hhdDwvaDM+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImNoYXRib3Qtd2lkZ2V0X19oZWFkZXItc3RhdHVzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXRib3Qtd2lkZ2V0X19wcmVzZW5jZS1kb3QgY2hhdGJvdC13aWRnZXRfX3ByZXNlbmNlLWRvdC0tb25saW5lIj48L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGF0Ym90LXdpZGdldF9fc3RhdHVzLXRleHQiPk9ubGluZTwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXRib3Qtd2lkZ2V0X19oZWFkZXItYWN0aW9ucyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjaGF0Ym90LXdpZGdldF9faGVhZGVyLWJ0biIgaWQ9ImNoYXRib3QtbWluaW1pemUiIGFyaWEtbGFiZWw9Ik1pbmltaXphciI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluZSB4MT0iNSIgeTE9IjEyIiB4Mj0iMTkiIHkyPSIxMiI+PC9saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICAgICAgPCEtLSBNZW5zYWplcyAtLT4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGF0Ym90LXdpZGdldF9fbWVzc2FnZXMiIGlkPSJjaGF0Ym90LW1lc3NhZ2VzIj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hhdGJvdC13aWRnZXRfX3dlbGNvbWUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hhdGJvdC13aWRnZXRfX3dlbGNvbWUtaWNvbiI+8J+RizwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGg0PsKhSG9sYSEgQmllbnZlbmlkbyBhIFhab25hcyBWYWxlbmNpYTwvaDQ+DQogICAgICAgICAgICAgICAgICAgICAgICA8cD7Cv0VuIHF1w6kgcG9kZW1vcyBheXVkYXJ0ZSBob3k/PC9wPg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCg0KICAgICAgICAgICAgICAgIDwhLS0gVHlwaW5nIGluZGljYXRvciAtLT4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGF0Ym90LXdpZGdldF9fdHlwaW5nIiBpZD0iY2hhdGJvdC10eXBpbmciIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hhdGJvdC13aWRnZXRfX3R5cGluZy1kb3RzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGF0Ym90LXdpZGdldF9fdHlwaW5nLXRleHQiPkVzY3JpYmllbmRvLi4uPC9zcGFuPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICAgICAgPCEtLSBJbnB1dCAtLT4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGF0Ym90LXdpZGdldF9faW5wdXQtd3JhcHBlciI+DQogICAgICAgICAgICAgICAgICAgIDwhLS0gRHJhZyAmIGRyb3Agb3ZlcmxheSAtLT4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hhdGJvdC13aWRnZXRfX2Ryb3Atb3ZlcmxheSIgaWQ9ImNoYXRib3QtZHJvcC1vdmVybGF5IiBzdHlsZT0iZGlzcGxheTpub25lOyI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGF0Ym90LXdpZGdldF9fZHJvcC1jb250ZW50Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00Ij48L3BhdGg+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwb2x5bGluZSBwb2ludHM9IjE3IDggMTIgMyA3IDgiPjwvcG9seWxpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPSIxMiIgeTE9IjMiIHgyPSIxMiIgeTI9IjE1Ij48L2xpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+U3VlbHRhIGVsIGFyY2hpdm8gYXF1w608L3A+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hhdGJvdC13aWRnZXRfX2lucHV0LWNvbnRhaW5lciI+DQogICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEF0dGFjaG1lbnRzIHByZXZpZXcgLS0+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGF0Ym90LXdpZGdldF9fYXR0YWNobWVudHMiIGlkPSJjaGF0Ym90LWF0dGFjaG1lbnRzIiBzdHlsZT0iZGlzcGxheTpub25lOyI+PC9kaXY+DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW5wdXQgYmFyIC0tPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hhdGJvdC13aWRnZXRfX2lucHV0LWJhciI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2hhdGJvdC13aWRnZXRfX2lucHV0LWJ0biIgaWQ9ImNoYXRib3QtYXR0YWNoIiBhcmlhLWxhYmVsPSJBZGp1bnRhciBhcmNoaXZvIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTIxLjQ0IDExLjA1bC05LjE5IDkuMTlhNiA2IDAgMCAxLTguNDktOC40OWw5LjE5LTkuMTlhNCA0IDAgMCAxIDUuNjYgNS42NmwtOS4yIDkuMTlhMiAyIDAgMCAxLTIuODMtMi44M2w4LjQ5LTguNDgiPjwvcGF0aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjaGF0Ym90LXdpZGdldF9faW5wdXQtYnRuIiBpZD0iY2hhdGJvdC1lbW9qaSIgYXJpYS1sYWJlbD0iRW1vamkiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTIiIGN5PSIxMiIgcj0iMTAiPjwvY2lyY2xlPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTggMTRzMS41IDIgNCAyIDQtMiA0LTIiPjwvcGF0aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPSI5IiB5MT0iOSIgeDI9IjkuMDEiIHkyPSI5Ij48L2xpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluZSB4MT0iMTUiIHkxPSI5IiB4Mj0iMTUuMDEiIHkyPSI5Ij48L2xpbmU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjaGF0Ym90LXdpZGdldF9faW5wdXQiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPSJjaGF0Ym90LWlucHV0Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iRXNjcmliZSB1biBtZW5zYWplLi4uIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzPSIxIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSJNZW5zYWplIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3RleHRhcmVhPg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmNvbmZpZy5lbmFibGVWb2ljZSA/IGANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjaGF0Ym90LXdpZGdldF9faW5wdXQtYnRuIGNoYXRib3Qtd2lkZ2V0X19pbnB1dC1idG4tLXZvaWNlIiBpZD0iY2hhdGJvdC12b2ljZSIgYXJpYS1sYWJlbD0iTWVuc2FqZSBkZSB2b3oiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJjaGF0Ym90LXdpZGdldF9fdm9pY2UtaWNvbi0tbWljIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTEyIDFhMyAzIDAgMCAwLTMgM3Y4YTMgMyAwIDAgMCA2IDBWNGEzIDMgMCAwIDAtMy0zeiI+PC9wYXRoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE5IDEwdjJhNyA3IDAgMCAxLTE0IDB2LTIiPjwvcGF0aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPSIxMiIgeTE9IjE5IiB4Mj0iMTIiIHkyPSIyMyI+PC9saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmUgeDE9IjgiIHkxPSIyMyIgeDI9IjE2IiB5Mj0iMjMiPjwvbGluZT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9ImNoYXRib3Qtd2lkZ2V0X192b2ljZS1pY29uLS1zdG9wIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9IjYiIHk9IjYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjIiPjwvcmVjdD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYCA6ICcnfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2hhdGJvdC13aWRnZXRfX2lucHV0LWJ0biBjaGF0Ym90LXdpZGdldF9faW5wdXQtYnRuLS1zZW5kIiBpZD0iY2hhdGJvdC1zZW5kIiBhcmlhLWxhYmVsPSJFbnZpYXIiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGluZSB4MT0iMjIiIHkxPSIyIiB4Mj0iMTEiIHkyPSIxMyI+PC9saW5lPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMiAyIDE1IDIyIDExIDEzIDIgOSAyMiAyIj48L3BvbHlnb24+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICAgICAgPCEtLSBQb3dlcmVkIGJ5IC0tPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXRib3Qtd2lkZ2V0X19mb290ZXIiPg0KICAgICAgICAgICAgICAgICAgICA8c21hbGw+UG93ZXJlZCBieSA8c3Ryb25nPlhab25hcyBDaGF0Ym90PC9zdHJvbmc+PC9zbWFsbD4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICA8IS0tIElucHV0IGZpbGUgb2N1bHRvIC0tPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImZpbGUiIGlkPSJjaGF0Ym90LWZpbGUtaW5wdXQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBhY2NlcHQ9ImltYWdlLyosdmlkZW8vKixhdWRpby8qIj4NCiAgICAgICAgYDsNCg0KICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7DQoNCiAgICAgICAgLy8gUmVmZXJlbmNpYXMgRE9NDQogICAgICAgIHRoaXMuZWxlbWVudHMgPSB7DQogICAgICAgICAgICBjb250YWluZXIsDQogICAgICAgICAgICBidXR0b246IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuY2hhdGJvdC13aWRnZXRfX2J1dHRvbicpLA0KICAgICAgICAgICAgbW9kYWw6IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuY2hhdGJvdC13aWRnZXRfX21vZGFsJyksDQogICAgICAgICAgICBtZXNzYWdlczogY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJyNjaGF0Ym90LW1lc3NhZ2VzJyksDQogICAgICAgICAgICB0eXBpbmc6IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcjY2hhdGJvdC10eXBpbmcnKSwNCiAgICAgICAgICAgIGlucHV0OiBjb250YWluZXIucXVlcnlTZWxlY3RvcignI2NoYXRib3QtaW5wdXQnKSwNCiAgICAgICAgICAgIHNlbmRCdG46IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcjY2hhdGJvdC1zZW5kJyksDQogICAgICAgICAgICBhdHRhY2hCdG46IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcjY2hhdGJvdC1hdHRhY2gnKSwNCiAgICAgICAgICAgIHZvaWNlQnRuOiBjb250YWluZXIucXVlcnlTZWxlY3RvcignI2NoYXRib3Qtdm9pY2UnKSwNCiAgICAgICAgICAgIGVtb2ppQnRuOiBjb250YWluZXIucXVlcnlTZWxlY3RvcignI2NoYXRib3QtZW1vamknKSwNCiAgICAgICAgICAgIGZpbGVJbnB1dDogY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJyNjaGF0Ym90LWZpbGUtaW5wdXQnKSwNCiAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBjb250YWluZXIucXVlcnlTZWxlY3RvcignI2NoYXRib3QtYXR0YWNobWVudHMnKSwNCiAgICAgICAgICAgIGRyb3BPdmVybGF5OiBjb250YWluZXIucXVlcnlTZWxlY3RvcignI2NoYXRib3QtZHJvcC1vdmVybGF5JyksDQogICAgICAgICAgICBiYWRnZTogY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5jaGF0Ym90LXdpZGdldF9fYnV0dG9uLWJhZGdlJyksDQogICAgICAgICAgICBzdGF0dXNUZXh0OiBjb250YWluZXIucXVlcnlTZWxlY3RvcignLmNoYXRib3Qtd2lkZ2V0X19zdGF0dXMtdGV4dCcpLA0KICAgICAgICAgICAgcHJlc2VuY2VEb3Q6IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuY2hhdGJvdC13aWRnZXRfX3ByZXNlbmNlLWRvdCcpDQogICAgICAgIH07DQogICAgfQ0KDQogICAgYXR0YWNoRXZlbnRMaXN0ZW5lcnMoKSB7DQogICAgICAgIC8vIFRvZ2dsZSBjaGF0DQogICAgICAgIHRoaXMuZWxlbWVudHMuYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy50b2dnbGUoKSk7DQogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjaGF0Ym90LW1pbmltaXplJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLmNsb3NlKCkpOw0KDQogICAgICAgIC8vIEVudmlhciBtZW5zYWplDQogICAgICAgIHRoaXMuZWxlbWVudHMuc2VuZEJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMuc2VuZE1lc3NhZ2UoKSk7DQogICAgICAgIHRoaXMuZWxlbWVudHMuaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7DQogICAgICAgICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkpIHsNCiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAgICAgdGhpcy5zZW5kTWVzc2FnZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCg0KICAgICAgICAvLyBUeXBpbmcgaW5kaWNhdG9yDQogICAgICAgIHRoaXMuZWxlbWVudHMuaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCAoKSA9PiB0aGlzLmhhbmRsZVR5cGluZygpKTsNCg0KICAgICAgICAvLyBBdXRvLXJlc2l6ZSB0ZXh0YXJlYQ0KICAgICAgICB0aGlzLmVsZW1lbnRzLmlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmhlaWdodCA9ICdhdXRvJzsNCiAgICAgICAgICAgIHRoaXMuc3R5bGUuaGVpZ2h0ID0gTWF0aC5taW4odGhpcy5zY3JvbGxIZWlnaHQsIDEyMCkgKyAncHgnOw0KICAgICAgICB9KTsNCg0KICAgICAgICAvLyBBZGp1bnRhciBhcmNoaXZvDQogICAgICAgIHRoaXMuZWxlbWVudHMuYXR0YWNoQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gew0KICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5maWxlSW5wdXQuY2xpY2soKTsNCiAgICAgICAgfSk7DQogICAgICAgIHRoaXMuZWxlbWVudHMuZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIChlKSA9PiB0aGlzLmhhbmRsZUZpbGVTZWxlY3QoZSkpOw0KDQogICAgICAgIC8vIERyYWcgJiBkcm9wDQogICAgICAgIGNvbnN0IG1vZGFsID0gdGhpcy5lbGVtZW50cy5tb2RhbDsNCiAgICAgICAgWydkcmFnZW50ZXInLCAnZHJhZ292ZXInLCAnZHJhZ2xlYXZlJywgJ2Ryb3AnXS5mb3JFYWNoKGV2ZW50TmFtZSA9PiB7DQogICAgICAgICAgICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKGUpID0+IHsNCiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgWydkcmFnZW50ZXInLCAnZHJhZ292ZXInXS5mb3JFYWNoKGV2ZW50TmFtZSA9PiB7DQogICAgICAgICAgICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKCkgPT4gew0KICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudHMuZHJvcE92ZXJsYXkuc3R5bGUuZGlzcGxheSA9ICdmbGV4JzsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgWydkcmFnbGVhdmUnLCAnZHJvcCddLmZvckVhY2goZXZlbnROYW1lID0+IHsNCiAgICAgICAgICAgIG1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCAoKSA9PiB7DQogICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5kcm9wT3ZlcmxheS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgICAgICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgKGUpID0+IHRoaXMuaGFuZGxlRmlsZURyb3AoZSkpOw0KDQogICAgICAgIC8vIFZvaWNlIHJlY29yZGluZw0KICAgICAgICBpZiAodGhpcy5lbGVtZW50cy52b2ljZUJ0bikgew0KICAgICAgICAgICAgdGhpcy5lbGVtZW50cy52b2ljZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMudG9nZ2xlVm9pY2VSZWNvcmRpbmcoKSk7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBFbW9qaSBwaWNrZXIgKG5hdGl2bykNCiAgICAgICAgaWYgKHRoaXMuZWxlbWVudHMuZW1vamlCdG4pIHsNCiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMuZW1vamlCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLnNob3dFbW9qaVBpY2tlcigpKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vID09PT09IElOREVYRUREQiA9PT09PQ0KDQogICAgYXN5bmMgaW5pdEluZGV4ZWREQigpIHsNCiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHsNCiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3BlbignQ2hhdGJvdERCJywgMSk7DQoNCiAgICAgICAgICAgIHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHJlamVjdChyZXF1ZXN0LmVycm9yKTsNCiAgICAgICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4gew0KICAgICAgICAgICAgICAgIHRoaXMuZGIgPSByZXF1ZXN0LnJlc3VsdDsNCiAgICAgICAgICAgICAgICByZXNvbHZlKCk7DQogICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IChldmVudCkgPT4gew0KICAgICAgICAgICAgICAgIGNvbnN0IGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsNCg0KICAgICAgICAgICAgICAgIC8vIFN0b3JlIGNvbnZlcnNhY2lvbmVzDQogICAgICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKCdjb252ZXJzYXRpb25zJykpIHsNCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udmVyc2F0aW9uc1N0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ2NvbnZlcnNhdGlvbnMnLCB7IGtleVBhdGg6ICdpZCcgfSk7DQogICAgICAgICAgICAgICAgICAgIGNvbnZlcnNhdGlvbnNTdG9yZS5jcmVhdGVJbmRleCgnY3JlYXRlZF9hdCcsICdjcmVhdGVkX2F0JywgeyB1bmlxdWU6IGZhbHNlIH0pOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vIFN0b3JlIG1lbnNhamVzDQogICAgICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKCdtZXNzYWdlcycpKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2VzU3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnbWVzc2FnZXMnLCB7IGtleVBhdGg6ICdpZCcsIGF1dG9JbmNyZW1lbnQ6IHRydWUgfSk7DQogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzU3RvcmUuY3JlYXRlSW5kZXgoJ2NvbnZlcnNhdGlvbl9pZCcsICdjb252ZXJzYXRpb25faWQnLCB7IHVuaXF1ZTogZmFsc2UgfSk7DQogICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VzU3RvcmUuY3JlYXRlSW5kZXgoJ3N0YXR1cycsICdzdGF0dXMnLCB7IHVuaXF1ZTogZmFsc2UgfSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfTsNCiAgICAgICAgfSk7DQogICAgfQ0KDQogICAgYXN5bmMgY2FjaGVNZXNzYWdlKG1lc3NhZ2UpIHsNCiAgICAgICAgY29uc3QgdHggPSB0aGlzLmRiLnRyYW5zYWN0aW9uKCdtZXNzYWdlcycsICdyZWFkd3JpdGUnKTsNCiAgICAgICAgY29uc3Qgc3RvcmUgPSB0eC5vYmplY3RTdG9yZSgnbWVzc2FnZXMnKTsNCg0KICAgICAgICBhd2FpdCBzdG9yZS5wdXQobWVzc2FnZSk7DQogICAgfQ0KDQogICAgYXN5bmMgZ2V0Q2FjaGVkTWVzc2FnZXMoY29udmVyc2F0aW9uSWQpIHsNCiAgICAgICAgY29uc3QgdHggPSB0aGlzLmRiLnRyYW5zYWN0aW9uKCdtZXNzYWdlcycsICdyZWFkb25seScpOw0KICAgICAgICBjb25zdCBzdG9yZSA9IHR4Lm9iamVjdFN0b3JlKCdtZXNzYWdlcycpOw0KICAgICAgICBjb25zdCBpbmRleCA9IHN0b3JlLmluZGV4KCdjb252ZXJzYXRpb25faWQnKTsNCg0KICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsNCiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBpbmRleC5nZXRBbGwoY29udmVyc2F0aW9uSWQpOw0KICAgICAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKSA9PiByZXNvbHZlKHJlcXVlc3QucmVzdWx0IHx8IFtdKTsNCiAgICAgICAgfSk7DQogICAgfQ0KDQogICAgLy8gPT09PT0gU0VSVklDRSBXT1JLRVIgKyBQVVNIID09PT09DQoNCiAgICBhc3luYyByZWdpc3RlclNlcnZpY2VXb3JrZXIoKSB7DQogICAgICAgIGlmICghKCdzZXJ2aWNlV29ya2VyJyBpbiBuYXZpZ2F0b3IpKSB7DQogICAgICAgICAgICBjb25zb2xlLndhcm4oJ1NlcnZpY2UgV29ya2VyIG5vdCBzdXBwb3J0ZWQnKTsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KDQogICAgICAgIHRyeSB7DQogICAgICAgICAgICB0aGlzLnN3UmVnaXN0cmF0aW9uID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVnaXN0ZXIoJy9zdy5qcycpOw0KICAgICAgICAgICAgdGhpcy5kZWJ1ZygnU2VydmljZSBXb3JrZXIgcmVnaXN0ZXJlZCcsIHRoaXMuc3dSZWdpc3RyYXRpb24pOw0KDQogICAgICAgICAgICAvLyBTb2xpY2l0YXIgcGVybWlzbyBub3RpZmljYWNpb25lcw0KICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbiA9IGF3YWl0IE5vdGlmaWNhdGlvbi5yZXF1ZXN0UGVybWlzc2lvbigpOw0KICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24gPT09ICdncmFudGVkJykgew0KICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3Vic2NyaWJlVG9QdXNoKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTZXJ2aWNlIFdvcmtlciByZWdpc3RyYXRpb24gZmFpbGVkOicsIGVycm9yKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGFzeW5jIHN1YnNjcmliZVRvUHVzaCgpIHsNCiAgICAgICAgaWYgKCF0aGlzLnN3UmVnaXN0cmF0aW9uKSByZXR1cm47DQoNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGF3YWl0IHRoaXMuc3dSZWdpc3RyYXRpb24ucHVzaE1hbmFnZXIuc3Vic2NyaWJlKHsNCiAgICAgICAgICAgICAgICB1c2VyVmlzaWJsZU9ubHk6IHRydWUsDQogICAgICAgICAgICAgICAgYXBwbGljYXRpb25TZXJ2ZXJLZXk6IHRoaXMudXJsQmFzZTY0VG9VaW50OEFycmF5KCdZT1VSX1ZBUElEX1BVQkxJQ19LRVknKQ0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIC8vIEVudmlhciBzdXNjcmlwY2nDs24gYWwgc2Vydmlkb3INCiAgICAgICAgICAgIGF3YWl0IGZldGNoKGAke3RoaXMuY29uZmlnLmFwaVVybH0vcHVzaC9zdWJzY3JpYmVgLCB7DQogICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsDQogICAgICAgICAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sDQogICAgICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoc3Vic2NyaXB0aW9uKQ0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgIHRoaXMuZGVidWcoJ1B1c2ggc3Vic2NyaXB0aW9uIHN1Y2Nlc3NmdWwnKTsNCiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsNCiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1B1c2ggc3Vic2NyaXB0aW9uIGZhaWxlZDonLCBlcnJvcik7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB1cmxCYXNlNjRUb1VpbnQ4QXJyYXkoYmFzZTY0U3RyaW5nKSB7DQogICAgICAgIGNvbnN0IHBhZGRpbmcgPSAnPScucmVwZWF0KCg0IC0gYmFzZTY0U3RyaW5nLmxlbmd0aCAlIDQpICUgNCk7DQogICAgICAgIGNvbnN0IGJhc2U2NCA9IChiYXNlNjRTdHJpbmcgKyBwYWRkaW5nKS5yZXBsYWNlKC8tL2csICcrJykucmVwbGFjZSgvXy9nLCAnLycpOw0KICAgICAgICBjb25zdCByYXdEYXRhID0gd2luZG93LmF0b2IoYmFzZTY0KTsNCiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShbLi4ucmF3RGF0YV0ubWFwKGNoYXIgPT4gY2hhci5jaGFyQ29kZUF0KDApKSk7DQogICAgfQ0KDQogICAgLy8gPT09PT0gR0VPTE9DQVRJT04gPT09PT0NCg0KICAgIGFzeW5jIGdldEdlb2xvY2F0aW9uKCkgew0KICAgICAgICBpZiAoISgnZ2VvbG9jYXRpb24nIGluIG5hdmlnYXRvcikpIHsNCiAgICAgICAgICAgIGNvbnNvbGUud2FybignR2VvbG9jYXRpb24gbm90IHN1cHBvcnRlZCcpOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7DQogICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKA0KICAgICAgICAgICAgICAgIChwb3NpdGlvbikgPT4gew0KICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmdlb2xvY2F0aW9uID0gew0KICAgICAgICAgICAgICAgICAgICAgICAgbGF0aXR1ZGU6IHBvc2l0aW9uLmNvb3Jkcy5sYXRpdHVkZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogcG9zaXRpb24uY29vcmRzLmxvbmdpdHVkZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGFjY3VyYWN5OiBwb3NpdGlvbi5jb29yZHMuYWNjdXJhY3kNCiAgICAgICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnR2VvbG9jYXRpb24gb2J0YWluZWQnLCB0aGlzLnN0YXRlLmdlb2xvY2F0aW9uKTsNCiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOw0KICAgICAgICAgICAgICAgIH0sDQogICAgICAgICAgICAgICAgKGVycm9yKSA9PiB7DQogICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignR2VvbG9jYXRpb24gZGVuaWVkOicsIGVycm9yKTsNCiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICk7DQogICAgICAgIH0pOw0KICAgIH0NCg0KICAgIC8vID09PT09IFdFQlNPQ0tFVCA9PT09PQ0KDQogICAgYXN5bmMgY29ubmVjdFdlYlNvY2tldCgpIHsNCiAgICAgICAgaWYgKHRoaXMud3MgJiYgdGhpcy53cy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikgcmV0dXJuOw0KDQogICAgICAgIHRyeSB7DQogICAgICAgICAgICB0aGlzLndzID0gbmV3IFdlYlNvY2tldCh0aGlzLmNvbmZpZy53c1VybCwgWydjaGF0LXYxJ10pOw0KDQogICAgICAgICAgICB0aGlzLndzLm9ub3BlbiA9ICgpID0+IHsNCiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdXZWJTb2NrZXQgY29ubmVjdGVkJyk7DQogICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5pc0Nvbm5lY3RlZCA9IHRydWU7DQogICAgICAgICAgICAgICAgdGhpcy53c1JlY29ubmVjdEF0dGVtcHRzID0gMDsNCiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb25TdGF0dXModHJ1ZSk7DQoNCiAgICAgICAgICAgICAgICAvLyBBdXRlbnRpY2FyIChvcGNpb25hbCkNCiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5jb252ZXJzYXRpb25JZCkgew0KICAgICAgICAgICAgICAgICAgICB0aGlzLndzLnNlbmQoSlNPTi5zdHJpbmdpZnkoew0KICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2pvaW4nLA0KICAgICAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uX2lkOiB0aGlzLnN0YXRlLmNvbnZlcnNhdGlvbklkDQogICAgICAgICAgICAgICAgICAgIH0pKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICB0aGlzLndzLm9ubWVzc2FnZSA9IChldmVudCkgPT4gew0KICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEpOw0KICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlV2ViU29ja2V0TWVzc2FnZShkYXRhKTsNCiAgICAgICAgICAgIH07DQoNCiAgICAgICAgICAgIHRoaXMud3Mub25lcnJvciA9IChlcnJvcikgPT4gew0KICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1dlYlNvY2tldCBlcnJvcjonLCBlcnJvcik7DQogICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICB0aGlzLndzLm9uY2xvc2UgPSAoKSA9PiB7DQogICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnV2ViU29ja2V0IGNsb3NlZCcpOw0KICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuaXNDb25uZWN0ZWQgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbm5lY3Rpb25TdGF0dXMoZmFsc2UpOw0KICAgICAgICAgICAgICAgIHRoaXMucmVjb25uZWN0V2ViU29ja2V0KCk7DQogICAgICAgICAgICB9Ow0KDQogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdXZWJTb2NrZXQgY29ubmVjdGlvbiBmYWlsZWQ6JywgZXJyb3IpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcmVjb25uZWN0V2ViU29ja2V0KCkgew0KICAgICAgICBpZiAodGhpcy53c1JlY29ubmVjdEF0dGVtcHRzID49IHRoaXMud3NNYXhSZWNvbm5lY3RBdHRlbXB0cykgew0KICAgICAgICAgICAgY29uc29sZS5lcnJvcignTWF4IFdlYlNvY2tldCByZWNvbm5lY3QgYXR0ZW1wdHMgcmVhY2hlZCcpOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQoNCiAgICAgICAgdGhpcy53c1JlY29ubmVjdEF0dGVtcHRzKys7DQogICAgICAgIGNvbnN0IGRlbGF5ID0gTWF0aC5taW4oMTAwMCAqIE1hdGgucG93KDIsIHRoaXMud3NSZWNvbm5lY3RBdHRlbXB0cyksIDMwMDAwKTsNCg0KICAgICAgICB0aGlzLmRlYnVnKGBSZWNvbm5lY3RpbmcgV2ViU29ja2V0IGluICR7ZGVsYXl9bXMgKGF0dGVtcHQgJHt0aGlzLndzUmVjb25uZWN0QXR0ZW1wdHN9KWApOw0KDQogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jb25uZWN0V2ViU29ja2V0KCksIGRlbGF5KTsNCiAgICB9DQoNCiAgICBoYW5kbGVXZWJTb2NrZXRNZXNzYWdlKGRhdGEpIHsNCiAgICAgICAgc3dpdGNoIChkYXRhLnR5cGUpIHsNCiAgICAgICAgICAgIGNhc2UgJ25ld19tZXNzYWdlJzoNCiAgICAgICAgICAgICAgICB0aGlzLmFkZE1lc3NhZ2UoZGF0YSwgZmFsc2UpOw0KICAgICAgICAgICAgICAgIHRoaXMucGxheU5vdGlmaWNhdGlvblNvdW5kKCk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGNhc2UgJ3R5cGluZ19pbmRpY2F0b3InOg0KICAgICAgICAgICAgICAgIHRoaXMuc2hvd1R5cGluZ0luZGljYXRvcihkYXRhLmlzX3R5cGluZyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGNhc2UgJ3JlYWRfcmVjZWlwdCc6DQogICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNZXNzYWdlU3RhdHVzKGRhdGEubWVzc2FnZV9pZCwgJ3JlYWQnKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgY2FzZSAncHJlc2VuY2VfdXBkYXRlJzoNCiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXNlbmNlKGRhdGEuc3RhdHVzKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHNlbmRUeXBpbmdJbmRpY2F0b3IoaXNUeXBpbmcpIHsNCiAgICAgICAgaWYgKHRoaXMud3MgJiYgdGhpcy53cy5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikgew0KICAgICAgICAgICAgdGhpcy53cy5zZW5kKEpTT04uc3RyaW5naWZ5KHsNCiAgICAgICAgICAgICAgICB0eXBlOiAndHlwaW5nJywNCiAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25faWQ6IHRoaXMuc3RhdGUuY29udmVyc2F0aW9uSWQsDQogICAgICAgICAgICAgICAgaXNfdHlwaW5nOiBpc1R5cGluZw0KICAgICAgICAgICAgfSkpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLy8gPT09PT0gQ0hBVCBGVU5DVElPTlMgPT09PT0NCg0KICAgIGFzeW5jIHRvZ2dsZSgpIHsNCiAgICAgICAgaWYgKHRoaXMuc3RhdGUuaXNPcGVuKSB7DQogICAgICAgICAgICB0aGlzLmNsb3NlKCk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBhd2FpdCB0aGlzLm9wZW4oKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGFzeW5jIG9wZW4oKSB7DQogICAgICAgIHRoaXMuZWxlbWVudHMubW9kYWwuc3R5bGUuZGlzcGxheSA9ICdmbGV4JzsNCiAgICAgICAgdGhpcy5zdGF0ZS5pc09wZW4gPSB0cnVlOw0KDQogICAgICAgIC8vIE9jdWx0YXIgYmFkZ2UNCiAgICAgICAgdGhpcy5lbGVtZW50cy5iYWRnZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICB0aGlzLmVsZW1lbnRzLmJhZGdlLnRleHRDb250ZW50ID0gJzAnOw0KDQogICAgICAgIC8vIFRvZ2dsZSBpY29ucw0KICAgICAgICB0aGlzLmVsZW1lbnRzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuY2hhdGJvdC13aWRnZXRfX2J1dHRvbi1pY29uLS1jaGF0Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgdGhpcy5lbGVtZW50cy5jb250YWluZXIucXVlcnlTZWxlY3RvcignLmNoYXRib3Qtd2lkZ2V0X19idXR0b24taWNvbi0tY2xvc2UnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCg0KICAgICAgICAvLyBJbmljaWFyIGNvbnZlcnNhY2nDs24gc2kgbm8gZXhpc3RlDQogICAgICAgIGlmICghdGhpcy5zdGF0ZS5jb252ZXJzYXRpb25JZCkgew0KICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFydENvbnZlcnNhdGlvbigpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gQ29uZWN0YXIgV2ViU29ja2V0DQogICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdFdlYlNvY2tldCgpOw0KDQogICAgICAgIC8vIEZvY3VzIGlucHV0DQogICAgICAgIHRoaXMuZWxlbWVudHMuaW5wdXQuZm9jdXMoKTsNCg0KICAgICAgICAvLyBTY3JvbGwgdG8gYm90dG9tDQogICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTsNCiAgICB9DQoNCiAgICBjbG9zZSgpIHsNCiAgICAgICAgdGhpcy5lbGVtZW50cy5tb2RhbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICB0aGlzLnN0YXRlLmlzT3BlbiA9IGZhbHNlOw0KDQogICAgICAgIC8vIFRvZ2dsZSBpY29ucw0KICAgICAgICB0aGlzLmVsZW1lbnRzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuY2hhdGJvdC13aWRnZXRfX2J1dHRvbi1pY29uLS1jaGF0Jykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgIHRoaXMuZWxlbWVudHMuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5jaGF0Ym90LXdpZGdldF9fYnV0dG9uLWljb24tLWNsb3NlJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICB9DQoNCiAgICBhc3luYyBzdGFydENvbnZlcnNhdGlvbigpIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dGhpcy5jb25maWcuYXBpVXJsfS92aXNpdG9yL3N0YXJ0YCwgew0KICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLA0KICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LA0KICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsNCiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfYWdlbnQ6IG5hdmlnYXRvci51c2VyQWdlbnQsDQogICAgICAgICAgICAgICAgICAgICAgICByZWZlcnJlcjogZG9jdW1lbnQucmVmZXJyZXIsDQogICAgICAgICAgICAgICAgICAgICAgICBwYWdlX3VybDogd2luZG93LmxvY2F0aW9uLmhyZWYNCiAgICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgICAgcHJlZmVyZW5jZXM6IHt9LA0KICAgICAgICAgICAgICAgICAgICBnZW9sb2NhdGlvbjogdGhpcy5zdGF0ZS5nZW9sb2NhdGlvbg0KICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOw0KDQogICAgICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmNvbnZlcnNhdGlvbklkID0gcmVzdWx0LmRhdGEuY29udmVyc2F0aW9uX2lkOw0KDQogICAgICAgICAgICAgICAgLy8gR3VhcmRhciBlbiBsb2NhbFN0b3JhZ2UNCiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2hhdGJvdF9jb252ZXJzYXRpb25faWQnLCB0aGlzLnN0YXRlLmNvbnZlcnNhdGlvbklkKTsNCg0KICAgICAgICAgICAgICAgIC8vIE1lbnNhamUgZGUgYmllbnZlbmlkYQ0KICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZGF0YS53ZWxjb21lX21lc3NhZ2UpIHsNCiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRNZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHJlc3VsdC5kYXRhLndlbGNvbWVfbWVzc2FnZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRlcl90eXBlOiAnYm90JywNCiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKQ0KICAgICAgICAgICAgICAgICAgICB9LCBmYWxzZSk7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgdGhpcy5kZWJ1ZygnQ29udmVyc2F0aW9uIHN0YXJ0ZWQnLCB7IGNvbnZlcnNhdGlvbklkOiB0aGlzLnN0YXRlLmNvbnZlcnNhdGlvbklkIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGNhdGNoIChlcnJvcikgew0KICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHN0YXJ0IGNvbnZlcnNhdGlvbjonLCBlcnJvcik7DQogICAgICAgICAgICB0aGlzLmFkZE1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdFcnJvciBhbCBpbmljaWFyIGNvbnZlcnNhY2nDs24uIFBvciBmYXZvciwgaW50ZW50YSBkZSBudWV2by4nLA0KICAgICAgICAgICAgICAgIHNlbmRlcl90eXBlOiAnc3lzdGVtJywNCiAgICAgICAgICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkNCiAgICAgICAgICAgIH0sIGZhbHNlKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGFzeW5jIGxvYWRDYWNoZWRDb252ZXJzYXRpb24oKSB7DQogICAgICAgIGNvbnN0IGNhY2hlZElkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NoYXRib3RfY29udmVyc2F0aW9uX2lkJyk7DQogICAgICAgIGlmIChjYWNoZWRJZCkgew0KICAgICAgICAgICAgdGhpcy5zdGF0ZS5jb252ZXJzYXRpb25JZCA9IGNhY2hlZElkOw0KICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCB0aGlzLmdldENhY2hlZE1lc3NhZ2VzKGNhY2hlZElkKTsNCiAgICAgICAgICAgIG1lc3NhZ2VzLmZvckVhY2gobXNnID0+IHRoaXMuYWRkTWVzc2FnZShtc2csIGZhbHNlLCBmYWxzZSkpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgYXN5bmMgc2VuZE1lc3NhZ2UoKSB7DQogICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmVsZW1lbnRzLmlucHV0LnZhbHVlLnRyaW0oKTsNCiAgICAgICAgaWYgKCFtZXNzYWdlICYmIHRoaXMuc3RhdGUuYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSByZXR1cm47DQoNCiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmNvbnZlcnNhdGlvbklkKSB7DQogICAgICAgICAgICBhd2FpdCB0aGlzLnN0YXJ0Q29udmVyc2F0aW9uKCk7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBBZ3JlZ2FyIG1lbnNhamUgYSBVSQ0KICAgICAgICBjb25zdCBtZXNzYWdlRGF0YSA9IHsNCiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UgfHwgJ1tBcmNoaXZvIGFkanVudG9dJywNCiAgICAgICAgICAgIHNlbmRlcl90eXBlOiAndXNlcicsDQogICAgICAgICAgICBjcmVhdGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksDQogICAgICAgICAgICBzdGF0dXM6ICdzZW5kaW5nJw0KICAgICAgICB9Ow0KICAgICAgICBjb25zdCBtc2dFbGVtZW50ID0gdGhpcy5hZGRNZXNzYWdlKG1lc3NhZ2VEYXRhLCB0cnVlKTsNCg0KICAgICAgICAvLyBMaW1waWFyIGlucHV0DQogICAgICAgIHRoaXMuZWxlbWVudHMuaW5wdXQudmFsdWUgPSAnJzsNCiAgICAgICAgdGhpcy5lbGVtZW50cy5pbnB1dC5zdHlsZS5oZWlnaHQgPSAnYXV0byc7DQoNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIC8vIEVudmlhciBhIHNlcnZpZG9yDQogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3RoaXMuY29uZmlnLmFwaVVybH0vdmlzaXRvci9zZW5kYCwgew0KICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLA0KICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyB9LA0KICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsNCiAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uX2lkOiB0aGlzLnN0YXRlLmNvbnZlcnNhdGlvbklkLA0KICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLA0KICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50czogW10gLy8gVE9ETzogaW1wbGVtZW50DQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7DQoNCiAgICAgICAgICAgIGlmIChyZXN1bHQuc3VjY2Vzcykgew0KICAgICAgICAgICAgICAgIG1lc3NhZ2VEYXRhLmlkID0gcmVzdWx0LmRhdGEubWVzc2FnZV9pZDsNCiAgICAgICAgICAgICAgICBtZXNzYWdlRGF0YS5zdGF0dXMgPSAnc2VudCc7DQogICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNZXNzYWdlU3RhdHVzKG1lc3NhZ2VEYXRhLmlkLCAnc2VudCcpOw0KDQogICAgICAgICAgICAgICAgLy8gQ2FjaGUNCiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNhY2hlTWVzc2FnZShtZXNzYWdlRGF0YSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIG1lc3NhZ2VEYXRhLnN0YXR1cyA9ICdlcnJvcic7DQogICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNZXNzYWdlU3RhdHVzKG51bGwsICdlcnJvcicsIG1zZ0VsZW1lbnQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGNhdGNoIChlcnJvcikgew0KICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHNlbmQgbWVzc2FnZTonLCBlcnJvcik7DQogICAgICAgICAgICBtZXNzYWdlRGF0YS5zdGF0dXMgPSAnZXJyb3InOw0KICAgICAgICAgICAgdGhpcy51cGRhdGVNZXNzYWdlU3RhdHVzKG51bGwsICdlcnJvcicsIG1zZ0VsZW1lbnQpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gU3RvcCB0eXBpbmcgaW5kaWNhdG9yDQogICAgICAgIHRoaXMuc2VuZFR5cGluZ0luZGljYXRvcihmYWxzZSk7DQogICAgfQ0KDQogICAgYWRkTWVzc2FnZShtZXNzYWdlRGF0YSwgaXNPd24sIHNjcm9sbCA9IHRydWUpIHsNCiAgICAgICAgY29uc3QgbXNnRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7DQogICAgICAgIG1zZ0Rpdi5jbGFzc05hbWUgPSBgY2hhdGJvdC13aWRnZXRfX21lc3NhZ2UgY2hhdGJvdC13aWRnZXRfX21lc3NhZ2UtLSR7aXNPd24gPyAnb3duJyA6ICdvdGhlcid9YDsNCiAgICAgICAgbXNnRGl2LmRhdGFzZXQubWVzc2FnZUlkID0gbWVzc2FnZURhdGEuaWQgfHwgJyc7DQoNCiAgICAgICAgY29uc3QgdGltZSA9IG5ldyBEYXRlKG1lc3NhZ2VEYXRhLmNyZWF0ZWRfYXQpLnRvTG9jYWxlVGltZVN0cmluZygnZXMtRVMnLCB7DQogICAgICAgICAgICBob3VyOiAnMi1kaWdpdCcsDQogICAgICAgICAgICBtaW51dGU6ICcyLWRpZ2l0Jw0KICAgICAgICB9KTsNCg0KICAgICAgICBtc2dEaXYuaW5uZXJIVE1MID0gYA0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2hhdGJvdC13aWRnZXRfX21lc3NhZ2UtY29udGVudCI+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9ImNoYXRib3Qtd2lkZ2V0X19tZXNzYWdlLXRleHQiPiR7dGhpcy5lc2NhcGVIdG1sKG1lc3NhZ2VEYXRhLm1lc3NhZ2UpfTwvcD4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGF0Ym90LXdpZGdldF9fbWVzc2FnZS1tZXRhIj4NCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoYXRib3Qtd2lkZ2V0X19tZXNzYWdlLXRpbWUiPiR7dGltZX08L3NwYW4+DQogICAgICAgICAgICAgICAgICAgICR7aXNPd24gPyBgDQogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGF0Ym90LXdpZGdldF9fbWVzc2FnZS1zdGF0dXMiIGRhdGEtc3RhdHVzPSIke21lc3NhZ2VEYXRhLnN0YXR1cyB8fCAnc2VudCd9Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5nZXRTdGF0dXNJY29uKG1lc3NhZ2VEYXRhLnN0YXR1cyB8fCAnc2VudCcpfQ0KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIGAgOiAnJ30NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICBgOw0KDQogICAgICAgIC8vIFJlbW92ZXIgd2VsY29tZSBzaSBleGlzdGUNCiAgICAgICAgY29uc3Qgd2VsY29tZSA9IHRoaXMuZWxlbWVudHMubWVzc2FnZXMucXVlcnlTZWxlY3RvcignLmNoYXRib3Qtd2lkZ2V0X193ZWxjb21lJyk7DQogICAgICAgIGlmICh3ZWxjb21lKSB3ZWxjb21lLnJlbW92ZSgpOw0KDQogICAgICAgIHRoaXMuZWxlbWVudHMubWVzc2FnZXMuYXBwZW5kQ2hpbGQobXNnRGl2KTsNCg0KICAgICAgICBpZiAoc2Nyb2xsKSB0aGlzLnNjcm9sbFRvQm90dG9tKCk7DQoNCiAgICAgICAgLy8gTWFyY2FyIGNvbW8gbGXDrWRvIHNpIGVzIG1lbnNhamUgZW50cmFudGUNCiAgICAgICAgaWYgKCFpc093biAmJiBtZXNzYWdlRGF0YS5pZCkgew0KICAgICAgICAgICAgdGhpcy5tYXJrQXNSZWFkKG1lc3NhZ2VEYXRhLmlkKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBtc2dEaXY7DQogICAgfQ0KDQogICAgZ2V0U3RhdHVzSWNvbihzdGF0dXMpIHsNCiAgICAgICAgc3dpdGNoIChzdGF0dXMpIHsNCiAgICAgICAgICAgIGNhc2UgJ3NlbmRpbmcnOg0KICAgICAgICAgICAgICAgIHJldHVybiAnPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIj48L2NpcmNsZT48L3N2Zz4nOw0KICAgICAgICAgICAgY2FzZSAnc2VudCc6DQogICAgICAgICAgICAgICAgcmV0dXJuICc8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+PHBvbHlsaW5lIHBvaW50cz0iMjAgNiA5IDE3IDQgMTIiPjwvcG9seWxpbmU+PC9zdmc+JzsNCiAgICAgICAgICAgIGNhc2UgJ2RlbGl2ZXJlZCc6DQogICAgICAgICAgICAgICAgcmV0dXJuICc8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+PHBvbHlsaW5lIHBvaW50cz0iMjAgNiA5IDE3IDQgMTIiPjwvcG9seWxpbmU+PHBvbHlsaW5lIHBvaW50cz0iMjMgNiAxMiAxNyA3IDEyIj48L3BvbHlsaW5lPjwvc3ZnPic7DQogICAgICAgICAgICBjYXNlICdyZWFkJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gJzxzdmcgY2xhc3M9ImNoYXRib3Qtd2lkZ2V0X19zdGF0dXMtcmVhZCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj48cG9seWxpbmUgcG9pbnRzPSIyMCA2IDkgMTcgNCAxMiI+PC9wb2x5bGluZT48cG9seWxpbmUgcG9pbnRzPSIyMyA2IDEyIDE3IDcgMTIiPjwvcG9seWxpbmU+PC9zdmc+JzsNCiAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gJzxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCI+PC9jaXJjbGU+PGxpbmUgeDE9IjE1IiB5MT0iOSIgeDI9IjkiIHkyPSIxNSI+PC9saW5lPjxsaW5lIHgxPSI5IiB5MT0iOSIgeDI9IjE1IiB5Mj0iMTUiPjwvbGluZT48L3N2Zz4nOw0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICByZXR1cm4gJyc7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICB1cGRhdGVNZXNzYWdlU3RhdHVzKG1lc3NhZ2VJZCwgc3RhdHVzLCBlbGVtZW50ID0gbnVsbCkgew0KICAgICAgICBjb25zdCBtc2dFbGVtZW50ID0gZWxlbWVudCB8fCB0aGlzLmVsZW1lbnRzLm1lc3NhZ2VzLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLW1lc3NhZ2UtaWQ9IiR7bWVzc2FnZUlkfSJdYCk7DQogICAgICAgIGlmICghbXNnRWxlbWVudCkgcmV0dXJuOw0KDQogICAgICAgIGNvbnN0IHN0YXR1c0VsID0gbXNnRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuY2hhdGJvdC13aWRnZXRfX21lc3NhZ2Utc3RhdHVzJyk7DQogICAgICAgIGlmIChzdGF0dXNFbCkgew0KICAgICAgICAgICAgc3RhdHVzRWwuZGF0YXNldC5zdGF0dXMgPSBzdGF0dXM7DQogICAgICAgICAgICBzdGF0dXNFbC5pbm5lckhUTUwgPSB0aGlzLmdldFN0YXR1c0ljb24oc3RhdHVzKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGFzeW5jIG1hcmtBc1JlYWQobWVzc2FnZUlkKSB7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICBhd2FpdCBmZXRjaChgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L21lc3NhZ2VzL21hcmtfcmVhZGAsIHsNCiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywNCiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSwNCiAgICAgICAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7IG1lc3NhZ2VfaWQ6IG1lc3NhZ2VJZCB9KQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7DQogICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbWFyayBhcyByZWFkOicsIGVycm9yKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGhhbmRsZVR5cGluZygpIHsNCiAgICAgICAgLy8gRW52aWFyIHR5cGluZyBpbmRpY2F0b3INCiAgICAgICAgdGhpcy5zZW5kVHlwaW5nSW5kaWNhdG9yKHRydWUpOw0KDQogICAgICAgIC8vIEF1dG8tc3RvcCBkZXNwdcOpcyBkZSAzIHNlZ3VuZG9zDQogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnR5cGluZ1RpbWVvdXQpOw0KICAgICAgICB0aGlzLnR5cGluZ1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgICAgIHRoaXMuc2VuZFR5cGluZ0luZGljYXRvcihmYWxzZSk7DQogICAgICAgIH0sIDMwMDApOw0KICAgIH0NCg0KICAgIHNob3dUeXBpbmdJbmRpY2F0b3Ioc2hvdykgew0KICAgICAgICB0aGlzLmVsZW1lbnRzLnR5cGluZy5zdHlsZS5kaXNwbGF5ID0gc2hvdyA/ICdmbGV4JyA6ICdub25lJzsNCiAgICAgICAgaWYgKHNob3cpIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTsNCiAgICB9DQoNCiAgICAvLyA9PT09PSBWT0lDRSBSRUNPUkRJTkcgPT09PT0NCg0KICAgIGFzeW5jIHRvZ2dsZVZvaWNlUmVjb3JkaW5nKCkgew0KICAgICAgICBpZiAodGhpcy5zdGF0ZS5pc1JlY29yZGluZykgew0KICAgICAgICAgICAgdGhpcy5zdG9wVm9pY2VSZWNvcmRpbmcoKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRWb2ljZVJlY29yZGluZygpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgYXN5bmMgc3RhcnRWb2ljZVJlY29yZGluZygpIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGNvbnN0IHN0cmVhbSA9IGF3YWl0IG5hdmlnYXRvci5tZWRpYURldmljZXMuZ2V0VXNlck1lZGlhKHsgYXVkaW86IHRydWUgfSk7DQoNCiAgICAgICAgICAgIHRoaXMubWVkaWFSZWNvcmRlciA9IG5ldyBNZWRpYVJlY29yZGVyKHN0cmVhbSwgew0KICAgICAgICAgICAgICAgIG1pbWVUeXBlOiAnYXVkaW8vd2VibTtjb2RlY3M9b3B1cycNCiAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICB0aGlzLmF1ZGlvQ2h1bmtzID0gW107DQoNCiAgICAgICAgICAgIHRoaXMubWVkaWFSZWNvcmRlci5vbmRhdGFhdmFpbGFibGUgPSAoZXZlbnQpID0+IHsNCiAgICAgICAgICAgICAgICB0aGlzLmF1ZGlvQ2h1bmtzLnB1c2goZXZlbnQuZGF0YSk7DQogICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICB0aGlzLm1lZGlhUmVjb3JkZXIub25zdG9wID0gYXN5bmMgKCkgPT4gew0KICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvQmxvYiA9IG5ldyBCbG9iKHRoaXMuYXVkaW9DaHVua3MsIHsgdHlwZTogJ2F1ZGlvL3dlYm0nIH0pOw0KICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkVm9pY2VNZXNzYWdlKGF1ZGlvQmxvYik7DQoNCiAgICAgICAgICAgICAgICAvLyBTdG9wIHN0cmVhbQ0KICAgICAgICAgICAgICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7DQogICAgICAgICAgICB9Ow0KDQogICAgICAgICAgICB0aGlzLm1lZGlhUmVjb3JkZXIuc3RhcnQoKTsNCiAgICAgICAgICAgIHRoaXMuc3RhdGUuaXNSZWNvcmRpbmcgPSB0cnVlOw0KDQogICAgICAgICAgICAvLyBVSSB1cGRhdGUNCiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMudm9pY2VCdG4uY2xhc3NMaXN0LmFkZCgnY2hhdGJvdC13aWRnZXRfX2lucHV0LWJ0bi0tcmVjb3JkaW5nJyk7DQogICAgICAgICAgICB0aGlzLmVsZW1lbnRzLnZvaWNlQnRuLnF1ZXJ5U2VsZWN0b3IoJy5jaGF0Ym90LXdpZGdldF9fdm9pY2UtaWNvbi0tbWljJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMudm9pY2VCdG4ucXVlcnlTZWxlY3RvcignLmNoYXRib3Qtd2lkZ2V0X192b2ljZS1pY29uLS1zdG9wJykuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQoNCiAgICAgICAgICAgIHRoaXMuZGVidWcoJ1ZvaWNlIHJlY29yZGluZyBzdGFydGVkJyk7DQoNCiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsNCiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1ZvaWNlIHJlY29yZGluZyBmYWlsZWQ6JywgZXJyb3IpOw0KICAgICAgICAgICAgYWxlcnQoJ0Vycm9yIGFsIGFjY2VkZXIgYWwgbWljcsOzZm9uby4gUG9yIGZhdm9yLCB2ZXJpZmljYSBsb3MgcGVybWlzb3MuJyk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBzdG9wVm9pY2VSZWNvcmRpbmcoKSB7DQogICAgICAgIGlmICh0aGlzLm1lZGlhUmVjb3JkZXIgJiYgdGhpcy5zdGF0ZS5pc1JlY29yZGluZykgew0KICAgICAgICAgICAgdGhpcy5tZWRpYVJlY29yZGVyLnN0b3AoKTsNCiAgICAgICAgICAgIHRoaXMuc3RhdGUuaXNSZWNvcmRpbmcgPSBmYWxzZTsNCg0KICAgICAgICAgICAgLy8gVUkgdXBkYXRlDQogICAgICAgICAgICB0aGlzLmVsZW1lbnRzLnZvaWNlQnRuLmNsYXNzTGlzdC5yZW1vdmUoJ2NoYXRib3Qtd2lkZ2V0X19pbnB1dC1idG4tLXJlY29yZGluZycpOw0KICAgICAgICAgICAgdGhpcy5lbGVtZW50cy52b2ljZUJ0bi5xdWVyeVNlbGVjdG9yKCcuY2hhdGJvdC13aWRnZXRfX3ZvaWNlLWljb24tLW1pYycpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICAgICAgdGhpcy5lbGVtZW50cy52b2ljZUJ0bi5xdWVyeVNlbGVjdG9yKCcuY2hhdGJvdC13aWRnZXRfX3ZvaWNlLWljb24tLXN0b3AnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KDQogICAgICAgICAgICB0aGlzLmRlYnVnKCdWb2ljZSByZWNvcmRpbmcgc3RvcHBlZCcpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgYXN5bmMgdXBsb2FkVm9pY2VNZXNzYWdlKGF1ZGlvQmxvYikgew0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsNCiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGF1ZGlvQmxvYiwgJ3ZvaWNlX21lc3NhZ2Uud2VibScpOw0KDQogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3RoaXMuY29uZmlnLmFwaVVybH0vbWVzc2FnZXMvdXBsb2FkYCwgew0KICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLA0KICAgICAgICAgICAgICAgIGJvZHk6IGZvcm1EYXRhDQogICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOw0KDQogICAgICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHsNCiAgICAgICAgICAgICAgICAvLyBFbnZpYXIgbWVuc2FqZSBjb24gYXVkaW8NCiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmlucHV0LnZhbHVlID0gJ1vwn46kIE1lbnNhamUgZGUgdm96XSc7DQogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZW5kTWVzc2FnZSgpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGNhdGNoIChlcnJvcikgew0KICAgICAgICAgICAgY29uc29sZS5lcnJvcignVm9pY2UgdXBsb2FkIGZhaWxlZDonLCBlcnJvcik7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvLyA9PT09PSBGSUxFIEhBTkRMSU5HID09PT09DQoNCiAgICBoYW5kbGVGaWxlU2VsZWN0KGV2ZW50KSB7DQogICAgICAgIGNvbnN0IGZpbGVzID0gQXJyYXkuZnJvbShldmVudC50YXJnZXQuZmlsZXMpOw0KICAgICAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4gdGhpcy51cGxvYWRGaWxlKGZpbGUpKTsNCiAgICB9DQoNCiAgICBoYW5kbGVGaWxlRHJvcChldmVudCkgew0KICAgICAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKTsNCiAgICAgICAgZmlsZXMuZm9yRWFjaChmaWxlID0+IHRoaXMudXBsb2FkRmlsZShmaWxlKSk7DQogICAgfQ0KDQogICAgYXN5bmMgdXBsb2FkRmlsZShmaWxlKSB7DQogICAgICAgIC8vIFZhbGlkYXIgdGFtYcOxbyAobWF4IDEwTUIpDQogICAgICAgIGlmIChmaWxlLnNpemUgPiAxMCAqIDEwMjQgKiAxMDI0KSB7DQogICAgICAgICAgICBhbGVydCgnQXJjaGl2byBkZW1hc2lhZG8gZ3JhbmRlLiBNw6F4aW1vIDEwTUIuJyk7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCg0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsNCiAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIGZpbGUpOw0KDQogICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke3RoaXMuY29uZmlnLmFwaVVybH0vbWVzc2FnZXMvdXBsb2FkYCwgew0KICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLA0KICAgICAgICAgICAgICAgIGJvZHk6IGZvcm1EYXRhDQogICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOw0KDQogICAgICAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHsNCiAgICAgICAgICAgICAgICB0aGlzLmRlYnVnKCdGaWxlIHVwbG9hZGVkJywgeyB1cmw6IHJlc3VsdC5kYXRhLnVybCB9KTsNCiAgICAgICAgICAgICAgICAvLyBUT0RPOiBtb3N0cmFyIHByZXZpZXcgeSBhZGp1bnRhciBhIG1lbnNhamUNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsNCiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZpbGUgdXBsb2FkIGZhaWxlZDonLCBlcnJvcik7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAvLyA9PT09PSBVVElMSVRJRVMgPT09PT0NCg0KICAgIHNjcm9sbFRvQm90dG9tKCkgew0KICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsNCiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMubWVzc2FnZXMuc2Nyb2xsVG9wID0gdGhpcy5lbGVtZW50cy5tZXNzYWdlcy5zY3JvbGxIZWlnaHQ7DQogICAgICAgIH0sIDEwMCk7DQogICAgfQ0KDQogICAgdXBkYXRlQ29ubmVjdGlvblN0YXR1cyhjb25uZWN0ZWQpIHsNCiAgICAgICAgdGhpcy5lbGVtZW50cy5zdGF0dXNUZXh0LnRleHRDb250ZW50ID0gY29ubmVjdGVkID8gJ09ubGluZScgOiAnT2ZmbGluZSc7DQogICAgICAgIHRoaXMuZWxlbWVudHMucHJlc2VuY2VEb3QuY2xhc3NOYW1lID0gYGNoYXRib3Qtd2lkZ2V0X19wcmVzZW5jZS1kb3QgY2hhdGJvdC13aWRnZXRfX3ByZXNlbmNlLWRvdC0tJHtjb25uZWN0ZWQgPyAnb25saW5lJyA6ICdvZmZsaW5lJ31gOw0KICAgIH0NCg0KICAgIHVwZGF0ZVByZXNlbmNlKHN0YXR1cykgew0KICAgICAgICB0aGlzLmVsZW1lbnRzLnByZXNlbmNlRG90LmNsYXNzTmFtZSA9IGBjaGF0Ym90LXdpZGdldF9fcHJlc2VuY2UtZG90IGNoYXRib3Qtd2lkZ2V0X19wcmVzZW5jZS1kb3QtLSR7c3RhdHVzfWA7DQogICAgfQ0KDQogICAgdXBkYXRlVGhlbWUoKSB7DQogICAgICAgIGlmICh0aGlzLnN0YXRlLmRhcmtNb2RlKSB7DQogICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCdjaGF0Ym90LXdpZGdldC0tZGFyaycpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgnY2hhdGJvdC13aWRnZXQtLWRhcmsnKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHBsYXlOb3RpZmljYXRpb25Tb3VuZCgpIHsNCiAgICAgICAgY29uc3QgYXVkaW8gPSBuZXcgQXVkaW8oJy9hc3NldHMvbm90aWZpY2F0aW9uLm1wMycpOw0KICAgICAgICBhdWRpby52b2x1bWUgPSAwLjU7DQogICAgICAgIGF1ZGlvLnBsYXkoKS5jYXRjaCgoKSA9PiB7fSk7DQogICAgfQ0KDQogICAgZXNjYXBlSHRtbCh0ZXh0KSB7DQogICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KICAgICAgICBkaXYudGV4dENvbnRlbnQgPSB0ZXh0Ow0KICAgICAgICByZXR1cm4gZGl2LmlubmVySFRNTDsNCiAgICB9DQoNCiAgICBzaG93RW1vamlQaWNrZXIoKSB7DQogICAgICAgIC8vIEVtb2ppIHBpY2tlciBuYXRpdm8gKEhUTUw1KQ0KICAgICAgICAvLyBBbHRlcm5hdGl2YTogdXNhciBsaWJyYXJ5IGNvbW8gZW1vamktcGlja2VyLWVsZW1lbnQNCiAgICAgICAgYWxlcnQoJ0Vtb2ppIHBpY2tlciAtIFRPRE86IGltcGxlbWVudGFyIGxpYnJhcnknKTsNCiAgICB9DQp9DQoNCi8vIEF1dG8taW5pY2lhbGl6YXIgc2kgZXhpc3RlIGNvbmZpZyBnbG9iYWwNCmlmICh3aW5kb3cuY2hhdGJvdENvbmZpZykgew0KICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7DQogICAgICAgIHdpbmRvdy5jaGF0Ym90ID0gbmV3IENoYXRib3RXaWRnZXQod2luZG93LmNoYXRib3RDb25maWcpOw0KICAgIH0pOw0KfQ0KDQovLyBFeHBvcnQgcGFyYSBDb21tb25KUyAoTm9kZS5qcykNCi8qIGdsb2JhbCBtb2R1bGUgKi8NCmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7DQogICAgbW9kdWxlLmV4cG9ydHMgPSBDaGF0Ym90V2lkZ2V0Ow0KfQ0K"},{"relativePath":"chatbot-unified\\setup\\test_chatbot_widget.html","existed":false,"content":null}]},{"id":"cp-1784668489469-5397f030","turnId":"019f8686-c2d4-7811-8539-0aaaab400971","createdAt":"2026-07-21T21:14:49.469Z","changedFiles":1,"files":[{"relativePath":"VERIFICACION_CHATBOT_FRONTEND.md","beforeExisted":false,"beforeHash":null,"beforeContent":null,"afterExisted":true,"afterHash":"cac8f0cb75f8986a592ac48f67ae5cc350568bdf05d4ad6b81d10d29f7c66f5c","afterContent":"IyBWZXJpZmljYWNpb24gZGVsIGZyb250ZW5kIGRlbCBjaGF0Ym90CgpEb2N1bWVudG8gZGUgY29udHJvbCBwYXJhIGNvbXByb2JhciBsb3MgY2FtYmlvcyByZWNpZW50ZXMgZGVsIHdpZGdldCBwdWJsaWNvLgoKIyMgQXJjaGl2b3MgaW1wbGljYWRvcwoKLSBgY2hhdGJvdC11bmlmaWVkL2Zyb250ZW5kL3dpZGdldHMvY2hhdGJvdC13aWRnZXQuanNgCi0gYGNoYXRib3QtdW5pZmllZC9mcm9udGVuZC93aWRnZXRzL2NoYXRib3QtdW5pZmllZC5jc3NgCi0gYGNoYXRib3QtdW5pZmllZC9zZXR1cC90ZXN0X2NoYXRib3Rfd2lkZ2V0Lmh0bWxgCgojIyBDb21wcm9iYWNpb25lcyBhdXRvbWF0aWNhcwoKLSBbeF0gRWwgYXJjaGl2byBKYXZhU2NyaXB0IHN1cGVyYSBgbm9kZSAtLWNoZWNrYC4KLSBbeF0gRWwgQ1NTIGNvbnRpZW5lIGVsIG1pc21vIG51bWVybyBkZSBsbGF2ZXMgZGUgYXBlcnR1cmEgeSBjaWVycmUuCi0gW3hdIExhIHZpc3RhIHByZXZpYSBjYXJnYSBlbCBDU1MgeSBlbCBKYXZhU2NyaXB0IG1lZGlhbnRlIHJ1dGFzIHJlbGF0aXZhcy4KLSBbeF0gRWwgZXN0YWRvIGBhdHRhY2htZW50c2AgZXN0YSBpbmljaWFsaXphZG8gYW50ZXMgZGUgZW52aWFyIG1lbnNhamVzLgoKIyMgQ29tcHJvYmFjaW9uIHZpc3VhbAoKQWJyaXI6CgpgY2hhdGJvdC11bmlmaWVkL3NldHVwL3Rlc3RfY2hhdGJvdF93aWRnZXQuaHRtbGAKClZhbGlkYXIgbG9zIHNpZ3VpZW50ZXMgcHVudG9zOgoKLSBbIF0gRWwgd2lkZ2V0IGFwYXJlY2UgYWJpZXJ0byB5IGNvcnJlY3RhbWVudGUgYWxpbmVhZG8uCi0gWyBdIExhIGNhYmVjZXJhIG11ZXN0cmEgbGEgaWRlbnRpZGFkIGRlIFhab25hcyB5IGVsIGVzdGFkbyBkZSBjb25leGlvbi4KLSBbIF0gTGFzIHRyZXMgY29uc3VsdGFzIGZyZWN1ZW50ZXMgY2FiZW4gZGVudHJvIGRlbCB3aWRnZXQuCi0gWyBdIEFsIHB1bHNhciB1bmEgY29uc3VsdGEgZnJlY3VlbnRlIHNlIGludGVudGEgZW52aWFyIHN1IHRleHRvLgotIFsgXSBFbCBib3RvbiBkZSBlbnZpYXIgc2UgYWN0aXZhIGFsIGVzY3JpYmlyIHkgc2UgZGVzYWN0aXZhIGFsIHZhY2lhciBlbCBjYW1wby4KLSBbIF0gRWwgY3VhZHJvIGRlIHRleHRvIGF1bWVudGEgZGUgYWx0dXJhIGFsIGVzY3JpYmlyIHZhcmlhcyBsaW5lYXMuCi0gWyBdIEVsIGJvdG9uIG1pbmltaXphciBjaWVycmEgZWwgd2lkZ2V0LgotIFsgXSBMYSB0ZWNsYSBgRXNjYXBlYCBjaWVycmEgZWwgd2lkZ2V0LgotIFsgXSBFbCBmb2NvIHZ1ZWx2ZSBhbCBib3RvbiBmbG90YW50ZSBkZXNwdcOpcyBkZSBjZXJyYXIuCi0gWyBdIEVsIGRpc2XDsW8gbm8gcHJlc2VudGEgZGVzYm9yZGFtaWVudG8gaG9yaXpvbnRhbCBlbiBtb3ZpbC4KLSBbIF0gRWwgdGVtYSBvc2N1cm8gbWFudGllbmUgY29udHJhc3RlIHN1ZmljaWVudGUuCgojIyBSZXN1bHRhZG8KCkZlY2hhIGRlIGNvbXByb2JhY2lvbjogMjEgZGUganVsaW8gZGUgMjAyNi4KCkVzdGFkbzoKCi0gWyBdIENvcnJlY3RvCi0gWyBdIFJlcXVpZXJlIGFqdXN0ZXMKCk5vdGFzOgoKPCEtLSBFc2NyaWJpciBhcXVpIGN1YWxxdWllciBpbmNpZGVuY2lhIGVuY29udHJhZGEgZHVyYW50ZSBsYSBwcnVlYmEuIC0tPgo=","decision":"accepted","decidedAt":"2026-07-21T21:15:02.146Z"}]},{"id":"cp-1784803307584-f024aca1","turnId":"019f8e8f-78f4-7d23-a7ac-68c6f0aa5d35","createdAt":"2026-07-23T10:41:47.584Z","changedFiles":0,"files":[]}]}
