ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGMxNTJlOTIuLjQ2M2EyZGYgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMSArMSwzMSBAQAotLi90b21jYXQvKgorIyBUYWtlbiBmcm9tIGh0dHA6Ly9nYXJ5LXJvd2UuY29tL2FnaWxlc3RhY2svMjAxMi8xMC8xMi9hLWdpdGlnbm9yZS1maWxlLWZvci1pbnRlbGxpai1hbmQtZWNsaXBzZS13aXRoLW1hdmVuLworIworIyBFY2xpcHNlCisuY2xhc3NwYXRoCisucHJvamVjdAorLnNldHRpbmdzLworCisjIEludGVsbGlqCisuaWRlYS8KKyouaW1sCisqLml3cworCisjIE5ldEJlYW5zCisvbmItY29uZmlndXJhdGlvbi54bWwKKy9hcHAvbmItY29uZmlndXJhdGlvbi54bWwKKy9hcHAvbmJhY3Rpb25zLnhtbAorCisjIE1hYworLkRTX1N0b3JlCisKKyMgTWF2ZW4KK2xvZy8KK3RhcmdldC8KKwordmVsb2NpdHkubG9nCisKK3RvbWNhdC1iYXNlCitkb2NrZXIvcG9zdGdyZXNxbC1kYXRhCitkb2NrZXIvcm9sbGVyLWRhdGEKK2Fzc2VtYmx5LXJlbGVhc2UvcmVsZWFzZS5zaAoraXQtc2VsZW5pdW0vb3ZlcmxheXMvCmRpZmYgLS1naXQgYS9Eb2NrZXJmaWxlIGIvRG9ja2VyZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2FmZmM0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9ja2VyZmlsZQpAQCAtMCwwICsxLDg0IEBACisKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdQorIyB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyMgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nCisjIGNvcHlyaWdodCBpbiB0aGlzIHdvcmssIHBsZWFzZSBzZWUgdGhlIE5PVElDRSBmaWxlIGluIHRoZSB0b3AgbGV2ZWwKKyMgZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgorCisKKyMgRXhhbXBsZSBEb2NrZXJmaWxlIGZvciBjb250YWluZXJpemluZyBSb2xsZXIKKworCisjIFNUQUdFIDEgLSBCVUlMRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRlJPTSBtYXZlbjozLjYuMC1qZGstMTEtc2xpbSBhcyBidWlsZGVyCisKK0NPUFkgLiAvcHJvamVjdC8KKworIyBCdWlsZCBBcGFjaGUgUm9sbGVyCisKK1dPUktESVIgL3RtcAorUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSBnaXQKK1JVTiBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS9yb2xsZXIuZ2l0CitXT1JLRElSIC90bXAvcm9sbGVyCitSVU4gZ2l0IGNoZWNrb3V0IGJvb3RzdHJhcC11aTsgXAorbXZuIC1EdXNlci5ob21lPS9idWlsZGVyL2hvbWUgLURza2lwVGVzdHM9dHJ1ZSAtQiBjbGVhbiBpbnN0YWxsCisKKworIyBTVEFHRSAyIC0gUEFDS0FHRSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRlJPTSB0b21jYXQ6OS4wLjIwLWpyZTExLXNsaW0KKworIyBSZW1vdmUgZXhpc3RpbmcgVG9tY2F0IHdlYmFwcHMKKworUlVOIHJtIC1yZiAvdXNyL2xvY2FsL3RvbWNhdC93ZWJhcHBzLyoKKworIyBBZGQgUm9sbGVyIGNvbmZpZ3VyYXRpb24gdG8gZW52aXJvbm1lbnQKKworQVJHIFNUT1JBR0VfUk9PVD0vdXNyL2xvY2FsL3RvbWNhdC9kYXRhCitBUkcgREFUQUJBU0VfSkRCQ19EUklWRVJDTEFTUz1vcmcucG9zdGdyZXNxbC5Ecml2ZXIKK0FSRyBEQVRBQkFTRV9KREJDX0NPTk5FQ1RJT05VUkw9amRiYzpwb3N0Z3Jlc3FsOi8vcG9zdGdyZXNxbC9yb2xsZXJkYgorQVJHIERBVEFCQVNFX0pEQkNfVVNFUk5BTUU9c2NvdHQKK0FSRyBEQVRBQkFTRV9KREJDX1BBU1NXT1JEPXRpZ2VyCitBUkcgREFUQUJBU0VfSE9TVD1wb3N0Z3Jlc3FsOjU0MzQKKworRU5WIFNUT1JBR0VfUk9PVCAke1NUT1JBR0VfUk9PVH0KK0VOViBEQVRBQkFTRV9KREJDX0RSSVZFUkNMQVNTICR7REFUQUJBU0VfSkRCQ19EUklWRVJDTEFTU30KK0VOViBEQVRBQkFTRV9KREJDX0NPTk5FQ1RJT05VUkwgJHtEQVRBQkFTRV9KREJDX0NPTk5FQ1RJT05VUkx9CitFTlYgREFUQUJBU0VfSkRCQ19VU0VSTkFNRSAke0RBVEFCQVNFX0pEQkNfVVNFUk5BTUV9CitFTlYgREFUQUJBU0VfSkRCQ19QQVNTV09SRCAke0RBVEFCQVNFX0pEQkNfUEFTU1dPUkR9CitFTlYgREFUQUJBU0VfSE9TVCAke0RBVEFCQVNFX0hPU1R9CisKKyMgaW5zdGFsbCBSb2xsZXIgV0FSIGFzIFJPT1Qud2FyLCBjcmVhdGUgZGF0YSBkaXJzCisKK1dPUktESVIgL3Vzci9sb2NhbC9yb2xsZXIKK0NPUFkgLS1mcm9tPWJ1aWxkZXIgL3Byb2plY3QvYXBwL3RhcmdldC9yb2xsZXIud2FyIC91c3IvbG9jYWwvdG9tY2F0L3dlYmFwcHMvUk9PVC53YXIKK1JVTiBta2RpciAtcCBkYXRhL21lZGlhZmlsZXMgZGF0YS9zZWFyY2hpbmRleAorCisjIGRvd25sb2FkIFBvc3RncmVTUUwgYW5kIE15U1FMIGRyaXZlcnMgcGx1cyBNYWlsIGFuZCBBY3RpdmF0aW9uIEpBUnMKKworV09SS0RJUiAvdXNyL2xvY2FsL3RvbWNhdC9saWIKK1JVTiBhcHQtZ2V0IHVwZGF0ZSAmJiBhcHQtZ2V0IGluc3RhbGwgLXkgd2dldAorUlVOIHdnZXQgLU8gcG9zdGdyZXNxbC5qYXIgaHR0cHM6Ly9qZGJjLnBvc3RncmVzcWwub3JnL2Rvd25sb2FkL3Bvc3RncmVzcWwtOS40LTEyMDIuamRiYzQuamFyCitSVU4gd2dldCBodHRwOi8vcmVwbzIubWF2ZW4ub3JnL21hdmVuMi9qYXZheC9tYWlsL21haWwvMS40LjEvbWFpbC0xLjQuMS5qYXIKK1JVTiB3Z2V0IGh0dHA6Ly9yZXBvMi5tYXZlbi5vcmcvbWF2ZW4yL2phdmF4L2FjdGl2YXRpb24vYWN0aXZhdGlvbi8xLjEuMS9hY3RpdmF0aW9uLTEuMS4xLmphcgorCisjIEFkZCBSb2xsZXIgZW50cnktcG9pbnQgYW5kIGdvIQorCitDT1BZIC0tZnJvbT1idWlsZGVyIC9wcm9qZWN0L2RvY2tlci9lbnRyeS1wb2ludC5zaCAvdXNyL2xvY2FsL3RvbWNhdC9iaW4KK0NPUFkgLS1mcm9tPWJ1aWxkZXIgL3Byb2plY3QvZG9ja2VyL3dhaXQtZm9yLWl0LnNoIC91c3IvbG9jYWwvdG9tY2F0L2JpbgorUlVOIGNoZ3JwIC1SIDAgL3Vzci9sb2NhbC90b21jYXQKK1JVTiBjaG1vZCAtUiBnK3J3IC91c3IvbG9jYWwvdG9tY2F0CisKK1dPUktESVIgL3Vzci9sb2NhbC90b21jYXQKK0VOVFJZUE9JTlQgL3Vzci9sb2NhbC90b21jYXQvYmluL2VudHJ5LXBvaW50LnNoClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTElDRU5TRS50eHQgYi9MSUNFTlNFLnR4dAppbmRleCBkZDdmYjlkLi4xZGVhNWM4IDEwMDY0NAotLS0gYS9MSUNFTlNFLnR4dAorKysgYi9MSUNFTlNFLnR4dApAQCAtMzQwLDMgKzM0MCwzMCBAQAogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgogVEhFIFNPRlRXQVJFLgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBwcm9kdWN0IGJ1bmRsZXMgU3VtbWVybm90ZSBXWVNJV1lHIGVkaXRvciwgd2hpY2ggaXMgYXZhaWxhYmxlIHVuZGVyIGEKKyJNSVQiIGxpY2Vuc2UuIEZvciBkZXRhaWxzLCBzZWUKKy93ZWJqYXJzL3N1bW1lcm5vdGUvMC44LjExL2Rpc3Qvc3VtbWVybm90ZS5taW4uanMKK2h0dHBzOi8vZ2l0aHViLmNvbS9zdW1tZXJub3RlL3N1bW1lcm5vdGUvYmxvYi9kZXZlbG9wL0xJQ0VOU0UKKworVGhlIE1JVCBMaWNlbnNlIChNSVQpCisKK0NvcHlyaWdodCAoYykgMjAxNX4gU3VtbWVybm90ZSBUZWFtIChodHRwczovL2dpdGh1Yi5jb20vb3Jncy9zdW1tZXJub3RlL3Blb3BsZSkKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCitUSEUgU09GVFdBUkUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKaW5kZXggMDk1MzEwMi4uOGI1MzkwMCAxMDA2NDQKLS0tIGEvUkVBRE1FLm1kCisrKyBiL1JFQURNRS5tZApAQCAtMSw3ICsxLDcgQEAKKwogIyBBcGFjaGUgUm9sbGVyCiAKLVtBcGFjaGUgUm9sbGVyXShodHRwOi8vcm9sbGVyLmFwYWNoZS5vcmcpIGlzIGEgSmF2YS1iYXNlZCwgZnVsbC1mZWF0dXJlZCwKLW11bHRpLXVzZXIgYW5kIGdyb3VwLWJsb2cgc2VydmVyIHN1aXRhYmxlIGZvciBibG9nIHNpdGVzIGxhcmdlIGFuZCBzbWFsbC4KK1tBcGFjaGUgUm9sbGVyXShodHRwOi8vcm9sbGVyLmFwYWNoZS5vcmcpIGlzIGEgSmF2YS1iYXNlZCwgZnVsbC1mZWF0dXJlZCwgbXVsdGktdXNlciBhbmQgZ3JvdXAtYmxvZyBzZXJ2ZXIgc3VpdGFibGUgZm9yIGJsb2cgc2l0ZXMgbGFyZ2UgYW5kIHNtYWxsLgogUm9sbGVyIGlzIHR5cGljYWxseSBydW4gd2l0aCBBcGFjaGUgVG9tY2F0IGFuZCBNeVNRTC4KIFJvbGxlciBpcyBtYWRlIHVwIG9mIHRoZSBmb2xsb3dpbmcgTWF2ZW4gcHJvamVjdHM6CiAKQEAgLTEzLDIxICsxMywyMSBAQAogCiAjIyBEb2N1bWVudGF0aW9uCiAKLVRoZSBSb2xsZXIgSW5zdGFsbCwgVXNlciBhbmQgVGVtcGxhdGUgR3VpZGVzIGFyZSBhdmFpbGFibGUgaW4gT0RUIGZvcm1hdAotKGZvciBPcGVuT2ZmaWNlIG9yIExpYnJhT2ZmaWNlKToKK1RoZSBSb2xsZXIgSW5zdGFsbCwgVXNlciBhbmQgVGVtcGxhdGUgR3VpZGVzIGFyZSBhdmFpbGFibGUgaW4gT0RUIGZvcm1hdCAoZm9yIE9wZW5PZmZpY2Ugb3IgTGlicmFPZmZpY2UpOgogCi0qIGh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvcm9sbGVyL3RyZWUvbWFzdGVyL2RvY3MKKyogPGh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvcm9sbGVyL3RyZWUvbWFzdGVyL2RvY3M+CiAKICMjIEZvciBtb3JlIGluZm9ybWF0aW9uCiAKIEhpdCB0aGUgUm9sbGVyIENvbmZsdWVuY2Ugd2lraToKIAotKiBIb3cgdG8gYnVpbGQgYW5kIHJ1biBSb2xsZXI6IGh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL3gvRU00Ci0qIEhvdyB0byBjb250cmlidXRlIHRvIFJvbGxlcjogaHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UveC8yaHNCCi0qIEhvdyB0byBtYWtlIGEgcmVsZWFzZSBvZiBSb2xsZXI6IGh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL3gvZ3ljQgotKiBPdGhlciBkZXZlbG9wZXIgcmVzb3VyY2VzOiBodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS94L0Q4NAorKiBIb3cgdG8gYnVpbGQgYW5kIHJ1biBSb2xsZXI6IDxodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS94L0VNND4KKyogSG93IHRvIGNvbnRyaWJ1dGUgdG8gUm9sbGVyOiA8aHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UveC8yaHNCPgorKiBIb3cgdG8gbWFrZSBhIHJlbGVhc2Ugb2YgUm9sbGVyOiA8aHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UveC9neWNCPgorKiBPdGhlciBkZXZlbG9wZXIgcmVzb3VyY2VzOiA8aHR0cHM6Ly9jd2lraS5hcGFjaGUub3JnL2NvbmZsdWVuY2UveC9EODQ+CiAKLSMjIFF1aWNrIHN0YXJ0CisKKyMjIFF1aWNrIHN0YXJ0OiBSdW5uaW5nIHZpYSBNYXZlbgogCiBBc3N1bWluZyB5b3UndmUgZ290IGEgVU5JWCBzaGVsbCwgSmF2YSwgTWF2ZW4gYW5kIEdpdDoKIApAQCAtNDUsMTAgKzQ1LDIxIEBACiAgICAgJCBjZCBhcHAKICAgICAkIG12biBqZXR0eTpydW4KIAotQnJvd3NlIHRvIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yb2xsZXIKK09uY2UgSmV0dHkgaXMgdXAgYW5kIHJ1bm5pbmcgYnJvd3NlIHRvIDxodHRwOi8vbG9jYWxob3N0OjgwODAvcm9sbGVyPiB0byB0cnkgdG8gUm9sbGVyLgogCiAKKyMjIFF1aWNrIHN0YXJ0OiBydW5uaW5nIHZpYSBEb2NrZXIKIAorQXNzdW1pbmcgeW91J3ZlIGdvdCBEb2NrZXIsIGhlcmUncyBob3cgeW91IGNhbiBydW4gUm9sbGVyIGZvciBkZW1vIHB1cnBvc2VzLgogCitHZXQgdGhlIGNvZGU6CiAKKyAgICAkIGdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vYXBhY2hlL3JvbGxlci5naXQKKworUnVuIERvY2tlciBDb21wb3NlIHRvIGJ1aWxkIGFuZCBsYXVuY2ggUm9sbGVyIGFsb25nIHdpdGggYSBQb3N0Z3JlU1FMIGRhdGFiYXNlOgorCisgICAgJCBjZCByb2xsZXIKKyAgICAkIGRvY2tlci1jb21wb3NlIHVwCisgICAgCitJdCB3aWxsIHRha2UgYSB3aGlsZSB0byBidWlsZCB0aGUgRG9ja2VyIGltYWdlLiBPbmNlIGl0J3MgZG9uZSBicm93c2UgdG8gPGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9yb2xsZXI+IHRvIHRyeSBSb2xsZXIuCiAKZGlmZiAtLWdpdCBhL2FwcC9wb20ueG1sIGIvYXBwL3BvbS54bWwKaW5kZXggYjZjOWQ1Ny4uZTM4MjU2MCAxMDA2NDQKLS0tIGEvYXBwL3BvbS54bWwKKysrIGIvYXBwL3BvbS54bWwKQEAgLTI0LDcgKzI0LDcgQEAKICAgICA8cGFyZW50PgogICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnJvbGxlcjwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+cm9sbGVyLXByb2plY3Q8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjUuMi4zPC92ZXJzaW9uPgorICAgICAgICA8dmVyc2lvbj42LjAuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CiAgICAgPC9wYXJlbnQ+CiAKQEAgLTMzLDE3ICszMywyMCBAQAogICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CiAKICAgICA8cHJvcGVydGllcz4KLSAgICAgICAgPGFuZ3VsYXIudmVyc2lvbj4xLjIuMjk8L2FuZ3VsYXIudmVyc2lvbj4KLSAgICAgICAgPGFudC52ZXJzaW9uPjEuMTAuMTwvYW50LnZlcnNpb24+CisgICAgICAgIDxzZXJ2bGV0LnZlcnNpb24+NC4wLjE8L3NlcnZsZXQudmVyc2lvbj4KKyAgICAgICAgPGpzcC1hcGkudmVyc2lvbj4yLjI8L2pzcC1hcGkudmVyc2lvbj4KKyAgICAgICAgPGphdmEtYWN0aXZhdGlvbi52ZXJzaW9uPjEuMi4wPC9qYXZhLWFjdGl2YXRpb24udmVyc2lvbj4KKyAgICAgICAgPGphdmEtbWFpbC52ZXJzaW9uPjEuNC43PC9qYXZhLW1haWwudmVyc2lvbj4KKyAgICAgICAgPGpzdGwudmVyc2lvbj4xLjI8L2pzdGwudmVyc2lvbj4KKworICAgICAgICA8YW5ndWxhci52ZXJzaW9uPjEuNy44PC9hbmd1bGFyLnZlcnNpb24+CisgICAgICAgIDxhbnQudmVyc2lvbj4xLjEwLjU8L2FudC52ZXJzaW9uPgogICAgICAgICA8Y29tbW9ucy12YWxpZGF0b3IudmVyc2lvbj4xLjY8L2NvbW1vbnMtdmFsaWRhdG9yLnZlcnNpb24+CiAgICAgICAgIDxjb21tb25zLWJlYW51dGlscy52ZXJzaW9uPjEuOS4zPC9jb21tb25zLWJlYW51dGlscy52ZXJzaW9uPgogICAgICAgICA8Y29tbW9ucy1odHRwY2xpZW50LnZlcnNpb24+My4xPC9jb21tb25zLWh0dHBjbGllbnQudmVyc2lvbj4KLSAgICAgICAgPGNvbW1vbnMtY29kZWMudmVyc2lvbj4xLjEwPC9jb21tb25zLWNvZGVjLnZlcnNpb24+Ci0gICAgICAgIDxlY2xpcHNlLWxpbmsudmVyc2lvbj4yLjUuMjwvZWNsaXBzZS1saW5rLnZlcnNpb24+Ci0gICAgICAgIDxndWljZS52ZXJzaW9uPjQuMS4wPC9ndWljZS52ZXJzaW9uPgotICAgICAgICA8amF2YS1tYWlsLnZlcnNpb24+MS40Ljc8L2phdmEtbWFpbC52ZXJzaW9uPgotICAgICAgICA8anNwLWFwaS52ZXJzaW9uPjIuMjwvanNwLWFwaS52ZXJzaW9uPgotICAgICAgICA8anN0bC52ZXJzaW9uPjEuMjwvanN0bC52ZXJzaW9uPgorICAgICAgICA8Y29tbW9ucy1jb2RlYy52ZXJzaW9uPjEuMTI8L2NvbW1vbnMtY29kZWMudmVyc2lvbj4KKyAgICAgICAgPGVjbGlwc2UtbGluay52ZXJzaW9uPjIuNy40PC9lY2xpcHNlLWxpbmsudmVyc2lvbj4KKyAgICAgICAgPGd1aWNlLnZlcnNpb24+NC4yLjI8L2d1aWNlLnZlcnNpb24+CiAgICAgICAgIDxsb2c0ai52ZXJzaW9uPjEuMi4xNzwvbG9nNGoudmVyc2lvbj4KICAgICAgICAgPGxvZzRqMi52ZXJzaW9uPjIuMTAuMDwvbG9nNGoyLnZlcnNpb24+CiAgICAgICAgIDxsdWNlbmUudmVyc2lvbj40LjEwLjQ8L2x1Y2VuZS52ZXJzaW9uPgpAQCAtNTEsMjIgKzU0LDIxIEBACiAgICAgICAgIDxtYXZlbi13YXIudmVyc2lvbj4zLjEuMDwvbWF2ZW4td2FyLnZlcnNpb24+CiAgICAgICAgIDxtYXZlbi1zdXJlZmlyZS52ZXJzaW9uPjIuMTc8L21hdmVuLXN1cmVmaXJlLnZlcnNpb24+CiAgICAgICAgIDxtYXZlbi1hbnRydW4udmVyc2lvbj4xLjBiMzwvbWF2ZW4tYW50cnVuLnZlcnNpb24+Ci0gICAgICAgIDxyb21lLnZlcnNpb24+MS43LjQ8L3JvbWUudmVyc2lvbj4KLSAgICAgICAgPHNlcnZsZXQudmVyc2lvbj4zLjAuMTwvc2VydmxldC52ZXJzaW9uPgotICAgICAgICA8c2xmNGoudmVyc2lvbj4xLjcuMjU8L3NsZjRqLnZlcnNpb24+CisgICAgICAgIDxyb21lLnZlcnNpb24+MS4xMi4wPC9yb21lLnZlcnNpb24+CisgICAgICAgIDxzbGY0ai52ZXJzaW9uPjEuNy4yNjwvc2xmNGoudmVyc2lvbj4KICAgICAgICAgPHNwcmluZy52ZXJzaW9uPjQuMS40LlJFTEVBU0U8L3NwcmluZy52ZXJzaW9uPgogICAgICAgICA8c3ByaW5nLnNlY3VyaXR5LnZlcnNpb24+My4yLjUuUkVMRUFTRTwvc3ByaW5nLnNlY3VyaXR5LnZlcnNpb24+Ci0gICAgICAgIDxzdHJ1dHMudmVyc2lvbj4yLjUuMTc8L3N0cnV0cy52ZXJzaW9uPgorICAgICAgICA8c3RydXRzLnZlcnNpb24+Mi41LjIwPC9zdHJ1dHMudmVyc2lvbj4KICAgICAgICAgPHZlbG9jaXR5LnZlcnNpb24+MS43PC92ZWxvY2l0eS52ZXJzaW9uPgogICAgICAgICA8d2ViamFycy52ZXJzaW9uPjEuNTwvd2ViamFycy52ZXJzaW9uPgogICAgICAgICA8d3MtY29tbW9ucy11dGlsLnZlcnNpb24+MS4wLjI8L3dzLWNvbW1vbnMtdXRpbC52ZXJzaW9uPgogICAgICAgICA8eG1sLXNlY3VyaXR5LnZlcnNpb24+MS4zLjA8L3htbC1zZWN1cml0eS52ZXJzaW9uPgogICAgICAgICA8eG1scnBjLXZlcnNpb24+My4xLjM8L3htbHJwYy12ZXJzaW9uPgorCiAgICAgPC9wcm9wZXJ0aWVzPgogCiAgICAgPGRlcGVuZGVuY2llcz4KIAotCiAgICAgICAgIDwhLS0gSmF2YSBFRSBkZXBzIC0tPgogCiAgICAgICAgIDxkZXBlbmRlbmN5PgpAQCAtOTQsMTIgKzk2LDE4IEBACiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYWlsPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+JHtqYXZhLW1haWwudmVyc2lvbn08L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgotICAgICAgICAgICAgPGV4Y2x1c2lvbnM+Ci0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXguYWN0aXZhdGlvbjwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZhdGlvbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KLSAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLnN1bi5hY3RpdmF0aW9uPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+amF2YXguYWN0aXZhdGlvbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7amF2YS1hY3RpdmF0aW9uLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC54bWwuYmluZDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpheGItYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4zLjE8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAogICAgICAgICA8IS0tIEVjbGlwc2VsaW5rIEpQQSBpcyB0aGUgZGVmYXVsdCBKUEEgaW1wbGVtZW50YXRpb24gdXNlZCBieQpAQCAtMTA3LDEyICsxMTUsMTEgQEAKICAgICAgICAgICAgICB0byB1c2UgdGhhdCBzdGFjayBpbnN0ZWFkLgogCiAgICAgICAgICAgICAgTG9nZ2luZywgb3RoZXIgc3BlY2lhbCBjb25maWd1cmF0aW9uIGR1cmluZyBKVW5pdCB0ZXN0cyBjYW4gYmUKLSAgICAgICAgICAgICBwbGFjZWQgaW4gdGhlIHNyYy90ZXN0L3Jlc291cmNlcy9yb2xsZXItY3VzdG9tLnByb3BlcnRpZXMKLSAgICAgICAgICAgICBmaWxlLgorICAgICAgICAgICAgIHBsYWNlZCBpbiB0aGUgc3JjL3Rlc3QvcmVzb3VyY2VzL3JvbGxlci1jdXN0b20ucHJvcGVydGllcyBmaWxlLgogICAgICAgICAgLS0+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UucGVyc2lzdGVuY2U8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5lY2xpcHNlbGluazwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLnBlcnNpc3RlbmNlLmpwYTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPiR7ZWNsaXBzZS1saW5rLnZlcnNpb259PC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAKQEAgLTE1OCw5ICsxNjUsNDEgQEAKICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudmVsb2NpdHk8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD52ZWxvY2l0eTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPiR7dmVsb2NpdHkudmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICA8ZXhjbHVzaW9ucz4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWNvbGxlY3Rpb25zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWNvbGxlY3Rpb25zPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgPC9leGNsdXNpb25zPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIAorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtY29sbGVjdGlvbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWNvbGxlY3Rpb25zPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+My4yLjI8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgCisgICAgICAgIDwhLS0gZXhwbGljaXRseSBhZGRpbmcgbmV3ZXN0IGFzbSBsaWIgdG8gaW1wcm92ZSBjb21wYXRpYmlsaXR5IHdpdGggbGF0ZXN0IEpES3MgLS0+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub3cyLmFzbTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmFzbTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjcuMDwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogCiAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm93Mi5hc208L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hc20tY29tbW9uczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjcuMDwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm93Mi5hc208L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hc20tdHJlZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjcuMDwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAKKyAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnN0cnV0czwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnN0cnV0czItY29yZTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPiR7c3RydXRzLnZlcnNpb259PC92ZXJzaW9uPgpAQCAtMTg1LDYgKzIyNCwzNiBAQAogICAgICAgICA8L2RlcGVuZGVuY3k+CiAKICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcud2ViamFyczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmJvb3RzdHJhcDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjMuMy43PC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcud2ViamFyczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmNsaXBib2FyZC5qczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC4wPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcud2ViamFyczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpxdWVyeTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjMuMy4xPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcud2ViamFyczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpxdWVyeS11aTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMTIuMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLndlYmphcnMuYm93ZXI8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zdW1tZXJub3RlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MC44LjExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmx1Y2VuZTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmx1Y2VuZS1hbmFseXplcnMtY29tbW9uPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHNjb3BlPmNvbXBpbGU8L3Njb3BlPgpAQCAtMzU3LDYgKzQyNiwxMiBAQAogICAgICAgICA8L2RlcGVuZGVuY3k+CiAKICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20uamdlcHBlcnQuc3RydXRzMi5ib290c3RyYXA8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zdHJ1dHMyLWJvb3RzdHJhcC1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjUuMjwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLnJvbWV0b29sczwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnJvbWUtZmV0Y2hlcjwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPiR7cm9tZS52ZXJzaW9ufTwvdmVyc2lvbj4KQEAgLTM4NywyNCArNDYyLDE3IEBACiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAogICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy53ZWJqYXJzLm5wbTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmFuZ3VsYXI8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4ke2FuZ3VsYXIudmVyc2lvbn08L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm5ldC5vYXV0aC5jb3JlPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+b2F1dGgtcHJvdmlkZXI8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8c2NvcGU+Y29tcGlsZTwvc2NvcGU+CiAgICAgICAgICAgICA8dmVyc2lvbj4ke29hdXRoLWNvcmUudmVyc2lvbn08L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAotCiAgICAgICAgIDwhLS0gVGVzdCBkZXBzIC0tPgogCiAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5qdW5pdC5qdXBpdGVyPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQtanVwaXRlci1lbmdpbmU8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIApAQCAtNTkzLDcgKzY2MSw3IEBACiAKICAgICAgICAgICAgIDxwbHVnaW4+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMTc8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4yMi4wPC92ZXJzaW9uPgogICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgogICAgICAgICAgICAgICAgICAgICA8c3lzdGVtUHJvcGVydGllcz4KICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KQEAgLTYwMSwxNSArNjY5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbHVlPiR7YmFzZWRpcn0vdGFyZ2V0PC92YWx1ZT4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CiAgICAgICAgICAgICAgICAgICAgIDwvc3lzdGVtUHJvcGVydGllcz4KLSAgICAgICAgICAgICAgICAgICAgPCEtLWV4Y2x1ZGVzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovPz8uamF2YTwvZXhjbHVkZT4KLSAgICAgICAgICAgICAgICAgICAgPC9leGNsdWRlcy0tPgogICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgIDwvcGx1Z2luPgogCiAgICAgICAgICAgICA8cGx1Z2luPgogICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFudHJ1bi1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPHZlcnNpb24+MS43PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuODwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmFudC1jb250cmliPC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL1Rlc3RVdGlscy5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL1Rlc3RVdGlscy5qYXZhCmluZGV4IGIzN2FkNzIuLjEyNWQzZjIgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9UZXN0VXRpbHMuamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvVGVzdFV0aWxzLmphdmEKQEAgLTQxMiw4ICs0MTIsNyBAQAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZWFyZG93bldlYmxvZ0VudHJ5KFN0cmluZyBpZCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gbG9va3VwIHRoZSBlbnRyeQotICAgICAgICBXZWJsb2dFbnRyeU1hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKQotICAgICAgICAgICAgICAgIC5nZXRXZWJsb2dFbnRyeU1hbmFnZXIoKTsKKyAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCk7CiAgICAgICAgIFdlYmxvZ0VudHJ5IGVudHJ5ID0gbWdyLmdldFdlYmxvZ0VudHJ5KGlkKTsKIAogICAgICAgICAvLyByZW1vdmUgdGhlIGVudHJ5CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvTWVkaWFGaWxlTWFuYWdlci5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL01lZGlhRmlsZU1hbmFnZXIuamF2YQppbmRleCA3MWE3YmNkLi5lMzQ1ZGRkIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvTWVkaWFGaWxlTWFuYWdlci5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9NZWRpYUZpbGVNYW5hZ2VyLmphdmEKQEAgLTUzLDYgKzUzLDEzIEBACiAgICAgICAgICAgICBSb2xsZXJNZXNzYWdlcyBlcnJvcnMpIHRocm93cyBXZWJsb2dnZXJFeGNlcHRpb247CiAKICAgICAvKioKKyAgICAgKiBDcmVhdGUgdGhlbWUgbWVkaWEgZmlsZS4KKyAgICAgKiBTYW1lIGFzIGNyZWF0ZU1lZGlhRmlsZSgpIGV4Y2VwdCBubyBjaGVja3MgYXJlIGRvbmUgZm9yIHVwbG9hZHMgZGlzYWJsZWQsIGV0Yy4KKyAgICAgKi8KKyAgICB2b2lkIGNyZWF0ZVRoZW1lTWVkaWFGaWxlKFdlYmxvZyB3ZWJsb2csIE1lZGlhRmlsZSBtZWRpYUZpbGUsCisgICAgICAgICAgICBSb2xsZXJNZXNzYWdlcyBlcnJvcnMpIHRocm93cyBXZWJsb2dnZXJFeGNlcHRpb247CisKKyAgICAvKioKICAgICAgKiBVcGRhdGUgbWV0YWRhdGEgZm9yIGEgbWVkaWEgZmlsZQogICAgICAqLwogICAgIHZvaWQgdXBkYXRlTWVkaWFGaWxlKFdlYmxvZyB3ZWJsb2csIE1lZGlhRmlsZSBtZWRpYUZpbGUpCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvV2VibG9nZ2VySW1wbC5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1dlYmxvZ2dlckltcGwuamF2YQppbmRleCA0NzZhZDg5Li5iZTZiZTFhIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvV2VibG9nZ2VySW1wbC5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9XZWJsb2dnZXJJbXBsLmphdmEKQEAgLTE4LDkgKzE4LDYgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3M7CiAKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MucGx1Z2lucy5QbHVnaW5NYW5hZ2VyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LmJ1c2luZXNzLlBsYW5ldE1hbmFnZXI7CkBAIC0yOSw4ICsyNiw5IEBACiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLnBpbmdzLkF1dG9QaW5nTWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MucGluZ3MuUGluZ1F1ZXVlTWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MucGluZ3MuUGluZ1RhcmdldE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLnNlYXJjaC5JbmRleE1hbmFnZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLnBsdWdpbnMuUGx1Z2luTWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MucnVubmFibGUuVGhyZWFkTWFuYWdlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3Muc2VhcmNoLkluZGV4TWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MudGhlbWVzLlRoZW1lTWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuY29uZmlnLlBpbmdDb25maWc7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmNvbmZpZy5XZWJsb2dnZXJDb25maWc7CkBAIC00Myw2ICs0MSw5IEBACiBpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5OwogCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKKwogCiAvKioKICAqIFRoZSBhYnN0cmFjdCB2ZXJzaW9uIG9mIHRoZSBXZWJsb2dnZXIgaW1wbGVtZW50YXRpb24uCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvanBhL0pQQU1lZGlhRmlsZU1hbmFnZXJJbXBsLmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvanBhL0pQQU1lZGlhRmlsZU1hbmFnZXJJbXBsLmphdmEKaW5kZXggYWIzZGM3Yi4uNGViYzA0NiAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL2pwYS9KUEFNZWRpYUZpbGVNYW5hZ2VySW1wbC5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9qcGEvSlBBTWVkaWFGaWxlTWFuYWdlckltcGwuamF2YQpAQCAtMjIxLDYgKzIyMSwyNyBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgcHVibGljIHZvaWQgY3JlYXRlVGhlbWVNZWRpYUZpbGUoV2VibG9nIHdlYmxvZywgTWVkaWFGaWxlIG1lZGlhRmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm9sbGVyTWVzc2FnZXMgZXJyb3JzKSB0aHJvd3MgV2VibG9nZ2VyRXhjZXB0aW9uIHsKKworICAgICAgICBGaWxlQ29udGVudE1hbmFnZXIgY21nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0RmlsZUNvbnRlbnRNYW5hZ2VyKCk7CisgICAgICAgIHN0cmF0ZWd5LnN0b3JlKG1lZGlhRmlsZSk7CisKKyAgICAgICAgLy8gUmVmcmVzaCBhc3NvY2lhdGVkIHBhcmVudCBmb3IgY2hhbmdlcworICAgICAgICByb2xsZXIuZmx1c2goKTsKKyAgICAgICAgc3RyYXRlZ3kucmVmcmVzaChtZWRpYUZpbGUuZ2V0RGlyZWN0b3J5KCkpOworCisgICAgICAgIC8vIHVwZGF0ZSB3ZWJsb2cgbGFzdCBtb2RpZmllZCBkYXRlLiBkYXRlIHVwZGF0ZWQgYnkgc2F2ZVdlYmxvZygpCisgICAgICAgIHJvbGxlci5nZXRXZWJsb2dNYW5hZ2VyKCkuc2F2ZVdlYmxvZyh3ZWJsb2cpOworCisgICAgICAgIGNtZ3Iuc2F2ZUZpbGVDb250ZW50KHdlYmxvZywgbWVkaWFGaWxlLmdldElkKCksCisgICAgICAgICAgICBtZWRpYUZpbGUuZ2V0SW5wdXRTdHJlYW0oKSk7CisKKyAgICAgICAgaWYgKG1lZGlhRmlsZS5pc0ltYWdlRmlsZSgpKSB7CisgICAgICAgICAgICB1cGRhdGVUaHVtYm5haWwobWVkaWFGaWxlKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIHByaXZhdGUgdm9pZCB1cGRhdGVUaHVtYm5haWwoTWVkaWFGaWxlIG1lZGlhRmlsZSkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgRmlsZUNvbnRlbnRNYW5hZ2VyIGNtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvanBhL0pQQVdlYmxvZ0VudHJ5TWFuYWdlckltcGwuamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9qcGEvSlBBV2VibG9nRW50cnlNYW5hZ2VySW1wbC5qYXZhCmluZGV4IDUwMzVmOTMuLjdmZTUxN2QgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9qcGEvSlBBV2VibG9nRW50cnlNYW5hZ2VySW1wbC5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9qcGEvSlBBV2VibG9nRW50cnlNYW5hZ2VySW1wbC5qYXZhCkBAIC0yODgsNyArMjg4LDcgQEAKICAgICAgICAgdGhpcy5lbnRyeUFuY2hvclRvSWRNYXAucmVtb3ZlKGVudHJ5LmdldFdlYnNpdGUoKS5nZXRIYW5kbGUoKSsiOiIrZW50cnkuZ2V0QW5jaG9yKCkpOwogICAgIH0KICAgICAKLSAgICBwdWJsaWMgTGlzdCBnZXROZXh0UHJldkVudHJpZXMoV2VibG9nRW50cnkgY3VycmVudCwgU3RyaW5nIGNhdE5hbWUsCisgICAgcHJpdmF0ZSBMaXN0IGdldE5leHRQcmV2RW50cmllcyhXZWJsb2dFbnRyeSBjdXJyZW50LCBTdHJpbmcgY2F0TmFtZSwKICAgICAgICAgICAgIFN0cmluZyBsb2NhbGUsIGludCBtYXhFbnRyaWVzLCBib29sZWFuIG5leHQpCiAgICAgICAgICAgICB0aHJvd3MgV2VibG9nZ2VyRXhjZXB0aW9uIHsKIApAQCAtNDYyLDEzICs0NjIsNyBAQAogICAgICAgICAgICAgcXVlcnkuc2V0UGFyYW1ldGVyKGkrMSwgcGFyYW1zLmdldChpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICh3ZXNjLmdldE9mZnNldCgpICE9IDApIHsKLSAgICAgICAgICAgIHF1ZXJ5LnNldEZpcnN0UmVzdWx0KHdlc2MuZ2V0T2Zmc2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIGlmICh3ZXNjLmdldE1heFJlc3VsdHMoKSAhPSAtMSkgewotICAgICAgICAgICAgcXVlcnkuc2V0TWF4UmVzdWx0cyh3ZXNjLmdldE1heFJlc3VsdHMoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCisgICAgICAgIHNldEZpcnN0TWF4KCBxdWVyeSwgd2VzYy5nZXRPZmZzZXQoKSwgd2VzYy5nZXRNYXhSZXN1bHRzKCkgKTsKICAgICAgICAgcmV0dXJuIHF1ZXJ5LmdldFJlc3VsdExpc3QoKTsKICAgICB9CiAgICAgCkBAIC02NjYsMTIgKzY2MCw3IEBACiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFR5cGVkUXVlcnk8V2VibG9nRW50cnlDb21tZW50PiBxdWVyeSA9IHN0cmF0ZWd5LmdldER5bmFtaWNRdWVyeShxdWVyeVN0cmluZy50b1N0cmluZygpLCBXZWJsb2dFbnRyeUNvbW1lbnQuY2xhc3MpOwotICAgICAgICBpZiAoY3NjLmdldE9mZnNldCgpICE9IDApIHsKLSAgICAgICAgICAgIHF1ZXJ5LnNldEZpcnN0UmVzdWx0KGNzYy5nZXRPZmZzZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNzYy5nZXRNYXhSZXN1bHRzKCkgIT0gLTEpIHsKLSAgICAgICAgICAgIHF1ZXJ5LnNldE1heFJlc3VsdHMoY3NjLmdldE1heFJlc3VsdHMoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgc2V0Rmlyc3RNYXgoIHF1ZXJ5LCBjc2MuZ2V0T2Zmc2V0KCksIGNzYy5nZXRNYXhSZXN1bHRzKCkpOwogICAgICAgICBmb3IgKGludCBpPTA7IGk8cGFyYW1zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICBxdWVyeS5zZXRQYXJhbWV0ZXIoaSsxLCBwYXJhbXMuZ2V0KGkpKTsKICAgICAgICAgfQpAQCAtNzU4LDcgKzc0Nyw3IEBACiAgICAgICogQGluaGVyaXREb2MKICAgICAgKi8KICAgICBwdWJsaWMgTWFwPERhdGUsIExpc3Q8V2VibG9nRW50cnk+PiBnZXRXZWJsb2dFbnRyeU9iamVjdE1hcChXZWJsb2dFbnRyeVNlYXJjaENyaXRlcmlhIHdlc2MpIHRocm93cyBXZWJsb2dnZXJFeGNlcHRpb24gewotICAgICAgICBUcmVlTWFwPERhdGUsIExpc3Q8V2VibG9nRW50cnk+PiBtYXAgPSBuZXcgVHJlZU1hcDxEYXRlLCBMaXN0PFdlYmxvZ0VudHJ5Pj4oQ29sbGVjdGlvbnMucmV2ZXJzZU9yZGVyKCkpOworICAgICAgICBUcmVlTWFwPERhdGUsIExpc3Q8V2VibG9nRW50cnk+PiBtYXAgPSBuZXcgVHJlZU1hcDw+KENvbGxlY3Rpb25zLnJldmVyc2VPcmRlcigpKTsKIAogICAgICAgICBMaXN0PFdlYmxvZ0VudHJ5PiBlbnRyaWVzID0gZ2V0V2VibG9nRW50cmllcyh3ZXNjKTsKIApAQCAtNzY5LDExICs3NTgsNyBAQAogCiAgICAgICAgIGZvciAoV2VibG9nRW50cnkgZW50cnkgOiBlbnRyaWVzKSB7CiAgICAgICAgICAgICBEYXRlIHNEYXRlID0gRGF0ZVV0aWwuZ2V0Tm9vbk9mRGF5KGVudHJ5LmdldFB1YlRpbWUoKSwgY2FsKTsKLSAgICAgICAgICAgIExpc3Q8V2VibG9nRW50cnk+IGRheUVudHJpZXMgPSBtYXAuZ2V0KHNEYXRlKTsKLSAgICAgICAgICAgIGlmIChkYXlFbnRyaWVzID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBkYXlFbnRyaWVzID0gbmV3IEFycmF5TGlzdDxXZWJsb2dFbnRyeT4oKTsKLSAgICAgICAgICAgICAgICBtYXAucHV0KHNEYXRlLCBkYXlFbnRyaWVzKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIExpc3Q8V2VibG9nRW50cnk+IGRheUVudHJpZXMgPSBtYXAuY29tcHV0ZUlmQWJzZW50KHNEYXRlLCBrIC0+IG5ldyBBcnJheUxpc3Q8PigpKTsKICAgICAgICAgICAgIGRheUVudHJpZXMuYWRkKGVudHJ5KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbWFwOwpAQCAtODQzLDEyICs4MjgsNyBAQAogICAgICAgICAgICAgICAgIHF1ZXJ5LnNldFBhcmFtZXRlcigxLCBlbmQpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChvZmZzZXQgIT0gMCkgewotICAgICAgICAgICAgcXVlcnkuc2V0Rmlyc3RSZXN1bHQob2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAobGVuZ3RoICE9IC0xKSB7Ci0gICAgICAgICAgICBxdWVyeS5zZXRNYXhSZXN1bHRzKGxlbmd0aCk7Ci0gICAgICAgIH0KKyAgICAgICAgc2V0Rmlyc3RNYXgoIHF1ZXJ5LCBvZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgIHF1ZXJ5UmVzdWx0cyA9IHF1ZXJ5LmdldFJlc3VsdExpc3QoKTsKICAgICAgICAgTGlzdDxTdGF0Q291bnQ+IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0PFN0YXRDb3VudD4oKTsKICAgICAgICAgaWYgKHF1ZXJ5UmVzdWx0cyAhPSBudWxsKSB7CkBAIC05NTEsMTIgKzkzMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAiV2VibG9nRW50cnlUYWdBZ2dyZWdhdGUuZ2V0UG9wdWxhclRhZ3NCeVdlYnNpdGVOdWxsIiwgVGFnU3RhdC5jbGFzcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG9mZnNldCAhPSAwKSB7Ci0gICAgICAgICAgICBxdWVyeS5zZXRGaXJzdFJlc3VsdChvZmZzZXQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsaW1pdCAhPSAtMSkgewotICAgICAgICAgICAgcXVlcnkuc2V0TWF4UmVzdWx0cyhsaW1pdCk7Ci0gICAgICAgIH0KKyAgICAgICAgc2V0Rmlyc3RNYXgoIHF1ZXJ5LCBvZmZzZXQsIGxpbWl0KTsKICAgICAgICAgcXVlcnlSZXN1bHRzID0gcXVlcnkuZ2V0UmVzdWx0TGlzdCgpOwogICAgICAgICAKICAgICAgICAgZG91YmxlIG1pbiA9IEludGVnZXIuTUFYX1ZBTFVFOwpAQCAtMTAyOSwxMiArMTAwNCw3IEBACiAgICAgICAgIGZvciAoaW50IGk9MDsgaTxwYXJhbXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIHF1ZXJ5LnNldFBhcmFtZXRlcihpKzEsIHBhcmFtcy5nZXQoaSkpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChvZmZzZXQgIT0gMCkgewotICAgICAgICAgICAgcXVlcnkuc2V0Rmlyc3RSZXN1bHQob2Zmc2V0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAobGltaXQgIT0gLTEpIHsKLSAgICAgICAgICAgIHF1ZXJ5LnNldE1heFJlc3VsdHMobGltaXQpOwotICAgICAgICB9CisgICAgICAgIHNldEZpcnN0TWF4KCBxdWVyeSwgb2Zmc2V0LCBsaW1pdCk7CiAgICAgICAgIHF1ZXJ5UmVzdWx0cyA9IHF1ZXJ5LmdldFJlc3VsdExpc3QoKTsKICAgICAgICAgCiAgICAgICAgIExpc3Q8VGFnU3RhdD4gcmVzdWx0cyA9IG5ldyBBcnJheUxpc3Q8VGFnU3RhdD4oKTsKQEAgLTEyMTQsMjYgKzExODQsMzYgQEAKICAgICB0aHJvd3MgV2VibG9nZ2VyRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIC8vIGZpZ3VyZSBvdXQgc3RhcnQgZGF0ZQotICAgICAgICBDYWxlbmRhciBjYWwgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwotICAgICAgICBjYWwuc2V0VGltZShuZXcgRGF0ZSgpKTsKLSAgICAgICAgY2FsLmFkZChDYWxlbmRhci5EQVRFLCAtMSAqIHNpbmNlRGF5cyk7Ci0gICAgICAgIERhdGUgc3RhcnREYXRlID0gY2FsLmdldFRpbWUoKTsKKyAgICAgICAgRGF0ZSBzdGFydERhdGUgPSBnZXRTdGFydERhdGVOb3coc2luY2VEYXlzKTsKIAotICAgICAgICBUeXBlZFF1ZXJ5PFdlYmxvZ0hpdENvdW50PiBxdWVyeSA9IHN0cmF0ZWd5LmdldE5hbWVkUXVlcnkoCisgICAgICAgIFR5cGVkUXVlcnk8V2VibG9nSGl0Q291bnQ+IHF1ZXJ5OworICAgICAgICBxdWVyeSA9IHN0cmF0ZWd5LmdldE5hbWVkUXVlcnkoCiAgICAgICAgICAgICAgICAgIldlYmxvZ0hpdENvdW50LmdldEJ5V2VibG9nRW5hYmxlZFRydWVBbmRBY3RpdmVUcnVlJkRhaWx5SGl0c0dyZWF0ZXJUaGVuWmVybyZXZWJsb2dMYXN0TW9kaWZpZWRHcmVhdGVyT3JkZXJCeURhaWx5SGl0c0Rlc2MiLAogICAgICAgICAgICAgICAgIFdlYmxvZ0hpdENvdW50LmNsYXNzKTsKICAgICAgICAgcXVlcnkuc2V0UGFyYW1ldGVyKDEsIHN0YXJ0RGF0ZSk7Ci0gICAgICAgIAorICAgICAgICBzZXRGaXJzdE1heCggcXVlcnksIG9mZnNldCwgbGVuZ3RoICk7CisgICAgICAgIHJldHVybiBxdWVyeS5nZXRSZXN1bHRMaXN0KCk7CisgICAgfQorCisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHNldEZpcnN0TWF4KCBRdWVyeSBxdWVyeSwgaW50IG9mZnNldCwgaW50IGxlbmd0aCApICB7CiAgICAgICAgIGlmIChvZmZzZXQgIT0gMCkgewogICAgICAgICAgICAgcXVlcnkuc2V0Rmlyc3RSZXN1bHQob2Zmc2V0KTsKICAgICAgICAgfQogICAgICAgICBpZiAobGVuZ3RoICE9IC0xKSB7CiAgICAgICAgICAgICBxdWVyeS5zZXRNYXhSZXN1bHRzKGxlbmd0aCk7Ci0gICAgICAgIH0gICAgICAgIAotICAgICAgICByZXR1cm4gcXVlcnkuZ2V0UmVzdWx0TGlzdCgpOworICAgICAgICB9CiAgICAgfQotICAgIAotICAgIAorCisKKyAgICBwdWJsaWMgc3RhdGljIERhdGUgZ2V0U3RhcnREYXRlTm93KGludCBzaW5jZURheXMpIHsKKyAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKKyAgICAgICAgY2FsLnNldFRpbWUobmV3IERhdGUoKSk7CisgICAgICAgIGNhbC5hZGQoQ2FsZW5kYXIuREFURSwgLTEgKiBzaW5jZURheXMpOworICAgICAgICByZXR1cm4gY2FsLmdldFRpbWUoKTsKKyAgICB9CisKKwogICAgIC8qKgogICAgICAqIEBpbmhlcml0RG9jCiAgICAgICovCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvanBhL0pQQVdlYmxvZ2dlckltcGwuamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9qcGEvSlBBV2VibG9nZ2VySW1wbC5qYXZhCmluZGV4IGEwNmM0ZGEuLjBjYzAwNWQgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9qcGEvSlBBV2VibG9nZ2VySW1wbC5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9qcGEvSlBBV2VibG9nZ2VySW1wbC5qYXZhCkBAIC0yMSwyMSArMjEsMTIgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci5wbGFuZXQuYnVzaW5lc3MuUGxhbmV0VVJMU3RyYXRlZ3k7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LmJ1c2luZXNzLmZldGNoZXIuRmVlZEZldGNoZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLldlYmxvZ2dlckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuQm9va21hcmtNYW5hZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5GaWxlQ29udGVudE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLk9BdXRoTWFuYWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuTWVkaWFGaWxlTWFuYWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuUHJvcGVydGllc01hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLlVSTFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5XZWJsb2dnZXJJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5Vc2VyTWFuYWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nRW50cnlNYW5hZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5XZWJsb2dNYW5hZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5ydW5uYWJsZS5UaHJlYWRNYW5hZ2VyOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy4qOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5waW5ncy5BdXRvUGluZ01hbmFnZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLnBpbmdzLlBpbmdRdWV1ZU1hbmFnZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLnBpbmdzLlBpbmdUYXJnZXRNYW5hZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5wbHVnaW5zLlBsdWdpbk1hbmFnZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLnJ1bm5hYmxlLlRocmVhZE1hbmFnZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLnNlYXJjaC5JbmRleE1hbmFnZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLnRoZW1lcy5UaGVtZU1hbmFnZXI7CiAKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9zZWFyY2gvSW5kZXhNYW5hZ2VySW1wbC5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL3NlYXJjaC9JbmRleE1hbmFnZXJJbXBsLmphdmEKaW5kZXggNzdiZDhlNi4uZTgzNWM0ZiAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL3NlYXJjaC9JbmRleE1hbmFnZXJJbXBsLmphdmEKKysrIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL3NlYXJjaC9JbmRleE1hbmFnZXJJbXBsLmphdmEKQEAgLTIxLDggKzIxLDExIEBACiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiAKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLlJlYWRXcml0ZUxvY2s7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQubG9ja3MuUmVlbnRyYW50UmVhZFdyaXRlTG9jazsKKworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5iZWFudXRpbHMuQ29uc3RydWN0b3JVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5hbmFseXNpcy5BbmFseXplcjsKQEAgLTM2LDYgKzM5LDcgQEAKIGltcG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5zdG9yZS5GU0RpcmVjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLmx1Y2VuZS5zdG9yZS5JT0NvbnRleHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5sdWNlbmUuc3RvcmUuUkFNRGlyZWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUubHVjZW5lLnV0aWwuVmVyc2lvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuV2VibG9nZ2VyRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5Jbml0aWFsaXphdGlvbkV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyOwpAQCAtOTAsNyArOTQsNyBAQAogCiAgICAgLyoqCiAgICAgICogQ3JlYXRlcyBhIG5ldyBsdWNlbmUgaW5kZXggbWFuYWdlci4gVGhpcyBzaG91bGQgb25seSBiZSBjcmVhdGVkIG9uY2UuCi0gICAgICogQ3JlYXRpbmcgdGhlIGluZGV4IG1hbmFnZXIgbW9yZSB0aGFuIG9uY2Ugd2lsbCBkZWZpbmF0ZWx5IHJlc3VsdCBpbgorICAgICAqIENyZWF0aW5nIHRoZSBpbmRleCBtYW5hZ2VyIG1vcmUgdGhhbiBvbmNlIHdpbGwgZGVmaW5pdGVseSByZXN1bHQgaW4KICAgICAgKiBlcnJvcnMuIFRoZSBwcmVmZXJyZWQgd2F5IG9mIGdldHRpbmcgYW4gaW5kZXggaXMgdGhyb3VnaCB0aGUKICAgICAgKiBSb2xsZXJDb250ZXh0LgogICAgICAqIApAQCAtMjM2LDcgKzI0MCwyNSBAQAogICAgICAqIEByZXR1cm4gQW5hbHl6ZXIgdG8gYmUgdXNlZCBpbiBtYW5pcHVsYXRpbmcgdGhlIGRhdGFiYXNlLgogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgQW5hbHl6ZXIgZ2V0QW5hbHl6ZXIoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RhbmRhcmRBbmFseXplcihGaWVsZENvbnN0YW50cy5MVUNFTkVfVkVSU0lPTik7CisgICAgICAgIHJldHVybiBpbnN0YW50aWF0ZUFuYWx5emVyKEZpZWxkQ29uc3RhbnRzLkxVQ0VORV9WRVJTSU9OKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBBbmFseXplciBpbnN0YW50aWF0ZUFuYWx5emVyKGZpbmFsIFZlcnNpb24gbHVjZW5lVmVyc2lvbikgeworICAgICAgICBmaW5hbCBTdHJpbmcgY2xhc3NOYW1lID0gV2VibG9nZ2VyQ29uZmlnLmdldFByb3BlcnR5KCJsdWNlbmUuYW5hbHl6ZXIuY2xhc3MiKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIENsYXNzPD8+IGNsYXp6ID0gQ2xhc3MuZm9yTmFtZShjbGFzc05hbWUpOworICAgICAgICAgICAgcmV0dXJuIChBbmFseXplcikgQ29uc3RydWN0b3JVdGlscy5pbnZva2VDb25zdHJ1Y3RvcihjbGF6eiwgbHVjZW5lVmVyc2lvbik7CisgICAgICAgIH0gY2F0Y2ggKGZpbmFsIENsYXNzTm90Rm91bmRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgbUxvZ2dlci5lcnJvcigiZmFpbGVkIHRvIGxvb2t1cCBhbmFseXplciBjbGFzczogIiArIGNsYXNzTmFtZSwgZSk7CisgICAgICAgICAgICByZXR1cm4gaW5zdGFudGlhdGVEZWZhdWx0QW5hbHl6ZXIobHVjZW5lVmVyc2lvbik7CisgICAgICAgIH0gY2F0Y2ggKGZpbmFsIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiB8IEluc3RhbnRpYXRpb25FeGNlcHRpb24gfCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIHwgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBtTG9nZ2VyLmVycm9yKCJmYWlsZWQgdG8gaW5zdGFudGlhdGUgYW5hbHl6ZXI6ICIgKyBjbGFzc05hbWUsIGUpOworICAgICAgICAgICAgcmV0dXJuIGluc3RhbnRpYXRlRGVmYXVsdEFuYWx5emVyKGx1Y2VuZVZlcnNpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgQW5hbHl6ZXIgaW5zdGFudGlhdGVEZWZhdWx0QW5hbHl6ZXIoZmluYWwgVmVyc2lvbiBsdWNlbmVWZXJzaW9uKSB7CisgICAgICAgIHJldHVybiBuZXcgU3RhbmRhcmRBbmFseXplcihsdWNlbmVWZXJzaW9uKTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgc2NoZWR1bGVJbmRleE9wZXJhdGlvbihmaW5hbCBJbmRleE9wZXJhdGlvbiBvcCkgewpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL3NlYXJjaC9vcGVyYXRpb25zL0luZGV4T3BlcmF0aW9uLmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3Mvc2VhcmNoL29wZXJhdGlvbnMvSW5kZXhPcGVyYXRpb24uamF2YQppbmRleCBjOTM3OTc4Li5hODUxMzI3IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3Mvc2VhcmNoL29wZXJhdGlvbnMvSW5kZXhPcGVyYXRpb24uamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3Mvc2VhcmNoL29wZXJhdGlvbnMvSW5kZXhPcGVyYXRpb24uamF2YQpAQCAtMTY5LDkgKzE2OSw5IEBACiAgICAgcHJvdGVjdGVkIEluZGV4V3JpdGVyIGJlZ2luV3JpdGluZygpIHsKICAgICAgICAgdHJ5IHsKIAotICAgICAgICAgICAgLy8gTGltaXQgdG8gMTAwMCB0b2tlbnMuCiAgICAgICAgICAgICBMaW1pdFRva2VuQ291bnRBbmFseXplciBhbmFseXplciA9IG5ldyBMaW1pdFRva2VuQ291bnRBbmFseXplcigKLSAgICAgICAgICAgICAgICAgICAgSW5kZXhNYW5hZ2VySW1wbC5nZXRBbmFseXplcigpLCAxMDAwKTsKKyAgICAgICAgICAgICAgICAgICAgSW5kZXhNYW5hZ2VySW1wbC5nZXRBbmFseXplcigpLAorICAgICAgICAgICAgICAgICAgICBXZWJsb2dnZXJDb25maWcuZ2V0SW50UHJvcGVydHkoImx1Y2VuZS5hbmFseXplci5tYXhUb2tlbkNvdW50IikpOwogCiAgICAgICAgICAgICBJbmRleFdyaXRlckNvbmZpZyBjb25maWcgPSBuZXcgSW5kZXhXcml0ZXJDb25maWcoCiAgICAgICAgICAgICAgICAgICAgIEZpZWxkQ29uc3RhbnRzLkxVQ0VORV9WRVJTSU9OLCBhbmFseXplcik7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvdGhlbWVzL1NoYXJlZFRoZW1lRnJvbURpci5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL3RoZW1lcy9TaGFyZWRUaGVtZUZyb21EaXIuamF2YQppbmRleCAwNjFmMTdiLi5jYzg3MmQxIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvdGhlbWVzL1NoYXJlZFRoZW1lRnJvbURpci5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy90aGVtZXMvU2hhcmVkVGhlbWVGcm9tRGlyLmphdmEKQEAgLTE5NCw4ICsxOTQsNyBAQAogICAgICAgICBzZXRFbmFibGVkKHRydWUpOwogCiAgICAgICAgIC8vIGxvYWQgcmVzb3VyY2UgcmVwcmVzZW50aW5nIHByZXZpZXcgaW1hZ2UKLSAgICAgICAgRmlsZSBwcmV2aWV3RmlsZSA9IG5ldyBGaWxlKHRoaXMudGhlbWVEaXIgKyBGaWxlLnNlcGFyYXRvcgotICAgICAgICAgICAgICAgICsgdGhlbWVNZXRhZGF0YS5nZXRQcmV2aWV3SW1hZ2UoKSk7CisgICAgICAgIEZpbGUgcHJldmlld0ZpbGUgPSBuZXcgRmlsZSh0aGlzLnRoZW1lRGlyICsgRmlsZS5zZXBhcmF0b3IgKyB0aGVtZU1ldGFkYXRhLmdldFByZXZpZXdJbWFnZSgpKTsKICAgICAgICAgaWYgKCFwcmV2aWV3RmlsZS5leGlzdHMoKSB8fCAhcHJldmlld0ZpbGUuY2FuUmVhZCgpKSB7CiAgICAgICAgICAgICBsb2cud2FybigiQ291bGRuJ3QgcmVhZCB0aGVtZSBbIiArIHRoaXMuZ2V0TmFtZSgpCiAgICAgICAgICAgICAgICAgICAgICsgIl0gcHJldmlldyBpbWFnZSBmaWxlIFsiCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvdGhlbWVzL1RoZW1lTWFuYWdlckltcGwuamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy90aGVtZXMvVGhlbWVNYW5hZ2VySW1wbC5qYXZhCmluZGV4IGVkNWY2YTkuLmE5MGVjMTAgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy90aGVtZXMvVGhlbWVNYW5hZ2VySW1wbC5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy90aGVtZXMvVGhlbWVNYW5hZ2VySW1wbC5qYXZhCkBAIC0xNTcsOCArMTU3LDcgQEAKIAogCQkJLy8gb3RoZXJ3aXNlIHdlIGFyZSByZXR1cm5pbmcgYSBXZWJsb2dTaGFyZWRUaGVtZQogCQl9IGVsc2UgewotCQkJU2hhcmVkVGhlbWUgc3RhdGljVGhlbWUgPSAoU2hhcmVkVGhlbWUpIHRoaXMudGhlbWVzLmdldCh3ZWJsb2cKLQkJCQkJLmdldEVkaXRvclRoZW1lKCkpOworCQkJU2hhcmVkVGhlbWUgc3RhdGljVGhlbWUgPSAoU2hhcmVkVGhlbWUpIHRoaXMudGhlbWVzLmdldCh3ZWJsb2cuZ2V0RWRpdG9yVGhlbWUoKSk7CiAJCQlpZiAoc3RhdGljVGhlbWUgIT0gbnVsbCkgewogCQkJCXdlYmxvZ1RoZW1lID0gbmV3IFdlYmxvZ1NoYXJlZFRoZW1lKHdlYmxvZywgc3RhdGljVGhlbWUpOwogCQkJfSBlbHNlIHsKQEAgLTMxNywxOSArMzE2LDE1IEBACiAJCQkJCWp1c3ROYW1lID0gcmVzb3VyY2VQYXRoOwogCiAJCQkJfSBlbHNlIHsKLQkJCQkJanVzdFBhdGggPSByZXNvdXJjZVBhdGguc3Vic3RyaW5nKDAsCi0JCQkJCQkJcmVzb3VyY2VQYXRoLmxhc3RJbmRleE9mKCcvJykpOworCQkJCQlqdXN0UGF0aCA9IHJlc291cmNlUGF0aC5zdWJzdHJpbmcoMCwgcmVzb3VyY2VQYXRoLmxhc3RJbmRleE9mKCcvJykpOwogCQkJCQlpZiAoIWp1c3RQYXRoLnN0YXJ0c1dpdGgoIi8iKSkgewogICAgICAgICAgICAgICAgICAgICAgICAganVzdFBhdGggPSAiLyIgKyBqdXN0UGF0aDsKICAgICAgICAgICAgICAgICAgICAgfQotCQkJCQlqdXN0TmFtZSA9IHJlc291cmNlUGF0aC5zdWJzdHJpbmcocmVzb3VyY2VQYXRoCi0JCQkJCQkJLmxhc3RJbmRleE9mKCcvJykgKyAxKTsKLQkJCQkJbWRpciA9IGZpbGVNZ3IuZ2V0TWVkaWFGaWxlRGlyZWN0b3J5QnlOYW1lKHdlYmxvZywKLQkJCQkJCQlqdXN0UGF0aCk7CisJCQkJCWp1c3ROYW1lID0gcmVzb3VyY2VQYXRoLnN1YnN0cmluZyhyZXNvdXJjZVBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpOworCQkJCQltZGlyID0gZmlsZU1nci5nZXRNZWRpYUZpbGVEaXJlY3RvcnlCeU5hbWUod2VibG9nLCBqdXN0UGF0aCk7CiAJCQkJCWlmIChtZGlyID09IG51bGwpIHsKIAkJCQkJCWxvZy5kZWJ1ZygiICAgIENyZWF0aW5nIGRpcmVjdG9yeTogIiArIGp1c3RQYXRoKTsKLQkJCQkJCW1kaXIgPSBmaWxlTWdyLmNyZWF0ZU1lZGlhRmlsZURpcmVjdG9yeSh3ZWJsb2csCi0JCQkJCQkJCWp1c3RQYXRoKTsKKwkJCQkJCW1kaXIgPSBmaWxlTWdyLmNyZWF0ZU1lZGlhRmlsZURpcmVjdG9yeSh3ZWJsb2csIGp1c3RQYXRoKTsKIAkJCQkJCXJvbGxlci5mbHVzaCgpOwogCQkJCQl9CiAJCQkJfQpAQCAtMzU0LDcgKzM0OSw3IEBACiAJCQkJbG9nLmRlYnVnKCIgICAgU2F2aW5nIGZpbGU6ICIgKyBqdXN0TmFtZSk7CiAJCQkJbG9nLmRlYnVnKCIgICAgU2F2aW5nIGluIGRpcmVjdG9yeSA9ICIgKyBtZi5nZXREaXJlY3RvcnkoKSk7CiAJCQkJUm9sbGVyTWVzc2FnZXMgZXJyb3JzID0gbmV3IFJvbGxlck1lc3NhZ2VzKCk7Ci0JCQkJZmlsZU1nci5jcmVhdGVNZWRpYUZpbGUod2VibG9nLCBtZiwgZXJyb3JzKTsKKwkJCQlmaWxlTWdyLmNyZWF0ZVRoZW1lTWVkaWFGaWxlKHdlYmxvZywgbWYsIGVycm9ycyk7CiAJCQkJdHJ5IHsKIAkJCQkJcmVzb3VyY2UuZ2V0SW5wdXRTdHJlYW0oKS5jbG9zZSgpOwogCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7CkBAIC0zOTgsOCArMzkzLDcgQEAKICAgICAgICAgICAgIC8vIG5vdyBnbyB0aHJvdWdoIGVhY2ggdGhlbWUgYW5kIGxvYWQgaXQgaW50byBhIFRoZW1lIG9iamVjdAogICAgICAgICAgICAgZm9yIChTdHJpbmcgdGhlbWVOYW1lIDogdGhlbWVuYW1lcykgewogICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIFNoYXJlZFRoZW1lIHRoZW1lID0gbmV3IFNoYXJlZFRoZW1lRnJvbURpcih0aGlzLnRoZW1lRGlyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBGaWxlLnNlcGFyYXRvciArIHRoZW1lTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIFNoYXJlZFRoZW1lIHRoZW1lID0gbmV3IFNoYXJlZFRoZW1lRnJvbURpcih0aGlzLnRoZW1lRGlyICsgRmlsZS5zZXBhcmF0b3IgKyB0aGVtZU5hbWUpOwogICAgICAgICAgICAgICAgICAgICB0aGVtZU1hcC5wdXQodGhlbWUuZ2V0SWQoKSwgdGhlbWUpOwogICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbygiTG9hZGVkIHRoZW1lICciICsgdGhlbWVOYW1lICsgIiciKTsKICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gdW5leHBlY3RlZCkgewpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2NvbmZpZy9ydW50aW1lL0NvbmZpZ0RlZi5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2NvbmZpZy9ydW50aW1lL0NvbmZpZ0RlZi5qYXZhCmluZGV4IDdhMTk0MDguLmY3YjU4M2QgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9jb25maWcvcnVudGltZS9Db25maWdEZWYuamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvY29uZmlnL3J1bnRpbWUvQ29uZmlnRGVmLmphdmEKQEAgLTE1LDI3ICsxNSwyNyBAQAogKiBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCiAqIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KICovCi0vKgotICogQ29uZmlnRGVmLmphdmEKLSAqCi0gKiBDcmVhdGVkIG9uIEp1bmUgNCwgMjAwNSwgMToxMCBQTQotICovCi0KIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmNvbmZpZy5ydW50aW1lOwogCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCiAKIC8qKgogICogUmVwcmVzZW50cyBhIGxvZ2ljIGdyb3VwaW5nIG9mIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzLgogICogRWFjaCBDb25maWdEZWYgbWF5IGNvbnRhaW4gMCBvciBtb3JlIERpc3BsYXlHcm91cHMuCiAgKgorICogQ3JlYXRlZCBvbiBKdW5lIDQsIDIwMDUsIDE6MTAgUE0KICAqIEBhdXRob3IgQWxsZW4gR2lsbGlsYW5kCiAgKi8KIHB1YmxpYyBjbGFzcyBDb25maWdEZWYgewogICAgIAogICAgIHByaXZhdGUgTGlzdDxEaXNwbGF5R3JvdXA+IGRpc3BsYXlHcm91cHMgPSBudWxsOwogICAgIHByaXZhdGUgU3RyaW5nIG5hbWUgPSBudWxsOworCisgICAgTWFwPFN0cmluZywgUHJvcGVydHlEZWY+IHByb3BlcnR5RGVmcyA9IG51bGw7CiAgICAgCiAgICAgCiAgICAgcHVibGljIENvbmZpZ0RlZigpIHsKQEAgLTUzLDggKzUzLDggQEAKICAgICBwdWJsaWMgYm9vbGVhbiByZW1vdmVEaXNwbGF5R3JvdXAoRGlzcGxheUdyb3VwIGdyb3VwKSB7CiAgICAgICAgIHJldHVybiB0aGlzLmRpc3BsYXlHcm91cHMucmVtb3ZlKGdyb3VwKTsKICAgICB9Ci0gICAgCi0gICAgCisKKwogICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KQEAgLTc0LDUgKzc0LDE2IEBACiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KLSAgICAKKworICAgIHB1YmxpYyBQcm9wZXJ0eURlZiBnZXRQcm9wZXJ0eURlZiggU3RyaW5nIG5hbWUgKSB7CisgICAgICAgIGlmICggcHJvcGVydHlEZWZzID09IG51bGwgKSB7CisgICAgICAgICAgICBwcm9wZXJ0eURlZnMgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgICAgICBmb3IgKERpc3BsYXlHcm91cCBkaXNwbGF5R3JvdXAgOiBnZXREaXNwbGF5R3JvdXBzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKFByb3BlcnR5RGVmIHByb3BlcnR5RGVmIDogZGlzcGxheUdyb3VwLmdldFByb3BlcnR5RGVmcygpKSB7CisgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5RGVmcy5wdXQoIHByb3BlcnR5RGVmLmdldE5hbWUoKSwgcHJvcGVydHlEZWYgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHByb3BlcnR5RGVmcy5nZXQoIG5hbWUgKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvY29uZmlnL3J1bnRpbWUvUHJvcGVydHlEZWYuamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9jb25maWcvcnVudGltZS9Qcm9wZXJ0eURlZi5qYXZhCmluZGV4IDYzNmQ3NTQuLjAzMmJkMTUgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9jb25maWcvcnVudGltZS9Qcm9wZXJ0eURlZi5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9jb25maWcvcnVudGltZS9Qcm9wZXJ0eURlZi5qYXZhCkBAIC01MiwxMSArNTIsMTUgQEAKICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgICAgICByZXR1cm4gIlsiK25hbWUrIiwiK2tleSsiLCIrdHlwZSsiLCIrZGVmYXVsdFZhbHVlKyIsIityb3dzKyIsIitjb2xzKyJdIjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZVdpdGhVbmRlcmJhcnMoKSB7CisgICAgICAgIHJldHVybiBuYW1lLnJlcGxhY2UoIi4iLCAiXyIpOworICAgIH0KKwogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvcGxhbmV0L3VpL1BsYW5ldENvbmZpZy5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3BsYW5ldC91aS9QbGFuZXRDb25maWcuamF2YQppbmRleCBhZmE5N2NmLi5kMTEwZTY5IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvcGxhbmV0L3VpL1BsYW5ldENvbmZpZy5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9wbGFuZXQvdWkvUGxhbmV0Q29uZmlnLmphdmEKQEAgLTE4LDkgKzE4LDYgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucGxhbmV0LnVpOwogCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIuUm9sbGVyRXhjZXB0aW9uOwpAQCAtMzMsOSArMzAsMTIgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuY29uZmlnLnJ1bnRpbWUuUnVudGltZUNvbmZpZ0RlZnM7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLkdsb2JhbFBlcm1pc3Npb247CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLlJ1bnRpbWVDb25maWdQcm9wZXJ0eTsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0czIuY29udmVudGlvbi5hbm5vdGF0aW9uLkFsbG93ZWRNZXRob2RzOwogaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzMi5pbnRlcmNlcHRvci5QYXJhbWV0ZXJBd2FyZTsKIAoraW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCiAKIC8qKgogICogUGxhbmV0IENvbmZpZyBBY3Rpb24uCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvcGxhbmV0L3VpL1BsYW5ldEdyb3VwU3Vicy5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3BsYW5ldC91aS9QbGFuZXRHcm91cFN1YnMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjU4NmQwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3BsYW5ldC91aS9QbGFuZXRHcm91cFN1YnMuamF2YQpAQCAtMCwwICsxLDM0MyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1IFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wbGFuZXQudWk7CisKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubGFuZzMuU3RyaW5nVXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIuUm9sbGVyRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5idXNpbmVzcy5QbGFuZXRNYW5hZ2VyOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5idXNpbmVzcy5mZXRjaGVyLkZlZWRGZXRjaGVyOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5idXNpbmVzcy5mZXRjaGVyLkZldGNoZXJFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LnBvam9zLlBsYW5ldDsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci5wbGFuZXQucG9qb3MuUGxhbmV0R3JvdXA7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LnBvam9zLlN1YnNjcmlwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuR2xvYmFsUGVybWlzc2lvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnN0cnV0czIuaW50ZXJjZXB0b3IuU2VydmxldFJlcXVlc3RBd2FyZTsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YS51dGlsLio7CisKKworLyoqCisgKiBNYW5hZ2UgcGxhbmV0IGdyb3VwIHN1YnNjcmlwdGlvbnMsIGRlZmF1bHQgZ3JvdXAgaXMgImFsbCIuCisgKi8KKy8vIFRPRE86IG1ha2UgdGhpcyB3b3JrIEBBbGxvd2VkTWV0aG9kcyh7ImV4ZWN1dGUiLCJzYXZlU3Vic2NyaXB0aW9uIiwic2F2ZUdyb3VwIiwiZGVsZXRlU3Vic2NyaXB0aW9uIn0pCitwdWJsaWMgY2xhc3MgUGxhbmV0R3JvdXBTdWJzIGV4dGVuZHMgUGxhbmV0VUlBY3Rpb24gaW1wbGVtZW50cyBTZXJ2bGV0UmVxdWVzdEF3YXJlIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhQbGFuZXRHcm91cFN1YnMuY2xhc3MpOworCisgICAgLy8gdGhlIHBsYW5ldCBncm91cCB3ZSBhcmUgd29ya2luZyBpbgorICAgIHByaXZhdGUgUGxhbmV0R3JvdXAgZ3JvdXAgPSBudWxsOworCisgICAgLy8gdGhlIHN1YnNjcmlwdGlvbiB0byBkZWFsIHdpdGgKKyAgICBwcml2YXRlIFN0cmluZyBzdWJVcmwgPSBudWxsOworCisgICAgcHJpdmF0ZSBCb29sZWFuIGNyZWF0ZU5ldyA9IG51bGw7CisKKyAgICBwdWJsaWMgUGxhbmV0R3JvdXBTdWJzKCkgeworICAgICAgICB0aGlzLmFjdGlvbk5hbWUgPSAicGxhbmV0R3JvdXBTdWJzIjsKKyAgICAgICAgdGhpcy5kZXNpcmVkTWVudSA9ICJhZG1pbiI7CisgICAgfQorCisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgTGlzdDxTdHJpbmc+IHJlcXVpcmVkR2xvYmFsUGVybWlzc2lvbkFjdGlvbnMoKSB7CisgICAgICAgIHJldHVybiBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KEdsb2JhbFBlcm1pc3Npb24uQURNSU4pOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzV2VibG9nUmVxdWlyZWQoKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldFNlcnZsZXRSZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0KSB7CisgICAgICAgIGlmIChyZXF1ZXN0LmdldFBhcmFtZXRlcigiY3JlYXRlTmV3IikgIT0gbnVsbCkgeworICAgICAgICAgICAgZ3JvdXAgPSBuZXcgUGxhbmV0R3JvdXAoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdyb3VwID0gZ2V0R3JvdXBGcm9tUmVxdWVzdChyZXF1ZXN0LCBnZXRQbGFuZXQoKSk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIHN0YXRpYyBQbGFuZXRHcm91cCBnZXRHcm91cEZyb21SZXF1ZXN0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBQbGFuZXQgcGxhbmV0KSB7CisgICAgICAgIFBsYW5ldE1hbmFnZXIgcG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0UGxhbmV0TWFuYWdlcigpOworICAgICAgICBQbGFuZXRHcm91cCBwbGFuZXRHcm91cCA9IG51bGw7CisgICAgICAgIFN0cmluZyBhY3Rpb24gPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJncm91cC5pZCIpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgZ3JvdXBJZCA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJncm91cC5pZCIpOworICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJsb29raW5nIHVwIHBsYW5ldCBncm91cCBieSBpZDogIiArIGdyb3VwSWQ7CisgICAgICAgICAgICAgICAgcGxhbmV0R3JvdXAgPSBwbWdyLmdldEdyb3VwQnlJZChncm91cElkKTsKKworICAgICAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0LmdldFBhcmFtZXRlcigiZ3JvdXAuaGFuZGxlIikgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIFN0cmluZyBncm91cEhhbmRsZSA9IHJlcXVlc3QuZ2V0UGFyYW1ldGVyKCJncm91cC5oYW5kbGUiKTsKKyAgICAgICAgICAgICAgICBhY3Rpb24gPSAibG9va2luZyB1cCBwbGFuZXQgZ3JvdXAgYnkgaGFuZGxlOiAiICsgZ3JvdXBIYW5kbGU7CisgICAgICAgICAgICAgICAgcGxhbmV0R3JvdXAgPSBwbWdyLmdldEdyb3VwKHBsYW5ldCwgZ3JvdXBIYW5kbGUpOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFjdGlvbiA9ICJnZXR0aW5nIGRlZmF1bHQgZ3JvdXAiOworICAgICAgICAgICAgICAgIHBsYW5ldEdyb3VwID0gcG1nci5nZXRHcm91cChwbGFuZXQsICJhbGwiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yICIgKyBhY3Rpb24sIGV4KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGxhbmV0R3JvdXA7CisgICAgfQorCisgICAgLyoqCisgICAgICogUG9wdWxhdGUgcGFnZSBtb2RlbCBhbmQgZm9yd2FyZCB0byBzdWJzY3JpcHRpb24gcGFnZQorICAgICAqLworICAgIHB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHsKKyAgICAgICAgcmV0dXJuIExJU1Q7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2F2ZSBncm91cC4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHNhdmVHcm91cCgpIHsKKworICAgICAgICB2YWxpZGF0ZUdyb3VwKCk7CisKKyAgICAgICAgaWYgKCFoYXNBY3Rpb25FcnJvcnMoKSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBQbGFuZXRNYW5hZ2VyIHBsYW5ldE1hbmFnZXIgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFBsYW5ldE1hbmFnZXIoKTsKKworICAgICAgICAgICAgICAgIFBsYW5ldEdyb3VwIGV4aXN0aW5nR3JvdXAgPSBwbGFuZXRNYW5hZ2VyLmdldEdyb3VwKGdldFBsYW5ldCgpLCBnZXRHcm91cCgpLmdldEhhbmRsZSgpKTsKKworICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0dyb3VwID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJBZGRpbmcgTmV3IEdyb3VwOiAiICsgZ2V0R3JvdXAoKS5nZXRIYW5kbGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHBsYW5ldE1hbmFnZXIuc2F2ZU5ld1BsYW5ldEdyb3VwKGdldFBsYW5ldCgpLCBnZXRHcm91cCgpKTsKKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiVXBkYXRpbmcgRXhpc3RpbmcgR3JvdXA6ICIgKyBleGlzdGluZ0dyb3VwLmdldEhhbmRsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdHcm91cC5zZXRUaXRsZSggZ2V0R3JvdXAoKS5nZXRUaXRsZSgpICk7CisgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nR3JvdXAuc2V0SGFuZGxlKCBnZXRHcm91cCgpLmdldEhhbmRsZSgpICk7CisgICAgICAgICAgICAgICAgICAgIHBsYW5ldE1hbmFnZXIuc2F2ZUdyb3VwKGV4aXN0aW5nR3JvdXApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZmx1c2goKTsKKyAgICAgICAgICAgICAgICBhZGRNZXNzYWdlKCJwbGFuZXRHcm91cHMuc3VjY2Vzcy5zYXZlZCIpOworCisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIHNhdmluZyBwbGFuZXQgZ3JvdXAiLCBleCk7CisgICAgICAgICAgICAgICAgYWRkRXJyb3IoInBsYW5ldEdyb3Vwcy5lcnJvci5zYXZlZCIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIExJU1Q7CisgICAgfQorCisgICAgLyoqCisgICAgICogVmFsaWRhdGUgcG9zdGVkIGdyb3VwCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlR3JvdXAoKSB7CisKKyAgICAgICAgaWYgKFN0cmluZ1V0aWxzLmlzRW1wdHkoZ2V0R3JvdXAoKS5nZXRUaXRsZSgpKSkgeworICAgICAgICAgICAgYWRkRXJyb3IoInBsYW5ldEdyb3Vwcy5lcnJvci50aXRsZSIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFN0cmluZ1V0aWxzLmlzRW1wdHkoZ2V0R3JvdXAoKS5nZXRIYW5kbGUoKSkpIHsKKyAgICAgICAgICAgIGFkZEVycm9yKCJwbGFuZXRHcm91cHMuZXJyb3IuaGFuZGxlIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ2V0R3JvdXAoKS5nZXRIYW5kbGUoKSAhPSBudWxsICYmICJhbGwiLmVxdWFscyhnZXRHcm91cCgpLmdldEhhbmRsZSgpKSkgeworICAgICAgICAgICAgYWRkRXJyb3IoInBsYW5ldEdyb3Vwcy5lcnJvci5uYW1lUmVzZXJ2ZWQiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIG1ha2Ugc3VyZSBkdXBsaWNhdGUgZ3JvdXAgaGFuZGxlcyBhcmUgcHJldmVudGVkCisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBTYXZlIHN1YnNjcmlwdGlvbiwgYWRkIHRvIGN1cnJlbnQgZ3JvdXAKKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIHNhdmVTdWJzY3JpcHRpb24oKSB7CisKKyAgICAgICAgdmFsdWRhdGVOZXdTdWIoKTsKKworICAgICAgICBpZiAoIWhhc0FjdGlvbkVycm9ycygpKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFBsYW5ldE1hbmFnZXIgcG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0UGxhbmV0TWFuYWdlcigpOworCisgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgdGhpcyBzdWJzY3JpcHRpb24gYWxyZWFkeSBleGlzdHMgYmVmb3JlIGFkZGluZyBpdAorICAgICAgICAgICAgICAgIFN1YnNjcmlwdGlvbiBzdWIgPSBwbWdyLmdldFN1YnNjcmlwdGlvbihnZXRTdWJVcmwoKSk7CisgICAgICAgICAgICAgICAgaWYgKHN1YiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiQWRkaW5nIE5ldyBTdWJzY3JpcHRpb24gLSAiICsgZ2V0U3ViVXJsKCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vIHN1YiBkb2Vzbid0IGV4aXN0IHlldCwgc28gd2UgbmVlZCB0byBmZXRjaCBpdAorICAgICAgICAgICAgICAgICAgICBGZWVkRmV0Y2hlciBmZXRjaGVyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRGZWVkRmV0Y2hlcigpOworICAgICAgICAgICAgICAgICAgICBzdWIgPSBmZXRjaGVyLmZldGNoU3Vic2NyaXB0aW9uKGdldFN1YlVybCgpKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBzYXZlIG5ldyBzdWIKKyAgICAgICAgICAgICAgICAgICAgcG1nci5zYXZlU3Vic2NyaXB0aW9uKHN1Yik7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBTdWJzY3JpcHRpb24gYWxyZWFkeSBleGlzdHMKKyAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJBZGRpbmcgRXhpc3RpbmcgU3Vic2NyaXB0aW9uIC0gIiArIGdldFN1YlVybCgpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIHN1YiB0byB0aGUgZ3JvdXAKKyAgICAgICAgICAgICAgICBncm91cC5nZXRTdWJzY3JpcHRpb25zKCkuYWRkKHN1Yik7CisgICAgICAgICAgICAgICAgc3ViLmdldEdyb3VwcygpLmFkZChncm91cCk7CisgICAgICAgICAgICAgICAgcG1nci5zYXZlR3JvdXAoZ3JvdXApOworICAgICAgICAgICAgICAgIFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZmx1c2goKTsKKworICAgICAgICAgICAgICAgIC8vIGNsZWFyIGZpZWxkIGFmdGVyIHN1Y2Nlc3MKKyAgICAgICAgICAgICAgICBzZXRTdWJVcmwobnVsbCk7CisKKyAgICAgICAgICAgICAgICBhZGRNZXNzYWdlKCJwbGFuZXRTdWJzY3JpcHRpb24uc3VjY2Vzcy5zYXZlZCIpOworCisgICAgICAgICAgICB9IGNhdGNoIChGZXRjaGVyRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgYWRkRXJyb3IoInBsYW5ldEdyb3VwU3Vicy5lcnJvci5mZXRjaGluZ0ZlZWQiLCBleC5nZXRSb290Q2F1c2VNZXNzYWdlKCkpOworCisgICAgICAgICAgICB9IGNhdGNoIChSb2xsZXJFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIlVuZXhwZWN0ZWQgZXJyb3Igc2F2aW5nIHN1YnNjcmlwdGlvbiIsIGV4KTsKKyAgICAgICAgICAgICAgICBhZGRFcnJvcigicGxhbmV0R3JvdXBTdWJzLmVycm9yLmR1cmluZ1NhdmUiLCBleC5nZXRSb290Q2F1c2VNZXNzYWdlKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIExJU1Q7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBEZWxldGUgc3Vic2NyaXB0aW9uLCByZXNldCBmb3JtCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBkZWxldGVTdWJzY3JpcHRpb24oKSB7CisKKyAgICAgICAgaWYgKGdldFN1YlVybCgpICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7CisKKyAgICAgICAgICAgICAgICBQbGFuZXRNYW5hZ2VyIHBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFBsYW5ldE1hbmFnZXIoKTsKKworICAgICAgICAgICAgICAgIFN1YnNjcmlwdGlvbiBzdWIgPSBwbWdyLmdldFN1YnNjcmlwdGlvbihnZXRTdWJVcmwoKSk7CisKKyAgICAgICAgICAgICAgICAvLyByZW1vdmUgc3ViIGZyb20gZ3JvdXAKKyAgICAgICAgICAgICAgICBnZXRHcm91cCgpLmdldFN1YnNjcmlwdGlvbnMoKS5yZW1vdmUoc3ViKTsKKyAgICAgICAgICAgICAgICBwbWdyLnNhdmVHcm91cChnZXRHcm91cCgpKTsKKworICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBncm91cCBmcm9tIHN1YgorICAgICAgICAgICAgICAgIHN1Yi5nZXRHcm91cHMoKS5yZW1vdmUoZ2V0R3JvdXAoKSk7CisgICAgICAgICAgICAgICAgcG1nci5zYXZlU3Vic2NyaXB0aW9uKHN1Yik7CisKKyAgICAgICAgICAgICAgICBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmZsdXNoKCk7CisKKyAgICAgICAgICAgICAgICAvLyBjbGVhciBmaWVsZCBhZnRlciBzdWNjZXNzCisgICAgICAgICAgICAgICAgc2V0U3ViVXJsKG51bGwpOworCisgICAgICAgICAgICAgICAgYWRkTWVzc2FnZSgicGxhbmV0U3Vic2NyaXB0aW9uLnN1Y2Nlc3MuZGVsZXRlZCIpOworCisgICAgICAgICAgICB9IGNhdGNoIChSb2xsZXJFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIHJlbW92aW5nIHBsYW5ldCBzdWJzY3JpcHRpb24iLCBleCk7CisgICAgICAgICAgICAgICAgYWRkRXJyb3IoInBsYW5ldFN1YnNjcmlwdGlvbi5lcnJvci5kZWxldGluZyIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIExJU1Q7CisgICAgfQorCisKKyAgICAvKioKKyAgICAgKiBWYWxpZGF0ZSBwb3N0ZWQgc3Vic2NyaXB0aW9uCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHZhbHVkYXRlTmV3U3ViKCkgeworCisgICAgICAgIGlmIChTdHJpbmdVdGlscy5pc0VtcHR5KGdldFN1YlVybCgpKSkgeworICAgICAgICAgICAgYWRkRXJyb3IoInBsYW5ldFN1YnNjcmlwdGlvbi5lcnJvci5mZWVkVXJsIik7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0UGFnZVRpdGxlKCkgeworICAgICAgICBpZiAocGFnZVRpdGxlID09IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChnZXRDcmVhdGVOZXcoKSkgeworICAgICAgICAgICAgICAgIHBhZ2VUaXRsZSA9IGdldFRleHQoInBsYW5ldEdyb3VwU3Vicy5jdXN0b20udGl0bGUubmV3Iik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGdldEdyb3VwKCkuZ2V0SGFuZGxlKCkuZXF1YWxzKCJhbGwiKSkgeworICAgICAgICAgICAgICAgIHBhZ2VUaXRsZSA9IGdldFRleHQoInBsYW5ldEdyb3VwU3Vicy5kZWZhdWx0LnRpdGxlIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBhZ2VUaXRsZSA9IGdldFRleHQoInBsYW5ldEdyb3VwU3Vicy5jdXN0b20udGl0bGUiLCBuZXcgU3RyaW5nW117Z2V0R3JvdXAoKS5nZXRIYW5kbGUoKX0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwYWdlVGl0bGU7CisgICAgfQorCisKKyAgICBwdWJsaWMgTGlzdDxTdWJzY3JpcHRpb24+IGdldFN1YnNjcmlwdGlvbnMoKSB7CisKKyAgICAgICAgTGlzdDxTdWJzY3JpcHRpb24+IHN1YnMgPSBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKKyAgICAgICAgaWYgKGdldEdyb3VwKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgU2V0PFN1YnNjcmlwdGlvbj4gc3Vic1NldCA9IGdldEdyb3VwKCkuZ2V0U3Vic2NyaXB0aW9ucygpOworCisgICAgICAgICAgICAvLyBpdGVyYXRlIG92ZXIgbGlzdCBhbmQgYnVpbGQgZGlzcGxheSBsaXN0CisgICAgICAgICAgICBzdWJzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgICAgICBmb3IgKFN1YnNjcmlwdGlvbiBzdWIgOiBzdWJzU2V0KSB7CisgICAgICAgICAgICAgICAgLy8gb25seSBpbmNsdWRlIGV4dGVybmFsIHN1YnMgZm9yIGRpc3BsYXkKKyAgICAgICAgICAgICAgICBpZiAoIXN1Yi5nZXRGZWVkVVJMKCkuc3RhcnRzV2l0aCgid2VibG9nZ2VyOiIpKSB7CisgICAgICAgICAgICAgICAgICAgIHN1YnMuYWRkKHN1Yik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHN1YnM7CisgICAgfQorCisgICAgcHVibGljIFBsYW5ldEdyb3VwIGdldEdyb3VwKCkgeworICAgICAgICByZXR1cm4gZ3JvdXA7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0R3JvdXAoUGxhbmV0R3JvdXAgZ3JvdXApIHsKKyAgICAgICAgdGhpcy5ncm91cCA9IGdyb3VwOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0U3ViVXJsKCkgeworICAgICAgICByZXR1cm4gc3ViVXJsOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFN1YlVybChTdHJpbmcgc3ViVXJsKSB7CisgICAgICAgIHRoaXMuc3ViVXJsID0gc3ViVXJsOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGdldENyZWF0ZU5ldygpIHsKKyAgICAgICAgaWYgKGNyZWF0ZU5ldyA9PSBudWxsKSB7CisgICAgICAgICAgICBQbGFuZXRNYW5hZ2VyIHBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFBsYW5ldE1hbmFnZXIoKTsKKyAgICAgICAgICAgIFBsYW5ldEdyb3VwIGV4aXN0aW5nR3JvdXAgPSBudWxsOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBleGlzdGluZ0dyb3VwID0gcG1nci5nZXRHcm91cEJ5SWQoZ3JvdXAuZ2V0SWQoKSk7CisgICAgICAgICAgICB9IGNhdGNoIChSb2xsZXJFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIGxvZy5lcnJvcigiRXJyb3IgZ2V0dGluZyBncm91cCBieSBJRCIsIGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY3JlYXRlTmV3ID0gKGV4aXN0aW5nR3JvdXAgPT0gbnVsbCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGNyZWF0ZU5ldzsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRDcmVhdGVOZXcoYm9vbGVhbiBjcmVhdGVOZXcpIHsKKyAgICAgICAgLy8gbm8gb3AKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldEdyb3VwSGFuZGxlKCkgeworICAgICAgICByZXR1cm4gZ3JvdXAuZ2V0SGFuZGxlKCk7CisgICAgfQorCit9CisKKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3BsYW5ldC91aS9QbGFuZXRHcm91cHMuamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9wbGFuZXQvdWkvUGxhbmV0R3JvdXBzLmphdmEKaW5kZXggZjY1YzQ4MC4uZWUzZGZmOSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3BsYW5ldC91aS9QbGFuZXRHcm91cHMuamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvcGxhbmV0L3VpL1BsYW5ldEdyb3Vwcy5qYXZhCkBAIC0xNiwxODYgKzE2LDc2IEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBsYW5ldC51aTsKIAotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxhbmczLlN0cmluZ1V0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5idXNpbmVzcy5QbGFuZXRNYW5hZ2VyOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5wb2pvcy5QbGFuZXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LnBvam9zLlBsYW5ldEdyb3VwOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5XZWJsb2dnZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLldlYmxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMyLmNvbnZlbnRpb24uYW5ub3RhdGlvbi5BbGxvd2VkTWV0aG9kczsKK2ltcG9ydCBvcmcuYXBhY2hlLnN0cnV0czIuaW50ZXJjZXB0b3IuU2VydmxldFJlcXVlc3RBd2FyZTsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogCiAvKioKICAqIE1hbmFnZSBwbGFuZXQgZ3JvdXBzLgogICovCiAvLyBUT0RPOiBtYWtlIHRoaXMgd29yayBAQWxsb3dlZE1ldGhvZHMoeyJleGVjdXRlIiwic2F2ZSIsImRlbGV0ZSJ9KQotcHVibGljIGNsYXNzIFBsYW5ldEdyb3VwcyBleHRlbmRzIFBsYW5ldFVJQWN0aW9uIHsKLSAgICAKK3B1YmxpYyBjbGFzcyBQbGFuZXRHcm91cHMgZXh0ZW5kcyBQbGFuZXRVSUFjdGlvbiAgaW1wbGVtZW50cyBTZXJ2bGV0UmVxdWVzdEF3YXJlIHsKKwogICAgIHByaXZhdGUgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhQbGFuZXRHcm91cHMuY2xhc3MpOwotICAgIAotICAgIC8vIGEgYmVhbiB0byBtYW5hZ2Ugc3VibWl0dGVkIGRhdGEKLSAgICBwcml2YXRlIFBsYW5ldEdyb3Vwc0JlYW4gYmVhbiA9IG5ldyBQbGFuZXRHcm91cHNCZWFuKCk7Ci0gICAgCi0gICAgLy8gdGhlIHBsYW5ldCBncm91cCB3ZSBhcmUgd29ya2luZyBvbgorCisgICAgLyoqIEdyb3VwIGJlaW5nIGRlbGV0ZWQgKi8KICAgICBwcml2YXRlIFBsYW5ldEdyb3VwIGdyb3VwID0gbnVsbDsKLSAgICAKLSAgICAKKwogICAgIHB1YmxpYyBQbGFuZXRHcm91cHMoKSB7CiAgICAgICAgIHRoaXMuYWN0aW9uTmFtZSA9ICJwbGFuZXRHcm91cHMiOwogICAgICAgICB0aGlzLmRlc2lyZWRNZW51ID0gImFkbWluIjsKICAgICAgICAgdGhpcy5wYWdlVGl0bGUgPSAicGxhbmV0R3JvdXBzLnBhZ2V0aXRsZSI7CiAgICAgfQotICAgIAotICAgIAorCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gaXNXZWJsb2dSZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAgICAKKwogICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG15UHJlcGFyZSgpIHsKLSAgICAgICAgCi0gICAgICAgIGlmKGdldFBsYW5ldCgpICE9IG51bGwgJiYgZ2V0QmVhbigpLmdldElkKCkgIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBQbGFuZXRNYW5hZ2VyIHBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFBsYW5ldE1hbmFnZXIoKTsKLSAgICAgICAgICAgICAgICBzZXRHcm91cChwbWdyLmdldEdyb3VwQnlJZChnZXRCZWFuKCkuZ2V0SWQoKSkpOwotICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIGxvb2tpbmcgdXAgcGxhbmV0IGdyb3VwIC0gIiArIGdldEJlYW4oKS5nZXRJZCgpLCBleCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2bGV0UmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCkgeworICAgICAgICBncm91cCA9IFBsYW5ldEdyb3VwU3Vicy5nZXRHcm91cEZyb21SZXF1ZXN0KHJlcXVlc3QsIGdldFBsYW5ldCgpKTsKICAgICB9CiAKLSAgICAKLSAgICAvKiogCisgICAgLyoqCiAgICAgICogU2hvdyBwbGFuZXQgZ3JvdXBzIHBhZ2UuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBleGVjdXRlKCkgewotICAgICAgICAKLSAgICAgICAgLy8gaWYgd2UgYXJlIGxvYWRpbmcgYW4gZXhpc3RpbmcgZ3JvdXAgdGhlbiBwb3B1bGF0ZSB0aGUgYmVhbgotICAgICAgICBpZihnZXRHcm91cCgpICE9IG51bGwpIHsKLSAgICAgICAgICAgIGdldEJlYW4oKS5jb3B5RnJvbShnZXRHcm91cCgpKTsKLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgcmV0dXJuIExJU1Q7CiAgICAgfQogCi0KICAgICAvKioKLSAgICAgKiBTYXZlIGdyb3VwLgotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgc2F2ZSgpIHsKLQotICAgICAgICBteVZhbGlkYXRlKCk7Ci0KLSAgICAgICAgaWYgKCFoYXNBY3Rpb25FcnJvcnMoKSkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBQbGFuZXRNYW5hZ2VyIHBsYW5ldE1hbmFnZXIgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFBsYW5ldE1hbmFnZXIoKTsKLQotICAgICAgICAgICAgICAgIFBsYW5ldCBwbGFuZXQgPSBnZXRQbGFuZXQoKTsKLSAgICAgICAgICAgICAgICBQbGFuZXRHcm91cCBwbGFuZXRHcm91cCA9IGdldEdyb3VwKCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAocGxhbmV0R3JvdXAgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBwbGFuZXRHcm91cCA9IG5ldyBQbGFuZXRHcm91cCgpOwotICAgICAgICAgICAgICAgICAgICBwbGFuZXRHcm91cC5zZXRQbGFuZXQocGxhbmV0KTsKLSAgICAgICAgICAgICAgICAgICAgZ2V0QmVhbigpLmNvcHlUbyhwbGFuZXRHcm91cCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJBZGRpbmcgTmV3IEdyb3VwOiAiICsgcGxhbmV0R3JvdXAuZ2V0SGFuZGxlKCkpOwotICAgICAgICAgICAgICAgICAgICBwbGFuZXRNYW5hZ2VyLnNhdmVOZXdQbGFuZXRHcm91cChnZXRQbGFuZXQoKSwgcGxhbmV0R3JvdXApOwotCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJVcGRhdGluZyBFeGlzdGluZyBHcm91cDogIiArIHBsYW5ldEdyb3VwLmdldEhhbmRsZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgZ2V0QmVhbigpLmNvcHlUbyhwbGFuZXRHcm91cCk7Ci0gICAgICAgICAgICAgICAgICAgIHBsYW5ldE1hbmFnZXIuc2F2ZUdyb3VwKHBsYW5ldEdyb3VwKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgYWRkTWVzc2FnZSgicGxhbmV0R3JvdXBzLnN1Y2Nlc3Muc2F2ZWQiKTsKLQotICAgICAgICAgICAgICAgIHNldEdyb3VwKG51bGwpOwotCi0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIHNhdmluZyBwbGFuZXQgZ3JvdXAgLSAiICsgZ2V0QmVhbigpLmdldElkKCksIGV4KTsKLSAgICAgICAgICAgICAgICBhZGRFcnJvcigicGxhbmV0R3JvdXBzLmVycm9yLnNhdmVkIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gTElTVDsKLSAgICB9Ci0KLSAgICAKLSAgICAvKiogCi0gICAgICogRGVsZXRlIGdyb3VwLCByZXNldCBmb3JtICAKKyAgICAgKiBEZWxldGUgZ3JvdXAKICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGRlbGV0ZSgpIHsKLSAgICAgICAgCi0gICAgICAgIGlmKGdldEdyb3VwKCkgIT0gbnVsbCkgeworCisgICAgICAgIGlmIChnZXRHcm91cCgpICE9IG51bGwpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgUGxhbmV0TWFuYWdlciBwbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRQbGFuZXRNYW5hZ2VyKCk7CiAgICAgICAgICAgICAgICAgcG1nci5kZWxldGVHcm91cChnZXRHcm91cCgpKTsKICAgICAgICAgICAgICAgICBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBhZGRNZXNzYWdlKCJwbGFuZXRTdWJzY3JpcHRpb24uc3VjY2Vzcy5kZWxldGVkIik7CiAKICAgICAgICAgICAgICAgICBzZXRHcm91cChudWxsKTsKIAotICAgICAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIGRlbGV0aW5nIHBsYW5ldCBncm91cCAtICIrZ2V0QmVhbigpLmdldElkKCkpOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgbG9nLmVycm9yKCJFcnJvciBkZWxldGluZyBwbGFuZXQgZ3JvdXAgLSAiICsgZ2V0R3JvdXAoKS5nZXRJZCgpKTsKICAgICAgICAgICAgICAgICBhZGRFcnJvcigiRXJyb3IgZGVsZXRpbmcgcGxhbmV0IGdyb3VwIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIExJU1Q7CiAgICAgfQotICAgIAotICAgIAotICAgIC8qKiAKLSAgICAgKiBWYWxpZGF0ZSBwb3N0ZWQgZ3JvdXAgCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIG15VmFsaWRhdGUoKSB7Ci0gICAgICAgIAotICAgICAgICBpZihTdHJpbmdVdGlscy5pc0VtcHR5KGdldEJlYW4oKS5nZXRUaXRsZSgpKSkgewotICAgICAgICAgICAgYWRkRXJyb3IoInBsYW5ldEdyb3Vwcy5lcnJvci50aXRsZSIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZihTdHJpbmdVdGlscy5pc0VtcHR5KGdldEJlYW4oKS5nZXRIYW5kbGUoKSkpIHsKLSAgICAgICAgICAgIGFkZEVycm9yKCJwbGFuZXRHcm91cHMuZXJyb3IuaGFuZGxlIik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmKGdldEJlYW4oKS5nZXRIYW5kbGUoKSAhPSBudWxsICYmICJhbGwiLmVxdWFscyhnZXRCZWFuKCkuZ2V0SGFuZGxlKCkpKSB7Ci0gICAgICAgICAgICBhZGRFcnJvcigicGxhbmV0R3JvdXBzLmVycm9yLm5hbWVSZXNlcnZlZCIpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBtYWtlIHN1cmUgZHVwbGljYXRlIGdyb3VwIGhhbmRsZXMgYXJlIHByZXZlbnRlZAotICAgIH0KLSAgICAKLSAgICAKLSAgICBwdWJsaWMgTGlzdDxQbGFuZXRHcm91cD4gZ2V0R3JvdXBzKCkgewotICAgICAgICBMaXN0PFBsYW5ldEdyb3VwPiBkaXNwbGF5R3JvdXBzID0gbmV3IEFycmF5TGlzdDxQbGFuZXRHcm91cD4oKTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoUGxhbmV0R3JvdXAgcGxhbmV0R3JvdXAgOiBnZXRQbGFuZXQoKS5nZXRHcm91cHMoKSkgewotICAgICAgICAgICAgLy8gVGhlICJhbGwiIGdyb3VwIGlzIGNvbnNpZGVyZWQgYSBzcGVjaWFsIGdyb3VwIGFuZCBjYW5ub3QgYmUKLSAgICAgICAgICAgIC8vIG1hbmFnZWQgaW5kZXBlbmRlbnRseQotICAgICAgICAgICAgaWYgKCFwbGFuZXRHcm91cC5nZXRIYW5kbGUoKS5lcXVhbHMoImFsbCIpKSB7Ci0gICAgICAgICAgICAgICAgZGlzcGxheUdyb3Vwcy5hZGQocGxhbmV0R3JvdXApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBkaXNwbGF5R3JvdXBzOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBwdWJsaWMgUGxhbmV0R3JvdXBzQmVhbiBnZXRCZWFuKCkgewotICAgICAgICByZXR1cm4gYmVhbjsKLSAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCBzZXRCZWFuKFBsYW5ldEdyb3Vwc0JlYW4gYmVhbikgewotICAgICAgICB0aGlzLmJlYW4gPSBiZWFuOwotICAgIH0KLSAgICAKICAgICBwdWJsaWMgUGxhbmV0R3JvdXAgZ2V0R3JvdXAoKSB7CiAgICAgICAgIHJldHVybiBncm91cDsKICAgICB9CkBAIC0yMDMsNSArOTMsMTkgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRHcm91cChQbGFuZXRHcm91cCBncm91cCkgewogICAgICAgICB0aGlzLmdyb3VwID0gZ3JvdXA7CiAgICAgfQotICAgIAorCisgICAgcHVibGljIExpc3Q8UGxhbmV0R3JvdXA+IGdldEdyb3VwcygpIHsKKyAgICAgICAgTGlzdDxQbGFuZXRHcm91cD4gZGlzcGxheUdyb3VwcyA9IG5ldyBBcnJheUxpc3Q8UGxhbmV0R3JvdXA+KCk7CisKKyAgICAgICAgZm9yIChQbGFuZXRHcm91cCBwbGFuZXRHcm91cCA6IGdldFBsYW5ldCgpLmdldEdyb3VwcygpKSB7CisgICAgICAgICAgICAvLyBUaGUgImFsbCIgZ3JvdXAgaXMgY29uc2lkZXJlZCBhIHNwZWNpYWwgZ3JvdXAgYW5kIGNhbm5vdCBiZSBtYW5hZ2VkIGluZGVwZW5kZW50bHkKKyAgICAgICAgICAgIGlmICghcGxhbmV0R3JvdXAuZ2V0SGFuZGxlKCkuZXF1YWxzKCJhbGwiKSkgeworICAgICAgICAgICAgICAgIGRpc3BsYXlHcm91cHMuYWRkKHBsYW5ldEdyb3VwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZGlzcGxheUdyb3VwczsKKyAgICB9CisKKworCiB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvcGxhbmV0L3VpL1BsYW5ldEdyb3Vwc0JlYW4uamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9wbGFuZXQvdWkvUGxhbmV0R3JvdXBzQmVhbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGVmNTE2Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9wbGFuZXQvdWkvUGxhbmV0R3JvdXBzQmVhbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICogIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdQotICogdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90Ci0gKiB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcKLSAqIGNvcHlyaWdodCBpbiB0aGlzIHdvcmssIHBsZWFzZSBzZWUgdGhlIE5PVElDRSBmaWxlIGluIHRoZSB0b3AgbGV2ZWwKLSAqIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wbGFuZXQudWk7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci5wbGFuZXQucG9qb3MuUGxhbmV0R3JvdXA7Ci0KLQotLyoqCi0gKiBBIHNpbXBsZSBiZWFuIGZvciBtYW5hZ2luZyB0aGUgZm9ybSBkYXRhIHVzZWQgYnkgdGhlIFBsYW5ldEdyb3Vwcy4KLSAqLwotcHVibGljIGNsYXNzIFBsYW5ldEdyb3Vwc0JlYW4gewotICAgIAotICAgIHByaXZhdGUgU3RyaW5nIGlkID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZyB0aXRsZSA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgaGFuZGxlID0gbnVsbDsKLSAgICAKLSAgICAKLSAgICBwdWJsaWMgU3RyaW5nIGdldElkKCkgewotICAgICAgICByZXR1cm4gaWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0SWQoU3RyaW5nIGlkKSB7Ci0gICAgICAgIHRoaXMuaWQgPSBpZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFRpdGxlKCkgewotICAgICAgICByZXR1cm4gdGl0bGU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VGl0bGUoU3RyaW5nIHRpdGxlKSB7Ci0gICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEhhbmRsZSgpIHsKLSAgICAgICAgcmV0dXJuIGhhbmRsZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRIYW5kbGUoU3RyaW5nIGhhbmRsZSkgewotICAgICAgICB0aGlzLmhhbmRsZSA9IGhhbmRsZTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcHVibGljIHZvaWQgY29weVRvKFBsYW5ldEdyb3VwIGRhdGFIb2xkZXIpIHsKLSAgICAgICAgCi0gICAgICAgIGRhdGFIb2xkZXIuc2V0VGl0bGUoZ2V0VGl0bGUoKSk7Ci0gICAgICAgIGRhdGFIb2xkZXIuc2V0SGFuZGxlKGdldEhhbmRsZSgpKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcHVibGljIHZvaWQgY29weUZyb20oUGxhbmV0R3JvdXAgZGF0YUhvbGRlcikgewotICAgICAgICAKLSAgICAgICAgc2V0SWQoZGF0YUhvbGRlci5nZXRJZCgpKTsKLSAgICAgICAgc2V0VGl0bGUoZGF0YUhvbGRlci5nZXRUaXRsZSgpKTsKLSAgICAgICAgc2V0SGFuZGxlKGRhdGFIb2xkZXIuZ2V0SGFuZGxlKCkpOwotICAgIH0KLSAgICAKLX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9wbGFuZXQvdWkvUGxhbmV0U3Vic2NyaXB0aW9ucy5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3BsYW5ldC91aS9QbGFuZXRTdWJzY3JpcHRpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5OWVhYTIuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3BsYW5ldC91aS9QbGFuZXRTdWJzY3JpcHRpb25zLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA1IFN1biBNaWNyb3N5c3RlbXMsIEluYy4KLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wbGFuZXQudWk7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci5Sb2xsZXJFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LmJ1c2luZXNzLlBsYW5ldE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LmJ1c2luZXNzLmZldGNoZXIuRmVlZEZldGNoZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LnBvam9zLlBsYW5ldEdyb3VwOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5wb2pvcy5TdWJzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLldlYmxvZ2dlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLkdsb2JhbFBlcm1pc3Npb247Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMyLmNvbnZlbnRpb24uYW5ub3RhdGlvbi5BbGxvd2VkTWV0aG9kczsKLQotCi0vKioKLSAqIE1hbmFnZSBwbGFuZXQgZ3JvdXAgc3Vic2NyaXB0aW9ucywgZGVmYXVsdCBncm91cCBpcyAiYWxsIi4KLSAqLwotLy8gVE9ETzogbWFrZSB0aGlzIHdvcmsgQEFsbG93ZWRNZXRob2RzKHsiZXhlY3V0ZSIsInNhdmUiLCJkZWxldGUifSkKLXB1YmxpYyBjbGFzcyBQbGFuZXRTdWJzY3JpcHRpb25zIGV4dGVuZHMgUGxhbmV0VUlBY3Rpb24gewotICAgIAotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZyBMT0dHRVIgPSBMb2dGYWN0b3J5LmdldExvZyhQbGFuZXRTdWJzY3JpcHRpb25zLmNsYXNzKTsKLSAgICAKLSAgICAvLyBpZCBvZiB0aGUgZ3JvdXAgd2UgYXJlIHdvcmtpbmcgaW4KLSAgICBwcml2YXRlIFN0cmluZyBncm91cEhhbmRsZSA9IG51bGw7Ci0gICAgCi0gICAgLy8gdGhlIHBsYW5ldCBncm91cCB3ZSBhcmUgd29ya2luZyBpbgotICAgIHByaXZhdGUgUGxhbmV0R3JvdXAgZ3JvdXAgPSBudWxsOwotICAgIAotICAgIC8vIHRoZSBzdWJzY3JpcHRpb24gdG8gZGVhbCB3aXRoCi0gICAgcHJpdmF0ZSBTdHJpbmcgc3ViVXJsID0gbnVsbDsKLSAgICAKLSAgICAKLSAgICBwdWJsaWMgUGxhbmV0U3Vic2NyaXB0aW9ucygpIHsKLSAgICAgICAgdGhpcy5hY3Rpb25OYW1lID0gInBsYW5ldFN1YnNjcmlwdGlvbnMiOwotICAgICAgICB0aGlzLmRlc2lyZWRNZW51ID0gImFkbWluIjsKLSAgICAgICAgdGhpcy5wYWdlVGl0bGUgPSAicGxhbmV0U3Vic2NyaXB0aW9ucy50aXRsZSI7Ci0gICAgfQotICAgIAotICAgIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gcmVxdWlyZWRHbG9iYWxQZXJtaXNzaW9uQWN0aW9ucygpIHsKLSAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoR2xvYmFsUGVybWlzc2lvbi5BRE1JTik7Ci0gICAgfQotICAgIAotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzV2VibG9nUmVxdWlyZWQoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgbXlQcmVwYXJlKCkgewotICAgICAgICAKLSAgICAgICAgUGxhbmV0TWFuYWdlciBwbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRQbGFuZXRNYW5hZ2VyKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBsb29rdXAgZ3JvdXAgd2UgYXJlIG9wZXJhdGluZyBvbiwgaWYgbm9uZSBzcGVjaWZpZWQgdGhlbiB1c2UgZGVmYXVsdAotICAgICAgICBpZiAoZ2V0R3JvdXBIYW5kbGUoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBzZXRHcm91cEhhbmRsZSgiYWxsIik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBzZXRHcm91cChwbWdyLmdldEdyb3VwKGdldFBsYW5ldCgpLCBnZXRHcm91cEhhbmRsZSgpKSk7Ci0gICAgICAgIH0gY2F0Y2ggKFJvbGxlckV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgTE9HR0VSLmVycm9yKCJFcnJvciBsb29raW5nIHVwIHBsYW5ldCBncm91cCAtICIgKyBnZXRHcm91cEhhbmRsZSgpLCBleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgCi0gICAgLyoqCi0gICAgICogUG9wdWxhdGUgcGFnZSBtb2RlbCBhbmQgZm9yd2FyZCB0byBzdWJzY3JpcHRpb24gcGFnZQotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHsKLSAgICAgICAgcmV0dXJuIExJU1Q7Ci0gICAgfQotCi0gICAgCi0gICAgLyoqIAotICAgICAqIFNhdmUgc3Vic2NyaXB0aW9uLCBhZGQgdG8gY3VycmVudCBncm91cCAKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIHNhdmUoKSB7Ci0gICAgICAgIAotICAgICAgICBteVZhbGlkYXRlKCk7Ci0gICAgICAgIAotICAgICAgICBpZighaGFzQWN0aW9uRXJyb3JzKCkpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgUGxhbmV0TWFuYWdlciBwbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRQbGFuZXRNYW5hZ2VyKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBjaGVjayBpZiB0aGlzIHN1YnNjcmlwdGlvbiBhbHJlYWR5IGV4aXN0cyBiZWZvcmUgYWRkaW5nIGl0Ci0gICAgICAgICAgICAgICAgU3Vic2NyaXB0aW9uIHN1YiA9IHBtZ3IuZ2V0U3Vic2NyaXB0aW9uKGdldFN1YlVybCgpKTsKLSAgICAgICAgICAgICAgICBpZihzdWIgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBMT0dHRVIuZGVidWcoIkFkZGluZyBOZXcgU3Vic2NyaXB0aW9uIC0gIiArIGdldFN1YlVybCgpKTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBzdWIgZG9lc24ndCBleGlzdCB5ZXQsIHNvIHdlIG5lZWQgdG8gZmV0Y2ggaXQKLSAgICAgICAgICAgICAgICAgICAgRmVlZEZldGNoZXIgZmV0Y2hlciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0RmVlZEZldGNoZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgc3ViID0gZmV0Y2hlci5mZXRjaFN1YnNjcmlwdGlvbihnZXRTdWJVcmwoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gc2F2ZSBuZXcgc3ViCi0gICAgICAgICAgICAgICAgICAgIHBtZ3Iuc2F2ZVN1YnNjcmlwdGlvbihzdWIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIExPR0dFUi5kZWJ1ZygiQWRkaW5nIEV4aXN0aW5nIFN1YnNjcmlwdGlvbiAtICIgKyBnZXRTdWJVcmwoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gU3Vic2NyaXB0aW9uIGFscmVhZHkgZXhpc3RzCi0gICAgICAgICAgICAgICAgICAgIGFkZE1lc3NhZ2UoInBsYW5ldFN1YnNjcmlwdGlvbi5mb3VuZEV4aXN0aW5nIiwgc3ViLmdldFRpdGxlKCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgc3ViIHRvIHRoZSBncm91cAotICAgICAgICAgICAgICAgIGdyb3VwLmdldFN1YnNjcmlwdGlvbnMoKS5hZGQoc3ViKTsKLSAgICAgICAgICAgICAgICBzdWIuZ2V0R3JvdXBzKCkuYWRkKGdyb3VwKTsKLSAgICAgICAgICAgICAgICBwbWdyLnNhdmVHcm91cChncm91cCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBmbHVzaCBjaGFuZ2VzCi0gICAgICAgICAgICAgICAgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5mbHVzaCgpOwotCi0gICAgICAgICAgICAgICAgLy8gY2xlYXIgZmllbGQgYWZ0ZXIgc3VjY2VzcwotICAgICAgICAgICAgICAgIHNldFN1YlVybChudWxsKTsKLQotICAgICAgICAgICAgICAgIGFkZE1lc3NhZ2UoInBsYW5ldFN1YnNjcmlwdGlvbi5zdWNjZXNzLnNhdmVkIik7Ci0KLSAgICAgICAgICAgIH0gY2F0Y2ggKFJvbGxlckV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIExPR0dFUi5lcnJvcigiVW5leHBlY3RlZCBlcnJvciBzYXZpbmcgc3Vic2NyaXB0aW9uIiwgZXgpOwotICAgICAgICAgICAgICAgIGFkZEVycm9yKCJwbGFuZXRTdWJzY3JpcHRpb25zLmVycm9yLmR1cmluZ1NhdmUiLCBleC5nZXRSb290Q2F1c2VNZXNzYWdlKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gTElTVDsKLSAgICB9Ci0KLSAgICAKLSAgICAvKiogCi0gICAgICogRGVsZXRlIHN1YnNjcmlwdGlvbiwgcmVzZXQgZm9ybSAgCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBkZWxldGUoKSB7Ci0gICAgICAgIAotICAgICAgICBpZihnZXRTdWJVcmwoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotCi0gICAgICAgICAgICAgICAgUGxhbmV0TWFuYWdlciBwbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRQbGFuZXRNYW5hZ2VyKCk7Ci0KLSAgICAgICAgICAgICAgICAvLyByZW1vdmUgc3Vic2NyaXB0aW9uCi0gICAgICAgICAgICAgICAgU3Vic2NyaXB0aW9uIHN1YiA9IHBtZ3IuZ2V0U3Vic2NyaXB0aW9uKGdldFN1YlVybCgpKTsKLSAgICAgICAgICAgICAgICBnZXRHcm91cCgpLmdldFN1YnNjcmlwdGlvbnMoKS5yZW1vdmUoc3ViKTsKLSAgICAgICAgICAgICAgICBzdWIuZ2V0R3JvdXBzKCkucmVtb3ZlKGdldEdyb3VwKCkpOwotICAgICAgICAgICAgICAgIHBtZ3Iuc2F2ZUdyb3VwKGdldEdyb3VwKCkpOwotICAgICAgICAgICAgICAgIFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZmx1c2goKTsKLQotICAgICAgICAgICAgICAgIC8vIGNsZWFyIGZpZWxkIGFmdGVyIHN1Y2Nlc3MKLSAgICAgICAgICAgICAgICBzZXRTdWJVcmwobnVsbCk7Ci0KLSAgICAgICAgICAgICAgICBhZGRNZXNzYWdlKCJwbGFuZXRTdWJzY3JpcHRpb24uc3VjY2Vzcy5kZWxldGVkIik7Ci0KLSAgICAgICAgICAgIH0gY2F0Y2ggKFJvbGxlckV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgICAgIExPR0dFUi5lcnJvcigiRXJyb3IgcmVtb3ZpbmcgcGxhbmV0IHN1YnNjcmlwdGlvbiIsIGV4KTsKLSAgICAgICAgICAgICAgICBhZGRFcnJvcigicGxhbmV0U3Vic2NyaXB0aW9uLmVycm9yLmRlbGV0aW5nIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gTElTVDsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgLyoqIAotICAgICAqIFZhbGlkYXRlIHBvc3RlZCBzdWJzY3JpcHRpb24KLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgbXlWYWxpZGF0ZSgpIHsKLSAgICAgICAgCi0gICAgICAgIGlmKFN0cmluZ1V0aWxzLmlzRW1wdHkoZ2V0U3ViVXJsKCkpKSB7Ci0gICAgICAgICAgICBhZGRFcnJvcigicGxhbmV0U3Vic2NyaXB0aW9uLmVycm9yLmZlZWRVcmwiKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAKLSAgICBwdWJsaWMgTGlzdDxTdWJzY3JpcHRpb24+IGdldFN1YnNjcmlwdGlvbnMoKSB7Ci0gICAgICAgIAotICAgICAgICBMaXN0PFN1YnNjcmlwdGlvbj4gc3VicyA9IENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwotICAgICAgICBpZihnZXRHcm91cCgpICE9IG51bGwpIHsKLSAgICAgICAgICAgIFNldDxTdWJzY3JpcHRpb24+IHN1YnNTZXQgPSBnZXRHcm91cCgpLmdldFN1YnNjcmlwdGlvbnMoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gaXRlcmF0ZSBvdmVyIGxpc3QgYW5kIGJ1aWxkIGRpc3BsYXkgbGlzdAotICAgICAgICAgICAgc3VicyA9IG5ldyBBcnJheUxpc3Q8U3Vic2NyaXB0aW9uPigpOwotICAgICAgICAgICAgZm9yIChTdWJzY3JpcHRpb24gc3ViIDogc3Vic1NldCkgewotICAgICAgICAgICAgICAgIC8vIG9ubHkgaW5jbHVkZSBleHRlcm5hbCBzdWJzIGZvciBkaXNwbGF5Ci0gICAgICAgICAgICAgICAgaWYoIXN1Yi5nZXRGZWVkVVJMKCkuc3RhcnRzV2l0aCgid2VibG9nZ2VyOiIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN1YnMuYWRkKHN1Yik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gc3ViczsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcHVibGljIFN0cmluZyBnZXRHcm91cEhhbmRsZSgpIHsKLSAgICAgICAgcmV0dXJuIGdyb3VwSGFuZGxlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEdyb3VwSGFuZGxlKFN0cmluZyBncm91cEhhbmRsZSkgewotICAgICAgICB0aGlzLmdyb3VwSGFuZGxlID0gZ3JvdXBIYW5kbGU7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBQbGFuZXRHcm91cCBnZXRHcm91cCgpIHsKLSAgICAgICAgcmV0dXJuIGdyb3VwOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEdyb3VwKFBsYW5ldEdyb3VwIGdyb3VwKSB7Ci0gICAgICAgIHRoaXMuZ3JvdXAgPSBncm91cDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFN1YlVybCgpIHsKLSAgICAgICAgcmV0dXJuIHN1YlVybDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTdWJVcmwoU3RyaW5nIHN1YlVybCkgewotICAgICAgICB0aGlzLnN1YlVybCA9IHN1YlVybDsKLSAgICB9ICAgIAotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3Bvam9zL1RoZW1lVGVtcGxhdGUuamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9wb2pvcy9UaGVtZVRlbXBsYXRlLmphdmEKaW5kZXggODIxMjFmMy4uYzRiODg0MiAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3Bvam9zL1RoZW1lVGVtcGxhdGUuamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvcG9qb3MvVGhlbWVUZW1wbGF0ZS5qYXZhCkBAIC0yNiw3ICsyNiw3IEBACiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgVGhlbWVUZW1wbGF0ZSBleHRlbmRzIFRlbXBsYXRlIHsKIAotICAgIHB1YmxpYyBlbnVtIENvbXBvbmVudFR5cGUgeworICAgIGVudW0gQ29tcG9uZW50VHlwZSB7CiAgICAgICAgIFdFQkxPRygiV2VibG9nIiksCiAgICAgICAgIFBFUk1BTElOSygiUGVybWFsaW5rIiksCiAgICAgICAgIFNFQVJDSCgiU2VhcmNoIiksCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvcG9qb3MvV2VibG9nRW50cnlDb21tZW50LmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvcG9qb3MvV2VibG9nRW50cnlDb21tZW50LmphdmEKaW5kZXggYjI4ZGM1Mi4uMTEzOGFlOSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3Bvam9zL1dlYmxvZ0VudHJ5Q29tbWVudC5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9wb2pvcy9XZWJsb2dFbnRyeUNvbW1lbnQuamF2YQpAQCAtNTAsNyArNTAsNiBAQAogICAgIHByaXZhdGUgU3RyaW5nICAgIHBsdWdpbnMgPSBudWxsOwogICAgIHByaXZhdGUgU3RyaW5nICAgIGNvbnRlbnRUeXBlID0gInRleHQvcGxhaW4iOwogCi0gICAgCiAgICAgLy8gYXNzb2NpYXRpb25zCiAgICAgcHJpdmF0ZSBXZWJsb2dFbnRyeSB3ZWJsb2dFbnRyeSA9IG51bGw7CiAgICAgCkBAIC0yOTIsNiArMjkxLDEwIEBACiAgICAgcHVibGljIEJvb2xlYW4gZ2V0QXBwcm92ZWQoKSB7CiAgICAgICAgIHJldHVybiBBcHByb3ZhbFN0YXR1cy5BUFBST1ZFRC5lcXVhbHMoZ2V0U3RhdHVzKCkpOwogICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RW1wdHlTdHJpbmcoKSB7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CiAgICAgCiAgICAgCiAgICAgLyoqCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvY29yZS9wbHVnaW5zL1hpbmhhRWRpdG9yLmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvY29yZS9wbHVnaW5zL1N1bW1lcm5vdGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDg2JQpyZW5hbWUgZnJvbSBhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvY29yZS9wbHVnaW5zL1hpbmhhRWRpdG9yLmphdmEKcmVuYW1lIHRvIGFwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9jb3JlL3BsdWdpbnMvU3VtbWVybm90ZS5qYXZhCmluZGV4IDRkOGQ4YzguLmNmZWI0Y2IgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9jb3JlL3BsdWdpbnMvWGluaGFFZGl0b3IuamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvY29yZS9wbHVnaW5zL1N1bW1lcm5vdGUuamF2YQpAQCAtMTgsMTQgKzE4LDEzIEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLmNvcmUucGx1Z2luczsKIAotCiAvKioKLSAqIEEgcmljaCB0ZXh0IFdZU0lXWUcgZWRpdG9yIHVzaW5nIFhpbmhhLgorICogU3VtbWVybm90ZSByaWNoIHRleHQgZWRpdG9yCiAgKi8KLXB1YmxpYyBjbGFzcyBYaW5oYUVkaXRvciBpbXBsZW1lbnRzIFdlYmxvZ0VudHJ5RWRpdG9yIHsKLSAgICAKLSAgICAKLSAgICBwdWJsaWMgWGluaGFFZGl0b3IoKSB7fQorcHVibGljIGNsYXNzIFN1bW1lcm5vdGUgaW1wbGVtZW50cyBXZWJsb2dFbnRyeUVkaXRvciB7CisKKworICAgIHB1YmxpYyBTdW1tZXJub3RlKCkge30KICAgICAKICAgICAKICAgICBwdWJsaWMgU3RyaW5nIGdldElkKCkgewpAQCAtMzMsNyArMzIsNyBAQAogICAgIH0KICAgICAKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0gICAgICAgIHJldHVybiAiZWRpdG9yLnhpbmhhLm5hbWUiOworICAgICAgICByZXR1cm4gImVkaXRvci5zdW1tZXJub3RlLm5hbWUiOwogICAgIH0KICAgICAKICAgICBwdWJsaWMgU3RyaW5nIGdldEpzcFBhZ2UoKSB7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvY29yZS9wbHVnaW5zL1VJUGx1Z2luTWFuYWdlckltcGwuamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9jb3JlL3BsdWdpbnMvVUlQbHVnaW5NYW5hZ2VySW1wbC5qYXZhCmluZGV4IDZiMTYwMDkuLjBjZmY4ZWMgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9jb3JlL3BsdWdpbnMvVUlQbHVnaW5NYW5hZ2VySW1wbC5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9jb3JlL3BsdWdpbnMvVUlQbHVnaW5NYW5hZ2VySW1wbC5qYXZhCkBAIC0zOSw3ICszOSw3IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgVUlQbHVnaW5NYW5hZ2VySW1wbCBpbnN0YW5jZSA9IG51bGw7CiAgICAgCiAgICAgLy8gbGlzdCBvZiBjb25maWd1cmVkIFdlYmxvZ0VudHJ5RWRpdG9yIGNsYXNzZXMKLSAgICBNYXAgZWRpdG9ycyA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7CisgICAgcHJpdmF0ZSBNYXAgZWRpdG9ycyA9IG5ldyBMaW5rZWRIYXNoTWFwKCk7CiAgICAgCiAgICAgLy8gdGhlIGRlZmF1bHQgV2VibG9nRW50cnlFZGl0b3IKICAgICBXZWJsb2dFbnRyeUVkaXRvciBkZWZhdWx0RWRpdG9yID0gbnVsbDsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9jb3JlL3V0aWwvbWVudS9NZW51LmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvY29yZS91dGlsL21lbnUvTWVudS5qYXZhCmluZGV4IDhlOTgwNGUuLmRmYTMzMGQgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9jb3JlL3V0aWwvbWVudS9NZW51LmphdmEKKysrIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL2NvcmUvdXRpbC9tZW51L01lbnUuamF2YQpAQCAtMjcsMTAgKzI3LDEwIEBACiAgKi8KIHB1YmxpYyBjbGFzcyBNZW51IHsKICAgICAKLSAgICBwcml2YXRlIExpc3Q8TWVudVRhYj4gdGFicyA9IG5ldyBBcnJheUxpc3Q8TWVudVRhYj4oKTsKKyAgICBwcml2YXRlIExpc3Q8TWVudVRhYj4gdGFicyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgIAogICAgIAotICAgIHB1YmxpYyB2b2lkIGFkZFRhYihNZW51VGFiIHRhYikgeworICAgIHZvaWQgYWRkVGFiKE1lbnVUYWIgdGFiKSB7CiAgICAgICAgIHRoaXMudGFicy5hZGQodGFiKTsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvY29yZS91dGlsL21lbnUvTWVudUhlbHBlci5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL2NvcmUvdXRpbC9tZW51L01lbnVIZWxwZXIuamF2YQppbmRleCBmZmYwNmRkLi5lNDE2YmY1IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvY29yZS91dGlsL21lbnUvTWVudUhlbHBlci5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9jb3JlL3V0aWwvbWVudS9NZW51SGVscGVyLmphdmEKQEAgLTY3LDE3ICs2NywxMyBAQAogCiAgICAgICAgICAgICAvLyBwYXJzZSBtZW51cyBhbmQgY2FjaGUgc28gd2UgY2FuIGVmZmljaWVudGx5IHJldXNlIHRoZW0KICAgICAgICAgICAgIFN0cmluZyBtZW51ID0gImVkaXRvciI7Ci0gICAgICAgICAgICBQYXJzZWRNZW51IGVkaXRvck1lbnUgPSB1bm1hcnNoYWxsKAotICAgICAgICAgICAgICAgICAgICBtZW51LAotICAgICAgICAgICAgICAgICAgICBNZW51SGVscGVyLmNsYXNzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFJlc291cmNlQXNTdHJlYW0oIi9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvZWRpdG9yLW1lbnUueG1sIikpOworICAgICAgICAgICAgUGFyc2VkTWVudSBlZGl0b3JNZW51ID0gdW5tYXJzaGFsbCggbWVudSwKKyAgICAgICAgICAgICAgICBNZW51SGVscGVyLmNsYXNzLmdldFJlc291cmNlQXNTdHJlYW0oIi9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvZWRpdG9yLW1lbnUueG1sIikpOwogICAgICAgICAgICAgbWVudXMucHV0KG1lbnUsIGVkaXRvck1lbnUpOwogCiAgICAgICAgICAgICBtZW51ID0gImFkbWluIjsKLSAgICAgICAgICAgIFBhcnNlZE1lbnUgYWRtaW5NZW51ID0gdW5tYXJzaGFsbCgKLSAgICAgICAgICAgICAgICAgICAgbWVudSwKLSAgICAgICAgICAgICAgICAgICAgTWVudUhlbHBlci5jbGFzcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRSZXNvdXJjZUFzU3RyZWFtKCIvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvYWRtaW4vYWRtaW4tbWVudS54bWwiKSk7CisgICAgICAgICAgICBQYXJzZWRNZW51IGFkbWluTWVudSA9IHVubWFyc2hhbGwoIG1lbnUsCisgICAgICAgICAgICAgICAgTWVudUhlbHBlci5jbGFzcy5nZXRSZXNvdXJjZUFzU3RyZWFtKCIvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvYWRtaW4vYWRtaW4tbWVudS54bWwiKSk7CiAgICAgICAgICAgICBtZW51cy5wdXQobWVudSwgYWRtaW5NZW51KTsKIAogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKQEAgLTExMiw4ICsxMDgsNyBAQAogICAgICAgICBQYXJzZWRNZW51IG1lbnVDb25maWcgPSBtZW51cy5nZXQobWVudUlkKTsKICAgICAgICAgaWYgKG1lbnVDb25maWcgIT0gbnVsbCkgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBtZW51ID0gYnVpbGRNZW51KG1lbnVJZCwgbWVudUNvbmZpZywgY3VycmVudEFjdGlvbiwgdXNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdlYmxvZyk7CisgICAgICAgICAgICAgICAgbWVudSA9IGJ1aWxkTWVudShtZW51SWQsIG1lbnVDb25maWcsIGN1cnJlbnRBY3Rpb24sIHVzZXIsIHdlYmxvZyk7CiAgICAgICAgICAgICB9IGNhdGNoIChXZWJsb2dnZXJFeGNlcHRpb24gZXgpIHsKICAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkVSUk9SOiBmZXRoY2luZyB1c2VyIHJvbGVzIiwgZXgpOwogICAgICAgICAgICAgfQpAQCAtMTY3LDE2ICsxNjIsMTQgQEAKICAgICAgICAgICAgIGlmIChjb25maWdUYWIuZ2V0RW5hYmxlZFByb3BlcnR5KCkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGluY2x1ZGVUYWIgPSBnZXRCb29sZWFuUHJvcGVydHkoY29uZmlnVGFiLmdldEVuYWJsZWRQcm9wZXJ0eSgpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnVGFiLmdldERpc2FibGVkUHJvcGVydHkoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaW5jbHVkZVRhYiA9ICFnZXRCb29sZWFuUHJvcGVydHkoY29uZmlnVGFiCi0gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RGlzYWJsZWRQcm9wZXJ0eSgpKTsKKyAgICAgICAgICAgICAgICBpbmNsdWRlVGFiID0gIWdldEJvb2xlYW5Qcm9wZXJ0eShjb25maWdUYWIuZ2V0RGlzYWJsZWRQcm9wZXJ0eSgpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gdXNlciByb2xlcyBjaGVjawogICAgICAgICAgICAgaWYgKGluY2x1ZGVUYWIgJiYgY29uZmlnVGFiLmdldEdsb2JhbFBlcm1pc3Npb25BY3Rpb25zKCkgIT0gbnVsbAogICAgICAgICAgICAgICAgICAgICAmJiAhY29uZmlnVGFiLmdldEdsb2JhbFBlcm1pc3Npb25BY3Rpb25zKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgR2xvYmFsUGVybWlzc2lvbiBwZXJtID0gbmV3IEdsb2JhbFBlcm1pc3Npb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnVGFiLmdldEdsb2JhbFBlcm1pc3Npb25BY3Rpb25zKCkpOworICAgICAgICAgICAgICAgICAgICBHbG9iYWxQZXJtaXNzaW9uIHBlcm0gPSBuZXcgR2xvYmFsUGVybWlzc2lvbiggY29uZmlnVGFiLmdldEdsb2JhbFBlcm1pc3Npb25BY3Rpb25zKCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXVtZ3IuY2hlY2tQZXJtaXNzaW9uKHBlcm0sIHVzZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlVGFiID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE4OSw4ICsxODIsNyBAQAogICAgICAgICAgICAgLy8gd2VibG9nIHBlcm1pc3Npb25zIGNoZWNrCiAgICAgICAgICAgICBpZiAoaW5jbHVkZVRhYiAmJiBjb25maWdUYWIuZ2V0V2VibG9nUGVybWlzc2lvbkFjdGlvbnMoKSAhPSBudWxsCiAgICAgICAgICAgICAgICAgICAgICYmICFjb25maWdUYWIuZ2V0V2VibG9nUGVybWlzc2lvbkFjdGlvbnMoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBXZWJsb2dQZXJtaXNzaW9uIHBlcm0gPSBuZXcgV2VibG9nUGVybWlzc2lvbih3ZWJsb2csCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdUYWIuZ2V0V2VibG9nUGVybWlzc2lvbkFjdGlvbnMoKSk7CisgICAgICAgICAgICAgICAgV2VibG9nUGVybWlzc2lvbiBwZXJtID0gbmV3IFdlYmxvZ1Blcm1pc3Npb24od2VibG9nLCBjb25maWdUYWIuZ2V0V2VibG9nUGVybWlzc2lvbkFjdGlvbnMoKSk7CiAgICAgICAgICAgICAgICAgaW5jbHVkZVRhYiA9IHVtZ3IuY2hlY2tQZXJtaXNzaW9uKHBlcm0sIHVzZXIpOwogICAgICAgICAgICAgfQogCkBAIC0yMTEsMTggKzIwMywxNSBAQAogICAgICAgICAgICAgICAgICAgICBib29sZWFuIGluY2x1ZGVJdGVtID0gdHJ1ZTsKIAogICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnVGFiSXRlbS5nZXRFbmFibGVkUHJvcGVydHkoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlSXRlbSA9IGdldEJvb2xlYW5Qcm9wZXJ0eShjb25maWdUYWJJdGVtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRFbmFibGVkUHJvcGVydHkoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlSXRlbSA9IGdldEJvb2xlYW5Qcm9wZXJ0eShjb25maWdUYWJJdGVtLmdldEVuYWJsZWRQcm9wZXJ0eSgpKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWdUYWJJdGVtLmdldERpc2FibGVkUHJvcGVydHkoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlSXRlbSA9ICFnZXRCb29sZWFuUHJvcGVydHkoY29uZmlnVGFiSXRlbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RGlzYWJsZWRQcm9wZXJ0eSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVJdGVtID0gIWdldEJvb2xlYW5Qcm9wZXJ0eShjb25maWdUYWJJdGVtLmdldERpc2FibGVkUHJvcGVydHkoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAvLyB1c2VyIHJvbGVzIGNoZWNrCiAgICAgICAgICAgICAgICAgICAgIGlmIChpbmNsdWRlSXRlbQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvbmZpZ1RhYkl0ZW0uZ2V0R2xvYmFsUGVybWlzc2lvbkFjdGlvbnMoKSAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgIWNvbmZpZ1RhYkl0ZW0uZ2V0R2xvYmFsUGVybWlzc2lvbkFjdGlvbnMoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFjb25maWdUYWJJdGVtLmdldEdsb2JhbFBlcm1pc3Npb25BY3Rpb25zKCkgLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgR2xvYmFsUGVybWlzc2lvbiBwZXJtID0gbmV3IEdsb2JhbFBlcm1pc3Npb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ1RhYkl0ZW0uZ2V0R2xvYmFsUGVybWlzc2lvbkFjdGlvbnMoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVtZ3IuY2hlY2tQZXJtaXNzaW9uKHBlcm0sIHVzZXIpKSB7CkBAIC0yMzMsMTAgKzIyMiw4IEBACiAgICAgICAgICAgICAgICAgICAgIC8vIHdlYmxvZyBwZXJtaXNzaW9ucyBjaGVjawogICAgICAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZUl0ZW0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBjb25maWdUYWJJdGVtLmdldFdlYmxvZ1Blcm1pc3Npb25BY3Rpb25zKCkgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFjb25maWdUYWJJdGVtLmdldFdlYmxvZ1Blcm1pc3Npb25BY3Rpb25zKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFdlYmxvZ1Blcm1pc3Npb24gcGVybSA9IG5ldyBXZWJsb2dQZXJtaXNzaW9uKHdlYmxvZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnVGFiSXRlbS5nZXRXZWJsb2dQZXJtaXNzaW9uQWN0aW9ucygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhY29uZmlnVGFiSXRlbS5nZXRXZWJsb2dQZXJtaXNzaW9uQWN0aW9ucygpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgV2VibG9nUGVybWlzc2lvbiBwZXJtID0gbmV3IFdlYmxvZ1Blcm1pc3Npb24od2VibG9nLCBjb25maWdUYWJJdGVtLmdldFdlYmxvZ1Blcm1pc3Npb25BY3Rpb25zKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZUl0ZW0gPSB1bWdyLmNoZWNrUGVybWlzc2lvbihwZXJtLCB1c2VyKTsKICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC00NjEsOCArNDQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5nZXRBdHRyaWJ1dGVWYWx1ZSgiZ2xvYmFsUGVybXMiKSwgIiwiKSk7CiAgICAgICAgIH0KICAgICAgICAgdGFiSXRlbS5zZXRFbmFibGVkUHJvcGVydHkoZWxlbWVudC5nZXRBdHRyaWJ1dGVWYWx1ZSgiZW5hYmxlZFByb3BlcnR5IikpOwotICAgICAgICB0YWJJdGVtLnNldERpc2FibGVkUHJvcGVydHkoZWxlbWVudAotICAgICAgICAgICAgICAgIC5nZXRBdHRyaWJ1dGVWYWx1ZSgiZGlzYWJsZWRQcm9wZXJ0eSIpKTsKKyAgICAgICAgdGFiSXRlbS5zZXREaXNhYmxlZFByb3BlcnR5KGVsZW1lbnQuZ2V0QXR0cmlidXRlVmFsdWUoImRpc2FibGVkUHJvcGVydHkiKSk7CiAKICAgICAgICAgcmV0dXJuIHRhYkl0ZW07CiAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3JlbmRlcmluZy9XZWJsb2dSZXF1ZXN0TWFwcGVyLmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvcmVuZGVyaW5nL1dlYmxvZ1JlcXVlc3RNYXBwZXIuamF2YQppbmRleCBjZjNlYzY1Li5hZDhjMTcwIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvcmVuZGVyaW5nL1dlYmxvZ1JlcXVlc3RNYXBwZXIuamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvcmVuZGVyaW5nL1dlYmxvZ1JlcXVlc3RNYXBwZXIuamF2YQpAQCAtMTksNiArMTksNyBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkucmVuZGVyaW5nOwogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwpAQCAtMTMzLDEyICsxMzQsMTkgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIFN0cmluZyB3ZWJsb2dBYnNvbHV0ZVVSTCA9Ci0gICAgICAgICAgICBXZWJsb2dnZXJDb25maWcuZ2V0UHJvcGVydHkoIndlYmxvZy5hYnNvbHV0ZXVybC4iICsgd2VibG9nSGFuZGxlKTsKLSAgICAgICAgLy8gSWYgYW4gYWJzb2x1dGUgVVJMIGlzIHNwZWNpZmllZCBmb3IgdGhpcyB3ZWJsb2csIG1ha2Ugc3VyZSByZXF1ZXN0IFVSTCBtYXRjaGVzCi0gICAgICAgIGlmICh3ZWJsb2dBYnNvbHV0ZVVSTCAhPSBudWxsICYmICFyZXF1ZXN0LmdldFJlcXVlc3RVUkwoKS50b1N0cmluZygpLnN0YXJ0c1dpdGgod2VibG9nQWJzb2x1dGVVUkwpKSB7Ci0gICAgICAgICAgICBsb2cuZGVidWcoIlNLSVBQRUQgIiArIHdlYmxvZ0hhbmRsZSk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIGlzIHRoZXJlIGEgc3BlY2lhbCBob3N0bmFtZSBmb3IgdGhlIHNwZWNpZmllZCBob3N0bmFtZT8KKyAgICAgICAgU3RyaW5nIG11bHRpSG9zdE5hbWVVUkwgPSAgV2VibG9nZ2VyQ29uZmlnLmdldFByb3BlcnR5KCJ3ZWJsb2cuYWJzb2x1dGV1cmwuIiArIHdlYmxvZ0hhbmRsZSk7CisgICAgICAgIGlmICggbXVsdGlIb3N0TmFtZVVSTCAhPSBudWxsICkgeworCisgICAgICAgICAgICAvLyB0aGVyZSBpcywgc28gY2hlY2sgdGhhdCBjb25maWd1cmVkIGhvc3RuYW1lIG1hdGNoZXMgdGhlIG9uZSBpbiB0aGUgcmVxdWVzdAorICAgICAgICAgICAgVVJMIHdlYmxvZ0Fic29sdXRlVVJMID0gbmV3IFVSTCggbXVsdGlIb3N0TmFtZVVSTCApOworICAgICAgICAgICAgU3RyaW5nIGhlYWRlckhvc3QgPSByZXF1ZXN0LmdldEhlYWRlcigiSG9zdCIpOworICAgICAgICAgICAgU3RyaW5nIGNvbmZpZ0hvc3QgPSB3ZWJsb2dBYnNvbHV0ZVVSTC5nZXRIb3N0KCk7CisKKyAgICAgICAgICAgIGlmIChoZWFkZXJIb3N0ICE9IG51bGwgJiYgY29uZmlnSG9zdCAhPSBudWxsICYmICFoZWFkZXJIb3N0LmVxdWFscyhjb25maWdIb3N0KSkgeworICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiU0tJUFBFRCAiICsgd2VibG9nSGFuZGxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGxvZy5kZWJ1ZygiV0VCTE9HX1VSTCAiK3JlcXVlc3QuZ2V0U2VydmxldFBhdGgoKSk7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvcmVuZGVyaW5nL21vZGVsL1NpdGVNb2RlbC5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3JlbmRlcmluZy9tb2RlbC9TaXRlTW9kZWwuamF2YQppbmRleCBhZGExYjI0Li5lM2ZkN2IzIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvcmVuZGVyaW5nL21vZGVsL1NpdGVNb2RlbC5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9yZW5kZXJpbmcvbW9kZWwvU2l0ZU1vZGVsLmphdmEKQEAgLTMzLDYgKzMzLDcgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuVXNlck1hbmFnZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLldlYmxvZ0VudHJ5TWFuYWdlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuanBhLkpQQVdlYmxvZ0VudHJ5TWFuYWdlckltcGw7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLlRhZ1N0YXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZ0hpdENvdW50OwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5TdGF0Q291bnQ7CkBAIC0zODksMTAgKzM5MCw3IEBACiAgICAgICovCiAgICAgcHVibGljIExpc3Q8V2VibG9nV3JhcHBlcj4gZ2V0TmV3V2VibG9ncyhpbnQgc2luY2VEYXlzLCBpbnQgbGVuZ3RoKSB7CiAgICAgICAgIExpc3Q8V2VibG9nV3JhcHBlcj4gcmVzdWx0cyA9IG5ldyBBcnJheUxpc3Q8V2VibG9nV3JhcHBlcj4oKTsKLSAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgY2FsLnNldFRpbWUobmV3IERhdGUoKSk7Ci0gICAgICAgIGNhbC5hZGQoQ2FsZW5kYXIuREFURSwgLTEgKiBzaW5jZURheXMpOwotICAgICAgICBEYXRlIHN0YXJ0RGF0ZSA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgIERhdGUgc3RhcnREYXRlID0gSlBBV2VibG9nRW50cnlNYW5hZ2VySW1wbC5nZXRTdGFydERhdGVOb3coc2luY2VEYXlzKTsKICAgICAgICAgdHJ5IHsgICAgICAgICAgICAKICAgICAgICAgICAgIExpc3Q8V2VibG9nPiB3ZWJsb2dzID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dNYW5hZ2VyKCkuZ2V0V2VibG9ncygKICAgICAgICAgICAgICAgICBCb29sZWFuLlRSVUUsIEJvb2xlYW4uVFJVRSwgc3RhcnREYXRlLCBudWxsLCAwLCBsZW5ndGgpOwpAQCAtNDY2LDEwICs0NjQsNyBAQAogICAgICAqLwogICAgIHB1YmxpYyBMaXN0IGdldE1vc3RDb21tZW50ZWRXZWJsb2dzKGludCBzaW5jZURheXMgLCBpbnQgbGVuZ3RoKSB7CiAgICAgICAgIExpc3QgcmVzdWx0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgY2FsLnNldFRpbWUobmV3IERhdGUoKSk7Ci0gICAgICAgIGNhbC5hZGQoQ2FsZW5kYXIuREFURSwgLTEgKiBzaW5jZURheXMpOwotICAgICAgICBEYXRlIHN0YXJ0RGF0ZSA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgIERhdGUgc3RhcnREYXRlID0gSlBBV2VibG9nRW50cnlNYW5hZ2VySW1wbC5nZXRTdGFydERhdGVOb3coc2luY2VEYXlzKTsKICAgICAgICAgdHJ5IHsgICAgICAgICAgICAKICAgICAgICAgICAgIHJlc3VsdHMgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ01hbmFnZXIoKS5nZXRNb3N0Q29tbWVudGVkV2VibG9ncygKICAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlLCBuZXcgRGF0ZSgpLCAwLCBsZW5ndGgpOwpAQCAtNDkwLDEwICs0ODUsNyBAQAogICAgIHB1YmxpYyBMaXN0IGdldE1vc3RDb21tZW50ZWRXZWJsb2dFbnRyaWVzKAogICAgICAgICAgICAgTGlzdCBjYXRzLCBpbnQgc2luY2VEYXlzLCBpbnQgbGVuZ3RoKSB7CiAgICAgICAgIExpc3QgcmVzdWx0cyA9IG5ldyBBcnJheUxpc3QoKTsKLSAgICAgICAgQ2FsZW5kYXIgY2FsID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgY2FsLnNldFRpbWUobmV3IERhdGUoKSk7Ci0gICAgICAgIGNhbC5hZGQoQ2FsZW5kYXIuREFURSwgLTEgKiBzaW5jZURheXMpOwotICAgICAgICBEYXRlIHN0YXJ0RGF0ZSA9IGNhbC5nZXRUaW1lKCk7CisgICAgICAgIERhdGUgc3RhcnREYXRlID0gSlBBV2VibG9nRW50cnlNYW5hZ2VySW1wbC5nZXRTdGFydERhdGVOb3coc2luY2VEYXlzKTsKICAgICAgICAgdHJ5IHsgICAgICAgICAgICAKICAgICAgICAgICAgIFdlYmxvZ2dlciByb2xsZXIgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpOwogICAgICAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIHdtZ3IgPSByb2xsZXIuZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCk7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9hZG1pbi9DcmVhdGVVc2VyQmVhbi5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvYWRtaW4vQ3JlYXRlVXNlckJlYW4uamF2YQppbmRleCAyOWRmMzQ4Li41YTEzMGRiIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9hZG1pbi9DcmVhdGVVc2VyQmVhbi5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2FkbWluL0NyZWF0ZVVzZXJCZWFuLmphdmEKQEAgLTE4LDcgKzE4LDEwIEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuYWRtaW47CiAKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5XZWJsb2dnZXJFeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLldlYmxvZ2dlckZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLkdsb2JhbFBlcm1pc3Npb247CkBAIC00Miw4ICs0NSwxNiBAQAogICAgIHByaXZhdGUgQm9vbGVhbiBlbmFibGVkID0gQm9vbGVhbi5UUlVFOwogICAgIHByaXZhdGUgU3RyaW5nIGFjdGl2YXRpb25Db2RlID0gbnVsbDsKICAgICBwcml2YXRlIGJvb2xlYW4gYWRtaW5pc3RyYXRvciA9IGZhbHNlOwotICAgIAotICAgIAorICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0TGlzdCgpIHsKKyAgICAgICAgcmV0dXJuIGxpc3Q7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TGlzdChMaXN0PFN0cmluZz4gbGlzdCkgeworICAgICAgICB0aGlzLmxpc3QgPSBsaXN0OworICAgIH0KKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7CiAgICAgICAgIHJldHVybiBpZDsKICAgICB9CkBAIC0xNDAsNyArMTUxLDYgQEAKICAgICAgICAgdGhpcy5hZG1pbmlzdHJhdG9yID0gYWRtaW5pc3RyYXRvcjsKICAgICB9CiAgICAgCi0gICAgCiAgICAgcHVibGljIHZvaWQgY29weVRvKFVzZXIgZGF0YUhvbGRlcikgewogICAgICAgICAKICAgICAgICAgZGF0YUhvbGRlci5zZXRTY3JlZW5OYW1lKHRoaXMuc2NyZWVuTmFtZSk7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9hZG1pbi9HbG9iYWxDb25maWcuamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2FkbWluL0dsb2JhbENvbmZpZy5qYXZhCmluZGV4IDBlZTM2NDEuLjFlZmNkOGEgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2FkbWluL0dsb2JhbENvbmZpZy5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2FkbWluL0dsb2JhbENvbmZpZy5qYXZhCkBAIC0xOCwxMSArMTgsOSBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLmFkbWluOwogCi1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLio7CiBpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKKwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKQEAgLTM0LDEyICszMiwxMyBAQAogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5wbHVnaW5zLmNvbW1lbnQuV2VibG9nRW50cnlDb21tZW50UGx1Z2luOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5jb25maWcuV2VibG9nZ2VyUnVudGltZUNvbmZpZzsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuY29uZmlnLnJ1bnRpbWUuQ29uZmlnRGVmOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5jb25maWcucnVudGltZS5Qcm9wZXJ0eURlZjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuY29uZmlnLnJ1bnRpbWUuUnVudGltZUNvbmZpZ0RlZnM7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLkdsb2JhbFBlcm1pc3Npb247CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLlJ1bnRpbWVDb25maWdQcm9wZXJ0eTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLnV0aWwuVUlBY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMyLmNvbnZlbnRpb24uYW5ub3RhdGlvbi5BbGxvd2VkTWV0aG9kczsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudXRpbC5VdGlsaXRpZXM7CiBpbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMyLmludGVyY2VwdG9yLlBhcmFtZXRlckF3YXJlOwogaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzMi5pbnRlcmNlcHRvci5TZXJ2bGV0UmVxdWVzdEF3YXJlOwogCkBAIC00OSwyMSArNDgsMjEgQEAKICAqLwogLy8gVE9ETzogbWFrZSB0aGlzIHdvcmsgQEFsbG93ZWRNZXRob2RzKHsiZXhlY3V0ZSIsInNhdmUifSkKIHB1YmxpYyBjbGFzcyBHbG9iYWxDb25maWcgZXh0ZW5kcyBVSUFjdGlvbiBpbXBsZW1lbnRzIFBhcmFtZXRlckF3YXJlLCBTZXJ2bGV0UmVxdWVzdEF3YXJlIHsKLSAgICAKKwogICAgIHByaXZhdGUgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhHbG9iYWxDb25maWcuY2xhc3MpOwotICAgIAorCiAgICAgLy8gdGhlIHJlcXVlc3QgcGFyYW1ldGVycwogICAgIHByaXZhdGUgTWFwPFN0cmluZywgU3RyaW5nW10+IHBhcmFtcyA9IENvbGxlY3Rpb25zLmVtcHR5TWFwKCk7Ci0gICAgCisKICAgICAvLyBtYXAgb2YgY29uZmlnIHByb3BlcnRpZXMKICAgICBwcml2YXRlIE1hcDxTdHJpbmcsIFJ1bnRpbWVDb25maWdQcm9wZXJ0eT4gcHJvcGVydGllcyA9IENvbGxlY3Rpb25zLmVtcHR5TWFwKCk7Ci0gICAgCisKICAgICAvLyB0aGUgcnVudGltZSBjb25maWcgZGVmIHVzZWQgdG8gcG9wdWxhdGUgdGhlIGRpc3BsYXkKICAgICBwcml2YXRlIENvbmZpZ0RlZiBnbG9iYWxDb25maWdEZWYgPSBudWxsOwotICAgIAorCiAgICAgLy8gbGlzdCBvZiBjb21tZW50IHBsdWdpbnMKICAgICBwcml2YXRlIExpc3Q8V2VibG9nRW50cnlDb21tZW50UGx1Z2luPiBwbHVnaW5zTGlzdCA9IENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwotICAgIAorCiAgICAgLy8gY29tbWVudCBwbHVnaW5zIHRoYXQgYXJlIGVuYWJsZWQuICB0aGlzIGlzIHdoYXQgdGhlIGh0bWwgZm9ybSBzdWJtaXRzIHRvCiAgICAgcHJpdmF0ZSBTdHJpbmdbXSBjb21tZW50UGx1Z2lucyA9IG5ldyBTdHJpbmdbMF07CiAKQEAgLTcxLDI4ICs3MCwzMCBAQAogICAgIC8vIEdFVCBvbiB0aGUgR2xvYmFsQ29uZmlnIXNhdmUgVVJMIGFuZCB0aHVzIHNldHMgYWxsIGNoZWNrYm94ZXMgdG8gZmFsc2UKICAgICBwcml2YXRlIFN0cmluZyBodHRwTWV0aG9kID0gIkdFVCI7CiAKKyAgICBwcml2YXRlIFJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgiQXBwbGljYXRpb25SZXNvdXJjZXMiKTsKKwogICAgIC8vIHdlYmxvZ3MgZm9yIGZyb250cGFnZSBibG9nIGNob29zZXIKICAgICBwcml2YXRlIENvbGxlY3Rpb248V2VibG9nPiB3ZWJsb2dzOwogCi0gICAgCisKICAgICBwdWJsaWMgR2xvYmFsQ29uZmlnKCkgewogICAgICAgICB0aGlzLmFjdGlvbk5hbWUgPSAiZ2xvYmFsQ29uZmlnIjsKICAgICAgICAgdGhpcy5kZXNpcmVkTWVudSA9ICJhZG1pbiI7CiAgICAgICAgIHRoaXMucGFnZVRpdGxlID0gImNvbmZpZ0Zvcm0udGl0bGUiOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIGJvb2xlYW4gaXNXZWJsb2dSZXF1aXJlZCgpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gcmVxdWlyZWRHbG9iYWxQZXJtaXNzaW9uQWN0aW9ucygpIHsKICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QoR2xvYmFsUGVybWlzc2lvbi5BRE1JTik7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBQcmVwYXJlIGFjdGlvbiBieSBsb2FkaW5nIHJ1bnRpbWUgcHJvcGVydGllcyBtYXAuCiAgICAgICovCkBAIC0xMDYsOSArMTA3LDkgQEAKICAgICAgICAgICAgIGxvZy5lcnJvcigiRXJyb3IgZ2V0dGluZyBydW50aW1lIHByb3BlcnRpZXMgbWFwIiwgZXgpOwogICAgICAgICAgICAgYWRkRXJyb3IoIlVuZXhwZWN0ZWQgZXJyb3IgYWNjZXNzaW5nIFJvbGxlciBwcm9wZXJ0aWVzIik7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFdlYmxvZ01hbmFnZXIgbWdyID0gIFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nTWFuYWdlcigpOworICAgICAgICAgICAgV2VibG9nTWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ01hbmFnZXIoKTsKICAgICAgICAgICAgIHNldFdlYmxvZ3MobWdyLmdldFdlYmxvZ3ModHJ1ZSwgbnVsbCwgbnVsbCwgbnVsbCwgMCwgLTEpKTsKICAgICAgICAgfSBjYXRjaCAoV2VibG9nZ2VyRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIGdldHRpbmcgd2VibG9ncyIsIGV4KTsKQEAgLTEyMywyOCArMTI0LDI4IEBACiAgICAgICAgICAgICAgICAgc2V0R2xvYmFsQ29uZmlnRGVmKGNvbmZpZ0RlZik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gbG9hZCBwbHVnaW5zIGxpc3QKICAgICAgICAgUGx1Z2luTWFuYWdlciBwbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRQbHVnaW5NYW5hZ2VyKCk7CiAgICAgICAgIHNldFBsdWdpbnNMaXN0KHBtZ3IuZ2V0Q29tbWVudFBsdWdpbnMoKSk7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICAvKioKICAgICAgKiBEaXNwbGF5IGdsb2JhbCBwcm9wZXJ0aWVzIGVkaXRvciBmb3JtLgogICAgICAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHsKLSAgICAgICAgCisKICAgICAgICAgLy8gc2V0dXAgYXJyYXkgb2YgY29uZmlndXJlZCBwbHVnaW5zCiAgICAgICAgIGlmICghU3RyaW5nVXRpbHMuaXNFbXB0eShXZWJsb2dnZXJSdW50aW1lQ29uZmlnLmdldFByb3BlcnR5KCJ1c2Vycy5jb21tZW50cy5wbHVnaW5zIikpKSB7CiAgICAgICAgICAgICBzZXRDb21tZW50UGx1Z2lucyhTdHJpbmdVdGlscy5zcGxpdChXZWJsb2dnZXJSdW50aW1lQ29uZmlnLmdldFByb3BlcnR5KCJ1c2Vycy5jb21tZW50cy5wbHVnaW5zIiksICIsIikpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBTVUNDRVNTOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgLyoqCiAgICAgICogU2F2ZSBnbG9iYWwgcHJvcGVydGllcy4KICAgICAgKi8KQEAgLTE1Miw5OCArMTUzLDEzNSBAQAogICAgICAgICBpZiAoISJQT1NUIi5lcXVhbHMoaHR0cE1ldGhvZCkpIHsKICAgICAgICAgICAgIHJldHVybiBFUlJPUjsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBvbmx5IHNldCB2YWx1ZXMgZm9yIHByb3BlcnRpZXMgdGhhdCBhcmUgYWxyZWFkeSBkZWZpbmVkCiAgICAgICAgIFJ1bnRpbWVDb25maWdQcm9wZXJ0eSB1cGRQcm9wOwogICAgICAgICBTdHJpbmcgaW5jb21pbmdQcm9wOwogICAgICAgICBmb3IgKFN0cmluZyBwcm9wTmFtZSA6IGdldFByb3BlcnRpZXMoKS5rZXlTZXQoKSkgewogICAgICAgICAgICAgdXBkUHJvcCA9IGdldFByb3BlcnRpZXMoKS5nZXQocHJvcE5hbWUpOwogICAgICAgICAgICAgaW5jb21pbmdQcm9wID0gdGhpcy5nZXRQYXJhbWV0ZXIodXBkUHJvcC5nZXROYW1lKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsb2cuZGVidWcoIkNoZWNraW5nIHByb3BlcnR5IFsiK3Byb3BOYW1lKyJdIik7Ci0gICAgICAgICAgICBsb2cuZGVidWcoIlJlcXVlc3QgdmFsdWUgaXMgWyIraW5jb21pbmdQcm9wKyJdIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIHNvbWUgc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGJvb2xlYW5zCi0gICAgICAgICAgICAvLyB0aGlzIGlzIGEgYml0IGhhY2t5IHNpbmNlIHdlIGFyZSBhc3N1bWluZyB0aGF0IGFueSBwcm9wCi0gICAgICAgICAgICAvLyB3aXRoIGEgdmFsdWUgb2YgInRydWUiIG9yICJmYWxzZSIgaXMgbWVhbnQgdG8gYmUgYSBib29sZWFuCi0gICAgICAgICAgICAvLyBpdCBtYXkgbm90IGFsd2F5cyBiZSB0aGUgY2FzZSwgYnV0IHdlIHNob3VsZCBiZSBva2F5IGZvciBub3cKLSAgICAgICAgICAgIC8vIG51bGwgY2hlY2sgYmVsb3cgbmVlZGVkIHcvT3JhY2xlCi0gICAgICAgICAgICBpZiggdXBkUHJvcC5nZXRWYWx1ZSgpICE9IG51bGwKLSAgICAgICAgICAgICAgICAgICAgJiYgKCAgIHVwZFByb3AuZ2V0VmFsdWUoKS5lcXVhbHMoInRydWUiKSB8fCB1cGRQcm9wLmdldFZhbHVlKCkuZXF1YWxzKCJmYWxzZSIpCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCB1cGRQcm9wLmdldFZhbHVlKCkuZXF1YWxzKCJvbiIpICAgfHwgdXBkUHJvcC5nZXRWYWx1ZSgpLmVxdWFscygib2ZmIikKLSAgICAgICAgICAgICAgICAgICAgICAgKSkgewotICAgICAgICAgICAgICAgIGlmIChpbmNvbWluZ1Byb3AgIT0gbnVsbCAmJiAoaW5jb21pbmdQcm9wLmVxdWFsc0lnbm9yZUNhc2UoInRydWUiKSB8fCBpbmNvbWluZ1Byb3AuZXF1YWxzSWdub3JlQ2FzZSgib24iKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5jb21pbmdQcm9wID0gInRydWUiOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW5jb21pbmdQcm9wID0gImZhbHNlIjsKLSAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFByb3BlcnR5RGVmIHByb3BlcnR5RGVmID0gZ2xvYmFsQ29uZmlnRGVmLmdldFByb3BlcnR5RGVmKCBwcm9wTmFtZSApOworICAgICAgICAgICAgaWYgKCBwcm9wZXJ0eURlZiA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gd2UncmUgb25seSBwcm9jZXNzaW5nIGRlZmluZWQgcHJvcGVydGllcywgaS5lLiBvbmVzIHNob3duIGluIHRoZSBVSQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvLyBvbmx5IHdvcmsgb24gcHJvcHMgdGhhdCB3ZXJlIHN1Ym1pdHRlZCB3aXRoIHRoZSByZXF1ZXN0Ci0gICAgICAgICAgICBpZihpbmNvbWluZ1Byb3AgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiU2V0dGluZyBuZXcgdmFsdWUgZm9yIFsiK3Byb3BOYW1lKyJdIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gTk9URTogdGhlIG9sZCB3YXkgaGFkIHNvbWUgbG9jYWxlIHNlbnNpdGl2ZSB3YXkgdG8gZG8gdGhpcz8/Ci0gICAgICAgICAgICAgICAgdXBkUHJvcC5zZXRWYWx1ZShpbmNvbWluZ1Byb3AudHJpbSgpKTsKKyAgICAgICAgICAgIGlmICggcHJvcGVydHlEZWYuZ2V0VHlwZSgpLmVxdWFscygiYm9vbGVhbiIpICkgeworCisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluY29taW5nUHJvcCA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRQcm9wLnNldFZhbHVlKCJmYWxzZSIpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB2YWx1ZSA9IEJvb2xlYW4ucGFyc2VCb29sZWFuKGluY29taW5nUHJvcCk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cGRQcm9wLnNldFZhbHVlKEJvb2xlYW4udG9TdHJpbmcodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoIlNldCBib29sZWFuICIgKyBwcm9wTmFtZSArICIgPSAiICsgaW5jb21pbmdQcm9wKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoICggRXhjZXB0aW9uIG5mZSApIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByb3BEZXNjID0gYnVuZGxlLmdldFN0cmluZyggcHJvcGVydHlEZWYuZ2V0S2V5KCkgKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkRXJyb3IoIkNvbmZpZ0Zvcm0uaW52YWxpZEJvb2xlYW5Qcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdChwcm9wRGVzYywgcHJvcE5hbWUpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGluY29taW5nUHJvcCAhPSBudWxsICYmIHByb3BlcnR5RGVmLmdldFR5cGUoKS5lcXVhbHMoImludGVnZXIiKSApIHsKKworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIEludGVnZXIucGFyc2VJbnQoaW5jb21pbmdQcm9wKTsKKyAgICAgICAgICAgICAgICAgICAgdXBkUHJvcC5zZXRWYWx1ZShpbmNvbWluZ1Byb3ApOworICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoIlNldCBpbnRlZ2VyICIgKyBwcm9wTmFtZSArICIgPSAiICsgaW5jb21pbmdQcm9wKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoICggTnVtYmVyRm9ybWF0RXhjZXB0aW9uIG5mZSApIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByb3BEZXNjID0gYnVuZGxlLmdldFN0cmluZyggcHJvcGVydHlEZWYuZ2V0S2V5KCkgKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkRXJyb3IoIkNvbmZpZ0Zvcm0uaW52YWxpZEludGVnZXJQcm9wZXJ0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdChwcm9wRGVzYywgcHJvcE5hbWUpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGluY29taW5nUHJvcCAhPSBudWxsICYmIHByb3BlcnR5RGVmLmdldFR5cGUoKS5lcXVhbHMoImZsb2F0IikgKSB7CisKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBGbG9hdC5wYXJzZUZsb2F0KGluY29taW5nUHJvcCk7CisgICAgICAgICAgICAgICAgICAgIHVwZFByb3Auc2V0VmFsdWUoaW5jb21pbmdQcm9wKTsKKyAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJTZXQgZmxvYXQgIiArIHByb3BOYW1lICsgIiA9ICIgKyBpbmNvbWluZ1Byb3ApOworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKCBOdW1iZXJGb3JtYXRFeGNlcHRpb24gbmZlICkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJvcERlc2MgPSBidW5kbGUuZ2V0U3RyaW5nKHByb3BlcnR5RGVmLmdldEtleSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkRXJyb3IoIkNvbmZpZ0Zvcm0uaW52YWxpZEZsb2F0UHJvcGVydHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdChwcm9wRGVzYywgcHJvcE5hbWUpKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIGluY29taW5nUHJvcCAhPSBudWxsICl7CisgICAgICAgICAgICAgICAgdXBkUHJvcC5zZXRWYWx1ZSggaW5jb21pbmdQcm9wLnRyaW0oKSApOworICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiU2V0IHNvbWV0aGluZyAiICsgcHJvcE5hbWUgKyAiID0gIiArIGluY29taW5nUHJvcCk7CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHByb3BlcnR5RGVmLmdldE5hbWUoKS5lcXVhbHMoInVzZXJzLmNvbW1lbnRzLnBsdWdpbnMiKSApIHsKKyAgICAgICAgICAgICAgICAvLyBub3QgYSBwcm9ibGVtCisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYWRkRXJyb3IoIkNvbmZpZ0Zvcm0uaW52YWxpZFByb3BlcnR5IiwgcHJvcE5hbWUpOwogICAgICAgICAgICAgfQorCiAgICAgICAgIH0KLSAgICAgICAgCisKKyAgICAgICAgaWYgKCB0aGlzLmhhc0FjdGlvbkVycm9ycygpICkgeworICAgICAgICAgICAgcmV0dXJuIEVSUk9SOworICAgICAgICB9CisKICAgICAgICAgLy8gc3BlY2lhbCBoYW5kbGluZyBmb3IgY29tbWVudCBwbHVnaW5zCiAgICAgICAgIFN0cmluZyBlbmFibGVkUGx1Z2lucyA9ICIiOwotICAgICAgICBpZihnZXRDb21tZW50UGx1Z2lucygpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgaWYgKGdldENvbW1lbnRQbHVnaW5zKCkubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgZW5hYmxlZFBsdWdpbnMgPSBTdHJpbmdVdGlscy5qb2luKGdldENvbW1lbnRQbHVnaW5zKCksICIsIik7CiAgICAgICAgIH0KICAgICAgICAgUnVudGltZUNvbmZpZ1Byb3BlcnR5IHByb3AgPSBnZXRQcm9wZXJ0aWVzKCkuZ2V0KCJ1c2Vycy5jb21tZW50cy5wbHVnaW5zIik7CiAgICAgICAgIHByb3Auc2V0VmFsdWUoZW5hYmxlZFBsdWdpbnMpOwotICAgICAgICAgICAgCisKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vIHNhdmUgJ2VtIGFuZCBmbHVzaAogICAgICAgICAgICAgUHJvcGVydGllc01hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRQcm9wZXJ0aWVzTWFuYWdlcigpOwogICAgICAgICAgICAgbWdyLnNhdmVQcm9wZXJ0aWVzKGdldFByb3BlcnRpZXMoKSk7CiAgICAgICAgICAgICBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmZsdXNoKCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gbm90aWZ5IHVzZXIgb2Ygb3VyIHN1Y2Nlc3MKICAgICAgICAgICAgIGFkZE1lc3NhZ2UoImdlbmVyaWMuY2hhbmdlcy5zYXZlZCIpOwotICAgICAgICAgICAgCisKICAgICAgICAgfSBjYXRjaCAoV2VibG9nZ2VyRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIHNhdmluZyByb2xsZXIgcHJvcGVydGllcyIsIGV4KTsKICAgICAgICAgICAgIGFkZEVycm9yKCJnZW5lcmljLmVycm9yLmNoZWNrLmxvZ3MiKTsKICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAgICAgIHJldHVybiBTVUNDRVNTOwogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgcHVibGljIHZvaWQgc2V0UGFyYW1ldGVycyhNYXA8U3RyaW5nLCBTdHJpbmdbXT4gcGFyYW1ldGVycykgewogICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtZXRlcnM7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChsb2cuaXNEZWJ1Z0VuYWJsZWQoKSkgewogICAgICAgICAgICAgbG9nLmRlYnVnKCJQYXJhbWV0ZXIgbWFwOiIpOwogCiAgICAgICAgICAgICBmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIFN0cmluZ1tdPiBlbnRyeSA6IHBhcmFtZXRlcnMuZW50cnlTZXQoKSkgewotICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhlbnRyeS5nZXRLZXkoKSArICIgPSAiICsgZW50cnkuZ2V0VmFsdWUoKSk7CisgICAgICAgICAgICAgICAgbG9nLmRlYnVnKGVudHJ5LmdldEtleSgpICsgIiA9ICIgKyBVdGlsaXRpZXMuc3RyaW5nQXJyYXlUb1N0cmluZyhlbnRyeS5nZXRWYWx1ZSgpLCIsIikpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLy8gY29udmVuaWVuY2UgbWV0aG9kIGZvciBnZXR0aW5nIGEgc2luZ2xlIHBhcmFtZXRlciBhcyBhIFN0cmluZwogICAgIHByaXZhdGUgU3RyaW5nIGdldFBhcmFtZXRlcihTdHJpbmcga2V5KSB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZ1tdIHAgPSB0aGlzLnBhcmFtcy5nZXQoa2V5KTsKLSAgICAgICAgaWYocCAhPSBudWxsICYmIHAubGVuZ3RoID4gMCkgeworICAgICAgICBpZiAocCAhPSBudWxsICYmIHAubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgcmV0dXJuIHBbMF07CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQotICAgIAotICAgIAorCisKICAgICBwdWJsaWMgTWFwPFN0cmluZywgUnVudGltZUNvbmZpZ1Byb3BlcnR5PiBnZXRQcm9wZXJ0aWVzKCkgewogICAgICAgICByZXR1cm4gcHJvcGVydGllczsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzZXRQcm9wZXJ0aWVzKE1hcDxTdHJpbmcsIFJ1bnRpbWVDb25maWdQcm9wZXJ0eT4gcHJvcGVydGllcykgewogICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworICAgICAgICBmb3IgKE1hcC5FbnRyeTxTdHJpbmcsIFJ1bnRpbWVDb25maWdQcm9wZXJ0eT4gZW50cnkgOiBwcm9wZXJ0aWVzLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgIGxvZy5kZWJ1ZygiR290ICIgKyBlbnRyeS5nZXRLZXkoKSArICIgPSAiICsgZW50cnkuZ2V0VmFsdWUoKS5nZXRWYWx1ZSgpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBDb25maWdEZWYgZ2V0R2xvYmFsQ29uZmlnRGVmKCkgewpAQCAtMjUzLDcgKzI5MSw3IEBACiAgICAgcHVibGljIHZvaWQgc2V0R2xvYmFsQ29uZmlnRGVmKENvbmZpZ0RlZiBnbG9iYWxDb25maWdEZWYpIHsKICAgICAgICAgdGhpcy5nbG9iYWxDb25maWdEZWYgPSBnbG9iYWxDb25maWdEZWY7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIExpc3Q8V2VibG9nRW50cnlDb21tZW50UGx1Z2luPiBnZXRQbHVnaW5zTGlzdCgpIHsKICAgICAgICAgcmV0dXJuIHBsdWdpbnNMaXN0OwogICAgIH0KQEAgLTI2MSw3ICsyOTksNyBAQAogICAgIHB1YmxpYyB2b2lkIHNldFBsdWdpbnNMaXN0KExpc3Q8V2VibG9nRW50cnlDb21tZW50UGx1Z2luPiBwbHVnaW5zTGlzdCkgewogICAgICAgICB0aGlzLnBsdWdpbnNMaXN0ID0gcGx1Z2luc0xpc3Q7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIFN0cmluZ1tdIGdldENvbW1lbnRQbHVnaW5zKCkgewogICAgICAgICByZXR1cm4gY29tbWVudFBsdWdpbnMuY2xvbmUoKTsKICAgICB9CkBAIC0yNzMsNyArMzExLDcgQEAKICAgICBwdWJsaWMgdm9pZCBzZXRTZXJ2bGV0UmVxdWVzdChIdHRwU2VydmxldFJlcXVlc3QgcmVxKSB7CiAgICAgICAgIGh0dHBNZXRob2QgPSByZXEuZ2V0TWV0aG9kKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIENvbGxlY3Rpb248V2VibG9nPiBnZXRXZWJsb2dzKCkgewogICAgICAgICByZXR1cm4gd2VibG9nczsKICAgICB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9hZG1pbi9QaW5nVGFyZ2V0RWRpdC5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvYWRtaW4vUGluZ1RhcmdldEVkaXQuamF2YQppbmRleCAxYjVkMTNjLi5mYjdkZDRiIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9hZG1pbi9QaW5nVGFyZ2V0RWRpdC5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2FkbWluL1BpbmdUYXJnZXRFZGl0LmphdmEKQEAgLTc3LDE3ICs3NywxMCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIFN0cmluZyBleGVjdXRlKCkgewotICAgICAgICBpZiAoIWlzQWRkKCkpIHsKLSAgICAgICAgICAgIGdldEJlYW4oKS5jb3B5RnJvbShwaW5nVGFyZ2V0KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSU5QVVQ7Ci0gICAgfQotCiAgICAgLyoqCiAgICAgICogU2F2ZSBwaW5nIHRhcmdldC4KICAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIHNhdmUoKSB7CisgICAgcHVibGljIFN0cmluZyBleGVjdXRlKCkgewogICAgICAgICBteVZhbGlkYXRlKCk7CiAKICAgICAgICAgaWYgKCFoYXNBY3Rpb25FcnJvcnMoKSkgewpAQCAtOTgsOCArOTEsNyBAQAogICAgICAgICAgICAgICAgIHBpbmdUYXJnZXRNZ3Iuc2F2ZVBpbmdUYXJnZXQocGluZ1RhcmdldCk7CiAgICAgICAgICAgICAgICAgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5mbHVzaCgpOwogCi0gICAgICAgICAgICAgICAgYWRkTWVzc2FnZShpc0FkZCgpID8gInBpbmdUYXJnZXQuY3JlYXRlZCIgOiAicGluZ1RhcmdldC51cGRhdGVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBpbmdUYXJnZXQuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICBhZGRNZXNzYWdlKGlzQWRkKCkgPyAicGluZ1RhcmdldC5jcmVhdGVkIiA6ICJwaW5nVGFyZ2V0LnVwZGF0ZWQiLCBwaW5nVGFyZ2V0LmdldE5hbWUoKSk7CiAKICAgICAgICAgICAgICAgICByZXR1cm4gU1VDQ0VTUzsKICAgICAgICAgICAgIH0gY2F0Y2ggKFdlYmxvZ2dlckV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvYWRtaW4vVXNlckFkbWluLmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9hZG1pbi9Vc2VyQWRtaW4uamF2YQppbmRleCA2MzYxM2E1Li4yOWIwZTI0IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9hZG1pbi9Vc2VyQWRtaW4uamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9hZG1pbi9Vc2VyQWRtaW4uamF2YQpAQCAtMTgsNiArMTgsNyBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLmFkbWluOwogCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKQEAgLTMzLDcgKzM0LDggQEAKICAqLwogLy8gVE9ETzogbWFrZSB0aGlzIHdvcmsgQEFsbG93ZWRNZXRob2RzKHsiZXhlY3V0ZSJ9KQogcHVibGljIGNsYXNzIFVzZXJBZG1pbiBleHRlbmRzIFVJQWN0aW9uIHsKLSAgICAKKyAgICBwcml2YXRlIENyZWF0ZVVzZXJCZWFuIGJlYW4gPSBuZXcgQ3JlYXRlVXNlckJlYW4oKTsKKwogICAgIHB1YmxpYyBVc2VyQWRtaW4oKSB7CiAgICAgICAgIHRoaXMuYWN0aW9uTmFtZSA9ICJ1c2VyQWRtaW4iOwogICAgICAgICB0aGlzLmRlc2lyZWRNZW51ID0gImFkbWluIjsKQEAgLTUyLDE1ICs1NCwyNCBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgLyoqCi0gICAgICogU2hvdyB1c2VyIGFkbWluIHNlYXJjaCBwYWdlLgotICAgICAqLworICAgIC8vIHNob3cgdXNlciBhZG1pbiBzZWFyY2ggcGFnZQogICAgIHB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHsKICAgICAgICAgcmV0dXJuIFNVQ0NFU1M7CiAgICAgfQogCisgICAgcHVibGljIFN0cmluZyBlZGl0KCkgeworICAgICAgICByZXR1cm4gImVkaXQiOworICAgIH0KKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0QXV0aE1ldGhvZCgpIHsKICAgICAgICAgcmV0dXJuIGF1dGhNZXRob2QubmFtZSgpOwogICAgIH0KIAorICAgIHB1YmxpYyBDcmVhdGVVc2VyQmVhbiBnZXRCZWFuKCkgeworICAgICAgICByZXR1cm4gYmVhbjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRCZWFuKENyZWF0ZVVzZXJCZWFuIGJlYW4pIHsKKyAgICAgICAgdGhpcy5iZWFuID0gYmVhbjsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9hZG1pbi9Vc2VyRWRpdC5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvYWRtaW4vVXNlckVkaXQuamF2YQppbmRleCBhZmRjNTIyLi43M2Q1YjAxIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9hZG1pbi9Vc2VyRWRpdC5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2FkbWluL1VzZXJFZGl0LmphdmEKQEAgLTgwLDIwICs4MCwyNSBAQAogCiAgICAgLy8gcHJlcGFyZSBmb3IgYWN0aW9uIGJ5IGxvYWRpbmcgdXNlciBvYmplY3Qgd2UgYXJlIG1vZGlmeWluZwogICAgIHB1YmxpYyB2b2lkIG15UHJlcGFyZSgpIHsKKwogICAgICAgICBpZiAoaXNBZGQoKSkgewotICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBVc2VyCiAgICAgICAgICAgICB1c2VyID0gbmV3IFVzZXIoKTsKKwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAvLyBsb2FkIHRoZSB1c2VyIG9iamVjdCB3ZSBhcmUgbW9kaWZ5aW5nCiAgICAgICAgICAgICAgICAgVXNlck1hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRVc2VyTWFuYWdlcigpOwotICAgICAgICAgICAgICAgIGlmIChiZWFuLmdldElkKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmICggIVN0cmluZ1V0aWxzLmlzRW1wdHkoIGdldEJlYW4oKS5nZXRJZCgpICkgKSB7CisKICAgICAgICAgICAgICAgICAgICAgLy8gYWN0aW9uIGNhbWUgZnJvbSBDcmVhdGVVc2VyIG9yIHJldHVybiBmcm9tIE1vZGlmeVVzZXIKICAgICAgICAgICAgICAgICAgICAgdXNlciA9IG1nci5nZXRVc2VyKGdldEJlYW4oKS5nZXRJZCgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJlYW4uZ2V0VXNlck5hbWUoKSAhPSBudWxsKSB7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCAhU3RyaW5nVXRpbHMuaXNFbXB0eSggYmVhbi5nZXRVc2VyTmFtZSgpKSkgeworCiAgICAgICAgICAgICAgICAgICAgIC8vIGFjdGlvbiBjYW1lIGZyb20gVXNlckFkbWluIHNjcmVlbi4KICAgICAgICAgICAgICAgICAgICAgdXNlciA9IG1nci5nZXRVc2VyQnlVc2VyTmFtZShnZXRCZWFuKCkuZ2V0VXNlck5hbWUoKSwgbnVsbCk7CiAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGxvZy5lcnJvcigiRXJyb3IgbG9va2luZyB1cCB1c2VyIChpZC91c2VybmFtZSkgOiIgKyBiZWFuLmdldElkKCkgKyAiLyIgKyBiZWFuLmdldFVzZXJOYW1lKCksIGUpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvYWpheC9UaGVtZURhdGFTZXJ2bGV0LmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9hamF4L1RoZW1lRGF0YVNlcnZsZXQuamF2YQppbmRleCAzYzY3NGM5Li45N2JmZjE1IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9hamF4L1RoZW1lRGF0YVNlcnZsZXQuamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9hamF4L1RoZW1lRGF0YVNlcnZsZXQuamF2YQpAQCAtNTcsOCArNTcsNyBAQAogCiAgICAgICAgIHRoZW1lSWQgPSByZXF1ZXN0LmdldFBhcmFtZXRlcigidGhlbWUiKTsKIAotICAgICAgICBUaGVtZU1hbmFnZXIgdGhlbWVNZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpCi0gICAgICAgICAgICAgICAgLmdldFRoZW1lTWFuYWdlcigpOworICAgICAgICBUaGVtZU1hbmFnZXIgdGhlbWVNZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFRoZW1lTWFuYWdlcigpOwogICAgICAgICBpZiAodGhlbWVJZCA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aGVtZXMgPSB0aGVtZU1nci5nZXRFbmFibGVkVGhlbWVzTGlzdCgpOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvY29yZS9JbnN0YWxsLmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9jb3JlL0luc3RhbGwuamF2YQppbmRleCBlNjdjYzg1Li4xMmRlMjY3IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9jb3JlL0luc3RhbGwuamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9jb3JlL0luc3RhbGwuamF2YQpAQCAtMzgsNyArMzgsNyBAQAogLyoqCiAgKiBXYWxrIHVzZXIgdGhyb3VnaCBpbnN0YWxsIHByb2Nlc3MuCiAgKi8KLS8vIFRPRE86IG1ha2UgdGhpcyB3b3JrIEBBbGxvd2VkTWV0aG9kcyh7ImV4ZWN1dGUiLCJjcmVhdGUiLCJ1cGRhdGUiLCJib290c3RyYXAifSkKKy8vIFRPRE86IG1ha2UgdGhpcyB3b3JrIEBBbGxvd2VkTWV0aG9kcyh7ImV4ZWN1dGUiLCJjcmVhdGUiLCJ1cGdyYWRlIiwiYm9vdHN0cmFwIn0pCiBwdWJsaWMgY2xhc3MgSW5zdGFsbCBleHRlbmRzIFVJQWN0aW9uIHsKIAogICAgIHByaXZhdGUgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhJbnN0YWxsLmNsYXNzKTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2NvcmUvUmVnaXN0ZXIuamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2NvcmUvUmVnaXN0ZXIuamF2YQppbmRleCBmM2I5MDZjLi5iYWFkYzVlIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9jb3JlL1JlZ2lzdGVyLmphdmEKKysrIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvY29yZS9SZWdpc3Rlci5qYXZhCkBAIC0yMTEsMjYgKzIxMSw3IEBACiAgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAmIHNhdmUgdGhlIGFjdGl2YXRpb24gZGF0YQogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgaW5BY3RpdmF0aW9uQ29kZSA9IFVVSUQucmFuZG9tVVVJRCgpLnRvU3RyaW5nKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1nci5nZXRVc2VyQnlBY3RpdmF0aW9uQ29kZShpbkFjdGl2YXRpb25Db2RlKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGUgKmV4dHJlbWVseSogdW5saWtlbHkgZXZlbnQgdGhhdCB3ZSBnZW5lcmF0ZSBhbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWN0aXZhdGlvbiBjb2RlIHRoYXQgaXMgYWxyZWFkeSB1c2UsIHdlJ2xsIHJldHJ5IDMgdGltZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtT2ZSZXRyaWVzID0gMzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1PZlJldHJpZXMgPCAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtT2ZSZXRyaWVzID0gMTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtT2ZSZXRyaWVzOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkFjdGl2YXRpb25Db2RlID0gVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWdyLmdldFVzZXJCeUFjdGl2YXRpb25Db2RlKGluQWN0aXZhdGlvbkNvZGUpID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5BY3RpdmF0aW9uQ29kZSA9IG51bGw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gbW9yZSB1bmxpa2VseSBldmVudCB0aGF0IHRocmVlIHJldHJpZXMgaXNuJ3QgZW5vdWdoCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5BY3RpdmF0aW9uQ29kZSA9PSBudWxsKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV2VibG9nZ2VyRXhjZXB0aW9uKCJlcnJvci5hZGQudXNlci5hY3RpdmF0aW9uQ29kZUluVXNlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaW5BY3RpdmF0aW9uQ29kZSA9IHJldHJ5QWN0aXZhdGlvbkNvZGUobWdyLCBpbkFjdGl2YXRpb25Db2RlKTsKICAgICAgICAgICAgICAgICAgICAgdWQuc2V0QWN0aXZhdGlvbkNvZGUoaW5BY3RpdmF0aW9uQ29kZSk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNDgsMTYgKzIyOSw3IEBACiAgICAgICAgICAgICAgICAgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5mbHVzaCgpOwogCiAgICAgICAgICAgICAgICAgLy8gbm93IHNlbmQgYWN0aXZhdGlvbiBlbWFpbCBpZiBuZWNlc3NhcnkKLSAgICAgICAgICAgICAgICBpZiAoYWN0aXZhdGlvbkVuYWJsZWQgJiYgdWQuZ2V0QWN0aXZhdGlvbkNvZGUoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZW5kIGFjdGl2YXRpb24gbWFpbCB0byB0aGUgdXNlcgotICAgICAgICAgICAgICAgICAgICAgICAgTWFpbFV0aWwuc2VuZFVzZXJBY3RpdmF0aW9uRW1haWwodWQpOwotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChXZWJsb2dnZXJFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5lcnJvcigiRXJyb3Igc2VuZGluZyBhY3RpdmF0aW9uIGVtYWlsIHRvIC0gIiArIHVkLmdldEVtYWlsQWRkcmVzcygpLCBleCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmF0aW9uU3RhdHVzKCJwZW5kaW5nIik7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNlbmRBY3RpdmF0aW9uTWFpbElmTmVlZGVkKHVkLCBhY3RpdmF0aW9uRW5hYmxlZCk7CiAKICAgICAgICAgICAgICAgICAvLyBJbnZhbGlkYXRlIHNlc3Npb24sIG90aGVyd2lzZSBuZXcgdXNlciB3aG8gd2FzIG9yaWdpbmFsbHkKICAgICAgICAgICAgICAgICAvLyBhdXRoZW50aWNhdGVkIHZpYSBMREFQL1NTTyB3aWxsIHJlbWFpbiBsb2dnZWQgaW4gYnV0CkBAIC0yNzgsNiArMjUwLDQzIEBACiAgICAgICAgIAogICAgICAgICByZXR1cm4gSU5QVVQ7CiAgICAgfQorCisJcHJpdmF0ZSBTdHJpbmcgcmV0cnlBY3RpdmF0aW9uQ29kZShVc2VyTWFuYWdlciBtZ3IsIFN0cmluZyBpbkFjdGl2YXRpb25Db2RlKSB0aHJvd3MgV2VibG9nZ2VyRXhjZXB0aW9uIHsKKwkJaWYgKG1nci5nZXRVc2VyQnlBY3RpdmF0aW9uQ29kZShpbkFjdGl2YXRpb25Db2RlKSAhPSBudWxsKSB7CisJCSAgICAvLyBJbiB0aGUgKmV4dHJlbWVseSogdW5saWtlbHkgZXZlbnQgdGhhdCB3ZSBnZW5lcmF0ZSBhbgorCQkgICAgLy8gYWN0aXZhdGlvbiBjb2RlIHRoYXQgaXMgYWxyZWFkeSB1c2UsIHdlJ2xsIHJldHJ5IDMgdGltZXMuCisJCSAgICBpbnQgbnVtT2ZSZXRyaWVzID0gMzsKKwkJICAgIGlmIChudW1PZlJldHJpZXMgPCAxKSB7CisJCSAgICAgICAgbnVtT2ZSZXRyaWVzID0gMTsKKwkJICAgIH0KKwkJICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtT2ZSZXRyaWVzOyBpKyspIHsKKwkJICAgICAgICBpbkFjdGl2YXRpb25Db2RlID0gVVVJRC5yYW5kb21VVUlEKCkudG9TdHJpbmcoKTsKKwkJICAgICAgICBpZiAobWdyLmdldFVzZXJCeUFjdGl2YXRpb25Db2RlKGluQWN0aXZhdGlvbkNvZGUpID09IG51bGwpIHsKKwkJICAgICAgICAgICAgYnJlYWs7CisJCSAgICAgICAgfSBlbHNlIHsKKwkJICAgICAgICAgICAgaW5BY3RpdmF0aW9uQ29kZSA9IG51bGw7CisJCSAgICAgICAgfQorCQkgICAgfQorCQkgICAgLy8gSW4gbW9yZSB1bmxpa2VseSBldmVudCB0aGF0IHRocmVlIHJldHJpZXMgaXNuJ3QgZW5vdWdoCisJCSAgICBpZiAoaW5BY3RpdmF0aW9uQ29kZSA9PSBudWxsKXsKKwkJICAgICAgICB0aHJvdyBuZXcgV2VibG9nZ2VyRXhjZXB0aW9uKCJlcnJvci5hZGQudXNlci5hY3RpdmF0aW9uQ29kZUluVXNlIik7CisJCSAgICB9CisJCX0KKwkJcmV0dXJuIGluQWN0aXZhdGlvbkNvZGU7CisJfQorCisJcHJpdmF0ZSB2b2lkIHNlbmRBY3RpdmF0aW9uTWFpbElmTmVlZGVkKFVzZXIgdWQsIGJvb2xlYW4gYWN0aXZhdGlvbkVuYWJsZWQpIHsKKwkJaWYgKGFjdGl2YXRpb25FbmFibGVkICYmIHVkLmdldEFjdGl2YXRpb25Db2RlKCkgIT0gbnVsbCkgeworCQkgICAgdHJ5IHsKKwkJICAgICAgICAvLyBzZW5kIGFjdGl2YXRpb24gbWFpbCB0byB0aGUgdXNlcgorCQkgICAgICAgIE1haWxVdGlsLnNlbmRVc2VyQWN0aXZhdGlvbkVtYWlsKHVkKTsKKwkJICAgIH0gY2F0Y2ggKFdlYmxvZ2dlckV4Y2VwdGlvbiBleCkgeworCQkgICAgICAgIGxvZy5lcnJvcigiRXJyb3Igc2VuZGluZyBhY3RpdmF0aW9uIGVtYWlsIHRvIC0gIiArIHVkLmdldEVtYWlsQWRkcmVzcygpLCBleCk7CisJCSAgICB9CisKKwkJICAgIHNldEFjdGl2YXRpb25TdGF0dXMoInBlbmRpbmciKTsKKwkJfQorCX0KICAgICAKICAgICAKICAgICBAU2tpcFZhbGlkYXRpb24KQEAgLTMzMSwxOSArMzQwLDcgQEAKICAgICAgICAgICAgIFN0cmluZyB1bnVzZWRQYXNzd29yZCA9IFdlYmxvZ2dlckNvbmZpZy5nZXRQcm9wZXJ0eSgidXNlcnMucGFzc3dvcmRzLmV4dGVybmFsQXV0aFZhbHVlIiwgIjxleHRlcm5hbEF1dGg+Iik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFByZXNlcnZlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwgU3ByaW5nIFNlY3VyaXR5IGNhc2UKLSAgICAgICAgICAgIFVzZXIgZnJvbVNTT1VzZXIgPSBDdXN0b21Vc2VyUmVnaXN0cnkuZ2V0VXNlckRldGFpbHNGcm9tQXV0aGVudGljYXRpb24oZ2V0U2VydmxldFJlcXVlc3QoKSk7Ci0gICAgICAgICAgICBpZiAoZnJvbVNTT1VzZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGdldEJlYW4oKS5zZXRQYXNzd29yZFRleHQodW51c2VkUGFzc3dvcmQpOwotICAgICAgICAgICAgICAgIGdldEJlYW4oKS5zZXRQYXNzd29yZENvbmZpcm0odW51c2VkUGFzc3dvcmQpOwotICAgICAgICAgICAgICAgIGdldEJlYW4oKS5zZXRVc2VyTmFtZShmcm9tU1NPVXNlci5nZXRVc2VyTmFtZSgpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gUHJlc2VydmUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLCBDTUEgY2FzZSAgICAgICAgICAgICAKLSAgICAgICAgICAgIGVsc2UgaWYgKGdldFNlcnZsZXRSZXF1ZXN0KCkuZ2V0VXNlclByaW5jaXBhbCgpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBnZXRCZWFuKCkuc2V0VXNlck5hbWUoZ2V0U2VydmxldFJlcXVlc3QoKS5nZXRVc2VyUHJpbmNpcGFsKCkuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBnZXRCZWFuKCkuc2V0UGFzc3dvcmRUZXh0KHVudXNlZFBhc3N3b3JkKTsKLSAgICAgICAgICAgICAgICBnZXRCZWFuKCkuc2V0UGFzc3dvcmRDb25maXJtKHVudXNlZFBhc3N3b3JkKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByZXNlcnZlVXNlcm5hbWVBbmRQYXNzd29yZCh1bnVzZWRQYXNzd29yZCk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFN0cmluZyBhbGxvd2VkID0gV2VibG9nZ2VyQ29uZmlnLmdldFByb3BlcnR5KCJ1c2VybmFtZS5hbGxvd2VkQ2hhcnMiKTsKQEAgLTM3OCw3ICszNzUsMzAgQEAKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgLy8gY2hlY2sgdGhhdCB1c2VybmFtZSBpcyBub3QgdGFrZW4KLSAgICAgICAgaWYgKCFTdHJpbmdVdGlscy5pc0VtcHR5KGdldEJlYW4oKS5nZXRVc2VyTmFtZSgpKSkgeworICAgICAgICBjaGVja1VzZXJuYW1lKCk7CisKKyAgICAgICAgLy8gY2hlY2sgdGhhdCBPcGVuSUQsIGlmIHByb3ZpZGVkLCBpcyBub3QgdGFrZW4KKyAgICAgICAgY2hlY2tPcGVuSUQoKTsKKyAgICB9CisKKwlwcml2YXRlIHZvaWQgcHJlc2VydmVVc2VybmFtZUFuZFBhc3N3b3JkKFN0cmluZyB1bnVzZWRQYXNzd29yZCkgeworCQlVc2VyIGZyb21TU09Vc2VyID0gQ3VzdG9tVXNlclJlZ2lzdHJ5LmdldFVzZXJEZXRhaWxzRnJvbUF1dGhlbnRpY2F0aW9uKGdldFNlcnZsZXRSZXF1ZXN0KCkpOworCQlpZiAoZnJvbVNTT1VzZXIgIT0gbnVsbCkgeworCQkgICAgZ2V0QmVhbigpLnNldFBhc3N3b3JkVGV4dCh1bnVzZWRQYXNzd29yZCk7CisJCSAgICBnZXRCZWFuKCkuc2V0UGFzc3dvcmRDb25maXJtKHVudXNlZFBhc3N3b3JkKTsKKwkJICAgIGdldEJlYW4oKS5zZXRVc2VyTmFtZShmcm9tU1NPVXNlci5nZXRVc2VyTmFtZSgpKTsKKwkJfQorCisJCS8vIFByZXNlcnZlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwgQ01BIGNhc2UgICAgICAgICAgICAgCisJCWVsc2UgaWYgKGdldFNlcnZsZXRSZXF1ZXN0KCkuZ2V0VXNlclByaW5jaXBhbCgpICE9IG51bGwpIHsKKwkJICAgIGdldEJlYW4oKS5zZXRVc2VyTmFtZShnZXRTZXJ2bGV0UmVxdWVzdCgpLmdldFVzZXJQcmluY2lwYWwoKS5nZXROYW1lKCkpOworCQkgICAgZ2V0QmVhbigpLnNldFBhc3N3b3JkVGV4dCh1bnVzZWRQYXNzd29yZCk7CisJCSAgICBnZXRCZWFuKCkuc2V0UGFzc3dvcmRDb25maXJtKHVudXNlZFBhc3N3b3JkKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBjaGVja1VzZXJuYW1lKCkgeworCQlpZiAoIVN0cmluZ1V0aWxzLmlzRW1wdHkoZ2V0QmVhbigpLmdldFVzZXJOYW1lKCkpKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFVzZXJNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0VXNlck1hbmFnZXIoKTsKICAgICAgICAgICAgICAgICBpZiAobWdyLmdldFVzZXJCeVVzZXJOYW1lKGdldEJlYW4oKS5nZXRVc2VyTmFtZSgpLCBudWxsKSAhPSBudWxsKSB7CkBAIC0zOTEsOSArNDExLDEwIEBACiAgICAgICAgICAgICAgICAgYWRkRXJyb3IoImdlbmVyaWMuZXJyb3IuY2hlY2subG9ncyIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisJfQogCi0gICAgICAgIC8vIGNoZWNrIHRoYXQgT3BlbklELCBpZiBwcm92aWRlZCwgaXMgbm90IHRha2VuCi0gICAgICAgIGlmICghU3RyaW5nVXRpbHMuaXNFbXB0eShnZXRCZWFuKCkuZ2V0T3BlbklkVXJsKCkpKSB7CisJcHJpdmF0ZSB2b2lkIGNoZWNrT3BlbklEKCkgeworCQlpZiAoIVN0cmluZ1V0aWxzLmlzRW1wdHkoZ2V0QmVhbigpLmdldE9wZW5JZFVybCgpKSkgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBVc2VyTWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFVzZXJNYW5hZ2VyKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1nci5nZXRVc2VyQnlPcGVuSWRVcmwoZ2V0QmVhbigpLmdldE9wZW5JZFVybCgpKSAhPSBudWxsKSB7CkBAIC00MDYsNyArNDI3LDcgQEAKICAgICAgICAgICAgICAgICBhZGRFcnJvcigiZ2VuZXJpYy5lcnJvci5jaGVjay5sb2dzIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9CisJfQogICAgIAogICAgIAogICAgIHB1YmxpYyBIdHRwU2VydmxldFJlcXVlc3QgZ2V0U2VydmxldFJlcXVlc3QoKSB7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvQm9va21hcmtFZGl0LmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvQm9va21hcmtFZGl0LmphdmEKaW5kZXggODUyZWM3Mi4uYzNlNTY0MiAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL0Jvb2ttYXJrRWRpdC5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9Cb29rbWFya0VkaXQuamF2YQpAQCAtOTcsMTUgKzk3LDE0IEBACiAgICAgcHVibGljIFN0cmluZyBzYXZlKCkgewogICAgICAgICBteVZhbGlkYXRlKCk7CiAKLSAgICAgICAgaWYoIWhhc0FjdGlvbkVycm9ycygpKSB7CisgICAgICAgIGlmICghaGFzQWN0aW9uRXJyb3JzKCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgZ2V0QmVhbigpLmNvcHlUbyhib29rbWFyayk7CiAgICAgICAgICAgICAgICAgQm9va21hcmtNYW5hZ2VyIGJtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldEJvb2ttYXJrTWFuYWdlcigpOwogICAgICAgICAgICAgICAgIGJtZ3Iuc2F2ZUJvb2ttYXJrKGJvb2ttYXJrKTsKICAgICAgICAgICAgICAgICBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmZsdXNoKCk7CiAgICAgICAgICAgICAgICAgQ2FjaGVNYW5hZ2VyLmludmFsaWRhdGUoYm9va21hcmspOwotICAgICAgICAgICAgICAgIGFkZE1lc3NhZ2UoaXNBZGQoKSA/ICJib29rbWFya0Zvcm0uY3JlYXRlZCIgOiAiYm9va21hcmtGb3JtLnVwZGF0ZWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Qm9va21hcmsoKS5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIGFkZE1lc3NhZ2UoaXNBZGQoKSA/ICJib29rbWFya0Zvcm0uY3JlYXRlZCIgOiAiYm9va21hcmtGb3JtLnVwZGF0ZWQiLCBnZXRCb29rbWFyaygpLmdldE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNVQ0NFU1M7CiAKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CkBAIC0xNDksNCArMTQ4LDUgQEAKICAgICBwdWJsaWMgV2VibG9nQm9va21hcmsgZ2V0Qm9va21hcmsoKSB7CiAgICAgICAgIHJldHVybiBib29rbWFyazsKICAgICB9CisKIH0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9Cb29rbWFya3MuamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9Cb29rbWFya3MuamF2YQppbmRleCBmNjk1MDcyLi5jYzg2YjQ0IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvQm9va21hcmtzLmphdmEKKysrIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL0Jvb2ttYXJrcy5qYXZhCkBAIC02OSw4ICs2OSw3IEBACiAKICAgICBwdWJsaWMgdm9pZCBteVByZXBhcmUoKSB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBCb29rbWFya01hbmFnZXIgYm1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkKLSAgICAgICAgICAgICAgICAgICAgLmdldEJvb2ttYXJrTWFuYWdlcigpOworICAgICAgICAgICAgQm9va21hcmtNYW5hZ2VyIGJtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldEJvb2ttYXJrTWFuYWdlcigpOwogICAgICAgICAgICAgaWYgKCFTdHJpbmdVdGlscy5pc0VtcHR5KGdldEZvbGRlcklkKCkpKSB7CiAgICAgICAgICAgICAgICAgc2V0Rm9sZGVyKGJtZ3IuZ2V0Rm9sZGVyKGdldEZvbGRlcklkKCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xNjAsNyArMTU5LDEzIEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBCb29rbWFya01hbmFnZXIgYm1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0Qm9va21hcmtNYW5hZ2VyKCk7CiAgICAgICAgICAgICBXZWJsb2dCb29rbWFya0ZvbGRlciBmZCA9IGJtZ3IuZ2V0Rm9sZGVyKGdldEZvbGRlcklkKCkpOworCiAgICAgICAgICAgICBpZiAoZmQgIT0gbnVsbCkgeworCisgICAgICAgICAgICAgICAgaWYgKCAiZGVmYXVsdCIuZXF1YWxzKCBmZC5nZXROYW1lKCkgKSApIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkRXJyb3IoIkNhbm5vdCBkZWxldGUgZGVmYXVsdCBib29rbWFyayIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhlY3V0ZSgpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBibWdyLnJlbW92ZUZvbGRlcihmZCk7CiAKICAgICAgICAgICAgICAgICAvLyBmbHVzaCBjaGFuZ2VzCkBAIC0xNzMsNiArMTc4LDcgQEAKICAgICAgICAgICAgICAgICBzZXRGb2xkZXIoYm1nci5nZXREZWZhdWx0Rm9sZGVyKGdldEFjdGlvbldlYmxvZygpKSk7CiAgICAgICAgICAgICAgICAgc2V0Rm9sZGVySWQoZ2V0Rm9sZGVyKCkuZ2V0SWQoKSk7CiAgICAgICAgICAgICB9CisKICAgICAgICAgfSBjYXRjaCAoV2VibG9nZ2VyRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIGRlbGV0aW5nIGZvbGRlciIsIGV4KTsKICAgICAgICAgfQpAQCAtMjEwLDE3ICsyMTYsMTYgQEAKICAgICBwdWJsaWMgU3RyaW5nIG1vdmUoKSB7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIEJvb2ttYXJrTWFuYWdlciBibWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKQotICAgICAgICAgICAgICAgICAgICAuZ2V0Qm9va21hcmtNYW5hZ2VyKCk7CisgICAgICAgICAgICBCb29rbWFya01hbmFnZXIgYm1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0Qm9va21hcmtNYW5hZ2VyKCk7CiAKICAgICAgICAgICAgIGlmIChsb2cuaXNEZWJ1Z0VuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiTW92aW5nIGJvb2ttYXJrcyB0byBmb2xkZXIgLSAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIGdldFRhcmdldEZvbGRlcklkKCkpOworICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiTW92aW5nIGJvb2ttYXJrcyB0byBmb2xkZXIgLSAiICsgZ2V0VGFyZ2V0Rm9sZGVySWQoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIE1vdmUgYm9va21hcmtzIHRvIG5ldyBwYXJlbnQgZm9sZGVyLgogICAgICAgICAgICAgV2VibG9nQm9va21hcmtGb2xkZXIgbmV3Rm9sZGVyID0gYm1nci5nZXRGb2xkZXIoZ2V0VGFyZ2V0Rm9sZGVySWQoKSk7CiAgICAgICAgICAgICBTdHJpbmcgYm9va21hcmtzW10gPSBnZXRTZWxlY3RlZEJvb2ttYXJrcygpOworCiAgICAgICAgICAgICBpZiAobnVsbCAhPSBib29rbWFya3MgJiYgYm9va21hcmtzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGJvb2ttYXJrcy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgICAgICBXZWJsb2dCb29rbWFyayBiZCA9IGJtZ3IuZ2V0Qm9va21hcmsoYm9va21hcmtzW2pdKTsKQEAgLTI4Myw2ICsyODgsOSBAQAogCiAgICAgcHVibGljIHZvaWQgc2V0Rm9sZGVyKFdlYmxvZ0Jvb2ttYXJrRm9sZGVyIGZvbGRlcikgewogICAgICAgICB0aGlzLmZvbGRlciA9IGZvbGRlcjsKKyAgICAgICAgaWYgKCBmb2xkZXIgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIHRoaXMuZm9sZGVySWQgPSBmb2xkZXIuZ2V0SWQoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Vmlld0ZvbGRlcklkKCkgewpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL0NhdGVnb3J5RWRpdC5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL0NhdGVnb3J5RWRpdC5qYXZhCmluZGV4IDlkMmM1MTcuLjE3ZGM5OWEgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9DYXRlZ29yeUVkaXQuamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvQ2F0ZWdvcnlFZGl0LmphdmEKQEAgLTMwLDcgKzMwLDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nUGVybWlzc2lvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkuc3RydXRzMi51dGlsLlVJQWN0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51dGlsLmNhY2hlLkNhY2hlTWFuYWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnN0cnV0czIuY29udmVudGlvbi5hbm5vdGF0aW9uLkFsbG93ZWRNZXRob2RzOwogaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzMi5pbnRlcmNlcHRvci52YWxpZGF0aW9uLlNraXBWYWxpZGF0aW9uOwogCiAKQEAgLTY0LDEwICs2MywxMiBAQAogICAgIAogICAgIAogICAgIHB1YmxpYyB2b2lkIG15UHJlcGFyZSgpIHsKLSAgICAgICAgaWYgKFN0cmluZ1V0aWxzLmlzRW1wdHkoYmVhbi5nZXRJZCgpKSkgeworCisgICAgICAgIGlmICggaXNBZGQoKSApIHsKICAgICAgICAgICAgIC8vIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBuZXcsIG5vdC15ZXQtc2F2ZWQgY2F0ZWdvcnkKICAgICAgICAgICAgIGNhdGVnb3J5ID0gbmV3IFdlYmxvZ0NhdGVnb3J5KCk7CiAgICAgICAgICAgICBjYXRlZ29yeS5zZXRXZWJsb2coZ2V0QWN0aW9uV2VibG9nKCkpOworCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIFdlYmxvZ0VudHJ5TWFuYWdlciB3bWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dFbnRyeU1hbmFnZXIoKTsKQEAgLTkyLDcgKzkzLDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIGJvb2xlYW4gaXNBZGQoKSB7Ci0gICAgICAgIHJldHVybiBhY3Rpb25OYW1lLmVxdWFscygiY2F0ZWdvcnlBZGQiKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZ1V0aWxzLmlzRW1wdHkoIGJlYW4uZ2V0SWQoKSApOwogICAgIH0KIAogICAgIC8qKgpAQCAtMTM0LDEwICsxMzUsMTYgQEAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBteVZhbGlkYXRlKCkgewotICAgICAgICAvLyBtYWtlIHN1cmUgbmV3IG5hbWUgaXMgbm90IGEgZHVwbGljYXRlIG9mIGFuIGV4aXN0aW5nIGNhdGVnb3J5Ci0gICAgICAgIGlmICgoaXNBZGQoKSB8fCAhY2F0ZWdvcnkuZ2V0TmFtZSgpLmVxdWFscyhiZWFuLmdldE5hbWUoKSkpICYmCi0gICAgICAgICAgICBjYXRlZ29yeS5nZXRXZWJsb2coKS5oYXNDYXRlZ29yeShiZWFuLmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgIGFkZEVycm9yKCJjYXRlZ29yeUZvcm0uZXJyb3IuZHVwbGljYXRlTmFtZSIsIGJlYW4uZ2V0TmFtZSgpKTsKKworICAgICAgICBpZiAoIGlzQWRkKCkgKSB7CisgICAgICAgICAgICBpZiAoIGdldEFjdGlvbldlYmxvZygpLmhhc0NhdGVnb3J5KCBiZWFuLmdldE5hbWUoKSApICkgeworICAgICAgICAgICAgICAgIGFkZEVycm9yKCJjYXRlZ29yeUZvcm0uZXJyb3IuZHVwbGljYXRlTmFtZSIsIGJlYW4uZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFdlYmxvZ0NhdGVnb3J5IHdjID0gZ2V0QWN0aW9uV2VibG9nKCkuZ2V0V2VibG9nQ2F0ZWdvcnkoYmVhbi5nZXROYW1lKCkpOworICAgICAgICAgICAgaWYgKCB3YyAhPSBudWxsICYmICF3Yy5nZXRJZCgpLmVxdWFscyggYmVhbi5nZXRJZCgpICkpIHsKKyAgICAgICAgICAgICAgICBhZGRFcnJvcigiY2F0ZWdvcnlGb3JtLmVycm9yLmR1cGxpY2F0ZU5hbWUiLCBiZWFuLmdldE5hbWUoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9Db21tZW50cy5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL0NvbW1lbnRzLmphdmEKaW5kZXggMTBjNjYzYS4uM2FlZTVkZiAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL0NvbW1lbnRzLmphdmEKKysrIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL0NvbW1lbnRzLmphdmEKQEAgLTEwNSwxNCArMTA1LDcgQEAKICAgICAgICAgICAgICAgICBzZXRRdWVyeUVudHJ5KHdtZ3IuZ2V0V2VibG9nRW50cnkoZ2V0QmVhbigpLmdldEVudHJ5SWQoKSkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBDb21tZW50U2VhcmNoQ3JpdGVyaWEgY3NjID0gbmV3IENvbW1lbnRTZWFyY2hDcml0ZXJpYSgpOwotICAgICAgICAgICAgY3NjLnNldFdlYmxvZyhnZXRBY3Rpb25XZWJsb2coKSk7Ci0gICAgICAgICAgICBjc2Muc2V0RW50cnkoZ2V0UXVlcnlFbnRyeSgpKTsKLSAgICAgICAgICAgIGNzYy5zZXRTZWFyY2hUZXh0KGdldEJlYW4oKS5nZXRTZWFyY2hTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjc2Muc2V0U3RhcnREYXRlKGdldEJlYW4oKS5nZXRTdGFydERhdGUoKSk7Ci0gICAgICAgICAgICBjc2Muc2V0RW5kRGF0ZShnZXRCZWFuKCkuZ2V0RW5kRGF0ZSgpKTsKLSAgICAgICAgICAgIGNzYy5zZXRTdGF0dXMoZ2V0QmVhbigpLmdldFN0YXR1cygpKTsKLSAgICAgICAgICAgIGNzYy5zZXRSZXZlcnNlQ2hyb25vKHRydWUpOworICAgICAgICAgICAgQ29tbWVudFNlYXJjaENyaXRlcmlhIGNzYyA9IGdldENvbW1lbnRTZWFyY2hDcml0ZXJpYSgpOwogICAgICAgICAgICAgY3NjLnNldE9mZnNldChnZXRCZWFuKCkuZ2V0UGFnZSgpICogQ09VTlQpOwogICAgICAgICAgICAgY3NjLnNldE1heFJlc3VsdHMoQ09VTlQgKyAxKTsKIApAQCAtMTYyLDExICsxNTUsOCBAQAogICAgICAgICAgICAgcGFyYW1zLnB1dCgiYmVhbi5hcHByb3ZlZFN0cmluZyIsIGdldEJlYW4oKS5nZXRBcHByb3ZlZFN0cmluZygpKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBXZWJsb2dnZXJGYWN0b3J5Ci0gICAgICAgICAgICAgICAgLmdldFdlYmxvZ2dlcigpCi0gICAgICAgICAgICAgICAgLmdldFVybFN0cmF0ZWd5KCkKLSAgICAgICAgICAgICAgICAuZ2V0QWN0aW9uVVJMKCJjb21tZW50cyIsICIvcm9sbGVyLXVpL2F1dGhvcmluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRBY3Rpb25XZWJsb2coKS5nZXRIYW5kbGUoKSwgcGFyYW1zLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFVybFN0cmF0ZWd5KCkKKyAgICAgICAgICAgIC5nZXRBY3Rpb25VUkwoImNvbW1lbnRzIiwgIi9yb2xsZXItdWkvYXV0aG9yaW5nIiwgZ2V0QWN0aW9uV2VibG9nKCkuZ2V0SGFuZGxlKCksIHBhcmFtcywgZmFsc2UpOwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHsKQEAgLTE5MiwxNiArMTgyLDkgQEAKICAgICAgICAgZ2V0QmVhbigpLmxvYWRDaGVja2JveGVzKGdldFBhZ2VyKCkuZ2V0SXRlbXMoKSk7CiAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFdlYmxvZ0VudHJ5TWFuYWdlciB3bWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKQotICAgICAgICAgICAgICAgICAgICAuZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCk7CisgICAgICAgICAgICBXZWJsb2dFbnRyeU1hbmFnZXIgd21nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCk7CiAKLSAgICAgICAgICAgIENvbW1lbnRTZWFyY2hDcml0ZXJpYSBjc2MgPSBuZXcgQ29tbWVudFNlYXJjaENyaXRlcmlhKCk7Ci0gICAgICAgICAgICBjc2Muc2V0V2VibG9nKGdldEFjdGlvbldlYmxvZygpKTsKLSAgICAgICAgICAgIGNzYy5zZXRTZWFyY2hUZXh0KGdldEJlYW4oKS5nZXRTZWFyY2hTdHJpbmcoKSk7Ci0gICAgICAgICAgICBjc2Muc2V0U3RhcnREYXRlKGdldEJlYW4oKS5nZXRTdGFydERhdGUoKSk7Ci0gICAgICAgICAgICBjc2Muc2V0RW5kRGF0ZShnZXRCZWFuKCkuZ2V0RW5kRGF0ZSgpKTsKLSAgICAgICAgICAgIGNzYy5zZXRTdGF0dXMoZ2V0QmVhbigpLmdldFN0YXR1cygpKTsKLSAgICAgICAgICAgIGNzYy5zZXRSZXZlcnNlQ2hyb25vKHRydWUpOworICAgICAgICAgICAgQ29tbWVudFNlYXJjaENyaXRlcmlhIGNzYyA9IGdldENvbW1lbnRTZWFyY2hDcml0ZXJpYSgpOwogCiAgICAgICAgICAgICBMaXN0PFdlYmxvZ0VudHJ5Q29tbWVudD4gYWxsTWF0Y2hpbmdDb21tZW50cyA9IHdtZ3IuZ2V0Q29tbWVudHMoY3NjKTsKICAgICAgICAgICAgIGlmIChhbGxNYXRjaGluZ0NvbW1lbnRzLnNpemUoKSA+IENPVU5UKSB7CkBAIC0yMTYsMjggKzE5OSwzMyBAQAogICAgICAgICByZXR1cm4gTElTVDsKICAgICB9CiAKKyAgICBwcml2YXRlIENvbW1lbnRTZWFyY2hDcml0ZXJpYSBnZXRDb21tZW50U2VhcmNoQ3JpdGVyaWEoKSB7CisgICAgICAgIENvbW1lbnRTZWFyY2hDcml0ZXJpYSBjb21tZW50U2VhcmNoQ3JpdGVyaWEgPSBuZXcgQ29tbWVudFNlYXJjaENyaXRlcmlhKCk7CisgICAgICAgIGNvbW1lbnRTZWFyY2hDcml0ZXJpYS5zZXRXZWJsb2coZ2V0QWN0aW9uV2VibG9nKCkpOworICAgICAgICBjb21tZW50U2VhcmNoQ3JpdGVyaWEuc2V0RW50cnkoZ2V0UXVlcnlFbnRyeSgpKTsKKyAgICAgICAgY29tbWVudFNlYXJjaENyaXRlcmlhLnNldFNlYXJjaFRleHQoZ2V0QmVhbigpLmdldFNlYXJjaFN0cmluZygpKTsKKyAgICAgICAgY29tbWVudFNlYXJjaENyaXRlcmlhLnNldFN0YXJ0RGF0ZShnZXRCZWFuKCkuZ2V0U3RhcnREYXRlKCkpOworICAgICAgICBjb21tZW50U2VhcmNoQ3JpdGVyaWEuc2V0RW5kRGF0ZShnZXRCZWFuKCkuZ2V0RW5kRGF0ZSgpKTsKKyAgICAgICAgY29tbWVudFNlYXJjaENyaXRlcmlhLnNldFN0YXR1cyhnZXRCZWFuKCkuZ2V0U3RhdHVzKCkpOworICAgICAgICBjb21tZW50U2VhcmNoQ3JpdGVyaWEuc2V0UmV2ZXJzZUNocm9ubyh0cnVlKTsKKyAgICAgICAgcmV0dXJuIGNvbW1lbnRTZWFyY2hDcml0ZXJpYTsKKyAgICB9CisKKwogICAgIC8qKgogICAgICAqIEJ1bGsgZGVsZXRlIGFsbCBjb21tZW50cyBtYXRjaGluZyBxdWVyeSBjcml0ZXJpYS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGRlbGV0ZSgpIHsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIHdtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpCi0gICAgICAgICAgICAgICAgICAgIC5nZXRXZWJsb2dFbnRyeU1hbmFnZXIoKTsKKyAgICAgICAgICAgIFdlYmxvZ0VudHJ5TWFuYWdlciB3bWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dFbnRyeU1hbmFnZXIoKTsKIAogICAgICAgICAgICAgLy8gaWYgc2VhcmNoIGlzIGVuYWJsZWQsIHdlIHdpbGwgbmVlZCB0byByZS1pbmRleCBhbGwgZW50cmllcyB3aXRoCiAgICAgICAgICAgICAvLyBjb21tZW50cyB0aGF0IGhhdmUgYmVlbiBkZWxldGVkLCBzbyBidWlsZCBhIGxpc3Qgb2YgdGhvc2UgZW50cmllcwogICAgICAgICAgICAgU2V0PFdlYmxvZ0VudHJ5PiByZWluZGV4RW50cmllcyA9IG5ldyBIYXNoU2V0PFdlYmxvZ0VudHJ5PigpOwogICAgICAgICAgICAgaWYgKFdlYmxvZ2dlckNvbmZpZy5nZXRCb29sZWFuUHJvcGVydHkoInNlYXJjaC5lbmFibGVkIikpIHsKIAotICAgICAgICAgICAgICAgIENvbW1lbnRTZWFyY2hDcml0ZXJpYSBjc2MgPSBuZXcgQ29tbWVudFNlYXJjaENyaXRlcmlhKCk7Ci0gICAgICAgICAgICAgICAgY3NjLnNldFdlYmxvZyhnZXRBY3Rpb25XZWJsb2coKSk7Ci0gICAgICAgICAgICAgICAgY3NjLnNldEVudHJ5KGdldFF1ZXJ5RW50cnkoKSk7Ci0gICAgICAgICAgICAgICAgY3NjLnNldFNlYXJjaFRleHQoZ2V0QmVhbigpLmdldFNlYXJjaFN0cmluZygpKTsKLSAgICAgICAgICAgICAgICBjc2Muc2V0U3RhcnREYXRlKGdldEJlYW4oKS5nZXRTdGFydERhdGUoKSk7Ci0gICAgICAgICAgICAgICAgY3NjLnNldEVuZERhdGUoZ2V0QmVhbigpLmdldEVuZERhdGUoKSk7Ci0gICAgICAgICAgICAgICAgY3NjLnNldFN0YXR1cyhnZXRCZWFuKCkuZ2V0U3RhdHVzKCkpOwotICAgICAgICAgICAgICAgIGNzYy5zZXRSZXZlcnNlQ2hyb25vKHRydWUpOworICAgICAgICAgICAgICAgIENvbW1lbnRTZWFyY2hDcml0ZXJpYSBjc2MgPSBnZXRDb21tZW50U2VhcmNoQ3JpdGVyaWEoKTsKIAogICAgICAgICAgICAgICAgIExpc3Q8V2VibG9nRW50cnlDb21tZW50PiB0YXJnZXR0ZWQgPSB3bWdyLmdldENvbW1lbnRzKGNzYyk7CiAgICAgICAgICAgICAgICAgZm9yIChXZWJsb2dFbnRyeUNvbW1lbnQgY29tbWVudCA6IHRhcmdldHRlZCkgewpAQCAtMjUxLDggKzIzOSw3IEBACiAKICAgICAgICAgICAgIC8vIGlmIHdlJ3ZlIGdvdCBlbnRyaWVzIHRvIHJlaW5kZXggdGhlbiBkbyBzbwogICAgICAgICAgICAgaWYgKCFyZWluZGV4RW50cmllcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBJbmRleE1hbmFnZXIgaW1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRJbmRleE1hbmFnZXIoKTsKKyAgICAgICAgICAgICAgICBJbmRleE1hbmFnZXIgaW1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0SW5kZXhNYW5hZ2VyKCk7CiAgICAgICAgICAgICAgICAgZm9yIChXZWJsb2dFbnRyeSBlbnRyeSA6IHJlaW5kZXhFbnRyaWVzKSB7CiAgICAgICAgICAgICAgICAgICAgIGltZ3IuYWRkRW50cnlSZUluZGV4T3BlcmF0aW9uKGVudHJ5KTsKICAgICAgICAgICAgICAgICB9CkBAIC0yODAsOCArMjY3LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIHVwZGF0ZSgpIHsKIAogICAgICAgICB0cnkgewotICAgICAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIHdtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpCi0gICAgICAgICAgICAgICAgICAgIC5nZXRXZWJsb2dFbnRyeU1hbmFnZXIoKTsKKyAgICAgICAgICAgIFdlYmxvZ0VudHJ5TWFuYWdlciB3bWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dFbnRyeU1hbmFnZXIoKTsKIAogICAgICAgICAgICAgTGlzdDxXZWJsb2dFbnRyeUNvbW1lbnQ+IGZsdXNoTGlzdCA9IG5ldyBBcnJheUxpc3Q8V2VibG9nRW50cnlDb21tZW50PigpOwogCkBAIC0zMTAsOCArMjk2LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gbG9vcCB0aHJvdWdoIElEcyBvZiBhbGwgY29tbWVudHMgZGlzcGxheWVkIG9uIHBhZ2UKLSAgICAgICAgICAgIExpc3Q8U3RyaW5nPiBhcHByb3ZlZElkcyA9IEFycmF5cy5hc0xpc3QoZ2V0QmVhbigpCi0gICAgICAgICAgICAgICAgICAgIC5nZXRBcHByb3ZlZENvbW1lbnRzKCkpOworICAgICAgICAgICAgTGlzdDxTdHJpbmc+IGFwcHJvdmVkSWRzID0gQXJyYXlzLmFzTGlzdChnZXRCZWFuKCkuZ2V0QXBwcm92ZWRDb21tZW50cygpKTsKICAgICAgICAgICAgIExpc3Q8U3RyaW5nPiBzcGFtSWRzID0gQXJyYXlzLmFzTGlzdChnZXRCZWFuKCkuZ2V0U3BhbUNvbW1lbnRzKCkpOwogICAgICAgICAgICAgbG9nLmRlYnVnKHNwYW1JZHMuc2l6ZSgpICsgIiBjb21tZW50cyBtYXJrZWQgYXMgc3BhbSIpOwogCkBAIC00MjYsMTQgKzQxMSwxMCBAQAogICAgICAgICBMaXN0PEtleVZhbHVlT2JqZWN0PiBvcHRzID0gbmV3IEFycmF5TGlzdDxLZXlWYWx1ZU9iamVjdD4oKTsKIAogICAgICAgICBvcHRzLmFkZChuZXcgS2V5VmFsdWVPYmplY3QoIkFMTCIsIGdldFRleHQoImdlbmVyaWMuYWxsIikpKTsKLSAgICAgICAgb3B0cy5hZGQobmV3IEtleVZhbHVlT2JqZWN0KCJPTkxZX1BFTkRJTkciLAotICAgICAgICAgICAgICAgIGdldFRleHQoImNvbW1lbnRNYW5hZ2VtZW50Lm9ubHlQZW5kaW5nIikpKTsKLSAgICAgICAgb3B0cy5hZGQobmV3IEtleVZhbHVlT2JqZWN0KCJPTkxZX0FQUFJPVkVEIiwKLSAgICAgICAgICAgICAgICBnZXRUZXh0KCJjb21tZW50TWFuYWdlbWVudC5vbmx5QXBwcm92ZWQiKSkpOwotICAgICAgICBvcHRzLmFkZChuZXcgS2V5VmFsdWVPYmplY3QoIk9OTFlfRElTQVBQUk9WRUQiLAotICAgICAgICAgICAgICAgIGdldFRleHQoImNvbW1lbnRNYW5hZ2VtZW50Lm9ubHlEaXNhcHByb3ZlZCIpKSk7Ci0gICAgICAgIG9wdHMuYWRkKG5ldyBLZXlWYWx1ZU9iamVjdCgiT05MWV9TUEFNIiwKLSAgICAgICAgICAgICAgICBnZXRUZXh0KCJjb21tZW50TWFuYWdlbWVudC5vbmx5U3BhbSIpKSk7CisgICAgICAgIG9wdHMuYWRkKG5ldyBLZXlWYWx1ZU9iamVjdCgiT05MWV9QRU5ESU5HIiwgZ2V0VGV4dCgiY29tbWVudE1hbmFnZW1lbnQub25seVBlbmRpbmciKSkpOworICAgICAgICBvcHRzLmFkZChuZXcgS2V5VmFsdWVPYmplY3QoIk9OTFlfQVBQUk9WRUQiLCBnZXRUZXh0KCJjb21tZW50TWFuYWdlbWVudC5vbmx5QXBwcm92ZWQiKSkpOworICAgICAgICBvcHRzLmFkZChuZXcgS2V5VmFsdWVPYmplY3QoIk9OTFlfRElTQVBQUk9WRUQiLCBnZXRUZXh0KCJjb21tZW50TWFuYWdlbWVudC5vbmx5RGlzYXBwcm92ZWQiKSkpOworICAgICAgICBvcHRzLmFkZChuZXcgS2V5VmFsdWVPYmplY3QoIk9OTFlfU1BBTSIsIGdldFRleHQoImNvbW1lbnRNYW5hZ2VtZW50Lm9ubHlTcGFtIikpKTsKIAogICAgICAgICByZXR1cm4gb3B0czsKICAgICB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvRW50cnlCZWFuLmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvRW50cnlCZWFuLmphdmEKaW5kZXggYzU4ZDZhNy4uNmU5Mjg5OCAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL0VudHJ5QmVhbi5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9FbnRyeUJlYW4uamF2YQpAQCAtMTg5LDYgKzE4OSw5IEBACiAgICAgCiAgICAgcHVibGljIHZvaWQgc2V0Q29tbWVudERheXMoSW50ZWdlciBjb21tZW50RGF5cykgewogICAgICAgICB0aGlzLmNvbW1lbnREYXlzID0gY29tbWVudERheXM7CisgICAgICAgIGlmIChjb21tZW50RGF5cyA9PSAtMSkgeworICAgICAgICAgICAgYWxsb3dDb21tZW50cyA9IGZhbHNlOworICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHB1YmxpYyBpbnQgZ2V0Q29tbWVudENvdW50KCkgewpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL0ZvbGRlckVkaXQuamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9Gb2xkZXJFZGl0LmphdmEKaW5kZXggMTQxYzFjMi4uYzM2NThjMiAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL0ZvbGRlckVkaXQuamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvRm9sZGVyRWRpdC5qYXZhCkBAIC0yNywxNiArMjcsMTkgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nQm9va21hcmtGb2xkZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIudXRpbC5VSUFjdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudXRpbC5jYWNoZS5DYWNoZU1hbmFnZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMyLmludGVyY2VwdG9yLlNlcnZsZXRSZXNwb25zZUF3YXJlOwogaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzMi5jb252ZW50aW9uLmFubm90YXRpb24uQWxsb3dlZE1ldGhvZHM7CiBpbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMyLmludGVyY2VwdG9yLnZhbGlkYXRpb24uU2tpcFZhbGlkYXRpb247CiAKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKKwogCiAvKioKICAqIEVkaXQgYSBuZXcgb3IgZXhpc3RpbmcgZm9sZGVyLgogICovCiAvLyBUT0RPOiBtYWtlIHRoaXMgd29yayBAQWxsb3dlZE1ldGhvZHMoeyJleGVjdXRlIiwic2F2ZSJ9KQotcHVibGljIGNsYXNzIEZvbGRlckVkaXQgZXh0ZW5kcyBVSUFjdGlvbiB7Ci0gICAgCitwdWJsaWMgY2xhc3MgRm9sZGVyRWRpdCBleHRlbmRzIFVJQWN0aW9uIGltcGxlbWVudHMgU2VydmxldFJlc3BvbnNlQXdhcmUgeworCiAgICAgcHJpdmF0ZSBzdGF0aWMgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKEZvbGRlckVkaXQuY2xhc3MpOwogCiAgICAgLy8gYmVhbiBmb3IgbWFuYWdpbmcgZm9ybSBkYXRhCkBAIC00OCw2ICs1MSw5IEBACiAgICAgLy8gdGhlIGZvbGRlciB3ZSBhcmUgYWRkaW5nIG9yIGVkaXRpbmcKICAgICBwcml2YXRlIFdlYmxvZ0Jvb2ttYXJrRm9sZGVyIGZvbGRlciA9IG51bGw7CiAKKyAgICBwcml2YXRlIEh0dHBTZXJ2bGV0UmVzcG9uc2UgaHR0cFNlcnZsZXRSZXNwb25zZTsKKworCiAgICAgcHVibGljIEZvbGRlckVkaXQoKSB7CiAgICAgICAgIHRoaXMuZGVzaXJlZE1lbnUgPSAiZWRpdG9yIjsKICAgICB9CkBAIC03NCw2ICs4MCwxMSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0U2VydmxldFJlc3BvbnNlKEh0dHBTZXJ2bGV0UmVzcG9uc2UgaHR0cFNlcnZsZXRSZXNwb25zZSkgeworICAgICAgICB0aGlzLmh0dHBTZXJ2bGV0UmVzcG9uc2UgPSBodHRwU2VydmxldFJlc3BvbnNlOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFNob3cgZm9sZGVyIGVkaXQgcGFnZS4KICAgICAgKi8KQEAgLTExNCw2ICsxMjUsOCBAQAogICAgICAgICAgICAgICAgICAgICBhZGRNZXNzYWdlKCJmb2xkZXJGb3JtLnVwZGF0ZWQiKTsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBodHRwU2VydmxldFJlc3BvbnNlLmFkZEhlYWRlcigiZm9sZGVySWQiLCBmb2xkZXJJZCApOworCiAgICAgICAgICAgICAgICAgcmV0dXJuIFNVQ0NFU1M7CiAKICAgICAgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGV4KSB7CkBAIC0xMjcsNyArMTQwLDcgQEAKIAogICAgIHB1YmxpYyB2b2lkIG15VmFsaWRhdGUoKSB7CiAgICAgICAgIC8vIG1ha2Ugc3VyZSBuZXcgbmFtZSBpcyBub3QgYSBkdXBsaWNhdGUgb2YgYW4gZXhpc3RpbmcgZm9sZGVyCi0gICAgICAgIGlmKChpc0FkZCgpIHx8ICFmb2xkZXIuZ2V0TmFtZSgpLmVxdWFscyhnZXRCZWFuKCkuZ2V0TmFtZSgpKSkpIHsKKyAgICAgICAgaWYgKCBpc0FkZCgpIHx8ICFnZXRCZWFuKCkuZ2V0TmFtZSgpLmVxdWFscyhmb2xkZXIuZ2V0TmFtZSgpKSApIHsKICAgICAgICAgICAgIGlmIChmb2xkZXIuZ2V0V2VibG9nKCkuaGFzQm9va21hcmtGb2xkZXIoZ2V0QmVhbigpLmdldE5hbWUoKSkpIHsKICAgICAgICAgICAgICAgICBhZGRFcnJvcigiZm9sZGVyRm9ybS5lcnJvci5kdXBsaWNhdGVOYW1lIiwgZ2V0QmVhbigpLmdldE5hbWUoKSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvTWVkaWFGaWxlQWRkLmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvTWVkaWFGaWxlQWRkLmphdmEKaW5kZXggZGM3NWRmOC4uZDEzMjQ3ZCAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL01lZGlhRmlsZUFkZC5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9NZWRpYUZpbGVBZGQuamF2YQpAQCAtMTMxLDggKzEzMSw3IEBACiAKICAgICAgICAgaWYgKCFoYXNBY3Rpb25FcnJvcnMoKSkgewogCi0gICAgICAgICAgICBNZWRpYUZpbGVNYW5hZ2VyIG1hbmFnZXIgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpCi0gICAgICAgICAgICAgICAgICAgIC5nZXRNZWRpYUZpbGVNYW5hZ2VyKCk7CisgICAgICAgICAgICBNZWRpYUZpbGVNYW5hZ2VyIG1hbmFnZXIgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldE1lZGlhRmlsZU1hbmFnZXIoKTsKIAogICAgICAgICAgICAgUm9sbGVyTWVzc2FnZXMgZXJyb3JzID0gbmV3IFJvbGxlck1lc3NhZ2VzKCk7CiAgICAgICAgICAgICBMaXN0PE1lZGlhRmlsZT4gdXBsb2FkZWQgPSBuZXcgQXJyYXlMaXN0KCk7CkBAIC0xNzYsMjcgKzE3NSwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb250ZW50VHlwZSh0aGlzLnVwbG9hZGVkRmlsZXNDb250ZW50VHlwZVtpXSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluc29tZSBjYXNlcyBTdHJ1dHMyIGlzIG5vdCBhYmxlIHRvIGd1ZXNzIHRoZSBjb250ZW50CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiBzb21lIGNhc2VzIFN0cnV0czIgaXMgbm90IGFibGUgdG8gZ3Vlc3MgdGhlIGNvbnRlbnQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHR5cGUgY29ycmVjdGx5IGFuZCBhc3NpZ25zIHRoZSBkZWZhdWx0LCB3aGljaCBpcwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2N0ZXQtc3RyZWFtLiBTbyBpbiBjYXNlcyB3aGVyZSB3ZSBzZWUgb2N0ZXQtc3RyZWFtCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkb3VibGUgY2hlY2sgYW5kIHNlZSBpZiB3ZSBjYW4gZ3Vlc3MgdGhlIGNvbnRlbnQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHR5cGUgdmlhIHRoZSBKYXZhIE1JTUUgdHlwZSBmYWNpbGl0aWVzLgotICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb250ZW50VHlwZSh0aGlzLnVwbG9hZGVkRmlsZXNDb250ZW50VHlwZVtpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZpbGUuc2V0Q29udGVudFR5cGUodGhpcy51cGxvYWRlZEZpbGVzQ29udGVudFR5cGVbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lZGlhRmlsZS5nZXRDb250ZW50VHlwZSgpID09IG51bGwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgbWVkaWFGaWxlLmdldENvbnRlbnRUeXBlKCkuZW5kc1dpdGgoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9vY3RldC1zdHJlYW0iKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBtZWRpYUZpbGUuZ2V0Q29udGVudFR5cGUoKS5lbmRzV2l0aCgiL29jdGV0LXN0cmVhbSIpKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY3R5cGUgPSBVdGlsaXRpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDb250ZW50VHlwZUZyb21GaWxlTmFtZShtZWRpYUZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGN0eXBlID0gVXRpbGl0aWVzLmdldENvbnRlbnRUeXBlRnJvbUZpbGVOYW1lKG1lZGlhRmlsZS5nZXROYW1lKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudWxsICE9IGN0eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmlsZS5zZXRDb250ZW50VHlwZShjdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyLmNyZWF0ZU1lZGlhRmlsZShnZXRBY3Rpb25XZWJsb2coKSwgbWVkaWFGaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlci5jcmVhdGVNZWRpYUZpbGUoZ2V0QWN0aW9uV2VibG9nKCksIG1lZGlhRmlsZSwgZXJyb3JzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZmx1c2goKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lZGlhRmlsZS5pc0ltYWdlRmlsZSgpKSB7CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvTWVkaWFGaWxlQmFzZS5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL01lZGlhRmlsZUJhc2UuamF2YQppbmRleCBmMDEwMmY3Li4zOGM0ZWY5IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvTWVkaWFGaWxlQmFzZS5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9NZWRpYUZpbGVCYXNlLmphdmEKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgIC8qKg0KICAgICAgKiBNb3ZlIHNlbGVjdGVkIG1lZGlhIGZpbGVzIHRvIGEgZGlyZWN0b3J5Lg0KICAgICAgKi8NCi0gICAgcHJvdGVjdGVkIHZvaWQgZG9Nb3ZlU2VsZWN0ZWQoKSB7DQorICAgIHZvaWQgZG9Nb3ZlU2VsZWN0ZWQoKSB7DQogICAgICAgICBTdHJpbmdbXSBmaWxlSWRzID0gZ2V0U2VsZWN0ZWRNZWRpYUZpbGVzKCk7DQogICAgICAgICBTdHJpbmdbXSBkaXJJZHMgPSBnZXRTZWxlY3RlZE1lZGlhRmlsZURpcmVjdG9yaWVzKCk7DQogICAgICAgICB0cnkgew0KQEAgLTE3NSwxNiArMTc1LDE2IEBACiAgICAgLyoqDQogICAgICAqIFJlZnJlc2ggdGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMuDQogICAgICAqLw0KLSAgICBwcm90ZWN0ZWQgdm9pZCByZWZyZXNoQWxsRGlyZWN0b3JpZXMoKSB7DQorICAgIHZvaWQgcmVmcmVzaEFsbERpcmVjdG9yaWVzKCkgew0KICAgICAgICAgdHJ5IHsNCi0gICAgICAgICAgICBNZWRpYUZpbGVNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkNCi0gICAgICAgICAgICAgICAgICAgIC5nZXRNZWRpYUZpbGVNYW5hZ2VyKCk7DQorICAgICAgICAgICAgTWVkaWFGaWxlTWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldE1lZGlhRmlsZU1hbmFnZXIoKTsNCisNCiAgICAgICAgICAgICBMaXN0PE1lZGlhRmlsZURpcmVjdG9yeT4gZGlyZWN0b3JpZXMgPSBtZ3IuZ2V0TWVkaWFGaWxlRGlyZWN0b3JpZXMoZ2V0QWN0aW9uV2VibG9nKCkpOw0KLSAgICAgICAgICAgIExpc3Q8TWVkaWFGaWxlRGlyZWN0b3J5PiBzb3J0ZWREaXJMaXN0ID0gbmV3IEFycmF5TGlzdDxNZWRpYUZpbGVEaXJlY3Rvcnk+KCk7DQotICAgICAgICAgICAgc29ydGVkRGlyTGlzdC5hZGRBbGwoZGlyZWN0b3JpZXMpOw0KLSAgICAgICAgICAgIENvbGxlY3Rpb25zLnNvcnQoc29ydGVkRGlyTGlzdCwgbmV3IE1lZGlhRmlsZURpcmVjdG9yeUNvbXBhcmF0b3IoDQotICAgICAgICAgICAgICAgICAgICBEaXJlY3RvcnlDb21wYXJhdG9yVHlwZS5OQU1FKSk7DQorICAgICAgICAgICAgTGlzdDxNZWRpYUZpbGVEaXJlY3Rvcnk+IHNvcnRlZERpckxpc3QgPSBuZXcgQXJyYXlMaXN0PD4oZGlyZWN0b3JpZXMpOw0KKyAgICAgICAgICAgIHNvcnRlZERpckxpc3Quc29ydChuZXcgTWVkaWFGaWxlRGlyZWN0b3J5Q29tcGFyYXRvcihEaXJlY3RvcnlDb21wYXJhdG9yVHlwZS5OQU1FKSk7DQorDQogICAgICAgICAgICAgc2V0QWxsRGlyZWN0b3JpZXMoc29ydGVkRGlyTGlzdCk7DQorDQogICAgICAgICB9IGNhdGNoIChXZWJsb2dnZXJFeGNlcHRpb24gZXgpIHsNCiAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIGxvb2tpbmcgdXAgbWVkaWEgZmlsZSBkaXJlY3RvcmllcyIsIGV4KTsNCiAgICAgICAgIH0NCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvTWVkaWFGaWxlRWRpdC5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL01lZGlhRmlsZUVkaXQuamF2YQppbmRleCBmNjA0NWQ0Li44MTA2NDhlIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvTWVkaWFGaWxlRWRpdC5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9NZWRpYUZpbGVFZGl0LmphdmEKQEAgLTY0LDggKzY0LDcgQEAKICAgICBwdWJsaWMgdm9pZCBteVByZXBhcmUoKSB7DQogICAgICAgICByZWZyZXNoQWxsRGlyZWN0b3JpZXMoKTsNCiAgICAgICAgIHRyeSB7DQotICAgICAgICAgICAgTWVkaWFGaWxlTWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpDQotICAgICAgICAgICAgICAgICAgICAuZ2V0TWVkaWFGaWxlTWFuYWdlcigpOw0KKyAgICAgICAgICAgIE1lZGlhRmlsZU1hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRNZWRpYUZpbGVNYW5hZ2VyKCk7DQogICAgICAgICAgICAgaWYgKCFTdHJpbmdVdGlscy5pc0VtcHR5KGJlYW4uZ2V0RGlyZWN0b3J5SWQoKSkpIHsNCiAgICAgICAgICAgICAgICAgc2V0RGlyZWN0b3J5KG1nci5nZXRNZWRpYUZpbGVEaXJlY3RvcnkoYmVhbi5nZXREaXJlY3RvcnlJZCgpKSk7DQogICAgICAgICAgICAgfQ0KQEAgLTc5LDEwICs3OCw4IEBACiAgICAgICogVmFsaWRhdGVzIG1lZGlhIGZpbGUgbWV0YWRhdGEgdG8gYmUgdXBkYXRlZC4NCiAgICAgICovDQogICAgIHB1YmxpYyB2b2lkIG15VmFsaWRhdGUoKSB7DQotICAgICAgICBNZWRpYUZpbGUgZmlsZVdpdGhTYW1lTmFtZSA9IGdldERpcmVjdG9yeSgpLmdldE1lZGlhRmlsZSgNCi0gICAgICAgICAgICAgICAgZ2V0QmVhbigpLmdldE5hbWUoKSk7DQotICAgICAgICBpZiAoZmlsZVdpdGhTYW1lTmFtZSAhPSBudWxsDQotICAgICAgICAgICAgICAgICYmICFmaWxlV2l0aFNhbWVOYW1lLmdldElkKCkuZXF1YWxzKGdldE1lZGlhRmlsZUlkKCkpKSB7DQorICAgICAgICBNZWRpYUZpbGUgZmlsZVdpdGhTYW1lTmFtZSA9IGdldERpcmVjdG9yeSgpLmdldE1lZGlhRmlsZShnZXRCZWFuKCkuZ2V0TmFtZSgpKTsNCisgICAgICAgIGlmIChmaWxlV2l0aFNhbWVOYW1lICE9IG51bGwgJiYgIWZpbGVXaXRoU2FtZU5hbWUuZ2V0SWQoKS5lcXVhbHMoZ2V0TWVkaWFGaWxlSWQoKSkpIHsNCiAgICAgICAgICAgICBhZGRFcnJvcigiTWVkaWFGaWxlLmVycm9yLmR1cGxpY2F0ZU5hbWUiLCBnZXRCZWFuKCkuZ2V0TmFtZSgpKTsNCiAgICAgICAgIH0NCiAgICAgfQ0KQEAgLTk0LDggKzkxLDcgQEAKICAgICAgKi8NCiAgICAgQFNraXBWYWxpZGF0aW9uDQogICAgIHB1YmxpYyBTdHJpbmcgZXhlY3V0ZSgpIHsNCi0gICAgICAgIE1lZGlhRmlsZU1hbmFnZXIgbWFuYWdlciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkNCi0gICAgICAgICAgICAgICAgLmdldE1lZGlhRmlsZU1hbmFnZXIoKTsNCisgICAgICAgIE1lZGlhRmlsZU1hbmFnZXIgbWFuYWdlciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0TWVkaWFGaWxlTWFuYWdlcigpOw0KICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICBNZWRpYUZpbGUgbWVkaWFGaWxlID0gbWFuYWdlci5nZXRNZWRpYUZpbGUoZ2V0TWVkaWFGaWxlSWQoKSk7DQogICAgICAgICAgICAgdGhpcy5iZWFuLmNvcHlGcm9tKG1lZGlhRmlsZSk7DQpAQCAtMTE5LDggKzExNSw3IEBACiAgICAgcHVibGljIFN0cmluZyBzYXZlKCkgew0KICAgICAgICAgbXlWYWxpZGF0ZSgpOw0KICAgICAgICAgaWYgKCFoYXNBY3Rpb25FcnJvcnMoKSkgew0KLSAgICAgICAgICAgIE1lZGlhRmlsZU1hbmFnZXIgbWFuYWdlciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkNCi0gICAgICAgICAgICAgICAgICAgIC5nZXRNZWRpYUZpbGVNYW5hZ2VyKCk7DQorICAgICAgICAgICAgTWVkaWFGaWxlTWFuYWdlciBtYW5hZ2VyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRNZWRpYUZpbGVNYW5hZ2VyKCk7DQogICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgTWVkaWFGaWxlIG1lZGlhRmlsZSA9IG1hbmFnZXIuZ2V0TWVkaWFGaWxlKGdldE1lZGlhRmlsZUlkKCkpOw0KICAgICAgICAgICAgICAgICBiZWFuLmNvcHlUbyhtZWRpYUZpbGUpOw0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9NZWRpYUZpbGVJbWFnZUNob29zZXIuamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9NZWRpYUZpbGVJbWFnZUNob29zZXIuamF2YQppbmRleCA0ZTkwNjU0Li4zOTlkMzlkIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvTWVkaWFGaWxlSW1hZ2VDaG9vc2VyLmphdmEKKysrIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL01lZGlhRmlsZUltYWdlQ2hvb3Nlci5qYXZhCkBAIC02MCw2ICs2MCw3IEBACiAgICAgICogUHJlcGFyZXMgdmlldyBhY3Rpb24KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBteVByZXBhcmUoKSB7CisgICAgICAgIHJlZnJlc2hBbGxEaXJlY3RvcmllcygpOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtNzUsNTggKzc2LDQ0IEBACiAgICAgICovCiAgICAgQFNraXBWYWxpZGF0aW9uCiAgICAgcHVibGljIFN0cmluZyBleGVjdXRlKCkgewotICAgICAgICBNZWRpYUZpbGVNYW5hZ2VyIG1hbmFnZXIgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpCi0gICAgICAgICAgICAgICAgLmdldE1lZGlhRmlsZU1hbmFnZXIoKTsKKyAgICAgICAgTWVkaWFGaWxlTWFuYWdlciBtYW5hZ2VyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRNZWRpYUZpbGVNYW5hZ2VyKCk7CiAgICAgICAgIHRyeSB7CisKICAgICAgICAgICAgIE1lZGlhRmlsZURpcmVjdG9yeSBkaXJlY3Rvcnk7CiAgICAgICAgICAgICBpZiAodGhpcy5kaXJlY3RvcnlJZCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgZGlyZWN0b3J5ID0gbWFuYWdlci5nZXRNZWRpYUZpbGVEaXJlY3RvcnkodGhpcy5kaXJlY3RvcnlJZCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGlyZWN0b3J5TmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgZGlyZWN0b3J5ID0gbWFuYWdlci5nZXRNZWRpYUZpbGVEaXJlY3RvcnlCeU5hbWUoCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRBY3Rpb25XZWJsb2coKSwgdGhpcy5kaXJlY3RvcnlOYW1lKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgPSBtYW5hZ2VyLmdldE1lZGlhRmlsZURpcmVjdG9yeUJ5TmFtZShnZXRBY3Rpb25XZWJsb2coKSwgdGhpcy5kaXJlY3RvcnlOYW1lKTsKICAgICAgICAgICAgICAgICB0aGlzLmRpcmVjdG9yeUlkID0gZGlyZWN0b3J5LmdldElkKCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRpcmVjdG9yeSA9IG1hbmFnZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIC5nZXREZWZhdWx0TWVkaWFGaWxlRGlyZWN0b3J5KGdldEFjdGlvbldlYmxvZygpKTsKKyAgICAgICAgICAgICAgICBkaXJlY3RvcnkgPSBtYW5hZ2VyLmdldERlZmF1bHRNZWRpYUZpbGVEaXJlY3RvcnkoZ2V0QWN0aW9uV2VibG9nKCkpOwogICAgICAgICAgICAgICAgIHRoaXMuZGlyZWN0b3J5SWQgPSBkaXJlY3RvcnkuZ2V0SWQoKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdGhpcy5jaGlsZEZpbGVzID0gbmV3IEFycmF5TGlzdDxNZWRpYUZpbGU+KCk7Ci0KLSAgICAgICAgICAgIGZvciAoTWVkaWFGaWxlIG1mIDogZGlyZWN0b3J5LmdldE1lZGlhRmlsZXMoKSkgewotICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRGaWxlcy5hZGQobWYpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBDb2xsZWN0aW9ucy5zb3J0KHRoaXMuY2hpbGRGaWxlcywgbmV3IE1lZGlhRmlsZUNvbXBhcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIE1lZGlhRmlsZUNvbXBhcmF0b3JUeXBlLk5BTUUpKTsKLQorICAgICAgICAgICAgdGhpcy5jaGlsZEZpbGVzID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgICAgICB0aGlzLmNoaWxkRmlsZXMuYWRkQWxsKGRpcmVjdG9yeS5nZXRNZWRpYUZpbGVzKCkpOworICAgICAgICAgICAgdGhpcy5jaGlsZEZpbGVzLnNvcnQobmV3IE1lZGlhRmlsZUNvbXBhcmF0b3IoIE1lZGlhRmlsZUNvbXBhcmF0b3JUeXBlLk5BTUUpKTsKICAgICAgICAgICAgIHRoaXMuY3VycmVudERpcmVjdG9yeSA9IGRpcmVjdG9yeTsKIAogICAgICAgICAgICAgLy8gTGlzdCBvZiBhdmFpbGFibGUgZGlyZWN0b3JpZXMKLSAgICAgICAgICAgIExpc3Q8TWVkaWFGaWxlRGlyZWN0b3J5PiBzb3J0ZWREaXJMaXN0ID0gbmV3IEFycmF5TGlzdDxNZWRpYUZpbGVEaXJlY3Rvcnk+KCk7Ci0gICAgICAgICAgICBMaXN0PE1lZGlhRmlsZURpcmVjdG9yeT4gZGlyZWN0b3JpZXMgPSBtYW5hZ2VyCi0gICAgICAgICAgICAgICAgICAgIC5nZXRNZWRpYUZpbGVEaXJlY3RvcmllcyhnZXRBY3Rpb25XZWJsb2coKSk7CisgICAgICAgICAgICBMaXN0PE1lZGlhRmlsZURpcmVjdG9yeT4gc29ydGVkRGlyTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOworICAgICAgICAgICAgTGlzdDxNZWRpYUZpbGVEaXJlY3Rvcnk+IGRpcmVjdG9yaWVzID0gbWFuYWdlci5nZXRNZWRpYUZpbGVEaXJlY3RvcmllcyhnZXRBY3Rpb25XZWJsb2coKSk7CiAgICAgICAgICAgICBmb3IgKE1lZGlhRmlsZURpcmVjdG9yeSBtZWRpYUZpbGVEaXJlY3RvcnkgOiBkaXJlY3RvcmllcykgewotICAgICAgICAgICAgICAgIGlmICghImRlZmF1bHQiLmVxdWFscyhtZWRpYUZpbGVEaXJlY3RvcnkuZ2V0TmFtZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgImRlZmF1bHQiLmVxdWFscyhkaXJlY3RvcnkuZ2V0TmFtZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgISJkZWZhdWx0Ii5lcXVhbHMoZGlyZWN0b3J5LmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoISJkZWZhdWx0Ii5lcXVhbHMobWVkaWFGaWxlRGlyZWN0b3J5LmdldE5hbWUoKSkgfHwgISJkZWZhdWx0Ii5lcXVhbHMoZGlyZWN0b3J5LmdldE5hbWUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgc29ydGVkRGlyTGlzdC5hZGQobWVkaWFGaWxlRGlyZWN0b3J5KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIENvbGxlY3Rpb25zLnNvcnQoc29ydGVkRGlyTGlzdCwgbmV3IE1lZGlhRmlsZURpcmVjdG9yeUNvbXBhcmF0b3IoCi0gICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeUNvbXBhcmF0b3JUeXBlLk5BTUUpKTsKKyAgICAgICAgICAgIHNvcnRlZERpckxpc3Quc29ydChuZXcgTWVkaWFGaWxlRGlyZWN0b3J5Q29tcGFyYXRvcigKKyAgICAgICAgICAgICAgICBEaXJlY3RvcnlDb21wYXJhdG9yVHlwZS5OQU1FKSk7CiAgICAgICAgICAgICBzZXRBbGxEaXJlY3Rvcmllcyhzb3J0ZWREaXJMaXN0KTsKIAogICAgICAgICAgICAgcmV0dXJuIFNVQ0NFU1M7CiAKLSAgICAgICAgfSBjYXRjaCAoRmlsZUlPRXhjZXB0aW9uIGV4KSB7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewogICAgICAgICAgICAgbG9nLmVycm9yKCJFcnJvciB2aWV3aW5nIG1lZGlhIGZpbGUgZGlyZWN0b3J5ICIsIGV4KTsKICAgICAgICAgICAgIGFkZEVycm9yKCJNZWRpYUZpbGUuZXJyb3IudmlldyIpOwogCi0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIHZpZXdpbmcgbWVkaWEgZmlsZSBkaXJlY3RvcnkgIiwgZSk7Ci0gICAgICAgICAgICBhZGRFcnJvcigiTWVkaWFGaWxlLmVycm9yLnZpZXciKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gU1VDQ0VTUzsKICAgICB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvTWVkaWFGaWxlVmlldy5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL01lZGlhRmlsZVZpZXcuamF2YQppbmRleCA2MjY0NGMwLi5mNjgwMWYxIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvTWVkaWFGaWxlVmlldy5qYXZhCisrKyBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9NZWRpYUZpbGVWaWV3LmphdmEKQEAgLTE5NCw4ICsxOTQsNyBAQAogICAgICAqLw0KICAgICBAU2tpcFZhbGlkYXRpb24NCiAgICAgcHVibGljIFN0cmluZyBleGVjdXRlKCkgew0KLSAgICAgICAgTWVkaWFGaWxlTWFuYWdlciBtYW5hZ2VyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKQ0KLSAgICAgICAgICAgICAgICAuZ2V0TWVkaWFGaWxlTWFuYWdlcigpOw0KKyAgICAgICAgTWVkaWFGaWxlTWFuYWdlciBtYW5hZ2VyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRNZWRpYUZpbGVNYW5hZ2VyKCk7DQogICAgICAgICB0cnkgew0KICAgICAgICAgICAgIE1lZGlhRmlsZURpcmVjdG9yeSBkaXJlY3Rvcnk7DQogICAgICAgICAgICAgaWYgKFN0cmluZ1V0aWxzLmlzTm90RW1wdHkodGhpcy5kaXJlY3RvcnlJZCkpIHsNCkBAIC0yMDYsOCArMjA1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGdldEFjdGlvbldlYmxvZygpLCB0aGlzLmRpcmVjdG9yeU5hbWUpOw0KIA0KICAgICAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgICAgIGRpcmVjdG9yeSA9IG1hbmFnZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RGVmYXVsdE1lZGlhRmlsZURpcmVjdG9yeShnZXRBY3Rpb25XZWJsb2coKSk7DQorICAgICAgICAgICAgICAgIGRpcmVjdG9yeSA9IG1hbmFnZXIuZ2V0RGVmYXVsdE1lZGlhRmlsZURpcmVjdG9yeShnZXRBY3Rpb25XZWJsb2coKSk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIHRoaXMuZGlyZWN0b3J5SWQgPSBkaXJlY3RvcnkuZ2V0SWQoKTsNCiAgICAgICAgICAgICB0aGlzLmRpcmVjdG9yeU5hbWUgPSBkaXJlY3RvcnkuZ2V0TmFtZSgpOw0KQEAgLTI1OCw4ICsyNTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAuZ2V0TWVkaWFGaWxlTWFuYWdlcigpOw0KICAgICAgICAgICAgIGlmICghU3RyaW5nVXRpbHMuaXNFbXB0eSh2aWV3RGlyZWN0b3J5SWQpKSB7DQogICAgICAgICAgICAgICAgIHNldERpcmVjdG9yeUlkKHZpZXdEaXJlY3RvcnlJZCk7DQotICAgICAgICAgICAgICAgIHNldEN1cnJlbnREaXJlY3RvcnkobWFuYWdlcg0KLSAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRNZWRpYUZpbGVEaXJlY3Rvcnkodmlld0RpcmVjdG9yeUlkKSk7DQorICAgICAgICAgICAgICAgIHNldEN1cnJlbnREaXJlY3RvcnkobWFuYWdlci5nZXRNZWRpYUZpbGVEaXJlY3Rvcnkodmlld0RpcmVjdG9yeUlkKSk7DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfSBjYXRjaCAoV2VibG9nZ2VyRXhjZXB0aW9uIGV4KSB7DQogICAgICAgICAgICAgbG9nLmVycm9yKCJFcnJvciBsb29raW5nIHVwIGRpcmVjdG9yeSIsIGV4KTsNCkBAIC0yNzksMTEgKzI3Niw5IEBACiAgICAgICAgIGlmICh2YWxTdWNjZXNzKSB7DQogICAgICAgICAgICAgTWVkaWFGaWxlRmlsdGVyIGZpbHRlciA9IG5ldyBNZWRpYUZpbGVGaWx0ZXIoKTsNCiAgICAgICAgICAgICBiZWFuLmNvcHlUbyhmaWx0ZXIpOw0KLSAgICAgICAgICAgIE1lZGlhRmlsZU1hbmFnZXIgbWFuYWdlciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkNCi0gICAgICAgICAgICAgICAgICAgIC5nZXRNZWRpYUZpbGVNYW5hZ2VyKCk7DQorICAgICAgICAgICAgTWVkaWFGaWxlTWFuYWdlciBtYW5hZ2VyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRNZWRpYUZpbGVNYW5hZ2VyKCk7DQogICAgICAgICAgICAgdHJ5IHsNCi0gICAgICAgICAgICAgICAgTGlzdDxNZWRpYUZpbGU+IHJhd1Jlc3VsdHMgPSBtYW5hZ2VyLnNlYXJjaE1lZGlhRmlsZXMoDQotICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QWN0aW9uV2VibG9nKCksIGZpbHRlcik7DQorICAgICAgICAgICAgICAgIExpc3Q8TWVkaWFGaWxlPiByYXdSZXN1bHRzID0gbWFuYWdlci5zZWFyY2hNZWRpYUZpbGVzKGdldEFjdGlvbldlYmxvZygpLCBmaWx0ZXIpOw0KICAgICAgICAgICAgICAgICBib29sZWFuIGhhc01vcmUgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgTGlzdDxNZWRpYUZpbGU+IHJlc3VsdHMgPSBuZXcgQXJyYXlMaXN0PE1lZGlhRmlsZT4oKTsNCiAgICAgICAgICAgICAgICAgcmVzdWx0cy5hZGRBbGwocmF3UmVzdWx0cyk7DQpAQCAtMzI5LDggKzMyNCw3IEBACiAgICAgcHVibGljIFN0cmluZyBkZWxldGVGb2xkZXIoKSB7DQogDQogICAgICAgICB0cnkgew0KLSAgICAgICAgICAgIE1lZGlhRmlsZU1hbmFnZXIgbWFuYWdlciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkNCi0gICAgICAgICAgICAgICAgICAgIC5nZXRNZWRpYUZpbGVNYW5hZ2VyKCk7DQorICAgICAgICAgICAgTWVkaWFGaWxlTWFuYWdlciBtYW5hZ2VyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRNZWRpYUZpbGVNYW5hZ2VyKCk7DQogICAgICAgICAgICAgaWYgKGRpcmVjdG9yeUlkICE9IG51bGwpIHsNCiAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJEZWxldGluZyBtZWRpYSBmaWxlIGZvbGRlciAtICIgKyBkaXJlY3RvcnlJZCArICIgKCINCiAgICAgICAgICAgICAgICAgICAgICAgICArIGRpcmVjdG9yeU5hbWUgKyAiKSIpOw0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9TdHlsZXNoZWV0RWRpdC5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL1N0eWxlc2hlZXRFZGl0LmphdmEKaW5kZXggYTIwNmIwNS4uY2U3OTU2YSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL1N0eWxlc2hlZXRFZGl0LmphdmEKKysrIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL1N0eWxlc2hlZXRFZGl0LmphdmEKQEAgLTE4LDMxICsxOCwyNyBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLmVkaXRvcjsKIAotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLldlYmxvZ2dlckV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nTWFuYWdlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5XZWJsb2dnZXJGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy50aGVtZXMuU2hhcmVkVGhlbWU7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLnRoZW1lcy5UaGVtZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLkN1c3RvbVRlbXBsYXRlUmVuZGl0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy4qOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5UZW1wbGF0ZVJlbmRpdGlvbi5SZW5kaXRpb25UeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5UZW1wbGF0ZVJlbmRpdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVGhlbWU7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLlRoZW1lVGVtcGxhdGU7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLlRoZW1lVGVtcGxhdGUuQ29tcG9uZW50VHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dUZW1wbGF0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nVGhlbWU7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIudXRpbC5VSUFjdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudXRpbC5jYWNoZS5DYWNoZU1hbmFnZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMyLmNvbnZlbnRpb24uYW5ub3RhdGlvbi5BbGxvd2VkTWV0aG9kczsKIAoraW1wb3J0IGphdmEudXRpbC5EYXRlOworCiAvKioKICAqIEFjdGlvbiB3aGljaCBoYW5kbGVzIGVkaXRpbmcgZm9yIGEgd2VibG9nIHN0eWxlc2hlZXQgb3ZlcnJpZGUgdGVtcGxhdGUuCiAgKi8KLS8vIFRPRE86IG1ha2UgdGhpcyB3b3JrIEBBbGxvd2VkTWV0aG9kcyh7ImV4ZWN1dGUiLCJtb3ZlIiwiZGVsZXRlIiwicmV2ZXJ0In0pCisvLyBUT0RPOiBtYWtlIHRoaXMgd29yayBAQWxsb3dlZE1ldGhvZHMoeyJleGVjdXRlIiwiY29weVN0eWxlc2hlZXQiLCJkZWxldGUiLCJyZXZlcnQifSkKIHB1YmxpYyBjbGFzcyBTdHlsZXNoZWV0RWRpdCBleHRlbmRzIFVJQWN0aW9uIHsKIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDQ2NTc1OTEwMTU4NTIzMTE5MDdMOwpAQCAtNTYsMTMgKzUyLDggQEAKICAgICBwcml2YXRlIFN0cmluZyBjb250ZW50c1N0YW5kYXJkID0gbnVsbDsKICAgICBwcml2YXRlIFN0cmluZyBjb250ZW50c01vYmlsZSA9IG51bGw7CiAKLSAgICBwcml2YXRlIGJvb2xlYW4gc2hhcmVkVGhlbWU7Ci0KLSAgICAvLyByZWFkIGJ5IEpTUCB0byBkZXRlcm1pbmUgaWYgdXNlciBqdXN0IGRlbGV0ZWQgaGlzIHNoYXJlZCB0aGVtZSBjdXN0b21pemVkIHN0eWxlc2hlZXQKLSAgICBwcml2YXRlIGJvb2xlYW4gc2hhcmVkU3R5bGVzaGVldERlbGV0ZWQ7Ci0KLSAgICAvLyBEbyB3ZSBoYXZlIGEgY3VzdG9tIHN0eWxlc2hlZXQgYWxyZWFkeSBmb3IgYSBzaGFyZWQgdGhlbWUKLSAgICBwcml2YXRlIGJvb2xlYW4gc2hhcmVkVGhlbWVDdXN0b21TdHlsZXNoZWV0ID0gZmFsc2U7CisgICAgLy8gaWYgc2hhcmVkIHRoZW1lLCBpcyBhIHN0eWxlc2hlZXQgc3VwcG9ydGVkPworICAgIHByaXZhdGUgYm9vbGVhbiBzaGFyZWRUaGVtZVN0eWxlc2hlZXQgPSBmYWxzZTsKIAogICAgIHB1YmxpYyBTdHlsZXNoZWV0RWRpdCgpIHsKICAgICAgICAgdGhpcy5hY3Rpb25OYW1lID0gInN0eWxlc2hlZXRFZGl0IjsKQEAgLTcyLDkxICs2MywyNiBAQAogCiAgICAgQE92ZXJyaWRlCiAgICAgcHVibGljIHZvaWQgbXlQcmVwYXJlKCkgewotICAgICAgICBzaGFyZWRUaGVtZSA9ICFXZWJsb2dUaGVtZS5DVVNUT00uZXF1YWxzKGdldEFjdGlvbldlYmxvZygpLmdldEVkaXRvclRoZW1lKCkpOwotICAgICAgICBzaGFyZWRTdHlsZXNoZWV0RGVsZXRlZCA9IGZhbHNlOwogCi0gICAgICAgIFRoZW1lVGVtcGxhdGUgc3R5bGVzaGVldCA9IG51bGw7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBzdHlsZXNoZWV0ID0gZ2V0QWN0aW9uV2VibG9nKCkuZ2V0VGhlbWUoKS5nZXRTdHlsZXNoZWV0KCk7Ci0gICAgICAgIH0gY2F0Y2ggKFdlYmxvZ2dlckV4Y2VwdGlvbiBleCkgewotICAgICAgICAgICAgbG9nLmVycm9yKCJFcnJvciBsb29raW5nIHVwIHN0eWxlc2hlZXQgb24gd2VibG9nIC0gIgotICAgICAgICAgICAgICAgICAgICArIGdldEFjdGlvbldlYmxvZygpLmdldEhhbmRsZSgpLCBleCk7Ci0gICAgICAgIH0KKyAgICAgICAgc2hhcmVkVGhlbWVTdHlsZXNoZWV0ID0gZmFsc2U7CiAKLSAgICAgICAgaWYgKHN0eWxlc2hlZXQgIT0gbnVsbCkgewotICAgICAgICAgICAgbG9nLmRlYnVnKCJjdXN0b20gc3R5bGVzaGVldCBwYXRoIGlzIC0gIiArIHN0eWxlc2hlZXQuZ2V0TGluaygpKTsKKyAgICAgICAgV2VibG9nTWFuYWdlciB3ZWJsb2dNYW5hZ2VyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dNYW5hZ2VyKCk7CisgICAgICAgIFRoZW1lTWFuYWdlciB0aGVtZU1hbmFnZXIgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFRoZW1lTWFuYWdlcigpOworCisgICAgICAgIGlmICggaXNTaGFyZWRUaGVtZSgpICkgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBzZXRUZW1wbGF0ZShXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ01hbmFnZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgLmdldFRlbXBsYXRlQnlMaW5rKGdldEFjdGlvbldlYmxvZygpLCBzdHlsZXNoZWV0LmdldExpbmsoKSkpOworICAgICAgICAgICAgICAgIFNoYXJlZFRoZW1lIHRoZW1lTmFtZSA9IHRoZW1lTWFuYWdlci5nZXRUaGVtZShnZXRBY3Rpb25XZWJsb2coKS5nZXRFZGl0b3JUaGVtZSgpKTsKKyAgICAgICAgICAgICAgICBzaGFyZWRUaGVtZVN0eWxlc2hlZXQgPSB0aGVtZU5hbWUuZ2V0U3R5bGVzaGVldCgpICE9IG51bGw7CiAKLSAgICAgICAgICAgICAgICBpZiAoZ2V0VGVtcGxhdGUoKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiY3VzdG9tIHN0eWxlc2hlZXQgbm90IGZvdW5kLCBjcmVhdGluZyBpdCIpOworICAgICAgICAgICAgICAgIFRoZW1lVGVtcGxhdGUgdGhlbWVTdHlsZXNoZWV0ICA9IHRoZW1lTmFtZS5nZXRTdHlsZXNoZWV0KCk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gdGVtcGxhdGUgZG9lc24ndCBleGlzdCB5ZXQsIHNvIGNyZWF0ZSBpdAotICAgICAgICAgICAgICAgICAgICBXZWJsb2dUZW1wbGF0ZSBzdHlsZXNoZWV0VG1wbCA9IG5ldyBXZWJsb2dUZW1wbGF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBzdHlsZXNoZWV0VG1wbC5zZXRXZWJsb2coZ2V0QWN0aW9uV2VibG9nKCkpOwotICAgICAgICAgICAgICAgICAgICBzdHlsZXNoZWV0VG1wbC5zZXRBY3Rpb24oVGhlbWVUZW1wbGF0ZS5Db21wb25lbnRUeXBlLlNUWUxFU0hFRVQpOwotICAgICAgICAgICAgICAgICAgICBzdHlsZXNoZWV0VG1wbC5zZXROYW1lKHN0eWxlc2hlZXQuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVzaGVldFRtcGwuc2V0RGVzY3JpcHRpb24oc3R5bGVzaGVldC5nZXREZXNjcmlwdGlvbigpKTsKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVzaGVldFRtcGwuc2V0TGluayhzdHlsZXNoZWV0LmdldExpbmsoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlc2hlZXRUbXBsLnNldEhpZGRlbihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlc2hlZXRUbXBsLnNldE5hdmJhcihmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlc2hlZXRUbXBsLnNldExhc3RNb2RpZmllZChuZXcgRGF0ZSgpKTsKKyAgICAgICAgICAgICAgICBXZWJsb2dUZW1wbGF0ZSB3ZWJsb2dTdHlsZXNoZWV0ID0KKyAgICAgICAgICAgICAgICAgICAgd2VibG9nTWFuYWdlci5nZXRUZW1wbGF0ZUJ5TGluayhnZXRBY3Rpb25XZWJsb2coKSwgdGhlbWVTdHlsZXNoZWV0LmdldExpbmsoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlIHJlbmRpdGlvbnMgZm9yIGF2YWlsYWJsZSByZW5kaXRpb24gdHlwZXMKLSAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVSZW5kaXRpb24gc0NvZGUgPSBzdHlsZXNoZWV0LmdldFRlbXBsYXRlUmVuZGl0aW9uKFJlbmRpdGlvblR5cGUuU1RBTkRBUkQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc0NvZGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb24gc3RhbmRhcmRSZW5kaXRpb24gPSBuZXcgQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlc2hlZXRUbXBsLCBSZW5kaXRpb25UeXBlLlNUQU5EQVJEKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkUmVuZGl0aW9uLnNldFRlbXBsYXRlKHNDb2RlLmdldFRlbXBsYXRlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRSZW5kaXRpb24uc2V0VGVtcGxhdGVMYW5ndWFnZShzQ29kZS5nZXRUZW1wbGF0ZUxhbmd1YWdlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dNYW5hZ2VyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNhdmVUZW1wbGF0ZVJlbmRpdGlvbihzdGFuZGFyZFJlbmRpdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZVJlbmRpdGlvbiBtQ29kZSA9IHN0eWxlc2hlZXQuZ2V0VGVtcGxhdGVSZW5kaXRpb24oUmVuZGl0aW9uVHlwZS5NT0JJTEUpOwotICAgICAgICAgICAgICAgICAgICBpZiAobUNvZGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb24gbW9iaWxlUmVuZGl0aW9uID0gbmV3IEN1c3RvbVRlbXBsYXRlUmVuZGl0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXNoZWV0VG1wbCwgUmVuZGl0aW9uVHlwZS5NT0JJTEUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlUmVuZGl0aW9uLnNldFRlbXBsYXRlKG1Db2RlLmdldFRlbXBsYXRlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbW9iaWxlUmVuZGl0aW9uLnNldFRlbXBsYXRlTGFuZ3VhZ2UobUNvZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFRlbXBsYXRlTGFuZ3VhZ2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ01hbmFnZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2F2ZVRlbXBsYXRlUmVuZGl0aW9uKG1vYmlsZVJlbmRpdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ01hbmFnZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zYXZlVGVtcGxhdGUoc3R5bGVzaGVldFRtcGwpOwotICAgICAgICAgICAgICAgICAgICBzZXRUZW1wbGF0ZShzdHlsZXNoZWV0VG1wbCk7Ci0gICAgICAgICAgICAgICAgICAgIFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZmx1c2goKTsKLQotCi0gICAgICAgICAgICAgICAgICAgIC8vIHN1Y2Nlc3MgbWVzc2FnZQotICAgICAgICAgICAgICAgICAgICBhZGRNZXNzYWdlKCJzdHlsZXNoZWV0RWRpdC5jcmVhdGUuc3VjY2VzcyIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSB1c2luZyBhIHNoYXJlZCB0aGVtZSB3aXRoIGEgY3VzdG9tIHN0eWxlc2hlZXQKLSAgICAgICAgICAgICAgICBpZiAoIVdlYmxvZ1RoZW1lLkNVU1RPTS5lcXVhbHMoZ2V0QWN0aW9uV2VibG9nKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRFZGl0b3JUaGVtZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgJiYgZ2V0QWN0aW9uV2VibG9nKCkuZ2V0VGhlbWUoKS5nZXRTdHlsZXNoZWV0KCkgIT0gbnVsbCkgewotCi0gICAgICAgICAgICAgICAgICAgIFRoZW1lVGVtcGxhdGUgb3ZlcnJpZGUgPSBXZWJsb2dnZXJGYWN0b3J5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFdlYmxvZ2dlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFdlYmxvZ01hbmFnZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRUZW1wbGF0ZUJ5TGluaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEFjdGlvbldlYmxvZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QWN0aW9uV2VibG9nKCkuZ2V0VGhlbWUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0U3R5bGVzaGVldCgpLmdldExpbmsoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG92ZXJyaWRlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZFRoZW1lQ3VzdG9tU3R5bGVzaGVldCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2V0VGVtcGxhdGUoIHdlYmxvZ1N0eWxlc2hlZXQgKTsKIAogICAgICAgICAgICAgfSBjYXRjaCAoV2VibG9nZ2VyRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgbG9nLmVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGZpbmRpbmcvYWRkaW5nIHN0eWxlc2hlZXQgdGVtcGxhdGUgZnJvbSB3ZWJsb2cgLSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgZ2V0QWN0aW9uV2VibG9nKCkuZ2V0SGFuZGxlKCksIGV4KTsKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIGxvb2tpbmcgdXAgc2hhcmVkIHRoZW1lIG5hbWUgb24gd2VibG9nIC0gIiArIGdldEFjdGlvbldlYmxvZygpLmdldEhhbmRsZSgpLCBleCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjUsMjEgKzkxLDE5IEBACiAgICAgICogU2hvdyBzdHlsZXNoZWV0IGVkaXQgcGFnZS4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIGV4ZWN1dGUoKSB7CisKICAgICAgICAgaWYgKHRlbXBsYXRlICE9IG51bGwpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKGdldFRlbXBsYXRlKCkuZ2V0VGVtcGxhdGVSZW5kaXRpb24oUmVuZGl0aW9uVHlwZS5TVEFOREFSRCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBzZXRDb250ZW50c1N0YW5kYXJkKGdldFRlbXBsYXRlKCkuZ2V0VGVtcGxhdGVSZW5kaXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGl0aW9uVHlwZS5TVEFOREFSRCkuZ2V0VGVtcGxhdGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHNldENvbnRlbnRzU3RhbmRhcmQoZ2V0VGVtcGxhdGUoKS5nZXRUZW1wbGF0ZVJlbmRpdGlvbiggUmVuZGl0aW9uVHlwZS5TVEFOREFSRCkuZ2V0VGVtcGxhdGUoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc2V0Q29udGVudHNTdGFuZGFyZCgiIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChnZXRUZW1wbGF0ZSgpLmdldFRlbXBsYXRlUmVuZGl0aW9uKFJlbmRpdGlvblR5cGUuTU9CSUxFKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNldENvbnRlbnRzTW9iaWxlKGdldFRlbXBsYXRlKCkuZ2V0VGVtcGxhdGVSZW5kaXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGl0aW9uVHlwZS5NT0JJTEUpLmdldFRlbXBsYXRlKCkpOworICAgICAgICAgICAgICAgICAgICBzZXRDb250ZW50c01vYmlsZShnZXRUZW1wbGF0ZSgpLmdldFRlbXBsYXRlUmVuZGl0aW9uKCBSZW5kaXRpb25UeXBlLk1PQklMRSkuZ2V0VGVtcGxhdGUoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChsb2cuaXNEZWJ1Z0VuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoIlN0YW5kYXJkOiAiICsgZ2V0Q29udGVudHNTdGFuZGFyZCgpICsgIiBNb2JpbGU6ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGdldENvbnRlbnRzTW9iaWxlKCkpOworICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoIlN0YW5kYXJkOiAiICsgZ2V0Q29udGVudHNTdGFuZGFyZCgpICsgIiBNb2JpbGU6ICIgKyBnZXRDb250ZW50c01vYmlsZSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGNhdGNoIChXZWJsb2dnZXJFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIGxvZy5lcnJvcigiRXJyb3IgbG9hZGluZyBXZWJsb2cgdGVtcGxhdGUgY29kZXMgZm9yIHN0eWxlc2hlZXQiLCBlKTsKQEAgLTE4OCwxMCArMTEyLDgzIEBACiAgICAgICAgIHJldHVybiBJTlBVVDsKICAgICB9CiAKKyAgICBwdWJsaWMgU3RyaW5nIGNvcHlTdHlsZXNoZWV0KCkgeworCisgICAgICAgIFdlYmxvZ01hbmFnZXIgd2VibG9nTWFuYWdlciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nTWFuYWdlcigpOworICAgICAgICBUaGVtZU1hbmFnZXIgdGhlbWVNYW5hZ2VyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRUaGVtZU1hbmFnZXIoKTsKKworICAgICAgICBUaGVtZVRlbXBsYXRlIHN0eWxlc2hlZXQgPSBudWxsOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTaGFyZWRUaGVtZSB0aGVtZU5hbWUgPSB0aGVtZU1hbmFnZXIuZ2V0VGhlbWUoZ2V0QWN0aW9uV2VibG9nKCkuZ2V0RWRpdG9yVGhlbWUoKSk7CisgICAgICAgICAgICBzdHlsZXNoZWV0ID0gdGhlbWVOYW1lLmdldFN0eWxlc2hlZXQoKTsKKworICAgICAgICB9IGNhdGNoIChXZWJsb2dnZXJFeGNlcHRpb24gZXgpIHsKKworICAgICAgICB9CisKKyAgICAgICAgbG9nLmRlYnVnKCJjdXN0b20gc3R5bGVzaGVldCBwYXRoIGlzIC0gIiArIHN0eWxlc2hlZXQuZ2V0TGluaygpKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHNldFRlbXBsYXRlKCB3ZWJsb2dNYW5hZ2VyLmdldFRlbXBsYXRlQnlMaW5rKGdldEFjdGlvbldlYmxvZygpLCBzdHlsZXNoZWV0LmdldExpbmsoKSkpOworCisgICAgICAgICAgICBpZiAoZ2V0VGVtcGxhdGUoKSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJjdXN0b20gc3R5bGVzaGVldCBub3QgZm91bmQsIGNyZWF0aW5nIGl0Iik7CisKKyAgICAgICAgICAgICAgICBXZWJsb2dUZW1wbGF0ZSBzdHlsZXNoZWV0VG1wbCA9IG5ldyBXZWJsb2dUZW1wbGF0ZSgpOworICAgICAgICAgICAgICAgIHN0eWxlc2hlZXRUbXBsLnNldFdlYmxvZyhnZXRBY3Rpb25XZWJsb2coKSk7CisgICAgICAgICAgICAgICAgc3R5bGVzaGVldFRtcGwuc2V0QWN0aW9uKENvbXBvbmVudFR5cGUuU1RZTEVTSEVFVCk7CisgICAgICAgICAgICAgICAgc3R5bGVzaGVldFRtcGwuc2V0TmFtZShzdHlsZXNoZWV0LmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgc3R5bGVzaGVldFRtcGwuc2V0RGVzY3JpcHRpb24oc3R5bGVzaGVldC5nZXREZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgICAgICBzdHlsZXNoZWV0VG1wbC5zZXRMaW5rKHN0eWxlc2hlZXQuZ2V0TGluaygpKTsKKyAgICAgICAgICAgICAgICBzdHlsZXNoZWV0VG1wbC5zZXRIaWRkZW4oZmFsc2UpOworICAgICAgICAgICAgICAgIHN0eWxlc2hlZXRUbXBsLnNldE5hdmJhcihmYWxzZSk7CisgICAgICAgICAgICAgICAgc3R5bGVzaGVldFRtcGwuc2V0TGFzdE1vZGlmaWVkKG5ldyBEYXRlKCkpOworCisgICAgICAgICAgICAgICAgLy8gY3JlYXRlIHJlbmRpdGlvbnMgZm9yIGF2YWlsYWJsZSByZW5kaXRpb24gdHlwZXM6IHN0YW5kYXJkIGFuZCBtb2JpbGUKKworICAgICAgICAgICAgICAgIFRlbXBsYXRlUmVuZGl0aW9uIHNDb2RlID0gc3R5bGVzaGVldC5nZXRUZW1wbGF0ZVJlbmRpdGlvbihSZW5kaXRpb25UeXBlLlNUQU5EQVJEKTsKKyAgICAgICAgICAgICAgICBpZiAoc0NvZGUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBDdXN0b21UZW1wbGF0ZVJlbmRpdGlvbiBzdGFuZGFyZFJlbmRpdGlvbiA9IG5ldyBDdXN0b21UZW1wbGF0ZVJlbmRpdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlc2hlZXRUbXBsLCBSZW5kaXRpb25UeXBlLlNUQU5EQVJEKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRSZW5kaXRpb24uc2V0VGVtcGxhdGUoc0NvZGUuZ2V0VGVtcGxhdGUoKSk7CisgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkUmVuZGl0aW9uLnNldFRlbXBsYXRlTGFuZ3VhZ2Uoc0NvZGUuZ2V0VGVtcGxhdGVMYW5ndWFnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgd2VibG9nTWFuYWdlci5zYXZlVGVtcGxhdGVSZW5kaXRpb24oc3RhbmRhcmRSZW5kaXRpb24pOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIFRlbXBsYXRlUmVuZGl0aW9uIG1Db2RlID0gc3R5bGVzaGVldC5nZXRUZW1wbGF0ZVJlbmRpdGlvbihSZW5kaXRpb25UeXBlLk1PQklMRSk7CisgICAgICAgICAgICAgICAgaWYgKG1Db2RlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb24gbW9iaWxlUmVuZGl0aW9uID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDdXN0b21UZW1wbGF0ZVJlbmRpdGlvbihzdHlsZXNoZWV0VG1wbCwgUmVuZGl0aW9uVHlwZS5NT0JJTEUpOworICAgICAgICAgICAgICAgICAgICBtb2JpbGVSZW5kaXRpb24uc2V0VGVtcGxhdGUobUNvZGUuZ2V0VGVtcGxhdGUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1vYmlsZVJlbmRpdGlvbi5zZXRUZW1wbGF0ZUxhbmd1YWdlKG1Db2RlLmdldFRlbXBsYXRlTGFuZ3VhZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgIHdlYmxvZ01hbmFnZXIuc2F2ZVRlbXBsYXRlUmVuZGl0aW9uKG1vYmlsZVJlbmRpdGlvbik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgd2VibG9nTWFuYWdlci5zYXZlVGVtcGxhdGUoc3R5bGVzaGVldFRtcGwpOworICAgICAgICAgICAgICAgIHNldFRlbXBsYXRlKHN0eWxlc2hlZXRUbXBsKTsKKworICAgICAgICAgICAgICAgIFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZmx1c2goKTsKKworICAgICAgICAgICAgICAgIC8vIHN1Y2Nlc3MgbWVzc2FnZQorICAgICAgICAgICAgICAgIGFkZE1lc3NhZ2UoInN0eWxlc2hlZXRFZGl0LmNyZWF0ZS5zdWNjZXNzIik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBjYXRjaCAoV2VibG9nZ2VyRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIGZpbmRpbmcvYWRkaW5nIHN0eWxlc2hlZXQgdGVtcGxhdGUgZnJvbSB3ZWJsb2cgLSAiCisgICAgICAgICAgICAgICAgKyBnZXRBY3Rpb25XZWJsb2coKS5nZXRIYW5kbGUoKSwgZXgpOworICAgICAgICAgICAgYWRkRXJyb3IoImdlbmVyaWMuZXJyb3IuY2hlY2subG9ncyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJldmVydCgpOworICAgIH0KKwogICAgIC8qKgogICAgICAqIFNhdmUgYW4gZXhpc3Rpbmcgc3R5bGVzaGVldC4KICAgICAgKi8KICAgICBwdWJsaWMgU3RyaW5nIHNhdmUoKSB7CisKKyAgICAgICAgV2VibG9nTWFuYWdlciB3ZWJsb2dNYW5hZ2VyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dNYW5hZ2VyKCk7CisKICAgICAgICAgaWYgKCFoYXNBY3Rpb25FcnJvcnMoKSkgewogICAgICAgICAgICAgdHJ5IHsKIApAQCAtMjAyLDI2ICsxOTksMjEgQEAKIAogICAgICAgICAgICAgICAgIGlmIChzdHlsZXNoZWV0LmdldFRlbXBsYXRlUmVuZGl0aW9uKFJlbmRpdGlvblR5cGUuU1RBTkRBUkQpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIHRlbXBsYXRlLCB0aGVuIHNldCBpdAotICAgICAgICAgICAgICAgICAgICBDdXN0b21UZW1wbGF0ZVJlbmRpdGlvbiB0YyA9IHN0eWxlc2hlZXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0VGVtcGxhdGVSZW5kaXRpb24oUmVuZGl0aW9uVHlwZS5TVEFOREFSRCk7CisgICAgICAgICAgICAgICAgICAgIEN1c3RvbVRlbXBsYXRlUmVuZGl0aW9uIHRjID0gc3R5bGVzaGVldC5nZXRUZW1wbGF0ZVJlbmRpdGlvbihSZW5kaXRpb25UeXBlLlNUQU5EQVJEKTsKICAgICAgICAgICAgICAgICAgICAgdGMuc2V0VGVtcGxhdGUoZ2V0Q29udGVudHNTdGFuZGFyZCgpKTsKLSAgICAgICAgICAgICAgICAgICAgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dNYW5hZ2VyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2F2ZVRlbXBsYXRlUmVuZGl0aW9uKHRjKTsKKyAgICAgICAgICAgICAgICAgICAgd2VibG9nTWFuYWdlci5zYXZlVGVtcGxhdGVSZW5kaXRpb24odGMpOworCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGNyZWF0ZSBpdCwgdGhlbiBzZXQgaXQKLSAgICAgICAgICAgICAgICAgICAgQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb24gdGMgPSBuZXcgQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzaGVldCwgUmVuZGl0aW9uVHlwZS5TVEFOREFSRCk7CisgICAgICAgICAgICAgICAgICAgIEN1c3RvbVRlbXBsYXRlUmVuZGl0aW9uIHRjID0gbmV3IEN1c3RvbVRlbXBsYXRlUmVuZGl0aW9uKCBzdHlsZXNoZWV0LCBSZW5kaXRpb25UeXBlLlNUQU5EQVJEKTsKICAgICAgICAgICAgICAgICAgICAgdGMuc2V0VGVtcGxhdGUoIiIpOwotICAgICAgICAgICAgICAgICAgICBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ01hbmFnZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zYXZlVGVtcGxhdGVSZW5kaXRpb24odGMpOworICAgICAgICAgICAgICAgICAgICB3ZWJsb2dNYW5hZ2VyLnNhdmVUZW1wbGF0ZVJlbmRpdGlvbih0Yyk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlc2hlZXQuZ2V0VGVtcGxhdGVSZW5kaXRpb24oUmVuZGl0aW9uVHlwZS5NT0JJTEUpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb24gdGMgPSBzdHlsZXNoZWV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFRlbXBsYXRlUmVuZGl0aW9uKFJlbmRpdGlvblR5cGUuTU9CSUxFKTsKKyAgICAgICAgICAgICAgICAgICAgQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb24gdGMgPSBzdHlsZXNoZWV0LmdldFRlbXBsYXRlUmVuZGl0aW9uKFJlbmRpdGlvblR5cGUuTU9CSUxFKTsKICAgICAgICAgICAgICAgICAgICAgdGMuc2V0VGVtcGxhdGUoZ2V0Q29udGVudHNNb2JpbGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nTWFuYWdlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNhdmVUZW1wbGF0ZVJlbmRpdGlvbih0Yyk7CisgICAgICAgICAgICAgICAgICAgIHdlYmxvZ01hbmFnZXIuc2F2ZVRlbXBsYXRlUmVuZGl0aW9uKHRjKTsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAvLyBzYXZlIHRlbXBsYXRlIGFuZCBmbHVzaApAQCAtMjQ4LDUzICsyNDAsNTQgQEAKICAgICAgKiBSZXZlcnQgdGhlIHN0eWxlc2hlZXQgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLiAgVUkgcHJvdmlkZXMgdGhpcyBvbmx5IGZvciBzaGFyZWQgdGhlbWVzLgogICAgICAqLwogICAgIHB1YmxpYyBTdHJpbmcgcmV2ZXJ0KCkgewotICAgICAgICBpZiAoc2hhcmVkVGhlbWUgJiYgIWhhc0FjdGlvbkVycm9ycygpKSB7CisKKyAgICAgICAgV2VibG9nTWFuYWdlciB3ZWJsb2dNYW5hZ2VyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dNYW5hZ2VyKCk7CisKKyAgICAgICAgaWYgKGlzU2hhcmVkVGhlbWUoKSAmJiAhaGFzQWN0aW9uRXJyb3JzKCkpIHsKICAgICAgICAgICAgIHRyeSB7CiAKICAgICAgICAgICAgICAgICBXZWJsb2dUZW1wbGF0ZSBzdHlsZXNoZWV0ID0gZ2V0VGVtcGxhdGUoKTsKIAogICAgICAgICAgICAgICAgIC8vIGxvb2t1cCB0aGUgdGhlbWUgdXNlZCBieSB0aGlzIHdlYmxvZwotICAgICAgICAgICAgICAgIFRoZW1lTWFuYWdlciB0bWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgLmdldFRoZW1lTWFuYWdlcigpOworICAgICAgICAgICAgICAgIFRoZW1lTWFuYWdlciB0bWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKSAuZ2V0VGhlbWVNYW5hZ2VyKCk7CiAgICAgICAgICAgICAgICAgVGhlbWUgdGhlbWUgPSB0bWdyLmdldFRoZW1lKGdldEFjdGlvbldlYmxvZygpLmdldEVkaXRvclRoZW1lKCkpOwogCiAgICAgICAgICAgICAgICAgc3R5bGVzaGVldC5zZXRMYXN0TW9kaWZpZWQobmV3IERhdGUoKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3R5bGVzaGVldC5nZXRUZW1wbGF0ZVJlbmRpdGlvbihSZW5kaXRpb25UeXBlLlNUQU5EQVJEKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlUmVuZGl0aW9uIHRlbXBsYXRlQ29kZSA9IHRoZW1lLmdldFN0eWxlc2hlZXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRUZW1wbGF0ZVJlbmRpdGlvbihSZW5kaXRpb25UeXBlLlNUQU5EQVJEKTsKKworICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZVJlbmRpdGlvbiB0ZW1wbGF0ZUNvZGUgPQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUuZ2V0U3R5bGVzaGVldCgpLmdldFRlbXBsYXRlUmVuZGl0aW9uKFJlbmRpdGlvblR5cGUuU1RBTkRBUkQpOworCiAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlIGhhdmUgYSB0ZW1wbGF0ZSwgdGhlbiBzZXQgaXQKLSAgICAgICAgICAgICAgICAgICAgQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb24gZXhpc3RpbmdUZW1wbGF0ZUNvZGUgPSBzdHlsZXNoZWV0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFRlbXBsYXRlUmVuZGl0aW9uKFJlbmRpdGlvblR5cGUuU1RBTkRBUkQpOwotICAgICAgICAgICAgICAgICAgICBleGlzdGluZ1RlbXBsYXRlQ29kZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRUZW1wbGF0ZSh0ZW1wbGF0ZUNvZGUuZ2V0VGVtcGxhdGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nTWFuYWdlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNhdmVUZW1wbGF0ZVJlbmRpdGlvbihleGlzdGluZ1RlbXBsYXRlQ29kZSk7CisgICAgICAgICAgICAgICAgICAgIEN1c3RvbVRlbXBsYXRlUmVuZGl0aW9uIGV4aXN0aW5nVGVtcGxhdGVDb2RlID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQuZ2V0VGVtcGxhdGVSZW5kaXRpb24oUmVuZGl0aW9uVHlwZS5TVEFOREFSRCk7CisKKyAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdUZW1wbGF0ZUNvZGUuc2V0VGVtcGxhdGUodGVtcGxhdGVDb2RlLmdldFRlbXBsYXRlKCkpOworICAgICAgICAgICAgICAgICAgICB3ZWJsb2dNYW5hZ2VyLnNhdmVUZW1wbGF0ZVJlbmRpdGlvbihleGlzdGluZ1RlbXBsYXRlQ29kZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChzdHlsZXNoZWV0LmdldFRlbXBsYXRlUmVuZGl0aW9uKFJlbmRpdGlvblR5cGUuTU9CSUxFKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlUmVuZGl0aW9uIHRlbXBsYXRlQ29kZSA9IHRoZW1lLmdldFN0eWxlc2hlZXQoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRUZW1wbGF0ZVJlbmRpdGlvbihSZW5kaXRpb25UeXBlLk1PQklMRSk7Ci0gICAgICAgICAgICAgICAgICAgIEN1c3RvbVRlbXBsYXRlUmVuZGl0aW9uIGV4aXN0aW5nVGVtcGxhdGVDb2RlID0gc3R5bGVzaGVldAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRUZW1wbGF0ZVJlbmRpdGlvbihSZW5kaXRpb25UeXBlLk1PQklMRSk7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nVGVtcGxhdGVDb2RlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFRlbXBsYXRlKHRlbXBsYXRlQ29kZS5nZXRUZW1wbGF0ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZVJlbmRpdGlvbiB0ZW1wbGF0ZUNvZGUgPQorICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWUuZ2V0U3R5bGVzaGVldCgpLmdldFRlbXBsYXRlUmVuZGl0aW9uKFJlbmRpdGlvblR5cGUuTU9CSUxFKTsKKyAgICAgICAgICAgICAgICAgICAgQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb24gZXhpc3RpbmdUZW1wbGF0ZUNvZGUgPQorICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzaGVldC5nZXRUZW1wbGF0ZVJlbmRpdGlvbihSZW5kaXRpb25UeXBlLk1PQklMRSk7CisKKyAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdUZW1wbGF0ZUNvZGUuc2V0VGVtcGxhdGUodGVtcGxhdGVDb2RlLmdldFRlbXBsYXRlKCkpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIHNhdmUgdGVtcGxhdGUgYW5kIGZsdXNoCi0gICAgICAgICAgICAgICAgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dNYW5hZ2VyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5zYXZlVGVtcGxhdGUoc3R5bGVzaGVldCk7CisgICAgICAgICAgICAgICAgd2VibG9nTWFuYWdlci5zYXZlVGVtcGxhdGUoc3R5bGVzaGVldCk7CiAgICAgICAgICAgICAgICAgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5mbHVzaCgpOwogCiAgICAgICAgICAgICAgICAgLy8gbm90aWZ5IGNhY2hlcwogICAgICAgICAgICAgICAgIENhY2hlTWFuYWdlci5pbnZhbGlkYXRlKHN0eWxlc2hlZXQpOwogCiAgICAgICAgICAgICAgICAgLy8gc3VjY2VzcyBtZXNzYWdlCi0gICAgICAgICAgICAgICAgYWRkTWVzc2FnZSgic3R5bGVzaGVldEVkaXQucmV2ZXJ0LnN1Y2Nlc3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzaGVldC5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIGFkZE1lc3NhZ2UoInN0eWxlc2hlZXRFZGl0LnJldmVydC5zdWNjZXNzIiwgc3R5bGVzaGVldC5nZXROYW1lKCkpOwogCiAgICAgICAgICAgICB9IGNhdGNoIChXZWJsb2dnZXJFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIHVwZGF0aW5nIHN0eWxlc2hlZXQgdGVtcGxhdGUgZm9yIHdlYmxvZyAtICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgZ2V0QWN0aW9uV2VibG9nKCkuZ2V0SGFuZGxlKCksIGV4KTsKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIHVwZGF0aW5nIHN0eWxlc2hlZXQgdGVtcGxhdGUgZm9yIHdlYmxvZyAtICIgKyBnZXRBY3Rpb25XZWJsb2coKS5nZXRIYW5kbGUoKSwgZXgpOwogICAgICAgICAgICAgICAgIGFkZEVycm9yKCJnZW5lcmljLmVycm9yLmNoZWNrLmxvZ3MiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzA1LDE5ICsyOTgsMTggQEAKICAgICAgKiBzZXQgdGhlbWUgdG8gZGVmYXVsdCBzdHlsZXNoZWV0LCBpZSBkZWxldGUgaXQuCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBkZWxldGUoKSB7Ci0gICAgICAgIGlmICh0ZW1wbGF0ZSAhPSBudWxsICYmIHNoYXJlZFRoZW1lICYmICFoYXNBY3Rpb25FcnJvcnMoKSkgeworICAgICAgICBpZiAodGVtcGxhdGUgIT0gbnVsbCAmJiBpc1NoYXJlZFRoZW1lKCkgJiYgIWhhc0FjdGlvbkVycm9ycygpKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0ZW1wbGF0ZSBhbmQgZmx1c2gKLSAgICAgICAgICAgICAgICBXZWJsb2dNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRXZWJsb2dNYW5hZ2VyKCk7CisgICAgICAgICAgICAgICAgV2VibG9nTWFuYWdlciB3ZWJsb2dNYW5hZ2VyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dNYW5hZ2VyKCk7CiAKICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGVtcGxhdGUgYW5kIHBhZ2UgY29kZXMKLSAgICAgICAgICAgICAgICBtZ3IucmVtb3ZlVGVtcGxhdGUodGVtcGxhdGUpOworICAgICAgICAgICAgICAgIHdlYmxvZ01hbmFnZXIucmVtb3ZlVGVtcGxhdGUodGVtcGxhdGUpOwogCiAgICAgICAgICAgICAgICAgV2VibG9nIHdlYmxvZyA9IGdldEFjdGlvbldlYmxvZygpOwogCiAgICAgICAgICAgICAgICAgLy8gc2F2ZSB1cGRhdGVkIHdlYmxvZyBhbmQgZmx1c2gKLSAgICAgICAgICAgICAgICBtZ3Iuc2F2ZVdlYmxvZyh3ZWJsb2cpOworICAgICAgICAgICAgICAgIHdlYmxvZ01hbmFnZXIuc2F2ZVdlYmxvZyh3ZWJsb2cpOwogCiAgICAgICAgICAgICAgICAgLy8gbm90aWZ5IGNhY2hlcwogICAgICAgICAgICAgICAgIENhY2hlTWFuYWdlci5pbnZhbGlkYXRlKHRlbXBsYXRlKTsKQEAgLTMyNiwxNSArMzE4LDEyIEBACiAgICAgICAgICAgICAgICAgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5mbHVzaCgpOwogCiAgICAgICAgICAgICAgICAgLy8gc3VjY2VzcyBtZXNzYWdlCi0gICAgICAgICAgICAgICAgYWRkTWVzc2FnZSgic3R5bGVzaGVldEVkaXQuZGVmYXVsdC5zdWNjZXNzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlLmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgYWRkTWVzc2FnZSgic3R5bGVzaGVldEVkaXQuZGVmYXVsdC5zdWNjZXNzIiwgdGVtcGxhdGUuZ2V0TmFtZSgpKTsKIAogICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gbnVsbDsKLSAgICAgICAgICAgICAgICBzaGFyZWRTdHlsZXNoZWV0RGVsZXRlZCA9IHRydWU7CiAKICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgbG9nLmVycm9yKCJFcnJvciBkZWxldGluZyBzdHlsZXNoZWV0IHRlbXBsYXRlIGZvciB3ZWJsb2cgLSAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIGdldEFjdGlvbldlYmxvZygpLmdldEhhbmRsZSgpLCBlKTsKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIGRlbGV0aW5nIHN0eWxlc2hlZXQgdGVtcGxhdGUgZm9yIHdlYmxvZyAtICIgKyBnZXRBY3Rpb25XZWJsb2coKS5nZXRIYW5kbGUoKSwgZSk7CiAgICAgICAgICAgICAgICAgYWRkRXJyb3IoImdlbmVyaWMuZXJyb3IuY2hlY2subG9ncyIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0zNDMsNyArMzMyLDYgQEAKIAogICAgIC8qKgogICAgICAqIENoZWNrcyBpZiBpcyBjdXN0b20gdGhlbWUuCi0gICAgICogCiAgICAgICogQHJldHVybiB0cnVlLCBpZiBpcyBjdXN0b20gdGhlbWUKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBpc0N1c3RvbVRoZW1lKCkgewpAQCAtMzUxLDggKzMzOSwxOSBAQAogICAgIH0KIAogICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBpcyBzaGFyZWQgdGhlbWUuCisgICAgICogQHJldHVybiB0cnVlLCBpZiBpcyBzaGFyZWQgdGhlbWUKKyAgICAgKi8KKyAgICBwdWJsaWMgYm9vbGVhbiBpc1NoYXJlZFRoZW1lKCkgeworICAgICAgICByZXR1cm4gIWlzQ3VzdG9tVGhlbWUoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1NoYXJlZFRoZW1lU3R5bGVzaGVldCgpIHsKKyAgICAgICAgcmV0dXJuIHNoYXJlZFRoZW1lU3R5bGVzaGVldDsKKyAgICB9CisKKyAgICAvKioKICAgICAgKiBHZXRzIHRoZSB0ZW1wbGF0ZS4KLSAgICAgKiAKICAgICAgKiBAcmV0dXJuIHRoZSB0ZW1wbGF0ZQogICAgICAqLwogICAgIHB1YmxpYyBXZWJsb2dUZW1wbGF0ZSBnZXRUZW1wbGF0ZSgpIHsKQEAgLTM2MSw5ICszNjAsNyBAQAogCiAgICAgLyoqCiAgICAgICogU2V0cyB0aGUgdGVtcGxhdGUuCi0gICAgICogCi0gICAgICogQHBhcmFtIHRlbXBsYXRlCi0gICAgICogICAgICAgICAgICB0aGUgbmV3IHRlbXBsYXRlCisgICAgICogQHBhcmFtIHRlbXBsYXRlIHRoZSBuZXcgdGVtcGxhdGUKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBzZXRUZW1wbGF0ZShXZWJsb2dUZW1wbGF0ZSB0ZW1wbGF0ZSkgewogICAgICAgICB0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGU7CkBAIC0zNzEsNyArMzY4LDYgQEAKIAogICAgIC8qKgogICAgICAqIEdldHMgdGhlIGNvbnRlbnRzIHN0YW5kYXJkLgotICAgICAqIAogICAgICAqIEByZXR1cm4gdGhlIGNvbnRlbnRzIHN0YW5kYXJkCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDb250ZW50c1N0YW5kYXJkKCkgewpAQCAtMzgwLDkgKzM3Niw3IEBACiAKICAgICAvKioKICAgICAgKiBTZXRzIHRoZSBjb250ZW50cyBzdGFuZGFyZC4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gY29udGVudHMKLSAgICAgKiAgICAgICAgICAgIHRoZSBuZXcgY29udGVudHMgc3RhbmRhcmQKKyAgICAgKiBAcGFyYW0gY29udGVudHMgdGhlIG5ldyBjb250ZW50cyBzdGFuZGFyZAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHNldENvbnRlbnRzU3RhbmRhcmQoU3RyaW5nIGNvbnRlbnRzKSB7CiAgICAgICAgIHRoaXMuY29udGVudHNTdGFuZGFyZCA9IGNvbnRlbnRzOwpAQCAtMzkwLDcgKzM4NCw2IEBACiAKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjb250ZW50cyBtb2JpbGUuCi0gICAgICogCiAgICAgICogQHJldHVybiB0aGUgY29udGVudHMgbW9iaWxlCiAgICAgICovCiAgICAgcHVibGljIFN0cmluZyBnZXRDb250ZW50c01vYmlsZSgpIHsKQEAgLTM5OSwyOSArMzkyLDkgQEAKIAogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGNvbnRlbnRzIG1vYmlsZS4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gY29udGVudHMKLSAgICAgKiAgICAgICAgICAgIHRoZSBuZXcgY29udGVudHMgbW9iaWxlCisgICAgICogQHBhcmFtIGNvbnRlbnRzIHRoZSBuZXcgY29udGVudHMgbW9iaWxlCiAgICAgICovCiAgICAgcHVibGljIHZvaWQgc2V0Q29udGVudHNNb2JpbGUoU3RyaW5nIGNvbnRlbnRzKSB7CiAgICAgICAgIHRoaXMuY29udGVudHNNb2JpbGUgPSBjb250ZW50czsKICAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgaWYgdXNpbmcgYSBzaGFyZWQgdGhlbWUgd2l0aCBhIGN1c3RvbSBzdHlsZXNoZWV0LgotICAgICAqIAotICAgICAqIEByZXR1cm4gdHJ1ZSwgaWYgY2hlY2tzIGlmIHNoYXJlZCB0aGVtZSBhbmQgY3VzdG9tIHN0eWxlc2hlZXQKLSAgICAgKi8KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1NoYXJlZFRoZW1lQ3VzdG9tU3R5bGVzaGVldCgpIHsKLSAgICAgICAgcmV0dXJuIHNoYXJlZFRoZW1lQ3VzdG9tU3R5bGVzaGVldDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDaGVja3MgaWYgdXNlciBqdXN0IGRlbGV0ZWQgaGlzIGN1c3RvbSBzaGFyZWQgc3R5bGVzaGVldAotICAgICAqCi0gICAgICogQHJldHVybiB0cnVlLCBpZiBjdXN0b20gc2hhcmVkIHN0eWxlc2hlZXQgd2FzIGRlbGV0ZWQuCi0gICAgICovCi0gICAgcHVibGljIGJvb2xlYW4gaXNTaGFyZWRTdHlsZXNoZWV0RGVsZXRlZCgpIHsKLSAgICAgICAgcmV0dXJuIHNoYXJlZFN0eWxlc2hlZXREZWxldGVkOwotICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9UZW1wbGF0ZUVkaXQuamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9UZW1wbGF0ZUVkaXQuamF2YQppbmRleCAxOWQzNGZmLi40NjQyODA4IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvVGVtcGxhdGVFZGl0LmphdmEKKysrIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL1RlbXBsYXRlRWRpdC5qYXZhCkBAIC0xMTQsOCArMTE0LDcgQEAKICAgICAgICAgICAgICAgICBnZXRCZWFuKCkuY29weVRvKHRlbXBsYXRlVG9TYXZlKTsKICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVRvU2F2ZS5zZXRMYXN0TW9kaWZpZWQobmV3IERhdGUoKSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoZ2V0QmVhbigpLmdldEF1dG9Db250ZW50VHlwZSgpID09IG51bGwgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICFnZXRCZWFuKCkuZ2V0QXV0b0NvbnRlbnRUeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoZ2V0QmVhbigpLmdldEF1dG9Db250ZW50VHlwZSgpID09IG51bGwgfHwgIWdldEJlYW4oKS5nZXRBdXRvQ29udGVudFR5cGUoKSkgewogICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVRvU2F2ZS5zZXRPdXRwdXRDb250ZW50VHlwZShnZXRCZWFuKCkuZ2V0TWFudWFsQ29udGVudFR5cGUoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgLy8gZW1wdHkgY29udGVudC10eXBlIGluZGljYXRlcyB0aGF0IHRlbXBsYXRlIHVzZXMgYXV0byBjb250ZW50LXR5cGUgZGV0ZWN0aW9uCkBAIC0xNTEsNyArMTUwLDcgQEAKICAgICAgICAgaWYgKCFnZXRUZW1wbGF0ZSgpLmdldE5hbWUoKS5lcXVhbHMoZ2V0QmVhbigpLmdldE5hbWUoKSkpIHsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgaWYgKFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nTWFuYWdlcigpCi0gICAgICAgICAgICAgICAgICAgIC5nZXRUZW1wbGF0ZUJ5TmFtZShnZXRBY3Rpb25XZWJsb2coKSwgZ2V0QmVhbigpLmdldE5hbWUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLmdldFRlbXBsYXRlQnlOYW1lKGdldEFjdGlvbldlYmxvZygpLCBnZXRCZWFuKCkuZ2V0TmFtZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZEVycm9yKCJwYWdlc0Zvcm0uZXJyb3IuYWxyZWFkeUV4aXN0cyIsIGdldEJlYW4oKS5nZXROYW1lKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKFdlYmxvZ2dlckV4Y2VwdGlvbiBleCkgewpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL1RlbXBsYXRlUmVtb3ZlLmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvVGVtcGxhdGVSZW1vdmUuamF2YQppbmRleCA0ZjlhODJiLi43NDQ2ODI2IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvVGVtcGxhdGVSZW1vdmUuamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvVGVtcGxhdGVSZW1vdmUuamF2YQpAQCAtMTgsNiArMTgsNyBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLmVkaXRvcjsKIAoraW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sYW5nMy5TdHJpbmdVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuV2VibG9nZ2VyRXhjZXB0aW9uOwpAQCAtMjgsNiArMjksNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dUZW1wbGF0ZTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nVGhlbWU7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIudXRpbC5VSUFjdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudXRpbC5VdGlsaXRpZXM7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnV0aWwuY2FjaGUuQ2FjaGVNYW5hZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUuc3RydXRzMi5jb252ZW50aW9uLmFubm90YXRpb24uQWxsb3dlZE1ldGhvZHM7CiAKQEAgLTM3LDcyICszOSw2NyBAQAogLy8gVE9ETzogbWFrZSB0aGlzIHdvcmsgQEFsbG93ZWRNZXRob2RzKHsiZXhlY3V0ZSIsInJlbW92ZSIsImNhbmNlbCJ9KQogcHVibGljIGNsYXNzIFRlbXBsYXRlUmVtb3ZlIGV4dGVuZHMgVUlBY3Rpb24gewogCi0JcHJpdmF0ZSBzdGF0aWMgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFRlbXBsYXRlUmVtb3ZlLmNsYXNzKTsKKyAgICBwcml2YXRlIHN0YXRpYyBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coVGVtcGxhdGVSZW1vdmUuY2xhc3MpOwogCi0JLy8gaWQgb2YgdGVtcGxhdGUgdG8gcmVtb3ZlCi0JcHJpdmF0ZSBTdHJpbmcgcmVtb3ZlSWQgPSBudWxsOworICAgIC8vIGlkIG9mIHRlbXBsYXRlIHRvIHJlbW92ZQorICAgIHByaXZhdGUgU3RyaW5nIHJlbW92ZUlkID0gbnVsbDsKIAotCS8vIHRlbXBsYXRlIG9iamVjdCB0aGF0IHdlIHdpbGwgcmVtb3ZlCi0JcHJpdmF0ZSBXZWJsb2dUZW1wbGF0ZSB0ZW1wbGF0ZSA9IG51bGw7CisgICAgLy8gdGVtcGxhdGUgb2JqZWN0IHRoYXQgd2Ugd2lsbCByZW1vdmUKKyAgICBwcml2YXRlIFdlYmxvZ1RlbXBsYXRlIHRlbXBsYXRlID0gbnVsbDsKIAotCXB1YmxpYyBUZW1wbGF0ZVJlbW92ZSgpIHsKLQkJdGhpcy5hY3Rpb25OYW1lID0gInRlbXBsYXRlUmVtb3ZlIjsKLQkJdGhpcy5kZXNpcmVkTWVudSA9ICJlZGl0b3IiOwotCQl0aGlzLnBhZ2VUaXRsZSA9ICJlZGl0UGFnZXMudGl0bGUucmVtb3ZlT0siOwotCX0KKyAgICBwdWJsaWMgVGVtcGxhdGVSZW1vdmUoKSB7CisgICAgICAgIHRoaXMuYWN0aW9uTmFtZSA9ICJ0ZW1wbGF0ZVJlbW92ZSI7CisgICAgICAgIHRoaXMuZGVzaXJlZE1lbnUgPSAiZWRpdG9yIjsKKyAgICAgICAgdGhpcy5wYWdlVGl0bGUgPSAiZWRpdFBhZ2VzLnRpdGxlLnJlbW92ZU9LIjsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBteVByZXBhcmUoKSB7Ci0JCWlmIChnZXRSZW1vdmVJZCgpICE9IG51bGwpIHsKKyAgICBwdWJsaWMgdm9pZCBteVByZXBhcmUoKSB7CisgICAgICAgIGlmIChTdHJpbmdVdGlscy5pc05vdEVtcHR5KGdldFJlbW92ZUlkKCkpKSB7CiAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIHNldFRlbXBsYXRlKFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nTWFuYWdlcigpCi0gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0VGVtcGxhdGUoZ2V0UmVtb3ZlSWQoKSkpOworICAgICAgICAgICAgICAgIHNldFRlbXBsYXRlKAorICAgICAgICAgICAgICAgICAgICBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ01hbmFnZXIoKS5nZXRUZW1wbGF0ZShnZXRSZW1vdmVJZCgpKSk7CiAgICAgICAgICAgICB9IGNhdGNoIChXZWJsb2dnZXJFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIGxvb2tpbmcgdXAgdGVtcGxhdGUgYnkgaWQgLSAiICsgZ2V0UmVtb3ZlSWQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4KTsKKyAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIGxvb2tpbmcgdXAgdGVtcGxhdGUgYnkgaWQgLSAiICsgZ2V0UmVtb3ZlSWQoKSwgZXgpOwogICAgICAgICAgICAgICAgIGFkZEVycm9yKCJlZGl0UGFnZXMucmVtb3ZlLm5vdEZvdW5kIiwgZ2V0UmVtb3ZlSWQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLQl9CisgICAgfQogCi0JLyoqCi0JICogRGlzcGxheSB0aGUgcmVtb3ZlIHRlbXBsYXRlIGNvbmZpcm1hdGlvbi4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIGV4ZWN1dGUoKSB7Ci0JCXJldHVybiAiY29uZmlybSI7Ci0JfQorICAgIC8qKgorICAgICAqIERpc3BsYXkgdGhlIHJlbW92ZSB0ZW1wbGF0ZSBjb25maXJtYXRpb24uCisgICAgICovCisgICAgcHVibGljIFN0cmluZyBleGVjdXRlKCkgeworICAgICAgICByZXR1cm4gImNvbmZpcm0iOworICAgIH0KIAotCS8qKgotCSAqIFJlbW92ZSBhIG5ldyB0ZW1wbGF0ZS4KLQkgKi8KLQlwdWJsaWMgU3RyaW5nIHJlbW92ZSgpIHsKKyAgICAvKioKKyAgICAgKiBSZW1vdmUgYSBuZXcgdGVtcGxhdGUuCisgICAgICovCisgICAgcHVibGljIFN0cmluZyByZW1vdmUoKSB7CiAKLQkJaWYgKGdldFRlbXBsYXRlKCkgIT0gbnVsbCkgeworICAgICAgICBpZiAoZ2V0VGVtcGxhdGUoKSAhPSBudWxsKSB7CiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGlmICghZ2V0VGVtcGxhdGUoKS5pc1JlcXVpcmVkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFXZWJsb2dUaGVtZS5DVVNUT00uZXF1YWxzKGdldEFjdGlvbldlYmxvZygpCi0gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0RWRpdG9yVGhlbWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgfHwgIVdlYmxvZ1RoZW1lLkNVU1RPTS5lcXVhbHMoZ2V0QWN0aW9uV2VibG9nKCkuZ2V0RWRpdG9yVGhlbWUoKSkpIHsKIAotICAgICAgICAgICAgICAgICAgICBXZWJsb2dNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0V2VibG9nTWFuYWdlcigpOworICAgICAgICAgICAgICAgICAgICBXZWJsb2dNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nTWFuYWdlcigpOwogCiAgICAgICAgICAgICAgICAgICAgIC8vIGlmIHdlYmxvZyB0ZW1wbGF0ZSByZW1vdmUgY3VzdG9tIHN0eWxlIHNoZWV0IGFsc28KLSAgICAgICAgICAgICAgICAgICAgaWYgKGdldFRlbXBsYXRlKCkuZ2V0TmFtZSgpLmVxdWFscygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJsb2dUZW1wbGF0ZS5ERUZBVUxUX1BBR0UpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChnZXRUZW1wbGF0ZSgpLmdldE5hbWUoKS5lcXVhbHMoV2VibG9nVGVtcGxhdGUuREVGQVVMVF9QQUdFKSkgewogCiAgICAgICAgICAgICAgICAgICAgICAgICBXZWJsb2cgd2VibG9nID0gZ2V0QWN0aW9uV2VibG9nKCk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIFRoZW1lVGVtcGxhdGUgc3R5bGVzaGVldCA9IGdldEFjdGlvbldlYmxvZygpLmdldFRoZW1lKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFN0eWxlc2hlZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRoZW1lVGVtcGxhdGUgc3R5bGVzaGVldCA9IGdldEFjdGlvbldlYmxvZygpLmdldFRoZW1lKCkuZ2V0U3R5bGVzaGVldCgpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgc3R5bGUgc2hlZXQgaWYgdGhlIHNhbWUgbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlc2hlZXQgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBnZXRBY3Rpb25XZWJsb2coKS5nZXRUaGVtZSgpLmdldFN0eWxlc2hlZXQoKSAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHN0eWxlc2hlZXQuZ2V0TGluaygpLmVxdWFscygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QWN0aW9uV2VibG9nKCkuZ2V0VGhlbWUoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTdHlsZXNoZWV0KCkuZ2V0TGluaygpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGdldEFjdGlvbldlYmxvZygpLmdldFRoZW1lKCkuZ2V0U3R5bGVzaGVldCgpICE9IG51bGwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzdHlsZXNoZWV0LmdldExpbmsoKS5lcXVhbHMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QWN0aW9uV2VibG9nKCkuZ2V0VGhlbWUoKS5nZXRTdHlsZXNoZWV0KCkuZ2V0TGluaygpKSkgeworCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2FtZSBzbyBPSyB0byBkZWxldGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJsb2dUZW1wbGF0ZSBjc3MgPSBtZ3IuZ2V0VGVtcGxhdGVCeUxpbmsoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRBY3Rpb25XZWJsb2coKSwgc3R5bGVzaGVldC5nZXRMaW5rKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYmxvZ1RlbXBsYXRlIGNzcyA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1nci5nZXRUZW1wbGF0ZUJ5TGluayhnZXRBY3Rpb25XZWJsb2coKSwgc3R5bGVzaGVldC5nZXRMaW5rKCkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNzcyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1nci5yZW1vdmVUZW1wbGF0ZShjc3MpOwpAQCAtMTI2LDMyICsxMjMsMjggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0JCXJldHVybiAiY29uZmlybSI7Ci0JfQotCQotICAgIC8qKgotICAgICAqIENhbmNlbC4KLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuIHRoZSBzdHJpbmcKLSAgICAgKi8KKyAgICAgICAgcmV0dXJuICJjb25maXJtIjsKKyAgICB9CisKKwogICAgIHB1YmxpYyBTdHJpbmcgY2FuY2VsKCkgewogICAgICAgICByZXR1cm4gQ0FOQ0VMOwogICAgIH0KIAotCXB1YmxpYyBTdHJpbmcgZ2V0UmVtb3ZlSWQoKSB7Ci0JCXJldHVybiByZW1vdmVJZDsKLQl9CisgICAgcHVibGljIFN0cmluZyBnZXRSZW1vdmVJZCgpIHsKKyAgICAgICAgcmV0dXJuIHJlbW92ZUlkOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHNldFJlbW92ZUlkKFN0cmluZyByZW1vdmVJZCkgewotCQl0aGlzLnJlbW92ZUlkID0gcmVtb3ZlSWQ7Ci0JfQorICAgIHB1YmxpYyB2b2lkIHNldFJlbW92ZUlkKFN0cmluZyByZW1vdmVJZCkgeworICAgICAgICB0aGlzLnJlbW92ZUlkID0gcmVtb3ZlSWQ7CisgICAgfQogCi0JcHVibGljIFdlYmxvZ1RlbXBsYXRlIGdldFRlbXBsYXRlKCkgewotCQlyZXR1cm4gdGVtcGxhdGU7Ci0JfQorICAgIHB1YmxpYyBXZWJsb2dUZW1wbGF0ZSBnZXRUZW1wbGF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHNldFRlbXBsYXRlKFdlYmxvZ1RlbXBsYXRlIHRlbXBsYXRlKSB7Ci0JCXRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTsKLQl9CisgICAgcHVibGljIHZvaWQgc2V0VGVtcGxhdGUoV2VibG9nVGVtcGxhdGUgdGVtcGxhdGUpIHsKKyAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHRlbXBsYXRlOworICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL1RlbXBsYXRlcy5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL1RlbXBsYXRlcy5qYXZhCmluZGV4IDQ3OTNlMTEuLjI2MjFkMmYgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9UZW1wbGF0ZXMuamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvVGVtcGxhdGVzLmphdmEKQEAgLTQ2LDEwMyArNDYsOTkgQEAKIC8vIFRPRE86IG1ha2UgdGhpcyB3b3JrIEBBbGxvd2VkTWV0aG9kcyh7ImV4ZWN1dGUiLCJhZGQifSkKIHB1YmxpYyBjbGFzcyBUZW1wbGF0ZXMgZXh0ZW5kcyBVSUFjdGlvbiB7CiAKLQlwcml2YXRlIHN0YXRpYyBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coVGVtcGxhdGVzLmNsYXNzKTsKKyAgICBwcml2YXRlIHN0YXRpYyBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coVGVtcGxhdGVzLmNsYXNzKTsKIAotCS8vIGxpc3Qgb2YgdGVtcGxhdGVzIHRvIGRpc3BsYXkKLQlwcml2YXRlIExpc3Q8V2VibG9nVGVtcGxhdGU+IHRlbXBsYXRlcyA9IENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOworICAgIC8vIGxpc3Qgb2YgdGVtcGxhdGVzIHRvIGRpc3BsYXkKKyAgICBwcml2YXRlIExpc3Q8V2VibG9nVGVtcGxhdGU+IHRlbXBsYXRlcyA9IENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwogCi0JLy8gbGlzdCBvZiB0ZW1wbGF0ZSBhY3Rpb24gdHlwZXMgdXNlciBpcyBhbGxvd2VkIHRvIGNyZWF0ZQotCXByaXZhdGUgTWFwPENvbXBvbmVudFR5cGUsIFN0cmluZz4gYXZhaWxhYmxlQWN0aW9ucyA9IENvbGxlY3Rpb25zLmVtcHR5TWFwKCk7CisgICAgLy8gbGlzdCBvZiB0ZW1wbGF0ZSBhY3Rpb24gdHlwZXMgdXNlciBpcyBhbGxvd2VkIHRvIGNyZWF0ZQorICAgIHByaXZhdGUgTWFwPENvbXBvbmVudFR5cGUsIFN0cmluZz4gYXZhaWxhYmxlQWN0aW9ucyA9IENvbGxlY3Rpb25zLmVtcHR5TWFwKCk7CiAKLQkvLyBuYW1lIGFuZCBhY3Rpb24gb2YgbmV3IHRlbXBsYXRlIGlmIHdlIGFyZSBhZGRpbmcgYSB0ZW1wbGF0ZQotCXByaXZhdGUgU3RyaW5nIG5ld1RtcGxOYW1lID0gbnVsbDsKLQlwcml2YXRlIENvbXBvbmVudFR5cGUgbmV3VG1wbEFjdGlvbiA9IG51bGw7CisgICAgLy8gbmFtZSBhbmQgYWN0aW9uIG9mIG5ldyB0ZW1wbGF0ZSBpZiB3ZSBhcmUgYWRkaW5nIGEgdGVtcGxhdGUKKyAgICBwcml2YXRlIFN0cmluZyBuZXdUbXBsTmFtZSA9IG51bGw7CisgICAgcHJpdmF0ZSBDb21wb25lbnRUeXBlIG5ld1RtcGxBY3Rpb24gPSBudWxsOwogCi0JcHVibGljIFRlbXBsYXRlcygpIHsKLQkJdGhpcy5hY3Rpb25OYW1lID0gInRlbXBsYXRlcyI7Ci0JCXRoaXMuZGVzaXJlZE1lbnUgPSAiZWRpdG9yIjsKLQkJdGhpcy5wYWdlVGl0bGUgPSAicGFnZXNGb3JtLnRpdGxlIjsKLQl9CisgICAgcHVibGljIFRlbXBsYXRlcygpIHsKKyAgICAgICAgdGhpcy5hY3Rpb25OYW1lID0gInRlbXBsYXRlcyI7CisgICAgICAgIHRoaXMuZGVzaXJlZE1lbnUgPSAiZWRpdG9yIjsKKyAgICAgICAgdGhpcy5wYWdlVGl0bGUgPSAicGFnZXNGb3JtLnRpdGxlIjsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGV4ZWN1dGUoKSB7CisgICAgcHVibGljIFN0cmluZyBleGVjdXRlKCkgewogCi0JCS8vIHF1ZXJ5IGZvciB0ZW1wbGF0ZXMgbGlzdAotCQl0cnkgeworICAgICAgICAvLyBxdWVyeSBmb3IgdGVtcGxhdGVzIGxpc3QKKyAgICAgICAgdHJ5IHsKIAotCQkJLy8gZ2V0IGN1cnJlbnQgbGlzdCBvZiB0ZW1wbGF0ZXMsIG1pbnVzIGN1c3RvbSBzdHlsZXNoZWV0Ci0JCQlMaXN0PFdlYmxvZ1RlbXBsYXRlPiByYXcgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpCi0JCQkJCS5nZXRXZWJsb2dNYW5hZ2VyKCkuZ2V0VGVtcGxhdGVzKGdldEFjdGlvbldlYmxvZygpKTsKLQkJCUxpc3Q8V2VibG9nVGVtcGxhdGU+IHBhZ2VzID0gbmV3IEFycmF5TGlzdDxXZWJsb2dUZW1wbGF0ZT4oKTsKLQkJCXBhZ2VzLmFkZEFsbChyYXcpOwotCQkJLy8gUmVtb3ZlIHN0eWxlIHNoZWV0IGZyb20gbGlzdCBzbyBub3QgdG8gc2hvdyB3aGVuIHRoZW1lIGlzCi0JCQkvLyBzZWxlY3RlZCBpbiBzaGFyZWQgdGhlbWUgbW9kZQotCQkJaWYgKGdldEFjdGlvbldlYmxvZygpLmdldFRoZW1lKCkuZ2V0U3R5bGVzaGVldCgpICE9IG51bGwpIHsKLQkJCQlwYWdlcy5yZW1vdmUoV2VibG9nZ2VyRmFjdG9yeQotCQkJCQkJLmdldFdlYmxvZ2dlcigpCi0JCQkJCQkuZ2V0V2VibG9nTWFuYWdlcigpCi0JCQkJCQkuZ2V0VGVtcGxhdGVCeUxpbmsoCi0JCQkJCQkJCWdldEFjdGlvbldlYmxvZygpLAotCQkJCQkJCQlnZXRBY3Rpb25XZWJsb2coKS5nZXRUaGVtZSgpLmdldFN0eWxlc2hlZXQoKQotCQkJCQkJCQkJCS5nZXRMaW5rKCkpKTsKLQkJCX0KLQkJCXNldFRlbXBsYXRlcyhwYWdlcyk7CisgICAgICAgICAgICAvLyBnZXQgY3VycmVudCBsaXN0IG9mIHRlbXBsYXRlcywgbWludXMgY3VzdG9tIHN0eWxlc2hlZXQKKyAgICAgICAgICAgIExpc3Q8V2VibG9nVGVtcGxhdGU+IHJhdyA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkKKyAgICAgICAgICAgICAgICAuZ2V0V2VibG9nTWFuYWdlcigpLmdldFRlbXBsYXRlcyhnZXRBY3Rpb25XZWJsb2coKSk7CisgICAgICAgICAgICBMaXN0PFdlYmxvZ1RlbXBsYXRlPiBwYWdlcyA9IG5ldyBBcnJheUxpc3Q8V2VibG9nVGVtcGxhdGU+KCk7CisgICAgICAgICAgICBwYWdlcy5hZGRBbGwocmF3KTsKIAotCQkJLy8gYnVpbGQgbGlzdCBvZiBhY3Rpb24gdHlwZXMgdGhhdCBtYXkgYmUgYWRkZWQKLQkJCU1hcDxDb21wb25lbnRUeXBlLCBTdHJpbmc+IGFjdGlvbnNNYXAgPSBuZXcgRW51bU1hcDxDb21wb25lbnRUeXBlLCBTdHJpbmc+KENvbXBvbmVudFR5cGUuY2xhc3MpOwotCQkJYWRkQ29tcG9uZW50VHlwZVRvTWFwKGFjdGlvbnNNYXAsIENvbXBvbmVudFR5cGUuQ1VTVE9NKTsKKyAgICAgICAgICAgIC8vIFJlbW92ZSBzdHlsZSBzaGVldCBmcm9tIGxpc3Qgc28gbm90IHRvIHNob3cgd2hlbiB0aGVtZSBpcworICAgICAgICAgICAgLy8gc2VsZWN0ZWQgaW4gc2hhcmVkIHRoZW1lIG1vZGUKKyAgICAgICAgICAgIGlmIChnZXRBY3Rpb25XZWJsb2coKS5nZXRUaGVtZSgpLmdldFN0eWxlc2hlZXQoKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcGFnZXMucmVtb3ZlKFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nTWFuYWdlcigpCisgICAgICAgICAgICAgICAgICAgIC5nZXRUZW1wbGF0ZUJ5TGluayhnZXRBY3Rpb25XZWJsb2coKSwgZ2V0QWN0aW9uV2VibG9nKCkuZ2V0VGhlbWUoKS5nZXRTdHlsZXNoZWV0KCkuZ2V0TGluaygpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXRUZW1wbGF0ZXMocGFnZXMpOwogCi0JCQlpZiAoV2VibG9nVGhlbWUuQ1VTVE9NLmVxdWFscyhnZXRBY3Rpb25XZWJsb2coKS5nZXRFZGl0b3JUaGVtZSgpKSkgewotCQkJCS8vIGlmIHRoZSB3ZWJsb2cgaXMgdXNpbmcgYSBjdXN0b20gdGhlbWUgdGhlbiBkZXRlcm1pbmUgd2hpY2gKLQkJCQkvLyBhY3Rpb24gdGVtcGxhdGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgdG8gYmUgY3JlYXRlZAotCQkJCWFkZENvbXBvbmVudFR5cGVUb01hcChhY3Rpb25zTWFwLCBDb21wb25lbnRUeXBlLlBFUk1BTElOSyk7Ci0JCQkJYWRkQ29tcG9uZW50VHlwZVRvTWFwKGFjdGlvbnNNYXAsIENvbXBvbmVudFR5cGUuU0VBUkNIKTsKLQkJCQlhZGRDb21wb25lbnRUeXBlVG9NYXAoYWN0aW9uc01hcCwgQ29tcG9uZW50VHlwZS5XRUJMT0cpOwotCQkJCWFkZENvbXBvbmVudFR5cGVUb01hcChhY3Rpb25zTWFwLCBDb21wb25lbnRUeXBlLlRBR1NJTkRFWCk7CisgICAgICAgICAgICAvLyBidWlsZCBsaXN0IG9mIGFjdGlvbiB0eXBlcyB0aGF0IG1heSBiZSBhZGRlZAorICAgICAgICAgICAgTWFwPENvbXBvbmVudFR5cGUsIFN0cmluZz4gYWN0aW9uc01hcCA9IG5ldyBFbnVtTWFwPENvbXBvbmVudFR5cGUsIFN0cmluZz4oQ29tcG9uZW50VHlwZS5jbGFzcyk7CisgICAgICAgICAgICBhZGRDb21wb25lbnRUeXBlVG9NYXAoYWN0aW9uc01hcCwgQ29tcG9uZW50VHlwZS5DVVNUT00pOwogCi0JCQkJZm9yIChXZWJsb2dUZW1wbGF0ZSB0bXBQYWdlIDogZ2V0VGVtcGxhdGVzKCkpIHsKLQkJCQkJaWYgKCFDb21wb25lbnRUeXBlLkNVU1RPTS5lcXVhbHModG1wUGFnZQotCQkJCQkJCS5nZXRBY3Rpb24oKSkpIHsKLQkJCQkJCWFjdGlvbnNNYXAucmVtb3ZlKHRtcFBhZ2UuZ2V0QWN0aW9uKCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBvcHRpb24gZm9yIHRoZSBkZWZhdWx0IHdlYiBwYWdlCi0JCQkJYWRkQ29tcG9uZW50VHlwZVRvTWFwKGFjdGlvbnNNYXAsIENvbXBvbmVudFR5cGUuV0VCTE9HKTsKLQkJCQlpZiAoZ2V0TmV3VG1wbEFjdGlvbigpID09IG51bGwpIHsKLQkJCQkJc2V0TmV3VG1wbEFjdGlvbihDb21wb25lbnRUeXBlLldFQkxPRyk7Ci0JCQkJfQotCQkJCWZvciAoV2VibG9nVGVtcGxhdGUgdG1wUGFnZSA6IGdldFRlbXBsYXRlcygpKSB7Ci0JCQkJCWlmIChDb21wb25lbnRUeXBlLldFQkxPRy5lcXVhbHModG1wUGFnZS5nZXRBY3Rpb24oKSkpIHsKLQkJCQkJCWFjdGlvbnNNYXAucmVtb3ZlKENvbXBvbmVudFR5cGUuV0VCTE9HKTsKLQkJCQkJCXNldE5ld1RtcGxBY3Rpb24obnVsbCk7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCXNldEF2YWlsYWJsZUFjdGlvbnMoYWN0aW9uc01hcCk7CisgICAgICAgICAgICBpZiAoV2VibG9nVGhlbWUuQ1VTVE9NLmVxdWFscyhnZXRBY3Rpb25XZWJsb2coKS5nZXRFZGl0b3JUaGVtZSgpKSkgewogCi0JCX0gY2F0Y2ggKFdlYmxvZ2dlckV4Y2VwdGlvbiBleCkgewotCQkJbG9nLmVycm9yKCJFcnJvciBnZXR0aW5nIHRlbXBsYXRlcyBmb3Igd2VibG9nIC0gIgotCQkJCQkrIGdldEFjdGlvbldlYmxvZygpLmdldEhhbmRsZSgpLCBleCk7Ci0JCQlhZGRFcnJvcigiRXJyb3IgZ2V0dGluZyB0ZW1wbGF0ZSBsaXN0IC0gY2hlY2sgUm9sbGVyIGxvZ3MiKTsKLQkJfQorICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB3ZWJsb2cgaXMgdXNpbmcgYSBjdXN0b20gdGhlbWUgdGhlbiBkZXRlcm1pbmUgd2hpY2gKKyAgICAgICAgICAgICAgICAvLyBhY3Rpb24gdGVtcGxhdGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgdG8gYmUgY3JlYXRlZAorICAgICAgICAgICAgICAgIGFkZENvbXBvbmVudFR5cGVUb01hcChhY3Rpb25zTWFwLCBDb21wb25lbnRUeXBlLlBFUk1BTElOSyk7CisgICAgICAgICAgICAgICAgYWRkQ29tcG9uZW50VHlwZVRvTWFwKGFjdGlvbnNNYXAsIENvbXBvbmVudFR5cGUuU0VBUkNIKTsKKyAgICAgICAgICAgICAgICBhZGRDb21wb25lbnRUeXBlVG9NYXAoYWN0aW9uc01hcCwgQ29tcG9uZW50VHlwZS5XRUJMT0cpOworICAgICAgICAgICAgICAgIGFkZENvbXBvbmVudFR5cGVUb01hcChhY3Rpb25zTWFwLCBDb21wb25lbnRUeXBlLlRBR1NJTkRFWCk7CiAKLQkJcmV0dXJuIExJU1Q7Ci0JfQorICAgICAgICAgICAgICAgIGZvciAoV2VibG9nVGVtcGxhdGUgdG1wUGFnZSA6IGdldFRlbXBsYXRlcygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghQ29tcG9uZW50VHlwZS5DVVNUT00uZXF1YWxzKHRtcFBhZ2UuZ2V0QWN0aW9uKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zTWFwLnJlbW92ZSh0bXBQYWdlLmdldEFjdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW4gb3B0aW9uIGZvciB0aGUgZGVmYXVsdCB3ZWIgcGFnZQorICAgICAgICAgICAgICAgIGFkZENvbXBvbmVudFR5cGVUb01hcChhY3Rpb25zTWFwLCBDb21wb25lbnRUeXBlLldFQkxPRyk7CisgICAgICAgICAgICAgICAgaWYgKGdldE5ld1RtcGxBY3Rpb24oKSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHNldE5ld1RtcGxBY3Rpb24oQ29tcG9uZW50VHlwZS5XRUJMT0cpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKFdlYmxvZ1RlbXBsYXRlIHRtcFBhZ2UgOiBnZXRUZW1wbGF0ZXMoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoQ29tcG9uZW50VHlwZS5XRUJMT0cuZXF1YWxzKHRtcFBhZ2UuZ2V0QWN0aW9uKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25zTWFwLnJlbW92ZShDb21wb25lbnRUeXBlLldFQkxPRyk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXROZXdUbXBsQWN0aW9uKG51bGwpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXRBdmFpbGFibGVBY3Rpb25zKGFjdGlvbnNNYXApOworCisgICAgICAgIH0gY2F0Y2ggKFdlYmxvZ2dlckV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgbG9nLmVycm9yKCJFcnJvciBnZXR0aW5nIHRlbXBsYXRlcyBmb3Igd2VibG9nIC0gIgorICAgICAgICAgICAgICAgICsgZ2V0QWN0aW9uV2VibG9nKCkuZ2V0SGFuZGxlKCksIGV4KTsKKyAgICAgICAgICAgIGFkZEVycm9yKCJFcnJvciBnZXR0aW5nIHRlbXBsYXRlIGxpc3QgLSBjaGVjayBSb2xsZXIgbG9ncyIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIExJU1Q7CisgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIGFkZENvbXBvbmVudFR5cGVUb01hcChNYXA8Q29tcG9uZW50VHlwZSwgU3RyaW5nPiBtYXAsIENvbXBvbmVudFR5cGUgY29tcG9uZW50KSB7CiAgICAgICAgIG1hcC5wdXQoY29tcG9uZW50LCBjb21wb25lbnQuZ2V0UmVhZGFibGVOYW1lKCkpOwogICAgIH0KIAotCS8qKgotCSAqIFNhdmUgYSBuZXcgdGVtcGxhdGUuCi0JICovCi0JcHVibGljIFN0cmluZyBhZGQoKSB7CisgICAgLyoqCisgICAgICogU2F2ZSBhIG5ldyB0ZW1wbGF0ZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgU3RyaW5nIGFkZCgpIHsKIAotCQkvLyB2YWxpZGF0aW9uCi0JCW15VmFsaWRhdGUoKTsKKyAgICAgICAgLy8gdmFsaWRhdGlvbgorICAgICAgICBteVZhbGlkYXRlKCk7CiAKLQkJaWYgKCFoYXNBY3Rpb25FcnJvcnMoKSkgeworICAgICAgICBpZiAoIWhhc0FjdGlvbkVycm9ycygpKSB7CiAgICAgICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAgICAgV2VibG9nVGVtcGxhdGUgbmV3VGVtcGxhdGUgPSBuZXcgV2VibG9nVGVtcGxhdGUoKTsKQEAgLTE2NCwxOCArMTYwLDE2IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gc2F2ZSB0aGUgbmV3IFRlbXBsYXRlCi0gICAgICAgICAgICAgICAgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dNYW5hZ2VyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIC5zYXZlVGVtcGxhdGUobmV3VGVtcGxhdGUpOworICAgICAgICAgICAgICAgIFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nTWFuYWdlcigpLnNhdmVUZW1wbGF0ZShuZXdUZW1wbGF0ZSk7CiAKLSAgICAgICAgICAgICAgICAvLyBDcmVhdGUgd2VibG9nIHRlbXBsYXRlIGNvZGVzIGZvciBhdmFpbGFibGUgdHlwZXMuCi0gICAgICAgICAgICAgICAgQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb24gc3RhbmRhcmRSZW5kaXRpb24gPSBuZXcgQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdUZW1wbGF0ZSwgUmVuZGl0aW9uVHlwZS5TVEFOREFSRCk7CisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHdlYmxvZyB0ZW1wbGF0ZSByZW5kaXRpb25zIGZvciBhdmFpbGFibGUgdHlwZXMuCisgICAgICAgICAgICAgICAgQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb24gc3RhbmRhcmRSZW5kaXRpb24gPQorICAgICAgICAgICAgICAgICAgICBuZXcgQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb24oIG5ld1RlbXBsYXRlLCBSZW5kaXRpb25UeXBlLlNUQU5EQVJEKTsKICAgICAgICAgICAgICAgICBzdGFuZGFyZFJlbmRpdGlvbi5zZXRUZW1wbGF0ZShnZXRUZXh0KCJwYWdlRm9ybS5uZXdUZW1wbGF0ZUNvbnRlbnQiKSk7CiAgICAgICAgICAgICAgICAgc3RhbmRhcmRSZW5kaXRpb24uc2V0VGVtcGxhdGVMYW5ndWFnZShUZW1wbGF0ZUxhbmd1YWdlLlZFTE9DSVRZKTsKLSAgICAgICAgICAgICAgICBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ01hbmFnZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgLnNhdmVUZW1wbGF0ZVJlbmRpdGlvbihzdGFuZGFyZFJlbmRpdGlvbik7CisgICAgICAgICAgICAgICAgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dNYW5hZ2VyKCkuc2F2ZVRlbXBsYXRlUmVuZGl0aW9uKHN0YW5kYXJkUmVuZGl0aW9uKTsKIAotICAgICAgICAgICAgICAgIC8qIFRCSSAtLSBuZWVkIGEgd2F5IGZvciB1c2VyIHRvIHNwZWNpZnkgZHVhbCBvciBzaW5nbGUgdGVtcGxhdGUKKyAgICAgICAgICAgICAgICAvKiBUT0RPOiBuZWVkIGEgd2F5IGZvciB1c2VyIHRvIHNwZWNpZnkgZHVhbCBvciBzaW5nbGUgdGVtcGxhdGUgdmlhIFVJCiAgICAgICAgICAgICAgICAgQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb24gbW9iaWxlUmVuZGl0aW9uID0gbmV3IEN1c3RvbVRlbXBsYXRlUmVuZGl0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgbmV3VGVtcGxhdGUuZ2V0SWQoKSwgUmVuZGl0aW9uVHlwZS5NT0JJTEUpOwogICAgICAgICAgICAgICAgIG1vYmlsZVJlbmRpdGlvbi5zZXRUZW1wbGF0ZShuZXdUZW1wbGF0ZS5nZXRDb250ZW50cygpKTsKQEAgLTE4NSwxMSArMTc5LDkgQEAKICAgICAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICAgICAgLy8gaWYgdGhpcyBwZXJzb24gaGFwcGVuZWQgdG8gY3JlYXRlIGEgV2VibG9nIHRlbXBsYXRlIGZyb20KLSAgICAgICAgICAgICAgICAvLyBzY3JhdGNoIHRoZW4gbWFrZSBzdXJlIGFuZCBzZXQgdGhlIGRlZmF1bHRQYWdlSWQuIFdoYXQgZG9lcwotICAgICAgICAgICAgICAgIC8vIHRoaXMgZG8/Pz8/CisgICAgICAgICAgICAgICAgLy8gc2NyYXRjaCB0aGVuIG1ha2Ugc3VyZSBhbmQgc2V0IHRoZSBkZWZhdWx0UGFnZUlkLgogICAgICAgICAgICAgICAgIGlmIChXZWJsb2dUZW1wbGF0ZS5ERUZBVUxUX1BBR0UuZXF1YWxzKG5ld1RlbXBsYXRlLmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dNYW5hZ2VyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2F2ZVdlYmxvZyhnZXRBY3Rpb25XZWJsb2coKSk7CisgICAgICAgICAgICAgICAgICAgIFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nTWFuYWdlcigpLnNhdmVXZWJsb2coZ2V0QWN0aW9uV2VibG9nKCkpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIGZsdXNoIHJlc3VsdHMgdG8gZGIKQEAgLTIwMCw4MyArMTkyLDgxIEBACiAgICAgICAgICAgICAgICAgc2V0TmV3VG1wbEFjdGlvbihudWxsKTsKIAogICAgICAgICAgICAgfSBjYXRjaCAoV2VibG9nZ2VyRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgbG9nLmVycm9yKCJFcnJvciBhZGRpbmcgbmV3IHRlbXBsYXRlIGZvciB3ZWJsb2cgLSAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIGdldEFjdGlvbldlYmxvZygpLmdldEhhbmRsZSgpLCBleCk7CisgICAgICAgICAgICAgICAgbG9nLmVycm9yKCJFcnJvciBhZGRpbmcgbmV3IHRlbXBsYXRlIGZvciB3ZWJsb2cgLSAiICsgZ2V0QWN0aW9uV2VibG9nKCkuZ2V0SGFuZGxlKCksIGV4KTsKICAgICAgICAgICAgICAgICBhZGRFcnJvcigiRXJyb3IgYWRkaW5nIG5ldyB0ZW1wbGF0ZSAtIGNoZWNrIFJvbGxlciBsb2dzIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotCQlyZXR1cm4gZXhlY3V0ZSgpOwotCX0KKyAgICAgICAgcmV0dXJuIGV4ZWN1dGUoKTsKKyAgICB9CiAKLQkvLyB2YWxpZGF0aW9uIHdoZW4gYWRkaW5nIGEgbmV3IHRlbXBsYXRlCi0JcHJpdmF0ZSB2b2lkIG15VmFsaWRhdGUoKSB7CisgICAgLy8gdmFsaWRhdGlvbiB3aGVuIGFkZGluZyBhIG5ldyB0ZW1wbGF0ZQorICAgIHByaXZhdGUgdm9pZCBteVZhbGlkYXRlKCkgewogCi0JCS8vIG1ha2Ugc3VyZSBuYW1lIGlzIG5vbi1udWxsIGFuZCB3aXRoaW4gcHJvcGVyIHNpemUKLQkJaWYgKFN0cmluZ1V0aWxzLmlzRW1wdHkoZ2V0TmV3VG1wbE5hbWUoKSkpIHsKLQkJCWFkZEVycm9yKCJUZW1wbGF0ZS5lcnJvci5uYW1lTnVsbCIpOwotCQl9IGVsc2UgaWYgKGdldE5ld1RtcGxOYW1lKCkubGVuZ3RoKCkgPiBSb2xsZXJDb25zdGFudHMuVEVYVFdJRFRIXzI1NSkgewotCQkJYWRkRXJyb3IoIlRlbXBsYXRlLmVycm9yLm5hbWVTaXplIik7Ci0JCX0KKyAgICAgICAgLy8gbWFrZSBzdXJlIG5hbWUgaXMgbm9uLW51bGwgYW5kIHdpdGhpbiBwcm9wZXIgc2l6ZQorICAgICAgICBpZiAoU3RyaW5nVXRpbHMuaXNFbXB0eShnZXROZXdUbXBsTmFtZSgpKSkgeworICAgICAgICAgICAgYWRkRXJyb3IoIlRlbXBsYXRlLmVycm9yLm5hbWVOdWxsIik7CisgICAgICAgIH0gZWxzZSBpZiAoZ2V0TmV3VG1wbE5hbWUoKS5sZW5ndGgoKSA+IFJvbGxlckNvbnN0YW50cy5URVhUV0lEVEhfMjU1KSB7CisgICAgICAgICAgICBhZGRFcnJvcigiVGVtcGxhdGUuZXJyb3IubmFtZVNpemUiKTsKKyAgICAgICAgfQogCi0JCS8vIG1ha2Ugc3VyZSBhY3Rpb24gaXMgYSB2YWxpZAotCQlpZiAoZ2V0TmV3VG1wbEFjdGlvbigpID09IG51bGwpIHsKLQkJCWFkZEVycm9yKCJUZW1wbGF0ZS5lcnJvci5hY3Rpb25OdWxsIik7Ci0JCX0KKyAgICAgICAgLy8gbWFrZSBzdXJlIGFjdGlvbiBpcyBhIHZhbGlkCisgICAgICAgIGlmIChnZXROZXdUbXBsQWN0aW9uKCkgPT0gbnVsbCkgeworICAgICAgICAgICAgYWRkRXJyb3IoIlRlbXBsYXRlLmVycm9yLmFjdGlvbk51bGwiKTsKKyAgICAgICAgfQogCi0JCS8vIGNoZWNrIGlmIHRlbXBsYXRlIGJ5IHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cwotCQl0cnkgewotCQkJV2VibG9nVGVtcGxhdGUgZXhpc3RpbmdQYWdlID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKQotCQkJCQkuZ2V0V2VibG9nTWFuYWdlcigpCi0JCQkJCS5nZXRUZW1wbGF0ZUJ5TmFtZShnZXRBY3Rpb25XZWJsb2coKSwgZ2V0TmV3VG1wbE5hbWUoKSk7Ci0JCQlpZiAoZXhpc3RpbmdQYWdlICE9IG51bGwpIHsKLQkJCQlhZGRFcnJvcigicGFnZXNGb3JtLmVycm9yLmFscmVhZHlFeGlzdHMiLCBnZXROZXdUbXBsTmFtZSgpKTsKLQkJCX0KLQkJfSBjYXRjaCAoV2VibG9nZ2VyRXhjZXB0aW9uIGV4KSB7Ci0JCQlsb2cuZXJyb3IoIkVycm9yIGNoZWNraW5nIGZvciBleGlzdGluZyB0ZW1wbGF0ZSIsIGV4KTsKLQkJfQorICAgICAgICAvLyBjaGVjayBpZiB0ZW1wbGF0ZSBieSB0aGF0IG5hbWUgYWxyZWFkeSBleGlzdHMKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFdlYmxvZ1RlbXBsYXRlIGV4aXN0aW5nUGFnZSA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nTWFuYWdlcigpCisgICAgICAgICAgICAgICAgLmdldFRlbXBsYXRlQnlOYW1lKGdldEFjdGlvbldlYmxvZygpLCBnZXROZXdUbXBsTmFtZSgpKTsKKyAgICAgICAgICAgIGlmIChleGlzdGluZ1BhZ2UgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGFkZEVycm9yKCJwYWdlc0Zvcm0uZXJyb3IuYWxyZWFkeUV4aXN0cyIsIGdldE5ld1RtcGxOYW1lKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChXZWJsb2dnZXJFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgIGxvZy5lcnJvcigiRXJyb3IgY2hlY2tpbmcgZm9yIGV4aXN0aW5nIHRlbXBsYXRlIiwgZXgpOworICAgICAgICB9CiAKLQl9CisgICAgfQogCi0JLyoqCi0JICogQ2hlY2tzIGlmIGlzIGN1c3RvbSB0aGVtZS4KLQkgKiAKLQkgKiBAcmV0dXJuIHRydWUsIGlmIGlzIGN1c3RvbSB0aGVtZQotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQ3VzdG9tVGhlbWUoKSB7Ci0JCXJldHVybiAoV2VibG9nVGhlbWUuQ1VTVE9NLmVxdWFscyhnZXRBY3Rpb25XZWJsb2coKS5nZXRFZGl0b3JUaGVtZSgpKSk7Ci0JfQorICAgIC8qKgorICAgICAqIENoZWNrcyBpZiBpcyBjdXN0b20gdGhlbWUuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIHRydWUsIGlmIGlzIGN1c3RvbSB0aGVtZQorICAgICAqLworICAgIHB1YmxpYyBib29sZWFuIGlzQ3VzdG9tVGhlbWUoKSB7CisgICAgICAgIHJldHVybiAoV2VibG9nVGhlbWUuQ1VTVE9NLmVxdWFscyhnZXRBY3Rpb25XZWJsb2coKS5nZXRFZGl0b3JUaGVtZSgpKSk7CisgICAgfQogCi0JcHVibGljIExpc3Q8V2VibG9nVGVtcGxhdGU+IGdldFRlbXBsYXRlcygpIHsKLQkJcmV0dXJuIHRlbXBsYXRlczsKLQl9CisgICAgcHVibGljIExpc3Q8V2VibG9nVGVtcGxhdGU+IGdldFRlbXBsYXRlcygpIHsKKyAgICAgICAgcmV0dXJuIHRlbXBsYXRlczsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBzZXRUZW1wbGF0ZXMoTGlzdDxXZWJsb2dUZW1wbGF0ZT4gdGVtcGxhdGVzKSB7Ci0JCXRoaXMudGVtcGxhdGVzID0gdGVtcGxhdGVzOwotCX0KKyAgICBwdWJsaWMgdm9pZCBzZXRUZW1wbGF0ZXMoTGlzdDxXZWJsb2dUZW1wbGF0ZT4gdGVtcGxhdGVzKSB7CisgICAgICAgIHRoaXMudGVtcGxhdGVzID0gdGVtcGxhdGVzOworICAgIH0KIAotCXB1YmxpYyBNYXA8Q29tcG9uZW50VHlwZSwgU3RyaW5nPiBnZXRBdmFpbGFibGVBY3Rpb25zKCkgewotCQlyZXR1cm4gYXZhaWxhYmxlQWN0aW9uczsKLQl9CisgICAgcHVibGljIE1hcDxDb21wb25lbnRUeXBlLCBTdHJpbmc+IGdldEF2YWlsYWJsZUFjdGlvbnMoKSB7CisgICAgICAgIHJldHVybiBhdmFpbGFibGVBY3Rpb25zOworICAgIH0KIAotCXB1YmxpYyB2b2lkIHNldEF2YWlsYWJsZUFjdGlvbnMoTWFwPENvbXBvbmVudFR5cGUsIFN0cmluZz4gYXZhaWxhYmxlQWN0aW9ucykgewotCQl0aGlzLmF2YWlsYWJsZUFjdGlvbnMgPSBhdmFpbGFibGVBY3Rpb25zOwotCX0KKyAgICBwdWJsaWMgdm9pZCBzZXRBdmFpbGFibGVBY3Rpb25zKE1hcDxDb21wb25lbnRUeXBlLCBTdHJpbmc+IGF2YWlsYWJsZUFjdGlvbnMpIHsKKyAgICAgICAgdGhpcy5hdmFpbGFibGVBY3Rpb25zID0gYXZhaWxhYmxlQWN0aW9uczsKKyAgICB9CiAKLQlwdWJsaWMgU3RyaW5nIGdldE5ld1RtcGxOYW1lKCkgewotCQlyZXR1cm4gbmV3VG1wbE5hbWU7Ci0JfQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmV3VG1wbE5hbWUoKSB7CisgICAgICAgIHJldHVybiBuZXdUbXBsTmFtZTsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBzZXROZXdUbXBsTmFtZShTdHJpbmcgbmV3VG1wbE5hbWUpIHsKLQkJdGhpcy5uZXdUbXBsTmFtZSA9IG5ld1RtcGxOYW1lOwotCX0KKyAgICBwdWJsaWMgdm9pZCBzZXROZXdUbXBsTmFtZShTdHJpbmcgbmV3VG1wbE5hbWUpIHsKKyAgICAgICAgdGhpcy5uZXdUbXBsTmFtZSA9IG5ld1RtcGxOYW1lOworICAgIH0KIAotCXB1YmxpYyBDb21wb25lbnRUeXBlIGdldE5ld1RtcGxBY3Rpb24oKSB7Ci0JCXJldHVybiBuZXdUbXBsQWN0aW9uOwotCX0KKyAgICBwdWJsaWMgQ29tcG9uZW50VHlwZSBnZXROZXdUbXBsQWN0aW9uKCkgeworICAgICAgICByZXR1cm4gbmV3VG1wbEFjdGlvbjsKKyAgICB9CiAKLQlwdWJsaWMgdm9pZCBzZXROZXdUbXBsQWN0aW9uKENvbXBvbmVudFR5cGUgbmV3VG1wbEFjdGlvbikgewotCQl0aGlzLm5ld1RtcGxBY3Rpb24gPSBuZXdUbXBsQWN0aW9uOwotCX0KKyAgICBwdWJsaWMgdm9pZCBzZXROZXdUbXBsQWN0aW9uKENvbXBvbmVudFR5cGUgbmV3VG1wbEFjdGlvbikgeworICAgICAgICB0aGlzLm5ld1RtcGxBY3Rpb24gPSBuZXdUbXBsQWN0aW9uOworICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL1RlbXBsYXRlc1JlbW92ZS5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL1RlbXBsYXRlc1JlbW92ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmQzZTI2Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9UZW1wbGF0ZXNSZW1vdmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gKiAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91Ci0gKiB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKLSAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZwotICogY29weXJpZ2h0IGluIHRoaXMgd29yaywgcGxlYXNlIHNlZSB0aGUgTk9USUNFIGZpbGUgaW4gdGhlIHRvcCBsZXZlbAotICogZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuZWRpdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nTWFuYWdlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVGhlbWVUZW1wbGF0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dUZW1wbGF0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkuc3RydXRzMi51dGlsLlVJQWN0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51dGlsLlV0aWxpdGllczsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudXRpbC5jYWNoZS5DYWNoZU1hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5zdHJ1dHMyLmNvbnZlbnRpb24uYW5ub3RhdGlvbi5BbGxvd2VkTWV0aG9kczsKLQotLyoqCi0gKiBSZW1vdmUgdGVtcGxhdGVzLgotICovCi0vLyBUT0RPOiBtYWtlIHRoaXMgd29yayBAQWxsb3dlZE1ldGhvZHMoeyJleGVjdXRlIiwicmVtb3ZlIiwiY2FuY2VsIn0pCi1wdWJsaWMgY2xhc3MgVGVtcGxhdGVzUmVtb3ZlIGV4dGVuZHMgVUlBY3Rpb24gewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gODk1MTg2MTU2MTUxMzMxMDg3TDsKLSAgICBwcml2YXRlIHN0YXRpYyBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coVGVtcGxhdGVzUmVtb3ZlLmNsYXNzKTsKLQotICAgIC8vIFRlbXBsYXRlcyB0byByZW1vdmUKLSAgICBwcml2YXRlIFN0cmluZ1tdIGlkU2VsZWN0aW9ucyA9IG51bGw7Ci0KLSAgICAvLyBMaW1pdCB1cGRhdGVzIHRvIGp1c3QgdGhpcyBzZXQgb2YgY29tbWEtc2VwYXJhdGVkIElEcwotICAgIHByaXZhdGUgU3RyaW5nIGlkcyA9IG51bGw7Ci0KLSAgICAvLyBsaXN0IG9mIHRlbXBsYXRlcyB0byBkaXNwbGF5Ci0gICAgcHJpdmF0ZSBMaXN0PFdlYmxvZ1RlbXBsYXRlPiB0ZW1wbGF0ZXMgPSBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKLQotICAgIHB1YmxpYyBUZW1wbGF0ZXNSZW1vdmUoKSB7Ci0gICAgICAgIHRoaXMuYWN0aW9uTmFtZSA9ICJ0ZW1wbGF0ZXNSZW1vdmUiOwotICAgICAgICB0aGlzLmRlc2lyZWRNZW51ID0gImVkaXRvciI7Ci0gICAgICAgIHRoaXMucGFnZVRpdGxlID0gImVkaXRQYWdlcy50aXRsZS5yZW1vdmVPSyI7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgbXlQcmVwYXJlKCkgewotCi0gICAgICAgIGlmIChnZXRJZFNlbGVjdGlvbnMoKSAhPSBudWxsKSB7Ci0KLSAgICAgICAgICAgIC8vIHF1ZXJ5IGZvciB0ZW1wbGF0ZXMgbGlzdAotICAgICAgICAgICAgdHJ5IHsKLQotICAgICAgICAgICAgICAgIFdlYmxvZ01hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgLmdldFdlYmxvZ01hbmFnZXIoKTsKLQotICAgICAgICAgICAgICAgIExpc3Q8V2VibG9nVGVtcGxhdGU+IHBhZ2VzID0gbmV3IEFycmF5TGlzdDxXZWJsb2dUZW1wbGF0ZT4oKTsKLSAgICAgICAgICAgICAgICBXZWJsb2dUZW1wbGF0ZSB0ZW1wbGF0ZSA9IG51bGw7Ci0KLSAgICAgICAgICAgICAgICBTdHJpbmdbXSBpZHNUb0RlbGV0ZSA9IGdldElkU2VsZWN0aW9ucygpOwotICAgICAgICAgICAgICAgIGlmIChpZHNUb0RlbGV0ZSAhPSBudWxsICYmIGlkc1RvRGVsZXRlLmxlbmd0aCA+IDApIHsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBpZCA6IGlkc1RvRGVsZXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlkLmVxdWFscygiIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IG1nci5nZXRUZW1wbGF0ZShpZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZXMuYWRkKHRlbXBsYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFNldCBwYWdlIGRhdGEKLSAgICAgICAgICAgICAgICBzZXRUZW1wbGF0ZXMocGFnZXMpOwotICAgICAgICAgICAgICAgIHNldElkcyhVdGlsaXRpZXMuc3RyaW5nQXJyYXlUb1N0cmluZyhpZHNUb0RlbGV0ZSwgIiwiKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBGbHVzaCBmb3Igb3BlcmF0aW9uCi0gICAgICAgICAgICAgICAgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5mbHVzaCgpOwotCi0gICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICBsb2cuZXJyb3IoIkVycm9yIGdldHRpbmcgdGVtcGxhdGVzIGZvciB3ZWJsb2cgLSAiCi0gICAgICAgICAgICAgICAgICAgICAgICArIGdldEFjdGlvbldlYmxvZygpLmdldEhhbmRsZSgpLCBleCk7Ci0gICAgICAgICAgICAgICAgYWRkRXJyb3IoImVycm9yLnVuZXhwZWN0ZWQiKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogRGlzcGxheSB0aGUgcmVtb3ZlIHRlbXBsYXRlIGNvbmZpcm1hdGlvbi4KLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nIGV4ZWN1dGUoKSB7Ci0KLSAgICAgICAgaWYgKGdldElkcygpICE9IG51bGwgJiYgZ2V0VGVtcGxhdGVzKCkgIT0gbnVsbAotICAgICAgICAgICAgICAgICYmIGdldFRlbXBsYXRlcygpLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIHJldHVybiAiY29uZmlybSI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gU1VDQ0VTUzsKLSAgICAgICAgfQotCi0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVtb3ZlIFNlbGVjdGVkIHRlbXBsYXRlcwotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgcmVtb3ZlKCkgewotCi0gICAgICAgIGlmIChnZXRJZHMoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICB0cnkgewotCi0gICAgICAgICAgICAgICAgU3RyaW5nW10gaWRzVG9EZWxldGUgPSBVdGlsaXRpZXMuc3RyaW5nVG9TdHJpbmdBcnJheShnZXRJZHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICIsIik7Ci0gICAgICAgICAgICAgICAgaWYgKGlkc1RvRGVsZXRlICE9IG51bGwgJiYgaWRzVG9EZWxldGUubGVuZ3RoID4gMCkgewotCi0gICAgICAgICAgICAgICAgICAgIFdlYmxvZ01hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRXZWJsb2dNYW5hZ2VyKCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgV2VibG9nIHdlYmxvZyA9IGdldEFjdGlvbldlYmxvZygpOwotICAgICAgICAgICAgICAgICAgICBXZWJsb2dUZW1wbGF0ZSB0ZW1wbGF0ZTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBpZCA6IGlkc1RvRGVsZXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlkLmVxdWFscygiIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IG1nci5nZXRUZW1wbGF0ZShpZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZW1wbGF0ZS5pc1JlcXVpcmVkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICEiY3VzdG9tIi5lcXVhbHMoZ2V0QWN0aW9uV2VibG9nKCkuZ2V0RWRpdG9yVGhlbWUoKSkpIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZWJsb2cgdGVtcGxhdGUgcmVtb3ZlIGN1c3RvbSBzdHlsZSBzaGVldAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbHNvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZS5nZXROYW1lKCkuZXF1YWxzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYmxvZ1RlbXBsYXRlLkRFRkFVTFRfUEFHRSkpIHsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlbWVUZW1wbGF0ZSBzdHlsZXNoZWV0ID0gZ2V0QWN0aW9uV2VibG9nKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFRoZW1lKCkuZ2V0U3R5bGVzaGVldCgpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgc3R5bGUgc2hlZXQgaWYgdGhlIHNhbWUgbmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlc2hlZXQgIT0gbnVsbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBnZXRBY3Rpb25XZWJsb2coKS5nZXRUaGVtZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFN0eWxlc2hlZXQoKSAhPSBudWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHN0eWxlc2hlZXQuZ2V0TGluaygpLmVxdWFscygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRBY3Rpb25XZWJsb2coKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFRoZW1lKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTdHlsZXNoZWV0KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRMaW5rKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2FtZSBzbyBPSyB0byBkZWxldGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJsb2dUZW1wbGF0ZSBjc3MgPSBtZ3IuZ2V0VGVtcGxhdGVCeUxpbmsoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRBY3Rpb25XZWJsb2coKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlc2hlZXQuZ2V0TGluaygpKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjc3MgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZ3IucmVtb3ZlVGVtcGxhdGUoY3NzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWdyLnJlbW92ZVRlbXBsYXRlKHRlbXBsYXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAvLyBTYXZlIGZvciBjaGFuZ2VzCi0gICAgICAgICAgICAgICAgICAgIG1nci5zYXZlV2VibG9nKHdlYmxvZyk7Ci0KLSAgICAgICAgICAgICAgICAgICAgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5mbHVzaCgpOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIG5vdGlmeSBjYWNoZXMKLSAgICAgICAgICAgICAgICAgICAgQ2FjaGVNYW5hZ2VyLmludmFsaWRhdGUoZ2V0QWN0aW9uV2VibG9nKCkpOwotCi0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIFNVQ0NFU1M7Ci0KLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgbG9nLmVycm9yKCJFcnJvciBkZWxldGluZyB0ZW1wbGF0ZXMgZm9yIHdlYmxvZyAtICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgZ2V0QWN0aW9uV2VibG9nKCkuZ2V0SGFuZGxlKCksIGUpOwotCi0gICAgICAgICAgICAgICAgYWRkRXJyb3IoImVycm9yLnVuZXhwZWN0ZWQiKTsKLQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICJjb25maXJtIjsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDYW5jZWwuCi0gICAgICogCi0gICAgICogQHJldHVybiB0aGUgc3RyaW5nCi0gICAgICovCi0gICAgcHVibGljIFN0cmluZyBjYW5jZWwoKSB7Ci0gICAgICAgIHJldHVybiBDQU5DRUw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgdGVtcGxhdGVzLgotICAgICAqIAotICAgICAqIEByZXR1cm4gdGhlIHRlbXBsYXRlcwotICAgICAqLwotICAgIHB1YmxpYyBMaXN0PFdlYmxvZ1RlbXBsYXRlPiBnZXRUZW1wbGF0ZXMoKSB7Ci0gICAgICAgIHJldHVybiB0ZW1wbGF0ZXM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2V0cyB0aGUgdGVtcGxhdGVzLgotICAgICAqIAotICAgICAqIEBwYXJhbSB0ZW1wbGF0ZXMKLSAgICAgKiAgICAgICAgICAgIHRoZSBuZXcgdGVtcGxhdGVzCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2V0VGVtcGxhdGVzKExpc3Q8V2VibG9nVGVtcGxhdGU+IHRlbXBsYXRlcykgewotICAgICAgICB0aGlzLnRlbXBsYXRlcyA9IHRlbXBsYXRlczsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZWxlY3QgY2hlY2sgYm94ZXMgZm9yIGRlbGV0aW5nIHJlY29yZHMKLSAgICAgKi8KLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0SWRTZWxlY3Rpb25zKCkgewotICAgICAgICByZXR1cm4gaWRTZWxlY3Rpb25zOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNlbGVjdCBjaGVjayBib3hlcyBmb3IgZGVsZXRpbmcgcmVjb3JkcwotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNldElkU2VsZWN0aW9ucyhTdHJpbmdbXSBpZFNlbGVjdGlvbnMpIHsKLSAgICAgICAgdGhpcy5pZFNlbGVjdGlvbnMgPSBpZFNlbGVjdGlvbnM7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ29tbWEgc2VwYXJhdGVkIGxpc3QgaWYgaWRzIHRvIHJlbW92ZQotICAgICAqLwotICAgIHB1YmxpYyBTdHJpbmcgZ2V0SWRzKCkgewotICAgICAgICByZXR1cm4gaWRzOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbW1hIHNlcGFyYXRlZCBsaXN0IGlmIGlkcyB0byByZW1vdmUKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZXRJZHMoU3RyaW5nIGlkcykgewotICAgICAgICB0aGlzLmlkcyA9IGlkczsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9XZWJsb2dDb25maWcuamF2YSBiL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2VkaXRvci9XZWJsb2dDb25maWcuamF2YQppbmRleCBiY2M5ZjU3Li45YTdmZGU2IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9lZGl0b3IvV2VibG9nQ29uZmlnLmphdmEKKysrIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvZWRpdG9yL1dlYmxvZ0NvbmZpZy5qYXZhCkBAIC02Niw4ICs2Niw3IEBACiAgICAgICAgIHRoaXMuZGVzaXJlZE1lbnUgPSAiZWRpdG9yIjsKICAgICAgICAgdGhpcy5wYWdlVGl0bGUgPSAid2Vic2l0ZVNldHRpbmdzLnRpdGxlIjsKICAgICB9Ci0gICAgCi0gICAgCisKICAgICBwdWJsaWMgdm9pZCBteVByZXBhcmUoKSB7CiAgICAgICAgIAogICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvdXRpbC9VSUFjdGlvbi5qYXZhIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvdXRpbC9VSUFjdGlvbi5qYXZhCmluZGV4IGNmYWZiYzIuLjlmZGM3NGUgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL3V0aWwvVUlBY3Rpb24uamF2YQorKysgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi91dGlsL1VJQWN0aW9uLmphdmEKQEAgLTM3OSw4ICszNzksOSBAQAogICAgIAogICAgIHB1YmxpYyBMaXN0PEtleVZhbHVlT2JqZWN0PiBnZXRDb21tZW50RGF5c0xpc3QoKSB7CiAgICAgICAgIAotICAgICAgICBMaXN0PEtleVZhbHVlT2JqZWN0PiBvcHRzID0gbmV3IEFycmF5TGlzdDxLZXlWYWx1ZU9iamVjdD4oKTsKLSAgICAgICAgCisgICAgICAgIExpc3Q8S2V5VmFsdWVPYmplY3Q+IG9wdHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKworICAgICAgICBvcHRzLmFkZChuZXcgS2V5VmFsdWVPYmplY3QoLTEsIGdldFRleHQoIndlYmxvZ0VkaXQuY29tbWVudHNOb3RBbGxvd2VkIikpKTsKICAgICAgICAgb3B0cy5hZGQobmV3IEtleVZhbHVlT2JqZWN0KDAsIGdldFRleHQoIndlYmxvZ0VkaXQudW5saW1pdGVkQ29tbWVudERheXMiKSkpOwogICAgICAgICBvcHRzLmFkZChuZXcgS2V5VmFsdWVPYmplY3QoMywgZ2V0VGV4dCgid2VibG9nRWRpdC5kYXlzMyIpKSk7CiAgICAgICAgIG9wdHMuYWRkKG5ldyBLZXlWYWx1ZU9iamVjdCg3LCBnZXRUZXh0KCJ3ZWJsb2dFZGl0LmRheXM3IikpKTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL3V0aWwvVUlTZWN1cml0eUludGVyY2VwdG9yLmphdmEgYi9hcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi91dGlsL1VJU2VjdXJpdHlJbnRlcmNlcHRvci5qYXZhCmluZGV4IDdiYTE0MmQuLmQ0YzhlOGMgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL3V0aWwvVUlTZWN1cml0eUludGVyY2VwdG9yLmphdmEKKysrIGIvYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvdXRpbC9VSVNlY3VyaXR5SW50ZXJjZXB0b3IuamF2YQpAQCAtNjcsNyArNjcsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAobG9nLmlzRGVidWdFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZygiREVOSUVEOiByZXF1aXJlZCB1c2VyIG5vdCBmb3VuZCIpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiYWNjZXNzLWRlbmllZCI7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBVSUFjdGlvbi5ERU5JRUQ7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gYXJlIHdlIGFsc28gZW5mb3JjaW5nIGdsb2JhbCBwZXJtaXNzaW9ucz8KQEAgLTc4LDEwICs3OCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlQWN0aW9uLnJlcXVpcmVkR2xvYmFsUGVybWlzc2lvbkFjdGlvbnMoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghdW1nci5jaGVja1Blcm1pc3Npb24ocGVybSwgYXV0aGVudGljYXRlZFVzZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9nLmlzRGVidWdFbmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoIkRFTklFRDogdXNlciBkb2VzIG5vdCBoYXZlIHBlcm1pc3Npb24gPSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHBlcm0udG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nLmRlYnVnKCJERU5JRUQ6IHVzZXIgZG9lcyBub3QgaGF2ZSBwZXJtaXNzaW9uID0gIiArIHBlcm0udG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gImFjY2Vzcy1kZW5pZWQiOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVJQWN0aW9uLkRFTklFRDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIApAQCAtOTYsNyArOTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB1bmFibGUgdG8gcHJvY2VzcyBhY3Rpb24gXCIiICsgKChVSUFjdGlvbikgdGhlQWN0aW9uKS5nZXRBY3Rpb25OYW1lKCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiIGJlY2F1c2Ugbm8gd2VibG9nIHdhcyBkZWZpbmVkIChDaGVjayBKU1AgZm9ybSBwcm92aWRlcyB3ZWJsb2cgdmFsdWUuKSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJhY2Nlc3MtZGVuaWVkIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVSUFjdGlvbi5ERU5JRUQ7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAvLyBhcmUgd2UgYWxzbyBlbmZvcmNpbmcgYSBzcGVjaWZpYyB3ZWJsb2cgcGVybWlzc2lvbj8KQEAgLTExMiw3ICsxMTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoIkRFTklFRDogdXNlciBkb2VzIG5vdCBoYXZlIHJlcXVpcmVkIHdlYmxvZyBwZXJtaXNzaW9ucyA9ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHJlcXVpcmVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJhY2Nlc3MtZGVuaWVkIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVUlBY3Rpb24uREVOSUVEOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9BcHBsaWNhdGlvblJlc291cmNlcy5wcm9wZXJ0aWVzIGIvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9BcHBsaWNhdGlvblJlc291cmNlcy5wcm9wZXJ0aWVzCmluZGV4IDhhNjhjNTYuLjI2NzNmNmUgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvQXBwbGljYXRpb25SZXNvdXJjZXMucHJvcGVydGllcworKysgYi9hcHAvc3JjL21haW4vcmVzb3VyY2VzL0FwcGxpY2F0aW9uUmVzb3VyY2VzLnByb3BlcnRpZXMKQEAgLTE5LDM3ICsxOSw0NiBAQAogIwogIyBXaGVuIHRvIHVzZSBkb3VibGUtYXBvc3Ryb3BoZSBmb3IgYW4gYXBvc3Ryb3BoZSBpbiByZXNvdXJjZSBzdHJpbmdzPyAgSWYgdGhleSdyZSBiZWluZyByZW5kZXJlZAogIyB2aWEgU3RydXRzIHM6dGV4dCBvciBKU1RMIGZtdDptZXNzYWdlICp3aXRoKiBwYXJhbWV0ZXJzIC0tIHNlZSBodHRwOi8vdGlueXVybC5jb20vbTVicW4yaAotIworCisKICMgLS0gQ29tbW9uIHRlcm1zIHVzZWQgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc3RyaW5ncyB0aGF0IG5lZWQgdHJhbnNsYXRpb24uCiBnZW5lcmljLmFsbD1BbGwKIGdlbmVyaWMubm9uZT1Ob25lCiBnZW5lcmljLmNhbmNlbD1DYW5jZWwKIGdlbmVyaWMuZG9uZT1Eb25lCiBnZW5lcmljLnllcz1ZZXMKK2dlbmVyaWMueWVzUmVtb3ZlPVllcyBSZW1vdmUKIGdlbmVyaWMubm89Tm8KIGdlbmVyaWMubmFtZT1OYW1lCiBnZW5lcmljLmRlc2NyaXB0aW9uPURlc2NyaXB0aW9uCitnZW5lcmljLmFjdGlvbj1BY3Rpb24KIGdlbmVyaWMuc2F2ZT1TYXZlCitnZW5lcmljLnJlbmFtZT1SZW5hbWUKIGdlbmVyaWMuZWRpdD1FZGl0CiBnZW5lcmljLmRlbGV0ZT1EZWxldGUKIGdlbmVyaWMudGFnbGluZT1UYWdsaW5lCi1nZW5lcmljLmVycm9yLmNoZWNrLmxvZ3M9Um9sbGVyIHN5c3RlbSBlcnJvciAtIEhhdmUgYWRtaW5pc3RyYXRvciBjaGVjayBSb2xsZXIgbG9ncyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KK2dlbmVyaWMuZXJyb3IuY2hlY2subG9ncz1TeXN0ZW0gZXJyb3IgLSBjaGVjayBsb2dzIGZvciBtb3JlIGluZm9ybWF0aW9uLgogZ2VuZXJpYy5jaGFuZ2VzLnNhdmVkPUNoYW5nZXMgc2F2ZWQKIGdlbmVyaWMudG9nZ2xlPVRvZ2dsZQorZ2VuZXJpYy5zdWNjZXNzPVN1Y2Nlc3MKK2dlbmVyaWMubG9va3NHb29kPUxvb2tzIGdvb2QhCitnZW5lcmljLnBvd2VyZWRCeT1Qb3dlcmVkIGJ5IEFwYWNoZSBSb2xsZXIKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJvb2ttYXJrRm9ybS5qc3AKIAogYm9va21hcmtGb3JtLmFkZC50aXRsZT1BZGQgTmV3IEJvb2ttYXJrCi1ib29rbWFya0Zvcm0uYWRkLnN1YnRpdGxlPUFkZGluZyBuZXcgYm9va21hcmsgaW4gZm9sZGVyIFt7MH1dCitib29rbWFya0Zvcm0uYWRkLnN1YnRpdGxlPUFkZGluZyBuZXcgYm9va21hcmsgaW4gZm9sZGVyOgogYm9va21hcmtGb3JtLmVkaXQudGl0bGU9RWRpdCBCb29rbWFyawotYm9va21hcmtGb3JtLmVkaXQuc3VidGl0bGU9RWRpdGluZyBib29rbWFyayBpbiBmb2xkZXIgW3swfV0KK2Jvb2ttYXJrRm9ybS5lZGl0LnN1YnRpdGxlPUVkaXRpbmcgYm9va21hcmsgaW4gZm9sZGVyOgogYm9va21hcmtGb3JtLmltYWdlPUltYWdlIFVSTAogYm9va21hcmtGb3JtLnJzc1VybD1OZXdzZmVlZCBVUkwKIGJvb2ttYXJrRm9ybS51cmw9Qm9va21hcmsgVVJMCiBib29rbWFya0Zvcm0uY3JlYXRlZD1Cb29rbWFyayAiezB9IiBjcmVhdGVkCiBib29rbWFya0Zvcm0udXBkYXRlZD1Cb29rbWFyayAiezB9IiB1cGRhdGVkCitib29rbWFya0Zvcm0ucmVxdWlyZWQ9TmFtZSBhbmQgQm9va21hcmsgVVJMIGFyZSByZXF1aXJlZC4KK2Jvb2ttYXJrRm9ybS5iYWRVcmxzPVRoZXNlIFVSTHMgYXJlIGludmFsaWQ6CiAKLWJvb2ttYXJrRm9ybS5yZXF1aXJlZEZpZWxkcz1UaGUgezB9IGFuZCB7MX0gZmllbGRzIGFyZSByZXF1aXJlZC4KK2Jvb2ttYXJrRm9ybS5yZXF1aXJlZEZpZWxkcz1OYW1lIGFuZCBCb29rbWFyayBVUkwgYXJlIHJlcXVpcmVkLgogCiAjIGVycm9ycyBmcm9tIHZhbGlkYXRpb24KIEJvb2ttYXJrLmVycm9yLm5hbWVOdWxsPU5hbWUgaXMgYSByZXF1aXJlZCBmaWVsZApAQCAtNjcsMzggKzc2LDQ0IEBACiBib29rbWFya3NGb3JtLnJvb3Q9cm9vdAogYm9va21hcmtzRm9ybS5yb290VGl0bGU9QmxvZ3JvbGwKIAotYm9va21hcmtzRm9ybS5yb290UHJvbXB0PVwKLVRoaXMgaXMgeW91ciBibG9nJydzIG1haW4gYm9va21hcmtzIGZvbGRlci4gXAotVGhlIGJvb2ttYXJrcyB5b3Uga2VlcCBoZXJlIHdpbGwgYXBwZWFyIGluIHRoZSBibG9ncm9sbCBzZWN0aW9uIG9mIHlvdXIgYmxvZyBcCi0oYXNzdW1pbmcgdGhhdCB5b3UgYXJlIHVzaW5nIG9uZSBvZiB0aGUgZGVmYXVsdCB0aGVtZXMpLiBZb3UgY2FuIGNyZWF0ZSBcCi1hZGRpdGlvbmFsIGJvb2ttYXJrIGZvbGRlcnMsIGJ1dCB5b3Ugd2lsbCBoYXZlIHRvIGFkZCBjb3JyZXNwb25kaW5nIGJvb2ttYXJrIGRpc3BsYXkgXAotbWFjcm9zIHRvIHlvdXIgd2VibG9nJydzIHRlbXBsYXRlcyBpZiB5b3Ugd2lzaCB0byBkaXNwbGF5IHRoZWlyIGNvbnRlbnRzLgorYm9va21hcmtzRm9ybS5zdWJ0aXRsZT1NYW5hZ2UgYmxvZ3JvbGxzIGluIHdlYmxvZyA8c3Bhbj57MH08L3NwYW4+CiAKLWJvb2ttYXJrc0Zvcm0uc3VidGl0bGU9TWFuYWdlIGJvb2ttYXJrcyBpbiB3ZWJsb2cgPHNwYW4+ezB9PC9zcGFuPgorYm9va21hcmtzRm9ybS5yb290UHJvbXB0PVRoaXMgaXMgeW91ciBibG9nJydzIGRlZmF1bHQgYmxvZ3JvbGwuIE1vc3QgYmxvZyB0aGVtZXMgZGlzcGxheSB0aGVzZSBsaW5rcyAocHJldmlvdXNseSBrbm93biBhcyBib29rbWFya3MpIGluIHRoZSBzaWRlYmFyIG9mIHRoZSBibG9nLiBZb3UgY2FuIGFsc28gZGVmaW5lIG5ldyBibG9ncm9sbCwgYnV0IHlvdSB3aWxsIGhhdmUgdG8gZWRpdCB5b3VyIHRoZW1lIHRlbXBsYXRlcyBpZiB5b3Ugd2lzaCB0byBkaXNwbGF5IHRoZW0uCitib29rbWFya3NGb3JtLm90aGVyUHJvbXB0PVRoaXMgaXMgYSBjdXN0b20gYmxvZ3JvbGwuIElmIHlvdSB3aXNoIHRvIGRpc3BsYXkgdGhlc2UgbGlua3Mgb24geW91ciBibG9nIHlvdSB3aWxsIGhhdmUgdG8gZWRpdCB5b3VyIGJsb2cgdGhlbWUgdGVtcGxhdGVzLgogCi1ib29rbWFya3NGb3JtLmFkZEJvb2ttYXJrPUFkZCBCb29rbWFyawotYm9va21hcmtzRm9ybS5hZGRGb2xkZXI9TmV3IEJvb2ttYXJrIEZvbGRlcgorYm9va21hcmtzRm9ybS5wYXRoPUJsb2dyb2xsCitib29rbWFya3NGb3JtLmJsb2dyb2xsTmFtZT1CbG9ncm9sbCBuYW1lCitib29rbWFya3NGb3JtLnN3aXRjaFRvPVN3aXRjaCB0byBibG9ncm9sbAorYm9va21hcmtzRm9ybS5kZWxldGVGb2xkZXI9RGVsZXRlIGN1cnJlbnQgYmxvZ3JvbGwKK2Jvb2ttYXJrc0Zvcm0ubmV3QmxvZ3JvbGw9TmV3IGJsb2dyb2xsLi4uCisKK2Jvb2ttYXJrc0Zvcm0uYWRkQm9va21hcms9QWRkIGJsb2dyb2xsIGxpbmsKK2Jvb2ttYXJrc0Zvcm0uYWRkRm9sZGVyPU5ldyBibG9ncm9sbAogYm9va21hcmtzRm9ybS5kZWxldGU9RGVsZXRlIHNlbGVjdGVkCi1ib29rbWFya3NGb3JtLmRlbGV0ZS5jb25maXJtPURlbGV0ZSBzZWxlY3RlZCBib29rbWFya3M/Ci1ib29rbWFya3NGb3JtLmRlbGV0ZUZvbGRlci5jb25maXJtPURlbGV0ZSBlbnRpcmUgZm9sZGVyIGluY2x1ZGluZyBhbGwgaXRzIGJvb2ttYXJrcz8KK2Jvb2ttYXJrc0Zvcm0uZGVsZXRlLmNvbmZpcm09Q29uZmlybSBTZWxlY3RlZCBMaW5rIERlbGV0ZQorYm9va21hcmtzRm9ybS5kZWxldGUuYXJlWW91U3VyZT1BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCBibG9ncm9sbCBsaW5rcz8KIGJvb2ttYXJrc0Zvcm0udXJsPVVSTAogYm9va21hcmtzRm9ybS5mZWVkdXJsPU5ld3NmZWVkIFVSTAotYm9va21hcmtzRm9ybS5mb2xkZXI9Qm9va21hcmsgRm9sZGVyCi1ib29rbWFya3NGb3JtLmRlbGV0ZUZvbGRlcj1EZWxldGUgZm9sZGVyCi1ib29rbWFya3NGb3JtLnZpZXdGb2xkZXI9U3dpdGNoIHRvIEZvbGRlcgotYm9va21hcmtzRm9ybS5lZGl0LnRpcD1DbGljayB0byBtb2RpZnkgdGhpcyBib29rbWFyawotYm9va21hcmtzRm9ybS5mb2xkZXIuZWRpdC50aXA9Q2xpY2sgdG8gZWRpdCBmb2xkZXIKLWJvb2ttYXJrc0Zvcm0ubW92ZT1Nb3ZlIHNlbGVjdGVkIHRvOgotYm9va21hcmtzRm9ybS5tb3ZlLmNvbmZpcm09TW92ZSBzZWxlY3RlZCBib29rbWFya3M/Ci1ib29rbWFya3NGb3JtLnBhdGg9Rm9sZGVyCi1ib29rbWFya3NGb3JtLnNlbGVjdEFsbExhYmVsPVNlbGVjdCBhbGwgYm9va21hcmtzCi1ib29rbWFya3NGb3JtLnNlbGVjdE9uZUxhYmVsPVNlbGVjdCBib29rbWFyayBuYW1lZCB7MH0KK2Jvb2ttYXJrc0Zvcm0uZm9sZGVyPUJsb2dyb2xsCitib29rbWFya3NGb3JtLmVkaXQudGlwPUNsaWNrIHRvIG1vZGlmeSB0aGlzIGxpbmsKK2Jvb2ttYXJrc0Zvcm0uZm9sZGVyLmVkaXQudGlwPUNsaWNrIHRvIGVkaXQgYmxvZ3JvbGwKK2Jvb2ttYXJrc0Zvcm0ubW92ZT1Nb3ZlIHNlbGVjdGVkIHRvCitib29rbWFya3NGb3JtLm1vdmUuY29uZmlybT1Nb3ZlIHNlbGVjdGVkIGxpbms/Citib29rbWFya3NGb3JtLnNlbGVjdEFsbExhYmVsPVNlbGVjdCBhbGwgbGlua3MKK2Jvb2ttYXJrc0Zvcm0uc2VsZWN0T25lTGFiZWw9U2VsZWN0IGJsb2dyb2xsIG5hbWVkIHswfQogYm9va21hcmtzRm9ybS52aXNpdExpbms9VmlzaXQKIGJvb2ttYXJrc0Zvcm0udmlzaXRMaW5rLnRpcD1DbGljayB0byB2aXNpdCB0aGlzIHNpdGUKIAogYm9va21hcmtzRm9ybS5lcnJvci5tb3ZlPUVycm9yIHBlcmZvcm1pbmcgbW92ZSwgcGFyZW50IHRvIGNoaWxkIG1vdmVzIG5vdCBhbGxvd2VkCi1ib29rbWFya3NGb3JtLmltcG9ydEJvb2ttYXJrcz1JbXBvcnQgYm9va21hcmtzIHZpYSBPUE1MCi1ib29rbWFya3NGb3JtLm5vcmVzdWx0cz1UaGVyZSBhcmUgY3VycmVudGx5IG5vIGZvbGRlcnMgb3IgYm9va21hcmtzCitib29rbWFya3NGb3JtLmltcG9ydEJvb2ttYXJrcz1JbXBvcnQgQmxvZ3JvbGwgdmlhIE9QTUwKK2Jvb2ttYXJrc0Zvcm0ubm9yZXN1bHRzPVRoZXJlIGFyZSBjdXJyZW50bHkgbm8gQmxvZ3JvbGwgbGlua3MKKworYm9va21hcmtzRm9ybS5hZGRCbG9ncm9sbC50aXRsZT1BZGQgTmV3IEJsb2dyb2xsCitib29rbWFya3NGb3JtLmVkaXRCbG9ncm9sbC50aXRsZT1FZGl0IEJsb2dyb2xsCitib29rbWFya3NGb3JtLmJsb2dyb2xsLnJlcXVpcmVkRmllbGRzPVlvdSBtdXN0IHNwZWNpZnkgYSBibG9ncm9sbCBuYW1lCisKK2Jsb2dyb2xsRGVsZXRlT0sucmVtb3ZlQmxvZ3JvbGw9Q29uZmlybSBCbG9ncm9sbCBEZWxldGUKK2Jsb2dyb2xsRGVsZXRlT0suYXJlWW91U3VyZT1BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIGJsb2dyb2xsIGFuZCBhbGwgb2YgaXRzIGxpbmtzPwogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCb29rbWFya3MgaW1wb3J0LmpzcAogCkBAIC0xMzUsMTEgKzE1MCwxMSBAQAogY2F0ZWdvcnlGb3JtLmFkZC50aXRsZT1BZGQgQ2F0ZWdvcnkKIGNhdGVnb3J5Rm9ybS5hZGQuc3VidGl0bGU9QWRkaW5nIGNhdGVnb3J5CiBjYXRlZ29yeUZvcm0uaW1hZ2U9SW1hZ2UgVVJMCi1jYXRlZ29yeUZvcm0uY3JlYXRlZD1DYXRlZ29yeSAiezB9IiBjcmVhdGVkCitjYXRlZ29yeUZvcm0uY3JlYXRlZD1DYXRlZ29yeSAgY3JlYXRlZAogY2F0ZWdvcnlGb3JtLmNoYW5nZXNTYXZlZD1DYXRlZ29yeSAiezB9IiB1cGRhdGVkCi1jYXRlZ29yeUZvcm0uZXJyb3IuZHVwbGljYXRlTmFtZT1DYXRlZ29yeSBuYW1lICJ7MH0iIGFscmVhZHkgaW4gdXNlLCBwbGVhc2UgY2hvb3NlIGFub3RoZXIKK2NhdGVnb3J5Rm9ybS5lcnJvci5kdXBsaWNhdGVOYW1lPUNhdGVnb3J5IG5hbWUgYWxyZWFkeSBpbiB1c2UKIGNhdGVnb3J5Rm9ybS5yZW1vdmVkPUNhdGVnb3J5ICJ7MH0iIGRlbGV0ZWQKLWNhdGVnb3J5Rm9ybS5yZXF1aXJlZEZpZWxkcz17MH0gaXMgcmVxdWlyZWQuCitjYXRlZ29yeUZvcm0ucmVxdWlyZWRGaWVsZHM9TmFtZSBpcyByZXF1aXJlZC4KIAogIyBlcnJvcnMgZnJvbSB2YWxpZGF0aW9uCiBDYXRlZ29yeS5lcnJvci5uYW1lTnVsbD1OYW1lIGlzIGEgcmVxdWlyZWQgZmllbGQKQEAgLTE1OCwxMiArMTczLDEzIEBACiBUaGVzZSBhcmUgeW91ciB0b3AtbGV2ZWwgd2VibG9nIGNhdGVnb3JpZXMuIFJvbGxlciByZXF1aXJlcyBhdCBsZWFzdCBvbmUgXAogY2F0ZWdvcnkgdG8gYmUgZGVmaW5lZC4gXAogQ2F0ZWdvcmllcyBhcmUgdXNlZCB0byBvcmdhbml6ZSB5b3VyIHdlYmxvZyBlbnRyaWVzIGFuZCB5b3VyIHJlYWRlcnMgY2FuIFwKLWNob29zZSB0byBzdWJzY3JpYmUgdG8gc2VwYXJhdGUgbmV3c2ZlZWRzIGZvciBlYWNoIG9mIHlvdXIgY2F0ZWdvcmllcy4KK2Nob29zZSB0byBzdWJzY3JpYmUgdG8gc2VwYXJhdGUgZmVlZHMgZm9yIGVhY2ggb2YgeW91ciBjYXRlZ29yaWVzLgogY2F0ZWdvcmllc0Zvcm0uYWRkQ2F0ZWdvcnk9QWRkIENhdGVnb3J5CiBjYXRlZ29yaWVzRm9ybS5tb3ZlPU1vdmUKIGNhdGVnb3JpZXNGb3JtLm1vdmUuY29uZmlybT1Nb3ZlIHNlbGVjdGVkIGNhdGVnb3JpZXM/CiBjYXRlZ29yaWVzRm9ybS5yZW1vdmU9UmVtb3ZlCiBjYXRlZ29yaWVzRm9ybS5pbWFnZVVybD1JbWFnZSBVUkwKK2NhdGVnb3J5Rm9ybS5iYWRVUkw9SW1hZ2UgVVJMIGlzIGludmFsaWQKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2F0ZWdvcnlEZWxldGVPSy5qc3AKIApAQCAtMjk2LDEwICszMTIsMTAgQEAKIAogY29uZmlnRm9ybS50aXRsZT1Sb2xsZXIgQ29uZmlndXJhdGlvbgogY29uZmlnRm9ybS5zdWJ0aXRsZT1DaGFuZ2Ugc2l0ZS13aWRlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCi1jb25maWdGb3JtLnByb21wdD1DaGFuZ2VzIHlvdSBtYWtlIGhlcmUgYXBwbHkgdG8gdGhlIGVudGlyZSBzaXRlLiBOb3RlIHRoYXQgXAotdGhlc2UgYXJlIDxpPnJ1bnRpbWU8L2k+IHByb3BlcnRpZXMgb25seS4gUGxlYXNlIHJlZmVyIHRvIHRoZSBSb2xsZXIgZG9jdW1lbnRhdGlvbiBcCi1mb3IgaW5mb3JtYXRpb24gb24gb3ZlcnJpZGluZyBSb2xsZXInJ3MgPGk+c3RhcnR1cDwvaT4gcHJvcGVydGllcyAoaW4gdGhlIFwKLXJvbGxlci5wcm9wZXJ0aWVzIGZpbGUpLgorY29uZmlnRm9ybS5wcm9tcHQ9PHA+TWFrZSB0aGUgY2hhbmdlcyB5b3Ugd2lzaCBhbmQgdGhlbiB1c2UgdGhlIDxiPlNhdmU8L2I+IGJ1dHRvbiBiZWxvdy4gXAorQ2hhbmdlcyB5b3UgbWFrZSBoZXJlIGFwcGx5IHRvIHRoZSBlbnRpcmUgc2l0ZS48cD4gXAorPHA+Tm90ZSB0aGF0IHRoZXJlIGlzIGFsc28gYSBSb2xsZXIgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgY29udGFpbnMgYWRkaXRpb25hbCBzZXR0aW5ncy4gXAorVGFsayB0byB5b3VyIHN5c3RlbXMgYWRtaW5pc3RyYXRvciBvciByZWZlciB0byB0aGUgUm9sbGVyIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9wPgogCiBjb25maWdGb3JtLnNpdGVTZXR0aW5ncz1TaXRlIFNldHRpbmdzCiBjb25maWdGb3JtLnNpdGVOYW1lPVNpdGUgTmFtZSAoZm9yIG1haW4gcGFnZSBhbmQgUlNTIGZlZWQpCkBAIC0zMjYsOCArMzQyLDggQEAKIAogY29uZmlnRm9ybS53ZWJsb2dTZXR0aW5ncz1XZWJsb2cgUmVuZGVyaW5nIFNldHRpbmdzCiBjb25maWdGb3JtLnBhZ2VNYXhFbnRyaWVzPU1heCBudW1iZXIgb2YgZW50cmllcyB0byBhbGxvdyBwZXIgcGFnZQotY29uZmlnRm9ybS5uZXdzZmVlZE1heEVudHJpZXM9TnVtYmVyIG9mIGVudHJpZXMgdG8gcHJvdmlkZSBpbiBuZXdzZmVlZHMKLWNvbmZpZ0Zvcm0uc3R5bGVkRmVlZHM9RGlzcGxheSBzdHlsZWQgbmV3c2ZlZWRzIGZvciBicm93c2VycworY29uZmlnRm9ybS5uZXdzZmVlZE1heEVudHJpZXM9TnVtYmVyIG9mIGVudHJpZXMgdG8gcHJvdmlkZSBpbiBmZWVkcworY29uZmlnRm9ybS5zdHlsZWRGZWVkcz1EaXNwbGF5IHN0eWxlZCBmZWVkcyBmb3IgYnJvd3NlcnMKIAogY29uZmlnRm9ybS5jb21tZW50U2V0dGluZ3M9Q29tbWVudCBhbmQgVHJhY2tiYWNrIFNldHRpbmdzCiBjb25maWdGb3JtLmVuYWJsZUNvbW1lbnRzPUFsbG93IHdlYmxvZyBjb21tZW50cz8KQEAgLTMzNSw3ICszNTEsNyBAQAogY29uZmlnRm9ybS5lbmFibGVUcmFja2JhY2tzPUFsbG93IHdlYmxvZyB0cmFja2JhY2tzPwogY29uZmlnRm9ybS5pZ25vcmVTcGFtVHJhY2tiYWNrcz1Eb24nJ3Qgc2F2ZSB0cmFja2JhY2tzIHRob3VnaHQgdG8gYmUgc3BhbQogY29uZmlnRm9ybS5jb21tZW50SHRtbEFsbG93ZWQ9QWxsb3cgaHRtbCBpbiBjb21tZW50cz8KLWNvbmZpZ0Zvcm0uY29tbWVudFBsdWdpbnM9RW5hYmxlZC9EaXNhYmxlIGNvbW1lbnQgZm9ybWF0dGluZyBwbHVnaW5zCitjb25maWdGb3JtLmNvbW1lbnRQbHVnaW5zPUVuYWJsZWQgY29tbWVudCBmb3JtYXR0aW5nIHBsdWdpbnMKIGNvbmZpZ0Zvcm0uZW1haWxDb21tZW50cz1BbGxvdyBlbWFpbCBub3RpZmljYXRpb24gb2YgY29tbWVudHM/CiBjb25maWdGb3JtLm1vZGVyYXRpb25SZXF1aXJlZD1SZXF1aXJlIGNvbW1lbnQgbW9kZXJhdGlvbiBmb3IgYWxsIHdlYmxvZ3MKIGNvbmZpZ0Zvcm0uZW5hYmxlVHJhY2tiYWNrVmFsaWRhdGlvbj1FbmFibGUgdmVyaWZpY2F0aW9uIG9mIHRyYWNrYmFjayBsaW5rcz8KQEAgLTM2NCwxMCArMzgwLDEwIEBACiAKIGNyZWF0ZVdlYnNpdGUudGlwLm5hbWU9VGhlIG5hbWUgaXMgdGhlIHRpdGxlIG9mIHlvdXIgd2VibG9nLCBpdCB3aWxsIGJlIFwKIGRpc3BsYXllZCBhdCB0aGUgdG9wIG9mIHlvdXIgd2VibG9nIHBhZ2UsIGFuZCBpbiB0aGUgdGl0bGUgZmllbGQgb2YgeW91ciBcCi13ZWJsb2cnJ3MgbmV3c2ZlZWQuIFRoaXMgZmllbGQgc2hvdWxkIG5vdCBpbmNsdWRlIEhUTUwuCit3ZWJsb2cnJ3MgZmVlZC4gVGhpcyBmaWVsZCBzaG91bGQgbm90IGluY2x1ZGUgSFRNTC4KIGNyZWF0ZVdlYnNpdGUudGlwLmRlc2NyaXB0aW9uPVRoZSBkZXNjcmlwdGlvbiBvZiB5b3VyIHdlYmxvZyBtYXkgYmUgZGlzcGxheWVkIFwKIGF0IHRoZSB0b3Agb2YgeW91ciB3ZWJsb2cgKGRlcGVuZGluZyBvbiB0aGUgdGhlbWUgeW91IGNob29zZSksIGFuZCBpdCB3aWxsIGJlIFwKLXVzZWQgaW4gZGVzY3JpcHRpb24gb3Igc3VidGl0bGUgZmllbGQgb2YgeW91ciBuZXdzZmVlZC4gVGhpcyBmaWVsZCBzaG91bGQgbm90IFwKK3VzZWQgaW4gZGVzY3JpcHRpb24gb3Igc3VidGl0bGUgZmllbGQgb2YgeW91ciBmZWVkLiBUaGlzIGZpZWxkIHNob3VsZCBub3QgXAogaW5jbHVkZSBIVE1MLgogY3JlYXRlV2Vic2l0ZS50aXAuaGFuZGxlPVRoZSBoYW5kbGUgaXMgYSBzaG9ydCBvbmUtd29yZCBuYW1lIGZvciB5b3VyIFwKIHdlYmxvZy4gSXQgd2lsbCBiZSB1c2VkIGluIHlvdXIgVVJMLCBzbyBwbGVhc2UgbGltaXQgaXQgdG8gc2ltcGxlIEFTQ0lJIFwKQEAgLTM4NSw3ICs0MDEsNyBAQAogY3JlYXRlV2Vic2l0ZS5oYW5kbGU9SGFuZGxlCiBjcmVhdGVXZWJzaXRlLmVtYWlsQWRkcmVzcz1FbWFpbCBBZGRyZXNzCiBjcmVhdGVXZWJzaXRlLmxvY2FsZT1Mb2NhbGUKLWNyZWF0ZVdlYnNpdGUudGltZVpvbmU9VGltZXpvbmUKK2NyZWF0ZVdlYnNpdGUudGltZXpvbmU9VGltZXpvbmUKIGNyZWF0ZVdlYnNpdGUudGhlbWU9VGhlbWUKIGNyZWF0ZVdlYnNpdGUud2VibG9nVXJsPVVSTAogY3JlYXRlV2Vic2l0ZS5idXR0b24uc2F2ZT1DcmVhdGUgV2VibG9nCkBAIC00MTMsNyArNDI5LDcgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVudHJ5IGVkaXRvcnMKIAogZWRpdG9yLnRleHQubmFtZT1QbGFpbiBIVE1MCi1lZGl0b3IueGluaGEubmFtZT1SaWNoIFRleHQgRWRpdG9yIChYaW5oYSkKK2VkaXRvci5zdW1tZXJub3RlLm5hbWU9UmljaCBUZXh0IEVkaXRvciAoU3VtbWVybm90ZSkKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29tbWVudCBlbWFpbHMKIApAQCAtNTY4LDcgKzU4NCw3IEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBJbnN0YWxsZXIKIAotaW5zdGFsbGVyLmJhbm5lclRpdGxlTGVmdD1BcGFjaGUgUm9sbGVyIFdlYmxvZ2dlcgoraW5zdGFsbGVyLmJhbm5lclRpdGxlTGVmdD1BcGFjaGUgUm9sbGVyCiBpbnN0YWxsZXIuYmFubmVyVGl0bGVSaWdodD1BdXRvLUluc3RhbGxlcgogCiAjIGRhdGFiYXNlIGVycm9yCkBAIC02NDAsOSArNjU2LDkgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9naW4KIAogbG9naW5QYWdlLnRpdGxlPVdlbGNvbWUgdG8gUm9sbGVyCi1sb2dpblBhZ2UucHJvbXB0PVBsZWFzZSBlbnRlciB5b3VyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCB0byBsb2dpbi4KLWxvZ2luUGFnZS5vcGVuSWRQcm9tcHQ9UGxlYXNlIGxvZ2luIHZpYSBPcGVuSUQKLWxvZ2luUGFnZS5vcGVuSWRIeWJyaWRQcm9tcHQ9T3IsIGxvZ2luIHdpdGggeW91ciB1c2VybmFtZSBhbmQgcGFzc3dvcmQKK2xvZ2luUGFnZS5wcm9tcHQ9UGxlYXNlIGxvZ2luCitsb2dpblBhZ2Uub3BlbklkUHJvbXB0PUxvZ2luIHdpdGggT3BlbklECitsb2dpblBhZ2Uub3BlbklkSHlicmlkUHJvbXB0PU9yIHdpdGggdXNlcm5hbWUKIGxvZ2luUGFnZS51c2VyTmFtZT1Vc2VybmFtZQogbG9naW5QYWdlLnBhc3N3b3JkPVBhc3N3b3JkCiBsb2dpblBhZ2Uub3BlbklEPU9wZW5JRCB1c2VybmFtZQpAQCAtNzA3LDggKzcyMyw4IEBACiBtYWluUGFnZS5jYXRlZ29yeT1DYXRlZ29yeQogbWFpblBhZ2Uuc2VhcmNoV2VibG9ncz1TZWFyY2ggZm9yIGJsb2dzCiBtYWluUGFnZS5hY3Rpb25zPUFjdGlvbnMKLW1haW5QYWdlLmxvZ2dlZEluQXM9bG9nZ2VkIGluIGFzCi1tYWluUGFnZS5jdXJyZW50V2Vic2l0ZT1lZGl0aW5nIHdlYmxvZworbWFpblBhZ2UubG9nZ2VkSW5Bcz1Mb2dnZWQgaW4gYXMKK21haW5QYWdlLmN1cnJlbnRXZWJzaXRlPUVkaXRpbmcgd2VibG9nCiBtYWluUGFnZS5tYWluTWVudT1NYWluIE1lbnUKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWFpbnRlbmFuY2UKQEAgLTczMCwxOSArNzQ2LDE0IEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTWVkaWEgZmlsZSBtYW5hZ2VtZW50CiAKLW1lZGlhRmlsZUltYWdlQ2hvb3Nlci5zdWJ0aXRsZT1DaG9vc2UgYW4gaW1hZ2UKLW1lZGlhRmlsZUltYWdlQ2hvb3Nlci5yb290UGFnZVRpcD1DbGljayB0byBjaG9vc2UgYW4gaW1hZ2Ugb3IgY2xpY2sgb24gYSBcCi1kaXJlY3RvcnkgdG8gZW50ZXIgaXQuCi1tZWRpYUZpbGVJbWFnZUNob29zZXIuZGlyUGFnZVRpcD1DbGljayB0byBjaG9vc2UgYW4gaW1hZ2Ugb3IgdXNlIHRoZSBTd2l0Y2ggdG8gRm9sZGVyIFwKLWRyb3AtZG93biB0byBtb3ZlIHRvIGFub3RoZXIgZGlyZWN0b3J5LgotCittZWRpYUZpbGVJbWFnZUNob29zZXIuc3VidGl0bGU9Q2hvb3NlIGEgTWVkaWEgRmlsZSB0byBiZSBpbnNlcnRlZAorbWVkaWFGaWxlSW1hZ2VDaG9vc2VyLnBhZ2VUaXA9U2VsZWN0IGFuIGltYWdlIGFuZCBpdCB3aWxsIGJlIGluY2x1ZGVkIGFzIGEgdGh1bWJuYWlsLCBvciBzZWxlY3QgYSBmaWxlIGFuZCBpdCB3aWxsIGJlIGluY2x1ZGVkIGFzIGEgbGluay4KIAogIyAtLSBNZWRpYSBGaWxlIEFkZAogCi1tZWRpYUZpbGVBZGQudGl0bGU9QWRkIG5ldyBtZWRpYSBmaWxlKHMpCi1tZWRpYUZpbGVBZGQucGFnZVRpcD1Vc2UgdGhpcyBwYWdlIHRvIHVwbG9hZCB1cCB0byBmaXZlIG5ldyBtZWRpYSBmaWxlcy4gXAotRm9ybSBmaWVsZHMgdGhhdCB5b3Ugc2V0IGJlbG93IHdpbGwgYmUgYXBwbGllZCB0byBhbGwgZmlsZXMgdXBsb2FkZWQuCi1tZWRpYUZpbGVBZGQuZmlsZUxvY2F0aW9uPUNob29zZSBmaWxlIHRvIHVwbG9hZAorbWVkaWFGaWxlQWRkLnRpdGxlPUFkZCBuZXcgbWVkaWEgZmlsZQorbWVkaWFGaWxlQWRkLnBhZ2VUaXA9VXNlIHRoaXMgcGFnZSB0byB1cGxvYWQgdXAgdG8gZml2ZSBuZXcgbWVkaWEgZmlsZXMuIFRoZSBuYW1lLCBkZXNjcmlwdGlvbiwgdGFncyBhbmQgb3RoZXIgcHJvcGVydGllcyB3aWxsIGJlIGFwcGxpZWQgdG8gYWxsIGZpbGVzIHVwbG9hZGVkLgorbWVkaWFGaWxlQWRkLmZpbGVMb2NhdGlvbj1DaG9vc2UgbWVkaWEgZmlsZXMgdG8gdXBsb2FkCiBtZWRpYUZpbGVBZGQudGFncz1UYWdzIChzcGFjZSBzZXBhcmF0ZWQpCiBtZWRpYUZpbGVBZGQuY29weXJpZ2h0PUNvcHlyaWdodCBzdGF0ZW1lbnQKIG1lZGlhRmlsZUFkZC5kaXJlY3Rvcnk9Rm9sZGVyCkBAIC03NTQsMjEgKzc2NSw4IEBACiAjLS0tIE1lZGlhIEZpbGUgU3VjY2VzcwogCiBtZWRpYUZpbGVBZGRTdWNjZXNzLnRpdGxlPU1lZGlhIEZpbGUgVXBsb2FkIENvbXBsZXRlCi1tZWRpYUZpbGVTdWNjZXNzLnN1YnRpdGxlPUNyZWF0ZSBhIG5ldyB3ZWJsb2cgZW50cnk/Ci1tZWRpYUZpbGVTdWNjZXNzLnBhZ2VUaXA9WW91ciB1cGxvYWQgd2FzIHN1Y2Nlc3NmdWwuIElmIHlvdSB3b3VsZCBsaWtlIHRvIFwKLWNyZWF0ZSBhIG5ldyB3ZWJsb2cgZW50cnkgaW5jbHVkaW5nIHlvdXIgbmV3bHkgdXBsb2FkZWQgZmlsZXMgdGhlbiB1c2UgdGhlIFwKLWZvcm0gYmVsb3cgdG8gc2VsZWN0IHRoZSBmaWxlKHMpIHRvIGJlIGluY2x1ZGVkLiBGb3IgaW1hZ2VzLCB3ZSB3aWxsIGluY2x1ZGUgXAotdGhlbSBpbiB5b3VyIHBvc3QgYXMgdGh1bWJuYWlscy4gRm9yIG90aGVyIGZpbGUgdHlwZXMgeW91IGNhbiBjaG9vc2Ugb25lIHRvIFwKLWJlIGF0dGFjaGVkIHRvIHRoZSBuZXcgcG9zdCBhcyBhbiBlbmNsb3N1cmUgKGkuZS4gYSBwb2RjYXN0KS4KLW1lZGlhRmlsZVN1Y2Nlc3MuY3JlYXRlUG9zdD1DcmVhdGUgYSB3ZWJsb2cgcG9zdCB1c2luZyB5b3VyIG5ldyB1cGxvYWQKLW1lZGlhRmlsZVN1Y2Nlc3MuYWRkQW5vdGhlcj1VcGxvYWQgYW5vdGhlciBtZWRpYSBmaWxlCi1tZWRpYUZpbGVTdWNjZXNzLmNyZWF0ZVBvc3RQcm9tcHQ9T25jZSB5b3UgaGF2ZSBzZWxlY3RlZCB0aGUgZmlsZShzKSB5b3Ugd2FudCwgXAotY2xpY2sgdGhlIGJ1dHRvbiB0byBjcmVhdGUgeW91ciBuZXcgd2VibG9nIGVudHJ5LgotbWVkaWFGaWxlU3VjY2Vzcy5ub0VuY2xvc3VyZT1ObyBlbmNsb3N1cmUKLW1lZGlhRmlsZVN1Y2Nlc3Muc2VsZWN0RW5jbG9zdXJlPVlvdSBjYW4gc2VsZWN0IG9uZSBmaWxlIChvciBub25lKSB0byBiZSBcCi1pbmNsdWRlZCBpbiB0aGUgd2VibG9nIGVudHJ5IGFzIGFuIFJTUy9BdG9tIGVuY2xvc3VyZSAoaS5lLiBhcyBhIHBvZGNhc3QpOgotbWVkaWFGaWxlU3VjY2Vzcy5zZWxlY3RJbWFnZXM9U2VsZWN0IHRoZSB0aGUgaW1hZ2VzIHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gXAotaW5jbHVkZSBpbiB5b3VyIG5ldyB3ZWJsb2cgZW50cnk6CittZWRpYUZpbGVTdWNjZXNzLnN1YnRpdGxlPVlvdXIgdXBsb2FkIHdhcyBzdWNjZXNzZnVsCittZWRpYUZpbGVTdWNjZXNzLnBhZ2VUaXA9SWYgeW91IHdpc2gsIHlvdSBjYW4gbm93IGNyZWF0ZSBhIG5ldyB3ZWJsb2cgcG9zdCBpbmNsdWRpbmcgaW1hZ2VzIG9yIGZpbGVzIHlvdSBqdXN0IHVwbG9hZGVkLgogCiBtZWRpYUZpbGVTdWNjZXNzLm5hbWU9TmFtZToKIG1lZGlhRmlsZVN1Y2Nlc3Muc2l6ZT1TaXplOgpAQCAtNzc3LDEzICs3NzUsMTkgQEAKIG1lZGlhRmlsZVN1Y2Nlc3MucGl4ZWxzPXBpeGVscwogbWVkaWFGaWxlU3VjY2Vzcy5ieXRlcz1ieXRlcwogCi1tZWRpYUZpbGVTdWNjZXNzLm5vVGhhbmtzPTxiPk5vdCBpbnRlcmVzdGVkPzwvYj4gSGVyZSBhcmUgc29tZSBvdGhlciBvcHRpb25zOgotbWVkaWFGaWxlU3VjY2Vzcy5tZWRpYUZpbGVWaWV3PVJldHVybiB0byBNZWRpYSBGaWxlIFZpZXcKK21lZGlhRmlsZVN1Y2Nlc3Muc2VsZWN0SW1hZ2VzVGl0bGU9U2VsZWN0IGltYWdlcworbWVkaWFGaWxlU3VjY2Vzcy5zZWxlY3RJbWFnZXM9U2VsZWN0IHRoZSB0aGUgaW1hZ2VzIHRoYXQgeW91IHdvdWxkIGxpa2UgdG8gaW5jbHVkZSBpbiB5b3VyIG5ldyB3ZWJsb2cgZW50cnkgYXMgdGh1bWJuYWlscy4KIAorbWVkaWFGaWxlU3VjY2Vzcy5zZWxlY3RFbmNsb3N1cmVUaXRsZT1TZWxlY3QgZmlsZSBlbmNsb3N1cmUKK21lZGlhRmlsZVN1Y2Nlc3Muc2VsZWN0RW5jbG9zdXJlPVlvdSBjYW4gc2VsZWN0IG9uZSBmaWxlIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBuZXcgd2VibG9nIGVudHJ5IGFzIGFuIFJTUy9BdG9tIGVuY2xvc3VyZS4KK21lZGlhRmlsZVN1Y2Nlc3Mubm9FbmNsb3N1cmU9Tm8gZW5jbG9zdXJlCisKK21lZGlhRmlsZVN1Y2Nlc3MuY3JlYXRlUG9zdD1DcmVhdGUgbmV3IHdlYmxvZyBwb3N0CittZWRpYUZpbGVTdWNjZXNzLnVwbG9hZE1vcmU9VXBsb2FkIG1vcmUuLi4KIAogIyAtLSBNZWRpYSBGaWxlIEVkaXQKIAotbWVkaWFGaWxlRWRpdC5zdWJ0aXRsZT1FZGl0aW5nIG1lZGlhIGZpbGUgPHNwYW4+ezB9PC9zcGFuPgorbWVkaWFGaWxlRWRpdC5zdWJ0aXRsZT1FZGl0aW5nIG1lZGlhIGZpbGUgCiBtZWRpYUZpbGVFZGl0LnBhZ2V0aXA9WW91IG1heSBlZGl0IHRoZSBpbmZvcm1hdGlvbiBzdG9yZWQgYWJvdXQgdGhpcyBtZWRpYSBcCiBmaWxlLiBFYWNoIGZpbGUgbXVzdCBoYXZlIGEgbmFtZSwgYnV0IGFsbCBvdGhlciBmaWVsZHMgYXJlIG9wdGlvbmFsLgogbWVkaWFGaWxlRWRpdC50YWdzPVRhZ3MgKHNwYWNlIHNlcGFyYXRlZCkKQEAgLTc5Miw3ICs3OTYsNyBAQAogbWVkaWFGaWxlRWRpdC5maWxlSW5mbz1GaWxlIGluZm8KIG1lZGlhRmlsZUVkaXQuZmlsZVR5cGVTaXplPTxiPlR5cGU8L2I+OiB7MH0gPGI+U2l6ZTwvYj46IHsxfSBieXRlcwogbWVkaWFGaWxlRWRpdC5maWxlRGltZW5zaW9ucz08Yj5JbWFnZTwvYj46IHswfSBYIHsxfSBwaXhlbHMKLW1lZGlhRmlsZUVkaXQuaW5jbHVkZUdhbGxlcnk9SW5jbHVkZSBpbiBHYWxsZXJ5PworbWVkaWFGaWxlRWRpdC5pbmNsdWRlR2FsbGVyeT1JbmNsdWRlIGluIEdhbGxlcnkKIG1lZGlhRmlsZUVkaXQuaW5jbHVkZUdhbGxlcnlIZWxwPUNoZWNrIHRoaXMgYm94IGlmIHlvdSB3b3VsZCBsaWtlIHRoaXMgbWVkaWEgXAogZmlsZSBpbmNsdWRlZCBpbiB0aGUgbmV3IG1lZGlhIGZpbGUgUlNTIGFuZCBBdG9tIGZlZWRzIGZvciB5b3VyIHdlYmxvZy4KIG1lZGlhRmlsZUVkaXQudXBkYXRlRmlsZUNvbnRlbnRzPVVwZGF0ZSBGaWxlIENvbnRlbnRzCkBAIC04MTQsNyArODE4LDcgQEAKIFVSTHMiIHdoZW4geW91IG1vdmUgb3IgcmVuYW1lIGZpbGVzLgogbWVkaWFGaWxlVmlldy5kaXJQYWdlVGlwPVRoaXMgaXMgYSBtZWRpYSBmaWxlIHN1YmZvbGRlci4KIAotbWVkaWFGaWxlVmlldy52aWV3Rm9sZGVyPVZpZXcgRm9sZGVyCittZWRpYUZpbGVWaWV3LnZpZXdGb2xkZXI9Rm9sZGVyCiAKIG1lZGlhRmlsZVZpZXcuc29ydEJ5PVNvcnQgYnkKIApAQCAtOTY4LDcgKzk3Miw3IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBhZ2UgbWFuYWdlbWVudAogCiBwYWdlc0Zvcm0udGl0bGU9VGVtcGxhdGVzCi1wYWdlc0Zvcm0uc3VidGl0bGU9TWFuYWdlIHRlbXBsYXRlcyB0aGF0IGRlZmluZSB3ZWJsb2cgPHNwYW4+ezB9PC9zcGFuPgorcGFnZXNGb3JtLnN1YnRpdGxlPU1hbmFnZSB0ZW1wbGF0ZXMgdGhhdCBkZWZpbmUgd2VibG9nIDxiPnswfTwvYj4KIHBhZ2VzRm9ybS50aXA9WW91IGNhbiBlZGl0IHRoZSB0ZW1wbGF0ZXMgdGhhdCBkZWZpbmUgdGhlIGxheW91dCwgY29sb3JzIGFuZCBcCiBmb250cyBvZiB5b3VyIHdlYmxvZy4gWW91IGNhbiBhbHNvIGNyZWF0ZSBuZXcgdGVtcGxhdGVzIHRvIGRlZmluZSBlbnRpcmVseSBcCiBuZXcgcGFnZXMuIFRoaXMgaXMgZm9yIGFkdmFuY2VkIHVzZXJzIG9ubHksIGlmIHlvdScncmUgbm90IGNvbWZvcnRhYmxlIFwKQEAgLTEwMDUsMTEgKzEwMDksMTMgQEAKIHVzZXJzIG9ubHksIGlmIHlvdScncmUgbm90IGNvbWZvcnRhYmxlIHdpdGggSFRNTCwgeW91IG1pZ2h0IHdhbnQgdG8gbGVhdmUgXAogeW91ciB0ZW1wbGF0ZXMgYWxvbmUuIE5PVEU6IHRoaXMgaXMgYSByZXF1aXJlZCB3ZWJsb2cgdGVtcGxhdGUsIHlvdSBjYW5ub3QgXAogY2hhbmdlIHRoZSBuYW1lLCBsaW5rIG9yIGRlc2NyaXB0aW9uLgotcGFnZUZvcm0ubGluaz1MaW5rCitwYWdlRm9ybS5saW5rPUxpbmsgKHBhdGgpCitwYWdlRm9ybS5yZXN1bHRpbmdVcmxXaWxsQmU9UmVzdWx0aW5nIFVSTCB3aWxsIGJlOiAKK3BhZ2VGb3JtLm5vVXJsPU5vIGxpbmshIFdpbGwgYmUgdW5hYmxlIHRvIGFjY2VzcyB0aGlzIG5ldyBwYWdlIHZpYSB0aGUgd2ViCiBwYWdlRm9ybS5oaWRkZW49SGlkZGVuCi1wYWdlRm9ybS5oaWRkZW4udGlwPUhpZGRlbiBwYWdlcyBjYW5ub3QgYmUgYWNjZXNzZWQgdmlhIGEgd2VibG9nIFVSTAotcGFnZUZvcm0ubmF2YmFyPUluY2x1ZGUgaW4gcGFnZSBtZW51Ci1wYWdlRm9ybS5uYXZiYXIudGlwPUluY2x1ZGUgaW4gbWVudSBwcm9kdWNlZCBieSBzaG93UGFnZU1lbnUoKSBtYWNybworcGFnZUZvcm0uaGlkZGVuLnRpcD1IaWRkZW4gcGFnZXMgY2Fubm90IGJlIGFjY2Vzc2VkIHZpYSBVUkwKK3BhZ2VGb3JtLm5hdmJhcj1JbmNsdWRlIGluIHBhZ2UgbWVudSAKK3BhZ2VGb3JtLm5hdmJhci50aXA9SW5jbHVkZSBpbiBtZW51IHByb2R1Y2VkIGJ5IDxwcmU+c2hvd1BhZ2VNZW51KCk8L3ByZT4gbWFjcm8gCiBwYWdlRm9ybS50ZW1wbGF0ZT1UZW1wbGF0ZQogcGFnZUZvcm0ubmV3VGVtcGxhdGVDb250ZW50PTxodG1sPjxib2R5PjwvYm9keT48L2h0bWw+CiBwYWdlRm9ybS5zYXZlLnN1Y2Nlc3M9VGVtcGxhdGUgdXBkYXRlZCBzdWNjZXNzZnVsbHkuCkBAIC0xMDIxLDE0ICsxMDI3LDcgQEAKIHBhZ2VGb3JtLnRlbXBsYXRlTGFuZ3VhZ2U9VGVtcGxhdGUgTGFuZ3VhZ2UKIHBhZ2VGb3JtLm91dHB1dENvbnRlbnRUeXBlPUNvbnRlbnQtVHlwZQogCi1wYWdlUmVtb3ZlLnN1YnRpdGxlPUNvbmZpcm0gcmVtb3ZhbCBvZiBwYWdlCi1wYWdlUmVtb3Zlcy5zdWJ0aXRsZT1Db25maXJtIHJlbW92YWwgb2YgcGFnZXMKLXBhZ2VSZW1vdmUueW91U3VyZT1BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgcGFnZT8KLXBhZ2VSZW1vdmVzLnlvdVN1cmU9QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGVzZSBwYWdlcz8KLXBhZ2VSZW1vdmVzLnlvdVN1cmVXYXJuaW5nPTxiPldBUk5JTkc8L2I+OiBUaGlzIG1heSByZW1vdmUgY3VzdG9tIGh0bWwvY3NzIGRlc2lnbiBhbmQgaXMgPGI+Tk9UIFJFVkVSU0lCTEU8L2I+LiBcCi1Zb3UgbWlnaHQgd2FudCB0byA8Yj5iYWNrdXAgeW91ciBzdHlsZXNoZWV0PC9iPiBpZiB5b3UgYXJlIG5vdCBzdXJlLgotcGFnZVJlbW92ZS5wYWdlSWQ9UGFnZSBJRAotcGFnZVJlbW92ZS5wYWdlTmFtZT1QYWdlIE5hbWUKK3BhZ2VSZW1vdmUuY29uZmlybT1BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlIHRoaXMgdGVtcGxhdGU6IAogCiAjIGVycm9ycyBmcm9tIHZhbGlkYXRpb24KIFRlbXBsYXRlLmVycm9yLm5hbWVOdWxsPU5hbWUgaXMgYSByZXF1aXJlZCBmaWVsZApAQCAtMTEwNSwxOCArMTEwNCwxNiBAQAogcGluZ1RhcmdldC51bmtub3duSG9zdD1UaGUgaG9zdG5hbWUgaW4gdGhpcyBVUkwgZG9lc24nJ3Qgc2VlbSB0byBleGlzdC4KIHBpbmdUYXJnZXQubm90Rm91bmQ9UGluZyB0YXJnZXQgaWQgezB9IHdhcyBub3QgZm91bmQKIAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhbmV0IFJvbGxlcgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhbmV0IFJvbGxlcjogY29uZmlnCiAKIHBsYW5ldENvbmZpZy50aXRsZT1QbGFuZXQgQ29uZmlndXJhdGlvbgotcGxhbmV0Q29uZmlnLnN1YnRpdGxlPUNvbmZpZ3VyZSBSb2xsZXInJ3MgYnVpbHQtaW4gbmV3c2ZlZWQgYWdncmVnYXRvci4KLXBsYW5ldENvbmZpZy5wcm9tcHQ9U2V0IHRoZSB0aXRsZSwgZGVzY3JpcHRpb24sIGVtYWlsIGFkZHJlc3MgYW5kIHNpdGUgVVJMIFwKLXRvIGJlIGluY2x1ZGVkIGluIG5ld3NmZWVkcyBwcm9kdWNlZCBieSB0aGUgYWdncmVnYXRvci4gWW91IGNhbiBhbHNvIHNldHVwIGEgXAotcHJveHkgaWYgb25lIGlzIHJlcXVpcmVkIHJlcXVpcmVkIGJ5IHlvdXIgbmV0d29yay4KK3BsYW5ldENvbmZpZy5zdWJ0aXRsZT1Db25maWd1cmUgUm9sbGVyXCdzIGJ1aWx0LWluIFJTUy9BdG9tIGZlZWQgYWdncmVnYXRvci4KK3BsYW5ldENvbmZpZy5wcm9tcHQ9Um9sbGVyJ3MgUGxhbmV0IGZlYXR1cmUgZ2l2ZXMgeW91IGEgd2F5IHRvIGFnZ3JlZ2F0ZSBhbGwgb2YgdGhlIHdlYmxvZ3Mgb24geW91ciBzaXRlIGFsb25nIHdpdGggZmVlZHMgZnJvbSBvdGhlciBzaXRlcy4gT24gdGhpcyBwYWdlIHlvdSBjYW4gc2V0IHRpdGxlLCBkZXNjcmlwdGlvbiBhbmQgZW1haWwgYWRkcmVzc2VzIHRoYXQgYXJlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgUlNTIG9yIEF0b20gZmVlZHMgZm9yIHlvdXIgYWdncmVnYXRpb24sIGFuZCB0byBiZSB1c2VkIGluIHdlYmxvZyB0ZW1wbGF0ZXMgdGhhdCBkaXNwbGF5IHlvdXIgc2l0ZS4gWW91IGNhbiBhbHNvIGNvbmZpZ3VyZSBhIHByb3h5IGlmIHlvdSBSb2xsZXIgc2l0ZSByZXF1aXJlcyBvbmUuCiAKIENvbmZpZ0Zvcm0uc2l0ZVNldHRpbmdzPVBsYW5ldCBTZXR0aW5ncwotQ29uZmlnRm9ybS50aXRsZT1QbGFuZXQgdGl0bGVcdAotQ29uZmlnRm9ybS5kZXNjcmlwdGlvbj1QbGFuZXQgZGVzY3JpcHRpb25cdFx0Ci1Db25maWdGb3JtLmFkbWluTmFtZT1OYW1lIG9mIFBsYW5ldCBhZG1pbmlzdHJhdG9yIFx0XHQKK0NvbmZpZ0Zvcm0udGl0bGU9UGxhbmV0IHRpdGxlCitDb25maWdGb3JtLmRlc2NyaXB0aW9uPVBsYW5ldCBkZXNjcmlwdGlvbgorQ29uZmlnRm9ybS5hZG1pbk5hbWU9TmFtZSBvZiBQbGFuZXQgYWRtaW5pc3RyYXRvcgogQ29uZmlnRm9ybS5hZG1pbkVtYWlsPUVtYWlsIG9mIFBsYW5ldCBhZG1pbmlzdHJhdG9yCiBDb25maWdGb3JtLmFic29sdXRlVXJsPUFic29sdXRlIFVSTCB0byBQbGFuZXQgcGFnZQogQ29uZmlnRm9ybS5wcm94eUhvc3Q9UHJveHkgaG9zdCBmb3IgZmVlZCBmZXRjaGVyCkBAIC0xMTI1LDU3ICsxMTIyLDcyIEBACiBDb25maWdGb3JtLm1lc3NhZ2Uuc2F2ZVN1Y2NlZWRlZD1TYXZlZCBQbGFuZXQgY29uZmlndXJhdGlvbgogQ29uZmlnRm9ybS5lcnJvci5zYXZlRmFpbGVkPUVycm9yIHNhdmluZyBQbGFuZXQgY29uZmlndXJhdGlvbgogCitDb25maWdGb3JtLmludmFsaWRCb29sZWFuUHJvcGVydHk9UHJvcGVydHkgezB9IG11c3QgYmUgYSBib29sZWFuOiB7MX0KK0NvbmZpZ0Zvcm0uaW52YWxpZEludGVnZXJQcm9wZXJ0eT1Qcm9wZXJ0eSB7MH0gbXVzdCBiZSBhbiBpbnRlZ2VyOiB7MX0KK0NvbmZpZ0Zvcm0uaW52YWxpZEZsb2F0UHJvcGVydHk9UHJvcGVydHkgezB9IG11c3QgYmUgYSBmbG9hdDogezF9CitDb25maWdGb3JtLmludmFsaWRQcm9wZXJ0eT1Qcm9wZXJ0eSB7MH0gaXMgbnVsbAogCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYW5ldFN1YnNjcmlwdGlvbnMuanNwCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYW5ldCBSb2xsZXI6IGdyb3VwIHN1YnNjcmlwdGlvbnMKIAotcGxhbmV0U3Vic2NyaXB0aW9ucy50aXRsZT1TdWJzY3JpcHRpb25zCitwbGFuZXRHcm91cFN1YnMuZGVmYXVsdC50aXRsZT1EZWZhdWx0IFBsYW5ldCBHcm91cCBTdWJzY3JpcHRpb25zCitwbGFuZXRHcm91cFN1YnMuZGVmYXVsdC5zdWJ0aXRsZT1NYW5hZ2UgZmVlZCBzdWJzY3JpcHRpb25zIGZvciBSb2xsZXIncyBEZWZhdWx0IFBsYW5ldCBHcm91cAorcGxhbmV0R3JvdXBTdWJzLmRlZmF1bHQuZGVzYz1CeSBkZWZhdWx0LCBSb2xsZXIncyBQbGFuZXQgZmVhdHVyZSBpbmNsdWRlcyBhbGwgd2VibG9ncyBvbiB0aGlzIFJvbGxlciBzaXRlIGluIHRoZSBhZ2dyZWdhdGlvbi4gT24gdGhpcyBwYWdlIHlvdSBjYW4gYWRkIFJTUyBhbmQgQXRvbSBmZWVkcyBmcm9tIG90aGVyIHNpdGVzIHRvIHRoaXMgYWdncmVnYXRpb24uCiAKLXBsYW5ldFN1YnNjcmlwdGlvbnMuc3VidGl0bGUuYWRkPVwKLU1hbmFnZSBuZXdzZmVlZCBzdWJzY3JpcHRpb25zIGluIGdyb3VwIFs8Yj57MH08L2I+XS4KLXBsYW5ldFN1YnNjcmlwdGlvbnMucHJvbXB0LmFkZD1UbyBhZGQgYSBuZXcgc3Vic2NyaXB0aW9uIHNpbXBseSBlbnRlciBhIFwKLW5ld3NmZWVkIFVSTCB0aGVuIGNsaWNrIHRoZSBTYXZlIGJ1dHRvbi4KK3BsYW5ldEdyb3VwU3Vicy5jdXN0b20udGl0bGU9Q3VzdG9tIFBsYW5ldCBHcm91cCB7MH0KK3BsYW5ldEdyb3VwU3Vicy5jdXN0b20udGl0bGUubmV3PU5ldyBDdXN0b20gUGxhbmV0IEdyb3VwCitwbGFuZXRHcm91cFN1YnMuY3VzdG9tLnN1YnRpdGxlPU1hbmFnZSBmZWVkIHN1YnNjcmlwdGlvbnMgZm9yIEN1c3RvbSBQbGFuZXQgR3JvdXAgezB9CitwbGFuZXRHcm91cFN1YnMuY3VzdG9tLmRlc2M9VGhpcyBpcyBhIEN1c3RvbSBQbGFuZXQgR3JvdXAuIE9uY2UgeW91IGhhdmUgYWRkZWQgb25lIG9yIG1vcmUgUlNTL0F0b20gZmVlZHMgaGVyZSBSb2xsZXIgd2lsbCBjcmVhdGUgYW4gYWdncmVnYXRlZCBmZWVkIHRoYXQgY29udGFpbmluZyBlbnRyaWVzIGZyb20gYWxsIG9mIHRoZSBmZWVkcyB5b3UgYWRkLiBZb3UgY2FuIGRpc3BsYXkgdGhhdCBhZ2dyZWdhdGVkIGZlZWQgaW4gYSBibG9nIHRlbXBsYXRlIG9yIGFjY2VzcyBpdCB2aWEgVVJMLgogCi1wbGFuZXRTdWJzY3JpcHRpb25zLnN1YnRpdGxlLmFkZE1haW49XAotTWFuYWdpbmcgdGhlIG1haW4gbGlzdCBvZiBuZXdzZmVlZCBzdWJzY3JpcHRpb25zLgotcGxhbmV0U3Vic2NyaXB0aW9ucy5wcm9tcHQuYWRkTWFpbj1Vc2UgdGhpcyBwYWdlIHRvIGFkZCBcCi1zdWJzY3JpcHRpb25zIHRvIHRoZSBsaXN0IG9mIG5ld3NmZWVkcyB0aGF0IGFyZSB0byBiZSBpbmNsdWRlZCBvbiB0aGUgbWFpbiBcCi1QbGFuZXQgYWdncmVnYXRvciBwYWdlLiBUbyBhZGQgYSBuZXcgc3Vic2NyaXB0aW9uIHNpbXBseSBlbnRlciBhIFwKLW5ld3NmZWVkIFVSTCB0aGVuIGNsaWNrIHRoZSBTYXZlIGJ1dHRvbi4KK3BsYW5ldEdyb3VwU3Vicy5jdXN0b20uc3VidGl0bGUubmV3PUNyZWF0aW5nIGEgbmV3IEN1c3RvbSBQbGFuZXQgR3JvdXAKIAotcGxhbmV0U3Vic2NyaXB0aW9ucy5leGlzdGluZ1RpdGxlPUV4aXN0aW5nIFN1YnNjcmlwdGlvbnMKLXBsYW5ldFN1YnNjcmlwdGlvbnMuY29sdW1uLnRpdGxlPVRpdGxlCi1wbGFuZXRTdWJzY3JpcHRpb25zLmNvbHVtbi5mZWVkVXJsPUZlZWQgVVJMCi1wbGFuZXRTdWJzY3JpcHRpb24uZmVlZFVybD1OZXdzZmVlZCBVUkwKK3BsYW5ldEdyb3VwU3Vicy5hZGRGZWVkPUFkZCBhIG5ldyBSU1MvQXRvbSBmZWVkIHN1YnNjcmlwdGlvbgorcGxhbmV0R3JvdXBTdWJzLmNyZWF0aW5nTmV3R3JvdXA9QmVmb3JlIHlvdSBjYW4gYWRkIHN1YnNjcmlwdGlvbnMgeW91IG11c3Qgc2V0IGEgbmFtZSBhbmQgaGFuZGxlIGZvciB5b3VyIG5ldyBDdXN0b20gUGxhbmV0IEZlZWQuCitwbGFuZXRHcm91cFN1YnMuZWRpdGluZ0V4aXN0aW5nR3JvdXA9WW91IGNhbiBlZGl0IHRoZSBuYW1lIGFuZCBoYW5kbGUgZm9yIHRoZSBncm91cCwgYnV0IGJlIGF3YXJlIHRoYXQgY2hhbmdpbmcgdGhlIGhhbmRsZSB3aWxsIGNoYW5nZSB0aGUgVVJMIG9mIHRoZSBQbGFuZXQgR3JvdXAuCisKK3BsYW5ldEdyb3VwU3Vicy5ub25lRGVmaW5lZEN1c3RvbT1ObyBmZWVkIHN1YnNjcmlwdGlvbnMgZXhpc3QgZm9yIHRoaXMgQ3VzdG9tIFBsYW5ldCBHcm91cAorcGxhbmV0R3JvdXBTdWJzLm5vbmVEZWZpbmVkRGVmYXVsdD1ObyBhZGRpdGlvbmFsIGZlZWRzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgRGVmYXVsdCBQbGFuZXQgR3JvdXAKKworcGxhbmV0R3JvdXBTdWJzLnByb3BlcnRpZXM9UHJvcGVydGllcworcGxhbmV0R3JvdXBTdWJzLnN1YnNjcmlwdGlvbnM9U3Vic2NyaXB0aW9ucworcGxhbmV0R3JvdXBTdWJzLmNvbHVtbi50aXRsZT1UaXRsZQorcGxhbmV0R3JvdXBTdWJzLmNvbHVtbi5mZWVkVXJsPUZlZWQgVVJMCitwbGFuZXRTdWJzY3JpcHRpb24uZmVlZFVybD1GZWVkIFVSTAogcGxhbmV0U3Vic2NyaXB0aW9uLnN1Y2Nlc3MuZGVsZXRlZD1TdWJzY3JpcHRpb24gc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQKIHBsYW5ldFN1YnNjcmlwdGlvbi5mb3VuZEV4aXN0aW5nPUZvdW5kIGV4aXN0aW5nIHN1YnNjcmlwdGlvbiBbezB9XSwgYWRkaW5nIGl0IGluc3RlYWQKIHBsYW5ldFN1YnNjcmlwdGlvbi5zdWNjZXNzLnNhdmVkPVNhdmVkIHN1YnNjcmlwdGlvbgotcGxhbmV0U3Vic2NyaXB0aW9uLmVycm9yPU11c3Qgc3BlY2lmeSBuZXdmZWVkIFVSTAotcGxhbmV0U3Vic2NyaXB0aW9uLmVycm9yLmZlZWRVcmw9TmV3c2ZlZWQgVVJMIGlzIHJlcXVpcmVkCi1wbGFuZXRTdWJzY3JpcHRpb25zLmVycm9yLmR1cmluZ1NhdmU9RHVwbGljYXRlIHN1YnNjcmlwdGlvbj8gLSB7MH0KK3BsYW5ldFN1YnNjcmlwdGlvbi5lcnJvcj1NdXN0IHNwZWNpZnkgZmVlZCBVUkwKK3BsYW5ldFN1YnNjcmlwdGlvbi5lcnJvci5mZWVkVXJsPUZlZWQgVVJMIGlzIHJlcXVpcmVkCitwbGFuZXRHcm91cFN1YnMuZXJyb3IuZHVyaW5nU2F2ZT1VbmV4cGVjdGVkIGVycm9yIHNhdmluZyBzdWJzY3JpcHRpb246IHswfQorcGxhbmV0R3JvdXBTdWJzLmVycm9yLmZldGNoaW5nRmVlZD1FcnJvciBmZXRjaGluZyBzdWJzY3JpcHRpb246IHswfQogcGxhbmV0U3Vic2NyaXB0aW9uLmVycm9yLmRlbGV0aW5nPUVycm9yIGRlbGV0aW5nIG9iamVjdAogCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGFuZXRHcm91cHMuanNwCitwbGFuZXRHcm91cFN1YnMuYmFkRmVlZFVSTD1JbnZhbGlkIFVSTAorCitwbGFuZXRHcm91cFN1YnMuZGVsZXRlLmNvbmZpcm09QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHN1YnNjcmlwdGlvbj8KKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhbmV0IFJvbGxlcjogZ3JvdXBzCiAKIHBsYW5ldEdyb3Vwcy5wYWdldGl0bGU9Q3VzdG9tIFBsYW5ldCBHcm91cHMKLXBsYW5ldEdyb3Vwcy5zdWJ0aXRsZT1BZGQgY3VzdG9tIGFnZ3JlZ2F0aW9uIGdyb3VwcywgZWFjaCBhdmFpbGFibGUgYXMgYSBuZXdzZmVlZC4KK3BsYW5ldEdyb3Vwcy5zdWJ0aXRsZT1NYW5hZ2UgQ3VzdG9tIFBsYW5ldCBHcm91cHMsIGVhY2ggYXZhaWxhYmxlIGZvciB1c2UgaW4gd2VibG9nIHRlbXBsYXRlcyBvciBhcyBhIGZlZWQuCiAKLXBsYW5ldEdyb3Vwcy5wcm9tcHQuYWRkPVRvIGNyZWF0ZSBhIGdyb3VwLCBcCi1qdXN0IGVudGVyIGEgZGlzcGxheSBuYW1lIGFuZCBhIHVuaXF1ZSBoYW5kbGUgdG8gYmUgdXNlZCBpbiB0aGUgbmV3c2ZlZWQgVVJMIFwKLXRoZW4gY2xpY2sgU2F2ZS4KLXBsYW5ldEdyb3Vwcy5wcm9tcHQuZWRpdD1Zb3UgYXJlIGVkaXRpbmcgYSBjdXN0b20gYWdncmVnYXRpb24gZ3JvdXAuIE1ha2UgXAoteW91ciBjaGFuZ2VzIGFuZCB0aGVuIGNsaWNrIFNhdmUuIE9yLCB1c2UgY2xpY2sgRGVsZXRlIHRvIHJlbW92ZSBpdC4KK3BsYW5ldEdyb3Vwcy5wcm9tcHQuYWRkPVRvIGNyZWF0ZSBhIGdyb3VwLCBqdXN0IGVudGVyIGEgZGlzcGxheSBuYW1lIGFuZCBhIHVuaXF1ZSBoYW5kbGUgdG8gYmUgdXNlZCBpbiB0aGUgZmVlZCBVUkwgdGhlbiBjbGljayBTYXZlLgorcGxhbmV0R3JvdXBzLnByb21wdC5lZGl0PVlvdSBhcmUgZWRpdGluZyBhIGN1c3RvbSBhZ2dyZWdhdGlvbiBncm91cC4gTWFrZSB5b3VyIGNoYW5nZXMgYW5kIHRoZW4gY2xpY2sgU2F2ZS4gT3IsIHVzZSBjbGljayBEZWxldGUgdG8gcmVtb3ZlIGl0LgogCiBwbGFuZXRHcm91cHMuZXhpc3RpbmdUaXRsZT1FeGlzdGluZyBDdXN0b20gQWdncmVnYXRpb24gR3JvdXBzCiBwbGFuZXRHcm91cHMuZXhpc3RpbmdQcm9tcHQ9U2VsZWN0IGFuIGV4aXN0aW5nIGN1c3RvbSBhZ2dyZWdhdGlvbiBncm91cCB0byBlZGl0LgogCitwbGFuZXRHcm91cHMubm9uZURlZmluZWQ9Tm8gQ3VzdG9tIFBsYW5ldCBHcm91cHMgZGVmaW5lZC4KKwogcGxhbmV0R3JvdXBzLmNvbHVtbi50aXRsZT1UaXRsZQogcGxhbmV0R3JvdXBzLmNvbHVtbi5zdWJzY3JpcHRpb25zPVN1YnNjcmlwdGlvbnMKIHBsYW5ldEdyb3Vwcy5jb2x1bW4uaGFuZGxlPUhhbmRsZQogCi1wbGFuZXRHcm91cHMudGlwLnRpdGxlPVRpdGxlIG9mIGdyb3VwCi1wbGFuZXRHcm91cHMudGlwLmhhbmRsZT1IYW5kbGUgb2YgdGhpcyBncm91cAorcGxhbmV0R3JvdXBzLnRpcC50aXRsZT1UaXRsZSBvZiB0aGUgZ3JvdXAgZm9yIGRpc3BsYXkgcHVycG9zZXMuCitwbGFuZXRHcm91cHMudGlwLmhhbmRsZT1IYW5kbGUgb2YgdGhpcyBncm91cC4gQSBzaW1wbGUgc3RyaW5nIHdpdGggbm8gc3BhY2VzIHRvIGJlIHVzZWQgaW4gdGhlIGdyb3VwJ3MgVVJMLgogcGxhbmV0R3JvdXBzLmVkaXQudGlwPUVkaXQgdGhpcyBncm91cAogCitwbGFuZXRHcm91cFN1YnMuc3Vic2NyaXB0aW9uRGVzYz1BZGQgc3Vic2NyaXB0aW9ucyB0byB0aGlzIGdyb3VwIHZpYSB0aGUgZm9ybSBvbiB0aGUgcmlnaHQuCisKIHBsYW5ldEdyb3Vwcy50aXRsZT1UaXRsZQogcGxhbmV0R3JvdXBzLmhhbmRsZT1IYW5kbGUKIApAQCAtMTE4OCw2ICsxMjAwLDggQEAKIHBsYW5ldEdyb3Vwcy5lcnJvci5oYW5kbGU9SGFuZGxlIGlzIHJlcXVpcmVkCiBwbGFuZXRHcm91cHMuZXJyb3IubmFtZVJlc2VydmVkPUNhbicndCB1c2UgaGFuZGxlICcnYWxsJycKIAorcGxhbmV0R3JvdXBzLmRlbGV0ZS5jb25maXJtPUFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBncm91cD8KKwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3RhdGlzdGljcwogCiBzdGF0Q291bnQud2VibG9nQ29tbWVudENvdW50VHlwZT1XZWJsb2cgY29tbWVudCBjb3VudApAQCAtMTE5NywzMCArMTIxMSw1MyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3R5bGVzaGVldCBFZGl0b3IKIAogc3R5bGVzaGVldEVkaXQudGl0bGU9U3R5bGVzaGVldAotc3R5bGVzaGVldEVkaXQuc3VidGl0bGU9RWRpdCB3ZWJsb2cgY3VzdG9tIHN0eWxlc2hlZXQKLXN0eWxlc2hlZXRFZGl0LnRpcD1UaGlzIGZvcm0gYWxsb3dzIHlvdSB0byBlZGl0IHRoZSBzdHlsZXNoZWV0IGZvciB5b3VyIHRoZW1lLgotc3R5bGVzaGVldEVkaXQucmV2ZXJ0VGlwPUlmIHlvdSBydW4gaW50byBhbnkgcHJvYmxlbXMgeW91IGRvbicndCBrbm93IGhvdyB0byBcCi1maXggeW91IGNhbiBzdGFydCBvdmVyIGF0IGFueSB0aW1lIGJ5IGNsaWNraW5nIHRoZSByZXN0b3JlIGJ1dHRvbi4gIFBsZWFzZSA8Yj5iYWNrdXA8L2I+IHlvdXIgc3R5bGVzaGVldCEKLXN0eWxlc2hlZXRFZGl0LnJldmVydFRpcDE9PGZvbnQgY29sb3I9InJlZCI+SWYgeW91IGhhdmUgbm90IGN1c3RvbWl6ZWQgeW91ciBzdHlsZXNoZWV0IGhlcmUsIFwKLXBsZWFzZSB1c2UgdGhlIDxlbT5TaGFyZWQgVGhlbWU8L2VtPiBkZWZhdWx0IGJ5IGNsaWNraW5nIHRoZSBkZWxldGUgc3R5bGVzaGVldCBidXR0b24uIFwKLVRoaXMgd2lsbCBlbnN1cmUgeW91IGFyZSB1c2luZyB0aGUgbGF0ZXN0IHZlcnNpb24gYW5kIGFueSBjaGFuZ2VzIHdpbGwgYmUgcGlja2VkIHVwLjwvZm9udD4gCiAKLXN0eWxlc2hlZXRFZGl0LnJldmVydD1SZXN0b3JlIFN0eWxlc2hlZXQKLXN0eWxlc2hlZXRFZGl0LmRlbGV0ZT1EZWxldGUgU3R5bGVzaGVldAorc3R5bGVzaGVldEVkaXQuc3VidGl0bGU9RWRpdCB3ZWJsb2cgY3VzdG9tIHN0eWxlc2hlZXQKKworc3R5bGVzaGVldEVkaXQuY29weVN0eWxlc2hlZXQ9Q29weSBTdHlsZXNoZWV0CitzdHlsZXNoZWV0RWRpdC5jb3B5U3R5bGVzaGVldFRpcD1Db3B5IFNoYXJlZCBUaGVtZSdzIHN0eWxlc2hlZXQgaW50byB5b3VyIHdlYmxvZyBzbyB5b3UgY2FuIGVkaXQgaXQuCisKK3N0eWxlc2hlZXRFZGl0LnN0YW5kYXJkPVN0YW5kYXJkCisKK3N0eWxlc2hlZXRFZGl0Lm1vYmlsZT1Nb2JpbGUKKworc3R5bGVzaGVldEVkaXQudGlwPVRoaXMgZm9ybSBhbGxvd3MgeW91IHRvIGVkaXQgdGhlIGN1c3RvbWl6YWJsZSBDU1MgU3R5bGVzaGVldCBmb3IgeW91ciB0aGVtZS4KKworc3R5bGVzaGVldEVkaXQueW91Q2FuQ3VzdG9taXplPVwKKyAgPHA+PGI+WW91IGNhbiBjdXN0b21pemUhPC9iPiBcCisgIFRoZSB0aGVtZSB5b3UgYXJlIHVzaW5nIHByb3ZpZGVzIGEgY3VzdG9taXphYmxlIHN0eWxlc2hlZXQuIElmIHlvdSBtYWtlIGNoYW5nZXMgdG8gaXQgXAorICBoZXJlIHlvdSB3aWxsIHNlZSB0aG9zZSBjaGFuZ2VzIHJlZmxlY3RlZCBpbiB0aGUgdGhlbWUgcGFnZXMgdGhhdCBpbmNsdWRlIHRoZSBzdHlsZXNoZWV0LjwvcD4gXAorICA8cD5Zb3UgY2FuIGFsc28gY2hvb3NlIHRvIDxiPlJldmVydDwvYj4geW91ciBjb3B5IG9mIHRoZSBzdHlsZXNoZWV0IHNvIHRoYXQgaXQgbWF0Y2hlcyB0aGUgZGVmYXVsdCBvbmUgZnJvbSBcCisgIHRoZSB0aGVtZS4gT3IgeW91IGNhbiA8Yj5EZWxldGU8L2I+IHlvdXIgY29weSBzbyB0aGF0IHRoaXMgd2VibG9nIHdpbGwgdXNlIHRoZSBTaGFyZWQgVGhlbWUncyBzdHlsZXNoZWV0IGluc3RlYWQuPC9wPgorCitzdHlsZXNoZWV0RWRpdC5zaGFyZWRUaGVtZVdpdGhTdHlsZXNoZWV0PVwKKyA8cD5UaGUgPGI+U2hhcmVkIFRoZW1lPC9iPiB5b3UgYXJlIHVzaW5nIHByb3ZpZGVzIGEgY3VzdG9taXphYmxlIHN0eWxlc2hlZXQuPC9wPiBcCisgPHA+V291bGQgeW91IGxpa2UgdG8gY29weSB0aGF0IHN0eWxlc2hlZXQgaW50byB5b3VyIHdlYmxvZyBzbyB5b3UgY2FuIGVkaXQgaXQ/PC9wPgorCitzdHlsZXNoZWV0RWRpdC5zaGFyZWRUaGVtZU5vU3R5bGVzaGVldFN1cHBvcnQ9XAorICA8cD5UaGUgPGI+U2hhcmVkIFRoZW1lPC9iPiB5b3UgYXJlIHVzaW5nIGRvZXMgbm90IHByb3ZpZGUgYSBjdXN0b21pemFibGUgc3R5bGVzaGVldC48L3A+IFwKKyAgPHA+Q2hvb3NlIGFub3RoZXIgdGhlbWUgaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBjdXN0b21pemUgeW91ciBDU1MuPC9wPgorCitzdHlsZXNoZWV0RWRpdC5jdXN0b21UaGVtZU5vU3R5bGVzaGVldD1cCisgIFRoZSA8Yj5DdXN0b20gVGhlbWU8L2I+IHlvdSBhcmUgdXNpbmcgZG9lcyBub3QgcHJvdmlkZSBhIGN1c3RvbWl6YWJsZSBzdHlsZXNoZWV0LCBidXQgc2luY2UgXAorICB5b3UgYXJlIHVzaW5nIGEgQ3VzdG9tIFRoZW1lLCB5b3UgY2FuIGFkZCBhbnkgc3R5bGVzaGVldHMgYW5kIG5ldyB0ZW1wbGF0ZXMgdGhhdCB5b3Ugd2lzaC4KKworc3R5bGVzaGVldEVkaXQucmV2ZXJ0PVJldmVydAorc3R5bGVzaGVldEVkaXQucmV2ZXJ0VGlwPVJldmVydHMgdGhpcyB3ZWJsb2cncyBjb3B5IHRvIG1hdGNoIHRoZSBTaGFyZWQgVGhlbWUncyBkZWZhdWx0IHN0eWxlc2hlZXQuCisKK3N0eWxlc2hlZXRFZGl0LmRlbGV0ZT1EZWxldGUKK3N0eWxlc2hlZXRFZGl0LmRlbGV0ZVRpcD1EZWxldGUncyB0aGlzIHdlYmxvZydzIGNvcHkgc2V0dXAgd2VibG9nIHRvIHVzZSB0aGUgU2hhcmVkIFRoZW1lJ3MgZGVmYXVsdCBzdHlsZXNoZWV0LgogCiBzdHlsZXNoZWV0RWRpdC5jcmVhdGUuc3VjY2Vzcz1DdXN0b20gc3R5bGVzaGVldCBjcmVhdGVkIHN1Y2Nlc3NmdWxseS4KKwogc3R5bGVzaGVldEVkaXQuc2F2ZS5zdWNjZXNzPVN0eWxlc2hlZXQgdXBkYXRlZCBzdWNjZXNzZnVsbHkuCisKIHN0eWxlc2hlZXRFZGl0LnJldmVydC5zdWNjZXNzPVN0eWxlc2hlZXQgcmV2ZXJ0ZWQgc3VjY2Vzc2Z1bGx5Lgotc3R5bGVzaGVldEVkaXQuZGVmYXVsdC5zdWNjZXNzPVN0eWxlc2hlZXQgZGVsZXRlZCBzdWNjZXNzZnVsbHkuICBZb3VyIHRoZW1lIGlzIG5vdyB1c2luZyB0aGUgU2hhcmVkIFRoZW1lIGRlZmF1bHQuCiAKLXN0eWxlc2hlZXRFZGl0Lm5vT3ZlcnJpZGFibGVTdHlsZXNoZWV0QXZhaWxhYmxlPVwKLVRoZSB0aGVtZSB5b3UnJ3JlIHVzaW5nIGRvZXMgbm90IGRlZmluZSBhIGN1c3RvbWl6YWJsZSBzdHlsZXNoZWV0IGluIGl0cyBkZXNjcmlwdG9yLiAgWW91IGNhbiBjaG9vc2UgYW5vdGhlciBzaGFyZWQgdGhlbWUsIG9yIGZvciBcCi0gIGN1c3RvbSB0aGVtZXMsIGNyZWF0ZSB0aGUgc3R5bGVzaGVldCBvbiB0aGUgdGVtcGxhdGVzIHRhYiBpbnN0ZWFkLgorc3R5bGVzaGVldEVkaXQuZGVmYXVsdC5zdWNjZXNzPVN0eWxlc2hlZXQgZGVsZXRlZCBzdWNjZXNzZnVsbHkuIFlvdXIgdGhlbWUgaXMgbm93IHVzaW5nIHRoZSBTaGFyZWQgVGhlbWUgZGVmYXVsdC4KIAotc3R5bGVzaGVldEVkaXQuY2FuUmVjcmVhdGVTdHlsZXNoZWV0T3ZlcnJpZGU9Tm90ZTogY2xpY2tpbmcgdGhlIHN0eWxlc2hlZXQgdGFiIGFnYWluIHdpbGwgXAotcmVjcmVhdGUgYSBjdXN0b20gb3ZlcnJpZGUgc3R5bGVzaGVldCBmcm9tIHRoZSB0aGVtZSBkZWZhdWx0Lgorc3R5bGVzaGVldEVkaXQuY29uZmlybURlbGV0ZT1BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHlvdXIgc3R5bGVzaGVldCBhbmQgdXNlIHRoZSB0aGVtZXMgZGVmYXVsdCBpbnN0ZWFkPwogCi1zdHlsZXNoZWV0RWRpdC5jb25maXJtRGVsZXRlPUFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgeW91ciBzdHlsZXNoZWV0Pwogc3R5bGVzaGVldEVkaXQuY29uZmlybVJldmVydD1BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmV2ZXJ0IHlvdXIgc3R5bGVzaGVldCB0byB0aGUgdGhlbWUgZGVmYXVsdD8KIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGFiYmVkIE1lbnUKQEAgLTEyNTMsNyArMTI5MCw3IEBACiAKIHRhYmJlZG1lbnUucGxhbmV0PVBsYW5ldCBBZG1pbgogdGFiYmVkbWVudS5hZG1pbi5wbGFuZXRDb25maWc9Q29uZmlndXJhdGlvbgotdGFiYmVkbWVudS5hZG1pbi5wbGFuZXRTdWJzY3JpcHRpb25zPVN1YnNjcmlwdGlvbnMKK3RhYmJlZG1lbnUuYWRtaW4ucGxhbmV0R3JvdXBTdWJzPVN1YnNjcmlwdGlvbnMKIHRhYmJlZG1lbnUuYWRtaW4ucGxhbmV0R3JvdXBzPUN1c3RvbSBHcm91cHMKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNlYXJjaApAQCAtMTI2Niw3ICsxMzAzLDcgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGhlbWUKIAogdGhlbWVFZGl0b3IudGl0bGU9V2VibG9nIFRoZW1lCi10aGVtZUVkaXRvci5zdWJ0aXRsZT1TZWxlY3QgdGhlbWUgZm9yIHdlYmxvZyA8c3Bhbj57MH08L3NwYW4+Cit0aGVtZUVkaXRvci5zdWJ0aXRsZT1EZWZpbmUgdGhlIHRoZW1lIGZvciB3ZWJsb2cgPHNwYW4+ezB9PC9zcGFuPi4KIAogdGhlbWVFZGl0b3Iuc2hhcmVkVGhlbWU9U2hhcmVkIFRoZW1lCiB0aGVtZUVkaXRvci5zaGFyZWRUaGVtZURlc2NyaXB0aW9uPVRoaXMgb3B0aW9uIGlzIGZvciB1c2VycyB3aG8gZG9uJyd0IFwKQEAgLTEyODEsMjEgKzEzMTgsMzcgQEAKIHRoZW1lRWRpdG9yLnlvdXJDdXJyZW50VGhlbWU9WW91ciBjdXJyZW50IHRoZW1lIGlzCiB0aGVtZUVkaXRvci55b3VyQ3VzdG9tU3R5bGVzaGVldD11c2luZyA8ZW0gc3R5bGU9ImNvbG9yOnJlZCI+Y3VzdG9tPC9lbT4gb3ZlcnJpZGUgc3R5bGVzaGVldC4KIHRoZW1lRWRpdG9yLnlvdXJUaGVtZVN0eWxlU2hlZXQ9dXNpbmcgdGhlIDxlbT5TaGFyZWQgVGhlbWU8L2VtPiBkZWZhdWx0IHN0eWxlc2hlZXQuCi10aGVtZUVkaXRvci5zZWxlY3RUaGVtZT1TZWxlY3QgYSBuZXcgc2hhcmVkIHRoZW1lIGZvciB5b3VyIGJsb2cKKwordGhlbWVFZGl0b3IueW91QXJlVXNpbmdBQ3VzdG9tVGhlbWU9VGhpcyB3ZWJsb2cgaXMgdXNpbmcgYSBjdXN0b20gdGhlbWUuCisKK3RoZW1lRWRpdG9yLnRoaXNUaGVtZT1UaGlzIHRoZW1lOgorCit0aGVtZUVkaXRvci5wcm9wb3NlZENoYW5nZVRvU2hhcmVkPVlvdSBhcmUgcHJvcG9zaW5nIHRvIHN3aXRjaCBmcm9tIGEgQ3VzdG9tIFRoZW1lIHRvIGEgbmV3IFNoYXJlZCBUaGVtZS4KKwordGhlbWVFZGl0b3IucHJvcG9zZWRTaGFyZWRUaGVtZUNoYW5nZT1Zb3UgYXJlIHByb3Bvc2luZyB0byBzd2l0Y2ggdG8gYSBuZXcgU2hhcmVkIFRoZW1lLgorCit0aGVtZUVkaXRvci5wcm9wb3NlZFNoYXJlZENoYW5nZVRvQ3VzdG9tPVlvdSBhcmUgcHJvcG9zaW5nIHRvIHN3aXRjaCBmcm9tIGEgU2hhcmVkIFRoZW1lIHRvIGEgQ3VzdG9tIFRoZW1lLgorCit0aGVtZUVkaXRvci5zZWxlY3RUaGVtZT1TZWxlY3QgYSBuZXcgc2hhcmVkIHRoZW1lIGZvciB5b3VyIGJsb2c6CiAKIHRoZW1lRWRpdG9yLnByZXZpZXc9UHJldmlldyBUaGVtZQogdGhlbWVFZGl0b3Iuc2F2ZT1VcGRhdGUgVGhlbWUKIAotdGhlbWVFZGl0b3IucHJldmlld0Rlc2NyaXB0aW9uPVByaW9yIHRvIGNoYW5naW5nIHlvdXIgdGhlbWUsIHRoZSBwcmV2aWV3IG9wdGlvbiBiZWxvdyBcCi1jYW4gYmUgdXNlZCB0byBzZWUgaG93IHlvdXIgYmxvZycncyBtYWluIGZyb250IHBhZ2Ugd291bGQgbG9vayB3aXRoIHRoZSBuZXcgdGhlbWUuCit0aGVtZUVkaXRvci5wcmV2aWV3RGVzY3JpcHRpb249QmVmb3JlIHlvdSB1cGRhdGUgeW91ciB0aGVtZSB5b3UgY2FuIHVzZSA8Yj5QcmV2aWV3IFRoZW1lPC9iPiBcCisgIHRvIGxhdW5jaCBhIG5ldyBicm93c2VyIHdpbmRvdyBhbmQgc2VlIHdoYXQgeW91ciBibG9nIHdpbGwgbG9vayBsaWtlIHdpdGggdGhlIG5ldyB0aGVtZS4KIAotdGhlbWVFZGl0b3IuaW1wb3J0V2FybmluZz1XQVJOSU5HOiBVcGRhdGluZyB5b3VyIGN1c3RvbSB0aGVtZSBtYXkgb3ZlcndyaXRlIHNvbWUgb2YgeW91ciBleGlzdGluZyB0ZW1wbGF0ZXMuCi10aGVtZUVkaXRvci5pbXBvcnRSZXF1aXJlZD1TaW5jZSB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBhcmUgZ29pbmcgdG8gdHJ5IGEgXAotY3VzdG9tIHRoZW1lIHlvdSBtdXN0IGZpcnN0IGNvcHkgdGVtcGxhdGVzIGZyb20gYW4gZXhpc3RpbmcgdGhlbWUuCi10aGVtZUVkaXRvci5pbXBvcnRBbmRPdmVyd3JpdGVUZW1wbGF0ZXM9QWxzbyBpbXBvcnQgYSB0aGVtZSBpbnRvIG15IGFscmVhZHkgZXhpc3RpbmcgY3VzdG9tIHRlbXBsYXRlcywgb3ZlcndyaXRpbmcgYW55IHdpdGggdGhlIHNhbWUgbmFtZS4KLXRoZW1lRWRpdG9yLmltcG9ydEFuZE92ZXJ3cml0ZVRlbXBsYXRlcy50b29sdGlwPVRoaXMgYmxvZyBhbHJlYWR5IGhhcyBjdXN0b20gdGVtcGxhdGVzIGRlZmluZWQgb24gdGhlIFRlbXBsYXRlcyB0YWIuIFwKLSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGltcG9ydCBhIHNoYXJlZCB0aGVtZSdzIHRlbXBsYXRlcywgb3ZlcndyaXRpbmcgYW55IG9mIHlvdXIgZXhpc3RpbmcgdGVtcGxhdGVzIHRoYXQgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIHRoZSBzaGFyZWQgdGhlbWUncyBcCi0gIHRlbXBsYXRlcy4gIExlYXZlIHRoaXMgdW5jaGVja2VkIHRvIGp1c3Qgc3dpdGNoIHRvIGN1c3RvbSB3aXRoIHlvdXIgcHJlc2VudCB0ZW1wbGF0ZXMuCit0aGVtZUVkaXRvci5pbXBvcnRXYXJuaW5nPVdBUk5JTkc6IFVwZGF0aW5nIHlvdXIgY3VzdG9tIHRoZW1lIDxiPndpbGwgb3ZlcndyaXRlPC9iPiBcCisgIHNvbWUgb2YgeW91ciBleGlzdGluZyB0ZW1wbGF0ZXMuCisKK3RoZW1lRWRpdG9yLmltcG9ydFJlcXVpcmVkPVNpbmNlIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgdXNpbmcgYSAgY3VzdG9tIHRoZW1lLCBcCisgIFJvbGxlciB3aWxsIGNvcHkgdGhlIHRlbXBsYXRlcyBmcm9tIHlvdXIgZXhpc3RpbmcgU2hhcmVkIFRoZW1lIHNvIHlvdSBjYW4gZWRpdCB0aGVtLgorCit0aGVtZUVkaXRvci5pbXBvcnRBbmRPdmVyd3JpdGVUZW1wbGF0ZXM9SW1wb3J0IHRoZSBTaGFyZWQgVGhlbWUgc2VsZWN0ZWQgYWJvdmUgYW5kIG92ZXJ3cml0ZSBcCisgIGV4aXN0aW5nIGN1c3RvbSB0aGVtZS4KKwordGhlbWVFZGl0b3IuZXhpc3RpbmdUZW1wbGF0ZXNXYXJuaW5nPTxiPlRoaXMgYmxvZyBhbHJlYWR5IGhhcyBhIGN1c3RvbSB0aGVtZSBkZWZpbmVkIHNvIHlvdSBuZWVkIHRvIFwKKyAgbWFrZSBhIGNob2ljZTwvYj4uIERvIHlvdSB3YW50IHRvIHN3aXRjaCBiYWNrIHRvIHVzaW5nIHRoYXQgdGhlbWUsIG9yIGRvIHlvdSB3YW50IHRvIG92ZXIgd3JpdGUgdGhhdCBcCisgIHRoZW1lIHdpdGggdGhlIFNoYXJlZCBUaGVtZSBjdXJyZW50bHkgaW4gdXNlPwogdGhlbWVFZGl0b3Iuc2V0VGhlbWUuc3VjY2Vzcz1UaGVtZSBzZXQgdG8gezB9CiB0aGVtZUVkaXRvci5zZXRDdXN0b21UaGVtZS5zdWNjZXNzPVNoYXJlZCB0aGVtZSB7MH0gaW1wb3J0ZWQgaW50byBjdXN0b20gdGVtcGxhdGVzCiB0aGVtZUVkaXRvci5zZXRDdXN0b21UaGVtZS5pbnN0cnVjdGlvbnM9VXNlIHRoZSBTdHlsZXNoZWV0IGFuZCBUZW1wbGF0ZXMgdGFicyBhYm92ZSB0byBlZGl0IHlvdXIgY3VzdG9tIHRoZW1lLgpAQCAtMTMyNiw2ICsxMzc5LDggQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gWW91ciBwcm9maWxlIChwcm9maWxlLmpzcCkKIAogeW91clByb2ZpbGUudGl0bGU9WW91ciBQcm9maWxlCit5b3VyUHJvZmlsZS5wYXNzd29yZHNOb3RTYW1lPVBhc3N3b3JkIGFuZCBQYXNzd29yZCAoY29uZmlybSkgZG8gbm90IG1hdGNoCit5b3VyUHJvZmlsZS5yZXF1aXJlZEZpZWxkcz1TY3JlZW4gbmFtZSwgZnVsbCBuYW1lIGFuZCBlbWFpbCBhcmUgcmVxdWlyZWQKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFVzZXIgYWRtaW4KIApAQCAtMTQxOCw3ICsxNDczLDggQEAKIHNwZWNpZnkgeW91ciBPcGVuSUQgaWRlbnRpZmllciBiZWxvdy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgT3BlbklEIHNlZSBcCiA8YSBocmVmPVwiaHR0cDovL29wZW5pZC5uZXRcIj5odHRwOi8vb3BlbmlkLm5ldDwvYT4uCiAKLXVzZXJSZWdpc3Rlci50aXAucGFzc3dvcmQ9WW91ciBwYXNzd29yZC4gIEZpbGwgaW4gb25seSBpZiB5b3Ugd2lzaCB0byBjaGFuZ2UgaXQuCit1c2VyUmVnaXN0ZXIudGlwLnBhc3N3b3JkPVlvdXIgcGFzc3dvcmQuICAKK3VzZXJTZXR0aW5ncy50aXAucGFzc3dvcmQ9WW91ciBwYXNzd29yZC4gRmlsbC1pbiBvbmx5IGlmIHlvdSB3aXNoIHRvIGNoYW5nZSBpdC4gIAogdXNlclJlZ2lzdGVyLnRpcC5wYXNzd29yZENvbmZpcm09Q29uZmlybSB5b3VyIHBhc3N3b3JkLgogdXNlclJlZ2lzdGVyLnRpcC5vcGVuSWRVcmw9WW91ciBPcGVuSUQgaWRlbnRpZmllciAoaW4gdGhlIGZvcm0gb2YgYSBVUkwpLgogCkBAIC0xNDk1LDcgKzE1NTEsNyBAQAogd2VibG9nRWRpdC5wb3N0PVBvc3QgdG8gV2VibG9nCiB3ZWJsb2dFZGl0LnBlcm1hTGluaz1QZXJtYWxpbmsKIHdlYmxvZ0VkaXQucHVibGlzaGVkPVB1Ymxpc2hlZAotd2VibG9nRWRpdC5wdWJUaW1lPVB1YiZuYnNwO1RpbWUmbmJzcDsKK3dlYmxvZ0VkaXQucHViVGltZT1QdWJsaXNoaW5nIFRpbWUKIHdlYmxvZ0VkaXQuc2F2ZT1TYXZlIGFzIERyYWZ0CiB3ZWJsb2dFZGl0LnNjaGVkdWxlZD1TY2hlZHVsZWQKIHdlYmxvZ0VkaXQuc2NoZWR1bGVkRW50cmllcz1TY2hlZHVsZWQgRW50cmllcwpAQCAtMTUxMSw4ICsxNTY3LDkgQEAKIHdlYmxvZ0VkaXQudXBkYXRlVGltZT1MYXN0IHVwZGF0ZWQgCiAKIHdlYmxvZ0VkaXQuYWxsb3dDb21tZW50cz1BbGxvdyBjb21tZW50cwotd2VibG9nRWRpdC5jb21tZW50RGF5cz1mb3IKLXdlYmxvZ0VkaXQudW5saW1pdGVkQ29tbWVudERheXM9dW5saW1pdGVkIGRheXMKK3dlYmxvZ0VkaXQuY29tbWVudERheXM9SG93IGxvbmcgdG8gYWxsb3cgY29tbWVudHMKK3dlYmxvZ0VkaXQuY29tbWVudHNOb3RBbGxvd2VkPUNvbW1lbnRzIG5vdCBhbGxvd2VkCit3ZWJsb2dFZGl0LnVubGltaXRlZENvbW1lbnREYXlzPVVubGltaXRlZCBkYXlzCiB3ZWJsb2dFZGl0LmRheXMzPTMgZGF5cwogd2VibG9nRWRpdC5kYXlzNz03IGRheXMKIHdlYmxvZ0VkaXQuZGF5czE0PTE0IGRheXMKQEAgLTE3MjIsNyArMTc3OSw3IEBACiAKIHdlYnNpdGVSZW1vdmUudGl0bGU9Q29uZmlybSBXZWJsb2cgUmVtb3ZlCiB3ZWJzaXRlUmVtb3ZlLnN1YnRpdGxlPVdlYmxvZyByZW1vdmFsIGlzIDxiPk5PVCBSRVZFUlNJQkxFPC9iPgotd2Vic2l0ZVJlbW92ZS55b3VTdXJlPUFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUgd2VibG9nIFt7MH1dPword2Vic2l0ZVJlbW92ZS55b3VTdXJlPUFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUgdGhlIHdlYmxvZyA8YiBzdHlsZT0iY29sb3I6cmVkIj57MH08L2I+Pwogd2Vic2l0ZVJlbW92ZS53ZWJzaXRlSWQ9V2VibG9nIElECiB3ZWJzaXRlUmVtb3ZlLndlYnNpdGVOYW1lPVdlYmxvZyBOYW1lCiB3ZWJzaXRlUmVtb3ZlLnN1Y2Nlc3M9U3VjY2Vzc2Z1bGx5IHJlbW92ZWQgd2VibG9nIFt7MH1dCkBAIC0xNzUxLDE5ICsxODA4LDIwIEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBZb3VyIFdlYmxvZ3MKIAoteW91cldlYnNpdGVzLnRpdGxlPU1haW4gTWVudQotIHlvdXJXZWJzaXRlcy5hY3Rpb25zPUFjdGlvbnMKK3lvdXJXZWJzaXRlcy50aXRsZT1Zb3VyIFdlYmxvZ3MKK3lvdXJXZWJzaXRlcy5hY3Rpb25zPUFjdGlvbnMKIAoteW91cldlYnNpdGVzLnByb21wdC5ub0Jsb2c9WW91Jyd2ZSBnb3QgYSB1c2VyIGFjY291bnQsIGJ1dCBubyB3ZWJsb2cuIFwKK3lvdXJXZWJzaXRlcy5wcm9tcHQubm9CbG9nPVlvdSBoYXZlIGEgdXNlciBhY2NvdW50LCBidXQgbm8gd2VibG9nLiBcCiBXb3VsZCB5b3UgbGlrZSB0bwogeW91cldlYnNpdGVzLmNyZWF0ZU9uZT1jcmVhdGUgb25lPwogCi15b3VyV2Vic2l0ZXMucHJvbXB0Lmhhc0Jsb2c9U2VsZWN0IGEgd2VibG9nIHRvIGVkaXQsIG1hbmFnZSwgb3IgY29uZmlndXJlLgoreW91cldlYnNpdGVzLnByb21wdC5oYXNCbG9nPUFjY2VzcyB5b3VyIHdlYmxvZ3MgaGVyZSBvciBjcmVhdGUgYSBuZXcgb25lLgogCiB5b3VyV2Vic2l0ZXMuYWNjZXB0PWFjY2VwdAogeW91cldlYnNpdGVzLmRlY2xpbmU9ZGVjbGluZQogCiB5b3VyV2Vic2l0ZXMucmVzaWduPVJlc2lnbgoreW91cldlYnNpdGVzLnlvdUhhdmU9WW91IGhhdmUKIHlvdXJXZWJzaXRlcy5wZXJtaXNzaW9uPVBlcm1pc3Npb24KIHlvdXJXZWJzaXRlcy5jb25maXJtUmVzaWduYXRpb249QXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIHJlc2lnbiBmcm9tIHdlYmxvZyBbezB9XT8KIHlvdXJXZWJzaXRlcy53ZWJsb2c9TGluawpAQCAtMTc3OCw4ICsxODM2LDggQEAKIHlvdXJXZWJzaXRlcy5jcmVhdGVXZWJsb2cuZGVzYz1cCiBGZWVsIGxpa2UgeW91Jyd2ZSBnb3QgbW9yZSB0byBzYXk/IE1heWJlIGFub3RoZXIgd2VibG9nIGlzIHdoYXQgeW91IG5lZWQuIAogCi15b3VyV2Vic2l0ZXMuZWRpdFByb2ZpbGU9RWRpdCB1c2VyIHByb2ZpbGUKLXlvdXJXZWJzaXRlcy5lZGl0UHJvZmlsZS5kZXNjPUNoYW5nZSB1c2VyIGluZm8sIGxvY2FsZSwgdGltZXpvbmUuCit5b3VyV2Vic2l0ZXMuZWRpdFByb2ZpbGU9WW91ciBQcm9maWxlCit5b3VyV2Vic2l0ZXMuZWRpdFByb2ZpbGUuZGVzYz1DaGFuZ2UgdXNlciBpbmZvLCBwYXNzd29yZCwgdGltZXpvbmUKIAogeW91cldlYnNpdGVzLm9hdXRoS2V5cz1PQXV0aCBDcmVkZW50aWFscwogeW91cldlYnNpdGVzLm9hdXRoS2V5cy5kZXNjPUVuYWJsZSBvdGhlciBzaXRlcyBhbmQgcHJvZ3JhbXMgdG8gYWNjZXNzIHlvdXIgXApkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9BcHBsaWNhdGlvblJlc291cmNlc19kZS5wcm9wZXJ0aWVzIGIvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9BcHBsaWNhdGlvblJlc291cmNlc19kZS5wcm9wZXJ0aWVzCmluZGV4IGU1YzljZmEuLmE0ZjE1MGUgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvQXBwbGljYXRpb25SZXNvdXJjZXNfZGUucHJvcGVydGllcworKysgYi9hcHAvc3JjL21haW4vcmVzb3VyY2VzL0FwcGxpY2F0aW9uUmVzb3VyY2VzX2RlLnByb3BlcnRpZXMKQEAgLTYwNywxNSArNjA3LDE1IEBACiBwbGFuZXRTdWJzY3JpcHRpb24uZm91bmRFeGlzdGluZz1BYm9ubmVtZW50IFt7MH1dIGV4aXNpdGllcnQgYmVyZWl0cywgZXMgd3VyZGUgYWJlciB0cm90emRlbSBoaW56dWdlZlx1MDBGQ2d0CiBwbGFuZXRTdWJzY3JpcHRpb24uc3VjY2Vzcy5kZWxldGVkPUFib25uZW1lbnQgZXJmb2xncmVpY2ggZ2VsXHUwMEY2c2NodAogcGxhbmV0U3Vic2NyaXB0aW9uLnN1Y2Nlc3Muc2F2ZWQ9QWJvbm5lbWVudCBnZXNwZWljaGVydAotcGxhbmV0U3Vic2NyaXB0aW9ucy5jb2x1bW4uZmVlZFVybD1GZWVkLVVSTAotcGxhbmV0U3Vic2NyaXB0aW9ucy5jb2x1bW4udGl0bGU9VGl0ZWwKLXBsYW5ldFN1YnNjcmlwdGlvbnMuZXJyb3IuZHVyaW5nU2F2ZT1Eb3BwZWx0ZXMgQWJvbm5lbWVudD8gLSB7MH0KLXBsYW5ldFN1YnNjcmlwdGlvbnMuZXhpc3RpbmdUaXRsZT1FeGlzdGllcmVuZGUgQWJvbm5lbWVudHMKLXBsYW5ldFN1YnNjcmlwdGlvbnMucHJvbXB0LmFkZD1VbSBlaW4gbmV1ZXMgQWJvbm5lbWVudCBoaW56dXp1Zlx1MDBGQ2dlbiBnZWJlbiBTaWUgYml0dGUgZGllIFVSTCBkZXMgTmV3c2ZlZWQgZWluIHVuZCBrbGlja2VuIGRhbm4gYXVmIFNwZWljaGVybi4KLXBsYW5ldFN1YnNjcmlwdGlvbnMucHJvbXB0LmFkZE1haW49TnV0emVuIFNpZSBkaWVzZSBTZWl0ZSB6dW0gSGluenVmXHUwMEZDZ2VuIHZvbiBBYm9ubmVtZW50cyB6dSBkZXIgTGlzdGUgZGVyIE5ld3NmZWVkcywgd2VsY2hlIGluIGRlciBIYXVwdC1QbGFuZXQtQWdncmVnYXRvci1TZWl0ZSBlbnRoYWx0ZW4gc2VpbiBzb2xsZW4uIFVtIGVpbiBuZXVlcyBBYm9ubmVtZW50IGhpbnp1enVmXHUwMEZDZ2VuIGdlYmVuIFNpZSBlaW5mYWNoIGRpZSBBZHJlc3NlIGRlcyBOZXdzZmVlZCBlaW4gdW5kIGtsaWNrZW4gU2llIGF1ZiBTcGVpY2hlcm4uCi1wbGFuZXRTdWJzY3JpcHRpb25zLnN1YnRpdGxlLmFkZD1WZXJ3YWx0dW5nIGRlciBOZXdzZmVlZCBBYm9ubmVtZW50cyBpbiBkZXIgR3J1cHBlIFs8Yj57MH08L2I+XS4KLXBsYW5ldFN1YnNjcmlwdGlvbnMuc3VidGl0bGUuYWRkTWFpbj1WZXJ3YWx0ZW4gZGVyIEhhdXB0bGlzdGUgZGVyIE5ld3NmZWVkIEFib25uZW1lbnRzLgotcGxhbmV0U3Vic2NyaXB0aW9ucy50aXRsZT1BYm9ubmVtZW50cworcGxhbmV0R3JvdXBTdWJzLmNvbHVtbi5mZWVkVXJsPUZlZWQtVVJMCitwbGFuZXRHcm91cFN1YnMuY29sdW1uLnRpdGxlPVRpdGVsCitwbGFuZXRHcm91cFN1YnMuZXJyb3IuZHVyaW5nU2F2ZT1Eb3BwZWx0ZXMgQWJvbm5lbWVudD8gLSB7MH0KK3BsYW5ldEdyb3VwU3Vicy5leGlzdGluZ1RpdGxlPUV4aXN0aWVyZW5kZSBBYm9ubmVtZW50cworcGxhbmV0R3JvdXBTdWJzLnByb21wdC5hZGQ9VW0gZWluIG5ldWVzIEFib25uZW1lbnQgaGluenV6dWZcdTAwRkNnZW4gZ2ViZW4gU2llIGJpdHRlIGRpZSBVUkwgZGVzIE5ld3NmZWVkIGVpbiB1bmQga2xpY2tlbiBkYW5uIGF1ZiBTcGVpY2hlcm4uCitwbGFuZXRHcm91cFN1YnMucHJvbXB0LmFkZE1haW49TnV0emVuIFNpZSBkaWVzZSBTZWl0ZSB6dW0gSGluenVmXHUwMEZDZ2VuIHZvbiBBYm9ubmVtZW50cyB6dSBkZXIgTGlzdGUgZGVyIE5ld3NmZWVkcywgd2VsY2hlIGluIGRlciBIYXVwdC1QbGFuZXQtQWdncmVnYXRvci1TZWl0ZSBlbnRoYWx0ZW4gc2VpbiBzb2xsZW4uIFVtIGVpbiBuZXVlcyBBYm9ubmVtZW50IGhpbnp1enVmXHUwMEZDZ2VuIGdlYmVuIFNpZSBlaW5mYWNoIGRpZSBBZHJlc3NlIGRlcyBOZXdzZmVlZCBlaW4gdW5kIGtsaWNrZW4gU2llIGF1ZiBTcGVpY2hlcm4uCitwbGFuZXRHcm91cFN1YnMuc3VidGl0bGUuYWRkPVZlcndhbHR1bmcgZGVyIE5ld3NmZWVkIEFib25uZW1lbnRzIGluIGRlciBHcnVwcGUgWzxiPnswfTwvYj5dLgorcGxhbmV0R3JvdXBTdWJzLnN1YnRpdGxlLmFkZE1haW49VmVyd2FsdGVuIGRlciBIYXVwdGxpc3RlIGRlciBOZXdzZmVlZCBBYm9ubmVtZW50cy4KK3BsYW5ldEdyb3VwU3Vicy50aXRsZT1BYm9ubmVtZW50cwogc2VhcmNoUGFnZXIuaG9tZT1TdGFydHNlaXRlCiBzZWFyY2hQYWdlci5uZXh0PU5cdTAwRTRjaHN0ZSBTZWl0ZQogc2VhcmNoUGFnZXIucHJldj1Wb3JpZ2UgU2VpdGUKQEAgLTYzNyw3ICs2MzcsNyBAQAogdGFiYmVkbWVudS5hZG1pbi5waW5nVGFyZ2V0cz1QaW5nIFppZWxlCiB0YWJiZWRtZW51LmFkbWluLnBsYW5ldENvbmZpZz1Lb25maWd1cmF0aW9uCiB0YWJiZWRtZW51LmFkbWluLnBsYW5ldEdyb3Vwcz1CZW51dHplcmRlZmluaWVydGUgR3J1cHBlbgotdGFiYmVkbWVudS5hZG1pbi5wbGFuZXRTdWJzY3JpcHRpb25zPUFib25uZW1lbnRzCit0YWJiZWRtZW51LmFkbWluLnBsYW5ldEdyb3VwU3Vicz1BYm9ubmVtZW50cwogdGFiYmVkbWVudS5hZG1pbi51c2VyQWRtaW49QmVudXR6ZXJ2ZXJ3YWx0dW5nCiB0YWJiZWRtZW51LmJvb2ttYXJrcy5hbGxGb2xkZXJzPUJsb2dyb2xsCiB0YWJiZWRtZW51LmRlc2lnbj1EZXNpZ24KQEAgLTY3Miw3ICs2NzIsNyBAQAogdXBsb2FkRmlsZXMuZXJyb3IuYmFkUGF0aD1EZXIgUGZhZCBbezB9XSBpc3QgdW5nXHUwMEZDbHRpZy4gUGZhZGUgZFx1MDBGQ3JmZW4ga2VpbmUgIi8iLCAiIiwgb2RlciAiLi4iIGVudGhhbHRlbi4KIHVwbG9hZEZpbGVzLmVycm9yLnVwbG9hZD1Ib2NobGFkZW4gdm9uIFt7MH1dIGZlaGxnZXNjaGxhZ2VuCiB1cGxvYWRGaWxlcy51cGxvYWQ9SG9jaGxhZGVuCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYW5ldFN1YnNjcmlwdGlvbnMuanNwCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYW5ldEdyb3VwU3Vicy5qc3AKIHVwbG9hZEZpbGVzLnVwbG9hZGVkRmlsZT17MH0KIHVwbG9hZEZpbGVzLnVwbG9hZGVkRmlsZXM9SG9jaGdlbGFkZW5lIERhdGVpKGVuKToKIHVzZXIuYWNjb3VudC5hY3RpdmF0aW9uLm1haWwuY29udGVudD08aHRtbD48Ym9keSBzdHlsZT0iYmFja2dyb3VuZDogd2hpdGU7IGNvbG9yOiBibGFjazsgZm9udC1zaXplOiAxMnB4Ij4gPHA+WnVtIEFrdGl2aWVyZW4gSWhyZXMgbmV1ZW4gUm9sbGVyLUJlbnV0emVya29udG9zIG1pdCBkZW0gQmVudXR6ZXJuYW1lbiBbezF9XSBrbGlja2VuIFNpZSBiaXR0ZSBhdWYgZGVuIGZvbGdlbmRlbiBMaW5rOjwvcD4gPHA+PGEgaHJlZj0iezJ9Ij57Mn08L2E+PC9wPjwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vcmVzb3VyY2VzL0FwcGxpY2F0aW9uUmVzb3VyY2VzX2VzLnByb3BlcnRpZXMgYi9hcHAvc3JjL21haW4vcmVzb3VyY2VzL0FwcGxpY2F0aW9uUmVzb3VyY2VzX2VzLnByb3BlcnRpZXMKaW5kZXggYmRmNmVjNy4uNzc5OTUzNiAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9BcHBsaWNhdGlvblJlc291cmNlc19lcy5wcm9wZXJ0aWVzCisrKyBiL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvQXBwbGljYXRpb25SZXNvdXJjZXNfZXMucHJvcGVydGllcwpAQCAtMzM4LDIwICszMzgsMjAgQEAKIHBsYW5ldENvbmZpZy5zdWJ0aXRsZT1Db25maWd1cmFyIGFncmVnYWRvciBkZSBub3RpY2lhcyBkZSBSb2xsZXIKIHBsYW5ldENvbmZpZy5wcm9tcHQ9RXN0YWJsZWNlciBlbCB0XHUwMEVEdHVsbywgZGlyZWNjaVx1MDBGM24gZGUgZW1haWwgeSBVUkwgZGVsIHNpdGlvIHF1ZSBzZSBpbmNsdWlyXHUwMEUxbiBlbiBsYSBzdXNjcmlwY2lcdTAwRjNuIGRlIG5vdGljaWFzIHBvZHVjaWRhIHBvciBlbCBhZ3JlZ2Fkb3IuIFB1ZWRlIHRhbWJpXHUwMEU5biBjb25maWd1cmFyIHVuIHByb3h5IHNpIGVzIG5lY2VzYXJpbyBwYXJhIHN1IHJlZC4KIHBsYW5ldENvbmZpZy50aXRsZT1Db25maWd1cmFjaVx1MDBGM24gZGUgUGxhbmV0Ci1wbGFuZXRTdWJzY3JpcHRpb25zLnRpdGxlPVN1c2NyaXBjaW9uZXMKLXBsYW5ldFN1YnNjcmlwdGlvbnMuc3VidGl0bGUuYWRkPUFkbWluaXN0cmFyIHN1c2NyaXBjaW9uZXMgZGUgbm90aWNpYXMgZW4gZWwgZ3J1cG8gWzxiPnswfTwvYj5dLgotcGxhbmV0U3Vic2NyaXB0aW9ucy5wcm9tcHQuYWRkPVBhcmEgYVx1MDBGMWFkaXIgdW5hIG51ZXZhIHN1c2NyaXBjaVx1MDBGM24gc2ltcGxlbWVudGUgaW50cm9kdXpjYSBlbCB0XHUwMEVEdHVsbywgbGEgVVJMIGRlIGxhIHN1c2NyaXBjaVx1MDBGM24gZGUgbm90aWNpYXMgeSBsYSBVUkwgZGVsIHNpdGlvLCBmaW5hbG1lbnRlIGhhZ2EgY2xpY2sgZW4gZWwgYm90XHUwMEYzbiBHdWFyZGFyLgotcGxhbmV0U3Vic2NyaXB0aW9ucy5zdWJ0aXRsZS5hZGRNYWluPUFkbWluaXN0cmFuZG8gbGEgbGlzdGEgcHJpbmNpcGFsIGRlIHN1c2NyaXBjaW9uZXMgZGUgbm90aWNpYXMuCi1wbGFuZXRTdWJzY3JpcHRpb25zLnByb21wdC5hZGRNYWluPVVzZSBlc3RhIHBcdTAwRTFnaW5hIHBhcmEgYVx1MDBGMWFkaXIgeSBlZGl0YXIgc3VzY3JpcGNpb25lc1w6IGxhIGxpc3RhIGRlIHN1c2NyaXBjaW9uZXMgZGUgbm90aWNpYXMgcXVlIHNlIGluY2x1eWUgZW4gbGEgcFx1MDBFMWdpbmEgcHJpbmNpcGFsIGRlbCBhZ3JlZ2Fkb3IgUGxhbmV0LiBQYXJhIGFcdTAwRjFhZGlyIHVuYSBudWV2YSBzdXNjcmlwY2lcdTAwRjNuIHNpbXBsZW1lbnRlIGludHJvZHV6Y2EgZWwgdFx1MDBFRHR1bG8sIGVsIHRcdTAwRUR0dWxvLCBsYSBVUkwgZGUgbGEgc3VzY3JpcGNpXHUwMEYzbiBkZSBub3RpY2lhcyB5IGxhIFVSTCBkZWwgc2l0aW8sIGZpbmFsbWVudGUgaGFnYSBjbGljayBlbiBlbCBib3RcdTAwRjNuIEd1YXJkYXIuCi1wbGFuZXRTdWJzY3JpcHRpb25zLmV4aXN0aW5nVGl0bGU9U3VzY3JpcGNpb25lcyBleGlzdGVudGVzCi1wbGFuZXRTdWJzY3JpcHRpb25zLmNvbHVtbi50aXRsZT1UXHUwMEVEdHVsbwotcGxhbmV0U3Vic2NyaXB0aW9ucy5jb2x1bW4uZmVlZFVybD1VUkwgZGUgbGEgc3VzY3JpcGNpXHUwMEYzbgorcGxhbmV0R3JvdXBTdWJzLnRpdGxlPVN1c2NyaXBjaW9uZXMKK3BsYW5ldEdyb3VwU3Vicy5zdWJ0aXRsZS5hZGQ9QWRtaW5pc3RyYXIgc3VzY3JpcGNpb25lcyBkZSBub3RpY2lhcyBlbiBlbCBncnVwbyBbPGI+ezB9PC9iPl0uCitwbGFuZXRHcm91cFN1YnMucHJvbXB0LmFkZD1QYXJhIGFcdTAwRjFhZGlyIHVuYSBudWV2YSBzdXNjcmlwY2lcdTAwRjNuIHNpbXBsZW1lbnRlIGludHJvZHV6Y2EgZWwgdFx1MDBFRHR1bG8sIGxhIFVSTCBkZSBsYSBzdXNjcmlwY2lcdTAwRjNuIGRlIG5vdGljaWFzIHkgbGEgVVJMIGRlbCBzaXRpbywgZmluYWxtZW50ZSBoYWdhIGNsaWNrIGVuIGVsIGJvdFx1MDBGM24gR3VhcmRhci4KK3BsYW5ldEdyb3VwU3Vicy5zdWJ0aXRsZS5hZGRNYWluPUFkbWluaXN0cmFuZG8gbGEgbGlzdGEgcHJpbmNpcGFsIGRlIHN1c2NyaXBjaW9uZXMgZGUgbm90aWNpYXMuCitwbGFuZXRHcm91cFN1YnMucHJvbXB0LmFkZE1haW49VXNlIGVzdGEgcFx1MDBFMWdpbmEgcGFyYSBhXHUwMEYxYWRpciB5IGVkaXRhciBzdXNjcmlwY2lvbmVzXDogbGEgbGlzdGEgZGUgc3VzY3JpcGNpb25lcyBkZSBub3RpY2lhcyBxdWUgc2UgaW5jbHV5ZSBlbiBsYSBwXHUwMEUxZ2luYSBwcmluY2lwYWwgZGVsIGFncmVnYWRvciBQbGFuZXQuIFBhcmEgYVx1MDBGMWFkaXIgdW5hIG51ZXZhIHN1c2NyaXBjaVx1MDBGM24gc2ltcGxlbWVudGUgaW50cm9kdXpjYSBlbCB0XHUwMEVEdHVsbywgZWwgdFx1MDBFRHR1bG8sIGxhIFVSTCBkZSBsYSBzdXNjcmlwY2lcdTAwRjNuIGRlIG5vdGljaWFzIHkgbGEgVVJMIGRlbCBzaXRpbywgZmluYWxtZW50ZSBoYWdhIGNsaWNrIGVuIGVsIGJvdFx1MDBGM24gR3VhcmRhci4KK3BsYW5ldEdyb3VwU3Vicy5leGlzdGluZ1RpdGxlPVN1c2NyaXBjaW9uZXMgZXhpc3RlbnRlcworcGxhbmV0R3JvdXBTdWJzLmNvbHVtbi50aXRsZT1UXHUwMEVEdHVsbworcGxhbmV0R3JvdXBTdWJzLmNvbHVtbi5mZWVkVXJsPVVSTCBkZSBsYSBzdXNjcmlwY2lcdTAwRjNuCiBwbGFuZXRTdWJzY3JpcHRpb24uZmVlZFVybD1VUkwgZGUgbGEgc3VzY3JpcGNpXHUwMEYzbiBkZSBub3RpY2lhcwogcGxhbmV0U3Vic2NyaXB0aW9uLnN1Y2Nlc3MuZGVsZXRlZD1TdXNjcmlwY2lcdTAwRjNuIGVsaW1pbmFkYSBjb24gXHUwMEU5eGl0bwogcGxhbmV0U3Vic2NyaXB0aW9uLnN1Y2Nlc3Muc2F2ZWQ9U3VzY3JpcGNpXHUwMEYzbiBndWFyZGFkYQogcGxhbmV0U3Vic2NyaXB0aW9uLmVycm9yPURlYmUgZXNwZWNpZmljYXIgbGEgVVJMIGRlIGxhIHN1c2NyaXBjaVx1MDBGM24gZGUgbm90aWNpYXMKIHBsYW5ldFN1YnNjcmlwdGlvbi5lcnJvci5mZWVkVXJsPUxhIFVSTCBkZSBsYSBzdXNjcmlwY2lcdTAwRjNuIGRlIG5vdGljaWFzIGVzIG9ibGlnYXRvcmlhCi1wbGFuZXRTdWJzY3JpcHRpb25zLmVycm9yLmR1cmluZ1NhdmU9XHUwMEJGU3VzY3JpcGNpXHUwMEYzbiByZXBldGlkYT8gLSB7MH0KK3BsYW5ldEdyb3VwU3Vicy5lcnJvci5kdXJpbmdTYXZlPVx1MDBCRlN1c2NyaXBjaVx1MDBGM24gcmVwZXRpZGE/IC0gezB9CiBwbGFuZXRTdWJzY3JpcHRpb24uZXJyb3IuZGVsZXRpbmc9RXJyb3IgZWxpbWluYW5kbyBvYmpldG8KIHBsYW5ldEdyb3Vwcy5wYWdldGl0bGU9R3J1cG9zIFBsYW5ldCBwZXJzb25hbGl6YWRvcwogcGxhbmV0R3JvdXBzLnN1YnRpdGxlPUFcdTAwRjFhZGlyIGFncmVnYWRvciBwZXJzb25hbGl6YWRvIGRlIGdydXBvcywgZGlzcG9uaWJsZSBlbiBmb3JtYSBkZSBzdXNjcmlwY2lcdTAwRjNuIGRlIG5vdGljaWFzLgpAQCAtMzk0LDcgKzM5NCw3IEBACiB0YWJiZWRtZW51LmFkbWluLmNhY2hlSW5mbz1JbmZvcm1hY2lcdTAwRjNuIGRlIGNhY2hcdTAwRTkKIHRhYmJlZG1lbnUucGxhbmV0PUFkbWluaXN0cmFjaVx1MDBGM24gZGUgUGxhbmV0CiB0YWJiZWRtZW51LmFkbWluLnBsYW5ldENvbmZpZz1Db25maWd1cmFjaVx1MDBGM24KLXRhYmJlZG1lbnUuYWRtaW4ucGxhbmV0U3Vic2NyaXB0aW9ucz1TdXNjcmlwY2lvbmVzCit0YWJiZWRtZW51LmFkbWluLnBsYW5ldEdyb3VwU3Vicz1TdXNjcmlwY2lvbmVzCiB0YWJiZWRtZW51LmFkbWluLnBsYW5ldEdyb3Vwcz1HcnVwb3MgcGVyc29uYWxpemFkb3MKIHRoZW1lRWRpdG9yLnRpdGxlPVRlbWEgZGVsIHdlYmxvZwogdGhlbWVFZGl0b3Iuc3VidGl0bGU9U2VsZWNjaW9uYXIgdGVtYSBwYXJhIGVsIHdlYmxvZyA8c3Bhbj57MH08L3NwYW4+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vcmVzb3VyY2VzL0FwcGxpY2F0aW9uUmVzb3VyY2VzX2ZyLnByb3BlcnRpZXMgYi9hcHAvc3JjL21haW4vcmVzb3VyY2VzL0FwcGxpY2F0aW9uUmVzb3VyY2VzX2ZyLnByb3BlcnRpZXMKaW5kZXggMzJjZjg0YS4uNTMzMjAzOSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9BcHBsaWNhdGlvblJlc291cmNlc19mci5wcm9wZXJ0aWVzCisrKyBiL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvQXBwbGljYXRpb25SZXNvdXJjZXNfZnIucHJvcGVydGllcwpAQCAtNzA5LDI2ICs3MDksMjYgQEAKIENvbmZpZ0Zvcm0ucHJveHlQb3J0PVBvcnQgZHUgc2VydmV1ciBQcm94eQogI3BvdXIgbGEgcsOpY3VwZXJhdGlvbiBkZXMgZmlscyBkJ2luZm9ybWF0aW9uCiAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhbmV0U3Vic2NyaXB0aW9ucy5qc3AKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhbmV0R3JvdXBTdWJzLmpzcAogCi1wbGFuZXRTdWJzY3JpcHRpb25zLnRpdGxlPVNvdXNjcmlwdGlvbnMKK3BsYW5ldEdyb3VwU3Vicy50aXRsZT1Tb3VzY3JpcHRpb25zCiAKLXBsYW5ldFN1YnNjcmlwdGlvbnMuc3VidGl0bGUuYWRkPVwKK3BsYW5ldEdyb3VwU3Vicy5zdWJ0aXRsZS5hZGQ9XAogR2VzdGlvbiBkZXMgc291c2NyaXB0aW9ucyBhdXggZmlscyBkJ2luZm9ybWF0aW9uIGRhbnMgbGUgZ3JvdXBlIFs8Yj57MH08L2I+XS4KLXBsYW5ldFN1YnNjcmlwdGlvbnMucHJvbXB0LmFkZD1Qb3VyIGFqb3V0ZXIgdW5lIG5vdXZlbGxlIHNvdXNjcmlwdGlvbiwgZW50cmV6IHNvbiB0aXRyZSwgXAorcGxhbmV0R3JvdXBTdWJzLnByb21wdC5hZGQ9UG91ciBham91dGVyIHVuZSBub3V2ZWxsZSBzb3VzY3JpcHRpb24sIGVudHJleiBzb24gdGl0cmUsIFwKIGwnYWRyZXNzZSBVUkwgZHUgZmlsIGQnaW5mb3JtYXRpb24gZXQgY2VsbGUgZHUgc2l0ZSwgcHVpcyBjbGlxdWV6IHN1ciAnRW5yZWdpc3RyZXInLgogCi1wbGFuZXRTdWJzY3JpcHRpb25zLnN1YnRpdGxlLmFkZE1haW49XAorcGxhbmV0R3JvdXBTdWJzLnN1YnRpdGxlLmFkZE1haW49XAogR8OpcmVyIGxhIGxpc3RlIHByaW5jaXBhbGUgZGUgc291c2NyaXB0aW9ucyBhdXggZmlscyBkJ2luZm9ybWF0aW9uLgotcGxhbmV0U3Vic2NyaXB0aW9ucy5wcm9tcHQuYWRkTWFpbj1VdGlsaXNleiBjZXR0ZSBwYWdlIHBvdXIgYWpvdXRlciBvdSDDqWRpdGVyIGxlcyBzb3VzY3JpcHRpb25zIHF1aSBcCitwbGFuZXRHcm91cFN1YnMucHJvbXB0LmFkZE1haW49VXRpbGlzZXogY2V0dGUgcGFnZSBwb3VyIGFqb3V0ZXIgb3Ugw6lkaXRlciBsZXMgc291c2NyaXB0aW9ucyBxdWkgXAogcydham91dGVyb25zIMOgIGxhIHBhZ2UgZCdhZ2dyw6lnYXRpb24gZGUgUGxhbmV0LiBcCiBQb3VyIGFqb3V0ZXIgdW5lIG5vdXZlbGxlIHNvdXNjcmlwdGlvbiwgZW50cmV6IHNvbiB0aXRyZSwgXAogbCdhZHJlc3NlIFVSTCBkdSBmaWwgZCdpbmZvcm1hdGlvbiBldCBjZWxsZSBkdSBzaXRlLCBwdWlzIGNsaXF1ZXogc3VyICdFbnJlZ2lzdHJlcicuCiAKLXBsYW5ldFN1YnNjcmlwdGlvbnMuZXhpc3RpbmdUaXRsZT1Tb3VzY3JpcHRpb25zIGV4aXN0YW50ZXMKK3BsYW5ldEdyb3VwU3Vicy5leGlzdGluZ1RpdGxlPVNvdXNjcmlwdGlvbnMgZXhpc3RhbnRlcwogCi1wbGFuZXRTdWJzY3JpcHRpb25zLmNvbHVtbi50aXRsZT1UaXRyZQotcGxhbmV0U3Vic2NyaXB0aW9ucy5jb2x1bW4uZmVlZFVybD1VUkwgZHUgZmlsCitwbGFuZXRHcm91cFN1YnMuY29sdW1uLnRpdGxlPVRpdHJlCitwbGFuZXRHcm91cFN1YnMuY29sdW1uLmZlZWRVcmw9VVJMIGR1IGZpbAogCiBwbGFuZXRTdWJzY3JpcHRpb24uZmVlZFVybD1VUkwgZHUgZmlsIGQnaW5mb3JtYXRpb24KIApAQCAtNzM5LDcgKzczOSw3IEBACiAKIHBsYW5ldFN1YnNjcmlwdGlvbi5lcnJvcj1Wb3VzIGRldmV6IHNwZWNpZmllciB1bmUgYWRyZXNzZSBVUkwgcG91ciBsZSBmaWwgZCdpbmZvcm1hdGlvbgogcGxhbmV0U3Vic2NyaXB0aW9uLmVycm9yLmZlZWRVcmw9VVJMIGR1IGZpbCByZXF1aXNlCi1wbGFuZXRTdWJzY3JpcHRpb25zLmVycm9yLmR1cmluZ1NhdmU9TGEgc291c2NyaXB0aW9uIHswfSBzZW1ibGUgZMOpasOgIGV4aXN0ZXIKK3BsYW5ldEdyb3VwU3Vicy5lcnJvci5kdXJpbmdTYXZlPUxhIHNvdXNjcmlwdGlvbiB7MH0gc2VtYmxlIGTDqWrDoCBleGlzdGVyCiBkZSBsYSBzb3VzY3JpcHRpb24uCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYW5ldEdyb3Vwcy5qc3AKQEAgLTgwNyw3ICs4MDcsNyBAQAogCiB0YWJiZWRtZW51LnBsYW5ldD1BZG1pbi4gUGxhbmV0CiB0YWJiZWRtZW51LmFkbWluLnBsYW5ldENvbmZpZz1Db25maWd1cmF0aW9uCi10YWJiZWRtZW51LmFkbWluLnBsYW5ldFN1YnNjcmlwdGlvbnM9U291c2NyaXB0aW9ucwordGFiYmVkbWVudS5hZG1pbi5wbGFuZXRHcm91cFN1YnM9U291c2NyaXB0aW9ucwogdGFiYmVkbWVudS5hZG1pbi5wbGFuZXRHcm91cHM9R3JvdXBlcyBwZXJzb25uYWxpc8OpcwogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU2VhcmNoCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vcmVzb3VyY2VzL0FwcGxpY2F0aW9uUmVzb3VyY2VzX2phLnByb3BlcnRpZXMgYi9hcHAvc3JjL21haW4vcmVzb3VyY2VzL0FwcGxpY2F0aW9uUmVzb3VyY2VzX2phLnByb3BlcnRpZXMKaW5kZXggMDNiNWE5ZC4uNWEyMTBjMiAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9BcHBsaWNhdGlvblJlc291cmNlc19qYS5wcm9wZXJ0aWVzCisrKyBiL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvQXBwbGljYXRpb25SZXNvdXJjZXNfamEucHJvcGVydGllcwpAQCAtNTQ4LDcgKzU0OCw3IEBACiBwbGFuZXRDb25maWcuc3VidGl0bGU9Um9sbGVyXHU1MTg1XHU4NTM1XHUzMDZFXHUzMENCXHUzMEU1XHUzMEZDXHUzMEI5XHUzMEQ1XHUzMEEzXHUzMEZDXHUzMEM5XHUzMEZCXHUzMEEyXHUzMEIwXHUzMEVBXHUzMEIyXHUzMEZDXHUzMEJGXHUzMDkyXHU4QTJEXHU1QjlBCiBwbGFuZXRDb25maWcudGl0bGU9UGxhbmV0IFx1OEEyRFx1NUI5QQogCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYW5ldFN1YnNjcmlwdGlvbnMuanNwCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYW5ldEdyb3VwU3Vicy5qc3AKIAogcGxhbmV0U3Vic2NyaXB0aW9uLnN1Y2Nlc3Muc2F2ZWQ9XHU4Q0ZDXHU4QUFEXHUzMDRDXHU0RkREXHU1QjU4XHUzMDU1XHUzMDhDXHUzMDdFXHUzMDU3XHUzMDVGCiAKQEAgLTEwNjUsNyArMTA2NSw3IEBACiBjYXRlZ29yeUZvcm0uY2hhbmdlc1NhdmVkPVx1MzBBQlx1MzBDNlx1MzBCNFx1MzBFQSAiezB9IiBcdTMwNENcdTY2RjRcdTY1QjBcdTMwNTVcdTMwOENcdTMwN0VcdTMwNTdcdTMwNUYKIG1lZGlhRmlsZVZpZXcuZGlyUGFnZVRpcD1cdTMwNTNcdTMwOENcdTMwNkZcdTMwRTFcdTMwQzdcdTMwQTNcdTMwQTJcdTMwRkJcdTMwRDVcdTMwQTFcdTMwQTRcdTMwRUJcdTMwNkVcdTMwQjVcdTMwRDZcdTMwRDVcdTMwQTlcdTMwRUJcdTMwQzBcdTMwNjdcdTMwNTlcdTMwMDIKIHVzZXJSZWdpc3Rlci5oZWFkaW5nLmlkZW50aWZpY2F0aW9uPVx1MzA2OVx1MzA2RVx1MzA4OFx1MzA0Nlx1MzA2Qlx1OEI1OFx1NTIyNVx1MzA1NVx1MzA4Q1x1MzA1Rlx1MzA0NFx1MzA2N1x1MzA1OVx1MzA0Qj8KLXBsYW5ldFN1YnNjcmlwdGlvbnMuc3VidGl0bGUuYWRkPVx1MzBCMFx1MzBFQlx1MzBGQ1x1MzBENyBbPGI+ezB9PC9iPl0gXHUzMDZFXHUzMENCXHUzMEU1XHUzMEZDXHUzMEI5XHUzMEQ1XHUzMEEzXHUzMEZDXHUzMEM5XHUzMEZCXHUzMEI1XHUzMEQ2XHUzMEI5XHUzMEFGXHUzMEVBXHUzMEQ3XHUzMEI3XHUzMEU3XHUzMEYzXHUzMDkyXHU3QkExXHU3NDA2XHUzMDU3XHUzMDdFXHUzMDU5XHUzMDAyCitwbGFuZXRHcm91cFN1YnMuc3VidGl0bGUuYWRkPVx1MzBCMFx1MzBFQlx1MzBGQ1x1MzBENyBbPGI+ezB9PC9iPl0gXHUzMDZFXHUzMENCXHUzMEU1XHUzMEZDXHUzMEI5XHUzMEQ1XHUzMEEzXHUzMEZDXHUzMEM5XHUzMEZCXHUzMEI1XHUzMEQ2XHUzMEI5XHUzMEFGXHUzMEVBXHUzMEQ3XHUzMEI3XHUzMEU3XHUzMEYzXHUzMDkyXHU3QkExXHU3NDA2XHUzMDU3XHUzMDdFXHUzMDU5XHUzMDAyCiBwYWdlRm9ybS5sYXVuY2g9XHU4ODY4XHU3OTNBCiBlcnJvci51bmV4cGVjdGVkPVx1NEU4OFx1NjcxRlx1MzA1Qlx1MzA2Q1x1MzBBOFx1MzBFOVx1MzBGQ1x1MzA2N1x1MzA1OVx1MzAwMlx1MzBBOFx1MzBFOVx1MzBGQ1x1MzA0Q1x1NTE4RFx1NzY3QVx1MzA1OVx1MzA4Qlx1NTgzNFx1NTQwOFx1MzAwMVx1N0JBMVx1NzQwNlx1ODAwNVx1MzA2Qlx1OTAyM1x1N0Q2MVx1MzA1N1x1MzA2Nlx1MzA0Rlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMgogbWVkaWFGaWxlVmlldy5kYXRlPVx1NjVFNVx1NEVEOApAQCAtMTExNSw3ICsxMTE1LDcgQEAKIHVzZXJSZWdpc3Rlci50aXAub3BlbklkVXJsPU9wZW4gSURcdThCNThcdTUyMjVcdTVCNTAoVVJMXHU1RjYyXHU1RjBGKVx1MzAwMgogcGluZ1RhcmdldC5lZGl0VGFyZ2V0PVBpbmdcdTMwQkZcdTMwRkNcdTMwQjJcdTMwQzNcdTMwQzhcdTMwOTJcdTdERThcdTk2QzZcdTMwNTlcdTMwOEIKIG1lZGlhRmlsZUFkZC5kaXJlY3Rvcnk9XHUzMEQ1XHUzMEE5XHUzMEVCXHUzMEMwCi1wbGFuZXRTdWJzY3JpcHRpb25zLnRpdGxlPVx1MzBCNVx1MzBENlx1MzBCOVx1MzBBRlx1MzBFQVx1MzBEN1x1MzBCN1x1MzBFN1x1MzBGMworcGxhbmV0R3JvdXBTdWJzLnRpdGxlPVx1MzBCNVx1MzBENlx1MzBCOVx1MzBBRlx1MzBFQVx1MzBEN1x1MzBCN1x1MzBFN1x1MzBGMwogbWVkaWFGaWxlVmlldy5zaXplPVx1MzBCNVx1MzBBNFx1MzBCQQogc3R5bGVzaGVldEVkaXQudGlwPVx1MzA1M1x1MzA2RVx1MzBENVx1MzBBOVx1MzBGQ1x1MzBFMFx1MzA5Mlx1NEY3Rlx1MzA2M1x1MzA2Nlx1MzAwMVx1MzA0Mlx1MzA2QVx1MzA1Rlx1MzA2RVx1MzBDNlx1MzBGQ1x1MzBERVx1MzA2RVx1MzBCOVx1MzBCRlx1MzBBNFx1MzBFQlx1MzBCN1x1MzBGQ1x1MzBDOFx1MzA5Mlx1N0RFOFx1OTZDNlx1MzA1OVx1MzA4Qlx1MzA1M1x1MzA2OFx1MzA0Q1x1MzA2N1x1MzA0RFx1MzA3RVx1MzA1OVx1MzAwMgogdGhlbWVFZGl0b3IuaW1wb3J0QW5kT3ZlcndyaXRlVGVtcGxhdGVzLnRvb2x0aXA9XHUzMDUzXHUzMDZFXHUzMEQ2XHUzMEVEXHUzMEIwXHUzMDZGXHUzMDAxXHUzMDU5XHUzMDY3XHUzMDZCXHUzMEM2XHUzMEYzXHUzMEQ3XHUzMEVDXHUzMEZDXHUzMEM4XHUzMEZCXHUzMEJGXHUzMEQ2XHUzMDY3XHU1QjlBXHU3RkE5XHUzMDU1XHUzMDhDXHUzMDVGXHUzMEFCXHUzMEI5XHUzMEJGXHUzMEUwXHUzMEZCXHUzMEM2XHUzMEYzXHUzMEQ3XHUzMEVDXHUzMEZDXHUzMEM4XHUzMDkyXHU2MzAxXHUzMDYzXHUzMDY2XHUzMDQ0XHUzMDdFXHUzMDU5XHUzMDAyXHU1MTcxXHU2NzA5XHUzMEM2XHUzMEZDXHUzMERFXHUzMDY4XHU1NDBDXHU1NDBEXHUzMDZFXHU2NUUyXHU1QjU4XHUzMEM2XHUzMEYzXHUzMEQ3XHUzMEVDXHUzMEZDXHUzMEM4XHUzMDkyXHU0RTBBXHU2NkY4XHUzMDREXHUzMDU3XHUzMDVGXHUzMDQ0XHU1ODM0XHU1NDA4XHUzMDZGXHUzMDUzXHUzMDZFXHUzMEFBXHUzMEQ3XHUzMEI3XHUzMEU3XHUzMEYzXHUzMDkyXHU5MDc4XHU2MjlFXHUzMDU3XHUzMDY2XHUzMDRGXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyXHU2NUUyXHU1QjU4XHUzMEM2XHUzMEYzXHUzMEQ3XHUzMEVDXHUzMEZDXHUzMEM4XHUzMDkyXHU0RjdGXHUzMDYzXHUzMDY2XHU1MzU4XHUzMDZCXHUzMEFCXHUzMEI5XHUzMEJGXHUzMEUwXHUzMEZCXHUzMEM2XHUzMEYzXHUzMEQ3XHUzMEVDXHUzMEZDXHUzMEM4XHUzMDkyXHU1MjA3XHUzMDhBXHU2NkZGXHUzMDQ4XHUzMDVGXHUzMDQ0XHU1ODM0XHU1NDA4XHUzMDZGXHU5MDc4XHU2MjlFXHUzMDU3XHUzMDZBXHUzMDQ0XHUzMDY3XHUzMDRGXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyCkBAIC0xMTU3LDcgKzExNTcsNyBAQAogbWFpbnRlbmFuY2UubWVzc2FnZS5yZXNldD1cdTMwQTJcdTMwQUZcdTMwQkJcdTMwQjlcdTMwQUJcdTMwQTZcdTMwRjNcdTMwQkZcdTMwNENcdTZCNjNcdTVFMzhcdTMwNkJcdTMwRUFcdTMwQkJcdTMwQzNcdTMwQzhcdTMwNTVcdTMwOENcdTMwN0VcdTMwNTdcdTMwNUYKIGVtYWlsLmNvbW1lbnQuY29tbWVudGVyLmVtYWlsPVx1MzBCM1x1MzBFMVx1MzBGM1x1MzBDOFx1NjI5NVx1N0EzRlx1ODAwNVx1MzA2RVx1MzBFMVx1MzBGQ1x1MzBFQlx1MzBBMlx1MzBDOVx1MzBFQ1x1MzBCOQogd2VsY29tZS51c2VyLmFjY291bnQubm90LmFjdGl2YXRlZD1cdTMwQjdcdTMwQjlcdTMwQzZcdTMwRTBcdTMwNkJcdTMwRURcdTMwQjBcdTMwQTRcdTMwRjNcdTMwNTlcdTMwOEJcdTMwNkJcdTMwNkZcdTMwMDFcdTMwRTFcdTMwRkNcdTMwRUJcdTMwNjdcdTkwMDFcdTRGRTFcdTMwNTVcdTMwOENcdTMwNUZcdTMwRUFcdTMwRjNcdTMwQUZcdTMwOTJcdTMwQUZcdTMwRUFcdTMwQzNcdTMwQUZcdTMwNTdcdTMwNjZcdTMwNDJcdTMwNkFcdTMwNUZcdTMwNkVcdTMwQTJcdTMwQUJcdTMwQTZcdTMwRjNcdTMwQzhcdTMwOTJcdTY3MDlcdTUyQjlcdTUzMTZcdTMwNTdcdTMwNkFcdTMwNTFcdTMwOENcdTMwNzBcdTMwNkFcdTMwOEFcdTMwN0VcdTMwNUJcdTMwOTNcdTMwMDIKLXBsYW5ldFN1YnNjcmlwdGlvbnMucHJvbXB0LmFkZD1cdTY1QjBcdTMwNTdcdTMwNDRcdTMwQjVcdTMwRDZcdTMwQjlcdTMwQUZcdTMwRUFcdTMwRDdcdTMwQjdcdTMwRTdcdTMwRjNcdTMwOTJcdThGRkRcdTUyQTBcdTMwNTlcdTMwOEJcdTMwNkJcdTMwNkZcdTMwMDFcdTMwQ0JcdTMwRTVcdTMwRkNcdTMwQjlcdTMwRDVcdTMwQTNcdTMwRkNcdTMwQzlVUkxcdTMwOTJcdTUxNjVcdTUyOUJcdTMwNTdcdTMwNjZcdTMwMDFcdTRGRERcdTVCNThcdTMwRENcdTMwQkZcdTMwRjNcdTMwOTJcdTMwQUZcdTMwRUFcdTMwQzNcdTMwQUZcdTMwNTdcdTMwNjZcdTMwNEZcdTMwNjBcdTMwNTVcdTMwNDRcdTMwMDIKK3BsYW5ldEdyb3VwU3Vicy5wcm9tcHQuYWRkPVx1NjVCMFx1MzA1N1x1MzA0NFx1MzBCNVx1MzBENlx1MzBCOVx1MzBBRlx1MzBFQVx1MzBEN1x1MzBCN1x1MzBFN1x1MzBGM1x1MzA5Mlx1OEZGRFx1NTJBMFx1MzA1OVx1MzA4Qlx1MzA2Qlx1MzA2Rlx1MzAwMVx1MzBDQlx1MzBFNVx1MzBGQ1x1MzBCOVx1MzBENVx1MzBBM1x1MzBGQ1x1MzBDOVVSTFx1MzA5Mlx1NTE2NVx1NTI5Qlx1MzA1N1x1MzA2Nlx1MzAwMVx1NEZERFx1NUI1OFx1MzBEQ1x1MzBCRlx1MzBGM1x1MzA5Mlx1MzBBRlx1MzBFQVx1MzBDM1x1MzBBRlx1MzA1N1x1MzA2Nlx1MzA0Rlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMgogTWVkaWFGaWxlLmVycm9yLnZpZXc9XHUzMEM3XHUzMEEzXHUzMEVDXHUzMEFGXHUzMEM4XHUzMEVBXHUzMDkyXHU4ODY4XHU3OTNBXHUzMDU5XHUzMDhCXHU5NjlCXHUzMDZCXHUzMEE4XHUzMEU5XHUzMEZDXHUzMDRDXHU3NjdBXHU3NTFGXHUzMDU3XHUzMDdFXHUzMDU3XHUzMDVGXHUzMDAyCiBtZWRpYUZpbGVBZGQubXVsdGlwbGVOYW1lcz0oXHU4OTA3XHU2NTcwXHUzMDZFXHU1NDBEXHU1MjREKQogbWFjcm8uYm9va21hcmsudXJsRmVlZD1cdTMwQjVcdTMwQTRcdTMwQzhcdTMwNkVSU1NcdTMwRDVcdTMwQTNcdTMwRkNcdTMwQzlcdTMwNkVVUkwKQEAgLTExODgsMTAgKzExODgsMTAgQEAKIHdlYmxvZ0VkaXQuZW5jbG9zdXJlVVJMPVx1MzBBOFx1MzBGM1x1MzBBRlx1MzBFRFx1MzBGQ1x1MzBCOFx1MzBFM1VSTAogdXNlclJlZ2lzdGVyLnN1Y2Nlc3MucmVhZHk9XHUzMEQ1XHUzMEE5XHUzMEZDXHUzMEUwXHUzMDZGXHU1NTRGXHU5ODRDXHUzMDZBXHUzMDRGXHU1MTY1XHU1MjlCXHUzMDU1XHUzMDhDXHUzMDY2XHUzMDQ0XHUzMDhCXHUzMDg4XHUzMDQ2XHUzMDY3XHUzMDU5XHUzMDAyXHU0RUU1XHU0RTBCXHUzMDZFXHUzMERDXHUzMEJGXHUzMEYzXHUzMDkyXHUzMEFGXHUzMEVBXHUzMEMzXHUzMEFGXHUzMDU3XHUzMDY2XHUzMDRGXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyCiBwYWdlRm9ybS50aXA9XHUzMEM2XHUzMEYzXHUzMEQ3XHUzMEVDXHUzMEZDXHUzMEM4XHUzMDkyXHU3REU4XHU5NkM2XHUzMDU3XHUzMDY2XHUzMDAxXHU3NTFGXHU2MjEwXHUzMDU1XHUzMDhDXHUzMDhCXHUzMERBXHUzMEZDXHUzMEI4XHUzMDkyXHU1OTA5XHU2NkY0XHUzMDU5XHUzMDhCXHUzMDUzXHUzMDY4XHUzMDRDXHUzMDY3XHUzMDREXHUzMDdFXHUzMDU5XHUzMDAyXHUzMEM2XHUzMEYzXHUzMEQ3XHUzMEVDXHUzMEZDXHUzMEM4XHUzMDY3XHU0RjdGXHU3NTI4XHUzMDU5XHUzMDhCXHUzMDUzXHUzMDY4XHUzMDZFXHUzMDY3XHUzMDREXHUzMDhCXHUzMEFBXHUzMEQ2XHUzMEI4XHUzMEE3XHUzMEFGXHUzMEM4XHUzMDRBXHUzMDg4XHUzMDczXHUzMEIzXHUzMEZDXHUzMEM5XHUzMDZCXHUzMDY0XHUzMDQ0XHUzMDY2XHUzMDZGUm9sbGVyXHUzMEM2XHUzMEYzXHUzMEQ3XHUzMEVDXHUzMEZDXHUzMEM4XHUzMEZCXHUzMEFDXHUzMEE0XHUzMEM5XHUzMDkyXHU1M0MyXHU3MTY3XHUzMDU3XHUzMDY2XHUzMDRGXHUzMDYwXHUzMDU1XHUzMDQ0XHUzMDAyXHUzMDUzXHUzMDhDXHUzMDZGXHU0RTBBXHU3RDFBXHUzMEU2XHUzMEZDXHUzMEI2XHUzMEZDXHUzMDZFXHUzMDVGXHUzMDgxXHUzMDZFXHUzMDgyXHUzMDZFXHUzMDY3XHUzMDQyXHUzMDhBXHUzMDAxXHUzMDgyXHUzMDU3XHUzMDQyXHUzMDZBXHUzMDVGXHUzMDRDSFRNTFx1MzA2Qlx1OEE3M1x1MzA1N1x1MzA0Rlx1MzA2QVx1MzA0NFx1NTgzNFx1NTQwOFx1MzA2Rlx1MzA1RFx1MzA2RVx1MzA3RVx1MzA3RVx1MzA2Qlx1MzA1N1x1MzA2Nlx1MzA0QVx1MzA0NFx1MzA1Rlx1NjVCOVx1MzA0Q1x1ODI2Rlx1MzA0NFx1MzA2N1x1MzA1N1x1MzA4N1x1MzA0Nlx1MzAwMgotcGxhbmV0U3Vic2NyaXB0aW9ucy5jb2x1bW4uZmVlZFVybD1cdTMwRDVcdTMwQTNcdTMwRkNcdTMwQzlVUkwKK3BsYW5ldEdyb3VwU3Vicy5jb2x1bW4uZmVlZFVybD1cdTMwRDVcdTMwQTNcdTMwRkNcdTMwQzlVUkwKIG1lZGlhRmlsZVN1Y2Nlc3MuY3JlYXRlUG9zdD1cdTY1QjBcdTMwNTdcdTMwNEZcdTMwQTJcdTMwQzNcdTMwRDdcdTMwRURcdTMwRkNcdTMwQzlcdTMwNTVcdTMwOENcdTMwNUZcdTMwRDVcdTMwQTFcdTMwQTRcdTMwRUJcdTMwOTJcdTRGN0ZcdTMwNjNcdTMwNjZcdTY1QjBcdTMwNTdcdTMwNDRcdTMwQThcdTMwRjNcdTMwQzhcdTMwRUFcdTMwOTJcdTRGNUNcdTYyMTBcdTMwNTlcdTMwOEIKIGJvb2ttYXJrRm9ybS5yZXF1aXJlZEZpZWxkcz17MH1cdTMwNjh7MX1cdTMwNkZcdTVGQzVcdTk4MDhcdTMwNjdcdTMwNTlcdTMwMDIKLXBsYW5ldFN1YnNjcmlwdGlvbnMuY29sdW1uLnRpdGxlPVx1MzBCRlx1MzBBNFx1MzBDOFx1MzBFQgorcGxhbmV0R3JvdXBTdWJzLmNvbHVtbi50aXRsZT1cdTMwQkZcdTMwQTRcdTMwQzhcdTMwRUIKIGJvb2ttYXJrc0Zvcm0uZGVsZXRlRm9sZGVyLmNvbmZpcm09XHUzMEQ1XHUzMEE5XHUzMEVCXHUzMEMwXHUzMDY4XHUzMDAxXHUzMEQ1XHUzMEE5XHUzMEVCXHUzMEMwXHUzMDZCXHU1NDJCXHUzMDdFXHUzMDhDXHUzMDhCXHUzMEQ2XHUzMEMzXHUzMEFGXHUzMERFXHUzMEZDXHUzMEFGXHUzMDkyXHU1MjRBXHU5NjY0XHUzMDU3XHUzMDY2XHUzMDg4XHUzMDhEXHUzMDU3XHUzMDQ0XHUzMDY3XHUzMDU5XHUzMDRCPwogcGxhbmV0U3Vic2NyaXB0aW9uLmVycm9yPVx1MzBDQlx1MzBFNVx1MzBGQ1x1MzBCOVx1MzBENVx1MzBBM1x1MzBGQ1x1MzBDOVVSTFx1MzA5Mlx1NjMwN1x1NUI5QVx1MzA1N1x1MzA2Nlx1MzA0Rlx1MzA2MFx1MzA1NVx1MzA0NAogbWVkaWFGaWxlLnVwZGF0ZS5zdWNjZXNzPVx1MzBFMVx1MzBDN1x1MzBBM1x1MzBBMlx1MzBGQlx1MzBENVx1MzBBMVx1MzBBNFx1MzBFQlx1MzA2Rlx1NkI2M1x1NUUzOFx1MzA2Qlx1NjZGNFx1NjVCMFx1MzA1NVx1MzA4Q1x1MzA3RVx1MzA1N1x1MzA1Rlx1MzAwMgpAQCAtMTI0MSw3ICsxMjQxLDcgQEAKIGNyZWF0ZVdlYnNpdGUuZGlzYWJsZWQ9XHU3NTMzXHUzMDU3XHU4QTMzXHUzMDQyXHUzMDhBXHUzMDdFXHUzMDVCXHUzMDkzXHUzMDRDXHUzMDAxXHU2NUIwXHUzMDU3XHUzMDQ0XHUzMEQ2XHUzMEVEXHUzMEIwXHUzMDZFXHU0RjVDXHU2MjEwXHUzMDZGXHUzMDAxXHU3QkExXHU3NDA2XHU4MDA1XHUzMDZCXHUzMDg4XHUzMDYzXHUzMDY2XHU3MTIxXHU1MkI5XHUzMDZCXHUzMDU1XHUzMDhDXHUzMDY2XHUzMDQ0XHUzMDdFXHUzMDU5XHUzMDAyCiBtYWNyby53ZWJsb2cucG9zdGNvbW1lbnQ9XHUzMEIzXHUzMEUxXHUzMEYzXHUzMEM4XHUzMDkyXHU2Mjk1XHU3QTNGCiBFbnRyeS5lcnJvci5jYXRlZ29yeU51bGw9XHUzMEFCXHUzMEM2XHUzMEI0XHUzMEVBXHUzMDZGXHU1RkM1XHU5ODA4XHU5ODA1XHU3NkVFXHUzMDY3XHUzMDU5Ci1wbGFuZXRTdWJzY3JpcHRpb25zLnByb21wdC5hZGRNYWluPVx1MzBCNVx1MzBENlx1MzBCOVx1MzBBRlx1MzBFQVx1MzBEN1x1MzBCN1x1MzBFN1x1MzBGM1x1MzA5Mlx1MzAwMVx1MzBFMVx1MzBBNFx1MzBGM1BsYW5ldFx1MzBBMlx1MzBCMFx1MzBFQVx1MzBCMlx1MzBGQ1x1MzBCRlx1MzBGQ1x1MzBGQlx1MzBEQVx1MzBGQ1x1MzBCOFx1MzA2Qlx1NTQyQlx1MzA3RVx1MzA4Q1x1MzA4Qlx1MzBDQlx1MzBFNVx1MzBGQ1x1MzBCOVx1MzBENVx1MzBBM1x1MzBGQ1x1MzBDOVx1NEUwMFx1ODlBN1x1MzA2Qlx1OEZGRFx1NTJBMFx1MzA1OVx1MzA4Qlx1MzA2Qlx1MzA2Rlx1MzA1M1x1MzA2RVx1MzBEQVx1MzBGQ1x1MzBCOFx1MzA5Mlx1NEY3Rlx1NzUyOFx1MzA1N1x1MzA2Nlx1MzA0Rlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMlx1NjVCMFx1MzA1N1x1MzA0NFx1MzBCNVx1MzBENlx1MzBCOVx1MzBBRlx1MzBFQVx1MzBEN1x1MzBCN1x1MzBFN1x1MzBGM1x1MzA5Mlx1OEZGRFx1NTJBMFx1MzA1OVx1MzA4Qlx1MzA2Qlx1MzA2Rlx1MzAwMVx1MzBDQlx1MzBFNVx1MzBGQ1x1MzBCOVx1MzBENVx1MzBBM1x1MzBGQ1x1MzBDOVVSTFx1MzA5Mlx1NTE2NVx1NTI5Qlx1MzA1N1x1MzA2Nlx1NEZERFx1NUI1OFx1MzBEQ1x1MzBCRlx1MzBGM1x1MzA5Mlx1MzBBRlx1MzBFQVx1MzBDM1x1MzBBRlx1MzA1N1x1MzA2Nlx1MzA0Rlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMgorcGxhbmV0R3JvdXBTdWJzLnByb21wdC5hZGRNYWluPVx1MzBCNVx1MzBENlx1MzBCOVx1MzBBRlx1MzBFQVx1MzBEN1x1MzBCN1x1MzBFN1x1MzBGM1x1MzA5Mlx1MzAwMVx1MzBFMVx1MzBBNFx1MzBGM1BsYW5ldFx1MzBBMlx1MzBCMFx1MzBFQVx1MzBCMlx1MzBGQ1x1MzBCRlx1MzBGQ1x1MzBGQlx1MzBEQVx1MzBGQ1x1MzBCOFx1MzA2Qlx1NTQyQlx1MzA3RVx1MzA4Q1x1MzA4Qlx1MzBDQlx1MzBFNVx1MzBGQ1x1MzBCOVx1MzBENVx1MzBBM1x1MzBGQ1x1MzBDOVx1NEUwMFx1ODlBN1x1MzA2Qlx1OEZGRFx1NTJBMFx1MzA1OVx1MzA4Qlx1MzA2Qlx1MzA2Rlx1MzA1M1x1MzA2RVx1MzBEQVx1MzBGQ1x1MzBCOFx1MzA5Mlx1NEY3Rlx1NzUyOFx1MzA1N1x1MzA2Nlx1MzA0Rlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMlx1NjVCMFx1MzA1N1x1MzA0NFx1MzBCNVx1MzBENlx1MzBCOVx1MzBBRlx1MzBFQVx1MzBEN1x1MzBCN1x1MzBFN1x1MzBGM1x1MzA5Mlx1OEZGRFx1NTJBMFx1MzA1OVx1MzA4Qlx1MzA2Qlx1MzA2Rlx1MzAwMVx1MzBDQlx1MzBFNVx1MzBGQ1x1MzBCOVx1MzBENVx1MzBBM1x1MzBGQ1x1MzBDOVVSTFx1MzA5Mlx1NTE2NVx1NTI5Qlx1MzA1N1x1MzA2Nlx1NEZERFx1NUI1OFx1MzBEQ1x1MzBCRlx1MzBGM1x1MzA5Mlx1MzBBRlx1MzBFQVx1MzBDM1x1MzBBRlx1MzA1N1x1MzA2Nlx1MzA0Rlx1MzA2MFx1MzA1NVx1MzA0NFx1MzAwMgogbWVkaWFGaWxlVmlldy5hdWRpbz1cdTk3RjNcdTU4RjAKIHdlYmxvZ0VkaXQubWVkaWFDYXN0UmVzcG9uc2VFcnJvcj1cdTMwQThcdTMwRjNcdTMwQUZcdTMwRURcdTMwRkNcdTMwQjhcdTMwRTNcdTMwRkJcdTMwQjVcdTMwRkNcdTMwRDBcdTMwNkZcdTMwQThcdTMwRTlcdTMwRkNcdTMwOTJcdThGRDRcdTMwNTdcdTMwN0VcdTMwNTdcdTMwNUZcdTMwMDJcdTZCNjNcdTMwNTdcdTMwNDRVUkxcdTMwNjdcdTMwNTlcdTMwNEI/CiB0aGVtZUVkaXRvci5pbXBvcnRSZXF1aXJlZD1cdTRFQ0FcdTU2REVcdTMwNENcdTUyMURcdTMwODFcdTMwNjZcdTMwNkVcdTMwQUJcdTMwQjlcdTMwQkZcdTMwRTBcdTMwRkJcdTMwQzZcdTMwRkNcdTMwREVcdTMwNkVcdTRGN0ZcdTc1MjhcdTMwNjdcdTMwNDJcdTMwOEJcdTMwNUZcdTMwODFcdTMwMDFcdTY1RTJcdTVCNThcdTMwNkVcdTMwQzZcdTMwRkNcdTMwREVcdTMwNEJcdTMwODlcdTMwQzZcdTMwRjNcdTMwRDdcdTMwRUNcdTMwRkNcdTMwQzhcdTMwOTJcdTMwQjNcdTMwRDRcdTMwRkNcdTMwNTlcdTMwOEJcdTVGQzVcdTg5ODFcdTMwNENcdTMwNDJcdTMwOEFcdTMwN0VcdTMwNTlcdTMwMDIKQEAgLTEyNjIsNyArMTI2Miw3IEBACiBwYWdlRm9ybS50ZW1wbGF0ZUxhbmd1YWdlPVx1MzBDNlx1MzBGM1x1MzBEN1x1MzBFQ1x1MzBGQ1x1MzBDOFx1MzA2RVx1OEEwMFx1OEE5RQogbWVkaWFGaWxlLmRlbGV0ZUZvbGRlci5zdWNjZXNzPVx1MzBENVx1MzBBOVx1MzBFQlx1MzBDMFx1MzA2Rlx1NkI2M1x1NUUzOFx1MzA2Qlx1NTI0QVx1OTY2NFx1MzA1NVx1MzA4Q1x1MzA3RVx1MzA1N1x1MzA1Rlx1MzAwMgogbWVkaWFGaWxlRWRpdC5pbmNsdWRlc0VuY2xvc3VyZT1cdTMwNTNcdTMwNkVcdTMwQThcdTMwRjNcdTMwQzhcdTMwRUFcdTMwNkZcdTRFRTVcdTRFMEJcdTMwNkVcdTMwRTFcdTMwQzdcdTMwQTNcdTMwQTJcdTMwRkJcdTMwRDVcdTMwQTFcdTMwQTRcdTMwRUJcdTMwRkJcdTMwQThcdTMwRjNcdTMwQUZcdTMwRURcdTMwRkNcdTMwQjhcdTMwRTNcdTMwOTJcdTU0MkJcdTMwN0ZcdTMwN0VcdTMwNTlcOgotcGxhbmV0U3Vic2NyaXB0aW9ucy5lcnJvci5kdXJpbmdTYXZlPVx1OTFDRFx1ODkwN1x1MzA1OVx1MzA4Qlx1MzBCNVx1MzBENlx1MzBCOVx1MzBBRlx1MzBFQVx1MzBEN1x1MzBCN1x1MzBFN1x1MzBGMz8gLSB7MH0KK3BsYW5ldEdyb3VwU3Vicy5lcnJvci5kdXJpbmdTYXZlPVx1OTFDRFx1ODkwN1x1MzA1OVx1MzA4Qlx1MzBCNVx1MzBENlx1MzBCOVx1MzBBRlx1MzBFQVx1MzBEN1x1MzBCN1x1MzBFN1x1MzBGMz8gLSB7MH0KIHdlYmxvZ0VudHJ5LnBlbmRpbmdFbnRyeUNvbnRlbnQ9XHUzMEU2XHUzMEZDXHUzMEI2XHUzMEZDIFt7MH1dIFx1MzA2Rlx1MzAwMVx1MzA0Mlx1MzA2QVx1MzA1Rlx1MzA2RVx1MzBFQ1x1MzBEM1x1MzBFNVx1MzBGQ1x1MzA5Mlx1NTNEN1x1MzA1MVx1MzA4Qlx1MzA1Rlx1MzA4MVx1MzA2Qlx1NjVCMFx1MzA1N1x1MzA0NFx1MzBBOFx1MzBGM1x1MzBDOFx1MzBFQVx1MzBGQ1x1MzA5Mlx1OTAwMVx1NEZFMVx1MzA1N1x1MzA3RVx1MzA1N1x1MzA1Rlx1MzAwMlx1MzA1M1x1MzA2RVx1NjI5NVx1N0EzRlx1MzA5Mlx1MzBFQ1x1MzBEM1x1MzBFNVx1MzBGQ1x1MzA1N1x1MzAwMVx1NTE2Q1x1OTU4Qlx1MzA1OVx1MzA4Qlx1MzA0Qlx1MzBFNlx1MzBGQ1x1MzBCNlx1MzBGQyBbezF9XSBcdTMwNENcdTUxOERcdTVFQTZcdTdERThcdTk2QzZcdTMwNjdcdTMwNERcdTMwOEJcdTMwODhcdTMwNDZcdTMwNkJcdTRFMEJcdTY2RjhcdTMwNERcdTMwNjhcdTMwNTdcdTMwNjZcdTRGRERcdTVCNThcdTMwNTdcdTMwNjZcdTMwNEZcdTMwNjBcdTMwNTVcdTMwNDRcdTMwMDJcdTMwRUNcdTMwRDNcdTMwRTVcdTMwRkNcdTVGODVcdTMwNjFcdTMwNkVcdTYyOTVcdTdBM0ZcdTMwOTJcdTdERThcdTk2QzZcdTMwNTlcdTMwOEJcdTMwNUZcdTMwODFcdTMwNkVcdTMwRUFcdTMwRjNcdTMwQUZcdTMwNkZcdTMwNTNcdTMwNjFcdTMwODlcdTMwNjdcdTMwNTlcOjx7Mn0+CiB3ZWJzaXRlU2V0dGluZ3MuYW5hbHl0aWNzVHJhY2tpbmdDb2RlPVx1MzBDOFx1MzBFOVx1MzBDM1x1MzBBRFx1MzBGM1x1MzBCMFx1MzBGQlx1MzBCM1x1MzBGQ1x1MzBDOQogbWVkaWFGaWxlVmlldy5tYj1NQgpAQCAtMTI5NSw3ICsxMjk1LDcgQEAKIG1lZGlhRmlsZS5pbmNsdWRlSW5HYWxsZXJ5LmVycm9yPVx1MzBFMVx1MzBDN1x1MzBBM1x1MzBBMlx1MzBGQlx1MzBENVx1MzBBMVx1MzBBNFx1MzBFQiB7MH0gXHUzMDkyXHUzMEFFXHUzMEUzXHUzMEU5XHUzMEVBXHUzMEZDXHUzMDZCXHU4RkZEXHU1MkEwXHUzMDU5XHUzMDhCXHU5NjlCXHUzMDZCXHUzMEE4XHUzMEU5XHUzMEZDXHUzMDRDXHU3NjdBXHU3NTFGXHUzMDU3XHUzMDdFXHUzMDU3XHUzMDVGXHUzMDAyCiBXZWJsb2dDb25maWcuZXJyb3IuYW5hbHl0aWNzQ29kZVNpemU9XHUzMEEyXHUzMENBXHUzMEVBXHUzMEM2XHUzMEEzXHUzMEFGXHUzMEI5XHUzMEZCXHUzMEM4XHUzMEU5XHUzMEMzXHUzMEFEXHUzMEYzXHUzMEIwXHUzMEZCXHUzMEIzXHUzMEZDXHUzMEM5XHUzMDZGMTIwMFx1NjU4N1x1NUI1N1x1NEVFNVx1NTE4NVx1MzA2N1x1MzA2QVx1MzA1MVx1MzA4Q1x1MzA3MFx1MzA2QVx1MzA4QVx1MzA3RVx1MzA1Qlx1MzA5MwogRW50cnkuZXJyb3IudGl0bGVOdWxsPVx1MzBCRlx1MzBBNFx1MzBDOFx1MzBFQlx1MzA2Rlx1NUZDNVx1OTgwOFx1OTgwNVx1NzZFRVx1MzA2N1x1MzA1OQotcGxhbmV0U3Vic2NyaXB0aW9ucy5zdWJ0aXRsZS5hZGRNYWluPVx1MzBDQlx1MzBFNVx1MzBGQ1x1MzBCOVx1MzBENVx1MzBBM1x1MzBGQ1x1MzBDOVx1MzBGQlx1MzBCNVx1MzBENlx1MzBCOVx1MzBBRlx1MzBFQVx1MzBEN1x1MzBCN1x1MzBFN1x1MzBGM1x1MzA2RVx1MzBFMVx1MzBBNFx1MzBGM1x1MzBGQlx1MzBFQVx1MzBCOVx1MzBDOFx1MzA5Mlx1N0JBMVx1NzQwNlx1MzA1N1x1MzA3RVx1MzA1OVx1MzAwMgorcGxhbmV0R3JvdXBTdWJzLnN1YnRpdGxlLmFkZE1haW49XHUzMENCXHUzMEU1XHUzMEZDXHUzMEI5XHUzMEQ1XHUzMEEzXHUzMEZDXHUzMEM5XHUzMEZCXHUzMEI1XHUzMEQ2XHUzMEI5XHUzMEFGXHUzMEVBXHUzMEQ3XHUzMEI3XHUzMEU3XHUzMEYzXHUzMDZFXHUzMEUxXHUzMEE0XHUzMEYzXHUzMEZCXHUzMEVBXHUzMEI5XHUzMEM4XHUzMDkyXHU3QkExXHU3NDA2XHUzMDU3XHUzMDdFXHUzMDU5XHUzMDAyCiBtZWRpYUZpbGUubW92ZS5lcnJvcnM9XHUzMEUxXHUzMEM3XHUzMEEzXHUzMEEyXHUzMEZCXHUzMEQ1XHUzMEExXHUzMEE0XHUzMEVCXHUzMDkyXHU3OUZCXHU1MkQ1XHUzMDU5XHUzMDhCXHU5NjlCXHUzMDZCXHUzMEE4XHUzMEU5XHUzMEZDXHUzMDRDXHU3NjdBXHU3NTFGXHUzMDU3XHUzMDdFXHUzMDU3XHUzMDVGXHUzMDAyCiBtZWRpYUZpbGVTdWNjZXNzLmFkZEFub3RoZXI9XHU0RUQ2XHUzMDZFXHUzMEUxXHUzMEM3XHUzMEEzXHUzMEEyXHUzMEZCXHUzMEQ1XHUzMEExXHUzMEE0XHUzMEVCXHUzMDkyXHUzMEEyXHUzMEMzXHUzMEQ3XHUzMEVEXHUzMEZDXHUzMEM5XHUzMDU5XHUzMDhCCiBwaW5nVGFyZ2V0LnBpbmdVcmxNaXNzaW5nPVBpbmcgVVJMXHUzMDZGXHU1RkM1XHU5ODA4XHU5ODA1XHU3NkVFXHUzMDY3XHUzMDU5CkBAIC0xMzg5LDcgKzEzODksNyBAQAogd2VibG9nRWRpdC5lbmNsb3N1cmVMZW5ndGg9XHU5NTc3XHUzMDU1CiB3ZWJsb2dFbnRyeVF1ZXJ5LmxhYmVsLnN0YXJ0RGF0ZT1cdTk1OEJcdTU5Q0JcdTY1RTUKIG1lZGlhRmlsZUVkaXQucGFnZXRpcD1cdTMwNTNcdTMwNkVcdTMwRTFcdTMwQzdcdTMwQTNcdTMwQTJcdTMwRkJcdTMwRDVcdTMwQTFcdTMwQTRcdTMwRUJcdTMwNkVcdTYwQzVcdTU4MzFcdTMwOTJcdTdERThcdTk2QzZcdTMwNTdcdTMwN0VcdTMwNTlcdTMwMDJcdTMwNURcdTMwOENcdTMwNUVcdTMwOENcdTMwNkVcdTMwRDVcdTMwQTFcdTMwQTRcdTMwRUJcdTMwNkJcdTMwNkZcdTU0MERcdTUyNERcdTMwNENcdTVGQzVcdTg5ODFcdTMwNjdcdTMwNTlcdTMwNENcdTMwMDFcdTRFRDZcdTMwNkVcdTk4MDVcdTc2RUVcdTMwNkZcdTc3MDFcdTc1NjVcdTMwNjdcdTMwNERcdTMwN0VcdTMwNTlcdTMwMDIKLXBsYW5ldFN1YnNjcmlwdGlvbnMuZXhpc3RpbmdUaXRsZT1cdTY1RTJcdTVCNThcdTMwNkVcdTMwQjVcdTMwRDZcdTMwQjlcdTMwQUZcdTMwRUFcdTMwRDdcdTMwQjdcdTMwRTdcdTMwRjMKK3BsYW5ldEdyb3VwU3Vicy5leGlzdGluZ1RpdGxlPVx1NjVFMlx1NUI1OFx1MzA2RVx1MzBCNVx1MzBENlx1MzBCOVx1MzBBRlx1MzBFQVx1MzBEN1x1MzBCN1x1MzBFN1x1MzBGMwogc3R5bGVzaGVldEVkaXQuZGVmYXVsdC5zdWNjZXNzPVx1MzBCOVx1MzBCRlx1MzBBNFx1MzBFQlx1MzBCN1x1MzBGQ1x1MzBDOFx1MzA0Q1x1NkI2M1x1NUUzOFx1MzA2Qlx1NTI0QVx1OTY2NFx1MzA1NVx1MzA4Q1x1MzA3RVx1MzA1N1x1MzA1Rlx1MzAwMlx1NTE3MVx1NjcwOVx1MzA2RVx1MzBDNlx1MzBGQ1x1MzBERVx1MzBGQlx1MzBDN1x1MzBENVx1MzBBOVx1MzBFQlx1MzBDOFx1MzA0Q1x1NjcwOVx1NTJCOVx1MzA2Qlx1MzA2QVx1MzA4QVx1MzA3RVx1MzA1N1x1MzA1Rlx1MzAwMgogcGFnZVJlbW92ZXMueW91U3VyZT1cdTMwNTNcdTMwNkVcdTMwREFcdTMwRkNcdTMwQjhcdTMwOTJcdTUyNEFcdTk2NjRcdTMwNTdcdTMwN0VcdTMwNTlcdTMwNEJcdUZGMUYKIG1lZGlhRmlsZUFkZC5maWxlTG9jYXRpb249XHUzMEEyXHUzMEMzXHUzMEQ3XHUzMEVEXHUzMEZDXHUzMEM5XHUzMDU5XHUzMDhCXHUzMEQ1XHUzMEExXHUzMEE0XHUzMEVCXHUzMDkyXHU5MDc4XHU2MjlFCkBAIC0xNDI5LDcgKzE0MjksNyBAQAogbWVkaWFGaWxlU3VjY2Vzcy5ieXRlcz1cdTMwRDBcdTMwQTRcdTMwQzgKIG1lZGlhRmlsZVZpZXcubW92ZVNlbGVjdGVkPVx1OTA3OFx1NjI5RVx1MzA1NVx1MzA4Q1x1MzA1Rlx1MzBENVx1MzBBMVx1MzBBNFx1MzBFQlx1MzA5Mlx1MzBENVx1MzBBOVx1MzBFQlx1MzBDMFx1MzA2Qlx1NzlGQlx1NTJENVw6CiBvYXV0aEtleXMudXJscz1PQXV0aFx1MzA2RVVSTAotdGFiYmVkbWVudS5hZG1pbi5wbGFuZXRTdWJzY3JpcHRpb25zPVx1MzBCNVx1MzBENlx1MzBCOVx1MzBBRlx1MzBFQVx1MzBEN1x1MzBCN1x1MzBFN1x1MzBGMwordGFiYmVkbWVudS5hZG1pbi5wbGFuZXRHcm91cFN1YnM9XHUzMEI1XHUzMEQ2XHUzMEI5XHUzMEFGXHUzMEVBXHUzMEQ3XHUzMEI3XHUzMEU3XHUzMEYzCiB3ZWJsb2dFZGl0LnN1Ym1pdHRlZEZvclJldmlldz1cdTMwQThcdTMwRjNcdTMwQzhcdTMwRUFcdTMwRkNcdTMwNENcdTMwRUNcdTMwRDNcdTMwRTVcdTMwRkNcdTMwOTJcdTUzRDdcdTMwNTFcdTMwOEJcdTMwNUZcdTMwODFcdTMwNkJcdTkwMDFcdTRGRTFcdTMwNTVcdTMwOENcdTMwN0VcdTMwNTdcdTMwNUYKIGluc3RhbGxlci51cGdyYWRlVGFibGVzPVx1MzBDNlx1MzBGQ1x1MzBENlx1MzBFQlx1MzA5Mlx1MzBBMlx1MzBDM1x1MzBEN1x1MzBCMFx1MzBFQ1x1MzBGQ1x1MzBDOVx1MzA1N1x1MzA3RVx1MzA1OVx1MzA0Qj8KIGNvbmZpZ0Zvcm0ubm9uZT1cdTYzMDdcdTVCOUFcdTMwNkFcdTMwNTcKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvQXBwbGljYXRpb25SZXNvdXJjZXNfa28ucHJvcGVydGllcyBiL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvQXBwbGljYXRpb25SZXNvdXJjZXNfa28ucHJvcGVydGllcwppbmRleCA1Y2FkM2ExLi5jYzgxNDRhIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vcmVzb3VyY2VzL0FwcGxpY2F0aW9uUmVzb3VyY2VzX2tvLnByb3BlcnRpZXMKKysrIGIvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9BcHBsaWNhdGlvblJlc291cmNlc19rby5wcm9wZXJ0aWVzCkBAIC03NzgsMjQgKzc3OCwyNCBAQAogQ29uZmlnRm9ybS5tZXNzYWdlLnNhdmVTdWNjZWVkZWQ9XHVkNTBjXHViNzk4XHViMmRiIFx1ZDY1OFx1YWNiZCBcdWMxMjRcdWM4MTVcdWM3NzQgXHVjODAwXHVjN2E1XHViNDE4XHVjNWM4XHVjMmI1XHViMmM4XHViMmU0LgogQ29uZmlnRm9ybS5lcnJvci5zYXZlRmFpbGVkPVx1ZDUwY1x1Yjc5OFx1YjJkYiBcdWQ2NThcdWFjYmQgXHVjMTI0XHVjODE1XHVjNzQ0IFx1YzgwMFx1YzdhNVx1ZDU1OFx1YjI5NCBcdWM5MTFcdWM1ZDAgXHVjNjI0XHViOTU4XHVhYzAwIFx1YmMxY1x1YzBkZFx1ZDU4OFx1YzJiNVx1YjJjOFx1YjJlNC4KIAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGFuZXRTdWJzY3JpcHRpb25zLmpzcAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGFuZXRHcm91cFN1YnMuanNwCiAKLXBsYW5ldFN1YnNjcmlwdGlvbnMudGl0bGU9XHVhZDZjXHViM2M1CitwbGFuZXRHcm91cFN1YnMudGl0bGU9XHVhZDZjXHViM2M1CiAKLXBsYW5ldFN1YnNjcmlwdGlvbnMuc3VidGl0bGUuYWRkPVwKK3BsYW5ldEdyb3VwU3Vicy5zdWJ0aXRsZS5hZGQ9XAogXHVhZGY4XHViOGY5LCBbPGI+ezB9PC9iPl0gXHViMGI0XHVjNzU4IFx1YjI3NFx1YzJhNFx1ZDUzY1x1YjRkYyBcdWFkNmNcdWIzYzUgXHVhZDAwXHViOWFjLgotcGxhbmV0U3Vic2NyaXB0aW9ucy5wcm9tcHQuYWRkPVx1YzBjOFx1Yjg1Y1x1YzZiNCBcdWFkNmNcdWIzYzVcdWM3NDQgXHVjZDk0XHVhYzAwXHVkNTU4XHViODI0XHViYTc0LCBcCitwbGFuZXRHcm91cFN1YnMucHJvbXB0LmFkZD1cdWMwYzhcdWI4NWNcdWM2YjQgXHVhZDZjXHViM2M1XHVjNzQ0IFx1Y2Q5NFx1YWMwMFx1ZDU1OFx1YjgyNFx1YmE3NCwgXAogXHViMjc0XHVjMmE0XHVkNTNjXHViNGRjIFVSTFx1Yzc0NCBcdWM3ODVcdWI4MjVcdWQ1NThcdWMyZTAgXHVkNmM0IFx1YzgwMFx1YzdhNSBcdWJjODRcdWQyYmNcdWM3NDQgXHVkMDc0XHViOWFkXHVkNTU4XHVjMmVkXHVjMmRjXHVjNjI0LgogCi1wbGFuZXRTdWJzY3JpcHRpb25zLnN1YnRpdGxlLmFkZE1haW49XHViMjc0XHVjMmE0XHVkNTNjXHViNGRjIFx1YWQ2Y1x1YjNjNSBcdWJhNTRcdWM3NzggXHViYWE5XHViODVkIFx1YWQwMFx1YjlhYwotcGxhbmV0U3Vic2NyaXB0aW9ucy5wcm9tcHQuYWRkTWFpbj1cdWM3NzQgXHVkMzk4XHVjNzc0XHVjOWMwXHViOTdjIFx1YzBhY1x1YzZhOVx1ZDU1OFx1YzVlYyBcCitwbGFuZXRHcm91cFN1YnMuc3VidGl0bGUuYWRkTWFpbj1cdWIyNzRcdWMyYTRcdWQ1M2NcdWI0ZGMgXHVhZDZjXHViM2M1IFx1YmE1NFx1Yzc3OCBcdWJhYTlcdWI4NWQgXHVhZDAwXHViOWFjCitwbGFuZXRHcm91cFN1YnMucHJvbXB0LmFkZE1haW49XHVjNzc0IFx1ZDM5OFx1Yzc3NFx1YzljMFx1Yjk3YyBcdWMwYWNcdWM2YTlcdWQ1NThcdWM1ZWMgXAogXHViYTU0XHVjNzc4IFx1ZDUwY1x1Yjc5OFx1YjJkYiBcdWQxYjVcdWQ1NjkgXHVhZTMwXHViMmE1IFx1ZDM5OFx1Yzc3NFx1YzljMFx1YzVkMCBcdWQzZWNcdWQ1NjhcdWI0MjAgXHViMjc0XHVjMmE0XHVkNTNjXHViNGRjIFx1YmFhOVx1Yjg1ZFx1YzVkMCBcdWFkNmNcdWIzYzVcdWM3NDQgXHVjZDk0XHVhYzAwXHVkNTU4XHVjMmVkXHVjMmRjXHVjNjI0LiBcCiBcdWMwYzhcdWI4NWNcdWM2YjQgXHVhZDZjXHViM2M1XHVjNzQ0IFx1Y2Q5NFx1YWMwMFx1ZDU1OFx1YzJkY1x1YjgyNFx1YmE3NCBcdWIyNzRcdWMyYTRcdWQ1M2NcdWI0ZGMgVVJMXHVjNzQ0IFx1Yzc4NVx1YjgyNVx1ZDU1OFx1YzJkY1x1YWNlMCBcdWM4MDBcdWM3YTUgXHViYzg0XHVkMmJjXHVjNzQ0IFx1ZDA3NFx1YjlhZFx1ZDU1OFx1YzJlZFx1YzJkY1x1YzYyNC4KIAotcGxhbmV0U3Vic2NyaXB0aW9ucy5leGlzdGluZ1RpdGxlPVx1YWUzMFx1Yzg3NCBcdWFkNmNcdWIzYzUKK3BsYW5ldEdyb3VwU3Vicy5leGlzdGluZ1RpdGxlPVx1YWUzMFx1Yzg3NCBcdWFkNmNcdWIzYzUKIAotcGxhbmV0U3Vic2NyaXB0aW9ucy5jb2x1bW4udGl0bGU9XHVjODFjXHViYWE5Ci1wbGFuZXRTdWJzY3JpcHRpb25zLmNvbHVtbi5mZWVkVXJsPVx1ZDUzY1x1YjRkYyBVUkwKK3BsYW5ldEdyb3VwU3Vicy5jb2x1bW4udGl0bGU9XHVjODFjXHViYWE5CitwbGFuZXRHcm91cFN1YnMuY29sdW1uLmZlZWRVcmw9XHVkNTNjXHViNGRjIFVSTAogCiBwbGFuZXRTdWJzY3JpcHRpb24uZmVlZFVybD1cdWIyNzRcdWMyYTRcdWQ1M2NcdWI0ZGMgVVJMCiBwbGFuZXRTdWJzY3JpcHRpb24uc3VjY2Vzcy5kZWxldGVkPVx1YWQ2Y1x1YjNjNVx1Yzc3NCBcdWMxMzFcdWFjZjVcdWM4MDFcdWM3M2NcdWI4NWMgXHVjMGFkXHVjODFjXHViNDE4XHVjNWM4XHVjMmI1XHViMmM4XHViMmU0LgpAQCAtODA0LDcgKzgwNCw3IEBACiAKIHBsYW5ldFN1YnNjcmlwdGlvbi5lcnJvcj1cdWIyNzRcdWMyYTRcdWQ1M2NcdWI0ZGMgVVJMXHVjNzQ0IFx1YzEyNFx1YzgxNVx1ZDU3NFx1YzU3YyBcdWQ1NjlcdWIyYzhcdWIyZTQuCiBwbGFuZXRTdWJzY3JpcHRpb24uZXJyb3IuZmVlZFVybD1cdWIyNzRcdWMyYTRcdWQ1M2NcdWI0ZGMgVVJMXHVjNzQ0IFx1Yzc4NVx1YjgyNVx1ZDU1OFx1YzJlZFx1YzJkY1x1YzYyNC4KLXBsYW5ldFN1YnNjcmlwdGlvbnMuZXJyb3IuZHVyaW5nU2F2ZT1cdWM5MTFcdWJjZjVcdWI0MWMgXHVhZDZjXHViM2M1XHVjNzg1XHViMmM4XHViMmU0IC0gezB9LgorcGxhbmV0R3JvdXBTdWJzLmVycm9yLmR1cmluZ1NhdmU9XHVjOTExXHViY2Y1XHViNDFjIFx1YWQ2Y1x1YjNjNVx1Yzc4NVx1YjJjOFx1YjJlNCAtIHswfS4KIHBsYW5ldFN1YnNjcmlwdGlvbi5lcnJvci5kZWxldGluZz1cdWFjMWRcdWNjYjQgXHVjMGFkXHVjODFjIFx1YzYyNFx1Yjk1OAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGFuZXRHcm91cHMuanNwCkBAIC04ODIsNyArODgyLDcgQEAKIHRhYmJlZG1lbnUuYWRtaW4uY2FjaGVJbmZvPVx1Y2U5MFx1YzJkYyBcdWM4MTVcdWJjZjQKIHRhYmJlZG1lbnUucGxhbmV0PVx1ZDUwY1x1Yjc5OFx1YjJkYiBcdWFkMDBcdWI5YWNcdWM3OTAKIHRhYmJlZG1lbnUuYWRtaW4ucGxhbmV0Q29uZmlnPVx1ZDY1OFx1YWNiZFx1YzEyNFx1YzgxNQotdGFiYmVkbWVudS5hZG1pbi5wbGFuZXRTdWJzY3JpcHRpb25zPVx1YWQ2Y1x1YjNjNQordGFiYmVkbWVudS5hZG1pbi5wbGFuZXRHcm91cFN1YnM9XHVhZDZjXHViM2M1CiB0YWJiZWRtZW51LmFkbWluLnBsYW5ldEdyb3Vwcz1cdWNlZTRcdWMyYTRcdWQxNDAgXHVhZGY4XHViOGY5CiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTZWFyY2gKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvQXBwbGljYXRpb25SZXNvdXJjZXNfcnUucHJvcGVydGllcyBiL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvQXBwbGljYXRpb25SZXNvdXJjZXNfcnUucHJvcGVydGllcwppbmRleCBlZmE4NTBjLi5jZTVjNjk1IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vcmVzb3VyY2VzL0FwcGxpY2F0aW9uUmVzb3VyY2VzX3J1LnByb3BlcnRpZXMKKysrIGIvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9BcHBsaWNhdGlvblJlc291cmNlc19ydS5wcm9wZXJ0aWVzCkBAIC00NjQsMTkgKzQ2NCwxOSBAQAogcGxhbmV0Q29uZmlnLnRpdGxlPVx1MDQxRFx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQzRVx1MDQzOVx1MDQzQVx1MDQzMCBQbGFuZXQNCiBwbGFuZXRDb25maWcudGlwLmRlc2NyaXB0aW9uPVx1MDQxRVx1MDQzRlx1MDQzOFx1MDQ0MVx1MDQzMFx1MDQzRFx1MDQzOFx1MDQzNSwgXHUwNDM4XHUwNDQxXHUwNDNGXHUwNDNFXHUwNDNCXHUwNDRDXHUwNDM3XHUwNDQzXHUwNDRFXHUwNDQ5XHUwNDM1XHUwNDM1XHUwNDQxXHUwNDRGIFx1MDQzMiBcdTA0MzdcdTA0MzBcdTA0MzNcdTA0M0VcdTA0M0JcdTA0M0VcdTA0MzJcdTA0M0FcdTA0MzUgXHUwNDNEXHUwNDNFXHUwNDMyXHUwNDNFXHUwNDQxXHUwNDQyXHUwNDNEXHUwNDNFXHUwNDM5IFx1MDQzQlx1MDQzNVx1MDQzRFx1MDQ0Mlx1MDQ0Qg0KIA0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGxhbmV0U3Vic2NyaXB0aW9ucy5qc3ANCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBsYW5ldEdyb3VwU3Vicy5qc3ANCiANCi1wbGFuZXRTdWJzY3JpcHRpb25zLnRpdGxlPVx1MDQxRlx1MDQzRVx1MDQzNFx1MDQzRlx1MDQzOFx1MDQ0MVx1MDQzQVx1MDQzOA0KLXBsYW5ldFN1YnNjcmlwdGlvbnMuc3VidGl0bGUuYWRkPVx1MDQyM1x1MDQzRlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzQlx1MDQzNVx1MDQzRFx1MDQzOFx1MDQzNSBcdTA0M0ZcdTA0M0VcdTA0MzRcdTA0M0ZcdTA0MzhcdTA0NDFcdTA0M0FcdTA0MzBcdTA0M0NcdTA0MzggXHUwNDNEXHUwNDNFXHUwNDMyXHUwNDNFXHUwNDQxXHUwNDQyXHUwNDNEXHUwNDRCXHUwNDQ1IFx1MDQzQlx1MDQzNVx1MDQzRFx1MDQ0MiBcdTA0MzIgXHUwNDMzXHUwNDQwXHUwNDQzXHUwNDNGXHUwNDNGXHUwNDM1IFs8Yj57MH08L2I+XQ0KLXBsYW5ldFN1YnNjcmlwdGlvbnMucHJvbXB0LmFkZD1cdTA0MjdcdTA0NDJcdTA0M0VcdTA0MzFcdTA0NEIgXHUwNDM0XHUwNDNFXHUwNDMxXHUwNDMwXHUwNDMyXHUwNDM4XHUwNDQyXHUwNDRDIFx1MDQzRFx1MDQzRVx1MDQzMlx1MDQ0M1x1MDQ0RSBcdTA0M0ZcdTA0M0VcdTA0MzRcdTA0M0ZcdTA0MzhcdTA0NDFcdTA0M0FcdTA0NDMsIFx1MDQzMlx1MDQzMlx1MDQzNVx1MDQzNFx1MDQzOFx1MDQ0Mlx1MDQzNSBcdTA0M0RcdTA0MzBcdTA0MzdcdTA0MzJcdTA0MzBcdTA0M0RcdTA0MzhcdTA0MzUsIFVSTCBcdTA0M0RcdTA0M0VcdTA0MzJcdTA0M0VcdTA0NDFcdTA0NDJcdTA0M0RcdTA0M0VcdTA0MzkgXHUwNDNCXHUwNDM1XHUwNDNEXHUwNDQyXHUwNDRCLCBVUkwgXHUwNDQxXHUwNDMwXHUwNDM5XHUwNDQyXHUwNDMwIFx1MDQzOCBcdTA0M0RcdTA0MzBcdTA0MzZcdTA0M0NcdTA0MzhcdTA0NDJcdTA0MzUgXHUwNDNBXHUwNDNEXHUwNDNFXHUwNDNGXHUwNDNBXHUwNDQzICJcdTA0MjFcdTA0M0VcdTA0NDVcdTA0NDBcdTA0MzBcdTA0M0RcdTA0MzhcdTA0NDJcdTA0NEMiDQorcGxhbmV0R3JvdXBTdWJzLnRpdGxlPVx1MDQxRlx1MDQzRVx1MDQzNFx1MDQzRlx1MDQzOFx1MDQ0MVx1MDQzQVx1MDQzOA0KK3BsYW5ldEdyb3VwU3Vicy5zdWJ0aXRsZS5hZGQ9XHUwNDIzXHUwNDNGXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDNCXHUwNDM1XHUwNDNEXHUwNDM4XHUwNDM1IFx1MDQzRlx1MDQzRVx1MDQzNFx1MDQzRlx1MDQzOFx1MDQ0MVx1MDQzQVx1MDQzMFx1MDQzQ1x1MDQzOCBcdTA0M0RcdTA0M0VcdTA0MzJcdTA0M0VcdTA0NDFcdTA0NDJcdTA0M0RcdTA0NEJcdTA0NDUgXHUwNDNCXHUwNDM1XHUwNDNEXHUwNDQyIFx1MDQzMiBcdTA0MzNcdTA0NDBcdTA0NDNcdTA0M0ZcdTA0M0ZcdTA0MzUgWzxiPnswfTwvYj5dDQorcGxhbmV0R3JvdXBTdWJzLnByb21wdC5hZGQ9XHUwNDI3XHUwNDQyXHUwNDNFXHUwNDMxXHUwNDRCIFx1MDQzNFx1MDQzRVx1MDQzMVx1MDQzMFx1MDQzMlx1MDQzOFx1MDQ0Mlx1MDQ0QyBcdTA0M0RcdTA0M0VcdTA0MzJcdTA0NDNcdTA0NEUgXHUwNDNGXHUwNDNFXHUwNDM0XHUwNDNGXHUwNDM4XHUwNDQxXHUwNDNBXHUwNDQzLCBcdTA0MzJcdTA0MzJcdTA0MzVcdTA0MzRcdTA0MzhcdTA0NDJcdTA0MzUgXHUwNDNEXHUwNDMwXHUwNDM3XHUwNDMyXHUwNDMwXHUwNDNEXHUwNDM4XHUwNDM1LCBVUkwgXHUwNDNEXHUwNDNFXHUwNDMyXHUwNDNFXHUwNDQxXHUwNDQyXHUwNDNEXHUwNDNFXHUwNDM5IFx1MDQzQlx1MDQzNVx1MDQzRFx1MDQ0Mlx1MDQ0QiwgVVJMIFx1MDQ0MVx1MDQzMFx1MDQzOVx1MDQ0Mlx1MDQzMCBcdTA0MzggXHUwNDNEXHUwNDMwXHUwNDM2XHUwNDNDXHUwNDM4XHUwNDQyXHUwNDM1IFx1MDQzQVx1MDQzRFx1MDQzRVx1MDQzRlx1MDQzQVx1MDQ0MyAiXHUwNDIxXHUwNDNFXHUwNDQ1XHUwNDQwXHUwNDMwXHUwNDNEXHUwNDM4XHUwNDQyXHUwNDRDIg0KIA0KLXBsYW5ldFN1YnNjcmlwdGlvbnMuc3VidGl0bGUuYWRkTWFpbj1cdTA0MjNcdTA0M0ZcdTA0NDBcdTA0MzBcdTA0MzJcdTA0M0JcdTA0MzVcdTA0M0RcdTA0MzhcdTA0MzUgXHUwNDMzXHUwNDNCXHUwNDMwXHUwNDMyXHUwNDNEXHUwNDRCXHUwNDNDIFx1MDQ0MVx1MDQzRlx1MDQzOFx1MDQ0MVx1MDQzQVx1MDQzRVx1MDQzQyBcdTA0M0RcdTA0M0VcdTA0MzJcdTA0M0VcdTA0NDFcdTA0NDJcdTA0M0RcdTA0NEJcdTA0NDUgXHUwNDNGXHUwNDNFXHUwNDM0XHUwNDNGXHUwNDM4XHUwNDQxXHUwNDNFXHUwNDNBDQotcGxhbmV0U3Vic2NyaXB0aW9ucy5wcm9tcHQuYWRkTWFpbj1cdTA0MThcdTA0NDFcdTA0M0ZcdTA0M0VcdTA0M0JcdTA0NENcdTA0MzdcdTA0NDNcdTA0MzlcdTA0NDJcdTA0MzUgXHUwNDREXHUwNDQyXHUwNDQzIFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzRFx1MDQzOFx1MDQ0Nlx1MDQ0MyBcdTA0MzRcdTA0M0JcdTA0NEYgXHUwNDM0XHUwNDNFXHUwNDMxXHUwNDMwXHUwNDMyXHUwNDNCXHUwNDM1XHUwNDNEXHUwNDM4XHUwNDRGIFx1MDQzOCBcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBcdTA0M0FcdTA0NDJcdTA0MzhcdTA0NDBcdTA0M0VcdTA0MzJcdTA0MzBcdTA0M0RcdTA0MzhcdTA0NEYgXHUwNDNGXHUwNDNFXHUwNDM0XHUwNDNGXHUwNDM4XHUwNDQxXHUwNDNFXHUwNDNBOiBcdTA0NDFcdTA0M0ZcdTA0MzhcdTA0NDFcdTA0M0VcdTA0M0EgXHUwNDNEXHUwNDNFXHUwNDMyXHUwNDNFXHUwNDQxXHUwNDQyXHUwNDNEXHUwNDRCXHUwNDQ1IFx1MDQzQlx1MDQzNVx1MDQzRFx1MDQ0MiBcdTA0M0RcdTA0MzAgXHUwNDMzXHUwNDNCXHUwNDMwXHUwNDMyXHUwNDNEXHUwNDNFXHUwNDM5IFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzRFx1MDQzOFx1MDQ0Nlx1MDQzNSBcdTA0MzBcdTA0MzNcdTA0NDBcdTA0MzVcdTA0MzNcdTA0MzBcdTA0NDJcdTA0M0VcdTA0NDBcdTA0MzAgUGxhbmV0LiBcdTA0MjdcdTA0NDJcdTA0M0VcdTA0MzFcdTA0NEIgXHUwNDM0XHUwNDNFXHUwNDMxXHUwNDMwXHUwNDMyXHUwNDM4XHUwNDQyXHUwNDRDIFx1MDQzRFx1MDQzRVx1MDQzMlx1MDQ0M1x1MDQ0RSBcdTA0M0ZcdTA0M0VcdTA0MzRcdTA0M0ZcdTA0MzhcdTA0NDFcdTA0M0FcdTA0NDMsIFx1MDQzMlx1MDQzMlx1MDQzNVx1MDQzNFx1MDQzOFx1MDQ0Mlx1MDQzNSBcdTA0M0RcdTA0MzBcdTA0MzdcdTA0MzJcdTA0MzBcdTA0M0RcdTA0MzhcdTA0MzUsIFVSTCBcdTA0M0RcdTA0M0VcdTA0MzJcdTA0M0VcdTA0NDFcdTA0NDJcdTA0M0RcdTA0M0VcdTA0MzkgXHUwNDNCXHUwNDM1XHUwNDNEXHUwNDQyXHUwNDRCLCBVUkwgXHUwNDQxXHUwNDMwXHUwNDM5XHUwNDQyXHUwNDMwIFx1MDQzOCBcdTA0M0RcdTA0MzBcdTA0MzZcdTA0M0NcdTA0MzhcdTA0NDJcdTA0MzUgXHUwNDNBXHUwNDNEXHUwNDNFXHUwNDNGXHUwNDNBXHUwNDQzICJcdTA0MjFcdTA0M0VcdTA0NDVcdTA0NDBcdTA0MzBcdTA0M0RcdTA0MzhcdTA0NDJcdTA0NEMiDQorcGxhbmV0R3JvdXBTdWJzLnN1YnRpdGxlLmFkZE1haW49XHUwNDIzXHUwNDNGXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDNCXHUwNDM1XHUwNDNEXHUwNDM4XHUwNDM1IFx1MDQzM1x1MDQzQlx1MDQzMFx1MDQzMlx1MDQzRFx1MDQ0Qlx1MDQzQyBcdTA0NDFcdTA0M0ZcdTA0MzhcdTA0NDFcdTA0M0FcdTA0M0VcdTA0M0MgXHUwNDNEXHUwNDNFXHUwNDMyXHUwNDNFXHUwNDQxXHUwNDQyXHUwNDNEXHUwNDRCXHUwNDQ1IFx1MDQzRlx1MDQzRVx1MDQzNFx1MDQzRlx1MDQzOFx1MDQ0MVx1MDQzRVx1MDQzQQ0KK3BsYW5ldEdyb3VwU3Vicy5wcm9tcHQuYWRkTWFpbj1cdTA0MThcdTA0NDFcdTA0M0ZcdTA0M0VcdTA0M0JcdTA0NENcdTA0MzdcdTA0NDNcdTA0MzlcdTA0NDJcdTA0MzUgXHUwNDREXHUwNDQyXHUwNDQzIFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzRFx1MDQzOFx1MDQ0Nlx1MDQ0MyBcdTA0MzRcdTA0M0JcdTA0NEYgXHUwNDM0XHUwNDNFXHUwNDMxXHUwNDMwXHUwNDMyXHUwNDNCXHUwNDM1XHUwNDNEXHUwNDM4XHUwNDRGIFx1MDQzOCBcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBcdTA0M0FcdTA0NDJcdTA0MzhcdTA0NDBcdTA0M0VcdTA0MzJcdTA0MzBcdTA0M0RcdTA0MzhcdTA0NEYgXHUwNDNGXHUwNDNFXHUwNDM0XHUwNDNGXHUwNDM4XHUwNDQxXHUwNDNFXHUwNDNBOiBcdTA0NDFcdTA0M0ZcdTA0MzhcdTA0NDFcdTA0M0VcdTA0M0EgXHUwNDNEXHUwNDNFXHUwNDMyXHUwNDNFXHUwNDQxXHUwNDQyXHUwNDNEXHUwNDRCXHUwNDQ1IFx1MDQzQlx1MDQzNVx1MDQzRFx1MDQ0MiBcdTA0M0RcdTA0MzAgXHUwNDMzXHUwNDNCXHUwNDMwXHUwNDMyXHUwNDNEXHUwNDNFXHUwNDM5IFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzRFx1MDQzOFx1MDQ0Nlx1MDQzNSBcdTA0MzBcdTA0MzNcdTA0NDBcdTA0MzVcdTA0MzNcdTA0MzBcdTA0NDJcdTA0M0VcdTA0NDBcdTA0MzAgUGxhbmV0LiBcdTA0MjdcdTA0NDJcdTA0M0VcdTA0MzFcdTA0NEIgXHUwNDM0XHUwNDNFXHUwNDMxXHUwNDMwXHUwNDMyXHUwNDM4XHUwNDQyXHUwNDRDIFx1MDQzRFx1MDQzRVx1MDQzMlx1MDQ0M1x1MDQ0RSBcdTA0M0ZcdTA0M0VcdTA0MzRcdTA0M0ZcdTA0MzhcdTA0NDFcdTA0M0FcdTA0NDMsIFx1MDQzMlx1MDQzMlx1MDQzNVx1MDQzNFx1MDQzOFx1MDQ0Mlx1MDQzNSBcdTA0M0RcdTA0MzBcdTA0MzdcdTA0MzJcdTA0MzBcdTA0M0RcdTA0MzhcdTA0MzUsIFVSTCBcdTA0M0RcdTA0M0VcdTA0MzJcdTA0M0VcdTA0NDFcdTA0NDJcdTA0M0RcdTA0M0VcdTA0MzkgXHUwNDNCXHUwNDM1XHUwNDNEXHUwNDQyXHUwNDRCLCBVUkwgXHUwNDQxXHUwNDMwXHUwNDM5XHUwNDQyXHUwNDMwIFx1MDQzOCBcdTA0M0RcdTA0MzBcdTA0MzZcdTA0M0NcdTA0MzhcdTA0NDJcdTA0MzUgXHUwNDNBXHUwNDNEXHUwNDNFXHUwNDNGXHUwNDNBXHUwNDQzICJcdTA0MjFcdTA0M0VcdTA0NDVcdTA0NDBcdTA0MzBcdTA0M0RcdTA0MzhcdTA0NDJcdTA0NEMiDQogDQotcGxhbmV0U3Vic2NyaXB0aW9ucy5leGlzdGluZ1RpdGxlPVx1MDQyMVx1MDQ0M1x1MDQ0OVx1MDQzNVx1MDQ0MVx1MDQ0Mlx1MDQzMlx1MDQ0M1x1MDQ0RVx1MDQ0OVx1MDQzOFx1MDQzNSBcdTA0M0ZcdTA0M0VcdTA0MzRcdTA0M0ZcdTA0MzhcdTA0NDFcdTA0M0FcdTA0MzgNCitwbGFuZXRHcm91cFN1YnMuZXhpc3RpbmdUaXRsZT1cdTA0MjFcdTA0NDNcdTA0NDlcdTA0MzVcdTA0NDFcdTA0NDJcdTA0MzJcdTA0NDNcdTA0NEVcdTA0NDlcdTA0MzhcdTA0MzUgXHUwNDNGXHUwNDNFXHUwNDM0XHUwNDNGXHUwNDM4XHUwNDQxXHUwNDNBXHUwNDM4DQogDQotcGxhbmV0U3Vic2NyaXB0aW9ucy5jb2x1bW4udGl0bGU9XHUwNDE3XHUwNDMwXHUwNDMzXHUwNDNFXHUwNDNCXHUwNDNFXHUwNDMyXHUwNDNFXHUwNDNBLCBcdTA0MURcdTA0MzBcdTA0MzdcdTA0MzJcdTA0MzBcdTA0M0RcdTA0MzhcdTA0MzUNCi1wbGFuZXRTdWJzY3JpcHRpb25zLmNvbHVtbi5mZWVkVXJsPVVSTCBcdTA0M0JcdTA0MzVcdTA0M0RcdTA0NDJcdTA0NEINCitwbGFuZXRHcm91cFN1YnMuY29sdW1uLnRpdGxlPVx1MDQxN1x1MDQzMFx1MDQzM1x1MDQzRVx1MDQzQlx1MDQzRVx1MDQzMlx1MDQzRVx1MDQzQSwgXHUwNDFEXHUwNDMwXHUwNDM3XHUwNDMyXHUwNDMwXHUwNDNEXHUwNDM4XHUwNDM1DQorcGxhbmV0R3JvdXBTdWJzLmNvbHVtbi5mZWVkVXJsPVVSTCBcdTA0M0JcdTA0MzVcdTA0M0RcdTA0NDJcdTA0NEINCiBwbGFuZXRTdWJzY3JpcHRpb24uZmVlZFVybD1VUkwgXHUwNDNEXHUwNDNFXHUwNDMyXHUwNDNFXHUwNDQxXHUwNDNEXHUwNDNFXHUwNDM5IFx1MDQzQlx1MDQzNVx1MDQzRFx1MDQ0Mlx1MDQ0Qg0KIA0KIHBsYW5ldFN1YnNjcmlwdGlvbi5zdWNjZXNzLmRlbGV0ZWQ9XHUwNDFGXHUwNDNFXHUwNDM0XHUwNDNGXHUwNDM4XHUwNDQxXHUwNDNBXHUwNDMwIFx1MDQ0M1x1MDQ0MVx1MDQzRlx1MDQzNVx1MDQ0OFx1MDQzRFx1MDQzRSBcdTA0NDNcdTA0MzRcdTA0MzBcdTA0M0JcdTA0MzVcdTA0M0RcdTA0MzANCkBAIC00ODQsNyArNDg0LDcgQEAKIA0KIHBsYW5ldFN1YnNjcmlwdGlvbi5lcnJvcj1cdTA0MTRcdTA0M0VcdTA0M0JcdTA0MzZcdTA0MzVcdTA0M0QgXHUwNDMxXHUwNDRCXHUwNDQyXHUwNDRDIFx1MDQzRVx1MDQzRlx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzQlx1MDQzNVx1MDQzRCBVUkwgXHUwNDNEXHUwNDNFXHUwNDMyXHUwNDNFXHUwNDQxXHUwNDQyXHUwNDNEXHUwNDNFXHUwNDM5IFx1MDQzQlx1MDQzNVx1MDQzRFx1MDQ0Mlx1MDQ0Qg0KIHBsYW5ldFN1YnNjcmlwdGlvbi5lcnJvci5mZWVkVXJsPVx1MDQyMlx1MDQ0MFx1MDQzNVx1MDQzMVx1MDQ0M1x1MDQzNVx1MDQ0Mlx1MDQ0MVx1MDQ0RiBVUkwgKFx1MDQzMFx1MDQzNFx1MDQ0MFx1MDQzNVx1MDQ0MSkgXHUwNDNEXHUwNDNFXHUwNDMyXHUwNDNFXHUwNDQxXHUwNDQyXHUwNDNEXHUwNDNFXHUwNDM5IFx1MDQzQlx1MDQzNVx1MDQzRFx1MDQ0Mlx1MDQ0Qg0KLXBsYW5ldFN1YnNjcmlwdGlvbnMuZXJyb3IuZHVyaW5nU2F2ZT1cdTA0MUZcdTA0NDBcdTA0M0VcdTA0MzRcdTA0NDNcdTA0MzFcdTA0M0JcdTA0MzhcdTA0NDBcdTA0M0VcdTA0MzJcdTA0MzBcdTA0NDJcdTA0NEMgXHUwNDNGXHUwNDNFXHUwNDM0XHUwNDNGXHUwNDM4XHUwNDQxXHUwNDNBXHUwNDQzPyB7MH0NCitwbGFuZXRHcm91cFN1YnMuZXJyb3IuZHVyaW5nU2F2ZT1cdTA0MUZcdTA0NDBcdTA0M0VcdTA0MzRcdTA0NDNcdTA0MzFcdTA0M0JcdTA0MzhcdTA0NDBcdTA0M0VcdTA0MzJcdTA0MzBcdTA0NDJcdTA0NEMgXHUwNDNGXHUwNDNFXHUwNDM0XHUwNDNGXHUwNDM4XHUwNDQxXHUwNDNBXHUwNDQzPyB7MH0NCiBwbGFuZXRTdWJzY3JpcHRpb24uZXJyb3IuZGVsZXRpbmc9XHUwNDFFXHUwNDQ4XHUwNDM4XHUwNDMxXHUwNDNBXHUwNDMwIFx1MDQ0M1x1MDQzNFx1MDQzMFx1MDQzQlx1MDQzNVx1MDQzRFx1MDQzOFx1MDQ0RiBcdTA0M0VcdTA0MzFcdTA0NEFcdTA0MzVcdTA0M0FcdTA0NDJcdTA0MzANCiANCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQbGFuZXRHcm91cHMuanNwDQpAQCAtNTM3LDcgKzUzNyw3IEBACiB0YWJiZWRtZW51LmFkbWluLnBpbmdUYXJnZXRzPVx1MDQxMFx1MDQzNFx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzMFx1MDQ0Mlx1MDQ0QiBcdTA0M0ZcdTA0MzhcdTA0M0RcdTA0MzNcdTA0MzANCiB0YWJiZWRtZW51LnBsYW5ldD1QbGFuZXQgQWRtaW4NCiB0YWJiZWRtZW51LmFkbWluLnBsYW5ldENvbmZpZz1cdTA0MUFcdTA0M0VcdTA0M0RcdTA0NDRcdTA0MzhcdTA0MzNcdTA0NDNcdTA0NDBcdTA0MzBcdTA0NDZcdTA0MzhcdTA0NEYNCi10YWJiZWRtZW51LmFkbWluLnBsYW5ldFN1YnNjcmlwdGlvbnM9XHUwNDFGXHUwNDNFXHUwNDM0XHUwNDNGXHUwNDM4XHUwNDQxXHUwNDNBXHUwNDM4DQordGFiYmVkbWVudS5hZG1pbi5wbGFuZXRHcm91cFN1YnM9XHUwNDFGXHUwNDNFXHUwNDM0XHUwNDNGXHUwNDM4XHUwNDQxXHUwNDNBXHUwNDM4DQogdGFiYmVkbWVudS5hZG1pbi5wbGFuZXRHcm91cHM9XHUwNDFGXHUwNDNFXHUwNDNCXHUwNDRDXHUwNDM3XHUwNDNFXHUwNDMyXHUwNDMwXHUwNDQyXHUwNDM1XHUwNDNCXHUwNDRDXHUwNDQxXHUwNDNBXHUwNDM4XHUwNDM1IFx1MDQzM1x1MDQ0MFx1MDQ0M1x1MDQzRlx1MDQzRlx1MDQ0Qg0KIA0KIA0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvQXBwbGljYXRpb25SZXNvdXJjZXNfemhfQ04ucHJvcGVydGllcyBiL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvQXBwbGljYXRpb25SZXNvdXJjZXNfemhfQ04ucHJvcGVydGllcwppbmRleCA0NzBhNDY4Li43N2M3ZWM4IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vcmVzb3VyY2VzL0FwcGxpY2F0aW9uUmVzb3VyY2VzX3poX0NOLnByb3BlcnRpZXMKKysrIGIvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9BcHBsaWNhdGlvblJlc291cmNlc196aF9DTi5wcm9wZXJ0aWVzCkBAIC0zNjksMTUgKzM2OSwxNSBAQAogcGxhbmV0U3Vic2NyaXB0aW9uLmZvdW5kRXhpc3Rpbmc9XHU1M0QxXHU3M0IwXHU1REYyXHU3RUNGXHU1QjU4XHU1NzI4XHU4QkEyXHU5NjA1IFt7MH1dIFx1RkYwQ1x1NjZGRlx1NjM2Mlx1NTQxNwogcGxhbmV0U3Vic2NyaXB0aW9uLnN1Y2Nlc3MuZGVsZXRlZD1cdThCQTJcdTk2MDVcdTYyMTBcdTUyOUZcdTUyMjBcdTk2NjQKIHBsYW5ldFN1YnNjcmlwdGlvbi5zdWNjZXNzLnNhdmVkPVx1OEJBMlx1OTYwNVx1NURGMlx1NEZERFx1NUI1OAotcGxhbmV0U3Vic2NyaXB0aW9ucy5jb2x1bW4uZmVlZFVybD1cdTY1QjBcdTk1RkJcdTc5Q0RcdTVCNTBVUkwKLXBsYW5ldFN1YnNjcmlwdGlvbnMuY29sdW1uLnRpdGxlPVx1NjgwN1x1OTg5OAotcGxhbmV0U3Vic2NyaXB0aW9ucy5lcnJvci5kdXJpbmdTYXZlPVx1NTkwRFx1NTIzNlx1OEJBMlx1OTYwNVx1RkYxRlx1RkYwRHswfQotcGxhbmV0U3Vic2NyaXB0aW9ucy5leGlzdGluZ1RpdGxlPVx1NUI1OFx1NTcyOFx1NzY4NFx1OEJBMlx1OTYwNQotcGxhbmV0U3Vic2NyaXB0aW9ucy5wcm9tcHQuYWRkPVx1NkRGQlx1NTJBMFx1NEUwMFx1NEUyQVx1NjVCMFx1NzY4NFx1OEJBMlx1OTYwNVx1NUY4OFx1N0I4MFx1NTM1NVx1RkYxQVx1OEY5M1x1NTE2NVx1NjgwN1x1OTg5OFx1MzAwMVx1NjVCMFx1OTVGQlx1NzlDRFx1NUI1MFVSTFx1NzEzNlx1NTQwRVx1NEZERFx1NUI1OFx1MzAwMgotcGxhbmV0U3Vic2NyaXB0aW9ucy5wcm9tcHQuYWRkTWFpbj1cdTU3MjhcdThGRDlcdTRFMkFcdTk4NzVcdTk3NjJcdTRFMkRcdTZERkJcdTUyQTBcdTMwMDFcdTdGMTZcdThGOTFcdThCQTJcdTk2MDVcdUZGMUFcdTY1QjBcdTk1RkJcdTc5Q0RcdTVCNTBcdTUyMTdcdTg4NjhcdTU3MjhcdTg4NENcdTY2MUZcdTY1QjBcdTk1RkJcdTgwNUFcdTU0MDhcdTU2NjhcdTk4NzVcdTk3NjJcdTRFNEJcdTRFMkRcdTMwMDJcdTZERkJcdTUyQTBcdTRFMDBcdTRFMkFcdTY1QjBcdThCQTJcdTk2MDVcdTVGODhcdTdCODBcdTUzNTVcdUZGMUFcdThGOTNcdTUxNjVcdTY4MDdcdTk4OThcdTMwMDFcdTY1QjBcdTk1RkJcdTc5Q0RcdTVCNTBVUkxcdTcxMzZcdTU0MEVcdTRGRERcdTVCNThcdTMwMDIKLXBsYW5ldFN1YnNjcmlwdGlvbnMuc3VidGl0bGUuYWRkPVx1N0JBMVx1NzQwNlx1N0ZBNFx1N0VDNCBbPGI+ezB9PC9iPl0gXHU3Njg0XHU4QkEyXHU5NjA1XHUzMDAyCi1wbGFuZXRTdWJzY3JpcHRpb25zLnN1YnRpdGxlLmFkZE1haW49XHU3QkExXHU3NDA2XHU0RTNCXHU2NUIwXHU5NUZCXHU4QkEyXHU5NjA1XHU1MjE3XHU4ODY4XHUzMDAyCi1wbGFuZXRTdWJzY3JpcHRpb25zLnRpdGxlPVx1OEJBMlx1OTYwNQorcGxhbmV0R3JvdXBTdWJzLmNvbHVtbi5mZWVkVXJsPVx1NjVCMFx1OTVGQlx1NzlDRFx1NUI1MFVSTAorcGxhbmV0R3JvdXBTdWJzLmNvbHVtbi50aXRsZT1cdTY4MDdcdTk4OTgKK3BsYW5ldEdyb3VwU3Vicy5lcnJvci5kdXJpbmdTYXZlPVx1NTkwRFx1NTIzNlx1OEJBMlx1OTYwNVx1RkYxRlx1RkYwRHswfQorcGxhbmV0R3JvdXBTdWJzLmV4aXN0aW5nVGl0bGU9XHU1QjU4XHU1NzI4XHU3Njg0XHU4QkEyXHU5NjA1CitwbGFuZXRHcm91cFN1YnMucHJvbXB0LmFkZD1cdTZERkJcdTUyQTBcdTRFMDBcdTRFMkFcdTY1QjBcdTc2ODRcdThCQTJcdTk2MDVcdTVGODhcdTdCODBcdTUzNTVcdUZGMUFcdThGOTNcdTUxNjVcdTY4MDdcdTk4OThcdTMwMDFcdTY1QjBcdTk1RkJcdTc5Q0RcdTVCNTBVUkxcdTcxMzZcdTU0MEVcdTRGRERcdTVCNThcdTMwMDIKK3BsYW5ldEdyb3VwU3Vicy5wcm9tcHQuYWRkTWFpbj1cdTU3MjhcdThGRDlcdTRFMkFcdTk4NzVcdTk3NjJcdTRFMkRcdTZERkJcdTUyQTBcdTMwMDFcdTdGMTZcdThGOTFcdThCQTJcdTk2MDVcdUZGMUFcdTY1QjBcdTk1RkJcdTc5Q0RcdTVCNTBcdTUyMTdcdTg4NjhcdTU3MjhcdTg4NENcdTY2MUZcdTY1QjBcdTk1RkJcdTgwNUFcdTU0MDhcdTU2NjhcdTk4NzVcdTk3NjJcdTRFNEJcdTRFMkRcdTMwMDJcdTZERkJcdTUyQTBcdTRFMDBcdTRFMkFcdTY1QjBcdThCQTJcdTk2MDVcdTVGODhcdTdCODBcdTUzNTVcdUZGMUFcdThGOTNcdTUxNjVcdTY4MDdcdTk4OThcdTMwMDFcdTY1QjBcdTk1RkJcdTc5Q0RcdTVCNTBVUkxcdTcxMzZcdTU0MEVcdTRGRERcdTVCNThcdTMwMDIKK3BsYW5ldEdyb3VwU3Vicy5zdWJ0aXRsZS5hZGQ9XHU3QkExXHU3NDA2XHU3RkE0XHU3RUM0IFs8Yj57MH08L2I+XSBcdTc2ODRcdThCQTJcdTk2MDVcdTMwMDIKK3BsYW5ldEdyb3VwU3Vicy5zdWJ0aXRsZS5hZGRNYWluPVx1N0JBMVx1NzQwNlx1NEUzQlx1NjVCMFx1OTVGQlx1OEJBMlx1OTYwNVx1NTIxN1x1ODg2OFx1MzAwMgorcGxhbmV0R3JvdXBTdWJzLnRpdGxlPVx1OEJBMlx1OTYwNQogdGFiYmVkbWVudS5hZG1pbj1cdTY3MERcdTUyQTFcdTU2NjhcdTdCQTFcdTc0MDYKIHRhYmJlZG1lbnUuYWRtaW4uY2FjaGVJbmZvPVx1N0YxM1x1NUI1OFx1NEZFMVx1NjA2RgogdGFiYmVkbWVudS5hZG1pbi5jb21tZW50TWFuYWdlbWVudD1cdThCQzRcdThCQkEKQEAgLTM4NSw3ICszODUsNyBAQAogdGFiYmVkbWVudS5hZG1pbi5waW5nVGFyZ2V0cz1QaW5nXHU3NkVFXHU2ODA3CiB0YWJiZWRtZW51LmFkbWluLnBsYW5ldENvbmZpZz1cdTkxNERcdTdGNkUKIHRhYmJlZG1lbnUuYWRtaW4ucGxhbmV0R3JvdXBzPVx1NUI5QVx1NTIzNlx1N0ZBNFx1N0VDNAotdGFiYmVkbWVudS5hZG1pbi5wbGFuZXRTdWJzY3JpcHRpb25zPVx1OEJBMlx1OTYwNQordGFiYmVkbWVudS5hZG1pbi5wbGFuZXRHcm91cFN1YnM9XHU4QkEyXHU5NjA1CiB0YWJiZWRtZW51LmFkbWluLnVzZXJBZG1pbj1cdTc1MjhcdTYyMzdcdTdCQTFcdTc0MDYKIHRhYmJlZG1lbnUuYm9va21hcmtzPVx1NEU2Nlx1N0I3RQogdGFiYmVkbWVudS5ib29rbWFya3MuYWxsRm9sZGVycz1cdTRFNjZcdTdCN0VcdTU5MzkKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nYmFjay54bWwgYi9hcHAvc3JjL21haW4vcmVzb3VyY2VzL2xvZ2JhY2sueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOTAwZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vcmVzb3VyY2VzL2xvZ2JhY2sueG1sCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8Y29uZmlndXJhdGlvbj4KKyAgICA8YXBwZW5kZXIgbmFtZT0iU1RET1VUIiBjbGFzcz0iY2gucW9zLmxvZ2JhY2suY29yZS5Db25zb2xlQXBwZW5kZXIiPgorICAgICAgICA8ZW5jb2Rlcj4KKyAgICAgICAgICAgIDxwYXR0ZXJuPiVke0hIOm1tOnNzLlNTU30gWyV0aHJlYWRdICUtNWxldmVsICVsb2dnZXJ7MzZ9IC0gJW1zZyVuCisgICAgICAgICAgICA8L3BhdHRlcm4+CisgICAgICAgIDwvZW5jb2Rlcj4KKyAgICA8L2FwcGVuZGVyPgorCisgICAgPHJvb3QgbGV2ZWw9IklORk8iPgorICAgICAgICA8YXBwZW5kZXItcmVmIHJlZj0iU1RET1VUIiAvPgorICAgIDwvcm9vdD4KKzwvY29uZmlndXJhdGlvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9jb25maWcvcm9sbGVyLnByb3BlcnRpZXMgYi9hcHAvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9jb25maWcvcm9sbGVyLnByb3BlcnRpZXMKaW5kZXggMTI1NTIwYy4uMWJlNmI2NCAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvY29uZmlnL3JvbGxlci5wcm9wZXJ0aWVzCisrKyBiL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2NvbmZpZy9yb2xsZXIucHJvcGVydGllcwpAQCAtMjA5LDcgKzIwOSw3IEBACiAKICMgU2V0IHRvIHRydWUgdG8gZW5hYmxlIHRoZSBQbGFuZXQgYWdncmVnYXRvci4gWW91IGFsc28gbmVlZCB0byBlbmFibGUgdGhlIAogIyBSZWZyZXNoUm9sbGVyUGxhbmV0VGFzayB0YXNrIGJlbG93IHRvIGdldCB0aGUgZmVlZCBmZXRjaGVyIHJ1bm5pbmcuCi1wbGFuZXQuYWdncmVnYXRvci5lbmFibGVkPWZhbHNlCitwbGFuZXQuYWdncmVnYXRvci5lbmFibGVkPXRydWUKIAogIyBQbGFuZXQgYmFja2VuZCBndWljZSBtb2R1bGUsIGN1c3RvbWl6ZWQgZm9yIHVzZSB3aXRoIFdlYmxvZ2dlcgogcGxhbmV0LmFnZ3JlZ2F0b3IuZ3VpY2UubW9kdWxlPVwKQEAgLTU1MCwxNCArNTUwLDE0IEBACiAjIFRoZSBsaXN0IG9mIGNvbmZpZ3VyZWQgV2VibG9nRW50cnlFZGl0b3JzIGF2YWlsYWJsZSB0byB1c2VycwogcGx1Z2lucy53ZWJsb2dFbnRyeUVkaXRvcnM9XAogb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLmNvcmUucGx1Z2lucy5UZXh0RWRpdG9yLFwKLW9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5jb3JlLnBsdWdpbnMuWGluaGFFZGl0b3IKK29yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5jb3JlLnBsdWdpbnMuU3VtbWVybm90ZQogCiAjIFRoZSAiaWQiIG9mIHRoZSBkZWZhdWx0IGVkaXRvciB0byB1c2UuIE5PVCB0aGUgY2xhc3MgbmFtZQotcGx1Z2lucy5kZWZhdWx0RWRpdG9yPWVkaXRvci10ZXh0LmpzcAorcGx1Z2lucy5kZWZhdWx0RWRpdG9yPWVkaXRvci1zdW1tZXJub3RlLmpzcAogCiAjIERlZmF1bHQgd2VibG9nIGVkaXRvcgogIyBUaGUgbGlzdCBvZiBhdmFpbGFibGUgZWRpdG9ycyBpcyBpbiByb2xsZXJSdW50aW1lQ29uZmlnRGVmcy54bWwKLW5ld3dlYmxvZy5lZGl0b3I9ZWRpdG9yLXRleHQuanNwCituZXd3ZWJsb2cuZWRpdG9yPWVkaXRvci1zdW1tZXJub3RlLmpzcAogCiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjI0LDkgKzYyNCw2IEBACiAjIHVuZGVyc2NvcmVzIGluc3RlYWQuCiB3ZWJsb2dlbnRyeS50aXRsZS51c2VVbmRlcnNjb3JlU2VwYXJhdG9yPWZhbHNlCiAKLSMgZWRpdG9yIHRoZW1lIHRvIGJlIHVzZWQgKGNvcnJlc3BvbmRzIHRvIGRpcmVjdG9yeSBuYW1lIHVuZGVyIC90aGVtZSkKLWVkaXRvci50aGVtZT10YW4KLQogIyBsaXN0IG9mIGxpbmtzIHRvIGluY2x1ZGUgaW4gcm9vdCBib29rbWFyayBmb2xkZXIgb2YgZWFjaCBuZXcgYmxvZwogIyBmb3JtYXQgaXMgbGlrZSBzbzogbGlua3RpdGxlMnxsaW5rdXJsMixsaW5rdGl0bGUyfGxpbmt1cmwyLGxpbmt0aXRsZTN8bGlua3VybDMKIG5ld3VzZXIuYmxvZ3JvbGw9XApAQCAtNjQzLDYgKzY0MCwxMCBAQAogIyBFY2xpcHNlTGluayBKUEEgcHJvcGVydGllcwogZWNsaXBzZWxpbmsucGVyc2lzdGVuY2UtY29udGV4dC5mbHVzaC1tb2RlPWF1dG8KIAorIyBMdWNlbmUgY29uZmlndXJhdGlvbnMKK2x1Y2VuZS5hbmFseXplci5jbGFzcz1vcmcuYXBhY2hlLmx1Y2VuZS5hbmFseXNpcy5zdGFuZGFyZC5TdGFuZGFyZEFuYWx5emVyCitsdWNlbmUuYW5hbHl6ZXIubWF4VG9rZW5Db3VudD0xMDAwCisKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBFeHBlcmltZW50YWwsIGRlcHJlY2F0ZWQgYW5kICJ1bmRvY3VtZW50ZWQiIHNldHRpbmdzCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2NvbmZpZy9ydW50aW1lQ29uZmlnRGVmcy54bWwgYi9hcHAvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9jb25maWcvcnVudGltZUNvbmZpZ0RlZnMueG1sCmluZGV4IDhjODRiYTYuLmQ4OTdiY2EgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2NvbmZpZy9ydW50aW1lQ29uZmlnRGVmcy54bWwKKysrIGIvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvY29uZmlnL3J1bnRpbWVDb25maWdEZWZzLnhtbApAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgICAgPC9wcm9wZXJ0eS1kZWY+CiAgICAgICA8cHJvcGVydHktZGVmICBuYW1lPSJ1c2Vycy5lZGl0b3IucGFnZXMiICBrZXk9ImNvbmZpZ0Zvcm0uZWRpdG9yUGFnZXMiPgogICAgICAgICAgPHR5cGU+dGV4dDwvdHlwZT4KLSAgICAgICAgIDxkZWZhdWx0LXZhbHVlPmVkaXRvci10ZXh0LmpzcCxlZGl0b3IteGluaGEuanNwPC9kZWZhdWx0LXZhbHVlPgorICAgICAgICAgPGRlZmF1bHQtdmFsdWU+ZWRpdG9yLXRleHQuanNwLGVkaXRvci1zdW1tZXJub3RlLmpzcDwvZGVmYXVsdC12YWx1ZT4KICAgICAgICAgIDxyb3dzPjM8L3Jvd3M+CiAgICAgICAgICA8Y29scz40MDwvY29scz4KICAgICAgIDwvcHJvcGVydHktZGVmPgpAQCAtMTM2LDExICsxMzYsMTEgQEAKICAgIDxkaXNwbGF5LWdyb3VwIG5hbWU9IndlYmxvZ1NldHRpbmdzIiBrZXk9ImNvbmZpZ0Zvcm0ud2VibG9nU2V0dGluZ3MiID4KICAgICAgICAKICAgICAgIDxwcm9wZXJ0eS1kZWYgIG5hbWU9InNpdGUucGFnZXMubWF4RW50cmllcyIgIGtleT0iY29uZmlnRm9ybS5wYWdlTWF4RW50cmllcyI+Ci0gICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+CisgICAgICAgICA8dHlwZT5pbnRlZ2VyPC90eXBlPgogICAgICAgICAgPGRlZmF1bHQtdmFsdWU+MzA8L2RlZmF1bHQtdmFsdWU+CiAgICAgICA8L3Byb3BlcnR5LWRlZj4KICAgICAgIDxwcm9wZXJ0eS1kZWYgIG5hbWU9InNpdGUubmV3c2ZlZWRzLmRlZmF1bHRFbnRyaWVzIiAga2V5PSJjb25maWdGb3JtLm5ld3NmZWVkTWF4RW50cmllcyI+Ci0gICAgICAgICA8dHlwZT5zdHJpbmc8L3R5cGU+CisgICAgICAgICA8dHlwZT5pbnRlZ2VyPC90eXBlPgogICAgICAgICAgPGRlZmF1bHQtdmFsdWU+MzA8L2RlZmF1bHQtdmFsdWU+CiAgICAgICA8L3Byb3BlcnR5LWRlZj4KICAgICAgIDxwcm9wZXJ0eS1kZWYgIG5hbWU9InNpdGUubmV3c2ZlZWRzLnN0eWxlZEZlZWRzIiAga2V5PSJjb25maWdGb3JtLnN0eWxlZEZlZWRzIj4KQEAgLTIxMCwxMSArMjEwLDExIEBACiAgICAgICAgICA8ZGVmYXVsdC12YWx1ZT5leGU8L2RlZmF1bHQtdmFsdWU+CiAgICAgICA8L3Byb3BlcnR5LWRlZj4KICAgICAgIDxwcm9wZXJ0eS1kZWYgIG5hbWU9InVwbG9hZHMuZmlsZS5tYXhzaXplIiAga2V5PSJjb25maWdGb3JtLm1heEZpbGVTaXplIj4KLSAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4KKyAgICAgICAgIDx0eXBlPmZsb2F0PC90eXBlPgogICAgICAgICAgPGRlZmF1bHQtdmFsdWU+Mi4wMDwvZGVmYXVsdC12YWx1ZT4KICAgICAgIDwvcHJvcGVydHktZGVmPgogICAgICAgPHByb3BlcnR5LWRlZiAgbmFtZT0idXBsb2Fkcy5kaXIubWF4c2l6ZSIgIGtleT0iY29uZmlnRm9ybS5tYXhEaXJTaXplIj4KLSAgICAgICAgIDx0eXBlPnN0cmluZzwvdHlwZT4KKyAgICAgICAgIDx0eXBlPmZsb2F0PC90eXBlPgogICAgICAgICAgPGRlZmF1bHQtdmFsdWU+MjAuMDA8L2RlZmF1bHQtdmFsdWU+CiAgICAgICA8L3Byb3BlcnR5LWRlZj4KIApkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9hZG1pbi9hZG1pbi1tZW51LnhtbCBiL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvYWRtaW4vYWRtaW4tbWVudS54bWwKaW5kZXggZDA5MGJkYy4uMmUxOGE4MSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi9hZG1pbi9hZG1pbi1tZW51LnhtbAorKysgYi9hcHAvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL2FkbWluL2FkbWluLW1lbnUueG1sCkBAIC00Miw4ICs0Miw4IEBACiAgICAgICAgICAgICAgICAgICAgbmFtZT0idGFiYmVkbWVudS5hZG1pbi5wbGFuZXRDb25maWciIC8+CiAgICAgICAgIAogICAgICAgICA8IS0tIGdsb2JhbFBlcm1zPSJhZG1pbiIgLS0+Ci0gICAgICAgIDxtZW51LWl0ZW0gYWN0aW9uPSJwbGFuZXRTdWJzY3JpcHRpb25zIgotICAgICAgICAgICAgICAgICAgIG5hbWU9InRhYmJlZG1lbnUuYWRtaW4ucGxhbmV0U3Vic2NyaXB0aW9ucyIgLz4KKyAgICAgICAgPG1lbnUtaXRlbSBhY3Rpb249InBsYW5ldEdyb3VwU3VicyIKKyAgICAgICAgICAgICAgICAgICBuYW1lPSJ0YWJiZWRtZW51LmFkbWluLnBsYW5ldEdyb3VwU3VicyIgLz4KICAgICAgICAgCiAgICAgICAgIDwhLS0gZ2xvYmFsUGVybXM9ImFkbWluIiAtLT4KICAgICAgICAgPG1lbnUtaXRlbSBhY3Rpb249InBsYW5ldEdyb3VwcyIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbCBiL2FwcC9zcmMvbWFpbi9yZXNvdXJjZXMvc3RydXRzLnhtbAppbmRleCBhOTEwOTAxLi5mMDNjNzQ1IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vcmVzb3VyY2VzL3N0cnV0cy54bWwKKysrIGIvYXBwL3NyYy9tYWluL3Jlc291cmNlcy9zdHJ1dHMueG1sCkBAIC0xLDQgKzEsMjEgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgorPCEtLQorICAgICAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91CisgICAgICAgIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSxWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgICAgICAgIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLHNvZnR3YXJlCisgICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcKKyAgICAgICAgY29weXJpZ2h0IGluIHRoaXMgd29yayxwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCisgICAgICAgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KKy0tPgogPCFET0NUWVBFIHN0cnV0cyBQVUJMSUMKICAgICAgICAgIi0vL0FwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLy9EVEQgU3RydXRzIENvbmZpZ3VyYXRpb24gMi41Ly9FTiIKICAgICAgICAgImh0dHA6Ly9zdHJ1dHMuYXBhY2hlLm9yZy9kdGRzL3N0cnV0cy0yLjUuZHRkIj4KQEAgLTU4LDcgKzc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImV4Y2x1ZGVNZXRob2RzIj5jYW5jZWw8L3BhcmFtPgogICAgICAgICAgICAgICAgIDwvaW50ZXJjZXB0b3ItcmVmPgogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIDwhLS0gdmFsaWRhdGlvbiBpbnRlcmNlcHRvcnMsIE1VU1QgY29tZSBhZnRlciBvdXIgY3VzdG9tIGludGVyY2VwdG9ycyAtLT4KKyAgICAgICAgICAgICAgICA8IS0tIHZhbGlkYXRpb24gaW50ZXJjZXB0b3JzLE1VU1QgY29tZSBhZnRlciBvdXIgY3VzdG9tIGludGVyY2VwdG9ycyAtLT4KICAgICAgICAgICAgICAgICA8aW50ZXJjZXB0b3ItcmVmIG5hbWU9InZhbGlkYXRpb24iPgogICAgICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iZXhjbHVkZU1ldGhvZHMiPmlucHV0LGJhY2ssY2FuY2VsLGJyb3dzZTwvcGFyYW0+CiAgICAgICAgICAgICAgICAgPC9pbnRlcmNlcHRvci1yZWY+CkBAIC03NywxMyArOTQsNiBAQAogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJhY2Nlc3MtZGVuaWVkIiB0eXBlPSJ0aWxlcyI+LmRlbmllZDwvcmVzdWx0PgogICAgICAgICA8L2dsb2JhbC1yZXN1bHRzPgogCi0gICAgICAgIDxnbG9iYWwtYWxsb3dlZC1tZXRob2RzPgotICAgICAgICAgICAgYWNjZXB0LAotICAgICAgICAgICAgYWN0aXZhdGUsCi0gICAgICAgICAgICBkZWNsaW5lLAotICAgICAgICAgICAgZXhlY3V0ZQotICAgICAgICA8L2dsb2JhbC1hbGxvd2VkLW1ldGhvZHM+Ci0KICAgICAgICAgPCEtLSBTaW1wbGUgYWN0aW9ucyB3aGljaCBiYXNpY2FsbHkganVzdCByZXBsYWNlIHRoZSBnbG9iYWwtZm9yd2FyZHMgZnJvbQogICAgICAgICAgICAgIHRoZSBvbGQgc3RydXRzIDEgY29uZmlnLiAgdGhpcyBpcyB0aGUgb25seSB3YXkgdG8gZG8gaXQgaW4gc3RydXRzIDIgLS0+CiAgICAgICAgIDxhY3Rpb24gbmFtZT0iaG9tZSI+CkBAIC0xMDIsMTEgKzExMiwxMyBAQAogICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkuc3RydXRzMi5jb3JlLlNldHVwIj4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0ic3VjY2VzcyIgdHlwZT0idGlsZXMiPi5TZXR1cDwvcmVzdWx0PgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJob21lIiB0eXBlPSJyZWRpcmVjdEFjdGlvbiI+aG9tZTwvcmVzdWx0PgorICAgICAgICAgICAgPGFsbG93ZWQtbWV0aG9kcz5hY3RpdmF0ZSxleGVjdXRlLHNhdmU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgPGFjdGlvbiBuYW1lPSJsb2dpbiIKICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuY29yZS5Mb2dpbiI+CiAgICAgICAgICAgICA8cmVzdWx0IHR5cGU9InRpbGVzIj4uTG9naW48L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZTwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KICAgICAgICAgCiAgICAgICAgIDxhY3Rpb24gbmFtZT0icmVnaXN0ZXIiCkBAIC0xMTQsMjMgKzEyNiwyNyBAQAogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJpbnB1dCIgdHlwZT0idGlsZXMiPi5SZWdpc3RlcjwvcmVzdWx0PgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJkaXNhYmxlZCIgdHlwZT0idGlsZXMiPi5HZW5lcmljRXJyb3I8L3Jlc3VsdD4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0ic3VjY2VzcyIgdHlwZT0idGlsZXMiPi5XZWxjb21lPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmFjdGl2YXRlLGV4ZWN1dGUsc2F2ZTwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KICAgICAgICAgCiAgICAgICAgIDxhY3Rpb24gbmFtZT0icHJvZmlsZSIKICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuY29yZS5Qcm9maWxlIj4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iaW5wdXQiIHR5cGU9InRpbGVzIj4uUHJvZmlsZTwvcmVzdWx0PgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJjYW5jZWwiIHR5cGU9InJlZGlyZWN0QWN0aW9uIj5tZW51PC9yZXN1bHQ+Ci0gICAgICAgICAgICA8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiIHR5cGU9InRpbGVzIj4uUHJvZmlsZTwvcmVzdWx0PgorICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJzdWNjZXNzIiB0eXBlPSJ0aWxlcyI+Lk1haW5NZW51PC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmV4ZWN1dGUsc2F2ZTwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KIAogICAgICAgICA8YWN0aW9uIG5hbWU9Im9hdXRoS2V5cyIKICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuY29yZS5PQXV0aEtleXMiPgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJzdWNjZXNzIiB0eXBlPSJ0aWxlcyI+Lk9BdXRoS2V5czwvcmVzdWx0PgorICAgICAgICAgICAgPGFsbG93ZWQtbWV0aG9kcz5leGVjdXRlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogCiAgICAgICAgIDxhY3Rpb24gbmFtZT0ib2F1dGhBdXRob3JpemUiCiAgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLmNvcmUuT0F1dGhBdXRob3JpemUiPgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJzdWNjZXNzIiB0eXBlPSJ0aWxlcyI+Lk9BdXRoQXV0aG9yaXplPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmV4ZWN1dGU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+CiAKICAgICAgICAgPGFjdGlvbiBuYW1lPSJjcmVhdGVXZWJsb2ciCkBAIC0xMzgsMTEgKzE1NCwxMyBAQAogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJpbnB1dCIgdHlwZT0idGlsZXMiPi5DcmVhdGVXZWJsb2c8L3Jlc3VsdD4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iZGlzYWJsZWQiIHR5cGU9InRpbGVzIj4uR2VuZXJpY0Vycm9yPC9yZXN1bHQ+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiIHR5cGU9ImNoYWluIj5tZW51PC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmNhbmNlbCxleGVjdXRlLHNhdmU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+CiAgICAgICAgIAogICAgICAgICA8YWN0aW9uIG5hbWU9Im1lbnUiCiAgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLmNvcmUuTWFpbk1lbnUiPgogICAgICAgICAgICAgPHJlc3VsdCB0eXBlPSJ0aWxlcyI+Lk1haW5NZW51PC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmFjY2VwdCxkZWNsaW5lLGV4ZWN1dGU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+CiAKICAgICA8L3BhY2thZ2U+CkBAIC0xNjksNiArMTg3LDcgQEAKICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWN0aW9uTmFtZSI+aG9tZTwvcGFyYW0+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im5hbWVzcGFjZSI+L3JvbGxlci11aTwvcGFyYW0+CiAgICAgICAgICAgICA8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZSxjcmVhdGUsdXBncmFkZSxib290c3RyYXA8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+CiAgICAgICAgICAgICAKICAgICA8L3BhY2thZ2U+CkBAIC0xNzcsMjMgKzE5NiwxMSBAQAogICAgIDwhLS0gV2VibG9nZ2VyIEFkbWluIFVJIChpbmNsdWRlcyBwbGFuZXQpIC0tPgogICAgIDxwYWNrYWdlIG5hbWU9IndlYmxvZ2dlci1hZG1pbiIgbmFtZXNwYWNlPSIvcm9sbGVyLXVpL2FkbWluIiBleHRlbmRzPSJ3ZWJsb2dnZXIiID4KIAotICAgICAgICA8Z2xvYmFsLWFsbG93ZWQtbWV0aG9kcz4KLSAgICAgICAgICAgIGNsZWFyLAotICAgICAgICAgICAgZGlzYWJsZSwKLSAgICAgICAgICAgIGRlbGV0ZSwKLSAgICAgICAgICAgIGRlbGV0ZUNvbmZpcm0sCi0gICAgICAgICAgICBlbmFibGUsCi0gICAgICAgICAgICBleGVjdXRlLAotICAgICAgICAgICAgZmlyc3RTYXZlLAotICAgICAgICAgICAgc2F2ZSwKLSAgICAgICAgICAgIHF1ZXJ5LAotICAgICAgICAgICAgZGVsZXRlLAotICAgICAgICAgICAgdXBkYXRlCi0gICAgICAgIDwvZ2xvYmFsLWFsbG93ZWQtbWV0aG9kcz4KLSAgICAgICAgCiAgICAgICAgIDxhY3Rpb24gbmFtZT0iZ2xvYmFsQ29uZmlnIgogICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkuc3RydXRzMi5hZG1pbi5HbG9iYWxDb25maWciPgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJzdWNjZXNzIiB0eXBlPSJ0aWxlcyI+Lkdsb2JhbENvbmZpZzwvcmVzdWx0PgorICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJlcnJvciIgdHlwZT0idGlsZXMiPi5HbG9iYWxDb25maWc8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZSxzYXZlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogICAgICAgICAgICAgICAgCiAgICAgICAgIDxhY3Rpb24gbmFtZT0idXNlckFkbWluIgpAQCAtMjAxLDYgKzIwOCwxMSBAQAogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJzdWNjZXNzIiB0eXBlPSJ0aWxlcyI+LlVzZXJBZG1pbjwvcmVzdWx0PgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJlcnJvciIgdHlwZT0idGlsZXMiPi5Vc2VyQWRtaW48L3Jlc3VsdD4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iaW5wdXQiIHR5cGU9InRpbGVzIj4uVXNlckFkbWluPC9yZXN1bHQ+CisgICAgICAgICAgICA8cmVzdWx0IG5hbWU9ImVkaXQiIHR5cGU9InJlZGlyZWN0QWN0aW9uIj4KKyAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWN0aW9uTmFtZSI+bW9kaWZ5VXNlcjwvcGFyYW0+CisgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImJlYW4udXNlck5hbWUiPiR7YmVhbi51c2VyTmFtZX08L3BhcmFtPgorICAgICAgICAgICAgPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmVkaXQsZXhlY3V0ZTwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KICAgICAgICAgCiAgICAgICAgIDxhY3Rpb24gbmFtZT0iY3JlYXRlVXNlciIKQEAgLTIxMiw2ICsyMjQsNyBAQAogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhY3Rpb25OYW1lIj5tb2RpZnlVc2VyIWZpcnN0U2F2ZTwvcGFyYW0+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImJlYW4uaWQiPiR7YmVhbi5pZH08L3BhcmFtPgogICAgICAgICAgICAgPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmV4ZWN1dGUsZmlyc3RTYXZlLHNhdmU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+CiAKICAgICAgICAgPGFjdGlvbiBuYW1lPSJtb2RpZnlVc2VyIgpAQCAtMjIzLDE3ICsyMzYsMjAgQEAKICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iY2FuY2VsIiB0eXBlPSJyZWRpcmVjdEFjdGlvbiI+CiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFjdGlvbk5hbWUiPnVzZXJBZG1pbjwvcGFyYW0+CiAgICAgICAgICAgICA8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZSxmaXJzdFNhdmUsc2F2ZTwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KICAgICAgICAgCiAgICAgICAgIDxhY3Rpb24gbmFtZT0iZ2xvYmFsQ29tbWVudE1hbmFnZW1lbnQiCiAgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLmFkbWluLkdsb2JhbENvbW1lbnRNYW5hZ2VtZW50Ij4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0ibGlzdCIgdHlwZT0idGlsZXMiPi5HbG9iYWxDb21tZW50TWFuYWdlbWVudDwvcmVzdWx0PgorICAgICAgICAgICAgPGFsbG93ZWQtbWV0aG9kcz5leGVjdXRlLGRlbGV0ZSxxdWVyeSx1cGRhdGU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+CiAgICAgICAgIAogICAgICAgICA8YWN0aW9uIG5hbWU9ImNvbW1vblBpbmdUYXJnZXRzIgogICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkuc3RydXRzMi5hZG1pbi5QaW5nVGFyZ2V0cyI+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9Imxpc3QiIHR5cGU9InRpbGVzIj4uUGluZ1RhcmdldHM8L3Jlc3VsdD4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iY29uZmlybSIgdHlwZT0idGlsZXMiPi5QaW5nVGFyZ2V0Q29uZmlybTwvcmVzdWx0PgorICAgICAgICAgICAgPGFsbG93ZWQtbWV0aG9kcz5kZWxldGUsZGVsZXRlQ29uZmlybSxkaXNhYmxlLGVuYWJsZSxleGVjdXRlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogICAgICAgICAKICAgICAgICAgPGFjdGlvbiBuYW1lPSJjb21tb25QaW5nVGFyZ2V0QWRkIgpAQCAtMjQyLDYgKzI1OCw3IEBACiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0icGFnZVRpdGxlIj5waW5nVGFyZ2V0LmFkZFRhcmdldDwvcGFyYW0+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9ImlucHV0IiB0eXBlPSJ0aWxlcyI+LlBpbmdUYXJnZXRFZGl0PC9yZXN1bHQ+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiIHR5cGU9ImNoYWluIj5jb21tb25QaW5nVGFyZ2V0czwvcmVzdWx0PgorICAgICAgICAgICAgPGFsbG93ZWQtbWV0aG9kcz5leGVjdXRlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogICAgICAgICAKICAgICAgICAgPGFjdGlvbiBuYW1lPSJjb21tb25QaW5nVGFyZ2V0RWRpdCIKQEAgLTI1MSwyNyArMjY4LDMxIEBACiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9ImlucHV0IiB0eXBlPSJ0aWxlcyI+LlBpbmdUYXJnZXRFZGl0PC9yZXN1bHQ+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiIHR5cGU9ImNoYWluIj5jb21tb25QaW5nVGFyZ2V0czwvcmVzdWx0PgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJlcnJvciIgdHlwZT0iY2hhaW4iPmNvbW1vblBpbmdUYXJnZXRzPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmV4ZWN1dGU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+CiAgICAgICAgIAogICAgICAgICA8YWN0aW9uIG5hbWU9ImNhY2hlSW5mbyIKICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuYWRtaW4uQ2FjaGVJbmZvIj4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0ic3VjY2VzcyIgdHlwZT0idGlsZXMiPi5DYWNoZUluZm88L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZSxjbGVhcjwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KLSAgICAgICAgCi0gICAgICAgIAorCiAgICAgICAgIDxhY3Rpb24gbmFtZT0icGxhbmV0Q29uZmlnIgogICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucGxhbmV0LnVpLlBsYW5ldENvbmZpZyI+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9ImlucHV0IiB0eXBlPSJ0aWxlcyI+LlBsYW5ldENvbmZpZzwvcmVzdWx0PgorICAgICAgICAgICAgPGFsbG93ZWQtbWV0aG9kcz5leGVjdXRlLHNhdmU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+CiAgICAgICAgIAotICAgICAgICA8YWN0aW9uIG5hbWU9InBsYW5ldFN1YnNjcmlwdGlvbnMiCi0gICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wbGFuZXQudWkuUGxhbmV0U3Vic2NyaXB0aW9ucyI+Ci0gICAgICAgICAgICA8cmVzdWx0IG5hbWU9Imxpc3QiIHR5cGU9InRpbGVzIj4uUGxhbmV0U3Vic2NyaXB0aW9uczwvcmVzdWx0PgorICAgICAgICA8YWN0aW9uIG5hbWU9InBsYW5ldEdyb3VwU3VicyIKKyAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBsYW5ldC51aS5QbGFuZXRHcm91cFN1YnMiPgorICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJsaXN0IiB0eXBlPSJ0aWxlcyI+LlBsYW5ldEdyb3VwU3ViczwvcmVzdWx0PgorICAgICAgICAgICAgPGFsbG93ZWQtbWV0aG9kcz5leGVjdXRlLGRlbGV0ZVN1YnNjcmlwdGlvbixzYXZlR3JvdXAsc2F2ZVN1YnNjcmlwdGlvbjwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KICAgICAgICAgCiAgICAgICAgIDxhY3Rpb24gbmFtZT0icGxhbmV0R3JvdXBzIgogICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucGxhbmV0LnVpLlBsYW5ldEdyb3VwcyI+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9Imxpc3QiIHR5cGU9InRpbGVzIj4uUGxhbmV0R3JvdXBzPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmRlbGV0ZSxleGVjdXRlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogICAgIDwvcGFja2FnZT4KICAgICAKQEAgLTI3OSwzNyArMzAwLDYgQEAKICAgICA8IS0tIFdlYmxvZ2dlciBBdXRob3JpbmcgVUkgLS0+CiAgICAgPHBhY2thZ2UgbmFtZT0id2VibG9nZ2VyLWF1dGhvcmluZyIgbmFtZXNwYWNlPSIvcm9sbGVyLXVpL2F1dGhvcmluZyIgZXh0ZW5kcz0id2VibG9nZ2VyIiA+CiAKLSAgICAgICAgPGdsb2JhbC1hbGxvd2VkLW1ldGhvZHM+Ci0gICAgICAgICAgICBhZGQsCi0gICAgICAgICAgICBjYW5jZWwsCi0gICAgICAgICAgICBjcmVhdGVOZXdEaXJlY3RvcnksCi0gICAgICAgICAgICBleGVjdXRlLAotICAgICAgICAgICAgZGVsZXRlLAotICAgICAgICAgICAgZGVsZXRlQ29uZmlybSwKLSAgICAgICAgICAgIGRlbGV0ZUZvbGRlciwKLSAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkLAotICAgICAgICAgICAgZGlzYWJsZSwKLSAgICAgICAgICAgIGVuYWJsZSwKLSAgICAgICAgICAgIGVudHJ5QWRkLAotICAgICAgICAgICAgZW50cnlFZGl0LAotICAgICAgICAgICAgZmlyc3RTYXZlLAotICAgICAgICAgICAgZm9sZGVyQ3JlYXRlZCwKLSAgICAgICAgICAgIGZsdXNoQ2FjaGUsCi0gICAgICAgICAgICBpbmNsdWRlSW5HYWxsZXJ5LAotICAgICAgICAgICAgbW92ZVNlbGVjdGVkLAotICAgICAgICAgICAgcGluZ05vdywKLSAgICAgICAgICAgIHB1Ymxpc2gsCi0gICAgICAgICAgICBxdWVyeSwKLSAgICAgICAgICAgIHJlbW92ZSwKLSAgICAgICAgICAgIHJldmVydCwKLSAgICAgICAgICAgIHJlc2V0LAotICAgICAgICAgICAgc2F2ZSwKLSAgICAgICAgICAgIHNhdmVEcmFmdCwKLSAgICAgICAgICAgIHNlYXJjaCwKLSAgICAgICAgICAgIHVwZGF0ZSwKLSAgICAgICAgICAgIHZpZXcKLSAgICAgICAgPC9nbG9iYWwtYWxsb3dlZC1tZXRob2RzPgotCiAgICAgICAgIDxhY3Rpb24gbmFtZT0ibWVkaWFGaWxlQWRkIgogICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkuc3RydXRzMi5lZGl0b3IuTWVkaWFGaWxlQWRkIj4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iaW5wdXQiIHR5cGU9InRpbGVzIj4uTWVkaWFGaWxlQWRkPC9yZXN1bHQ+CkBAIC0zMTksMTIgKzMwOSwxNCBAQAogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhY3Rpb25OYW1lIj5tZWRpYUZpbGVWaWV3PC9wYXJhbT4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2VibG9nIj4ke3dlYmxvZ308L3BhcmFtPgogICAgICAgICAgICAgPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmV4ZWN1dGUsc2F2ZTwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KIAogICAgICAgICA8YWN0aW9uIG5hbWU9Im1lZGlhRmlsZUVkaXQiCiAgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLmVkaXRvci5NZWRpYUZpbGVFZGl0Ij4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iaW5wdXQiIHR5cGU9InRpbGVzIj4uTWVkaWFGaWxlRWRpdDwvcmVzdWx0PgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJzdWNjZXNzIiB0eXBlPSJ0aWxlcyI+Lk1lZGlhRmlsZUVkaXRTdWNjZXNzPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmV4ZWN1dGUsc2F2ZTwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KIAogICAgICAgICA8YWN0aW9uIG5hbWU9Im1lZGlhRmlsZUFkZEV4dGVybmFsSW5jbHVkZSIKQEAgLTMzMiwyMiArMzI0LDI4IEBACiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9ImlucHV0IiB0eXBlPSJ0aWxlcyI+Lk1lZGlhRmlsZUFkZEV4dGVybmFsSW5jbHVkZTwvcmVzdWx0PgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJzdWNjZXNzIiB0eXBlPSJ0aWxlcyI+Lk1lZGlhRmlsZUFkZEV4dGVybmFsSW5jbHVkZTwvcmVzdWx0PgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJlcnJvciIgdHlwZT0idGlsZXMiPi5NZWRpYUZpbGVBZGRFeHRlcm5hbEluY2x1ZGU8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZSxzYXZlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogCiAJICAgIDxhY3Rpb24gbmFtZT0ibWVkaWFGaWxlVmlldyIKICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuZWRpdG9yLk1lZGlhRmlsZVZpZXciPgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJzdWNjZXNzIiB0eXBlPSJ0aWxlcyI+Lk1lZGlhRmlsZVZpZXc8L3Jlc3VsdD4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0ic3VjY2Vzcy5qc29uIiB0eXBlPSJkaXNwYXRjaGVyIj4vV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVWaWV3TGlnaHQuanNwPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPgorICAgICAgICAgICAgICAgIGRlbGV0ZSxleGVjdXRlLGNyZWF0ZU5ld0RpcmVjdG9yeSxkZWxldGVGb2xkZXIsZGVsZXRlU2VsZWN0ZWQsZmV0Y2hEaXJlY3RvcnlDb250ZW50TGlnaHQsaW5jbHVkZUluR2FsbGVyeSxtb3ZlU2VsZWN0ZWQsc2VhcmNoLHZpZXcKKyAgICAgICAgICAgIDwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KIAogCSAgICA8YWN0aW9uIG5hbWU9Im1lZGlhRmlsZUltYWdlRGltIgogICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkuc3RydXRzMi5lZGl0b3IuTWVkaWFGaWxlSW1hZ2VEaW0iPgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJzdWNjZXNzIiB0eXBlPSJ0aWxlcyI+Lk1lZGlhRmlsZUltYWdlRGltZW5zaW9uPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmV4ZWN1dGU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+CiAKICAgICAgICAgPGFjdGlvbiBuYW1lPSJlbnRyeUFkZFdpdGhNZWRpYUZpbGUiCiAgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLmVkaXRvci5FbnRyeUFkZFdpdGhNZWRpYUZpbGUiPgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJzdWNjZXNzIiB0eXBlPSJjaGFpbiI+ZW50cnlBZGQ8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZTwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KIAogICAgICAgICA8YWN0aW9uIG5hbWU9ImVudHJ5QWRkIgpAQCAtMzYwLDYgKzM1OCw3IEBACiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmxvZyI+JHt3ZWJsb2d9PC9wYXJhbT4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYmVhbi5pZCI+JHtiZWFuLmlkfTwvcGFyYW0+CiAgICAgICAgICAgICA8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZSxmaXJzdFNhdmUscHVibGlzaCxzYXZlRHJhZnQsdHJhY2tiYWNrPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogCiAgICAgICAgIDxhY3Rpb24gbmFtZT0iZW50cnlFZGl0IgpAQCAtMzcxLDYgKzM3MCw3IEBACiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFjdGlvbk5hbWUiPm1lbnU8L3BhcmFtPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJuYW1lc3BhY2UiPi9yb2xsZXItdWk8L3BhcmFtPgogICAgICAgICAgICAgPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmV4ZWN1dGUsZmlyc3RTYXZlLHB1Ymxpc2gsc2F2ZURyYWZ0LHRyYWNrYmFjazwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KICAgICAgICAgCiAgICAgICAgIDxhY3Rpb24gbmFtZT0iZW50cnlSZW1vdmUiCkBAIC0zODIsMTAgKzM4MiwxMSBAQAogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJuYW1lc3BhY2UiPi9yb2xsZXItdWk8L3BhcmFtPgogICAgICAgICAgICAgPC9yZXN1bHQ+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiIHR5cGU9ImNoYWluIj5lbnRyeUFkZDwvcmVzdWx0PgorICAgICAgICAgICAgPGFsbG93ZWQtbWV0aG9kcz5leGVjdXRlLHJlbW92ZTwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KIAotICAgICAgICA8IS0tIEJlbG93IGFjdGl2YXRlZCBieSBFbnRyaWVzLmpzcCBhbmQgRW50cnlSZW1vdmUuanNwLCBrZXB0IHNlcGFyYXRlIGZyb20KLSAgICAgICAgZW50cnlSZW1vdmUgYWJvdmUgYXMgcmV0dXJuIHBhZ2VzIGFyZSBkaWZmZXJlbnQsIGJvdGggaW4gdGhlIGNvbmZpcm0gZGVsZXRlCisgICAgICAgIDwhLS0gQmVsb3cgYWN0aXZhdGVkIGJ5IEVudHJpZXMuanNwIGFuZCBFbnRyeVJlbW92ZS5qc3Asa2VwdCBzZXBhcmF0ZSBmcm9tCisgICAgICAgIGVudHJ5UmVtb3ZlIGFib3ZlIGFzIHJldHVybiBwYWdlcyBhcmUgZGlmZmVyZW50LGJvdGggaW4gdGhlIGNvbmZpcm0gZGVsZXRlCiAgICAgICAgIGFuZCBjYW5jZWwgZGVsZXRlIHNjZW5hcmlvcy4KIAogICAgICAgICBOb3RlIHRoZSBkaWZmZXJlbnQgYWN0aW9uTmFtZSBwYXJhbWV0ZXJzLiAgVGhlIGFjdGlvbk5hbWUgaXMgdXNlZCB0byBkZXRlcm1pbmUKQEAgLTQwMywyMyArNDA0LDI3IEBACiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9Im5hbWVzcGFjZSI+L3JvbGxlci11aTwvcGFyYW0+CiAgICAgICAgICAgICA8L3Jlc3VsdD4KICAgICAgICAgICA8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiIHR5cGU9ImNoYWluIj5lbnRyaWVzPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmV4ZWN1dGUscmVtb3ZlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogCiAgICAgICAgIDxhY3Rpb24gbmFtZT0iZW50cmllcyIKICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuZWRpdG9yLkVudHJpZXMiPgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJsaXN0IiB0eXBlPSJ0aWxlcyI+LkVudHJpZXM8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZTwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgPGFjdGlvbiBuYW1lPSJjb21tZW50cyIKICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuZWRpdG9yLkNvbW1lbnRzIj4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0ibGlzdCIgdHlwZT0idGlsZXMiPi5Db21tZW50czwvcmVzdWx0PgorICAgICAgICAgICAgPGFsbG93ZWQtbWV0aG9kcz5kZWxldGUsZXhlY3V0ZSxxdWVyeSx1cGRhdGU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICAgIAorCiAgICAgICAgIDxhY3Rpb24gbmFtZT0iY2F0ZWdvcmllcyIKICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuZWRpdG9yLkNhdGVnb3JpZXMiPgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJsaXN0IiB0eXBlPSJ0aWxlcyI+LkNhdGVnb3JpZXM8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZSxtb3ZlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAKKwogICAgICAgICA8YWN0aW9uIG5hbWU9ImNhdGVnb3J5QWRkIgogICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkuc3RydXRzMi5lZGl0b3IuQ2F0ZWdvcnlFZGl0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhY3Rpb25OYW1lIj5jYXRlZ29yeUFkZDwvcGFyYW0+CkBAIC00MjcsOCArNDMyLDkgQEAKICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iaW5wdXQiIHR5cGU9InRpbGVzIj4uQ2F0ZWdvcnlFZGl0PC9yZXN1bHQ+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiIHR5cGU9ImNoYWluIj5jYXRlZ29yaWVzPC9yZXN1bHQ+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9ImVycm9yIiB0eXBlPSJjaGFpbiI+Y2F0ZWdvcmllczwvcmVzdWx0PgorICAgICAgICAgICAgPGFsbG93ZWQtbWV0aG9kcz5leGVjdXRlLHNhdmU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICAgIAorCiAgICAgICAgIDxhY3Rpb24gbmFtZT0iY2F0ZWdvcnlFZGl0IgogICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkuc3RydXRzMi5lZGl0b3IuQ2F0ZWdvcnlFZGl0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhY3Rpb25OYW1lIj5jYXRlZ29yeUVkaXQ8L3BhcmFtPgpAQCAtNDM5LDYgKzQ0NSw3IEBACiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFjdGlvbk5hbWUiPmNhdGVnb3JpZXM8L3BhcmFtPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJsb2ciPiR7d2VibG9nfTwvcGFyYW0+CiAgICAgICAgICAgICA8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZSxzYXZlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogCiAgICAgICAgIDxhY3Rpb24gbmFtZT0iY2F0ZWdvcnlSZW1vdmUiCkBAIC00NDksMTEgKzQ1NiwxMyBAQAogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJsb2ciPiR7d2VibG9nfTwvcGFyYW0+CiAgICAgICAgICAgICA8L3Jlc3VsdD4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0ic3VjY2VzcyIgdHlwZT0iY2hhaW4iPmNhdGVnb3JpZXM8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZSxyZW1vdmU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICAgIAorCiAgICAgICAgIDxhY3Rpb24gbmFtZT0iYm9va21hcmtzIgogICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkuc3RydXRzMi5lZGl0b3IuQm9va21hcmtzIj4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0ibGlzdCIgdHlwZT0idGlsZXMiPi5Cb29rbWFya3M8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZGVsZXRlLGRlbGV0ZUZvbGRlcixleGVjdXRlLGZvbGRlckNyZWF0ZWQsbW92ZSx2aWV3PC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogCiAgICAgICAgIDxhY3Rpb24gbmFtZT0iYm9va21hcmtBZGQiCkBAIC00NjMsOCArNDcyLDkgQEAKICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iaW5wdXQiIHR5cGU9InRpbGVzIj4uQm9va21hcmtFZGl0PC9yZXN1bHQ+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiIHR5cGU9ImNoYWluIj5ib29rbWFya3M8L3Jlc3VsdD4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iZXJyb3IiIHR5cGU9ImNoYWluIj5ib29rbWFya3M8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZSxzYXZlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAKKwogICAgICAgICA8YWN0aW9uIG5hbWU9ImJvb2ttYXJrRWRpdCIKICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuZWRpdG9yLkJvb2ttYXJrRWRpdCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0iYWN0aW9uTmFtZSI+Ym9va21hcmtFZGl0PC9wYXJhbT4KQEAgLTQ3NywxNCArNDg3LDE2IEBACiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImZvbGRlcklkIj4ke2ZvbGRlcklkfTwvcGFyYW0+CiAgICAgICAgICAgICA8L3Jlc3VsdD4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iZXJyb3IiIHR5cGU9ImNoYWluIj5ib29rbWFya0VkaXQ8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZSxzYXZlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAKKwogICAgICAgICA8YWN0aW9uIG5hbWU9ImJvb2ttYXJrc0ltcG9ydCIKICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuZWRpdG9yLkJvb2ttYXJrc0ltcG9ydCI+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9ImlucHV0IiB0eXBlPSJ0aWxlcyI+LkJvb2ttYXJrc0ltcG9ydDwvcmVzdWx0PgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJzdWNjZXNzIiB0eXBlPSJjaGFpbiI+Ym9va21hcmtzPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmV4ZWN1dGUsc2F2ZTwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgPGFjdGlvbiBuYW1lPSJmb2xkZXJBZGQiCiAgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLmVkaXRvci5Gb2xkZXJFZGl0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhY3Rpb25OYW1lIj5mb2xkZXJBZGQ8L3BhcmFtPgpAQCAtNDk3LDggKzUwOSw5IEBACiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImZvbGRlcklkIj4ke2ZvbGRlcklkfTwvcGFyYW0+CiAgICAgICAgICAgICA8L3Jlc3VsdD4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iZXJyb3IiIHR5cGU9ImNoYWluIj5ib29rbWFya3M8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZSxzYXZlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAKKwogICAgICAgICA8YWN0aW9uIG5hbWU9ImZvbGRlckVkaXQiCiAgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLmVkaXRvci5Gb2xkZXJFZGl0Ij4KICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhY3Rpb25OYW1lIj5mb2xkZXJFZGl0PC9wYXJhbT4KQEAgLTUxMSwxMSArNTI0LDEzIEBACiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImZvbGRlcklkIj4ke2ZvbGRlcklkfTwvcGFyYW0+CiAgICAgICAgICAgICA8L3Jlc3VsdD4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iZXJyb3IiIHR5cGU9ImNoYWluIj5ib29rbWFya3M8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZSxzYXZlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgotICAgICAgICAKKwogICAgICAgICA8YWN0aW9uIG5hbWU9IndlYmxvZ0NvbmZpZyIKICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuZWRpdG9yLldlYmxvZ0NvbmZpZyI+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9ImlucHV0IiB0eXBlPSJ0aWxlcyI+LldlYmxvZ0NvbmZpZzwvcmVzdWx0PgorICAgICAgICAgICAgPGFsbG93ZWQtbWV0aG9kcz5leGVjdXRlLHNhdmU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+CiAgICAgICAgIAogICAgICAgICA8YWN0aW9uIG5hbWU9IndlYmxvZ1JlbW92ZSIKQEAgLTUyNSw1NCArNTQwLDM4IEBACiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFjdGlvbk5hbWUiPm1lbnU8L3BhcmFtPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJuYW1lc3BhY2UiPi9yb2xsZXItdWk8L3BhcmFtPgogICAgICAgICAgICAgPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmV4ZWN1dGUscmVtb3ZlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogICAgICAgICAKICAgICAgICAgPGFjdGlvbiBuYW1lPSJ0aGVtZUVkaXQiCiAgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLmVkaXRvci5UaGVtZUVkaXQiPgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJpbnB1dCIgdHlwZT0idGlsZXMiPi5UaGVtZUVkaXQ8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZSxzYXZlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogICAgICAgICAKICAgICAgICAgPGFjdGlvbiBuYW1lPSJzdHlsZXNoZWV0RWRpdCIKICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuZWRpdG9yLlN0eWxlc2hlZXRFZGl0Ij4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iaW5wdXQiIHR5cGU9InRpbGVzIj4uU3R5bGVzaGVldEVkaXQ8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+Y29weVN0eWxlc2hlZXQsZGVsZXRlLGV4ZWN1dGUscmV2ZXJ0LHNhdmU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+CiAgICAgICAgIAogICAgICAgICA8YWN0aW9uIG5hbWU9InRlbXBsYXRlcyIKICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuZWRpdG9yLlRlbXBsYXRlcyI+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9Imxpc3QiIHR5cGU9InRpbGVzIj4uVGVtcGxhdGVzPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmFkZCxleGVjdXRlPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogICAgICAgICAKICAgICAgICAgPGFjdGlvbiBuYW1lPSJ0ZW1wbGF0ZUVkaXQiCiAgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLmVkaXRvci5UZW1wbGF0ZUVkaXQiPgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJsaXN0IiB0eXBlPSJjaGFpbiI+dGVtcGxhdGVzPC9yZXN1bHQ+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9ImlucHV0IiB0eXBlPSJ0aWxlcyI+LlRlbXBsYXRlRWRpdDwvcmVzdWx0PgorICAgICAgICAgICAgPGFsbG93ZWQtbWV0aG9kcz5leGVjdXRlLHNhdmU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+Ci0gICAgICAgIAotICAgICAgICA8YWN0aW9uIG5hbWU9InRlbXBsYXRlUmVtb3ZlIgotICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkuc3RydXRzMi5lZGl0b3IuVGVtcGxhdGVSZW1vdmUiPgotICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJjb25maXJtIiB0eXBlPSJ0aWxlcyI+LlRlbXBsYXRlUmVtb3ZlPC9yZXN1bHQ+Ci0gICAgICAgICAgICA8cmVzdWx0IG5hbWU9ImNhbmNlbCIgdHlwZT0icmVkaXJlY3RBY3Rpb24iPgotICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhY3Rpb25OYW1lIj50ZW1wbGF0ZXM8L3BhcmFtPgotICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJ3ZWJsb2ciPiR7d2VibG9nfTwvcGFyYW0+Ci0gICAgICAgICAgICA8L3Jlc3VsdD4KLSAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0ic3VjY2VzcyIgdHlwZT0iY2hhaW4iPnRlbXBsYXRlczwvcmVzdWx0PgotICAgICAgICA8L2FjdGlvbj4KLSAgICAgICAgCi0gICAgICAgIDxhY3Rpb24gbmFtZT0idGVtcGxhdGVzUmVtb3ZlIgotICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkuc3RydXRzMi5lZGl0b3IuVGVtcGxhdGVzUmVtb3ZlIj4KLSAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iaW5wdXQiIHR5cGU9InRpbGVzIj4uVGVtcGxhdGVzUmVtb3ZlPC9yZXN1bHQ+Ci0gICAgICAgICAgICA8cmVzdWx0IG5hbWU9ImNvbmZpcm0iIHR5cGU9InRpbGVzIj4uVGVtcGxhdGVzUmVtb3ZlPC9yZXN1bHQ+Ci0gICAgICAgICAgICA8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiIHR5cGU9ImNoYWluIj50ZW1wbGF0ZXM8L3Jlc3VsdD4KLSAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iY2FuY2VsIiB0eXBlPSJyZWRpcmVjdEFjdGlvbiI+Ci0gICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFjdGlvbk5hbWUiPnRlbXBsYXRlczwvcGFyYW0+Ci0gICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9IndlYmxvZyI+JHt3ZWJsb2d9PC9wYXJhbT4KLSAgICAgICAgICAgIDwvcmVzdWx0PgotICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJlcnJvciIgdHlwZT0iY2hhaW4iPnRlbXBsYXRlczwvcmVzdWx0PgotICAgICAgICA8L2FjdGlvbj4KLSAgICAgICAgCisKICAgICAgICAgPGFjdGlvbiBuYW1lPSJtZW1iZXJzIgogICAgICAgICAgICAgICAgIGNsYXNzPSJvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkuc3RydXRzMi5lZGl0b3IuTWVtYmVycyI+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9Imxpc3QiIHR5cGU9InRpbGVzIj4uTWVtYmVyczwvcmVzdWx0PgorICAgICAgICAgICAgPGFsbG93ZWQtbWV0aG9kcz5leGVjdXRlLHNhdmU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+CiAgICAgICAgIAogICAgICAgICA8YWN0aW9uIG5hbWU9Imludml0ZSIKQEAgLTU4NCw2ICs1ODMsNyBAQAogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJhY3Rpb25OYW1lIj5tZW1iZXJzPC9wYXJhbT4KICAgICAgICAgICAgICAgICA8cGFyYW0gbmFtZT0id2VibG9nIj4ke3dlYmxvZ308L3BhcmFtPgogICAgICAgICAgICAgPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmV4ZWN1dGUsc2F2ZTwvYWxsb3dlZC1tZXRob2RzPgogICAgICAgICA8L2FjdGlvbj4KIAogICAgICAgICA8YWN0aW9uIG5hbWU9Im1lbWJlclJlc2lnbiIKQEAgLTU5NywxNiArNTk3LDE5IEBACiAgICAgICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImFjdGlvbk5hbWUiPm1lbnU8L3BhcmFtPgogICAgICAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJuYW1lc3BhY2UiPi9yb2xsZXItdWk8L3BhcmFtPgogICAgICAgICAgICAgPC9yZXN1bHQ+CisgICAgICAgICAgICA8YWxsb3dlZC1tZXRob2RzPmV4ZWN1dGUscmVzaWduPC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogCiAgICAgICAgIDxhY3Rpb24gbmFtZT0icGluZ3MiCiAgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLmVkaXRvci5QaW5ncyI+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9Imxpc3QiIHR5cGU9InRpbGVzIj4uUGluZ3M8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZGlzYWJsZSxlbmFibGUsZXhlY3V0ZSxwaW5nTm93PC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogCiAgICAgICAgIDxhY3Rpb24gbmFtZT0ibWFpbnRlbmFuY2UiCiAgICAgICAgICAgICAgICAgY2xhc3M9Im9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5zdHJ1dHMyLmVkaXRvci5NYWludGVuYW5jZSI+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiIHR5cGU9InRpbGVzIj4uTWFpbnRlbmFuY2U8L3Jlc3VsdD4KKyAgICAgICAgICAgIDxhbGxvd2VkLW1ldGhvZHM+ZXhlY3V0ZSxmbHVzaENhY2hlLHJlc2V0PC9hbGxvd2VkLW1ldGhvZHM+CiAgICAgICAgIDwvYWN0aW9uPgogCiAgICAgPC9wYWNrYWdlPgpAQCAtNjE1LDE2ICs2MTgsMTMgQEAKICAgICAKICAgICA8cGFja2FnZSBuYW1lPSJ3ZWJsb2dnZXItYXV0aG9yaW5nLW92ZXJsYXkiIG5hbWVzcGFjZT0iL3JvbGxlci11aS9hdXRob3Jpbmcvb3ZlcmxheSIgZXh0ZW5kcz0id2VibG9nZ2VyLWF1dGhvcmluZyIgPgogCi0gICAgICAgIDxnbG9iYWwtYWxsb3dlZC1tZXRob2RzPgotICAgICAgICAgICAgZXhlY3V0ZSxzYXZlCi0gICAgICAgIDwvZ2xvYmFsLWFsbG93ZWQtbWV0aG9kcz4KLQogICAgICAgICA8YWN0aW9uIG5hbWU9Im1lZGlhRmlsZUFkZCIKICAgICAgICAgICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnN0cnV0czIuZWRpdG9yLk1lZGlhRmlsZUFkZCI+CiAgICAgICAgICAgICA8cGFyYW0gbmFtZT0ib3ZlcmxheU1vZGUiPnRydWU8L3BhcmFtPgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJpbnB1dCIgdHlwZT0idGlsZXMiPi5NZWRpYUZpbGVBZGRJbmNsdWRlPC9yZXN1bHQ+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9InN1Y2Nlc3MiIHR5cGU9InRpbGVzIj4uTWVkaWFGaWxlQWRkU3VjY2Vzc0luY2x1ZGU8L3Jlc3VsdD4KICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iZXJyb3IiIHR5cGU9InRpbGVzIj4uTWVkaWFGaWxlQWRkSW5jbHVkZTwvcmVzdWx0PgorICAgICAgICAgICAgPGFsbG93ZWQtbWV0aG9kcz5leGVjdXRlLHNhdmU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+CiAKIAkgICAgPGFjdGlvbiBuYW1lPSJtZWRpYUZpbGVJbWFnZUNob29zZXIiCkBAIC02MzMsNiArNjMzLDcgQEAKICAgICAgICAgICAgIDxyZXN1bHQgbmFtZT0iaW5wdXQiIHR5cGU9InRpbGVzIj4uTWVkaWFGaWxlSW1hZ2VDaG9vc2VyPC9yZXN1bHQ+CiAgICAgICAgICAgICA8cmVzdWx0IG5hbWU9ImVycm9yIiB0eXBlPSJ0aWxlcyI+Lk1lZGlhRmlsZUltYWdlQ2hvb3NlcjwvcmVzdWx0PgogICAgICAgICAgICAgPHJlc3VsdCBuYW1lPSJzdWNjZXNzIiB0eXBlPSJ0aWxlcyI+Lk1lZGlhRmlsZUltYWdlQ2hvb3NlcjwvcmVzdWx0PgorICAgICAgICAgICAgPGFsbG93ZWQtbWV0aG9kcz5leGVjdXRlLHNhdmU8L2FsbG93ZWQtbWV0aG9kcz4KICAgICAgICAgPC9hY3Rpb24+CiAKICAgICA8L3BhY2thZ2U+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vcmVzb3VyY2VzL3RlbXBsYXRlL3JvbGxlci9jaGVja2JveGxpc3QuZnRsIGIvYXBwL3NyYy9tYWluL3Jlc291cmNlcy90ZW1wbGF0ZS9yb2xsZXIvY2hlY2tib3hsaXN0LmZ0bApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE5MTA3Yi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vcmVzb3VyY2VzL3RlbXBsYXRlL3JvbGxlci9jaGVja2JveGxpc3QuZnRsCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLTwjLS0KLS8qCi0gKiBSb2xsZXIgTW9kaWZpY2F0aW9ucwotICogPT09PT09PT09PT09PT09PT09PT0KLSAqICAgQWRkIDxici8+IHRvIHRoZSBlbmQKLSAqCi0gKiAkSWQ6IGNoZWNrYm94bGlzdC5mdGwgMTM2NjkzNCAyMDEyLTA3LTI5IDIwOjEwOjA2WiBqb2dlcCAkCi0gKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0tLT4KLTwjYXNzaWduIGl0ZW1Db3VudCA9IDAvPgotPCNpZiBwYXJhbWV0ZXJzLmxpc3Q/Pz4KLTxAcy5pdGVyYXRvciB2YWx1ZT0icGFyYW1ldGVycy5saXN0Ij4KLSAgICA8I2Fzc2lnbiBpdGVtQ291bnQgPSBpdGVtQ291bnQgKyAxLz4KLSAgICA8I2lmIHBhcmFtZXRlcnMubGlzdEtleT8/PgotICAgICAgICA8I2Fzc2lnbiBpdGVtS2V5ID0gc3RhY2suZmluZFZhbHVlKHBhcmFtZXRlcnMubGlzdEtleSkvPgotICAgICAgICA8I2Vsc2U+Ci0gICAgICAgICAgICA8I2Fzc2lnbiBpdGVtS2V5ID0gc3RhY2suZmluZFZhbHVlKCd0b3AnKS8+Ci0gICAgPC8jaWY+Ci0gICAgPCNpZiBwYXJhbWV0ZXJzLmxpc3RWYWx1ZT8/PgotICAgICAgICA8I2Fzc2lnbiBpdGVtVmFsdWUgPSBzdGFjay5maW5kU3RyaW5nKHBhcmFtZXRlcnMubGlzdFZhbHVlKT9kZWZhdWx0KCIiKS8+Ci0gICAgICAgIDwjZWxzZT4KLSAgICAgICAgICAgIDwjYXNzaWduIGl0ZW1WYWx1ZSA9IHN0YWNrLmZpbmRTdHJpbmcoJ3RvcCcpLz4KLSAgICA8LyNpZj4KLSAgICA8I2lmIHBhcmFtZXRlcnMubGlzdENzc0NsYXNzPz8+Ci0gICAgICAgIDwjaWYgc3RhY2suZmluZFN0cmluZyhwYXJhbWV0ZXJzLmxpc3RDc3NDbGFzcyk/Pz4KLSAgICAgICAgICA8I2Fzc2lnbiBpdGVtQ3NzQ2xhc3M9IHN0YWNrLmZpbmRTdHJpbmcocGFyYW1ldGVycy5saXN0Q3NzQ2xhc3MpLz4KLSAgICAgICAgPCNlbHNlPgotICAgICAgICAgIDwjYXNzaWduIGl0ZW1Dc3NDbGFzcyA9ICcnLz4KLSAgICAgICAgPC8jaWY+Ci0gICAgPC8jaWY+Ci0gICAgPCNpZiBwYXJhbWV0ZXJzLmxpc3RDc3NTdHlsZT8/PgotICAgICAgICA8I2lmIHN0YWNrLmZpbmRTdHJpbmcocGFyYW1ldGVycy5saXN0Q3NzU3R5bGUpPz8+Ci0gICAgICAgICAgPCNhc3NpZ24gaXRlbUNzc1N0eWxlPSBzdGFjay5maW5kU3RyaW5nKHBhcmFtZXRlcnMubGlzdENzc1N0eWxlKS8+Ci0gICAgICAgIDwjZWxzZT4KLSAgICAgICAgICA8I2Fzc2lnbiBpdGVtQ3NzU3R5bGUgPSAnJy8+Ci0gICAgICAgIDwvI2lmPgotICAgIDwvI2lmPgotICAgIDwjaWYgcGFyYW1ldGVycy5saXN0VGl0bGU/Pz4KLSAgICAgICAgPCNpZiBzdGFjay5maW5kU3RyaW5nKHBhcmFtZXRlcnMubGlzdFRpdGxlKT8/PgotICAgICAgICAgIDwjYXNzaWduIGl0ZW1UaXRsZT0gc3RhY2suZmluZFN0cmluZyhwYXJhbWV0ZXJzLmxpc3RUaXRsZSkvPgotICAgICAgICA8I2Vsc2U+Ci0gICAgICAgICAgPCNhc3NpZ24gaXRlbVRpdGxlID0gJycvPgotICAgICAgICA8LyNpZj4KLSAgICA8LyNpZj4KLSAgICA8I2Fzc2lnbiBpdGVtS2V5U3RyPWl0ZW1LZXkudG9TdHJpbmcoKSAvPgotPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSIke3BhcmFtZXRlcnMubmFtZT9odG1sfSIgdmFsdWU9IiR7aXRlbUtleVN0cj9odG1sfSIKLSAgICAgICBpZD0iJHtwYXJhbWV0ZXJzLm5hbWU/aHRtbH0tJHtpdGVtQ291bnR9IjwjcnQvPgotICAgIDwjaWYgdGFnLmNvbnRhaW5zKHBhcmFtZXRlcnMubmFtZVZhbHVlLCBpdGVtS2V5KT4KLSAgICAgICBjaGVja2VkPSJjaGVja2VkIjwjcnQvPgotICAgIDwvI2lmPgotICAgIDwjaWYgcGFyYW1ldGVycy5kaXNhYmxlZD9kZWZhdWx0KGZhbHNlKT4KLSAgICAgICBkaXNhYmxlZD0iZGlzYWJsZWQiPCNydC8+Ci0gICAgPC8jaWY+Ci0gICAgPCNpZiBpdGVtQ3NzQ2xhc3M/aWZfZXhpc3RzICE9ICIiPgotICAgICBjbGFzcz0iJHtpdGVtQ3NzQ2xhc3M/aHRtbH0iPCNydC8+Ci0gICAgPCNlbHNlPgotICAgICAgICA8I2lmIHBhcmFtZXRlcnMuY3NzQ2xhc3M/Pz4KLSAgICAgY2xhc3M9IiR7cGFyYW1ldGVycy5jc3NDbGFzcz9odG1sfSI8I3J0Lz4KLSAgICAgICAgPC8jaWY+Ci0gICAgPC8jaWY+Ci0gICAgPCNpZiBpdGVtQ3NzU3R5bGU/aWZfZXhpc3RzICE9ICIiPgotICAgICBzdHlsZT0iJHtpdGVtQ3NzU3R5bGU/aHRtbH0iPCNydC8+Ci0gICAgPCNlbHNlPgotICAgICAgICA8I2lmIHBhcmFtZXRlcnMuY3NzU3R5bGU/Pz4KLSAgICAgc3R5bGU9IiR7cGFyYW1ldGVycy5jc3NTdHlsZT9odG1sfSI8I3J0Lz4KLSAgICAgICAgPC8jaWY+Ci0gICAgPC8jaWY+Ci0gICAgPCNpZiBpdGVtVGl0bGU/aWZfZXhpc3RzICE9ICIiPgotICAgICB0aXRsZT0iJHtpdGVtVGl0bGU/aHRtbH0iPCNydC8+Ci0gICAgPCNlbHNlPgotICAgICAgICA8I2lmIHBhcmFtZXRlcnMudGl0bGU/Pz4KLSAgICAgdGl0bGU9IiR7cGFyYW1ldGVycy50aXRsZT9odG1sfSI8I3J0Lz4KLSAgICAgICAgPC8jaWY+Ci0gICAgPC8jaWY+Ci0gICAgPCNpbmNsdWRlICIvJHtwYXJhbWV0ZXJzLnRlbXBsYXRlRGlyfS9zaW1wbGUvY3NzLmZ0bCIgLz4KLSAgICA8I2luY2x1ZGUgIi8ke3BhcmFtZXRlcnMudGVtcGxhdGVEaXJ9L3NpbXBsZS9zY3JpcHRpbmctZXZlbnRzLmZ0bCIgLz4KLSAgICA8I2luY2x1ZGUgIi8ke3BhcmFtZXRlcnMudGVtcGxhdGVEaXJ9L3NpbXBsZS9jb21tb24tYXR0cmlidXRlcy5mdGwiIC8+Ci0gICAgICAgIC8+Ci08bGFiZWwgZm9yPSIke3BhcmFtZXRlcnMubmFtZT9odG1sfS0ke2l0ZW1Db3VudH0iIGNsYXNzPSJjaGVja2JveExhYmVsIj4ke2l0ZW1WYWx1ZT9odG1sfTwvbGFiZWw+PGJyLz48Iy0tIFJvbGxlciArIDxici8+IC0tPgotPC9Acy5pdGVyYXRvcj4KLSAgICA8I2Vsc2U+Ci0gICAgJm5ic3A7Ci08LyNpZj4KLTxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJfX211bHRpc2VsZWN0XyR7cGFyYW1ldGVycy5pZD9odG1sfSIgbmFtZT0iX19tdWx0aXNlbGVjdF8ke3BhcmFtZXRlcnMubmFtZT9odG1sfSIKLSAgICAgICB2YWx1ZT0iIjwjcnQvPgotPCNpZiBwYXJhbWV0ZXJzLmRpc2FibGVkP2RlZmF1bHQoZmFsc2UpPgotICAgICAgIGRpc2FibGVkPSJkaXNhYmxlZCI8I3J0Lz4KLTwvI2lmPgotICAgICAgICAvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL0NhY2hlSW5mby5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9hZG1pbi9DYWNoZUluZm8uanNwCmluZGV4IDYzNDQyMzIuLjVlN2UyZWEgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL0NhY2hlSW5mby5qc3AKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvYWRtaW4vQ2FjaGVJbmZvLmpzcApAQCAtMjIsNyArMjIsOCBAQAogCiA8czppdGVyYXRvciB2YXI9ImNhY2hlIiB2YWx1ZT0ic3RhdHMiPgogICAgIDxzOmlmIHRlc3Q9IiNjYWNoZSAhPSBudWxsICYmICEjY2FjaGUudmFsdWUuaXNFbXB0eSI+Ci0gICAgICAgIDx0YWJsZSBjZWxsc3BhY2luZz0iMyIgYm9yZGVyPSIxIj4KKworICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIj4KICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICA8dGggY29sc3Bhbj0iMiI+PHM6cHJvcGVydHkgdmFsdWU9IiNjYWNoZS5rZXkiLz48L3RoPgogICAgICAgICAgICAgPC90cj4KQEAgLTM5LDcgKzQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgPHM6Zm9ybSBhY3Rpb249ImNhY2hlSW5mbyFjbGVhciI+CiAJCQkJCQk8czpoaWRkZW4gbmFtZT0ic2FsdCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJjYWNoZSIgdmFsdWU9IiV7I2NhY2hlLmtleX0iIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnY2FjaGVJbmZvLmNsZWFyJyl9IiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2NhY2hlSW5mby5jbGVhcicpfSIgY3NzQ2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgLz4KICAgICAgICAgICAgICAgICAgICAgPC9zOmZvcm0+CiAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgIDwvdHI+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9hZG1pbi9HbG9iYWxDb25maWcuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvYWRtaW4vR2xvYmFsQ29uZmlnLmpzcAppbmRleCA3ZWM5YzM5Li4xMGE5MWZjIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9hZG1pbi9HbG9iYWxDb25maWcuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL0dsb2JhbENvbmZpZy5qc3AKQEAgLTE3LDk2ICsxNywxNTIgQEAKIC0tJT4KIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KIAotPHAgY2xhc3M9InN1YnRpdGxlIj48czp0ZXh0IG5hbWU9ImNvbmZpZ0Zvcm0uc3VidGl0bGUiIC8+PC9wPgotPHA+PHM6dGV4dCBuYW1lPSJjb25maWdGb3JtLnByb21wdCIgLz48L3A+Cis8cCBjbGFzcz0ic3VidGl0bGUiPjxzOnRleHQgbmFtZT0iY29uZmlnRm9ybS5zdWJ0aXRsZSIvPjwvcD4KKzxwPjxzOnRleHQgbmFtZT0iY29uZmlnRm9ybS5wcm9tcHQiLz48L3A+CiAKLTxzOmZvcm0gYWN0aW9uPSJnbG9iYWxDb25maWchc2F2ZSI+Ci0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+CiAKLSAgICA8dGFibGUgY2xhc3M9ImZvcm10YWJsZU5vRGVzYyI+Ci0gICAgCis8czpmb3JtIGFjdGlvbj0iZ2xvYmFsQ29uZmlnIXNhdmUiIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLWhvcml6b250YWwiPgorCisgICAgPHM6aGlkZGVuIG5hbWU9InNhbHQiLz4KKwogICAgIDxzOml0ZXJhdG9yIHZhcj0iZGciIHZhbHVlPSJnbG9iYWxDb25maWdEZWYuZGlzcGxheUdyb3VwcyI+Ci0gICAgCi0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj48aDI+PHM6dGV4dCBuYW1lPSIleyNkZy5rZXl9IiAvPjwvaDI+PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAKKworICAgICAgICA8aDM+PHM6dGV4dCBuYW1lPSIleyNkZy5rZXl9Ii8+PC9oMz4KKwogICAgICAgICA8czppdGVyYXRvciB2YXI9InBkIiB2YWx1ZT0iI2RnLnByb3BlcnR5RGVmcyI+Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48czp0ZXh0IG5hbWU9IiV7I3BkLmtleX0iIC8+PC90ZD4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIDwlLS0gc3BlY2lhbCBjb25kaXRpb24gZm9yIGNvbW1lbnQgcGx1Z2lucyAtLSU+Ci0gICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSIjcGQubmFtZSA9PSAndXNlcnMuY29tbWVudHMucGx1Z2lucyciPgotICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxzOmNoZWNrYm94bGlzdCB0aGVtZT0icm9sbGVyIiBsaXN0PSJwbHVnaW5zTGlzdCIKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ImNvbW1lbnRQbHVnaW5zIiBsaXN0S2V5PSJpZCIgbGlzdFZhbHVlPSJuYW1lIiAvPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3M6aWY+CiAKLSAgICAgICAgICAgICAgICAgIDwlLS0gc3BlY2lhbCBjb25kaXRpb24gZm9yIGZyb250IHBhZ2UgYmxvZyAtLSU+Ci0gICAgICAgICAgICAgICAgICA8czplbHNlaWYgdGVzdD0iI3BkLm5hbWUgPT0gJ3NpdGUuZnJvbnRwYWdlLndlYmxvZy5oYW5kbGUnIj4KLSAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSc8czpwcm9wZXJ0eSB2YWx1ZT0iI3BkLm5hbWUiLz4nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPScnPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjb25maWdGb3JtLm5vbmUiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOml0ZXJhdG9yIHZhcj0id2VibG9nIiB2YWx1ZT0id2VibG9ncyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9JzxzOnByb3BlcnR5IHZhbHVlPSIjd2VibG9nLmhhbmRsZSIvPicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9J3Byb3BlcnRpZXNbI3BkLm5hbWVdLnZhbHVlID09ICN3ZWJsb2cuaGFuZGxlJz5zZWxlY3RlZD0ndHJ1ZSc8L3M6aWY+ID4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIjd2VibG9nLm5hbWUiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3M6aXRlcmF0b3I+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgotICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3M6ZWxzZWlmPgorICAgICAgICAgICAgPCUtLSBzcGVjaWFsIGNhc2UgZm9yIGNvbW1lbnQgcGx1Z2lucyAtLSU+CisgICAgICAgICAgICA8czppZiB0ZXN0PSIjcGQubmFtZSA9PSAndXNlcnMuY29tbWVudHMucGx1Z2lucyciPgorICAgICAgICAgICAgICAgIDxzOmNoZWNrYm94bGlzdCBsYWJlbD0iJXtnZXRUZXh0KCNwZC5rZXkpfSIgbmFtZT0iY29tbWVudFBsdWdpbnMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Q9InBsdWdpbnNMaXN0IiBsaXN0S2V5PSJpZCIgdmFsdWU9Im5hbWUiIGxpc3RWYWx1ZT0ibmFtZSIvPgorICAgICAgICAgICAgPC9zOmlmPgogCi0gICAgICAgICAgICAgICAgICA8JS0tICJzdHJpbmciIHR5cGUgbWVhbnMgdXNlIGEgc2ltcGxlIHRleHRib3ggLS0lPgotICAgICAgICAgICAgICAgICAgPHM6ZWxzZWlmIHRlc3Q9IiNwZC50eXBlID09ICdzdHJpbmcnIj4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9JzxzOnByb3BlcnR5IHZhbHVlPSIjcGQubmFtZSIvPicKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSc8czpwcm9wZXJ0eSB2YWx1ZT0icHJvcGVydGllc1sjcGQubmFtZV0udmFsdWUiLz4nIHNpemU9IjM1IiAvPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3M6ZWxzZWlmPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICA8JS0tICJ0ZXh0IiB0eXBlIG1lYW5zIHVzZSBhIGZ1bGwgdGV4dGFyZWEgLS0lPgotICAgICAgICAgICAgICAgICAgPHM6ZWxzZWlmIHRlc3Q9IiNwZC50eXBlID09ICd0ZXh0JyI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPgotICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSc8czpwcm9wZXJ0eSB2YWx1ZT0iI3BkLm5hbWUiLz4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3M9IjxzOnByb3BlcnR5IHZhbHVlPSIjcGQucm93cyIvPiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29scz0iPHM6cHJvcGVydHkgdmFsdWU9IiNwZC5jb2xzIi8+Ij48czpwcm9wZXJ0eSB2YWx1ZT0icHJvcGVydGllc1sjcGQubmFtZV0udmFsdWUiLz4KLSAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPgotICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgPC9zOmVsc2VpZj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgPCUtLSAiYm9vbGVhbiIgdHlwZSBtZWFucyB1c2UgYSBjaGVja2JveCAtLSU+Ci0gICAgICAgICAgICAgICAgICA8czplbHNlaWYgdGVzdD0iI3BkLnR5cGUgPT0gJ2Jvb2xlYW4nIj4KLSAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJwcm9wZXJ0aWVzWyNwZC5uYW1lXS52YWx1ZSA9PSAndHJ1ZSciPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9JzxzOnByb3BlcnR5IHZhbHVlPSIjcGQubmFtZSIvPicgQ0hFQ0tFRD48L3RkPgotICAgICAgICAgICAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgICAgICAgICAgICA8czplbHNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48aW5wdXQgdHlwZT0iY2hlY2tib3giCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0nPHM6cHJvcGVydHkgdmFsdWU9IiNwZC5uYW1lIi8+Jz48L3RkPgotICAgICAgICAgICAgICAgICAgICAgIDwvczplbHNlPgotICAgICAgICAgICAgICAgICAgPC9zOmVsc2VpZj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgPCUtLSBpZiBpdCdzIHNvbWV0aGluZyB3ZSBkb24ndCB1bmRlcnN0YW5kIHRoZW4gdXNlIHRleHRib3ggLS0lPgotICAgICAgICAgICAgICAgICAgPHM6ZWxzZT4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+PGlucHV0IHR5cGU9InRleHQiCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSc8czpwcm9wZXJ0eSB2YWx1ZT0iI3BkLm5hbWUiLz4nIHNpemU9IjUwIiAvPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3M6ZWxzZT4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48JS0tIDxzOnRleHQgbmFtZT0iIiAvPiAtLSU+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgCisgICAgICAgICAgICA8JS0tIHNwZWNpYWwgY2FzZSBmb3IgZnJvbnQgcGFnZSBibG9nIC0tJT4KKyAgICAgICAgICAgIDxzOmVsc2VpZiB0ZXN0PSIjcGQubmFtZSA9PSAnc2l0ZS5mcm9udHBhZ2Uud2VibG9nLmhhbmRsZSciPgorICAgICAgICAgICAgICAgIDxzOnNlbGVjdCBuYW1lPSIleyNwZC5uYW1lfSIgbGFiZWw9IiV7Z2V0VGV4dCgjcGQua2V5KX0iIHZhbHVlPSIle3Byb3BlcnRpZXNbI3BkLm5hbWVdLnZhbHVlfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdD0id2VibG9ncyIgbGlzdEtleT0ibmFtZSIgbGlzdFZhbHVlS2V5PSJoYW5kbGUiLz4KKyAgICAgICAgICAgIDwvczplbHNlaWY+CisKKyAgICAgICAgICAgIDwlLS0gInN0cmluZyIgdHlwZSBtZWFucyB1c2UgYSBzaW1wbGUgdGV4dGJveCAtLSU+CisgICAgICAgICAgICA8czplbHNlaWYgdGVzdD0iI3BkLnR5cGUgPT0gJ3N0cmluZyciPgorICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSIleyNwZC5uYW1lfSIgbGFiZWw9IiV7Z2V0VGV4dCgjcGQua2V5KX0iIHNpemU9IjM1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJXtwcm9wZXJ0aWVzWyNwZC5uYW1lXS52YWx1ZX0gIi8+CisgICAgICAgICAgICA8L3M6ZWxzZWlmPgorCisgICAgICAgICAgICA8JS0tICJ0ZXh0IiB0eXBlIG1lYW5zIHVzZSBhIGZ1bGwgdGV4dGFyZWEgLS0lPgorICAgICAgICAgICAgPHM6ZWxzZWlmIHRlc3Q9IiNwZC50eXBlID09ICd0ZXh0JyI+CisgICAgICAgICAgICAgICAgPHM6dGV4dGFyZWEgbmFtZT0iJXsjcGQubmFtZX0iIGxhYmVsPSIle2dldFRleHQoI3BkLmtleSl9IiByb3dzPSIjcGQucm93cyIgY29scz0iI3BkLmNvbHMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiV7cHJvcGVydGllc1sjcGQubmFtZV0udmFsdWV9ICIvPgorICAgICAgICAgICAgPC9zOmVsc2VpZj4KKworICAgICAgICAgICAgPCUtLSAiYm9vbGVhbiIgdHlwZSBtZWFucyB1c2UgYSBjaGVja2JveCAtLSU+CisgICAgICAgICAgICA8czplbHNlaWYgdGVzdD0iI3BkLnR5cGUgPT0gJ2Jvb2xlYW4nIj4KKworICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9InByb3BlcnRpZXNbI3BkLm5hbWVdLnZhbHVlID09ICd0cnVlJyI+CisgICAgICAgICAgICAgICAgICAgIDxzOmNoZWNrYm94IG5hbWU9IiV7I3BkLm5hbWV9IiBsYWJlbD0iJXtnZXRUZXh0KCNwZC5rZXkpfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRWYWx1ZT0idHJ1ZSIgY2hlY2tlZD0idHJ1ZSIgb25jaGFuZ2U9ImZvcm1DaGFuZ2VkKCkiLz4KKyAgICAgICAgICAgICAgICA8L3M6aWY+CisgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0icHJvcGVydGllc1sjcGQubmFtZV0udmFsdWUgIT0gJ3RydWUnIj4KKyAgICAgICAgICAgICAgICAgICAgPHM6Y2hlY2tib3ggbmFtZT0iJXsjcGQubmFtZX0iIGxhYmVsPSIle2dldFRleHQoI3BkLmtleSl9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlPSJmYWxzZSIgb25jaGFuZ2U9ImZvcm1DaGFuZ2VkKCkiLz4KKyAgICAgICAgICAgICAgICA8L3M6aWY+CisKKyAgICAgICAgICAgIDwvczplbHNlaWY+CisKKyAgICAgICAgICAgIDwlLS0gImludGVnZXIiIHVzZSBpbnB1dCB0eXBlIG51bWJlciAtLSU+CisgICAgICAgICAgICA8czplbHNlaWYgdGVzdD0iI3BkLnR5cGUgPT0gJ2ludGVnZXInIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwICI+CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY29sLXNtLTMgY29udHJvbC1sYWJlbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcj0nZ2xvYmFsQ29uZmlnXzxzOnByb3BlcnR5IHZhbHVlPSIjcGQubmFtZVdpdGhVbmRlcmJhcnMiIC8+Jz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iJXsjcGQua2V5fSIvPgorICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tOSBjb250cm9scyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSc8czpwcm9wZXJ0eSB2YWx1ZT0iI3BkLm5hbWUiIC8+JyBzaXplPSIzNSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nPHM6cHJvcGVydHkgdmFsdWU9IiV7cHJvcGVydGllc1sjcGQubmFtZV0udmFsdWV9Ii8+JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPSdnbG9iYWxDb25maWdfPHM6cHJvcGVydHkgdmFsdWU9IiNwZC5uYW1lV2l0aFVuZGVyYmFycyIgLz4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZvcm0tY29udHJvbCBpbnRlZ2VyIiBvbmtleXVwPSJmb3JtQ2hhbmdlZCgpIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICA8L3M6ZWxzZWlmPgorCisgICAgICAgICAgICA8JS0tICJmbG9hdCIgdXNlIGlucHV0IHR5cGUgbnVtYmVyIC0tJT4KKyAgICAgICAgICAgIDxzOmVsc2VpZiB0ZXN0PSIjcGQudHlwZSA9PSAnZmxvYXQnIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwICI+CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY29sLXNtLTMgY29udHJvbC1sYWJlbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcj0nZ2xvYmFsQ29uZmlnXzxzOnByb3BlcnR5IHZhbHVlPSIjcGQubmFtZVdpdGhVbmRlcmJhcnMiIC8+Jz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iJXsjcGQua2V5fSIvPgorICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tOSBjb250cm9scyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBuYW1lPSc8czpwcm9wZXJ0eSB2YWx1ZT0iI3BkLm5hbWUiIC8+JyBzaXplPSI1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSc8czpwcm9wZXJ0eSB2YWx1ZT0icHJvcGVydGllc1sjcGQubmFtZV0udmFsdWUiLz4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9J2dsb2JhbENvbmZpZ188czpwcm9wZXJ0eSB2YWx1ZT0iI3BkLm5hbWVXaXRoVW5kZXJiYXJzIiAvPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZm9ybS1jb250cm9sIGZsb2F0IiBvbmtleXVwPSJmb3JtQ2hhbmdlZCgpIi8+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9zOmVsc2VpZj4KKworICAgICAgICAgICAgPCUtLSBpZiBpdCdzIHNvbWV0aGluZyB3ZSBkb24ndCB1bmRlcnN0YW5kIHRoZW4gdXNlIHRleHRib3ggLS0lPgorICAgICAgICAgICAgPHM6ZWxzZT4KKyAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iJXsjcGQubmFtZX0iIGxhYmVsPSIle2dldFRleHQoI3BkLmtleSl9IiBzaXplPSIzNSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiV7cHJvcGVydGllc1sjcGQubmFtZV0udmFsdWV9Ii8+CisgICAgICAgICAgICA8L3M6ZWxzZT4KKwogICAgICAgICA8L3M6aXRlcmF0b3I+Ci0gICAgICAKLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPiZuYnNwOzwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICAgIAorCisgICAgICAgIDxpbWcgc3JjPSI8czp1cmwgdmFsdWU9Jy9yb2xsZXItdWkvaW1hZ2VzL3NwYWNlci5wbmcnIC8+IiBhbHQ9InNwYWNlciIgc3R5bGU9Im1pbi1oZWlnaHQ6IDFlbSIvPgorCiAgICAgPC9zOml0ZXJhdG9yPgogCi0gICAgPC90YWJsZT4KLSAgICAKLSAgICA8ZGl2IGNsYXNzPSJjb250cm9sIj4KLSAgICAgICAgPGlucHV0IGNsYXNzPSJidXR0b25Cb3giIHR5cGU9InN1Ym1pdCIgdmFsdWU9IjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5zYXZlIi8+Ii8+Ci0gICAgPC9kaXY+Ci0gICAgCisgICAgPGlucHV0IGlkPSJzYXZlQnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSI8czp0ZXh0IG5hbWU9ImdlbmVyaWMuc2F2ZSIvPiIvPgorCiA8L3M6Zm9ybT4KKworCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKKyAgICBmdW5jdGlvbiBmb3JtQ2hhbmdlZCgpIHsKKyAgICAgICAgdmFyIHNhdmVCb29rbWFya0J1dHRvbiA9ICQoJyNzYXZlQnV0dG9uOmZpcnN0Jyk7CisgICAgICAgIHZhciBlcnJvciA9IGZhbHNlOworCisgICAgICAgICQoImlucHV0IikuZWFjaChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgaXNJbnRlZ2VyID0gJCh0aGlzKS5oYXNDbGFzcygiaW50ZWdlciIpOworICAgICAgICAgICAgdmFyIGlzRmxvYXQgPSAkKHRoaXMpLmhhc0NsYXNzKCJmbG9hdCIpOworICAgICAgICAgICAgdmFyIGlzQm9vbGVhbiA9ICQodGhpcykuaGFzQ2xhc3MoImJvb2xlYW4iKTsKKworICAgICAgICAgICAgaWYgKGlzSW50ZWdlciB8fCBpc0Zsb2F0KSB7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNOYU4odGhpcy52YWx1ZUFzTnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcygiYmFja2dyb3VuZCIsICIjRkJCIikKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOworCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0ludGVnZXIgJiYgIU51bWJlci5pc0ludGVnZXIodGhpcy52YWx1ZUFzTnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcygiYmFja2dyb3VuZCIsICIjRkJCIikKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOworCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoImJhY2tncm91bmQiLCAid2hpdGUiKQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0Zsb2F0KSB7CisKKyAgICAgICAgICAgICAgICBpZiAoaXNOYU4odGhpcy52YWx1ZUFzTnVtYmVyKSkgeworICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcygiYmFja2dyb3VuZCIsICIjRkJCIikKKyAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOworCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoImJhY2tncm91bmQiLCAid2hpdGUiKQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW4pIHsKKyAgICAgICAgICAgICAgICAvLyBub3Qgc3VyZSB3aHkgdGhpcyBpcyBuZWNlc3NhcnksIHZhbHVlIGRvZXMgbm90IHRyYWNrIGNoZWNrZWQgc3RhdGU/CisgICAgICAgICAgICAgICAgJCh0aGlzKS5wcm9wKCJ2YWx1ZSIsICEoISQodGhpcykucHJvcCgiY2hlY2tlZCIpKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSk7CisKKyAgICAgICAgc2F2ZUJvb2ttYXJrQnV0dG9uLmF0dHIoImRpc2FibGVkIiwgZXJyb3IpOworICAgIH0KKworPC9zY3JpcHQ+CisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL1BpbmdUYXJnZXRFZGl0LmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL1BpbmdUYXJnZXRFZGl0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmU4NGViNy4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9hZG1pbi9QaW5nVGFyZ2V0RWRpdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08JS0tCi0gIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91Ci0gIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAotICB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nCi0gIGNvcHlyaWdodCBpbiB0aGlzIHdvcmssIHBsZWFzZSBzZWUgdGhlIE5PVElDRSBmaWxlIGluIHRoZSB0b3AgbGV2ZWwKLSAgZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgotLS0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL1dFQi1JTkYvanNwcy90YWdsaWJzLXN0cnV0czIuanNwIiAlPgotCi08JS0tIFRpdGxpbmcsIHByb2Nlc3NpbmcgYWN0aW9ucyBkaWZmZXJlbnQgYmV0d2VlbiBhZGQgYW5kIGVkaXQgLS0lPgotPHM6aWYgdGVzdD0iYWN0aW9uTmFtZSA9PSAnY29tbW9uUGluZ1RhcmdldEVkaXQnIj4KLSAgICA8czpzZXQgdmFyPSJtYWluQWN0aW9uIj5jb21tb25QaW5nVGFyZ2V0RWRpdDwvczpzZXQ+Ci0gICAgPHM6c2V0IHZhcj0ic3VidGl0bGVLZXkiPnBpbmdUYXJnZXRFZGl0LnN1YnRpdGxlPC9zOnNldD4KLTwvczppZj4KLTxzOmVsc2U+Ci0gICAgPHM6c2V0IHZhcj0ibWFpbkFjdGlvbiI+Y29tbW9uUGluZ1RhcmdldEFkZDwvczpzZXQ+Ci0gICAgPHM6c2V0IHZhcj0ic3VidGl0bGVLZXkiPnBpbmdUYXJnZXRBZGQuc3VidGl0bGU8L3M6c2V0PgotPC9zOmVsc2U+Ci0KLTxwIGNsYXNzPSJzdWJ0aXRsZSI+Ci08czp0ZXh0IG5hbWU9IiV7I3N1YnRpdGxlS2V5fSIvPgotPC9wPgotCi08czpmb3JtPgotCTxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgotICAgIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2NvbW1vblBpbmdUYXJnZXRFZGl0JyI+Ci0gICAgICAgIDwlLS0gYmVhbiBmb3IgYWRkIGRvZXMgbm90IGhhdmUgYSBiZWFuIGlkIHlldCAtLSU+Ci0gICAgICAgIDxzOmhpZGRlbiBuYW1lPSJiZWFuLmlkIiAvPgotICAgIDwvczppZj4KLQotICAgIDxkaXYgY2xhc3M9ImZvcm1yb3ciPgotICAgICAgIDxsYWJlbCBmb3I9Im5hbWUiIGNsYXNzPSJmb3Jtcm93Ij48czp0ZXh0IG5hbWU9ImdlbmVyaWMubmFtZSIgLz48L2xhYmVsPgotICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLm5hbWUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIiBzdHlsZT0id2lkdGg6NTAlIi8+Ci0gICAgPC9kaXY+Ci0KLSAgICA8ZGl2IGNsYXNzPSJmb3Jtcm93Ij4KLSAgICAgICA8bGFiZWwgZm9yPSJwaW5nVXJsIiBjbGFzcz0iZm9ybXJvdyI+PHM6dGV4dCBuYW1lPSJwaW5nVGFyZ2V0LnBpbmdVcmwiIC8+PC9sYWJlbD4KLSAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5waW5nVXJsIiBzaXplPSIxMDAiIG1heGxlbmd0aD0iMjU1IiBzdHlsZT0id2lkdGg6NTAlIi8+Ci0gICAgPC9kaXY+Ci0KLSAgICA8cC8+Ci0KLSAgICA8ZGl2IGNsYXNzPSJmb3Jtcm93Ij4KLSAgICAgICA8bGFiZWwgZm9yPSIiIGNsYXNzPSJmb3Jtcm93Ij4mbmJzcDs8L2xhYmVsPgotICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLnNhdmUnKX0iIGFjdGlvbj0iJXsjbWFpbkFjdGlvbn0hc2F2ZSIvPgotICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLmNhbmNlbCcpfSIgYWN0aW9uPSJjb21tb25QaW5nVGFyZ2V0cyIgLz4KLSAgICA8L2Rpdj4KLQotPC9zOmZvcm0+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9hZG1pbi9QaW5nVGFyZ2V0UmVtb3ZlLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL1BpbmdUYXJnZXRSZW1vdmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2ZiOWI3Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL1BpbmdUYXJnZXRSZW1vdmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPCUtLQotICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLSAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdQotICB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKLSAgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZwotICBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCi0gIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KLS0tJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KLQotPGgyPgotICAgIDxzOnRleHQgbmFtZT0icGluZ1RhcmdldC5jb25maXJtUmVtb3ZlVGl0bGUiLz4KLTwvaDI+Ci0KLTxwLz4KLTxzOnRleHQgbmFtZT0icGluZ1RhcmdldC5jb25maXJtQ29tbW9uUmVtb3ZlIiAvPgotPHAvPgotCi08dGFibGU+Ci0gICAgPHRyPjx0ZD48czp0ZXh0IG5hbWU9ImdlbmVyaWMubmFtZSIgLz4mbmJzcDsmbmJzcDs8L3RkPjx0ZD48Yj48czpwcm9wZXJ0eSB2YWx1ZT0icGluZ1RhcmdldC5uYW1lIiAvPjwvYj48L3RkPjwvdHI+Ci0gICAgPHRyPjx0ZD48czp0ZXh0IG5hbWU9InBpbmdUYXJnZXQucGluZ1VybCIgLz4mbmJzcDsmbmJzcDs8L3RkPjx0ZD48Yj48czpwcm9wZXJ0eSB2YWx1ZT0icGluZ1RhcmdldC5waW5nVXJsIiAvPjwvYj48L3RkPjwvdHI+Ci08L3RhYmxlPgotCi08YnIvPgotCi08ZGl2IGNsYXNzPSJjb250cm9sIj4KLSAgICA8czpmb3JtPgotCQk8czpoaWRkZW4gbmFtZT0ic2FsdCIgLz4KLSAgICAgICAgPHM6aGlkZGVuIG5hbWU9InBpbmdUYXJnZXRJZCIgLz4KLSAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMueWVzJyl9IiBhY3Rpb249ImNvbW1vblBpbmdUYXJnZXRzIWRlbGV0ZSIvPgotICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5jYW5jZWwnKX0iIGFjdGlvbj0iY29tbW9uUGluZ1RhcmdldHMiLz4KLSAgICA8L3M6Zm9ybT4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvYWRtaW4vUGluZ1RhcmdldHMuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvYWRtaW4vUGluZ1RhcmdldHMuanNwCmluZGV4IDk0YzIwZjYuLjJmYWQ2Y2MgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL1BpbmdUYXJnZXRzLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9hZG1pbi9QaW5nVGFyZ2V0cy5qc3AKQEAgLTE3LDg5ICsxNywyODcgQEAKIC0tJT4KIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KIAotPHAgY2xhc3M9InN1YnRpdGxlIj4KLSAgICA8czp0ZXh0IG5hbWU9ImNvbW1vblBpbmdUYXJnZXRzLnN1YnRpdGxlIiAvPgotPC9wPgorPHAgY2xhc3M9InN1YnRpdGxlIj48czp0ZXh0IG5hbWU9ImNvbW1vblBpbmdUYXJnZXRzLnN1YnRpdGxlIi8+PC9wPgogCi08cC8+PHM6dGV4dCBuYW1lPSJjb21tb25QaW5nVGFyZ2V0cy5leHBsYW5hdGlvbiIvPjxwLz4KKzxwPjxzOnRleHQgbmFtZT0iY29tbW9uUGluZ1RhcmdldHMuZXhwbGFuYXRpb24iLz48L3A+CiAKLTx0YWJsZSBjbGFzcz0icm9sbGVydGFibGUiPgogCi08JS0tIEhlYWRpbmdzIC0tJT4KLTx0ciBjbGFzcz0icm9sbGVydGFibGUiPgotICAgIDx0aCBjbGFzcz0icm9sbGVydGFibGUiIHdpZHRoPSIyMCUlIj48czp0ZXh0IG5hbWU9ImdlbmVyaWMubmFtZSIgLz48L3RoPgotICAgIDx0aCBjbGFzcz0icm9sbGVydGFibGUiIHdpZHRoPSI1NSUiPjxzOnRleHQgbmFtZT0icGluZ1RhcmdldC5waW5nVXJsIiAvPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSIgd2lkdGg9IjE1JSIgY29sc3Bhbj0iMiI+PHM6dGV4dCBuYW1lPSJwaW5nVGFyZ2V0LmF1dG9FbmFibGVkIiAvPjwvdGg+Ci0gICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSIgd2lkdGg9IjUlIj48czp0ZXh0IG5hbWU9ImdlbmVyaWMuZWRpdCIgLz48L3RoPgotICAgIDx0aCBjbGFzcz0icm9sbGVydGFibGUiIHdpZHRoPSI1JSI+PHM6dGV4dCBuYW1lPSJwaW5nVGFyZ2V0LnJlbW92ZSIgLz48L3RoPgotPC90cj4KKzx0YWJsZSBjbGFzcz0icm9sbGVydGFibGUgdGFibGUgdGFibGUtc3RyaXBlZCI+CiAKLTwlLS0gTGlzdGluZyBvZiBjdXJyZW50IGNvbW1vbiB0YXJnZXRzIC0tJT4KLTxzOml0ZXJhdG9yIHZhcj0icGluZ1RhcmdldCIgdmFsdWU9InBpbmdUYXJnZXRzIiBzdGF0dXM9InJvd3N0YXR1cyI+Ci0gICAgCi0gICAgPHM6aWYgdGVzdD0iI3Jvd3N0YXR1cy5vZGQgPT0gdHJ1ZSI+Ci0gICAgICAgIDx0ciBjbGFzcz0icm9sbGVydGFibGVfb2RkIj4KLSAgICA8L3M6aWY+Ci0gICAgPHM6ZWxzZT4KLSAgICAgICAgPHRyIGNsYXNzPSJyb2xsZXJ0YWJsZV9ldmVuIj4KLSAgICA8L3M6ZWxzZT4KLSAgICAKLSAgICA8dGQgY2xhc3M9InJvbGxlcnRhYmxlIj48czpwcm9wZXJ0eSB2YWx1ZT0iI3BpbmdUYXJnZXQubmFtZSIgLz48L3RkPgotICAgIAotICAgIDx0ZCBjbGFzcz0icm9sbGVydGFibGUiPjxzOnByb3BlcnR5IHZhbHVlPSIjcGluZ1RhcmdldC5waW5nVXJsIiAvPjwvdGQ+Ci0gICAgCi0gICAgPCEtLSBUT0RPOiBVc2UgaWNvbnMgaGVyZSAtLT4KLSAgICA8dGQgY2xhc3M9InJvbGxlcnRhYmxlIiBhbGlnbj0iY2VudGVyIiA+Ci0gICAgICAgIDxzOmlmIHRlc3Q9IiNwaW5nVGFyZ2V0LmF1dG9FbmFibGVkIj4KLSAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzAwYWEwMDsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij48czp0ZXh0IG5hbWU9InBpbmdUYXJnZXQuZW5hYmxlZCIvPjwvc3Bhbj4mbmJzcDsKLSAgICAgICAgPC9zOmlmPgotICAgICAgICA8czplbHNlPgotICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjYWFhYWFhOyBmb250LXdlaWdodDogYm9sZDsiPjxzOnRleHQgbmFtZT0icGluZ1RhcmdldC5kaXNhYmxlZCIvPjwvc3Bhbj4mbmJzcDsKLSAgICAgICAgPC9zOmVsc2U+Ci0gICAgPC90ZD4KLSAgICAKLSAgICA8IS0tIFRPRE86IFVzZSBpY29ucyBoZXJlIC0tPgotICAgIDx0ZCBjbGFzcz0icm9sbGVydGFibGUiIGFsaWduPSJjZW50ZXIiID4KLSAgICAgICAgPHM6aWYgdGVzdD0iI3BpbmdUYXJnZXQuYXV0b0VuYWJsZWQiPgotICAgICAgICAgICAgPHM6dXJsIHZhcj0iZGlzYWJsZVBpbmciIGFjdGlvbj0iY29tbW9uUGluZ1RhcmdldHMhZGlzYWJsZSI+Ci0gICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0icGluZ1RhcmdldElkIiB2YWx1ZT0iI3BpbmdUYXJnZXQuaWQiIC8+Ci0gICAgICAgICAgICA8L3M6dXJsPgotICAgICAgICAgICAgPHM6YSBocmVmPSIle2Rpc2FibGVQaW5nfSI+PHM6dGV4dCBuYW1lPSJwaW5nVGFyZ2V0LmRpc2FibGUiLz48L3M6YT4KLSAgICAgICAgPC9zOmlmPgotICAgICAgICA8czplbHNlPgotICAgICAgICAgICAgPHM6dXJsIHZhcj0iZW5hYmxlUGluZyIgYWN0aW9uPSJjb21tb25QaW5nVGFyZ2V0cyFlbmFibGUiPgotICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9InBpbmdUYXJnZXRJZCIgdmFsdWU9IiNwaW5nVGFyZ2V0LmlkIiAvPgotICAgICAgICAgICAgPC9zOnVybD4KLSAgICAgICAgICAgIDxzOmEgaHJlZj0iJXtlbmFibGVQaW5nfSI+PHM6dGV4dCBuYW1lPSJwaW5nVGFyZ2V0LmVuYWJsZSIvPjwvczphPgotICAgICAgICA8L3M6ZWxzZT4KLSAgICA8L3RkPgotICAgIAotICAgIDx0ZCBjbGFzcz0icm9sbGVydGFibGUiIGFsaWduPSJjZW50ZXIiPgotICAgICAgICA8czp1cmwgdmFyPSJlZGl0UGluZyIgYWN0aW9uPSJjb21tb25QaW5nVGFyZ2V0RWRpdCI+Ci0gICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJiZWFuLmlkIiB2YWx1ZT0iI3BpbmdUYXJnZXQuaWQiIC8+Ci0gICAgICAgIDwvczp1cmw+Ci0gICAgICAgIDxzOmEgaHJlZj0iJXtlZGl0UGluZ30iPgotICAgICAgICAgICAgPGltZyBzcmM9JzxjOnVybCB2YWx1ZT0iL2ltYWdlcy9wYWdlX3doaXRlX2VkaXQucG5nIi8+JyBib3JkZXI9IjAiIGFsdD0iPHM6dGV4dCBuYW1lPSJnZW5lcmljLmVkaXQiIC8+IiAvPgotICAgICAgICA8L3M6YT4KLSAgICA8L3RkPgotICAgIAotICAgIDx0ZCBjbGFzcz0icm9sbGVydGFibGUiIGFsaWduPSJjZW50ZXIiPgotICAgICAgICA8czp1cmwgdmFyPSJyZW1vdmVQaW5nIiBhY3Rpb249ImNvbW1vblBpbmdUYXJnZXRzIWRlbGV0ZUNvbmZpcm0iPgotICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0icGluZ1RhcmdldElkIiB2YWx1ZT0iI3BpbmdUYXJnZXQuaWQiIC8+Ci0gICAgICAgIDwvczp1cmw+Ci0gICAgICAgIDxzOmEgaHJlZj0iJXtyZW1vdmVQaW5nfSI+Ci0gICAgICAgICAgICA8aW1nIHNyYz0nPGM6dXJsIHZhbHVlPSIvaW1hZ2VzL2RlbGV0ZS5wbmciLz4nIGJvcmRlcj0iMCIgYWx0PSI8czp0ZXh0IG5hbWU9InBpbmdUYXJnZXQucmVtb3ZlIiAvPiIgLz4KLSAgICAgICAgPC9zOmE+Ci0gICAgPC90ZD4KLSAgICAKKyAgICA8JS0tIEhlYWRpbmdzIC0tJT4KKyAgICA8dHIgY2xhc3M9InJvbGxlcnRhYmxlIj4KKyAgICAgICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSIgd2lkdGg9IjIwJSUiPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5uYW1lIi8+PC90aD4KKyAgICAgICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSIgd2lkdGg9IjU1JSI+PHM6dGV4dCBuYW1lPSJwaW5nVGFyZ2V0LnBpbmdVcmwiLz48L3RoPgorICAgICAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iMTUlIiBjb2xzcGFuPSIyIj48czp0ZXh0IG5hbWU9InBpbmdUYXJnZXQuYXV0b0VuYWJsZWQiLz48L3RoPgorICAgICAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iNSUiPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5lZGl0Ii8+PC90aD4KKyAgICAgICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSIgd2lkdGg9IjUlIj48czp0ZXh0IG5hbWU9InBpbmdUYXJnZXQucmVtb3ZlIi8+PC90aD4KICAgICA8L3RyPgotPC9zOml0ZXJhdG9yPgorCisgICAgPCUtLSBMaXN0aW5nIG9mIGN1cnJlbnQgY29tbW9uIHRhcmdldHMgLS0lPgorICAgIDxzOml0ZXJhdG9yIHZhcj0icGluZ1RhcmdldCIgdmFsdWU9InBpbmdUYXJnZXRzIiBzdGF0dXM9InJvd3N0YXR1cyI+CisKKyAgICAgICAgPHRyIGNsYXNzPSJyb2xsZXJ0YWJsZV9vZGQiPgorCisgICAgICAgICAgICA8dGQgY2xhc3M9InJvbGxlcnRhYmxlIj48czpwcm9wZXJ0eSB2YWx1ZT0iI3BpbmdUYXJnZXQubmFtZSIvPjwvdGQ+CisKKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icm9sbGVydGFibGUiPjxzOnByb3BlcnR5IHZhbHVlPSIjcGluZ1RhcmdldC5waW5nVXJsIi8+PC90ZD4KKworICAgICAgICAgICAgPHRkIGNsYXNzPSJyb2xsZXJ0YWJsZSIgYWxpZ249ImNlbnRlciI+CisgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iI3BpbmdUYXJnZXQuYXV0b0VuYWJsZWQiPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICMwMGFhMDA7IGZvbnQtd2VpZ2h0OiBib2xkOyI+PHM6dGV4dCBuYW1lPSJwaW5nVGFyZ2V0LmVuYWJsZWQiLz48L3NwYW4+Jm5ic3A7CisgICAgICAgICAgICAgICAgPC9zOmlmPgorICAgICAgICAgICAgICAgIDxzOmVsc2U+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogI2FhYWFhYTsgZm9udC13ZWlnaHQ6IGJvbGQ7Ij48czp0ZXh0IG5hbWU9InBpbmdUYXJnZXQuZGlzYWJsZWQiLz48L3NwYW4+Jm5ic3A7CisgICAgICAgICAgICAgICAgPC9zOmVsc2U+CisgICAgICAgICAgICA8L3RkPgorCisgICAgICAgICAgICA8dGQgY2xhc3M9InJvbGxlcnRhYmxlIiBhbGlnbj0iY2VudGVyIj4KKyAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSIjcGluZ1RhcmdldC5hdXRvRW5hYmxlZCI+CisgICAgICAgICAgICAgICAgICAgIDxzOnVybCB2YXI9ImRpc2FibGVQaW5nIiBhY3Rpb249ImNvbW1vblBpbmdUYXJnZXRzIWRpc2FibGUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0icGluZ1RhcmdldElkIiB2YWx1ZT0iI3BpbmdUYXJnZXQuaWQiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zOnVybD4KKyAgICAgICAgICAgICAgICAgICAgPHM6YSBocmVmPSIle2Rpc2FibGVQaW5nfSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InBpbmdUYXJnZXQuZGlzYWJsZSIvPgorICAgICAgICAgICAgICAgICAgICA8L3M6YT4KKyAgICAgICAgICAgICAgICA8L3M6aWY+CisgICAgICAgICAgICAgICAgPHM6ZWxzZT4KKyAgICAgICAgICAgICAgICAgICAgPHM6dXJsIHZhcj0iZW5hYmxlUGluZyIgYWN0aW9uPSJjb21tb25QaW5nVGFyZ2V0cyFlbmFibGUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0icGluZ1RhcmdldElkIiB2YWx1ZT0iI3BpbmdUYXJnZXQuaWQiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zOnVybD4KKyAgICAgICAgICAgICAgICAgICAgPHM6YSBocmVmPSIle2VuYWJsZVBpbmd9Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0icGluZ1RhcmdldC5lbmFibGUiLz48L3M6YT4KKyAgICAgICAgICAgICAgICA8L3M6ZWxzZT4KKyAgICAgICAgICAgIDwvdGQ+CisKKyAgICAgICAgICAgIDx0ZCBjbGFzcz0icm9sbGVydGFibGUiIGFsaWduPSJjZW50ZXIiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9InNob3dBZGRFZGl0TW9kYWwoJzxzOnByb3BlcnR5IHZhbHVlPSIjcGluZ1RhcmdldC5pZCIvPicsCisgICAgICAgICAgICAgICAgICAgICAgICAnPHM6cHJvcGVydHkgdmFsdWU9IiNwaW5nVGFyZ2V0Lm5hbWUiIC8+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICc8czpwcm9wZXJ0eSB2YWx1ZT0iI3BpbmdUYXJnZXQucGluZ1VybCIgLz4nCisgICAgICAgICAgICAgICAgICAgICAgICApIj4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tZWRpdCIgYXJpYS1oaWRkZW49InRydWUiPiA8L3NwYW4+CisgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgPC90ZD4KKworICAgICAgICAgICAgPHRkIGNsYXNzPSJyb2xsZXJ0YWJsZSIgYWxpZ249ImNlbnRlciI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgb25jbGljaz0ic2hvd0RlbGV0ZU1vZGFsKCc8czpwcm9wZXJ0eSB2YWx1ZT0iI3BpbmdUYXJnZXQuaWQiLz4nKSI+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXRyYXNoIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8L3RkPgorCisgICAgICAgIDwvdHI+CisgICAgPC9zOml0ZXJhdG9yPgogCiA8L3RhYmxlPgogCiA8ZGl2IHN0eWxlPSJwYWRkaW5nOiA0cHg7IGZvbnQtd2VpZ2h0OiBib2xkOyI+CiAgICAgPHM6dXJsIHZhcj0iYWRkUGluZyIgYWN0aW9uPSJjb21tb25QaW5nVGFyZ2V0QWRkIj4KLSAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iYWN0aW9uV2VibG9nLmhhbmRsZSIgLz4KKyAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iYWN0aW9uV2VibG9nLmhhbmRsZSIvPgogICAgIDwvczp1cmw+Ci0gICAgPGltZyBzcmM9JzxzOnVybCB2YWx1ZT0iL2ltYWdlcy9hZGQucG5nIi8+JyBib3JkZXI9IjAiIGFsdD0iaWNvbiIgLz48czphIGhyZWY9IiV7YWRkUGluZ30iPjxzOnRleHQgbmFtZT0icGluZ1RhcmdldC5hZGRUYXJnZXQiIC8+PC9zOmE+CisgICAgPGEgaHJlZj0iIyIgb25jbGljaz0ic2hvd0FkZEVkaXRNb2RhbCgpIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcGx1cy1zaWduIiBhcmlhLWhpZGRlbj0idHJ1ZSI+IDwvc3Bhbj4KKyAgICAgICAgPHM6dGV4dCBuYW1lPSJwaW5nVGFyZ2V0LmFkZFRhcmdldCIvPgorICAgIDwvYT4KIDwvZGl2PgorCisKKzwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKworPGRpdiBpZD0iZGVsZXRlLXBpbmctdGFyZ2V0LW1vZGFsIiBjbGFzcz0ibW9kYWwgZmFkZSBwaW5nLXRhcmdldC1tb2RhbCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgorCisgICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLWxnIj4KKworICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KKworICAgICAgICAgICAgPHM6Zm9ybSB0aGVtZT0iYm9vdHN0cmFwIiBjc3NDbGFzcz0iZm9ybS1ob3Jpem9udGFsIj4KKyAgICAgICAgICAgICAgICA8czpoaWRkZW4gbmFtZT0ic2FsdCIvPgorICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBpZD0icmVtb3ZlSWQiIG5hbWU9InBpbmdUYXJnZXRJZCIvPgorCisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtdGl0bGUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGgzPjxzOnRleHQgbmFtZT0icGluZ1RhcmdldC5jb25maXJtUmVtb3ZlVGl0bGUiLz48L2gzPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InBpbmdUYXJnZXQuY29uZmlybUNvbW1vblJlbW92ZSIvPgorICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KKyAgICAgICAgICAgICAgICAgICAgPHM6c3VibWl0IGNzc0NsYXNzPSJidG4gYnRuLWRhbmdlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMueWVzJyl9IiBhY3Rpb249ImNvbW1vblBpbmdUYXJnZXRzIWRlbGV0ZSIvPgorICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImdlbmVyaWMuY2FuY2VsIi8+CisgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgorICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICA8L3M6Zm9ybT4KKworICAgICAgICA8L2Rpdj4KKworICAgIDwvZGl2PgorCis8L2Rpdj4KKworCis8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisKKzwlLS0gYWRkL2VkaXQgbGluayBmb3JtOiBhIG1vZGFsIC0tJT4KKworPGRpdiBpZD0iYWRkZWRpdC1waW5ndGFyZ2V0LW1vZGFsIiBjbGFzcz0ibW9kYWwgZmFkZSBhZGRlZGl0LXBpbmd0YXJnZXQtbW9kYWwiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIj4KKworICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC1sZyI+CisKKyAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CisKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisKKyAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJhY3Rpb25OYW1lID09ICdjb21tb25QaW5nVGFyZ2V0RWRpdCciPgorICAgICAgICAgICAgICAgICAgICA8czpzZXQgdmFyPSJzdWJ0aXRsZUtleSI+cGluZ1RhcmdldEVkaXQuc3VidGl0bGU8L3M6c2V0PgorICAgICAgICAgICAgICAgIDwvczppZj4KKyAgICAgICAgICAgICAgICA8czplbHNlPgorICAgICAgICAgICAgICAgICAgICA8czpzZXQgdmFyPSJzdWJ0aXRsZUtleSI+cGluZ1RhcmdldEFkZC5zdWJ0aXRsZTwvczpzZXQ+CisgICAgICAgICAgICAgICAgPC9zOmVsc2U+CisKKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC10aXRsZSI+CisgICAgICAgICAgICAgICAgICAgIDxoMz4gPHM6dGV4dCBuYW1lPSIleyNzdWJ0aXRsZUtleX0iPiA8L3M6dGV4dD4gPC9oMz4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgPC9kaXY+IDwlLS0gbW9kYWwgaGVhZGVyIC0tJT4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisKKyAgICAgICAgICAgICAgICA8czpmb3JtIGlkPSJwaW5nVGFyZ2V0RWRpdEZvcm0iIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLWhvcml6b250YWwiPgorICAgICAgICAgICAgICAgICAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5pZCIvPgorICAgICAgICAgICAgICAgICAgICA8czpoaWRkZW4gbmFtZT0ic2FsdCIvPgorICAgICAgICAgICAgICAgICAgICA8czpoaWRkZW4gbmFtZT0iYWN0aW9uTmFtZSIvPgorCisgICAgICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLm5hbWUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIiBzdHlsZT0id2lkdGg6NTAlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9InZhbGlkYXRlKCkiIG9ua2V5dXA9InZhbGlkYXRlKCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCdnZW5lcmljLm5hbWUnKX0iIC8+CisKKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4ucGluZ1VybCIgc2l6ZT0iMTAwIiBtYXhsZW5ndGg9IjI1NSIgc3R5bGU9IndpZHRoOjUwJSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2hhbmdlPSJ2YWxpZGF0ZSgpIiBvbmtleXVwPSJ2YWxpZGF0ZSgpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgncGluZ1RhcmdldC5waW5nVXJsJyl9IiAvPgorICAgICAgICAgICAgICAgIDwvczpmb3JtPgorCisgICAgICAgICAgICA8L2Rpdj4gPCUtLSBtb2RhbCBib2R5IC0tJT4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KKworICAgICAgICAgICAgICAgIDxwIGlkPSJmZWVkYmFjay1hcmVhLWVkaXQiPjwvcD4KKworICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBpZD0ic2F2ZV9waW5nX3RhcmdldCIgb25jbGljaz0ic2F2ZVBpbmdUYXJnZXQoKSIgY2xhc3M9ImJ0biBidG4tc3VjY2VzcyI+CisgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iZ2VuZXJpYy5zYXZlIi8+CisgICAgICAgICAgICAgICAgPC9idXR0b24+CisKKyAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+CisgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iZ2VuZXJpYy5jYW5jZWwiLz4KKyAgICAgICAgICAgICAgICA8L2J1dHRvbj4KKworICAgICAgICAgICAgPC9kaXY+IDwlLS0gbW9kYWwgZm9vdGVyIC0tJT4KKworICAgICAgICA8L2Rpdj4gPCUtLSBtb2RhbCBjb250ZW50IC0tJT4KKworICAgIDwvZGl2PiA8JS0tIG1vZGFsIGRpYWxvZyAtLSU+CisKKzwvZGl2PiA8JS0tIG1vZGFsIC0tJT4KKworCis8JS0tIHBhZ2UgcmVsb2FkIG1lY2hhbmlzbSAtLSU+Cis8czpmb3JtIGFjdGlvbj0iY29tbW9uUGluZ1RhcmdldHMhZXhlY3V0ZSI+CisgICAgPHM6aGlkZGVuIG5hbWU9InNhbHQiLz4KKyAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIi8+Cis8L3M6Zm9ybT4KKworCis8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisKKzxzY3JpcHQ+CisKKyAgICBmdW5jdGlvbiBzaG93RGVsZXRlTW9kYWwoIHJlbW92ZUlkICkgeworICAgICAgICAkKCcjcmVtb3ZlSWQnKS52YWwocmVtb3ZlSWQpOworICAgICAgICAkKCcjZGVsZXRlLXBpbmctdGFyZ2V0LW1vZGFsJykubW9kYWwoe3Nob3c6IHRydWV9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzaG93QWRkRWRpdE1vZGFsKHBpbmdUYXJnZXRJZCwgbmFtZSwgdXJsKSB7CisgICAgICAgIGlmICggcGluZ1RhcmdldElkICkgeworICAgICAgICAgICAgJCgnI3BpbmdUYXJnZXRFZGl0Rm9ybV9hY3Rpb25OYW1lOmZpcnN0JykudmFsKCJjb21tb25QaW5nVGFyZ2V0RWRpdCIpOworICAgICAgICAgICAgJCgnI3BpbmdUYXJnZXRFZGl0Rm9ybV9iZWFuX2lkOmZpcnN0JykudmFsKHBpbmdUYXJnZXRJZCk7CisgICAgICAgICAgICAkKCcjcGluZ1RhcmdldEVkaXRGb3JtX2JlYW5fbmFtZTpmaXJzdCcpLnZhbChuYW1lKTsKKyAgICAgICAgICAgICQoJyNwaW5nVGFyZ2V0RWRpdEZvcm1fYmVhbl9waW5nVXJsOmZpcnN0JykudmFsKHVybCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkKCcjcGluZ1RhcmdldEVkaXRGb3JtX2FjdGlvbk5hbWU6Zmlyc3QnKS52YWwoImNvbW1vblBpbmdUYXJnZXRBZGQiKTsKKyAgICAgICAgICAgICQoJyNwaW5nVGFyZ2V0RWRpdEZvcm1fYmVhbl9uYW1lOmZpcnN0JykudmFsKCIiKTsKKyAgICAgICAgICAgICQoJyNwaW5nVGFyZ2V0RWRpdEZvcm1fYmVhbl9waW5nVXJsOmZpcnN0JykudmFsKCIiKTsKKyAgICAgICAgfQorICAgICAgICAkKCcjYWRkZWRpdC1waW5ndGFyZ2V0LW1vZGFsJykubW9kYWwoe3Nob3c6IHRydWV9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB2YWxpZGF0ZSgpIHsKKyAgICAgICAgdmFyIHNhdmVQaW5nVGFyZ2V0QnV0dG9uID0gJCgnI3NhdmUtYnV0dG9uOmZpcnN0Jyk7CisgICAgICAgIHZhciBuYW1lID0gJCgnI3BpbmdUYXJnZXRFZGl0Rm9ybV9iZWFuX25hbWU6Zmlyc3QnKS52YWwoKS50cmltKCk7CisgICAgICAgIHZhciB1cmwgPSAkKCcjcGluZ1RhcmdldEVkaXRGb3JtX2JlYW5fcGluZ1VybDpmaXJzdCcpLnZhbCgpLnRyaW0oKTsKKyAgICAgICAgaWYgKCBuYW1lLmxlbmd0aCA+IDAgJiYgdXJsLmxlbmd0aCA+IDAgJiYgaXNWYWxpZFVybCh1cmwpICkgeworICAgICAgICAgICAgc2F2ZVBpbmdUYXJnZXRCdXR0b24uYXR0cigiZGlzYWJsZWQiLCBmYWxzZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzYXZlUGluZ1RhcmdldEJ1dHRvbi5hdHRyKCJkaXNhYmxlZCIsIHRydWUpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNWYWxpZFVybCh1cmwpIHsKKyAgICAgICAgaWYgKC9eKGh0dHB8aHR0cHN8ZnRwKTpcL1wvW2EtejAtOV0rKFtcLVwuXXsxfVthLXowLTldKykqXC5bYS16XXsyLDV9KDpbMC05XXsxLDV9KT8oXC8uKik/JC9pLnRlc3QodXJsKSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAkKCBkb2N1bWVudCApLnJlYWR5KGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc2F2ZVBpbmdUYXJnZXRCdXR0b24gPSAkKCcjc2F2ZS1idXR0b246Zmlyc3QnKTsKKyAgICAgICAgc2F2ZVBpbmdUYXJnZXRCdXR0b24uYXR0cigiZGlzYWJsZWQiLCB0cnVlKTsKKyAgICB9KTsKKworICAgIGZ1bmN0aW9uIHZpZXdDaGFuZ2VkKCkgeworICAgICAgICB2YXIgZm9ybSA9ICQoIiNjb21tb25QaW5nVGFyZ2V0cyIpWzBdOworICAgICAgICBmb3JtLnN1Ym1pdCgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHNhdmVQaW5nVGFyZ2V0KCkgeworCisgICAgICAgIHZhciBmZWVkYmFja0FyZWFFZGl0ID0gJCgiI2ZlZWRiYWNrLWFyZWEtZWRpdCIpOworCisgICAgICAgIHZhciBhY3Rpb25OYW1lID0gJCgnI3BpbmdUYXJnZXRFZGl0Rm9ybV9hY3Rpb25OYW1lOmZpcnN0JykudmFsKCk7CisKKyAgICAgICAgLy8gcG9zdCBwaW5nIHRhcmdldCB2aWEgQUpBWAorICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAgbWV0aG9kOiAncG9zdCcsCisgICAgICAgICAgICB1cmw6IGFjdGlvbk5hbWUgKyAiLnJvbCNzYXZlIiwKKyAgICAgICAgICAgIGRhdGE6ICQoIiNwaW5nVGFyZ2V0RWRpdEZvcm0iKS5zZXJpYWxpemUoKSwKKyAgICAgICAgICAgIGNvbnRleHQ6IGRvY3VtZW50LmJvZHkKKworICAgICAgICB9KS5kb25lKGZ1bmN0aW9uIChkYXRhKSB7CisKKyAgICAgICAgICAgIC8vIGtsdWRnZTogc2NyYXBlIHJlc3BvbnNlIHN0YXR1cyBmcm9tIEhUTUwgcmV0dXJuZWQgYnkgU3RydXRzCisgICAgICAgICAgICB2YXIgYWxlcnRFbmQgPSBkYXRhLmluZGV4T2YoIkFMRVJUX0VORCIpOworICAgICAgICAgICAgdmFyIG5vdFVuaXF1ZSA9IGRhdGEuaW5kZXhPZigiPHM6dGV4dCBuYW1lPSdwaW5nVGFyZ2V0Lm5hbWVOb3RVbmlxdWUnIC8+Iik7CisgICAgICAgICAgICBpZiAobm90VW5pcXVlID4gMCAmJiBub3RVbmlxdWUgPCBhbGVydEVuZCkgeworICAgICAgICAgICAgICAgIGZlZWRiYWNrQXJlYUVkaXQuY3NzKCJjb2xvciIsICJyZWQiKTsKKyAgICAgICAgICAgICAgICBmZWVkYmFja0FyZWFFZGl0Lmh0bWwoJzxzOnRleHQgbmFtZT0icGluZ1RhcmdldC5uYW1lTm90VW5pcXVlIiAvPicpOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZlZWRiYWNrQXJlYUVkaXQuY3NzKCJjb2xvciIsICJncmVlbiIpOworICAgICAgICAgICAgICAgIGZlZWRiYWNrQXJlYUVkaXQuaHRtbCgnPHM6dGV4dCBuYW1lPSJnZW5lcmljLnN1Y2Nlc3MiIC8+Jyk7CisgICAgICAgICAgICAgICAgJCgnI2FkZGVkaXQtcGluZ3RhcmdldC1tb2RhbCcpLm1vZGFsKCJoaWRlIik7CisKKyAgICAgICAgICAgICAgICAvLyBjYXVzZSBwYWdlIHRvIGJlIHJlbG9hZGVkIHNvIHRoYXQgZWRpdCBhcHBlYXJzCisgICAgICAgICAgICAgICAgdmlld0NoYW5nZWQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9KS5lcnJvcihmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAgZmVlZGJhY2tBcmVhRWRpdC5odG1sKCc8czp0ZXh0IG5hbWU9ImdlbmVyaWMuZXJyb3IuY2hlY2subG9ncyIgLz4nKTsKKyAgICAgICAgICAgIGZlZWRiYWNrQXJlYUVkaXQuY3NzKCJjb2xvciIsICJyZWQiKTsKKyAgICAgICAgfSk7CisgICAgfQorCis8L3NjcmlwdD4KKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvYWRtaW4vUGxhbmV0Q29uZmlnLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL1BsYW5ldENvbmZpZy5qc3AKaW5kZXggYzlhNjYwNy4uOTM2YTQyNiAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvYWRtaW4vUGxhbmV0Q29uZmlnLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9hZG1pbi9QbGFuZXRDb25maWcuanNwCkBAIC0xOSw2NyArMTksNTUgQEAKIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KIAogCi08cCBjbGFzcz0ic3VidGl0bGUiPjxzOnRleHQgbmFtZT0icGxhbmV0Q29uZmlnLnN1YnRpdGxlIiAvPjwvYT4KLTxwPjxzOnRleHQgbmFtZT0icGxhbmV0Q29uZmlnLnByb21wdCIgLz48L2E+Cis8cCBjbGFzcz0ic3VidGl0bGUiPjxzOnRleHQgbmFtZT0icGxhbmV0Q29uZmlnLnN1YnRpdGxlIi8+PC9wPgorPHA+PHM6dGV4dCBuYW1lPSJwbGFuZXRDb25maWcucHJvbXB0Ii8+PC9wPgogCi08czpmb3JtIGFjdGlvbj0icGxhbmV0Q29uZmlnIXNhdmUiPgotCTxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgogCi0gICAgPHRhYmxlIGNsYXNzPSJmb3JtdGFibGVOb0Rlc2MiPgotICAgIAorPHM6Zm9ybSBhY3Rpb249InBsYW5ldENvbmZpZyFzYXZlIiB0aGVtZT0iYm9vdHN0cmFwIiBjc3NDbGFzcz0iZm9ybS1ob3Jpem9udGFsIj4KKyAgICA8czpoaWRkZW4gbmFtZT0ic2FsdCIvPgorCiAgICAgPHM6aXRlcmF0b3IgdmFyPSJkZyIgdmFsdWU9Imdsb2JhbENvbmZpZ0RlZi5kaXNwbGF5R3JvdXBzIj4KLSAgICAKLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPjxoMj48czp0ZXh0IG5hbWU9IiV7I2RnLmtleX0iIC8+PC9oMj48L3RkPgotICAgICAgICA8L3RyPgotICAgIAorCisgICAgICAgIDxoMj48czp0ZXh0IG5hbWU9IiV7I2RnLmtleX0iLz48L2gyPgorCiAgICAgICAgIDxzOml0ZXJhdG9yIHZhcj0icGQiIHZhbHVlPSIjZGcucHJvcGVydHlEZWZzIj4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxzOnRleHQgbmFtZT0iJXsjcGQua2V5fSIgLz48L3RkPgotICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIDwlLS0gInN0cmluZyIgdHlwZSBtZWFucyB1c2UgYSBzaW1wbGUgdGV4dGJveCAtLSU+Ci0gICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSIjcGQudHlwZSA9PSAnc3RyaW5nJyI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSc8czpwcm9wZXJ0eSB2YWx1ZT0iI3BkLm5hbWUiLz4nIHZhbHVlPSc8czpwcm9wZXJ0eSB2YWx1ZT0icHJvcGVydGllc1sjcGQubmFtZV0udmFsdWUiLz4nIHNpemU9IjM1IiAvPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3M6aWY+Ci0gICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgIDwlLS0gInRleHQiIHR5cGUgbWVhbnMgdXNlIGEgZnVsbCB0ZXh0YXJlYSAtLSU+Ci0gICAgICAgICAgICAgICAgICA8czplbHNlaWYgdGVzdD0iI3BkLnR5cGUgPT0gJ3RleHQnIj4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG5hbWU9JzxzOnByb3BlcnR5IHZhbHVlPSIjcGQubmFtZSIvPicgcm93cz0iPHM6cHJvcGVydHkgdmFsdWU9IiNwZC5yb3dzIi8+IiBjb2xzPSI8czpwcm9wZXJ0eSB2YWx1ZT0iI3BkLmNvbHMiLz4iPjxzOnByb3BlcnR5IHZhbHVlPSJwcm9wZXJ0aWVzWyNwZC5uYW1lXS52YWx1ZSIvPjwvdGV4dGFyZWE+Ci0gICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICA8L3M6ZWxzZWlmPgotICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICA8JS0tICJib29sZWFuIiB0eXBlIG1lYW5zIHVzZSBhIGNoZWNrYm94IC0tJT4KLSAgICAgICAgICAgICAgICAgIDxzOmVsc2VpZiB0ZXN0PSIjcGQudHlwZSA9PSAnYm9vbGVhbiciPgotICAgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9InByb3BlcnRpZXNbI3BkLm5hbWVdLnZhbHVlID09ICd0cnVlJyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0nPHM6cHJvcGVydHkgdmFsdWU9IiNwZC5uYW1lIi8+JyBDSEVDS0VEPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgICAgICAgICAgIDxzOmVsc2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0nPHM6cHJvcGVydHkgdmFsdWU9IiNwZC5uYW1lIi8+Jz48L3RkPgotICAgICAgICAgICAgICAgICAgICAgIDwvczplbHNlPgotICAgICAgICAgICAgICAgICAgPC9zOmVsc2VpZj4KLSAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgPCUtLSBpZiBpdCdzIHNvbWV0aGluZyB3ZSBkb24ndCB1bmRlcnN0YW5kIHRoZW4gdXNlIHRleHRib3ggLS0lPgotICAgICAgICAgICAgICAgICAgPHM6ZWxzZT4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9JzxzOnByb3BlcnR5IHZhbHVlPSIjcGQubmFtZSIvPicgc2l6ZT0iNTAiIC8+PC90ZD4KLSAgICAgICAgICAgICAgICAgIDwvczplbHNlPgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjwlLS0gPHM6dGV4dCBuYW1lPSIiIC8+IC0tJT48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAKKworICAgICAgICAgICAgPCUtLSAic3RyaW5nIiB0eXBlIG1lYW5zIHVzZSBhIHNpbXBsZSB0ZXh0Ym94IC0tJT4KKyAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiNwZC50eXBlID09ICdzdHJpbmcnIj4KKyAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iJXsjcGQubmFtZX0iIGxhYmVsPSIle2dldFRleHQoI3BkLmtleSl9IiBzaXplPSIzNSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiV7cHJvcGVydGllc1sjcGQubmFtZV0udmFsdWV9ICIvPgorICAgICAgICAgICAgPC9zOmlmPgorCisgICAgICAgICAgICA8JS0tICJ0ZXh0IiB0eXBlIG1lYW5zIHVzZSBhIGZ1bGwgdGV4dGFyZWEgLS0lPgorICAgICAgICAgICAgPHM6ZWxzZWlmIHRlc3Q9IiNwZC50eXBlID09ICd0ZXh0JyI+CisgICAgICAgICAgICAgICAgPHM6dGV4dGFyZWEgbmFtZT0iJXsjcGQubmFtZX0iIGxhYmVsPSIle2dldFRleHQoI3BkLmtleSl9IiByb3dzPSIjcGQucm93cyIgY29scz0iI3BkLmNvbHMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiV7cHJvcGVydGllc1sjcGQubmFtZV0udmFsdWV9ICIvPgorICAgICAgICAgICAgPC9zOmVsc2VpZj4KKworICAgICAgICAgICAgPCUtLSAiYm9vbGVhbiIgdHlwZSBtZWFucyB1c2UgYSBjaGVja2JveCAtLSU+CisgICAgICAgICAgICA8czplbHNlaWYgdGVzdD0iI3BkLnR5cGUgPT0gJ2Jvb2xlYW4nIj4KKworICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9InByb3BlcnRpZXNbI3BkLm5hbWVdLnZhbHVlID09ICd0cnVlJyI+CisgICAgICAgICAgICAgICAgICAgIDxzOmNoZWNrYm94IG5hbWU9IiV7I3BkLm5hbWV9IiBsYWJlbD0iJXtnZXRUZXh0KCNwZC5rZXkpfSIgY3NzQ2xhc3M9ImJvb2xlYW4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWU9InRydWUiIGNoZWNrZWQ9InRydWUiIG9uY2hhbmdlPSJmb3JtQ2hhbmdlZCgpIi8+CisgICAgICAgICAgICAgICAgPC9zOmlmPgorICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9InByb3BlcnRpZXNbI3BkLm5hbWVdLnZhbHVlICE9ICd0cnVlJyI+CisgICAgICAgICAgICAgICAgICAgIDxzOmNoZWNrYm94IG5hbWU9IiV7I3BkLm5hbWV9IiBsYWJlbD0iJXtnZXRUZXh0KCNwZC5rZXkpfSIgY3NzQ2xhc3M9ImJvb2xlYW4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWU9ImZhbHNlIiBvbmNoYW5nZT0iZm9ybUNoYW5nZWQoKSIvPgorICAgICAgICAgICAgICAgIDwvczppZj4KKworICAgICAgICAgICAgPC9zOmVsc2VpZj4KKworICAgICAgICAgICAgPCUtLSBpZiBpdCdzIHNvbWV0aGluZyB3ZSBkb24ndCB1bmRlcnN0YW5kIHRoZW4gdXNlIHRleHRib3ggLS0lPgorICAgICAgICAgICAgPHM6ZWxzZT4KKyAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iJXsjcGQubmFtZX0iIGxhYmVsPSIle2dldFRleHQoI3BkLmtleSl9IiBzaXplPSIzNSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9IiV7cHJvcGVydGllc1sjcGQubmFtZV0udmFsdWV9Ii8+CisgICAgICAgICAgICA8L3M6ZWxzZT4KKwogICAgICAgICA8L3M6aXRlcmF0b3I+Ci0gICAgICAKLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPiZuYnNwOzwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICAgIAorCiAgICAgPC9zOml0ZXJhdG9yPgogCi0gICAgPC90YWJsZT4KLSAgICAKLSAgICA8ZGl2IGNsYXNzPSJjb250cm9sIj4KLSAgICAgICAgPGlucHV0IGNsYXNzPSJidXR0b25Cb3giIHR5cGU9InN1Ym1pdCIgdmFsdWU9IjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5zYXZlIi8+Ii8+Ci0gICAgPC9kaXY+Ci0gICAgCisgICAgIDxpbnB1dCBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSI8czp0ZXh0IG5hbWU9ImdlbmVyaWMuc2F2ZSIvPiIvPgorCiA8L3M6Zm9ybT4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL1BsYW5ldEdyb3VwU2lkZWJhci5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9hZG1pbi9QbGFuZXRHcm91cFNpZGViYXIuanNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MGFkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9hZG1pbi9QbGFuZXRHcm91cFNpZGViYXIuanNwCkBAIC0wLDAgKzEsMzQgQEAKKzwlLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UKKyAgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcKKyAgY29weXJpZ2h0IGluIHRoaXMgd29yaywgcGxlYXNlIHNlZSB0aGUgTk9USUNFIGZpbGUgaW4gdGhlIHRvcCBsZXZlbAorICBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCistLSU+Cis8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+CisKKworPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorPCUtLSBhZGQgbmV3IGN1c3RvbSBwbGFuZXQgZ3JvdXAgLS0lPgorCis8aDM+PHM6dGV4dCBuYW1lPSJtYWluUGFnZS5hY3Rpb25zIi8+PC9oMz4KKzxociBzaXplPSIxIiBub3NoYWRlPSJub3NoYWRlIi8+CisKKzxzOnVybCB2YXI9ImNyZWF0ZU5ld1VybCIgYWN0aW9uPSJwbGFuZXRHcm91cFN1YnMiIG5hbWVzcGFjZT0iL3JvbGxlci11aS9hZG1pbiI+CisgICAgPHM6cGFyYW0gbmFtZT0iY3JlYXRlTmV3Ij50cnVlPC9zOnBhcmFtPgorPC9zOnVybD4KKworPHM6YSBocmVmPSIle2NyZWF0ZU5ld1VybH0iPgorICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXBsdXMiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPC9zcGFuPgorICAgIENyZWF0ZSBuZXcgQ3VzdG9tIFBsYW5ldCBHcm91cAorPC9zOmE+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9hZG1pbi9QbGFuZXRHcm91cFN1YnMuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvYWRtaW4vUGxhbmV0R3JvdXBTdWJzLmpzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTdlZTgwCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvYWRtaW4vUGxhbmV0R3JvdXBTdWJzLmpzcApAQCAtMCwwICsxLDE2NCBAQAorPCUtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdQorICB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZworICBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCisgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KKy0tJT4KKzwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KKworICAgICAgICAKKzwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKzwlLS0gYWRkL2VkaXQgY3VzdG9tIHBsYW5ldCBncm91cCBmb3JtIC0tJT4KKworCis8JS0tIHRpdGxlIGZvciBkZWZhdWx0IHBsYW5ldCBncm91cCAtLSU+Cis8czppZiB0ZXN0PSJncm91cEhhbmRsZSA9PSAnYWxsJyIgPgorICAgIDxwIGNsYXNzPSJzdWJ0aXRsZSI+PHM6dGV4dCBuYW1lPSJwbGFuZXRHcm91cFN1YnMuZGVmYXVsdC5zdWJ0aXRsZSIgLz48L3A+CisgICAgPHA+PHM6dGV4dCBuYW1lPSJwbGFuZXRHcm91cFN1YnMuZGVmYXVsdC5kZXNjIiAvPjwvcD4KKzwvczppZj4KKworPCUtLSB0aXRsZSBmb3IgYSBjdXN0b20gcGxhbmV0IGdyb3VwIC0tJT4KKzxzOmVsc2U+CisgICAgPHM6aWYgdGVzdD0iY3JlYXRlTmV3Ij4KKyAgICAgICAgPHAgY2xhc3M9InN1YnRpdGxlIj4KKyAgICAgICAgICAgIDxzOnRleHQgbmFtZT0icGxhbmV0R3JvdXBTdWJzLmN1c3RvbS5zdWJ0aXRsZS5uZXciIC8+CisgICAgICAgIDwvcD4KKyAgICA8L3M6aWY+CisgICAgPHM6ZWxzZT4KKyAgICAgICAgPHAgY2xhc3M9InN1YnRpdGxlIj4KKyAgICAgICAgICAgIDxzOnRleHQgbmFtZT0icGxhbmV0R3JvdXBTdWJzLmN1c3RvbS5zdWJ0aXRsZSIgPgorICAgICAgICAgICAgICAgIDxzOnBhcmFtIHZhbHVlPSJncm91cEhhbmRsZSIgLz4KKyAgICAgICAgICAgIDwvczp0ZXh0PgorICAgICAgICA8L3A+CisgICAgPC9zOmVsc2U+CisgICAgPHA+PHM6dGV4dCBuYW1lPSJwbGFuZXRHcm91cFN1YnMuY3VzdG9tLmRlc2MiIC8+PC9wPgorPC9zOmVsc2U+CisKKworPCUtLSBvbmx5IHNob3cgZWRpdCBmb3JtIGZvciBjdXN0b20gZ3JvdXAgLS0lPgorPHM6aWYgdGVzdD0iZ3JvdXBIYW5kbGUgIT0gJ2FsbCciPgorCisgICAgPGRpdiBjbGFzcz0icGFuZWwgcGFuZWwtZGVmYXVsdCI+CisgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWhlYWRpbmciPgorICAgICAgICAgICAgPHA+PHM6dGV4dCBuYW1lPSJwbGFuZXRHcm91cFN1YnMucHJvcGVydGllcyIvPjwvcD4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiPgorICAgICAgICAgICAgPHM6aWYgdGVzdD0iY3JlYXRlTmV3Ij4KKyAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InBsYW5ldEdyb3VwU3Vicy5jcmVhdGluZ05ld0dyb3VwIiAvPgorICAgICAgICAgICAgPC9zOmlmPgorICAgICAgICAgICAgPHM6ZWxzZT4KKyAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InBsYW5ldEdyb3VwU3Vicy5lZGl0aW5nRXhpc3RpbmdHcm91cCIgLz4KKyAgICAgICAgICAgIDwvczplbHNlPgorCisgICAgICAgICAgICA8czpmb3JtIGFjdGlvbj0icGxhbmV0R3JvdXBTdWJzIXNhdmVHcm91cCIgdGhlbWU9ImJvb3RzdHJhcCIgY3NzQ2xhc3M9ImZvcm0taG9yaXpvbnRhbCIgc3R5bGU9Im1hcmdpbi10b3A6MWVtIj4KKyAgICAgICAgICAgICAgICA8czpoaWRkZW4gbmFtZT0ic2FsdCIvPgorICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJncm91cC5pZCIvPgorCisgICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9Imdyb3VwLnRpdGxlIiBzaXplPSI0MCIgbWF4bGVuZ3RoPSIyNTUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2hhbmdlPSJ2YWxpZGF0ZSgpIiBvbmtleXVwPSJ2YWxpZGF0ZSgpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCdwbGFuZXRHcm91cHMudGl0bGUnKX0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiV7Z2V0VGV4dCgncGxhbmV0R3JvdXBzLnRpcC50aXRsZScpfSIvPgorCisgICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9Imdyb3VwLmhhbmRsZSIgc2l6ZT0iNDAiIG1heGxlbmd0aD0iMjU1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNoYW5nZT0idmFsaWRhdGUoKSIgb25rZXl1cD0idmFsaWRhdGUoKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgncGxhbmV0R3JvdXBzLmhhbmRsZScpfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCdwbGFuZXRHcm91cHMudGlwLmhhbmRsZScpfSIvPgorCisKKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwICI+CisgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY29sLXNtLTMgY29udHJvbC1sYWJlbCI+PC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTkgY29udHJvbHMiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMuc2F2ZScpfSIgY3NzQ2xhc3M9ImJ0biBidG4tZGVmYXVsdCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iY3JlYXRlTmV3Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nPHM6dGV4dCBuYW1lPSJnZW5lcmljLmNhbmNlbCIgLz4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbj0nPHM6dXJsIGFjdGlvbj0icGxhbmV0R3JvdXBzIi8+JyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgPC9zOmZvcm0+CisKKyAgICAgICAgPC9kaXY+CisgICAgPC9kaXY+CisKKzwvczppZj4KKworCis8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+Cis8JS0tIHRhYmxlIG9mIHBsYW5ldCBncm91cCdzIHN1YnNjcmlwdGlvbiAgLS0lPgorCis8czppZiB0ZXN0PSIhY3JlYXRlTmV3Ij4KKworICAgIDxoMz48czp0ZXh0IG5hbWU9InBsYW5ldEdyb3VwU3Vicy5zdWJzY3JpcHRpb25zIi8+PC9oMz4KKyAgICA8czp0ZXh0IG5hbWU9InBsYW5ldEdyb3VwU3Vicy5zdWJzY3JpcHRpb25EZXNjIiAvPgorCisgICAgPHM6aWYgdGVzdD0iJXtzdWJzY3JpcHRpb25zLmlzRW1wdHkoKX0iPgorICAgICAgICA8czppZiB0ZXN0PSJncm91cEhhbmRsZSA9PSAnYWxsJyI+CisgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InBsYW5ldEdyb3VwU3Vicy5ub25lRGVmaW5lZERlZmF1bHQiIC8+CisgICAgICAgIDwvczppZj4KKyAgICAgICAgPHM6ZWxzZT4KKyAgICAgICAgICAgIDxzOnRleHQgbmFtZT0icGxhbmV0R3JvdXBTdWJzLm5vbmVEZWZpbmVkQ3VzdG9tIiAvPgorICAgICAgICA8L3M6ZWxzZT4KKyAgICA8L3M6aWY+CisgICAgPHM6ZWxzZT4KKworICAgICAgICA8dGFibGUgY2xhc3M9InRhYmxlIj4KKyAgICAgICAgICAgIDx0cj4KKyAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjMwJSI+IDxzOnRleHQgbmFtZT0icGxhbmV0R3JvdXBTdWJzLmNvbHVtbi50aXRsZSIvPiA8L3RoPgorICAgICAgICAgICAgICAgIDx0aCB3aWR0aD0iNTUlIj4gPHM6dGV4dCBuYW1lPSJwbGFuZXRHcm91cFN1YnMuY29sdW1uLmZlZWRVcmwiLz4gPC90aD4KKyAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjE1JSI+IDxzOnRleHQgbmFtZT0iZ2VuZXJpYy5kZWxldGUiLz4gPC90aD4KKyAgICAgICAgICAgIDwvdHI+CisKKyAgICAgICAgICAgIDxzOml0ZXJhdG9yIHZhcj0ic3ViIiB2YWx1ZT0ic3Vic2NyaXB0aW9ucyI+CisgICAgICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InJvbGxlcnRhYmxlIj48czpwcm9wZXJ0eSB2YWx1ZT0iI3N1Yi50aXRsZSIvPjwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD48czpzZXQgdmFyPSJmZWVkVVJMIiB2YWx1ZT0iI3N1Yi5mZWVkVVJMIi8+ICR7Zm46c3Vic3RyaW5nKGZlZWRVUkwsIDAsIDEwMCl9IDwvdGQ+CisgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6IHZvaWQoMCk7IiBvbmNsaWNrPSJjb25maXJtRGVsZXRlKCc8czpwcm9wZXJ0eSB2YWx1ZT0iZmVlZFVSTCIvPicpIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1yZW1vdmUiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iZ2VuZXJpYy5kZWxldGUiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC9zOml0ZXJhdG9yPgorICAgICAgICA8L3RhYmxlPgorCisgICAgICAgIDwlLS0gcGxhbmV0IHN1YnNjcmlwdGlvbiBkZWxldGUgbG9naWMgLS0lPgorCisgICAgICAgIDxzOmZvcm0gYWN0aW9uPSJwbGFuZXRHcm91cFN1YnMhZGVsZXRlU3Vic2NyaXB0aW9uIiBpZD0iZGVsZXRlRm9ybSI+CisgICAgICAgICAgICA8czpoaWRkZW4gbmFtZT0ic2FsdCIvPgorICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9Imdyb3VwLmhhbmRsZSIvPgorICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3ViVXJsIi8+CisgICAgICAgIDwvczpmb3JtPgorCisgICAgPC9zOmVsc2U+CisKKzwvczppZj4KKworCis8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisKKzxzY3JpcHQ+CisKKyAgICBmdW5jdGlvbiBjb25maXJtRGVsZXRlKHN1YlVybCkgeworICAgICAgICBpZiAod2luZG93LmNvbmZpcm0oJzxzOnRleHQgbmFtZT0icGxhbmV0R3JvdXBTdWJzLmRlbGV0ZS5jb25maXJtIiAvPicpKSB7CisgICAgICAgICAgICB2YXIgZm9ybSA9ICQoIiNkZWxldGVGb3JtIik7CisgICAgICAgICAgICBmb3JtLmZpbmQoJ2lucHV0W25hbWU9InN1YlVybCJdJykudmFsKHN1YlVybCk7CisgICAgICAgICAgICBmb3JtLmZpbmQoJ2lucHV0W25hbWU9Imdyb3VwSGFuZGxlIl0nKS52YWwoJzxzOnByb3BlcnR5IHZhbHVlPSJncm91cEhhbmRsZSIgLz4nKTsKKyAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7CisgICAgICAgIH0KKyAgICB9CisKKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL1BsYW5ldEdyb3VwU3Vic1NpZGViYXIuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvYWRtaW4vUGxhbmV0R3JvdXBTdWJzU2lkZWJhci5qc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ2ZTFiYgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL1BsYW5ldEdyb3VwU3Vic1NpZGViYXIuanNwCkBAIC0wLDAgKzEsNzIgQEAKKzwlLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UKKyAgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcKKyAgY29weXJpZ2h0IGluIHRoaXMgd29yaywgcGxlYXNlIHNlZSB0aGUgTk9USUNFIGZpbGUgaW4gdGhlIHRvcCBsZXZlbAorICBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCistLSU+Cis8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+CisKKworPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorPCUtLSBhZGQgbmV3IHBsYW5ldCBmZWVkIHN1YnNjcmlwdGlvbiAtLSU+CisKKzxzOmlmIHRlc3Q9IiFjcmVhdGVOZXciPgorCisgICAgPGgzPjxzOnRleHQgbmFtZT0ibWFpblBhZ2UuYWN0aW9ucyIvPjwvaDM+CisgICAgPGhyIHNpemU9IjEiIG5vc2hhZGU9Im5vc2hhZGUiLz4KKworICAgIDxzOnRleHQgbmFtZT0icGxhbmV0R3JvdXBTdWJzLmFkZEZlZWQiLz4KKworICAgIDxzOmZvcm0gYWN0aW9uPSJwbGFuZXRHcm91cFN1YnMhc2F2ZVN1YnNjcmlwdGlvbiIKKyAgICAgICAgICAgIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLWhvcml6b250YWwiIHN0eWxlPSJtYXJnaW4tdG9wOjFlbSI+CisgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0Ii8+CisgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJncm91cC5oYW5kbGUiLz4KKworICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0ic3ViVXJsIiBzaXplPSI0MCIgbWF4bGVuZ3RoPSIyNTUiIGxhYmVsPSIle2dldFRleHQoJ3BsYW5ldFN1YnNjcmlwdGlvbi5mZWVkVXJsJyl9IgorICAgICAgICAgICAgb25jaGFuZ2U9InZhbGlkYXRlVXJsKCkiIG9ua2V5dXA9InZhbGlkYXRlVXJsKCkiIC8+CisKKyAgICAgICAgPHAgaWQ9ImZlZWRiYWNrLWFyZWEiIHN0eWxlPSJjbGVhcjpyaWdodDsgd2lkdGg6MTAwJSI+PC9wPgorCisgICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLnNhdmUnKX0iIGNzc0NsYXNzPSJidG4gYnRuLWRlZmF1bHQiIC8+CisKKyAgICA8L3M6Zm9ybT4KKworICAgIDxzY3JpcHQ+CisKKyAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVVcmwoKSB7CisgICAgICAgICAgICB2YXIgZmVlZGJhY2tBcmVhID0gJCgiI2ZlZWRiYWNrLWFyZWEiKTsKKyAgICAgICAgICAgIHZhciB1cmwgPSAkKCIjcGxhbmV0R3JvdXBTdWJzX3N1YlVybCIpLnZhbCgpOworICAgICAgICAgICAgdmFyIHNhdmVCdXR0b24gPSAkKCcjcGxhbmV0R3JvdXBTdWJzXzAnKTsKKworICAgICAgICAgICAgaWYgKHVybCAmJiB1cmwudHJpbSgpICE9PSAnJykgeworICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZFVybCh1cmwpKSB7CisgICAgICAgICAgICAgICAgICAgIHNhdmVCdXR0b24uYXR0cigiZGlzYWJsZWQiLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgZmVlZGJhY2tBcmVhLmh0bWwoJzxzOnRleHQgbmFtZT0icGxhbmV0R3JvdXBTdWJzLmJhZEZlZWRVUkwiIC8+Jyk7CisgICAgICAgICAgICAgICAgICAgIGZlZWRiYWNrQXJlYS5jc3MoImNvbG9yIiwgInJlZCIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmZWVkYmFja0FyZWEuaHRtbCgnJyk7CisgICAgICAgICAgICBzYXZlQnV0dG9uLmF0dHIoImRpc2FibGVkIiwgZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgJCggZG9jdW1lbnQgKS5yZWFkeShmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHZhciBzYXZlQnV0dG9uID0gJCgnI3BsYW5ldEdyb3VwU3Vic18wJyk7CisgICAgICAgICAgICBzYXZlQnV0dG9uLmF0dHIoImRpc2FibGVkIiwgdHJ1ZSk7CisgICAgICAgIH0pOworICAgIDwvc2NyaXB0PgorCis8L3M6aWY+CisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL1BsYW5ldEdyb3Vwcy5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9hZG1pbi9QbGFuZXRHcm91cHMuanNwCmluZGV4IGY1MThhYzYuLjYyMjNlZTMgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL1BsYW5ldEdyb3Vwcy5qc3AKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvYWRtaW4vUGxhbmV0R3JvdXBzLmpzcApAQCAtMTcsMTA5ICsxNyw2OSBAQAogLS0lPgogPCVAIGluY2x1ZGUgZmlsZT0iL1dFQi1JTkYvanNwcy90YWdsaWJzLXN0cnV0czIuanNwIiAlPgogCi08cCBjbGFzcz0ic3VidGl0bGUiPjxzOnRleHQgbmFtZT0icGxhbmV0R3JvdXBzLnN1YnRpdGxlIiAvPjwvcD4KKzxwIGNsYXNzPSJzdWJ0aXRsZSI+PHM6dGV4dCBuYW1lPSJwbGFuZXRHcm91cHMuc3VidGl0bGUiLz48L3A+CiAKLTxwPgotICAgIDxzOmlmIHRlc3Q9Imdyb3VwID09IG51bGwiID4KLSAgICAgICAgPHM6dGV4dCBuYW1lPSJwbGFuZXRHcm91cHMucHJvbXB0LmFkZCIgLz4KLSAgICA8L3M6aWY+Ci0gICAgPHM6ZWxzZT4KLSAgICAgICAgPHM6dGV4dCBuYW1lPSJwbGFuZXRHcm91cHMucHJvbXB0LmVkaXQiIC8+Ci0gICAgPC9zOmVsc2U+Ci08L3A+CiAKLTxzOmZvcm0gYWN0aW9uPSJwbGFuZXRHcm91cHMhc2F2ZSI+Ci0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4uaWQiIC8+Ci0gICAgCi0gICAgPGRpdiBjbGFzcz0iZm9ybXJvdyI+Ci0gICAgICAgIDxsYWJlbCBmb3I9ImJlYW4udGl0bGUiIGNsYXNzPSJmb3Jtcm93IiAvPjxzOnRleHQgbmFtZT0icGxhbmV0R3JvdXBzLnRpdGxlIiAvPjwvbGFiZWw+Ci0gICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnRpdGxlIiBzaXplPSI0MCIgbWF4bGVuZ3RoPSIyNTUiIC8+Ci0gICAgICAgIDxpbWcgc3JjPSI8czp1cmwgdmFsdWU9Ii9pbWFnZXMvaGVscC5wbmciLz4iIGFsdD0iaGVscCIgdGl0bGU9JzxzOnRleHQgbmFtZT0icGxhbmV0R3JvdXBzLnRpcC50aXRsZSIgLz4nIC8+Ci0gICAgPC9kaXY+Ci0gICAgCi0gICAgPGRpdiBjbGFzcz0iZm9ybXJvdyI+Ci0gICAgICAgIDxsYWJlbCBmb3I9ImJlYW4uaGFuZGxlIiBjbGFzcz0iZm9ybXJvdyIgLz48czp0ZXh0IG5hbWU9InBsYW5ldEdyb3Vwcy5oYW5kbGUiIC8+PC9sYWJlbD4KLSAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uaGFuZGxlIiBzaXplPSI0MCIgbWF4bGVuZ3RoPSIyNTUiIC8+Ci0gICAgICAgIDxpbWcgc3JjPSI8czp1cmwgdmFsdWU9Ii9pbWFnZXMvaGVscC5wbmciLz4iIGFsdD0iaGVscCIgdGl0bGU9JzxzOnRleHQgbmFtZT0icGxhbmV0R3JvdXBzLnRpcC5oYW5kbGUiIC8+JyAvPgotICAgIDwvZGl2PgotICAgIAotICAgIDxwIC8+Ci0gICAgCi0gICAgPGRpdiBjbGFzcz0iZm9ybXJvdyI+Ci0gICAgICAgIDxsYWJlbCBjbGFzcz0iZm9ybXJvdyIgLz4mbmJzcDs8L2xhYmVsPgotICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5zYXZlJyl9IiAvPgotICAgICAgICAmbmJzcDsKLSAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgCi0gICAgICAgICAgICAgICB2YWx1ZT0nPHM6dGV4dCBuYW1lPSJnZW5lcmljLmNhbmNlbCIgLz4nCi0gICAgICAgICAgICAgICBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb249JzxzOnVybCBhY3Rpb249InBsYW5ldEdyb3VwcyIvPiciLz4KLSAgICAgICAgCi0gICAgICAgIDxzOmlmIHRlc3Q9Imdyb3VwICE9IG51bGwiID4KLSAgICAgICAgICAgICZuYnNwOyZuYnNwOwotICAgICAgICAgICAgPHM6dXJsIHZhcj0iZGVsZXRlVXJsIiBhY3Rpb249InBsYW5ldEdyb3VwcyFkZWxldGUiPgotICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9ImJlYW4uaWQiIHZhbHVlPSIle2JlYW4uaWR9IiAvPgotICAgICAgICAgICAgPC9zOnVybD4KLSAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIAotICAgICAgICAgICAgICAgICAgIHZhbHVlPSc8czp0ZXh0IG5hbWU9ImdlbmVyaWMuZGVsZXRlIiAvPicKLSAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb249JzxzOnByb3BlcnR5IHZhbHVlPSIle2RlbGV0ZVVybH0iLz4nIiAvPgotICAgICAgICA8L3M6aWY+Ci0gICAgPC9kaXY+Ci0gICAgCi08L3M6Zm9ybT4KKzwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKzwlLS0gdGFibGUgb2YgY3VzdG9tIHBsYW5ldCBncm91cHMgKGV4Y2x1ZGluZyB0aGUgZGVmYXVsdCBncm91cCkgLS0lPgogCi08YnIgc3R5bGU9ImNsZWFyOmxlZnQiIC8+Cis8czppZiB0ZXN0PSIleyFncm91cHMuaXNFbXB0eSgpfSI+CiAKLTxoMj48czp0ZXh0IG5hbWU9InBsYW5ldEdyb3Vwcy5leGlzdGluZ1RpdGxlIiAvPjwvaDI+Ci08cD48aT48czp0ZXh0IG5hbWU9InBsYW5ldEdyb3Vwcy5leGlzdGluZ1Byb21wdCIgLz48L2k+PC9wPgorICAgIDx0YWJsZSBjbGFzcz0idGFibGUiPgogCi08dGFibGUgY2xhc3M9InJvbGxlcnRhYmxlIj4KLTx0ciBjbGFzcz0ickhlYWRlclRyIj4KLSAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iMzAlIj4KLSAgICAgICAgPHM6dGV4dCBuYW1lPSJwbGFuZXRHcm91cHMuY29sdW1uLnRpdGxlIiAvPgotICAgIDwvdGg+Ci0gICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSIgd2lkdGg9IjUwJSI+Ci0gICAgICAgIDxzOnRleHQgbmFtZT0icGxhbmV0R3JvdXBzLmNvbHVtbi5oYW5kbGUiIC8+Ci0gICAgPC90aD4KLSAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iMTAlIj4KLSAgICAgICAgPHM6dGV4dCBuYW1lPSJnZW5lcmljLmVkaXQiIC8+Ci0gICAgPC90aD4KLSAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iMTAlIj4KLSAgICAgICAgPHM6dGV4dCBuYW1lPSJwbGFuZXRHcm91cHMuY29sdW1uLnN1YnNjcmlwdGlvbnMiIC8+Ci0gICAgPC90aD4KLTwvdHI+CisgICAgICAgIDx0cj4KKyAgICAgICAgICAgIDx0aCB3aWR0aD0iNTAlIj4gPHM6dGV4dCBuYW1lPSJwbGFuZXRHcm91cHMuY29sdW1uLnRpdGxlIi8+IDwvdGg+CisgICAgICAgICAgICA8dGggd2lkdGg9IjIwJSI+IDxzOnRleHQgbmFtZT0icGxhbmV0R3JvdXBzLmNvbHVtbi5oYW5kbGUiLz4gPC90aD4KKyAgICAgICAgICAgIDx0aCB3aWR0aD0iMTUlIj4gPHM6dGV4dCBuYW1lPSJnZW5lcmljLmVkaXQiLz4gPC90aD4KKyAgICAgICAgICAgIDx0aCB3aWR0aD0iMTUlIj4gPHM6dGV4dCBuYW1lPSJnZW5lcmljLmRlbGV0ZSIvPiA8L3RoPgorICAgICAgICA8L3RyPgogCi08czppdGVyYXRvciB2YXI9Imdyb3VwIiB2YWx1ZT0iZ3JvdXBzIiBzdGF0dXM9InJvd3N0YXR1cyI+Ci0gICAgPHM6aWYgdGVzdD0iI3Jvd3N0YXR1cy5vZGQgPT0gdHJ1ZSI+Ci0gICAgICAgIDx0ciBjbGFzcz0icm9sbGVydGFibGVfb2RkIj4KLSAgICA8L3M6aWY+Ci0gICAgPHM6ZWxzZT4KLSAgICAgICAgPHRyIGNsYXNzPSJyb2xsZXJ0YWJsZV9ldmVuIj4KLSAgICA8L3M6ZWxzZT4KLSAgICAKLSAgICA8dGQgY2xhc3M9InJvbGxlcnRhYmxlIj4KLSAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9IiNncm91cC50aXRsZSIgLz4KLSAgICA8L3RkPgotICAgIAotICAgIDx0ZCBjbGFzcz0icm9sbGVydGFibGUiPgotICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iI2dyb3VwLmhhbmRsZSIgLz4KLSAgICA8L3RkPgotICAgIAotICAgIDx0ZCBjbGFzcz0icm9sbGVydGFibGUiPgotICAgICAgICA8czp1cmwgdmFyPSJncm91cFVybCIgYWN0aW9uPSJwbGFuZXRHcm91cHMiPgotICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0iYmVhbi5pZCIgdmFsdWU9IiNncm91cC5pZCIgLz4KLSAgICAgICAgPC9zOnVybD4KLSAgICAgICAgPHM6YSBocmVmPSIle2dyb3VwVXJsfSI+PGltZyBzcmM9JzxzOnVybCB2YWx1ZT0iL2ltYWdlcy9wYWdlX3doaXRlX2VkaXQucG5nIi8+JyBib3JkZXI9IjAiIGFsdD0iaWNvbiIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9IjxzOnRleHQgbmFtZT0ncGxhbmV0R3JvdXBzLmVkaXQudGlwJyAvPiIgLz48L3M6YT4KLSAgICA8L3RkPiAgICAgICAKLSAgICAKLSAgICA8dGQgY2xhc3M9InJvbGxlcnRhYmxlIj4KLSAgICAgICAgPHM6dXJsIHZhcj0ic3ViVXJsIiBhY3Rpb249InBsYW5ldFN1YnNjcmlwdGlvbnMiPgotICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0iZ3JvdXBIYW5kbGUiIHZhbHVlPSIjZ3JvdXAuaGFuZGxlIiAvPgotICAgICAgICA8L3M6dXJsPgotICAgICAgICA8czphIGhyZWY9IiV7c3ViVXJsfSI+PGltZyBzcmM9JzxzOnVybCB2YWx1ZT0iL2ltYWdlcy9wYWdlX3doaXRlX2VkaXQucG5nIi8+JyBib3JkZXI9IjAiIGFsdD0iaWNvbiIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSI8czp0ZXh0IG5hbWU9J3BsYW5ldEdyb3Vwcy5zdWJzY3JpcHRpb25zLnRpcCcgLz4iIC8+PC9zOmE+Ci0gICAgPC90ZD4gICAgICAgCi0gICAgCi0gICAgPC90cj4KLTwvczppdGVyYXRvcj4KLTwvdGFibGU+CisgICAgICAgIDxzOml0ZXJhdG9yIHZhcj0iZ3JvdXAiIHZhbHVlPSJncm91cHMiPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0ZD4gPHM6cHJvcGVydHkgdmFsdWU9IiNncm91cC50aXRsZSIvPiA8L3RkPgorICAgICAgICAgICAgICAgIDx0ZD4gPHM6cHJvcGVydHkgdmFsdWU9IiNncm91cC5oYW5kbGUiLz4gPC90ZD4KKworICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgPHM6dXJsIHZhcj0iZ3JvdXBVcmwiIGFjdGlvbj0icGxhbmV0R3JvdXBTdWJzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9Imdyb3VwLmlkIiB2YWx1ZT0iI2dyb3VwLmlkIi8+CisgICAgICAgICAgICAgICAgICAgIDwvczp1cmw+CisgICAgICAgICAgICAgICAgICAgIDxzOmEgaHJlZj0iJXtncm91cFVybH0iPgorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tZWRpdCIgYXJpYS1oaWRkZW49InRydWUiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0nZ2VuZXJpYy5lZGl0Jy8+CisgICAgICAgICAgICAgICAgICAgIDwvczphPgorICAgICAgICAgICAgICAgIDwvdGQ+CisKKyAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6IHZvaWQoMCk7IiBvbmNsaWNrPSJjb25maXJtRGVsZXRlKCc8czpwcm9wZXJ0eSB2YWx1ZT0iI2dyb3VwLmhhbmRsZSIvPicpIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXJlbW92ZSIgYXJpYS1oaWRkZW49InRydWUiPiA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImdlbmVyaWMuZGVsZXRlIi8+CisgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICA8L3RkPgorCisgICAgICAgICAgICA8L3RyPgorICAgICAgICA8L3M6aXRlcmF0b3I+CisKKyAgICA8L3RhYmxlPgorCisgICAgPCUtLSBwbGFuZXQgZ3JvdXAgZGVsZXRlIGxvZ2ljIC0tJT4KKworICAgIDxzOmZvcm0gYWN0aW9uPSJwbGFuZXRHcm91cHMhZGVsZXRlIiBpZD0iZGVsZXRlRm9ybSI+CisgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNhbHQiIHZhbHVlPSc8czpwcm9wZXJ0eSB2YWx1ZT0ic2FsdCIgLz4nIC8+CisgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Imdyb3VwLmhhbmRsZSIvPgorICAgIDwvczpmb3JtPgorCisgICAgPHNjcmlwdD4KKyAgICAgICAgZnVuY3Rpb24gY29uZmlybURlbGV0ZShncm91cEhhbmRsZSkgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKCc8czp0ZXh0IG5hbWU9InBsYW5ldEdyb3Vwcy5kZWxldGUuY29uZmlybSIgLz4nKSkgeworICAgICAgICAgICAgICAgIHZhciBmb3JtID0gJCgiI2RlbGV0ZUZvcm0iKTsKKyAgICAgICAgICAgICAgICBmb3JtLmZpbmQoJ2lucHV0W25hbWU9Imdyb3VwLmhhbmRsZSJdJykudmFsKGdyb3VwSGFuZGxlKTsKKyAgICAgICAgICAgICAgICBmb3JtLnN1Ym1pdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisKKzwvczppZj4KKzxzOmVsc2U+CisgICAgPHM6dGV4dCBuYW1lPSJwbGFuZXRHcm91cHMubm9uZURlZmluZWQiLz4KKzwvczplbHNlPgorCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9hZG1pbi9QbGFuZXRTdWJzY3JpcHRpb25zLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL1BsYW5ldFN1YnNjcmlwdGlvbnMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMmI5ZTQxLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL1BsYW5ldFN1YnNjcmlwdGlvbnMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTwlLS0KLSAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UKLSAgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90Ci0gIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcKLSAgY29weXJpZ2h0IGluIHRoaXMgd29yaywgcGxlYXNlIHNlZSB0aGUgTk9USUNFIGZpbGUgaW4gdGhlIHRvcCBsZXZlbAotICBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCi0tLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+Ci0KLTxzY3JpcHQ+Ci1mdW5jdGlvbiBjb25maXJtU3ViRGVsZXRlKHN1YlVybCkgewotICBpZiAod2luZG93LmNvbmZpcm0oJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBzdWJzY3JpcHRpb24/JykpIHsKLSAgICBkb2N1bWVudC5sb2NhdGlvbi5ocmVmPSc8czp1cmwgYWN0aW9uPSJwbGFuZXRTdWJzY3JpcHRpb25zIWRlbGV0ZSIgLz4/Z3JvdXBIYW5kbGU9PHM6cHJvcGVydHkgdmFsdWU9Imdyb3VwSGFuZGxlIi8+JnN1YlVybD0nK2VuY29kZVVSSUNvbXBvbmVudChzdWJVcmwpOwotICB9Ci19Ci08L3NjcmlwdD4KLSAgICAgICAgCi0gICAgICAKLTxzOmlmIHRlc3Q9Imdyb3VwSGFuZGxlID09ICdhbGwnIiA+Ci0gICAgPHAgY2xhc3M9InN1YnRpdGxlIj48czp0ZXh0IG5hbWU9InBsYW5ldFN1YnNjcmlwdGlvbnMuc3VidGl0bGUuYWRkTWFpbiIgLz48L3A+Ci0gICAgPHA+PHM6dGV4dCBuYW1lPSJwbGFuZXRTdWJzY3JpcHRpb25zLnByb21wdC5hZGRNYWluIiAvPjwvcD4KLTwvczppZj4KLTxzOmVsc2U+Ci0gICAgPHAgY2xhc3M9InN1YnRpdGxlIj4KLSAgICAgICAgPHM6dGV4dCBuYW1lPSJwbGFuZXRTdWJzY3JpcHRpb25zLnN1YnRpdGxlLmFkZCIgPgotICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9Imdyb3VwSGFuZGxlIiAvPgotICAgICAgICA8L3M6dGV4dD4KLSAgICA8L3A+Ci0gICAgPHA+PHM6dGV4dCBuYW1lPSJwbGFuZXRTdWJzY3JpcHRpb25zLnByb21wdC5hZGQiIC8+PC9wPgotPC9zOmVsc2U+Ci0KLQotPHM6Zm9ybSBhY3Rpb249InBsYW5ldFN1YnNjcmlwdGlvbnMhc2F2ZSI+Ci0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9Imdyb3VwSGFuZGxlIiAvPgotICAgIAotICAgIDxkaXYgY2xhc3M9ImZvcm1yb3ciPgotICAgICAgICA8bGFiZWwgZm9yPSJmZWVkVVJMIiBjbGFzcz0iZm9ybXJvdyIgLz48czp0ZXh0IG5hbWU9InBsYW5ldFN1YnNjcmlwdGlvbi5mZWVkVXJsIiAvPjwvbGFiZWw+Ci0gICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJzdWJVcmwiIHNpemU9IjQwIiBtYXhsZW5ndGg9IjI1NSIgLz4KLSAgICAgICAgJm5ic3A7PHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMuc2F2ZScpfSIgLz4KLSAgICA8L2Rpdj4KLTwvczpmb3JtPgotCi08YnIgc3R5bGU9ImNsZWFyOmxlZnQiIC8+Ci0KLTxoMj4KLSAgICA8czp0ZXh0IG5hbWU9InBsYW5ldFN1YnNjcmlwdGlvbnMuZXhpc3RpbmdUaXRsZSIgLz4KLSAgICA8czppZiB0ZXN0PSJncm91cEhhbmRsZSAhPSAnYWxsJyIgPgotICAgICAgICAmbmJzcDtbZ3JvdXA6IDxzOnByb3BlcnR5IHZhbHVlPSJncm91cEhhbmRsZSIgLz5dCi0gICAgPC9zOmlmPgotPC9oMj4KLQotPHRhYmxlIGNsYXNzPSJyb2xsZXJ0YWJsZSI+Ci0gICAgPHRyIGNsYXNzPSJySGVhZGVyVHIiPgotICAgICAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iMzAlIj4KLSAgICAgICAgICAgIDxzOnRleHQgbmFtZT0icGxhbmV0U3Vic2NyaXB0aW9ucy5jb2x1bW4udGl0bGUiIC8+Ci0gICAgICAgIDwvdGg+Ci0gICAgICAgIDx0aCBjbGFzcz0icm9sbGVydGFibGUiIHdpZHRoPSI2MCUiPgotICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJwbGFuZXRTdWJzY3JpcHRpb25zLmNvbHVtbi5mZWVkVXJsIiAvPgotICAgICAgICA8L3RoPgotICAgICAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iMTAlIj4KLSAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iZ2VuZXJpYy5kZWxldGUiIC8+Ci0gICAgICAgIDwvdGg+Ci0gICAgPC90cj4KLSAgICA8czppdGVyYXRvciB2YXI9InN1YiIgdmFsdWU9InN1YnNjcmlwdGlvbnMiIHN0YXR1cz0icm93c3RhdHVzIj4KLSAgICAgICAgPHM6aWYgdGVzdD0iI3Jvd3N0YXR1cy5vZGQgPT0gdHJ1ZSI+Ci0gICAgICAgICAgICA8dHIgY2xhc3M9InJvbGxlcnRhYmxlX29kZCI+Ci0gICAgICAgIDwvczppZj4KLSAgICAgICAgPHM6ZWxzZT4KLSAgICAgICAgICAgIDx0ciBjbGFzcz0icm9sbGVydGFibGVfZXZlbiI+Ci0gICAgICAgIDwvczplbHNlPgotICAgICAgICAKLSAgICAgICAgPHRkIGNsYXNzPSJyb2xsZXJ0YWJsZSI+Ci0gICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iI3N1Yi50aXRsZSIgLz4KLSAgICAgICAgPC90ZD4KLSAgICAgICAgCi0gICAgICAgIDx0ZCBjbGFzcz0icm9sbGVydGFibGUiPgotICAgICAgICAgICAgPHM6c2V0IHZhcj0iZmVlZFVSTCIgdmFsdWU9IiNzdWIuZmVlZFVSTCIgLz4KLSAgICAgICAgICAgICR7Zm46c3Vic3RyaW5nKGZlZWRVUkwsIDAsIDEwMCl9Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIAotICAgICAgICA8dGQgY2xhc3M9InJvbGxlcnRhYmxlIj4KLSAgICAgICAgICAgIDxpbWcgc3JjPSc8czp1cmwgdmFsdWU9Ii9pbWFnZXMvZGVsZXRlLnBuZyIvPicgLz4KLSAgICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6IHZvaWQoMCk7IiBvbmNsaWNrPSJjb25maXJtU3ViRGVsZXRlKCc8czpwcm9wZXJ0eSB2YWx1ZT0iZmVlZFVSTCIvPicpIj4KLSAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImdlbmVyaWMuZGVsZXRlIi8+Ci0gICAgICAgICAgICA8L2E+Ci0gICAgICAgIDwvdGQ+ICAgICAgIAotICAgICAgICAKLSAgICAgICAgPC90cj4KLSAgICA8L3M6aXRlcmF0b3I+Ci08L3RhYmxlPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvYWRtaW4vVXNlckFkbWluLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL1VzZXJBZG1pbi5qc3AKaW5kZXggZjgyMjU5NC4uNjMxMDk5NyAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvYWRtaW4vVXNlckFkbWluLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9hZG1pbi9Vc2VyQWRtaW4uanNwCkBAIC0yMSwzNSArMjEsMzggQEAKIDwlQCBpbmNsdWRlIGZpbGU9Ii9yb2xsZXItdWkvc2NyaXB0cy9hamF4LXVzZXIuanMiICU+CiA8L3NjcmlwdD4KIAotPHAgY2xhc3M9InN1YnRpdGxlIj48czp0ZXh0IG5hbWU9InVzZXJBZG1pbi5zdWJ0aXRsZS5zZWFyY2hVc2VyIiAvPjwvcD4KLTxwPjxzOnRleHQgbmFtZT0idXNlckFkbWluLnByb21wdC5zZWFyY2hVc2VyIiAvPjwvcD4KKzxwIGNsYXNzPSJzdWJ0aXRsZSI+Cis8Yj48czp0ZXh0IG5hbWU9InVzZXJBZG1pbi5zdWJ0aXRsZS5zZWFyY2hVc2VyIiAvPjwvYj4KKzxzOnRleHQgbmFtZT0idXNlckFkbWluLnByb21wdC5zZWFyY2hVc2VyIiAvPgorPC9wPgogCi08czpmb3JtIGFjdGlvbj0ibW9kaWZ5VXNlciIgbWV0aG9kPSJHRVQiPgorPHM6Zm9ybSBhY3Rpb249InVzZXJBZG1pbiFlZGl0IiBtZXRob2Q9IlBPU1QiIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLXZlcnRpY2FsIj4KICAgIAk8czpoaWRkZW4gbmFtZT0ic2FsdCIgLz4KLSAKLSAgICA8c3BhbiBzdHlsZT0ibWFyZ2luOjRweCI+PHM6dGV4dCBuYW1lPSJpbnZpdGVNZW1iZXIudXNlck5hbWUiIC8+PC9zcGFuPgotICAgIDxpbnB1dCBuYW1lPSJiZWFuLnVzZXJOYW1lIiBpZD0idXNlck5hbWUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIgotICAgICAgICAgICBvbmZvY3VzPSJvblVzZXJOYW1lRm9jdXMobnVsbCkiIG9ua2V5dXA9Im9uVXNlck5hbWVDaGFuZ2UobnVsbCkiIAotICAgICAgICAgICBzdHlsZT0ibWFyZ2luOjRweCIgLz4KLSAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0nPHM6dGV4dCBuYW1lPSJnZW5lcmljLmVkaXQiIC8+JwotICAgICAgICAgICBzdHlsZT0ibWFyZ2luOjRweCIgLz4KLSAgICA8YnIgLz4KLSAgICA8c2VsZWN0IGlkPSJ1c2VyTGlzdCIgc2l6ZT0iMTAiIG9uY2hhbmdlPSJvblVzZXJTZWxlY3RlZCgpIiAKLSAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDo0MDBweDsgbWFyZ2luOjRweCIgPjwvc2VsZWN0PgotICAgIAorCisgICAgPHM6dGV4dGZpZWxkIGNzc0NsYXNzPSJmb3JtLWNvbnRyb2wiCisgICAgICAgIGlkPSJ1c2VyTmFtZSIKKyAgICAgICAgbmFtZT0iYmVhbi51c2VyTmFtZSIKKyAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgnaW52aXRlTWVtYmVyLnVzZXJOYW1lJyl9IgorICAgICAgICBvbmZvY3VzPSJvblVzZXJOYW1lRm9jdXMobnVsbCkiCisgICAgICAgIG9ua2V5dXA9Im9uVXNlck5hbWVDaGFuZ2UobnVsbCkiIC8+CisKKyAgICA8czpzZWxlY3QgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9InVzZXJMaXN0IiBzaXplPSIxMCIgb25jaGFuZ2U9Im9uVXNlclNlbGVjdGVkKCkiIGxpc3Q9ImJlYW4ubGlzdCIgLz4KKworICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBpZD0idXNlci1zdWJtaXQiPgorICAgICAgICA8czp0ZXh0IG5hbWU9ImdlbmVyaWMuZWRpdCIgLz4KKyAgICA8L2J1dHRvbj4KKwogPC9zOmZvcm0+CiAKLTwlLS0gTERBUCB1c2VzIGV4dGVybmFsIHVzZXIgY3JlYXRpb24gLS0lPgotPHM6aWYgdGVzdD0iYXV0aE1ldGhvZCAhPSAnTERBUCciPgotICAgIDxwIGNsYXNzPSJzdWJ0aXRsZSI+PHM6dGV4dCBuYW1lPSJ1c2VyQWRtaW4uc3VidGl0bGUudXNlckNyZWF0aW9uIiAvPjwvcD4KKzxzOmlmIHRlc3Q9ImF1dGhNZXRob2QgIT0gJ0xEQVAnIj4gPCUtLSBpZiB3ZSdyZSBub3QgZG9pbmcgTERBUCB3ZSBjYW4gY3JlYXRlIG5ldyB1c2VycyBpbiBSb2xsZXIgLS0lPgorCisgICAgPGgzPjxzOnRleHQgbmFtZT0idXNlckFkbWluLnN1YnRpdGxlLnVzZXJDcmVhdGlvbiIgLz48L2gzPgogICAgIDxzOnRleHQgbmFtZT0idXNlckFkbWluLnByb21wdC5vcllvdUNhbiIgLz4KICAgICA8czp1cmwgYWN0aW9uPSJjcmVhdGVVc2VyIiB2YXI9ImNyZWF0ZVVzZXIiIC8+CiAgICAgPGEgaHJlZj0iPHM6cHJvcGVydHkgdmFsdWU9ImNyZWF0ZVVzZXIiIC8+Ij4KICAgICAgICAgPHM6dGV4dCBuYW1lPSJ1c2VyQWRtaW4ucHJvbXB0LmNyZWF0ZUFOZXdVc2VyIiAvPgogICAgIDwvYT4KKwogPC9zOmlmPgogCi08JS0tIHRoaXMgZm9yY2VzIGZvY3VzIHRvIHRoZSB1c2VyTmFtZSBmaWVsZCAtLSU+Ci08c2NyaXB0PgotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VyTmFtZScpLmZvY3VzKCk7Ci08L3NjcmlwdD4KKzxzY3JpcHQ+IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd1c2VyTmFtZScpLmZvY3VzKCk7IDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvYWRtaW4vVXNlckVkaXQuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvYWRtaW4vVXNlckVkaXQuanNwCmluZGV4IDc5YjA4ZWYuLjk0NzhlOWMgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2FkbWluL1VzZXJFZGl0LmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9hZG1pbi9Vc2VyRWRpdC5qc3AKQEAgLTE1LDE2ICsxNSwxNyBAQAogICBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCiAgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KIC0tJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4gCis8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+CisKIAogPCUtLSBUaXRsaW5nLCBwcm9jZXNzaW5nIGFjdGlvbnMgZGlmZmVyZW50IGJldHdlZW4gYWRkIGFuZCBlZGl0IC0tJT4KLTxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ21vZGlmeVVzZXInIj4KLSAgICA8czpzZXQgdmFyPSJzdWJ0aXRsZUtleSI+dXNlckFkbWluLnN1YnRpdGxlLmVkaXRVc2VyPC9zOnNldD4KLSAgICA8czpzZXQgdmFyPSJtYWluQWN0aW9uIj5tb2RpZnlVc2VyPC9zOnNldD4KLTwvczppZj4KLTxzOmVsc2U+Cis8czppZiB0ZXN0PSJhY3Rpb25OYW1lID09ICdjcmVhdGVVc2VyJyI+CiAgICAgPHM6c2V0IHZhcj0ic3VidGl0bGVLZXkiPnVzZXJBZG1pbi5zdWJ0aXRsZS5jcmVhdGVOZXdVc2VyPC9zOnNldD4KICAgICA8czpzZXQgdmFyPSJtYWluQWN0aW9uIj5jcmVhdGVVc2VyPC9zOnNldD4KKzwvczppZj4KKzxzOmVsc2U+CisgICAgPHM6c2V0IHZhcj0ic3VidGl0bGVLZXkiPnVzZXJBZG1pbi5zdWJ0aXRsZS5lZGl0VXNlcjwvczpzZXQ+CisgICAgPHM6c2V0IHZhcj0ibWFpbkFjdGlvbiI+bW9kaWZ5VXNlcjwvczpzZXQ+CiA8L3M6ZWxzZT4KIAogPHAgY2xhc3M9InN1YnRpdGxlIj4KQEAgLTM4LDExNiArMzksNzYgQEAKICAgICAgICAgPHM6dGV4dCBuYW1lPSJ1c2VyQWRtaW4uYWRkSW5zdHJ1Y3Rpb25zIi8+CiAgICAgPC9zOmlmPgogICAgIDxzOmlmIHRlc3Q9ImF1dGhNZXRob2QgPT0gJ0RCX09QRU5JRCciPgotICAgICAgICA8cCBjbGFzcz0icGFnZXRpcCI+Ci0gICAgICAgICAgICA8czp0ZXh0IG5hbWU9InVzZXJBZG1pbi5ub1Bhc3N3b3JkRm9yT3BlbklEIi8+Ci0gICAgICAgIDwvcD4KKyAgICAgICAgIDxzOnRleHQgbmFtZT0idXNlckFkbWluLm5vUGFzc3dvcmRGb3JPcGVuSUQiLz4KICAgICA8L3M6aWY+CiA8L3A+CiAKLTxzOmZvcm0+Cis8czpmb3JtIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLWhvcml6b250YWwiPgogCTxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgogICAgIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ21vZGlmeVVzZXInIj4KICAgICAgICAgPCUtLSBiZWFuIGZvciBhZGQgZG9lcyBub3QgaGF2ZSBhIGJlYW4gaWQgeWV0IC0tJT4KICAgICAgICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4uaWQiIC8+CiAgICAgPC9zOmlmPgogCi0gICAgPHRhYmxlIGNsYXNzPSJmb3JtdGFibGUiPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48bGFiZWwgZm9yPSJ1c2VyTmFtZSIgLz48czp0ZXh0IG5hbWU9InVzZXJTZXR0aW5ncy51c2VybmFtZSIgLz48L2xhYmVsPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj4KLSAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJhY3Rpb25OYW1lID09ICdtb2RpZnlVc2VyJyI+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnVzZXJOYW1lIiBzaXplPSIzMCIgbWF4bGVuZ3RoPSIzMCIgcmVhZG9ubHk9InRydWUiIGNzc1N0eWxlPSJiYWNrZ3JvdW5kOiAjZTVlNWU1IiAvPgotICAgICAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgICAgICA8czplbHNlPgotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi51c2VyTmFtZSIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iMzAiIC8+Ci0gICAgICAgICAgICAgICAgPC9zOmVsc2U+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+Ci0gICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iYWN0aW9uTmFtZSA9PSAnbW9kaWZ5VXNlciciPgotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InVzZXJTZXR0aW5ncy50aXAudXNlcm5hbWUiIC8+Ci0gICAgICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgICAgIDxzOmVsc2U+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0idXNlckFkbWluLnRpcC51c2VyTmFtZSIgLz4KLSAgICAgICAgICAgICAgICA8L3M6ZWxzZT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0KLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGxhYmVsIGZvcj0ic2NyZWVuTmFtZSIgLz48czp0ZXh0IG5hbWU9InVzZXJTZXR0aW5ncy5zY3JlZW5uYW1lIiAvPjwvbGFiZWw+PC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnNjcmVlbk5hbWUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIiAvPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48czp0ZXh0IG5hbWU9InVzZXJBZG1pbi50aXAuc2NyZWVuTmFtZSIgLz48L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICAKLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGxhYmVsIGZvcj0iZnVsbE5hbWUiIC8+PHM6dGV4dCBuYW1lPSJ1c2VyU2V0dGluZ3MuZnVsbG5hbWUiIC8+PC9sYWJlbD48L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+PHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uZnVsbE5hbWUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIiAvPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48czp0ZXh0IG5hbWU9InVzZXJBZG1pbi50aXAuZnVsbE5hbWUiIC8+PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgCi0gICAgICAgIDxzOmlmIHRlc3Q9ImF1dGhNZXRob2QgPT0gJ1JPTExFUkRCJyB8fCBhdXRoTWV0aG9kID09ICdEQl9PUEVOSUQnIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48bGFiZWwgZm9yPSJwYXNzd29yZFRleHQiIC8+PHM6dGV4dCBuYW1lPSJ1c2VyU2V0dGluZ3MucGFzc3dvcmQiIC8+PC9sYWJlbD48L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxzOnBhc3N3b3JkIG5hbWU9ImJlYW4ucGFzc3dvcmQiIHNpemU9IjIwIiBtYXhsZW5ndGg9IjIwIiAvPjwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+PHM6dGV4dCBuYW1lPSJ1c2VyQWRtaW4udGlwLnBhc3N3b3JkIiAvPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3M6aWY+Ci0KLSAgICAgICAgPHM6aWYgdGVzdD0iYXV0aE1ldGhvZCA9PSAnT1BFTklEJyB8fCBhdXRoTWV0aG9kID09ICdEQl9PUEVOSUQnIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48bGFiZWwgZm9yPSJvcGVuSWRVcmwiIC8+PHM6dGV4dCBuYW1lPSJ1c2VyU2V0dGluZ3Mub3BlbklkVXJsIiAvPjwvbGFiZWw+PC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5vcGVuSWRVcmwiIHNpemU9IjQwIiBtYXhsZW5ndGg9IjI1NSIgc3R5bGU9IndpZHRoOjc1JSIgaWQ9ImZfb3BlbmlkX2lkZW50aWZpZXIiIC8+PC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48czp0ZXh0IG5hbWU9InVzZXJBZG1pbi50aXAub3BlbklkVXJsIiAvPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3M6aWY+Ci0KLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGxhYmVsIGZvcj0iZW1haWxBZGRyZXNzIiAvPjxzOnRleHQgbmFtZT0idXNlclNldHRpbmdzLmVtYWlsIiAvPjwvbGFiZWw+PC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLmVtYWlsQWRkcmVzcyIgc2l6ZT0iNDAiIG1heGxlbmd0aD0iNDAiIC8+PC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0idXNlckFkbWluLnRpcC5lbWFpbCIgLz48L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICAKLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGxhYmVsIGZvcj0ibG9jYWxlIiAvPjxzOnRleHQgbmFtZT0idXNlclNldHRpbmdzLmxvY2FsZSIgLz48L2xhYmVsPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj4KLSAgICAgICAgICAgICAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi5sb2NhbGUiIHNpemU9IjEiIGxpc3Q9ImxvY2FsZXNMaXN0IiBsaXN0VmFsdWU9ImRpc3BsYXlOYW1lIiAvPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0idXNlckFkbWluLnRpcC5sb2NhbGUiIC8+PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgCi0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxsYWJlbCBmb3I9InRpbWVab25lIiAvPjxzOnRleHQgbmFtZT0idXNlclNldHRpbmdzLnRpbWVab25lIiAvPjwvbGFiZWw+PC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPgotICAgICAgICAgICAgICAgIDxzOnNlbGVjdCBuYW1lPSJiZWFuLnRpbWVab25lIiBzaXplPSIxIiBsaXN0PSJ0aW1lWm9uZXNMaXN0IiAvPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0idXNlckFkbWluLnRpcC50aW1lWm9uZSIgLz48L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICAKLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGxhYmVsIGZvcj0idXNlckVuYWJsZWQiIC8+PHM6dGV4dCBuYW1lPSJ1c2VyQWRtaW4uZW5hYmxlZCIgLz48L2xhYmVsPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj4KLSAgICAgICAgICAgICAgICA8czpjaGVja2JveCBuYW1lPSJiZWFuLmVuYWJsZWQiIC8+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+PHM6dGV4dCBuYW1lPSJ1c2VyQWRtaW4udGlwLmVuYWJsZWQiIC8+PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgCi0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxsYWJlbCBmb3I9InVzZXJBZG1pbiIgLz48czp0ZXh0IG5hbWU9InVzZXJBZG1pbi51c2VyQWRtaW4iIC8+PC9sYWJlbD48L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+Ci0gICAgICAgICAgICAgICAgPHM6Y2hlY2tib3ggbmFtZT0iYmVhbi5hZG1pbmlzdHJhdG9yIiAvPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0idXNlckFkbWluLnRpcC51c2VyQWRtaW4iIC8+PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgCi0gICAgPC90YWJsZT4KLSAgICAKLSAgICA8YnIgLz4KLSAgICAKICAgICA8czppZiB0ZXN0PSJhY3Rpb25OYW1lID09ICdtb2RpZnlVc2VyJyI+Ci0gICAgICAgIDxwIGNsYXNzPSJzdWJ0aXRsZSI+PHM6dGV4dCBuYW1lPSJ1c2VyQWRtaW4udXNlcldlYmxvZ3MiIC8+PC9wPgorICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi51c2VyTmFtZSIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iMzAiCisgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgndXNlclNldHRpbmdzLnVzZXJuYW1lJyl9IgorICAgICAgICAgICAgICAgIHRvb2x0aXA9IiV7Z2V0VGV4dCgndXNlclNldHRpbmdzLnRpcC51c2VybmFtZScpfSIKKyAgICAgICAgICAgICAgICByZWFkb25seT0idHJ1ZSIgY3NzU3R5bGU9ImJhY2tncm91bmQ6ICNlNWU1ZTUiIC8+CisgICAgPC9zOmlmPgorICAgIDxzOmVsc2U+CisgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnVzZXJOYW1lIiBzaXplPSIzMCIgbWF4bGVuZ3RoPSIzMCIKKyAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCd1c2VyU2V0dGluZ3MudXNlcm5hbWUnKX0iCisgICAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCd1c2VyQWRtaW4udGlwLnVzZXJuYW1lJyl9IiAvPgorICAgIDwvczplbHNlPgorCisgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uc2NyZWVuTmFtZSIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iMzAiCisgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgndXNlclNldHRpbmdzLnNjcmVlbm5hbWUnKX0iCisgICAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCd1c2VyQWRtaW4udGlwLnNjcmVlbk5hbWUnKX0iIC8+CisKKyAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5mdWxsTmFtZSIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iMzAiCisgICAgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ3VzZXJTZXR0aW5ncy5mdWxsbmFtZScpfSIKKyAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCd1c2VyQWRtaW4udGlwLmZ1bGxOYW1lJyl9IiAvPgorCisgICAgPHM6aWYgdGVzdD0iYXV0aE1ldGhvZCA9PSAnUk9MTEVSREInIHx8IGF1dGhNZXRob2QgPT0gJ0RCX09QRU5JRCciPgorICAgICAgICA8czpwYXNzd29yZCBuYW1lPSJiZWFuLnBhc3N3b3JkIiBzaXplPSIzMCIgbWF4bGVuZ3RoPSIzMCIKKyAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ3VzZXJTZXR0aW5ncy5wYXNzd29yZCcpfSIKKyAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiV7Z2V0VGV4dCgndXNlckFkbWluLnRpcC5wYXNzd29yZCcpfSIgLz4KKyAgICA8L3M6aWY+CisKKyAgICA8czppZiB0ZXN0PSJhdXRoTWV0aG9kID09ICdPUEVOSUQnIHx8IGF1dGhNZXRob2QgPT0gJ0RCX09QRU5JRCciPgorICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5vcGVuSWRVcmwiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjI1NSIgaWQ9ImZfb3BlbmlkX2lkZW50aWZpZXIiCisgICAgICAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCd1c2VyU2V0dGluZ3Mub3BlbklkVXJsJyl9IgorICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCd1c2VyQWRtaW4udGlwLm9wZW5JZFVybCcpfSIgLz4KKyAgICA8L3M6aWY+CisKKyAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5lbWFpbEFkZHJlc3MiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIgorICAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCd1c2VyU2V0dGluZ3MuZW1haWwnKX0iCisgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiV7Z2V0VGV4dCgndXNlckFkbWluLnRpcC5lbWFpbCcpfSIgLz4KKworICAgIDxzOnNlbGVjdCBuYW1lPSJiZWFuLmxvY2FsZSIgc2l6ZT0iMSIgbGlzdD0ibG9jYWxlc0xpc3QiIGxpc3RWYWx1ZT0iZGlzcGxheU5hbWUiCisgICAgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ3VzZXJTZXR0aW5ncy5sb2NhbGUnKX0iCisgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiV7Z2V0VGV4dCgndXNlckFkbWluLnRpcC5sb2NhbGUnKX0iIC8+CisKKyAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi50aW1lWm9uZSIgc2l6ZT0iMSIgbGlzdD0idGltZVpvbmVzTGlzdCIKKyAgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgndXNlclNldHRpbmdzLnRpbWVab25lJyl9IgorICAgICAgICAgICAgICAgICB0b29sdGlwPSIle2dldFRleHQoJ3VzZXJBZG1pbi50aXAudGltZVpvbmUnKX0iIC8+CisKKyAgICA8czpjaGVja2JveCBuYW1lPSJiZWFuLmVuYWJsZWQiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIgorICAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCd1c2VyQWRtaW4uZW5hYmxlZCcpfSIKKyAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCd1c2VyQWRtaW4udGlwLnVzZXJFbmFibGVkJyl9IiAvPgorCisgICAgPHM6Y2hlY2tib3ggbmFtZT0iYmVhbi5hZG1pbmlzdHJhdG9yIiBzaXplPSIzMCIgbWF4bGVuZ3RoPSIzMCIKKyAgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgndXNlckFkbWluLnVzZXJBZG1pbicpfSIKKyAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCd1c2VyQWRtaW4udGlwLnVzZXJBZG1pbicpfSIgLz4KKworCisgICAgPHM6aWYgdGVzdD0iYWN0aW9uTmFtZSA9PSAnbW9kaWZ5VXNlciciPgorICAgICAgICA8aDI+PHM6dGV4dCBuYW1lPSJ1c2VyQWRtaW4udXNlcldlYmxvZ3MiIC8+PC9oMj4KIAogICAgICAgICA8czppZiB0ZXN0PSJwZXJtaXNzaW9ucyAhPSBudWxsICYmICFwZXJtaXNzaW9ucy5pc0VtcHR5KCkgPiAwIj4KICAgICAgICAgICAgIDxwPjxzOnRleHQgbmFtZT0idXNlckFkbWluLnVzZXJNZW1iZXJPZiIgLz46PC9wPgotICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJyb2xsZXJ0YWJsZSIgc3R5bGU9IndpZHRoOiA4MCUiPgorICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSIgc3R5bGU9IndpZHRoOiA4MCUiPgogICAgICAgICAgICAgICAgIDxzOml0ZXJhdG9yIHZhcj0icGVybXMiIHZhbHVlPSJwZXJtaXNzaW9ucyI+CiAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iJTMwIj4KQEAgLTE5Miw4ICsxNTMsOCBAQAogICAgIDxiciAvPgogCiAgICAgPGRpdiBjbGFzcz0iY29udHJvbCI+Ci0gICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLnNhdmUnKX0iIGFjdGlvbj0iJXsjbWFpbkFjdGlvbn0hc2F2ZSIvPgotICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5jYW5jZWwnKX0iIGFjdGlvbj0ibW9kaWZ5VXNlciFjYW5jZWwiIC8+CisgICAgICAgIDxzOnN1Ym1pdCBjc3NDbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLnNhdmUnKX0iIGFjdGlvbj0iJXsjbWFpbkFjdGlvbn0hc2F2ZSIvPgorICAgICAgICA8czpzdWJtaXQgY3NzQ2xhc3M9ImJ0biIgdmFsdWU9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5jYW5jZWwnKX0iIGFjdGlvbj0ibW9kaWZ5VXNlciFjYW5jZWwiIC8+CiAgICAgPC9kaXY+Ci0gICAgCisKIDwvczpmb3JtPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvY29yZS9DcmVhdGVEYXRhYmFzZS5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9jb3JlL0NyZWF0ZURhdGFiYXNlLmpzcAppbmRleCA4NWJmNWVkLi42NmRiMWNhIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9jb3JlL0NyZWF0ZURhdGFiYXNlLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9jb3JlL0NyZWF0ZURhdGFiYXNlLmpzcApAQCAtNTUsNyArNTUsNyBAQAogCiAgICAgPHM6Zm9ybSBhY3Rpb249Imluc3RhbGwhY3JlYXRlIj4KIAkJPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0gICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdpbnN0YWxsZXIueWVzQ3JlYXRlVGFibGVzJyl9IiAvPgorICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnaW5zdGFsbGVyLnllc0NyZWF0ZVRhYmxlcycpfSIgY3NzQ2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgLz4KICAgICA8L3M6Zm9ybT4KICAgICAKIDwvczplbHNlPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvY29yZS9DcmVhdGVXZWJsb2cuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvY29yZS9DcmVhdGVXZWJsb2cuanNwCmluZGV4IDJkNjE1ZTUuLjg4Y2E2ZjggMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2NvcmUvQ3JlYXRlV2VibG9nLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9jb3JlL0NyZWF0ZVdlYmxvZy5qc3AKQEAgLTE2LDEwOSArMTYsMTMzIEBACiAgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KIC0tJT4KIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KLTxzY3JpcHQgc3JjPSI8czp1cmwgdmFsdWU9Ii9yb2xsZXItdWkvc2NyaXB0cy9qcXVlcnktMi4xLjEubWluLmpzIiAvPiI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iPHM6dXJsIHZhbHVlPScvd2ViamFycy9hbmd1bGFyLzEuMi4yOS9hbmd1bGFyLm1pbi5qcycgLz4iPjwvc2NyaXB0PgogCi08c2NyaXB0PgotZnVuY3Rpb24gaGFuZGxlUHJldmlldyhoYW5kbGUpIHsKLSAgICBwcmV2aWV3U3BhbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYW5kbGVQcmV2aWV3Iik7Ci0gICAgdmFyIG4xID0gcHJldmlld1NwYW4uY2hpbGROb2Rlc1swXTsKLSAgICB2YXIgbjIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShoYW5kbGUudmFsdWUpOwotICAgIGlmIChoYW5kbGUudmFsdWUgPT0gbnVsbCkgewotCSAgICBwcmV2aWV3U3Bhbi5hcHBlbmRDaGlsZChuMik7Ci0gICAgfSBlbHNlIHsKLQkgICAgcHJldmlld1NwYW4ucmVwbGFjZUNoaWxkKG4yLCBuMSk7Ci0gICAgfQotfQotPC9zY3JpcHQ+Cis8cCBjbGFzcz0ic3VidGl0bGUiPjxzOnRleHQgbmFtZT0iY3JlYXRlV2Vic2l0ZS5wcm9tcHQiLz48L3A+CiAKLTxwIGNsYXNzPSJzdWJ0aXRsZSI+PHM6dGV4dCBuYW1lPSJjcmVhdGVXZWJzaXRlLnByb21wdCIgLz48L3A+Cis8YnIvPgogCi08YnIgLz4KKzxzOmZvcm0gYWN0aW9uPSJjcmVhdGVXZWJsb2chc2F2ZSIgdGhlbWU9ImJvb3RzdHJhcCIgY3NzQ2xhc3M9ImZvcm0taG9yaXpvbnRhbCI+CiAKLTxzOmZvcm0gYWN0aW9uPSJjcmVhdGVXZWJsb2chc2F2ZSI+Ci08czpoaWRkZW4gbmFtZT0ic2FsdCIgLz4KKyAgICA8czpoaWRkZW4gbmFtZT0ic2FsdCIvPgogCi08dGFibGUgY2xhc3M9ImZvcm10YWJsZSI+CisgICAgPHM6dGV4dGZpZWxkIGxhYmVsPSIle2dldFRleHQoJ2dlbmVyaWMubmFtZScpfSIKKyAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCdjcmVhdGVXZWJzaXRlLnRpcC5uYW1lJyl9IiBvbmtleXVwPSJmb3JtQ2hhbmdlZCgpIgorICAgICAgICAgICAgICAgICBuYW1lPSJiZWFuLm5hbWUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIi8+CiAKLTx0cj4KLSAgICA8dGQgY2xhc3M9ImxhYmVsIj48bGFiZWwgZm9yPSJuYW1lIj48czp0ZXh0IG5hbWU9ImdlbmVyaWMubmFtZSIgLz48L2xhYmVsPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJmaWVsZCI+PHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4ubmFtZSIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iMzAiIC8+PC90ZD4KLSAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48czp0ZXh0IG5hbWU9ImNyZWF0ZVdlYnNpdGUudGlwLm5hbWUiIC8+PC90ZD4KLTwvdHI+CisgICAgPHM6dGV4dGZpZWxkIGxhYmVsPSIle2dldFRleHQoJ2NyZWF0ZVdlYnNpdGUuaGFuZGxlJyl9IgorICAgICAgICAgICAgICAgICB0b29sdGlwPSIle2dldFRleHQoJ2NyZWF0ZVdlYnNpdGUudGlwLmhhbmRsZScpfSIKKyAgICAgICAgICAgICAgICAgbmFtZT0iYmVhbi5oYW5kbGUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIgorICAgICAgICAgICAgICAgICBvbmtleXVwPSJoYW5kbGVQcmV2aWV3KHRoaXMpIi8+CiAKLTx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGxhYmVsIGZvcj0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy50YWdsaW5lIiAvPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJmaWVsZCI+PHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uZGVzY3JpcHRpb24iIHNpemU9IjQwIiBtYXhsZW5ndGg9IjI1NSIgLz48L3RkPgotICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0iY3JlYXRlV2Vic2l0ZS50aXAuZGVzY3JpcHRpb24iIC8+PC90ZD4KLTwvdHI+Ci0KLTx0cj4KLSAgICA8dGQgY2xhc3M9ImxhYmVsIj48bGFiZWwgZm9yPSJoYW5kbGUiPjxzOnRleHQgbmFtZT0iY3JlYXRlV2Vic2l0ZS5oYW5kbGUiIC8+PC9sYWJlbD48L3RkPgotICAgIDx0ZCBjbGFzcz0iZmllbGQiPgotICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5oYW5kbGUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIiBvbmtleXVwPSJoYW5kbGVQcmV2aWV3KHRoaXMpIiAvPjxiciAvPgotICAgICAgICA8c3BhbiBzdHlsZT0idGV4dC1zaXplOjcwJSI+CisgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CisgICAgICAgIDxsYWJlbCBjbGFzcz0iY29sLXNtLTMiPjwvbGFiZWw+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS05IGNvbnRyb2xzIj4KICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY3JlYXRlV2Vic2l0ZS53ZWJsb2dVcmwiIC8+OiZuYnNwOwotICAgICAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9ImFic29sdXRlU2l0ZVVSTCIgLz4vPHNwYW4gaWQ9ImhhbmRsZVByZXZpZXciIHN0eWxlPSJjb2xvcjpyZWQiPjxzOmlmIHRlc3Q9ImJlYW4uaGFuZGxlICE9IG51bGwiPjxzOnByb3BlcnR5IHZhbHVlPSJiZWFuLmhhbmRsZSIvPjwvczppZj48czplbHNlPmhhbmRsZTwvczplbHNlPjwvc3Bhbj4KLSAgICAgICAgPC9zcGFuPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+PHM6dGV4dCBuYW1lPSJjcmVhdGVXZWJzaXRlLnRpcC5oYW5kbGUiIC8+PC90ZD4KLTwvdHI+CisgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iYWJzb2x1dGVTaXRlVVJMIiAvPi88c3BhbiBpZD0iaGFuZGxlUHJldmlldyIgc3R5bGU9ImNvbG9yOnJlZCI+CisgICAgICAgICAgICA8czppZiB0ZXN0PSJiZWFuLmhhbmRsZSAhPSBudWxsIj4KKyAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iYmVhbi5oYW5kbGUiLz4KKyAgICAgICAgICAgIDwvczppZj4KKyAgICAgICAgICAgIDxzOmVsc2U+aGFuZGxlPC9zOmVsc2U+PC9zcGFuPgorICAgICAgICAgICAgPGJyPgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KIAotPHRyPgotICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxsYWJlbCBmb3I9ImVtYWlsQWRkcmVzcyI+PHM6dGV4dCBuYW1lPSJjcmVhdGVXZWJzaXRlLmVtYWlsQWRkcmVzcyIgLz48L2xhYmVsPjwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJmaWVsZCI+PHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uZW1haWxBZGRyZXNzIiBzaXplPSI0MCIgbWF4bGVuZ3RoPSI1MCIgLz48L3RkPgotICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0iY3JlYXRlV2Vic2l0ZS50aXAuZW1haWwiIC8+PC90ZD4KLTwvdHI+CisgICAgPHM6dGV4dGZpZWxkIGxhYmVsPSIle2dldFRleHQoJ2NyZWF0ZVdlYnNpdGUuZW1haWxBZGRyZXNzJyl9IgorICAgICAgICAgICAgICAgICB0b29sdGlwPSIle2dldFRleHQoJ2NyZWF0ZVdlYnNpdGUudGlwLmVtYWlsJyl9IiBvbmtleXVwPSJmb3JtQ2hhbmdlZCgpIgorICAgICAgICAgICAgICAgICBuYW1lPSJiZWFuLmVtYWlsQWRkcmVzcyIgc2l6ZT0iNDAiIG1heGxlbmd0aD0iNTAiLz4KIAotPHRyPgotICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxsYWJlbCBmb3I9ImxvY2FsZSIgLz48czp0ZXh0IG5hbWU9ImNyZWF0ZVdlYnNpdGUubG9jYWxlIiAvPjwvbGFiZWw+PC90ZD4KLSAgICA8dGQgY2xhc3M9ImZpZWxkIj4KLSAgICAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi5sb2NhbGUiIHNpemU9IjEiIGxpc3Q9ImxvY2FsZXNMaXN0IiBsaXN0VmFsdWU9ImRpc3BsYXlOYW1lIiAvPgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+PHM6dGV4dCBuYW1lPSJjcmVhdGVXZWJzaXRlLnRpcC5sb2NhbGUiIC8+PC90ZD4KLTwvdHI+CisgICAgPHM6c2VsZWN0IGxhYmVsPSIle2dldFRleHQoJ2NyZWF0ZVdlYnNpdGUubG9jYWxlJyl9IgorICAgICAgICAgICAgICB0b29sdGlwPSIle2dldFRleHQoJ2NyZWF0ZVdlYnNpdGUudGlwLmxvY2FsZScpfSIKKyAgICAgICAgICAgICAgbmFtZT0iYmVhbi5sb2NhbGUiIHNpemU9IjEiIGxpc3Q9ImxvY2FsZXNMaXN0IiBsaXN0VmFsdWU9ImRpc3BsYXlOYW1lIi8+CiAKLTx0cj4KLSAgICA8dGQgY2xhc3M9ImxhYmVsIj48bGFiZWwgZm9yPSJ0aW1lWm9uZSI+PHM6dGV4dCBuYW1lPSJjcmVhdGVXZWJzaXRlLnRpbWVab25lIiAvPjwvbGFiZWw+PC90ZD4KLSAgICA8dGQgY2xhc3M9ImZpZWxkIj4KLSAgICAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi50aW1lWm9uZSIgc2l6ZT0iMSIgbGlzdD0idGltZVpvbmVzTGlzdCIgLz4KLSAgICA8L3RkPgotICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0iY3JlYXRlV2Vic2l0ZS50aXAudGltZXpvbmUiIC8+PC90ZD4KLTwvdHI+CisgICAgPHM6c2VsZWN0IGxhYmVsPSIle2dldFRleHQoJ2NyZWF0ZVdlYnNpdGUudGltZXpvbmUnKX0iCisgICAgICAgICAgICAgIHRvb2x0aXA9IiV7Z2V0VGV4dCgnY3JlYXRlV2Vic2l0ZS50aXAudGltZXpvbmUnKX0iCisgICAgICAgICAgICAgIG5hbWU9ImJlYW4udGltZVpvbmUiIHNpemU9IjEiIGxpc3Q9InRpbWVab25lc0xpc3QiLz4KIAotPHRyPgotICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxsYWJlbCBmb3I9InRoZW1lIj48czp0ZXh0IG5hbWU9ImNyZWF0ZVdlYnNpdGUudGhlbWUiIC8+PC9sYWJlbD48L3RkPgotICAgIDx0ZCBjbGFzcz0iZmllbGQiIG5nLWFwcD0idGhlbWVTZWxlY3RNb2R1bGUiIG5nLWNvbnRyb2xsZXI9InRoZW1lQ29udHJvbGxlciI+Ci0gICAgICAgIDxzZWxlY3QgaWQ9InRoZW1lU2VsZWN0b3IiIG5hbWU9ImJlYW4udGhlbWUiIHNpemU9IjEiCi0gICAgICAgIG5nLW1vZGVsPSJzZWxlY3RlZFRoZW1lIiBuZy1vcHRpb25zPSJ0aGVtZSBhcyB0aGVtZS5uYW1lIGZvciB0aGVtZSBpbiB0aGVtZXMgdHJhY2sgYnkgdGhlbWUuaWQiPjwvc2VsZWN0PgotICAgICAgICA8YnIgLz4KLSAgICAgICAgPGJyIC8+Ci0gICAgICAgIDxwPnt7IHNlbGVjdGVkVGhlbWUuZGVzY3JpcHRpb24gfX08L3A+Ci0gICAgICAgIDxiciAvPgotICAgICAgICA8aW1nIG5nLXNyYz0iPHM6cHJvcGVydHkgdmFsdWU9J3NpdGVVUkwnLz57eyBzZWxlY3RlZFRoZW1lLnByZXZpZXdQYXRoIH19Ii8+Ci0gICAgPC90ZD4KLSAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48czp0ZXh0IG5hbWU9ImNyZWF0ZVdlYnNpdGUudGlwLnRoZW1lIiAvPjwvdGQ+Ci08L3RyPgorICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiIG5nLWFwcD0idGhlbWVTZWxlY3RNb2R1bGUiIG5nLWNvbnRyb2xsZXI9InRoZW1lQ29udHJvbGxlciI+CisgICAgICAgIDxsYWJlbCBjbGFzcz0iY29sLXNtLTMgY29udHJvbC1sYWJlbCIgZm9yPSJjcmVhdGVXZWJsb2dfYmVhbl90aW1lWm9uZSI+CisgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNyZWF0ZVdlYnNpdGUudGhlbWUiIC8+CisgICAgICAgIDwvbGFiZWw+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS05IGNvbnRyb2xzIj4KKyAgICAgICAgICAgIDxzOnNlbGVjdCBuYW1lPSJiZWFuLnRoZW1lIiBzaXplPSIxIiBsaXN0PSJ0aGVtZXMiIGxpc3RLZXk9ImlkIiBsaXN0VmFsdWU9Im5hbWUiCisgICAgICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9InByZXZpZXdJbWFnZSh0aGlzW3NlbGVjdGVkSW5kZXhdLnZhbHVlKSIvPgorICAgICAgICAgICAgPHAgaWQ9InRoZW1lZGVzY3JpcHRpb24iPjwvcD4KKyAgICAgICAgICAgIDxwPjxpbWcgaWQ9InRoZW1lVGh1bWJuYWlsIiBzcmM9IiIgY2xhc3M9ImltZy1yZXNwb25zaXZlIGltZy10aHVtYm5haWwiIHN0eWxlPSJtYXgtd2lkdGg6IDMwZW0iIC8+PC9wPgogCi08L3RhYmxlPgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KIAotPGJyIC8+CisgICAgPHM6c3VibWl0IGNzc0NsYXNzPSJidG4gYnRuLWRlZmF1bHQiCisgICAgICAgICAgICAgIHZhbHVlPSIle2dldFRleHQoJ2NyZWF0ZVdlYnNpdGUuYnV0dG9uLnNhdmUnKX0iLz4KIAotPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2NyZWF0ZVdlYnNpdGUuYnV0dG9uLnNhdmUnKX0iIC8+Ci08aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPHM6dGV4dCBuYW1lPSJnZW5lcmljLmNhbmNlbCIvPiIgb25jbGljaz0id2luZG93LmxvY2F0aW9uPSc8czp1cmwgYWN0aW9uPSJtZW51Ii8+JyIgLz4KKyAgICA8aW5wdXQgY2xhc3M9ImJ0biIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPHM6dGV4dCBuYW1lPSJnZW5lcmljLmNhbmNlbCIvPiIKKyAgICAgICAgICAgb25jbGljaz0id2luZG93LmxvY2F0aW9uPSc8czp1cmwgYWN0aW9uPSJtZW51Ii8+JyIvPgogCiA8L3M6Zm9ybT4KIAorPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorCiA8c2NyaXB0PgorCiAgICAgZG9jdW1lbnQuZm9ybXNbMF0uZWxlbWVudHNbMF0uZm9jdXMoKTsKIAotICAgIGFuZ3VsYXIubW9kdWxlKCd0aGVtZVNlbGVjdE1vZHVsZScsIFtdKQotICAgICAgICAuY29udHJvbGxlcigndGhlbWVDb250cm9sbGVyJywgWyckc2NvcGUnLCBmdW5jdGlvbigkc2NvcGUpIHsKLSAgICAgICAgICAgICQuYWpheCh7IHVybDogIjxzOnByb3BlcnR5IHZhbHVlPSdzaXRlVVJMJyAvPi9yb2xsZXItdWkvYXV0aG9yaW5nL3RoZW1lZGF0YSIsIGFzeW5jOmZhbHNlLAotICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKGRhdGEpIHsgJHNjb3BlLnRoZW1lcyA9IGRhdGE7IH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgJHNjb3BlLnNlbGVjdGVkVGhlbWUgPSAkc2NvcGUudGhlbWVzWzBdOwotICAgIH1dKTsKKyAgICB2YXIgc2F2ZUJ1dHRvbjsKKworICAgICQoIGRvY3VtZW50ICkucmVhZHkoZnVuY3Rpb24oKSB7CisKKyAgICAgICAgc2F2ZUJ1dHRvbiA9ICQoIiNjcmVhdGVXZWJsb2dfMCIpOworCisgICAgICAgIDxzOmlmIHRlc3Q9ImJlYW4udGhlbWUgPT0gbnVsbCI+CisgICAgICAgIHByZXZpZXdJbWFnZSgnPHM6cHJvcGVydHkgdmFsdWU9InRoZW1lc1swXS5pZCIvPicpOworICAgICAgICA8L3M6aWY+CisgICAgICAgIDxzOmVsc2U+CisgICAgICAgIHByZXZpZXdJbWFnZSgnPHM6cHJvcGVydHkgdmFsdWU9ImJlYW4udGhlbWUiLz4nKTsKKyAgICAgICAgPC9zOmVsc2U+CisKKyAgICAgICAgZm9ybUNoYW5nZWQoKQorICAgIH0pOworCisgICAgZnVuY3Rpb24gZm9ybUNoYW5nZWQoKSB7CisgICAgICAgIHZhciB2YWxpZCA9IGZhbHNlOworCisgICAgICAgIHZhciBuYW1lICAgPSAkKCIjY3JlYXRlV2VibG9nX2JlYW5fbmFtZTpmaXJzdCIpLnZhbCgpOworICAgICAgICB2YXIgaGFuZGxlID0gJCgiI2NyZWF0ZVdlYmxvZ19iZWFuX2hhbmRsZTpmaXJzdCIpLnZhbCgpOworICAgICAgICB2YXIgZW1haWwgID0gJCgiI2NyZWF0ZVdlYmxvZ19iZWFuX2VtYWlsQWRkcmVzczpmaXJzdCIpLnZhbCgpOworCisgICAgICAgIHZhbGlkID0gISEobmFtZSAmJiBuYW1lLnRyaW0oKS5sZW5ndGggPiAwCisgICAgICAgICAgICAmJiBoYW5kbGUgJiYgaGFuZGxlLnRyaW0oKS5sZW5ndGggPiAwCisgICAgICAgICAgICAmJiBlbWFpbCAmJiBlbWFpbC50cmltKCkubGVuZ3RoID4gMCAmJiB2YWxpZGF0ZUVtYWlsKGVtYWlsKSk7CisKKyAgICAgICAgaWYgKCB2YWxpZCApIHsKKyAgICAgICAgICAgIHNhdmVCdXR0b24uYXR0cigiZGlzYWJsZWQiLCBmYWxzZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzYXZlQnV0dG9uLmF0dHIoImRpc2FibGVkIiwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBoYW5kbGVQcmV2aWV3KGhhbmRsZSkgeworICAgICAgICBwcmV2aWV3U3BhbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYW5kbGVQcmV2aWV3Iik7CisgICAgICAgIHZhciBuMSA9IHByZXZpZXdTcGFuLmNoaWxkTm9kZXNbMF07CisgICAgICAgIHZhciBuMiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGhhbmRsZS52YWx1ZSk7CisgICAgICAgIGlmIChoYW5kbGUudmFsdWUgPT0gbnVsbCkgeworICAgICAgICAgICAgcHJldmlld1NwYW4uYXBwZW5kQ2hpbGQobjIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJldmlld1NwYW4ucmVwbGFjZUNoaWxkKG4yLCBuMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBwcmV2aWV3SW1hZ2UodGhlbWVJZCkgeworICAgICAgICAkLmFqYXgoeyB1cmw6ICI8czpwcm9wZXJ0eSB2YWx1ZT0nc2l0ZVVSTCcgLz4vcm9sbGVyLXVpL2F1dGhvcmluZy90aGVtZWRhdGEiLAorICAgICAgICAgICAgZGF0YToge3RoZW1lOnRoZW1lSWR9LCBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7CisgICAgICAgICAgICAgICAgJCgnI3RoZW1lZGVzY3JpcHRpb24nKS5odG1sKGRhdGEuZGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgICQoJyN0aGVtZVRodW1ibmFpbCcpLmF0dHIoJ3NyYycsJzxzOnByb3BlcnR5IHZhbHVlPSJzaXRlVVJMIiAvPicgKyBkYXRhLnByZXZpZXdQYXRoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIGZvcm1DaGFuZ2VkKCk7CisgICAgfQorCis8L3NjcmlwdD4KKworCiA8L3NjcmlwdD4KIApkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvY29yZS9Mb2dpbi1jc3MuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvY29yZS9Mb2dpbi1jc3MuanNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwOGZjNzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9jb3JlL0xvZ2luLWNzcy5qc3AKQEAgLTAsMCArMSwyMyBAQAorPCUtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdQorICB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZworICBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCisgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KKy0tJT4KKworLnJvbGxlci1wYWdlLXRpdGxlIHsKKyAgICBtYXJnaW4tdG9wOiAwcHg7CisgICAgbWFyZ2luLWJvdHRvbTogMmVtOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKK30KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2NvcmUvTG9naW4uanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvY29yZS9Mb2dpbi5qc3AKaW5kZXggYmY5OTE0ZC4uMGEzOTE4ZSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvY29yZS9Mb2dpbi5qc3AKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvY29yZS9Mb2dpbi5qc3AKQEAgLTE4LDE1MCArMTgsMTM3IEBACiAKIDwlLS0gQm9keSBvZiB0aGUgbG9naW4gcGFnZSwgaW52b2tlZCBmcm9tIGxvZ2luLmpzcCAtLSU+CiA8JUAgcGFnZSBpbXBvcnQ9Im9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5jb25maWcuV2VibG9nZ2VyQ29uZmlnIiAlPgotPCVAIHBhZ2UgaW1wb3J0PSJvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuY29uZmlnLkF1dGhNZXRob2QiICU+CiA8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+CiAKIDwlIQotU3RyaW5nIHNlY3VyaXR5Q2hlY2tVcmwgPSBudWxsOwotYm9vbGVhbiBjbWFFbmFibGVkID0gIkNNQSIuZXF1YWxzKFdlYmxvZ2dlckNvbmZpZy5nZXRBdXRoTWV0aG9kKCkpOworICAgIFN0cmluZyBzZWN1cml0eUNoZWNrVXJsID0gbnVsbDsKKyAgICBib29sZWFuIGNtYUVuYWJsZWQgPSAiQ01BIi5lcXVhbHMoIFdlYmxvZ2dlckNvbmZpZy5nZXRBdXRoTWV0aG9kKCkgKTsKICU+CiAKIDwlCi1pZiAoY21hRW5hYmxlZCkgewotICAgIHNlY3VyaXR5Q2hlY2tVcmwgPSAiL2pfc2VjdXJpdHlfY2hlY2siOwotfSBlbHNlIHsKLSAgICBzZWN1cml0eUNoZWNrVXJsID0gIi9yb2xsZXJfal9zZWN1cml0eV9jaGVjayI7Ci19CisgICAgaWYgKGNtYUVuYWJsZWQpIHsKKyAgICAgICAgc2VjdXJpdHlDaGVja1VybCA9ICIval9zZWN1cml0eV9jaGVjayI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2VjdXJpdHlDaGVja1VybCA9ICIvcm9sbGVyX2pfc2VjdXJpdHlfY2hlY2siOworICAgIH0KICU+CiAKLTxzOmlmIHRlc3Q9ImF1dGhNZXRob2QgPT0gJ09QRU5JRCcgfHwgYXV0aE1ldGhvZCA9PSAnREJfT1BFTklEJyI+Ci0gICAgCi0gICAgPHA+PHM6dGV4dCBuYW1lPSJsb2dpblBhZ2Uub3BlbklkUHJvbXB0IiAvPjwvcD4KLSAgICAKLSAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGlkPSJsb2dpbk9wZW5JREZvcm0iICAgICAgIAotICAgICAgICAgIGFjdGlvbj0iL3JvbGxlci9yb2xsZXJfal9vcGVuaWRfc2VjdXJpdHlfY2hlY2siICAgICAgCi0gICAgICAgICAgb25zdWJtaXQ9InNhdmVPcGVuaWRJZGVudGlmaWVyKHRoaXMpIj4gICAgICAKLSAgICAgICAgPCEtLSBhY3Rpb249IjxjOnVybCB2YWx1ZT0ncm9sbGVyX2pfb3BlbmlkX3NlY3VyaXR5X2NoZWNrJy8+IiAgLS0+Ci0gICAgICAgIDx0YWJsZSB3aWR0aD0iODAlIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48czp0ZXh0IG5hbWU9ImxvZ2luUGFnZS5vcGVuSUQiIC8+PC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjgwJSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJvcGVuaWRfaWRlbnRpZmllciIgaWQ9Im9wZW5pZF9pZGVudGlmaWVyIiBjbGFzcz0iZl9vcGVuaWRfaWRlbnRpZmllciIgc2l6ZT0iNDAiIG1heGxlbmd0aD0iMjU1IiBzdHlsZT0id2lkdGg6IDM1JSIvPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPiAgICAKLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjIwJSI+PC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjgwJSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgaWQ9InN1Ym1pdCIgdmFsdWU9IjxzOnRleHQgbmFtZT0nbG9naW5QYWdlLmxvZ2luT3BlbklEJy8+IiAvPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPiAKLSAgICA8L2Zvcm0+Ci08L3M6aWY+CisgICAgPHM6aWYgdGVzdD0iYXV0aE1ldGhvZCA9PSAnT1BFTklEJyB8fCBhdXRoTWV0aG9kID09ICdEQl9PUEVOSUQnIj4KIAotPHM6aWYgdGVzdD0iYXV0aE1ldGhvZCAhPSAnT1BFTklEJyI+CiAKLSAgICA8czppZiB0ZXN0PSJhdXRoTWV0aG9kID09ICdEQl9PUEVOSUQnIj4KLSAgICAgICAgPHA+PHM6dGV4dCBuYW1lPSJsb2dpblBhZ2Uub3BlbklkSHlicmlkUHJvbXB0IiAvPjwvcD4KKyAgICAgICAgPGZvcm0gbWV0aG9kPSJwb3N0IiBpZD0ibG9naW5PcGVuSURGb3JtIiBjbGFzcz0iZm9ybS1ob3Jpem9udGFsIgorICAgICAgICAgICAgICBhY3Rpb249Ii9yb2xsZXIvcm9sbGVyX2pfb3BlbmlkX3NlY3VyaXR5X2NoZWNrIiBvbnN1Ym1pdD0ic2F2ZU9wZW5pZElkZW50aWZpZXIodGhpcykiPgorCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgICAgICAgICA8bGVnZW5kPjxzOnRleHQgbmFtZT0ibG9naW5QYWdlLm9wZW5JZFByb21wdCIvPjwvbGVnZW5kPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Im9wZW5pZF9pZGVudGlmaWVyIj48czp0ZXh0IG5hbWU9ImxvZ2luUGFnZS5vcGVuSUQiLz48L2xhYmVsPgorICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9ybS1jb250cm9sIiB0eXBlPSJ0ZXh0IiBuYW1lPSJvcGVuaWRfaWRlbnRpZmllciIgaWQ9Im9wZW5pZF9pZGVudGlmaWVyIi8+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgaWQ9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIKKyAgICAgICAgICAgICAgICB2YWx1ZT0iPHM6dGV4dCBuYW1lPSdsb2dpblBhZ2UubG9naW5PcGVuSUQnLz4iPjwvYnV0dG9uPgorCisgICAgICAgIDwvZm9ybT4KKwogICAgIDwvczppZj4KLSAgICAKLSAgICA8czplbHNlPgotICAgICAgICA8cD48czp0ZXh0IG5hbWU9ImxvZ2luUGFnZS5wcm9tcHQiIC8+PC9wPgotICAgIDwvczplbHNlPgotICAgIAotICAgIDxmb3JtIG1ldGhvZD0icG9zdCIgaWQ9ImxvZ2luRm9ybSIgCi0gICAgICAgICAgYWN0aW9uPSI8Yzp1cmwgdmFsdWU9IjwlPSBzZWN1cml0eUNoZWNrVXJsICU+Ii8+IgotICAgICAgICAgIG9uc3VibWl0PSJzYXZlVXNlcm5hbWUodGhpcykiPgogCi0gICAgICAgIDx0YWJsZSB3aWR0aD0iODAlIj4KKyAgICA8czppZiB0ZXN0PSJhdXRoTWV0aG9kICE9ICdPUEVOSUQnIj4KIAotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjAlIiBhbGlnbj0icmlnaHQiPjxzOnRleHQgbmFtZT0ibG9naW5QYWdlLnVzZXJOYW1lIiAvPjwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI4MCUiPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ial91c2VybmFtZSIgaWQ9ImpfdXNlcm5hbWUiIHNpemU9IjI1IiAvPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgorICAgICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGlkPSJsb2dpbkZvcm0iIGNsYXNzPSJmb3JtLWhvcml6b250YWwiCisgICAgICAgICAgICAgIGFjdGlvbj0iPGM6dXJsIHZhbHVlPSI8JT0gc2VjdXJpdHlDaGVja1VybCAlPiIvPiIgb25zdWJtaXQ9InNhdmVVc2VybmFtZSh0aGlzKSI+CiAKLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjIwJSIgYWxpZ249InJpZ2h0Ij48czp0ZXh0IG5hbWU9ImxvZ2luUGFnZS5wYXNzd29yZCIgLz48L3RkPgotICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iODAlIj4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJqX3Bhc3N3b3JkIiBpZD0ial9wYXNzd29yZCIgc2l6ZT0iMjAiIC8+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJhdXRoTWV0aG9kID09ICdEQl9PUEVOSUQnIj4KKyAgICAgICAgICAgICAgICAgICAgPGxlZ2VuZD48czp0ZXh0IG5hbWU9ImxvZ2luUGFnZS5vcGVuSWRIeWJyaWRQcm9tcHQiLz48L2xlZ2VuZD4KKyAgICAgICAgICAgICAgICA8L3M6aWY+CisKKyAgICAgICAgICAgICAgICA8czplbHNlPgorICAgICAgICAgICAgICAgICAgICA8bGVnZW5kPjxzOnRleHQgbmFtZT0ibG9naW5QYWdlLnByb21wdCIvPjwvbGVnZW5kPgorICAgICAgICAgICAgICAgIDwvczplbHNlPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImpfdXNlcm5hbWUiID4gPHM6dGV4dCBuYW1lPSJsb2dpblBhZ2UudXNlck5hbWUiLz4gPC9sYWJlbD4KKyAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9ImZvcm0tY29udHJvbCIgbmFtZT0ial91c2VybmFtZSIgaWQ9ImpfdXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJVc2VybmFtZSIvPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImpfcGFzc3dvcmQiID4gPHM6dGV4dCBuYW1lPSJsb2dpblBhZ2UucGFzc3dvcmQiLz4gPC9sYWJlbD4KKyAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9ImpfcGFzc3dvcmQiIGlkPSJqX3Bhc3N3b3JkIiBwbGFjZWhvbGRlcj0iUGFzc3dvcmQiLz4KKyAgICAgICAgICAgIDwvZGl2PgogCiAgICAgICAgICAgICA8YzppZiB0ZXN0PSIke3JlbWVtYmVyTWVFbmFibGVkfSI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyMCUiPjwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI4MCUiPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Il9zcHJpbmdfc2VjdXJpdHlfcmVtZW1iZXJfbWUiIGlkPSJfc3ByaW5nX3NlY3VyaXR5X3JlbWVtYmVyX21lIiAvPgotICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJyZW1lbWJlck1lIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibG9naW5QYWdlLnJlbWVtYmVyTWUiIC8+Ci0gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CisgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iX3NwcmluZ19zZWN1cml0eV9yZW1lbWJlcl9tZSIgaWQ9Il9zcHJpbmdfc2VjdXJpdHlfcmVtZW1iZXJfbWUiLz4KKyAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iX3NwcmluZ19zZWN1cml0eV9yZW1lbWJlcl9tZSIgPiA8czp0ZXh0IG5hbWU9ImxvZ2luUGFnZS5yZW1lbWJlck1lIi8+IDwvbGFiZWw+CisgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8L2M6aWY+CiAKLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjIwJSI+PC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjgwJSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9ImxvZ2luIiBpZD0ibG9naW4iIHZhbHVlPSI8czp0ZXh0IG5hbWU9J2xvZ2luUGFnZS5sb2dpbicgLz4iIC8+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyZXNldCIgbmFtZT0icmVzZXQiIGlkPSJyZXNldCIgdmFsdWU9IjxzOnRleHQgbmFtZT0nbG9naW5QYWdlLnJlc2V0JyAvPiIKLSAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdqX3VzZXJuYW1lJykuZm9jdXMoKSIgLz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4gICAgICAgIAorICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiB0eXBlPSJzdWJtaXQiIG5hbWU9ImxvZ2luIiBpZD0ibG9naW4iPgorICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9J2xvZ2luUGFnZS5sb2dpbicvPgorICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogCi0gICAgICAgIDwvdGFibGU+ICAgIAotICAgIDwvZm9ybT4KLTwvczppZj4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4iIHR5cGU9InJlc2V0IiBuYW1lPSJyZXNldCIgaWQ9InJlc2V0IgorICAgICAgICAgICAgICAgICAgICAgICAgb25jbGljaz0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2pfdXNlcm5hbWUnKS5mb2N1cygpIj4KKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSdsb2dpblBhZ2UucmVzZXQnLz4KKyAgICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgIDwvZm9ybT4KKyAgICA8L3M6aWY+CiAKIDxzY3JpcHQ+Ci08czppZiB0ZXN0PSJhdXRoTWV0aG9kID09ICdPUEVOSUQnIHx8IGF1dGhNZXRob2QgPT0gJ0RCX09QRU5JRCciPgotZnVuY3Rpb24gZm9jdXNUb09wZW5pZEZvcm0oKSB7Ci0gICAgcmV0dXJuIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgial91c2VybmFtZSIpID09PSBudWxsKSB8fAotICAgICAgICBnZXRDb29raWUoImZhdm9yaXRlX2F1dGhlbnRpY2F0aW9uX21ldGhvZCIpICE9PSAidXNlcm5hbWUiOwotfQotCi1pZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpIHsKLSAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgJiYgZ2V0Q29va2llKCJvcGVuaWRfaWRlbnRpZmllciIpICE9PSBudWxsKSB7Ci0gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvcGVuaWRfaWRlbnRpZmllciIpLnZhbHVlID0gZ2V0Q29va2llKCJvcGVuaWRfaWRlbnRpZmllciIpOworICAgIDxzOmlmIHRlc3Q9ImF1dGhNZXRob2QgPT0gJ09QRU5JRCcgfHwgYXV0aE1ldGhvZCA9PSAnREJfT1BFTklEJyI+CisgICAgZnVuY3Rpb24gZm9jdXNUb09wZW5pZEZvcm0oKSB7CisgICAgICAgIHJldHVybiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImpfdXNlcm5hbWUiKSA9PT0gbnVsbCkgfHwKKyAgICAgICAgICAgICAgICBnZXRDb29raWUoImZhdm9yaXRlX2F1dGhlbnRpY2F0aW9uX21ldGhvZCIpICE9PSAidXNlcm5hbWUiOwogICAgIH0KLSAgICBpZiAoZm9jdXNUb09wZW5pZEZvcm0oKSkgewotICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3BlbmlkX2lkZW50aWZpZXIiKS5mb2N1cygpOwotICAgIH0KLX0KIAotZnVuY3Rpb24gc2F2ZU9wZW5pZElkZW50aWZpZXIodGhlRm9ybSkgewotICAgIHZhciBleHBpcmVzID0gbmV3IERhdGUoKTsKLSAgICBleHBpcmVzLnNldFRpbWUoZXhwaXJlcy5nZXRUaW1lKCkgKyAyNCAqIDMwICogNjAgKiA2MCAqIDEwMDApOyAvLyBzZXRzIGl0IGZvciBhcHByb3ggMzAgZGF5cy4KLSAgICBzZXRDb29raWUoIm9wZW5pZF9pZGVudGlmaWVyIix0aGVGb3JtLm9wZW5pZF9pZGVudGlmaWVyLnZhbHVlLGV4cGlyZXMpOwotICAgIHNldENvb2tpZSgiZmF2b3JpdGVfYXV0aGVudGljYXRpb25fbWV0aG9kIiwgIm9wZW5pZCIpOwotfQotPC9zOmlmPgotCi08czppZiB0ZXN0PSJhdXRoTWV0aG9kICE9ICdPUEVOSUQnIj4KLWZ1bmN0aW9uIGZvY3VzVG9Vc2VybmFtZVBhc3N3b3JkRm9ybSgpIHsKLSAgICByZXR1cm4gKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvcGVuaWRfaWRlbnRpZmllciIpID09PSBudWxsKSB8fAotICAgICAgICBnZXRDb29raWUoImZhdm9yaXRlX2F1dGhlbnRpY2F0aW9uX21ldGhvZCIpID09PSAidXNlcm5hbWUiOwotfQotCi1pZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpIHsKLSAgICBpZiAoZ2V0Q29va2llKCJ1c2VybmFtZSIpICE9IG51bGwpIHsKLSAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgial91c2VybmFtZSIpLnZhbHVlID0gZ2V0Q29va2llKCJ1c2VybmFtZSIpOwotICAgICAgICAgICAgaWYgKGZvY3VzVG9Vc2VybmFtZVBhc3N3b3JkRm9ybSgpKSB7Ci0gICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImpfcGFzc3dvcmQiKS5mb2N1cygpOwotICAgICAgICAgICAgfQorICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCkgeworICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgJiYgZ2V0Q29va2llKCJvcGVuaWRfaWRlbnRpZmllciIpICE9PSBudWxsKSB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3BlbmlkX2lkZW50aWZpZXIiKS52YWx1ZSA9IGdldENvb2tpZSgib3BlbmlkX2lkZW50aWZpZXIiKTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZm9jdXNUb1VzZXJuYW1lUGFzc3dvcmRGb3JtKCkpIHsKLSAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImpfdXNlcm5hbWUiKS5mb2N1cygpOworICAgICAgICBpZiAoZm9jdXNUb09wZW5pZEZvcm0oKSkgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm9wZW5pZF9pZGVudGlmaWVyIikuZm9jdXMoKTsKKyAgICAgICAgfQogICAgIH0KLX0KIAotZnVuY3Rpb24gc2F2ZVVzZXJuYW1lKHRoZUZvcm0pIHsKLSAgICB2YXIgZXhwaXJlcyA9IG5ldyBEYXRlKCk7Ci0gICAgZXhwaXJlcy5zZXRUaW1lKGV4cGlyZXMuZ2V0VGltZSgpICsgMjQgKiAzMCAqIDYwICogNjAgKiAxMDAwKTsgLy8gc2V0cyBpdCBmb3IgYXBwcm94IDMwIGRheXMuCi0gICAgc2V0Q29va2llKCJ1c2VybmFtZSIsdGhlRm9ybS5qX3VzZXJuYW1lLnZhbHVlLGV4cGlyZXMpOwotICAgIHNldENvb2tpZSgiZmF2b3JpdGVfYXV0aGVudGljYXRpb25fbWV0aG9kIiwgInVzZXJuYW1lIik7Ci19Ci08L3M6aWY+CisgICAgZnVuY3Rpb24gc2F2ZU9wZW5pZElkZW50aWZpZXIodGhlRm9ybSkgeworICAgICAgICB2YXIgZXhwaXJlcyA9IG5ldyBEYXRlKCk7CisgICAgICAgIGV4cGlyZXMuc2V0VGltZShleHBpcmVzLmdldFRpbWUoKSArIDI0ICogMzAgKiA2MCAqIDYwICogMTAwMCk7IC8vIHNldHMgaXQgZm9yIGFwcHJveCAzMCBkYXlzLgorICAgICAgICBzZXRDb29raWUoIm9wZW5pZF9pZGVudGlmaWVyIiwgdGhlRm9ybS5vcGVuaWRfaWRlbnRpZmllci52YWx1ZSwgZXhwaXJlcyk7CisgICAgICAgIHNldENvb2tpZSgiZmF2b3JpdGVfYXV0aGVudGljYXRpb25fbWV0aG9kIiwgIm9wZW5pZCIpOworICAgIH0KKyAgICA8L3M6aWY+CisKKyAgICA8czppZiB0ZXN0PSJhdXRoTWV0aG9kICE9ICdPUEVOSUQnIj4KKyAgICBmdW5jdGlvbiBmb2N1c1RvVXNlcm5hbWVQYXNzd29yZEZvcm0oKSB7CisgICAgICAgIHJldHVybiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm9wZW5pZF9pZGVudGlmaWVyIikgPT09IG51bGwpIHx8CisgICAgICAgICAgICAgICAgZ2V0Q29va2llKCJmYXZvcml0ZV9hdXRoZW50aWNhdGlvbl9tZXRob2QiKSA9PT0gInVzZXJuYW1lIjsKKyAgICB9CisKKyAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpIHsKKyAgICAgICAgaWYgKGdldENvb2tpZSgidXNlcm5hbWUiKSAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgial91c2VybmFtZSIpLnZhbHVlID0gZ2V0Q29va2llKCJ1c2VybmFtZSIpOworICAgICAgICAgICAgICAgIGlmIChmb2N1c1RvVXNlcm5hbWVQYXNzd29yZEZvcm0oKSkgeworICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgial9wYXNzd29yZCIpLmZvY3VzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGZvY3VzVG9Vc2VybmFtZVBhc3N3b3JkRm9ybSgpKSB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgial91c2VybmFtZSIpLmZvY3VzKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBzYXZlVXNlcm5hbWUodGhlRm9ybSkgeworICAgICAgICB2YXIgZXhwaXJlcyA9IG5ldyBEYXRlKCk7CisgICAgICAgIGV4cGlyZXMuc2V0VGltZShleHBpcmVzLmdldFRpbWUoKSArIDI0ICogMzAgKiA2MCAqIDYwICogMTAwMCk7IC8vIHNldHMgaXQgZm9yIGFwcHJveCAzMCBkYXlzLgorICAgICAgICBzZXRDb29raWUoInVzZXJuYW1lIiwgdGhlRm9ybS5qX3VzZXJuYW1lLnZhbHVlLCBleHBpcmVzKTsKKyAgICAgICAgc2V0Q29va2llKCJmYXZvcml0ZV9hdXRoZW50aWNhdGlvbl9tZXRob2QiLCAidXNlcm5hbWUiKTsKKyAgICB9CisgICAgPC9zOmlmPgogPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvY29yZS9NYWluTWVudS5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9jb3JlL01haW5NZW51LmpzcAppbmRleCBlYjU2NWY4Li5mMDQyMzk4IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9jb3JlL01haW5NZW51LmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9jb3JlL01haW5NZW51LmpzcApAQCAtNTksMTIzICs1OSwxMTMgQEAKICAgICAKICAgICA8czppdGVyYXRvciB2YXI9InBlcm1zIiB2YWx1ZT0iZXhpc3RpbmdQZXJtaXNzaW9ucyI+CiAKLSAgICAgICAgPGRpdiBjbGFzcz0ieW91cldlYmxvZ0JveCI+ICAKKyAgICAgICAgPGRpdiBjbGFzcz0id2VsbCB5b3VyV2VibG9nQm94Ij4KIAotICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1tX3dlYmxvZ19uYW1lIj48aW1nIHNyYz0nPGM6dXJsIHZhbHVlPSIvaW1hZ2VzL2ZvbGRlci5wbmciLz4nIC8+Jm5ic3A7PHM6cHJvcGVydHkgdmFsdWU9IiNwZXJtcy53ZWJsb2cubmFtZSIgLz48L3NwYW4+Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICA8dGFibGUgY2xhc3M9Im1tX3RhYmxlIiB3aWR0aD0iMTAwJSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCI+CisgICAgICAgICAgICA8aDMgY2xhc3M9Im1tX3dlYmxvZ19uYW1lIj4KKyAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1mb2xkZXItb3BlbiIgYXJpYS1oaWRkZW49InRydWUiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAmbmJzcDs8czpwcm9wZXJ0eSB2YWx1ZT0iI3Blcm1zLndlYmxvZy5uYW1lIiAvPgorICAgICAgICAgICAgPC9oMz4KIAotICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJtbV9zdWJ0YWJsZV9sYWJlbCI+PHM6dGV4dCBuYW1lPSd5b3VyV2Vic2l0ZXMud2VibG9nJy8+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBocmVmPSc8czpwcm9wZXJ0eSB2YWx1ZT0iI3Blcm1zLndlYmxvZy5hYnNvbHV0ZVVSTCIgLz4nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIjcGVybXMud2VibG9nLmFic29sdXRlVVJMIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPjwvdGQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ibW1fc3VidGFibGVfbGFiZWwiPjxzOnRleHQgbmFtZT0neW91cldlYnNpdGVzLnBlcm1pc3Npb24nLz48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzOmlmIHRlc3Q9JyNwZXJtcy5oYXNBY3Rpb24oImFkbWluIiknICA+QURNSU48L3M6aWY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PScjcGVybXMuaGFzQWN0aW9uKCJwb3N0IiknICAgICAgID5BVVRIT1I8L3M6aWY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PScjcGVybXMuaGFzQWN0aW9uKCJlZGl0X2RyYWZ0IiknID5MSU1JVEVEPC9zOmlmPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9Im1tX3N1YnRhYmxlX2xhYmVsIj48czp0ZXh0IG5hbWU9J2dlbmVyaWMuZGVzY3JpcHRpb24nIC8+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48czpwcm9wZXJ0eSB2YWx1ZT0iI3Blcm1zLndlYmxvZy5hYm91dCIgZXNjYXBlSHRtbD0iZmFsc2UiIC8+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDxwPiA8YSBocmVmPSc8czpwcm9wZXJ0eSB2YWx1ZT0iI3Blcm1zLndlYmxvZy5hYnNvbHV0ZVVSTCIgLz4nPgorICAgICAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9IiNwZXJtcy53ZWJsb2cuYWJzb2x1dGVVUkwiIC8+PC9hPjwvcD4KIAotICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9Im1tX3N1YnRhYmxlX2xhYmVsIj48czp0ZXh0IG5hbWU9J3lvdXJXZWJzaXRlcy51c2VyQ291bnQnIC8+PC90ZD4gICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48czpwcm9wZXJ0eSB2YWx1ZT0iI3Blcm1zLndlYmxvZy51c2VyQ291bnQiIC8+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgIDxwPjxzOnByb3BlcnR5IHZhbHVlPSIjcGVybXMud2VibG9nLmFib3V0IiBlc2NhcGVIdG1sPSJmYWxzZSIgLz48L3A+CiAKLSAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJtbV9zdWJ0YWJsZV9sYWJlbCI+PHM6dGV4dCBuYW1lPSd5b3VyV2Vic2l0ZXMudG9kYXlzSGl0cycgLz48L3RkPiAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzOnByb3BlcnR5IHZhbHVlPSIjcGVybXMud2VibG9nLnRvZGF5c0hpdHMiIC8+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgPC90YWJsZT4KLQotICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJtbV90YWJsZV9hY3Rpb25zIiB3aWR0aD0iMjAlIiBhbGlnbj0ibGVmdCIgPgotCi0gICAgICAgICAgICAgICAgICAgICAgIDxzOnVybCBhY3Rpb249ImVudHJ5QWRkIiBuYW1lc3BhY2U9Ii9yb2xsZXItdWkvYXV0aG9yaW5nIiB2YXI9Im5ld0VudHJ5Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiNwZXJtcy53ZWJsb2cuaGFuZGxlIiAvPgotICAgICAgICAgICAgICAgICAgICAgICA8L3M6dXJsPgotICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0nPHM6dXJsIHZhbHVlPSIvaW1hZ2VzL3RhYmxlX2VkaXQucG5nIi8+JyAvPgotICAgICAgICAgICAgICAgICAgICAgICA8czphIGhyZWY9IiV7bmV3RW50cnl9Ij48czp0ZXh0IG5hbWU9InlvdXJXZWJzaXRlcy5uZXdFbnRyeSIgLz48L3M6YT4KLSAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgPCUtLSBTaG93IEVudHJpZXMgbGluayB3aXRoIGNvdW50IGZvciB1c2VycyBhYm92ZSBMSU1JVEVEIHBlcm1pc3Npb24gLS0lPgotICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSchKCNwZXJtcy5oYXNBY3Rpb24oImVkaXRfZHJhZnQiKSknPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dXJsIGFjdGlvbj0iZW50cmllcyIgbmFtZXNwYWNlPSIvcm9sbGVyLXVpL2F1dGhvcmluZyIgdmFyPSJlZGl0RW50cmllcyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iI3Blcm1zLndlYmxvZy5oYW5kbGUiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA8L3M6dXJsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9JzxzOnVybCB2YWx1ZT0iL2ltYWdlcy90YWJsZV9tdWx0aXBsZS5wbmciLz4nIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA8czphIGhyZWY9IiV7ZWRpdEVudHJpZXN9Ij48czp0ZXh0IG5hbWU9InlvdXJXZWJzaXRlcy5lZGl0RW50cmllcyIgLz4gKDxzOnByb3BlcnR5IHZhbHVlPSIjcGVybXMud2VibG9nLmVudHJ5Q291bnQiIC8+KTwvczphPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgIDwvczppZj4KLQotICAgICAgICAgICAgICAgICAgICAgICA8JS0tIFNob3cgQ29tbWVudHMgbGluayB3aXRoIGNvdW50IGZvciB1c2VycyBhYm92ZSBMSU1JVEVEIHBlcm1pc3Npb24gLS0lPgotICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSchKCNwZXJtcy5oYXNBY3Rpb24oImVkaXRfZHJhZnQiKSknPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dXJsIGFjdGlvbj0iY29tbWVudHMiIG5hbWVzcGFjZT0iL3JvbGxlci11aS9hdXRob3JpbmciIHZhcj0ibWFuYWdlQ29tbWVudHMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiNwZXJtcy53ZWJsb2cuaGFuZGxlIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOnVybD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSc8czp1cmwgdmFsdWU9Ii9pbWFnZXMvcGFnZV93aGl0ZV9lZGl0LnBuZyIvPicgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmEgaHJlZj0iJXttYW5hZ2VDb21tZW50c30iPjxzOnRleHQgbmFtZT0ieW91cldlYnNpdGVzLm1hbmFnZUNvbW1lbnRzIiAvPiAoPHM6cHJvcGVydHkgdmFsdWU9IiNwZXJtcy53ZWJsb2cuY29tbWVudENvdW50IiAvPik8L3M6YT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgICAgICAgICA8L3M6aWY+Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgPCUtLSBPbmx5IGFkbWlucyBnZXQgYWNjZXNzIHRvIHRoZW1lIGFuZCBjb25maWcgc2V0dGluZ3MgLS0lPgotICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PScjcGVybXMuaGFzQWN0aW9uKCJhZG1pbiIpJz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgPCUtLSBBbmQgb25seSBzaG93IHRoZW1lIG9wdGlvbiBpZiBjdXN0b20gdGhlbWVzIGFyZSBlbmFibGVkIC0tJT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImdldFByb3AoJ3RoZW1lcy5jdXN0b210aGVtZS5hbGxvd2VkJykiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiNwZXJtcy53ZWJsb2cuZWRpdG9yVGhlbWUgPT0gJ2N1c3RvbSciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp1cmwgYWN0aW9uPSJ0ZW1wbGF0ZXMiIG5hbWVzcGFjZT0iL3JvbGxlci11aS9hdXRob3JpbmciIHZhcj0id2VibG9nVGhlbWUiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iI3Blcm1zLndlYmxvZy5oYW5kbGUiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczp1cmw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmVsc2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnVybCBhY3Rpb249InRoZW1lRWRpdCIgbmFtZXNwYWNlPSIvcm9sbGVyLXVpL2F1dGhvcmluZyIgdmFyPSJ3ZWJsb2dUaGVtZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIjcGVybXMud2VibG9nLmhhbmRsZSIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOnVybD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3M6ZWxzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0nPHM6dXJsIHZhbHVlPSIvcm9sbGVyLXVpL2ltYWdlcy9sYXlvdXQucG5nIi8+JyAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9JzxzOnByb3BlcnR5IHZhbHVlPSJ3ZWJsb2dUaGVtZSIgLz4nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InlvdXJXZWJzaXRlcy50aGVtZSIgLz48L2E+IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8czp1cmwgYWN0aW9uPSJ3ZWJsb2dDb25maWciIG5hbWVzcGFjZT0iL3JvbGxlci11aS9hdXRob3JpbmciIHZhcj0ibWFuYWdlV2VibG9nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIjcGVybXMud2VibG9nLmhhbmRsZSIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczp1cmw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0nPHM6dXJsIHZhbHVlPSIvaW1hZ2VzL2NvZy5wbmciLz4nIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSc8czpwcm9wZXJ0eSB2YWx1ZT0ibWFuYWdlV2VibG9nIiAvPic+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ5b3VyV2Vic2l0ZXMubWFuYWdlIiAvPjwvYT4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgotCi0gICAgICAgICAgICAgICAgICAgICAgIDwlLS0gZG9uJ3QgYWxsb3cgbGFzdCBhZG1pbiB0byByZXNpZ24gZnJvbSBibG9nIC0tJT4KLSAgICAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0nISgjcGVybXMuaGFzQWN0aW9uKCJhZG1pbiIpICYmICNwZXJtcy53ZWJsb2cuYWRtaW5Vc2VyQ291bnQgPT0gMSknPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0nPGM6dXJsIHZhbHVlPSIvaW1hZ2VzL2RlbGV0ZS5wbmciLz4nIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnVybCBhY3Rpb249Im1lbWJlclJlc2lnbiIgbmFtZXNwYWNlPSIvcm9sbGVyLXVpL2F1dGhvcmluZyIgdmFyPSJyZXNpZ25XZWJsb2ciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iI3Blcm1zLndlYmxvZy5oYW5kbGUiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDwvczp1cmw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9JzxzOnByb3BlcnR5IHZhbHVlPSJyZXNpZ25XZWJsb2ciIC8+Jz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0neW91cldlYnNpdGVzLnJlc2lnbicgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgICAgICAgICAgICA8L3M6aWY+Ci0KLSAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPC90YWJsZT4KKyAgICAgICAgICAgIDxwPllvdSBoYXZlIAorICAgICAgICAgICAgPHM6aWYgdGVzdD0nI3Blcm1zLmhhc0FjdGlvbigiYWRtaW4iKSc+QURNSU48L3M6aWY+CisgICAgICAgICAgICA8czppZiB0ZXN0PScjcGVybXMuaGFzQWN0aW9uKCJwb3N0IiknPkFVVEhPUjwvczppZj4KKyAgICAgICAgICAgIDxzOmlmIHRlc3Q9JyNwZXJtcy5oYXNBY3Rpb24oImVkaXRfZHJhZnQiKSc+TElNSVRFRDwvczppZj4KKyAgICAgICAgICAgIDxzOnRleHQgbmFtZT0neW91cldlYnNpdGVzLnBlcm1pc3Npb24nLz48L3A+CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJ0bi1ncm91cCIgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9Ii4uLiI+CisKKyAgICAgICAgICAgICAgICA8JS0tIE5ldyBlbnRyeSBidXR0b24gLS0lPgorICAgICAgICAgICAgICAgIDxzOnVybCBhY3Rpb249ImVudHJ5QWRkIiBuYW1lc3BhY2U9Ii9yb2xsZXItdWkvYXV0aG9yaW5nIiB2YXI9Im5ld0VudHJ5Ij4KKyAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iI3Blcm1zLndlYmxvZy5oYW5kbGUiLz4KKyAgICAgICAgICAgICAgICA8L3M6dXJsPgorICAgICAgICAgICAgICAgIDxzOmEgaHJlZj0iJXtuZXdFbnRyeX0iIGNzc0NsYXNzPSJidG4gYnRuLWRlZmF1bHQiPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1wZW5jaWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ieW91cldlYnNpdGVzLm5ld0VudHJ5Ii8+CisgICAgICAgICAgICAgICAgPC9zOmE+CisKKyAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSchKCNwZXJtcy5oYXNBY3Rpb24oImVkaXRfZHJhZnQiKSknPgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgPCUtLSBTaG93IEVudHJpZXMgYnV0dG9uIHdpdGggY291bnQgZm9yIHVzZXJzIGFib3ZlIExJTUlURUQgcGVybWlzc2lvbiAtLSU+CisgICAgICAgICAgICAgICAgICAgIDxzOnVybCBhY3Rpb249ImVudHJpZXMiIG5hbWVzcGFjZT0iL3JvbGxlci11aS9hdXRob3JpbmciIHZhcj0iZWRpdEVudHJpZXMiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iI3Blcm1zLndlYmxvZy5oYW5kbGUiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zOnVybD4KKyAgICAgICAgICAgICAgICAgICAgPHM6YSBocmVmPSIle2VkaXRFbnRyaWVzfSIgY3NzQ2xhc3M9ImJ0biBidG4tZGVmYXVsdCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1saXN0IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ5b3VyV2Vic2l0ZXMuZWRpdEVudHJpZXMiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSI+PHM6cHJvcGVydHkgdmFsdWU9IiNwZXJtcy53ZWJsb2cuZW50cnlDb3VudCIvPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9zOmE+CisKKyAgICAgICAgICAgICAgICA8L3M6aWY+CisKKyAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSchKCNwZXJtcy5oYXNBY3Rpb24oImVkaXRfZHJhZnQiKSknPgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgPCUtLSBTaG93IENvbW1lbnRzIGJ1dHRvbiB3aXRoIGNvdW50IGZvciB1c2VycyBhYm92ZSBMSU1JVEVEIHBlcm1pc3Npb24gLS0lPgorICAgICAgICAgICAgICAgICAgICA8czp1cmwgYWN0aW9uPSJjb21tZW50cyIgbmFtZXNwYWNlPSIvcm9sbGVyLXVpL2F1dGhvcmluZyIgdmFyPSJtYW5hZ2VDb21tZW50cyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIjcGVybXMud2VibG9nLmhhbmRsZSIvPgorICAgICAgICAgICAgICAgICAgICA8L3M6dXJsPgorICAgICAgICAgICAgICAgICAgICA8czphIGhyZWY9IiV7bWFuYWdlQ29tbWVudHN9IiBjc3NDbGFzcz0iYnRuIGJ0bi1kZWZhdWx0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNvbW1lbnQiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InlvdXJXZWJzaXRlcy5tYW5hZ2VDb21tZW50cyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlIj48czpwcm9wZXJ0eSB2YWx1ZT0iI3Blcm1zLndlYmxvZy5jb21tZW50Q291bnQiLz48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvczphPgorCisgICAgICAgICAgICAgICAgPC9zOmlmPgorCisKKyAgICAgICAgICAgICAgICA8JS0tIE9ubHkgYWRtaW5zIGdldCBhY2Nlc3MgdG8gdGhlbWUgYW5kIGNvbmZpZyBzZXR0aW5ncyAtLSU+CisgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0nI3Blcm1zLmhhc0FjdGlvbigiYWRtaW4iKSc+CisKKyAgICAgICAgICAgICAgICAgICAgPCUtLSBBbmQgb25seSBzaG93IHRoZW1lIG9wdGlvbiBpZiBjdXN0b20gdGhlbWVzIGFyZSBlbmFibGVkIC0tJT4KKyAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iZ2V0UHJvcCgndGhlbWVzLmN1c3RvbXRoZW1lLmFsbG93ZWQnKSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSIjcGVybXMud2VibG9nLmVkaXRvclRoZW1lID09ICdjdXN0b20nIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp1cmwgYWN0aW9uPSJ0ZW1wbGF0ZXMiIG5hbWVzcGFjZT0iL3JvbGxlci11aS9hdXRob3JpbmciIHZhcj0id2VibG9nVGhlbWUiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIjcGVybXMud2VibG9nLmhhbmRsZSIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3M6dXJsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6ZWxzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp1cmwgYWN0aW9uPSJ0aGVtZUVkaXQiIG5hbWVzcGFjZT0iL3JvbGxlci11aS9hdXRob3JpbmciIHZhcj0id2VibG9nVGhlbWUiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIjcGVybXMud2VibG9nLmhhbmRsZSIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3M6dXJsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmVsc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSc8czpwcm9wZXJ0eSB2YWx1ZT0id2VibG9nVGhlbWUiIC8+JyBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1leWUtb3BlbiIgYXJpYS1oaWRkZW49InRydWUiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InlvdXJXZWJzaXRlcy50aGVtZSIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgPCUtLSBzZXR0aW5ncyBidXR0b24gLS0lPgorICAgICAgICAgICAgICAgICAgICA8czp1cmwgYWN0aW9uPSJ3ZWJsb2dDb25maWciIG5hbWVzcGFjZT0iL3JvbGxlci11aS9hdXRob3JpbmciIHZhcj0ibWFuYWdlV2VibG9nIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiNwZXJtcy53ZWJsb2cuaGFuZGxlIi8+CisgICAgICAgICAgICAgICAgICAgIDwvczp1cmw+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9JzxzOnByb3BlcnR5IHZhbHVlPSJtYW5hZ2VXZWJsb2ciIC8+JyBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNvZyIgYXJpYS1oaWRkZW49InRydWUiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ieW91cldlYnNpdGVzLm1hbmFnZSIvPgorICAgICAgICAgICAgICAgICAgICA8L2E+CisKKyAgICAgICAgICAgICAgICA8L3M6aWY+CisKKyAgICAgICAgICAgICAgICA8JS0tIGRvbid0IGFsbG93IGxhc3QgYWRtaW4gdG8gcmVzaWduIGZyb20gYmxvZyAtLSU+CisgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0nISgjcGVybXMuaGFzQWN0aW9uKCJhZG1pbiIpICYmICNwZXJtcy53ZWJsb2cuYWRtaW5Vc2VyQ291bnQgPT0gMSknPgorCisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXRyYXNoIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6dXJsIGFjdGlvbj0ibWVtYmVyUmVzaWduIiBuYW1lc3BhY2U9Ii9yb2xsZXItdWkvYXV0aG9yaW5nIiB2YXI9InJlc2lnbldlYmxvZyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iI3Blcm1zLndlYmxvZy5oYW5kbGUiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvczp1cmw+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSc8czpwcm9wZXJ0eSB2YWx1ZT0icmVzaWduV2VibG9nIiAvPic+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSd5b3VyV2Vic2l0ZXMucmVzaWduJy8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgorCisgICAgICAgICAgICAgICAgPC9zOmlmPgorCisgICAgICAgICAgICA8L2Rpdj4KKwogICAgICAgICA8L2Rpdj4KICAgICAgICAgCiAgICAgPC9zOml0ZXJhdG9yPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvY29yZS9NYWluTWVudVNpZGViYXIuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvY29yZS9NYWluTWVudVNpZGViYXIuanNwCmluZGV4IDRhYTZlZjkuLjI5Y2JiMjMgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2NvcmUvTWFpbk1lbnVTaWRlYmFyLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9jb3JlL01haW5NZW51U2lkZWJhci5qc3AKQEAgLTIyLDMxICsyMiw0MiBAQAogICAgICAgICA8ZGl2IGNsYXNzPSJtZW51LXRsIj4KICAgICAgICAgICAgIAogICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhcklubmVyIj4KLSAgICAgICAgICAgICAgICA8aDM+PHM6dGV4dCBuYW1lPSJ5b3VyV2Vic2l0ZXMuYWN0aW9ucyIgLz48L2gzPgogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDwlLS0gCisgICAgICAgICAgICAgICAgPGg0PjxzOnRleHQgbmFtZT0ieW91cldlYnNpdGVzLmFjdGlvbnMiIC8+PC9oND4gCiAgICAgICAgICAgICAgICAgPGhyIHNpemU9IjEiIG5vc2hhZGU9Im5vc2hhZGUiIC8+Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPGgzPjxhIGhyZWY9IjxzOnVybCBhY3Rpb249InByb2ZpbGUiLz4iPjxzOnRleHQgbmFtZT0ieW91cldlYnNpdGVzLmVkaXRQcm9maWxlIiAvPjwvYT48L2gzPgorICAgICAgICAgICAgICAgIC0tJT4KKworICAgICAgICAgICAgICAgIDwlLS0gRWRpdCBwcm9maWxlIC0tJT4KKworICAgICAgICAgICAgICAgIDxoND48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi11c2VyIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IjxzOnVybCBhY3Rpb249InByb2ZpbGUiLz4iPjxzOnRleHQgbmFtZT0ieW91cldlYnNpdGVzLmVkaXRQcm9maWxlIiAvPjwvYT48L2g0PgogICAgICAgICAgICAgICAgIDxwPjxzOnRleHQgbmFtZT0ieW91cldlYnNpdGVzLmVkaXRQcm9maWxlLmRlc2MiIC8+PC9wPgogCisgICAgICAgICAgICAgICAgPCUtLSBFZGl0IHByb2ZpbGUgLS0lPgorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImdldEJvb2xlYW5Qcm9wKCd3ZWJzZXJ2aWNlcy5lbmFibGVBdG9tUHViJykgJiYgZ2V0UHJvcCgnd2Vic2VydmljZXMuYXRvbVB1YkF1dGgnKSA9PSAnb2F1dGgnIj4KLSAgICAgICAgICAgICAgICAgICAgPGgzPjxhIGhyZWY9IjxzOnVybCBhY3Rpb249Im9hdXRoS2V5cyIgLz4iPjxzOnRleHQgbmFtZT0ieW91cldlYnNpdGVzLm9hdXRoS2V5cyIgLz48L2E+PC9oMz4KKyAgICAgICAgICAgICAgICAgICAgPGg0PjxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWxvY2siIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IjxzOnVybCBhY3Rpb249Im9hdXRoS2V5cyIgLz4iPjxzOnRleHQgbmFtZT0ieW91cldlYnNpdGVzLm9hdXRoS2V5cyIgLz48L2E+PC9oND4KICAgICAgICAgICAgICAgICAgICAgPHA+PHM6dGV4dCBuYW1lPSJ5b3VyV2Vic2l0ZXMub2F1dGhLZXlzLmRlc2MiIC8+PC9wPgogICAgICAgICAgICAgICAgIDwvczppZj4KIAorICAgICAgICAgICAgICAgIDwlLS0gQ3JlYXRlIHdlYmxvZyAtLSU+CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iZ2V0Qm9vbGVhblByb3AoJ3NpdGUuYWxsb3dVc2VyV2VibG9nQ3JlYXRpb24nKSAmJiAoZ2V0Qm9vbGVhblByb3AoJ2dyb3VwYmxvZ2dpbmcuZW5hYmxlZCcpIHx8IChleGlzdGluZ1Blcm1pc3Npb25zLmlzRW1wdHkgJiYgcGVuZGluZ1Blcm1pc3Npb25zLmlzRW1wdHkpKSI+Ci0gICAgICAgICAgICAgICAgICAgIDxoMz48YSBocmVmPSI8czp1cmwgYWN0aW9uPSJjcmVhdGVXZWJsb2ciIC8+Ij48czp0ZXh0IG5hbWU9InlvdXJXZWJzaXRlcy5jcmVhdGVXZWJsb2ciIC8+PC9hPjwvaDM+CisgICAgICAgICAgICAgICAgICAgIDxoND48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1wbHVzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI8czp1cmwgYWN0aW9uPSJjcmVhdGVXZWJsb2ciIC8+Ij48czp0ZXh0IG5hbWU9InlvdXJXZWJzaXRlcy5jcmVhdGVXZWJsb2ciIC8+PC9hPjwvaDQ+CiAgICAgICAgICAgICAgICAgICAgIDxwPjxzOnRleHQgbmFtZT0ieW91cldlYnNpdGVzLmNyZWF0ZVdlYmxvZy5kZXNjIiAvPjwvcD4KICAgICAgICAgICAgICAgICA8L3M6aWY+CiAKLSAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJ1c2VySXNBZG1pbiI+ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIDxoMz48YSBocmVmPSI8czp1cmwgYWN0aW9uPSJnbG9iYWxDb25maWciIG5hbWVzcGFjZT0iL3JvbGxlci11aS9hZG1pbiIgLz4iPjxzOnRleHQgbmFtZT0ieW91cldlYnNpdGVzLmdsb2JhbEFkbWluIiAvPjwvYT48L2gzPiAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJ1c2VySXNBZG1pbiI+CisKKyAgICAgICAgICAgICAgICAgICAgPCUtLSBSb2xsZXIgc2V0dGluZ3MgLS0lPgorCisgICAgICAgICAgICAgICAgICAgIDxoND48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi13cmVuY2giIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IjxzOnVybCBhY3Rpb249Imdsb2JhbENvbmZpZyIgbmFtZXNwYWNlPSIvcm9sbGVyLXVpL2FkbWluIiAvPiI+PHM6dGV4dCBuYW1lPSJ5b3VyV2Vic2l0ZXMuZ2xvYmFsQWRtaW4iIC8+PC9hPjwvaDQ+ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICA8cD48czp0ZXh0IG5hbWU9InlvdXJXZWJzaXRlcy5nbG9iYWxBZG1pbi5kZXNjIiAvPjwvcD4KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImdldEJvb2xlYW5Qcm9wKCdwbGFuZXQuYWdncmVnYXRvci5lbmFibGVkJykiPiAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgPGgzPjxhIGhyZWY9IjxzOnVybCBhY3Rpb249InBsYW5ldENvbmZpZyIgbmFtZXNwYWNlPSIvcm9sbGVyLXVpL2FkbWluIiAvPiI+PHM6dGV4dCBuYW1lPSJ5b3VyV2Vic2l0ZXMucGxhbmV0QWRtaW4iIC8+PC9hPjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cD48czp0ZXh0IG5hbWU9InlvdXJXZWJzaXRlcy5wbGFuZXRBZG1pbi5kZXNjIiAvPjwvcD4KLSAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgorCiAgICAgICAgICAgICAgICAgPC9zOmlmPgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIDxiciAvPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvY29yZS9Qcm9maWxlLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2NvcmUvUHJvZmlsZS5qc3AKaW5kZXggYzBjM2UxMy4uMmY5MWQwMSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvY29yZS9Qcm9maWxlLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9jb3JlL1Byb2ZpbGUuanNwCkBAIC0xNyw3ICsxNyw3IEBACiAtLSU+CiA8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+CiAKLTxwIGNsYXNzPSJzdWJ0aXRsZSI+PHM6dGV4dCBuYW1lPSJ1c2VyQWRtaW4udGl0bGUuZWRpdFVzZXIiIC8+PC9wPgorPHAgY2xhc3M9InN1YnRpdGxlIj48czp0ZXh0IG5hbWU9InVzZXJBZG1pbi50aXRsZS5lZGl0VXNlciIvPjwvcD4KIAogPHM6aWYgdGVzdD0iYXV0aE1ldGhvZCA9PSAnREJfT1BFTklEJyI+CiAgICAgPHAgY2xhc3M9InBhZ2V0aXAiPgpAQCAtMjUsODMgKzI1LDEwOCBAQAogICAgIDwvcD4KIDwvczppZj4KIAotPHM6Zm9ybSBhY3Rpb249InByb2ZpbGUhc2F2ZSI+Ci0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0gICAgCi0gICAgPHRhYmxlIGNsYXNzPSJmb3JtdGFibGUiPgotICAgICAgICAKLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGxhYmVsIGZvcj0idXNlck5hbWUiIC8+PHM6dGV4dCBuYW1lPSJ1c2VyU2V0dGluZ3MudXNlcm5hbWUiIC8+PC9sYWJlbD48L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+PHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4udXNlck5hbWUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIiByZWFkb25seT0idHJ1ZSIgY3NzU3R5bGU9ImJhY2tncm91bmQ6ICNlNWU1ZTUiIC8+PC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0idXNlclNldHRpbmdzLnRpcC51c2VybmFtZSIgLz48L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICAKLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGxhYmVsIGZvcj0ic2NyZWVuTmFtZSIgLz48czp0ZXh0IG5hbWU9InVzZXJTZXR0aW5ncy5zY3JlZW5uYW1lIiAvPjwvbGFiZWw+PC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnNjcmVlbk5hbWUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIiAvPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci50aXAuc2NyZWVuTmFtZSIgLz48L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICAKLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGxhYmVsIGZvcj0iZnVsbE5hbWUiIC8+PHM6dGV4dCBuYW1lPSJ1c2VyU2V0dGluZ3MuZnVsbG5hbWUiIC8+PC9sYWJlbD48L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+PHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uZnVsbE5hbWUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIiAvPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci50aXAuZnVsbE5hbWUiIC8+PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgCi0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxsYWJlbCBmb3I9ImVtYWlsQWRkcmVzcyIgLz48czp0ZXh0IG5hbWU9InVzZXJTZXR0aW5ncy5lbWFpbCIgLz48L2xhYmVsPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5lbWFpbEFkZHJlc3MiIHNpemU9IjQwIiBtYXhsZW5ndGg9IjQwIiAvPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci50aXAuZW1haWwiIC8+PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgCi0gICAgICAgIDxzOmlmIHRlc3Q9ImF1dGhNZXRob2QgPT0gJ1JPTExFUkRCJyB8fCBhdXRoTWV0aG9kID09ICdEQl9PUEVOSUQnIj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48bGFiZWwgZm9yPSJwYXNzd29yZFRleHQiIC8+PHM6dGV4dCBuYW1lPSJ1c2VyU2V0dGluZ3MucGFzc3dvcmQiIC8+PC9sYWJlbD48L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPgotICAgICAgICAgICAgICAgICAgICA8czpwYXNzd29yZCBuYW1lPSJiZWFuLnBhc3N3b3JkVGV4dCIgc2l6ZT0iMjAiIG1heGxlbmd0aD0iMjAiIC8+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci50aXAucGFzc3dvcmQiIC8+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+CiAKLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48bGFiZWwgZm9yPSJwYXNzd29yZENvbmZpcm0iIC8+PHM6dGV4dCBuYW1lPSJ1c2VyU2V0dGluZ3MucGFzc3dvcmRDb25maXJtIiAvPjwvbGFiZWw+PC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48czpwYXNzd29yZCBuYW1lPSJiZWFuLnBhc3N3b3JkQ29uZmlybSIgc2l6ZT0iMjAiIG1heGxlbmd0aD0iMjAiIC8+PC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci50aXAucGFzc3dvcmRDb25maXJtIiAvPjwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3M6aWY+Ci0gICAgICAgIDxzOmVsc2U+Ci0gICAgICAgICAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5wYXNzd29yZCIgLz4KLSAgICAgICAgPC9zOmVsc2U+Ci0gICAgICAgIAotICAgICAgICA8czppZiB0ZXN0PSJhdXRoTWV0aG9kID09ICdPUEVOSUQnIHx8IGF1dGhNZXRob2QgPT0gJ0RCX09QRU5JRCciPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxsYWJlbCBmb3I9Im9wZW5JZFVybCIgLz48czp0ZXh0IG5hbWU9InVzZXJTZXR0aW5ncy5vcGVuSWRVcmwiIC8+PC9sYWJlbD48L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLm9wZW5JZFVybCIgc2l6ZT0iNDAiIG1heGxlbmd0aD0iMjU1IiBzdHlsZT0id2lkdGg6NzUlIiBpZD0iZl9vcGVuaWRfaWRlbnRpZmllciIgLz48L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLnRpcC5vcGVuSWRVcmwiIC8+PC90ZD4KLSAgICAgICAgICAgIDwvdHI+ICAgICAKLSAgICAgICAgPC9zOmlmPgotICAgICAgICAKLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGxhYmVsIGZvcj0ibG9jYWxlIiAvPjxzOnRleHQgbmFtZT0idXNlclNldHRpbmdzLmxvY2FsZSIgLz48L2xhYmVsPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj4KLSAgICAgICAgICAgICAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi5sb2NhbGUiIHNpemU9IjEiIGxpc3Q9ImxvY2FsZXNMaXN0IiBsaXN0VmFsdWU9ImRpc3BsYXlOYW1lIiAvPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLnRpcC5sb2NhbGUiIC8+PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgCi0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxsYWJlbCBmb3I9InRpbWVab25lIiAvPjxzOnRleHQgbmFtZT0idXNlclNldHRpbmdzLnRpbWVab25lIiAvPjwvbGFiZWw+PC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPgotICAgICAgICAgICAgICAgIDxzOnNlbGVjdCBuYW1lPSJiZWFuLnRpbWVab25lIiBzaXplPSIxIiBsaXN0PSJ0aW1lWm9uZXNMaXN0IiAvPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLnRpcC50aW1lWm9uZSIgLz48L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICAKLSAgICA8L3RhYmxlPgotICAgIAotICAgIDxiciAvPgotICAgIAotICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLnNhdmUnKX0iIC8+Ci0gICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5jYW5jZWwiLz4iIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbj0nPHM6dXJsIGFjdGlvbj0ibWVudSIvPiciIC8+Cis8czpmb3JtIGFjdGlvbj0icHJvZmlsZSFzYXZlIiB0aGVtZT0iYm9vdHN0cmFwIiBjc3NDbGFzcz0iZm9ybS1ob3Jpem9udGFsIj4KKyAgICA8czpoaWRkZW4gbmFtZT0ic2FsdCIvPgorCisgICAgPHM6dGV4dGZpZWxkIGxhYmVsPSIle2dldFRleHQoJ3VzZXJTZXR0aW5ncy51c2VybmFtZScpfSIKKyAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCd1c2VyUmVnaXN0ZXIudGlwLnVzZXJOYW1lJyl9IgorICAgICAgICAgICAgICAgICBvbmNoYW5nZT0iZm9ybUNoYW5nZWQoKSIgb25rZXl1cD0iZm9ybUNoYW5nZWQoKSIKKyAgICAgICAgICAgICAgICAgbmFtZT0iYmVhbi51c2VyTmFtZSIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iMzAiIHJlYWRvbmx5PSJ0cnVlIi8+CisKKyAgICA8czp0ZXh0ZmllbGQgbGFiZWw9IiV7Z2V0VGV4dCgndXNlclNldHRpbmdzLnNjcmVlbm5hbWUnKX0iCisgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiV7Z2V0VGV4dCgndXNlclJlZ2lzdGVyLnRpcC5zY3JlZW5OYW1lJyl9IgorICAgICAgICAgICAgICAgICBvbmNoYW5nZT0iZm9ybUNoYW5nZWQoKSIgb25rZXl1cD0iZm9ybUNoYW5nZWQoKSIKKyAgICAgICAgICAgICAgICAgbmFtZT0iYmVhbi5zY3JlZW5OYW1lIiBzaXplPSIzMCIgbWF4bGVuZ3RoPSIzMCIvPgorCisgICAgPHM6dGV4dGZpZWxkIGxhYmVsPSIle2dldFRleHQoJ3VzZXJTZXR0aW5ncy5mdWxsbmFtZScpfSIKKyAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCcnKX0iCisgICAgICAgICAgICAgICAgIG9uY2hhbmdlPSJmb3JtQ2hhbmdlZCgpIiBvbmtleXVwPSJmb3JtQ2hhbmdlZCgpIgorICAgICAgICAgICAgICAgICBuYW1lPSJiZWFuLmZ1bGxOYW1lIiBzaXplPSIzMCIgbWF4bGVuZ3RoPSIzMCIvPgorCisgICAgPHM6dGV4dGZpZWxkIGxhYmVsPSIle2dldFRleHQoJ3VzZXJTZXR0aW5ncy5lbWFpbCcpfSIKKyAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCd1c2VyUmVnaXN0ZXIudGlwLmVtYWlsJyl9IgorICAgICAgICAgICAgICAgICBvbmNoYW5nZT0iZm9ybUNoYW5nZWQoKSIgb25rZXl1cD0iZm9ybUNoYW5nZWQoKSIKKyAgICAgICAgICAgICAgICAgbmFtZT0iYmVhbi5lbWFpbEFkZHJlc3MiIHNpemU9IjQwIiBtYXhsZW5ndGg9IjQwIi8+CisKKyAgICA8czppZiB0ZXN0PSJhdXRoTWV0aG9kID09ICdST0xMRVJEQicgfHwgYXV0aE1ldGhvZCA9PSAnREJfT1BFTklEJyI+CisgICAgICAgIDxzOnBhc3N3b3JkIGxhYmVsPSIle2dldFRleHQoJ3VzZXJTZXR0aW5ncy5wYXNzd29yZCcpfSIKKyAgICAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCd1c2VyU2V0dGluZ3MudGlwLnBhc3N3b3JkJyl9IgorICAgICAgICAgICAgICAgICAgICBvbmNoYW5nZT0iZm9ybUNoYW5nZWQoKSIgb25rZXl1cD0iZm9ybUNoYW5nZWQoKSIKKyAgICAgICAgICAgICAgICAgICAgbmFtZT0iYmVhbi5wYXNzd29yZFRleHQiIHNpemU9IjIwIiBtYXhsZW5ndGg9IjIwIi8+CisKKyAgICAgICAgPHM6cGFzc3dvcmQgbGFiZWw9IiV7Z2V0VGV4dCgndXNlclNldHRpbmdzLnBhc3N3b3JkQ29uZmlybScpfSIKKyAgICAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCd1c2VyUmVnaXN0ZXIudGlwLnBhc3N3b3JkQ29uZmlybScpfSIKKyAgICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9ImZvcm1DaGFuZ2VkKCkiIG9ua2V5dXA9ImZvcm1DaGFuZ2VkKCkiCisgICAgICAgICAgICAgICAgICAgIG5hbWU9ImJlYW4ucGFzc3dvcmRDb25maXJtIiBzaXplPSIyMCIgbWF4bGVuZ3RoPSIyMCIvPgorICAgIDwvczppZj4KKyAgICA8czplbHNlPgorICAgICAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5wYXNzd29yZCIvPgorICAgIDwvczplbHNlPgorCisgICAgPHM6aWYgdGVzdD0iYXV0aE1ldGhvZCA9PSAnT1BFTklEJyB8fCBhdXRoTWV0aG9kID09ICdEQl9PUEVOSUQnIj4KKyAgICAgICAgPHM6dGV4dGZpZWxkIGxhYmVsPSIle2dldFRleHQoJ3VzZXJTZXR0aW5ncy5vcGVuSWRVcmwnKX0iCisgICAgICAgICAgICAgICAgICAgICB0b29sdGlwPSIle2dldFRleHQoJ3VzZXJSZWdpc3Rlci50aXAub3BlbklkVXJsJyl9IgorICAgICAgICAgICAgICAgICAgICAgbmFtZT0iYmVhbi5vcGVuSWRVcmwiIHNpemU9IjQwIiBtYXhsZW5ndGg9IjI1NSIKKyAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDo3NSUiIGlkPSJmX29wZW5pZF9pZGVudGlmaWVyIi8+CisgICAgPC9zOmlmPgorCisgICAgPHM6c2VsZWN0IGxhYmVsPSIle2dldFRleHQoJ3VzZXJTZXR0aW5ncy5sb2NhbGUnKX0iCisgICAgICAgICAgICAgIHRvb2x0aXA9IiV7Z2V0VGV4dCgndXNlclJlZ2lzdGVyLnRpcC5sb2NhbGUnKX0iCisgICAgICAgICAgICAgIG5hbWU9ImJlYW4ubG9jYWxlIiBzaXplPSIxIiBsaXN0PSJsb2NhbGVzTGlzdCIgbGlzdFZhbHVlPSJkaXNwbGF5TmFtZSIvPgorCisgICAgPHM6c2VsZWN0IGxhYmVsPSIle2dldFRleHQoJ3VzZXJTZXR0aW5ncy50aW1lWm9uZScpfSIKKyAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCd1c2VyUmVnaXN0ZXIudGlwLnRpbWVab25lJyl9IgorICAgICAgICAgICAgICBuYW1lPSJiZWFuLnRpbWVab25lIiBzaXplPSIxIiBsaXN0PSJ0aW1lWm9uZXNMaXN0Ii8+CisKKyAgICA8czpzdWJtaXQgY3NzQ2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgdmFsdWU9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5zYXZlJyl9Ii8+CisKKyAgICA8aW5wdXQgY2xhc3M9ImJ0biIgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPHM6dGV4dCBuYW1lPSJnZW5lcmljLmNhbmNlbCIvPiIKKyAgICAgICAgICAgb25jbGljaz0id2luZG93LmxvY2F0aW9uPSc8czp1cmwgYWN0aW9uPSJtZW51Ii8+JyIvPgogCiA8L3M6Zm9ybT4KKworPCUtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLSU+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKworICAgIHZhciBzYXZlQnV0dG9uOworCisgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgeworICAgICAgICBzYXZlQnV0dG9uID0gJCgiI3Byb2ZpbGVfMCIpOworICAgICAgICBmb3JtQ2hhbmdlZCgpOworICAgIH0pOworCisgICAgZnVuY3Rpb24gZm9ybUNoYW5nZWQoKSB7CisgICAgICAgIHZhciB2YWxpZCA9IGZhbHNlOworCisgICAgICAgIHZhciBzY3JlZW5OYW1lID0gJCgiI3Byb2ZpbGVfYmVhbl9zY3JlZW5OYW1lOmZpcnN0IikudmFsKCk7CisgICAgICAgIHZhciBmdWxsTmFtZSA9ICQoIiNwcm9maWxlX2JlYW5fZnVsbE5hbWU6Zmlyc3QiKS52YWwoKTsKKyAgICAgICAgdmFyIGVtYWlsID0gJCgiI3Byb2ZpbGVfYmVhbl9lbWFpbEFkZHJlc3M6Zmlyc3QiKS52YWwoKTsKKyAgICAgICAgdmFyIHBhc3N3b3JkID0gJCgiI3Byb2ZpbGVfYmVhbl9wYXNzd29yZFRleHQ6Zmlyc3QiKS52YWwoKTsKKyAgICAgICAgdmFyIHBhc3N3b3JkQ29uZmlybSA9ICQoIiNwcm9maWxlX2JlYW5fcGFzc3dvcmRDb25maXJtOmZpcnN0IikudmFsKCk7CisKKyAgICAgICAgaWYgKHNjcmVlbk5hbWUgJiYgc2NyZWVuTmFtZS50cmltKCkubGVuZ3RoID4gMAorICAgICAgICAgICAgJiYgZnVsbE5hbWUgJiYgZnVsbE5hbWUudHJpbSgpLmxlbmd0aCA+IDAKKyAgICAgICAgICAgICYmIGVtYWlsICYmIGVtYWlsLnRyaW0oKS5sZW5ndGggPiAwICYmIHZhbGlkYXRlRW1haWwoZW1haWwpKSB7CisgICAgICAgICAgICB2YWxpZCA9IHRydWU7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHBhc3N3b3JkICYmIHBhc3N3b3JkLnRyaW0oKS5sZW5ndGgpIHx8IChwYXNzd29yZENvbmZpcm0gJiYgcGFzc3dvcmRDb25maXJtLnRyaW0oKS5sZW5ndGggPiAwKSkgeworICAgICAgICAgICAgaWYgKHBhc3N3b3JkICE9PSBwYXNzd29yZENvbmZpcm0pIHsKKyAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHZhbGlkKSB7CisgICAgICAgICAgICBzYXZlQnV0dG9uLmF0dHIoImRpc2FibGVkIiwgZmFsc2UpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2F2ZUJ1dHRvbi5hdHRyKCJkaXNhYmxlZCIsIHRydWUpOworICAgICAgICB9CisKKyAgICB9CisKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvY29yZS9SZWdpc3Rlci5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9jb3JlL1JlZ2lzdGVyLmpzcAppbmRleCA5NmE4ZDA1Li42ZjhmY2VmIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9jb3JlL1JlZ2lzdGVyLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9jb3JlL1JlZ2lzdGVyLmpzcApAQCAtMTksMTgzICsxOSwxNzUgQEAKIAogPHA+PHM6dGV4dCBuYW1lPSJ1c2VyUmVnaXN0ZXIucHJvbXB0IiAvPjwvcD4KIAotPHM6Zm9ybSBhY3Rpb249InJlZ2lzdGVyIXNhdmUiID4KKzxzOmZvcm0gYWN0aW9uPSJyZWdpc3RlciFzYXZlIiAgdGhlbWU9ImJvb3RzdHJhcCIgY3NzQ2xhc3M9ImZvcm0taG9yaXpvbnRhbCI+CiAJPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+CiAgICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4uaWQiIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4uZW5hYmxlZCIgLz4KIAotPHRhYmxlIGNsYXNzPSJmb3JtdGFibGUiPgotICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgPGgyPjxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLmhlYWRpbmcuaWRlbnRpZmljYXRpb24iIC8+PC9oMj4KLSAgICAgICAgICAgIDxwPjxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLnRpcC5pZGVudGlmaWNhdGlvbiIgLz48L3A+Ci0gICAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLSAgICAgICAgCisgICAgPGgyPjxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLmhlYWRpbmcuaWRlbnRpZmljYXRpb24iIC8+PC9oMj4KKyAgICA8cD48czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci50aXAuaWRlbnRpZmljYXRpb24iIC8+PC9wPgorCiAgICAgPHM6aWYgdGVzdD0iYXV0aE1ldGhvZCA9PSAnTERBUCciPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48bGFiZWwgZm9yPSJ1c2VyTmFtZSIgLz48czp0ZXh0IG5hbWU9InVzZXJTZXR0aW5ncy51c2VybmFtZSIgLz48L2xhYmVsPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48c3Ryb25nPjxzOnByb3BlcnR5IHZhbHVlPSJiZWFuLnVzZXJOYW1lIiAvPjwvc3Ryb25nPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci50aXAudXNlck5hbWUiIC8+PC90ZD4KLSAgICAgICAgPC90cj4KKworICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKworICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjb2wtc20tMyBjb250cm9sLWxhYmVsIj4KKyAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InVzZXJTZXR0aW5ncy51c2VybmFtZSIgLz4KKyAgICAgICAgICAgIDwvbGFiZWw+CisKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS05IGNvbnRyb2xzIj4KKyAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZm9ybS1jb250cm9sLXN0YXRpYyI+CisgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSJiZWFuLnVzZXJOYW1lIi8+CisgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPCUtLSA8czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci50aXAudXNlck5hbWUiIC8+IC0tJT4KKwogICAgIDwvczppZj4KICAgICA8czplbHNlPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48bGFiZWwgZm9yPSJ1c2VyTmFtZSIgLz48czp0ZXh0IG5hbWU9InVzZXJTZXR0aW5ncy51c2VybmFtZSIgLz48L2xhYmVsPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi51c2VyTmFtZSIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iMzAiIG9ua2V5dXA9Im9uQ2hhbmdlKCkiIC8+PC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLnRpcC51c2VyTmFtZSIgLz48L3RkPgotICAgICAgICA8L3RyPgorICAgICAgICA8czp0ZXh0ZmllbGQgbGFiZWw9IiV7Z2V0VGV4dCgndXNlclNldHRpbmdzLnVzZXJuYW1lJyl9IgorICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCd1c2VyUmVnaXN0ZXIudGlwLnVzZXJOYW1lJyl9IgorICAgICAgICAgICAgICAgICAgICAgb25rZXl1cD0ib25DaGFuZ2UoKSIKKyAgICAgICAgICAgICAgICAgICAgIG5hbWU9ImJlYW4udXNlck5hbWUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIiAvPgogICAgIDwvczplbHNlPgotICAgICAKLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxsYWJlbCBmb3I9InNjcmVlbk5hbWUiIC8+PHM6dGV4dCBuYW1lPSJ1c2VyU2V0dGluZ3Muc2NyZWVubmFtZSIgLz48L2xhYmVsPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnNjcmVlbk5hbWUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIiBvbmtleXVwPSJvbkNoYW5nZSgpIiAvPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLnRpcC5zY3JlZW5OYW1lIiAvPjwvdGQ+Ci0gICAgPC90cj4KIAotICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGxhYmVsIGZvcj0iZnVsbE5hbWUiIC8+PHM6dGV4dCBuYW1lPSJ1c2VyU2V0dGluZ3MuZnVsbG5hbWUiIC8+PC9sYWJlbD48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5mdWxsTmFtZSIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iMzAiIG9ua2V5dXA9Im9uQ2hhbmdlKCkiIC8+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+PHM6dGV4dCBuYW1lPSJ1c2VyUmVnaXN0ZXIudGlwLmZ1bGxOYW1lIiAvPjwvdGQ+Ci0gICAgPC90cj4KKyAgICA8czp0ZXh0ZmllbGQgbGFiZWw9IiV7Z2V0VGV4dCgndXNlclNldHRpbmdzLnNjcmVlbm5hbWUnKX0iCisgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiV7Z2V0VGV4dCgndXNlclJlZ2lzdGVyLnRpcC5zY3JlZW5OYW1lJyl9IgorICAgICAgICAgICAgICAgICBvbmtleXVwPSJvbkNoYW5nZSgpIgorICAgICAgICAgICAgICAgICBuYW1lPSJiZWFuLnNjcmVlbk5hbWUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIiAvPgogCi0gICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48bGFiZWwgZm9yPSJlbWFpbEFkZHJlc3MiIC8+PHM6dGV4dCBuYW1lPSJ1c2VyU2V0dGluZ3MuZW1haWwiIC8+PC9sYWJlbD48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5lbWFpbEFkZHJlc3MiIHNpemU9IjQwIiBtYXhsZW5ndGg9IjQwIiBvbmtleXVwPSJvbkNoYW5nZSgpIiAvPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLnRpcC5lbWFpbCIgLz48L3RkPgotICAgIDwvdHI+CisgICAgPHM6dGV4dGZpZWxkIGxhYmVsPSIle2dldFRleHQoJ3VzZXJTZXR0aW5ncy5mdWxsbmFtZScpfSIKKyAgICAgICAgICAgICAgICAgdG9vbHRpcD0iJXtnZXRUZXh0KCd1c2VyUmVnaXN0ZXIudGlwLmZ1bGxOYW1lJyl9IgorICAgICAgICAgICAgICAgICBvbmtleXVwPSJvbkNoYW5nZSgpIgorICAgICAgICAgICAgICAgICBuYW1lPSJiZWFuLmZ1bGxOYW1lIiBzaXplPSIzMCIgbWF4bGVuZ3RoPSIzMCIgLz4KKworICAgIDxzOnRleHRmaWVsZCBsYWJlbD0iJXtnZXRUZXh0KCd1c2VyU2V0dGluZ3MuZW1haWwnKX0iCisgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiV7Z2V0VGV4dCgndXNlclJlZ2lzdGVyLnRpcC5lbWFpbCcpfSIKKyAgICAgICAgICAgICAgICAgb25rZXl1cD0ib25DaGFuZ2UoKSIKKyAgICAgICAgICAgICAgICAgbmFtZT0iYmVhbi5lbWFpbEFkZHJlc3MiIHNpemU9IjQwIiBtYXhsZW5ndGg9IjQwIiAvPgogCiAgICAgPHM6aWYgdGVzdD0iYXV0aE1ldGhvZCAhPSAnTERBUCciPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY29sc3Bhbj0iMyI+Ci0gICAgICAgICAgICAgICAgPGgyPjxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLmhlYWRpbmcuYXV0aGVudGljYXRpb24iIC8+PC9oMj4KIAotICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImF1dGhNZXRob2QgPT0gJ1JPTExFUkRCJyI+Ci0gICAgICAgICAgICAgICAgPHA+PHM6dGV4dCBuYW1lPSJ1c2VyUmVnaXN0ZXIudGlwLm9wZW5pZC5kaXNhYmxlZCIgLz48L3A+ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8L3M6aWY+CisgICAgICAgIDxoMj48czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci5oZWFkaW5nLmF1dGhlbnRpY2F0aW9uIiAvPjwvaDI+CiAKLSAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJhdXRoTWV0aG9kID09ICdEQl9PUEVOSUQnIj4KLSAgICAgICAgICAgICAgICA8cD48czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci50aXAub3BlbmlkLmh5YnJpZCIgLz48L3A+ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8L3M6aWY+CisgICAgICAgIDxzOmlmIHRlc3Q9ImF1dGhNZXRob2QgPT0gJ1JPTExFUkRCJyI+CisgICAgICAgICAgICA8cD48czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci50aXAub3BlbmlkLmRpc2FibGVkIiAvPjwvcD4KKyAgICAgICAgPC9zOmlmPgogCi0gICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iYXV0aE1ldGhvZCA9PSAnT1BFTklEJyI+Ci0gICAgICAgICAgICAgICAgPHA+PHM6dGV4dCBuYW1lPSJ1c2VyUmVnaXN0ZXIudGlwLm9wZW5pZC5vbmx5IiAvPjwvcD4gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICAgIAorICAgICAgICA8czppZiB0ZXN0PSJhdXRoTWV0aG9kID09ICdEQl9PUEVOSUQnIj4KKyAgICAgICAgICAgIDxwPjxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLnRpcC5vcGVuaWQuaHlicmlkIiAvPjwvcD4KKyAgICAgICAgPC9zOmlmPgorCisgICAgICAgIDxzOmlmIHRlc3Q9ImF1dGhNZXRob2QgPT0gJ09QRU5JRCciPgorICAgICAgICAgICAgPHA+PHM6dGV4dCBuYW1lPSJ1c2VyUmVnaXN0ZXIudGlwLm9wZW5pZC5vbmx5IiAvPjwvcD4KKyAgICAgICAgPC9zOmlmPgorCiAgICAgICAgIDxzOmlmIHRlc3Q9ImF1dGhNZXRob2QgPT0gJ1JPTExFUkRCJyB8fCBhdXRoTWV0aG9kID09ICdEQl9PUEVOSUQnIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGxhYmVsIGZvcj0icGFzc3dvcmRUZXh0IiAvPjxzOnRleHQgbmFtZT0idXNlclNldHRpbmdzLnBhc3N3b3JkIiAvPjwvbGFiZWw+PC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPgotICAgICAgICAgICAgICAgPHM6cGFzc3dvcmQgbmFtZT0iYmVhbi5wYXNzd29yZFRleHQiIHNpemU9IjIwIiBtYXhsZW5ndGg9IjIwIiBvbmtleXVwPSJvbkNoYW5nZSgpIiAvPgotICAgICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4ucGFzc3dvcmQiIC8+Ci0gICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci50aXAucGFzc3dvcmQiIC8+PC90ZD4KLSAgICAgICAgPC90cj4KIAotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48bGFiZWwgZm9yPSJwYXNzd29yZENvbmZpcm0iIC8+PHM6dGV4dCBuYW1lPSJ1c2VyU2V0dGluZ3MucGFzc3dvcmRDb25maXJtIiAvPjwvbGFiZWw+PC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxzOnBhc3N3b3JkIG5hbWU9ImJlYW4ucGFzc3dvcmRDb25maXJtIiBzaXplPSIyMCIgbWF4bGVuZ3RoPSIyMCIgb25rZXl1cD0ib25DaGFuZ2UoKSIgLz48L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+PHM6dGV4dCBuYW1lPSJ1c2VyUmVnaXN0ZXIudGlwLnBhc3N3b3JkQ29uZmlybSIgLz48L3RkPgotICAgICAgICA8L3RyPgorICAgICAgICAgICAgPHM6cGFzc3dvcmQgbGFiZWw9IiV7Z2V0VGV4dCgndXNlclNldHRpbmdzLnBhc3N3b3JkJyl9IgorICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiV7Z2V0VGV4dCgndXNlclJlZ2lzdGVyLnRpcC5wYXNzd29yZCcpfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICBvbmtleXVwPSJvbkNoYW5nZSgpIgorICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ImJlYW4ucGFzc3dvcmRUZXh0IiBzaXplPSIyMCIgbWF4bGVuZ3RoPSIyMCIgLz4KKworICAgICAgICAgICAgPHM6cGFzc3dvcmQgbGFiZWw9IiV7Z2V0VGV4dCgndXNlclNldHRpbmdzLnBhc3N3b3JkQ29uZmlybScpfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwPSIle2dldFRleHQoJ3VzZXJSZWdpc3Rlci50aXAucGFzc3dvcmRDb25maXJtJyl9IgorICAgICAgICAgICAgICAgICAgICAgICAgIG9ua2V5dXA9Im9uQ2hhbmdlKCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iYmVhbi5wYXNzd29yZENvbmZpcm0iIHNpemU9IjIwIiBtYXhsZW5ndGg9IjIwIiAvPgorCiAgICAgICAgIDwvczppZj4KICAgICAgICAgPHM6ZWxzZT4KICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJiZWFuLnBhc3N3b3JkIiAvPgogICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4ucGFzc3dvcmRUZXh0IiAvPgogICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4ucGFzc3dvcmRDb25maXJtIiAvPgogICAgICAgICA8L3M6ZWxzZT4KLSAgICAKIAogICAgICAgICA8czppZiB0ZXN0PSJhdXRoTWV0aG9kID09ICdPUEVOSUQnIHx8IGF1dGhNZXRob2QgPT0gJ0RCX09QRU5JRCciPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxsYWJlbCBmb3I9Im9wZW5JZFVybCIgLz48czp0ZXh0IG5hbWU9InVzZXJTZXR0aW5ncy5vcGVuSWRVcmwiIC8+PC9sYWJlbD48L3RkPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLm9wZW5JZFVybCIgc2l6ZT0iNDAiIG1heGxlbmd0aD0iMjU1IiBzdHlsZT0id2lkdGg6NzUlIiBpZD0iZl9vcGVuaWRfaWRlbnRpZmllciIgb25rZXl1cD0ib25DaGFuZ2UoKSIvPjwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+PHM6dGV4dCBuYW1lPSJ1c2VyUmVnaXN0ZXIudGlwLm9wZW5JZFVybCIgLz48L3RkPgotICAgICAgICAgICAgPC90cj4gIAotICAgICAgICA8L3M6aWY+IAorCisgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbGFiZWw9IiV7Z2V0VGV4dCgndXNlclNldHRpbmdzLm9wZW5JZFVybCcpfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwPSIle2dldFRleHQoJ3VzZXJSZWdpc3Rlci50aXAub3BlbklkVXJsJyl9IgorICAgICAgICAgICAgICAgICAgICAgICAgIG9ua2V5dXA9Im9uQ2hhbmdlKCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iYmVhbi5vcGVuSWRVcmwiIHNpemU9IjQwIiBtYXhsZW5ndGg9IjI1NSIgLz4KKyAgICAgICAgPC9zOmlmPgogCiAgICAgPC9zOmlmPgogCi0gICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0iMyI+ICAgIAotICAgICAgICAgICAgPGgyPjxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLmhlYWRpbmcubG9jYWxlIiAvPjwvaDI+Ci0gICAgICAgICAgICA8cD48czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci50aXAubG9jYWxlQW5kVGltZVpvbmUiIC8+PC9wPgotICAgICAgICA8L3RkPgotICAgIDwvdHI+CisgICAgPGgyPjxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLmhlYWRpbmcubG9jYWxlIiAvPjwvaDI+CisgICAgPHA+PHM6dGV4dCBuYW1lPSJ1c2VyUmVnaXN0ZXIudGlwLmxvY2FsZUFuZFRpbWVab25lIiAvPjwvcD4KIAotICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGxhYmVsIGZvcj0ibG9jYWxlIiAvPjxzOnRleHQgbmFtZT0idXNlclNldHRpbmdzLmxvY2FsZSIgLz48L2xhYmVsPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPgotICAgICAgICAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi5sb2NhbGUiIHNpemU9IjEiIGxpc3Q9ImxvY2FsZXNMaXN0IiBsaXN0VmFsdWU9ImRpc3BsYXlOYW1lIiAvPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci50aXAubG9jYWxlIiAvPjwvdGQ+Ci0gICAgPC90cj4KKyAgICA8czpzZWxlY3QgbGFiZWw9IiV7Z2V0VGV4dCgndXNlclNldHRpbmdzLmxvY2FsZScpfSIKKyAgICAgICAgICAgIHRvb2x0aXA9IiV7Z2V0VGV4dCgndXNlclJlZ2lzdGVyLnRpcC5sb2NhbGUnKX0iCisgICAgICAgICAgICBvbmtleXVwPSJvbkNoYW5nZSgpIgorICAgICAgICAgICAgbGlzdD0ibG9jYWxlc0xpc3QiIGxpc3RWYWx1ZT0iZGlzcGxheU5hbWUiCisgICAgICAgICAgICBuYW1lPSJiZWFuLmxvY2FsZSIgLz4KIAotICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PGxhYmVsIGZvcj0idGltZVpvbmUiIC8+PHM6dGV4dCBuYW1lPSJ1c2VyU2V0dGluZ3MudGltZVpvbmUiIC8+PC9sYWJlbD48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj4KLSAgICAgICAgICAgPHM6c2VsZWN0IG5hbWU9ImJlYW4udGltZVpvbmUiIHNpemU9IjEiIGxpc3Q9InRpbWVab25lc0xpc3QiIC8+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLnRpcC50aW1lWm9uZSIgLz48L3RkPgotICAgIDwvdHI+CisgICAgPHM6c2VsZWN0IGxhYmVsPSIle2dldFRleHQoJ3VzZXJTZXR0aW5ncy50aW1lWm9uZScpfSIKKyAgICAgICAgICAgIHRvb2x0aXA9IiV7Z2V0VGV4dCgndXNlclJlZ2lzdGVyLnRpcC50aW1lWm9uZScpfSIKKyAgICAgICAgICAgIG9ua2V5dXA9Im9uQ2hhbmdlKCkiCisgICAgICAgICAgICBsaXN0PSJ0aW1lWm9uZXNMaXN0IgorICAgICAgICAgICAgbmFtZT0iYmVhbi50aW1lWm9uZSIgLz4KIAotPC90YWJsZT4KKyAgICA8aDI+PHM6dGV4dCBuYW1lPSJ1c2VyUmVnaXN0ZXIuaGVhZGluZy5yZWFkeSIgLz48L2gyPgogCi08YnIgLz4KKyAgICA8cCBpZD0icmVhZHl0aXAiPjxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLnRpcC5yZWFkeSIgLz48L3A+CiAKLTxoMj48czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci5oZWFkaW5nLnJlYWR5IiAvPjwvaDI+Ci0KLTxwIGlkPSJyZWFkeXRpcCI+PHM6dGV4dCBuYW1lPSJ1c2VyUmVnaXN0ZXIudGlwLnJlYWR5IiAvPjwvcD4KLQotPHM6c3VibWl0IGlkPSJzdWJtaXQiIGtleT0idXNlclJlZ2lzdGVyLmJ1dHRvbi5zYXZlIiAvPgotPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5jYW5jZWwiLz4iCi0gICAgb25jbGljaz0id2luZG93LmxvY2F0aW9uPSc8czp1cmwgdmFsdWU9Ii8iLz4nIiAvPgorICAgIDxzOnN1Ym1pdCBpZD0ic3VibWl0IiBrZXk9InVzZXJSZWdpc3Rlci5idXR0b24uc2F2ZSIgY3NzQ2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgLz4KKyAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1jYW5jZWwiCisgICAgICAgICAgIHZhbHVlPSI8czp0ZXh0IG5hbWU9ImdlbmVyaWMuY2FuY2VsIi8+IiBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb249JzxzOnVybCB2YWx1ZT0iLyIvPiciIC8+CiAKIDwvczpmb3JtPgogCi08c2NyaXB0PgotZnVuY3Rpb24gb25DaGFuZ2UoKSB7Ci0gICAgdmFyIGRpc2FibGVkID0gdHJ1ZTsKLSAgICB2YXIgYXV0aE1ldGhvZCAgICA9ICI8czpwcm9wZXJ0eSB2YWx1ZT0nYXV0aE1ldGhvZCcgLz4iOwotICAgIHZhciBlbWFpbEFkZHJlc3MgICAgPSBkb2N1bWVudC5yZWdpc3RlclsnYmVhbi5lbWFpbEFkZHJlc3MnXS52YWx1ZTsKLSAgICB2YXIgdXNlck5hbWUgPSBwYXNzd29yZFRleHQgPSBwYXNzd29yZENvbmZpcm0gPSBvcGVuSWRVcmwgPSAiIjsKKzwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KIAotICAgIGlmIChhdXRoTWV0aG9kID09ICdMREFQJykgewotICAgICAgICB1c2VyTmFtZSA9ICc8czpwcm9wZXJ0eSB2YWx1ZT0iYmVhbi51c2VyTmFtZSIgLz4nOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVzZXJOYW1lID0gZG9jdW1lbnQucmVnaXN0ZXJbJ2JlYW4udXNlck5hbWUnXS52YWx1ZTsKLSAgICB9Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAKLSAgICBpZiAoYXV0aE1ldGhvZCA9PSAiUk9MTEVSREIiIHx8IGF1dGhNZXRob2QgPT0gIkRCX09QRU5JRCIpIHsKLSAgICAgICAgcGFzc3dvcmRUZXh0ICAgID0gZG9jdW1lbnQucmVnaXN0ZXJbJ2JlYW4ucGFzc3dvcmRUZXh0J10udmFsdWU7Ci0gICAgICAgIHBhc3N3b3JkQ29uZmlybSA9IGRvY3VtZW50LnJlZ2lzdGVyWydiZWFuLnBhc3N3b3JkQ29uZmlybSddLnZhbHVlOwotICAgIH0KLSAgICBpZiAoYXV0aE1ldGhvZCA9PSAiT1BFTklEIiB8fCBhdXRoTWV0aG9kID09ICJEQl9PUEVOSUQiKSB7Ci0gICAgICAgIG9wZW5JZFVybCA9IGRvY3VtZW50LnJlZ2lzdGVyWydiZWFuLm9wZW5JZFVybCddLnZhbHVlOwotICAgIH0KKyAgICBmdW5jdGlvbiBvbkNoYW5nZSgpIHsKKyAgICAgICAgdmFyIGRpc2FibGVkID0gdHJ1ZTsKKyAgICAgICAgdmFyIGF1dGhNZXRob2QgICAgPSAiPHM6cHJvcGVydHkgdmFsdWU9J2F1dGhNZXRob2QnIC8+IjsKKyAgICAgICAgdmFyIGVtYWlsQWRkcmVzcyAgICA9IGRvY3VtZW50LnJlZ2lzdGVyWydiZWFuLmVtYWlsQWRkcmVzcyddLnZhbHVlOworICAgICAgICB2YXIgdXNlck5hbWUgPSBwYXNzd29yZFRleHQgPSBwYXNzd29yZENvbmZpcm0gPSBvcGVuSWRVcmwgPSAiIjsKIAotICAgIGlmIChhdXRoTWV0aG9kID09ICJMREFQIikgewotICAgICAgICBpZiAoZW1haWxBZGRyZXNzKSBkaXNhYmxlZCA9IGZhbHNlOwotICAgIH0gZWxzZSBpZiAoYXV0aE1ldGhvZCA9PSAiUk9MTEVSREIiKSB7Ci0gICAgICAgIGlmIChlbWFpbEFkZHJlc3MgJiYgdXNlck5hbWUgJiYgcGFzc3dvcmRUZXh0ICYmIHBhc3N3b3JkQ29uZmlybSkgZGlzYWJsZWQgPSBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKGF1dGhNZXRob2QgPT0gIk9QRU5JRCIpIHsKLSAgICAgICAgaWYgKGVtYWlsQWRkcmVzcyAmJiBvcGVuSWRVcmwpIGRpc2FibGVkID0gZmFsc2U7Ci0gICAgfSBlbHNlIGlmIChhdXRoTWV0aG9kID09ICJEQl9PUEVOSUQiKSB7Ci0gICAgICAgIGlmIChlbWFpbEFkZHJlc3MgJiYgKChwYXNzd29yZFRleHQgJiYgcGFzc3dvcmRDb25maXJtKSB8fCAob3BlbklkVXJsKSkgKSBkaXNhYmxlZCA9IGZhbHNlOwotICAgIH0KLQotICAgIGlmIChhdXRoTWV0aG9kICE9ICdMREFQJykgewotICAgICAgICBpZiAoKHBhc3N3b3JkVGV4dCB8fCBwYXNzd29yZENvbmZpcm0pICYmICEocGFzc3dvcmRUZXh0ID09IHBhc3N3b3JkQ29uZmlybSkpIHsKLSAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWFkeXRpcCcpLmlubmVySFRNTCA9ICc8czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci5lcnJvci5taXNtYXRjaGVkUGFzc3dvcmRzIiAvPic7Ci0gICAgICAgICAgICBkaXNhYmxlZCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSBpZiAoZGlzYWJsZWQpIHsKLSAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWFkeXRpcCcpLmlubmVySFRNTCA9ICc8czp0ZXh0IG5hbWU9InVzZXJSZWdpc3Rlci50aXAucmVhZHkiIC8+JwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlYWR5dGlwJykuaW5uZXJIVE1MID0gJzxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLnN1Y2Nlc3MucmVhZHkiIC8+JworICAgICAgICBpZiAoIXZhbGlkYXRlRW1haWwoZW1haWxBZGRyZXNzKSkgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1Ym1pdCcpLmRpc2FibGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRoTWV0aG9kID09PSAnTERBUCcpIHsKKyAgICAgICAgICAgIHVzZXJOYW1lID0gJzxzOnByb3BlcnR5IHZhbHVlPSJiZWFuLnVzZXJOYW1lIiAvPic7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1c2VyTmFtZSA9IGRvY3VtZW50LnJlZ2lzdGVyWydiZWFuLnVzZXJOYW1lJ10udmFsdWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoYXV0aE1ldGhvZCA9PT0gIlJPTExFUkRCIiB8fCBhdXRoTWV0aG9kID09PSAiREJfT1BFTklEIikgeworICAgICAgICAgICAgcGFzc3dvcmRUZXh0ICAgID0gZG9jdW1lbnQucmVnaXN0ZXJbJ2JlYW4ucGFzc3dvcmRUZXh0J10udmFsdWU7CisgICAgICAgICAgICBwYXNzd29yZENvbmZpcm0gPSBkb2N1bWVudC5yZWdpc3RlclsnYmVhbi5wYXNzd29yZENvbmZpcm0nXS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXV0aE1ldGhvZCA9PT0gIk9QRU5JRCIgfHwgYXV0aE1ldGhvZCA9PT0gIkRCX09QRU5JRCIpIHsKKyAgICAgICAgICAgIG9wZW5JZFVybCA9IGRvY3VtZW50LnJlZ2lzdGVyWydiZWFuLm9wZW5JZFVybCddLnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGF1dGhNZXRob2QgPT09ICJMREFQIikgeworICAgICAgICAgICAgaWYgKGVtYWlsQWRkcmVzcykgZGlzYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgfSBlbHNlIGlmIChhdXRoTWV0aG9kID09PSAiUk9MTEVSREIiKSB7CisgICAgICAgICAgICBpZiAoZW1haWxBZGRyZXNzICYmIHVzZXJOYW1lICYmIHBhc3N3b3JkVGV4dCAmJiBwYXNzd29yZENvbmZpcm0pIGRpc2FibGVkID0gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoYXV0aE1ldGhvZCA9PT0gIk9QRU5JRCIpIHsKKyAgICAgICAgICAgIGlmIChlbWFpbEFkZHJlc3MgJiYgb3BlbklkVXJsKSBkaXNhYmxlZCA9IGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKGF1dGhNZXRob2QgPT09ICJEQl9PUEVOSUQiKSB7CisgICAgICAgICAgICBpZiAoZW1haWxBZGRyZXNzICYmICgocGFzc3dvcmRUZXh0ICYmIHBhc3N3b3JkQ29uZmlybSkgfHwgKG9wZW5JZFVybCkpICkgZGlzYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChhdXRoTWV0aG9kICE9PSAnTERBUCcpIHsKKyAgICAgICAgICAgIGlmICgocGFzc3dvcmRUZXh0IHx8IHBhc3N3b3JkQ29uZmlybSkgJiYgIShwYXNzd29yZFRleHQgPT09IHBhc3N3b3JkQ29uZmlybSkpIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVhZHl0aXAnKS5pbm5lckhUTUwgPSAnPHM6dGV4dCBuYW1lPSJ1c2VyUmVnaXN0ZXIuZXJyb3IubWlzbWF0Y2hlZFBhc3N3b3JkcyIgLz4nOworICAgICAgICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlzYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVhZHl0aXAnKS5pbm5lckhUTUwgPSAnPHM6dGV4dCBuYW1lPSJ1c2VyUmVnaXN0ZXIudGlwLnJlYWR5IiAvPicKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlYWR5dGlwJykuaW5uZXJIVE1MID0gJzxzOnRleHQgbmFtZT0idXNlclJlZ2lzdGVyLnN1Y2Nlc3MucmVhZHkiIC8+JworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJtaXQnKS5kaXNhYmxlZCA9IGRpc2FibGVkOwogICAgIH0KLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3VibWl0JykuZGlzYWJsZWQgPSBkaXNhYmxlZDsKLX0KLWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdWJtaXQnKS5kaXNhYmxlZCA9IHRydWU7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N1Ym1pdCcpLmRpc2FibGVkID0gdHJ1ZTsKKwogPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9jb3JlL1NldHVwLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2NvcmUvU2V0dXAuanNwCmluZGV4IDEwNGZhNzIuLmY0M2FhYmEgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2NvcmUvU2V0dXAuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2NvcmUvU2V0dXAuanNwCkBAIC0xNyw5NSArMTcsMTAwIEBACiAtLSU+CiA8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+CiAKLTxzOnRleHQgbmFtZT0iaW5kZXgucHJvbXB0IiAvPjxiciAvPjxiciAvPgotPGRpdiBzdHlsZT0id2lkdGg6NzUlIj4KLSAgICA8dWw+Ci0gICAgICAgIDwlLS0KLSAgICAgICAgICAgICAgSW5kZXggcGFnZSBvbiBSb2xsZXIgc3RhcnR1cDsgdGVsbCB0aGUgdXNlciBob3cgdG8gY29tcGxldGUgdGhlaXIgUm9sbGVyIGluc3RhbGwsCi0gICAgICAgICAgICAgIHdpdGggaGVscGZ1bCBub3RlcyBhbmQgbGlua3MgdG8gdGhlIGFwcHJvcHJpYXRlIHBsYWNlcyBpbiB0aGUgUm9sbGVyIFVJLgotICAgICAgICAtLSU+Cis8cCBzdHlsZT0ibWFyZ2luLWJvdHRvbToyZW0iPjxzOnRleHQgbmFtZT0iaW5kZXgucHJvbXB0Ii8+IDwvcD4KIAotICAgICAgICA8JS0tIFNURVAgMTogQ3JlYXRlIGEgdXNlciBpZiB5b3UgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZSAtLSU+Ci0gICAgICAgIDxsaT48Yj48czp0ZXh0IG5hbWU9ImluZGV4LmNyZWF0ZVVzZXIiIC8+Ci0gICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0idXNlckNvdW50ID4gMCI+IC0KLSAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJpbmRleC5jcmVhdGVVc2VyRG9uZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0idXNlckNvdW50IiAvPgotICAgICAgICAgICAgICAgICAgICA8L3M6dGV4dD4KLSAgICAgICAgICAgICAgICA8L3M6aWY+Ci0gICAgICAgICAgICA8L2I+PGJyIC8+PGJyIC8+Ci0gICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImluZGV4LmNyZWF0ZVVzZXJIZWxwIiAvPjxiciAvPjxiciAvPgotICAgICAgICAgICAgPHM6aWYgdGVzdD0idXNlckNvdW50ID09IDAiPgotICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iaW5kZXguY3JlYXRlVXNlckJ5IiAvPgotICAgICAgICAgICAgICAgIDxhIGlkPSJhX2NyZWF0ZVVzZXIiIGhyZWY9JzxzOnVybCBhY3Rpb249InJlZ2lzdGVyIi8+Jz4KLSAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJpbmRleC5jcmVhdGVVc2VyUGFnZSIgLz48L2E+LgotICAgICAgICAgICAgICAgIDxiciAvPjxiciAvPgorPCUtLQorICAgICAgSW5kZXggcGFnZSBvbiBSb2xsZXIgc3RhcnR1cDsgdGVsbCB0aGUgdXNlciBob3cgdG8gY29tcGxldGUgdGhlaXIgUm9sbGVyIGluc3RhbGwsCisgICAgICB3aXRoIGhlbHBmdWwgbm90ZXMgYW5kIGxpbmtzIHRvIHRoZSBhcHByb3ByaWF0ZSBwbGFjZXMgaW4gdGhlIFJvbGxlciBVSS4KKy0tJT4KKworCis8JS0tIFNURVAgMTogQ3JlYXRlIGEgdXNlciBpZiB5b3UgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZSAtLSU+CisKKzxkaXYgY2xhc3M9InBhbmVsIHBhbmVsLWRlZmF1bHQiPgorICAgIDxkaXYgY2xhc3M9InBhbmVsLWhlYWRpbmciPgorICAgICAgICA8aDMgY2xhc3M9InBhbmVsLXRpdGxlIj4KKyAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iaW5kZXguY3JlYXRlVXNlciIvPgorICAgICAgICAgICAgPHM6aWYgdGVzdD0idXNlckNvdW50ID4gMCI+IC0KKyAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImluZGV4LmNyZWF0ZVVzZXJEb25lIj4KKyAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9InVzZXJDb3VudCIvPgorICAgICAgICAgICAgICAgIDwvczp0ZXh0PgogICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgPGJyIC8+Ci0gICAgICAgIDwvbGk+CisgICAgICAgIDwvaDM+CisgICAgPC9kaXY+CiAKLSAgICAgICAgPCUtLSBTVEVQIDI6IENyZWF0ZSBhIHdlYmxvZyBpZiB5b3UgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZSAtLSU+Ci0gICAgICAgIDxsaT48Yj48czp0ZXh0IG5hbWU9ImluZGV4LmNyZWF0ZVdlYmxvZyIgLz4KLSAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJibG9nQ291bnQgPiAwIj4gLQotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImluZGV4LmNyZWF0ZVdlYmxvZ0RvbmUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9ImJsb2dDb3VudCIgLz4KLSAgICAgICAgICAgICAgICAgICAgPC9zOnRleHQ+Ci0gICAgICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgPC9iPjxiciAvPjxiciAvPgotICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJpbmRleC5jcmVhdGVXZWJsb2dIZWxwIiAvPjxiciAvPjxiciAvPgotICAgICAgICAgICAgPHM6aWYgdGVzdD0idXNlckNvdW50ID4gMCAmJiBibG9nQ291bnQgPT0gMCI+Ci0gICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJpbmRleC5jcmVhdGVXZWJsb2dCeSIgLz4KLSAgICAgICAgICAgICAgICA8YSBpZD0iYV9jcmVhdGVCbG9nIiBocmVmPSc8czp1cmwgYWN0aW9uPSJjcmVhdGVXZWJsb2ciLz4nPgotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImluZGV4LmNyZWF0ZVdlYmxvZ1BhZ2UiIC8+PC9hPi4KLSAgICAgICAgICAgIDxiciAvPjxiciAvPgorICAgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiPgorCisgICAgICAgIDxwPjxzOnRleHQgbmFtZT0iaW5kZXguY3JlYXRlVXNlckhlbHAiLz48L3A+CisgICAgICAgIDxwPjxzOmlmIHRlc3Q9InVzZXJDb3VudCA9PSAwIj4KKyAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iaW5kZXguY3JlYXRlVXNlckJ5Ii8+CisgICAgICAgICAgICA8YSBpZD0iYV9jcmVhdGVVc2VyIiBocmVmPSc8czp1cmwgYWN0aW9uPSJyZWdpc3RlciIvPic+CisgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJpbmRleC5jcmVhdGVVc2VyUGFnZSIvPjwvYT4uCisgICAgICAgIDwvczppZj48L3A+CisKKyAgICA8L2Rpdj4KKzwvZGl2PgorCis8JS0tIFNURVAgMjogQ3JlYXRlIGEgd2VibG9nIGlmIHlvdSBkb24ndCBhbHJlYWR5IGhhdmUgb25lIC0tJT4KKworPGRpdiBjbGFzcz0icGFuZWwgcGFuZWwtZGVmYXVsdCI+CisgICAgPGRpdiBjbGFzcz0icGFuZWwtaGVhZGluZyI+CisgICAgICAgIDxoMyBjbGFzcz0icGFuZWwtdGl0bGUiPgorICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJpbmRleC5jcmVhdGVXZWJsb2ciLz4KKyAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImJsb2dDb3VudCA+IDAiPiAtCisgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJpbmRleC5jcmVhdGVXZWJsb2dEb25lIj4KKyAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9ImJsb2dDb3VudCIvPgorICAgICAgICAgICAgICAgIDwvczp0ZXh0PgogICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgPGJyIC8+Ci0gICAgICAgIDwvbGk+CisgICAgICAgIDwvaDM+CisgICAgPC9kaXY+CiAKLSAgICAgICAgPCUtLSBTVEVQIDM6IERlc2lnbmF0ZSBhIHdlYmxvZyB0byBiZSB0aGUgZnJvbnRwYWdlIHdlYmxvZyAtLSU+Ci0gICAgICAgIDxsaT48Yj48czp0ZXh0IG5hbWU9ImluZGV4LnNldEZyb250cGFnZSIgLz48L2I+PGJyIC8+Ci0gICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iaW5kZXguc2V0RnJvbnRwYWdlSGVscCIgLz48YnIgLz4KLSAgICAgICAgICAgIDxiciAvPgorICAgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiPgogCi0gICAgICAgICAgPHM6aWYgdGVzdD0iYmxvZ0NvdW50ID4gMCI+Ci0gICAgICAgICAgICA8czpmb3JtIGFjdGlvbj0ic2V0dXAhc2F2ZSI+Ci0JCQkJPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+CisgICAgICAgIDxzOnRleHQgbmFtZT0iaW5kZXguY3JlYXRlV2VibG9nSGVscCIvPjxici8+PGJyLz4KKyAgICAgICAgPHM6aWYgdGVzdD0idXNlckNvdW50ID4gMCAmJiBibG9nQ291bnQgPT0gMCI+CisgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImluZGV4LmNyZWF0ZVdlYmxvZ0J5Ii8+CisgICAgICAgICAgICA8YSBpZD0iYV9jcmVhdGVCbG9nIiBocmVmPSc8czp1cmwgYWN0aW9uPSJjcmVhdGVXZWJsb2ciLz4nPgorICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iaW5kZXguY3JlYXRlV2VibG9nUGFnZSIvPjwvYT4uCisgICAgICAgIDwvczppZj4KIAotICAgICAgICAgICAgICAgIDx0YWJsZSBzdHlsZT0ibWFyZ2luLWxlZnQ6MmVtO3dpZHRoOjcwJSI+Ci0gICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iZnJvbnRwYWdlQ29uZmlnLmZyb250cGFnZUJsb2dOYW1lIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnNlbGVjdCBsaXN0PSJ3ZWJsb2dzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0S2V5PSJoYW5kbGUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RWYWx1ZT0ibmFtZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iZnJvbnRwYWdlQmxvZyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImZyb250cGFnZUJsb2ciIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImZyb250cGFnZUNvbmZpZy5mcm9udHBhZ2VBZ2dyZWdhdGVkIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPjxiciAvPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmNoZWNrYm94IG5hbWU9ImFnZ3JlZ2F0ZWQiIHZhbHVlPSJhZ2dyZWdhdGVkIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiIGNsYXNzPSJsYWJlbCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLnNhdmUnKX0iIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgPC9kaXY+Cis8L2Rpdj4KKworCis8JS0tIFNURVAgMzogRGVzaWduYXRlIGEgd2VibG9nIHRvIGJlIHRoZSBmcm9udHBhZ2Ugd2VibG9nIC0tJT4KKworPGRpdiBjbGFzcz0icGFuZWwgcGFuZWwtZGVmYXVsdCI+CisgICAgPGRpdiBjbGFzcz0icGFuZWwtaGVhZGluZyI+CisgICAgICAgIDxoMyBjbGFzcz0icGFuZWwtdGl0bGUiPgorICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJpbmRleC5zZXRGcm9udHBhZ2UiLz4KKyAgICAgICAgPC9oMz4KKyAgICA8L2Rpdj4KKworICAgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiPgorCisgICAgICAgIDxwPjxzOnRleHQgbmFtZT0iaW5kZXguc2V0RnJvbnRwYWdlSGVscCIvPjwvcD4KKworICAgICAgICA8czppZiB0ZXN0PSJibG9nQ291bnQgPiAwIj4KKworICAgICAgICAgICAgPHM6Zm9ybSBhY3Rpb249InNldHVwIXNhdmUiIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLWhvcml6b250YWwiPgorICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0Ii8+CisKKyAgICAgICAgICAgICAgICA8czpzZWxlY3QgbGlzdD0id2VibG9ncyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEtleT0iaGFuZGxlIgorICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0VmFsdWU9Im5hbWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ2Zyb250cGFnZUNvbmZpZy5mcm9udHBhZ2VCbG9nTmFtZScpfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iZnJvbnRwYWdlQmxvZyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImZyb250cGFnZUJsb2ciLz4KKworICAgICAgICAgICAgICAgIDxzOmNoZWNrYm94IG5hbWU9ImFnZ3JlZ2F0ZWQiIHZhbHVlPSJhZ2dyZWdhdGVkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ2Zyb250cGFnZUNvbmZpZy5mcm9udHBhZ2VBZ2dyZWdhdGVkJyl9Ii8+CisKKyAgICAgICAgICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5zYXZlJyl9IiBjc3NDbGFzcz0iYnRuIGJ0bi1kZWZhdWx0Ii8+CiAKICAgICAgICAgICAgIDwvczpmb3JtPgotICAgICAgICAgIDwvczppZj4KIAotICAgICAgICA8L2xpPgotCi0gICAgPC91bD4KKyAgICAgICAgPC9zOmlmPgorICAgIDwvZGl2PgogPC9kaXY+CisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2NvcmUvVXBncmFkZURhdGFiYXNlLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2NvcmUvVXBncmFkZURhdGFiYXNlLmpzcAppbmRleCA2M2Q1MmQyLi41YzhlMTYyIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9jb3JlL1VwZ3JhZGVEYXRhYmFzZS5qc3AKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvY29yZS9VcGdyYWRlRGF0YWJhc2UuanNwCkBAIC0xOSw0NyArMTksNDQgQEAKIAogCiA8czppZiB0ZXN0PSJlcnJvciI+Ci0gICAgCi0gICAgPGgyPjxzOnRleHQgbmFtZT0iaW5zdGFsbGVyLmVycm9yVXBncmFkaW5nVGFibGVzIiAvPjwvaDI+IAotICAgIDxwPjxzOnRleHQgbmFtZT0iaW5zdGFsbGVyLmVycm9yVXBncmFkaW5nVGFibGVzRXhwbGFuYXRpb24iIC8+PC9wPiAKLTxwcmU+Ci08czppdGVyYXRvciB2YWx1ZT0ibWVzc2FnZXMiPjxzOnByb3BlcnR5Lz48YnIgLz48L3M6aXRlcmF0b3I+Ci08L3ByZT4KLSAgICAKKworICAgIDxoMj48czp0ZXh0IG5hbWU9Imluc3RhbGxlci5lcnJvclVwZ3JhZGluZ1RhYmxlcyIvPjwvaDI+CisgICAgPHA+PHM6dGV4dCBuYW1lPSJpbnN0YWxsZXIuZXJyb3JVcGdyYWRpbmdUYWJsZXNFeHBsYW5hdGlvbiIvPjwvcD4KKyAgICA8cHJlPgorICAgICAgICA8czppdGVyYXRvciB2YWx1ZT0ibWVzc2FnZXMiPjxzOnByb3BlcnR5Lz48YnIvPjwvczppdGVyYXRvcj4KKyAgICA8L3ByZT4KKwogPC9zOmlmPgogPHM6ZWxzZWlmIHRlc3Q9InVwZ3JhZGVSZXF1aXJlZCI+CiAKLSAgICA8aDI+PHM6dGV4dCBuYW1lPSJpbnN0YWxsZXIuZGF0YWJhc2VVcGdyYWRlTmVlZGVkIiAvPjwvaDI+Ci0gICAgCisgICAgPGgyPjxzOnRleHQgbmFtZT0iaW5zdGFsbGVyLmRhdGFiYXNlVXBncmFkZU5lZWRlZCIvPjwvaDI+CisKICAgICA8cD4KICAgICAgICAgPHM6dGV4dCBuYW1lPSJpbnN0YWxsZXIuZGF0YWJhc2VVcGdyYWRlTmVlZGVkRXhwbGFuYXRpb24iPgotICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9ImRhdGFiYXNlUHJvZHVjdE5hbWUiIC8+CisgICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0iZGF0YWJhc2VQcm9kdWN0TmFtZSIvPgogICAgICAgICA8L3M6dGV4dD4KICAgICA8L3A+Ci0gICAgPHA+PHM6dGV4dCBuYW1lPSJpbnN0YWxsZXIudXBncmFkZVRhYmxlcyIgLz48L3A+CisgICAgPHA+PHM6dGV4dCBuYW1lPSJpbnN0YWxsZXIudXBncmFkZVRhYmxlcyIvPjwvcD4KIAotICAgIDxzOmZvcm0gYWN0aW9uPSJpbnN0YWxsIXVwZ3JhZGUiPgotCQk8czpoaWRkZW4gbmFtZT0ic2FsdCIgLz4KLSAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2luc3RhbGxlci55ZXNVcGdyYWRlVGFibGVzJyl9IiAvPgorICAgIDxzOmZvcm0gYWN0aW9uPSJpbnN0YWxsIXVwZ3JhZGUiIGNsYXNzPSJmb3JtLWhvcml6b250YWwiPgorICAgICAgICA8czpoaWRkZW4gbmFtZT0ic2FsdCIvPgorICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnaW5zdGFsbGVyLnllc1VwZ3JhZGVUYWJsZXMnKX0iIGNzc0NsYXNzPSJidG4gYnRuLXByaW1hcnkiIC8+CiAgICAgPC9zOmZvcm0+CiAKIDwvczplbHNlaWY+CiA8czplbHNlPgotICAgIAotICAgIDxoMj48czp0ZXh0IG5hbWU9Imluc3RhbGxlci50YWJsZXNVcGdyYWRlZCIgLz48L2gyPgotICAgIAotICAgIDxwPjxzOnRleHQgbmFtZT0iaW5zdGFsbGVyLnRhYmxlc1VwZ3JhZGVkRXhwbGFuYXRpb24iIC8+PC9wPgorCisgICAgPGgyPjxzOnRleHQgbmFtZT0iaW5zdGFsbGVyLnRhYmxlc1VwZ3JhZGVkIi8+PC9oMj4KKworICAgIDxwPjxzOnRleHQgbmFtZT0iaW5zdGFsbGVyLnRhYmxlc1VwZ3JhZGVkRXhwbGFuYXRpb24iLz48L3A+CiAgICAgPHA+CiAgICAgICAgIDxzOnRleHQgbmFtZT0iaW5zdGFsbGVyLnRyeUJvb3RzdHJhcHBpbmciPgogICAgICAgICAgICAgPHM6cGFyYW0+PHM6dXJsIGFjdGlvbj0iaW5zdGFsbCFib290c3RyYXAiLz48L3M6cGFyYW0+CiAgICAgICAgIDwvczp0ZXh0PgogICAgIDwvcD4KLSAgICAKLTxwcmU+Ci08czppdGVyYXRvciB2YWx1ZT0ibWVzc2FnZXMiPjxzOnByb3BlcnR5Lz48YnIgLz48L3M6aXRlcmF0b3I+Ci08L3ByZT4KLSAgICAKLTwvczplbHNlPgogCi08YnIgLz4KLTxiciAvPgorICAgIDxwcmU+CisgICAgICAgIDxzOml0ZXJhdG9yIHZhbHVlPSJtZXNzYWdlcyI+PHM6cHJvcGVydHkvPjxici8+PC9zOml0ZXJhdG9yPgorICAgIDwvcHJlPgorCis8L3M6ZWxzZT4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9Cb29rbWFya0VkaXQuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0Jvb2ttYXJrRWRpdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkYjAxYjkuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0Jvb2ttYXJrRWRpdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi08JS0tCi0gIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91Ci0gIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAotICB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nCi0gIGNvcHlyaWdodCBpbiB0aGlzIHdvcmssIHBsZWFzZSBzZWUgdGhlIE5PVElDRSBmaWxlIGluIHRoZSB0b3AgbGV2ZWwKLSAgZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgotLS0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL1dFQi1JTkYvanNwcy90YWdsaWJzLXN0cnV0czIuanNwIiAlPgotCi08JS0tIFRpdGxpbmcsIHByb2Nlc3NpbmcgYWN0aW9ucyBkaWZmZXJlbnQgYmV0d2VlbiBhZGQgYW5kIGVkaXQgLS0lPgotPHM6aWYgdGVzdD0iYWN0aW9uTmFtZSA9PSAnYm9va21hcmtFZGl0JyI+Ci0gICAgPHM6c2V0IHZhcj0ic3VidGl0bGVLZXkiPmJvb2ttYXJrRm9ybS5lZGl0LnN1YnRpdGxlPC9zOnNldD4KLSAgICA8czpzZXQgdmFyPSJtYWluQWN0aW9uIj5ib29rbWFya0VkaXQ8L3M6c2V0PgotPC9zOmlmPgotPHM6ZWxzZT4KLSAgICA8czpzZXQgdmFyPSJzdWJ0aXRsZUtleSI+Ym9va21hcmtGb3JtLmFkZC5zdWJ0aXRsZTwvczpzZXQ+Ci0gICAgPHM6c2V0IHZhcj0ibWFpbkFjdGlvbiI+Ym9va21hcmtBZGQ8L3M6c2V0PgotPC9zOmVsc2U+Ci0KLTxwIGNsYXNzPSJzdWJ0aXRsZSI+Ci0gICAgPHM6dGV4dCBuYW1lPSIleyNzdWJ0aXRsZUtleX0iID4KLSAgICAgICAgPHM6cGFyYW0gdmFsdWU9ImJvb2ttYXJrLmZvbGRlci5uYW1lIi8+Ci0gICAgPC9zOnRleHQ+Ci08L3A+Ci0KLTxwIGNsYXNzPSJwYWdldGlwIj4KLSAgICA8czp0ZXh0IG5hbWU9ImJvb2ttYXJrRm9ybS5yZXF1aXJlZEZpZWxkcyI+Ci0gICAgICAgIDxzOnBhcmFtPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5uYW1lIi8+PC9zOnBhcmFtPgotICAgICAgICA8czpwYXJhbT48czp0ZXh0IG5hbWU9ImJvb2ttYXJrRm9ybS51cmwiLz48L3M6cGFyYW0+Ci0gICAgPC9zOnRleHQ+Ci08L3A+Ci0KLTxzOmZvcm0+Ci0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgLz4KLSAgICA8JS0tCi0gICAgICAgIEVkaXQgYWN0aW9uIHVzZXMgZm9sZGVySWQgZm9yIHJlZGlyZWN0aW9uIGJhY2sgdG8gcHJvcGVyIGJvb2ttYXJrcyBmb2xkZXIgb24gY2FuY2VsCi0gICAgICAgIChhcyBjb25maWd1cmVkIGluIHN0cnV0cy54bWwpOyBhZGQgYWN0aW9uIGFsc28sIHBsdXMgdG8ga25vdyB3aGljaCBmb2xkZXIgdG8gcHV0IG5ldwotICAgICAgICBib29rbWFyayBpbi4KLSAgICAtLSU+Ci0gICAgPHM6aGlkZGVuIG5hbWU9ImZvbGRlcklkIiAvPgotICAgIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2Jvb2ttYXJrRWRpdCciPgotICAgICAgICA8JS0tIGJlYW4gZm9yIGJvb2ttYXJrIGFkZCBkb2VzIG5vdCBoYXZlIGEgYmVhbiBpZCB5ZXQgLS0lPgotICAgICAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5pZCIgLz4KLSAgICA8L3M6aWY+Ci0KLSAgICA8dGFibGU+Ci0gICAgICAgIAotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQ+PHM6dGV4dCBuYW1lPSJnZW5lcmljLm5hbWUiIC8+PC90ZD4KLSAgICAgICAgICAgIDx0ZD48czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5uYW1lIiBtYXhsZW5ndGg9IjI1NSIgc2l6ZT0iNzAiIHN0eWxlPSJ3aWR0aDo1MCUiLz48L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICAKLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkPjxzOnRleHQgbmFtZT0iYm9va21hcmtGb3JtLnVybCIgLz48L3RkPgotICAgICAgICAgICAgPHRkPjxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnVybCIgbWF4bGVuZ3RoPSIyNTUiIHNpemU9IjcwIiBzdHlsZT0id2lkdGg6NTAlIi8+PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgCi0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZD48czp0ZXh0IG5hbWU9ImJvb2ttYXJrRm9ybS5yc3NVcmwiIC8+PC90ZD4KLSAgICAgICAgICAgIDx0ZD48czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5mZWVkVXJsIiBtYXhsZW5ndGg9IjI1NSIgc2l6ZT0iNzAiIHN0eWxlPSJ3aWR0aDo1MCUiLz48L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICAKLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5kZXNjcmlwdGlvbiIgLz48L3RkPgotICAgICAgICAgICAgPHRkPjxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLmRlc2NyaXB0aW9uIiBtYXhsZW5ndGg9IjI1NSIgc2l6ZT0iNzAiIHN0eWxlPSJ3aWR0aDo1MCUiLz48L3RkPgotICAgICAgICA8L3RyPgotCi0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZD48czp0ZXh0IG5hbWU9ImJvb2ttYXJrRm9ybS5pbWFnZSIgLz48L3RkPgotICAgICAgICAgICAgPHRkPjxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLmltYWdlIiBtYXhsZW5ndGg9IjI1NSIgc2l6ZT0iNzAiIHN0eWxlPSJ3aWR0aDo1MCUiLz48L3RkPgotICAgICAgICA8L3RyPgotICAgICAgICAKLSAgICA8L3RhYmxlPgotICAgIAotICAgIDxwPgotICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5zYXZlJyl9IiBhY3Rpb249IiV7I21haW5BY3Rpb259IXNhdmUiLz4KLSAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMuY2FuY2VsJyl9IiBhY3Rpb249ImJvb2ttYXJrRWRpdCFjYW5jZWwiIC8+Ci0gICAgPC9wPgotICAgIAotPC9zOmZvcm0+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvQm9va21hcmtzLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9Cb29rbWFya3MuanNwCmluZGV4IGMyNzUzODEuLmQwMDQ1OTYgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9Cb29rbWFya3MuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9Cb29rbWFya3MuanNwCkBAIC0xNywxNjEgKzE3LDgxOSBAQAogLS0lPgogPCVAIGluY2x1ZGUgZmlsZT0iL1dFQi1JTkYvanNwcy90YWdsaWJzLXN0cnV0czIuanNwIiAlPgogCi08JS0tIEphdmFTY3JpcHQgZm9yIGJvb2ttYXJrcyB0YWJsZSAtLSU+Ci08c2NyaXB0PgotZnVuY3Rpb24gb25EZWxldGUoKQotewotICAgIGlmICggY29uZmlybSgiPHM6dGV4dCBuYW1lPSdib29rbWFya3NGb3JtLmRlbGV0ZS5jb25maXJtJyAvPiIpICkgCi0gICAgewotICAgICAgICBkb2N1bWVudC5ib29rbWFya3Muc3VibWl0KCk7Ci0gICAgfQotfQogCi1mdW5jdGlvbiBvbkRlbGV0ZUZvbGRlcigpCi17Ci0gICAgaWYgKCBjb25maXJtKCI8czp0ZXh0IG5hbWU9J2Jvb2ttYXJrc0Zvcm0uZGVsZXRlRm9sZGVyLmNvbmZpcm0nIC8+IikgKQotICAgIHsKLSAgICAgICAgZG9jdW1lbnQuYm9va21hcmtzLmFjdGlvbj0nPHM6dXJsIGFjdGlvbj0iYm9va21hcmtzIWRlbGV0ZUZvbGRlciIgLz4nOwotICAgICAgICBkb2N1bWVudC5ib29rbWFya3Muc3VibWl0KCk7Ci0gICAgfQotfQorPCUtLQorQmxvZ3JvbGwgbGluayBtYW5hZ2VtZW50CiAKLWZ1bmN0aW9uIG9uTW92ZSgpCi17Ci0gICAgaWYgKCBjb25maXJtKCI8czp0ZXh0IG5hbWU9J2Jvb2ttYXJrc0Zvcm0ubW92ZS5jb25maXJtJyAvPiIpICkgCi0gICAgewotICAgICAgICBkb2N1bWVudC5ib29rbWFya3MuYWN0aW9uPSc8czp1cmwgYWN0aW9uPSJib29rbWFya3MhbW92ZSIgLz4nOwotICAgICAgICBkb2N1bWVudC5ib29rbWFya3Muc3VibWl0KCk7Ci0gICAgfQotfQotPC9zY3JpcHQ+CitXZSB1c2VkIHRvIGNhbGwgdGhlbSBCb29rbWFya3MgYW5kIEZvbGRlcnMsIG5vdyB3ZSBjYWxsIHRoZW0gQmxvZ3JvbGwgbGlua3MgYW5kIEJsb2dyb2xscy4KKy0tJT4KKworPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorCis8JS0tIE1haW4gYmxvZ3JvbGwvZm9sZGVyIG1hbmFnZW1lbnQgaW50ZXJmYWNlLCBhIGNoZWNrYm94LXRhYmxlIHdpdGggc29tZSBidXR0b25zICAtLSU+CisKKzxwIGNsYXNzPSJzdWJ0aXRsZSI+PHM6dGV4dCBuYW1lPSJib29rbWFya3NGb3JtLnN1YnRpdGxlIj4gPHM6cGFyYW0gdmFsdWU9IndlYmxvZyIvPiA8L3M6dGV4dD48L3A+CiAKIDxzOmlmIHRlc3Q9ImZvbGRlci5uYW1lID09ICdkZWZhdWx0JyI+Ci0gICAgPHAgY2xhc3M9InN1YnRpdGxlIj4KLSAgICAgICAgPHM6dGV4dCBuYW1lPSJib29rbWFya3NGb3JtLnN1YnRpdGxlIiA+Ci0gICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0id2VibG9nIiAvPgotICAgICAgICA8L3M6dGV4dD4KLSAgICA8L3A+ICAKLSAgICA8cCBjbGFzcz0icGFnZXRpcCI+Ci0gICAgICAgIDxzOnRleHQgbmFtZT0iYm9va21hcmtzRm9ybS5yb290UHJvbXB0IiAvPgotICAgIDwvcD4KKyAgICA8cCBjbGFzcz0icGFnZXRpcCI+PHM6dGV4dCBuYW1lPSJib29rbWFya3NGb3JtLnJvb3RQcm9tcHQiLz48L3A+CiA8L3M6aWY+CiA8czplbHNlPgotICAgIDxwIGNsYXNzPSJzdWJ0aXRsZSI+Ci0gICAgPHM6dGV4dCBuYW1lPSJib29rbWFya3NGb3JtLnBhdGgiIC8+OiA8czp0ZXh0IG5hbWU9IiV7Zm9sZGVyLm5hbWV9IiAvPgotICAgIDxzOnVybCB2YXI9ImVkaXRVcmwiIGFjdGlvbj0iZm9sZGVyRWRpdCI+Ci0gICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+Ci0gICAgICAgIDxzOnBhcmFtIG5hbWU9ImJlYW4uaWQiIHZhbHVlPSIle2ZvbGRlci5pZH0iIC8+Ci0gICAgICAgIDxzOnBhcmFtIG5hbWU9ImZvbGRlcklkIiB2YWx1ZT0iJXtmb2xkZXIuaWR9IiAvPgotICAgIDwvczp1cmw+Ci0gICAgPHM6YSBocmVmPSIle2VkaXRVcmx9Ij48aW1nIHNyYz0nPHM6dXJsIHZhbHVlPSIvaW1hZ2VzL3BhZ2Vfd2hpdGVfZWRpdC5wbmciLz4nIGJvcmRlcj0iMCIgYWx0PSJpY29uIiAvCi0gICAgICAgIHRpdGxlPSI8czp0ZXh0IG5hbWU9J2Jvb2ttYXJrc0Zvcm0uZm9sZGVyLmVkaXQudGlwJyAvPiIgLz48L3M6YT4KKyAgICA8cCBjbGFzcz0icGFnZXRpcCI+PHM6dGV4dCBuYW1lPSJib29rbWFya3NGb3JtLm90aGVyUHJvbXB0Ii8+PC9wPgogPC9zOmVsc2U+CiAKLTwlLS0gRm9ybSBpcyBhIHRhYmxlIG9mIGZvbGRlcnMgZm9sbG93ZWQgYnkgYm9va21hcmtzLCBlYWNoIHdpdGggY2hlY2tib3ggLS0lPgotPHM6Zm9ybSBhY3Rpb249ImJvb2ttYXJrcyFkZWxldGUiPgotCTxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgotICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9ImZvbGRlcklkIiAvPiAKLSAgICAKLSAgICA8czppZiB0ZXN0PSIhYWxsRm9sZGVycy5pc0VtcHR5Ij4KLSAgICAgICAgPCUtLSBWaWV3IGJ1dHRvbiAtLSU+Ci0gICAgICAgIDxzOnN1Ym1pdCB0eXBlPSJidXR0b24iIGFjdGlvbj0iYm9va21hcmtzIXZpZXciIGtleT0iYm9va21hcmtzRm9ybS52aWV3Rm9sZGVyIiAvPgogCi0gICAgICAgIDwlLS0gRm9sZGVyIHRvIFZpZXcgY29tYm8tYm94IC0tJT4KLSAgICAgICAgPHM6c2VsZWN0IG5hbWU9InZpZXdGb2xkZXJJZCIgbGlzdD0iYWxsRm9sZGVycyIgbGlzdEtleT0iaWQiIGxpc3RWYWx1ZT0ibmFtZSIgLz4KKzwlLS0gdGFibGUgb2YgYmxvZ3JvbGwgbGlua3Mgd2l0aCBzZWxlY3Rpb24gY2hlY2tib3hlcywgd3JhcHBlZCBpbiBhIGZvcm0gLS0lPgogCi0gICAgICAgIDxiciAvPjxiciAvPgorPHM6Zm9ybSBhY3Rpb249ImJvb2ttYXJrcyFkZWxldGUiIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLWhvcml6b250YWwiPgorICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0Ii8+CisgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIvPgorICAgIDxzOmhpZGRlbiBuYW1lPSJmb2xkZXJJZCIvPgorCisgICAgPCUtLSBmb3IgZGVmYXVsdCBibG9ncm9sbCwgc2hvdyBwYWdlICJ0aXAiIGFuZCByZWFkLW9ubHkgZm9sZGVyIG5hbWUgLS0lPgorCisgICAgPHM6aWYgdGVzdD0iZm9sZGVyLm5hbWUgPT0gJ2RlZmF1bHQnIj4KKworICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwICI+CisgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNvbC1zbS0zIGNvbnRyb2wtbGFiZWwiIGZvcj0iYm9va21hcmtzX2ZvbGRlcl9uYW1lIj4KKyAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImJvb2ttYXJrc0Zvcm0uYmxvZ3JvbGxOYW1lIi8+CisgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTkgY29udHJvbHMiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tY29udHJvbCI+PHM6dGV4dCBuYW1lPSIle2ZvbGRlci5uYW1lfSIvPjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorCiAgICAgPC9zOmlmPgotICAgIDx0YWJsZSBjbGFzcz0icm9sbGVydGFibGUiPgorCisgICAgPHM6aWYgdGVzdD0iZm9sZGVyLm5hbWUgIT0gJ2RlZmF1bHQnIj4KKworICAgICAgICA8JS0tIEJsb2dyb2xsIC8gRm9sZGVyIE5hbWUgLS0lPgorCisgICAgICAgIDwlLS0gZm9yIG90aGVyIGJsb2dyb2xscywgc2hvdyB0ZXh0YXJlYSBzbyB1c2VyIGNhbiByZW5hbWUgaXQgLS0lPgorICAgICAgICA8JS0tIGRvbid0IHVzZSBTdHJ1dHMgdGFncyBoZXJlIHNvIGJ1dHRvbiBjYW4gYmUgb24gc2FtZSBsaW5lIGFzIHRleHQgaW5wdXQgLS0lPgorCisgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAgIj4KKyAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY29sLXNtLTMgY29udHJvbC1sYWJlbCIgZm9yPSJib29rbWFya3NfZm9sZGVyX25hbWUiPgorICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iYm9va21hcmtzRm9ybS5ibG9ncm9sbE5hbWUiLz4KKyAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tOSBjb250cm9scyI+CisgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPSJ3aWR0aDo1NSU7IGZsb2F0OmxlZnQiIHR5cGU9InRleHQiIG5hbWU9ImZvbGRlci5uYW1lIgorICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iPHM6dGV4dCBuYW1lPScle2ZvbGRlci5uYW1lfScvPiIgaWQ9ImJvb2ttYXJrc19mb2xkZXJfbmFtZSIgY2xhc3M9ImZvcm0tY29udHJvbCIKKyAgICAgICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9Im5hbWVDaGFuZ2VkKCkiCisgICAgICAgICAgICAgICAgICAgICAgIG9ua2V5dXA9Im5hbWVDaGFuZ2VkKCkiLz4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgaWQ9InJlbmFtZV9idXR0b24iCisgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYnRuIGJ0bi1zdWNjZXNzIiBzdHlsZT0iZmxvYXQ6bGVmdDsgbWFyZ2luLWxlZnQ6MWVtOyIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InJlbmFtZUZvbGRlcigpOyByZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgICAgICAgICAgICAgb25zdWJtaXQ9InJldHVybiBmYWxzZTsiPgorICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImdlbmVyaWMucmVuYW1lIi8+CisgICAgICAgICAgICAgICAgPC9idXR0b24+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJyZW5hbWVfY2FuY2VsIgorICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgc3R5bGU9ImZsb2F0OmxlZnQ7IG1hcmdpbi1sZWZ0OjFlbTsiCisgICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJjYW5jZWxSZW5hbWVGb2xkZXIoKTsgcmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uc3VibWl0PSJyZXR1cm4gZmFsc2U7Ij4KKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJnZW5lcmljLmNhbmNlbCIvPgorICAgICAgICAgICAgICAgIDwvYnV0dG9uPgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorCisgICAgPC9zOmlmPgorCisgICAgPCUtLSBhbGxvdyB1c2VyIHRvIHNlbGVjdCB0aGUgYm9va21hcmsgZm9sZGVyIHRvIHZpZXcgLS0lPgorCisgICAgPHM6c2VsZWN0IG5hbWU9InZpZXdGb2xkZXJJZCIgbGlzdD0iYWxsRm9sZGVycyIgbGlzdEtleT0iaWQiIGxpc3RWYWx1ZT0ibmFtZSIgZW1wdHlPcHRpb249InRydWUiCisgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ2Jvb2ttYXJrc0Zvcm0uc3dpdGNoVG8nKX0iIG9uY2hhbmdlPSJ2aWV3Q2hhbmdlZCgpIiBvbm1vdXNldXA9InZpZXdDaGFuZ2VkKCkiLz4KKworICAgIDx0YWJsZSBjbGFzcz0icm9sbGVydGFibGUgdGFibGUgdGFibGUtc3RyaXBlZCI+CiAKICAgICAgICAgPHRyIGNsYXNzPSJySGVhZGVyVHIiPgotICAgICAgICAgICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSIgd2lkdGg9IjUlIj48aW5wdXQgbmFtZT0iY29udHJvbCIgdHlwZT0iY2hlY2tib3giIG9uY2xpY2s9InRvZ2dsZUZ1bmN0aW9uQWxsKHRoaXMuY2hlY2tlZCk7IgotICAgICAgICAgICAgICAgIHRpdGxlPSI8czp0ZXh0IG5hbWU9ImJvb2ttYXJrc0Zvcm0uc2VsZWN0QWxsTGFiZWwiLz4iLz48L3RoPgotICAgICAgICAgICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSIgd2lkdGg9IjI1JSI+PHM6dGV4dCBuYW1lPSJnZW5lcmljLm5hbWUiIC8+PC90aD4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0icm9sbGVydGFibGUiIHdpZHRoPSIyNSUiPjxzOnRleHQgbmFtZT0iYm9va21hcmtzRm9ybS51cmwiIC8+PC90aD4KLSAgICAgICAgICAgIDx0aCBjbGFzcz0icm9sbGVydGFibGUiIHdpZHRoPSIzNSUiPjxzOnRleHQgbmFtZT0iYm9va21hcmtzRm9ybS5mZWVkdXJsIiAvPjwvdGg+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iNSUiPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5lZGl0IiAvPjwvdGg+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iNSUiPjxzOnRleHQgbmFtZT0iYm9va21hcmtzRm9ybS52aXNpdExpbmsiIC8+PC90aD4KKyAgICAgICAgICAgIDx0aCB3aWR0aD0iNSUiPgorICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJjb250cm9sIiB0eXBlPSJjaGVja2JveCIKKyAgICAgICAgICAgICAgICAgICAgICAgb25jbGljaz0idG9nZ2xlRnVuY3Rpb25BbGwodGhpcy5jaGVja2VkKTsgc2VsZWN0aW9uQ2hhbmdlZCgpIgorICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0iPHM6dGV4dCBuYW1lPSJib29rbWFya3NGb3JtLnNlbGVjdEFsbExhYmVsIi8+Ii8+CisgICAgICAgICAgICA8L3RoPgorICAgICAgICAgICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSIgd2lkdGg9IjI1JSI+PHM6dGV4dCBuYW1lPSJnZW5lcmljLm5hbWUiLz48L3RoPgorICAgICAgICAgICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSIgd2lkdGg9IjcwJSI+PHM6dGV4dCBuYW1lPSJib29rbWFya3NGb3JtLnVybCIvPjwvdGg+CisgICAgICAgICAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iNSUiPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5lZGl0Ii8+PC90aD4KICAgICAgICAgPC90cj4KLSAgICAgICAgCi0gICAgICAgIDxzOmlmIHRlc3Q9ImZvbGRlci5ib29rbWFya3Muc2l6ZSA+IDAiPgotICAgICAgICAKLSAgICAgICAgPCUtLSBCb29rbWFya3MgLS0lPgotICAgICAgICA8czppdGVyYXRvciB2YXI9ImJvb2ttYXJrIiB2YWx1ZT0iZm9sZGVyLmJvb2ttYXJrcyIgc3RhdHVzPSJyb3dzdGF0dXMiPgotICAgICAgICAgICAgPHM6aWYgdGVzdD0iI3Jvd3N0YXR1cy5vZGQgPT0gdHJ1ZSI+Ci0gICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJyb2xsZXJ0YWJsZV9vZGQiPgotICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgPHM6ZWxzZT4KLSAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InJvbGxlcnRhYmxlX2V2ZW4iPgotICAgICAgICAgICAgPC9zOmVsc2U+Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJyb2xsZXJ0YWJsZSBjZW50ZXIiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNlbGVjdGVkQm9va21hcmtzIgotICAgICAgICAgICAgICAgICAgICB0aXRsZT0iPHM6dGV4dCBuYW1lPSJib29rbWFya3NGb3JtLnNlbGVjdE9uZUxhYmVsIj48czpwYXJhbSB2YWx1ZT0iI2Jvb2ttYXJrLm5hbWUiLz48L3M6dGV4dD4iCi0gICAgICAgICAgICAgICAgICAgIHZhbHVlPSI8czpwcm9wZXJ0eSB2YWx1ZT0iI2Jvb2ttYXJrLmlkIi8+IiAvPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJyb2xsZXJ0YWJsZSI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHI6dHJ1bmNhdGVOaWNlbHkgbG93ZXI9IjI1IiB1cHBlcj0iMzAiID48czpwcm9wZXJ0eSB2YWx1ZT0iI2Jvb2ttYXJrLm5hbWUiIC8+PC9zdHI6dHJ1bmNhdGVOaWNlbHk+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InJvbGxlcnRhYmxlIj4KLSAgICAgICAgICAgICAgICAgICAgPHN0cjp0cnVuY2F0ZU5pY2VseSBsb3dlcj0iNDAiIHVwcGVyPSI1MCIgPjxzOnByb3BlcnR5IHZhbHVlPSIjYm9va21hcmsudXJsIiAvPjwvc3RyOnRydW5jYXRlTmljZWx5PgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJyb2xsZXJ0YWJsZSI+Ci0gICAgICAgICAgICAgICAgICAgIDxzdHI6dHJ1bmNhdGVOaWNlbHkgbG93ZXI9IjYwIiB1cHBlcj0iNzAiID48czpwcm9wZXJ0eSB2YWx1ZT0iI2Jvb2ttYXJrLmZlZWRVcmwiIC8+PC9zdHI6dHJ1bmNhdGVOaWNlbHk+Ci0gICAgICAgICAgICAgICAgPC90ZD4KIAotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0icm9sbGVydGFibGUiIGFsaWduPSJjZW50ZXIiPgotICAgICAgICAgICAgICAgICAgICA8czp1cmwgdmFyPSJlZGl0VXJsIiBhY3Rpb249ImJvb2ttYXJrRWRpdCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIle2FjdGlvbldlYmxvZy5oYW5kbGV9IiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0iYmVhbi5pZCIgdmFsdWU9IiNib29rbWFyay5pZCIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9ImZvbGRlcklkIiB2YWx1ZT0iJXtmb2xkZXJJZH0iIHN1cHByZXNzRW1wdHlQYXJhbWV0ZXJzPSJ0cnVlIi8+Ci0gICAgICAgICAgICAgICAgICAgIDwvczp1cmw+Ci0gICAgICAgICAgICAgICAgICAgIDxzOmEgaHJlZj0iJXtlZGl0VXJsfSI+PGltZyBzcmM9JzxzOnVybCB2YWx1ZT0iL2ltYWdlcy9wYWdlX3doaXRlX2VkaXQucG5nIi8+JyBib3JkZXI9IjAiIGFsdD0iaWNvbiIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSI8czp0ZXh0IG5hbWU9J2Jvb2ttYXJrc0Zvcm0uZWRpdC50aXAnIC8+IiAvPjwvczphPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJyb2xsZXJ0YWJsZSIgYWxpZ249ImNlbnRlciI+Ci0gICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiNib29rbWFyay51cmwgIT0gbnVsbCIgPgotICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iPHM6cHJvcGVydHkgdmFsdWU9IiNib29rbWFyay51cmwiIC8+Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0nPHM6dXJsIHZhbHVlPSIvaW1hZ2VzL3dvcmxkX2dvLnBuZyIvPicgYm9yZGVyPSIwIiBhbHQ9Imljb24iIHRpdGxlPSI8czp0ZXh0IG5hbWU9J2Jvb2ttYXJrc0Zvcm0udmlzaXRMaW5rLnRpcCcgLz4iIC8+CisgICAgICAgIDxzOmlmIHRlc3Q9ImZvbGRlci5ib29rbWFya3Muc2l6ZSA+IDAiPgorCisgICAgICAgICAgICA8JS0tIEJvb2ttYXJrcyAtLSU+CisgICAgICAgICAgICA8czppdGVyYXRvciB2YXI9ImJvb2ttYXJrIiB2YWx1ZT0iZm9sZGVyLmJvb2ttYXJrcyIgc3RhdHVzPSJyb3dzdGF0dXMiPgorICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icm9sbGVydGFibGVfb2RkIj4KKworICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InJvbGxlcnRhYmxlIGNlbnRlciIgc3R5bGU9InZlcnRpY2FsLWFsaWduOm1pZGRsZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNlbGVjdGVkQm9va21hcmtzIiBvbmNoYW5nZT0ic2VsZWN0aW9uQ2hhbmdlZCgpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSI8czp0ZXh0IG5hbWU9ImJvb2ttYXJrc0Zvcm0uc2VsZWN0T25lTGFiZWwiPjxzOnBhcmFtIHZhbHVlPSIjYm9va21hcmsubmFtZSIvPjwvczp0ZXh0PiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iPHM6cHJvcGVydHkgdmFsdWU9IiNib29rbWFyay5pZCIvPiIvPgorICAgICAgICAgICAgICAgICAgICA8L3RkPgorCisgICAgICAgICAgICAgICAgICAgIDx0ZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzdHI6dHJ1bmNhdGVOaWNlbHkgbG93ZXI9IjQwIiB1cHBlcj0iNTAiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIjYm9va21hcmsubmFtZSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zdHI6dHJ1bmNhdGVOaWNlbHk+CisgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisKKyAgICAgICAgICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iI2Jvb2ttYXJrLnVybCAhPSBudWxsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSc8czpwcm9wZXJ0eSB2YWx1ZT0iI2Jvb2ttYXJrLnVybCIgLz4nIHRhcmdldD0nX2JsYW5rJz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cjp0cnVuY2F0ZU5pY2VseSBsb3dlcj0iNzAiIHVwcGVyPSI5MCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iI2Jvb2ttYXJrLnVybCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N0cjp0cnVuY2F0ZU5pY2VseT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcGxheS1jaXJjbGUiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3M6aWY+CisKKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKworICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciI+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9ImVkaXRCb29rbWFyaygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzOnByb3BlcnR5IHZhbHVlPSIjYm9va21hcmsuaWQiLz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHM6cHJvcGVydHkgdmFsdWU9IiNib29rbWFyay5uYW1lIi8+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzOnByb3BlcnR5IHZhbHVlPSIjYm9va21hcmsudXJsIi8+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzOnByb3BlcnR5IHZhbHVlPSIjYm9va21hcmsuZmVlZFVybCIvPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8czpwcm9wZXJ0eSB2YWx1ZT0iI2Jvb2ttYXJrLmRlc2NyaXB0aW9uIi8+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzOnByb3BlcnR5IHZhbHVlPSIjYm9va21hcmsuaW1hZ2UiLz4nICkiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWVkaXQiPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KLSAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3M6aXRlcmF0b3I+Ci0gICAgICAgIAorCisgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisKKyAgICAgICAgICAgICAgICA8L3RyPgorCisgICAgICAgICAgICA8L3M6aXRlcmF0b3I+CisKICAgICAgICAgPC9zOmlmPgorCiAgICAgICAgIDxzOmVsc2U+CiAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiIGNvbHNwYW49IjciPjxzOnRleHQgbmFtZT0iYm9va21hcmtzRm9ybS5ub3Jlc3VsdHMiIC8+PC90ZD4KKyAgICAgICAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOm1pZGRsZTsgcGFkZGluZy10b3A6IDFlbTsiIGNvbHNwYW49IjciPgorICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImJvb2ttYXJrc0Zvcm0ubm9yZXN1bHRzIi8+CisgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgIDwvczplbHNlPgorCiAgICAgPC90YWJsZT4KLSAgICAKLSAgICA8ZGl2IGNsYXNzPSJjb250cm9sIGNsZWFyZml4Ij4KLSAgICAgICAgPHM6aWYgdGVzdD0iZm9sZGVyLmJvb2ttYXJrcy5zaXplID4gMCI+Ci0gICAgICAgICAgICAgICAgPCUtLSBEZWxldGUtc2VsZWN0ZWQgYnV0dG9uIC0tJT4KLSAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iPHM6dGV4dCBuYW1lPSJib29rbWFya3NGb3JtLmRlbGV0ZSIvPiIgb25jbGljaz0ib25EZWxldGUoKTtyZXR1cm4gZmFsc2U7IiAvPgotICAgICAgICA8L3M6aWY+CiAKLSAgICAgICAgPHM6aWYgdGVzdD0iIWFsbEZvbGRlcnMuaXNFbXB0eSAmJiBmb2xkZXIuYm9va21hcmtzLnNpemUgPiAwIj4KLSAgICAgICAgICAgIDwlLS0gTW92ZS1zZWxlY3RlZCBidXR0b24gLS0lPgotICAgICAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2Jvb2ttYXJrc0Zvcm0ubW92ZScpfSIgYWN0aW9uPSJib29rbWFya3MhbW92ZSIgb25jbGljaz0ib25Nb3ZlKCk7cmV0dXJuIGZhbHNlOyIgLz4KKyAgICA8JS0tIEFkZCBuZXcgYmxvZ3JvbGwgbGluayAtLSU+CisgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MiIG9uY2xpY2s9ImFkZEJvb2ttYXJrKCk7cmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIHN0eWxlPSJmbG9hdDpsZWZ0OyBtYXJnaW4tcmlnaHQ6IDJlbSI+CisgICAgICAgIDxzOnRleHQgbmFtZT0iYm9va21hcmtzRm9ybS5hZGRCb29rbWFyayIvPgorICAgIDwvYnV0dG9uPgogCi0gICAgICAgICAgICA8JS0tIE1vdmUtdG8gY29tYm8tYm94IC0tJT4KLSAgICAgICAgICAgIDxzOnNlbGVjdCBuYW1lPSJ0YXJnZXRGb2xkZXJJZCIgbGlzdD0iYWxsRm9sZGVycyIgbGlzdEtleT0iaWQiIGxpc3RWYWx1ZT0ibmFtZSIgLz4KLSAgICAgICAgPC9zOmlmPgorICAgIDxzOmlmIHRlc3Q9IiFhbGxGb2xkZXJzLmlzRW1wdHkgJiYgZm9sZGVyLmJvb2ttYXJrcy5zaXplID4gMCI+CisgICAgICAgIDwlLS0gTW92ZS1zZWxlY3RlZCBidXR0b24gLS0lPgorICAgICAgICA8czpzdWJtaXQgaWQ9Im1vdmVfc2VsZWN0ZWQiIHZhbHVlPSIle2dldFRleHQoJ2Jvb2ttYXJrc0Zvcm0ubW92ZScpfSIgdGhlbWU9InNpbXBsZSIKKyAgICAgICAgICAgICAgICAgIGNzc0NsYXNzPSJidG4gYnRuLXdhcm5pbmciIGNzc1N0eWxlPSJmbG9hdDpsZWZ0OyBtYXJnaW4tcmlnaHQ6IDAuNWVtIgorICAgICAgICAgICAgICAgICAgYWN0aW9uPSJib29rbWFya3MhbW92ZSIgb25jbGljaz0ib25Nb3ZlVG9Gb2xkZXIoKTtyZXR1cm4gZmFsc2U7Ii8+CisgICAgICAgIDwlLS0gTW92ZS10byBjb21iby1ib3ggLS0lPgorICAgICAgICA8czpzZWxlY3QgbmFtZT0idGFyZ2V0Rm9sZGVySWQiIHRoZW1lPSJzaW1wbGUiCisgICAgICAgICAgICAgICAgICBjc3NDbGFzcz0iZm9ybS1jb250cm9sIiBjc3NTdHlsZT0iZmxvYXQ6bGVmdDsgd2lkdGg6MzAlOyBtYXJnaW4tcmlnaHQ6IDJlbSIKKyAgICAgICAgICAgICAgICAgIGxpc3Q9ImFsbEZvbGRlcnMiIGxpc3RLZXk9ImlkIiBsaXN0VmFsdWU9Im5hbWUiLz4KKyAgICA8L3M6aWY+CiAKLSAgICAgICAgPHM6aWYgdGVzdD0iZm9sZGVyLm5hbWUgIT0gJ2RlZmF1bHQnIj4KLSAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodCI+Ci0gICAgICAgICAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2Jvb2ttYXJrc0Zvcm0uZGVsZXRlRm9sZGVyJyl9IiBhY3Rpb249ImJvb2ttYXJrcyFkZWxldGVGb2xkZXIiIG9uY2xpY2s9Im9uRGVsZXRlRm9sZGVyKCk7cmV0dXJuIGZhbHNlOyIvPgotICAgICAgICAgICAgPC9zcGFuPgotICAgICAgICA8L3M6aWY+Ci0gICAgPC9kaXY+CisgICAgPHM6aWYgdGVzdD0iZm9sZGVyLmJvb2ttYXJrcy5zaXplID4gMCI+CisgICAgICAgIDwlLS0gRGVsZXRlLXNlbGVjdGVkIGJ1dHRvbiAtLSU+CisgICAgICAgIDxpbnB1dCBpZD0iZGVsZXRlX3NlbGVjdGVkIiB2YWx1ZT0iPHM6dGV4dCBuYW1lPSJib29rbWFya3NGb3JtLmRlbGV0ZSIvPiIgdHlwZT0iYnV0dG9uIgorICAgICAgICAgICAgICAgY2xhc3M9ImJ0biBidG4tZGFuZ2VyIiBzdHlsZT0iZmxvYXQ6bGVmdDsiCisgICAgICAgICAgICAgICBvbmNsaWNrPSJjb25maXJtRGVsZXRlU2VsZWN0ZWQoKTtyZXR1cm4gZmFsc2U7Ii8+CisgICAgPC9zOmlmPgorCisgICAgPHM6aWYgdGVzdD0iZm9sZGVyLm5hbWUgIT0gJ2RlZmF1bHQnIj4KKyAgICAgICAgPCUtLSBEZWxldGUgdGhlIHdob2xlIGJsb2dyb2xsIC0tJT4KKyAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2Jvb2ttYXJrc0Zvcm0uZGVsZXRlRm9sZGVyJyl9IiB0aGVtZT0ic2ltcGxlIgorICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M9ImJ0biBidG4tZGFuZ2VyIiBjc3NTdHlsZT0iZmxvYXQ6cmlnaHQ7IGNsZWFyOmxlZnQ7IG1hcmdpbi10b3A6MmVtIgorICAgICAgICAgICAgICAgICAgYWN0aW9uPSJib29rbWFya3MhZGVsZXRlRm9sZGVyIgorICAgICAgICAgICAgICAgICAgb25jbGljaz0iY29uZmlybURlbGV0ZUZvbGRlcigpO3JldHVybiBmYWxzZTsiLz4KKworICAgIDwvczppZj4KIAogPC9zOmZvcm0+CisKKworPCUtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLSU+CisKKzwlLS0gSmF2YVNjcmlwdCBmb3IgTWFpbiBibG9ncm9sbC9mb2xkZXIgbWFuYWdlbWVudCBpbnRlcmZhY2UgLS0lPgorCis8c2NyaXB0PgorCisgICAgdmFyIG9yaWdpbmFsTmFtZTsKKyAgICB2YXIgcmVuYW1lQnV0dG9uOworICAgIHZhciByZW5hbWVDYW5jZWw7CisgICAgdmFyIGRlbGV0ZVNlbGVjdGVkQnV0dG9uOworICAgIHZhciBtb3ZlU2VsZWN0ZWRCdXR0b247CisgICAgdmFyIHZpZXdTZWxlY3RvcjsKKyAgICB2YXIgbW92ZVRvU2VsZWN0b3I7CisKKyAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgb3JpZ2luYWxOYW1lID0gJCgiI2Jvb2ttYXJrc19mb2xkZXJfbmFtZTpmaXJzdCIpLnZhbCgpOworCisgICAgICAgIGlmICghb3JpZ2luYWxOYW1lKSB7CisgICAgICAgICAgICBvcmlnaW5hbE5hbWUgPSAnZGVmYXVsdCc7CisgICAgICAgIH0KKworICAgICAgICByZW5hbWVCdXR0b24gPSAkKCIjcmVuYW1lX2J1dHRvbjpmaXJzdCIpOworICAgICAgICByZW5hbWVDYW5jZWwgPSAkKCIjcmVuYW1lX2NhbmNlbDpmaXJzdCIpOworICAgICAgICBkZWxldGVTZWxlY3RlZEJ1dHRvbiA9ICQoIiNkZWxldGVfc2VsZWN0ZWQ6Zmlyc3QiKTsKKyAgICAgICAgbW92ZVNlbGVjdGVkQnV0dG9uID0gJCgiI21vdmVfc2VsZWN0ZWQ6Zmlyc3QiKTsKKyAgICAgICAgdmlld1NlbGVjdG9yID0gJCgiI2Jvb2ttYXJrc192aWV3Rm9sZGVySWQ6Zmlyc3QiKTsKKyAgICAgICAgbW92ZVRvU2VsZWN0b3IgPSAkKCIjYm9va21hcmtzX3RhcmdldEZvbGRlcklkOmZpcnN0Iik7CisKKyAgICAgICAgbmFtZUNoYW5nZWQoKTsKKyAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCgpOworCisgICAgICAgIC8vIGFkZCB0aGUgIk5ldyBCbG9ncm9sbCIgb3B0aW9uIHRvIGJsb2dyb2xsIHNlbGVjdG9ycworICAgICAgICB2aWV3U2VsZWN0b3IuYXBwZW5kKG5ldyBPcHRpb24oJzxzOnRleHQgbmFtZT0iYm9va21hcmtzRm9ybS5uZXdCbG9ncm9sbCIvPicsICJuZXdfYmxvZ3JvbGwiKSk7CisgICAgfSk7CisKKworICAgIGZ1bmN0aW9uIHNlbGVjdGlvbkNoYW5nZWQoKSB7CisgICAgICAgIHZhciBjaGVja2VkID0gZmFsc2U7CisgICAgICAgIHZhciBzZWxlY3RlZCA9ICQoIltuYW1lPXNlbGVjdGVkQm9va21hcmtzXSIpOworICAgICAgICBmb3IgKHZhciBpIGluIHNlbGVjdGVkKSB7CisgICAgICAgICAgICBpZiAoc2VsZWN0ZWRbaV0uY2hlY2tlZCkgeworICAgICAgICAgICAgICAgIGNoZWNrZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChjaGVja2VkKSB7CisgICAgICAgICAgICBkZWxldGVTZWxlY3RlZEJ1dHRvbi5hdHRyKCJkaXNhYmxlZCIsIGZhbHNlKTsKKyAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkQnV0dG9uLmFkZENsYXNzKCJidG4tZGFuZ2VyIik7CisKKyAgICAgICAgICAgIG1vdmVTZWxlY3RlZEJ1dHRvbi5hdHRyKCJkaXNhYmxlZCIsIGZhbHNlKTsKKyAgICAgICAgICAgIG1vdmVTZWxlY3RlZEJ1dHRvbi5hZGRDbGFzcygiYnRuLXdhcm5pbmciKTsKKworICAgICAgICAgICAgbW92ZVRvU2VsZWN0b3IuYXR0cigiZGlzYWJsZWQiLCBmYWxzZSk7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlbGV0ZVNlbGVjdGVkQnV0dG9uLmF0dHIoImRpc2FibGVkIiwgdHJ1ZSk7CisgICAgICAgICAgICBkZWxldGVTZWxlY3RlZEJ1dHRvbi5yZW1vdmVDbGFzcygiYnRuLWRhbmdlciIpOworCisgICAgICAgICAgICBtb3ZlU2VsZWN0ZWRCdXR0b24uYXR0cigiZGlzYWJsZWQiLCB0cnVlKTsKKyAgICAgICAgICAgIG1vdmVTZWxlY3RlZEJ1dHRvbi5yZW1vdmVDbGFzcygiYnRuLXdhcm5pbmciKTsKKworICAgICAgICAgICAgbW92ZVRvU2VsZWN0b3IuYXR0cigiZGlzYWJsZWQiLCB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIG5hbWVDaGFuZ2VkKCkgeworICAgICAgICB2YXIgbmV3TmFtZSA9ICQoIiNib29rbWFya3NfZm9sZGVyX25hbWU6Zmlyc3QiKS52YWwoKTsKKyAgICAgICAgaWYgKG5ld05hbWUgJiYgbmV3TmFtZSAhPT0gb3JpZ2luYWxOYW1lICYmIG5ld05hbWUudHJpbSgpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIHJlbmFtZUJ1dHRvbi5hdHRyKCJkaXNhYmxlZCIsIGZhbHNlKTsKKyAgICAgICAgICAgIHJlbmFtZUJ1dHRvbi5hZGRDbGFzcygiYnRuLXN1Y2Nlc3MiKTsKKworICAgICAgICAgICAgcmVuYW1lQ2FuY2VsLmF0dHIoImRpc2FibGVkIiwgZmFsc2UpOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZW5hbWVCdXR0b24uYXR0cigiZGlzYWJsZWQiLCB0cnVlKTsKKyAgICAgICAgICAgIHJlbmFtZUJ1dHRvbi5yZW1vdmVDbGFzcygiYnRuLXN1Y2Nlc3MiKTsKKworICAgICAgICAgICAgcmVuYW1lQ2FuY2VsLmF0dHIoImRpc2FibGVkIiwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiByZW5hbWVGb2xkZXIoKSB7CisKKyAgICAgICAgdmFyIG5ld05hbWUgPSAkKCIjYm9va21hcmtzX2ZvbGRlcl9uYW1lOmZpcnN0IikudmFsKCk7CisgICAgICAgICQoIiNmb2xkZXJFZGl0Rm9ybV9iZWFuX25hbWUiKS52YWwobmV3TmFtZSk7CisKKyAgICAgICAgdmFyIGZvbGRlcklkID0gJCgiI2Jvb2ttYXJrc19mb2xkZXJJZCIpLnZhbCgpOworICAgICAgICAkKCIjZm9sZGVyRWRpdEZvcm1fYmVhbl9pZCIpLnZhbChmb2xkZXJJZCk7CisKKyAgICAgICAgLy8gcG9zdCBibG9ncm9sbCB2aWEgQUpBWAorICAgICAgICB2YXIgZm9sZGVyRWRpdEZvcm0gPSAkKCIjZm9sZGVyRWRpdEZvcm0iKVswXTsKKyAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLAorICAgICAgICAgICAgdXJsOiBmb2xkZXJFZGl0Rm9ybS5hdHRyaWJ1dGVzWyJhY3Rpb24iXS52YWx1ZSwKKyAgICAgICAgICAgIGRhdGE6ICQoIiNmb2xkZXJFZGl0Rm9ybSIpLnNlcmlhbGl6ZSgpLAorICAgICAgICAgICAgY29udGV4dDogZG9jdW1lbnQuYm9keQorCisgICAgICAgIH0pLmRvbmUoZnVuY3Rpb24gKGRhdGEsIHN0YXR1cywgcmVzcG9uc2UpIHsKKworICAgICAgICAgICAgLy8ga2x1ZGdlOiBzY3JhcGUgcmVzcG9uc2Ugc3RhdHVzIGZyb20gSFRNTCByZXR1cm5lZCBieSBTdHJ1dHMKKyAgICAgICAgICAgIHZhciBhbGVydEVuZCA9IGRhdGEuaW5kZXhPZigiQUxFUlRfRU5EIik7CisgICAgICAgICAgICB2YXIgbm90VW5pcXVlID0gZGF0YS5pbmRleE9mKCc8czp0ZXh0IG5hbWU9ImJvb2ttYXJrRm9ybS5lcnJvci5kdXBsaWNhdGVOYW1lIiAvPicpOworICAgICAgICAgICAgaWYgKG5vdFVuaXF1ZSA+IDAgJiYgbm90VW5pcXVlIDwgYWxlcnRFbmQpIHsKKyAgICAgICAgICAgICAgICBhbGVydCgnPHM6dGV4dCBuYW1lPSJib29rbWFya0Zvcm0uZXJyb3IuZHVwbGljYXRlTmFtZSIgLz4nKTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvcmlnaW5hbE5hbWUgPSBuZXdOYW1lOworICAgICAgICAgICAgICAgIG5hbWVDaGFuZ2VkKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAgIGFsZXJ0KCc8czp0ZXh0IG5hbWU9ImdlbmVyaWMuZXJyb3IuY2hlY2subG9ncyIgLz4nKTsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2FuY2VsUmVuYW1lRm9sZGVyKGV2ZW50KSB7CisgICAgICAgICQoIiNib29rbWFya3NfZm9sZGVyX25hbWU6Zmlyc3QiKS52YWwob3JpZ2luYWxOYW1lKTsKKyAgICAgICAgbmFtZUNoYW5nZWQoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb25maXJtRGVsZXRlU2VsZWN0ZWQoKSB7CisgICAgICAgICQoJyNkZWxldGUtbGlua3MtbW9kYWwnKS5tb2RhbCh7c2hvdzogdHJ1ZX0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGRlbGV0ZVNlbGVjdGVkKCkgeworICAgICAgICBkb2N1bWVudC5ib29rbWFya3NbMF0uc3VibWl0KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY29uZmlybURlbGV0ZUZvbGRlcigpIHsKKyAgICAgICAgJCgnI2Jvb21hcmtzX2RlbGV0ZV9mb2xkZXJfZm9sZGVySWQnKS52YWwoJCgnI2Jvb2ttYXJrc19mb2xkZXJJZDpmaXJzdCcpLnZhbCgpKTsKKyAgICAgICAgJCgnI2RlbGV0ZUJsb2dyb2xsTmFtZScpLmh0bWwoJzxzOnByb3BlcnR5IHZhbHVlPSIle2ZvbGRlci5uYW1lfSIvPicpOworICAgICAgICAkKCcjZGVsZXRlLWJsb2dyb2xsLW1vZGFsJykubW9kYWwoe3Nob3c6IHRydWV9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBvbk1vdmVUb0ZvbGRlcigpIHsKKyAgICAgICAgdmFyIGJvb2ttYXJrc0Zvcm0gPSAkKCIjYm9va21hcmtzIilbMF07CisgICAgICAgIGJvb2ttYXJrc0Zvcm0uYWN0aW9uID0gImJvb2ttYXJrcyFtb3ZlLnJvbCI7CisgICAgICAgIGJvb2ttYXJrc0Zvcm0uc3VibWl0KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdmlld0NoYW5nZWQoKSB7CisKKyAgICAgICAgdmFyIGJvb2ttYXJrc0Zvcm0gPSAkKCIjYm9va21hcmtzIilbMF07CisgICAgICAgIHZhciBmb2xkZXJFZGl0Rm9ybSA9ICQoIiNmb2xkZXJFZGl0Rm9ybSIpWzBdOworCisgICAgICAgIGlmICgibmV3X2Jsb2dyb2xsIiA9PT0gYm9va21hcmtzRm9ybS52aWV3Rm9sZGVySWQudmFsdWUpIHsKKyAgICAgICAgICAgIG5ld0Jsb2dyb2xsKCk7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIHVzZXIgY2hhbmdlZCB0aGUgYmxvZ3JvbGwvZm9sZGVyLCBwb3N0IHRvICJ2aWV3IiBhY3Rpb24gdG8gZ2V0IG5ldyBwYWdlCisgICAgICAgICAgICBib29rbWFya3NGb3JtLmFjdGlvbiA9ICJib29rbWFya3Mhdmlldy5yb2wiOworICAgICAgICAgICAgYm9va21hcmtzRm9ybS5zdWJtaXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIG5ld0Jsb2dyb2xsKCkgeworCisgICAgICAgIC8vIHVzZXIgc2VsZWN0ZWQgTmV3IEJsb2dyb2xsIG9wdGlvbiwgc2hvdyB0aGUgYWRkL2VkaXQgYmxvZ3JvbGwgbW9kYWwKKyAgICAgICAgJCgnI2Jsb2dyb2xsLWVkaXQtdGl0bGUnKS5odG1sKCc8czp0ZXh0IG5hbWU9ImJvb2ttYXJrc0Zvcm0uYWRkQmxvZ3JvbGwudGl0bGUiIC8+Jyk7CisKKyAgICAgICAgZm9sZGVyRWRpdEZvcm0uYWN0aW9uID0gImZvbGRlckFkZCFzYXZlLnJvbCI7CisgICAgICAgIGZvbGRlckVkaXRGb3JtLmFjdGlvbk5hbWUudmFsdWUgPSAiZm9sZGVyQWRkIjsKKworICAgICAgICAvLyBkaXNhYmxlIHNhdmUgYnV0dG9uIHVudGlsIHZhbGlkIG5hbWUgaXMgZW50ZXJlZAorCisgICAgICAgICQoJyNhZGRlZGl0LWJvb2ttYXJrZm9sZGVyLW1vZGFsJykubW9kYWwoe3Nob3c6IHRydWV9KTsKKworICAgICAgICBvbkJsb2dyb2xsRm9ybUNoYW5nZWQoKTsKKyAgICB9CisKKzwvc2NyaXB0PgorCisKKzwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKworPCUtLSBhZGQvZWRpdCBibG9ncm9sbCAvIGZvbGRlciBmb3JtIC0tJT4KKworPGRpdiBpZD0iYWRkZWRpdC1ib29rbWFya2ZvbGRlci1tb2RhbCIgY2xhc3M9Im1vZGFsIGZhZGUgYWRkZWRpdC1ib29rbWFya2ZvbGRlci1tb2RhbCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgorCisgICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLWxnIj4KKworICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgICAgICAgICAgICA8aDMgaWQ9ImJsb2dyb2xsLWVkaXQtdGl0bGUiPjwvaDM+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICAgICAgICAgICAgPHM6Zm9ybSBhY3Rpb249ImZvbGRlckVkaXQiIGlkPSJmb2xkZXJFZGl0Rm9ybSIgdGhlbWU9ImJvb3RzdHJhcCIgY3NzQ2xhc3M9ImZvcm0taG9yaXpvbnRhbCI+CisgICAgICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0Ii8+CisgICAgICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJhY3Rpb25OYW1lIi8+CisgICAgICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciLz4KKyAgICAgICAgICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4uaWQiLz4KKworICAgICAgICAgICAgICAgICAgICA8JS0tIGFjdGlvbiBuZWVkZWQgaGVyZSBiZWNhdXNlIHdlIGFyZSB1c2luZyBBSkFYIHRvIHBvc3QgdGhpcyBmb3JtIC0tJT4KKyAgICAgICAgICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9ImFjdGlvbjpmb2xkZXJFZGl0IXNhdmUiIHZhbHVlPSJzYXZlIi8+CisKKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4ubmFtZSIgbGFiZWw9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5uYW1lJyl9IiBtYXhsZW5ndGg9IjI1NSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2hhbmdlPSJvbkJsb2dyb2xsRm9ybUNoYW5nZWQoKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ua2V5dXA9Im9uQmxvZ3JvbGxGb3JtQ2hhbmdlZCgpIgorICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAgIDwvczpmb3JtPgorICAgICAgICAgICAgPC9kaXY+IDwhLS0gbW9kYWwtYm9keS0tPgorCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgICAgICAgICAgIDxwIGlkPSJmZWVkYmFjay1hcmVhLWJsb2dyb2xsLWVkaXQiPjwvcD4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJzYXZlX2Jsb2dyb2xsIiBvbmNsaWNrPSJzdWJtaXRFZGl0ZWRCbG9ncm9sbCgpIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5Ij4KKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJnZW5lcmljLnNhdmUiLz4KKyAgICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+CisgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iZ2VuZXJpYy5jYW5jZWwiLz4KKyAgICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgIDwvZGl2PiA8IS0tIG1vZGFsLWNvbnRlbnQtLT4KKworICAgIDwvZGl2PiA8IS0tIG1vZGFsLWRpYWxvZyAtLT4KKworPC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICA8JS0tIEphdmFTY3JpcHQgZm9yIGFkZC9lZGl0IGJsb2dyb2xsIG1vZGFsIC0tJT4KKworICAgIGZ1bmN0aW9uIG9uQmxvZ3JvbGxGb3JtQ2hhbmdlZCgpIHsKKworICAgICAgICB2YXIgc2F2ZUJsb2dyb2xsQnV0dG9uID0gJCgnI3NhdmVfYmxvZ3JvbGw6Zmlyc3QnKTsKKworICAgICAgICB2YXIgbmFtZSA9ICQoJyNmb2xkZXJFZGl0Rm9ybV9iZWFuX25hbWU6Zmlyc3QnKS52YWwoKS50cmltKCk7CisKKyAgICAgICAgaWYgKG5hbWUubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgc2F2ZUJsb2dyb2xsQnV0dG9uLmF0dHIoImRpc2FibGVkIiwgZmFsc2UpOworICAgICAgICAgICAgY29uc29sZS5sb2coIkJ1dHRvbiBlbmFibGVkISIpOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzYXZlQmxvZ3JvbGxCdXR0b24uYXR0cigiZGlzYWJsZWQiLCB0cnVlKTsKKyAgICAgICAgICAgIGNvbnNvbGUubG9nKCJCdXR0b24gZGlzYWJsZWQhIik7CisgICAgICAgIH0KKworICAgIH0KKworCisgICAgZnVuY3Rpb24gc3VibWl0RWRpdGVkQmxvZ3JvbGwoKSB7CisKKyAgICAgICAgdmFyIGZvbGRlckVkaXRGb3JtID0gJCgnI2ZvbGRlckVkaXRGb3JtJylbMF07CisKKyAgICAgICAgdmFyIGZlZWRiYWNrQXJlYUJsb2dyb2xsRWRpdCA9ICQoIiNmZWVkYmFjay1hcmVhLWJsb2dyb2xsLWVkaXQiKTsKKworICAgICAgICAvLyBpZiBuYW1lIGlzIGVtcHR5IHJlamVjdCBhbmQgc2hvdyBlcnJvciBtZXNzYWdlCisgICAgICAgIGlmICgkKCIjZm9sZGVyRWRpdEZvcm1fYmVhbl9uYW1lIikudmFsKCkudHJpbSgpID09PSAiIikgeworICAgICAgICAgICAgZmVlZGJhY2tBcmVhQmxvZ3JvbGxFZGl0Lmh0bWwoJzxzOnRleHQgbmFtZT0iYm9va21hcmtzRm9ybS5ibG9ncm9sbC5yZXF1aXJlZEZpZWxkcyIgLz4nKTsKKyAgICAgICAgICAgIGZlZWRiYWNrQXJlYUJsb2dyb2xsRWRpdC5jc3MoImNvbG9yIiwgInJlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gcG9zdCBibG9ncm9sbCB2aWEgQUpBWAorICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAgbWV0aG9kOiAncG9zdCcsCisgICAgICAgICAgICB1cmw6IGZvbGRlckVkaXRGb3JtLmF0dHJpYnV0ZXNbImFjdGlvbiJdLnZhbHVlLAorICAgICAgICAgICAgZGF0YTogJCgiI2ZvbGRlckVkaXRGb3JtIikuc2VyaWFsaXplKCksCisgICAgICAgICAgICBjb250ZXh0OiBkb2N1bWVudC5ib2R5CisKKyAgICAgICAgfSkuZG9uZShmdW5jdGlvbiAoZGF0YSwgc3RhdHVzLCByZXNwb25zZSkgeworCisgICAgICAgICAgICAvLyBrbHVkZ2U6IHNjcmFwZSByZXNwb25zZSBzdGF0dXMgZnJvbSBIVE1MIHJldHVybmVkIGJ5IFN0cnV0cworICAgICAgICAgICAgdmFyIGFsZXJ0RW5kID0gZGF0YS5pbmRleE9mKCJBTEVSVF9FTkQiKTsKKyAgICAgICAgICAgIHZhciBub3RVbmlxdWUgPSBkYXRhLmluZGV4T2YoJzxzOnRleHQgbmFtZT0iYm9va21hcmtGb3JtLmVycm9yLmR1cGxpY2F0ZU5hbWUiIC8+Jyk7CisgICAgICAgICAgICBpZiAobm90VW5pcXVlID4gMCAmJiBub3RVbmlxdWUgPCBhbGVydEVuZCkgeworICAgICAgICAgICAgICAgIGZlZWRiYWNrQXJlYUJsb2dyb2xsRWRpdC5jc3MoImNvbG9yIiwgInJlZCIpOworICAgICAgICAgICAgICAgIGZlZWRiYWNrQXJlYUJsb2dyb2xsRWRpdC5odG1sKCc8czp0ZXh0IG5hbWU9ImJvb2ttYXJrRm9ybS5lcnJvci5kdXBsaWNhdGVOYW1lIiAvPicpOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZlZWRiYWNrQXJlYUJsb2dyb2xsRWRpdC5jc3MoImNvbG9yIiwgImdyZWVuIik7CisgICAgICAgICAgICAgICAgZmVlZGJhY2tBcmVhQmxvZ3JvbGxFZGl0Lmh0bWwoJzxzOnRleHQgbmFtZT0iZ2VuZXJpYy5zdWNjZXNzIiAvPicpOworICAgICAgICAgICAgICAgICQoJyNibG9ncm9sbC1lZGl0LW1vZGFsJykubW9kYWwoImhpZGUiKTsKKworICAgICAgICAgICAgICAgIC8vIGtsdWRnZSBnZXQgZm9sZGVySWQgZnJvbSByZXNwb25zZSBoZWFkZXIgc2VuZCBiYWNrIGJ5IFN0cnV0cyBhY3Rpb24KKyAgICAgICAgICAgICAgICB2YXIgbmV3Rm9sZGVySWQgPSByZXNwb25zZS5nZXRSZXNwb25zZUhlYWRlcignZm9sZGVySWQnKTsKKyAgICAgICAgICAgICAgICB2aWV3U2VsZWN0b3IuYXBwZW5kKG5ldyBPcHRpb24oJycsIG5ld0ZvbGRlcklkKSk7CisgICAgICAgICAgICAgICAgJCgiI2Jvb2ttYXJrc192aWV3Rm9sZGVySWQiKS52YWwobmV3Rm9sZGVySWQpOworCisgICAgICAgICAgICAgICAgdmFyIGJvb2ttYXJrc0Zvcm0gPSAkKCIjYm9va21hcmtzIilbMF07CisgICAgICAgICAgICAgICAgYm9va21hcmtzRm9ybS5hY3Rpb24gPSAiYm9va21hcmtzIXZpZXcucm9sIjsKKyAgICAgICAgICAgICAgICBib29rbWFya3NGb3JtLnN1Ym1pdCgpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0pLmVycm9yKGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgICBmZWVkYmFja0FyZWFCbG9ncm9sbEVkaXQuaHRtbCgnPHM6dGV4dCBuYW1lPSJnZW5lcmljLmVycm9yLmNoZWNrLmxvZ3MiIC8+Jyk7CisgICAgICAgICAgICBmZWVkYmFja0FyZWFCbG9ncm9sbEVkaXQuY3NzKCJjb2xvciIsICJyZWQiKTsKKyAgICAgICAgfSk7CisgICAgfQorCis8L3NjcmlwdD4KKworCis8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisKKzwlLS0gZGVsZXRlIGJsb2dyb2xsIGNvbmZpcm1hdGlvbiBtb2RhbCAtLSU+CisKKzxkaXYgaWQ9ImRlbGV0ZS1saW5rcy1tb2RhbCIgY2xhc3M9Im1vZGFsIGZhZGUgZGVsZXRlLWxpbmtzLW1vZGFsIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyI+CisKKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtbGciPgorCisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgorCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgorICAgICAgICAgICAgICAgIDxoMz4KKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJib29rbWFya3NGb3JtLmRlbGV0ZS5jb25maXJtIi8+CisgICAgICAgICAgICAgICAgPC9oMz4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICA8czpmb3JtIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLWhvcml6b250YWwiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImJvb2ttYXJrc0Zvcm0uZGVsZXRlLmFyZVlvdVN1cmUiIC8+CisgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biIgdmFsdWU9IiV7Z2V0VGV4dCgnZ2VuZXJpYy55ZXMnKX0iIG9uY2xpY2s9ImRlbGV0ZVNlbGVjdGVkKCkiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJnZW5lcmljLnllcyIvPgorICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgJm5ic3A7CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1wcmltYXJ5IiBkYXRhLWRpc21pc3M9Im1vZGFsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iZ2VuZXJpYy5ubyIvPgorICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvczpmb3JtPgorCisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorPC9kaXY+CisKKworPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorCis8JS0tIGRlbGV0ZSBibG9ncm9sbCBjb25maXJtYXRpb24gbW9kYWwgLS0lPgorCis8ZGl2IGlkPSJkZWxldGUtYmxvZ3JvbGwtbW9kYWwiIGNsYXNzPSJtb2RhbCBmYWRlIGRlbGV0ZS1ibG9ncm9sbC1tb2RhbCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgorCisgICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLWxnIj4KKworICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgICAgICAgICAgICA8aDM+CisgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iYmxvZ3JvbGxEZWxldGVPSy5yZW1vdmVCbG9ncm9sbCIvPjoKKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImJsb2dyb2xsLW5hbWUiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2gzPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgIDxzOmZvcm0gaWQ9ImJvb21hcmtzX2RlbGV0ZV9mb2xkZXIiIGFjdGlvbj0iYm9va21hcmtzIWRlbGV0ZUZvbGRlciIgdGhlbWU9ImJvb3RzdHJhcCIKKyAgICAgICAgICAgICAgICAgICAgY3NzQ2xhc3M9ImZvcm0taG9yaXpvbnRhbCI+CisgICAgICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9InNhbHQiLz4KKyAgICAgICAgICAgICAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIi8+CisgICAgICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9ImZvbGRlcklkIi8+CisKKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJibG9ncm9sbERlbGV0ZU9LLmFyZVlvdVN1cmUiIC8+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJkZWxldGVCbG9ncm9sbE5hbWUiPjwvc3Bhbj4/CisgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgorICAgICAgICAgICAgICAgICAgICA8czpzdWJtaXQgY3NzQ2xhc3M9ImJ0biIgdmFsdWU9IiV7Z2V0VGV4dCgnZ2VuZXJpYy55ZXMnKX0iLz4mbmJzcDsKKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgYnRuLXByaW1hcnkiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJnZW5lcmljLm5vIi8+CisgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgorICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICA8L3M6Zm9ybT4KKworICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKzwvZGl2PgorCisKKzwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKworPCUtLSBhZGQvZWRpdCBsaW5rIGZvcm06IGEgbW9kYWwgLS0lPgorCis8ZGl2IGlkPSJhZGRlZGl0LWJvb2ttYXJrLW1vZGFsIiBjbGFzcz0ibW9kYWwgZmFkZSBhZGRlZGl0LWJvb2ttYXJrLW1vZGFsIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyI+CisKKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtbGciPgorCisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgorCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgorCisgICAgICAgICAgICAgICAgPCUtLSBUaXRsaW5nLCBwcm9jZXNzaW5nIGFjdGlvbnMgZGlmZmVyZW50IGJldHdlZW4gYWRkIGFuZCBlZGl0IC0tJT4KKyAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJhY3Rpb25OYW1lID09ICdib29rbWFya0VkaXQnIj4KKyAgICAgICAgICAgICAgICAgICAgPHM6c2V0IHZhcj0ic3VidGl0bGVLZXkiPmJvb2ttYXJrRm9ybS5lZGl0LnN1YnRpdGxlPC9zOnNldD4KKyAgICAgICAgICAgICAgICAgICAgPHM6c2V0IHZhcj0ibWFpbkFjdGlvbiI+Ym9va21hcmtFZGl0PC9zOnNldD4KKyAgICAgICAgICAgICAgICA8L3M6aWY+CisgICAgICAgICAgICAgICAgPHM6ZWxzZT4KKyAgICAgICAgICAgICAgICAgICAgPHM6c2V0IHZhcj0ic3VidGl0bGVLZXkiPmJvb2ttYXJrRm9ybS5hZGQuc3VidGl0bGU8L3M6c2V0PgorICAgICAgICAgICAgICAgICAgICA8czpzZXQgdmFyPSJtYWluQWN0aW9uIj5ib29rbWFya0FkZDwvczpzZXQ+CisgICAgICAgICAgICAgICAgPC9zOmVsc2U+CisKKyAgICAgICAgICAgICAgICA8aDM+CisgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iJXsjc3VidGl0bGVLZXl9Ij4gPC9zOnRleHQ+IDxzcGFuIGlkPSJzdWJ0aXRsZV9mb2xkZXJfbmFtZSI+PC9zcGFuPgorICAgICAgICAgICAgICAgIDwvaDM+CisKKyAgICAgICAgICAgICAgICA8ZGl2IGlkPSJib29rbWFya19yZXF1aXJlZF9maWVsZHMiIHJvbGU9ImFsZXJ0IiBjbGFzcz0iYWxlcnQiPgorICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImJvb2ttYXJrRm9ybS5yZXF1aXJlZEZpZWxkcyIvPgorICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwlLS0gbW9kYWwgaGVhZGVyIC0tJT4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisKKyAgICAgICAgICAgICAgICA8czpmb3JtIGFjdGlvbj0iYm9va21hcmtFZGl0IiB0aGVtZT0iYm9vdHN0cmFwIiBjc3NDbGFzcz0iZm9ybS1ob3Jpem9udGFsIj4KKyAgICAgICAgICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9InNhbHQiLz4KKyAgICAgICAgICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIvPgorICAgICAgICAgICAgICAgICAgICA8JS0tCisgICAgICAgICAgICAgICAgICAgICAgICBFZGl0IGFjdGlvbiB1c2VzIGZvbGRlcklkIGZvciByZWRpcmVjdGlvbiBiYWNrIHRvIHByb3BlciBib29rbWFya3MgZm9sZGVyIG9uIGNhbmNlbAorICAgICAgICAgICAgICAgICAgICAgICAgKGFzIGNvbmZpZ3VyZWQgaW4gc3RydXRzLnhtbCk7IGFkZCBhY3Rpb24gYWxzbywgcGx1cyB0byBrbm93IHdoaWNoIGZvbGRlciB0byBwdXQgbmV3CisgICAgICAgICAgICAgICAgICAgICAgICBib29rbWFyayBpbi4KKyAgICAgICAgICAgICAgICAgICAgLS0lPgorICAgICAgICAgICAgICAgICAgICA8czpoaWRkZW4gbmFtZT0iZm9sZGVySWQiLz4KKyAgICAgICAgICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4uaWQiLz4KKworICAgICAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5uYW1lIiBtYXhsZW5ndGg9IjI1NSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2hhbmdlPSJvbkJvb2ttYXJrRm9ybUNoYW5nZWQoKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ua2V5dXA9Im9uQm9va21hcmtGb3JtQ2hhbmdlZCgpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5uYW1lJyl9Ii8+CisKKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4udXJsIiBtYXhsZW5ndGg9IjI1NSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2hhbmdlPSJvbkJvb2ttYXJrRm9ybUNoYW5nZWQoKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ua2V5dXA9Im9uQm9va21hcmtGb3JtQ2hhbmdlZCgpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgnYm9va21hcmtGb3JtLnVybCcpfSIvPgorCisgICAgICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLmZlZWRVcmwiIG1heGxlbmd0aD0iMjU1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9Im9uQm9va21hcmtGb3JtQ2hhbmdlZCgpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25rZXl1cD0ib25Cb29rbWFya0Zvcm1DaGFuZ2VkKCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCdib29rbWFya0Zvcm0ucnNzVXJsJyl9Ii8+CisKKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uZGVzY3JpcHRpb24iIG1heGxlbmd0aD0iMjU1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9Im9uQm9va21hcmtGb3JtQ2hhbmdlZCgpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25rZXl1cD0ib25Cb29rbWFya0Zvcm1DaGFuZ2VkKCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCdnZW5lcmljLmRlc2NyaXB0aW9uJyl9Ii8+CisKKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uaW1hZ2UiIG1heGxlbmd0aD0iMjU1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9Im9uQm9va21hcmtGb3JtQ2hhbmdlZCgpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25rZXl1cD0ib25Cb29rbWFya0Zvcm1DaGFuZ2VkKCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCdib29rbWFya0Zvcm0uaW1hZ2UnKX0iLz4KKyAgICAgICAgICAgICAgICA8L3M6Zm9ybT4KKworICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CisgICAgICAgICAgICAgICAgICAgIDxwIGlkPSJmZWVkYmFjay1hcmVhLWVkaXQiPjwvcD4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGlkPSJzYXZlX2Jvb2ttYXJrIiBvbmNsaWNrPSJzYXZlQm9va21hcmsoKSIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImdlbmVyaWMuc2F2ZSIvPgorICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4iIGRhdGEtZGlzbWlzcz0ibW9kYWwiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJnZW5lcmljLmNhbmNlbCIvPgorICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorCisKKyAgICAgICAgPC9kaXY+CisgICAgICAgIDwlLS0gbW9kYWwgY29udGVudCAtLSU+CisKKyAgICA8L2Rpdj4KKyAgICA8JS0tIG1vZGFsIGRpYWxvZyAtLSU+CisKKzwvZGl2PiA8JS0tIG1vZGFsIC0tJT4KKworCis8JS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0lPgorCis8JS0tIEphdmFTY3JpcHQgZm9yIGFkZC9lZGl0IGxpbmsgbW9kYWwgLS0lPgorCis8c2NyaXB0PgorCisgICAgZnVuY3Rpb24gYWRkQm9va21hcmsoKSB7CisKKyAgICAgICAgdmFyIHNhdmVCb29rbWFya0J1dHRvbiA9ICQoJyNzYXZlX2Jvb2ttYXJrOmZpcnN0Jyk7CisgICAgICAgIHNhdmVCb29rbWFya0J1dHRvbi5hdHRyKCJkaXNhYmxlZCIsIHRydWUpOworCisgICAgICAgIHZhciBlbGVtID0gJCgnI2Jvb2ttYXJrX3JlcXVpcmVkX2ZpZWxkczpmaXJzdCcpOworICAgICAgICBlbGVtLmh0bWwoJzxzOnRleHQgbmFtZT0iYm9va21hcmtGb3JtLnJlcXVpcmVkRmllbGRzIiAvPicpOworICAgICAgICBlbGVtLnJlbW92ZUNsYXNzKCJhbGVydC1zdWNjZXNzIik7CisgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MoImFsZXJ0LWRhbmdlciIpOworICAgICAgICBlbGVtLmFkZENsYXNzKCJhbGVydC1pbmZvIik7CisKKyAgICAgICAgJCgnI2Jvb2ttYXJrRWRpdF9iZWFuX25hbWU6Zmlyc3QnKS52YWwoJycpOworICAgICAgICAkKCcjYm9va21hcmtFZGl0X2JlYW5fdXJsOmZpcnN0JykudmFsKCcnKTsKKyAgICAgICAgJCgnI2Jvb2ttYXJrRWRpdF9iZWFuX2ltYWdlOmZpcnN0JykudmFsKCcnKTsKKyAgICAgICAgJCgnI2Jvb2ttYXJrRWRpdF9iZWFuX2ZlZWRVcmw6Zmlyc3QnKS52YWwoJycpOworCisgICAgICAgICQoJyNzdWJ0aXRsZV9mb2xkZXJfbmFtZTpmaXJzdCcpLmh0bWwob3JpZ2luYWxOYW1lKTsKKworICAgICAgICAkKCcjYWRkZWRpdC1ib29rbWFyay1tb2RhbCcpLm1vZGFsKHtzaG93OiB0cnVlfSk7CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBlZGl0Qm9va21hcmsoaWQsIG5hbWUsIHVybCwgZmVlZFVybCwgZGVzY3JpcHRpb24sIGltYWdlKSB7CisKKyAgICAgICAgdmFyIHNhdmVCb29rbWFya0J1dHRvbiA9ICQoJyNzYXZlX2Jvb2ttYXJrOmZpcnN0Jyk7CisgICAgICAgIHNhdmVCb29rbWFya0J1dHRvbi5hdHRyKCJkaXNhYmxlZCIsIHRydWUpOworCisgICAgICAgIHZhciBlbGVtID0gJCgnI2Jvb2ttYXJrX3JlcXVpcmVkX2ZpZWxkczpmaXJzdCcpOworICAgICAgICBlbGVtLmh0bWwoJzxzOnRleHQgbmFtZT0iYm9va21hcmtGb3JtLnJlcXVpcmVkRmllbGRzIiAvPicpOworICAgICAgICBlbGVtLnJlbW92ZUNsYXNzKCJhbGVydC1zdWNjZXNzIik7CisgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MoImFsZXJ0LWRhbmdlciIpOworICAgICAgICBlbGVtLmFkZENsYXNzKCJhbGVydC1pbmZvIik7CisKKyAgICAgICAgJCgnI2Jvb2ttYXJrRWRpdF9iZWFuX2lkOmZpcnN0JykudmFsKGlkKTsKKyAgICAgICAgJCgnI2Jvb2ttYXJrX2ZvbGRlcklkJykudmFsKGlkKTsKKyAgICAgICAgJCgnI2Jvb2ttYXJrRWRpdF9iZWFuX25hbWU6Zmlyc3QnKS52YWwobmFtZSk7CisgICAgICAgICQoJyNib29rbWFya0VkaXRfYmVhbl91cmw6Zmlyc3QnKS52YWwodXJsKTsKKyAgICAgICAgJCgnI2Jvb2ttYXJrRWRpdF9iZWFuX2ZlZWRVcmw6Zmlyc3QnKS52YWwoZmVlZFVybCk7CisgICAgICAgICQoJyNib29rbWFya0VkaXRfYmVhbl9kZXNjcmlwdGlvbjpmaXJzdCcpLnZhbChkZXNjcmlwdGlvbik7CisgICAgICAgICQoJyNib29rbWFya0VkaXRfYmVhbl9pbWFnZTpmaXJzdCcpLnZhbChpbWFnZSk7CisKKyAgICAgICAgJCgnI3N1YnRpdGxlX2ZvbGRlcl9uYW1lOmZpcnN0JykuaHRtbChvcmlnaW5hbE5hbWUpOworCisgICAgICAgICQoJyNhZGRlZGl0LWJvb2ttYXJrLW1vZGFsJykubW9kYWwoe3Nob3c6IHRydWV9KTsKKyAgICB9CisKKworICAgIGZ1bmN0aW9uIG9uQm9va21hcmtGb3JtQ2hhbmdlZCgpIHsKKworICAgICAgICB2YXIgc2F2ZUJvb2ttYXJrQnV0dG9uID0gJCgnI3NhdmVfYm9va21hcms6Zmlyc3QnKTsKKworICAgICAgICB2YXIgbmFtZSA9ICQoJyNib29rbWFya0VkaXRfYmVhbl9uYW1lOmZpcnN0JykudmFsKCkudHJpbSgpOworICAgICAgICB2YXIgdXJsID0gJCgnI2Jvb2ttYXJrRWRpdF9iZWFuX3VybDpmaXJzdCcpLnZhbCgpLnRyaW0oKTsKKyAgICAgICAgdmFyIGltYWdlID0gJCgnI2Jvb2ttYXJrRWRpdF9iZWFuX2ltYWdlOmZpcnN0JykudmFsKCkudHJpbSgpOworICAgICAgICB2YXIgZmVlZFVybCA9ICQoJyNib29rbWFya0VkaXRfYmVhbl9mZWVkVXJsOmZpcnN0JykudmFsKCkudHJpbSgpOworCisgICAgICAgIHZhciBiYWRVcmxzID0gW107CisKKyAgICAgICAgaWYgKHVybC5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBpZiAoIWlzVmFsaWRVcmwodXJsKSkgeworICAgICAgICAgICAgICAgIGJhZFVybHMucHVzaCgiQm9va21hcmsgVVJMIikKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbWFnZS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBpZiAoIWlzVmFsaWRVcmwoaW1hZ2UpKSB7CisgICAgICAgICAgICAgICAgYmFkVXJscy5wdXNoKCJJbWFnZSBVUkwiKQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGZlZWRVcmwubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgaWYgKCFpc1ZhbGlkVXJsKGZlZWRVcmwpKSB7CisgICAgICAgICAgICAgICAgYmFkVXJscy5wdXNoKCJOZXdzZmVlZCBVUkwiKQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFyIGVsZW0gPSAkKCcjYm9va21hcmtfcmVxdWlyZWRfZmllbGRzOmZpcnN0Jyk7CisgICAgICAgIHZhciBtZXNzYWdlID0gJyc7CisKKyAgICAgICAgaWYgKG5hbWUubGVuZ3RoID4gMCAmJiB1cmwubGVuZ3RoID4gMCAmJiBiYWRVcmxzLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAgc2F2ZUJvb2ttYXJrQnV0dG9uLmF0dHIoImRpc2FibGVkIiwgZmFsc2UpOworCisgICAgICAgICAgICBtZXNzYWdlID0gJzxzOnRleHQgbmFtZT0iZ2VuZXJpYy5sb29rc0dvb2QiIC8+JzsKKyAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MoImFsZXJ0LWluZm8iKTsKKyAgICAgICAgICAgIGVsZW0ucmVtb3ZlQ2xhc3MoImFsZXJ0LWRhbmdlciIpOworICAgICAgICAgICAgZWxlbS5hZGRDbGFzcygiYWxlcnQtc3VjY2VzcyIpOworICAgICAgICAgICAgZWxlbS5odG1sKG1lc3NhZ2UpOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzYXZlQm9va21hcmtCdXR0b24uYXR0cigiZGlzYWJsZWQiLCB0cnVlKTsKKworICAgICAgICAgICAgaWYgKG5hbWUubGVuZ3RoID09PSAwIHx8IHVybC5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gJzxzOnRleHQgbmFtZT0iYm9va21hcmtGb3JtLnJlcXVpcmVkIiAvPic7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoYmFkVXJscy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICc8czp0ZXh0IG5hbWU9ImJvb2ttYXJrRm9ybS5iYWRVcmxzIiAvPic7CisgICAgICAgICAgICAgICAgdmFyIHNlcCA9ICIgIjsKKyAgICAgICAgICAgICAgICBmb3IgKGkgaW4gYmFkVXJscykgeworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZSArIHNlcCArIGJhZFVybHNbaV07CisgICAgICAgICAgICAgICAgICAgIHNlcCA9ICIsICI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcygiYWxlcnQtaW5mbyIpOworICAgICAgICAgICAgZWxlbS5yZW1vdmVDbGFzcygiYWxlcnQtc3VjY2VzcyIpOworICAgICAgICAgICAgZWxlbS5hZGRDbGFzcygiYWxlcnQtZGFuZ2VyIik7CisgICAgICAgICAgICBlbGVtLmh0bWwobWVzc2FnZSk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIGZ1bmN0aW9uIHNhdmVCb29rbWFyaygpIHsKKworICAgICAgICB2YXIgZmVlZGJhY2tBcmVhRWRpdCA9ICQoIiNmZWVkYmFjay1hcmVhLWVkaXQiKTsKKworICAgICAgICAvLyBwb3N0IGJvb2ttYXJrIHZpYSBBSkFYCisgICAgICAgICQuYWpheCh7CisgICAgICAgICAgICBtZXRob2Q6ICdwb3N0JywKKyAgICAgICAgICAgIHVybDogImJvb2ttYXJrRWRpdCFzYXZlLnJvbCIsCisgICAgICAgICAgICBkYXRhOiAkKCIjYm9va21hcmtFZGl0Iikuc2VyaWFsaXplKCksCisgICAgICAgICAgICBjb250ZXh0OiBkb2N1bWVudC5ib2R5CisKKyAgICAgICAgfSkuZG9uZShmdW5jdGlvbiAoZGF0YSkgeworCisgICAgICAgICAgICAvLyBrbHVkZ2U6IHNjcmFwZSByZXNwb25zZSBzdGF0dXMgZnJvbSBIVE1MIHJldHVybmVkIGJ5IFN0cnV0cworICAgICAgICAgICAgdmFyIGFsZXJ0RW5kID0gZGF0YS5pbmRleE9mKCJBTEVSVF9FTkQiKTsKKyAgICAgICAgICAgIHZhciBub3RVbmlxdWUgPSBkYXRhLmluZGV4T2YoJzxzOnRleHQgbmFtZT0iYm9va21hcmtGb3JtLmVycm9yLmR1cGxpY2F0ZU5hbWUiIC8+Jyk7CisgICAgICAgICAgICBpZiAobm90VW5pcXVlID4gMCAmJiBub3RVbmlxdWUgPCBhbGVydEVuZCkgeworICAgICAgICAgICAgICAgIGZlZWRiYWNrQXJlYUVkaXQuY3NzKCJjb2xvciIsICJyZWQiKTsKKyAgICAgICAgICAgICAgICBmZWVkYmFja0FyZWFFZGl0Lmh0bWwoJzxzOnRleHQgbmFtZT0iYm9va21hcmtGb3JtLmVycm9yLmR1cGxpY2F0ZU5hbWUiIC8+Jyk7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmVlZGJhY2tBcmVhRWRpdC5jc3MoImNvbG9yIiwgImdyZWVuIik7CisgICAgICAgICAgICAgICAgZmVlZGJhY2tBcmVhRWRpdC5odG1sKCc8czp0ZXh0IG5hbWU9ImdlbmVyaWMuc3VjY2VzcyIgLz4nKTsKKyAgICAgICAgICAgICAgICAkKCcjYWRkZWRpdC1ib29rbWFyay1tb2RhbCcpLm1vZGFsKCJoaWRlIik7CisKKyAgICAgICAgICAgICAgICAvLyBjYXVzZSBwYWdlIHRvIGJlIHJlbG9hZGVkIHNvIHRoYXQgZWRpdCBhcHBlYXJzCisgICAgICAgICAgICAgICAgLy8gYW5kIG1ha2Ugc3VyZSB3ZSBlbmQgdXAgb24gdGhlIHJpZ2h0IGZvbGRlcgorICAgICAgICAgICAgICAgIGJvb2ttYXJrc0Zvcm0gPSAkKCIjYm9va21hcmtzIilbMF07CisgICAgICAgICAgICAgICAgYm9va21hcmtzRm9ybS52aWV3Rm9sZGVySWQudmFsdWUgPSBib29rbWFya3NGb3JtLmZvbGRlcklkLnZhbHVlOworICAgICAgICAgICAgICAgIHZpZXdDaGFuZ2VkKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSkuZXJyb3IoZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAgIGZlZWRiYWNrQXJlYUVkaXQuaHRtbCgnPHM6dGV4dCBuYW1lPSJnZW5lcmljLmVycm9yLmNoZWNrLmxvZ3MiIC8+Jyk7CisgICAgICAgICAgICBmZWVkYmFja0FyZWFFZGl0LmNzcygiY29sb3IiLCAicmVkIik7CisgICAgICAgIH0pOworICAgIH0KKworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvQm9va21hcmtzU2lkZWJhci5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvQm9va21hcmtzU2lkZWJhci5qc3AKaW5kZXggN2QzOTg2ZC4uOWMxNmVlZCAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0Jvb2ttYXJrc1NpZGViYXIuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9Cb29rbWFya3NTaWRlYmFyLmpzcApAQCAtMTcsNDggKzE3LDI3IEBACiAtLSU+CiA8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+CiAKLTxkaXYgY2xhc3M9InNpZGViYXJGYWRlIj4KLSAgICA8ZGl2IGNsYXNzPSJtZW51LXRyIj4KLSAgICAgICAgPGRpdiBjbGFzcz0ibWVudS10bCI+Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXJJbm5lciI+Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPGgzPjxzOnRleHQgbmFtZT0ibWFpblBhZ2UuYWN0aW9ucyIgLz48L2gzPgotICAgICAgICAgICAgICAgIDxociBzaXplPSIxIiBub3NoYWRlPSJub3NoYWRlIiAvPgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgICA8JS0tIEFkZCBCb29rbWFyayBsaW5rIC0tJT4KLSAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9JzxzOnVybCB2YWx1ZT0iL2ltYWdlcy9saW5rX2FkZC5wbmciLz4nIGJvcmRlcj0iMCJhbHQ9Imljb24iIC8+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnVybCB2YXI9ImFkZEJvb2ttYXJrIiBhY3Rpb249ImJvb2ttYXJrQWRkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJmb2xkZXJJZCIgdmFsdWU9IiV7Zm9sZGVyLmlkfSIgLz4KLSAgICAgICAgICAgICAgICAgICAgPC9zOnVybD4KLSAgICAgICAgICAgICAgICAgICAgPHM6YSBocmVmPSIle2FkZEJvb2ttYXJrfSI+PHM6dGV4dCBuYW1lPSJib29rbWFya3NGb3JtLmFkZEJvb2ttYXJrIiAvPjwvczphPgotICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICAgICAgPCUtLSBBZGQgRm9sZGVyIGxpbmsgLS0lPgotICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0nPHM6dXJsIHZhbHVlPSIvaW1hZ2VzL2ZvbGRlcl9hZGQucG5nIi8+JyBib3JkZXI9IjAiYWx0PSJpY29uIiAvPgotICAgICAgICAgICAgICAgICAgICA8czp1cmwgdmFyPSJhZGRGb2xkZXIiIGFjdGlvbj0iZm9sZGVyQWRkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJmb2xkZXJJZCIgdmFsdWU9IiV7Zm9sZGVyLmlkfSIgLz4KLSAgICAgICAgICAgICAgICAgICAgPC9zOnVybD4KLSAgICAgICAgICAgICAgICAgICAgPHM6YSBocmVmPSIle2FkZEZvbGRlcn0iPjxzOnRleHQgbmFtZT0iYm9va21hcmtzRm9ybS5hZGRGb2xkZXIiIC8+PC9zOmE+Ci0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIDwlLS0gSW1wb3J0IGJvb2ttYXJrcyAtLSU+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSc8czp1cmwgdmFsdWU9Ii9pbWFnZXMvbGlua19hZGQucG5nIi8+JyBib3JkZXI9IjAiYWx0PSJpY29uIiAvPgotICAgICAgICAgICAgICAgICAgICA8czp1cmwgdmFyPSJpbXBvcnRCb29rbWFya3MiIGFjdGlvbj0iYm9va21hcmtzSW1wb3J0Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+Ci0gICAgICAgICAgICAgICAgICAgIDwvczp1cmw+Ci0gICAgICAgICAgICAgICAgICAgIDxzOmEgaHJlZj0iJXtpbXBvcnRCb29rbWFya3N9Ij48czp0ZXh0IG5hbWU9ImJvb2ttYXJrc0Zvcm0uaW1wb3J0Qm9va21hcmtzIiAvPjwvczphPgotICAgICAgICAgICAgICAgIDwvcD4KKzxoMz48czp0ZXh0IG5hbWU9Im1haW5QYWdlLmFjdGlvbnMiLz48L2gzPgorPGhyIHNpemU9IjEiIG5vc2hhZGU9Im5vc2hhZGUiLz4KIAotICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAKLSAgICAgICAgPC9kaXY+Ci0gICAgPC9kaXY+Ci08L2Rpdj4JCis8cD4KKyAgICA8JS0tIEFkZCBCbG9ncm9sbCAtLSU+CisKKyAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJuZXdCbG9ncm9sbCgpIj4KKyAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tcGx1cyI+PC9zcGFuPgorICAgICAgICA8czp0ZXh0IG5hbWU9ImJvb2ttYXJrc0Zvcm0uYWRkRm9sZGVyIi8+CisgICAgPC9hPgorPC9wPgorCis8JS0tIEltcG9ydCBib29rbWFya3MKKzxwPgorICAgIDxzOnVybCB2YXI9ImltcG9ydEJvb2ttYXJrcyIgYWN0aW9uPSJib29rbWFya3NJbXBvcnQiPgorICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIle2FjdGlvbldlYmxvZy5oYW5kbGV9Ii8+CisgICAgPC9zOnVybD4KKyAgICA8czphIGhyZWY9IiV7aW1wb3J0Qm9va21hcmtzfSI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXBsdXMiPjwvc3Bhbj4KKyAgICAgICAgPHM6dGV4dCBuYW1lPSJib29rbWFya3NGb3JtLmltcG9ydEJvb2ttYXJrcyIvPgorICAgIDwvczphPgorPC9wPgorLS0lPgorCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvQ2F0ZWdvcmllcy5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvQ2F0ZWdvcmllcy5qc3AKaW5kZXggZWQ5YzQzZi4uNGQ5Y2ExNyAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0NhdGVnb3JpZXMuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9DYXRlZ29yaWVzLmpzcApAQCAtMTcsODkgKzE3LDI4MyBAQAogLS0lPgogPCVAIGluY2x1ZGUgZmlsZT0iL1dFQi1JTkYvanNwcy90YWdsaWJzLXN0cnV0czIuanNwIiAlPgogCi08JS0tIEphdmFTY3JpcHQgZm9yIGNhdGVnb3JpZXMgdGFibGUgLS0lPiAKLTxzY3JpcHQ+Ci1mdW5jdGlvbiBvbk1vdmUoKQotewotICAgIGlmICggY29uZmlybSgiPHM6dGV4dCBuYW1lPSdjYXRlZ29yaWVzRm9ybS5tb3ZlLmNvbmZpcm0nIC8+IikgKSAKLSAgICB7Ci0gICAgICAgIGRvY3VtZW50LmNhdGVnb3JpZXMubWV0aG9kLnZhbHVlID0gIm1vdmVTZWxlY3RlZCI7Ci0gICAgICAgIGRvY3VtZW50LmNhdGVnb3JpZXMuc3VibWl0KCk7Ci0gICAgfQotfQotPC9zY3JpcHQ+Ci0KIDxwIGNsYXNzPSJzdWJ0aXRsZSI+Ci0gICAgPHM6dGV4dCBuYW1lPSJjYXRlZ29yaWVzRm9ybS5zdWJ0aXRsZSIgPgotICAgICAgICA8czpwYXJhbSB2YWx1ZT0id2VibG9nIiAvPgorICAgIDxzOnRleHQgbmFtZT0iY2F0ZWdvcmllc0Zvcm0uc3VidGl0bGUiPgorICAgICAgICA8czpwYXJhbSB2YWx1ZT0id2VibG9nIi8+CiAgICAgPC9zOnRleHQ+CiA8L3A+CiA8cCBjbGFzcz0icGFnZXRpcCI+Ci0gICAgPHM6dGV4dCBuYW1lPSJjYXRlZ29yaWVzRm9ybS5yb290UHJvbXB0IiAvPgorICAgIDxzOnRleHQgbmFtZT0iY2F0ZWdvcmllc0Zvcm0ucm9vdFByb21wdCIvPgogPC9wPgogCi0KIDwlLS0gRm9ybSBpcyBhIHRhYmxlIG9mIGNhdGVnb3JpZXMgZWFjaCB3aXRoIGNoZWNrYm94IC0tJT4KIDxzOmZvcm0gYWN0aW9uPSJjYXRlZ29yaWVzIW1vdmUiPgotCTxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgotICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9ImNhdGVnb3J5SWQiIC8+IAorICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0Ii8+CisgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIvPgorICAgIDxzOmhpZGRlbiBuYW1lPSJjYXRlZ29yeUlkIi8+CiAKLSAgICA8dGFibGUgY2xhc3M9InJvbGxlcnRhYmxlIj4KLSAgICAgICAgCisgICAgPHRhYmxlIGNsYXNzPSJyb2xsZXJ0YWJsZSB0YWJsZSB0YWJsZS1zdHJpcGVkIiB3aWR0aD0iMTAwJSI+CisKICAgICAgICAgPHRyIGNsYXNzPSJyb2xsZXJ0YWJsZSI+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iMTUlIj48czp0ZXh0IG5hbWU9ImdlbmVyaWMubmFtZSIgLz48L3RoPgotICAgICAgICAgICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSIgd2lkdGg9IjQwJSI+PHM6dGV4dCBuYW1lPSJnZW5lcmljLmRlc2NyaXB0aW9uIiAvPjwvdGg+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iMzElIj48czp0ZXh0IG5hbWU9ImNhdGVnb3JpZXNGb3JtLmltYWdlVXJsIiAvPjwvdGg+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iNyUiPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5lZGl0IiAvPjwvdGg+Ci0gICAgICAgICAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iNyUiPjxzOnRleHQgbmFtZT0iY2F0ZWdvcmllc0Zvcm0ucmVtb3ZlIiAvPjwvdGg+CisgICAgICAgICAgICA8dGggd2lkdGg9IjMwJSI+PHM6dGV4dCBuYW1lPSJnZW5lcmljLm5hbWUiLz48L3RoPgorICAgICAgICAgICAgPHRoIHdpZHRoPSI1MCUiPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5kZXNjcmlwdGlvbiIvPjwvdGg+CisgICAgICAgICAgICA8dGggd2lkdGg9IjEwJSI+PHM6dGV4dCBuYW1lPSJnZW5lcmljLmVkaXQiLz48L3RoPgorICAgICAgICAgICAgPHRoIHdpZHRoPSIxMCUiPjxzOnRleHQgbmFtZT0iY2F0ZWdvcmllc0Zvcm0ucmVtb3ZlIi8+PC90aD4KICAgICAgICAgPC90cj4KLSAgICAgICAgCi0gICAgICAgIDxzOmlmIHRlc3Q9IkFsbENhdGVnb3JpZXMgIT0gbnVsbCAmJiAhQWxsQ2F0ZWdvcmllcy5pc0VtcHR5Ij4KLSAgICAgICAgCi0gICAgICAgIDwlLS0gQ2F0ZWdvcmllcyAtLSU+Ci0gICAgICAgIDxzOml0ZXJhdG9yIHZhcj0iY2F0ZWdvcnkiIHZhbHVlPSJBbGxDYXRlZ29yaWVzIiBzdGF0dXM9InJvd3N0YXR1cyI+Ci0gICAgICAgICAgICA8czppZiB0ZXN0PSIjcm93c3RhdHVzLm9kZCA9PSB0cnVlIj4KLSAgICAgICAgICAgICAgICA8dHIgY2xhc3M9InJvbGxlcnRhYmxlX29kZCI+Ci0gICAgICAgICAgICA8L3M6aWY+Ci0gICAgICAgICAgICA8czplbHNlPgotICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0icm9sbGVydGFibGVfZXZlbiI+Ci0gICAgICAgICAgICA8L3M6ZWxzZT4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0icm9sbGVydGFibGUiPjxzOnByb3BlcnR5IHZhbHVlPSIjY2F0ZWdvcnkubmFtZSIgLz48L3RkPgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0icm9sbGVydGFibGUiPjxzOnByb3BlcnR5IHZhbHVlPSIjY2F0ZWdvcnkuZGVzY3JpcHRpb24iIC8+PC90ZD4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InJvbGxlcnRhYmxlIj48czpwcm9wZXJ0eSB2YWx1ZT0iI2NhdGVnb3J5LmltYWdlIiAvPjwvdGQ+CiAKLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InJvbGxlcnRhYmxlIiBhbGlnbj0iY2VudGVyIj4KLSAgICAgICAgICAgICAgICAgICAgPHM6dXJsIHZhcj0iZWRpdFVybCIgYWN0aW9uPSJjYXRlZ29yeUVkaXQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iJXthY3Rpb25XZWJsb2cuaGFuZGxlfSIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9ImJlYW4uaWQiIHZhbHVlPSIjY2F0ZWdvcnkuaWQiIC8+Ci0gICAgICAgICAgICAgICAgICAgIDwvczp1cmw+Ci0gICAgICAgICAgICAgICAgICAgIDxzOmEgaHJlZj0iJXtlZGl0VXJsfSI+PGltZyBzcmM9JzxzOnVybCB2YWx1ZT0iL2ltYWdlcy9wYWdlX3doaXRlX2VkaXQucG5nIi8+JyBib3JkZXI9IjAiIGFsdD0iaWNvbiIgLz48L3M6YT4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0icm9sbGVydGFibGUiIGFsaWduPSJjZW50ZXIiPgotICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJBbGxDYXRlZ29yaWVzLnNpemUoKSA+IDEiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHM6dXJsIHZhcj0icmVtb3ZlVXJsIiBhY3Rpb249ImNhdGVnb3J5UmVtb3ZlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIle2FjdGlvbldlYmxvZy5oYW5kbGV9IiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9InJlbW92ZUlkIiB2YWx1ZT0iI2NhdGVnb3J5LmlkIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9zOnVybD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOmEgaHJlZj0iJXtyZW1vdmVVcmx9Ij48aW1nIHNyYz0nPHM6dXJsIHZhbHVlPSIvaW1hZ2VzL2RlbGV0ZS5wbmciLz4nIGJvcmRlcj0iMCIgYWx0PSJpY29uIiAvPjwvczphPgotICAgICAgICAgICAgICAgICAgICA8L3M6aWY+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgIDwvczppdGVyYXRvcj4KLSAgICAgICAgCisgICAgICAgIDxzOmlmIHRlc3Q9IkFsbENhdGVnb3JpZXMgIT0gbnVsbCAmJiAhQWxsQ2F0ZWdvcmllcy5pc0VtcHR5Ij4KKworICAgICAgICAgICAgPHM6aXRlcmF0b3IgdmFyPSJjYXRlZ29yeSIgdmFsdWU9IkFsbENhdGVnb3JpZXMiIHN0YXR1cz0icm93c3RhdHVzIj4KKyAgICAgICAgICAgICAgICA8dHI+CisgICAgICAgICAgICAgICAgICAgIDx0ZD48czpwcm9wZXJ0eSB2YWx1ZT0iI2NhdGVnb3J5Lm5hbWUiLz48L3RkPgorCisgICAgICAgICAgICAgICAgICAgIDx0ZD48czpwcm9wZXJ0eSB2YWx1ZT0iI2NhdGVnb3J5LmRlc2NyaXB0aW9uIi8+PC90ZD4KKworICAgICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciI+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnNldCB2YXI9ImNhdGVnb3J5SWQiICAgIHZhbHVlPSIjY2F0ZWdvcnkuaWQiIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8czpzZXQgdmFyPSJjYXRlZ29yeU5hbWUiICB2YWx1ZT0iI2NhdGVnb3J5Lm5hbWUiIC8+CisgICAgICAgICAgICAgICAgICAgICAgICA8czpzZXQgdmFyPSJjYXRlZ29yeURlc2MiICB2YWx1ZT0iI2NhdGVnb3J5LmRlc2NyaXB0aW9uIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6c2V0IHZhcj0iY2F0ZWdvcnlJbWFnZSIgdmFsdWU9IiNjYXRlZ29yeS5pbWFnZSIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIG9uY2xpY2s9InNob3dDYXRlZ29yeUVkaXRNb2RhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzOnByb3BlcnR5IHZhbHVlPSJjYXRlZ29yeUlkIiAvPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8czpwcm9wZXJ0eSB2YWx1ZT0iY2F0ZWdvcnlOYW1lIi8+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzOnByb3BlcnR5IHZhbHVlPSJjYXRlZ29yeURlc2MiLz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHM6cHJvcGVydHkgdmFsdWU9ImNhdGVnb3J5SW1hZ2UiLz4nICkiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWVkaXQiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKworICAgICAgICAgICAgICAgICAgICA8L3RkPgorCisgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0icm9sbGVydGFibGUiIGFsaWduPSJjZW50ZXIiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iQWxsQ2F0ZWdvcmllcy5zaXplKCkgPiAxIj4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnNldCB2YXI9ImNhdGVnb3J5SWQiICAgIHZhbHVlPSIjY2F0ZWdvcnkuaWQiIC8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6c2V0IHZhcj0iY2F0ZWdvcnlOYW1lIiAgdmFsdWU9IiNjYXRlZ29yeS5uYW1lIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnNldCB2YXI9ImNhdGVnb3J5SW5Vc2UiIHZhbHVlPSIjY2F0ZWdvcnkuaW5Vc2UudG9TdHJpbmcoKSIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPSJzaG93Q2F0ZWdvcnlEZWxldGVNb2RhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8czpwcm9wZXJ0eSB2YWx1ZT0iY2F0ZWdvcnlJZCIgLz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzOnByb3BlcnR5IHZhbHVlPSJjYXRlZ29yeU5hbWUiIC8+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSJjYXRlZ29yeUluVXNlIi8+ICkiID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tdHJhc2giPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvczppZj4KKyAgICAgICAgICAgICAgICAgICAgPC90ZD4KKworICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICA8L3M6aXRlcmF0b3I+CisKICAgICAgICAgPC9zOmlmPgorCiAgICAgICAgIDxzOmVsc2U+CiAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiIGNvbHNwYW49IjYiPjxzOnRleHQgbmFtZT0iY2F0ZWdvcmllc0Zvcm0ubm9yZXN1bHRzIiAvPjwvdGQ+CisgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiIGNvbHNwYW49IjYiPjxzOnRleHQgbmFtZT0iY2F0ZWdvcmllc0Zvcm0ubm9yZXN1bHRzIi8+PC90ZD4KICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgIDwvczplbHNlPgotICAgICAgICAKKwogICAgIDwvdGFibGU+Ci0gICAgCisKIDwvczpmb3JtPgorCisKKzwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+Cis8JS0tIGFkZC9lZGl0IGNhdGVnb3J5IG1vZGFsIC0tJT4KKworPGRpdiBpZD0iY2F0ZWdvcnktZWRpdC1tb2RhbCIgY2xhc3M9Im1vZGFsIGZhZGUgY2F0ZWdvcnktZWRpdC1tb2RhbCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgorCisgICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLWxnIj4KKworICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgICAgICAgICAgICA8aDMgaWQ9ImNhdGVnb3J5LWVkaXQtdGl0bGUiPjwvaDM+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CisgICAgICAgICAgICAgICAgPHM6Zm9ybSBhY3Rpb249ImNhdGVnb3J5RWRpdCIgaWQ9ImNhdGVnb3J5RWRpdEZvcm0iIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLWhvcml6b250YWwiPgorICAgICAgICAgICAgICAgICAgICA8czpoaWRkZW4gbmFtZT0ic2FsdCIvPgorICAgICAgICAgICAgICAgICAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIi8+CisgICAgICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJiZWFuLmlkIi8+CisKKyAgICAgICAgICAgICAgICAgICAgPCUtLSBhY3Rpb24gbmVlZGVkIGhlcmUgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgQUpBWCB0byBwb3N0IHRoaXMgZm9ybSAtLSU+CisgICAgICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJhY3Rpb246Y2F0ZWdvcnlFZGl0IXNhdmUiIHZhbHVlPSJzYXZlIi8+CisKKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4ubmFtZSIgbGFiZWw9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5uYW1lJyl9IiBtYXhsZW5ndGg9IjI1NSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2hhbmdlPSJ2YWxpZGF0ZUNhdGVnb3J5KCkiIG9ua2V5dXA9InZhbGlkYXRlQ2F0ZWdvcnkoKSIgLz4KKworICAgICAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5kZXNjcmlwdGlvbiIgbGFiZWw9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5kZXNjcmlwdGlvbicpfSIvPgorCisgICAgICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLmltYWdlIiBsYWJlbD0iJXtnZXRUZXh0KCdjYXRlZ29yeUZvcm0uaW1hZ2UnKX0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNoYW5nZT0idmFsaWRhdGVDYXRlZ29yeSgpIiBvbmtleXVwPSJ2YWxpZGF0ZUNhdGVnb3J5KCkiIC8+CisgICAgICAgICAgICAgICAgPC9zOmZvcm0+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KKyAgICAgICAgICAgICAgICA8cCBpZD0iZmVlZGJhY2stYXJlYS1lZGl0Ij48L3A+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJzdWJtaXRFZGl0ZWRDYXRlZ29yeSgpIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5Ij4KKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJnZW5lcmljLnNhdmUiLz4KKyAgICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+CisgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iZ2VuZXJpYy5jYW5jZWwiLz4KKyAgICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorPC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICB2YXIgZmVlZGJhY2tBcmVhRWRpdCA9ICQoIiNmZWVkYmFjay1hcmVhLWVkaXQiKTsKKworICAgIGZ1bmN0aW9uIHNob3dDYXRlZ29yeUVkaXRNb2RhbCggaWQsIG5hbWUsIGRlc2MsIGltYWdlICkgeworICAgICAgICBmZWVkYmFja0FyZWFFZGl0Lmh0bWwoIiIpOworICAgICAgICAkKCcjY2F0ZWdvcnktZWRpdC10aXRsZScpLmh0bWwoJzxzOnRleHQgbmFtZT0iY2F0ZWdvcnlGb3JtLmVkaXQudGl0bGUiIC8+Jyk7CisKKyAgICAgICAgJCgnI2NhdGVnb3J5RWRpdEZvcm1fYmVhbl9pZCcpLnZhbChpZCk7CisgICAgICAgICQoJyNjYXRlZ29yeUVkaXRGb3JtX2JlYW5fbmFtZScpLnZhbChuYW1lKTsKKyAgICAgICAgJCgnI2NhdGVnb3J5RWRpdEZvcm1fYmVhbl9kZXNjcmlwdGlvbicpLnZhbChkZXNjKTsKKyAgICAgICAgJCgnI2NhdGVnb3J5RWRpdEZvcm1fYmVhbl9pbWFnZScpLnZhbChpbWFnZSk7CisKKyAgICAgICAgJCgnI2NhdGVnb3J5LWVkaXQtbW9kYWwnKS5tb2RhbCh7c2hvdzogdHJ1ZX0pOworCisgICAgfQorCisgICAgZnVuY3Rpb24gdmFsaWRhdGVDYXRlZ29yeSgpIHsKKworICAgICAgICB2YXIgc2F2ZUNhdGVnb3J5QnV0dG9uID0gJCgnI2NhdGVnb3J5RWRpdEZvcm06Zmlyc3QnKTsKKworICAgICAgICB2YXIgY2F0ZWdvcnlOYW1lID0gJCgiI2NhdGVnb3J5RWRpdEZvcm1fYmVhbl9uYW1lIikudmFsKCk7CisgICAgICAgIHZhciBpbWFnZVVSTCA9ICQoIiNjYXRlZ29yeUVkaXRGb3JtX2JlYW5faW1hZ2UiKS52YWwoKTsKKworICAgICAgICBpZiAoIWNhdGVnb3J5TmFtZSB8fCBjYXRlZ29yeU5hbWUudHJpbSgpID09PSAnJykgeworICAgICAgICAgICAgc2F2ZUNhdGVnb3J5QnV0dG9uLmF0dHIoImRpc2FibGVkIiwgdHJ1ZSk7CisgICAgICAgICAgICBmZWVkYmFja0FyZWFFZGl0Lmh0bWwoJzxzOnRleHQgbmFtZT0iY2F0ZWdvcnlGb3JtLnJlcXVpcmVkRmllbGRzIiAvPicpOworICAgICAgICAgICAgZmVlZGJhY2tBcmVhRWRpdC5jc3MoImNvbG9yIiwgInJlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGltYWdlVVJMICYmIGltYWdlVVJMLnRyaW0oKSAhPT0gJycpIHsKKyAgICAgICAgICAgIGlmICghaXNWYWxpZFVybChpbWFnZVVSTCkpIHsKKyAgICAgICAgICAgICAgICBzYXZlQ2F0ZWdvcnlCdXR0b24uYXR0cigiZGlzYWJsZWQiLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBmZWVkYmFja0FyZWFFZGl0Lmh0bWwoJzxzOnRleHQgbmFtZT0iY2F0ZWdvcnlGb3JtLmJhZFVSTCIgLz4nKTsKKyAgICAgICAgICAgICAgICBmZWVkYmFja0FyZWFFZGl0LmNzcygiY29sb3IiLCAicmVkIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZmVlZGJhY2tBcmVhRWRpdC5odG1sKCcnKTsKKyAgICAgICAgc2F2ZUNhdGVnb3J5QnV0dG9uLmF0dHIoImRpc2FibGVkIiwgZmFsc2UpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN1Ym1pdEVkaXRlZENhdGVnb3J5KCkgeworCisgICAgICAgIC8vIGlmIG5hbWUgaXMgZW1wdHkgcmVqZWN0IGFuZCBzaG93IGVycm9yIG1lc3NhZ2UKKyAgICAgICAgaWYgKCQoIiNjYXRlZ29yeUVkaXRGb3JtX2JlYW5fbmFtZSIpLnZhbCgpLnRyaW0oKSA9PSAiIikgeworICAgICAgICAgICAgZmVlZGJhY2tBcmVhRWRpdC5odG1sKCc8czp0ZXh0IG5hbWU9ImNhdGVnb3J5Rm9ybS5yZXF1aXJlZEZpZWxkcyIgLz4nKTsKKyAgICAgICAgICAgIGZlZWRiYWNrQXJlYUVkaXQuY3NzKCJjb2xvciIsICJyZWQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHBvc3QgY2F0ZWdvcnkgdmlhIEFKQVgKKyAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgIG1ldGhvZDogJ3Bvc3QnLAorICAgICAgICAgICAgdXJsOiAiY2F0ZWdvcnlFZGl0IXNhdmUucm9sIiwKKyAgICAgICAgICAgIGRhdGE6ICQoIiNjYXRlZ29yeUVkaXRGb3JtIikuc2VyaWFsaXplKCksCisgICAgICAgICAgICBjb250ZXh0OiBkb2N1bWVudC5ib2R5CisKKyAgICAgICAgfSkuZG9uZShmdW5jdGlvbiAoZGF0YSkgeworCisgICAgICAgICAgICAvLyBrbHVkZ2U6IHNjcmFwZSByZXNwb25zZSBzdGF0dXMgZnJvbSBIVE1MIHJldHVybmVkIGJ5IFN0cnV0cworICAgICAgICAgICAgdmFyIGFsZXJ0RW5kID0gZGF0YS5pbmRleE9mKCJBTEVSVF9FTkQiKTsKKyAgICAgICAgICAgIHZhciBub3RVbmlxdWUgPSBkYXRhLmluZGV4T2YoJzxzOnRleHQgbmFtZT0iY2F0ZWdvcnlGb3JtLmVycm9yLmR1cGxpY2F0ZU5hbWUiIC8+Jyk7CisgICAgICAgICAgICBpZiAobm90VW5pcXVlID4gMCAmJiBub3RVbmlxdWUgPCBhbGVydEVuZCkgeworICAgICAgICAgICAgICAgIGZlZWRiYWNrQXJlYUVkaXQuY3NzKCJjb2xvciIsICJyZWQiKTsKKyAgICAgICAgICAgICAgICBmZWVkYmFja0FyZWFFZGl0Lmh0bWwoJzxzOnRleHQgbmFtZT0iY2F0ZWdvcnlGb3JtLmVycm9yLmR1cGxpY2F0ZU5hbWUiIC8+Jyk7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZmVlZGJhY2tBcmVhRWRpdC5jc3MoImNvbG9yIiwgImdyZWVuIik7CisgICAgICAgICAgICAgICAgZmVlZGJhY2tBcmVhRWRpdC5odG1sKCc8czp0ZXh0IG5hbWU9ImdlbmVyaWMuc3VjY2VzcyIgLz4nKTsKKyAgICAgICAgICAgICAgICAkKCcjY2F0ZWdvcnktZWRpdC1tb2RhbCcpLm1vZGFsKCJoaWRlIik7CisgICAgICAgICAgICAgICAgbG9jYXRpb24ucmVsb2FkKHRydWUpOworICAgICAgICAgICAgfQorCisgICAgICAgIH0pLmVycm9yKGZ1bmN0aW9uIChkYXRhKSB7CisgICAgICAgICAgICBmZWVkYmFja0FyZWFFZGl0Lmh0bWwoJzxzOnRleHQgbmFtZT0iZ2VuZXJpYy5lcnJvci5jaGVjay5sb2dzIiAvPicpOworICAgICAgICAgICAgZmVlZGJhY2tBcmVhRWRpdC5jc3MoImNvbG9yIiwgInJlZCIpOworICAgICAgICB9KTsKKyAgICB9CisKKzwvc2NyaXB0PgorCisKKzwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+Cis8JS0tIGRlbGV0ZSBjb25maXJtYXRpb24gbW9kYWwgLS0lPgorCis8ZGl2IGlkPSJkZWxldGUtY2F0ZWdvcnktbW9kYWwiIGNsYXNzPSJtb2RhbCBmYWRlIGRlbGV0ZS1jYXRlZ29yeS1tb2RhbCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgorCisgICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLWxnIj4KKworICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KKyAgICAgICAgICAgICAgICA8aDM+CisgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY2F0ZWdvcnlEZWxldGVPSy5yZW1vdmVDYXRlZ29yeSIvPjoKKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImNhdGVnb3J5LW5hbWUiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2gzPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgIDxzOmZvcm0gYWN0aW9uPSJjYXRlZ29yeVJlbW92ZSFyZW1vdmUiIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLWhvcml6b250YWwiPgorICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0Ii8+CisgICAgICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIvPgorICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJyZW1vdmVJZCIvPgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorCisgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImNhdGVnb3J5LWluLXVzZSIgY2xhc3M9ImFsZXJ0IGFsZXJ0LWRhbmdlciIgcm9sZT0iYWxlcnQiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjYXRlZ29yeURlbGV0ZU9LLndhcm5pbmdDYXRJblVzZSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY2F0ZWdvcnlEZWxldGVPSy55b3VNdXN0TW92ZUVudHJpZXMiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY2F0ZWdvcnlEZWxldGVPSy5tb3ZlVG9XaGVyZSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6c2VsZWN0IG5hbWU9InRhcmdldENhdGVnb3J5SWQiIGxpc3Q9ImFsbENhdGVnb3JpZXMiIGxpc3RLZXk9ImlkIiBsaXN0VmFsdWU9Im5hbWUiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iY2F0ZWdvcnktZW1wdHkiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHM6dGV4dCBuYW1lPSJjYXRlZ29yeURlbGV0ZU9LLm5vRW50cmllc0luQ2F0Ii8+PC9wPgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIDxwPiA8c3Ryb25nPjxzOnRleHQgbmFtZT0iY2F0ZWdvcnlEZWxldGVPSy5hcmVZb3VTdXJlIi8+PC9zdHJvbmc+IDwvcD4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CisgICAgICAgICAgICAgICAgICAgIDxzOnN1Ym1pdCBjc3NDbGFzcz0iYnRuIGJ0bi1kYW5nZXIiIHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMueWVzJyl9Ii8+Jm5ic3A7CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiBkYXRhLWRpc21pc3M9Im1vZGFsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iZ2VuZXJpYy5ubyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CisgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgIDwvczpmb3JtPgorCisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorPC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBmdW5jdGlvbiBzaG93Q2F0ZWdvcnlEZWxldGVNb2RhbCggaWQsIG5hbWUsIGluVXNlICkgeworICAgICAgICAkKCcjY2F0ZWdvcnlSZW1vdmVfcmVtb3ZlSWQnKS52YWwoaWQpOworICAgICAgICAkKCcjY2F0ZWdvcnlFZGl0X2JlYW5fbmFtZScpLnZhbChuYW1lKTsKKyAgICAgICAgJCgnI2NhdGVnb3J5LW5hbWUnKS5odG1sKG5hbWUpOworICAgICAgICBpZiAoIGluVXNlICkgeworICAgICAgICAgICAgJCgnI2NhdGVnb3J5LWluLXVzZScpLmNzcygnZGlzcGxheScsJ2Jsb2NrJyk7CisgICAgICAgICAgICAkKCcjY2F0ZWdvcnktZW10cHknKS5jc3MoJ2Rpc3BsYXknLCAnbm9uZScpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCgnI2NhdGVnb3J5LWluLXVzZScpLmNzcygnZGlzcGxheScsICdub25lJyk7CisgICAgICAgICAgICAkKCcjY2F0ZWdvcnktZW10cHknKS5jc3MoJ2Rpc3BsYXknLCAnYmxvY2snKTsKKyAgICAgICAgfQorICAgICAgICAkKCcjZGVsZXRlLWNhdGVnb3J5LW1vZGFsJykubW9kYWwoe3Nob3c6IHRydWV9KTsKKyAgICB9CisKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0NhdGVnb3JpZXNTaWRlYmFyLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9DYXRlZ29yaWVzU2lkZWJhci5qc3AKaW5kZXggMjYxZTg5Yy4uY2E0YjM0YSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0NhdGVnb3JpZXNTaWRlYmFyLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvQ2F0ZWdvcmllc1NpZGViYXIuanNwCkBAIC0xNywyNiArMTcsMzkgQEAKIC0tJT4KIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KIAotPGRpdiBjbGFzcz0ic2lkZWJhckZhZGUiPgotICAgIDxkaXYgY2xhc3M9Im1lbnUtdHIiPgotICAgICAgICA8ZGl2IGNsYXNzPSJtZW51LXRsIj4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhcklubmVyIj4KLSAgICAgICAgICAgICAgICA8aDM+PHM6dGV4dCBuYW1lPSJtYWluUGFnZS5hY3Rpb25zIiAvPjwvaDM+Ci0gICAgICAgICAgICAgICAgPGhyIHNpemU9IjEiIG5vc2hhZGU9Im5vc2hhZGUiIC8+Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICAgIDwlLS0gQWRkIENhdGVnb3J5IGxpbmsgLS0lPgotICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0nPHM6dXJsIHZhbHVlPSIvaW1hZ2VzL2ZvbGRlcl9hZGQucG5nIi8+JyBib3JkZXI9IjAiYWx0PSJpY29uIiAvPgotICAgICAgICAgICAgICAgICAgICA8czp1cmwgdmFyPSJhZGRDYXRlZ29yeSIgYWN0aW9uPSJjYXRlZ29yeUFkZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIle2FjdGlvbldlYmxvZy5oYW5kbGV9IiAvPgotICAgICAgICAgICAgICAgICAgICA8L3M6dXJsPgotICAgICAgICAgICAgICAgICAgICA8czphIGhyZWY9IiV7YWRkQ2F0ZWdvcnl9Ij48czp0ZXh0IG5hbWU9ImNhdGVnb3JpZXNGb3JtLmFkZENhdGVnb3J5IiAvPjwvczphPgotICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgCi0gICAgICAgIDwvZGl2PgotICAgIDwvZGl2PgotPC9kaXY+Cis8aDM+PHM6dGV4dCBuYW1lPSJtYWluUGFnZS5hY3Rpb25zIi8+PC9oMz4KKzxociBzaXplPSIxIiBub3NoYWRlPSJub3NoYWRlIi8+CisKKzxwPgorICAgIDxzOnNldCB2YXI9ImNhdGVnb3J5SWQiIHZhbHVlPSIjYmVhbi5pZCIvPgorICAgIDxzOnNldCB2YXI9ImNhdGVnb3J5TmFtZSIgdmFsdWU9IiNwb3N0Lm5hbWUiLz4KKyAgICA8czpzZXQgdmFyPSJjYXRlZ29yeURlc2MiIHZhbHVlPSIjcG9zdC5kZXNjcmlwdGlvbiIvPgorICAgIDxzOnNldCB2YXI9ImNhdGVnb3J5SW1hZ2UiIHZhbHVlPSIjcG9zdC5pbWFnZSIvPgorCisgICAgPGEgaHJlZj0iIyIgb25jbGljaz0ic2hvd0NhdGVnb3J5QWRkTW9kYWwoKSI+CisgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXBsdXMiPjwvc3Bhbj4KKyAgICAgICAgPHM6dGV4dCBuYW1lPSJjYXRlZ29yaWVzRm9ybS5hZGRDYXRlZ29yeSIvPgorICAgIDwvYT4KKzwvcD4KKworPHNjcmlwdD4KKworICAgIHZhciBmZWVkYmFja0FyZWEgPSAkKCIjZmVlZGJhY2stYXJlYSIpOworCisgICAgZnVuY3Rpb24gc2hvd0NhdGVnb3J5QWRkTW9kYWwoKSB7CisKKyAgICAgICAgZmVlZGJhY2tBcmVhRWRpdC5odG1sKCIiKTsKKyAgICAgICAgJCgnI2NhdGVnb3J5LWVkaXQtdGl0bGUnKS5odG1sKCc8czp0ZXh0IG5hbWU9ImNhdGVnb3J5Rm9ybS5hZGQudGl0bGUiIC8+Jyk7CisKKyAgICAgICAgJCgnI2NhdGVnb3J5RWRpdEZvcm1fYmVhbl9pZCcpLnZhbCgiIik7CisgICAgICAgICQoJyNjYXRlZ29yeUVkaXRGb3JtX2JlYW5fbmFtZScpLnZhbCgiIik7CisgICAgICAgICQoJyNjYXRlZ29yeUVkaXRGb3JtX2JlYW5fZGVzY3JpcHRpb24nKS52YWwoIiIpOworICAgICAgICAkKCcjY2F0ZWdvcnlFZGl0Rm9ybV9iZWFuX2ltYWdlJykudmFsKCIiKTsKKworICAgICAgICB2YWxpZGF0ZUNhdGVnb3J5KCk7CisKKyAgICAgICAgJCgnI2NhdGVnb3J5LWVkaXQtbW9kYWwnKS5tb2RhbCh7c2hvdzogdHJ1ZX0pOworICAgIH0KKworPC9zY3JpcHQ+CisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9DYXRlZ29yeUVkaXQuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0NhdGVnb3J5RWRpdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1N2M1OWEuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0NhdGVnb3J5RWRpdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi08JS0tCi0gIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQotICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91Ci0gIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAotICB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotCi0gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLQotICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nCi0gIGNvcHlyaWdodCBpbiB0aGlzIHdvcmssIHBsZWFzZSBzZWUgdGhlIE5PVElDRSBmaWxlIGluIHRoZSB0b3AgbGV2ZWwKLSAgZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgotLS0lPgotPCVAIGluY2x1ZGUgZmlsZT0iL1dFQi1JTkYvanNwcy90YWdsaWJzLXN0cnV0czIuanNwIiAlPgotCi08JS0tIFRpdGxpbmcsIHByb2Nlc3NpbmcgYWN0aW9ucyBkaWZmZXJlbnQgYmV0d2VlbiBhZGQgYW5kIGVkaXQgLS0lPgotPHM6aWYgdGVzdD0iYWN0aW9uTmFtZSA9PSAnY2F0ZWdvcnlFZGl0JyI+Ci0gICAgPHM6c2V0IHZhcj0ic3VidGl0bGVLZXkiPmNhdGVnb3J5Rm9ybS5lZGl0LnN1YnRpdGxlPC9zOnNldD4KLSAgICA8czpzZXQgdmFyPSJtYWluQWN0aW9uIj5jYXRlZ29yeUVkaXQ8L3M6c2V0PgotPC9zOmlmPgotPHM6ZWxzZT4KLSAgICA8czpzZXQgdmFyPSJzdWJ0aXRsZUtleSI+Y2F0ZWdvcnlGb3JtLmFkZC5zdWJ0aXRsZTwvczpzZXQ+Ci0gICAgPHM6c2V0IHZhcj0ibWFpbkFjdGlvbiI+Y2F0ZWdvcnlBZGQ8L3M6c2V0PgotPC9zOmVsc2U+Ci0KLTxwIGNsYXNzPSJzdWJ0aXRsZSI+Ci0gICAgPHM6dGV4dCBuYW1lPSIleyNzdWJ0aXRsZUtleX0iIC8+Ci08L3A+Ci0KLTxwIGNsYXNzPSJwYWdldGlwIj4KLSAgICA8czp0ZXh0IG5hbWU9ImNhdGVnb3J5Rm9ybS5yZXF1aXJlZEZpZWxkcyI+Ci0gICAgICAgIDxzOnBhcmFtPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5uYW1lIi8+PC9zOnBhcmFtPgotICAgIDwvczp0ZXh0PgotPC9wPgotCi08czpmb3JtIGFjdGlvbj0iY2F0ZWdvcnlFZGl0IXNhdmUiPgotICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgotICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciIC8+Ci0gICAgPHM6aWYgdGVzdD0iYWN0aW9uTmFtZSA9PSAnY2F0ZWdvcnlFZGl0JyI+Ci0gICAgICAgIDwlLS0gYmVhbiBmb3IgYWRkIGRvZXMgbm90IGhhdmUgYSBiZWFuIGlkIHlldCAtLSU+Ci0gICAgICAgIDxzOmhpZGRlbiBuYW1lPSJiZWFuLmlkIiAvPgotICAgIDwvczppZj4KLQotICAgIDx0YWJsZT4KLSAgICAgICAgCi0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZD48czp0ZXh0IG5hbWU9ImdlbmVyaWMubmFtZSIgLz48L3RkPgotICAgICAgICAgICAgPHRkPjxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLm5hbWUiIHNpemU9IjcwIiBtYXhsZW5ndGg9IjI1NSIgc3R5bGU9IndpZHRoOjUwJSIvPjwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICAgIAotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQ+PHM6dGV4dCBuYW1lPSJnZW5lcmljLmRlc2NyaXB0aW9uIiAvPjwvdGQ+Ci0gICAgICAgICAgICA8dGQ+PHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uZGVzY3JpcHRpb24iIHNpemU9IjEyMCIgc3R5bGU9IndpZHRoOjUwJSIvPjwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0KLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkPjxzOnRleHQgbmFtZT0iY2F0ZWdvcnlGb3JtLmltYWdlIiAvPjwvdGQ+Ci0gICAgICAgICAgICA8dGQ+PHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uaW1hZ2UiIHNpemU9IjEyMCIgc3R5bGU9IndpZHRoOjUwJSIvPjwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0KLSAgICA8L3RhYmxlPgotICAgIAotICAgIDxwPgotICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5zYXZlJyl9IiBhY3Rpb249IiV7I21haW5BY3Rpb259IXNhdmUiLz4KLSAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMuY2FuY2VsJyl9IiBhY3Rpb249ImNhdGVnb3J5RWRpdCFjYW5jZWwiIC8+Ci0gICAgPC9wPgotICAgIAotPC9zOmZvcm0+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvQ2F0ZWdvcnlSZW1vdmUuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0NhdGVnb3J5UmVtb3ZlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNkYTA3NS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvQ2F0ZWdvcnlSZW1vdmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotPCUtLQotICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLSAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdQotICB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKLSAgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZwotICBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCi0gIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KLS0tJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KLQotPGgzPgotICAgIDxzOnRleHQgbmFtZT0iY2F0ZWdvcnlEZWxldGVPSy5yZW1vdmVDYXRlZ29yeSIgLz4KLSAgICBbPHM6cHJvcGVydHkgdmFsdWU9ImNhdGVnb3J5Lm5hbWUiIC8+XQotPC9oMz4KLQotPHM6Zm9ybSBhY3Rpb249ImNhdGVnb3J5UmVtb3ZlIXJlbW92ZSI+Ci0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgLz4KLSAgICA8czpoaWRkZW4gbmFtZT0icmVtb3ZlSWQiIC8+Ci0KLSAgICA8czppZiB0ZXN0PSJjYXRlZ29yeS5pblVzZSIgPgotICAgICAgICA8YnIgLz4KLSAgICAgICAgPHNwYW4gY2xhc3M9Indhcm5pbmciPgotICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjYXRlZ29yeURlbGV0ZU9LLndhcm5pbmdDYXRJblVzZSIgLz4KLSAgICAgICAgPC9zcGFuPgotICAgICAgICA8cD48czp0ZXh0IG5hbWU9ImNhdGVnb3J5RGVsZXRlT0sueW91TXVzdE1vdmVFbnRyaWVzIiAvPjxwPgotICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjYXRlZ29yeURlbGV0ZU9LLm1vdmVUb1doZXJlIiAvPgotICAgICAgICAgICAgPHM6c2VsZWN0IG5hbWU9InRhcmdldENhdGVnb3J5SWQiIGxpc3Q9ImFsbENhdGVnb3JpZXMiIGxpc3RLZXk9ImlkIiBsaXN0VmFsdWU9Im5hbWUiIC8+Ci0gICAgICAgIDwvcD4KLSAgICA8L3M6aWY+Ci0gICAgPHM6ZWxzZT4KLSAgICAgICAgPHA+PHM6dGV4dCBuYW1lPSJjYXRlZ29yeURlbGV0ZU9LLm5vRW50cmllc0luQ2F0IiAvPjwvcD4KLSAgICA8L3M6ZWxzZT4KLSAgICAKLSAgICA8cD4KLSAgICAgICAgPHN0cm9uZz48czp0ZXh0IG5hbWU9ImNhdGVnb3J5RGVsZXRlT0suYXJlWW91U3VyZSIgLz48L3N0cm9uZz4KLSAgICA8L3A+Ci0gICAgCi0gICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMueWVzJyl9IiAvPiZuYnNwOwotICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLm5vJyl9IiBhY3Rpb249ImNhdGVnb3J5UmVtb3ZlIWNhbmNlbCIgLz4KLSAgICAKLTwvczpmb3JtPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0NvbW1lbnRzLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9Db21tZW50cy5qc3AKaW5kZXggOTI5ZDcyZS4uN2EzMjliOSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0NvbW1lbnRzLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvQ29tbWVudHMuanNwCkBAIC0xNyw4ICsxNyw4IEBACiAtLSU+CiA8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+CiA8JUAgdGFnbGliIHByZWZpeD0iZm4iIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc3AvanN0bC9mdW5jdGlvbnMiICU+Ci08c2NyaXB0IHNyYz0iPHM6dXJsIHZhbHVlPSIvcm9sbGVyLXVpL3NjcmlwdHMvanF1ZXJ5LTIuMS4xLm1pbi5qcyIgLz4iPjwvc2NyaXB0PgogCis8JS0tIGFyZSB3ZSBvbiBhIGJsb2cncyBjb21tZW50IG1hbmFnZW1lbnQgcGFnZSBvciB0aGUgZ2xvYmFsIGFkbWluJ3MgY29tbWVudCBtYW5hZ2VtZW50IHBhZ2U/IC0tJT4KIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2NvbW1lbnRzJyI+CiAgICAgPHM6c2V0IHZhcj0ibWFpbkFjdGlvbiI+Y29tbWVudHM8L3M6c2V0PgogPC9zOmlmPgpAQCAtMjYsMzYgKzI2LDYgQEAKICAgICA8czpzZXQgdmFyPSJtYWluQWN0aW9uIj5nbG9iYWxDb21tZW50TWFuYWdlbWVudDwvczpzZXQ+CiA8L3M6ZWxzZT4KIAotPHNjcmlwdD4KLTxzOmlmIHRlc3Q9InBhZ2VyLml0ZW1zICE9IG51bGwiPgotICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7Ci0gICAgICAgICQoJyNjaGVja2FsbGFwcHJvdmVkJykuY2xpY2soZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0b2dnbGVGdW5jdGlvbih0cnVlLCJiZWFuLmFwcHJvdmVkQ29tbWVudHMiKTsKLSAgICAgICAgfSk7Ci0gICAgICAgICQoJyNjbGVhcmFsbGFwcHJvdmVkJykuY2xpY2soZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0b2dnbGVGdW5jdGlvbihmYWxzZSwiYmVhbi5hcHByb3ZlZENvbW1lbnRzIik7Ci0gICAgICAgIH0pOwotICAgICAgICAkKCcjY2hlY2thbGxzcGFtJykuY2xpY2soZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB0b2dnbGVGdW5jdGlvbih0cnVlLCJiZWFuLnNwYW1Db21tZW50cyIpOwotICAgICAgICB9KTsKLSAgICAgICAgJCgnI2NsZWFyYWxsc3BhbScpLmNsaWNrKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdG9nZ2xlRnVuY3Rpb24oZmFsc2UsImJlYW4uc3BhbUNvbW1lbnRzIik7Ci0gICAgICAgIH0pOwotICAgICAgICAkKCcjY2hlY2thbGxkZWxldGUnKS5jbGljayhmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHRvZ2dsZUZ1bmN0aW9uKHRydWUsImJlYW4uZGVsZXRlQ29tbWVudHMiKTsKLSAgICAgICAgfSk7Ci0gICAgICAgICQoJyNjbGVhcmFsbGRlbGV0ZScpLmNsaWNrKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdG9nZ2xlRnVuY3Rpb24oZmFsc2UsImJlYW4uZGVsZXRlQ29tbWVudHMiKTsKLSAgICAgICAgfSk7Ci0gICAgfSk7Ci08L3M6aWY+Ci0gICAgZnVuY3Rpb24gYnVsa0RlbGV0ZSgpIHsKLSAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKCc8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LmNvbmZpcm1CdWxrRGVsZXRlIj48czpwYXJhbSB2YWx1ZT0iYnVsa0RlbGV0ZUNvdW50IiAvPjwvczp0ZXh0PicpKSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5jb21tZW50UXVlcnlGb3JtLm1ldGhvZC52YWx1ZSA9ICJidWxrRGVsZXRlIjsKLSAgICAgICAgICAgIGRvY3VtZW50LmNvbW1lbnRRdWVyeUZvcm0uc3VibWl0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci08L3NjcmlwdD4KIAogPHAgY2xhc3M9InN1YnRpdGxlIj4KICAgICA8czppZiB0ZXN0PSJhY3Rpb25OYW1lID09ICdjb21tZW50cyciPgpAQCAtNzEsMzA2ICs0MSwzNzIgQEAKICAgICAgICAgPC9zOmVsc2U+CiAgICAgPC9zOmlmPgogICAgIDxzOmVsc2U+Ci0gICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuc3VidGl0bGUiIC8+CisgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuc3VidGl0bGUiLz4KICAgICA8L3M6ZWxzZT4KIDwvcD4KIAogPHM6aWYgdGVzdD0icGFnZXIuaXRlbXMuaXNFbXB0eSI+Ci0gICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5ub0NvbW1lbnRzRm91bmQiIC8+CisgICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5ub0NvbW1lbnRzRm91bmQiLz4KIDwvczppZj4KIDxzOmVsc2U+CiAgICAgPHAgY2xhc3M9InBhZ2V0aXAiPgogICAgICAgICA8czppZiB0ZXN0PSJhY3Rpb25OYW1lID09ICdjb21tZW50cyciPgotICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC50aXAiIC8+CisgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LnRpcCIvPgogICAgICAgICA8L3M6aWY+CiAgICAgICAgIDxzOmVsc2U+Ci0gICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50Lmdsb2JhbFRpcCIgLz4KKyAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuZ2xvYmFsVGlwIi8+CiAgICAgICAgIDwvczplbHNlPgogICAgIDwvcD4KIAotPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KLTwlLS0gQ29tbWVudCB0YWJsZSAvIGZvcm0gd2l0aCBjaGVja2JveGVzIC0tJT4KLTwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKyAgICA8JS0tIENvbW1lbnQgdGFibGUgLyBmb3JtIHdpdGggY2hlY2tib3hlcyAtLSU+CiAKLTxzOmZvcm0gYWN0aW9uPSIleyNtYWluQWN0aW9ufSF1cGRhdGUiPgotICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgotICAgIDxzOmhpZGRlbiBuYW1lPSJiZWFuLmlkcyIgLz4KLSAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5zdGFydERhdGVTdHJpbmciIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4uZW5kRGF0ZVN0cmluZyIgLz4KLSAgICA8czppZiB0ZXN0PSJhY3Rpb25OYW1lID09ICdjb21tZW50cyciPgotICAgICAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5lbnRyeUlkIiAvPgotICAgICAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5zZWFyY2hTdHJpbmciIC8+Ci0gICAgICAgIDxzOmhpZGRlbiBuYW1lPSJiZWFuLmFwcHJvdmVkU3RyaW5nIiAvPgotICAgICAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIiAvPgotICAgIDwvczppZj4KLSAgICA8czplbHNlPgotICAgICAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5vZmZzZXQiIC8+Ci0gICAgICAgIDxzOmhpZGRlbiBuYW1lPSJiZWFuLmNvdW50IiAvPgotICAgICAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5wZW5kaW5nU3RyaW5nIiAvPgotICAgIDwvczplbHNlPgorICAgIDxzOmZvcm0gYWN0aW9uPSIleyNtYWluQWN0aW9ufSF1cGRhdGUiPgorICAgICAgICA8czpoaWRkZW4gbmFtZT0ic2FsdCIvPgorICAgICAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5pZHMiLz4KKyAgICAgICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4uc3RhcnREYXRlU3RyaW5nIi8+CisgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJiZWFuLmVuZERhdGVTdHJpbmciLz4KKyAgICAgICAgPHM6aWYgdGVzdD0iYWN0aW9uTmFtZSA9PSAnY29tbWVudHMnIj4KKyAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJiZWFuLmVudHJ5SWQiLz4KKyAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJiZWFuLnNlYXJjaFN0cmluZyIvPgorICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4uYXBwcm92ZWRTdHJpbmciLz4KKyAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciLz4KKyAgICAgICAgPC9zOmlmPgorICAgICAgICA8czplbHNlPgorICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4ub2Zmc2V0Ii8+CisgICAgICAgICAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5jb3VudCIvPgorICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4ucGVuZGluZ1N0cmluZyIvPgorICAgICAgICA8L3M6ZWxzZT4KIAogCi08JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgotPCUtLSBOdW1iZXIgb2YgY29tbWVudHMgYW5kIGRhdGUgbWVzc2FnZSAtLSU+Ci08JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorICAgICAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorICAgICAgICA8JS0tIE51bWJlciBvZiBjb21tZW50cyBhbmQgZGF0ZSBtZXNzYWdlIC0tJT4KIAogICAgICAgICA8ZGl2IGNsYXNzPSJ0YWJsZW5hdiI+CiAKICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZsb2F0OmxlZnQ7Ij4KICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50Lm5vd1Nob3dpbmciPgotICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0icGFnZXIuaXRlbXMuc2l6ZSgpIiAvPgorICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0icGFnZXIuaXRlbXMuc2l6ZSgpIi8+CiAgICAgICAgICAgICAgICAgPC9zOnRleHQ+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0OyI+CiAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iZmlyc3RDb21tZW50LnBvc3RUaW1lICE9IG51bGwiPgogICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LmRhdGUudG9TdHJpbmdGb3JtYXQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9ImZpcnN0Q29tbWVudC5wb3N0VGltZSIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIHZhbHVlPSJmaXJzdENvbW1lbnQucG9zdFRpbWUiLz4KICAgICAgICAgICAgICAgICAgICAgPC9zOnRleHQ+CiAgICAgICAgICAgICAgICAgPC9zOmlmPgogICAgICAgICAgICAgICAgIC0tLQogICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9Imxhc3RDb21tZW50LnBvc3RUaW1lICE9IG51bGwiPgogICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LmRhdGUudG9TdHJpbmdGb3JtYXQiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9Imxhc3RDb21tZW50LnBvc3RUaW1lIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9Imxhc3RDb21tZW50LnBvc3RUaW1lIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvczp0ZXh0PgogICAgICAgICAgICAgICAgIDwvczppZj4KICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPGJyIC8+CisgICAgICAgICAgICA8YnIvPgogCiAKLSAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgotICAgIDwlLS0gTmV4dCAvIHByZXZpb3VzIGxpbmtzIC0tJT4KLSAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorICAgICAgICAgICAgICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisgICAgICAgICAgICAgICAgPCUtLSBOZXh0IC8gcHJldmlvdXMgbGlua3MgLS0lPgogCi0gICAgICAgICAgICA8czppZiB0ZXN0PSJwYWdlci5wcmV2TGluayAhPSBudWxsICYmIHBhZ2VyLm5leHRMaW5rICE9IG51bGwiPgotICAgICAgICAgICAgICAgIDxiciAvPjxjZW50ZXI+Ci0gICAgICAgICAgICAgICAgICAgICZsYXF1bzsKLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0nPHM6cHJvcGVydHkgdmFsdWU9InBhZ2VyLnByZXZMaW5rIiAvPic+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQucHJldiIgLz48L2E+Ci0gICAgICAgICAgICAgICAgICAgIHwgPGEgaHJlZj0nPHM6cHJvcGVydHkgdmFsdWU9InBhZ2VyLm5leHRMaW5rIiAvPic+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQubmV4dCIgLz48L2E+Ci0gICAgICAgICAgICAgICAgICAgICZyYXF1bzsKLSAgICAgICAgICAgICAgICA8L2NlbnRlcj48YnIgLz4KLSAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgIDxzOmVsc2VpZiB0ZXN0PSJwYWdlci5wcmV2TGluayAhPSBudWxsIj4KLSAgICAgICAgICAgICAgICA8YnIgLz48Y2VudGVyPgotICAgICAgICAgICAgICAgICAgICAmbGFxdW87Ci0gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9JzxzOnByb3BlcnR5IHZhbHVlPSJwYWdlci5wcmV2TGluayIgLz4nPgotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LnByZXYiIC8+PC9hPgotICAgICAgICAgICAgICAgICAgICB8IDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQubmV4dCIgLz4KLSAgICAgICAgICAgICAgICAgICAgJnJhcXVvOwotICAgICAgICAgICAgICAgIDwvY2VudGVyPjxiciAvPgotICAgICAgICAgICAgPC9zOmVsc2VpZj4KLSAgICAgICAgICAgIDxzOmVsc2VpZiB0ZXN0PSJwYWdlci5uZXh0TGluayAhPSBudWxsIj4KLSAgICAgICAgICAgICAgICA8YnIgLz48Y2VudGVyPgotICAgICAgICAgICAgICAgICAgICAmbGFxdW87Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQucHJldiIgLz4KLSAgICAgICAgICAgICAgICAgICAgfCA8YSBjbGFzcz0iIiBocmVmPSc8czpwcm9wZXJ0eSB2YWx1ZT0icGFnZXIubmV4dExpbmsiIC8+Jz4KLSAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5uZXh0IiAvPjwvYT4KLSAgICAgICAgICAgICAgICAgICAgJnJhcXVvOwotICAgICAgICAgICAgICAgIDwvY2VudGVyPjxiciAvPgotICAgICAgICAgICAgPC9zOmVsc2VpZj4KLSAgICAgICAgICAgIDxzOmVsc2U+PGJyIC8+PC9zOmVsc2U+CisgICAgICAgICAgICA8bmF2PgorICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0icGFnZXIiPgorICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJwYWdlci5wcmV2TGluayAhPSBudWxsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0icHJldmlvdXMiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9JzxzOnByb3BlcnR5IHZhbHVlPSJwYWdlci5wcmV2TGluayIgLz4nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JmxhcnI7PC9zcGFuPk5ld2VyPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgorICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJwYWdlci5uZXh0TGluayAhPSBudWxsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibmV4dCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0nPHM6cHJvcGVydHkgdmFsdWU9InBhZ2VyLm5leHRMaW5rIi8+Jz5PbGRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnJhcnI7PC9zcGFuPjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICAgIDwvczppZj4KKyAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgPC9uYXY+CiAKICAgICAgICAgPC9kaXY+IDwlLS0gY2xhc3M9InRhYmxlbmF2IiAtLSU+CiAKIAotPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KLTwlLS0gQnVsayBjb21tZW50IGRlbGV0ZSBsaW5rIC0tJT4KLTwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisgICAgICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisgICAgICAgIDwlLS0gQnVsayBjb21tZW50IGRlbGV0ZSBsaW5rIC0tJT4KKyAgICAgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KIAogICAgICAgICA8czppZiB0ZXN0PSJidWxrRGVsZXRlQ291bnQgPiAwIj4KICAgICAgICAgICAgIDxwPgogICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuYnVsa0RlbGV0ZVByb21wdDEiPgotICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0iYnVsa0RlbGV0ZUNvdW50IiAvPgorICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0iYnVsa0RlbGV0ZUNvdW50Ii8+CiAgICAgICAgICAgICAgICAgPC9zOnRleHQ+CiAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgb25jbGljaz0iYnVsa0RlbGV0ZSgpIj4KLSAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5idWxrRGVsZXRlUHJvbXB0MiIgLz4KKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5idWxrRGVsZXRlUHJvbXB0MiIvPgogICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgIDwvcD4KICAgICAgICAgPC9zOmlmPgogCisgICAgICAgIDx0YWJsZSBjbGFzcz0icm9sbGVydGFibGUgdGFibGUgdGFibGUtc3RyaXBlZCIgd2lkdGg9IjEwMCUiPgogCi0gICAgICAgIDx0YWJsZSBjbGFzcz0icm9sbGVydGFibGUiIHdpZHRoPSIxMDAlIj4KLQotICAgICAgICAgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+Ci0gICAgICAgICAgICA8JS0tIENvbW1lbnQgdGFibGUgaGVhZGVyIC0tJT4KKyAgICAgICAgICAgICAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKyAgICAgICAgICAgICAgICA8JS0tIENvbW1lbnQgdGFibGUgaGVhZGVyIC0tJT4KIAogICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2NvbW1lbnRzJyI+CiAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz0icm9sbGVydGFibGUiIHdpZHRoPSI1JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LmNvbHVtbkFwcHJvdmVkIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5jb2x1bW5BcHByb3ZlZCIvPgogICAgICAgICAgICAgICAgICAgICA8L3RoPgogICAgICAgICAgICAgICAgIDwvczppZj4KICAgICAgICAgICAgICAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iNSUiPgotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LmNvbHVtblNwYW0iIC8+CisgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuY29sdW1uU3BhbSIvPgogICAgICAgICAgICAgICAgIDwvdGg+Ci0gICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSIgd2lkdGg9IjUlIiA+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iZ2VuZXJpYy5kZWxldGUiIC8+CisgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSIgd2lkdGg9IjUlIj4KKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJnZW5lcmljLmRlbGV0ZSIvPgogICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSI+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuY29sdW1uQ29tbWVudCIgLz4KKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5jb2x1bW5Db21tZW50Ii8+CiAgICAgICAgICAgICAgICAgPC90aD4KICAgICAgICAgICAgIDwvdHI+CiAKLSAgICAgICAgICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgotICAgICAgICAgICAgPCUtLSBTZWxlY3QgQUxMIGFuZCBOT05FIGJ1dHRvbnMgLS0lPgorICAgICAgICAgICAgICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorICAgICAgICAgICAgICAgIDwlLS0gU2VsZWN0IEFMTCBhbmQgTk9ORSBidXR0b25zIC0tJT4KIAogICAgICAgICAgICAgPHRyIGNsYXNzPSJhY3Rpb25yb3ciPgogICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2NvbW1lbnRzJyI+CiAgICAgICAgICAgICAgICAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuc2VsZWN0IiAvPjxici8+CisgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LnNlbGVjdCIvPjxici8+CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJjaGVja2FsbGFwcHJvdmVkIj48YSBocmVmPSIjIj48czp0ZXh0IG5hbWU9ImdlbmVyaWMuYWxsIiAvPjwvYT48L3NwYW4+PGJyIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iY2xlYXJhbGxhcHByb3ZlZCI+PGEgaHJlZj0iIyI+PHM6dGV4dCBuYW1lPSJnZW5lcmljLm5vbmUiIC8+PC9hPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJjaGVja2FsbGFwcHJvdmVkIj48YSBocmVmPSIjIj48czp0ZXh0IG5hbWU9ImdlbmVyaWMuYWxsIi8+PC9hPjwvc3Bhbj48YnIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImNsZWFyYWxsYXBwcm92ZWQiPjxhIGhyZWY9IiMiPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5ub25lIi8+PC9hPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICA8L3M6aWY+CiAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiPgotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LnNlbGVjdCIgLz48YnIvPgorICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LnNlbGVjdCIvPjxici8+CiAKLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImNoZWNrYWxsc3BhbSI+PGEgaHJlZj0iIyI+PHM6dGV4dCBuYW1lPSJnZW5lcmljLmFsbCIgLz48L2E+PC9zcGFuPjxiciAvPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iY2xlYXJhbGxzcGFtIj48YSBocmVmPSIjIj48czp0ZXh0IG5hbWU9ImdlbmVyaWMubm9uZSIgLz48L2E+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iY2hlY2thbGxzcGFtIj48YSBocmVmPSIjIj48czp0ZXh0IG5hbWU9ImdlbmVyaWMuYWxsIi8+PC9hPjwvc3Bhbj48YnIvPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iY2xlYXJhbGxzcGFtIj48YSBocmVmPSIjIj48czp0ZXh0IG5hbWU9ImdlbmVyaWMubm9uZSIvPjwvYT48L3NwYW4+CiAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciI+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuc2VsZWN0IiAvPjxici8+CisgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuc2VsZWN0Ii8+PGJyLz4KIAotICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iY2hlY2thbGxkZWxldGUiPjxhIGhyZWY9IiMiPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5hbGwiIC8+PC9hPjwvc3Bhbj48YnIgLz4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImNsZWFyYWxsZGVsZXRlIj48YSBocmVmPSIjIj48czp0ZXh0IG5hbWU9ImdlbmVyaWMubm9uZSIgLz48L2E+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0iY2hlY2thbGxkZWxldGUiPjxhIGhyZWY9IiMiPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5hbGwiLz48L2E+PC9zcGFuPjxici8+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJjbGVhcmFsbGRlbGV0ZSI+PGEgaHJlZj0iIyI+PHM6dGV4dCBuYW1lPSJnZW5lcmljLm5vbmUiLz48L2E+PC9zcGFuPgogICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgPHRkIGFsaWduPSJyaWdodCI+Ci0gICAgICAgICAgICAgICAgICAgIDxiciAvPgorICAgICAgICAgICAgICAgICAgICA8YnIvPgogICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icGVuZGluZ0NvbW1lbnRCb3giPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5wZW5kaW5nIiAvPiZuYnNwOyZuYnNwOworICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LnBlbmRpbmciLz4mbmJzcDsmbmJzcDsKICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwYW1Db21tZW50Qm94Ij4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuc3BhbSIgLz4mbmJzcDsmbmJzcDsKKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5zcGFtIi8+Jm5ic3A7Jm5ic3A7CiAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgIDwvdHI+CiAKIAotICAgICAgICAgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgotPCUtLSBMb29wIHRocm91Z2ggY29tbWVudHMgLS0lPgotPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorICAgICAgICAgICAgICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKyAgICAgICAgICAgICAgICA8JS0tIExvb3AgdGhyb3VnaCBjb21tZW50cyAtLSU+CisKKyAgICAgICAgICAgICAgICA8JS0tIGl0IGlzIGEgYml0IGZ1bmt5IHRvIHVzZSBjaGVja2JveCBsaXN0IGhlcmUsIGJ1dCB1c2luZyBjaGVja2JveCBkaWRuJ3Qgd29yayBmb3IgbWUgOiggCisgICAgICAgICAgICAgICAgd2UgYXJlIGVmZmVjdGl2ZWx5IGp1c3QgY3JlYXRpbmcgYSBjaGVja2JveCBsaXN0IG9mIDEgaXRlbSBmb3IgZWFjaCBpdGVyYXRpb24gb2Ygb3VyIGNvbGxlY3Rpb24uIC0tJT4KIAogICAgICAgICAgICAgPHM6aXRlcmF0b3IgdmFyPSJjb21tZW50IiB2YWx1ZT0icGFnZXIuaXRlbXMiIHN0YXR1cz0icm93c3RhdHVzIj4KICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2NvbW1lbnRzJyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8JS0tIG9ubHkgYmxvZyBhZG1pbnMgKG5vdCB0aGUgZ2xvYmFsIGFkbWluKSBjYW4gYXBwcm92ZSBibG9nIGNvbW1lbnRzIC0tJT4KICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8JS0tIGEgYml0IGZ1bmt5IHRvIHVzZSBjaGVja2JveCBsaXN0IGhlcmUsIGJ1dCB1c2luZyBjaGVja2JveCBkaWRuJ3Qgd29yayBmb3IgbWUgOigKLSAgICAgICAgICAgICAgICAgd2UgYXJlIGVmZmVjdGl2ZWx5IGp1c3QgY3JlYXRpbmcgYSBjaGVja2JveCBsaXN0IG9mIDEgaXRlbSBmb3IgZWFjaCBpdGVyYXRpb24gb2Ygb3VyIGNvbGxlY3Rpb24gLS0lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmNoZWNrYm94bGlzdCBuYW1lPSJiZWFuLmFwcHJvdmVkQ29tbWVudHMiIGxpc3Q9InsjY29tbWVudH0iIGxpc3RLZXk9ImlkIiBsaXN0VmFsdWU9Im5hbWUiIC8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6Y2hlY2tib3hsaXN0IG5hbWU9ImJlYW4uYXBwcm92ZWRDb21tZW50cyIgY3NzQ2xhc3M9ImNvbW1lbnQtc2VsZWN0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0PSIjY29tbWVudCIgbGlzdEtleT0iaWQiIGxpc3RWYWx1ZT0iZW1wdHlTdHJpbmciIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICA8L3M6aWY+CiAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwlLS0gYSBiaXQgZnVua3kgdG8gdXNlIGNoZWNrYm94IGxpc3QgaGVyZSwgYnV0IHVzaW5nIGNoZWNrYm94IGRpZG4ndCB3b3JrIGZvciBtZSA6KAotICAgICAgICAgICAgIHdlIGFyZSBlZmZlY3RpdmVseSBqdXN0IGNyZWF0aW5nIGEgY2hlY2tib3ggbGlzdCBvZiAxIGl0ZW0gZm9yIGVhY2ggaXRlcmF0aW9uIG9mIG91ciBjb2xsZWN0aW9uIC0tJT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOmNoZWNrYm94bGlzdCBuYW1lPSJiZWFuLnNwYW1Db21tZW50cyIgbGlzdD0ieyNjb21tZW50fSIgbGlzdEtleT0iaWQiIGxpc3RWYWx1ZT0ibmFtZSIgLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOmNoZWNrYm94bGlzdCBuYW1lPSJiZWFuLnNwYW1Db21tZW50cyIgY3NzQ2xhc3M9ImNvbW1lbnQtc2VsZWN0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Q9IiNjb21tZW50IiBsaXN0S2V5PSJpZCIgbGlzdFZhbHVlPSJlbXB0eVN0cmluZyIgIC8+CiAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwlLS0gYSBiaXQgZnVua3kgdG8gdXNlIGNoZWNrYm94IGxpc3QgaGVyZSwgYnV0IHVzaW5nIGNoZWNrYm94IGRpZG4ndCB3b3JrIGZvciBtZSA6KAotICAgICAgICAgICAgIHdlIGFyZSBlZmZlY3RpdmVseSBqdXN0IGNyZWF0aW5nIGEgY2hlY2tib3ggbGlzdCBvZiAxIGl0ZW0gZm9yIGVhY2ggaXRlcmF0aW9uIG9mIG91ciBjb2xsZWN0aW9uIC0tJT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOmNoZWNrYm94bGlzdCBuYW1lPSJiZWFuLmRlbGV0ZUNvbW1lbnRzIiBsaXN0PSJ7I2NvbW1lbnR9IiBsaXN0S2V5PSJpZCIgbGlzdFZhbHVlPSJuYW1lIiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6Y2hlY2tib3hsaXN0IG5hbWU9ImJlYW4uZGVsZXRlQ29tbWVudHMiIGNzc0NsYXNzPSJjb21tZW50LXNlbGVjdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0PSIjY29tbWVudCIgbGlzdEtleT0iaWQiIGxpc3RWYWx1ZT0iZW1wdHlTdHJpbmciICAvPgogICAgICAgICAgICAgICAgICAgICA8L3RkPgogCi0gICAgICAgICAgICAgICAgICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgotICAgIDwlLS0gRGlzcGxheSBjb21tZW50IGRldGFpbHMgYW5kIHRleHQgLS0lPgorICAgICAgICAgICAgICAgICAgICAgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisgICAgICAgICAgICAgICAgICAgICAgICA8JS0tIERpc3BsYXkgY29tbWVudCBkZXRhaWxzIGFuZCB0ZXh0IC0tJT4KIAotICAgIDwlLS0gPHRkPiB3aXRoIHN0eWxlIGlmIGNvbW1lbnQgaXMgc3BhbSBvciBwZW5kaW5nIC0tJT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwlLS0gPHRkPiB3aXRoIHN0eWxlIGlmIGNvbW1lbnQgaXMgc3BhbSBvciBwZW5kaW5nIC0tJT4KICAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iI2NvbW1lbnQuc3RhdHVzLm5hbWUoKSA9PSAnU1BBTSciPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJzcGFtY29tbWVudCI+Ci0gICAgICAgICAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgICAgICAgICAgPHM6ZWxzZWlmIHRlc3Q9IiNjb21tZW50LnN0YXR1cy5uYW1lKCkgPT0gJ1BFTkRJTkcnIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0icGVuZGluZ2NvbW1lbnQiPgotICAgICAgICAgICAgICAgICAgICA8L3M6ZWxzZWlmPgotICAgICAgICAgICAgICAgICAgICA8czplbHNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICA8L3M6ZWxzZT4KKyAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJzcGFtY29tbWVudCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3M6aWY+CisgICAgICAgICAgICAgICAgICAgICAgICA8czplbHNlaWYgdGVzdD0iI2NvbW1lbnQuc3RhdHVzLm5hbWUoKSA9PSAnUEVORElORyciPgorICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InBlbmRpbmdjb21tZW50Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvczplbHNlaWY+CisgICAgICAgICAgICAgICAgICAgICAgICA8czplbHNlPgorICAgICAgICAgICAgICAgICAgICA8dGQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3M6ZWxzZT4KIAotICAgICAgICAgICAgICAgICAgICAgICAgPCUtLSBjb21tZW50IGRldGFpbHMgdGFibGUgaW4gdGFibGUgLS0lPgotICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJpbm5lcnRhYmxlIiA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCUtLSBjb21tZW50IGRldGFpbHMgdGFibGUgaW4gdGFibGUgLS0lPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJpbm5lcnRhYmxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0idmlld2JvZHkiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3ZGV0YWlscyBib3QiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGV0YWlscyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5lbnRyeVRpdGxlZCIgLz4mbmJzcDs6Jm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0nPHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LndlYmxvZ0VudHJ5LnBlcm1hbGluayIgLz4nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIjY29tbWVudC53ZWJsb2dFbnRyeS50aXRsZSIgLz48L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldGFpbHMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuY29tbWVudEJ5IiAvPiZuYnNwOzombmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSIjY29tbWVudC5lbWFpbCAhPSBudWxsICYmICNjb21tZW50Lm5hbWUgIT0gbnVsbCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5jb21tZW50QnlCb3RoIiA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtPjxzOnByb3BlcnR5IHZhbHVlPSIjY29tbWVudC5uYW1lIiAvPjwvczpwYXJhbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0+PHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LmVtYWlsIiAvPjwvczpwYXJhbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0+PHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LmVtYWlsIiAvPjwvczpwYXJhbT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0+PHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LnJlbW90ZUhvc3QiIC8+PC9zOnBhcmFtPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczp0ZXh0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czplbHNlaWYgdGVzdD0iI2NvbW1lbnQuZW1haWwgPT0gbnVsbCAmJiAjY29tbWVudC5uYW1lID09IG51bGwiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LmNvbW1lbnRCeUlQIiA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbT48czpwcm9wZXJ0eSB2YWx1ZT0iI2NvbW1lbnQucmVtb3RlSG9zdCIgLz48L3M6cGFyYW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczp0ZXh0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczplbHNlaWY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6ZWxzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5jb21tZW50QnlOYW1lIiA+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbT48czpwcm9wZXJ0eSB2YWx1ZT0iI2NvbW1lbnQubmFtZSIgLz48L3M6cGFyYW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbT48czpwcm9wZXJ0eSB2YWx1ZT0iI2NvbW1lbnQucmVtb3RlSG9zdCIgLz48L3M6cGFyYW0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczp0ZXh0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczplbHNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSIjY29tbWVudC51cmwgIT0gbnVsbCAmJiAhI2NvbW1lbnQudXJsLmVxdWFscygnJykiPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3ZGV0YWlscyBib3QiPgorCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGV0YWlscyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuY29tbWVudEJ5VVJMIiAvPiZuYnNwOzombmJzcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0nPHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LnVybCIgLz4nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyOnRydW5jYXRlTmljZWx5IHVwcGVyPSI2MCIgYXBwZW5kVG9FbmQ9Ii4uLiI+PHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LnVybCIgLz48L3N0cjp0cnVuY2F0ZU5pY2VseT48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuZW50cnlUaXRsZWQiLz4mbmJzcDs6Jm5ic3A7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9JzxzOnByb3BlcnR5IHZhbHVlPSIjY29tbWVudC53ZWJsb2dFbnRyeS5wZXJtYWxpbmsiIC8+Jz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIjY29tbWVudC53ZWJsb2dFbnRyeS50aXRsZSIvPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldGFpbHMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQucG9zdFRpbWUiIC8+Jm5ic3A7OiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmRhdGUgbmFtZT0iI2NvbW1lbnQucG9zdFRpbWUiLz4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldGFpbHMiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LmNvbW1lbnRCeSIvPiZuYnNwOzombmJzcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iI2NvbW1lbnQuZW1haWwgIT0gbnVsbCAmJiAjY29tbWVudC5uYW1lICE9IG51bGwiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5jb21tZW50QnlCb3RoIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbT48czpwcm9wZXJ0eSB2YWx1ZT0iI2NvbW1lbnQubmFtZSIvPjwvczpwYXJhbT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbT48czpwcm9wZXJ0eSB2YWx1ZT0iI2NvbW1lbnQuZW1haWwiLz48L3M6cGFyYW0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0+PHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LmVtYWlsIi8+PC9zOnBhcmFtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtPjxzOnByb3BlcnR5IHZhbHVlPSIjY29tbWVudC5yZW1vdGVIb3N0Ii8+PC9zOnBhcmFtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOnRleHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczppZj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6ZWxzZWlmIHRlc3Q9IiNjb21tZW50LmVtYWlsID09IG51bGwgJiYgI2NvbW1lbnQubmFtZSA9PSBudWxsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuY29tbWVudEJ5SVAiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtPjxzOnByb3BlcnR5IHZhbHVlPSIjY29tbWVudC5yZW1vdGVIb3N0Ii8+PC9zOnBhcmFtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOnRleHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczplbHNlaWY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmVsc2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LmNvbW1lbnRCeU5hbWUiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtPjxzOnByb3BlcnR5IHZhbHVlPSIjY29tbWVudC5uYW1lIi8+PC9zOnBhcmFtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtPjxzOnByb3BlcnR5IHZhbHVlPSIjY29tbWVudC5yZW1vdGVIb3N0Ii8+PC9zOnBhcmFtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOnRleHQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczplbHNlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iI2NvbW1lbnQudXJsICE9IG51bGwgJiYgISNjb21tZW50LnVybC5lcXVhbHMoJycpIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGV0YWlscyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LmNvbW1lbnRCeVVSTCIvPiZuYnNwOzombmJzcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9JzxzOnByb3BlcnR5IHZhbHVlPSIjY29tbWVudC51cmwiIC8+Jz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyOnRydW5jYXRlTmljZWx5IHVwcGVyPSI2MCIgYXBwZW5kVG9FbmQ9Ii4uLiI+PHM6cHJvcGVydHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSIjY29tbWVudC51cmwiLz48L3N0cjp0cnVuY2F0ZU5pY2VseT48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczppZj4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldGFpbHMiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LnBvc3RUaW1lIi8+Jm5ic3A7OiZuYnNwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpkYXRlIG5hbWU9IiNjb21tZW50LnBvc3RUaW1lIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmlld2RldGFpbHMgYm90Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXRhaWxzIGJvdCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSIjY29tbWVudC5jb250ZW50Lmxlbmd0aCgpID4gMTAwMCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJvdCIgaWQ9ImNvbW1lbnQtPHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LmlkIi8+Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHI6dHJ1bmNhdGVOaWNlbHkgdXBwZXI9IjEwMDAiIGFwcGVuZFRvRW5kPSIuLi4iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIjY29tbWVudC5jb250ZW50IiBlc2NhcGVIdG1sPSJ0cnVlIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdHI6dHJ1bmNhdGVOaWNlbHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJsaW5rLTxzOnByb3BlcnR5IHZhbHVlPSIjY29tbWVudC5pZCIvPiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgb25jbGljaz0ncmVhZE1vcmVDb21tZW50KCI8czpwcm9wZXJ0eSB2YWx1ZT0iI2NvbW1lbnQuaWQiLz4iKSc+PHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5yZWFkbW9yZSIgLz48L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6ZWxzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gd2lkdGg9IjIwMHB4IiBpZD0iY29tbWVudC08czpwcm9wZXJ0eSB2YWx1ZT0iI2NvbW1lbnQuaWQiLz4iPjxzOnByb3BlcnR5IHZhbHVlPSIjY29tbWVudC5jb250ZW50IiBlc2NhcGVIdG1sPSJ0cnVlIiAvPjwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczplbHNlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2NvbW1lbnRzJyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldGFpbHMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJlZGl0bGluay08czpwcm9wZXJ0eSB2YWx1ZT0iI2NvbW1lbnQuaWQiLz4iIG9uY2xpY2s9J2VkaXRDb21tZW50KCI8czpwcm9wZXJ0eSB2YWx1ZT0iI2NvbW1lbnQuaWQiLz4iKSc+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImdlbmVyaWMuZWRpdCIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXRhaWxzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0ic2F2ZWxpbmstPHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LmlkIi8+IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBvbmNsaWNrPSdzYXZlQ29tbWVudCgiPHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LmlkIi8+IiknPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5zYXZlIiAvPjwvYT4gJm5ic3A7fCZuYnNwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmlld2RldGFpbHMgYm90Ij4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRldGFpbHMgYm90Ij4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSIjY29tbWVudC5jb250ZW50Lmxlbmd0aCgpID4gMTAwMCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJib3QiIGlkPSJjb21tZW50LTxzOnByb3BlcnR5IHZhbHVlPSIjY29tbWVudC5pZCIvPiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cjp0cnVuY2F0ZU5pY2VseSB1cHBlcj0iMTAwMCIgYXBwZW5kVG9FbmQ9Ii4uLiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIjY29tbWVudC5jb250ZW50IiBlc2NhcGVIdG1sPSJ0cnVlIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdHI6dHJ1bmNhdGVOaWNlbHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImxpbmstPHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LmlkIi8+Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBvbmNsaWNrPSdyZWFkTW9yZUNvbW1lbnQoIjxzOnByb3BlcnR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iI2NvbW1lbnQuaWQiLz4iKSc+PHM6dGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQucmVhZG1vcmUiLz48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czplbHNlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gd2lkdGg9IjIwMHB4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9ImNvbW1lbnQtPHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LmlkIi8+Ij48czpwcm9wZXJ0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iI2NvbW1lbnQuY29udGVudCIgZXNjYXBlSHRtbD0idHJ1ZSIvPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmVsc2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJhY3Rpb25OYW1lID09ICdjb21tZW50cyciPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXRhaWxzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJlZGl0bGluay08czpwcm9wZXJ0eSB2YWx1ZT0iI2NvbW1lbnQuaWQiLz4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSdlZGl0Q29tbWVudCgiPHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LmlkIi8+IiknPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iZ2VuZXJpYy5lZGl0Ii8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXRhaWxzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD0ic2F2ZWxpbmstPHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LmlkIi8+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJkaXNwbGF5OiBub25lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIG9uY2xpY2s9J3NhdmVDb21tZW50KCI8czpwcm9wZXJ0eSB2YWx1ZT0iI2NvbW1lbnQuaWQiLz4iKSc+PHM6dGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJnZW5lcmljLnNhdmUiLz48L2E+ICZuYnNwO3wmbmJzcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImNhbmNlbGxpbmstPHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LmlkIi8+IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBvbmNsaWNrPSdlZGl0Q29tbWVudENhbmNlbCgiPHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LmlkIi8+IiknPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5jYW5jZWwiIC8+PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaWQ9ImNhbmNlbGxpbmstPHM6cHJvcGVydHkgdmFsdWU9IiNjb21tZW50LmlkIi8+IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgb25jbGljaz0nZWRpdENvbW1lbnRDYW5jZWwoIjxzOnByb3BlcnR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSIjY29tbWVudC5pZCIvPiIpJz48czp0ZXh0IG5hbWU9ImdlbmVyaWMuY2FuY2VsIi8+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4gPCUtLSBlbmQgY29tbWVudCBkZXRhaWxzIHRhYmxlIGluIHRhYmxlIC0tJT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCUtLSBlbmQgY29tbWVudCBkZXRhaWxzIHRhYmxlIGluIHRhYmxlIC0tJT4KICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgPC9zOml0ZXJhdG9yPgogICAgICAgICA8L3RhYmxlPgotICAgICAgICA8YnIgLz4KKworICAgICAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorICAgICAgICA8JS0tIE5leHQgLyBwcmV2aW91cyBsaW5rcyAtLSU+CisKKyAgICAgICAgPG5hdj4KKyAgICAgICAgICAgIDx1bCBjbGFzcz0icGFnZXIiPgorICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9InBhZ2VyLnByZXZMaW5rICE9IG51bGwiPgorICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InByZXZpb3VzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9JzxzOnByb3BlcnR5IHZhbHVlPSJwYWdlci5wcmV2TGluayIgLz4nPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mbGFycjs8L3NwYW4+TmV3ZXI8L2E+CisgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPC9zOmlmPgorICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9InBhZ2VyLm5leHRMaW5rICE9IG51bGwiPgorICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9Im5leHQiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0nPHM6cHJvcGVydHkgdmFsdWU9InBhZ2VyLm5leHRMaW5rIi8+Jz5PbGRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mcmFycjs8L3NwYW4+PC9hPgorICAgICAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgIDwvczppZj4KKyAgICAgICAgICAgIDwvdWw+CisgICAgICAgIDwvbmF2PgorCisgICAgICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKyAgICAgICAgPCUtLSBTYXZlIGNoYW5nZXMgYW5kIGNhbmNlbCBidXR0b25zIC0tJT4KKworICAgICAgICA8aHIgc2l6ZT0iMSIgbm9zaGFkZT0ibm9zaGFkZSIvPgorICAgICAgICA8czpzdWJtaXQgY3NzQ2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgdmFsdWU9IiV7Z2V0VGV4dCgnY29tbWVudE1hbmFnZW1lbnQudXBkYXRlJyl9Ii8+CisKKyAgICA8L3M6Zm9ybT4KKworPC9zOmVsc2U+CiAKIAotICAgIDxzY3JpcHQ+Ci0gICAgPCEtLQorPHNjcmlwdD4KKworICAgIDwlLS0gc2V0dXAgY2hlY2sgYWxsL25vbmUgY2hlY2tib3ggY29udHJvbHMgLS0lPgorICAgIDxzOmlmIHRlc3Q9InBhZ2VyLml0ZW1zICE9IG51bGwiPgorICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgJCgnI2NoZWNrYWxsYXBwcm92ZWQnKS5jbGljayhmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0b2dnbGVGdW5jdGlvbih0cnVlLCAiYmVhbi5hcHByb3ZlZENvbW1lbnRzIik7CisgICAgICAgIH0pOworICAgICAgICAkKCcjY2xlYXJhbGxhcHByb3ZlZCcpLmNsaWNrKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRvZ2dsZUZ1bmN0aW9uKGZhbHNlLCAiYmVhbi5hcHByb3ZlZENvbW1lbnRzIik7CisgICAgICAgIH0pOworICAgICAgICAkKCcjY2hlY2thbGxzcGFtJykuY2xpY2soZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdG9nZ2xlRnVuY3Rpb24odHJ1ZSwgImJlYW4uc3BhbUNvbW1lbnRzIik7CisgICAgICAgIH0pOworICAgICAgICAkKCcjY2xlYXJhbGxzcGFtJykuY2xpY2soZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdG9nZ2xlRnVuY3Rpb24oZmFsc2UsICJiZWFuLnNwYW1Db21tZW50cyIpOworICAgICAgICB9KTsKKyAgICAgICAgJCgnI2NoZWNrYWxsZGVsZXRlJykuY2xpY2soZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdG9nZ2xlRnVuY3Rpb24odHJ1ZSwgImJlYW4uZGVsZXRlQ29tbWVudHMiKTsKKyAgICAgICAgfSk7CisgICAgICAgICQoJyNjbGVhcmFsbGRlbGV0ZScpLmNsaWNrKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRvZ2dsZUZ1bmN0aW9uKGZhbHNlLCAiYmVhbi5kZWxldGVDb21tZW50cyIpOworICAgICAgICB9KTsKKyAgICB9KTsKKyAgICA8L3M6aWY+CisKKyAgICA8JS0tIFRPRE86IGhvb2sgdGhpcyB1cDsgaXQgaXMgY3VycmVudGx5IG5vdCB3b3JraW5nIGluIFJvbGxlciB0cnVuayBlaXRoZXIgLS0lPgorCisgICAgZnVuY3Rpb24gYnVsa0RlbGV0ZSgpIHsKKyAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKCc8czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LmNvbmZpcm1CdWxrRGVsZXRlIj48czpwYXJhbSB2YWx1ZT0iYnVsa0RlbGV0ZUNvdW50IiAvPjwvczp0ZXh0PicpKSB7CisgICAgICAgICAgICBkb2N1bWVudC5jb21tZW50UXVlcnlGb3JtLm1ldGhvZC52YWx1ZSA9ICJidWxrRGVsZXRlIjsKKyAgICAgICAgICAgIGRvY3VtZW50LmNvbW1lbnRRdWVyeUZvcm0uc3VibWl0KCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICB2YXIgY29tbWVudHMgPSB7fTsKIAogICAgIGZ1bmN0aW9uIGVkaXRDb21tZW50KGlkKSB7CkBAIC0zOTMsNyArNDI5LDcgQEAKICAgICAgICAgdmFyIHNhbHQgPSAkKCIjY29tbWVudHNfc2FsdCIpLnZhbCgpOwogICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgdHlwZTogIlBPU1QiLAotICAgICAgICAgICAgdXJsOiAnPCU9IHJlcXVlc3QuZ2V0Q29udGV4dFBhdGgoKSU+L3JvbGxlci11aS9hdXRob3JpbmcvY29tbWVudGRhdGE/aWQ9JyArIGlkICsnJnNhbHQ9JytzYWx0LAorICAgICAgICAgICAgdXJsOiAnPCU9IHJlcXVlc3QuZ2V0Q29udGV4dFBhdGgoKSU+L3JvbGxlci11aS9hdXRob3JpbmcvY29tbWVudGRhdGE/aWQ9JyArIGlkICsgJyZzYWx0PScgKyBzYWx0LAogICAgICAgICAgICAgZGF0YTogY29udGVudCwKICAgICAgICAgICAgIGRhdGFUeXBlOiAidGV4dCIsCiAgICAgICAgICAgICBwcm9jZXNzRGF0YTogImZhbHNlIiwKQEAgLTQyNiw3ICs0NjIsNyBAQAogICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgdHlwZTogIkdFVCIsCiAgICAgICAgICAgICB1cmw6ICc8JT0gcmVxdWVzdC5nZXRDb250ZXh0UGF0aCgpJT4vcm9sbGVyLXVpL2F1dGhvcmluZy9jb21tZW50ZGF0YT9pZD0nICsgaWQsCi0gICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7CisgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgICAgICAgIHZhciBjZGF0YSA9IGV2YWwoIigiICsgZGF0YSArICIpIik7CiAgICAgICAgICAgICAgICAgJCgiI2NvbW1lbnQtIiArIGNkYXRhLmlkKS5odG1sKGNkYXRhLmNvbnRlbnQpOwogICAgICAgICAgICAgICAgICQoIiNsaW5rLSIgKyBpZCkuZGV0YWNoKCk7CkBAIC00MzQsMTYgKzQ3MCw1IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgIH0KLSAgICAtLT4KKwogPC9zY3JpcHQ+Ci0KLQotPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgotPCUtLSBTYXZlIGNoYW5nZXMgYW5kIGNhbmNlbCBidXR0b25zIC0tJT4KLTwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KLQotICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnY29tbWVudE1hbmFnZW1lbnQudXBkYXRlJyl9IiAvPgotCi0gICAgPC9zOmZvcm0+Ci0KLTwvczplbHNlPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0NvbW1lbnRzU2lkZWJhci5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvQ29tbWVudHNTaWRlYmFyLmpzcAppbmRleCBmZTE0NWQ3Li41NGNjZmQ5IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvQ29tbWVudHNTaWRlYmFyLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvQ29tbWVudHNTaWRlYmFyLmpzcApAQCAtMTcsMTAgKzE3LDYgQEAKIC0tJT4KIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KIAotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiBocmVmPSc8czp1cmwgdmFsdWU9Ii9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9qcXVlcnktdWkubWluLmNzcyIvPicgLz4KLTxzY3JpcHQgc3JjPSI8czp1cmwgdmFsdWU9Ii9yb2xsZXItdWkvc2NyaXB0cy9qcXVlcnktMi4xLjEubWluLmpzIiAvPiI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0nPHM6dXJsIHZhbHVlPSIvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvanF1ZXJ5LXVpLm1pbi5qcyIvPic+PC9zY3JpcHQ+Ci0KIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2NvbW1lbnRzJyI+CiAgICAgPHM6c2V0IHZhcj0ibWFpbkFjdGlvbiI+Y29tbWVudHM8L3M6c2V0PgogPC9zOmlmPgpAQCAtMjgsODUgKzI0LDkyIEBACiAgICAgPHM6c2V0IHZhcj0ibWFpbkFjdGlvbiI+Z2xvYmFsQ29tbWVudE1hbmFnZW1lbnQ8L3M6c2V0PgogPC9zOmVsc2U+CiAKLTxkaXYgY2xhc3M9InNpZGViYXJGYWRlIj4KLSAgICA8ZGl2IGNsYXNzPSJtZW51LXRyIj4KLSAgICAgICAgPGRpdiBjbGFzcz0ibWVudS10bCI+Cis8aDM+PHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5zaWRlYmFyVGl0bGUiLz48L2gzPgorPGhyIHNpemU9IjEiIG5vc2hhZGU9Im5vc2hhZGUiLz4KIAotPGRpdiBjbGFzcz0ic2lkZWJhcklubmVyIj4KKzxwPjxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuc2lkZWJhckRlc2NyaXB0aW9uIi8+PC9wPgogCi08aDM+PHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5zaWRlYmFyVGl0bGUiIC8+PC9oMz4KLTxociBzaXplPSIxIiBub3NoYWRlPSJub3NoYWRlIiAvPgorPHM6Zm9ybSBhY3Rpb249IiV7I21haW5BY3Rpb259IXF1ZXJ5IiBpZD0iY29tbWVudHNRdWVyeSIgdGhlbWU9ImJvb3RzdHJhcCIgY3NzQ2xhc3M9ImZvcm0tdmVydGljYWwiPgogCi08cD48czp0ZXh0IG5hbWU9ImNvbW1lbnRNYW5hZ2VtZW50LnNpZGViYXJEZXNjcmlwdGlvbiIgLz48L3A+CisgICAgPHM6aGlkZGVuIG5hbWU9InNhbHQiLz4KKyAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIi8+CisKKyAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisgICAgPCUtLSBmaWx0ZXIgYnkgc2VhcmNoIHN0cmluZyAtLSU+CisKKyAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5zZWFyY2hTdHJpbmciIGxhYmVsPSIle2dldFRleHQoJ2NvbW1lbnRNYW5hZ2VtZW50LnNlYXJjaFN0cmluZycpfSIgc2l6ZT0iMTUiLz4KKworICAgIDxzY3JpcHQ+CisgICAgICAgICQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgJCgiI2VudHJpZXNfYmVhbl9zdGFydERhdGVTdHJpbmciKS5kYXRlcGlja2VyKCk7CisgICAgICAgIH0pOworICAgIDwvc2NyaXB0PgorCisgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorICAgIDwlLS0gZmlsdGVyIGJ5IGRhdGUgLS0lPgorCisgICAgPHNjcmlwdD4KKyAgICAgICAgLy8galF1ZXJ5IFVJIERhdGUgUGlja2VyCisgICAgICAgICQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgJCgiI2NvbW1lbnRzUXVlcnlfYmVhbl9zdGFydERhdGVTdHJpbmciKS5kYXRlcGlja2VyKCk7CisgICAgICAgIH0pOworICAgIDwvc2NyaXB0PgogICAgIAotIDxzOmZvcm0gYWN0aW9uPSIleyNtYWluQWN0aW9ufSFxdWVyeSIgaWQ9ImNvbW1lbnRzUXVlcnkiPgotCTxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgotICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciIC8+Ci0gICAgCi0gICAgPGRpdiBjbGFzcz0ic2lkZWZvcm1yb3ciPgotICAgICAgICA8bGFiZWwgZm9yPSJzZWFyY2hTdHJpbmciIGNsYXNzPSJzaWRlZm9ybXJvdyI+PHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5zZWFyY2hTdHJpbmciIC8+OjwvbGFiZWw+ICAgCi0gICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnNlYXJjaFN0cmluZyIgc2l6ZT0iMTUiIC8+Ci0gICAgPC9kaXY+Ci0gICAgPGJyIC8+Ci0gICAgPGJyIC8+Ci0gICAgCi0gICAgPGRpdiBjbGFzcz0ic2lkZWZvcm1yb3ciPgotICAgICAgICA8bGFiZWwgZm9yPSJzdGFydERhdGVTdHJpbmciIGNsYXNzPSJzaWRlZm9ybXJvdyI+PHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5zdGFydERhdGUiIC8+OjwvbGFiZWw+Ci0gICAgICAgICAgICA8c2NyaXB0PgotICAgICAgICAgICAgJChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICAkKCAiI2NvbW1lbnRzUXVlcnlfYmVhbl9zdGFydERhdGVTdHJpbmciICkuZGF0ZXBpY2tlcih7Ci0gICAgICAgICAgICAgICAgICAgIHNob3dPbjogImJ1dHRvbiIsCi0gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkltYWdlOiAiLi4vLi4vaW1hZ2VzL2NhbGVuZGFyLnBuZyIsCi0gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkltYWdlT25seTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlTW9udGg6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZVllYXI6IHRydWUKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5zdGFydERhdGVTdHJpbmciIHNpemU9IjEyIiByZWFkb25seT0idHJ1ZSIvPgotICAgIDwvZGl2PgotICAgICAgICAKLSAgICA8ZGl2IGNsYXNzPSJzaWRlZm9ybXJvdyI+Ci0gICAgICAgIDxsYWJlbCBmb3I9ImVuZERhdGVTdHJpbmciIGNsYXNzPSJzaWRlZm9ybXJvdyI+PHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5lbmREYXRlIiAvPjo8L2xhYmVsPgotICAgICAgICAgICAgPHNjcmlwdD4KLSAgICAgICAgICAgICQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgJCggIiNjb21tZW50c1F1ZXJ5X2JlYW5fZW5kRGF0ZVN0cmluZyIgKS5kYXRlcGlja2VyKHsKLSAgICAgICAgICAgICAgICAgICAgc2hvd09uOiAiYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgICAgYnV0dG9uSW1hZ2U6ICIuLi8uLi9pbWFnZXMvY2FsZW5kYXIucG5nIiwKLSAgICAgICAgICAgICAgICAgICAgYnV0dG9uSW1hZ2VPbmx5OiB0cnVlLAotICAgICAgICAgICAgICAgICAgICBjaGFuZ2VNb250aDogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlWWVhcjogdHJ1ZQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICA8L3NjcmlwdD4KLSAgICAgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLmVuZERhdGVTdHJpbmciIHNpemU9IjEyIiByZWFkb25seT0idHJ1ZSIvPgotICAgIDwvZGl2PgotICAgIDxiciAvPgotICAgIDxiciAvPgotICAKLSAgICA8ZGl2IGNsYXNzPSJzaWRlZm9ybXJvdyI+Ci0gICAgICAgIDxsYWJlbCBmb3I9ImFwcHJvdmVkU3RyaW5nIiBjbGFzcz0ic2lkZWZvcm1yb3ciPgotICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5wZW5kaW5nU3RhdHVzIiAvPgotICAgICAgICAgICAgPGJyIC8+Ci0gICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgPGJyIC8+ICAgICAgICAgICAgCi0gICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgPC9sYWJlbD4gCi0gICAgICAgIDxkaXY+Ci0gICAgICAgICAgICA8czpyYWRpbyB0aGVtZT0icm9sbGVyIiBuYW1lPSJiZWFuLmFwcHJvdmVkU3RyaW5nIiBsaXN0PSJjb21tZW50U3RhdHVzT3B0aW9ucyIgbGlzdEtleT0ia2V5IiBsaXN0VmFsdWU9InZhbHVlIiAvPgorICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPgorICAgICAgICA8bGFiZWwgZm9yPSJiZWFuLnN0YXJ0RGF0ZVN0cmluZyIgY2xhc3M9ImNvbnRyb2wtbGFiZWwiPgorICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJjb21tZW50TWFuYWdlbWVudC5zdGFydERhdGUiLz4KKyAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtZ3JvdXAiPgorCisgICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uc3RhcnREYXRlU3RyaW5nIiByZWFkb25seT0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWU9InNpbXBsZSIgY3NzQ2xhc3M9ImRhdGUtcGlja2VyIGZvcm0tY29udHJvbCIvPgorICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImJlYW4uc3RhcnREYXRlU3RyaW5nIiBjbGFzcz0iaW5wdXQtZ3JvdXAtYWRkb24gYnRuIj4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2FsZW5kYXIiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2xhYmVsPgorCisgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgPC9kaXY+Ci0gICAgPC9kaXY+IAotICAgIDxiciAvPgorICAgIDwvZGl2PgogCi0gICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2NvbW1lbnRNYW5hZ2VtZW50LnF1ZXJ5Jyl9IiAvPgotICAgICAgICAgICAgCisgICAgPHNjcmlwdD4KKyAgICAgICAgLy8galF1ZXJ5IFVJIERhdGUgUGlja2VyCisgICAgICAgICQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgJCgiI2NvbW1lbnRzUXVlcnlfYmVhbl9lbmREYXRlU3RyaW5nIikuZGF0ZXBpY2tlcigpOworICAgICAgICB9KTsKKyAgICA8L3NjcmlwdD4KKworICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPgorICAgICAgICA8bGFiZWwgZm9yPSJiZWFuLmVuZERhdGVTdHJpbmciIGNsYXNzPSJjb250cm9sLWxhYmVsIj4KKyAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQuZW5kRGF0ZSIvPgorICAgICAgICA8L2xhYmVsPgorICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+CisKKyAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5lbmREYXRlU3RyaW5nIiByZWFkb25seT0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWU9InNpbXBsZSIgY3NzQ2xhc3M9ImRhdGUtcGlja2VyIGZvcm0tY29udHJvbCIvPgorICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImJlYW4uZW5kRGF0ZVN0cmluZyIgY2xhc3M9ImlucHV0LWdyb3VwLWFkZG9uIGJ0biI+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNhbGVuZGFyIj48L3NwYW4+CisgICAgICAgICAgICAgICAgPC9sYWJlbD4KKworICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisgICAgPGJyLz4KKworICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKyAgICA8JS0tIGZpbHRlciBieSBzdGF0dXMtLSU+CisKKyAgICA8czpyYWRpbyBuYW1lPSJiZWFuLmFwcHJvdmVkU3RyaW5nIiAKKyAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCdjb21tZW50TWFuYWdlbWVudC5wZW5kaW5nU3RhdHVzJyl9IiAKKyAgICAgICAgICAgICBsaXN0PSJjb21tZW50U3RhdHVzT3B0aW9ucyIgbGlzdEtleT0ia2V5IiBsaXN0VmFsdWU9InZhbHVlIi8+CisKKyAgICAKKyAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisgICAgPCUtLSBmaWx0ZXIgYnV0dG9uIC0tJT4KKworICAgIDxzOnN1Ym1pdCBjc3NDbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB2YWx1ZT0iJXtnZXRUZXh0KCdjb21tZW50TWFuYWdlbWVudC5xdWVyeScpfSIvPgorCiA8L3M6Zm9ybT4KIAotPGJyIC8+Ci08YnIgLz4KLTwvZGl2PiA8IS0tIHNpZGViYXJJbm5lciAtLT4KLQotICAgICAgICA8L2Rpdj4KLSAgICA8L2Rpdj4KLTwvZGl2PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0VudHJpZXMuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0VudHJpZXMuanNwCmluZGV4IGVhYzA2ODkuLjYzNzRhNzkgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9FbnRyaWVzLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvRW50cmllcy5qc3AKQEAgLTI4LDc2ICsyOCwzMCBAQAogCiAKIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+Ci08JS0tIE51bWJlciBvZiBlbnRyaWVzIGFuZCBkYXRlIG1lc3NhZ2UgLS0lPgotPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKzwlLS0gTmV4dCAvIHByZXZpb3VzIGxpbmtzIC0tJT4KIAotPGRpdiBjbGFzcz0idGFibGVuYXYiPgotICAgIAotICAgIDxkaXYgc3R5bGU9ImZsb2F0OmxlZnQ7Ij4KLSAgICAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVF1ZXJ5Lm5vd1Nob3dpbmciPgotICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9InBhZ2VyLml0ZW1zLnNpemUoKSIgLz4KLSAgICAgICAgPC9zOnRleHQ+Ci0gICAgPC9kaXY+Ci0gICAgPHM6aWYgdGVzdD0icGFnZXIuaXRlbXMuc2l6ZSgpID4gMCI+Ci0gICAgICAgIDxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0OyI+Ci0gICAgICAgICAgICA8czppZiB0ZXN0PSJmaXJzdEVudHJ5LnB1YlRpbWUgIT0gbnVsbCI+Ci0gICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVF1ZXJ5LmRhdGUudG9TdHJpbmdGb3JtYXQiPgotICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0iZmlyc3RFbnRyeS5wdWJUaW1lIiAvPgotICAgICAgICAgICAgICAgIDwvczp0ZXh0PgotICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgLS0tCi0gICAgICAgICAgICA8czppZiB0ZXN0PSJsYXN0RW50cnkucHViVGltZSAhPSBudWxsIj4KLSAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VudHJ5UXVlcnkuZGF0ZS50b1N0cmluZ0Zvcm1hdCI+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIHZhbHVlPSJsYXN0RW50cnkucHViVGltZSIgLz4KLSAgICAgICAgICAgICAgICA8L3M6dGV4dD4KLSAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgPC9kaXY+Ci0gICAgPC9zOmlmPgotICAgIDxiciAvPgotICAgIAotICAgIAotICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+Ci0gICAgPCUtLSBOZXh0IC8gcHJldmlvdXMgbGlua3MgLS0lPgotICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+Ci0gICAgCi0gICAgPHM6aWYgdGVzdD0icGFnZXIucHJldkxpbmsgIT0gbnVsbCAmJiBwYWdlci5uZXh0TGluayAhPSBudWxsIj4KLSAgICAgICAgPGJyIC8+PGNlbnRlcj4KLSAgICAgICAgICAgICZsYXF1bzsKLSAgICAgICAgICAgIDxhIGhyZWY9JzxzOnByb3BlcnR5IHZhbHVlPSJwYWdlci5wcmV2TGluayIgLz4nPgotICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVF1ZXJ5LnByZXYiIC8+PC9hPgotICAgICAgICAgICAgfCA8YSBocmVmPSc8czpwcm9wZXJ0eSB2YWx1ZT0icGFnZXIubmV4dExpbmsiIC8+Jz4KLSAgICAgICAgICAgIDxzOnRleHQgbmFtZT0id2VibG9nRW50cnlRdWVyeS5uZXh0IiAvPjwvYT4KLSAgICAgICAgICAgICZyYXF1bzsKLSAgICAgICAgPC9jZW50ZXI+PGJyIC8+Ci0gICAgPC9zOmlmPgotICAgIDxzOmVsc2VpZiB0ZXN0PSJwYWdlci5wcmV2TGluayAhPSBudWxsIj4KLSAgICAgICAgPGJyIC8+PGNlbnRlcj4KLSAgICAgICAgICAgICZsYXF1bzsKLSAgICAgICAgICAgIDxhIGhyZWY9JzxzOnByb3BlcnR5IHZhbHVlPSJwYWdlci5wcmV2TGluayIgLz4nPgotICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVF1ZXJ5LnByZXYiIC8+PC9hPgotICAgICAgICAgICAgfCA8czp0ZXh0IG5hbWU9IndlYmxvZ0VudHJ5UXVlcnkubmV4dCIgLz4KLSAgICAgICAgICAgICZyYXF1bzsKLSAgICAgICAgPC9jZW50ZXI+PGJyIC8+Ci0gICAgPC9zOmVsc2VpZj4KLSAgICA8czplbHNlaWYgdGVzdD0icGFnZXIubmV4dExpbmsgIT0gbnVsbCI+Ci0gICAgICAgIDxiciAvPjxjZW50ZXI+Ci0gICAgICAgICAgICAmbGFxdW87Ci0gICAgICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VudHJ5UXVlcnkucHJldiIgLz4KLSAgICAgICAgICAgIHwgPGEgY2xhc3M9IiIgaHJlZj0nPHM6cHJvcGVydHkgdmFsdWU9InBhZ2VyLm5leHRMaW5rIiAvPic+Ci0gICAgICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VudHJ5UXVlcnkubmV4dCIgLz48L2E+Ci0gICAgICAgICAgICAmcmFxdW87Ci0gICAgICAgIDwvY2VudGVyPjxiciAvPgotICAgIDwvczplbHNlaWY+Ci0gICAgPHM6ZWxzZT48YnIgLz48L3M6ZWxzZT4KLSAgICAKLTwvZGl2PiA8JS0tIGNsYXNzPSJ0YWJsZW5hdiIgLS0lPgorPG5hdj4KKyAgICA8dWwgY2xhc3M9InBhZ2VyIj4KKyAgICAgICAgPHM6aWYgdGVzdD0icGFnZXIucHJldkxpbmsgIT0gbnVsbCI+CisgICAgICAgICAgICA8bGkgY2xhc3M9InByZXZpb3VzIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSc8czpwcm9wZXJ0eSB2YWx1ZT0icGFnZXIucHJldkxpbmsiIC8+Jz4gCisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mbGFycjs8L3NwYW4+TmV3ZXI8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICA8L3M6aWY+CisgICAgICAgIDxzOmlmIHRlc3Q9InBhZ2VyLm5leHRMaW5rICE9IG51bGwiPgorICAgICAgICAgICAgPGxpIGNsYXNzPSJuZXh0Ij4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSc8czpwcm9wZXJ0eSB2YWx1ZT0icGFnZXIubmV4dExpbmsiLz4nPk9sZGVyCisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mcmFycjs8L3NwYW4+PC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgPC9zOmlmPgorICAgIDwvdWw+Cis8L25hdj4KIAogCiA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgogPCUtLSBFbnRyeSB0YWJsZS0tJT4KLTwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CiAKLTxwPgorPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+CiAgICAgPHNwYW4gY2xhc3M9ImRyYWZ0RW50cnlCb3giPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvc3Bhbj4gCiAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVF1ZXJ5LmRyYWZ0IiAvPiZuYnNwOyZuYnNwOwogICAgIDxzcGFuIGNsYXNzPSJwZW5kaW5nRW50cnlCb3giPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzwvc3Bhbj4KQEAgLTEwNiw5ICs2MCwxMSBAQAogICAgIDxzOnRleHQgbmFtZT0id2VibG9nRW50cnlRdWVyeS5zY2hlZHVsZWQiIC8+Jm5ic3A7Jm5ic3A7CiA8L3A+CiAKLTx0YWJsZSBjbGFzcz0icm9sbGVydGFibGUiIHdpZHRoPSIxMDAlIj4KKzx0YWJsZSBjbGFzcz0icm9sbGVydGFibGUgdGFibGUgdGFibGUtc3RyaXBlZCIgd2lkdGg9IjEwMCUiPgogCiA8dHI+CisgICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSIgd2lkdGg9IjUlIj4gPC90aD4KKyAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iNSUiPiA8L3RoPgogICAgIDx0aCBjbGFzcz0icm9sbGVydGFibGUiIHdpZHRoPSI1JSI+CiAgICAgICAgIDxzOnRleHQgbmFtZT0id2VibG9nRW50cnlRdWVyeS5wdWJUaW1lIiAvPgogICAgIDwvdGg+CkBAIC0xMjEsMTIgKzc3LDYgQEAKICAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iNSUiPgogICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VudHJ5UXVlcnkuY2F0ZWdvcnkiIC8+CiAgICAgPC90aD4KLSAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iNSUiPgotICAgIDwvdGg+Ci0gICAgPHRoIGNsYXNzPSJyb2xsZXJ0YWJsZSIgd2lkdGg9IjUlIj4KLSAgICA8L3RoPgotICAgIDx0aCBjbGFzcz0icm9sbGVydGFibGUiIHdpZHRoPSI1JSI+Ci0gICAgPC90aD4KIDwvdHI+CiAKIDxzOml0ZXJhdG9yIHZhcj0icG9zdCIgdmFsdWU9InBhZ2VyLml0ZW1zIj4KQEAgLTE0Myw2ICs5MywyMiBAQAogICAgIDxzOmVsc2U+CiAgICAgICAgIDx0cj4KICAgICA8L3M6ZWxzZT4KKworICAgIDx0ZD4KKyAgICAgICAgPHM6dXJsIHZhcj0iZWRpdFVybCIgYWN0aW9uPSJlbnRyeUVkaXQiPgorICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iJXthY3Rpb25XZWJsb2cuaGFuZGxlfSIgLz4KKyAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9ImJlYW4uaWQiIHZhbHVlPSIjcG9zdC5pZCIgLz4KKyAgICAgICAgPC9zOnVybD4KKyAgICAgICAgPHM6YSBocmVmPSIle2VkaXRVcmx9Ij48c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1lZGl0Ij48L3M6YT4KKyAgICA8L3RkPgorCisgICAgPHRkPgorICAgICAgICA8czpzZXQgdmFyPSJwb3N0SWQiIHZhbHVlPSIjcG9zdC5pZCIgLz4KKyAgICAgICAgPHM6c2V0IHZhcj0icG9zdFRpdGxlIiB2YWx1ZT0iI3Bvc3QudGl0bGUiIC8+CisgICAgICAgIDxhIGhyZWY9IiMiIAorICAgICAgICAgICAgb25jbGljaz0ic2hvd0RlbGV0ZU1vZGFsKCc8czpwcm9wZXJ0eSB2YWx1ZT0icG9zdElkIiAvPicsICc8czpwcm9wZXJ0eSB2YWx1ZT0icG9zdFRpdGxlIi8+JyApIj4gCisgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi10cmFzaCI+PC9zcGFuPjwvYT4KKyAgICA8L3RkPgogICAgIAogICAgIDx0ZD4KICAgICAgICAgPHM6aWYgdGVzdD0iI3Bvc3QucHViVGltZSAhPSBudWxsIj4KQEAgLTE2MSw0MSArMTI3LDExMyBAQAogICAgIDwvdGQ+CiAgICAgCiAgICAgPHRkPgotICAgICAgICA8c3RyOnRydW5jYXRlTmljZWx5IHVwcGVyPSI4MCI+PHM6cHJvcGVydHkgdmFsdWU9IiNwb3N0LmRpc3BsYXlUaXRsZSIgLz48L3N0cjp0cnVuY2F0ZU5pY2VseT4KKyAgICAgICAgPHM6aWYgdGVzdD0iI3Bvc3Quc3RhdHVzLm5hbWUoKSA9PSAnUFVCTElTSEVEJyI+CisgICAgICAgICAgICA8YSBocmVmPSc8czpwcm9wZXJ0eSB2YWx1ZT0iI3Bvc3QucGVybWFsaW5rIiAvPic+CisgICAgICAgICAgICAgICAgPHN0cjp0cnVuY2F0ZU5pY2VseSB1cHBlcj0iODAiPjxzOnByb3BlcnR5IHZhbHVlPSIjcG9zdC5kaXNwbGF5VGl0bGUiIC8+PC9zdHI6dHJ1bmNhdGVOaWNlbHk+CisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvczppZj4KKyAgICAgICAgPHM6ZWxzZT4KKyAgICAgICAgICAgIDxzdHI6dHJ1bmNhdGVOaWNlbHkgdXBwZXI9IjgwIj48czpwcm9wZXJ0eSB2YWx1ZT0iI3Bvc3QuZGlzcGxheVRpdGxlIiAvPjwvc3RyOnRydW5jYXRlTmljZWx5PgorICAgICAgICA8L3M6ZWxzZT4KICAgICA8L3RkPgogICAgIAogICAgIDx0ZD4KICAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9IiNwb3N0LmNhdGVnb3J5Lm5hbWUiIC8+CiAgICAgPC90ZD4KLSAgICAKLSAgICA8dGQ+Ci0gICAgICAgIDxzOmlmIHRlc3Q9IiNwb3N0LnN0YXR1cy5uYW1lKCkgPT0gJ1BVQkxJU0hFRCciPgotICAgICAgICAgICAgPGEgaHJlZj0nPHM6cHJvcGVydHkgdmFsdWU9IiNwb3N0LnBlcm1hbGluayIgLz4nPjxzOnRleHQgbmFtZT0id2VibG9nRW50cnlRdWVyeS52aWV3IiAvPjwvYT4KLSAgICAgICAgPC9zOmlmPgotICAgIDwvdGQ+Ci0KLSAgICA8dGQ+Ci0gICAgICAgIDxzOnVybCB2YXI9ImVkaXRVcmwiIGFjdGlvbj0iZW50cnlFZGl0Ij4KLSAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+Ci0gICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJiZWFuLmlkIiB2YWx1ZT0iI3Bvc3QuaWQiIC8+Ci0gICAgICAgIDwvczp1cmw+Ci0gICAgICAgIDxzOmEgaHJlZj0iJXtlZGl0VXJsfSI+PHM6dGV4dCBuYW1lPSJnZW5lcmljLmVkaXQiIC8+PC9zOmE+Ci0gICAgPC90ZD4KLQotICAgIDx0ZD4KLSAgICAgICAgPHM6dXJsIHZhcj0iZGVsZXRlVXJsIiBhY3Rpb249ImVudHJ5UmVtb3ZlVmlhTGlzdCI+Ci0gICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIle2FjdGlvbldlYmxvZy5oYW5kbGV9IiAvPgotICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0icmVtb3ZlSWQiIHZhbHVlPSIjcG9zdC5pZCIgLz4KLSAgICAgICAgPC9zOnVybD4KLSAgICAgICAgPHM6YSBocmVmPSIle2RlbGV0ZVVybH0iPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5kZWxldGUiIC8+PC9zOmE+Ci0gICAgPC90ZD4KIAogICAgIDwvdHI+CiA8L3M6aXRlcmF0b3I+CiAKIDwvdGFibGU+CiAKKworPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKzwlLS0gTmV4dCAvIHByZXZpb3VzIGxpbmtzIC0tJT4KKworPG5hdj4KKyAgICA8dWwgY2xhc3M9InBhZ2VyIj4KKyAgICAgICAgPHM6aWYgdGVzdD0icGFnZXIucHJldkxpbmsgIT0gbnVsbCI+CisgICAgICAgICAgICA8bGkgY2xhc3M9InByZXZpb3VzIj4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSc8czpwcm9wZXJ0eSB2YWx1ZT0icGFnZXIucHJldkxpbmsiIC8+Jz4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPiZsYXJyOzwvc3Bhbj4gT2xkZXI8L2E+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICA8L3M6aWY+CisgICAgICAgIDxzOmlmIHRlc3Q9InBhZ2VyLm5leHRMaW5rICE9IG51bGwiPgorICAgICAgICAgICAgPGxpIGNsYXNzPSJuZXh0Ij4KKyAgICAgICAgICAgICAgICA8YSBocmVmPSc8czpwcm9wZXJ0eSB2YWx1ZT0icGFnZXIubmV4dExpbmsiLz4nPk5ld2VyCisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mcmFycjs8L3NwYW4+PC9hPgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgPC9zOmlmPgorICAgIDwvdWw+Cis8L25hdj4KKwogPHM6aWYgdGVzdD0icGFnZXIuaXRlbXMuaXNFbXB0eSI+CiAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVF1ZXJ5Lm5vbmVGb3VuZCIgLz4KLSAgICA8YnIgLz48YnIgLz48YnIgLz48YnIgLz48YnIgLz48YnIgLz48YnIgLz48YnIgLz48YnIgLz48YnIgLz48YnIgLz48YnIgLz4KIDwvczppZj4KKworCis8ZGl2IGlkPSJkZWxldGUtZW50cnktbW9kYWwiIGNsYXNzPSJtb2RhbCBmYWRlIGRlbGV0ZS1lbnRyeS1tb2RhbCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciPgorCisgICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLWxnIj4KKworICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KKworICAgICAgICAgICAgPHM6c2V0IHZhcj0iZGVsZXRlQWN0aW9uIj5lbnRyeVJlbW92ZVZpYUxpc3QhcmVtb3ZlPC9zOnNldD4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPHM6Zm9ybSBhY3Rpb249IiV7I2RlbGV0ZUFjdGlvbn0iIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLWhvcml6b250YWwiPgorICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0Ii8+CisgICAgICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIvPgorICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJyZW1vdmVJZCIgaWQ9InJlbW92ZUlkIi8+CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgorICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC10aXRsZSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aDM+PHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVJlbW92ZS5yZW1vdmVXZWJsb2dFbnRyeSIvPjwvaDM+CisgICAgICAgICAgICAgICAgICAgICAgICA8cD48czp0ZXh0IG5hbWU9IndlYmxvZ0VudHJ5UmVtb3ZlLmFyZVlvdVN1cmUiLz48L3A+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorCisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjb2wtc20tMyBjb250cm9sLWxhYmVsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VudHJ5UmVtb3ZlLmVudHJ5VGl0bGUiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tOSBjb250cm9scyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZvcm0tY29udHJvbC1zdGF0aWMiIHN0eWxlPSJwYWRkaW5nLXRvcDowcHgiIGlkPSJwb3N0VGl0bGVMYWJlbCI+PC9wPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjb2wtc20tMyBjb250cm9sLWxhYmVsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VudHJ5UmVtb3ZlLmVudHJ5SWQiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtc20tOSBjb250cm9scyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZvcm0tY29udHJvbC1zdGF0aWMiIHN0eWxlPSJwYWRkaW5nLXRvcDowcHgiIGlkPSJwb3N0SWRMYWJlbCI+PC9wPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KKyAgICAgICAgICAgICAgICAgICAgPHM6c3VibWl0IGNzc0NsYXNzPSJidG4iIHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMueWVzJyl9Ii8+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1wcmltYXJ5IiBkYXRhLWRpc21pc3M9Im1vZGFsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iZ2VuZXJpYy5ubyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CisgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgIDwvczpmb3JtPgorICAgICAgICAgICAgCisgICAgICAgIDwvZGl2PgorCisgICAgPC9kaXY+IAorICAgIAorPC9kaXY+CisKKzxzY3JpcHQ+CisgICAgZnVuY3Rpb24gc2hvd0RlbGV0ZU1vZGFsKCBwb3N0SWQsIHBvc3RUaXRsZSApIHsKKyAgICAgICAgJCgnI3Bvc3RJZExhYmVsJykuaHRtbChwb3N0SWQpOworICAgICAgICAkKCcjcG9zdFRpdGxlTGFiZWwnKS5odG1sKHBvc3RUaXRsZSk7CisgICAgICAgICQoJyNyZW1vdmVJZCcpLnZhbChwb3N0SWQpOworICAgICAgICAkKCcjZGVsZXRlLWVudHJ5LW1vZGFsJykubW9kYWwoe3Nob3c6IHRydWV9KTsKKyAgICB9Cis8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9FbnRyaWVzU2lkZWJhci5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvRW50cmllc1NpZGViYXIuanNwCmluZGV4IGMxOTAzZGIuLjIxN2ViZTcgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9FbnRyaWVzU2lkZWJhci5qc3AKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0VudHJpZXNTaWRlYmFyLmpzcApAQCAtMTcsMTQwICsxNywxMDEgQEAKIC0tJT4KIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KIAotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiBocmVmPSc8czp1cmwgdmFsdWU9Ii9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9qcXVlcnktdWkubWluLmNzcyIvPicgLz4KLTxzY3JpcHQgc3JjPSI8czp1cmwgdmFsdWU9Ii9yb2xsZXItdWkvc2NyaXB0cy9qcXVlcnktMi4xLjEubWluLmpzIiAvPiI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0nPHM6dXJsIHZhbHVlPSIvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvanF1ZXJ5LXVpLm1pbi5qcyIvPic+PC9zY3JpcHQ+Cis8aDM+PHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVF1ZXJ5LnNpZGViYXJUaXRsZSIvPjwvaDM+Cis8aHIgc2l6ZT0iMSIgbm9zaGFkZT0ibm9zaGFkZSIvPgogCi08ZGl2IGNsYXNzPSJzaWRlYmFyRmFkZSI+Ci0gICAgPGRpdiBjbGFzcz0ibWVudS10ciI+Ci0gICAgICAgIDxkaXYgY2xhc3M9Im1lbnUtdGwiPgorPHA+PHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVF1ZXJ5LnNpZGViYXJEZXNjcmlwdGlvbiIvPjwvcD4KIAotICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhcklubmVyIj4KKzxzOmZvcm0gYWN0aW9uPSJlbnRyaWVzIiB0aGVtZT0iYm9vdHN0cmFwIiBjc3NDbGFzcz0iZm9ybS12ZXJ0aWNhbCI+CisgICAgPHM6aGlkZGVuIG5hbWU9InNhbHQiLz4KKyAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIi8+CiAKLSAgICAgICAgICAgICAgICA8aDM+PHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVF1ZXJ5LnNpZGViYXJUaXRsZSIgLz48L2gzPgotICAgICAgICAgICAgICAgIDxociBzaXplPSIxIiBub3NoYWRlPSJub3NoYWRlIiAvPgorICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKyAgICA8JS0tIGZpbHRlciBieSBjYXRlZ29yeSAtLSU+CiAKLSAgICAgICAgICAgICAgICA8cD48czp0ZXh0IG5hbWU9IndlYmxvZ0VudHJ5UXVlcnkuc2lkZWJhckRlc2NyaXB0aW9uIiAvPjwvcD4KKyAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi5jYXRlZ29yeU5hbWUiCisgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ3dlYmxvZ0VudHJ5UXVlcnkubGFiZWwuY2F0ZWdvcnknKX0iCisgICAgICAgICAgICAgIGxpc3Q9ImNhdGVnb3JpZXMiIGxpc3RLZXk9Im5hbWUiIGxpc3RWYWx1ZT0ibmFtZSIgc2l6ZT0iMSIvPgogCi0gICAgICAgICAgICAgICAgPHM6Zm9ybSBhY3Rpb249ImVudHJpZXMiPgotCQkJCQk8czpoaWRkZW4gbmFtZT0ic2FsdCIgLz4KLSAgICAgICAgICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgLz4KKyAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisgICAgPCUtLSBmaWx0ZXIgYnkgdGFnIC0tJT4KIAotICAgICAgICAgICAgICAgICAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+Ci0gICAgICAgICAgICAgICAgICAgIDwlLS0gZmlsdGVyIGJ5IGNhdGVnb3J5IC0tJT4KKyAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi50YWdzQXNTdHJpbmciIHNpemU9IjE0IgorICAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCd3ZWJsb2dFbnRyeVF1ZXJ5LmxhYmVsLnRhZ3MnKX0iLz4KIAotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlZm9ybXJvdyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJjYXRlZ29yeUlkIiBjbGFzcz0ic2lkZWZvcm1yb3ciPgotICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVF1ZXJ5LmxhYmVsLmNhdGVnb3J5IiAvPjwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi5jYXRlZ29yeU5hbWUiIGxpc3Q9ImNhdGVnb3JpZXMiIGxpc3RLZXk9Im5hbWUiIGxpc3RWYWx1ZT0ibmFtZSIgc2l6ZT0iMSIgLz4KLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgICAgICA8YnIgLz4KKyAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisgICAgPCUtLSBmaWx0ZXIgYnkgdGV4dCAtLSU+CiAKLSAgICAgICAgICAgICAgICAgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgotICAgICAgICAgICAgICAgICAgICA8JS0tIGZpbHRlciBieSB0YWcgLS0lPgorICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnRleHQiIHNpemU9IjE0IgorICAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCd3ZWJsb2dFbnRyeVF1ZXJ5LmxhYmVsLnRleHQnKX0iLz4KIAotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlZm9ybXJvdyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ0YWdzIiBjbGFzcz0ic2lkZWZvcm1yb3ciPgotICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVF1ZXJ5LmxhYmVsLnRhZ3MiIC8+PC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnRhZ3NBc1N0cmluZyIgc2l6ZT0iMTQiIC8+Ci0gICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgICAgICAgICAgPGJyIC8+CisgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorICAgIDwlLS0gZmlsdGVyIGJ5IGRhdGUgLS0lPgogCi0gICAgICAgICAgICAgICAgICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KLSAgICAgICAgICAgICAgICAgICAgPCUtLSBmaWx0ZXIgYnkgdGV4dCAtLSU+CisgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCI+CisgICAgICAgIDxsYWJlbCBmb3I9ImJlYW4uc3RhcnREYXRlU3RyaW5nIiBjbGFzcz0iY29udHJvbC1sYWJlbCI+CisgICAgICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VudHJ5UXVlcnkubGFiZWwuc3RhcnREYXRlIi8+CisgICAgICAgIDwvbGFiZWw+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KIAotICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlZm9ybXJvdyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ0ZXh0IiBjbGFzcz0ic2lkZWZvcm1yb3ciPgotICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVF1ZXJ5LmxhYmVsLnRleHQiIC8+PC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnRleHQiIHNpemU9IjE0IiAvPgotICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgICAgICAgICAgPGJyIC8+Ci0gICAgICAgICAgICAgICAgICAgIDxiciAvPgorICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnN0YXJ0RGF0ZVN0cmluZyIgcmVhZG9ubHk9InRydWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lPSJzaW1wbGUiIGNzc0NsYXNzPSJkYXRlLXBpY2tlciBmb3JtLWNvbnRyb2wiLz4KKyAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJiZWFuLnN0YXJ0RGF0ZVN0cmluZyIgY2xhc3M9ImlucHV0LWdyb3VwLWFkZG9uIGJ0biI+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNhbGVuZGFyIj48L3NwYW4+CisgICAgICAgICAgICAgICAgPC9sYWJlbD4KIAotICAgICAgICAgICAgICAgICAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+Ci0gICAgICAgICAgICAgICAgICAgIDwlLS0gZmlsdGVyIGJ5IGRhdGUgLS0lPgotCi0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGVmb3Jtcm93Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InN0YXJ0RGF0ZVN0cmluZyIgY2xhc3M9InNpZGVmb3Jtcm93Ij48czp0ZXh0IG5hbWU9IndlYmxvZ0VudHJ5UXVlcnkubGFiZWwuc3RhcnREYXRlIiAvPjo8L2xhYmVsPgotICAgICAgICAgICAgICAgICAgICAgICAgPHNjcmlwdD4KLSAgICAgICAgICAgICAgICAgICAgICAgICQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCggIiNlbnRyaWVzX2JlYW5fc3RhcnREYXRlU3RyaW5nIiApLmRhdGVwaWNrZXIoewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93T246ICJidXR0b24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25JbWFnZTogIi4uLy4uL2ltYWdlcy9jYWxlbmRhci5wbmciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXR0b25JbWFnZU9ubHk6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZU1vbnRoOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VZZWFyOiB0cnVlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvc2NyaXB0PgotICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uc3RhcnREYXRlU3RyaW5nIiBzaXplPSIxMiIgcmVhZG9ubHk9InRydWUiLz4KLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0KLSAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWZvcm1yb3ciPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iZW5kRGF0ZVN0cmluZyIgY2xhc3M9InNpZGVmb3Jtcm93Ij48czp0ZXh0IG5hbWU9IndlYmxvZ0VudHJ5UXVlcnkubGFiZWwuZW5kRGF0ZSIgLz46PC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzY3JpcHQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAkKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoICIjZW50cmllc19iZWFuX2VuZERhdGVTdHJpbmciICkuZGF0ZXBpY2tlcih7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dPbjogImJ1dHRvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbkltYWdlOiAiLi4vLi4vaW1hZ2VzL2NhbGVuZGFyLnBuZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbkltYWdlT25seTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTW9udGg6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVllYXI6IHRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5lbmREYXRlU3RyaW5nIiBzaXplPSIxMiIgcmVhZG9ubHk9InRydWUiLz4KLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgICAgICA8YnIgLz4KLQotICAgICAgICAgICAgICAgICAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+Ci0gICAgICAgICAgICAgICAgICAgIDwlLS0gZmlsdGVyIGJ5IHN0YXR1cyAtLSU+Ci0KLSAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWZvcm1yb3ciPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ic3RhdHVzIiBjbGFzcz0ic2lkZWZvcm1yb3ciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0id2VibG9nRW50cnlRdWVyeS5sYWJlbC5zdGF0dXMiIC8+OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cmFkaW8gdGhlbWU9InJvbGxlciIgbmFtZT0iYmVhbi5zdGF0dXMiIGxpc3Q9InN0YXR1c09wdGlvbnMiIGxpc3RLZXk9ImtleSIgbGlzdFZhbHVlPSJ2YWx1ZSIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLQotICAgICAgICAgICAgICAgICAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+Ci0gICAgICAgICAgICAgICAgICAgIDwlLS0gc29ydCBieSAtLSU+Ci0KLSAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWZvcm1yb3ciPgotICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ic3RhdHVzIiBjbGFzcz0ic2lkZWZvcm1yb3ciPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0id2VibG9nRW50cnlRdWVyeS5sYWJlbC5zb3J0YnkiIC8+OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cmFkaW8gdGhlbWU9InJvbGxlciIgbmFtZT0iYmVhbi5zb3J0QnkiIGxpc3Q9InNvcnRCeU9wdGlvbnMiIGxpc3RLZXk9ImtleSIgbGlzdFZhbHVlPSJ2YWx1ZSIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KLQotICAgICAgICAgICAgICAgICAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+Ci0gICAgICAgICAgICAgICAgICAgIDwlLS0gc2VhcmNoIGJ1dHRvbiAtLSU+Ci0KLSAgICAgICAgICAgICAgICAgICAgPGJyIC8+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ3dlYmxvZ0VudHJ5UXVlcnkuYnV0dG9uLnF1ZXJ5Jyl9IiAvPgotCi0gICAgICAgICAgICAgICAgPC9zOmZvcm0+Ci0KLSAgICAgICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgIDwvZGl2PiA8IS0tIHNpZGViYXJJbm5lciAtLT4KLQorICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgIDwvZGl2PgogICAgIDwvZGl2PgotPC9kaXY+CisKKyAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIj4KKyAgICAgICAgPGxhYmVsIGZvcj0iYmVhbi5lbmREYXRlU3RyaW5nIiBjbGFzcz0iY29udHJvbC1sYWJlbCI+CisgICAgICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VudHJ5UXVlcnkubGFiZWwuZW5kRGF0ZSIvPgorICAgICAgICA8L2xhYmVsPgorICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC1ncm91cCI+CisKKyAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5lbmREYXRlU3RyaW5nIiByZWFkb25seT0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWU9InNpbXBsZSIgY3NzQ2xhc3M9ImRhdGUtcGlja2VyIGZvcm0tY29udHJvbCIvPgorICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImJlYW4uZW5kRGF0ZVN0cmluZyIgY2xhc3M9ImlucHV0LWdyb3VwLWFkZG9uIGJ0biI+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWNhbGVuZGFyIj48L3NwYW4+CisgICAgICAgICAgICAgICAgPC9sYWJlbD4KKworICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisgICAgPGJyLz4KKworICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKyAgICA8JS0tIGZpbHRlciBieSBzdGF0dXMgLS0lPgorCisgICAgPHM6cmFkaW8gbmFtZT0iYmVhbi5zdGF0dXMiCisgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgnd2VibG9nRW50cnlRdWVyeS5sYWJlbC5zdGF0dXMnKX0iCisgICAgICAgICAgICAgbGlzdD0ic3RhdHVzT3B0aW9ucyIgbGlzdEtleT0ia2V5IiBsaXN0VmFsdWU9InZhbHVlIi8+CisKKyAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisgICAgPCUtLSBzb3J0IGJ5IC0tJT4KKworICAgIDxzOnJhZGlvIG5hbWU9ImJlYW4uc29ydEJ5IgorICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ3dlYmxvZ0VudHJ5UXVlcnkubGFiZWwuc29ydGJ5Jyl9IgorICAgICAgICAgICAgIGxpc3Q9InNvcnRCeU9wdGlvbnMiIGxpc3RLZXk9ImtleSIgbGlzdFZhbHVlPSJ2YWx1ZSIvPgorCisgICAgCisgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorICAgIDwlLS0gZmlsdGVyIGJ1dHRvbiAtLSU+CisKKyAgICA8czpzdWJtaXQgY3NzQ2xhc3M9ImJ0biIgdmFsdWU9IiV7Z2V0VGV4dCgnd2VibG9nRW50cnlRdWVyeS5idXR0b24ucXVlcnknKX0iLz4KKworPC9zOmZvcm0+CisKKzxzY3JpcHQ+CisKKyAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CisgICAgICAgICQoIiNlbnRyaWVzX2JlYW5fc3RhcnREYXRlU3RyaW5nIikuZGF0ZXBpY2tlcigpOworICAgICAgICAkKCIjZW50cmllc19iZWFuX2VuZERhdGVTdHJpbmciKS5kYXRlcGlja2VyKCk7CisgICAgfSk7CisKKzwvc2NyaXB0PgorCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvRW50cnlFZGl0LmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9FbnRyeUVkaXQuanNwCmluZGV4IDdkMDAzODUuLmRmYTc5OWUgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9FbnRyeUVkaXQuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9FbnRyeUVkaXQuanNwCkBAIC0xNywxNiArMTcsMjAgQEAKIC0tJT4KIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KIAotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiBocmVmPSc8czp1cmwgdmFsdWU9Ii9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9qcXVlcnktdWkubWluLmNzcyIvPicgLz4KLQotPHNjcmlwdCBzcmM9IjxzOnVybCB2YWx1ZT0iL3JvbGxlci11aS9zY3JpcHRzL2pxdWVyeS0yLjEuMS5taW4uanMiIC8+Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSc8czp1cmwgdmFsdWU9Ii9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9qcXVlcnktdWkubWluLmpzIi8+Jz48L3NjcmlwdD4KKzwlLS0gUHJldmVudCBhbm5veWluZyBzY3JvbGxpbmcuIHRha2VuIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTA1NDg4MDkvMzU5MTk0NiAtLSU+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgJCgpLnJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgJCgiYVtocmVmPScjJ11bZGF0YS10b2dnbGU9J2NvbGxhcHNlJ10iKS5jbGljayhmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICB9KTsKKyAgICB9KTsKKzwvc2NyaXB0PgogCiA8c3R5bGU+Ci0jdGFnQXV0b0NvbXBsZXRlV3JhcHBlciB7Ci0gICAgd2lkdGg6NDBlbTsgLyogc2V0IHdpZHRoIGhlcmUgb3IgZWxzZSB3aWRnZXQgd2lsbCBleHBhbmQgdG8gZml0IGl0cyBjb250YWluZXIgKi8KLSAgICBwYWRkaW5nLWJvdHRvbToyZW07Ci19CisgICAgI3RhZ0F1dG9Db21wbGV0ZVdyYXBwZXIgeworICAgICAgICB3aWR0aDogNDBlbTsgLyogc2V0IHdpZHRoIGhlcmUgb3IgZWxzZSB3aWRnZXQgd2lsbCBleHBhbmQgdG8gZml0IGl0cyBjb250YWluZXIgKi8KKyAgICAgICAgcGFkZGluZy1ib3R0b206IDJlbTsKKyAgICB9CiA8L3N0eWxlPgogCiA8JS0tIFRpdGxpbmcsIHByb2Nlc3NpbmcgYWN0aW9ucyBkaWZmZXJlbnQgYmV0d2VlbiBlbnRyeSBhZGQgYW5kIGVkaXQgLS0lPgpAQCAtNDAsMzI1ICs0NCw0MDIgQEAKIDwvczplbHNlPgogCiA8cCBjbGFzcz0ic3VidGl0bGUiPgotICAgIDxzOnRleHQgbmFtZT0iJXsjc3VidGl0bGVLZXl9IiA+Ci0gICAgICAgIDxzOnBhcmFtIHZhbHVlPSJhY3Rpb25XZWJsb2cuaGFuZGxlIiAvPgorICAgIDxzOnRleHQgbmFtZT0iJXsjc3VidGl0bGVLZXl9Ij4KKyAgICAgICAgPHM6cGFyYW0gdmFsdWU9ImFjdGlvbldlYmxvZy5oYW5kbGUiLz4KICAgICA8L3M6dGV4dD4KIDwvcD4KIAotPHM6Zm9ybSBpZD0iZW50cnkiPgotCTxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgotICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4uc3RhdHVzIiAvPgorPHM6Zm9ybSBpZD0iZW50cnkiIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLWhvcml6b250YWwiPgorICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0Ii8+CisgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIvPgorICAgIDxzOmhpZGRlbiBuYW1lPSJiZWFuLnN0YXR1cyIvPgogICAgIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2VudHJ5RWRpdCciPgotICAgICAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5pZCIgLz4KKyAgICAgICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4uaWQiLz4KICAgICA8L3M6aWY+CiAKICAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CiAgICAgPCUtLSBUaXRsZSwgY2F0ZWdvcnksIGRhdGVzIGFuZCBvdGhlciBtZXRhZGF0YSAtLSU+CiAKLSAgICA8dGFibGUgY2xhc3M9ImVudHJ5RWRpdFRhYmxlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHN0eWxlPSJ3aWR0aDoxMDAlIj4KKyAgICA8JS0tIHRpdGxlIC0tJT4KKyAgICA8czp0ZXh0ZmllbGQgbGFiZWw9IiV7Z2V0VGV4dCgnd2VibG9nRWRpdC50aXRsZScpfSIgbmFtZT0iYmVhbi50aXRsZSIgbWF4bGVuZ3RoPSIyNTUiIHRhYmluZGV4PSIxIi8+CiAKLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJlbnRyeUVkaXRGb3JtTGFiZWwiPgotICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InRpdGxlIj48czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQudGl0bGUiIC8+PC9sYWJlbD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4udGl0bGUiIHNpemU9IjcwIiBtYXhsZW5ndGg9IjI1NSIgdGFiaW5kZXg9IjEiIHN0eWxlPSJ3aWR0aDo2MCUiLz4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+CisgICAgPCUtLSBwZXJtYWxpbmsgLS0lPgorICAgIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2VudHJ5RWRpdCciPgorICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KIAotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImVudHJ5RWRpdEZvcm1MYWJlbCI+Ci0gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ic3RhdHVzIj48czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQuc3RhdHVzIiAvPjwvbGFiZWw+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkPgorICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJjb250cm9sLWxhYmVsIGNvbC1tZC0zIiBmb3I9ImVudHJ5X2JlYW5fcGVybWFsaW5rIj4KKyAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQucGVybWFMaW5rIi8+CisgICAgICAgICAgICA8L2xhYmVsPgorCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyBjb2wtbWQtOSI+CisgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImZvcm0tY29udHJvbC1zdGF0aWMiPgorICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJiZWFuLnB1Ymxpc2hlZCI+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBpZD0iZW50cnlfYmVhbl9wZXJtYWxpbmsiIGhyZWY9JzxzOnByb3BlcnR5IHZhbHVlPSJlbnRyeS5wZXJtYWxpbmsiIC8+Jz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iZW50cnkucGVybWFsaW5rIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0nPHM6dXJsIHZhbHVlPSIvaW1hZ2VzL2xhdW5jaC1saW5rLnBuZyIvPicvPgorICAgICAgICAgICAgICAgICAgICA8L3M6aWY+CisgICAgICAgICAgICAgICAgICAgIDxzOmVsc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iZW50cnkucGVybWFsaW5rIi8+CisgICAgICAgICAgICAgICAgICAgIDwvczplbHNlPgorICAgICAgICAgICAgICAgIDwvcD4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgIDwvZGl2PgorICAgIDwvczppZj4KKworICAgIDwlLS0gdGFncyAtLSU+CisgICAgPHM6dGV4dGZpZWxkIGxhYmVsPSIle2dldFRleHQoJ3dlYmxvZ0VkaXQudGFncycpfSIgaWQ9InRhZ0F1dG9Db21wbGV0ZSIgbmFtZT0iYmVhbi50YWdzQXNTdHJpbmciCisgICAgICAgICAgICAgICAgIG1heGxlbmd0aD0iMjU1IiB0YWJpbmRleD0iMiIvPgorCisgICAgPCUtLSBjYXRlZ29yeSAtLSU+CisgICAgPHM6c2VsZWN0IGxhYmVsPSIle2dldFRleHQoJ3dlYmxvZ0VkaXQuY2F0ZWdvcnknKX0iIG5hbWU9ImJlYW4uY2F0ZWdvcnlJZCIKKyAgICAgICAgICAgICAgbGlzdD0iY2F0ZWdvcmllcyIgbGlzdEtleT0iaWQiIGxpc3RWYWx1ZT0ibmFtZSIgdGFiaW5kZXg9IjMiLz4KKworICAgIDxzOmlmIHRlc3Q9ImFjdGlvbldlYmxvZy5lbmFibGVNdWx0aUxhbmciPgorICAgICAgICA8JS0tIGxhbmd1YWdlIC8gbG9jYWxlIC0tJT4KKyAgICAgICAgPHM6c2VsZWN0IGxhYmVsPSIle2dldFRleHQoJ3dlYmxvZ0VkaXQubG9jYWxlJyl9IiBuYW1lPSJiZWFuLmxvY2FsZSIKKyAgICAgICAgICAgICAgICAgIGxpc3Q9ImxvY2FsZXNMaXN0IiBsaXN0VmFsdWU9ImRpc3BsYXlOYW1lIiB0YWJpbmRleD0iNCIvPgorICAgIDwvczppZj4KKyAgICA8czplbHNlPgorICAgICAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5sb2NhbGUiLz4KKyAgICA8L3M6ZWxzZT4KKworICAgIDwlLS0gc3RhdHVzIC0tJT4KKyAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgPGxhYmVsIGNsYXNzPSJjb250cm9sLWxhYmVsIGNvbC1tZC0zIiBmb3I9IndlYmxvZ0VkaXQuc3RhdHVzIj48czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQuc3RhdHVzIi8+PC9sYWJlbD4KKworICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyBjb2wtbWQtOSI+CisKKyAgICAgICAgICAgIDxwIGNsYXNzPSJmb3JtLWNvbnRyb2wtc3RhdGljIj4KICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJiZWFuLnB1Ymxpc2hlZCI+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjpncmVlbjsgZm9udC13ZWlnaHQ6Ym9sZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQucHVibGlzaGVkIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgKDxzOnRleHQgbmFtZT0id2VibG9nRWRpdC51cGRhdGVUaW1lIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgPHM6ZGF0ZSBuYW1lPSJlbnRyeS51cGRhdGVUaW1lIiAvPikKKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIGxhYmVsLXN1Y2Nlc3MiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFZGl0LnB1Ymxpc2hlZCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgKDxzOnRleHQgbmFtZT0id2VibG9nRWRpdC51cGRhdGVUaW1lIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8czpkYXRlIG5hbWU9ImVudHJ5LnVwZGF0ZVRpbWUiLz4pCiAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICA8L3M6aWY+CiAgICAgICAgICAgICAgICAgPHM6ZWxzZWlmIHRlc3Q9ImJlYW4uZHJhZnQiPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6b3JhbmdlOyBmb250LXdlaWdodDpib2xkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5kcmFmdCIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICg8czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQudXBkYXRlVGltZSIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOmRhdGUgbmFtZT0iZW50cnkudXBkYXRlVGltZSIgLz4pCisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCBsYWJlbC1pbmZvIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5kcmFmdCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgKDxzOnRleHQgbmFtZT0id2VibG9nRWRpdC51cGRhdGVUaW1lIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8czpkYXRlIG5hbWU9ImVudHJ5LnVwZGF0ZVRpbWUiLz4pCiAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICA8L3M6ZWxzZWlmPgogICAgICAgICAgICAgICAgIDxzOmVsc2VpZiB0ZXN0PSJiZWFuLnBlbmRpbmciPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6b3JhbmdlOyBmb250LXdlaWdodDpib2xkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5wZW5kaW5nIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgKDxzOnRleHQgbmFtZT0id2VibG9nRWRpdC51cGRhdGVUaW1lIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgPHM6ZGF0ZSBuYW1lPSJlbnRyeS51cGRhdGVUaW1lIiAvPikKKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIGxhYmVsLXdhcm5pbmciPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFZGl0LnBlbmRpbmciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICg8czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQudXBkYXRlVGltZSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6ZGF0ZSBuYW1lPSJlbnRyeS51cGRhdGVUaW1lIi8+KQogICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgPC9zOmVsc2VpZj4KICAgICAgICAgICAgICAgICA8czplbHNlaWYgdGVzdD0iYmVhbi5zY2hlZHVsZWQiPgotICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6b3JhbmdlOyBmb250LXdlaWdodDpib2xkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5zY2hlZHVsZWQiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAoPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFZGl0LnVwZGF0ZVRpbWUiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czpkYXRlIG5hbWU9ImVudHJ5LnVwZGF0ZVRpbWUiIC8+KQorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwgbGFiZWwtaW5mbyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQuc2NoZWR1bGVkIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAoPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFZGl0LnVwZGF0ZVRpbWUiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOmRhdGUgbmFtZT0iZW50cnkudXBkYXRlVGltZSIvPikKICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgIDwvczplbHNlaWY+CiAgICAgICAgICAgICAgICAgPHM6ZWxzZT4KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOnJlZDsgZm9udC13ZWlnaHQ6Ym9sZCI+PHM6dGV4dCBuYW1lPSJ3ZWJsb2dFZGl0LnVuc2F2ZWQiIC8+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibGFiZWwgbGFiZWwtZGFuZ2VyIj48czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQudW5zYXZlZCIvPjwvc3Bhbj4KICAgICAgICAgICAgICAgICA8L3M6ZWxzZT4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+CisgICAgICAgICAgICA8L3A+CisKKyAgICAgICAgPC9kaXY+CisKKyAgICA8L2Rpdj4KIAogCi0gICAgICAgIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2VudHJ5RWRpdCciPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZW50cnlFZGl0Rm9ybUxhYmVsIj4KLSAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0icGVybWFsaW5rIj48czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQucGVybWFMaW5rIiAvPjwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImJlYW4ucHVibGlzaGVkIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhIGlkPSJlbnRyeV9iZWFuX3Blcm1hbGluayIgaHJlZj0nPHM6cHJvcGVydHkgdmFsdWU9ImVudHJ5LnBlcm1hbGluayIgLz4nPjxzOnByb3BlcnR5IHZhbHVlPSJlbnRyeS5wZXJtYWxpbmsiIC8+PC9hPgotICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9JzxzOnVybCB2YWx1ZT0iL2ltYWdlcy9sYXVuY2gtbGluay5wbmciLz4nIC8+CisgICAgPGRpdiBjbGFzcz0icGFuZWwtZ3JvdXAiIGlkPSJhY2NvcmRpb24iPgorCisgICAgICAgICAgICA8JS0tIFdlYmxvZyBlZGl0b3IgLS0lPgorCisgICAgICAgIDxzOmluY2x1ZGUgdmFsdWU9IiV7ZWRpdG9yLmpzcFBhZ2V9Ii8+CisKKyAgICAgICAgICAgIDwlLS0gUGx1Z2lucyAtLSU+CisKKyAgICAgICAgPHM6aWYgdGVzdD0iIWVudHJ5UGx1Z2lucy5pc0VtcHR5Ij4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwgcGFuZWwtZGVmYXVsdCIgaWQ9InBhbmVsLXBsdWdpbnMiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWhlYWRpbmciPgorCisgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0icGFuZWwtdGl0bGUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImNvbGxhcHNlZCIgZGF0YS10b2dnbGU9ImNvbGxhcHNlIiBkYXRhLXRhcmdldD0iI2NvbGxhcHNlUGx1Z2lucyIgaHJlZj0iIyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFZGl0LnBsdWdpbnNUb0FwcGx5Ii8+IDwvYT4KKyAgICAgICAgICAgICAgICAgICAgPC9oND4KKworICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImNvbGxhcHNlUGx1Z2lucyIgY2xhc3M9InBhbmVsLWNvbGxhcHNlIGNvbGxhcHNlIj4KKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtYm9keSI+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOmNoZWNrYm94bGlzdCBuYW1lPSJiZWFuLnBsdWdpbnMiIGxpc3Q9ImVudHJ5UGx1Z2lucyIgbGlzdEtleT0ibmFtZSIgbGlzdFZhbHVlPSJuYW1lIi8+CisKKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICA8L3M6aWY+CisKKyAgICAgICAgICAgIDwlLS0gQWR2YW5jZWQgc2V0dGluZ3MgLS0lPgorCisgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIHBhbmVsLWRlZmF1bHQiIGlkPSJwYW5lbC1zZXR0aW5ncyI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkaW5nIj4KKworICAgICAgICAgICAgICAgIDxoNCBjbGFzcz0icGFuZWwtdGl0bGUiPgorICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iY29sbGFwc2VkIiBkYXRhLXRvZ2dsZT0iY29sbGFwc2UiIGRhdGEtcGFyZW50PSIjY29sbGFwc2VBZHZhbmNlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgaHJlZj0iI2NvbGxhcHNlQWR2YW5jZWQiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFZGl0Lm1pc2NTZXR0aW5ncyIvPiA8L2E+CisgICAgICAgICAgICAgICAgPC9oND4KKworICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8ZGl2IGlkPSJjb2xsYXBzZUFkdmFuY2VkIiBjbGFzcz0icGFuZWwtY29sbGFwc2UgY29sbGFwc2UiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiPgorCisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNvbnRyb2wtbGFiZWwgY29sLW1kLTMiPjxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5wdWJUaW1lIi8+PC9sYWJlbD4KKworICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMgY29sLW1kLTkiPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6c2VsZWN0IHRoZW1lPSJzaW1wbGUiIG5hbWU9ImJlYW4uaG91cnMiIGxpc3Q9ImhvdXJzTGlzdCIvPiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6c2VsZWN0IHRoZW1lPSJzaW1wbGUiIG5hbWU9ImJlYW4ubWludXRlcyIgbGlzdD0ibWludXRlc0xpc3QiLz4gOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnNlbGVjdCB0aGVtZT0ic2ltcGxlIiBuYW1lPSJiZWFuLnNlY29uZHMiIGxpc3Q9InNlY29uZHNMaXN0Ii8+IDxici8+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iPHM6dXJsIHZhbHVlPScvcm9sbGVyLXVpL2ltYWdlcy9zcGFjZXIucG5nJyAvPiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD0ic3BhY2VyIiBzdHlsZT0ibWluLWhlaWdodDogMC4zZW0iLz4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LWdyb3VwIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uZGF0ZVN0cmluZyIgcmVhZG9ubHk9InRydWUiIGNzc1N0eWxlPSJ3aWR0aDoxNWVtIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWU9InNpbXBsZSIgY3NzQ2xhc3M9ImRhdGUtcGlja2VyIGZvcm0tY29udHJvbCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJiZWFuLmRhdGVTdHJpbmciIGNsYXNzPSJpbnB1dC1ncm91cC1hZGRvbiBidG4iIHN0eWxlPSJ3aWR0aDozZW0iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tY2FsZW5kYXIiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSJhY3Rpb25XZWJsb2cudGltZVpvbmUiLz4KKworICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgPHM6c2VsZWN0IGxhYmVsPSIle2dldFRleHQoJ3dlYmxvZ0VkaXQuY29tbWVudERheXMnKX0iIG5hbWU9ImJlYW4uY29tbWVudERheXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0PSJjb21tZW50RGF5c0xpc3QiIGxpc3RLZXk9ImtleSIgbGlzdFZhbHVlPSJ2YWx1ZSIvPgorCisgICAgICAgICAgICAgICAgICAgIDxzOmNoZWNrYm94IGxhYmVsPSIle2dldFRleHQoJ3dlYmxvZ0VkaXQucmlnaHRUb0xlZnQnKX0iIG5hbWU9ImJlYW4ucmlnaHRUb0xlZnQiLz4KKworICAgICAgICAgICAgICAgICAgICAgICAgPCUtLSBnbG9iYWwgYWRtaW4gY2FuIHBpbiBpdGVtcyB0byBmcm9udCBwYWdlIHdlYmxvZyAtLSU+CisgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImF1dGhlbnRpY2F0ZWRVc2VyLmhhc0dsb2JhbFBlcm1pc3Npb24oJ2FkbWluJykiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6Y2hlY2tib3ggbGFiZWw9IiV7Z2V0VGV4dCgnd2VibG9nRWRpdC5waW5uZWRUb01haW4nKX0iIG5hbWU9ImJlYW4ucGlubmVkVG9NYWluIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRvcD0iJXtnZXRUZXh0KCd3ZWJsb2dFZGl0LnBpbm5lZFRvTWFpbi50b29sdGlwJyl9Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgICAgICAgICAgPHM6ZWxzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSJlbnRyeS5wZXJtYWxpbmsiIC8+Ci0gICAgICAgICAgICAgICAgICAgIDwvczplbHNlPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3M6aWY+CiAKLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJlbnRyeUVkaXRGb3JtTGFiZWwiPgotICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImNhdGVnb3J5SWQiPjxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5jYXRlZ29yeSIgLz48L2xhYmVsPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi5jYXRlZ29yeUlkIiBsaXN0PSJjYXRlZ29yaWVzIiBsaXN0S2V5PSJpZCIgbGlzdFZhbHVlPSJuYW1lIiBzaXplPSIxIiAvPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIGxhYmVsPSIle2dldFRleHQoJ3dlYmxvZ0VkaXQuc2VhcmNoRGVzY3JpcHRpb24nKX0iIG5hbWU9ImJlYW4uc2VhcmNoRGVzY3JpcHRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9IjI1NSIgdG9vbHRpcD0iJXtnZXRUZXh0KCd3ZWJsb2dFZGl0LnNlYXJjaERlc2NyaXB0aW9uLnRvb2x0aXAnKX0iLz4KIAotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImVudHJ5RWRpdEZvcm1MYWJlbCI+Ci0gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0idGl0bGUiPjxzOnRleHQgbmFtZT0id2VibG9nRWRpdC50YWdzIiAvPjwvbGFiZWw+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBpZD0idGFnQXV0b0NvbXBsZXRlIiBjc3NDbGFzcz0iZW50cnlFZGl0VGFncyIgbmFtZT0iYmVhbi50YWdzQXNTdHJpbmciIHNpemU9IjcwIiBtYXhsZW5ndGg9IjI1NSIgdGFiaW5kZXg9IjMiIHN0eWxlPSJ3aWR0aDozMCUiLz4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBsYWJlbD0iJXtnZXRUZXh0KCd3ZWJsb2dFZGl0LmVuY2xvc3VyZVVSTCcpfSIgbmFtZT0iYmVhbi5lbmNsb3N1cmVVUkwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9IjI1NSIgdG9vbHRpcD0iJXtnZXRUZXh0KCd3ZWJsb2dFZGl0LmVuY2xvc3VyZVVSTC50b29sdGlwJyl9Ii8+CiAKLSAgICAgICAgPHM6aWYgdGVzdD0iYWN0aW9uV2VibG9nLmVuYWJsZU11bHRpTGFuZyI+Ci0gICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImVudHJ5RWRpdEZvcm1MYWJlbCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJsb2NhbGUiPjxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5sb2NhbGUiIC8+PC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHM6c2VsZWN0IG5hbWU9ImJlYW4ubG9jYWxlIiBzaXplPSIxIiBsaXN0PSJsb2NhbGVzTGlzdCIgbGlzdFZhbHVlPSJkaXNwbGF5TmFtZSIgLz4KLSAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgPC9zOmlmPgotICAgICAgICA8czplbHNlPgotICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJiZWFuLmxvY2FsZSIvPgotICAgICAgICA8L3M6ZWxzZT4KKyAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iYWN0aW9uTmFtZSA9PSAnZW50cnlFZGl0JyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSIhYmVhbi5lbmNsb3N1cmVVUkwuaXNFbXB0eSgpIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQuZW5jbG9zdXJlVHlwZSIvPjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0nZW50cnkuZmluZEVudHJ5QXR0cmlidXRlKCJhdHRfbWVkaWFjYXN0X3R5cGUiKScvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5lbmNsb3N1cmVMZW5ndGgiLz46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9J2VudHJ5LmZpbmRFbnRyeUF0dHJpYnV0ZSgiYXR0X21lZGlhY2FzdF9sZW5ndGgiKScvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgorICAgICAgICAgICAgICAgICAgICA8L3M6aWY+CisKKyAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPC9kaXY+CisKKyAgICA8L2Rpdj4KIAogCiAgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgotICAgIDwlLS0gV2VibG9nIGVkaXRvciAtLSU+CisgICAgPCUtLSBUaGUgYnV0dG9uIGJveCAtLSU+CiAKLSAgICA8czppbmNsdWRlIHZhbHVlPSIle2VkaXRvci5qc3BQYWdlfSIgLz4KKyAgICA8JS0tIHNhdmUgZHJhZnQgLS0lPgorICAgIDxzOnN1Ym1pdCBjc3NDbGFzcz0iYnRuIGJ0bi13YXJuaW5nIgorICAgICAgICAgICAgICB2YWx1ZT0iJXtnZXRUZXh0KCd3ZWJsb2dFZGl0LnNhdmUnKX0iCisgICAgICAgICAgICAgIGFjdGlvbj0iJXsjbWFpbkFjdGlvbn0hc2F2ZURyYWZ0Ii8+CiAKLSAgICA8YnIgLz4KKyAgICA8czppZiB0ZXN0PSJhY3Rpb25OYW1lID09ICdlbnRyeUVkaXQnIj4KIAotICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KLSAgICA8JS0tIHBsdWdpbiBjaG9vc2VyIC0tJT4KKyAgICAgICAgPCUtLSBwcmV2aWV3IG1vZGUgLS0lPgorICAgICAgICA8aW5wdXQgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgdHlwZT0iYnV0dG9uIiBuYW1lPSJmdWxsUHJldmlldyIKKyAgICAgICAgICAgICAgIHZhbHVlPSI8czp0ZXh0IG5hbWU9J3dlYmxvZ0VkaXQuZnVsbFByZXZpZXdNb2RlJyAvPiIKKyAgICAgICAgICAgICAgIG9uY2xpY2s9ImZ1bGxQcmV2aWV3TW9kZSgpIi8+CisgICAgPC9zOmlmPgorICAgIDxzOmlmIHRlc3Q9InVzZXJBbkF1dGhvciI+CiAKLSAgICA8czppZiB0ZXN0PSIhZW50cnlQbHVnaW5zLmlzRW1wdHkiPgotICAgICAgICA8ZGl2IGlkPSJwbHVnaW5Db250cm9sVG9nZ2xlIiBjbGFzcz0iY29udHJvbFRvZ2dsZSI+Ci0gICAgICAgICAgICA8c3BhbiBpZD0iaXBsdWdpbkNvbnRyb2wiPis8L3NwYW4+Ci0gICAgICAgICAgICA8YSBjbGFzcz0iY29udHJvbFRvZ2dsZSIgb25jbGljaz0iamF2YXNjcmlwdDp0b2dnbGVDb250cm9sKCdwbHVnaW5Db250cm9sVG9nZ2xlJywncGx1Z2luQ29udHJvbCcpIj4KLSAgICAgICAgICAgIDxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5wbHVnaW5zVG9BcHBseSIgLz48L2E+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8ZGl2IGlkPSJwbHVnaW5Db250cm9sIiBjbGFzcz0ibWlzY0NvbnRyb2wiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgotICAgICAgICAgICAgPHM6Y2hlY2tib3hsaXN0IHRoZW1lPSJyb2xsZXIiIG5hbWU9ImJlYW4ucGx1Z2lucyIgbGlzdD0iZW50cnlQbHVnaW5zIiBsaXN0S2V5PSJuYW1lIiBsaXN0VmFsdWU9Im5hbWUiIC8+Ci0gICAgICAgIDwvZGl2PgorICAgICAgICA8JS0tIHB1Ymxpc2ggLS0lPgorICAgICAgICA8czpzdWJtaXQgY3NzQ2xhc3M9ImJ0biBidG4tc3VjY2VzcyIKKyAgICAgICAgICAgICAgICAgIHZhbHVlPSIle2dldFRleHQoJ3dlYmxvZ0VkaXQucG9zdCcpfSIKKyAgICAgICAgICAgICAgICAgIGFjdGlvbj0iJXsjbWFpbkFjdGlvbn0hcHVibGlzaCIvPgorICAgIDwvczppZj4KKyAgICA8czplbHNlPgorCisgICAgICAgIDwlLS0gc3VibWl0IGZvciByZXZpZXcgLS0lPgorICAgICAgICA8czpzdWJtaXQgY3NzQ2xhc3M9ImJ0biBidG4taW5mbyIKKyAgICAgICAgICAgICAgICAgIHZhbHVlPSIle2dldFRleHQoJ3dlYmxvZ0VkaXQuc3VibWl0Rm9yUmV2aWV3Jyl9IgorICAgICAgICAgICAgICAgICAgYWN0aW9uPSIleyNtYWluQWN0aW9ufSFwdWJsaXNoIi8+CisgICAgPC9zOmVsc2U+CisKKyAgICA8czppZiB0ZXN0PSJhY3Rpb25OYW1lID09ICdlbnRyeUVkaXQnIj4KKworICAgICAgICA8JS0tIGRlbGV0ZSAtLSU+CisgICAgICAgIDxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodCI+CisgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImJ0biBidG4tZGFuZ2VyIiB0eXBlPSJidXR0b24iCisgICAgICAgICAgICAgICAgICAgdmFsdWU9IjxzOnRleHQgbmFtZT0nd2VibG9nRWRpdC5kZWxldGVFbnRyeScvPiIKKyAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJzaG93RGVsZXRlTW9kYWwoJzxzOnByb3BlcnR5IHZhbHVlPSJlbnRyeS5pZCIgLz4nLCAnPHM6cHJvcGVydHkgdmFsdWU9ImVudHJ5LnRpdGxlIi8+JyApIj4KKyAgICAgICAgPC9zcGFuPgogICAgIDwvczppZj4KIAogCi0gICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgotICAgIDwlLS0gYWR2YW5jZWQgc2V0dGluZ3MgIC0tJT4KLQotICAgIDxkaXYgaWQ9Im1pc2NDb250cm9sVG9nZ2xlIiBjbGFzcz0iY29udHJvbFRvZ2dsZSI+Ci0gICAgICAgIDxzcGFuIGlkPSJpbWlzY0NvbnRyb2wiPis8L3NwYW4+Ci0gICAgICAgIDxhIGNsYXNzPSJjb250cm9sVG9nZ2xlIiBvbmNsaWNrPSJqYXZhc2NyaXB0OnRvZ2dsZUNvbnRyb2woJ21pc2NDb250cm9sVG9nZ2xlJywnbWlzY0NvbnRyb2wnKSI+Ci0gICAgICAgIDxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5taXNjU2V0dGluZ3MiIC8+PC9hPgotICAgIDwvZGl2PgotICAgIDxkaXYgaWQ9Im1pc2NDb250cm9sIiBjbGFzcz0ibWlzY0NvbnRyb2wiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgotCi0gICAgICAgIDxsYWJlbCBmb3I9ImxpbmsiPjxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5wdWJUaW1lIiAvPjwvbGFiZWw+Ci0gICAgICAgIDxkaXY+Ci0gICAgICAgICAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi5ob3VycyIgbGlzdD0iaG91cnNMaXN0IiAvPgotICAgICAgICAgICAgOgotICAgICAgICAgICAgPHM6c2VsZWN0IG5hbWU9ImJlYW4ubWludXRlcyIgbGlzdD0ibWludXRlc0xpc3QiIC8+Ci0gICAgICAgICAgICA6Ci0gICAgICAgICAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi5zZWNvbmRzIiBsaXN0PSJzZWNvbmRzTGlzdCIgLz4KLSAgICAgICAgICAgICZuYnNwOyZuYnNwOwotICAgICAgICAgICAgPHNjcmlwdD4KLSAgICAgICAgICAgICQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgJCggIiNlbnRyeV9iZWFuX2RhdGVTdHJpbmciICkuZGF0ZXBpY2tlcih7Ci0gICAgICAgICAgICAgICAgICAgIHNob3dPbjogImJ1dHRvbiIsCi0gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkltYWdlOiAiLi4vLi4vaW1hZ2VzL2NhbGVuZGFyLnBuZyIsCi0gICAgICAgICAgICAgICAgICAgIGJ1dHRvbkltYWdlT25seTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgY2hhbmdlTW9udGg6IHRydWUsCi0gICAgICAgICAgICAgICAgICAgIGNoYW5nZVllYXI6IHRydWUKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgPC9zY3JpcHQ+Ci0gICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5kYXRlU3RyaW5nIiBzaXplPSIxMiIgcmVhZG9ubHk9InRydWUiLz4KLSAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSJhY3Rpb25XZWJsb2cudGltZVpvbmUiIC8+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICA8YnIgLz4KLQotICAgICAgICA8czpjaGVja2JveCBuYW1lPSJiZWFuLmFsbG93Q29tbWVudHMiIC8+Ci0gICAgICAgIDxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5hbGxvd0NvbW1lbnRzIiAvPgotICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQuY29tbWVudERheXMiIC8+Ci0gICAgICAgIDxzOnNlbGVjdCBuYW1lPSJiZWFuLmNvbW1lbnREYXlzIiBsaXN0PSJjb21tZW50RGF5c0xpc3QiIHNpemU9IjEiIGxpc3RLZXk9ImtleSIgbGlzdFZhbHVlPSJ2YWx1ZSIgLz4KLSAgICAgICAgPGJyIC8+Ci0KLSAgICAgICAgPHM6Y2hlY2tib3ggbmFtZT0iYmVhbi5yaWdodFRvTGVmdCIgLz4KLSAgICAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFZGl0LnJpZ2h0VG9MZWZ0IiAvPgotICAgICAgICA8YnIgLz4KLQotICAgICAgICA8czppZiB0ZXN0PSJhdXRoZW50aWNhdGVkVXNlci5oYXNHbG9iYWxQZXJtaXNzaW9uKCdhZG1pbicpIj4KLSAgICAgICAgICAgIDxzOmNoZWNrYm94IG5hbWU9ImJlYW4ucGlubmVkVG9NYWluIiAvPgotICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFZGl0LnBpbm5lZFRvTWFpbiIgLz48dGFnczpoZWxwIGtleT0id2VibG9nRWRpdC5waW5uZWRUb01haW4udG9vbHRpcCIvPgotICAgICAgICAgICAgPGJyIC8+Ci0gICAgICAgIDwvczppZj4KLSAgICAgICAgPGJyIC8+Ci0KLQkJPHRhYmxlPgotCQkJPHRyPgotCQkJCTx0ZD48czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQuc2VhcmNoRGVzY3JpcHRpb24iIC8+Ojx0YWdzOmhlbHAga2V5PSJ3ZWJsb2dFZGl0LnNlYXJjaERlc2NyaXB0aW9uLnRvb2x0aXAiLz48L3RkPgotCQkJCTx0ZD48czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5zZWFyY2hEZXNjcmlwdGlvbiIgc2l6ZT0iNjAiIG1heGxlbmd0aD0iMjU1IiBzdHlsZT0id2lkdGg6MTAwJSIvPiA8L3RkPgotCQkJPC90cj4KLSAgICAgICAgICAgIDx0cj4KLQkJCQk8dGQ+PHM6dGV4dCBuYW1lPSJ3ZWJsb2dFZGl0LmVuY2xvc3VyZVVSTCIgLz46PHRhZ3M6aGVscCBrZXk9IndlYmxvZ0VkaXQuZW5jbG9zdXJlVVJMLnRvb2x0aXAiLz48L3RkPgotCQkJCTx0ZD48czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5lbmNsb3N1cmVVUkwiIHNpemU9IjQwIiBtYXhsZW5ndGg9IjI1NSIgc3R5bGU9IndpZHRoOjEwMCUiLz48L3RkPgotCQkJPC90cj4KLSAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2VudHJ5RWRpdCciPgotICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZD48czppZiB0ZXN0PSJiZWFuLmVuY2xvc3VyZVVSTCAhPSBudWxsIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5lbmNsb3N1cmVUeXBlIiAvPjogPHM6cHJvcGVydHkgdmFsdWU9J2VudHJ5LmZpbmRFbnRyeUF0dHJpYnV0ZSgiYXR0X21lZGlhY2FzdF90eXBlIiknIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQuZW5jbG9zdXJlTGVuZ3RoIiAvPjogPHM6cHJvcGVydHkgdmFsdWU9J2VudHJ5LmZpbmRFbnRyeUF0dHJpYnV0ZSgiYXR0X21lZGlhY2FzdF9sZW5ndGgiKScgLz4KLSAgICAgICAgICAgICAgICAgICAgPC9zOmlmPjwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwvczppZj4KLQkJPC90YWJsZT4KLSAgICA8L2Rpdj4KLQotCi0gICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgotICAgIDwlLS0gdGhlIGJ1dHRvbiBib3ggLS0lPgotCi0gICAgPGJyPgotICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wiPgotICAgICAgICA8c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OjdweCI+Ci0gICAgICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnd2VibG9nRWRpdC5zYXZlJyl9IiBhY3Rpb249IiV7I21haW5BY3Rpb259IXNhdmVEcmFmdCIgLz4KLSAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2VudHJ5RWRpdCciPgotICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIG5hbWU9ImZ1bGxQcmV2aWV3IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9IjxzOnRleHQgbmFtZT0nd2VibG9nRWRpdC5mdWxsUHJldmlld01vZGUnIC8+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jbGljaz0iZnVsbFByZXZpZXdNb2RlKCkiIC8+Ci0gICAgICAgICAgICA8L3M6aWY+Ci0gICAgICAgICAgICA8czppZiB0ZXN0PSJ1c2VyQW5BdXRob3IiPgotICAgICAgICAgICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCd3ZWJsb2dFZGl0LnBvc3QnKX0iIGFjdGlvbj0iJXsjbWFpbkFjdGlvbn0hcHVibGlzaCIvPgotICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgPHM6ZWxzZT4KLSAgICAgICAgICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnd2VibG9nRWRpdC5zdWJtaXRGb3JSZXZpZXcnKX0iIGFjdGlvbj0iJXsjbWFpbkFjdGlvbn0hcHVibGlzaCIvPgotICAgICAgICAgICAgPC9zOmVsc2U+Ci0gICAgICAgIDwvc3Bhbj4KLQotICAgICAgICA8czppZiB0ZXN0PSJhY3Rpb25OYW1lID09ICdlbnRyeUVkaXQnIj4KLSAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodCI+Ci0gICAgICAgICAgICAgICAgPHM6dXJsIHZhcj0icmVtb3ZlVXJsIiBhY3Rpb249ImVudHJ5UmVtb3ZlIj4KLSAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iYWN0aW9uV2VibG9nLmhhbmRsZSIgLz4KLSAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0icmVtb3ZlSWQiIHZhbHVlPSIle2VudHJ5LmlkfSIgLz4KLSAgICAgICAgICAgICAgICA8L3M6dXJsPgotICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSI8czp0ZXh0IG5hbWU9J3dlYmxvZ0VkaXQuZGVsZXRlRW50cnknLz4iIG9uY2xpY2s9IndpbmRvdy5sb2NhdGlvbj0nPHM6cHJvcGVydHkgdmFsdWU9InJlbW92ZVVybCIgZXNjYXBlSHRtbD0iZmFsc2UiIC8+JyIgLz4KLSAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgPC9zOmlmPgotICAgIDwvZGl2PgotCi0gICAgCi0gICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgotICAgIDwlLS0gVHJhY2tiYWNrIGNvbnRyb2wgLS0lPgorICAgIDwlLS0gVHJhY2tiYWNrIGNvbnRyb2wKICAgICA8czppZiB0ZXN0PSJhY3Rpb25OYW1lID09ICdlbnRyeUVkaXQnICYmIHVzZXJBbkF1dGhvciI+Ci0gICAgICAgIDxiciAvPgotICAgICAgICA8aDI+PHM6dGV4dCBuYW1lPSJ3ZWJsb2dFZGl0LnRyYWNrYmFjayIgLz48L2gyPgotICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQudHJhY2tiYWNrVXJsIiAvPgotICAgICAgICA8YnIgLz4KKyAgICAgICAgPGJyLz4KKyAgICAgICAgPGgyPjxzOnRleHQgbmFtZT0id2VibG9nRWRpdC50cmFja2JhY2siLz48L2gyPgorICAgICAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQudHJhY2tiYWNrVXJsIi8+CisgICAgICAgIDxici8+CiAgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJ0cmFja2JhY2tVcmwiIHNpemU9IjgwIiBtYXhsZW5ndGg9IjI1NSIgc3R5bGU9IndpZHRoOjM1JSIvPgogCi0gICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCd3ZWJsb2dFZGl0LnNlbmRUcmFja2JhY2snKX0iIGFjdGlvbj0iZW50cnlFZGl0IXRyYWNrYmFjayIgLz4KKyAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ3dlYmxvZ0VkaXQuc2VuZFRyYWNrYmFjaycpfSIgYWN0aW9uPSJlbnRyeUVkaXQhdHJhY2tiYWNrIi8+CiAgICAgPC9zOmlmPgorICAgIC0tJT4KIAogPC9zOmZvcm0+CiAKLTxzY3JpcHQ+Ci1mdW5jdGlvbiBmdWxsUHJldmlld01vZGUoKSB7Ci0gICAgd2luZG93Lm9wZW4oJzxzOnByb3BlcnR5IHZhbHVlPSJwcmV2aWV3VVJMIiAvPicpOwotfQogCi0vL0dldCBjb29raWUgdG8gZGV0ZXJtaW5lIHN0YXRlIG9mIGNvbnRyb2wKLWlmIChnZXRDb29raWUoJ2NvbnRyb2xfbWlzY0NvbnRyb2wnKSAhPSBudWxsKSB7Ci0gICAgaWYoZ2V0Q29va2llKCdjb250cm9sX21pc2NDb250cm9sJykgPT0gJ3RydWUnKXsKLSAgICAgICAgdG9nZ2xlKCdtaXNjQ29udHJvbCcpOwotICAgICAgICB0b2dnbGVQbHVzTWludXMoJ2ltaXNjQ29udHJvbCcpOwotICAgIH0KLX0KLWlmIChnZXRDb29raWUoJ2NvbnRyb2xfcGx1Z2luQ29udHJvbCcpICE9IG51bGwpIHsKLSAgICBpZihnZXRDb29raWUoJ2NvbnRyb2xfcGx1Z2luQ29udHJvbCcpID09ICd0cnVlJyl7Ci0gICAgICAgIHRvZ2dsZSgncGx1Z2luQ29udHJvbCcpOwotICAgICAgICB0b2dnbGVQbHVzTWludXMoJ2lwbHVnaW5Db250cm9sJyk7Ci0gICAgfQotfQotJChmdW5jdGlvbigpIHsKLWZ1bmN0aW9uIHNwbGl0KCB2YWwgKSB7Ci0gICAgcmV0dXJuIHZhbC5zcGxpdCggLyBccyovICk7Ci19Ci1mdW5jdGlvbiBleHRyYWN0TGFzdCggdGVybSApIHsKLSAgICByZXR1cm4gc3BsaXQoIHRlcm0gKS5wb3AoKTsKLX0KLSQoICIjdGFnQXV0b0NvbXBsZXRlIiApCi0gICAgLy8gZG9uJ3QgbmF2aWdhdGUgYXdheSBmcm9tIHRoZSBmaWVsZCBvbiB0YWIgd2hlbiBzZWxlY3RpbmcgYW4gaXRlbQotICAgIC5iaW5kKCAia2V5ZG93biIsIGZ1bmN0aW9uKCBldmVudCApIHsKLSAgICAgICAgaWYgKCBldmVudC5rZXlDb2RlID09PSAkLnVpLmtleUNvZGUuVEFCICYmICQoIHRoaXMgKS5hdXRvY29tcGxldGUoICJpbnN0YW5jZSIgKS5tZW51LmFjdGl2ZSApIHsKLSAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgICAgIH0KLSAgICB9KQotICAgIC5hdXRvY29tcGxldGUoewotICAgICAgICBkZWxheTogNTAwLAotICAgICAgICBzb3VyY2U6IGZ1bmN0aW9uKHJlcXVlc3QsIHJlc3BvbnNlKSB7Ci0gICAgICAgICAgICAkLmdldEpTT04oIjxzOnByb3BlcnR5IHZhbHVlPSdqc29uQXV0b2NvbXBsZXRlVXJsJyAvPiIsIHsgZm9ybWF0OiAnanNvbicsIHByZWZpeDogZXh0cmFjdExhc3QoIHJlcXVlc3QudGVybSApIH0sCi0gICAgICAgICAgICBmdW5jdGlvbihkYXRhKSB7Ci0gICAgICAgICAgICAgICAgcmVzcG9uc2UoJC5tYXAoZGF0YS50YWdjb3VudHMsIGZ1bmN0aW9uIChkYXRhVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRhVmFsdWUudGFnCi0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICAgICAgfSkpCi0gICAgICAgICAgICB9KQotICAgICAgICB9LAotICAgICAgICBmb2N1czogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAvLyBwcmV2ZW50IHZhbHVlIGluc2VydGVkIG9uIGZvY3VzCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0sCi0gICAgICAgIHNlbGVjdDogZnVuY3Rpb24oIGV2ZW50LCB1aSApIHsKLSAgICAgICAgICAgIHZhciB0ZXJtcyA9IHNwbGl0KCB0aGlzLnZhbHVlICk7Ci0gICAgICAgICAgICAvLyByZW1vdmUgdGhlIGN1cnJlbnQgaW5wdXQKLSAgICAgICAgICAgIHRlcm1zLnBvcCgpOwotICAgICAgICAgICAgLy8gYWRkIHRoZSBzZWxlY3RlZCBpdGVtCi0gICAgICAgICAgICB0ZXJtcy5wdXNoKCB1aS5pdGVtLnZhbHVlICk7Ci0gICAgICAgICAgICAvLyBhZGQgcGxhY2Vob2xkZXIgdG8gZ2V0IHRoZSBzcGFjZSBhdCB0aGUgZW5kCi0gICAgICAgICAgICB0ZXJtcy5wdXNoKCAiIiApOwotICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRlcm1zLmpvaW4oICIgIiApOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Cis8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisKKzwlLS0gZGVsZXRlIGJsb2dyb2xsIGNvbmZpcm1hdGlvbiBtb2RhbCAtLSU+CisKKzxkaXYgaWQ9ImRlbGV0ZS1lbnRyeS1tb2RhbCIgY2xhc3M9Im1vZGFsIGZhZGUgZGVsZXRlLWVudHJ5LW1vZGFsIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyI+CisKKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtbGciPgorCisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgorCisgICAgICAgICAgICA8czpzZXQgdmFyPSJkZWxldGVBY3Rpb24iPmVudHJ5UmVtb3ZlVmlhTGlzdCFyZW1vdmU8L3M6c2V0PgorCisgICAgICAgICAgICA8czpmb3JtIGFjdGlvbj0iJXsjZGVsZXRlQWN0aW9ufSIgdGhlbWU9ImJvb3RzdHJhcCIgY3NzQ2xhc3M9ImZvcm0taG9yaXpvbnRhbCI+CisgICAgICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9InNhbHQiLz4KKyAgICAgICAgICAgICAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIi8+CisgICAgICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9InJlbW92ZUlkIiBpZD0icmVtb3ZlSWQiLz4KKworICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLXRpdGxlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxoMz48czp0ZXh0IG5hbWU9IndlYmxvZ0VudHJ5UmVtb3ZlLnJlbW92ZVdlYmxvZ0VudHJ5Ii8+PC9oMz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzOnRleHQgbmFtZT0id2VibG9nRW50cnlSZW1vdmUuYXJlWW91U3VyZSIvPjwvcD4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KKworICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY29sLXNtLTMgY29udHJvbC1sYWJlbCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVJlbW92ZS5lbnRyeVRpdGxlIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTkgY29udHJvbHMiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmb3JtLWNvbnRyb2wtc3RhdGljIiBzdHlsZT0icGFkZGluZy10b3A6MHB4IiBpZD0icG9zdFRpdGxlTGFiZWwiPjwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iY29sLXNtLTMgY29udHJvbC1sYWJlbCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVJlbW92ZS5lbnRyeUlkIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgorICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLXNtLTkgY29udHJvbHMiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJmb3JtLWNvbnRyb2wtc3RhdGljIiBzdHlsZT0icGFkZGluZy10b3A6MHB4IiBpZD0icG9zdElkTGFiZWwiPjwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KKyAgICAgICAgICAgICAgICAgICAgPHM6c3VibWl0IGNzc0NsYXNzPSJidG4iIHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMueWVzJyl9Ii8+CisgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGJ0bi1wcmltYXJ5IiBkYXRhLWRpc21pc3M9Im1vZGFsIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iZ2VuZXJpYy5ubyIvPgorICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgPC9zOmZvcm0+CisKKyAgICAgICAgPC9kaXY+CisKKyAgICA8L2Rpdj4KKworPC9kaXY+CisKKzwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKworPHNjcmlwdD4KKworICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgJCgiI2VudHJ5X2JlYW5fZGF0ZVN0cmluZyIpLmRhdGVwaWNrZXIoKTsKICAgICB9KTsKLX0pOworCisgICAgZnVuY3Rpb24gZnVsbFByZXZpZXdNb2RlKCkgeworICAgICAgICB3aW5kb3cub3BlbignPHM6cHJvcGVydHkgdmFsdWU9InByZXZpZXdVUkwiIC8+Jyk7CisgICAgfQorCisgICAgJChmdW5jdGlvbiAoKSB7CisgICAgICAgIGZ1bmN0aW9uIHNwbGl0KHZhbCkgeworICAgICAgICAgICAgcmV0dXJuIHZhbC5zcGxpdCgvIFxzKi8pOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZXh0cmFjdExhc3QodGVybSkgeworICAgICAgICAgICAgcmV0dXJuIHNwbGl0KHRlcm0pLnBvcCgpOworICAgICAgICB9CisKKyAgICAgICAgJCgiI3RhZ0F1dG9Db21wbGV0ZSIpCisgICAgICAgIC8vIGRvbid0IG5hdmlnYXRlIGF3YXkgZnJvbSB0aGUgZmllbGQgb24gdGFiIHdoZW4gc2VsZWN0aW5nIGFuIGl0ZW0KKyAgICAgICAgICAgIC5iaW5kKCJrZXlkb3duIiwgZnVuY3Rpb24gKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09ICQudWkua2V5Q29kZS5UQUIgJiYgJCh0aGlzKS5hdXRvY29tcGxldGUoImluc3RhbmNlIikubWVudS5hY3RpdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KQorICAgICAgICAgICAgLmF1dG9jb21wbGV0ZSh7CisgICAgICAgICAgICAgICAgZGVsYXk6IDUwMCwKKyAgICAgICAgICAgICAgICBzb3VyY2U6IGZ1bmN0aW9uIChyZXF1ZXN0LCByZXNwb25zZSkgeworICAgICAgICAgICAgICAgICAgICAkLmdldEpTT04oIjxzOnByb3BlcnR5IHZhbHVlPSdqc29uQXV0b2NvbXBsZXRlVXJsJyAvPiIsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICdqc29uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXg6IGV4dHJhY3RMYXN0KHJlcXVlc3QudGVybSkKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlKCQubWFwKGRhdGEudGFnY291bnRzLCBmdW5jdGlvbiAoZGF0YVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZGF0YVZhbHVlLnRhZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKQorICAgICAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIGZvY3VzOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgdmFsdWUgaW5zZXJ0ZWQgb24gZm9jdXMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgc2VsZWN0OiBmdW5jdGlvbiAoZXZlbnQsIHVpKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciB0ZXJtcyA9IHNwbGl0KHRoaXMudmFsdWUpOworICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGN1cnJlbnQgaW5wdXQKKyAgICAgICAgICAgICAgICAgICAgdGVybXMucG9wKCk7CisgICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgc2VsZWN0ZWQgaXRlbQorICAgICAgICAgICAgICAgICAgICB0ZXJtcy5wdXNoKHVpLml0ZW0udmFsdWUpOworICAgICAgICAgICAgICAgICAgICAvLyBhZGQgcGxhY2Vob2xkZXIgdG8gZ2V0IHRoZSBzcGFjZSBhdCB0aGUgZW5kCisgICAgICAgICAgICAgICAgICAgIHRlcm1zLnB1c2goIiIpOworICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGVybXMuam9pbigiICIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBmdW5jdGlvbiBzaG93RGVsZXRlTW9kYWwocG9zdElkLCBwb3N0VGl0bGUpIHsKKyAgICAgICAgJCgnI3Bvc3RJZExhYmVsJykuaHRtbChwb3N0SWQpOworICAgICAgICAkKCcjcG9zdFRpdGxlTGFiZWwnKS5odG1sKHBvc3RUaXRsZSk7CisgICAgICAgICQoJyNyZW1vdmVJZCcpLnZhbChwb3N0SWQpOworICAgICAgICAkKCcjZGVsZXRlLWVudHJ5LW1vZGFsJykubW9kYWwoe3Nob3c6IHRydWV9KTsKKyAgICB9CisKIDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0VudHJ5RWRpdG9yLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9FbnRyeUVkaXRvci5qc3AKaW5kZXggNTA1MGIyOS4uNTEwNzllNiAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0VudHJ5RWRpdG9yLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvRW50cnlFZGl0b3IuanNwCkBAIC0xOCwxODUgKzE4LDE2MyBAQAogPCUtLSBUaGlzIHBhZ2UgaXMgZGVzaWduZWQgdG8gYmUgaW5jbHVkZWQgaW4gRW50cnlFZGl0LmpzcCAtLSU+CiA8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+CiAKKwogPCUtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0lPgotPCUtLSBUZXh0IGVkaXRvcnMgLS0lPgogCi08cCBjbGFzcz0idG9wbGFiZWwiPgorPCUtLSBjb250ZW50IC0tJT4KKzxzOnRleHRhcmVhIGlkPSJlZGl0X2NvbnRlbnQiIG5hbWU9ImJlYW4udGV4dCIKKyAgICAgICAgICAgIHRhYmluZGV4PSI1IiByb3dzPSIxOCIgY3NzQ2xhc3M9ImNvbC1zbS0xMiIgdGhlbWU9InNpbXBsZSIvPgogCi08L3A+Cis8YSBocmVmPSIjIiBvbkNsaWNrPSJvbkNsaWNrTWVkaWFGaWxlSW5zZXJ0KCk7Ij48czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQuaW5zZXJ0TWVkaWFGaWxlIi8+PC9hPjxici8+Cis8aW1nIHNyYz0iPHM6dXJsIHZhbHVlPScvcm9sbGVyLXVpL2ltYWdlcy9zcGFjZXIucG5nJyAvPiIgYWx0PSJzcGFjZXIiIHN0eWxlPSJtaW4taGVpZ2h0OiAyZW0iLz4KIAotPGRpdiBpZD0iYWNjb3JkaW9uIj4KLSAgICA8aDM+Ci0gICAgICAgIDxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5jb250ZW50IiAvPgotICAgICAgICA8c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6bm9ybWFsO2Zsb2F0OnJpZ2h0OyI+Ci0gICAgICAgICAgICA8YSBocmVmPSIjIiBvbkNsaWNrPSJvbkNsaWNrQWRkSW1hZ2UoKTsiPjxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5pbnNlcnRNZWRpYUZpbGUiIC8+PC9hPgotICAgICAgICA8L3NwYW4+Ci0gICAgPC9oMz4KLSAgICA8ZGl2PgotICAgICAgICA8czp0ZXh0YXJlYSBpZD0iZWRpdF9jb250ZW50IiBuYW1lPSJiZWFuLnRleHQiIGNvbHM9Ijc1IiByb3dzPSIyNSIgY3NzU3R5bGU9IndpZHRoOiAxMDAlIiB0YWJpbmRleD0iNSIvPgorPCUtLSBzdW1tYXJ5IC0tJT4KKworPGRpdiBjbGFzcz0icGFuZWwgcGFuZWwtZGVmYXVsdCIgaWQ9InBhbmVsLXN1bW1hcnkiPgorICAgIDxkaXYgY2xhc3M9InBhbmVsLWhlYWRpbmciPgorCisgICAgICAgIDxoNCBjbGFzcz0icGFuZWwtdGl0bGUiPgorICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImNvbGxhcHNlZCIKKyAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9IiNjb2xsYXBzZVN1bW1hcnlFZGl0b3IiPgorICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5zdW1tYXJ5Ii8+CisgICAgICAgICAgICA8L2E+CisgICAgICAgIDwvaDQ+CisKICAgICA8L2Rpdj4KLSAgICA8aDM+PHM6dGV4dCBuYW1lPSJ3ZWJsb2dFZGl0LnN1bW1hcnkiLz48dGFnczpoZWxwIGtleT0id2VibG9nRWRpdC5zdW1tYXJ5LnRvb2x0aXAiLz48L2gzPgotICAgIDxkaXY+Ci0gICAgICAgIDxzOnRleHRhcmVhIGlkPSJlZGl0X3N1bW1hcnkiIG5hbWU9ImJlYW4uc3VtbWFyeSIgY29scz0iNzUiIHJvd3M9IjEwIiBjc3NTdHlsZT0id2lkdGg6IDEwMCUiIHRhYmluZGV4PSI2Ii8+CisgICAgPGRpdiBpZD0iY29sbGFwc2VTdW1tYXJ5RWRpdG9yIiBjbGFzcz0icGFuZWwtY29sbGFwc2UgY29sbGFwc2UiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1ib2R5Ij4KKworICAgICAgICAgICAgPHM6dGV4dGFyZWEgaWQ9ImVkaXRfc3VtbWFyeSIgbmFtZT0iYmVhbi5zdW1tYXJ5IgorICAgICAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9IjYiIHJvd3M9IjEwIiBjc3NDbGFzcz0iY29sLXNtLTEyIiB0aGVtZT0ic2ltcGxlIi8+CisKKyAgICAgICAgPC9kaXY+CiAgICAgPC9kaXY+CiA8L2Rpdj4KIAotCiA8JS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLSU+Ci08JS0tIExpZ2h0Ym94IGZvciBwb3BwaW5nIHVwIGltYWdlIGNob29zZXIgLS0lPgogCi08ZGl2IGlkPSJtZWRpYWZpbGVfZWRpdF9saWdodGJveCIgdGl0bGU9IjxzOnRleHQgbmFtZT0nd2VibG9nRWRpdC5pbnNlcnRNZWRpYUZpbGUnLz4iIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgotICAgIDxpZnJhbWUgaWQ9Im1lZGlhRmlsZUVkaXRvciIKLSAgICAgICAgICAgIHN0eWxlPSJ2aXNpYmlsaXR5OmluaGVyaXQiCi0gICAgICAgICAgICBoZWlnaHQ9IjEwMCUiCi0gICAgICAgICAgICB3aWR0aD0iMTAwJSIKLSAgICAgICAgICAgIGZyYW1lYm9yZGVyPSJubyIKLSAgICAgICAgICAgIHNjcm9sbGluZz0iYXV0byI+Ci0gICAgPC9pZnJhbWU+CisKKzwlLS0gTWVkaWEgRmlsZSBJbnNlcnQgZm9yIHBsYWluIHRleHRhcmVhIGVkaXRvciAtLSU+CisKKzxkaXYgaWQ9Im1lZGlhZmlsZV9lZGl0X2xpZ2h0Ym94IiBjbGFzcz0ibW9kYWwgZmFkZSIgcm9sZT0iZGlhbG9nIj4KKworICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC1sZyI+CisKKyAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CisKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CisgICAgICAgICAgICAgICAgPGg0IGNsYXNzPSJtb2RhbC10aXRsZSI+PHM6dGV4dCBuYW1lPSd3ZWJsb2dFZGl0Lmluc2VydE1lZGlhRmlsZScvPjwvaDQ+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj4KKyAgICAgICAgICAgICAgICA8L2J1dHRvbj4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KKyAgICAgICAgICAgICAgICA8aWZyYW1lIGlkPSJtZWRpYUZpbGVFZGl0b3IiCisgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0idmlzaWJpbGl0eTppbmhlcml0IgorICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSI2MDAiIDwlLS0gcGl4ZWxzLCBzaWdoLCB0aGlzIGlzIHN1Ym9wdGltYWwtLSU+CisgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD0iMTAwJSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lYm9yZGVyPSJubyIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9sbGluZz0iYXV0byI+CisgICAgICAgICAgICAgICAgPC9pZnJhbWU+CisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KKyAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tZGVmYXVsdCIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+Q2xvc2U8L2J1dHRvbj4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCiA8L2Rpdj4KIAotPCUtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0lPgotPCUtLSBFZGl0b3IgZXZlbnQgaGFuZGxpbmcsIG9uIGNsb3NlLCBvbiBhZGQgaW1hZ2UsIGV0Yy4gLS0lPgotCiA8c2NyaXB0PgotICAgIGZ1bmN0aW9uIG9uQ2xpY2tBZGRJbWFnZSgpeworCisgICAgPHM6aWYgdGVzdD0iZWRpdG9yLmlkID09ICdlZGl0b3ItdGV4dC5qc3AnIj4KKworICAgIDwlLS0gUGxhaW4gdGV4dCBlZGl0b3IgZnVuY3Rpb25zIC0tJT4KKworICAgIGZ1bmN0aW9uIGluc2VydE1lZGlhRmlsZShhbmNob3JUYWcpIHsKKyAgICAgICAgaW5zZXJ0QXRDdXJzb3IoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRfY29udGVudCcpLCBhbmNob3JUYWcpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGluc2VydEF0Q3Vyc29yKHRleHRBcmVhRWxlbWVudCwgdmFsdWVGb3JJbnNlcnRpb24pIHsKKyAgICAgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikgeworICAgICAgICAgICAgdGV4dEFyZWFFbGVtZW50LmZvY3VzKCk7CisgICAgICAgICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsKKyAgICAgICAgICAgIHJhbmdlLnRleHQgPSB2YWx1ZUZvckluc2VydGlvbjsKKyAgICAgICAgfSBlbHNlIGlmICh0ZXh0QXJlYUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgfHwgdGV4dEFyZWFFbGVtZW50LnNlbGVjdGlvblN0YXJ0ID09PSAnMCcpIHsKKyAgICAgICAgICAgIHZhciBwcmVUZXh0OworICAgICAgICAgICAgdmFyIHBvc3RUZXh0OworICAgICAgICAgICAgaWYgKHRleHRBcmVhRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PT0gMCkgeworICAgICAgICAgICAgICAgIHByZVRleHQgPSAnJzsKKyAgICAgICAgICAgICAgICBwb3N0VGV4dCA9ICcnOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmVUZXh0ID0gdGV4dEFyZWFFbGVtZW50LnZhbHVlLnN1YnN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgMCwgdGV4dEFyZWFFbGVtZW50LnNlbGVjdGlvblN0YXJ0KTsKKyAgICAgICAgICAgICAgICBwb3N0VGV4dCA9IHRleHRBcmVhRWxlbWVudC52YWx1ZS5zdWJzdHJpbmcoCisgICAgICAgICAgICAgICAgICAgIHRleHRBcmVhRWxlbWVudC5zZWxlY3Rpb25FbmQsIHRleHRBcmVhRWxlbWVudC52YWx1ZS5sZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGV4dEFyZWFFbGVtZW50LnZhbHVlID0gcHJlVGV4dCArIHZhbHVlRm9ySW5zZXJ0aW9uICsgcG9zdFRleHQ7CisgICAgICAgICAgICB0ZXh0QXJlYUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgPSBwcmVUZXh0Lmxlbmd0aCArIHZhbHVlRm9ySW5zZXJ0aW9uLmxlbmd0aDsKKyAgICAgICAgICAgIHRleHRBcmVhRWxlbWVudC5zZWxlY3Rpb25FbmQgPSB0ZXh0QXJlYUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7CisgICAgICAgICAgICB0ZXh0QXJlYUVsZW1lbnQuZm9jdXMoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRleHRBcmVhRWxlbWVudC52YWx1ZSArPSB2YWx1ZUZvckluc2VydGlvbjsKKyAgICAgICAgICAgIHRleHRBcmVhRWxlbWVudC5mb2N1cygpOworICAgICAgICB9CisgICAgfQorCisgICAgPC9zOmlmPgorICAgIDxzOmVsc2U+CisKKyAgICA8JS0tIFJpY2ggdGV4dCBlZGl0b3IgZnVuY3Rpb25zIC0tJT4KKworICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgJCgnI2VkaXRfY29udGVudCcpLnN1bW1lcm5vdGUoeworICAgICAgICAgICAgICAgIHRvb2xiYXI6IFsKKyAgICAgICAgICAgICAgICAgICAgLy8gW2dyb3VwTmFtZSwgW2xpc3Qgb2YgYnV0dG9uXV0KKyAgICAgICAgICAgICAgICAgICAgWydzdHlsZScsIFsnYm9sZCcsICdpdGFsaWMnLCAndW5kZXJsaW5lJywgJ2NsZWFyJ11dLAorICAgICAgICAgICAgICAgICAgICBbJ2ZvbnQnLCBbJ3N0cmlrZXRocm91Z2gnLCAnc3VwZXJzY3JpcHQnLCAnc3Vic2NyaXB0J11dLAorICAgICAgICAgICAgICAgICAgICBbJ2ZvbnRzaXplJywgWydmb250c2l6ZSddXSwKKyAgICAgICAgICAgICAgICAgICAgWydjb2xvcicsIFsnY29sb3InXV0sCisgICAgICAgICAgICAgICAgICAgIFsncGFyYScsIFsndWwnLCAnb2wnLCAncGFyYWdyYXBoJ11dLAorICAgICAgICAgICAgICAgICAgICBbJ2hlaWdodCcsIFsnaGVpZ2h0J11dLAorICAgICAgICAgICAgICAgICAgICBbJ21pc2MnLCBbJ2NvZGV2aWV3J11dCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwMAorICAgICAgICAgICAgfQorICAgICAgICApOworICAgIH0pOworCisgICAgZnVuY3Rpb24gaW5zZXJ0TWVkaWFGaWxlKHRvSW5zZXJ0KSB7CisgICAgICAgICQoJyNlZGl0X2NvbnRlbnQnKS5zdW1tZXJub3RlKCJwYXN0ZUhUTUwiLCB0b0luc2VydCk7CisgICAgfQorCisgICAgPC9zOmVsc2U+CisKKyAgICA8JS0tIENvbW1vbiBmdW5jdGlvbnMgLS0lPgorCisgICAgZnVuY3Rpb24gb25DbGlja01lZGlhRmlsZUluc2VydCgpIHsKICAgICAgICAgPHM6dXJsIHZhcj0ibWVkaWFGaWxlSW1hZ2VDaG9vc2VyIiBhY3Rpb249Im1lZGlhRmlsZUltYWdlQ2hvb3NlciIgbmFtZXNwYWNlPSJvdmVybGF5Ij4KLSAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+CisgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+CiAgICAgICAgIDwvczp1cmw+Ci0gICAgICAgICQoICIjbWVkaWFGaWxlRWRpdG9yIiApLmF0dHIoJ3NyYycsJzxzOnByb3BlcnR5IHZhbHVlPSIle21lZGlhRmlsZUltYWdlQ2hvb3Nlcn0iIC8+Jyk7Ci0gICAgICAgICQoZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAkKCIjbWVkaWFmaWxlX2VkaXRfbGlnaHRib3giKS5kaWFsb2coewotICAgICAgICAgICAgICAgIG1vZGFsICA6IHRydWUsCi0gICAgICAgICAgICAgICAgd2lkdGggIDogNjAwLAotICAgICAgICAgICAgICAgIGhlaWdodCA6IDYwMAotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0pOworICAgICAgICAkKCIjbWVkaWFGaWxlRWRpdG9yIikuYXR0cignc3JjJywgJzxzOnByb3BlcnR5IHZhbHVlPSIle21lZGlhRmlsZUltYWdlQ2hvb3Nlcn0iIC8+Jyk7CisgICAgICAgICQoJyNtZWRpYWZpbGVfZWRpdF9saWdodGJveCcpLm1vZGFsKHtzaG93OiB0cnVlfSk7CiAgICAgfQogCiAgICAgZnVuY3Rpb24gb25DbG9zZSgpIHsKLSAgICAgICAgJCgiI21lZGlhRmlsZUVkaXRvciIpLmF0dHIoJ3NyYycsJ2Fib3V0OmJsYW5rJyk7CisgICAgICAgICQoIiNtZWRpYUZpbGVFZGl0b3IiKS5hdHRyKCdzcmMnLCAnYWJvdXQ6YmxhbmsnKTsKICAgICB9CiAKICAgICBmdW5jdGlvbiBvblNlbGVjdE1lZGlhRmlsZShuYW1lLCB1cmwsIGlzSW1hZ2UpIHsKLSAgICAgICAgJCgiI21lZGlhZmlsZV9lZGl0X2xpZ2h0Ym94IikuZGlhbG9nKCJjbG9zZSIpOwotICAgICAgICAkKCIjbWVkaWFGaWxlRWRpdG9yIikuYXR0cignc3JjJywnYWJvdXQ6YmxhbmsnKTsKLSAgICAgICAgaWYgKGlzSW1hZ2UgPT0gInRydWUiKSB7Ci0gICAgICAgICAgICBpbnNlcnRNZWRpYUZpbGUoJzxhIGhyZWY9IicgKyB1cmwgKyAnIj48aW1nIHNyYz0iJyArIHVybCArICc/dD10cnVlIiBhbHQ9IicgKyBuYW1lKyAnIj48L2ltZz48L2E+Jyk7CisgICAgICAgICQoIiNtZWRpYWZpbGVfZWRpdF9saWdodGJveCIpLm1vZGFsKCJoaWRlIik7CisgICAgICAgICQoIiNtZWRpYUZpbGVFZGl0b3IiKS5hdHRyKCdzcmMnLCAnYWJvdXQ6YmxhbmsnKTsKKyAgICAgICAgaWYgKGlzSW1hZ2UgPT09ICJ0cnVlIikgeworICAgICAgICAgICAgaW5zZXJ0TWVkaWFGaWxlKCc8YSBocmVmPSInICsgdXJsICsgJyI+PGltZyBzcmM9IicgKyB1cmwgKyAnP3Q9dHJ1ZSIgYWx0PSInICsgbmFtZSArICciIC8+PC9hPicpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaW5zZXJ0TWVkaWFGaWxlKCc8YSBocmVmPSInICsgdXJsICsgJyI+JyArIG5hbWUgKyAnPC9hPicpOwogICAgICAgICB9CiAgICAgfQorCiA8L3NjcmlwdD4KLQotPHM6aWYgdGVzdD0iZWRpdG9yLmlkID09ICdlZGl0b3ItdGV4dC5qc3AnIj4KLSAgICA8JS0tIFBsYWluIHRleHQgZWRpdG9yIChyYXcgSFRNTCBlbnRyeSkgLS0lPgotCi0gICAgPHNjcmlwdD4KLSAgICAgICAgJChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICQoICIjYWNjb3JkaW9uIiApLmFjY29yZGlvbih7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgICAgIGZ1bmN0aW9uIGluc2VydE1lZGlhRmlsZShhbmNob3JUYWcpIHsKLSAgICAgICAgICAgIGluc2VydEF0Q3Vyc29yKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0X2NvbnRlbnQnKSwgYW5jaG9yVGFnKTsKLSAgICAgICAgfQotICAgICAgICBmdW5jdGlvbiBpbnNlcnRBdEN1cnNvcih0ZXh0QXJlYUVsZW1lbnQsIHZhbHVlRm9ySW5zZXJ0aW9uKSB7Ci0gICAgICAgICAgICBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgdGV4dEFyZWFFbGVtZW50LmZvY3VzKCk7Ci0gICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgICAgICAgICAgcmFuZ2UudGV4dCA9IHZhbHVlRm9ySW5zZXJ0aW9uOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAodGV4dEFyZWFFbGVtZW50LnNlbGVjdGlvblN0YXJ0IHx8IHRleHRBcmVhRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PSAnMCcpIHsKLSAgICAgICAgICAgICAgICB2YXIgcHJlVGV4dDsKLSAgICAgICAgICAgICAgICB2YXIgcG9zdFRleHQ7Ci0gICAgICAgICAgICAgICAgaWYgKHRleHRBcmVhRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByZVRleHQgPSAnJzsKLSAgICAgICAgICAgICAgICAgICAgcG9zdFRleHQgPSAnJzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByZVRleHQgPSB0ZXh0QXJlYUVsZW1lbnQudmFsdWUuc3Vic3RyaW5nKDAsIHRleHRBcmVhRWxlbWVudC5zZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgIHBvc3RUZXh0ID0gdGV4dEFyZWFFbGVtZW50LnZhbHVlLnN1YnN0cmluZyh0ZXh0QXJlYUVsZW1lbnQuc2VsZWN0aW9uRW5kLCB0ZXh0QXJlYUVsZW1lbnQudmFsdWUubGVuZ3RoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGV4dEFyZWFFbGVtZW50LnZhbHVlID0gIHByZVRleHQgKyB2YWx1ZUZvckluc2VydGlvbiArIHBvc3RUZXh0OwotICAgICAgICAgICAgICAgIHRleHRBcmVhRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9IHByZVRleHQubGVuZ3RoICsgdmFsdWVGb3JJbnNlcnRpb24ubGVuZ3RoOwotICAgICAgICAgICAgICAgIHRleHRBcmVhRWxlbWVudC5zZWxlY3Rpb25FbmQgPSB0ZXh0QXJlYUVsZW1lbnQuc2VsZWN0aW9uU3RhcnQ7Ci0gICAgICAgICAgICAgICAgdGV4dEFyZWFFbGVtZW50LmZvY3VzKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRleHRBcmVhRWxlbWVudC52YWx1ZSArPSB2YWx1ZUZvckluc2VydGlvbjsKLSAgICAgICAgICAgICAgICB0ZXh0QXJlYUVsZW1lbnQuZm9jdXMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIDwvc2NyaXB0PgotPC9zOmlmPgotPHM6ZWxzZT4KLSAgICA8JS0tIFJpY2ggdGV4dCBlZGl0b3IgKFhpbmhhLCBzZWU6IGh0dHA6Ly90cmFjLnhpbmhhLm9yZy93aWtpL05ld2JpZUd1aWRlKSAtLSU+Ci0KLSAgICA8czp1cmwgdmFyPSJ4aW5oYUhvbWUiIHZhbHVlPSIvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMSI+PC9zOnVybD4KLSAgICA8c2NyaXB0PgotICAgICAgICAvLyAocHJlZmVyYWJseSBhYnNvbHV0ZSkgVVJMIChpbmNsdWRpbmcgdHJhaWxpbmcgc2xhc2gpIHdoZXJlIFhpbmhhIGlzIGluc3RhbGxlZAotICAgICAgICBfZWRpdG9yX3VybCAgPSAnPHM6cHJvcGVydHkgdmFsdWU9InhpbmhhSG9tZSIgLz4nOwotICAgICAgICBfZWRpdG9yX2xhbmcgPSAiZW4iOyAgICAgICAgLy8gQW5kIHRoZSBsYW5ndWFnZSB3ZSBuZWVkIHRvIHVzZSBpbiB0aGUgZWRpdG9yLgotICAgICAgICBfZWRpdG9yX3NraW4gPSAiYmx1ZS1sb29rIjsgLy8gSWYgeW91IHdhbnQgdXNlIGEgc2tpbiwgYWRkIHRoZSBuYW1lIChvZiB0aGUgZm9sZGVyKSBoZXJlCi0gICAgPC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9IjxzOnByb3BlcnR5IHZhbHVlPSJ4aW5oYUhvbWUiIC8+L1hpbmhhQ29yZS5qcyI+PC9zY3JpcHQ+Ci0KLSAgICA8c2NyaXB0PgotICAgICAgICAkKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgJCggIiNhY2NvcmRpb24iICkuYWNjb3JkaW9uKHsKLSAgICAgICAgICAgICAgICBhY3RpdmF0ZTogZnVuY3Rpb24oIGV2ZW50LCB1aSApIHsKLSAgICAgICAgICAgICAgICAgICA8JS0tIFhpbmhhIHN1bW1hcnkgZWRpdG9yIG5lZWRzIGEgb25lLXRpbWUgaW5pdCBhcyBpdCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgbm90IHZpc2libGUgdXBvbiB3aW5kb3cgb3BlbmluZyAoaHR0cDovL3Rpbnl1cmwuY29tL21uOTdqNWwpIC0tJT4KLSAgICAgICAgICAgICAgICAgICBpZiAoIXN1bW1hcnlfZWRpdG9yX2luaXRpYWxpemVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgIHhpbmhhX2VkaXRvcnMuZWRpdF9zdW1tYXJ5LnNpemVFZGl0b3IoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeV9lZGl0b3JfaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgZnVuY3Rpb24gaW5zZXJ0TWVkaWFGaWxlKGFuY2hvclRhZykgewotICAgICAgICAgICAgeGluaGFfZWRpdG9ycy5lZGl0X2NvbnRlbnQuaW5zZXJ0SFRNTChhbmNob3JUYWcpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3VtbWFyeV9lZGl0b3JfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICAgICAgeGluaGFfZWRpdG9ycyA9IG51bGw7Ci0gICAgICAgIHhpbmhhX2luaXQgICAgPSBudWxsOwotICAgICAgICB4aW5oYV9jb25maWcgID0gbnVsbDsKLSAgICAgICAgeGluaGFfcGx1Z2lucyA9IG51bGw7Ci0KLSAgICAgICAgeGluaGFfaW5pdCA9IHhpbmhhX2luaXQgPyB4aW5oYV9pbml0IDogZnVuY3Rpb24oKSB7Ci0KLSAgICAgICAgICAgIHhpbmhhX2VkaXRvcnMgPSB4aW5oYV9lZGl0b3JzID8geGluaGFfZWRpdG9ycyA6IFsKLSAgICAgICAgICAgICAgICAnZWRpdF9jb250ZW50JywgJ2VkaXRfc3VtbWFyeScKLSAgICAgICAgICAgIF07Ci0KLSAgICAgICAgICAgIHhpbmhhX3BsdWdpbnMgPSB4aW5oYV9wbHVnaW5zID8geGluaGFfcGx1Z2lucyA6W107Ci0gICAgICAgICAgICBpZighWGluaGEubG9hZFBsdWdpbnMoeGluaGFfcGx1Z2lucywgeGluaGFfaW5pdCkpIHJldHVybjsKLQotICAgICAgICAgICAgeGluaGFfY29uZmlnID0geGluaGFfY29uZmlnID8geGluaGFfY29uZmlnKCkgOiBuZXcgWGluaGEuQ29uZmlnKCk7Ci0gICAgICAgICAgICB4aW5oYV9jb25maWcucGFnZVN0eWxlU2hlZXRzID0gWyBfZWRpdG9yX3VybCArICJleGFtcGxlcy9mdWxsX2V4YW1wbGUuY3NzIiBdOwotICAgICAgICAgICAgeGluaGFfY29uZmlnLnRvb2xiYXIgPQotICAgICAgICAgICAgICAgIFsKLSAgICAgICAgICAgICAgICBbInBvcHVwZWRpdG9yIl0sCi0gICAgICAgICAgICAgICAgWyJzZXBhcmF0b3IiLCJmb3JtYXRibG9jayIsImZvbnRuYW1lIiwiZm9udHNpemUiLCJib2xkIiwiaXRhbGljIiwidW5kZXJsaW5lIiwic3RyaWtldGhyb3VnaCJdLAotICAgICAgICAgICAgICAgIFsic2VwYXJhdG9yIiwiZm9yZWNvbG9yIiwiaGlsaXRlY29sb3IiLCJ0ZXh0aW5kaWNhdG9yIl0sCi0gICAgICAgICAgICAgICAgWyJzZXBhcmF0b3IiLCJzdWJzY3JpcHQiLCJzdXBlcnNjcmlwdCJdLAotICAgICAgICAgICAgICAgIFsibGluZWJyZWFrIiwic2VwYXJhdG9yIiwianVzdGlmeWxlZnQiLCJqdXN0aWZ5Y2VudGVyIiwianVzdGlmeXJpZ2h0IiwianVzdGlmeWZ1bGwiXSwKLSAgICAgICAgICAgICAgICBbInNlcGFyYXRvciIsImluc2VydG9yZGVyZWRsaXN0IiwiaW5zZXJ0dW5vcmRlcmVkbGlzdCIsIm91dGRlbnQiLCJpbmRlbnQiXSwKLSAgICAgICAgICAgICAgICBbInNlcGFyYXRvciIsImluc2VydGhvcml6b250YWxydWxlIiwiY3JlYXRlbGluayIsImluc2VydGltYWdlIiwiaW5zZXJ0dGFibGUiXSwKLSAgICAgICAgICAgICAgICBbImxpbmVicmVhayIsInNlcGFyYXRvciIsInVuZG8iLCJyZWRvIiwic2VsZWN0YWxsIiwicHJpbnQiXSwgKFhpbmhhLmlzX2dlY2tvID8gW10gOiBbImN1dCIsImNvcHkiLCJwYXN0ZSIsIm92ZXJ3cml0ZSIsInNhdmVhcyJdKSwKLSAgICAgICAgICAgICAgICBbInNlcGFyYXRvciIsImtpbGx3b3JkIiwiY2xlYXJmb250cyIsInJlbW92ZWZvcm1hdCIsInRvZ2dsZWJvcmRlcnMiLCJzcGxpdGJsb2NrIiwibGVmdHRvcmlnaHQiLCAicmlnaHR0b2xlZnQiXSwKLSAgICAgICAgICAgICAgICBbInNlcGFyYXRvciIsImh0bWxtb2RlIiwic2hvd2hlbHAiLCJhYm91dCJdCi0gICAgICAgICAgICBdOwotCi0gICAgICAgICAgICAvLyB0dXJuIG9mZiBYaW5oYSdzIFVSTCBzdHJpcHBpbmcgZGVmYXVsdC4gQmxvZyBlbnRyaWVzIG5lZWQgYWJzb2x1dGUgVVJMcywKLSAgICAgICAgICAgIC8vIG90aGVyd2lzZSBsaW5rcyB3aWxsIGJlIGJyb2tlbiBpbiBSU1MvQXRvbSBmZWVkcy4KLSAgICAgICAgICAgIHhpbmhhX2NvbmZpZy5zdHJpcEJhc2VIcmVmID0gZmFsc2U7Ci0KLSAgICAgICAgICAgIHhpbmhhX2VkaXRvcnMgICA9IFhpbmhhLm1ha2VFZGl0b3JzKHhpbmhhX2VkaXRvcnMsIHhpbmhhX2NvbmZpZywgeGluaGFfcGx1Z2lucyk7Ci0KLSAgICAgICAgICAgIFhpbmhhLnN0YXJ0RWRpdG9ycyh4aW5oYV9lZGl0b3JzKTsKLSAgICAgICAgfQotCi0gICAgICAgIFhpbmhhLl9hZGRFdmVudCh3aW5kb3csJ2xvYWQnLCB4aW5oYV9pbml0KTsKLSAgICA8L3NjcmlwdD4KLTwvczplbHNlPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0VudHJ5UmVtb3ZlLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9FbnRyeVJlbW92ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNWRjM2MuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0VudHJ5UmVtb3ZlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLTwlLS0KLSAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UKLSAgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90Ci0gIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcKLSAgY29weXJpZ2h0IGluIHRoaXMgd29yaywgcGxlYXNlIHNlZSB0aGUgTk9USUNFIGZpbGUgaW4gdGhlIHRvcCBsZXZlbAotICBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCi0tLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+Ci0KLTxoMj4KLSAgICA8czp0ZXh0IG5hbWU9IndlYmxvZ0VudHJ5UmVtb3ZlLnJlbW92ZVdlYmxvZ0VudHJ5IiAvPiBbPHM6cHJvcGVydHkgdmFsdWU9InJlbW92ZUVudHJ5LnRpdGxlIi8+XQotPC9oMj4KLQotPHA+PHM6dGV4dCBuYW1lPSJ3ZWJsb2dFbnRyeVJlbW92ZS5hcmVZb3VTdXJlIiAvPjwvcD4KLTxwPgotICAgIDxzOnRleHQgbmFtZT0id2VibG9nRW50cnlSZW1vdmUuZW50cnlUaXRsZSIgLz4gPSBbPHM6cHJvcGVydHkgdmFsdWU9InJlbW92ZUVudHJ5LnRpdGxlIi8+XTxiciAvPgotICAgIDxzOnRleHQgbmFtZT0id2VibG9nRW50cnlSZW1vdmUuZW50cnlJZCIgLz4gPSBbPHM6cHJvcGVydHkgdmFsdWU9InJlbW92ZUVudHJ5LmlkIi8+XQotPC9wPgotCi08JS0tIERpZmZlcmVuY2VzIGJldHdlZW4gZGVsZXRpb25zIGZyb20gRW50cnlFZGl0IGFuZCBFbnRyaWVzIHZpZXdzIC0tJT4KLTxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2VudHJ5UmVtb3ZlJyI+Ci0gICAgPHM6c2V0IHZhcj0iZGVsZXRlQWN0aW9uIj5lbnRyeVJlbW92ZSFyZW1vdmU8L3M6c2V0PgotICAgIDxzOnNldCB2YXI9ImNhbmNlbEFjdGlvbiI+ZW50cnlFZGl0PC9zOnNldD4KLTwvczppZj4KLTxzOmVsc2U+Ci0gICAgPHM6c2V0IHZhcj0iZGVsZXRlQWN0aW9uIj5lbnRyeVJlbW92ZVZpYUxpc3QhcmVtb3ZlPC9zOnNldD4KLSAgICA8czpzZXQgdmFyPSJjYW5jZWxBY3Rpb24iPmVudHJpZXM8L3M6c2V0PgotPC9zOmVsc2U+Ci0KLTx0YWJsZT4KLTx0cj4KLSAgICA8dGQ+Ci0gICAgICAgIDxzOmZvcm0gYWN0aW9uPSIleyNkZWxldGVBY3Rpb259Ij4KLSAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgotICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgLz4KLSAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJyZW1vdmVJZCIgLz4KLSAgICAgICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLnllcycpfSIgLz4KLSAgICAgICAgPC9zOmZvcm0+Ci0gICAgPC90ZD4KLSAgICA8dGQ+Ci0gICAgICAgIDxzOmZvcm0gYWN0aW9uPSIleyNjYW5jZWxBY3Rpb259Ij4KLSAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgotICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgLz4KLSAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2VudHJ5UmVtb3ZlJyIgPgotICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJiZWFuLmlkIiB2YWx1ZT0iJXtyZW1vdmVFbnRyeS5pZH0iLz4KLSAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLm5vJyl9Ii8+Ci0gICAgICAgIDwvczpmb3JtPgotICAgIDwvdGQ+Ci08L3RyPgotPC90YWJsZT4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9FbnRyeVNpZGViYXIuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0VudHJ5U2lkZWJhci5qc3AKaW5kZXggMmJiM2IzNS4uOWI5NjcxOSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0VudHJ5U2lkZWJhci5qc3AKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0VudHJ5U2lkZWJhci5qc3AKQEAgLTIyLDYgKzIyLDggQEAKICAgICAgICAgPGRpdiBjbGFzcz0ibWVudS10bCI+CiAgICAgICAgICAgICAKICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXJJbm5lciI+CisKKyAgICAgICAgICAgICAgICA8JS0tIGNvbW1lbnRzIG9uIHRoaXMgZW50cnkgLS0lPgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIDxoMz48czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQuY29tbWVudHMiIC8+PC9oMz4KIApAQCAtMzgsNyArNDAsOSBAQAogICAgICAgICAgICAgICAgIDxzOmVsc2U+CiAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5ub25lIiAvPjwvc3Bhbj4KICAgICAgICAgICAgICAgICA8L3M6ZWxzZT4KLSAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgIDwlLS0gcGVuZGluZyBlbnRyaWVzIC0tJT4KKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgPGhyIHNpemU9IjEiIG5vc2hhZGU9Im5vc2hhZGUiIC8+ICAKICAgICAgICAgICAgICAgICA8aDM+PHM6dGV4dCBuYW1lPSJ3ZWJsb2dFZGl0LnBlbmRpbmdFbnRyaWVzIiAvPjwvaDM+CiAgICAgICAgICAgICAgICAgCkBAIC01MiwxMiArNTYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIle2FjdGlvbldlYmxvZy5oYW5kbGV9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9ImJlYW4uaWQiIHZhbHVlPSIjcG9zdC5pZCIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvczp1cmw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0nPHM6dXJsIHZhbHVlPSIvaW1hZ2VzL3RhYmxlX2Vycm9yLnBuZyIvPicgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduPSJhYnNtaWRkbGUiIGJvcmRlcj0iMCIgYWx0PSJpY29uIiB0aXRsZT0iRWRpdCIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6YSBocmVmPSIle2VkaXRVcmx9Ij48c3RyOnRydW5jYXRlTmljZWx5IGxvd2VyPSI1MCI+PHM6cHJvcGVydHkgdmFsdWU9IiNwb3N0LnRpdGxlIiAvPjwvc3RyOnRydW5jYXRlTmljZWx5PjwvczphPgorICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tbG9jayIgYXJpYS1oaWRkZW49InRydWUiPiA8L3NwYW4+IAorICAgICAgICAgICAgICAgICAgICAgICAgPHM6YSBocmVmPSIle2VkaXRVcmx9Ij48c3RyOnRydW5jYXRlTmljZWx5IGxvd2VyPSI2MCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIjcG9zdC50aXRsZSIgLz48L3N0cjp0cnVuY2F0ZU5pY2VseT48L3M6YT4KICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjxiciAvPgogICAgICAgICAgICAgICAgIDwvczppdGVyYXRvcj4KLSAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgIDwlLS0gZHJhZnQgZW50cmllcyAtLSU+CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgPGhyIHNpemU9IjEiIG5vc2hhZGU9Im5vc2hhZGUiIC8+ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgPGgzPjxzOnRleHQgbmFtZT0id2VibG9nRWRpdC5kcmFmdEVudHJpZXMiIC8+PC9oMz4KQEAgLTcyLDE1ICs3NywxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0iYmVhbi5pZCIgdmFsdWU9IiNwb3N0LmlkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9zOnVybD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSc8czp1cmwgdmFsdWU9Ii9pbWFnZXMvdGFibGVfZWRpdC5wbmciLz4nIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbj0iYWJzbWlkZGxlIiBib3JkZXI9IjAiIGFsdD0iaWNvbiIgdGl0bGU9IkVkaXQiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmEgaHJlZj0iJXtlZGl0VXJsfSI+PHN0cjp0cnVuY2F0ZU5pY2VseSBsb3dlcj0iNTAiPjxzOnByb3BlcnR5IHZhbHVlPSIjcG9zdC50aXRsZSIgLz48L3N0cjp0cnVuY2F0ZU5pY2VseT48L3M6YT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWVkaXQiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPC9zcGFuPiAKKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOmEgaHJlZj0iJXtlZGl0VXJsfSI+PHN0cjp0cnVuY2F0ZU5pY2VseSBsb3dlcj0iNjAiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iI3Bvc3QudGl0bGUiIC8+PC9zdHI6dHJ1bmNhdGVOaWNlbHk+PC9zOmE+CiAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj48YnIgLz4KICAgICAgICAgICAgICAgICA8L3M6aXRlcmF0b3I+CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0idXNlckFuQXV0aG9yIj4KLSAgICAgICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgICAgICAgICAgPCUtLSBwdWJsaXNoZWQgZW50cmllcyAtLSU+CisKICAgICAgICAgICAgICAgICAgICAgPGhyIHNpemU9IjEiIG5vc2hhZGU9Im5vc2hhZGUiIC8+CiAgICAgICAgICAgICAgICAgICAgIDxoMz48czp0ZXh0IG5hbWU9IndlYmxvZ0VkaXQucHVibGlzaGVkRW50cmllcyIgLz48L2gzPgogICAgICAgICAgICAgICAgICAgICAKQEAgLTk0LDEzICsxMDEsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iJXthY3Rpb25XZWJsb2cuaGFuZGxlfSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0iYmVhbi5pZCIgdmFsdWU9IiNwb3N0LmlkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczp1cmw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9JzxzOnVybCB2YWx1ZT0iL2ltYWdlcy90YWJsZV9lZGl0LnBuZyIvPicgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbj0iYWJzbWlkZGxlIiBib3JkZXI9IjAiIGFsdD0iaWNvbiIgdGl0bGU9IkVkaXQiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6YSBocmVmPSIle2VkaXRVcmx9Ij48c3RyOnRydW5jYXRlTmljZWx5IGxvd2VyPSI1MCI+PHM6cHJvcGVydHkgdmFsdWU9IiNwb3N0LnRpdGxlIiAvPjwvc3RyOnRydW5jYXRlTmljZWx5PjwvczphPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLWJvb2siIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPC9zcGFuPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czphIGhyZWY9IiV7ZWRpdFVybH0iPjxzdHI6dHJ1bmNhdGVOaWNlbHkgbG93ZXI9IjYwIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9IiNwb3N0LnRpdGxlIiAvPjwvc3RyOnRydW5jYXRlTmljZWx5PjwvczphPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPjxiciAvPgogICAgICAgICAgICAgICAgICAgICA8L3M6aXRlcmF0b3I+Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAKKworCisgICAgICAgICAgICAgICAgICAgIDwlLS0gc2NoZWR1bGVkIGVudHJpZXMgLS0lPgorCiAgICAgICAgICAgICAgICAgICAgIDxociBzaXplPSIxIiBub3NoYWRlPSJub3NoYWRlIiAvPiAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICA8aDM+PHM6dGV4dCBuYW1lPSJ3ZWJsb2dFZGl0LnNjaGVkdWxlZEVudHJpZXMiIC8+PC9oMz4KICAgICAgICAgICAgICAgICAgICAgCkBAIC0xMTQsOSArMTIzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iJXthY3Rpb25XZWJsb2cuaGFuZGxlfSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0iYmVhbi5pZCIgdmFsdWU9IiNwb3N0LmlkIiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczp1cmw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9JzxzOnVybCB2YWx1ZT0iL2ltYWdlcy90YWJsZV9lZGl0LnBuZyIvPicgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbj0iYWJzbWlkZGxlIiBib3JkZXI9IjAiIGFsdD0iaWNvbiIgdGl0bGU9IkVkaXQiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6YSBocmVmPSIle2VkaXRVcmx9Ij48c3RyOnRydW5jYXRlTmljZWx5IGxvd2VyPSI1MCI+PHM6cHJvcGVydHkgdmFsdWU9IiNwb3N0LnRpdGxlIiAvPjwvc3RyOnRydW5jYXRlTmljZWx5PjwvczphPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJnbHlwaGljb24gZ2x5cGhpY29uLXRpbWUiIGFyaWEtaGlkZGVuPSJ0cnVlIj4gPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmEgaHJlZj0iJXtlZGl0VXJsfSI+PHN0cjp0cnVuY2F0ZU5pY2VseSBsb3dlcj0iNjAiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iI3Bvc3QudGl0bGUiIC8+PC9zdHI6dHJ1bmNhdGVOaWNlbHk+PC9zOmE+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+PGJyIC8+CiAgICAgICAgICAgICAgICAgICAgIDwvczppdGVyYXRvcj4KICAgICAgICAgICAgICAgICAgICAgCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvRm9sZGVyRWRpdC5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvRm9sZGVyRWRpdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ZWRhMTguLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL0ZvbGRlckVkaXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPCUtLQotICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLSAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdQotICB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKLSAgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLQotICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0KLSAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZwotICBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCi0gIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KLS0tJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KLQotPCUtLSBUaXRsaW5nLCBwcm9jZXNzaW5nIGFjdGlvbnMgZGlmZmVyZW50IGJldHdlZW4gYWRkIGFuZCBlZGl0IC0tJT4KLTxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUgPT0gJ2ZvbGRlckVkaXQnIj4KLSAgICA8czpzZXQgdmFyPSJzdWJ0aXRsZUtleSI+Zm9sZGVyRm9ybS5lZGl0LnN1YnRpdGxlPC9zOnNldD4KLSAgICA8czpzZXQgdmFyPSJtYWluQWN0aW9uIj5mb2xkZXJFZGl0PC9zOnNldD4KLTwvczppZj4KLTxzOmVsc2U+Ci0gICAgPHM6c2V0IHZhcj0ic3VidGl0bGVLZXkiPmZvbGRlckZvcm0uYWRkLnN1YnRpdGxlPC9zOnNldD4KLSAgICA8czpzZXQgdmFyPSJtYWluQWN0aW9uIj5mb2xkZXJBZGQ8L3M6c2V0PgotPC9zOmVsc2U+Ci0KLQotPHAgY2xhc3M9InN1YnRpdGxlIj4KLSAgICA8czp0ZXh0IG5hbWU9IiV7I3N1YnRpdGxlS2V5fSIgPgotICAgICAgICA8czpwYXJhbSB2YWx1ZT0iZm9sZGVyLm5hbWUiIC8+Ci0gICAgPC9zOnRleHQ+Ci08L3A+Ci0KLTxzOmZvcm0+Ci0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgLz4KLSAgICA8JS0tIGZvbGRlcklkIG5lZWRlZCBvbiBjYW5jZWwgdG8gZGV0ZXJtaW5lIGZvbGRlciB0byByZXR1cm4gdG8gKHNlZSBzdHJ1dHMueG1sKSAtLSU+Ci0gICAgPHM6aGlkZGVuIG5hbWU9ImZvbGRlcklkIiB2YWx1ZT0iJXtmb2xkZXJJZH0iIC8+Ci0gICAgPHM6aWYgdGVzdD0iYWN0aW9uTmFtZSA9PSAnZm9sZGVyRWRpdCciPgotICAgICAgICA8JS0tIGJlYW4gZm9yIGZvbGRlciBhZGQgZG9lcyBub3QgaGF2ZSBhIGJlYW4gaWQgeWV0IC0tJT4KLSAgICAgICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4uaWQiIC8+Ci0gICAgPC9zOmlmPgotCi0gICAgPHRhYmxlPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQ+PHM6dGV4dCBuYW1lPSJnZW5lcmljLm5hbWUiIC8+PC90ZD4KLSAgICAgICAgICAgIDx0ZD48czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5uYW1lIiBzaXplPSI3MCIgbWF4bGVuZ3RoPSIyNTUiIC8+PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIAotICAgIDxwPgotICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5zYXZlJyl9IiBhY3Rpb249IiV7I21haW5BY3Rpb259IXNhdmUiLz4KLSAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMuY2FuY2VsJyl9IiBhY3Rpb249ImZvbGRlckVkaXQhY2FuY2VsIiAvPgotICAgIDwvcD4KLSAgICAKLTwvczpmb3JtPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL01haW50ZW5hbmNlLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NYWludGVuYW5jZS5qc3AKaW5kZXggNjkwNDQ1MS4uZGQ0OTJhNSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL01haW50ZW5hbmNlLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvTWFpbnRlbmFuY2UuanNwCkBAIC0xOSwyMSArMTksMTkgQEAKIAogPHAgY2xhc3M9InN1YnRpdGxlIj48czp0ZXh0IG5hbWU9Im1haW50ZW5hbmNlLnN1YnRpdGxlIiAvPjwvcD4KICAgICAKLTxzOmZvcm0gYWN0aW9uPSJtYWludGVuYW5jZSI+Cis8czpmb3JtIGFjdGlvbj0ibWFpbnRlbmFuY2UiIGNzc0NsYXNzPSJmb3JtLXZlcnRpY2FsIj4KIAk8czpoaWRkZW4gbmFtZT0ic2FsdCIgLz4KICAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIiB2YWx1ZT0iJXthY3Rpb25XZWJsb2cuaGFuZGxlfSIgLz4KIAotICAgIDxzOnRleHQgbmFtZT0ibWFpbnRlbmFuY2UucHJvbXB0LmZsdXNoIiAvPjxiciAvPjxiciAvPgotICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdtYWludGVuYW5jZS5idXR0b24uZmx1c2gnKX0iIGFjdGlvbj0ibWFpbnRlbmFuY2UhZmx1c2hDYWNoZSIgLz4KKyAgICA8cD48czp0ZXh0IG5hbWU9Im1haW50ZW5hbmNlLnByb21wdC5mbHVzaCIgLz48L3A+CisgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ21haW50ZW5hbmNlLmJ1dHRvbi5mbHVzaCcpfSIgYWN0aW9uPSJtYWludGVuYW5jZSFmbHVzaENhY2hlIiBjc3NDbGFzcz0iYnRuIiAvPgogCiAgICAgPHM6aWYgdGVzdD0iZ2V0Qm9vbGVhblByb3AoJ3NlYXJjaC5lbmFibGVkJykiPgotICAgICAgICA8YnIgLz48YnIgLz4KLSAgICAgICAgPHM6dGV4dCBuYW1lPSJtYWludGVuYW5jZS5wcm9tcHQuaW5kZXgiIC8+PGJyIC8+PGJyIC8+Ci0gICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdtYWludGVuYW5jZS5idXR0b24uaW5kZXgnKX0iIGFjdGlvbj0ibWFpbnRlbmFuY2UhaW5kZXgiIC8+CQorICAgICAgICA8cD48czp0ZXh0IG5hbWU9Im1haW50ZW5hbmNlLnByb21wdC5pbmRleCIgLz48L3A+CisgICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdtYWludGVuYW5jZS5idXR0b24uaW5kZXgnKX0iIGFjdGlvbj0ibWFpbnRlbmFuY2UhaW5kZXgiIGNzc0NsYXNzPSJidG4iIC8+CiAgICAgPC9zOmlmPgogCi0gICAgPGJyIC8+PGJyIC8+Ci0gICAgPHM6dGV4dCBuYW1lPSJtYWludGVuYW5jZS5wcm9tcHQucmVzZXQiIC8+PGJyIC8+PGJyIC8+Ci0gICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ21haW50ZW5hbmNlLmJ1dHRvbi5yZXNldCcpfSIgYWN0aW9uPSJtYWludGVuYW5jZSFyZXNldCIgLz4KKyAgICA8cD48czp0ZXh0IG5hbWU9Im1haW50ZW5hbmNlLnByb21wdC5yZXNldCIgLz48L3A+CisgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ21haW50ZW5hbmNlLmJ1dHRvbi5yZXNldCcpfSIgYWN0aW9uPSJtYWludGVuYW5jZSFyZXNldCIgY3NzQ2xhc3M9ImJ0biIgLz4KIAogPC9zOmZvcm0+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvTWVkaWFGaWxlQWRkLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVBZGQuanNwCmluZGV4IDA4ZDdlNGEuLjNjZjQxOWYgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVBZGQuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVBZGQuanNwCkBAIC0xNiwxNzAgKzE2LDEwNiBAQAogICBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCiAtLSU+CiA8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+Ci08c2NyaXB0IHNyYz0iPHM6dXJsIHZhbHVlPSIvcm9sbGVyLXVpL3NjcmlwdHMvanF1ZXJ5LTIuMS4xLm1pbi5qcyIgLz4iPjwvc2NyaXB0PgogCiAKKzxwIGNsYXNzPSJzdWJ0aXRsZSI+IDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlQWRkLnRpdGxlIi8+IDwvcD4KKzxwIGNsYXNzPSJwYWdldGlwIj4gPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVBZGQucGFnZVRpcCIvPiA8L3A+CisKKzxzOmZvcm0gaWQ9ImVudHJ5IiBhY3Rpb249Im1lZGlhRmlsZUFkZCFzYXZlIgorICAgICAgICBtZXRob2Q9IlBPU1QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLWhvcml6b250YWwiPgorICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0Ii8+CisgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIvPgorICAgIDxzOmhpZGRlbiBuYW1lPSJkaXJlY3RvcnlOYW1lIi8+CisKKyAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5uYW1lIiBtYXhsZW5ndGg9IjI1NSIgbGFiZWw9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5uYW1lJyl9Ii8+CisKKyAgICA8czp0ZXh0YXJlYSBuYW1lPSJiZWFuLmRlc2NyaXB0aW9uIiAgcm93cz0iMyIgbGFiZWw9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5kZXNjcmlwdGlvbicpfSIvPgorCisgICAgPHM6dGV4dGFyZWEgbmFtZT0iYmVhbi5jb3B5cmlnaHRUZXh0IiByb3dzPSIzIiBsYWJlbD0iJXtnZXRUZXh0KCdtZWRpYUZpbGVBZGQuY29weXJpZ2h0Jyl9Ii8+CisKKyAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi50YWdzQXNTdHJpbmciIG1heGxlbmd0aD0iMjU1IiBsYWJlbD0iJXtnZXRUZXh0KCdtZWRpYUZpbGVBZGQudGFncycpfSIvPgorCisgICAgPHM6c2VsZWN0IG5hbWU9ImJlYW4uZGlyZWN0b3J5SWQiIGxpc3Q9ImFsbERpcmVjdG9yaWVzIgorICAgICAgICAgICAgICBsaXN0S2V5PSJpZCIgbGlzdFZhbHVlPSJuYW1lIiBsYWJlbD0iJXtnZXRUZXh0KCdtZWRpYUZpbGVBZGQuZGlyZWN0b3J5Jyl9Ii8+CisKKyAgICA8czpjaGVja2JveCBuYW1lPSJiZWFuLnNoYXJlZEZvckdhbGxlcnkiCisgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgnbWVkaWFGaWxlQWRkLmluY2x1ZGVHYWxsZXJ5Jyl9IgorICAgICAgICAgICAgICAgIHRvb2x0aXA9IiV7Z2V0VGV4dCgnbWVkaWFGaWxlRWRpdC5pbmNsdWRlR2FsbGVyeUhlbHAnKX0iLz4KKworICAgIDxkaXYgY2xhc3M9InBhbmVsIHBhbmVsLWRlZmF1bHQiPgorICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkaW5nIj4KKyAgICAgICAgICAgIDxoNCBjbGFzcz0icGFuZWwtdGl0bGUiPgorICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlQWRkLmZpbGVMb2NhdGlvbiIvPgorICAgICAgICAgICAgPC9oND4KKyAgICAgICAgPC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiPgorICAgICAgICAgICAgPHM6ZmlsZSBpZD0iZmlsZUNvbnRyb2wwIiBuYW1lPSJ1cGxvYWRlZEZpbGVzIiBzaXplPSIzMCIgLz4KKyAgICAgICAgICAgIDxzOmZpbGUgaWQ9ImZpbGVDb250cm9sMSIgbmFtZT0idXBsb2FkZWRGaWxlcyIgc2l6ZT0iMzAiIC8+CisgICAgICAgICAgICA8czpmaWxlIGlkPSJmaWxlQ29udHJvbDIiIG5hbWU9InVwbG9hZGVkRmlsZXMiIHNpemU9IjMwIiAvPgorICAgICAgICAgICAgPHM6ZmlsZSBpZD0iZmlsZUNvbnRyb2wzIiBuYW1lPSJ1cGxvYWRlZEZpbGVzIiBzaXplPSIzMCIgLz4KKyAgICAgICAgICAgIDxzOmZpbGUgaWQ9ImZpbGVDb250cm9sNCIgbmFtZT0idXBsb2FkZWRGaWxlcyIgc2l6ZT0iMzAiIC8+CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisgICAgPHM6c3VibWl0IGlkPSJ1cGxvYWRCdXR0b24iIGNzc0NsYXNzPSJidG4gYnRuLWRlZmF1bHQiCisgICAgICAgICAgICAgIHZhbHVlPSIle2dldFRleHQoJ21lZGlhRmlsZUFkZC51cGxvYWQnKX0iIGFjdGlvbj0ibWVkaWFGaWxlQWRkIXNhdmUiLz4KKyAgICA8czpzdWJtaXQgY3NzQ2xhc3M9ImJ0biIgdmFsdWU9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5jYW5jZWwnKX0iIGFjdGlvbj0ibWVkaWFGaWxlQWRkIWNhbmNlbCIvPgorCis8L3M6Zm9ybT4KKworCis8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisKIDxzY3JpcHQ+Ci0gICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7Ci0gICAgICAgICQoImlucHV0W3R5cGU9J2ZpbGUnXSIpLmNoYW5nZShmdW5jdGlvbigpIHsKKworICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKKworICAgICAgICAkKCJpbnB1dFt0eXBlPSdmaWxlJ10iKS5jaGFuZ2UoZnVuY3Rpb24gKCkgeworCiAgICAgICAgICAgICB2YXIgbmFtZSA9ICcnOwogICAgICAgICAgICAgdmFyIGNvdW50ID0gMDsKICAgICAgICAgICAgIHZhciBmaWxlQ29udHJvbHMgPSAkKCJpbnB1dFt0eXBlPSdmaWxlJ10iKTsKLSAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxmaWxlQ29udHJvbHMuc2l6ZSgpOyBpKyspIHsKKworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmaWxlQ29udHJvbHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICBpZiAoalF1ZXJ5LnRyaW0oZmlsZUNvbnRyb2xzLmdldChpKS52YWx1ZSkubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAgICAgICAgICBuYW1lID0gZmlsZUNvbnRyb2xzLmdldChpKS52YWx1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY291bnQgPT0gMSkgewotICAgICAgICAgICAgICAgICQoIiNlbnRyeV9iZWFuX25hbWUiKS5nZXQoMCkuZGlzYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAkKCIjZW50cnlfYmVhbl9uYW1lIikuZ2V0KDApLnZhbHVlID0gbmFtZTsKKworICAgICAgICAgICAgdmFyIGVudHJ5QmVhbiA9ICQoIiNlbnRyeV9iZWFuX25hbWUiKTsKKyAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMSkgeworICAgICAgICAgICAgICAgIGVudHJ5QmVhbi5nZXQoMCkuZGlzYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBlbnRyeUJlYW4uZ2V0KDApLnZhbHVlID0gZ2V0RmlsZU5hbWUobmFtZSk7CisKICAgICAgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPiAxKSB7Ci0gICAgICAgICAgICAgICAgJCgiI2VudHJ5X2JlYW5fbmFtZSIpLmNzcygiZm9udC1zdHlsZSIsIml0YWxpYyIpOwotICAgICAgICAgICAgICAgICQoIiNlbnRyeV9iZWFuX25hbWUiKS5jc3MoImNvbG9yIiwiZ3JleSIpOwotICAgICAgICAgICAgICAgICQoIiNlbnRyeV9iZWFuX25hbWUiKS5nZXQoMCkudmFsdWUgPSAiPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVBZGQubXVsdGlwbGVOYW1lcyIgIC8+IjsKLSAgICAgICAgICAgICAgICAkKCIjZW50cnlfYmVhbl9uYW1lIikuZ2V0KDApLmRpc2FibGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbnRyeUJlYW4uY3NzKCJmb250LXN0eWxlIiwgIml0YWxpYyIpOworICAgICAgICAgICAgICAgIGVudHJ5QmVhbi5jc3MoImNvbG9yIiwgImdyZXkiKTsKKyAgICAgICAgICAgICAgICBlbnRyeUJlYW4uZ2V0KDApLnZhbHVlID0gIjxzOnRleHQgbmFtZT0ibWVkaWFGaWxlQWRkLm11bHRpcGxlTmFtZXMiICAvPiI7CisgICAgICAgICAgICAgICAgZW50cnlCZWFuLmdldCgwKS5kaXNhYmxlZCA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHsKKyAgICAgICAgICAgICAgICAkKCIjdXBsb2FkQnV0dG9uOmZpcnN0IikuYXR0cigiZGlzYWJsZWQiLCBmYWxzZSkKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CisKKyAgICAgICAgJCgiI3VwbG9hZEJ1dHRvbjpmaXJzdCIpLmF0dHIoImRpc2FibGVkIiwgdHJ1ZSkKICAgICB9KTsKIAogICAgIGZ1bmN0aW9uIGdldEZpbGVOYW1lKGZ1bGxOYW1lKSB7Ci0gICAgICAgdmFyIGJhY2tzbGFzaEluZGV4ID0gZnVsbE5hbWUubGFzdEluZGV4T2YoJy8nKTsKLSAgICAgICB2YXIgZndkc2xhc2hJbmRleCA9IGZ1bGxOYW1lLmxhc3RJbmRleE9mKCdcXCcpOwotICAgICAgIHZhciBmaWxlTmFtZTsKLSAgICAgICBpZiAoYmFja3NsYXNoSW5kZXggPj0gMCkgewotICAgICAgICAgICBmaWxlTmFtZSA9IGZ1bGxOYW1lLnN1YnN0cmluZyhiYWNrc2xhc2hJbmRleCArIDEpOwotICAgICAgIH0gZWxzZSBpZiAoZndkc2xhc2hJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgIGZpbGVOYW1lID0gZnVsbE5hbWUuc3Vic3RyaW5nKGZ3ZHNsYXNoSW5kZXggKyAxKTsKLSAgICAgICB9Ci0gICAgICAgZWxzZSB7Ci0gICAgICAgICAgIGZpbGVOYW1lID0gZnVsbE5hbWU7Ci0gICAgICAgfQotICAgICAgIHJldHVybiBmaWxlTmFtZTsKKyAgICAgICAgdmFyIGJhY2tzbGFzaEluZGV4ID0gZnVsbE5hbWUubGFzdEluZGV4T2YoJy8nKTsKKyAgICAgICAgdmFyIGZ3ZHNsYXNoSW5kZXggPSBmdWxsTmFtZS5sYXN0SW5kZXhPZignXFwnKTsKKyAgICAgICAgdmFyIGZpbGVOYW1lOworICAgICAgICBpZiAoYmFja3NsYXNoSW5kZXggPj0gMCkgeworICAgICAgICAgICAgZmlsZU5hbWUgPSBmdWxsTmFtZS5zdWJzdHJpbmcoYmFja3NsYXNoSW5kZXggKyAxKTsKKyAgICAgICAgfSBlbHNlIGlmIChmd2RzbGFzaEluZGV4ID49IDApIHsKKyAgICAgICAgICAgIGZpbGVOYW1lID0gZnVsbE5hbWUuc3Vic3RyaW5nKGZ3ZHNsYXNoSW5kZXggKyAxKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZpbGVOYW1lID0gZnVsbE5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZpbGVOYW1lOwogICAgIH0KIAotPC9zY3JpcHQ+Ci0KLTxwIGNsYXNzPSJzdWJ0aXRsZSI+Ci0gICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVBZGQudGl0bGUiICAvPgotPC9wPgotPHAgY2xhc3M9InBhZ2V0aXAiPgotICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlQWRkLnBhZ2VUaXAiICAvPgotPC9wPgotCi08czpmb3JtIGlkPSJlbnRyeSIgYWN0aW9uPSJtZWRpYUZpbGVBZGQhc2F2ZSIgbWV0aG9kPSJQT1NUIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4KLQk8czpoaWRkZW4gbmFtZT0ic2FsdCIgLz4KLSAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIiAvPgotICAgIDxzOmhpZGRlbiBuYW1lPSJkaXJlY3RvcnlOYW1lIiAvPgotCi0gICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgotICAgIDwlLS0gVGl0bGUsIGNhdGVnb3J5LCBkYXRlcyBhbmQgb3RoZXIgbWV0YWRhdGEgLS0lPgotCi0gICAgPHRhYmxlIGNsYXNzPSJlbnRyeUVkaXRUYWJsZSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iMTAwJSI+Ci0KLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJlbnRyeUVkaXRGb3JtTGFiZWwiPgotICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InN0YXR1cyI+PHM6dGV4dCBuYW1lPSJnZW5lcmljLm5hbWUiIC8+PC9sYWJlbD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4ubmFtZSIgc2l6ZT0iNTAiIG1heGxlbmd0aD0iMjU1IiBzdHlsZT0id2lkdGg6MzAlIi8+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgIDwvdHI+Ci0KLSAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImVudHJ5RWRpdEZvcm1MYWJlbCI+Ci0gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ic3RhdHVzIj48czp0ZXh0IG5hbWU9ImdlbmVyaWMuZGVzY3JpcHRpb24iIC8+PC9sYWJlbD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPHM6dGV4dGFyZWEgbmFtZT0iYmVhbi5kZXNjcmlwdGlvbiIgY29scz0iNTAiIHJvd3M9IjUiIHN0eWxlPSJ3aWR0aDozMCUiLz4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgPC90cj4KLQotICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZW50cnlFZGl0Rm9ybUxhYmVsIj4KLSAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJzdGF0dXMiPjxzOnRleHQgbmFtZT0ibWVkaWFGaWxlQWRkLmNvcHlyaWdodCIgLz48L2xhYmVsPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8czp0ZXh0YXJlYSBuYW1lPSJiZWFuLmNvcHlyaWdodFRleHQiIGNvbHM9IjUwIiByb3dzPSIzIiBzdHlsZT0id2lkdGg6MzAlIi8+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgIDwvdHI+Ci0KLSAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImVudHJ5RWRpdEZvcm1MYWJlbCI+Ci0gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ic3RhdHVzIj48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZUFkZC50YWdzIiAvPjwvbGFiZWw+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnRhZ3NBc1N0cmluZyIgc2l6ZT0iNTAiIG1heGxlbmd0aD0iMjU1IiBzdHlsZT0id2lkdGg6MzAlIi8+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgIDwvdHI+Ci0KLSAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImVudHJ5RWRpdEZvcm1MYWJlbCI+Ci0gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ic3RhdHVzIj48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZUFkZC5kaXJlY3RvcnkiIC8+PC9sYWJlbD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPHM6c2VsZWN0IG5hbWU9ImJlYW4uZGlyZWN0b3J5SWQiIGxpc3Q9ImFsbERpcmVjdG9yaWVzIiBsaXN0S2V5PSJpZCIgbGlzdFZhbHVlPSJuYW1lIiAvPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICA8L3RyPgotCi0gICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJlbnRyeUVkaXRGb3JtTGFiZWwiPgotICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InN0YXR1cyI+PHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVBZGQuaW5jbHVkZUdhbGxlcnkiIC8+PC9sYWJlbD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPHM6Y2hlY2tib3ggbmFtZT0iYmVhbi5zaGFyZWRGb3JHYWxsZXJ5IiAvPgotICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlRWRpdC5pbmNsdWRlR2FsbGVyeUhlbHAiIC8+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgIDwvdHI+Ci0KLSAgICAgICA8dHI+Ci0gICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgPHRkPgotICAgICAgICAgICA8L3RkPgotICAgICAgIDwvdHI+Ci0KLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJlbnRyeUVkaXRGb3JtTGFiZWwiPgotICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InRpdGxlIj48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZUFkZC5maWxlTG9jYXRpb24iIC8+PC9sYWJlbD4KLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgPGRpdiBpZD0iZmlsZUNvbnRyb2wwZGl2IiBjbGFzcz0ibWlzY0NvbnRyb2wiPgotICAgICAgICAgICAgICAgICAgICA8czpmaWxlIGlkPSJmaWxlQ29udHJvbDAiIG5hbWU9InVwbG9hZGVkRmlsZXMiIHNpemU9IjMwIiAvPgotICAgICAgICAgICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLQotICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImZpbGVDb250cm9sMWRpdiIgY2xhc3M9Im1pc2NDb250cm9sIj4KLSAgICAgICAgICAgICAgICAgICAgPHM6ZmlsZSBpZD0iZmlsZUNvbnRyb2wxIiBuYW1lPSJ1cGxvYWRlZEZpbGVzIiBzaXplPSIzMCIgLz4KLSAgICAgICAgICAgICAgICAgICAgPGJyIC8+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0KLSAgICAgICAgICAgICAgICA8ZGl2IGlkPSJmaWxlQ29udHJvbDJkaXYiIGNsYXNzPSJtaXNjQ29udHJvbCI+Ci0gICAgICAgICAgICAgICAgICAgIDxzOmZpbGUgaWQ9ImZpbGVDb250cm9sMiIgbmFtZT0idXBsb2FkZWRGaWxlcyIgc2l6ZT0iMzAiIC8+Ci0gICAgICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgIDwvZGl2PgotCi0gICAgICAgICAgICAgICAgPGRpdiBpZD0iZmlsZUNvbnRyb2wzZGl2IiBjbGFzcz0ibWlzY0NvbnRyb2wiPgotICAgICAgICAgICAgICAgICAgICA8czpmaWxlIGlkPSJmaWxlQ29udHJvbDMiIG5hbWU9InVwbG9hZGVkRmlsZXMiIHNpemU9IjMwIiAvPgotICAgICAgICAgICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLQotICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImZpbGVDb250cm9sNGRpdiIgY2xhc3M9Im1pc2NDb250cm9sIj4KLSAgICAgICAgICAgICAgICAgICAgPHM6ZmlsZSBpZD0iZmlsZUNvbnRyb2w0IiBuYW1lPSJ1cGxvYWRlZEZpbGVzIiBzaXplPSIzMCIgLz4KLSAgICAgICAgICAgICAgICAgICAgPGJyIC8+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotCi0gICAgPC90YWJsZT4KLQotICAgIDxiciAvPgotICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wiPgotICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdtZWRpYUZpbGVBZGQudXBsb2FkJyl9IiBhY3Rpb249Im1lZGlhRmlsZUFkZCFzYXZlIiAvPgotICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLmNhbmNlbCcpfSIgYWN0aW9uPSJtZWRpYUZpbGVBZGQhY2FuY2VsIiAvPgotICAgIDwvZGl2PgotCi08L3M6Zm9ybT4KKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVBZGRTdWNjZXNzLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVBZGRTdWNjZXNzLmpzcAppbmRleCAxMjE0MTQ5Li5jM2NiYWUwIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvTWVkaWFGaWxlQWRkU3VjY2Vzcy5qc3AKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL01lZGlhRmlsZUFkZFN1Y2Nlc3MuanNwCkBAIC0xNiwxNjkgKzE2LDE5OCBAQAogICBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCiAtLSU+CiA8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+Ci08c2NyaXB0IHNyYz0iPHM6dXJsIHZhbHVlPSIvcm9sbGVyLXVpL3NjcmlwdHMvanF1ZXJ5LTIuMS4xLm1pbi5qcyIgLz4iPjwvc2NyaXB0PgogCi08c3R5bGU+Ci0gICAgdGFibGUubWVkaWFGaWxlVGFibGUgewotICAgICAgICBtYXJnaW4tbGVmdDogMmVtOwotICAgICAgICB3aWR0aDogOTAlOwotICAgIH0KLSAgICBpbWcubWVkaWFGaWxlSW1hZ2UgewotICAgICAgICBtYXJnaW4tcmlnaHQ6IDFlbTsKLSAgICB9Ci0gICAgc3Bhbi5sYWJlbCB7Ci0gICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotICAgIH0KLTwvc3R5bGU+CisKKzxwIGNsYXNzPSJzdWJ0aXRsZSI+PHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVTdWNjZXNzLnN1YnRpdGxlIi8+PC9wPgorPHAgY2xhc3M9InBhZ2V0aXAiPjxzOnRleHQgbmFtZT0ibWVkaWFGaWxlU3VjY2Vzcy5wYWdlVGlwIi8+PC9wPgorCis8czpmb3JtIGlkPSJlbnRyeSIgdGhlbWU9ImJvb3RzdHJhcCIgY3NzQ2xhc3M9ImZvcm0taG9yaXpvbnRhbCI+CisgICAgPHM6aGlkZGVuIG5hbWU9InNhbHQiLz4KKyAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIi8+CisgICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4uZW5jbG9zdXJlVVJMIiBpZD0iZW5jbG9zdXJlVVJMIi8+CisKKyAgICA8czppZiB0ZXN0PSJuZXdJbWFnZXMuc2l6ZSgpID4gMCI+CisgICAgICAgIDxoND48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVN1Y2Nlc3Muc2VsZWN0SW1hZ2VzVGl0bGUiLz48L2g0PgorICAgICAgICA8cD48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVN1Y2Nlc3Muc2VsZWN0SW1hZ2VzIi8+PC9wPgorCisgICAgICAgIDwlLS0gc2VsZWN0IGltYWdlcyB2aWEgY2hlY2tib3hlcyAtLSU+CisKKyAgICAgICAgPHM6aXRlcmF0b3IgdmFsdWU9Im5ld0ltYWdlcyIgdmFyPSJuZXdJbWFnZSI+CisKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIHBhbmVsLWRlZmF1bHQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiPgorCisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InNlbGVjdGVkSW1hZ2VzIiB2YWx1ZT0iPHM6cHJvcGVydHkgdmFsdWU9IiNuZXdJbWFnZS5pZCIvPiIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0yIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJtZWRpYUZpbGVJbWFnZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYz0nPHM6cHJvcGVydHkgdmFsdWU9IiV7I25ld0ltYWdlLnRodW1ibmFpbFVSTH0iIC8+JyBhbHQ9InRodW1ibmFpbCIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC05Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+PHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVTdWNjZXNzLm5hbWUiLz48L2I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIleyNuZXdJbWFnZS5uYW1lfSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVN1Y2Nlc3MudHlwZSIvPjwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9IiV7I25ld0ltYWdlLmNvbnRlbnRUeXBlfSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVN1Y2Nlc3Muc2l6ZSIvPjwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9IiV7I25ld0ltYWdlLmxlbmd0aH0iLz4gPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVTdWNjZXNzLmJ5dGVzIi8+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iJXsjbmV3SW1hZ2Uud2lkdGh9Ii8+IHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9IiV7I25ld0ltYWdlLmhlaWdodH0iLz4gPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVTdWNjZXNzLnBpeGVscyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVN1Y2Nlc3MubGluayIvPjwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9IiV7I25ld0ltYWdlLnBlcm1hbGlua30iLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPC9zOml0ZXJhdG9yPgorCisgICAgPC9zOmlmPgorCisgICAgPHM6aWYgdGVzdD0ibmV3RmlsZXMuc2l6ZSgpID4gMCI+CisKKyAgICAgICAgPCUtLSBzZWxlY3QgZW5jbG9zdXJlIGZpbGUgdmlhIHJhZGlvIGJveGVzIC0tJT4KKworICAgICAgICA8aDQ+PHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVTdWNjZXNzLnNlbGVjdEVuY2xvc3VyZVRpdGxlIi8+PC9oND4KKyAgICAgICAgPHA+PHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVTdWNjZXNzLnNlbGVjdEVuY2xvc3VyZSIvPjwvcD4KKworICAgICAgICA8czppdGVyYXRvciB2YWx1ZT0ibmV3RmlsZXMiIHZhcj0ibmV3RmlsZSI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbCBwYW5lbC1kZWZhdWx0Ij4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1ib2R5Ij4KKworICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJlbmNsb3N1cmUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2hhbmdlPSJzZXRFbmNsb3N1cmUoJzxzOnByb3BlcnR5IHZhbHVlPSIleyNuZXdGaWxlLnBlcm1hbGlua30iLz4nKSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xMSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxzOnRleHQgbmFtZT0ibWVkaWFGaWxlU3VjY2Vzcy5uYW1lIi8+PC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iJXsjbmV3RmlsZS5uYW1lfSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVN1Y2Nlc3MudHlwZSIvPjwvYj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9IiV7I25ld0ZpbGUuY29udGVudFR5cGV9Ii8+LCZuYnNwOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxzOnRleHQgbmFtZT0ibWVkaWFGaWxlU3VjY2Vzcy5zaXplIi8+PC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iJXsjbmV3RmlsZS5sZW5ndGh9Ii8+IDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlU3VjY2Vzcy5ieXRlcyIvPiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9IiV7I25ld0ZpbGUud2lkdGh9Ii8+IHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9IiV7I25ld0ZpbGUuaGVpZ2h0fSIvPiA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVN1Y2Nlc3MucGl4ZWxzIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxzOnRleHQgbmFtZT0ibWVkaWFGaWxlU3VjY2Vzcy5saW5rIi8+PC9iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iJXsjbmV3RmlsZS5wZXJtYWxpbmt9Ii8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L3M6aXRlcmF0b3I+CisKKyAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwgcGFuZWwtZGVmYXVsdCI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1ib2R5Ij4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgorCisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZW5jbG9zdXJlIiBvbmNoYW5nZT0ic2V0RW5jbG9zdXJlKCcnKSIgLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTEwIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlU3VjY2Vzcy5ub0VuY2xvc3VyZSIgLz4KKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKworICAgIDwvczppZj4KKworICAgIDwlLS0gYnV0dG9ucyBmb3IgY3JlYXRlIG5ldyB3ZWJsb2csIGNhbmNlbCBhbmQgdXBsb2FkIG1vcmUgLS0lPgorCisgICAgPGRpdj4KKyAgICAgICAgPHM6dXJsIHZhcj0ibWVkaWFGaWxlQWRkVVJMIiBhY3Rpb249Im1lZGlhRmlsZUFkZCI+CisgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIle2FjdGlvbldlYmxvZy5oYW5kbGV9Ii8+CisgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJkaXJlY3RvcnlOYW1lIiB2YWx1ZT0iJXtkaXJlY3RvcnlOYW1lfSIvPgorICAgICAgICA8L3M6dXJsPgorCisgICAgICAgIDxzOnVybCB2YXI9Im1lZGlhRmlsZVZpZXdVUkwiIGFjdGlvbj0ibWVkaWFGaWxlVmlldyI+CisgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIle2FjdGlvbldlYmxvZy5oYW5kbGV9Ii8+CisgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJkaXJlY3RvcnlJZCIgdmFsdWU9IiV7YmVhbi5kaXJlY3RvcnlJZH0iLz4KKyAgICAgICAgPC9zOnVybD4KKworICAgICAgICA8czpzdWJtaXQgY3NzQ2xhc3M9ImJ0biBidG4tc3VjY2VzcyIgaWQ9InN1Ym1pdCIgdmFsdWU9IiV7Z2V0VGV4dCgnbWVkaWFGaWxlU3VjY2Vzcy5jcmVhdGVQb3N0Jyl9IgorICAgICAgICAgICAgICAgICAgYWN0aW9uPSJlbnRyeUFkZFdpdGhNZWRpYUZpbGUiLz4KKworICAgICAgICA8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIG9uY2xpY2s9J3dpbmRvdy5sb2FkKCI8czpwcm9wZXJ0eSB2YWx1ZT0nJXttZWRpYUZpbGVBZGRVUkx9Jy8+IiknPgorICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVTdWNjZXNzLnVwbG9hZE1vcmUiLz4KKyAgICAgICAgPC9idXR0b24+CisKKyAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYnRuIiBvbmNsaWNrPSd3aW5kb3cubG9hZCgiPHM6cHJvcGVydHkgdmFsdWU9JyV7bWVkaWFGaWxlVmlld1VSTH0nLz4iKSc+CisgICAgICAgICAgICA8czp0ZXh0IG5hbWU9ImdlbmVyaWMuY2FuY2VsIi8+CisgICAgICAgIDwvYnV0dG9uPgorICAgIDwvZGl2PgorCis8L3M6Zm9ybT4KKworCis8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CiAKIDxzY3JpcHQ+Ci0gICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CisKKyAgICB2YXIgc3VibWl0QnV0dG9uID0gJCgiI3N1Ym1pdCIpOworCisgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgewogICAgICAgICAkKCIjc3VibWl0IikuYXR0cigiZGlzYWJsZWQiLCB0cnVlKTsKIAotICAgICAgICAkKCJpbnB1dFt0eXBlPSdjaGVja2JveCddIikuY2hhbmdlKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgaWYgKCQoIiNlbmNsb3N1cmVVUkwiKS5nZXQoMCkuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpICE9ICcnKSB7CisgICAgICAgICQoImlucHV0W3R5cGU9J2NoZWNrYm94J10iKS5jaGFuZ2UoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKCQoIiNlbmNsb3N1cmVVUkwiKS5nZXQoMCkuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpICE9PSAnJykgewogICAgICAgICAgICAgICAgICQoIiNzdWJtaXQiKS5hdHRyKCJkaXNhYmxlZCIsIGZhbHNlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAkKCIjc3VibWl0IikuYXR0cigiZGlzYWJsZWQiLCBpc0ltYWdlQ2hlY2tlZCgpID8gZmFsc2UgOiB0cnVlKTsKKyAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5hdHRyKCJkaXNhYmxlZCIsICFpc0ltYWdlQ2hlY2tlZCgpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CisKICAgICBmdW5jdGlvbiBpc0ltYWdlQ2hlY2tlZCgpIHsKICAgICAgICAgdmFyIGJveGVzID0gJCgiaW5wdXRbdHlwZT0nY2hlY2tib3gnXSIpOwotICAgICAgICBmb3IgKHZhciBpPTA7IGk8Ym94ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3hlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgaWYgKGJveGVzLmdldChpKS5jaGVja2VkKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKwogICAgIGZ1bmN0aW9uIHNldEVuY2xvc3VyZSh1cmwpIHsKICAgICAgICAgJCgiI2VuY2xvc3VyZVVSTCIpLmdldCgwKS52YWx1ZSA9IHVybDsKICAgICAgICAgaWYgKGlzSW1hZ2VDaGVja2VkKCkpIHsKICAgICAgICAgICAgICQoIiNzdWJtaXQiKS5hdHRyKCJkaXNhYmxlZCIsIGZhbHNlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAkKCIjc3VibWl0IikuYXR0cigiZGlzYWJsZWQiLCB1cmwgPT0gJycgPyB0cnVlIDogZmFsc2UpOworICAgICAgICBzdWJtaXRCdXR0b24uYXR0cigiZGlzYWJsZWQiLCB1cmwgPT09ICcnKTsKICAgICB9CisKIDwvc2NyaXB0PgotCi0KLTxwIGNsYXNzPSJzdWJ0aXRsZSI+Ci0gICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVTdWNjZXNzLnN1YnRpdGxlIiAvPgotPC9wPgotPHAgY2xhc3M9InBhZ2V0aXAiPgotICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlU3VjY2Vzcy5wYWdlVGlwIiAvPgotPC9wPgotCi08czpmb3JtIGlkPSJlbnRyeSI+Ci0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgLz4KLSAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5lbmNsb3N1cmVVUkwiIGlkPSJlbmNsb3N1cmVVUkwiIC8+Ci0KLSAgICA8czppZiB0ZXN0PSJuZXdJbWFnZXMuc2l6ZSgpID4gMCI+Ci0gICAgICAgIDxwPjxzOnRleHQgbmFtZT0ibWVkaWFGaWxlU3VjY2Vzcy5zZWxlY3RJbWFnZXMiIC8+PC9wPgotCi0gICAgICAgIDwlLS0gY2hlY2tib3hlZCBsaXN0IG9mIGltYWdlcyB1cGxvYWRlZCAtLSU+Ci0gICAgICAgIDx0YWJsZSBjbGFzcz0ibWVkaWFGaWxlVGFibGUiPgotICAgICAgICAgICAgPHM6aXRlcmF0b3IgdmFsdWU9Im5ld0ltYWdlcyIgdmFyPSJuZXdJbWFnZSI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI1JSI+Ci0gICAgICAgICAgICAgICAgICAgIDwlLS0gY2hlY2tib3ggZm9yIGZpbGUgLS0lPgotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJzZWxlY3RlZEltYWdlcyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSI8czpwcm9wZXJ0eSB2YWx1ZT0iI25ld0ltYWdlLmlkIi8+Ii8+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLQotICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMTUlIj4KLSAgICAgICAgICAgICAgICAgICAgPGltZyBhbGlnbj0iY2VudGVyIiBjbGFzcz0ibWVkaWFGaWxlSW1hZ2UiCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3JjPSc8czpwcm9wZXJ0eSB2YWx1ZT0iJXsjbmV3SW1hZ2UudGh1bWJuYWlsVVJMfSIgLz4nIGFsdD0idGh1bWJuYWlsIiAvPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0KLSAgICAgICAgICAgICAgICA8dGQgd2lkdGg9IjgwJSI+Ci0gICAgICAgICAgICAgICAgICAgIDwlLS0gZGVzY3JpcHRpb24gb2YgZmlsZSAtLSU+Ci0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+PHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVTdWNjZXNzLm5hbWUiIC8+PC9zcGFuPgotICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iJXsjbmV3SW1hZ2UubmFtZX0iIC8+PGJyIC8+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVN1Y2Nlc3MudHlwZSIgLz48L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIleyNuZXdJbWFnZS5jb250ZW50VHlwZX0iIC8+PGJyIC8+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImxhYmVsIj48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVN1Y2Nlc3MubGluayIgLz48L3NwYW4+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIleyNuZXdJbWFnZS5wZXJtYWxpbmt9IiAvPjxiciAvPgotCi0gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJsYWJlbCI+PHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVTdWNjZXNzLnNpemUiIC8+PC9zcGFuPgotICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iJXsjbmV3SW1hZ2UubGVuZ3RofSIgLz4gPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVTdWNjZXNzLmJ5dGVzIiAvPiwKLSAgICAgICAgICAgICAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9IiV7I25ld0ltYWdlLndpZHRofSIgLz4geAotICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iJXsjbmV3SW1hZ2UuaGVpZ2h0fSIgLz4gPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVTdWNjZXNzLnBpeGVscyIgLz4KLQotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgPC9zOml0ZXJhdG9yPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgPC9zOmlmPgotCi0gICAgPHM6aWYgdGVzdD0ibmV3RmlsZXMuc2l6ZSgpID4gMCI+Ci0gICAgICAgIDxwPjxzOnRleHQgbmFtZT0ibWVkaWFGaWxlU3VjY2Vzcy5zZWxlY3RFbmNsb3N1cmUiIC8+PC9wPgotCi0gICAgICAgIDwlLS0gY2hlY2tib3hlZCBsaXN0IG9mIG90aGVyIGZpbGVzIHVwbG9hZGVkIC0tJT4KLSAgICAgICAgPHRhYmxlIGNsYXNzPSJtZWRpYUZpbGVUYWJsZSI+Ci0gICAgICAgICAgICA8czppdGVyYXRvciB2YWx1ZT0ibmV3RmlsZXMiIHZhcj0ibmV3RmlsZSI+Ci0gICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyMCUiPgotICAgICAgICAgICAgICAgICAgICA8JS0tIHJhZGlvIGJ1dHRvbiBmb3IgZmlsZSAtLSU+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZW5jbG9zdXJlIgotICAgICAgICAgICAgICAgICAgICAgICBvbmNoYW5nZT0ic2V0RW5jbG9zdXJlKCc8czpwcm9wZXJ0eSB2YWx1ZT0iJXsjbmV3RmlsZS5wZXJtYWxpbmt9IiAvPicpIiAvPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI4MCUiPgotICAgICAgICAgICAgICAgICAgICA8JS0tIGRlc2NyaXB0aW9uIG9mIGZpbGUgLS0lPgotICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iJXsjbmV3RmlsZS5uYW1lfSIgLz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgIDwvczppdGVyYXRvcj4KLSAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iZW5jbG9zdXJlIiBvbmNoYW5nZT0ic2V0RW5jbG9zdXJlKCcnKSIgLz4KLSAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVTdWNjZXNzLm5vRW5jbG9zdXJlIiAvPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgotCi0gICAgPC9zOmlmPgotCi0KLSAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjIwcHgiIj4KLQotICAgICAgICA8cD48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVN1Y2Nlc3MuY3JlYXRlUG9zdFByb21wdCIgLz48L3A+Ci0gICAgICAgIDxzOnN1Ym1pdCBpZD0ic3VibWl0IiB2YWx1ZT0iJXtnZXRUZXh0KCdtZWRpYUZpbGVTdWNjZXNzLmNyZWF0ZVBvc3QnKX0iIGFjdGlvbj0iZW50cnlBZGRXaXRoTWVkaWFGaWxlIi8+Ci0gICAgICAgIDxici8+Ci0gICAgICAgIDxici8+Ci0gICAgICAgIDxici8+Ci0KLSAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVTdWNjZXNzLm5vVGhhbmtzIiAvPgotICAgICAgICA8dWw+Ci0gICAgICAgICAgICA8bGk+Ci0gICAgICAgICAgICAgICAgPHM6dXJsIHZhcj0ibWVkaWFGaWxlQWRkVVJMIiBhY3Rpb249Im1lZGlhRmlsZUFkZCI+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9ImRpcmVjdG9yeU5hbWUiIHZhbHVlPSIle2RpcmVjdG9yeU5hbWV9IiAvPgotICAgICAgICAgICAgICAgIDwvczp1cmw+Ci0gICAgICAgICAgICAgICAgPHM6YSBocmVmPSIle21lZGlhRmlsZUFkZFVSTH0iPgotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVN1Y2Nlc3MuYWRkQW5vdGhlciIgLz4KLSAgICAgICAgICAgICAgICA8L3M6YT4KLSAgICAgICAgICAgIDwvbGk+Ci0KLSAgICAgICAgICAgIDxsaT4KLSAgICAgICAgICAgICAgICA8czp1cmwgdmFyPSJtZWRpYUZpbGVWaWV3VVJMIiBhY3Rpb249Im1lZGlhRmlsZVZpZXciPgotICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIle2FjdGlvbldlYmxvZy5oYW5kbGV9IiAvPgotICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJkaXJlY3RvcnlJZCIgdmFsdWU9IiV7YmVhbi5kaXJlY3RvcnlJZH0iIC8+Ci0gICAgICAgICAgICAgICAgPC9zOnVybD4KLSAgICAgICAgICAgICAgICA8czphIGhyZWY9IiV7bWVkaWFGaWxlVmlld1VSTH0iPgotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVN1Y2Nlc3MubWVkaWFGaWxlVmlldyIgLz4KLSAgICAgICAgICAgICAgICA8L3M6YT4KLSAgICAgICAgICAgIDwvbGk+Ci0gICAgICAgIDwvdWw+Ci0KLSAgICA8L2Rpdj4KLQotPC9zOmZvcm0+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvTWVkaWFGaWxlRWRpdC5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvTWVkaWFGaWxlRWRpdC5qc3AKaW5kZXggNjcwZWFhNi4uOWM3NzVhYSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL01lZGlhRmlsZUVkaXQuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVFZGl0LmpzcApAQCAtMSwxODMgKzEsMTIyIEBACi08JS0tDQotICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCi0gICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UNCi0gIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdA0KLSAgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLg0KLSAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotDQotICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotDQotICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KLSAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQotICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZw0KLSAgY29weXJpZ2h0IGluIHRoaXMgd29yaywgcGxlYXNlIHNlZSB0aGUgTk9USUNFIGZpbGUgaW4gdGhlIHRvcCBsZXZlbA0KLSAgZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLg0KLS0tJT4NCi08JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+DQotPCVAIHBhZ2UgaW1wb3J0PSJvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuY29uZmlnLldlYmxvZ2dlckNvbmZpZyIgJT4NCi0NCi08c2NyaXB0IHNyYz0iPHM6dXJsIHZhbHVlPSIvcm9sbGVyLXVpL3NjcmlwdHMvanF1ZXJ5LTIuMS4xLm1pbi5qcyIgLz4iPjwvc2NyaXB0Pg0KLQ0KLTxzOmlmIHRlc3Q9ImJlYW4uaXNJbWFnZSI+DQotICAgIDxkaXYgY2xhc3M9Im1lZGlhRmlsZVRodW1ibmFpbCI+DQotICAgICAgICA8YSBocmVmPSc8czpwcm9wZXJ0eSB2YWx1ZT0iYmVhbi5wZXJtYWxpbmsiIC8+JyB0YXJnZXQ9Il9ibGFuayI+DQotICAgICAgICAgICAgPGltZyBhbGlnbj0icmlnaHQiIGFsdD0idGh1bWJuYWlsIiBzcmM9JzxzOnByb3BlcnR5IHZhbHVlPSJiZWFuLnRodW1ibmFpbFVSTCIgLz4nDQotICAgICAgICAgICAgICAgICB0aXRsZT0nPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVFZGl0LmNsaWNrVG9WaWV3IiAvPicgLz4NCi0gICAgICAgIDwvYT4NCi0gICAgPC9kaXY+DQotPC9zOmlmPg0KLQ0KLTxwIGNsYXNzPSJzdWJ0aXRsZSI+DQotICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlRWRpdC5zdWJ0aXRsZSI+DQotICAgICAgICA8czpwYXJhbSB2YWx1ZT0iYmVhbi5uYW1lIiAvPg0KLSAgICA8L3M6dGV4dD4NCi08L3A+DQotDQotPHAgY2xhc3M9InBhZ2V0aXAiPg0KLSAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZUVkaXQucGFnZXRpcCIgIC8+DQotPC9wPg0KLQ0KLTxzOmZvcm0gaWQ9ImVudHJ5IiBhY3Rpb249Im1lZGlhRmlsZUVkaXQhc2F2ZSIgbWV0aG9kPSJQT1NUIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIj4NCi0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+DQotICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciIC8+DQotICAgIDxzOmhpZGRlbiBuYW1lPSJtZWRpYUZpbGVJZCIgaWQ9Im1lZGlhRmlsZUlkIiAvPg0KLSAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5wZXJtYWxpbmsiIC8+DQotDQotICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4NCi0gICAgPCUtLSBUaXRsZSwgY2F0ZWdvcnksIGRhdGVzIGFuZCBvdGhlciBtZXRhZGF0YSAtLSU+DQotDQotICAgIDx0YWJsZSBjbGFzcz0iZW50cnlFZGl0VGFibGUiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjEwMCUiPg0KLQ0KLSAgICAgICAgPHRyPg0KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZW50cnlFZGl0Rm9ybUxhYmVsIj4NCi0gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ic3RhdHVzIj48czp0ZXh0IG5hbWU9ImdlbmVyaWMubmFtZSIgLz48L2xhYmVsPg0KLSAgICAgICAgICAgIDwvdGQ+DQotICAgICAgICAgICAgPHRkPg0KLSAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5uYW1lIiBzaXplPSIzNSIgbWF4bGVuZ3RoPSIxMDAiIHRhYmluZGV4PSIxIiAvPg0KLSAgICAgICAgICAgIDwvdGQ+DQotICAgICAgIDwvdHI+DQotDQotICAgICAgIDx0cj4NCi0gICAgICAgICAgICA8dGQgY2xhc3M9ImVudHJ5RWRpdEZvcm1MYWJlbCI+DQotICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImZpbGVJbmZvIj48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZUVkaXQuZmlsZUluZm8iIC8+PC9sYWJlbD4NCi0gICAgICAgICAgICA8L3RkPg0KLSAgICAgICAgICAgIDx0ZD4NCi0gICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVFZGl0LmZpbGVUeXBlU2l6ZSI+DQotICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0iYmVhbi5jb250ZW50VHlwZSIgLz4NCi0gICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIHZhbHVlPSJiZWFuLmxlbmd0aCIgLz4NCi0gICAgICAgICAgICAgICAgPC9zOnRleHQ+DQotICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImJlYW4uaXNJbWFnZSI+DQotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZUVkaXQuZmlsZURpbWVuc2lvbnMiPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIHZhbHVlPSJiZWFuLndpZHRoIiAvPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIHZhbHVlPSJiZWFuLmhlaWdodCIgLz4NCi0gICAgICAgICAgICAgICAgICAgIDwvczp0ZXh0Pg0KLSAgICAgICAgICAgICAgICA8L3M6aWY+DQotICAgICAgICAgICAgPC90ZD4NCi0gICAgICAgPC90cj4NCi0NCi0gICAgICAgIDx0cj4NCi0gICAgICAgICAgICA8dGQgY2xhc3M9ImVudHJ5RWRpdEZvcm1MYWJlbCI+DQotICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InN0YXR1cyI+PHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVFZGl0LnBlcm1hbGluayIvPjwvbGFiZWw+DQotICAgICAgICAgICAgPC90ZD4NCi0gICAgICAgICAgICA8dGQ+DQotICAgICAgICAgICAgICAgIDxzOnVybCB2YXI9ImxpbmtJY29uVVJMIiB2YWx1ZT0iL2ltYWdlcy9saW5rLnBuZyI+PC9zOnVybD4NCi0NCi0gICAgICAgICAgICAgICAgPGEgaHJlZj0nPHM6cHJvcGVydHkgdmFsdWU9ImJlYW4ucGVybWFsaW5rIiAvPicgdGFyZ2V0PSJfYmxhbmsiDQotICAgICAgICAgICAgICAgICAgIHRpdGxlPSc8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZUVkaXQubGlua1RpdGxlIiAvPic+DQotICAgICAgICAgICAgICAgICAgICA8aW1nIGJvcmRlcj0iMCIgc3JjPSc8czpwcm9wZXJ0eSB2YWx1ZT0iJXtsaW5rSWNvblVSTH0iIC8+JyBzdHlsZT0icGFkZGluZzoycHggMnB4OyIgYWx0PSJsaW5rIi8+DQotICAgICAgICAgICAgICAgIDwvYT4NCi0NCi0gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJjbGlwX3RleHQiIHNpemU9IjUwIiBzdHlsZT0id2lkdGg6OTAlIg0KLSAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9JzxzOnByb3BlcnR5IHZhbHVlPSJiZWFuLnBlcm1hbGluayIgLz4nIHJlYWRvbmx5Lz4NCi0NCi0gICAgICAgICAgICA8L3RkPg0KLSAgICAgICAgPC90cj4NCi0NCi0gICAgICAgPHRyPg0KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZW50cnlFZGl0Rm9ybUxhYmVsIj4NCi0gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ic3RhdHVzIj48czp0ZXh0IG5hbWU9ImdlbmVyaWMuZGVzY3JpcHRpb24iIC8+PC9sYWJlbD4NCi0gICAgICAgICAgICA8L3RkPg0KLSAgICAgICAgICAgIDx0ZD4NCi0gICAgICAgICAgICAgICAgPHM6dGV4dGFyZWEgbmFtZT0iYmVhbi5kZXNjcmlwdGlvbiIgY29scz0iNTAiIHJvd3M9IjIiIHRhYmluZGV4PSIyIiBzdHlsZT0id2lkdGg6NzAlIiAvPg0KLSAgICAgICAgICAgIDwvdGQ+DQotICAgICAgIDwvdHI+DQotDQotICAgICAgIDx0cj4NCi0gICAgICAgICAgICA8dGQgY2xhc3M9ImVudHJ5RWRpdEZvcm1MYWJlbCI+DQotICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InRhZ3MiPjxzOnRleHQgbmFtZT0ibWVkaWFGaWxlRWRpdC50YWdzIiAvPjwvbGFiZWw+DQotICAgICAgICAgICAgPC90ZD4NCi0gICAgICAgICAgICA8dGQ+DQotICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnRhZ3NBc1N0cmluZyIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iMTAwIiB0YWJpbmRleD0iMyIgc3R5bGU9IndpZHRoOjcwJSIvPg0KLSAgICAgICAgICAgIDwvdGQ+DQotICAgICAgIDwvdHI+DQotDQotICAgICAgIDx0cj4NCi0gICAgICAgICAgICA8dGQgY2xhc3M9ImVudHJ5RWRpdEZvcm1MYWJlbCI+DQotICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImNvcHlyaWdodCI+PHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVFZGl0LmNvcHlyaWdodCIgLz48L2xhYmVsPg0KLSAgICAgICAgICAgIDwvdGQ+DQotICAgICAgICAgICAgPHRkPg0KLSAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5jb3B5cmlnaHRUZXh0IiBzaXplPSIzMCIgbWF4bGVuZ3RoPSIxMDAiIHRhYmluZGV4PSI0IiBzdHlsZT0id2lkdGg6NzAlIi8+DQotICAgICAgICAgICAgPC90ZD4NCi0gICAgICAgPC90cj4NCi0NCi0gICAgICAgPHRyPg0KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZW50cnlFZGl0Rm9ybUxhYmVsIj4NCi0gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iZGlyZWN0b3J5SWQiPjxzOnRleHQgbmFtZT0ibWVkaWFGaWxlRWRpdC5kaXJlY3RvcnkiIC8+PC9sYWJlbD4NCi0gICAgICAgICAgICA8L3RkPg0KLSAgICAgICAgICAgIDx0ZD4NCi0gICAgICAgICAgICAgICAgPHM6c2VsZWN0IG5hbWU9ImJlYW4uZGlyZWN0b3J5SWQiIGxpc3Q9ImFsbERpcmVjdG9yaWVzIg0KLSAgICAgICAgICAgICAgICAgICAgbGlzdEtleT0iaWQiIGxpc3RWYWx1ZT0ibmFtZSIgdGFiaW5kZXg9IjUiIC8+DQotICAgICAgICAgICAgPC90ZD4NCi0gICAgICAgPC90cj4NCi0NCi0gICAgICAgPHRyPg0KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZW50cnlFZGl0Rm9ybUxhYmVsIj4NCi0gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ic3RhdHVzIj48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZUVkaXQuaW5jbHVkZUdhbGxlcnkiIC8+PC9sYWJlbD4NCi0gICAgICAgICAgICA8L3RkPg0KLSAgICAgICAgICAgIDx0ZD4NCi0gICAgICAgICAgICAgICAgPHM6Y2hlY2tib3ggbmFtZT0iYmVhbi5zaGFyZWRGb3JHYWxsZXJ5IiB0YWJpbmRleD0iNiIgLz4NCi0gICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVFZGl0LmluY2x1ZGVHYWxsZXJ5SGVscCIgLz4NCi0gICAgICAgICAgICA8L3RkPg0KLSAgICAgICA8L3RyPg0KLQ0KLSAgICAgICAgPHRyPg0KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZW50cnlFZGl0Rm9ybUxhYmVsIj4NCi0gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0idGl0bGUiPjxzOnRleHQgbmFtZT0ibWVkaWFGaWxlRWRpdC51cGRhdGVGaWxlQ29udGVudHMiIC8+PC9sYWJlbD4NCi0gICAgICAgICAgICA8L3RkPg0KLSAgICAgICAgICAgIDx0ZD4NCi0gICAgICAgICAgICAgICAgPGRpdiBpZD0iZmlsZUNvbnRyb2xkaXYiIGNsYXNzPSJtaXNjQ29udHJvbCI+DQotICAgICAgICAgICAgICAgICAgICA8czpmaWxlIGlkPSJmaWxlQ29udHJvbCIgbmFtZT0idXBsb2FkZWRGaWxlIiBzaXplPSIzMCIgLz4NCi0gICAgICAgICAgICAgICAgICAgIDxiciAvPg0KLSAgICAgICAgICAgICAgICA8L2Rpdj4NCi0gICAgICAgICAgICA8L3RkPg0KLSAgICAgICAgPC90cj4NCi0NCi0gICAgICAgIDwhLS0gb3JpZ2luYWwgcGF0aCBmcm9tIGJhc2UgVVJMIG9mIGN0eC9yZXNvdXJjZXMvIC0tPg0KLSAgICAgICAgPHM6aWYgdGVzdD0iZ2V0Qm9vbGVhblByb3AoJ21lZGlhZmlsZS5vcmlnaW5hbFBhdGhFZGl0LmVuYWJsZWQnKSI+DQotICAgICAgICA8dHI+DQotICAgICAgICAgICAgPHRkIGNsYXNzPSJvcmlnaW5hbFBhdGhMYWJlbCI+DQotICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Im9yaWdpbmFsUGF0aCI+PHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVFZGl0Lm9yaWdpbmFsUGF0aCIgLz48L2xhYmVsPg0KLSAgICAgICAgICAgIDwvdGQ+DQotICAgICAgICAgICAgPHRkPg0KLSAgICAgICAgICAgICAgICA8ZGl2IGlkPSJvcmlnaW5hbFBhdGhkaXYiIGNsYXNzPSJtaXNjQ29udHJvbCI+DQotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5vcmlnaW5hbFBhdGgiIGlkPSJvcmlnaW5hbFBhdGgiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjEwMCIgdGFiaW5kZXg9IjMiIC8+DQotICAgICAgICAgICAgICAgICAgICA8YnIgLz4NCi0gICAgICAgICAgICAgICAgPC9kaXY+DQotICAgICAgICAgICAgPC90ZD4NCi0gICAgICAgIDwvdHI+DQotICAgICAgICA8L3M6aWY+DQotDQotICAgIDwvdGFibGU+DQotDQotICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wiPg0KLSAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiB0YWJpbmRleD0iNyINCi0gICAgICAgICAgICAgIHZhbHVlPSI8czp0ZXh0IG5hbWU9ImdlbmVyaWMuc2F2ZSIgLz4iIG5hbWU9InN1Ym1pdCIgLz4NCi0gICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdGFiaW5kZXg9IjgiDQotICAgICAgICAgICAgICB2YWx1ZT0iPHM6dGV4dCBuYW1lPSJnZW5lcmljLmNhbmNlbCIgLz4iIG9uQ2xpY2s9ImphdmFzY3JpcHQ6d2luZG93LnBhcmVudC5vbkVkaXRDYW5jZWxsZWQoKTsiIC8+DQotICAgIDwvZGl2Pg0KLQ0KLTwvczpmb3JtPg0KLQ0KLQ0KKzwlLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UKKyAgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcKKyAgY29weXJpZ2h0IGluIHRoaXMgd29yaywgcGxlYXNlIHNlZSB0aGUgTk9USUNFIGZpbGUgaW4gdGhlIHRvcCBsZXZlbAorICBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCistLSU+Cis8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+CisKKzxwIGNsYXNzPSJwYWdldGlwIj4KKyAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZUVkaXQucGFnZXRpcCIvPgorPC9wPgorCis8czpmb3JtIGlkPSJlbnRyeSIgYWN0aW9uPSJtZWRpYUZpbGVFZGl0IXNhdmUiIG1ldGhvZD0iUE9TVCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIKKyAgICAgICAgdGhlbWU9ImJvb3RzdHJhcCIgY2xhc3M9ImZvcm0taG9yaXpvbnRhbCI+CisKKyAgICA8czpoaWRkZW4gbmFtZT0ic2FsdCIvPgorICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciLz4KKyAgICA8czpoaWRkZW4gbmFtZT0ibWVkaWFGaWxlSWQiIGlkPSJtZWRpYUZpbGVJZCIvPgorICAgIDxzOmhpZGRlbiBuYW1lPSJiZWFuLnBlcm1hbGluayIvPgorCisgICAgPHM6aWYgdGVzdD0iYmVhbi5pc0ltYWdlIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CisgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImNvbnRyb2wtbGFiZWwgY29sLXNtLTMiPlRodW1ibmFpbDwvbGFiZWw+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyBjb2wtc20tOSI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0nPHM6cHJvcGVydHkgdmFsdWU9ImJlYW4ucGVybWFsaW5rIiAvPicgdGFyZ2V0PSJfYmxhbmsiPgorICAgICAgICAgICAgICAgICAgICA8aW1nIGFsdD0idGh1bWJuYWlsIiBzcmM9JzxzOnByb3BlcnR5IHZhbHVlPSJiZWFuLnRodW1ibmFpbFVSTCIgLz4nCisgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9JzxzOnRleHQgbmFtZT0ibWVkaWFGaWxlRWRpdC5jbGlja1RvVmlldyIgLz4nLz4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgPC9zOmlmPgorCisgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorICAgIDwlLS0gVGl0bGUsIGNhdGVnb3J5LCBkYXRlcyBhbmQgb3RoZXIgbWV0YWRhdGEgLS0lPgorCisgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4ubmFtZSIgc2l6ZT0iMzUiIG1heGxlbmd0aD0iMTAwIiB0YWJpbmRleD0iMSIKKyAgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5uYW1lJyl9Ii8+CisKKyAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KKyAgICAgICAgPGxhYmVsIGNsYXNzPSJjb250cm9sLWxhYmVsIGNvbC1zbS0zIj48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZUVkaXQuZmlsZUluZm8iLz48L2xhYmVsPgorCisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIGNvbC1zbS05Ij4KKworICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVFZGl0LmZpbGVUeXBlU2l6ZSI+CisgICAgICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9ImJlYW4uY29udGVudFR5cGUiLz4KKyAgICAgICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0iYmVhbi5sZW5ndGgiLz4KKyAgICAgICAgICAgIDwvczp0ZXh0PgorCisgICAgICAgICAgICA8czppZiB0ZXN0PSJiZWFuLmlzSW1hZ2UiPgorICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlRWRpdC5maWxlRGltZW5zaW9ucyI+CisgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIHZhbHVlPSJiZWFuLndpZHRoIi8+CisgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIHZhbHVlPSJiZWFuLmhlaWdodCIvPgorICAgICAgICAgICAgICAgIDwvczp0ZXh0PgorICAgICAgICAgICAgPC9zOmlmPgorCisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+CisgICAgICAgIDxsYWJlbCBjbGFzcz0iY29udHJvbC1sYWJlbCBjb2wtc20tMyI+VVJMPC9sYWJlbD4KKworICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyBjb2wtc20tOSI+CisKKyAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iY2xpcF90ZXh0IiBzaXplPSI4MCIKKyAgICAgICAgICAgICAgICAgICB2YWx1ZT0nPHM6cHJvcGVydHkgdmFsdWU9ImJlYW4ucGVybWFsaW5rIiAvPicgcmVhZG9ubHkgLz4KKworICAgICAgICAgICAgPHM6dXJsIHZhcj0ibGlua0ljb25VUkwiIHZhbHVlPSIvcm9sbGVyLXVpL2ltYWdlcy9jbGlwcHkuc3ZnIi8+CisgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjbGlwYnV0dG9uIiBkYXRhLWNsaXBib2FyZC10YXJnZXQ9IiNjbGlwX3RleHQiIHR5cGU9ImJ1dHRvbiI+CisgICAgICAgICAgICAgICAgPGltZyBzcmM9JzxzOnByb3BlcnR5IHZhbHVlPSIle2xpbmtJY29uVVJMfSIgLz4nIGFsdD0iQ29weSB0byBjbGlwYm9hcmQiIHN0eWxlPSJ3aWR0aDowLjllbTsgaGVpZ2h0OjAuOWVtIj4KKyAgICAgICAgICAgIDwvYnV0dG9uPgorCisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCisgICAgPHM6dGV4dGFyZWEgbmFtZT0iYmVhbi5kZXNjcmlwdGlvbiIgY29scz0iNTAiIHJvd3M9IjIiIHRhYmluZGV4PSIyIgorICAgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ2dlbmVyaWMuZGVzY3JpcHRpb24nKX0iLz4KKworICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnRhZ3NBc1N0cmluZyIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iMTAwIiB0YWJpbmRleD0iMyIKKyAgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgnbWVkaWFGaWxlRWRpdC50YWdzJyl9Ii8+CisKKyAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5jb3B5cmlnaHRUZXh0IiBzaXplPSIzMCIgbWF4bGVuZ3RoPSIxMDAiIHRhYmluZGV4PSI0IgorICAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCdtZWRpYUZpbGVFZGl0LmNvcHlyaWdodCcpfSIvPgorCisgICAgPHM6c2VsZWN0IG5hbWU9ImJlYW4uZGlyZWN0b3J5SWQiIGxpc3Q9ImFsbERpcmVjdG9yaWVzIiBsaXN0S2V5PSJpZCIgbGlzdFZhbHVlPSJuYW1lIgorICAgICAgICAgICAgICB0YWJpbmRleD0iNSIgbGFiZWw9IiV7Z2V0VGV4dCgnbWVkaWFGaWxlRWRpdC5kaXJlY3RvcnknKX0iLz4KKworICAgIDxzOmNoZWNrYm94IG5hbWU9ImJlYW4uc2hhcmVkRm9yR2FsbGVyeSIgdGFiaW5kZXg9IjYiCisgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgnbWVkaWFGaWxlRWRpdC5pbmNsdWRlR2FsbGVyeUhlbHAnKX0iLz4KKworICAgIDwhLS0gb3JpZ2luYWwgcGF0aCBmcm9tIGJhc2UgVVJMIG9mIGN0eC9yZXNvdXJjZXMvIC0tPgorICAgIDxzOmlmIHRlc3Q9ImdldEJvb2xlYW5Qcm9wKCdtZWRpYWZpbGUub3JpZ2luYWxQYXRoRWRpdC5lbmFibGVkJykiPgorICAgICAgICA8ZGl2IGlkPSJvcmlnaW5hbFBhdGhkaXYiIGNsYXNzPSJtaXNjQ29udHJvbCI+CisgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5vcmlnaW5hbFBhdGgiIGlkPSJvcmlnaW5hbFBhdGgiIHNpemU9IjMwIgorICAgICAgICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD0iMTAwIiB0YWJpbmRleD0iMyIvPgorICAgICAgICA8L2Rpdj4KKyAgICA8L3M6aWY+CisKKworICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHRhYmluZGV4PSI3IiBjbGFzcz0iYnRuIGJ0bi1zdWNjZXNzIgorICAgICAgICAgICB2YWx1ZT0iPHM6dGV4dCBuYW1lPSJnZW5lcmljLnNhdmUiIC8+IiBuYW1lPSJzdWJtaXQiLz4KKyAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB0YWJpbmRleD0iOCIgY2xhc3M9ImJ0biIKKyAgICAgICAgICAgdmFsdWU9IjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5jYW5jZWwiIC8+IiBvbkNsaWNrPSJ3aW5kb3cucGFyZW50Lm9uRWRpdENhbmNlbGxlZCgpOyIvPgorCis8L3M6Zm9ybT4KKworCis8c2NyaXB0PgorICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgbmV3IENsaXBib2FyZEpTKCcuY2xpcGJ1dHRvbicpOworICAgIH0pOworPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvTWVkaWFGaWxlSW1hZ2VDaG9vc2VyLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVJbWFnZUNob29zZXIuanNwCmluZGV4IGFmMGJiZDYuLmRkZGQ0ZDAgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVJbWFnZUNob29zZXIuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVJbWFnZUNob29zZXIuanNwCkBAIC0xNywyNSArMTcsOCBAQAogLS0lPg0KIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4NCiANCi08c2NyaXB0IHNyYz0iPHM6dXJsIHZhbHVlPSIvcm9sbGVyLXVpL3NjcmlwdHMvanF1ZXJ5LTIuMS4xLm1pbi5qcyIgLz4iPjwvc2NyaXB0Pg0KLQ0KIDxzdHlsZT4NCi0gICAgLm1lZGlhT2JqZWN0IHsNCi0gICAgICAgICB3aWR0aDoxMjBweDsNCi0gICAgICAgICBoZWlnaHQ6MTIwcHg7DQotICAgIH0NCi0gICAgLm1lZGlhT2JqZWN0SW5mbyB7DQotICAgICAgICBjbGVhcjpsZWZ0Ow0KLSAgICAgICAgd2lkdGg6MTMwcHg7DQotICAgICAgICBtYXJnaW4tbGVmdDo1cHg7DQotICAgICAgICBmb250LXNpemU6MTFweDsNCi0gICAgfQ0KLSAgICAuaGlnaGxpZ2h0IHsNCi0gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7DQotICAgIH0NCi0gICAgI215TWVudSB7DQotICAgICAgICBtYXJnaW4tbGVmdDogMDsNCi0gICAgfQ0KKw0KIDwvc3R5bGU+DQogDQogPHNjcmlwdD4NCkBAIC00OSwxNDQgKzMyLDEwMiBAQAogDQogPCUtLSBTdWJ0aXRsZSBhbmQgZm9sZGVyIHBhdGggLS0lPg0KIA0KLTxzOmlmIHRlc3Q9J2N1cnJlbnREaXJlY3RvcnkubmFtZS5lcXVhbHMoImRlZmF1bHQiKSc+DQotDQotICAgIDxwIGNsYXNzPSJzdWJ0aXRsZSI+DQotICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZUltYWdlQ2hvb3Nlci5zdWJ0aXRsZSIgPg0KLSAgICAgICAgICAgIDxzOnBhcmFtIHZhbHVlPSJ3ZWJsb2ciIC8+DQotICAgICAgICA8L3M6dGV4dD4NCi0gICAgPC9wPg0KLSAgICA8L3A+DQotICAgIDxwIGNsYXNzPSJwYWdldGlwIj4NCi0gICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlSW1hZ2VDaG9vc2VyLnJvb3RQYWdlVGlwIiAvPg0KLSAgICA8L3A+DQotDQotPC9zOmlmPg0KLQ0KLTxzOmVsc2U+DQotDQotICAgIDxwIGNsYXNzPSJzdWJ0aXRsZSI+DQotICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcuZm9sZGVyTmFtZSIvPiAvDQotICAgICAgICA8czppdGVyYXRvciB2YXI9ImRpcmVjdG9yeSIgdmFsdWU9ImN1cnJlbnREaXJlY3RvcnlIaWVyYXJjaHkiPg0KLSAgICAgICAgICAgIDxzOnVybCB2YXI9ImdldERpcmVjdG9yeUJ5UGF0aFVybCIgYWN0aW9uPSJtZWRpYUZpbGVJbWFnZUNob29zZXIiPg0KLSAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJkaXJlY3RvcnlOYW1lIiB2YWx1ZT0iI2RpcmVjdG9yeS5rZXkiIC8+DQotICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+DQotICAgICAgICAgICAgPC9zOnVybD4NCi0gICAgICAgICAgICA8czphIGhyZWY9IiV7Z2V0RGlyZWN0b3J5QnlQYXRoVXJsfSI+PHM6cHJvcGVydHkgdmFsdWU9IiNkaXJlY3RvcnkudmFsdWUiIC8+PC9zOmE+IC8NCi0gICAgICAgIDwvczppdGVyYXRvcj4NCi0gICAgPC9wPg0KLSAgICA8cCBjbGFzcz0icGFnZXRpcCI+DQotICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZUltYWdlQ2hvb3Nlci5kaXJQYWdlVGlwIiAvPg0KLSAgICA8L3A+DQotDQotPC9zOmVsc2U+DQotDQotDQotPCUtLSB8fCAocGFnZXIgJiYgcGFnZXIuaXRlbXMuc2l6ZSgpID4gMCkgLS0lPg0KIDxzOmlmIHRlc3Q9ImNoaWxkRmlsZXMgfHwgYWxsRGlyZWN0b3JpZXMiPg0KIA0KLTxzOmZvcm0gaWQ9Im1lZGlhRmlsZUNob29zZXJGb3JtIiBuYW1lPSJtZWRpYUZpbGVDaG9vc2VyRm9ybSIgYWN0aW9uPSJtZWRpYUZpbGVWaWV3Ij4NCi0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+DQotICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciIC8+DQotICAgIDxzOmhpZGRlbiBuYW1lPSJkaXJlY3RvcnlJZCIgLz4NCi0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibWVkaWFGaWxlSWQiIHZhbHVlPSIiIC8+DQorICAgIDxzOmZvcm0gaWQ9Im1lZGlhRmlsZUNob29zZXJGb3JtIiBuYW1lPSJtZWRpYUZpbGVDaG9vc2VyRm9ybSIgYWN0aW9uPSJtZWRpYUZpbGVJbWFnZUNob29zZXIiDQorICAgICAgICAgICAgdGhlbWU9ImJvb3RzdHJhcCIgY3NzQ2xhc3M9ImZvcm0tdmVydGljYWwiPg0KKyAgICAgICAgPHM6aGlkZGVuIG5hbWU9InNhbHQiLz4NCisgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciLz4NCisgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1lZGlhRmlsZUlkIiB2YWx1ZT0iIi8+DQogDQorICAgICAgICA8cCBjbGFzcz0icGFnZXRpcCI+PHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVJbWFnZUNob29zZXIucGFnZVRpcCIvPjwvcD4NCiANCi0gICAgPCUtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLSU+DQorICAgICAgICA8JS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tJT4NCisgICAgICAgIDwlLS0gTWF5YmUgc2hvdyBtZWRpYSBkaXJlY3Rvcnkgc2VsZWN0b3IgLS0lPg0KIA0KLSAgICA8JS0tIE1lZGlhIGZpbGUgZm9sZGVyIGNvbnRlbnRzIC0tJT4NCisgICAgICAgIDxzOmlmIHRlc3Q9IiFhbGxEaXJlY3Rvcmllcy5pc0VtcHR5Ij4NCisgICAgICAgICAgICA8czpzZWxlY3QgbmFtZT0iZGlyZWN0b3J5SWQiIGVtcHR5T3B0aW9uPSJ0cnVlIiBsYWJlbD0iJXtnZXRUZXh0KCdtZWRpYUZpbGVWaWV3LnZpZXdGb2xkZXInKX0iDQorICAgICAgICAgICAgICAgICAgICAgIGxpc3Q9ImFsbERpcmVjdG9yaWVzIiBsaXN0S2V5PSJpZCIgbGlzdFZhbHVlPSJuYW1lIiBvbmNoYW5nZT0ib25WaWV3KCkiLz4NCisgICAgICAgIDwvczppZj4NCiANCi0gICAgPHNjcmlwdD4NCi0gICAgICAgIGZ1bmN0aW9uIGhpZ2hsaWdodChlbCwgZmxhZykgew0KLSAgICAgICAgICAgIGlmIChmbGFnKSB7DQotICAgICAgICAgICAgICAgICQoZWwpLmFkZENsYXNzKCJoaWdobGlnaHQiKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAkKGVsKS5yZW1vdmVDbGFzcygiaGlnaGxpZ2h0Iik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICA8L3NjcmlwdD4NCisgICAgICAgIDwlLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0lPg0KKyAgICAgICAgPCUtLSBNZWRpYSBmaWxlcyBncmlkIC0tJT4NCiANCi0gICAgPGRpdiAgd2lkdGg9IjcyMHB4IiBoZWlnaHQ9IjUwMHB4Ij4NCi0gICAgICAgIDx1bCBpZCA9ICJteU1lbnUiPg0KKyAgICAgICAgPGRpdiBpZD0iaW1hZ2VHcmlkIiBjbGFzcz0icGFuZWwgcGFuZWwtZGVmYXVsdCI+DQorICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtYm9keSI+DQogDQotICAgICAgICAgICAgPHM6aWYgdGVzdD0iY2hpbGRGaWxlcy5zaXplKCkgPT0gMCI+DQotICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPjxzOnRleHQgbmFtZT0ibWVkaWFGaWxlVmlldy5ub0ZpbGVzIi8+PC9wPg0KLSAgICAgICAgICAgIDwvczppZj4NCisgICAgICAgICAgICAgICAgPHVsPg0KIA0KLSAgICAgICAgICAgIDwlLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tJT4NCisgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImNoaWxkRmlsZXMuc2l6ZSgpID09IDAiPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPjxzOnRleHQgbmFtZT0ibWVkaWFGaWxlVmlldy5ub0ZpbGVzIi8+PC9wPg0KKyAgICAgICAgICAgICAgICAgICAgPC9zOmlmPg0KIA0KLSAgICAgICAgICAgIDwlLS0gTGlzdCBtZWRpYSBkaXJlY3RvcmllcyBmaXJzdCAtLSU+DQorICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJjaGlsZEZpbGVzLnNpemUoKSA+IDAiPg0KIA0KLSAgICAgICAgICAgIDxzOml0ZXJhdG9yIHZhcj0iZGlyZWN0b3J5IiB2YWx1ZT0iYWxsRGlyZWN0b3JpZXMiPg0KLSAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImFsaWduLWltYWdlcyINCi0gICAgICAgICAgICAgICAgICAgICAgICBvbm1vdXNlb3Zlcj0iaGlnaGxpZ2h0KHRoaXMsIHRydWUpIiBvbm1vdXNlb3V0PSJoaWdobGlnaHQodGhpcywgZmFsc2UpIj4NCi0gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lZGlhT2JqZWN0Ij4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8aW1nICBib3JkZXI9IjAiIHNyYz0nPHM6dXJsIHZhbHVlPSIvaW1hZ2VzL2ZvbGRlci5wbmciLz4nDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImRpci1pbWFnZSIgYWx0PSJtZWRpYUZvbGRlci5wbmciDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jbGljaz0ib25TZWxlY3REaXJlY3RvcnkoJzxzOnByb3BlcnR5IHZhbHVlPSIjZGlyZWN0b3J5LmlkIi8+JykiLz4NCi0gICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KLSAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVkaWFPYmplY3RJbmZvIj4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+PHM6cHJvcGVydHkgdmFsdWU9IiNkaXJlY3RvcnkubmFtZSIgLz48L2xhYmVsPg0KLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQotICAgICAgICAgICAgICAgIDwvbGk+DQotICAgICAgICAgICAgPC9zOml0ZXJhdG9yPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOml0ZXJhdG9yIHZhcj0ibWVkaWFGaWxlIiB2YWx1ZT0iY2hpbGRGaWxlcyI+DQogDQotICAgICAgICAgICAgPCUtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0lPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp1cmwgdmFyPSJtZWRpYUZpbGVVUkwiIGluY2x1ZGVDb250ZXh0PSJmYWxzZSIgdmFsdWU9IiV7I21lZGlhRmlsZS5wZXJtYWxpbmt9Ii8+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnVybCB2YXI9Im1lZGlhRmlsZVRodW1ibmFpbFVSTCIgdmFsdWU9IiV7I21lZGlhRmlsZS50aHVtYm5haWxVUkx9Ii8+DQogDQotICAgICAgICAgICAgPCUtLSBMaXN0IG1lZGlhIGZpbGVzIG5leHQgLS0lPg0KLSAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImNoaWxkRmlsZXMuc2l6ZSgpID4gMCI+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iYWxpZ24taW1hZ2VzIg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25tb3VzZW92ZXI9ImhpZ2hsaWdodCh0aGlzLCB0cnVlKSIgb25tb3VzZW91dD0iaGlnaGxpZ2h0KHRoaXMsIGZhbHNlKSI+DQogDQotICAgICAgICAgICAgICAgIDxzOml0ZXJhdG9yIHZhcj0ibWVkaWFGaWxlIiB2YWx1ZT0iY2hpbGRGaWxlcyI+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZWRpYU9iamVjdCINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jbGljaz0ib25TZWxlY3RNZWRpYUZpbGUoJzxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLm5hbWUiLz4nLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8czpwcm9wZXJ0eSB2YWx1ZT0iJXttZWRpYUZpbGVVUkx9Ii8+JywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHM6cHJvcGVydHkgdmFsdWU9IiNtZWRpYUZpbGUuaXNJbWFnZUZpbGUoKSIvPicpIj4NCiANCi0gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iYWxpZ24taW1hZ2VzIg0KLSAgICAgICAgICAgICAgICAgICAgICAgIG9ubW91c2VvdmVyPSJoaWdobGlnaHQodGhpcywgdHJ1ZSkiIG9ubW91c2VvdXQ9ImhpZ2hsaWdodCh0aGlzLCBmYWxzZSkiPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiNtZWRpYUZpbGUuaW1hZ2VGaWxlIj4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBib3JkZXI9IjAiIHNyYz0nPHM6cHJvcGVydHkgdmFsdWU9IiV7bWVkaWFGaWxlVGh1bWJuYWlsVVJMfSIgLz4nDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9JzxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLnRodW1ibmFpbFdpZHRoIi8+Jw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD0nPHM6cHJvcGVydHkgdmFsdWU9IiNtZWRpYUZpbGUudGh1bWJuYWlsSGVpZ2h0Ii8+Jw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD0nPHM6cHJvcGVydHkgdmFsdWU9IiNtZWRpYUZpbGUubmFtZSIgLz4nLz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3M6aWY+DQogDQotICAgICAgICAgICAgICAgICAgICAgICAgPHM6dXJsIHZhcj0ibWVkaWFGaWxlVVJMIiBpbmNsdWRlQ29udGV4dD0iZmFsc2UiDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSIleyNtZWRpYUZpbGUucGVybWFsaW5rfSI+PC9zOnVybD4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czplbHNlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1maWxlIj48L3NwYW4+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmVsc2U+DQogDQotICAgICAgICAgICAgICAgICAgICAgICAgPHM6dXJsIHZhcj0ibWVkaWFGaWxlVGh1bWJuYWlsVVJMIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJXsjbWVkaWFGaWxlLnRodW1ibmFpbFVSTH0iPjwvczp1cmw+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiANCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZWRpYU9iamVjdCINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9Im9uU2VsZWN0TWVkaWFGaWxlKCc8czpwcm9wZXJ0eSB2YWx1ZT0iI21lZGlhRmlsZS5uYW1lIi8+JywNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8czpwcm9wZXJ0eSB2YWx1ZT0iJXttZWRpYUZpbGVVUkx9IiAvPicsJzxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLmlzSW1hZ2VGaWxlKCkiLz4nKSIgPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVkaWFPYmplY3RJbmZvIj4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyOnRydW5jYXRlTmljZWx5IHVwcGVyPSI2MCI+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLm5hbWUiLz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N0cjp0cnVuY2F0ZU5pY2VseT4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSIjbWVkaWFGaWxlLmltYWdlRmlsZSI+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+DQogDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGJvcmRlcj0iMCIgc3JjPSc8czpwcm9wZXJ0eSB2YWx1ZT0iJXttZWRpYUZpbGVUaHVtYm5haWxVUkx9IiAvPicNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9JzxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLnRodW1ibmFpbFdpZHRoIi8+Jw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9JzxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLnRodW1ibmFpbEhlaWdodCIvPicgLz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmlmPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvczppdGVyYXRvcj4NCisgICAgICAgICAgICAgICAgICAgIDwvczppZj4NCiANCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCisgICAgICAgICAgICAgICAgPC91bD4NCisgICAgICAgICAgICA8L2Rpdj4NCisgICAgICAgIDwvZGl2Pg0KIA0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lZGlhT2JqZWN0SW5mbyI+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHI6dHJ1bmNhdGVOaWNlbHkgdXBwZXI9IjUwIj4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iI21lZGlhRmlsZS5uYW1lIiAvPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdHI6dHJ1bmNhdGVOaWNlbHk+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+DQotICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQorICAgICAgICA8ZGl2IHN0eWxlPSJjbGVhcjpsZWZ0OyI+PC9kaXY+DQogDQotICAgICAgICAgICAgICAgICAgICA8L2xpPg0KLQ0KLSAgICAgICAgICAgICAgICA8L3M6aXRlcmF0b3I+DQotICAgICAgICAgICAgPC9zOmlmPg0KLQ0KLSAgICAgICAgPC91bD4NCi0gICAgPC9kaXY+DQotDQotICAgIDxkaXYgc3R5bGU9ImNsZWFyOmxlZnQ7Ij48L2Rpdj4NCi0NCi0NCi08L3M6Zm9ybT4NCisgICAgPC9zOmZvcm0+DQogDQogPC9zOmlmPg0KIA0KIA0KLQ0KIDxzY3JpcHQ+DQorDQogICAgIGZ1bmN0aW9uIG9uU2VsZWN0TWVkaWFGaWxlKG5hbWUsIHVybCwgaXNJbWFnZSkgew0KICAgICAgICAgd2luZG93LnBhcmVudC5vblNlbGVjdE1lZGlhRmlsZShuYW1lLCB1cmwsIGlzSW1hZ2UpOw0KICAgICB9DQorDQorICAgIGZ1bmN0aW9uIGhpZ2hsaWdodChlbCwgZmxhZykgew0KKyAgICAgICAgaWYgKGZsYWcpIHsNCisgICAgICAgICAgICAkKGVsKS5hZGRDbGFzcygiaGlnaGxpZ2h0Iik7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICQoZWwpLnJlbW92ZUNsYXNzKCJoaWdobGlnaHQiKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBmdW5jdGlvbiBvblZpZXcoKSB7DQorICAgICAgICBkb2N1bWVudC5tZWRpYUZpbGVDaG9vc2VyRm9ybS5zdWJtaXQoKTsNCisgICAgfQ0KKw0KIDwvc2NyaXB0Pg0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVTaWRlYmFyLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVTaWRlYmFyLmpzcAppbmRleCBmODBhMDg0Li5lYjQzZGYwIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvTWVkaWFGaWxlU2lkZWJhci5qc3AKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL01lZGlhRmlsZVNpZGViYXIuanNwCkBAIC0yMiwxMTEgKzIyLDc0IEBACiAgICAgICAgIDxkaXYgY2xhc3M9Im1lbnUtdGwiPgogICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhcklubmVyIj4KIAotICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgIDxiPjxzOnRleHQgbmFtZT0ibWVkaWFGaWxlU2lkZWJhci5hY3Rpb25zIiAvPjwvYj4KLSAgICAgICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgICAgICA8YnIgLz4KKyAgICAgICAgICAgICAgICA8aDM+PHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVTaWRlYmFyLmFjdGlvbnMiLz48L2gzPgogCi0gICAgICAgICAgICAgICAgPGltZyBzcmM9JzxzOnVybCB2YWx1ZT0iL2ltYWdlcy9pbWFnZV9hZGQucG5nIi8+JyBib3JkZXI9IjAiYWx0PSJpY29uIiAvPgotICAgICAgICAgICAgICAgIDxzOnVybCB2YXI9Im1lZGlhRmlsZUFkZFVSTCIgYWN0aW9uPSJtZWRpYUZpbGVBZGQiPgotICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIle2FjdGlvbldlYmxvZy5oYW5kbGV9IiAvPgotICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJkaXJlY3RvcnlOYW1lIiB2YWx1ZT0iJXtkaXJlY3RvcnlOYW1lfSIgLz4KLSAgICAgICAgICAgICAgICA8L3M6dXJsPgotICAgICAgICAgICAgICAgIDxhIGhyZWY9JzxzOnByb3BlcnR5IGVzY2FwZUh0bWw9ImZhbHNlIiB2YWx1ZT0iJXttZWRpYUZpbGVBZGRVUkx9IiAvPicKLSAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iYWN0aW9uTmFtZS5lcXVhbHMoJ21lZGlhRmlsZUFkZCcpIj5zdHlsZT0nZm9udC13ZWlnaHQ6Ym9sZDsnPC9zOmlmPiA+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlU2lkZWJhci5hZGQiIC8+Ci0gICAgICAgICAgICAgICAgPC9hPgotCi0gICAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiFwYWdlciI+Ci0KLSAgICAgICAgICAgICAgICA8JS0tIE9ubHkgc2hvdyBDcmVhdGUgTmV3IERpcmVjdG9yeSBjb250cm9sIHdoZW4gTk9UIHNob3dpbmcgc2VhcmNoIHJlc3VsdHMgLS0lPgotICAgICAgICAgICAgICAgIDxiciAvPjxiciAvPgotICAgICAgICAgICAgICAgIDxkaXY+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSc8czp1cmwgdmFsdWU9Ii9pbWFnZXMvZm9sZGVyX2FkZC5wbmciLz4nIGJvcmRlcj0iMCJhbHQ9Imljb24iIC8+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlVmlldy5hZGREaXJlY3RvcnkiIC8+PGJyIC8+Ci0gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmctbGVmdDoyZW07IHBhZGRpbmctdG9wOjFlbSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcuZGlyZWN0b3J5TmFtZSIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0ibmV3RGlyZWN0b3J5TmFtZSIgbmFtZT0ibmV3RGlyZWN0b3J5TmFtZSIgc2l6ZT0iMTAiIG1heGxlbmd0aD0iMjUiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0ibmV3RGlyZWN0b3J5QnV0dG9uIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSc8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcuY3JlYXRlIiAvPicgb25jbGljaz0ib25DcmVhdGVEaXJlY3RvcnkoKSIgLz4KLSAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iY2xlYXI6cmlnaHQiPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1waWN0dXJlIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDxzOnVybCB2YXI9Im1lZGlhRmlsZUFkZFVSTCIgYWN0aW9uPSJtZWRpYUZpbGVBZGQiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iJXthY3Rpb25XZWJsb2cuaGFuZGxlfSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0iZGlyZWN0b3J5TmFtZSIgdmFsdWU9IiV7ZGlyZWN0b3J5TmFtZX0iLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zOnVybD4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0nPHM6cHJvcGVydHkgZXNjYXBlSHRtbD0iZmFsc2UiIHZhbHVlPSIle21lZGlhRmlsZUFkZFVSTH0iIC8+JworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImFjdGlvbk5hbWUuZXF1YWxzKCdtZWRpYUZpbGVBZGQnKSI+IHN0eWxlPSdmb250LXdlaWdodDpib2xkOyc8L3M6aWY+ID4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlU2lkZWJhci5hZGQiLz4KKyAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICA8L3M6aWY+CiAKLSAgICAgICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgICAgICA8aHIgc2l6ZT0iMSIgbm9zaGFkZT0ibm9zaGFkZSIgLz4KLSAgICAgICAgICAgICAgICA8YnIgLz4KKyAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSIhcGFnZXIiPgorICAgICAgICAgICAgICAgICAgICA8JS0tIE9ubHkgc2hvdyBDcmVhdGUgTmV3IERpcmVjdG9yeSBjb250cm9sIHdoZW4gTk9UIHNob3dpbmcgc2VhcmNoIHJlc3VsdHMgLS0lPgogCi0gICAgICAgICAgICAgICAgPGI+PHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3LnNlYXJjaCIgLz48L2I+Ci0gICAgICAgICAgICAgICAgPGJyIC8+Ci0gICAgICAgICAgICAgICAgPGJyIC8+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImNsZWFyOnJpZ2h0OyBtYXJnaW4tdG9wOiAxZW0iPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1mb2xkZXItb3BlbiI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3LmFkZERpcmVjdG9yeSIvPiA8YnIgLz4KKworICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ibmV3RGlyZWN0b3J5TmFtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3LmRpcmVjdG9yeU5hbWUiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9Im5ld0RpcmVjdG9yeU5hbWUiIG5hbWU9Im5ld0RpcmVjdG9yeU5hbWUiIHNpemU9IjgiIG1heGxlbmd0aD0iMjUiLz4KKworICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9Im5ld0RpcmVjdG9yeUJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgc3R5bGU9ImNsZWFyOmxlZnQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9JzxzOnRleHQgbmFtZT0ibWVkaWFGaWxlVmlldy5jcmVhdGUiIC8+JyBvbmNsaWNrPSJvbkNyZWF0ZURpcmVjdG9yeSgpIi8+CisKKyAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC9zOmlmPgorCisgICAgICAgICAgICAgICAgPGhyIHNpemU9IjEiIG5vc2hhZGU9Im5vc2hhZGUiLz4KKworICAgICAgICAgICAgICAgIDxoMz48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcuc2VhcmNoIi8+PC9oMz4KIAogICAgICAgICAgICAgICAgIDxzOmZvcm0gaWQ9Im1lZGlhRmlsZVNlYXJjaEZvcm0iIG5hbWU9Im1lZGlhRmlsZVNlYXJjaEZvcm0iCi0gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249Im1lZGlhRmlsZVZpZXchc2VhcmNoIj4KLQkJCQkJPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0gICAgICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciIC8+CisgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249Im1lZGlhRmlsZVZpZXchc2VhcmNoIiB0aGVtZT0iYm9vdHN0cmFwIiBjc3NDbGFzcz0iZm9ybS12ZXJ0aWNhbCI+CisgICAgICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0Ii8+CisgICAgICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciLz4KKyAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibWVkaWFGaWxlSWQiIHZhbHVlPSIiLz4KIAotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJtZWRpYUZpbGVJZCIgdmFsdWU9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJtZWRpYUZpbGVTZWFyY2hUYWJsZSIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIzIiB3aWR0aD0iMTAwJSI+CisgICAgICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBpZD0iYmVhbk5hbWUiIG5hbWU9ImJlYW4ubmFtZSIgc2l6ZT0iMjAiIG1heGxlbmd0aD0iMjU1IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5uYW1lJyl9Ii8+CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Im5hbWUiPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5uYW1lIiAvPjwvbGFiZWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBpZD0iYmVhbk5hbWUiIG5hbWU9ImJlYW4ubmFtZSIgc2l6ZT0iMjAiIG1heGxlbmd0aD0iMjU1IiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgICAgICAgICA8czpzZWxlY3QgaWQ9ImJlYW5UeXBlIiBuYW1lPSJiZWFuLnR5cGUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0PSJmaWxlVHlwZXMiIGxpc3RLZXk9ImtleSIgbGlzdFZhbHVlPSJ2YWx1ZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ21lZGlhRmlsZVZpZXcudHlwZScpfSIvPgogCi0gICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ0eXBlIj48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcudHlwZSIgLz48L2xhYmVsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpzZWxlY3QgaWQ9ImJlYW5UeXBlIiBuYW1lPSJiZWFuLnR5cGUiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0PSJmaWxlVHlwZXMiIGxpc3RLZXk9ImtleSIgbGlzdFZhbHVlPSJ2YWx1ZSIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgPHM6c2VsZWN0IG5hbWU9ImJlYW4uc2l6ZUZpbHRlclR5cGUiIGlkPSJzaXplRmlsdGVyVHlwZUNvbWJvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdD0ic2l6ZUZpbHRlclR5cGVzIiBsaXN0S2V5PSJrZXkiIGxpc3RWYWx1ZT0idmFsdWUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCdtZWRpYUZpbGVWaWV3LnNpemUnKX0iLz4KIAotICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ic2l6ZSI+PHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3LnNpemUiIC8+PC9sYWJlbD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iODAlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6c2VsZWN0IG5hbWU9ImJlYW4uc2l6ZUZpbHRlclR5cGUiIGlkPSJzaXplRmlsdGVyVHlwZUNvbWJvIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdD0ic2l6ZUZpbHRlclR5cGVzIiBsaXN0S2V5PSJrZXkiIGxpc3RWYWx1ZT0idmFsdWUiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBpZD0iYmVhblNpemUiIG5hbWU9ImJlYW4uc2l6ZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9IjMiIG1heGxlbmd0aD0iMTAiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnNlbGVjdCBuYW1lPSJiZWFuLnNpemVVbml0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdD0ic2l6ZVVuaXRzIiBsaXN0S2V5PSJrZXkiIGxpc3RWYWx1ZT0idmFsdWUiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CisgICAgICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBpZD0iYmVhblNpemUiIG5hbWU9ImJlYW4uc2l6ZSIgc2l6ZT0iMyIgbWF4bGVuZ3RoPSIxMCIvPgogCi0gICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMCUiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ0YWdzIj48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcudGFncyIgLz48L2xhYmVsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgaWQ9ImJlYW5UYWdzIiBuYW1lPSJiZWFuLnRhZ3MiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPSIyMCIgbWF4bGVuZ3RoPSI1MCIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KKyAgICAgICAgICAgICAgICAgICAgPHM6c2VsZWN0IG5hbWU9ImJlYW4uc2l6ZVVuaXQiIGxpc3Q9InNpemVVbml0cyIgbGlzdEtleT0ia2V5IiBsaXN0VmFsdWU9InZhbHVlIi8+CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnN1Ym1pdCBpZD0ic2VhcmNoQnV0dG9uIiB2YWx1ZT0iJXtnZXRUZXh0KCdtZWRpYUZpbGVWaWV3LnNlYXJjaCcpfSIgY3NzU3R5bGU9Im1hcmdpbjo1cHggMHB4OyIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJwYWdlciI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9InJlc2V0QnV0dG9uIiBzdHlsZT0ibWFyZ2luOjVweCAwcHg7IiB0eXBlPSJidXR0b24iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0icmVzZXQiIHZhbHVlPSc8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcucmVzZXQiIC8+JyAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3M6aWY+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgorICAgICAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgaWQ9ImJlYW5UYWdzIiBuYW1lPSJiZWFuLnRhZ3MiIHNpemU9IjIwIiBtYXhsZW5ndGg9IjUwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgnbWVkaWFGaWxlVmlldy50YWdzJyl9Ii8+CisKKyAgICAgICAgICAgICAgICAgICAgPHM6c3VibWl0IGlkPSJzZWFyY2hCdXR0b24iIGNzc0NsYXNzPSJidG4gYnRuLXByaW1hcnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iJXtnZXRUZXh0KCdtZWRpYUZpbGVWaWV3LnNlYXJjaCcpfSIgY3NzU3R5bGU9Im1hcmdpbjo1cHggMDsiLz4KKworICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJwYWdlciI+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9InJlc2V0QnV0dG9uIiBzdHlsZT0ibWFyZ2luOjVweCAwOyIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InJlc2V0IiB2YWx1ZT0nPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3LnJlc2V0IiAvPicvPgorICAgICAgICAgICAgICAgICAgICA8L3M6aWY+CiAKICAgICAgICAgICAgICAgICA8L3M6Zm9ybT4KIApAQCAtMTM2LDUxICs5OSw1MyBAQAogPC9kaXY+CiAKIAotCiA8c2NyaXB0PgogCi1mdW5jdGlvbiBvbkNyZWF0ZURpcmVjdG9yeSgpIHsKLSAgICBkb2N1bWVudC5tZWRpYUZpbGVWaWV3Rm9ybS5uZXdEaXJlY3RvcnlOYW1lLnZhbHVlID0gJCgiI25ld0RpcmVjdG9yeU5hbWUiKS5nZXQoMCkudmFsdWU7Ci0gICAgZG9jdW1lbnQubWVkaWFGaWxlVmlld0Zvcm0uYWN0aW9uPSc8czp1cmwgYWN0aW9uPSJtZWRpYUZpbGVWaWV3IWNyZWF0ZU5ld0RpcmVjdG9yeSIgLz4nOwotICAgIGRvY3VtZW50Lm1lZGlhRmlsZVZpZXdGb3JtLnN1Ym1pdCgpOwotfQorICAgIGZ1bmN0aW9uIG9uQ3JlYXRlRGlyZWN0b3J5KCkgeworICAgICAgICBkb2N1bWVudC5tZWRpYUZpbGVWaWV3Rm9ybS5uZXdEaXJlY3RvcnlOYW1lLnZhbHVlID0gJCgiI25ld0RpcmVjdG9yeU5hbWUiKS5nZXQoMCkudmFsdWU7CisgICAgICAgIGRvY3VtZW50Lm1lZGlhRmlsZVZpZXdGb3JtLmFjdGlvbiA9ICc8czp1cmwgYWN0aW9uPSJtZWRpYUZpbGVWaWV3IWNyZWF0ZU5ld0RpcmVjdG9yeSIgLz4nOworICAgICAgICBkb2N1bWVudC5tZWRpYUZpbGVWaWV3Rm9ybS5zdWJtaXQoKTsKKyAgICB9CiAKLSQoIiNuZXdEaXJlY3RvcnlCdXR0b24iKS5yZWFkeShmdW5jdGlvbiAoKSB7Ci0gICAgJCgiI25ld0RpcmVjdG9yeU5hbWUiKS5iaW5kKCJrZXl1cCIsIG1haW50YWluRGlyZWN0b3J5QnV0dG9uU3RhdGUpOwotICAgICQoIiNuZXdEaXJlY3RvcnlCdXR0b24iKS5hdHRyKCJkaXNhYmxlZCIsIHRydWUpOwotfSk7Ci0KLWZ1bmN0aW9uIG1haW50YWluRGlyZWN0b3J5QnV0dG9uU3RhdGUoZSkgewotICAgIGlmICggalF1ZXJ5LnRyaW0oJCgiI25ld0RpcmVjdG9yeU5hbWUiKS5nZXQoMCkudmFsdWUpLmxlbmd0aCA9PSAwKSB7CisgICAgJCgiI25ld0RpcmVjdG9yeUJ1dHRvbiIpLnJlYWR5KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgJCgiI25ld0RpcmVjdG9yeU5hbWUiKS5iaW5kKCJrZXl1cCIsIG1haW50YWluRGlyZWN0b3J5QnV0dG9uU3RhdGUpOwogICAgICAgICAkKCIjbmV3RGlyZWN0b3J5QnV0dG9uIikuYXR0cigiZGlzYWJsZWQiLCB0cnVlKTsKLSAgICB9IGVsc2UgewotICAgICAgICAkKCIjbmV3RGlyZWN0b3J5QnV0dG9uIikuYXR0cigiZGlzYWJsZWQiLCBmYWxzZSk7Ci0gICAgfQotfQotCi0kKCIjc2VhcmNoQnV0dG9uIikucmVhZHkoZnVuY3Rpb24gKCkgewotCi0gICAgbWFpbnRhaW5TZWFyY2hCdXR0b25TdGF0ZSgpOwotICAgICQoImlucHV0IikuYmluZCgia2V5dXAiLCBtYWludGFpblNlYXJjaEJ1dHRvblN0YXRlKTsKLSAgICAkKCJzZWxlY3QiKS5iaW5kKCJjaGFuZ2UiLCBtYWludGFpblNlYXJjaEJ1dHRvblN0YXRlKTsKLQotICAgICQoIiNyZXNldEJ1dHRvbiIpLmJpbmQoImNsaWNrIiwgZnVuY3Rpb24oKSB7Ci0gICAgICAgIDxzOnVybCB2YXI9Im1lZGlhRmlsZVZpZXdVUkwiIGFjdGlvbj0ibWVkaWFGaWxlVmlldyI+Ci0gICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIle2FjdGlvbldlYmxvZy5oYW5kbGV9IiAvPgotICAgICAgICA8L3M6dXJsPgotICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAnPHM6cHJvcGVydHkgdmFsdWU9IiV7bWVkaWFGaWxlVmlld1VSTH0iIC8+JzsKICAgICB9KTsKLX0pOwogCi1mdW5jdGlvbiBtYWludGFpblNlYXJjaEJ1dHRvblN0YXRlKGUpIHsKLSAgICBpZiAoIGpRdWVyeS50cmltKCQoIiNiZWFuTmFtZSIpLmdldCgwKS52YWx1ZSkubGVuZ3RoID09IDAKLSAgICAgJiYgIGpRdWVyeS50cmltKCQoIiNiZWFuVGFncyIpLmdldCgwKS52YWx1ZSkubGVuZ3RoID09IDAKLSAgICAgJiYgKGpRdWVyeS50cmltKCQoIiNiZWFuU2l6ZSIpLmdldCgwKS52YWx1ZSkubGVuZ3RoID09IDAgfHwgJCgiI2JlYW5TaXplIikuZ2V0KDApLnZhbHVlID09IDApCi0gICAgICYmICgkKCIjYmVhblR5cGUiKS5nZXQoMCkudmFsdWUubGVuZ3RoID09IDAgfHwgJCgiI2JlYW5UeXBlIikuZ2V0KDApLnZhbHVlID09ICJtZWRpYUZpbGVWaWV3LmFueSIpKSB7Ci0gICAgICAgICQoIiNzZWFyY2hCdXR0b24iKS5hdHRyKCJkaXNhYmxlZCIsIHRydWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgICQoIiNzZWFyY2hCdXR0b24iKS5hdHRyKCJkaXNhYmxlZCIsIGZhbHNlKTsKKyAgICBmdW5jdGlvbiBtYWludGFpbkRpcmVjdG9yeUJ1dHRvblN0YXRlKGUpIHsKKyAgICAgICAgaWYgKGpRdWVyeS50cmltKCQoIiNuZXdEaXJlY3RvcnlOYW1lIikuZ2V0KDApLnZhbHVlKS5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICQoIiNuZXdEaXJlY3RvcnlCdXR0b24iKS5hdHRyKCJkaXNhYmxlZCIsIHRydWUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCgiI25ld0RpcmVjdG9yeUJ1dHRvbiIpLmF0dHIoImRpc2FibGVkIiwgZmFsc2UpOworICAgICAgICB9CiAgICAgfQotfQorCisgICAgJCgiI3NlYXJjaEJ1dHRvbiIpLnJlYWR5KGZ1bmN0aW9uICgpIHsKKworICAgICAgICBtYWludGFpblNlYXJjaEJ1dHRvblN0YXRlKCk7CisgICAgICAgICQoImlucHV0IikuYmluZCgia2V5dXAiLCBtYWludGFpblNlYXJjaEJ1dHRvblN0YXRlKTsKKyAgICAgICAgJCgic2VsZWN0IikuYmluZCgiY2hhbmdlIiwgbWFpbnRhaW5TZWFyY2hCdXR0b25TdGF0ZSk7CisKKyAgICAgICAgJCgiI3Jlc2V0QnV0dG9uIikuYmluZCgiY2xpY2siLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICA8czp1cmwgdmFyPSJtZWRpYUZpbGVWaWV3VVJMIiBhY3Rpb249Im1lZGlhRmlsZVZpZXciPgorICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iJXthY3Rpb25XZWJsb2cuaGFuZGxlfSIgLz4KKyAgICAgICAgICAgIDwvczp1cmw+CisgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAnPHM6cHJvcGVydHkgdmFsdWU9IiV7bWVkaWFGaWxlVmlld1VSTH0iIC8+JzsKKyAgICAgICAgfSk7CisgICAgfSk7CisKKyAgICBmdW5jdGlvbiBtYWludGFpblNlYXJjaEJ1dHRvblN0YXRlKGUpIHsKKyAgICAgICAgdmFyIGJlYW5TaXplID0gJCgiI2JlYW5TaXplIikuZ2V0KDApLnZhbHVlOworICAgICAgICB2YXIgYmVhblR5cGUgPSAkKCIjYmVhblR5cGUiKS5nZXQoMCkudmFsdWU7CisKKyAgICAgICAgaWYgKGpRdWVyeS50cmltKCQoIiNiZWFuTmFtZSIpLmdldCgwKS52YWx1ZSkubGVuZ3RoID09PSAwCisgICAgICAgICAgICAmJiBqUXVlcnkudHJpbSgkKCIjYmVhblRhZ3MiKS5nZXQoMCkudmFsdWUpLmxlbmd0aCA9PT0gMAorICAgICAgICAgICAgJiYgKGpRdWVyeS50cmltKGJlYW5TaXplKS5sZW5ndGggPT09IDAgfHwgYmVhblNpemUgPT09IDApCisgICAgICAgICAgICAmJiAoYmVhblR5cGUubGVuZ3RoID09PSAwIHx8IGJlYW5UeXBlID09PSAibWVkaWFGaWxlVmlldy5hbnkiKSkgeworICAgICAgICAgICAgJCgiI3NlYXJjaEJ1dHRvbiIpLmF0dHIoImRpc2FibGVkIiwgdHJ1ZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkKCIjc2VhcmNoQnV0dG9uIikuYXR0cigiZGlzYWJsZWQiLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CiAKIDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL01lZGlhRmlsZVZpZXcuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL01lZGlhRmlsZVZpZXcuanNwCmluZGV4IDE2M2E4NjkuLmZjMjU1ZTYgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVWaWV3LmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvTWVkaWFGaWxlVmlldy5qc3AKQEAgLTE2LDExOCArMTYsMTIgQEAKICAgZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgogLS0lPgogPCVAIGluY2x1ZGUgZmlsZT0iL1dFQi1JTkYvanNwcy90YWdsaWJzLXN0cnV0czIuanNwIiAlPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiBocmVmPSc8czp1cmwgdmFsdWU9Ii9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9qcXVlcnktdWkubWluLmNzcyIvPicgLz4KLQotPHNjcmlwdCBzcmM9IjxzOnVybCB2YWx1ZT0iL3JvbGxlci11aS9zY3JpcHRzL2pxdWVyeS0yLjEuMS5taW4uanMiIC8+Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSc8czp1cmwgdmFsdWU9Ii9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9qcXVlcnktdWkubWluLmpzIi8+Jz48L3NjcmlwdD4KLQotCi08c3R5bGU+Ci0gICAgLm1lZGlhT2JqZWN0IHsKLSAgICAgICAgIHdpZHRoOjEyMHB4OwotICAgICAgICAgaGVpZ2h0OjEyMHB4OwotICAgIH0KLSAgICAubWVkaWFPYmplY3RJbmZvIHsKLSAgICAgICAgY2xlYXI6bGVmdDsKLSAgICAgICAgd2lkdGg6MTMwcHg7Ci0gICAgICAgIG1hcmdpbi1sZWZ0OjVweDsKLSAgICAgICAgbWFyZ2luLXRvcDozcHg7Ci0gICAgICAgIGZvbnQtc2l6ZToxMXB4OwotICAgIH0KLSAgICAuaGlnaGxpZ2h0IHsKLSAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKLSAgICB9Ci0gICAgI215TWVudSB7Ci0gICAgICAgIG1hcmdpbi1sZWZ0OiAwOwotICAgIH0KLSAgICBzcGFuLmJ1dHRvbiB7Ci0gICAgICAgIGhlaWdodDoxNXB4OwotICAgICAgICB3aWR0aDoxNXB4OwotICAgICAgICBmbG9hdDpyaWdodDsKLSAgICB9Ci08L3N0eWxlPgotCi0KLTxzY3JpcHQ+Ci0gICAgdG9nZ2xlU3RhdGUgPSAnT2ZmJwotCi0gICAgZnVuY3Rpb24gb25TZWxlY3REaXJlY3RvcnkoaWQpIHsKLSAgICAgICAgd2luZG93LmxvY2F0aW9uID0gIjxzOnVybCBhY3Rpb249Im1lZGlhRmlsZVZpZXciIC8+P2RpcmVjdG9yeUlkPSIgKyBpZCArICImd2VibG9nPSIgKyAnPHM6cHJvcGVydHkgdmFsdWU9ImFjdGlvbldlYmxvZy5oYW5kbGUiIC8+JzsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiBvblRvZ2dsZSgpIHsKLSAgICAgICAgaWYgKHRvZ2dsZVN0YXRlID09ICdPZmYnKSB7Ci0gICAgICAgICAgICB0b2dnbGVTdGF0ZSA9ICdPbic7Ci0gICAgICAgICAgICB0b2dnbGVGdW5jdGlvbih0cnVlLCAnc2VsZWN0ZWRNZWRpYUZpbGVzJyk7Ci0gICAgICAgICAgICAkKCIjZGVsZXRlQnV0dG9uIikuYXR0cignZGlzYWJsZWQnLGZhbHNlKQotICAgICAgICAgICAgJCgiI21vdmVCdXR0b24iKS5hdHRyKCdkaXNhYmxlZCcsZmFsc2UpCi0gICAgICAgICAgICAkKCIjbW92ZVRhcmdldE1lbnUiKS5hdHRyKCdkaXNhYmxlZCcsZmFsc2UpCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0b2dnbGVTdGF0ZSA9ICdPZmYnOwotICAgICAgICAgICAgdG9nZ2xlRnVuY3Rpb24oZmFsc2UsICdzZWxlY3RlZE1lZGlhRmlsZXMnKTsKLSAgICAgICAgICAgICQoIiNkZWxldGVCdXR0b24iKS5hdHRyKCdkaXNhYmxlZCcsdHJ1ZSkKLSAgICAgICAgICAgICQoIiNtb3ZlQnV0dG9uIikuYXR0cignZGlzYWJsZWQnLHRydWUpCi0gICAgICAgICAgICAkKCIjbW92ZVRhcmdldE1lbnUiKS5hdHRyKCdkaXNhYmxlZCcsdHJ1ZSkKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIG9uRGVsZXRlU2VsZWN0ZWQoKSB7Ci0gICAgICAgIGlmICggY29uZmlybSgiPHM6dGV4dCBuYW1lPSdtZWRpYUZpbGUuZGVsZXRlLmNvbmZpcm0nIC8+IikgKSB7Ci0gICAgICAgICAgICBkb2N1bWVudC5tZWRpYUZpbGVWaWV3Rm9ybS5hY3Rpb249JzxzOnVybCBhY3Rpb249Im1lZGlhRmlsZVZpZXchZGVsZXRlU2VsZWN0ZWQiIC8+JzsKLSAgICAgICAgICAgIGRvY3VtZW50Lm1lZGlhRmlsZVZpZXdGb3JtLnN1Ym1pdCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gb25EZWxldGVGb2xkZXIoKSB7Ci0gICAgICAgIGlmIChjb25maXJtKCI8czp0ZXh0IG5hbWU9J21lZGlhRmlsZS5kZWxldGVGb2xkZXIuY29uZmlybScgLz4iKSkgewotICAgICAgICAgICAgZG9jdW1lbnQuYm9va21hcmtzLmFjdGlvbj0nPHM6dXJsIGFjdGlvbj0ibWVkaWFGaWxlVmlldyFkZWxldGVGb2xkZXIiIC8+JzsKLSAgICAgICAgICAgIGRvY3VtZW50LmJvb2ttYXJrcy5zdWJtaXQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZ1bmN0aW9uIG9uTW92ZVNlbGVjdGVkKCkgewotICAgICAgICBpZiAoIGNvbmZpcm0oIjxzOnRleHQgbmFtZT0nbWVkaWFGaWxlLm1vdmUuY29uZmlybScgLz4iKSApIHsKLSAgICAgICAgICAgIGRvY3VtZW50Lm1lZGlhRmlsZVZpZXdGb3JtLmFjdGlvbj0nPHM6dXJsIGFjdGlvbj0ibWVkaWFGaWxlVmlldyFtb3ZlU2VsZWN0ZWQiIC8+JzsKLSAgICAgICAgICAgIGRvY3VtZW50Lm1lZGlhRmlsZVZpZXdGb3JtLnN1Ym1pdCgpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGZ1bmN0aW9uIG9uVmlldygpIHsKLSAgICAgICAgZG9jdW1lbnQubWVkaWFGaWxlVmlld0Zvcm0uYWN0aW9uID0gIjxzOnVybCBhY3Rpb249J21lZGlhRmlsZVZpZXchdmlldycgLz4iOwotICAgICAgICBkb2N1bWVudC5tZWRpYUZpbGVWaWV3Rm9ybS5zdWJtaXQoKTsKLSAgICB9Ci0KLSAgICA8JS0tIGNvZGUgdG8gdG9nZ2xlIGJ1dHRvbnMgb24vb2ZmIGFzIG1lZGlhIGZpbGUvZGlyZWN0b3J5IHNlbGVjdGlvbnMgY2hhbmdlIC0tJT4KLQotICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewotICAgICAgICAkKCIjZGVsZXRlQnV0dG9uIikuYXR0cignZGlzYWJsZWQnLHRydWUpCi0gICAgICAgICQoIiNtb3ZlQnV0dG9uIikuYXR0cignZGlzYWJsZWQnLHRydWUpCi0gICAgICAgICQoIiNtb3ZlVGFyZ2V0TWVudSIpLmF0dHIoJ2Rpc2FibGVkJyx0cnVlKQotCi0gICAgICAgICQoImlucHV0W3R5cGU9Y2hlY2tib3hdIikuY2hhbmdlKGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgdmFyIGNvdW50ID0gMDsKLSAgICAgICAgICAgICQoImlucHV0W3R5cGU9Y2hlY2tib3hdIikuZWFjaChmdW5jdGlvbihpbmRleCwgZWxlbWVudCkgewotICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmNoZWNrZWQpIGNvdW50Kys7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmIChjb3VudCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgJCgiI2RlbGV0ZUJ1dHRvbiIpLmF0dHIoJ2Rpc2FibGVkJyx0cnVlKQotICAgICAgICAgICAgICAgICQoIiNtb3ZlQnV0dG9uIikuYXR0cignZGlzYWJsZWQnLHRydWUpCi0gICAgICAgICAgICAgICAgJCgiI21vdmVUYXJnZXRNZW51IikuYXR0cignZGlzYWJsZWQnLHRydWUpCi0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICQoIiNkZWxldGVCdXR0b24iKS5hdHRyKCdkaXNhYmxlZCcsZmFsc2UpCi0gICAgICAgICAgICAgICAgJCgiI21vdmVCdXR0b24iKS5hdHRyKCdkaXNhYmxlZCcsZmFsc2UpCi0gICAgICAgICAgICAgICAgJCgiI21vdmVUYXJnZXRNZW51IikuYXR0cignZGlzYWJsZWQnLGZhbHNlKQotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9KTsKLTwvc2NyaXB0PgotCiAKIDxzOmZvcm0gaWQ9ImNyZWF0ZVBvc3RGb3JtIiBhY3Rpb249J2VudHJ5QWRkV2l0aE1lZGlhRmlsZSc+Ci0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0id2VibG9nIiB2YWx1ZT0nPHM6cHJvcGVydHkgdmFsdWU9ImFjdGlvbldlYmxvZy5oYW5kbGUiIC8+JyAvPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNlbGVjdGVkSW1hZ2UiIGlkPSJzZWxlY3RlZEltYWdlIiAvPgotICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InR5cGUiIGlkPSJ0eXBlIiAvPgorICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0Ii8+CisgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0id2VibG9nIiB2YWx1ZT0nPHM6cHJvcGVydHkgdmFsdWU9ImFjdGlvbldlYmxvZy5oYW5kbGUiIC8+Jy8+CisgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic2VsZWN0ZWRJbWFnZSIgaWQ9InNlbGVjdGVkSW1hZ2UiLz4KKyAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ0eXBlIiBpZD0idHlwZSIvPgogPC9zOmZvcm0+CiAKIApAQCAtMTM4LDEzICszMiwxMiBAQAogPHM6aWYgdGVzdD0nY3VycmVudERpcmVjdG9yeS5uYW1lLmVxdWFscygiZGVmYXVsdCIpJz4KIAogICAgIDxwIGNsYXNzPSJzdWJ0aXRsZSI+Ci0gICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlVmlldy5zdWJ0aXRsZSIgPgotICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9IndlYmxvZyIgLz4KKyAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3LnN1YnRpdGxlIj4KKyAgICAgICAgICAgIDxzOnBhcmFtIHZhbHVlPSJ3ZWJsb2ciLz4KICAgICAgICAgPC9zOnRleHQ+CiAgICAgPC9wPgotICAgIDwvcD4KICAgICA8cCBjbGFzcz0icGFnZXRpcCI+Ci0gICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlVmlldy5yb290UGFnZVRpcCIgLz4KKyAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3LnJvb3RQYWdlVGlwIi8+CiAgICAgPC9wPgogCiA8L3M6aWY+CkBAIC0xNTIsNjcgKzQ1LDY0IEBACiA8czplbHNlaWYgdGVzdD0ncGFnZXInPgogCiAgICAgPHAgY2xhc3M9InN1YnRpdGxlIj4KLSAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3LnNlYXJjaFRpdGxlIiAvPgorICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcuc2VhcmNoVGl0bGUiLz4KICAgICA8L3A+CiAgICAgPHAgY2xhc3M9InBhZ2V0aXAiPgogCi0gICAgICAgIDwlLS0gZGlzcGxheSBzdW1tYXJ5IG9mIHRoZSBzZWFyY2ggcmVzdWx0cyBhbmQgdGVybXMgLS0lPgorICAgICAgICAgICAgPCUtLSBkaXNwbGF5IHN1bW1hcnkgb2YgdGhlIHNlYXJjaCByZXN1bHRzIGFuZCB0ZXJtcyAtLSU+CiAKICAgICAgICAgPHM6aWYgdGVzdD0icGFnZXIuaXRlbXMuc2l6ZSgpID4gMCI+Ci0gICAgICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcubWF0Y2hpbmdSZXN1bHRzIj4KLSAgICAgICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0icGFnZXIuaXRlbXMuc2l6ZSgpIiAvPgotICAgICAgICAgICAgPC9zOnRleHQ+CisgICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlVmlldy5tYXRjaGluZ1Jlc3VsdHMiPgorICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9InBhZ2VyLml0ZW1zLnNpemUoKSIvPgorICAgICAgICA8L3M6dGV4dD4KICAgICAgICAgPC9zOmlmPgogICAgICAgICA8czplbHNlPgotICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3Lm5vUmVzdWx0cyIgLz4KKyAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlVmlldy5ub1Jlc3VsdHMiLz4KICAgICAgICAgPC9zOmVsc2U+Ci0gICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlVmlldy5zZWFyY2hJbmZvIiAvPgorICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3LnNlYXJjaEluZm8iLz4KIAotICAgICAgICA8dWw+Ci0gICAgICAgICAgICA8czppZiB0ZXN0PSIhYmVhbi5uYW1lLmlzRW1wdHkoKSI+Ci0gICAgICAgICAgICAgICAgPGxpPgotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcuZmlsZXNOYW1lZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0iYmVhbi5uYW1lIiAvPgotICAgICAgICAgICAgICAgICAgICA8L3M6dGV4dD4KLSAgICAgICAgICAgICAgICA8L2xpPgotICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgPHM6aWYgdGVzdD0iYmVhbi5zaXplID4gMCI+Ci0gICAgICAgICAgICAgICAgPGxpPgotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcuZmlsZXNPZlNpemUiPgotICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9J2JlYW4uc2l6ZUZpbHRlclR5cGVMYWJlbCcgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIHZhbHVlPSdiZWFuLnNpemUnIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0nYmVhbi5zaXplVW5pdExhYmVsJyAvPgotICAgICAgICAgICAgICAgICAgICA8L3M6dGV4dD4KLSAgICAgICAgICAgICAgICA8L2xpPgotICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgPHM6aWYgdGVzdD0iIWJlYW4udHlwZS5pc0VtcHR5KCkiPgotICAgICAgICAgICAgICAgIDxsaT4KLSAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3LmZpbGVzT2ZUeXBlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIHZhbHVlPSdiZWFuLnR5cGVMYWJlbCcgLz4KLSAgICAgICAgICAgICAgICAgICAgPC9zOnRleHQ+Ci0gICAgICAgICAgICAgICAgPC9saT4KLSAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiFiZWFuLnRhZ3MuaXNFbXB0eSgpIj4KLSAgICAgICAgICAgICAgICA8bGk+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlVmlldy5maWxlc1RhZ2dlZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0iYmVhbi50YWdzIiAvPgotICAgICAgICAgICAgICAgICAgICA8L3M6dGV4dD4KLSAgICAgICAgICAgICAgICA8L2xpPgotICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICA8L3VsPgotCi0gICAgPC9wPgotICAgIDxiciAvPgorICAgIDx1bD4KKyAgICAgICAgPHM6aWYgdGVzdD0iIWJlYW4ubmFtZS5pc0VtcHR5KCkiPgorICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlVmlldy5maWxlc05hbWVkIj4KKyAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9ImJlYW4ubmFtZSIvPgorICAgICAgICAgICAgICAgIDwvczp0ZXh0PgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgPC9zOmlmPgorICAgICAgICA8czppZiB0ZXN0PSJiZWFuLnNpemUgPiAwIj4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcuZmlsZXNPZlNpemUiPgorICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0nYmVhbi5zaXplRmlsdGVyVHlwZUxhYmVsJy8+CisgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIHZhbHVlPSdiZWFuLnNpemUnLz4KKyAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9J2JlYW4uc2l6ZVVuaXRMYWJlbCcvPgorICAgICAgICAgICAgICAgIDwvczp0ZXh0PgorICAgICAgICAgICAgPC9saT4KKyAgICAgICAgPC9zOmlmPgorICAgICAgICA8czppZiB0ZXN0PSIhYmVhbi50eXBlLmlzRW1wdHkoKSI+CisgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3LmZpbGVzT2ZUeXBlIj4KKyAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gdmFsdWU9J2JlYW4udHlwZUxhYmVsJy8+CisgICAgICAgICAgICAgICAgPC9zOnRleHQ+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICA8L3M6aWY+CisgICAgICAgIDxzOmlmIHRlc3Q9IiFiZWFuLnRhZ3MuaXNFbXB0eSgpIj4KKyAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcuZmlsZXNUYWdnZWQiPgorICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSB2YWx1ZT0iYmVhbi50YWdzIi8+CisgICAgICAgICAgICAgICAgPC9zOnRleHQ+CisgICAgICAgICAgICA8L2xpPgorICAgICAgICA8L3M6aWY+CisgICAgPC91bD4KIAogPC9zOmVsc2VpZj4KIAogPHM6ZWxzZT4KIAogICAgIDxwIGNsYXNzPSJzdWJ0aXRsZSI+Ci0gICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlVmlldy5mb2xkZXJOYW1lIi8+OiA8czpwcm9wZXJ0eSB2YWx1ZT0iJXtjdXJyZW50RGlyZWN0b3J5Lm5hbWV9IiAvPgorICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcuZm9sZGVyTmFtZSIvPjogPHM6cHJvcGVydHkgdmFsdWU9IiV7Y3VycmVudERpcmVjdG9yeS5uYW1lfSIvPgogICAgIDwvcD4KICAgICA8cCBjbGFzcz0icGFnZXRpcCI+Ci0gICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlVmlldy5kaXJQYWdlVGlwIiAvPgorICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcuZGlyUGFnZVRpcCIvPgogICAgIDwvcD4KIAogPC9zOmVsc2U+CkBAIC0yMjAsMjE5ICsxMTAsMjQ4IEBACiAKIDxzOmlmIHRlc3Q9ImNoaWxkRmlsZXMgfHwgKHBhZ2VyICYmIHBhZ2VyLml0ZW1zLnNpemUoKSA+IDApIj4KIAotICA8czpmb3JtIGlkPSJtZWRpYUZpbGVWaWV3Rm9ybSIgbmFtZT0ibWVkaWFGaWxlVmlld0Zvcm0iIGFjdGlvbj0ibWVkaWFGaWxlVmlldyI+Ci0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgLz4KLSAgICA8czpoaWRkZW4gbmFtZT0iZGlyZWN0b3J5SWQiIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9Im5ld0RpcmVjdG9yeU5hbWUiIC8+Ci0gICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibWVkaWFGaWxlSWQiIHZhbHVlPSIiIC8+CisgICAgPHM6Zm9ybSBpZD0ibWVkaWFGaWxlVmlld0Zvcm0iIG5hbWU9Im1lZGlhRmlsZVZpZXdGb3JtIiBhY3Rpb249Im1lZGlhRmlsZVZpZXciIHRoZW1lPSJib290c3RyYXAiPgorICAgICAgICA8czpoaWRkZW4gbmFtZT0ic2FsdCIvPgorICAgICAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIi8+CisgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJkaXJlY3RvcnlJZCIvPgorICAgICAgICA8czpoaWRkZW4gbmFtZT0ibmV3RGlyZWN0b3J5TmFtZSIvPgorICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJtZWRpYUZpbGVJZCIgdmFsdWU9IiIvPgogCi0gICAgPGRpdiBjbGFzcz0iY29udHJvbCI+Ci0gICAgICAgIDxzcGFuIHN0eWxlPSJwYWRkaW5nLWxlZnQ6N3B4Ij4KLSAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibWVkaWFGaWxlVmlldy5zb3J0QnkiIC8+OgotICAgICAgICAgICAgPHM6c2VsZWN0IGlkPSJzb3J0QnlNZW51IiBuYW1lPSJzb3J0QnkiIGxpc3Q9InNvcnRPcHRpb25zIiBsaXN0S2V5PSJrZXkiCi0gICAgICAgICAgICAgICAgICBsaXN0VmFsdWU9InZhbHVlIgotICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9ImRvY3VtZW50Lm1lZGlhRmlsZVZpZXdGb3JtLnN1Ym1pdCgpOyIgLz4KLSAgICAgICAgPC9zcGFuPgorICAgICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1jb250cm9scyI+CiAKLSAgICAgICAgPHNwYW4gc3R5bGU9ImZsb2F0OnJpZ2h0Ij4KICAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiFhbGxEaXJlY3Rvcmllcy5pc0VtcHR5Ij4KICAgICAgICAgICAgICAgICA8JS0tIEZvbGRlciB0byBWaWV3IGNvbWJvLWJveCAtLSU+Ci0gICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3LnZpZXdGb2xkZXIiIC8+OgotICAgICAgICAgICAgICAgIDxzOnNlbGVjdCBuYW1lPSJ2aWV3RGlyZWN0b3J5SWQiIGxpc3Q9ImFsbERpcmVjdG9yaWVzIiBsaXN0S2V5PSJpZCIgbGlzdFZhbHVlPSJuYW1lIiBvbmNoYW5nZT0ib25WaWV3KCkiIC8+CisgICAgICAgICAgICAgICAgPHNwYW4+PHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3LnZpZXdGb2xkZXIiLz46PC9zcGFuPgorICAgICAgICAgICAgICAgIDxzOnNlbGVjdCBpZD0idmlld0RpcmVjdG9yeU1lbnUiIG5hbWU9InZpZXdEaXJlY3RvcnlJZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdD0iYWxsRGlyZWN0b3JpZXMiIGxpc3RLZXk9ImlkIiBsaXN0VmFsdWU9Im5hbWUiIG9uY2hhbmdlPSJvblZpZXcoKSIvPgogICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICA8L3NwYW4+Ci0gICAgPC9kaXY+CiAKLSAgICA8JS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tJT4KKyAgICAgICAgICAgIDxzcGFuPjxzOnRleHQgbmFtZT0ibWVkaWFGaWxlVmlldy5zb3J0QnkiLz46PC9zcGFuPgorICAgICAgICAgICAgPHM6c2VsZWN0IGlkPSJzb3J0QnlNZW51IiBuYW1lPSJzb3J0QnkiIGxpc3Q9InNvcnRPcHRpb25zIiBsaXN0S2V5PSJrZXkiIGxpc3RWYWx1ZT0idmFsdWUiCisgICAgICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9ImRvY3VtZW50Lm1lZGlhRmlsZVZpZXdGb3JtLnN1Ym1pdCgpOyIvPgogCi0gICAgPCUtLSBNZWRpYSBmaWxlIGZvbGRlciBjb250ZW50cyAtLSU+CisgICAgICAgIDwvZGl2PgogCi0gICAgPHNjcmlwdD4KLSAgICAgICAgZnVuY3Rpb24gaGlnaGxpZ2h0KGVsLCBmbGFnKSB7Ci0gICAgICAgICAgICBpZiAoZmxhZykgewotICAgICAgICAgICAgICAgICQoZWwpLmFkZENsYXNzKCJoaWdobGlnaHQiKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgJChlbCkucmVtb3ZlQ2xhc3MoImhpZ2hsaWdodCIpOworCisgICAgICAgIDwlLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0lPgorCisgICAgICAgIDwlLS0gTWVkaWEgZmlsZSBmb2xkZXIgY29udGVudHMgLS0lPgorCisgICAgICAgIDxzY3JpcHQ+CisgICAgICAgICAgICBmdW5jdGlvbiBoaWdobGlnaHQoZWwsIGZsYWcpIHsKKyAgICAgICAgICAgICAgICBpZiAoZmxhZykgeworICAgICAgICAgICAgICAgICAgICAkKGVsKS5hZGRDbGFzcygiaGlnaGxpZ2h0Iik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgJChlbCkucmVtb3ZlQ2xhc3MoImhpZ2hsaWdodCIpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIDwvc2NyaXB0PgorICAgICAgICA8L3NjcmlwdD4KIAotICAgIDxkaXYgIHdpZHRoPSI3MjBweCIgaGVpZ2h0PSI1MDBweCI+Ci0gICAgICAgIDx1bCBpZCA9ICJteU1lbnUiPgorICAgICAgICA8ZGl2IGlkPSJpbWFnZUdyaWQiIGNsYXNzPSJwYW5lbCBwYW5lbC1kZWZhdWx0Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiPgogCi0gICAgICAgICAgICA8czppZiB0ZXN0PSIhcGFnZXIiPgorICAgICAgICAgICAgICAgIDx1bD4KIAotICAgICAgICAgICAgICAgIDwlLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0lPgorICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSIhcGFnZXIiPgogCi0gICAgICAgICAgICAgICAgPCUtLSBOT1QgU0VBUkNIIFJFU1VMVFMgLS0lPgorICAgICAgICAgICAgICAgICAgICAgICAgPCUtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLSU+CiAKLSAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJjaGlsZEZpbGVzLnNpemUoKSA9PTAiPgotICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj48czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcubm9GaWxlcyIvPjwvcD4KLSAgICAgICAgICAgICAgICA8L3M6aWY+CisgICAgICAgICAgICAgICAgICAgICAgICA8JS0tIE5PVCBTRUFSQ0ggUkVTVUxUUyAtLSU+CiAKLSAgICAgICAgICAgICAgICA8JS0tIExpc3QgbWVkaWEgZmlsZXMgLS0lPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iY2hpbGRGaWxlcy5zaXplKCkgPT0wIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZVZpZXcubm9GaWxlcyIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgogCi0gICAgICAgICAgICAgICAgPHM6aXRlcmF0b3IgdmFyPSJtZWRpYUZpbGUiIHZhbHVlPSJjaGlsZEZpbGVzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwlLS0gTGlzdCBtZWRpYSBmaWxlcyAtLSU+CiAKLSAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJhbGlnbi1pbWFnZXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25tb3VzZW92ZXI9ImhpZ2hsaWdodCh0aGlzLCB0cnVlKSIgb25tb3VzZW91dD0iaGlnaGxpZ2h0KHRoaXMsIGZhbHNlKSI+CisgICAgICAgICAgICAgICAgICAgICAgICA8czppdGVyYXRvciB2YXI9Im1lZGlhRmlsZSIgdmFsdWU9ImNoaWxkRmlsZXMiPgogCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZWRpYU9iamVjdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jbGljaz0ib25DbGlja0VkaXQoJzxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLmlkIi8+JykiID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImFsaWduLWltYWdlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25tb3VzZW92ZXI9ImhpZ2hsaWdodCh0aGlzLCB0cnVlKSIgb25tb3VzZW91dD0iaGlnaGxpZ2h0KHRoaXMsIGZhbHNlKSI+CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSIjbWVkaWFGaWxlLmltYWdlRmlsZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgYm9yZGVyPSIwIiBzcmM9JzxzOnByb3BlcnR5IHZhbHVlPSIleyNtZWRpYUZpbGUudGh1bWJuYWlsVVJMfSIgLz4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9JzxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLnRodW1ibmFpbFdpZHRoIi8+JwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD0nPHM6cHJvcGVydHkgdmFsdWU9IiNtZWRpYUZpbGUudGh1bWJuYWlsSGVpZ2h0Ii8+JwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSc8czpwcm9wZXJ0eSB2YWx1ZT0iI21lZGlhRmlsZS5uYW1lIiAvPicgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3M6aWY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lZGlhT2JqZWN0IiBvbmNsaWNrPSJvbkNsaWNrRWRpdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHM6cHJvcGVydHkgdmFsdWU9IiNtZWRpYUZpbGUuaWQiLz4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8czpwcm9wZXJ0eSB2YWx1ZT0iI21lZGlhRmlsZS5uYW1lIi8+JyApIj4KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmVsc2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnVybCB2YXI9Im1lZGlhRmlsZVVSTCIgdmFsdWU9Ii9pbWFnZXMvcGFnZS5wbmciPjwvczp1cmw+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgYm9yZGVyPSIwIiBzcmM9JzxzOnByb3BlcnR5IHZhbHVlPSIle21lZGlhRmlsZVVSTH0iIC8+JwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJwYWRkaW5nOjQwcHggNTBweDsiIGFsdD0ibG9nbyIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3M6ZWxzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiNtZWRpYUZpbGUuaW1hZ2VGaWxlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGJvcmRlcj0iMCIgc3JjPSc8czpwcm9wZXJ0eSB2YWx1ZT0iJXsjbWVkaWFGaWxlLnRodW1ibmFpbFVSTH0iIC8+JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9JzxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLnRodW1ibmFpbFdpZHRoIiAvPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD0nPHM6cHJvcGVydHkgdmFsdWU9IiNtZWRpYUZpbGUudGh1bWJuYWlsSGVpZ2h0IiAvPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSc8czpwcm9wZXJ0eSB2YWx1ZT0iI21lZGlhRmlsZS5uYW1lIiAvPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD0nPHM6cHJvcGVydHkgdmFsdWU9IiNtZWRpYUZpbGUubmFtZSIgLz4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwlLS0gb25jbGljaz0ib25DbGlja0VkaXQoJzxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLmlkIi8+JykiIC0tJT4gLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczppZj4KIAotICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czplbHNlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnVybCB2YXI9Im1lZGlhRmlsZVVSTCIgdmFsdWU9Ii9pbWFnZXMvcGFnZS5wbmciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGJvcmRlcj0iMCIgc3JjPSc8czpwcm9wZXJ0eSB2YWx1ZT0iJXttZWRpYUZpbGVVUkx9IiAvPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJwYWRkaW5nOjQwcHggNTBweDsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9JzxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLm5hbWUiLz4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwlLS0gb25jbGljaz0ib25DbGlja0VkaXQoJzxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLmlkIi8+JykiIC0tJT4gLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczplbHNlPgogCi0gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZWRpYU9iamVjdEluZm8iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubW91c2VvdmVyPSdzZXR1cE1lbnVCdXR0b24oIjxzOnByb3BlcnR5IHZhbHVlPScjbWVkaWFGaWxlLmlkJyAvPiIpJz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InNlbGVjdGVkTWVkaWFGaWxlcyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9IjxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLmlkIi8+IiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJtZWRpYWZpbGVpZGVudGl0eSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9IjxzOnByb3BlcnR5IHZhbHVlPScjbWVkaWFGaWxlLmlkJy8+IiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZWRpYU9iamVjdEluZm8iPgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cjp0cnVuY2F0ZU5pY2VseSBsb3dlcj0iNDciIHVwcGVyPSI0NyI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLm5hbWUiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdHI6dHJ1bmNhdGVOaWNlbHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0ic2VsZWN0ZWRNZWRpYUZpbGVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSI8czpwcm9wZXJ0eSB2YWx1ZT0iI21lZGlhRmlsZS5pZCIvPiIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9Im1lZGlhZmlsZWlkZW50aXR5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSI8czpwcm9wZXJ0eSB2YWx1ZT0nI21lZGlhRmlsZS5pZCcvPiIvPgogCi0gICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cjp0cnVuY2F0ZU5pY2VseSBsb3dlcj0iNDciIHVwcGVyPSI0NyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9IiNtZWRpYUZpbGUubmFtZSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdHI6dHJ1bmNhdGVOaWNlbHk+CiAKLSAgICAgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAKLSAgICAgICAgICAgICAgICA8L3M6aXRlcmF0b3I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KIAotICAgICAgICAgICAgPC9zOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zOml0ZXJhdG9yPgogCi0gICAgICAgICAgICA8czplbHNlPgorICAgICAgICAgICAgICAgICAgICA8L3M6aWY+CiAKLSAgICAgICAgICAgICAgICA8JS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tJT4KKyAgICAgICAgICAgICAgICAgICAgPHM6ZWxzZT4KIAotICAgICAgICAgICAgICAgIDwlLS0gU0VBUkNIIFJFU1VMVFMgLS0lPgorICAgICAgICAgICAgICAgICAgICAgICAgPCUtLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLSU+CiAKLSAgICAgICAgICAgICAgICA8czppdGVyYXRvciB2YXI9Im1lZGlhRmlsZSIgdmFsdWU9InBhZ2VyLml0ZW1zIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwlLS0gU0VBUkNIIFJFU1VMVFMgLS0lPgogCi0gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iYWxpZ24taW1hZ2VzIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubW91c2VvdmVyPSJoaWdobGlnaHQodGhpcywgdHJ1ZSkiIG9ubW91c2VvdXQ9ImhpZ2hsaWdodCh0aGlzLCBmYWxzZSkiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6aXRlcmF0b3IgdmFyPSJtZWRpYUZpbGUiIHZhbHVlPSJwYWdlci5pdGVtcyI+CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lZGlhT2JqZWN0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJvbkNsaWNrRWRpdCgnPHM6cHJvcGVydHkgdmFsdWU9IiNtZWRpYUZpbGUuaWQiLz4nKSIgPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iYWxpZ24taW1hZ2VzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbm1vdXNlb3Zlcj0iaGlnaGxpZ2h0KHRoaXMsIHRydWUpIiBvbm1vdXNlb3V0PSJoaWdobGlnaHQodGhpcywgZmFsc2UpIj4KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiNtZWRpYUZpbGUuaW1hZ2VGaWxlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBib3JkZXI9IjAiIHNyYz0nPHM6cHJvcGVydHkgdmFsdWU9IiV7I21lZGlhRmlsZS50aHVtYm5haWxVUkx9IiAvPicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD0nPHM6cHJvcGVydHkgdmFsdWU9IiNtZWRpYUZpbGUudGh1bWJuYWlsV2lkdGgiLz4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSc8czpwcm9wZXJ0eSB2YWx1ZT0iI21lZGlhRmlsZS50aHVtYm5haWxIZWlnaHQiLz4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9JzxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLm5hbWUiIC8+JyAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczppZj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVkaWFPYmplY3QiIG9uY2xpY2s9Im9uQ2xpY2tFZGl0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8czpwcm9wZXJ0eSB2YWx1ZT0iI21lZGlhRmlsZS5pZCIvPicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLm5hbWUiLz4nICkiPgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6ZWxzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dXJsIHZhcj0ibWVkaWFGaWxlVVJMIiB2YWx1ZT0iL2ltYWdlcy9wYWdlLnBuZyI+PC9zOnVybD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBib3JkZXI9IjAiIHNyYz0nPHM6cHJvcGVydHkgdmFsdWU9IiV7bWVkaWFGaWxlVVJMfSIgLz4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9InBhZGRpbmc6NDBweCA1MHB4OyIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3M6ZWxzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiNtZWRpYUZpbGUuaW1hZ2VGaWxlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGJvcmRlcj0iMCIgc3JjPSc8czpwcm9wZXJ0eSB2YWx1ZT0iJXsjbWVkaWFGaWxlLnRodW1ibmFpbFVSTH0iIC8+JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9JzxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLnRodW1ibmFpbFdpZHRoIi8+JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSc8czpwcm9wZXJ0eSB2YWx1ZT0iI21lZGlhRmlsZS50aHVtYm5haWxIZWlnaHQiLz4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0nPHM6cHJvcGVydHkgdmFsdWU9IiNtZWRpYUZpbGUubmFtZSIgLz4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9JzxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLm5hbWUiLz4nLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczppZj4KIAotICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czplbHNlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnVybCB2YXI9Im1lZGlhRmlsZVVSTCIgdmFsdWU9Ii9pbWFnZXMvcGFnZS5wbmciLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGJvcmRlcj0iMCIgc3JjPSc8czpwcm9wZXJ0eSB2YWx1ZT0iJXttZWRpYUZpbGVVUkx9IiAvPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJwYWRkaW5nOjQwcHggNTBweDsiIGFsdD0nPHM6cHJvcGVydHkgdmFsdWU9IiNtZWRpYUZpbGUubmFtZSIvPicvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmVsc2U+CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lZGlhT2JqZWN0SW5mbyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25tb3VzZW92ZXI9J3NldHVwTWVudUJ1dHRvbigiPHM6cHJvcGVydHkgdmFsdWU9JyNtZWRpYUZpbGUuaWQnIC8+IiknPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJzZWxlY3RlZE1lZGlhRmlsZXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iPHM6cHJvcGVydHkgdmFsdWU9IiNtZWRpYUZpbGUuaWQiLz4iLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9Im1lZGlhZmlsZWlkZW50aXR5IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9IjxzOnByb3BlcnR5IHZhbHVlPScjbWVkaWFGaWxlLmlkJy8+Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVkaWFPYmplY3RJbmZvIj4KIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyOnRydW5jYXRlTmljZWx5IGxvd2VyPSI0MCIgdXBwZXI9IjUwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLm5hbWUiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3RyOnRydW5jYXRlTmljZWx5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InNlbGVjdGVkTWVkaWFGaWxlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iPHM6cHJvcGVydHkgdmFsdWU9IiNtZWRpYUZpbGUuaWQiLz4iLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJtZWRpYWZpbGVpZGVudGl0eSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iPHM6cHJvcGVydHkgdmFsdWU9JyNtZWRpYUZpbGUuaWQnLz4iPgogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJidXR0b24iIGlkPSJhZGRidXR0b24tPHM6cHJvcGVydHkgdmFsdWU9JyNtZWRpYUZpbGUuaWQnIC8+Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHI6dHJ1bmNhdGVOaWNlbHkgbG93ZXI9IjQwIiB1cHBlcj0iNTAiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIjbWVkaWFGaWxlLm5hbWUiLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3RyOnRydW5jYXRlTmljZWx5PgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYnV0dG9uIiBpZD0iYWRkYnV0dG9uLTxzOnByb3BlcnR5IHZhbHVlPScjbWVkaWFGaWxlLmlkJyAvPiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGlkPSJhZGRidXR0b24taW1nPHM6cHJvcGVydHkgdmFsdWU9JyNtZWRpYUZpbGUuaWQnIC8+IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9IjxzOnVybCB2YWx1ZT0iL2ltYWdlcy9hZGQucG5nIi8+IiAvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9IjxzOnVybCB2YWx1ZT0iL2ltYWdlcy9hZGQucG5nIi8+Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KIAotICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogCi0gICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KIAotICAgICAgICAgICAgICAgIDwvczppdGVyYXRvcj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvczppdGVyYXRvcj4KIAotICAgICAgICAgICAgPC9zOmVsc2U+CisgICAgICAgICAgICAgICAgICAgIDwvczplbHNlPgogCi0gICAgICAgIDwvdWw+Ci0gICAgPC9kaXY+CisgICAgICAgICAgICAgICAgPC91bD4KIAotICAgIDxkaXYgc3R5bGU9ImNsZWFyOmxlZnQ7Ij48L2Rpdj4KLQotICAgIDxzOmlmIHRlc3Q9IighcGFnZXIgJiYgY2hpbGRGaWxlcy5zaXplKCkgPiAwKSB8fCAocGFnZXIgJiYgcGFnZXIuaXRlbXMuc2l6ZSgpID4gMCkgfHwgKGN1cnJlbnREaXJlY3RvcnkubmFtZSAhPSAnZGVmYXVsdCcgJiYgIXBhZ2VyKSI+Ci0gICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wgY2xlYXJmaXgiIHN0eWxlPSJtYXJnaW4tdG9wOiAxNXB4Ij4KLQotICAgICAgICAgICAgPHM6aWYgdGVzdD0iKCFwYWdlciAmJiBjaGlsZEZpbGVzLnNpemUoKSA+IDApIHx8IChwYWdlciAmJiBwYWdlci5pdGVtcy5zaXplKCkgPiAwKSI+Ci0gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9InBhZGRpbmctbGVmdDo3cHg7bWFyZ2luLXRvcDogMjBweCI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0idG9nZ2xlQnV0dG9uIiB0eXBlPSJidXR0b24iCi0gICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSc8czp0ZXh0IG5hbWU9ImdlbmVyaWMudG9nZ2xlIiAvPicgb25jbGljaz0ib25Ub2dnbGUoKSIgLz4KLQotICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImRlbGV0ZUJ1dHRvbiIgdHlwZT0iYnV0dG9uIgotICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3LmRlbGV0ZVNlbGVjdGVkIiAvPicgb25jbGljaz0ib25EZWxldGVTZWxlY3RlZCgpIiAvPgotCi0gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0ibW92ZUJ1dHRvbiIgdHlwZT0iYnV0dG9uIgotICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3Lm1vdmVTZWxlY3RlZCIgLz4nIG9uY2xpY2s9Im9uTW92ZVNlbGVjdGVkKCkiIC8+Ci0KLSAgICAgICAgICAgICAgICAgICAgPHM6c2VsZWN0IGlkPSJtb3ZlVGFyZ2V0TWVudSIgbmFtZT0ic2VsZWN0ZWREaXJlY3RvcnkiIGxpc3Q9ImFsbERpcmVjdG9yaWVzIiBsaXN0S2V5PSJpZCIgbGlzdFZhbHVlPSJuYW1lIiAvPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvczppZj4KLQotICAgICAgICAgICAgPHM6aWYgdGVzdD0iY3VycmVudERpcmVjdG9yeS5uYW1lICE9ICdkZWZhdWx0JyAmJiAhcGFnZXIiPgotICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmbG9hdDpyaWdodDsiPgotICAgICAgICAgICAgICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnbWVkaWFGaWxlVmlldy5kZWxldGVGb2xkZXInKX0iIGFjdGlvbj0ibWVkaWFGaWxlVmlldyFkZWxldGVGb2xkZXIiIG9uY2xpY2s9Im9uRGVsZXRlRm9sZGVyKCk7cmV0dXJuIGZhbHNlOyIvPgotICAgICAgICAgICAgICAgIDwvc3Bhbj4KLSAgICAgICAgICAgIDwvczppZj4KKyAgICAgICAgICAgIDwvZGl2PgogICAgICAgICA8L2Rpdj4KLSAgICA8L3M6aWY+CiAKLTwvczpmb3JtPgorICAgICAgICA8ZGl2IHN0eWxlPSJjbGVhcjpsZWZ0OyI+PC9kaXY+CisKKyAgICAgICAgPHM6aWYgdGVzdD0iKCFwYWdlciAmJiBjaGlsZEZpbGVzLnNpemUoKSA+IDApIHx8IChwYWdlciAmJiBwYWdlci5pdGVtcy5zaXplKCkgPiAwKSB8fCAoY3VycmVudERpcmVjdG9yeS5uYW1lICE9ICdkZWZhdWx0JyAmJiAhcGFnZXIpIj4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW1hZ2UtY29udHJvbHMiPgorCisgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iKCFwYWdlciAmJiBjaGlsZEZpbGVzLnNpemUoKSA+IDApIHx8IChwYWdlciAmJiBwYWdlci5pdGVtcy5zaXplKCkgPiAwKSI+CisgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0idG9nZ2xlQnV0dG9uIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4iIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nPHM6dGV4dCBuYW1lPSJnZW5lcmljLnRvZ2dsZSIgLz4nIG9uY2xpY2s9Im9uVG9nZ2xlKCkiLz4KKworICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImRlbGV0ZUJ1dHRvbiIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kYW5nZXIiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3LmRlbGV0ZVNlbGVjdGVkIiAvPicgb25jbGljaz0ib25EZWxldGVTZWxlY3RlZCgpIi8+CisKKyAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJtb3ZlQnV0dG9uIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0nPHM6dGV4dCBuYW1lPSJtZWRpYUZpbGVWaWV3Lm1vdmVTZWxlY3RlZCIgLz4nIG9uY2xpY2s9Im9uTW92ZVNlbGVjdGVkKCkiLz4KKworICAgICAgICAgICAgICAgIDwvczppZj4KKworICAgICAgICAgICAgICAgIDxzOnNlbGVjdCBpZD0ibW92ZVRhcmdldE1lbnUiIG5hbWU9InNlbGVjdGVkRGlyZWN0b3J5IiBjc3NTdHlsZT0iZGlzcGxheTogaW5saW5lOyB3aWR0aDogMTVlbSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdD0iYWxsRGlyZWN0b3JpZXMiIGxpc3RLZXk9ImlkIiBsaXN0VmFsdWU9Im5hbWUiLz4KKworICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImN1cnJlbnREaXJlY3RvcnkubmFtZSAhPSAnZGVmYXVsdCcgJiYgIXBhZ2VyIj4KKyAgICAgICAgICAgICAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ21lZGlhRmlsZVZpZXcuZGVsZXRlRm9sZGVyJyl9IiBjc3NDbGFzcz0iYnRuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSJtZWRpYUZpbGVWaWV3IWRlbGV0ZUZvbGRlciIgb25jbGljaz0ib25EZWxldGVGb2xkZXIoKTtyZXR1cm4gZmFsc2U7Ii8+CisgICAgICAgICAgICAgICAgPC9zOmlmPgorCisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICA8L3M6aWY+CisKKyAgICA8L3M6Zm9ybT4KIAogPC9zOmlmPgogCiAKLTwlLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0lPgorPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgogCi08ZGl2IGlkPSJtZWRpYWZpbGVfZWRpdF9saWdodGJveCIgdGl0bGU9IjxzOnRleHQgbmFtZT0nbWVkaWFGaWxlRWRpdC5wb3B1cFRpdGxlJy8+IiBzdHlsZT0iZGlzcGxheTpub25lIj4KLSAgICA8aWZyYW1lIGlkPSJtZWRpYUZpbGVFZGl0b3IiCi0gICAgICAgICAgICBzdHlsZT0idmlzaWJpbGl0eTppbmhlcml0IgotICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIgotICAgICAgICAgICAgd2lkdGg9IjEwMCUiCi0gICAgICAgICAgICBmcmFtZWJvcmRlcj0ibm8iCi0gICAgICAgICAgICBzY3JvbGxpbmc9ImF1dG8iPgotICAgIDwvaWZyYW1lPgorPCUtLSB2aWV3IGltYWdlIG1vZGFsIC0tJT4KKworPGRpdiBpZD0ibWVkaWFmaWxlX2VkaXRfbGlnaHRib3giIGNsYXNzPSJtb2RhbCBmYWRlIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyI+CisKKyAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtbGciPgorCisgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgorCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgorICAgICAgICAgICAgICAgIDxoMyBjbGFzcz0ic3VidGl0bGUiPgorICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9Im1lZGlhRmlsZUVkaXQuc3VidGl0bGUiLz48Yj48c3BhbiBpZD0iZWRpdC1zdWJ0aXRsZSI+PC9zcGFuPjwvYj4KKyAgICAgICAgICAgICAgICA8L2gzPgorICAgICAgICAgICAgPC9kaXY+CisKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgorICAgICAgICAgICAgICAgIDxpZnJhbWUgaWQ9Im1lZGlhRmlsZUVkaXRvciIKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ2aXNpYmlsaXR5OmluaGVyaXQiCisgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9IjcwMCIgPCUtLSBwaXhlbHMsIHNpZ2gsIHRoaXMgaXMgc3Vib3B0aW1hbC0tJT4KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPSIxMDAlIgorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVib3JkZXI9Im5vIgorICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nPSJhdXRvIj4KKyAgICAgICAgICAgICAgICA8L2lmcmFtZT4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPjwvZGl2PgorCisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorCiA8L2Rpdj4KIAorCiA8c2NyaXB0PgotICAgIGZ1bmN0aW9uIG9uQ2xpY2tFZGl0KG1lZGlhRmlsZUlkKSB7CisgICAgdG9nZ2xlU3RhdGUgPSAnT2ZmJworCisgICAgZnVuY3Rpb24gb25DbGlja0VkaXQobWVkaWFGaWxlSWQsIG1lZGlhRmlsZU5hbWUpIHsKICAgICAgICAgPHM6dXJsIHZhcj0ibWVkaWFGaWxlRWRpdFVSTCIgYWN0aW9uPSJtZWRpYUZpbGVFZGl0Ij4KLSAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+CisgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+CiAgICAgICAgIDwvczp1cmw+Ci0gICAgICAgICQoIiNtZWRpYUZpbGVFZGl0b3IiKS5hdHRyKCdzcmMnLCAnPHM6cHJvcGVydHkgdmFsdWU9IiV7bWVkaWFGaWxlRWRpdFVSTH0iIC8+JyArICcmbWVkaWFGaWxlSWQ9JyArIG1lZGlhRmlsZUlkKTsKLSAgICAgICAgJChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICQoIiNtZWRpYWZpbGVfZWRpdF9saWdodGJveCIpLmRpYWxvZyh7Ci0gICAgICAgICAgICAgICAgbW9kYWwgIDogdHJ1ZSwKLSAgICAgICAgICAgICAgICB3aWR0aCAgOiA2MDAsCi0gICAgICAgICAgICAgICAgaGVpZ2h0IDogNjMwCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7CisgICAgICAgICQoJyNlZGl0LXN1YnRpdGxlJykuaHRtbChtZWRpYUZpbGVOYW1lKQorICAgICAgICAkKCcjbWVkaWFGaWxlRWRpdG9yJykuYXR0cignc3JjJywgJzxzOnByb3BlcnR5IHZhbHVlPSIle21lZGlhRmlsZUVkaXRVUkx9IiAvPicgKyAnJm1lZGlhRmlsZUlkPScgKyBtZWRpYUZpbGVJZCk7CisgICAgICAgICQoJyNtZWRpYWZpbGVfZWRpdF9saWdodGJveCcpLm1vZGFsKHtzaG93OiB0cnVlfSk7CiAgICAgfQogCiAgICAgZnVuY3Rpb24gb25FZGl0U3VjY2VzcygpIHsKQEAgLTQ0MSwxMSArMzYwLDc5IEBACiAgICAgfQogCiAgICAgZnVuY3Rpb24gb25FZGl0Q2FuY2VsbGVkKCkgewotICAgICAgICAkKCIjbWVkaWFmaWxlX2VkaXRfbGlnaHRib3giKS5kaWFsb2coImNsb3NlIik7Ci0gICAgICAgICQoIiNtZWRpYUZpbGVFZGl0b3IiKS5hdHRyKCdzcmMnLCdhYm91dDpibGFuaycpOworICAgICAgICAkKCcjbWVkaWFmaWxlX2VkaXRfbGlnaHRib3gnKS5tb2RhbCgnaGlkZScpOworICAgICAgICAkKCIjbWVkaWFGaWxlRWRpdG9yIikuYXR0cignc3JjJywgJ2Fib3V0OmJsYW5rJyk7CiAgICAgfQotPC9zY3JpcHQ+CiAKLTxici8+Ci08YnIvPgotPGJyLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisgICAgZnVuY3Rpb24gb25TZWxlY3REaXJlY3RvcnkoaWQpIHsKKyAgICAgICAgd2luZG93LmxvY2F0aW9uID0gIjxzOnVybCBhY3Rpb249Im1lZGlhRmlsZVZpZXciIC8+P2RpcmVjdG9yeUlkPSIKKyAgICAgICAgICAgICsgaWQgKyAiJndlYmxvZz0iICsgJzxzOnByb3BlcnR5IHZhbHVlPSJhY3Rpb25XZWJsb2cuaGFuZGxlIiAvPic7CisgICAgfQorCisgICAgZnVuY3Rpb24gb25Ub2dnbGUoKSB7CisgICAgICAgIGlmICh0b2dnbGVTdGF0ZSA9PT0gJ09mZicpIHsKKyAgICAgICAgICAgIHRvZ2dsZVN0YXRlID0gJ09uJzsKKyAgICAgICAgICAgIHRvZ2dsZUZ1bmN0aW9uKHRydWUsICdzZWxlY3RlZE1lZGlhRmlsZXMnKTsKKyAgICAgICAgICAgICQoIiNkZWxldGVCdXR0b24iKS5hdHRyKCdkaXNhYmxlZCcsIGZhbHNlKTsKKyAgICAgICAgICAgICQoIiNtb3ZlQnV0dG9uIikuYXR0cignZGlzYWJsZWQnLCBmYWxzZSk7CisgICAgICAgICAgICAkKCIjbW92ZVRhcmdldE1lbnUiKS5hdHRyKCdkaXNhYmxlZCcsIGZhbHNlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRvZ2dsZVN0YXRlID0gJ09mZic7CisgICAgICAgICAgICB0b2dnbGVGdW5jdGlvbihmYWxzZSwgJ3NlbGVjdGVkTWVkaWFGaWxlcycpOworICAgICAgICAgICAgJCgiI2RlbGV0ZUJ1dHRvbiIpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAgICAgICAgICAkKCIjbW92ZUJ1dHRvbiIpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAgICAgICAgICAkKCIjbW92ZVRhcmdldE1lbnUiKS5hdHRyKCdkaXNhYmxlZCcsIHRydWUpCisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBvbkRlbGV0ZVNlbGVjdGVkKCkgeworICAgICAgICBpZiAoY29uZmlybSgiPHM6dGV4dCBuYW1lPSdtZWRpYUZpbGUuZGVsZXRlLmNvbmZpcm0nIC8+IikpIHsKKyAgICAgICAgICAgIGRvY3VtZW50Lm1lZGlhRmlsZVZpZXdGb3JtLmFjdGlvbiA9ICc8czp1cmwgYWN0aW9uPSJtZWRpYUZpbGVWaWV3IWRlbGV0ZVNlbGVjdGVkIiAvPic7CisgICAgICAgICAgICBkb2N1bWVudC5tZWRpYUZpbGVWaWV3Rm9ybS5zdWJtaXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIG9uRGVsZXRlRm9sZGVyKCkgeworICAgICAgICBpZiAoY29uZmlybSgiPHM6dGV4dCBuYW1lPSdtZWRpYUZpbGUuZGVsZXRlRm9sZGVyLmNvbmZpcm0nIC8+IikpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvb2ttYXJrcy5hY3Rpb24gPSAnPHM6dXJsIGFjdGlvbj0ibWVkaWFGaWxlVmlldyFkZWxldGVGb2xkZXIiIC8+JzsKKyAgICAgICAgICAgIGRvY3VtZW50LmJvb2ttYXJrcy5zdWJtaXQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIG9uTW92ZVNlbGVjdGVkKCkgeworICAgICAgICBpZiAoY29uZmlybSgiPHM6dGV4dCBuYW1lPSdtZWRpYUZpbGUubW92ZS5jb25maXJtJyAvPiIpKSB7CisgICAgICAgICAgICBkb2N1bWVudC5tZWRpYUZpbGVWaWV3Rm9ybS5hY3Rpb24gPSAnPHM6dXJsIGFjdGlvbj0ibWVkaWFGaWxlVmlldyFtb3ZlU2VsZWN0ZWQiIC8+JzsKKyAgICAgICAgICAgIGRvY3VtZW50Lm1lZGlhRmlsZVZpZXdGb3JtLnN1Ym1pdCgpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gb25WaWV3KCkgeworICAgICAgICBkb2N1bWVudC5tZWRpYUZpbGVWaWV3Rm9ybS5hY3Rpb24gPSAiPHM6dXJsIGFjdGlvbj0nbWVkaWFGaWxlVmlldyF2aWV3JyAvPiI7CisgICAgICAgIGRvY3VtZW50Lm1lZGlhRmlsZVZpZXdGb3JtLnN1Ym1pdCgpOworICAgIH0KKworICAgIDwlLS0gY29kZSB0byB0b2dnbGUgYnV0dG9ucyBvbi9vZmYgYXMgbWVkaWEgZmlsZS9kaXJlY3Rvcnkgc2VsZWN0aW9ucyBjaGFuZ2UgLS0lPgorCisgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgeworICAgICAgICAkKCIjZGVsZXRlQnV0dG9uIikuYXR0cignZGlzYWJsZWQnLCB0cnVlKTsKKyAgICAgICAgJCgiI21vdmVCdXR0b24iKS5hdHRyKCdkaXNhYmxlZCcsIHRydWUpOworICAgICAgICAkKCIjbW92ZVRhcmdldE1lbnUiKS5hdHRyKCdkaXNhYmxlZCcsIHRydWUpOworCisgICAgICAgICQoImlucHV0W3R5cGU9Y2hlY2tib3hdIikuY2hhbmdlKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBjb3VudCA9IDA7CisgICAgICAgICAgICAkKCJpbnB1dFt0eXBlPWNoZWNrYm94XSIpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2hlY2tlZCkgY291bnQrKzsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7CisgICAgICAgICAgICAgICAgJCgiI2RlbGV0ZUJ1dHRvbiIpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgJCgiI21vdmVCdXR0b24iKS5hdHRyKCdkaXNhYmxlZCcsIHRydWUpOworICAgICAgICAgICAgICAgICQoIiNtb3ZlVGFyZ2V0TWVudSIpLmF0dHIoJ2Rpc2FibGVkJywgdHJ1ZSkKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgJCgiI2RlbGV0ZUJ1dHRvbiIpLmF0dHIoJ2Rpc2FibGVkJywgZmFsc2UpOworICAgICAgICAgICAgICAgICQoIiNtb3ZlQnV0dG9uIikuYXR0cignZGlzYWJsZWQnLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgJCgiI21vdmVUYXJnZXRNZW51IikuYXR0cignZGlzYWJsZWQnLCBmYWxzZSkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfSk7CisKKzwvc2NyaXB0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVWaWV3TGlnaHQuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL01lZGlhRmlsZVZpZXdMaWdodC5qc3AKaW5kZXggN2M1YjQyYi4uNTY1YWRiNSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL01lZGlhRmlsZVZpZXdMaWdodC5qc3AKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL01lZGlhRmlsZVZpZXdMaWdodC5qc3AKQEAgLTEsMyArMSwyMCBAQAorPCUtLQ0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorICAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91DQorICB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QNCisgIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKw0KKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKw0KKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcNCisgIGNvcHlyaWdodCBpbiB0aGlzIHdvcmssIHBsZWFzZSBzZWUgdGhlIE5PVElDRSBmaWxlIGluIHRoZSB0b3AgbGV2ZWwNCisgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4NCistLSU+DQogPCVAIGluY2x1ZGUgZmlsZT0iL1dFQi1JTkYvanNwcy90YWdsaWJzLXN0cnV0czIuanNwIiAlPg0KIHsNCiAiUmVzdWx0IjoNCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvTWVtYmVyUmVzaWduLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZW1iZXJSZXNpZ24uanNwCmluZGV4IDFlMjBiMjMuLmZjYTQxNWUgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZW1iZXJSZXNpZ24uanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZW1iZXJSZXNpZ24uanNwCkBAIC0xOCwyMCArMTgsMTQgQEAKIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KIAogPHA+Ci0gICA8czp0ZXh0IG5hbWU9InlvdXJXZWJzaXRlcy5jb25maXJtUmVzaWduYXRpb24iPgotICAgICAgIDxzOnBhcmFtIHZhbHVlPSJ3ZWJsb2ciIC8+Ci0gICA8L3M6dGV4dD4KKyAgICA8czp0ZXh0IG5hbWU9InlvdXJXZWJzaXRlcy5jb25maXJtUmVzaWduYXRpb24iPgorICAgICAgICA8czpwYXJhbSB2YWx1ZT0id2VibG9nIi8+CisgICAgPC9zOnRleHQ+CiA8L3A+CiAKLTx0YWJsZT4KLTx0cj4KLTx0ZD4KLSAgICA8czpmb3JtIGFjdGlvbj0ibWVtYmVyUmVzaWduIXJlc2lnbiI+Ci0JCTxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgotICAgICAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIiAvPgotICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnZ2VuZXJpYy55ZXMnKX0iIC8+Jm5ic3A7Ci0gICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLm5vJyl9IiBhY3Rpb249Im1lbnUiLz4KLSAgICA8L3M6Zm9ybT4KLTwvdGQ+Ci08L3RyPgotPC90YWJsZT4KKzxzOmZvcm0gYWN0aW9uPSJtZW1iZXJSZXNpZ24hcmVzaWduIiAgY3NzQ2xhc3M9ImZvcm0taG9yaXpvbnRhbCI+CisgICAgPHM6aGlkZGVuIG5hbWU9InNhbHQiLz4KKyAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIi8+CisgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMueWVzJyl9IiBjc3NDbGFzcz0iZm9ybS1ob3Jpem9udGFsIi8+Jm5ic3A7CisgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMubm8nKX0iIGFjdGlvbj0ibWVudSIgY3NzQ2xhc3M9ImZvcm0taG9yaXpvbnRhbCIvPgorPC9zOmZvcm0+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvTWVtYmVycy5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvTWVtYmVycy5qc3AKaW5kZXggYzQ0NDYzNC4uZmZmMTA2NCAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL01lbWJlcnMuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZW1iZXJzLmpzcApAQCAtMjMsNyArMjMsNyBAQAogICAgIHJhZGlvcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpOwogICAgIHZhciByZW1vdmluZyA9IGZhbHNlOwogICAgIGZvciAodmFyIGk9MDsgaTxyYWRpb3MubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgaWYgKHJhZGlvc1tpXS52YWx1ZSA9PSAtMSAmJiByYWRpb3NbaV0uY2hlY2tlZCkgeworICAgICAgICBpZiAocmFkaW9zW2ldLnZhbHVlID09PSAtMSAmJiByYWRpb3NbaV0uY2hlY2tlZCkgewogICAgICAgICAgICAgcmVtb3ZpbmcgPSB0cnVlOwogICAgICAgICB9CiAgICAgfQpAQCAtNDEsNyArNDEsNyBAQAogCiA8cD48czp0ZXh0IG5hbWU9Im1lbWJlclBlcm1pc3Npb25zLmRlc2NyaXB0aW9uIiAvPjwvcD4KIAotPHM6Zm9ybSBhY3Rpb249Im1lbWJlcnMhc2F2ZSI+Cis8czpmb3JtIGFjdGlvbj0ibWVtYmVycyFzYXZlIiBjc3NDbGFzcz0iZm9ybS1ob3Jpem9udGFsIj4KIAk8czpoaWRkZW4gbmFtZT0ic2FsdCIgLz4KICAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIiB2YWx1ZT0iJXthY3Rpb25XZWJsb2cuaGFuZGxlfSIgLz4KICAgICAKQEAgLTUwLDcgKzUwLDcgQEAKICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iY29tbWVudE1hbmFnZW1lbnQucGVuZGluZyIgLz4mbmJzcDsKICAgICA8L2Rpdj4KICAgICAKLSAgICA8dGFibGUgY2xhc3M9InJvbGxlcnRhYmxlIj4KKyAgICA8dGFibGUgY2xhc3M9InJvbGxlcnRhYmxlIHRhYmxlIHRhYmxlLXN0cmlwZWQiPgogICAgICAgICA8dHIgY2xhc3M9InJIZWFkZXJUciI+CiAgICAgICAgICAgIDx0aCBjbGFzcz0icm9sbGVydGFibGUiIHdpZHRoPSIyMCUiPgogICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJtZW1iZXJQZXJtaXNzaW9ucy51c2VyTmFtZSIgLz4KQEAgLTgwLDcgKzgwLDcgQEAKICAgICAgICAgICAgIDwvczplbHNlPgogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJyb2xsZXJ0YWJsZSI+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSc8czp1cmwgdmFsdWU9Ii9pbWFnZXMvdXNlci5wbmciLz4nIGJvcmRlcj0iMCIgYWx0PSJpY29uIiAvPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi11c2VyIj48L3NwYW4+CiAJICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSIjcGVybS51c2VyLnVzZXJOYW1lIiAvPgogICAgICAgICAgICAgICAgIDwvdGQ+ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJyb2xsZXJ0YWJsZSI+CkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICA8YnIgLz4KICAgICAgCiAgICAgPGRpdiBjbGFzcz0iY29udHJvbCI+Ci0gICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMuc2F2ZScpfSIgLz4KKyAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5zYXZlJyl9IiBjc3NDbGFzcz0iYnRuIiAvPgogICAgIDwvZGl2PgogICAgIAogPC9zOmZvcm0+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvTWVtYmVyc0ludml0ZS5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvTWVtYmVyc0ludml0ZS5qc3AKaW5kZXggMmZmNGFhYy4uMGYzYWFiZSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL01lbWJlcnNJbnZpdGUuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZW1iZXJzSW52aXRlLmpzcApAQCAtMTcsMzIgKzE3LDI2IEBACiAtLSU+CiA8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+CiAKLTxzY3JpcHQ+Ci0vLyA8IS0tCi08JUAgaW5jbHVkZSBmaWxlPSIvcm9sbGVyLXVpL3NjcmlwdHMvYWpheC11c2VyLmpzIiAlPgotLy8gLS0+Ci08L3NjcmlwdD4gCi0KIDxwIGNsYXNzPSJzdWJ0aXRsZSI+PHM6dGV4dCBuYW1lPSJpbnZpdGVNZW1iZXIuc3VidGl0bGUiIC8+PC9wPgogPHA+PHM6dGV4dCBuYW1lPSJpbnZpdGVNZW1iZXIucHJvbXB0IiAvPjwvcD4KIAotPHM6Zm9ybSBhY3Rpb249Imludml0ZSFzYXZlIj4KKzxzOmZvcm0gYWN0aW9uPSJpbnZpdGUhc2F2ZSIgY3NzQ2xhc3M9ImZvcm0taG9yaXpvbnRhbCI+CiAJPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+CiAgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+CiAgICAgCiAgICAgPGRpdiBjbGFzcz0iZm9ybXJvdyI+Ci0gICAgICAgPGxhYmVsIGZvcj0idXNlck5hbWUiIGNsYXNzPSJmb3Jtcm93IiAvPgorICAgICAgIDxsYWJlbCBmb3I9InVzZXJOYW1lIiBjbGFzcz0iZm9ybXJvdyI+CiAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iaW52aXRlTWVtYmVyLnVzZXJOYW1lIiAvPjwvbGFiZWw+CiAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGlucHV0IG5hbWU9InVzZXJOYW1lIiBpZD0idXNlck5hbWUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjMwIiAKLSAgICAgICAgICAgICAgIG9uZm9jdXM9Im9uVXNlck5hbWVGb2N1cyh0cnVlKSIgb25rZXl1cD0ib25Vc2VyTmFtZUNoYW5nZSh0cnVlKSIgLz48YnIgLz4KKyAgICAgICAgICAgICAgIG9uZm9jdXM9Im9uTWVtYmVyTmFtZUZvY3VzKHRydWUpIiBvbmtleXVwPSJvbk1lbWJlck5hbWVDaGFuZ2UodHJ1ZSkiIC8+PGJyIC8+CiAgICAgICAgPC9kaXY+Ci0gICAgPC9kaXY+ICAgIAotICAgIAorICAgIDwvZGl2PgorCiAgICAgPGRpdiBjbGFzcz0iZm9ybXJvdyI+CiAgICAgICAgPGxhYmVsIGNsYXNzPSJmb3Jtcm93IiAvPiZuYnNwOzwvbGFiZWw+CiAgICAgICAgPGRpdj4KLSAgICAgICAgICAgPHNlbGVjdCBpZD0idXNlckxpc3QiIHNpemU9IjEwIiBvbmNoYW5nZT0ib25Vc2VyU2VsZWN0ZWQoKSIgc3R5bGU9IndpZHRoOjQwMHB4Ij48L3NlbGVjdD4KKyAgICAgICAgICAgPHNlbGVjdCBpZD0idXNlckxpc3QiIHNpemU9IjEwIiBvbmNoYW5nZT0ib25NZW1iZXJTZWxlY3RlZCgpIiBzdHlsZT0id2lkdGg6NDAwcHgiPjwvc2VsZWN0PgogICAgICAgIDwvZGl2PgogICAgIDwvZGl2PiAgICAKICAgICAKQEAgLTU4LDE0ICs1Miw1NiBAQAogICAgIDwvZGl2PiAgCiAgICAgICAgICAKICAgICA8YnIgLz4gICAgICAKLSAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnaW52aXRlTWVtYmVyLmJ1dHRvbi5zYXZlJyl9IiAvPgotICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLmNhbmNlbCcpfSIgYWN0aW9uPSJpbnZpdGUhY2FuY2VsIiAvPgorICAgIDxzOnN1Ym1pdCBpZD0iaW52aXRlQnV0dG9uIiB2YWx1ZT0iJXtnZXRUZXh0KCdpbnZpdGVNZW1iZXIuYnV0dG9uLnNhdmUnKX0iICBjc3NDbGFzcz0iYnRuIGJ0bi1kZWZhdWx0Ii8+CisgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMuY2FuY2VsJyl9IiBhY3Rpb249Imludml0ZSFjYW5jZWwiIGNzc0NsYXNzPSJidG4iLz4KIAogPC9zOmZvcm0+CiAKLTwlLS0gdGhpcyBmb3JjZXMgZm9jdXMgdG8gdGhlIHVzZXJOYW1lIGZpZWxkIC0tJT4KIDxzY3JpcHQ+Ci08IS0tCi1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndXNlck5hbWUnKS5mb2N1cygpOwotLy8gLS0+CisKKyAgICA8JUAgaW5jbHVkZSBmaWxlPSIvcm9sbGVyLXVpL3NjcmlwdHMvYWpheC11c2VyLmpzIiAlPgorCisgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24gKCkgeworICAgICAgICAkKCcjdXNlck5hbWUnKS5mb2N1cygpOworICAgICAgICAkKCcjaW52aXRlQnV0dG9uJykuYXR0cigiZGlzYWJsZWQiLCB0cnVlKTsKKyAgICB9KTsKKworICAgIGZ1bmN0aW9uIG9uTWVtYmVyTmFtZUNoYW5nZShlbmFibGVkKSB7CisgICAgICAgIHUgPSB1c2VyVVJMOworICAgICAgICBpZiAoZW5hYmxlZCAhPSBudWxsKSB7CisgICAgICAgICAgICB1ID0gdSArICImZW5hYmxlZD0iICsgZW5hYmxlZDsKKyAgICAgICAgfQorCisgICAgICAgIHVzZXJOYW1lID0gJCgnI3VzZXJOYW1lJykudmFsKCk7CisgICAgICAgIGlmICh1c2VyTmFtZS5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICB1ID0gdSArICImc3RhcnRzV2l0aD0iICsgdXNlck5hbWU7CisgICAgICAgIH0KKworICAgICAgICBzZW5kVXNlclJlcXVlc3QodSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gb25NZW1iZXJTZWxlY3RlZCgpIHsKKyAgICAgICAgdXNlck5hbWUgPSAkKCcjdXNlckxpc3QnKS5jaGlsZHJlbigib3B0aW9uOnNlbGVjdGVkIikudmFsKCk7CisgICAgICAgIGlmICh1c2VyTmFtZSAhPT0gJycpIHsKKyAgICAgICAgICAgICQoJyNpbnZpdGVCdXR0b24nKS5hdHRyKCJkaXNhYmxlZCIsIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIG9uTWVtYmVyTmFtZUZvY3VzKGVuYWJsZWQpIHsKKyAgICAgICAgaWYgKCFpbml0KSB7CisgICAgICAgICAgICBpbml0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHUgPSB1c2VyVVJMOworCisgICAgICAgICAgICBpZiAoZW5hYmxlZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgdSA9IHUgKyAiJmVuYWJsZWQ9IiArIGVuYWJsZWQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNlbmRVc2VyUmVxdWVzdCh1KTsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCgnI2ludml0ZUJ1dHRvbicpLmF0dHIoImRpc2FibGVkIiwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorCisKIDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL01lbWJlcnNTaWRlYmFyLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9NZW1iZXJzU2lkZWJhci5qc3AKaW5kZXggNGUzNjg3My4uNzMxM2VlYSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL01lbWJlcnNTaWRlYmFyLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvTWVtYmVyc1NpZGViYXIuanNwCkBAIC0xNyw1MCArMTcsMTkgQEAKIC0tJT4KIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KIAotPGRpdiBjbGFzcz0ic2lkZWJhckZhZGUiPgotICAgIDxkaXYgY2xhc3M9Im1lbnUtdHIiPgotICAgICAgICA8ZGl2IGNsYXNzPSJtZW51LXRsIj4KLSAgICAgICAgICAgIAotICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFySW5uZXIiPgorPGgzPjxzOnRleHQgbmFtZT0ibWFpblBhZ2UuYWN0aW9ucyIgLz48L2gzPgorPGhyIHNpemU9IjEiIG5vc2hhZGU9Im5vc2hhZGUiIC8+CiAKLSAgICAgICAgICAgIDxoMz48czp0ZXh0IG5hbWU9Im1haW5QYWdlLmFjdGlvbnMiIC8+PC9oMz4gICAgICAgICAgICAKLSAgICAgICAgICAgIDxociBzaXplPSIxIiBub3NoYWRlPSJub3NoYWRlIiAvPgotICAgICAgICAgICAgCi0gICAgICAgICAgICA8aW1nIHNyYz0nPHM6dXJsIHZhbHVlPSIvaW1hZ2VzL2VtYWlsX2VkaXQucG5nIi8+JyBhbHQ9Im1haWwtaWNvbiIgYWxpZ249ImJvdHRvbSIgLz4KLSAgICAgICAgICAgIDxzOnVybCBhY3Rpb249Imludml0ZSIgdmFyPSJpbnZpdGVVcmwiPgotICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iJXthY3Rpb25XZWJsb2cuaGFuZGxlfSIgLz4KLSAgICAgICAgICAgIDwvczp1cmw+Ci0gICAgICAgICAgICA8YSBocmVmPSc8czpwcm9wZXJ0eSB2YWx1ZT0iI2ludml0ZVVybCIgLz4nPgotICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibWVtYmVyUGVybWlzc2lvbnMuaW52aXRlTWVtYmVyIiAvPgotICAgICAgICAgICAgPC9hPgotICAgICAgICAgICAgPGJyIC8+Ci0gICAgICAgICAgICA8czp0ZXh0IG5hbWU9Im1lbWJlclBlcm1pc3Npb25zLndoeUludml0ZSIgLz4gICAgICAgCi0gICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgIDxiciAvPgotICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgCQkJCQkKLSAgICAgICAgPC9kaXY+Ci0gICAgPC9kaXY+Ci08L2Rpdj4JCis8c3BhbiBjbGFzcz0iZ2x5cGhpY29uIGdseXBoaWNvbi1wbHVzIj48L3NwYW4+Cis8czp1cmwgYWN0aW9uPSJpbnZpdGUiIHZhcj0iaW52aXRlVXJsIj4KKyAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+Cis8L3M6dXJsPgorPGEgaHJlZj0nPHM6cHJvcGVydHkgdmFsdWU9IiNpbnZpdGVVcmwiIC8+Jz4KKyAgICA8czp0ZXh0IG5hbWU9Im1lbWJlclBlcm1pc3Npb25zLmludml0ZU1lbWJlciIgLz4KKzwvYT4KKzxzOnRleHQgbmFtZT0ibWVtYmVyUGVybWlzc2lvbnMud2h5SW52aXRlIiAvPgogCi08YnIgLz4KLTxiciAvPgorPGgzPiA8czp0ZXh0IG5hbWU9Im1lbWJlclBlcm1pc3Npb25zLnBlcm1pc3Npb25zSGVscFRpdGxlIiAvPiA8L2gzPgorPGhyIHNpemU9IjEiIG5vc2hhZGU9Im5vc2hhZGUiIC8+CiAKLTxkaXYgY2xhc3M9InNpZGViYXJGYWRlIj4KLSAgICA8ZGl2IGNsYXNzPSJtZW51LXRyIj4KLSAgICAgICAgPGRpdiBjbGFzcz0ibWVudS10bCI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyQm9keSI+Ci0gICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFySW5uZXIiPgotICAgICAgICAgICAgCi0gICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJtZW1iZXJQZXJtaXNzaW9ucy5wZXJtaXNzaW9uc0hlbHBUaXRsZSIgLz4KLSAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICA8aHIgc2l6ZT0iMSIgbm9zaGFkZT0ibm9zaGFkZSIgLz4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJtZW1iZXJQZXJtaXNzaW9ucy5wZXJtaXNzaW9uSGVscCIgLz4JCi0JCSAgICA8YnIgLz4KLQkJICAgIDxiciAvPgotICAgICAgICA8L2Rpdj4JCSAgICAKLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICA8L2Rpdj4KLTwvZGl2PgkKKzxzOnRleHQgbmFtZT0ibWVtYmVyUGVybWlzc2lvbnMucGVybWlzc2lvbkhlbHAiIC8+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvUGluZ3MuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL1BpbmdzLmpzcAppbmRleCAwZGQ2OTk0Li5mYTkwZDZhIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvUGluZ3MuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9QaW5ncy5qc3AKQEAgLTIyLDE5ICsyMiwxNCBAQAogICAgICAgIDxzOnBhcmFtIHZhbHVlPSJhY3Rpb25XZWJsb2cuaGFuZGxlIiAvPgogICAgPC9zOnRleHQ+CiA8L3A+ICAKLTxwIGNsYXNzPSJwYWdldGlwIj4KLSAgICA8czp0ZXh0IG5hbWU9InBpbmdzLmV4cGxhbmF0aW9uIi8+Ci08cC8+Cis8cCBjbGFzcz0icGFnZXRpcCI+IDxzOnRleHQgbmFtZT0icGluZ3MuZXhwbGFuYXRpb24iLz4gPC9wPgogCi08cC8+Ci08aDI+PHM6dGV4dCBuYW1lPSJwaW5ncy5jb21tb25QaW5nVGFyZ2V0cyIvPjwvaDI+Ci08cC8+Cis8cD4gPGgyPjxzOnRleHQgbmFtZT0icGluZ3MuY29tbW9uUGluZ1RhcmdldHMiLz48L2gyPiA8L3A+CiAKLTxwLz4KLTxzOnRleHQgbmFtZT0icGluZ3MuY29tbW9uUGluZ1RhcmdldHNFeHBsYW5hdGlvbiIvPgotPHAvPgorPHA+IDxzOnRleHQgbmFtZT0icGluZ3MuY29tbW9uUGluZ1RhcmdldHNFeHBsYW5hdGlvbiIvPiA8L3A+CiAKLTx0YWJsZSBjbGFzcz0icm9sbGVydGFibGUiPgorCis8dGFibGUgY2xhc3M9InJvbGxlcnRhYmxlIHRhYmxlIHRhYmxlLXN0cmlwZWQiPgogPCUtLSBIZWFkaW5ncyAtLSU+CiA8dHIgY2xhc3M9InJvbGxlcnRhYmxlIj4KICAgICA8dGggY2xhc3M9InJvbGxlcnRhYmxlIiB3aWR0aD0iMjAlIj48czp0ZXh0IG5hbWU9ImdlbmVyaWMubmFtZSIgLz48L3RoPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL1N0eWxlc2hlZXRFZGl0LmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9TdHlsZXNoZWV0RWRpdC5qc3AKaW5kZXggY2Q3NzFmNi4uYzNiOTBjZiAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL1N0eWxlc2hlZXRFZGl0LmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvU3R5bGVzaGVldEVkaXQuanNwCkBAIC0xNiw5OSArMTYsMTExIEBACiAgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KIC0tJT4KIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgaHJlZj0nPHM6dXJsIHZhbHVlPSIvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvanF1ZXJ5LXVpLm1pbi5jc3MiLz4nIC8+CiAKIDxwIGNsYXNzPSJzdWJ0aXRsZSI+PHM6dGV4dCBuYW1lPSJzdHlsZXNoZWV0RWRpdC5zdWJ0aXRsZSIgLz48L3A+CiAKLTxzOmlmIHRlc3Q9InRlbXBsYXRlID09IG51bGwiPgotICAgIDxkaXYgY2xhc3M9Im5vdGlmaWNhdGlvbiI+Ci0gICAgICAgIDxzOmlmIHRlc3Q9InNoYXJlZFN0eWxlc2hlZXREZWxldGVkIj4KLSAgICAgICAgICAgIDwlLS0gY2xpY2tpbmcgdGhlIHN0eWxlc2hlZXQgdGFiIHdpbGwgcmVjcmVhdGUgeW91ciBjdXN0b20gb3ZlcnJpZGUgc3R5bGVzaGVldCAuLi4gLS0lPgotICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJzdHlsZXNoZWV0RWRpdC5jYW5SZWNyZWF0ZVN0eWxlc2hlZXRPdmVycmlkZSIgLz4KLSAgICAgICAgPC9zOmlmPgotICAgICAgICA8czplbHNlPgotICAgICAgICAgICAgPCUtLSBzaGFyZWQgdGhlbWUgZG9lcyBub3Qgb2ZmZXIgYSBzdHlsZXNoZWV0IC4uLiAtLSU+Ci0gICAgICAgICAgICA8czp0ZXh0IG5hbWU9InN0eWxlc2hlZXRFZGl0Lm5vT3ZlcnJpZGFibGVTdHlsZXNoZWV0QXZhaWxhYmxlIiAvPgotICAgICAgICA8L3M6ZWxzZT4KLSAgICA8L2Rpdj4KLTwvczppZj4KLTxzOmVsc2U+Ci0gICAgPHAgY2xhc3M9InBhZ2V0aXAiPgotICAgICAgICA8czp0ZXh0IG5hbWU9InN0eWxlc2hlZXRFZGl0LnRpcCIgLz4KLSAgICAgICAgPHM6aWYgdGVzdD0iIWN1c3RvbVRoZW1lIj4KLSAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ic3R5bGVzaGVldEVkaXQucmV2ZXJ0VGlwIiAvPgotICAgICAgICAgICAgPHM6aWYgdGVzdD0ic2hhcmVkVGhlbWVDdXN0b21TdHlsZXNoZWV0Ij4KLSAgICAgICAgICAgICAgICA8YnIgLz48YnIgLz48czp0ZXh0IG5hbWU9InN0eWxlc2hlZXRFZGl0LnJldmVydFRpcDEiIC8+Ci0gICAgICAgICAgICA8L3M6aWY+Ci0gICAgICAgIDwvczppZj4KLSAgICA8L3A+CiAKLSAgICA8czpmb3JtIGFjdGlvbj0ic3R5bGVzaGVldEVkaXQhc2F2ZSI+Cis8czppZiB0ZXN0PSJ0ZW1wbGF0ZSAhPSBudWxsIj4KKworICAgIDxzOnRleHQgbmFtZT0ic3R5bGVzaGVldEVkaXQueW91Q2FuQ3VzdG9taXplIiAvPgorCisgICAgPHM6Zm9ybSBhY3Rpb249InN0eWxlc2hlZXRFZGl0IXNhdmUiIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLXZlcnRpY2FsIj4KICAgICAgICAgPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+CiAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciIC8+CiAKLSAgICAgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgogICAgICAgICA8JS0tIFRhYnMgZm9yIGVhY2ggb2YgdGhlIHR3byBjb250ZW50IGFyZWFzOiBTdGFuZGFyZCBhbmQgTW9iaWxlIC0tJT4KKyAgICAgICAgPHVsIGlkPSJ0ZW1wbGF0ZS1jb2RlLXRhYnMiIGNsYXNzPSJuYXYgbmF2LXRhYnMiIHJvbGU9InRhYmxpc3QiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxZW0iPgogCi0gICAgICAgIDxkaXYgaWQ9InRlbXBsYXRlLWNvZGUtdGFicyI+Ci0gICAgICAgIDx1bD4KLSAgICAgICAgICAgIDxsaSBjbGFzcz0ic2VsZWN0ZWQiPjxhIGhyZWY9IiN0YWJTdGFuZGFyZCI+PGVtPlN0YW5kYXJkPC9lbT48L2E+PC9saT4KKyAgICAgICAgICAgIDxsaSByb2xlPSJwcmVzZW50YXRpb24iIGNsYXNzPSJhY3RpdmUiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiN0YWJTdGFuZGFyZCIgYXJpYS1jb250cm9scz0iaG9tZSIgcm9sZT0idGFiIiBkYXRhLXRvZ2dsZT0idGFiIj4KKyAgICAgICAgICAgICAgICAgICAgPGVtPjxzOnRleHQgbmFtZT0ic3R5bGVzaGVldEVkaXQuc3RhbmRhcmQiLz48L2VtPgorICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgIDwvbGk+CisKICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImNvbnRlbnRzTW9iaWxlICE9IG51bGwiPgotICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjdGFiTW9iaWxlIj48ZW0+TW9iaWxlPC9lbT48L2E+PC9saT4KKyAgICAgICAgICAgICAgICA8bGkgcm9sZT0icHJlc2VudGF0aW9uIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3RhYk1vYmlsZSIgYXJpYS1jb250cm9scz0iaG9tZSIgcm9sZT0idGFiIiBkYXRhLXRvZ2dsZT0idGFiIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbT48czp0ZXh0IG5hbWU9InN0eWxlc2hlZXRFZGl0Lm1vYmlsZSIvPjwvZW0+CisgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgPC9zOmlmPgorCiAgICAgICAgIDwvdWw+Ci0gICAgICAgIDxkaXY+Ci0gICAgICAgICAgICA8ZGl2IGlkPSJ0YWJTdGFuZGFyZCI+CisKKyAgICAgICAgPCUtLSBUYWIgY29udGVudCBmb3IgZWFjaCBvZiB0aGUgdHdvIGNvbnRlbnQgYXJlYXM6IFN0YW5kYXJkIGFuZCBNb2JpbGUgLS0lPgorICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CisKKyAgICAgICAgICAgIDxkaXYgcm9sZT0idGFicGFuZWwiIGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiIGlkPSJ0YWJTdGFuZGFyZCI+CiAgICAgICAgICAgICAgICAgPHM6dGV4dGFyZWEgbmFtZT0iY29udGVudHNTdGFuZGFyZCIgY29scz0iODAiIHJvd3M9IjMwIiBjc3NTdHlsZT0id2lkdGg6MTAwJSIgLz4KICAgICAgICAgICAgIDwvZGl2PgorCiAgICAgICAgICAgICA8czppZiB0ZXN0PSJjb250ZW50c01vYmlsZSAhPSBudWxsIj4KLSAgICAgICAgICAgICAgICA8ZGl2IGlkPSJ0YWJNb2JpbGUiPgorICAgICAgICAgICAgICAgIDxkaXYgcm9sZT0idGFicGFuZWwiIGNsYXNzPSJ0YWItcGFuZSIgaWQ9InRhYk1vYmlsZSI+CiAgICAgICAgICAgICAgICAgICAgIDxzOnRleHRhcmVhIG5hbWU9ImNvbnRlbnRzTW9iaWxlIiBjb2xzPSI4MCIgcm93cz0iMzAiIGNzc1N0eWxlPSJ3aWR0aDoxMDAlIiAvPgogICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICA8L2Rpdj4KKwogICAgICAgICA8L2Rpdj4KIAotICAgICAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CiAgICAgICAgIDwlLS0gU2F2ZSwgQ2xvc2UgYW5kIFJlc2l6ZSB0ZXh0IGFyZWEgYnV0dG9ucy0tJT4KKyAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMuc2F2ZScpfSIgY3NzQ2xhc3M9ImJ0biBidG4tc3VjY2VzcyIgLz4KIAotICAgICAgICA8dGFibGUgc3R5bGU9IndpZHRoOjEwMCUiPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ2dlbmVyaWMuc2F2ZScpfSIgLz4mbmJzcDsmbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iIWN1c3RvbVRoZW1lIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdzdHlsZXNoZWV0RWRpdC5yZXZlcnQnKX0iIG9uY2xpY2s9InJldmVydFN0eWxlc2hlZXQoKTtyZXR1cm4gZmFsc2U7IiAvPgotICAgICAgICAgICAgICAgICAgICA8L3M6aWY+Ci0gICAgICAgICAgICAgICAgICAgIDwlLS0gT25seSBkZWxldGUgaWYgd2UgaGF2ZSBubyBjdXN0b20gdGVtcGxhdGVzIGllIHdlYnNpdGUuY3VzdG9tU3R5bGVzaGVldFBhdGg9bnVsbCAtLSU+Ci0gICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9InNoYXJlZFRoZW1lQ3VzdG9tU3R5bGVzaGVldCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnc3R5bGVzaGVldEVkaXQuZGVsZXRlJyl9IiBvbmNsaWNrPSJkZWxldGVTdHlsZXNoZWV0KCk7cmV0dXJuIGZhbHNlOyIgLz4KLSAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8L3RyPgotICAgICAgICA8L3RhYmxlPgorICAgICAgICA8czppZiB0ZXN0PSIhY3VzdG9tVGhlbWUiPgorICAgICAgICAgICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ3N0eWxlc2hlZXRFZGl0LnJldmVydCcpfSIgY3NzQ2xhc3M9ImJ0biIKKyAgICAgICAgICAgICAgICBvbmNsaWNrPSJyZXZlcnRTdHlsZXNoZWV0KCk7cmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwPSIle2dldFRleHQoJ3N0eWxlc2hlZXRFZGl0LnJldmVydFRpcCcpfSIgLz4KKyAgICAgICAgPC9zOmlmPgorCisgICAgICAgIDwlLS0gT25seSBkZWxldGUgaWYgd2UgaGF2ZSBubyBjdXN0b20gdGVtcGxhdGVzIGllIHdlYnNpdGUuY3VzdG9tU3R5bGVzaGVldFBhdGg9bnVsbCAtLSU+CisgICAgICAgIDxzOmlmIHRlc3Q9InNoYXJlZFRoZW1lU3R5bGVzaGVldCI+CisgICAgICAgICAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnc3R5bGVzaGVldEVkaXQuZGVsZXRlJyl9IiAgY3NzQ2xhc3M9ImJ0biBidG4tZGFuZ2VyIgorICAgICAgICAgICAgICAgIG9uY2xpY2s9ImRlbGV0ZVN0eWxlc2hlZXQoKTtyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXA9IiV7Z2V0VGV4dCgnc3R5bGVzaGVldEVkaXQuZGVsZXRlVGlwJyl9IiAvPgorICAgICAgICA8L3M6aWY+CiAKICAgICA8L3M6Zm9ybT4KIAotICAgIDxzY3JpcHQgc3JjPSI8czp1cmwgdmFsdWU9Jy9yb2xsZXItdWkvc2NyaXB0cy9qcXVlcnktMi4xLjEubWluLmpzJz48L3M6dXJsPiI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9IjxzOnVybCB2YWx1ZT0nL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2pxdWVyeS11aS5taW4uanMnPjwvczp1cmw+Ij48L3NjcmlwdD4KKzwvczppZj4KKzxzOmVsc2VpZiB0ZXN0PSJzaGFyZWRUaGVtZSI+CiAKLSAgICA8c2NyaXB0PgotICAgICAgICBmdW5jdGlvbiByZXZlcnRTdHlsZXNoZWV0KCkgewotICAgICAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKCc8czp0ZXh0IG5hbWU9InN0eWxlc2hlZXRFZGl0LmNvbmZpcm1SZXZlcnQiLz4nKSkgewotICAgICAgICAgICAgICAgIGRvY3VtZW50LnN0eWxlc2hlZXRFZGl0LmFjdGlvbiA9ICI8czp1cmwgYWN0aW9uPSdzdHlsZXNoZWV0RWRpdCFyZXZlcnQnIC8+IjsKKyAgICA8czppZiB0ZXN0PSJzaGFyZWRUaGVtZVN0eWxlc2hlZXQiPgorCisgICAgICAgIDxzOnRleHQgbmFtZT0ic3R5bGVzaGVldEVkaXQuc2hhcmVkVGhlbWVXaXRoU3R5bGVzaGVldCIgLz4KKworICAgICAgICA8czpmb3JtIGFjdGlvbj0ic3R5bGVzaGVldEVkaXQhY29weVN0eWxlc2hlZXQiIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLXZlcnRpY2FsIj4KKyAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgorICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgLz4KKyAgICAgICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdzdHlsZXNoZWV0RWRpdC5jb3B5U3R5bGVzaGVldCcpfSIgY3NzQ2xhc3M9ImJ0biBidG4tc3VjY2VzcyIKKyAgICAgICAgICAgICAgICB0b29sdGlwPSIle2dldFRleHQoJ3N0eWxlc2hlZXRFZGl0LmNyZWF0ZVN0eWxlc2hlZXRUaXAnKX0iIC8+CisgICAgICAgIDwvczpmb3JtPgorCisgICAgPC9zOmlmPgorICAgIDxzOmVsc2U+CisgICAgICAgIDxwPjxzOnRleHQgbmFtZT0ic3R5bGVzaGVldEVkaXQuc2hhcmVkVGhlbWVOb1N0eWxlc2hlZXRTdXBwb3J0IiAvPjwvcD4KKyAgICA8L3M6ZWxzZT4KKworPC9zOmVsc2VpZj4KKzxzOmVsc2U+CisgICAgPHM6dGV4dCBuYW1lPSJzdHlsZXNoZWV0RWRpdC5jdXN0b21UaGVtZU5vU3R5bGVzaGVldCIgLz4KKzwvczplbHNlPgorCisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKworICAgIGZ1bmN0aW9uIHJldmVydFN0eWxlc2hlZXQoKSB7CisgICAgICAgIGlmICh3aW5kb3cuY29uZmlybSgnPHM6dGV4dCBuYW1lPSJzdHlsZXNoZWV0RWRpdC5jb25maXJtUmV2ZXJ0Ii8+JykpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LnN0eWxlc2hlZXRFZGl0LmFjdGlvbiA9ICI8czp1cmwgYWN0aW9uPSdzdHlsZXNoZWV0RWRpdCFyZXZlcnQnIC8+IjsKKyAgICAgICAgICAgIGRvY3VtZW50LnN0eWxlc2hlZXRFZGl0LnN1Ym1pdCgpOworICAgICAgICB9CisgICAgfTsKKyAgICA8czppZiB0ZXN0PSIle3NoYXJlZFRoZW1lU3R5bGVzaGVldH0iPgorICAgICAgICBmdW5jdGlvbiBkZWxldGVTdHlsZXNoZWV0KCkgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKCc8czp0ZXh0IG5hbWU9InN0eWxlc2hlZXRFZGl0LmNvbmZpcm1EZWxldGUiLz4nKSkgeworICAgICAgICAgICAgICAgIGRvY3VtZW50LnN0eWxlc2hlZXRFZGl0LmFjdGlvbiA9ICI8czp1cmwgYWN0aW9uPSdzdHlsZXNoZWV0RWRpdCFkZWxldGUnIC8+IjsKICAgICAgICAgICAgICAgICBkb2N1bWVudC5zdHlsZXNoZWV0RWRpdC5zdWJtaXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKLSAgICAgICAgPHM6aWYgdGVzdD0iJXtzaGFyZWRUaGVtZUN1c3RvbVN0eWxlc2hlZXR9Ij4KLSAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZVN0eWxlc2hlZXQoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKCc8czp0ZXh0IG5hbWU9InN0eWxlc2hlZXRFZGl0LmNvbmZpcm1EZWxldGUiLz4nKSkgewotICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5zdHlsZXNoZWV0RWRpdC5hY3Rpb24gPSAiPHM6dXJsIGFjdGlvbj0nc3R5bGVzaGVldEVkaXQhZGVsZXRlJyAvPiI7Ci0gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnN0eWxlc2hlZXRFZGl0LnN1Ym1pdCgpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH07Ci0gICAgICAgIDwvczppZj4KLSAgICAgICAgJChmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICQoICIjdGVtcGxhdGUtY29kZS10YWJzIiApLnRhYnMoKTsKLSAgICAgICAgfSk7Ci0gICAgPC9zY3JpcHQ+Ci08L3M6ZWxzZT4KKyAgICA8L3M6aWY+CisKKzwvc2NyaXB0PgorCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvVGVtcGxhdGVFZGl0LmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9UZW1wbGF0ZUVkaXQuanNwCmluZGV4IGEwNzQ5NWEuLjRiNzM4ZDMgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9UZW1wbGF0ZUVkaXQuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9UZW1wbGF0ZUVkaXQuanNwCkBAIC0xNiwyNTkgKzE2LDIxMiBAQAogICBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCiAtLSU+CiA8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIGhyZWY9JzxzOnVybCB2YWx1ZT0iL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2pxdWVyeS11aS5taW4uY3NzIi8+JyAvPgogCiA8cCBjbGFzcz0ic3VidGl0bGUiPgotICAgPHM6dGV4dCBuYW1lPSJwYWdlRm9ybS5zdWJ0aXRsZSIgPgotICAgICAgIDxzOnBhcmFtIHZhbHVlPSJiZWFuLm5hbWUiIC8+Ci0gICAgICAgPHM6cGFyYW0gdmFsdWU9ImFjdGlvbldlYmxvZy5oYW5kbGUiIC8+Ci0gICA8L3M6dGV4dD4KKyAgICA8czp0ZXh0IG5hbWU9InBhZ2VGb3JtLnN1YnRpdGxlIj4KKyAgICAgICAgPHM6cGFyYW0gdmFsdWU9ImJlYW4ubmFtZSIvPgorICAgICAgICA8czpwYXJhbSB2YWx1ZT0iYWN0aW9uV2VibG9nLmhhbmRsZSIvPgorICAgIDwvczp0ZXh0PgogPC9wPgogCiA8czppZiB0ZXN0PSJ0ZW1wbGF0ZS5yZXF1aXJlZCI+Ci0gICAgPHAgY2xhc3M9InBhZ2V0aXAiPjxzOnRleHQgbmFtZT0icGFnZUZvcm0udGlwLnJlcXVpcmVkIiAvPjwvcD4KKyAgICA8cCBjbGFzcz0icGFnZXRpcCI+PHM6dGV4dCBuYW1lPSJwYWdlRm9ybS50aXAucmVxdWlyZWQiLz48L3A+CiA8L3M6aWY+CiA8czplbHNlPgotICAgIDxwIGNsYXNzPSJwYWdldGlwIj48czp0ZXh0IG5hbWU9InBhZ2VGb3JtLnRpcCIgLz48L3A+CisgICAgPHAgY2xhc3M9InBhZ2V0aXAiPjxzOnRleHQgbmFtZT0icGFnZUZvcm0udGlwIi8+PC9wPgogPC9zOmVsc2U+Ci0gICAgICAgICAgICAgICAgCi08czpmb3JtIGFjdGlvbj0idGVtcGxhdGVFZGl0IXNhdmUiIGlkPSJ0ZW1wbGF0ZSI+Ci0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgLz4KKworPHM6Zm9ybSBhY3Rpb249InRlbXBsYXRlRWRpdCFzYXZlIiBpZD0idGVtcGxhdGUiIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLXZlcnRpY2FsIj4KKyAgICA8czpoaWRkZW4gbmFtZT0ic2FsdCIvPgorICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciLz4KICAgICA8czpoaWRkZW4gbmFtZT0iYmVhbi5pZCIvPgotICAgIDxzOmhpZGRlbiBuYW1lID0iYmVhbi50eXBlIi8+Ci0gICAgCisgICAgPHM6aGlkZGVuIG5hbWU9ImJlYW4udHlwZSIvPgorCiAgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgogICAgIDwlLS0gTmFtZSwgbGluayBhbmQgZGVzY3JpcHRpb246IGRpc2FibGVkIHdoZW4gcGFnZSBpcyBhIHJlcXVpcmVkIHBhZ2UgLS0lPgotICAgIAotICAgIDx0YWJsZSBjZWxsc3BhY2luZz0iNSI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5uYW1lIiAvPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj4KLSAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJ0ZW1wbGF0ZS5yZXF1aXJlZCB8fCBiZWFuLm1vYmlsZSI+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLm5hbWUiIHNpemU9IjUwIiByZWFkb25seT0idHJ1ZSIgY3NzU3R5bGU9ImJhY2tncm91bmQ6ICNlNWU1ZTUiIC8+Ci0gICAgICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgICAgIDxzOmVsc2U+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLm5hbWUiIHNpemU9IjUwIi8+Ci0gICAgICAgICAgICAgICAgPC9zOmVsc2U+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+PC90ZD4KLSAgICAgICAgPC90cj4KLSAgICAgICAgCi0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxzOnRleHQgbmFtZT0icGFnZUZvcm0uYWN0aW9uIiAvPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj4KLSAgICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uYWN0aW9uIiBzaXplPSI1MCIgcmVhZG9ubHk9InRydWUiIGNzc1N0eWxlPSJiYWNrZ3JvdW5kOiAjZTVlNWU1IiAvPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICAgIAotICAgICAgIDxzOmlmIHRlc3Q9IiF0ZW1wbGF0ZS5yZXF1aXJlZCAmJiB0ZW1wbGF0ZS5jdXN0b20iPgotICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiIHZhbGlnbj0idG9wIj48czp0ZXh0IG5hbWU9InBhZ2VGb3JtLmxpbmsiIC8+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj4KLSAgICAgICAgICAgICAgICAgICAgPHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4ubGluayIgc2l6ZT0iNTAiIG9ua2V5dXA9InVwZGF0ZVBhZ2VVUkxEaXNwbGF5KCkiIC8+Ci0gICAgICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iYWN0aW9uV2VibG9nLmFic29sdXRlVVJMIiAvPnBhZ2UvPHNwYW4gaWQ9ImxpbmtQcmV2aWV3IiBzdHlsZT0iY29sb3I6cmVkIj48czpwcm9wZXJ0eSB2YWx1ZT0iYmVhbi5saW5rIiAvPjwvc3Bhbj4KLSAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0idGVtcGxhdGUubGluayAhPSBudWxsIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIFs8YSBpZD0ibGF1bmNoTGluayIgb25DbGljaz0ibGF1bmNoUGFnZSgpIj48czp0ZXh0IG5hbWU9InBhZ2VGb3JtLmxhdW5jaCIgLz48L2E+XQotICAgICAgICAgICAgICAgICAgICA8L3M6aWY+Ci0gICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48L3RkPgotICAgICAgICAgICAgPC90cj4KLSAgICAgICAgPC9zOmlmPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIiB2YWxpZ249InRvcCIgc3R5bGU9InBhZGRpbmctdG9wOiA0cHgiPgotICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iZ2VuZXJpYy5kZXNjcmlwdGlvbiIgLz4mbmJzcDs8L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+Ci0gICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0idGVtcGxhdGUucmVxdWlyZWQiPgotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0YXJlYSBuYW1lPSJiZWFuLmRlc2NyaXB0aW9uIiBjb2xzPSI1MCIgcm93cz0iMiIgCi0gICAgICAgICAgICAgICAgICAgICAgICByZWFkb25seT0idHJ1ZSIgY3NzU3R5bGU9ImJhY2tncm91bmQ6ICNlNWU1ZTUiIC8+Ci0gICAgICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgICAgIDxzOmVsc2U+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHRhcmVhIG5hbWU9ImJlYW4uZGVzY3JpcHRpb24iIGNvbHM9IjUwIiByb3dzPSIyIiAvPgotICAgICAgICAgICAgICAgIDwvczplbHNlPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjwvdGQ+Ci0gICAgICAgIDwvdHI+Ci0gICAgICAgIAotICAgIDwvdGFibGU+CisKKyAgICA8czppZiB0ZXN0PSJ0ZW1wbGF0ZS5yZXF1aXJlZCB8fCBiZWFuLm1vYmlsZSI+CisgICAgICAgIDwlLS0gQ2Fubm90IGVkaXQgbmFtZSBvZiBhIHJlcWlyZWQgdGVtcGxhdGUgLS0lPgorICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5uYW1lIgorICAgICAgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5uYW1lJyl9IiBzaXplPSI1MCIgcmVhZG9ubHk9InRydWUiIGNzc1N0eWxlPSJiYWNrZ3JvdW5kOiAjZTVlNWU1Ii8+CisgICAgPC9zOmlmPgorICAgIDxzOmVsc2U+CisgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLm5hbWUiCisgICAgICAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCdnZW5lcmljLm5hbWUnKX0iIHNpemU9IjUwIi8+CisgICAgPC9zOmVsc2U+CisKKyAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5hY3Rpb24iIGxhYmVsPSIle2dldFRleHQoJ3BhZ2VGb3JtLmFjdGlvbicpfSIgc2l6ZT0iNTAiCisgICAgICAgICAgICAgICAgIHJlYWRvbmx5PSJ0cnVlIiBjc3NTdHlsZT0iYmFja2dyb3VuZDogI2U1ZTVlNSIvPgorCisgICAgPHM6aWYgdGVzdD0iIXRlbXBsYXRlLnJlcXVpcmVkICYmIHRlbXBsYXRlLmN1c3RvbSI+CisKKyAgICAgICAgPCUtLSBhbGxvdyBzZXR0aW5nIHRoZSBwYXRoIGZvciBhIGN1c3RvbSB0ZW1wbGF0ZSAtLSU+CisgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLmxpbmsiCisgICAgICAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCdwYWdlRm9ybS5saW5rJyl9IiBzaXplPSI1MCIgb25rZXl1cD0idXBkYXRlUGFnZVVSTERpc3BsYXkoKSIvPgorCisgICAgICAgIDwlLS0gc2hvdyBwcmV2aWV3IG9mIHRoZSBmdWxsIFVSTCB0aGF0IHdpbGwgcmVzdWx0IGZyb20gdGhhdCBwYXRoIC0tJT4KKworICAgICAgICA8ZGl2IGlkPSJub19saW5rIiBjbGFzcz0iYWxlcnQtZGFuZ2VyIiBzdHlsZT0iZGlzcGxheTogbm9uZTsgbWFyZ2luLXRvcDozZW07IG1hcmdpbi1ib3R0b206MmVtOyBwYWRkaW5nOiAxZW0iPgorICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJwYWdlRm9ybS5ub1VybCIvPgorICAgICAgICA8L2Rpdj4KKworICAgICAgICA8ZGl2IGlkPSJnb29kX2xpbmsiIGNsYXNzPSJhbGVydC1zdWNjZXNzIgorICAgICAgICAgICAgIHN0eWxlPSJkaXNwbGF5OiBub25lOyBtYXJnaW4tdG9wOjNlbTsgbWFyZ2luLWJvdHRvbToyZW07IHBhZGRpbmc6IDFlbSI+CisgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InBhZ2VGb3JtLnJlc3VsdGluZ1VybFdpbGxCZSIvPgorICAgICAgICAgICAgPHM6cHJvcGVydHkgdmFsdWU9ImFjdGlvbldlYmxvZy5hYnNvbHV0ZVVSTCIvPnBhZ2UvCisgICAgICAgICAgICA8c3BhbiBpZD0ibGlua1ByZXZpZXciIHN0eWxlPSJjb2xvcjpyZWQiPjxzOnByb3BlcnR5IHZhbHVlPSJiZWFuLmxpbmsiLz48L3NwYW4+CisgICAgICAgICAgICA8czppZiB0ZXN0PSJ0ZW1wbGF0ZS5saW5rICE9IG51bGwiPgorICAgICAgICAgICAgICAgIFs8YSBpZD0ibGF1bmNoTGluayIgb25DbGljaz0ibGF1bmNoUGFnZSgpIj48czp0ZXh0IG5hbWU9InBhZ2VGb3JtLmxhdW5jaCIvPjwvYT5dCisgICAgICAgICAgICA8L3M6aWY+CisgICAgICAgIDwvZGl2PgorCisgICAgPC9zOmlmPgorCisgICAgPHM6aWYgdGVzdD0idGVtcGxhdGUucmVxdWlyZWQiPgorICAgICAgICA8JS0tIFJlcXVpcmVkIHRlbXBsYXRlcyBoYXZlIGEgZGVzY3JpcHRpb24tLSU+CisgICAgICAgIDxzOnRleHRhcmVhIG5hbWU9ImJlYW4uZGVzY3JpcHRpb24iIGxhYmVsPSIle2dldFRleHQoJ2dlbmVyaWMuZGVzY3JpcHRpb24nKX0iCisgICAgICAgICAgICAgICAgICAgIGNvbHM9IjUwIiByb3dzPSIyIiByZWFkb25seT0idHJ1ZSIgY3NzU3R5bGU9ImJhY2tncm91bmQ6ICNlNWU1ZTUiLz4KKyAgICA8L3M6aWY+CisgICAgPHM6ZWxzZT4KKyAgICAgICAgPHM6dGV4dGFyZWEgbmFtZT0iYmVhbi5kZXNjcmlwdGlvbiIgbGFiZWw9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5kZXNjcmlwdGlvbicpfSIgY29scz0iNTAiIHJvd3M9IjIiLz4KKyAgICA8L3M6ZWxzZT4KIAogICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KLSAgICA8JS0tIFRhYnMgZm9yIGVhY2ggb2YgdGhlIHR3byBjb250ZW50IGFyZWFzOiBTdGFuZGFyZCBhbmQgTW9iaWxlIC0tJT4KIAotICAgIDxkaXYgaWQ9InRlbXBsYXRlLWNvZGUtdGFicyI+Ci0gICAgPHVsPgotICAgICAgICA8bGkgY2xhc3M9InNlbGVjdGVkIj48YSBocmVmPSIjdGFiU3RhbmRhcmQiPjxlbT5TdGFuZGFyZDwvZW0+PC9hPjwvbGk+CisgICAgPCUtLSBUYWJzIGZvciBlYWNoIG9mIHRoZSB0d28gY29udGVudCBhcmVhczogU3RhbmRhcmQgYW5kIE1vYmlsZSAtLSU+CisgICAgPHVsIGlkPSJ0ZW1wbGF0ZS1jb2RlLXRhYnMiIGNsYXNzPSJuYXYgbmF2LXRhYnMiIHJvbGU9InRhYmxpc3QiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAxZW0iPgorCisgICAgICAgIDxsaSByb2xlPSJwcmVzZW50YXRpb24iIGNsYXNzPSJhY3RpdmUiPgorICAgICAgICAgICAgPGEgaHJlZj0iI3RhYlN0YW5kYXJkIiBhcmlhLWNvbnRyb2xzPSJob21lIiByb2xlPSJ0YWIiIGRhdGEtdG9nZ2xlPSJ0YWIiPgorICAgICAgICAgICAgICAgIDxlbT48czp0ZXh0IG5hbWU9InN0eWxlc2hlZXRFZGl0LnN0YW5kYXJkIi8+PC9lbT4KKyAgICAgICAgICAgIDwvYT4KKyAgICAgICAgPC9saT4KKwogICAgICAgICA8czppZiB0ZXN0PSJiZWFuLmNvbnRlbnRzTW9iaWxlICE9IG51bGwiPgotICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiN0YWJNb2JpbGUiPjxlbT5Nb2JpbGU8L2VtPjwvYT48L2xpPgorICAgICAgICAgICAgPGxpIHJvbGU9InByZXNlbnRhdGlvbiI+CisgICAgICAgICAgICAgICAgPGEgaHJlZj0iI3RhYk1vYmlsZSIgYXJpYS1jb250cm9scz0iaG9tZSIgcm9sZT0idGFiIiBkYXRhLXRvZ2dsZT0idGFiIj4KKyAgICAgICAgICAgICAgICAgICAgPGVtPjxzOnRleHQgbmFtZT0ic3R5bGVzaGVldEVkaXQubW9iaWxlIi8+PC9lbT4KKyAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICA8L2xpPgogICAgICAgICA8L3M6aWY+CisKICAgICA8L3VsPgotICAgIDxkaXY+Ci0gICAgICAgIDxkaXYgaWQ9InRhYlN0YW5kYXJkIj4KLSAgICAgICAgICAgIDxzOnRleHRhcmVhIG5hbWU9ImJlYW4uY29udGVudHNTdGFuZGFyZCIgY29scz0iODAiIHJvd3M9IjMwIiBjc3NTdHlsZT0id2lkdGg6MTAwJSIgLz4KKworICAgIDwlLS0gVGFiIGNvbnRlbnQgZm9yIGVhY2ggb2YgdGhlIHR3byBjb250ZW50IGFyZWFzOiBTdGFuZGFyZCBhbmQgTW9iaWxlIC0tJT4KKyAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCI+CisKKyAgICAgICAgPGRpdiByb2xlPSJ0YWJwYW5lbCIgY2xhc3M9InRhYi1wYW5lIGFjdGl2ZSIgaWQ9InRhYlN0YW5kYXJkIj4KKyAgICAgICAgICAgIDxzOnRleHRhcmVhIG5hbWU9ImJlYW4uY29udGVudHNTdGFuZGFyZCIgY29scz0iODAiIHJvd3M9IjMwIiBjc3NTdHlsZT0id2lkdGg6MTAwJSIvPgogICAgICAgICA8L2Rpdj4KKwogICAgICAgICA8czppZiB0ZXN0PSJiZWFuLmNvbnRlbnRzTW9iaWxlICE9IG51bGwiPgotICAgICAgICAgICAgPGRpdiBpZD0idGFiTW9iaWxlIj4KLSAgICAgICAgICAgICAgICA8czp0ZXh0YXJlYSBuYW1lPSJiZWFuLmNvbnRlbnRzTW9iaWxlIiBjb2xzPSI4MCIgcm93cz0iMzAiIGNzc1N0eWxlPSJ3aWR0aDoxMDAlIiAvPgorICAgICAgICAgICAgPGRpdiByb2xlPSJ0YWJwYW5lbCIgY2xhc3M9InRhYi1wYW5lIiBpZD0idGFiTW9iaWxlIj4KKyAgICAgICAgICAgICAgICA8czp0ZXh0YXJlYSBuYW1lPSJiZWFuLmNvbnRlbnRzTW9iaWxlIiBjb2xzPSI4MCIgcm93cz0iMzAiIGNzc1N0eWxlPSJ3aWR0aDoxMDAlIi8+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgPC9zOmlmPgotICAgIDwvZGl2PgorCiAgICAgPC9kaXY+CiAKICAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CiAgICAgPCUtLSBTYXZlLCBDbG9zZSBhbmQgUmVzaXplIHRleHQgYXJlYSBidXR0b25zLS0lPgogCi0gICAgPHRhYmxlIHN0eWxlPSJ3aWR0aDoxMDAlIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLnNhdmUnKX0iIC8+Ci0gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9JzxzOnRleHQgbmFtZT0iZ2VuZXJpYy5kb25lIi8+JwotICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb249JzxzOnVybCBhY3Rpb249InRlbXBsYXRlcyI+PHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iJXt3ZWJsb2d9Ii8+PC9zOnVybD4nIiAvPgotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgorICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLnNhdmUnKX0iIGNzc0NsYXNzPSJidG4gYnRuLWRlZmF1bHQiLz4KKyAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0nPHM6dGV4dCBuYW1lPSJnZW5lcmljLmRvbmUiLz4nIGNsYXNzPSJidXR0b24gYnRuIgorICAgICAgICAgICBvbmNsaWNrPSJ3aW5kb3cubG9jYXRpb249JzxzOnVybCBhY3Rpb249InRlbXBsYXRlcyI+PHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iJXt3ZWJsb2d9Ii8+PC9zOnVybD4nIi8+CiAKLSAgCiAgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgogICAgIDwlLS0gQWR2YW5jZWQgc2V0dGluZ3MgaW5zaWRlIGEgY29udHJvbCB0b2dnbGUgLS0lPgotICAgIAorCiAgICAgPHM6aWYgdGVzdD0idGVtcGxhdGUuY3VzdG9tIj4KLSAgICAgICAgPGJyIC8+Ci0gICAgICAgIDxkaXYgaWQ9ImFkdmFuY2VkQ29udHJvbFRvZ2dsZSIgY2xhc3M9ImNvbnRyb2xUb2dnbGUiPgotICAgICAgICAgICAgPHNwYW4gaWQ9ImlhZHZhbmNlZENvbnRyb2wiPis8L3NwYW4+Ci0gICAgICAgICAgICA8YSBjbGFzcz0iY29udHJvbFRvZ2dsZSIgb25jbGljaz0iamF2YXNjcmlwdDp0b2dnbGVDb250cm9sKCdhZHZhbmNlZENvbnRyb2xUb2dnbGUnLCdhZHZhbmNlZENvbnRyb2wnKSI+Ci0gICAgICAgICAgICA8czp0ZXh0IG5hbWU9InBhZ2VGb3JtLmFkdmFuY2VkU2V0dGluZ3MiIC8+PC9hPgorCisgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWdyb3VwIiBpZD0iYWNjb3JkaW9uIiBzdHlsZT0ibWFyZ2luLXRvcDoyZW0iPgorCisgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIHBhbmVsLWRlZmF1bHQiIGlkPSJwYW5lbC1wbHVnaW5zIj4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtaGVhZGluZyI+CisKKyAgICAgICAgICAgICAgICA8aDQgY2xhc3M9InBhbmVsLXRpdGxlIj4KKyAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9ImNvbGxhcHNlZCIgZGF0YS10b2dnbGU9ImNvbGxhcHNlIiBkYXRhLXRhcmdldD0iI2NvbGxhcHNlQWR2YW5jZWQiIGhyZWY9IiMiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJwYWdlRm9ybS5hZHZhbmNlZFNldHRpbmdzIi8+CisgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICA8L2g0PgorCisgICAgICAgICAgICA8L2Rpdj4KKworICAgICAgICAgICAgPGRpdiBpZD0iY29sbGFwc2VBZHZhbmNlZCIgY2xhc3M9InBhbmVsLWNvbGxhcHNlIGNvbGxhcHNlIj4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1ib2R5Ij4KKworICAgICAgICAgICAgICAgICAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi50ZW1wbGF0ZUxhbmd1YWdlIiBsaXN0PSJ0ZW1wbGF0ZUxhbmd1YWdlcyIgc2l6ZT0iMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ3BhZ2VGb3JtLnRlbXBsYXRlTGFuZ3VhZ2UnKX0iLz4KKworICAgICAgICAgICAgICAgICAgICA8czpjaGVja2JveCBuYW1lPSJiZWFuLmhpZGRlbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgncGFnZUZvcm0uaGlkZGVuJyl9IiB0b29sdGlwPSIle2dldFRleHQoJ3BhZ2VGb3JtLmhpZGRlbi50aXAnKX0iLz4KKworICAgICAgICAgICAgICAgICAgICA8czpjaGVja2JveCBuYW1lPSJiZWFuLm5hdmJhciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgncGFnZUZvcm0ubmF2YmFyJyl9IiB0b29sdGlwPSIle2dldFRleHQoJ3BhZ2VGb3JtLm5hdmJhci50aXAnKX0iLz4KKworICAgICAgICAgICAgICAgICAgICA8czpjaGVja2JveCBuYW1lPSJiZWFuLmF1dG9Db250ZW50VHlwZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgncGFnZUZvcm0udXNlQXV0b0NvbnRlbnRUeXBlJyl9Ii8+CisKKyAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0ibWFudWFsLWNvbnRlbnQtdHlwZS1jb250cm9sLWdyb3VwIiBzdHlsZT0iZGlzcGxheTpub25lIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLm1hbnVhbENvbnRlbnRUeXBlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ3BhZ2VGb3JtLnVzZU1hbnVhbENvbnRlbnRUeXBlJyl9Ii8+CisgICAgICAgICAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICAgICAgPC9kaXY+CisgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgPC9kaXY+Ci0gICAgICAgIAotICAgICAgICA8ZGl2IGlkPSJhZHZhbmNlZENvbnRyb2wiIGNsYXNzPSJhZHZhbmNlZENvbnRyb2wiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgotICAgICAgICAgICAgCi0gICAgICAgICAgICA8dGFibGUgY2VsbHNwYWNpbmc9IjYiPgotICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCIgdmFsaWduPSJ0b3AiPjxzOnRleHQgbmFtZT0icGFnZUZvcm0ub3V0cHV0Q29udGVudFR5cGUiIC8+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0PjwhLS0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNob3dDb250ZW50VHlwZUZpZWxkKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVtcGxhdGVfYmVhbl9hdXRvQ29udGVudFR5cGUxJykuY2hlY2tlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVtcGxhdGVfYmVhbl9tYW51YWxDb250ZW50VHlwZScpLnJlYWRPbmx5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RlbXBsYXRlX2JlYW5fbWFudWFsQ29udGVudFR5cGUnKS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNlNWU1ZTUnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZW1wbGF0ZV9iZWFuX21hbnVhbENvbnRlbnRUeXBlJykucmVhZE9ubHkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RlbXBsYXRlX2JlYW5fbWFudWFsQ29udGVudFR5cGUnKS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmZmZmZmYnOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIC0tPjwvc2NyaXB0PgotICAgICAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iYmVhbi5hdXRvQ29udGVudFR5cGUiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iYmVhbi5hdXRvQ29udGVudFR5cGUiIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0idHJ1ZSIgY2hlY2tlZD0idHJ1ZSIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2hhbmdlPSJzaG93Q29udGVudFR5cGVGaWVsZCgpIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9InRlbXBsYXRlX2JlYW5fYXV0b0NvbnRlbnRUeXBlMSIvPiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InBhZ2VGb3JtLnVzZUF1dG9Db250ZW50VHlwZSIgLz48YnIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9ImJlYW4uYXV0b0NvbnRlbnRUeXBlIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9ImZhbHNlIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9InNob3dDb250ZW50VHlwZUZpZWxkKCkiIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0idGVtcGxhdGVfYmVhbl9hdXRvQ29udGVudFR5cGUyIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJwYWdlRm9ybS51c2VNYW51YWxDb250ZW50VHlwZSIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5tYW51YWxDb250ZW50VHlwZSIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOmVsc2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJiZWFuLmF1dG9Db250ZW50VHlwZSIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPSJ0cnVlIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9InNob3dDb250ZW50VHlwZUZpZWxkKCkiIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0idGVtcGxhdGVfYmVhbl9hdXRvQ29udGVudFR5cGUxIi8+IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0icGFnZUZvcm0udXNlQXV0b0NvbnRlbnRUeXBlIiAvPjxiciAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iYmVhbi5hdXRvQ29udGVudFR5cGUiIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT0iZmFsc2UiIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPSJ0cnVlIiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jaGFuZ2U9InNob3dDb250ZW50VHlwZUZpZWxkKCkiIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD0idGVtcGxhdGVfYmVhbl9hdXRvQ29udGVudFR5cGUyIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJwYWdlRm9ybS51c2VNYW51YWxDb250ZW50VHlwZSIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5tYW51YWxDb250ZW50VHlwZSIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvczplbHNlPgotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPgotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICA8c2NyaXB0PjwhLS0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Q29udGVudFR5cGVGaWVsZCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gLS0+PC9zY3JpcHQ+IAotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjwvdGQ+Ci0gICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxzOnRleHQgbmFtZT0icGFnZUZvcm0ubmF2YmFyIiAvPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxzOmNoZWNrYm94IG5hbWU9ImJlYW4ubmF2YmFyIiAvPiAKLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0icGFnZUZvcm0ubmF2YmFyLnRpcCIgLz4KLSAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+PC90ZD4KLSAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PHM6dGV4dCBuYW1lPSJwYWdlRm9ybS5oaWRkZW4iIC8+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+PHM6Y2hlY2tib3ggbmFtZT0iYmVhbi5oaWRkZW4iIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InBhZ2VGb3JtLmhpZGRlbi50aXAiIC8+Ci0gICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjwvdGQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48czp0ZXh0IG5hbWU9InBhZ2VGb3JtLnRlbXBsYXRlTGFuZ3VhZ2UiIC8+Jm5ic3A7PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi50ZW1wbGF0ZUxhbmd1YWdlIiBsaXN0PSJ0ZW1wbGF0ZUxhbmd1YWdlcyIgc2l6ZT0iMSIgLz4KLSAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+PC90ZD4KLSAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgIAotICAgICAgICA8L2Rpdj4KKwogICAgIDwvczppZj4KLSAgICAKKwogPC9zOmZvcm0+CiAKIAotPHNjcmlwdD4KLXZhciB3ZWJsb2dVUkwgPSAnPHM6cHJvcGVydHkgdmFsdWU9ImFjdGlvbldlYmxvZy5hYnNvbHV0ZVVSTCIgLz4nOwotdmFyIG9yaWdpbmFsTGluayA9ICc8czpwcm9wZXJ0eSB2YWx1ZT0iYmVhbi5saW5rIiAvPic7Ci12YXIgdHlwZSA9ICc8czpwcm9wZXJ0eSB2YWx1ZT0iYmVhbi50eXBlIiAvPiAnIDsKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KIAotLy8gVXBkYXRlIHBhZ2UgVVJMIHdoZW4gdXNlciBjaGFuZ2VzIGxpbmsKLWZ1bmN0aW9uIHVwZGF0ZVBhZ2VVUkxEaXNwbGF5KCkgewotICAgIHZhciBwcmV2aWV3U3BhbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsaW5rUHJldmlldycpOwotICAgIHZhciBuMSA9IHByZXZpZXdTcGFuLmZpcnN0Q2hpbGQ7Ci0gICAgdmFyIG4yID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RlbXBsYXRlX2JlYW5fbGluaycpLnZhbHVlKTsKLSAgICBpZiAobjEgPT0gbnVsbCkgewotICAgICAgICBwcmV2aWV3U3Bhbi5hcHBlbmRDaGlsZChuMik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJldmlld1NwYW4ucmVwbGFjZUNoaWxkKG4yLCBuMSk7Ci0gICAgfSAgICAgICAgICAgCi19Ci0vLyBEb24ndCBsYXVuY2ggcGFnZSBpZiB1c2VyIGhhcyBjaGFuZ2VkIGxpbmssIGl0J2xsIGJlIGEgNDA0Ci1mdW5jdGlvbiBsYXVuY2hQYWdlKCkgewotICAgIGlmIChvcmlnaW5hbExpbmsgIT0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RlbXBsYXRlX2JlYW5fbGluaycpLnZhbHVlKSB7Ci0gICAgICAgIHdpbmRvdy5hbGVydCgiTGluayBjaGFuZ2VkLCBub3QgbGF1bmNoaW5nIHBhZ2UiKTsKLSAgICB9IGVsc2UgewotICAgICAgICB3aW5kb3cub3Blbih3ZWJsb2dVUkwgKyAncGFnZS8nICsgb3JpZ2luYWxMaW5rKyc/dHlwZT0nK3R5cGUsICdfYmxhbmsnKTsKKyAgICB2YXIgd2VibG9nVVJMID0gJzxzOnByb3BlcnR5IHZhbHVlPSJhY3Rpb25XZWJsb2cuYWJzb2x1dGVVUkwiIC8+JzsKKyAgICB2YXIgb3JpZ2luYWxMaW5rID0gJzxzOnByb3BlcnR5IHZhbHVlPSJiZWFuLmxpbmsiIC8+JzsKKyAgICB2YXIgdHlwZSA9ICc8czpwcm9wZXJ0eSB2YWx1ZT0iYmVhbi50eXBlIiAvPic7CisKKyAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7CisKKyAgICAgICAgJCgiI3RlbXBsYXRlLWNvZGUtdGFicyIpLnRhYnMoKTsKKworICAgICAgICBzaG93Q29udGVudFR5cGVGaWVsZCgpOworICAgICAgICAkKCIjdGVtcGxhdGVfYmVhbl9hdXRvQ29udGVudFR5cGUiKS5jbGljayhmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBzaG93Q29udGVudFR5cGVGaWVsZCgpOworICAgICAgICB9KTsKKyAgICB9KTsKKworICAgIC8vIFVwZGF0ZSBwYWdlIFVSTCB3aGVuIHVzZXIgY2hhbmdlcyBsaW5rCisgICAgZnVuY3Rpb24gdXBkYXRlUGFnZVVSTERpc3BsYXkoKSB7CisgICAgICAgIHZhciBsaW5rID0gJCgiI3RlbXBsYXRlX2JlYW5fbGluayIpLnZhbCgpOworICAgICAgICBpZiAobGluayAhPT0gIiIpIHsKKyAgICAgICAgICAgICQoIiNub19saW5rIikuaGlkZSgpOworICAgICAgICAgICAgJCgiI2dvb2RfbGluayIpLnNob3coKTsKKyAgICAgICAgICAgICQoIiNsaW5rUHJldmlldyIpLmh0bWwobGluayk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkKCIjZ29vZF9saW5rIikuaGlkZSgpOworICAgICAgICAgICAgJCgiI25vX2xpbmsiKS5zaG93KCk7CisgICAgICAgIH0KICAgICB9Ci19Ci0vL0dldCBjb29raWUgdG8gZGV0ZXJtaW5lIHN0YXRlIG9mIGNvbnRyb2wKLWlmIChnZXRDb29raWUoJ2NvbnRyb2xfYWR2YW5jZWRDb250cm9sJykgIT0gbnVsbCkgewotICAgIGlmKGdldENvb2tpZSgnY29udHJvbF9hZHZhbmNlZENvbnRyb2wnKSA9PSAndHJ1ZScpewotICAgICAgICB0b2dnbGUoJ2FkdmFuY2VkQ29udHJvbCcpOwotICAgICAgICB0b2dnbGVQbHVzTWludXMoJ2lhZHZhbmNlZENvbnRyb2wnKTsKKworICAgIC8vIERvbid0IGxhdW5jaCBwYWdlIGlmIHVzZXIgaGFzIGNoYW5nZWQgbGluaywgaXQnbGwgYmUgYSA0MDQKKyAgICBmdW5jdGlvbiBsYXVuY2hQYWdlKCkgeworICAgICAgICBpZiAob3JpZ2luYWxMaW5rICE9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZW1wbGF0ZV9iZWFuX2xpbmsnKS52YWx1ZSkgeworICAgICAgICAgICAgd2luZG93LmFsZXJ0KCJMaW5rIGNoYW5nZWQsIG5vdCBsYXVuY2hpbmcgcGFnZSIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd2luZG93Lm9wZW4od2VibG9nVVJMICsgJ3BhZ2UvJyArIG9yaWdpbmFsTGluayArICc/dHlwZT0nICsgdHlwZSwgJ19ibGFuaycpOworICAgICAgICB9CiAgICAgfQotfQorCisgICAgZnVuY3Rpb24gc2hvd0NvbnRlbnRUeXBlRmllbGQoKSB7CisgICAgICAgIHZhciBjaGVja2VkID0gJCgiI3RlbXBsYXRlX2JlYW5fYXV0b0NvbnRlbnRUeXBlIikucHJvcCgiY2hlY2tlZCIpOworICAgICAgICBpZiAoIGNoZWNrZWQgKSB7CisgICAgICAgICAgICAkKCIjbWFudWFsLWNvbnRlbnQtdHlwZS1jb250cm9sLWdyb3VwIikuaGlkZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgJCgiI21hbnVhbC1jb250ZW50LXR5cGUtY29udHJvbC1ncm91cCIpLnNob3coKTsKKyAgICAgICAgfQorICAgIH0KKwogPC9zY3JpcHQ+Ci0KLSA8c2NyaXB0IHNyYz0iPHM6dXJsIHZhbHVlPScvcm9sbGVyLXVpL3NjcmlwdHMvanF1ZXJ5LTIuMS4xLm1pbi5qcyc+PC9zOnVybD4iPjwvc2NyaXB0PgotIDxzY3JpcHQgc3JjPSI8czp1cmwgdmFsdWU9Jy9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9qcXVlcnktdWkubWluLmpzJz48L3M6dXJsPiI+PC9zY3JpcHQ+Ci0KLSA8c2NyaXB0PgotICAgICAkKGZ1bmN0aW9uKCkgewotICAgICAgICAgJCggIiN0ZW1wbGF0ZS1jb2RlLXRhYnMiICkudGFicygpOwotICAgICB9KTsKLSA8L3NjcmlwdD4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9UZW1wbGF0ZXMuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL1RlbXBsYXRlcy5qc3AKaW5kZXggNGQ2OTlmZC4uZmVmYmFiNiAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL1RlbXBsYXRlcy5qc3AKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL1RlbXBsYXRlcy5qc3AKQEAgLTE4LDEwMCArMTgsOTQgQEAKIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KIAogPHAgY2xhc3M9InN1YnRpdGxlIj4KLSAgIDxzOnRleHQgbmFtZT0icGFnZXNGb3JtLnN1YnRpdGxlIiA+Ci0gICAgICAgPHM6cGFyYW0gdmFsdWU9ImFjdGlvbldlYmxvZy5oYW5kbGUiIC8+Ci0gICA8L3M6dGV4dD4KLTwvcD4gIAorICAgIDxzOnRleHQgbmFtZT0icGFnZXNGb3JtLnN1YnRpdGxlIj4KKyAgICAgICAgPHM6cGFyYW0gdmFsdWU9ImFjdGlvbldlYmxvZy5oYW5kbGUiLz4KKyAgICA8L3M6dGV4dD4KKzwvcD4KIDxwIGNsYXNzPSJwYWdldGlwIj4KLSAgIDxzOnRleHQgbmFtZT0icGFnZXNGb3JtLnRpcCIgLz4KKyAgICA8czp0ZXh0IG5hbWU9InBhZ2VzRm9ybS50aXAiLz4KIDwvcD4KIAogPHM6aWYgdGVzdD0iYWN0aW9uV2VibG9nLmVkaXRvclRoZW1lICE9ICdjdXN0b20nIj4KICAgICA8cD48czp0ZXh0IG5hbWU9InBhZ2VzRm9ybS50aGVtZXNSZW1pbmRlciI+PHM6cGFyYW0gdmFsdWU9ImFjdGlvbldlYmxvZy5lZGl0b3JUaGVtZSIvPjwvczp0ZXh0PjwvcD4KIDwvczppZj4KIAotPHM6Zm9ybSBhY3Rpb249InRlbXBsYXRlc1JlbW92ZSI+Ci08czpoaWRkZW4gbmFtZT0ic2FsdCIgLz4KLTxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIle2FjdGlvbldlYmxvZy5oYW5kbGV9IiAvPgorPHM6Zm9ybSBhY3Rpb249InRlbXBsYXRlUmVtb3ZlIXJlbW92ZSIgdGhlbWU9ImJvb3RzdHJhcCIgY3NzQ2xhc3M9ImZvcm0taG9yaXpvbnRhbCI+CisgICAgPHM6aGlkZGVuIG5hbWU9InNhbHQiLz4KKyAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIiB2YWx1ZT0iJXthY3Rpb25XZWJsb2cuaGFuZGxlfSIvPgorICAgIDxzOmhpZGRlbiBuYW1lPSJyZW1vdmVJZCIgaWQ9InJlbW92ZUlkIi8+CiAKLTwlLS0gdGFibGUgb2YgcGFnZXMgLS0lPgotPHRhYmxlIGNsYXNzPSJyb2xsZXJ0YWJsZSI+CisgICAgPHRhYmxlIGNsYXNzPSJ0YWJsZSB0YWJsZS1zdHJpcGVkIj4gPCUtLSBvZiB3ZWJsb2cgdGVtcGxhdGVzIC0tJT4KIAotPHM6aWYgdGVzdD0iIXRlbXBsYXRlcy5pc0VtcHR5Ij4KKyAgICAgICAgPHM6aWYgdGVzdD0iIXRlbXBsYXRlcy5pc0VtcHR5Ij4KIAotICAgIDx0cj4KLSAgICAgICAgPHRoIHdpZHRoPSIzMCUiPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy5uYW1lIiAvPjwvdGg+Ci0gICAgICAgIDx0aCB3aWR0aD0iMTAiPjxzOnRleHQgbmFtZT0icGFnZXNGb3JtLmFjdGlvbiIgLz48L3RoPgotICAgICAgICA8dGggd2lkdGg9IjU1JSI+PHM6dGV4dCBuYW1lPSJnZW5lcmljLmRlc2NyaXB0aW9uIiAvPjwvdGg+Ci0gICAgICAgIDx0aCB3aWR0aD0iMTAiPjxzOnRleHQgbmFtZT0icGFnZXNGb3JtLnJlbW92ZSIgLz48L3RoPgotICAgICAgICA8dGggd2lkdGg9IjUiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25jbGljaz0idG9nZ2xlRnVuY3Rpb24odGhpcy5jaGVja2VkLCdpZFNlbGVjdGlvbnMnKTsiLz48L3RoPgotICAgIDwvdHI+Ci0gICAgPHM6aXRlcmF0b3IgdmFyPSJwIiB2YWx1ZT0idGVtcGxhdGVzIiBzdGF0dXM9InJvd3N0YXR1cyI+Ci0gICAgICAgIDxzOmlmIHRlc3Q9IiNyb3dzdGF0dXMub2RkID09IHRydWUiPgotICAgICAgICAgICAgPHRyIGNsYXNzPSJyb2xsZXJ0YWJsZV9vZGQiPgorICAgICAgICAgICAgPHRyPgorICAgICAgICAgICAgICAgIDx0aCB3aWR0aD0iMzAlIj48czp0ZXh0IG5hbWU9ImdlbmVyaWMubmFtZSIvPjwvdGg+CisgICAgICAgICAgICAgICAgPHRoIHdpZHRoPSIxMCI+PHM6dGV4dCBuYW1lPSJwYWdlc0Zvcm0uYWN0aW9uIi8+PC90aD4KKyAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjU1JSI+PHM6dGV4dCBuYW1lPSJnZW5lcmljLmRlc2NyaXB0aW9uIi8+PC90aD4KKyAgICAgICAgICAgICAgICA8dGggd2lkdGg9IjEwIj48czp0ZXh0IG5hbWU9InBhZ2VzRm9ybS5yZW1vdmUiLz48L3RoPgorICAgICAgICAgICAgPC90cj4KKworICAgICAgICAgICAgPHM6aXRlcmF0b3IgdmFyPSJwIiB2YWx1ZT0idGVtcGxhdGVzIiBzdGF0dXM9InJvd3N0YXR1cyI+CisgICAgICAgICAgICAgICAgPHRyPgorCisgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246bWlkZGxlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiEgI3AuaGlkZGVuIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0nPHM6dXJsIHZhbHVlPSIvaW1hZ2VzL3BhZ2Vfd2hpdGUucG5nIi8+JyBib3JkZXI9IjAiIGFsdD0iaWNvbiIvPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6ZWxzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0nPHM6dXJsIHZhbHVlPSIvaW1hZ2VzL3BhZ2Vfd2hpdGVfZ2Vhci5wbmciLz4nIGJvcmRlcj0iMCIgYWx0PSJpY29uIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3M6ZWxzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOnVybCB2YXI9ImVkaXQiIGFjdGlvbj0idGVtcGxhdGVFZGl0Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSJhY3Rpb25XZWJsb2cuaGFuZGxlIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0iYmVhbi5pZCIgdmFsdWU9IiNwLmlkIi8+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3M6dXJsPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6YSBocmVmPSIle2VkaXR9Ij48czpwcm9wZXJ0eSB2YWx1ZT0iI3AubmFtZSIvPjwvczphPgorICAgICAgICAgICAgICAgICAgICA8L3RkPgorCisgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246bWlkZGxlIj48czpwcm9wZXJ0eSB2YWx1ZT0iI3AuYWN0aW9uLnJlYWRhYmxlTmFtZSIvPjwvdGQ+CisKKyAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiPjxzOnByb3BlcnR5IHZhbHVlPSIjcC5kZXNjcmlwdGlvbiIvPjwvdGQ+CisKKyAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iISNwLnJlcXVpcmVkIHx8ICFjdXN0b21UaGVtZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dXJsIHZhcj0icmVtb3ZlVXJsIiBhY3Rpb249InRlbXBsYXRlUmVtb3ZlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iYWN0aW9uV2VibG9nLmhhbmRsZSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpwYXJhbSBuYW1lPSJyZW1vdmVJZCIgdmFsdWU9IiNwLmlkIi8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOnVybD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBvbmNsaWNrPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbmZpcm1UZW1wbGF0ZURlbGV0ZSgnPHM6cHJvcGVydHkgdmFsdWU9IiNwLmlkIi8+JywgJzxzOnByb3BlcnR5IHZhbHVlPSIjcC5uYW1lIi8+JyApIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tdHJhc2giPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvczppZj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOmVsc2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImdseXBoaWNvbiBnbHlwaGljb24tbG9jayI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmVsc2U+CisgICAgICAgICAgICAgICAgICAgIDwvdGQ+CisKKyAgICAgICAgICAgICAgICA8L3RyPgorICAgICAgICAgICAgPC9zOml0ZXJhdG9yPgorCiAgICAgICAgIDwvczppZj4KICAgICAgICAgPHM6ZWxzZT4KLSAgICAgICAgICAgIDx0ciBjbGFzcz0icm9sbGVydGFibGVfZXZlbiI+CisgICAgICAgICAgICA8dHIgY2xhc3M9InJvbGxlcnRhYmxlX29kZCI+CisgICAgICAgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiIGNvbHNwYW49IjUiPgorICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InBhZ2VGb3JtLm5vdGVtcGxhdGVzIi8+CisgICAgICAgICAgICAgICAgPC90ZD4KKyAgICAgICAgICAgIDwvdHI+CiAgICAgICAgIDwvczplbHNlPgotCi0gICAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOm1pZGRsZSI+Ci0gICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iISAjcC5oaWRkZW4iPgotICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0nPHM6dXJsIHZhbHVlPSIvaW1hZ2VzL3BhZ2Vfd2hpdGUucG5nIi8+JyBib3JkZXI9IjAiIGFsdD0iaWNvbiIgLz4KLSAgICAgICAgICAgICAgICA8L3M6aWY+Ci0gICAgICAgICAgICAgICAgPHM6ZWxzZT4KLSAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9JzxzOnVybCB2YWx1ZT0iL2ltYWdlcy9wYWdlX3doaXRlX2dlYXIucG5nIi8+JyBib3JkZXI9IjAiIGFsdD0iaWNvbiIgLz4KLSAgICAgICAgICAgICAgICA8L3M6ZWxzZT4KLSAgICAgICAgICAgICAgICA8czp1cmwgdmFyPSJlZGl0IiBhY3Rpb249InRlbXBsYXRlRWRpdCI+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9ImFjdGlvbldlYmxvZy5oYW5kbGUiIC8+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9ImJlYW4uaWQiIHZhbHVlPSIjcC5pZCIgLz4KLSAgICAgICAgICAgICAgICA8L3M6dXJsPgotICAgICAgICAgICAgICAgIDxzOmEgaHJlZj0iJXtlZGl0fSI+PHM6cHJvcGVydHkgdmFsdWU9IiNwLm5hbWUiIC8+PC9zOmE+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgCi0gICAgICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOm1pZGRsZSI+PHM6cHJvcGVydHkgdmFsdWU9IiNwLmFjdGlvbi5yZWFkYWJsZU5hbWUiIC8+PC90ZD4KLQotICAgICAgICAgICAgPHRkIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiPjxzOnByb3BlcnR5IHZhbHVlPSIjcC5kZXNjcmlwdGlvbiIgLz48L3RkPgotCi0gICAgICAgICAgICA8dGQgY2xhc3M9ImNlbnRlciIgc3R5bGU9InZlcnRpY2FsLWFsaWduOm1pZGRsZSI+Ci0gICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiEjcC5yZXF1aXJlZCB8fCAhY3VzdG9tVGhlbWUiID4KLSAgICAgICAgICAgICAgICAgICAgIDxzOnVybCB2YXI9InJlbW92ZVVybCIgYWN0aW9uPSJ0ZW1wbGF0ZVJlbW92ZSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgPHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iYWN0aW9uV2VibG9nLmhhbmRsZSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9InJlbW92ZUlkIiB2YWx1ZT0iI3AuaWQiLz4KLSAgICAgICAgICAgICAgICAgICAgIDwvczp1cmw+Ci0gICAgICAgICAgICAgICAgICAgICA8czphIGhyZWY9IiV7cmVtb3ZlVXJsfSI+PGltZyBzcmM9JzxzOnVybCB2YWx1ZT0iL2ltYWdlcy9kZWxldGUucG5nIi8+JyAvPjwvczphPgotICAgICAgICAgICAgICAgICA8L3M6aWY+Ci0gICAgICAgICAgICAgICAgIDxzOmVsc2U+Ci0gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSc8czp1cmwgdmFsdWU9Ii9pbWFnZXMvbG9jay5wbmciLz4nIGJvcmRlcj0iMCIgYWx0PSJpY29uIiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSc8czp0ZXh0IG5hbWU9InBhZ2VzRm9ybS5yZXF1aXJlZCIvPicgLz4KLSAgICAgICAgICAgICAgICAgPC9zOmVsc2U+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJjZW50ZXIiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjptaWRkbGUiPgotICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiEjcC5yZXF1aXJlZCB8fCAhY3VzdG9tVGhlbWUiID4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJpZFNlbGVjdGlvbnMiIHZhbHVlPSI8czpwcm9wZXJ0eSB2YWx1ZT0iI3AuaWQiIC8+IiAvPgotICAgICAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgICAgICAgPHM6ZWxzZT4KLSAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJpZFNlbGVjdGlvbnMiIHZhbHVlPSI8czpwcm9wZXJ0eSB2YWx1ZT0iI3AuaWQiIC8+IiBkaXNhYmxlZD0iZGlzYWJsZWQiLz4KLSAgICAgICAgICAgICAgICAgPC9zOmVsc2U+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgIDwvczppdGVyYXRvcj4KLSAgICAKLTwvczppZj4KLTxzOmVsc2U+Ci0gICAgPHRyIGNsYXNzPSJyb2xsZXJ0YWJsZV9vZGQiPgotICAgICAgICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOm1pZGRsZSIgY29sc3Bhbj0iNSIgPgotICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJwYWdlRm9ybS5ub3RlbXBsYXRlcyIvPgotICAgICAgICA8L3RkPgotICAgIDwvdHI+Ci08L3M6ZWxzZT4KLTwvdGFibGU+Ci0KLTxici8+Ci0KLTxzOmlmIHRlc3Q9IiF0ZW1wbGF0ZXMuaXNFbXB0eSI+Ci0JPGRpdiBjbGFzcz0iY29udHJvbCI+Ci0JCTxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdwYWdlc0Zvcm0uZGVsZXRlc2VsZWN0ZWQnKX0iIC8+Ci0JPC9kaXY+Ci08L3M6aWY+CisgICAgPC90YWJsZT4KIAogPC9zOmZvcm0+CisKKworPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBjb25maXJtVGVtcGxhdGVEZWxldGUodGVtcGxhdGVJZCwgdGVtcGxhdGVOYW1lKSB7CisgICAgICAgICQoJyNyZW1vdmVJZCcpLnZhbCh0ZW1wbGF0ZUlkKTsKKyAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKCc8czp0ZXh0IG5hbWU9InBhZ2VSZW1vdmUuY29uZmlybSIvPjogXCcnICsgdGVtcGxhdGVOYW1lICsgJ1wnPycpKSB7CisgICAgICAgICAgICBkb2N1bWVudC50ZW1wbGF0ZVJlbW92ZS5hY3Rpb24gPSAiPHM6dXJsIGFjdGlvbj0ndGVtcGxhdGVSZW1vdmUhcmVtb3ZlJyAvPiI7CisgICAgICAgICAgICBkb2N1bWVudC50ZW1wbGF0ZVJlbW92ZS5zdWJtaXQoKTsKKyAgICAgICAgfQorICAgIH0KKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL1RlbXBsYXRlc1JlbW92ZS5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvVGVtcGxhdGVzUmVtb3ZlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmViZWI5NS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvVGVtcGxhdGVzUmVtb3ZlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTwlLS0KLSAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UKLSAgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90Ci0gIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0KLSAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotCi0gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcKLSAgY29weXJpZ2h0IGluIHRoaXMgd29yaywgcGxlYXNlIHNlZSB0aGUgTk9USUNFIGZpbGUgaW4gdGhlIHRvcCBsZXZlbAotICBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCi0tLSU+Ci08JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+Ci0KLTxwIGNsYXNzPSJzdWJ0aXRsZSI+Ci0JPHM6dGV4dCBuYW1lPSJwYWdlUmVtb3Zlcy5zdWJ0aXRsZSIgLz4KLTwvcD4KLQotPHA+Ci0JPHM6dGV4dCBuYW1lPSJwYWdlUmVtb3Zlcy55b3VTdXJlIiAvPgotCTxici8+Ci0JPGJyLz4KLQk8c3BhbiBjbGFzcz0id2FybmluZyI+Ci0JCTxzOnRleHQgbmFtZT0icGFnZVJlbW92ZXMueW91U3VyZVdhcm5pbmciIC8+Ci0JPC9zcGFuPgotPC9wPgotCi08czpmb3JtIGFjdGlvbj0idGVtcGxhdGVzUmVtb3ZlIj4KLQk8czpoaWRkZW4gbmFtZT0ic2FsdCIgLz4KLQk8czpoaWRkZW4gbmFtZT0iaWRzIiAvPgotCTxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIle2FjdGlvbldlYmxvZy5oYW5kbGV9IiAvPgotCQotCTxzOml0ZXJhdG9yIHZhcj0icCIgdmFsdWU9InRlbXBsYXRlcyIgc3RhdHVzPSJyb3dzdGF0dXMiPgotCQk8cD4KLQkJCTxzOnRleHQgbmFtZT0icGFnZVJlbW92ZS5wYWdlSWQiIC8+ID0gWzxzOnByb3BlcnR5IHZhbHVlPSIjcC5pZCIgLz5dCi0JCQk8czp0ZXh0IG5hbWU9InBhZ2VSZW1vdmUucGFnZU5hbWUiIC8+ID0gWzxzOnByb3BlcnR5IHZhbHVlPSIjcC5uYW1lIiAvPl0KLQkJPC9wPgotCTwvczppdGVyYXRvcj4KLQotCTx0YWJsZT4KLQkJPHRyPgotCQkJPHRkPgotCQkJCTxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLnllcycpfSIgYWN0aW9uPSJ0ZW1wbGF0ZXNSZW1vdmUhcmVtb3ZlIiAvPiZuYnNwOwotCQkJCTxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLm5vJyl9IiBhY3Rpb249InRlbXBsYXRlc1JlbW92ZSFjYW5jZWwiIC8+Ci0JCQk8L3RkPgotCQk8L3RyPgotCTwvdGFibGU+Ci0KLTwvczpmb3JtPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9UZW1wbGF0ZXNTaWRlYmFyLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9UZW1wbGF0ZXNTaWRlYmFyLmpzcAppbmRleCAwYjhiNmRmLi4zOGUzZGYwIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvVGVtcGxhdGVzU2lkZWJhci5qc3AKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL1RlbXBsYXRlc1NpZGViYXIuanNwCkBAIC0xNyw0MyArMTcsMjIgQEAKIC0tJT4KIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KIAotPGRpdiBjbGFzcz0ic2lkZWJhckZhZGUiPgotICAgIDxkaXYgY2xhc3M9Im1lbnUtdHIiPgotICAgICAgICA8ZGl2IGNsYXNzPSJtZW51LXRsIj4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhcklubmVyIj4KLSAgICAgICAgICAgICAgICA8aDM+PHM6dGV4dCBuYW1lPSJwYWdlc0Zvcm0uYWRkTmV3UGFnZSIgLz48L2gzPgotICAgICAgICAgICAgICAgIDxociBzaXplPSIxIiBub3NoYWRlPSJub3NoYWRlIiAvPgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIDxzOmZvcm0gYWN0aW9uPSJ0ZW1wbGF0ZXMhYWRkIj4KLQkJCQkJPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0JCQkJCTxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciIC8+Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSI2Ij4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PHM6dGV4dCBuYW1lPSJnZW5lcmljLm5hbWUiLz48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48czp0ZXh0ZmllbGQgbmFtZT0ibmV3VG1wbE5hbWUiIC8+PC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiFhdmFpbGFibGVBY3Rpb25zLmlzRW1wdHkiID4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48czp0ZXh0IG5hbWU9InBhZ2VzRm9ybS5hY3Rpb24iLz48L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czpzZWxlY3QgbmFtZT0ibmV3VG1wbEFjdGlvbiIgc2l6ZT0iMSIgbGlzdD0iYXZhaWxhYmxlQWN0aW9ucyIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdwYWdlc0Zvcm0uYWRkJyl9IiAvPjwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8L3M6Zm9ybT4KLSAgICAgICAgICAgICAgICA8YnIgLz4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICA8L2Rpdj4KLTwvZGl2PgkKKzxoMz48czp0ZXh0IG5hbWU9InBhZ2VzRm9ybS5hZGROZXdQYWdlIi8+PC9oMz4KKzxociBzaXplPSIxIiBub3NoYWRlPSJub3NoYWRlIi8+CisKKzxzOmZvcm0gYWN0aW9uPSJ0ZW1wbGF0ZXMhYWRkIiB0aGVtZT0iYm9vdHN0cmFwIiBjc3NDbGFzcz0iZm9ybS1ob3Jpem9udGFsIj4KKyAgICA8czpoaWRkZW4gbmFtZT0ic2FsdCIvPgorICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciLz4KKworICAgIDxzOnRleHQgbmFtZT0iZ2VuZXJpYy5uYW1lIi8+CisgICAgPHM6dGV4dGZpZWxkIG5hbWU9Im5ld1RtcGxOYW1lIi8+CisKKyAgICA8czppZiB0ZXN0PSIhYXZhaWxhYmxlQWN0aW9ucy5pc0VtcHR5Ij4KKyAgICAgICAgPHM6dGV4dCBuYW1lPSJwYWdlc0Zvcm0uYWN0aW9uIi8+CisgICAgICAgIDxzOnNlbGVjdCBuYW1lPSJuZXdUbXBsQWN0aW9uIiBsaXN0PSJhdmFpbGFibGVBY3Rpb25zIi8+CisgICAgPC9zOmlmPgorCisgICAgPHM6c3VibWl0IGNsYXNzPSJidG4iIHZhbHVlPSIle2dldFRleHQoJ3BhZ2VzRm9ybS5hZGQnKX0iLz4KKworPC9zOmZvcm0+CisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9UaGVtZUVkaXQuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL1RoZW1lRWRpdC5qc3AKaW5kZXggNGZkZTRmNy4uZGFjMWVjOCAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL1RoZW1lRWRpdC5qc3AKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL1RoZW1lRWRpdC5qc3AKQEAgLTE2LDE0NiArMTYsMzAzIEBACiAgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KIC0tJT4KIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KLTxzY3JpcHQgc3JjPSI8czp1cmwgdmFsdWU9Jy9yb2xsZXItdWkvc2NyaXB0cy9qcXVlcnktMi4xLjEubWluLmpzJyAvPiI+PC9zY3JpcHQ+Ci08c2NyaXB0IHNyYz0iPHM6dXJsIHZhbHVlPScvd2ViamFycy9hbmd1bGFyLzEuMi4yOS9hbmd1bGFyLm1pbi5qcycgLz4iPjwvc2NyaXB0PgotCi08c2NyaXB0PgotZnVuY3Rpb24gZnVsbFByZXZpZXcoc2VsZWN0b3IpIHsKLSAgICBzZWxlY3RlZCA9IHNlbGVjdG9yLnNlbGVjdGVkSW5kZXg7Ci0gICAgd2luZG93Lm9wZW4oJzxzOnVybCB2YWx1ZT0iL3JvbGxlci11aS9hdXRob3JpbmcvcHJldmlldy8le2FjdGlvbldlYmxvZy5oYW5kbGV9Ii8+P3RoZW1lPScgKyBzZWxlY3Rvci5vcHRpb25zW3NlbGVjdGVkXS52YWx1ZSk7Ci19Ci1mdW5jdGlvbiB1cGRhdGVUaGVtZUNob29zZXIoc2VsZWN0ZWQpIHsKLSAgICBpZiAoc2VsZWN0ZWRbMF0udmFsdWUgPT0gJ3NoYXJlZCcpIHsKLSAgICAgICAgJCgnI3NoYXJlZENob29zZXInKS5hZGRDbGFzcygic2VsZWN0ZWRDaG9vc2VyIik7Ci0gICAgICAgICQoJyNjdXN0b21DaG9vc2VyJykucmVtb3ZlQ2xhc3MoInNlbGVjdGVkQ2hvb3NlciIpOwotICAgICAgICAkKCcjc2hhcmVkT3B0aW9uZXInKS5zaG93KCk7Ci0gICAgICAgICQoJyNjdXN0b21PcHRpb25lcicpLmhpZGUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICAkKCcjY3VzdG9tQ2hvb3NlcicpLmFkZENsYXNzKCJzZWxlY3RlZENob29zZXIiKTsKLSAgICAgICAgJCgnI3NoYXJlZENob29zZXInKS5yZW1vdmVDbGFzcygic2VsZWN0ZWRDaG9vc2VyIik7Ci0gICAgICAgICQoJyNjdXN0b21PcHRpb25lcicpLnNob3coKTsKLSAgICAgICAgJCgnI3NoYXJlZE9wdGlvbmVyJykuaGlkZSgpOwotICAgIH0KLX0KLTwvc2NyaXB0PgogCiA8cCBjbGFzcz0ic3VidGl0bGUiPgotICAgPHM6dGV4dCBuYW1lPSJ0aGVtZUVkaXRvci5zdWJ0aXRsZSIgPgotICAgICAgIDxzOnBhcmFtIHZhbHVlPSJhY3Rpb25XZWJsb2cuaGFuZGxlIiAvPgotICAgPC9zOnRleHQ+CisgICAgPHM6dGV4dCBuYW1lPSJ0aGVtZUVkaXRvci5zdWJ0aXRsZSI+CisgICAgICAgIDxzOnBhcmFtIHZhbHVlPSJhY3Rpb25XZWJsb2cuaGFuZGxlIi8+CisgICAgPC9zOnRleHQ+CiA8L3A+CiAKLTxzOmZvcm0gYWN0aW9uPSJ0aGVtZUVkaXQhc2F2ZSI+Ci0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgLz4KKzxzOmZvcm0gYWN0aW9uPSJ0aGVtZUVkaXQhc2F2ZSIgdGhlbWU9ImJvb3RzdHJhcCIgY3NzQ2xhc3M9ImZvcm0tdmVydGljYWwiPgorICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0Ii8+CisgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIvPgogCi0gICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgd2lkdGg9IjUwJSIgdmFsaWduPSJ0b3AiPgotICAgICAgICAgICAgICAgIDxkaXYgaWQ9InNoYXJlZENob29zZXIiIGNsYXNzPSJjaG9vc2VyIj4KLSAgICAgICAgICAgICAgICAgICAgPGgyPjxpbnB1dCBpZD0ic2hhcmVkUmFkaW8iIHR5cGU9InJhZGlvIiBuYW1lPSJ0aGVtZVR5cGUiIHZhbHVlPSJzaGFyZWQiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iIWN1c3RvbVRoZW1lIj5jaGVja2VkPC9zOmlmPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InVwZGF0ZVRoZW1lQ2hvb3NlcigkKHRoaXMpKSIgLz4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ0aGVtZUVkaXRvci5zaGFyZWRUaGVtZSIgLz48L2gyPgotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InRoZW1lRWRpdG9yLnNoYXJlZFRoZW1lRGVzY3JpcHRpb24iIC8+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgPHRkIHdpZHRoPSI1MCUiIHZhbGlnbj0idG9wIj4KLSAgICAgICAgICAgICAgICA8ZGl2IGlkPSJjdXN0b21DaG9vc2VyIiBjbGFzcz0iY2hvb3NlciI+Ci0gICAgICAgICAgICAgICAgICAgIDxoMj48aW5wdXQgaWQ9ImN1c3RvbVJhZGlvIiB0eXBlPSJyYWRpbyIgbmFtZT0idGhlbWVUeXBlIiB2YWx1ZT0iY3VzdG9tIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImN1c3RvbVRoZW1lIj5jaGVja2VkPC9zOmlmPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9InVwZGF0ZVRoZW1lQ2hvb3NlcigkKHRoaXMpKSIgLz4mbmJzcDsKLSAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ0aGVtZUVkaXRvci5jdXN0b21UaGVtZSIgLz48L2gyPgotICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InRoZW1lRWRpdG9yLmN1c3RvbVRoZW1lRGVzY3JpcHRpb24iIC8+Ci0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgIDwvdGFibGU+CisgICAgPCUtLSBUd28gY2hvaWNlcyBzaWRlLWJ5LXNpZGU6IGNob29zZSBTaGFyZWQgb3IgQ3VzdG9tIFRoZW1lIC0tJT4KIAotICAgIDxkaXYgaWQ9InNoYXJlZE9wdGlvbmVyIiBjbGFzcz0ib3B0aW9uZXIiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KLSAgICAgICAgPHA+Ci0gICAgICAgICAgICA8czppZiB0ZXN0PSIhY3VzdG9tVGhlbWUiPgotICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0idGhlbWVFZGl0b3IueW91ckN1cnJlbnRUaGVtZSIgLz46Ci0gICAgICAgICAgICAgICAgPGI+PHM6cHJvcGVydHkgdmFsdWU9ImFjdGlvbldlYmxvZy50aGVtZS5uYW1lIi8+PC9iPgotICAgICAgICAgICAgICAgIDwlLS0gVGhlIHR5cGUgb2Ygc3R5bGVzaGVldCB3ZSBhcmUgdXNpbmcgLS0lPgotICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiV7c2hhcmVkVGhlbWVDdXN0b21TdHlsZXNoZWV0fSI+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0idGhlbWVFZGl0b3IueW91ckN1c3RvbVN0eWxlc2hlZXQiIC8+Ci0gICAgICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgICAgIDxzOmVsc2U+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0idGhlbWVFZGl0b3IueW91clRoZW1lU3R5bGVTaGVldCIgLz4KLSAgICAgICAgICAgICAgICA8L3M6ZWxzZT4KLSAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgIDxzOmVsc2U+Ci0gICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ0aGVtZUVkaXRvci5zZWxlY3RUaGVtZSIgLz46Ci0gICAgICAgICAgICA8L3M6ZWxzZT4KLSAgICAgICAgPC9wPgorICAgIDxkaXYgY2xhc3M9InJvdyByb3ctZGlzcGxheS1mbGV4Ij4KKworICAgICAgICA8ZGl2IGNsYXNzPSJjb2wteHMtNiI+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbCBwYW5lbC1kZWZhdWx0Ij4KKyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1ib2R5IiBpZD0ic2hhcmVkQ2hvb3NlciI+CisgICAgICAgICAgICAgICAgICAgIDxoMz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0ic2hhcmVkUmFkaW8iIHR5cGU9InJhZGlvIiBuYW1lPSJ0aGVtZVR5cGUiIHZhbHVlPSJzaGFyZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iIWN1c3RvbVRoZW1lIj5jaGVja2VkPC9zOmlmPiBvbmNsaWNrPSJwcm9wb3NlVGhlbWVUeXBlQ2hhbmdlKCQodGhpcykpIi8+Jm5ic3A7CisgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InRoZW1lRWRpdG9yLnNoYXJlZFRoZW1lIi8+CisgICAgICAgICAgICAgICAgICAgIDwvaDM+CisgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0idGhlbWVFZGl0b3Iuc2hhcmVkVGhlbWVEZXNjcmlwdGlvbiIvPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgY2xhc3M9ImNvbC14cy02Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIHBhbmVsLWRlZmF1bHQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiIGlkPSJjdXN0b21DaG9vc2VyIj4KKyAgICAgICAgICAgICAgICAgICAgPGgzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJjdXN0b21SYWRpbyIgdHlwZT0icmFkaW8iIG5hbWU9InRoZW1lVHlwZSIgdmFsdWU9ImN1c3RvbSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJjdXN0b21UaGVtZSI+Y2hlY2tlZDwvczppZj4gb25jbGljaz0icHJvcG9zZVRoZW1lVHlwZUNoYW5nZSgkKHRoaXMpKSIvPiZuYnNwOworICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ0aGVtZUVkaXRvci5jdXN0b21UaGVtZSIvPgorICAgICAgICAgICAgICAgICAgICA8L2gzPgorICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InRoZW1lRWRpdG9yLmN1c3RvbVRoZW1lRGVzY3JpcHRpb24iLz4KKyAgICAgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKwogICAgIDwvZGl2PgogCi0gICAgPGRpdiBpZD0iY3VzdG9tT3B0aW9uZXIiIGNsYXNzPSJvcHRpb25lciIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgotICAgICAgICA8JS0tIGlmIGFscmVhZHkgY3VzdG9tLCBhbiB1cGRhdGUgbXVzdCBtZWFuIGFuIGltcG9ydC4gLS0lPgotICAgICAgICA8czppZiB0ZXN0PSJjdXN0b21UaGVtZSI+CisgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKworICAgIDxkaXYgaWQ9InNoYXJlZE5vQ2hhbmdlIiBzdHlsZT0iZGlzcGxheTpub25lOyI+CisKKyAgICAgICAgPCUtLSB5b3UgaGF2ZSBzaGFyZWQgdGhlbWUgWCAtLSU+CisgICAgICAgIDxwIGNsYXNzPSJsZWFkIj4KKyAgICAgICAgICAgIDxzOnRleHQgbmFtZT0idGhlbWVFZGl0b3IueW91ckN1cnJlbnRUaGVtZSIvPgorICAgICAgICAgICAgPGI+PHM6cHJvcGVydHkgdmFsdWU9ImFjdGlvbldlYmxvZy50aGVtZS5uYW1lIi8+PC9iPgorICAgICAgICAgICAgPHM6aWYgdGVzdD0iJXtzaGFyZWRUaGVtZUN1c3RvbVN0eWxlc2hlZXR9Ij4KKyAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InRoZW1lRWRpdG9yLnlvdXJDdXN0b21TdHlsZXNoZWV0Ii8+CisgICAgICAgICAgICA8L3M6aWY+CisgICAgICAgICAgICA8czplbHNlPgorICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0idGhlbWVFZGl0b3IueW91clRoZW1lU3R5bGVTaGVldCIvPgorICAgICAgICAgICAgPC9zOmVsc2U+CisgICAgICAgIDwvcD4KKworICAgIDwvZGl2PgorCisgICAgPCUtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tJT4KKworICAgIDxkaXYgaWQ9InRoZW1lQ2hvb3NlciIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorCisgICAgICAgIDwlLS0gdGhlbWUgc2VsZWN0b3Igd2l0aCBwcmV2aWV3IGltYWdlIC0tJT4KKyAgICAgICAgPHAgY2xhc3M9ImxlYWQiPjxzOnRleHQgbmFtZT0idGhlbWVFZGl0b3Iuc2VsZWN0VGhlbWUiLz48L3A+CisgICAgICAgIDxwPgorICAgICAgICAgICAgPHM6c2VsZWN0IGlkPSJ0aGVtZVNlbGVjdG9yIiBuYW1lPSJzZWxlY3RlZFRoZW1lSWQiIGxpc3Q9InRoZW1lcyIgc3R5bGU9IndpZHRoOjIwZW0iCisgICAgICAgICAgICAgICAgbGlzdEtleT0iaWQiIGxpc3RWYWx1ZT0ibmFtZSIgc2l6ZT0iMSIKKyAgICAgICAgICAgICAgICBvbmNoYW5nZT0icHJvcG9zZVNoYXJlZFRoZW1lQ2hhbmdlKHRoaXNbc2VsZWN0ZWRJbmRleF0udmFsdWUpIi8+CisgICAgICAgIDwvcD4KKyAgICAgICAgPHA+PHM6dGV4dCBuYW1lPSJ0aGVtZUVkaXRvci50aGlzVGhlbWUiLz4gPHAgaWQ9InRoZW1lRGVzY3JpcHRpb24iPjwvcD4KKyAgICAgICAgPHA+PGltZyBpZD0idGhlbWVUaHVtYm5haWwiIHNyYz0iIiBjbGFzcz0iaW1nLXJlc3BvbnNpdmUgaW1nLXRodW1ibmFpbCIgc3R5bGU9Im1heC13aWR0aDogMzBlbSIgLz48L3A+CisKKyAgICA8L2Rpdj4KKworICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CisKKyAgICA8ZGl2IGlkPSJzaGFyZWRDaGFuZ2VUb1NoYXJlZCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorCisgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0LXdhcm5pbmciIHN0eWxlPSJtYXJnaW4tdG9wOjNlbTsgbWFyZ2luLWJvdHRvbToyZW07IHBhZGRpbmc6IDFlbSI+CisgICAgICAgICAgICA8czp0ZXh0IG5hbWU9InRoZW1lRWRpdG9yLnByb3Bvc2VkU2hhcmVkVGhlbWVDaGFuZ2UiLz4KKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPCUtLSBQcmV2aWV3IGFuZCBVcGRhdGUgYnV0dG9ucyAtLSU+CisgICAgICAgIDxwPiA8czp0ZXh0IG5hbWU9InRoZW1lRWRpdG9yLnByZXZpZXdEZXNjcmlwdGlvbiIvPiA8L3A+CisgICAgICAgIDxpbnB1dCB0eXBlPSJidXR0b24iIG5hbWU9InRoZW1lUHJldmlldyIgY2xhc3M9ImJ0biIKKyAgICAgICAgICAgIHZhbHVlPSI8czp0ZXh0IG5hbWU9J3RoZW1lRWRpdG9yLnByZXZpZXcnIC8+IgorICAgICAgICAgICAgb25jbGljaz0iZnVsbFByZXZpZXcoJCgnI3RoZW1lU2VsZWN0b3InKS5nZXQoMCkpIi8+CisKKyAgICAgICAgPHM6c3VibWl0IGNzc0NsYXNzPSJidG4gYnRuLWRlZmF1bHQiIHZhbHVlPSIle2dldFRleHQoJ3RoZW1lRWRpdG9yLnNhdmUnKX0iLz4KKworICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjYW5jZWxDaGFuZ2VzKCkiIHZhbHVlPSI8czp0ZXh0IG5hbWU9J2dlbmVyaWMuY2FuY2VsJy8+IiAvPgorCisgICAgPC9kaXY+CisKKyAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgorCisgICAgPGRpdiBpZD0ic2hhcmVkQ2hhbmdlVG9DdXN0b20iIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKworICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydC13YXJuaW5nIiBzdHlsZT0ibWFyZ2luLXRvcDozZW07IG1hcmdpbi1ib3R0b206MmVtOyBwYWRkaW5nOiAxZW0iPgorICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ0aGVtZUVkaXRvci5wcm9wb3NlZFNoYXJlZENoYW5nZVRvQ3VzdG9tIi8+CisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxzOmlmIHRlc3Q9ImZpcnN0Q3VzdG9taXphdGlvbiI+CiAgICAgICAgICAgICA8cD4KLSAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0id2FybmluZyI+PHM6dGV4dCBuYW1lPSJ0aGVtZUVkaXRvci5pbXBvcnRXYXJuaW5nIiAvPjwvc3Bhbj4KLSAgICAgICAgICAgICAgICA8czpoaWRkZW4gbmFtZT0iaW1wb3J0VGhlbWUiIHZhbHVlPSJ0cnVlIiAvPgorICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0idGhlbWVFZGl0b3IuaW1wb3J0UmVxdWlyZWQiLz4KKyAgICAgICAgICAgICAgICA8czpoaWRkZW4gbmFtZT0iaW1wb3J0VGhlbWUiIHZhbHVlPSJ0cnVlIi8+CiAgICAgICAgICAgICA8L3A+CiAgICAgICAgIDwvczppZj4KLSAgICAgICAgPCUtLSBzaGFyZWQsIG1heSBiZSByZXF1aXJlZCB0byBkbyBhbiBpbXBvcnQgaWYgbm8gY3VzdG9tIHRlbXBsYXRlcyBwcmVzZW50IC0tJT4KICAgICAgICAgPHM6ZWxzZT4KLSAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImZpcnN0Q3VzdG9taXphdGlvbiI+Ci0gICAgICAgICAgICAgICAgPHA+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0idGhlbWVFZGl0b3IuaW1wb3J0UmVxdWlyZWQiIC8+Ci0gICAgICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJpbXBvcnRUaGVtZSIgdmFsdWU9InRydWUiIC8+Ci0gICAgICAgICAgICAgICAgPC9wPgotICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgPHM6ZWxzZT4KLSAgICAgICAgICAgICAgICA8JS0tIFVzZXIgaGFzIG9wdGlvbiBub3QganVzdCB0byBzd2l0Y2ggZnJvbSBzaGFyZWQgdG8gY3VzdG9tIGJ1dCBhbHNvIG92ZXJyaWRlIHByZXNlbnQgY3VzdG9tIHRlbXBsYXRlcyAtLSU+Ci0gICAgICAgICAgICAgICAgPHM6Y2hlY2tib3ggbmFtZT0iaW1wb3J0VGhlbWUiLz4gPHM6dGV4dCBuYW1lPSJ0aGVtZUVkaXRvci5pbXBvcnRBbmRPdmVyd3JpdGVUZW1wbGF0ZXMiIC8+Ci0gICAgICAgICAgICAgICAgICAgIDx0YWdzOmhlbHAga2V5PSJ0aGVtZUVkaXRvci5pbXBvcnRBbmRPdmVyd3JpdGVUZW1wbGF0ZXMudG9vbHRpcCIvPgotICAgICAgICAgICAgPC9zOmVsc2U+CisgICAgICAgICAgICA8cD48czp0ZXh0IG5hbWU9InRoZW1lRWRpdG9yLmV4aXN0aW5nVGVtcGxhdGVzV2FybmluZyIvPjwvcD4KKyAgICAgICAgICAgIDxzOmNoZWNrYm94IG5hbWU9ImltcG9ydFRoZW1lIiBsYWJlbD0iJXtnZXRUZXh0KCd0aGVtZUVkaXRvci5pbXBvcnRBbmRPdmVyd3JpdGVUZW1wbGF0ZXMnKX0iLz4KICAgICAgICAgPC9zOmVsc2U+CisKKyAgICAgICAgPCUtLSBVcGRhdGUgYnV0dG9uIC0tJT4KKyAgICAgICAgPHM6c3VibWl0IGNzc0NsYXNzPSJidG4gYnRuLWRlZmF1bHQiIHZhbHVlPSIle2dldFRleHQoJ3RoZW1lRWRpdG9yLnNhdmUnKX0iLz4KKworICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIiBvbmNsaWNrPSJjYW5jZWxDaGFuZ2VzKCkiIHZhbHVlPSI8czp0ZXh0IG5hbWU9J2dlbmVyaWMuY2FuY2VsJy8+IiAvPgorCiAgICAgPC9kaXY+CiAKLSAgICA8ZGl2IGlkPSJ0aGVtZU9wdGlvbmVyIiBjbGFzcz0ib3B0aW9uZXIiIG5nLWFwcD0idGhlbWVTZWxlY3RNb2R1bGUiIG5nLWNvbnRyb2xsZXI9InRoZW1lQ29udHJvbGxlciI+Ci0gICAgICAgIDxwPgotICAgICAgICAgICAgPHNlbGVjdCBpZD0idGhlbWVTZWxlY3RvciIgbmFtZT0ic2VsZWN0ZWRUaGVtZUlkIiBzaXplPSIxIgotICAgICAgICAgICAgbmctbW9kZWw9InNlbGVjdGVkVGhlbWUiIG5nLW9wdGlvbnM9InRoZW1lIGFzIHRoZW1lLm5hbWUgZm9yIHRoZW1lIGluIHRoZW1lcyB0cmFjayBieSB0aGVtZS5pZCI+PC9zZWxlY3Q+Ci0gICAgICAgIDwvcD4KKyAgICA8JS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0lPgogCi0gICAgICAgIDxwPnt7IHNlbGVjdGVkVGhlbWUuZGVzY3JpcHRpb24gfX08L3A+Ci0gICAgICAgIDxwPgotICAgICAgICAgICAgPGltZyBuZy1zcmM9IjxzOnByb3BlcnR5IHZhbHVlPSdzaXRlVVJMJy8+e3sgc2VsZWN0ZWRUaGVtZS5wcmV2aWV3UGF0aCB9fSIvPgotICAgICAgICA8L3A+Ci0gICAgICAgIDxwPgotICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ0aGVtZUVkaXRvci5wcmV2aWV3RGVzY3JpcHRpb24iIC8+Ci0gICAgICAgIDwvcD4KKyAgICA8ZGl2IGlkPSJjdXN0b21Ob0NoYW5nZSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgorICAgICAgICA8cCBjbGFzcz0ibGVhZCI+PHM6dGV4dCBuYW1lPSJ0aGVtZUVkaXRvci55b3VBcmVVc2luZ0FDdXN0b21UaGVtZSIvPjwvcD4KICAgICA8L2Rpdj4KIAotICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wiPgotICAgICAgICA8c3BhbiBzdHlsZT0icGFkZGluZy1sZWZ0OjdweCI+Ci0gICAgICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJ0aGVtZVByZXZpZXciCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9IjxzOnRleHQgbmFtZT0ndGhlbWVFZGl0b3IucHJldmlldycgLz4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jbGljaz0iZnVsbFByZXZpZXcoJCgnI3RoZW1lU2VsZWN0b3InKS5nZXQoMCkpIiAvPgorICAgIDwlLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLSU+CiAKLSAgICAgICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCd0aGVtZUVkaXRvci5zYXZlJyl9IiAvPgotICAgICAgICA8L3NwYW4+CisgICAgPGRpdiBpZD0iY3VzdG9tQ2hhbmdlVG9TaGFyZWQiIHN0eWxlPSJkaXNwbGF5Om5vbmU7Ij4KKworICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydC13YXJuaW5nIiBzdHlsZT0ibWFyZ2luLXRvcDozZW07IG1hcmdpbi1ib3R0b206MmVtOyBwYWRkaW5nOiAxZW0iPgorICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSJ0aGVtZUVkaXRvci5wcm9wb3NlZENoYW5nZVRvU2hhcmVkIi8+CisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDwlLS0gUHJldmlldyBhbmQgVXBkYXRlIGJ1dHRvbnMgLS0lPgorICAgICAgICA8cD4gPHM6dGV4dCBuYW1lPSJ0aGVtZUVkaXRvci5wcmV2aWV3RGVzY3JpcHRpb24iLz4gPC9wPgorICAgICAgICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBuYW1lPSJ0aGVtZVByZXZpZXciIGNsYXNzPSJidG4iCisgICAgICAgICAgICB2YWx1ZT0iPHM6dGV4dCBuYW1lPSd0aGVtZUVkaXRvci5wcmV2aWV3JyAvPiIKKyAgICAgICAgICAgIG9uY2xpY2s9ImZ1bGxQcmV2aWV3KCQoJyN0aGVtZVNlbGVjdG9yJykuZ2V0KDApKSIvPgorCisgICAgICAgIDxzOnN1Ym1pdCBjc3NDbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IiB2YWx1ZT0iJXtnZXRUZXh0KCd0aGVtZUVkaXRvci5zYXZlJyl9Ii8+CisKKyAgICAgICAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biIgb25jbGljaz0iY2FuY2VsQ2hhbmdlcygpIiB2YWx1ZT0iPHM6dGV4dCBuYW1lPSdnZW5lcmljLmNhbmNlbCcvPiIgLz4KKwogICAgIDwvZGl2PgogCiA8L3M6Zm9ybT4KIAotPCUtLSBpbml0aWFsaXplcyB0aGUgY2hvb3Nlci9vcHRpb25lci90aGVtZUltcG9ydCBkaXNwbGF5IGF0IHBhZ2UgbG9hZCB0aW1lIC0tJT4KLTxzY3JpcHQ+Ci0gICAgYW5ndWxhci5tb2R1bGUoJ3RoZW1lU2VsZWN0TW9kdWxlJywgW10pCi0gICAgICAgIC5jb250cm9sbGVyKCd0aGVtZUNvbnRyb2xsZXInLCBbJyRzY29wZScsIGZ1bmN0aW9uKCRzY29wZSkgewotICAgICAgICAgICAgJC5hamF4KHsgdXJsOiAiPHM6dXJsIHZhbHVlPSd0aGVtZWRhdGEnLz4iLCBhc3luYzpmYWxzZSwKLSAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihkYXRhKSB7ICRzY29wZS50aGVtZXMgPSBkYXRhOyB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImN1c3RvbVRoZW1lIj4KLSAgICAgICAgICAgICAgICB1cGRhdGVUaGVtZUNob29zZXIoJCgnI2N1c3RvbVJhZGlvJykpOwotICAgICAgICAgICAgICAgICRzY29wZS5zZWxlY3RlZFRoZW1lID0gJHNjb3BlLnRoZW1lc1swXTsKLSAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgIDxzOmVsc2U+Ci0gICAgICAgICAgICAgICAgdXBkYXRlVGhlbWVDaG9vc2VyKCQoJyNzaGFyZWRSYWRpbycpKTsKLSAgICAgICAgICAgICAgICAkc2NvcGUuc2VsZWN0ZWRUaGVtZSA9ICQuZ3JlcCgkc2NvcGUudGhlbWVzLCBmdW5jdGlvbihlKXsgcmV0dXJuIGUuaWQgPT0gIjxzOnByb3BlcnR5IHZhbHVlPSd0aGVtZUlkJy8+IjsgfSlbMF07Ci0gICAgICAgICAgICA8L3M6ZWxzZT4KLSAgICB9XSk7Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKKyAgICB2YXIgcHJvcG9zZWRDaGFuZ2VUeXBlID0gIiIKKyAgICB2YXIgcHJvcG9zZWRUaGVtZUlkID0gIiIKKyAgICB2YXIgb3JpZ2luYWxUaGVtZUlkID0gIjxzOnByb3BlcnR5IHZhbHVlPSJ0aGVtZUlkIi8+IgorICAgIHZhciBvcmlnaW5hbFR5cGUgPSAiIgorCisgICAgJC53aGVuKCAkLnJlYWR5ICkudGhlbihmdW5jdGlvbigpIHsKKworICAgICAgICA8czppZiB0ZXN0PSJjdXN0b21UaGVtZSI+CisgICAgICAgIG9yaWdpbmFsVHlwZSA9ICJjdXN0b20iCisgICAgICAgIHVwZGF0ZVZpZXcoJCgnI2N1c3RvbVJhZGlvJykpOworICAgICAgICBwcmV2aWV3SW1hZ2UoJzxzOnByb3BlcnR5IHZhbHVlPSJ0aGVtZXNbMF0uaWQiLz4nKTsKKyAgICAgICAgPC9zOmlmPgorCisgICAgICAgIDxzOmVsc2U+CisgICAgICAgIG9yaWdpbmFsVHlwZSA9ICJzaGFyZWQiCisgICAgICAgIHVwZGF0ZVZpZXcoJCgnI3NoYXJlZFJhZGlvJykpOworICAgICAgICBwcmV2aWV3SW1hZ2UoJzxzOnByb3BlcnR5IHZhbHVlPSJ0aGVtZUlkIi8+Jyk7CisgICAgICAgIDwvczplbHNlPgorICAgIH0pOworCisgICAgZnVuY3Rpb24gcHJvcG9zZVRoZW1lVHlwZUNoYW5nZShzZWxlY3RlZCkgeworCisgICAgICAgIGlmIChzZWxlY3RlZFswXS52YWx1ZSA9PT0gJ3NoYXJlZCcpIHsKKyAgICAgICAgICAgIHByb3Bvc2VkQ2hhbmdlVHlwZSA9ICJzaGFyZWQiCisKKyAgICAgICAgICAgIHRoZW1lU2VsZWN0b3IgPSAkKCcjdGhlbWVTZWxlY3RvcicpWzBdCisgICAgICAgICAgICBpbmRleCA9IHRoZW1lU2VsZWN0b3Iuc2VsZWN0ZWRJbmRleDsKKyAgICAgICAgICAgIHByZXZpZXdJbWFnZSh0aGVtZVNlbGVjdG9yLm9wdGlvbnNbaW5kZXhdLnZhbHVlKQorCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcm9wb3NlZFRoZW1lSWQgPSBvcmlnaW5hbFRoZW1lSWQKKyAgICAgICAgICAgIHByb3Bvc2VkQ2hhbmdlVHlwZSA9ICJjdXN0b20iCisgICAgICAgIH0KKyAgICAgICAgdXBkYXRlVmlldyhzZWxlY3RlZCkKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwcm9wb3NlU2hhcmVkVGhlbWVDaGFuZ2UodGhlbWVJZCkgeworICAgICAgICBwcm9wb3NlZFRoZW1lSWQgPSB0aGVtZUlkOworICAgICAgICBwcmV2aWV3SW1hZ2UodGhlbWVJZCkKKyAgICAgICAgdXBkYXRlVmlldygkKCcjc2hhcmVkUmFkaW8nKSkKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjYW5jZWxDaGFuZ2VzKCkgeworCisgICAgICAgIHByb3Bvc2VkVGhlbWVJZCA9IG9yaWdpbmFsVGhlbWVJZDsKKyAgICAgICAgcHJvcG9zZWRDaGFuZ2VUeXBlID0gb3JpZ2luYWxUeXBlOworCisgICAgICAgIGhpZGVBbGwoKTsKKworICAgICAgICBpZiAoIG9yaWdpbmFsVHlwZSA9PT0gImN1c3RvbSIgKSB7CisgICAgICAgICAgICAkKCIjc2hhcmVkUmFkaW8iKS5wcm9wKCJjaGVja2VkIiwgZmFsc2UpOworICAgICAgICAgICAgJCgiI2N1c3RvbVJhZGlvIikucHJvcCgiY2hlY2tlZCIsIHRydWUpOworICAgICAgICAgICAgdXBkYXRlVmlldygkKCIjY3VzdG9tUmFkaW8iKSk7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICQoIiNzaGFyZWRSYWRpbyIpLnByb3AoImNoZWNrZWQiLCB0cnVlKTsKKyAgICAgICAgICAgICQoIiNjdXN0b21SYWRpbyIpLnByb3AoImNoZWNrZWQiLCBmYWxzZSk7CisgICAgICAgICAgICB1cGRhdGVWaWV3KCQoIiNzaGFyZWRSYWRpbyIpKTsKKyAgICAgICAgICAgICQoIiN0aGVtZVNlbGVjdG9yIikudmFsKG9yaWdpbmFsVGhlbWVJZCkuY2hhbmdlKCk7CisgICAgICAgICAgICBwcmV2aWV3SW1hZ2Uob3JpZ2luYWxUaGVtZUlkKQorICAgICAgICB9CisKKyAgICB9CisKKyAgICBmdW5jdGlvbiBoaWRlQWxsKCkgeworICAgICAgICAkKCcjdGhlbWVDaG9vc2VyJykuaGlkZSgpOworICAgICAgICAkKCcjY3VzdG9tTm9DaGFuZ2UnKS5oaWRlKCk7CisgICAgICAgICQoJyNjdXN0b21DaGFuZ2VUb1NoYXJlZCcpLmhpZGUoKTsKKyAgICAgICAgJCgnI3NoYXJlZENoYW5nZVRvU2hhcmVkJykuaGlkZSgpOworICAgICAgICAkKCcjc2hhcmVkTm9DaGFuZ2UnKS5oaWRlKCk7CisgICAgICAgICQoJyNzaGFyZWRDaGFuZ2VUb0N1c3RvbScpLmhpZGUoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwcmV2aWV3SW1hZ2UodGhlbWVJZCkgeworICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAgdXJsOiAiPHM6dXJsIHZhbHVlPSd0aGVtZWRhdGEnLz4iLAorICAgICAgICAgICAgZGF0YToge3RoZW1lOiB0aGVtZUlkfSwgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHsKKyAgICAgICAgICAgICAgICAkKCcjdGhlbWVEZXNjcmlwdGlvbicpLmh0bWwoZGF0YS5kZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgdGh1bWJuYWlsID0gJCgnI3RoZW1lVGh1bWJuYWlsJyk7CisgICAgICAgICAgICAgICAgdGh1bWJuYWlsLmF0dHIoJ3NyYycsICc8czpwcm9wZXJ0eSB2YWx1ZT0ic2l0ZVVSTCIgLz4nICsgZGF0YS5wcmV2aWV3UGF0aCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZ1bGxQcmV2aWV3KHNlbGVjdG9yKSB7CisgICAgICAgIHNlbGVjdGVkID0gc2VsZWN0b3Iuc2VsZWN0ZWRJbmRleDsKKyAgICAgICAgd2luZG93Lm9wZW4oJzxzOnVybCB2YWx1ZT0iL3JvbGxlci11aS9hdXRob3JpbmcvcHJldmlldy8le2FjdGlvbldlYmxvZy5oYW5kbGV9Ii8+P3RoZW1lPScKKyAgICAgICAgICAgICsgc2VsZWN0b3Iub3B0aW9uc1tzZWxlY3RlZF0udmFsdWUpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHVwZGF0ZVZpZXcoc2VsZWN0ZWQpIHsKKworICAgICAgICBjaGFuZ2VkID0KKyAgICAgICAgICAgICAgIChwcm9wb3NlZFRoZW1lSWQgICAgIT09ICIiICYmIHByb3Bvc2VkVGhlbWVJZCAgICAhPT0gb3JpZ2luYWxUaGVtZUlkKQorICAgICAgICAgICAgfHwgKHByb3Bvc2VkQ2hhbmdlVHlwZSAhPT0gIiIgJiYgcHJvcG9zZWRDaGFuZ2VUeXBlICE9PSBvcmlnaW5hbFR5cGUgKQorCisgICAgICAgIGlmIChzZWxlY3RlZFswXS52YWx1ZSA9PT0gJ3NoYXJlZCcpIHsKKworICAgICAgICAgICAgJCgnI3NoYXJlZENob29zZXInKS5jc3MoImJhY2tncm91bmQiLCAiI2JmYiIpCisgICAgICAgICAgICAkKCcjY3VzdG9tQ2hvb3NlcicpLmNzcygiYmFja2dyb3VuZCIsICJ3aGl0ZSIpCisKKyAgICAgICAgICAgICQoJyN0aGVtZUNob29zZXInKS5zaG93KCk7CisKKyAgICAgICAgICAgICQoJyNjdXN0b21Ob0NoYW5nZScpLmhpZGUoKTsKKyAgICAgICAgICAgICQoJyNjdXN0b21DaGFuZ2VUb1NoYXJlZCcpLmhpZGUoKTsKKworICAgICAgICAgICAgaWYgKCAhY2hhbmdlZCApIHsKKyAgICAgICAgICAgICAgICAkKCcjc2hhcmVkTm9DaGFuZ2UnKS5zaG93KCk7CisgICAgICAgICAgICAgICAgJCgnI3NoYXJlZENoYW5nZVRvU2hhcmVkJykuaGlkZSgpOworICAgICAgICAgICAgICAgICQoJyNzaGFyZWRDaGFuZ2VUb0N1c3RvbScpLmhpZGUoKTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICAgICAgIGlmICggb3JpZ2luYWxUeXBlID09PSAic2hhcmVkIiApIHsKKyAgICAgICAgICAgICAgICAgICAgJCgnI3NoYXJlZENoYW5nZVRvU2hhcmVkJykuc2hvdygpOworICAgICAgICAgICAgICAgICAgICAkKCcjc2hhcmVkQ2hhbmdlVG9DdXN0b20nKS5oaWRlKCk7CisgICAgICAgICAgICAgICAgfSAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICQoJyNjdXN0b21DaGFuZ2VUb1NoYXJlZCcpLnNob3coKTsKKyAgICAgICAgICAgICAgICAgICAgJCgnI3NoYXJlZENoYW5nZVRvU2hhcmVkJykuaGlkZSgpOworICAgICAgICAgICAgICAgICAgICAkKCcjc2hhcmVkQ2hhbmdlVG9DdXN0b20nKS5oaWRlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIH0gZWxzZSB7CisKKyAgICAgICAgICAgICQoJyNzaGFyZWRDaG9vc2VyJykuY3NzKCJiYWNrZ3JvdW5kIiwgIndoaXRlIikKKyAgICAgICAgICAgICQoJyNjdXN0b21DaG9vc2VyJykuY3NzKCJiYWNrZ3JvdW5kIiwgIiNiZmIiKQorCisgICAgICAgICAgICAkKCcjdGhlbWVDaG9vc2VyJykuaGlkZSgpOworCisgICAgICAgICAgICAkKCcjc2hhcmVkTm9DaGFuZ2UnKS5oaWRlKCk7CisgICAgICAgICAgICAkKCcjc2hhcmVkQ2hhbmdlVG9TaGFyZWQnKS5oaWRlKCk7CisgICAgICAgICAgICAkKCcjc2hhcmVkQ2hhbmdlVG9DdXN0b20nKS5oaWRlKCk7CisKKyAgICAgICAgICAgICQoJyNjdXN0b21DaGFuZ2VUb1NoYXJlZCcpLmhpZGUoKTsKKworICAgICAgICAgICAgaWYgKCAhY2hhbmdlZCApIHsKKyAgICAgICAgICAgICAgICAkKCcjY3VzdG9tTm9DaGFuZ2UnKS5zaG93KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICQoJyNzaGFyZWRDaGFuZ2VUb0N1c3RvbScpLnNob3coKTsKKyAgICAgICAgICAgICAgICAkKCcjY3VzdG9tTm9DaGFuZ2UnKS5oaWRlKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH0KKwogPC9zY3JpcHQ+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvV2VibG9nQ29uZmlnLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9XZWJsb2dDb25maWcuanNwCmluZGV4IGZmMDE4N2QuLjE0YTJhOWEgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9XZWJsb2dDb25maWcuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9XZWJsb2dDb25maWcuanNwCkBAIC0xOCwyNjMgKzE4LDE0NSBAQAogPCVAIGluY2x1ZGUgZmlsZT0iL1dFQi1JTkYvanNwcy90YWdsaWJzLXN0cnV0czIuanNwIiAlPgogCiA8cCBjbGFzcz0ic3VidGl0bGUiPgotICAgPHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3Muc3VidGl0bGUiID4KLSAgICAgICA8czpwYXJhbSB2YWx1ZT0iYWN0aW9uV2VibG9nLmhhbmRsZSIgLz4KLSAgIDwvczp0ZXh0PgotPC9wPiAgCi0gICAKLTxzOmZvcm0gYWN0aW9uPSJ3ZWJsb2dDb25maWchc2F2ZSI+Ci0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+CisgICAgPHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3Muc3VidGl0bGUiPgorICAgICAgICA8czpwYXJhbSB2YWx1ZT0iYWN0aW9uV2VibG9nLmhhbmRsZSIvPgorICAgIDwvczp0ZXh0PgorPC9wPgogCi08dGFibGUgY2xhc3M9ImZvcm10YWJsZU5vRGVzYyI+Cis8czpmb3JtIGFjdGlvbj0id2VibG9nQ29uZmlnIXNhdmUiIHRoZW1lPSJib290c3RyYXAiIGNzc0NsYXNzPSJmb3JtLWhvcml6b250YWwiPgorICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0Ii8+CisgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iLz4KIAogICAgIDwlLS0gKioqKiogR2VuZXJhbCBzZXR0aW5ncyAqKioqKiAtLSU+Ci0gICAgCi0gICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0iMyI+PGgyPjxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLmdlbmVyYWxTZXR0aW5ncyIgLz48L2gyPjwvdGQ+Ci0gICAgPC90cj4KLSAgICAKLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLndlYnNpdGVUaXRsZSIgLz4KLSAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+PHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4ubmFtZSIgc2l6ZT0iNDAiLz48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48JS0tIDxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLnRpcC4iIC8+IC0tJT48L3RkPgotICAgIDwvdHI+CiAKLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxzOnRleHQgbmFtZT0iZ2VuZXJpYy50YWdsaW5lIiAvPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxzOnRleHRmaWVsZCBuYW1lPSJiZWFuLnRhZ2xpbmUiIHNpemU9IjQwIiBtYXhsZW5ndGg9IjI1NSIvPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjwlLS0gPHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MudGlwLiIgLz4gLS0lPjwvdGQ+Ci0gICAgPC90cj4KLSAgICAKLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLmljb24iIC8+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+PHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uaWNvbiIgc2l6ZT0iNDAiLz48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48JS0tIDxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLnRpcC4iIC8+IC0tJT48L3RkPgotICAgIDwvdHI+Ci0gICAgCi0gICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5hYm91dCIgLz48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48czp0ZXh0YXJlYSBuYW1lPSJiZWFuLmFib3V0IiByb3dzPSIzIiBjb2xzPSI0MCIvPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjwlLS0gPHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MudGlwLiIgLz4gLS0lPjwvdGQ+Ci0gICAgPC90cj4KLSAgICAKLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLmVtYWlsQWRkcmVzcyIgLz4KLSAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+PHM6dGV4dGZpZWxkIG5hbWU9ImJlYW4uZW1haWxBZGRyZXNzIiBzaXplPSI0MCIvPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjwlLS0gPHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MudGlwLiIgLz4gLS0lPjwvdGQ+Ci0gICAgPC90cj4KLSAgICAKLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLmVkaXRvciIgLz48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj4KLSAgICAgICAgICAgIDxzOnNlbGVjdCBuYW1lPSJiZWFuLmVkaXRvclBhZ2UiIHNpemU9IjEiIGxpc3Q9ImVkaXRvcnNMaXN0IiBsaXN0S2V5PSJpZCIgbGlzdFZhbHVlPSJnZXRUZXh0KG5hbWUpIiAvPgotICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjwlLS0gPHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MudGlwLiIgLz4gLS0lPjwvdGQ+Ci0gICAgPC90cj4KLSAgICAKLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLmFjdGl2ZSIgLz48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48czpjaGVja2JveCBuYW1lPSJiZWFuLmFjdGl2ZSIgLz48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48L3RkPgotICAgIDwvdHI+Ci0gICAgCi0gICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5lbnRyeURpc3BsYXlDb3VudCIgLz48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48czp0ZXh0ZmllbGQgbmFtZT0iYmVhbi5lbnRyeURpc3BsYXlDb3VudCIgc2l6ZT0iNCIvPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjwlLS0gPHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MudGlwLiIgLz4gLS0lPjwvdGQ+Ci0gICAgPC90cj4KKyAgICA8aDM+PHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MuZ2VuZXJhbFNldHRpbmdzIi8+PC9oMz4KIAotICAgIAorICAgIDxzOnRleHRmaWVsZCBsYWJlbD0iJXtnZXRUZXh0KCd3ZWJzaXRlU2V0dGluZ3Mud2Vic2l0ZVRpdGxlJyl9IgorICAgICAgICAgICAgICAgICBuYW1lPSJiZWFuLm5hbWUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjQwIi8+CisKKyAgICA8czp0ZXh0ZmllbGQgbGFiZWw9IiV7Z2V0VGV4dCgnZ2VuZXJpYy50YWdsaW5lJyl9IgorICAgICAgICAgICAgICAgICBuYW1lPSJiZWFuLnRhZ2xpbmUiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjI1NSIvPgorCisgICAgPHM6dGV4dGZpZWxkIGxhYmVsPSIle2dldFRleHQoJ3dlYnNpdGVTZXR0aW5ncy5pY29uJyl9IgorICAgICAgICAgICAgICAgICBuYW1lPSJiZWFuLmljb24iIHNpemU9IjMwIiBtYXhsZW5ndGg9IjQwIi8+CisKKyAgICA8czp0ZXh0YXJlYSBsYWJlbD0iJXtnZXRUZXh0KCd3ZWJzaXRlU2V0dGluZ3MuYWJvdXQnKX0iCisgICAgICAgICAgICAgICAgbmFtZT0iYmVhbi5hYm91dCIgcm93cz0iMyIgY29scz0iNDAgIi8+CisKKyAgICA8czp0ZXh0ZmllbGQgbGFiZWw9IiV7Z2V0VGV4dCgnd2Vic2l0ZVNldHRpbmdzLmVtYWlsQWRkcmVzcycpfSIKKyAgICAgICAgICAgICAgICAgbmFtZT0iYmVhbi5lbWFpbEFkZHJlc3MiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjQwIi8+CisKKyAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi5lZGl0b3JQYWdlIiBsYWJlbD0iJXtnZXRUZXh0KCd3ZWJzaXRlU2V0dGluZ3MuZWRpdG9yJyl9IgorICAgICAgICAgICAgICBsaXN0PSJlZGl0b3JzTGlzdCIgbGlzdEtleT0iaWQiIGxpc3RWYWx1ZT0iZ2V0VGV4dChuYW1lKSIvPgorCisgICAgPHM6dGV4dGZpZWxkIHR5cGU9Im51bWJlciIgbGFiZWw9IiV7Z2V0VGV4dCgnd2Vic2l0ZVNldHRpbmdzLmVudHJ5RGlzcGxheUNvdW50Jyl9IgorICAgICAgICAgICAgICAgICBuYW1lPSJiZWFuLmVudHJ5RGlzcGxheUNvdW50IiBzaXplPSI0Ii8+CisKKyAgICA8czpjaGVja2JveCBsYWJlbD0iJXtnZXRUZXh0KCd3ZWJzaXRlU2V0dGluZ3MuYWN0aXZlJyl9IgorICAgICAgICAgICAgICAgIG5hbWU9ImJlYW4uYWN0aXZlIiBzaXplPSIzMCIgbWF4bGVuZ3RoPSI0MCIvPgorCiAgICAgPCUtLSAqKioqKiBMYW5ndWFnZS9pMThuIHNldHRpbmdzICoqKioqIC0tJT4KLSAgICAKLSAgICAKLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPSIzIj48aDI+PHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MubGFuZ3VhZ2VTZXR0aW5ncyIgLz48L2gyPjwvdGQ+Ci0gICAgPC90cj4KLSAgICAKLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLmVuYWJsZU11bHRpTGFuZyIgLz48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48czpjaGVja2JveCBuYW1lPSJiZWFuLmVuYWJsZU11bHRpTGFuZyIgLz48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48JS0tIDxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLnRpcC4iIC8+IC0tJT48L3RkPgotICAgIDwvdHI+Ci0gICAgCi0gICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5zaG93QWxsTGFuZ3MiIC8+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+PHM6Y2hlY2tib3ggbmFtZT0iYmVhbi5zaG93QWxsTGFuZ3MiIC8+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+PCUtLSA8czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy50aXAuIiAvPiAtLSU+PC90ZD4KLSAgICA8L3RyPgotICAgIAotICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PHM6dGV4dCBuYW1lPSJjcmVhdGVXZWJzaXRlLmxvY2FsZSIgLz4KLSAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+Ci0gICAgICAgICAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi5sb2NhbGUiIHNpemU9IjEiIGxpc3Q9ImxvY2FsZXNMaXN0IiBsaXN0VmFsdWU9ImRpc3BsYXlOYW1lIiAvPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48JS0tIDxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLnRpcC4iIC8+IC0tJT48L3RkPgotICAgIDwvdHI+Ci0gICAgCi0gICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48czp0ZXh0IG5hbWU9ImNyZWF0ZVdlYnNpdGUudGltZVpvbmUiIC8+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPgotICAgICAgICAgICAgPHM6c2VsZWN0IG5hbWU9ImJlYW4udGltZVpvbmUiIHNpemU9IjEiIGxpc3Q9InRpbWVab25lc0xpc3QiIC8+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjwlLS0gPHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MudGlwLiIgLz4gLS0lPjwvdGQ+Ci0gICAgPC90cj4KLSAgICAKLSAgICAKLSAgICA8JS0tICoqKioqIENvbW1lbnQgc2V0dGluZ3MgKioqKiogLS0lPgotICAgIAotICAgIAotICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49IjMiPjxoMj48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5jb21tZW50U2V0dGluZ3MiIC8+PC9oMj48L3RkPgotICAgIDwvdHI+CiAKLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLmFsbG93Q29tbWVudHMiIC8+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+PHM6Y2hlY2tib3ggbmFtZT0iYmVhbi5hbGxvd0NvbW1lbnRzIiAvPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjwlLS0gPHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MudGlwLiIgLz4gLS0lPjwvdGQ+Ci0gICAgPC90cj4KLSAgICAKLSAgICA8czppZiB0ZXN0PSIhZ2V0Qm9vbGVhblByb3AoJ3VzZXJzLm1vZGVyYXRpb24ucmVxdWlyZWQnKSI+Ci0gICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5tb2RlcmF0ZUNvbW1lbnRzIiAvPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxzOmNoZWNrYm94IG5hbWU9ImJlYW4ubW9kZXJhdGVDb21tZW50cyIgLz48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48JS0tIDxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLnRpcC4iIC8+IC0tJT48L3RkPgotICAgIDwvdHI+Ci0gICAgPC9zOmlmPgotICAgIAorICAgIDxoMz48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5sYW5ndWFnZVNldHRpbmdzIi8+PC9oMz4KKworICAgIDxzOnNlbGVjdCBuYW1lPSJiZWFuLmxvY2FsZSIgbGlzdD0ibG9jYWxlc0xpc3QiIGxpc3RWYWx1ZT0iZGlzcGxheU5hbWUiCisgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ2NyZWF0ZVdlYnNpdGUubG9jYWxlJyl9Ii8+CisKKyAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi50aW1lWm9uZSIgbGlzdD0idGltZVpvbmVzTGlzdCIKKyAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgnY3JlYXRlV2Vic2l0ZS50aW1lWm9uZScpfSIvPgorCisgICAgPHM6Y2hlY2tib3ggbmFtZT0iYmVhbi5lbmFibGVNdWx0aUxhbmciCisgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgnd2Vic2l0ZVNldHRpbmdzLmVuYWJsZU11bHRpTGFuZycpfSIvPgorCisgICAgPHM6Y2hlY2tib3ggbmFtZT0iYmVhbi5zaG93QWxsTGFuZ3MiCisgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgnd2Vic2l0ZVNldHRpbmdzLnNob3dBbGxMYW5ncycpfSIvPgorCisgICAgPCUtLSAqKioqKiBDb21tZW50IHNldHRpbmdzICoqKioqIC0tJT4KKworICAgIDxoMz48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5jb21tZW50U2V0dGluZ3MiLz48L2gzPgorCisgICAgPHM6Y2hlY2tib3ggbmFtZT0iYmVhbi5hbGxvd0NvbW1lbnRzIgorICAgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ3dlYnNpdGVTZXR0aW5ncy5hbGxvd0NvbW1lbnRzJyl9Ii8+CisKICAgICA8czppZiB0ZXN0PSJnZXRCb29sZWFuUHJvcCgndXNlcnMuY29tbWVudHMuZW1haWxub3RpZnknKSI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLmVtYWlsQ29tbWVudHMiIC8+PC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxzOmNoZWNrYm94IG5hbWU9ImJlYW4uZW1haWxDb21tZW50cyIvPjwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48JS0tIDxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLnRpcC4iIC8+IC0tJT48L3RkPgotICAgICAgICA8L3RyPgorICAgICAgICA8czpjaGVja2JveCBuYW1lPSJiZWFuLmVtYWlsQ29tbWVudHMiCisgICAgICAgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ3dlYnNpdGVTZXR0aW5ncy5lbWFpbENvbW1lbnRzJyl9Ii8+CisgICAgPC9zOmlmPgorCisgICAgPHM6aWYgdGVzdD0iIWdldEJvb2xlYW5Qcm9wKCd1c2Vycy5tb2RlcmF0aW9uLnJlcXVpcmVkJykiPgorICAgICAgICA8czpjaGVja2JveCBuYW1lPSJiZWFuLm1vZGVyYXRlQ29tbWVudHMiCisgICAgICAgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ3dlYnNpdGVTZXR0aW5ncy5tb2RlcmF0ZUNvbW1lbnRzJyl9Ii8+CiAgICAgPC9zOmlmPgogCiAgICAgPCUtLSAqKioqKiBEZWZhdWx0IGVudHJ5IGNvbW1lbnQgc2V0dGluZ3MgKioqKiogLS0lPgogCi0gICAgPHRyPgotICAgICAgICA8dGQgY29sc3Bhbj0iMyI+PGgyPjxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLmRlZmF1bHRDb21tZW50U2V0dGluZ3MiIC8+PC9oMj48L3RkPgotICAgIDwvdHI+Ci0gICAgCi0gICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5kZWZhdWx0QWxsb3dDb21tZW50cyIgLz48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48czpjaGVja2JveCBuYW1lPSJiZWFuLmRlZmF1bHRBbGxvd0NvbW1lbnRzIiAvPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjwlLS0gPHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MudGlwLiIgLz4gLS0lPjwvdGQ+Ci0gICAgPC90cj4KLSAgICAKLSAgICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5kZWZhdWx0Q29tbWVudERheXMiIC8+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJmaWVsZCI+Ci0gICAgICAgICAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi5kZWZhdWx0Q29tbWVudERheXMiIGxpc3Q9ImNvbW1lbnREYXlzTGlzdCIgc2l6ZT0iMSIgbGlzdEtleT0ia2V5IiBsaXN0VmFsdWU9InZhbHVlIiAvPgotICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48JS0tIDxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLnRpcC4iIC8+IC0tJT48L3RkPgotICAgIDwvdHI+Ci0gICAgCi0gICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5hcHBseUNvbW1lbnREZWZhdWx0cyIgLz48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48czpjaGVja2JveCBuYW1lPSJiZWFuLmFwcGx5Q29tbWVudERlZmF1bHRzIiAvPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjwlLS0gPHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MudGlwLiIgLz4gLS0lPjwvdGQ+Ci0gICAgPC90cj4KKyAgICA8aDM+PHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MuZGVmYXVsdENvbW1lbnRTZXR0aW5ncyIvPjwvaDM+CisKKyAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi5kZWZhdWx0Q29tbWVudERheXMiIGxhYmVsPSIle2dldFRleHQoJ3dlYnNpdGVTZXR0aW5ncy5hcHBseUNvbW1lbnREZWZhdWx0cycpfSIKKyAgICAgICAgICAgICAgbGlzdD0iY29tbWVudERheXNMaXN0IiBsaXN0S2V5PSJrZXkiIGxpc3RWYWx1ZT0idmFsdWUiLz4KKworICAgIDxzOmNoZWNrYm94IG5hbWU9ImJlYW4uZGVmYXVsdEFsbG93Q29tbWVudHMiCisgICAgICAgICAgICAgICAgbGFiZWw9IiV7Z2V0VGV4dCgnd2Vic2l0ZVNldHRpbmdzLmRlZmF1bHRBbGxvd0NvbW1lbnRzJyl9Ii8+CisKKyAgICA8czpjaGVja2JveCBuYW1lPSJiZWFuLmFwcGx5Q29tbWVudERlZmF1bHRzIgorICAgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ3dlYnNpdGVTZXR0aW5ncy5hcHBseUNvbW1lbnREZWZhdWx0cycpfSIvPgogCiAgICAgPCUtLSAqKioqKiBCbG9nZ2VyIEFQSSBzZXR0aW5nIHNldHRpbmdzICoqKioqIC0tJT4KLSAgICAKLSAgICA8dHI+Ci0gICAgICAgIDx0ZCBjb2xzcGFuPSIzIj48aDI+PHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MuYmxvZ2dlckFwaSIgLz48L2gyPjwvdGQ+Ci0gICAgPC90cj4KIAotICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MuZW5hYmxlQmxvZ2dlckFwaSIgLz48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48czpjaGVja2JveCBuYW1lPSJiZWFuLmVuYWJsZUJsb2dnZXJBcGkiIC8+PC90ZD4KLSAgICAgICAgPHRkIGNsYXNzPSJkZXNjcmlwdGlvbiI+PCUtLSA8czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy50aXAuIiAvPiAtLSU+PC90ZD4KLSAgICA8L3RyPgorICAgIDxoMz48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5ibG9nZ2VyQXBpIi8+PC9oMz4KIAotICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MuYmxvZ2dlckFwaUNhdGVnb3J5IiAvPjwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPgotICAgICAgICAgICAgPHM6c2VsZWN0IG5hbWU9ImJlYW4uYmxvZ2dlckNhdGVnb3J5SWQiIGxpc3Q9IndlYmxvZ0NhdGVnb3JpZXMiIHNpemU9IjEiIGxpc3RLZXk9ImlkIiBsaXN0VmFsdWU9Im5hbWUiIC8+Ci0gICAgICAgIDwvdGQ+Ci0gICAgICAgIDx0ZCBjbGFzcz0iZGVzY3JpcHRpb24iPjwlLS0gPHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MudGlwLiIgLz4gLS0lPjwvdGQ+Ci0gICAgPC90cj4KKyAgICA8czpzZWxlY3QgbmFtZT0iYmVhbi5ibG9nZ2VyQ2F0ZWdvcnlJZCIgbGFiZWw9IiV7Z2V0VGV4dCgnd2Vic2l0ZVNldHRpbmdzLmJsb2dnZXJBcGlDYXRlZ29yeScpfSIKKyAgICAgICAgICAgICAgbGlzdD0id2VibG9nQ2F0ZWdvcmllcyIgbGlzdEtleT0iaWQiIGxpc3RWYWx1ZT0ibmFtZSIvPgorCisgICAgPHM6Y2hlY2tib3ggbmFtZT0iYmVhbi5lbmFibGVCbG9nZ2VyQXBpIgorICAgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ3dlYnNpdGVTZXR0aW5ncy5lbmFibGVCbG9nZ2VyQXBpJyl9Ii8+CiAKICAgICA8JS0tICoqKioqIFBsdWdpbnMgImZvcm1hdHRpbmciIHNldHRpbmdzICoqKioqIC0tJT4KIAotICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49IjMiPjxoMj48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5mb3JtYXR0aW5nIiAvPjwvaDI+PC90ZD4KLSAgICA8L3RyPgorICAgIDxoMz48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5mb3JtYXR0aW5nIi8+PC9oMz4KIAogICAgIDxzOmlmIHRlc3Q9IiFwbHVnaW5zTGlzdC5pc0VtcHR5Ij4KLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MubGFiZWwxIiAvPiA8YnIgLz48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5sYWJlbDIiIC8+PC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPgotICAgICAgICAgICAgICAgIDxzOmNoZWNrYm94bGlzdCB0aGVtZT0icm9sbGVyIiBsaXN0PSJwbHVnaW5zTGlzdCIgbmFtZT0iYmVhbi5kZWZhdWx0UGx1Z2luc0FycmF5IiBsaXN0S2V5PSJuYW1lIiBsaXN0VmFsdWU9Im5hbWUiIC8+Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48JS0tIDxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLnRpcC4iIC8+IC0tJT48L3RkPgotICAgICAgICA8L3RyPgorCisgICAgICAgIDxzOmNoZWNrYm94bGlzdCBsaXN0PSJwbHVnaW5zTGlzdCIgbGFiZWw9IiV7Z2V0VGV4dCgnd2Vic2l0ZVNldHRpbmdzLmxhYmVsMScpfSIKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ImJlYW4uZGVmYXVsdFBsdWdpbnNBcnJheSIgbGlzdEtleT0ibmFtZSIgbGlzdFZhbHVlPSJuYW1lIi8+CisKICAgICA8L3M6aWY+CiAgICAgPHM6ZWxzZT4KLSAgICAgICAgPHM6aGlkZGVuIG5hbWU9ImRlZmF1bHRQbHVnaW5zIiAvPgorICAgICAgICA8czpoaWRkZW4gbmFtZT0iZGVmYXVsdFBsdWdpbnMiLz4KICAgICA8L3M6ZWxzZT4KIAotCiAgICAgPCUtLSAqKioqKiBTcGFtIHByZXZlbnRpb24gc2V0dGluZ3MgKioqKiogLS0lPgotICAgIAotICAgIDx0cj4KLSAgICAgICAgPHRkIGNvbHNwYW49IjMiPjxoMj48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5zcGFtUHJldmVudGlvbiIgLz48L2gyPjwvdGQ+Ci0gICAgPC90cj4KIAotICAgIDx0cj4KLSAgICAgICAgPHRkIGNsYXNzPSJsYWJlbCI+PHM6dGV4dCBuYW1lPSJ3ZWJzaXRlU2V0dGluZ3MuaWdub3JlVXJscyIgLz48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImZpZWxkIj48czp0ZXh0YXJlYSBuYW1lPSJiZWFuLmJsYWNrbGlzdCIgcm93cz0iNyIgY29scz0iNDAiLz48L3RkPgotICAgICAgICA8dGQgY2xhc3M9ImRlc2NyaXB0aW9uIj48JS0tIDxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLnRpcC4iIC8+IC0tJT48L3RkPgotICAgIDwvdHI+CisgICAgPGgzPjxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLnNwYW1QcmV2ZW50aW9uIi8+PC9oMz4KIAorICAgIDxzOnRleHRhcmVhIG5hbWU9ImJlYW4uYmxhY2tsaXN0IiByb3dzPSI3IiBjb2xzPSI0MCIKKyAgICAgICAgICAgICAgICBsYWJlbD0iJXtnZXRUZXh0KCd3ZWJzaXRlU2V0dGluZ3MuYW5hbHl0aWNzVHJhY2tpbmdDb2RlJyl9Ii8+CiAKICAgICA8JS0tICoqKioqIFdlYiBhbmFseXRpY3Mgc2V0dGluZ3MgKioqKiogLS0lPgogCiAgICAgPHM6aWYgdGVzdD0iZ2V0Qm9vbGVhblByb3AoJ2FuYWx5dGljcy5jb2RlLm92ZXJyaWRlLmFsbG93ZWQnKSI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj48aDI+PHM6dGV4dCBuYW1lPSJjb25maWdGb3JtLndlYkFuYWx5dGljcyIgLz48L2gyPjwvdGQ+Ci0gICAgICAgIDwvdHI+CisgICAgICAgIDxoMz48czp0ZXh0IG5hbWU9ImNvbmZpZ0Zvcm0ud2ViQW5hbHl0aWNzIi8+PC9oMz4KIAotICAgICAgICA8dHI+Ci0gICAgICAgICAgICA8dGQgY2xhc3M9ImxhYmVsIj48czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5hbmFseXRpY3NUcmFja2luZ0NvZGUiIC8+PC90ZD4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iZmllbGQiPjxzOnRleHRhcmVhIG5hbWU9ImJlYW4uYW5hbHl0aWNzQ29kZSIgcm93cz0iMTAiIGNvbHM9IjcwIi8+PC90ZD4KLSAgICAgICAgPC90cj4KKyAgICAgICAgPHM6dGV4dGFyZWEgbmFtZT0iYmVhbi5hbmFseXRpY3NDb2RlIiByb3dzPSIxMCIgY29scz0iNzAiCisgICAgICAgICAgICAgICAgICAgIGxhYmVsPSIle2dldFRleHQoJ3dlYnNpdGVTZXR0aW5ncy5hbmFseXRpY3NUcmFja2luZ0NvZGUnKX0iLz4KICAgICA8L3M6aWY+CiAKLTwvdGFibGU+Ci0KLTxiciAvPgotPGRpdiBjbGFzcz0iY29udHJvbCI+Ci0gICAgPHM6c3VibWl0IHZhbHVlPSIle2dldFRleHQoJ3dlYnNpdGVTZXR0aW5ncy5idXR0b24udXBkYXRlJyl9IiAvPgotPC9kaXY+Ci0gICAgICAgIAotPGJyIC8+Ci08YnIgLz4KKyAgICA8ZGl2IGNsYXNzPSJjb250cm9sIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo1ZW0iPgorICAgICAgICA8czpzdWJtaXQgY3NzQ2xhc3M9ImJ0biBidG4tc3VjY2VzcyIgdmFsdWU9IiV7Z2V0VGV4dCgnd2Vic2l0ZVNldHRpbmdzLmJ1dHRvbi51cGRhdGUnKX0iLz4KKyAgICA8L2Rpdj4KIAogPC9zOmZvcm0+CiAKIAotPHM6Zm9ybSBhY3Rpb249IndlYmxvZ1JlbW92ZSI+Ci0JPHM6aGlkZGVuIG5hbWU9InNhbHQiIC8+Ci0gICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+Ci0gICAgCi0gICAgPGgyPjxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLnJlbW92ZVdlYnNpdGVIZWFkaW5nIiAvPjwvaDI+Ci0gICAgCi0gICAgPHA+Ci0gICAgICAgIDxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLnJlbW92ZVdlYnNpdGUiIC8+PGJyLz48YnIvPgotICAgICAgICA8c3BhbiBjbGFzcz0id2FybmluZyI+Ci0gICAgICAgICAgICA8czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5yZW1vdmVXZWJzaXRlV2FybmluZyIgLz4KLSAgICAgICAgPC9zcGFuPgotICAgIDwvcD4KLSAgICAKLSAgICA8YnIgLz4KLSAgICAKLSAgICA8czpzdWJtaXQgdmFsdWU9IiV7Z2V0VGV4dCgnd2Vic2l0ZVNldHRpbmdzLmJ1dHRvbi5yZW1vdmUnKX0iIC8+Ci0gICAgCi0gICAgPGJyIC8+Ci0gICAgPGJyIC8+ICAgIAotICAgIDxiciAvPgotICAgIAorPHM6Zm9ybSBhY3Rpb249IndlYmxvZ1JlbW92ZSIgY3NzQ2xhc3M9ImZvcm0taG9yaXpvbnRhbCI+CisgICAgPHM6aGlkZGVuIG5hbWU9InNhbHQiLz4KKyAgICA8czpoaWRkZW4gbmFtZT0id2VibG9nIiB2YWx1ZT0iJXthY3Rpb25XZWJsb2cuaGFuZGxlfSIvPgorCisgICAgPGgzPjxzOnRleHQgbmFtZT0id2Vic2l0ZVNldHRpbmdzLnJlbW92ZVdlYnNpdGVIZWFkaW5nIi8+PC9oMz4KKyAgICA8czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5yZW1vdmVXZWJzaXRlIi8+PGJyLz48YnIvPgorICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWRhbmdlciIgcm9sZT0iYWxlcnQiPgorICAgICAgICA8czp0ZXh0IG5hbWU9IndlYnNpdGVTZXR0aW5ncy5yZW1vdmVXZWJzaXRlV2FybmluZyIvPgorICAgIDwvZGl2PgorICAgIDxzOnN1Ym1pdCBjc3NDbGFzcz0iYnRuIGJ0bi1kYW5nZXIiIHZhbHVlPSIle2dldFRleHQoJ3dlYnNpdGVTZXR0aW5ncy5idXR0b24ucmVtb3ZlJyl9Ii8+CisKIDwvczpmb3JtPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL1dlYmxvZ1JlbW92ZUNvbmZpcm0uanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvZWRpdG9yL1dlYmxvZ1JlbW92ZUNvbmZpcm0uanNwCmluZGV4IGYxOTdhYTAuLmRiNGJlNDAgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL2VkaXRvci9XZWJsb2dSZW1vdmVDb25maXJtLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy9lZGl0b3IvV2VibG9nUmVtb3ZlQ29uZmlybS5qc3AKQEAgLTIxLDcgKzIxLDcgQEAKICAgICA8czp0ZXh0IG5hbWU9IndlYnNpdGVSZW1vdmUuc3VidGl0bGUiIC8+CiA8L3A+CiAKLTxwPgorPHAgc3R5bGU9Im1hcmdpbi1ib3R0b206IDNlbSI+CiAgICAgPHM6dGV4dCBuYW1lPSJ3ZWJzaXRlUmVtb3ZlLnlvdVN1cmUiPiAKICAgICAgICAgPHM6cGFyYW0gdmFsdWU9ImFjdGlvbldlYmxvZy5uYW1lIiAvPgogICAgIDwvczp0ZXh0PgpAQCAtMzIsMjcgKzMyLDMwIEBACiAgICAgPC9zcGFuPgogPC9wPgogCi08cD4KLSAgICA8czp0ZXh0IG5hbWU9IndlYnNpdGVSZW1vdmUud2Vic2l0ZUlkIiAvPiA9IFs8czpwcm9wZXJ0eSB2YWx1ZT0iYWN0aW9uV2VibG9nLmlkIiAvPl0KLSAgICA8YnIgLz4KLSAgICA8czp0ZXh0IG5hbWU9IndlYnNpdGVSZW1vdmUud2Vic2l0ZU5hbWUiIC8+ID0gWzxzOnByb3BlcnR5IHZhbHVlPSJhY3Rpb25XZWJsb2cubmFtZSIgLz5dCi08L3A+Cis8ZGl2IGNsYXNzPSJyb3ciPgorICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0yIj4KIAotPHRhYmxlPgotICAgIDx0cj4KLSAgICAgICAgPHRkPgotICAgICAgICAgICAgPHM6Zm9ybSBhY3Rpb249IndlYmxvZ1JlbW92ZSFyZW1vdmUiPgotCQkJCTxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgotICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIle2FjdGlvbldlYmxvZy5oYW5kbGV9IiAvPgotICAgICAgICAgICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLnllcycpfSIgLz4KLSAgICAgICAgICAgIDwvczpmb3JtPgotICAgICAgICA8L3RkPgotICAgICAgICA8dGQ+Ci0gICAgICAgICAgICA8czpmb3JtIGFjdGlvbj0id2VibG9nQ29uZmlnIiBtZXRob2Q9InBvc3QiPgotCQkJCTxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgotICAgICAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJ3ZWJsb2ciIHZhbHVlPSIle2FjdGlvbldlYmxvZy5oYW5kbGV9IiAvPgotICAgICAgICAgICAgICAgIDxzOnN1Ym1pdCB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLm5vJyl9IiAvPgotICAgICAgICAgICAgPC9zOmZvcm0+Ci0gICAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLTwvdGFibGU+CisgICAgICAgIDxzOmZvcm0gYWN0aW9uPSJ3ZWJsb2dSZW1vdmUhcmVtb3ZlIiB0aGVtZT0iYm9vdHN0cmFwIiBjc3NDbGFzcz0iZm9ybS1ob3Jpem9udGFsIj4KKyAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgorICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+CisgICAgICAgICAgICA8czpzdWJtaXQgY3NzQ2xhc3M9ImJ0biBidG4tZGFuZ2VyIiB2YWx1ZT0iJXtnZXRUZXh0KCdnZW5lcmljLnllc1JlbW92ZScpfSIgLz4KKyAgICAgICAgPC9zOmZvcm0+CisKKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMiI+CisKKyAgICAgICAgPHM6Zm9ybSBhY3Rpb249IndlYmxvZ0NvbmZpZyIgbWV0aG9kPSJwb3N0IiB0aGVtZT0iYm9vdHN0cmFwIiBjc3NDbGFzcz0iZm9ybS1ob3Jpem9udGFsIj4KKyAgICAgICAgICAgIDxzOmhpZGRlbiBuYW1lPSJzYWx0IiAvPgorICAgICAgICAgICAgPHM6aGlkZGVuIG5hbWU9IndlYmxvZyIgdmFsdWU9IiV7YWN0aW9uV2VibG9nLmhhbmRsZX0iIC8+CisgICAgICAgICAgICA8czpzdWJtaXQgY3NzQ2xhc3M9ImJ0biBidG4tc3VjY2VzcyIgdmFsdWU9IiV7Z2V0VGV4dCgnZ2VuZXJpYy5jYW5jZWwnKX0iIC8+CisgICAgICAgIDwvczpmb3JtPgorCisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0iY29sLW1kLTgiPjwvZGl2PgorPC9kaXY+CisKKworCisKKworCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90YWdsaWJzLXN0cnV0czIuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcAppbmRleCAyNTIwMTExLi45N2Q0NjM3IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90YWdsaWJzLXN0cnV0czIuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AKQEAgLTE1LDE0ICsxNSwyMCBAQAogICBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCiAgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KIC0tJT4KLTxtZXRhIGNoYXJzZXQ9IlVURi04Ij4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04Ij4KLTwlIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOCIpOyAlPgotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOCIgJT4KKworPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgJT4KKwogPCVAIHRhZ2xpYiB1cmk9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanNwL2pzdGwvY29yZSIgcHJlZml4PSJjIiAlPgogPCVAIHRhZ2xpYiB1cmk9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanNwL2pzdGwvZm10IiAgcHJlZml4PSJmbXQiICU+Ci08JUAgdGFnbGliIHVyaT0iaHR0cDovL3RpbGVzLmFwYWNoZS5vcmcvdGFncy10aWxlcyIgcHJlZml4PSJ0aWxlcyIgJT4KIDwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzcC9qc3RsL2Z1bmN0aW9ucyIgcHJlZml4PSJmbiIgJT4KLTwlQCB0YWdsaWIgdXJpPSIvc3RydXRzLXRhZ3MiIHByZWZpeD0icyIgJT4KKworPCVAIHRhZ2xpYiB1cmk9Imh0dHA6Ly90aWxlcy5hcGFjaGUub3JnL3RhZ3MtdGlsZXMiIHByZWZpeD0idGlsZXMiICU+CiA8JUAgdGFnbGliIHVyaT0iaHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy90YWdsaWJzL3N0cmluZy0xLjEiIHByZWZpeD0ic3RyIiAlPgotPCVAIHRhZ2xpYiB0YWdkaXI9Ii9XRUItSU5GL3RhZ3MiIHByZWZpeD0idGFncyIlPgorCis8JUAgdGFnbGliIHVyaT0iL3N0cnV0cy10YWdzIiBwcmVmaXg9InMiICU+Cis8JUAgdGFnbGliIHVyaT0iL3N0cnV0cy1ib290c3RyYXAtdGFncyIgcHJlZml4PSJzYm9vIiAlPgorCis8JUAgdGFnbGliIHRhZ2Rpcj0iL1dFQi1JTkYvdGFncyIgcHJlZml4PSJ0YWdzIiAlPgorCisKKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvYmFubmVySW5zdGFsbGF0aW9uLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL2Jhbm5lckluc3RhbGxhdGlvbi5qc3AKaW5kZXggMmNjZjkyYS4uODc3M2VhNSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvYmFubmVySW5zdGFsbGF0aW9uLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy9iYW5uZXJJbnN0YWxsYXRpb24uanNwCkBAIC0xNywxOCArMTcsMjggQEAKIC0tJT4KIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KIAotPGRpdiBjbGFzcz0iYmFubmVyU3RhdHVzQm94Ij4KLSAgICAKLSAgICA8dGFibGUgY2xhc3M9ImJhbm5lclN0YXR1c0JveCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIj4KLSAgICAgICAgPHRyPgotICAgICAgICAgICAgPHRkIGNsYXNzPSJiYW5uZXJMZWZ0Ij4KLSAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9Imluc3RhbGxlci5iYW5uZXJUaXRsZUxlZnQiIC8+ICAgCi0gICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgCi0gICAgICAgICAgICA8dGQgY2xhc3M9ImJhbm5lclJpZ2h0Ij4KLSAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9Imluc3RhbGxlci5iYW5uZXJUaXRsZVJpZ2h0IiAvPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICA8L3RkPgotICAgICAgICA8L3RyPgotICAgIDwvdGFibGU+Ci0gICAgCi08L2Rpdj4KKzxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZGVmYXVsdCBuYXZiYXItc3RhdGljLXRvcCBuYXZiYXItaW52ZXJzZSI+CisgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KKyAgICAgICAgPGRpdiBpZD0ibmF2YmFyIiBjbGFzcz0ibmF2YmFyLWNvbGxhcHNlIGNvbGxhcHNlIj4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJuYXZiYXItdG9nZ2xlIGNvbGxhcHNlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9IiNuYXZiYXIiIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIiBhcmlhLWNvbnRyb2xzPSJuYXZiYXIiPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3Itb25seSI+VG9nZ2xlIG5hdmlnYXRpb248L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CisgICAgICAgICAgICAgICAgPC9idXR0b24+CisgICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5hdmJhci1icmFuZCIgaHJlZj0iIyI+PHM6dGV4dCBuYW1lPSJpbnN0YWxsZXIuYmFubmVyVGl0bGVMZWZ0IiAvPjwvYT4KKyAgICAgICAgICAgIDwvZGl2PgorCisgICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiBuYXZiYXItbmF2Ij4KKyAgICAgICAgICAgIDwvdWw+CisKKyAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYgbmF2YmFyLXJpZ2h0Ij4KKyAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iPHM6dXJsIHZhbHVlPScvJy8+Ij48czp0ZXh0IG5hbWU9Imluc3RhbGxlci5iYW5uZXJUaXRsZVJpZ2h0IiAvPjwvYT48L2xpPgorICAgICAgICAgICAgPC91bD4KKworICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKzwvbmF2PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvYmFubmVyU3RhdHVzLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL2Jhbm5lclN0YXR1cy5qc3AKaW5kZXggMDNlYTZmOS4uOWMyYjc4ZSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvYmFubmVyU3RhdHVzLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy9iYW5uZXJTdGF0dXMuanNwCkBAIC0xNyw1MCArMTcsMTE5IEBACiAtLSU+CiA8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+CiAKLTxkaXYgY2xhc3M9ImJhbm5lclN0YXR1c0JveCI+Ci0gICAgCi0gICAgPHRhYmxlIGNsYXNzPSJiYW5uZXJTdGF0dXNCb3giIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCI+Ci0gICAgICAgIDx0cj4KLSAgICAgICAgICAgIDx0ZCBjbGFzcz0iYmFubmVyTGVmdCI+Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iYXV0aGVudGljYXRlZFVzZXIgIT0gbnVsbCI+Ci0gICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibWFpblBhZ2UubG9nZ2VkSW5BcyIgLz4KLSAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0ibWVudSIgbmFtZXNwYWNlPSIvcm9sbGVyLXVpIiAvPiI+PHM6cHJvcGVydHkgdmFsdWU9ImF1dGhlbnRpY2F0ZWRVc2VyLnVzZXJOYW1lIi8+PC9hPgotICAgICAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAKKzxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZGVmYXVsdCBuYXZiYXItc3RhdGljLXRvcCBuYXZiYXItaW52ZXJzZSI+CisgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KKyAgICAgICAgPGRpdiBpZD0ibmF2YmFyIiBjbGFzcz0ibmF2YmFyLWNvbGxhcHNlIGNvbGxhcHNlIj4KKworICAgICAgICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyLWhlYWRlciI+CisgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJuYXZiYXItdG9nZ2xlIGNvbGxhcHNlZCIgCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT0iY29sbGFwc2UiIGRhdGEtdGFyZ2V0PSIjbmF2YmFyIiBhcmlhLWV4cGFuZGVkPSJmYWxzZSIgYXJpYS1jb250cm9scz0ibmF2YmFyIj4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNyLW9ubHkiPlRvZ2dsZSBuYXZpZ2F0aW9uPC9zcGFuPgorICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tYmFyIj48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgorICAgICAgICAgICAgICAgIDwvYnV0dG9uPgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9IiMiPjxzOnByb3BlcnR5IHZhbHVlPSIle2dldFByb3AoJ3NpdGUubmFtZScpfSIgLz48L2E+CisgICAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgPHVsIGNsYXNzPSJuYXYgbmF2YmFyLW5hdiI+CisKICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSJhY3Rpb25XZWJsb2cgIT0gbnVsbCI+Ci0gICAgICAgICAgICAgICAgICAgIC0gPHM6dGV4dCBuYW1lPSJtYWluUGFnZS5jdXJyZW50V2Vic2l0ZSIgLz4KLSAgICAgICAgICAgICAgICAgICAgPGI+PGEgaHJlZj0nPHM6cHJvcGVydHkgdmFsdWU9ImFjdGlvbldlYmxvZy5hYnNvbHV0ZVVSTCIgLz4nPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSJhY3Rpb25XZWJsb2cuaGFuZGxlIiAvPgotICAgICAgICAgICAgICAgICAgICA8L2E+PC9iPgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgPHM6c2V0IHZhcj0idGFiTWVudSIgdmFsdWU9Im1lbnUiLz4KKyAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iI3RhYk1lbnUgIT0gbnVsbCI+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDxzOml0ZXJhdG9yIHZhcj0idGFiIiB2YWx1ZT0iI3RhYk1lbnUudGFicyI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkcm9wZG93biI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biIgcm9sZT0iYnV0dG9uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPSJ0cnVlIiBhcmlhLWV4cGFuZGVkPSJmYWxzZSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9IiV7I3RhYi5rZXl9Ii8+IDxzcGFuIGNsYXNzPSJjYXJldCI+PC9zcGFuPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czppdGVyYXRvciB2YXI9InRhYkl0ZW0iIHZhbHVlPSIjdGFiLml0ZW1zIiBzdGF0dXM9InN0YXQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0iJXsjdGFiSXRlbS5hY3Rpb259Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9ImFjdGlvbldlYmxvZy5oYW5kbGUiLz48L3M6dXJsPiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9IiV7I3RhYkl0ZW0ua2V5fSIvPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvczppdGVyYXRvcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9zOml0ZXJhdG9yPgorCisgICAgICAgICAgICAgICAgICAgIDwvczppZj4KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgPC9zOmlmPgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgPC90ZD4KKworICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImFjdGlvbldlYmxvZyA9PSBudWxsIj4KKworICAgICAgICAgICAgICAgICAgICA8czpzZXQgdmFyPSJ0YWJNZW51IiB2YWx1ZT0ibWVudSIvPgorICAgICAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSIjdGFiTWVudSAhPSBudWxsIj4KKworICAgICAgICAgICAgICAgICAgICAgICAgPHM6aXRlcmF0b3IgdmFyPSJ0YWIiIHZhbHVlPSIjdGFiTWVudS50YWJzIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIiByb2xlPSJidXR0b24iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9InRydWUiIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iJXsjdGFiLmtleX0iLz4gPHNwYW4gY2xhc3M9ImNhcmV0Ij48L3NwYW4+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOml0ZXJhdG9yIHZhcj0idGFiSXRlbSIgdmFsdWU9IiN0YWIuaXRlbXMiIHN0YXR1cz0ic3RhdCI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI8czp1cmwgYWN0aW9uPScleyN0YWJJdGVtLmFjdGlvbn0nIC8+Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0iJXsjdGFiSXRlbS5rZXl9Ii8+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zOml0ZXJhdG9yPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICAgICAgICA8L3M6aXRlcmF0b3I+CisKKyAgICAgICAgICAgICAgICAgICAgPC9zOmlmPgorCisgICAgICAgICAgICAgICAgPC9zOmlmPgorCisgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgCi0gICAgICAgICAgICA8dGQgY2xhc3M9ImJhbm5lclJpZ2h0Ij4KKyAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYgbmF2YmFyLXJpZ2h0Ij4KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8YSBocmVmPSI8czp1cmwgdmFsdWU9Jy8nLz4iPjxzOnByb3BlcnR5IHZhbHVlPSJnZXRQcm9wKCdzaXRlLnNob3J0TmFtZScpIi8+PC9hPgotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHwgPGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0nbWVudScgbmFtZXNwYWNlPScvcm9sbGVyLXVpJyAvPiI+PHM6dGV4dCBuYW1lPSJtYWluUGFnZS5tYWluTWVudSIgLz48L2E+Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IjxzOnVybCB2YWx1ZT0nLycvPiI+PHM6cHJvcGVydHkgdmFsdWU9ImdldFByb3AoJ3NpdGUuc2hvcnROYW1lJykiLz48L2E+PC9saT4KKworICAgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0nbWVudScgbmFtZXNwYWNlPScvcm9sbGVyLXVpJyAvPiI+CisgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9Im1haW5QYWdlLm1haW5NZW51IiAvPjwvYT4KKyAgICAgICAgICAgICAgICA8L2xpPgorCiAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iYXV0aGVudGljYXRlZFVzZXIgIT0gbnVsbCI+Ci0gICAgICAgICAgICAgICAgICAgIHwgPGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0nbG9nb3V0JyBuYW1lc3BhY2U9Jy9yb2xsZXItdWknIC8+Ij48czp0ZXh0IG5hbWU9Im5hdmlnYXRpb25CYXIubG9nb3V0Ii8+PC9hPgorICAgICAgICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI8czp1cmwgYWN0aW9uPSdsb2dvdXQnIG5hbWVzcGFjZT0nL3JvbGxlci11aScgLz4iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibmF2aWdhdGlvbkJhci5sb2dvdXQiLz48L2E+CisgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgPC9zOmlmPgogICAgICAgICAgICAgICAgIDxzOmVsc2U+Ci0gICAgICAgICAgICAgICAgICAgIHwgPGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0nbG9naW4tcmVkaXJlY3QnIG5hbWVzcGFjZT0nL3JvbGxlci11aScgLz4iPjxzOnRleHQgbmFtZT0ibmF2aWdhdGlvbkJhci5sb2dpbiIvPjwvYT4KLSAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IjxzOnVybCBhY3Rpb249J2xvZ2luLXJlZGlyZWN0JyBuYW1lc3BhY2U9Jy9yb2xsZXItdWknIC8+Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9Im5hdmlnYXRpb25CYXIubG9naW4iLz48L2E+CisgICAgICAgICAgICAgICAgICAgIDwvbGk+CisKICAgICAgICAgICAgICAgICAgICAgPHM6aWYgdGVzdD0iZ2V0Qm9vbGVhblByb3AoJ3VzZXJzLnJlZ2lzdHJhdGlvbi5lbmFibGVkJykgJiYgZ2V0UHJvcCgnYXV0aGVudGljYXRpb24ubWV0aG9kJykgIT0gJ2xkYXAnIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIHwgPGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0ncmVnaXN0ZXInIG5hbWVzcGFjZT0nL3JvbGxlci11aScgLz4iPjxzOnRleHQgbmFtZT0ibmF2aWdhdGlvbkJhci5yZWdpc3RlciIvPjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI8czp1cmwgYWN0aW9uPSdyZWdpc3RlcicgbmFtZXNwYWNlPScvcm9sbGVyLXVpJyAvPiI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzOnRleHQgbmFtZT0ibmF2aWdhdGlvbkJhci5yZWdpc3RlciIvPjwvYT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgICAgIDwvczppZj4KKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIDxzOmVsc2VpZiB0ZXN0PSJnZXRQcm9wKCd1c2Vycy5yZWdpc3RyYXRpb24udXJsJykgIT0gbnVsbCAmJiBnZXRQcm9wKCd1c2Vycy5yZWdpc3RyYXRpb24udXJsJykgPiAwIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIHwgPGEgaHJlZj0iPHM6cHJvcGVydHkgdmFsdWU9ImdldFByb3AoJ3VzZXJzLnJlZ2lzdHJhdGlvbi51cmwnKSIvPiI+PHM6dGV4dCBuYW1lPSJuYXZpZ2F0aW9uQmFyLnJlZ2lzdGVyIi8+PC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IjxzOnByb3BlcnR5IHZhbHVlPSJnZXRQcm9wKCd1c2Vycy5yZWdpc3RyYXRpb24udXJsJykiLz4iPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8czp0ZXh0IG5hbWU9Im5hdmlnYXRpb25CYXIucmVnaXN0ZXIiLz48L2E+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICAgICA8L3M6ZWxzZWlmPgogICAgICAgICAgICAgICAgIDwvczplbHNlPgogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgPC90cj4KLSAgICA8L3RhYmxlPgotICAgIAotPC9kaXY+CisgICAgICAgICAgICA8L3VsPgorICAgICAgICA8L2Rpdj48IS0tLy5uYXYtY29sbGFwc2UgLS0+CisgICAgPC9kaXY+Cis8L25hdj4KKworCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy9oZWFkLWFqYXguanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvaGVhZC1hamF4LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg5MGVjOS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy9oZWFkLWFqYXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPCUtLSAKLVRoaXMgZGVmYXVsdCBzdHVmZiBnb2VzIGluIHRoZSBIVE1MIGhlYWQgZWxlbWVudCBvZiBlYWNoIHBhZ2UKLVlvdSBjYW4gb3ZlcnJpZGUgaXQgd2l0aCB5b3VyIG93biBmaWxlIHZpYSBXRUItSU5GL3RpbGVzLWRlZi54bWwKLS0tJT4KLTwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KLQotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiBocmVmPSI8czp1cmwgdmFsdWU9Jy9yb2xsZXItdWkveXVpMy9jc3NyZXNldC9jc3NyZXNldC1taW4uY3NzJy8+IiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiBocmVmPSI8czp1cmwgdmFsdWU9Jy9yb2xsZXItdWkveXVpMy9jc3Nmb250cy9jc3Nmb250cy1taW4uY3NzJy8+IiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiBocmVmPSI8czp1cmwgdmFsdWU9Jy9yb2xsZXItdWkveXVpMy9jc3NiYXNlL2Nzc2Jhc2UtbWluLmNzcycvPiIgLz4KLQotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiBocmVmPSc8czp1cmwgdmFsdWU9Ii9yb2xsZXItdWkvc3R5bGVzL2xheW91dC5jc3MiLz4nIC8+Ci08bGluayByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIGhyZWY9JzxzOnVybCB2YWx1ZT0iL3JvbGxlci11aS9zdHlsZXMvcm9sbGVyLmNzcyIvPicgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgaHJlZj0nPHM6dXJsIHZhbHVlPSIvcm9sbGVyLXVpL3N0eWxlcy9tZW51LmNzcyIvPicgLz4KLQotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiBocmVmPSI8czp1cmwgdmFsdWU9Ii9yb2xsZXItdWkvdGhlbWUvIi8+PHM6cHJvcGVydHkgdmFsdWU9ImdldFByb3AoJ2VkaXRvci50aGVtZScpIiAvPi9jb2xvcnMuY3NzIiAvPgotCi08c2NyaXB0IHNyYz0iPHM6dXJsIHZhbHVlPSIvdGhlbWUvc2NyaXB0cy9yb2xsZXIuanMiLz4iPjwvc2NyaXB0PgotCi08JS0tIHN0cnV0czIgaGVhZCBkaXNhYmxlZCB1bnRpbCB3ZSBuZWVkIGl0IC0tJT4KLTwlLS0gPHM6aGVhZCB0aGVtZT0iYWpheCIvPiAtLSU+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy9oZWFkLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQuanNwCmluZGV4IDkxMmNkNGIuLjhkMTBlMmQgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQuanNwCkBAIC0yLDE2ICsyLDI0IEBACiBUaGlzIGRlZmF1bHQgc3R1ZmYgZ29lcyBpbiB0aGUgSFRNTCBoZWFkIGVsZW1lbnQgb2YgZWFjaCBwYWdlCiBZb3UgY2FuIG92ZXJyaWRlIGl0IHdpdGggeW91ciBvd24gZmlsZSB2aWEgV0VCLUlORi90aWxlcy1kZWYueG1sCiAtLSU+CisKIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KIAotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiBocmVmPSI8czp1cmwgdmFsdWU9Jy9yb2xsZXItdWkveXVpMy9jc3NyZXNldC9jc3NyZXNldC1taW4uY3NzJy8+IiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiBocmVmPSI8czp1cmwgdmFsdWU9Jy9yb2xsZXItdWkveXVpMy9jc3Nmb250cy9jc3Nmb250cy1taW4uY3NzJy8+IiAvPgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiBocmVmPSI8czp1cmwgdmFsdWU9Jy9yb2xsZXItdWkveXVpMy9jc3NiYXNlL2Nzc2Jhc2UtbWluLmNzcycvPiIgLz4KKzxzY3JpcHQgc3JjPSI8czp1cmwgdmFsdWU9Jy93ZWJqYXJzL2pxdWVyeS8zLjMuMS9qcXVlcnkubWluLmpzJyAvPiI+PC9zY3JpcHQ+CiAKLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgaHJlZj0nPHM6dXJsIHZhbHVlPSIvcm9sbGVyLXVpL3N0eWxlcy9sYXlvdXQuY3NzIi8+JyAvPgorPHNjcmlwdCBzcmM9IjxzOnVybCB2YWx1ZT0nL3dlYmphcnMvanF1ZXJ5LXVpLzEuMTIuMS9qcXVlcnktdWkubWluLmpzJyAvPiI+PC9zY3JpcHQ+Cis8bGluayBocmVmPSI8czp1cmwgdmFsdWU9Jy93ZWJqYXJzL2pxdWVyeS11aS8xLjEyLjEvanF1ZXJ5LXVpLmNzcycgLz4iIHJlbD0ic3R5bGVzaGVldCIgLz4KKworPGxpbmsgaHJlZj0iPHM6dXJsIHZhbHVlPScvd2ViamFycy9ib290c3RyYXAvMy4zLjcvY3NzL2Jvb3RzdHJhcC5taW4uY3NzJyAvPiIgcmVsPSJzdHlsZXNoZWV0IiAvPgorPGxpbmsgaHJlZj0iPHM6dXJsIHZhbHVlPScvd2ViamFycy9ib290c3RyYXAvMy4zLjcvY3NzL2Jvb3RzdHJhcC10aGVtZS5taW4uY3NzJyAvPiIgcmVsPSJzdHlsZXNoZWV0IiAvPgorPHNjcmlwdCBzcmM9IjxzOnVybCB2YWx1ZT0nL3dlYmphcnMvYm9vdHN0cmFwLzMuMy43L2pzL2Jvb3RzdHJhcC5taW4uanMnIC8+Ij48L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9IjxzOnVybCB2YWx1ZT0nL3dlYmphcnMvY2xpcGJvYXJkLmpzLzIuMC4wL2NsaXBib2FyZC5taW4uanMnIC8+Ij48L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9IjxzOnVybCB2YWx1ZT0nL3dlYmphcnMvc3VtbWVybm90ZS8wLjguMTEvZGlzdC9zdW1tZXJub3RlLm1pbi5qcycgLz4iPjwvc2NyaXB0PgorPGxpbmsgaHJlZj0iPHM6dXJsIHZhbHVlPScvd2ViamFycy9zdW1tZXJub3RlLzAuOC4xMS9kaXN0L3N1bW1lcm5vdGUuY3NzJyAvPiIgcmVsPSJzdHlsZXNoZWV0IiAvPgorCiA8bGluayByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIGhyZWY9JzxzOnVybCB2YWx1ZT0iL3JvbGxlci11aS9zdHlsZXMvcm9sbGVyLmNzcyIvPicgLz4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgaHJlZj0nPHM6dXJsIHZhbHVlPSIvcm9sbGVyLXVpL3N0eWxlcy9tZW51LmNzcyIvPicgLz4KLQotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiBocmVmPSI8czp1cmwgdmFsdWU9Ii9yb2xsZXItdWkvdGhlbWUvIi8+PHM6cHJvcGVydHkgdmFsdWU9ImdldFByb3AoJ2VkaXRvci50aGVtZScpIi8+L2NvbG9ycy5jc3MiIC8+CiAKIDxzY3JpcHQgc3JjPSI8czp1cmwgdmFsdWU9Ii90aGVtZS9zY3JpcHRzL3JvbGxlci5qcyIvPiI+PC9zY3JpcHQ+CisKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL21lbnUuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvbWVudS5qc3AKaW5kZXggZDc1ZjM0Zi4uODA1NWI2MyAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvbWVudS5qc3AKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvbWVudS5qc3AKQEAgLTIwLDQxICsyMCw0NyBAQAogPHM6c2V0IHZhcj0idGFiTWVudSIgdmFsdWU9Im1lbnUiLz4KIDxzOmlmIHRlc3Q9IiN0YWJNZW51ICE9IG51bGwiPgogCi08dGFibGUgY2xhc3M9Im1lbnVUYWJUYWJsZSIgY2VsbHNwYWNpbmc9IjAiID4KLTx0cj4KLTxzOml0ZXJhdG9yIHZhcj0idGFiIiB2YWx1ZT0iI3RhYk1lbnUudGFicyIgPgotICAgIDxzOmlmIHRlc3Q9IiN0YWIuc2VsZWN0ZWQiPgotICAgICAgICA8czpzZXQgdmFyPSJzZWxlY3RlZFRhYiIgdmFsdWU9IiN0YWIiIC8+Ci0gICAgICAgIDx0ZCBjbGFzcz0ibWVudVRhYlNlbGVjdGVkIj4KLSAgICA8L3M6aWY+Ci0gICAgPHM6ZWxzZT4KLSAgICAgICAgPHRkIGNsYXNzPSJtZW51VGFiVW5zZWxlY3RlZCI+Ci0gICAgPC9zOmVsc2U+Ci0gICAgPGRpdiBjbGFzcz0ibWVudS10ciI+Ci0gICAgICAgIDxkaXYgY2xhc3M9Im1lbnUtdGwiPgotICAgICAgICAgICAgJm5ic3A7Jm5ic3A7PGEgaHJlZj0iPHM6dXJsIGFjdGlvbj0iJXsjdGFiLmFjdGlvbn0iPjxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9ImFjdGlvbldlYmxvZy5oYW5kbGUiLz48L3M6dXJsPiI+PHM6dGV4dCBuYW1lPSIleyN0YWIua2V5fSIgLz48L2E+Jm5ic3A7Jm5ic3A7Ci0gICAgICAgIDwvZGl2PgotICAgIDwvZGl2PgotICAgIDwvdGQ+Ci0gICAgPHRkIGNsYXNzPSJtZW51VGFiU2VwYXJhdG9yIj48L3RkPgotPC9zOml0ZXJhdG9yPgotPC90cj4KLTwvdGFibGU+CisgICAgPCUtLQorICAgIDxuYXYgY2xhc3M9Im5hdmJhciBuYXZiYXItZGVmYXVsdCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CisgICAgICAgICAgICA8ZGl2IGlkPSJuYXZiYXIiIGNsYXNzPSJuYXZiYXItY29sbGFwc2UgY29sbGFwc2UiPgorICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYiPgogCi08dGFibGUgY2xhc3M9Im1lbnVJdGVtVGFibGUiIGNlbGxzcGFjaW5nPSIwIiA+Ci0gICAgPHRyPgotICAgICAgICA8dGQgY2xhc3M9InBhZGxlZnQiPgotICAgICAgICAgICAgPHM6aXRlcmF0b3IgdmFyPSJ0YWJJdGVtIiB2YWx1ZT0iI3NlbGVjdGVkVGFiLml0ZW1zIiBzdGF0dXM9InN0YXQiPgotICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9IiEjc3RhdC5maXJzdCI+fDwvczppZj4KLSAgICAgICAgICAgICAgICA8czppZiB0ZXN0PSIjdGFiSXRlbS5zZWxlY3RlZCI+Ci0gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJtZW51SXRlbVNlbGVjdGVkIiBocmVmPSI8czp1cmwgYWN0aW9uPSIleyN0YWJJdGVtLmFjdGlvbn0iPjxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9ImFjdGlvbldlYmxvZy5oYW5kbGUiLz48L3M6dXJsPiI+PHM6dGV4dCBuYW1lPSIleyN0YWJJdGVtLmtleX0iIC8+PC9hPgotICAgICAgICAgICAgICAgIDwvczppZj4KLSAgICAgICAgICAgICAgICA8czplbHNlPgotICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibWVudUl0ZW1VbnNlbGVjdGVkIiBocmVmPSI8czp1cmwgYWN0aW9uPSIleyN0YWJJdGVtLmFjdGlvbn0iPjxzOnBhcmFtIG5hbWU9IndlYmxvZyIgdmFsdWU9ImFjdGlvbldlYmxvZy5oYW5kbGUiLz48L3M6dXJsPiI+PHM6dGV4dCBuYW1lPSIleyN0YWJJdGVtLmtleX0iIC8+PC9hPgotICAgICAgICAgICAgICAgIDwvczplbHNlPgorICAgICAgICAgICAgICAgICAgICA8czppdGVyYXRvciBpZD0idGFiIiB2YWx1ZT0iI3RhYk1lbnUudGFicyI+CisgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiBjbGFzcz0iZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iIHJvbGU9ImJ1dHRvbiIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9InRydWUiIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSIleyN0YWIua2V5fSIvPiA8c3BhbiBjbGFzcz0iY2FyZXQiPjwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6aXRlcmF0b3IgaWQ9InRhYkl0ZW0iIHZhbHVlPSIjdGFiLml0ZW1zIiBzdGF0dXM9InN0YXQiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IjxzOnVybCBhY3Rpb249IiV7I3RhYkl0ZW0uYWN0aW9ufSI+PHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iYWN0aW9uV2VibG9nLmhhbmRsZSIvPjwvczp1cmw+Ij4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSIleyN0YWJJdGVtLmtleX0iLz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3M6aXRlcmF0b3I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgICAgIDwvczppdGVyYXRvcj4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPC91bD4KKyAgICAgICAgICAgIDwvZGl2PiA8IS0tLy5uYXYtY29sbGFwc2UgLS0+CisgICAgICAgIDwvZGl2PiA8IS0tLy5jb250YWluZXItZmx1aWQgLS0+CisgICAgPC9uYXY+CisKKyAgICA8czppdGVyYXRvciBpZD0idGFiIiB2YWx1ZT0iI3RhYk1lbnUudGFicyI+CisKKyAgICAgICAgPGgzPjxzOnRleHQgbmFtZT0iJXsjdGFiLmtleX0iLz48L2gzPgorCisgICAgICAgIDxkaXYgY2xhc3M9Imxpc3QtZ3JvdXAiPgorICAgICAgICAgICAgPHM6aXRlcmF0b3IgaWQ9InRhYkl0ZW0iIHZhbHVlPSIjdGFiLml0ZW1zIiBzdGF0dXM9InN0YXQiPgorICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJsaXN0LWdyb3VwLWl0ZW0iIGhyZWY9IjxzOnVybCBhY3Rpb249IiV7I3RhYkl0ZW0uYWN0aW9ufSI+PHM6cGFyYW0gbmFtZT0id2VibG9nIiB2YWx1ZT0iYWN0aW9uV2VibG9nLmhhbmRsZSIvPjwvczp1cmw+Ij4KKyAgICAgICAgICAgICAgICAgICAgPHM6dGV4dCBuYW1lPSIleyN0YWJJdGVtLmtleX0iLz48L2E+CiAgICAgICAgICAgICA8L3M6aXRlcmF0b3I+Ci0gICAgICAgIDwvdGQ+Ci0gICAgPC90cj4KLTwvdGFibGU+CisgICAgICAgIDwvZGl2PgogCisgICAgPC9zOml0ZXJhdG9yPgorICAgIC0tJT4KKyAgICAgICAgCiA8L3M6aWY+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy9tZXNzYWdlcy5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy9tZXNzYWdlcy5qc3AKaW5kZXggZjg4MTE5MS4uYmI4YzU4YiAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvbWVzc2FnZXMuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL21lc3NhZ2VzLmpzcApAQCAtMTksMjMgKzE5LDI4IEBACiAKIDwlLS0gU3VjY2VzcyBNZXNzYWdlcyAtLSU+CiA8czppZiB0ZXN0PSIhYWN0aW9uTWVzc2FnZXMuaXNFbXB0eSI+Ci0gICAgPGRpdiBpZD0ibWVzc2FnZXMiIGNsYXNzPSJtZXNzYWdlcyI+CisgICAgPGRpdiBpZD0ibWVzc2FnZXMiIGNsYXNzPSJhbGVydCBhbGVydC1zdWNjZXNzIj4KICAgICAgICAgPHM6YWN0aW9ubWVzc2FnZSAvPgogICAgIDwvZGl2PgogPC9zOmlmPgogCiA8JS0tIEVycm9yIE1lc3NhZ2VzIC0tJT4KIDxzOmlmIHRlc3Q9IiFhY3Rpb25FcnJvcnMuaXNFbXB0eSB8fCAhZmllbGRFcnJvcnMuaXNFbXB0eSI+Ci0gICAgPGRpdiBpZD0iZXJyb3JzIiBjbGFzcz0iZXJyb3JzIj4KKyAgICA8ZGl2IGlkPSJlcnJvcnMiIGNsYXNzPSJhbGVydCBhbGVydC1kYW5nZXIiPgogICAgICAgICA8dWw+CisKICAgICAgICAgICAgIDxzOml0ZXJhdG9yIHZhcj0iYWN0aW9uRXJyb3IiIHZhbHVlPSJhY3Rpb25FcnJvcnMiPgogICAgICAgICAgICAgICAgIDxsaT48czpwcm9wZXJ0eSB2YWx1ZT0iI2FjdGlvbkVycm9yIiBlc2NhcGVIdG1sPSJmYWxzZSIgLz48L2xpPgogICAgICAgICAgICAgPC9zOml0ZXJhdG9yPgorCiAgICAgICAgICAgICA8czppdGVyYXRvciB2YXI9ImZpZWxkRXJyb3JOYW1lIiB2YWx1ZT0iZmllbGRFcnJvcnMua2V5U2V0KCkiPgogICAgICAgICAgICAgICAgIDxzOml0ZXJhdG9yIHZhcj0iZmllbGRFcnJvclZhbHVlIiB2YWx1ZT0iZmllbGRFcnJvcnNbI2ZpZWxkRXJyb3JOYW1lXSI+CiAgICAgICAgICAgICAgICAgICAgIDxsaT48czpwcm9wZXJ0eSB2YWx1ZT0iI2ZpZWxkRXJyb3JWYWx1ZSIgZXNjYXBlSHRtbD0iZmFsc2UiIC8+PC9saT4KICAgICAgICAgICAgICAgICA8L3M6aXRlcmF0b3I+CiAgICAgICAgICAgICA8L3M6aXRlcmF0b3I+CisKICAgICAgICAgPC91bD4KICAgICA8L2Rpdj4KIDwvczppZj4KKworPCEtLSBBTEVSVF9FTkQ6IHRoaXMgY29tbWVudCBuZWVkZWQgZm9yIEFKQVggZXJyb3IgaGFuZGxpbmcgLS0+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy90aWxlcy1lcnJvcnBhZ2UuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvdGlsZXMtZXJyb3JwYWdlLmpzcAppbmRleCAxMmVjZGM2Li4wY2U3ZWRjIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy90aWxlcy1lcnJvcnBhZ2UuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL3RpbGVzLWVycm9ycGFnZS5qc3AKQEAgLTI0LDYgKzI0LDkgQEAKICAgICAgIDxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iPCU9IHJlcXVlc3QuZ2V0Q29udGV4dFBhdGgoKSAlPi9mYXZpY29uLmljbyIgdHlwZT0iaW1hZ2UveC1pY29uIj4KICAgICAgIDx0aXRsZT48czp0ZXh0IG5hbWU9ImVycm9yIiAvPjwvdGl0bGU+CiAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImhlYWQiIC8+CisgICAgICA8c3R5bGU+CisgICAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIC8+CisgICAgICA8L3N0eWxlPgogICAgIDwvaGVhZD4KICAgICA8Ym9keT4KICAgICAgICAgCkBAIC0zMSw3ICszNCw3IEBACiAgICAgICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImJhbm5lciIgLz4KICAgICAgICAgPC9kaXY+CiAgICAgICAgIAotICAgICAgICA8ZGl2IGlkPSJ3cmFwcGVyIj4gCisgICAgICAgIDxkaXYgaWQ9IndyYXBwZXIiIGNsYXNzPSJjb250YWluZXItZmx1aWQiPgogICAgICAgICAgICAgPGRpdiBpZD0ibGVmdGNvbnRlbnRfd3JhcCI+CiAgICAgICAgICAgICAgICAgPGRpdiBpZD0ibGVmdGNvbnRlbnQiPiAKICAgICAgICAgICAgICAgICA8L2Rpdj4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL3RpbGVzLWluc3RhbGxwYWdlLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL3RpbGVzLWluc3RhbGxwYWdlLmpzcAppbmRleCA4NzkwOTdlLi4wNTlhOTg1IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy90aWxlcy1pbnN0YWxscGFnZS5qc3AKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvdGlsZXMtaW5zdGFsbHBhZ2UuanNwCkBAIC0xOCw0MSArMTgsMzQgQEAKIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KIDwhZG9jdHlwZSBodG1sPgogPGh0bWw+Ci0gICAgPGhlYWQ+Ci0gICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Ci0gICAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPgotICAgICAgPGxpbmsgcmVsPSJpY29uIiBocmVmPSI8JT0gcmVxdWVzdC5nZXRDb250ZXh0UGF0aCgpICU+L2Zhdmljb24uaWNvIiB0eXBlPSJpbWFnZS94LWljb24iPgotICAgICAgPHRpdGxlPjxzOnByb3BlcnR5IHZhbHVlPSJwYWdlVGl0bGUiIC8+PC90aXRsZT4KLSAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0iaGVhZCIgLz4KLSAgICA8L2hlYWQ+Ci0gICAgPGJvZHk+Ci0gICAgICAgIAotICAgICAgICA8ZGl2IGlkPSJiYW5uZXIiPgotICAgICAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJiYW5uZXIiIC8+Cis8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIj4KKyAgICA8bGluayByZWw9Imljb24iIGhyZWY9IjwlPSByZXF1ZXN0LmdldENvbnRleHRQYXRoKCkgJT4vZmF2aWNvbi5pY28iIHR5cGU9ImltYWdlL3gtaWNvbiI+CisgICAgPHRpdGxlPjxzOnByb3BlcnR5IHZhbHVlPSJwYWdlVGl0bGUiLz48L3RpdGxlPgorICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0iaGVhZCIvPgorICAgIDxzdHlsZT4KKyAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIC8+CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImJhbm5lciIvPgorCis8ZGl2IGlkPSJ3cmFwcGVyIiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIiBzdHlsZT0ibWFyZ2luLXRvcDo1ZW0iPgorCisgICAgPGRpdiBjbGFzcz0icm93Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTEiPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtMTAiPgorICAgICAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJtZXNzYWdlcyIvPgorICAgICAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJjb250ZW50Ii8+CiAgICAgICAgIDwvZGl2PgotICAgICAgICAKLSAgICAgICAgPGRpdiBpZD0id3JhcHBlciI+IAotICAgICAgICAgICAgPGRpdiBpZD0ibGVmdGNvbnRlbnRfd3JhcCI+Ci0gICAgICAgICAgICAgICAgPGRpdiBpZD0ibGVmdGNvbnRlbnQiPiAKLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgCi0gICAgICAgICAgICA8ZGl2IGlkPSJjZW50ZXJjb250ZW50X3dyYXAiPgotICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImNlbnRlcmNvbnRlbnQiPgotICAgICAgICAgICAgICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9Im1lc3NhZ2VzIiAvPgotICAgICAgICAgICAgICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiIC8+ICAgIAotICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIDxkaXYgaWQ9InJpZ2h0Y29udGVudF93cmFwIj4KLSAgICAgICAgICAgICAgICA8ZGl2IGlkPSJyaWdodGNvbnRlbnQiPiAKLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgCi0gICAgICAgIDxkaXYgaWQ9ImZvb3RlciI+Ci0gICAgICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImZvb3RlciIgLz4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIAotICAgIDwvYm9keT4KKyAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTEiPjwvZGl2PgorICAgIDwvZGl2PgorCisgICAgPGRpdiBpZD0iZm9vdGVyIj4KKyAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJmb290ZXIiLz4KKyAgICA8L2Rpdj4KKworPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvdGlsZXMtbG9naW5wYWdlLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL3RpbGVzLWxvZ2lucGFnZS5qc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjYjdjNwotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL3RpbGVzLWxvZ2lucGFnZS5qc3AKQEAgLTAsMCArMSw1MiBAQAorPCUtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdQorICB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZworICBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCisgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KKy0tJT4KKzwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KKzwhZG9jdHlwZSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIj4KKyAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgorICAgIDxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iPCU9IHJlcXVlc3QuZ2V0Q29udGV4dFBhdGgoKSAlPi9mYXZpY29uLmljbyIgdHlwZT0iaW1hZ2UveC1pY29uIj4KKyAgICA8dGl0bGU+PHM6cHJvcGVydHkgdmFsdWU9ImdldFByb3AoJ3NpdGUuc2hvcnROYW1lJykiLz46IDxzOnByb3BlcnR5IHZhbHVlPSJwYWdlVGl0bGUiLz48L3RpdGxlPgorICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0iaGVhZCIvPgorICAgIDxzdHlsZT4KKyAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIC8+CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImJhbm5lciIvPgorCis8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgorCisgICAgPGRpdiBjbGFzcz0icm93Ij4KKyAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTQiPjwvZGl2PgorCisgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC00Ij4KKyAgICAgICAgICAgIDxoMSBjbGFzcz0icm9sbGVyLXBhZ2UtdGl0bGUiPjxzOnByb3BlcnR5IHZhbHVlPSJwYWdlVGl0bGUiLz48L2gxPgorICAgICAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJtZXNzYWdlcyIvPgorICAgICAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJjb250ZW50Ii8+CisgICAgICAgIDwvZGl2PgorCisgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC00Ij48L2Rpdj4KKyAgICA8L2Rpdj4KKzwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy90aWxlcy1tYWlubWVudXBhZ2UuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvdGlsZXMtbWFpbm1lbnVwYWdlLmpzcAppbmRleCAzNjEzZmMzLi42NzUwZDc5IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy90aWxlcy1tYWlubWVudXBhZ2UuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL3RpbGVzLW1haW5tZW51cGFnZS5qc3AKQEAgLTE4LDQ3ICsxOCw2OCBAQAogPCVAIGluY2x1ZGUgZmlsZT0iL1dFQi1JTkYvanNwcy90YWdsaWJzLXN0cnV0czIuanNwIiAlPgogPCFkb2N0eXBlIGh0bWw+CiA8aHRtbD4KLSAgICA8aGVhZD4KLSAgICAgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgotICAgICAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPgotICAgICAgICA8bGluayByZWw9Imljb24iIGhyZWY9IjwlPSByZXF1ZXN0LmdldENvbnRleHRQYXRoKCkgJT4vZmF2aWNvbi5pY28iIHR5cGU9ImltYWdlL3gtaWNvbiI+Ci0gICAgICAgIDx0aXRsZT48czpwcm9wZXJ0eSB2YWx1ZT0iZ2V0UHJvcCgnc2l0ZS5zaG9ydE5hbWUnKSIvPjogPHM6cHJvcGVydHkgdmFsdWU9InBhZ2VUaXRsZSIgLz48L3RpdGxlPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+CisgICAgPGxpbmsgcmVsPSJpY29uIiBocmVmPSI8JT0gcmVxdWVzdC5nZXRDb250ZXh0UGF0aCgpICU+L2Zhdmljb24uaWNvIiB0eXBlPSJpbWFnZS94LWljb24iPgorICAgIDx0aXRsZT48czpwcm9wZXJ0eSB2YWx1ZT0iZ2V0UHJvcCgnc2l0ZS5zaG9ydE5hbWUnKSIvPjogPHM6cHJvcGVydHkgdmFsdWU9InBhZ2VUaXRsZSIvPjwvdGl0bGU+CiAKLSAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJoZWFkIiAvPiAgICAgCi0gICAgICAgIDxzdHlsZT4KLSAgICAgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiAvPgotICAgICAgICA8L3N0eWxlPgotICAgIDwvaGVhZD4KLSAgICA8Ym9keT4KLSAgICAgICAgCi0gICAgICAgIDxkaXYgaWQ9ImJhbm5lciI+Ci0gICAgICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImJhbm5lclN0YXR1cyIgLz4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIAotICAgICAgICA8ZGl2IGlkPSJjb250ZW50Ij4KLSAgICAgICAgICAgIDxkaXYgaWQ9ImxlZnRjb250ZW50X3dyYXAiPgotICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImxlZnRjb250ZW50Ij4gCisgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJoZWFkIi8+CisgICAgPHN0eWxlPgorICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9InN0eWxlcyIgLz4KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0iYmFubmVyIi8+CisKKzxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CisKKyAgICA8ZGl2IGNsYXNzPSJyb3ciPgorCisgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0zIHJvbGxlci1jb2x1bW4tbGVmdCI+CisKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIHBhbmVsLWRlZmF1bHQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgorCisgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSc8czp1cmwgdmFsdWU9Ii9yb2xsZXItdWkvaW1hZ2VzL2ZlYXRoZXIuc3ZnIiAvPicKKyAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9IkFTRiBmZWF0IiBoZWlnaHQ9IjEwMCIgYWxpZ249ImNlbnRlciIvPgorICAgICAgICAgICAgICAgICAgICA8aDQ+PHM6dGV4dCBuYW1lPSJnZW5lcmljLnBvd2VyZWRCeSIgLz48L2g0PgorCiAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgPGRpdiBpZD0iY2VudGVyY29udGVudF93cmFwIj4KLSAgICAgICAgICAgICAgICA8ZGl2IGlkPSJjZW50ZXJjb250ZW50Ij4gICAKLSAgICAgICAgICAgICAgICAgICAgPGgxPjxzOnByb3BlcnR5IHZhbHVlPSJwYWdlVGl0bGUiIC8+PC9oMT4KLSAgICAgICAgICAgICAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJtZXNzYWdlcyIgLz4gCi0gICAgICAgICAgICAgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgLz4gICAgCisKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIHBhbmVsLWRlZmF1bHQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiPgorCisgICAgICAgICAgICAgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0ic2lkZWJhciIvPgorCiAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIAotICAgICAgICAgICAgPGRpdiBpZD0icmlnaHRjb250ZW50X3dyYXAiPgotICAgICAgICAgICAgICAgIDxkaXYgaWQ9InJpZ2h0Y29udGVudCI+IAotICAgICAgICAgICAgICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9InNpZGViYXIiIC8+CisKKyAgICAgICAgPC9kaXY+CisKKyAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTkgcm9sbGVyLWNvbHVtbi1yaWdodCI+CisKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIHBhbmVsLWRlZmF1bHQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiPgorCisgICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0icm9sbGVyLXBhZ2UtdGl0bGUiPjxzOnByb3BlcnR5IHZhbHVlPSJwYWdlVGl0bGUiLz48L2gyPgorICAgICAgICAgICAgICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9Im1lc3NhZ2VzIi8+CisgICAgICAgICAgICAgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0iY29udGVudCIvPgorCiAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8L2Rpdj4KKwogICAgICAgICA8L2Rpdj4KLSAgICAgICAgCi0gICAgICAgIDxkaXYgaWQ9ImZvb3RlciI+Ci0gICAgICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImZvb3RlciIgLz4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIAotICAgIDwvYm9keT4KKyAgICA8L2Rpdj4KKzwvZGl2PgorCis8Zm9vdGVyIGNsYXNzPSJmb290ZXIiPgorICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CisgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0iZm9vdGVyIi8+CisgICAgPC9kaXY+Cis8L2Zvb3Rlcj4KKworPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvdGlsZXMtcG9wdXBwYWdlLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL3RpbGVzLXBvcHVwcGFnZS5qc3AKaW5kZXggOTEzMDBlMy4uN2Q5OTIwNyAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvdGlsZXMtcG9wdXBwYWdlLmpzcAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy90aWxlcy1wb3B1cHBhZ2UuanNwCkBAIC0yMywxMSArMjMsMTQgQEAKICAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIj4NCiAgICAgICAgIDxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iPCU9IHJlcXVlc3QuZ2V0Q29udGV4dFBhdGgoKSAlPi9mYXZpY29uLmljbyIgdHlwZT0iaW1hZ2UveC1pY29uIj4NCiAgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0iaGVhZCIgLz4NCisgICAgICAgIDxzdHlsZT4NCisgICAgICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9InN0eWxlcyIgLz4NCisgICAgICAgIDwvc3R5bGU+DQogICAgIDwvaGVhZD4NCiANCiAgICAgPGJvZHk+DQogDQotICAgICAgICA8ZGl2IGlkPSJ3cmFwcGVyIj4gDQorICAgICAgICA8ZGl2IGlkPSJ3cmFwcGVyIiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4NCiAgICAgICAgICAgICA8ZGl2IGlkPSJsZWZ0Y29udGVudF93cmFwIj4NCiAgICAgICAgICAgICAgICAgPGRpdiBpZD0ibGVmdGNvbnRlbnQiPiANCiAgICAgICAgICAgICAgICAgPC9kaXY+DQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvdGlsZXMtc2ltcGxlLXRhYmJlZHBhZ2UuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvdGlsZXMtc2ltcGxlLXRhYmJlZHBhZ2UuanNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMjM0NDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy90aWxlcy1zaW1wbGUtdGFiYmVkcGFnZS5qc3AKQEAgLTAsMCArMSw1NyBAQAorPCUtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdQorICB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZworICBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCisgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KKy0tJT4KKzwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIj4KKyAgICA8bGluayByZWw9Imljb24iIGhyZWY9IjwlPSByZXF1ZXN0LmdldENvbnRleHRQYXRoKCkgJT4vZmF2aWNvbi5pY28iIHR5cGU9ImltYWdlL3gtaWNvbiI+CisgICAgPHRpdGxlPjxzOnByb3BlcnR5IHZhbHVlPSJnZXRQcm9wKCdzaXRlLnNob3J0TmFtZScpIi8+OiA8czpwcm9wZXJ0eSB2YWx1ZT0icGFnZVRpdGxlIi8+PC90aXRsZT4KKyAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImhlYWQiLz4KKyAgICA8c3R5bGU+CisgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiAvPgorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJiYW5uZXIiLz4KKworPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KKworICAgIDxkaXYgY2xhc3M9InJvdyI+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xMiByb2xsZXItY29sdW1uLWxlZnQiPgorICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwgcGFuZWwtZGVmYXVsdCI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtYm9keSI+CisgICAgICAgICAgICAgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0ibWVzc2FnZXMiLz4KKyAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJyb2xsZXItcGFnZS10aXRsZSI+PHM6cHJvcGVydHkgdmFsdWU9InBhZ2VUaXRsZSIvPjwvaDI+CisgICAgICAgICAgICAgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0iY29udGVudCIvPgorICAgICAgICAgICAgICAgIDwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwvZGl2PgorICAgIDwvZGl2PgorPC9kaXY+CisKKzxmb290ZXIgY2xhc3M9ImZvb3RlciI+CisgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KKyAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJmb290ZXIiLz4KKyAgICA8L2Rpdj4KKzwvZm9vdGVyPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy90aWxlcy1zaW1wbGVwYWdlLmpzcCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL3RpbGVzLXNpbXBsZXBhZ2UuanNwCmluZGV4IDM4MWE5NjQuLjU1ZDgxMTMgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL3RpbGVzLXNpbXBsZXBhZ2UuanNwCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL3RpbGVzLXNpbXBsZXBhZ2UuanNwCkBAIC0xOCw0NyArMTgsMzkgQEAKIDwlQCBpbmNsdWRlIGZpbGU9Ii9XRUItSU5GL2pzcHMvdGFnbGlicy1zdHJ1dHMyLmpzcCIgJT4KIDwhZG9jdHlwZSBodG1sPgogPGh0bWw+Ci0gICAgPGhlYWQ+Ci0gICAgICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KLSAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIj4KLSAgICAgICAgPGxpbmsgcmVsPSJpY29uIiBocmVmPSI8JT0gcmVxdWVzdC5nZXRDb250ZXh0UGF0aCgpICU+L2Zhdmljb24uaWNvIiB0eXBlPSJpbWFnZS94LWljb24iPgotICAgICAgICA8dGl0bGU+PHM6cHJvcGVydHkgdmFsdWU9ImdldFByb3AoJ3NpdGUuc2hvcnROYW1lJykiLz46IDxzOnByb3BlcnR5IHZhbHVlPSJwYWdlVGl0bGUiIC8+PC90aXRsZT4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPgorICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CisgICAgPGxpbmsgcmVsPSJpY29uIiBocmVmPSI8JT0gcmVxdWVzdC5nZXRDb250ZXh0UGF0aCgpICU+L2Zhdmljb24uaWNvIiB0eXBlPSJpbWFnZS94LWljb24iPgorICAgIDx0aXRsZT48czpwcm9wZXJ0eSB2YWx1ZT0iZ2V0UHJvcCgnc2l0ZS5zaG9ydE5hbWUnKSIvPjogPHM6cHJvcGVydHkgdmFsdWU9InBhZ2VUaXRsZSIvPjwvdGl0bGU+CisgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJoZWFkIi8+CisgICAgPHN0eWxlPgorICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9InN0eWxlcyIgLz4KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CiAKLSAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJoZWFkIiAvPgotICAgICAgICA8c3R5bGU+Ci0gICAgICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9InN0eWxlcyIgLz4KLSAgICAgICAgPC9zdHlsZT4KLSAgICA8L2hlYWQ+Ci0gICAgPGJvZHk+Ci0gICAgICAgIAotICAgICAgICA8ZGl2IGlkPSJiYW5uZXIiPgotICAgICAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJiYW5uZXIiIC8+Ci0gICAgICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImJhbm5lclN0YXR1cyIgLz4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIAotICAgICAgICA8ZGl2IGlkPSJ3cmFwcGVyIj4gCi0gICAgICAgICAgICA8ZGl2IGlkPSJsZWZ0Y29udGVudF93cmFwIj4KLSAgICAgICAgICAgICAgICA8ZGl2IGlkPSJsZWZ0Y29udGVudCI+IAorPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJiYW5uZXIiLz4KKworPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KKworICAgIDxkaXYgY2xhc3M9InJvdyI+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0xIj48L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTEwIj4KKworICAgICAgICAgICAgPGgxIGNsYXNzPSJyb2xsZXItcGFnZS10aXRsZSI+PHM6cHJvcGVydHkgdmFsdWU9InBhZ2VUaXRsZSIvPjwvaDE+CisgICAgICAgICAgICA8cD48dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9Im1lc3NhZ2VzIi8+CisgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbCI+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtYm9keSI+CisgICAgICAgICAgICAgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0iY29udGVudCIvPgogICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIDxkaXYgaWQ9ImNlbnRlcmNvbnRlbnRfd3JhcCI+Ci0gICAgICAgICAgICAgICAgPGRpdiBpZD0iY2VudGVyY29udGVudCI+ICAgCi0gICAgICAgICAgICAgICAgICAgIDxoMT48czpwcm9wZXJ0eSB2YWx1ZT0icGFnZVRpdGxlIiAvPjwvaDE+Ci0gICAgICAgICAgICAgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0ibWVzc2FnZXMiIC8+Ci0gICAgICAgICAgICAgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgLz4KLSAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgCi0gICAgICAgICAgICA8ZGl2IGlkPSJyaWdodGNvbnRlbnRfd3JhcCI+Ci0gICAgICAgICAgICAgICAgPGRpdiBpZD0icmlnaHRjb250ZW50Ij4gCi0gICAgICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICA8L2Rpdj4KKwogICAgICAgICA8L2Rpdj4KLSAgICAgICAgCi0gICAgICAgIDxkaXYgaWQ9ImZvb3RlciI+Ci0gICAgICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImZvb3RlciIgLz4KLSAgICAgICAgPC9kaXY+Ci0gICAgICAgIAotICAgIDwvYm9keT4KKyAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTEiPjwvZGl2PgorICAgIDwvZGl2PgorPC9kaXY+CisKKzwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3BzL3RpbGVzL3RpbGVzLXRhYmJlZHBhZ2UuanNwIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvdGlsZXMtdGFiYmVkcGFnZS5qc3AKaW5kZXggMTI5OTEzMi4uN2EwMjhhYyAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvdGlsZXMtdGFiYmVkcGFnZS5qc3AKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvdGlsZXMtdGFiYmVkcGFnZS5qc3AKQEAgLTEsMyArMSw0IEBACis8JUAgdGFnbGliIHByZWZpeD0idGlsZXN4IiB1cmk9Imh0dHA6Ly90aWxlcy5hcGFjaGUub3JnL3RhZ3MtdGlsZXMtZXh0cmFzIiAlPgogPCUtLQogICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdQpAQCAtMTgsNTAgKzE5LDc5IEBACiA8JUAgaW5jbHVkZSBmaWxlPSIvV0VCLUlORi9qc3BzL3RhZ2xpYnMtc3RydXRzMi5qc3AiICU+CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgotICAgIDxoZWFkPgotICAgICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Ci0gICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+Ci0gICAgICAgIDxsaW5rIHJlbD0iaWNvbiIgaHJlZj0iPCU9IHJlcXVlc3QuZ2V0Q29udGV4dFBhdGgoKSAlPi9mYXZpY29uLmljbyIgdHlwZT0iaW1hZ2UveC1pY29uIj4KLSAgICAgICAgPHRpdGxlPjxzOnByb3BlcnR5IHZhbHVlPSJnZXRQcm9wKCdzaXRlLnNob3J0TmFtZScpIi8+OiA8czpwcm9wZXJ0eSB2YWx1ZT0icGFnZVRpdGxlIiAvPjwvdGl0bGU+Cis8aGVhZD4KKyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIj4KKyAgICA8bGluayByZWw9Imljb24iIGhyZWY9IjwlPSByZXF1ZXN0LmdldENvbnRleHRQYXRoKCkgJT4vZmF2aWNvbi5pY28iIHR5cGU9ImltYWdlL3gtaWNvbiI+CisgICAgPHRpdGxlPjxzOnByb3BlcnR5IHZhbHVlPSJnZXRQcm9wKCdzaXRlLnNob3J0TmFtZScpIi8+OiA8czpwcm9wZXJ0eSB2YWx1ZT0icGFnZVRpdGxlIi8+PC90aXRsZT4KKyAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImhlYWQiLz4KKyAgICA8c3R5bGU+CisgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiAvPgorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KIAotICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImhlYWQiIC8+ICAgICAKLSAgICAgICAgPHN0eWxlPgotICAgICAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIC8+Ci0gICAgICAgIDwvc3R5bGU+Ci0gICAgPC9oZWFkPgotICAgIDxib2R5PgotICAgICAgICA8ZGl2IGlkPSJiYW5uZXIiPgotICAgICAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJiYW5uZXJTdGF0dXMiIC8+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICAKLSAgICAgICAgPGRpdiBpZD0ibWVudSI+Ci0gICAgICAgICAgICA8aDE+PHM6cHJvcGVydHkgdmFsdWU9InBhZ2VUaXRsZSIgLz48L2gxPgotICAgICAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJtZW51IiAvPgotICAgICAgICA8L2Rpdj4KLSAgICAgICAgCi0gICAgICAgIDxkaXYgaWQ9ImNvbnRlbnQiPiAKLSAgICAgICAgICAgIDxkaXYgaWQ9ImxlZnRjb250ZW50X3dyYXAiPgotICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImxlZnRjb250ZW50Ij4gCis8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImJhbm5lciIvPgorCis8dGlsZXN4OnVzZUF0dHJpYnV0ZSBuYW1lPSJzaWRlYmFyIiBpZD0ic2lkZWJhciIgY2xhc3NuYW1lPSJqYXZhLmxhbmcuU3RyaW5nIi8+CisKKzxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CisKKyAgICA8ZGl2IGNsYXNzPSJyb3ciPgorCisgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0zIHJvbGxlci1jb2x1bW4tbGVmdCI+CisKKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIHBhbmVsLWRlZmF1bHQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPgorCisgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSc8czp1cmwgdmFsdWU9Ii9yb2xsZXItdWkvaW1hZ2VzL2ZlYXRoZXIuc3ZnIiAvPicKKyAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9IkFTRiBmZWF0IiBoZWlnaHQ9IjEwMCIgYWxpZ249ImNlbnRlciIvPgorICAgICAgICAgICAgICAgICAgICA8aDQ+PHM6dGV4dCBuYW1lPSJnZW5lcmljLnBvd2VyZWRCeSIgLz48L2g0PgorCisgICAgICAgICAgICAgICAgICAgIDxzOmlmIHRlc3Q9ImF1dGhlbnRpY2F0ZWRVc2VyICE9IG51bGwgfHwgYWN0aW9uV2VibG9nICE9IG51bGwiPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJ1c2VyU3RhdHVzIi8+CisgICAgICAgICAgICAgICAgICAgIDwvczppZj4KKwogICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgPC9kaXY+Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIDxkaXYgaWQ9ImNlbnRlcmNvbnRlbnRfd3JhcCI+Ci0gICAgICAgICAgICAgICAgPGRpdiBpZD0iY2VudGVyY29udGVudCI+ICAgCi0gICAgICAgICAgICAgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0ibWVzc2FnZXMiIC8+IAotICAgICAgICAgICAgICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiIC8+ICAgIAorCisgICAgICAgICAgICA8YzppZiB0ZXN0PSIke3NpZGViYXIgIT0gJy9XRUItSU5GL2pzcHMvdGlsZXMvZW1wdHkuanNwJ30iPgorICAgICAgICAgICAgICAgIDxzOnByb3BlcnR5IHZhbHVlPSJzaWRlYmFyIi8+CisgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwgcGFuZWwtZGVmYXVsdCI+CisgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9InNpZGViYXIiLz4KKworICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICA8L2Rpdj4KLSAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgCi0gICAgICAgICAgICA8ZGl2IGlkPSJyaWdodGNvbnRlbnRfd3JhcCI+Ci0gICAgICAgICAgICAgICAgPGRpdiBpZD0icmlnaHRjb250ZW50Ij4gCi0gICAgICAgICAgICAgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0ic2lkZWJhciIgLz4KKyAgICAgICAgICAgIDwvYzppZj4KKworICAgICAgICA8L2Rpdj4KKworICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtOSByb2xsZXItY29sdW1uLXJpZ2h0Ij4KKyAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsIHBhbmVsLWRlZmF1bHQiPgorICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhbmVsLWJvZHkiIHN0eWxlPSJtaW4taGVpZ2h0OiAzMGVtIj4KKworICAgICAgICAgICAgICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9Im1lc3NhZ2VzIi8+CisKKyAgICAgICAgICAgICAgICAgICAgPGgyIGNsYXNzPSJyb2xsZXItcGFnZS10aXRsZSI+PHM6cHJvcGVydHkgdmFsdWU9InBhZ2VUaXRsZSIvPjwvaDI+CisgICAgICAgICAgICAgICAgICAgIDx0aWxlczppbnNlcnRBdHRyaWJ1dGUgbmFtZT0iY29udGVudCIvPgorCiAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgPC9kaXY+Ci0gICAgICAgIAotICAgICAgICA8ZGl2IGlkPSJmb290ZXIiPgotICAgICAgICAgICAgPHRpbGVzOmluc2VydEF0dHJpYnV0ZSBuYW1lPSJmb290ZXIiIC8+Ci0gICAgICAgIDwvZGl2PgotICAgICAgICAKLSAgICA8L2JvZHk+CisKKworICAgIDwvZGl2PgorCis8L2Rpdj4KKworPGZvb3RlciBjbGFzcz0iZm9vdGVyIj4KKyAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgorICAgICAgICA8dGlsZXM6aW5zZXJ0QXR0cmlidXRlIG5hbWU9ImZvb3RlciIvPgorICAgIDwvZGl2PgorPC9mb290ZXI+CisKKzwvYm9keT4KIDwvaHRtbD4KKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvdXNlclN0YXR1cy5qc3AgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwcy90aWxlcy91c2VyU3RhdHVzLmpzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTRkZjRjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcHMvdGlsZXMvdXNlclN0YXR1cy5qc3AKQEAgLTAsMCArMSwzOCBAQAorPCUtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdQorICB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZworICBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCisgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KKy0tJT4KKworPCVAIGluY2x1ZGUgZmlsZT0iL1dFQi1JTkYvanNwcy90YWdsaWJzLXN0cnV0czIuanNwIiAlPgorCis8czppZiB0ZXN0PSJhdXRoZW50aWNhdGVkVXNlciAhPSBudWxsIj4KKyAgICA8cD4KKyAgICA8czp0ZXh0IG5hbWU9Im1haW5QYWdlLmxvZ2dlZEluQXMiIC8+OgorICAgIDxhIGhyZWY9IjxzOnVybCBhY3Rpb249Im1lbnUiIG5hbWVzcGFjZT0iL3JvbGxlci11aSIgLz4iPgorICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iYXV0aGVudGljYXRlZFVzZXIudXNlck5hbWUiLz4KKyAgICA8L2E+CisgICAgPC9wPgorPC9zOmlmPgorCis8czppZiB0ZXN0PSJhY3Rpb25XZWJsb2cgIT0gbnVsbCI+CisgICAgPHA+CisgICAgPHM6dGV4dCBuYW1lPSJtYWluUGFnZS5jdXJyZW50V2Vic2l0ZSIgLz46CisgICAgPGEgaHJlZj0nPHM6cHJvcGVydHkgdmFsdWU9ImFjdGlvbldlYmxvZy5hYnNvbHV0ZVVSTCIgLz4nPgorICAgICAgICA8czpwcm9wZXJ0eSB2YWx1ZT0iYWN0aW9uV2VibG9nLmhhbmRsZSIgLz4KKyAgICA8L2E+CisgICAgPC9wPgorPC9zOmlmPgorICAgIApkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3RpbGVzLnhtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi90aWxlcy54bWwKaW5kZXggN2I5MGRjNS4uZjI1YmI1MiAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3RpbGVzLnhtbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvdGlsZXMueG1sCkBAIC0yMiw3ICsyMiw3IEBACiA8dGlsZXMtZGVmaW5pdGlvbnM+CiAgICAgCiAgICAgPGRlZmluaXRpb24gbmFtZT0iLnRpbGVzLW1haW5tZW51cGFnZSIgdGVtcGxhdGU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvdGlsZXMtbWFpbm1lbnVwYWdlLmpzcCI+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImJhbm5lclN0YXR1cyIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvYmFubmVyU3RhdHVzLmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iYmFubmVyIiAgICAgICB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9iYW5uZXJTdGF0dXMuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJoZWFkIiAgICAgICAgIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiICAgICAgIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2VtcHR5LmpzcCIgLz4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ibWVzc2FnZXMiICAgICB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9tZXNzYWdlcy5qc3AiIC8+CkBAIC0zMiwyOSArMzIsNDAgQEAKICAgICA8L2RlZmluaXRpb24+CiAgICAgCiAgICAgPGRlZmluaXRpb24gbmFtZT0iLnRpbGVzLXRhYmJlZHBhZ2UiIHRlbXBsYXRlPSIvV0VCLUlORi9qc3BzL3RpbGVzL3RpbGVzLXRhYmJlZHBhZ2UuanNwIj4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iYmFubmVyU3RhdHVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9iYW5uZXJTdGF0dXMuanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJiYW5uZXIiICAgICAgIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2Jhbm5lclN0YXR1cy5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InVzZXJTdGF0dXMiICAgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvdXNlclN0YXR1cy5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiICAgICAgICAgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvaGVhZC5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InN0eWxlcyIgICAgICAgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvZW1wdHkuanNwIiAvPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJtZW51IiAgICAgICAgIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL21lbnUuanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJtZW51IiAgICAgICAgIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2VtcHR5LmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic2lkZW1lbnUiICAgICB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9lbXB0eS5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9Im1lc3NhZ2VzIiAgICAgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvbWVzc2FnZXMuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiAgICAgIHZhbHVlPSIke2NvbnRlbnR9IiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzaWRlYmFyIiAgICAgIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2VtcHR5LmpzcCIgLz4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iZm9vdGVyIiAgICAgICB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9mb290ZXIuanNwIiAvPgogICAgIDwvZGVmaW5pdGlvbj4KLSAgICAKKwogICAgIDxkZWZpbml0aW9uIG5hbWU9Ii50aWxlcy1zaW1wbGVwYWdlIiB0ZW1wbGF0ZT0iL1dFQi1JTkYvanNwcy90aWxlcy90aWxlcy1zaW1wbGVwYWdlLmpzcCI+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImJhbm5lciIgICAgICAgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvZW1wdHkuanNwIiAvPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJiYW5uZXJTdGF0dXMiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2Jhbm5lclN0YXR1cy5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImJhbm5lciIgICAgICAgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvYmFubmVyU3RhdHVzLmpzcCIgLz4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iaGVhZCIgICAgICAgICB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9oZWFkLmpzcCIgLz4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiAgICAgICB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9jc3Mtbm9zaWRlYmFyLmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiAgICAgICB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9lbXB0eS5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9Im1lc3NhZ2VzIiAgICAgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvbWVzc2FnZXMuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiAgICAgIHZhbHVlPSIke2NvbnRlbnR9IiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJmb290ZXIiICAgICAgIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2Zvb3Rlci5qc3AiIC8+CiAgICAgPC9kZWZpbml0aW9uPgotICAgIAorCisgICAgPGRlZmluaXRpb24gbmFtZT0iLnRpbGVzLWxvZ2lucGFnZSIgdGVtcGxhdGU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvdGlsZXMtbG9naW5wYWdlLmpzcCI+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImJhbm5lciIgICAgICAgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvYmFubmVyU3RhdHVzLmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iaGVhZCIgICAgICAgICB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9oZWFkLmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiAgICAgICB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9lbXB0eS5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9Im1lc3NhZ2VzIiAgICAgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvbWVzc2FnZXMuanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiAgICAgIHZhbHVlPSIke2NvbnRlbnR9IiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJmb290ZXIiICAgICAgIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2Zvb3Rlci5qc3AiIC8+CisgICAgPC9kZWZpbml0aW9uPgorCiAgICAgPGRlZmluaXRpb24gbmFtZT0iLnRpbGVzLWluc3RhbGxwYWdlIiB0ZW1wbGF0ZT0iL1dFQi1JTkYvanNwcy90aWxlcy90aWxlcy1pbnN0YWxscGFnZS5qc3AiPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJiYW5uZXIiICAgICAgIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2VtcHR5LmpzcCIgLz4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iaGVhZCIgICAgICAgICB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9oZWFkLmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiAgICAgICB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9lbXB0eS5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9Im1lc3NhZ2VzIiAgICAgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvbWVzc2FnZXMuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiAgICAgIHZhbHVlPSIke2NvbnRlbnR9IiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJmb290ZXIiICAgICAgIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2Zvb3Rlci5qc3AiIC8+CkBAIC02Myw2ICs3NCw3IEBACiAgICAgPGRlZmluaXRpb24gbmFtZT0iLnRpbGVzLWVycm9ycGFnZSIgdGVtcGxhdGU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvdGlsZXMtZXJyb3JwYWdlLmpzcCI+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImJhbm5lciIgICAgICAgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvZW1wdHkuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJoZWFkIiAgICAgICAgIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQuanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiICAgICAgIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2VtcHR5LmpzcCIgLz4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ibWVzc2FnZXMiICAgICB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9tZXNzYWdlcy5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiICAgICAgdmFsdWU9IiR7Y29udGVudH0iIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImZvb3RlciIgICAgICAgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvZm9vdGVyLmpzcCIgLz4KQEAgLTczLDkgKzg1LDkgQEAKICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ibWVzc2FnZXMiICAgICB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9tZXNzYWdlcy5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InN0eWxlcyIgICAgICAgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvZW1wdHkuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiAgICAgIHZhbHVlPSIke2NvbnRlbnR9IiAvPgotICAgICAgIAogICAgIDwvZGVmaW5pdGlvbj4KLSAgICA8ZGVmaW5pdGlvbiBuYW1lPSIudGlsZXMtcG9wdXBwYWdlLW9ubHktY29udGVudCIgdGVtcGxhdGU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvdGlsZXMtcG9wdXBwYWdlLmpzcCI+ICAgICAgIAorCisgICAgPGRlZmluaXRpb24gbmFtZT0iLnRpbGVzLXBvcHVwcGFnZS1vbmx5LWNvbnRlbnQiIGV4dGVuZHM9Ii50aWxlcy1wb3B1cHBhZ2UiPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiAgICAgIHZhbHVlPSIke2NvbnRlbnR9IiAvPgogICAgIDwvZGVmaW5pdGlvbj4KICAgICAKQEAgLTg2LDggKzk4LDkgQEAKICAgICAKICAgICAgICAgCiAgICAgPCEtLSBjb3JlIHBhZ2VzIChhbmQgYXNzb2NpYXRlcykgLS0+Ci0gICAgPGRlZmluaXRpb24gbmFtZT0iLkxvZ2luIiBleHRlbmRzPSIudGlsZXMtc2ltcGxlcGFnZSIgPgorICAgIDxkZWZpbml0aW9uIG5hbWU9Ii5Mb2dpbiIgZXh0ZW5kcz0iLnRpbGVzLWxvZ2lucGFnZSIgPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9jb3JlL0xvZ2luLmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiAgdmFsdWU9Ii9XRUItSU5GL2pzcHMvY29yZS9Mb2dpbi1jc3MuanNwIiAvPgogICAgIDwvZGVmaW5pdGlvbj4KICAgICAKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuUmVnaXN0ZXIiIGV4dGVuZHM9Ii50aWxlcy1zaW1wbGVwYWdlIiA+CkBAIC0xMjEsNyArMTM0LDcgQEAKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuTWFpbk1lbnUiIGV4dGVuZHM9Ii50aWxlcy1tYWlubWVudXBhZ2UiID4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvY29yZS9NYWluTWVudS5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InNpZGViYXIiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2NvcmUvTWFpbk1lbnVTaWRlYmFyLmpzcCIgLz4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9jc3Mtc2lkZWJhci5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InN0eWxlcyIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvZW1wdHkuanNwIiAvPgogICAgIDwvZGVmaW5pdGlvbj4KICAgICAKICAgICAKQEAgLTE2MCwxMCArMTczLDYgQEAKICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvYWRtaW4vR2xvYmFsQ29uZmlnLmpzcCIgLz4KICAgICA8L2RlZmluaXRpb24+CiAgICAgCi0gICAgPGRlZmluaXRpb24gbmFtZT0iLkZyb250cGFnZUNvbmZpZyIgZXh0ZW5kcz0iLnRpbGVzLXNpbXBsZXBhZ2UiID4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvYWRtaW4vRnJvbnRwYWdlQ29uZmlnLmpzcCIgLz4KLSAgICA8L2RlZmluaXRpb24+Ci0gICAgCiAgICAgPGRlZmluaXRpb24gbmFtZT0iLlVzZXJBZG1pbiIgZXh0ZW5kcz0iLnRpbGVzLXRhYmJlZHBhZ2UiID4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvYWRtaW4vVXNlckFkbWluLmpzcCIgLz4KICAgICA8L2RlZmluaXRpb24+CkBAIC0xNzMsMjIgKzE4MiwxOCBAQAogICAgIDwvZGVmaW5pdGlvbj4KICAgICAKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuR2xvYmFsQ29tbWVudE1hbmFnZW1lbnQiIGV4dGVuZHM9Ii50aWxlcy10YWJiZWRwYWdlIiA+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQtYWpheC5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9lZGl0b3IvQ29tbWVudHMuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzaWRlYmFyIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9lZGl0b3IvQ29tbWVudHNTaWRlYmFyLmpzcCIgLz4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9jc3MtY2hlY2tib3hsaXN0Rml4LmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9lbXB0eS5qc3AiIC8+CiAgICAgPC9kZWZpbml0aW9uPgogICAgIAogICAgIDxkZWZpbml0aW9uIG5hbWU9Ii5QaW5nVGFyZ2V0cyIgZXh0ZW5kcz0iLnRpbGVzLXRhYmJlZHBhZ2UiID4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvYWRtaW4vUGluZ1RhcmdldHMuanNwIiAvPgogICAgIDwvZGVmaW5pdGlvbj4KLSAgICAKLSAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuUGluZ1RhcmdldENvbmZpcm0iIGV4dGVuZHM9Ii50aWxlcy10YWJiZWRwYWdlIiA+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2FkbWluL1BpbmdUYXJnZXRSZW1vdmUuanNwIiAvPgotICAgIDwvZGVmaW5pdGlvbj4KLSAgICAKKwogICAgIDxkZWZpbml0aW9uIG5hbWU9Ii5QaW5nVGFyZ2V0RWRpdCIgZXh0ZW5kcz0iLnRpbGVzLXRhYmJlZHBhZ2UiID4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvYWRtaW4vUGluZ1RhcmdldEVkaXQuanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9lbXB0eS5qc3AiIC8+CiAgICAgPC9kZWZpbml0aW9uPgogICAgIAogICAgIDxkZWZpbml0aW9uIG5hbWU9Ii5DYWNoZUluZm8iIGV4dGVuZHM9Ii50aWxlcy10YWJiZWRwYWdlIiA+CkBAIC0xOTksMTUxICsyMDQsMTMyIEBACiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2FkbWluL1BsYW5ldENvbmZpZy5qc3AiIC8+CiAgICAgPC9kZWZpbml0aW9uPgogICAgIAotICAgIDxkZWZpbml0aW9uIG5hbWU9Ii5QbGFuZXRTdWJzY3JpcHRpb25zIiBleHRlbmRzPSIudGlsZXMtdGFiYmVkcGFnZSIgPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9hZG1pbi9QbGFuZXRTdWJzY3JpcHRpb25zLmpzcCIgLz4KKyAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuUGxhbmV0R3JvdXBTdWJzIiBleHRlbmRzPSIudGlsZXMtdGFiYmVkcGFnZSIgPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9hZG1pbi9QbGFuZXRHcm91cFN1YnMuanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzaWRlYmFyIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9hZG1pbi9QbGFuZXRHcm91cFN1YnNTaWRlYmFyLmpzcCIgLz4KICAgICA8L2RlZmluaXRpb24+CiAgICAgCiAgICAgPGRlZmluaXRpb24gbmFtZT0iLlBsYW5ldEdyb3VwcyIgZXh0ZW5kcz0iLnRpbGVzLXRhYmJlZHBhZ2UiID4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvYWRtaW4vUGxhbmV0R3JvdXBzLmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic2lkZWJhciIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvYWRtaW4vUGxhbmV0R3JvdXBTaWRlYmFyLmpzcCIgLz4KICAgICA8L2RlZmluaXRpb24+CiAKICAgICA8IS0tIHdlYmxvZyBlZGl0b3IgcGFnZXMgKGFuZCBhc3NvY2lhdGVzKSAtLT4KICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuTWVkaWFGaWxlQWRkIiBleHRlbmRzPSIudGlsZXMtdGFiYmVkcGFnZSIgPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJoZWFkIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9oZWFkLWFqYXguanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJoZWFkIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9oZWFkLmpzcCIgLz4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvZWRpdG9yL01lZGlhRmlsZUFkZC5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InNpZGViYXIiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2VtcHR5LmpzcCIgLz4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9jc3Mtbm9zaWRlYmFyLmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9lbXB0eS5qc3AiIC8+CiAgICAgPC9kZWZpbml0aW9uPgogCiAgICAgPGRlZmluaXRpb24gbmFtZT0iLk1lZGlhRmlsZUVkaXQiIGV4dGVuZHM9Ii50aWxlcy1wb3B1cHBhZ2UiID4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iaGVhZCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvaGVhZC1hamF4LmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iaGVhZCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvaGVhZC5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVFZGl0LmpzcCIgLz4KICAgICA8L2RlZmluaXRpb24+CiAKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuTWVkaWFGaWxlQWRkRXh0ZXJuYWxJbmNsdWRlIiBleHRlbmRzPSIudGlsZXMtcG9wdXBwYWdlLW9ubHktY29udGVudCIgPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJoZWFkIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9oZWFkLWFqYXguanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJoZWFkIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9oZWFkLmpzcCIgLz4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvZWRpdG9yL01lZGlhRmlsZUFkZEV4dGVybmFsSW5jbHVkZS5qc3AiIC8+CiAgICAgPC9kZWZpbml0aW9uPgogCiAgICAgPGRlZmluaXRpb24gbmFtZT0iLk1lZGlhRmlsZUltYWdlQ2hvb3NlciIgZXh0ZW5kcz0iLnRpbGVzLXBvcHVwcGFnZS1vbmx5LWNvbnRlbnQiID4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iaGVhZCIgICAgIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQtYWpheC5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiICAgICB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9oZWFkLmpzcCIgLz4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVJbWFnZUNob29zZXIuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJtZXNzYWdlcyIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvbWVzc2FnZXMuanNwIiAvPgogICAgIDwvZGVmaW5pdGlvbj4KIAogICAgIDxkZWZpbml0aW9uIG5hbWU9Ii5NZWRpYUZpbGVJbWFnZURpbWVuc2lvbiIgZXh0ZW5kcz0iLnRpbGVzLXBvcHVwcGFnZS1vbmx5LWNvbnRlbnQiID4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iaGVhZCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvaGVhZC1hamF4LmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iaGVhZCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvaGVhZC5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVJbWFnZURpbWVuc2lvbi5qc3AiIC8+CiAgICAgPC9kZWZpbml0aW9uPgotICAgIAotICAgIDxkZWZpbml0aW9uIG5hbWU9Ii5NZWRpYUZpbGVTZWFyY2hJbmNsdWRlIiBleHRlbmRzPSIudGlsZXMtcG9wdXBwYWdlIiA+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQtYWpheC5qc3AiIC8+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVTZWFyY2guanNwIiAvPgotICAgIDwvZGVmaW5pdGlvbj4KIAogICAgIDxkZWZpbml0aW9uIG5hbWU9Ii5NZWRpYUZpbGVBZGRJbmNsdWRlIiBleHRlbmRzPSIudGlsZXMtcG9wdXBwYWdlIiA+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQtYWpheC5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9lZGl0b3IvTWVkaWFGaWxlQWRkLmpzcCIgLz4KICAgICA8L2RlZmluaXRpb24+CiAKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuTWVkaWFGaWxlQWRkU3VjY2Vzc0luY2x1ZGUiIGV4dGVuZHM9Ii50aWxlcy1wb3B1cHBhZ2UiID4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iaGVhZCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvaGVhZC1hamF4LmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iaGVhZCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvaGVhZC5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVBZGRTdWNjZXNzSW5jbHVkZS5qc3AiIC8+CiAgICAgPC9kZWZpbml0aW9uPgogICAgIAogICAgIDxkZWZpbml0aW9uIG5hbWU9Ii5NZWRpYUZpbGVFZGl0U3VjY2VzcyIgZXh0ZW5kcz0iLnRpbGVzLXBvcHVwcGFnZSIgPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJoZWFkIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9oZWFkLWFqYXguanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJoZWFkIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9oZWFkLmpzcCIgLz4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvZWRpdG9yL01lZGlhRmlsZUVkaXRTdWNjZXNzLmpzcCIgLz4KICAgICA8L2RlZmluaXRpb24+CiAKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuTWVkaWFGaWxlVmlldyIgZXh0ZW5kcz0iLnRpbGVzLXRhYmJlZHBhZ2UiID4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iaGVhZCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvaGVhZC1hamF4LmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iaGVhZCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvaGVhZC5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVWaWV3LmpzcCIgLz4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic2lkZWJhciIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvZWRpdG9yL01lZGlhRmlsZVNpZGViYXIuanNwIiAvPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2Nzcy1zaWRlYmFyLmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9lbXB0eS5qc3AiIC8+CiAgICAgPC9kZWZpbml0aW9uPgogCiAgICAgPGRlZmluaXRpb24gbmFtZT0iLk1lZGlhRmlsZUFkZFN1Y2Nlc3MiIGV4dGVuZHM9Ii50aWxlcy10YWJiZWRwYWdlIiA+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQtYWpheC5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9lZGl0b3IvTWVkaWFGaWxlQWRkU3VjY2Vzcy5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InNpZGViYXIiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2VtcHR5LmpzcCIgLz4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9jc3Mtbm9zaWRlYmFyLmpzcCIgLz4KLSAgICA8L2RlZmluaXRpb24+Ci0KLSAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuVGFidWxhclZpZXciIGV4dGVuZHM9Ii50aWxlcy10YWJiZWRwYWdlIiA+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQtYWpheC5qc3AiIC8+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9UYWJ1bGFyVmlldy5qc3AiIC8+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InNpZGViYXIiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9NZWRpYUZpbGVTaWRlYmFyLmpzcCIgLz4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9jc3Mtc2lkZWJhci5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InN0eWxlcyIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvZW1wdHkuanNwIiAvPgogICAgIDwvZGVmaW5pdGlvbj4KIAogICAgIDxkZWZpbml0aW9uIG5hbWU9Ii5FbnRyeUVkaXQiIGV4dGVuZHM9Ii50aWxlcy10YWJiZWRwYWdlIiA+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQtYWpheC5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9lZGl0b3IvRW50cnlFZGl0LmpzcCIgLz4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic2lkZWJhciIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvZWRpdG9yL0VudHJ5U2lkZWJhci5qc3AiIC8+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InN0eWxlcyIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvY3NzLXNpZGViYXIuanNwIiAvPgotICAgIDwvZGVmaW5pdGlvbj4KLQotICAgIDxkZWZpbml0aW9uIG5hbWU9Ii5FbnRyeVJlbW92ZSIgZXh0ZW5kcz0iLnRpbGVzLXRhYmJlZHBhZ2UiID4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvZWRpdG9yL0VudHJ5UmVtb3ZlLmpzcCIgLz4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9jc3Mtbm9zaWRlYmFyLmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9lbXB0eS5qc3AiIC8+CiAgICAgPC9kZWZpbml0aW9uPgogCiAgICAgPGRlZmluaXRpb24gbmFtZT0iLkVudHJpZXMiIGV4dGVuZHM9Ii50aWxlcy10YWJiZWRwYWdlIiA+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQtYWpheC5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9lZGl0b3IvRW50cmllcy5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InNpZGViYXIiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9FbnRyaWVzU2lkZWJhci5qc3AiIC8+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InN0eWxlcyIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvY3NzLXNpZGViYXIuanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2VtcHR5LmpzcCIgLz4KICAgICA8L2RlZmluaXRpb24+CiAKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuQ29tbWVudHMiIGV4dGVuZHM9Ii50aWxlcy10YWJiZWRwYWdlIiA+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQtYWpheC5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImhlYWQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2hlYWQuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9lZGl0b3IvQ29tbWVudHMuanNwIiAvPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzaWRlYmFyIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9lZGl0b3IvQ29tbWVudHNTaWRlYmFyLmpzcCIgLz4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9jc3MtY2hlY2tib3hsaXN0Rml4LmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9lbXB0eS5qc3AiIC8+CiAgICAgPC9kZWZpbml0aW9uPgogICAgIAogICAgIDxkZWZpbml0aW9uIG5hbWU9Ii5DYXRlZ29yaWVzIiBleHRlbmRzPSIudGlsZXMtdGFiYmVkcGFnZSIgPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9lZGl0b3IvQ2F0ZWdvcmllcy5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InNpZGViYXIiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9DYXRlZ29yaWVzU2lkZWJhci5qc3AiIC8+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InN0eWxlcyIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvY3NzLXNpZGViYXIuanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2VtcHR5LmpzcCIgLz4KICAgICA8L2RlZmluaXRpb24+Ci0gICAgCisKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuQ2F0ZWdvcnlFZGl0IiBleHRlbmRzPSIudGlsZXMtdGFiYmVkcGFnZSIgPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9lZGl0b3IvQ2F0ZWdvcnlFZGl0LmpzcCIgLz4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9jc3Mtbm9zaWRlYmFyLmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvZW1wdHkuanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2VtcHR5LmpzcCIgLz4KICAgICA8L2RlZmluaXRpb24+Ci0gICAgCisKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuQ2F0ZWdvcnlSZW1vdmUiIGV4dGVuZHM9Ii50aWxlcy10YWJiZWRwYWdlIiA+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9DYXRlZ29yeVJlbW92ZS5qc3AiIC8+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InN0eWxlcyIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvY3NzLW5vc2lkZWJhci5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2VtcHR5LmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9lbXB0eS5qc3AiIC8+CiAgICAgPC9kZWZpbml0aW9uPgotICAgIAorCiAgICAgPGRlZmluaXRpb24gbmFtZT0iLkJvb2ttYXJrcyIgZXh0ZW5kcz0iLnRpbGVzLXRhYmJlZHBhZ2UiID4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvZWRpdG9yL0Jvb2ttYXJrcy5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InNpZGViYXIiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9Cb29rbWFya3NTaWRlYmFyLmpzcCIgLz4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9jc3Mtc2lkZWJhci5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InN0eWxlcyIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvZW1wdHkuanNwIiAvPgogICAgIDwvZGVmaW5pdGlvbj4KLSAgICAKLSAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuQm9va21hcmtFZGl0IiBleHRlbmRzPSIudGlsZXMtdGFiYmVkcGFnZSIgPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9lZGl0b3IvQm9va21hcmtFZGl0LmpzcCIgLz4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9jc3Mtbm9zaWRlYmFyLmpzcCIgLz4KLSAgICA8L2RlZmluaXRpb24+Ci0gICAgCisKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuQm9va21hcmtzSW1wb3J0IiBleHRlbmRzPSIudGlsZXMtdGFiYmVkcGFnZSIgPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9lZGl0b3IvQm9va21hcmtzSW1wb3J0LmpzcCIgLz4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9jc3Mtbm9zaWRlYmFyLmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9lbXB0eS5qc3AiIC8+CiAgICAgPC9kZWZpbml0aW9uPgotICAgIAorCisgICAgPGRlZmluaXRpb24gbmFtZT0iLkJvb2ttYXJrRWRpdCIgZXh0ZW5kcz0iLnRpbGVzLXRhYmJlZHBhZ2UiID4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvZW1wdHkuanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2VtcHR5LmpzcCIgLz4KKyAgICA8L2RlZmluaXRpb24+CisKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuRm9sZGVyRWRpdCIgZXh0ZW5kcz0iLnRpbGVzLXRhYmJlZHBhZ2UiID4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvZWRpdG9yL0ZvbGRlckVkaXQuanNwIiAvPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2Nzcy1ub3NpZGViYXIuanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9lbXB0eS5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InN0eWxlcyIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvZW1wdHkuanNwIiAvPgogICAgIDwvZGVmaW5pdGlvbj4KLSAgICAKLSAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuUmVzb3VyY2VzIiBleHRlbmRzPSIudGlsZXMtdGFiYmVkcGFnZSIgPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9lZGl0b3IvUmVzb3VyY2VzLmpzcCIgLz4KLSAgICA8L2RlZmluaXRpb24+Ci0gICAgCisKICAgICA8IS0tIHdlYmxvZyBhZG1pbiBwYWdlcyAoYW5kIGFzc29jaWF0ZXMpIC0tPgogICAgIDxkZWZpbml0aW9uIG5hbWU9Ii5XZWJsb2dDb25maWciIGV4dGVuZHM9Ii50aWxlcy10YWJiZWRwYWdlIiA+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9XZWJsb2dDb25maWcuanNwIiAvPgpAQCAtMzUxLDQ5ICszMzcsMzkgQEAKICAgICAKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuV2VibG9nUmVtb3ZlQ29uZmlybSIgZXh0ZW5kcz0iLnRpbGVzLXRhYmJlZHBhZ2UiID4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvZWRpdG9yL1dlYmxvZ1JlbW92ZUNvbmZpcm0uanNwIiAvPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2Nzcy1ub3NpZGViYXIuanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2VtcHR5LmpzcCIgLz4KICAgICA8L2RlZmluaXRpb24+CiAgICAgCiAgICAgPGRlZmluaXRpb24gbmFtZT0iLlRoZW1lRWRpdCIgZXh0ZW5kcz0iLnRpbGVzLXRhYmJlZHBhZ2UiID4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iaGVhZCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvaGVhZC1hamF4LmpzcCIgLz4KKyAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iaGVhZCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvaGVhZC5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9UaGVtZUVkaXQuanNwIiAvPgogICAgIDwvZGVmaW5pdGlvbj4KICAgICAKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuU3R5bGVzaGVldEVkaXQiIGV4dGVuZHM9Ii50aWxlcy10YWJiZWRwYWdlIiAgPgogICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9lZGl0b3IvU3R5bGVzaGVldEVkaXQuanNwIiAvPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2Nzcy1ub3NpZGViYXIuanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2VtcHR5LmpzcCIgLz4KICAgICA8L2RlZmluaXRpb24+CiAKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuVGVtcGxhdGVzIiBleHRlbmRzPSIudGlsZXMtdGFiYmVkcGFnZSIgID4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvZWRpdG9yL1RlbXBsYXRlcy5qc3AiIC8+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InNpZGViYXIiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9UZW1wbGF0ZXNTaWRlYmFyLmpzcCIgLz4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9jc3Mtc2lkZWJhci5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InN0eWxlcyIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvZW1wdHkuanNwIiAvPgogICAgIDwvZGVmaW5pdGlvbj4KICAgICAKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuVGVtcGxhdGVFZGl0IiBleHRlbmRzPSIudGlsZXMtdGFiYmVkcGFnZSIgID4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvZWRpdG9yL1RlbXBsYXRlRWRpdC5qc3AiIC8+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InN0eWxlcyIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvY3NzLW5vc2lkZWJhci5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InN0eWxlcyIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvZW1wdHkuanNwIiAvPgogICAgIDwvZGVmaW5pdGlvbj4KLSAgICAKLSAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuVGVtcGxhdGVSZW1vdmUiIGV4dGVuZHM9Ii50aWxlcy10YWJiZWRwYWdlIiAgPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJjb250ZW50IiB2YWx1ZT0iL1dFQi1JTkYvanNwcy9lZGl0b3IvVGVtcGxhdGVSZW1vdmUuanNwIiAvPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2Nzcy1ub3NpZGViYXIuanNwIiAvPgotICAgIDwvZGVmaW5pdGlvbj4KLSAgICAKLSAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuVGVtcGxhdGVzUmVtb3ZlIiBleHRlbmRzPSIudGlsZXMtdGFiYmVkcGFnZSIgID4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvZWRpdG9yL1RlbXBsYXRlc1JlbW92ZS5qc3AiIC8+Ci0gICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InN0eWxlcyIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvY3NzLW5vc2lkZWJhci5qc3AiIC8+Ci0gICAgPC9kZWZpbml0aW9uPgotICAgIAorCiAgICAgPGRlZmluaXRpb24gbmFtZT0iLk1lbWJlcnMiIGV4dGVuZHM9Ii50aWxlcy10YWJiZWRwYWdlIiA+CiAgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9ImNvbnRlbnQiIHZhbHVlPSIvV0VCLUlORi9qc3BzL2VkaXRvci9NZW1iZXJzLmpzcCIgLz4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic2lkZWJhciIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvZWRpdG9yL01lbWJlcnNTaWRlYmFyLmpzcCIgLz4KLSAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0ic3R5bGVzIiB2YWx1ZT0iL1dFQi1JTkYvanNwcy90aWxlcy9jc3Mtc2lkZWJhci5qc3AiIC8+CisgICAgICAgIDxwdXQtYXR0cmlidXRlIG5hbWU9InN0eWxlcyIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvdGlsZXMvZW1wdHkuanNwIiAvPgogICAgIDwvZGVmaW5pdGlvbj4KICAgICAKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuTWVtYmVyc0ludml0ZSIgZXh0ZW5kcz0iLnRpbGVzLXRhYmJlZHBhZ2UiID4KICAgICAgICAgPHB1dC1hdHRyaWJ1dGUgbmFtZT0iY29udGVudCIgdmFsdWU9Ii9XRUItSU5GL2pzcHMvZWRpdG9yL01lbWJlcnNJbnZpdGUuanNwIiAvPgotICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2Nzcy1ub3NpZGViYXIuanNwIiAvPgorICAgICAgICA8cHV0LWF0dHJpYnV0ZSBuYW1lPSJzdHlsZXMiIHZhbHVlPSIvV0VCLUlORi9qc3BzL3RpbGVzL2VtcHR5LmpzcCIgLz4KICAgICA8L2RlZmluaXRpb24+CiAKICAgICA8ZGVmaW5pdGlvbiBuYW1lPSIuTWVtYmVyUmVzaWduIiBleHRlbmRzPSIudGlsZXMtc2ltcGxlcGFnZSIgPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAppbmRleCBiYTc0Mzc1Li4zY2NkNzMwIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApAQCAtMTU0LDYgKzE1NCwxMCBAQAogICAgICAgICA8ZGlzcGF0Y2hlcj5SRVFVRVNUPC9kaXNwYXRjaGVyPgogICAgICAgICA8ZGlzcGF0Y2hlcj5GT1JXQVJEPC9kaXNwYXRjaGVyPgogICAgIDwvZmlsdGVyLW1hcHBpbmc+CisgICAgPGZpbHRlci1tYXBwaW5nPgorICAgICAgICA8ZmlsdGVyLW5hbWU+c3RydXRzMjwvZmlsdGVyLW5hbWU+CisgICAgICAgIDx1cmwtcGF0dGVybj4vc3RydXRzLyo8L3VybC1wYXR0ZXJuPgorICAgIDwvZmlsdGVyLW1hcHBpbmc+CiAKICAgICA8IS0tIENvbnRleHQgTGlzdGVuZXJzIC0tPgogICAgIDxsaXN0ZW5lcj4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL0pRdWVyeVVJLVJFQURNRS50eHQgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9KUXVlcnlVSS1SRUFETUUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmYxZDc5Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL0pRdWVyeVVJLVJFQURNRS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1UaGUgSlF1ZXJ5IFVJIGZvbGRlciAocm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjApIHdhcyBjcmVhdGVkIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6Ci0KLTEuIEdvaW5nIHRvIHRoZSBKUXVlcnkgVUkgZG93bmxvYWQgYnVpbGRlciAoaHR0cDovL2pxdWVyeXVpLmNvbS9kb3dubG9hZC8pIGFuZCBjaG9vc2luZyB0aGUgbGF0ZXN0IHN0YWJsZSB2ZXJzaW9uLgotMi4gVW5kZXIgQ29tcG9uZW50cywgdW5zZWxlY3RpbmcgInRvZ2dsZSBhbGwiIHRvIG1ha2Ugc3VyZSBub3RoaW5nIHNlbGVjdGVkLgotMy4gQ2hvb3NpbmcgdGhlIGNvbXBvbmVudHMgUm9sbGVyIHVzZXM6ICBhY2NvcmRpb24sIGRhdGVwaWNrZXIsIGRpYWxvZywgYXV0b2NvbXBsZXRlLCBhbmQgdGFicy4KLSAgIEEgZnVsbCBsaXN0IGNhbiBiZSBvYnRhaW5lZCBieSBvcGVuaW5nIHVwIHRoZSBjdXJyZW50IGpxdWVyeS11aS5taW4uanMgYW5kIHJlYWRpbmcgdGhlIGF1dG9nZW5lcmF0ZWQgY29tbWVudCBoZWFkZXIuCi0gICBMZXQgdGhlIERvd25sb2FkIEJ1aWxkZXIgc2VsZWN0IHdoYXRldmVyIGFkZGl0aW9uYWwgcHJlcmVxdWlzaXRlcyBuZWVkZWQuCi00LiBTZWxlY3RpbmcgdGhlbWUgIlJlZG1vbmQiLCBvciBhIGRpZmZlcmVudCBvbmUgaWYgZGVzaXJlZC4gIChIb3cgZWFjaCB0aGVtZSBsb29rcyBjYW4gYmUgZGV0ZXJtaW5lZCBieSBnb2luZwotICAgdG86IGh0dHA6Ly9qcXVlcnl1aS5jb20vdGhlbWVyb2xsZXIvIGFuZCBzZWxlY3RpbmcgdGhlICJHYWxsZXJ5IiB0YWIuKQotNS4gRm9yIHRoZSBzdWJzZXF1ZW50IGRvd25sb2FkLCBleHRyYWN0IGludG8gYSBuZXcgZm9sZGVyIHVuZGVyIHJvbGxlci11aSBhbmQgZGVsZXRlIGFsbCB0aGUgbm9uLSJtaW4iIENTUwotICAgYW5kIEpTIGZpbGVzIHdpdGhpbiB0aGF0IGZvbGRlci4gIEFsc28gZGVsZXRlOgotICAgYSkgdGhlIGluZGV4Lmh0bWwgYW5kIGV4dGVybmFsL2pxdWVyeS9qcXVlcnkuanMgZmlsZXMuIChvdXIgSlF1ZXJ5IGlzIGtlcHQgaW4gdGhlIHJvbGxlci11aS9zY3JpcHRzIGZvbGRlci4pCi0gICBiKSB0aGUgc3RydWN0dXJlIGFuZCB0aGVtZSBDU1MgZmlsZXMgKHRoZXkgYXJlIHVudXNlZCBzdWJzZXRzIG9mIHRoZSBqcXVlcnktdWkubWluLmNzcykKLTYuIFVwZGF0ZSB0aGUgUm9sbGVyIFVJIEpTUCdzIHRvIHBvaW50IHRvIHRoZSBuZXcgSlF1ZXJ5IFVJIGZvbGRlciBhbmQgdGVzdCBhbGwgd29ya3MuCi03LiBEZWxldGUgdGhlIG9sZCBKUXVlcnkgZm9sZGVyIGFmdGVyIHRoZSBSb2xsZXIgVUkgaGFzIGJlZW4gdXBkYXRlZC4KLTguIFVwZGF0ZSB0aGlzIFJFQURNRSBhcyBuZWNlc3NhcnkgaWYgYW55dGhpbmcncyBjaGFuZ2VkLgotCi1Gb2xsb3dpbmcgdGhlIGFib3ZlIHByb2Nlc3Mgd2hlbiB1cGdyYWRpbmcgdGhlIEpRdWVyeSBVSSB2ZXJzaW9uIG9yIGNoYW5naW5nIHRoZSB0aGVtZSBpdCB1c2VzIHdpbGwgaGVscCB0byBtYWtlIHN1cmUgYWxsIG9sZCBmaWxlcwotZ2V0IGRlbGV0ZWQgd2hpbGUgbm8gbmVjZXNzYXJ5IGZpbGVzIGFyZSBhY2NpZGVudGFsbHkgcmVtb3ZlZC4KLQotTm90ZXM6Ci0xLiBSZWNvbW1lbmRlZCB0byBrZWVwIHRoZSBjb250ZW50cyBvZiB0aGUganF1ZXJ5LXVpLTEuMTEuMCBmb2xkZXIgd2l0aGluIHRoaXMgZm9sZGVyLCBpLmUuLCBkb24ndCBtb3ZlIHRoZSBpbWFnZXMgb3IgQ1NTJyB0byBvdGhlciBmb2xkZXJzLiAgVGhpcyB3YXksCi13aGVuIHdlIGRlbGV0ZSB0aGlzIGZvbGRlciBhcyBhIHBhcnQgb2YgdXBncmFkaW5nIHRoZSBKUXVlcnlVSSB2ZXJzaW9uIHdlJ2xsIGtub3cgdGhhdCBhbGwgdGhlIHJlc291cmNlcyBvZiB0aGlzIHZlcnNpb24gaGF2ZSBhbHNvIGJlZW4gZGVsZXRlZC4KLQotMi4gUmVjb21tZW5kZWQgbm90IHRvIGFkZCBub24tSlF1ZXJ5IHJlc291cmNlcyBpbnRvIHRoaXMgZm9sZGVyOyBhZ2FpbiwgdGhpcyB3YXksIHdoZW4gd2UgZGVsZXRlIHRoaXMgZm9sZGVyIHdlIHdvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgb3RoZXIKLXJlc291cmNlcyBzdGlsbCBuZWVkZWQgYnkgUm9sbGVyIGFsc28gZ2V0dGluZyBkZWxldGVkLgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL1hpbmhhLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9YaW5oYS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4NDVjZjMuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL1hpbmhhLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQ3NyArMCwwIEBACi0uaHRtbGFyZWEgeyBiYWNrZ3JvdW5kOiAjZmZmOyB9Ci0uaHRtbGFyZWEgdGQgeyBtYXJnaW46MDtwYWRkaW5nOjA7IH0KLQotLmh0bWxhcmVhIC50b29sYmFyUm93IHsKLSAgd2lkdGg6MXB4OwotfQotCi0uaHRtbGFyZWEgLnRvb2xiYXIgewotICBjdXJzb3I6IGRlZmF1bHQ7Ci0gIGJhY2tncm91bmQ6IEJ1dHRvbkZhY2U7Ci0gIHBhZGRpbmc6IDNweDsKLSAgYm9yZGVyOiAxcHggc29saWQ7Ci0gIGJvcmRlci1jb2xvcjogQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdyBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0OwotfQotLmh0bWxhcmVhIC50b29sYmFyIHRhYmxlIHsgbWFyZ2luOiAwOyBmb250LWZhbWlseTogVGFob21hLCBWZXJkYW5hLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTFweDsgfQotLmh0bWxhcmVhIC50b29sYmFyIGltZyB7IGJvcmRlcjogbm9uZTsgdmVydGljYWwtYWxpZ246IHRvcDsgfQotLmh0bWxhcmVhIC50b29sYmFyIC5sYWJlbCB7IHBhZGRpbmc6IDAgM3B4OyB9Ci0KLS5odG1sYXJlYSAudG9vbGJhciAuYnV0dG9uIHsKLSAgYmFja2dyb3VuZDogQnV0dG9uRmFjZTsKLSAgY29sb3I6IEJ1dHRvblRleHQ7Ci0gIGJvcmRlcjogMXB4IHNvbGlkIEJ1dHRvbkZhY2U7Ci0gIHBhZGRpbmc6IDFweDsKLSAgbWFyZ2luOiAwOwotICB3aWR0aDogMThweDsKLSAgaGVpZ2h0OiAxOHB4OwotfQotLmh0bWxhcmVhIC50b29sYmFyIGEuYnV0dG9uOmhvdmVyIHsKLSAgYm9yZGVyOiAxcHggc29saWQ7Ci0gIGJvcmRlci1jb2xvcjogQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdyBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0OwotfQotLmh0bWxhcmVhIC50b29sYmFyIGEuYnV0dG9uRGlzYWJsZWQ6aG92ZXIgewotICBib3JkZXItY29sb3I6IEJ1dHRvbkZhY2U7Ci19Ci0uaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbkFjdGl2ZSwKLS5odG1sYXJlYSAudG9vbGJhciAuYnV0dG9uUHJlc3NlZAotewotICBwYWRkaW5nOiAycHggMCAwIDJweDsKLSAgYm9yZGVyOiAxcHggc29saWQ7Ci0gIGJvcmRlci1jb2xvcjogQnV0dG9uU2hhZG93IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25IaWdobGlnaHQgQnV0dG9uU2hhZG93OwotfQotLmh0bWxhcmVhIC50b29sYmFyIC5idXR0b25QcmVzc2VkIHsKLSAgYmFja2dyb3VuZDogQnV0dG9uSGlnaGxpZ2h0OwotfQotLmh0bWxhcmVhIC50b29sYmFyIC5pbmRpY2F0b3IgewotICBwYWRkaW5nOiAwIDNweDsKLSAgb3ZlcmZsb3c6IGhpZGRlbjsKLSAgd2lkdGg6IDIwcHg7Ci0gIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgY3Vyc29yOiBkZWZhdWx0OwotICBib3JkZXI6IDFweCBzb2xpZCBCdXR0b25TaGFkb3c7Ci19Ci0KLS5odG1sYXJlYSAudG9vbGJhciAuYnV0dG9uRGlzYWJsZWQgaW1nIHsKLSAgZmlsdGVyOiBncmF5KCkgYWxwaGEob3BhY2l0eSA9IDI1KTsKLSAgLW1vei1vcGFjaXR5OiAwLjI1OwotICBvcGFjaXR5OiAwLjI1OwotfQotCi0uaHRtbGFyZWEgLnRvb2xiYXIgLnNlcGFyYXRvciB7Ci0gIC8qcG9zaXRpb246IHJlbGF0aXZlOyovCi0gIG1hcmdpbjowIDNweDsKLSAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBCdXR0b25TaGFkb3c7Ci0gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIEJ1dHRvbkhpZ2hsaWdodDsKLSAgd2lkdGg6IDA7Ci0gIGhlaWdodDogMThweDsKLSAgcGFkZGluZzogMDsKLX0KLQotLmh0bWxhcmVhIC50b29sYmFyIC5zcGFjZSB7IHdpZHRoOiA1cHg7IH0KLQotLmh0bWxhcmVhIC50b29sYmFyIHNlbGVjdCwgLmh0bWxhcmVhIC50b29sYmFyIG9wdGlvbiB7IGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjt9Ci0KLS5odG1sYXJlYSAudG9vbGJhciBzZWxlY3QsCi0uaHRtbGFyZWEgLnRvb2xiYXIgc2VsZWN0OmhvdmVyLAotLmh0bWxhcmVhIC50b29sYmFyIHNlbGVjdDphY3RpdmUgeyAKLSAgcG9zaXRpb246cmVsYXRpdmU7Ci0gIHRvcDotMnB4OwotICBtYXJnaW4tYm90dG9tOi0ycHg7Ci0gIGNvbG9yOiBCdXR0b25UZXh0OwotfQotCi0uaHRtbGFyZWEgaWZyYW1lLnhpbmhhX2lmcmFtZSwgLmh0bWxhcmVhIHRleHRhcmVhLnhpbmhhX3RleHRhcmVhCi17Ci0gIGJvcmRlcjogbm9uZTsgLyoxcHggc29saWQ7Ki8KLX0KLQotLmh0bWxhcmVhIC5zdGF0dXNCYXIgewotICBib3JkZXI6IDFweCBzb2xpZDsKLSAgYm9yZGVyLWNvbG9yOiBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3c7Ci0gIHBhZGRpbmc6IDJweCA0cHg7Ci0gIGJhY2tncm91bmQtY29sb3I6IEJ1dHRvbkZhY2U7Ci0gIGNvbG9yOiBCdXR0b25UZXh0OwotICBmb250OiAxMXB4IFRhaG9tYSxWZXJkYW5hLHNhbnMtc2VyaWY7Ci0gIGhlaWdodDoxNnB4OwotICBvdmVyZmxvdzogaGlkZGVuOwotfQotCi0uaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyVHJlZSBhIHsKLSAgcGFkZGluZzogMnB4IDVweDsKLSAgY29sb3I6ICMwMGY7Ci19Ci0KLS5odG1sYXJlYSAuc3RhdHVzQmFyIC5zdGF0dXNCYXJUcmVlIGE6dmlzaXRlZCB7IGNvbG9yOiAjMDBmOyB9Ci0uaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyVHJlZSBhOmhvdmVyIHsKLSAgYmFja2dyb3VuZC1jb2xvcjogSGlnaGxpZ2h0OwotICBjb2xvcjogSGlnaGxpZ2h0VGV4dDsKLSAgcGFkZGluZzogMXB4IDRweDsKLSAgYm9yZGVyOiAxcHggc29saWQgSGlnaGxpZ2h0VGV4dDsKLX0KLQotLnN0YXR1c0JhcldpZGdldENvbnRhaW5lciB7Ci0gIGJhY2tncm91bmQtY29sb3I6IEJ1dHRvbkZhY2U7Ci19Ci0KLS8qIHBvcHVwIGRpYWxvZ3MgKi8KLQotLmRpYWxvZyB7Ci0gIGNvbG9yOiBCdXR0b25UZXh0OwotICBiYWNrZ3JvdW5kOiBCdXR0b25GYWNlOyAKLSAgYm9yZGVyOiAxcHggb3V0c2V0OyAKLSAgYm9yZGVyLWNvbG9yOiBXaW5kb3dGcmFtZTsKLX0KLWRpdi5kaWFsb2cgewotICBwYWRkaW5nLWJvdHRvbToxMHB4OwotICBib3JkZXItcmFkaXVzOiA4cHggOHB4IDAgMDsKLSAgLW1vei1ib3JkZXItcmFkaXVzOiA4cHggOHB4IDAgMDsKLSAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA4cHg7Ci0gIC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDhweDsKLSAgCi0gIGJveC1zaGFkb3c6IDlweCA5cHggMTBweCAjNDQ0OwotICAtbW96LWJveC1zaGFkb3c6IDlweCA5cHggMTBweCAjNDQ0OwotICAtd2Via2l0LWJveC1zaGFkb3c6IDlweCA5cHggMTBweCAjNDQ0OwotfQotZGl2LmRpYWxvZy5tb2RlbGVzcyB7Ci0gIGJveC1zaGFkb3c6IDRweCA0cHggNXB4ICM4ODg7Ci0gIC1tb3otYm94LXNoYWRvdzogNHB4IDRweCA1cHggIzg4ODsKLSAgLXdlYmtpdC1ib3gtc2hhZG93OiA0cHggNHB4IDVweCAjODg4OwotfQotZGl2LmRpYWxvZy5jaHJvbWUgewotICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmUgIUlNUE9SVEFOVDsKLX0KLS5wYW5lbHMgZGl2LmRpYWxvZy5wYW5lbCB7Ci0gIGJvcmRlci1yYWRpdXM6MDsKLSAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwotICAtd2Via2l0LWJvcmRlci1yYWRpdXM6MDsKLSAgCi0gIGJveC1zaGFkb3c6IG5vbmU7Ci0gIC1tb3otYm94LXNoYWRvdzogbm9uZTsKLSAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOwotfQotLnhpbmhhX2RpYWxvZ19iYWNrZ3JvdW5kIHsKLSAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApOwotICAtbW96LW9wYWNpdHk6IDA7Ci0gIG9wYWNpdHk6IDA7Ci0gIGJvcmRlcjpub25lOwotfQotLnhpbmhhX2RpYWxvZ19iYWNrZ3JvdW5kX21vZGFsX2dyZXlvdXQgewotICBiYWNrZ3JvdW5kLWNvbG9yOiM2NjY7Ci0gIGZpbHRlcjogYWxwaGEob3BhY2l0eT03MCkgIUlNUE9SVEFOVDsKLSAgLW1vei1vcGFjaXR5OiAwLjc7Ci0gIG9wYWNpdHk6IDAuNzsKLX0KLS54aW5oYV9kaWFsb2dfYmFja2dyb3VuZF9tb2RhbCB7Ci0gIGZpbHRlcjogYWxwaGEob3BhY2l0eT0wKSAhSU1QT1JUQU5UOwotICAtbW96LW9wYWNpdHk6IDA7Ci0gIG9wYWNpdHk6IDA7Ci0gIGJvcmRlcjpub25lOwotfQotYm9keS54aW5oYV9kaWFsb2dfYmFja2dyb3VuZF9tb2RhbF9ncmV5b3V0IHsKLSAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTEwMCkgIUlNUE9SVEFOVDsKLX0KLWJvZHkueGluaGFfZGlhbG9nX2JhY2tncm91bmRfbW9kYWwgewotICBmaWx0ZXI6IGFscGhhKG9wYWNpdHk9MCk7Ci19Ci0uZGlhbG9nIC5jb250ZW50IHsgcGFkZGluZzogMnB4OyB9Ci0KLS5kaWFsb2csIC5kaWFsb2cgYnV0dG9uLCAuZGlhbG9nIGlucHV0LCAuZGlhbG9nIHNlbGVjdCwgLmRpYWxvZyB0ZXh0YXJlYSwgLmRpYWxvZyB0YWJsZSB7Ci0gIGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsKLX0KLQotLmRpYWxvZyB0YWJsZSB7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IH0KLQotLmRpYWxvZyAudGl0bGUsIC5kaWFsb2cgaDEKLXsKLSAgYmFja2dyb3VuZDogQWN0aXZlQ2FwdGlvbjsKLSAgY29sb3I6IENhcHRpb25UZXh0OwotICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzAwMDsKLSAgcGFkZGluZzogMXB4IDAgMnB4IDVweDsKLSAgZm9udC1zaXplOiAxMnB4OwotICBmb250LXdlaWdodDogYm9sZDsKLSAgY3Vyc29yOiBkZWZhdWx0OwotICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwotfQotLmRpYWxvZyBoMSB7IAotICBwYWRkaW5nLWxlZnQ6MjJweDsKLSAgbWFyZ2luOjA7Ci0gIGJvcmRlci1yYWRpdXM6IDhweCA4cHggMCAwOwotICAtbW96LWJvcmRlci1yYWRpdXM6IDhweCA4cHggMCAwOwotICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDhweDsKLSAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogOHB4OwotfQotLnBhbmVscyAuZGlhbG9nLnBhbmVsIGgxIHsgCi0gIC1tb3otYm9yZGVyLXJhZGl1czogMDsKLSAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOjA7Ci19Ci0KLS5kaWFsb2cgLnRpdGxlIC5idXR0b24gewotICBmbG9hdDogcmlnaHQ7Ci0gIGJvcmRlcjogMXB4IHNvbGlkICM2NmE7Ci0gIHBhZGRpbmc6IDAgMXB4IDAgMnB4OwotICBtYXJnaW4tcmlnaHQ6IDFweDsKLSAgY29sb3I6ICNmZmY7Ci0gIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLQotLmRpYWxvZyAudGl0bGUgLmJ1dHRvbi1oaWxpdGUgeyBib3JkZXItY29sb3I6ICM4OGY7IGJhY2tncm91bmQ6ICM0NGM7IH0KLQotLmRpYWxvZyBidXR0b24gewotICB3aWR0aDogNS41ZW07Ci0gIHBhZGRpbmc6IDA7Ci19Ci0uZGlhbG9nIC5jbG9zZUJ1dHRvbiB7Ci0gIHBhZGRpbmc6IDA7Ci0gIGN1cnNvcjogZGVmYXVsdDsKLSAgYm9yZGVyOiAxcHggc29saWQ7Ci0gIGJvcmRlci1jb2xvcjogQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdyBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0OwotICBoZWlnaHQgOiAxMXB4OwotICB3aWR0aCA6IDExcHg7Ci0gIHZlcnRpY2FsLWFsaWduIDogdG9wOwotICBwb3NpdGlvbiA6IGFic29sdXRlOwotICB0b3AgOiAzcHg7Ci0gIHJpZ2h0IDogMnB4OwotICBiYWNrZ3JvdW5kLWNvbG9yOiBCdXR0b25GYWNlOwotICBjb2xvcjogQnV0dG9uVGV4dDsKLSAgZm9udC1zaXplOiAxM3B4OwotICBmb250LWZhbWlseTogVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsKLSAgdGV4dC1hbGlnbjpjZW50ZXI7Ci0gIGxldHRlci1zcGFjaW5nOjA7Ci0gIG92ZXJmbG93OmhpZGRlbjsKLX0KLS5kaWFsb2cgLmJ1dHRvbkNvbG9yIHsKLSAgd2lkdGggOjFlbTsKLSAgcGFkZGluZzogMXB4OwotICBjdXJzb3I6IGRlZmF1bHQ7Ci0gIGJvcmRlcjogMXB4IHNvbGlkOwotICBib3JkZXItY29sb3I6IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3cgQnV0dG9uU2hhZG93IEJ1dHRvbkhpZ2hsaWdodDsKLX0KLQotLmRpYWxvZyAuYnV0dG9uQ29sb3IgLmNob29zZXIsIC5kaWFsb2cgLmJ1dHRvbkNvbG9yIC5ub2NvbG9yIHsKLSAgaGVpZ2h0OiAwLjZlbTsKLSAgYm9yZGVyOiAxcHggc29saWQ7Ci0gIHBhZGRpbmc6IDAgMWVtOwotICBib3JkZXItY29sb3I6IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdzsKLX0KLQotLmRpYWxvZyAuYnV0dG9uQ2xpY2sgewotICBib3JkZXItY29sb3I6IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdzsKLX0KLS5kaWFsb2cgLmJ1dHRvbkNvbG9yLWhpbGl0ZSB7Ci0gICBib3JkZXItY29sb3I6IEJ1dHRvblNoYWRvdyBCdXR0b25IaWdobGlnaHQgQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdzsKLX0KLQotLmRpYWxvZyAuYnV0dG9uQ29sb3IgLm5vY29sb3IgeyBwYWRkaW5nOiAwOyB9Ci0uZGlhbG9nIC5idXR0b25Db2xvciAubm9jb2xvci1oaWxpdGUgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyBjb2xvcjogI2YwMDsgfQotCi0uZGlhbG9nIC5sYWJlbCB7IHRleHQtYWxpZ246IHJpZ2h0OyB3aWR0aDogNmVtOyB9Ci0uZGlhbG9nIC52YWx1ZSBpbnB1dCB7IHdpZHRoOiAxMDAlOyB9Ci0KLS5kaWFsb2cgbGVnZW5kIHsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KLS5kaWFsb2cgZmllbGRzZXQgdGFibGUgeyBtYXJnaW46IDJweCAwOyB9Ci0gCi0uZGlhbG9nICAuYnV0dG9ucyB7Ci0KLSAgICAgIHBhZGRpbmc6IDFlbTsgCi0gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0uZGlhbG9nIC5yZXNpemVIYW5kbGUgewotICAgIC1tb3otYXBwZWFyYW5jZSA6IHJlc2l6ZXI7Ci0gICAgd2lkdGg6IDEycHg7Ci0gICAgaGVpZ2h0OiAxMnB4OwotICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjMDAwOwotICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICMwMDA7Ci0gICAgY3Vyc29yIDogc2UtcmVzaXplOwotfQotLnBvcHVwd2luIHsKLSAgcGFkZGluZzogMDsKLSAgbWFyZ2luOiAwOwotfQotCi0ucG9wdXB3aW4gLnRpdGxlIHsKLSAgYmFja2dyb3VuZDogI2ZmZjsKLSAgY29sb3I6ICMwMDA7Ci0gIGZvbnQtd2VpZ2h0OiBib2xkOwotICBmb250LXNpemU6IDEyMCU7Ci0gIHBhZGRpbmc6IDNweCAxMHB4OwotICBtYXJnaW4tYm90dG9tOiAxMHB4OwotICBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7Ci0gIGxldHRlci1zcGFjaW5nOiAycHg7Ci19Ci0KLWZvcm0geyBtYXJnaW46IDA7IGJvcmRlcjogbm9uZTsgfQotCi0KLS8qKiBQYW5lbHMgKiovCi0uaHRtbGFyZWEgLnBhbmVsc190b3AKLXsKLSAgYm9yZGVyLWJvdHRvbSA6IDFweCBzb2xpZDsKLSAgYm9yZGVyLWNvbG9yOiBCdXR0b25TaGFkb3c7Ci19Ci0KLS5odG1sYXJlYSAucGFuZWxzX3JpZ2h0Ci17Ci0gIGJvcmRlci1sZWZ0IDogMXB4IHNvbGlkOwotICBib3JkZXItY29sb3I6IEJ1dHRvblNoYWRvdzsKLX0KLQotLmh0bWxhcmVhIC5wYW5lbHNfbGVmdAotewotICBib3JkZXItcmlnaHQgOiAxcHggc29saWQ7Ci0gIGJvcmRlci1jb2xvcjogQnV0dG9uU2hhZG93OwotfQotCi0uaHRtbGFyZWEgLnBhbmVsc19ib3R0b20KLXsKLSAgYm9yZGVyLXRvcCA6IDFweCBzb2xpZDsKLSAgYm9yZGVyLWNvbG9yOiBCdXR0b25TaGFkb3c7Ci19Ci0KLS5odG1sYXJlYSAucGFuZWwgaDEgewotICBjbGVhcjpsZWZ0OwotICBmb250LXNpemU6MC45ZW07Ci19Ci0KLS5odG1sYXJlYSAucGFuZWwgeyAKLSAgb3ZlcmZsb3c6aGlkZGVuOyAKLSAgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsKLSAgcGFkZGluZy1ib3R0b206MCAhSU1QT1JUQU5UOwotICBib3JkZXI6IG5vbmUgIUlNUE9SVEFOVDsKLX0KLS5odG1sYXJlYSAucGFuZWxzX2xlZnQgIC5wYW5lbCB7IGJvcmRlci1yaWdodDpub25lOyBib3JkZXItbGVmdDpub25lOyB9Ci0uaHRtbGFyZWEgLnBhbmVsc19sZWZ0ICBoMSAgICAgeyBib3JkZXItcmlnaHQ6bm9uZTsgIH0KLS5odG1sYXJlYSAucGFuZWxzX3JpZ2h0IC5wYW5lbCB7IGJvcmRlci1yaWdodDpub25lOyBib3JkZXItbGVmdDpub25lOyB9Ci0uaHRtbGFyZWEgLnBhbmVsc19sZWZ0ICBoMSAgICAgeyBib3JkZXItbGVmdDpub25lOyAgfQotLmh0bWxhcmVhIHsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IH0KLQotLmxvYWRpbmcKLXsKLSAgZm9udC1mYW1pbHk6c2Fucy1zZXJpZjsKLSAgcG9zaXRpb246YWJzb2x1dGU7Ci0gIHotaW5kZXg6OTk4OwotICB0ZXh0LWFsaWduOmNlbnRlcjsKLSAgd2lkdGg6MjEycHg7Ci0gIHBhZGRpbmc6IDU1cHggMCA1cHggMDsKLSAgYm9yZGVyOjJweCBzb2xpZCAjY2NjOwotICAvKiBib3JkZXItY29sb3I6IEJ1dHRvbkhpZ2hsaWdodCBCdXR0b25TaGFkb3cgQnV0dG9uU2hhZG93IEJ1dHRvbkhpZ2hsaWdodDsqLwotICBiYWNrZ3JvdW5kOiB1cmwoaW1hZ2VzL3hpbmhhX2xvZ28uZ2lmKSBuby1yZXBlYXQgI2ZmZiBjZW50ZXIgNXB4OwotfQotLmxvYWRpbmdfbWFpbgotewotICBmb250LXNpemU6MTFweDsKLSAgY29sb3I6IzAwMDsKLSAKLX0KLS5sb2FkaW5nX3N1YgotewotICBmb250LXNpemU6OXB4OwotICBjb2xvcjojNjY2OwotICB0ZXh0LWFsaWduOmNlbnRlcjsKLX0KLS8qIENsYXNzZXMgZm9yIGZpbGVtYW5hZ2VyIHN0eWxlcyBpbiBhIGRpYWxvZy4gKi8KLS5kaWFsb2cgYSBpbWcKLXsKLWJvcmRlcjogMCBub25lIHRyYW5zcGFyZW50OwotfQotCi0uZGlhbG9nIGZpZWxkc2V0LmNvbGxhcHNlZCB7Ci1ib3JkZXI6IDAgbm9uZSB0cmFuc3BhcmVudDsKLX0KLQotLmRpYWxvZyBmaWVsZHNldC5jb2xsYXBzZWQgZm9ybSB7Ci1kaXNwbGF5OiBub25lOwotfQotCi0uaGlkZGVuCi17Ci1kaXNwbGF5OiBub25lOwotfQotCi0ucGxhY2VzbWFuYWdlcgotewotICB3aWR0aDogOTUlOwotICBvdmVyZmxvdzogYXV0bzsKLX0KLQotLmZpbGVtYW5hZ2VyCi17Ci0gIHdpZHRoOiA5NSU7Ci0gIGhlaWdodDogMjAwcHg7Ci0gIG92ZXJmbG93OiBhdXRvOwotICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwotfQotLmZpbGVtYW5hZ2VyIGRpdi5maWxlCi17Ci0gIG1pbi13aWR0aDogODBweDsKLSAgaGVpZ2h0OiAxMDBweDsKLSAgcG9zaXRpb246IHJlbGF0aXZlOwotICBmbG9hdDogbGVmdDsKLSAgYm9yZGVyOiAxcHggb3V0c2V0ICM2NjY7Ci0gIG1hcmdpbjogNHB4OwotfQotLnBsYWNlc21hbmFnZXIgZGl2LmZpbGUKLXsKLSAgbWluLXdpZHRoOiA2MHB4OwotICBoZWlnaHQ6IDcwcHg7Ci0gIHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgZmxvYXQ6IGxlZnQ7Ci0gIGJvcmRlcjogMXB4IG91dHNldCAjNjY2OwotICBtYXJnaW46IDRweDsKLX0KLS5maWxlbWFuYWdlciBkaXYuZmlsZTpob3ZlciwKLS5wbGFjZXNtYW5hZ2VyIGRpdi5maWxlOmhvdmVyCi17Ci0gIGJvcmRlcjogMXB4IHNvbGlkICMzMzM7Ci0gIGJhY2tncm91bmQ6ICNmZmZmZjM7Ci19Ci0KLS5maWxlbWFuYWdlciBkaXYuc2VsZWN0ZWQsCi0uZmlsZW1hbmFnZXIgZGl2LnNlbGVjdGVkOmhvdmVyLAotLnBsYWNlc21hbmFnZXIgZGl2LnNlbGVjdGVkLAotLnBsYWNlc21hbmFnZXIgZGl2LnNlbGVjdGVkOmhvdmVyCi17Ci0gIGJhY2tncm91bmQ6ICNmZmZmZGE7Ci0gIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7Ci19Ci0uZmlsZW1hbmFnZXIgLmZpbGVuYW1lIHsKLQltYXJnaW46IDAuNWVtOwotCWNvbG9yOiAjMjIyOwotfQotLmZpbGVtYW5hZ2VyIGRpdi5zZWxlY3RlZCAuZmlsZW5hbWUgewotICBjb2xvcjogIzAwMDsKLX0KLS5maWxlbWFuYWdlciBpbWcudGh1bWIKLXsKLSAgd2lkdGg6IDUwcHg7Ci0gIGhlaWdodDogNTBweDsKLSAgcG9zaXRpb246IGFic29sdXRlOwotICB0b3A6IDUwJTsKLSAgbGVmdDogNTAlOwotICBtYXJnaW46IC0yNXB4IDAgMCAtMjVweDsKLSAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7Ci19Ci0uZmlsZW1hbmFnZXIgaW1nLmljb24KLXsKLSAgd2lkdGg6IDMycHg7Ci0gIGhlaWdodDogMzJweDsKLSAgcG9zaXRpb246IGFic29sdXRlOwotICB0b3A6IDUwJTsKLSAgbGVmdDogNTAlOwotICBtYXJnaW46IC0xNnB4IDAgMCAtMTZweDsKLX0KLS5maWxlbWFuYWdlciBpbWcuYWN0aW9uCi17Ci0gIHdpZHRoOiAxNXB4OwotICBoZWlnaHQ6IDE1cHg7Ci0gIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLX0KLS5maWxlbWFuYWdlciBpbWcuZGVsZXRlCi17Ci0gIGJvdHRvbTogM3B4OwotICBsZWZ0OiAyMHB4OwotfQotLmZpbGVtYW5hZ2VyIGltZy5jb3B5Ci17Ci0gIGJvdHRvbTogM3B4OwotICBsZWZ0OiAzcHg7Ci19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvWGluaGFDb3JlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL1hpbmhhQ29yZS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmVmNTAyOS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvWGluaGFDb3JlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNDMyMiArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvWGluaGFDb3JlLmpzICovCi0gIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAtLSAgWGluaGEgKGlzIG5vdCBodG1sQXJlYSkgLSBodHRwOi8veGluaGEub3JnCi0gICAgLS0KLSAgICAtLSAgVXNlIG9mIFhpbmhhIGlzIGdyYW50ZWQgYnkgdGhlIHRlcm1zIG9mIHRoZSBodG1sQXJlYSBMaWNlbnNlIChiYXNlZCBvbgotICAgIC0tICBCU0QgbGljZW5zZSkgIHBsZWFzZSByZWFkIGxpY2Vuc2UudHh0IGluIHRoaXMgcGFja2FnZSBmb3IgZGV0YWlscy4KLSAgICAtLQotICAgIC0tICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBYaW5oYSBEZXZlbG9wZXIgVGVhbSBhbmQgY29udHJpYnV0b3JzCi0gICAgLS0gIAotICAgIC0tICBYaW5oYSB3YXMgb3JpZ2luYWxseSBiYXNlZCBvbiB3b3JrIGJ5IE1paGFpIEJhem9uIHdoaWNoIGlzOgotICAgIC0tICAgICAgQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQgZHluYXJjaC5jb20uCi0gICAgLS0gICAgICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBpbnRlcmFjdGl2ZXRvb2xzLmNvbSwgaW5jLgotICAgIC0tICAgICAgVGhpcyBjb3B5cmlnaHQgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZS4KLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotWGluaGEudmVyc2lvbj17IlJlbGVhc2UiOiJUcnVuayIsIkhlYWQiOiIkSGVhZFVSTDogaHR0cDovL3N2bi54aW5oYS5vcmcvdGFncy8wLjk2LjEvWGluaGFDb3JlLmpzICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywiJDEiKSwiRGF0ZSI6IiRMYXN0Q2hhbmdlZERhdGU6IDIwMTAtMDUtMTEgMTc6NDA6MDYgLTA0MDAgKFR1ZSwgMTEgTWF5IDIwMTApICQiLnJlcGxhY2UoL15bXjpdKjpccyooWzAtOVwtXSopIChbMC05Ol0qKSAoWyswLTldKikgXCgoLiopXClccypcJC8sIiQ0ICQyICQzIiksIlJldmlzaW9uIjoiJExhc3RDaGFuZ2VkUmV2aXNpb246IDEyNjMgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCIkMSIpLCJSZXZpc2lvbkJ5IjoiJExhc3RDaGFuZ2VkQnk6IGdvZ28gJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCIkMSIpfTsKLVhpbmhhLl9yZXNvbHZlUmVsYXRpdmVVcmw9ZnVuY3Rpb24oXzEsXzIpewotaWYoXzIubWF0Y2goL14oW146XStcOik/XC9cLy8pKXsKLXJldHVybiBfMjsKLX1lbHNlewotdmFyIGI9XzEuc3BsaXQoIi8iKTsKLWlmKGJbYi5sZW5ndGgtMV09PT0iIil7Ci1iLnBvcCgpOwotfQotdmFyIHA9XzIuc3BsaXQoIi8iKTsKLWlmKHBbMF09PSIuIil7Ci1wLnNoaWZ0KCk7Ci19Ci13aGlsZShwWzBdPT0iLi4iKXsKLWIucG9wKCk7Ci1wLnNoaWZ0KCk7Ci19Ci1yZXR1cm4gYi5qb2luKCIvIikrIi8iK3Auam9pbigiLyIpOwotfQotfTsKLWlmKHR5cGVvZiBfZWRpdG9yX3VybD09InN0cmluZyIpewotX2VkaXRvcl91cmw9X2VkaXRvcl91cmwucmVwbGFjZSgvXHgyZiokLywiLyIpOwotaWYoIV9lZGl0b3JfdXJsLm1hdGNoKC9eKFteOl0rXDopP1wvLykpewotKGZ1bmN0aW9uKCl7Ci12YXIgXzU9d2luZG93LmxvY2F0aW9uLnRvU3RyaW5nKCkucmVwbGFjZSgvXD8uKiQvLCIiKS5zcGxpdCgiLyIpOwotXzUucG9wKCk7Ci1fZWRpdG9yX3VybD1YaW5oYS5fcmVzb2x2ZVJlbGF0aXZlVXJsKF81LmpvaW4oIi8iKSxfZWRpdG9yX3VybCk7Ci19KSgpOwotfQotfWVsc2V7Ci1hbGVydCgiV0FSTklORzogX2VkaXRvcl91cmwgaXMgbm90IHNldCEgIFlvdSBzaG91bGQgc2V0IHRoaXMgdmFyaWFibGUgdG8gdGhlIGVkaXRvciBmaWxlcyBwYXRoOyBpdCBzaG91bGQgcHJlZmVyYWJseSBiZSBhbiBhYnNvbHV0ZSBwYXRoLCBsaWtlIGluICcveGluaGEvJywgYnV0IGl0IGNhbiBiZSByZWxhdGl2ZSBpZiB5b3UgcHJlZmVyLiAgRnVydGhlciB3ZSB3aWxsIHRyeSB0byBsb2FkIHRoZSBlZGl0b3IgZmlsZXMgY29ycmVjdGx5IGJ1dCB3ZSdsbCBwcm9iYWJseSBmYWlsLiIpOwotX2VkaXRvcl91cmw9IiI7Ci19Ci1pZih0eXBlb2YgX2VkaXRvcl9sYW5nPT0ic3RyaW5nIil7Ci1fZWRpdG9yX2xhbmc9X2VkaXRvcl9sYW5nLnRvTG93ZXJDYXNlKCk7Ci19ZWxzZXsKLV9lZGl0b3JfbGFuZz0iZW4iOwotfQotaWYodHlwZW9mIF9lZGl0b3Jfc2tpbiE9PSJzdHJpbmciKXsKLV9lZGl0b3Jfc2tpbj0iIjsKLX0KLWlmKHR5cGVvZiBfZWRpdG9yX2ljb25zIT09InN0cmluZyIpewotX2VkaXRvcl9pY29ucz0iIjsKLX0KLXZhciBfX3hpbmhhcz1bXTsKLVhpbmhhLmFndD1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7Ci1YaW5oYS5pc19pZT0oKFhpbmhhLmFndC5pbmRleE9mKCJtc2llIikhPS0xKSYmKFhpbmhhLmFndC5pbmRleE9mKCJvcGVyYSIpPT0tMSkpOwotWGluaGEuaWVfdmVyc2lvbj1wYXJzZUZsb2F0KFhpbmhhLmFndC5zdWJzdHJpbmcoWGluaGEuYWd0LmluZGV4T2YoIm1zaWUiKSs1KSk7Ci1YaW5oYS5pc19vcGVyYT0oWGluaGEuYWd0LmluZGV4T2YoIm9wZXJhIikhPS0xKTsKLWlmKFhpbmhhLmlzX29wZXJhJiZYaW5oYS5hZ3QubWF0Y2goL29wZXJhW1wvIF0oWzAtOS5dKykvKSl7Ci1YaW5oYS5vcGVyYV92ZXJzaW9uPXBhcnNlRmxvYXQoUmVnRXhwLiQxKTsKLX1lbHNlewotWGluaGEub3BlcmFfdmVyc2lvbj0wOwotfQotWGluaGEuaXNfa2h0bWw9KFhpbmhhLmFndC5pbmRleE9mKCJraHRtbCIpIT0tMSk7Ci1YaW5oYS5pc193ZWJraXQ9KFhpbmhhLmFndC5pbmRleE9mKCJhcHBsZXdlYmtpdCIpIT0tMSk7Ci1YaW5oYS53ZWJraXRfdmVyc2lvbj1wYXJzZUludChuYXZpZ2F0b3IuYXBwVmVyc2lvbi5yZXBsYWNlKC8uKj9BcHBsZVdlYktpdFwvKFtcZF0pLio/LywiJDEiKSwxMCk7Ci1YaW5oYS5pc19zYWZhcmk9KFhpbmhhLmFndC5pbmRleE9mKCJzYWZhcmkiKSE9LTEpOwotWGluaGEuaXNfY2hyb21lPShYaW5oYS5hZ3QuaW5kZXhPZigiY2hyb21lIikhPS0xKTsKLVhpbmhhLmlzX21hYz0oWGluaGEuYWd0LmluZGV4T2YoIm1hYyIpIT0tMSk7Ci1YaW5oYS5pc19tYWNfaWU9KFhpbmhhLmlzX2llJiZYaW5oYS5pc19tYWMpOwotWGluaGEuaXNfd2luX2llPShYaW5oYS5pc19pZSYmIVhpbmhhLmlzX21hYyk7Ci1YaW5oYS5pc19nZWNrbz0obmF2aWdhdG9yLnByb2R1Y3Q9PSJHZWNrbyIpfHxYaW5oYS5pc19vcGVyYTsKLVhpbmhhLmlzX3JlYWxfZ2Vja289KG5hdmlnYXRvci5wcm9kdWN0PT0iR2Vja28iJiYhWGluaGEuaXNfd2Via2l0KTsKLVhpbmhhLmlzX2ZmMj1YaW5oYS5pc19yZWFsX2dlY2tvJiZwYXJzZUludChuYXZpZ2F0b3IucHJvZHVjdFN1Yi5zdWJzdHIoMCwxMCksMTApPDIwMDcxMjEwOwotWGluaGEuaXNSdW5Mb2NhbGx5PWRvY3VtZW50LlVSTC50b0xvd2VyQ2FzZSgpLnNlYXJjaCgvXmZpbGU6LykhPS0xOwotWGluaGEuaXNfZGVzaWduTW9kZT0odHlwZW9mIGRvY3VtZW50LmRlc2lnbk1vZGUhPSJ1bmRlZmluZWQiJiYhWGluaGEuaXNfaWUpOwotWGluaGEuY2hlY2tTdXBwb3J0ZWRCcm93c2VyPWZ1bmN0aW9uKCl7Ci1yZXR1cm4gWGluaGEuaXNfcmVhbF9nZWNrb3x8KFhpbmhhLmlzX29wZXJhJiZYaW5oYS5vcGVyYV92ZXJzaW9uPj05LjIpfHxYaW5oYS5pZV92ZXJzaW9uPj01LjV8fFhpbmhhLndlYmtpdF92ZXJzaW9uPj01MjI7Ci19OwotWGluaGEuaXNTdXBwb3J0ZWRCcm93c2VyPVhpbmhhLmNoZWNrU3VwcG9ydGVkQnJvd3NlcigpOwotaWYoWGluaGEuaXNSdW5Mb2NhbGx5JiZYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIpewotYWxlcnQoIlhpbmhhICptdXN0KiBiZSBpbnN0YWxsZWQgb24gYSB3ZWIgc2VydmVyLiBMb2NhbGx5IG9wZW5lZCBmaWxlcyAodGhvc2UgdGhhdCB1c2UgdGhlIFwiZmlsZTovL1wiIHByb3RvY29sKSBjYW5ub3QgcHJvcGVybHkgZnVuY3Rpb24uIFhpbmhhIHdpbGwgdHJ5IHRvIGluaXRpYWxpemUgYnV0IG1heSBub3QgYmUgY29ycmVjdGx5IGxvYWRlZC4iKTsKLX0KLWZ1bmN0aW9uIFhpbmhhKF82LF83KXsKLWlmKCFYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIpewotcmV0dXJuOwotfQotaWYoIV82KXsKLXRocm93IG5ldyBFcnJvcigiVHJpZWQgdG8gY3JlYXRlIFhpbmhhIHdpdGhvdXQgdGV4dGFyZWEgc3BlY2lmaWVkLiIpOwotfQotaWYodHlwZW9mIF83PT0idW5kZWZpbmVkIil7Ci10aGlzLmNvbmZpZz1uZXcgWGluaGEuQ29uZmlnKCk7Ci19ZWxzZXsKLXRoaXMuY29uZmlnPV83OwotfQotaWYodHlwZW9mIF82IT0ib2JqZWN0Iil7Ci1fNj1YaW5oYS5nZXRFbGVtZW50QnlJZCgidGV4dGFyZWEiLF82KTsKLX0KLXRoaXMuX3RleHRBcmVhPV82OwotdGhpcy5fdGV4dEFyZWEuc3BlbGxjaGVjaz1mYWxzZTsKLVhpbmhhLmZyZWVMYXRlcih0aGlzLCJfdGV4dEFyZWEiKTsKLXRoaXMuX2luaXRpYWxfdGFfc2l6ZT17dzpfNi5zdHlsZS53aWR0aD9fNi5zdHlsZS53aWR0aDooXzYub2Zmc2V0V2lkdGg/KF82Lm9mZnNldFdpZHRoKyJweCIpOihfNi5jb2xzKyJlbSIpKSxoOl82LnN0eWxlLmhlaWdodD9fNi5zdHlsZS5oZWlnaHQ6KF82Lm9mZnNldEhlaWdodD8oXzYub2Zmc2V0SGVpZ2h0KyJweCIpOihfNi5yb3dzKyJlbSIpKX07Ci1pZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZGluZ18iK182LmlkKXx8dGhpcy5jb25maWcuc2hvd0xvYWRpbmcpewotaWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2FkaW5nXyIrXzYuaWQpKXsKLVhpbmhhLmNyZWF0ZUxvYWRpbmdNZXNzYWdlKF82KTsKLX0KLXRoaXMuc2V0TG9hZGluZ01lc3NhZ2UoWGluaGEuX2xjKCJDb25zdHJ1Y3Rpbmcgb2JqZWN0IikpOwotfQotdGhpcy5fZWRpdE1vZGU9Ind5c2l3eWciOwotdGhpcy5wbHVnaW5zPXt9OwotdGhpcy5fdGltZXJUb29sYmFyPW51bGw7Ci10aGlzLl90aW1lclVuZG89bnVsbDsKLXRoaXMuX3VuZG9RdWV1ZT1bdGhpcy5jb25maWcudW5kb1N0ZXBzXTsKLXRoaXMuX3VuZG9Qb3M9LTE7Ci10aGlzLl9jdXN0b21VbmRvPXRydWU7Ci10aGlzLl9tZG9jPWRvY3VtZW50OwotdGhpcy5kb2N0eXBlPSIiOwotdGhpcy5fX2h0bWxhcmVhX2lkX251bT1fX3hpbmhhcy5sZW5ndGg7Ci1fX3hpbmhhc1t0aGlzLl9faHRtbGFyZWFfaWRfbnVtXT10aGlzOwotdGhpcy5fbm90aWZ5TGlzdGVuZXJzPXt9OwotdmFyIF84PXtyaWdodDp7b246dHJ1ZSxjb250YWluZXI6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKSxwYW5lbHM6W119LGxlZnQ6e29uOnRydWUsY29udGFpbmVyOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIikscGFuZWxzOltdfSx0b3A6e29uOnRydWUsY29udGFpbmVyOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIikscGFuZWxzOltdfSxib3R0b206e29uOnRydWUsY29udGFpbmVyOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIikscGFuZWxzOltdfX07Ci1mb3IodmFyIGkgaW4gXzgpewotaWYoIV84W2ldLmNvbnRhaW5lcil7Ci1jb250aW51ZTsKLX0KLV84W2ldLmRpdj1fOFtpXS5jb250YWluZXI7Ci1fOFtpXS5jb250YWluZXIuY2xhc3NOYW1lPSJwYW5lbHMgcGFuZWxzXyIraTsKLVhpbmhhLmZyZWVMYXRlcihfOFtpXSwiY29udGFpbmVyIik7Ci1YaW5oYS5mcmVlTGF0ZXIoXzhbaV0sImRpdiIpOwotfQotdGhpcy5fcGFuZWxzPV84OwotdGhpcy5fc3RhdHVzQmFyPW51bGw7Ci10aGlzLl9zdGF0dXNCYXJUcmVlPW51bGw7Ci10aGlzLl9zdGF0dXNCYXJUZXh0TW9kZT1udWxsOwotdGhpcy5fc3RhdHVzQmFySXRlbXM9W107Ci10aGlzLl9mcmFtZXdvcms9e307Ci10aGlzLl9odG1sQXJlYT1udWxsOwotdGhpcy5faWZyYW1lPW51bGw7Ci10aGlzLl9kb2M9bnVsbDsKLXRoaXMuX3Rvb2xCYXI9dGhpcy5fdG9vbGJhcj1udWxsOwotdGhpcy5fdG9vbGJhck9iamVjdHM9e307Ci10aGlzLnBsdWdpbnMuRXZlbnRzPXtuYW1lOiJFdmVudHMiLGRldmVsb3BlcjoiVGhlIFhpbmhhIENvcmUgRGV2ZWxvcGVyIFRlYW0iLGluc3RhbmNlOl83LkV2ZW50c307Ci19OwotWGluaGEub25sb2FkPWZ1bmN0aW9uKCl7Ci19OwotWGluaGEuaW5pdD1mdW5jdGlvbigpewotWGluaGEub25sb2FkKCk7Ci19OwotWGluaGEuUkVfdGFnTmFtZT0vKDxcL3w8KVxzKihbXiBcdFxuPl0rKS9pZzsKLVhpbmhhLlJFX2RvY3R5cGU9Lyg8IWRvY3R5cGUoKC58XG4pKj8pPilcbj8vaTsKLVhpbmhhLlJFX2hlYWQ9LzxoZWFkPigoLnxcbikqPyk8XC9oZWFkPi9pOwotWGluaGEuUkVfYm9keT0vPGJvZHlbXj5dKj4oKC58XG58XHJ8XHQpKj8pPFwvYm9keT4vaTsKLVhpbmhhLlJFX1NwZWNpYWxzPS8oW1wvXF4kKis/LigpfHt9XFtcXV0pL2c7Ci1YaW5oYS5lc2NhcGVTdHJpbmdGb3JSZWdFeHA9ZnVuY3Rpb24oX2EpewotcmV0dXJuIF9hLnJlcGxhY2UoWGluaGEuUkVfU3BlY2lhbHMsIlxcJDEiKTsKLX07Ci1YaW5oYS5SRV9lbWFpbD0vXltfYS16XGRcLVwuXXszLH1AW19hLXpcZFwtXXsyLH0oXC5bX2EtelxkXC1dezIsfSkrJC9pOwotWGluaGEuUkVfdXJsPS8oaHR0cHM/OlwvXC8pPygoW2EtejAtOV9dKzpbYS16MC05X10rQCk/W2EtejAtOV9cLV17Mix9KFwuW2EtejAtOV9cLV17Mix9KXsyLH0oOlswLTldKyk/KFwvXFMrKSopL2k7Ci1YaW5oYS5Db25maWc9ZnVuY3Rpb24oKXsKLXRoaXMudmVyc2lvbj1YaW5oYS52ZXJzaW9uLlJldmlzaW9uOwotdGhpcy53aWR0aD0iYXV0byI7Ci10aGlzLmhlaWdodD0iYXV0byI7Ci10aGlzLnNpemVJbmNsdWRlc0JhcnM9dHJ1ZTsKLXRoaXMuc2l6ZUluY2x1ZGVzUGFuZWxzPXRydWU7Ci10aGlzLnBhbmVsX2RpbWVuc2lvbnM9e2xlZnQ6IjIwMHB4IixyaWdodDoiMjAwcHgiLHRvcDoiMTAwcHgiLGJvdHRvbToiMTAwcHgifTsKLXRoaXMuaWZyYW1lV2lkdGg9bnVsbDsKLXRoaXMuc3RhdHVzQmFyPXRydWU7Ci10aGlzLmh0bWxhcmVhUGFzdGU9ZmFsc2U7Ci10aGlzLm1velBhcmFIYW5kbGVyPSJiZXN0IjsKLXRoaXMuZ2V0SHRtbE1ldGhvZD0iRE9Nd2FsayI7Ci10aGlzLnVuZG9TdGVwcz0yMDsKLXRoaXMudW5kb1RpbWVvdXQ9NTAwOwotdGhpcy5jaGFuZ2VKdXN0aWZ5V2l0aERpcmVjdGlvbj1mYWxzZTsKLXRoaXMuZnVsbFBhZ2U9ZmFsc2U7Ci10aGlzLnBhZ2VTdHlsZT0iIjsKLXRoaXMucGFnZVN0eWxlU2hlZXRzPVtdOwotdGhpcy5iYXNlSHJlZj1udWxsOwotdGhpcy5leHBhbmRSZWxhdGl2ZVVybD10cnVlOwotdGhpcy5zdHJpcEJhc2VIcmVmPXRydWU7Ci10aGlzLnN0cmlwU2VsZk5hbWVkQW5jaG9ycz10cnVlOwotdGhpcy5vbmx5N0JpdFByaW50YWJsZXNJblVSTHM9dHJ1ZTsKLXRoaXMuc2V2ZW5CaXRDbGVhbj1mYWxzZTsKLXRoaXMuc3BlY2lhbFJlcGxhY2VtZW50cz17fTsKLXRoaXMuaW53YXJkSHRtbD1mdW5jdGlvbihfYil7Ci1yZXR1cm4gX2I7Ci19OwotdGhpcy5vdXR3YXJkSHRtbD1mdW5jdGlvbihfYyl7Ci1yZXR1cm4gX2M7Ci19OwotdGhpcy5hdXRvZm9jdXM9ZmFsc2U7Ci10aGlzLmtpbGxXb3JkT25QYXN0ZT10cnVlOwotdGhpcy5tYWtlTGlua1Nob3dzVGFyZ2V0PXRydWU7Ci10aGlzLmNoYXJTZXQ9KHR5cGVvZiBkb2N1bWVudC5jaGFyYWN0ZXJTZXQhPSJ1bmRlZmluZWQiKT9kb2N1bWVudC5jaGFyYWN0ZXJTZXQ6ZG9jdW1lbnQuY2hhcnNldDsKLXRoaXMuYnJvd3NlclF1aXJrc01vZGU9bnVsbDsKLXRoaXMuaW1nVVJMPSJpbWFnZXMvIjsKLXRoaXMucG9wdXBVUkw9InBvcHVwcy8iOwotdGhpcy5odG1sUmVtb3ZlVGFncz1udWxsOwotdGhpcy5mbG93VG9vbGJhcnM9dHJ1ZTsKLXRoaXMudG9vbGJhckFsaWduPSJsZWZ0IjsKLXRoaXMuc2hvd0ZvbnRTdHlsZXNJblRvb2xiYXI9ZmFsc2U7Ci10aGlzLnNob3dMb2FkaW5nPWZhbHNlOwotdGhpcy5zdHJpcFNjcmlwdHM9dHJ1ZTsKLXRoaXMuY29udmVydFVybHNUb0xpbmtzPXRydWU7Ci10aGlzLmNvbG9yUGlja2VyQ2VsbFNpemU9IjZweCI7Ci10aGlzLmNvbG9yUGlja2VyR3JhbnVsYXJpdHk9MTg7Ci10aGlzLmNvbG9yUGlja2VyUG9zaXRpb249ImJvdHRvbSxyaWdodCI7Ci10aGlzLmNvbG9yUGlja2VyV2ViU2FmZT1mYWxzZTsKLXRoaXMuY29sb3JQaWNrZXJTYXZlQ29sb3JzPTIwOwotdGhpcy5mdWxsU2NyZWVuPWZhbHNlOwotdGhpcy5mdWxsU2NyZWVuTWFyZ2lucz1bMCwwLDAsMF07Ci10aGlzLmZ1bGxTY3JlZW5TaXplRG93bk1ldGhvZD0iaW5pdFNpemUiOwotdGhpcy50b29sYmFyPVtbInBvcHVwZWRpdG9yIl0sWyJzZXBhcmF0b3IiLCJmb3JtYXRibG9jayIsImZvbnRuYW1lIiwiZm9udHNpemUiLCJib2xkIiwiaXRhbGljIiwidW5kZXJsaW5lIiwic3RyaWtldGhyb3VnaCJdLFsic2VwYXJhdG9yIiwiZm9yZWNvbG9yIiwiaGlsaXRlY29sb3IiLCJ0ZXh0aW5kaWNhdG9yIl0sWyJzZXBhcmF0b3IiLCJzdWJzY3JpcHQiLCJzdXBlcnNjcmlwdCJdLFsibGluZWJyZWFrIiwic2VwYXJhdG9yIiwianVzdGlmeWxlZnQiLCJqdXN0aWZ5Y2VudGVyIiwianVzdGlmeXJpZ2h0IiwianVzdGlmeWZ1bGwiXSxbInNlcGFyYXRvciIsImluc2VydG9yZGVyZWRsaXN0IiwiaW5zZXJ0dW5vcmRlcmVkbGlzdCIsIm91dGRlbnQiLCJpbmRlbnQiXSxbInNlcGFyYXRvciIsImluc2VydGhvcml6b250YWxydWxlIiwiY3JlYXRlbGluayIsImluc2VydGltYWdlIiwiaW5zZXJ0dGFibGUiXSxbImxpbmVicmVhayIsInNlcGFyYXRvciIsInVuZG8iLCJyZWRvIiwic2VsZWN0YWxsIiwicHJpbnQiXSwoWGluaGEuaXNfZ2Vja28/W106WyJjdXQiLCJjb3B5IiwicGFzdGUiLCJvdmVyd3JpdGUiLCJzYXZlYXMiXSksWyJzZXBhcmF0b3IiLCJraWxsd29yZCIsImNsZWFyZm9udHMiLCJyZW1vdmVmb3JtYXQiLCJ0b2dnbGVib3JkZXJzIiwic3BsaXRibG9jayIsImxlZnR0b3JpZ2h0IiwicmlnaHR0b2xlZnQiXSxbInNlcGFyYXRvciIsImh0bWxtb2RlIiwic2hvd2hlbHAiLCJhYm91dCJdXTsKLXRoaXMuZm9udG5hbWU9eyImIzgyMTI7IGZvbnQgJiM4MjEyOyI6IiIsIkFyaWFsIjoiYXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWYiLCJDb3VyaWVyIE5ldyI6ImNvdXJpZXIgbmV3LGNvdXJpZXIsbW9ub3NwYWNlIiwiR2VvcmdpYSI6Imdlb3JnaWEsdGltZXMgbmV3IHJvbWFuLHRpbWVzLHNlcmlmIiwiVGFob21hIjoidGFob21hLGFyaWFsLGhlbHZldGljYSxzYW5zLXNlcmlmIiwiVGltZXMgTmV3IFJvbWFuIjoidGltZXMgbmV3IHJvbWFuLHRpbWVzLHNlcmlmIiwiVmVyZGFuYSI6InZlcmRhbmEsYXJpYWwsaGVsdmV0aWNhLHNhbnMtc2VyaWYiLCJpbXBhY3QiOiJpbXBhY3QiLCJXaW5nRGluZ3MiOiJ3aW5nZGluZ3MifTsKLXRoaXMuZm9udHNpemU9eyImIzgyMTI7IHNpemUgJiM4MjEyOyI6IiIsIjEgKDggcHQpIjoiMSIsIjIgKDEwIHB0KSI6IjIiLCIzICgxMiBwdCkiOiIzIiwiNCAoMTQgcHQpIjoiNCIsIjUgKDE4IHB0KSI6IjUiLCI2ICgyNCBwdCkiOiI2IiwiNyAoMzYgcHQpIjoiNyJ9OwotdGhpcy5mb3JtYXRibG9jaz17IiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiIiLCJIZWFkaW5nIDEiOiJoMSIsIkhlYWRpbmcgMiI6ImgyIiwiSGVhZGluZyAzIjoiaDMiLCJIZWFkaW5nIDQiOiJoNCIsIkhlYWRpbmcgNSI6Img1IiwiSGVhZGluZyA2IjoiaDYiLCJOb3JtYWwiOiJwIiwiQWRkcmVzcyI6ImFkZHJlc3MiLCJGb3JtYXR0ZWQiOiJwcmUifTsKLXRoaXMuZGlhbG9nT3B0aW9ucz17ImNlbnRlcmVkIjp0cnVlLCJncmV5b3V0Ijp0cnVlLCJjbG9zZU9uRXNjYXBlIjp0cnVlfTsKLXRoaXMuRXZlbnRzPXt9OwotdGhpcy5jdXN0b21TZWxlY3RzPXt9OwotdGhpcy5kZWJ1Zz1mYWxzZTsKLXRoaXMuVVJJcz17ImJsYW5rIjpfZWRpdG9yX3VybCsicG9wdXBzL2JsYW5rLmh0bWwiLCJsaW5rIjpfZWRpdG9yX3VybCsibW9kdWxlcy9DcmVhdGVMaW5rL2xpbmsuaHRtbCIsImluc2VydF9pbWFnZSI6X2VkaXRvcl91cmwrIm1vZHVsZXMvSW5zZXJ0SW1hZ2UvaW5zZXJ0X2ltYWdlLmh0bWwiLCJpbnNlcnRfdGFibGUiOl9lZGl0b3JfdXJsKyJtb2R1bGVzL0luc2VydFRhYmxlL2luc2VydF90YWJsZS5odG1sIiwic2VsZWN0X2NvbG9yIjpfZWRpdG9yX3VybCsicG9wdXBzL3NlbGVjdF9jb2xvci5odG1sIiwiaGVscCI6X2VkaXRvcl91cmwrInBvcHVwcy9lZGl0b3JfaGVscC5odG1sIn07Ci10aGlzLmJ0bkxpc3Q9e2JvbGQ6WyJCb2xkIixYaW5oYS5fbGMoe2tleToiYnV0dG9uX2JvbGQiLHN0cmluZzpbImVkX2J1dHRvbnNfbWFpbi5wbmciLDMsMl19LCJYaW5oYSIpLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgiYm9sZCIpOwotfV0saXRhbGljOlsiSXRhbGljIixYaW5oYS5fbGMoe2tleToiYnV0dG9uX2l0YWxpYyIsc3RyaW5nOlsiZWRfYnV0dG9uc19tYWluLnBuZyIsMiwyXX0sIlhpbmhhIiksZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJpdGFsaWMiKTsKLX1dLHVuZGVybGluZTpbIlVuZGVybGluZSIsWGluaGEuX2xjKHtrZXk6ImJ1dHRvbl91bmRlcmxpbmUiLHN0cmluZzpbImVkX2J1dHRvbnNfbWFpbi5wbmciLDIsMF19LCJYaW5oYSIpLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgidW5kZXJsaW5lIik7Ci19XSxzdHJpa2V0aHJvdWdoOlsiU3RyaWtldGhyb3VnaCIsWGluaGEuX2xjKHtrZXk6ImJ1dHRvbl9zdHJpa2V0aHJvdWdoIixzdHJpbmc6WyJlZF9idXR0b25zX21haW4ucG5nIiwzLDBdfSwiWGluaGEiKSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoInN0cmlrZXRocm91Z2giKTsKLX1dLHN1YnNjcmlwdDpbIlN1YnNjcmlwdCIsWGluaGEuX2xjKHtrZXk6ImJ1dHRvbl9zdWJzY3JpcHQiLHN0cmluZzpbImVkX2J1dHRvbnNfbWFpbi5wbmciLDMsMV19LCJYaW5oYSIpLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgic3Vic2NyaXB0Iik7Ci19XSxzdXBlcnNjcmlwdDpbIlN1cGVyc2NyaXB0IixYaW5oYS5fbGMoe2tleToiYnV0dG9uX3N1cGVyc2NyaXB0IixzdHJpbmc6WyJlZF9idXR0b25zX21haW4ucG5nIiwyLDFdfSwiWGluaGEiKSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoInN1cGVyc2NyaXB0Iik7Ci19XSxqdXN0aWZ5bGVmdDpbIkp1c3RpZnkgTGVmdCIsWyJlZF9idXR0b25zX21haW4ucG5nIiwwLDBdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgianVzdGlmeWxlZnQiKTsKLX1dLGp1c3RpZnljZW50ZXI6WyJKdXN0aWZ5IENlbnRlciIsWyJlZF9idXR0b25zX21haW4ucG5nIiwxLDFdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgianVzdGlmeWNlbnRlciIpOwotfV0sanVzdGlmeXJpZ2h0OlsiSnVzdGlmeSBSaWdodCIsWyJlZF9idXR0b25zX21haW4ucG5nIiwxLDBdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgianVzdGlmeXJpZ2h0Iik7Ci19XSxqdXN0aWZ5ZnVsbDpbIkp1c3RpZnkgRnVsbCIsWyJlZF9idXR0b25zX21haW4ucG5nIiwwLDFdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgianVzdGlmeWZ1bGwiKTsKLX1dLG9yZGVyZWRsaXN0OlsiT3JkZXJlZCBMaXN0IixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDAsM10sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJpbnNlcnRvcmRlcmVkbGlzdCIpOwotfV0sdW5vcmRlcmVkbGlzdDpbIkJ1bGxldGVkIExpc3QiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMSwzXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoImluc2VydHVub3JkZXJlZGxpc3QiKTsKLX1dLGluc2VydG9yZGVyZWRsaXN0OlsiT3JkZXJlZCBMaXN0IixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDAsM10sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJpbnNlcnRvcmRlcmVkbGlzdCIpOwotfV0saW5zZXJ0dW5vcmRlcmVkbGlzdDpbIkJ1bGxldGVkIExpc3QiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMSwzXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoImluc2VydHVub3JkZXJlZGxpc3QiKTsKLX1dLG91dGRlbnQ6WyJEZWNyZWFzZSBJbmRlbnQiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMSwyXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoIm91dGRlbnQiKTsKLX1dLGluZGVudDpbIkluY3JlYXNlIEluZGVudCIsWyJlZF9idXR0b25zX21haW4ucG5nIiwwLDJdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgiaW5kZW50Iik7Ci19XSxmb3JlY29sb3I6WyJGb250IENvbG9yIixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDMsM10sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJmb3JlY29sb3IiKTsKLX1dLGhpbGl0ZWNvbG9yOlsiQmFja2dyb3VuZCBDb2xvciIsWyJlZF9idXR0b25zX21haW4ucG5nIiwyLDNdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgiaGlsaXRlY29sb3IiKTsKLX1dLHVuZG86WyJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiIsWyJlZF9idXR0b25zX21haW4ucG5nIiw0LDJdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgidW5kbyIpOwotfV0scmVkbzpbIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDUsMl0sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJyZWRvIik7Ci19XSxjdXQ6WyJDdXQgc2VsZWN0aW9uIixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDUsMF0sZmFsc2UsZnVuY3Rpb24oZSxjbWQpewotZS5leGVjQ29tbWFuZChjbWQpOwotfV0sY29weTpbIkNvcHkgc2VsZWN0aW9uIixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDQsMF0sZmFsc2UsZnVuY3Rpb24oZSxjbWQpewotZS5leGVjQ29tbWFuZChjbWQpOwotfV0scGFzdGU6WyJQYXN0ZSBmcm9tIGNsaXBib2FyZCIsWyJlZF9idXR0b25zX21haW4ucG5nIiw0LDFdLGZhbHNlLGZ1bmN0aW9uKGUsY21kKXsKLWUuZXhlY0NvbW1hbmQoY21kKTsKLX1dLHNlbGVjdGFsbDpbIlNlbGVjdCBhbGwiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMyw1XSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoInNlbGVjdGFsbCIpOwotfV0saW5zZXJ0aG9yaXpvbnRhbHJ1bGU6WyJIb3Jpem9udGFsIFJ1bGUiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsNiwwXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoImluc2VydGhvcml6b250YWxydWxlIik7Ci19XSxjcmVhdGVsaW5rOlsiSW5zZXJ0IFdlYiBMaW5rIixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDYsMV0sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLl9jcmVhdGVMaW5rKCk7Ci19XSxpbnNlcnRpbWFnZTpbIkluc2VydC9Nb2RpZnkgSW1hZ2UiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsNiwzXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoImluc2VydGltYWdlIik7Ci19XSxpbnNlcnR0YWJsZTpbIkluc2VydCBUYWJsZSIsWyJlZF9idXR0b25zX21haW4ucG5nIiw2LDJdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgiaW5zZXJ0dGFibGUiKTsKLX1dLGh0bWxtb2RlOlsiVG9nZ2xlIEhUTUwgU291cmNlIixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDcsMF0sdHJ1ZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoImh0bWxtb2RlIik7Ci19XSx0b2dnbGVib3JkZXJzOlsiVG9nZ2xlIEJvcmRlcnMiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsNywyXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuX3RvZ2dsZUJvcmRlcnMoKTsKLX1dLHByaW50OlsiUHJpbnQgZG9jdW1lbnQiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsOCwxXSxmYWxzZSxmdW5jdGlvbihlKXsKLWlmKFhpbmhhLmlzX2dlY2tvKXsKLWUuX2lmcmFtZS5jb250ZW50V2luZG93LnByaW50KCk7Ci19ZWxzZXsKLWUuZm9jdXNFZGl0b3IoKTsKLXByaW50KCk7Ci19Ci19XSxzYXZlYXM6WyJTYXZlIGFzIixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDksMV0sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJzYXZlYXMiLGZhbHNlLCJub25hbWUuaHRtIik7Ci19XSxhYm91dDpbIkFib3V0IHRoaXMgZWRpdG9yIixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDgsMl0sdHJ1ZSxmdW5jdGlvbihlKXsKLWUuZ2V0UGx1Z2luSW5zdGFuY2UoIkFib3V0Qm94Iikuc2hvdygpOwotfV0sc2hvd2hlbHA6WyJIZWxwIHVzaW5nIGVkaXRvciIsWyJlZF9idXR0b25zX21haW4ucG5nIiw5LDJdLHRydWUsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJzaG93aGVscCIpOwotfV0sc3BsaXRibG9jazpbIlNwbGl0IEJsb2NrIiwiZWRfc3BsaXRibG9jay5naWYiLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5fc3BsaXRCbG9jaygpOwotfV0sbGVmdHRvcmlnaHQ6WyJEaXJlY3Rpb24gbGVmdCB0byByaWdodCIsWyJlZF9idXR0b25zX21haW4ucG5nIiwwLDJdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5leGVjQ29tbWFuZCgibGVmdHRvcmlnaHQiKTsKLX1dLHJpZ2h0dG9sZWZ0OlsiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsMSwyXSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoInJpZ2h0dG9sZWZ0Iik7Ci19XSxvdmVyd3JpdGU6WyJJbnNlcnQvT3ZlcndyaXRlIiwiZWRfb3ZlcndyaXRlLmdpZiIsZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJvdmVyd3JpdGUiKTsKLX1dLHdvcmRjbGVhbjpbIk1TIFdvcmQgQ2xlYW5lciIsWyJlZF9idXR0b25zX21haW4ucG5nIiw1LDNdLGZhbHNlLGZ1bmN0aW9uKGUpewotZS5fd29yZENsZWFuKCk7Ci19XSxjbGVhcmZvbnRzOlsiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsNSw0XSx0cnVlLGZ1bmN0aW9uKGUpewotZS5fY2xlYXJGb250cygpOwotfV0scmVtb3ZlZm9ybWF0OlsiUmVtb3ZlIGZvcm1hdHRpbmciLFsiZWRfYnV0dG9uc19tYWluLnBuZyIsNCw0XSxmYWxzZSxmdW5jdGlvbihlKXsKLWUuZXhlY0NvbW1hbmQoInJlbW92ZWZvcm1hdCIpOwotfV0sa2lsbHdvcmQ6WyJDbGVhciBNU09mZmljZSB0YWdzIixbImVkX2J1dHRvbnNfbWFpbi5wbmciLDQsM10sZmFsc2UsZnVuY3Rpb24oZSl7Ci1lLmV4ZWNDb21tYW5kKCJraWxsd29yZCIpOwotfV19OwotdGhpcy5kYmxjbGlja0xpc3Q9eyJhIjpbZnVuY3Rpb24oZSxfM2IpewotZS5fY3JlYXRlTGluayhfM2IpOwotfV0sImltZyI6W2Z1bmN0aW9uKGUsXzNkKXsKLWUuX2luc2VydEltYWdlKF8zZCk7Ci19XX07Ci10aGlzLmljb25MaXN0PXtkaWFsb2dDYXB0aW9uOl9lZGl0b3JfdXJsKyJpbWFnZXMveGluaGEtc21hbGwtaWNvbi5naWYiLHd5c2l3eWdtb2RlOltfZWRpdG9yX3VybCsiaW1hZ2VzL2VkX2J1dHRvbnNfbWFpbi5wbmciLDcsMV19OwotZm9yKHZhciBpIGluIHRoaXMuYnRuTGlzdCl7Ci12YXIgYnRuPXRoaXMuYnRuTGlzdFtpXTsKLWlmKHR5cGVvZiBidG4hPSJvYmplY3QiKXsKLWNvbnRpbnVlOwotfQotaWYodHlwZW9mIGJ0blsxXSE9InN0cmluZyIpewotYnRuWzFdWzBdPV9lZGl0b3JfdXJsK3RoaXMuaW1nVVJMK2J0blsxXVswXTsKLX1lbHNlewotYnRuWzFdPV9lZGl0b3JfdXJsK3RoaXMuaW1nVVJMK2J0blsxXTsKLX0KLWJ0blswXT1YaW5oYS5fbGMoYnRuWzBdKTsKLX0KLX07Ci1YaW5oYS5Db25maWcucHJvdG90eXBlLnJlZ2lzdGVySWNvbj1mdW5jdGlvbihpZCxfNDEpewotdGhpcy5pY29uTGlzdFtpZF09XzQxOwotfTsKLVhpbmhhLkNvbmZpZy5wcm90b3R5cGUucmVnaXN0ZXJCdXR0b249ZnVuY3Rpb24oaWQsXzQzLF80NCxfNDUsXzQ2LF80Nyl7Ci1pZih0eXBlb2YgaWQ9PSJzdHJpbmciKXsKLXRoaXMuYnRuTGlzdFtpZF09W180MyxfNDQsXzQ1LF80NixfNDddOwotfWVsc2V7Ci1pZih0eXBlb2YgaWQ9PSJvYmplY3QiKXsKLXRoaXMuYnRuTGlzdFtpZC5pZF09W2lkLnRvb2x0aXAsaWQuaW1hZ2UsaWQudGV4dE1vZGUsaWQuYWN0aW9uLGlkLmNvbnRleHRdOwotfWVsc2V7Ci1hbGVydCgiRVJST1IgW1hpbmhhLkNvbmZpZzo6cmVnaXN0ZXJCdXR0b25dOlxuaW52YWxpZCBhcmd1bWVudHMiKTsKLXJldHVybiBmYWxzZTsKLX0KLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUucmVnaXN0ZXJQYW5lbD1mdW5jdGlvbihfNDgsXzQ5KXsKLWlmKCFfNDgpewotXzQ4PSJyaWdodCI7Ci19Ci10aGlzLnNldExvYWRpbmdNZXNzYWdlKCJSZWdpc3RlciAiK180OCsiIHBhbmVsICIpOwotdmFyIF80YT10aGlzLmFkZFBhbmVsKF80OCk7Ci1pZihfNDkpewotXzQ5LmRyYXdQYW5lbEluKF80YSk7Ci19Ci19OwotWGluaGEuQ29uZmlnLnByb3RvdHlwZS5yZWdpc3RlckRyb3Bkb3duPWZ1bmN0aW9uKF80Yil7Ci10aGlzLmN1c3RvbVNlbGVjdHNbXzRiLmlkXT1fNGI7Ci19OwotWGluaGEuQ29uZmlnLnByb3RvdHlwZS5oaWRlU29tZUJ1dHRvbnM9ZnVuY3Rpb24oXzRjKXsKLXZhciBfNGQ9dGhpcy50b29sYmFyOwotZm9yKHZhciBpPV80ZC5sZW5ndGg7LS1pPj0wOyl7Ci12YXIgXzRmPV80ZFtpXTsKLWZvcih2YXIgaj1fNGYubGVuZ3RoOy0taj49MDspewotaWYoXzRjLmluZGV4T2YoIiAiK180ZltqXSsiICIpPj0wKXsKLXZhciBsZW49MTsKLWlmKC9zZXBhcmF0b3J8c3BhY2UvLnRlc3QoXzRmW2orMV0pKXsKLWxlbj0yOwotfQotXzRmLnNwbGljZShqLGxlbik7Ci19Ci19Ci19Ci19OwotWGluaGEuQ29uZmlnLnByb3RvdHlwZS5hZGRUb29sYmFyRWxlbWVudD1mdW5jdGlvbihpZCxfNTMsXzU0KXsKLXZhciBfNTU9dGhpcy50b29sYmFyOwotdmFyIGEsaSxqLG8sc2lkOwotdmFyIF81Yj1mYWxzZTsKLXZhciBfNWM9ZmFsc2U7Ci12YXIgXzVkPTA7Ci12YXIgXzVlPTA7Ci12YXIgXzVmPTA7Ci12YXIgXzYwPWZhbHNlOwotdmFyIF82MT1mYWxzZTsKLWlmKChpZCYmdHlwZW9mIGlkPT0ib2JqZWN0IikmJihpZC5jb25zdHJ1Y3Rvcj09QXJyYXkpKXsKLV81Yj10cnVlOwotfQotaWYoKF81MyYmdHlwZW9mIF81Mz09Im9iamVjdCIpJiYoXzUzLmNvbnN0cnVjdG9yPT1BcnJheSkpewotXzVjPXRydWU7Ci1fNWQ9XzUzLmxlbmd0aDsKLX0KLWlmKF81Yil7Ci1mb3IoaT0wO2k8aWQubGVuZ3RoOysraSl7Ci1pZigoaWRbaV0hPSJzZXBhcmF0b3IiKSYmKGlkW2ldLmluZGV4T2YoIlRbIikhPT0wKSl7Ci1zaWQ9aWRbaV07Ci19Ci19Ci19ZWxzZXsKLXNpZD1pZDsKLX0KLWZvcihpPTA7aTxfNTUubGVuZ3RoOysraSl7Ci1hPV81NVtpXTsKLWZvcihqPTA7ajxhLmxlbmd0aDsrK2opewotaWYoYVtqXT09c2lkKXsKLXJldHVybjsKLX0KLX0KLX0KLWZvcihpPTA7IV82MSYmaTxfNTUubGVuZ3RoOysraSl7Ci1hPV81NVtpXTsKLWZvcihqPTA7IV82MSYmajxhLmxlbmd0aDsrK2opewotaWYoXzVjKXsKLWZvcihvPTA7bzxfNWQ7KytvKXsKLWlmKGFbal09PV81M1tvXSl7Ci1pZihvPT09MCl7Ci1fNjE9dHJ1ZTsKLWotLTsKLWJyZWFrOwotfWVsc2V7Ci1fNWY9aTsKLV81ZT1qOwotXzVkPW87Ci19Ci19Ci19Ci19ZWxzZXsKLWlmKGFbal09PV81Myl7Ci1fNjE9dHJ1ZTsKLWJyZWFrOwotfQotfQotfQotfQotaWYoIV82MSYmXzVjKXsKLWlmKF81My5sZW5ndGghPV81ZCl7Ci1qPV81ZTsKLWE9XzU1W181Zl07Ci1fNjE9dHJ1ZTsKLX0KLX0KLWlmKF82MSl7Ci1pZihfNTQ9PT0wKXsKLWlmKF81Yil7Ci1hW2pdPWlkW2lkLmxlbmd0aC0xXTsKLWZvcihpPWlkLmxlbmd0aC0xOy0taT49MDspewotYS5zcGxpY2UoaiwwLGlkW2ldKTsKLX0KLX1lbHNlewotYVtqXT1pZDsKLX0KLX1lbHNlewotaWYoXzU0PDApewotaj1qK181NCsxOwotfWVsc2V7Ci1pZihfNTQ+MCl7Ci1qPWorXzU0OwotfQotfQotaWYoXzViKXsKLWZvcihpPWlkLmxlbmd0aDstLWk+PTA7KXsKLWEuc3BsaWNlKGosMCxpZFtpXSk7Ci19Ci19ZWxzZXsKLWEuc3BsaWNlKGosMCxpZCk7Ci19Ci19Ci19ZWxzZXsKLV81NVswXS5zcGxpY2UoMCwwLCJzZXBhcmF0b3IiKTsKLWlmKF81Yil7Ci1mb3IoaT1pZC5sZW5ndGg7LS1pPj0wOyl7Ci1fNTVbMF0uc3BsaWNlKDAsMCxpZFtpXSk7Ci19Ci19ZWxzZXsKLV81NVswXS5zcGxpY2UoMCwwLGlkKTsKLX0KLX0KLX07Ci1YaW5oYS5Db25maWcucHJvdG90eXBlLnJlbW92ZVRvb2xiYXJFbGVtZW50PVhpbmhhLkNvbmZpZy5wcm90b3R5cGUuaGlkZVNvbWVCdXR0b25zOwotWGluaGEucmVwbGFjZUFsbD1mdW5jdGlvbihfNjIpewotdmFyIHRhcz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGV4dGFyZWEiKTsKLWZvcih2YXIgaT10YXMubGVuZ3RoO2k+MDtuZXcgWGluaGEodGFzWy0taV0sXzYyKS5nZW5lcmF0ZSgpKXsKLX0KLX07Ci1YaW5oYS5yZXBsYWNlPWZ1bmN0aW9uKGlkLF82Nil7Ci12YXIgdGE9WGluaGEuZ2V0RWxlbWVudEJ5SWQoInRleHRhcmVhIixpZCk7Ci1yZXR1cm4gdGE/bmV3IFhpbmhhKHRhLF82NikuZ2VuZXJhdGUoKTpudWxsOwotfTsKLVhpbmhhLnByb3RvdHlwZS5fY3JlYXRlVG9vbGJhcj1mdW5jdGlvbigpewotdGhpcy5zZXRMb2FkaW5nTWVzc2FnZShYaW5oYS5fbGMoIkNyZWF0ZSBUb29sYmFyIikpOwotdmFyIF82OD10aGlzOwotdmFyIF82OT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLXRoaXMuX3Rvb2xCYXI9dGhpcy5fdG9vbGJhcj1fNjk7Ci1fNjkuY2xhc3NOYW1lPSJ0b29sYmFyIjsKLV82OS5hbGlnbj10aGlzLmNvbmZpZy50b29sYmFyQWxpZ247Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiX3Rvb2xCYXIiKTsKLVhpbmhhLmZyZWVMYXRlcih0aGlzLCJfdG9vbGJhciIpOwotdmFyIF82YT1udWxsOwotdmFyIF82Yj17fTsKLXRoaXMuX3Rvb2xiYXJPYmplY3RzPV82YjsKLXRoaXMuX2NyZWF0ZVRvb2xiYXIxKF82OCxfNjksXzZiKTsKLWZ1bmN0aW9uIG5vc2VsZWN0KGUpewotaWYoZS50YWdOYW1lKXsKLWUudW5zZWxlY3RhYmxlPSJvbiI7Ci19Ci1pZihlLmNoaWxkTm9kZXMpewotZm9yKHZhciBpPTA7aTxlLmNoaWxkTm9kZXMubGVuZ3RoO2krKyl7Ci1pZihlLnRhZ05hbWUpewotbm9zZWxlY3QoZS5jaGlsZE5vZGVzKGkpKTsKLX0KLX0KLX0KLX07Ci1pZihYaW5oYS5pc19pZSl7Ci1ub3NlbGVjdChfNjkpOwotfQotdGhpcy5faHRtbEFyZWEuYXBwZW5kQ2hpbGQoXzY5KTsKLXJldHVybiBfNjk7Ci19OwotWGluaGEucHJvdG90eXBlLl9zZXRDb25maWc9ZnVuY3Rpb24oXzZlKXsKLXRoaXMuY29uZmlnPV82ZTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuX3JlYnVpbGRUb29sYmFyPWZ1bmN0aW9uKCl7Ci10aGlzLl9jcmVhdGVUb29sYmFyMSh0aGlzLHRoaXMuX3Rvb2xiYXIsdGhpcy5fdG9vbGJhck9iamVjdHMpOwotaWYoWGluaGEuX2N1cnJlbnRseUFjdGl2ZUVkaXRvcil7Ci1pZihYaW5oYS5fY3VycmVudGx5QWN0aXZlRWRpdG9yPT10aGlzKXsKLXRoaXMuYWN0aXZhdGVFZGl0b3IoKTsKLX0KLX1lbHNlewotdGhpcy5kaXNhYmxlVG9vbGJhcigpOwotfQotfTsKLVhpbmhhLl9jcmVhdGVUb29sYmFyQnJlYWtpbmdFbGVtZW50PWZ1bmN0aW9uKCl7Ci12YXIgYnJrPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotYnJrLnN0eWxlLmhlaWdodD0iMXB4IjsKLWJyay5zdHlsZS53aWR0aD0iMXB4IjsKLWJyay5zdHlsZS5saW5lSGVpZ2h0PSIxcHgiOwotYnJrLnN0eWxlLmZvbnRTaXplPSIxcHgiOwotYnJrLnN0eWxlLmNsZWFyPSJib3RoIjsKLXJldHVybiBicms7Ci19OwotWGluaGEucHJvdG90eXBlLl9jcmVhdGVUb29sYmFyMT1mdW5jdGlvbihfNzAsXzcxLF83Mil7Ci13aGlsZShfNzEubGFzdENoaWxkKXsKLV83MS5yZW1vdmVDaGlsZChfNzEubGFzdENoaWxkKTsKLX0KLXZhciBfNzM7Ci1pZihfNzAuY29uZmlnLmZsb3dUb29sYmFycyl7Ci1fNzEuYXBwZW5kQ2hpbGQoWGluaGEuX2NyZWF0ZVRvb2xiYXJCcmVha2luZ0VsZW1lbnQoKSk7Ci19Ci1mdW5jdGlvbiBuZXdMaW5lKCl7Ci1pZih0eXBlb2YgXzczIT0idW5kZWZpbmVkIiYmXzczLmNoaWxkTm9kZXMubGVuZ3RoPT09MCl7Ci1yZXR1cm47Ci19Ci12YXIgXzc0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7Ci1fNzQuYm9yZGVyPSIwcHgiOwotXzc0LmNlbGxTcGFjaW5nPSIwcHgiOwotXzc0LmNlbGxQYWRkaW5nPSIwcHgiOwotaWYoXzcwLmNvbmZpZy5mbG93VG9vbGJhcnMpewotaWYoWGluaGEuaXNfaWUpewotXzc0LnN0eWxlLnN0eWxlRmxvYXQ9ImxlZnQiOwotfWVsc2V7Ci1fNzQuc3R5bGUuY3NzRmxvYXQ9ImxlZnQiOwotfQotfQotXzcxLmFwcGVuZENoaWxkKF83NCk7Ci12YXIgXzc1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5Iik7Ci1fNzQuYXBwZW5kQ2hpbGQoXzc1KTsKLV83Mz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpOwotXzc1LmFwcGVuZENoaWxkKF83Myk7Ci1fNzQuY2xhc3NOYW1lPSJ0b29sYmFyUm93IjsKLX07Ci1uZXdMaW5lKCk7Ci1mdW5jdGlvbiBzZXRCdXR0b25TdGF0dXMoaWQsXzc3KXsKLXZhciBfNzg9dGhpc1tpZF07Ci12YXIgZWw9dGhpcy5lbGVtZW50OwotaWYoXzc4IT1fNzcpewotc3dpdGNoKGlkKXsKLWNhc2UgImVuYWJsZWQiOgotaWYoXzc3KXsKLVhpbmhhLl9yZW1vdmVDbGFzcyhlbCwiYnV0dG9uRGlzYWJsZWQiKTsKLWVsLmRpc2FibGVkPWZhbHNlOwotfWVsc2V7Ci1YaW5oYS5fYWRkQ2xhc3MoZWwsImJ1dHRvbkRpc2FibGVkIik7Ci1lbC5kaXNhYmxlZD10cnVlOwotfQotYnJlYWs7Ci1jYXNlICJhY3RpdmUiOgotaWYoXzc3KXsKLVhpbmhhLl9hZGRDbGFzcyhlbCwiYnV0dG9uUHJlc3NlZCIpOwotfWVsc2V7Ci1YaW5oYS5fcmVtb3ZlQ2xhc3MoZWwsImJ1dHRvblByZXNzZWQiKTsKLX0KLWJyZWFrOwotfQotdGhpc1tpZF09Xzc3OwotfQotfTsKLWZ1bmN0aW9uIGNyZWF0ZVNlbGVjdCh0eHQpewotdmFyIF83Yj1udWxsOwotdmFyIGVsPW51bGw7Ci12YXIgY21kPW51bGw7Ci12YXIgXzdlPV83MC5jb25maWcuY3VzdG9tU2VsZWN0czsKLXZhciBfN2Y9bnVsbDsKLXZhciBfODA9IiI7Ci1zd2l0Y2godHh0KXsKLWNhc2UgImZvbnRzaXplIjoKLWNhc2UgImZvbnRuYW1lIjoKLWNhc2UgImZvcm1hdGJsb2NrIjoKLV83Yj1fNzAuY29uZmlnW3R4dF07Ci1jbWQ9dHh0OwotYnJlYWs7Ci1kZWZhdWx0OgotY21kPXR4dDsKLXZhciBfODE9XzdlW2NtZF07Ci1pZih0eXBlb2YgXzgxIT0idW5kZWZpbmVkIil7Ci1fN2I9XzgxLm9wdGlvbnM7Ci1fN2Y9XzgxLmNvbnRleHQ7Ci1pZih0eXBlb2YgXzgxLnRvb2x0aXAhPSJ1bmRlZmluZWQiKXsKLV84MD1fODEudG9vbHRpcDsKLX0KLX1lbHNlewotYWxlcnQoIkVSUk9SIFtjcmVhdGVTZWxlY3RdOlxuQ2FuJ3QgZmluZCB0aGUgcmVxdWVzdGVkIGRyb3Bkb3duIGRlZmluaXRpb24iKTsKLX0KLWJyZWFrOwotfQotaWYoXzdiKXsKLWVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwotZWwudGl0bGU9XzgwOwotZWwuc3R5bGUud2lkdGg9ImF1dG8iOwotZWwubmFtZT10eHQ7Ci12YXIgb2JqPXtuYW1lOnR4dCxlbGVtZW50OmVsLGVuYWJsZWQ6dHJ1ZSx0ZXh0OmZhbHNlLGNtZDpjbWQsc3RhdGU6c2V0QnV0dG9uU3RhdHVzLGNvbnRleHQ6XzdmfTsKLVhpbmhhLmZyZWVMYXRlcihvYmopOwotXzcyW3R4dF09b2JqOwotZm9yKHZhciBpIGluIF83Yil7Ci1pZih0eXBlb2YgXzdiW2ldIT0ic3RyaW5nIil7Ci1jb250aW51ZTsKLX0KLXZhciBvcD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKTsKLW9wLmlubmVySFRNTD1YaW5oYS5fbGMoaSk7Ci1vcC52YWx1ZT1fN2JbaV07Ci1pZih0eHQ9PSJmb250bmFtZSImJl83MC5jb25maWcuc2hvd0ZvbnRTdHlsZXNJblRvb2xiYXIpewotb3Auc3R5bGUuZm9udEZhbWlseT1fN2JbaV07Ci19Ci1lbC5hcHBlbmRDaGlsZChvcCk7Ci19Ci1YaW5oYS5fYWRkRXZlbnQoZWwsImNoYW5nZSIsZnVuY3Rpb24oKXsKLV83MC5fY29tYm9TZWxlY3RlZChlbCx0eHQpOwotfSk7Ci19Ci1yZXR1cm4gZWw7Ci19OwotZnVuY3Rpb24gY3JlYXRlQnV0dG9uKHR4dCl7Ci12YXIgZWwsYnRuLG9iaj1udWxsOwotc3dpdGNoKHR4dCl7Ci1jYXNlICJzZXBhcmF0b3IiOgotaWYoXzcwLmNvbmZpZy5mbG93VG9vbGJhcnMpewotbmV3TGluZSgpOwotfQotZWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci1lbC5jbGFzc05hbWU9InNlcGFyYXRvciI7Ci1icmVhazsKLWNhc2UgInNwYWNlIjoKLWVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotZWwuY2xhc3NOYW1lPSJzcGFjZSI7Ci1icmVhazsKLWNhc2UgImxpbmVicmVhayI6Ci1uZXdMaW5lKCk7Ci1yZXR1cm4gZmFsc2U7Ci1jYXNlICJ0ZXh0aW5kaWNhdG9yIjoKLWVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotZWwuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIkEiKSk7Ci1lbC5jbGFzc05hbWU9ImluZGljYXRvciI7Ci1lbC50aXRsZT1YaW5oYS5fbGMoIkN1cnJlbnQgc3R5bGUiKTsKLW9iaj17bmFtZTp0eHQsZWxlbWVudDplbCxlbmFibGVkOnRydWUsYWN0aXZlOmZhbHNlLHRleHQ6ZmFsc2UsY21kOiJ0ZXh0aW5kaWNhdG9yIixzdGF0ZTpzZXRCdXR0b25TdGF0dXN9OwotWGluaGEuZnJlZUxhdGVyKG9iaik7Ci1fNzJbdHh0XT1vYmo7Ci1icmVhazsKLWRlZmF1bHQ6Ci1idG49XzcwLmNvbmZpZy5idG5MaXN0W3R4dF07Ci19Ci1pZighZWwmJmJ0bil7Ci1lbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci1lbC5zdHlsZS5kaXNwbGF5PSJibG9jayI7Ci1lbC5ocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiOwotZWwuc3R5bGUudGV4dERlY29yYXRpb249Im5vbmUiOwotZWwudGl0bGU9YnRuWzBdOwotZWwuY2xhc3NOYW1lPSJidXR0b24iOwotZWwuc3R5bGUuZGlyZWN0aW9uPSJsdHIiOwotb2JqPXtuYW1lOnR4dCxlbGVtZW50OmVsLGVuYWJsZWQ6dHJ1ZSxhY3RpdmU6ZmFsc2UsdGV4dDpidG5bMl0sY21kOmJ0blszXSxzdGF0ZTpzZXRCdXR0b25TdGF0dXMsY29udGV4dDpidG5bNF18fG51bGx9OwotWGluaGEuZnJlZUxhdGVyKGVsKTsKLVhpbmhhLmZyZWVMYXRlcihvYmopOwotXzcyW3R4dF09b2JqOwotZWwub25kcmFnPWZ1bmN0aW9uKCl7Ci1yZXR1cm4gZmFsc2U7Ci19OwotWGluaGEuX2FkZEV2ZW50KGVsLCJtb3VzZW91dCIsZnVuY3Rpb24oZXYpewotaWYob2JqLmVuYWJsZWQpewotWGluaGEuX3JlbW92ZUNsYXNzKGVsLCJidXR0b25BY3RpdmUiKTsKLWlmKG9iai5hY3RpdmUpewotWGluaGEuX2FkZENsYXNzKGVsLCJidXR0b25QcmVzc2VkIik7Ci19Ci19Ci19KTsKLVhpbmhhLl9hZGRFdmVudChlbCwibW91c2Vkb3duIixmdW5jdGlvbihldil7Ci1pZihvYmouZW5hYmxlZCl7Ci1YaW5oYS5fYWRkQ2xhc3MoZWwsImJ1dHRvbkFjdGl2ZSIpOwotWGluaGEuX3JlbW92ZUNsYXNzKGVsLCJidXR0b25QcmVzc2VkIik7Ci1YaW5oYS5fc3RvcEV2ZW50KFhpbmhhLmlzX2llP3dpbmRvdy5ldmVudDpldik7Ci19Ci19KTsKLVhpbmhhLl9hZGRFdmVudChlbCwiY2xpY2siLGZ1bmN0aW9uKGV2KXsKLWV2PWV2fHx3aW5kb3cuZXZlbnQ7Ci1fNzAuYnRuQ2xpY2tFdmVudD17Y2xpZW50WDpldi5jbGllbnRYLGNsaWVudFk6ZXYuY2xpZW50WX07Ci1pZihvYmouZW5hYmxlZCl7Ci1YaW5oYS5fcmVtb3ZlQ2xhc3MoZWwsImJ1dHRvbkFjdGl2ZSIpOwotaWYoWGluaGEuaXNfZ2Vja28pewotXzcwLmFjdGl2YXRlRWRpdG9yKCk7Ci19Ci1vYmouY21kKF83MCxvYmoubmFtZSxvYmosZXYpOwotWGluaGEuX3N0b3BFdmVudChldik7Ci19Ci19KTsKLXZhciBfOGM9WGluaGEubWFrZUJ0bkltZyhidG5bMV0pOwotdmFyIGltZz1fOGMuZmlyc3RDaGlsZDsKLVhpbmhhLmZyZWVMYXRlcihfOGMpOwotWGluaGEuZnJlZUxhdGVyKGltZyk7Ci1lbC5hcHBlbmRDaGlsZChfOGMpOwotb2JqLmltZ2VsPWltZzsKLW9iai5zd2FwSW1hZ2U9ZnVuY3Rpb24oXzhlKXsKLWlmKHR5cGVvZiBfOGUhPSJzdHJpbmciKXsKLWltZy5zcmM9XzhlWzBdOwotaW1nLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSI7Ci1pbWcuc3R5bGUudG9wPV84ZVsyXT8oIi0iKygxOCooXzhlWzJdKzEpKSsicHgiKToiLTE4cHgiOwotaW1nLnN0eWxlLmxlZnQ9XzhlWzFdPygiLSIrKDE4KihfOGVbMV0rMSkpKyJweCIpOiItMThweCI7Ci19ZWxzZXsKLW9iai5pbWdlbC5zcmM9XzhlOwotaW1nLnN0eWxlLnRvcD0iMHB4IjsKLWltZy5zdHlsZS5sZWZ0PSIwcHgiOwotfQotfTsKLX1lbHNlewotaWYoIWVsKXsKLWVsPWNyZWF0ZVNlbGVjdCh0eHQpOwotfQotfQotcmV0dXJuIGVsOwotfTsKLXZhciBfOGY9dHJ1ZTsKLWZvcih2YXIgaT0wO2k8dGhpcy5jb25maWcudG9vbGJhci5sZW5ndGg7KytpKXsKLWlmKCFfOGYpewotfWVsc2V7Ci1fOGY9ZmFsc2U7Ci19Ci1pZih0aGlzLmNvbmZpZy50b29sYmFyW2ldPT09bnVsbCl7Ci10aGlzLmNvbmZpZy50b29sYmFyW2ldPVsic2VwYXJhdG9yIl07Ci19Ci12YXIgXzkxPXRoaXMuY29uZmlnLnRvb2xiYXJbaV07Ci1mb3IodmFyIGo9MDtqPF85MS5sZW5ndGg7KytqKXsKLXZhciBfOTM9XzkxW2pdOwotdmFyIF85NDsKLWlmKC9eKFtJVF0pXFsoLio/KVxdLy50ZXN0KF85MykpewotdmFyIF85NT1SZWdFeHAuJDE9PSJJIjsKLXZhciBfOTY9UmVnRXhwLiQyOwotaWYoXzk1KXsKLV85Nj1YaW5oYS5fbGMoXzk2KTsKLX0KLV85ND1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotXzczLmFwcGVuZENoaWxkKF85NCk7Ci1fOTQuY2xhc3NOYW1lPSJsYWJlbCI7Ci1fOTQuaW5uZXJIVE1MPV85NjsKLX1lbHNlewotaWYodHlwZW9mIF85MyE9ImZ1bmN0aW9uIil7Ci12YXIgXzk3PWNyZWF0ZUJ1dHRvbihfOTMpOwotaWYoXzk3KXsKLV85ND1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotXzk0LmNsYXNzTmFtZT0idG9vbGJhckVsZW1lbnQiOwotXzczLmFwcGVuZENoaWxkKF85NCk7Ci1fOTQuYXBwZW5kQ2hpbGQoXzk3KTsKLX1lbHNlewotaWYoXzk3PT09bnVsbCl7Ci1hbGVydCgiRklYTUU6IFVua25vd24gdG9vbGJhciBpdGVtOiAiK185Myk7Ci19Ci19Ci19Ci19Ci19Ci19Ci1pZihfNzAuY29uZmlnLmZsb3dUb29sYmFycyl7Ci1fNzEuYXBwZW5kQ2hpbGQoWGluaGEuX2NyZWF0ZVRvb2xiYXJCcmVha2luZ0VsZW1lbnQoKSk7Ci19Ci1yZXR1cm4gXzcxOwotfTsKLVhpbmhhLm1ha2VCdG5JbWc9ZnVuY3Rpb24oXzk4LGRvYyl7Ci1pZighZG9jKXsKLWRvYz1kb2N1bWVudDsKLX0KLWlmKCFkb2MuX3hpbmhhSW1nQ2FjaGUpewotZG9jLl94aW5oYUltZ0NhY2hlPXt9OwotWGluaGEuZnJlZUxhdGVyKGRvYy5feGluaGFJbWdDYWNoZSk7Ci19Ci12YXIgXzlhPW51bGw7Ci1pZihYaW5oYS5pc19pZSYmKCghZG9jLmNvbXBhdE1vZGUpfHwoZG9jLmNvbXBhdE1vZGUmJmRvYy5jb21wYXRNb2RlPT0iQmFja0NvbXBhdCIpKSl7Ci1fOWE9ZG9jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLX1lbHNlewotXzlhPWRvYy5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLV85YS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiOwotfQotXzlhLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iOwotXzlhLnN0eWxlLndpZHRoPSIxOHB4IjsKLV85YS5zdHlsZS5oZWlnaHQ9IjE4cHgiOwotXzlhLmNsYXNzTmFtZT0iYnV0dG9uSW1hZ2VDb250YWluZXIiOwotdmFyIGltZz1udWxsOwotaWYodHlwZW9mIF85OD09InN0cmluZyIpewotaWYoZG9jLl94aW5oYUltZ0NhY2hlW185OF0pewotaW1nPWRvYy5feGluaGFJbWdDYWNoZVtfOThdLmNsb25lTm9kZSgpOwotfWVsc2V7Ci1pZihYaW5oYS5pZV92ZXJzaW9uPDcmJi9cLnBuZyQvLnRlc3QoXzk4WzBdKSl7Ci1pbWc9ZG9jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLWltZy5zdHlsZS5kaXNwbGF5PSJibG9jayI7Ci1pbWcuc3R5bGUud2lkdGg9IjE4cHgiOwotaW1nLnN0eWxlLmhlaWdodD0iMThweCI7Ci1pbWcuc3R5bGUuZmlsdGVyPSJwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuQWxwaGFJbWFnZUxvYWRlcihzcmM9XCIiK185OCsiXCIpIjsKLWltZy51bnNlbGVjdGFibGU9Im9uIjsKLX1lbHNlewotaW1nPWRvYy5jcmVhdGVFbGVtZW50KCJpbWciKTsKLWltZy5zcmM9Xzk4OwotfQotfQotfWVsc2V7Ci1pZihkb2MuX3hpbmhhSW1nQ2FjaGVbXzk4WzBdXSl7Ci1pbWc9ZG9jLl94aW5oYUltZ0NhY2hlW185OFswXV0uY2xvbmVOb2RlKCk7Ci19ZWxzZXsKLWlmKFhpbmhhLmllX3ZlcnNpb248NyYmL1wucG5nJC8udGVzdChfOThbMF0pKXsKLWltZz1kb2MuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotaW1nLnN0eWxlLmRpc3BsYXk9ImJsb2NrIjsKLWltZy5zdHlsZS53aWR0aD0iMThweCI7Ci1pbWcuc3R5bGUuaGVpZ2h0PSIxOHB4IjsKLWltZy5zdHlsZS5maWx0ZXI9InByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYUltYWdlTG9hZGVyKHNyYz1cIiIrXzk4WzBdKyJcIikiOwotaW1nLnVuc2VsZWN0YWJsZT0ib24iOwotfWVsc2V7Ci1pbWc9ZG9jLmNyZWF0ZUVsZW1lbnQoImltZyIpOwotaW1nLnNyYz1fOThbMF07Ci19Ci1pbWcuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIjsKLX0KLWltZy5zdHlsZS50b3A9Xzk4WzJdPygiLSIrKDE4KihfOThbMl0rMSkpKyJweCIpOiItMThweCI7Ci1pbWcuc3R5bGUubGVmdD1fOThbMV0/KCItIisoMTgqKF85OFsxXSsxKSkrInB4Iik6Ii0xOHB4IjsKLX0KLV85YS5hcHBlbmRDaGlsZChpbWcpOwotcmV0dXJuIF85YTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuX2NyZWF0ZVN0YXR1c0Jhcj1mdW5jdGlvbigpewotdGhpcy5zZXRMb2FkaW5nTWVzc2FnZShYaW5oYS5fbGMoIkNyZWF0ZSBTdGF0dXNiYXIiKSk7Ci12YXIgXzljPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotXzljLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSI7Ci1fOWMuY2xhc3NOYW1lPSJzdGF0dXNCYXIiOwotXzljLnN0eWxlLndpZHRoPSIxMDAlIjsKLVhpbmhhLmZyZWVMYXRlcih0aGlzLCJfc3RhdHVzQmFyIik7Ci12YXIgXzlkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotXzlkLmNsYXNzTmFtZT0ic3RhdHVzQmFyV2lkZ2V0Q29udGFpbmVyIjsKLV85ZC5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiOwotXzlkLnN0eWxlLnJpZ2h0PSIwIjsKLV85ZC5zdHlsZS50b3A9IjAiOwotXzlkLnN0eWxlLnBhZGRpbmc9IjNweCAzcHggM3B4IDEwcHgiOwotXzljLmFwcGVuZENoaWxkKF85ZCk7Ci12YXIgXzllPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLV85ZS5jbGFzc05hbWU9InN0YXR1c0JhclRyZWUiOwotXzllLmlubmVySFRNTD1YaW5oYS5fbGMoIlBhdGgiKSsiOiAiOwotdGhpcy5fc3RhdHVzQmFyVHJlZT1fOWU7Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiX3N0YXR1c0JhclRyZWUiKTsKLV85Yy5hcHBlbmRDaGlsZChfOWUpOwotdmFyIF85Zj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci1fOWYuaW5uZXJIVE1MPVhpbmhhLmh0bWxFbmNvZGUoWGluaGEuX2xjKCJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iKSk7Ci1fOWYuc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci10aGlzLl9zdGF0dXNCYXJUZXh0TW9kZT1fOWY7Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiX3N0YXR1c0JhclRleHRNb2RlIik7Ci1fOWMuYXBwZW5kQ2hpbGQoXzlmKTsKLV85Yy5zdHlsZS53aGl0ZVNwYWNlPSJub3dyYXAiOwotdmFyIF9hMD10aGlzOwotdGhpcy5ub3RpZnlPbigiYmVmb3JlX3Jlc2l6ZSIsZnVuY3Rpb24oZXZ0LF9hMil7Ci1fYTAuX3N0YXR1c0Jhci5zdHlsZS53aWR0aD1udWxsOwotfSk7Ci10aGlzLm5vdGlmeU9uKCJyZXNpemUiLGZ1bmN0aW9uKGV2dCxfYTQpewotaWYoWGluaGEuaXNfaWUmJlhpbmhhLmllX3ZlcnNpb249PTYpewotX2EwLl9zdGF0dXNCYXIuc3R5bGUud2lkdGg9IjEwMCUiOwotfWVsc2V7Ci12YXIgX2E1PV9hNFsid2lkdGgiXTsKLV9hMC5fc3RhdHVzQmFyLnN0eWxlLndpZHRoPV9hNSsicHgiOwotfQotfSk7Ci10aGlzLm5vdGlmeU9uKCJtb2RlY2hhbmdlIixmdW5jdGlvbihldnQsX2E3KXsKLWZvcih2YXIgaSBpbiBfYTAuX3N0YXR1c1dpZGdldHMpewotdmFyIF9hOT1fYTAuX3N0YXR1c1dpZGdldHNbaV07Ci1mb3IodmFyIF9hYT0wO19hYTxfYTkubW9kZXMubGVuZ3RoO19hYSsrKXsKLWlmKF9hOS5tb2Rlc1tfYWFdPT1fYTcubW9kZSl7Ci12YXIgX2FiPXRydWU7Ci19Ci19Ci1pZih0eXBlb2YgX2FiPT0idW5kZWZpbmVkIil7Ci1fYTkuYmxvY2suc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci19ZWxzZXsKLV9hOS5ibG9jay5zdHlsZS5kaXNwbGF5PSIiOwotfQotfQotfSk7Ci1pZighdGhpcy5jb25maWcuc3RhdHVzQmFyKXsKLV85Yy5zdHlsZS5kaXNwbGF5PSJub25lIjsKLX0KLXJldHVybiBfOWM7Ci19OwotWGluaGEucHJvdG90eXBlLnJlZ2lzdGVyU3RhdHVzV2lkZ2V0PWZ1bmN0aW9uKGlkLF9hZCl7Ci1fYWQ9X2FkfHxbInd5c2l3eWciXTsKLWlmKCF0aGlzLl9zdGF0dXNXaWRnZXRzKXsKLXRoaXMuX3N0YXR1c1dpZGdldHM9e307Ci19Ci12YXIgX2FlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotX2FlLmNsYXNzTmFtZT0ic3RhdHVzQmFyV2lkZ2V0IjsKLV9hZT10aGlzLl9zdGF0dXNCYXIuZmlyc3RDaGlsZC5hcHBlbmRDaGlsZChfYWUpOwotdmFyIF9hZj1mYWxzZTsKLWZvcih2YXIgaT0wO2k8X2FkLmxlbmd0aDtpKyspewotaWYoX2FkW2ldPT10aGlzLl9lZGl0TW9kZSl7Ci1fYWY9dHJ1ZTsKLX0KLX0KLV9hZS5zdHlsZS5kaXNwbGF5PV9hZj09dHJ1ZT8iIjoibm9uZSI7Ci10aGlzLl9zdGF0dXNXaWRnZXRzW2lkXT17YmxvY2s6X2FlLG1vZGVzOl9hZH07Ci1yZXR1cm4gX2FlOwotfTsKLVhpbmhhLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbigpewotaWYoIVhpbmhhLmlzU3VwcG9ydGVkQnJvd3Nlcil7Ci1yZXR1cm47Ci19Ci12YXIgaTsKLXZhciBfYjI9dGhpczsKLXZhciB1cmw7Ci12YXIgX2I0PWZhbHNlOwotdmFyIF9iNT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpOwotaWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJYaW5oYUNvcmVEZXNpZ24iKSl7Ci1fZWRpdG9yX2Nzcz0odHlwZW9mIF9lZGl0b3JfY3NzPT0ic3RyaW5nIik/X2VkaXRvcl9jc3M6IlhpbmhhLmNzcyI7Ci1mb3IoaT0wO2k8X2I1Lmxlbmd0aDtpKyspewotaWYoKF9iNVtpXS5yZWw9PSJzdHlsZXNoZWV0IikmJihfYjVbaV0uaHJlZj09X2VkaXRvcl91cmwrX2VkaXRvcl9jc3MpKXsKLV9iND10cnVlOwotfQotfQotaWYoIV9iNCl7Ci1YaW5oYS5sb2FkU3R5bGUoX2VkaXRvcl9jc3MsbnVsbCwiWGluaGFDb3JlRGVzaWduIix0cnVlKTsKLX0KLX0KLWlmKF9lZGl0b3Jfc2tpbiE9PSIiJiYhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlhpbmhhU2tpbiIpKXsKLV9iND1mYWxzZTsKLWZvcihpPTA7aTxfYjUubGVuZ3RoO2krKyl7Ci1pZigoX2I1W2ldLnJlbD09InN0eWxlc2hlZXQiKSYmKF9iNVtpXS5ocmVmPT1fZWRpdG9yX3VybCsic2tpbnMvIitfZWRpdG9yX3NraW4rIi9za2luLmNzcyIpKXsKLV9iND10cnVlOwotfQotfQotaWYoIV9iNCl7Ci1YaW5oYS5sb2FkU3R5bGUoInNraW5zLyIrX2VkaXRvcl9za2luKyIvc2tpbi5jc3MiLG51bGwsIlhpbmhhU2tpbiIpOwotfQotfQotdmFyIF9iNj1mdW5jdGlvbigpewotX2IyLmdlbmVyYXRlKCk7Ci19OwotaWYoWGluaGEuaXNfaWUpewotdXJsPV9lZGl0b3JfdXJsKyJtb2R1bGVzL0ludGVybmV0RXhwbG9yZXIvSW50ZXJuZXRFeHBsb3Jlci5qcyI7Ci1pZighWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IkludGVybmV0RXhwbG9yZXIiLHVybDp1cmx9XSxfYjYpKXsKLXJldHVybiBmYWxzZTsKLX0KLWlmKCF0aGlzLnBsdWdpbnMuSW50ZXJuZXRFeHBsb3Jlcil7Ci1fYjIuX2Jyb3dzZXJTcGVjaWZpY1BsdWdpbj1fYjIucmVnaXN0ZXJQbHVnaW4oIkludGVybmV0RXhwbG9yZXIiKTsKLX0KLX1lbHNlewotaWYoWGluaGEuaXNfd2Via2l0KXsKLXVybD1fZWRpdG9yX3VybCsibW9kdWxlcy9XZWJLaXQvV2ViS2l0LmpzIjsKLWlmKCFYaW5oYS5sb2FkUGx1Z2lucyhbe3BsdWdpbjoiV2ViS2l0Iix1cmw6dXJsfV0sX2I2KSl7Ci1yZXR1cm4gZmFsc2U7Ci19Ci1pZighdGhpcy5wbHVnaW5zLldlYmtpdCl7Ci1fYjIuX2Jyb3dzZXJTcGVjaWZpY1BsdWdpbj1fYjIucmVnaXN0ZXJQbHVnaW4oIldlYktpdCIpOwotfQotfWVsc2V7Ci1pZihYaW5oYS5pc19vcGVyYSl7Ci11cmw9X2VkaXRvcl91cmwrIm1vZHVsZXMvT3BlcmEvT3BlcmEuanMiOwotaWYoIVhpbmhhLmxvYWRQbHVnaW5zKFt7cGx1Z2luOiJPcGVyYSIsdXJsOnVybH1dLF9iNikpewotcmV0dXJuIGZhbHNlOwotfQotaWYoIXRoaXMucGx1Z2lucy5PcGVyYSl7Ci1fYjIuX2Jyb3dzZXJTcGVjaWZpY1BsdWdpbj1fYjIucmVnaXN0ZXJQbHVnaW4oIk9wZXJhIik7Ci19Ci19ZWxzZXsKLWlmKFhpbmhhLmlzX2dlY2tvKXsKLXVybD1fZWRpdG9yX3VybCsibW9kdWxlcy9HZWNrby9HZWNrby5qcyI7Ci1pZighWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IkdlY2tvIix1cmw6dXJsfV0sX2I2KSl7Ci1yZXR1cm4gZmFsc2U7Ci19Ci1pZighdGhpcy5wbHVnaW5zLkdlY2tvKXsKLV9iMi5fYnJvd3NlclNwZWNpZmljUGx1Z2luPV9iMi5yZWdpc3RlclBsdWdpbigiR2Vja28iKTsKLX0KLX0KLX0KLX0KLX0KLWlmKHR5cGVvZiBEaWFsb2c9PSJ1bmRlZmluZWQiJiYhWGluaGEuX2xvYWRiYWNrKF9lZGl0b3JfdXJsKyJtb2R1bGVzL0RpYWxvZ3MvZGlhbG9nLmpzIixfYjYsdGhpcykpewotcmV0dXJuIGZhbHNlOwotfQotaWYodHlwZW9mIFhpbmhhLkRpYWxvZz09InVuZGVmaW5lZCImJiFYaW5oYS5fbG9hZGJhY2soX2VkaXRvcl91cmwrIm1vZHVsZXMvRGlhbG9ncy9YaW5oYURpYWxvZy5qcyIsX2I2LHRoaXMpKXsKLXJldHVybiBmYWxzZTsKLX0KLXVybD1fZWRpdG9yX3VybCsibW9kdWxlcy9GdWxsU2NyZWVuL2Z1bGwtc2NyZWVuLmpzIjsKLWlmKCFYaW5oYS5sb2FkUGx1Z2lucyhbe3BsdWdpbjoiRnVsbFNjcmVlbiIsdXJsOnVybH1dLF9iNikpewotcmV0dXJuIGZhbHNlOwotfQotdXJsPV9lZGl0b3JfdXJsKyJtb2R1bGVzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLmpzIjsKLWlmKCFYaW5oYS5sb2FkUGx1Z2lucyhbe3BsdWdpbjoiQ29sb3JQaWNrZXIiLHVybDp1cmx9XSxfYjYpKXsKLXJldHVybiBmYWxzZTsKLX1lbHNlewotaWYodHlwZW9mIFhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yKCJDb2xvclBpY2tlciIpIT0idW5kZWZpbmVkIiYmIXRoaXMucGx1Z2lucy5jb2xvclBpY2tlcil7Ci1fYjIucmVnaXN0ZXJQbHVnaW4oIkNvbG9yUGlja2VyIik7Ci19Ci19Ci12YXIgX2I3PV9iMi5jb25maWcudG9vbGJhcjsKLWZvcihpPV9iNy5sZW5ndGg7LS1pPj0wOyl7Ci1mb3IodmFyIGo9X2I3W2ldLmxlbmd0aDstLWo+PTA7KXsKLXN3aXRjaChfYjdbaV1bal0pewotY2FzZSAicG9wdXBlZGl0b3IiOgotaWYoIXRoaXMucGx1Z2lucy5GdWxsU2NyZWVuKXsKLV9iMi5yZWdpc3RlclBsdWdpbigiRnVsbFNjcmVlbiIpOwotfQotYnJlYWs7Ci1jYXNlICJpbnNlcnRpbWFnZSI6Ci11cmw9X2VkaXRvcl91cmwrIm1vZHVsZXMvSW5zZXJ0SW1hZ2UvaW5zZXJ0X2ltYWdlLmpzIjsKLWlmKHR5cGVvZiBYaW5oYS5wcm90b3R5cGUuX2luc2VydEltYWdlPT0idW5kZWZpbmVkIiYmIVhpbmhhLmxvYWRQbHVnaW5zKFt7cGx1Z2luOiJJbnNlcnRJbWFnZSIsdXJsOnVybH1dLF9iNikpewotcmV0dXJuIGZhbHNlOwotfWVsc2V7Ci1pZih0eXBlb2YgWGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IoIkluc2VydEltYWdlIikhPSJ1bmRlZmluZWQiJiYhdGhpcy5wbHVnaW5zLkluc2VydEltYWdlKXsKLV9iMi5yZWdpc3RlclBsdWdpbigiSW5zZXJ0SW1hZ2UiKTsKLX0KLX0KLWJyZWFrOwotY2FzZSAiY3JlYXRlbGluayI6Ci11cmw9X2VkaXRvcl91cmwrIm1vZHVsZXMvQ3JlYXRlTGluay9saW5rLmpzIjsKLWlmKHR5cGVvZiBYaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3RvcigiTGlua2VyIik9PSJ1bmRlZmluZWQiJiYhWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IkNyZWF0ZUxpbmsiLHVybDp1cmx9XSxfYjYpKXsKLXJldHVybiBmYWxzZTsKLX1lbHNlewotaWYodHlwZW9mIFhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yKCJDcmVhdGVMaW5rIikhPSJ1bmRlZmluZWQiJiYhdGhpcy5wbHVnaW5zLkNyZWF0ZUxpbmspewotX2IyLnJlZ2lzdGVyUGx1Z2luKCJDcmVhdGVMaW5rIik7Ci19Ci19Ci1icmVhazsKLWNhc2UgImluc2VydHRhYmxlIjoKLXVybD1fZWRpdG9yX3VybCsibW9kdWxlcy9JbnNlcnRUYWJsZS9pbnNlcnRfdGFibGUuanMiOwotaWYoIVhpbmhhLmxvYWRQbHVnaW5zKFt7cGx1Z2luOiJJbnNlcnRUYWJsZSIsdXJsOnVybH1dLF9iNikpewotcmV0dXJuIGZhbHNlOwotfWVsc2V7Ci1pZih0eXBlb2YgWGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IoIkluc2VydFRhYmxlIikhPSJ1bmRlZmluZWQiJiYhdGhpcy5wbHVnaW5zLkluc2VydFRhYmxlKXsKLV9iMi5yZWdpc3RlclBsdWdpbigiSW5zZXJ0VGFibGUiKTsKLX0KLX0KLWJyZWFrOwotY2FzZSAiYWJvdXQiOgotdXJsPV9lZGl0b3JfdXJsKyJtb2R1bGVzL0Fib3V0Qm94L0Fib3V0Qm94LmpzIjsKLWlmKCFYaW5oYS5sb2FkUGx1Z2lucyhbe3BsdWdpbjoiQWJvdXRCb3giLHVybDp1cmx9XSxfYjYpKXsKLXJldHVybiBmYWxzZTsKLX1lbHNlewotaWYodHlwZW9mIFhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yKCJBYm91dEJveCIpIT0idW5kZWZpbmVkIiYmIXRoaXMucGx1Z2lucy5BYm91dEJveCl7Ci1fYjIucmVnaXN0ZXJQbHVnaW4oIkFib3V0Qm94Iik7Ci19Ci19Ci1icmVhazsKLX0KLX0KLX0KLWlmKFhpbmhhLmlzX2dlY2tvJiZfYjIuY29uZmlnLm1velBhcmFIYW5kbGVyIT0iYnVpbHQtaW4iKXsKLWlmKCFYaW5oYS5sb2FkUGx1Z2lucyhbe3BsdWdpbjoiRW50ZXJQYXJhZ3JhcGhzIix1cmw6X2VkaXRvcl91cmwrIm1vZHVsZXMvR2Vja28vcGFyYUhhbmRsZXJCZXN0LmpzIn1dLF9iNikpewotcmV0dXJuIGZhbHNlOwotfQotaWYoIXRoaXMucGx1Z2lucy5FbnRlclBhcmFncmFwaHMpewotX2IyLnJlZ2lzdGVyUGx1Z2luKCJFbnRlclBhcmFncmFwaHMiKTsKLX0KLX0KLXZhciBfYjk9dGhpcy5jb25maWcuZ2V0SHRtbE1ldGhvZD09IlRyYW5zZm9ybUlubmVySFRNTCI/X2VkaXRvcl91cmwrIm1vZHVsZXMvR2V0SHRtbC9UcmFuc2Zvcm1Jbm5lckhUTUwuanMiOl9lZGl0b3JfdXJsKyJtb2R1bGVzL0dldEh0bWwvRE9Nd2Fsay5qcyI7Ci1pZighWGluaGEubG9hZFBsdWdpbnMoW3twbHVnaW46IkdldEh0bWxJbXBsZW1lbnRhdGlvbiIsdXJsOl9iOX1dLF9iNikpewotcmV0dXJuIGZhbHNlOwotfWVsc2V7Ci1pZighdGhpcy5wbHVnaW5zLkdldEh0bWxJbXBsZW1lbnRhdGlvbil7Ci1fYjIucmVnaXN0ZXJQbHVnaW4oIkdldEh0bWxJbXBsZW1lbnRhdGlvbiIpOwotfQotfQotZnVuY3Rpb24gZ2V0VGV4dENvbnRlbnQoX2JhKXsKLXJldHVybiBfYmEudGV4dENvbnRlbnR8fF9iYS50ZXh0OwotfTsKLWlmKF9lZGl0b3Jfc2tpbil7Ci10aGlzLnNraW5JbmZvPXt9OwotdmFyIF9iYj1YaW5oYS5fZ2V0dXJsY29udGVudChfZWRpdG9yX3VybCsic2tpbnMvIitfZWRpdG9yX3NraW4rIi9za2luLnhtbCIsdHJ1ZSk7Ci1pZihfYmIpewotdmFyIF9iYz1fYmIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm1ldGEiKTsKLWZvcihpPTA7aTxfYmMubGVuZ3RoO2krKyl7Ci10aGlzLnNraW5JbmZvW19iY1tpXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKV09X2JjW2ldLmdldEF0dHJpYnV0ZSgidmFsdWUiKTsKLX0KLXZhciBfYmQ9X2JiLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJyZWNvbW1lbmRlZEljb25zIik7Ci1pZighX2VkaXRvcl9pY29ucyYmX2JkLmxlbmd0aCYmZ2V0VGV4dENvbnRlbnQoX2JkWzBdKSl7Ci1fZWRpdG9yX2ljb25zPWdldFRleHRDb250ZW50KF9iZFswXSk7Ci19Ci19Ci19Ci1pZihfZWRpdG9yX2ljb25zKXsKLXZhciBfYmU9WGluaGEuX2dldHVybGNvbnRlbnQoX2VkaXRvcl91cmwrImljb25zZXRzLyIrX2VkaXRvcl9pY29ucysiL2ljb25zZXQueG1sIix0cnVlKTsKLWlmKF9iZSl7Ci12YXIgX2JmPV9iZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaWNvbiIpOwotdmFyIF9jMCxpZCxfYzIsX2MzLHgseTsKLWZvcihpPTA7aTxfYmYubGVuZ3RoO2krKyl7Ci1fYzA9X2JmW2ldOwotaWQ9X2MwLmdldEF0dHJpYnV0ZSgiaWQiKTsKLWlmKF9jMC5nZXRFbGVtZW50c0J5VGFnTmFtZShfZWRpdG9yX2xhbmcpLmxlbmd0aCl7Ci1fYzA9X2MwLmdldEVsZW1lbnRzQnlUYWdOYW1lKF9lZGl0b3JfbGFuZylbMF07Ci19ZWxzZXsKLV9jMD1fYzAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRlZmF1bHQiKVswXTsKLX0KLV9jMj1nZXRUZXh0Q29udGVudChfYzAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhdGgiKVswXSk7Ci1fYzI9KCEvXlwvLy50ZXN0KF9jMik/X2VkaXRvcl91cmw6IiIpK19jMjsKLV9jMz1fYzAuZ2V0QXR0cmlidXRlKCJ0eXBlIik7Ci1pZihfYzM9PSJtYXAiKXsKLXg9cGFyc2VJbnQoZ2V0VGV4dENvbnRlbnQoX2MwLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ4IilbMF0pLDEwKTsKLXk9cGFyc2VJbnQoZ2V0VGV4dENvbnRlbnQoX2MwLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ5IilbMF0pLDEwKTsKLWlmKHRoaXMuY29uZmlnLmJ0bkxpc3RbaWRdKXsKLXRoaXMuY29uZmlnLmJ0bkxpc3RbaWRdWzFdPVtfYzIseCx5XTsKLX0KLWlmKHRoaXMuY29uZmlnLmljb25MaXN0W2lkXSl7Ci10aGlzLmNvbmZpZy5pY29uTGlzdFtpZF09W19jMix4LHldOwotfQotfWVsc2V7Ci1pZih0aGlzLmNvbmZpZy5idG5MaXN0W2lkXSl7Ci10aGlzLmNvbmZpZy5idG5MaXN0W2lkXVsxXT1fYzI7Ci19Ci1pZih0aGlzLmNvbmZpZy5pY29uTGlzdFtpZF0pewotdGhpcy5jb25maWcuaWNvbkxpc3RbaWRdPV9jMjsKLX0KLX0KLX0KLX0KLX0KLXRoaXMuc2V0TG9hZGluZ01lc3NhZ2UoWGluaGEuX2xjKCJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiKSk7Ci10aGlzLl9mcmFtZXdvcms9eyJ0YWJsZSI6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGFibGUiKSwidGJvZHkiOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IiksInRiX3JvdyI6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSwidGJfY2VsbCI6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKSwidHBfcm93Ijpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpLCJ0cF9jZWxsIjp0aGlzLl9wYW5lbHMudG9wLmNvbnRhaW5lciwibGVyX3JvdyI6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKSwibHBfY2VsbCI6dGhpcy5fcGFuZWxzLmxlZnQuY29udGFpbmVyLCJlZF9jZWxsIjpkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpLCJycF9jZWxsIjp0aGlzLl9wYW5lbHMucmlnaHQuY29udGFpbmVyLCJicF9yb3ciOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksImJwX2NlbGwiOnRoaXMuX3BhbmVscy5ib3R0b20uY29udGFpbmVyLCJzYl9yb3ciOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIiksInNiX2NlbGwiOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIil9OwotWGluaGEuZnJlZUxhdGVyKHRoaXMuX2ZyYW1ld29yayk7Ci12YXIgZnc9dGhpcy5fZnJhbWV3b3JrOwotZncudGFibGUuYm9yZGVyPSIwIjsKLWZ3LnRhYmxlLmNlbGxQYWRkaW5nPSIwIjsKLWZ3LnRhYmxlLmNlbGxTcGFjaW5nPSIwIjsKLWZ3LnRiX3Jvdy5zdHlsZS52ZXJ0aWNhbEFsaWduPSJ0b3AiOwotZncudHBfcm93LnN0eWxlLnZlcnRpY2FsQWxpZ249InRvcCI7Ci1mdy5sZXJfcm93LnN0eWxlLnZlcnRpY2FsQWxpZ249InRvcCI7Ci1mdy5icF9yb3cuc3R5bGUudmVydGljYWxBbGlnbj0idG9wIjsKLWZ3LnNiX3Jvdy5zdHlsZS52ZXJ0aWNhbEFsaWduPSJ0b3AiOwotZncuZWRfY2VsbC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiOwotZncudGJfcm93LmFwcGVuZENoaWxkKGZ3LnRiX2NlbGwpOwotZncudGJfY2VsbC5jb2xTcGFuPTM7Ci1mdy50cF9yb3cuYXBwZW5kQ2hpbGQoZncudHBfY2VsbCk7Ci1mdy50cF9jZWxsLmNvbFNwYW49MzsKLWZ3Lmxlcl9yb3cuYXBwZW5kQ2hpbGQoZncubHBfY2VsbCk7Ci1mdy5sZXJfcm93LmFwcGVuZENoaWxkKGZ3LmVkX2NlbGwpOwotZncubGVyX3Jvdy5hcHBlbmRDaGlsZChmdy5ycF9jZWxsKTsKLWZ3LmJwX3Jvdy5hcHBlbmRDaGlsZChmdy5icF9jZWxsKTsKLWZ3LmJwX2NlbGwuY29sU3Bhbj0zOwotZncuc2Jfcm93LmFwcGVuZENoaWxkKGZ3LnNiX2NlbGwpOwotZncuc2JfY2VsbC5jb2xTcGFuPTM7Ci1mdy50Ym9keS5hcHBlbmRDaGlsZChmdy50Yl9yb3cpOwotZncudGJvZHkuYXBwZW5kQ2hpbGQoZncudHBfcm93KTsKLWZ3LnRib2R5LmFwcGVuZENoaWxkKGZ3Lmxlcl9yb3cpOwotZncudGJvZHkuYXBwZW5kQ2hpbGQoZncuYnBfcm93KTsKLWZ3LnRib2R5LmFwcGVuZENoaWxkKGZ3LnNiX3Jvdyk7Ci1mdy50YWJsZS5hcHBlbmRDaGlsZChmdy50Ym9keSk7Ci12YXIgX2M3PWZ3LnRhYmxlOwotdGhpcy5faHRtbEFyZWE9X2M3OwotWGluaGEuZnJlZUxhdGVyKHRoaXMsIl9odG1sQXJlYSIpOwotX2M3LmNsYXNzTmFtZT0iaHRtbGFyZWEiOwotZncudGJfY2VsbC5hcHBlbmRDaGlsZCh0aGlzLl9jcmVhdGVUb29sYmFyKCkpOwotdmFyIF9jOD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKLV9jOC5zcmM9dGhpcy5wb3B1cFVSTChfYjIuY29uZmlnLlVSSXMuYmxhbmspOwotX2M4LmlkPSJYaW5oYUlGcmFtZV8iK3RoaXMuX3RleHRBcmVhLmlkOwotZncuZWRfY2VsbC5hcHBlbmRDaGlsZChfYzgpOwotdGhpcy5faWZyYW1lPV9jODsKLXRoaXMuX2lmcmFtZS5jbGFzc05hbWU9InhpbmhhX2lmcmFtZSI7Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiX2lmcmFtZSIpOwotdmFyIF9jOT10aGlzLl9jcmVhdGVTdGF0dXNCYXIoKTsKLXRoaXMuX3N0YXR1c0Jhcj1mdy5zYl9jZWxsLmFwcGVuZENoaWxkKF9jOSk7Ci12YXIgX2NhPXRoaXMuX3RleHRBcmVhOwotX2NhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKF9jNyxfY2EpOwotX2NhLmNsYXNzTmFtZT0ieGluaGFfdGV4dGFyZWEiOwotWGluaGEucmVtb3ZlRnJvbVBhcmVudChfY2EpOwotZncuZWRfY2VsbC5hcHBlbmRDaGlsZChfY2EpOwotWGluaGEuYWRkRG9tMEV2ZW50KHRoaXMuX3RleHRBcmVhLCJjbGljayIsZnVuY3Rpb24oKXsKLWlmKFhpbmhhLl9jdXJyZW50bHlBY3RpdmVFZGl0b3IhPXRoaXMpewotX2IyLnVwZGF0ZVRvb2xiYXIoKTsKLX0KLXJldHVybiB0cnVlOwotfSk7Ci1pZihfY2EuZm9ybSl7Ci1YaW5oYS5wcmVwZW5kRG9tMEV2ZW50KHRoaXMuX3RleHRBcmVhLmZvcm0sInN1Ym1pdCIsZnVuY3Rpb24oKXsKLV9iMi5maXJlUGx1Z2luRXZlbnQoIm9uQmVmb3JlU3VibWl0Iik7Ci1fYjIuX3RleHRBcmVhLnZhbHVlPV9iMi5vdXR3YXJkSHRtbChfYjIuZ2V0SFRNTCgpKTsKLXJldHVybiB0cnVlOwotfSk7Ci12YXIgX2NiPV9jYS52YWx1ZTsKLVhpbmhhLnByZXBlbmREb20wRXZlbnQodGhpcy5fdGV4dEFyZWEuZm9ybSwicmVzZXQiLGZ1bmN0aW9uKCl7Ci1fYjIuc2V0SFRNTChfYjIuaW53YXJkSHRtbChfY2IpKTsKLV9iMi51cGRhdGVUb29sYmFyKCk7Ci1yZXR1cm4gdHJ1ZTsKLX0pOwotaWYoIV9jYS5mb3JtLnhpbmhhX3N1Ym1pdCl7Ci10cnl7Ci1fY2EuZm9ybS54aW5oYV9zdWJtaXQ9X2NhLmZvcm0uc3VibWl0OwotX2NhLmZvcm0uc3VibWl0PWZ1bmN0aW9uKCl7Ci10aGlzLm9uc3VibWl0KCk7Ci10aGlzLnhpbmhhX3N1Ym1pdCgpOwotfTsKLX0KLWNhdGNoKGV4KXsKLX0KLX0KLX0KLVhpbmhhLnByZXBlbmREb20wRXZlbnQod2luZG93LCJ1bmxvYWQiLGZ1bmN0aW9uKCl7Ci1fYjIuZmlyZVBsdWdpbkV2ZW50KCJvbkJlZm9yZVVubG9hZCIpOwotX2NhLnZhbHVlPV9iMi5vdXR3YXJkSHRtbChfYjIuZ2V0SFRNTCgpKTsKLWlmKCFYaW5oYS5pc19pZSl7Ci1fYzcucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQoX2NhLF9jNyk7Ci19Ci1yZXR1cm4gdHJ1ZTsKLX0pOwotX2NhLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwotX2IyLmluaXRTaXplKCk7Ci10aGlzLnNldExvYWRpbmdNZXNzYWdlKFhpbmhhLl9sYygiRmluaXNoaW5nIikpOwotX2IyLl9pZnJhbWVMb2FkRG9uZT1mYWxzZTsKLWlmKFhpbmhhLmlzX29wZXJhKXsKLV9iMi5pbml0SWZyYW1lKCk7Ci19ZWxzZXsKLVhpbmhhLl9hZGRFdmVudCh0aGlzLl9pZnJhbWUsImxvYWQiLGZ1bmN0aW9uKGUpewotaWYoIV9iMi5faWZyYW1lTG9hZERvbmUpewotX2IyLl9pZnJhbWVMb2FkRG9uZT10cnVlOwotX2IyLmluaXRJZnJhbWUoKTsKLX0KLXJldHVybiB0cnVlOwotfSk7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmluaXRTaXplPWZ1bmN0aW9uKCl7Ci10aGlzLnNldExvYWRpbmdNZXNzYWdlKFhpbmhhLl9sYygiSW5pdCBlZGl0b3Igc2l6ZSIpKTsKLXZhciBfY2Q9dGhpczsKLXZhciBfY2U9bnVsbDsKLXZhciBfY2Y9bnVsbDsKLXN3aXRjaCh0aGlzLmNvbmZpZy53aWR0aCl7Ci1jYXNlICJhdXRvIjoKLV9jZT10aGlzLl9pbml0aWFsX3RhX3NpemUudzsKLWJyZWFrOwotY2FzZSAidG9vbGJhciI6Ci1fY2U9dGhpcy5fdG9vbEJhci5vZmZzZXRXaWR0aCsicHgiOwotYnJlYWs7Ci1kZWZhdWx0OgotX2NlPS9bXjAtOV0vLnRlc3QodGhpcy5jb25maWcud2lkdGgpP3RoaXMuY29uZmlnLndpZHRoOnRoaXMuY29uZmlnLndpZHRoKyJweCI7Ci1icmVhazsKLX0KLV9jZj10aGlzLmNvbmZpZy5oZWlnaHQ9PSJhdXRvIj90aGlzLl9pbml0aWFsX3RhX3NpemUuaDovW14wLTldLy50ZXN0KHRoaXMuY29uZmlnLmhlaWdodCk/dGhpcy5jb25maWcuaGVpZ2h0OnRoaXMuY29uZmlnLmhlaWdodCsicHgiOwotdGhpcy5zaXplRWRpdG9yKF9jZSxfY2YsdGhpcy5jb25maWcuc2l6ZUluY2x1ZGVzQmFycyx0aGlzLmNvbmZpZy5zaXplSW5jbHVkZXNQYW5lbHMpOwotdGhpcy5ub3RpZnlPbigicGFuZWxfY2hhbmdlIixmdW5jdGlvbigpewotX2NkLnNpemVFZGl0b3IoKTsKLX0pOwotfTsKLVhpbmhhLnByb3RvdHlwZS5zaXplRWRpdG9yPWZ1bmN0aW9uKF9kMCxfZDEsX2QyLF9kMyl7Ci1pZih0aGlzLl9yaXNpemluZyl7Ci1yZXR1cm47Ci19Ci10aGlzLl9yaXNpemluZz10cnVlOwotdmFyIF9kND10aGlzLl9mcmFtZXdvcms7Ci10aGlzLm5vdGlmeU9mKCJiZWZvcmVfcmVzaXplIix7d2lkdGg6X2QwLGhlaWdodDpfZDF9KTsKLXRoaXMuZmlyZVBsdWdpbkV2ZW50KCJvbkJlZm9yZVJlc2l6ZSIsX2QwLF9kMSk7Ci10aGlzLl9pZnJhbWUuc3R5bGUuaGVpZ2h0PSIxMDAlIjsKLXRoaXMuX3RleHRBcmVhLnN0eWxlLmhlaWdodD0iMXB4IjsKLXRoaXMuX2lmcmFtZS5zdHlsZS53aWR0aD0iMHB4IjsKLXRoaXMuX3RleHRBcmVhLnN0eWxlLndpZHRoPSIwcHgiOwotaWYoX2QyIT09bnVsbCl7Ci10aGlzLl9odG1sQXJlYS5zaXplSW5jbHVkZXNUb29sYmFycz1fZDI7Ci19Ci1pZihfZDMhPT1udWxsKXsKLXRoaXMuX2h0bWxBcmVhLnNpemVJbmNsdWRlc1BhbmVscz1fZDM7Ci19Ci1pZihfZDApewotdGhpcy5faHRtbEFyZWEuc3R5bGUud2lkdGg9X2QwOwotaWYoIXRoaXMuX2h0bWxBcmVhLnNpemVJbmNsdWRlc1BhbmVscyl7Ci12YXIgX2Q1PXRoaXMuX3BhbmVscy5yaWdodDsKLWlmKF9kNS5vbiYmX2Q1LnBhbmVscy5sZW5ndGgmJlhpbmhhLmhhc0Rpc3BsYXllZENoaWxkcmVuKF9kNS5kaXYpKXsKLXRoaXMuX2h0bWxBcmVhLnN0eWxlLndpZHRoPSh0aGlzLl9odG1sQXJlYS5vZmZzZXRXaWR0aCtwYXJzZUludCh0aGlzLmNvbmZpZy5wYW5lbF9kaW1lbnNpb25zLnJpZ2h0LDEwKSkrInB4IjsKLX0KLXZhciBfZDY9dGhpcy5fcGFuZWxzLmxlZnQ7Ci1pZihfZDYub24mJl9kNi5wYW5lbHMubGVuZ3RoJiZYaW5oYS5oYXNEaXNwbGF5ZWRDaGlsZHJlbihfZDYuZGl2KSl7Ci10aGlzLl9odG1sQXJlYS5zdHlsZS53aWR0aD0odGhpcy5faHRtbEFyZWEub2Zmc2V0V2lkdGgrcGFyc2VJbnQodGhpcy5jb25maWcucGFuZWxfZGltZW5zaW9ucy5sZWZ0LDEwKSkrInB4IjsKLX0KLX0KLX0KLWlmKF9kMSl7Ci10aGlzLl9odG1sQXJlYS5zdHlsZS5oZWlnaHQ9X2QxOwotaWYoIXRoaXMuX2h0bWxBcmVhLnNpemVJbmNsdWRlc1Rvb2xiYXJzKXsKLXRoaXMuX2h0bWxBcmVhLnN0eWxlLmhlaWdodD0odGhpcy5faHRtbEFyZWEub2Zmc2V0SGVpZ2h0K3RoaXMuX3Rvb2xiYXIub2Zmc2V0SGVpZ2h0K3RoaXMuX3N0YXR1c0Jhci5vZmZzZXRIZWlnaHQpKyJweCI7Ci19Ci1pZighdGhpcy5faHRtbEFyZWEuc2l6ZUluY2x1ZGVzUGFuZWxzKXsKLXZhciBfZDc9dGhpcy5fcGFuZWxzLnRvcDsKLWlmKF9kNy5vbiYmX2Q3LnBhbmVscy5sZW5ndGgmJlhpbmhhLmhhc0Rpc3BsYXllZENoaWxkcmVuKF9kNy5kaXYpKXsKLXRoaXMuX2h0bWxBcmVhLnN0eWxlLmhlaWdodD0odGhpcy5faHRtbEFyZWEub2Zmc2V0SGVpZ2h0K3BhcnNlSW50KHRoaXMuY29uZmlnLnBhbmVsX2RpbWVuc2lvbnMudG9wLDEwKSkrInB4IjsKLX0KLXZhciBfZDg9dGhpcy5fcGFuZWxzLmJvdHRvbTsKLWlmKF9kOC5vbiYmX2Q4LnBhbmVscy5sZW5ndGgmJlhpbmhhLmhhc0Rpc3BsYXllZENoaWxkcmVuKF9kOC5kaXYpKXsKLXRoaXMuX2h0bWxBcmVhLnN0eWxlLmhlaWdodD0odGhpcy5faHRtbEFyZWEub2Zmc2V0SGVpZ2h0K3BhcnNlSW50KHRoaXMuY29uZmlnLnBhbmVsX2RpbWVuc2lvbnMuYm90dG9tLDEwKSkrInB4IjsKLX0KLX0KLX0KLV9kMD10aGlzLl9odG1sQXJlYS5vZmZzZXRXaWR0aDsKLV9kMT10aGlzLl9odG1sQXJlYS5vZmZzZXRIZWlnaHQ7Ci12YXIgX2Q5PXRoaXMuX3BhbmVsczsKLXZhciBfZGE9dGhpczsKLXZhciBfZGI9MTsKLWZ1bmN0aW9uIHBhbmVsX2lzX2FsaXZlKHBhbil7Ci1pZihfZDlbcGFuXS5vbiYmX2Q5W3Bhbl0ucGFuZWxzLmxlbmd0aCYmWGluaGEuaGFzRGlzcGxheWVkQ2hpbGRyZW4oX2Q5W3Bhbl0uY29udGFpbmVyKSl7Ci1fZDlbcGFuXS5jb250YWluZXIuc3R5bGUuZGlzcGxheT0iIjsKLXJldHVybiB0cnVlOwotfWVsc2V7Ci1fZDlbcGFuXS5jb250YWluZXIuc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci1yZXR1cm4gZmFsc2U7Ci19Ci19OwotaWYocGFuZWxfaXNfYWxpdmUoImxlZnQiKSl7Ci1fZGIrPTE7Ci19Ci1pZihwYW5lbF9pc19hbGl2ZSgicmlnaHQiKSl7Ci1fZGIrPTE7Ci19Ci1fZDQudGJfY2VsbC5jb2xTcGFuPV9kYjsKLV9kNC50cF9jZWxsLmNvbFNwYW49X2RiOwotX2Q0LmJwX2NlbGwuY29sU3Bhbj1fZGI7Ci1fZDQuc2JfY2VsbC5jb2xTcGFuPV9kYjsKLWlmKCFfZDQudHBfcm93LmNoaWxkTm9kZXMubGVuZ3RoKXsKLVhpbmhhLnJlbW92ZUZyb21QYXJlbnQoX2Q0LnRwX3Jvdyk7Ci19ZWxzZXsKLWlmKCFYaW5oYS5oYXNQYXJlbnROb2RlKF9kNC50cF9yb3cpKXsKLV9kNC50Ym9keS5pbnNlcnRCZWZvcmUoX2Q0LnRwX3JvdyxfZDQubGVyX3Jvdyk7Ci19Ci19Ci1pZighX2Q0LmJwX3Jvdy5jaGlsZE5vZGVzLmxlbmd0aCl7Ci1YaW5oYS5yZW1vdmVGcm9tUGFyZW50KF9kNC5icF9yb3cpOwotfWVsc2V7Ci1pZighWGluaGEuaGFzUGFyZW50Tm9kZShfZDQuYnBfcm93KSl7Ci1fZDQudGJvZHkuaW5zZXJ0QmVmb3JlKF9kNC5icF9yb3csX2Q0Lmxlcl9yb3cubmV4dFNpYmxpbmcpOwotfQotfQotaWYoIXRoaXMuY29uZmlnLnN0YXR1c0Jhcil7Ci1YaW5oYS5yZW1vdmVGcm9tUGFyZW50KF9kNC5zYl9yb3cpOwotfWVsc2V7Ci1pZighWGluaGEuaGFzUGFyZW50Tm9kZShfZDQuc2Jfcm93KSl7Ci1fZDQudGFibGUuYXBwZW5kQ2hpbGQoX2Q0LnNiX3Jvdyk7Ci19Ci19Ci1fZDQubHBfY2VsbC5zdHlsZS53aWR0aD10aGlzLmNvbmZpZy5wYW5lbF9kaW1lbnNpb25zLmxlZnQ7Ci1fZDQucnBfY2VsbC5zdHlsZS53aWR0aD10aGlzLmNvbmZpZy5wYW5lbF9kaW1lbnNpb25zLnJpZ2h0OwotX2Q0LnRwX2NlbGwuc3R5bGUuaGVpZ2h0PXRoaXMuY29uZmlnLnBhbmVsX2RpbWVuc2lvbnMudG9wOwotX2Q0LmJwX2NlbGwuc3R5bGUuaGVpZ2h0PXRoaXMuY29uZmlnLnBhbmVsX2RpbWVuc2lvbnMuYm90dG9tOwotX2Q0LnRiX2NlbGwuc3R5bGUuaGVpZ2h0PXRoaXMuX3Rvb2xCYXIub2Zmc2V0SGVpZ2h0KyJweCI7Ci1fZDQuc2JfY2VsbC5zdHlsZS5oZWlnaHQ9dGhpcy5fc3RhdHVzQmFyLm9mZnNldEhlaWdodCsicHgiOwotdmFyIF9kZD1fZDEtdGhpcy5fdG9vbEJhci5vZmZzZXRIZWlnaHQtdGhpcy5fc3RhdHVzQmFyLm9mZnNldEhlaWdodDsKLWlmKHBhbmVsX2lzX2FsaXZlKCJ0b3AiKSl7Ci1fZGQtPXBhcnNlSW50KHRoaXMuY29uZmlnLnBhbmVsX2RpbWVuc2lvbnMudG9wLDEwKTsKLX0KLWlmKHBhbmVsX2lzX2FsaXZlKCJib3R0b20iKSl7Ci1fZGQtPXBhcnNlSW50KHRoaXMuY29uZmlnLnBhbmVsX2RpbWVuc2lvbnMuYm90dG9tLDEwKTsKLX0KLXRoaXMuX2lmcmFtZS5zdHlsZS5oZWlnaHQ9X2RkKyJweCI7Ci12YXIgX2RlPV9kMDsKLWlmKHBhbmVsX2lzX2FsaXZlKCJsZWZ0IikpewotX2RlLT1wYXJzZUludCh0aGlzLmNvbmZpZy5wYW5lbF9kaW1lbnNpb25zLmxlZnQsMTApOwotfQotaWYocGFuZWxfaXNfYWxpdmUoInJpZ2h0IikpewotX2RlLT1wYXJzZUludCh0aGlzLmNvbmZpZy5wYW5lbF9kaW1lbnNpb25zLnJpZ2h0LDEwKTsKLX0KLXZhciBfZGY9dGhpcy5jb25maWcuaWZyYW1lV2lkdGg/cGFyc2VJbnQodGhpcy5jb25maWcuaWZyYW1lV2lkdGgsMTApOm51bGw7Ci10aGlzLl9pZnJhbWUuc3R5bGUud2lkdGg9KF9kZiYmX2RmPF9kZSk/X2RmKyJweCI6X2RlKyJweCI7Ci10aGlzLl90ZXh0QXJlYS5zdHlsZS5oZWlnaHQ9dGhpcy5faWZyYW1lLnN0eWxlLmhlaWdodDsKLXRoaXMuX3RleHRBcmVhLnN0eWxlLndpZHRoPXRoaXMuX2lmcmFtZS5zdHlsZS53aWR0aDsKLXRoaXMubm90aWZ5T2YoInJlc2l6ZSIse3dpZHRoOnRoaXMuX2h0bWxBcmVhLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLl9odG1sQXJlYS5vZmZzZXRIZWlnaHR9KTsKLXRoaXMuZmlyZVBsdWdpbkV2ZW50KCJvblJlc2l6ZSIsdGhpcy5faHRtbEFyZWEub2Zmc2V0V2lkdGgsdGhpcy5faHRtbEFyZWEub2Zmc2V0V2lkdGgpOwotdGhpcy5fcmlzaXppbmc9ZmFsc2U7Ci19OwotWGluaGEucHJvdG90eXBlLnJlZ2lzdGVyUGFuZWw9ZnVuY3Rpb24oX2UwLF9lMSl7Ci1pZighX2UwKXsKLV9lMD0icmlnaHQiOwotfQotdGhpcy5zZXRMb2FkaW5nTWVzc2FnZSgiUmVnaXN0ZXIgIitfZTArIiBwYW5lbCAiKTsKLXZhciBfZTI9dGhpcy5hZGRQYW5lbChfZTApOwotaWYoX2UxKXsKLV9lMS5kcmF3UGFuZWxJbihfZTIpOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5hZGRQYW5lbD1mdW5jdGlvbihfZTMpewotdmFyIGRpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLWRpdi5zaWRlPV9lMzsKLWlmKF9lMz09ImxlZnQifHxfZTM9PSJyaWdodCIpewotZGl2LnN0eWxlLndpZHRoPXRoaXMuY29uZmlnLnBhbmVsX2RpbWVuc2lvbnNbX2UzXTsKLWlmKHRoaXMuX2lmcmFtZSl7Ci1kaXYuc3R5bGUuaGVpZ2h0PXRoaXMuX2lmcmFtZS5zdHlsZS5oZWlnaHQ7Ci19Ci19Ci1YaW5oYS5hZGRDbGFzc2VzKGRpdiwicGFuZWwiKTsKLXRoaXMuX3BhbmVsc1tfZTNdLnBhbmVscy5wdXNoKGRpdik7Ci10aGlzLl9wYW5lbHNbX2UzXS5kaXYuYXBwZW5kQ2hpbGQoZGl2KTsKLXRoaXMubm90aWZ5T2YoInBhbmVsX2NoYW5nZSIseyJhY3Rpb24iOiJhZGQiLCJwYW5lbCI6ZGl2fSk7Ci10aGlzLmZpcmVQbHVnaW5FdmVudCgib25QYW5lbENoYW5nZSIsImFkZCIsZGl2KTsKLXJldHVybiBkaXY7Ci19OwotWGluaGEucHJvdG90eXBlLnJlbW92ZVBhbmVsPWZ1bmN0aW9uKF9lNSl7Ci10aGlzLl9wYW5lbHNbX2U1LnNpZGVdLmRpdi5yZW1vdmVDaGlsZChfZTUpOwotdmFyIF9lNj1bXTsKLWZvcih2YXIgaT0wO2k8dGhpcy5fcGFuZWxzW19lNS5zaWRlXS5wYW5lbHMubGVuZ3RoO2krKyl7Ci1pZih0aGlzLl9wYW5lbHNbX2U1LnNpZGVdLnBhbmVsc1tpXSE9X2U1KXsKLV9lNi5wdXNoKHRoaXMuX3BhbmVsc1tfZTUuc2lkZV0ucGFuZWxzW2ldKTsKLX0KLX0KLXRoaXMuX3BhbmVsc1tfZTUuc2lkZV0ucGFuZWxzPV9lNjsKLXRoaXMubm90aWZ5T2YoInBhbmVsX2NoYW5nZSIseyJhY3Rpb24iOiJyZW1vdmUiLCJwYW5lbCI6X2U1fSk7Ci10aGlzLmZpcmVQbHVnaW5FdmVudCgib25QYW5lbENoYW5nZSIsInJlbW92ZSIsX2U1KTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuaGlkZVBhbmVsPWZ1bmN0aW9uKF9lOCl7Ci1pZihfZTgmJl9lOC5zdHlsZS5kaXNwbGF5IT0ibm9uZSIpewotdHJ5ewotdmFyIHBvcz10aGlzLnNjcm9sbFBvcyh0aGlzLl9pZnJhbWUuY29udGVudFdpbmRvdyk7Ci19Ci1jYXRjaChlKXsKLX0KLV9lOC5zdHlsZS5kaXNwbGF5PSJub25lIjsKLXRoaXMubm90aWZ5T2YoInBhbmVsX2NoYW5nZSIseyJhY3Rpb24iOiJoaWRlIiwicGFuZWwiOl9lOH0pOwotdGhpcy5maXJlUGx1Z2luRXZlbnQoIm9uUGFuZWxDaGFuZ2UiLCJoaWRlIixfZTgpOwotdHJ5ewotdGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cuc2Nyb2xsVG8ocG9zLngscG9zLnkpOwotfQotY2F0Y2goZSl7Ci19Ci19Ci19OwotWGluaGEucHJvdG90eXBlLnNob3dQYW5lbD1mdW5jdGlvbihfZWEpewotaWYoX2VhJiZfZWEuc3R5bGUuZGlzcGxheT09Im5vbmUiKXsKLXRyeXsKLXZhciBwb3M9dGhpcy5zY3JvbGxQb3ModGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cpOwotfQotY2F0Y2goZSl7Ci19Ci1fZWEuc3R5bGUuZGlzcGxheT0iIjsKLXRoaXMubm90aWZ5T2YoInBhbmVsX2NoYW5nZSIseyJhY3Rpb24iOiJzaG93IiwicGFuZWwiOl9lYX0pOwotdGhpcy5maXJlUGx1Z2luRXZlbnQoIm9uUGFuZWxDaGFuZ2UiLCJzaG93IixfZWEpOwotdHJ5ewotdGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cuc2Nyb2xsVG8ocG9zLngscG9zLnkpOwotfQotY2F0Y2goZSl7Ci19Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmhpZGVQYW5lbHM9ZnVuY3Rpb24oX2VjKXsKLWlmKHR5cGVvZiBfZWM9PSJ1bmRlZmluZWQiKXsKLV9lYz1bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdOwotfQotdmFyIF9lZD1bXTsKLWZvcih2YXIgaT0wO2k8X2VjLmxlbmd0aDtpKyspewotaWYodGhpcy5fcGFuZWxzW19lY1tpXV0ub24pewotX2VkLnB1c2goX2VjW2ldKTsKLXRoaXMuX3BhbmVsc1tfZWNbaV1dLm9uPWZhbHNlOwotfQotfQotdGhpcy5ub3RpZnlPZigicGFuZWxfY2hhbmdlIix7ImFjdGlvbiI6Im11bHRpX2hpZGUiLCJzaWRlcyI6X2VjfSk7Ci10aGlzLmZpcmVQbHVnaW5FdmVudCgib25QYW5lbENoYW5nZSIsIm11bHRpX2hpZGUiLF9lYyk7Ci19OwotWGluaGEucHJvdG90eXBlLnNob3dQYW5lbHM9ZnVuY3Rpb24oX2VmKXsKLWlmKHR5cGVvZiBfZWY9PSJ1bmRlZmluZWQiKXsKLV9lZj1bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSJdOwotfQotdmFyIF9mMD1bXTsKLWZvcih2YXIgaT0wO2k8X2VmLmxlbmd0aDtpKyspewotaWYoIXRoaXMuX3BhbmVsc1tfZWZbaV1dLm9uKXsKLV9mMC5wdXNoKF9lZltpXSk7Ci10aGlzLl9wYW5lbHNbX2VmW2ldXS5vbj10cnVlOwotfQotfQotdGhpcy5ub3RpZnlPZigicGFuZWxfY2hhbmdlIix7ImFjdGlvbiI6Im11bHRpX3Nob3ciLCJzaWRlcyI6X2VmfSk7Ci10aGlzLmZpcmVQbHVnaW5FdmVudCgib25QYW5lbENoYW5nZSIsIm11bHRpX3Nob3ciLF9lZik7Ci19OwotWGluaGEub2JqZWN0UHJvcGVydGllcz1mdW5jdGlvbihvYmopewotdmFyIF9mMz1bXTsKLWZvcih2YXIgeCBpbiBvYmopewotX2YzW19mMy5sZW5ndGhdPXg7Ci19Ci1yZXR1cm4gX2YzOwotfTsKLVhpbmhhLnByb3RvdHlwZS5lZGl0b3JJc0FjdGl2YXRlZD1mdW5jdGlvbigpewotdHJ5ewotcmV0dXJuIFhpbmhhLmlzX2Rlc2lnbk1vZGU/dGhpcy5fZG9jLmRlc2lnbk1vZGU9PSJvbiI6dGhpcy5fZG9jLmJvZHkuY29udGVudEVkaXRhYmxlOwotfQotY2F0Y2goZXgpewotcmV0dXJuIGZhbHNlOwotfQotfTsKLVhpbmhhLl9zb21lRWRpdG9ySGFzQmVlbkFjdGl2YXRlZD1mYWxzZTsKLVhpbmhhLl9jdXJyZW50bHlBY3RpdmVFZGl0b3I9bnVsbDsKLVhpbmhhLnByb3RvdHlwZS5hY3RpdmF0ZUVkaXRvcj1mdW5jdGlvbigpewotaWYodGhpcy5jdXJyZW50TW9kYWwpewotcmV0dXJuOwotfQotaWYoWGluaGEuX2N1cnJlbnRseUFjdGl2ZUVkaXRvcil7Ci1pZihYaW5oYS5fY3VycmVudGx5QWN0aXZlRWRpdG9yPT10aGlzKXsKLXJldHVybiB0cnVlOwotfQotWGluaGEuX2N1cnJlbnRseUFjdGl2ZUVkaXRvci5kZWFjdGl2YXRlRWRpdG9yKCk7Ci19Ci1pZihYaW5oYS5pc19kZXNpZ25Nb2RlJiZ0aGlzLl9kb2MuZGVzaWduTW9kZSE9Im9uIil7Ci10cnl7Ci1pZih0aGlzLl9pZnJhbWUuc3R5bGUuZGlzcGxheT09Im5vbmUiKXsKLXRoaXMuX2lmcmFtZS5zdHlsZS5kaXNwbGF5PSIiOwotdGhpcy5fZG9jLmRlc2lnbk1vZGU9Im9uIjsKLXRoaXMuX2lmcmFtZS5zdHlsZS5kaXNwbGF5PSJub25lIjsKLX1lbHNlewotdGhpcy5fZG9jLmRlc2lnbk1vZGU9Im9uIjsKLX0KLWlmKFhpbmhhLmlzX29wZXJhKXsKLXRoaXMuc2V0RWRpdG9yRXZlbnRzKHRydWUpOwotfQotfQotY2F0Y2goZXgpewotfQotfWVsc2V7Ci1pZihYaW5oYS5pc19pZSYmdGhpcy5fZG9jLmJvZHkuY29udGVudEVkaXRhYmxlIT09dHJ1ZSl7Ci10aGlzLl9kb2MuYm9keS5jb250ZW50RWRpdGFibGU9dHJ1ZTsKLX0KLX0KLVhpbmhhLl9zb21lRWRpdG9ySGFzQmVlbkFjdGl2YXRlZD10cnVlOwotWGluaGEuX2N1cnJlbnRseUFjdGl2ZUVkaXRvcj10aGlzOwotdmFyIF9mNT10aGlzOwotdGhpcy5lbmFibGVUb29sYmFyKCk7Ci19OwotWGluaGEucHJvdG90eXBlLmRlYWN0aXZhdGVFZGl0b3I9ZnVuY3Rpb24oKXsKLXRoaXMuZGlzYWJsZVRvb2xiYXIoKTsKLWlmKFhpbmhhLmlzX2Rlc2lnbk1vZGUmJnRoaXMuX2RvYy5kZXNpZ25Nb2RlIT0ib2ZmIil7Ci10cnl7Ci10aGlzLl9kb2MuZGVzaWduTW9kZT0ib2ZmIjsKLX0KLWNhdGNoKGV4KXsKLX0KLX1lbHNlewotaWYoIVhpbmhhLmlzX2Rlc2lnbk1vZGUmJnRoaXMuX2RvYy5ib2R5LmNvbnRlbnRFZGl0YWJsZSE9PWZhbHNlKXsKLXRoaXMuX2RvYy5ib2R5LmNvbnRlbnRFZGl0YWJsZT1mYWxzZTsKLX0KLX0KLWlmKFhpbmhhLl9jdXJyZW50bHlBY3RpdmVFZGl0b3IhPXRoaXMpewotcmV0dXJuOwotfQotWGluaGEuX2N1cnJlbnRseUFjdGl2ZUVkaXRvcj1mYWxzZTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuaW5pdElmcmFtZT1mdW5jdGlvbigpewotdGhpcy5kaXNhYmxlVG9vbGJhcigpOwotdmFyIGRvYz1udWxsOwotdmFyIF9mNz10aGlzOwotdHJ5ewotaWYoX2Y3Ll9pZnJhbWUuY29udGVudERvY3VtZW50KXsKLXRoaXMuX2RvYz1fZjcuX2lmcmFtZS5jb250ZW50RG9jdW1lbnQ7Ci19ZWxzZXsKLXRoaXMuX2RvYz1fZjcuX2lmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50OwotfQotZG9jPXRoaXMuX2RvYzsKLWlmKCFkb2MpewotaWYoWGluaGEuaXNfZ2Vja28pewotc2V0VGltZW91dChmdW5jdGlvbigpewotX2Y3LmluaXRJZnJhbWUoKTsKLX0sNTApOwotcmV0dXJuIGZhbHNlOwotfWVsc2V7Ci1hbGVydCgiRVJST1I6IElGUkFNRSBjYW4ndCBiZSBpbml0aWFsaXplZC4iKTsKLX0KLX0KLX0KLWNhdGNoKGV4KXsKLXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKLV9mNy5pbml0SWZyYW1lKCk7Ci19LDUwKTsKLXJldHVybiBmYWxzZTsKLX0KLVhpbmhhLmZyZWVMYXRlcih0aGlzLCJfZG9jIik7Ci1kb2Mub3BlbigidGV4dC9odG1sIiwicmVwbGFjZSIpOwotdmFyIF9mOD0iIixfZjk7Ci1pZihfZjcuY29uZmlnLmJyb3dzZXJRdWlya3NNb2RlPT09ZmFsc2UpewotX2Y5PSI8IURPQ1RZUEUgSFRNTCBQVUJMSUMgXCItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTlwiIFwiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkXCI+IjsKLX1lbHNlewotaWYoX2Y3LmNvbmZpZy5icm93c2VyUXVpcmtzTW9kZT09PXRydWUpewotX2Y5PSIiOwotfWVsc2V7Ci1fZjk9WGluaGEuZ2V0RG9jdHlwZShkb2N1bWVudCk7Ci19Ci19Ci1pZighX2Y3LmNvbmZpZy5mdWxsUGFnZSl7Ci1fZjgrPV9mOSsiXG4iOwotX2Y4Kz0iPGh0bWw+XG4iOwotX2Y4Kz0iPGhlYWQ+XG4iOwotX2Y4Kz0iPG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9IitfZjcuY29uZmlnLmNoYXJTZXQrIlwiPlxuIjsKLWlmKHR5cGVvZiBfZjcuY29uZmlnLmJhc2VIcmVmIT0idW5kZWZpbmVkIiYmX2Y3LmNvbmZpZy5iYXNlSHJlZiE9PW51bGwpewotX2Y4Kz0iPGJhc2UgaHJlZj1cIiIrX2Y3LmNvbmZpZy5iYXNlSHJlZisiXCIvPlxuIjsKLX0KLV9mOCs9WGluaGEuYWRkQ29yZUNTUygpOwotaWYodHlwZW9mIF9mNy5jb25maWcucGFnZVN0eWxlU2hlZXRzIT09InVuZGVmaW5lZCIpewotZm9yKHZhciBpPTA7aTxfZjcuY29uZmlnLnBhZ2VTdHlsZVNoZWV0cy5sZW5ndGg7aSsrKXsKLWlmKF9mNy5jb25maWcucGFnZVN0eWxlU2hlZXRzW2ldLmxlbmd0aD4wKXsKLV9mOCs9IjxsaW5rIHJlbD1cInN0eWxlc2hlZXRcIiB0eXBlPVwidGV4dC9jc3NcIiBocmVmPVwiIitfZjcuY29uZmlnLnBhZ2VTdHlsZVNoZWV0c1tpXSsiXCI+IjsKLX0KLX0KLX0KLWlmKF9mNy5jb25maWcucGFnZVN0eWxlKXsKLV9mOCs9IjxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5cbiIrX2Y3LmNvbmZpZy5wYWdlU3R5bGUrIlxuPC9zdHlsZT4iOwotfQotX2Y4Kz0iPC9oZWFkPlxuIjsKLV9mOCs9Ijxib2R5IisoX2Y3LmNvbmZpZy5ib2R5SUQ/KCIgaWQ9XCIiK19mNy5jb25maWcuYm9keUlEKyJcIiIpOiIiKSsoX2Y3LmNvbmZpZy5ib2R5Q2xhc3M/KCIgY2xhc3M9XCIiK19mNy5jb25maWcuYm9keUNsYXNzKyJcIiIpOiIiKSsiPlxuIjsKLV9mOCs9X2Y3Lmlud2FyZEh0bWwoX2Y3Ll90ZXh0QXJlYS52YWx1ZSk7Ci1fZjgrPSI8L2JvZHk+XG4iOwotX2Y4Kz0iPC9odG1sPiI7Ci19ZWxzZXsKLV9mOD1fZjcuaW53YXJkSHRtbChfZjcuX3RleHRBcmVhLnZhbHVlKTsKLWlmKF9mOC5tYXRjaChYaW5oYS5SRV9kb2N0eXBlKSl7Ci1fZjcuc2V0RG9jdHlwZShSZWdFeHAuJDEpOwotfQotdmFyIF9mYj1fZjgubWF0Y2goLzxsaW5rXHMrW1xzXFNdKj9bIiddXHMqXC8/Pi9naSk7Ci1fZjg9X2Y4LnJlcGxhY2UoLzxsaW5rXHMrW1xzXFNdKj9bIiddXHMqXC8/PlxzKi9naSwiIik7Ci1pZihfZmIpewotX2Y4PV9mOC5yZXBsYWNlKC88XC9oZWFkPi9pLF9mYi5qb2luKCJcbiIpKyJcbjwvaGVhZD4iKTsKLX0KLX0KLWRvYy53cml0ZShfZjgpOwotZG9jLmNsb3NlKCk7Ci1pZih0aGlzLmNvbmZpZy5mdWxsU2NyZWVuKXsKLXRoaXMuX2Z1bGxTY3JlZW4oKTsKLX0KLXRoaXMuc2V0RWRpdG9yRXZlbnRzKCk7Ci1pZigodHlwZW9mIF9mNy5jb25maWcuYXV0b2ZvY3VzIT0idW5kZWZpbmVkIikmJl9mNy5jb25maWcuYXV0b2ZvY3VzIT09ZmFsc2UmJigoX2Y3LmNvbmZpZy5hdXRvZm9jdXM9PV9mNy5fdGV4dEFyZWEuaWQpfHxfZjcuY29uZmlnLmF1dG9mb2N1cz09dHJ1ZSkpewotX2Y3LmFjdGl2YXRlRWRpdG9yKCk7Ci1fZjcuZm9jdXNFZGl0b3IoKTsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUud2hlbkRvY1JlYWR5PWZ1bmN0aW9uKGYpewotdmFyIGU9dGhpczsKLWlmKHRoaXMuX2RvYyYmdGhpcy5fZG9jLmJvZHkpewotZigpOwotfWVsc2V7Ci1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ci1lLndoZW5Eb2NSZWFkeShmKTsKLX0sNTApOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5zZXRNb2RlPWZ1bmN0aW9uKF9mZSl7Ci12YXIgX2ZmOwotaWYodHlwZW9mIF9mZT09InVuZGVmaW5lZCIpewotX2ZlPXRoaXMuX2VkaXRNb2RlPT0idGV4dG1vZGUiPyJ3eXNpd3lnIjoidGV4dG1vZGUiOwotfQotc3dpdGNoKF9mZSl7Ci1jYXNlICJ0ZXh0bW9kZSI6Ci10aGlzLmZpcmVQbHVnaW5FdmVudCgib25CZWZvcmVNb2RlIiwidGV4dG1vZGUiKTsKLXRoaXMuX3Rvb2xiYXJPYmplY3RzLmh0bWxtb2RlLnN3YXBJbWFnZSh0aGlzLmNvbmZpZy5pY29uTGlzdC53eXNpd3lnbW9kZSk7Ci10aGlzLnNldENDKCJpZnJhbWUiKTsKLV9mZj10aGlzLm91dHdhcmRIdG1sKHRoaXMuZ2V0SFRNTCgpKTsKLXRoaXMuc2V0SFRNTChfZmYpOwotdGhpcy5kZWFjdGl2YXRlRWRpdG9yKCk7Ci10aGlzLl9pZnJhbWUuc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci10aGlzLl90ZXh0QXJlYS5zdHlsZS5kaXNwbGF5PSIiOwotaWYodGhpcy5jb25maWcuc3RhdHVzQmFyKXsKLXRoaXMuX3N0YXR1c0JhclRyZWUuc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci10aGlzLl9zdGF0dXNCYXJUZXh0TW9kZS5zdHlsZS5kaXNwbGF5PSIiOwotfQotdGhpcy5maW5kQ0MoInRleHRhcmVhIik7Ci10aGlzLm5vdGlmeU9mKCJtb2RlY2hhbmdlIix7Im1vZGUiOiJ0ZXh0In0pOwotdGhpcy5maXJlUGx1Z2luRXZlbnQoIm9uTW9kZSIsInRleHRtb2RlIik7Ci1icmVhazsKLWNhc2UgInd5c2l3eWciOgotdGhpcy5maXJlUGx1Z2luRXZlbnQoIm9uQmVmb3JlTW9kZSIsInd5c2l3eWciKTsKLXRoaXMuX3Rvb2xiYXJPYmplY3RzLmh0bWxtb2RlLnN3YXBJbWFnZShbdGhpcy5pbWdVUkwoImltYWdlcy9lZF9idXR0b25zX21haW4ucG5nIiksNywwXSk7Ci10aGlzLnNldENDKCJ0ZXh0YXJlYSIpOwotX2ZmPXRoaXMuaW53YXJkSHRtbCh0aGlzLmdldEhUTUwoKSk7Ci10aGlzLmRlYWN0aXZhdGVFZGl0b3IoKTsKLXRoaXMuc2V0SFRNTChfZmYpOwotdGhpcy5faWZyYW1lLnN0eWxlLmRpc3BsYXk9IiI7Ci10aGlzLl90ZXh0QXJlYS5zdHlsZS5kaXNwbGF5PSJub25lIjsKLXRoaXMuYWN0aXZhdGVFZGl0b3IoKTsKLWlmKHRoaXMuY29uZmlnLnN0YXR1c0Jhcil7Ci10aGlzLl9zdGF0dXNCYXJUcmVlLnN0eWxlLmRpc3BsYXk9IiI7Ci10aGlzLl9zdGF0dXNCYXJUZXh0TW9kZS5zdHlsZS5kaXNwbGF5PSJub25lIjsKLX0KLXRoaXMuZmluZENDKCJpZnJhbWUiKTsKLXRoaXMubm90aWZ5T2YoIm1vZGVjaGFuZ2UiLHsibW9kZSI6Ind5c2l3eWcifSk7Ci10aGlzLmZpcmVQbHVnaW5FdmVudCgib25Nb2RlIiwid3lzaXd5ZyIpOwotYnJlYWs7Ci1kZWZhdWx0OgotYWxlcnQoIk1vZGUgPCIrX2ZlKyI+IG5vdCBkZWZpbmVkISIpOwotcmV0dXJuIGZhbHNlOwotfQotdGhpcy5fZWRpdE1vZGU9X2ZlOwotfTsKLVhpbmhhLnByb3RvdHlwZS5zZXRGdWxsSFRNTD1mdW5jdGlvbihodG1sKXsKLXZhciBfMTAxPVJlZ0V4cC5tdWx0aWxpbmU7Ci1SZWdFeHAubXVsdGlsaW5lPXRydWU7Ci1pZihodG1sLm1hdGNoKFhpbmhhLlJFX2RvY3R5cGUpKXsKLXRoaXMuc2V0RG9jdHlwZShSZWdFeHAuJDEpOwotfQotUmVnRXhwLm11bHRpbGluZT1fMTAxOwotaWYoMCl7Ci1pZihodG1sLm1hdGNoKFhpbmhhLlJFX2hlYWQpKXsKLXRoaXMuX2RvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmlubmVySFRNTD1SZWdFeHAuJDE7Ci19Ci1pZihodG1sLm1hdGNoKFhpbmhhLlJFX2JvZHkpKXsKLXRoaXMuX2RvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLmlubmVySFRNTD1SZWdFeHAuJDE7Ci19Ci19ZWxzZXsKLXZhciByZWFjPXRoaXMuZWRpdG9ySXNBY3RpdmF0ZWQoKTsKLWlmKHJlYWMpewotdGhpcy5kZWFjdGl2YXRlRWRpdG9yKCk7Ci19Ci12YXIgXzEwMz0vPGh0bWw+KCgufFxuKSo/KTxcL2h0bWw+L2k7Ci1odG1sPWh0bWwucmVwbGFjZShfMTAzLCIkMSIpOwotdGhpcy5fZG9jLm9wZW4oInRleHQvaHRtbCIsInJlcGxhY2UiKTsKLXRoaXMuX2RvYy53cml0ZShodG1sKTsKLXRoaXMuX2RvYy5jbG9zZSgpOwotaWYocmVhYyl7Ci10aGlzLmFjdGl2YXRlRWRpdG9yKCk7Ci19Ci10aGlzLnNldEVkaXRvckV2ZW50cygpOwotcmV0dXJuIHRydWU7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLnNldEVkaXRvckV2ZW50cz1mdW5jdGlvbihfMTA0KXsKLXZhciBfMTA1PXRoaXM7Ci12YXIgZG9jPXRoaXMuX2RvYzsKLV8xMDUud2hlbkRvY1JlYWR5KGZ1bmN0aW9uKCl7Ci1pZighXzEwNCl7Ci1YaW5oYS5fYWRkRXZlbnRzKGRvYyxbIm1vdXNlZG93biJdLGZ1bmN0aW9uKCl7Ci1fMTA1LmFjdGl2YXRlRWRpdG9yKCk7Ci1yZXR1cm4gdHJ1ZTsKLX0pOwotaWYoWGluaGEuaXNfaWUpewotWGluaGEuX2FkZEV2ZW50KF8xMDUuX2RvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpWzBdLCJjbGljayIsZnVuY3Rpb24oKXsKLWlmKF8xMDUuX2lmcmFtZS5jb250ZW50V2luZG93LmV2ZW50LnNyY0VsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iaHRtbCIpewotdmFyIHI9XzEwNS5fZG9jLmJvZHkuY3JlYXRlVGV4dFJhbmdlKCk7Ci1yLmNvbGxhcHNlKCk7Ci1yLnNlbGVjdCgpOwotfQotcmV0dXJuIHRydWU7Ci19KTsKLX0KLX0KLVhpbmhhLl9hZGRFdmVudHMoZG9jLFsia2V5ZG93biIsImtleXByZXNzIiwibW91c2Vkb3duIiwibW91c2V1cCIsImRyYWciXSxmdW5jdGlvbihfMTA4KXsKLXJldHVybiBfMTA1Ll9lZGl0b3JFdmVudChYaW5oYS5pc19pZT9fMTA1Ll9pZnJhbWUuY29udGVudFdpbmRvdy5ldmVudDpfMTA4KTsKLX0pOwotWGluaGEuX2FkZEV2ZW50cyhkb2MsWyJkYmxjbGljayJdLGZ1bmN0aW9uKF8xMDkpewotcmV0dXJuIF8xMDUuX29uRG91YmxlQ2xpY2soWGluaGEuaXNfaWU/XzEwNS5faWZyYW1lLmNvbnRlbnRXaW5kb3cuZXZlbnQ6XzEwOSk7Ci19KTsKLWlmKF8xMDQpewotcmV0dXJuOwotfQotZm9yKHZhciBpIGluIF8xMDUucGx1Z2lucyl7Ci12YXIgXzEwYj1fMTA1LnBsdWdpbnNbaV0uaW5zdGFuY2U7Ci1YaW5oYS5yZWZyZXNoUGx1Z2luKF8xMGIpOwotfQotaWYodHlwZW9mIF8xMDUuX29uR2VuZXJhdGU9PSJmdW5jdGlvbiIpewotXzEwNS5fb25HZW5lcmF0ZSgpOwotfQotWGluaGEuYWRkRG9tMEV2ZW50KHdpbmRvdywicmVzaXplIixmdW5jdGlvbihlKXsKLWlmKFhpbmhhLmllX3ZlcnNpb24+NyYmIXdpbmRvdy5wYXJlbnQpewotaWYoXzEwNS5leGVjUmVzaXplKXsKLV8xMDUuc2l6ZUVkaXRvcigpOwotXzEwNS5leGVjUmVzaXplPWZhbHNlOwotfWVsc2V7Ci1fMTA1LmV4ZWNSZXNpemU9dHJ1ZTsKLX0KLX1lbHNlewotXzEwNS5zaXplRWRpdG9yKCk7Ci19Ci19KTsKLV8xMDUucmVtb3ZlTG9hZGluZ01lc3NhZ2UoKTsKLX0pOwotfTsKLVhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yPWZ1bmN0aW9uKF8xMGQpewotcmV0dXJuIFhpbmhhLnBsdWdpbnNbXzEwZF18fHdpbmRvd1tfMTBkXTsKLX07Ci1YaW5oYS5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW49ZnVuY3Rpb24oKXsKLWlmKCFYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIpewotcmV0dXJuOwotfQotdmFyIF8xMGU9YXJndW1lbnRzWzBdOwotaWYoXzEwZT09PW51bGx8fHR5cGVvZiBfMTBlPT0idW5kZWZpbmVkInx8KHR5cGVvZiBfMTBlPT0ic3RyaW5nIiYmWGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IoXzEwZSk9PSJ1bmRlZmluZWQiKSl7Ci1yZXR1cm4gZmFsc2U7Ci19Ci12YXIgYXJncz1bXTsKLWZvcih2YXIgaT0xO2k8YXJndW1lbnRzLmxlbmd0aDsrK2kpewotYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7Ci19Ci1yZXR1cm4gdGhpcy5yZWdpc3RlclBsdWdpbjIoXzEwZSxhcmdzKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUucmVnaXN0ZXJQbHVnaW4yPWZ1bmN0aW9uKF8xMTEsYXJncyl7Ci1pZih0eXBlb2YgXzExMT09InN0cmluZyImJnR5cGVvZiBYaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3RvcihfMTExKT09ImZ1bmN0aW9uIil7Ci12YXIgXzExMz1fMTExOwotXzExMT1YaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3RvcihfMTExKTsKLX0KLWlmKHR5cGVvZiBfMTExPT0idW5kZWZpbmVkIil7Ci1yZXR1cm4gZmFsc2U7Ci19Ci1pZighXzExMS5fcGx1Z2luSW5mbyl7Ci1fMTExLl9wbHVnaW5JbmZvPXtuYW1lOl8xMTN9OwotfQotdmFyIG9iaj1uZXcgXzExMSh0aGlzLGFyZ3MpOwotaWYob2JqKXsKLXZhciBfMTE1PXt9OwotdmFyIGluZm89XzExMS5fcGx1Z2luSW5mbzsKLWZvcih2YXIgaSBpbiBpbmZvKXsKLV8xMTVbaV09aW5mb1tpXTsKLX0KLV8xMTUuaW5zdGFuY2U9b2JqOwotXzExNS5hcmdzPWFyZ3M7Ci10aGlzLnBsdWdpbnNbXzExMS5fcGx1Z2luSW5mby5uYW1lXT1fMTE1OwotcmV0dXJuIG9iajsKLX1lbHNlewotWGluaGEuZGVidWdNc2coIkNhbid0IHJlZ2lzdGVyIHBsdWdpbiAiK18xMTEudG9TdHJpbmcoKSsiLiIsIndhcm4iKTsKLX0KLX07Ci1YaW5oYS5nZXRQbHVnaW5EaXI9ZnVuY3Rpb24oXzExOCxfMTE5KXsKLWlmKFhpbmhhLmV4dGVybmFsUGx1Z2luc1tfMTE4XSl7Ci1yZXR1cm4gWGluaGEuZXh0ZXJuYWxQbHVnaW5zW18xMThdWzBdOwotfQotaWYoXzExOXx8KFhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yKF8xMTgpJiYodHlwZW9mIFhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yKF8xMTgpLnN1cHBvcnRlZCE9InVuZGVmaW5lZCIpJiYhWGluaGEuZ2V0UGx1Z2luQ29uc3RydWN0b3IoXzExOCkuc3VwcG9ydGVkKSl7Ci1yZXR1cm4gX2VkaXRvcl91cmwrInVuc3VwcG9ydGVkX3BsdWdpbnMvIitfMTE4OwotfQotcmV0dXJuIF9lZGl0b3JfdXJsKyJwbHVnaW5zLyIrXzExODsKLX07Ci1YaW5oYS5sb2FkUGx1Z2luPWZ1bmN0aW9uKF8xMWEsXzExYix1cmwpewotaWYoIVhpbmhhLmlzU3VwcG9ydGVkQnJvd3Nlcil7Ci1yZXR1cm47Ci19Ci1YaW5oYS5zZXRMb2FkaW5nTWVzc2FnZShYaW5oYS5fbGMoIkxvYWRpbmcgcGx1Z2luICRwbHVnaW49IitfMTFhKyIkIikpOwotaWYodHlwZW9mIFhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yKF8xMWEpIT0idW5kZWZpbmVkIil7Ci1pZihfMTFiKXsKLV8xMWIoXzExYSk7Ci19Ci1yZXR1cm4gdHJ1ZTsKLX0KLVhpbmhhLl9wbHVnaW5Mb2FkU3RhdHVzW18xMWFdPSJsb2FkaW5nIjsKLWZ1bmN0aW9uIG11bHRpU3RhZ2VMb2FkZXIoXzExZCxfMTFlKXsKLXZhciBfMTFmLGRpcixmaWxlLF8xMjI7Ci1zd2l0Y2goXzExZCl7Ci1jYXNlICJzdGFydCI6Ci1fMTFmPSJvbGRfbmFtaW5nIjsKLWRpcj1YaW5oYS5nZXRQbHVnaW5EaXIoXzExZSk7Ci1maWxlPV8xMWUrIi5qcyI7Ci1icmVhazsKLWNhc2UgIm9sZF9uYW1pbmciOgotXzExZj0idW5zdXBwb3J0ZWQiOwotZGlyPVhpbmhhLmdldFBsdWdpbkRpcihfMTFlKTsKLWZpbGU9XzExZS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKShbYS16XSkvZyxmdW5jdGlvbihzdHIsbDEsbDIsbDMpewotcmV0dXJuIGwxKyItIitsMi50b0xvd2VyQ2FzZSgpK2wzOwotfSkudG9Mb3dlckNhc2UoKSsiLmpzIjsKLV8xMjI9IllvdSBhcmUgdXNpbmcgYW4gb2Jzb2xldGUgbmFtaW5nIHNjaGVtZSBmb3IgdGhlIFhpbmhhIHBsdWdpbiAiK18xMWUrIi4gUGxlYXNlIHJlbmFtZSAiK2ZpbGUrIiB0byAiK18xMWUrIi5qcyI7Ci1icmVhazsKLWNhc2UgInVuc3VwcG9ydGVkIjoKLV8xMWY9InVuc3VwcG9ydGVkX29sZF9uYW1lIjsKLWRpcj1YaW5oYS5nZXRQbHVnaW5EaXIoXzExZSx0cnVlKTsKLWZpbGU9XzExZSsiLmpzIjsKLV8xMjI9IllvdSBhcmUgdXNpbmcgdGhlIHVuc3VwcG9ydGVkIFhpbmhhIHBsdWdpbiAiK18xMWUrIi4gSWYgeW91IHdpc2ggY29udGludWVkIHN1cHBvcnQsIHBsZWFzZSBzZWUgaHR0cDovL3RyYWMueGluaGEub3JnL3RpY2tldC8xMjk3IjsKLWJyZWFrOwotY2FzZSAidW5zdXBwb3J0ZWRfb2xkX25hbWUiOgotXzExZj0iIjsKLWRpcj1YaW5oYS5nZXRQbHVnaW5EaXIoXzExZSx0cnVlKTsKLWZpbGU9XzExZS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKShbYS16XSkvZyxmdW5jdGlvbihzdHIsbDEsbDIsbDMpewotcmV0dXJuIGwxKyItIitsMi50b0xvd2VyQ2FzZSgpK2wzOwotfSkudG9Mb3dlckNhc2UoKSsiLmpzIjsKLV8xMjI9IllvdSBhcmUgdXNpbmcgdGhlIHVuc3VwcG9ydGVkIFhpbmhhIHBsdWdpbiAiK18xMWUrIi4gSWYgeW91IHdpc2ggY29udGludWVkIHN1cHBvcnQsIHBsZWFzZSBzZWUgaHR0cDovL3RyYWMueGluaGEub3JnL3RpY2tldC8xMjk3IjsKLWJyZWFrOwotZGVmYXVsdDoKLVhpbmhhLl9wbHVnaW5Mb2FkU3RhdHVzW18xMWVdPSJmYWlsZWQiOwotWGluaGEuZGVidWdNc2coIlhpbmhhIHdhcyBub3QgYWJsZSB0byBmaW5kIHRoZSBwbHVnaW4gIitfMTFlKyIuIFBsZWFzZSBtYWtlIHN1cmUgdGhlIHBsdWdpbiBleGlzdHMuIiwid2FybiIpOwotcmV0dXJuOwotfQotdmFyIHVybD1kaXIrIi8iK2ZpbGU7Ci1mdW5jdGlvbiBzdGF0dXNDYWxsYmFjayhfMTJjKXsKLVhpbmhhLmdldFBsdWdpbkNvbnN0cnVjdG9yKF8xMmMpLnN1cHBvcnRlZD1fMTFkLmluZGV4T2YoInVuc3VwcG9ydGVkIikhPT0wOwotXzExYihfMTJjKTsKLX07Ci1YaW5oYS5fbG9hZGJhY2sodXJsLHN0YXR1c0NhbGxiYWNrLHRoaXMsXzExZSk7Ci1YaW5oYS5waW5nKHVybCxmdW5jdGlvbigpewotaWYoXzEyMil7Ci1YaW5oYS5kZWJ1Z01zZyhfMTIyKTsKLX0KLX0sZnVuY3Rpb24oKXsKLVhpbmhhLnJlbW92ZUZyb21QYXJlbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodXJsKSk7Ci1tdWx0aVN0YWdlTG9hZGVyKF8xMWYsXzExZSk7Ci19KTsKLX07Ci1pZighdXJsKXsKLWlmKFhpbmhhLmV4dGVybmFsUGx1Z2luc1tfMTFhXSl7Ci1YaW5oYS5fbG9hZGJhY2soWGluaGEuZXh0ZXJuYWxQbHVnaW5zW18xMWFdWzBdK1hpbmhhLmV4dGVybmFsUGx1Z2luc1tfMTFhXVsxXSxfMTFiLHRoaXMsXzExYSk7Ci19ZWxzZXsKLXZhciBfMTJkPXRoaXM7Ci1tdWx0aVN0YWdlTG9hZGVyKCJzdGFydCIsXzExYSk7Ci19Ci19ZWxzZXsKLVhpbmhhLl9sb2FkYmFjayh1cmwsXzExYix0aGlzLF8xMWEpOwotfQotcmV0dXJuIGZhbHNlOwotfTsKLVhpbmhhLl9wbHVnaW5Mb2FkU3RhdHVzPXt9OwotWGluaGEuZXh0ZXJuYWxQbHVnaW5zPXt9OwotWGluaGEucGx1Z2lucz17fTsKLVhpbmhhLmxvYWRQbHVnaW5zPWZ1bmN0aW9uKF8xMmUsXzEyZix1cmwpewotaWYoIVhpbmhhLmlzU3VwcG9ydGVkQnJvd3Nlcil7Ci1yZXR1cm47Ci19Ci12YXIgbSxpOwotZm9yKGk9MDtpPF8xMmUubGVuZ3RoO2krKyl7Ci1pZih0eXBlb2YgXzEyZVtpXT09Im9iamVjdCIpewotbT1fMTJlW2ldLnVybC5tYXRjaCgvKC4qKShcL1teXC9dKikkLyk7Ci1YaW5oYS5leHRlcm5hbFBsdWdpbnNbXzEyZVtpXS5wbHVnaW5dPVttWzFdLG1bMl1dOwotXzEyZVtpXT1fMTJlW2ldLnBsdWdpbjsKLX0KLX0KLXZhciBfMTMzPXRydWU7Ci12YXIgXzEzND1YaW5oYS5jbG9uZU9iamVjdChfMTJlKTsKLWZvcihpPTA7aTxfMTM0Lmxlbmd0aDtpKyspewotdmFyIHA9XzEzNFtpXTsKLWlmKHA9PSJGdWxsU2NyZWVuIiYmIVhpbmhhLmV4dGVybmFsUGx1Z2lucy5GdWxsU2NyZWVuKXsKLWNvbnRpbnVlOwotfQotaWYodHlwZW9mIFhpbmhhLl9wbHVnaW5Mb2FkU3RhdHVzW3BdPT0idW5kZWZpbmVkIil7Ci1YaW5oYS5sb2FkUGx1Z2luKHAsZnVuY3Rpb24oXzEzNil7Ci1YaW5oYS5zZXRMb2FkaW5nTWVzc2FnZShYaW5oYS5fbGMoIkZpbmlzaGluZyIpKTsKLWlmKHR5cGVvZiBYaW5oYS5nZXRQbHVnaW5Db25zdHJ1Y3RvcihfMTM2KSE9InVuZGVmaW5lZCIpewotWGluaGEuX3BsdWdpbkxvYWRTdGF0dXNbXzEzNl09InJlYWR5IjsKLX1lbHNlewotWGluaGEuX3BsdWdpbkxvYWRTdGF0dXNbXzEzNl09ImZhaWxlZCI7Ci19Ci19LHVybCk7Ci1fMTMzPWZhbHNlOwotfWVsc2V7Ci1pZihYaW5oYS5fcGx1Z2luTG9hZFN0YXR1c1twXT09ImxvYWRpbmciKXsKLV8xMzM9ZmFsc2U7Ci19Ci19Ci19Ci1pZihfMTMzKXsKLXJldHVybiB0cnVlOwotfQotaWYoXzEyZil7Ci1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ci1pZihYaW5oYS5sb2FkUGx1Z2lucyhfMTJlLF8xMmYpKXsKLV8xMmYoKTsKLX0KLX0sNTApOwotfQotcmV0dXJuIF8xMzM7Ci19OwotWGluaGEucmVmcmVzaFBsdWdpbj1mdW5jdGlvbihfMTM3KXsKLWlmKF8xMzcmJnR5cGVvZiBfMTM3Lm9uR2VuZXJhdGU9PSJmdW5jdGlvbiIpewotXzEzNy5vbkdlbmVyYXRlKCk7Ci19Ci1pZihfMTM3JiZ0eXBlb2YgXzEzNy5vbkdlbmVyYXRlT25jZT09ImZ1bmN0aW9uIil7Ci1fMTM3Ll9vbmdlbmVyYXRlT25jZT1fMTM3Lm9uR2VuZXJhdGVPbmNlOwotZGVsZXRlIChfMTM3Lm9uR2VuZXJhdGVPbmNlKTsKLV8xMzcuX29uZ2VuZXJhdGVPbmNlKCk7Ci1kZWxldGUgKF8xMzcuX29uZ2VuZXJhdGVPbmNlKTsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuZmlyZVBsdWdpbkV2ZW50PWZ1bmN0aW9uKF8xMzgpewotdmFyIF8xMzk9W107Ci1mb3IodmFyIGk9MTtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXsKLV8xMzlbaS0xXT1hcmd1bWVudHNbaV07Ci19Ci1mb3IoaSBpbiB0aGlzLnBsdWdpbnMpewotdmFyIF8xM2I9dGhpcy5wbHVnaW5zW2ldLmluc3RhbmNlOwotaWYoXzEzYj09dGhpcy5fYnJvd3NlclNwZWNpZmljUGx1Z2luKXsKLWNvbnRpbnVlOwotfQotaWYoXzEzYiYmdHlwZW9mIF8xM2JbXzEzOF09PSJmdW5jdGlvbiIpewotdmFyIF8xM2M9KGk9PSJFdmVudHMiKT90aGlzOl8xM2I7Ci1pZihfMTNiW18xMzhdLmFwcGx5KF8xM2MsXzEzOSkpewotcmV0dXJuIHRydWU7Ci19Ci19Ci19Ci1fMTNiPXRoaXMuX2Jyb3dzZXJTcGVjaWZpY1BsdWdpbjsKLWlmKF8xM2ImJnR5cGVvZiBfMTNiW18xMzhdPT0iZnVuY3Rpb24iKXsKLWlmKF8xM2JbXzEzOF0uYXBwbHkoXzEzYixfMTM5KSl7Ci1yZXR1cm4gdHJ1ZTsKLX0KLX0KLXJldHVybiBmYWxzZTsKLX07Ci1YaW5oYS5sb2FkU3R5bGU9ZnVuY3Rpb24oXzEzZCxfMTNlLGlkLF8xNDApewotdmFyIHVybD1fZWRpdG9yX3VybHx8IiI7Ci1pZihfMTNlKXsKLXVybD1YaW5oYS5nZXRQbHVnaW5EaXIoXzEzZSkrIi8iOwotfQotdXJsKz1fMTNkOwotaWYoL15cLy8udGVzdChfMTNkKSl7Ci11cmw9XzEzZDsKLX0KLXZhciBoZWFkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07Ci12YXIgbGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7Ci1saW5rLnJlbD0ic3R5bGVzaGVldCI7Ci1saW5rLmhyZWY9dXJsOwotbGluay50eXBlPSJ0ZXh0L2NzcyI7Ci1pZihpZCl7Ci1saW5rLmlkPWlkOwotfQotaWYoXzE0MCYmaGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpWzBdKXsKLWhlYWQuaW5zZXJ0QmVmb3JlKGxpbmssaGVhZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibGluayIpWzBdKTsKLX1lbHNlewotaGVhZC5hcHBlbmRDaGlsZChsaW5rKTsKLX0KLX07Ci1YaW5oYS5sb2FkU2NyaXB0PWZ1bmN0aW9uKF8xNDQsXzE0NSxfMTQ2KXsKLXZhciB1cmw9X2VkaXRvcl91cmx8fCIiOwotaWYoXzE0NSl7Ci11cmw9WGluaGEuZ2V0UGx1Z2luRGlyKF8xNDUpKyIvIjsKLX0KLXVybCs9XzE0NDsKLWlmKC9eXC8vLnRlc3QoXzE0NCkpewotdXJsPV8xNDQ7Ci19Ci1YaW5oYS5fbG9hZGJhY2sodXJsLF8xNDYpOwotfTsKLVhpbmhhLmluY2x1ZGVBc3NldHM9ZnVuY3Rpb24oKXsKLXZhciBfMTQ4PXtwZW5kaW5nQXNzZXRzOltdLGxvYWRlclJ1bm5pbmc6ZmFsc2UsbG9hZGVkU2NyaXB0czpbXX07Ci1fMTQ4LmNhbGxiYWNrcz1bXTsKLV8xNDgubG9hZE5leHQ9ZnVuY3Rpb24oKXsKLXZhciBzZWxmPXRoaXM7Ci10aGlzLmxvYWRlclJ1bm5pbmc9dHJ1ZTsKLWlmKHRoaXMucGVuZGluZ0Fzc2V0cy5sZW5ndGgpewotdmFyIG54dD10aGlzLnBlbmRpbmdBc3NldHNbMF07Ci10aGlzLnBlbmRpbmdBc3NldHMuc3BsaWNlKDAsMSk7Ci1zd2l0Y2gobnh0LnR5cGUpewotY2FzZSAidGV4dC9jc3MiOgotWGluaGEubG9hZFN0eWxlKG54dC51cmwsbnh0LnBsdWdpbik7Ci1yZXR1cm4gdGhpcy5sb2FkTmV4dCgpOwotY2FzZSAidGV4dC9qYXZhc2NyaXB0IjoKLVhpbmhhLmxvYWRTY3JpcHQobnh0LnVybCxueHQucGx1Z2luLGZ1bmN0aW9uKCl7Ci1zZWxmLmxvYWROZXh0KCk7Ci19KTsKLX0KLX1lbHNlewotdGhpcy5sb2FkZXJSdW5uaW5nPWZhbHNlOwotdGhpcy5ydW5DYWxsYmFjaygpOwotfQotfTsKLV8xNDgubG9hZFNjcmlwdD1mdW5jdGlvbih1cmwsXzE0Yyl7Ci12YXIgc2VsZj10aGlzOwotdGhpcy5wZW5kaW5nQXNzZXRzLnB1c2goeyJ0eXBlIjoidGV4dC9qYXZhc2NyaXB0IiwidXJsIjp1cmwsInBsdWdpbiI6XzE0Y30pOwotaWYoIXRoaXMubG9hZGVyUnVubmluZyl7Ci10aGlzLmxvYWROZXh0KCk7Ci19Ci1yZXR1cm4gdGhpczsKLX07Ci1fMTQ4LmxvYWRTY3JpcHRPbmNlPWZ1bmN0aW9uKHVybCxfMTRmKXsKLWZvcih2YXIgaT0wO2k8dGhpcy5sb2FkZWRTY3JpcHRzLmxlbmd0aDtpKyspewotaWYodGhpcy5sb2FkZWRTY3JpcHRzW2ldLnVybD09dXJsJiZ0aGlzLmxvYWRlZFNjcmlwdHNbaV0ucGx1Z2luPT1fMTRmKXsKLXJldHVybiB0aGlzOwotfQotfQotcmV0dXJuIHRoaXMubG9hZFNjcmlwdCh1cmwsXzE0Zik7Ci19OwotXzE0OC5sb2FkU3R5bGU9ZnVuY3Rpb24odXJsLF8xNTIpewotdmFyIHNlbGY9dGhpczsKLXRoaXMucGVuZGluZ0Fzc2V0cy5wdXNoKHsidHlwZSI6InRleHQvY3NzIiwidXJsIjp1cmwsInBsdWdpbiI6XzE1Mn0pOwotaWYoIXRoaXMubG9hZGVyUnVubmluZyl7Ci10aGlzLmxvYWROZXh0KCk7Ci19Ci1yZXR1cm4gdGhpczsKLX07Ci1fMTQ4LndoZW5SZWFkeT1mdW5jdGlvbihfMTU0KXsKLXRoaXMuY2FsbGJhY2tzLnB1c2goXzE1NCk7Ci1pZighdGhpcy5sb2FkZXJSdW5uaW5nKXsKLXRoaXMubG9hZE5leHQoKTsKLX0KLXJldHVybiB0aGlzOwotfTsKLV8xNDgucnVuQ2FsbGJhY2s9ZnVuY3Rpb24oKXsKLXdoaWxlKHRoaXMuY2FsbGJhY2tzLmxlbmd0aCl7Ci12YXIgXzE1NT10aGlzLmNhbGxiYWNrcy5zcGxpY2UoMCwxKTsKLV8xNTVbMF0oKTsKLV8xNTU9bnVsbDsKLX0KLXJldHVybiB0aGlzOwotfTsKLWZvcih2YXIgaT0wO2k8YXJndW1lbnRzLmxlbmd0aDtpKyspewotaWYodHlwZW9mIGFyZ3VtZW50c1tpXT09InN0cmluZyIpewotaWYoYXJndW1lbnRzW2ldLm1hdGNoKC9cLmNzcyQvaSkpewotXzE0OC5sb2FkU3R5bGUoYXJndW1lbnRzW2ldKTsKLX1lbHNlewotXzE0OC5sb2FkU2NyaXB0KGFyZ3VtZW50c1tpXSk7Ci19Ci19ZWxzZXsKLWlmKGFyZ3VtZW50c1tpXS50eXBlKXsKLWlmKGFyZ3VtZW50c1tpXS50eXBlLm1hdGNoKC90ZXh0XC9jc3MvaSkpewotXzE0OC5sb2FkU3R5bGUoYXJndW1lbnRzW2ldLnVybCxhcmd1bWVudHNbaV0ucGx1Z2luKTsKLX1lbHNlewotaWYoYXJndW1lbnRzW2ldLnR5cGUubWF0Y2goL3RleHRcL2phdmFzY3JpcHQvaSkpewotXzE0OC5sb2FkU2NyaXB0KGFyZ3VtZW50c1tpXS51cmwsYXJndW1lbnRzW2ldLnBsdWdpbik7Ci19Ci19Ci19ZWxzZXsKLWlmKGFyZ3VtZW50c1tpXS5sZW5ndGg+PTEpewotaWYoYXJndW1lbnRzW2ldWzBdLm1hdGNoKC9cLmNzcyQvaSkpewotXzE0OC5sb2FkU3R5bGUoYXJndW1lbnRzW2ldWzBdLGFyZ3VtZW50c1tpXVsxXSk7Ci19ZWxzZXsKLV8xNDgubG9hZFNjcmlwdChhcmd1bWVudHNbaV1bMF0sYXJndW1lbnRzW2ldWzFdKTsKLX0KLX0KLX0KLX0KLX0KLXJldHVybiBfMTQ4OwotfTsKLVhpbmhhLnByb3RvdHlwZS5kZWJ1Z1RyZWU9ZnVuY3Rpb24oKXsKLXZhciB0YT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOwotdGEuc3R5bGUud2lkdGg9IjEwMCUiOwotdGEuc3R5bGUuaGVpZ2h0PSIyMGVtIjsKLXRhLnZhbHVlPSIiOwotZnVuY3Rpb24gZGVidWcoXzE1OCxzdHIpewotZm9yKDstLV8xNTg+PTA7KXsKLXRhLnZhbHVlKz0iICI7Ci19Ci10YS52YWx1ZSs9c3RyKyJcbiI7Ci19OwotZnVuY3Rpb24gX2R0KHJvb3QsXzE1Yil7Ci12YXIgdGFnPXJvb3QudGFnTmFtZS50b0xvd2VyQ2FzZSgpLGk7Ci12YXIgbnM9WGluaGEuaXNfaWU/cm9vdC5zY29wZU5hbWU6cm9vdC5wcmVmaXg7Ci1kZWJ1ZyhfMTViLCItICIrdGFnKyIgWyIrbnMrIl0iKTsKLWZvcihpPXJvb3QuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZyl7Ci1pZihpLm5vZGVUeXBlPT0xKXsKLV9kdChpLF8xNWIrMik7Ci19Ci19Ci19OwotX2R0KHRoaXMuX2RvYy5ib2R5LDApOwotZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0YSk7Ci19OwotWGluaGEuZ2V0SW5uZXJUZXh0PWZ1bmN0aW9uKGVsKXsKLXZhciB0eHQ9IiIsaTsKLWZvcihpPWVsLmZpcnN0Q2hpbGQ7aTtpPWkubmV4dFNpYmxpbmcpewotaWYoaS5ub2RlVHlwZT09Myl7Ci10eHQrPWkuZGF0YTsKLX1lbHNlewotaWYoaS5ub2RlVHlwZT09MSl7Ci10eHQrPVhpbmhhLmdldElubmVyVGV4dChpKTsKLX0KLX0KLX0KLXJldHVybiB0eHQ7Ci19OwotWGluaGEucHJvdG90eXBlLl93b3JkQ2xlYW49ZnVuY3Rpb24oKXsKLXZhciBfMTYyPXRoaXM7Ci12YXIgXzE2Mz17ZW1wdHlfdGFnczowLGNvbmRfY29tbTowLG1zb19lbG10czowLG1zb19jbGFzczowLG1zb19zdHlsZTowLG1zb194bWxlbDowLG9yaWdfbGVuOnRoaXMuX2RvYy5ib2R5LmlubmVySFRNTC5sZW5ndGgsVDpuZXcgRGF0ZSgpLmdldFRpbWUoKX07Ci12YXIgXzE2ND17ZW1wdHlfdGFnczoiRW1wdHkgdGFncyByZW1vdmVkOiAiLGNvbmRfY29tbToiQ29uZGl0aW9uYWwgY29tbWVudHMgcmVtb3ZlZCIsbXNvX2VsbXRzOiJNU08gaW52YWxpZCBlbGVtZW50cyByZW1vdmVkIixtc29fY2xhc3M6Ik1TTyBjbGFzcyBuYW1lcyByZW1vdmVkOiAiLG1zb19zdHlsZToiTVNPIGlubGluZSBzdHlsZSByZW1vdmVkOiAiLG1zb194bWxlbDoiTVNPIFhNTCBlbGVtZW50cyBzdHJpcHBlZDogIn07Ci1mdW5jdGlvbiBzaG93U3RhdHMoKXsKLXZhciB0eHQ9IlhpbmhhIHdvcmQgY2xlYW5lciBzdGF0czogXG5cbiI7Ci1mb3IodmFyIGkgaW4gXzE2Myl7Ci1pZihfMTY0W2ldKXsKLXR4dCs9XzE2NFtpXStfMTYzW2ldKyJcbiI7Ci19Ci19Ci10eHQrPSJcbkluaXRpYWwgZG9jdW1lbnQgbGVuZ3RoOiAiK18xNjMub3JpZ19sZW4rIlxuIjsKLXR4dCs9IkZpbmFsIGRvY3VtZW50IGxlbmd0aDogIitfMTYyLl9kb2MuYm9keS5pbm5lckhUTUwubGVuZ3RoKyJcbiI7Ci10eHQrPSJDbGVhbi11cCB0b29rICIrKChuZXcgRGF0ZSgpLmdldFRpbWUoKS1fMTYzLlQpLzEwMDApKyIgc2Vjb25kcyI7Ci1hbGVydCh0eHQpOwotfTsKLWZ1bmN0aW9uIGNsZWFyQ2xhc3Mobm9kZSl7Ci12YXIgbmV3Yz1ub2RlLmNsYXNzTmFtZS5yZXBsYWNlKC8oXnxccyltc28uKj8oXHN8JCkvaWcsIiAiKTsKLWlmKG5ld2MhPW5vZGUuY2xhc3NOYW1lKXsKLW5vZGUuY2xhc3NOYW1lPW5ld2M7Ci1pZighL1xTLy50ZXN0KG5vZGUuY2xhc3NOYW1lKSl7Ci1ub2RlLnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3NOYW1lIik7Ci0rK18xNjMubXNvX2NsYXNzOwotfQotfQotfTsKLWZ1bmN0aW9uIGNsZWFyU3R5bGUobm9kZSl7Ci12YXIgXzE2YT1ub2RlLnN0eWxlLmNzc1RleHQuc3BsaXQoL1xzKjtccyovKTsKLWZvcih2YXIgaT1fMTZhLmxlbmd0aDstLWk+PTA7KXsKLWlmKC9ebXNvfF50YWItc3RvcHMvaS50ZXN0KF8xNmFbaV0pfHwvXm1hcmdpblxzKjpccyowLi5ccyswLi5ccyswLi4vaS50ZXN0KF8xNmFbaV0pKXsKLSsrXzE2My5tc29fc3R5bGU7Ci1fMTZhLnNwbGljZShpLDEpOwotfQotfQotbm9kZS5zdHlsZS5jc3NUZXh0PV8xNmEuam9pbigiOyAiKTsKLX07Ci1mdW5jdGlvbiByZW1vdmVFbGVtZW50cyhlbCl7Ci1pZigoImxpbmsiPT1lbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJihlbC5hdHRyaWJ1dGVzJiYvRmlsZS1MaXN0fEVkaXQtVGltZS1EYXRhfHRoZW1lRGF0YXxjb2xvclNjaGVtZU1hcHBpbmcvLnRlc3QoZWwuYXR0cmlidXRlcy5yZWwubm9kZVZhbHVlKSkpfHwvXihzdHlsZXxtZXRhKSQvaS50ZXN0KGVsLnRhZ05hbWUpKXsKLVhpbmhhLnJlbW92ZUZyb21QYXJlbnQoZWwpOwotKytfMTYzLm1zb19lbG10czsKLXJldHVybiB0cnVlOwotfQotcmV0dXJuIGZhbHNlOwotfTsKLWZ1bmN0aW9uIGNoZWNrRW1wdHkoZWwpewotaWYoL14oYXxzcGFufGJ8c3Ryb25nfGl8ZW18Zm9udHxkaXZ8cCkkL2kudGVzdChlbC50YWdOYW1lKSYmIWVsLmZpcnN0Q2hpbGQpewotWGluaGEucmVtb3ZlRnJvbVBhcmVudChlbCk7Ci0rK18xNjMuZW1wdHlfdGFnczsKLXJldHVybiB0cnVlOwotfQotcmV0dXJuIGZhbHNlOwotfTsKLWZ1bmN0aW9uIHBhcnNlVHJlZShyb290KXsKLWNsZWFyQ2xhc3Mocm9vdCk7Ci1jbGVhclN0eWxlKHJvb3QpOwotdmFyIG5leHQ7Ci1mb3IodmFyIGk9cm9vdC5maXJzdENoaWxkO2k7aT1uZXh0KXsKLW5leHQ9aS5uZXh0U2libGluZzsKLWlmKGkubm9kZVR5cGU9PTEmJnBhcnNlVHJlZShpKSl7Ci1pZigoWGluaGEuaXNfaWUmJnJvb3Quc2NvcGVOYW1lIT0iSFRNTCIpfHwoIVhpbmhhLmlzX2llJiYvOi8udGVzdChpLnRhZ05hbWUpKSl7Ci1mb3IodmFyIF8xNzE9aS5jaGlsZE5vZGVzJiZpLmNoaWxkTm9kZXMubGVuZ3RoLTE7aS5jaGlsZE5vZGVzJiZpLmNoaWxkTm9kZXMubGVuZ3RoJiZpLmNoaWxkTm9kZXNbXzE3MV07LS1fMTcxKXsKLWlmKGkubmV4dFNpYmxpbmcpewotaS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpLmNoaWxkTm9kZXNbXzE3MV0saS5uZXh0U2libGluZyk7Ci19ZWxzZXsKLWkucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChpLmNoaWxkTm9kZXNbXzE3MV0pOwotfQotfQotWGluaGEucmVtb3ZlRnJvbVBhcmVudChpKTsKLWNvbnRpbnVlOwotfQotaWYoY2hlY2tFbXB0eShpKSl7Ci1jb250aW51ZTsKLX0KLWlmKHJlbW92ZUVsZW1lbnRzKGkpKXsKLWNvbnRpbnVlOwotfQotfWVsc2V7Ci1pZihpLm5vZGVUeXBlPT04KXsKLWlmKC8oXHMqXFtccyppZlxzKigoW2dsXXRlP3whKVxzKik/KElFfG1zbylccyooXGQrKFwuXGQrKT9ccyopP1xdPikvLnRlc3QoaS5ub2RlVmFsdWUpKXsKLVhpbmhhLnJlbW92ZUZyb21QYXJlbnQoaSk7Ci0rK18xNjMuY29uZF9jb21tOwotfQotfQotfQotfQotcmV0dXJuIHRydWU7Ci19OwotcGFyc2VUcmVlKHRoaXMuX2RvYy5ib2R5KTsKLXRoaXMudXBkYXRlVG9vbGJhcigpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5fY2xlYXJGb250cz1mdW5jdGlvbigpewotdmFyIEQ9dGhpcy5nZXRJbm5lckhUTUwoKTsKLWlmKGNvbmZpcm0oWGluaGEuX2xjKCJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iKSkpewotRD1ELnJlcGxhY2UoL2ZhY2U9IlteIl0qIi9naSwiIik7Ci1EPUQucmVwbGFjZSgvZm9udC1mYW1pbHk6W147fSInXSs7Py9naSwiIik7Ci19Ci1pZihjb25maXJtKFhpbmhhLl9sYygiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iKSkpewotRD1ELnJlcGxhY2UoL3NpemU9IlteIl0qIi9naSwiIik7Ci1EPUQucmVwbGFjZSgvZm9udC1zaXplOlteO30iJ10rOz8vZ2ksIiIpOwotfQotaWYoY29uZmlybShYaW5oYS5fbGMoIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iKSkpewotRD1ELnJlcGxhY2UoL2NvbG9yPSJbXiJdKiIvZ2ksIiIpOwotRD1ELnJlcGxhY2UoLyhbXlwtXSljb2xvcjpbXjt9IiddKzs/L2dpLCIkMSIpOwotfQotRD1ELnJlcGxhY2UoLyhzdHlsZXxjbGFzcyk9IlxzKiIvZ2ksIiIpOwotRD1ELnJlcGxhY2UoLzwoZm9udHxzcGFuKVxzKj4vZ2ksIiIpOwotdGhpcy5zZXRIVE1MKEQpOwotdGhpcy51cGRhdGVUb29sYmFyKCk7Ci19OwotWGluaGEucHJvdG90eXBlLl9zcGxpdEJsb2NrPWZ1bmN0aW9uKCl7Ci10aGlzLl9kb2MuZXhlY0NvbW1hbmQoImZvcm1hdGJsb2NrIixmYWxzZSwiZGl2Iik7Ci19OwotWGluaGEucHJvdG90eXBlLmZvcmNlUmVkcmF3PWZ1bmN0aW9uKCl7Ci10aGlzLl9kb2MuYm9keS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iOwotdGhpcy5fZG9jLmJvZHkuc3R5bGUudmlzaWJpbGl0eT0iIjsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZm9jdXNFZGl0b3I9ZnVuY3Rpb24oKXsKLXN3aXRjaCh0aGlzLl9lZGl0TW9kZSl7Ci1jYXNlICJ3eXNpd3lnIjoKLXRyeXsKLWlmKFhpbmhhLl9zb21lRWRpdG9ySGFzQmVlbkFjdGl2YXRlZCl7Ci10aGlzLmFjdGl2YXRlRWRpdG9yKCk7Ci10aGlzLl9pZnJhbWUuY29udGVudFdpbmRvdy5mb2N1cygpOwotfQotfQotY2F0Y2goZXgpewotfQotYnJlYWs7Ci1jYXNlICJ0ZXh0bW9kZSI6Ci10cnl7Ci10aGlzLl90ZXh0QXJlYS5mb2N1cygpOwotfQotY2F0Y2goZSl7Ci19Ci1icmVhazsKLWRlZmF1bHQ6Ci1hbGVydCgiRVJST1I6IG1vZGUgIit0aGlzLl9lZGl0TW9kZSsiIGlzIG5vdCBkZWZpbmVkIik7Ci19Ci1yZXR1cm4gdGhpcy5fZG9jOwotfTsKLVhpbmhhLnByb3RvdHlwZS5fdW5kb1Rha2VTbmFwc2hvdD1mdW5jdGlvbigpewotKyt0aGlzLl91bmRvUG9zOwotaWYodGhpcy5fdW5kb1Bvcz49dGhpcy5jb25maWcudW5kb1N0ZXBzKXsKLXRoaXMuX3VuZG9RdWV1ZS5zaGlmdCgpOwotLS10aGlzLl91bmRvUG9zOwotfQotdmFyIHRha2U9dHJ1ZTsKLXZhciB0eHQ9dGhpcy5nZXRJbm5lckhUTUwoKTsKLWlmKHRoaXMuX3VuZG9Qb3M+MCl7Ci10YWtlPSh0aGlzLl91bmRvUXVldWVbdGhpcy5fdW5kb1Bvcy0xXSE9dHh0KTsKLX0KLWlmKHRha2UpewotdGhpcy5fdW5kb1F1ZXVlW3RoaXMuX3VuZG9Qb3NdPXR4dDsKLX1lbHNlewotdGhpcy5fdW5kb1Bvcy0tOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKCl7Ci1pZih0aGlzLl91bmRvUG9zPjApewotdmFyIHR4dD10aGlzLl91bmRvUXVldWVbLS10aGlzLl91bmRvUG9zXTsKLWlmKHR4dCl7Ci10aGlzLnNldEhUTUwodHh0KTsKLX1lbHNlewotKyt0aGlzLl91bmRvUG9zOwotfQotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKCl7Ci1pZih0aGlzLl91bmRvUG9zPHRoaXMuX3VuZG9RdWV1ZS5sZW5ndGgtMSl7Ci12YXIgdHh0PXRoaXMuX3VuZG9RdWV1ZVsrK3RoaXMuX3VuZG9Qb3NdOwotaWYodHh0KXsKLXRoaXMuc2V0SFRNTCh0eHQpOwotfWVsc2V7Ci0tLXRoaXMuX3VuZG9Qb3M7Ci19Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmRpc2FibGVUb29sYmFyPWZ1bmN0aW9uKF8xNzcpewotaWYodGhpcy5fdGltZXJUb29sYmFyKXsKLWNsZWFyVGltZW91dCh0aGlzLl90aW1lclRvb2xiYXIpOwotfQotaWYodHlwZW9mIF8xNzc9PSJ1bmRlZmluZWQiKXsKLV8xNzc9W107Ci19ZWxzZXsKLWlmKHR5cGVvZiBfMTc3IT0ib2JqZWN0Iil7Ci1fMTc3PVtfMTc3XTsKLX0KLX0KLWZvcih2YXIgaSBpbiB0aGlzLl90b29sYmFyT2JqZWN0cyl7Ci12YXIgYnRuPXRoaXMuX3Rvb2xiYXJPYmplY3RzW2ldOwotaWYoXzE3Ny5jb250YWlucyhpKSl7Ci1jb250aW51ZTsKLX0KLWlmKHR5cGVvZiBidG4uc3RhdGUhPSJmdW5jdGlvbiIpewotY29udGludWU7Ci19Ci1idG4uc3RhdGUoImVuYWJsZWQiLGZhbHNlKTsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuZW5hYmxlVG9vbGJhcj1mdW5jdGlvbigpewotdGhpcy51cGRhdGVUb29sYmFyKCk7Ci19OwotWGluaGEucHJvdG90eXBlLnVwZGF0ZVRvb2xiYXI9ZnVuY3Rpb24oXzE3YSl7Ci1pZih0aGlzLnN1c3BlbmRVcGRhdGVUb29sYmFyKXsKLXJldHVybjsKLX0KLXZhciBkb2M9dGhpcy5fZG9jOwotdmFyIHRleHQ9KHRoaXMuX2VkaXRNb2RlPT0idGV4dG1vZGUiKTsKLXZhciBfMTdkPW51bGw7Ci1pZighdGV4dCl7Ci1fMTdkPXRoaXMuZ2V0QWxsQW5jZXN0b3JzKCk7Ci1pZih0aGlzLmNvbmZpZy5zdGF0dXNCYXImJiFfMTdhKXsKLXdoaWxlKHRoaXMuX3N0YXR1c0Jhckl0ZW1zLmxlbmd0aCl7Ci12YXIgaXRlbT10aGlzLl9zdGF0dXNCYXJJdGVtcy5wb3AoKTsKLWl0ZW0uZWw9bnVsbDsKLWl0ZW0uZWRpdG9yPW51bGw7Ci1pdGVtLm9uY2xpY2s9bnVsbDsKLWl0ZW0ub25jb250ZXh0bWVudT1udWxsOwotaXRlbS5feGluaGFfZG9tMEV2ZW50cy5jbGljaz1udWxsOwotaXRlbS5feGluaGFfZG9tMEV2ZW50cy5jb250ZXh0bWVudT1udWxsOwotaXRlbT1udWxsOwotfQotdGhpcy5fc3RhdHVzQmFyVHJlZS5pbm5lckhUTUw9IiAiOwotdGhpcy5fc3RhdHVzQmFyVHJlZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShYaW5oYS5fbGMoIlBhdGgiKSsiOiAiKSk7Ci1mb3IodmFyIGk9XzE3ZC5sZW5ndGg7LS1pPj0wOyl7Ci12YXIgZWw9XzE3ZFtpXTsKLWlmKCFlbCl7Ci1jb250aW51ZTsKLX0KLXZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLWEuaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApOyI7Ci1hLmVsPWVsOwotYS5lZGl0b3I9dGhpczsKLXRoaXMuX3N0YXR1c0Jhckl0ZW1zLnB1c2goYSk7Ci1YaW5oYS5hZGREb20wRXZlbnQoYSwiY2xpY2siLGZ1bmN0aW9uKCl7Ci10aGlzLmJsdXIoKTsKLXRoaXMuZWRpdG9yLnNlbGVjdE5vZGVDb250ZW50cyh0aGlzLmVsKTsKLXRoaXMuZWRpdG9yLnVwZGF0ZVRvb2xiYXIodHJ1ZSk7Ci1yZXR1cm4gZmFsc2U7Ci19KTsKLVhpbmhhLmFkZERvbTBFdmVudChhLCJjb250ZXh0bWVudSIsZnVuY3Rpb24oKXsKLXRoaXMuYmx1cigpOwotdmFyIGluZm89IklubGluZSBzdHlsZTpcblxuIjsKLWluZm8rPXRoaXMuZWwuc3R5bGUuY3NzVGV4dC5zcGxpdCgvO1xzKi8pLmpvaW4oIjtcbiIpOwotYWxlcnQoaW5mbyk7Ci1yZXR1cm4gZmFsc2U7Ci19KTsKLXZhciB0eHQ9ZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpOwotc3dpdGNoKHR4dCl7Ci1jYXNlICJiIjoKLXR4dD0ic3Ryb25nIjsKLWJyZWFrOwotY2FzZSAiaSI6Ci10eHQ9ImVtIjsKLWJyZWFrOwotY2FzZSAic3RyaWtlIjoKLXR4dD0iZGVsIjsKLWJyZWFrOwotfQotaWYodHlwZW9mIGVsLnN0eWxlIT0idW5kZWZpbmVkIil7Ci1hLnRpdGxlPWVsLnN0eWxlLmNzc1RleHQ7Ci19Ci1pZihlbC5pZCl7Ci10eHQrPSIjIitlbC5pZDsKLX0KLWlmKGVsLmNsYXNzTmFtZSl7Ci10eHQrPSIuIitlbC5jbGFzc05hbWU7Ci19Ci1hLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHR4dCkpOwotdGhpcy5fc3RhdHVzQmFyVHJlZS5hcHBlbmRDaGlsZChhKTsKLWlmKGkhPT0wKXsKLXRoaXMuX3N0YXR1c0JhclRyZWUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nLmZyb21DaGFyQ29kZSgxODcpKSk7Ci19Ci1YaW5oYS5mcmVlTGF0ZXIoYSk7Ci19Ci19Ci19Ci1mb3IodmFyIGNtZCBpbiB0aGlzLl90b29sYmFyT2JqZWN0cyl7Ci12YXIgYnRuPXRoaXMuX3Rvb2xiYXJPYmplY3RzW2NtZF07Ci12YXIgXzE4Nj10cnVlOwotaWYodHlwZW9mIGJ0bi5zdGF0ZSE9ImZ1bmN0aW9uIil7Ci1jb250aW51ZTsKLX0KLWlmKGJ0bi5jb250ZXh0JiYhdGV4dCl7Ci1fMTg2PWZhbHNlOwotdmFyIF8xODc9YnRuLmNvbnRleHQ7Ci12YXIgXzE4OD1bXTsKLWlmKC8oLiopXFsoLio/KVxdLy50ZXN0KF8xODcpKXsKLV8xODc9UmVnRXhwLiQxOwotXzE4OD1SZWdFeHAuJDIuc3BsaXQoIiwiKTsKLX0KLV8xODc9XzE4Ny50b0xvd2VyQ2FzZSgpOwotdmFyIF8xODk9KF8xODc9PSIqIik7Ci1mb3IodmFyIGs9MDtrPF8xN2QubGVuZ3RoOysrayl7Ci1pZighXzE3ZFtrXSl7Ci1jb250aW51ZTsKLX0KLWlmKF8xODl8fChfMTdkW2tdLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09XzE4NykpewotXzE4Nj10cnVlOwotdmFyIF8xOGI9bnVsbDsKLXZhciBhdHQ9bnVsbDsKLXZhciBjb21wPW51bGw7Ci12YXIgXzE4ZT1udWxsOwotZm9yKHZhciBrYT0wO2thPF8xODgubGVuZ3RoOysra2EpewotXzE4Yj1fMTg4W2thXS5tYXRjaCgvKC4qKSg9PXwhPXw9PT18IT09fD58Pj18PHw8PSkoLiopLyk7Ci1hdHQ9XzE4YlsxXTsKLWNvbXA9XzE4YlsyXTsKLV8xOGU9XzE4YlszXTsKLWlmKCFldmFsKF8xN2Rba11bYXR0XStjb21wK18xOGUpKXsKLV8xODY9ZmFsc2U7Ci1icmVhazsKLX0KLX0KLWlmKF8xODYpewotYnJlYWs7Ci19Ci19Ci19Ci19Ci1idG4uc3RhdGUoImVuYWJsZWQiLCghdGV4dHx8YnRuLnRleHQpJiZfMTg2KTsKLWlmKHR5cGVvZiBjbWQ9PSJmdW5jdGlvbiIpewotY29udGludWU7Ci19Ci12YXIgXzE5MD10aGlzLmNvbmZpZy5jdXN0b21TZWxlY3RzW2NtZF07Ci1pZigoIXRleHR8fGJ0bi50ZXh0KSYmKHR5cGVvZiBfMTkwIT0idW5kZWZpbmVkIikpewotXzE5MC5yZWZyZXNoKHRoaXMpOwotY29udGludWU7Ci19Ci1zd2l0Y2goY21kKXsKLWNhc2UgImZvbnRuYW1lIjoKLWNhc2UgImZvbnRzaXplIjoKLWlmKCF0ZXh0KXsKLXRyeXsKLXZhciBfMTkxPSgiIitkb2MucXVlcnlDb21tYW5kVmFsdWUoY21kKSkudG9Mb3dlckNhc2UoKTsKLWlmKCFfMTkxKXsKLWJ0bi5lbGVtZW50LnNlbGVjdGVkSW5kZXg9MDsKLWJyZWFrOwotfQotdmFyIF8xOTI9dGhpcy5jb25maWdbY21kXTsKLXZhciBfMTkzPTA7Ci1mb3IodmFyIGogaW4gXzE5Mil7Ci1pZigoai50b0xvd2VyQ2FzZSgpPT1fMTkxKXx8KF8xOTJbal0uc3Vic3RyKDAsXzE5MS5sZW5ndGgpLnRvTG93ZXJDYXNlKCk9PV8xOTEpKXsKLWJ0bi5lbGVtZW50LnNlbGVjdGVkSW5kZXg9XzE5MzsKLXRocm93ICJvayI7Ci19Ci0rK18xOTM7Ci19Ci1idG4uZWxlbWVudC5zZWxlY3RlZEluZGV4PTA7Ci19Ci1jYXRjaChleCl7Ci19Ci19Ci1icmVhazsKLWNhc2UgImZvcm1hdGJsb2NrIjoKLXZhciBfMTk1PVtdOwotZm9yKHZhciBfMTk2IGluIHRoaXMuY29uZmlnLmZvcm1hdGJsb2NrKXsKLWlmKHR5cGVvZiB0aGlzLmNvbmZpZy5mb3JtYXRibG9ja1tfMTk2XT09InN0cmluZyIpewotXzE5NVtfMTk1Lmxlbmd0aF09dGhpcy5jb25maWcuZm9ybWF0YmxvY2tbXzE5Nl07Ci19Ci19Ci12YXIgXzE5Nz10aGlzLl9nZXRGaXJzdEFuY2VzdG9yKHRoaXMuZ2V0U2VsZWN0aW9uKCksXzE5NSk7Ci1pZihfMTk3KXsKLWZvcih2YXIgeD0wO3g8XzE5NS5sZW5ndGg7eCsrKXsKLWlmKF8xOTVbeF0udG9Mb3dlckNhc2UoKT09XzE5Ny50YWdOYW1lLnRvTG93ZXJDYXNlKCkpewotYnRuLmVsZW1lbnQuc2VsZWN0ZWRJbmRleD14OwotfQotfQotfWVsc2V7Ci1idG4uZWxlbWVudC5zZWxlY3RlZEluZGV4PTA7Ci19Ci1icmVhazsKLWNhc2UgInRleHRpbmRpY2F0b3IiOgotaWYoIXRleHQpewotdHJ5ewotdmFyIF8xOTk9YnRuLmVsZW1lbnQuc3R5bGU7Ci1fMTk5LmJhY2tncm91bmRDb2xvcj1YaW5oYS5fbWFrZUNvbG9yKGRvYy5xdWVyeUNvbW1hbmRWYWx1ZShYaW5oYS5pc19pZT8iYmFja2NvbG9yIjoiaGlsaXRlY29sb3IiKSk7Ci1pZigvdHJhbnNwYXJlbnQvaS50ZXN0KF8xOTkuYmFja2dyb3VuZENvbG9yKSl7Ci1fMTk5LmJhY2tncm91bmRDb2xvcj1YaW5oYS5fbWFrZUNvbG9yKGRvYy5xdWVyeUNvbW1hbmRWYWx1ZSgiYmFja2NvbG9yIikpOwotfQotXzE5OS5jb2xvcj1YaW5oYS5fbWFrZUNvbG9yKGRvYy5xdWVyeUNvbW1hbmRWYWx1ZSgiZm9yZWNvbG9yIikpOwotXzE5OS5mb250RmFtaWx5PWRvYy5xdWVyeUNvbW1hbmRWYWx1ZSgiZm9udG5hbWUiKTsKLV8xOTkuZm9udFdlaWdodD1kb2MucXVlcnlDb21tYW5kU3RhdGUoImJvbGQiKT8iYm9sZCI6Im5vcm1hbCI7Ci1fMTk5LmZvbnRTdHlsZT1kb2MucXVlcnlDb21tYW5kU3RhdGUoIml0YWxpYyIpPyJpdGFsaWMiOiJub3JtYWwiOwotfQotY2F0Y2goZXgpewotfQotfQotYnJlYWs7Ci1jYXNlICJodG1sbW9kZSI6Ci1idG4uc3RhdGUoImFjdGl2ZSIsdGV4dCk7Ci1icmVhazsKLWNhc2UgImxlZnR0b3JpZ2h0IjoKLWNhc2UgInJpZ2h0dG9sZWZ0IjoKLXZhciBfMTlhPXRoaXMuZ2V0UGFyZW50RWxlbWVudCgpOwotd2hpbGUoXzE5YSYmIVhpbmhhLmlzQmxvY2tFbGVtZW50KF8xOWEpKXsKLV8xOWE9XzE5YS5wYXJlbnROb2RlOwotfQotaWYoXzE5YSl7Ci1idG4uc3RhdGUoImFjdGl2ZSIsKF8xOWEuc3R5bGUuZGlyZWN0aW9uPT0oKGNtZD09InJpZ2h0dG9sZWZ0Iik/InJ0bCI6Imx0ciIpKSk7Ci19Ci1icmVhazsKLWRlZmF1bHQ6Ci1jbWQ9Y21kLnJlcGxhY2UoLyh1bik/b3JkZXJlZGxpc3QvaSwiaW5zZXJ0JDFvcmRlcmVkbGlzdCIpOwotdHJ5ewotYnRuLnN0YXRlKCJhY3RpdmUiLCghdGV4dCYmZG9jLnF1ZXJ5Q29tbWFuZFN0YXRlKGNtZCkpKTsKLX0KLWNhdGNoKGV4KXsKLX0KLWJyZWFrOwotfQotfQotaWYodGhpcy5fY3VzdG9tVW5kbyYmIXRoaXMuX3RpbWVyVW5kbyl7Ci10aGlzLl91bmRvVGFrZVNuYXBzaG90KCk7Ci12YXIgXzE5Yj10aGlzOwotdGhpcy5fdGltZXJVbmRvPXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKLV8xOWIuX3RpbWVyVW5kbz1udWxsOwotfSx0aGlzLmNvbmZpZy51bmRvVGltZW91dCk7Ci19Ci10aGlzLmZpcmVQbHVnaW5FdmVudCgib25VcGRhdGVUb29sYmFyIik7Ci19OwotWGluaGEuZ2V0RWRpdG9yPWZ1bmN0aW9uKHJlZil7Ci1mb3IodmFyIGk9X194aW5oYXMubGVuZ3RoO2ktLTspewotdmFyIF8xOWU9X194aW5oYXNbaV07Ci1pZihfMTllJiYoXzE5ZS5fdGV4dEFyZWEuaWQ9PXJlZnx8XzE5ZS5fdGV4dEFyZWEubmFtZT09cmVmfHxfMTllLl90ZXh0QXJlYT09cmVmKSl7Ci1yZXR1cm4gXzE5ZTsKLX0KLX0KLXJldHVybiBudWxsOwotfTsKLVhpbmhhLnByb3RvdHlwZS5nZXRQbHVnaW5JbnN0YW5jZT1mdW5jdGlvbihfMTlmKXsKLWlmKHRoaXMucGx1Z2luc1tfMTlmXSl7Ci1yZXR1cm4gdGhpcy5wbHVnaW5zW18xOWZdLmluc3RhbmNlOwotfWVsc2V7Ci1yZXR1cm4gbnVsbDsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0QWxsQW5jZXN0b3JzPWZ1bmN0aW9uKCl7Ci12YXIgcD10aGlzLmdldFBhcmVudEVsZW1lbnQoKTsKLXZhciBhPVtdOwotd2hpbGUocCYmKHAubm9kZVR5cGU9PTEpJiYocC50YWdOYW1lLnRvTG93ZXJDYXNlKCkhPSJib2R5IikpewotYS5wdXNoKHApOwotcD1wLnBhcmVudE5vZGU7Ci19Ci1hLnB1c2godGhpcy5fZG9jLmJvZHkpOwotcmV0dXJuIGE7Ci19OwotWGluaGEucHJvdG90eXBlLl9nZXRGaXJzdEFuY2VzdG9yPWZ1bmN0aW9uKHNlbCxfMWEzKXsKLXZhciBwcm50PXRoaXMuYWN0aXZlRWxlbWVudChzZWwpOwotaWYocHJudD09PW51bGwpewotdHJ5ewotcHJudD0oWGluaGEuaXNfaWU/dGhpcy5jcmVhdGVSYW5nZShzZWwpLnBhcmVudEVsZW1lbnQoKTp0aGlzLmNyZWF0ZVJhbmdlKHNlbCkuY29tbW9uQW5jZXN0b3JDb250YWluZXIpOwotfQotY2F0Y2goZXgpewotcmV0dXJuIG51bGw7Ci19Ci19Ci1pZih0eXBlb2YgXzFhMz09InN0cmluZyIpewotXzFhMz1bXzFhM107Ci19Ci13aGlsZShwcm50KXsKLWlmKHBybnQubm9kZVR5cGU9PTEpewotaWYoXzFhMz09PW51bGwpewotcmV0dXJuIHBybnQ7Ci19Ci1mb3IodmFyIF8xYTU9MDtfMWE1PF8xYTMubGVuZ3RoOysrXzFhNSl7Ci1pZih0eXBlb2YgXzFhM1tfMWE1XT09InN0cmluZyImJl8xYTNbXzFhNV09PXBybnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXsKLXJldHVybiBwcm50OwotfWVsc2V7Ci1pZih0eXBlb2YgXzFhM1tfMWE1XT09ImZ1bmN0aW9uIiYmXzFhM1tfMWE1XSh0aGlzLHBybnQpKXsKLXJldHVybiBwcm50OwotfQotfQotfQotaWYocHJudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJib2R5Iil7Ci1icmVhazsKLX0KLWlmKHBybnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0idGFibGUiKXsKLWJyZWFrOwotfQotfQotcHJudD1wcm50LnBhcmVudE5vZGU7Ci19Ci1yZXR1cm4gbnVsbDsKLX07Ci1YaW5oYS5wcm90b3R5cGUuX2dldEFuY2VzdG9yQmxvY2s9ZnVuY3Rpb24oc2VsKXsKLXZhciBwcm50PShYaW5oYS5pc19pZT90aGlzLmNyZWF0ZVJhbmdlKHNlbCkucGFyZW50RWxlbWVudDp0aGlzLmNyZWF0ZVJhbmdlKHNlbCkuY29tbW9uQW5jZXN0b3JDb250YWluZXIpOwotd2hpbGUocHJudCYmKHBybnQubm9kZVR5cGU9PTEpKXsKLXN3aXRjaChwcm50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSl7Ci1jYXNlICJkaXYiOgotY2FzZSAicCI6Ci1jYXNlICJhZGRyZXNzIjoKLWNhc2UgImJsb2NrcXVvdGUiOgotY2FzZSAiY2VudGVyIjoKLWNhc2UgImRlbCI6Ci1jYXNlICJpbnMiOgotY2FzZSAicHJlIjoKLWNhc2UgImgxIjoKLWNhc2UgImgyIjoKLWNhc2UgImgzIjoKLWNhc2UgImg0IjoKLWNhc2UgImg1IjoKLWNhc2UgImg2IjoKLWNhc2UgImg3IjoKLXJldHVybiBwcm50OwotY2FzZSAiYm9keSI6Ci1jYXNlICJub2ZyYW1lcyI6Ci1jYXNlICJkZCI6Ci1jYXNlICJsaSI6Ci1jYXNlICJ0aCI6Ci1jYXNlICJ0ZCI6Ci1jYXNlICJub3NjcmlwdCI6Ci1yZXR1cm4gbnVsbDsKLWRlZmF1bHQ6Ci1icmVhazsKLX0KLX0KLXJldHVybiBudWxsOwotfTsKLVhpbmhhLnByb3RvdHlwZS5fY3JlYXRlSW1wbGljaXRCbG9jaz1mdW5jdGlvbih0eXBlKXsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLWlmKFhpbmhhLmlzX2llKXsKLXNlbC5lbXB0eSgpOwotfWVsc2V7Ci1zZWwuY29sbGFwc2VUb1N0YXJ0KCk7Ci19Ci12YXIgcm5nPXRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuc3Vycm91bmRIVE1MPWZ1bmN0aW9uKF8xYWIsXzFhYyl7Ci12YXIgaHRtbD10aGlzLmdldFNlbGVjdGVkSFRNTCgpOwotdGhpcy5pbnNlcnRIVE1MKF8xYWIraHRtbCtfMWFjKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuaGFzU2VsZWN0ZWRUZXh0PWZ1bmN0aW9uKCl7Ci1yZXR1cm4gdGhpcy5nZXRTZWxlY3RlZEhUTUwoKSE9PSIiOwotfTsKLVhpbmhhLnByb3RvdHlwZS5fY29tYm9TZWxlY3RlZD1mdW5jdGlvbihlbCx0eHQpewotdGhpcy5mb2N1c0VkaXRvcigpOwotdmFyIF8xYjA9ZWwub3B0aW9uc1tlbC5zZWxlY3RlZEluZGV4XS52YWx1ZTsKLXN3aXRjaCh0eHQpewotY2FzZSAiZm9udG5hbWUiOgotY2FzZSAiZm9udHNpemUiOgotdGhpcy5leGVjQ29tbWFuZCh0eHQsZmFsc2UsXzFiMCk7Ci1icmVhazsKLWNhc2UgImZvcm1hdGJsb2NrIjoKLWlmKCFfMWIwKXsKLXRoaXMudXBkYXRlVG9vbGJhcigpOwotYnJlYWs7Ci19Ci1pZighWGluaGEuaXNfZ2Vja298fF8xYjAhPT0iYmxvY2txdW90ZSIpewotXzFiMD0iPCIrXzFiMCsiPiI7Ci19Ci10aGlzLmV4ZWNDb21tYW5kKHR4dCxmYWxzZSxfMWIwKTsKLWJyZWFrOwotZGVmYXVsdDoKLXZhciBfMWIxPXRoaXMuY29uZmlnLmN1c3RvbVNlbGVjdHNbdHh0XTsKLWlmKHR5cGVvZiBfMWIxIT0idW5kZWZpbmVkIil7Ci1fMWIxLmFjdGlvbih0aGlzLF8xYjAsZWwsdHh0KTsKLX1lbHNlewotYWxlcnQoIkZJWE1FOiBjb21ibyBib3ggIit0eHQrIiBub3QgaW1wbGVtZW50ZWQiKTsKLX0KLWJyZWFrOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5fY29sb3JTZWxlY3Rvcj1mdW5jdGlvbihfMWIyKXsKLXZhciBfMWIzPXRoaXM7Ci1pZihYaW5oYS5pc19nZWNrbyl7Ci10cnl7Ci1fMWIzLl9kb2MuZXhlY0NvbW1hbmQoInVzZUNTUyIsZmFsc2UsZmFsc2UpOwotXzFiMy5fZG9jLmV4ZWNDb21tYW5kKCJzdHlsZVdpdGhDU1MiLGZhbHNlLHRydWUpOwotfQotY2F0Y2goZXgpewotfQotfQotdmFyIGJ0bj1fMWIzLl90b29sYmFyT2JqZWN0c1tfMWIyXS5lbGVtZW50OwotdmFyIF8xYjU7Ci1pZihfMWIyPT0iaGlsaXRlY29sb3IiKXsKLWlmKFhpbmhhLmlzX2llKXsKLV8xYjI9ImJhY2tjb2xvciI7Ci1fMWI1PVhpbmhhLl9jb2xvclRvUmdiKF8xYjMuX2RvYy5xdWVyeUNvbW1hbmRWYWx1ZSgiYmFja2NvbG9yIikpOwotfWVsc2V7Ci1fMWI1PVhpbmhhLl9jb2xvclRvUmdiKF8xYjMuX2RvYy5xdWVyeUNvbW1hbmRWYWx1ZSgiaGlsaXRlY29sb3IiKSk7Ci19Ci19ZWxzZXsKLV8xYjU9WGluaGEuX2NvbG9yVG9SZ2IoXzFiMy5fZG9jLnF1ZXJ5Q29tbWFuZFZhbHVlKCJmb3JlY29sb3IiKSk7Ci19Ci12YXIgXzFiNj1mdW5jdGlvbihfMWI3KXsKLV8xYjMuX2RvYy5leGVjQ29tbWFuZChfMWIyLGZhbHNlLF8xYjcpOwotfTsKLWlmKFhpbmhhLmlzX2llKXsKLXZhciBfMWI4PV8xYjMuY3JlYXRlUmFuZ2UoXzFiMy5nZXRTZWxlY3Rpb24oKSk7Ci1fMWI2PWZ1bmN0aW9uKF8xYjkpewotXzFiOC5zZWxlY3QoKTsKLV8xYjMuX2RvYy5leGVjQ29tbWFuZChfMWIyLGZhbHNlLF8xYjkpOwotfTsKLX0KLXZhciBfMWJhPW5ldyBYaW5oYS5jb2xvclBpY2tlcih7Y2VsbHNpemU6XzFiMy5jb25maWcuY29sb3JQaWNrZXJDZWxsU2l6ZSxjYWxsYmFjazpfMWI2LGdyYW51bGFyaXR5Ol8xYjMuY29uZmlnLmNvbG9yUGlja2VyR3JhbnVsYXJpdHksd2Vic2FmZTpfMWIzLmNvbmZpZy5jb2xvclBpY2tlcldlYlNhZmUsc2F2ZWNvbG9yczpfMWIzLmNvbmZpZy5jb2xvclBpY2tlclNhdmVDb2xvcnN9KTsKLV8xYmEub3BlbihfMWIzLmNvbmZpZy5jb2xvclBpY2tlclBvc2l0aW9uLGJ0bixfMWI1KTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZXhlY0NvbW1hbmQ9ZnVuY3Rpb24oXzFiYixVSSxfMWJkKXsKLXZhciBfMWJlPXRoaXM7Ci10aGlzLmZvY3VzRWRpdG9yKCk7Ci1fMWJiPV8xYmIudG9Mb3dlckNhc2UoKTsKLWlmKHRoaXMuZmlyZVBsdWdpbkV2ZW50KCJvbkV4ZWNDb21tYW5kIixfMWJiLFVJLF8xYmQpKXsKLXRoaXMudXBkYXRlVG9vbGJhcigpOwotcmV0dXJuIGZhbHNlOwotfQotc3dpdGNoKF8xYmIpewotY2FzZSAiaHRtbG1vZGUiOgotdGhpcy5zZXRNb2RlKCk7Ci1icmVhazsKLWNhc2UgImhpbGl0ZWNvbG9yIjoKLWNhc2UgImZvcmVjb2xvciI6Ci10aGlzLl9jb2xvclNlbGVjdG9yKF8xYmIpOwotYnJlYWs7Ci1jYXNlICJjcmVhdGVsaW5rIjoKLXRoaXMuX2NyZWF0ZUxpbmsoKTsKLWJyZWFrOwotY2FzZSAidW5kbyI6Ci1jYXNlICJyZWRvIjoKLWlmKHRoaXMuX2N1c3RvbVVuZG8pewotdGhpc1tfMWJiXSgpOwotfWVsc2V7Ci10aGlzLl9kb2MuZXhlY0NvbW1hbmQoXzFiYixVSSxfMWJkKTsKLX0KLWJyZWFrOwotY2FzZSAiaW5zZXJ0dGFibGUiOgotdGhpcy5faW5zZXJ0VGFibGUoKTsKLWJyZWFrOwotY2FzZSAiaW5zZXJ0aW1hZ2UiOgotdGhpcy5faW5zZXJ0SW1hZ2UoKTsKLWJyZWFrOwotY2FzZSAic2hvd2hlbHAiOgotdGhpcy5fcG9wdXBEaWFsb2coXzFiZS5jb25maWcuVVJJcy5oZWxwLG51bGwsdGhpcyk7Ci1icmVhazsKLWNhc2UgImtpbGx3b3JkIjoKLXRoaXMuX3dvcmRDbGVhbigpOwotYnJlYWs7Ci1jYXNlICJjdXQiOgotY2FzZSAiY29weSI6Ci1jYXNlICJwYXN0ZSI6Ci10aGlzLl9kb2MuZXhlY0NvbW1hbmQoXzFiYixVSSxfMWJkKTsKLWlmKHRoaXMuY29uZmlnLmtpbGxXb3JkT25QYXN0ZSl7Ci10aGlzLl93b3JkQ2xlYW4oKTsKLX0KLWJyZWFrOwotY2FzZSAibGVmdHRvcmlnaHQiOgotY2FzZSAicmlnaHR0b2xlZnQiOgotaWYodGhpcy5jb25maWcuY2hhbmdlSnVzdGlmeVdpdGhEaXJlY3Rpb24pewotdGhpcy5fZG9jLmV4ZWNDb21tYW5kKChfMWJiPT0icmlnaHR0b2xlZnQiKT8ianVzdGlmeXJpZ2h0IjoianVzdGlmeWxlZnQiLFVJLF8xYmQpOwotfQotdmFyIGRpcj0oXzFiYj09InJpZ2h0dG9sZWZ0Iik/InJ0bCI6Imx0ciI7Ci12YXIgZWw9dGhpcy5nZXRQYXJlbnRFbGVtZW50KCk7Ci13aGlsZShlbCYmIVhpbmhhLmlzQmxvY2tFbGVtZW50KGVsKSl7Ci1lbD1lbC5wYXJlbnROb2RlOwotfQotaWYoZWwpewotaWYoZWwuc3R5bGUuZGlyZWN0aW9uPT1kaXIpewotZWwuc3R5bGUuZGlyZWN0aW9uPSIiOwotfWVsc2V7Ci1lbC5zdHlsZS5kaXJlY3Rpb249ZGlyOwotfQotfQotYnJlYWs7Ci1jYXNlICJqdXN0aWZ5bGVmdCI6Ci1jYXNlICJqdXN0aWZ5cmlnaHQiOgotXzFiYi5tYXRjaCgvXmp1c3RpZnkoLiopJC8pOwotdmFyIGFlPXRoaXMuYWN0aXZlRWxlbWVudCh0aGlzLmdldFNlbGVjdGlvbigpKTsKLWlmKGFlJiZhZS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJpbWciKXsKLWFlLmFsaWduPWFlLmFsaWduPT1SZWdFeHAuJDE/IiI6UmVnRXhwLiQxOwotfWVsc2V7Ci10aGlzLl9kb2MuZXhlY0NvbW1hbmQoXzFiYixVSSxfMWJkKTsKLX0KLWJyZWFrOwotZGVmYXVsdDoKLXRyeXsKLXRoaXMuX2RvYy5leGVjQ29tbWFuZChfMWJiLFVJLF8xYmQpOwotfQotY2F0Y2goZXgpewotaWYodGhpcy5jb25maWcuZGVidWcpewotYWxlcnQoZXgrIlxuXG5ieSBleGVjQ29tbWFuZCgiK18xYmIrIik7Iik7Ci19Ci19Ci1icmVhazsKLX0KLXRoaXMudXBkYXRlVG9vbGJhcigpOwotcmV0dXJuIGZhbHNlOwotfTsKLVhpbmhhLnByb3RvdHlwZS5fZWRpdG9yRXZlbnQ9ZnVuY3Rpb24oZXYpewotdmFyIF8xYzM9dGhpczsKLWlmKHR5cGVvZiBfMWMzLl90ZXh0QXJlYVsib24iK2V2LnR5cGVdPT0iZnVuY3Rpb24iKXsKLV8xYzMuX3RleHRBcmVhWyJvbiIrZXYudHlwZV0oZXYpOwotfQotaWYodGhpcy5pc0tleUV2ZW50KGV2KSl7Ci1pZihfMWMzLmZpcmVQbHVnaW5FdmVudCgib25LZXlQcmVzcyIsZXYpKXsKLXJldHVybiBmYWxzZTsKLX0KLWlmKHRoaXMuaXNTaG9ydEN1dChldikpewotdGhpcy5fc2hvcnRDdXRzKGV2KTsKLX0KLX0KLWlmKGV2LnR5cGU9PSJtb3VzZWRvd24iKXsKLWlmKF8xYzMuZmlyZVBsdWdpbkV2ZW50KCJvbk1vdXNlRG93biIsZXYpKXsKLXJldHVybiBmYWxzZTsKLX0KLX0KLWlmKF8xYzMuX3RpbWVyVG9vbGJhcil7Ci1jbGVhclRpbWVvdXQoXzFjMy5fdGltZXJUb29sYmFyKTsKLX0KLWlmKCF0aGlzLnN1c3BlbmRVcGRhdGVUb29sYmFyKXsKLV8xYzMuX3RpbWVyVG9vbGJhcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ci1fMWMzLnVwZGF0ZVRvb2xiYXIoKTsKLV8xYzMuX3RpbWVyVG9vbGJhcj1udWxsOwotfSwyNTApOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5fb25Eb3VibGVDbGljaz1mdW5jdGlvbihldil7Ci12YXIgXzFjNT10aGlzOwotdmFyIF8xYzY9WGluaGEuaXNfaWU/ZXYuc3JjRWxlbWVudDpldi50YXJnZXQ7Ci12YXIgdGFnPV8xYzYudGFnTmFtZTsKLXZhciBfMWM4PV8xYzYuY2xhc3NOYW1lOwotaWYodGFnKXsKLXRhZz10YWcudG9Mb3dlckNhc2UoKTsKLWlmKF8xYzgmJih0aGlzLmNvbmZpZy5kYmxjbGlja0xpc3RbdGFnKyIuIitfMWM4XSE9dW5kZWZpbmVkKSl7Ci10aGlzLmNvbmZpZy5kYmxjbGlja0xpc3RbdGFnKyIuIitfMWM4XVswXShfMWM1LF8xYzYpOwotfWVsc2V7Ci1pZih0aGlzLmNvbmZpZy5kYmxjbGlja0xpc3RbdGFnXSE9dW5kZWZpbmVkKXsKLXRoaXMuY29uZmlnLmRibGNsaWNrTGlzdFt0YWddWzBdKF8xYzUsXzFjNik7Ci19Ci19Ci19Ci19OwotWGluaGEucHJvdG90eXBlLl9zaG9ydEN1dHM9ZnVuY3Rpb24oZXYpewotdmFyIGtleT10aGlzLmdldEtleShldikudG9Mb3dlckNhc2UoKTsKLXZhciBjbWQ9bnVsbDsKLXZhciBfMWNjPW51bGw7Ci1zd2l0Y2goa2V5KXsKLWNhc2UgImIiOgotY21kPSJib2xkIjsKLWJyZWFrOwotY2FzZSAiaSI6Ci1jbWQ9Iml0YWxpYyI7Ci1icmVhazsKLWNhc2UgInUiOgotY21kPSJ1bmRlcmxpbmUiOwotYnJlYWs7Ci1jYXNlICJzIjoKLWNtZD0ic3RyaWtldGhyb3VnaCI7Ci1icmVhazsKLWNhc2UgImwiOgotY21kPSJqdXN0aWZ5bGVmdCI7Ci1icmVhazsKLWNhc2UgImUiOgotY21kPSJqdXN0aWZ5Y2VudGVyIjsKLWJyZWFrOwotY2FzZSAiciI6Ci1jbWQ9Imp1c3RpZnlyaWdodCI7Ci1icmVhazsKLWNhc2UgImoiOgotY21kPSJqdXN0aWZ5ZnVsbCI7Ci1icmVhazsKLWNhc2UgInoiOgotY21kPSJ1bmRvIjsKLWJyZWFrOwotY2FzZSAieSI6Ci1jbWQ9InJlZG8iOwotYnJlYWs7Ci1jYXNlICJ2IjoKLWNtZD0icGFzdGUiOwotYnJlYWs7Ci1jYXNlICJuIjoKLWNtZD0iZm9ybWF0YmxvY2siOwotXzFjYz0icCI7Ci1icmVhazsKLWNhc2UgIjAiOgotY21kPSJraWxsd29yZCI7Ci1icmVhazsKLWNhc2UgIjEiOgotY2FzZSAiMiI6Ci1jYXNlICIzIjoKLWNhc2UgIjQiOgotY2FzZSAiNSI6Ci1jYXNlICI2IjoKLWNtZD0iZm9ybWF0YmxvY2siOwotXzFjYz0iaCIra2V5OwotYnJlYWs7Ci19Ci1pZihjbWQpewotdGhpcy5leGVjQ29tbWFuZChjbWQsZmFsc2UsXzFjYyk7Ci1YaW5oYS5fc3RvcEV2ZW50KGV2KTsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuY29udmVydE5vZGU9ZnVuY3Rpb24oZWwsXzFjZSl7Ci12YXIgXzFjZj10aGlzLl9kb2MuY3JlYXRlRWxlbWVudChfMWNlKTsKLXdoaWxlKGVsLmZpcnN0Q2hpbGQpewotXzFjZi5hcHBlbmRDaGlsZChlbC5maXJzdENoaWxkKTsKLX0KLXJldHVybiBfMWNmOwotfTsKLVhpbmhhLnByb3RvdHlwZS5zY3JvbGxUb0VsZW1lbnQ9ZnVuY3Rpb24oZSl7Ci1pZighZSl7Ci1lPXRoaXMuZ2V0UGFyZW50RWxlbWVudCgpOwotaWYoIWUpewotcmV0dXJuOwotfQotfQotdmFyIF8xZDE9WGluaGEuZ2V0RWxlbWVudFRvcExlZnQoZSk7Ci10aGlzLl9pZnJhbWUuY29udGVudFdpbmRvdy5zY3JvbGxUbyhfMWQxLmxlZnQsXzFkMS50b3ApOwotfTsKLVhpbmhhLnByb3RvdHlwZS5nZXRFZGl0b3JDb250ZW50PWZ1bmN0aW9uKCl7Ci1yZXR1cm4gdGhpcy5vdXR3YXJkSHRtbCh0aGlzLmdldEhUTUwoKSk7Ci19OwotWGluaGEucHJvdG90eXBlLnNldEVkaXRvckNvbnRlbnQ9ZnVuY3Rpb24oaHRtbCl7Ci10aGlzLnNldEhUTUwodGhpcy5pbndhcmRIdG1sKGh0bWwpKTsKLX07Ci1YaW5oYS51cGRhdGVUZXh0YXJlYXM9ZnVuY3Rpb24oKXsKLXZhciBlOwotZm9yKHZhciBpPTA7aTxfX3hpbmhhcy5sZW5ndGg7aSsrKXsKLWU9X194aW5oYXNbaV07Ci1lLl90ZXh0QXJlYS52YWx1ZT1lLmdldEVkaXRvckNvbnRlbnQoKTsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0SFRNTD1mdW5jdGlvbigpewotdmFyIGh0bWw9IiI7Ci1zd2l0Y2godGhpcy5fZWRpdE1vZGUpewotY2FzZSAid3lzaXd5ZyI6Ci1pZighdGhpcy5jb25maWcuZnVsbFBhZ2UpewotaHRtbD1YaW5oYS5nZXRIVE1MKHRoaXMuX2RvYy5ib2R5LGZhbHNlLHRoaXMpLnRyaW0oKTsKLX1lbHNlewotaHRtbD10aGlzLmRvY3R5cGUrIlxuIitYaW5oYS5nZXRIVE1MKHRoaXMuX2RvYy5kb2N1bWVudEVsZW1lbnQsdHJ1ZSx0aGlzKTsKLX0KLWJyZWFrOwotY2FzZSAidGV4dG1vZGUiOgotaHRtbD10aGlzLl90ZXh0QXJlYS52YWx1ZTsKLWJyZWFrOwotZGVmYXVsdDoKLWFsZXJ0KCJNb2RlIDwiK3RoaXMuX2VkaXRNb2RlKyI+IG5vdCBkZWZpbmVkISIpOwotcmV0dXJuIGZhbHNlOwotfQotcmV0dXJuIGh0bWw7Ci19OwotWGluaGEucHJvdG90eXBlLm91dHdhcmRIdG1sPWZ1bmN0aW9uKGh0bWwpewotZm9yKHZhciBpIGluIHRoaXMucGx1Z2lucyl7Ci12YXIgXzFkOD10aGlzLnBsdWdpbnNbaV0uaW5zdGFuY2U7Ci1pZihfMWQ4JiZ0eXBlb2YgXzFkOC5vdXR3YXJkSHRtbD09ImZ1bmN0aW9uIil7Ci1odG1sPV8xZDgub3V0d2FyZEh0bWwoaHRtbCk7Ci19Ci19Ci1odG1sPWh0bWwucmVwbGFjZSgvPChcLz8pYihcc3w+fFwvKS9pZywiPCQxc3Ryb25nJDIiKTsKLWh0bWw9aHRtbC5yZXBsYWNlKC88KFwvPylpKFxzfD58XC8pL2lnLCI8JDFlbSQyIik7Ci1odG1sPWh0bWwucmVwbGFjZSgvPChcLz8pc3RyaWtlKFxzfD58XC8pL2lnLCI8JDFkZWwkMiIpOwotaHRtbD1odG1sLnJlcGxhY2UoLyg8W14+XSpvbihjbGlja3xtb3VzZShvdmVyfG91dHx1cHxkb3duKSk9WyciXSlpZlwod2luZG93XC5wYXJlbnQgJmFtcDsmYW1wOyB3aW5kb3dcLnBhcmVudFwuWGluaGFcKVx7cmV0dXJuIGZhbHNlXH0vZ2ksIiQxIik7Ci12YXIgXzFkOT1sb2NhdGlvbi5ocmVmLnJlcGxhY2UoLyhodHRwcz86XC9cL1teXC9dKilcLy4qLywiJDEiKSsiLyI7Ci1odG1sPWh0bWwucmVwbGFjZSgvaHR0cHM/OlwvXC9udWxsXC8vZyxfMWQ5KTsKLWh0bWw9aHRtbC5yZXBsYWNlKC8oKGhyZWZ8c3JjfGJhY2tncm91bmQpPVtcJ1wiXSlcLysvaWcsIiQxIitfMWQ5KTsKLWh0bWw9dGhpcy5vdXR3YXJkU3BlY2lhbFJlcGxhY2VtZW50cyhodG1sKTsKLWh0bWw9dGhpcy5maXhSZWxhdGl2ZUxpbmtzKGh0bWwpOwotaWYodGhpcy5jb25maWcuc2V2ZW5CaXRDbGVhbil7Ci1odG1sPWh0bWwucmVwbGFjZSgvW14gLX5cclxuXHRdL2csZnVuY3Rpb24oYyl7Ci1yZXR1cm4gKGMhPVhpbmhhLmNjKT8iJiMiK2MuY2hhckNvZGVBdCgwKSsiOyI6YzsKLX0pOwotfQotaHRtbD1odG1sLnJlcGxhY2UoLyg8c2NyaXB0W14+XSooKHR5cGU9W1wiXCdddGV4dFwvKXwobGFuZ3VhZ2U9W1wiXCddKSkpKGZyZWV6ZXNjcmlwdCkvZ2ksIiQxamF2YXNjcmlwdCIpOwotaWYodGhpcy5jb25maWcuZnVsbFBhZ2UpewotaHRtbD1YaW5oYS5zdHJpcENvcmVDU1MoaHRtbCk7Ci19Ci1pZih0eXBlb2YgdGhpcy5jb25maWcub3V0d2FyZEh0bWw9PSJmdW5jdGlvbiIpewotaHRtbD10aGlzLmNvbmZpZy5vdXR3YXJkSHRtbChodG1sKTsKLX0KLXJldHVybiBodG1sOwotfTsKLVhpbmhhLnByb3RvdHlwZS5pbndhcmRIdG1sPWZ1bmN0aW9uKGh0bWwpewotZm9yKHZhciBpIGluIHRoaXMucGx1Z2lucyl7Ci12YXIgXzFkZD10aGlzLnBsdWdpbnNbaV0uaW5zdGFuY2U7Ci1pZihfMWRkJiZ0eXBlb2YgXzFkZC5pbndhcmRIdG1sPT0iZnVuY3Rpb24iKXsKLWh0bWw9XzFkZC5pbndhcmRIdG1sKGh0bWwpOwotfQotfQotaHRtbD1odG1sLnJlcGxhY2UoLzwoXC8/KWRlbChcc3w+fFwvKS9pZywiPCQxc3RyaWtlJDIiKTsKLWh0bWw9aHRtbC5yZXBsYWNlKC8oPFtePl0qb24oY2xpY2t8bW91c2Uob3ZlcnxvdXR8dXB8ZG93bikpPVsiJ10pL2dpLCIkMWlmKHdpbmRvdy5wYXJlbnQgJmFtcDsmYW1wOyB3aW5kb3cucGFyZW50LlhpbmhhKXtyZXR1cm4gZmFsc2V9Iik7Ci1odG1sPXRoaXMuaW53YXJkU3BlY2lhbFJlcGxhY2VtZW50cyhodG1sKTsKLWh0bWw9aHRtbC5yZXBsYWNlKC8oPHNjcmlwdFtePl0qKCh0eXBlPVtcIlwnXXRleHRcLyl8KGxhbmd1YWdlPVtcIlwnXSkpKShqYXZhc2NyaXB0KS9naSwiJDFmcmVlemVzY3JpcHQiKTsKLXZhciBfMWRlPW5ldyBSZWdFeHAoIigoaHJlZnxzcmN8YmFja2dyb3VuZCk9WydcIl0pLysiLCJnaSIpOwotaHRtbD1odG1sLnJlcGxhY2UoXzFkZSwiJDEiK2xvY2F0aW9uLmhyZWYucmVwbGFjZSgvKGh0dHBzPzpcL1wvW15cL10qKVwvLiovLCIkMSIpKyIvIik7Ci1odG1sPXRoaXMuZml4UmVsYXRpdmVMaW5rcyhodG1sKTsKLWlmKHRoaXMuY29uZmlnLmZ1bGxQYWdlKXsKLWh0bWw9WGluaGEuYWRkQ29yZUNTUyhodG1sKTsKLX0KLWlmKHR5cGVvZiB0aGlzLmNvbmZpZy5pbndhcmRIdG1sPT0iZnVuY3Rpb24iKXsKLWh0bWw9dGhpcy5jb25maWcuaW53YXJkSHRtbChodG1sKTsKLX0KLXJldHVybiBodG1sOwotfTsKLVhpbmhhLnByb3RvdHlwZS5vdXR3YXJkU3BlY2lhbFJlcGxhY2VtZW50cz1mdW5jdGlvbihodG1sKXsKLWZvcih2YXIgaSBpbiB0aGlzLmNvbmZpZy5zcGVjaWFsUmVwbGFjZW1lbnRzKXsKLXZhciBmcm9tPXRoaXMuY29uZmlnLnNwZWNpYWxSZXBsYWNlbWVudHNbaV07Ci12YXIgdG89aTsKLWlmKHR5cGVvZiBmcm9tLnJlcGxhY2UhPSJmdW5jdGlvbiJ8fHR5cGVvZiB0by5yZXBsYWNlIT0iZnVuY3Rpb24iKXsKLWNvbnRpbnVlOwotfQotdmFyIHJlZz1uZXcgUmVnRXhwKFhpbmhhLmVzY2FwZVN0cmluZ0ZvclJlZ0V4cChmcm9tKSwiZyIpOwotaHRtbD1odG1sLnJlcGxhY2UocmVnLHRvLnJlcGxhY2UoL1wkL2csIiQkJCQiKSk7Ci19Ci1yZXR1cm4gaHRtbDsKLX07Ci1YaW5oYS5wcm90b3R5cGUuaW53YXJkU3BlY2lhbFJlcGxhY2VtZW50cz1mdW5jdGlvbihodG1sKXsKLWZvcih2YXIgaSBpbiB0aGlzLmNvbmZpZy5zcGVjaWFsUmVwbGFjZW1lbnRzKXsKLXZhciBmcm9tPWk7Ci12YXIgdG89dGhpcy5jb25maWcuc3BlY2lhbFJlcGxhY2VtZW50c1tpXTsKLWlmKHR5cGVvZiBmcm9tLnJlcGxhY2UhPSJmdW5jdGlvbiJ8fHR5cGVvZiB0by5yZXBsYWNlIT0iZnVuY3Rpb24iKXsKLWNvbnRpbnVlOwotfQotdmFyIHJlZz1uZXcgUmVnRXhwKFhpbmhhLmVzY2FwZVN0cmluZ0ZvclJlZ0V4cChmcm9tKSwiZyIpOwotaHRtbD1odG1sLnJlcGxhY2UocmVnLHRvLnJlcGxhY2UoL1wkL2csIiQkJCQiKSk7Ci19Ci1yZXR1cm4gaHRtbDsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZml4UmVsYXRpdmVMaW5rcz1mdW5jdGlvbihodG1sKXsKLWlmKHR5cGVvZiB0aGlzLmNvbmZpZy5leHBhbmRSZWxhdGl2ZVVybCE9InVuZGVmaW5lZCImJnRoaXMuY29uZmlnLmV4cGFuZFJlbGF0aXZlVXJsKXsKLWlmKGh0bWw9PW51bGwpewotcmV0dXJuICIiOwotfQotdmFyIHNyYz1odG1sLm1hdGNoKC8oc3JjfGhyZWYpPSIoW14iXSopIi9naSk7Ci12YXIgYj1kb2N1bWVudC5sb2NhdGlvbi5ocmVmOwotaWYoc3JjKXsKLXZhciB1cmwsXzFlZCxfMWVlLF8xZWYsXzFmMDsKLWZvcih2YXIgaT0wO2k8c3JjLmxlbmd0aDsrK2kpewotdXJsPXNyY1tpXS5tYXRjaCgvKHNyY3xocmVmKT0iKFteIl0qKSIvaSk7Ci1fMWVkPXVybFsyXS5tYXRjaCgvXC5cLlwvL2cpOwotaWYoXzFlZCl7Ci1fMWVlPW5ldyBSZWdFeHAoIiguKj8pKChbXi9dKi8peyIrXzFlZC5sZW5ndGgrIn0pW14vXSokIik7Ci1fMWVmPWIubWF0Y2goXzFlZSk7Ci1fMWYwPXVybFsyXS5yZXBsYWNlKC8oXC5cLlwvKSovLF8xZWZbMV0pOwotaHRtbD1odG1sLnJlcGxhY2UobmV3IFJlZ0V4cChYaW5oYS5lc2NhcGVTdHJpbmdGb3JSZWdFeHAodXJsWzJdKSksXzFmMCk7Ci19Ci19Ci19Ci19Ci1pZih0eXBlb2YgdGhpcy5jb25maWcuc3RyaXBTZWxmTmFtZWRBbmNob3JzIT0idW5kZWZpbmVkIiYmdGhpcy5jb25maWcuc3RyaXBTZWxmTmFtZWRBbmNob3JzKXsKLXZhciBfMWYyPW5ldyBSZWdFeHAoIigoaHJlZnxzcmN8YmFja2dyb3VuZCk9XCIpKCIrWGluaGEuZXNjYXBlU3RyaW5nRm9yUmVnRXhwKHdpbmRvdy51bmVzY2FwZShkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoLyYvZywiJmFtcDsiKSkpKyIpKFsjP11bXidcIiBdKikiLCJnIik7Ci1odG1sPWh0bWwucmVwbGFjZShfMWYyLCIkMSQ0Iik7Ci19Ci1pZih0eXBlb2YgdGhpcy5jb25maWcuc3RyaXBCYXNlSHJlZiE9InVuZGVmaW5lZCImJnRoaXMuY29uZmlnLnN0cmlwQmFzZUhyZWYpewotdmFyIF8xZjM9bnVsbDsKLWlmKHR5cGVvZiB0aGlzLmNvbmZpZy5iYXNlSHJlZiE9InVuZGVmaW5lZCImJnRoaXMuY29uZmlnLmJhc2VIcmVmIT09bnVsbCl7Ci1fMWYzPW5ldyBSZWdFeHAoIigoaHJlZnxzcmN8YmFja2dyb3VuZHxhY3Rpb24pPVwiKSgiK1hpbmhhLmVzY2FwZVN0cmluZ0ZvclJlZ0V4cCh0aGlzLmNvbmZpZy5iYXNlSHJlZi5yZXBsYWNlKC8oW15cL11cLykoPz0uK1wuKVteXC9dKiQvLCIkMSIpKSsiKSIsImciKTsKLWh0bWw9aHRtbC5yZXBsYWNlKF8xZjMsIiQxIik7Ci19Ci1fMWYzPW5ldyBSZWdFeHAoIigoaHJlZnxzcmN8YmFja2dyb3VuZHxhY3Rpb24pPVwiKSgiK1hpbmhhLmVzY2FwZVN0cmluZ0ZvclJlZ0V4cChkb2N1bWVudC5sb2NhdGlvbi5ocmVmLnJlcGxhY2UoL14oaHR0cHM/OlwvXC9bXlwvXSopKC4qKS8sIiQxIikpKyIpIiwiZyIpOwotaHRtbD1odG1sLnJlcGxhY2UoXzFmMywiJDEiKTsKLX0KLXJldHVybiBodG1sOwotfTsKLVhpbmhhLnByb3RvdHlwZS5nZXRJbm5lckhUTUw9ZnVuY3Rpb24oKXsKLWlmKCF0aGlzLl9kb2MuYm9keSl7Ci1yZXR1cm4gIiI7Ci19Ci12YXIgaHRtbD0iIjsKLXN3aXRjaCh0aGlzLl9lZGl0TW9kZSl7Ci1jYXNlICJ3eXNpd3lnIjoKLWlmKCF0aGlzLmNvbmZpZy5mdWxsUGFnZSl7Ci1odG1sPXRoaXMuX2RvYy5ib2R5LmlubmVySFRNTDsKLX1lbHNlewotaHRtbD10aGlzLmRvY3R5cGUrIlxuIit0aGlzLl9kb2MuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTDsKLX0KLWJyZWFrOwotY2FzZSAidGV4dG1vZGUiOgotaHRtbD10aGlzLl90ZXh0QXJlYS52YWx1ZTsKLWJyZWFrOwotZGVmYXVsdDoKLWFsZXJ0KCJNb2RlIDwiK3RoaXMuX2VkaXRNb2RlKyI+IG5vdCBkZWZpbmVkISIpOwotcmV0dXJuIGZhbHNlOwotfQotcmV0dXJuIGh0bWw7Ci19OwotWGluaGEucHJvdG90eXBlLnNldEhUTUw9ZnVuY3Rpb24oaHRtbCl7Ci1pZighdGhpcy5jb25maWcuZnVsbFBhZ2UpewotdGhpcy5fZG9jLmJvZHkuaW5uZXJIVE1MPWh0bWw7Ci19ZWxzZXsKLXRoaXMuc2V0RnVsbEhUTUwoaHRtbCk7Ci19Ci10aGlzLl90ZXh0QXJlYS52YWx1ZT1odG1sOwotfTsKLVhpbmhhLnByb3RvdHlwZS5zZXREb2N0eXBlPWZ1bmN0aW9uKF8xZjYpewotdGhpcy5kb2N0eXBlPV8xZjY7Ci19OwotWGluaGEuX29iamVjdD1udWxsOwotQXJyYXkucHJvdG90eXBlLmlzQXJyYXk9dHJ1ZTsKLVJlZ0V4cC5wcm90b3R5cGUuaXNSZWdFeHA9dHJ1ZTsKLVhpbmhhLmNsb25lT2JqZWN0PWZ1bmN0aW9uKG9iail7Ci1pZighb2JqKXsKLXJldHVybiBudWxsOwotfQotdmFyIF8xZjg9b2JqLmlzQXJyYXk/W106e307Ci1pZihvYmouY29uc3RydWN0b3IudG9TdHJpbmcoKS5tYXRjaCgvXHMqZnVuY3Rpb24gRnVuY3Rpb25cKC8pfHx0eXBlb2Ygb2JqPT0iZnVuY3Rpb24iKXsKLV8xZjg9b2JqOwotfWVsc2V7Ci1pZihvYmouaXNSZWdFeHApewotXzFmOD1ldmFsKG9iai50b1N0cmluZygpKTsKLX1lbHNlewotZm9yKHZhciBuIGluIG9iail7Ci12YXIgbm9kZT1vYmpbbl07Ci1pZih0eXBlb2Ygbm9kZT09Im9iamVjdCIpewotXzFmOFtuXT1YaW5oYS5jbG9uZU9iamVjdChub2RlKTsKLX1lbHNlewotXzFmOFtuXT1ub2RlOwotfQotfQotfQotfQotcmV0dXJuIF8xZjg7Ci19OwotWGluaGEuZXh0ZW5kPWZ1bmN0aW9uKF8xZmIsXzFmYyl7Ci1mdW5jdGlvbiBpbmhlcml0YW5jZSgpewotfTsKLWluaGVyaXRhbmNlLnByb3RvdHlwZT1fMWZjLnByb3RvdHlwZTsKLV8xZmIucHJvdG90eXBlPW5ldyBpbmhlcml0YW5jZSgpOwotXzFmYi5wcm90b3R5cGUuY29uc3RydWN0b3I9XzFmYjsKLV8xZmIucGFyZW50Q29uc3RydWN0b3I9XzFmYzsKLV8xZmIuc3VwZXJDbGFzcz1fMWZjLnByb3RvdHlwZTsKLX07Ci1YaW5oYS5mbHVzaEV2ZW50cz1mdW5jdGlvbigpewotdmFyIHg9MDsKLXZhciBlPVhpbmhhLl9ldmVudEZsdXNoZXJzLnBvcCgpOwotd2hpbGUoZSl7Ci10cnl7Ci1pZihlLmxlbmd0aD09Myl7Ci1YaW5oYS5fcmVtb3ZlRXZlbnQoZVswXSxlWzFdLGVbMl0pOwoteCsrOwotfWVsc2V7Ci1pZihlLmxlbmd0aD09Mil7Ci1lWzBdWyJvbiIrZVsxXV09bnVsbDsKLWVbMF0uX3hpbmhhX2RvbTBFdmVudHNbZVsxXV09bnVsbDsKLXgrKzsKLX0KLX0KLX0KLWNhdGNoKGV4KXsKLX0KLWU9WGluaGEuX2V2ZW50Rmx1c2hlcnMucG9wKCk7Ci19Ci19OwotWGluaGEuX2V2ZW50Rmx1c2hlcnM9W107Ci1pZihkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKXsKLVhpbmhhLl9hZGRFdmVudD1mdW5jdGlvbihlbCxfMjAwLGZ1bmMpewotZWwuYWRkRXZlbnRMaXN0ZW5lcihfMjAwLGZ1bmMsZmFsc2UpOwotWGluaGEuX2V2ZW50Rmx1c2hlcnMucHVzaChbZWwsXzIwMCxmdW5jXSk7Ci19OwotWGluaGEuX3JlbW92ZUV2ZW50PWZ1bmN0aW9uKGVsLF8yMDMsZnVuYyl7Ci1lbC5yZW1vdmVFdmVudExpc3RlbmVyKF8yMDMsZnVuYyxmYWxzZSk7Ci19OwotWGluaGEuX3N0b3BFdmVudD1mdW5jdGlvbihldil7Ci1ldi5wcmV2ZW50RGVmYXVsdCgpOwotZXYuc3RvcFByb3BhZ2F0aW9uKCk7Ci19OwotfWVsc2V7Ci1pZihkb2N1bWVudC5hdHRhY2hFdmVudCl7Ci1YaW5oYS5fYWRkRXZlbnQ9ZnVuY3Rpb24oZWwsXzIwNyxmdW5jKXsKLWVsLmF0dGFjaEV2ZW50KCJvbiIrXzIwNyxmdW5jKTsKLVhpbmhhLl9ldmVudEZsdXNoZXJzLnB1c2goW2VsLF8yMDcsZnVuY10pOwotfTsKLVhpbmhhLl9yZW1vdmVFdmVudD1mdW5jdGlvbihlbCxfMjBhLGZ1bmMpewotZWwuZGV0YWNoRXZlbnQoIm9uIitfMjBhLGZ1bmMpOwotfTsKLVhpbmhhLl9zdG9wRXZlbnQ9ZnVuY3Rpb24oZXYpewotdHJ5ewotZXYuY2FuY2VsQnViYmxlPXRydWU7Ci1ldi5yZXR1cm5WYWx1ZT1mYWxzZTsKLX0KLWNhdGNoKGV4KXsKLX0KLX07Ci19ZWxzZXsKLVhpbmhhLl9hZGRFdmVudD1mdW5jdGlvbihlbCxfMjBlLGZ1bmMpewotYWxlcnQoIl9hZGRFdmVudCBpcyBub3Qgc3VwcG9ydGVkIik7Ci19OwotWGluaGEuX3JlbW92ZUV2ZW50PWZ1bmN0aW9uKGVsLF8yMTEsZnVuYyl7Ci1hbGVydCgiX3JlbW92ZUV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQiKTsKLX07Ci1YaW5oYS5fc3RvcEV2ZW50PWZ1bmN0aW9uKGV2KXsKLWFsZXJ0KCJfc3RvcEV2ZW50IGlzIG5vdCBzdXBwb3J0ZWQiKTsKLX07Ci19Ci19Ci1YaW5oYS5fYWRkRXZlbnRzPWZ1bmN0aW9uKGVsLGV2cyxmdW5jKXsKLWZvcih2YXIgaT1ldnMubGVuZ3RoOy0taT49MDspewotWGluaGEuX2FkZEV2ZW50KGVsLGV2c1tpXSxmdW5jKTsKLX0KLX07Ci1YaW5oYS5fcmVtb3ZlRXZlbnRzPWZ1bmN0aW9uKGVsLGV2cyxmdW5jKXsKLWZvcih2YXIgaT1ldnMubGVuZ3RoOy0taT49MDspewotWGluaGEuX3JlbW92ZUV2ZW50KGVsLGV2c1tpXSxmdW5jKTsKLX0KLX07Ci1YaW5oYS5hZGRPbmxvYWRIYW5kbGVyPWZ1bmN0aW9uKGZ1bmMsXzIxZCl7Ci1fMjFkPV8yMWQ/XzIxZDp3aW5kb3c7Ci12YXIgaW5pdD1mdW5jdGlvbigpewotaWYoYXJndW1lbnRzLmNhbGxlZS5kb25lKXsKLXJldHVybjsKLX0KLWFyZ3VtZW50cy5jYWxsZWUuZG9uZT10cnVlOwotaWYoWGluaGEub25sb2FkVGltZXIpewotY2xlYXJJbnRlcnZhbChYaW5oYS5vbmxvYWRUaW1lcik7Ci19Ci1mdW5jKCk7Ci19OwotaWYoWGluaGEuaXNfaWUpewotZG9jdW1lbnQuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsZnVuY3Rpb24oKXsKLWlmKGRvY3VtZW50LnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXsKLWRvY3VtZW50LmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLGFyZ3VtZW50cy5jYWxsZWUpOwotaW5pdCgpOwotfQotfSk7Ci1pZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwmJnR5cGVvZiB3aW5kb3cuZnJhbWVFbGVtZW50PT09InVuZGVmaW5lZCIpewotKGZ1bmN0aW9uKCl7Ci1pZihhcmd1bWVudHMuY2FsbGVlLmRvbmUpewotcmV0dXJuOwotfQotdHJ5ewotZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsKCJsZWZ0Iik7Ci19Ci1jYXRjaChlcnJvcil7Ci1zZXRUaW1lb3V0KGFyZ3VtZW50cy5jYWxsZWUsMCk7Ci1yZXR1cm47Ci19Ci1pbml0KCk7Ci19KSgpOwotfQotfWVsc2V7Ci1pZigvYXBwbGV3ZWJraXR8S0hUTUwvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKXsKLVhpbmhhLm9ubG9hZFRpbWVyPV8yMWQuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXsKLWlmKC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoXzIxZC5kb2N1bWVudC5yZWFkeVN0YXRlKSl7Ci1pbml0KCk7Ci19Ci19LDEwKTsKLX1lbHNlewotXzIxZC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixpbml0LGZhbHNlKTsKLX0KLX0KLVhpbmhhLl9hZGRFdmVudChfMjFkLCJsb2FkIixpbml0KTsKLX07Ci1YaW5oYS5hZGREb20wRXZlbnQ9ZnVuY3Rpb24oZWwsZXYsZm4pewotWGluaGEuX3ByZXBhcmVGb3JEb20wRXZlbnRzKGVsLGV2KTsKLWVsLl94aW5oYV9kb20wRXZlbnRzW2V2XS51bnNoaWZ0KGZuKTsKLX07Ci1YaW5oYS5wcmVwZW5kRG9tMEV2ZW50PWZ1bmN0aW9uKGVsLGV2LGZuKXsKLVhpbmhhLl9wcmVwYXJlRm9yRG9tMEV2ZW50cyhlbCxldik7Ci1lbC5feGluaGFfZG9tMEV2ZW50c1tldl0ucHVzaChmbik7Ci19OwotWGluaGEuZ2V0RXZlbnQ9ZnVuY3Rpb24oZXYpewotcmV0dXJuIGV2fHx3aW5kb3cuZXZlbnQ7Ci19OwotWGluaGEuX3ByZXBhcmVGb3JEb20wRXZlbnRzPWZ1bmN0aW9uKGVsLGV2KXsKLWlmKHR5cGVvZiBlbC5feGluaGFfZG9tMEV2ZW50cz09InVuZGVmaW5lZCIpewotZWwuX3hpbmhhX2RvbTBFdmVudHM9e307Ci1YaW5oYS5mcmVlTGF0ZXIoZWwsIl94aW5oYV9kb20wRXZlbnRzIik7Ci19Ci1pZih0eXBlb2YgZWwuX3hpbmhhX2RvbTBFdmVudHNbZXZdPT0idW5kZWZpbmVkIil7Ci1lbC5feGluaGFfZG9tMEV2ZW50c1tldl09W107Ci1pZih0eXBlb2YgZWxbIm9uIitldl09PSJmdW5jdGlvbiIpewotZWwuX3hpbmhhX2RvbTBFdmVudHNbZXZdLnB1c2goZWxbIm9uIitldl0pOwotfQotZWxbIm9uIitldl09ZnVuY3Rpb24oXzIyOCl7Ci12YXIgYT1lbC5feGluaGFfZG9tMEV2ZW50c1tldl07Ci12YXIgXzIyYT10cnVlOwotZm9yKHZhciBpPWEubGVuZ3RoOy0taT49MDspewotZWwuX3hpbmhhX3RlbXBFdmVudEhhbmRsZXI9YVtpXTsKLWlmKGVsLl94aW5oYV90ZW1wRXZlbnRIYW5kbGVyKF8yMjgpPT09ZmFsc2UpewotZWwuX3hpbmhhX3RlbXBFdmVudEhhbmRsZXI9bnVsbDsKLV8yMmE9ZmFsc2U7Ci1icmVhazsKLX0KLWVsLl94aW5oYV90ZW1wRXZlbnRIYW5kbGVyPW51bGw7Ci19Ci1yZXR1cm4gXzIyYTsKLX07Ci1YaW5oYS5fZXZlbnRGbHVzaGVycy5wdXNoKFtlbCxldl0pOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5ub3RpZnlPbj1mdW5jdGlvbihldixmbil7Ci1pZih0eXBlb2YgdGhpcy5fbm90aWZ5TGlzdGVuZXJzW2V2XT09InVuZGVmaW5lZCIpewotdGhpcy5fbm90aWZ5TGlzdGVuZXJzW2V2XT1bXTsKLVhpbmhhLmZyZWVMYXRlcih0aGlzLCJfbm90aWZ5TGlzdGVuZXJzIik7Ci19Ci10aGlzLl9ub3RpZnlMaXN0ZW5lcnNbZXZdLnB1c2goZm4pOwotfTsKLVhpbmhhLnByb3RvdHlwZS5ub3RpZnlPZj1mdW5jdGlvbihldixhcmdzKXsKLWlmKHRoaXMuX25vdGlmeUxpc3RlbmVyc1tldl0pewotZm9yKHZhciBpPTA7aTx0aGlzLl9ub3RpZnlMaXN0ZW5lcnNbZXZdLmxlbmd0aDtpKyspewotdGhpcy5fbm90aWZ5TGlzdGVuZXJzW2V2XVtpXShldixhcmdzKTsKLX0KLX0KLX07Ci1YaW5oYS5fYmxvY2tUYWdzPSIgYm9keSBmb3JtIHRleHRhcmVhIGZpZWxkc2V0IHVsIG9sIGRsIGxpIGRpdiAiKyJwIGgxIGgyIGgzIGg0IGg1IGg2IHF1b3RlIHByZSB0YWJsZSB0aGVhZCAiKyJ0Ym9keSB0Zm9vdCB0ciB0ZCB0aCBpZnJhbWUgYWRkcmVzcyBibG9ja3F1b3RlIHRpdGxlIG1ldGEgbGluayBzdHlsZSBoZWFkICI7Ci1YaW5oYS5pc0Jsb2NrRWxlbWVudD1mdW5jdGlvbihlbCl7Ci1yZXR1cm4gZWwmJmVsLm5vZGVUeXBlPT0xJiYoWGluaGEuX2Jsb2NrVGFncy5pbmRleE9mKCIgIitlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkrIiAiKSE9LTEpOwotfTsKLVhpbmhhLl9wYXJhQ29udGFpbmVyVGFncz0iIGJvZHkgdGQgdGggY2FwdGlvbiBmaWVsZHNldCBkaXYgIjsKLVhpbmhhLmlzUGFyYUNvbnRhaW5lcj1mdW5jdGlvbihlbCl7Ci1yZXR1cm4gZWwmJmVsLm5vZGVUeXBlPT0xJiYoWGluaGEuX3BhcmFDb250YWluZXJUYWdzLmluZGV4T2YoIiAiK2VsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSsiICIpIT0tMSk7Ci19OwotWGluaGEuX2Nsb3NpbmdUYWdzPSIgYSBhYmJyIGFjcm9ueW0gYWRkcmVzcyBhcHBsZXQgYiBiZG8gYmlnIGJsb2NrcXVvdGUgYnV0dG9uIGNhcHRpb24gY2VudGVyIGNpdGUgY29kZSBkZWwgZGZuIGRpciBkaXYgZGwgZW0gZmllbGRzZXQgZm9udCBmb3JtIGZyYW1lc2V0IGgxIGgyIGgzIGg0IGg1IGg2IGkgaWZyYW1lIGlucyBrYmQgbGFiZWwgbGVnZW5kIG1hcCBtZW51IG5vZnJhbWVzIG5vc2NyaXB0IG9iamVjdCBvbCBvcHRncm91cCBwcmUgcSBzIHNhbXAgc2NyaXB0IHNlbGVjdCBzbWFsbCBzcGFuIHN0cmlrZSBzdHJvbmcgc3R5bGUgc3ViIHN1cCB0YWJsZSB0ZXh0YXJlYSB0aXRsZSB0dCB1IHVsIHZhciAiOwotWGluaGEubmVlZHNDbG9zaW5nVGFnPWZ1bmN0aW9uKGVsKXsKLXJldHVybiBlbCYmZWwubm9kZVR5cGU9PTEmJihYaW5oYS5fY2xvc2luZ1RhZ3MuaW5kZXhPZigiICIrZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpKyIgIikhPS0xKTsKLX07Ci1YaW5oYS5odG1sRW5jb2RlPWZ1bmN0aW9uKHN0cil7Ci1pZighc3RyKXsKLXJldHVybiAiIjsKLX0KLWlmKHR5cGVvZiBzdHIucmVwbGFjZT09InVuZGVmaW5lZCIpewotc3RyPXN0ci50b1N0cmluZygpOwotfQotc3RyPXN0ci5yZXBsYWNlKC8mL2lnLCImYW1wOyIpOwotc3RyPXN0ci5yZXBsYWNlKC88L2lnLCImbHQ7Iik7Ci1zdHI9c3RyLnJlcGxhY2UoLz4vaWcsIiZndDsiKTsKLXN0cj1zdHIucmVwbGFjZSgvXHhBMC9nLCImbmJzcDsiKTsKLXN0cj1zdHIucmVwbGFjZSgvXHgyMi9nLCImcXVvdDsiKTsKLXJldHVybiBzdHI7Ci19OwotWGluaGEucHJvdG90eXBlLnN0cmlwQmFzZVVSTD1mdW5jdGlvbihfMjM1KXsKLWlmKHRoaXMuY29uZmlnLmJhc2VIcmVmPT09bnVsbHx8IXRoaXMuY29uZmlnLnN0cmlwQmFzZUhyZWYpewotcmV0dXJuIF8yMzU7Ci19Ci12YXIgXzIzNj10aGlzLmNvbmZpZy5iYXNlSHJlZi5yZXBsYWNlKC9eKGh0dHBzPzpcL1wvW15cL10rKSguKikkLywiJDEiKTsKLXZhciBfMjM3PW5ldyBSZWdFeHAoXzIzNik7Ci1yZXR1cm4gXzIzNS5yZXBsYWNlKF8yMzcsIiIpOwotfTsKLWlmKHR5cGVvZiBTdHJpbmcucHJvdG90eXBlLnRyaW0hPSJmdW5jdGlvbiIpewotU3RyaW5nLnByb3RvdHlwZS50cmltPWZ1bmN0aW9uKCl7Ci1yZXR1cm4gdGhpcy5yZXBsYWNlKC9eXHMrLywiIikucmVwbGFjZSgvXHMrJC8sIiIpOwotfTsKLX0KLVhpbmhhLl9tYWtlQ29sb3I9ZnVuY3Rpb24odil7Ci1pZih0eXBlb2YgdiE9Im51bWJlciIpewotcmV0dXJuIHY7Ci19Ci12YXIgcj12JjI1NTsKLXZhciBnPSh2Pj44KSYyNTU7Ci12YXIgYj0odj4+MTYpJjI1NTsKLXJldHVybiAicmdiKCIrcisiLCIrZysiLCIrYisiKSI7Ci19OwotWGluaGEuX2NvbG9yVG9SZ2I9ZnVuY3Rpb24odil7Ci1pZighdil7Ci1yZXR1cm4gIiI7Ci19Ci12YXIgcixnLGI7Ci1mdW5jdGlvbiBoZXgoZCl7Ci1yZXR1cm4gKGQ8MTYpPygiMCIrZC50b1N0cmluZygxNikpOmQudG9TdHJpbmcoMTYpOwotfTsKLWlmKHR5cGVvZiB2PT0ibnVtYmVyIil7Ci1yPXYmMjU1OwotZz0odj4+OCkmMjU1OwotYj0odj4+MTYpJjI1NTsKLXJldHVybiAiIyIraGV4KHIpK2hleChnKStoZXgoYik7Ci19Ci1pZih2LnN1YnN0cigwLDMpPT0icmdiIil7Ci12YXIgcmU9L3JnYlxzKlwoXHMqKFswLTldKylccyosXHMqKFswLTldKylccyosXHMqKFswLTldKylccypcKS87Ci1pZih2Lm1hdGNoKHJlKSl7Ci1yPXBhcnNlSW50KFJlZ0V4cC4kMSwxMCk7Ci1nPXBhcnNlSW50KFJlZ0V4cC4kMiwxMCk7Ci1iPXBhcnNlSW50KFJlZ0V4cC4kMywxMCk7Ci1yZXR1cm4gIiMiK2hleChyKStoZXgoZykraGV4KGIpOwotfQotcmV0dXJuIG51bGw7Ci19Ci1pZih2LnN1YnN0cigwLDEpPT0iIyIpewotcmV0dXJuIHY7Ci19Ci1yZXR1cm4gbnVsbDsKLX07Ci1YaW5oYS5wcm90b3R5cGUuX3BvcHVwRGlhbG9nPWZ1bmN0aW9uKHVybCxfMjQzLGluaXQpewotRGlhbG9nKHRoaXMucG9wdXBVUkwodXJsKSxfMjQzLGluaXQpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5pbWdVUkw9ZnVuY3Rpb24oZmlsZSxfMjQ2KXsKLWlmKHR5cGVvZiBfMjQ2PT0idW5kZWZpbmVkIil7Ci1yZXR1cm4gX2VkaXRvcl91cmwrZmlsZTsKLX1lbHNlewotcmV0dXJuIFhpbmhhLmdldFBsdWdpbkRpcihfMjQ2KSsiL2ltZy8iK2ZpbGU7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLnBvcHVwVVJMPWZ1bmN0aW9uKGZpbGUpewotdmFyIHVybD0iIjsKLWlmKGZpbGUubWF0Y2goL15wbHVnaW46XC9cLyguKj8pXC8oLiopLykpewotdmFyIF8yNDk9UmVnRXhwLiQxOwotdmFyIF8yNGE9UmVnRXhwLiQyOwotaWYoIS9cLihodG1sP3xwaHApJC8udGVzdChfMjRhKSl7Ci1fMjRhKz0iLmh0bWwiOwotfQotdXJsPVhpbmhhLmdldFBsdWdpbkRpcihfMjQ5KSsiL3BvcHVwcy8iK18yNGE7Ci19ZWxzZXsKLWlmKGZpbGUubWF0Y2goL15cLy4qPy8pfHxmaWxlLm1hdGNoKC9eaHR0cHM/OlwvXC8vKSl7Ci11cmw9ZmlsZTsKLX1lbHNlewotdXJsPV9lZGl0b3JfdXJsK3RoaXMuY29uZmlnLnBvcHVwVVJMK2ZpbGU7Ci19Ci19Ci1yZXR1cm4gdXJsOwotfTsKLVhpbmhhLmdldEVsZW1lbnRCeUlkPWZ1bmN0aW9uKHRhZyxpZCl7Ci12YXIgZWwsaSxvYmpzPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyk7Ci1mb3IoaT1vYmpzLmxlbmd0aDstLWk+PTAmJihlbD1vYmpzW2ldKTspewotaWYoZWwuaWQ9PWlkKXsKLXJldHVybiBlbDsKLX0KLX0KLXJldHVybiBudWxsOwotfTsKLVhpbmhhLnByb3RvdHlwZS5fdG9nZ2xlQm9yZGVycz1mdW5jdGlvbigpewotdmFyIF8yNTA9dGhpcy5fZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJUQUJMRSIpOwotaWYoXzI1MC5sZW5ndGghPT0wKXsKLWlmKCF0aGlzLmJvcmRlcnMpewotdGhpcy5ib3JkZXJzPXRydWU7Ci19ZWxzZXsKLXRoaXMuYm9yZGVycz1mYWxzZTsKLX0KLWZvcih2YXIgaT0wO2k8XzI1MC5sZW5ndGg7aSsrKXsKLWlmKHRoaXMuYm9yZGVycyl7Ci1YaW5oYS5fYWRkQ2xhc3MoXzI1MFtpXSwiaHRtdGFibGVib3JkZXJzIik7Ci19ZWxzZXsKLVhpbmhhLl9yZW1vdmVDbGFzcyhfMjUwW2ldLCJodG10YWJsZWJvcmRlcnMiKTsKLX0KLX0KLX0KLXJldHVybiB0cnVlOwotfTsKLVhpbmhhLmFkZENvcmVDU1M9ZnVuY3Rpb24oaHRtbCl7Ci12YXIgXzI1Mz0iPHN0eWxlIHRpdGxlPVwiWGluaGFJbnRlcm5hbENTU1wiIHR5cGU9XCJ0ZXh0L2Nzc1wiPiIrIi5odG10YWJsZWJvcmRlcnMsIC5odG10YWJsZWJvcmRlcnMgdGQsIC5odG10YWJsZWJvcmRlcnMgdGgge2JvcmRlciA6IDFweCBkYXNoZWQgbGlnaHRncmV5ICEgaW1wb3J0YW50O31cbiIrImh0bWwsIGJvZHkgeyBib3JkZXI6IDBweDsgfSBcbiIrImJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOyB9IFxuIisiaW1nLCBociB7IGN1cnNvcjogZGVmYXVsdCB9IFxuIisiPC9zdHlsZT5cbiI7Ci1pZihodG1sJiYvPGhlYWQ+L2kudGVzdChodG1sKSl7Ci1yZXR1cm4gaHRtbC5yZXBsYWNlKC88aGVhZD4vaSwiPGhlYWQ+IitfMjUzKTsKLX1lbHNlewotaWYoaHRtbCl7Ci1yZXR1cm4gXzI1MytodG1sOwotfWVsc2V7Ci1yZXR1cm4gXzI1MzsKLX0KLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuYWRkRWRpdG9yU3R5bGVzaGVldD1mdW5jdGlvbihfMjU0KXsKLXZhciBfMjU1PXRoaXMuX2RvYy5jcmVhdGVFbGVtZW50KCJsaW5rIik7Ci1fMjU1LnJlbD0ic3R5bGVzaGVldCI7Ci1fMjU1LnR5cGU9InRleHQvY3NzIjsKLV8yNTUudGl0bGU9IlhpbmhhSW50ZXJuYWxDU1MiOwotXzI1NS5ocmVmPV8yNTQ7Ci10aGlzLl9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIkhFQUQiKVswXS5hcHBlbmRDaGlsZChfMjU1KTsKLX07Ci1YaW5oYS5zdHJpcENvcmVDU1M9ZnVuY3Rpb24oaHRtbCl7Ci1yZXR1cm4gaHRtbC5yZXBsYWNlKC88c3R5bGVbXj5dK3RpdGxlPSJYaW5oYUludGVybmFsQ1NTIigufFxuKSo/PFwvc3R5bGU+L2lnLCIiKS5yZXBsYWNlKC88bGlua1tePl0rdGl0bGU9IlhpbmhhSW50ZXJuYWxDU1MiKC58XG4pKj8+L2lnLCIiKTsKLX07Ci1YaW5oYS5fcmVtb3ZlQ2xhc3M9ZnVuY3Rpb24oZWwsXzI1OCl7Ci1pZighKGVsJiZlbC5jbGFzc05hbWUpKXsKLXJldHVybjsKLX0KLXZhciBjbHM9ZWwuY2xhc3NOYW1lLnNwbGl0KCIgIik7Ci12YXIgYXI9W107Ci1mb3IodmFyIGk9Y2xzLmxlbmd0aDtpPjA7KXsKLWlmKGNsc1stLWldIT1fMjU4KXsKLWFyW2FyLmxlbmd0aF09Y2xzW2ldOwotfQotfQotZWwuY2xhc3NOYW1lPWFyLmpvaW4oIiAiKTsKLX07Ci1YaW5oYS5fYWRkQ2xhc3M9ZnVuY3Rpb24oZWwsXzI1ZCl7Ci1YaW5oYS5fcmVtb3ZlQ2xhc3MoZWwsXzI1ZCk7Ci1lbC5jbGFzc05hbWUrPSIgIitfMjVkOwotfTsKLVhpbmhhLmFkZENsYXNzZXM9ZnVuY3Rpb24oZWwsXzI1Zil7Ci1pZihlbCE9PW51bGwpewotdmFyIF8yNjA9ZWwuY2xhc3NOYW1lLnRyaW0oKS5zcGxpdCgiICIpOwotdmFyIG91cnM9XzI1Zi5zcGxpdCgiICIpOwotZm9yKHZhciB4PTA7eDxvdXJzLmxlbmd0aDt4KyspewotdmFyIF8yNjM9ZmFsc2U7Ci1mb3IodmFyIGk9MDtfMjYzPT09ZmFsc2UmJmk8XzI2MC5sZW5ndGg7aSsrKXsKLWlmKF8yNjBbaV09PW91cnNbeF0pewotXzI2Mz10cnVlOwotfQotfQotaWYoXzI2Mz09PWZhbHNlKXsKLV8yNjBbXzI2MC5sZW5ndGhdPW91cnNbeF07Ci19Ci19Ci1lbC5jbGFzc05hbWU9XzI2MC5qb2luKCIgIikudHJpbSgpOwotfQotfTsKLVhpbmhhLnJlbW92ZUNsYXNzZXM9ZnVuY3Rpb24oZWwsXzI2Nil7Ci12YXIgXzI2Nz1lbC5jbGFzc05hbWUudHJpbSgpLnNwbGl0KCk7Ci12YXIgXzI2OD1bXTsKLXZhciBfMjY5PV8yNjYudHJpbSgpLnNwbGl0KCk7Ci1mb3IodmFyIGk9MDtpPF8yNjcubGVuZ3RoO2krKyl7Ci12YXIgXzI2Yj1mYWxzZTsKLWZvcih2YXIgeD0wO3g8XzI2OS5sZW5ndGgmJiFfMjZiO3grKyl7Ci1pZihfMjY3W2ldPT1fMjY5W3hdKXsKLV8yNmI9dHJ1ZTsKLX0KLX0KLWlmKCFfMjZiKXsKLV8yNjhbXzI2OC5sZW5ndGhdPV8yNjdbaV07Ci19Ci19Ci1yZXR1cm4gXzI2OC5qb2luKCIgIik7Ci19OwotWGluaGEuYWRkQ2xhc3M9WGluaGEuX2FkZENsYXNzOwotWGluaGEucmVtb3ZlQ2xhc3M9WGluaGEuX3JlbW92ZUNsYXNzOwotWGluaGEuX2FkZENsYXNzZXM9WGluaGEuYWRkQ2xhc3NlczsKLVhpbmhhLl9yZW1vdmVDbGFzc2VzPVhpbmhhLnJlbW92ZUNsYXNzZXM7Ci1YaW5oYS5faGFzQ2xhc3M9ZnVuY3Rpb24oZWwsXzI2ZSl7Ci1pZighKGVsJiZlbC5jbGFzc05hbWUpKXsKLXJldHVybiBmYWxzZTsKLX0KLXZhciBjbHM9ZWwuY2xhc3NOYW1lLnNwbGl0KCIgIik7Ci1mb3IodmFyIGk9Y2xzLmxlbmd0aDtpPjA7KXsKLWlmKGNsc1stLWldPT1fMjZlKXsKLXJldHVybiB0cnVlOwotfQotfQotcmV0dXJuIGZhbHNlOwotfTsKLVhpbmhhLl9wb3N0YmFja19zZW5kX2NoYXJzZXQ9dHJ1ZTsKLVhpbmhhLl9wb3N0YmFjaz1mdW5jdGlvbih1cmwsZGF0YSxfMjczLF8yNzQpewotdmFyIHJlcT1udWxsOwotcmVxPVhpbmhhLmdldFhNTEhUVFBSZXF1ZXN0T2JqZWN0KCk7Ci12YXIgXzI3Nj0iIjsKLWlmKHR5cGVvZiBkYXRhPT0ic3RyaW5nIil7Ci1fMjc2PWRhdGE7Ci19ZWxzZXsKLWlmKHR5cGVvZiBkYXRhPT0ib2JqZWN0Iil7Ci1mb3IodmFyIGkgaW4gZGF0YSl7Ci1fMjc2Kz0oXzI3Ni5sZW5ndGg/IiYiOiIiKStpKyI9IitlbmNvZGVVUklDb21wb25lbnQoZGF0YVtpXSk7Ci19Ci19Ci19Ci1mdW5jdGlvbiBjYWxsQmFjaygpewotaWYocmVxLnJlYWR5U3RhdGU9PTQpewotaWYoKChyZXEuc3RhdHVzLzEwMCk9PTIpfHxYaW5oYS5pc1J1bkxvY2FsbHkmJnJlcS5zdGF0dXM9PT0wKXsKLWlmKHR5cGVvZiBfMjczPT0iZnVuY3Rpb24iKXsKLV8yNzMocmVxLnJlc3BvbnNlVGV4dCxyZXEpOwotfQotfWVsc2V7Ci1pZihYaW5oYS5fcG9zdGJhY2tfc2VuZF9jaGFyc2V0KXsKLVhpbmhhLl9wb3N0YmFja19zZW5kX2NoYXJzZXQ9ZmFsc2U7Ci1YaW5oYS5fcG9zdGJhY2sodXJsLGRhdGEsXzI3MyxfMjc0KTsKLX1lbHNlewotaWYodHlwZW9mIF8yNzQ9PSJmdW5jdGlvbiIpewotXzI3NChyZXEpOwotfWVsc2V7Ci1hbGVydCgiQW4gZXJyb3IgaGFzIG9jY3VycmVkOiAiK3JlcS5zdGF0dXNUZXh0KyJcblVSTDogIit1cmwpOwotfQotfQotfQotfQotfTsKLXJlcS5vbnJlYWR5c3RhdGVjaGFuZ2U9Y2FsbEJhY2s7Ci1yZXEub3BlbigiUE9TVCIsdXJsLHRydWUpOwotcmVxLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIrKFhpbmhhLl9wb3N0YmFja19zZW5kX2NoYXJzZXQ/IjsgY2hhcnNldD1VVEYtOCI6IiIpKTsKLXJlcS5zZW5kKF8yNzYpOwotfTsKLVhpbmhhLl9nZXRiYWNrPWZ1bmN0aW9uKHVybCxfMjc5LF8yN2EpewotdmFyIHJlcT1udWxsOwotcmVxPVhpbmhhLmdldFhNTEhUVFBSZXF1ZXN0T2JqZWN0KCk7Ci1mdW5jdGlvbiBjYWxsQmFjaygpewotaWYocmVxLnJlYWR5U3RhdGU9PTQpewotaWYoKChyZXEuc3RhdHVzLzEwMCk9PTIpfHxYaW5oYS5pc1J1bkxvY2FsbHkmJnJlcS5zdGF0dXM9PT0wKXsKLV8yNzkocmVxLnJlc3BvbnNlVGV4dCxyZXEpOwotfWVsc2V7Ci1pZih0eXBlb2YgXzI3YT09ImZ1bmN0aW9uIil7Ci1fMjdhKHJlcSk7Ci19ZWxzZXsKLWFsZXJ0KCJBbiBlcnJvciBoYXMgb2NjdXJyZWQ6ICIrcmVxLnN0YXR1c1RleHQrIlxuVVJMOiAiK3VybCk7Ci19Ci19Ci19Ci19OwotcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZT1jYWxsQmFjazsKLXJlcS5vcGVuKCJHRVQiLHVybCx0cnVlKTsKLXJlcS5zZW5kKG51bGwpOwotfTsKLVhpbmhhLnBpbmc9ZnVuY3Rpb24odXJsLF8yN2QsXzI3ZSl7Ci12YXIgcmVxPW51bGw7Ci1yZXE9WGluaGEuZ2V0WE1MSFRUUFJlcXVlc3RPYmplY3QoKTsKLWZ1bmN0aW9uIGNhbGxCYWNrKCl7Ci1pZihyZXEucmVhZHlTdGF0ZT09NCl7Ci1pZigoKHJlcS5zdGF0dXMvMTAwKT09Mil8fFhpbmhhLmlzUnVuTG9jYWxseSYmcmVxLnN0YXR1cz09PTApewotaWYoXzI3ZCl7Ci1fMjdkKHJlcSk7Ci19Ci19ZWxzZXsKLWlmKF8yN2UpewotXzI3ZShyZXEpOwotfQotfQotfQotfTsKLXZhciBfMjgwPSJHRVQiOwotcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZT1jYWxsQmFjazsKLXJlcS5vcGVuKF8yODAsdXJsLHRydWUpOwotcmVxLnNlbmQobnVsbCk7Ci19OwotWGluaGEuX2dldHVybGNvbnRlbnQ9ZnVuY3Rpb24odXJsLF8yODIpewotdmFyIHJlcT1udWxsOwotcmVxPVhpbmhhLmdldFhNTEhUVFBSZXF1ZXN0T2JqZWN0KCk7Ci1yZXEub3BlbigiR0VUIix1cmwsZmFsc2UpOwotcmVxLnNlbmQobnVsbCk7Ci1pZigoKHJlcS5zdGF0dXMvMTAwKT09Mil8fFhpbmhhLmlzUnVuTG9jYWxseSYmcmVxLnN0YXR1cz09PTApewotcmV0dXJuIChfMjgyKT9yZXEucmVzcG9uc2VYTUw6cmVxLnJlc3BvbnNlVGV4dDsKLX1lbHNlewotcmV0dXJuICIiOwotfQotfTsKLWlmKHR5cGVvZiBkdW1wVmFsdWVzPT0idW5kZWZpbmVkIil7Ci1kdW1wVmFsdWVzPWZ1bmN0aW9uKG8pewotdmFyIHM9IiI7Ci1mb3IodmFyIHByb3AgaW4gbyl7Ci1pZih3aW5kb3cuY29uc29sZSYmdHlwZW9mIHdpbmRvdy5jb25zb2xlLmxvZz09ImZ1bmN0aW9uIil7Ci1pZih0eXBlb2YgY29uc29sZS5maXJlYnVnIT0idW5kZWZpbmVkIil7Ci1jb25zb2xlLmxvZyhvKTsKLX1lbHNlewotY29uc29sZS5sb2cocHJvcCsiID0gIitvW3Byb3BdKyJcbiIpOwotfQotfWVsc2V7Ci1zKz1wcm9wKyIgPSAiK29bcHJvcF0rIlxuIjsKLX0KLX0KLWlmKHMpewotaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVycm9ycyIpKXsKLWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJlcnJvcnMiKS52YWx1ZSs9czsKLX1lbHNlewotdmFyIHg9d2luZG93Lm9wZW4oIiIsImRlYnVnZ2VyIik7Ci14LmRvY3VtZW50LndyaXRlKCI8cHJlPiIrcysiPC9wcmU+Iik7Ci19Ci19Ci19OwotfQotaWYoIUFycmF5LnByb3RvdHlwZS5jb250YWlucyl7Ci1BcnJheS5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oXzI4OCl7Ci12YXIgXzI4OT10aGlzOwotZm9yKHZhciBpPTA7aTxfMjg5Lmxlbmd0aDtpKyspewotaWYoXzI4OD09XzI4OVtpXSl7Ci1yZXR1cm4gdHJ1ZTsKLX0KLX0KLXJldHVybiBmYWxzZTsKLX07Ci19Ci1pZighQXJyYXkucHJvdG90eXBlLmluZGV4T2YpewotQXJyYXkucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oXzI4Yil7Ci12YXIgXzI4Yz10aGlzOwotZm9yKHZhciBpPTA7aTxfMjhjLmxlbmd0aDtpKyspewotaWYoXzI4Yj09XzI4Y1tpXSl7Ci1yZXR1cm4gaTsKLX0KLX0KLXJldHVybiBudWxsOwotfTsKLX0KLWlmKCFBcnJheS5wcm90b3R5cGUuYXBwZW5kKXsKLUFycmF5LnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oYSl7Ci1mb3IodmFyIGk9MDtpPGEubGVuZ3RoO2krKyl7Ci10aGlzLnB1c2goYVtpXSk7Ci19Ci1yZXR1cm4gdGhpczsKLX07Ci19Ci1pZighQXJyYXkucHJvdG90eXBlLmZvckVhY2gpewotQXJyYXkucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oZm4pewotdmFyIGxlbj10aGlzLmxlbmd0aDsKLWlmKHR5cGVvZiBmbiE9ImZ1bmN0aW9uIil7Ci10aHJvdyBuZXcgVHlwZUVycm9yKCk7Ci19Ci12YXIgXzI5Mj1hcmd1bWVudHNbMV07Ci1mb3IodmFyIGk9MDtpPGxlbjtpKyspewotaWYoaSBpbiB0aGlzKXsKLWZuLmNhbGwoXzI5Mix0aGlzW2ldLGksdGhpcyk7Ci19Ci19Ci19OwotfQotWGluaGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZT1mdW5jdGlvbihlbCxfMjk1KXsKLWlmKGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUpewotcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGVsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXzI5NSkpOwotfWVsc2V7Ci12YXIgZWxzPWVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci12YXIgXzI5Nz1bXTsKLXZhciBfMjk4OwotZm9yKHZhciBpPTA7aTxlbHMubGVuZ3RoO2krKyl7Ci1fMjk4PWVsc1tpXS5jbGFzc05hbWUuc3BsaXQoIiAiKTsKLWlmKF8yOTguY29udGFpbnMoXzI5NSkpewotXzI5Ny5wdXNoKGVsc1tpXSk7Ci19Ci19Ci1yZXR1cm4gXzI5NzsKLX0KLX07Ci1YaW5oYS5hcnJheUNvbnRhaW5zQXJyYXk9ZnVuY3Rpb24oYTEsYTIpewotdmFyIF8yOWM9dHJ1ZTsKLWZvcih2YXIgeD0wO3g8YTIubGVuZ3RoO3grKyl7Ci12YXIgXzI5ZT1mYWxzZTsKLWZvcih2YXIgaT0wO2k8YTEubGVuZ3RoO2krKyl7Ci1pZihhMVtpXT09YTJbeF0pewotXzI5ZT10cnVlOwotYnJlYWs7Ci19Ci19Ci1pZighXzI5ZSl7Ci1fMjljPWZhbHNlOwotYnJlYWs7Ci19Ci19Ci1yZXR1cm4gXzI5YzsKLX07Ci1YaW5oYS5hcnJheUZpbHRlcj1mdW5jdGlvbihhMSxfMmExKXsKLXZhciBfMmEyPVtdOwotZm9yKHZhciB4PTA7eDxhMS5sZW5ndGg7eCsrKXsKLWlmKF8yYTEoYTFbeF0pKXsKLV8yYTJbXzJhMi5sZW5ndGhdPWExW3hdOwotfQotfQotcmV0dXJuIF8yYTI7Ci19OwotWGluaGEuY29sbGVjdGlvblRvQXJyYXk9ZnVuY3Rpb24oXzJhNCl7Ci10cnl7Ci1yZXR1cm4gXzJhNC5sZW5ndGg/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoXzJhNCk6W107Ci19Ci1jYXRjaChlKXsKLX0KLXZhciBfMmE1PVtdOwotZm9yKHZhciBpPTA7aTxfMmE0Lmxlbmd0aDtpKyspewotXzJhNS5wdXNoKF8yYTQuaXRlbShpKSk7Ci19Ci1yZXR1cm4gXzJhNTsKLX07Ci1YaW5oYS51bmlxX2NvdW50PTA7Ci1YaW5oYS51bmlxPWZ1bmN0aW9uKF8yYTcpewotcmV0dXJuIF8yYTcrWGluaGEudW5pcV9jb3VudCsrOwotfTsKLVhpbmhhLl9sb2FkbGFuZz1mdW5jdGlvbihfMmE4LHVybCl7Ci12YXIgbGFuZzsKLWlmKHR5cGVvZiBfZWRpdG9yX2xjYmFja2VuZD09InN0cmluZyIpewotdXJsPV9lZGl0b3JfbGNiYWNrZW5kOwotdXJsPXVybC5yZXBsYWNlKC8lbGFuZyUvLF9lZGl0b3JfbGFuZyk7Ci11cmw9dXJsLnJlcGxhY2UoLyVjb250ZXh0JS8sXzJhOCk7Ci19ZWxzZXsKLWlmKCF1cmwpewotaWYoXzJhOCE9IlhpbmhhIil7Ci11cmw9WGluaGEuZ2V0UGx1Z2luRGlyKF8yYTgpKyIvbGFuZy8iK19lZGl0b3JfbGFuZysiLmpzIjsKLX1lbHNlewotWGluaGEuc2V0TG9hZGluZ01lc3NhZ2UoIkxvYWRpbmcgbGFuZ3VhZ2UiKTsKLXVybD1fZWRpdG9yX3VybCsibGFuZy8iK19lZGl0b3JfbGFuZysiLmpzIjsKLX0KLX0KLX0KLXZhciBfMmFiPVhpbmhhLl9nZXR1cmxjb250ZW50KHVybCk7Ci1pZihfMmFiIT09IiIpewotdHJ5ewotZXZhbCgibGFuZyA9ICIrXzJhYik7Ci19Ci1jYXRjaChleCl7Ci1hbGVydCgiRXJyb3IgcmVhZGluZyBMYW5ndWFnZS1GaWxlICgiK3VybCsiKTpcbiIrRXJyb3IudG9TdHJpbmcoKSk7Ci1sYW5nPXt9OwotfQotfWVsc2V7Ci1sYW5nPXt9OwotfQotcmV0dXJuIGxhbmc7Ci19OwotWGluaGEuX2xjPWZ1bmN0aW9uKF8yYWMsXzJhZCxfMmFlKXsKLXZhciB1cmwscmV0OwotaWYodHlwZW9mIF8yYWQ9PSJvYmplY3QiJiZfMmFkLnVybCYmXzJhZC5jb250ZXh0KXsKLXVybD1fMmFkLnVybCtfZWRpdG9yX2xhbmcrIi5qcyI7Ci1fMmFkPV8yYWQuY29udGV4dDsKLX0KLXZhciBtPW51bGw7Ci1pZih0eXBlb2YgXzJhYz09InN0cmluZyIpewotbT1fMmFjLm1hdGNoKC9cJCguKj8pPSguKj8pXCQvZyk7Ci19Ci1pZihtKXsKLWlmKCFfMmFlKXsKLV8yYWU9e307Ci19Ci1mb3IodmFyIGk9MDtpPG0ubGVuZ3RoO2krKyl7Ci12YXIgbj1tW2ldLm1hdGNoKC9cJCguKj8pPSguKj8pXCQvKTsKLV8yYWVbblsxXV09blsyXTsKLV8yYWM9XzJhYy5yZXBsYWNlKG5bMF0sIiQiK25bMV0pOwotfQotfQotaWYoX2VkaXRvcl9sYW5nPT0iZW4iKXsKLWlmKHR5cGVvZiBfMmFjPT0ib2JqZWN0IiYmXzJhYy5zdHJpbmcpewotcmV0PV8yYWMuc3RyaW5nOwotfWVsc2V7Ci1yZXQ9XzJhYzsKLX0KLX1lbHNlewotaWYodHlwZW9mIFhpbmhhLl9sY19jYXRhbG9nPT0idW5kZWZpbmVkIil7Ci1YaW5oYS5fbGNfY2F0YWxvZz1bXTsKLX0KLWlmKHR5cGVvZiBfMmFkPT0idW5kZWZpbmVkIil7Ci1fMmFkPSJYaW5oYSI7Ci19Ci1pZih0eXBlb2YgWGluaGEuX2xjX2NhdGFsb2dbXzJhZF09PSJ1bmRlZmluZWQiKXsKLVhpbmhhLl9sY19jYXRhbG9nW18yYWRdPVhpbmhhLl9sb2FkbGFuZyhfMmFkLHVybCk7Ci19Ci12YXIga2V5OwotaWYodHlwZW9mIF8yYWM9PSJvYmplY3QiJiZfMmFjLmtleSl7Ci1rZXk9XzJhYy5rZXk7Ci19ZWxzZXsKLWlmKHR5cGVvZiBfMmFjPT0ib2JqZWN0IiYmXzJhYy5zdHJpbmcpewota2V5PV8yYWMuc3RyaW5nOwotfWVsc2V7Ci1rZXk9XzJhYzsKLX0KLX0KLWlmKHR5cGVvZiBYaW5oYS5fbGNfY2F0YWxvZ1tfMmFkXVtrZXldPT0idW5kZWZpbmVkIil7Ci1pZihfMmFkPT0iWGluaGEiKXsKLWlmKHR5cGVvZiBfMmFjPT0ib2JqZWN0IiYmXzJhYy5zdHJpbmcpewotcmV0PV8yYWMuc3RyaW5nOwotfWVsc2V7Ci1yZXQ9XzJhYzsKLX0KLX1lbHNlewotcmV0dXJuIFhpbmhhLl9sYyhfMmFjLCJYaW5oYSIsXzJhZSk7Ci19Ci19ZWxzZXsKLXJldD1YaW5oYS5fbGNfY2F0YWxvZ1tfMmFkXVtrZXldOwotfQotfQotaWYodHlwZW9mIF8yYWM9PSJvYmplY3QiJiZfMmFjLnJlcGxhY2UpewotXzJhZT1fMmFjLnJlcGxhY2U7Ci19Ci1pZih0eXBlb2YgXzJhZSE9InVuZGVmaW5lZCIpewotZm9yKGkgaW4gXzJhZSl7Ci1yZXQ9cmV0LnJlcGxhY2UoIiQiK2ksXzJhZVtpXSk7Ci19Ci19Ci1yZXR1cm4gcmV0OwotfTsKLVhpbmhhLmhhc0Rpc3BsYXllZENoaWxkcmVuPWZ1bmN0aW9uKGVsKXsKLXZhciBfMmI2PWVsLmNoaWxkTm9kZXM7Ci1mb3IodmFyIGk9MDtpPF8yYjYubGVuZ3RoO2krKyl7Ci1pZihfMmI2W2ldLnRhZ05hbWUpewotaWYoXzJiNltpXS5zdHlsZS5kaXNwbGF5IT0ibm9uZSIpewotcmV0dXJuIHRydWU7Ci19Ci19Ci19Ci1yZXR1cm4gZmFsc2U7Ci19OwotWGluaGEuX2xvYWRiYWNrPWZ1bmN0aW9uKHVybCxfMmI5LF8yYmEsXzJiYil7Ci1pZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh1cmwpKXsKLXJldHVybiB0cnVlOwotfQotdmFyIHQ9IVhpbmhhLmlzX2llPyJvbmxvYWQiOiJvbnJlYWR5c3RhdGVjaGFuZ2UiOwotdmFyIHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Ci1zLnR5cGU9InRleHQvamF2YXNjcmlwdCI7Ci1zLnNyYz11cmw7Ci1zLmlkPXVybDsKLWlmKF8yYjkpewotc1t0XT1mdW5jdGlvbigpewotaWYoWGluaGEuaXNfaWUmJighL2xvYWRlZHxjb21wbGV0ZS8udGVzdCh3aW5kb3cuZXZlbnQuc3JjRWxlbWVudC5yZWFkeVN0YXRlKSkpewotcmV0dXJuOwotfQotXzJiOS5jYWxsKF8yYmE/XzJiYTp0aGlzLF8yYmIpOwotc1t0XT1udWxsOwotfTsKLX0KLWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQocyk7Ci1yZXR1cm4gZmFsc2U7Ci19OwotWGluaGEubWFrZUVkaXRvcnM9ZnVuY3Rpb24oXzJiZSxfMmJmLF8yYzApewotaWYoIVhpbmhhLmlzU3VwcG9ydGVkQnJvd3Nlcil7Ci1yZXR1cm47Ci19Ci1pZih0eXBlb2YgXzJiZj09ImZ1bmN0aW9uIil7Ci1fMmJmPV8yYmYoKTsKLX0KLXZhciBfMmMxPXt9OwotdmFyIF8yYzI7Ci1mb3IodmFyIHg9MDt4PF8yYmUubGVuZ3RoO3grKyl7Ci1pZih0eXBlb2YgXzJiZVt4XT09InN0cmluZyIpewotXzJjMj1YaW5oYS5nZXRFbGVtZW50QnlJZCgidGV4dGFyZWEiLF8yYmVbeF0pOwotaWYoIV8yYzIpewotXzJiZVt4XT1udWxsOwotY29udGludWU7Ci19Ci19ZWxzZXsKLWlmKHR5cGVvZiBfMmJlW3hdPT0ib2JqZWN0IiYmXzJiZVt4XS50YWdOYW1lJiZfMmJlW3hdLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09InRleHRhcmVhIil7Ci1fMmMyPV8yYmVbeF07Ci1pZighXzJjMi5pZCl7Ci1fMmMyLmlkPSJ4aW5oYV9pZF8iK3g7Ci19Ci19Ci19Ci12YXIgXzJjND1uZXcgWGluaGEoXzJjMixYaW5oYS5jbG9uZU9iamVjdChfMmJmKSk7Ci1fMmM0LnJlZ2lzdGVyUGx1Z2lucyhfMmMwKTsKLV8yYzFbXzJjMi5pZF09XzJjNDsKLX0KLXJldHVybiBfMmMxOwotfTsKLVhpbmhhLnN0YXJ0RWRpdG9ycz1mdW5jdGlvbihfMmM1KXsKLWlmKCFYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIpewotcmV0dXJuOwotfQotZm9yKHZhciBpIGluIF8yYzUpewotaWYoXzJjNVtpXS5nZW5lcmF0ZSl7Ci1fMmM1W2ldLmdlbmVyYXRlKCk7Ci19Ci19Ci19OwotWGluaGEucHJvdG90eXBlLnJlZ2lzdGVyUGx1Z2lucz1mdW5jdGlvbihfMmM3KXsKLWlmKCFYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIpewotcmV0dXJuOwotfQotaWYoXzJjNyl7Ci1mb3IodmFyIGk9MDtpPF8yYzcubGVuZ3RoO2krKyl7Ci10aGlzLnNldExvYWRpbmdNZXNzYWdlKFhpbmhhLl9sYygiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iLCJYaW5oYSIseyJwbHVnaW4iOl8yYzdbaV19KSk7Ci10aGlzLnJlZ2lzdGVyUGx1Z2luKF8yYzdbaV0pOwotfQotfQotfTsKLVhpbmhhLmJhc2U2NF9lbmNvZGU9ZnVuY3Rpb24oXzJjOSl7Ci12YXIgXzJjYT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iOwotdmFyIF8yY2I9IiI7Ci12YXIgY2hyMSxjaHIyLGNocjM7Ci12YXIgZW5jMSxlbmMyLGVuYzMsZW5jNDsKLXZhciBpPTA7Ci1kb3sKLWNocjE9XzJjOS5jaGFyQ29kZUF0KGkrKyk7Ci1jaHIyPV8yYzkuY2hhckNvZGVBdChpKyspOwotY2hyMz1fMmM5LmNoYXJDb2RlQXQoaSsrKTsKLWVuYzE9Y2hyMT4+MjsKLWVuYzI9KChjaHIxJjMpPDw0KXwoY2hyMj4+NCk7Ci1lbmMzPSgoY2hyMiYxNSk8PDIpfChjaHIzPj42KTsKLWVuYzQ9Y2hyMyY2MzsKLWlmKGlzTmFOKGNocjIpKXsKLWVuYzM9ZW5jND02NDsKLX1lbHNlewotaWYoaXNOYU4oY2hyMykpewotZW5jND02NDsKLX0KLX0KLV8yY2I9XzJjYitfMmNhLmNoYXJBdChlbmMxKStfMmNhLmNoYXJBdChlbmMyKStfMmNhLmNoYXJBdChlbmMzKStfMmNhLmNoYXJBdChlbmM0KTsKLX13aGlsZShpPF8yYzkubGVuZ3RoKTsKLXJldHVybiBfMmNiOwotfTsKLVhpbmhhLmJhc2U2NF9kZWNvZGU9ZnVuY3Rpb24oXzJkNCl7Ci12YXIgXzJkNT0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iOwotdmFyIF8yZDY9IiI7Ci12YXIgY2hyMSxjaHIyLGNocjM7Ci12YXIgZW5jMSxlbmMyLGVuYzMsZW5jNDsKLXZhciBpPTA7Ci1fMmQ0PV8yZDQucmVwbGFjZSgvW15BLVphLXowLTlcK1wvXD1dL2csIiIpOwotZG97Ci1lbmMxPV8yZDUuaW5kZXhPZihfMmQ0LmNoYXJBdChpKyspKTsKLWVuYzI9XzJkNS5pbmRleE9mKF8yZDQuY2hhckF0KGkrKykpOwotZW5jMz1fMmQ1LmluZGV4T2YoXzJkNC5jaGFyQXQoaSsrKSk7Ci1lbmM0PV8yZDUuaW5kZXhPZihfMmQ0LmNoYXJBdChpKyspKTsKLWNocjE9KGVuYzE8PDIpfChlbmMyPj40KTsKLWNocjI9KChlbmMyJjE1KTw8NCl8KGVuYzM+PjIpOwotY2hyMz0oKGVuYzMmMyk8PDYpfGVuYzQ7Ci1fMmQ2PV8yZDYrU3RyaW5nLmZyb21DaGFyQ29kZShjaHIxKTsKLWlmKGVuYzMhPTY0KXsKLV8yZDY9XzJkNitTdHJpbmcuZnJvbUNoYXJDb2RlKGNocjIpOwotfQotaWYoZW5jNCE9NjQpewotXzJkNj1fMmQ2K1N0cmluZy5mcm9tQ2hhckNvZGUoY2hyMyk7Ci19Ci19d2hpbGUoaTxfMmQ0Lmxlbmd0aCk7Ci1yZXR1cm4gXzJkNjsKLX07Ci1YaW5oYS5yZW1vdmVGcm9tUGFyZW50PWZ1bmN0aW9uKGVsKXsKLWlmKCFlbC5wYXJlbnROb2RlKXsKLXJldHVybjsKLX0KLXZhciBwTj1lbC5wYXJlbnROb2RlOwotcmV0dXJuIHBOLnJlbW92ZUNoaWxkKGVsKTsKLX07Ci1YaW5oYS5oYXNQYXJlbnROb2RlPWZ1bmN0aW9uKGVsKXsKLWlmKGVsLnBhcmVudE5vZGUpewotaWYoZWwucGFyZW50Tm9kZS5ub2RlVHlwZT09MTEpewotcmV0dXJuIGZhbHNlOwotfQotcmV0dXJuIHRydWU7Ci19Ci1yZXR1cm4gZmFsc2U7Ci19OwotWGluaGEudmlld3BvcnRTaXplPWZ1bmN0aW9uKF8yZTIpewotXzJlMj0oXzJlMik/XzJlMjp3aW5kb3c7Ci12YXIgeCx5OwotaWYoXzJlMi5pbm5lckhlaWdodCl7Ci14PV8yZTIuaW5uZXJXaWR0aDsKLXk9XzJlMi5pbm5lckhlaWdodDsKLX1lbHNlewotaWYoXzJlMi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJl8yZTIuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCl7Ci14PV8yZTIuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOwoteT1fMmUyLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7Ci19ZWxzZXsKLWlmKF8yZTIuZG9jdW1lbnQuYm9keSl7Ci14PV8yZTIuZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aDsKLXk9XzJlMi5kb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodDsKLX0KLX0KLX0KLXJldHVybiB7IngiOngsInkiOnl9OwotfTsKLVhpbmhhLnBhZ2VTaXplPWZ1bmN0aW9uKF8yZTUpewotXzJlNT0oXzJlNSk/XzJlNTp3aW5kb3c7Ci12YXIgeCx5OwotdmFyIF8yZTg9XzJlNS5kb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDsKLXZhciBfMmU5PV8yZTUuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodDsKLWlmKF8yZTg+XzJlOSl7Ci14PV8yZTUuZG9jdW1lbnQuYm9keS5zY3JvbGxXaWR0aDsKLXk9XzJlNS5kb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodDsKLX1lbHNlewoteD1fMmU1LmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxXaWR0aDsKLXk9XzJlNS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0OwotfQotcmV0dXJuIHsieCI6eCwieSI6eX07Ci19OwotWGluaGEucHJvdG90eXBlLnNjcm9sbFBvcz1mdW5jdGlvbihfMmVhKXsKLV8yZWE9KF8yZWEpP18yZWE6d2luZG93OwotdmFyIHgseTsKLWlmKHR5cGVvZiBfMmVhLnBhZ2VZT2Zmc2V0IT0idW5kZWZpbmVkIil7Ci14PV8yZWEucGFnZVhPZmZzZXQ7Ci15PV8yZWEucGFnZVlPZmZzZXQ7Ci19ZWxzZXsKLWlmKF8yZWEuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZ0eXBlb2YgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCE9InVuZGVmaW5lZCIpewoteD1fMmVhLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0OwoteT1fMmVhLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7Ci19ZWxzZXsKLWlmKF8yZWEuZG9jdW1lbnQuYm9keSl7Ci14PV8yZWEuZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0OwoteT1fMmVhLmRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOwotfQotfQotfQotcmV0dXJuIHsieCI6eCwieSI6eX07Ci19OwotWGluaGEuZ2V0RWxlbWVudFRvcExlZnQ9ZnVuY3Rpb24oXzJlZCl7Ci12YXIgXzJlZT0wOwotdmFyIF8yZWY9MDsKLWlmKF8yZWQub2Zmc2V0UGFyZW50KXsKLV8yZWU9XzJlZC5vZmZzZXRMZWZ0OwotXzJlZj1fMmVkLm9mZnNldFRvcDsKLXdoaWxlKF8yZWQ9XzJlZC5vZmZzZXRQYXJlbnQpewotXzJlZSs9XzJlZC5vZmZzZXRMZWZ0OwotXzJlZis9XzJlZC5vZmZzZXRUb3A7Ci19Ci19Ci1yZXR1cm4ge3RvcDpfMmVmLGxlZnQ6XzJlZX07Ci19OwotWGluaGEuZmluZFBvc1g9ZnVuY3Rpb24ob2JqKXsKLXZhciBfMmYxPTA7Ci1pZihvYmoub2Zmc2V0UGFyZW50KXsKLXJldHVybiBYaW5oYS5nZXRFbGVtZW50VG9wTGVmdChvYmopLmxlZnQ7Ci19ZWxzZXsKLWlmKG9iai54KXsKLV8yZjErPW9iai54OwotfQotfQotcmV0dXJuIF8yZjE7Ci19OwotWGluaGEuZmluZFBvc1k9ZnVuY3Rpb24ob2JqKXsKLXZhciBfMmYzPTA7Ci1pZihvYmoub2Zmc2V0UGFyZW50KXsKLXJldHVybiBYaW5oYS5nZXRFbGVtZW50VG9wTGVmdChvYmopLnRvcDsKLX1lbHNlewotaWYob2JqLnkpewotXzJmMys9b2JqLnk7Ci19Ci19Ci1yZXR1cm4gXzJmMzsKLX07Ci1YaW5oYS5jcmVhdGVMb2FkaW5nTWVzc2FnZXM9ZnVuY3Rpb24oXzJmNCl7Ci1pZihYaW5oYS5sb2FkaW5nTWVzc2FnZXN8fCFYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIpewotcmV0dXJuOwotfQotWGluaGEubG9hZGluZ01lc3NhZ2VzPVtdOwotZm9yKHZhciBpPTA7aTxfMmY0Lmxlbmd0aDtpKyspewotaWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKF8yZjRbaV0pKXsKLWNvbnRpbnVlOwotfQotWGluaGEubG9hZGluZ01lc3NhZ2VzLnB1c2goWGluaGEuY3JlYXRlTG9hZGluZ01lc3NhZ2UoWGluaGEuZ2V0RWxlbWVudEJ5SWQoInRleHRhcmVhIixfMmY0W2ldKSkpOwotfQotfTsKLVhpbmhhLmNyZWF0ZUxvYWRpbmdNZXNzYWdlPWZ1bmN0aW9uKF8yZjYsdGV4dCl7Ci1pZihkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZGluZ18iK18yZjYuaWQpfHwhWGluaGEuaXNTdXBwb3J0ZWRCcm93c2VyKXsKLXJldHVybjsKLX0KLXZhciBfMmY4PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotXzJmOC5pZD0ibG9hZGluZ18iK18yZjYuaWQ7Ci1fMmY4LmNsYXNzTmFtZT0ibG9hZGluZyI7Ci1fMmY4LnN0eWxlLmxlZnQ9KFhpbmhhLmZpbmRQb3NYKF8yZjYpK18yZjYub2Zmc2V0V2lkdGgvMiktMTA2KyJweCI7Ci1fMmY4LnN0eWxlLnRvcD0oWGluaGEuZmluZFBvc1koXzJmNikrXzJmNi5vZmZzZXRIZWlnaHQvMiktNTArInB4IjsKLXZhciBfMmY5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotXzJmOS5jbGFzc05hbWU9ImxvYWRpbmdfbWFpbiI7Ci1fMmY5LmlkPSJsb2FkaW5nX21haW5fIitfMmY2LmlkOwotXzJmOS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShYaW5oYS5fbGMoIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISIpKSk7Ci12YXIgXzJmYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLV8yZmEuY2xhc3NOYW1lPSJsb2FkaW5nX3N1YiI7Ci1fMmZhLmlkPSJsb2FkaW5nX3N1Yl8iK18yZjYuaWQ7Ci10ZXh0PXRleHQ/dGV4dDpYaW5oYS5fbGMoIkxvYWRpbmcgQ29yZSIpOwotXzJmYS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7Ci1fMmY4LmFwcGVuZENoaWxkKF8yZjkpOwotXzJmOC5hcHBlbmRDaGlsZChfMmZhKTsKLWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoXzJmOCk7Ci1YaW5oYS5mcmVlTGF0ZXIoXzJmOCk7Ci1YaW5oYS5mcmVlTGF0ZXIoXzJmOSk7Ci1YaW5oYS5mcmVlTGF0ZXIoXzJmYSk7Ci1yZXR1cm4gXzJmYTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuc2V0TG9hZGluZ01lc3NhZ2U9ZnVuY3Rpb24oXzJmYixfMmZjKXsKLWlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZGluZ19zdWJfIit0aGlzLl90ZXh0QXJlYS5pZCkpewotcmV0dXJuOwotfQotZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmdfbWFpbl8iK3RoaXMuX3RleHRBcmVhLmlkKS5pbm5lckhUTUw9XzJmYz9fMmZjOlhpbmhhLl9sYygiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIik7Ci1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZGluZ19zdWJfIit0aGlzLl90ZXh0QXJlYS5pZCkuaW5uZXJIVE1MPV8yZmI7Ci19OwotWGluaGEuc2V0TG9hZGluZ01lc3NhZ2U9ZnVuY3Rpb24oXzJmZCl7Ci1pZighWGluaGEubG9hZGluZ01lc3NhZ2VzKXsKLXJldHVybjsKLX0KLWZvcih2YXIgaT0wO2k8WGluaGEubG9hZGluZ01lc3NhZ2VzLmxlbmd0aDtpKyspewotWGluaGEubG9hZGluZ01lc3NhZ2VzW2ldLmlubmVySFRNTD1fMmZkOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5yZW1vdmVMb2FkaW5nTWVzc2FnZT1mdW5jdGlvbigpewotaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmdfIit0aGlzLl90ZXh0QXJlYS5pZCkpewotZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9hZGluZ18iK3RoaXMuX3RleHRBcmVhLmlkKSk7Ci19Ci19OwotWGluaGEucmVtb3ZlTG9hZGluZ01lc3NhZ2VzPWZ1bmN0aW9uKF8yZmYpewotZm9yKHZhciBpPTA7aTxfMmZmLmxlbmd0aDtpKyspewotaWYoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKF8yZmZbaV0pKXsKLWNvbnRpbnVlOwotfQotdmFyIG1haW49ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmdfIitkb2N1bWVudC5nZXRFbGVtZW50QnlJZChfMmZmW2ldKS5pZCk7Ci1tYWluLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobWFpbik7Ci19Ci1YaW5oYS5sb2FkaW5nTWVzc2FnZXM9bnVsbDsKLX07Ci1YaW5oYS50b0ZyZWU9W107Ci1YaW5oYS5mcmVlTGF0ZXI9ZnVuY3Rpb24ob2JqLHByb3ApewotWGluaGEudG9GcmVlLnB1c2goe286b2JqLHA6cHJvcH0pOwotfTsKLVhpbmhhLmZyZWU9ZnVuY3Rpb24ob2JqLHByb3ApewotaWYob2JqJiYhcHJvcCl7Ci1mb3IodmFyIHAgaW4gb2JqKXsKLVhpbmhhLmZyZWUob2JqLHApOwotfQotfWVsc2V7Ci1pZihvYmopewotaWYocHJvcC5pbmRleE9mKCJzcmMiKT09LTEpewotdHJ5ewotb2JqW3Byb3BdPW51bGw7Ci19Ci1jYXRjaCh4KXsKLX0KLX0KLX0KLX0KLX07Ci1YaW5oYS5jb2xsZWN0R2FyYmFnZUZvcklFPWZ1bmN0aW9uKCl7Ci1YaW5oYS5mbHVzaEV2ZW50cygpOwotZm9yKHZhciB4PTA7eDxYaW5oYS50b0ZyZWUubGVuZ3RoO3grKyl7Ci1YaW5oYS5mcmVlKFhpbmhhLnRvRnJlZVt4XS5vLFhpbmhhLnRvRnJlZVt4XS5wKTsKLVhpbmhhLnRvRnJlZVt4XS5vPW51bGw7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmluc2VydE5vZGVBdFNlbGVjdGlvbj1mdW5jdGlvbihfMzA4KXsKLVhpbmhhLm5vdEltcGxlbWVudGVkKCJpbnNlcnROb2RlQXRTZWxlY3Rpb24iKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0UGFyZW50RWxlbWVudD1mdW5jdGlvbihzZWwpewotWGluaGEubm90SW1wbGVtZW50ZWQoImdldFBhcmVudEVsZW1lbnQiKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuYWN0aXZlRWxlbWVudD1mdW5jdGlvbihzZWwpewotWGluaGEubm90SW1wbGVtZW50ZWQoImFjdGl2ZUVsZW1lbnQiKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuc2VsZWN0aW9uRW1wdHk9ZnVuY3Rpb24oc2VsKXsKLVhpbmhhLm5vdEltcGxlbWVudGVkKCJzZWxlY3Rpb25FbXB0eSIpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5zYXZlU2VsZWN0aW9uPWZ1bmN0aW9uKCl7Ci1YaW5oYS5ub3RJbXBsZW1lbnRlZCgic2F2ZVNlbGVjdGlvbiIpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5yZXN0b3JlU2VsZWN0aW9uPWZ1bmN0aW9uKF8zMGMpewotWGluaGEubm90SW1wbGVtZW50ZWQoInJlc3RvcmVTZWxlY3Rpb24iKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuc2VsZWN0Tm9kZUNvbnRlbnRzPWZ1bmN0aW9uKG5vZGUscG9zKXsKLVhpbmhhLm5vdEltcGxlbWVudGVkKCJzZWxlY3ROb2RlQ29udGVudHMiKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuaW5zZXJ0SFRNTD1mdW5jdGlvbihodG1sKXsKLVhpbmhhLm5vdEltcGxlbWVudGVkKCJpbnNlcnRIVE1MIik7Ci19OwotWGluaGEucHJvdG90eXBlLmdldFNlbGVjdGVkSFRNTD1mdW5jdGlvbigpewotWGluaGEubm90SW1wbGVtZW50ZWQoImdldFNlbGVjdGVkSFRNTCIpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXsKLVhpbmhhLm5vdEltcGxlbWVudGVkKCJnZXRTZWxlY3Rpb24iKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuY3JlYXRlUmFuZ2U9ZnVuY3Rpb24oc2VsKXsKLVhpbmhhLm5vdEltcGxlbWVudGVkKCJjcmVhdGVSYW5nZSIpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5pc0tleUV2ZW50PWZ1bmN0aW9uKF8zMTEpewotWGluaGEubm90SW1wbGVtZW50ZWQoImlzS2V5RXZlbnQiKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuaXNTaG9ydEN1dD1mdW5jdGlvbihfMzEyKXsKLWlmKF8zMTIuY3RybEtleSYmIV8zMTIuYWx0S2V5KXsKLXJldHVybiB0cnVlOwotfQotcmV0dXJuIGZhbHNlOwotfTsKLVhpbmhhLnByb3RvdHlwZS5nZXRLZXk9ZnVuY3Rpb24oXzMxMyl7Ci1YaW5oYS5ub3RJbXBsZW1lbnRlZCgiZ2V0S2V5Iik7Ci19OwotWGluaGEuZ2V0T3V0ZXJIVE1MPWZ1bmN0aW9uKF8zMTQpewotWGluaGEubm90SW1wbGVtZW50ZWQoImdldE91dGVySFRNTCIpOwotfTsKLVhpbmhhLmdldFhNTEhUVFBSZXF1ZXN0T2JqZWN0PWZ1bmN0aW9uKCl7Ci10cnl7Ci1pZih0eXBlb2YgWE1MSHR0cFJlcXVlc3QhPSJ1bmRlZmluZWQiJiZ0eXBlb2YgWE1MSHR0cFJlcXVlc3QuY29uc3RydWN0b3I9PSJmdW5jdGlvbiIpewotcmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdCgpOwotfWVsc2V7Ci1pZih0eXBlb2YgQWN0aXZlWE9iamVjdD09ImZ1bmN0aW9uIil7Ci1yZXR1cm4gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIik7Ci19Ci19Ci19Ci1jYXRjaChlKXsKLVhpbmhhLm5vdEltcGxlbWVudGVkKCJnZXRYTUxIVFRQUmVxdWVzdE9iamVjdCIpOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5fYWN0aXZlRWxlbWVudD1mdW5jdGlvbihzZWwpewotcmV0dXJuIHRoaXMuYWN0aXZlRWxlbWVudChzZWwpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5fc2VsZWN0aW9uRW1wdHk9ZnVuY3Rpb24oc2VsKXsKLXJldHVybiB0aGlzLnNlbGVjdGlvbkVtcHR5KHNlbCk7Ci19OwotWGluaGEucHJvdG90eXBlLl9nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXsKLXJldHVybiB0aGlzLmdldFNlbGVjdGlvbigpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5fY3JlYXRlUmFuZ2U9ZnVuY3Rpb24oc2VsKXsKLXJldHVybiB0aGlzLmNyZWF0ZVJhbmdlKHNlbCk7Ci19OwotSFRNTEFyZWE9WGluaGE7Ci1YaW5oYS5pbml0KCk7Ci1pZihYaW5oYS5pZV92ZXJzaW9uPDgpewotWGluaGEuYWRkRG9tMEV2ZW50KHdpbmRvdywidW5sb2FkIixYaW5oYS5jb2xsZWN0R2FyYmFnZUZvcklFKTsKLX0KLVhpbmhhLmRlYnVnTXNnPWZ1bmN0aW9uKHRleHQsXzMxOSl7Ci1pZih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCImJnR5cGVvZiBjb25zb2xlLmxvZz09ImZ1bmN0aW9uIil7Ci1pZihfMzE5JiZfMzE5PT0id2FybiImJnR5cGVvZiBjb25zb2xlLndhcm49PSJmdW5jdGlvbiIpewotY29uc29sZS53YXJuKHRleHQpOwotfWVsc2V7Ci1pZihfMzE5JiZfMzE5PT0iaW5mbyImJnR5cGVvZiBjb25zb2xlLmluZm89PSJmdW5jdGlvbiIpewotY29uc29sZS5pbmZvKHRleHQpOwotfWVsc2V7Ci1jb25zb2xlLmxvZyh0ZXh0KTsKLX0KLX0KLX1lbHNlewotaWYodHlwZW9mIG9wZXJhIT0idW5kZWZpbmVkIiYmdHlwZW9mIG9wZXJhLnBvc3RFcnJvcj09ImZ1bmN0aW9uIil7Ci1vcGVyYS5wb3N0RXJyb3IodGV4dCk7Ci19Ci19Ci19OwotWGluaGEubm90SW1wbGVtZW50ZWQ9ZnVuY3Rpb24oXzMxYSl7Ci10aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCBOb3QgSW1wbGVtZW50ZWQiLCJQYXJ0IG9mIFhpbmhhIGhhcyB0cmllZCB0byBjYWxsIHRoZSAiK18zMWErIiBtZXRob2Qgd2hpY2ggaGFzIG5vdCBiZWVuIGltcGxlbWVudGVkLiIpOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL1hpbmhhTG9hZGVyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL1hpbmhhTG9hZGVyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4YzgwYTU3Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9YaW5oYUxvYWRlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDIxMyArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvWGluaGFMb2FkZXIuanMgKi8KLXZhciBYaW5oYT17fTsKLWlmKCF3aW5kb3cuX2VkaXRvcl91cmwpewotKGZ1bmN0aW9uKCl7Ci12YXIgXzE9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpOwotdmFyIF8yPV8xW18xLmxlbmd0aC0xXTsKLXZhciBfMz1fMi5zcmMuc3BsaXQoIj8iKTsKLV8zPV8zLmxlbmd0aD09Mj9fM1sxXS5zcGxpdCgiJiIpOiIiOwotZm9yKHZhciBfND0wO180PF8zLmxlbmd0aDsrK180KXsKLXZhciBfNT1fM1tfNF0uc3BsaXQoIj0iKTsKLWlmKF81Lmxlbmd0aD09Mil7Ci1zd2l0Y2goXzVbMF0pewotY2FzZSAibGFuZyI6Ci1jYXNlICJpY29ucyI6Ci1jYXNlICJza2luIjoKLWNhc2UgInVybCI6Ci13aW5kb3dbIl9lZGl0b3JfIitfNVswXV09XzVbMV07Ci1icmVhazsKLX0KLX0KLX0KLWlmKF8yLmlubmVySFRNTC5yZXBsYWNlKC9ccysvLCIiKSl7Ci1ldmFsKF8yLmlubmVySFRNTCk7Ci19Ci1fZWRpdG9yX2xhbmc9d2luZG93Ll9lZGl0b3JfbGFuZ3x8ImVuIjsKLV9lZGl0b3JfdXJsPXdpbmRvdy5fZWRpdG9yX3VybHx8XzIuc3JjLnNwbGl0KCI/IilbMF0uc3BsaXQoIi8iKS5zbGljZSgwLC0xKS5qb2luKCIvIik7Ci19KSgpOwotfQotX2VkaXRvcl91cmw9X2VkaXRvcl91cmwucmVwbGFjZSgvXHgyZiokLywiLyIpOwotWGluaGEuYWd0PW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsKLVhpbmhhLmlzX2llPSgoWGluaGEuYWd0LmluZGV4T2YoIm1zaWUiKSE9LTEpJiYoWGluaGEuYWd0LmluZGV4T2YoIm9wZXJhIik9PS0xKSk7Ci1YaW5oYS5pZV92ZXJzaW9uPXBhcnNlRmxvYXQoWGluaGEuYWd0LnN1YnN0cmluZyhYaW5oYS5hZ3QuaW5kZXhPZigibXNpZSIpKzUpKTsKLVhpbmhhLmlzX29wZXJhPShYaW5oYS5hZ3QuaW5kZXhPZigib3BlcmEiKSE9LTEpOwotWGluaGEuaXNfa2h0bWw9KFhpbmhhLmFndC5pbmRleE9mKCJraHRtbCIpIT0tMSk7Ci1YaW5oYS5pc193ZWJraXQ9KFhpbmhhLmFndC5pbmRleE9mKCJhcHBsZXdlYmtpdCIpIT0tMSk7Ci1YaW5oYS5pc19zYWZhcmk9KFhpbmhhLmFndC5pbmRleE9mKCJzYWZhcmkiKSE9LTEpOwotWGluaGEub3BlcmFfdmVyc2lvbj1uYXZpZ2F0b3IuYXBwVmVyc2lvbi5zdWJzdHJpbmcoMCxuYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCIgIikpKjE7Ci1YaW5oYS5pc19tYWM9KFhpbmhhLmFndC5pbmRleE9mKCJtYWMiKSE9LTEpOwotWGluaGEuaXNfbWFjX2llPShYaW5oYS5pc19pZSYmWGluaGEuaXNfbWFjKTsKLVhpbmhhLmlzX3dpbl9pZT0oWGluaGEuaXNfaWUmJiFYaW5oYS5pc19tYWMpOwotWGluaGEuaXNfZ2Vja289KG5hdmlnYXRvci5wcm9kdWN0PT0iR2Vja28iJiYhWGluaGEuaXNfc2FmYXJpKTsKLVhpbmhhLmlzUnVuTG9jYWxseT1kb2N1bWVudC5VUkwudG9Mb3dlckNhc2UoKS5zZWFyY2goL15maWxlOi8pIT0tMTsKLVhpbmhhLmlzX2Rlc2lnbk1vZGU9KHR5cGVvZiBkb2N1bWVudC5kZXNpZ25Nb2RlIT0idW5kZWZpbmVkIiYmIVhpbmhhLmlzX2llKTsKLVhpbmhhLmlzU3VwcG9ydGVkQnJvd3Nlcj1YaW5oYS5pc19nZWNrb3x8KFhpbmhhLmlzX29wZXJhJiZYaW5oYS5vcGVyYV92ZXJzaW9uPj05LjEpfHxYaW5oYS5pZV92ZXJzaW9uPj01LjV8fFhpbmhhLmlzX3NhZmFyaTsKLVhpbmhhLmxvYWRQbHVnaW5zPWZ1bmN0aW9uKF82LF83KXsKLWlmKCFYaW5oYS5pc1N1cHBvcnRlZEJyb3dzZXIpewotcmV0dXJuOwotfQotWGluaGEubG9hZFN0eWxlKHR5cGVvZiBfZWRpdG9yX2Nzcz09InN0cmluZyI/X2VkaXRvcl9jc3M6IlhpbmhhLmNzcyIsIlhpbmhhQ29yZURlc2lnbiIpOwotWGluaGEuY3JlYXRlTG9hZGluZ01lc3NhZ2VzKHhpbmhhX2VkaXRvcnMpOwotdmFyIF84PVhpbmhhLmxvYWRpbmdNZXNzYWdlczsKLVhpbmhhLl9sb2FkYmFjayhfZWRpdG9yX3VybCsiWGluaGFDb3JlLmpzIixmdW5jdGlvbigpewotWGluaGEucmVtb3ZlTG9hZGluZ01lc3NhZ2VzKHhpbmhhX2VkaXRvcnMpOwotWGluaGEuY3JlYXRlTG9hZGluZ01lc3NhZ2VzKHhpbmhhX2VkaXRvcnMpOwotXzcoKTsKLX0pOwotcmV0dXJuIGZhbHNlOwotfTsKLVhpbmhhLl9sb2FkYmFjaz1mdW5jdGlvbihfOSxfYSxfYixfYyl7Ci12YXIgVD0hWGluaGEuaXNfaWU/Im9ubG9hZCI6Im9ucmVhZHlzdGF0ZWNoYW5nZSI7Ci12YXIgUz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKLVMudHlwZT0idGV4dC9qYXZhc2NyaXB0IjsKLVMuc3JjPV85OwotaWYoX2EpewotU1tUXT1mdW5jdGlvbigpewotaWYoWGluaGEuaXNfaWUmJighKC9sb2FkZWR8Y29tcGxldGUvLnRlc3Qod2luZG93LmV2ZW50LnNyY0VsZW1lbnQucmVhZHlTdGF0ZSkpKSl7Ci1yZXR1cm47Ci19Ci1fYS5jYWxsKF9iP19iOnRoaXMsX2MpOwotU1tUXT1udWxsOwotfTsKLX0KLWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0uYXBwZW5kQ2hpbGQoUyk7Ci19OwotWGluaGEuZ2V0RWxlbWVudFRvcExlZnQ9ZnVuY3Rpb24oX2YpewotdmFyIF8xMD0wOwotdmFyIF8xMT0wOwotaWYoX2Yub2Zmc2V0UGFyZW50KXsKLV8xMD1fZi5vZmZzZXRMZWZ0OwotXzExPV9mLm9mZnNldFRvcDsKLXdoaWxlKF9mPV9mLm9mZnNldFBhcmVudCl7Ci1fMTArPV9mLm9mZnNldExlZnQ7Ci1fMTErPV9mLm9mZnNldFRvcDsKLX0KLX0KLXJldHVybiB7dG9wOl8xMSxsZWZ0Ol8xMH07Ci19OwotWGluaGEuZmluZFBvc1g9ZnVuY3Rpb24ob2JqKXsKLXZhciBfMTM9MDsKLWlmKG9iai5vZmZzZXRQYXJlbnQpewotcmV0dXJuIFhpbmhhLmdldEVsZW1lbnRUb3BMZWZ0KG9iaikubGVmdDsKLX1lbHNlewotaWYob2JqLngpewotXzEzKz1vYmoueDsKLX0KLX0KLXJldHVybiBfMTM7Ci19OwotWGluaGEuZmluZFBvc1k9ZnVuY3Rpb24ob2JqKXsKLXZhciBfMTU9MDsKLWlmKG9iai5vZmZzZXRQYXJlbnQpewotcmV0dXJuIFhpbmhhLmdldEVsZW1lbnRUb3BMZWZ0KG9iaikudG9wOwotfWVsc2V7Ci1pZihvYmoueSl7Ci1fMTUrPW9iai55OwotfQotfQotcmV0dXJuIF8xNTsKLX07Ci1YaW5oYS5jcmVhdGVMb2FkaW5nTWVzc2FnZXM9ZnVuY3Rpb24oXzE2KXsKLWlmKFhpbmhhLmxvYWRpbmdNZXNzYWdlc3x8IVhpbmhhLmlzU3VwcG9ydGVkQnJvd3Nlcil7Ci1yZXR1cm47Ci19Ci1YaW5oYS5sb2FkaW5nTWVzc2FnZXM9W107Ci1mb3IodmFyIGk9MDtpPF8xNi5sZW5ndGg7aSsrKXsKLWlmKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChfMTZbaV0pKXsKLWNvbnRpbnVlOwotfQotWGluaGEubG9hZGluZ01lc3NhZ2VzLnB1c2goWGluaGEuY3JlYXRlTG9hZGluZ01lc3NhZ2UoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXzE2W2ldKSkpOwotfQotfTsKLVhpbmhhLmNyZWF0ZUxvYWRpbmdNZXNzYWdlPWZ1bmN0aW9uKF8xOCxfMTkpewotaWYoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvYWRpbmdfIitfMTguaWQpfHwhWGluaGEuaXNTdXBwb3J0ZWRCcm93c2VyKXsKLXJldHVybjsKLX0KLXZhciBfMWE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci1fMWEuaWQ9ImxvYWRpbmdfIitfMTguaWQ7Ci1fMWEuY2xhc3NOYW1lPSJsb2FkaW5nIjsKLV8xYS5zdHlsZS5sZWZ0PShYaW5oYS5maW5kUG9zWChfMTgpK18xOC5vZmZzZXRXaWR0aC8yKS0xMDYrInB4IjsKLV8xYS5zdHlsZS50b3A9KFhpbmhhLmZpbmRQb3NZKF8xOCkrXzE4Lm9mZnNldEhlaWdodC8yKS01MCsicHgiOwotdmFyIF8xYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLV8xYi5jbGFzc05hbWU9ImxvYWRpbmdfbWFpbiI7Ci1fMWIuaWQ9ImxvYWRpbmdfbWFpbl8iK18xOC5pZDsKLV8xYi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShYaW5oYS5fbGMoIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISIpKSk7Ci12YXIgXzFjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotXzFjLmNsYXNzTmFtZT0ibG9hZGluZ19zdWIiOwotXzFjLmlkPSJsb2FkaW5nX3N1Yl8iK18xOC5pZDsKLV8xOT1fMTk/XzE5OlhpbmhhLl9sYygiTG9hZGluZyBDb3JlIik7Ci1fMWMuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXzE5KSk7Ci1fMWEuYXBwZW5kQ2hpbGQoXzFiKTsKLV8xYS5hcHBlbmRDaGlsZChfMWMpOwotZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChfMWEpOwotcmV0dXJuIF8xYzsKLX07Ci1YaW5oYS5sb2FkU3R5bGU9ZnVuY3Rpb24oXzFkLGlkKXsKLXZhciB1cmw9X2VkaXRvcl91cmx8fCIiOwotdXJsKz1fMWQ7Ci12YXIgXzIwPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF07Ci12YXIgXzIxPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTsKLV8yMS5yZWw9InN0eWxlc2hlZXQiOwotXzIxLmhyZWY9dXJsOwotaWYoaWQpewotXzIxLmlkPWlkOwotfQotXzIwLmFwcGVuZENoaWxkKF8yMSk7Ci19OwotWGluaGEuX2xjPWZ1bmN0aW9uKF8yMil7Ci1yZXR1cm4gXzIyOwotfTsKLVhpbmhhLl9hZGRFdmVudD1mdW5jdGlvbihlbCxfMjQsXzI1KXsKLWlmKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpewotZWwuYWRkRXZlbnRMaXN0ZW5lcihfMjQsXzI1LHRydWUpOwotfWVsc2V7Ci1lbC5hdHRhY2hFdmVudCgib24iK18yNCxfMjUpOwotfQotfTsKLVhpbmhhLmFkZE9ubG9hZEhhbmRsZXI9ZnVuY3Rpb24oXzI2KXsKLXZhciBfMjc9ZnVuY3Rpb24oKXsKLWlmKGFyZ3VtZW50cy5jYWxsZWUuZG9uZSl7Ci1yZXR1cm47Ci19Ci1hcmd1bWVudHMuY2FsbGVlLmRvbmU9dHJ1ZTsKLWlmKFhpbmhhLm9ubG9hZFRpbWVyKXsKLWNsZWFySW50ZXJ2YWwoWGluaGEub25sb2FkVGltZXIpOwotfQotXzI2LmNhbGwoKTsKLX07Ci1pZihYaW5oYS5pc19pZSl7Ci1kb2N1bWVudC5hdHRhY2hFdmVudCgib25yZWFkeXN0YXRlY2hhbmdlIixmdW5jdGlvbigpewotaWYoZG9jdW1lbnQucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpewotZG9jdW1lbnQuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsYXJndW1lbnRzLmNhbGxlZSk7Ci1fMjcoKTsKLX0KLX0pOwotaWYoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsJiZ0eXBlb2Ygd2luZG93LmZyYW1lRWxlbWVudD09PSJ1bmRlZmluZWQiKXsKLShmdW5jdGlvbigpewotaWYoYXJndW1lbnRzLmNhbGxlZS5kb25lKXsKLXJldHVybjsKLX0KLXRyeXsKLWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpOwotfQotY2F0Y2goZXJyb3Ipewotc2V0VGltZW91dChhcmd1bWVudHMuY2FsbGVlLDApOwotcmV0dXJuOwotfQotXzI3KCk7Ci19KSgpOwotfQotfWVsc2V7Ci1pZigvV2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7Ci1YaW5oYS5vbmxvYWRUaW1lcj1zZXRJbnRlcnZhbChmdW5jdGlvbigpewotaWYoL2xvYWRlZHxjb21wbGV0ZS8udGVzdChkb2N1bWVudC5yZWFkeVN0YXRlKSl7Ci1fMjcoKTsKLX0KLX0sMTApOwotfWVsc2V7Ci1kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixfMjcsZmFsc2UpOwotfQotfQotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL1hpbmhhTG9hZGVyX3JlYWRtZS50eHQgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvWGluaGFMb2FkZXJfcmVhZG1lLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE0YTJjNC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvWGluaGFMb2FkZXJfcmVhZG1lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotVGhlIFhpbmhhTG9hZGVyIGlzIGEgc3Vic2V0IG9mIFhpbmhhIG9ubHkgY29udGFpbmluZyBmdW5jdGlvbnMgdG8gZmV0Y2ggZnVydGhlciBmaWxlcyBmcm9tIHRoZSBzZXJ2ZXIgYW5kIGRpc3BsYXlpbmcgYSBsb2FkaW5nIG1lc3NhZ2UuIAotSXQgZ2l2ZXMgdmlzdWFsIGZlZWRiYWNrIHRvIHRoZSB1c2VyIHF1aXRlIHF1aWNrbHkgc28gdGhleSBkb24ndCBoYXZlIHRvIHdhdGNoIHRoZSBwbGFpbiB0ZXh0YXJlYSBhbmQgd29uZGVyIGlmIGFueXRoaW5nIGlzIGhhcHBlbmluZy4KLQotVXNhZ2UgaW4gc2hvcnQ6IEZvbGxvdyB0aGUgTmV3YmllR3VpZGUsIGJ1dCBsb2FkIFhpbmhhTG9hZGVyLmpzIGluc3RlYWQgb2YgWGluaGFDb3JlLmpzLiAKLU1ha2Ugc2h1cmUgeW91IGRlZmluZSB4aW5oYV9lZGl0b3JzIGJlZm9yZSBjYWxsaW5nIFhpbmhhLmxvYWRQbHVnaW5zISBUaGlzIGlzIGRpZmZlcmVudCB0byBlYXJsaWVyIHZlcnNpb25zIG9mIHRoZSBOZXdiaWVHdWlkZSAoc3RlcHMgMSBhbmQgMiByZXZlcnNlZCkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvY29tcHJlc3Npb25fcmVhZG1lLnR4dCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9jb21wcmVzc2lvbl9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWNiMDRiLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9jb21wcmVzc2lvbl9yZWFkbWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1Zb3UgY2FuIHVzZSB0aGUgY29udHJpYi9jb21wcmVzcy5waHAgdG8gYmF0Y2gtY29udmVydCB0aGUgY3VycmVudCBYaW5oYSBzbmFwc2hvdC4gVG8gdXNlIHRoaXMgc2NyaXB0LCBvcGVuIGl0IGluIGEgdGV4dCBlZGl0b3IsIGNvbW1lbnQgb3V0IHRoZSBkaWUoKSBjb21tYW5kIGF0IHRoZSB0b3AgYW5kIG9wZW4gaXQgaW4geW91ciBicm93c2VyLg0KLSANCi1Zb3UgY2FuIHVzZSB0aGUgY29udHJpYi9jb21wcmVzcy5iYXQgdG8gY29tcHJlc3MgSmF2YVNjcmlwdCBmaWxlcyBieSBkcmFnJmRyb3AgaW4gV2luZG93cy4NCi0NCi1QbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGUgbGFuZ3VhZ2UgZmlsZXMgY2Fubm90IGJlIGNvbXByZXNzZWQuDQotDQotSWYgeW91IHdhbnQgdGhlIG9yaWdpbmFsIGZpbGVzIHRvIGJlIGtlcHQsIG9wZW4gY29tcHJlc3MuYmF0IGFuZCByZW12b3ZlIHRoZSAjIGluIHRoZSBsaW5lDQotIyBGT1IgJSVWIElOICglKikgRE8gZGVsICUlVl91bmNvbXByZXNzZWQuanMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvZXhhbXBsZXMvZnVsbF9leGFtcGxlLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9leGFtcGxlcy9mdWxsX2V4YW1wbGUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmQyNThlLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9leGFtcGxlcy9mdWxsX2V4YW1wbGUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTpub1RhYnM9dHJ1ZTp0YWJTaXplPTI6aW5kZW50U2l6ZT0yOi0tCi0gICAgLS0gIFhpbmhhIGV4YW1wbGUgQ1NTIGZpbGUuICBUaGlzIGlzIHJpcHBlZCBmcm9tIFRyYWMgOykKLSAgICAtLQotICAgIC0tICAkSGVhZFVSTDpodHRwOi8vc3ZuLnhpbmhhLndlYmZhY3Rpb25hbC5jb20vdHJ1bmsvZXhhbXBsZXMvZmlsZXMvZnVsbF9leGFtcGxlLmNzcyAkCi0gICAgLS0gICRMYXN0Q2hhbmdlZERhdGU6MjAwOC0wMi0wNCAwMTo0MzoyMSArMDEwMCAoTW8sIDA0IEZlYiAyMDA4KSAkCi0gICAgLS0gICRMYXN0Q2hhbmdlZFJldmlzaW9uOjk2MiAkCi0gICAgLS0gICRMYXN0Q2hhbmdlZEJ5OnJheSAkCi0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0gYm9keSB7Ci0gICBiYWNrZ3JvdW5kOiAjZmZmOwotICAgY29sb3I6ICMwMDA7Ci0gICBtYXJnaW46IDEwcHg7Ci0gIH0KLSAgYm9keSwgdGgsIHRkIHsKLSAgIGZvbnQ6IG5vcm1hbCAxM3B4IHZlcmRhbmEsYXJpYWwsJ0JpdHN0cmVhbSBWZXJhIFNhbnMnLGhlbHZldGljYSxzYW5zLXNlcmlmOwotICB9Ci0gIGgxLCBoMiwgaDMsIGg0IHsKLSAgIGZvbnQtZmFtaWx5OiBhcmlhbCx2ZXJkYW5hLCdCaXRzdHJlYW0gVmVyYSBTYW5zJyxoZWx2ZXRpY2Esc2Fucy1zZXJpZjsKLSAgIGZvbnQtd2VpZ2h0OiBib2xkOwotICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxOGVtOwotICB9Ci0gIGgxIHsgZm9udC1zaXplOiAyMXB4OyBtYXJnaW46IC4xNWVtIDFlbSAwIDAgfQotICBoMiB7IGZvbnQtc2l6ZTogMTZweDsgbWFyZ2luOiAyZW0gMCAuNWVtOyB9Ci0gIGgzIHsgZm9udC1zaXplOiAxNHB4OyBtYXJnaW46IDEuNWVtIDAgLjVlbTsgfQotICBociB7IGJvcmRlcjogbm9uZTsgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NiOyBtYXJnaW46IDJlbSAwOyB9Ci0gIGFkZHJlc3MgeyBmb250LXN0eWxlOiBub3JtYWwgfQotICBpbWcgeyBib3JkZXI6IG5vbmUgfQotCi0gIDpsaW5rLCA6dmlzaXRlZCB7Ci0gICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci0gICBjb2xvcjogI2IwMDsKLSAgIGJvcmRlci1ib3R0b206IDFweCBkb3R0ZWQgI2JiYjsKLSAgfQotICA6bGluazpob3ZlciwgOnZpc2l0ZWQ6aG92ZXIgewotICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKLSAgIGNvbG9yOiAjNTU1OwotICB9Ci0gIGgxIDpsaW5rLCBoMSA6dmlzaXRlZCAsaDIgOmxpbmssIGgyIDp2aXNpdGVkLCBoMyA6bGluaywgaDMgOnZpc2l0ZWQsCi0gIGg0IDpsaW5rLCBoNCA6dmlzaXRlZCwgaDUgOmxpbmssIGg1IDp2aXNpdGVkLCBoNiA6bGluaywgaDYgOnZpc2l0ZWQgewotICAgY29sb3I6IGluaGVyaXQ7Ci0gIH0KLQotICAuYXJlYV9ob2xkZXIKLSAgewotICAgIG1hcmdpbjoxMHB4OwotICB9Ci0gIGxhYmVsIHtmb250LXNpemU6IDExcHg7fQotICAubmF2aV9saW5rcyB7Ci0Jd2lkdGg6IDE3N3B4OwotCW1hcmdpbjogMDsKLQlwYWRkaW5nOiAwcHg7Ci0JbGlzdC1zdHlsZTpub25lOwotCWJvcmRlcjogbm9uZTsKLX0KLQotLm5hdmlfbGlua3MgbGkgewotCW1hcmdpbjowIDAgM3B4IDA7Ci19Ci0KLS5uYXZpX2xpbmtzIGxpIGEgewotCWZvbnQtc2l6ZTogMTNweDsKLQlsaW5lLWhlaWdodDogMTZweDsKLQloZWlnaHQ6IDE2cHg7Ci0JZGlzcGxheTpibG9jazsKLQljb2xvcjojMDAwOwotCXRleHQtZGVjb3JhdGlvbjogbm9uZTsKLQlmb250LXdlaWdodDogYm9sZDsKLQliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwotCWN1cnNvcjogcG9pbnRlcjsKLQlib3JkZXI6IDJweCBzb2xpZCB3aGl0ZTsKLQkKLX0KLQotLkxpbmsxIHsKLWJhY2tncm91bmQtY29sb3I6ICNERjFEMUYgIWltcG9ydGFudDsKLQotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2h0bWxhcmVhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2h0bWxhcmVhLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTc4MWY3Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9odG1sYXJlYS5qcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLS8qIFRoaXMgY29tcHJlc3NlZCBmaWxlIGlzIHBhcnQgb2YgWGluaGEuIEZvciB1bmNvbXByZXNzZWQgc291cmNlcywgZm9ydW0sIGFuZCBidWcgcmVwb3J0cywgZ28gdG8geGluaGEub3JnICovCi0vKiBUaGUgVVJMIG9mIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpcyBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9odG1sYXJlYS5qcyAqLwotaWYodHlwZW9mIF9lZGl0b3JfdXJsPT0ic3RyaW5nIil7Ci1fZWRpdG9yX3VybD1fZWRpdG9yX3VybC5yZXBsYWNlKC9ceDJmKiQvLCIvIik7Ci19ZWxzZXsKLWFsZXJ0KCJXQVJOSU5HOiBfZWRpdG9yX3VybCBpcyBub3Qgc2V0ISAgWW91IHNob3VsZCBzZXQgdGhpcyB2YXJpYWJsZSB0byB0aGUgZWRpdG9yIGZpbGVzIHBhdGg7IGl0IHNob3VsZCBwcmVmZXJhYmx5IGJlIGFuIGFic29sdXRlIHBhdGgsIGxpa2UgaW4gJy9odG1sYXJlYS8nLCBidXQgaXQgY2FuIGJlIHJlbGF0aXZlIGlmIHlvdSBwcmVmZXIuICBGdXJ0aGVyIHdlIHdpbGwgdHJ5IHRvIGxvYWQgdGhlIGVkaXRvciBmaWxlcyBjb3JyZWN0bHkgYnV0IHdlJ2xsIHByb2JhYmx5IGZhaWwuIik7Ci1fZWRpdG9yX3VybD0iIjsKLX0KLWRvY3VtZW50LndyaXRlKCI8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCIiK19lZGl0b3JfdXJsKyJYaW5oYUNvcmUuanNcIj48L3NjcmlwdD4iKTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9kZS9ib2xkLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZGUvYm9sZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZDI4NmYuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9kZS9ib2xkLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZGUvaXRhbGljLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZGUvaXRhbGljLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJmNzk0Ny4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2RlL2l0YWxpYy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2RlL3VuZGVybGluZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2RlL3VuZGVybGluZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NDU0ODkuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9kZS91bmRlcmxpbmUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9hYm91dC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2Fib3V0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYyOGQ0MC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2Fib3V0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfYWxpZ24uZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9hbGlnbi5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNjBkNTAuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9hbGlnbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2FsaWduX2NlbnRlci5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2FsaWduX2NlbnRlci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ODQ1YjcuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9hbGlnbl9jZW50ZXIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9hbGlnbl9qdXN0aWZ5LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfYWxpZ25fanVzdGlmeS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2OGM1OTUuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9hbGlnbl9qdXN0aWZ5LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfYWxpZ25fbGVmdC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2FsaWduX2xlZnQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzIwYTJhLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfYWxpZ25fbGVmdC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2FsaWduX3JpZ2h0LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfYWxpZ25fcmlnaHQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzZmNjUxLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfYWxpZ25fcmlnaHQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9ibGFuay5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2JsYW5rLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVhMzk2Yi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2JsYW5rLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfYnV0dG9uc19tYWluLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfYnV0dG9uc19tYWluLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMxOTYyYi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2J1dHRvbnNfbWFpbi5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2J1dHRvbnNfbWFpbi5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2J1dHRvbnNfbWFpbi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNzNmNjUuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9idXR0b25zX21haW4ucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9jaGFybWFwLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfY2hhcm1hcC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4OWFhN2MuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9jaGFybWFwLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfY2xlYXJmb250cy5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2NsZWFyZm9udHMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGM1MmE4Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfY2xlYXJmb250cy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2NvbG9yX2JnLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfY29sb3JfYmcuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTlmMTMzLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfY29sb3JfYmcuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9jb2xvcl9mZy5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2NvbG9yX2ZnLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkyYWI4Ny4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2NvbG9yX2ZnLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfY29weS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2NvcHkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTQ0MGViLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfY29weS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2N1c3RvbS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2N1c3RvbS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NDQwMzAuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9jdXN0b20uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9jdXQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9jdXQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2ZiZjgwLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfY3V0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfZGVsZXRlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfZGVsZXRlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZmNTY4ZS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2RlbGV0ZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2Zvcm1hdF9ib2xkLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfZm9ybWF0X2JvbGQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODY4NmQxLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfZm9ybWF0X2JvbGQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9mb3JtYXRfaXRhbGljLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfZm9ybWF0X2l0YWxpYy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkM2JhZjIuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9mb3JtYXRfaXRhbGljLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfZm9ybWF0X3N0cmlrZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2Zvcm1hdF9zdHJpa2UuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWIxNDI5Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfZm9ybWF0X3N0cmlrZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2Zvcm1hdF9zdWIuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9mb3JtYXRfc3ViLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM3N2Q3NC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2Zvcm1hdF9zdWIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9mb3JtYXRfc3VwLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfZm9ybWF0X3N1cC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlY2I5YTEuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9mb3JtYXRfc3VwLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfZm9ybWF0X3VuZGVybGluZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2Zvcm1hdF91bmRlcmxpbmUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmM0N2ExLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfZm9ybWF0X3VuZGVybGluZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2hlbHAuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9oZWxwLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVmN2Q2My4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2hlbHAuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9oci5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2hyLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM1Yzc3OC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2hyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfaHRtbC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2h0bWwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjZkYTRlLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfaHRtbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2ltYWdlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfaW1hZ2UuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWY3OWMzLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfaW1hZ2UuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9pbmRlbnRfbGVzcy5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2luZGVudF9sZXNzLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RkYTAyYS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2luZGVudF9sZXNzLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfaW5kZW50X21vcmUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9pbmRlbnRfbW9yZS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNGI0N2UuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9pbmRlbnRfbW9yZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2tpbGx3b3JkLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfa2lsbHdvcmQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDkzNGE3Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfa2lsbHdvcmQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9sZWZ0X3RvX3JpZ2h0LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfbGVmdF90b19yaWdodC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlOTVlYTUuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9sZWZ0X3RvX3JpZ2h0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfbGluay5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2xpbmsuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmZkNTM3Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfbGluay5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2xpc3RfYnVsbGV0LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfbGlzdF9idWxsZXQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzdlODRiLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfbGlzdF9idWxsZXQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9saXN0X251bS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2xpc3RfbnVtLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjMwY2JmZC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX2xpc3RfbnVtLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfb3ZlcndyaXRlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfb3ZlcndyaXRlLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdhODkxNC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX292ZXJ3cml0ZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3Bhc3RlLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfcGFzdGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWI1M2EwLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfcGFzdGUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9wcmludC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3ByaW50LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIyYmY4MC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3ByaW50LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfcmVkby5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3JlZG8uZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDczZGZjLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfcmVkby5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3JpZ2h0X3RvX2xlZnQuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9yaWdodF90b19sZWZ0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWIyNTViZC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3JpZ2h0X3RvX2xlZnQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9ybWZvcm1hdC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3JtZm9ybWF0LmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDlmMTAyYS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3JtZm9ybWF0LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc2F2ZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3NhdmUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjI2MmQwLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc2F2ZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3NhdmUucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9zYXZlLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODgxZmU1ZC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3NhdmUucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9zYXZlYXMuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9zYXZlYXMuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWRkOTg4Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc2F2ZWFzLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc2VsZWN0YWxsLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc2VsZWN0YWxsLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFjZjBhMC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3NlbGVjdGFsbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3Nob3dfYm9yZGVyLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc2hvd19ib3JkZXIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Mjg0OWI3Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc2hvd19ib3JkZXIuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9zcGxpdGJsb2NrLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc3BsaXRibG9jay5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMTU4MmIuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9zcGxpdGJsb2NrLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfc3BsaXRjZWwuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9zcGxpdGNlbC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2ZTVhYjUuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF9zcGxpdGNlbC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3VuZG8uZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF91bmRvLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzE5MjQyZi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2VkX3VuZG8uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF93b3JkX2NsZWFuZXIuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9lZF93b3JkX2NsZWFuZXIuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWIwNzU5Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZWRfd29yZF9jbGVhbmVyLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZnIvYm9sZC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2ZyL2JvbGQuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTBmNjU3Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZnIvYm9sZC5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2ZyL3N0cmlrZXRocm91Z2guZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9mci9zdHJpa2V0aHJvdWdoLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTcwN2FlZi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2ZyL3N0cmlrZXRocm91Z2guZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9mci91bmRlcmxpbmUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9mci91bmRlcmxpbmUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWNhZjIyLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZnIvdW5kZXJsaW5lLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZnVsbHNjcmVlbl9tYXhpbWl6ZS5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2Z1bGxzY3JlZW5fbWF4aW1pemUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTFjMWM1Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvZnVsbHNjcmVlbl9tYXhpbWl6ZS5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2Z1bGxzY3JlZW5fbWluaW1pemUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9mdWxsc2NyZWVuX21pbmltaXplLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY3OWU1YS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2Z1bGxzY3JlZW5fbWluaW1pemUuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9pbnNlcnRfdGFibGUuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9pbnNlcnRfdGFibGUuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOGY0MjUzLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvaW5zZXJ0X3RhYmxlLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvaW5zZXJ0ZmlsZWxpbmsuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9pbnNlcnRmaWxlbGluay5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5OWYwNGQuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy9pbnNlcnRmaWxlbGluay5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL2luc2VydG1hY3JvLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvaW5zZXJ0bWFjcm8ucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYzg3NGJlLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvaW5zZXJ0bWFjcm8ucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy90aWR5LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvdGlkeS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4ODFjNjQuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy90aWR5LmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMvdG9nZ2xlX2JvcmRlcnMuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy90b2dnbGVfYm9yZGVycy5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YmM1YmUuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy90b2dnbGVfYm9yZGVycy5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL3hpbmhhLXNtYWxsLWljb24uZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy94aW5oYS1zbWFsbC1pY29uLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZhNDk3MC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvaW1hZ2VzL3hpbmhhLXNtYWxsLWljb24uZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy94aW5oYV9sb2dvLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9pbWFnZXMveGluaGFfbG9nby5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0NmUzMTMuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2ltYWdlcy94aW5oYV9sb2dvLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2I1LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvYjUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NTBmNmUuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvYjUuanMKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cyAtLSBVVEYtOAotLy8gYnkgRGF2ZSBMbyAtLSBkbG9AaW50ZXJhY3RpdmV0b29scy5jb20KLXsKLSAgIkJvbGQiOiAi57KX6auUIiwKLSAgIkl0YWxpYyI6ICLmlpzpq5QiLAotICAiVW5kZXJsaW5lIjogIuW6lee3miIsCi0gICJTdHJpa2V0aHJvdWdoIjogIuWIqumZpOe3miIsCi0gICJTdWJzY3JpcHQiOiAi5LiL5qiZIiwKLSAgIlN1cGVyc2NyaXB0IjogIuS4iuaomSIsCi0gICJKdXN0aWZ5IExlZnQiOiAi5L2N572u6Z2g5bemIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIuS9jee9ruWxheS4rSIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIuS9jee9rumdoOWPsyIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAi5L2N572u5bem5Y+z5bmz562JIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICLpoIbluo/muIXllq4iLAotICAiQnVsbGV0ZWQgTGlzdCI6ICLnhKHluo/muIXllq4iLAotICAiRGVjcmVhc2UgSW5kZW50IjogIua4m+Wwj+ihjOWJjeepuueZvSIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAi5Yqg5a+s6KGM5YmN56m655m9IiwKLSAgIkZvbnQgQ29sb3IiOiAi5paH5a2X6aGP6ImyIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAi6IOM5pmv6aGP6ImyIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICLmsLTlubPnt5oiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIuaPkuWFpemAo+e1kCIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIuaPkuWFpeWcluW9oiIsCi0gICJJbnNlcnQgVGFibGUiOiAi5o+S5YWl6KGo5qC8IiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICLliIfmj5tIVE1M5Y6f5aeL56K8IiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIuaUvuWkpyIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICLpl5zmlrwgWGluaGEiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAi6Kqq5piOIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAi5a2X6auU5L6L5a2QIgotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvY2guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9jaC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVhYzg0MC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9jaC5qcworKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0KLS8vIExBTkc6ICJjaCIsIEVOQ09ESU5HOiBVVEYtOAotLy8gU2FtdWVsIFN0b25lLCBodHRwOi8vc3RvbmVtaWNyby5jb20vCi0KLXsKLSAgIkJvbGQiOiAi57KX6auUIiwKLSAgIkl0YWxpYyI6ICLmlpzpq5QiLAotICAiVW5kZXJsaW5lIjogIuW6lee3miIsCi0gICJTdHJpa2V0aHJvdWdoIjogIuWIque3miIsCi0gICJTdWJzY3JpcHQiOiAi5LiL5qiZIiwKLSAgIlN1cGVyc2NyaXB0IjogIuS4iuaomSIsCi0gICJKdXN0aWZ5IExlZnQiOiAi6Z2g5bemIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIuWxheS4rSIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIumdoOWPsyIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAi5pW06b2KIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICLpoIbluo/muIXllq4iLAotICAiQnVsbGV0ZWQgTGlzdCI6ICLnhKHluo/muIXllq4iLAotICAiRGVjcmVhc2UgSW5kZW50IjogIuS8uOaOkiIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAi57iu5o6SIiwKLSAgIkZvbnQgQ29sb3IiOiAi5paH5a2X6aGP6ImyIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAi6IOM5pmv6aGP6ImyIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICLmsLTlubPnt5oiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIuaPkuWFpemAo+e1kCIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIuaPkuWFpeWcluWDjyIsCi0gICJJbnNlcnQgVGFibGUiOiAi5o+S5YWl6KGo5qC8IiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICLliIfmj5tIVE1M5Y6f5aeL56K8IiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIuS8uOWHuue3qOi8r+ezu+e1sSIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICLpl5zmlrwgWGluaGEiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAi6Kqq5piOIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAi5a2X6auU5L6L5a2QIiwKLSAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIuWbnuWOnyIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLph43mnaUiLAotICAiQ3V0IHNlbGVjdGlvbiI6ICLliarliLbpgInpobkiLAotICAiQ29weSBzZWxlY3Rpb24iOiAi5aSN5Yi26YCJ6aG5IiwKLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIui0tOS4iiIsCi0gICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICLku47lt6bliLDlj7MiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAi5LuO5Y+z5Yiw5bemIiwKLSAgIk9LIjogIuWlvSIsCi0gICJDYW5jZWwiOiAi5Y+W5raIIiwKLSAgIlBhdGgiOiAi6YCU5b6RIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICLkvaDlnKjnlKjntJTlrZfnt6jovK/mlrnlvI8uICDnlKggWzw+XSDmjInpiJXovYnlm54g5omA6KaL5Y2z5omA5b6XIOe3qOi8r+aWueW8jy4iLAotICAiVGhlIGZ1bGwgc2NyZWVuIG1vZGUgaXMga25vd24gdG8gY2F1c2UgcHJvYmxlbXMgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciwgZHVlIHRvIGJyb3dzZXIgYnVncyB0aGF0IHdlIHdlcmVuIjogIuaVtOmggeW8j+WcqEludGVybmV0IEV4cGxvcmVyIOS4iuW4uOWHuuWVj+mhjCwg5Zug54K66YCZ5pivIEludGVybmV0IEV4cGxvcmVyIOeahOeEoeWQjeWVj+mhjO+8jOaIkeWAkeeEoeazleino+axuuOAguS9oOWPr+iDveeci+imi+S4gOS6m+Weg+Wcvu+8jOaIlumBh+WIsOWFtuS7luWVj+mhjOOAguaIkeWAkeW3suitpuWRiuS6huS9oC4g5aaC5p6c6KaB6L2J5YiwIOato+mggeW8jyDoq4vmjIkg5aW9LiIsCi0gICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iLAotICAiQ2FuY2VsIjogIuWPlua2iCIsCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAi5o+S5YWlL+aUueWvq+mAo+e1kCIsCi0gICJOZXcgd2luZG93IChfYmxhbmspIjogIuaWsOeql+aItyhfYmxhbmspIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi54ShKHVzZSBpbXBsaWNpdCkiLAotICAiT3RoZXIiOiAi5YW25LuWIiwKLSAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLmnKzljKEgKF9zZWxmKSIsCi0gICJUYXJnZXQ6IjogIuebruaomeWMoToiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICLkuLvpoYwgKHRvb2x0aXApOiIsCi0gICJUb3AgZnJhbWUgKF90b3ApIjogIuS4iuWMoSAoX3RvcCkiLAotICAiVVJMOiI6ICLntrLlnYA6IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICLkvaDlv4XpoIjovLjlhaXkvaDopoHov57nu5PnmoTntrLlnYAiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9jei5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2N6LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2M3NDI0Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2N6LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogImN6IiwgRU5DT0RJTkc6IFVURi04Ci0vLyBBdXRob3I6IEppcmkgTMO2dywgPGppcmlsb3dAamlyaWxvdy5jb20+Ci0KLS8vIEZPUiBUUkFOU0xBVE9SUzoKLS8vCi0vLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKLS8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKLS8vCi0vLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKLS8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKLS8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKLQotewotICAiQm9sZCI6ICJUdcSNbsSbIiwKLSAgIkl0YWxpYyI6ICJLdXJ6w612YSIsCi0gICJVbmRlcmxpbmUiOiAiUG9kdHLFvmVuw60iLAotICAiU3RyaWtldGhyb3VnaCI6ICJQxZllxaFrcnRudXTDrSIsCi0gICJTdWJzY3JpcHQiOiAiRG9sbsOtIGluZGV4IiwKLSAgIlN1cGVyc2NyaXB0IjogIkhvcm7DrSBpbmRleCIsCi0gICJKdXN0aWZ5IExlZnQiOiAiWmFyb3ZuYXQgZG9sZXZhIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIk5hIHN0xZllZCIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIlphcm92bmF0IGRvcHJhdmEiLAotICAiSnVzdGlmeSBGdWxsIjogIlphcm92bmF0IGRvIHN0cmFuIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJTZXpuYW0iLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJPZHLDocW+a3kiLAotICAiRGVjcmVhc2UgSW5kZW50IjogIlDFmWVkc2FkaXQiLAotICAiSW5jcmVhc2UgSW5kZW50IjogIk9kc2FkaXQiLAotICAiRm9udCBDb2xvciI6ICJCYXJ2YSBww61zbWEiLAotICAiQmFja2dyb3VuZCBDb2xvciI6ICJCYXJ2YSBwb3phZMOtIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICJWb2Rvcm92bsOhIMSNw6FyYSIsCi0gICJJbnNlcnQgV2ViIExpbmsiOiAiVmxvxb5pdCBvZGtheiIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIlZsb8W+aXQgb2Jyw6F6ZWsiLAotICAiSW5zZXJ0IFRhYmxlIjogIlZsb8W+aXQgdGFidWxrdSIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiUMWZZXBub3V0IEhUTUwiLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiTm92w6kgb2tubyBlZGl0b3J1IiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk8gdMOpdG8gYXBsaWthY2kiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiTsOhcG92xJtkYSBhcGxpa2FjZSIsCi0gICJDdXJyZW50IHN0eWxlIjogIlp2b2xlbsO9IHN0eWwiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiVnLDoXTDrSBwb3NsZWRuw60gYWtjaSIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJPcGFrdWplIHBvc2xlZG7DrSBha2NpIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiVnlqbW91dCIsCi0gICJDb3B5IHNlbGVjdGlvbiI6ICJLb3DDrXJvdmF0IiwKLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIlZsb8W+aXQiLAotICAiT0siOiAiT0siLAotICAiQ2FuY2VsIjogIlpydcWhaXQiLAotICAiUGF0aCI6ICJDZXN0YSIsCi0gICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiSnN0ZSB2IFRFWFRPVsOJTSBSRcW9SU1VLiAgUG91xb5panRlIHRsYcSNw610a28gWzw+XSBwcm8gcMWZZXBudXTDrSBkbyBXWVNJV0lHLiIKLX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2RhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZGEuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1NWViZTAuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZGEuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLS8vIExBTkc6ICJkYSIsIEVOQ09ESU5HOiBVVEYtOAotLy8gQXV0aG9yOiByZW5lLCA8cmVuZUBsYWVya2UubmV0PgotLy8gICAgICAgICBOaWVscyBCYWdnZXNlbiwgPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LCAwLjk1LCAyMDA5LTA4LTE1Ci17Ci0gICJCb2xkIjogIkZlZCIsCi0gICJJdGFsaWMiOiAiS3Vyc2l2IiwKLSAgIlVuZGVybGluZSI6ICJVbmRlcnN0cmVnbmluZyIsCi0gICJTdHJpa2V0aHJvdWdoIjogIkdlbm5lbXN0cmVnbmluZyIsCi0gICJTdWJzY3JpcHQiOiAiU8OmbmtldCBza3JpZnQiLAotICAiU3VwZXJzY3JpcHQiOiAiSMOmdmV0IHNrcmlmdCIsCi0gICJKdXN0aWZ5IExlZnQiOiAiVmVuc3RyZWp1c3RlciIsCi0gICJKdXN0aWZ5IENlbnRlciI6ICJDZW50cmVyIiwKLSAgIkp1c3RpZnkgUmlnaHQiOiAiSMO4anJlanVzdGVyIiwKLSAgIkp1c3RpZnkgRnVsbCI6ICJMaWdlIG1hcmdlbmVyIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJPcmRuZXQgbGlzdGUiLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJQdW5rdGxpc3RlIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICJGb3JtaW5kc2sgaW5kcnlrbmluZyIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAiRm9yw7hnIGluZHJ5a25pbmciLAotICAiRm9udCBDb2xvciI6ICJTa3JpZnRmYXJ2ZSIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIkJhZ2dydW5kc2ZhcnZlIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICJWYW5kcmV0IHN0cmVnIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICJJbmRzw6Z0IGh5cGVybGluayIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIkluZHPDpnQvdWRza2lmdCBiaWxsZWRlIiwKLSAgIkluc2VydCBUYWJsZSI6ICJJbmRzw6Z0IHRhYmVsIiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJIVE1MIHZpc25pbmciLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiVmlzIGVkaXRvciBpIHBvcHVwIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk9tIFhpbmhhIiwKLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIkhqw6ZscCIsCi0gICJDdXJyZW50IHN0eWxlIjogIkFudmVuZHQgc3RpbCIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJGb3J0cnlkIHNpZHN0ZSDDpm5kcmluZyIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJHZW50YWcgc2lkc3RlIMOmbmRyaW5nIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiS2xpcCIsCi0gICJDb3B5IHNlbGVjdGlvbiI6ICJLb3BpZXIiLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiSW5kc8OmdCIsCi0gICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJUZWtzdCB2ZW5zdHJlIG1vZCBow7hqcmUiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiVGVrc3QgaMO4anJlIG1vZCB2ZW5zdHJlIiwKLSAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIkZqZXJuIGZvcm1hdGVyaW5nIiwKLSAgIlNlbGVjdCBhbGwiOiAiVsOmbGcgYWx0IiwKLSAgIlByaW50IGRvY3VtZW50IjogIlVkc2tyaXYgZG9rdW1lbnQiLAotICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICJNU09mZmljZSBmaWx0ZXIiLAotICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiRmplcm4gc2tyaWZ0IHZhbGciLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIlZpbCBkdSBmamVybiBza3JpZnRzbml0IHZhbGciLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiVmlsIGR1IGZqZXJuZSBza3JpZnRzdMO4cnJlbHNlIHZhbGciLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICJWaWwgZHUgZmplcm5lIHNrcmlmdGZhcnZlIHZhbGciLAotICAiU3BsaXQgQmxvY2siOiAiRGVsIGJsb2siLAotICAiVG9nZ2xlIEJvcmRlcnMiOiAiVGFiZWxrYW50ZXIgdGlsL2ZyYSIsCi0gICJTYXZlIGFzIjogIkdlbSBzb20iLAotICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICJJbmRzw6Z0L092ZXJza3JpdiIsCi0gICImbWRhc2g7IGZvcm1hdCAmbWRhc2g7IjogIiZtZGFzaDsgRm9ybWF0ICZtZGFzaDsiLAotICAiSGVhZGluZyAxIjogIk92ZXJza3JpZnQgMSIsCi0gICJIZWFkaW5nIDIiOiAiT3ZlcnNrcmlmdCAyIiwKLSAgIkhlYWRpbmcgMyI6ICJPdmVyc2tyaWZ0IDMiLAotICAiSGVhZGluZyA0IjogIk92ZXJza3JpZnQgNCIsCi0gICJIZWFkaW5nIDUiOiAiT3ZlcnNrcmlmdCA1IiwKLSAgIkhlYWRpbmcgNiI6ICJPdmVyc2tyaWZ0IDYiLAotICAiTm9ybWFsIjogIk5vcm1hbCIsCi0gICJBZGRyZXNzIjogIkFkcmVzc2UiLAotICAiRm9ybWF0dGVkIjogIkZvcm1hdGVyZXQiLAotCi0gIC8vZGlhbG9ncwotICAiT0siOiAiT0siLAotICAiQ2FuY2VsIjogIkZvcnRyeWQiLAotICAiUGF0aCI6ICJTVGkiLAotICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIkR1IGVyIGkgVEVYVCBtb2RlLiBCcnVnIFs8Pl0ga25hcHBlbiB0aWwgYXQgc2tpZnRlIHRpbCB2aXN1ZWwgZWRpdGVyaW5nLiIsCi0gICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJJbmRzw6Z0LWtuYXBwZW4gdmlya2VyIGlra2UgaSBNb3ppbGxhLWJhc2VyZWRlIGJyb3dzZXJlLiBCcnVnIEN0cmwtViBww6UgdGFzdGF0dXJldCBmb3IgYXQgaW5kc8OmdHRlLiIsCi0KLSAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0ZSBhIGxpbmsiOiAiRHUgc2thbCBtYXJrZXJlIG5vZ2V0IHRla3N0IGZvciBhdCBpbmRzw6Z0dGUgZXQgaHlwZXJsaW5rIiwKLSAgIllvdXIgRG9jdW1lbnQgaXMgbm90IHdlbGwgZm9ybWVkLiBDaGVjayBKYXZhU2NyaXB0IGNvbnNvbGUgZm9yIGRldGFpbHMuIjogIkRpdCBkb2t1bWVudCBlciBpa2tlIHN5bnRha3Rpc2sga29ycmVrdC4gw4VibiBKYXZhc2NyaXB0IGtvbnNvbGxlbiBmb3IgYXQgZsOlIGZsZXJlIGRldGFsamVyLiIsCi0KLSAgIkFsaWdubWVudDoiOiAiSnVzdGVyaW5nOiIsCi0gICJOb3Qgc2V0IjogIlViZXN0ZW10IiwKLSAgIkxlZnQiOiAiVmVuc3RyZSIsCi0gICJSaWdodCI6ICJIw7hqcmUiLAotICAiVGV4dHRvcCI6ICJUZWtzdHRvcCIsCi0gICJBYnNtaWRkbGUiOiAiQ2VudHJlcmV0IiwKLSAgIkJhc2VsaW5lIjogIkdydW5kbGluamUiLAotICAiQWJzYm90dG9tIjogIkJ1bmQiLAotICAiQm90dG9tIjogIlRla3N0YnVuZCIsCi0gICJNaWRkbGUiOiAiTWlkdCIsCi0gICJUb3AiOiAiVG9wIiwKLQotICAiTGF5b3V0IjogIkxheW91dCIsCi0gICJTcGFjaW5nIjogIkFmc3RhbmQiLAotICAiSG9yaXpvbnRhbDoiOiAidmFuZHJldDoiLAotICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIlZhbmRyZXQgZnlsZCIsCi0gICJWZXJ0aWNhbDoiOiAibG9kcmV0OiIsCi0gICJWZXJ0aWNhbCBwYWRkaW5nIjogIkxvZHJldCBmeWxkIiwKLSAgIkJvcmRlciB0aGlja25lc3M6IjogIkthbnRicmVkZGU6IiwKLSAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiVG9tIGh2aXMgaW5nZW4ga2FudCIsCi0KLSAgLy9JbnNlcnQgTGluawotICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkluZHPDpnQvcmVkaWdlciBoeXBlcmxpbmsiLAotICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJpbmdlbiAoaW1wbGljaXQpIiwKLSAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTnl0IHZpbmR1ZSAoX2JsYW5rKSIsCi0gICJTYW1lIGZyYW1lIChfc2VsZikiOiAiU2FtbWUgcmFtbWUgKF9zZWxmKSIsCi0gICJUb3AgZnJhbWUgKF90b3ApIjogIlRvcHJhbW1lIChfdG9wKSIsCi0gICJPdGhlciI6ICJBbmRldCIsCi0gICJUYXJnZXQ6IjogIlBsYWNlcmluZzoiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXRlbCAoVG9vbHRpcCk6IiwKLSAgIlVSTDoiOiAiVVJMOiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiRHUgc2thbCBhbmdpdmUgZW4gbcOlbC1VUkwgZm9yIGxpbmtldCIsCi0KLSAgLy8gSW5zZXJ0IFRhYmxlCi0gICJJbnNlcnQgVGFibGUiOiAiSW5kc8OmdCB0YWJlbCIsCi0gICJSb3dzOiI6ICJSw6Zra2VyOiIsCi0gICJOdW1iZXIgb2Ygcm93cyI6ICJBbnRhbCByw6Zra2VyIiwKLSAgIkNvbHM6IjogIlPDuGpsZXI6IiwKLSAgIk51bWJlciBvZiBjb2x1bW5zIjogIkFudGFsIHPDuGpsZXIiLAotICAiV2lkdGg6IjogIkJyZWRkZToiLAotICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhYmVsYnJlZGRlIiwKLSAgIlBlcmNlbnQiOiAiUHJvY2VudCIsCi0gICJQaXhlbHMiOiAiUGl4ZWwiLAotICAiRW0iOiAiR2V2aWVydCAoRW0pIiwKLSAgIldpZHRoIHVuaXQiOiAiQnJlZGRlZW5oZWQiLAotICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICJGYXN0LWJyZWRkZSBzw7hqbGVyIiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiUGxhY2VyaW5nIGFmIHRhYmVsIiwKLSAgIkNlbGwgc3BhY2luZzoiOiAiQ2VsbGVhZnN0YW5kOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkFmc3RhbmQgbWVsbGVtIGNlbGxlciIsCi0gICJDZWxsIHBhZGRpbmc6IjogIkNlbGxlZnlsZDoiLAotICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICJMdWZ0IG1lbGxlbSBpbmRob2xkIG9nIGthbnRlciIsCi0gICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIkR1IHNrYWwgc2tyaXZlIGFudGFsbGV0IGFmIHLDpmtrZXIiLAotICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJEdSBza2FsIHNrcml2ZSBhbnRhbGxldCBhZiBzw7hqbGVyIiwKLQotICAvLyBJbnNlcnQgSW1hZ2UKLSAgIkluc2VydCBJbWFnZSI6ICJJbmRzw6Z0IGJpbGxlZGUiLAotICAiSW1hZ2UgVVJMOiI6ICJCaWxsZWRlIFVSTDoiLAotICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkFuZ2l2IGJpbGxlZGV0cyBVUkwiLAotICAiUHJldmlldyI6ICJTbXVna2lnIiwKLSAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJTbXVna2lnIGFmIGJpbGxlZGV0IGkgZXQgbnl0IHZpbmR1ZSIsCi0gICJBbHRlcm5hdGUgdGV4dDoiOiAiQWx0ZXJuYXRpdiB0ZXh0OiIsCi0gICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJmb3IgYnJvd3NlcmUgZGVyIGlra2UgdW5kZXJzdMO4dHRlciBiaWxsZWRlciIsCi0gICJQb3NpdGlvbmluZyBvZiB0aGlzIGltYWdlIjogIlBsYWNlcmluZyBhZiBiaWxsZWRldCIsCi0gICJJbWFnZSBQcmV2aWV3OiI6ICJCaWxsZWRlIHNtdWdraWc6IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiRHUgc2thbCBhbmdpdmUgZW4gVVJMIiwKLQotICAvLyBkZS1idXR0b25zIGhhdmUgbGV0dGVycyBtYXRjaGluZyBkYW5pc2ggOi0pCi0gICJidXR0b25fYm9sZCI6ICJkZS9ib2xkLmdpZiIsCi0gICJidXR0b25faXRhbGljIjogImRlL2l0YWxpYy5naWYiLAotICAiYnV0dG9uX3VuZGVybGluZSI6ICJkZS91bmRlcmxpbmUuZ2lmIiwKLQotICAvLyBFZGl0b3IgSGVscAotICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIlRhc3RhdHVyZ2VudmVqZSIsCi0gICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiRWRpdG9yZW4ga2VuZGVyIGbDuGxnZW5kZSBrb21iaW5hdGlvbmVyOiIsCi0gICJuZXcgcGFyYWdyYXBoIjogIk55dCBhZnNuaXQiLAotICAiaW5zZXJ0IGxpbmVicmVhayI6ICJJbmRzw6Z0IGxpbmplc2tpZnQiLAotICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiRm9ybWF0ZXIgYWZzbml0IiwKLSAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJSZW5zIGluZGhvbGQga29waWVyZXQgZnJhIFdvcmQiLAotICAiSGVhZGluZ3MiOiAiT3ZlcnNrcmlmdCAxIHRpbCA2IiwKLSAgIkNsb3NlIjogIkx1ayIsCi0KLSAgLy8gTG9hZGluZyBtZXNzYWdlcwotICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQhIjogIkVkaXRvcmVuIGhlbnRlcyBpbmQuIFZlbnQgdmVubGlnc3QuIiwKLSAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iIDogIlBsdWdpbiAkcGx1Z2luIGhlbnRlcyIsCi0gICJSZWdpc3RlciBwbHVnaW4gJHBsdWdpbiIgOiAiUGx1Z2luICRwbHVnaW4gcmVnaXN0cmVyZXMiLCAKLSAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAiT2JqZWt0IHJlZ2lzdHJlcmVzIiwKLSAgIkdlbmVyYXRlIFhpbmhhIGZyYW1ld29yayI6ICJYaW5oYSBGcmFtZXdvcmsgZ2VuZXJlcmVzIiwKLSAgIkluaXQgZWRpdG9yIHNpemUiOiJTdMO4cnJlbHNlbiBiZXJlZ25lcyIsCi0gICJDcmVhdGUgVG9vbGJhciI6ICJPcHJldHRlciB2w6Zya3TDuGpzbGluamUiLAotICAiQ3JlYXRlIFN0YXR1c2JhciIgOiAiT3ByZXR0ZXIgc3RhdHVzbGluamUiLAotICAiUmVnaXN0ZXIgcmlnaHQgcGFuZWwiIDogIlJlZ2lzdHJlcmVyIGjDuGpyZSBwYW5lbCIsCi0gICJSZWdpc3RlciBsZWZ0IHBhbmVsIiA6ICJSZWdpc3RyZXJlciB2ZW5zdHJlIHBhbmVsIiwKLSAgIlJlZ2lzdGVyIGJvdHRvbSBwYW5lbCIgOiAiUmVnaXN0cmVyZXIgbmVkZXJzdGUgcGFuZWwiLAotICAiUmVnaXN0ZXIgdG9wIHBhbmVsIiA6ICJSZWdpc3RyZXJlciDDuHZlcnN0ZSBwYW5lbCIsCi0gICJGaW5pc2hpbmciIDogIkFmc2x1dHRlciIsCi0gIAotICAvLyBDb2xvclBpY2tlcgotICAiQ2xpY2sgYSBjb2xvci4uLiIgOiAiVsOmbGcgZmFydmUiLAotICAiU2FtcGxlIiA6ICJFa3NlbXBlbCIsCi0gICJXZWIgU2FmZTogIiA6ICJXZWIgU2FmZTogIiwKLSAgIkNvbG9yOiAiIDogIkZhcnZlOiAiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9kZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2RlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGU1ZWMyLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2RlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTcxICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0vLyBMQU5HOiAiZGUiLCBFTkNPRElORzogVVRGLTgKLXsKLSAgIkJvbGQiOiAiRmV0dCIsCi0gICJJdGFsaWMiOiAiS3Vyc2l2IiwKLSAgIlVuZGVybGluZSI6ICJVbnRlcnN0cmljaGVuIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiRHVyY2hnZXN0cmljaGVuIiwKLSAgIlN1YnNjcmlwdCI6ICJUaWVmZ2VzdGVsbHQiLAotICAiU3VwZXJzY3JpcHQiOiAiSG9jaGdlc3RlbGx0IiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJMaW5rc2LDvG5kaWciLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiWmVudHJpZXJ0IiwKLSAgIkp1c3RpZnkgUmlnaHQiOiAiUmVjaHRzYsO8bmRpZyIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAiQmxvY2tzYXR6IiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJOdW1tZXJpZXJ0ZSBMaXN0ZSIsCi0gICJCdWxsZXRlZCBMaXN0IjogIkF1ZnrDpGhsdW5nc2xpc3RlIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICJFaW56dWcgdmVya2xlaW5lcm4iLAotICAiSW5jcmVhc2UgSW5kZW50IjogIkVpbnp1ZyB2ZXJncsO2w59lcm4iLAotICAiRm9udCBDb2xvciI6ICJTY2hyaWZ0ZmFyYmUiLAotICAiQmFja2dyb3VuZCBDb2xvciI6ICJIaW5kZXJncnVuZGZhcmJlIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICJIb3Jpem9udGFsZSBMaW5pZSIsCi0gICJJbnNlcnQgV2ViIExpbmsiOiAiSHlwZXJsaW5rIGVpbmbDvGdlbiIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIkJpbGQgZWluZsO8Z2VuL3ZlcsOkbmRlcm4iLAotICAiSW5zZXJ0IFRhYmxlIjogIlRhYmVsbGUgZWluZsO8Z2VuIiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJIVE1MIFF1ZWxsdGV4dCBlaW4vYXVzc2NoYWx0ZW4iLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiRWRpdG9yIHZlcmdyw7bDn2VybiIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICLDnGJlciBkaWVzZW4gRWRpdG9yIiwKLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIkhpbGZlIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiRGVyemVpdGlnZXIgU3RpbCIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJSw7xja2fDpG5naWciLAotICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiV2llZGVyaG9sZW4iLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJBdXNzY2huZWlkZW4iLAotICAiQ29weSBzZWxlY3Rpb24iOiAiS29waWVyZW4iLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiRWluZsO8Z2VuIGF1cyBkZXIgWndpc2NoZW5hYmxhZ2UiLAotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiVGV4dHJpY2h0dW5nIHZvbiBMaW5rcyBuYWNoIFJlY2h0cyIsCi0gICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJUZXh0cmljaHR1bmcgdm9uIFJlY2h0cyBuYWNoIExpbmtzIiwKLSAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIkZvcm1hdGllcnVuZyBlbnRmZXJuZW4iLAotICAiU2VsZWN0IGFsbCI6ICJBbGxlcyBtYXJraWVyZW4iLAotICAiUHJpbnQgZG9jdW1lbnQiOiAiRG9rdW1lbnQgYXVzZHJ1Y2tlbiIsCi0gICJDbGVhciBNU09mZmljZSB0YWdzIjogIk1TT2ZmaWNlIGZpbHRlciIsCi0gICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJaZWljaGVuc2F0eiBGb3JtYXRpZXJ1bmdlbiBlbnRmZXJuZW4iLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIldvbGxlbiBTaWUgWmVpY2hlbnNhdHp0eXBlbiBlbnRmZXJuZW4iLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiV29sbGVuIFNpZSBaZWljaGVuc2F0emdyw7bDn2VuIGVudGZlcm5lbiIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIldvbGxlbiBzaWUgWmVpY2hlbnNhdHpmYXJiZW4gZW50ZmVybmVuIiwKLSAgIlNwbGl0IEJsb2NrIjogIkJsb2NrIHRlaWxlbiIsCi0gICJUb2dnbGUgQm9yZGVycyI6ICJUYWJlbGxlbnLDpG5kZXIgZWluL2F1c2JsZW5kZW4iLAotICAiU2F2ZSBhcyI6ICJzcGVpY2hlcm4gdW50ZXIiLAotICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICJFaW5mw7xnZW4vw5xiZXJzY2hyZWliZW4iLAotICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IEZvcm1hdCAmIzgyMTI7IiwKLSAgIkhlYWRpbmcgMSI6ICLDnGJlcnNjaHJpZnQgMSIsCi0gICJIZWFkaW5nIDIiOiAiw5xiZXJzY2hyaWZ0IDIiLAotICAiSGVhZGluZyAzIjogIsOcYmVyc2NocmlmdCAzIiwKLSAgIkhlYWRpbmcgNCI6ICLDnGJlcnNjaHJpZnQgNCIsCi0gICJIZWFkaW5nIDUiOiAiw5xiZXJzY2hyaWZ0IDUiLAotICAiSGVhZGluZyA2IjogIsOcYmVyc2NocmlmdCA2IiwKLSAgIk5vcm1hbCI6ICJOb3JtYWwgKEFic2F0eikiLAotICAiQWRkcmVzcyI6ICJBZHJlc3NlIiwKLSAgIkZvcm1hdHRlZCI6ICJGb3JtYXRpZXJ0IiwKLQotICAvL2RpYWxvZ3MKLSAgIk9LIjogIk9LIiwKLSAgIkNhbmNlbCI6ICJBYmJyZWNoZW4iLAotICAiUGF0aCI6ICJQZmFkIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJTaWUgc2luZCBpbSBUZXh0LU1vZHVzLiBCZW51dHplbiBTaWUgZGVuIFs8Pl0gQnV0dG9uLCB1bSBpbiBkZW4gdmlzdWVsbGVuIE1vZHVzIChXWVNJV0lHKSB6dSBnZWxhbmdlbi4iLAotICAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiQXVzIFNpY2hlcmhlaXRzZ3LDvG5kZW4gZMO8cmZlbiBTa3JpcHRlIG5vcm1hbGVyd2Vpc2UgbmljaHQgYXVmIEF1c3NjaG5laWRlbi9Lb3BpZXJlbi9FaW5mw7xnZW4genVncmVpZmVuLiBCZW51dHplbiBTaWUgYml0dGUgZGllIGVudHNwcmVjaGVuZGVuIFRhc3RhdHVyLUtvbW1hbmRvcyAoU3RyZyArIHgvYy92KS4iLAotCi0gICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGUgYSBsaW5rIjogIlNpZSBtw7xzc2VuIGVpbmVuIFRleHQgbWFya2llcmVuLCB1bSBlaW5lbiBMaW5rIHp1IGVyc3RlbGxlbiIsCi0gICJZb3VyIERvY3VtZW50IGlzIG5vdCB3ZWxsIGZvcm1lZC4gQ2hlY2sgSmF2YVNjcmlwdCBjb25zb2xlIGZvciBkZXRhaWxzLiI6ICJJaHIgRG9rdW1lbnQgaXN0IGluIGtlaW5lbSBzYXViZXJlbiBGb3JtYXQuIEJlbnV0emVuIFNpZSBkaWUgSmF2YXNjcmlwdCBDb25zb2xlIGbDvHIgd2VpdGVyZSBJbmZvcm1hdGlvbmVuLiIsCi0KLSAgIkFsaWdubWVudDoiOiAiQXVzcmljaHR1bmc6IiwKLSAgIk5vdCBzZXQiOiAibmljaHQgZWluZ2VzdGVsbHQiLAotICAiTGVmdCI6ICJsaW5rcyIsCi0gICJSaWdodCI6ICJyZWNodHMiLAotICAiVGV4dHRvcCI6ICJvYmVuIGLDvG5kaWciLAotICAiQWJzbWlkZGxlIjogIm1pdHRpZyIsCi0gICJCYXNlbGluZSI6ICJHcnVuZGxpbmllIiwKLSAgIkFic2JvdHRvbSI6ICJ1bnRlbiBiw7xuZGlnIiwKLSAgIkJvdHRvbSI6ICJ1bnRlbiIsCi0gICJNaWRkbGUiOiAiemVudHJpZXJ0IiwKLSAgIlRvcCI6ICJvYmVuIiwKLQotICAiTGF5b3V0IjogIkxheW91dCIsCi0gICJTcGFjaW5nIjogIkFic3RhbmQiLAotICAiSG9yaXpvbnRhbDoiOiAiaG9yaXpvbnRhbDoiLAotICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogImhvcml6b250YWxlciBJbmhhbHRzYWJzdGFuZCIsCi0gICJWZXJ0aWNhbDoiOiAidmVydGlrYWw6IiwKLSAgIlZlcnRpY2FsIHBhZGRpbmciOiAidmVydGlrYWxlciBJbmhhbHRzYWJzdGFuZCIsCi0gICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJSYW5kc3TDpHJrZToiLAotICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJsZWVyIGxhc3NlbiBmw7xyIGtlaW5lbiBSYW5kIiwKLQotICAvL0luc2VydCBMaW5rCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiVmVya27DvHBmdW5nIGhpbnp1ZsO8Z2VuL8OkbmRlcm4iLAotICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJrLkEuIChpbXBsaXppdCkiLAotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOZXVlcyBGZW5zdGVyIChfYmxhbmspIiwKLSAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJTZWxiZXIgUmFobWVuIChfc2VsZikiLAotICAiVG9wIGZyYW1lIChfdG9wKSI6ICJPYmVyc3RlciBSYWhtZW4gKF90b3ApIiwKLSAgIk90aGVyIjogIkFuZGVyZXMiLAotICAiVGFyZ2V0OiI6ICJaaWVsOiIsCi0gICJUaXRsZSAodG9vbHRpcCk6IjogIlRpdGVsIChUb29sdGlwKToiLAotICAiVVJMOiI6ICJVUkw6IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJTaWUgbcO8c3NlbiBlaW5lIFppZWwtVVJMIGFuZ2ViZW4gZsO8ciBkaWUgVmVya27DvHBmdW5nIGFuZ2ViZW4iLAotCi0gIC8vIEluc2VydCBUYWJsZQotICAiSW5zZXJ0IFRhYmxlIjogIlRhYmVsbGUgZWluZsO8Z2VuIiwKLSAgIlJvd3M6IjogIlplaWxlbjoiLAotICAiTnVtYmVyIG9mIHJvd3MiOiAiWmVpbGVuYW56YWhsIiwKLSAgIkNvbHM6IjogIlNwYWx0ZW46IiwKLSAgIk51bWJlciBvZiBjb2x1bW5zIjogIlNwYWx0ZW5hbnphaGwiLAotICAiV2lkdGg6IjogIkJyZWl0ZToiLAotICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhYmVsbGVuYnJlaXRlIiwKLSAgIlBlcmNlbnQiOiAiUHJvemVudCIsCi0gICJQaXhlbHMiOiAiUGl4ZWwiLAotICAiRW0iOiAiR2V2aWVydCIsCi0gICJXaWR0aCB1bml0IjogIkdyw7bDn2VuZWluaGVpdCIsCi0gICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIlNwYWx0ZW4gbWl0IGZlc3RlciBCcmVpdGUiLAotICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICJQb3NpdGlvbmllcnVuZyBkZXIgVGFiZWxsZSIsCi0gICJDZWxsIHNwYWNpbmc6IjogIlplbGxlbmFic3RhbmQ6IiwKLSAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiUmF1bSB6d2lzY2hlbiBhbmdyZW56ZW5kZW4gWmVsbGVuIiwKLSAgIkNlbGwgcGFkZGluZzoiOiAiSW5uZW5hYnN0YW5kOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIlJhdW0gendpc2NoZW4gSW5oYWx0IHVuZCBSYW5kIGRlciBaZWxsZSIsCi0gICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIkJpdHRlIGdlYmVuIFNpZSBkaWUgQW56YWhsIGRlciBaZWlsZW4gYW4iLAotICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJCaXR0ZSBnZWJlbiBTaWUgZGllIEFuemFobCBkZXIgU3BhbHRlbiBhbiIsCi0KLSAgLy8gSW5zZXJ0IEltYWdlCi0gICJJbnNlcnQgSW1hZ2UiOiAiQmlsZCBlaW5mw7xnZW4iLAotICAiSW1hZ2UgVVJMOiI6ICJCaWxkIFVSTDoiLAotICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkJpdHRlIGdlYmVuIHNpZSBoaWVyIGRpZSBCaWxkIFVSTCBlaW4iLAotICAiUHJldmlldyI6ICJWb3JhbnNpY2h0IiwKLSAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJWb3JhbnNpY2h0IGRlcyBCaWxkZXMgaW4gZWluZW0gbmV1ZW4gRmVuc3RlciIsCi0gICJBbHRlcm5hdGUgdGV4dDoiOiAiQWx0ZXJuYXRpdmVyIFRleHQ6IiwKLSAgIkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIjogImbDvHIgQnJvd3NlciwgZGllIGtlaW5lIEJpbGRlciB1bnRlcnN0w7x0emVuIiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaXRpb25pZXJ1bmcgZGllc2VzIEJpbGRlcyIsCi0gICJJbWFnZSBQcmV2aWV3OiI6ICJCaWxkIFZvcmFuc2ljaHQ6IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiQml0dGUgZ2ViZW4gU2llIGRpZSBVUkwgZWluIiwKLQotLyoKLSAgImJ1dHRvbl9ib2xkIjogImRlL2JvbGQuZ2lmIiwKLSAgImJ1dHRvbl9pdGFsaWMiOiAiZGUvaXRhbGljLmdpZiIsCi0gICJidXR0b25fdW5kZXJsaW5lIjogImRlL3VuZGVybGluZS5naWYiLAotKi8KLQotICAvLyBFZGl0b3IgSGVscAotICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIlRhc3RhdHVya8O8cnplbCIsCi0gICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiRGVyIEVkaXRvciB1bnRlcnN0w7x0enQgZGllIGZvbGdlbmRlbiBrb21iaW5hdGlvbmVuOiIsCi0gICJuZXcgcGFyYWdyYXBoIjogIk5ldWVyIEFic2F0eihQYXJhZ3JhcGgpIiwKLSAgImluc2VydCBsaW5lYnJlYWsiOiAiSGFydGVyIFVtYnJ1Y2ggZWluZsO8Z2VuIiwKLSAgIlNldCBmb3JtYXQgdG8gcGFyYWdyYXBoIjogIlNldHplIEZvcm1hdGllcnVuZyBhdWYgQWJzYXR6IiwKLSAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJWb24gV29yZCBlaW5nZWbDvGd0ZXIgVGV4dCBiZXJlaW5pZ2VuIiwKLSAgIkhlYWRpbmdzIjogIsOcYmVyc2NocmlmdCBUeXAgMSBiaXMgNiIsCi0gICJDbG9zZSI6ICJTY2hsaWXDn2VuIiwKLQotICAvLyBMb2FkaW5nIG1lc3NhZ2VzCi0gICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiRWRpdG9yIHdpcmQgZ2VsYWRlbi4gQml0dGUgd2FydGVuICEiLAotICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiIgOiAiUGx1Z2luICRwbHVnaW4gd2lyZCBnZWxhZGVuIiwKLSAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIiA6ICJQbHVnaW4gJHBsdWdpbiB3aXJkIHJlZ2lzdHJpZXJ0IiwgCi0gICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIk9iamVrdCB3aXJkIGdlbmVyaWVydCIsCi0gICJHZW5lcmF0ZSBYaW5oYSBmcmFtZXdvcmsiOiAiWGluaGEgRnJhbWV3b3JrIHdpcmQgZ2VuZXJpZXJ0IiwKLSAgIkluaXQgZWRpdG9yIHNpemUiOiJHcsO2w59lIHdpcmQgYmVyZWNobmV0IiwgCi0gICJDcmVhdGUgVG9vbGJhciI6ICJXZXJremV1Z2xlaXN0ZSB3aXJkIGdlbmVyaWVydCIsCi0gICJDcmVhdGUgU3RhdHVzYmFyIiA6ICJTdGF0dXNsZWlzdGUgd2lyZCBnZW5lcmllcnQiLAotICAiUmVnaXN0ZXIgcmlnaHQgcGFuZWwiIDogIlJlY2h0ZXMgUGFuZWwgd2lyZCBnZW5lcmllcnQiLCAKLSAgIlJlZ2lzdGVyIGxlZnQgcGFuZWwiIDogIkxpbmtlcyBQYW5lbCB3aXJkIGdlbmVyaWVydCIsIAotICAiUmVnaXN0ZXIgYm90dG9tIHBhbmVsIiA6ICJVbnRlcmVzIFBhbmVsIHdpcmQgZ2VuZXJpZXJ0IiwgCi0gICJSZWdpc3RlciB0b3AgcGFuZWwiIDogIk9iZXJlcyBQYW5lbCB3aXJkIGdlbmVyaWVydCIsIAotICAiRmluaXNoaW5nIiA6ICJMYWRlbiB3aXJkIGFiZ2VzY2hsb3NzZW4iLCAKLSAgCi0gIC8vIENvbG9yUGlja2VyCi0gICJDbGljayBhIGNvbG9yLi4uIiA6ICJGYXJiZSB3w6RobGVuIiwKLSAgIlNhbXBsZSIgOiAiQmVpc3BpZWwiLAotICAiV2ViIFNhZmU6ICIgOiAiV2ViIFNhZmU6ICIsCi0gICJDb2xvcjogIiA6ICJGYXJiZTogIgotfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9lZS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2VlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTM0MjcxLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2VlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogImVlIiwgRU5DT0RJTkc6IFVURi04Ci0vLyBBdXRob3I6IE1hcnRpbiBSYWllLCA8YWxiZXJ0dmlsbEBob3QuZWU+Ci0KLS8vIEZPUiBUUkFOU0xBVE9SUzoKLS8vCi0vLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKLS8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKLS8vCi0vLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKLS8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKLS8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKLQotewotICAiQm9sZCI6ICJQYWtzIiwKLSAgIkl0YWxpYyI6ICJLdXJzaWl2IiwKLSAgIlVuZGVybGluZSI6ICJBbGxha3JpaXBzdXRhdHVkIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiTMOkYmlrcmlpcHN1dGF0dWQiLAotICAiU3Vic2NyaXB0IjogIkFsbGluZGVrcyIsCi0gICJTdXBlcnNjcmlwdCI6ICLDnGxhaW5kZWtzIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJKb29uZGEgdmFzYWt1bGUiLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiSm9vbmRhIGtlc2tlbGUiLAotICAiSnVzdGlmeSBSaWdodCI6ICJKb29uZGEgcGFyZW1hbGUiLAotICAiSnVzdGlmeSBGdWxsIjogIlLDtsO2cGpvb25kYSIsCi0gICJPcmRlcmVkIExpc3QiOiAiTnVtbWVyZHVzIiwKLSAgIkJ1bGxldGVkIExpc3QiOiAiVMOkcHBsb2VuZCIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiVsOkaGVuZGEgdGFhbmV0IiwKLSAgIkluY3JlYXNlIEluZGVudCI6ICJTdXVyZW5kYSB0YWFuZXQiLAotICAiRm9udCBDb2xvciI6ICJGb25kaSB2w6RydiIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIlRhdXN0YSB2w6RydiIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXNvbnRhYWxqb29uIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICJMaXNhIHZpaXQiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJMaXNhIHBpbHQiLAotICAiSW5zZXJ0IFRhYmxlIjogIkxpc2EgdGFiZWwiLAotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIkhUTUwvdGF2YWxpbmUgdmFhZGUiLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiU3V1cmVuZGEgdG9pbWV0aSBha2VuIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlRlYXZlIHRvaW1ldGkga29odGEiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiU3Bpa2tlciIsCi0gICJDdXJyZW50IHN0eWxlIjogIktpcmphc3RpaWwiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiVsO1dGEgdGFnYXNpIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlRlZSB1dWVzdGkiLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJMw7Vpa2EiLAotICAiQ29weSBzZWxlY3Rpb24iOiAiS29wZWVyaSIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJLbGVlYmkiLAotICAiT0siOiAiT0siLAotICAiQ2FuY2VsIjogIkxvb2J1IiwKLSAgIlBhdGgiOiAiUGF0aCIsCi0gICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiU2Egb2xlZCB0ZWtzdGlyZXppaW1pcy4gIEthc3V0YSBudXBwdSBbPD5dIGzDvGxpdGFtYWtzIHRhZ2FzaSBXWVNJV0lHIHJlemlpbWkuIgotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZWwuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9lbC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmMzZGY5Ni4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9lbC5qcworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0KLS8vIExBTkc6ICJlbCIsIEVOQ09ESU5HOiBVVEYtOAotLy8gQXV0aG9yOiBEaW1pdHJpcyBHbGV6b3MsIGRpbWl0cmlzQGdsZXpvcy5jb20KLQotewotICAiQm9sZCI6ICLOnsKIzp7Cvc6fwoTOns6Pzp7Cvc6ewrEiLAotICAiSXRhbGljIjogIs6ewqDOnsK7zp7CrM6ewrPOns6Jzp7CsSIsCi0gICJVbmRlcmxpbmUiOiAizp7vv73On8KAzp7Oj86ewrPOn8KBzp7Csc6ezozOns6Mzp7Oic6fwoPOns6Mzp7Crc6ewr3OnsKxIiwKLSAgIlN0cmlrZXRocm91Z2giOiAizp7ClM6ezonOnsKxzp7Cs86fwoHOnsKxzp7OjM6ezozOnsKtzp7Cvc6ewrEiLAotICAiU3Vic2NyaXB0IjogIs6ewpTOns6Fzp7igJXOns6Kzp/ChM6ewrfOn8KCIiwKLSAgIlN1cGVyc2NyaXB0IjogIs6ewpTOns6Fzp7igJXOns6Kzp/ChM6ewrfOn8KCIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICLOnsKjzp/ChM6ezo/OnuKAlc6fwofOns6Jzp/Cg86ewrcgzp7Ckc6fwoHOns6Jzp/Cg86fwoTOns6Fzp/Cgc6ewqwiLAotICAiSnVzdGlmeSBDZW50ZXIiOiAizp7Co86fwoTOns6Pzp7igJXOn8KHzp7Oic6fwoPOnsK3IM6ewprOnsKtzp7Cvc6fwoTOn8KBzp7OjyIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIs6ewqPOn8KEzp7Oj86e4oCVzp/Ch86ezonOn8KDzp7CtyDOnsKUzp7Ohc6ezo7Ons6Jzp7CrCIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAizp7CoM6ewrvOnu+/vc6fwoHOnsK3zp/CgiDOnsKjzp/ChM6ezo/OnuKAlc6fwofOns6Jzp/Cg86ewrciLAotICAiT3JkZXJlZCBMaXN0IjogIs6ewpHOn8KBzp7igJXOns6Izp7OjM6ewrfOn8KDzp7CtyIsCi0gICJCdWxsZXRlZCBMaXN0IjogIs6ewprOns6Pzp/Chc6ezorOns6Kzp7igJXOns6Ezp7Ohc6fwoIiLAotICAiRGVjcmVhc2UgSW5kZW50IjogIs6ewpzOns6Fzp7igJXOn8KJzp/Cg86ewrcgzp7Clc6fwoPOns6Pzp/Ch86e77+9zp/CgiIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAizp7Ckc6fwo3Ons6Ozp7Ct86fwoPOnsK3IM6ewpXOn8KDzp7Oj86fwofOnu+/vc6fwoIiLAotICAiRm9udCBDb2xvciI6ICLOnsKnzp/Cgc6fwo7Ons6Mzp7CsSDOnsKTzp/Cgc6ewrHOns6Mzp7OjM6ewrHOn8KEzp7Oj86fwoPOns6Fzp7Oic6fwoHOnsKszp/CgiIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIs6ewqfOn8KBzp/Cjs6ezozOnsKxIM6ewqbOn8KMzp7Cvc6fwoTOns6Pzp/ChSIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAizp7Cn86fwoHOns6Jzp7Ohs6fwozOnsK9zp/ChM6ezonOnsKxIM6ewpPOn8KBzp7Csc6ezozOns6Mzp7vv70iLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIs6ewpXOns6Jzp/Cg86ewrHOnsKzzp/Cic6ewrPOnu+/vSDOnsKjzp/Chc6ewr3Ons6Ezp7Crc6fwoPOns6Mzp7Oj86fwoUiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLOnsKVzp7Oic6fwoPOnsKxzp7Cs86fwonOnsKzzp7vv70vzp7vv73On8KBzp7Oj86fwoDOns6Pzp/CgM6ezo/OnuKAlc6ewrfOn8KDzp7CtyDOnsKVzp7Oic6ezorOn8KMzp7Cvc6ewrHOn8KCIiwKLSAgIkluc2VydCBUYWJsZSI6ICLOnsKVzp7Oic6fwoPOnsKxzp7Cs86fwonOnsKzzp7vv70gzp7CoM6e4oCVzp7Cvc6ewrHOns6Kzp7CsSIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAizp7Clc6ewr3OnsKxzp7Cu86ewrvOnsKxzp7Cs86e77+9IM6fwoPOns6FL86ewrHOn8KAzp/CjCBIVE1MIiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIs6ewpzOns6Fzp7Cs86ewq3OnsK9zp7OiM6fwoXOnsK9zp/Cg86ewrcgzp7Ohc6fwoDOns6Fzp7Ojs6ezoXOn8KBzp7Cs86ewrHOn8KDzp/ChM6e77+9IiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIs6ewqDOnsK7zp7Ct86fwoHOns6Pzp/Chs6ezo/On8KBzp7igJXOns6Fzp/CgiIsCi0gICJIZWxwIHVzaW5nIGVkaXRvciI6ICLOnsKSzp7Oj86e77+9zp7OiM6ezoXOns6Jzp7CsSIsCi0gICJDdXJyZW50IHN0eWxlIjogIs6ewqDOnsKxzp/Cgc6fwo7OnsK9IM6fwoPOn8KEzp/Chc6ewrsiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAizp7Ckc6ewr3OnsKxzp7igJXOn8KBzp7Ohc6fwoPOnsK3IM6fwoTOns6Fzp7Cu86ezoXOn8KFzp/ChM6ewrHOnuKAlc6ewrHOn8KCIM6ezoXOnsK9zp7Crc6fwoHOnsKzzp7Ohc6ezonOnsKxzp/CgiIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLOnsKVzp/CgM6ewrHOnsK9zp7Csc6fwobOns6Pzp/Cgc6ewqwgzp7Csc6fwoDOn8KMIM6ewrHOnsK9zp7Csc6e4oCVzp/Cgc6ezoXOn8KDzp7CtyIsCi0gICJDdXQgc2VsZWN0aW9uIjogIs6ewpHOn8KAzp7Oj86ezorOns6Pzp/CgM6e77+9IiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIs6ewpHOnsK9zp/ChM6ezonOnsKzzp/Cgc6ewrHOn8KGzp7vv70iLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAizp7Clc6fwoDOns6Jzp7Ois6fwozOnsK7zp7Cu86ewrfOn8KDzp7CtyIsCi0gICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICLOnsKazp7Csc6fwoTOns6Fzp/Cjc6ezojOn8KFzp7Cvc6fwoPOnsK3IM6ewrHOn8KBzp7Oic6fwoPOn8KEzp7Ohc6fwoHOnsKsIM6fwoDOn8KBzp7Oj86fwoIgzp7OhM6ezoXOns6Ozp7Oic6ewqwiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAizp7Cms6ewrHOn8KEzp7Ohc6fwo3Ons6Izp/Chc6ewr3On8KDzp7CtyDOnsKxzp/CgM6fwowgzp7OhM6ezoXOns6Ozp7Oic6ewqwgzp/CgM6fwoHOns6Pzp/CgiDOn8KEzp7CsSDOnsKxzp/Cgc6ezonOn8KDzp/ChM6ezoXOn8KBzp7CrCIsCi0gICJPSyI6ICJPSyIsCi0gICJDYW5jZWwiOiAizp7Ckc6ezorOn8KNzp/Cgc6fwonOn8KDzp7CtyIsCi0gICJQYXRoIjogIs6ewpTOns6Jzp7Csc6ezoTOn8KBzp7Oj86ezozOnu+/vSIsCi0gICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAizp7Clc6e4oCVzp/Cg86fwoTOns6FIM6fwoPOns6FIFRFWFQgTU9ERS4gIM6ewqfOn8KBzp7Ct86fwoPOns6Jzp7OjM6ezo/On8KAzp7Oj86ezonOnu+/vc6fwoPOn8KEzp7OhSDOn8KEzp7OjyDOns6Kzp7Oj86fwoXOns6Mzp/CgM6e4oCVIFs8Pl0gzp7Cs86ezonOnsKxIM6ewr3OnsKxIM6ezoXOn8KAzp7Csc6ewr3OnsKtzp/Cgc6ezojOns6Fzp/ChM6ezoUgzp/Cg86fwoTOns6PIFdZU0lXSUcuIiwKLSAgIlRoZSBmdWxsIHNjcmVlbiBtb2RlIGlzIGtub3duIHRvIGNhdXNlIHByb2JsZW1zIHdpdGggSW50ZXJuZXQgRXhwbG9yZXIsIGR1ZSB0byBicm93c2VyIGJ1Z3MgdGhhdCB3ZSB3ZXJlbiI6ICLOnsKXIM6ezorOnsKxzp/ChM6ewqzOn8KDzp/ChM6ewrHOn8KDzp7CtyDOn8KAzp7Cu86e77+9zp/Cgc6ewrfOn8KCIM6ezo/Ons6Izp/CjM6ewr3OnsK3zp/CgiDOnsKtzp/Ch86ezoXOns6JIM6fwoDOn8KBzp7Oj86ewrLOnsK7zp7vv73Ons6Mzp7Csc6fwoTOnsKxIM6ezozOns6FIM6fwoTOns6Pzp7CvSBJbnRlcm5ldCBFeHBsb3Jlciwgzp7Cu86fwozOnsKzzp/CiSDOn8KDzp/Chs6ewrHOnsK7zp7OjM6ewqzOn8KEzp/Cic6ewr0gzp/Cg86fwoTOns6Pzp7CvSDOnuKAlc6ezoTOns6Jzp7OjyDOn8KEzp7Oj86ewr0gYnJvd3Nlci4gIM6ewpHOnsK9IM6fwoTOns6PIM6fwoPOn8KNzp/Cg86fwoTOnsK3zp7OjM6ewrEgzp/Cg86ewrHOn8KCIM6ezoXOnuKAlc6ewr3OnsKxzp7OiSBXaW5kb3dzIDl4IM6ezozOn8KAzp7Oj86fwoHOns6Fzp7igJUgzp7Ois6ewrHOns6JIM6ewr3OnsKxIM6fwofOn8KBzp7Ohc6ezonOnsKxzp/Cg86fwoTOns6Fzp7igJXOn8KEzp7OhSByZWJvb3QuIM6ewpHOnsK9IM6ezoXOnuKAlc6fwoPOn8KEzp7OhSDOn8KDzp7igJXOnsKzzp7Oj86fwoXOn8KBzp7Oj86ezoksIM6fwoDOnsKxzp/ChM6e77+9zp/Cg86fwoTOns6FIM6ewp/OnsKaLiIsCi0gICJDYW5jZWwiOiAizp7Ckc6ezorOn8KNzp/Cgc6fwonOn8KDzp7CtyIsCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAizp7Clc6ezonOn8KDzp7Csc6ewrPOn8KJzp7Cs86e77+9L86e77+9zp/Cgc6ezo/On8KAzp7Oj86fwoDOns6Pzp7igJXOnsK3zp/Cg86ewrcgzp/Cg86fwo3OnsK9zp7OhM6ezoXOn8KDzp7OjM6ezo/On8KFIiwKLSAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAizp7Cnc6ewq3Ons6PIM6fwoDOnsKxzp/Cgc6ewqzOns6Izp/Chc6fwoHOns6PIChfYmxhbmspIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAizp7Cms6ewrHOnsK9zp7Crc6ewr3OnsKxICjOn8KHzp/Cgc6e77+9zp/Cg86ewrcgzp7Csc6fwoDOn8KMzp7Cu86fwoXOn8KEzp7Oj86fwoUpIiwKLSAgIk90aGVyIjogIs6ewpHOnsK7zp7Cu86ezo8iLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIs6eworOns6Ezp7Oic6ezo8gZnJhbWUgKF9zZWxmKSIsCi0gICJUYXJnZXQ6IjogIlRhcmdldDoiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICLOnu+/vc6e4oCVzp/ChM6ewrvOns6Pzp/CgiAodG9vbHRpcCk6IiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAizp7CoM6ewqzOnsK9zp/CiSBmcmFtZSAoX3RvcCkiLAotICAiVVJMOiI6ICJVUkw6IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICLOnsKgzp/Cgc6ewq3On8KAzp7Ohc6ezokgzp7Cvc6ewrEgzp7Ohc6ezonOn8KDzp7CrM6ewrPOns6Fzp/ChM6ezoUgzp/ChM6ezo8gVVJMIM6fwoDOns6Pzp/ChSDOns6Pzp7OhM6ewrfOnsKzzp7Ohc6e4oCVIM6ewrHOn8KFzp/ChM6fwozOn8KCIM6ezo8gzp/Cg86fwo3OnsK9zp7OhM6ezoXOn8KDzp7OjM6ezo/On8KCIgotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9lcy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY2ZGFjMC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9lcy5qcworKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04Ci17Ci0gICJCb2xkIjogIk5lZ3JpdGEiLAotICAiSXRhbGljIjogIkN1cnNpdmEiLAotICAiVW5kZXJsaW5lIjogIlN1YnJheWFkbyIsCi0gICJTdHJpa2V0aHJvdWdoIjogIlRhY2hhZG8iLAotICAiU3Vic2NyaXB0IjogIlN1YsOtbmRpY2UiLAotICAiU3VwZXJzY3JpcHQiOiAiU3VwZXLDrW5kaWNlIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJBbGluZWFyIGEgbGEgaXpxdWllcmRhIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIkFsaW5lYXIgYWwgY2VudHJvIiwKLSAgIkp1c3RpZnkgUmlnaHQiOiAiQWxpbmVhciBhIGxhIGRlcmVjaGEiLAotICAiSnVzdGlmeSBGdWxsIjogIkp1c3RpZmljYXIiLAotICAiT3JkZXJlZCBMaXN0IjogIkxpc3RhIG51bWVyYWRhIiwKLSAgIkJ1bGxldGVkIExpc3QiOiAiTGlzdGEgbm8gbnVtZXJhZGEiLAotICAiRGVjcmVhc2UgSW5kZW50IjogIlJlZHVjaXIgc2FuZ3LDrWEiLAotICAiSW5jcmVhc2UgSW5kZW50IjogIkF1bWVudGFyIHNhbmdyw61hIiwKLSAgIkZvbnQgQ29sb3IiOiAiQ29sb3IgZGUgbGEgZnVlbnRlIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiQ29sb3IgZGUgZm9uZG8iLAotICAiSG9yaXpvbnRhbCBSdWxlIjogIlJlZ2xhIGhvcml6b250YWwiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIkluc2VydGFyIGVubGFjZSB3ZWIiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJbnNlcnRhci9tb2RpZmljYXIgaW1hZ2VuIiwKLSAgIkluc2VydCBUYWJsZSI6ICJJbnNlcnRhciB1bmEgdGFibGEiLAotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIlZlciBIVE1MIiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIkVkaXRvciBhIHBhbnRhbGxhIGNvbXBsZXRhIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlNvYnJlIGVzdGUgRWRpdG9yIiwKLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIkF5dWRhIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiRXN0aWxvIGFjdHVhbCIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJEZXNoYWNlciIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJSZWhhY2VyIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiQ29ydGFyIiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIkNvcGlhciIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJQZWdhciBkZXNkZSBlbCBwb3J0YXBhcGVsZXMiLAotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiRGlyZWNjacOzbiBkZSBpenF1aWVyZGEgYSBkZXJlY2hhIiwKLSAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIkRpcmVjY2nDs24gZGUgZGVyZWNoYSBhIGl6cXVpZXJkYSIsCi0gICJSZW1vdmUgZm9ybWF0dGluZyI6ICJCb3JyYXIgZm9ybWF0byIsCi0gICJTZWxlY3QgYWxsIjogIlNlbGVjY2lvbmFyIHRvZG8iLAotICAiUHJpbnQgZG9jdW1lbnQiOiAiSW1wcmltaXIgZG9jdW1lbnRvIiwKLSAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiQm9ycmFyIGV0aXF1ZXRhcyBkZSBNU09mZmljZSIsCi0gICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJCb3JyYXIgbGFzIGV0aXF1ZXRhcyBkZSBmdWVudGUiLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIsK/RGVzZWEgZWxpbWluYXIgbGFzIGRlZmluaWNpYW9uZXMgZGUgdGlwbyBkZSBmdWVudGU/IiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIsK/RGVzZWEgZWxpbWluYXIgbGFzIGRlZmluaWNpb25lcyBkZSB0YW1hw7FvIGRlIGZ1ZW50ZT8iLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICLCv0Rlc2VhIGVsaW1pbmFyIGxhcyBkZWZpbmljaW9uZXMgZGUgY29sb3IgZGUgZnVlbnRlPyIsCi0gICJTcGxpdCBCbG9jayI6ICJEaXZpZGlyIGVsIGJsb3F1ZSIsCi0gICJUb2dnbGUgQm9yZGVycyI6ICJBw7FhZGlyL1F1aXRhciBib3JkZXMiLAotICAiU2F2ZSBhcyI6ICJHdWFyZGFyIGNvbW8iLAotICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICJJbnNlcnRhci9Tb2JyZWVzY3JpYmlyIiwKLSAgIiYjODIxMjsgZm9ybWF0ICYjODIxMjsiOiAiJiM4MjEyOyBmb3JtYXRvICYjODIxMjsiLAotICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiJiM4MjEyOyBmdWVudGUgJiM4MjEyOyIsCi0gICImIzgyMTI7IHNpemUgJiM4MjEyOyI6ICImIzgyMTI7IHRhbWHDsW8gJiM4MjEyOyIsCi0gICJIZWFkaW5nIDEiOiAiQ2FiZWNlcmEgMSIsCi0gICJIZWFkaW5nIDIiOiAiQ2FiZWNlcmEgMiIsCi0gICJIZWFkaW5nIDMiOiAiQ2FiZWNlcmEgMyIsCi0gICJIZWFkaW5nIDQiOiAiQ2FiZWNlcmEgNCIsCi0gICJIZWFkaW5nIDUiOiAiQ2FiZWNlcmEgNSIsCi0gICJIZWFkaW5nIDYiOiAiQ2FiZWNlcmEgNiIsCi0gICJOb3JtYWwiOiAiTm9ybWFsIiwKLSAgIkFkZHJlc3MiOiAiRGlyZWNjacOzbiIsCi0gICJGb3JtYXR0ZWQiOiAiRm9ybWF0ZWFkbyIsCi0KLSAgLy9kaWFsb2dzCi0gICJPSyI6ICJBY2VwdGFyIiwKLSAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCi0gICJQYXRoIjogIlJ1dGEiLAotICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIlNlIGVuY3VlbnRyYSBlbiBNT0RPIFRFWFRPLiBVc2UgZWwgYm90w7NuIFs8Pl0gcGFyYSBjYW1iaWFyIGRlIG51ZXZvIGFsIG1vZG8gV1lTSVdZRyIsCi0gICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJFbCBib3TDs24gZGUgcGVnYXIgbm8gZnVuY2lvbmEgZW4gbG9zIG5hdmVnYWRvcmVzIGRlIE1vemlsbGEgcG9yIG1vdGl2b3MgZGUgc2VndXJpZGFkLiBQcmVzaW9uZSBDVFJMLVYgZW4gc3UgdGVjbGFkbyBwYXJhIHBlZ2FybG8gZGlyZWN0YW1lbnRlIiwKLQotICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRlIGEgbGluayI6ICJOZWNlc2l0YSBzZWxlY2Npb25hciBhbGfDum4gdGV4dG8gYW50ZXMgZGUgY3JlYXIgdW4gbGluayIsCi0gICJZb3VyIERvY3VtZW50IGlzIG5vdCB3ZWxsIGZvcm1lZC4gQ2hlY2sgSmF2YVNjcmlwdCBjb25zb2xlIGZvciBkZXRhaWxzLiI6ICJTdSBkb2N1bWVudG8gbm8gZXN0w6EgYmllbiBmb3JtYWRvLiBDb21wcnVlYmUgbGEgY29uc29sYSBkZSBKYXZhU2NyaXB0IHBhcmEgb2J0ZW5lciBtw6FzIGRldGFsbGVzIiwKLQotICAiQWxpZ25tZW50OiI6ICJBbGluZWFjacOzbjoiLAotICAiTm90IHNldCI6ICJObyBkZWZpbmlkbyIsCi0gICJMZWZ0IjogIkl6cXVpZXJkYSIsCi0gICJSaWdodCI6ICJEZXJlY2hhIiwKLSAgIlRleHR0b3AiOiAiVGV4dG8gU3VwZXJpb3IiLAotICAiQWJzbWlkZGxlIjogIk1lZGlvIEFic29sdXRvIiwKLSAgIkJhc2VsaW5lIjogIkzDrW5lYSBiYXNlIiwKLSAgIkFic2JvdHRvbSI6ICJJbmZlcmlvciBhYnNvbHV0byIsCi0gICJCb3R0b20iOiAiSW5mZXJpb3IiLAotICAiTWlkZGxlIjogIk1lZGlvIiwKLSAgIlRvcCI6ICJTdXBlcmlvciIsCi0KLSAgIkxheW91dCI6ICJEaXN0cmlidWNpw7NuIiwKLSAgIlNwYWNpbmciOiAiRXNwYWNpYWRvIiwKLSAgIkhvcml6b250YWw6IjogImhvcml6b250YWw6IiwKLSAgIkhvcml6b250YWwgcGFkZGluZyI6ICJSZWxsZW5vIGhvcml6b250YWwiLAotICAiVmVydGljYWw6IjogIlZlcnRpY2FsOiIsCi0gICJWZXJ0aWNhbCBwYWRkaW5nIjogIlJlbGxlbm8gVmVydGljYWwiLAotICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiVGFtYcOxbyBkZWwgYm9yZGU6IiwKLSAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiVmFjw61vIHNpIG5vIGRlc2VhIG5pbmfDum4gYm9yZGUiLAotCi0gIC8vSW5zZXJ0IExpbmsKLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJbnNlcnRhci9Nb2RpZmljYXIgdW4gZW5sYWNlIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiVmFjw61vICggdXNhciBpbXBsw61jaXRvICkiLAotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOdWV2YSB2ZW50YW5hIChfYmxhbmspIiwKLSAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJNaXNtbyBtYXJjbyAoX3NlbGYpIiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiTWFyY28gc3VwZXJpb3IgKF90b3ApIiwKLSAgIk90aGVyIjogIk90cm8iLAotICAiVGFyZ2V0OiI6ICJEZXN0aW5vOiIsCi0gICJUaXRsZSAodG9vbHRpcCk6IjogIlTDrXR1bG8gKFRvb2x0aXApOiIsCi0gICJVUkw6IjogIlVSTDoiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIkRlYmUgaW50cm9kdWNpciBsYSBVUkwgYSBkb25kZSBhcHVudGEgZXN0ZSBlbmxhY2UiLAotCi0gIC8vIEluc2VydCBUYWJsZQotICAiSW5zZXJ0IFRhYmxlIjogIkHDsWFkaXIgdW5hIHRhYmxhIiwKLSAgIlJvd3M6IjogIkZpbGFzOiIsCi0gICJOdW1iZXIgb2Ygcm93cyI6ICJOw7ptZXJvIGRlIGZpbGFzIiwKLSAgIkNvbHM6IjogIkNvbHVtbmFzOiIsCi0gICJOdW1iZXIgb2YgY29sdW1ucyI6ICJOw7ptZXJvIGRlIGNvbHVtbmFzIiwKLSAgIldpZHRoOiI6ICJBbmNobzoiLAotICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIkFuY2hvIGRlIGxhIHRhYmxhIiwKLSAgIlBlcmNlbnQiOiAiUG9yY2VudGFqZSIsCi0gICJQaXhlbHMiOiAiUGl4ZWxzIiwKLSAgIkVtIjogIkVtIiwKLSAgIldpZHRoIHVuaXQiOiAiVW5pZGFkIGRlIGFuY2h1cmEiLAotICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICJDb2x1bW5hcyBkZSBhbmNobyBmaWpvIiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiUG9zaWNpw7NuIGRlIGVzdGEgdGFibGEiLAotICAiQ2VsbCBzcGFjaW5nOiI6ICJFc3BhY2lhZG8gZW50cmUgY2VsZGFzOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkVzcGFjaWFkbyBlbnRyZSBjZWxkYXMgYWR5YWNlbnRlcyIsCi0gICJDZWxsIHBhZGRpbmc6IjogIlJlbGxlbm8gZGUgY2VsZGFzOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIkVzY2FwY2lvIGVudHJlIGVsIGNvbnRlbmlkbyB5IGVsIGJvcmRlIGRlIGxhIGNlbGRhIiwKLSAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiRGViZSBpbnRyb2R1Y2lyIHVuIG7Dum1lcm8gZGUgZmlsYXMiLAotICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJEZWJlIGludHJvZHVjaXIgdW4gbsO6bWVybyBkZSBjb2x1bW5hcyIsCi0KLSAgLy8gSW5zZXJ0IEltYWdlCi0gICJJbnNlcnQgSW1hZ2UiOiAiSW5zZXJ0YXIgdW5hIGltYWdlbiIsCi0gICJJbWFnZSBVUkw6IjogIkltYWdlbiBVUkw6IiwKLSAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICIiLAotICAiUHJldmlldyI6ICJQcmV2aXN1YWxpemFyIiwKLSAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQcmV2aXN1YWxpemFyIGVuIHVuYSBudWV2YSB2ZW50YW5hIiwKLSAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJUZXh0byBhbHRlcm5hdGl2bzoiLAotICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiUGFyYSBuYXZlZ2Fkb3JlcyBxdWUgbm8gc29wb3J0YW4gaW3DoWdlbmVzIiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaWNpw7NuIGRlIGxhIGltYWdlbiIsCi0gICJJbWFnZSBQcmV2aWV3OiI6ICJQcmV2aXN1YWxpemFjacOzbiBkZSBsYSBpbWFnZW46IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiRGViZSBpbnRyb2R1Y2lyIGxhIFVSTCIsCi0KLSAgLy8gRWRpdG9yIEhlbHAKLSAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICJBdGFqb3MgZGUgdGVjbGFkbyIsCi0gICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAiRWwgZWRpdG9yIHByb3BvcmNpb25hIGxhcyBzaWd1aWVudGVzIGNvbWJpbmFjaW9uZXM6IiwKLSAgIm5ldyBwYXJhZ3JhcGgiOiAiTnVldm8gcGFycmFmbyIsCi0gICJpbnNlcnQgbGluZWJyZWFrIjogIkluc2VydGFyIHNhbHRvIGRlIGzDrW5lYSIsCi0gICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICJFU3RhYmxlY2VyIGVsIGZvcm1hdG8gYSBwYXJyYWZvIiwKLSAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJMaW1waWFyIGVsIGNvbnRlbmlkbyBwZWdhZG8gZGVzZGUgV29yZCIsCi0gICJIZWFkaW5ncyI6ICJDYWJlY2VyYXMiLAotICAiQ2xvc2UiOiAiQ2VycmFyIiwKLQotICAvLyBMb2FkaW5nIG1lc3NhZ2VzCi0gICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiQ2FyZ2EgZW4gcHJvY2Vzby4gUG9yIGZhdm9yIGVzcGVyZS4iLAotICAiTG9hZGluZyBwbHVnaW4gJHBsdWdpbiIgOiAiQ2FyZ2FuZG8gZWwgcGx1Z2luICRwbHVnaW4iLAotICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iIDogIlJlZ2lzdHJvIGRlIHBsdWdpbiAkcGx1Z2luIiwgCi0gICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIkNvbnN0cnV5ZW5kbyBvYmpldG8iLAotICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIkdlbmVyYXIgWGluaGEgZnJhbWV3b3JrIiwKLSAgIkluaXQgZWRpdG9yIHNpemUiOiJJbmljaWFyIGVsIHRhbWHDsW8gZGVsIGVkaXRvciIsIAotICAiQ3JlYXRlIFRvb2xiYXIiOiAiQ3JlYXIgYmFycmEgZGUgaGVycmFtaWVudGFzIiwKLSAgIkNyZWF0ZSBTdGF0dXNiYXIiIDogIkNyZWFyIGJhcnJhIGRlIGVzdGFkbyIsCi0gICJSZWdpc3RlciByaWdodCBwYW5lbCIgOiAiUmVnaXN0cmFyIHBhbmVsIGRlcmVjaG8iLCAKLSAgIlJlZ2lzdGVyIGxlZnQgcGFuZWwiIDogIlJlZ2lzdHJhciBwYW5lbCBpenF1aWVyZG8iLCAKLSAgIlJlZ2lzdGVyIGJvdHRvbSBwYW5lbCIgOiAiUmVnaXN0YXIgcGFuZWwgaW5mZXJpb3IiLCAKLSAgIlJlZ2lzdGVyIHRvcCBwYW5lbCIgOiAiUmVnaXN0YXIgcGFuZWwgc3VwZXJpb3IiLCAKLSAgIkZpbmlzaGluZyIgOiAiRmluYWxpemFuZG8iLAotICAKLSAgLy8gQ29sb3JQaWNrZXIKLSAgIkNsaWNrIGEgY29sb3IuLi4iIDogIlNlbGVjY2lvbmUgdW4gY29sb3IuLi4iLAotICAiU2FtcGxlIiA6ICJNdWVzdHJhIiwKLSAgIldlYiBTYWZlOiAiIDogIkNvbG9yIHdlYjogIiwKLSAgIkNvbG9yOiAiIDogIkNvbG9yOiAiCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZXUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9ldS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJjMTNmNC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9ldS5qcworKysgL2Rldi9udWxsCkBAIC0xLDE2OSArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotLy8gTEFORzogImV1IiwgRU5DT0RJTkc6IFVURi04Ci17Ci0gICJCb2xkIjogIkxvZGlhIiwKLSAgIkl0YWxpYyI6ICJFdHphbmEiLAotICAiVW5kZXJsaW5lIjogIkF6cGltYXJyYXR1YSIsCi0gICJTdHJpa2V0aHJvdWdoIjogIk1hcnJhdHVhIiwKLSAgIlN1YnNjcmlwdCI6ICJBenBpbmRpemVhIiwKLSAgIlN1cGVyc2NyaXB0IjogIkdvaS1pbmRpemVhIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJFemtlcnJldGFyYSBsZXJyb2thdHUiLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiWmVudHJhdHUiLAotICAiSnVzdGlmeSBSaWdodCI6ICJFc2t1aW5ldGFyYSBsZXJyb2thdHUiLAotICAiSnVzdGlmeSBGdWxsIjogIkp1c3RpZmlrYXR1IiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJaZXJyZW5kYSBvcmRlbmF0dWEiLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJaZXJyZW5kYSBleiBvcmRlbmF0dWEiLAotICAiRGVjcmVhc2UgSW5kZW50IjogIktvc2thIGhhbmRpdHUiLAotICAiSW5jcmVhc2UgSW5kZW50IjogIktvc2thIHR4aWtpdHUiLAotICAiRm9udCBDb2xvciI6ICJUZXN0dS1rb2xvcmVhIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiQXR6ZWtvIGtvbG9yZWEiLAotICAiSG9yaXpvbnRhbCBSdWxlIjogIk1hcnJhIGhvcml6b250YWxhIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICJMb3R1cmEgdHhlcnRhdHUiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJcnVkaWEgdHhlcnRhdHUiLAotICAiSW5zZXJ0IFRhYmxlIjogIlRhdWxhIHR4ZXJ0YXR1IiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJJa3VzaSBkb2t1bWVudHVhIEhUTUwtbiIsCi0gICJFbmxhcmdlIEVkaXRvciI6ICJFZGl0b3JlYSBoYW5kaXR1IiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIkVkaXRvcmVhcmkgYnVydXouLi4iLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiTGFndW50emEiLAotICAiQ3VycmVudCBzdHlsZSI6ICJVbmVrbyBlc3RpbG9hIiwKLSAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkRlc2VnaW4iLAotICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQmVycmVnaW4iLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJFYmFraSBoYXV0YWtldGEiLAotICAiQ29weSBzZWxlY3Rpb24iOiAiS29waWF0dSBoYXV0YWtldGEiLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiSXRzYXRzaSBhcmJlbGVhbiBkYWdvZW5hIiwKLSAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkV6a2VycmV0aWsgZXNrdWluZXRhcmFrbyBub3JhYmlkZWEiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiRXNrdWluZXRpayBlemtlcnJldGFyYWtvIG5vcmFiaWRlYSIsCi0gICJSZW1vdmUgZm9ybWF0dGluZyI6ICJGb3JtYXRvYSBrZW5kdSIsCi0gICJTZWxlY3QgYWxsIjogIkRlbmEgYXVrZXJhdHUiLAotICAiUHJpbnQgZG9jdW1lbnQiOiAiRG9rdW1lbnR1YSBpbnByaW1hdHUiLAotICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICJNU09mZmljZSBldGlrZXRhayBlemFiYXR1IiwKLSAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIkV6YWJhdHUgdGVzdHVhcmVuIGV6YXVnYXJyaWFrIiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICJMZXRyYS10aXBvYWsgZXphYmF0dSBuYWhpIGFsIGRpdHV6dT8iLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiTGV0cmEtdGlwb2VuIG5ldXJyaWFrIGV6YWJhdHUgbmFoaSBhbCBkaXR1enU/IiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiTGV0cmEtdGlwb2VuIGtvbG9yZWFrIGV6YWJhdHUgbmFoaSBhbCBkaXR1enU/IiwKLSAgIlNwbGl0IEJsb2NrIjogIkJsb2tlYSB6YXRpdHUiLAotICAiVG9nZ2xlIEJvcmRlcnMiOiAiRXJ0emFrIHRydWthdHUiLAotICAiU2F2ZSBhcyI6ICJHb3JkZSBob25lbGE6IiwKLSAgIkluc2VydC9PdmVyd3JpdGUiOiAiVHhlcnRhdHUvR2FpbmlkYXR6aSIsCi0gICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsgRm9ybWF0dWEgJiM4MjEyOyIsCi0gICJIZWFkaW5nIDEiOiAiR29pYnVydWEgMSIsCi0gICJIZWFkaW5nIDIiOiAiR29pYnVydWEgMiIsCi0gICJIZWFkaW5nIDMiOiAiR29pYnVydWEgMyIsCi0gICJIZWFkaW5nIDQiOiAiR29pYnVydWEgNCIsCi0gICJIZWFkaW5nIDUiOiAiR29pYnVydWEgNSIsCi0gICJIZWFkaW5nIDYiOiAiR29pYnVydWEgNiIsCi0gICJOb3JtYWwiOiAiTm9ybWFsYSIsCi0gICJBZGRyZXNzIjogIkhlbGJpZGVhIiwKLSAgIkZvcm1hdHRlZCI6ICJGb3JtYXRlYXR1YSIsCi0KLSAgLy9kaWFsb2dzCi0gICJPSyI6ICJBZG9zIiwKLSAgIkNhbmNlbCI6ICJVdHppIiwKLSAgIlBhdGgiOiAiQmlkZWEiLAotICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIlRFU1RVIGVyYW4gYXJpIHphcmEuIEVyYWJpbCBlemF6dSBbPD5dIGJvdG9pYSBXWVNJV0lHIGVyYXJhIGl0enVsdHpla28uIiwKLSAgICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIkl0c2F0c2kgYm90b2lhIGV6IGRhYmlsIE1vemlsbGFuIG9pbmFycml0dXRha28gbmFiaWdhdHphaWxlZXRhbiAoYXJyYXpvaSB0ZWtuaWtvZW5nYXRpaykuIFNhY2F0dSBDVFJMLVYgenVyZSB0ZWtsYXR1YW4sIHp1emVuZWFuIGl0c2FzdGVrby4iLAotCi0gICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGUgYSBsaW5rIjogIlRlc3R1LWF0YWwgYmF0IGF1a2VyYXR1IGJlaGFyIGR1enUgbGVoZW5kYWJpemksIGxvdHVyYSBiYXQgc29ydHpla28iLAotICAiWW91ciBEb2N1bWVudCBpcyBub3Qgd2VsbCBmb3JtZWQuIENoZWNrIEphdmFTY3JpcHQgY29uc29sZSBmb3IgZGV0YWlscy4iOiAiWnVyZSBkb2t1bWVudHVhayBleiBkdSBmb3JtYXR1IHp1emVuYS4gQmVnaXJhIGV6YXp1IEphdmFTY3JpcHQga29udHNvbGEgeGVoZXRhc3VuZXRhcmFrby4iLAotCi0gICJBbGlnbm1lbnQ6IjogIkxlcnJva2F0emVhOiIsCi0gICJOb3Qgc2V0IjogIkV6IGdhaXR1YSIsCi0gICJMZWZ0IjogIkV6a2VycmV0YXJhIiwKLSAgIlJpZ2h0IjogIkVza3VpbmV0YXJhIiwKLSAgIlRleHR0b3AiOiAiSXJ1ZGlhcmVuIGdvaWFsZGVhbiIsCi0gICJBYnNtaWRkbGUiOiAiSXJ1ZGlhcmVuIGVyZGlhbiIsCi0gICJCYXNlbGluZSI6ICJJcnVkaWFyZW4gb2luZWFuIiwKLSAgIkFic2JvdHRvbSI6ICJJcnVkaWFyZW4gYmVoZWthbGRlYW4iLAotICAiQm90dG9tIjogIkJlaGVhbiIsCi0gICJNaWRkbGUiOiAiRXJkaWFuIiwKLSAgIlRvcCI6ICJHb2lhbiIsCi0KLSAgIkxheW91dCI6ICJEaXNlaW51YSIsCi0gICJTcGFjaW5nIjogIlRhcnRlYSIsCi0gICJIb3Jpem9udGFsOiI6ICJIb3Jpem9udGFsYToiLAotICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogIkJldGVnYXJyaSBob3Jpem9udGFsYSIsCi0gICJWZXJ0aWNhbDoiOiAiQmVydGlrYWxhOiIsCi0gICJWZXJ0aWNhbCBwYWRkaW5nIjogIkJldGVnYXJyaSBiZXJ0aWthbGEiLAotICAiQm9yZGVyIHRoaWNrbmVzczoiOiAiRXJ0emFyZW4gbG9kaWVyYToiLAotICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJVenRhenUgaHV0c2lrIGVydHppayBleiBzb3J0emVrbyIsCi0KLSAgLy9JbnNlcnQgTGluawotICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIkxvdHVyYSB0eGVydGF0dS9hbGRhdHUiLAotICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJCYXQgZXJlIGV6IChpbXBsaXppdHVraSBlcmFiaWxpKSIsCi0gICJOZXcgd2luZG93IChfYmxhbmspIjogIkxlaGlvIGJlcnJpYW4gKF9ibGFuaykiLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIkZyYW1lIGJlcmVhbiAoX3NlbGYpIiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiR29pa28gZnJhbWUtYW4gKF90b3ApIiwKLSAgIk90aGVyIjogIkJlc3RlIGJhdCIsCi0gICJUYXJnZXQ6IjogIkhlbGJ1cnVhOiIsCi0gICJUaXRsZSAodG9vbHRpcCk6IjogIkl6ZW5idXJ1YSAoYXJnaWJpZGVhKToiLAotICAiVVJMOiI6ICJVUkwtYToiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIkxvdHVyYXJlbiBoZWxidXJ1IGRlbiBVUkwtYSBpZGF0emkgYmVoYXIgZHV6dSIsCi0KLSAgLy8gSW5zZXJ0IFRhYmxlCi0gICJJbnNlcnQgVGFibGUiOiAiVGF1bGEgdHhlcnRhdHUiLAotICAiUm93czoiOiAiTGVycm9hazoiLAotICAiTnVtYmVyIG9mIHJvd3MiOiAiTGVycm8ta29wdXJ1YSIsCi0gICJDb2xzOiI6ICJadXRhYmVhazoiLAotICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiWnV0YWJlLWtvcHVydWEiLAotICAiV2lkdGg6IjogIlphYmFsZXJhOiIsCi0gICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiVGF1bGFyZW4gemFiYWxlcmEiLAotICAiUGVyY2VudCI6ICJQb3J0emVudGFpYSIsCi0gICJQaXhlbHMiOiAiUGl4ZWxhayIsCi0gICJFbSI6ICJFbSIsCi0gICJXaWR0aCB1bml0IjogIlphYmFsZXJhLXVuaXRhdGVhIiwKLSAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiWmFiYWxlcmEgZmlua29kdW4genV0YWJlYWsiLAotICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICJUYXVsYSBob25lbiBrb2thcGVuYSIsCi0gICJDZWxsIHNwYWNpbmc6IjogIkdlbGF4a2EtdGFydGVhOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkdlbGF4a2EgYXV6b2tpZGVlbiBhcnRla28gdGFydGVhIiwKLSAgIkNlbGwgcGFkZGluZzoiOiAiR2VsYXhrYXJlbiBiZXRlZ2FycmlhOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIkdlbGF4a2FyZW4gZWR1a2lhIGV0YSBlcnR6YXJlbiBhcnRla28gdGFydGVhIiwKLSAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAiTGVycm8ta29wdXJ1YSBpZGF0emkgYmVoYXIgZHV6dSIsCi0gICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zIjogIlp1dGFiZS1rb3B1cnVhIGlkYXR6aSBiZWhhciBkdXp1IiwKLQotICAvLyBJbnNlcnQgSW1hZ2UKLSAgIkluc2VydCBJbWFnZSI6ICJJcnVkaWEgdHhlcnRhdHUiLAotICAiSW1hZ2UgVVJMOiI6ICJJcnVkaWFyZW4gVVJMLWE6IiwKLSAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJJZGF0eiBlemF6dSBpcnVkaWFyZW4gVVJMLWEgaGVtZW4iLAotICAiUHJldmlldyI6ICJBdXJyZWJpc3RhIiwKLSAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJBdXJyZWlrdXNpIGlydWRpYSBiZXN0ZSBsZWhpbyBiYXRlYW4iLAotICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRlc3R1IGFsdGVybmF0aWJvYToiLAotICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiSXJ1ZGlyaWsgb25hcnR6ZW4gZXogZHV0ZW4gbmFiaWdhdHphaWxlZW50emF0IiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiSXJ1ZGlhcmVuIGtva2FwZW5hIiwKLSAgIkltYWdlIFByZXZpZXc6IjogIklydWRpYXJlbiBhdXJyZWJpc3RhOiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIlVSTC1hIGlkYXR6aSBiZWhhciBkdXp1IiwKLQotICAiYnV0dG9uX2JvbGQiOiAiZGUvYm9sZC5naWYiLAotICAiYnV0dG9uX2l0YWxpYyI6ICJkZS9pdGFsaWMuZ2lmIiwKLSAgImJ1dHRvbl91bmRlcmxpbmUiOiAiZGUvdW5kZXJsaW5lLmdpZiIsCi0KLSAgLy8gRWRpdG9yIEhlbHAKLSAgIktleWJvYXJkIHNob3J0Y3V0cyI6ICJMYXN0ZXItdGVrbGFrIiwKLSAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICJFZGl0b3JlYWsgb25kb3JlbmdvIHRla2xhLWtvbmJpbmF6aW9hayBlc2thaW50emVuIGRpdHU6IiwKLSAgIm5ldyBwYXJhZ3JhcGgiOiAiUGFyYWdyYWZvIGJlcnJpYSIsCi0gICJpbnNlcnQgbGluZWJyZWFrIjogIkxlcnJvLWphdXppYSB0eGVydGF0dSIsCi0gICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICJGb3JtYXR1YSBlemFycmkgcGFyYWdyYWZvYXJpIiwKLSAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJXb3JkLWV0aWsgaXRzYXRzaXRha28gZWR1a2lhIGV6YWJhdHUiLAotICAiSGVhZGluZ3MiOiAiR29pYnVydWFrIiwKLSAgIkNsb3NlIjogIkl0eGkiLAotCi0gIC8vIExvYWRpbmcgbWVzc2FnZXMKLSAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ISI6ICJLYXJnYXR6ZW4uIEl0eGFyb24gbWVzZWRleiIsCi0gICJMb2FkaW5nIHBsdWdpbiAkcGx1Z2luIiA6ICIkcGx1Z2luIHBsdWdpbmEga2FyZ2F0emVuIiwKLSAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIiA6ICIkcGx1Z2luIHBsdWdpbmEgZXJyZWdpc3RyYXR1IiwgCi0gICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIk9iamVrdHVhIGVyYWlraXR6ZW4iLAotICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIlhpbmhhIEZyYW1ld29yayBzb3J0emVuIiwKLSAgIkluaXQgZWRpdG9yIHNpemUiOiJFZGl0b3JlYXJlbiBoYXNpZXJha28gbmV1cnJpYSIsIAotICAiQ3JlYXRlIFRvb2xiYXIiOiAiVHJlc25hLWJhcnJhIHNvcnR1IiwKLSAgIkNyZWF0ZSBTdGF0dXNiYXIiIDogIkVnb2VyYS1iYXJyYSBzb3J0dSIsCi0gICJSZWdpc3RlciByaWdodCBwYW5lbCIgOiAiRXNrdWluLXBhbmVsYSBlcnJlZ2lzdHJhdHUiLCAKLSAgIlJlZ2lzdGVyIGxlZnQgcGFuZWwiIDogIkV6a2VyLXBhbmVsYSBlcnJlZ2lzdHJhdHUiLCAKLSAgIlJlZ2lzdGVyIGJvdHRvbSBwYW5lbCIgOiAiQmVoZWtvIHBhbmVsYSBlcnJlZ2lzdHJhdHUiLCAKLSAgIlJlZ2lzdGVyIHRvcCBwYW5lbCIgOiAiR29pa28gcGFuZWxhIGVycmVnaXN0cmF0dSIsIAotICAiRmluaXNoaW5nIiA6ICJCdWthdHplbiIsIAotICAKLSAgLy8gQ29sb3JQaWNrZXIKLSAgIkNsaWNrIGEgY29sb3IuLi4iIDogIktvbG9yZSBiYXQgYXVrZXJhdHUuLi4iLAotICAiU2FtcGxlIiA6ICJMYWdpbmEiLAotICAiV2ViIFNhZmU6ICIgOiAiV2ViIFNhZmU6ICIsCi0gICJDb2xvcjogIiA6ICJLb2xvcmVhOiAiCi19OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2ZhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZmEuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZDBmY2EuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZmEuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjkgKzAsMCBAQAot77u/Ly8gSTE4TiBjb25zdGFudHMNCi0vLyBMQU5HOiAiZmEiLCBFTkNPRElORzogVVRGLTgNCi17DQotICAiQm9sZCI6ICLYttiu24zZhSIsDQotICAiSXRhbGljIjogItmF2YjYsdioIiwNCi0gICJVbmRlcmxpbmUiOiAi2LLbjNixINiu2LciLA0KLSAgIlN0cmlrZXRocm91Z2giOiAi2LHZiCDYrti3IiwNCi0gICJTdWJzY3JpcHQiOiAi2LLbjNix2YjZhtivIiwNCi0gICJTdXBlcnNjcmlwdCI6ICLYqNin2YTYp9mI2YbYryIsDQotICAiSnVzdGlmeSBMZWZ0IjogItiq2LHYp9iyINin2LIg2obZviIsDQotICAiSnVzdGlmeSBDZW50ZXIiOiAi2KrYsdin2LIg2K/YsSDZiNiz2LciLA0KLSAgIkp1c3RpZnkgUmlnaHQiOiAi2KrYsdin2LIg2K/YsSDYsdin2LPYqiIsDQotICAiSnVzdGlmeSBGdWxsIjogItiq2LHYp9iyINin2LIg2obZviDZiCDYsdin2LPYqiIsDQotICAiT3JkZXJlZCBMaXN0IjogItmB2YfYsdiz2Kog2YXYsdiq2KgiLA0KLSAgIkJ1bGxldGVkIExpc3QiOiAi2YHZh9ix2LPYqiDar9mE2YjZhNmHINin24wiLA0KLSAgIkRlY3JlYXNlIEluZGVudCI6ICLaqdin2YfYtCDYs9ixINiu2LciLA0KLSAgIkluY3JlYXNlIEluZGVudCI6ICLYp9mB2LLYp9uM2LQg2LPYsSDYrti3IiwNCi0gICJGb250IENvbG9yIjogItix2YbaryDZgdmE2YUiLA0KLSAgIkJhY2tncm91bmQgQ29sb3IiOiAi2LHZhtqvINm+2LMg2LLZhduM2YbZhyIsDQotICAiSG9yaXpvbnRhbCBSdWxlIjogItiu2Lcg2KfZgdmC24wiLA0KLSAgIkluc2VydCBXZWIgTGluayI6ICLYp9mB2LLZiNiv2YYg2YTbjNmG2qkg2YjYqCIsDQotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLYp9mB2LLZiNiv2YYg24zYpyDZiNuM2LHYp9uM2LQg2KrYtdmI24zYsSIsDQotICAiSW5zZXJ0IFRhYmxlIjogItin2YHYstmI2K/ZhiDYrNiv2YjZhCIsDQotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogItmF2LTYp9mH2K/ZhyDbjNinINi52K/ZhSDZhdi02KfZh9iv2Ycg2YXYqtmGINiv2LEg2YLYp9mE2KggSFRNTCIsDQotICAiRW5sYXJnZSBFZGl0b3IiOiAi2KjYstix2q8g2qnYsdiv2YYg2YjbjNix2KfbjNi0INqv2LEiLA0KLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogItiv2LHYqNin2LHZhyDYp9uM2YYg2YjbjNix2KfbjNi0INqv2LEiLA0KLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogItix2KfZh9mG2YXYp9uMINin2LPYqtmB2KfYr9mHINmI24zYsdin24zYtCDar9ixIiwNCi0gICJDdXJyZW50IHN0eWxlIjogIti024zZiNmHINqp2YbZiNmG24wiLA0KLSAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogItio2LHar9ix2K/Yp9mG2K/ZhiDYotiu2LHbjNmGINi52YXZhCIsDQotICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi2KfZhtis2KfZhSDZhdis2K/YryDYotiu2LHbjNmGINi52YXZhCIsDQotICAiQ3V0IHNlbGVjdGlvbiI6ICLYqNix24zYr9mGINin2YbYqtiu2KfYqCDYtNiv2YciLA0KLSAgIkNvcHkgc2VsZWN0aW9uIjogItqp2b7bjCDYp9mG2KrYrtin2Kgg2LTYr9mHIiwNCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICLahtiz2KjYp9mG2K/ZhiDYp9iyINiq2K7YqtmHINqp2KfYsSIsDQotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAi2KzZh9iqINin2LIg2obZviDYqNmHINix2KfYs9iqIiwNCi0gICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLYrNmH2Kog2KfYsiDYsdin2LPYqiDYqNmHINqG2b4iLA0KLSAgIlJlbW92ZSBmb3JtYXR0aW5nIjogItit2LDZgSDZgdix2YXYqiDYqNmG2K/bjCIsDQotICAiU2VsZWN0IGFsbCI6ICLYp9mG2KrYrtin2Kgg2YfZhdmHIiwNCi0gICJQcmludCBkb2N1bWVudCI6ICLahtin2b4g2LPZhtivIiwNCi0gICJDbGVhciBNU09mZmljZSB0YWdzIjogItm+2KfaqSDaqdix2K/ZhiDZhdiq2YYg2KfYsiDYqNix2obYs9ioINmH2KfbjCBNU09mZmljZSIsDQotICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAi2b7Yp9qpINqp2LHYr9mGINmF2KrZhiDYp9iyINmF2LTYrti12KfYqiDZgdmI2YbYqiIsDQotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogItii24zYpyDYqtmF2KfbjNmEINiv2KfYsduM2K8g2LjYp9mH2LEg2YHZhNmFINix2Kcg2b7Yp9qpINqp2YbbjNiv2J8iLA0KLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogItii24zYpyDYqtmF2KfbjNmEINiv2KfYsduM2K8g2KfZhtiv2KfYstmHINmC2YTZhSDYsdinINm+2KfaqSDaqdmG24zYryIsDQotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICLYotuM2Kcg2KrZhdin24zZhCDYr9in2LHbjNivINix2YbaryDZgtmE2YUg2LHYpyDZvtin2qkg2qnZhtuM2K/YnyIsDQotICAiU3BsaXQgQmxvY2siOiAi2KjZhNin2qkg2KzYr9in2LPYp9iy24wiLA0KLSAgIlRvZ2dsZSBCb3JkZXJzIjogItmB2LnYp9mEL9i624zYsSDZgdi52KfZhCDaqdix2K/ZhiDZhNio2Ycg2YfYpyIsDQotICAiU2F2ZSBhcyI6ICLYsNiu24zYsdmHINmF2KfZhtmG2K8uLi4iLA0KLSAgIkluc2VydC9PdmVyd3JpdGUiOiAi2KfZgdiy2YjYr9mGL9is2KfZhtmI24zYs9uMIiwNCi0gICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsg2YLYp9mE2KggJiM4MjEyOyIsDQotICAiSGVhZGluZyAxIjogItiq24zYqtixIDEiLA0KLSAgIkhlYWRpbmcgMiI6ICLYqtuM2KrYsSAyIiwNCi0gICJIZWFkaW5nIDMiOiAi2KrbjNiq2LEgMyIsDQotICAiSGVhZGluZyA0IjogItiq24zYqtixIDQiLA0KLSAgIkhlYWRpbmcgNSI6ICLYqtuM2KrYsSA1IiwNCi0gICJIZWFkaW5nIDYiOiAi2KrbjNiq2LEgNiIsDQotICAiTm9ybWFsIjogItmF2LnZhdmI2YTbjCIsDQotICAiQWRkcmVzcyI6ICLYotiv2LHYsyIsDQotICAiRm9ybWF0dGVkIjogItmC2KfZhNioINio2YbYr9uMINi02K/ZhyIsDQotDQotICAvL2RpYWxvZ3MNCi0gICJPSyI6ICLYqNmE2YciLA0KLSAgIkNhbmNlbCI6ICLYp9mG2LXYsdin2YEiLA0KLSAgIlBhdGgiOiAi2YXYs9uM2LEiLA0KLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICLYr9ixINmF2K8g2YXYqtmG24wg2YfYs9iq24zYry4gINin2LIg2K/aqdmF2YcgWzw+XSDYp9iz2KrZgdin2K/ZhyDZhtmF2KfbjNuM2K8g2KrYpyDYqNmHINmF2K8gV1lTSVdZRyDYqNix2q/Ysdiv24zYry4iLA0KLSAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAi2K/aqdmF2Ycg2obYs9io2KfZhtiv2YYg2K/YsSDZhdix2YjYsdqv2LHZh9in24wg2LPYsduMIE1vemlsbGEg2qnYp9ixINmG2YXbjCDaqdmG2K8gKNio2Ycg2K/ZhNin24zZhCDZgdmG24wg2KfZhdmG24zYqtuMKS7YqNix2KfbjCDahtiz2KjYp9mG2K/ZhiDZhdiz2KrZgtuM2YUg2Iwg2K/aqdmF2YcgQ1RSTC1WINix2Kcg2K/YsSDYtdmB2K3ZhyDaqdmE24zYryDYqNiy2YbbjNivLiIsDQotICAiWW91ciBEb2N1bWVudCBpcyBub3Qgd2VsbCBmb3JtZWQuIENoZWNrIEphdmFTY3JpcHQgY29uc29sZSBmb3IgZGV0YWlscy4iOiAi2LPZhtivINi02YXYpyDYqNiv2LHYs9iq24wg2YLYp9mE2Kgg2KjZhtiv24wg2YbYtNiv2Ycg2KfYs9iqLiDYqNix2KfbjCDYp9i32YTYp9i52KfYqiDYqNuM2LTYqtixINm+2KfbjNin2YbZhyDZhtmF2KfbjNi0INis2KfZiNin2KfYs9qp2LHbjNm+2Kog2LHYpyDYqNix2LHYs9uMINqp2YbbjNivLiIsDQotDQotICAiQWxpZ25tZW50OiI6ICLYqtix2KfYsiDYqNmG2K/bjCIsDQotICAiTm90IHNldCI6ICLYqtmG2LjbjNmFINmG2LTYr9mHIiwNCi0gICJMZWZ0IjogItqG2b4iLA0KLSAgIlJpZ2h0IjogItix2KfYs9iqIiwNCi0gICJUZXh0dG9wIjogItio2KfZhNin24wg2YXYqtmGIiwNCi0gICJBYnNtaWRkbGUiOiAi2K/ZgtuM2YLYpyDZiNiz2LciLA0KLSAgIkJhc2VsaW5lIjogItin2KjYqtiv2KfbjCDYrti3IiwNCi0gICJBYnNib3R0b20iOiAi2K/ZgtuM2YLYpyDZvtin24zbjNmGIiwNCi0gICJCb3R0b20iOiAi2b7Yp9uM24zZhiIsDQotICAiTWlkZGxlIjogItmI2LPYtyIsDQotICAiVG9wIjogItio2KfZhNinIiwNCi0NCi0gICJMYXlvdXQiOiAi2YTYp9uM2YciLA0KLSAgIlNwYWNpbmciOiAi2YHYp9i12YTZhyDar9iw2KfYsduMIiwNCi0gICJIb3Jpem9udGFsOiI6ICLYp9mB2YLbjCIsDQotICAiSG9yaXpvbnRhbCBwYWRkaW5nIjogItm+2LHaqdmG2YbYr9mHINin2YHZgtuMIiwNCi0gICJWZXJ0aWNhbDoiOiAi2LnZhdmI2K/bjCIsDQotICAiVmVydGljYWwgcGFkZGluZyI6ICLZvtix2qnZhtmG2K/ZhyDYudmF2YjYr9uMIiwNCi0gICJCb3JkZXIgdGhpY2tuZXNzOiI6ICLYttiu2KfZhdiqINmE2KjZhyIsDQotICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICLYqNix2KfbjCDYqNiv2YjZhiDZhNio2Ycg2K7Yp9mE24wg2LHZh9inINqp2YYiLA0KLQ0KLSAgLy9JbnNlcnQgTGluaw0KLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICLYp9mB2LLZiNiv2YYgLyDZiNuM2LHYp9uM2LQg2YTbjNmG2qkiLA0KLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi2YfbjNqG2qnYr9in2YUgKNin2LPYqtmB2KfYr9mHINin2LIg2KjYr9mI2YYg2LTYsdi3KSIsDQotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLZvtmG2KzYsdmHINis2K/bjNivIChfYmxhbmspIiwNCi0gICJTYW1lIGZyYW1lIChfc2VsZikiOiAi2YHYsduM2YUg24zaqdiz2KfZhiAoX3NlbGYpIiwNCi0gICJUb3AgZnJhbWUgKF90b3ApIjogItmB2LHbjNmFINio2KfZhNin24zbjCAoX3RvcCkiLA0KLSAgIk90aGVyIjogItiz2KfbjNixIiwNCi0gICJUYXJnZXQ6IjogItmH2K/ZgSIsDQotICAiVGl0bGUgKHRvb2x0aXApOiI6ICLYudmG2YjYp9mGICjYsdin2YfZhtmF2KfbjCDbjNqpINiu2LfbjCkiLA0KLSAgIlVSTDoiOiAiVVJMOiIsDQotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogItio2KfbjNivIFVSTNuMINqp2Ycg2KfbjNmGINmE24zZhtqpINio2Ycg2KLZhiDYp9i02KfYsdmHINiv2KfYsdivINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iLA0KLSAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICLYqNin24zYryDZgtio2YQg2KfYsiDYs9in2K7YqiDZhNuM2YbaqSDYjCDZhdiq2YbbjCDYsdinINin2YbYqtiu2KfYqCDZhtmF2KfbjNuM2K8iLA0KLQ0KLSAgLy8gSW5zZXJ0IFRhYmxlDQotICAiSW5zZXJ0IFRhYmxlIjogItin2YHYstmI2K/ZhiDYrNiv2YjZhCIsDQotICAiUm93czoiOiAi2LHYr9uM2YEg2YfYpyIsDQotICAiTnVtYmVyIG9mIHJvd3MiOiAi2KrYudiv2KfYryDYsdiv24zZgSDZh9inIiwNCi0gICJDb2xzOiI6ICLYs9iq2YjZhiDZh9inIiwNCi0gICJOdW1iZXIgb2YgY29sdW1ucyI6ICLYqti52K/Yp9ivINiz2KrZiNmGINmH2KciLA0KLSAgIldpZHRoOiI6ICLYt9mI2YQiLA0KLSAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICLYt9mI2YQg2KzYr9mI2YQiLA0KLSAgIlBlcmNlbnQiOiAi2K/Ysdi12K8iLA0KLSAgIlBpeGVscyI6ICLZvtuM2qnYs9mEINmH2KciLA0KLSAgIkVtIjogIkVtIiwNCi0gICJXaWR0aCB1bml0IjogItmI2KfYrdivINi32YjZhCIsDQotICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICLYs9iq2YjZhiDZh9in24wg2LfZiNmEINir2KfYqNiqIiwNCi0gICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogItmF2YjZgti524zYqiDbjNin2KjbjCDYp9uM2YYg2KzYr9mI2YQiLA0KLSAgIkNlbGwgc3BhY2luZzoiOiAi2YHYp9i12YTZhyDYs9mE2YjZhCDZh9inIiwNCi0gICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogItmB2KfYtdmE2Ycg2KjbjNmGINiz2YTZiNmEINmH2KfbjCDZh9mF2KzZiNin2LEiLA0KLSAgIkNlbGwgcGFkZGluZzoiOiAi2b7YsSDaqdmG2YbYr9mHINiz2YTZiNmEIiwNCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogItmB2KfYtdmE2Ycg2KjbjNmGINmF2K3YqtmI2Kcg2Ygg2YTYqNmHINiv2LEg2LPZhNmI2YQiLA0KLSAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAi2KjYp9uM2K8g2KrYudiv2KfYryDYsdiv24zZgSDZh9inINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iLA0KLSAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAi2KjYp9uM2K8g2KrYudiv2KfYryDYs9iq2YjZhiDZh9inINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iLA0KLQ0KLSAgLy8gSW5zZXJ0IEltYWdlDQotICAiSW5zZXJ0IEltYWdlIjogItin2YHYstmI2K/ZhiDYqti12YjbjNixIiwNCi0gICJJbWFnZSBVUkw6IjogIlVSTCDYqti12YjbjNixIiwNCi0gICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiVVJMINiq2LXZiNuM2LEg2LHYpyDYp9uM2YbYrNinINmI2KfYsdivINqp2YbbjNivIiwNCi0gICJQcmV2aWV3IjogItm+24zYtCDZhtmF2KfbjNi0IiwNCi0gICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAi2b7bjNi0INmG2YXYp9uM2LQg2KrYtdmI24zYsSDYr9ixINm+2YbYrNix2Ycg2KfbjCDYrNiv24zYryIsDQotICAiQWx0ZXJuYXRlIHRleHQ6IjogItmF2KrZhiDYrNin24zar9iy24zZhiIsDQotICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAi2KjYsdin24wg2YXYsdmI2LHar9ix2YfYp9uM24wg2qnZhyDYp9iyINiq2LXYp9mI24zYsSDZvti02KrbjNio2KfZhtuMINmG2YXbjCDaqdmG2YbYryIsDQotICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICLZhdmI2YLYuduM2Kog24zYp9io24wg2KrYtdmI24zYsSIsDQotICAiSW1hZ2UgUHJldmlldzoiOiAi2b7bjNi0INmG2YXYp9uM2LQg2KrYtdmI24zYsSIsDQotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCI6ICLYtNmF2Kcg2KjYp9uM2K8gVVJMINix2Kcg2YjYp9ix2K8g2qnZhtuM2K8iLA0KLQ0KLSAgLy8gdG9vbGJhcg0KLSAgLyoNCi0gICJidXR0b25fYm9sZCI6ICJmci9ib2xkLmdpZiIsDQotICAiYnV0dG9uX3VuZGVybGluZSI6ICJmci91bmRlcmxpbmUuZ2lmIiwNCi0gICJidXR0b25fc3RyaWtldGhyb3VnaCI6ICJmci9zdHJpa2V0aHJvdWdoLmdpZiIsDQotICAqLw0KLQ0KLSAgLy8gRWRpdG9yIEhlbHANCi0gICJYaW5oYSBIZWxwIjogItix2KfZh9mG2YXYp9uMIFhpbmhhIiwNCi0gICJFZGl0b3IgSGVscCI6ICLYsdin2YfZhtmF2KfbjCDZiNuM2LHYp9uM2LTar9ixIiwNCi0gICJLZXlib2FyZCBzaG9ydGN1dHMiOiAi2YXbjNin2YbYqNix2YfYp9uMINi12YHYrdmHINqp2YTbjNivIiwNCi0gICJUaGUgZWRpdG9yIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcga2V5IGNvbWJpbmF0aW9uczoiOiAi2YjbjNix2KfbjNi02q/YsSDYp9iz2KrZgdin2K/ZhyDYp9iyINqp2YTbjNivINmH2KfbjCDar9ix2YjZh9uMINiy24zYsSDYsdinINmF2LPbjNixINmF24wg2LPYp9iy2K8gOiIsDQotICAiRU5URVIiOiAiRU5UUkVFIiwNCi0gICJuZXcgcGFyYWdyYXBoIjogItm+2KfYsdin2q/Ysdin2YEg2KzYr9uM2K8iLA0KLSAgIlNISUZULUVOVEVSIjogIlNISUZUK0VOVFJFRSIsDQotICAiaW5zZXJ0IGxpbmVicmVhayI6ICLYp9mB2LLZiNiv2YYg2KzYr9inINqp2YbZhtiv2Ycg2K7YtyIsDQotICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAi2KrYutuM24zYsSDZgtin2YTYqCDYqNmHINm+2KfYsdin2q/Ysdin2YEiLA0KLSAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICLYqtmF24zYsiDaqdix2K/ZhiDZhdit2KrZiNin24wg2obYs9io2KfZhtiv2Ycg2LTYr9mHINin2LIgV29yZCIsDQotICAiSGVhZGluZ3MiOiAi2LnZhtmI2KfZhiDar9iw2KfYsduMIiwNCi0gICJDbG9zZSI6ICLYqNiz2KrZhiIsDQotDQotICAvLyBMb2FkaW5nIG1lc3NhZ2VzDQotICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQgISI6ICLYqNin2LHar9iw2KfYsduMINiv2LEg2K3Yp9mEINin2YbYrNin2YUg2KfYs9iqLiDZhNi32YHYpyDYtdio2LEg2qnZhtuM2K8gISIsDQotICAiQ29uc3RydWN0aW5nIG1haW4gb2JqZWN0IjogItiz2KfYrtiq2YYg2LTbjNihINin2LXZhNuMIiwNCi0gICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogItiz2KfYrtiq2YYg2LTbjNihIiwNCi0gICJSZWdpc3RlciBwYW5lbCByaWdodCI6ICLYq9io2Kog2YLYp9ioINix2KfYs9iqIiwNCi0gICJSZWdpc3RlciBwYW5lbCBsZWZ0IjogItir2KjYqiDZgtin2Kgg2obZviIsDQotICAiUmVnaXN0ZXIgcGFuZWwgdG9wIjogItir2KjYqiDZgtin2Kgg2KjYp9mE2KciLA0KLSAgIlJlZ2lzdGVyIHBhbmVsIGJvdHRvbSI6ICLYq9io2Kog2YLYp9ioINm+2KfbjNuM2YYiLA0KLSAgIkNyZWF0ZSBUb29sYmFyIjogItiz2KfYrtiqINmG2YjYp9ixINin2KjYstin2LEiLA0KLSAgIkNyZWF0ZSBTdGF0dXNCYXIiOiAi2LPYp9iu2Kog2YbZiNin2LEg2YjYtti524zYqiIsDQotICAiR2VuZXJhdGUgWGluaGEgb2JqZWN0IjogItiq2YjZhNuM2K8g2LTbjNihIFhpbmhhIiwNCi0gICJJbml0IGVkaXRvciBzaXplIjogItmF2YLYr9in2LEg2K/Zh9uMINin2YbYr9in2LLZhyDZiNuM2LHYp9uM2LTar9ixIiwNCi0gICJJbml0IElGcmFtZSI6ICLZhdmC2K/Yp9ixINiv2YfbjCBJRnJhbWUiLA0KLSAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogItir2KjYqiDZvtmE2Kfar9uM2YYgJHBsdWdpbiINCi19OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2ZpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZmkuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNTdiOWEuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZmkuanMKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotCi0vLyBMQU5HOiAiZW4iLCBFTkNPRElORzogVVRGLTgKLQotewotICAiQm9sZCI6ICJMaWhhdm9pdHUiLAotICAiSXRhbGljIjogIkt1cnNpdm9pdHUiLAotICAiVW5kZXJsaW5lIjogIkFsbGV2aWl2YXR0dSIsCi0gICJTdHJpa2V0aHJvdWdoIjogIllsaXZpaXZhdHR1IiwKLSAgIlN1YnNjcmlwdCI6ICJBbGFpbmRla3NpIiwKLSAgIlN1cGVyc2NyaXB0IjogIllsw6RpbmRla3NpIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJUYXNhYSB2YXNlbW1hdCByZXVuYXQiLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiS2Vza2l0w6QiLAotICAiSnVzdGlmeSBSaWdodCI6ICJUYXNhYSBvaWtlYXQgcmV1bmF0IiwKLSAgIkp1c3RpZnkgRnVsbCI6ICJUYXNhYSBtb2xlbW1hdCByZXVuYXQiLAotICAiT3JkZXJlZCBMaXN0IjogIk51bWVyb2ludGkiLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJMdWV0dGVsb21lcmtpdCIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiUGllbmVubsOkIHNpc2VubnlzdMOkIiwKLSAgIkluY3JlYXNlIEluZGVudCI6ICJMaXPDpMOkIHNpc2VubnlzdMOkIiwKLSAgIkZvbnQgQ29sb3IiOiAiRm9udGluIHbDpHJpIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiVGF1c3RhdsOkcmkiLAotICAiSG9yaXpvbnRhbCBSdWxlIjogIlZhYWthdmlpdmEiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIkxpc8Okw6QgbGlua2tpIiwKLSAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiTGlzw6TDpCBrdXZhIiwKLSAgIkluc2VydCBUYWJsZSI6ICJMaXPDpMOkIHRhdWx1a2tvIiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJIVE1MLWzDpGhkZWtvb2RpIHZzIFdZU0lXWUciLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiU3V1cmVubmEgZWRpdG9yaSIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICJUaWV0b2phIGVkaXRvcmlzdGEiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiTsOkeXTDpCBvaGplIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiTnlreWluZW4gdHl5bGkiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiUGVydXV0YSB2aWltZWluZW4gdG9pbWludG8iLAotICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiUGFsYXV0YSB2aWltZWluZW4gdG9pbWludG8iLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJMZWlra2FhIG1hYWxhdHR1IiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGlvaSBtYWFsYXR0dSIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJMaWl0w6QgbGVpa2VwecO2ZMOkbHTDpCIsCi0gICJPSyI6ICJIeXbDpGtzeSIsCi0gICJDYW5jZWwiOiAiUGVydXV0YSIKLX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2ZyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZnIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MWQ4ZGUuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZnIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLS8vIExBTkc6ICJmciIsIEVOQ09ESU5HOiBVVEYtOAotewotICAiQm9sZCI6ICJHcmFzIiwKLSAgIkl0YWxpYyI6ICJJdGFsaXF1ZSIsCi0gICJVbmRlcmxpbmUiOiAiU291bGlnbsOpIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiQmFycsOpIiwKLSAgIlN1YnNjcmlwdCI6ICJJbmRpY2UiLAotICAiU3VwZXJzY3JpcHQiOiAiRXhwb3NhbnQiLAotICAiSnVzdGlmeSBMZWZ0IjogIkFsaWduZXIgw6AgZ2F1Y2hlIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIkNlbnRyZXIiLAotICAiSnVzdGlmeSBSaWdodCI6ICJBbGlnbmVyIMOgIGRyb2l0ZSIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAiSnVzdGlmaWVyIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJMaXN0ZSBudW3DqXJvdMOpZSIsCi0gICJCdWxsZXRlZCBMaXN0IjogIkxpc3RlIMOgIHB1Y2VzIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICJEaW1pbnVlciBsZSByZXRyYWl0IiwKLSAgIkluY3JlYXNlIEluZGVudCI6ICJBdWdtZW50ZXIgbGUgcmV0cmFpdCIsCi0gICJGb250IENvbG9yIjogIkNvdWxldXIgZGUgcG9saWNlIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiU3VybGlnbmFnZSIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiTGlnbmUgaG9yaXpvbnRhbGUiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIkluc8OpcmVyIHVuIGxpZW4iLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJbnPDqXJlciAvIE1vZGlmaWVyIHVuZSBpbWFnZSIsCi0gICJJbnNlcnQgVGFibGUiOiAiSW5zw6lyZXIgdW4gdGFibGVhdSIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiQWZmaWNoZXIgLyBNYXNxdWVyIGNvZGUgc291cmNlIiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIkFncmFuZGlyIGwnw6lkaXRldXIiLAotICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiQSBwcm9wb3MiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiQWlkZSIsCi0gICJDdXJyZW50IHN0eWxlIjogIlN0eWxlIGNvdXJhbnQiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQW5udWxlciBsYSBkZXJuacOocmUgYWN0aW9uIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlLDqXDDqXRlciBsYSBkZXJuacOocmUgYWN0aW9uIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiQ291cGVyIGxhIHPDqWxlY3Rpb24iLAotICAiQ29weSBzZWxlY3Rpb24iOiAiQ29waWVyIGxhIHPDqWxlY3Rpb24iLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiQ29sbGVyIGRlcHVpcyBsZSBwcmVzc2UtcGFwaWVyIiwKLSAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkRpcmVjdGlvbiBkZSBnYXVjaGUgw6AgZHJvaXRlIiwKLSAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIkRpcmVjdGlvbiBkZSBkcm9pdGUgw6AgZ2F1Y2hlIiwKLSAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIlN1cHByaW1lciBtaXNlIGVuIGZvcm1lIiwKLSAgIlNlbGVjdCBhbGwiOiAiVG91dCBzw6lsZWN0aW9ubmVyIiwKLSAgIlByaW50IGRvY3VtZW50IjogIkltcHJpbWVyIGRvY3VtZW50IiwKLSAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiU3VwcHJpbWVyIHRhZ3MgTVNPZmZpY2UiLAotICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiU3VwcHJpbWVyIHBhcmFtw6h0cmVzIGlubGluZSBkZSBsYSBwb2xpY2UiLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCB0eXBlZmFjZXM/IjogIlZvdWxlei12b3VzIHN1cHByaW1lciBsZXMgdHlwZXMgPyIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICJWb3VsZXotdm91cyBzdXBwcmltZXIgbGVzIHRhaWxsZXMgPyIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIlZvdWxlei12b3VzIHN1cHByaW1lciBsZXMgY291bGV1cnMgPyIsCi0gICJTcGxpdCBCbG9jayI6ICJTw6lwYXJlciBsZXMgYmxvY3MiLAotICAiVG9nZ2xlIEJvcmRlcnMiOiAiQWZmaWNoZXIgLyBNYXNxdWVyIGxlcyBib3JkdXJlcyIsCi0gICJTYXZlIGFzIjogIkVucmVnaXN0cmVyIHNvdXMiLAotICAiSW5zZXJ0L092ZXJ3cml0ZSI6ICJJbnNlcnRpb24gLyBSZW1wbGFjZW1lbnQiLAotICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IEZvcm1hdCAmIzgyMTI7IiwKLSAgIkhlYWRpbmcgMSI6ICJUaXRyZSAxIiwKLSAgIkhlYWRpbmcgMiI6ICJUaXRyZSAyIiwKLSAgIkhlYWRpbmcgMyI6ICJUaXRyZSAzIiwKLSAgIkhlYWRpbmcgNCI6ICJUaXRyZSA0IiwKLSAgIkhlYWRpbmcgNSI6ICJUaXRyZSA1IiwKLSAgIkhlYWRpbmcgNiI6ICJUaXRyZSA2IiwKLSAgIk5vcm1hbCI6ICJOb3JtYWwiLAotICAiQWRkcmVzcyI6ICJBZHJlc3NlIiwKLSAgIkZvcm1hdHRlZCI6ICJGb3JtYXTDqSIsCi0KLSAgLy9kaWFsb2dzCi0gICJPSyI6ICJPSyIsCi0gICJDYW5jZWwiOiAiQW5udWxlciIsCi0gICJQYXRoIjogIkNoZW1pbiIsCi0gICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiVm91cyDDqnRlcyBlbiBNT0RFIFRFWFRFLiAgQXBwdXlleiBzdXIgbGUgYm91dG9uIFs8Pl0gcG91ciByZXRvdXJuZXIgYXUgbW9kZSBXWVNJV1lHLiIsCi0gICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIkxlIGJvdXRvbiBDb2xsZXIgbmUgZm9uY3Rpb25uZSBwYXMgc3VyIGxlcyBuYXZpZ2F0ZXVycyBiYXPDqXMgc3VyIE1vemlsbGEgKHBvdXIgZGVzIHJhaXNvbnMgZGUgc8OpY3VyaXTDqSkuIFByZXNzZXogQ1RSTC1WIGF1IGNsYXZpZXIgcG91ciBjb2xsZXIgZGlyZWN0ZW1lbnQuIiwKLSAgIllvdXIgRG9jdW1lbnQgaXMgbm90IHdlbGwgZm9ybWVkLiBDaGVjayBKYXZhU2NyaXB0IGNvbnNvbGUgZm9yIGRldGFpbHMuIjogIkxlIGRvY3VtZW50IGVzdCBtYWwgZm9ybcOpLiBWw6lyaWZpZXogbGEgY29uc29sZSBKYXZhU2NyaXB0IHBvdXIgcGx1cyBkZSBkw6l0YWlscy4iLAotCi0gICJBbGlnbm1lbnQ6IjogIkFsaWduZW1lbnQiLAotICAiTm90IHNldCI6ICJJbmTDqWZpbmkiLAotICAiTGVmdCI6ICJHYXVjaGUiLAotICAiUmlnaHQiOiAiRHJvaXRlIiwKLSAgIlRleHR0b3AiOiAiVGV4dHRvcCIsCi0gICJBYnNtaWRkbGUiOiAiQWJzbWlkZGxlIiwKLSAgIkJhc2VsaW5lIjogIkJhc2VsaW5lIiwKLSAgIkFic2JvdHRvbSI6ICJBYnNib3R0b20iLAotICAiQm90dG9tIjogIkJhcyIsCi0gICJNaWRkbGUiOiAiTWlsaWV1IiwKLSAgIlRvcCI6ICJIYXV0IiwKLQotICAiTGF5b3V0IjogIk1pc2UgZW4gcGFnZSIsCi0gICJTcGFjaW5nIjogIkVzcGFjZW1lbnQiLAotICAiSG9yaXpvbnRhbDoiOiAiSG9yaXpvbnRhbCIsCi0gICJIb3Jpem9udGFsIHBhZGRpbmciOiAiTWFyZ2UgaG9yaXpvbnRhbGUgaW50ZXJuZSIsCi0gICJWZXJ0aWNhbDoiOiAiVmVydGljYWwiLAotICAiVmVydGljYWwgcGFkZGluZyI6ICJNYXJnZSB2ZXJ0aWNhbGUgaW50ZXJuZSIsCi0gICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJFcGFpc3NldXIgZGUgYm9yZHVyZSIsCi0gICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIkxhaXNzZXIgdmlkZSBwb3VyIHBhcyBkZSBib3JkdXJlIiwKLQotICAvL0luc2VydCBMaW5rCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5zw6lyZXIgLyBNb2RpZmllciB1biBsaWVuIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiQXVjdW5lIChpbXBsaWNpdGUpIiwKLSAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTm91dmVsbGUgZmVuw6p0cmUgKF9ibGFuaykiLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIk3Dqm1lIGZyYW1lIChfc2VsZikiLAotICAiVG9wIGZyYW1lIChfdG9wKSI6ICJGcmFtZSBwcmluY2lwYWxlIChfdG9wKSIsCi0gICJPdGhlciI6ICJBdXRyZSIsCi0gICJUYXJnZXQ6IjogIkNpYmxlIiwKLSAgIlRpdGxlICh0b29sdGlwKToiOiAiVGV4dGUgYWx0ZXJuYXRpZiIsCi0gICJVUkw6IjogIlVSTDoiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIlZvdXMgZGV2ZXogZW50cmVyIGwnVVJMIGRlIGNlIGxpZW4iLAotICAiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIjogIlZvdXMgZGV2ZXogc8OpbGVjdGlvbm5lciBkdSB0ZXh0ZSBhdmFudCBkZSBjcsOpZXIgdW4gbGllbiIsCi0KLSAgLy8gSW5zZXJ0IFRhYmxlCi0gICJJbnNlcnQgVGFibGUiOiAiSW5zw6lyZXIgdW4gdGFibGVhdSIsCi0gICJSb3dzOiI6ICJMaWduZXMiLAotICAiTnVtYmVyIG9mIHJvd3MiOiAiTm9tYnJlIGRlIGxpZ25lcyIsCi0gICJDb2xzOiI6ICJDb2xvbm5lcyIsCi0gICJOdW1iZXIgb2YgY29sdW1ucyI6ICJOb21icmUgZGUgY29sb25uZXMiLAotICAiV2lkdGg6IjogIkxhcmdldXIiLAotICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIkxhcmdldXIgZHUgdGFibGVhdSIsCi0gICJQZXJjZW50IjogIlBvdXJjZW50IiwKLSAgIlBpeGVscyI6ICJQaXhlbHMiLAotICAiRW0iOiAiRW0iLAotICAiV2lkdGggdW5pdCI6ICJVbml0w6lzIGRlIGxhcmdldXIiLAotICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICJDb2xvbm5lcyDDoCB0YWlsbGUgZml4ZSIsCi0gICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIlBvc2l0aW9uIGR1IHRhYmxlYXUiLAotICAiQ2VsbCBzcGFjaW5nOiI6ICJFc3BhY2VtZW50IiwKLSAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAiRXNwYWNlIGVudHJlIGxlcyBjZWxsdWxlcyBhZGphY2VudGVzIiwKLSAgIkNlbGwgcGFkZGluZzoiOiAiTWFyZ2UgaW50ZXJuZSIsCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIkVzcGFjZSBlbnRyZSBsZSBjb250ZW51IGV0IGxhIGJvcmR1cmUgZCd1bmUgY2VsbHVsZSIsCi0gICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIlZvdXMgZGV2ZXogZW50cmVyIGxlIG5vbWJyZSBkZSBsaWduZXMiLAotICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJWb3VzIGRldmV6IGVudHJlciBsZSBub21icmUgZGUgY29sb25uZXMiLAotCi0gIC8vIEluc2VydCBJbWFnZQotICAiSW5zZXJ0IEltYWdlIjogIkluc8OpcmVyIHVuZSBpbWFnZSIsCi0gICJJbWFnZSBVUkw6IjogIlVSTCBpbWFnZSIsCi0gICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiRW50cmVyIGwnVVJMIGRlIGwnaW1hZ2UgaWNpIiwKLSAgIlByZXZpZXciOiAiUHLDqXZpc3VhbGlzZXIiLAotICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlByw6l2aXN1YWxpc2VyIGwnaW1hZ2UgZGFucyB1bmUgbm91dmVsbGUgZmVuw6p0cmUiLAotICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRleHRlIGFsdGVybmF0aWYiLAotICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiUG91ciBsZXMgbmF2aWdhdGV1cnMgcXVpIG5lIHN1cHBvcnRlbnQgcGFzIGxlcyBpbWFnZXMiLAotICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICJQb3NpdGlvbiBkZSBsJ2ltYWdlIiwKLSAgIkltYWdlIFByZXZpZXc6IjogIlByw6l2aXN1YWxpc2F0aW9uIiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiOiAiVm91cyBkZXZleiBlbnRyZXIgbCdVUkwiLAotCi0gIC8vIHRvb2xiYXIKLS8qCi0gICJidXR0b25fYm9sZCI6ICJmci9ib2xkLmdpZiIsCi0gICJidXR0b25fdW5kZXJsaW5lIjogImZyL3VuZGVybGluZS5naWYiLAotICAiYnV0dG9uX3N0cmlrZXRocm91Z2giOiAiZnIvc3RyaWtldGhyb3VnaC5naWYiLAotKi8KLQotICAvLyBFZGl0b3IgSGVscAotICAiWGluaGEgSGVscCI6ICJBaWRlIFhpbmhhIiwKLSAgIkVkaXRvciBIZWxwIjogIkFpZGUgZGUgbCfDqWRpdGV1ciIsCi0gICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiUmFjY291cmNpcyBjbGF2aWVyIiwKLSAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICJMJ8OpZGl0ZXVyIGZvdXJuaXQgbGVzIGNvbWJpbmFpc29ucyBkZSB0b3VjaGVzIHN1aXZhbnRlcyA6IiwKLSAgIkVOVEVSIjogIkVOVFJFRSIsCi0gICJuZXcgcGFyYWdyYXBoIjogIk5vdXZlYXUgcGFyYWdyYXBoZSIsCi0gICJTSElGVC1FTlRFUiI6ICJTSElGVCtFTlRSRUUiLAotICAiaW5zZXJ0IGxpbmVicmVhayI6ICJJbnPDqHJlIHVuIHNhdXQgZGUgbGlnbmUiLAotICAiU2V0IGZvcm1hdCB0byBwYXJhZ3JhcGgiOiAiQXBwbGlxdWUgbGUgZm9ybWF0IHBhcmFncmFwaGUiLAotICAiQ2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkIjogIk5ldHRveWFnZSBkdSBjb250ZW51IGNvcGnDqSBkZXB1aXMgV29yZCIsCi0gICJIZWFkaW5ncyI6ICJUaXRyZXMiLAotICAiQ2xvc2UiOiAiRmVybWVyIiwKLQotICAvLyBMb2FkaW5nIG1lc3NhZ2VzCi0gICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiQ2hhcmdlbWVudCBlbiBjb3Vycy4gVmV1aWxsZXogcGF0aWVudGVyISIsCi0gICJGaW5pc2hpbmciIDogIkNoYXJnZW1lbnQgYmllbnTDtHQgdGVybWluw6kiLCAKLSAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAiQ29uc3RydWN0aW9uIGRlIGwnb2JqZXQiLAotICAiQ3JlYXRlIFRvb2xiYXIiOiAiQ29uc3RydWN0aW9uIGRlIGxhIGJhcnJlIGQnaWNvbmVzIiwKLSAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiQ29uc3RydWN0aW9uIGRlIGxhIGJhcnJlIGRlIHN0YXR1cyIsCi0gICJSZWdpc3RlciByaWdodCBwYW5lbCIgOiAiRW5yZWdpc3RyZW1lbnQgZHUgcGFubmVhdSBkcm9pdCIsIAotICAiUmVnaXN0ZXIgbGVmdCBwYW5lbCIgOiAiRW5yZWdpc3RyZW1lbnQgZHUgcGFubmVhdSBnYXVjaGUiLCAKLSAgIlJlZ2lzdGVyIGJvdHRvbSBwYW5lbCIgOiAiRW5yZWdpc3RyZW1lbnQgZHUgcGFubmVhdSBzdXDDqXJpZXVyIiwgCi0gICJSZWdpc3RlciB0b3AgcGFuZWwiIDogIkVucmVnaXN0cmVtZW50IGR1IHBhbm5lYXUgaW5mw6lyaWV1ciIsIAotICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIkfDqW7DqXJhdGlvbiBkZSBYaW5oYSIsCi0gICJJbml0IGVkaXRvciBzaXplIjogIkluaXRpYWxpc2F0aW9uIGRlIGxhIHRhaWxsZSBkJ8OpZGl0aW9uIiwKLSAgIkluaXQgSUZyYW1lIjogIkluaXRpYWxpc2F0aW9uIGRlIGwnaWZyYW1lIiwKLSAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIjogIkVucmVnaXN0cmVtZW50IGR1IHBsdWdpbiAkcGx1Z2luIiwKLSAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iIDogIkNoYXJnZW1lbnQgZHUgcGx1Z2luICRwbHVnaW4iCi0KLX07ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvZ2IuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9nYi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjRmYjViNi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9nYi5qcworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzIC0tIENoaW5lc2UgR0IKLS8vIGJ5IERhdmUgTG8gLS0gZGxvQGludGVyYWN0aXZldG9vbHMuY29tCi17Ci0gICJCb2xkIjogIueyl+S9kyIsCi0gICJJdGFsaWMiOiAi5pac5L2TIiwKLSAgIlVuZGVybGluZSI6ICLlupXnur8iLAotICAiU3RyaWtldGhyb3VnaCI6ICLliKDpmaTnur8iLAotICAiU3Vic2NyaXB0IjogIuS4i+aghyIsCi0gICJTdXBlcnNjcmlwdCI6ICLkuIrmoIciLAotICAiSnVzdGlmeSBMZWZ0IjogIuS9jee9rumdoOW3piIsCi0gICJKdXN0aWZ5IENlbnRlciI6ICLkvY3nva7lsYXkuK0iLAotICAiSnVzdGlmeSBSaWdodCI6ICLkvY3nva7pnaDlj7MiLAotICAiSnVzdGlmeSBGdWxsIjogIuS9jee9ruW3puWPs+W5s+etiSIsCi0gICJPcmRlcmVkIExpc3QiOiAi6aG65bqP5riF5Y2VIiwKLSAgIkJ1bGxldGVkIExpc3QiOiAi5peg5bqP5riF5Y2VIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICLlh4/lsI/ooYzliY3nqbrnmb0iLAotICAiSW5jcmVhc2UgSW5kZW50IjogIuWKoOWuveihjOWJjeepuueZvSIsCi0gICJGb250IENvbG9yIjogIuaWh+Wtl+minOiJsiIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIuiDjOaZr+minOiJsiIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAi5rC05bmz57q/IiwKLSAgIkluc2VydCBXZWIgTGluayI6ICLmj5LlhaXov57nu5MiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLmj5LlhaXlm77lvaIiLAotICAiSW5zZXJ0IFRhYmxlIjogIuaPkuWFpeihqOagvCIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAi5YiH5o2iSFRNTOWOn+Wni+eggSIsCi0gICJFbmxhcmdlIEVkaXRvciI6ICLmlL7lpKciLAotICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAi5YWz5pa8IFhpbmhhIiwKLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIuivtOaYjiIsCi0gICJDdXJyZW50IHN0eWxlIjogIuWtl+S9k+S+i+WtkCIKLX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2hlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvaGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzOWQzZmMuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvaGUuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotCi0vLyBMQU5HOiAiaGUiLCBFTkNPRElORzogVVRGLTgKLS8vIEF1dGhvcjogTGlyb24gTmV3bWFuLCBodHRwOi8vd3d3LmVlc2gubmV0LCA8cGxhc3Rpc2ggYXQgdWx0aW5ldCBkb3Qgb3JnPgotCi0vLyBGT1IgVFJBTlNMQVRPUlM6Ci0vLwotLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCi0vLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCi0vLwotLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7Ci0vLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50Ci0vLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCi0KLXsKLSAgIkJvbGQiOiAi157XldeT15LXqSIsCi0gICJJdGFsaWMiOiAi16DXmNeV15kiLAotICAiVW5kZXJsaW5lIjogIten15Ug16rXl9eq15kiLAotICAiU3RyaWtldGhyb3VnaCI6ICLXp9eVINeQ157XpteiIiwKLSAgIlN1YnNjcmlwdCI6ICLXm9eq15Eg16LXmdec15kiLAotICAiU3VwZXJzY3JpcHQiOiAi15vXqteRINeq15fXqteZIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICIg15nXqdeV16gg15zXqdee15DXnCIsCi0gICJKdXN0aWZ5IENlbnRlciI6ICLXmdep15XXqCDXnNee16jXm9eWIiwKLSAgIkp1c3RpZnkgUmlnaHQiOiAi15nXqdeV16gg15zXmdee15nXnyIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAi15nXqdeV16gg15zXqdeV16jXlCDXntec15DXlCIsCi0gICJPcmRlcmVkIExpc3QiOiAi16jXqdeZ157XlCDXntee15XXodek16jXqiIsCi0gICJCdWxsZXRlZCBMaXN0IjogIteo16nXmdee15Qg15zXkCDXntee15XXodek16jXqiIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAi15TXp9eY158g15vXoNeZ16HXlCIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAi15TXkteT15wg15vXoNeZ16HXlCIsCi0gICJGb250IENvbG9yIjogItem15HXoiDXkteV16TXnyIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogItem15HXoiDXqNen16IiLAotICAiSG9yaXpvbnRhbCBSdWxlIjogIten15Ug15DXoNeb15kiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIteU15vXoNehINeU15nXpNeoLden15nXqdeV16giLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLXlNeb16DXoS/Xqdeg15Qg16rXnteV16DXlCIsCi0gICJJbnNlcnQgVGFibGUiOiAi15TXm9eg16Eg15jXkdec15QiLAotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogItep16DXlCDXntem15Eg16fXldeTIEhUTUwiLAotICAiRW5sYXJnZSBFZGl0b3IiOiAi15TXkteT15wg15DXqiDXlNei15XXqNeaIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIteQ15XXk9eV16og16LXldeo15og15bXlCIsCi0gICJIZWxwIHVzaW5nIGVkaXRvciI6ICLXoteW16jXlCDXnNep15nXnteV16kg15HXoteV16jXmiIsCi0gICJDdXJyZW50IHN0eWxlIjogIteh15LXoNeV158g16DXldeb15fXmSIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLXnteR15jXnCDXkNeqINek16LXldec16rXmiDXlNeQ15fXqNeV16DXlCIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLXnteR16bXoiDXnteX15PXqSDXkNeqINeU16TXoteV15zXlCDXlNeQ15fXqNeV16DXlCDXqdeR15nXmNec16oiLAotICAiQ3V0IHNlbGVjdGlvbiI6ICLXkteW15XXqCDXkdeX15nXqNeUIiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIteU16LXqtenINeR15fXmdeo15QiLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAi15TXk9eR16cg157XlNec15XXlyIsCi0gICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICLXm9eZ15XXldefINee16nXnteQ15wg15zXmdee15nXnyIsCi0gICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLXm9eZ15XXldefINee15nXnteZ158g15zXqdee15DXnCIsCi0gICJPSyI6ICLXkNeZ16nXldeoIiwKLSAgIkNhbmNlbCI6ICLXkdeZ15jXldecIiwKLSAgIlBhdGgiOiAi16DXqteZ15Eg16LXmdem15XXkSIsCi0gICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAi15DXqteUINeR157XpteRINeY16fXodeYINeg16fXmSAo16fXldeTKS4g15TXqdeq157XqSDXkdeb16TXqteV16ggWzw+XSDXm9eT15kg15zXl9eW15XXqCDXnNee16bXkSBXWVNJV1lHICjXqtem15XXkteqINei15nXpteV15EpLiIsCi0gICJUaGUgZnVsbCBzY3JlZW4gbW9kZSBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIEludGVybmV0IEV4cGxvcmVyLCBkdWUgdG8gYnJvd3NlciBidWdzIHRoYXQgd2Ugd2VyZW4iOiAi157XpteRINee16HXmiDXntec15Ag15nXldem16gg15HXoteZ15XXqiDXkdeT16TXk9ek158gSW50ZXJuZXQgRXhwbG9yZXIsINei16fXkSDXkdeQ15LXmdedINeR15PXpNeT16TXnyDXnNeQINeZ15vXldec16DXlSDXnNek16rXldeoINeQ16og15bXlC4gINeQ16ov15Qg16LXnNeV15wv15Qg15zXl9eV15XXqiDXqtem15XXkteqINeW15HXnCwgINeR16LXmdeV16og15HXqtek16fXldeTINeU16LXldeo15og15Uv15DXlSDXp9eo15nXodeUINep15wg15TXk9ek15PXpNefLiAg15DXnSDXlNee16LXqNeb16og16nXnNeaINeU15nXkCBXaW5kb3dzIDl4INeh15HXmdeoINec15TXoNeZ15cg16nXqten15HXnC/XmSAiLAotICAiQ2FuY2VsIjogIteR15nXmNeV15wiLAotICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIteU15XXodejL9ep16DXlCDXp9eZ16nXldeoIiwKLSAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAi15fXnNeV158g15fXk9epIChfYmxhbmspIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi15zXnNeQICjXlNep16rXntepINeRLWZyYW1lINeU16fXmdeZ150pIiwKLSAgIk90aGVyIjogIteQ15fXqCIsCi0gICJTYW1lIGZyYW1lIChfc2VsZikiOiAi15DXldeq15UgZnJhbWUgKF9zZWxmKSIsCi0gICJUYXJnZXQ6IjogIteZ16LXkzoiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICLXm9eV16rXqNeqICh0b29sdGlwKToiLAotICAiVG9wIGZyYW1lIChfdG9wKSI6ICJGcmFtZSDXotec15nXldefIChfdG9wKSIsCi0gICJVUkw6IjogIlVSTDoiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIteX15XXkdeUINec15vXqteV15EgVVJMINep15DXnNeZ15Ug16fXmdep15XXqCDXlteUINee16bXkdeZ16IiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9odS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2h1LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGIxZmE0Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2h1LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogImh1IiwgRU5DT0RJTkc6IFVURi04Ci0vLyBBdXRob3I6IE1pa2zDs3MgU29tb2d5aSwgPHNvbW9neWluZUB2bmV0Lmh1PgotCi0vLyBGT1IgVFJBTlNMQVRPUlM6Ci0vLwotLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCi0vLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCi0vLwotLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7Ci0vLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50Ci0vLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCi0KLXsKLSAgIkJvbGQiOiAiRsOpbGvDtnbDqXIiLAotICAiSXRhbGljIjogIkTFkWx0IiwKLSAgIlVuZGVybGluZSI6ICJBbMOhaMO6em90dCIsCi0gICJTdHJpa2V0aHJvdWdoIjogIsOBdGjDunpvdHQiLAotICAiU3Vic2NyaXB0IjogIkFsc8OzIGluZGV4IiwKLSAgIlN1cGVyc2NyaXB0IjogIkZlbHPFkSBpbmRleCIsCi0gICJKdXN0aWZ5IExlZnQiOiAiQmFscmEgesOhcnQiLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiS8O2esOpcHJlIHrDoXJ0IiwKLSAgIkp1c3RpZnkgUmlnaHQiOiAiSm9iYnJhIHrDoXJ0IiwKLSAgIkp1c3RpZnkgRnVsbCI6ICJTb3JraXrDoXJ0IiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJTesOhbW96b3R0IGxpc3RhIiwKLSAgIkJ1bGxldGVkIExpc3QiOiAiU3rDoW1vemF0bGFuIGxpc3RhIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICJCZWjDunrDoXMgY3PDtmtrZW50w6lzZSIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAiQmVow7p6w6FzIG7DtnZlbMOpc2UiLAotICAiRm9udCBDb2xvciI6ICJLYXJha3RlcnN6w61uIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiSMOhdHTDqXJzesOtbiIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiRWx2w6FsYXN6dMOzIHZvbmFsIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICJIaXBlcmhpdmF0a296w6FzIGJlc3rDunLDoXNhIiwKLSAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiS8OpcCBiZXN6w7pyw6FzYSIsCi0gICJJbnNlcnQgVGFibGUiOiAiVMOhYmzDoXphdCBiZXN6w7pyw6FzYSIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiSFRNTCBmb3Jyw6FzIGJlL2tpIiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIlN6ZXJrZXN6dMWRIGvDvGzDtm4gYWJsYWtiYW4iLAotICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiTsOpdmplZ3kiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiU8O6Z8OzIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiQWt0dcOhbGlzIHN0w61sdXMiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiVmlzc3phdm9uw6FzIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIsOaanJhIHbDqWdyZWhhanTDoXMiLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJLaXbDoWfDoXMiLAotICAiQ29weSBzZWxlY3Rpb24iOiAiTcOhc29sw6FzIiwKLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIkJlaWxsZXN6dMOpcyIsCi0gICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJJcsOhbnkgYmFscsOzbCBqb2JicmEiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiSXLDoW55IGpvYmJyw7NsIGJhbHJhIiwKLSAgIk9LIjogIlJlbmRiZW4iLAotICAiQ2FuY2VsIjogIk3DqWdzZW0iLAotICAiUGF0aCI6ICJIaWVyYXJjaGlhIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJGb3Jyw6FzIG3Ds2QuIFZpc3N6YXbDoWx0w6FzIFs8Pl0gZ29tYiIsCi0gICJUaGUgZnVsbCBzY3JlZW4gbW9kZSBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIEludGVybmV0IEV4cGxvcmVyLCBkdWUgdG8gYnJvd3NlciBidWdzIHRoYXQgd2Ugd2VyZW4iOiAiQSB0ZWxqZXNrw6lwcmVuecWRcyBzemVya2VzenTDqXMgaGliw6F0IG9rb3poYXQgSW50ZXJuZXQgRXhwbG9yZXIgaGFzem7DoWxhdGEgZXNldMOpbiwgZXogYSBiw7ZuZ8Opc3rFkSBhIGhpYsOhamEsIGFtaXQgbmVtIHR1ZHVuayBraWtlcsO8bG5pLiBTemVtZXRldCDDqXN6bGVsaGV0IGEga8OpcHJlbnnFkW4sIGlsbGV0dmUgbsOpaMOhbnkgZnVua2Npw7MgaGnDoW55b3poYXQgw6lzL3ZhZ3kgdsOpbGV0bGVuc3plcsWxZW4gbGVmYWd5aGF0IGEgYsO2bmfDqXN6xZEuIFdpbmRvd3MgOXggb3BlcmFjacOzcyBmdXR0YXTDoXNhIGVzZXTDqW4gZWzDqWcgdmFsw7NzesOtbsWxLCBob2d5ICIsCi0gICJDYW5jZWwiOiAiTcOpZ3NlbSIsCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSGl2YXRrb3rDoXMgQmVzesO6csOhc2EvTcOzZG9zw610w6FzYSIsCi0gICJOZXcgd2luZG93IChfYmxhbmspIjogIsOaaiBhYmxhayAoX2JsYW5rKSIsCi0gICJOb25lICh1c2UgaW1wbGljaXQpIjogIk5pbmNzICh1c2UgaW1wbGljaXQpIiwKLSAgIk90aGVyIjogIk3DoXMiLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlVneWFuYWJiYSBhIGtlcmV0YmUgKF9zZWxmKSIsCi0gICJUYXJnZXQ6IjogIkPDqWw6IiwKLSAgIlRpdGxlICh0b29sdGlwKToiOiAiQ8OtbSAodG9vbHRpcCk6IiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRmVsc8WRIGtlcmV0IChfdG9wKSIsCi0gICJVUkw6IjogIlVSTDoiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIkJlIGtlbGwgw61ybmlhIGF6IFVSTC10LCBhaG92YSBhIGhpdmF0a296w6FzIG11dGFzc29uIgotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvaXQuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9pdC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM5MmYyMy4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9pdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0KLS8vIExBTkc6ICJpdCIsIEVOQ09ESU5HOiBVVEYtOAotLy8gQXV0aG9yOiBNYXR0aWEgTGFuZG9uaSwgaHR0cDovL3d3dy53ZWJwcmVzaWRlbnQub3JnLwotCi17Ci0gICJCb2xkIjogIkdyYXNzZXR0byIsCi0gICJJdGFsaWMiOiAiQ29yc2l2byIsCi0gICJVbmRlcmxpbmUiOiAiU290dG9saW5lYXRvIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiQmFycmF0byIsCi0gICJTdWJzY3JpcHQiOiAiUGVkaWNlIiwKLSAgIlN1cGVyc2NyaXB0IjogIkFwaWNlIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJTaW5pc3RyYSIsCi0gICJKdXN0aWZ5IENlbnRlciI6ICJDZW50cmF0byIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIkRlc3RyYSIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAiR2l1c3RpZmljYXRvIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJMaXN0YSBudW1lcmF0YSIsCi0gICJCdWxsZXRlZCBMaXN0IjogIkxpc3RhIG5vbiBudW1lcmF0YSIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiRGltaW51aXNjaSBpbmRlbnRhemlvbmUiLAotICAiSW5jcmVhc2UgSW5kZW50IjogIkF1bWVudGEgaW5kZW50YXppb25lIiwKLSAgIkZvbnQgQ29sb3IiOiAiQ29sb3JlIGZvbnQiLAotICAiQmFja2dyb3VuZCBDb2xvciI6ICJDb2xvcmUgc2ZvbmRvIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICJSaWdoZWxsbyBvcml6em9udGFsZSIsCi0gICJJbnNlcnQgV2ViIExpbmsiOiAiSW5zZXJpc2NpIGxpbmsiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJbnNlcmlzY2kvbW9kaWZpY2EgSW1tYWdpbmUiLAotICAiSW5zZXJ0IFRhYmxlIjogIkluc2VyaXNjaSB0YWJlbGxhIiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJWaXN1YWxpenphL25hc2NvbmRpIHNvcmdlbnRlIEhUTUwiLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiQWxsYXJnYSBlZGl0b3IiLAotICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiSW5mb3JtYXppb25pIHN1IFhpbmhhIiwKLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIkFpdXRvIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiU3RpbGUgY29ycmVudGUiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQW5udWxsYSB1bHRpbWEgYXppb25lIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlJpcGV0aSB1bHRpbWEgYXppb25lIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiVGFnbGlhIiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIkNvcGlhIiwKLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIkluY29sbGEiLAotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiVGVzdG8gZGEgc3ggYSBkeCIsCi0gICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJUZXN0byBkYSBkeCBhIHN4IiwKLSAgIk9LIjogIk9LIiwKLSAgIkNhbmNlbCI6ICJBbm51bGxhIiwKLSAgIlBhdGgiOiAiUGVyY29yc28iLAotICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIlNlaSBpbiBNT0RBTElUQSIsCi0gICJUaGUgZnVsbCBzY3JlZW4gbW9kZSBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIEludGVybmV0IEV4cGxvcmVyLCBkdWUgdG8gYnJvd3NlciBidWdzIHRoYXQgd2Ugd2VyZW4iOiAiRSIsCi0gICJDYW5jZWwiOiAiQW5udWxsYSIsCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5zZXJpc2NpL21vZGlmaWNhIGxpbmsiLAotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOdW92YSBmaW5lc3RyYSAoX2JsYW5rKSIsCi0gICJOb25lICh1c2UgaW1wbGljaXQpIjogIk5pZW50ZSAodXNhIGltcGxpY2l0bykiLAotICAiT3RoZXIiOiAiQWx0cm8iLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlN0ZXNzYSBmcmFtZSAoX3NlbGYpIiwKLSAgIlRhcmdldDoiOiAiVGFyZ2V0OiIsCi0gICJUaXRsZSAodG9vbHRpcCk6IjogIlRpdGxlIChzdWdnZXJpbWVudG8pOiIsCi0gICJUb3AgZnJhbWUgKF90b3ApIjogIlBhZ2luYSBpbnRlcmEgKF90b3ApIiwKLSAgIlVSTDoiOiAiVVJMOiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiRGV2aSBpbnNlcmlyZSBsJ2luZGlyaXp6byBhIGN1aSBwdW50YSBpbCBsaW5rIgotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9qYS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2MwNjhmOS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9qYS5qcworKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04TgotCi17Ci0gICJCb2xkIjogIuWkquWtlyIsCi0gICJJdGFsaWMiOiAi5pac5L2TIiwKLSAgIlVuZGVybGluZSI6ICLkuIvnt5oiLAotICAiU3RyaWtldGhyb3VnaCI6ICLmiZPjgaHmtojjgZfnt5oiLAotICAiU3Vic2NyaXB0IjogIuS4i+S7mOOBjea3u+OBiOWtlyIsCi0gICJTdXBlcnNjcmlwdCI6ICLkuIrku5jjgY3mt7vjgYjlrZciLAotICAiSnVzdGlmeSBMZWZ0IjogIuW3puWvhOOBmyIsCi0gICJKdXN0aWZ5IENlbnRlciI6ICLkuK3lpK7lr4TjgZsiLAotICAiSnVzdGlmeSBSaWdodCI6ICLlj7Plr4TjgZsiLAotICAiSnVzdGlmeSBGdWxsIjogIuWdh+etieWJsuS7mCIsCi0gICJPcmRlcmVkIExpc3QiOiAi55Wq5Y+35LuY44GN566H5p2h5pu444GNIiwKLSAgIkJ1bGxldGVkIExpc3QiOiAi6KiY5Y+35LuY44GN566H5p2h5pu444GNIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICLjgqTjg7Pjg4fjg7Pjg4jop6PpmaQiLAotICAiSW5jcmVhc2UgSW5kZW50IjogIuOCpOODs+ODh+ODs+ODiOioreWumiIsCi0gICJGb250IENvbG9yIjogIuaWh+Wtl+iJsiIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIuiDjOaZr+iJsiIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAi5rC05bmz57eaIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICLjg6rjg7Pjgq/jga7mjL/lhaUiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLnlLvlg4/jga7mjL/lhaUv5L+u5q2jIiwKLSAgIkluc2VydCBUYWJsZSI6ICLjg4bjg7zjg5bjg6vjgpLmjL/lhaUiLAotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIkhUTUznt6jpm4bjg6Ljg7zjg4njgpLliIfmm78iLAotICAiRW5sYXJnZSBFZGl0b3IiOiAi44Ko44OH44Kj44K/44KS5pyA5aSn5YyWIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIuODkOODvOOCuOODp+ODs+aDheWgsSIsCi0gICJIZWxwIHVzaW5nIGVkaXRvciI6ICLjg5jjg6vjg5ciLAotICAiQ3VycmVudCBzdHlsZSI6ICLnj77lnKjjga7jgrnjgr/jgqTjg6siLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi5YWD44Gr5oi744GZIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIuOChOOCiuebtOOBlyIsCi0gICJDdXQgc2VsZWN0aW9uIjogIuWIh+OCiuWPluOCiiIsCi0gICJDb3B5IHNlbGVjdGlvbiI6ICLjgrPjg5Tjg7wiLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAi6LK844KK5LuY44GRIiwKLSAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIuW3puOBi+OCieWPs+OBuCIsCi0gICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLlj7PjgYvjgonlt6bjgbgiLAotICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAi5pu45byP5YmK6ZmkIiwKLSAgIlNlbGVjdCBhbGwiOiAi44GZ44G544Gm6YG45oqeIiwKLSAgIlByaW50IGRvY3VtZW50IjogIuWNsOWItyIsCi0gICJDbGVhciBNU09mZmljZSB0YWdzIjogIk1TT2ZmaWNl44K/44Kw44KS44Kv44Oq44KiIiwKLSAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogIuOCpOODs+ODqeOCpOODs+ODleOCqeODs+ODiOaMh+WumuOCkuOCr+ODquOCoiIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAi44OV44Kp44Oz44OI5ZCN44KS44Kv44Oq44Ki44GX44G+44GZ44GLPyIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHNpemVzPyI6ICLjgrXjgqTjgrrjgpLjgq/jg6rjgqLjgZfjgb7jgZnjgYs/IiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAi6Imy44KS44Kv44Oq44Ki44GX44G+44GZ44GLPyIsCi0gICJTcGxpdCBCbG9jayI6ICLpoJjln5/liIblibIiLAotICAiVG9nZ2xlIEJvcmRlcnMiOiAi5aKD55WM57ea44Gu5YiH5pu/IiwKLSAgIlNhdmUgYXMiOiAi5ZCN5YmN44KS44Gk44GR44Gm5L+d5a2YIiwKLSAgIkluc2VydC9PdmVyd3JpdGUiOiAi5oy/5YWlL+S4iuabuOOBjSIsCi0gICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsg5pu45byPICYjODIxMjsiLAotICAiSGVhZGluZyAxIjogIuimi+WHuuOBlzEiLAotICAiSGVhZGluZyAyIjogIuimi+WHuuOBlzIiLAotICAiSGVhZGluZyAzIjogIuimi+WHuuOBlzMiLAotICAiSGVhZGluZyA0IjogIuimi+WHuuOBlzQiLAotICAiSGVhZGluZyA1IjogIuimi+WHuuOBlzUiLAotICAiSGVhZGluZyA2IjogIuimi+WHuuOBlzYiLAotICAiTm9ybWFsIjogIuaomea6liIsCi0gICJBZGRyZXNzIjogIuOCouODieODrOOCuSIsCi0gICJGb3JtYXR0ZWQiOiAi5pW05b2i5riI44G/IiwKLSAgIiYjODIxMjsgZm9udCAmIzgyMTI7IjogIiYjODIxMjsg44OV44Kp44Oz44OIICYjODIxMjsiLAotICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiJiM4MjEyOyDjgrXjgqTjgrogJiM4MjEyOyIsCi0gIAotICAvL2RpYWxvZ3MKLSAgIk9LIjogIk9LIiwKLSAgIkNhbmNlbCI6ICLkuK3mraIiLAotICAiUGF0aCI6ICLjg5HjgrkiLAotICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIuODhuOCreOCueODiOODouODvOODieOBp+aTjeS9nOOBl+OBpuOBhOOBvuOBmeOAgldZU0lXWUfnt6jpm4bjgavmiLvjgovjgavjga9bPD5d44Oc44K/44Oz44KS5L2/44Gj44Gm44GP44Gg44GV44GE44CCIiwKLSAgIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAiTW96aWxsYeODmeODvOOCueOBrldlYuODluODqeOCpuOCtuOBp+OBr+OAgeiyvOOCiuS7mOOBkeODnOOCv+ODs+OBr+apn+iDveOBl+OBvuOBm+OCk++8iOaKgOihk+eahOOBquOCu+OCreODpeODquODhuOCo+S4iuOBrueQhueUseOBp++8ieOAgkN0cmwrVuOCreODvOOCkuaKvOOBl+OBpuebtOaOpeiyvOOCiuS7mOOBkeOBpuOBj+OBoOOBleOBhOOAgiIsCi0gICJZb3VyIERvY3VtZW50IGlzIG5vdCB3ZWxsIGZvcm1lZC4gQ2hlY2sgSmF2YVNjcmlwdCBjb25zb2xlIGZvciBkZXRhaWxzLiI6ICLjgZPjga7mlofmm7jjgavjga/mp4vmlofnmoTjgarllY/poYzjgYzjgYLjgorjgb7jgZnjgILoqbPntLDjga9KYXZhU2NyaXB044Kz44Oz44K944O844Or44KS5Y+C54Wn44GX44Gm44GP44Gg44GV44GE44CCIiwKLSAgIllvdSBuZWVkIHRvIHNlbGVjdCBzb21lIHRleHQgYmVmb3JlIGNyZWF0aW5nIGEgbGluayI6ICLjg6rjg7Pjgq/jgpLkvZzmiJDjgZnjgovjgavjga/jg4bjgq3jgrnjg4jjgpLpgbjmip7jgZnjgovlv4XopoHjgYzjgYLjgorjgb7jgZkiLAotCi0gICJBbGlnbm1lbnQ6IjogIuihjOaPg+OBiDoiLAotICAiTm90IHNldCI6ICLjgarjgZciLAotICAiTGVmdCI6ICLlt6YiLAotICAiUmlnaHQiOiAi5Y+zIiwKLSAgIlRleHR0b3AiOiAi44OG44Kt44K544OI5LiK6YOoIiwKLSAgIkFic21pZGRsZSI6ICLkuK3lpK4o57W25a++55qEKSIsCi0gICJCYXNlbGluZSI6ICLjg5njg7zjgrnjg6njgqTjg7MiLAotICAiQWJzYm90dG9tIjogIuS4iyjntbblr77nmoQpIiwKLSAgIkJvdHRvbSI6ICLkuIsiLAotICAiTWlkZGxlIjogIuS4reWkriIsCi0gICJUb3AiOiAi5LiKIiwKLQotICAiTGF5b3V0IjogIuODrOOCpOOCouOCpuODiCIsCi0gICJTcGFjaW5nIjogIumWk+malCIsCi0gICJIb3Jpem9udGFsOiI6ICLmsLTlubM6IiwKLSAgIkhvcml6b250YWwgcGFkZGluZyI6ICLmsLTlubPkvZnnmb0iLAotICAiVmVydGljYWw6IjogIuWeguebtDoiLAotICAiVmVydGljYWwgcGFkZGluZyI6ICLlnoLnm7TkvZnnmb0iLAotICAiQm9yZGVyIHRoaWNrbmVzczoiOiAi5aKD55WM57ea44Gu5aSq44GVOiIsCi0gICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIuWig+eVjOe3muOBjOOBquOBhOWgtOWQiOOBr+epuuOBruOBvuOBvuOBq+OBmeOCiyIsCi0KLSAgLy9JbnNlcnQgTGluawotICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIuODquODs+OCr+OBruaMv+WFpS/kv67mraMiLAotICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICLjgarjgZcgKOODh+ODleOCqeODq+ODiOOBq+S7u+OBm+OCiykiLAotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLmlrDjgZfjgYTjgqbjgqPjg7Pjg4njgqYgKF9ibGFuaykiLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIuiHquW3seODleODrOODvOODoOWGhSAoX3NlbGYpIiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAi5pyA5LiK5L2N44OV44Os44O844OgIChfdG9wKSIsCi0gICJPdGhlciI6ICLjgZ3jga7ku5YiLAotICAiVGFyZ2V0OiI6ICLjgr/jg7zjgrLjg4Pjg4g6IiwKLSAgIlRpdGxlICh0b29sdGlwKToiOiAi44K/44Kk44OI44OrOiIsCi0gICJVUkw6IjogIlVSTDoiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIuOBk+OBruODquODs+OCr+OBjOaMh+OBl+ekuuOBmVVSTOOCkuWFpeWKm+OBl+OBpuOBj+OBoOOBleOBhCIsCi0KLSAgLy8gSW5zZXJ0IFRhYmxlCi0gICJJbnNlcnQgVGFibGUiOiAi44OG44O844OW44Or44Gu5oy/5YWlIiwKLSAgIlJvd3M6IjogIuihjDoiLAotICAiTnVtYmVyIG9mIHJvd3MiOiAi6KGM5pWwIiwKLSAgIkNvbHM6IjogIuWIlzoiLAotICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAi5YiX5pWwIiwKLSAgIldpZHRoOiI6ICLluYU6IiwKLSAgIldpZHRoIG9mIHRoZSB0YWJsZSI6ICLjg4bjg7zjg5bjg6vjga7luYUiLAotICAiUGVyY2VudCI6ICLjg5Hjg7zjgrvjg7Pjg4goJSkiLAotICAiUGl4ZWxzIjogIuODlOOCr+OCu+ODqyhweCkiLAotICAiRW0iOiAi55u45a++5YCkKGVtKSIsCi0gICJXaWR0aCB1bml0IjogIuW5heOBruWNmOS9jSIsCi0gICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIuWIl+OBruW5heOCkuWbuuWumiIsCi0gICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIuOBk+OBruODhuODvOODluODq+OBrumFjee9riIsCi0gICJDZWxsIHNwYWNpbmc6IjogIuOCu+ODq+mWk+malDoiLAotICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICLpmqPmjqXjgZnjgovjgrvjg6vplpPjga7ot53pm6IiLAotICAiQ2VsbCBwYWRkaW5nOiI6ICLjgrvjg6vkvZnnmb06IiwKLSAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAi44K744Or5YaF44Gr44GK44GR44KL5YaF5a6544Go5aKD55WM57ea44Go44Gu6Led6ZuiIiwKLSAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAi6KGM5pWw44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GEIiwKLSAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIGNvbHVtbnMiOiAi5YiX5pWw44KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GEIiwKLQotICAvLyBJbnNlcnQgSW1hZ2UKLSAgIkluc2VydCBJbWFnZSI6ICLnlLvlg4/jga7mjL/lhaUiLAotICAiSW1hZ2UgVVJMOiI6ICLnlLvlg49VUkw6IiwKLSAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICLnlLvlg4/jga5VUkzjgpLjgZPjgZPjgavlhaXlipvjgZfjgb7jgZkiLAotICAiUHJldmlldyI6ICLooajnpLoiLAotICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIuOCpuOCo+ODs+ODieOCpuOBp+eUu+WDj+OCkuihqOekuiIsCi0gICJBbHRlcm5hdGUgdGV4dDoiOiAi5Luj5pu/44OG44Kt44K544OIOiIsCi0gICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICLnlLvlg4/ooajnpLrjgpLjgrXjg53jg7zjg4jjgZfjgarjgYTjg5bjg6njgqbjgrbjgavlv4XopoHjgafjgZkiLAotICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICLnlLvlg4/jga7phY3nva4iLAotICAiSW1hZ2UgUHJldmlldzoiOiAi55S75YOP6KGo56S6OiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogIlVSTOOCkuWFpeWKm+OBmeOCi+W/heimgeOBjOOBguOCiuOBvuOBmSIsCi0KLSAgLy8iYnV0dG9uX2JvbGQiOiAiZnIvYm9sZC5naWYiLAotICAvLyJidXR0b25fdW5kZXJsaW5lIjogImZyL3VuZGVybGluZS5naWYiLAotICAvLyJidXR0b25fc3RyaWtldGhyb3VnaCI6ICJmci9zdHJpa2V0aHJvdWdoLmdpZiIsCi0KLSAgLy8gRWRpdG9yIEhlbHAKLSAgIlhpbmhhIEhlbHAiOiAi44OY44Or44OXIiwKLSAgIkVkaXRvciBIZWxwIjogIuOCqOODh+OCo+OCv+OBruODmOODq+ODlyIsCi0gICJLZXlib2FyZCBzaG9ydGN1dHMiOiAi44Kt44O844Oc44O844OJ44K344On44O844OI44Kr44OD44OIIiwKLSAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICLjgqjjg4fjgqPjgr/jga/ku6XkuIvjga7jgq3jg7zmk43kvZzjgpLmj5DkvpvjgZfjgabjgYTjgb7jgZk6IiwKLSAgIkVOVEVSIjogIkVOVEVSIiwKLSAgIm5ldyBwYXJhZ3JhcGgiOiAi5paw6KaP5q616JC9IiwKLSAgIlNISUZULUVOVEVSIjogIlNISUZUK0VOVEVSIiwKLSAgImluc2VydCBsaW5lYnJlYWsiOiAi5q616JC95YaF5pS56KGM44Gu5oy/5YWlIiwKLSAgIlNldCBmb3JtYXQgdG8gcGFyYWdyYXBoIjogIuauteiQveabuOW8j+OBruioreWumiIsCi0gICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAiV29yZOOBi+OCieiyvOOCiuS7mOOBkeOCieOCjOOBn+WGheWuueOBrua4heabuCIsCi0gICJIZWFkaW5ncyI6ICLopovlh7rjgZciLAotICAiQ2xvc2UiOiAi6ZaJ44GY44KLIiwKLQotICAvLyBMb2FkaW5nIG1lc3NhZ2VzCi0gICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAi44Ot44O844OJ5Lit44Gn44GZ44CC44GX44Gw44KJ44GP44GK5b6F44Gh44GP44Gg44GV44GEIiwKLSAgIkxvYWRpbmcgcGx1Z2luICRwbHVnaW4iIDogIuODreODvOODieS4reODl+ODqeOCsOOCpOODsyAkcGx1Z2luIiwKLSAgIlJlZ2lzdGVyIHBsdWdpbiAkcGx1Z2luIiA6ICLnmbvpjLLkuK3jg5fjg6njgrDjgqTjg7MgJHBsdWdpbiIsIAotICAiQ29uc3RydWN0aW5nIG9iamVjdCI6ICLjgqrjg5bjgrjjgqfjgq/jg4jmp4vnr4nkuK0iLAotICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIlhpbmhh44OV44Os44O844Og44Ov44O844Kv55Sf5oiQ5LitIiwKLSAgIkluaXQgZWRpdG9yIHNpemUiOiLjgqjjg4fjgqPjgr/jgrXjgqTjgrrjga7liJ3mnJ/ljJYiLCAKLSAgIkNyZWF0ZSBUb29sYmFyIjogIuODhOODvOODq+ODkOODvOOBruS9nOaIkCIsCi0gICJDcmVhdGUgU3RhdHVzYmFyIiA6ICLjgrnjg4bjg7zjgr/jgrnjg5Djg7zjga7kvZzmiJAiLAotICAiUmVnaXN0ZXIgcmlnaHQgcGFuZWwiIDogIueZu+mMsiDlj7Pjg5Hjg43jg6siLCAKLSAgIlJlZ2lzdGVyIGxlZnQgcGFuZWwiIDogIueZu+mMsiDlt6bjg5Hjg43jg6siLCAKLSAgIlJlZ2lzdGVyIGJvdHRvbSBwYW5lbCIgOiAi55m76YyyIOS4i+ODkeODjeODqyIsIAotICAiUmVnaXN0ZXIgdG9wIHBhbmVsIiA6ICLnmbvpjLIg5LiK44OR44ON44OrIiwgCi0gICJGaW5pc2hpbmciIDogIuWujOS6hiIsCi0gIAotICAvLyBDb2xvclBpY2tlcgotICAiQ2xpY2sgYSBjb2xvci4uLiIgOiAi6Imy44KS44Kv44Oq44OD44KvLi4uIiwKLSAgIlNhbXBsZSIgOiAi44K144Oz44OX44OrIiwKLSAgIldlYiBTYWZlOiAiIDogIldlYuOCu+ODvOODlTogIiwKLSAgIkNvbG9yOiAiIDogIuiJsjogIiAgCi19OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2x0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvbHQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMzQwMDkuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvbHQuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotCi0vLyBMQU5HOiAibHQiLCBFTkNPRElORzogVVRGLTgKLS8vIEF1dGhvcjogSmFyb3NsYXYgxaBhdGtldmnEjSwgPGphcm9AYWtsLmx0PgotCi17Ci0gICJCb2xkIjogIlBhcnnFoWtpbnRpIiwKLSAgIkl0YWxpYyI6ICJLdXJzeXZhcyIsCi0gICJVbmRlcmxpbmUiOiAiUGFicmF1a3RpIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiUGVyYnJhdWt0aSIsCi0gICJTdWJzY3JpcHQiOiAiQXBhdGluaXMgaW5kZWtzYXMiLAotICAiU3VwZXJzY3JpcHQiOiAiVmlyxaF1dGluaXMgaW5kZWtzYXMiLAotICAiSnVzdGlmeSBMZWZ0IjogIkx5Z2lhdmltYXMgcGFnYWwga2FpcsSZIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIkx5Z2lhdmltYXMgcGFnYWwgY2VudHLEhSIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIkx5Z2lhdmltYXMgcGFnYWwgZGXFoWluxJkiLAotICAiSnVzdGlmeSBGdWxsIjogIkx5Z2l1b3RpIHBhc3RyYWlwxIUiLAotICAiT3JkZXJlZCBMaXN0IjogIk51bWVydW90YXMgc8SFcmHFoWFzIiwKLSAgIkJ1bGxldGVkIExpc3QiOiAiU3XFvmVua2xpbnRhcyBzxIVyYcWhYXMiLAotICAiRGVjcmVhc2UgSW5kZW50IjogIlN1bWHFvmludGkgcGFyYcWhdMSZIiwKLSAgIkluY3JlYXNlIEluZGVudCI6ICJQYWRpZGludGkgcGFyYcWhdMSZIiwKLSAgIkZvbnQgQ29sb3IiOiAixaByaWZ0byBzcGFsdmEiLAotICAiQmFja2dyb3VuZCBDb2xvciI6ICJGb25vIHNwYWx2YSIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXpvbnRhbGkgbGluaWphIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICLErnRlcnB0aSBudW9yb2TEhSIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIsSudGVycHRpIHBhdmVpa3NsaXVrxIUiLAotICAiSW5zZXJ0IFRhYmxlIjogIsSudGVycHRpIGxlbnRlbMSZIiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJQZXJqdW5ndGkgxK8gSFRNTC9XWVNJV1lHIiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIknFoXBsxJdzdGFzIHJlZGFnYXZpbW8gZWtyYW5hcy9FbmxhcmdlIEVkaXRvciIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICJBcGllIHJlZGFrdG9yacWzIiwKLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIlBhZ2FsYmEgbmF1ZG9qYW50IHJlZGFrdG9yacWzIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiRGFiYXJ0aW5pcyBzdGlsaXVzIiwKLSAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkF0xaFhdWtpYSBwYXNrdXRpbmkgasWrc8WzIHZlaWtzbcSFIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlBha2FydG9qYSBwYXNrdXRpbsSvIGF0xaFhdWt0xIUgasWrc8WzIHZlaWtzbcSFIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiScWha2lycHRpIiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGlqdW90aSIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICLErnRlcnB0aSIsCi0gICJPSyI6ICJPSyIsCi0gICJDYW5jZWwiOiAiQXTFoWF1a3RpIiwKLSAgIlBhdGgiOiAiS2VsaWFzIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJKxatzIGVzZXRlIHRla3N0byByZcW+aW1lLiAgTmF1ZG9raXRlIFs8Pl0gbXlndHVrxIUgZ3LEr8W+aW11aSDEryBXWVNJV1lHLiIsCi0gICJUaGUgZnVsbCBzY3JlZW4gbW9kZSBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIEludGVybmV0IEV4cGxvcmVyLCBkdWUgdG8gYnJvd3NlciBidWdzIHRoYXQgd2Ugd2VyZW4iOiAiVGhlIGZ1bGwgc2NyZWVuIG1vZGUgaXMga25vd24gdG8gY2F1c2UgcHJvYmxlbXMgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciwgZHVlIHRvIGJyb3dzZXIgYnVncyB0aGF0IHdlIHdlcmVuIiwKLSAgIkNhbmNlbCI6ICJBdMWhYXVrdGkiLAotICAiSW5zZXJ0L01vZGlmeSBMaW5rIjogIklkxJd0aS9Nb2RpZmlrdW90aSIsCi0gICJOZXcgd2luZG93IChfYmxhbmspIjogIk5hdWphcyBsYW5nYXMgKF9ibGFuaykiLAotICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJOb25lICh1c2UgaW1wbGljaXQpIiwKLSAgIk90aGVyIjogIktpdGFzIiwKLSAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJTYW1lIGZyYW1lIChfc2VsZikiLAotICAiVGFyZ2V0OiI6ICJUYXJnZXQ6IiwKLSAgIlRpdGxlICh0b29sdGlwKToiOiAiUGF2YWRpbmltYXMgKHRvb2x0aXApOiIsCi0gICJUb3AgZnJhbWUgKF90b3ApIjogIlRvcCBmcmFtZSAoX3RvcCkiLAotICAiVVJMOiI6ICJVUkw6IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJKdXMgcHJpdmFsb3RlIG51cm9keXRpIFVSTCDEryBrdXJpIHJvZG8gxaFpdMSFIG51b3JvZGEiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9sdi5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2x2LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDBiNGU3Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL2x2LmpzCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogImx2IiwgRU5DT0RJTkc6IFVURi04Ci0vLyBBdXRob3I6IE1paGFpIEJhem9uLCBodHRwOi8vZHluYXJjaC5jb20vbWlzaG9vCi0vLyBUcmFuc2xhdGVkIGJ5OiBKYW5pcyBLbGF2aW5zLCA8amFuaXMua2xhdmluc0BkZXZpYS5sdj4KLQotewotICAiQm9sZCI6ICJUcmVrbmllbSBidXJ0aWVtIiwKLSAgIkl0YWxpYyI6ICJLdXJz7nbiIiwKLSAgIlVuZGVybGluZSI6ICJQYXN27nRyb3RzIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiUOJyc3budHJvdHMiLAotICAiU3Vic2NyaXB0IjogIk5vdmlldG90IHplbSByaW5kYXMiLAotICAiU3VwZXJzY3JpcHQiOiAiTm92aWV0b3QgdmlycyByaW5kYXMiLAotICAiSnVzdGlmeSBMZWZ0IjogIkl6bO5kemlu4nQgcGEga3JlaXNpIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIkl6bO5kemlu4nQgY2VudHLiIiwKLSAgIkp1c3RpZnkgUmlnaHQiOiAiSXps7mR6aW7idCBwYSBsYWJpIiwKLSAgIkp1c3RpZnkgRnVsbCI6ICJJemzuZHppbuJ0IHBhIHZpc3UgbGFwdSIsCi0gICJPcmRlcmVkIExpc3QiOiAiTnVtdXLndHMgc2FyYWtzdHMiLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJTYXJha3N0cyIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiU2FtYXppbuJ0IGF0a+JwaSIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAiUGFsaWVsaW7idCBhdGvicGkiLAotICAiRm9udCBDb2xvciI6ICJCdXJ0dSBrcuJzYSIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIkZvbmEga3Lic2EiLAotICAiSG9yaXpvbnRhbCBSdWxlIjogIkhvcml6b2504mxhIGF0ZGFs7nTianN27nRyYSIsCi0gICJJbnNlcnQgV2ViIExpbmsiOiAiSWV2aWV0b3QgaGlwZXJzYWl0aSIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIklldmlldG90IGF0dOdsdSIsCi0gICJJbnNlcnQgVGFibGUiOiAiSWV2aWV0b3QgdGFidWx1IiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJTa2F07nQgSFRNTCBrb2R1IiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIlBhbGllbGlu4nQgUmVkaezndOJqdSIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICJQYXIg8G8gcmVkaezndOJqdSIsCi0gICJIZWxwIHVzaW5nIGVkaXRvciI6ICJSZWRp7Od04mphIHBhbO5ncyIsCi0gICJDdXJyZW50IHN0eWxlIjogIlBhdHJlaXrnamFpcyBzdGlscyIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJBdGNlbHQgcOdk52pvIGRhcmLuYnUiLAotICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQXRr4nJ0b3QgcOdk52pvIGRhcmLuYnUiLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJJemdyaWV6dCBpZXrubed0byIsCi0gICJDb3B5IHNlbGVjdGlvbiI6ICJLb3DndCBpZXrubed0byIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJJZXZpZXRvdCBpZXrubed0byIsCi0gICJPSyI6ICJMYWJpIiwKLSAgIkNhbmNlbCI6ICJBdGNlbHQiLAotICAiUGF0aCI6ICJDZe/wIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJK+3MgcGF0bGFiYW4gZGFyYm9qYXRpZXMgVEVLU1RBIFJF3s5Nwi4gTGFpIHDicmlldHUgYXRwYWth7yB1eiBHUkFGSVNLTyBSRd7OTVUgKFdZU0lXSUcpLCBsaWV0b2ppZXQgWzw+XSBwb2d1LiIKLX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvbmIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2OTQzNzkuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvbmIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotCi0vLyBMQU5HOiAibmIiLCBFTkNPRElORzogVVRGLTgKLQotLy8gLSB0cmFuc2xhdGVkIGJ5IHNlczxzZXNAb25saW5lLm5vPgotLy8gQWRkaXRpb25hbCB0cmFuc2xhdGlvbnMgYnkgSMOldmFyZCBXaWd0aWwgPGhhdmFyZHdAZXh0ZW5kLm5vPgotLy8gQWRkaXRpb25hbCB0cmFuc2xhdGlvbnMgYnkgS2ltIFN0ZWluaGF1ZyA8a2ltQHN0ZWluaGF1Zy5jb20+Ci0KLXsKLSAgIkJvbGQiOiAiRmV0IiwKLSAgIkl0YWxpYyI6ICJLdXJzaXYiLAotICAiVW5kZXJsaW5lIjogIlVuZGVyc3RyZWtldCIsCi0gICJTdHJpa2V0aHJvdWdoIjogIkdqZW5ub21zdHJla2V0IiwKLSAgIlN1YnNjcmlwdCI6ICJOZWRzZW5rZXQiLAotICAiU3VwZXJzY3JpcHQiOiAiT3BwaMO4eWV0IiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJWZW5zdHJlanVzdGVyIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIk1pZHRqdXN0ZXIiLAotICAiSnVzdGlmeSBSaWdodCI6ICJIw7h5cmVqdXN0ZXIiLAotICAiSnVzdGlmeSBGdWxsIjogIkJsb2tranVzdGVyIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJOdW1tZXJlcnQgbGlzdGUiLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJQdW5rdGxpc3RlIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICJSZWR1c2VyIGlubnJ5a2siLAotICAiSW5jcmVhc2UgSW5kZW50IjogIsOYa2UgaW5ucnlrayIsCi0gICJGb250IENvbG9yIjogIlRla3N0ZmFyZ2UiLAotICAiQmFja2dyb3VuZCBDb2xvciI6ICJCYWtncnVuZHNmYXJnZSIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiVmFubnJldHQgbGluamUiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIkxhZyBsZW5rZSIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIlNldHQgaW5uIGJpbGRlIiwKLSAgIkluc2VydCBUYWJsZSI6ICJTZXR0IGlubiB0YWJlbGwiLAotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIlZpcyBraWxkZWtvZGUiLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiVmlzIGkgZWdldCB2aW5kdSIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICJPbSBkZW5uZSBlZGl0b3IiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiSGplbHAiLAotICAiQ3VycmVudCBzdHlsZSI6ICJOw6V2w6ZyZW5kZSBzdGlsIiwKLSAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkFuZ3JlciBzaXN0ZSByZWRpZ2VyaW5nIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkdqw7hyIG9tIHNpc3RlIGFuZ3JpbmciLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJLbGlwcCB1dCBvbXLDpWRlIiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGllciBvbXLDpWRlIiwKLSAgIlNhdmUgYXMiOiAiTGFncmUgc29tIiwKLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIkxpbSBpbm4iLAotICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiRmplcm4gZm9ybWF0dGVyaW5nIiwKLSAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkZyYSB2ZW5zdHJlIG1vdCBow7h5cmUiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiRnJhIGjDuHlyZSBtb3QgdmVuc3RyZSIsCi0gICJJbnNlcnQvT3ZlcndyaXRlIjogIlNldHQgaW5uL092ZXJza3JpdiIsCi0gICJPSyI6ICJPSyIsCi0gICJDYW5jZWwiOiAiQXZicnl0IiwKLSAgIlBhdGgiOiAiVGVrc3R2ZWxnZXIiLAotICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIkR1IGVyIGkgdGVrc3Rtb2R1cyAgS2xpa2sgcMOlIFs8Pl0gZm9yIMOlIGfDpSB0aWxiYWtlIHRpbCBXWVNJV0lHLiIsCi0gICJUaGUgZnVsbCBzY3JlZW4gbW9kZSBpcyBrbm93biB0byBjYXVzZSBwcm9ibGVtcyB3aXRoIEludGVybmV0IEV4cGxvcmVyLCBkdWUgdG8gYnJvd3NlciBidWdzIHRoYXQgd2Ugd2VyZW4iOiAiVmlzbmluZyBpIGVnZXQgdmluZHUgaGFyIGtqZW50ZSBwcm9ibGVtZXIgbWVkIEludGVybmV0IEV4cGxvcmVyLCBww6UgZ3J1bm4gYXYgcHJvYmxlbWVyIG1lZCBkZW5uZSBuZXR0bGVzZXJlbi4gTXVsaWdlIHByb2JsZW1lciBlciBldCB1cnlkZGlnIHNramVybWJpbGRlLCBtYW5nbGVuZGUgZWRpdG9yZnVua3Nqb25lciBvZy9lbGxlciBhdCBuZXR0bGVzZXJlbiBjcmFzaGVyLiBIdmlzIGR1IGJydWtlciBXaW5kb3dzIDk1IGVsbGVyIFdpbmRvd3MgOTggZXIgZGV0IG9nc8OlIG11bGlnaGV0ZXIgZm9yIGF0IFdpbmRvd3Mgd2lsbCBjcmFzaGUuXG5cblRyeWtrICIsCi0gICJDYW5jZWwiOiAiQXZicnl0IiwKLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJSZWRpZ2VyIGxlbmtlIiwKLSAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiRWdldCB2aW5kdSAoX2JsYW5rKSIsCi0gICJOb25lICh1c2UgaW1wbGljaXQpIjogIkluZ2VuIChicnVrIHN0YW5kYXJkaW5uc3RpbGxpbmcpIiwKLSAgIk90aGVyIjogIkFubmVuIiwKLSAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJTYW1tZSByYW1tZSAoX3NlbGYpIiwKLSAgIlRhcmdldDoiOiAiTcOlbDoiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXR0ZWwgKHRvb2x0aXApOiIsCi0gICJUb3AgZnJhbWUgKF90b3ApIjogIlRvcHByYW1tZSAoX3RvcCkiLAotICAiVVJMOiI6ICJBZHJlc3NlOiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiRHUgbcOlIHNrcml2ZSBpbm4gZW4gYWRyZXNzZSBzb20gZGVubmUgbGVua2VuIHNrYWwgcGVrZSB0aWwiLAotICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiRmplcm5lIGlubGluZSBmb250IHNwZXNpZmlrYXNqb25lciIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiw5huc2tlciBkdSDDpSBmamVybmUgc2tyaWZ0dHlwZXIiLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiw5huc2tlciBkdSDDpSBmamVybmUgc2tyaWZ0IHN0w7hycmVsc2VyIiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgY29sb3Vycz8iOiAiw5huc2tlciBkdSDDpSBmamVybmUgZmFyZ2VyIHDDpSBza3JpZnRlbiIsCi0gICJQcmludCBkb2N1bWVudCI6ICJTa3JpdiB1dCBkb2t1bWVudGV0IiwKLSAgIlNwbGl0IEJsb2NrIjogIlNlcGVyYXNqb25zYmxva2siLAotICAiVG9nZ2xlIEJvcmRlcnMiOiAiU2tydSBhdi9ww6UgaGplbHBlbGluamVyIHDDpSB0YWJlbGxlciIsCi0gICJTZWxlY3QgYWxsIjogIk1lcmsgYWx0IiwKLSAgLy8gTG9hZGluZyBtZXNzYWdlcwotICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQgISI6ICJXWVNJV1lHIGxhc3RlciwgdmVubmxpZ3N0IHZlbnQhIiwKLSAgIkNvbnN0cnVjdGluZyBtYWluIG9iamVjdCI6ICJWZW5ubGlnc3QgdmVudCIsCi0gICJDcmVhdGUgVG9vbGJhciI6ICJMYWcgdmVya3TDuHlsaW5qZSIsCi0gICJSZWdpc3RlciBwYW5lbCByaWdodCI6ICJSZWdpc3RyZXIgaMO4eXJlcGFuZWwiLAotICAiUmVnaXN0ZXIgcGFuZWwgbGVmdCI6ICJSZWdpc3RyZXIgdmVuc3RyZXBhbmVsIiwKLSAgIlJlZ2lzdGVyIHBhbmVsIHRvcCI6ICJSZWdpc3RyZXIgdG9wcGFuZWwiLAotICAiUmVnaXN0ZXIgcGFuZWwgYm90dG9tIjogIlJlZ2lzdHJlciBidW5ucGFuZWwiCi0KLX07CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL25sLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzA0MmNhLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL25sLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogIm5sIiwgRU5DT0RJTkc6IFVURi04Ci0vLyBBdXRob3I6IE1pY2hlbCBXZWVnZWVyaW5rIChpbmZvQG1tYy1zaG9wLm5sKSwgaHR0cDovL21tYy1zaG9wLm5sCi0KLS8vIEZPUiBUUkFOU0xBVE9SUzoKLS8vCi0vLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKLS8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKLS8vCi0vLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKLS8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKLS8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKLQotewotICAiQm9sZCI6ICJWZXQiLAotICAiSXRhbGljIjogIkN1cnNpZWYiLAotICAiVW5kZXJsaW5lIjogIk9uZGVyc3RyZXBlbiIsCi0gICJTdHJpa2V0aHJvdWdoIjogIkRvb3JoYWxlbiIsCi0gICJTdWJzY3JpcHQiOiAiU3Vic2NyaXB0IiwKLSAgIlN1cGVyc2NyaXB0IjogIlN1cGVyc2NyaXB0IiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJMaW5rcyB1aXRsaWpuZW4iLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiQ2VudHJlcmVuIiwKLSAgIkp1c3RpZnkgUmlnaHQiOiAiUmVjaHRzIHVpdGxpam5lbiIsCi0gICJKdXN0aWZ5IEZ1bGwiOiAiVWl0dnVsbGVuIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJOdW1tZXJpbmciLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJPcHNvbW1pbmdzdGVrZW5zIiwKLSAgIkRlY3JlYXNlIEluZGVudCI6ICJJbnNwcmluZ2luZyB2ZXJrbGVpbmVuIiwKLSAgIkluY3JlYXNlIEluZGVudCI6ICJJbnNwcmluZ2luZyB2ZXJncm90ZW4iLAotICAiRm9udCBDb2xvciI6ICJUZWtzdGtsZXVyIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiQWNodGVyZ3JvbmRrbGV1ciIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiSG9yaXpvbnRhbGUgbGlqbiIsCi0gICJJbnNlcnQgV2ViIExpbmsiOiAiSHlwZXJsaW5rIGludm9lZ2VuL2FhbnBhc3NlbiIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIkFmYmVlbGRpbmcgaW52b2VnZW4vYWFucGFzc2VuIiwKLSAgIkluc2VydCBUYWJsZSI6ICJUYWJlbCBpbnZvZWdlbiIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiSFRNTCBicm9uY29kZSIsCi0gICJFbmxhcmdlIEVkaXRvciI6ICJWZXJncm9vdCBFZGl0b3IiLAotICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiT3ZlciBkZXplIGVkaXRvciIsCi0gICJIZWxwIHVzaW5nIGVkaXRvciI6ICJYaW5oYSBoZWxwIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiSHVpZGlnZSBzdGlqbCIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJPbmdlZGFhbiBtYWtlbiIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJIZXJoYWxlbiIsCi0gICJDdXQgc2VsZWN0aW9uIjogIktuaXBwZW4iLAotICAiQ29weSBzZWxlY3Rpb24iOiAiS29waT9yZW4iLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiUGxha2tlbiIsCi0gICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICJUZWtzdHJpY2h0aW5nIGxpbmtzIG5hYXIgcmVjaHRzIiwKLSAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIlRla3N0cmljaHRpbmcgcmVjaHRzIG5hYXIgbGlua3MiLAotICAiT0siOiAiT0siLAotICAiQ2FuY2VsIjogIkFubnVsZXJlbiIsCi0gICJQYXRoIjogIlBhZCIsCi0gICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiSmUgYmVudCBpbiBURUtTVC1tb2RlLiBHZWJydWlrIGRlIFs8Pl0ga25vcCBvbSB0ZXJ1ZyB0ZSBrZXJlbiBuYWFyIFdZU0lXWUctbW9kZS4iLAotICAiVGhlIGZ1bGwgc2NyZWVuIG1vZGUgaXMga25vd24gdG8gY2F1c2UgcHJvYmxlbXMgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciwgZHVlIHRvIGJyb3dzZXIgYnVncyB0aGF0IHdlIHdlcmVuIjogIkZ1bGxzY3JlZW4tbW9kZSB2ZXJvb3J6YWFrdCBwcm9ibGVtZW4gbWV0IEludGVybmV0IEV4cGxvcmVyIGRvb3IgYnVncyBpbiBkZSB3ZWJicm93c2VyIGRpZSB3ZSBuaWV0IGt1bm5lbiBvbXplaWxlbi4gSGllcmRvb3Iga3VubmVuIGRlIHZvbGdlbmRlIGVmZmVjdGVuIG9wdHJlZGVuOiB2ZXJrbm9laWRlIHRla3N0ZW4sIGVlbiB2ZXJsaWVzIGFhbiBlZGl0b3ItZnVuY3Rpb25hbGl0ZWl0IGVuL29mIHdpbGxla2V1cmlnIHZhc3Rsb3BlbiB2YW4gZGUgd2ViYnJvd3Nlci4gQWxzIHUgV2luZG93cyA5NSBvZiA5OCBnZWJydWlrdCwgaXMgaGV0IHplZXIgd2FhcnNjaGlqbmxpamsgZGF0IHUgZWVuIGFsZ2VtZW5lIGJlc2NoZXJtaW5nc2ZvdXQgKCIsCi0gICJDYW5jZWwiOiAiQW5udWxlcmVuIiwKLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJIeXBlcmxpbmsgaW52b2VnZW4vYWFucGFzc2VuIiwKLSAgIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTmlldXcgdmVuc3RlciAoX2JsYW5rKSIsCi0gICJOb25lICh1c2UgaW1wbGljaXQpIjogIkdlZW4iLAotICAiT3RoZXIiOiAiQW5kZXIiLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlplbGZkZSBmcmFtZSAoX3NlbGYpIiwKLSAgIlRhcmdldDoiOiAiRG9lbDoiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXRlbCAodG9vbHRpcCk6IiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiQm92ZW5zdGUgZnJhbWUgKF90b3ApIiwKLSAgIlVSTDoiOiAiVVJMOiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiR2VlZiBkZSBVUkwgaW4gd2FhciBkZSBsaW5rIG5hYXIgdmVyd2lqc3QiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3BsLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGYxNjk5Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3BsLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0vLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKLS8vIHRyYW5zbGF0ZWQ6IEtyenlzenRvZiBLb3Rvd2ljeiwgaHR0cDovL3d3dy5lc2tvdC5rcmFrb3cucGwvcG9ydGZvbGlvLywga290b0B3ZWJ3b3JrZXJzLnBsCi17Ci0gICJCb2xkIjogIlBvZ3J1YmllbmllIiwKLSAgIkl0YWxpYyI6ICJQb2NoeWxlbmllIiwKLSAgIlVuZGVybGluZSI6ICJQb2RrcmXFm2xlbmllIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiUHJ6ZWtyZcWbbGVuaWUiLAotICAiU3Vic2NyaXB0IjogIkluZGVrcyBkb2xueSIsCi0gICJTdXBlcnNjcmlwdCI6ICJJbmRla3MgZ8Ozcm55IiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJXeXLDs3duYWogZG8gbGV3ZWoiLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiV3nFm3JvZGt1aiIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIld5csOzd25haiBkbyBwcmF3ZWoiLAotICAiSnVzdGlmeSBGdWxsIjogIld5anVzdHVqIiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJOdW1lcm93YW5pZSIsCi0gICJCdWxsZXRlZCBMaXN0IjogIld5cHVua3Rvd2FuaWUiLAotICAiRGVjcmVhc2UgSW5kZW50IjogIlptbmllanN6IHdjacSZY2llIiwKLSAgIkluY3JlYXNlIEluZGVudCI6ICJad2nEmWtzeiB3Y2nEmWNpZSIsCi0gICJGb250IENvbG9yIjogIktvbG9yIGN6Y2lvbmtpIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiS29sb3IgdMWCYSIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiTGluaWEgcG96aW9tYSIsCi0gICJJbnNlcnQgV2ViIExpbmsiOiAiV3N0YXcgYWRyZXMgc2llY2kgV2ViIiwKLSAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiV3N0YXcgb2JyYXoiLAotICAiSW5zZXJ0IFRhYmxlIjogIldzdGF3IHRhYmVsxJkiLAotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIkVkeWNqYSBXWVNJV1lHL3cgxbpyw7NkbGUgc3Ryb255IiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIlBlxYJueSBla3JhbiIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICJJbmZvcm1hY2plIG8gdHltIGVkeXRvcnplIiwKLSAgIkhlbHAgdXNpbmcgZWRpdG9yIjogIlBvbW9jIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiT2JlY255IHN0eWwiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiQ29mYSBvc3RhdG5pbyB3eWtvbmFuZSBwb2xlY2VuaWUiLAotICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiUG9uYXdpYSBvc3RhdG5pbyB3eWtvbmFuZSBwb2xlY2VuaWUiLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJXeWNpbmEgemF6bmFjemVuaWUgZG8gc2Nob3drYSIsCi0gICJDb3B5IHNlbGVjdGlvbiI6ICJLb3BpdWplIHphem5hY3plbmllIGRvIHNjaG93a2EiLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAiV2tsZWphIHphd2FydG/Fm8SHIHNjaG93a2EiLAotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiS2llcnVuZWsgdGVrc3R1IGxld28tcHJhd28iLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiS2llcnVuZWsgdGVrc3R1IHByYXdvLWxld28iLAotICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiVXN1xYQgZm9ybWF0b3dhbmllIiwKLSAgIlNlbGVjdCBhbGwiOiAiWmF6bmFjeiB3c3p5c3RrbyIsCi0gICJQcmludCBkb2N1bWVudCI6ICJEcnVrdWogZG9rdW1lbnQiLAotICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICJXeWN6ecWbxIcgdGFnaSBNU09mZmljZSIsCi0gICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJXeWNpc3ogYmV6cG/Fm3JlZG5pZSBwcnp5cGlzYW5pYSBjemNpb25layIsCi0gICJTcGxpdCBCbG9jayI6ICJQb2R6aWVsIGJsb2siLAotICAiVG9nZ2xlIEJvcmRlcnMiOiAiV8WCxIVjeiAvIHd5xYLEhWN6IHJhbWtpIiwKLQotICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IEZvcm1hdCAmIzgyMTI7IiwKLSAgIkhlYWRpbmcgMSI6ICJOYWfFgsOzd2VrIDEiLAotICAiSGVhZGluZyAyIjogIk5hZ8WCw7N3ZWsgMiIsCi0gICJIZWFkaW5nIDMiOiAiTmFnxYLDs3dlayAzIiwKLSAgIkhlYWRpbmcgNCI6ICJOYWfFgsOzd2VrIDQiLAotICAiSGVhZGluZyA1IjogIk5hZ8WCw7N3ZWsgNSIsCi0gICJIZWFkaW5nIDYiOiAiTmFnxYLDs3dlayA2IiwKLSAgIk5vcm1hbCI6ICJOb3JtYWxueSIsCi0gICJBZGRyZXNzIjogIkFkcmVzIiwKLSAgIkZvcm1hdHRlZCI6ICJQcmVmb3JtYXRvd2FueSIsCi0KLSAgLy9kaWFsb2dzCi0gICJPSyI6ICJPSyIsCi0gICJDYW5jZWwiOiAiQW51bHVqIiwKLSAgIlBhdGgiOiAixZpjaWXFvGthIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJKZXN0ZcWbIHcgVFJZQklFIFRFS1NUT1dZTS4gVcW8eWogcHJ6eWNpc2t1IFs8Pl0sIGFieSBwcnplxYLEhWN6ecSHIHNpxJkgbmEgdHJ5YiBXWVNJV1lHLiIsCi0gICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIlByenljaXNrIFdrbGVqIG5pZSBkemlhxYJhIHcgcHJ6ZWdsxIVkYXJrYWNoIE1vemlsbGEgeiB1d2FnaSBuYSB1c3Rhd2llbmlhIGJlenBpZWN6ZcWEc3R3YS4gTmFjacWbbmlqIENSVEwtViwgYWJ5IHdrbGVpxIcgemF3YXJ0b8WbxIcgc2Nob3drYS4iLAotCi0gICJBbGlnbm1lbnQ6IjogIld5csOzd25hbmllOiIsCi0gICJOb3Qgc2V0IjogIk5pZSB1c3Rhd2lvbmUiLAotICAiTGVmdCI6ICJEbyBsZXdlaiIsCi0gICJSaWdodCI6ICJEbyBwcmF3ZWoiLAotICAiVGV4dHRvcCI6ICJHw7NyYSB0ZWtzdHUiLAotICAiQWJzbWlkZGxlIjogIkFicy4gxZtyb2RlayIsCi0gICJCYXNlbGluZSI6ICJMaW5pYSBiYXpvd2EiLAotICAiQWJzYm90dG9tIjogIkFicy4gZMOzxYIiLAotICAiQm90dG9tIjogIkTDs8WCIiwKLSAgIk1pZGRsZSI6ICLFmnJvZGVrIiwKLSAgIlRvcCI6ICJHw7NyYSIsCi0KLSAgIkxheW91dCI6ICJMYXlvdXQiLAotICAiU3BhY2luZyI6ICJTcGFjam93YW5pZSIsCi0gICJIb3Jpem9udGFsOiI6ICJQb3ppb21lOiIsCi0gICJIb3Jpem9udGFsIHBhZGRpbmciOiAiV2NpxJljaWUgcG96aW9tZSIsCi0gICJWZXJ0aWNhbDoiOiAiUGlvbm93ZToiLAotICAiVmVydGljYWwgcGFkZGluZyI6ICJXY2nEmWNpZSBwaW9ub3dlIiwKLSAgIkJvcmRlciB0aGlja25lc3M6IjogIkdydWJvxZvEhyBvYnJhbW93YW5pYToiLAotICAiTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlciI6ICJCZXogcmFtZWsgLSB6b3N0YXcgcHVzdGUiLAotCi0gIC8vSW5zZXJ0IExpbmsKLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJXc3Rhdy9lZHl0dWogb2Rub8WbbmlrIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiQnJhayIsCi0gICJOZXcgd2luZG93IChfYmxhbmspIjogIk5vd2Ugb2tubyAoX2JsYW5rKSIsCi0gICJTYW1lIGZyYW1lIChfc2VsZikiOiAiVGEgc2FtYSByYW1rYSAoX3NlbGYpIiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiR8WCw7N3bmEgcmFta2EgKF90b3ApIiwKLSAgIk90aGVyIjogIklubmUiLAotICAiVGFyZ2V0OiI6ICJPa25vIGRvY2Vsb3dlOiIsCi0gICJUaXRsZSAodG9vbHRpcCk6IjogIlR5dHXFgiAodG9vbHRpcCk6IiwKLSAgIlVSTDoiOiAiVVJMOiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAiTXVzaXN6IHBvZGHEhyBVUkwsIG5hIGpha2kgYsSZZHppZSB3c2thenl3YcWCIG9kbm/Fm25payIsCi0KLSAgLy8gSW5zZXJ0IFRhYmxlCi0gICJJbnNlcnQgVGFibGUiOiAiV3N0YXcgdGFiZWzEmSIsCi0gICJSb3dzOiI6ICJXaWVyc3p5OiIsCi0gICJOdW1iZXIgb2Ygcm93cyI6ICJMaWN6YmEgd2llcnN6eSIsCi0gICJDb2xzOiI6ICJLb2x1bW46IiwKLSAgIk51bWJlciBvZiBjb2x1bW5zIjogIkxpY3piYSBrb2x1bW4iLAotICAiV2lkdGg6IjogIlN6ZXJva2/Fm8SHOiIsCi0gICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiU3plcm9rb8WbxIcgdGFiZWxpIiwKLSAgIlBlcmNlbnQiOiAiUHJvY2VudCIsCi0gICJQaXhlbHMiOiAiUGlrc2VsaSIsCi0gICJFbSI6ICJFbSIsCi0gICJXaWR0aCB1bml0IjogIkplZG5vc3RrYSIsCi0gICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIktvbHVtbnkgbyBzdGHFgmVqIHN6ZXJva2/Fm2NpIiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiUG96eWNqb25vd2FuaWUgdGFiZWxpIiwKLSAgIkNlbGwgc3BhY2luZzoiOiAiT2RzdMSZcCBrb23Ds3JlazoiLAotICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICJQcnplc3RyemXFhCBwb21pxJlkenkga29tw7Nya2FtaSIsCi0gICJDZWxsIHBhZGRpbmc6IjogIldjacSZY2llIGtvbcOzcmVrOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIlByemVzdHJ6ZcWEIG1pxJlkenkga3Jhd8SZZHppxIUgYSB6YXdhcnRvxZtjacSFIGtvbcOzcmtpIiwKLQotICAvLyBJbnNlcnQgSW1hZ2UKLSAgIkluc2VydCBJbWFnZSI6ICJXc3RhdyBvYnJhemVrIiwKLSAgIkltYWdlIFVSTDoiOiAiVVJMIG9icmF6a2E6IiwKLSAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICJQb2RhaiBVUkwgb2JyYXprYSIsCi0gICJQcmV2aWV3IjogIlBvZGdsxIVkIiwKLSAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICJQb2RnbMSFZCBvYnJhemthIHcgbm93eW0gb2tuaWUiLAotICAiQWx0ZXJuYXRlIHRleHQ6IjogIlRla3N0IGFsdGVybmF0eXdueToiLAotICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAiRGxhIHByemVnbMSFZGFyZWssIGt0w7NyZSBuaWUgb2JzxYJ1Z3VqxIUgb2JyYXprw7N3IiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG96eWNqb25vd2FuaWUgb2JyYXprYSIsCi0gICJJbWFnZSBQcmV2aWV3OiI6ICJQb2RnbMSFZCBvYnJhemthOiIKLX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvcHRfYnIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyOTg3M2YuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvcHRfYnIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxODQgKzAsMCBAQAot77u/Ly8gSTE4TiBjb25zdGFudHMKLS8vCi0vLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKLS8vIFBvcnR1Z3Vlc2UgQnJhemlsaWFuIFRyYW5zbGF0aW9uCi0vLwotLy8gSW5pdGlhbCBiYXNpYyB3b3JrIGJ5IEFsZXggUGlheiA8d2VibWFzdGVyQGdsb2JhbG1hcC5jb20+Ci0vLwotLy8gQXV0aG9yOiBNYXJjaW8gQmFyYm9zYSwgPG1hcmNpb0BtcGcuY29tLmJyPgotLy8gTVNOOiB0b21hcnNoYWxsQG1zbi5jb20gLSBJQ1E6IDY5NDE5OTMzCi0vLyBTaXRlOiBodHRwOi8vd3d3Lm1wZy5jb20uYnIKLS8vCi0vLyBMYXN0IHJldmlzaW9uOiAwNiBzZXB0ZW1iZXIgMjAwNwotLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgotLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCi0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgotLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpCi17Ci0gICJBYm91dCI6ICJTb2JyZSIsCi0gICJBYm91dCBYaW5oYSI6ICJTb2JyZSBvIFhpbmhhIiwKLSAgIkFic2JvdHRvbSI6ICJJbmZlcmlvciBhYnNvbHV0byIsCi0gICJBYnNtaWRkbGUiOiAiTWVpbyBhYnNvbHV0byIsCi0gICJBbGlnbm1lbnQ6IjogIkFsaW5oYW1lbnRvIiwKLSAgIkFsdGVybmF0ZSB0ZXh0OiI6ICJUZXh0byBhbHRlcm5hdGl2byIsCi0gICJCYXNlbGluZSI6ICJMaW5oYSBiYXNlIiwKLSAgIkJvbGQiOiAiTmVncml0byIsCi0gICJCb3JkZXIgdGhpY2tuZXNzOiI6ICJFc3Blc3N1cmEgZGEgYm9yZGEiLAotICAiQm90dG9tIjogIkJvdMOjbyIsCi0gICJDVFJMLTAgKHplcm8pIjogIkNUUkwtMCAoemVybykiLAotICAiQ1RSTC0xIC4uIENUUkwtNiI6ICJDVFJMLTEgLi4gQ1RSTC02IiwKLSAgIkNUUkwtQSI6ICJDVFJMLUEiLAotICAiQ1RSTC1CIjogIkNUUkwtQiIsCi0gICJDVFJMLUMiOiAiQ1RSTC1DIiwKLSAgIkNUUkwtRSI6ICJDVFJMLUUiLAotICAiQ1RSTC1JIjogIkNUUkwtSSIsCi0gICJDVFJMLUoiOiAiQ1RSTC1KIiwKLSAgIkNUUkwtTCI6ICJDVFJMLUwiLAotICAiQ1RSTC1OIjogIkNUUkwtTiIsCi0gICJDVFJMLVIiOiAiQ1RSTC1SIiwKLSAgIkNUUkwtUyI6ICJDVFJMLVMiLAotICAiQ1RSTC1VIjogIkNUUkwtVSIsCi0gICJDVFJMLVYiOiAiQ1RSTC1WIiwKLSAgIkNUUkwtWCI6ICJDVFJMLVgiLAotICAiQ1RSTC1ZIjogIkNUUkwtWSIsCi0gICJDVFJMLVoiOiAiQ1RSTC1aIiwKLSAgIkNhbmNlbCI6ICJDYW5jZWxhciIsCi0gICJDZWxsIHBhZGRpbmc6IjogIkVzcGHDp2FtZW50byBpbnRlcm5vIGRhIGPDqWx1bGE6IiwKLSAgIkNlbGwgc3BhY2luZzoiOiAiRXNwYcOnYW1lbnRvIGRhIGPDqWx1bGE6IiwKLSAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJMaW1wYXIgY29udGXDumRvIGNvcGlhZG8gZG8gV29yZCIsCi0gICJDbG9zZSI6ICJGZWNoYXIiLAotICAiQ29sbGFwc2UgYm9yZGVyczoiOiAiQm9yZGFzIGZlY2hhZGFzOiIsCi0gICJDb2xzOiI6ICJDb2x1bmFzOiIsCi0gICJDb25zdHJ1Y3Rpbmcgb2JqZWN0IjogIkNvbnN0cnVpbmRvIG9iamV0byIsCi0gICJDb3B5IHNlbGVjdGlvbiI6ICJDb3BpYXIgc2VsZcOnw6NvIiwKLSAgIkNyZWF0ZSBTdGF0dXNiYXIiOiAiQ3JpYXIgYmFycmEgZGUgaW5mb3JtYcOnw6NvIChzdGF0dXNiYXIpIiwKLSAgIkNyZWF0ZSBUb29sYmFyIjogIkNyaWFyIEJhcnJhIGRlIEZlcnJhbWVudGFzIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiRXN0aWxvIEF0dWFsIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiUmVjb3J0YXIgc2VsZcOnw6NvIiwKLSAgIkRldmVsb3BlciI6ICJEZXNlbnZvbHZlZG9yIiwKLSAgIkVOVEVSIjogIkVOVFJBUiIsCi0gICJFZGl0b3IgSGVscCI6ICJBanVkYSBkbyBFZGl0b3IiLAotICAiRW0iOiAiRW0iLAotICAiRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIjogIkVudHJlIGFxdWkgY29tIGEgVVJMIGRhIGltYWdlbSIsCi0gICJGaW5pc2hpbmciOiAiVGVybWluYW5kbyIsCi0gICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIkNvbHVuYXMgY29tIGxhcmd1cmEgZml4YSIsCi0gICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJQYXJhIG5hdmVnYWRvcmVzIHF1ZSBuw6NvIHN1cG9ydGFtIGltYWdlbnMiLAotICAiR2VuZXJhdGUgWGluaGEgZnJhbWV3b3JrIjogIkdlcmFyIMOBcmVhIGRlIFRyYWJhbGhvIGRvIFhpbmhhIiwKLSAgIkhlYWRpbmdzIjogIlTDrXR1bG9zIiwKLSAgIkhvcml6b250YWwgcGFkZGluZyI6ICJFc3Bhw6dhbWVudG8gaW50ZXJubyBob3Jpem9udGFsIiwKLSAgIkhvcml6b250YWw6IjogIkhvcml6b250YWw6IiwKLSAgIkltYWdlIFByZXZpZXc6IjogIlZpc3VhbGl6YcOnw6NvIGRhIEltYWdlbToiLAotICAiSW1hZ2UgVVJMOiI6ICJVUkwgZGEgaW1hZ2VtOiIsCi0gICJJbml0IGVkaXRvciBzaXplIjogIkluaWNpYXIgdGFtYW5obyBkbyBlZGl0b3IiLAotICAiSW5zZXJ0IEltYWdlIjogIkluc2VyaXIgSW1hZ2VtIiwKLSAgIkluc2VydCBUYWJsZSI6ICJJbnNlcmlyIFRhYmVsYSIsCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiSW5zZXJpci9Nb2RpZmljYXIgTGluayIsCi0gICJJdGFsaWMiOiAiSXTDoWxpY28iLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiSnVzdGlmaWNhciBDZW50cmFsaXphZG8iLAotICAiSnVzdGlmeSBGdWxsIjogIkp1c3RpZmljYXIgQ29tcGxldGFtZW50ZSIsCi0gICJKdXN0aWZ5IExlZnQiOiAiSnVzdGlmaWNhciDDoCBFc3F1ZXJkYSIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIkp1c3RpZmljYXIgw6AgRGlyZWl0YSIsCi0gICJLZXlib2FyZCBzaG9ydGN1dHMiOiAiQXRhbGhvcyBkZSBUZWNsYWRvIiwKLSAgIkxheW91dCI6ICJFc3F1ZW1hIiwKLSAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiRGVpeGUgZW0gYnJhbmNvIHBhcmEgbsOjbyB0ZXIgYm9yZGFzIiwKLSAgIkxlZnQiOiAiRXNxdWVyZGEiLAotICAiTGljZW5zZSI6ICJMaWNlbsOnYSIsCi0gICJMb2FkaW5nIGluIHByb2dyZXNzLiBQbGVhc2Ugd2FpdCEiOiAiQ2FycmVnYW1lbnRvIGVtIHByb2Nlc3NvLiBQb3IgZmF2b3IsIGFndWFyZGUhIiwKLSAgIk1pZGRsZSI6ICJNZWlvIiwKLSAgIk5hbWUiOiAiTm9tZSIsCi0gICJOZXcgd2luZG93IChfYmxhbmspIjogIk5vdmEgamFuZWxhIChfYmxhbmspIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiTmVuaHVtICh1c28gaW1wbGljaXRvKSIsCi0gICJOb3Qgc2V0IjogIk7Do28gZGVmaW5pZG8iLAotICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiTsO6bWVybyBkZSBjb2x1bmFzIiwKLSAgIk51bWJlciBvZiByb3dzIjogIk7Dum1lcm8gZGUgbGluaGFzIiwKLSAgIk9LIjogIk9LIiwKLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIkNvbGFyIGRhIMOBcmVhIGRlIFRyYW5zZmVyw6puY2lhIiwKLSAgIlBhdGgiOiAiQ2FtaW5obyIsCi0gICJQZXJjZW50IjogIlBvcmNlbnRhZ2VtIiwKLSAgIlBpeGVscyI6ICJQaXhlbHMiLAotICAiUGx1Z2lucyI6ICJQbHVnaW5zIiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zaWNpb25hbWVudG8gZGVzdGEgaW1hZ2VtIiwKLSAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiUG9zaWNpb25hbWVudG8gZGVzdGEgdGFiZWxhIiwKLSAgIlByZXZpZXciOiAiVmlzdWFsaXphw6fDo28iLAotICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlZpc3VhbGl6YXIgYSBpbWFnZW0gZW0gdW1hIG5vdmEgamFuZWxhIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlJlZmF6ZXIgc3VhIMO6bHRpbWEgYcOnw6NvIiwKLSAgIlJpZ2h0IjogIkRpcmVpdGEiLAotICAiUm93czoiOiAiTGluaGFzOiIsCi0gICJTSElGVC1FTlRFUiI6ICJTSElGVC1FTlRFUiIsCi0gICJTYW1lIGZyYW1lIChfc2VsZikiOiAiTWVzbW8gZnJhbWUgKF9zZWxmKSIsCi0gICJTZWxlY3QgQ29sb3IiOiAiU2VsZWNpb25hciBjw7RyIiwKLSAgIlNlbGVjdCBhbGwiOiAiU2VsZWNpb25hciB0dWRvIiwKLSAgIlNldCBmb3JtYXQgdG8gcGFyYWdyYXBoIjogIkRlZmluaXIgZm9ybWF0byBwYXJhIG8gcGFyw6FncmFmbyIsCi0gICJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIjogIkVzcGHDp28gZW50cmUgY8OpbHVsYXMgYWRqYWNlbnRlcyIsCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIkVzcGHDp28gZW50cmUgY29udGXDumRvIGUgYm9yZGEgbmEgY8OpbHVsYSIsCi0gICJTcGFjaW5nIjogIkVzcGHDp2FtZW50byIsCi0gICJTcG9uc29yZWQgYnkiOiAiUGF0cm9jaW5hZG8gcG9yIiwKLSAgIlN0cmlrZXRocm91Z2giOiAiVGFjaGFkbyIsCi0gICJUYXJnZXQ6IjogIkRlc3Rpbm86IiwKLSAgIlRleHR0b3AiOiAiVGV4dG8gbm8gdG9wbyIsCi0gICJUaGFua3MiOiAiQWdyYWRlY2ltZW50b3MiLAotICAiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIE1vemlsbGEgYmFzZWQgd2ViIGJyb3dzZXJzICh0ZWNobmljYWwgc2VjdXJpdHkgcmVhc29ucykuIFByZXNzIENUUkwtViBvbiB5b3VyIGtleWJvYXJkIHRvIHBhc3RlIGRpcmVjdGx5LiI6ICJPIGJvdMOjbyBDb2xhciBuw6NvIGZ1bmNpb25hIGVtIG5hdmVnYWRvcmVzIGJhc2VhZG8gbm8gTW96aWxsYSAocG9yIHJhesO1ZXMgdMOpY25pY2FzIGRlIHNlZ3VyYW7Dp2EpLiBQcmVzc2lvbmUgQ1RSTC1WIG5vIHNldSB0ZWNsYWRvIHBhcmEgY29sYXIgZGlyZXRhbWVudGUuIiwKLSAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICJFc3RlIGVkaXRvciBmb3JuZWNlIGEgc2VndWludGUgY29tYmluYcOnw6NvIGRlIHRlY2xhczoiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUw610dWxvICh0b29sdGlwKSIsCi0gICJUb3AiOiAiVG9wbyIsCi0gICJUb3AgZnJhbWUgKF90b3ApIjogIkZyYW1lIG5vIHRvcG8gKF90b3ApIiwKLSAgIlVSTDoiOiAiVVJMOiIsCi0gICJVbmRlcmxpbmUiOiAiU3VibGluaGFkbyIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJEZXNmYXplciBzdWEgw7psdGltYSBhw6fDo28iLAotICAiVmVyc2lvbiI6ICJWZXJzw6NvIiwKLSAgIlZlcnRpY2FsIHBhZGRpbmciOiAiRXNwYcOnYW1lbnRvIGludGVybm8gdmVydGljYWwiLAotICAiVmVydGljYWw6IjogIlZlcnRpY2FsOiIsCi0gICJXaWR0aCBvZiB0aGUgdGFibGUiOiAiTGFyZ3VyYW4gZGEgdGFiZWxhIiwKLSAgIldpZHRoIHVuaXQiOiAiVW5pZGFkZSBkZSBsYXJndXJhIiwKLSAgIldpZHRoOiI6ICJMYXJndXJhOiIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIkRlc2VqYSBsaW1wYXIgYXMgY29yZXMgZGUgZm9udGUiLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBzaXplcz8iOiAiRGVzZWphIGxpbXBhciBvcyB0YW1hbmhvcyBkZSBmb250ZSIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAiRGVzZWphIGxpbXBhciBvcyB0aXBvcyBkZSBmb250ZSIsCi0gICJYaW5oYSBIZWxwIjogIkFqdWRhIGRvIFhpbmhhIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJWb2PDqiBlc3TDoSBubyBNT0RPIFRFWFRPLiAgVXNlIG8gYm90w6NvIFs8Pl0gcGFyYSBtdWRhciBwYXJhIG8gbW9kbyBkZSBWaXN1YWxpemHDp8OjbyAoV1lTSVdZRykiLAotICAiWW91ciBEb2N1bWVudCBpcyBub3Qgd2VsbCBmb3JtZWQuIENoZWNrIEphdmFTY3JpcHQgY29uc29sZSBmb3IgZGV0YWlscy4iOiAiU2V1IERvY3VtZW50byBuw6NvIGVzdMOhIGZvcm1hdGFkbyBjb3JyZXRhbWVudGUuIFZlcmlmaXF1ZSBvIGNvbnNvbGUgZG8gSmF2YVNjcmlwdCBwYXJhIG1haW9yZXMgZGV0YWxoZXMuIiwKLSAgImluc2VydCBsaW5lYnJlYWsiOiAiaW5zZXJpciBxdWVicmEgZGUgbGluaGEiLAotICAibmV3IHBhcmFncmFwaCI6ICJub3ZvIHBhcsOhZ3JhZm8iLAotICAKLSAgLy8gbm90IGZpbmQgd2l0aCBsY19wYXJzZV9zdHJpbmdzLnBocAotICAiU3Vic2NyaXB0IjogIlN1YmVzY3JpdG8iLAotICAiU3VwZXJzY3JpcHQiOiAiU29icmVzY3JpdG8iLAotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiRGEgZXNxdWVyZGEgcGFyYSBkaXJlaXRhIiwKLSAgIkRpcmVjdGlvbiByaWdodCB0byBsZWZ0IjogIkRhIGRpcmVpdGEgcGFyYSBlc3F1ZXJkYSIsCi0gICJSZW1vdmUgZm9ybWF0dGluZyI6ICJSZW1vdmVyIGZvcm1hdGHDp8OjbyIsCi0gICJTZWxlY3QgYWxsIjogIlNlbGVjaW9uYXIgdHVkbyIsCi0gICJQcmludCBkb2N1bWVudCI6ICJJbXByaW1pciBkb2N1bWVudG8iLAotICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICJMaW1wYXIgdGFncyBkbyBNUyBPZmZpY2UiLAotICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiTGltcGFyIGVzcGVjaWZpY2HDp8O1ZXMgZGUgZm9udGVzIGlubGluZSIsCi0gICJTcGxpdCBCbG9jayI6ICJEaXZpZGlyIEJsb2NvIiwKLSAgIlRvZ2dsZSBCb3JkZXJzIjogIk11ZGFyIEJvcmRhcyIsCi0gICJTYXZlIGFzIjogIlNhbHZhciBjb21vIiwKLSAgIkluc2VydC9PdmVyd3JpdGUiOiAiSW5zZXJpci9Tb2JyZXNjcmV2ZXIiLAotICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IGZvcm1hdG8gJiM4MjEyOyIsCi0gICJIZWFkaW5nIDEiOiAiVMOtdHVsbyAxIiwKLSAgIkhlYWRpbmcgMiI6ICJUw610dWxvIDIiLAotICAiSGVhZGluZyAzIjogIlTDrXR1bG8gMyIsCi0gICJIZWFkaW5nIDQiOiAiVMOtdHVsbyA0IiwKLSAgIkhlYWRpbmcgNSI6ICJUw610dWxvIDUiLAotICAiSGVhZGluZyA2IjogIlTDrXR1bG8gNiIsCi0gICJOb3JtYWwiOiAiTm9ybWFsIiwKLSAgIkFkZHJlc3MiOiAiRW5kZXJlw6dvIiwKLSAgIkZvcm1hdHRlZCI6ICJGb3JtYXRhZG8iLAotICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiJiM4MjEyOyBmb250ZSAmIzgyMTI7IiwKLSAgIiYjODIxMjsgc2l6ZSAmIzgyMTI7IjogIiYjODIxMjsgdGFtYW5obyAmIzgyMTI7IiwKLSAgIk9yZGVyZWQgTGlzdCI6ICJMaXN0YSBOdW1lcmFkYSIsCi0gICJCdWxsZXRlZCBMaXN0IjogIkxpc3RhIE1hcmNhZG9yZXMiLAotICAiRGVjcmVhc2UgSW5kZW50IjogIkRpbWludWlyIEluZGVudGHDp8OjbyIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAiQXVtZW50YXIgSW5kZW50YcOnw6NvIiwKLSAgIkZvbnQgQ29sb3IiOiAiQ29yIGRhIEZvbnRlIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiQ29yIGRvIEZ1bmRvIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICJMaW5oYSBIb3Jpem9udGFsIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICJJbnNlcmlyIExpbmsiLAotICAiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICJJbnNlcmlyL01vZGlmaWNhciBJbWFnZW0iLAotICAiSW5zZXJ0IFRhYmxlIjogIkluc2VyaXIgVGFiZWxhIiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJWZXIgQ8OzZGlnby1Gb250ZSIsCi0gICJFbmxhcmdlIEVkaXRvciI6ICJFeHBhbmRpciBFZGl0b3IiLAotICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiU29icmUgZXN0ZSBlZGl0b3IiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiQWp1ZGEgLSBVc2FuZG8gbyBlZGl0b3IiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9yby5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3JvLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjIyOTMyLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3JvLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogInJvIiwgRU5DT0RJTkc6IFVURi04Ci0vLyBBdXRob3I6IE1paGFpIEJhem9uLCBodHRwOi8vZHluYXJjaC5jb20vbWlzaG9vCi0KLS8vIEZPUiBUUkFOU0xBVE9SUzoKLS8vCi0vLyAgIDEuIFBMRUFTRSBQVVQgWU9VUiBDT05UQUNUIElORk8gSU4gVEhFIEFCT1ZFIExJTkUKLS8vICAgICAgKGF0IGxlYXN0IGEgdmFsaWQgZW1haWwgYWRkcmVzcykKLS8vCi0vLyAgIDIuIFBMRUFTRSBUUlkgVE8gVVNFIFVURi04IEZPUiBFTkNPRElORzsKLS8vICAgICAgKGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbW1lbnQKLS8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikKLQotewotICAiQm9sZCI6ICLDjm5ncm/Fn2F0IiwKLSAgIkl0YWxpYyI6ICJJdGFsaWMiLAotICAiVW5kZXJsaW5lIjogIlN1YmxpbmlhdCIsCi0gICJTdHJpa2V0aHJvdWdoIjogIlTEg2lhdCIsCi0gICJTdWJzY3JpcHQiOiAiSW5kaWNlIGpvcyIsCi0gICJTdXBlcnNjcmlwdCI6ICJJbmRpY2Ugc3VzIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJBbGluaWVyZSBsYSBzdMOibmdhIiwKLSAgIkp1c3RpZnkgQ2VudGVyIjogIkFsaW5pZXJlIHBlIGNlbnRydSIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIkFsaW5pZXJlIGxhIGRyZWFwdGEiLAotICAiSnVzdGlmeSBGdWxsIjogIkFsaW5pZXJlIMOubiBhbWJlbGUgcMSDcsWjaSIsCi0gICJPcmRlcmVkIExpc3QiOiAiTGlzdMSDIG9yZG9uYXTEgyIsCi0gICJCdWxsZXRlZCBMaXN0IjogIkxpc3TEgyBtYXJjYXTEgyIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiTWljxZ9vcmVhesSDIGFsaW5lYXR1bCIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAiTcSDcmXFn3RlIGFsaW5lYXR1bCIsCi0gICJGb250IENvbG9yIjogIkN1bG9hcmVhIHRleHR1bHVpIiwKLSAgIkJhY2tncm91bmQgQ29sb3IiOiAiQ3Vsb2FyZSBkZSBmdW5kYWwiLAotICAiSG9yaXpvbnRhbCBSdWxlIjogIkxpbmllIG9yaXpvbnRhbMSDIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICJJbnNlcmVhesSDL21vZGlmaWPEgyBsaW5rIiwKLSAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiSW5zZXJlYXrEgy9tb2RpZmljxIMgaW1hZ2luZSIsCi0gICJJbnNlcnQgVGFibGUiOiAiSW5zZXJlYXrEgyB1biB0YWJlbCIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiU3Vyc2EgSFRNTCAvIFdZU0lXWUciLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiTWF4aW1pemVhesSDIGVkaXRvcnVsIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIkRlc3ByZSBlZGl0b3IiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiRG9jdW1lbnRhxaNpZSAoZGV2ZWwpIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiU3RpbHVsIGN1cmVudCIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJBbnVsZWF6xIMgdWx0aW1hIGFjxaNpdW5lIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIlJlZmFjZSB1bHRpbWEgYWPFo2l1bmUgYW51bGF0xIMiLAotICAiQ3V0IHNlbGVjdGlvbiI6ICJUYWllIMOubiBjbGlwYm9hcmQiLAotICAiQ29weSBzZWxlY3Rpb24iOiAiQ29waWUgw65uIGNsaXBib2FyZCIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJBZHVjZSBkaW4gY2xpcGJvYXJkIiwKLSAgIkRpcmVjdGlvbiBsZWZ0IHRvIHJpZ2h0IjogIkRpcmVjxaNpYSBkZSBzY3JpZXJlOiBzdMOibmdhIC0gZHJlYXB0YSIsCi0gICJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJEaXJlY8WjaWEgZGUgc2NyaWVyZTogZHJlYXB0YSAtIHN0w6JuZ2EiLAotICAiT0siOiAiT0siLAotICAiQ2FuY2VsIjogIkFudWxlYXrEgyIsCi0gICJQYXRoIjogIkNhbGVhIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJFxZ90aSDDrm4gbW9kdWwgVEVYVC4gIEFwYXPEgyBidXRvbnVsIFs8Pl0gcGVudHJ1IGEgdGUgw65udG9hcmNlIMOubiBtb2R1bCBXWVNJV1lHLiIsCi0gICJDYW5jZWwiOiAiUmVudW7Fo8SDIiwKLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJJbnNlcmVhesSDL21vZGlmY8SDIGxpbmsiLAotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJGZXJlYXN0csSDIG5vdcSDIChfYmxhbmspIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiTmltaWMgKGZvbG9zZcWfdGUgY2UtaSBpbXBsaWNpdCkiLAotICAiT3RoZXIiOiAiQWx0IHRhcmdldCIsCi0gICJTYW1lIGZyYW1lIChfc2VsZikiOiAiQWNlZWHFn2kgZmVyZWFzdHLEgyAoX3NlbGYpIiwKLSAgIlRhcmdldDoiOiAixaJpbnRhOiIsCi0gICJUaXRsZSAodG9vbHRpcCk6IjogIlRpdGx1bCAodG9vbHRpcCk6IiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiRmVyZWFzdHJhIHByaW5jaXBhbMSDIChfdG9wKSIsCi0gICJVUkw6IjogIlVSTDoiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIlRyZWJ1aWUgc8SDIGludHJvZHVjZcWjaSB1biBVUkwiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3J1LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjM5NGMyLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3J1LmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTg1ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0KLS8vIExBTkc6ICJydSIsIEVOQ09ESU5HOiBVVEYtOAotLy8gQXV0aG9yOiBZdWx5YSBTaHR5cnlha292YSwgPHl1bHlhQHZkY29tLnJ1PgotCi0vLyBTb21lIGFkZGl0aW9ucyBieTogQWxleGV5IEtpcnBpY2huaWtvdiwgPGFsZXhraXJAa2l3aXN0dWRpby5ydT4KLS8vIEkgdG9vayBGcmVuY2ggdmVyc2lvbiBhcyBhIHNvdXJjZSBvZiBFbmdsaXNoIHBocmFzZXMgYmVjYXVzZSBGcmVuY2ggdmVyc2lvbiB3YXMgdGhlIG1vc3QgY29tcHJlaGVuc2l2ZQotLy8gKGZyLmpzIHdhcyB0aGUgbGFyZ2VzdCBmaWxlLCBhY3R1YWxseSkgJSkKLQotLy8gRk9SIFRSQU5TTEFUT1JTOgotLy8KLS8vICAgMS4gUExFQVNFIFBVVCBZT1VSIENPTlRBQ1QgSU5GTyBJTiBUSEUgQUJPVkUgTElORQotLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQotLy8KLS8vICAgMi4gUExFQVNFIFRSWSBUTyBVU0UgVVRGLTggRk9SIEVOQ09ESU5HOwotLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudAotLy8gICAgICAgdGhhdCBzdGF0ZXMgd2hhdCBlbmNvZGluZyBpcyBuZWNlc3NhcnkuKQotCi17Ci0gICJCb2xkIjogItCf0L7Qu9GD0LbQuNGA0L3Ri9C5IiwKLSAgIkl0YWxpYyI6ICLQndCw0LrQu9C+0L3QvdGL0LkiLAotICAiVW5kZXJsaW5lIjogItCf0L7QtNGH0LXRgNC60L3Rg9GC0YvQuSIsCi0gICJTdHJpa2V0aHJvdWdoIjogItCf0LXRgNC10YfQtdGA0LrQvdGD0YLRi9C5IiwKLSAgIlN1YnNjcmlwdCI6ICLQndC40LbQvdC40Lkg0LjQvdC00LXQutGBIiwKLSAgIlN1cGVyc2NyaXB0IjogItCS0LXRgNGF0L3QuNC5INC40L3QtNC10LrRgSIsCi0gICJKdXN0aWZ5IExlZnQiOiAi0J/QviDQu9C10LLQvtC80YMg0LrRgNCw0Y4iLAotICAiSnVzdGlmeSBDZW50ZXIiOiAi0J/QviDRhtC10L3RgtGA0YMiLAotICAiSnVzdGlmeSBSaWdodCI6ICLQn9C+INC/0YDQsNCy0L7QvNGDINC60YDQsNGOIiwKLSAgIkp1c3RpZnkgRnVsbCI6ICLQn9C+INGI0LjRgNC40L3QtSIsCi0gICJPcmRlcmVkIExpc3QiOiAi0J3Rg9C80LXRgNC+0LLQsNC90L3Ri9C5INGB0L/QuNGB0L7QuiIsCi0gICJCdWxsZXRlZCBMaXN0IjogItCc0LDRgNC60LjRgNC+0LLQsNC90L3Ri9C5INGB0L/QuNGB0L7QuiIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAi0KPQvNC10L3RjNGI0LjRgtGMINC+0YLRgdGC0YPQvyIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAi0KPQstC10LvQuNGH0LjRgtGMINC+0YLRgdGC0YPQvyIsCi0gICJGb250IENvbG9yIjogItCm0LLQtdGCINGI0YDQuNGE0YLQsCIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogItCm0LLQtdGCINGE0L7QvdCwIiwKLSAgIkhvcml6b250YWwgUnVsZSI6ICLQk9C+0YDQuNC30L7QvdGC0LDQu9GM0L3Ri9C5INGA0LDQt9C00LXQu9C40YLQtdC70YwiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogItCS0YHRgtCw0LLQuNGC0Ywg0LPQuNC/0LXRgNGB0YHRi9C70LrRgyIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogItCS0YHRgtCw0LLQuNGC0Ywg0LjQt9C+0LHRgNCw0LbQtdC90LjQtSIsCi0gICJJbnNlcnQgVGFibGUiOiAi0JLRgdGC0LDQstC40YLRjCDRgtCw0LHQu9C40YbRgyIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAi0J/QvtC60LDQt9Cw0YLRjCBIdG1sLdC60L7QtCIsCi0gICJFbmxhcmdlIEVkaXRvciI6ICLQo9Cy0LXQu9C40YfQuNGC0Ywg0YDQtdC00LDQutGC0L7RgCIsCi0gICJBYm91dCB0aGlzIGVkaXRvciI6ICLQniDRgNC10LTQsNC60YLQvtGA0LUiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAi0J/QvtC80L7RidGMIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAi0KLQtdC60YPRidC40Lkg0YHRgtC40LvRjCIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLQntGC0LzQtdC90LjRgtGMIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogItCf0L7QstGC0L7RgNC40YLRjCIsCi0gICJDdXQgc2VsZWN0aW9uIjogItCS0YvRgNC10LfQsNGC0YwiLAotICAiQ29weSBzZWxlY3Rpb24iOiAi0JrQvtC/0LjRgNC+0LLQsNGC0YwiLAotICAiUGFzdGUgZnJvbSBjbGlwYm9hcmQiOiAi0JLRgdGC0LDQstC40YLRjCIsCi0gICJEaXJlY3Rpb24gbGVmdCB0byByaWdodCI6ICLQndCw0L/RgNCw0LLQu9C10L3QuNC1INGB0LvQtdCy0LAg0L3QsNC/0YDQsNCy0L4iLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAi0J3QsNC/0YDQsNCy0LvQtdC90LjQtSDRgdC/0YDQsNCy0LAg0L3QsNC70LXQstC+IiwKLSAgIlJlbW92ZSBmb3JtYXR0aW5nIjogItCj0LHRgNCw0YLRjCDRhNC+0YDQvNCw0YLQuNGA0L7QstCw0L3QuNC1IiwKLSAgIlNlbGVjdCBhbGwiOiAi0JLRi9C00LXQu9C40YLRjCDQstGB0LUiLAotICAiUHJpbnQgZG9jdW1lbnQiOiAi0J/QtdGH0LDRgtGMIiwKLSAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAi0KPQtNCw0LvQuNGC0Ywg0YDQsNC30LzQtdGC0LrRgyBNU09mZmljZSIsCi0gICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICLQo9C00LDQu9C40YLRjCDQvdC10L/QvtGB0YDQtdC00YHRgtCy0LXQvdC90L7QtSDQt9Cw0LTQsNC90LjQtSDRiNGA0LjRhNGC0L7QsiIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IHR5cGVmYWNlcz8iOiAi0KPQtNCw0LvQuNGC0Ywg0YLQuNC/0Ysg0YjRgNC40YTRgtC+0LI/IiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogItCj0LTQsNC70LjRgtGMINGA0LDQt9C80LXRgNGLINGI0YDQuNGE0YLQvtCyID8iLAotICAiV291bGQgeW91IGxpa2UgdG8gY2xlYXIgZm9udCBjb2xvdXJzPyI6ICLQo9C00LDQu9C40YLRjCDRhtCy0LXRgtCwINGI0YDQuNGE0YLQvtCyID8iLAotICAiU3BsaXQgQmxvY2siOiAi0KDQsNC30LTQtdC70LjRgtGMINCx0LvQvtC6IiwKLSAgIlRvZ2dsZSBCb3JkZXJzIjogItCS0LrQu9GO0YfQuNGC0Ywv0LLRi9C60LvRjtGH0LjRgtGMINC+0YLQvtCx0YDQsNC20LXQvdC40LUg0LPRgNCw0L3QuNGGIiwKLSAgIlNhdmUgYXMiOiAi0KHQvtGF0YDQsNC90LjRgtGMINC60LDQuiIsCi0gICJJbnNlcnQvT3ZlcndyaXRlIjogItCS0YHRgtCw0LLQutCwL9C30LDQvNC10L3QsCIsCi0gICImIzgyMTI7IGZvcm1hdCAmIzgyMTI7IjogIiYjODIxMjsg0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNC90LjQtSAmIzgyMTI7IiwKLSAgIkhlYWRpbmcgMSI6ICLQl9Cw0LPQvtC70L7QstC+0LogMSIsCi0gICJIZWFkaW5nIDIiOiAi0JfQsNCz0L7Qu9C+0LLQvtC6IDIiLAotICAiSGVhZGluZyAzIjogItCX0LDQs9C+0LvQvtCy0L7QuiAzIiwKLSAgIkhlYWRpbmcgNCI6ICLQl9Cw0LPQvtC70L7QstC+0LogNCIsCi0gICJIZWFkaW5nIDUiOiAi0JfQsNCz0L7Qu9C+0LLQvtC6IDUiLAotICAiSGVhZGluZyA2IjogItCX0LDQs9C+0LvQvtCy0L7QuiA2IiwKLSAgIk5vcm1hbCI6ICLQntCx0YvRh9C90YvQuSDRgtC10LrRgdGCIiwKLSAgIkFkZHJlc3MiOiAi0JDQtNGA0LXRgSIsCi0gICJGb3JtYXR0ZWQiOiAi0J7RgtGE0L7RgNC80LDRgtC40YDQvtCy0LDQvdC90YvQuSDRgtC10LrRgdGCIiwKLQotICAiJiM4MjEyOyBmb250ICYjODIxMjsiOiAiJiM4MjEyOyDRiNGA0LjRhNGCICYjODIxMjsiLAotICAiJiM4MjEyOyBzaXplICYjODIxMjsiOiAiJiM4MjEyOyDRgNCw0LfQvNC10YAgJiM4MjEyOyIsCi0KLQotLy8g0JTQuNCw0LvQvtCz0LgKLQotICAiT0siOiAiT0siLAotICAiQ2FuY2VsIjogItCe0YLQvNC10L3QsCIsCi0gICJQYXRoIjogItCf0YPRgtGMIiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICLQktGLINCyINGA0LXQttC40LzQtSDQvtGC0L7QsdGA0LDQttC10L3QuNGPIEh0bWwt0LrQvtC00LAuINC90LDQttC80LjRgtC1INC60L3QvtC/0LrRgyBbPD5dLCDRh9GC0L7QsdGLINC/0LXRgNC10LrQu9GO0YfQuNGC0YzRgdGPINCyINCy0LjQt9GD0LDQu9GM0L3Ri9C5INGA0LXQttC40LwuIiwKLQotIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAi0JrQvdC+0L/QutCwINCS0YHRgtCw0LLQuNGC0Ywg0L3QtSDRgNCw0LHQvtGC0LDQtdGCINCyINCx0YDQsNGD0LfQtdGA0LDRhSDQvdCwINC+0YHQvdC+0LLQtSBNb3ppbGxhICjQv9C+INGC0LXRhdC90LjRh9C10YHQutC40Lwg0L/RgNC40YfQuNC90LDQvCwg0YHQstGP0LfQsNC90L3Ri9C8INGBINCx0LXQt9C+0L/QsNGB0L3QvtGB0YLRjNGOKS4g0J3QsNC20LzQuNGC0LUgQ3RybC1WINC90LAg0LrQu9Cw0LLQuNCw0YLRg9GA0LUsINGH0YLQvtCx0Ysg0LLRgdGC0LDQstC40YLRjC4iLAotCi0gICJZb3VyIERvY3VtZW50IGlzIG5vdCB3ZWxsIGZvcm1lZC4gQ2hlY2sgSmF2YVNjcmlwdCBjb25zb2xlIGZvciBkZXRhaWxzLiI6ICLQktCw0Ygg0LTQvtC60YPQvNC10L3RgiDQvdC10L/RgNCw0LLQuNC70YzQvdC+INGB0YTQvtGA0LzQuNGA0L7QstCw0L0uINCf0L7RgdC80L7RgtGA0LjRgtC1INCa0L7QvdGB0L7Qu9GMIEphdmFTY3JpcHQsINGH0YLQvtCx0Ysg0YPQt9C90LDRgtGMINC/0L7QtNGA0L7QsdC90L7RgdGC0LguIiwKLQotICAiQWxpZ25tZW50OiI6ICLQktGL0YDQsNCy0L3QuNCy0LDQvdC40LUiLAotICAiTm90IHNldCI6ICLQndC1INGD0YHRgtCw0L3QvtCy0LvQtdC90L4iLAotICAiTGVmdCI6ICLQn9C+INC70LXQstC+0LzRgyDQutGA0LDRjiIsCi0gICJSaWdodCI6ICLQn9C+INC/0YDQsNCy0L7QvNGDINC60YDQsNGOIiwKLSAgIlRleHR0b3AiOiAi0J/QviDQstC10YDRhdC90LXQuSDQs9GA0LDQvdC40YbQtSDRgtC10LrRgdGC0LAiLAotICAiQWJzbWlkZGxlIjogItCf0L4g0YHQtdGA0LXQtNC40L3QtSDRgtC10LrRgdGC0LAiLAotICAiQmFzZWxpbmUiOiAi0J/QviDQvdC40LbQvdC10Lkg0LPRgNCw0L3QuNGG0LUg0YLQtdC60YHRgtCwIiwKLSAgIkFic2JvdHRvbSI6ICLQn9C+INC90LjQttC90LXQuSDQs9GA0LDQvdC40YbQtSIsCi0gICJCb3R0b20iOiAi0J/QviDQvdC40LbQvdC10LzRgyDQutGA0LDRjiIsCi0gICJNaWRkbGUiOiAi0J/QvtGB0YDQtdC00LjQvdC1IiwKLSAgIlRvcCI6ICLQn9C+INCy0LXRgNGF0L3QtdC80YMg0LrRgNCw0Y4iLAotCi0gICJMYXlvdXQiOiAi0KDQsNGB0L/QvtC70L7QttC10L3QuNC1IiwKLSAgIlNwYWNpbmciOiAi0J/QvtC70Y8iLAotICAiSG9yaXpvbnRhbDoiOiAi0J/QviDQs9C+0YDQuNC30L7QvdGC0LDQu9C4IiwKLSAgIkhvcml6b250YWwgcGFkZGluZyI6ICLQk9C+0YDQuNC30L7QvdGC0LDQu9GM0L3Ri9C1INC/0L7Qu9GPIiwKLSAgIlZlcnRpY2FsOiI6ICLQn9C+INCy0LXRgNGC0LjQutCw0LvQuCIsCi0gICJWZXJ0aWNhbCBwYWRkaW5nIjogItCS0LXRgNGC0LjQutCw0LvRjNC90YvQtSDQv9C+0LvRjyIsCi0gICJCb3JkZXIgdGhpY2tuZXNzOiI6ICLQotC+0LvRidC40L3QsCDRgNCw0LzQutC4IiwKLSAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAi0J7RgdGC0LDQstGM0YLQtSDQv9GD0YHRgtGL0LwsINGH0YLQvtCx0Ysg0YPQsdGA0LDRgtGMINGA0LDQvNC60YMiLAotCi0gIC8vSW5zZXJ0IExpbmsKLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICLQktGB0YLQsNCy0LrQsC/QuNC30LzQtdC90LXQvdC40LUg0YHRgdGL0LvQutC4IiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi0J/QviDRg9C80L7Qu9GH0LDQvdC40Y4iLAotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLQndC+0LLQvtC1INC+0LrQvdC+IChfYmxhbmspIiwKLSAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLQotC+INC20LUg0L7QutC90L4gKF9zZWxmKSIsCi0gICJUb3AgZnJhbWUgKF90b3ApIjogItCg0L7QtNC40YLQtdC70YzRgdC60L7QtSDQvtC60L3QviAoX3RvcCkiLAotICAiT3RoZXIiOiAi0JTRgNGD0LPQvtC1IiwKLSAgIlRhcmdldDoiOiAi0J7RgtC60YDRi9Cy0LDRgtGMINCyINC+0LrQvdC1OiIsCi0gICJUaXRsZSAodG9vbHRpcCk6IjogItCS0YHQv9C70YvQstCw0Y7RidCw0Y8g0L/QvtC00YHQutCw0LfQutCwIiwKLSAgIlVSTDoiOiAiVVJMOiIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIHdoZXJlIHRoaXMgbGluayBwb2ludHMgdG8iOiAi0JLRiyDQtNC+0LvQttC90Ysg0YPQutCw0LfQsNGC0YwgVVJMLCDQvdCwINC60L7RgtC+0YDRi9C5INCx0YPQtNC10YIg0YPQutCw0LfRi9Cy0LDRgtGMINGB0YHRi9C70LrQsCIsCi0gICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGluZyBhIGxpbmsiOiAi0JLRiyDQtNC+0LvQttC90Ysg0LLRi9C00LXQu9C40YLRjCDRgtC10LrRgdGCLCDQutC+0YLQvtGA0YvQuSDQsdGD0LTQtdGCINC/0YDQtdC+0LHRgNCw0LfQvtCy0LDQvSDQsiDRgdGB0YvQu9C60YMiLAotCi0gIC8vIEluc2VydCBUYWJsZQotICAiSW5zZXJ0IFRhYmxlIjogItCS0YHRgtCw0LLQutCwINGC0LDQsdC70LjRhtGLIiwKLSAgIlJvd3M6IjogItCh0YLRgNC+0LrQuCIsCi0gICJOdW1iZXIgb2Ygcm93cyI6ICLQmtC+0LvQuNGH0LXRgdGC0LLQviDRgdGC0YDQvtC6IiwKLSAgIkNvbHM6IjogItCh0YLQvtC70LHRhtGLIiwKLSAgIk51bWJlciBvZiBjb2x1bW5zIjogItCa0L7Qu9C40YfQtdGB0YLQstC+INGB0YLQvtC70LHRhtC+0LIiLAotICAiV2lkdGg6IjogItCo0LjRgNC40L3QsCIsCi0gICJXaWR0aCBvZiB0aGUgdGFibGUiOiAi0KjQuNGA0LjQvdCwINGC0LDQsdC70LjRhtGLIiwKLSAgIlBlcmNlbnQiOiAi0L/RgNC+0YbQtdC90YLRiyIsCi0gICJQaXhlbHMiOiAi0L/QuNC60YHQtdC70YsiLAotICAiRW0iOiAiZW0iLAotICAiV2lkdGggdW5pdCI6ICLQldC00LjQvdC40YbRiyDQuNC30LzQtdGA0LXQvdC40Y8iLAotICAiRml4ZWQgd2lkdGggY29sdW1ucyI6ICLQodGC0L7Qu9Cx0YbRiyDRhNC40LrRgdC40YDQvtCy0LDQvdC90L7QuSDRiNC40YDQuNC90YsiLAotICAiUG9zaXRpb25pbmcgb2YgdGhpcyB0YWJsZSI6ICLQoNCw0YHQv9C+0LvQvtC20LXQvdC40LUg0YLQsNCx0LvQuNGG0YsiLAotICAiQ2VsbCBzcGFjaW5nOiI6ICLQoNCw0YHRgdGC0L7Rj9C90LjQtSDQvNC10LbQtNGDINGP0YfQtdC50LrQsNC80LgiLAotICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICLQoNCw0YHRgdGC0L7Rj9C90LjQtSDQvNC10LbQtNGDINGB0L7RgdC10LTQvdC40LzQuCDRj9GH0LXQudC60LDQvNC4IiwKLSAgIkNlbGwgcGFkZGluZzoiOiAi0J/QvtC70Y8g0LIg0Y/Rh9C10LnQutCw0YUiLAotICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICLQoNCw0YHRgdGC0L7Rj9C90LjQtSDQvNC10LbQtNGDINCz0YDQsNC90LjRhtC10Lkg0Y/Rh9C10LnQutC4INC4INGC0LXQutGB0YLQvtC8IiwKLSAgIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiOiAi0JLRiyDQtNC+0LvQttC90Ysg0LLQstC10YHRgtC4INC60L7Qu9C40YfQtdGB0YLQstC+INGB0YLRgNC+0LoiLAotICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICLQktGLINC00L7Qu9C20L3RiyDQstCy0LXRgdGC0Lgg0LrQvtC70LjRh9C10YHRgtCy0L4g0YHRgtC+0LvQsdGG0L7QsiIsCi0KLSAgLy8gSW5zZXJ0IEltYWdlCi0gICJJbnNlcnQgSW1hZ2UiOiAi0JLRgdGC0LDQstC60LAg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyIsCi0gICJJbWFnZSBVUkw6IjogIlVSTCDQuNC30L7QsdGA0LDQttC10L3QuNGPIiwKLSAgIkVudGVyIHRoZSBpbWFnZSBVUkwgaGVyZSI6ICLQktGB0YLQsNCy0YzRgtC1INCw0LTRgNC10YEg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyIsCi0gICJQcmV2aWV3IjogItCf0YDQtdC00LLQsNGA0LjRgtC10LvRjNC90YvQuSDQv9GA0L7RgdC80L7RgtGAIiwKLSAgIlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI6ICLQn9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdGL0Lkg0L/RgNC+0YHQvNC+0YLRgCDQsiDQvtGC0LTQtdC70YzQvdC+0Lwg0L7QutC90LUiLAotICAiQWx0ZXJuYXRlIHRleHQ6IjogItCQ0LvRjNGC0LXRgNC90LDRgtC40LLQvdGL0Lkg0YLQtdC60YHRgiIsCi0gICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICLQlNC70Y8g0LHRgNCw0YPQt9C10YDQvtCyLCDQutC+0YLQvtGA0YvQtSDQvdC1INC+0YLQvtCx0YDQsNC20LDRjtGCINC60LDRgNGC0LjQvdC60LgiLAotICAiUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI6ICLQoNCw0YHQv9C+0LvQvtC20LXQvdC40LUg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyIsCi0gICJJbWFnZSBQcmV2aWV3OiI6ICLQn9GA0LXQtNCy0LDRgNC40YLQtdC70YzQvdGL0Lkg0L/RgNC+0YHQvNC+0YLRgCIsCi0gICJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIjogItCS0Ysg0LTQvtC70LbQvdGLINCy0LLQtdGB0YLQuCBVUkwiLAotCi0gIC8vIEVkaXRvciBIZWxwCi0gICJYaW5oYSBIZWxwIjogItCf0L7QvNC+0YnRjCIsCi0gICJFZGl0b3IgSGVscCI6ICLQn9C+0LzQvtGJ0YwiLAotICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogItCT0L7RgNGP0YfQuNC1INC60LvQsNCy0LjRiNC4IiwKLSAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICLQoNC10LTQsNC60YLQvtGAINC/0L7QtNC00LXRgNC20LjQstCw0LXRgiDRgdC70LXQtNGD0Y7RidC40LUg0LrQvtC80LHQuNC90LDRhtC40Lgg0LrQu9Cw0LLQuNGIOiIsCi0gICJFTlRFUiI6ICJFTlRFUiIsCi0gICJuZXcgcGFyYWdyYXBoIjogItC90L7QstGL0Lkg0LDQsdC30LDRhiIsCi0gICJTSElGVC1FTlRFUiI6ICJTSElGVCtFTlRFUiIsCi0gICJpbnNlcnQgbGluZWJyZWFrIjogItC/0LXRgNC10L3QvtGBINGB0YLRgNC+0LrQuCIsCi0gICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICLQntGC0YTQvtGA0LzQsNGC0LjRgNC+0LLQsNGC0Ywg0LDQsdC30LDRhiIsCi0gICJDbGVhbiBjb250ZW50IHBhc3RlZCBmcm9tIFdvcmQiOiAi0J7Rh9C40YHRgtC40YLRjCDRgtC10LrRgdGCLCDQstGB0YLQsNCy0LvQtdC90L3Ri9C5INC40LcgV29yZCIsCi0gICJIZWFkaW5ncyI6ICLQl9Cw0LPQvtC70L7QstC60LgiLAotICAiQ2xvc2UiOiAi0JfQsNC60YDRi9GC0YwiLAotCi0gIC8vIExvYWRpbmcgbWVzc2FnZXMKLSAgIkxvYWRpbmcgaW4gcHJvZ3Jlc3MuIFBsZWFzZSB3YWl0ICEiOiAi0JfQsNCz0YDRg9C30LrQsC4uLiDQn9C+0LbQsNC70YPQudGB0YLQsCwg0L/QvtC00L7QttC00LjRgtC1LiIsCi0gICJDb25zdHJ1Y3RpbmcgbWFpbiBvYmplY3QiOiAi0KHQvtC30LTQsNC90LjQtSDQs9C70LDQstC90L7Qs9C+INC+0LHRitC10LrRgtCwIiwKLSAgIkNvbnN0cnVjdGluZyBvYmplY3QiOiAi0KHQvtC30LTQsNC90LjQtSDQvtCx0YrQtdC60YLQsCIsCi0gICJSZWdpc3RlciBwYW5lbCByaWdodCI6ICLQoNC10LPQuNGB0YLRgNCw0YbQuNGPINC/0YDQsNCy0L7QuSDQv9Cw0L3QtdC70LgiLAotICAiUmVnaXN0ZXIgcGFuZWwgbGVmdCI6ICLQoNC10LPQuNGB0YLRgNCw0YbQuNGPINC70LXQstC+0Lkg0L/QsNC90LXQu9C4IiwKLSAgIlJlZ2lzdGVyIHBhbmVsIHRvcCI6ICLQoNC10LPQuNGB0YLRgNCw0YbQuNGPINCy0LXRgNGF0L3QtdC5INC/0LDQvdC10LvQuCIsCi0gICJSZWdpc3RlciBwYW5lbCBib3R0b20iOiAi0KDQtdCz0LjRgdGC0YDQsNGG0LjRjyDQvdC40LbQvdC10Lkg0L/QsNC90LXQu9C4IiwKLSAgIkNyZWF0ZSBUb29sYmFyIjogItCh0L7Qt9C00LDQvdC40LUg0L/QsNC90LXQu9C4INC40L3RgdGC0YDRg9C80LXQvdGC0L7QsiIsCi0gICJDcmVhdGUgU3RhdHVzQmFyIjogItCh0L7Qt9C00LDQvdC40LUg0L/QsNC90LXQu9C4INGB0L7RgdGC0L7Rj9C90LjRjyIsCi0gICJHZW5lcmF0ZSBYaW5oYSBvYmplY3QiOiAi0KHQvtC30LTQsNC90LjQtSDQvtCx0YrQtdC60YLQsCBYaW5oYSIsCi0gICJJbml0IGVkaXRvciBzaXplIjogItCY0L3QuNGG0LjQsNC70LjQt9Cw0YbQuNGPINGA0LDQt9C80LXRgNCwINGA0LXQtNCw0LrRgtC+0YDQsCIsCi0gICJJbml0IElGcmFtZSI6ICLQuNC90LjRhtC40LDQu9C40LfQsNGG0LjRjyBpZnJhbWUiLAotICAiUmVnaXN0ZXIgcGx1Z2luICRwbHVnaW4iOiAi0KDQtdCz0LjRgdGC0YDQsNGG0LjRjyAkcGx1Z2luIgotfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3NoLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvc2guanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NmEwZGYuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvc2guanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAot77u/Ly8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04IHwgSVNPLTg4NTktMgotLy8gQXV0aG9yOiBManViYSBSYW5rb3ZpxIcsIGh0dHA6Ly93d3cucmFua292aWMubmV0L2xqdWJhcgotCi0vLyBGT1IgVFJBTlNMQVRPUlM6Ci0vLwotLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCi0vLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCi0vLwotLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7Ci0vLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50Ci0vLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCi0KLXsKLQkJIkJvbGQiOiAiTWFzbm8iLAotCQkiSXRhbGljIjogIkt1cnppdiIsCi0JCSJVbmRlcmxpbmUiOiAiUG9kdnXEjWVubyIsCi0JCSJTdHJpa2V0aHJvdWdoIjogIlByZWNydGFubyIsCi0JCSJTdWJzY3JpcHQiOiAiSW5kZWtzLXRla3N0IiwKLQkJIlN1cGVyc2NyaXB0IjogIkVrc3BvbmVudC10ZWtzdCIsCi0JCSJKdXN0aWZ5IExlZnQiOiJSYXZuYW5qZSB1bGV2byIsCi0JCSJKdXN0aWZ5IENlbnRlciI6ICJSYXZuYW5qZSBwbyBzaW1ldHJhbGkiLAotCQkiSnVzdGlmeSBSaWdodCI6ICJSYXZuYW5qZSB1ZGVzbm8iLAotCQkiSnVzdGlmeSBGdWxsIjogIlB1bm8gcmF2bmFuamUiLAotCQkiT3JkZXJlZCBMaXN0IjogIkxpc3RhIHNhIHJlZG5pbSBicm9qZXZpbWEiLAotCQkiQnVsbGV0ZWQgTGlzdCI6ICJMaXN0YSBzYSBzaW1ib2xpbWEiLAotCQkiRGVjcmVhc2UgSW5kZW50IjogInNtYW5qaSB1dmxhxI1lbmplIiwKLQkJIkluY3JlYXNlIEluZGVudCI6ICJQb3ZlxIdhaiB1dmxhxI1lbmplIiwKLQkJIkZvbnQgQ29sb3IiOiAiQm9qYSBzbG92YSIsCi0JCSJCYWNrZ3JvdW5kIENvbG9yIjogIkJvamEgcG96YWRpbmUiLAotCQkiSG9yaXpvbnRhbCBSdWxlIjogIkhvcml6b250YWxuYSBsaW5pamEiLAotCQkiSW5zZXJ0IFdlYiBMaW5rIjogIkRvZGFqIHdlYiBsaW5rIiwKLQkJIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiRG9kYWovcHJvbWVuaSBzbGlrdSIsCi0JCSJJbnNlcnQgVGFibGUiOiAiVWJhY2kgdGFiZWx1IiwKLQkJIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJQcmViYWNpIG5hIEhUTUwga29kIiwKLQkJIkVubGFyZ2UgRWRpdG9yIjogIlBvdmXEh2FqIGVkaXRvciIsCi0JCSJBYm91dCB0aGlzIGVkaXRvciI6ICJPIG92b20gZWRpdG9ydSIsCi0JCSJIZWxwIHVzaW5nIGVkaXRvciI6ICJQb21vxIcgcHJpIGtvcmnFocSHZW5qdSBlZGl0b3JhIiwKLQkJIkN1cnJlbnQgc3R5bGUiOiAiVmHFvmXEh2kgc3RpbCIsCi0JCSJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJQb25pxaF0YXZhIHBvc2xlZG5qdSByYWRuanUiLAotCQkiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiVnJhxIdhIHBvc2xlZG5qdSByYWRuanUiLAotCQkiQ3V0IHNlbGVjdGlvbiI6ICJJc2VjaSBpemFicmFubyIsCi0JCSJDb3B5IHNlbGVjdGlvbiI6ICJLb3BpcmFqIGl6YWJyYW5vIiwKLQkJIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIlphbGVwaSBpeiBrbGlwYm9yZGEiLAotCQkiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiUHJhdmFjIHMgbGV2YSBuYSBkZXNubyIsCi0JCSJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICJQcmF2YWMgcyBkZXNuYSBuYSBsZXZvIiwKLSAgICAgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogIlVrb25pIGZvcm1hdGlyYW5qZSIsCi0gICAgICAgICJTZWxlY3QgYWxsIjogIkl6YWJlcmkgc3ZlIiwKLSAgICAgICAgIlByaW50IGRvY3VtZW50IjogIsWgdGFtcGFqIGRva3VtZW50IiwKLSAgICAgICAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiT2JyacWhaSBNU09mZmljZSB0YWdvdmUiLAotICAgICAgICAiQ2xlYXIgSW5saW5lIEZvbnQgU3BlY2lmaWNhdGlvbnMiOiAiT2JyacWhaSBkb2RlbGplbmUgb3NvYmluZSBmb250YSIsCi0gICAgICAgICJTcGxpdCBCbG9jayI6ICJQb2RlbGkgYmxvayIsCi0gICAgICAgICJUb2dnbGUgQm9yZGVycyI6ICJJem1lbmkgb2t2aXJlIiwKLQotICAgICAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IEZvcm1hdCAmIzgyMTI7IiwKLSAgICAgICAgIkhlYWRpbmcgMSI6ICJaYWdsYXZsamUgMSIsCi0gICAgICAgICJIZWFkaW5nIDIiOiAiWmFnbGF2bGplIDIiLAotICAgICAgICAiSGVhZGluZyAzIjogIlphZ2xhdmxqZSAzIiwKLSAgICAgICAgIkhlYWRpbmcgNCI6ICJaYWdsYXZsamUgNCIsCi0gICAgICAgICJIZWFkaW5nIDUiOiAiWmFnbGF2bGplIDUiLAotICAgICAgICAiSGVhZGluZyA2IjogIlphZ2xhdmxqZSA2IiwKLSAgICAgICAgIk5vcm1hbCI6ICJPYmnEjWFuIiwKLSAgICAgICAgIkFkZHJlc3MiOiAiQWRyZXNhIiwKLSAgICAgICAgIkZvcm1hdHRlZCI6ICJGb3JtYXRpcmFuIiwKLSAgICAgICAgCi0gICAgICAgIC8vIGRpYWxvZ3MKLQkJIk9LIjogIk9LIiwKLQkJIkNhbmNlbCI6ICJQb25pxaF0aSIsCi0JCSJQYXRoIjogIlB1dGFuamEiLAotCQkiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIk5hbGF6aXRlIHNlIHUgVEVYVCByZcW+aW11LiAgS29yaXN0aXRlIFs8Pl0gZHVnbWUgemEgcG92cmF0YWsgbmEgV1lTSVdZRy4iLAotCi0JCSJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIiIsCi0KLSAgICAgICAgIkFsaWdubWVudDoiOiAiUmF2bmFuamUiLAotICAgICAgICAiTm90IHNldCI6ICJOaWplIHBvc3RhdmxqZW5vIiwKLSAgICAgICAgIkxlZnQiOiAiTGV2byIsCi0gICAgICAgICJSaWdodCI6ICJEZXNubyIsCi0gICAgICAgICJUZXh0dG9wIjogIlZyaCB0ZWtzdGEiLAotICAgICAgICAiQWJzbWlkZGxlIjogIkFwc29sdXRuYSBzcmVkaW5hIiwKLSAgICAgICAgIkJhc2VsaW5lIjogIkRvbmphIGxpbmlqYSIsCi0gICAgICAgICJBYnNib3R0b20iOiAiQXBzb2x1dG5vIGRubyIsCi0gICAgICAgICJCb3R0b20iOiAiRG5vIiwKLSAgICAgICAgIk1pZGRsZSI6ICJTcmVkaW5hIiwKLSAgICAgICAgIlRvcCI6ICJWcmgiLAotCi0gICAgICAgICJMYXlvdXQiOiAiUHJlbG9tIiwKLSAgICAgICAgIlNwYWNpbmciOiAiUmF6bWFrIiwKLSAgICAgICAgIkhvcml6b250YWw6IjogIlBvIGhvcml6b250YWxpIiwKLSAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICJIb3Jpem9udGFsbm8gb2RzdG9qYW5qZSIsCi0gICAgICAgICJWZXJ0aWNhbDoiOiAiUG8gdmVydGlrYWxpIiwKLSAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAiVmVydGlrYWxubyBvZHN0b2phbmplIiwKLSAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogIkRlYmxqaW5hIG9rdmlyYSIsCi0gICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogIk9zdGF2aSBwcmF6bm8ga2FkIG5lbWEgb2t2aXJhIiwKLQkJCi0gICAgICAgIC8vIEluc2VydCBMaW5rCi0JCSJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiRG9kYWovcHJvbWVuaSBMaW5rIiwKLQkJIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAia29yaXN0aSBwb2RyYXp1bWV2YW5vIiwKLQkJIk5ldyB3aW5kb3cgKF9ibGFuaykiOiAiTm92b20gcHJvem9ydSAoX2JsYW5rKSIsCi0JCSJTYW1lIGZyYW1lIChfc2VsZikiOiAiSXN0aSBmcmVqbSAoX3NlbGYpIiwKLQkJIlRvcCBmcmFtZSAoX3RvcCkiOiAiR2xhdm5pIGZyZWptIChfdG9wKSIsCi0JCSJPdGhlciI6ICJEcnVnbyIsCi0JCSJUYXJnZXQ6IjogIk90dm9yaSB1OiIsCi0JCSJUaXRsZSAodG9vbHRpcCk6IjogIk5heml2ICh0b29sdGlwKToiLAotCQkiVVJMOiI6ICJVUkw6IiwKLQkJIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJNb3JhdGUgdW5ldGkgVVJMIG5hIGtvamkgdm9kaSBvdmFqIGxpbmsiLAotCQkKLSAgICAgICAgLy8gSW5zZXJ0IFRhYmxlCi0gICAgICAgICJJbnNlcnQgVGFibGUiOiAiVWJhY2kgdGFiZWx1IiwKLSAgICAgICAgIlJvd3M6IjogIlJlZG92aSIsCi0gICAgICAgICJOdW1iZXIgb2Ygcm93cyI6ICJCcm9qIHJlZG92YSIsCi0gICAgICAgICJDb2xzOiI6ICJLb2xvbmUiLAotICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAiQnJvaiBrb2xvbmEiLAotICAgICAgICAiV2lkdGg6IjogIsWgaXJpbmEiLAotICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIsWgaXJpbmEgdGFiZWxlIiwKLSAgICAgICAgIlBlcmNlbnQiOiAiUHJvY2VuYXQiLAotICAgICAgICAiUGl4ZWxzIjogIlBpa3NlbGkiLAotICAgICAgICAiRW0iOiAiRW0iLAotICAgICAgICAiV2lkdGggdW5pdCI6ICJKZWRpbmljYSDFoWlyaW5lIiwKLSAgICAgICAgIkZpeGVkIHdpZHRoIGNvbHVtbnMiOiAiRmlrc2lyYW5hIMWhaXJpbmEga29sb25hIiwKLSAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAiUG9zdGF2bGphbmplIG92ZSB0YWJlbGUiLAotICAgICAgICAiQ2VsbCBzcGFjaW5nOiI6ICJSYXN0b2phbmplIMSHZWxpamEiLAotICAgICAgICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICJSYXN0b2phbmplIG5hc3ByYW1uaWggxIdlbGlqYSIsCi0gICAgICAgICJDZWxsIHBhZGRpbmc6IjogIlVudXRyYcWhbmphIG9kc3RvamFuamEgdSDEh2VsaWppIiwKLSAgICAgICAgIlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiOiAiUmFzdG9qYW5qZSBpem1lxJF1IHNhZHLFvmFqYSBpIG9rdmlyYSDEh2VsaWplIiwKLQotICAgICAgICAvLyBJbnNlcnQgSW1hZ2UKLSAgICAgICAgIkluc2VydCBJbWFnZSI6ICJVYmFjaSBzbGlrdSIsCi0gICAgICAgICJJbWFnZSBVUkw6IjogIlVSTCBzbGlrZSIsCi0gICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAiVW5lc2l0ZSBVUkwgc2xpa2Ugb3ZkZSIsCi0gICAgICAgICJQcmV2aWV3IjogIlByZWdsZWQiLAotICAgICAgICAiUHJldmlldyB0aGUgaW1hZ2UgaW4gYSBuZXcgd2luZG93IjogIlByZWdsZWRhaiBzbGlrdSB1IG5vdm9tIHByb3pvcnUiLAotICAgICAgICAiQWx0ZXJuYXRlIHRleHQ6IjogIkFsdGVybmF0aXZuaSB0ZWtzdCIsCi0gICAgICAgICJGb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IGltYWdlcyI6ICJaYSBwcmV0cmHFvml2YcSNZSBrb2ppIG5lIHBvZHLFvmF2YWp1IHNsaWtlIiwKLSAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAiUG9zdGF2bGphbmplIG92ZSBzbGlrZSIsCi0gICAgICAgICJJbWFnZSBQcmV2aWV3OiI6ICJQcmVnbGVkIHNsaWtlIiwKLSAgICAgICAgCi0gICAgICAgIC8vIFNlbGVjdCBDb2xvciBwb3B1cAotCQkiU2VsZWN0IENvbG9yIjogIkl6YWJlcml0ZSBib2p1IgotfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3NpLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvc2kuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzNGFiYmUuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvc2kuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotCi0vLyBMQU5HOiAic2kiLCBFTkNPRElORzogVVRGLTgKLS8vIEF1dGhvcjogVG9tYXogS3JlZ2FyLCB4X3RvbW9feEBlbWFpbC5zaQotCi0vLyBGT1IgVFJBTlNMQVRPUlM6Ci0vLwotLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCi0vLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCi0vLwotLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7Ci0vLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50Ci0vLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCi0KLXsKLSAgIkJvbGQiOiAiS3JlcGtvIiwKLSAgIkl0YWxpYyI6ICJMZcW+ZcSNZSIsCi0gICJVbmRlcmxpbmUiOiAiUG9kxI1ydGFubyIsCi0gICJTdHJpa2V0aHJvdWdoIjogIlByZcSNcnRhbm8iLAotICAiU3Vic2NyaXB0IjogIlBvZHBpc2FubyIsCi0gICJTdXBlcnNjcmlwdCI6ICJOYWRwaXNhbm8iLAotICAiSnVzdGlmeSBMZWZ0IjogIlBvcmF2bmFqIGxldm8iLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiTmEgc3JlZGlubyIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIlBvcmF2bmFqIGRlc25vIiwKLSAgIkp1c3RpZnkgRnVsbCI6ICJQb3JhemRlbGkgdnNlYmlubyIsCi0gICJPcmRlcmVkIExpc3QiOiAiT8WhdGV2aWzEjWV2YW5qZSIsCi0gICJCdWxsZXRlZCBMaXN0IjogIk96bmHEjWV2YW5qZSIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiWm1hbmrFoWFqIHphbWlrIiwKLSAgIkluY3JlYXNlIEluZGVudCI6ICJQb3ZlxI1haiB6YW1payIsCi0gICJGb250IENvbG9yIjogIkJhcnZhIHBpc2F2ZSIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIkJhcnZhIG96YWRqYSIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiVm9kb3Jhdm5hIMSNcnRhIiwKLSAgIkluc2VydCBXZWIgTGluayI6ICJWc3RhdmkgaGlwZXJwb3ZlemF2byIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIlZzdGF2aSBzbGlrbyIsCi0gICJJbnNlcnQgVGFibGUiOiAiVnN0YXZpIHRhYmVsbyIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiUHJla2xvcGkgbmEgSFRNTCBrb2RvIiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIlBvdmXEjWFqIHVyZWpldmFsbmlrIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIlZpeml0a2EgemEgdXJlamV2YWxuaWsiLAotICAiSGVscCB1c2luZyBlZGl0b3IiOiAiUG9tb8SNIHphIHVyZWpldmFsbmlrIiwKLSAgIkN1cnJlbnQgc3R5bGUiOiAiVHJlbnV0bmkgc2xvZyIsCi0gICJVbmRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJSYXp2ZWxqYXZpIHphZG5qbyBha2Npam8iLAotICAiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiVXZlbGphdmkgemFkbmpvIGFrY2lqbyIsCi0gICJDdXQgc2VsZWN0aW9uIjogIkl6cmXFvmkiLAotICAiQ29weSBzZWxlY3Rpb24iOiAiS29waXJhaiIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJQcmlsZXBpIiwKLSAgIk9LIjogIlYgcmVkdSIsCi0gICJDYW5jZWwiOiAiUHJla2xpxI1pIiwKLSAgIlBhdGgiOiAiUG90IiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJTaSB2IHRla3N0b3ZuZW0gbmHEjWludS4gIFVwb3JhYmkgWzw+XSBndW1iIHphIHBya2xvcCBuYXphaiBuYSBXWVNJV1lHLiIKLX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3NyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvc3IuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxM2RkN2UuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvc3IuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAot77u/Ly8gSTE4TiBjb25zdGFudHMKLQotLy8gTEFORzogInNoIiwgRU5DT0RJTkc6IFVURi04IHwgSVNPLTg4NTktNQotLy8gQXV0aG9yOiBManViYSBSYW5rb3ZpxIcsIGh0dHA6Ly93d3cucmFua292aWMubmV0L2xqdWJhcgotCi0vLyBGT1IgVFJBTlNMQVRPUlM6Ci0vLwotLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FCi0vLyAgICAgIChhdCBsZWFzdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3MpCi0vLwotLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7Ci0vLyAgICAgIChpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgcGxlYXNlIGluY2x1ZGUgYSBjb21tZW50Ci0vLyAgICAgICB0aGF0IHN0YXRlcyB3aGF0IGVuY29kaW5nIGlzIG5lY2Vzc2FyeS4pCi0KLXsKLQkJIkJvbGQiOiAi0JzQsNGB0L3QviIsCi0JCSJJdGFsaWMiOiAi0JrRg9GA0LfQuNCyIiwKLQkJIlVuZGVybGluZSI6ICLQn9C+0LTQstGD0YfQtdC90L4iLAotCQkiU3RyaWtldGhyb3VnaCI6ICLQn9GA0LXRhtGA0YLQsNC90L4iLAotCQkiU3Vic2NyaXB0IjogItCY0L3QtNC10LrRgS3RgtC10LrRgdGCIiwKLQkJIlN1cGVyc2NyaXB0IjogItCV0LrRgdC/0L7QvdC10L3Rgi3RgtC10LrRgdGCIiwKLQkJIkp1c3RpZnkgTGVmdCI6ICLQoNCw0LLQvdCw0ZrQtSDRg9C70LXQstC+IiwKLQkJIkp1c3RpZnkgQ2VudGVyIjogItCg0LDQstC90LDRmtC1INC/0L4g0YHQuNC80LXRgtGA0LDQu9C4IiwKLQkJIkp1c3RpZnkgUmlnaHQiOiAi0KDQsNCy0L3QsNGa0LUg0YPQtNC10YHQvdC+IiwKLQkJIkp1c3RpZnkgRnVsbCI6ICLQn9GD0L3QviDRgNCw0LLQvdCw0ZrQtSIsCi0JCSJPcmRlcmVkIExpc3QiOiAi0JvQuNGB0YLQsCDRgdCwINGA0LXQtNC90LjQvCDQsdGA0L7RmNC10LLQuNC80LAiLAotCQkiQnVsbGV0ZWQgTGlzdCI6ICLQm9C40YHRgtCwINGB0LAg0YHQuNC80LHQvtC70LjQvNCwIiwKLQkJIkRlY3JlYXNlIEluZGVudCI6ICLQodC80LDRmtC4INGD0LLQu9Cw0YfQtdGa0LUiLAotCQkiSW5jcmVhc2UgSW5kZW50IjogItCf0L7QstC10ZvQsNGYINGD0LLQu9Cw0YfQtdGa0LUiLAotCQkiRm9udCBDb2xvciI6ICLQkdC+0ZjQsCDRgdC70L7QstCwIiwKLQkJIkJhY2tncm91bmQgQ29sb3IiOiAi0JHQvtGY0LAg0L/QvtC30LDQtNC40L3QtSIsCi0JCSJIb3Jpem9udGFsIFJ1bGUiOiAi0KXQvtGA0LjQt9C+0L3RgtCw0LvQvdCwINC70LjQvdC40ZjQsCIsCi0JCSJJbnNlcnQgV2ViIExpbmsiOiAi0LTQvtC00LDRmCDQstC10LEg0LvQuNC90LoiLAotCQkiSW5zZXJ0L01vZGlmeSBJbWFnZSI6ICLQtNC+0LTQsNGYL9C/0YDQvtC80LXQvdC4INGB0LvQuNC60YMiLAotCQkiSW5zZXJ0IFRhYmxlIjogItCj0LHQsNGG0Lgg0YLQsNCx0LXQu9GDIiwKLQkJIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICLQn9GA0LXQsdCw0YbQuCDQvdCwINC/0YDQuNC60LDQtyDQpdCi0JzQmyDQutC+0LTQsCIsCi0JCSJFbmxhcmdlIEVkaXRvciI6ICLQn9C+0LLQtdGb0LDRmCDQtdC00LjRgtC+0YAiLAotCQkiQWJvdXQgdGhpcyBlZGl0b3IiOiAi0J4g0L7QstC+0Lwg0LXQtNC40YLQvtGA0YMiLAotCQkiSGVscCB1c2luZyBlZGl0b3IiOiAi0J/QvtC80L7RmyDQv9GA0Lgg0LrQvtGA0LjRiNGb0LXRmtGDINC10LTQuNGC0L7RgNCwIiwKLQkJIkN1cnJlbnQgc3R5bGUiOiAi0JLQsNC20LXRm9C4INGB0YLQuNC7IiwKLQkJIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogItCf0L7QvdC40YjRgtCw0LLQsCDQv9C+0YHQu9C10LTRmtGDINGA0LDQtNGa0YMiLAotCQkiUmVkb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi0JLRgNCw0ZvQsCDQv9C+0YHQu9C10LTRmtGDINGA0LDQtNGa0YMiLAotCQkiQ3V0IHNlbGVjdGlvbiI6ICLQmNGB0LXRhtC4INC40LfQsNCx0YDQsNC90L4iLAotCQkiQ29weSBzZWxlY3Rpb24iOiAi0JrQvtC/0LjRgNCw0Zgg0LjQt9Cw0LHRgNCw0L3QviIsCi0JCSJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICLQl9Cw0LvQtdC/0Lgg0LjQtyDQutC70LjQv9Cx0L7RgNC00LAiLAotCQkiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAi0J/RgNCw0LLQsNGGINGBINC70LXQstCwINC90LAg0LTQtdGB0L3QviIsCi0JCSJEaXJlY3Rpb24gcmlnaHQgdG8gbGVmdCI6ICLQn9GA0LDQstCw0YYg0YEg0LTQtdGB0L3QsCDQvdCwINC70LXQstC+IiwKLSAgICAgICAgIlJlbW92ZSBmb3JtYXR0aW5nIjogItCj0LrQu9C+0L3QuCDRhNC+0YDQvNCw0YLQuNGA0LDRmtC1IiwKLSAgICAgICAgIlNlbGVjdCBhbGwiOiAi0JjQt9Cw0LHQtdGA0Lgg0YHQstC1IiwKLSAgICAgICAgIlByaW50IGRvY3VtZW50IjogItCo0YLQsNC80L/QsNGYINC00L7QutGD0LzQtdC90YIiLAotICAgICAgICAiQ2xlYXIgTVNPZmZpY2UgdGFncyI6ICLQntCx0YDQuNGI0LggTVNPZmZpY2Ug0YLQsNCz0L7QstC1IiwKLSAgICAgICAgIkNsZWFyIElubGluZSBGb250IFNwZWNpZmljYXRpb25zIjogItCe0LHRgNC40YjQuCDQv9GA0LjQvNC10ZrQtdC90LUg0L7RgdC+0LHQuNC90LUg0YTQvtC90YLQsCIsCi0gICAgICAgICJTcGxpdCBCbG9jayI6ICLQn9C+0LTQtdC70Lgg0LHQu9C+0LoiLAotICAgICAgICAiVG9nZ2xlIEJvcmRlcnMiOiAi0J/RgNC10LHQsNGG0Lgg0L7QutCy0LjRgNC90LUg0LvQuNC90LjRmNC1IiwKLQotICAgICAgICAiJiM4MjEyOyBmb3JtYXQgJiM4MjEyOyI6ICImIzgyMTI7IEZvcm1hdCAmIzgyMTI7IiwKLSAgICAgICAgIkhlYWRpbmcgMSI6ICLQl9Cw0LPQu9Cw0LLRmdC1IDEiLAotICAgICAgICAiSGVhZGluZyAyIjogItCX0LDQs9C70LDQstGZ0LUgMiIsCi0gICAgICAgICJIZWFkaW5nIDMiOiAi0JfQsNCz0LvQsNCy0ZnQtSAzIiwKLSAgICAgICAgIkhlYWRpbmcgNCI6ICLQl9Cw0LPQu9Cw0LLRmdC1IDQiLAotICAgICAgICAiSGVhZGluZyA1IjogItCX0LDQs9C70LDQstGZ0LUgNSIsCi0gICAgICAgICJIZWFkaW5nIDYiOiAi0JfQsNCz0LvQsNCy0ZnQtSA2IiwKLSAgICAgICAgIk5vcm1hbCI6ICLQvtCx0LjRh9Cw0L0iLAotICAgICAgICAiQWRkcmVzcyI6ICLQsNC00YDQtdGB0LAiLAotICAgICAgICAiRm9ybWF0dGVkIjogItGE0L7RgNC80LDRgtC40YDQsNC9IiwJCQotCQkKLSAgICAgICAgLy8gZGlhbG9ncwotCQkiT0siOiAiT0siLAotCQkiQ2FuY2VsIjogItCf0L7QvdC40YjRgtC4IiwKLQkJIlBhdGgiOiAi0J/Rg9GC0LDRmtCwIiwKLQkJIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICAgICLQndCw0LvQsNC30LjRgtC1INGB0LUg0YMg0KLQldCa0KHQoiDRgNC10LbQuNC80YMuICDQmtC+0YDQuNGB0YLQuNGC0LUgWzw+XSDQtNGD0LPQvNC1INC30LAg0L/QvtCy0YDQsNGC0LDQuiDQvdCwINCo0JLQotCY0JQgKFdZU0lXWUcpLiIsCi0KLQkJIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iOiAi0JTRg9Cz0LzQtSAn0LfQsNC70LXQv9C4JyDQvdC1INGA0LDQtNC4INGDINC/0YDQtdGC0YDQsNC20LjQstCw0YfQuNC80LAg0L/QvtGA0L7QtNC40YbQtSBNb3ppbGxhICjQuNC3INGA0LDQt9C70L7Qs9CwINGB0LjQs9GD0YDQvdC+0YHRgtC4KS4g0J/RgNC40YLQuNGB0L3QuNGC0LUgQ1RSTC1WINC90LAg0YLQsNGB0YLQsNGC0YPRgNC4INC00LAg0LTQuNGA0LXQutGC0L3QviDQt9Cw0LvQtdC/0LjRgtC1LiIsCi0JCQotICAgICAgICAiQWxpZ25tZW50OiI6ICLQoNCw0LLQvdCw0ZrQtSIsCi0gICAgICAgICJOb3Qgc2V0IjogItCd0LjRmNC1INC/0L7RgdGC0LDQstGZ0LXQvdC+IiwKLSAgICAgICAgIkxlZnQiOiAi0JvQtdCy0L4iLAotICAgICAgICAiUmlnaHQiOiAi0JTQtdGB0L3QviIsCi0gICAgICAgICJUZXh0dG9wIjogItCS0YDRhSDRgtC10LrRgdGC0LAiLAotICAgICAgICAiQWJzbWlkZGxlIjogItCQ0L/RgdC+0LvRg9GC0L3QsCDRgdGA0LXQtNC40L3QsCIsCi0gICAgICAgICJCYXNlbGluZSI6ICLQlNC+0ZrQsCDQu9C40L3QuNGY0LAiLAotICAgICAgICAiQWJzYm90dG9tIjogItCQ0L/RgdC+0LvRg9GC0L3QviDQtNC90L4iLAotICAgICAgICAiQm90dG9tIjogItCU0L3QviIsCi0gICAgICAgICJNaWRkbGUiOiAi0KHRgNC10LTQuNC90LAiLAotICAgICAgICAiVG9wIjogItCS0YDRhSIsCi0KLSAgICAgICAgIkxheW91dCI6ICLQn9GA0LXQu9C+0LwiLAotICAgICAgICAiU3BhY2luZyI6ICLQoNCw0LfQvNCw0LoiLAotICAgICAgICAiSG9yaXpvbnRhbDoiOiAi0J/QviDRhdC+0YDQuNC30L7QvdGC0LDQu9C4IiwKLSAgICAgICAgIkhvcml6b250YWwgcGFkZGluZyI6ICLQpdC+0YDRgtC40LfQvtC90YLQsNC70L3QviDQvtC00YHRgtC+0ZjQsNGa0LUiLAotICAgICAgICAiVmVydGljYWw6IjogItCf0L4g0LLQtdGA0YLQuNC60LDQu9C4IiwKLSAgICAgICAgIlZlcnRpY2FsIHBhZGRpbmciOiAi0JLQtdGA0YLQuNC60LDQu9C90L4g0L7QtNGB0YLQvtGY0LDRmtC1IiwKLSAgICAgICAgIkJvcmRlciB0aGlja25lc3M6IjogItCU0LXQsdGZ0LjQvdCwINC+0LrQstC40YDQsCIsCi0gICAgICAgICJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIjogItCe0YHRgtCw0LLQuCDQv9GA0LDQt9C90L4g0LrQsNC0INC90LXQvNCwINC+0LrQstC40YDQsCIsCi0KLSAgICAgICAgLy8gSW5zZXJ0IExpbmsKLQkJIkluc2VydC9Nb2RpZnkgTGluayI6ICLQtNC+0LTQsNGYL9C/0YDQvtC80LXQvdC4INC70LjQvdC6IiwKLQkJIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAi0LrQvtGA0LjRgdGC0Lgg0L/QvtC00YDQsNC30YPQvNC10LLQsNC90L4iLAotCQkiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICLQndC+0LLQvtC8INC/0YDQvtC30L7RgNGDIChfYmxhbmspIiwKLQkJIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICLQmNGB0YLQuCDRhNGA0LXRmNC8IChfc2VsZikiLAotCQkiVG9wIGZyYW1lIChfdG9wKSI6ICLQk9C70LDQstC90Lgg0YTRgNC10ZjQvCAoX3RvcCkiLAotCQkiT3RoZXIiOiAi0JTRgNGD0LPQviIsCi0JCSJUYXJnZXQ6IjogItCe0YLQstC+0YDQuCDRgzoiLAotCQkiVGl0bGUgKHRvb2x0aXApOiI6ICLQndCw0LfQuNCyICh0b29sdGlwKToiLAotCQkiVVJMOiI6ICLQo9Cg0Js6IiwKLQkJIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICLQnNC+0YDQsNGC0LUg0YPQvdC10YLQuCDQo9Cg0Jsg0L3QsCDQutC+0ZjQuCDQstC+0LTQuCDQvtCy0LDRmCDQu9C40L3QuiIsCi0KLSAgICAgICAgLy8gSW5zZXJ0IFRhYmxlCi0gICAgICAgICJJbnNlcnQgVGFibGUiOiAi0KPQsdCw0YbQuCDRgtCw0LHQtdC70YMiLAotICAgICAgICAiUm93czoiOiAi0KDQtdC00L7QstC4IiwKLSAgICAgICAgIk51bWJlciBvZiByb3dzIjogItCR0YDQvtGYINGA0LXQtNC+0LLQsCIsCi0gICAgICAgICJDb2xzOiI6ICLQmtC+0LvQvtC90LUiLAotICAgICAgICAiTnVtYmVyIG9mIGNvbHVtbnMiOiAi0JHRgNC+0Zgg0LrQvtC70L7QvdCwIiwKLSAgICAgICAgIldpZHRoOiI6ICLQqNC40YDQuNC90LAiLAotICAgICAgICAiV2lkdGggb2YgdGhlIHRhYmxlIjogItCo0LjRgNC40L3QsCDRgtCw0LHQtdC70LUiLAotICAgICAgICAiUGVyY2VudCI6ICLQn9GA0L7RhtC10L3QsNGC0LAiLAotICAgICAgICAiUGl4ZWxzIjogItCf0LjQutGB0LXQu9CwIiwKLSAgICAgICAgIkVtIjogItCV0LwiLAotICAgICAgICAiV2lkdGggdW5pdCI6ICLQiNC10LTQuNC90LjRhtCwINGI0LjRgNC40L3QtSIsCi0gICAgICAgICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogItCk0LjQutGB0LjRgNCw0L3QsCDRiNC40YDQuNC90LAg0LrQvtC70L7QvdC1IiwKLSAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiOiAi0J/QvtGB0YLQsNCy0ZnQsNGa0LUg0L7QstC1INGC0LDQsdC10LvQtSIsCi0gICAgICAgICJDZWxsIHNwYWNpbmc6IjogItCg0LDQt9C80LDQuiDQuNC30LzQtdGS0YMg0ZvQtdC70LjRmNCwIiwKLSAgICAgICAgIlNwYWNlIGJldHdlZW4gYWRqYWNlbnQgY2VsbHMiOiAi0KDQsNC30LzQsNC6INC40LfQvNC10ZLRgyDQvdCw0YHQv9GA0LDQvNC90LjRhSDRm9C10LvQuNGY0LAiLAotICAgICAgICAiQ2VsbCBwYWRkaW5nOiI6ICLQo9C90YPRgtGA0LDRiNGa0LAg0L7QtNGB0YLQvtGY0LDRmtCwINC+0LQg0LjQstC40YbQsCDRm9C10LvQuNGY0LUiLAotICAgICAgICAiU3BhY2UgYmV0d2VlbiBjb250ZW50IGFuZCBib3JkZXIgaW4gY2VsbCI6ICLQoNCw0YHRgtC+0ZjQsNGa0LUg0LjQt9C80LXRktGDINGB0LDQtNGA0LbQsNGY0LAg0YMg0ZvQtdC70LjRmNC4INC4INGa0LXQvdC+0LMg0L7QutCy0LjRgNCwIiwKLQotICAgICAgICAvLyBJbnNlcnQgSW1hZ2UKLSAgICAgICAgIkluc2VydCBJbWFnZSI6ICLQo9Cx0LDRhtC4INGB0LvQuNC60YMiLAotICAgICAgICAiSW1hZ2UgVVJMOiI6ICLQo9Cg0Jsg0YHQu9C40LrQtSIsCi0gICAgICAgICJFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUiOiAi0KPQvdC10YHQuNGC0LUg0KPQoNCbINGB0LvQuNC60LUg0L7QstC00LUiLAotICAgICAgICAiUHJldmlldyI6ICLQn9GA0LXQs9C70LXQtCIsCi0gICAgICAgICJQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3ciOiAi0J/RgNC10LPQu9C10LTQsNGYINGB0LvQuNC60YMg0YMg0L3QvtCy0L7QvCDQv9GA0L7Qt9C+0YDRgyIsCi0gICAgICAgICJBbHRlcm5hdGUgdGV4dDoiOiAi0LDQu9GC0LXRgNC90LDRgtC40LLQvdC4INGC0LXQutGB0YIiLAotICAgICAgICAiRm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpbWFnZXMiOiAi0JfQsCDQv9GA0LXRgtGA0LDQttC40LLQsNGH0LUg0LrQvtGY0Lgg0L3QtSDQv9C+0LTRgNC20LDQstCw0ZjRgyDRgdC70LjQutC1IiwKLSAgICAgICAgIlBvc2l0aW9uaW5nIG9mIHRoaXMgaW1hZ2UiOiAi0J/QvtGB0YLQsNCy0ZnQsNGa0LUg0L7QstC1INGB0LvQuNC60LUiLAotICAgICAgICAiSW1hZ2UgUHJldmlldzoiOiAi0J/RgNC10LPQu9C10LQg0YHQu9C40LrQtSIsCi0KLSAgICAgICAgLy8gU2VsZWN0IENvbG9yIHBvcHVwCi0JCSJTZWxlY3QgQ29sb3IiOiAi0JjQt9Cw0LHQtdGA0Lgg0LHQvtGY0YMiCi19OwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvc3YuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9zdi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFhZjQ5ZS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy9zdi5qcworKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotLy8gTEFORzogInN2IiwgRU5DT0RJTkc6IFVURi04Ci0KLS8vIFN3ZWRpc2ggdmVyc2lvbiBmb3IgaHRtbEFyZWEgdjMuMAotLy8gSW5pdGl0YWwgdHJhbnNsYXRpb24gYnkgcGF0IDxwYXRAZW5ndmFsbC5udT4KLS8vIFN5bmNlZCB3aXRoIGFkZGl0aW9uYWwgY29udGFudHMgaW4gcmV2LiA0NzcgKE1hciAyMDA2KSBieSBUaG9tYXMgTG9vIDx0bG9vQHNhbHRzdG9ybS5uZXQ+Ci0KLXsKLSAgIkJvbGQiOiAiRmV0IiwKLSAgIkl0YWxpYyI6ICJLdXJzaXYiLAotICAiVW5kZXJsaW5lIjogIlVuZGVyc3RydWtlbiIsCi0gICJTdHJpa2V0aHJvdWdoIjogIkdlbm9tc3RydWtlbiIsCi0gICJTdWJzY3JpcHQiOiAiTmVkc8Okbmt0IiwKLSAgIlN1cGVyc2NyaXB0IjogIlVwcGjDtmpkIiwKLSAgIkp1c3RpZnkgTGVmdCI6ICJWw6Ruc3Rlcmp1c3RlcmEiLAotICAiSnVzdGlmeSBDZW50ZXIiOiAiQ2VudHJlcmEiLAotICAiSnVzdGlmeSBSaWdodCI6ICJIw7ZnZXJqdXN0ZXJhIiwKLSAgIkp1c3RpZnkgRnVsbCI6ICJNYXJnaW5hbGp1c3RlcmEiLAotICAiT3JkZXJlZCBMaXN0IjogIk51bXJlcmFkIGxpc3RhIiwKLSAgIkJ1bGxldGVkIExpc3QiOiAiUHVua3RsaXN0YSIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiTWluc2thIGluZHJhZyIsCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAiw5ZrYSBpbmRyYWciLAotICAiRm9udCBDb2xvciI6ICJUZXh0ZsOkcmciLAotICAiQmFja2dyb3VuZCBDb2xvciI6ICJCYWtncnVuZHNmw6RyZyIsCi0gICJIb3Jpem9udGFsIFJ1bGUiOiAiVsOlZ3LDpHQgbGluamUiLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIkluZm9nYSBsw6RuayIsCi0gICJJbnNlcnQvTW9kaWZ5IEltYWdlIjogIkluZm9nYSBiaWxkIiwKLSAgIlRvZ2dsZSBIVE1MIFNvdXJjZSI6ICJWaXNhIGvDpGxsa29kIiwKLSAgIkVubGFyZ2UgRWRpdG9yIjogIlZpc2EgaSBlZ2V0IGbDtm5zdGVyIiwKLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIk9tIGRlbm5hIGVkaXRvciIsCi0gICJIZWxwIHVzaW5nIGVkaXRvciI6ICJIasOkbHAiLAotICAiQ3VycmVudCBzdHlsZSI6ICJOdXZhcmFuZGUgc3RpbCIsCi0KLSAgIlVuZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIsOFbmdyYSBrb21tYW5kbyIsCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICJVcHByZXBhIGtvbW1hbmRvIiwKLSAgIlNlbGVjdCBhbGwiOiAiTWFya2VyYSBhbGx0IiwKLSAgIlByaW50IGRvY3VtZW50IjogIlNrcml2IHV0IiwKLSAgIkNsZWFyIE1TT2ZmaWNlIHRhZ3MiOiAiU3TDpGRhIGJvcnQgTVMgT2ZmaWNlIHRhZ2dhciIsCi0gICJDbGVhciBJbmxpbmUgRm9udCBTcGVjaWZpY2F0aW9ucyI6ICJSZW5zYSBpbmLDpGRkYWQgdHlwc25pdHRzaW5mb3JtYXRpb24iLAotICAiUmVtb3ZlIGZvcm1hdHRpbmciOiAiUmVuc2EgZm9ybWF0dGVyaW5nIiwKLSAgIlRvZ2dsZSBCb3JkZXJzIjogIk9iamVrdHJhbWFyIiwKLSAgIlNwbGl0IEJsb2NrIjogIkRlbGEgYmxvY2siLAotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiVsOkbnN0ZXIgdGlsbCBow7ZnZXIiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiSMO2Z2VyIHRpbGwgdsOkbnN0ZXIiLAotCi0gICJJbnNlcnQvT3ZlcndyaXRlIjogIkluZm9nYS9Ta3JpdiDDtnZlciIsCi0gICJPSyI6ICJPSyIsCi0gICJDYW5jZWwiOiAiQXZicnl0IiwKLSAgIlBhdGgiOiAiT2JqZWt0IiwKLSAgIllvdSBhcmUgaW4gVEVYVCBNT0RFLiAgVXNlIHRoZSBbPD5dIGJ1dHRvbiB0byBzd2l0Y2ggYmFjayB0byBXWVNJV1lHLiI6ICJEdSBiZWZpbm5lciBkaWcgaSB0ZXhsw6RnZS4gS2xpY2thIHDDpSBpa29uZW4gWzw+XSBvdmFuIGbDtnIgYXR0IHbDpHhsYSB0aWxsYmFrYSB0aWxsIFdZU0lXSUcgbMOkZ2UiLAotICAiVGhlIGZ1bGwgc2NyZWVuIG1vZGUgaXMga25vd24gdG8gY2F1c2UgcHJvYmxlbXMgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciwgZHVlIHRvIGJyb3dzZXIgYnVncyB0aGF0IHdlIHdlcmVuIjogIlZpc25pbmcgaSBmdWxsc2vDpHJtc2zDpGdhIGZ1bmdlcmFyIGTDpWxpZ3QgaSBkaW4gd2VibMOkc2FyZS4gTcO2amxpZ2EgcHJvYmxlbSByZXN1bHRlcmFyIGkgZW4gcnlja2lnIGVkaXRvciwgc2FrbmFkZSBlZGl0b3JmdW5rdGlvbmVyIG9jaC9lbGxlciBhdHQgd2VibMOkc2FyZW4ga3Jhc2NoYXIuIE9tIGR1IGFudsOkbmRlciBXaW5kb3dzIDk1Lzk4IGZpbm5zIG9ja3PDpSBtw7ZqbGlnaGV0ZW4gYXR0IFdpbmRvd3Mga3Jhc2NoYXIuXG5cblRyeWNrICIsCi0gICJUaGUgUGFzdGUgYnV0dG9uIGRvZXMgbm90IHdvcmsgaW4gTW96aWxsYSBiYXNlZCB3ZWIgYnJvd3NlcnMgKHRlY2huaWNhbCBzZWN1cml0eSByZWFzb25zKS4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIjogIkRlbm5hIGtuYXBwIGZ1bmdlcmFyIGVqIGkgTW96aWxsYWJhc2VyYWQgd2VibMOkc2FyZSwgYW52w6RuZCBpc3TDpGxsZXQgc25hYmJ0YW5nZW50ZXJuYSBDVFJMLVYgcMOlIHRhbmdlbnRib3JkZXQgZsO2ciBhdHQga2xpc3RyYSBpbi4iLAotCi0gICJJbnNlcnQvTW9kaWZ5IExpbmsiOiAiUmVkaWdlcmEgbMOkbmsiLAotICAiTmV3IHdpbmRvdyAoX2JsYW5rKSI6ICJOeXR0IGbDtm5zdGVyIChfYmxhbmspIiwKLSAgIk5vbmUgKHVzZSBpbXBsaWNpdCkiOiAiSW5nZW4gKGFudsOkbmQgc3RhbmRhcmRpbnN0w6RsbGluZykiLAotICAiT3RoZXIiOiAiQW5uYW4iLAotICAiU2FtZSBmcmFtZSAoX3NlbGYpIjogIlNhbW1hIHJhbSAoX3NlbGYpIiwKLSAgIlRhcmdldDoiOiAiTcOlbDoiLAotICAiVGl0bGUgKHRvb2x0aXApOiI6ICJUaXRlbCAodG9vbHRpcCk6IiwKLSAgIlRvcCBmcmFtZSAoX3RvcCkiOiAiVG9wcHJhbSAoX3RvcCkiLAotICAiVVJMOiI6ICJTw7ZrdsOkZzoiLAotICAiWW91IG11c3QgZW50ZXIgdGhlIFVSTCB3aGVyZSB0aGlzIGxpbmsgcG9pbnRzIHRvIjogIkR1IG3DpXN0YSBhbmdlIGVuIGFkcmVzcyB0aWxsIHZpbGtlbiBsw6Rua2VuIHNrYWxsIHBla2EgcMOlIiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgdHlwZWZhY2VzPyI6ICJSYWRlcmEgYWxsYSB0eXBzbml0dHNpbmZvcm1hdGlvbiA/IiwKLSAgIldvdWxkIHlvdSBsaWtlIHRvIGNsZWFyIGZvbnQgc2l6ZXM/IjogIlJhZGVyYSBhbGxhIGZvbnRzdG9ybGVrYXIgPyIsCi0gICJXb3VsZCB5b3UgbGlrZSB0byBjbGVhciBmb250IGNvbG91cnM/IjogIlRhIGJvcnQgYWxsIHRleHRmw6RyZ2VyID8iLAotCi0gICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGluZyBhIGxpbmsiOiAiRHUgbcOlc3RhIG1hcmtlcmEgZXR0IG9iamVrdCBhdHQgYXBwbGljZXJhIGzDpG5rZW4gcMOlISIsCi0KLSAgLy8gSW5zZXJ0IFRhYmxlCi0gICJJbnNlcnQgVGFibGUiOiAiSW5mb2dhIHRhYmVsbCIsCi0gICJSb3dzOiI6ICJSYWRlcjoiLAotICAiTnVtYmVyIG9mIHJvd3MiOiAiQW50YWwgcmFkZXIiLAotICAiQ29sczoiOiAiS29sdW1uZXI6IiwKLSAgIk51bWJlciBvZiBjb2x1bW5zIjogIkFudGFsIGtvbHVtbmVyIiwKLSAgIldpZHRoOiI6ICJCcmVkZDoiLAotICAiV2lkdGggb2YgdGhlIHRhYmxlIjogIlRhYmVsbGJyZWRkIiwKLSAgIlBlcmNlbnQiOiAiUHJvY2VudCIsCi0gICJQaXhlbHMiOiAiUGl4bGFyIiwKLSAgIkVtIjogIiIsCi0gICJXaWR0aCB1bml0IjogIkJyZWRkZW5oZXRlciIsCi0gICJGaXhlZCB3aWR0aCBjb2x1bW5zIjogIkZpeGVyYWQgYnJlZGQiLAotICAiQWxpZ25tZW50OiI6ICJNYXJnaW5hbGp1c3RlcmluZyIsCi0gICJQb3NpdGlvbmluZyBvZiB0aGlzIHRhYmxlIjogIlRhYmVsbHBvc2l0aW9uIiwKLSAgIkJvcmRlciB0aGlja25lc3M6IjogIlJhbXRqb2NrbGVrIiwKLSAgIkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiOiAiTMOkbW5hIGbDpGx0ZXQgdG9tdCBmw7ZyIGF0dCB1bmR2aWthIHJhbWFyIiwKLSAgIlNwYWNpbmciOiAiQ2VsbGVnZW5za2FwZXIiLAotICAiQ2VsbCBzcGFjaW5nOiI6ICJDZWxsbWFyZ2luYWxlcjoiLAotICAiU3BhY2UgYmV0d2VlbiBhZGphY2VudCBjZWxscyI6ICJVdHJ5bW1lIG1lbGxhbiBjZWxsZXIiLAotICAiQ2VsbCBwYWRkaW5nOiI6ICJDZWxsaW5kcmFnOiIsCi0gICJTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsIjogIlV0cnltbWUgbWVsbGFuIHJhbSBvY2ggY2VsbGlubmVow6VsbCIsCi0gICJZb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiByb3dzIjogIkFuZ2UgZW50YWwgcmFkZXIiLAotICAiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyI6ICJBbmdlIGFudGFsIGtvbHVtbmVyIiwKLQotICAvLyBFZGl0b3IgSGVscAotICAiS2V5Ym9hcmQgc2hvcnRjdXRzIjogIlNuYWJidGFuZ2VudGVyIiwKLSAgIlRoZSBlZGl0b3IgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBrZXkgY29tYmluYXRpb25zOiI6ICJFZGl0b3JuIG55dHRqYXIgZsO2bGphbmRlIGtvbWJpbmF0aW9uZXI6IiwKLSAgIm5ldyBwYXJhZ3JhcGgiOiAiTnkgcGFyYWdyYWYgIiwKLSAgImluc2VydCBsaW5lYnJlYWsiOiAiSW5mb2dhIHJhZGJyeXRuaW5nICIsCi0gICJTZXQgZm9ybWF0IHRvIHBhcmFncmFwaCI6ICJBa3RpdmVyYSBwYXJhZ3JhZmzDpGdlIiwKLSAgIkNsZWFuIGNvbnRlbnQgcGFzdGVkIGZyb20gV29yZCI6ICJSZW5zYSBpbm5laMOlbGwgaW5rbGlzdHJhdCBmcsOlbiBNUyBXb3JkIiwKLSAgIkhlYWRpbmdzIjogIlNrYXBhIHN0YW5kYXJkcnVicmlrIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiS2xpcHAgdXQgbWFya2VyaW5nIiwKLSAgIkNvcHkgc2VsZWN0aW9uIjogIktvcGllcmEgIG1hcmtlcmluZyIsCi0gICJQYXN0ZSBmcm9tIGNsaXBib2FyZCI6ICJLbGlzdHJhIGluIiwKLSAgIkNsb3NlIjogIlN0w6RuZyIsCi0KLSAgLy8gTG9hZGluZyBtZXNzYWdlcwotICAiTG9hZGluZyBpbiBwcm9ncmVzcy4gUGxlYXNlIHdhaXQgISI6ICJFZGl0b3JuIGxhZGRhcy4gVsOkbnRhLi4uIiwKLSAgIkNvbnN0cnVjdGluZyBtYWluIG9iamVjdCI6ICJTa2FwYXIgaHV2dWRvYmpla3QiLAotICAiQ3JlYXRlIFRvb2xiYXIiOiAiU2thcGFyIHZlcmt0eWdzcGFuZWwiLAotICAiUmVnaXN0ZXIgcGFuZWwgcmlnaHQiOiAiUmVnaXN0ZXJhciBwYW5lbCBow7ZnZXIiLAotICAiUmVnaXN0ZXIgcGFuZWwgbGVmdCI6ICJSZWdpc3RlcmFyIHBhbmVsIHbDpG5zdGVyIiwKLSAgIlJlZ2lzdGVyIHBhbmVsIHRvcCI6ICJSZWdpc3RlcmFyIHRvcHBhbmVsIiwKLSAgIlJlZ2lzdGVyIHBhbmVsIGJvdHRvbSI6ICJSZWdpc3RlcmFyIGZvdHBhbmVsIgotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvdGguanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy90aC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGExMTZhZi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbGFuZy90aC5qcworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzDQotDQotLy8gTEFORzogInRoIiwgRU5DT0RJTkc6IFVURi04DQotLy8gQXV0aG9yOiBTdWNoaW4gUHJhc29uZ2J1bmRpdCwgPHN1Y2hpbkBqb29sc29mdC5jb20+DQotDQotLy8gRk9SIFRSQU5TTEFUT1JTOg0KLS8vDQotLy8gICAxLiBQTEVBU0UgUFVUIFlPVVIgQ09OVEFDVCBJTkZPIElOIFRIRSBBQk9WRSBMSU5FDQotLy8gICAgICAoYXQgbGVhc3QgYSB2YWxpZCBlbWFpbCBhZGRyZXNzKQ0KLS8vDQotLy8gICAyLiBQTEVBU0UgVFJZIFRPIFVTRSBVVEYtOCBGT1IgRU5DT0RJTkc7DQotLy8gICAgICAoaWYgdGhpcyBpcyBub3QgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGEgY29tbWVudA0KLS8vICAgICAgIHRoYXQgc3RhdGVzIHdoYXQgZW5jb2RpbmcgaXMgbmVjZXNzYXJ5LikNCi0NCi17DQotICAiQm9sZCI6ICLguJXguLHguKfguKvguJnguLIiLA0KLSAgIkl0YWxpYyI6ICLguJXguLHguKfguYDguK3guLXguKLguIciLA0KLSAgIlVuZGVybGluZSI6ICLguILguLXguJTguYDguKrguYnguJnguYPguJXguYkiLA0KLSAgIlN0cmlrZXRocm91Z2giOiAi4LiC4Li14LiU4LiX4Lix4LiaIiwNCi0gICJTdWJzY3JpcHQiOiAi4LiV4Lix4Lin4Lir4LmJ4Lit4LiiIiwNCi0gICJTdXBlcnNjcmlwdCI6ICLguJXguLHguKfguKLguIEiLA0KLSAgIkp1c3RpZnkgTGVmdCI6ICLguIjguLHguJTguIrguLTguJTguIvguYnguLLguKIiLA0KLSAgIkp1c3RpZnkgQ2VudGVyIjogIuC4iOC4seC4lOC4geC4tuC5iOC4h+C4geC4peC4suC4hyIsDQotICAiSnVzdGlmeSBSaWdodCI6ICLguIjguLHguJTguIrguLTguJTguILguKfguLIiLA0KLSAgIkp1c3RpZnkgRnVsbCI6ICLguIjguLHguJTguYDguJXguYfguKHguILguK3guJoiLA0KLSAgIk9yZGVyZWQgTGlzdCI6ICLguYDguKXguILguKXguLPguJTguLHguJoiLA0KLSAgIkJ1bGxldGVkIExpc3QiOiAi4Lil4Liz4LiU4Lix4LiaIiwNCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAi4Lil4LiU4Lii4LmI4Lit4Lir4LiZ4LmJ4LiyIiwNCi0gICJJbmNyZWFzZSBJbmRlbnQiOiAi4LmA4Lie4Li04LmI4Lih4Lii4LmI4Lit4Lir4LiZ4LmJ4LiyIiwNCi0gICJGb250IENvbG9yIjogIuC4quC4teC4guC4reC4muC5geC4muC4muC4reC4seC4geC4qeC4oyIsDQotICAiQmFja2dyb3VuZCBDb2xvciI6ICLguKrguLXguJ7guLfguYnguJnguKvguKXguLHguIciLA0KLSAgIkhvcml6b250YWwgUnVsZSI6ICLguYDguKrguYnguJnguIHguLbguYjguIfguIHguKXguLLguIciLA0KLSAgIkluc2VydCBXZWIgTGluayI6ICLguLTguYDguJ7guLTguYjguKHguKXguLTguYnguIfguITguYwiLA0KLSAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAi4LmA4Lie4Li04LmI4LihL+C5geC4geC5ieC5hOC4guC4oOC4suC4niIsDQotICAiSW5zZXJ0IFRhYmxlIjogIuC5gOC4nuC4tOC5iOC4oeC4leC4suC4o+C4suC4hyIsDQotICAiVG9nZ2xlIEhUTUwgU291cmNlIjogIuC4quC4peC4seC4muC4geC4suC4o+C5geC4quC4lOC4h+C5guC4hOC5ieC4lCBIVE1MIiwNCi0gICJFbmxhcmdlIEVkaXRvciI6ICLguILguKLguLLguKLguYPguKvguYnguYDguJXguYfguKHguIjguK0iLA0KLSAgIkFib3V0IHRoaXMgZWRpdG9yIjogIuC5gOC4geC4teC5iOC4ouC4p+C4geC4seC4muC5guC4m+C4o+C5geC4geC4o+C4oeC4meC4teC5iSIsDQotICAiSGVscCB1c2luZyBlZGl0b3IiOiAi4LiB4Liy4Lij4LmD4LiK4LmJ4LiH4Liy4LiZ4LmC4Lib4Lij4LmB4LiB4Lij4LihIiwNCi0gICJDdXJyZW50IHN0eWxlIjogIuC4o+C4ueC4m+C5geC4muC4muC4m+C4seC4iOC4iOC4uOC4muC4seC4mSIsDQotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAi4Lii4LmJ4Lit4LiZ4LiB4Lil4Lix4LiaIiwNCi0gICJSZWRvZXMgeW91ciBsYXN0IGFjdGlvbiI6ICLguJfguLPguIvguYnguLMiLA0KLSAgIkN1dCBzZWxlY3Rpb24iOiAi4LiV4Lix4LiU4Liq4LmI4Lin4LiZ4LiX4Li14LmI4LmA4Lil4Li34Lit4LiBIiwNCi0gICJDb3B5IHNlbGVjdGlvbiI6ICLguKrguLPguYDguJnguLLguKrguYjguKfguJnguJfguLXguYjguYDguKXguLfguK3guIEiLA0KLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIuC4p+C4suC4h+C4iOC4suC4geC4hOC4peC4tOC4m+C4muC4reC4o+C5jOC4lCIsDQotICAiT0siOiAi4LiV4LiB4Lil4LiHIiwNCi0gICJDYW5jZWwiOiAi4Lii4LiB4LmA4Lil4Li04LiBIiwNCi0gICJQYXRoIjogIuC5gOC4quC5ieC4meC4l+C4suC4hyIsDQotICAiWW91IGFyZSBpbiBURVhUIE1PREUuICBVc2UgdGhlIFs8Pl0gYnV0dG9uIHRvIHN3aXRjaCBiYWNrIHRvIFdZU0lXWUcuIjogIuC4hOC4uOC4k+C4reC4ouC4ueC5iOC5g+C4meC5guC4q+C4oeC4lOC4mOC4o+C4o+C4oeC4lOC4siDguIHguJTguJfguLXguYjguJvguLjguYjguKEgWzw+XSDguYDguJ7guLfguYjguK3guKrguKXguLHguJrguIHguKXguLHguJrguYTguJvguKLguLHguIfguYLguKvguKHguJTguJ7guLTguKHguJ7guYzguIfguLLguJnguYHguJrguJrguYDguKfguLTguKPguYzguJQiDQotfQ0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9sYW5nL3ZuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvdm4uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhYTY0MTYuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xhbmcvdm4uanMKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cyA6IFZpZXRuYW1lc2UKLS8vIExBTkc6ICJlbiIsIEVOQ09ESU5HOiBVVEYtOAotLy8gQXV0aG9yOiBOZ3V54buFbiDEkMOsbmggTmFtLCA8aG5jcnlwdG9sb2dpc3RAeWFob28uY29tPgotLy8gTW9kaWZpZWQgMjEvMDcvMjAwNCBieSBQaOG6oW0gTWFpIFF1w6JuIDxwbXF1YW5ANHZuLm9yZz4KLQotewotICAiQm9sZCI6ICLEkOG6rW0iLAotICAiSXRhbGljIjogIk5naGnDqm5nIiwKLSAgIlVuZGVybGluZSI6ICJH4bqhY2ggQ2jDom4iLAotICAiU3RyaWtldGhyb3VnaCI6ICJH4bqhY2ggWMOzYSIsCi0gICJTdWJzY3JpcHQiOiAiVmnhur90IFh14buRbmcgRMaw4bubaSIsCi0gICJTdXBlcnNjcmlwdCI6ICJWaeG6v3QgTMOqbiBUcsOqbiIsCi0gICJKdXN0aWZ5IExlZnQiOiAiQ8SDbiBUcsOhaSIsCi0gICJKdXN0aWZ5IENlbnRlciI6ICJDxINuIEdp4buvYSIsCi0gICJKdXN0aWZ5IFJpZ2h0IjogIkPEg24gUGjhuqNpIiwKLSAgIkp1c3RpZnkgRnVsbCI6ICJDxINuIMSQ4buBdSIsCi0gICJPcmRlcmVkIExpc3QiOiAiRGFuaCBTw6FjaCBDw7MgVGjhu6kgVOG7sSAoMSwgMiwgMykiLAotICAiQnVsbGV0ZWQgTGlzdCI6ICJEYW5oIFPDoWNoIFBoaSBUaOG7qSBU4buxIChDaOG6pW0gxJHhuqd1IGTDsm5nKSIsCi0gICJEZWNyZWFzZSBJbmRlbnQiOiAiTMO5aSBSYSBOZ2/DoGkiLAotICAiSW5jcmVhc2UgSW5kZW50IjogIlRo4buldCBWw6BvIFRyb25nIiwKLSAgIkZvbnQgQ29sb3IiOiAiTcOgdSBDaOG7ryIsCi0gICJCYWNrZ3JvdW5kIENvbG9yIjogIk3DoHUgTuG7gW4iLAotICAiSG9yaXpvbnRhbCBSdWxlIjogIkTDsm5nIEvhursgTmdhbmciLAotICAiSW5zZXJ0IFdlYiBMaW5rIjogIlThuqFvIExpw6puIEvhur90IiwKLSAgIkluc2VydC9Nb2RpZnkgSW1hZ2UiOiAiQ2jDqG4g4bqibmgiLAotICAiSW5zZXJ0IFRhYmxlIjogIkNow6huIELhuqNuZyIsCi0gICJUb2dnbGUgSFRNTCBTb3VyY2UiOiAiQ2jhur8gxJDhu5kgTcOjIEhUTUwiLAotICAiRW5sYXJnZSBFZGl0b3IiOiAiUGjDs25nIFRvIMOUIFNv4bqhbiBUaOG6o28iLAotICAiQWJvdXQgdGhpcyBlZGl0b3IiOiAiVOG7sSBHaeG7m2kgVGhp4buHdSIsCi0gICJIZWxwIHVzaW5nIGVkaXRvciI6ICJHacO6cCDEkOG7oSIsCi0gICJDdXJyZW50IHN0eWxlIjogIsSQ4buLbmggROG6oW5nIEhp4buHbiBUaOG7nWkiLAotICAiVW5kb2VzIHlvdXIgbGFzdCBhY3Rpb24iOiAiSOG7p3kgdGhhbyB0w6FjIHRyxrDhu5tjIiwKLSAgIlJlZG9lcyB5b3VyIGxhc3QgYWN0aW9uIjogIkzhuqV5IGzhuqFpIHRoYW8gdMOhYyB24burYSBi4buPIiwKLSAgIkN1dCBzZWxlY3Rpb24iOiAiQ+G6r3QiLAotICAiQ29weSBzZWxlY3Rpb24iOiAiU2FvIGNow6lwIiwKLSAgIlBhc3RlIGZyb20gY2xpcGJvYXJkIjogIkTDoW4iLAotICAiRGlyZWN0aW9uIGxlZnQgdG8gcmlnaHQiOiAiVmnhur90IHThu6sgdHLDoWkgc2FuZyBwaOG6o2kiLAotICAiRGlyZWN0aW9uIHJpZ2h0IHRvIGxlZnQiOiAiVmnhur90IHThu6sgcGjhuqNpIHNhbmcgdHLDoWkiLAotICAiT0siOiAixJDhu5NuZyDDvSIsCi0gICJDYW5jZWwiOiAiSOG7p3kiLAotICAiVGhlIGZ1bGwgc2NyZWVuIG1vZGUgaXMga25vd24gdG8gY2F1c2UgcHJvYmxlbXMgd2l0aCBJbnRlcm5ldCBFeHBsb3JlciwgZHVlIHRvIGJyb3dzZXIgYnVncyB0aGF0IHdlIHdlcmVuIjogIkNo4bq/IMSR4buZIHBow7NuZyB0byDDtCBzb+G6oW4gdGjhuqNvIGPDsyB0aOG7gyBnw6J5IGzhu5dpIHbhu5tpIEludGVybmV0IEV4cGxvcmVyIHbDrCBt4buZdCBz4buRIGzhu5dpIGPhu6dhIHRyw6xuaCBkdXnhu4d0IG7DoHksIHbDrCB0aOG6vyBjaOG6vyDEkeG7mSBuw6B5IGPDsyB0aOG7gyBz4bq9IGtow7RuZyBjaOG6oXkuIEhp4buDbiB0aOG7iyBraMO0bmcgxJHDum5nLCBs4buZbiB44buZbiwga2jDtG5nIGPDsyDEkeG6p3kgxJHhu6cgY2jhu6ljIG7Eg25nLCB2w6AgY8WpbmcgY8OzIHRo4buDIGzDoG0gdHLDrG5oIGR1eeG7h3QgY+G7p2EgYuG6oW4gYuG7iyB04bqvdCBuZ2FuZy4gTuG6v3UgYuG6oW4gxJFhbmcgc+G7rSBk4bulbmcgV2luZG93cyA5eCBi4bqhbiBjw7MgdGjhu4MgYuG7iyBiw6FvIGzhu5dpICIsCi0gICJQYXRoIjogIsSQxrDhu51uZyBE4bqrbiIsCi0gICJZb3UgYXJlIGluIFRFWFQgTU9ERS4gIFVzZSB0aGUgWzw+XSBidXR0b24gdG8gc3dpdGNoIGJhY2sgdG8gV1lTSVdZRy4iOiAiQuG6oW4gxJFhbmcg4bufIGNo4bq/IMSR4buZIHRleHQuICBT4butIGThu6VuZyBuw7p0IFs8Pl0gxJHhu4MgY2h1eeG7g24gbOG6oWkgY2jhur8gxJHhu5kgV1lTSVdJRy4iLAotICAiQ2FuY2VsIjogIkjhu6d5IiwKLSAgIkluc2VydC9Nb2RpZnkgTGluayI6ICJUaMOqbS9DaOG7iW5oIHPhu61hIMSRxrDhu51uZyBk4bqrbiIsCi0gICJOZXcgd2luZG93IChfYmxhbmspIjogIkPhu61hIHPhu5UgbeG7m2kgKF9ibGFuaykiLAotICAiTm9uZSAodXNlIGltcGxpY2l0KSI6ICJLaMO0bmcgKHPhu60gZOG7pW5nIGltcGxpY2l0KSIsCi0gICJPSyI6ICLEkOG7k25nIMO9IiwKLSAgIk90aGVyIjogIktow6FjIiwKLSAgIlNhbWUgZnJhbWUgKF9zZWxmKSI6ICJUcsOqbiBjw7luZyBraHVuZyAoX3NlbGYpIiwKLSAgIlRhcmdldDoiOiAiTsahaSBoaeG7h24gdGjhu4s6IiwKLSAgIlRpdGxlICh0b29sdGlwKToiOiAiVGnDqnUgxJHhu4EgKGPhu6dhIGjGsOG7m25nIGThuqtuKToiLAotICAiVG9wIGZyYW1lIChfdG9wKSI6ICJLaHVuZyB0csOqbiBjw7luZyAoX3RvcCkiLAotICAiVVJMOiI6ICJVUkw6IiwKLSAgIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byI6ICJC4bqhbiBwaOG6o2kgxJFp4buBbiDEkeG7i2EgY2jhu4kgKFVSTCkgbcOgIMSRxrDhu51uZyBk4bqrbiBz4bq9IGxpw6puIGvhur90IHThu5tpIgotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xpY2Vuc2UudHh0IGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL2xpY2Vuc2UudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzc5OGNmLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9saWNlbnNlLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLWh0bWxBcmVhIExpY2Vuc2UgKGJhc2VkIG9uIEJTRCBsaWNlbnNlKQ0KLUNvcHlyaWdodCAoYykgMjAwMi0yMDA0LCBpbnRlcmFjdGl2ZXRvb2xzLmNvbSwgaW5jLg0KLUNvcHlyaWdodCAoYykgMjAwMy0yMDA0IGR5bmFyY2guY29tDQotQWxsIHJpZ2h0cyByZXNlcnZlZC4NCi0NCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCi1tb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoNCi0NCi0xKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQotICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCi0NCi0yKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsDQotICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbg0KLSAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KLQ0KLTMpIE5laXRoZXIgdGhlIG5hbWUgb2YgaW50ZXJhY3RpdmV0b29scy5jb20sIGluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCi0gICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzDQotICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQotDQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQotQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KLUlNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQotQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFDQotTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KLUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQotU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQotSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4NCi1DT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQ0KLUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQotUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQWJvdXRCb3gvQWJvdXRCb3guanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9BYm91dEJveC9BYm91dEJveC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODkxN2EwNS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9BYm91dEJveC9BYm91dEJveC5qcworKysgL2Rldi9udWxsCkBAIC0xLDE1NiArMCwwIEBACi0vLyBQYXN0ZSBQbGFpbiBUZXh0IHBsdWdpbiBmb3IgWGluaGENCi0NCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBYaW5oYSBpdHNlbGYuDQotLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLg0KLShmdW5jdGlvbigpew0KLVhpbmhhLnBsdWdpbnMuQWJvdXRCb3ggPSBBYm91dEJveDsNCi1mdW5jdGlvbiBBYm91dEJveChlZGl0b3IpIHsNCi0gIHRoaXMuZWRpdG9yID0gZWRpdG9yOw0KLX0NCi0NCi1BYm91dEJveC5fcGx1Z2luSW5mbyA9IHsNCi0gIG5hbWUgICAgICAgICAgOiAiQWJvdXRCb3giLA0KLSAgZGV2ZWxvcGVyICAgICA6ICJUaGUgWGluaGEgQ29yZSBEZXZlbG9wZXIgVGVhbSINCi19Ow0KLQ0KLUFib3V0Qm94LnByb3RvdHlwZS5fbGMgPSBmdW5jdGlvbihzdHJpbmcpIHsNCi0gIHJldHVybiBYaW5oYS5fbGMoc3RyaW5nLCAnQWJvdXRCb3gnKTsNCi19Ow0KLQ0KLQ0KLUFib3V0Qm94LnByb3RvdHlwZS5fcHJlcGFyZURpYWxvZyA9IGZ1bmN0aW9uKCkNCi17DQotICB2YXIgc2VsZiA9IHRoaXM7DQotICB2YXIgZWRpdG9yID0gdGhpcy5lZGl0b3I7DQotICANCi0gIFhpbmhhLmxvYWRTdHlsZSAoJ2Fib3V0LmNzcycsICdBYm91dEJveCcsICdhYm91dENTUycpOw0KLS8vLyBOb3cgd2UgaGF2ZSBldmVyeXRoaW5nIHdlIG5lZWQsIHNvIHdlIGNhbiBidWlsZCB0aGUgZGlhbG9nLg0KLSAgdGhpcy5kaWFsb2cgPSBuZXcgWGluaGEuRGlhbG9nKGVkaXRvciwgQWJvdXRCb3guaHRtbCwgJ1hpbmhhJyx7d2lkdGg6NjAwfSkNCi0NCi0gIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdjbG9zZScpLm9uY2xpY2sgPSBmdW5jdGlvbigpIHsgc2VsZi5kaWFsb2cuaGlkZSgpfTsNCi0gIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCd4aW5oYV9sb2dvJykuc3JjID0gX2VkaXRvcl91cmwgKyAnaW1hZ2VzL3hpbmhhX2xvZ28uZ2lmJzsNCi0NCi0gIHZhciB0YWJzID0gdGhpcy5kaWFsb2cuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGFiJyk7DQotICB0aGlzLmN1cnJlbnRUYWIgPSB0YWJzWzBdOw0KLSAgdGFicy5mb3JFYWNoKGZ1bmN0aW9uKHRhYil7DQotICAgIC8vYWxlcnQgKHRhYik7DQotICAgIHRhYi5vbmNsaWNrID0gZnVuY3Rpb24oKSB7DQotICAgICAgaWYgKHNlbGYuY3VycmVudFRhYikNCi0gICAgICB7DQotICAgICAgICBYaW5oYS5fcmVtb3ZlQ2xhc3Moc2VsZi5jdXJyZW50VGFiLCd0YWItY3VycmVudCcpOw0KLSAgICAgICAgc2VsZi5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoc2VsZi5jdXJyZW50VGFiLnJlbCkuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCi0gICAgICB9IA0KLSAgICAgIFhpbmhhLl9hZGRDbGFzcyh0YWIsICd0YWItY3VycmVudCcpOw0KLSAgICAgIHRhYi5ibHVyKCk7DQotICAgICAgc2VsZi5jdXJyZW50VGFiID0gdGFiOw0KLSAgICAgIHNlbGYuZGlhbG9nLmdldEVsZW1lbnRCeUlkKHRhYi5yZWwpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KLSAgICB9DQotICB9KQ0KLSAgdGhpcy5maWxsUGx1Z2lucygpOw0KLSAgdGhpcy5maWxsVmVyc2lvbigpOw0KLSAgdGhpcy5kaWFsb2cub25yZXNpemUgPSBmdW5jdGlvbiAoKQ0KLSAgew0KLSAgICB0aGlzLmdldEVsZW1lbnRCeUlkKCJjb250ZW50Iikuc3R5bGUuaGVpZ2h0ID0gDQotICAgIHBhcnNlSW50KHRoaXMuaGVpZ2h0LDEwKSAvLyB0aGUgYWN0dWFsIGhlaWdodCBvZiB0aGUgZGlhbG9nDQotICAgIC0gdGhpcy5nZXRFbGVtZW50QnlJZCgnaDEnKS5vZmZzZXRIZWlnaHQgLy8gdGhlIHRpdGxlIGJhcg0KLSAgICAtIHRoaXMuZ2V0RWxlbWVudEJ5SWQoJ2J1dHRvbnMnKS5vZmZzZXRIZWlnaHQgLy8gdGhlIGJ1dHRvbnMNCi0gICAgLSAxMDAgLy8gd2UgaGF2ZSBhIHBhZGRpbmcgYXQgdGhlIGJvdHRvbSwgZ290dGEgdGFrZSB0aGlzIGludG8gYWNvdW50DQotICAgICsgJ3B4JzsgLy8gZG9uJ3QgZm9yZ2V0IHRoaXMgOykNCi0NCi0gICAgLy90aGlzLmdldEVsZW1lbnRCeUlkKCJjb250ZW50Iikuc3R5bGUud2lkdGggPSh0aGlzLndpZHRoIC0gMikgKyAncHgnOyAvLyBhbmQgdGhlIHdpZHRoDQotICB9DQotfTsNCi1BYm91dEJveC5wcm90b3R5cGUuZmlsbFBsdWdpbnMgPSBmdW5jdGlvbigpDQotew0KLSAgdmFyIGUgPSB0aGlzLmVkaXRvcjsNCi0gIHZhciB0Ym9keSA9IHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCdwbHVnaW5zX3RhYmxlJyk7DQotICB2YXIgdHIsdGQsYTsNCi0gIHZhciBqID0gMDsNCi0gIGZvciAodmFyIGkgaW4gZS5wbHVnaW5zKSANCi0gIHsNCi0gICAgdmFyIGluZm8gPSBlLnBsdWdpbnNbaV07DQotICAgIHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsNCi0gICAgaWYgKGolMikgdHIuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNlNWU1ZTUnOw0KLSAgICB0Ym9keS5hcHBlbmRDaGlsZCh0cik7DQotICAgIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsNCi0gICAgdGQuaW5uZXJIVE1MID0gaW5mby5uYW1lOw0KLSAgICBpZiAoaW5mby52ZXJzaW9uKSB0ZC5pbm5lckhUTUwgKz0gJyB2JytpbmZvLnZlcnNpb247DQotICAgIHRyLmFwcGVuZENoaWxkKHRkKTsNCi0gICAgDQotICAgIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsNCi0gICAgaWYgKGluZm8uZGV2ZWxvcGVyKQ0KLSAgICB7DQotICAgICAgaWYgKGluZm8uZGV2ZWxvcGVyX3VybCkNCi0gICAgICB7DQotICAgICAgICAgICAgdGQuaW5uZXJIVE1MID0gJzxhIHRhcmdldD0iX2JsYW5rIiBocmVmPSInK2luZm8uZGV2ZWxvcGVyX3VybCsnIj4nK2luZm8uZGV2ZWxvcGVyKyc8L2E+JzsNCi0gICAgICB9DQotICAgICAgZWxzZQ0KLSAgICAgIHsNCi0gICAgICAgIHRkLmlubmVySFRNTCA9IGluZm8uZGV2ZWxvcGVyDQotICAgICAgfQ0KLSAgICB9DQotICAgIHRyLmFwcGVuZENoaWxkKHRkKTsNCi0gICAgDQotICAgIHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsNCi0gICAgaWYgKGluZm8uc3BvbnNvcikNCi0gICAgew0KLSAgICAgIGlmIChpbmZvLnNwb25zb3JfdXJsKQ0KLSAgICAgIHsNCi0gICAgICAgICAgICB0ZC5pbm5lckhUTUwgPSAnPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9IicraW5mby5zcG9uc29yX3VybCsnIj4nK2luZm8uc3BvbnNvcisnPC9hPic7DQotICAgICAgfQ0KLSAgICAgIGVsc2UNCi0gICAgICB7DQotICAgICAgICB0ZC5pbm5lckhUTUwgPSBpbmZvLnNwb25zb3INCi0gICAgICB9DQotICAgIH0NCi0gICAgdHIuYXBwZW5kQ2hpbGQodGQpOw0KLSAgICANCi0gICAgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOw0KLSAgICBpZiAoaW5mby5saWNlbnNlKQ0KLSAgICB7DQotICAgICAgdGQuaW5uZXJIVE1MID0gaW5mby5saWNlbnNlOw0KLSAgICB9DQotICAgIGVsc2UNCi0gICAgew0KLSAgICAgIHRkLmlubmVySFRNTCA9ICdodG1sQXJlYSc7DQotICAgIH0NCi0gICAgdHIuYXBwZW5kQ2hpbGQodGQpOw0KLSAgICBqKys7DQotICB9DQotfQ0KLUFib3V0Qm94LnByb3RvdHlwZS5maWxsVmVyc2lvbiA9IGZ1bmN0aW9uKCkNCi17DQotICB2YXIgdmVyID0gWGluaGEudmVyc2lvbjsNCi0gIHRoaXMuZGlhbG9nLmdldEVsZW1lbnRCeUlkKCd2ZXJzaW9uJykuaW5uZXJIVE1MID0gJzxwcmU+Jw0KLSAgICAgICAgICAgICAgICAgICAgICArICdcblJlbGVhc2U6ICAgICAgICAgJyArIHZlci5SZWxlYXNlICsgJyAoJyArIHZlci5EYXRlICsgJyknDQotICAgICAgICAgICAgICAgICAgICAgICsgJ1xuSGVhZDogICAgICAgICAgICAnICsgdmVyLkhlYWQNCi0gICAgICAgICAgICAgICAgICAgICAgKyAnXG5SZXZpc2lvbjogICAgICAgICcgKyB2ZXIuUmV2aXNpb24NCi0gICAgICAgICAgICAgICAgICAgICAgKyAnXG5MYXN0IENoYW5nZWQgQnk6ICcgKyB2ZXIuUmV2aXNpb25CeQ0KLSAgICAgICAgICAgICAgICAgICAgICArICdcbicgKw0KLSAgICAgICAgICAgICAgICAgICAgICAnPC9wcmU+JzsNCi19DQotQWJvdXRCb3gucHJvdG90eXBlLnNob3cgPSBmdW5jdGlvbigpDQotew0KLSAgdmFyIHNlbGYgPSB0aGlzOw0KLSAgaWYgKCFBYm91dEJveC5odG1sKQ0KLSAgew0KLSAgICBpZiAoQWJvdXRCb3gubG9hZGluZykgcmV0dXJuOw0KLSAgICBBYm91dEJveC5sb2FkaW5nID0gdHJ1ZTsNCi0gICAgWGluaGEuX2dldGJhY2soWGluaGEuZ2V0UGx1Z2luRGlyKCJBYm91dEJveCIpICsgJy9kaWFsb2cuaHRtbCcsIGZ1bmN0aW9uKGdldGJhY2spIHsgQWJvdXRCb3guaHRtbCA9IGdldGJhY2s7IHNlbGYuc2hvdygpfSk7DQotICAgIHJldHVybjsNCi0gIH0NCi0gIGlmICghdGhpcy5kaWFsb2cpIHRoaXMuX3ByZXBhcmVEaWFsb2coKTsNCi0NCi0gIC8vIGhlcmUgd2UgY2FuIHBhc3MgdmFsdWVzIHRvIHRoZSBkaWFsb2cNCi0gIC8vIGVhY2ggcHJvcGVydHkgcGFpciBjb25zaXN0cyBvZiB0aGUgIm5hbWUiIG9mIHRoZSBpbnB1dCB3ZSB3YW50IHRvIHBvcHVsYXRlLCBhbmQgdGhlIHZhbHVlIHRvIGJlIHNldA0KLSAgdmFyIGlucHV0cyA9DQotICB7DQotICAgICAgaW5wdXRBcmVhIDogJycgLy8gd2Ugd2FudCB0aGUgdGV4dGFyZWEgYWx3YXlzIHRvIGJlIGVtcHR5IG9uIHNob3dpbmcNCi0gIH0NCi0gIC8vIG5vdyBjYWxsaW5nIHRoZSBzaG93IG1ldGhvZCBvZiB0aGUgWGluaGEuRGlhbG9nIG9iamVjdCB0byBzZXQgdGhlIHZhbHVlcyBhbmQgc2hvdyB0aGUgYWN0dWFsIGRpYWxvZw0KLSAgdGhpcy5kaWFsb2cuc2hvdyhpbnB1dHMpOw0KLQ0KLSAgLy8gSW5pdCB0aGUgc2l6ZXMgKG9ubHkgaWYgd2UgaGF2ZSBzZXQgdXAgdGhlIGN1c3RvbSByZXNpemUgZnVuY3Rpb24pDQotICAvL3RoaXMuZGlhbG9nLm9ucmVzaXplKCk7DQotfTsNCi19KSgpDQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQWJvdXRCb3gvYWJvdXQuY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQWJvdXRCb3gvYWJvdXQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDUwN2QwLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Fib3V0Qm94L2Fib3V0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS5kaWFsb2cgLmFib3V0LmJ1dHRvbnMgYS50YWIgewotICBjb2xvcjogIzAwMDsKLSAgY3Vyc29yOiBwb2ludGVyOwotICBtYXJnaW4tbGVmdDogLTVweDsKLSAgZmxvYXQ6IGxlZnQ7IHBvc2l0aW9uOiByZWxhdGl2ZTsKLSAgYm9yZGVyOiAxcHggc29saWQgIzU1NTsKLSAgdG9wOiAtM3B4OyBsZWZ0OiAtMnB4OwotICBwYWRkaW5nOiAycHggMTBweCAzcHggMTBweDsKLSAgYm9yZGVyLXRvcDogbm9uZTsgYmFja2dyb3VuZC1jb2xvcjogI0NDQzsKLSAgLW1vei1ib3JkZXItcmFkaXVzOiAwcHggMHB4IDRweCA0cHg7Ci0gIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNHB4OwotICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6MDsKLSAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowOwotICAKLSAgei1pbmRleDogMDsKLSAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7Ci19Ci0uZGlhbG9nIC5hYm91dC5idXR0b25zIGEudGFiLWN1cnJlbnQKLXsKLSAgdG9wOiAtNHB4OwotICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjVmNmY2OwotICBwYWRkaW5nOiAzcHggMTBweCA0cHggMTBweDsKLSAgei1pbmRleDogMTA7Ci19Ci0KLS5kaWFsb2cgLmFib3V0LmJ1dHRvbnMgewotICBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOwotICBwYWRkaW5nOjNweCAzcHggMCAxMHB4OwotfQotCi0uZGlhbG9nIC5hYm91dC5jb250ZW50IC50YWItY29udGVudCB7Ci0gIHBhZGRpbmctYm90dG9tOjE1cHg7Ci0gIHdpZHRoOjk1JTsKLX0KLS5kaWFsb2cgLmFib3V0LmNvbnRlbnQgewotICBoZWlnaHQ6MzAwcHg7Ci0gIG92ZXJmbG93OmF1dG87Ci0gIGJhY2tncm91bmQtY29sb3I6I2Y1ZjZmNjsKLX0KLS5kaWFsb2cgLmFib3V0LmNvbnRlbnQgdGFibGUucGx1Z2luc3sKLSAgd2lkdGg6OTUlOwotICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKLSAgbWFyZ2luOiAxZW07Ci19Ci0uZGlhbG9nIC5hYm91dC5jb250ZW50IHRhYmxlLnBsdWdpbnMgdGh7Ci0gIGZvbnQtd2VpZ2h0OiBib2xkOwotICBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0NDOwotfQotLmRpYWxvZyAuYWJvdXQuY29udGVudCB0YWJsZS5wbHVnaW5zIHRkewotICBwYWRkaW5nOjNweDsKLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9BYm91dEJveC9kaWFsb2cuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Fib3V0Qm94L2RpYWxvZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDM1MTkxLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Fib3V0Qm94L2RpYWxvZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotPGgxIGlkPSJbaDFdIj4NCi0gICAgPGwxMG4+QWJvdXQgdGhpcyBlZGl0b3I8L2wxMG4+DQotPC9oMT4NCi08aW1nIGFsdD0iWGluaGEiIHNyYz0iIiBpZD0iW3hpbmhhX2xvZ29dIiAvPg0KLTxkaXYgaWQ9Iltjb250ZW50XSIgY2xhc3M9ImFib3V0IGNvbnRlbnQiIHN0eWxlPSJwYWRkaW5nOjEwcHg7Ij4NCi0gICAgIDxkaXYgaWQ9IlthYm91dF0iIGNsYXNzPSJ0YWItY29udGVudCI+DQotICAgICAgICA8cD4NCi0gICAgICAgICAgICBBIGZyZWUgV1lTSVdZRyBlZGl0b3IgcmVwbGFjZW1lbnQgZm9yIA0KLSAgICAgICAgICAgIDx0dD4NCi0gICAgICAgICAgICAgICAgJmx0O3RleHRhcmVhJmd0Ow0KLSAgICAgICAgICAgIDwvdHQ+DQotICAgICAgICAgICAgZmllbGRzLg0KLSAgICAgICAgPC9wPg0KLSAgICAgICAgPHA+DQotICAgICAgICAgICAgVmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly94aW5oYS5nb2dvLmNvLm56LyI+WGluaGEgV2Vic2l0ZTwvYT4NCi0gICAgICAgICAgICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4NCi0gICAgICAgIDwvcD4NCi0gICAgICAgIDxwPg0KLSAgICAgICAgICAgIFVzZSBvZiBYaW5oYSBpcyBncmFudGVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgaHRtbEFyZWEgTGljZW5zZSAoYmFzZWQgb24gQlNEIGxpY2Vuc2UpDQotICAgICAgICA8L3A+DQotICAgICAgICA8cHJlPiAgICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSBYaW5oYSBEZXZlbG9wZXIgVGVhbSBhbmQgY29udHJpYnV0b3JzPC9wcmU+DQotICAgICAgICA8cD4NCi0gICAgICAgICAgICBYaW5oYSB3YXMgb3JpZ2luYWxseSBiYXNlZCBvbiB3b3JrIGJ5IE1paGFpIEJhem9uIHdoaWNoIGlzOg0KLSAgICAgICAgPC9wPg0KLSAgICAgICAgPHByZT4NCi0gICAgQ29weXJpZ2h0IChjKSAyMDAzLTIwMDQgZHluYXJjaC5jb20uDQotICAgIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIGludGVyYWN0aXZldG9vbHMuY29tLCBpbmMuDQotICAgIFRoaXMgY29weXJpZ2h0IG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UuDQotICA8L3ByZT4NCi0gICAgPC9kaXY+DQotICAgIDxkaXYgaWQ9Ilt0aGFua3NdIiBzdHlsZT0iZGlzcGxheTpub25lIiAgY2xhc3M9InRhYi1jb250ZW50Ij4NCi0gICAgICBUaGUgZGV2ZWxvcG1lbnQgb2YgWGluaGEgd291bGQgbm90IGhhdmUgYmVlbiBwb3NzaWJsZSB3aXRob3V0IHRoZSBvcmlnaW5hbCB3b3JrIG9mIE1paGFpIEJhem9uLCBJbnRlcmFjdGl2ZVRvb2xzLmNvbSwgYW5kIHRoZSBtYW55IHNwb25zb3JzIGFuZCBjb250cmlidXRvcnMgZnJvbSBhcm91bmQgdGhlIHdvcmxkLiANCi0gICAgPC9kaXY+DQotICAgIDxkaXYgaWQ9IltsaWNlbnNlXSIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9InRhYi1jb250ZW50Ij4NCi0gICAgICA8cHJlPmh0bWxBcmVhIExpY2Vuc2UgKGJhc2VkIG9uIEJTRCBsaWNlbnNlKQ0KLUNvcHlyaWdodCAoYykgMjAwNS0yMDA5IFhpbmhhIERldmVsb3BlciBUZWFtIGFuZCBjb250cmlidXRvcnMNCi1Db3B5cmlnaHQgKGMpIDIwMDItMjAwNCwgaW50ZXJhY3RpdmV0b29scy5jb20sIGluYy4NCi1Db3B5cmlnaHQgKGMpIDIwMDMtMjAwNCBkeW5hcmNoLmNvbQ0KLUFsbCByaWdodHMgcmVzZXJ2ZWQuDQotDQotUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQotbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6DQotDQotMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KLSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQotDQotMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KLSAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCi0gICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCi0NCi0zKSBOZWl0aGVyIHRoZSBuYW1lIG9mIGludGVyYWN0aXZldG9vbHMuY29tLCBpbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzDQotICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcw0KLSAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KLQ0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KLUFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCi1JTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KLUFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQ0KLUxJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1INCi1DT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRg0KLVNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUw0KLUlOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElODQotQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkNCi1BUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQ0KLVBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLjwvcHJlPg0KLSAgICA8L2Rpdj4NCi0gICAgPGRpdiBpZD0iW3BsdWdpbnNdIiBzdHlsZT0iZGlzcGxheTpub25lIiBjbGFzcz0idGFiLWNvbnRlbnQiPg0KLSAgICAgIDxwPlRoZSBmb2xsb3dpbmcgcGx1Z2lucyBoYXZlIGJlZW4gbG9hZGVkLjwvcD4NCi0gICAgICA8dGFibGUgY2xhc3M9InBsdWdpbnMiPg0KLSAgICAgICAgPHRoZWFkPg0KLSAgICAgICAgICA8dHI+DQotICAgICAgICAgICAgPHRoPk5hbWU8L3RoPg0KLSAgICAgICAgICAgIDx0aD5EZXZlbG9wZXI8L3RoPg0KLSAgICAgICAgICAgIDx0aD5TcG9uc29yZWQgYnk8L3RoPg0KLSAgICAgICAgICAgIDx0aD5MaWNlbnNlPC90aD4NCi0gICAgICAgICAgPC90cj4NCi0gICAgICAgIDwvdGhlYWQ+DQotICAgICAgICA8dGJvZHkgaWQ9IltwbHVnaW5zX3RhYmxlXSI+PC90Ym9keT4NCi0gICAgICA8L3RhYmxlPg0KLSAgICAgIDxwPkxpY2Vuc2UgImh0bWxBcmVhIiBtZWFucyB0aGF0IHRoZSBwbHVnaW4gaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgWGluaGEgaXRzZWxmLjwvcD4NCi0gICAgPC9kaXY+DQotICAgIDxkaXYgaWQ9Ilt2ZXJzaW9uXSIgc3R5bGU9ImRpc3BsYXk6bm9uZSIgY2xhc3M9InRhYi1jb250ZW50Ij4NCi0gICAgICANCi0gICAgPC9kaXY+DQotPC9kaXY+DQotPGRpdiBjbGFzcz0iYnV0dG9ucyBhYm91dCIgaWQ9IltidXR0b25zXSI+DQotICA8aW5wdXQgc3R5bGU9ImZsb2F0OnJpZ2h0IiB0eXBlPSJidXR0b24iIGlkPSJbY2xvc2VdIiB2YWx1ZT0iXyhDbG9zZSkiIC8+DQotICA8ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0Ij4NCi0gICAgPGEgcmVsPSJhYm91dCIgY2xhc3M9InRhYiB0YWItY3VycmVudCIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIj5BYm91dDwvYT4NCi0gICAgPGEgcmVsPSJ0aGFua3MiIGNsYXNzPSJ0YWIiIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSI+VGhhbmtzPC9hPg0KLSAgICA8YSByZWw9ImxpY2Vuc2UiIGNsYXNzPSJ0YWIiIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSI+TGljZW5zZTwvYT4NCi0gICAgPGEgcmVsPSJwbHVnaW5zIiBjbGFzcz0idGFiIiBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiPlBsdWdpbnM8L2E+DQotICAgIDxhIHJlbD0idmVyc2lvbiIgY2xhc3M9InRhYiIgaHJlZj0iamF2YXNjcmlwdDp2b2lkKDApIj5WZXJzaW9uPC9hPg0KLSAgPC9kaXY+DQotPC9kaXY+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQ29sb3JQaWNrZXIvQ29sb3JQaWNrZXIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJhMmY2Yi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5qcworKysgL2Rldi9udWxsCkBAIC0xLDYyNCArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9Db2xvclBpY2tlci9Db2xvclBpY2tlci5qcyAqLwotQ29sb3JQaWNrZXIuX3BsdWdpbkluZm89e25hbWU6ImNvbG9yUGlja2VyIix2ZXJzaW9uOiIkTGFzdENoYW5nZWRSZXZpc2lvbjogMTIzNyAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sIiQxIiksZGV2ZWxvcGVyOiJKYW1lcyBTbGVlbWFuIixkZXZlbG9wZXJfdXJsOiJodHRwOi8vd3d3LmdvZ28uY28ubnovIixjX293bmVyOiJHb2dvIEludGVybmV0IFNlcnZpY2VzIixsaWNlbnNlOiJodG1sQXJlYSIsc3BvbnNvcjoiR29nbyBJbnRlcm5ldCBTZXJ2aWNlcyIsc3BvbnNvcl91cmw6Imh0dHA6Ly93d3cuZ29nby5jby5uei8ifTsKLWZ1bmN0aW9uIENvbG9yUGlja2VyKCl7Ci19OwotdHJ5ewotaWYod2luZG93Lm9wZW5lciYmd2luZG93Lm9wZW5lci5YaW5oYSl7Ci12YXIgb3BlbmVyQ29sb3JQaWNrZXI9d2luZG93Lm9wZW5lci5YaW5oYS5jb2xvclBpY2tlcjsKLVhpbmhhLl9hZGRFdmVudCh3aW5kb3csInVubG9hZCIsZnVuY3Rpb24oKXsKLVhpbmhhLmNvbG9yUGlja2VyPW9wZW5lckNvbG9yUGlja2VyOwotfSk7Ci19Ci19Ci1jYXRjaChlKXsKLX0KLVhpbmhhLmNvbG9yUGlja2VyPWZ1bmN0aW9uKF8xKXsKLWlmKFhpbmhhLmNvbG9yUGlja2VyLnNhdmVkQ29sb3JzLmxlbmd0aD09PTApewotWGluaGEuY29sb3JQaWNrZXIubG9hZENvbG9ycygpOwotfQotdGhpcy5pc19pZV82PShYaW5oYS5pc19pZSYmWGluaGEuaWVfdmVyc2lvbjw3KTsKLXZhciBfMj10aGlzOwotdmFyIF8zPWZhbHNlOwotdmFyIF80PWZhbHNlOwotdmFyIF81PTA7Ci12YXIgXzY9MDsKLXRoaXMuY2FsbGJhY2s9XzEuY2FsbGJhY2s/XzEuY2FsbGJhY2s6ZnVuY3Rpb24oXzcpewotYWxlcnQoIllvdSBwaWNrZWQgIitfNyk7Ci19OwotdGhpcy53ZWJzYWZlPV8xLndlYnNhZmU/XzEud2Vic2FmZTpmYWxzZTsKLXRoaXMuc2F2ZWNvbG9ycz1fMS5zYXZlY29sb3JzP18xLnNhdmVjb2xvcnM6MjA7Ci10aGlzLmNlbGxzaXplPXBhcnNlSW50KF8xLmNlbGxzaXplP18xLmNlbGxzaXplOiIxMHB4IiwxMCk7Ci10aGlzLnNpZGU9XzEuZ3JhbnVsYXJpdHk/XzEuZ3JhbnVsYXJpdHk6MTg7Ci12YXIgXzg9dGhpcy5zaWRlKzE7Ci12YXIgXzk9dGhpcy5zaWRlLTE7Ci10aGlzLnZhbHVlPTE7Ci10aGlzLnNhdmVkX2NlbGxzPW51bGw7Ci10aGlzLnRhYmxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7Ci10aGlzLnRhYmxlLmNsYXNzTmFtZT0iZGlhbG9nIjsKLXRoaXMudGFibGUuY2VsbFNwYWNpbmc9dGhpcy50YWJsZS5jZWxsUGFkZGluZz0wOwotdGhpcy50YWJsZS5vbm1vdXNldXA9ZnVuY3Rpb24oKXsKLV8zPWZhbHNlOwotXzQ9ZmFsc2U7Ci19OwotdGhpcy50Ym9keT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpOwotdGhpcy50YWJsZS5hcHBlbmRDaGlsZCh0aGlzLnRib2R5KTsKLXRoaXMudGFibGUuc3R5bGUuYm9yZGVyPSIxcHggc29saWQgV2luZG93RnJhbWUiOwotdGhpcy50YWJsZS5zdHlsZS56SW5kZXg9IjEwNTAiOwotdmFyIHRyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci12YXIgdGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLXRkLmNvbFNwYW49dGhpcy5zaWRlOwotdGQuY2xhc3NOYW1lPSJ0aXRsZSI7Ci10ZC5zdHlsZS5mb250RmFtaWx5PSJzbWFsbC1jYXB0aW9uLGNhcHRpb24sc2Fucy1zZXJpZiI7Ci10ZC5zdHlsZS5mb250U2l6ZT0ieC1zbWFsbCI7Ci10ZC51bnNlbGVjdGFibGU9Im9uIjsKLXRkLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiOwotdGQuc3R5bGUuY3Vyc29yPSJkZWZhdWx0IjsKLXRkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFhpbmhhLl9sYygiQ2xpY2sgYSBjb2xvci4uLiIpKSk7Ci10ZC5zdHlsZS5ib3JkZXJCb3R0b209IjFweCBzb2xpZCBXaW5kb3dGcmFtZSI7Ci10ci5hcHBlbmRDaGlsZCh0ZCk7Ci10ZD1udWxsOwotdmFyIHRkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci10ZC5jbGFzc05hbWU9InRpdGxlIjsKLXRkLmNvbFNwYW49MjsKLXRkLnN0eWxlLmZvbnRGYW1pbHk9IlRhaG9tYSxWZXJkYW5hLHNhbnMtc2VyaWYiOwotdGQuc3R5bGUuYm9yZGVyQm90dG9tPSIxcHggc29saWQgV2luZG93RnJhbWUiOwotdGQuc3R5bGUucGFkZGluZ1JpZ2h0PSIwIjsKLXRyLmFwcGVuZENoaWxkKHRkKTsKLXZhciBfYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLV9jLnRpdGxlPVhpbmhhLl9sYygiQ2xvc2UiKTsKLV9jLmNsYXNzTmFtZT0iYnV0dG9uQ29sb3IiOwotX2Muc3R5bGUuaGVpZ2h0PSIxMXB4IjsKLV9jLnN0eWxlLndpZHRoPSIxMXB4IjsKLV9jLnN0eWxlLmN1cnNvcj0icG9pbnRlciI7Ci1fYy5vbmNsaWNrPWZ1bmN0aW9uKCl7Ci1fMi5jbG9zZSgpOwotfTsKLV9jLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCLDlyIpKTsKLV9jLmFsaWduPSJjZW50ZXIiOwotX2Muc3R5bGUudmVydGljYWxBbGlnbj0idG9wIjsKLV9jLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSI7Ci1fYy5zdHlsZS5jc3NGbG9hdD0icmlnaHQiOwotX2Muc3R5bGUuc3R5bGVGbG9hdD0icmlnaHQiOwotX2Muc3R5bGUucGFkZGluZz0iMCI7Ci1fYy5zdHlsZS5tYXJnaW49IjJweCI7Ci1fYy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9InRyYW5zcGFyZW50IjsKLV9jLnN0eWxlLmZvbnRTaXplPSIxMXB4IjsKLWlmKCFYaW5oYS5pc19pZSl7Ci1fYy5zdHlsZS5saW5lSGVpZ2h0PSI5cHgiOwotfQotX2Muc3R5bGUubGV0dGVyU3BhY2luZz0iMCI7Ci10ZC5hcHBlbmRDaGlsZChfYyk7Ci10aGlzLnRib2R5LmFwcGVuZENoaWxkKHRyKTsKLV9jPXRyPXRkPW51bGw7Ci10aGlzLmNvbnN0cmFpbl9jYj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotdGhpcy5jb25zdHJhaW5fY2IudHlwZT0iY2hlY2tib3giOwotdGhpcy5jaG9zZW5Db2xvcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwotdGhpcy5jaG9zZW5Db2xvci50eXBlPSJ0ZXh0IjsKLXRoaXMuY2hvc2VuQ29sb3IubWF4TGVuZ3RoPTc7Ci10aGlzLmNob3NlbkNvbG9yLnN0eWxlLndpZHRoPSI1MHB4IjsKLXRoaXMuY2hvc2VuQ29sb3Iuc3R5bGUuZm9udFNpemU9IjExcHgiOwotdGhpcy5jaG9zZW5Db2xvci5vbmNoYW5nZT1mdW5jdGlvbigpewotaWYoLyNbMC05YS1mXXs2LDZ9L2kudGVzdCh0aGlzLnZhbHVlKSl7Ci1fMi5iYWNrU2FtcGxlLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLnZhbHVlOwotXzIuZm9yZVNhbXBsZS5zdHlsZS5jb2xvcj10aGlzLnZhbHVlOwotfQotfTsKLXRoaXMuYmFja1NhbXBsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLXRoaXMuYmFja1NhbXBsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiwqAiKSk7Ci10aGlzLmJhY2tTYW1wbGUuc3R5bGUuZm9udFdlaWdodD0iYm9sZCI7Ci10aGlzLmJhY2tTYW1wbGUuc3R5bGUuZm9udEZhbWlseT0ic21hbGwtY2FwdGlvbixjYXB0aW9uLHNhbnMtc2VyaWYiOwotdGhpcy5iYWNrU2FtcGxlLmZvbnRTaXplPSJ4LXNtYWxsIjsKLXRoaXMuZm9yZVNhbXBsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLXRoaXMuZm9yZVNhbXBsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShYaW5oYS5fbGMoIlNhbXBsZSIpKSk7Ci10aGlzLmZvcmVTYW1wbGUuc3R5bGUuZm9udFdlaWdodD0iYm9sZCI7Ci10aGlzLmZvcmVTYW1wbGUuc3R5bGUuZm9udEZhbWlseT0ic21hbGwtY2FwdGlvbixjYXB0aW9uLHNhbnMtc2VyaWYiOwotdGhpcy5mb3JlU2FtcGxlLmZvbnRTaXplPSJ4LXNtYWxsIjsKLWZ1bmN0aW9uIHRvSGV4KF9kKXsKLXZhciBoPV9kLnRvU3RyaW5nKDE2KTsKLWlmKGgubGVuZ3RoPDIpewotaD0iMCIraDsKLX0KLXJldHVybiBoOwotfTsKLWZ1bmN0aW9uIHR1cGxlVG9Db2xvcihfZil7Ci1yZXR1cm4gIiMiK3RvSGV4KF9mLnJlZCkrdG9IZXgoX2YuZ3JlZW4pK3RvSGV4KF9mLmJsdWUpOwotfTsKLWZ1bmN0aW9uIG5lYXJlc3RQb3dlck9mKG51bSxfMTEpewotcmV0dXJuIE1hdGgucm91bmQoTWF0aC5yb3VuZChudW0vXzExKSpfMTEpOwotfTsKLWZ1bmN0aW9uIGRvdWJsZUhleERlYyhkZWMpewotcmV0dXJuIHBhcnNlSW50KGRlYy50b1N0cmluZygxNikrZGVjLnRvU3RyaW5nKDE2KSwxNik7Ci19OwotZnVuY3Rpb24gcmdiVG9XZWJzYWZlKF8xMyl7Ci1fMTMucmVkPWRvdWJsZUhleERlYyhuZWFyZXN0UG93ZXJPZihwYXJzZUludCh0b0hleChfMTMucmVkKS5jaGFyQXQoMCksMTYpLDMpKTsKLV8xMy5ibHVlPWRvdWJsZUhleERlYyhuZWFyZXN0UG93ZXJPZihwYXJzZUludCh0b0hleChfMTMuYmx1ZSkuY2hhckF0KDApLDE2KSwzKSk7Ci1fMTMuZ3JlZW49ZG91YmxlSGV4RGVjKG5lYXJlc3RQb3dlck9mKHBhcnNlSW50KHRvSGV4KF8xMy5ncmVlbikuY2hhckF0KDApLDE2KSwzKSk7Ci1yZXR1cm4gXzEzOwotfTsKLWZ1bmN0aW9uIGhzdlRvUkdCKGgscyx2KXsKLXZhciBfMTc7Ci1pZihzPT09MCl7Ci1fMTc9e3JlZDp2LGdyZWVuOnYsYmx1ZTp2fTsKLX1lbHNlewotaC89NjA7Ci12YXIgaT1NYXRoLmZsb29yKGgpOwotdmFyIGY9aC1pOwotdmFyIHA9diooMS1zKTsKLXZhciBxPXYqKDEtcypmKTsKLXZhciB0PXYqKDEtcyooMS1mKSk7Ci1zd2l0Y2goaSl7Ci1jYXNlIDA6Ci1fMTc9e3JlZDp2LGdyZWVuOnQsYmx1ZTpwfTsKLWJyZWFrOwotY2FzZSAxOgotXzE3PXtyZWQ6cSxncmVlbjp2LGJsdWU6cH07Ci1icmVhazsKLWNhc2UgMjoKLV8xNz17cmVkOnAsZ3JlZW46dixibHVlOnR9OwotYnJlYWs7Ci1jYXNlIDM6Ci1fMTc9e3JlZDpwLGdyZWVuOnEsYmx1ZTp2fTsKLWJyZWFrOwotY2FzZSA0OgotXzE3PXtyZWQ6dCxncmVlbjpwLGJsdWU6dn07Ci1icmVhazsKLWRlZmF1bHQ6Ci1fMTc9e3JlZDp2LGdyZWVuOnAsYmx1ZTpxfTsKLWJyZWFrOwotfQotfQotXzE3LnJlZD1NYXRoLmNlaWwoXzE3LnJlZCoyNTUpOwotXzE3LmdyZWVuPU1hdGguY2VpbChfMTcuZ3JlZW4qMjU1KTsKLV8xNy5ibHVlPU1hdGguY2VpbChfMTcuYmx1ZSoyNTUpOwotcmV0dXJuIF8xNzsKLX07Ci12YXIgXzFkPXRoaXM7Ci1mdW5jdGlvbiBjbG9zZU9uQm9keUNsaWNrKGV2KXsKLWV2PWV2P2V2OndpbmRvdy5ldmVudDsKLWVsPWV2LnRhcmdldD9ldi50YXJnZXQ6ZXYuc3JjRWxlbWVudDsKLWRvewotaWYoZWw9PV8xZC50YWJsZSl7Ci1yZXR1cm47Ci19Ci19d2hpbGUoZWw9ZWwucGFyZW50Tm9kZSk7Ci1fMWQuY2xvc2UoKTsKLX07Ci10aGlzLm9wZW49ZnVuY3Rpb24oXzFmLF8yMCxfMjEpewotdGhpcy50YWJsZS5zdHlsZS5kaXNwbGF5PSIiOwotdGhpcy5waWNrX2NvbG9yKCk7Ci1pZihfMjEmJi8jWzAtOWEtZl17Niw2fS9pLnRlc3QoXzIxKSl7Ci10aGlzLmNob3NlbkNvbG9yLnZhbHVlPV8yMTsKLXRoaXMuYmFja1NhbXBsZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9XzIxOwotdGhpcy5mb3JlU2FtcGxlLnN0eWxlLmNvbG9yPV8yMTsKLX0KLVhpbmhhLl9hZGRFdmVudChkb2N1bWVudC5ib2R5LCJtb3VzZWRvd24iLGNsb3NlT25Cb2R5Q2xpY2spOwotdGhpcy50YWJsZS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiOwotdmFyIGU9XzIwOwotdmFyIHRvcD0wOwotdmFyIF8yND0wOwotZG97Ci1pZihlLnN0eWxlLnBvc2l0aW9uPT0iZml4ZWQiKXsKLXRoaXMudGFibGUuc3R5bGUucG9zaXRpb249ImZpeGVkIjsKLX0KLXRvcCs9ZS5vZmZzZXRUb3AtZS5zY3JvbGxUb3A7Ci1fMjQrPWUub2Zmc2V0TGVmdC1lLnNjcm9sbExlZnQ7Ci1lPWUub2Zmc2V0UGFyZW50OwotfXdoaWxlKGUpOwotdmFyIHgseTsKLWlmKC90b3AvLnRlc3QoXzFmKXx8KHRvcCt0aGlzLnRhYmxlLm9mZnNldEhlaWdodD5kb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCkpewotaWYodG9wLXRoaXMudGFibGUub2Zmc2V0SGVpZ2h0PjApewotdGhpcy50YWJsZS5zdHlsZS50b3A9KHRvcC10aGlzLnRhYmxlLm9mZnNldEhlaWdodCkrInB4IjsKLX1lbHNlewotdGhpcy50YWJsZS5zdHlsZS50b3A9MDsKLX0KLX1lbHNlewotdGhpcy50YWJsZS5zdHlsZS50b3A9KHRvcCtfMjAub2Zmc2V0SGVpZ2h0KSsicHgiOwotfQotaWYoL2xlZnQvLnRlc3QoXzFmKXx8KF8yNCt0aGlzLnRhYmxlLm9mZnNldFdpZHRoPmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGgpKXsKLWlmKF8yNC0odGhpcy50YWJsZS5vZmZzZXRXaWR0aC1fMjAub2Zmc2V0V2lkdGgpPjApewotdGhpcy50YWJsZS5zdHlsZS5sZWZ0PShfMjQtKHRoaXMudGFibGUub2Zmc2V0V2lkdGgtXzIwLm9mZnNldFdpZHRoKSkrInB4IjsKLX1lbHNlewotdGhpcy50YWJsZS5zdHlsZS5sZWZ0PTA7Ci19Ci19ZWxzZXsKLXRoaXMudGFibGUuc3R5bGUubGVmdD1fMjQrInB4IjsKLX0KLWlmKHRoaXMuaXNfaWVfNil7Ci10aGlzLmlmcmFtZS5zdHlsZS50b3A9dGhpcy50YWJsZS5zdHlsZS50b3A7Ci10aGlzLmlmcmFtZS5zdHlsZS5sZWZ0PXRoaXMudGFibGUuc3R5bGUubGVmdDsKLX0KLX07Ci1mdW5jdGlvbiBwaWNrQ2VsbChfMjcpewotXzIuY2hvc2VuQ29sb3IudmFsdWU9XzI3LmNvbG9yQ29kZTsKLV8yLmJhY2tTYW1wbGUuc3R5bGUuYmFja2dyb3VuZENvbG9yPV8yNy5jb2xvckNvZGU7Ci1fMi5mb3JlU2FtcGxlLnN0eWxlLmNvbG9yPV8yNy5jb2xvckNvZGU7Ci1pZigoXzI3Lmh1ZT49MTk1JiZfMjcuc2F0dXJhdGlvbj4wLjUpfHwoXzI3Lmh1ZT09PTAmJl8yNy5zYXR1cmF0aW9uPT09MCYmXzI3LnZhbHVlPDAuNSl8fChfMjcuaHVlIT09MCYmXzIudmFsdWU8MC43NSkpewotXzI3LnN0eWxlLmJvcmRlckNvbG9yPSIjZmZmIjsKLX1lbHNlewotXzI3LnN0eWxlLmJvcmRlckNvbG9yPSIjMDAwIjsKLX0KLV81PV8yNy50aGlzcm93OwotXzY9XzI3LnRoaXNjb2w7Ci19OwotZnVuY3Rpb24gcGlja1ZhbHVlKF8yOCl7Ci1pZihfMi52YWx1ZTwwLjUpewotXzI4LnN0eWxlLmJvcmRlckNvbG9yPSIjZmZmIjsKLX1lbHNlewotXzI4LnN0eWxlLmJvcmRlckNvbG9yPSIjMDAwIjsKLX0KLV85PV8yOC50aGlzcm93OwotXzg9XzI4LnRoaXNjb2w7Ci1fMi5jaG9zZW5Db2xvci52YWx1ZT1fMi5zYXZlZF9jZWxsc1tfNV1bXzZdLmNvbG9yQ29kZTsKLV8yLmJhY2tTYW1wbGUuc3R5bGUuYmFja2dyb3VuZENvbG9yPV8yLnNhdmVkX2NlbGxzW181XVtfNl0uY29sb3JDb2RlOwotXzIuZm9yZVNhbXBsZS5zdHlsZS5jb2xvcj1fMi5zYXZlZF9jZWxsc1tfNV1bXzZdLmNvbG9yQ29kZTsKLX07Ci1mdW5jdGlvbiB1bnBpY2tDZWxsKHJvdyxjb2wpewotXzIuc2F2ZWRfY2VsbHNbcm93XVtjb2xdLnN0eWxlLmJvcmRlckNvbG9yPV8yLnNhdmVkX2NlbGxzW3Jvd11bY29sXS5jb2xvckNvZGU7Ci19OwotdGhpcy5waWNrX2NvbG9yPWZ1bmN0aW9uKCl7Ci12YXIgXzJiLF8yYzsKLXZhciBfMmQ9dGhpczsKLXZhciBfMmU9MzU5Lyh0aGlzLnNpZGUpOwotdmFyIF8yZj0xLyh0aGlzLnNpZGUtMSk7Ci12YXIgXzMwPTEvKHRoaXMuc2lkZS0xKTsKLXZhciBfMzE9dGhpcy5jb25zdHJhaW5fY2IuY2hlY2tlZDsKLWlmKHRoaXMuc2F2ZWRfY2VsbHM9PT1udWxsKXsKLXRoaXMuc2F2ZWRfY2VsbHM9W107Ci1mb3IodmFyIHJvdz0wO3Jvdzx0aGlzLnNpZGU7cm93KyspewotdmFyIHRyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci10aGlzLnNhdmVkX2NlbGxzW3Jvd109W107Ci1mb3IodmFyIGNvbD0wO2NvbDx0aGlzLnNpZGU7Y29sKyspewotdmFyIHRkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci1pZihfMzEpewotdGQuY29sb3JDb2RlPXR1cGxlVG9Db2xvcihyZ2JUb1dlYnNhZmUoaHN2VG9SR0IoXzJlKnJvdyxfMmYqY29sLHRoaXMudmFsdWUpKSk7Ci19ZWxzZXsKLXRkLmNvbG9yQ29kZT10dXBsZVRvQ29sb3IoaHN2VG9SR0IoXzJlKnJvdyxfMmYqY29sLHRoaXMudmFsdWUpKTsKLX0KLXRoaXMuc2F2ZWRfY2VsbHNbcm93XVtjb2xdPXRkOwotdGQuc3R5bGUuaGVpZ2h0PXRoaXMuY2VsbHNpemUrInB4IjsKLXRkLnN0eWxlLndpZHRoPXRoaXMuY2VsbHNpemUtMisicHgiOwotdGQuc3R5bGUuYm9yZGVyV2lkdGg9IjFweCI7Ci10ZC5zdHlsZS5ib3JkZXJTdHlsZT0ic29saWQiOwotdGQuc3R5bGUuYm9yZGVyQ29sb3I9dGQuY29sb3JDb2RlOwotdGQuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRkLmNvbG9yQ29kZTsKLWlmKHJvdz09XzUmJmNvbD09XzYpewotdGQuc3R5bGUuYm9yZGVyQ29sb3I9IiMwMDAiOwotdGhpcy5jaG9zZW5Db2xvci52YWx1ZT10ZC5jb2xvckNvZGU7Ci10aGlzLmJhY2tTYW1wbGUuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRkLmNvbG9yQ29kZTsKLXRoaXMuZm9yZVNhbXBsZS5zdHlsZS5jb2xvcj10ZC5jb2xvckNvZGU7Ci19Ci10ZC5odWU9XzJlKnJvdzsKLXRkLnNhdHVyYXRpb249XzJmKmNvbDsKLXRkLnRoaXNyb3c9cm93OwotdGQudGhpc2NvbD1jb2w7Ci10ZC5vbm1vdXNlZG93bj1mdW5jdGlvbigpewotXzM9dHJ1ZTsKLV8yZC5zYXZlZF9jZWxsc1tfNV1bXzZdLnN0eWxlLmJvcmRlckNvbG9yPV8yZC5zYXZlZF9jZWxsc1tfNV1bXzZdLmNvbG9yQ29kZTsKLXBpY2tDZWxsKHRoaXMpOwotfTsKLXRkLm9ubW91c2VvdmVyPWZ1bmN0aW9uKCl7Ci1pZihfMyl7Ci1waWNrQ2VsbCh0aGlzKTsKLX0KLX07Ci10ZC5vbm1vdXNlb3V0PWZ1bmN0aW9uKCl7Ci1pZihfMyl7Ci10aGlzLnN0eWxlLmJvcmRlckNvbG9yPXRoaXMuY29sb3JDb2RlOwotfQotfTsKLXRkLm9uZGJsY2xpY2s9ZnVuY3Rpb24oKXsKLVhpbmhhLmNvbG9yUGlja2VyLnJlbWVtYmVyKHRoaXMuY29sb3JDb2RlLF8yZC5zYXZlY29sb3JzKTsKLV8yZC5jYWxsYmFjayh0aGlzLmNvbG9yQ29kZSk7Ci1fMmQuY2xvc2UoKTsKLX07Ci10ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLXRkLnN0eWxlLmN1cnNvcj0icG9pbnRlciI7Ci10ci5hcHBlbmRDaGlsZCh0ZCk7Ci10ZD1udWxsOwotfQotdmFyIHRkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci10ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLXRkLnN0eWxlLndpZHRoPXRoaXMuY2VsbHNpemUrInB4IjsKLXRyLmFwcGVuZENoaWxkKHRkKTsKLXRkPW51bGw7Ci12YXIgdGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLXRoaXMuc2F2ZWRfY2VsbHNbcm93XVtjb2wrMV09dGQ7Ci10ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLXRkLnN0eWxlLndpZHRoPXRoaXMuY2VsbHNpemUtMisicHgiOwotdGQuc3R5bGUuaGVpZ2h0PXRoaXMuY2VsbHNpemUrInB4IjsKLXRkLmNvbnN0cmFpbmVkQ29sb3JDb2RlPXR1cGxlVG9Db2xvcihyZ2JUb1dlYnNhZmUoaHN2VG9SR0IoMCwwLF8zMCpyb3cpKSk7Ci10ZC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9dGQuY29sb3JDb2RlPXR1cGxlVG9Db2xvcihoc3ZUb1JHQigwLDAsXzMwKnJvdykpOwotdGQuc3R5bGUuYm9yZGVyV2lkdGg9IjFweCI7Ci10ZC5zdHlsZS5ib3JkZXJTdHlsZT0ic29saWQiOwotdGQuc3R5bGUuYm9yZGVyQ29sb3I9dGQuY29sb3JDb2RlOwotaWYocm93PT1fOSl7Ci10ZC5zdHlsZS5ib3JkZXJDb2xvcj0iYmxhY2siOwotfQotdGQuaHVlPV8yZSpyb3c7Ci10ZC5zYXR1cmF0aW9uPV8yZipjb2w7Ci10ZC5oc3ZfdmFsdWU9XzMwKnJvdzsKLXRkLnRoaXNyb3c9cm93OwotdGQudGhpc2NvbD1jb2wrMTsKLXRkLm9ubW91c2Vkb3duPWZ1bmN0aW9uKCl7Ci1fND10cnVlOwotXzJkLnNhdmVkX2NlbGxzW185XVtfOF0uc3R5bGUuYm9yZGVyQ29sb3I9XzJkLnNhdmVkX2NlbGxzW185XVtfOF0uY29sb3JDb2RlOwotXzJkLnZhbHVlPXRoaXMuaHN2X3ZhbHVlOwotXzJkLnBpY2tfY29sb3IoKTsKLXBpY2tWYWx1ZSh0aGlzKTsKLX07Ci10ZC5vbm1vdXNlb3Zlcj1mdW5jdGlvbigpewotaWYoXzQpewotXzJkLnZhbHVlPXRoaXMuaHN2X3ZhbHVlOwotXzJkLnBpY2tfY29sb3IoKTsKLXBpY2tWYWx1ZSh0aGlzKTsKLX0KLX07Ci10ZC5vbm1vdXNlb3V0PWZ1bmN0aW9uKCl7Ci1pZihfNCl7Ci10aGlzLnN0eWxlLmJvcmRlckNvbG9yPXRoaXMuY29sb3JDb2RlOwotfQotfTsKLXRkLnN0eWxlLmN1cnNvcj0icG9pbnRlciI7Ci10ci5hcHBlbmRDaGlsZCh0ZCk7Ci10ZD1udWxsOwotdGhpcy50Ym9keS5hcHBlbmRDaGlsZCh0cik7Ci10cj1udWxsOwotfQotdmFyIHRyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci10aGlzLnNhdmVkX2NlbGxzW3Jvd109W107Ci1mb3IodmFyIGNvbD0wO2NvbDx0aGlzLnNpZGU7Y29sKyspewotdmFyIHRkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7Ci1pZihfMzEpewotdGQuY29sb3JDb2RlPXR1cGxlVG9Db2xvcihyZ2JUb1dlYnNhZmUoaHN2VG9SR0IoMCwwLF8zMCoodGhpcy5zaWRlLWNvbC0xKSkpKTsKLX1lbHNlewotdGQuY29sb3JDb2RlPXR1cGxlVG9Db2xvcihoc3ZUb1JHQigwLDAsXzMwKih0aGlzLnNpZGUtY29sLTEpKSk7Ci19Ci10aGlzLnNhdmVkX2NlbGxzW3Jvd11bY29sXT10ZDsKLXRkLnN0eWxlLmhlaWdodD10aGlzLmNlbGxzaXplKyJweCI7Ci10ZC5zdHlsZS53aWR0aD10aGlzLmNlbGxzaXplLTIrInB4IjsKLXRkLnN0eWxlLmJvcmRlcldpZHRoPSIxcHgiOwotdGQuc3R5bGUuYm9yZGVyU3R5bGU9InNvbGlkIjsKLXRkLnN0eWxlLmJvcmRlckNvbG9yPXRkLmNvbG9yQ29kZTsKLXRkLnN0eWxlLmJhY2tncm91bmRDb2xvcj10ZC5jb2xvckNvZGU7Ci10ZC5odWU9MDsKLXRkLnNhdHVyYXRpb249MDsKLXRkLnZhbHVlPV8zMCoodGhpcy5zaWRlLWNvbC0xKTsKLXRkLnRoaXNyb3c9cm93OwotdGQudGhpc2NvbD1jb2w7Ci10ZC5vbm1vdXNlZG93bj1mdW5jdGlvbigpewotXzM9dHJ1ZTsKLV8yZC5zYXZlZF9jZWxsc1tfNV1bXzZdLnN0eWxlLmJvcmRlckNvbG9yPV8yZC5zYXZlZF9jZWxsc1tfNV1bXzZdLmNvbG9yQ29kZTsKLXBpY2tDZWxsKHRoaXMpOwotfTsKLXRkLm9ubW91c2VvdmVyPWZ1bmN0aW9uKCl7Ci1pZihfMyl7Ci1waWNrQ2VsbCh0aGlzKTsKLX0KLX07Ci10ZC5vbm1vdXNlb3V0PWZ1bmN0aW9uKCl7Ci1pZihfMyl7Ci10aGlzLnN0eWxlLmJvcmRlckNvbG9yPXRoaXMuY29sb3JDb2RlOwotfQotfTsKLXRkLm9uZGJsY2xpY2s9ZnVuY3Rpb24oKXsKLVhpbmhhLmNvbG9yUGlja2VyLnJlbWVtYmVyKHRoaXMuY29sb3JDb2RlLF8yZC5zYXZlY29sb3JzKTsKLV8yZC5jYWxsYmFjayh0aGlzLmNvbG9yQ29kZSk7Ci1fMmQuY2xvc2UoKTsKLX07Ci10ZC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsKLXRkLnN0eWxlLmN1cnNvcj0icG9pbnRlciI7Ci10ci5hcHBlbmRDaGlsZCh0ZCk7Ci10ZD1udWxsOwotfQotdGhpcy50Ym9keS5hcHBlbmRDaGlsZCh0cik7Ci10cj1udWxsOwotdmFyIHRyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci12YXIgdGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLXRyLmFwcGVuZENoaWxkKHRkKTsKLXRkLmNvbFNwYW49dGhpcy5zaWRlKzI7Ci10ZC5zdHlsZS5wYWRkaW5nPSIzcHgiOwotaWYodGhpcy53ZWJzYWZlKXsKLXZhciBkaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci12YXIgXzM3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7Ci1fMzcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoWGluaGEuX2xjKCJXZWIgU2FmZTogIikpKTsKLXRoaXMuY29uc3RyYWluX2NiLm9uY2xpY2s9ZnVuY3Rpb24oKXsKLV8yZC5waWNrX2NvbG9yKCk7Ci19OwotXzM3LmFwcGVuZENoaWxkKHRoaXMuY29uc3RyYWluX2NiKTsKLV8zNy5zdHlsZS5mb250RmFtaWx5PSJzbWFsbC1jYXB0aW9uLGNhcHRpb24sc2Fucy1zZXJpZiI7Ci1fMzcuc3R5bGUuZm9udFNpemU9Ingtc21hbGwiOwotZGl2LmFwcGVuZENoaWxkKF8zNyk7Ci10ZC5hcHBlbmRDaGlsZChkaXYpOwotZGl2PW51bGw7Ci19Ci12YXIgZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotdmFyIF8zNz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsYWJlbCIpOwotXzM3LnN0eWxlLmZvbnRGYW1pbHk9InNtYWxsLWNhcHRpb24sY2FwdGlvbixzYW5zLXNlcmlmIjsKLV8zNy5zdHlsZS5mb250U2l6ZT0ieC1zbWFsbCI7Ci1fMzcuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoWGluaGEuX2xjKCJDb2xvcjogIikpKTsKLV8zNy5hcHBlbmRDaGlsZCh0aGlzLmNob3NlbkNvbG9yKTsKLWRpdi5hcHBlbmRDaGlsZChfMzcpOwotdmFyIGJ1dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci1idXQuY2xhc3NOYW1lPSJidXR0b25Db2xvciAiOwotYnV0LnN0eWxlLmZvbnRTaXplPSIxM3B4IjsKLWJ1dC5zdHlsZS53aWR0aD0iMjRweCI7Ci1idXQuc3R5bGUubWFyZ2luTGVmdD0iMnB4IjsKLWJ1dC5zdHlsZS5wYWRkaW5nPSIwcHggNHB4IjsKLWJ1dC5zdHlsZS5jdXJzb3I9InBvaW50ZXIiOwotYnV0Lm9uY2xpY2s9ZnVuY3Rpb24oKXsKLVhpbmhhLmNvbG9yUGlja2VyLnJlbWVtYmVyKF8yZC5jaG9zZW5Db2xvci52YWx1ZSxfMmQuc2F2ZWNvbG9ycyk7Ci1fMmQuY2FsbGJhY2soXzJkLmNob3NlbkNvbG9yLnZhbHVlKTsKLV8yZC5jbG9zZSgpOwotfTsKLWJ1dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShYaW5oYS5fbGMoIk9LIikpKTsKLWJ1dC5hbGlnbj0iY2VudGVyIjsKLWRpdi5hcHBlbmRDaGlsZChidXQpOwotdGQuYXBwZW5kQ2hpbGQoZGl2KTsKLXZhciBfMzk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGFibGUiKTsKLV8zOS5zdHlsZS53aWR0aD0iMTAwJSI7Ci12YXIgXzNhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5Iik7Ci1fMzkuYXBwZW5kQ2hpbGQoXzNhKTsKLXZhciBfM2I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKLV8zYS5hcHBlbmRDaGlsZChfM2IpOwotdmFyIF8zYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotXzNiLmFwcGVuZENoaWxkKF8zYyk7Ci1fM2MuYXBwZW5kQ2hpbGQodGhpcy5iYWNrU2FtcGxlKTsKLV8zYy5zdHlsZS53aWR0aD0iNTAlIjsKLXZhciBfM2Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGQiKTsKLV8zYi5hcHBlbmRDaGlsZChfM2QpOwotXzNkLmFwcGVuZENoaWxkKHRoaXMuZm9yZVNhbXBsZSk7Ci1fM2Quc3R5bGUud2lkdGg9IjUwJSI7Ci10ZC5hcHBlbmRDaGlsZChfMzkpOwotdmFyIF8zZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLV8zZS5zdHlsZS5jbGVhcj0iYm90aCI7Ci1mdW5jdGlvbiBjcmVhdGVTYXZlZENvbG9ycyhfM2YpewotdmFyIF80MD1YaW5oYS5pc19pZTsKLXZhciBkaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci1kaXYuc3R5bGUud2lkdGg9XzJkLmNlbGxzaXplKyJweCI7Ci1kaXYuc3R5bGUuaGVpZ2h0PV8yZC5jZWxsc2l6ZSsicHgiOwotZGl2LnN0eWxlLm1hcmdpbj0iMXB4IjsKLWRpdi5zdHlsZS5ib3JkZXI9IjFweCBzb2xpZCBibGFjayI7Ci1kaXYuc3R5bGUuY3Vyc29yPSJwb2ludGVyIjsKLWRpdi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9XzNmOwotZGl2LnN0eWxlW180MD8ic3R5bGVGbG9hdCI6ImNzc0Zsb2F0Il09ImxlZnQiOwotZGl2Lm9uZGJsY2xpY2s9ZnVuY3Rpb24oKXsKLV8yZC5jYWxsYmFjayhfM2YpOwotXzJkLmNsb3NlKCk7Ci19OwotZGl2Lm9uY2xpY2s9ZnVuY3Rpb24oKXsKLV8yZC5jaG9zZW5Db2xvci52YWx1ZT1fM2Y7Ci1fMmQuYmFja1NhbXBsZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9XzNmOwotXzJkLmZvcmVTYW1wbGUuc3R5bGUuY29sb3I9XzNmOwotfTsKLV8zZS5hcHBlbmRDaGlsZChkaXYpOwotfTsKLWZvcih2YXIgXzQyPTA7XzQyPFhpbmhhLmNvbG9yUGlja2VyLnNhdmVkQ29sb3JzLmxlbmd0aDtfNDIrKyl7Ci1jcmVhdGVTYXZlZENvbG9ycyhYaW5oYS5jb2xvclBpY2tlci5zYXZlZENvbG9yc1tfNDJdKTsKLX0KLXRkLmFwcGVuZENoaWxkKF8zZSk7Ci10aGlzLnRib2R5LmFwcGVuZENoaWxkKHRyKTsKLWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy50YWJsZSk7Ci1pZih0aGlzLmlzX2llXzYpewotaWYoIXRoaXMuaWZyYW1lKXsKLXRoaXMuaWZyYW1lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOwotdGhpcy5pZnJhbWUuZnJhbWVCb3JkZXI9MDsKLXRoaXMuaWZyYW1lLnNyYz0iamF2YXNjcmlwdDo7IjsKLXRoaXMuaWZyYW1lLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Ci10aGlzLmlmcmFtZS5zdHlsZS53aWR0aD10aGlzLnRhYmxlLm9mZnNldFdpZHRoOwotdGhpcy5pZnJhbWUuc3R5bGUuaGVpZ2h0PXRoaXMudGFibGUub2Zmc2V0SGVpZ2h0OwotdGhpcy5pZnJhbWUuc3R5bGUuekluZGV4PSIxMDQ5IjsKLWRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKHRoaXMuaWZyYW1lLHRoaXMudGFibGUpOwotfQotdGhpcy5pZnJhbWUuc3R5bGUuZGlzcGxheT0iIjsKLX0KLX1lbHNlewotZm9yKHZhciByb3c9MDtyb3c8dGhpcy5zaWRlO3JvdysrKXsKLWZvcih2YXIgY29sPTA7Y29sPHRoaXMuc2lkZTtjb2wrKyl7Ci1pZihfMzEpewotdGhpcy5zYXZlZF9jZWxsc1tyb3ddW2NvbF0uY29sb3JDb2RlPXR1cGxlVG9Db2xvcihyZ2JUb1dlYnNhZmUoaHN2VG9SR0IoXzJlKnJvdyxfMmYqY29sLHRoaXMudmFsdWUpKSk7Ci19ZWxzZXsKLXRoaXMuc2F2ZWRfY2VsbHNbcm93XVtjb2xdLmNvbG9yQ29kZT10dXBsZVRvQ29sb3IoaHN2VG9SR0IoXzJlKnJvdyxfMmYqY29sLHRoaXMudmFsdWUpKTsKLX0KLXRoaXMuc2F2ZWRfY2VsbHNbcm93XVtjb2xdLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLnNhdmVkX2NlbGxzW3Jvd11bY29sXS5jb2xvckNvZGU7Ci10aGlzLnNhdmVkX2NlbGxzW3Jvd11bY29sXS5zdHlsZS5ib3JkZXJDb2xvcj10aGlzLnNhdmVkX2NlbGxzW3Jvd11bY29sXS5jb2xvckNvZGU7Ci19Ci19Ci12YXIgXzQzPXRoaXMuc2F2ZWRfY2VsbHNbXzVdW182XTsKLXRoaXMuY2hvc2VuQ29sb3IudmFsdWU9XzQzLmNvbG9yQ29kZTsKLXRoaXMuYmFja1NhbXBsZS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9XzQzLmNvbG9yQ29kZTsKLXRoaXMuZm9yZVNhbXBsZS5zdHlsZS5jb2xvcj1fNDMuY29sb3JDb2RlOwotaWYoKF80My5odWU+PTE5NSYmXzQzLnNhdHVyYXRpb24+MC41KXx8KF80My5odWU9PT0wJiZfNDMuc2F0dXJhdGlvbj09PTAmJl80My52YWx1ZTwwLjUpfHwoXzQzLmh1ZSE9PTAmJl8yZC52YWx1ZTwwLjc1KSl7Ci1fNDMuc3R5bGUuYm9yZGVyQ29sb3I9IiNmZmYiOwotfWVsc2V7Ci1fNDMuc3R5bGUuYm9yZGVyQ29sb3I9IiMwMDAiOwotfQotfQotfTsKLXRoaXMuY2xvc2U9ZnVuY3Rpb24oKXsKLVhpbmhhLl9yZW1vdmVFdmVudChkb2N1bWVudC5ib2R5LCJtb3VzZWRvd24iLGNsb3NlT25Cb2R5Q2xpY2spOwotdGhpcy50YWJsZS5zdHlsZS5kaXNwbGF5PSJub25lIjsKLWlmKHRoaXMuaXNfaWVfNil7Ci1pZih0aGlzLmlmcmFtZSl7Ci10aGlzLmlmcmFtZS5zdHlsZS5kaXNwbGF5PSJub25lIjsKLX0KLX0KLX07Ci19OwotWGluaGEuY29sb3JQaWNrZXIuc2F2ZWRDb2xvcnM9W107Ci1YaW5oYS5jb2xvclBpY2tlci5yZW1lbWJlcj1mdW5jdGlvbihfNDQsXzQ1KXsKLWZvcih2YXIgaT1YaW5oYS5jb2xvclBpY2tlci5zYXZlZENvbG9ycy5sZW5ndGg7aS0tOyl7Ci1pZihYaW5oYS5jb2xvclBpY2tlci5zYXZlZENvbG9yc1tpXT09XzQ0KXsKLXJldHVybiBmYWxzZTsKLX0KLX0KLVhpbmhhLmNvbG9yUGlja2VyLnNhdmVkQ29sb3JzLnNwbGljZSgwLDAsXzQ0KTsKLVhpbmhhLmNvbG9yUGlja2VyLnNhdmVkQ29sb3JzPVhpbmhhLmNvbG9yUGlja2VyLnNhdmVkQ29sb3JzLnNsaWNlKDAsXzQ1KTsKLXZhciBfNDc9bmV3IERhdGUoKTsKLV80Ny5zZXRNb250aChfNDcuZ2V0TW9udGgoKSsxKTsKLWRvY3VtZW50LmNvb2tpZT0iWGluaGFDb2xvclBpY2tlcj0iK2VzY2FwZShYaW5oYS5jb2xvclBpY2tlci5zYXZlZENvbG9ycy5qb2luKCItIikpKyI7ZXhwaXJlcz0iK180Ny50b0dNVFN0cmluZygpOwotcmV0dXJuIHRydWU7Ci19OwotWGluaGEuY29sb3JQaWNrZXIubG9hZENvbG9ycz1mdW5jdGlvbigpewotdmFyIF80OD1kb2N1bWVudC5jb29raWUuaW5kZXhPZigiWGluaGFDb2xvclBpY2tlciIpOwotaWYoXzQ4IT0tMSl7Ci12YXIgXzQ5PShkb2N1bWVudC5jb29raWUuaW5kZXhPZigiPSIsXzQ4KSsxKTsKLXZhciBlbmQ9ZG9jdW1lbnQuY29va2llLmluZGV4T2YoIjsiLF80OCk7Ci1pZihlbmQ9PS0xKXsKLWVuZD1kb2N1bWVudC5jb29raWUubGVuZ3RoOwotfQotWGluaGEuY29sb3JQaWNrZXIuc2F2ZWRDb2xvcnM9dW5lc2NhcGUoZG9jdW1lbnQuY29va2llLnN1YnN0cmluZyhfNDksZW5kKSkuc3BsaXQoIi0iKTsKLX0KLX07Ci1YaW5oYS5jb2xvclBpY2tlci5JbnB1dEJpbmRpbmc9ZnVuY3Rpb24oXzRiLF80Yyl7Ci12YXIgZG9jPV80Yi5vd25lckRvY3VtZW50OwotdmFyIF80ZT1kb2MuY3JlYXRlRWxlbWVudCgic3BhbiIpOwotXzRlLmNsYXNzTmFtZT0iYnV0dG9uQ29sb3IiOwotdmFyIF80Zj10aGlzLmNob29zZXI9ZG9jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKLV80Zi5jbGFzc05hbWU9ImNob29zZXIiOwotaWYoXzRiLnZhbHVlKXsKLV80Zi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9XzRiLnZhbHVlOwotfQotXzRmLm9ubW91c2VvdmVyPWZ1bmN0aW9uKCl7Ci1fNGYuY2xhc3NOYW1lPSJjaG9vc2VyIGJ1dHRvbkNvbG9yLWhpbGl0ZSI7Ci19OwotXzRmLm9ubW91c2VvdXQ9ZnVuY3Rpb24oKXsKLV80Zi5jbGFzc05hbWU9ImNob29zZXIiOwotfTsKLV80Zi5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIsKgIikpOwotXzRlLmFwcGVuZENoaWxkKF80Zik7Ci12YXIgXzUwPWRvYy5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci1fNTAuY2xhc3NOYW1lPSJub2NvbG9yIjsKLV81MC5vbm1vdXNlb3Zlcj1mdW5jdGlvbigpewotXzUwLmNsYXNzTmFtZT0ibm9jb2xvciBidXR0b25Db2xvci1oaWxpdGUiOwotXzUwLnN0eWxlLmNvbG9yPSIjZjAwIjsKLX07Ci1fNTAub25tb3VzZW91dD1mdW5jdGlvbigpewotXzUwLmNsYXNzTmFtZT0ibm9jb2xvciI7Ci1fNTAuc3R5bGUuY29sb3I9IiMwMDAiOwotfTsKLV81MC5vbmNsaWNrPWZ1bmN0aW9uKCl7Ci1fNGIudmFsdWU9IiI7Ci1fNGYuc3R5bGUuYmFja2dyb3VuZENvbG9yPSIiOwotfTsKLV81MC5hcHBlbmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIsOXIikpOwotXzRlLmFwcGVuZENoaWxkKF81MCk7Ci1fNGIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoXzRlLF80Yi5uZXh0U2libGluZyk7Ci1YaW5oYS5fYWRkRXZlbnQoXzRiLCJjaGFuZ2UiLGZ1bmN0aW9uKCl7Ci1fNGYuc3R5bGUuYmFja2dyb3VuZENvbG9yPXRoaXMudmFsdWU7Ci19KTsKLV80Yz0oXzRjKT9YaW5oYS5jbG9uZU9iamVjdChfNGMpOntjZWxsc2l6ZToiNXB4In07Ci1fNGMuY2FsbGJhY2s9KF80Yy5jYWxsYmFjayk/XzRjLmNhbGxiYWNrOmZ1bmN0aW9uKF81MSl7Ci1fNGYuc3R5bGUuYmFja2dyb3VuZENvbG9yPV81MTsKLV80Yi52YWx1ZT1fNTE7Ci19OwotXzRmLm9uY2xpY2s9ZnVuY3Rpb24oKXsKLXZhciBfNTI9bmV3IFhpbmhhLmNvbG9yUGlja2VyKF80Yyk7Ci1fNTIub3BlbigiIixfNGYsXzRiLnZhbHVlKTsKLX07Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiY2hvb3NlciIpOwotfTsKLVhpbmhhLmNvbG9yUGlja2VyLklucHV0QmluZGluZy5wcm90b3R5cGUuc2V0Q29sb3I9ZnVuY3Rpb24oXzUzKXsKLXRoaXMuY2hvb3Nlci5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9XzUzOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0NvbG9yUGlja2VyL2xhbmcvcHRfYnIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMWVhN2UuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQ29sb3JQaWNrZXIvbGFuZy9wdF9ici5qcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLe+7vy8vIEkxOE4gY29uc3RhbnRzCi0vLwotLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04Ci0vLyBQb3J0dWd1ZXNlIEJyYXppbGlhbiBUcmFuc2xhdGlvbgotLy8KLS8vIEF1dGhvcjogTWFyY2lvIEJhcmJvc2EsIDxtYXJjaW9AbXBnLmNvbS5icj4KLS8vIE1TTjogdG9tYXJzaGFsbEBtc24uY29tIC0gSUNROiA2OTQxOTkzMwotLy8gU2l0ZTogaHR0cDovL3d3dy5tcGcuY29tLmJyCi0vLwotLy8gTGFzdCByZXZpc2lvbjogMDYgc2VwdGVtYmVyIDIwMDcKLS8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KLS8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KLS8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KLXsKLSAgIkNsaWNrIGEgY29sb3IuLi4iOiAiU2VsZWNpb25lIHVtYSBjw7RyLi4uIiwKLSAgIkNsb3NlIjogIkZlY2hhciIsCi0gICJDb2xvcjogIjogIkPDtHI6IiwKLSAgIlNhbXBsZSI6ICJFeGVtcGxvIiwKLSAgIldlYiBTYWZlOiAiOiAiV2ViIFNlZ3VyYToiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2RpYWxvZy5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQ3JlYXRlTGluay9kaWFsb2cuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWM3ODYzZC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2RpYWxvZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPGgxIGlkPSJbaDFdIj48bDEwbj5JbnNlcnQvTW9kaWZ5IExpbms8L2wxMG4+PC9oMT4KLTx0YWJsZSBib3JkZXI9IjAiIHN0eWxlPSJtYXJnaW4tdG9wOjEwcHg7d2lkdGg6IDEwMCU7Ij4KLSAgPHRyPgotICAgIDx0ZCBjbGFzcz0ibGFiZWwiPjxsMTBuPlVSTDo8L2wxMG4+PC90ZD4KLSAgICA8dGQgc3R5bGU9IndpZHRoOiA3MCUiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iW2ZfaHJlZl0iIG5hbWU9IltmX2hyZWZdIiBzdHlsZT0id2lkdGg6IDkwJSIgLz48L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbCI+PGwxMG4+VGl0bGUgKHRvb2x0aXApOjwvbDEwbj48L3RkPgotICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQ9IltmX3RpdGxlXSIgbmFtZT0iW2ZfdGl0bGVdIiBzdHlsZT0id2lkdGg6IDkwJSIgLz48L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbCI+PHNwYW4gaWQ9IltmX3RhcmdldF9sYWJlbF0iPjxsMTBuPlRhcmdldDo8L2wxMG4+PC9zcGFuPjwvdGQ+Ci0gICAgPHRkPjxzZWxlY3QgaWQ9IltmX3RhcmdldF0iIG5hbWU9IltmX3RhcmdldF0iPgotICAgICAgPG9wdGlvbiB2YWx1ZT0iIj48bDEwbj5Ob25lICh1c2UgaW1wbGljaXQpPC9sMTBuPjwvb3B0aW9uPgotICAgICAgPG9wdGlvbiB2YWx1ZT0iX2JsYW5rIj48bDEwbj5OZXcgd2luZG93IChfYmxhbmspPC9sMTBuPjwvb3B0aW9uPgotICAgICAgPG9wdGlvbiB2YWx1ZT0iX3NlbGYiPjxsMTBuPlNhbWUgZnJhbWUgKF9zZWxmKTwvbDEwbj48L29wdGlvbj4KLSAgICAgIDxvcHRpb24gdmFsdWU9Il90b3AiPjxsMTBuPlRvcCBmcmFtZSAoX3RvcCk8L2wxMG4+PC9vcHRpb24+Ci0gICAgICA8b3B0aW9uIHZhbHVlPSJfb3RoZXIiPjxsMTBuPk90aGVyPC9sMTBuPjwvb3B0aW9uPgotICAgIDwvc2VsZWN0PgotICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbZl9vdGhlcl90YXJnZXRdIiBpZD0iW2Zfb3RoZXJfdGFyZ2V0XSIgc2l6ZT0iMTAiIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW4iIC8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgY2xhc3M9ImJ1dHRvbnMiIGlkPSJbYnV0dG9uc10iPgotICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iW29rXSIgICAgIHZhbHVlPSJfKE9LKSIgICAgIC8+Ci0gIDxpbnB1dCB0eXBlPSJidXR0b24iIGlkPSJbY2FuY2VsXSIgdmFsdWU9Il8oQ2FuY2VsKSIgLz4KLTwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9wdF9ici5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGFuZy9wdF9ici5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc1Y2QwMi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xhbmcvcHRfYnIuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi3vu78vLyBJMThOIGNvbnN0YW50cwotLy8KLS8vIExBTkc6ICJwdF9iciIsIEVOQ09ESU5HOiBVVEYtOAotLy8gUG9ydHVndWVzZSBCcmF6aWxpYW4gVHJhbnNsYXRpb24KLS8vCi0vLyBBdXRob3I6IE1hcmNpbyBCYXJib3NhLCA8bWFyY2lvQG1wZy5jb20uYnI+Ci0vLyBNU046IHRvbWFyc2hhbGxAbXNuLmNvbSAtIElDUTogNjk0MTk5MzMKLS8vIFNpdGU6IGh0dHA6Ly93d3cubXBnLmNvbS5icgotLy8KLS8vIExhc3QgcmV2aXNpb246IDA2IHNlcHRlbWJlciAyMDA3Ci0vLyBQbGVhc2UgZG9uwrR0IHJlbW92ZSB0aGlzIGluZm9ybWF0aW9uCi0vLyBJZiB5b3UgbW9kaWZ5IGFueSBzb3VyY2UsIHBsZWFzZSBpbnNlcnQgYSBjb21tZW50IHdpdGggeW91ciBuYW1lIGFuZCBlLW1haWwKLS8vCi0vLyBEaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBIVE1MQXJlYSBpdHNlbGYuCi0vLyBUaGlzIG5vdGljZSBNVVNUIHN0YXkgaW50YWN0IGZvciB1c2UgKHNlZSBsaWNlbnNlLnR4dCkuCi17Ci0gICJZb3UgbmVlZCB0byBzZWxlY3Qgc29tZSB0ZXh0IGJlZm9yZSBjcmVhdGluZyBhIGxpbmsiOiAiVm9jw6ogcHJlY2lzYSBzZWxlY2lvbmFyIHVtIHRleHRvIGFudGVzIGRlIGNyaWFyIHVtIGxpbmsiCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xpbmsuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGluay5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZGFkNDAwLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGluay5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLTxodG1sPgotCi08aGVhZD4KLSAgPHRpdGxlPkluc2VydC9Nb2RpZnkgTGluazwvdGl0bGU+Ci0gIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uLy4uL3BvcHVwcy9wb3B1cC5qcyI+PC9zY3JpcHQ+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uL3BvcHVwcy9wb3B1cC5jc3MiIC8+Ci0KLSAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICAgIHdpbmRvdy5yZXNpemVUbyg0MDAsIDIwMCk7Ci0KLVhpbmhhID0gd2luZG93Lm9wZW5lci5YaW5oYTsKLQotZnVuY3Rpb24gaTE4bihzdHIpIHsKLSAgcmV0dXJuIChYaW5oYS5fbGMoc3RyLCAnWGluaGEnKSk7Ci19Ci0KLWZ1bmN0aW9uIG9uVGFyZ2V0Q2hhbmdlZCgpIHsKLSAgdmFyIGYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9vdGhlcl90YXJnZXQiKTsKLSAgaWYgKHRoaXMudmFsdWUgPT0gIl9vdGhlciIpIHsKLSAgICBmLnN0eWxlLnZpc2liaWxpdHkgPSAidmlzaWJsZSI7Ci0gICAgZi5zZWxlY3QoKTsKLSAgICBmLmZvY3VzKCk7Ci0gIH0gZWxzZSBmLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKLX0KLQotZnVuY3Rpb24gSW5pdCgpIHsKLSAgX19kbGdfdHJhbnNsYXRlKCdYaW5oYScpOwotICBfX2RsZ19pbml0KCk7Ci0KLSAgLy8gTWFrZSBzdXJlIHRoZSB0cmFuc2xhdGVkIHN0cmluZyBhcHBlYXJzIGluIHRoZSBkcm9wIGRvd24uIChmb3IgZ2Vja28pCi0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3RhcmdldCIpLnNlbGVjdGVkSW5kZXggPSAxOwotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl90YXJnZXQiKS5zZWxlY3RlZEluZGV4ID0gMDsKLQotICB2YXIgcGFyYW0gPSB3aW5kb3cuZGlhbG9nQXJndW1lbnRzOwotICB2YXIgdGFyZ2V0X3NlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3RhcmdldCIpOwotICB2YXIgdXNlX3RhcmdldCA9IHRydWU7Ci0gIGlmIChwYXJhbSkgewotICAgIGlmICggdHlwZW9mIHBhcmFtWyJmX3VzZXRhcmdldCJdICE9ICJ1bmRlZmluZWQiICkgewotICAgICAgdXNlX3RhcmdldCA9IHBhcmFtWyJmX3VzZXRhcmdldCJdOwotICAgIH0KLSAgICBpZiAoIHR5cGVvZiBwYXJhbVsiZl9ocmVmIl0gIT0gInVuZGVmaW5lZCIgKSB7Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9ocmVmIikudmFsdWUgPSBwYXJhbVsiZl9ocmVmIl07Ci0gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl90aXRsZSIpLnZhbHVlID0gcGFyYW1bImZfdGl0bGUiXTsKLSAgICAgIGNvbWJvU2VsZWN0VmFsdWUodGFyZ2V0X3NlbGVjdCwgcGFyYW1bImZfdGFyZ2V0Il0pOwotICAgICAgaWYgKHRhcmdldF9zZWxlY3QudmFsdWUgIT0gcGFyYW0uZl90YXJnZXQpIHsKLSAgICAgICAgdmFyIG9wdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOwotICAgICAgICBvcHQudmFsdWUgPSBwYXJhbS5mX3RhcmdldDsKLSAgICAgICAgb3B0LmlubmVySFRNTCA9IG9wdC52YWx1ZTsKLSAgICAgICAgdGFyZ2V0X3NlbGVjdC5hcHBlbmRDaGlsZChvcHQpOwotICAgICAgICBvcHQuc2VsZWN0ZWQgPSB0cnVlOwotICAgICAgfQotICAgIH0KLSAgfQotICBpZiAoISB1c2VfdGFyZ2V0KSB7Ci0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfdGFyZ2V0X2xhYmVsIikuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3RhcmdldCIpLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl9vdGhlcl90YXJnZXQiKS5zdHlsZS52aXNpYmlsaXR5ID0gImhpZGRlbiI7Ci0gIH0KLSAgdmFyIG9wdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpOwotICBvcHQudmFsdWUgPSAiX290aGVyIjsKLSAgb3B0LmlubmVySFRNTCA9IGkxOG4oIk90aGVyIik7Ci0gIHRhcmdldF9zZWxlY3QuYXBwZW5kQ2hpbGQob3B0KTsKLSAgdGFyZ2V0X3NlbGVjdC5vbmNoYW5nZSA9IG9uVGFyZ2V0Q2hhbmdlZDsKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfaHJlZiIpLmZvY3VzKCk7Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2hyZWYiKS5zZWxlY3QoKTsKLX0KLQotZnVuY3Rpb24gb25PSygpIHsKLSAgdmFyIHJlcXVpcmVkID0gewotICAgIC8vIGZfaHJlZiBzaG91bGRuJ3QgYmUgcmVxdWlyZWQgb3Igb3RoZXJ3aXNlIHJlbW92aW5nIHRoZSBsaW5rIGJ5IGVudGVyaW5nIGFuIGVtcHR5Ci0gICAgLy8gdXJsIGlzbid0IHBvc3NpYmxlIGFueW1vcmUuCi0gICAgLy8gImZfaHJlZiI6IGkxOG4oIllvdSBtdXN0IGVudGVyIHRoZSBVUkwgd2hlcmUgdGhpcyBsaW5rIHBvaW50cyB0byIpCi0gIH07Ci0gIGZvciAodmFyIGkgaW4gcmVxdWlyZWQpIHsKLSAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKTsKLSAgICBpZiAoIWVsLnZhbHVlKSB7Ci0gICAgICBhbGVydChyZXF1aXJlZFtpXSk7Ci0gICAgICBlbC5mb2N1cygpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotICAvLyBwYXNzIGRhdGEgYmFjayB0byB0aGUgY2FsbGluZyB3aW5kb3cKLSAgdmFyIGZpZWxkcyA9IFsiZl9ocmVmIiwgImZfdGl0bGUiLCAiZl90YXJnZXQiIF07Ci0gIHZhciBwYXJhbSA9IG5ldyBPYmplY3QoKTsKLSAgZm9yICh2YXIgaSBpbiBmaWVsZHMpIHsKLSAgICB2YXIgaWQgPSBmaWVsZHNbaV07Ci0gICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwotICAgIHBhcmFtW2lkXSA9IGVsLnZhbHVlOwotICB9Ci0gIGlmIChwYXJhbS5mX3RhcmdldCA9PSAiX290aGVyIikKLSAgICBwYXJhbS5mX3RhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX290aGVyX3RhcmdldCIpLnZhbHVlOwotICBfX2RsZ19jbG9zZShwYXJhbSk7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotZnVuY3Rpb24gb25DYW5jZWwoKSB7Ci0gIF9fZGxnX2Nsb3NlKG51bGwpOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLTwvc2NyaXB0PgotCi08L2hlYWQ+Ci0KLTxib2R5IGNsYXNzPSJkaWFsb2ciIG9ubG9hZD0iSW5pdCgpIj4KLTxkaXYgY2xhc3M9InRpdGxlIj5JbnNlcnQvTW9kaWZ5IExpbms8L2Rpdj4KLTxmb3JtPgotPHRhYmxlIGJvcmRlcj0iMCIgc3R5bGU9IndpZHRoOiAxMDAlOyI+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImxhYmVsIj5VUkw6PC90ZD4KLSAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSJmX2hyZWYiIHN0eWxlPSJ3aWR0aDogMTAwJSIgLz48L3RkPgotICA8L3RyPgotICA8dHI+Ci0gICAgPHRkIGNsYXNzPSJsYWJlbCI+VGl0bGUgKHRvb2x0aXApOjwvdGQ+Ci0gICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iZl90aXRsZSIgc3R5bGU9IndpZHRoOiAxMDAlIiAvPjwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgY2xhc3M9ImxhYmVsIj48c3BhbiBpZD0iZl90YXJnZXRfbGFiZWwiPlRhcmdldDo8L3NwYW4+PC90ZD4KLSAgICA8dGQ+PHNlbGVjdCBpZD0iZl90YXJnZXQiPgotICAgICAgPG9wdGlvbiB2YWx1ZT0iIj5Ob25lICh1c2UgaW1wbGljaXQpPC9vcHRpb24+Ci0gICAgICA8b3B0aW9uIHZhbHVlPSJfYmxhbmsiPk5ldyB3aW5kb3cgKF9ibGFuayk8L29wdGlvbj4KLSAgICAgIDxvcHRpb24gdmFsdWU9Il9zZWxmIj5TYW1lIGZyYW1lIChfc2VsZik8L29wdGlvbj4KLSAgICAgIDxvcHRpb24gdmFsdWU9Il90b3AiPlRvcCBmcmFtZSAoX3RvcCk8L29wdGlvbj4KLSAgICA8L3NlbGVjdD4KLSAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZl9vdGhlcl90YXJnZXQiIGlkPSJmX290aGVyX3RhcmdldCIgc2l6ZT0iMTAiIHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW4iIC8+Ci0gICAgPC90ZD4KLSAgPC90cj4KLTwvdGFibGU+Ci0KLTxkaXYgaWQ9ImJ1dHRvbnMiPgotICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgbmFtZT0ib2siIG9uY2xpY2s9InJldHVybiBvbk9LKCk7Ij5PSzwvYnV0dG9uPgotICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0iY2FuY2VsIiBvbmNsaWNrPSJyZXR1cm4gb25DYW5jZWwoKTsiPkNhbmNlbDwvYnV0dG9uPgotPC9kaXY+Ci08L2Zvcm0+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQ3JlYXRlTGluay9saW5rLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQ3JlYXRlTGluay9saW5rLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYmQzMzRmLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0NyZWF0ZUxpbmsvbGluay5qcworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qIFRoaXMgY29tcHJlc3NlZCBmaWxlIGlzIHBhcnQgb2YgWGluaGEuIEZvciB1bmNvbXByZXNzZWQgc291cmNlcywgZm9ydW0sIGFuZCBidWcgcmVwb3J0cywgZ28gdG8geGluaGEub3JnICovCi0vKiBUaGUgVVJMIG9mIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpcyBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0NyZWF0ZUxpbmsvbGluay5qcyAqLwotZnVuY3Rpb24gQ3JlYXRlTGluayhfMSl7Ci10aGlzLmVkaXRvcj1fMTsKLXZhciBfMj1fMS5jb25maWc7Ci12YXIgXzM9dGhpczsKLV8xLmNvbmZpZy5idG5MaXN0LmNyZWF0ZWxpbmtbM109ZnVuY3Rpb24oKXsKLV8zLnNob3coXzMuX2dldFNlbGVjdGVkQW5jaG9yKCkpOwotfTsKLX07Ci1DcmVhdGVMaW5rLl9wbHVnaW5JbmZvPXtuYW1lOiJDcmVhdGVMaW5rIixvcmlnaW46IlhpbmhhIENvcmUiLHZlcnNpb246IiRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxMDg0ICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywiJDEiKSxkZXZlbG9wZXI6IlRoZSBYaW5oYSBDb3JlIERldmVsb3BlciBUZWFtIixkZXZlbG9wZXJfdXJsOiIkSGVhZFVSTDogaHR0cDovL3N2bi54aW5oYS5vcmcvdGFncy8wLjk2LjEvbW9kdWxlcy9DcmVhdGVMaW5rL2xpbmsuanMgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCIkMSIpLHNwb25zb3I6IiIsc3BvbnNvcl91cmw6IiIsbGljZW5zZToiaHRtbEFyZWEifTsKLUNyZWF0ZUxpbmsucHJvdG90eXBlLl9sYz1mdW5jdGlvbihfNCl7Ci1yZXR1cm4gWGluaGEuX2xjKF80LCJYaW5oYSIpOwotfTsKLUNyZWF0ZUxpbmsucHJvdG90eXBlLm9uR2VuZXJhdGVPbmNlPWZ1bmN0aW9uKCl7Ci1DcmVhdGVMaW5rLmxvYWRBc3NldHMoKTsKLX07Ci1DcmVhdGVMaW5rLmxvYWRBc3NldHM9ZnVuY3Rpb24oKXsKLXZhciBfNT1DcmVhdGVMaW5rOwotaWYoXzUubG9hZGluZyl7Ci1yZXR1cm47Ci19Ci1fNS5sb2FkaW5nPXRydWU7Ci1YaW5oYS5fZ2V0YmFjayhfZWRpdG9yX3VybCsibW9kdWxlcy9DcmVhdGVMaW5rL2RpYWxvZy5odG1sIixmdW5jdGlvbihfNil7Ci1fNS5odG1sPV82OwotXzUuZGlhbG9nUmVhZHk9dHJ1ZTsKLX0pOwotWGluaGEuX2dldGJhY2soX2VkaXRvcl91cmwrIm1vZHVsZXMvQ3JlYXRlTGluay9wbHVnaW5NZXRob2RzLmpzIixmdW5jdGlvbihfNyl7Ci1ldmFsKF83KTsKLV81Lm1ldGhvZHNSZWFkeT10cnVlOwotfSk7Ci19OwotQ3JlYXRlTGluay5wcm90b3R5cGUub25VcGRhdGVUb29sYmFyPWZ1bmN0aW9uKCl7Ci1pZighKENyZWF0ZUxpbmsuZGlhbG9nUmVhZHkmJkNyZWF0ZUxpbmsubWV0aG9kc1JlYWR5KSl7Ci10aGlzLmVkaXRvci5fdG9vbGJhck9iamVjdHMuY3JlYXRlbGluay5zdGF0ZSgiZW5hYmxlZCIsZmFsc2UpOwotfWVsc2V7Ci10aGlzLm9uVXBkYXRlVG9vbGJhcj1udWxsOwotfQotfTsKLUNyZWF0ZUxpbmsucHJvdG90eXBlLnByZXBhcmVEaWFsb2c9ZnVuY3Rpb24oKXsKLXZhciBfOD10aGlzOwotdmFyIF85PXRoaXMuZWRpdG9yOwotdmFyIF9hPXRoaXMuZGlhbG9nPW5ldyBYaW5oYS5EaWFsb2coXzksQ3JlYXRlTGluay5odG1sLCJYaW5oYSIse3dpZHRoOjQwMH0pOwotX2EuZ2V0RWxlbWVudEJ5SWQoIm9rIikub25jbGljaz1mdW5jdGlvbigpewotXzguYXBwbHkoKTsKLX07Ci1fYS5nZXRFbGVtZW50QnlJZCgiY2FuY2VsIikub25jbGljaz1mdW5jdGlvbigpewotXzguZGlhbG9nLmhpZGUoKTsKLX07Ci1pZighXzkuY29uZmlnLm1ha2VMaW5rU2hvd3NUYXJnZXQpewotX2EuZ2V0RWxlbWVudEJ5SWQoImZfdGFyZ2V0X2xhYmVsIikuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjsKLV9hLmdldEVsZW1lbnRCeUlkKCJmX3RhcmdldCIpLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiI7Ci1fYS5nZXRFbGVtZW50QnlJZCgiZl9vdGhlcl90YXJnZXQiKS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iOwotfQotX2EuZ2V0RWxlbWVudEJ5SWQoImZfdGFyZ2V0Iikub25jaGFuZ2U9ZnVuY3Rpb24oKXsKLXZhciBmPV9hLmdldEVsZW1lbnRCeUlkKCJmX290aGVyX3RhcmdldCIpOwotaWYodGhpcy52YWx1ZT09Il9vdGhlciIpewotZi5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIjsKLWYuc2VsZWN0KCk7Ci1mLmZvY3VzKCk7Ci19ZWxzZXsKLWYuc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjsKLX0KLX07Ci10aGlzLmRpYWxvZ1JlYWR5PXRydWU7Ci19OwotCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9DcmVhdGVMaW5rL3BsdWdpbk1ldGhvZHMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9DcmVhdGVMaW5rL3BsdWdpbk1ldGhvZHMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMDNiNmQuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvQ3JlYXRlTGluay9wbHVnaW5NZXRob2RzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLS8qIFRoaXMgY29tcHJlc3NlZCBmaWxlIGlzIHBhcnQgb2YgWGluaGEuIEZvciB1bmNvbXByZXNzZWQgc291cmNlcywgZm9ydW0sIGFuZCBidWcgcmVwb3J0cywgZ28gdG8geGluaGEub3JnICovCi0vKiBUaGUgVVJMIG9mIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpcyBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0NyZWF0ZUxpbmsvcGx1Z2luTWV0aG9kcy5qcyAqLwotQ3JlYXRlTGluay5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbihhKXsKLWlmKCF0aGlzLmRpYWxvZyl7Ci10aGlzLnByZXBhcmVEaWFsb2coKTsKLX0KLXZhciBfMj10aGlzLmVkaXRvcjsKLXRoaXMuYT1hOwotaWYoIWEmJnRoaXMuZWRpdG9yLnNlbGVjdGlvbkVtcHR5KHRoaXMuZWRpdG9yLmdldFNlbGVjdGlvbigpKSl7Ci1hbGVydCh0aGlzLl9sYygiWW91IG5lZWQgdG8gc2VsZWN0IHNvbWUgdGV4dCBiZWZvcmUgY3JlYXRpbmcgYSBsaW5rIikpOwotcmV0dXJuIGZhbHNlOwotfQotdmFyIF8zPXtmX2hyZWY6IiIsZl90aXRsZToiIixmX3RhcmdldDoiIixmX290aGVyX3RhcmdldDoiIn07Ci1pZihhJiZhLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09ImEiKXsKLV8zLmZfaHJlZj10aGlzLmVkaXRvci5maXhSZWxhdGl2ZUxpbmtzKGEuZ2V0QXR0cmlidXRlKCJocmVmIikpOwotXzMuZl90aXRsZT1hLnRpdGxlOwotaWYoYS50YXJnZXQpewotaWYoIS9fc2VsZnxfdG9wfF9ibGFuay8udGVzdChhLnRhcmdldCkpewotXzMuZl90YXJnZXQ9Il9vdGhlciI7Ci1fMy5mX290aGVyX3RhcmdldD1hLnRhcmdldDsKLX1lbHNlewotXzMuZl90YXJnZXQ9YS50YXJnZXQ7Ci1fMy5mX290aGVyX3RhcmdldD0iIjsKLX0KLX0KLX0KLXRoaXMuZGlhbG9nLnNob3coXzMpOwotfTsKLUNyZWF0ZUxpbmsucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKCl7Ci12YXIgXzQ9dGhpcy5kaWFsb2cuaGlkZSgpOwotdmFyIGE9dGhpcy5hOwotdmFyIF82PXRoaXMuZWRpdG9yOwotdmFyIF83PXtocmVmOiIiLHRhcmdldDoiIix0aXRsZToiIn07Ci1pZihfNC5mX2hyZWYpewotXzcuaHJlZj1fNC5mX2hyZWY7Ci1fNy50aXRsZT1fNC5mX3RpdGxlOwotaWYoXzQuZl90YXJnZXQudmFsdWUpewotaWYoXzQuZl90YXJnZXQudmFsdWU9PSJvdGhlciIpewotXzcudGFyZ2V0PV80LmZfb3RoZXJfdGFyZ2V0OwotfWVsc2V7Ci1fNy50YXJnZXQ9XzQuZl90YXJnZXQudmFsdWU7Ci19Ci19Ci19Ci1pZihfNC5mX3RhcmdldC52YWx1ZSl7Ci1pZihfNC5mX3RhcmdldC52YWx1ZSE9Il9vdGhlciIpewotXzcudGFyZ2V0PV80LmZfdGFyZ2V0LnZhbHVlOwotfWVsc2V7Ci1fNy50YXJnZXQ9XzQuZl9vdGhlcl90YXJnZXQ7Ci19Ci19Ci1pZihhJiZhLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09ImEiKXsKLWlmKCFfNy5ocmVmKXsKLWlmKGNvbmZpcm0odGhpcy5fbGMoIkFyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byByZW1vdmUgdGhpcyBsaW5rPyIpKSl7Ci12YXIgcD1hLnBhcmVudE5vZGU7Ci13aGlsZShhLmhhc0NoaWxkTm9kZXMoKSl7Ci1wLmluc2VydEJlZm9yZShhLnJlbW92ZUNoaWxkKGEuY2hpbGROb2Rlc1swXSksYSk7Ci19Ci1wLnJlbW92ZUNoaWxkKGEpOwotXzYudXBkYXRlVG9vbGJhcigpOwotcmV0dXJuOwotfQotfWVsc2V7Ci1mb3IodmFyIGkgaW4gXzcpewotYS5zZXRBdHRyaWJ1dGUoaSxfN1tpXSk7Ci19Ci1pZihYaW5oYS5pc19pZSl7Ci1pZigvbWFpbHRvOihbXj88Pl0qKShcP1tePF0qKT8kL2kudGVzdChhLmlubmVySFRNTCkpewotYS5pbm5lckhUTUw9UmVnRXhwLiQxOwotfQotfQotfQotfWVsc2V7Ci1pZighXzcuaHJlZil7Ci1yZXR1cm4gdHJ1ZTsKLX0KLXZhciBfYT1YaW5oYS51bmlxKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0xpbmsiKTsKLV82Ll9kb2MuZXhlY0NvbW1hbmQoImNyZWF0ZWxpbmsiLGZhbHNlLF9hKTsKLXZhciBfYj1fNi5fZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIik7Ci1mb3IodmFyIGk9MDtpPF9iLmxlbmd0aDtpKyspewotdmFyIF9jPV9iW2ldOwotaWYoX2MuaHJlZj09X2EpewotaWYoIWEpewotYT1fYzsKLX0KLWZvcih2YXIgaiBpbiBfNyl7Ci1fYy5zZXRBdHRyaWJ1dGUoaixfN1tqXSk7Ci19Ci19Ci19Ci19Ci1fNi5zZWxlY3ROb2RlQ29udGVudHMoYSk7Ci1fNi51cGRhdGVUb29sYmFyKCk7Ci19OwotQ3JlYXRlTGluay5wcm90b3R5cGUuX2dldFNlbGVjdGVkQW5jaG9yPWZ1bmN0aW9uKCl7Ci12YXIgX2U9dGhpcy5lZGl0b3IuZ2V0U2VsZWN0aW9uKCk7Ci12YXIgX2Y9dGhpcy5lZGl0b3IuY3JlYXRlUmFuZ2UoX2UpOwotdmFyIGE9dGhpcy5lZGl0b3IuYWN0aXZlRWxlbWVudChfZSk7Ci1pZihhIT1udWxsJiZhLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09ImEiKXsKLXJldHVybiBhOwotfWVsc2V7Ci1hPXRoaXMuZWRpdG9yLl9nZXRGaXJzdEFuY2VzdG9yKF9lLCJhIik7Ci1pZihhIT1udWxsKXsKLXJldHVybiBhOwotfQotfQotcmV0dXJuIG51bGw7Ci19OwotCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9EaWFsb2dzL0RldGFjaGVkRGlhbG9nLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRGlhbG9ncy9EZXRhY2hlZERpYWxvZy5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM0YzNhOC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9EaWFsb2dzL0RldGFjaGVkRGlhbG9nLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvRGlhbG9ncy9EZXRhY2hlZERpYWxvZy5qcyAqLwotWGluaGEuRGV0YWNoZWREaWFsb2c9ZnVuY3Rpb24oXzEsXzIsXzMsXzQpewotdmFyIF81PXsiY29uZmlnIjpuZXcgWGluaGEuQ29uZmlnKCksInNjcm9sbFBvcyI6WGluaGEucHJvdG90eXBlLnNjcm9sbFBvcywiX3NvbWVFZGl0b3JIYXNCZWVuQWN0aXZhdGVkIjpmYWxzZSwic2F2ZVNlbGVjdGlvbiI6ZnVuY3Rpb24oKXsKLX0sImRlYWN0aXZhdGVFZGl0b3IiOmZ1bmN0aW9uKCl7Ci19LCJfdGV4dEFyZWEiOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIiksIl9pZnJhbWUiOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLCJfZG9jIjpkb2N1bWVudCwiaGlkZVBhbmVscyI6ZnVuY3Rpb24oKXsKLX0sInNob3dQYW5lbHMiOmZ1bmN0aW9uKCl7Ci19LCJfaXNGdWxsU2NyZWVuIjpmYWxzZSwiYWN0aXZhdGVFZGl0b3IiOmZ1bmN0aW9uKCl7Ci19LCJyZXN0b3JlU2VsZWN0aW9uIjpmdW5jdGlvbigpewotfSwidXBkYXRlVG9vbGJhciI6ZnVuY3Rpb24oKXsKLX0sImZvY3VzRWRpdG9yIjpmdW5jdGlvbigpewotfX07Ci1YaW5oYS5EaWFsb2cuaW5pdGlhbFo9MTAwOwotdGhpcy5hdHRhY2hlZD1mYWxzZTsKLVhpbmhhLkRldGFjaGVkRGlhbG9nLnBhcmVudENvbnN0cnVjdG9yLmNhbGwodGhpcyxfNSxfMSxfMixfMyxfNCk7Ci19OwotWGluaGEuZXh0ZW5kKFhpbmhhLkRldGFjaGVkRGlhbG9nLFhpbmhhLkRpYWxvZyk7Ci1YaW5oYS5EZXRhY2hlZERpYWxvZy5wcm90b3R5cGUuYXR0YWNoVG9QYW5lbD1mdW5jdGlvbigpewotcmV0dXJuIGZhbHNlOwotfTsKLVhpbmhhLkRldGFjaGVkRGlhbG9nLnByb3RvdHlwZS5kZXRhY2hGcm9tVG9QYW5lbD1mdW5jdGlvbigpewotcmV0dXJuIGZhbHNlOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRGlhbG9ncy9YaW5oYURpYWxvZy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0RpYWxvZ3MvWGluaGFEaWFsb2cuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4N2YyYzYuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRGlhbG9ncy9YaW5oYURpYWxvZy5qcworKysgL2Rldi9udWxsCkBAIC0xLDkxNiArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9EaWFsb2dzL1hpbmhhRGlhbG9nLmpzICovCi1YaW5oYS5EaWFsb2c9ZnVuY3Rpb24oXzEsXzIsXzMsXzQsXzUpewotdmFyIF82PXRoaXM7Ci10aGlzLmlkPXt9OwotdGhpcy5yX2lkPXt9OwotdGhpcy5lZGl0b3I9XzE7Ci10aGlzLmRvY3VtZW50PWRvY3VtZW50OwotdGhpcy5zaXplPV80OwotdGhpcy5tb2RhbD0oXzUmJl81Lm1vZGFsPT09ZmFsc2UpP2ZhbHNlOnRydWU7Ci10aGlzLmNsb3NhYmxlPShfNSYmXzUuY2xvc2FibGU9PT1mYWxzZSk/ZmFsc2U6dHJ1ZTsKLXRoaXMucmVzaXphYmxlPShfNSYmXzUucmVzaXphYmxlPT09ZmFsc2UpP2ZhbHNlOnRydWU7Ci10aGlzLmxheWVyPShfNSYmXzUubGF5ZXIpP181LmxheWVyOjA7Ci10aGlzLmNlbnRlcmVkPShfNSYmXzUuY2VudGVyZWQ9PT10cnVlKT90cnVlOmZhbHNlOwotdGhpcy5jbG9zZU9uRXNjYXBlPShfNSYmXzUuY2xvc2VPbkVzY2FwZT09PXRydWUpP3RydWU6ZmFsc2U7Ci10aGlzLnJvb3RFbGVtPW51bGw7Ci10aGlzLmNhcHRpb25CYXI9bnVsbDsKLXRoaXMubWFpbj1udWxsOwotdGhpcy5iYWNrZ3JvdW5kPW51bGw7Ci10aGlzLmNlbnRlcmVkPW51bGw7Ci10aGlzLmdyZXlvdXQ9bnVsbDsKLXRoaXMuYnV0dG9ucz1udWxsOwotdGhpcy5jbG9zZXI9bnVsbDsKLXRoaXMuaWNvbj1udWxsOwotdGhpcy5yZXNpemVyPW51bGw7Ci10aGlzLmluaXRpYWxaPW51bGw7Ci12YXIgXzc9XzEuY29uZmlnLmRpYWxvZ09wdGlvbnM7Ci1pZihfNyl7Ci1pZih0eXBlb2YgXzcuY2VudGVyZWQhPSJ1bmRlZmluZWQiKXsKLXRoaXMuY2VudGVyZWQ9XzcuY2VudGVyZWQ7Ci19Ci1pZih0eXBlb2YgXzcucmVzaXphYmxlIT0idW5kZWZpbmVkIil7Ci10aGlzLnJlc2l6YWJsZT1fNy5yZXNpemFibGU7Ci19Ci1pZih0eXBlb2YgXzcuY2xvc2FibGUhPSJ1bmRlZmluZWQiKXsKLXRoaXMuY2xvc2FibGU9XzcuY2xvc2FibGU7Ci19Ci1pZih0eXBlb2YgXzcuZ3JleW91dCE9InVuZGVmaW5lZCIpewotdGhpcy5ncmV5b3V0PV83LmdyZXlvdXQ7Ci19Ci1pZih0eXBlb2YgXzcuY2xvc2VPbkVzY2FwZSE9InVuZGVmaW5lZCIpewotdGhpcy5jbG9zZU9uRXNjYXBlPV83LmNsb3NlT25Fc2NhcGU7Ci19Ci19Ci12YXIgXzg7Ci1pZihYaW5oYS5pc19pZSl7Ci1fOD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKLV84LnNyYz0iYWJvdXQ6YmxhbmsiOwotXzgub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Ci12YXIgXzk9d2luZG93LmV2ZW50LnNyY0VsZW1lbnQuY29udGVudFdpbmRvdy5kb2N1bWVudDsKLWlmKHRoaXMucmVhZHlTdGF0ZT09ImNvbXBsZXRlIiYmXzkmJl85LmJvZHkpewotdmFyIF9hPV85LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotdmFyIF9iLF9jPWRvY3VtZW50LnN0eWxlU2hlZXRzOwotZm9yKHZhciBpPTA7aTxfYy5sZW5ndGg7aSsrKXsKLWlmKF9jW2ldLmlkLmluZGV4T2YoIlhpbmhhIikhPS0xJiZfY1tpXS5jc3NUZXh0KXsKLV9iKz1fY1tpXS5jc3NUZXh0OwotfQotfQotX2EuaW5uZXJIVE1MPSI8YnI+PHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPlxuIitfYisiXG48L3N0eWxlPiI7Ci1fOS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLmFwcGVuZENoaWxkKF9hKTsKLV85LmJvZHkuY2xhc3NOYW1lPSJ4aW5oYV9kaWFsb2dfYmFja2dyb3VuZCI7Ci1pZihfNi5tb2RhbCl7Ci1fOS5ib2R5LmNsYXNzTmFtZSs9Il9tb2RhbCI7Ci19Ci1pZihfNi5ncmV5b3V0KXsKLV85LmJvZHkuY2xhc3NOYW1lKz0iX2dyZXlvdXQiOwotfQotfQotfTsKLX1lbHNlewotXzg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci19Ci1fOC5jbGFzc05hbWU9InhpbmhhX2RpYWxvZ19iYWNrZ3JvdW5kIjsKLWlmKHRoaXMubW9kYWwpewotXzguY2xhc3NOYW1lKz0iX21vZGFsIjsKLX0KLWlmKHRoaXMuZ3JleW91dCl7Ci1fOC5jbGFzc05hbWUrPSJfZ3JleW91dCI7Ci19Ci12YXIgej0xMDAwOwotaWYoIVhpbmhhLkRpYWxvZy5pbml0aWFsWil7Ci12YXIgcD1fMS5faHRtbEFyZWE7Ci13aGlsZShwKXsKLWlmKHAuc3R5bGUmJnBhcnNlSW50KHAuc3R5bGUuekluZGV4LDEwKT56KXsKLXo9cGFyc2VJbnQocC5zdHlsZS56SW5kZXgsMTApOwotfQotcD1wLnBhcmVudE5vZGU7Ci19Ci1YaW5oYS5EaWFsb2cuaW5pdGlhbFo9ejsKLX0KLXo9WGluaGEuRGlhbG9nLmluaXRpYWxaOwotdmFyIHM9Xzguc3R5bGU7Ci1zLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Ci1zLnRvcD0wOwotcy5sZWZ0PTA7Ci1zLmJvcmRlcj0ibm9uZSI7Ci1zLm92ZXJmbG93PSJoaWRkZW4iOwotcy5kaXNwbGF5PSJub25lIjsKLXMuekluZGV4PSh0aGlzLm1vZGFsP3orMjU6eisxKSt0aGlzLmxheWVyOwotZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChfOCk7Ci10aGlzLmJhY2tncm91bmQ9Xzg7Ci1fOD1udWxsOwotWGluaGEuZnJlZUxhdGVyKHRoaXMsImJhY2tncm91bmQiKTsKLXZhciBfMTE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci1fMTEuc3R5bGUucG9zaXRpb249KFhpbmhhLmlzX2llfHwhdGhpcy5tb2RhbCk/ImFic29sdXRlIjoiZml4ZWQiOwotXzExLnN0eWxlLnpJbmRleD0odGhpcy5tb2RhbD96KzI3OnorMykrdGhpcy5sYXllcjsKLV8xMS5zdHlsZS5kaXNwbGF5PSJub25lIjsKLWlmKCF0aGlzLm1vZGFsKXsKLVhpbmhhLl9hZGRFdmVudChfMTEsIm1vdXNlZG93biIsZnVuY3Rpb24oKXsKLVhpbmhhLkRpYWxvZy5hY3RpdmF0ZU1vZGVsZXNzKF82KTsKLX0pOwotfQotXzExLmNsYXNzTmFtZT0iZGlhbG9nIisodGhpcy5tb2RhbD8iIjoiIG1vZGVsZXNzIik7Ci1pZihYaW5oYS5pc19jaHJvbWUpewotXzExLmNsYXNzTmFtZSs9IiBjaHJvbWUiOwotfQotZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChfMTEpOwotXzExLnN0eWxlLnBhZGRpbmdCb3R0b209IjEwcHgiOwotXzExLnN0eWxlLndpZHRoPShfNCYmXzQud2lkdGgpP180LndpZHRoKyJweCI6IiI7Ci1pZihfNCYmXzQuaGVpZ2h0KXsKLWlmKFhpbmhhLmllX3ZlcnNpb248Nyl7Ci1fMTEuc3R5bGUuaGVpZ2h0PV80LmhlaWdodCsicHgiOwotfWVsc2V7Ci1fMTEuc3R5bGUubWluSGVpZ2h0PV80LmhlaWdodCsicHgiOwotfQotfQotXzI9dGhpcy50cmFuc2xhdGVIdG1sKF8yLF8zKTsKLXZhciBfMTI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci1fMTEuYXBwZW5kQ2hpbGQoXzEyKTsKLV8xMi5pbm5lckhUTUw9XzI7Ci10aGlzLmZpeHVwRE9NKF8xMixfMyk7Ci12YXIgXzEzPV8xMi5yZW1vdmVDaGlsZChfMTIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImgxIilbMF0pOwotXzExLmluc2VydEJlZm9yZShfMTMsXzEyKTsKLVhpbmhhLl9hZGRFdmVudChfMTMsIm1vdXNlZG93biIsZnVuY3Rpb24oZXYpewotXzYuZHJhZ1N0YXJ0KGV2KTsKLX0pOwotXzEzLnN0eWxlLk1velVzZXJTZWxlY3Q9Im5vbmUiOwotXzEzLnN0eWxlLldlYmtpdFVzZXJTZWxlY3Q9Im5vbmUiOwotXzEzLnVuc2VsZWN0YWJsZT0ib24iOwotXzEzLm9uc2VsZWN0c3RhcnQ9ZnVuY3Rpb24oKXsKLXJldHVybiBmYWxzZTsKLX07Ci10aGlzLmJ1dHRvbnM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci1zPXRoaXMuYnV0dG9ucy5zdHlsZTsKLXMucG9zaXRpb249ImFic29sdXRlIjsKLXMudG9wPSIwIjsKLXMucmlnaHQ9IjJweCI7Ci1fMTEuYXBwZW5kQ2hpbGQodGhpcy5idXR0b25zKTsKLWlmKHRoaXMuY2xvc2FibGUmJnRoaXMuY2xvc2VPbkVzY2FwZSl7Ci1YaW5oYS5fYWRkRXZlbnQoZG9jdW1lbnQsImtleXByZXNzIixmdW5jdGlvbihldil7Ci1pZihldi5rZXlDb2RlPT0yNyl7Ci1pZihYaW5oYS5EaWFsb2cuYWN0aXZlTW9kZWxlc3M9PV82fHxfNi5tb2RhbCl7Ci1fNi5oaWRlKCk7Ci1yZXR1cm4gdHJ1ZTsKLX0KLX0KLX0pOwotfQotdGhpcy5jbG9zZXI9bnVsbDsKLWlmKHRoaXMuY2xvc2FibGUpewotdGhpcy5jbG9zZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci10aGlzLmNsb3Nlci5jbGFzc05hbWU9ImNsb3NlQnV0dG9uIjsKLXRoaXMuY2xvc2VyLm9ubW91c2Vkb3duPWZ1bmN0aW9uKGV2KXsKLXRoaXMuY2xhc3NOYW1lPSJjbG9zZUJ1dHRvbiBidXR0b25DbGljayI7Ci1YaW5oYS5fc3RvcEV2ZW50KFhpbmhhLmdldEV2ZW50KGV2KSk7Ci1yZXR1cm4gZmFsc2U7Ci19OwotdGhpcy5jbG9zZXIub25tb3VzZW91dD1mdW5jdGlvbihldil7Ci10aGlzLmNsYXNzTmFtZT0iY2xvc2VCdXR0b24iOwotWGluaGEuX3N0b3BFdmVudChYaW5oYS5nZXRFdmVudChldikpOwotcmV0dXJuIGZhbHNlOwotfTsKLXRoaXMuY2xvc2VyLm9ubW91c2V1cD1mdW5jdGlvbigpewotdGhpcy5jbGFzc05hbWU9ImNsb3NlQnV0dG9uIjsKLV82LmhpZGUoKTsKLXJldHVybiBmYWxzZTsKLX07Ci10aGlzLmJ1dHRvbnMuYXBwZW5kQ2hpbGQodGhpcy5jbG9zZXIpOwotdmFyIF8xOD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci1fMTguY2xhc3NOYW1lPSJpbm5lclgiOwotXzE4LnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSI7Ci1fMTguc3R5bGUudG9wPSItM3B4IjsKLV8xOC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiw5ciKSk7Ci10aGlzLmNsb3Nlci5hcHBlbmRDaGlsZChfMTgpOwotXzE4PW51bGw7Ci19Ci10aGlzLmljb249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7Ci12YXIgXzE5PXRoaXMuaWNvbjsKLV8xOS5jbGFzc05hbWU9Imljb24iOwotXzE5LnNyYz1fMS5jb25maWcuaWNvbkxpc3QuZGlhbG9nQ2FwdGlvbjsKLV8xOS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiOwotXzE5LnN0eWxlLnRvcD0iM3B4IjsKLV8xOS5zdHlsZS5sZWZ0PSIycHgiOwotXzE5Lm9uZHJhZz1mdW5jdGlvbigpewotcmV0dXJuIGZhbHNlOwotfTsKLV8xMS5hcHBlbmRDaGlsZCh0aGlzLmljb24pOwotdmFyIGFsbD1fMTEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKLWZvcih2YXIgaT0wO2k8YWxsLmxlbmd0aDtpKyspewotdmFyIGVsPWFsbFtpXTsKLWlmKGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09InRleHRhcmVhInx8ZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iaW5wdXQiKXsKLX1lbHNlewotZWwudW5zZWxlY3RhYmxlPSJvbiI7Ci19Ci19Ci10aGlzLnJlc2l6ZXI9bnVsbDsKLWlmKHRoaXMucmVzaXphYmxlKXsKLXRoaXMucmVzaXplcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLXRoaXMucmVzaXplci5jbGFzc05hbWU9InJlc2l6ZUhhbmRsZSI7Ci1zPXRoaXMucmVzaXplci5zdHlsZTsKLXMucG9zaXRpb249ImFic29sdXRlIjsKLXMuYm90dG9tPSIwcHgiOwotcy5yaWdodD0iMHB4IjsKLXMuTW96VXNlclNlbGVjdD0ibm9uZSI7Ci1YaW5oYS5fYWRkRXZlbnQodGhpcy5yZXNpemVyLCJtb3VzZWRvd24iLGZ1bmN0aW9uKGV2KXsKLV82LnJlc2l6ZVN0YXJ0KGV2KTsKLX0pOwotXzExLmFwcGVuZENoaWxkKHRoaXMucmVzaXplcik7Ci19Ci10aGlzLnJvb3RFbGVtPV8xMTsKLXRoaXMuY2FwdGlvbkJhcj1fMTM7Ci10aGlzLm1haW49XzEyOwotXzEzPW51bGw7Ci1fMTE9bnVsbDsKLV8xMj1udWxsOwotWGluaGEuZnJlZUxhdGVyKHRoaXMsInJvb3RFbGVtIik7Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiY2FwdGlvbkJhciIpOwotWGluaGEuZnJlZUxhdGVyKHRoaXMsIm1haW4iKTsKLVhpbmhhLmZyZWVMYXRlcih0aGlzLCJidXR0b25zIik7Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiY2xvc2VyIik7Ci1YaW5oYS5mcmVlTGF0ZXIodGhpcywiaWNvbiIpOwotWGluaGEuZnJlZUxhdGVyKHRoaXMsInJlc2l6ZXIiKTsKLVhpbmhhLmZyZWVMYXRlcih0aGlzLCJkb2N1bWVudCIpOwotdGhpcy5zaXplPXt9OwotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUub25yZXNpemU9ZnVuY3Rpb24oKXsKLXJldHVybiB0cnVlOwotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbihfMWUpewotdmFyIF8xZj10aGlzLnJvb3RFbGVtOwotdmFyIF8yMD1fMWYuc3R5bGU7Ci12YXIgXzIxPXRoaXMubW9kYWw7Ci12YXIgXzIyPXRoaXMuZWRpdG9yLnNjcm9sbFBvcygpOwotdGhpcy5zY3JvbGxQb3M9XzIyOwotdmFyIF8yMz10aGlzOwotaWYodGhpcy5hdHRhY2hlZCl7Ci10aGlzLmVkaXRvci5zaG93UGFuZWwoXzFmKTsKLX0KLWlmKFhpbmhhLl9zb21lRWRpdG9ySGFzQmVlbkFjdGl2YXRlZCl7Ci10aGlzLl9sYXN0UmFuZ2U9dGhpcy5lZGl0b3Iuc2F2ZVNlbGVjdGlvbigpOwotaWYoWGluaGEuaXNfaWUmJiFfMjEpewotXzIzLnNhdmVTZWxlY3Rpb249ZnVuY3Rpb24oKXsKLV8yMy5fbGFzdFJhbmdlPV8yMy5lZGl0b3Iuc2F2ZVNlbGVjdGlvbigpOwotfTsKLVhpbmhhLl9hZGRFdmVudCh0aGlzLmVkaXRvci5fZG9jLCJtb3VzZXVwIixfMjMuc2F2ZVNlbGVjdGlvbik7Ci19Ci19Ci1pZihfMjEpewotdGhpcy5lZGl0b3IuZGVhY3RpdmF0ZUVkaXRvcigpOwotdGhpcy5lZGl0b3Iuc3VzcGVuZFVwZGF0ZVRvb2xiYXI9dHJ1ZTsKLXRoaXMuZWRpdG9yLmN1cnJlbnRNb2RhbD1fMjM7Ci19Ci1pZihYaW5oYS5pc19mZjImJl8yMSl7Ci10aGlzLl9yZXN0b3JlVG89W3RoaXMuZWRpdG9yLl90ZXh0QXJlYS5zdHlsZS5kaXNwbGF5LHRoaXMuZWRpdG9yLl9pZnJhbWUuc3R5bGUudmlzaWJpbGl0eSx0aGlzLmVkaXRvci5oaWRlUGFuZWxzKCldOwotdGhpcy5lZGl0b3IuX3RleHRBcmVhLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwotdGhpcy5lZGl0b3IuX2lmcmFtZS5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iOwotfQotaWYoIXRoaXMuYXR0YWNoZWQpewotaWYoXzIxKXsKLXRoaXMuc2hvd0JhY2tncm91bmQoKTsKLXRoaXMucG9zQmFja2dyb3VuZCh7dG9wOjAsbGVmdDowfSk7Ci10aGlzLnJlc2l6ZUJhY2tncm91bmQoWGluaGEuRGlhbG9nLmNhbGNGdWxsQmdTaXplKCkpOwotfWVsc2V7Ci10aGlzLmJhY2tncm91bmQuc3R5bGUuZGlzcGxheT0iIjsKLX0KLVhpbmhhLkRpYWxvZy5mYWRlSW4odGhpcy5yb290RWxlbSwxMDAsZnVuY3Rpb24oKXsKLWlmKF8yMSl7Ci12YXIgXzI0PV8yMy5yb290RWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW5wdXQiKTsKLWZvcih2YXIgaT0wO2k8XzI0Lmxlbmd0aDtpKyspewotaWYoXzI0W2ldLnR5cGU9PSJ0ZXh0Iil7Ci10cnl7Ci1fMjRbaV0uZm9jdXMoKTsKLWJyZWFrOwotfQotY2F0Y2goZSl7Ci19Ci19Ci19Ci19Ci19KTsKLXZhciBfMjY9XzFmLm9mZnNldEhlaWdodDsKLXZhciBfMjc9XzFmLm9mZnNldFdpZHRoOwotdmFyIF8yOD1YaW5oYS52aWV3cG9ydFNpemUoKTsKLXZhciBfMjk9XzI4Lnk7Ci12YXIgXzJhPV8yOC54OwotaWYoXzI2Pl8yOSl7Ci1fMjAuaGVpZ2h0PV8yOSsicHgiOwotaWYoXzFmLnNjcm9sbEhlaWdodD5fMjYpewotXzIzLm1haW4uc3R5bGUub3ZlcmZsb3dZPSJhdXRvIjsKLX0KLX0KLWlmKHRoaXMuc2l6ZS50b3AmJnRoaXMuc2l6ZS5sZWZ0KXsKLV8yMC50b3A9cGFyc2VJbnQodGhpcy5zaXplLnRvcCwxMCkrInB4IjsKLV8yMC5sZWZ0PXBhcnNlSW50KHRoaXMuc2l6ZS5sZWZ0LDEwKSsicHgiOwotfWVsc2V7Ci1pZih0aGlzLmVkaXRvci5idG5DbGlja0V2ZW50JiYhdGhpcy5jZW50ZXJlZCl7Ci12YXIgXzJiPXRoaXMuZWRpdG9yLmJ0bkNsaWNrRXZlbnQ7Ci1pZihfMjAucG9zaXRpb249PSJhYnNvbHV0ZSIpewotXzIwLnRvcD1fMmIuY2xpZW50WSt0aGlzLnNjcm9sbFBvcy55KyJweCI7Ci19ZWxzZXsKLV8yMC50b3A9XzJiLmNsaWVudFkrInB4IjsKLX0KLWlmKF8yNitfMWYub2Zmc2V0VG9wPl8yOSl7Ci1fMjAudG9wPShfMjAucG9zaXRpb249PSJhYnNvbHV0ZSI/dGhpcy5zY3JvbGxQb3MueTowKSsicHgiOwotfQotaWYoXzIwLnBvc2l0aW9uPT0iYWJzb2x1dGUiKXsKLV8yMC5sZWZ0PV8yYi5jbGllbnRYK3RoaXMuc2Nyb2xsUG9zLngrInB4IjsKLX1lbHNlewotXzIwLmxlZnQ9XzJiLmNsaWVudFgrInB4IjsKLX0KLWlmKF8yNytfMWYub2Zmc2V0TGVmdD5fMmEpewotXzIwLmxlZnQ9XzJiLmNsaWVudFgtXzI3KyJweCI7Ci1pZihfMWYub2Zmc2V0TGVmdDwwKXsKLV8yMC5sZWZ0PTA7Ci19Ci19Ci10aGlzLmVkaXRvci5idG5DbGlja0V2ZW50PW51bGw7Ci19ZWxzZXsKLXZhciB0b3A9KF8yOS1fMjYpLzI7Ci12YXIgXzJkPShfMmEtXzI3KS8yOwotXzIwLnRvcD0oKHRvcD4wKT90b3A6MCkrInB4IjsKLV8yMC5sZWZ0PSgoXzJkPjApP18yZDowKSsicHgiOwotfQotfQotfQotdGhpcy53aWR0aD1fMjc7Ci10aGlzLmhlaWdodD1fMjY7Ci1pZighXzIxKXsKLXRoaXMucmVzaXplQmFja2dyb3VuZCh7d2lkdGg6XzI3KyJweCIsaGVpZ2h0Ol8yNisicHgifSk7Ci10aGlzLnBvc0JhY2tncm91bmQoe3RvcDpfMjAudG9wLGxlZnQ6XzIwLmxlZnR9KTsKLX0KLWlmKHR5cGVvZiBfMWUhPSJ1bmRlZmluZWQiKXsKLXRoaXMuc2V0VmFsdWVzKF8xZSk7Ci19Ci10aGlzLmRpYWxvZ1Nob3duPXRydWU7Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKCl7Ci1pZih0aGlzLmF0dGFjaGVkKXsKLXRoaXMuZWRpdG9yLmhpZGVQYW5lbCh0aGlzLnJvb3RFbGVtKTsKLX1lbHNlewotWGluaGEuRGlhbG9nLmZhZGVPdXQodGhpcy5yb290RWxlbSk7Ci10aGlzLmhpZGVCYWNrZ3JvdW5kKCk7Ci12YXIgXzJlPXRoaXM7Ci1pZihYaW5oYS5pc19mZjImJnRoaXMubW9kYWwpewotdGhpcy5lZGl0b3IuX3RleHRBcmVhLnN0eWxlLmRpc3BsYXk9dGhpcy5fcmVzdG9yZVRvWzBdOwotdGhpcy5lZGl0b3IuX2lmcmFtZS5zdHlsZS52aXNpYmlsaXR5PXRoaXMuX3Jlc3RvcmVUb1sxXTsKLXRoaXMuZWRpdG9yLnNob3dQYW5lbHModGhpcy5fcmVzdG9yZVRvWzJdKTsKLX0KLWlmKCF0aGlzLmVkaXRvci5faXNGdWxsU2NyZWVuJiZ0aGlzLm1vZGFsKXsKLXdpbmRvdy5zY3JvbGwodGhpcy5zY3JvbGxQb3MueCx0aGlzLnNjcm9sbFBvcy55KTsKLX0KLWlmKFhpbmhhLmlzX2llJiYhdGhpcy5tb2RhbCl7Ci1YaW5oYS5fcmVtb3ZlRXZlbnQodGhpcy5lZGl0b3IuX2RvYywibW91c2V1cCIsXzJlLnNhdmVTZWxlY3Rpb24pOwotfQotaWYodGhpcy5tb2RhbCl7Ci10aGlzLmVkaXRvci5zdXNwZW5kVXBkYXRlVG9vbGJhcj1mYWxzZTsKLXRoaXMuZWRpdG9yLmN1cnJlbnRNb2RhbD1udWxsOwotdGhpcy5lZGl0b3IuYWN0aXZhdGVFZGl0b3IoKTsKLX0KLX0KLWlmKHRoaXMubW9kYWwpewotdGhpcy5lZGl0b3IucmVzdG9yZVNlbGVjdGlvbih0aGlzLl9sYXN0UmFuZ2UpOwotfQotdGhpcy5kaWFsb2dTaG93bj1mYWxzZTsKLXRoaXMuZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsKLXRoaXMuZWRpdG9yLmZvY3VzRWRpdG9yKCk7Ci1yZXR1cm4gdGhpcy5nZXRWYWx1ZXMoKTsKLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpewotaWYodGhpcy5yb290RWxlbS5zdHlsZS5kaXNwbGF5PT0ibm9uZSIpewotdGhpcy5zaG93KCk7Ci19ZWxzZXsKLXRoaXMuaGlkZSgpOwotfQotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUuY29sbGFwc2U9ZnVuY3Rpb24oKXsKLWlmKHRoaXMuY29sbGFwc2VkKXsKLXRoaXMuY29sbGFwc2VkPWZhbHNlOwotdGhpcy5zaG93KCk7Ci19ZWxzZXsKLXRoaXMubWFpbi5zdHlsZS5oZWlnaHQ9MDsKLXRoaXMuY29sbGFwc2VkPXRydWU7Ci19Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5nZXRFbGVtZW50QnlJZD1mdW5jdGlvbihpZCl7Ci1pZighdGhpcy5yb290RWxlbS5wYXJlbnROb2RlKXsKLXRoaXMuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnJvb3RFbGVtKTsKLX0KLXJldHVybiB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuaWRbaWRdP3RoaXMuaWRbaWRdOmlkKTsKLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLmdldEVsZW1lbnRzQnlOYW1lPWZ1bmN0aW9uKF8zMCl7Ci1pZighdGhpcy5yb290RWxlbS5wYXJlbnROb2RlKXsKLXRoaXMuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnJvb3RFbGVtKTsKLX0KLXZhciBlbHM9dGhpcy5kb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSh0aGlzLmlkW18zMF0/dGhpcy5pZFtfMzBdOl8zMCk7Ci1yZXR1cm4gWGluaGEuY29sbGVjdGlvblRvQXJyYXkoZWxzKTsKLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9ZnVuY3Rpb24oXzMyKXsKLXJldHVybiBYaW5oYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKHRoaXMucm9vdEVsZW0sXzMyKTsKLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLmRyYWdTdGFydD1mdW5jdGlvbihldil7Ci1pZih0aGlzLmF0dGFjaGVkfHx0aGlzLmRyYWdnaW5nKXsKLXJldHVybjsKLX0KLWlmKCF0aGlzLm1vZGFsKXsKLXRoaXMucG9zQmFja2dyb3VuZCh7dG9wOjAsbGVmdDowfSk7Ci10aGlzLnJlc2l6ZUJhY2tncm91bmQoWGluaGEuRGlhbG9nLmNhbGNGdWxsQmdTaXplKCkpOwotdGhpcy5lZGl0b3Iuc3VzcGVuZFVwZGF0ZVRvb2xiYXI9dHJ1ZTsKLX0KLWV2PVhpbmhhLmdldEV2ZW50KGV2KTsKLXZhciBfMzQ9dGhpczsKLV8zNC5kcmFnZ2luZz10cnVlOwotXzM0LnNjcm9sbFBvcz1fMzQuZWRpdG9yLnNjcm9sbFBvcygpOwotdmFyIHN0PV8zNC5yb290RWxlbS5zdHlsZTsKLV8zNC54T2Zmcz1ldi5vZmZzZXRYfHxldi5sYXllclg7Ci1fMzQueU9mZnM9ZXYub2Zmc2V0WXx8ZXYubGF5ZXJZOwotXzM0Lm1vdXNlTW92ZT1mdW5jdGlvbihldil7Ci1fMzQuZHJhZ0l0KGV2KTsKLX07Ci1YaW5oYS5fYWRkRXZlbnQoZG9jdW1lbnQsIm1vdXNlbW92ZSIsXzM0Lm1vdXNlTW92ZSk7Ci1pZihYaW5oYS5pc19pZSl7Ci1YaW5oYS5fYWRkRXZlbnQodGhpcy5iYWNrZ3JvdW5kLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsIm1vdXNlbW92ZSIsXzM0Lm1vdXNlTW92ZSk7Ci19Ci1fMzQubW91c2VVcD1mdW5jdGlvbihldil7Ci1fMzQuZHJhZ0VuZChldik7Ci19OwotWGluaGEuX2FkZEV2ZW50KGRvY3VtZW50LCJtb3VzZXVwIixfMzQubW91c2VVcCk7Ci1pZihYaW5oYS5pc19pZSl7Ci1YaW5oYS5fYWRkRXZlbnQodGhpcy5iYWNrZ3JvdW5kLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsIm1vdXNldXAiLF8zNC5tb3VzZVVwKTsKLX0KLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLmRyYWdJdD1mdW5jdGlvbihldil7Ci12YXIgXzM5PXRoaXM7Ci1pZighXzM5LmRyYWdnaW5nKXsKLXJldHVybiBmYWxzZTsKLX0KLXZhciBfM2EsXzNiLF8zYzsKLWlmKF8zOS5yb290RWxlbS5zdHlsZS5wb3NpdGlvbj09ImFic29sdXRlIil7Ci1fM2E9KGV2LmNsaWVudFkrdGhpcy5zY3JvbGxQb3MueSktXzM5LnlPZmZzKyJweCI7Ci1fM2I9KGV2LmNsaWVudFgrdGhpcy5zY3JvbGxQb3MueCktXzM5LnhPZmZzKyJweCI7Ci1fM2M9e3RvcDpfM2EsbGVmdDpfM2J9OwotfWVsc2V7Ci1pZihfMzkucm9vdEVsZW0uc3R5bGUucG9zaXRpb249PSJmaXhlZCIpewotXzNhPWV2LmNsaWVudFktXzM5LnlPZmZzKyJweCI7Ci1fM2I9ZXYuY2xpZW50WC1fMzkueE9mZnMrInB4IjsKLV8zYz17dG9wOl8zYSxsZWZ0Ol8zYn07Ci19Ci19Ci1fMzkucG9zRGlhbG9nKF8zYyk7Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5kcmFnRW5kPWZ1bmN0aW9uKGV2KXsKLXZhciBfM2U9dGhpczsKLWlmKCF0aGlzLm1vZGFsKXsKLXRoaXMuZWRpdG9yLnN1c3BlbmRVcGRhdGVUb29sYmFyPWZhbHNlOwotfQotaWYoIV8zZS5kcmFnZ2luZyl7Ci1yZXR1cm4gZmFsc2U7Ci19Ci1fM2UuZHJhZ2dpbmc9ZmFsc2U7Ci1YaW5oYS5fcmVtb3ZlRXZlbnQoZG9jdW1lbnQsIm1vdXNlbW92ZSIsXzNlLm1vdXNlTW92ZSk7Ci1pZihYaW5oYS5pc19pZSl7Ci1YaW5oYS5fcmVtb3ZlRXZlbnQodGhpcy5iYWNrZ3JvdW5kLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsIm1vdXNlbW92ZSIsXzNlLm1vdXNlTW92ZSk7Ci19Ci1YaW5oYS5fcmVtb3ZlRXZlbnQoZG9jdW1lbnQsIm1vdXNldXAiLF8zZS5tb3VzZVVwKTsKLWlmKFhpbmhhLmlzX2llKXsKLVhpbmhhLl9yZW1vdmVFdmVudCh0aGlzLmJhY2tncm91bmQuY29udGVudFdpbmRvdy5kb2N1bWVudCwibW91c2V1cCIsXzNlLm1vdXNlVXApOwotfQotdmFyIF8zZj1fM2Uucm9vdEVsZW0uc3R5bGU7Ci1fM2Uuc2l6ZS50b3A9XzNmLnRvcDsKLV8zZS5zaXplLmxlZnQ9XzNmLmxlZnQ7Ci1pZighdGhpcy5tb2RhbCl7Ci10aGlzLnNpemVCZ1RvRGlhbG9nKCk7Ci19Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5yZXNpemVTdGFydD1mdW5jdGlvbihldil7Ci12YXIgXzQxPXRoaXM7Ci1pZihfNDEucmVzaXppbmcpewotcmV0dXJuOwotfQotXzQxLnJlc2l6aW5nPXRydWU7Ci1pZighdGhpcy5tb2RhbCl7Ci10aGlzLmVkaXRvci5zdXNwZW5kVXBkYXRlVG9vbGJhcj10cnVlOwotdGhpcy5wb3NCYWNrZ3JvdW5kKHt0b3A6MCxsZWZ0OjB9KTsKLXRoaXMucmVzaXplQmFja2dyb3VuZChYaW5oYS5EaWFsb2cuY2FsY0Z1bGxCZ1NpemUoKSk7Ci19Ci1fNDEuc2Nyb2xsUG9zPV80MS5lZGl0b3Iuc2Nyb2xsUG9zKCk7Ci12YXIgc3Q9XzQxLnJvb3RFbGVtLnN0eWxlOwotc3QubWluSGVpZ2h0PSIiOwotc3Qub3ZlcmZsb3c9ImhpZGRlbiI7Ci1fNDEueE9mZnM9cGFyc2VJbnQoc3QubGVmdCwxMCk7Ci1fNDEueU9mZnM9cGFyc2VJbnQoc3QudG9wLDEwKTsKLV80MS5tb3VzZU1vdmU9ZnVuY3Rpb24oZXYpewotXzQxLnJlc2l6ZUl0KGV2KTsKLX07Ci1YaW5oYS5fYWRkRXZlbnQoZG9jdW1lbnQsIm1vdXNlbW92ZSIsXzQxLm1vdXNlTW92ZSk7Ci1pZihYaW5oYS5pc19pZSl7Ci1YaW5oYS5fYWRkRXZlbnQodGhpcy5iYWNrZ3JvdW5kLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsIm1vdXNlbW92ZSIsXzQxLm1vdXNlTW92ZSk7Ci19Ci1fNDEubW91c2VVcD1mdW5jdGlvbihldil7Ci1fNDEucmVzaXplRW5kKGV2KTsKLX07Ci1YaW5oYS5fYWRkRXZlbnQoZG9jdW1lbnQsIm1vdXNldXAiLF80MS5tb3VzZVVwKTsKLWlmKFhpbmhhLmlzX2llKXsKLVhpbmhhLl9hZGRFdmVudCh0aGlzLmJhY2tncm91bmQuY29udGVudFdpbmRvdy5kb2N1bWVudCwibW91c2V1cCIsXzQxLm1vdXNlVXApOwotfQotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUucmVzaXplSXQ9ZnVuY3Rpb24oZXYpewotdmFyIF80Nj10aGlzOwotaWYoIV80Ni5yZXNpemluZyl7Ci1yZXR1cm4gZmFsc2U7Ci19Ci12YXIgXzQ3LF80ODsKLWlmKF80Ni5yb290RWxlbS5zdHlsZS5wb3NpdGlvbj09ImFic29sdXRlIil7Ci1fNDc9ZXYuY2xpZW50WStfNDYuc2Nyb2xsUG9zLnk7Ci1fNDg9ZXYuY2xpZW50WCtfNDYuc2Nyb2xsUG9zLng7Ci19ZWxzZXsKLV80Nz1ldi5jbGllbnRZOwotXzQ4PWV2LmNsaWVudFg7Ci19Ci1fNDgtPV80Ni54T2ZmczsKLV80Ny09XzQ2LnlPZmZzOwotdmFyIF80OT17fTsKLV80OS53aWR0aD0oKF80OD4xMCk/XzQ4OjEwKSs4KyJweCI7Ci1fNDkuaGVpZ2h0PSgoXzQ3PjEwKT9fNDc6MTApKyJweCI7Ci1fNDYuc2l6ZURpYWxvZyhfNDkpOwotXzQ2LndpZHRoPV80Ni5yb290RWxlbS5vZmZzZXRXaWR0aDsKLV80Ni5oZWlnaHQ9XzQ2LnJvb3RFbGVtLm9mZnNldEhlaWdodDsKLV80Ni5vbnJlc2l6ZSgpOwotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUucmVzaXplRW5kPWZ1bmN0aW9uKGV2KXsKLXZhciBfNGI9dGhpczsKLV80Yi5yZXNpemluZz1mYWxzZTsKLWlmKCF0aGlzLm1vZGFsKXsKLXRoaXMuZWRpdG9yLnN1c3BlbmRVcGRhdGVUb29sYmFyPWZhbHNlOwotfQotWGluaGEuX3JlbW92ZUV2ZW50KGRvY3VtZW50LCJtb3VzZW1vdmUiLF80Yi5tb3VzZU1vdmUpOwotaWYoWGluaGEuaXNfaWUpewotWGluaGEuX3JlbW92ZUV2ZW50KHRoaXMuYmFja2dyb3VuZC5jb250ZW50V2luZG93LmRvY3VtZW50LCJtb3VzZXVwIixfNGIubW91c2VVcCk7Ci19Ci1YaW5oYS5fcmVtb3ZlRXZlbnQoZG9jdW1lbnQsIm1vdXNldXAiLF80Yi5tb3VzZVVwKTsKLWlmKFhpbmhhLmlzX2llKXsKLVhpbmhhLl9yZW1vdmVFdmVudCh0aGlzLmJhY2tncm91bmQuY29udGVudFdpbmRvdy5kb2N1bWVudCwibW91c2V1cCIsXzRiLm1vdXNlVXApOwotfQotXzRiLnNpemUud2lkdGg9XzRiLnJvb3RFbGVtLm9mZnNldFdpZHRoOwotXzRiLnNpemUuaGVpZ2h0PV80Yi5yb290RWxlbS5vZmZzZXRIZWlnaHQ7Ci1pZighdGhpcy5tb2RhbCl7Ci10aGlzLnNpemVCZ1RvRGlhbG9nKCk7Ci19Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5hdHRhY2hUb1BhbmVsPWZ1bmN0aW9uKF80Yyl7Ci12YXIgXzRkPXRoaXM7Ci12YXIgXzRlPXRoaXMucm9vdEVsZW07Ci12YXIgXzRmPXRoaXMuZWRpdG9yOwotdGhpcy5hdHRhY2hlZD10cnVlOwotdGhpcy5yb290RWxlbS5zaWRlPV80YzsKLXRoaXMuY2FwdGlvbkJhci5vbmRibGNsaWNrPWZ1bmN0aW9uKGV2KXsKLV80ZC5kZXRhY2hGcm9tUGFuZWwoWGluaGEuZ2V0RXZlbnQoZXYpKTsKLX07Ci1fNGUuc3R5bGUucG9zaXRpb249InN0YXRpYyI7Ci1fNGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChfNGUpOwotdGhpcy5iYWNrZ3JvdW5kLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwotdGhpcy5jYXB0aW9uQmFyLnN0eWxlLnBhZGRpbmdMZWZ0PSIzcHgiOwotdGhpcy5yZXNpemVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwotaWYodGhpcy5jbG9zYWJsZSl7Ci10aGlzLmNsb3Nlci5zdHlsZS5kaXNwbGF5PSJub25lIjsKLX0KLXRoaXMuaWNvbi5zdHlsZS5kaXNwbGF5PSJub25lIjsKLWlmKF80Yz09ImxlZnQifHxfNGM9PSJyaWdodCIpewotXzRlLnN0eWxlLndpZHRoPV80Zi5jb25maWcucGFuZWxfZGltZW5zaW9uc1tfNGNdOwotfWVsc2V7Ci1fNGUuc3R5bGUud2lkdGg9IiI7Ci19Ci1YaW5oYS5hZGRDbGFzc2VzKF80ZSwicGFuZWwiKTsKLV80Zi5fcGFuZWxzW180Y10ucGFuZWxzLnB1c2goXzRlKTsKLV80Zi5fcGFuZWxzW180Y10uZGl2LmFwcGVuZENoaWxkKF80ZSk7Ci1fNGYubm90aWZ5T2YoInBhbmVsX2NoYW5nZSIseyJhY3Rpb24iOiJhZGQiLCJwYW5lbCI6XzRlfSk7Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5kZXRhY2hGcm9tUGFuZWw9ZnVuY3Rpb24oKXsKLXZhciBfNTE9dGhpczsKLXZhciBfNTI9XzUxLnJvb3RFbGVtOwotdmFyIF81Mz1fNTIuc3R5bGU7Ci12YXIgXzU0PV81MS5lZGl0b3I7Ci1fNTEuYXR0YWNoZWQ9ZmFsc2U7Ci12YXIgcG9zPVhpbmhhLmdldEVsZW1lbnRUb3BMZWZ0KF81Mik7Ci1fNTMucG9zaXRpb249ImFic29sdXRlIjsKLV81My50b3A9cG9zLnRvcCsicHgiOwotXzUzLmxlZnQ9cG9zLmxlZnQrInB4IjsKLV81MS5yZXNpemVyLnN0eWxlLmRpc3BsYXk9IiI7Ci1pZihfNTEuY2xvc2FibGUpewotXzUxLmNsb3Nlci5zdHlsZS5kaXNwbGF5PSIiOwotfQotXzUxLmljb24uc3R5bGUuZGlzcGxheT0iIjsKLWlmKF81MS5zaXplLndpZHRoKXsKLV81Mi5zdHlsZS53aWR0aD1fNTEuc2l6ZS53aWR0aCsicHgiOwotfQotWGluaGEucmVtb3ZlQ2xhc3NlcyhfNTIsInBhbmVsIik7Ci1fNTQucmVtb3ZlUGFuZWwoXzUyKTsKLWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoXzUyKTsKLV81MS5jYXB0aW9uQmFyLm9uZGJsY2xpY2s9ZnVuY3Rpb24oKXsKLV81MS5hdHRhY2hUb1BhbmVsKF81Mi5zaWRlKTsKLX07Ci10aGlzLmJhY2tncm91bmQuc3R5bGUuZGlzcGxheT0iIjsKLXRoaXMuc2l6ZUJnVG9EaWFsb2coKTsKLX07Ci1YaW5oYS5EaWFsb2cuY2FsY0Z1bGxCZ1NpemU9ZnVuY3Rpb24oKXsKLXZhciBfNTY9WGluaGEucGFnZVNpemUoKTsKLXZhciBfNTc9WGluaGEudmlld3BvcnRTaXplKCk7Ci1yZXR1cm4ge3dpZHRoOihfNTYueD5fNTcueD9fNTYueDpfNTcueCkrInB4IixoZWlnaHQ6KF81Ni54Pl81Ny55P181Ni55Ol81Ny55KSsicHgifTsKLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLnNpemVCZ1RvRGlhbG9nPWZ1bmN0aW9uKCl7Ci12YXIgXzU4PXRoaXMucm9vdEVsZW0uc3R5bGU7Ci12YXIgXzU5PXRoaXMuYmFja2dyb3VuZC5zdHlsZTsKLV81OS50b3A9XzU4LnRvcDsKLV81OS5sZWZ0PV81OC5sZWZ0OwotXzU5LndpZHRoPV81OC53aWR0aDsKLV81OS5oZWlnaHQ9XzU4LmhlaWdodDsKLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLmhpZGVCYWNrZ3JvdW5kPWZ1bmN0aW9uKCl7Ci1YaW5oYS5EaWFsb2cuZmFkZU91dCh0aGlzLmJhY2tncm91bmQpOwotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUuc2hvd0JhY2tncm91bmQ9ZnVuY3Rpb24oKXsKLVhpbmhhLkRpYWxvZy5mYWRlSW4odGhpcy5iYWNrZ3JvdW5kLDcwKTsKLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLnBvc0JhY2tncm91bmQ9ZnVuY3Rpb24ocG9zKXsKLWlmKHRoaXMuYmFja2dyb3VuZC5zdHlsZS5kaXNwbGF5IT0ibm9uZSIpewotdGhpcy5iYWNrZ3JvdW5kLnN0eWxlLnRvcD1wb3MudG9wOwotdGhpcy5iYWNrZ3JvdW5kLnN0eWxlLmxlZnQ9cG9zLmxlZnQ7Ci19Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5yZXNpemVCYWNrZ3JvdW5kPWZ1bmN0aW9uKF81Yil7Ci1pZih0aGlzLmJhY2tncm91bmQuc3R5bGUuZGlzcGxheSE9Im5vbmUiKXsKLXRoaXMuYmFja2dyb3VuZC5zdHlsZS53aWR0aD1fNWIud2lkdGg7Ci10aGlzLmJhY2tncm91bmQuc3R5bGUuaGVpZ2h0PV81Yi5oZWlnaHQ7Ci19Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5wb3NEaWFsb2c9ZnVuY3Rpb24ocG9zKXsKLXZhciBzdD10aGlzLnJvb3RFbGVtLnN0eWxlOwotc3QubGVmdD1wb3MubGVmdDsKLXN0LnRvcD1wb3MudG9wOwotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUuc2l6ZURpYWxvZz1mdW5jdGlvbihfNWUpewotdmFyIHN0PXRoaXMucm9vdEVsZW0uc3R5bGU7Ci1zdC5oZWlnaHQ9XzVlLmhlaWdodDsKLXN0LndpZHRoPV81ZS53aWR0aDsKLXZhciBfNjA9cGFyc2VJbnQoXzVlLndpZHRoLDEwKTsKLXZhciBfNjE9cGFyc2VJbnQoXzVlLmhlaWdodCwxMCktdGhpcy5jYXB0aW9uQmFyLm9mZnNldEhlaWdodDsKLXRoaXMubWFpbi5zdHlsZS5oZWlnaHQ9KF82MT4yMCk/XzYxOjIwKyJweCI7Ci10aGlzLm1haW4uc3R5bGUud2lkdGg9KF82MD4xMCk/XzYwOjEwKyJweCI7Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5zZXRWYWx1ZXM9ZnVuY3Rpb24oXzYyKXsKLWZvcih2YXIgaSBpbiBfNjIpewotaWYodHlwZW9mIGk9PSJzdHJpbmciKXsKLXZhciBfNjQ9dGhpcy5nZXRFbGVtZW50c0J5TmFtZShpKTsKLWlmKCFfNjQpewotY29udGludWU7Ci19Ci1mb3IodmFyIHg9MDt4PF82NC5sZW5ndGg7eCsrKXsKLXZhciBlPV82NFt4XTsKLXN3aXRjaChlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSl7Ci1jYXNlICJzZWxlY3QiOgotZm9yKHZhciBqPTA7ajxlLm9wdGlvbnMubGVuZ3RoO2orKyl7Ci1pZih0eXBlb2YgXzYyW2ldPT0ib2JqZWN0Iil7Ci1mb3IodmFyIGs9MDtrPF82MltpXS5sZW5ndGg7aysrKXsKLWlmKF82MltpXVtrXT09ZS5vcHRpb25zW2pdLnZhbHVlKXsKLWUub3B0aW9uc1tqXS5zZWxlY3RlZD10cnVlOwotfQotfQotfWVsc2V7Ci1pZihfNjJbaV09PWUub3B0aW9uc1tqXS52YWx1ZSl7Ci1lLm9wdGlvbnNbal0uc2VsZWN0ZWQ9dHJ1ZTsKLX0KLX0KLX0KLWJyZWFrOwotY2FzZSAidGV4dGFyZWEiOgotY2FzZSAiaW5wdXQiOgotc3dpdGNoKGUuZ2V0QXR0cmlidXRlKCJ0eXBlIikpewotY2FzZSAicmFkaW8iOgotaWYoZS52YWx1ZT09XzYyW2ldKXsKLWUuY2hlY2tlZD10cnVlOwotfQotYnJlYWs7Ci1jYXNlICJjaGVja2JveCI6Ci1pZih0eXBlb2YgXzYyW2ldPT0ib2JqZWN0Iil7Ci1mb3IoaiBpbiBfNjJbaV0pewotaWYoXzYyW2ldW2pdPT1lLnZhbHVlKXsKLWUuY2hlY2tlZD10cnVlOwotfQotfQotfWVsc2V7Ci1pZihfNjJbaV09PWUudmFsdWUpewotZS5jaGVja2VkPXRydWU7Ci19Ci19Ci1icmVhazsKLWRlZmF1bHQ6Ci1lLnZhbHVlPV82MltpXTsKLWJyZWFrOwotfQotfQotfQotfQotfQotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUuZ2V0VmFsdWVzPWZ1bmN0aW9uKCl7Ci12YXIgXzY5PVtdOwotdmFyIF82YT1YaW5oYS5jb2xsZWN0aW9uVG9BcnJheSh0aGlzLnJvb3RFbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpKS5hcHBlbmQoWGluaGEuY29sbGVjdGlvblRvQXJyYXkodGhpcy5yb290RWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGV4dGFyZWEiKSkpLmFwcGVuZChYaW5oYS5jb2xsZWN0aW9uVG9BcnJheSh0aGlzLnJvb3RFbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzZWxlY3QiKSkpOwotZm9yKHZhciB4PTA7eDxfNmEubGVuZ3RoO3grKyl7Ci12YXIgaT1fNmFbeF07Ci1pZighKGkubmFtZSYmdGhpcy5yX2lkW2kubmFtZV0pKXsKLWNvbnRpbnVlOwotfQotaWYodHlwZW9mIF82OVt0aGlzLnJfaWRbaS5uYW1lXV09PSJ1bmRlZmluZWQiKXsKLV82OVt0aGlzLnJfaWRbaS5uYW1lXV09bnVsbDsKLX0KLXZhciB2PV82OVt0aGlzLnJfaWRbaS5uYW1lXV07Ci1zd2l0Y2goaS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpewotY2FzZSAic2VsZWN0IjoKLWlmKGkubXVsdGlwbGUpewotaWYoIXYucHVzaCl7Ci1pZih2IT09bnVsbCl7Ci12PVt2XTsKLX1lbHNlewotdj1bXTsKLX0KLX0KLWZvcih2YXIgaj0wO2o8aS5vcHRpb25zLmxlbmd0aDtqKyspewotaWYoaS5vcHRpb25zW2pdLnNlbGVjdGVkKXsKLXYucHVzaChpLm9wdGlvbnNbal0udmFsdWUpOwotfQotfQotfWVsc2V7Ci1pZihpLnNlbGVjdGVkSW5kZXg+PTApewotdj1pLm9wdGlvbnNbaS5zZWxlY3RlZEluZGV4XTsKLX0KLX0KLWJyZWFrOwotZGVmYXVsdDoKLXN3aXRjaChpLnR5cGUudG9Mb3dlckNhc2UoKSl7Ci1jYXNlICJyYWRpbyI6Ci1pZihpLmNoZWNrZWQpewotdj1pLnZhbHVlOwotfQotYnJlYWs7Ci1jYXNlICJjaGVja2JveCI6Ci1pZih2PT09bnVsbCl7Ci1pZih0aGlzLmdldEVsZW1lbnRzQnlOYW1lKHRoaXMucl9pZFtpLm5hbWVdKS5sZW5ndGg+MSl7Ci12PVtdOwotfQotfQotaWYoaS5jaGVja2VkKXsKLWlmKHYhPT1udWxsJiZ0eXBlb2Ygdj09Im9iamVjdCImJnYucHVzaCl7Ci12LnB1c2goaS52YWx1ZSk7Ci19ZWxzZXsKLXY9aS52YWx1ZTsKLX0KLX0KLWJyZWFrOwotZGVmYXVsdDoKLXY9aS52YWx1ZTsKLWJyZWFrOwotfQotfQotXzY5W3RoaXMucl9pZFtpLm5hbWVdXT12OwotfQotcmV0dXJuIF82OTsKLX07Ci1YaW5oYS5EaWFsb2cucHJvdG90eXBlLnNldExvY2FsaXplcj1mdW5jdGlvbihfNmYpewotdmFyIF83MD10aGlzOwotaWYodHlwZW9mIF82Zj09ImZ1bmN0aW9uIil7Ci1fNzAuX2xjPV82ZjsKLX1lbHNlewotaWYoXzZmKXsKLXRoaXMuX2xjPWZ1bmN0aW9uKF83MSl7Ci1yZXR1cm4gWGluaGEuX2xjKF83MSxfNmYpOwotfTsKLX1lbHNlewotdGhpcy5fbGM9ZnVuY3Rpb24oXzcyKXsKLXJldHVybiBfNzI7Ci19OwotfQotfQotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUudHJhbnNsYXRlSHRtbD1mdW5jdGlvbihfNzMsXzc0KXsKLXZhciBfNzU9dGhpczsKLWlmKF83NCl7Ci10aGlzLnNldExvY2FsaXplcihfNzQpOwotfQotXzczPV83My5yZXBsYWNlKC8oKD86bmFtZSl8KD86aWQpKT0oWyciXSlcWyhbYS16MC05X10rKVxdXDIvaWcsZnVuY3Rpb24oXzc2LF83NyxfNzgsaWQpewotcmV0dXJuIF83NysiPSIrXzc4K183NS5jcmVhdGVJZChpZCkrXzc4OwotfSkucmVwbGFjZSgvPGwxMG4+KC4qPyk8XC9sMTBuPi9pZyxmdW5jdGlvbihfN2EsXzdiKXsKLXJldHVybiBfNzUuX2xjKF83Yik7Ci19KS5yZXBsYWNlKC9cPSJfXCgoLio/KVwpIi9nLGZ1bmN0aW9uKF83YyxfN2QpewotcmV0dXJuICI9XCIiK183NS5fbGMoXzdkKSsiXCIiOwotfSk7Ci1yZXR1cm4gXzczOwotfTsKLVhpbmhhLkRpYWxvZy5wcm90b3R5cGUuZml4dXBET009ZnVuY3Rpb24oXzdlLF83Zil7Ci12YXIgXzgwPXRoaXM7Ci1pZih0eXBlb2YgXzdmIT0ic3RyaW5nIil7Ci1fN2Y9IkdlbmVyaWNQbHVnaW4iOwotfQotdmFyIF84MT1mdW5jdGlvbihfODIsXzgzKXsKLXN3aXRjaChfODMpewotY2FzZSAiZWRpdG9yIjoKLXJldHVybiBfZWRpdG9yX3VybDsKLWNhc2UgInBsdWdpbiI6Ci1yZXR1cm4gWGluaGEuZ2V0UGx1Z2luRGlyKF83Zik7Ci1jYXNlICJpbWFnZXMiOgotcmV0dXJuIF84MC5lZGl0b3IuaW1nVVJMKCJpbWFnZXMiKTsKLX0KLX07Ci12YXIgXzg0PVhpbmhhLmNvbGxlY3Rpb25Ub0FycmF5KF83ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaW1nIikpOwotZm9yKHZhciBfODU9MDtfODU8Xzg0Lmxlbmd0aDsrK184NSl7Ci12YXIgXzg2PV84NFtfODVdOwotdmFyIF84Nz1fODYuZ2V0QXR0cmlidXRlKCJzcmMiKTsKLWlmKF84Nyl7Ci12YXIgXzg4PV84Ny5yZXBsYWNlKC9eXFsoZWRpdG9yfHBsdWdpbnxpbWFnZXMpXF0vLF84MSk7Ci1pZihfODghPV84Nyl7Ci1fODYuc2V0QXR0cmlidXRlKCJzcmMiLF84OCk7Ci19Ci19Ci19Ci12YXIgXzg5PVhpbmhhLmNvbGxlY3Rpb25Ub0FycmF5KF83ZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYSIpKTsKLWZvcih2YXIgXzg1PTA7Xzg1PF84OS5sZW5ndGg7KytfODUpewotdmFyIF84YT1fODlbXzg1XTsKLXZhciBfODc9XzhhLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwotaWYoXzg3KXsKLXZhciBfODg9Xzg3LnJlcGxhY2UoL15cWyhlZGl0b3J8cGx1Z2lufGltYWdlcylcXS8sXzgxKTsKLWlmKF84OCE9Xzg3KXsKLV84YS5zZXRBdHRyaWJ1dGUoImhyZWYiLF84OCk7Ci19Ci19Ci19Ci19OwotWGluaGEuRGlhbG9nLnByb3RvdHlwZS5jcmVhdGVJZD1mdW5jdGlvbihpZCl7Ci12YXIgXzhjPXRoaXM7Ci1pZih0eXBlb2YgXzhjLmlkW2lkXT09InVuZGVmaW5lZCIpewotXzhjLmlkW2lkXT1YaW5oYS51bmlxKCJEaWFsb2ciKTsKLV84Yy5yX2lkW184Yy5pZFtpZF1dPWlkOwotfQotcmV0dXJuIF84Yy5pZFtpZF07Ci19OwotWGluaGEuRGlhbG9nLmFjdGl2YXRlTW9kZWxlc3M9ZnVuY3Rpb24oXzhkKXsKLWlmKFhpbmhhLkRpYWxvZy5hY3RpdmVNb2RlbGVzcz09XzhkfHxfOGQuYXR0YWNoZWQpewotcmV0dXJuOwotfQotaWYoWGluaGEuRGlhbG9nLmFjdGl2ZU1vZGVsZXNzKXsKLVhpbmhhLkRpYWxvZy5hY3RpdmVNb2RlbGVzcy5yb290RWxlbS5zdHlsZS56SW5kZXg9cGFyc2VJbnQoWGluaGEuRGlhbG9nLmFjdGl2ZU1vZGVsZXNzLnJvb3RFbGVtLnN0eWxlLnpJbmRleCwxMCktMTA7Ci19Ci1YaW5oYS5EaWFsb2cuYWN0aXZlTW9kZWxlc3M9XzhkOwotWGluaGEuRGlhbG9nLmFjdGl2ZU1vZGVsZXNzLnJvb3RFbGVtLnN0eWxlLnpJbmRleD1wYXJzZUludChYaW5oYS5EaWFsb2cuYWN0aXZlTW9kZWxlc3Mucm9vdEVsZW0uc3R5bGUuekluZGV4LDEwKSsxMDsKLX07Ci1YaW5oYS5EaWFsb2cuc2V0T3BhY2l0eT1mdW5jdGlvbihlbCxfOGYpewotaWYodHlwZW9mIGVsLnN0eWxlLmZpbHRlciE9InVuZGVmaW5lZCIpewotZWwuc3R5bGUuZmlsdGVyPShfOGY8MTAwKT8iYWxwaGEob3BhY2l0eT0iK184ZisiKSI6IiI7Ci19ZWxzZXsKLWVsLnN0eWxlLm9wYWNpdHk9XzhmLzEwMDsKLX0KLX07Ci1YaW5oYS5EaWFsb2cuZmFkZUluPWZ1bmN0aW9uKGVsLF85MSxfOTIsXzkzLF85NCl7Ci1fOTM9XzkzfHwxOwotXzk0PV85NHx8MjU7Ci1fOTE9XzkxfHwxMDA7Ci1lbC5vcD1lbC5vcHx8MDsKLXZhciBvcD1lbC5vcDsKLWlmKGVsLnN0eWxlLmRpc3BsYXk9PSJub25lIil7Ci1YaW5oYS5EaWFsb2cuc2V0T3BhY2l0eShlbCwwKTsKLWVsLnN0eWxlLmRpc3BsYXk9IiI7Ci19Ci1pZihvcDxfOTEpewotZWwub3ArPV85NDsKLVhpbmhhLkRpYWxvZy5zZXRPcGFjaXR5KGVsLG9wKTsKLWVsLnRpbWVPdXQ9c2V0VGltZW91dChmdW5jdGlvbigpewotWGluaGEuRGlhbG9nLmZhZGVJbihlbCxfOTEsXzkyLF85MyxfOTQpOwotfSxfOTMpOwotfWVsc2V7Ci1YaW5oYS5EaWFsb2cuc2V0T3BhY2l0eShlbCxfOTEpOwotZWwub3A9XzkxOwotZWwudGltZU91dD1udWxsOwotaWYodHlwZW9mIF85Mj09ImZ1bmN0aW9uIil7Ci1fOTIuY2FsbCgpOwotfQotfQotfTsKLVhpbmhhLkRpYWxvZy5mYWRlT3V0PWZ1bmN0aW9uKGVsLF85NyxfOTgpewotXzk3PV85N3x8MTsKLV85OD1fOTh8fDMwOwotaWYodHlwZW9mIGVsLm9wPT0idW5kZWZpbmVkIil7Ci1lbC5vcD0xMDA7Ci19Ci12YXIgb3A9ZWwub3A7Ci1pZihvcD49MCl7Ci1lbC5vcC09Xzk4OwotWGluaGEuRGlhbG9nLnNldE9wYWNpdHkoZWwsb3ApOwotZWwudGltZU91dD1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7Ci1YaW5oYS5EaWFsb2cuZmFkZU91dChlbCxfOTcsXzk4KTsKLX0sXzk3KTsKLX1lbHNlewotWGluaGEuRGlhbG9nLnNldE9wYWNpdHkoZWwsMCk7Ci1lbC5zdHlsZS5kaXNwbGF5PSJub25lIjsKLWVsLm9wPTA7Ci1lbC50aW1lT3V0PW51bGw7Ci19Ci19OwotCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9EaWFsb2dzL2RpYWxvZy5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0RpYWxvZ3MvZGlhbG9nLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MWY0YTRhLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0RpYWxvZ3MvZGlhbG9nLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvRGlhbG9ncy9kaWFsb2cuanMgKi8KLWZ1bmN0aW9uIERpYWxvZyhfMSxfMixfMyl7Ci1pZih0eXBlb2YgXzM9PSJ1bmRlZmluZWQiKXsKLV8zPXdpbmRvdzsKLX0KLWlmKHR5cGVvZiB3aW5kb3cuc2hvd01vZGFsRGlhbG9nPT0iZnVuY3Rpb24iJiYhWGluaGEuaXNfd2Via2l0KXsKLURpYWxvZy5fcmV0dXJuPWZ1bmN0aW9uKF80KXsKLWlmKHR5cGVvZiBfMj09ImZ1bmN0aW9uIil7Ci1fMihfNCk7Ci19Ci19OwotdmFyIHI9d2luZG93LnNob3dNb2RhbERpYWxvZyhfMSxfMywiZGlhbG9naGVpZ2h0PTMwMDtkaWFsb2d3aWR0aD00MDA7cmVzaXphYmxlPXllcyIpOwotfWVsc2V7Ci1EaWFsb2cuX2dlY2tvT3Blbk1vZGFsKF8xLF8yLF8zKTsKLX0KLX07Ci1EaWFsb2cuX3BhcmVudEV2ZW50PWZ1bmN0aW9uKGV2KXsKLXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKLWlmKERpYWxvZy5fbW9kYWwmJiFEaWFsb2cuX21vZGFsLmNsb3NlZCl7Ci1EaWFsb2cuX21vZGFsLmZvY3VzKCk7Ci19Ci19LDUwKTsKLXRyeXsKLWlmKERpYWxvZy5fbW9kYWwmJiFEaWFsb2cuX21vZGFsLmNsb3NlZCl7Ci1YaW5oYS5fc3RvcEV2ZW50KGV2KTsKLX0KLX0KLWNhdGNoKGUpewotfQotfTsKLURpYWxvZy5fcmV0dXJuPW51bGw7Ci1EaWFsb2cuX21vZGFsPW51bGw7Ci1EaWFsb2cuX2FyZ3VtZW50cz1udWxsOwotRGlhbG9nLl9zZWxlY3Rpb249bnVsbDsKLURpYWxvZy5fZ2Vja29PcGVuTW9kYWw9ZnVuY3Rpb24oXzcsXzgsXzkpewotdmFyIF9hPXdpbmRvdy5vcGVuKF83LCJoYWRpYWxvZyIsInRvb2xiYXI9bm8sbWVudWJhcj1ubyxwZXJzb25hbGJhcj1ubyx3aWR0aD0xMCxoZWlnaHQ9MTAsIisic2Nyb2xsYmFycz1ubyxyZXNpemFibGU9eWVzLG1vZGFsPXllcyxkZXBlbmRhYmxlPXllcyIpOwotRGlhbG9nLl9tb2RhbD1fYTsKLURpYWxvZy5fYXJndW1lbnRzPV85OwotZnVuY3Rpb24gY2Fwd2luKHcpewotWGluaGEuX2FkZEV2ZW50KHcsImNsaWNrIixEaWFsb2cuX3BhcmVudEV2ZW50KTsKLVhpbmhhLl9hZGRFdmVudCh3LCJtb3VzZWRvd24iLERpYWxvZy5fcGFyZW50RXZlbnQpOwotWGluaGEuX2FkZEV2ZW50KHcsImZvY3VzIixEaWFsb2cuX3BhcmVudEV2ZW50KTsKLX07Ci1mdW5jdGlvbiByZWx3aW4odyl7Ci1YaW5oYS5fcmVtb3ZlRXZlbnQodywiY2xpY2siLERpYWxvZy5fcGFyZW50RXZlbnQpOwotWGluaGEuX3JlbW92ZUV2ZW50KHcsIm1vdXNlZG93biIsRGlhbG9nLl9wYXJlbnRFdmVudCk7Ci1YaW5oYS5fcmVtb3ZlRXZlbnQodywiZm9jdXMiLERpYWxvZy5fcGFyZW50RXZlbnQpOwotfTsKLWNhcHdpbih3aW5kb3cpOwotZm9yKHZhciBpPTA7aTx3aW5kb3cuZnJhbWVzLmxlbmd0aDtpKyspewotdHJ5ewotY2Fwd2luKHdpbmRvdy5mcmFtZXNbaV0pOwotfQotY2F0Y2goZSl7Ci19Ci19Ci1EaWFsb2cuX3JldHVybj1mdW5jdGlvbihfZSl7Ci1pZihfZSYmXzgpewotXzgoX2UpOwotfQotcmVsd2luKHdpbmRvdyk7Ci1mb3IodmFyIGk9MDtpPHdpbmRvdy5mcmFtZXMubGVuZ3RoO2krKyl7Ci10cnl7Ci1yZWx3aW4od2luZG93LmZyYW1lc1tpXSk7Ci19Ci1jYXRjaChlKXsKLX0KLX0KLURpYWxvZy5fbW9kYWw9bnVsbDsKLX07Ci1EaWFsb2cuX21vZGFsLmZvY3VzKCk7Ci19OwotCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9EaWFsb2dzL2Rpdi1kaWFsb2cuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9EaWFsb2dzL2Rpdi1kaWFsb2cuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NTY4MzQuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRGlhbG9ncy9kaXYtZGlhbG9nLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvRGlhbG9ncy9kaXYtZGlhbG9nLmpzICovCi1YaW5oYS5EaXZEaWFsb2c9ZnVuY3Rpb24oXzEsXzIsXzMpewotdGhpcy5pZD17fTsKLXRoaXMucl9pZD17fTsKLXRoaXMuZG9jdW1lbnQ9ZG9jdW1lbnQ7Ci10aGlzLnJvb3RFbGVtPV8xOwotdGhpcy5yb290RWxlbS5jbGFzc05hbWUrPSIgZGlhbG9nIjsKLXRoaXMucm9vdEVsZW0uc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci10aGlzLndpZHRoPXRoaXMucm9vdEVsZW0ub2Zmc2V0V2lkdGgrInB4IjsKLXRoaXMuaGVpZ2h0PXRoaXMucm9vdEVsZW0ub2Zmc2V0SGVpZ2h0KyJweCI7Ci10aGlzLnNldExvY2FsaXplcihfMyk7Ci10aGlzLnJvb3RFbGVtLmlubmVySFRNTD10aGlzLnRyYW5zbGF0ZUh0bWwoXzIpOwotfTsKLVhpbmhhLmV4dGVuZChYaW5oYS5EaXZEaWFsb2csWGluaGEuRGlhbG9nKTsKLVhpbmhhLkRpdkRpYWxvZy5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbihfNCl7Ci1pZih0eXBlb2YgXzQhPSJ1bmRlZmluZWQiKXsKLXRoaXMuc2V0VmFsdWVzKF80KTsKLX0KLXRoaXMucm9vdEVsZW0uc3R5bGUuZGlzcGxheT0iIjsKLX07Ci1YaW5oYS5EaXZEaWFsb2cucHJvdG90eXBlLmhpZGU9ZnVuY3Rpb24oKXsKLXRoaXMucm9vdEVsZW0uc3R5bGUuZGlzcGxheT0ibm9uZSI7Ci1yZXR1cm4gdGhpcy5nZXRWYWx1ZXMoKTsKLX07Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0RpYWxvZ3MvcGFuZWwtZGlhbG9nLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRGlhbG9ncy9wYW5lbC1kaWFsb2cuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NTVlNmMuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRGlhbG9ncy9wYW5lbC1kaWFsb2cuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9EaWFsb2dzL3BhbmVsLWRpYWxvZy5qcyAqLwotWGluaGEuUGFuZWxEaWFsb2c9ZnVuY3Rpb24oXzEsXzIsXzMsXzQpewotdGhpcy5pZD17fTsKLXRoaXMucl9pZD17fTsKLXRoaXMuZWRpdG9yPV8xOwotdGhpcy5kb2N1bWVudD1kb2N1bWVudDsKLXRoaXMucm9vdEVsZW09XzEuYWRkUGFuZWwoXzIpOwotdmFyIF81PXRoaXM7Ci1pZih0eXBlb2YgXzQ9PSJmdW5jdGlvbiIpewotdGhpcy5fbGM9XzQ7Ci19ZWxzZXsKLWlmKF80KXsKLXRoaXMuX2xjPWZ1bmN0aW9uKF82KXsKLXJldHVybiBYaW5oYS5fbGMoXzYsXzQpOwotfTsKLX1lbHNlewotdGhpcy5fbGM9ZnVuY3Rpb24oXzcpewotcmV0dXJuIF83OwotfTsKLX0KLX0KLV8zPV8zLnJlcGxhY2UoL1xbKFthLXowLTlfXSspXF0vaWcsZnVuY3Rpb24oXzgsaWQpewotaWYodHlwZW9mIF81LmlkW2lkXT09InVuZGVmaW5lZCIpewotXzUuaWRbaWRdPVhpbmhhLnVuaXEoIkRpYWxvZyIpOwotXzUucl9pZFtfNS5pZFtpZF1dPWlkOwotfQotcmV0dXJuIF81LmlkW2lkXTsKLX0pLnJlcGxhY2UoLzxsMTBuPiguKj8pPFwvbDEwbj4vaWcsZnVuY3Rpb24oX2EsX2IpewotcmV0dXJuIF81Ll9sYyhfYik7Ci19KS5yZXBsYWNlKC89Il9cKCguKj8pXCkiL2csZnVuY3Rpb24oX2MsX2QpewotcmV0dXJuICI9XCIiK181Ll9sYyhfZCkrIlwiIjsKLX0pOwotdGhpcy5yb290RWxlbS5pbm5lckhUTUw9XzM7Ci19OwotWGluaGEuUGFuZWxEaWFsb2cucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oX2UpewotdGhpcy5zZXRWYWx1ZXMoX2UpOwotdGhpcy5lZGl0b3Iuc2hvd1BhbmVsKHRoaXMucm9vdEVsZW0pOwotfTsKLVhpbmhhLlBhbmVsRGlhbG9nLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKCl7Ci10aGlzLmVkaXRvci5oaWRlUGFuZWwodGhpcy5yb290RWxlbSk7Ci1yZXR1cm4gdGhpcy5nZXRWYWx1ZXMoKTsKLX07Ci1YaW5oYS5QYW5lbERpYWxvZy5wcm90b3R5cGUub25yZXNpemU9WGluaGEuRGlhbG9nLnByb3RvdHlwZS5vbnJlc2l6ZTsKLVhpbmhhLlBhbmVsRGlhbG9nLnByb3RvdHlwZS50b2dnbGU9WGluaGEuRGlhbG9nLnByb3RvdHlwZS50b2dnbGU7Ci1YaW5oYS5QYW5lbERpYWxvZy5wcm90b3R5cGUuc2V0VmFsdWVzPVhpbmhhLkRpYWxvZy5wcm90b3R5cGUuc2V0VmFsdWVzOwotWGluaGEuUGFuZWxEaWFsb2cucHJvdG90eXBlLmdldFZhbHVlcz1YaW5oYS5EaWFsb2cucHJvdG90eXBlLmdldFZhbHVlczsKLVhpbmhhLlBhbmVsRGlhbG9nLnByb3RvdHlwZS5nZXRFbGVtZW50QnlJZD1YaW5oYS5EaWFsb2cucHJvdG90eXBlLmdldEVsZW1lbnRCeUlkOwotWGluaGEuUGFuZWxEaWFsb2cucHJvdG90eXBlLmdldEVsZW1lbnRzQnlOYW1lPVhpbmhhLkRpYWxvZy5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeU5hbWU7Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0RpYWxvZ3MvcG9wdXB3aW4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9EaWFsb2dzL3BvcHVwd2luLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNmZhNDA3Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0RpYWxvZ3MvcG9wdXB3aW4uanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjIgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvRGlhbG9ncy9wb3B1cHdpbi5qcyAqLwotZnVuY3Rpb24gUG9wdXBXaW4oXzEsXzIsXzMsXzQpewotdGhpcy5lZGl0b3I9XzE7Ci10aGlzLmhhbmRsZXI9XzM7Ci12YXIgXzU9d2luZG93Lm9wZW4oIiIsIl9faGFfZGlhbG9nIiwidG9vbGJhcj1ubyxtZW51YmFyPW5vLHBlcnNvbmFsYmFyPW5vLHdpZHRoPTYwMCxoZWlnaHQ9NjAwLGxlZnQ9MjAsdG9wPTQwLHNjcm9sbGJhcnM9bm8scmVzaXphYmxlPXllcyIpOwotdGhpcy53aW5kb3c9XzU7Ci12YXIgXzY9XzUuZG9jdW1lbnQ7Ci10aGlzLmRvYz1fNjsKLXZhciBfNz10aGlzOwotdmFyIF84PWRvY3VtZW50LmJhc2VVUkl8fGRvY3VtZW50LlVSTDsKLWlmKF84JiZfOC5tYXRjaCgvKC4qKVwvKFteXC9dKykvKSl7Ci1fOD1SZWdFeHAuJDErIi8iOwotfQotaWYodHlwZW9mIF9lZGl0b3JfdXJsIT0idW5kZWZpbmVkIiYmISgvXlwvLy50ZXN0KF9lZGl0b3JfdXJsKSkmJiEoL2h0dHA6XC9cLy8udGVzdChfZWRpdG9yX3VybCkpKXsKLV84Kz1fZWRpdG9yX3VybDsKLX1lbHNlewotXzg9X2VkaXRvcl91cmw7Ci19Ci1pZighKC9cLyQvLnRlc3QoXzgpKSl7Ci1fOCs9Ii8iOwotfQotdGhpcy5iYXNlVVJMPV84OwotXzYub3BlbigpOwotdmFyIF85PSI8aHRtbD48aGVhZD48dGl0bGU+IitfMisiPC90aXRsZT5cbiI7Ci1fOSs9IjxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5AaW1wb3J0IHVybCgiK19lZGl0b3JfdXJsKyJYaW5oYS5jc3MpOzwvc3R5bGU+XG4iOwotaWYoX2VkaXRvcl9za2luIT0iIil7Ci1fOSs9IjxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj5AaW1wb3J0IHVybCgiK19lZGl0b3JfdXJsKyJza2lucy8iK19lZGl0b3Jfc2tpbisiL3NraW4uY3NzKTs8L3N0eWxlPlxuIjsKLX0KLV85Kz0iPC9oZWFkPlxuIjsKLV85Kz0iPGJvZHkgY2xhc3M9XCJkaWFsb2cgcG9wdXB3aW5cIiBpZD1cIi0tSEEtYm9keVwiPjwvYm9keT48L2h0bWw+IjsKLV82LndyaXRlKF85KTsKLV82LmNsb3NlKCk7Ci1mdW5jdGlvbiBpbml0MigpewotdmFyIF9hPV82LmJvZHk7Ci1pZighX2Epewotc2V0VGltZW91dChpbml0MiwyNSk7Ci1yZXR1cm4gZmFsc2U7Ci19Ci1fNS50aXRsZT1fMjsKLV82LmRvY3VtZW50RWxlbWVudC5zdHlsZS5wYWRkaW5nPSIwcHgiOwotXzYuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm1hcmdpbj0iMHB4IjsKLXZhciBfYj1fNi5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLV9iLmNsYXNzTmFtZT0iY29udGVudCI7Ci1fNy5jb250ZW50PV9iOwotX2EuYXBwZW5kQ2hpbGQoX2IpOwotXzcuZWxlbWVudD1fYTsKLV80KF83KTsKLV81LmZvY3VzKCk7Ci19OwotaW5pdDIoKTsKLX07Ci1Qb3B1cFdpbi5wcm90b3R5cGUuY2FsbEhhbmRsZXI9ZnVuY3Rpb24oKXsKLXZhciBfYz1bImlucHV0IiwidGV4dGFyZWEiLCJzZWxlY3QiXTsKLXZhciBfZD17fTsKLWZvcih2YXIgdGk9X2MubGVuZ3RoOy0tdGk+PTA7KXsKLXZhciBfZj1fY1t0aV07Ci12YXIgZWxzPXRoaXMuY29udGVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShfZik7Ci1mb3IodmFyIGo9MDtqPGVscy5sZW5ndGg7KytqKXsKLXZhciBlbD1lbHNbal07Ci12YXIgdmFsPWVsLnZhbHVlOwotaWYoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iaW5wdXQiKXsKLWlmKGVsLnR5cGU9PSJjaGVja2JveCIpewotdmFsPWVsLmNoZWNrZWQ7Ci19Ci19Ci1fZFtlbC5uYW1lXT12YWw7Ci19Ci19Ci10aGlzLmhhbmRsZXIodGhpcyxfZCk7Ci1yZXR1cm4gZmFsc2U7Ci19OwotUG9wdXBXaW4ucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7Ci10aGlzLndpbmRvdy5jbG9zZSgpOwotfTsKLVBvcHVwV2luLnByb3RvdHlwZS5hZGRCdXR0b25zPWZ1bmN0aW9uKCl7Ci12YXIgXzE0PXRoaXM7Ci12YXIgZGl2PXRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotdGhpcy5jb250ZW50LmFwcGVuZENoaWxkKGRpdik7Ci1kaXYuaWQ9ImJ1dHRvbnMiOwotZGl2LmNsYXNzTmFtZT0iYnV0dG9ucyI7Ci1mb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7KytpKXsKLXZhciBidG49YXJndW1lbnRzW2ldOwotdmFyIF8xOD10aGlzLmRvYy5jcmVhdGVFbGVtZW50KCJidXR0b24iKTsKLWRpdi5hcHBlbmRDaGlsZChfMTgpOwotXzE4LmlubmVySFRNTD1YaW5oYS5fbGMoYnRuLCJYaW5oYSIpOwotc3dpdGNoKGJ0bi50b0xvd2VyQ2FzZSgpKXsKLWNhc2UgIm9rIjoKLVhpbmhhLmFkZERvbTBFdmVudChfMTgsImNsaWNrIixmdW5jdGlvbigpewotXzE0LmNhbGxIYW5kbGVyKCk7Ci1fMTQuY2xvc2UoKTsKLXJldHVybiBmYWxzZTsKLX0pOwotYnJlYWs7Ci1jYXNlICJjYW5jZWwiOgotWGluaGEuYWRkRG9tMEV2ZW50KF8xOCwiY2xpY2siLGZ1bmN0aW9uKCl7Ci1fMTQuY2xvc2UoKTsKLXJldHVybiBmYWxzZTsKLX0pOwotYnJlYWs7Ci19Ci19Ci19OwotUG9wdXBXaW4ucHJvdG90eXBlLnNob3dBdEVsZW1lbnQ9ZnVuY3Rpb24oKXsKLXZhciBfMTk9dGhpczsKLXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKLXZhciB3PV8xOS5jb250ZW50Lm9mZnNldFdpZHRoKzQ7Ci12YXIgaD1fMTkuY29udGVudC5vZmZzZXRIZWlnaHQrNDsKLXZhciBlbD1fMTkuY29udGVudDsKLXZhciBzPWVsLnN0eWxlOwotcy5wb3NpdGlvbj0iYWJzb2x1dGUiOwotcy5sZWZ0PXBhcnNlSW50KCh3LWVsLm9mZnNldFdpZHRoKS8yLDEwKSsicHgiOwotcy50b3A9cGFyc2VJbnQoKGgtZWwub2Zmc2V0SGVpZ2h0KS8yLDEwKSsicHgiOwotaWYoWGluaGEuaXNfZ2Vja28pewotXzE5LndpbmRvdy5pbm5lcldpZHRoPXc7Ci1fMTkud2luZG93LmlubmVySGVpZ2h0PWg7Ci19ZWxzZXsKLV8xOS53aW5kb3cucmVzaXplVG8odys4LGgrNzApOwotfQotfSwyNSk7Ci19OwotCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2Z1bGwtc2NyZWVuLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9mdWxsLXNjcmVlbi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg3ZTE3ZC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2Z1bGwtc2NyZWVuLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTU0ICswLDAgQEAKLS8qIFRoaXMgY29tcHJlc3NlZCBmaWxlIGlzIHBhcnQgb2YgWGluaGEuIEZvciB1bmNvbXByZXNzZWQgc291cmNlcywgZm9ydW0sIGFuZCBidWcgcmVwb3J0cywgZ28gdG8geGluaGEub3JnICovCi0vKiBUaGUgVVJMIG9mIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpcyBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0Z1bGxTY3JlZW4vZnVsbC1zY3JlZW4uanMgKi8KLWZ1bmN0aW9uIEZ1bGxTY3JlZW4oXzEsXzIpewotdGhpcy5lZGl0b3I9XzE7Ci10aGlzLm9yaWdpbmFsU2l6ZXM9bnVsbDsKLV8xLl9zdXBlcmNsZWFuX29uPWZhbHNlOwotdmFyIF8zPV8xLmNvbmZpZzsKLV8zLnJlZ2lzdGVySWNvbigiZnVsbHNjcmVlbiIsW19lZGl0b3JfdXJsK18zLmltZ1VSTCsiZWRfYnV0dG9uc19tYWluLnBuZyIsOCwwXSk7Ci1fMy5yZWdpc3Rlckljb24oImZ1bGxzY3JlZW5yZXN0b3JlIixbX2VkaXRvcl91cmwrXzMuaW1nVVJMKyJlZF9idXR0b25zX21haW4ucG5nIiw5LDBdKTsKLV8zLnJlZ2lzdGVyQnV0dG9uKCJmdWxsc2NyZWVuIix0aGlzLl9sYygiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIiksXzMuaWNvbkxpc3QuZnVsbHNjcmVlbix0cnVlLGZ1bmN0aW9uKGUsXzUsXzYpewotZS5fZnVsbFNjcmVlbigpOwotfSk7Ci1fMy5hZGRUb29sYmFyRWxlbWVudCgiZnVsbHNjcmVlbiIsInBvcHVwZWRpdG9yIiwwKTsKLX07Ci1GdWxsU2NyZWVuLl9wbHVnaW5JbmZvPXtuYW1lOiJGdWxsU2NyZWVuIix2ZXJzaW9uOiIxLjAiLGRldmVsb3BlcjoiSmFtZXMgU2xlZW1hbiIsZGV2ZWxvcGVyX3VybDoiaHR0cDovL3d3dy5nb2dvLmNvLm56LyIsY19vd25lcjoiR29nbyBJbnRlcm5ldCBTZXJ2aWNlcyIsbGljZW5zZToiaHRtbEFyZWEiLHNwb25zb3I6IkdvZ28gSW50ZXJuZXQgU2VydmljZXMiLHNwb25zb3JfdXJsOiJodHRwOi8vd3d3LmdvZ28uY28ubnovIn07Ci1GdWxsU2NyZWVuLnByb3RvdHlwZS5fbGM9ZnVuY3Rpb24oXzcpewotcmV0dXJuIFhpbmhhLl9sYyhfNyx7dXJsOl9lZGl0b3JfdXJsKyJtb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy8iLGNvbnRleHQ6IkZ1bGxTY3JlZW4ifSk7Ci19OwotWGluaGEucHJvdG90eXBlLl9mdWxsU2NyZWVuPWZ1bmN0aW9uKCl7Ci12YXIgZT10aGlzOwotdmFyIF85PWUuY29uZmlnOwotZnVuY3Rpb24gc2l6ZUl0VXAoKXsKLWlmKCFlLl9pc0Z1bGxTY3JlZW58fGUuX3NpemluZyl7Ci1yZXR1cm4gZmFsc2U7Ci19Ci1lLl9zaXppbmc9dHJ1ZTsKLXZhciBfYT1YaW5oYS52aWV3cG9ydFNpemUoKTsKLWlmKGUuY29uZmlnLmZ1bGxTY3JlZW5TaXplRG93bk1ldGhvZD09InJlc3RvcmUiKXsKLWUub3JpZ2luYWxTaXplcz17eDpwYXJzZUludChlLl9odG1sQXJlYS5zdHlsZS53aWR0aCkseTpwYXJzZUludChlLl9odG1sQXJlYS5zdHlsZS5oZWlnaHQpLGRpbTpfYX07Ci19Ci12YXIgaD1fYS55LWUuY29uZmlnLmZ1bGxTY3JlZW5NYXJnaW5zWzBdLWUuY29uZmlnLmZ1bGxTY3JlZW5NYXJnaW5zWzJdOwotdmFyIHc9X2EueC1lLmNvbmZpZy5mdWxsU2NyZWVuTWFyZ2luc1sxXS1lLmNvbmZpZy5mdWxsU2NyZWVuTWFyZ2luc1szXTsKLWUuc2l6ZUVkaXRvcih3KyJweCIsaCsicHgiLHRydWUsdHJ1ZSk7Ci1lLl9zaXppbmc9ZmFsc2U7Ci1pZihlLl90b29sYmFyT2JqZWN0cy5mdWxsc2NyZWVuKXsKLWUuX3Rvb2xiYXJPYmplY3RzLmZ1bGxzY3JlZW4uc3dhcEltYWdlKF85Lmljb25MaXN0LmZ1bGxzY3JlZW5yZXN0b3JlKTsKLX0KLX07Ci1mdW5jdGlvbiBzaXplSXREb3duKCl7Ci1pZihlLl9pc0Z1bGxTY3JlZW58fGUuX3NpemluZyl7Ci1yZXR1cm4gZmFsc2U7Ci19Ci1lLl9zaXppbmc9dHJ1ZTsKLWlmKGUub3JpZ2luYWxTaXplcyE9bnVsbCl7Ci12YXIgb3M9ZS5vcmlnaW5hbFNpemVzOwotdmFyIF9lPVhpbmhhLnZpZXdwb3J0U2l6ZSgpOwotdmFyIG5XPW9zLngrKF9lLngtb3MuZGltLngpOwotdmFyIG5IPW9zLnkrKF9lLnktb3MuZGltLnkpOwotZS5zaXplRWRpdG9yKG5XKyJweCIsbkgrInB4IixlLmNvbmZpZy5zaXplSW5jbHVkZXNCYXJzLGUuY29uZmlnLnNpemVJbmNsdWRlc1BhbmVscyk7Ci1lLm9yaWdpbmFsU2l6ZXM9bnVsbDsKLX1lbHNlewotZS5pbml0U2l6ZSgpOwotfQotZS5fc2l6aW5nPWZhbHNlOwotaWYoZS5fdG9vbGJhck9iamVjdHMuZnVsbHNjcmVlbil7Ci1lLl90b29sYmFyT2JqZWN0cy5mdWxsc2NyZWVuLnN3YXBJbWFnZShfOS5pY29uTGlzdC5mdWxsc2NyZWVuKTsKLX0KLX07Ci1mdW5jdGlvbiByZXNldFNjcm9sbCgpewotaWYoZS5faXNGdWxsU2NyZWVuKXsKLXdpbmRvdy5zY3JvbGwoMCwwKTsKLXdpbmRvdy5zZXRUaW1lb3V0KHJlc2V0U2Nyb2xsLDE1MCk7Ci19Ci19OwotaWYodHlwZW9mIHRoaXMuX2lzRnVsbFNjcmVlbj09InVuZGVmaW5lZCIpewotdGhpcy5faXNGdWxsU2NyZWVuPWZhbHNlOwotaWYoZS50YXJnZXQhPWUuX2lmcmFtZSl7Ci1YaW5oYS5fYWRkRXZlbnQod2luZG93LCJyZXNpemUiLHNpemVJdFVwKTsKLX0KLX0KLWlmKFhpbmhhLmlzX2dlY2tvKXsKLXRoaXMuZGVhY3RpdmF0ZUVkaXRvcigpOwotfQotaWYodGhpcy5faXNGdWxsU2NyZWVuKXsKLXRoaXMuX2h0bWxBcmVhLnN0eWxlLnBvc2l0aW9uPSIiOwotaWYoIVhpbmhhLmlzX2llKXsKLXRoaXMuX2h0bWxBcmVhLnN0eWxlLmJvcmRlcj0iIjsKLX0KLXRyeXsKLWlmKFhpbmhhLmlzX2llJiZkb2N1bWVudC5jb21wYXRNb2RlPT0iQ1NTMUNvbXBhdCIpewotdmFyIGJvZD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpOwotfWVsc2V7Ci12YXIgYm9kPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5Iik7Ci19Ci1ib2RbMF0uc3R5bGUub3ZlcmZsb3c9IiI7Ci19Ci1jYXRjaChlKXsKLX0KLXRoaXMuX2lzRnVsbFNjcmVlbj1mYWxzZTsKLXNpemVJdERvd24oKTsKLXZhciBfMTI9dGhpcy5faHRtbEFyZWE7Ci13aGlsZSgoXzEyPV8xMi5wYXJlbnROb2RlKSYmXzEyLnN0eWxlKXsKLV8xMi5zdHlsZS5wb3NpdGlvbj1fMTIuX3hpbmhhX2Z1bGxTY3JlZW5PbGRQb3NpdGlvbjsKLV8xMi5feGluaGFfZnVsbFNjcmVlbk9sZFBvc2l0aW9uPW51bGw7Ci19Ci1pZihYaW5oYS5pZV92ZXJzaW9uPDcpewotdmFyIF8xMz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0Iik7Ci1mb3IodmFyIGk9MDtpPF8xMy5sZW5ndGg7KytpKXsKLV8xM1tpXS5zdHlsZS52aXNpYmlsaXR5PSJ2aXNpYmxlIjsKLX0KLX0KLXdpbmRvdy5zY3JvbGwodGhpcy5fdW5TY3JvbGwueCx0aGlzLl91blNjcm9sbC55KTsKLX1lbHNlewotdGhpcy5fdW5TY3JvbGw9e3g6KHdpbmRvdy5wYWdlWE9mZnNldCk/KHdpbmRvdy5wYWdlWE9mZnNldCk6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQ6ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LHk6KHdpbmRvdy5wYWdlWU9mZnNldCk/KHdpbmRvdy5wYWdlWU9mZnNldCk6KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcDpkb2N1bWVudC5ib2R5LnNjcm9sbFRvcH07Ci12YXIgXzEyPXRoaXMuX2h0bWxBcmVhOwotd2hpbGUoKF8xMj1fMTIucGFyZW50Tm9kZSkmJl8xMi5zdHlsZSl7Ci1fMTIuX3hpbmhhX2Z1bGxTY3JlZW5PbGRQb3NpdGlvbj1fMTIuc3R5bGUucG9zaXRpb247Ci1fMTIuc3R5bGUucG9zaXRpb249InN0YXRpYyI7Ci19Ci1pZihYaW5oYS5pZV92ZXJzaW9uPDcpewotdmFyIF8xMz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2VsZWN0Iik7Ci12YXIgcyxfMTY7Ci1mb3IodmFyIGk9MDtpPF8xMy5sZW5ndGg7KytpKXsKLXM9XzEzW2ldOwotXzE2PWZhbHNlOwotd2hpbGUocz1zLnBhcmVudE5vZGUpewotaWYocz09dGhpcy5faHRtbEFyZWEpewotXzE2PXRydWU7Ci1icmVhazsKLX0KLX0KLWlmKCFfMTYmJl8xM1tpXS5zdHlsZS52aXNpYmlsaXR5IT0iaGlkZGVuIil7Ci1fMTNbaV0uc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIjsKLX0KLX0KLX0KLXdpbmRvdy5zY3JvbGwoMCwwKTsKLXRoaXMuX2h0bWxBcmVhLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Ci10aGlzLl9odG1sQXJlYS5zdHlsZS56SW5kZXg9OTk5OwotdGhpcy5faHRtbEFyZWEuc3R5bGUubGVmdD1lLmNvbmZpZy5mdWxsU2NyZWVuTWFyZ2luc1szXSsicHgiOwotdGhpcy5faHRtbEFyZWEuc3R5bGUudG9wPWUuY29uZmlnLmZ1bGxTY3JlZW5NYXJnaW5zWzBdKyJweCI7Ci1pZighWGluaGEuaXNfaWUmJiFYaW5oYS5pc193ZWJraXQpewotdGhpcy5faHRtbEFyZWEuc3R5bGUuYm9yZGVyPSJub25lIjsKLX0KLXRoaXMuX2lzRnVsbFNjcmVlbj10cnVlOwotcmVzZXRTY3JvbGwoKTsKLXRyeXsKLWlmKFhpbmhhLmlzX2llJiZkb2N1bWVudC5jb21wYXRNb2RlPT0iQ1NTMUNvbXBhdCIpewotdmFyIGJvZD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaHRtbCIpOwotfWVsc2V7Ci12YXIgYm9kPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5Iik7Ci19Ci1ib2RbMF0uc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiI7Ci19Ci1jYXRjaChlKXsKLX0KLXNpemVJdFVwKCk7Ci19Ci1pZihYaW5oYS5pc19nZWNrbyl7Ci10aGlzLmFjdGl2YXRlRWRpdG9yKCk7Ci19Ci10aGlzLmZvY3VzRWRpdG9yKCk7Ci19OwotCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvZGUuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvZGUuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyZmY1YTMuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL2RlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotLy8gTEFORzogImRlIiwgRU5DT0RJTkc6IFVURi04Ci0vLyB0cmFuc2xhdGVkOiBSYWltdW5kIE1leWVyIHhpbmhhQHJheS1vZi1saWdodC5vcmcKLXsKLSAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICJFZGl0b3IgbWF4aW1pZXJlbi92ZXJrbGVpbmVybiIKLX07CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvZXMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvZXMuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzMDNiNjkuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL2VzLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotLy8gTEFORzogImVzIiwgRU5DT0RJTkc6IFVURi04Ci0vLyB0cmFuc2xhdGVkOiBEZXJpY2sgTGVvbnkgPGRsZW9ueUBnbWFpbC5jb20+Ci17Ci0gICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiTWF4aW1pemFyL01pbmltaXphciBFZGl0b3IiCi19OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9mci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9mci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY0YjAxNC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvZnIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0vLyBMQU5HOiAiZnIiLCBFTkNPRElORzogVVRGLTgKLXsKLSAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICJBZ3JhbmRpci9Sw6lkdWlyZSBsJ8OpZGl0ZXVyIgotfTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvamEuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvamEuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMGM0ZGEuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL2phLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0vLyBJMThOIGNvbnN0YW50cwotLy8gTEFORzogImphIiwgRU5DT0RJTkc6IFVURi04Ci17Ci0gICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAi44Ko44OH44Kj44K/44Gu5pyA5aSn5YyWL+acgOWwj+WMliIKLX07ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL25iLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL25iLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYmE3YzJiLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9uYi5qcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLS8vIExBTkc6ICJuYiIsIEVOQ09ESU5HOiBVVEYtOAotLy8gdHJhbnNsYXRlZDogS2ltIFN0ZWluaGF1ZywgaHR0cDovL3d3dy5zdGVpbmhhdWcuY29tLywga2ltQHN0ZWluaGF1Zy5jb20KLXsKLSAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICJNYWtzaW1lci9NaW5pbWVyIFdZU0lXWUcgdmluZHUiCi19OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9ubC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9ubC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZjZGMzZi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvbmwuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0vLyBMQU5HOiAibmwiLCBFTkNPRElORzogVVRGLTgKLS8vIHRyYW5zbGF0ZWQ6IEFydGh1ciBCb2dhYXJ0IGEuYm9nYWFydEBvbmVoaXBwby5vcmcKLXsKLSAgIk1heGltaXplL01pbmltaXplIEVkaXRvciI6ICJFZGl0b3IgbWF4aW1hbGlzZXJlbi92ZXJrbGVpbmVuIgotfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9wbC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9wbC5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGM2MzliYi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvcGwuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLS8vIEkxOE4gY29uc3RhbnRzCi0vLyBMQU5HOiAicGwiLCBFTkNPRElORzogVVRGLTgKLS8vIHRyYW5zbGF0ZWQ6IEtyenlzenRvZiBLb3Rvd2ljeiwga290bzFzYUBvMi5wbCwgaHR0cDovL3d3dy5lc2tvdC5rcmFrb3cucGwvcG9ydGZvbGlvCi17Ci0gICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAiTWFrc3ltYWxpenVqL21pbmltYWxpenVqIGVkeXRvciIKLX07CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvcHRfYnIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvcHRfYnIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2ZTQ4MTIuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL3B0X2JyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAot77u/Ly8gSTE4TiBjb25zdGFudHMKLS8vCi0vLyBMQU5HOiAicHRfYnIiLCBFTkNPRElORzogVVRGLTgKLS8vIFBvcnR1Z3Vlc2UgQnJhemlsaWFuIFRyYW5zbGF0aW9uCi0vLwotLy8gQXV0aG9yOiBNYXJjaW8gQmFyYm9zYSwgPG1hcmNpb0BtcGcuY29tLmJyPgotLy8gTVNOOiB0b21hcnNoYWxsQG1zbi5jb20gLSBJQ1E6IDY5NDE5OTMzCi0vLyBTaXRlOiBodHRwOi8vd3d3Lm1wZy5jb20uYnIKLS8vCi0vLyBMYXN0IHJldmlzaW9uOiAwNiBzZXB0ZW1iZXIgMjAwNwotLy8gUGxlYXNlIGRvbsK0dCByZW1vdmUgdGhpcyBpbmZvcm1hdGlvbgotLy8gSWYgeW91IG1vZGlmeSBhbnkgc291cmNlLCBwbGVhc2UgaW5zZXJ0IGEgY29tbWVudCB3aXRoIHlvdXIgbmFtZSBhbmQgZS1tYWlsCi0vLwotLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgSFRNTEFyZWEgaXRzZWxmLgotLy8gVGhpcyBub3RpY2UgTVVTVCBzdGF5IGludGFjdCBmb3IgdXNlIChzZWUgbGljZW5zZS50eHQpLgotewotICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIk1heGltaXphci9NaW5pbWl6YXIgRWRpdG9yIgotfTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9ydS5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9ydS5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIyNDhlZi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9GdWxsU2NyZWVuL2xhbmcvcnUuanMKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLe+7vy8vIEkxOE4gY29uc3RhbnRzDQotLy8gTEFORzogInJ1IiwgRU5DT0RJTkc6IFVURi04DQotLy8gQXV0aG9yOiBBbmRyZWkgQmxhZ29yYXp1bW92LCBhQGZuci5ydQ0KLXsNCi0gICJNYXhpbWl6ZS9NaW5pbWl6ZSBFZGl0b3IiOiAi0KDQsNC30LLQtdGA0L3Rg9GC0Ywv0KHQstC10YDQvdGD0YLRjCDRgNC10LTQsNC60YLQvtGAIg0KLX07ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL3N2LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvRnVsbFNjcmVlbi9sYW5nL3N2LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjMjdmZWU1Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0Z1bGxTY3JlZW4vbGFuZy9zdi5qcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotLy8gSTE4TiBjb25zdGFudHMKLS8vIExBTkc6ICJzdiIgKFN3ZWRpc2gpLCBFTkNPRElORzogVVRGLTgKLS8vIHRyYW5zbGF0ZWQ6IEVyaWsgRGFsw6luLCA8ZGFsZW5AanBsLnNlPgotewotICAiTWF4aW1pemUvTWluaW1pemUgRWRpdG9yIjogIk1heGltZXJhL01pbmltZXJhIFdZU0lXWUcgZsO2bnN0ZXIiCi19OwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvR2Vja28vR2Vja28uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9HZWNrby9HZWNrby5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDUyMzdjNC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9HZWNrby9HZWNrby5qcworKysgL2Rldi9udWxsCkBAIC0xLDQ3MSArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9HZWNrby9HZWNrby5qcyAqLwotR2Vja28uX3BsdWdpbkluZm89e25hbWU6IkdlY2tvIixvcmlnaW46IlhpbmhhIENvcmUiLHZlcnNpb246IiRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxMDg0ICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywiJDEiKSxkZXZlbG9wZXI6IlRoZSBYaW5oYSBDb3JlIERldmVsb3BlciBUZWFtIixkZXZlbG9wZXJfdXJsOiIkSGVhZFVSTDogaHR0cDovL3N2bi54aW5oYS5vcmcvdGFncy8wLjk2LjEvbW9kdWxlcy9HZWNrby9HZWNrby5qcyAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sIiQxIiksc3BvbnNvcjoiIixzcG9uc29yX3VybDoiIixsaWNlbnNlOiJodG1sQXJlYSJ9OwotZnVuY3Rpb24gR2Vja28oXzEpewotdGhpcy5lZGl0b3I9XzE7Ci1fMS5HZWNrbz10aGlzOwotfTsKLUdlY2tvLnByb3RvdHlwZS5vbktleVByZXNzPWZ1bmN0aW9uKGV2KXsKLXZhciBfMz10aGlzLmVkaXRvcjsKLXZhciBzPV8zLmdldFNlbGVjdGlvbigpOwotaWYoXzMuaXNTaG9ydEN1dChldikpewotc3dpdGNoKF8zLmdldEtleShldikudG9Mb3dlckNhc2UoKSl7Ci1jYXNlICJ6IjoKLWlmKF8zLl91bkxpbmsmJl8zLl91bmxpbmtPblVuZG8pewotWGluaGEuX3N0b3BFdmVudChldik7Ci1fMy5fdW5MaW5rKCk7Ci1fMy51cGRhdGVUb29sYmFyKCk7Ci1yZXR1cm4gdHJ1ZTsKLX0KLWJyZWFrOwotY2FzZSAiYSI6Ci1zZWw9XzMuZ2V0U2VsZWN0aW9uKCk7Ci1zZWwucmVtb3ZlQWxsUmFuZ2VzKCk7Ci1yYW5nZT1fMy5jcmVhdGVSYW5nZSgpOwotcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKF8zLl9kb2MuYm9keSk7Ci1zZWwuYWRkUmFuZ2UocmFuZ2UpOwotWGluaGEuX3N0b3BFdmVudChldik7Ci1yZXR1cm4gdHJ1ZTsKLWJyZWFrOwotY2FzZSAidiI6Ci1pZighXzMuY29uZmlnLmh0bWxhcmVhUGFzdGUpewotcmV0dXJuIHRydWU7Ci19Ci1icmVhazsKLX0KLX0KLXN3aXRjaChfMy5nZXRLZXkoZXYpKXsKLWNhc2UgIiAiOgotdmFyIF81PWZ1bmN0aW9uKF82LF83KXsKLXZhciBfOD1fNi5uZXh0U2libGluZzsKLWlmKHR5cGVvZiBfNz09InN0cmluZyIpewotXzc9XzMuX2RvYy5jcmVhdGVFbGVtZW50KF83KTsKLX0KLXZhciBhPV82LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKF83LF84KTsKLVhpbmhhLnJlbW92ZUZyb21QYXJlbnQoXzYpOwotYS5hcHBlbmRDaGlsZChfNik7Ci1fOC5kYXRhPSIgIitfOC5kYXRhOwotcy5jb2xsYXBzZShfOCwxKTsKLV8zLl91bkxpbms9ZnVuY3Rpb24oKXsKLXZhciB0PWEuZmlyc3RDaGlsZDsKLWEucmVtb3ZlQ2hpbGQodCk7Ci1hLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQsYSk7Ci1YaW5oYS5yZW1vdmVGcm9tUGFyZW50KGEpOwotXzMuX3VuTGluaz1udWxsOwotXzMuX3VubGlua09uVW5kbz1mYWxzZTsKLX07Ci1fMy5fdW5saW5rT25VbmRvPXRydWU7Ci1yZXR1cm4gYTsKLX07Ci1pZihfMy5jb25maWcuY29udmVydFVybHNUb0xpbmtzJiZzJiZzLmlzQ29sbGFwc2VkJiZzLmFuY2hvck5vZGUubm9kZVR5cGU9PTMmJnMuYW5jaG9yTm9kZS5kYXRhLmxlbmd0aD4zJiZzLmFuY2hvck5vZGUuZGF0YS5pbmRleE9mKCIuIik+PTApewotdmFyIF9iPXMuYW5jaG9yTm9kZS5kYXRhLnN1YnN0cmluZygwLHMuYW5jaG9yT2Zmc2V0KS5zZWFyY2goL1xTezQsfSQvKTsKLWlmKF9iPT0tMSl7Ci1icmVhazsKLX0KLWlmKF8zLl9nZXRGaXJzdEFuY2VzdG9yKHMsImEiKSl7Ci1icmVhazsKLX0KLXZhciBfYz1zLmFuY2hvck5vZGUuZGF0YS5zdWJzdHJpbmcoMCxzLmFuY2hvck9mZnNldCkucmVwbGFjZSgvXi4qPyhcUyopJC8sIiQxIik7Ci12YXIgX2Q9X2MubWF0Y2goWGluaGEuUkVfZW1haWwpOwotaWYoX2QpewotdmFyIF9lPXMuYW5jaG9yTm9kZTsKLXZhciBfZj1fZS5zcGxpdFRleHQocy5hbmNob3JPZmZzZXQpOwotdmFyIF8xMD1fZS5zcGxpdFRleHQoX2IpOwotXzUoXzEwLCJhIikuaHJlZj0ibWFpbHRvOiIrX2RbMF07Ci1icmVhazsKLX0KLVJFX2RhdGU9LyhbMC05XStcLikrLzsKLVJFX2lwPS8oPzooPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KS87Ci12YXIgXzExPV9jLm1hdGNoKFhpbmhhLlJFX3VybCk7Ci1pZihfMTEpewotaWYoUkVfZGF0ZS50ZXN0KF9jKSl7Ci1icmVhazsKLX0KLXZhciBfMTI9cy5hbmNob3JOb2RlOwotdmFyIF8xMz1fMTIuc3BsaXRUZXh0KHMuYW5jaG9yT2Zmc2V0KTsKLXZhciBfMTQ9XzEyLnNwbGl0VGV4dChfYik7Ci1fNShfMTQsImEiKS5ocmVmPShfMTFbMV0/XzExWzFdOiJodHRwOi8vIikrXzExWzJdOwotYnJlYWs7Ci19Ci19Ci1icmVhazsKLX0KLXN3aXRjaChldi5rZXlDb2RlKXsKLWNhc2UgMjc6Ci1pZihfMy5fdW5MaW5rKXsKLV8zLl91bkxpbmsoKTsKLVhpbmhhLl9zdG9wRXZlbnQoZXYpOwotfQotYnJlYWs7Ci1icmVhazsKLWNhc2UgODoKLWNhc2UgNDY6Ci1pZighZXYuc2hpZnRLZXkmJnRoaXMuaGFuZGxlQmFja3NwYWNlKCkpewotWGluaGEuX3N0b3BFdmVudChldik7Ci19Ci1kZWZhdWx0OgotXzMuX3VubGlua09uVW5kbz1mYWxzZTsKLWlmKHMuYW5jaG9yTm9kZSYmcy5hbmNob3JOb2RlLm5vZGVUeXBlPT0zKXsKLXZhciBhPV8zLl9nZXRGaXJzdEFuY2VzdG9yKHMsImEiKTsKLWlmKCFhKXsKLWJyZWFrOwotfQotaWYoIWEuX3VwZGF0ZUFuY2hUaW1lb3V0KXsKLWlmKHMuYW5jaG9yTm9kZS5kYXRhLm1hdGNoKFhpbmhhLlJFX2VtYWlsKSYmYS5ocmVmLm1hdGNoKCJtYWlsdG86IitzLmFuY2hvck5vZGUuZGF0YS50cmltKCkpKXsKLXZhciBfMTY9cy5hbmNob3JOb2RlOwotdmFyIF8xNz1mdW5jdGlvbigpewotYS5ocmVmPSJtYWlsdG86IitfMTYuZGF0YS50cmltKCk7Ci1hLl91cGRhdGVBbmNoVGltZW91dD1zZXRUaW1lb3V0KF8xNywyNTApOwotfTsKLWEuX3VwZGF0ZUFuY2hUaW1lb3V0PXNldFRpbWVvdXQoXzE3LDEwMDApOwotYnJlYWs7Ci19Ci12YXIgbT1zLmFuY2hvck5vZGUuZGF0YS5tYXRjaChYaW5oYS5SRV91cmwpOwotaWYobSYmYS5ocmVmLm1hdGNoKG5ldyBSZWdFeHAoImh0dHAocyk/Oi8vIitYaW5oYS5lc2NhcGVTdHJpbmdGb3JSZWdFeHAocy5hbmNob3JOb2RlLmRhdGEudHJpbSgpKSkpKXsKLXZhciBfMTk9cy5hbmNob3JOb2RlOwotdmFyIF8xYT1mdW5jdGlvbigpewotbT1fMTkuZGF0YS5tYXRjaChYaW5oYS5SRV91cmwpOwotaWYobSl7Ci1hLmhyZWY9KG1bMV0/bVsxXToiaHR0cDovLyIpK21bMl07Ci19Ci1hLl91cGRhdGVBbmNoVGltZW91dD1zZXRUaW1lb3V0KF8xYSwyNTApOwotfTsKLWEuX3VwZGF0ZUFuY2hUaW1lb3V0PXNldFRpbWVvdXQoXzFhLDEwMDApOwotfQotfQotfQotYnJlYWs7Ci19Ci1yZXR1cm4gZmFsc2U7Ci19OwotR2Vja28ucHJvdG90eXBlLmhhbmRsZUJhY2tzcGFjZT1mdW5jdGlvbigpewotdmFyIF8xYj10aGlzLmVkaXRvcjsKLXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKLXZhciBzZWw9XzFiLmdldFNlbGVjdGlvbigpOwotdmFyIF8xZD1fMWIuY3JlYXRlUmFuZ2Uoc2VsKTsKLXZhciBTQz1fMWQuc3RhcnRDb250YWluZXI7Ci12YXIgU089XzFkLnN0YXJ0T2Zmc2V0OwotdmFyIEVDPV8xZC5lbmRDb250YWluZXI7Ci12YXIgRU89XzFkLmVuZE9mZnNldDsKLXZhciBfMjI9U0MubmV4dFNpYmxpbmc7Ci1pZihTQy5ub2RlVHlwZT09Myl7Ci1TQz1TQy5wYXJlbnROb2RlOwotfQotaWYoISgvXFMvLnRlc3QoU0MudGFnTmFtZSkpKXsKLXZhciBwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInAiKTsKLXdoaWxlKFNDLmZpcnN0Q2hpbGQpewotcC5hcHBlbmRDaGlsZChTQy5maXJzdENoaWxkKTsKLX0KLVNDLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHAsU0MpOwotWGluaGEucmVtb3ZlRnJvbVBhcmVudChTQyk7Ci12YXIgcj1fMWQuY2xvbmVSYW5nZSgpOwotci5zZXRTdGFydEJlZm9yZShfMjIpOwotci5zZXRFbmRBZnRlcihfMjIpOwotci5leHRyYWN0Q29udGVudHMoKTsKLXNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKLXNlbC5hZGRSYW5nZShyKTsKLX0KLX0sMTApOwotfTsKLUdlY2tvLnByb3RvdHlwZS5pbndhcmRIdG1sPWZ1bmN0aW9uKF8yNSl7Ci1fMjU9XzI1LnJlcGxhY2UoLzwoXC8/KXN0cm9uZyhcc3w+fFwvKS9pZywiPCQxYiQyIik7Ci1fMjU9XzI1LnJlcGxhY2UoLzwoXC8/KWVtKFxzfD58XC8pL2lnLCI8JDFpJDIiKTsKLV8yNT1fMjUucmVwbGFjZSgvPChcLz8pZGVsKFxzfD58XC8pL2lnLCI8JDFzdHJpa2UkMiIpOwotcmV0dXJuIF8yNTsKLX07Ci1HZWNrby5wcm90b3R5cGUub3V0d2FyZEh0bWw9ZnVuY3Rpb24oXzI2KXsKLV8yNj1fMjYucmVwbGFjZSgvPHNjcmlwdFtcc10qc3JjW1xzXSo9W1xzXSpbJyJdY2hyb21lOlwvXC8uKj9bIiddPltcc10qPFwvc2NyaXB0Pi9pZywiIik7Ci1yZXR1cm4gXzI2OwotfTsKLUdlY2tvLnByb3RvdHlwZS5vbkV4ZWNDb21tYW5kPWZ1bmN0aW9uKF8yNyxVSSxfMjkpewotdHJ5ewotdGhpcy5lZGl0b3IuX2RvYy5leGVjQ29tbWFuZCgidXNlQ1NTIixmYWxzZSx0cnVlKTsKLXRoaXMuZWRpdG9yLl9kb2MuZXhlY0NvbW1hbmQoInN0eWxlV2l0aENTUyIsZmFsc2UsZmFsc2UpOwotfQotY2F0Y2goZXgpewotfQotc3dpdGNoKF8yNyl7Ci1jYXNlICJwYXN0ZSI6Ci1hbGVydChYaW5oYS5fbGMoIlRoZSBQYXN0ZSBidXR0b24gZG9lcyBub3Qgd29yayBpbiBNb3ppbGxhIGJhc2VkIHdlYiBicm93c2VycyAodGVjaG5pY2FsIHNlY3VyaXR5IHJlYXNvbnMpLiBQcmVzcyBDVFJMLVYgb24geW91ciBrZXlib2FyZCB0byBwYXN0ZSBkaXJlY3RseS4iKSk7Ci1yZXR1cm4gdHJ1ZTsKLWJyZWFrOwotY2FzZSAicmVtb3ZlZm9ybWF0IjoKLXZhciBfMmE9dGhpcy5lZGl0b3I7Ci12YXIgc2VsPV8yYS5nZXRTZWxlY3Rpb24oKTsKLXZhciBfMmM9XzJhLnNhdmVTZWxlY3Rpb24oc2VsKTsKLXZhciBfMmQ9XzJhLmNyZWF0ZVJhbmdlKHNlbCk7Ci12YXIgZWxzPV8yYS5fZG9jLmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTsKLXZhciBfMmY9KF8yZC5zdGFydENvbnRhaW5lci5ub2RlVHlwZT09MSk/XzJkLnN0YXJ0Q29udGFpbmVyOl8yZC5zdGFydENvbnRhaW5lci5wYXJlbnROb2RlOwotdmFyIGksZWw7Ci1pZihzZWwuaXNDb2xsYXBzZWQpewotXzJkLnNlbGVjdE5vZGVDb250ZW50cyhfMmEuX2RvYy5ib2R5KTsKLX0KLWZvcihpPTA7aTxlbHMubGVuZ3RoO2krKyl7Ci1lbD1lbHNbaV07Ci1pZihfMmQuaXNQb2ludEluUmFuZ2UoZWwsMCl8fChlbHNbaV09PV8yZiYmXzJkLnN0YXJ0T2Zmc2V0PT0wKSl7Ci1lbC5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7Ci19Ci19Ci10aGlzLmVkaXRvci5fZG9jLmV4ZWNDb21tYW5kKF8yNyxVSSxfMjkpOwotXzJhLnJlc3RvcmVTZWxlY3Rpb24oXzJjKTsKLXJldHVybiB0cnVlOwotYnJlYWs7Ci19Ci1yZXR1cm4gZmFsc2U7Ci19OwotR2Vja28ucHJvdG90eXBlLm9uTW91c2VEb3duPWZ1bmN0aW9uKGV2KXsKLWlmKGV2LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJociIpewotdmFyIHNlbD10aGlzLmVkaXRvci5nZXRTZWxlY3Rpb24oKTsKLXZhciBfMzQ9dGhpcy5lZGl0b3IuY3JlYXRlUmFuZ2Uoc2VsKTsKLV8zNC5zZWxlY3ROb2RlKGV2LnRhcmdldCk7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmluc2VydE5vZGVBdFNlbGVjdGlvbj1mdW5jdGlvbihfMzUpewotaWYoXzM1Lm93bmVyRG9jdW1lbnQhPXRoaXMuX2RvYyl7Ci10cnl7Ci1fMzU9dGhpcy5fZG9jLmFkb3B0Tm9kZShfMzUpOwotfQotY2F0Y2goZSl7Ci19Ci19Ci12YXIgc2VsPXRoaXMuZ2V0U2VsZWN0aW9uKCk7Ci12YXIgXzM3PXRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsKLXNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKLV8zNy5kZWxldGVDb250ZW50cygpOwotdmFyIF8zOD1fMzcuc3RhcnRDb250YWluZXI7Ci12YXIgcG9zPV8zNy5zdGFydE9mZnNldDsKLXZhciBfM2E9XzM1Owotc3dpdGNoKF8zOC5ub2RlVHlwZSl7Ci1jYXNlIDM6Ci1pZihfMzUubm9kZVR5cGU9PTMpewotXzM4Lmluc2VydERhdGEocG9zLF8zNS5kYXRhKTsKLV8zNz10aGlzLmNyZWF0ZVJhbmdlKCk7Ci1fMzcuc2V0RW5kKF8zOCxwb3MrXzM1Lmxlbmd0aCk7Ci1fMzcuc2V0U3RhcnQoXzM4LHBvcytfMzUubGVuZ3RoKTsKLXNlbC5hZGRSYW5nZShfMzcpOwotfWVsc2V7Ci1fMzg9XzM4LnNwbGl0VGV4dChwb3MpOwotaWYoXzM1Lm5vZGVUeXBlPT0xMSl7Ci1fM2E9XzNhLmZpcnN0Q2hpbGQ7Ci19Ci1fMzgucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoXzM1LF8zOCk7Ci10aGlzLnNlbGVjdE5vZGVDb250ZW50cyhfM2EpOwotdGhpcy51cGRhdGVUb29sYmFyKCk7Ci19Ci1icmVhazsKLWNhc2UgMToKLWlmKF8zNS5ub2RlVHlwZT09MTEpewotXzNhPV8zYS5maXJzdENoaWxkOwotfQotXzM4Lmluc2VydEJlZm9yZShfMzUsXzM4LmNoaWxkTm9kZXNbcG9zXSk7Ci10aGlzLnNlbGVjdE5vZGVDb250ZW50cyhfM2EpOwotdGhpcy51cGRhdGVUb29sYmFyKCk7Ci1icmVhazsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0UGFyZW50RWxlbWVudD1mdW5jdGlvbihzZWwpewotaWYodHlwZW9mIHNlbD09InVuZGVmaW5lZCIpewotc2VsPXRoaXMuZ2V0U2VsZWN0aW9uKCk7Ci19Ci12YXIgXzNjPXRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsKLXRyeXsKLXZhciBwPV8zYy5jb21tb25BbmNlc3RvckNvbnRhaW5lcjsKLWlmKCFfM2MuY29sbGFwc2VkJiZfM2Muc3RhcnRDb250YWluZXI9PV8zYy5lbmRDb250YWluZXImJl8zYy5zdGFydE9mZnNldC1fM2MuZW5kT2Zmc2V0PD0xJiZfM2Muc3RhcnRDb250YWluZXIuaGFzQ2hpbGROb2RlcygpKXsKLXA9XzNjLnN0YXJ0Q29udGFpbmVyLmNoaWxkTm9kZXNbXzNjLnN0YXJ0T2Zmc2V0XTsKLX0KLXdoaWxlKHAubm9kZVR5cGU9PTMpewotcD1wLnBhcmVudE5vZGU7Ci19Ci1yZXR1cm4gcDsKLX0KLWNhdGNoKGV4KXsKLXJldHVybiBudWxsOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5hY3RpdmVFbGVtZW50PWZ1bmN0aW9uKHNlbCl7Ci1pZigoc2VsPT09bnVsbCl8fHRoaXMuc2VsZWN0aW9uRW1wdHkoc2VsKSl7Ci1yZXR1cm4gbnVsbDsKLX0KLWlmKCFzZWwuaXNDb2xsYXBzZWQpewotaWYoc2VsLmFuY2hvck5vZGUuY2hpbGROb2Rlcy5sZW5ndGg+c2VsLmFuY2hvck9mZnNldCYmc2VsLmFuY2hvck5vZGUuY2hpbGROb2Rlc1tzZWwuYW5jaG9yT2Zmc2V0XS5ub2RlVHlwZT09MSl7Ci1yZXR1cm4gc2VsLmFuY2hvck5vZGUuY2hpbGROb2Rlc1tzZWwuYW5jaG9yT2Zmc2V0XTsKLX1lbHNlewotaWYoc2VsLmFuY2hvck5vZGUubm9kZVR5cGU9PTEpewotcmV0dXJuIHNlbC5hbmNob3JOb2RlOwotfWVsc2V7Ci1yZXR1cm4gbnVsbDsKLX0KLX0KLX0KLXJldHVybiBudWxsOwotfTsKLVhpbmhhLnByb3RvdHlwZS5zZWxlY3Rpb25FbXB0eT1mdW5jdGlvbihzZWwpewotaWYoIXNlbCl7Ci1yZXR1cm4gdHJ1ZTsKLX0KLWlmKHR5cGVvZiBzZWwuaXNDb2xsYXBzZWQhPSJ1bmRlZmluZWQiKXsKLXJldHVybiBzZWwuaXNDb2xsYXBzZWQ7Ci19Ci1yZXR1cm4gdHJ1ZTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuc2F2ZVNlbGVjdGlvbj1mdW5jdGlvbigpewotcmV0dXJuIHRoaXMuY3JlYXRlUmFuZ2UodGhpcy5nZXRTZWxlY3Rpb24oKSkuY2xvbmVSYW5nZSgpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5yZXN0b3JlU2VsZWN0aW9uPWZ1bmN0aW9uKF80MCl7Ci10cnl7Ci12YXIgc2VsPXRoaXMuZ2V0U2VsZWN0aW9uKCk7Ci1zZWwucmVtb3ZlQWxsUmFuZ2VzKCk7Ci1zZWwuYWRkUmFuZ2UoXzQwKTsKLX0KLWNhdGNoKGUpewotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5zZWxlY3ROb2RlQ29udGVudHM9ZnVuY3Rpb24oXzQyLF80Myl7Ci10aGlzLmZvY3VzRWRpdG9yKCk7Ci10aGlzLmZvcmNlUmVkcmF3KCk7Ci12YXIgXzQ0OwotdmFyIF80NT10eXBlb2YgXzQzPT0idW5kZWZpbmVkIj90cnVlOmZhbHNlOwotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotXzQ0PXRoaXMuX2RvYy5jcmVhdGVSYW5nZSgpOwotaWYoIV80Mil7Ci1zZWwucmVtb3ZlQWxsUmFuZ2VzKCk7Ci1yZXR1cm47Ci19Ci1pZihfNDUmJl80Mi50YWdOYW1lJiZfNDIudGFnTmFtZS50b0xvd2VyQ2FzZSgpLm1hdGNoKC90YWJsZXxpbWd8aW5wdXR8dGV4dGFyZWF8c2VsZWN0LykpewotXzQ0LnNlbGVjdE5vZGUoXzQyKTsKLX1lbHNlewotXzQ0LnNlbGVjdE5vZGVDb250ZW50cyhfNDIpOwotfQotc2VsLnJlbW92ZUFsbFJhbmdlcygpOwotc2VsLmFkZFJhbmdlKF80NCk7Ci1pZih0eXBlb2YgXzQzIT0idW5kZWZpbmVkIil7Ci1pZihfNDMpewotc2VsLmNvbGxhcHNlKF80NC5zdGFydENvbnRhaW5lcixfNDQuc3RhcnRPZmZzZXQpOwotfWVsc2V7Ci1zZWwuY29sbGFwc2UoXzQ0LmVuZENvbnRhaW5lcixfNDQuZW5kT2Zmc2V0KTsKLX0KLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuaW5zZXJ0SFRNTD1mdW5jdGlvbihfNDcpewotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotdmFyIF80OT10aGlzLmNyZWF0ZVJhbmdlKHNlbCk7Ci10aGlzLmZvY3VzRWRpdG9yKCk7Ci12YXIgXzRhPXRoaXMuX2RvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci12YXIgZGl2PXRoaXMuX2RvYy5jcmVhdGVFbGVtZW50KCJkaXYiKTsKLWRpdi5pbm5lckhUTUw9XzQ3Owotd2hpbGUoZGl2LmZpcnN0Q2hpbGQpewotXzRhLmFwcGVuZENoaWxkKGRpdi5maXJzdENoaWxkKTsKLX0KLXZhciBfNGM9dGhpcy5pbnNlcnROb2RlQXRTZWxlY3Rpb24oXzRhKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRIVE1MPWZ1bmN0aW9uKCl7Ci12YXIgc2VsPXRoaXMuZ2V0U2VsZWN0aW9uKCk7Ci1pZihzZWwuaXNDb2xsYXBzZWQpewotcmV0dXJuICIiOwotfQotdmFyIF80ZT10aGlzLmNyZWF0ZVJhbmdlKHNlbCk7Ci1yZXR1cm4gWGluaGEuZ2V0SFRNTChfNGUuY2xvbmVDb250ZW50cygpLGZhbHNlLHRoaXMpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXsKLXJldHVybiB0aGlzLl9pZnJhbWUuY29udGVudFdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuY3JlYXRlUmFuZ2U9ZnVuY3Rpb24oc2VsKXsKLXRoaXMuYWN0aXZhdGVFZGl0b3IoKTsKLWlmKHR5cGVvZiBzZWwhPSJ1bmRlZmluZWQiKXsKLXRyeXsKLXJldHVybiBzZWwuZ2V0UmFuZ2VBdCgwKTsKLX0KLWNhdGNoKGV4KXsKLXJldHVybiB0aGlzLl9kb2MuY3JlYXRlUmFuZ2UoKTsKLX0KLX1lbHNlewotcmV0dXJuIHRoaXMuX2RvYy5jcmVhdGVSYW5nZSgpOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5pc0tleUV2ZW50PWZ1bmN0aW9uKF81MCl7Ci1yZXR1cm4gXzUwLnR5cGU9PSJrZXlwcmVzcyI7Ci19OwotWGluaGEucHJvdG90eXBlLmdldEtleT1mdW5jdGlvbihfNTEpewotcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoXzUxLmNoYXJDb2RlKTsKLX07Ci1YaW5oYS5nZXRPdXRlckhUTUw9ZnVuY3Rpb24oXzUyKXsKLXJldHVybiAobmV3IFhNTFNlcmlhbGl6ZXIoKSkuc2VyaWFsaXplVG9TdHJpbmcoXzUyKTsKLX07Ci1YaW5oYS5jYz1TdHJpbmcuZnJvbUNoYXJDb2RlKDgyODYpOwotWGluaGEucHJvdG90eXBlLnNldENDPWZ1bmN0aW9uKF81Myl7Ci12YXIgY2M9WGluaGEuY2M7Ci10cnl7Ci1pZihfNTM9PSJ0ZXh0YXJlYSIpewotdmFyIHRhPXRoaXMuX3RleHRBcmVhOwotdmFyIF81Nj10YS5zZWxlY3Rpb25TdGFydDsKLXZhciBfNTc9dGEudmFsdWUuc3Vic3RyaW5nKDAsXzU2KTsKLXZhciBfNTg9dGEudmFsdWUuc3Vic3RyaW5nKF81Nix0YS52YWx1ZS5sZW5ndGgpOwotaWYoXzU4Lm1hdGNoKC9eW148XSo+LykpewotdmFyIF81OT1fNTguaW5kZXhPZigiPiIpKzE7Ci10YS52YWx1ZT1fNTcrXzU4LnN1YnN0cmluZygwLF81OSkrY2MrXzU4LnN1YnN0cmluZyhfNTksXzU4Lmxlbmd0aCk7Ci19ZWxzZXsKLXRhLnZhbHVlPV81NytjYytfNTg7Ci19Ci10YS52YWx1ZT10YS52YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoIigmW14iK2NjKyJdKj8pKCIrY2MrIikoW14iK2NjKyJdKj87KSIpLCIkMSQzJDIiKTsKLXRhLnZhbHVlPXRhLnZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCgiKDxzY3JpcHRbXj5dKj5bXiIrY2MrIl0qPykoIitjYysiKShbXiIrY2MrIl0qPzwvc2NyaXB0PikiKSwiJDEkMyQyIik7Ci10YS52YWx1ZT10YS52YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoIl4oW14iK2NjKyJdKikoIitjYysiKShbXiIrY2MrIl0qPGJvZHlbXj5dKj4pKC4qPykiKSwiJDEkMyQyJDQiKTsKLX1lbHNlewotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotc2VsLmdldFJhbmdlQXQoMCkuaW5zZXJ0Tm9kZSh0aGlzLl9kb2MuY3JlYXRlVGV4dE5vZGUoY2MpKTsKLX0KLX0KLWNhdGNoKGUpewotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5maW5kQ0M9ZnVuY3Rpb24oXzViKXsKLWlmKF81Yj09InRleHRhcmVhIil7Ci12YXIgdGE9dGhpcy5fdGV4dEFyZWE7Ci12YXIgcG9zPXRhLnZhbHVlLmluZGV4T2YoWGluaGEuY2MpOwotaWYocG9zPT0tMSl7Ci1yZXR1cm47Ci19Ci12YXIgZW5kPXBvcytYaW5oYS5jYy5sZW5ndGg7Ci12YXIgXzVmPXRhLnZhbHVlLnN1YnN0cmluZygwLHBvcyk7Ci12YXIgXzYwPXRhLnZhbHVlLnN1YnN0cmluZyhlbmQsdGEudmFsdWUubGVuZ3RoKTsKLXRhLnZhbHVlPV81ZjsKLXRhLnNjcm9sbFRvcD10YS5zY3JvbGxIZWlnaHQ7Ci12YXIgXzYxPXRhLnNjcm9sbFRvcDsKLXRhLnZhbHVlKz1fNjA7Ci10YS5zZXRTZWxlY3Rpb25SYW5nZShwb3MscG9zKTsKLXRhLmZvY3VzKCk7Ci10YS5zY3JvbGxUb3A9XzYxOwotfWVsc2V7Ci10cnl7Ci12YXIgZG9jPXRoaXMuX2RvYzsKLWRvYy5ib2R5LmlubmVySFRNTD1kb2MuYm9keS5pbm5lckhUTUwucmVwbGFjZShuZXcgUmVnRXhwKFhpbmhhLmNjKSwiPHNwYW4gaWQ9XCJYaW5oYUVkaXRpbmdQb3N0aW9uXCI+PC9zcGFuPiIpOwotdmFyIF82Mz1kb2MuZ2V0RWxlbWVudEJ5SWQoIlhpbmhhRWRpdGluZ1Bvc3Rpb24iKTsKLXRoaXMuc2VsZWN0Tm9kZUNvbnRlbnRzKF82Myk7Ci10aGlzLnNjcm9sbFRvRWxlbWVudChfNjMpOwotXzYzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoXzYzKTsKLXRoaXMuX2lmcmFtZS5jb250ZW50V2luZG93LmZvY3VzKCk7Ci19Ci1jYXRjaChlKXsKLX0KLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuX3N0YW5kYXJkVG9nZ2xlQm9yZGVycz1YaW5oYS5wcm90b3R5cGUuX3RvZ2dsZUJvcmRlcnM7Ci1YaW5oYS5wcm90b3R5cGUuX3RvZ2dsZUJvcmRlcnM9ZnVuY3Rpb24oKXsKLXZhciBfNjQ9dGhpcy5fc3RhbmRhcmRUb2dnbGVCb3JkZXJzKCk7Ci12YXIgXzY1PXRoaXMuX2RvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVEFCTEUiKTsKLWZvcih2YXIgaT0wO2k8XzY1Lmxlbmd0aDtpKyspewotXzY1W2ldLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwotXzY1W2ldLnN0eWxlLmRpc3BsYXk9InRhYmxlIjsKLX0KLXJldHVybiBfNjQ7Ci19OwotWGluaGEuZ2V0RG9jdHlwZT1mdW5jdGlvbihkb2MpewotdmFyIGQ9IiI7Ci1pZihkb2MuZG9jdHlwZSl7Ci1kKz0iPCFET0NUWVBFICIrZG9jLmRvY3R5cGUubmFtZSsiIFBVQkxJQyAiOwotZCs9ZG9jLmRvY3R5cGUucHVibGljSWQ/IlwiIitkb2MuZG9jdHlwZS5wdWJsaWNJZCsiXCIiOiIiOwotZCs9ZG9jLmRvY3R5cGUuc3lzdGVtSWQ/IiBcIiIrZG9jLmRvY3R5cGUuc3lzdGVtSWQrIlwiIjoiIjsKLWQrPSI+IjsKLX0KLXJldHVybiBkOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvR2Vja28vcGFyYUhhbmRsZXJCZXN0LmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvR2Vja28vcGFyYUhhbmRsZXJCZXN0LmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTU3YTdkLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0dlY2tvL3BhcmFIYW5kbGVyQmVzdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDI5NSArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9HZWNrby9wYXJhSGFuZGxlckJlc3QuanMgKi8KLUVudGVyUGFyYWdyYXBocy5fcGx1Z2luSW5mbz17bmFtZToiRW50ZXJQYXJhZ3JhcGhzIix2ZXJzaW9uOiIxLjAiLGRldmVsb3BlcjoiQWRhbSBXcmlnaHQiLGRldmVsb3Blcl91cmw6Imh0dHA6Ly93d3cuaGlwaWthdC5vcmcvIixzcG9uc29yOiJUaGUgVW5pdmVyc2l0eSBvZiBXZXN0ZXJuIEF1c3RyYWxpYSIsc3BvbnNvcl91cmw6Imh0dHA6Ly93d3cudXdhLmVkdS5hdS8iLGxpY2Vuc2U6Imh0bWxBcmVhIn07Ci1FbnRlclBhcmFncmFwaHMucHJvdG90eXBlLl93aGl0ZVNwYWNlPS9eXHMqJC87Ci1FbnRlclBhcmFncmFwaHMucHJvdG90eXBlLl9wRXhjbHVzaW9ucz0vXihhZGRyZXNzfGJsb2NrcXVvdGV8Ym9keXxkZHxkaXZ8ZGx8ZHR8ZmllbGRzZXR8Zm9ybXxoMXxoMnxoM3xoNHxoNXxoNnxocnxsaXxub3NjcmlwdHxvbHxwfHByZXx0YWJsZXx1bCkkL2k7Ci1FbnRlclBhcmFncmFwaHMucHJvdG90eXBlLl9wQ29udGFpbmVycz0vXihib2R5fGRlbHxkaXZ8ZmllbGRzZXR8Zm9ybXxpbnN8bWFwfG5vc2NyaXB0fG9iamVjdHx0ZHx0aCkkL2k7Ci1FbnRlclBhcmFncmFwaHMucHJvdG90eXBlLl9wQnJlYWs9L14oYWRkcmVzc3xwcmV8YmxvY2txdW90ZSkkL2k7Ci1FbnRlclBhcmFncmFwaHMucHJvdG90eXBlLl9wZXJtRW1wdHk9L14oYXJlYXxiYXNlfGJhc2Vmb250fGJyfGNvbHxmcmFtZXxocnxpbWd8aW5wdXR8aXNpbmRleHxsaW5rfG1ldGF8cGFyYW0pJC9pOwotRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5fZWxlbVNvbGlkPS9eKGFwcGxldHxicnxidXR0b258aHJ8aW1nfGlucHV0fHRhYmxlKSQvaTsKLUVudGVyUGFyYWdyYXBocy5wcm90b3R5cGUuX3BpZnlTaWJsaW5nPS9eKGFkZHJlc3N8YmxvY2txdW90ZXxkZWx8ZGl2fGRsfGZpZWxkc2V0fGZvcm18aDF8aDJ8aDN8aDR8aDV8aDZ8aHJ8aW5zfG1hcHxub3NjcmlwdHxvYmplY3R8b2x8cHxwcmV8dGFibGV8dWx8KSQvaTsKLUVudGVyUGFyYWdyYXBocy5wcm90b3R5cGUuX3BpZnlGb3JjZWQ9L14odWx8b2x8ZGx8dGFibGUpJC9pOwotRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5fcGlmeVBhcmVudD0vXihkZHxkdHxsaXx0ZHx0aHx0cikkL2k7Ci1mdW5jdGlvbiBFbnRlclBhcmFncmFwaHMoXzEpewotdGhpcy5lZGl0b3I9XzE7Ci1pZihYaW5oYS5pc19nZWNrbyl7Ci10aGlzLm9uS2V5UHJlc3M9dGhpcy5fX29uS2V5UHJlc3M7Ci19Ci19OwotRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5uYW1lPSJFbnRlclBhcmFncmFwaHMiOwotRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5pbnNlcnRBZGphY2VudEVsZW1lbnQ9ZnVuY3Rpb24oXzIsXzMsZWwpewotaWYoXzM9PSJCZWZvcmVCZWdpbiIpewotXzIucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZWwsXzIpOwotfWVsc2V7Ci1pZihfMz09IkFmdGVyRW5kIil7Ci1fMi5uZXh0U2libGluZz9fMi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbCxfMi5uZXh0U2libGluZyk6XzIucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChlbCk7Ci19ZWxzZXsKLWlmKF8zPT0iQWZ0ZXJCZWdpbiImJl8yLmZpcnN0Q2hpbGQpewotXzIuaW5zZXJ0QmVmb3JlKGVsLF8yLmZpcnN0Q2hpbGQpOwotfWVsc2V7Ci1pZihfMz09IkJlZm9yZUVuZCJ8fF8zPT0iQWZ0ZXJCZWdpbiIpewotXzIuYXBwZW5kQ2hpbGQoZWwpOwotfQotfQotfQotfQotfTsKLUVudGVyUGFyYWdyYXBocy5wcm90b3R5cGUuZm9yRWFjaE5vZGVVbmRlcj1mdW5jdGlvbihfNSxfNixfNyxfOCl7Ci12YXIgXzksX2E7Ci1pZihfNS5ub2RlVHlwZT09MTEmJl81LmZpcnN0Q2hpbGQpewotXzk9XzUuZmlyc3RDaGlsZDsKLV9hPV81Lmxhc3RDaGlsZDsKLX1lbHNlewotXzk9X2E9XzU7Ci19Ci13aGlsZShfYS5sYXN0Q2hpbGQpewotX2E9X2EubGFzdENoaWxkOwotfQotcmV0dXJuIHRoaXMuZm9yRWFjaE5vZGUoXzksX2EsXzYsXzcsXzgpOwotfTsKLUVudGVyUGFyYWdyYXBocy5wcm90b3R5cGUuZm9yRWFjaE5vZGU9ZnVuY3Rpb24oX2IsX2MsX2QsX2UsX2YpewotdmFyIF8xMD1mdW5jdGlvbihfMTEsXzEyKXsKLXJldHVybiAoXzEyPT0ibHRyIj9fMTEubmV4dFNpYmxpbmc6XzExLnByZXZpb3VzU2libGluZyk7Ci19OwotdmFyIF8xMz1mdW5jdGlvbihfMTQsXzE1KXsKLXJldHVybiAoXzE1PT0ibHRyIj9fMTQuZmlyc3RDaGlsZDpfMTQubGFzdENoaWxkKTsKLX07Ci12YXIgXzE2LF8xNyxfMTg7Ci12YXIgXzE5PV9mOwotdmFyIF8xYT1mYWxzZTsKLXdoaWxlKF8xNiE9X2U9PSJsdHIiP19jOl9iKXsKLWlmKCFfMTYpewotXzE2PV9lPT0ibHRyIj9fYjpfYzsKLX1lbHNlewotaWYoXzEzKF8xNixfZSkpewotXzE2PV8xMyhfMTYsX2UpOwotfWVsc2V7Ci1pZihfMTAoXzE2LF9lKSl7Ci1fMTY9XzEwKF8xNixfZSk7Ci19ZWxzZXsKLV8xNz1fMTY7Ci13aGlsZSghXzEwKF8xNyxfZSkmJl8xNyE9KF9lPT0ibHRyIj9fYzpfYikpewotXzE3PV8xNy5wYXJlbnROb2RlOwotfQotXzE2PShfMTAoXzE3LF9lKT9fMTAoXzE3LF9lKTpfMTcpOwotfQotfQotfQotXzFhPShfMTY9PShfZT09Imx0ciI/X2M6X2IpKTsKLXN3aXRjaChfZCl7Ci1jYXNlICJjdWxsaWRzIjoKLV8xOD10aGlzLl9mZW5DdWxsSWRzKF8xNixfMTkpOwotYnJlYWs7Ci1jYXNlICJmaW5kX2ZpbGwiOgotXzE4PXRoaXMuX2ZlbkVtcHR5U2V0KF8xNixfMTksX2QsXzFhKTsKLWJyZWFrOwotY2FzZSAiZmluZF9jdXJzb3Jwb2ludCI6Ci1fMTg9dGhpcy5fZmVuRW1wdHlTZXQoXzE2LF8xOSxfZCxfMWEpOwotYnJlYWs7Ci19Ci1pZihfMThbMF0pewotcmV0dXJuIF8xOFsxXTsKLX0KLWlmKF8xYSl7Ci1icmVhazsKLX0KLWlmKF8xOFsxXSl7Ci1fMTk9XzE4WzFdOwotfQotfQotcmV0dXJuIGZhbHNlOwotfTsKLUVudGVyUGFyYWdyYXBocy5wcm90b3R5cGUuX2ZlbkVtcHR5U2V0PWZ1bmN0aW9uKF8xYixfMWMsXzFkLF8xZSl7Ci1pZighXzFjJiYhXzFiLmZpcnN0Q2hpbGQpewotXzFjPV8xYjsKLX0KLWlmKChfMWIubm9kZVR5cGU9PTEmJnRoaXMuX2VsZW1Tb2xpZC50ZXN0KF8xYi5ub2RlTmFtZSkpfHwoXzFiLm5vZGVUeXBlPT0zJiYhdGhpcy5fd2hpdGVTcGFjZS50ZXN0KF8xYi5ub2RlVmFsdWUpKXx8KF8xYi5ub2RlVHlwZSE9MSYmXzFiLm5vZGVUeXBlIT0zKSl7Ci1zd2l0Y2goXzFkKXsKLWNhc2UgImZpbmRfZmlsbCI6Ci1yZXR1cm4gbmV3IEFycmF5KHRydWUsZmFsc2UpOwotYnJlYWs7Ci1jYXNlICJmaW5kX2N1cnNvcnBvaW50IjoKLXJldHVybiBuZXcgQXJyYXkodHJ1ZSxfMWIpOwotYnJlYWs7Ci19Ci19Ci1pZihfMWUpewotcmV0dXJuIG5ldyBBcnJheSh0cnVlLF8xYyk7Ci19Ci1yZXR1cm4gbmV3IEFycmF5KGZhbHNlLF8xYyk7Ci19OwotRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5fZmVuQ3VsbElkcz1mdW5jdGlvbihfMWYsXzIwLF8yMSl7Ci1pZihfMjAuaWQpewotXzIxW18yMC5pZF0/XzIwLmlkPSIiOl8yMVtfMjAuaWRdPXRydWU7Ci19Ci1yZXR1cm4gbmV3IEFycmF5KGZhbHNlLF8yMSk7Ci19OwotRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5wcm9jZXNzU2lkZT1mdW5jdGlvbihybmcsXzIzKXsKLXZhciBfMjQ9ZnVuY3Rpb24oXzI1LF8yNil7Ci1yZXR1cm4gKF8yNj09ImxlZnQiP18yNS5wcmV2aW91c1NpYmxpbmc6XzI1Lm5leHRTaWJsaW5nKTsKLX07Ci12YXIgXzI3PV8yMz09ImxlZnQiP3JuZy5zdGFydENvbnRhaW5lcjpybmcuZW5kQ29udGFpbmVyOwotdmFyIF8yOD1fMjM9PSJsZWZ0Ij9ybmcuc3RhcnRPZmZzZXQ6cm5nLmVuZE9mZnNldDsKLXZhciBfMjksXzJhPV8yNzsKLXdoaWxlKF8yYS5ub2RlVHlwZT09MSYmIXRoaXMuX3Blcm1FbXB0eS50ZXN0KF8yYS5ub2RlTmFtZSkpewotXzJhPShfMjg/XzJhLmxhc3RDaGlsZDpfMmEuZmlyc3RDaGlsZCk7Ci19Ci13aGlsZShfMjk9XzI5PyhfMjQoXzI5LF8yMyk/XzI0KF8yOSxfMjMpOl8yOS5wYXJlbnROb2RlKTpfMmEpewotaWYoXzI0KF8yOSxfMjMpKXsKLWlmKHRoaXMuX3BFeGNsdXNpb25zLnRlc3QoXzI0KF8yOSxfMjMpLm5vZGVOYW1lKSl7Ci1yZXR1cm4gdGhpcy5wcm9jZXNzUm5nKHJuZyxfMjMsXzI5LF8yNChfMjksXzIzKSwoXzIzPT0ibGVmdCI/IkFmdGVyRW5kIjoiQmVmb3JlQmVnaW4iKSx0cnVlLGZhbHNlKTsKLX0KLX1lbHNlewotaWYodGhpcy5fcENvbnRhaW5lcnMudGVzdChfMjkucGFyZW50Tm9kZS5ub2RlTmFtZSkpewotcmV0dXJuIHRoaXMucHJvY2Vzc1JuZyhybmcsXzIzLF8yOSxfMjkucGFyZW50Tm9kZSwoXzIzPT0ibGVmdCI/IkFmdGVyQmVnaW4iOiJCZWZvcmVFbmQiKSx0cnVlLGZhbHNlKTsKLX1lbHNlewotaWYodGhpcy5fcEV4Y2x1c2lvbnMudGVzdChfMjkucGFyZW50Tm9kZS5ub2RlTmFtZSkpewotaWYodGhpcy5fcEJyZWFrLnRlc3QoXzI5LnBhcmVudE5vZGUubm9kZU5hbWUpKXsKLXJldHVybiB0aGlzLnByb2Nlc3NSbmcocm5nLF8yMyxfMjksXzI5LnBhcmVudE5vZGUsKF8yMz09ImxlZnQiPyJBZnRlckJlZ2luIjoiQmVmb3JlRW5kIiksZmFsc2UsKF8yMz09ImxlZnQiP3RydWU6ZmFsc2UpKTsKLX1lbHNlewotcmV0dXJuIHRoaXMucHJvY2Vzc1JuZyhybmcsXzIzLChfMjk9XzI5LnBhcmVudE5vZGUpLChfMjQoXzI5LF8yMyk/XzI0KF8yOSxfMjMpOl8yOS5wYXJlbnROb2RlKSwoXzI0KF8yOSxfMjMpPyhfMjM9PSJsZWZ0Ij8iQWZ0ZXJFbmQiOiJCZWZvcmVCZWdpbiIpOihfMjM9PSJsZWZ0Ij8iQWZ0ZXJCZWdpbiI6IkJlZm9yZUVuZCIpKSxmYWxzZSxmYWxzZSk7Ci19Ci19Ci19Ci19Ci19Ci19OwotRW50ZXJQYXJhZ3JhcGhzLnByb3RvdHlwZS5wcm9jZXNzUm5nPWZ1bmN0aW9uKHJuZyxfMmMsXzJkLF8yZSxfMmYsXzMwLF8zMSl7Ci12YXIgXzMyPV8yYz09ImxlZnQiP3JuZy5zdGFydENvbnRhaW5lcjpybmcuZW5kQ29udGFpbmVyOwotdmFyIF8zMz1fMmM9PSJsZWZ0Ij9ybmcuc3RhcnRPZmZzZXQ6cm5nLmVuZE9mZnNldDsKLXZhciBfMzQ9dGhpcy5lZGl0b3I7Ci12YXIgXzM1PV8zNC5fZG9jLmNyZWF0ZVJhbmdlKCk7Ci1fMzUuc2VsZWN0Tm9kZShfMmQpOwotaWYoXzJjPT0ibGVmdCIpewotXzM1LnNldEVuZChfMzIsXzMzKTsKLXJuZy5zZXRTdGFydChfMzUuc3RhcnRDb250YWluZXIsXzM1LnN0YXJ0T2Zmc2V0KTsKLX1lbHNlewotaWYoXzJjPT0icmlnaHQiKXsKLV8zNS5zZXRTdGFydChfMzIsXzMzKTsKLXJuZy5zZXRFbmQoXzM1LmVuZENvbnRhaW5lcixfMzUuZW5kT2Zmc2V0KTsKLX0KLX0KLXZhciBjbnQ9XzM1LmNsb25lQ29udGVudHMoKTsKLXRoaXMuZm9yRWFjaE5vZGVVbmRlcihjbnQsImN1bGxpZHMiLCJsdHIiLHRoaXMudGFrZW5JZHMsZmFsc2UsZmFsc2UpOwotdmFyIF8zNyxfMzgsXzM5OwotXzM3PV8yYz09ImxlZnQiPyhfMzUuZW5kQ29udGFpbmVyLm5vZGVUeXBlPT0zP3RydWU6ZmFsc2UpOihfMzUuc3RhcnRDb250YWluZXIubm9kZVR5cGU9PTM/ZmFsc2U6dHJ1ZSk7Ci1fMzg9XzM3P18zNS5zdGFydE9mZnNldDpfMzUuZW5kT2Zmc2V0OwotXzM3PV8zNz9fMzUuc3RhcnRDb250YWluZXI6XzM1LmVuZENvbnRhaW5lcjsKLWlmKHRoaXMuX3BpZnlQYXJlbnQudGVzdChfMzcubm9kZU5hbWUpJiZfMzcucGFyZW50Tm9kZS5jaGlsZE5vZGVzLml0ZW0oMCk9PV8zNyl7Ci13aGlsZSghdGhpcy5fcGlmeVNpYmxpbmcudGVzdChfMzcubm9kZU5hbWUpKXsKLV8zNz1fMzcucGFyZW50Tm9kZTsKLX0KLX0KLWlmKGNudC5ub2RlVHlwZT09MTEmJiFjbnQuZmlyc3RDaGlsZCl7Ci1pZihfMzcubm9kZU5hbWUhPSJCT0RZInx8KF8zNy5ub2RlTmFtZT09IkJPRFkiJiZfMzghPTApKXsKLWNudC5hcHBlbmRDaGlsZChfMzQuX2RvYy5jcmVhdGVFbGVtZW50KF8zNy5ub2RlTmFtZSkpOwotfQotfQotXzM5PXRoaXMuZm9yRWFjaE5vZGVVbmRlcihjbnQsImZpbmRfZmlsbCIsImx0ciIsZmFsc2UpOwotaWYoXzM5JiZ0aGlzLl9waWZ5U2libGluZy50ZXN0KF8zNy5ub2RlTmFtZSkmJigoXzM4PT0wKXx8KF8zOD09MSYmdGhpcy5fcGlmeUZvcmNlZC50ZXN0KF8zNy5ub2RlTmFtZSkpKSl7Ci1fMmQ9XzM0Ll9kb2MuY3JlYXRlRWxlbWVudCgicCIpOwotXzJkLmlubmVySFRNTD0iJm5ic3A7IjsKLWlmKChfMmM9PSJsZWZ0IikmJl8zNy5wcmV2aW91c1NpYmxpbmcpewotcmV0dXJuIG5ldyBBcnJheShfMzcucHJldmlvdXNTaWJsaW5nLCJBZnRlckVuZCIsXzJkKTsKLX1lbHNlewotaWYoKF8yYz09InJpZ2h0IikmJl8zNy5uZXh0U2libGluZyl7Ci1yZXR1cm4gbmV3IEFycmF5KF8zNy5uZXh0U2libGluZywiQmVmb3JlQmVnaW4iLF8yZCk7Ci19ZWxzZXsKLXJldHVybiBuZXcgQXJyYXkoXzM3LnBhcmVudE5vZGUsKF8yYz09ImxlZnQiPyJBZnRlckJlZ2luIjoiQmVmb3JlRW5kIiksXzJkKTsKLX0KLX0KLX0KLWlmKF8zOSl7Ci1pZihfMzkubm9kZVR5cGU9PTMpewotXzM5PV8zNC5fZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLX0KLWlmKChfMzkubm9kZVR5cGU9PTEmJiF0aGlzLl9lbGVtU29saWQudGVzdCgpKXx8XzM5Lm5vZGVUeXBlPT0xMSl7Ci12YXIgXzNhPV8zNC5fZG9jLmNyZWF0ZUVsZW1lbnQoInAiKTsKLV8zYS5pbm5lckhUTUw9IiZuYnNwOyI7Ci1fMzkuYXBwZW5kQ2hpbGQoXzNhKTsKLX1lbHNlewotdmFyIF8zYT1fMzQuX2RvYy5jcmVhdGVFbGVtZW50KCJwIik7Ci1fM2EuaW5uZXJIVE1MPSImbmJzcDsiOwotXzM5LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsXzM5KTsKLX0KLX0KLWlmKF8zOSl7Ci1fMmQ9XzM5OwotfWVsc2V7Ci1fMmQ9KF8zMHx8KGNudC5ub2RlVHlwZT09MTEmJiFjbnQuZmlyc3RDaGlsZCkpP18zNC5fZG9jLmNyZWF0ZUVsZW1lbnQoInAiKTpfMzQuX2RvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci1fMmQuYXBwZW5kQ2hpbGQoY250KTsKLX0KLWlmKF8zMSl7Ci1fMmQuYXBwZW5kQ2hpbGQoXzM0Ll9kb2MuY3JlYXRlRWxlbWVudCgiYnIiKSk7Ci19Ci1yZXR1cm4gbmV3IEFycmF5KF8yZSxfMmYsXzJkKTsKLX07Ci1FbnRlclBhcmFncmFwaHMucHJvdG90eXBlLmlzTm9ybWFsTGlzdEl0ZW09ZnVuY3Rpb24ocm5nKXsKLXZhciBfM2MsXzNkOwotXzNjPXJuZy5zdGFydENvbnRhaW5lcjsKLWlmKCh0eXBlb2YgXzNjLm5vZGVOYW1lIT0idW5kZWZpbmVkIikmJihfM2Mubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09ImxpIikpewotXzNkPV8zYzsKLX1lbHNlewotaWYoKHR5cGVvZiBfM2MucGFyZW50Tm9kZSE9InVuZGVmaW5lZCIpJiYodHlwZW9mIF8zYy5wYXJlbnROb2RlLm5vZGVOYW1lIT0idW5kZWZpbmVkIikmJihfM2MucGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT0ibGkiKSl7Ci1fM2Q9XzNjLnBhcmVudE5vZGU7Ci19ZWxzZXsKLXJldHVybiBmYWxzZTsKLX0KLX0KLWlmKCFfM2QucHJldmlvdXNTaWJsaW5nKXsKLWlmKHJuZy5zdGFydE9mZnNldD09MCl7Ci1yZXR1cm4gZmFsc2U7Ci19Ci19Ci1yZXR1cm4gdHJ1ZTsKLX07Ci1FbnRlclBhcmFncmFwaHMucHJvdG90eXBlLl9fb25LZXlQcmVzcz1mdW5jdGlvbihldil7Ci1pZihldi5rZXlDb2RlPT0xMyYmIWV2LnNoaWZ0S2V5JiZ0aGlzLmVkaXRvci5faWZyYW1lLmNvbnRlbnRXaW5kb3cuZ2V0U2VsZWN0aW9uKXsKLXJldHVybiB0aGlzLmhhbmRsZUVudGVyKGV2KTsKLX0KLX07Ci1FbnRlclBhcmFncmFwaHMucHJvdG90eXBlLmhhbmRsZUVudGVyPWZ1bmN0aW9uKGV2KXsKLXZhciBfNDA7Ci12YXIgc2VsPXRoaXMuZWRpdG9yLmdldFNlbGVjdGlvbigpOwotdmFyIHJuZz10aGlzLmVkaXRvci5jcmVhdGVSYW5nZShzZWwpOwotaWYodGhpcy5pc05vcm1hbExpc3RJdGVtKHJuZykpewotcmV0dXJuIHRydWU7Ci19Ci10aGlzLnRha2VuSWRzPW5ldyBPYmplY3QoKTsKLXZhciBfNDM9dGhpcy5wcm9jZXNzU2lkZShybmcsImxlZnQiKTsKLXZhciBfNDQ9dGhpcy5wcm9jZXNzU2lkZShybmcsInJpZ2h0Iik7Ci1fNDA9XzQ0WzJdOwotc2VsLnJlbW92ZUFsbFJhbmdlcygpOwotcm5nLmRlbGV0ZUNvbnRlbnRzKCk7Ci12YXIgXzQ1PXRoaXMuZm9yRWFjaE5vZGVVbmRlcihfNDAsImZpbmRfY3Vyc29ycG9pbnQiLCJsdHIiLGZhbHNlLHRydWUpOwotaWYoIV80NSl7Ci1hbGVydCgiSU5URVJOQUwgRVJST1IgLSBjb3VsZCBub3QgZmluZCBwbGFjZSB0byBwdXQgY3Vyc29yIGFmdGVyIEVOVEVSIik7Ci19Ci1pZihfNDMpewotdGhpcy5pbnNlcnRBZGphY2VudEVsZW1lbnQoXzQzWzBdLF80M1sxXSxfNDNbMl0pOwotfQotaWYoXzQ0JiZfNDQubm9kZVR5cGUhPTEpewotdGhpcy5pbnNlcnRBZGphY2VudEVsZW1lbnQoXzQ0WzBdLF80NFsxXSxfNDRbMl0pOwotfQotaWYoKF80NSkmJih0aGlzLl9wZXJtRW1wdHkudGVzdChfNDUubm9kZU5hbWUpKSl7Ci12YXIgXzQ2PTA7Ci13aGlsZShfNDUucGFyZW50Tm9kZS5jaGlsZE5vZGVzLml0ZW0oXzQ2KSE9XzQ1KXsKLV80NisrOwotfQotc2VsLmNvbGxhcHNlKF80NS5wYXJlbnROb2RlLF80Nik7Ci19ZWxzZXsKLXRyeXsKLXNlbC5jb2xsYXBzZShfNDUsMCk7Ci1pZihfNDUubm9kZVR5cGU9PTMpewotXzQ1PV80NS5wYXJlbnROb2RlOwotfQotdGhpcy5lZGl0b3Iuc2Nyb2xsVG9FbGVtZW50KF80NSk7Ci19Ci1jYXRjaChlKXsKLX0KLX0KLXRoaXMuZWRpdG9yLnVwZGF0ZVRvb2xiYXIoKTsKLVhpbmhhLl9zdG9wRXZlbnQoZXYpOwotcmV0dXJuIHRydWU7Ci19OwotCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9HZXRIdG1sL0RPTXdhbGsuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9HZXRIdG1sL0RPTXdhbGsuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MzZhZTAuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvR2V0SHRtbC9ET013YWxrLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTk3ICswLDAgQEAKLS8qIFRoaXMgY29tcHJlc3NlZCBmaWxlIGlzIHBhcnQgb2YgWGluaGEuIEZvciB1bmNvbXByZXNzZWQgc291cmNlcywgZm9ydW0sIGFuZCBidWcgcmVwb3J0cywgZ28gdG8geGluaGEub3JnICovCi0vKiBUaGUgVVJMIG9mIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpcyBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0dldEh0bWwvRE9Nd2Fsay5qcyAqLwotZnVuY3Rpb24gR2V0SHRtbEltcGxlbWVudGF0aW9uKF8xKXsKLXRoaXMuZWRpdG9yPV8xOwotfTsKLUdldEh0bWxJbXBsZW1lbnRhdGlvbi5fcGx1Z2luSW5mbz17bmFtZToiR2V0SHRtbEltcGxlbWVudGF0aW9uIERPTXdhbGsiLG9yaWdpbjoiWGluaGEgQ29yZSIsdmVyc2lvbjoiJExhc3RDaGFuZ2VkUmV2aXNpb246IDExODUgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCIkMSIpLGRldmVsb3BlcjoiVGhlIFhpbmhhIENvcmUgRGV2ZWxvcGVyIFRlYW0iLGRldmVsb3Blcl91cmw6IiRIZWFkVVJMOiBodHRwOi8vc3ZuLnhpbmhhLm9yZy90YWdzLzAuOTYuMS9tb2R1bGVzL0dldEh0bWwvRE9Nd2Fsay5qcyAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sIiQxIiksc3BvbnNvcjoiIixzcG9uc29yX3VybDoiIixsaWNlbnNlOiJodG1sQXJlYSJ9OwotWGluaGEuZ2V0SFRNTD1mdW5jdGlvbihfMixfMyxfNCl7Ci1yZXR1cm4gWGluaGEuZ2V0SFRNTFdyYXBwZXIoXzIsXzMsXzQpOwotfTsKLVhpbmhhLmVtcHR5QXR0cmlidXRlcz0iIGNoZWNrZWQgZGlzYWJsZWQgaXNtYXAgcmVhZG9ubHkgbm93cmFwIGNvbXBhY3QgZGVjbGFyZSBzZWxlY3RlZCBkZWZlciBtdWx0aXBsZSBub3Jlc2l6ZSBub3NoYWRlICI7Ci1YaW5oYS5nZXRIVE1MV3JhcHBlcj1mdW5jdGlvbihfNSxfNixfNyxfOCl7Ci12YXIgXzk9IiI7Ci1pZighXzgpewotXzg9IiI7Ci19Ci1zd2l0Y2goXzUubm9kZVR5cGUpewotY2FzZSAxMDoKLWNhc2UgNjoKLWNhc2UgMTI6Ci1icmVhazsKLWNhc2UgMjoKLWJyZWFrOwotY2FzZSA0OgotXzkrPShYaW5oYS5pc19pZT8oIlxuIitfOCk6IiIpKyI8IVtDREFUQVsiK181LmRhdGErIl1dPiI7Ci1icmVhazsKLWNhc2UgNToKLV85Kz0iJiIrXzUubm9kZVZhbHVlKyI7IjsKLWJyZWFrOwotY2FzZSA3OgotXzkrPShYaW5oYS5pc19pZT8oIlxuIitfOCk6IiIpKyI8IisiPyIrXzUudGFyZ2V0KyIgIitfNS5kYXRhKyIgPz4iOwotYnJlYWs7Ci1jYXNlIDE6Ci1jYXNlIDExOgotY2FzZSA5OgotdmFyIF9hOwotdmFyIGk7Ci12YXIgX2M9KF81Lm5vZGVUeXBlPT0xKT9fNS50YWdOYW1lLnRvTG93ZXJDYXNlKCk6IiI7Ci1pZigoX2M9PSJzY3JpcHQifHxfYz09Im5vc2NyaXB0IikmJl83LmNvbmZpZy5zdHJpcFNjcmlwdHMpewotYnJlYWs7Ci19Ci1pZihfNil7Ci1fNj0hKF83LmNvbmZpZy5odG1sUmVtb3ZlVGFncyYmXzcuY29uZmlnLmh0bWxSZW1vdmVUYWdzLnRlc3QoX2MpKTsKLX0KLWlmKFhpbmhhLmlzX2llJiZfYz09ImhlYWQiKXsKLWlmKF82KXsKLV85Kz0oWGluaGEuaXNfaWU/KCJcbiIrXzgpOiIiKSsiPGhlYWQ+IjsKLX0KLXZhciBfZD1SZWdFeHAubXVsdGlsaW5lOwotUmVnRXhwLm11bHRpbGluZT10cnVlOwotdmFyIF9lPV81LmlubmVySFRNTC5yZXBsYWNlKFhpbmhhLlJFX3RhZ05hbWUsZnVuY3Rpb24oX2YscDEscDIpewotcmV0dXJuIHAxK3AyLnRvTG93ZXJDYXNlKCk7Ci19KS5yZXBsYWNlKC9ccyo9XHMqKChbXiciXVtePlxzXSopKFs+XHNdKXwiKFteIl0rKSJ8JyhbXiddKyknKS9nLCI9XCIkMiQ0JDVcIiQzIikucmVwbGFjZSgvPChsaW5rfG1ldGEpKChccypcUyo9IlteIl0qIikqKT4oW1xuXHJdKikvZywiPCQxJDIgLz5cbiIpOwotUmVnRXhwLm11bHRpbGluZT1fZDsKLV85Kz1fZSsiXG4iOwotaWYoXzYpewotXzkrPShYaW5oYS5pc19pZT8oIlxuIitfOCk6IiIpKyI8L2hlYWQ+IjsKLX0KLWJyZWFrOwotfWVsc2V7Ci1pZihfNil7Ci1fYT0oIShfNS5oYXNDaGlsZE5vZGVzKCl8fFhpbmhhLm5lZWRzQ2xvc2luZ1RhZyhfNSkpKTsKLV85Kz0oKFhpbmhhLmlzQmxvY2tFbGVtZW50KF81KSk/KCJcbiIrXzgpOiIiKSsiPCIrXzUudGFnTmFtZS50b0xvd2VyQ2FzZSgpOwotdmFyIF8xMj1fNS5hdHRyaWJ1dGVzOwotZm9yKGk9MDtpPF8xMi5sZW5ndGg7KytpKXsKLXZhciBhPV8xMi5pdGVtKGkpOwotaWYoWGluaGEuaXNfcmVhbF9nZWNrbyYmKF81LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09ImltZyIpJiYoKGEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09ImhlaWdodCIpfHwoYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT0id2lkdGgiKSkpewotaWYoIV81LmNvbXBsZXRlfHxfNS5uYXR1cmFsV2lkdGg9PT0wKXsKLWNvbnRpbnVlOwotfQotfQotaWYodHlwZW9mIGEubm9kZVZhbHVlPT0ib2JqZWN0Iil7Ci1jb250aW51ZTsKLX0KLWlmKF81LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09ImlucHV0IiYmXzUudHlwZS50b0xvd2VyQ2FzZSgpPT0iY2hlY2tib3giJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PSJ2YWx1ZSImJmEubm9kZVZhbHVlLnRvTG93ZXJDYXNlKCk9PSJvbiIpewotY29udGludWU7Ci19Ci1pZighYS5zcGVjaWZpZWQmJiEoXzUudGFnTmFtZS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9pbnB1dHxvcHRpb24vKSYmYS5ub2RlTmFtZT09InZhbHVlIikmJiEoXzUudGFnTmFtZS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcmVhLykmJmEubm9kZU5hbWUubWF0Y2goL3NoYXBlfGNvb3Jkcy9pKSkpewotY29udGludWU7Ci19Ci12YXIgXzE0PWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsKLWlmKC9fbW96X2VkaXRvcl9ib2d1c19ub2RlLy50ZXN0KF8xNCl8fChfMTQ9PSJjbGFzcyImJmEubm9kZVZhbHVlPT0id2Via2l0LWJsb2NrLXBsYWNlaG9sZGVyIikpewotXzk9IiI7Ci1icmVhazsKLX0KLWlmKC8oX21veil8KGNvbnRlbnRlZGl0YWJsZSl8KF9tc2gpLy50ZXN0KF8xNCkpewotY29udGludWU7Ci19Ci12YXIgXzE1OwotaWYoWGluaGEuZW1wdHlBdHRyaWJ1dGVzLmluZGV4T2YoIiAiK18xNCsiICIpIT0tMSl7Ci1fMTU9XzE0OwotfWVsc2V7Ci1pZihfMTQhPSJzdHlsZSIpewotaWYodHlwZW9mIF81W2Eubm9kZU5hbWVdIT0idW5kZWZpbmVkIiYmXzE0IT0iaHJlZiImJl8xNCE9InNyYyImJiEoL15vbi8udGVzdChfMTQpKSl7Ci1fMTU9XzVbYS5ub2RlTmFtZV07Ci19ZWxzZXsKLV8xNT1hLm5vZGVWYWx1ZTsKLWlmKF8xND09ImNsYXNzIil7Ci1fMTU9XzE1LnJlcGxhY2UoL0FwcGxlLXN0eWxlLXNwYW4vLCIiKTsKLWlmKCFfMTUpewotY29udGludWU7Ci19Ci19Ci1pZihYaW5oYS5pc19pZSYmKF8xND09ImhyZWYifHxfMTQ9PSJzcmMiKSl7Ci1fMTU9Xzcuc3RyaXBCYXNlVVJMKF8xNSk7Ci19Ci1pZihfNy5jb25maWcub25seTdCaXRQcmludGFibGVzSW5VUkxzJiYoXzE0PT0iaHJlZiJ8fF8xND09InNyYyIpKXsKLV8xNT1fMTUucmVwbGFjZSgvKFteIS1+XSspL2csZnVuY3Rpb24oXzE2KXsKLXJldHVybiBlc2NhcGUoXzE2KTsKLX0pOwotfQotfQotfWVsc2V7Ci1pZighWGluaGEuaXNfaWUpewotXzE1PV81LnN0eWxlLmNzc1RleHQucmVwbGFjZSgvcmdiXCguKj9cKS9pZyxmdW5jdGlvbihyZ2IpewotcmV0dXJuIFhpbmhhLl9jb2xvclRvUmdiKHJnYik7Ci19KTsKLX1lbHNlewotaWYoIV8xNSl7Ci1jb250aW51ZTsKLX0KLX0KLX0KLX0KLWlmKC9eKF9tb3opPyQvLnRlc3QoXzE1KSl7Ci1jb250aW51ZTsKLX0KLV85Kz0iICIrXzE0KyI9XCIiK1hpbmhhLmh0bWxFbmNvZGUoXzE1KSsiXCIiOwotfQotaWYoWGluaGEuaXNfaWUmJl81LnN0eWxlLmNzc1RleHQpewotXzkrPSIgc3R5bGU9XCIiK181LnN0eWxlLmNzc1RleHQucmVwbGFjZSgvKF4pPyhbXjpdKik6KC4qPykoO3wkKS9nLGZ1bmN0aW9uKG0wLG0xLG0yLG0zLG00KXsKLXJldHVybiBtMi50b0xvd2VyQ2FzZSgpKyI6IittMyttNDsKLX0pKyJcIiI7Ci19Ci1pZihYaW5oYS5pc19pZSYmXzUudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ib3B0aW9uIiYmXzUuc2VsZWN0ZWQpewotXzkrPSIgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiIjsKLX0KLWlmKF85IT09IiIpewotaWYoX2EmJl9jPT0icCIpewotXzkrPSI+Jm5ic3A7PC9wPiI7Ci19ZWxzZXsKLWlmKF9hKXsKLV85Kz0iIC8+IjsKLX1lbHNlewotXzkrPSI+IjsKLX0KLX0KLX0KLX0KLX0KLXZhciBfMWQ9ZmFsc2U7Ci1pZihfYz09InNjcmlwdCJ8fF9jPT0ibm9zY3JpcHQiKXsKLWlmKCFfNy5jb25maWcuc3RyaXBTY3JpcHRzKXsKLWlmKFhpbmhhLmlzX2llKXsKLXZhciBfMWU9IlxuIitfNS5pbm5lckhUTUwucmVwbGFjZSgvXltcblxyXSovLCIiKS5yZXBsYWNlKC9ccyskLywiIikrIlxuIitfODsKLX1lbHNlewotdmFyIF8xZT0oXzUuaGFzQ2hpbGROb2RlcygpKT9fNS5maXJzdENoaWxkLm5vZGVWYWx1ZToiIjsKLX0KLV85Kz1fMWUrIjwvIitfYysiPiIrKChYaW5oYS5pc19pZSk/IlxuIjoiIik7Ci19Ci19ZWxzZXsKLWlmKF9jPT0icHJlIil7Ci1fOSs9KChYaW5oYS5pc19pZSk/IlxuIjoiIikrXzUuaW5uZXJIVE1MLnJlcGxhY2UoLzxicj4vZywiXG4iKSsiPC8iK19jKyI+IjsKLX1lbHNlewotZm9yKGk9XzUuZmlyc3RDaGlsZDtpO2k9aS5uZXh0U2libGluZyl7Ci1pZighXzFkJiZpLm5vZGVUeXBlPT0xJiZYaW5oYS5pc0Jsb2NrRWxlbWVudChpKSl7Ci1fMWQ9dHJ1ZTsKLX0KLV85Kz1YaW5oYS5nZXRIVE1MV3JhcHBlcihpLHRydWUsXzcsXzgrIiAgIik7Ci19Ci1pZihfNiYmIV9hKXsKLV85Kz0oKChYaW5oYS5pc0Jsb2NrRWxlbWVudChfNSkmJl8xZCl8fF9jPT0iaGVhZCJ8fF9jPT0iaHRtbCIpPygiXG4iK184KToiIikrIjwvIitfNS50YWdOYW1lLnRvTG93ZXJDYXNlKCkrIj4iOwotfQotfQotfQotYnJlYWs7Ci1jYXNlIDM6Ci1pZigvXnNjcmlwdHxub3NjcmlwdHxzdHlsZSQvaS50ZXN0KF81LnBhcmVudE5vZGUudGFnTmFtZSkpewotXzk9XzUuZGF0YTsKLX1lbHNlewotaWYoXzUuZGF0YS50cmltKCk9PSIiKXsKLWlmKF81LmRhdGEpewotXzk9IiAiOwotfWVsc2V7Ci1fOT0iIjsKLX0KLX1lbHNlewotXzk9WGluaGEuaHRtbEVuY29kZShfNS5kYXRhKTsKLX0KLX0KLWJyZWFrOwotY2FzZSA4OgotXzk9IjwhLS0iK181LmRhdGErIi0tPiI7Ci1icmVhazsKLX0KLXJldHVybiBfOTsKLX07Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0dldEh0bWwvVHJhbnNmb3JtSW5uZXJIVE1MLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvR2V0SHRtbC9UcmFuc2Zvcm1Jbm5lckhUTUwuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzYjExNmUuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvR2V0SHRtbC9UcmFuc2Zvcm1Jbm5lckhUTUwuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTUgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvR2V0SHRtbC9UcmFuc2Zvcm1Jbm5lckhUTUwuanMgKi8KLWZ1bmN0aW9uIEdldEh0bWxJbXBsZW1lbnRhdGlvbihfMSl7Ci10aGlzLmVkaXRvcj1fMTsKLX07Ci1HZXRIdG1sSW1wbGVtZW50YXRpb24uX3BsdWdpbkluZm89e25hbWU6IkdldEh0bWxJbXBsZW1lbnRhdGlvbiBUcmFuc2Zvcm1Jbm5lckhUTUwiLHZlcnNpb246IjEuMCIsZGV2ZWxvcGVyOiJOZWxzb24gQnJpZ2h0IixkZXZlbG9wZXJfdXJsOiJodHRwOi8vd3d3LmJyaWdodHdvcmt3ZWIuY29tLyIsc3BvbnNvcjoiIixzcG9uc29yX3VybDoiIixsaWNlbnNlOiJodG1sQXJlYSJ9OwotWGluaGEuUmVnRXhwQ2FjaGU9Wy88XHMqXC8/KFteXHNcLz5dKylbXHMqXC8+XS9naSwvKFxzKylfbW96W149Pl0qPVteXHM+XSovZ2ksL1xzKj1ccyooKFteJyJdW14+XHNdKikoWz5cc10pfCIoW14iXSspInwnKFteJ10rKScpL2csL1wvPi9nLC88KGJyfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW18ZW1iZWR8YXJlYSkoKFxzKlxTKj0iW14iXSoiKSopPi9nLC8oPFx3K1xzKyhcdyo9IlteIl0qIlxzKykqKShjaGVja2VkfGNvbXBhY3R8ZGVjbGFyZXxkZWZlcnxkaXNhYmxlZHxpc21hcHxtdWx0aXBsZXxubyhocmVmfHJlc2l6ZXxzaGFkZXx3cmFwKXxyZWFkb25seXxzZWxlY3RlZCkoW1xzPl0pL2dpLC8oPSJbXiddKiknKFteJyJdKiIpLywvJig/PSg/ISgjWzAtOV17Miw1fTt8W2EtekEtWjAtOV17Miw2fTt8I3hbMC05YS1mQS1GXXsyLDR9OykpW148XSo+KS9nLC88XHMrL2csL1xzKyhcLyk/Pi9nLC9cc3syLH0vZywvXHMrKFtePVxzXSspKCg9IlteIl0rIil8KFtccz5dKSkvZywvXHMrY29udGVudGVkaXRhYmxlKD1bXj5cc1wvXSopPy9naSwvKChocmVmfHNyYyk9IikoW15cc10qKSIvZywvPFwvPyhkaXZ8cHxoWzEtNl18dGFibGV8dHJ8dGR8dGh8dWx8b2x8bGl8ZGx8ZHR8ZGR8YmxvY2txdW90ZXxvYmplY3R8YnJ8aHJ8aW1nfGVtYmVkfHBhcmFtfHByZXxzY3JpcHR8aHRtbHxoZWFkfGJvZHl8bWV0YXxsaW5rfHRpdGxlfGFyZWF8aW5wdXR8Zm9ybXx0ZXh0YXJlYXxzZWxlY3R8b3B0aW9uKVtePl0qPi9nLC88XC8oZGl2fHB8aFsxLTZdfHRhYmxlfHRyfHVsfG9sfGRsfGJsb2NrcXVvdGV8aHRtbHxoZWFkfGJvZHl8c2NyaXB0fGZvcm18c2VsZWN0KSggW14+XSopPz4vZywvPChkaXZ8cHxoWzEtNl18dGFibGV8dHJ8dWx8b2x8ZGx8YmxvY2txdW90ZXxvYmplY3R8aHRtbHxoZWFkfGJvZHl8c2NyaXB0fGZvcm18c2VsZWN0KSggW14+XSopPz4vZywvPCh0ZHx0aHxsaXxkdHxkZHxvcHRpb258YnJ8aHJ8ZW1iZWR8cGFyYW18cHJlfG1ldGF8bGlua3x0aXRsZXxhcmVhfGlucHV0fHRleHRhcmVhKVtePl0qPi9nLC8oXnw8XC8ocHJlfHNjcmlwdCk+KShcc3xbXlxzXSkqPyg8KHByZXxzY3JpcHQpW14+XSo+fCQpL2csLyg8cHJlW14+XSo+KShbXHNcU10pKj8oPFwvcHJlPikvZywvKF58PCEtLVtcc1xTXSo/LS0+KShbXHNcU10qPykoPz08IS0tW1xzXFNdKj8tLT58JCkvZywvXFMqPSIiL2csLzwhLS1bXHNcU10qPy0tPnw8XD9bXHNcU10qP1w/Pnw8XC8/XHdbXj5dKj4vZywvKF58PFwvc2NyaXB0PilbXHNcU10qPyg8c2NyaXB0W14+XSo+fCQpL2ddOwotdmFyIHRlc3RSRT1uZXcgUmVnRXhwKCkuY29tcGlsZShYaW5oYS5SZWdFeHBDYWNoZVszXSk7Ci1pZih0eXBlb2YgdGVzdFJFIT0idW5kZWZpbmVkIil7Ci1mb3IodmFyIGk9MDtpPFhpbmhhLlJlZ0V4cENhY2hlLmxlbmd0aDtpKyspewotWGluaGEuUmVnRXhwQ2FjaGVbaV09bmV3IFJlZ0V4cCgpLmNvbXBpbGUoWGluaGEuUmVnRXhwQ2FjaGVbaV0pOwotfQotfQotWGluaGEucHJvdG90eXBlLmNsZWFuSFRNTD1mdW5jdGlvbihfMil7Ci12YXIgYz1YaW5oYS5SZWdFeHBDYWNoZTsKLV8yPV8yLnJlcGxhY2UoY1swXSxmdW5jdGlvbihfNCl7Ci1yZXR1cm4gXzQudG9Mb3dlckNhc2UoKTsKLX0pLnJlcGxhY2UoY1sxXSwiICIpLnJlcGxhY2UoY1sxMl0sIiAiKS5yZXBsYWNlKGNbMl0sIj1cIiQyJDQkNVwiJDMiKS5yZXBsYWNlKGNbMjFdLCIgIikucmVwbGFjZShjWzExXSxmdW5jdGlvbihfNSxwMSxwMil7Ci1yZXR1cm4gIiAiK3AxLnRvTG93ZXJDYXNlKCkrcDI7Ci19KS5yZXBsYWNlKGNbM10sIj4iKS5yZXBsYWNlKGNbOV0sIiQxPiIpLnJlcGxhY2UoY1s1XSwiJDEkMz1cIiQzXCIkNSIpLnJlcGxhY2UoY1s0XSwiPCQxJDIgLz4iKS5yZXBsYWNlKGNbNl0sIiQxJDIiKS5yZXBsYWNlKGNbN10sIiZhbXA7IikucmVwbGFjZShjWzhdLCI8IikucmVwbGFjZShjWzEwXSwiICIpOwotaWYoWGluaGEuaXNfaWUmJmNbMTNdLnRlc3QoXzIpKXsKLV8yPV8yLnJlcGxhY2UoY1sxM10sIiQxIitYaW5oYS5fZXNjYXBlRG9sbGFycyh0aGlzLnN0cmlwQmFzZVVSTChSZWdFeHAuJDMpKSsiXCIiKTsKLX0KLWlmKHRoaXMuY29uZmlnLm9ubHk3Qml0UHJpbnRhYmxlc0luVVJMcyl7Ci1pZihYaW5oYS5pc19pZSl7Ci1jWzEzXS50ZXN0KF8yKTsKLX0KLWlmKGNbMTNdLnRlc3QoXzIpKXsKLXRyeXsKLV8yPV8yLnJlcGxhY2UoY1sxM10sIiQxIitYaW5oYS5fZXNjYXBlRG9sbGFycyhkZWNvZGVVUklDb21wb25lbnQoUmVnRXhwLiQzKS5yZXBsYWNlKC8oW14hLX5dKykvZyxmdW5jdGlvbihfOCl7Ci1yZXR1cm4gZXNjYXBlKF84KTsKLX0pKSsiXCIiKTsKLX0KLWNhdGNoKGUpewotXzI9XzIucmVwbGFjZShjWzEzXSxYaW5oYS5fZXNjYXBlRG9sbGFycygiJDEiK1JlZ0V4cC4kMy5yZXBsYWNlKC8oW14hLX5dKykvZyxmdW5jdGlvbihfOSl7Ci1yZXR1cm4gZXNjYXBlKF85KTsKLX0pKyJcIiIpKTsKLX0KLX0KLX0KLXJldHVybiBfMjsKLX07Ci1YaW5oYS5pbmRlbnQ9ZnVuY3Rpb24ocyxfYil7Ci1YaW5oYS5fX25pbmRlbnQ9MDsKLVhpbmhhLl9fc2luZGVudD0iIjsKLVhpbmhhLl9fc2luZGVudENoYXI9KHR5cGVvZiBfYj09InVuZGVmaW5lZCIpPyIgICI6X2I7Ci12YXIgYz1YaW5oYS5SZWdFeHBDYWNoZTsKLWlmKFhpbmhhLmlzX2dlY2tvKXsKLXM9cy5yZXBsYWNlKGNbMTldLGZ1bmN0aW9uKF9kKXsKLXJldHVybiBfZC5yZXBsYWNlKC88YnIgXC8+L2csIlxuIik7Ci19KTsKLX0KLXM9cy5yZXBsYWNlKGNbMThdLGZ1bmN0aW9uKF9lKXsKLV9lPV9lLnJlcGxhY2UoY1syMF0sZnVuY3Rpb24oc3QsJDEsJDIpewotc3RyaW5nPSQyLnJlcGxhY2UoL1tcblxyXS9naSwiICIpLnJlcGxhY2UoL1xzKy9naSwiICIpLnJlcGxhY2UoY1sxNF0sZnVuY3Rpb24oc3RyKXsKLWlmKHN0ci5tYXRjaChjWzE2XSkpewotdmFyIHM9IlxuIitYaW5oYS5fX3NpbmRlbnQrc3RyOwotWGluaGEuX19zaW5kZW50Kz1YaW5oYS5fX3NpbmRlbnRDaGFyOwotKytYaW5oYS5fX25pbmRlbnQ7Ci1yZXR1cm4gczsKLX1lbHNlewotaWYoc3RyLm1hdGNoKGNbMTVdKSl7Ci0tLVhpbmhhLl9fbmluZGVudDsKLVhpbmhhLl9fc2luZGVudD0iIjsKLWZvcih2YXIgaT1YaW5oYS5fX25pbmRlbnQ7aT4wOy0taSl7Ci1YaW5oYS5fX3NpbmRlbnQrPVhpbmhhLl9fc2luZGVudENoYXI7Ci19Ci1yZXR1cm4gIlxuIitYaW5oYS5fX3NpbmRlbnQrc3RyOwotfWVsc2V7Ci1pZihzdHIubWF0Y2goY1sxN10pKXsKLXJldHVybiAiXG4iK1hpbmhhLl9fc2luZGVudCtzdHI7Ci19Ci19Ci19Ci1yZXR1cm4gc3RyOwotfSk7Ci1yZXR1cm4gJDErc3RyaW5nOwotfSk7Ci1yZXR1cm4gX2U7Ci19KTsKLXM9cy5yZXBsYWNlKC9eXHMqLywiIikucmVwbGFjZSgvICtcbi9nLCJcbiIpLnJlcGxhY2UoL1tcclxuXSsoXHMrKTxcL3NjcmlwdD4vZywiXG4kMTwvc2NyaXB0PiIpOwotcmV0dXJuIHM7Ci19OwotWGluaGEuZ2V0SFRNTD1mdW5jdGlvbihfMTUsXzE2LF8xNyl7Ci12YXIgXzE4PSIiOwotdmFyIGM9WGluaGEuUmVnRXhwQ2FjaGU7Ci1pZihfMTUubm9kZVR5cGU9PTExKXsKLXZhciBkaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci12YXIgXzFiPV8xNS5pbnNlcnRCZWZvcmUoZGl2LF8xNS5maXJzdENoaWxkKTsKLWZvcihqPV8xYi5uZXh0U2libGluZztqO2o9ai5uZXh0U2libGluZyl7Ci1fMWIuYXBwZW5kQ2hpbGQoai5jbG9uZU5vZGUodHJ1ZSkpOwotfQotXzE4Kz1fMWIuaW5uZXJIVE1MLnJlcGxhY2UoY1syM10sZnVuY3Rpb24oXzFjKXsKLV8xYz1fMWMucmVwbGFjZShjWzIyXSxmdW5jdGlvbih0YWcpewotaWYoL148WyFcP10vLnRlc3QodGFnKSl7Ci1yZXR1cm4gdGFnOwotfWVsc2V7Ci1yZXR1cm4gXzE3LmNsZWFuSFRNTCh0YWcpOwotfQotfSk7Ci1yZXR1cm4gXzFjOwotfSk7Ci19ZWxzZXsKLXZhciBfMWU9KF8xNS5ub2RlVHlwZT09MSk/XzE1LnRhZ05hbWUudG9Mb3dlckNhc2UoKToiIjsKLWlmKF8xNil7Ci1fMTgrPSI8IitfMWU7Ci12YXIgXzFmPV8xNS5hdHRyaWJ1dGVzOwotZm9yKGk9MDtpPF8xZi5sZW5ndGg7KytpKXsKLXZhciBhPV8xZi5pdGVtKGkpOwotaWYoIWEuc3BlY2lmaWVkKXsKLWNvbnRpbnVlOwotfQotdmFyIF8yMT1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7Ci12YXIgXzIyPWEubm9kZVZhbHVlOwotXzE4Kz0iICIrXzIxKyI9XCIiK18yMisiXCIiOwotfQotXzE4Kz0iPiI7Ci19Ci1pZihfMWU9PSJodG1sIil7Ci1pbm5lcmh0bWw9XzE3Ll9kb2MuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTDsKLX1lbHNlewotaW5uZXJodG1sPV8xNS5pbm5lckhUTUw7Ci19Ci1fMTgrPWlubmVyaHRtbC5yZXBsYWNlKGNbMjNdLGZ1bmN0aW9uKF8yMyl7Ci1fMjM9XzIzLnJlcGxhY2UoY1syMl0sZnVuY3Rpb24odGFnKXsKLWlmKC9ePFshXD9dLy50ZXN0KHRhZykpewotcmV0dXJuIHRhZzsKLX1lbHNlewotaWYoIShfMTcuY29uZmlnLmh0bWxSZW1vdmVUYWdzJiZfMTcuY29uZmlnLmh0bWxSZW1vdmVUYWdzLnRlc3QodGFnLnJlcGxhY2UoLzwoW15ccz5cL10rKS8sIiQxIikpKSl7Ci1yZXR1cm4gXzE3LmNsZWFuSFRNTCh0YWcpOwotfWVsc2V7Ci1yZXR1cm4gIiI7Ci19Ci19Ci19KTsKLXJldHVybiBfMjM7Ci19KTsKLWlmKFhpbmhhLmlzX2llKXsKLV8xOD1fMTgucmVwbGFjZSgvPChsaXxkZHxkdCkoIFtePl0qKT8+L2csIjwvJDE+PCQxJDI+IikucmVwbGFjZSgvKDxbdW9kXWxbXj5dKj5bXHNcU10qPyk8XC8obGl8ZGR8ZHQpPi9nLCIkMSIpLnJlcGxhY2UoL1xzKjxcLyhsaXxkZHxkdCk+KFxzKjxcLyhsaXxkZHxkdCk+KSsvZywiPC8kMT4iKS5yZXBsYWNlKC8oPGR0W1xzPl1bXHNcU10qPykoPFwvZFtkdF0+KSsvZywiJDE8L2R0PiIpOwotfQotaWYoWGluaGEuaXNfZ2Vja28pewotXzE4PV8xOC5yZXBsYWNlKC88YnIgXC8+XG4kLywiIik7Ci19Ci1fMTg9XzE4LnJlcGxhY2UoL1xzKig8XC8obGl8ZGR8ZHQpPikvZywiJDEiKTsKLWlmKF8xNil7Ci1fMTgrPSI8LyIrXzFlKyI+IjsKLX0KLV8xOD1YaW5oYS5pbmRlbnQoXzE4KTsKLX0KLXJldHVybiBfMTg7Ci19OwotWGluaGEuX2VzY2FwZURvbGxhcnM9ZnVuY3Rpb24oc3RyKXsKLXJldHVybiBzdHIucmVwbGFjZSgvXCQvZywiJCQkJCIpOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvR2V0SHRtbC9sYW5nL3B0X2JyLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvR2V0SHRtbC9sYW5nL3B0X2JyLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTY4MzI5Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0dldEh0bWwvbGFuZy9wdF9ici5qcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLe+7vy8vIEkxOE4gY29uc3RhbnRzCi0vLwotLy8gTEFORzogInB0X2JyIiwgRU5DT0RJTkc6IFVURi04Ci0vLyBQb3J0dWd1ZXNlIEJyYXppbGlhbiBUcmFuc2xhdGlvbgotLy8KLS8vIEF1dGhvcjogTWFyY2lvIEJhcmJvc2EsIDxtYXJjaW9AbXBnLmNvbS5icj4KLS8vIE1TTjogdG9tYXJzaGFsbEBtc24uY29tIC0gSUNROiA2OTQxOTkzMwotLy8gU2l0ZTogaHR0cDovL3d3dy5tcGcuY29tLmJyCi0vLwotLy8gTGFzdCByZXZpc2lvbjogMDYgc2VwdGVtYmVyIDIwMDcKLS8vIFBsZWFzZSBkb27CtHQgcmVtb3ZlIHRoaXMgaW5mb3JtYXRpb24KLS8vIElmIHlvdSBtb2RpZnkgYW55IHNvdXJjZSwgcGxlYXNlIGluc2VydCBhIGNvbW1lbnQgd2l0aCB5b3VyIG5hbWUgYW5kIGUtbWFpbAotLy8KLS8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIEhUTUxBcmVhIGl0c2VsZi4KLS8vIFRoaXMgbm90aWNlIE1VU1Qgc3RheSBpbnRhY3QgZm9yIHVzZSAoc2VlIGxpY2Vuc2UudHh0KS4KLXsKLSAgIllvdXIgRG9jdW1lbnQgaXMgbm90IHdlbGwgZm9ybWVkLiBDaGVjayBKYXZhU2NyaXB0IGNvbnNvbGUgZm9yIGRldGFpbHMuIjogIlNldSBkb2N1bWVudG8gbsOjbyBlc3TDoSBmb3JtYXRhZG8gY29ycmV0YW1lbnRlLiBWZXJpZmlxdWUgb3MgZGV0YWxoZXMgbm8gY29uc29sZSBkbyBKYXZhc2NyaXB0LiIKLX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydEltYWdlL2RpYWxvZy5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvZGlhbG9nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5MTE0ZTcuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvZGlhbG9nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08aDEgaWQ9IltoMV0iPjxsMTBuPkluc2VydCBJbWFnZTwvbDEwbj48L2gxPgotPCEtLS0gbmV3IHN0dWZmIC0tLT4KLTxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9ImdldCIgc3R5bGU9InBhZGRpbmctdG9wOjEwcHgiIGlkPSJbaW5wdXRzXSI+Ci08dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iOTUlIiBzdHlsZT0icGFkZGluZzogMHB4OyBtYXJnaW46IDBweCI+Ci0gIDx0Ym9keT4KLQotICA8dHI+Ci0gICAgPHRkIHN0eWxlPSJ3aWR0aDogN2VtOyB0ZXh0LWFsaWduOiByaWdodCI+PGwxMG4+SW1hZ2UgVVJMOjwvbDEwbj48L3RkPgotICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iW2ZfdXJsXSIgaWQ9IltmX3VybF0iIHN0eWxlPSJ3aWR0aDo3NSUiCi0gICAgICB0aXRsZT0iXyhFbnRlciB0aGUgaW1hZ2UgVVJMIGhlcmUpIiAvPgotICAgICAgPGJ1dHRvbiBpZD0iW3ByZXZpZXddIiB0aXRsZT0iXyhQcmV2aWV3IHRoZSBpbWFnZSBpbiBhIG5ldyB3aW5kb3cpIj48bDEwbj5QcmV2aWV3PC9sMTBuPjwvYnV0dG9uPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgc3R5bGU9IndpZHRoOiA3ZW07IHRleHQtYWxpZ246IHJpZ2h0Ij48bDEwbj5BbHRlcm5hdGUgdGV4dDo8L2wxMG4+PC90ZD4KLSAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9IltmX2FsdF0iIGlkPSJbZl9hbHRdIiBzdHlsZT0id2lkdGg6MTAwJSIKLSAgICAgIHRpdGxlPSJfKEZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzKSIgLz48L3RkPgotICA8L3RyPgotCi0gIDwvdGJvZHk+Ci08L3RhYmxlPgotCi08YnIgLz4KLQotPGZpZWxkc2V0IHN0eWxlPSJmbG9hdDogbGVmdDsgbWFyZ2luLWxlZnQ6IDVweDsiPgotPGxlZ2VuZD48bDEwbj5MYXlvdXQ8L2wxMG4+PC9sZWdlbmQ+Ci0KLTxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KLQotPGRpdiBjbGFzcz0iZmwiPjxsMTBuPkFsaWdubWVudDo8L2wxMG4+PC9kaXY+Ci08c2VsZWN0IHNpemU9IjEiIG5hbWU9IltmX2FsaWduXSIgaWQ9IltmX2FsaWduXSIKLSAgdGl0bGU9Il8oUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSkiPgotICA8b3B0aW9uIHZhbHVlPSIiICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGwxMG4+Tm90IHNldDwvbDEwbj48L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0ibGVmdCIgICAgICAgICAgICAgICAgICAgICAgICAgPjxsMTBuPkxlZnQ8L2wxMG4+PC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9InJpZ2h0IiAgICAgICAgICAgICAgICAgICAgICAgID48bDEwbj5SaWdodDwvbDEwbj48L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0idGV4dHRvcCIgICAgICAgICAgICAgICAgICAgICAgPjxsMTBuPlRleHR0b3A8L2wxMG4+PC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9ImFic21pZGRsZSIgICAgICAgICAgICAgICAgICAgID48bDEwbj5BYnNtaWRkbGU8L2wxMG4+PC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9ImJhc2VsaW5lIiAgICAgICAgICAgICAgICAgICAgID48bDEwbj5CYXNlbGluZTwvbDEwbj48L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0iYWJzYm90dG9tIiAgICAgICAgICAgICAgICAgICAgPjxsMTBuPkFic2JvdHRvbTwvbDEwbj48L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0iYm90dG9tIiAgICAgICAgICAgICAgICAgICAgICAgPjxsMTBuPkJvdHRvbTwvbDEwbj48L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0ibWlkZGxlIiAgICAgICAgICAgICAgICAgICAgICAgPjxsMTBuPk1pZGRsZTwvbDEwbj48L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0idG9wIiAgICAgICAgICAgICAgICAgICAgICAgICAgPjxsMTBuPlRvcDwvbDEwbj48L29wdGlvbj4KLTwvc2VsZWN0PgotCi08YnIgLz4KLQotPGRpdiBjbGFzcz0iZmwiPjxsMTBuPkJvcmRlciB0aGlja25lc3M6PC9sMTBuPjwvZGl2PgotPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IltmX2JvcmRlcl0iIGlkPSJbZl9ib3JkZXJdIiBzaXplPSI1IgotdGl0bGU9Il8oTGVhdmUgZW1wdHkgZm9yIG5vIGJvcmRlcikiIC8+Ci0KLTxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KLQotPC9maWVsZHNldD4KLQotPGZpZWxkc2V0PgotPGxlZ2VuZD48bDEwbj5TcGFjaW5nPC9sMTBuPjwvbGVnZW5kPgotCi08ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImZyIj48bDEwbj5Ib3Jpem9udGFsOjwvbDEwbj48L2Rpdj4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbZl9ob3Jpel0iIGlkPSJbZl9ob3Jpel0iIHNpemU9IjUiCi10aXRsZT0iXyhIb3Jpem9udGFsIHBhZGRpbmcpIiAvPgotCi08YnIgLz4KLQotPGRpdiBjbGFzcz0iZnIiPjxsMTBuPlZlcnRpY2FsOjwvbDEwbj48L2Rpdj4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbZl92ZXJ0XSIgaWQ9IltmX3ZlcnRdIiBzaXplPSI1IgotdGl0bGU9Il8oVmVydGljYWwgcGFkZGluZykiIC8+Ci0KLTxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KLQotPC9maWVsZHNldD4KLTwvZm9ybT4KLTxkaXY+Ci08bDEwbj5JbWFnZSBQcmV2aWV3OjwvbDEwbj48YnIgLz4KLSAgICA8aWZyYW1lIGlkPSJbaXByZXZpZXddIiBmcmFtZWJvcmRlcj0iMCIgc3R5bGU9ImJvcmRlciA6IDFweCBzb2xpZCBncmF5OyIgCi0JaGVpZ2h0PSIyMDAiIHdpZHRoPSIxMDAlIiBzcmM9ImFib3V0OmJsYW5rIj48L2lmcmFtZT4KLTwvZGl2PgotCi08ZGl2IGNsYXNzPSJidXR0b25zIiBpZD0iW2J1dHRvbnNdIj4KLSAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9Iltva10iICAgICB2YWx1ZT0iXyhPSykiICAgICAvPgotICA8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iW2NhbmNlbF0iIHZhbHVlPSJfKENhbmNlbCkiIC8+Ci08L2Rpdj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9pbnNlcnRfaW1hZ2UuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydEltYWdlL2luc2VydF9pbWFnZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjQ3ZTRiLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydEltYWdlL2luc2VydF9pbWFnZS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLTwhRE9DVFlQRSBodG1sCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCi0gICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgotPGhlYWQ+Ci0gIDx0aXRsZT5JbnNlcnQgSW1hZ2U8L3RpdGxlPgotCi08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi9wb3B1cHMvcG9wdXAuanMiPjwvc2NyaXB0PgotPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vLi4vcG9wdXBzL3BvcHVwLmNzcyIgLz4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotCi0KLVhpbmhhID0gd2luZG93Lm9wZW5lci5YaW5oYTsKLWZ1bmN0aW9uIGkxOG4oc3RyKSB7Ci0gIHJldHVybiAoWGluaGEuX2xjKHN0ciwgJ1hpbmhhJykpOwotfQotCi1mdW5jdGlvbiBJbml0KCkgewotICBfX2RsZ190cmFuc2xhdGUoJ1hpbmhhJyk7Ci0gIF9fZGxnX2luaXQobnVsbCx7d2lkdGg6NDEwLGhlaWdodDo0MDB9KTsKLSAgLy8gTWFrZSBzdXJlIHRoZSB0cmFuc2xhdGVkIHN0cmluZyBhcHBlYXJzIGluIHRoZSBkcm9wIGRvd24uIChmb3IgZ2Vja28pCi0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2FsaWduIikuc2VsZWN0ZWRJbmRleCA9IDE7Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2FsaWduIikuc2VsZWN0ZWRJbmRleCA9IDU7Ci0gIHZhciBwYXJhbSA9IHdpbmRvdy5kaWFsb2dBcmd1bWVudHM7Ci0gIGlmIChwYXJhbVsiZl9iYXNlIl0pIHsKLSAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2Jhc2UiKS52YWx1ZSA9IHBhcmFtWyJmX2Jhc2UiXTsKLSAgfQotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl91cmwiKS52YWx1ZSAgICA9IHBhcmFtWyJmX3VybCJdID8gcGFyYW1bImZfdXJsIl0gOiAiIjsKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYWx0IikudmFsdWUgICAgPSBwYXJhbVsiZl9hbHQiXSA/IHBhcmFtWyJmX2FsdCJdIDogIiI7Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2JvcmRlciIpLnZhbHVlID0gKHR5cGVvZiBwYXJhbVsiZl9ib3JkZXIiXSE9InVuZGVmaW5lZCIpID8gcGFyYW1bImZfYm9yZGVyIl0gOiAiIjsKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfYWxpZ24iKS52YWx1ZSAgPSBwYXJhbVsiZl9hbGlnbiJdID8gcGFyYW1bImZfYWxpZ24iXSA6ICIiOwotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl92ZXJ0IikudmFsdWUgICA9ICh0eXBlb2YgcGFyYW1bImZfdmVydCJdIT0idW5kZWZpbmVkIikgPyBwYXJhbVsiZl92ZXJ0Il0gOiAiIjsKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfaG9yaXoiKS52YWx1ZSAgPSAodHlwZW9mIHBhcmFtWyJmX2hvcml6Il0hPSJ1bmRlZmluZWQiKSA/IHBhcmFtWyJmX2hvcml6Il0gOiAiIjsKLSAgaWYgKHBhcmFtWyJmX3VybCJdKSB7Ci0gICAgICB3aW5kb3cuaXByZXZpZXcubG9jYXRpb24ucmVwbGFjZShYaW5oYS5fcmVzb2x2ZVJlbGF0aXZlVXJsKHBhcmFtLmZfYmFzZSwgcGFyYW0uZl91cmwpKTsKLSAgfQotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl91cmwiKS5mb2N1cygpOwotfQotCi1mdW5jdGlvbiBvbk9LKCkgewotICB2YXIgcmVxdWlyZWQgPSB7Ci0gICAgImZfdXJsIjogaTE4bigiWW91IG11c3QgZW50ZXIgdGhlIFVSTCIpCi0gIH07Ci0gIGZvciAodmFyIGkgaW4gcmVxdWlyZWQpIHsKLSAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKTsKLSAgICBpZiAoIWVsLnZhbHVlKSB7Ci0gICAgICBhbGVydChyZXF1aXJlZFtpXSk7Ci0gICAgICBlbC5mb2N1cygpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotICAvLyBwYXNzIGRhdGEgYmFjayB0byB0aGUgY2FsbGluZyB3aW5kb3cKLSAgdmFyIGZpZWxkcyA9IFsiZl91cmwiLCAiZl9hbHQiLCAiZl9hbGlnbiIsICJmX2JvcmRlciIsCi0gICAgICAgICAgICAgICAgImZfaG9yaXoiLCAiZl92ZXJ0Il07Ci0gIHZhciBwYXJhbSA9IG5ldyBPYmplY3QoKTsKLSAgZm9yICh2YXIgaSBpbiBmaWVsZHMpIHsKLSAgICB2YXIgaWQgPSBmaWVsZHNbaV07Ci0gICAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwotICAgIHBhcmFtW2lkXSA9IGVsLnZhbHVlOwotICB9Ci0gIF9fZGxnX2Nsb3NlKHBhcmFtKTsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi1mdW5jdGlvbiBvbkNhbmNlbCgpIHsKLSAgX19kbGdfY2xvc2UobnVsbCk7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotZnVuY3Rpb24gb25QcmV2aWV3KCkgewotICB2YXIgZl91cmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl91cmwiKTsKLSAgdmFyIHVybCA9IGZfdXJsLnZhbHVlOwotICB2YXIgYmFzZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2Jhc2UiKS52YWx1ZTsKLSAgaWYgKCF1cmwpIHsKLSAgICBhbGVydChpMThuKCJZb3UgbXVzdCBlbnRlciB0aGUgVVJMIikpOwotICAgIGZfdXJsLmZvY3VzKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHdpbmRvdy5pcHJldmlldy5sb2NhdGlvbi5yZXBsYWNlKFhpbmhhLl9yZXNvbHZlUmVsYXRpdmVVcmwoYmFzZSwgdXJsKSk7Ci0gIHJldHVybiBmYWxzZTsKLX0KLTwvc2NyaXB0PgotCi08L2hlYWQ+Ci0KLTxib2R5IGNsYXNzPSJkaWFsb2ciIG9ubG9hZD0iSW5pdCgpIj4KLQotPGRpdiBjbGFzcz0idGl0bGUiPkluc2VydCBJbWFnZTwvZGl2PgotPCEtLS0gbmV3IHN0dWZmIC0tLT4KLTxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9ImdldCI+Ci08aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJiYXNlIiBpZD0iZl9iYXNlIi8+Ci08dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgc3R5bGU9InBhZGRpbmc6IDBweDsgbWFyZ2luOiAwcHgiPgotICA8dGJvZHk+Ci0KLSAgPHRyPgotICAgIDx0ZCBzdHlsZT0id2lkdGg6IDdlbTsgdGV4dC1hbGlnbjogcmlnaHQiPkltYWdlIFVSTDo8L3RkPgotICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idXJsIiBpZD0iZl91cmwiIHN0eWxlPSJ3aWR0aDo3NSUiCi0gICAgICB0aXRsZT0iRW50ZXIgdGhlIGltYWdlIFVSTCBoZXJlIiAvPgotICAgICAgPGJ1dHRvbiBuYW1lPSJwcmV2aWV3IiBvbmNsaWNrPSJyZXR1cm4gb25QcmV2aWV3KCk7IgotICAgICAgdGl0bGU9IlByZXZpZXcgdGhlIGltYWdlIGluIGEgbmV3IHdpbmRvdyI+UHJldmlldzwvYnV0dG9uPgotICAgIDwvdGQ+Ci0gIDwvdHI+Ci0gIDx0cj4KLSAgICA8dGQgc3R5bGU9IndpZHRoOiA3ZW07IHRleHQtYWxpZ246IHJpZ2h0Ij5BbHRlcm5hdGUgdGV4dDo8L3RkPgotICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYWx0IiBpZD0iZl9hbHQiIHN0eWxlPSJ3aWR0aDoxMDAlIgotICAgICAgdGl0bGU9IkZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgaW1hZ2VzIiAvPjwvdGQ+Ci0gIDwvdHI+Ci0KLSAgPC90Ym9keT4KLTwvdGFibGU+Ci0KLTxmaWVsZHNldCBzdHlsZT0iZmxvYXQ6IGxlZnQ7IG1hcmdpbi1sZWZ0OiA1cHg7Ij4KLTxsZWdlbmQ+TGF5b3V0PC9sZWdlbmQ+Ci0KLTxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KLQotPGRpdiBjbGFzcz0iZmwiPkFsaWdubWVudDo8L2Rpdj4KLTxzZWxlY3Qgc2l6ZT0iMSIgbmFtZT0iYWxpZ24iIGlkPSJmX2FsaWduIgotICB0aXRsZT0iUG9zaXRpb25pbmcgb2YgdGhpcyBpbWFnZSI+Ci0gIDxvcHRpb24gdmFsdWU9IiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5Ob3Qgc2V0PC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9ImxlZnQiICAgICAgICAgICAgICAgICAgICAgICAgID5MZWZ0PC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9InJpZ2h0IiAgICAgICAgICAgICAgICAgICAgICAgID5SaWdodDwvb3B0aW9uPgotICA8b3B0aW9uIHZhbHVlPSJ0ZXh0dG9wIiAgICAgICAgICAgICAgICAgICAgICA+VGV4dHRvcDwvb3B0aW9uPgotICA8b3B0aW9uIHZhbHVlPSJhYnNtaWRkbGUiICAgICAgICAgICAgICAgICAgICA+QWJzbWlkZGxlPC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9ImJhc2VsaW5lIiBzZWxlY3RlZD0ic2VsZWN0ZWQiID5CYXNlbGluZTwvb3B0aW9uPgotICA8b3B0aW9uIHZhbHVlPSJhYnNib3R0b20iICAgICAgICAgICAgICAgICAgICA+QWJzYm90dG9tPC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9ImJvdHRvbSIgICAgICAgICAgICAgICAgICAgICAgID5Cb3R0b208L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0ibWlkZGxlIiAgICAgICAgICAgICAgICAgICAgICAgPk1pZGRsZTwvb3B0aW9uPgotICA8b3B0aW9uIHZhbHVlPSJ0b3AiICAgICAgICAgICAgICAgICAgICAgICAgICA+VG9wPC9vcHRpb24+Ci08L3NlbGVjdD4KLQotPGJyIC8+Ci0KLTxkaXYgY2xhc3M9ImZsIj5Cb3JkZXIgdGhpY2tuZXNzOjwvZGl2PgotPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImJvcmRlciIgaWQ9ImZfYm9yZGVyIiBzaXplPSI1IgotdGl0bGU9IkxlYXZlIGVtcHR5IGZvciBubyBib3JkZXIiIC8+Ci0KLTxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KLQotPC9maWVsZHNldD4KLQotPGZpZWxkc2V0PgotPGxlZ2VuZD5TcGFjaW5nPC9sZWdlbmQ+Ci0KLTxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KLQotPGRpdiBjbGFzcz0iZnIiPkhvcml6b250YWw6PC9kaXY+Ci08aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaG9yaXoiIGlkPSJmX2hvcml6IiBzaXplPSI1IgotdGl0bGU9Ikhvcml6b250YWwgcGFkZGluZyIgLz4KLQotPGJyIC8+Ci0KLTxkaXYgY2xhc3M9ImZyIj5WZXJ0aWNhbDo8L2Rpdj4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ2ZXJ0IiBpZD0iZl92ZXJ0IiBzaXplPSI1IgotdGl0bGU9IlZlcnRpY2FsIHBhZGRpbmciIC8+Ci0KLTxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KLQotPC9maWVsZHNldD4KLTxkaXYgY2xhc3M9InNwYWNlIiBzdHlsZT0iY2xlYXI6YWxsIj48L2Rpdj4KLTxkaXY+Ci1JbWFnZSBQcmV2aWV3OjxiciAvPgotICAgIDxpZnJhbWUgbmFtZT0iaXByZXZpZXciIGlkPSJpcHJldmlldyIgZnJhbWVib3JkZXI9IjAiIHN0eWxlPSJib3JkZXIgOiAxcHggc29saWQgZ3JheTsiIAotCWhlaWdodD0iMjAwIiB3aWR0aD0iMTAwJSIgc3JjPSIuLi8uLi9wb3B1cHMvYmxhbmsuaHRtbCI+PC9pZnJhbWU+Ci08L2Rpdj4KLTxkaXYgaWQ9ImJ1dHRvbnMiPgotPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIG5hbWU9Im9rIiBvbmNsaWNrPSJyZXR1cm4gb25PSygpOyI+T0s8L2J1dHRvbj4KLTxidXR0b24gdHlwZT0iYnV0dG9uIiBuYW1lPSJjYW5jZWwiIG9uY2xpY2s9InJldHVybiBvbkNhbmNlbCgpOyI+Q2FuY2VsPC9idXR0b24+Ci08L2Rpdj4KLTwvZm9ybT4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9pbnNlcnRfaW1hZ2UuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9pbnNlcnRfaW1hZ2UuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNTIyNWMuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0SW1hZ2UvaW5zZXJ0X2ltYWdlLmpzCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvSW5zZXJ0SW1hZ2UvaW5zZXJ0X2ltYWdlLmpzICovCi1JbnNlcnRJbWFnZS5fcGx1Z2luSW5mbz17bmFtZToiSW5zZXJ0SW1hZ2UiLG9yaWdpbjoiWGluaGEgQ29yZSIsdmVyc2lvbjoiJExhc3RDaGFuZ2VkUmV2aXNpb246IDEyMzkgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCIkMSIpLGRldmVsb3BlcjoiVGhlIFhpbmhhIENvcmUgRGV2ZWxvcGVyIFRlYW0iLGRldmVsb3Blcl91cmw6IiRIZWFkVVJMOiBodHRwOi8vc3ZuLnhpbmhhLm9yZy90YWdzLzAuOTYuMS9tb2R1bGVzL0luc2VydEltYWdlL2luc2VydF9pbWFnZS5qcyAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sIiQxIiksc3BvbnNvcjoiIixzcG9uc29yX3VybDoiIixsaWNlbnNlOiJodG1sQXJlYSJ9OwotZnVuY3Rpb24gSW5zZXJ0SW1hZ2UoXzEpewotdGhpcy5lZGl0b3I9XzE7Ci12YXIgXzI9XzEuY29uZmlnOwotdmFyIF8zPXRoaXM7Ci1pZih0eXBlb2YgXzEuX2luc2VydEltYWdlPT0idW5kZWZpbmVkIil7Ci1fMS5faW5zZXJ0SW1hZ2U9ZnVuY3Rpb24oKXsKLV8zLnNob3coKTsKLX07Ci19Ci19OwotSW5zZXJ0SW1hZ2UucHJvdG90eXBlLl9sYz1mdW5jdGlvbihfNCl7Ci1yZXR1cm4gWGluaGEuX2xjKF80LCJYaW5oYSIpOwotfTsKLUluc2VydEltYWdlLnByb3RvdHlwZS5vbkdlbmVyYXRlT25jZT1mdW5jdGlvbigpewotSW5zZXJ0SW1hZ2UubG9hZEFzc2V0cygpOwotfTsKLUluc2VydEltYWdlLmxvYWRBc3NldHM9ZnVuY3Rpb24oKXsKLXZhciBfNT1JbnNlcnRJbWFnZTsKLWlmKF81LmxvYWRpbmcpewotcmV0dXJuOwotfQotXzUubG9hZGluZz10cnVlOwotWGluaGEuX2dldGJhY2soX2VkaXRvcl91cmwrIm1vZHVsZXMvSW5zZXJ0SW1hZ2UvZGlhbG9nLmh0bWwiLGZ1bmN0aW9uKF82KXsKLV81Lmh0bWw9XzY7Ci1fNS5kaWFsb2dSZWFkeT10cnVlOwotfSk7Ci1YaW5oYS5fZ2V0YmFjayhfZWRpdG9yX3VybCsibW9kdWxlcy9JbnNlcnRJbWFnZS9wbHVnaW5NZXRob2RzLmpzIixmdW5jdGlvbihfNyl7Ci1ldmFsKF83KTsKLV81Lm1ldGhvZHNSZWFkeT10cnVlOwotfSk7Ci19OwotSW5zZXJ0SW1hZ2UucHJvdG90eXBlLm9uVXBkYXRlVG9vbGJhcj1mdW5jdGlvbigpewotaWYoIShJbnNlcnRJbWFnZS5kaWFsb2dSZWFkeSYmSW5zZXJ0SW1hZ2UubWV0aG9kc1JlYWR5KSl7Ci10aGlzLmVkaXRvci5fdG9vbGJhck9iamVjdHMuaW5zZXJ0aW1hZ2Uuc3RhdGUoImVuYWJsZWQiLGZhbHNlKTsKLX1lbHNlewotdGhpcy5vblVwZGF0ZVRvb2xiYXI9bnVsbDsKLX0KLX07Ci1JbnNlcnRJbWFnZS5wcm90b3R5cGUucHJlcGFyZURpYWxvZz1mdW5jdGlvbigpewotdmFyIF84PXRoaXM7Ci12YXIgXzk9dGhpcy5lZGl0b3I7Ci12YXIgX2E9dGhpcy5kaWFsb2c9bmV3IFhpbmhhLkRpYWxvZyhfOSxJbnNlcnRJbWFnZS5odG1sLCJYaW5oYSIse3dpZHRoOjQxMH0pOwotX2EuZ2V0RWxlbWVudEJ5SWQoIm9rIikub25jbGljaz1mdW5jdGlvbigpewotXzguYXBwbHkoKTsKLX07Ci1fYS5nZXRFbGVtZW50QnlJZCgiY2FuY2VsIikub25jbGljaz1mdW5jdGlvbigpewotXzguZGlhbG9nLmhpZGUoKTsKLX07Ci1fYS5nZXRFbGVtZW50QnlJZCgicHJldmlldyIpLm9uY2xpY2s9ZnVuY3Rpb24oKXsKLXZhciBfYj1fYS5nZXRFbGVtZW50QnlJZCgiZl91cmwiKTsKLXZhciBfYz1fYi52YWx1ZTsKLWlmKCFfYyl7Ci1hbGVydChfYS5fbGMoIllvdSBtdXN0IGVudGVyIHRoZSBVUkwiKSk7Ci1fYi5mb2N1cygpOwotcmV0dXJuIGZhbHNlOwotfQotX2EuZ2V0RWxlbWVudEJ5SWQoImlwcmV2aWV3Iikuc3JjPV9jOwotcmV0dXJuIGZhbHNlOwotfTsKLXRoaXMuZGlhbG9nLm9ucmVzaXplPWZ1bmN0aW9uKCl7Ci12YXIgX2Q9cGFyc2VJbnQodGhpcy5oZWlnaHQsMTApLXRoaXMuZ2V0RWxlbWVudEJ5SWQoImgxIikub2Zmc2V0SGVpZ2h0LXRoaXMuZ2V0RWxlbWVudEJ5SWQoImJ1dHRvbnMiKS5vZmZzZXRIZWlnaHQtdGhpcy5nZXRFbGVtZW50QnlJZCgiaW5wdXRzIikub2Zmc2V0SGVpZ2h0LXBhcnNlSW50KHRoaXMucm9vdEVsZW0uc3R5bGUucGFkZGluZ0JvdHRvbSwxMCk7Ci10aGlzLmdldEVsZW1lbnRCeUlkKCJpcHJldmlldyIpLnN0eWxlLmhlaWdodD0oKF9kPjApP19kOjApKyJweCI7Ci10aGlzLmdldEVsZW1lbnRCeUlkKCJpcHJldmlldyIpLnN0eWxlLndpZHRoPXRoaXMud2lkdGgtMisicHgiOwotfTsKLXRoaXMuZGlhbG9nUmVhZHk9dHJ1ZTsKLX07Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydEltYWdlL3BsdWdpbk1ldGhvZHMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9JbnNlcnRJbWFnZS9wbHVnaW5NZXRob2RzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGIyZjdkLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydEltYWdlL3BsdWdpbk1ldGhvZHMuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvSW5zZXJ0SW1hZ2UvcGx1Z2luTWV0aG9kcy5qcyAqLwotSW5zZXJ0SW1hZ2UucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oXzEpewotaWYoIXRoaXMuZGlhbG9nKXsKLXRoaXMucHJlcGFyZURpYWxvZygpOwotfQotdmFyIF8yPXRoaXMuZWRpdG9yOwotaWYodHlwZW9mIF8xPT0idW5kZWZpbmVkIil7Ci1fMT1fMi5nZXRQYXJlbnRFbGVtZW50KCk7Ci1pZihfMSYmXzEudGFnTmFtZS50b0xvd2VyQ2FzZSgpIT0iaW1nIil7Ci1fMT1udWxsOwotfQotfQotaWYoXzEpewotZnVuY3Rpb24gZ2V0U3BlY2lmaWVkQXR0cmlidXRlKF8zLF80KXsKLXZhciBhPV8zLmF0dHJpYnV0ZXM7Ci1mb3IodmFyIGk9MDtpPGEubGVuZ3RoO2krKyl7Ci1pZihhW2ldLm5vZGVOYW1lPT1fNCYmYVtpXS5zcGVjaWZpZWQpewotcmV0dXJuIGFbaV0udmFsdWU7Ci19Ci19Ci1yZXR1cm4gIiI7Ci19Owotb3V0cGFyYW09e2ZfdXJsOl8yLnN0cmlwQmFzZVVSTChfMS5nZXRBdHRyaWJ1dGUoInNyYyIsMikpLGZfYWx0Ol8xLmFsdCxmX2JvcmRlcjpfMS5ib3JkZXIsZl9hbGlnbjpfMS5hbGlnbixmX3ZlcnQ6Z2V0U3BlY2lmaWVkQXR0cmlidXRlKF8xLCJ2c3BhY2UiKSxmX2hvcml6OmdldFNwZWNpZmllZEF0dHJpYnV0ZShfMSwiaHNwYWNlIiksZl93aWR0aDpfMS53aWR0aCxmX2hlaWdodDpfMS5oZWlnaHR9OwotfWVsc2V7Ci1vdXRwYXJhbT17Zl91cmw6IiIsZl9hbHQ6IiIsZl9ib3JkZXI6IiIsZl9hbGlnbjoiIixmX3ZlcnQ6IiIsZl9ob3JpejoiIixmX3dpZHRoOiIiLGZfaGVpZ2h0OiIifTsKLX0KLXRoaXMuaW1hZ2U9XzE7Ci10aGlzLmRpYWxvZy5zaG93KG91dHBhcmFtKTsKLX07Ci1JbnNlcnRJbWFnZS5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXsKLXZhciBfNz10aGlzLmRpYWxvZy5oaWRlKCk7Ci1pZighXzcuZl91cmwpewotcmV0dXJuOwotfQotdmFyIF84PXRoaXMuZWRpdG9yOwotdmFyIF85PXRoaXMuaW1hZ2U7Ci1pZighXzkpewotaWYoWGluaGEuaXNfaWUpewotdmFyIF9hPV84LmdldFNlbGVjdGlvbigpOwotdmFyIF9iPV84LmNyZWF0ZVJhbmdlKF9hKTsKLV84Ll9kb2MuZXhlY0NvbW1hbmQoImluc2VydGltYWdlIixmYWxzZSxfNy5mX3VybCk7Ci1fOT1fYi5wYXJlbnRFbGVtZW50KCk7Ci1pZihfOS50YWdOYW1lLnRvTG93ZXJDYXNlKCkhPSJpbWciKXsKLV85PV85LnByZXZpb3VzU2libGluZzsKLX0KLX1lbHNlewotXzk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7Ci1fOS5zcmM9XzcuZl91cmw7Ci1fOC5pbnNlcnROb2RlQXRTZWxlY3Rpb24oXzkpOwotaWYoIV85LnRhZ05hbWUpewotXzk9X2Iuc3RhcnRDb250YWluZXIuZmlyc3RDaGlsZDsKLX0KLX0KLX1lbHNlewotXzkuc3JjPV83LmZfdXJsOwotfQotZm9yKHZhciBfYyBpbiBfNyl7Ci12YXIgX2Q9XzdbX2NdOwotc3dpdGNoKF9jKXsKLWNhc2UgImZfYWx0IjoKLWlmKF9kKXsKLV85LmFsdD1fZDsKLX1lbHNlewotXzkucmVtb3ZlQXR0cmlidXRlKCJhbHQiKTsKLX0KLWJyZWFrOwotY2FzZSAiZl9ib3JkZXIiOgotaWYoX2QpewotXzkuYm9yZGVyPXBhcnNlSW50KF9kfHwiMCIpOwotfWVsc2V7Ci1fOS5yZW1vdmVBdHRyaWJ1dGUoImJvcmRlciIpOwotfQotYnJlYWs7Ci1jYXNlICJmX2FsaWduIjoKLWlmKF9kLnZhbHVlKXsKLV85LmFsaWduPV9kLnZhbHVlOwotfWVsc2V7Ci1fOS5yZW1vdmVBdHRyaWJ1dGUoImFsaWduIik7Ci19Ci1icmVhazsKLWNhc2UgImZfdmVydCI6Ci1pZihfZCE9IiIpewotXzkudnNwYWNlPXBhcnNlSW50KF9kfHwiMCIpOwotfWVsc2V7Ci1fOS5yZW1vdmVBdHRyaWJ1dGUoInZzcGFjZSIpOwotfQotYnJlYWs7Ci1jYXNlICJmX2hvcml6IjoKLWlmKF9kIT0iIil7Ci1fOS5oc3BhY2U9cGFyc2VJbnQoX2R8fCIwIik7Ci19ZWxzZXsKLV85LnJlbW92ZUF0dHJpYnV0ZSgiaHNwYWNlIik7Ci19Ci1icmVhazsKLWNhc2UgImZfd2lkdGgiOgotaWYoX2QpewotXzkud2lkdGg9cGFyc2VJbnQoX2R8fCIwIik7Ci19ZWxzZXsKLV85LnJlbW92ZUF0dHJpYnV0ZSgid2lkdGgiKTsKLX0KLWJyZWFrOwotY2FzZSAiZl9oZWlnaHQiOgotaWYoX2QpewotXzkuaGVpZ2h0PXBhcnNlSW50KF9kfHwiMCIpOwotfWVsc2V7Ci1fOS5yZW1vdmVBdHRyaWJ1dGUoImhlaWdodCIpOwotfQotYnJlYWs7Ci19Ci19Ci19OwotCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9kaWFsb2cuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydFRhYmxlL2RpYWxvZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTc0NTZhLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydFRhYmxlL2RpYWxvZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAwICswLDAgQEAKLTxoMSBpZD0iW2gxXSI+PGwxMG4+SW5zZXJ0IFRhYmxlPC9sMTBuPjwvaDE+DQotPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0iZ2V0IiBzdHlsZT0ibWFyZ2luLXRvcDoxMHB4Ij4NCi08ZGl2IGlkPSJbY29sdW1uc19hbGVydF0iIHN0eWxlPSJjb2xvcjpyZWQ7ZGlzcGxheTpub25lIj48bDEwbj5Zb3UgbXVzdCBlbnRlciBhIG51bWJlciBvZiBjb2x1bW5zPC9sMTBuPjwvZGl2Pg0KLTxkaXYgaWQ9Iltyb3dzX2FsZXJ0XSIgc3R5bGU9ImNvbG9yOnJlZDtkaXNwbGF5Om5vbmUiPjxsMTBuPllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3M8L2wxMG4+PC9kaXY+DQotDQotPHRhYmxlIGJvcmRlcj0iMCIgc3R5bGU9InBhZGRpbmc6IDBweDsgbWFyZ2luOiAwcHgiPg0KLSAgPHRib2R5Pg0KLSAgPHRyPg0KLSAgPHRkPg0KLSAgICA8bDEwbj5DYXB0aW9uPC9sMTBuPjoNCi0gIDwvdGQ+ICANCi0gIDx0ZCBjb2xzcGFuPSI0Ij4NCi0gICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IltjYXB0aW9uXSIgaWQ9IltjYXB0aW9uXSIgc3R5bGU9IndpZHRoOjkwJSIgdGl0bGU9Il8oQ2FwdGlvbiBmb3IgdGhlIHRhYmxlKSIgLz4NCi0gIDwvdGQ+DQotICA8L3RyPg0KLSAgPHRyPg0KLSAgICA8dGQgc3R5bGU9IndpZHRoOiA0ZW07IHRleHQtYWxpZ246IHJpZ2h0Ij48bDEwbj5Sb3dzOjwvbDEwbj48L3RkPg0KLSAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Iltyb3dzXSIgaWQ9Iltyb3dzXSIgc2l6ZT0iNSIgdGl0bGU9Il8oTnVtYmVyIG9mIHJvd3MpIiAgLz48L3RkPg0KLSAgICA8dGQgc3R5bGU9IndpZHRoOiA0ZW07IHRleHQtYWxpZ246IHJpZ2h0Ij5XaWR0aDo8L3RkPg0KLSAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ilt3aWR0aF0iIGlkPSJbd2lkdGhdIiBzaXplPSI1IiB0aXRsZT0iXyhXaWR0aCBvZiB0aGUgdGFibGUpIiAvPjwvdGQ+DQotICAgIDx0ZD48c2VsZWN0IHNpemU9IjEiIG5hbWU9Ilt1bml0XSIgaWQ9Ilt1bml0XSIgdGl0bGU9IldpZHRoIHVuaXQiPg0KLSAgICAgIDxvcHRpb24gdmFsdWU9IiUiICAgICAgICAgICAgICAgPjxsMTBuPlBlcmNlbnQ8L2wxMG4+PC9vcHRpb24+DQotICAgICAgPG9wdGlvbiB2YWx1ZT0icHgiICAgICAgICAgICAgICA+PGwxMG4+UGl4ZWxzPC9sMTBuPjwvb3B0aW9uPg0KLSAgICAgIDxvcHRpb24gdmFsdWU9ImVtIiAgICAgICAgICAgICAgPkVtPC9vcHRpb24+DQotICAgIDwvc2VsZWN0PjwvdGQ+DQotICA8L3RyPg0KLSAgPHRyPg0KLSAgICA8dGQgc3R5bGU9IndpZHRoOiA0ZW07IHRleHQtYWxpZ246IHJpZ2h0Ij5Db2xzOjwvdGQ+DQotICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iW2NvbHNdIiBpZD0iW2NvbHNdIiBzaXplPSI1IiB0aXRsZT0iXyhOdW1iZXIgb2YgY29sdW1ucykiICAvPjwvdGQ+DQotICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iW2ZpeGVkXSIgaWQ9IltmaXhlZF0iIHZhbHVlPSJvbiIgLz48L3RkPg0KLSAgICA8dGQgY29sc3Bhbj0iMiI+PGxhYmVsDQotICAgID48bDEwbj5GaXhlZCB3aWR0aCBjb2x1bW5zPC9sMTBuPjwvbGFiZWw+PC90ZD4NCi0gIDwvdHI+DQotICA8L3Rib2R5Pg0KLTwvdGFibGU+DQotDQotPGJyIC8+DQotDQotPGZpZWxkc2V0IGlkPSJbbGF5b3V0X2ZpZWxkc2V0XSIgc3R5bGU9ImZsb2F0OiBsZWZ0OyBtYXJnaW4tbGVmdDogMTBweDsiPg0KLTxsZWdlbmQ+PGwxMG4+TGF5b3U8L2wxMG4+dDwvbGVnZW5kPg0KLQ0KLTxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4NCi0NCi08ZGl2IGNsYXNzPSJmbCI+PGwxMG4+QWxpZ25tZW50OjwvbDEwbj48L2Rpdj4NCi08c2VsZWN0IHNpemU9IjEiIG5hbWU9IlthbGlnbl0iIGlkPSJbYWxpZ25dIg0KLSAgdGl0bGU9IlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiPg0KLSAgPG9wdGlvbiB2YWx1ZT0iIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxsMTBuPk5vdCBzZXQ8L2wxMG4+PC9vcHRpb24+DQotICA8b3B0aW9uIHZhbHVlPSJsZWZ0IiAgICAgICAgICAgICAgICAgICAgICAgICA+PGwxMG4+TGVmdDwvbDEwbj48L29wdGlvbj4NCi0gIDxvcHRpb24gdmFsdWU9InJpZ2h0IiAgICAgICAgICAgICAgICAgICAgICAgID48bDEwbj5SaWdodDwvbDEwbj48L29wdGlvbj4NCi0gIDxvcHRpb24gdmFsdWU9InRleHR0b3AiICAgICAgICAgICAgICAgICAgICAgID48bDEwbj5UZXh0dG9wPC9sMTBuPjwvb3B0aW9uPg0KLSAgPG9wdGlvbiB2YWx1ZT0iYWJzbWlkZGxlIiAgICAgICAgICAgICAgICAgICAgPjxsMTBuPkFic21pZGRsZTwvbDEwbj48L29wdGlvbj4NCi0gIDxvcHRpb24gdmFsdWU9ImJhc2VsaW5lIiAgICAgICAgICAgICAgICAgICAgID48bDEwbj5CYXNlbGluZTwvbDEwbj48L29wdGlvbj4NCi0gIDxvcHRpb24gdmFsdWU9ImFic2JvdHRvbSIgICAgICAgICAgICAgICAgICAgID48bDEwbj5BYnNib3R0b208L2wxMG4+PC9vcHRpb24+DQotICA8b3B0aW9uIHZhbHVlPSJib3R0b20iICAgICAgICAgICAgICAgICAgICAgICA+PGwxMG4+Qm90dG9tPC9sMTBuPjwvb3B0aW9uPg0KLSAgPG9wdGlvbiB2YWx1ZT0ibWlkZGxlIiAgICAgICAgICAgICAgICAgICAgICAgPjxsMTBuPk1pZGRsZTwvb3B0aW9uPg0KLSAgPG9wdGlvbiB2YWx1ZT0idG9wIiAgICAgICAgICAgICAgICAgICAgICAgICAgPjxsMTBuPlRvcDwvbDEwbj48L29wdGlvbj4NCi08L3NlbGVjdD4NCi0NCi08YnIgLz4NCi0NCi08ZGl2IGNsYXNzPSJmbCI+PGwxMG4+Qm9yZGVyPC9sMTBuPjwvZGl2Pg0KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbYm9yZGVyXSIgaWQ9Iltib3JkZXJdIiBzaXplPSIyIiB0aXRsZT0iXyhMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyKSIgLz4gPGwxMG4+UGl4ZWxzPC9sMTBuPg0KLTxzZWxlY3Qgc2l6ZT0iMSIgbmFtZT0iW2JvcmRlcl9zdHlsZV0iIGlkPSJbYm9yZGVyX3N0eWxlXSIgdGl0bGU9Il8oU3R5bGUgb2YgdGhlIGJvcmRlcikiPg0KLSAgPG9wdGlvbiB2YWx1ZT0ic29saWQiICAgPlNvbGlkPC9vcHRpb24+DQotICA8b3B0aW9uIHZhbHVlPSJkb3R0ZWQiICA+RG90dGVkPC9vcHRpb24+DQotICA8b3B0aW9uIHZhbHVlPSJkYXNoZWQiICA+RGFzaGVkPC9vcHRpb24+DQotICA8b3B0aW9uIHZhbHVlPSJkb3VibGUiICA+RG91YmxlPC9vcHRpb24+DQotICA8b3B0aW9uIHZhbHVlPSJncm9vdmUiICA+R3Jvb3ZlPC9vcHRpb24+DQotICA8b3B0aW9uIHZhbHVlPSJyaWRnZSIgICA+UmlkZ2U8L29wdGlvbj4NCi0gIDxvcHRpb24gdmFsdWU9Imluc2V0IiAgID5JbnNldDwvb3B0aW9uPg0KLSAgPG9wdGlvbiB2YWx1ZT0ib3V0c2V0IiAgPm91dHNldDwvb3B0aW9uPg0KLTwvc2VsZWN0Pg0KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI3IiBpZD0iW2JvcmRlcl9jb2xvcl0iIG5hbWU9Iltib3JkZXJfY29sb3JdIi8+DQotPGJyIC8+PGwxMG4+Q29sbGFwc2UgYm9yZGVyczo8L2wxMG4+IA0KLTxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iW2JvcmRlcl9jb2xsYXBzZV0iIGlkPSJbYm9yZGVyX2NvbGxhcHNlXSIgdmFsdWU9Im9uIiAvPg0KLQ0KLTxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4NCi0NCi08L2ZpZWxkc2V0Pg0KLQ0KLTxmaWVsZHNldCAgaWQ9IltzcGFjaW5nX2ZpZWxkc2V0XSI+DQotPGxlZ2VuZD48bDEwbj5TcGFjaW5nPC9sMTBuPjwvbGVnZW5kPg0KLQ0KLTxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4NCi0NCi08ZGl2IGNsYXNzPSJmciI+PGwxMG4+Q2VsbCBzcGFjaW5nOjwvbDEwbj48L2Rpdj4NCi08aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iW3NwYWNpbmddIiBpZD0iW3NwYWNpbmddIiBzaXplPSI1IiB0aXRsZT0iXyhTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzKSIgLz4NCi0NCi08YnIgLz4NCi0NCi08ZGl2IGNsYXNzPSJmciI+PGwxMG4+Q2VsbCBwYWRkaW5nOjwvbDEwbj48L2Rpdj4NCi08aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iW3BhZGRpbmddIiBpZD0iW3BhZGRpbmddIiBzaXplPSI1IiB0aXRsZT0iXyhTcGFjZSBiZXR3ZWVuIGNvbnRlbnQgYW5kIGJvcmRlciBpbiBjZWxsKSIgLz4NCi0NCi0NCi08L2ZpZWxkc2V0Pg0KLSAgPGRpdiBjbGFzcz0iYnV0dG9ucyIgc3R5bGU9ImNsZWFyOmxlZnQiPg0KLSAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9Iltva10iICAgICB2YWx1ZT0iXyhPSykiICAgICAvPg0KLSAgPGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9IltjYW5jZWxdIiB2YWx1ZT0iXyhDYW5jZWwpIiAvPg0KLSAgPC9kaXY+DQotPC9mb3JtPg0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydFRhYmxlL2luc2VydF90YWJsZS5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0VGFibGUvaW5zZXJ0X3RhYmxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzYWFiOGQuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0VGFibGUvaW5zZXJ0X3RhYmxlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotPGh0bWw+Ci0KLTxoZWFkPgotICA8dGl0bGU+SW5zZXJ0IFRhYmxlPC90aXRsZT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vLi4vcG9wdXBzL3BvcHVwLmpzIj48L3NjcmlwdD4KLTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uLy4uL3BvcHVwcy9wb3B1cC5jc3MiIC8+Ci0KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KLQotd2luZG93LnJlc2l6ZVRvKDQyNSwgMjUwKTsKLQotWGluaGEgPSB3aW5kb3cub3BlbmVyLlhpbmhhOwotZnVuY3Rpb24gaTE4bihzdHIpIHsKLSAgcmV0dXJuIChYaW5oYS5fbGMoc3RyLCAnWGluaGEnKSk7Ci19Ci0KLWZ1bmN0aW9uIEluaXQoKSB7Ci0gIFhpbmhhID0gd2luZG93Lm9wZW5lci5YaW5oYTsgLy8gbG9hZCB0aGUgWGluaGEgcGx1Z2luIGFuZCBsYW5nIGZpbGUKLSAgX19kbGdfdHJhbnNsYXRlKCdYaW5oYScpOwotICBfX2RsZ19pbml0KG51bGwsIFhpbmhhLmlzX2llID8gbnVsbCA6IHt3aWR0aDo0MjUsaGVpZ2h0OjI1MH0pOwotICAvLyBNYWtlIHN1cmUgdGhlIHRyYW5zbGF0ZWQgc3RyaW5nIGFwcGVhcnMgaW4gdGhlIGRyb3AgZG93bi4gKGZvciBnZWNrbykKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZfdW5pdCIpLnNlbGVjdGVkSW5kZXggPSAxOwotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZl91bml0Iikuc2VsZWN0ZWRJbmRleCA9IDA7Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2FsaWduIikuc2VsZWN0ZWRJbmRleCA9IDE7Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX2FsaWduIikuc2VsZWN0ZWRJbmRleCA9IDA7Ci0gIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmX3Jvd3MiKS5mb2N1cygpOwotfQotCi1mdW5jdGlvbiBvbk9LKCkgewotICB2YXIgcmVxdWlyZWQgPSB7Ci0gICAgImZfcm93cyI6IGkxOG4oIllvdSBtdXN0IGVudGVyIGEgbnVtYmVyIG9mIHJvd3MiKSwKLSAgICAiZl9jb2xzIjogaTE4bigiWW91IG11c3QgZW50ZXIgYSBudW1iZXIgb2YgY29sdW1ucyIpCi0gIH07Ci0gIGZvciAodmFyIGkgaW4gcmVxdWlyZWQpIHsKLSAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpKTsKLSAgICBpZiAoIWVsLnZhbHVlKSB7Ci0gICAgICBhbGVydChyZXF1aXJlZFtpXSk7Ci0gICAgICBlbC5mb2N1cygpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotICB2YXIgZmllbGRzID0gWyJmX3Jvd3MiLCAiZl9jb2xzIiwgImZfd2lkdGgiLCAiZl91bml0IiwgImZfZml4ZWQiLAotICAgICAgICAgICAgICAgICJmX2FsaWduIiwgImZfYm9yZGVyIiwgImZfc3BhY2luZyIsICJmX3BhZGRpbmciXTsKLSAgdmFyIHBhcmFtID0gbmV3IE9iamVjdCgpOwotICBmb3IgKHZhciBpIGluIGZpZWxkcykgewotICAgIHZhciBpZCA9IGZpZWxkc1tpXTsKLSAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Ci0gICAgcGFyYW1baWRdID0gKGVsLnR5cGUgPT0gImNoZWNrYm94IikgPyBlbC5jaGVja2VkIDogZWwudmFsdWU7Ci0gIH0KLSAgX19kbGdfY2xvc2UocGFyYW0pOwotICByZXR1cm4gZmFsc2U7Ci19Ci0KLWZ1bmN0aW9uIG9uQ2FuY2VsKCkgewotICBfX2RsZ19jbG9zZShudWxsKTsKLSAgcmV0dXJuIGZhbHNlOwotfQotCi08L3NjcmlwdD4KLQotPC9oZWFkPgotCi08Ym9keSBjbGFzcz0iZGlhbG9nIiBvbmxvYWQ9IkluaXQoKSI+Ci0KLTxkaXYgY2xhc3M9InRpdGxlIj5JbnNlcnQgVGFibGU8L2Rpdj4KLQotPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0iZ2V0Ij4KLTx0YWJsZSBib3JkZXI9IjAiIHN0eWxlPSJwYWRkaW5nOiAwcHg7IG1hcmdpbjogMHB4Ij4KLSAgPHRib2R5PgotCi0gIDx0cj4KLSAgICA8dGQgc3R5bGU9IndpZHRoOiA0ZW07IHRleHQtYWxpZ246IHJpZ2h0Ij5Sb3dzOjwvdGQ+Ci0gICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJyb3dzIiBpZD0iZl9yb3dzIiBzaXplPSI1IiB0aXRsZT0iTnVtYmVyIG9mIHJvd3MiIHZhbHVlPSIyIiAvPjwvdGQ+Ci0gICAgPHRkIHN0eWxlPSJ3aWR0aDogNGVtOyB0ZXh0LWFsaWduOiByaWdodCI+V2lkdGg6PC90ZD4KLSAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9IndpZHRoIiBpZD0iZl93aWR0aCIgc2l6ZT0iNSIgdGl0bGU9IldpZHRoIG9mIHRoZSB0YWJsZSIgdmFsdWU9IjEwMCIgLz48L3RkPgotICAgIDx0ZD48c2VsZWN0IHNpemU9IjEiIG5hbWU9InVuaXQiIGlkPSJmX3VuaXQiIHRpdGxlPSJXaWR0aCB1bml0Ij4KLSAgICAgIDxvcHRpb24gdmFsdWU9IiUiIHNlbGVjdGVkPSJzZWxlY3RlZCIgID5QZXJjZW50PC9vcHRpb24+Ci0gICAgICA8b3B0aW9uIHZhbHVlPSJweCIgICAgICAgICAgICAgID5QaXhlbHM8L29wdGlvbj4KLSAgICAgIDxvcHRpb24gdmFsdWU9ImVtIiAgICAgICAgICAgICAgPkVtPC9vcHRpb24+Ci0gICAgPC9zZWxlY3Q+PC90ZD4KLSAgPC90cj4KLSAgPHRyPgotICAgIDx0ZCBzdHlsZT0id2lkdGg6IDRlbTsgdGV4dC1hbGlnbjogcmlnaHQiPkNvbHM6PC90ZD4KLSAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNvbHMiIGlkPSJmX2NvbHMiIHNpemU9IjUiIHRpdGxlPSJOdW1iZXIgb2YgY29sdW1ucyIgdmFsdWU9IjQiIC8+PC90ZD4KLSAgICA8dGQgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0Ij48aW5wdXQgdHlwZT0iY2hlY2tib3giIGNoZWNrZWQ9ImNoZWNrZWQiIG5hbWU9ImZpeGVkIiBpZD0iZl9maXhlZCIgdmFsdWU9Im9uIiAvPjwvdGQ+Ci0gICAgPHRkIGNvbHNwYW49IjIiPjxsYWJlbCBmb3I9ImZfZml4ZWQiCi0gICAgPkZpeGVkIHdpZHRoIGNvbHVtbnM8L2xhYmVsPjwvdGQ+Ci0gIDwvdHI+Ci0gIDwvdGJvZHk+Ci08L3RhYmxlPgotCi08cCAvPgotCi08ZmllbGRzZXQgc3R5bGU9ImZsb2F0OiBsZWZ0OyBtYXJnaW4tbGVmdDogNXB4OyI+Ci08bGVnZW5kPkxheW91dDwvbGVnZW5kPgotCi08ZGl2IGNsYXNzPSJzcGFjZSI+PC9kaXY+Ci0KLTxkaXYgY2xhc3M9ImZsIj5BbGlnbm1lbnQ6PC9kaXY+Ci08c2VsZWN0IHNpemU9IjEiIG5hbWU9ImFsaWduIiBpZD0iZl9hbGlnbiIKLSAgdGl0bGU9IlBvc2l0aW9uaW5nIG9mIHRoaXMgdGFibGUiPgotICA8b3B0aW9uIHZhbHVlPSIiIHNlbGVjdGVkPSJzZWxlY3RlZCIgICAgICAgICA+Tm90IHNldDwvb3B0aW9uPgotICA8b3B0aW9uIHZhbHVlPSJsZWZ0IiAgICAgICAgICAgICAgICAgICAgICAgICA+TGVmdDwvb3B0aW9uPgotICA8b3B0aW9uIHZhbHVlPSJyaWdodCIgICAgICAgICAgICAgICAgICAgICAgICA+UmlnaHQ8L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0idGV4dHRvcCIgICAgICAgICAgICAgICAgICAgICAgPlRleHR0b3A8L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0iYWJzbWlkZGxlIiAgICAgICAgICAgICAgICAgICAgPkFic21pZGRsZTwvb3B0aW9uPgotICA8b3B0aW9uIHZhbHVlPSJiYXNlbGluZSIgICAgICAgICAgICAgICAgICAgICA+QmFzZWxpbmU8L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0iYWJzYm90dG9tIiAgICAgICAgICAgICAgICAgICAgPkFic2JvdHRvbTwvb3B0aW9uPgotICA8b3B0aW9uIHZhbHVlPSJib3R0b20iICAgICAgICAgICAgICAgICAgICAgICA+Qm90dG9tPC9vcHRpb24+Ci0gIDxvcHRpb24gdmFsdWU9Im1pZGRsZSIgICAgICAgICAgICAgICAgICAgICAgID5NaWRkbGU8L29wdGlvbj4KLSAgPG9wdGlvbiB2YWx1ZT0idG9wIiAgICAgICAgICAgICAgICAgICAgICAgICAgPlRvcDwvb3B0aW9uPgotPC9zZWxlY3Q+Ci0KLTxwIC8+Ci0KLTxkaXYgY2xhc3M9ImZsIj5Cb3JkZXIgdGhpY2tuZXNzOjwvZGl2PgotPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImJvcmRlciIgaWQ9ImZfYm9yZGVyIiBzaXplPSI1IiB2YWx1ZT0iMSIKLXRpdGxlPSJMZWF2ZSBlbXB0eSBmb3Igbm8gYm9yZGVyIiAvPgotPCEtLQotPHAgLz4KLQotPGRpdiBjbGFzcz0iZmwiPkNvbGxhcHNlIGJvcmRlcnM6PC9kaXY+Ci08aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImNvbGxhcHNlIiBpZD0iZl9jb2xsYXBzZSIgLz4KLS0tPgotPGRpdiBjbGFzcz0ic3BhY2UiPjwvZGl2PgotCi08L2ZpZWxkc2V0PgotCi08ZmllbGRzZXQgc3R5bGU9ImZsb2F0OnJpZ2h0OyBtYXJnaW4tcmlnaHQ6IDVweDsiPgotPGxlZ2VuZD5TcGFjaW5nPC9sZWdlbmQ+Ci0KLTxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KLQotPGRpdiBjbGFzcz0iZnIiPkNlbGwgc3BhY2luZzo8L2Rpdj4KLTxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcGFjaW5nIiBpZD0iZl9zcGFjaW5nIiBzaXplPSI1IiB2YWx1ZT0iMSIKLXRpdGxlPSJTcGFjZSBiZXR3ZWVuIGFkamFjZW50IGNlbGxzIiAvPgotCi08cCAvPgotCi08ZGl2IGNsYXNzPSJmciI+Q2VsbCBwYWRkaW5nOjwvZGl2PgotPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBhZGRpbmciIGlkPSJmX3BhZGRpbmciIHNpemU9IjUiIHZhbHVlPSIxIgotdGl0bGU9IlNwYWNlIGJldHdlZW4gY29udGVudCBhbmQgYm9yZGVyIGluIGNlbGwiIC8+Ci0KLTxkaXYgY2xhc3M9InNwYWNlIj48L2Rpdj4KLQotPC9maWVsZHNldD4KLQotPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogODVweDsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICM5OTk7IHBhZGRpbmc6IDJweDsgdGV4dC1hbGlnbjogcmlnaHQ7Ij4KLTxidXR0b24gdHlwZT0iYnV0dG9uIiBuYW1lPSJvayIgb25jbGljaz0icmV0dXJuIG9uT0soKTsiPk9LPC9idXR0b24+Ci08YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbmFtZT0iY2FuY2VsIiBvbmNsaWNrPSJyZXR1cm4gb25DYW5jZWwoKTsiPkNhbmNlbDwvYnV0dG9uPgotPC9kaXY+Ci0KLTwvZm9ybT4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0VGFibGUvaW5zZXJ0X3RhYmxlLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvSW5zZXJ0VGFibGUvaW5zZXJ0X3RhYmxlLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MjczNDBkLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydFRhYmxlL2luc2VydF90YWJsZS5qcworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qIFRoaXMgY29tcHJlc3NlZCBmaWxlIGlzIHBhcnQgb2YgWGluaGEuIEZvciB1bmNvbXByZXNzZWQgc291cmNlcywgZm9ydW0sIGFuZCBidWcgcmVwb3J0cywgZ28gdG8geGluaGEub3JnICovCi0vKiBUaGUgVVJMIG9mIHRoZSBtb3N0IHJlY2VudCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBpcyBodHRwOi8vc3ZuLnhpbmhhLm9yZy90cnVuay9tb2R1bGVzL0luc2VydFRhYmxlL2luc2VydF90YWJsZS5qcyAqLwotSW5zZXJ0VGFibGUuX3BsdWdpbkluZm89e25hbWU6Ikluc2VydFRhYmxlIixvcmlnaW46IlhpbmhhIENvcmUiLHZlcnNpb246IiRMYXN0Q2hhbmdlZFJldmlzaW9uOiAxMDg1ICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywiJDEiKSxkZXZlbG9wZXI6IlRoZSBYaW5oYSBDb3JlIERldmVsb3BlciBUZWFtIixkZXZlbG9wZXJfdXJsOiIkSGVhZFVSTDogaHR0cDovL3N2bi54aW5oYS5vcmcvdGFncy8wLjk2LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9pbnNlcnRfdGFibGUuanMgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCIkMSIpLHNwb25zb3I6IiIsc3BvbnNvcl91cmw6IiIsbGljZW5zZToiaHRtbEFyZWEifTsKLWZ1bmN0aW9uIEluc2VydFRhYmxlKF8xKXsKLXRoaXMuZWRpdG9yPV8xOwotdmFyIF8yPV8xLmNvbmZpZzsKLXZhciBfMz10aGlzOwotXzEuY29uZmlnLmJ0bkxpc3QuaW5zZXJ0dGFibGVbM109ZnVuY3Rpb24oKXsKLV8zLnNob3coKTsKLX07Ci19OwotSW5zZXJ0VGFibGUucHJvdG90eXBlLl9sYz1mdW5jdGlvbihfNCl7Ci1yZXR1cm4gWGluaGEuX2xjKF80LCJYaW5oYSIpOwotfTsKLUluc2VydFRhYmxlLnByb3RvdHlwZS5vbkdlbmVyYXRlT25jZT1mdW5jdGlvbigpewotSW5zZXJ0VGFibGUubG9hZEFzc2V0cygpOwotfTsKLUluc2VydFRhYmxlLmxvYWRBc3NldHM9ZnVuY3Rpb24oKXsKLXZhciBfNT1JbnNlcnRUYWJsZTsKLWlmKF81LmxvYWRpbmcpewotcmV0dXJuOwotfQotXzUubG9hZGluZz10cnVlOwotWGluaGEuX2dldGJhY2soX2VkaXRvcl91cmwrIm1vZHVsZXMvSW5zZXJ0VGFibGUvZGlhbG9nLmh0bWwiLGZ1bmN0aW9uKF82KXsKLV81Lmh0bWw9XzY7Ci1fNS5kaWFsb2dSZWFkeT10cnVlOwotfSk7Ci1YaW5oYS5fZ2V0YmFjayhfZWRpdG9yX3VybCsibW9kdWxlcy9JbnNlcnRUYWJsZS9wbHVnaW5NZXRob2RzLmpzIixmdW5jdGlvbihfNyl7Ci1ldmFsKF83KTsKLV81Lm1ldGhvZHNSZWFkeT10cnVlOwotfSk7Ci19OwotSW5zZXJ0VGFibGUucHJvdG90eXBlLm9uVXBkYXRlVG9vbGJhcj1mdW5jdGlvbigpewotaWYoIShJbnNlcnRUYWJsZS5kaWFsb2dSZWFkeSYmSW5zZXJ0VGFibGUubWV0aG9kc1JlYWR5KSl7Ci10aGlzLmVkaXRvci5fdG9vbGJhck9iamVjdHMuaW5zZXJ0dGFibGUuc3RhdGUoImVuYWJsZWQiLGZhbHNlKTsKLX1lbHNlewotdGhpcy5vblVwZGF0ZVRvb2xiYXI9bnVsbDsKLX0KLX07Ci1JbnNlcnRUYWJsZS5wcm90b3R5cGUucHJlcGFyZURpYWxvZz1mdW5jdGlvbigpewotdmFyIF84PXRoaXM7Ci12YXIgXzk9dGhpcy5lZGl0b3I7Ci12YXIgX2E9dGhpcy5kaWFsb2c9bmV3IFhpbmhhLkRpYWxvZyhfOSxJbnNlcnRUYWJsZS5odG1sLCJYaW5oYSIse3dpZHRoOjQwMH0pOwotX2EuZ2V0RWxlbWVudEJ5SWQoIm9rIikub25jbGljaz1mdW5jdGlvbigpewotXzguYXBwbHkoKTsKLX07Ci1fYS5nZXRFbGVtZW50QnlJZCgiY2FuY2VsIikub25jbGljaz1mdW5jdGlvbigpewotXzguZGlhbG9nLmhpZGUoKTsKLX07Ci10aGlzLmJvcmRlckNvbG9yUGlja2VyPW5ldyBYaW5oYS5jb2xvclBpY2tlci5JbnB1dEJpbmRpbmcoX2EuZ2V0RWxlbWVudEJ5SWQoImJvcmRlcl9jb2xvciIpKTsKLXRoaXMuZGlhbG9nLm9ucmVzaXplPWZ1bmN0aW9uKCl7Ci10aGlzLmdldEVsZW1lbnRCeUlkKCJsYXlvdXRfZmllbGRzZXQiKS5zdHlsZS53aWR0aD0odGhpcy53aWR0aC8yKSs1MCsicHgiOwotdGhpcy5nZXRFbGVtZW50QnlJZCgic3BhY2luZ19maWVsZHNldCIpLnN0eWxlLndpZHRoPSh0aGlzLndpZHRoLzIpLTEyMCsicHgiOwotfTsKLXRoaXMuZGlhbG9nUmVhZHk9dHJ1ZTsKLX07Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydFRhYmxlL3BsdWdpbk1ldGhvZHMuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9JbnNlcnRUYWJsZS9wbHVnaW5NZXRob2RzLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzg5OGU0Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0luc2VydFRhYmxlL3BsdWdpbk1ldGhvZHMuanMKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9JbnNlcnRUYWJsZS9wbHVnaW5NZXRob2RzLmpzICovCi1JbnNlcnRUYWJsZS5wcm90b3R5cGUuc2hvdz1mdW5jdGlvbihfMSl7Ci1pZighdGhpcy5kaWFsb2cpewotdGhpcy5wcmVwYXJlRGlhbG9nKCk7Ci19Ci12YXIgXzI9dGhpcy5lZGl0b3I7Ci12YXIgXzM9eyJjYXB0aW9uIjoiIiwicm93cyI6IjIiLCJjb2xzIjoiNCIsIndpZHRoIjoiMTAwIiwidW5pdCI6IiUiLCJmaXhlZCI6IiIsImFsaWduIjoiIiwiYm9yZGVyIjoiMSIsImJvcmRlcl9zdHlsZSI6ImRvdHRlZCIsImJvcmRlcl9jb2xvciI6IiMwMDAwMDAiLCJib3JkZXJfY29sbGFwc2UiOiJvbiIsInNwYWNpbmciOiIiLCJwYWRkaW5nIjoiNSJ9OwotdGhpcy5ib3JkZXJDb2xvclBpY2tlci5zZXRDb2xvcigiIzAwMDAwMCIpOwotdGhpcy5kaWFsb2cuc2hvdyhfMyk7Ci10aGlzLmRpYWxvZy5vbnJlc2l6ZSgpOwotfTsKLUluc2VydFRhYmxlLnByb3RvdHlwZS5hcHBseT1mdW5jdGlvbigpewotdmFyIF80PXRoaXMuZWRpdG9yOwotdmFyIF81PV80Ll9kb2M7Ci12YXIgXzY9dGhpcy5kaWFsb2cuZ2V0VmFsdWVzKCk7Ci1pZighXzYucm93c3x8IV82LmNvbHMpewotaWYoIV82LnJvd3MpewotdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoInJvd3NfYWxlcnQiKS5zdHlsZS5kaXNwbGF5PSIiOwotfQotaWYoIV82LmNvbHMpewotdGhpcy5kaWFsb2cuZ2V0RWxlbWVudEJ5SWQoImNvbHVtbnNfYWxlcnQiKS5zdHlsZS5kaXNwbGF5PSIiOwotfQotcmV0dXJuOwotfQotdGhpcy5kaWFsb2cuaGlkZSgpOwotdmFyIF83PV81LmNyZWF0ZUVsZW1lbnQoInRhYmxlIik7Ci1mb3IodmFyIF84IGluIF82KXsKLXZhciBfOT1fNltfOF07Ci1pZighXzkpewotY29udGludWU7Ci19Ci1zd2l0Y2goXzgpewotY2FzZSAid2lkdGgiOgotXzcuc3R5bGUud2lkdGg9XzkrXzYudW5pdC52YWx1ZTsKLWJyZWFrOwotY2FzZSAiYWxpZ24iOgotXzcuYWxpZ249XzkudmFsdWU7Ci1icmVhazsKLWNhc2UgImJvcmRlciI6Ci1fNy5zdHlsZS5ib3JkZXI9XzkrInB4ICIrXzYuYm9yZGVyX3N0eWxlLnZhbHVlKyIgIitfNi5ib3JkZXJfY29sb3I7Ci1icmVhazsKLWNhc2UgImJvcmRlcl9jb2xsYXBzZSI6Ci1fNy5zdHlsZS5ib3JkZXJDb2xsYXBzZT0oXzk9PSJvbiIpPyJjb2xsYXBzZSI6IiI7Ci1icmVhazsKLWNhc2UgInNwYWNpbmciOgotXzcuY2VsbFNwYWNpbmc9cGFyc2VJbnQoXzksMTApOwotYnJlYWs7Ci1jYXNlICJwYWRkaW5nIjoKLV83LmNlbGxQYWRkaW5nPXBhcnNlSW50KF85LDEwKTsKLWJyZWFrOwotfQotfQotaWYoXzYuY2FwdGlvbil7Ci12YXIgX2E9XzcuY3JlYXRlQ2FwdGlvbigpOwotX2EuYXBwZW5kQ2hpbGQoXzUuY3JlYXRlVGV4dE5vZGUoXzYuY2FwdGlvbikpOwotfQotdmFyIF9iPTA7Ci1pZihfNi5maXhlZCl7Ci1fYj1NYXRoLmZsb29yKDEwMC9wYXJzZUludChfNi5jb2xzLDEwKSk7Ci19Ci12YXIgX2M9XzUuY3JlYXRlRWxlbWVudCgidGJvZHkiKTsKLV83LmFwcGVuZENoaWxkKF9jKTsKLWZvcih2YXIgaT0wO2k8XzYucm93czsrK2kpewotdmFyIHRyPV81LmNyZWF0ZUVsZW1lbnQoInRyIik7Ci1fYy5hcHBlbmRDaGlsZCh0cik7Ci1mb3IodmFyIGo9MDtqPF82LmNvbHM7KytqKXsKLXZhciB0ZD1fNS5jcmVhdGVFbGVtZW50KCJ0ZCIpOwotaWYoX2ImJmk9PT0wKXsKLXRkLnN0eWxlLndpZHRoPV9iKyIlIjsKLX0KLWlmKF82LmJvcmRlcil7Ci10ZC5zdHlsZS5ib3JkZXI9XzYuYm9yZGVyKyJweCAiK182LmJvcmRlcl9zdHlsZS52YWx1ZSsiICIrXzYuYm9yZGVyX2NvbG9yOwotfQotdHIuYXBwZW5kQ2hpbGQodGQpOwotdGQuYXBwZW5kQ2hpbGQoXzUuY3JlYXRlVGV4dE5vZGUoIsKgIikpOwotfQotfQotXzQuaW5zZXJ0Tm9kZUF0U2VsZWN0aW9uKF83KTsKLX07Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0ludGVybmV0RXhwbG9yZXIvSW50ZXJuZXRFeHBsb3Jlci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL0ludGVybmV0RXhwbG9yZXIvSW50ZXJuZXRFeHBsb3Jlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU1NTA3Yi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvbW9kdWxlcy9JbnRlcm5ldEV4cGxvcmVyL0ludGVybmV0RXhwbG9yZXIuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0NzcgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvSW50ZXJuZXRFeHBsb3Jlci9JbnRlcm5ldEV4cGxvcmVyLmpzICovCi1JbnRlcm5ldEV4cGxvcmVyLl9wbHVnaW5JbmZvPXtuYW1lOiJJbnRlcm5ldCBFeHBsb3JlciIsb3JpZ2luOiJYaW5oYSBDb3JlIix2ZXJzaW9uOiIkTGFzdENoYW5nZWRSZXZpc2lvbjogMTI2MCAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sIiQxIiksZGV2ZWxvcGVyOiJUaGUgWGluaGEgQ29yZSBEZXZlbG9wZXIgVGVhbSIsZGV2ZWxvcGVyX3VybDoiJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RhZ3MvMC45Ni4xL21vZHVsZXMvSW50ZXJuZXRFeHBsb3Jlci9JbnRlcm5ldEV4cGxvcmVyLmpzICQiLnJlcGxhY2UoL15bXjpdKjpccyooLiopXHMqXCQkLywiJDEiKSxzcG9uc29yOiIiLHNwb25zb3JfdXJsOiIiLGxpY2Vuc2U6Imh0bWxBcmVhIn07Ci1mdW5jdGlvbiBJbnRlcm5ldEV4cGxvcmVyKF8xKXsKLXRoaXMuZWRpdG9yPV8xOwotXzEuSW50ZXJuZXRFeHBsb3Jlcj10aGlzOwotfTsKLUludGVybmV0RXhwbG9yZXIucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24oZXYpewotaWYodGhpcy5lZGl0b3IuaXNTaG9ydEN1dChldikpewotc3dpdGNoKHRoaXMuZWRpdG9yLmdldEtleShldikudG9Mb3dlckNhc2UoKSl7Ci1jYXNlICJuIjoKLXRoaXMuZWRpdG9yLmV4ZWNDb21tYW5kKCJmb3JtYXRibG9jayIsZmFsc2UsIjxwPiIpOwotWGluaGEuX3N0b3BFdmVudChldik7Ci1yZXR1cm4gdHJ1ZTsKLWJyZWFrOwotY2FzZSAiMSI6Ci1jYXNlICIyIjoKLWNhc2UgIjMiOgotY2FzZSAiNCI6Ci1jYXNlICI1IjoKLWNhc2UgIjYiOgotdGhpcy5lZGl0b3IuZXhlY0NvbW1hbmQoImZvcm1hdGJsb2NrIixmYWxzZSwiPGgiK3RoaXMuZWRpdG9yLmdldEtleShldikudG9Mb3dlckNhc2UoKSsiPiIpOwotWGluaGEuX3N0b3BFdmVudChldik7Ci1yZXR1cm4gdHJ1ZTsKLWJyZWFrOwotfQotfQotc3dpdGNoKGV2LmtleUNvZGUpewotY2FzZSA4OgotY2FzZSA0NjoKLWlmKHRoaXMuaGFuZGxlQmFja3NwYWNlKCkpewotWGluaGEuX3N0b3BFdmVudChldik7Ci1yZXR1cm4gdHJ1ZTsKLX0KLWJyZWFrOwotY2FzZSA5OgotWGluaGEuX3N0b3BFdmVudChldik7Ci1yZXR1cm4gdHJ1ZTsKLX0KLXJldHVybiBmYWxzZTsKLX07Ci1JbnRlcm5ldEV4cGxvcmVyLnByb3RvdHlwZS5oYW5kbGVCYWNrc3BhY2U9ZnVuY3Rpb24oKXsKLXZhciBfMz10aGlzLmVkaXRvcjsKLXZhciBfND1fMy5nZXRTZWxlY3Rpb24oKTsKLWlmKF80LnR5cGU9PSJDb250cm9sIil7Ci12YXIgXzU9XzMuYWN0aXZlRWxlbWVudChfNCk7Ci1YaW5oYS5yZW1vdmVGcm9tUGFyZW50KF81KTsKLXJldHVybiB0cnVlOwotfQotdmFyIF82PV8zLmNyZWF0ZVJhbmdlKF80KTsKLXZhciByMj1fNi5kdXBsaWNhdGUoKTsKLXIyLm1vdmVTdGFydCgiY2hhcmFjdGVyIiwtMSk7Ci12YXIgYT1yMi5wYXJlbnRFbGVtZW50KCk7Ci1pZihhIT1fNi5wYXJlbnRFbGVtZW50KCkmJigvXmEkL2kudGVzdChhLnRhZ05hbWUpKSl7Ci1yMi5jb2xsYXBzZSh0cnVlKTsKLXIyLm1vdmVFbmQoImNoYXJhY3RlciIsMSk7Ci1yMi5wYXN0ZUhUTUwoIiIpOwotcjIuc2VsZWN0KCk7Ci1yZXR1cm4gdHJ1ZTsKLX0KLX07Ci1JbnRlcm5ldEV4cGxvcmVyLnByb3RvdHlwZS5pbndhcmRIdG1sPWZ1bmN0aW9uKF85KXsKLV85PV85LnJlcGxhY2UoLzwoXC8/KWRlbChcc3w+fFwvKS9pZywiPCQxc3RyaWtlJDIiKTsKLV85PV85LnJlcGxhY2UoLyg8c2NyaXB0fDwhLS0pL2ksIiZuYnNwOyQxIik7Ci1fOT1fOS5yZXBsYWNlKC88c3BhbltePl0raWQ9Il9fSW5zZXJ0U3Bhbl9Xb3JrYXJvdW5kX1thLXpdKyIuKj8+KFtcc1xTXSo/KTxcL3NwYW4+L2ksIiQxIik7Ci1yZXR1cm4gXzk7Ci19OwotSW50ZXJuZXRFeHBsb3Jlci5wcm90b3R5cGUub3V0d2FyZEh0bWw9ZnVuY3Rpb24oX2EpewotX2E9X2EucmVwbGFjZSgvJm5ic3A7KFxzKikoPHNjcmlwdHw8IS0tKS9pLCIkMSQyIik7Ci1fYT1fYS5yZXBsYWNlKC88c3BhbltePl0raWQ9Il9fSW5zZXJ0U3Bhbl9Xb3JrYXJvdW5kX1thLXpdKyIuKj8+KFtcc1xTXSo/KTxcL3NwYW4+L2ksIiQxIik7Ci1yZXR1cm4gX2E7Ci19OwotSW50ZXJuZXRFeHBsb3Jlci5wcm90b3R5cGUub25FeGVjQ29tbWFuZD1mdW5jdGlvbihfYixVSSxfZCl7Ci1zd2l0Y2goX2IpewotY2FzZSAic2F2ZWFzIjoKLXZhciBfZT1udWxsOwotdmFyIF9mPXRoaXMuZWRpdG9yOwotdmFyIF8xMD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKLV8xMC5zcmM9ImFib3V0OmJsYW5rIjsKLV8xMC5zdHlsZS5kaXNwbGF5PSJub25lIjsKLWRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoXzEwKTsKLXRyeXsKLWlmKF8xMC5jb250ZW50RG9jdW1lbnQpewotX2U9XzEwLmNvbnRlbnREb2N1bWVudDsKLX1lbHNlewotX2U9XzEwLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7Ci19Ci19Ci1jYXRjaChleCl7Ci19Ci1fZS5vcGVuKCJ0ZXh0L2h0bWwiLCJyZXBsYWNlIik7Ci12YXIgXzExPSIiOwotaWYoX2YuY29uZmlnLmJyb3dzZXJRdWlya3NNb2RlPT09ZmFsc2UpewotdmFyIF8xMj0iPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU5cIiBcImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZFwiPiI7Ci19ZWxzZXsKLWlmKF9mLmNvbmZpZy5icm93c2VyUXVpcmtzTW9kZT09PXRydWUpewotdmFyIF8xMj0iIjsKLX1lbHNlewotdmFyIF8xMj1YaW5oYS5nZXREb2N0eXBlKGRvY3VtZW50KTsKLX0KLX0KLWlmKCFfZi5jb25maWcuZnVsbFBhZ2UpewotXzExKz1fMTIrIlxuIjsKLV8xMSs9IjxodG1sPlxuIjsKLV8xMSs9IjxoZWFkPlxuIjsKLV8xMSs9IjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PSIrX2YuY29uZmlnLmNoYXJTZXQrIlwiPlxuIjsKLWlmKHR5cGVvZiBfZi5jb25maWcuYmFzZUhyZWYhPSJ1bmRlZmluZWQiJiZfZi5jb25maWcuYmFzZUhyZWYhPT1udWxsKXsKLV8xMSs9IjxiYXNlIGhyZWY9XCIiK19mLmNvbmZpZy5iYXNlSHJlZisiXCIvPlxuIjsKLX0KLWlmKHR5cGVvZiBfZi5jb25maWcucGFnZVN0eWxlU2hlZXRzIT09InVuZGVmaW5lZCIpewotZm9yKHZhciBpPTA7aTxfZi5jb25maWcucGFnZVN0eWxlU2hlZXRzLmxlbmd0aDtpKyspewotaWYoX2YuY29uZmlnLnBhZ2VTdHlsZVNoZWV0c1tpXS5sZW5ndGg+MCl7Ci1fMTErPSI8bGluayByZWw9XCJzdHlsZXNoZWV0XCIgdHlwZT1cInRleHQvY3NzXCIgaHJlZj1cIiIrX2YuY29uZmlnLnBhZ2VTdHlsZVNoZWV0c1tpXSsiXCI+IjsKLX0KLX0KLX0KLWlmKF9mLmNvbmZpZy5wYWdlU3R5bGUpewotXzExKz0iPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPlxuIitfZi5jb25maWcucGFnZVN0eWxlKyJcbjwvc3R5bGU+IjsKLX0KLV8xMSs9IjwvaGVhZD5cbiI7Ci1fMTErPSI8Ym9keT5cbiI7Ci1fMTErPV9mLmdldEVkaXRvckNvbnRlbnQoKTsKLV8xMSs9IjwvYm9keT5cbiI7Ci1fMTErPSI8L2h0bWw+IjsKLX1lbHNlewotXzExPV9mLmdldEVkaXRvckNvbnRlbnQoKTsKLWlmKF8xMS5tYXRjaChYaW5oYS5SRV9kb2N0eXBlKSl7Ci1fZi5zZXREb2N0eXBlKFJlZ0V4cC4kMSk7Ci19Ci19Ci1fZS53cml0ZShfMTEpOwotX2UuY2xvc2UoKTsKLV9lLmV4ZWNDb21tYW5kKF9iLFVJLF9kKTsKLWRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoXzEwKTsKLXJldHVybiB0cnVlOwotYnJlYWs7Ci1jYXNlICJyZW1vdmVmb3JtYXQiOgotdmFyIF9mPXRoaXMuZWRpdG9yOwotdmFyIHNlbD1fZi5nZXRTZWxlY3Rpb24oKTsKLXZhciBfMTU9X2Yuc2F2ZVNlbGVjdGlvbihzZWwpOwotdmFyIGksZWwsZWxzOwotZnVuY3Rpb24gY2xlYW4oZWwpewotaWYoZWwubm9kZVR5cGUhPTEpewotcmV0dXJuOwotfQotZWwucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpOwotZm9yKHZhciBqPTA7ajxlbC5jaGlsZE5vZGVzLmxlbmd0aDtqKyspewotY2xlYW4oZWwuY2hpbGROb2Rlc1tqXSk7Ci19Ci1pZigoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ic3BhbiImJiFlbC5hdHRyaWJ1dGVzLmxlbmd0aCl8fGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09ImZvbnQiKXsKLWVsLm91dGVySFRNTD1lbC5pbm5lckhUTUw7Ci19Ci19OwotaWYoX2Yuc2VsZWN0aW9uRW1wdHkoc2VsKSl7Ci1lbHM9X2YuX2RvYy5ib2R5LmNoaWxkTm9kZXM7Ci1mb3IoaT0wO2k8ZWxzLmxlbmd0aDtpKyspewotZWw9ZWxzW2ldOwotaWYoZWwubm9kZVR5cGUhPTEpewotY29udGludWU7Ci19Ci1pZihlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJzcGFuIil7Ci1uZXdOb2RlPV9mLmNvbnZlcnROb2RlKGVsLCJkaXYiKTsKLWVsLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld05vZGUsZWwpOwotZWw9bmV3Tm9kZTsKLX0KLWNsZWFuKGVsKTsKLX0KLX0KLV9mLl9kb2MuZXhlY0NvbW1hbmQoX2IsVUksX2QpOwotX2YucmVzdG9yZVNlbGVjdGlvbihfMTUpOwotcmV0dXJuIHRydWU7Ci1icmVhazsKLX0KLXJldHVybiBmYWxzZTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuaW5zZXJ0Tm9kZUF0U2VsZWN0aW9uPWZ1bmN0aW9uKF8xYSl7Ci10aGlzLmluc2VydEhUTUwoXzFhLm91dGVySFRNTCk7Ci19OwotWGluaGEucHJvdG90eXBlLmdldFBhcmVudEVsZW1lbnQ9ZnVuY3Rpb24oc2VsKXsKLWlmKHR5cGVvZiBzZWw9PSJ1bmRlZmluZWQiKXsKLXNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotfQotdmFyIF8xYz10aGlzLmNyZWF0ZVJhbmdlKHNlbCk7Ci1zd2l0Y2goc2VsLnR5cGUpewotY2FzZSAiVGV4dCI6Ci12YXIgXzFkPV8xYy5wYXJlbnRFbGVtZW50KCk7Ci13aGlsZSh0cnVlKXsKLXZhciBfMWU9XzFjLmR1cGxpY2F0ZSgpOwotXzFlLm1vdmVUb0VsZW1lbnRUZXh0KF8xZCk7Ci1pZihfMWUuaW5SYW5nZShfMWMpKXsKLWJyZWFrOwotfQotaWYoKF8xZC5ub2RlVHlwZSE9MSl8fChfMWQudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iYm9keSIpKXsKLWJyZWFrOwotfQotXzFkPV8xZC5wYXJlbnRFbGVtZW50OwotfQotcmV0dXJuIF8xZDsKLWNhc2UgIk5vbmUiOgotdHJ5ewotcmV0dXJuIF8xYy5wYXJlbnRFbGVtZW50KCk7Ci19Ci1jYXRjaChlKXsKLXJldHVybiB0aGlzLl9kb2MuYm9keTsKLX0KLWNhc2UgIkNvbnRyb2wiOgotcmV0dXJuIF8xYy5pdGVtKDApOwotZGVmYXVsdDoKLXJldHVybiB0aGlzLl9kb2MuYm9keTsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuYWN0aXZlRWxlbWVudD1mdW5jdGlvbihzZWwpewotaWYoKHNlbD09PW51bGwpfHx0aGlzLnNlbGVjdGlvbkVtcHR5KHNlbCkpewotcmV0dXJuIG51bGw7Ci19Ci1pZihzZWwudHlwZS50b0xvd2VyQ2FzZSgpPT0iY29udHJvbCIpewotcmV0dXJuIHNlbC5jcmVhdGVSYW5nZSgpLml0ZW0oMCk7Ci19ZWxzZXsKLXZhciBfMjA9c2VsLmNyZWF0ZVJhbmdlKCk7Ci12YXIgXzIxPXRoaXMuZ2V0UGFyZW50RWxlbWVudChzZWwpOwotaWYoXzIxLmlubmVySFRNTD09XzIwLmh0bWxUZXh0KXsKLXJldHVybiBfMjE7Ci19Ci1yZXR1cm4gbnVsbDsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuc2VsZWN0aW9uRW1wdHk9ZnVuY3Rpb24oc2VsKXsKLWlmKCFzZWwpewotcmV0dXJuIHRydWU7Ci19Ci1yZXR1cm4gdGhpcy5jcmVhdGVSYW5nZShzZWwpLmh0bWxUZXh0PT09IiI7Ci19OwotWGluaGEucHJvdG90eXBlLnNhdmVTZWxlY3Rpb249ZnVuY3Rpb24oc2VsKXsKLXJldHVybiB0aGlzLmNyZWF0ZVJhbmdlKHNlbD9zZWw6dGhpcy5nZXRTZWxlY3Rpb24oKSk7Ci19OwotWGluaGEucHJvdG90eXBlLnJlc3RvcmVTZWxlY3Rpb249ZnVuY3Rpb24oXzI0KXsKLWlmKCFfMjQpewotcmV0dXJuOwotfQotdmFyIF8yNT1udWxsOwotaWYoXzI0LnBhcmVudEVsZW1lbnQpewotXzI1PV8yNC5wYXJlbnRFbGVtZW50KCk7Ci19ZWxzZXsKLV8yNT1fMjQuaXRlbSgwKTsKLX0KLXZhciBfMjY9dGhpcy5jcmVhdGVSYW5nZSh0aGlzLmdldFNlbGVjdGlvbigpKTsKLXZhciBfMjc9bnVsbDsKLWlmKF8yNi5wYXJlbnRFbGVtZW50KXsKLV8yNz1fMjYucGFyZW50RWxlbWVudCgpOwotfWVsc2V7Ci1fMjc9XzI2Lml0ZW0oMCk7Ci19Ci12YXIgXzI4PWZ1bmN0aW9uKGVsKXsKLWZvcih2YXIgXzJhPWVsO18yYTtfMmE9XzJhLnBhcmVudE5vZGUpewotaWYoXzJhLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09Imh0bWwiKXsKLXJldHVybiBfMmEucGFyZW50Tm9kZTsKLX0KLX0KLXJldHVybiBudWxsOwotfTsKLWlmKF8yNC5wYXJlbnRFbGVtZW50JiZfMjgoXzI1KT09XzI4KF8yNykpewotaWYoXzI2LmlzRXF1YWwoXzI0KSl7Ci1yZXR1cm47Ci19Ci19Ci10cnl7Ci1fMjQuc2VsZWN0KCk7Ci19Ci1jYXRjaChlKXsKLX0KLV8yNj10aGlzLmNyZWF0ZVJhbmdlKHRoaXMuZ2V0U2VsZWN0aW9uKCkpOwotaWYoXzI2LnBhcmVudEVsZW1lbnQpewotXzI3PV8yNi5wYXJlbnRFbGVtZW50KCk7Ci19ZWxzZXsKLV8yNz1fMjYuaXRlbSgwKTsKLX0KLWlmKF8yNyE9XzI1KXsKLXZhciBfMmI9dGhpcy5jb25maWcuc2VsZWN0V29ya2Fyb3VuZHx8IlZpc2libGVDdWUiOwotc3dpdGNoKF8yYil7Ci1jYXNlICJTaW11bGF0ZUNsaWNrIjoKLWNhc2UgIkluc2VydFNwYW4iOgotdmFyIF8yYz1fMjgoXzI1KTsKLXZhciBfMmQ9ZnVuY3Rpb24oXzJlKXsKLXZhciBfMmY9IiI7Ci1mb3IodmFyIF8zMD0wO18zMDwyNjsrK18zMCl7Ci1fMmYrPVN0cmluZy5mcm9tQ2hhckNvZGUoImEiLmNoYXJDb2RlQXQoMCkrXzMwKTsKLX0KLXZhciBfMzE9IiI7Ci1mb3IodmFyIF8zMD0wO18zMDxfMmU7KytfMzApewotXzMxKz1fMmYuc3Vic3RyKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpfMmYubGVuZ3RoKzEpLDEpOwotfQotcmV0dXJuIF8zMTsKLX07Ci12YXIgXzMyPTE7Ci12YXIgXzMzPSJfX0luc2VydFNwYW5fV29ya2Fyb3VuZF8iK18yZChfMzIpOwotd2hpbGUoXzJjLmdldEVsZW1lbnRCeUlkKF8zMykpewotXzMyKz0xOwotXzMzPSJfX0luc2VydFNwYW5fV29ya2Fyb3VuZF8iK18yZChfMzIpOwotfQotXzI0LnBhc3RlSFRNTCgiPHNwYW4gaWQ9XCIiK18zMysiXCI+PC9zcGFuPiIpOwotdmFyIF8zND1fMmMuZ2V0RWxlbWVudEJ5SWQoXzMzKTsKLV8yNC5tb3ZlVG9FbGVtZW50VGV4dChfMzQpOwotXzI0LnNlbGVjdCgpOwotYnJlYWs7Ci1jYXNlICJKdXN0aWZpY2F0aW9uSGFjayI6Ci12YXIgXzM1PVN0cmluZy5mcm9tQ2hhckNvZGUoMSk7Ci1fMjQucGFzdGVIVE1MKF8zNSk7Ci1fMjQuZmluZFRleHQoXzM1LC0xKTsKLV8yNC5zZWxlY3QoKTsKLV8yNC5leGVjQ29tbWFuZCgiSnVzdGlmeU5vbmUiKTsKLV8yNC5wYXN0ZUhUTUwoIiIpOwotYnJlYWs7Ci1jYXNlICJWaXNpYmxlQ3VlIjoKLWRlZmF1bHQ6Ci12YXIgXzM1PVN0cmluZy5mcm9tQ2hhckNvZGUoMSk7Ci1fMjQucGFzdGVIVE1MKF8zNSk7Ci1fMjQuZmluZFRleHQoXzM1LC0xKTsKLV8yNC5zZWxlY3QoKTsKLX0KLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuc2VsZWN0Tm9kZUNvbnRlbnRzPWZ1bmN0aW9uKF8zNixfMzcpewotdGhpcy5mb2N1c0VkaXRvcigpOwotdGhpcy5mb3JjZVJlZHJhdygpOwotdmFyIF8zODsKLXZhciBfMzk9dHlwZW9mIF8zNz09InVuZGVmaW5lZCI/dHJ1ZTpmYWxzZTsKLWlmKF8zOSYmXzM2LnRhZ05hbWUmJl8zNi50YWdOYW1lLnRvTG93ZXJDYXNlKCkubWF0Y2goL3RhYmxlfGltZ3xpbnB1dHxzZWxlY3R8dGV4dGFyZWEvKSl7Ci1fMzg9dGhpcy5fZG9jLmJvZHkuY3JlYXRlQ29udHJvbFJhbmdlKCk7Ci1fMzguYWRkKF8zNik7Ci19ZWxzZXsKLV8zOD10aGlzLl9kb2MuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTsKLWlmKDM9PV8zNi5ub2RlVHlwZSl7Ci1pZihfMzYucGFyZW50Tm9kZSl7Ci1fMzgubW92ZVRvRWxlbWVudFRleHQoXzM2LnBhcmVudE5vZGUpOwotfWVsc2V7Ci1fMzgubW92ZVRvRWxlbWVudFRleHQodGhpcy5fZG9jLmJvZHkpOwotfQotdmFyIF8zYT10aGlzLl9kb2MuYm9keS5jcmVhdGVUZXh0UmFuZ2UoKTsKLXZhciBfM2I9MDsKLXZhciBfM2M9XzM2LnByZXZpb3VzU2libGluZzsKLWZvcig7XzNjJiYoMSE9XzNjLm5vZGVUeXBlKTtfM2M9XzNjLnByZXZpb3VzU2libGluZyl7Ci1pZigzPT1fM2Mubm9kZVR5cGUpewotXzNiKz1fM2Mubm9kZVZhbHVlLmxlbmd0aC1fM2Mubm9kZVZhbHVlLnNwbGl0KCJcciIpLmxlbmd0aC0xOwotfQotfQotaWYoXzNjJiYoMT09XzNjLm5vZGVUeXBlKSl7Ci1fM2EubW92ZVRvRWxlbWVudFRleHQoXzNjKTsKLV8zOC5zZXRFbmRQb2ludCgiU3RhcnRUb0VuZCIsXzNhKTsKLX0KLWlmKF8zYil7Ci1fMzgubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLF8zYik7Ci19Ci1fM2I9MDsKLV8zYz1fMzYubmV4dFNpYmxpbmc7Ci1mb3IoO18zYyYmKDEhPV8zYy5ub2RlVHlwZSk7XzNjPV8zYy5uZXh0U2libGluZyl7Ci1pZigzPT1fM2Mubm9kZVR5cGUpewotXzNiKz1fM2Mubm9kZVZhbHVlLmxlbmd0aC1fM2Mubm9kZVZhbHVlLnNwbGl0KCJcciIpLmxlbmd0aC0xOwotaWYoIV8zYy5uZXh0U2libGluZyl7Ci1fM2IrPTE7Ci19Ci19Ci19Ci1pZihfM2MmJigxPT1fM2Mubm9kZVR5cGUpKXsKLV8zYS5tb3ZlVG9FbGVtZW50VGV4dChfM2MpOwotXzM4LnNldEVuZFBvaW50KCJFbmRUb1N0YXJ0IixfM2EpOwotfQotaWYoXzNiKXsKLV8zOC5tb3ZlRW5kKCJjaGFyYWN0ZXIiLC1fM2IpOwotfQotaWYoIV8zNi5uZXh0U2libGluZyl7Ci1fMzgubW92ZUVuZCgiY2hhcmFjdGVyIiwtMSk7Ci19Ci19ZWxzZXsKLV8zOC5tb3ZlVG9FbGVtZW50VGV4dChfMzYpOwotfQotfQotaWYodHlwZW9mIF8zNyE9InVuZGVmaW5lZCIpewotXzM4LmNvbGxhcHNlKF8zNyk7Ci1pZighXzM3KXsKLV8zOC5tb3ZlU3RhcnQoImNoYXJhY3RlciIsLTEpOwotXzM4Lm1vdmVFbmQoImNoYXJhY3RlciIsLTEpOwotfQotfQotXzM4LnNlbGVjdCgpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5pbnNlcnRIVE1MPWZ1bmN0aW9uKF8zZCl7Ci10aGlzLmZvY3VzRWRpdG9yKCk7Ci12YXIgc2VsPXRoaXMuZ2V0U2VsZWN0aW9uKCk7Ci12YXIgXzNmPXRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsKLV8zZi5wYXN0ZUhUTUwoXzNkKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0U2VsZWN0ZWRIVE1MPWZ1bmN0aW9uKCl7Ci12YXIgc2VsPXRoaXMuZ2V0U2VsZWN0aW9uKCk7Ci1pZih0aGlzLnNlbGVjdGlvbkVtcHR5KHNlbCkpewotcmV0dXJuICIiOwotfQotdmFyIF80MT10aGlzLmNyZWF0ZVJhbmdlKHNlbCk7Ci1pZihfNDEuaHRtbFRleHQpewotcmV0dXJuIF80MS5odG1sVGV4dDsKLX1lbHNlewotaWYoXzQxLmxlbmd0aD49MSl7Ci1yZXR1cm4gXzQxLml0ZW0oMCkub3V0ZXJIVE1MOwotfQotfQotcmV0dXJuICIiOwotfTsKLVhpbmhhLnByb3RvdHlwZS5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXsKLXJldHVybiB0aGlzLl9kb2Muc2VsZWN0aW9uOwotfTsKLVhpbmhhLnByb3RvdHlwZS5jcmVhdGVSYW5nZT1mdW5jdGlvbihzZWwpewotaWYoIXNlbCl7Ci1zZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLX0KLXJldHVybiBzZWwuY3JlYXRlUmFuZ2UoKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuaXNLZXlFdmVudD1mdW5jdGlvbihfNDMpewotcmV0dXJuIF80My50eXBlPT0ia2V5ZG93biI7Ci19OwotWGluaGEucHJvdG90eXBlLmdldEtleT1mdW5jdGlvbihfNDQpewotcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoXzQ0LmtleUNvZGUpOwotfTsKLVhpbmhhLmdldE91dGVySFRNTD1mdW5jdGlvbihfNDUpewotcmV0dXJuIF80NS5vdXRlckhUTUw7Ci19OwotWGluaGEuY2M9U3RyaW5nLmZyb21DaGFyQ29kZSg4MjAxKTsKLVhpbmhhLnByb3RvdHlwZS5zZXRDQz1mdW5jdGlvbihfNDYpewotdmFyIGNjPVhpbmhhLmNjOwotaWYoXzQ2PT0idGV4dGFyZWEiKXsKLXZhciB0YT10aGlzLl90ZXh0QXJlYTsKLXZhciBwb3M9ZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7Ci1wb3MuY29sbGFwc2UoKTsKLXBvcy50ZXh0PWNjOwotdmFyIF80YT10YS52YWx1ZS5pbmRleE9mKGNjKTsKLXZhciBfNGI9dGEudmFsdWUuc3Vic3RyaW5nKDAsXzRhKTsKLXZhciBfNGM9dGEudmFsdWUuc3Vic3RyaW5nKF80YStjYy5sZW5ndGgsdGEudmFsdWUubGVuZ3RoKTsKLWlmKF80Yy5tYXRjaCgvXltePF0qPi8pKXsKLXZhciBfNGQ9XzRjLmluZGV4T2YoIj4iKSsxOwotdGEudmFsdWU9XzRiK180Yy5zdWJzdHJpbmcoMCxfNGQpK2NjK180Yy5zdWJzdHJpbmcoXzRkLF80Yy5sZW5ndGgpOwotfWVsc2V7Ci10YS52YWx1ZT1fNGIrY2MrXzRjOwotfQotdGEudmFsdWU9dGEudmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKCIoJlteIitjYysiXSo/KSgiK2NjKyIpKFteIitjYysiXSo/OykiKSwiJDEkMyQyIik7Ci10YS52YWx1ZT10YS52YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoIig8c2NyaXB0W14+XSo+W14iK2NjKyJdKj8pKCIrY2MrIikoW14iK2NjKyJdKj88L3NjcmlwdD4pIiksIiQxJDMkMiIpOwotdGEudmFsdWU9dGEudmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKCJeKFteIitjYysiXSopKCIrY2MrIikoW14iK2NjKyJdKjxib2R5W14+XSo+KSguKj8pIiksIiQxJDMkMiQ0Iik7Ci19ZWxzZXsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLXZhciByPXNlbC5jcmVhdGVSYW5nZSgpOwotaWYoc2VsLnR5cGU9PSJDb250cm9sIil7Ci12YXIgXzUwPXIuaXRlbSgwKTsKLV81MC5vdXRlckhUTUwrPWNjOwotfWVsc2V7Ci1yLmNvbGxhcHNlKCk7Ci1yLnRleHQ9Y2M7Ci19Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmZpbmRDQz1mdW5jdGlvbihfNTEpewotdmFyIF81Mj0oXzUxPT0idGV4dGFyZWEiKT90aGlzLl90ZXh0QXJlYTp0aGlzLl9kb2MuYm9keTsKLXJhbmdlPV81Mi5jcmVhdGVUZXh0UmFuZ2UoKTsKLWlmKHJhbmdlLmZpbmRUZXh0KGVzY2FwZShYaW5oYS5jYykpKXsKLXJhbmdlLnNlbGVjdCgpOwotcmFuZ2UudGV4dD0iIjsKLXJhbmdlLnNlbGVjdCgpOwotfQotaWYocmFuZ2UuZmluZFRleHQoWGluaGEuY2MpKXsKLXJhbmdlLnNlbGVjdCgpOwotcmFuZ2UudGV4dD0iIjsKLXJhbmdlLnNlbGVjdCgpOwotfQotaWYoXzUxPT0idGV4dGFyZWEiKXsKLXRoaXMuX3RleHRBcmVhLmZvY3VzKCk7Ci19Ci19OwotWGluaGEuZ2V0RG9jdHlwZT1mdW5jdGlvbihkb2MpewotcmV0dXJuIChkb2MuY29tcGF0TW9kZT09IkNTUzFDb21wYXQiJiZYaW5oYS5pZV92ZXJzaW9uPDgpPyI8IURPQ1RZUEUgSFRNTCBQVUJMSUMgXCItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTlwiIFwiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkXCI+IjoiIjsKLX07Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL09wZXJhL09wZXJhLmpzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvT3BlcmEvT3BlcmEuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMDhiNDUuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvT3BlcmEvT3BlcmEuanMKKysrIC9kZXYvbnVsbApAQCAtMSw0NzEgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL21vZHVsZXMvT3BlcmEvT3BlcmEuanMgKi8KLU9wZXJhLl9wbHVnaW5JbmZvPXtuYW1lOiJPcGVyYSIsb3JpZ2luOiJYaW5oYSBDb3JlIix2ZXJzaW9uOiIkTGFzdENoYW5nZWRSZXZpc2lvbjogMTA4NCAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sIiQxIiksZGV2ZWxvcGVyOiJUaGUgWGluaGEgQ29yZSBEZXZlbG9wZXIgVGVhbSIsZGV2ZWxvcGVyX3VybDoiJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RhZ3MvMC45Ni4xL21vZHVsZXMvT3BlcmEvT3BlcmEuanMgJCIucmVwbGFjZSgvXlteOl0qOlxzKiguKilccypcJCQvLCIkMSIpLHNwb25zb3I6IkdvZ28gSW50ZXJuZXQgU2VydmljZXMgTGltaXRlZCIsc3BvbnNvcl91cmw6Imh0dHA6Ly93d3cuZ29nby5jby5uei8iLGxpY2Vuc2U6Imh0bWxBcmVhIn07Ci1mdW5jdGlvbiBPcGVyYShfMSl7Ci10aGlzLmVkaXRvcj1fMTsKLV8xLk9wZXJhPXRoaXM7Ci19OwotT3BlcmEucHJvdG90eXBlLm9uS2V5UHJlc3M9ZnVuY3Rpb24oZXYpewotdmFyIF8zPXRoaXMuZWRpdG9yOwotdmFyIHM9XzMuZ2V0U2VsZWN0aW9uKCk7Ci1pZihfMy5pc1Nob3J0Q3V0KGV2KSl7Ci1zd2l0Y2goXzMuZ2V0S2V5KGV2KS50b0xvd2VyQ2FzZSgpKXsKLWNhc2UgInoiOgotaWYoXzMuX3VuTGluayYmXzMuX3VubGlua09uVW5kbyl7Ci1YaW5oYS5fc3RvcEV2ZW50KGV2KTsKLV8zLl91bkxpbmsoKTsKLV8zLnVwZGF0ZVRvb2xiYXIoKTsKLXJldHVybiB0cnVlOwotfQotYnJlYWs7Ci1jYXNlICJhIjoKLXNlbD1fMy5nZXRTZWxlY3Rpb24oKTsKLXNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKLXJhbmdlPV8zLmNyZWF0ZVJhbmdlKCk7Ci1yYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoXzMuX2RvYy5ib2R5KTsKLXNlbC5hZGRSYW5nZShyYW5nZSk7Ci1YaW5oYS5fc3RvcEV2ZW50KGV2KTsKLXJldHVybiB0cnVlOwotYnJlYWs7Ci1jYXNlICJ2IjoKLWlmKCFfMy5jb25maWcuaHRtbGFyZWFQYXN0ZSl7Ci1yZXR1cm4gdHJ1ZTsKLX0KLWJyZWFrOwotfQotfQotc3dpdGNoKF8zLmdldEtleShldikpewotY2FzZSAiICI6Ci12YXIgXzU9ZnVuY3Rpb24oXzYsXzcpewotdmFyIF84PV82Lm5leHRTaWJsaW5nOwotaWYodHlwZW9mIF83PT0ic3RyaW5nIil7Ci1fNz1fMy5fZG9jLmNyZWF0ZUVsZW1lbnQoXzcpOwotfQotdmFyIGE9XzYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoXzcsXzgpOwotWGluaGEucmVtb3ZlRnJvbVBhcmVudChfNik7Ci1hLmFwcGVuZENoaWxkKF82KTsKLV84LmRhdGE9IiAiK184LmRhdGE7Ci1zLmNvbGxhcHNlKF84LDEpOwotXzMuX3VuTGluaz1mdW5jdGlvbigpewotdmFyIHQ9YS5maXJzdENoaWxkOwotYS5yZW1vdmVDaGlsZCh0KTsKLWEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodCxhKTsKLVhpbmhhLnJlbW92ZUZyb21QYXJlbnQoYSk7Ci1fMy5fdW5MaW5rPW51bGw7Ci1fMy5fdW5saW5rT25VbmRvPWZhbHNlOwotfTsKLV8zLl91bmxpbmtPblVuZG89dHJ1ZTsKLXJldHVybiBhOwotfTsKLWlmKF8zLmNvbmZpZy5jb252ZXJ0VXJsc1RvTGlua3MmJnMmJnMuaXNDb2xsYXBzZWQmJnMuYW5jaG9yTm9kZS5ub2RlVHlwZT09MyYmcy5hbmNob3JOb2RlLmRhdGEubGVuZ3RoPjMmJnMuYW5jaG9yTm9kZS5kYXRhLmluZGV4T2YoIi4iKT49MCl7Ci12YXIgX2I9cy5hbmNob3JOb2RlLmRhdGEuc3Vic3RyaW5nKDAscy5hbmNob3JPZmZzZXQpLnNlYXJjaCgvXFN7NCx9JC8pOwotaWYoX2I9PS0xKXsKLWJyZWFrOwotfQotaWYoXzMuX2dldEZpcnN0QW5jZXN0b3IocywiYSIpKXsKLWJyZWFrOwotfQotdmFyIF9jPXMuYW5jaG9yTm9kZS5kYXRhLnN1YnN0cmluZygwLHMuYW5jaG9yT2Zmc2V0KS5yZXBsYWNlKC9eLio/KFxTKikkLywiJDEiKTsKLXZhciBfZD1fYy5tYXRjaChYaW5oYS5SRV9lbWFpbCk7Ci1pZihfZCl7Ci12YXIgX2U9cy5hbmNob3JOb2RlOwotdmFyIF9mPV9lLnNwbGl0VGV4dChzLmFuY2hvck9mZnNldCk7Ci12YXIgXzEwPV9lLnNwbGl0VGV4dChfYik7Ci1fNShfMTAsImEiKS5ocmVmPSJtYWlsdG86IitfZFswXTsKLWJyZWFrOwotfQotUkVfZGF0ZT0vKFswLTldK1wuKSsvOwotUkVfaXA9Lyg/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pLzsKLXZhciBfMTE9X2MubWF0Y2goWGluaGEuUkVfdXJsKTsKLWlmKF8xMSl7Ci1pZihSRV9kYXRlLnRlc3QoX2MpKXsKLWJyZWFrOwotfQotdmFyIF8xMj1zLmFuY2hvck5vZGU7Ci12YXIgXzEzPV8xMi5zcGxpdFRleHQocy5hbmNob3JPZmZzZXQpOwotdmFyIF8xND1fMTIuc3BsaXRUZXh0KF9iKTsKLV81KF8xNCwiYSIpLmhyZWY9KF8xMVsxXT9fMTFbMV06Imh0dHA6Ly8iKStfMTFbMl07Ci1icmVhazsKLX0KLX0KLWJyZWFrOwotfQotc3dpdGNoKGV2LmtleUNvZGUpewotY2FzZSAyNzoKLWlmKF8zLl91bkxpbmspewotXzMuX3VuTGluaygpOwotWGluaGEuX3N0b3BFdmVudChldik7Ci19Ci1icmVhazsKLWJyZWFrOwotY2FzZSA4OgotY2FzZSA0NjoKLWlmKCFldi5zaGlmdEtleSYmdGhpcy5oYW5kbGVCYWNrc3BhY2UoKSl7Ci1YaW5oYS5fc3RvcEV2ZW50KGV2KTsKLX0KLWRlZmF1bHQ6Ci1fMy5fdW5saW5rT25VbmRvPWZhbHNlOwotaWYocy5hbmNob3JOb2RlJiZzLmFuY2hvck5vZGUubm9kZVR5cGU9PTMpewotdmFyIGE9XzMuX2dldEZpcnN0QW5jZXN0b3IocywiYSIpOwotaWYoIWEpewotYnJlYWs7Ci19Ci1pZighYS5fdXBkYXRlQW5jaFRpbWVvdXQpewotaWYocy5hbmNob3JOb2RlLmRhdGEubWF0Y2goWGluaGEuUkVfZW1haWwpJiZhLmhyZWYubWF0Y2goIm1haWx0bzoiK3MuYW5jaG9yTm9kZS5kYXRhLnRyaW0oKSkpewotdmFyIF8xNj1zLmFuY2hvck5vZGU7Ci12YXIgXzE3PWZ1bmN0aW9uKCl7Ci1hLmhyZWY9Im1haWx0bzoiK18xNi5kYXRhLnRyaW0oKTsKLWEuX3VwZGF0ZUFuY2hUaW1lb3V0PXNldFRpbWVvdXQoXzE3LDI1MCk7Ci19OwotYS5fdXBkYXRlQW5jaFRpbWVvdXQ9c2V0VGltZW91dChfMTcsMTAwMCk7Ci1icmVhazsKLX0KLXZhciBtPXMuYW5jaG9yTm9kZS5kYXRhLm1hdGNoKFhpbmhhLlJFX3VybCk7Ci1pZihtJiZhLmhyZWYubWF0Y2gobmV3IFJlZ0V4cCgiaHR0cChzKT86Ly8iK1hpbmhhLmVzY2FwZVN0cmluZ0ZvclJlZ0V4cChzLmFuY2hvck5vZGUuZGF0YS50cmltKCkpKSkpewotdmFyIF8xOT1zLmFuY2hvck5vZGU7Ci12YXIgXzFhPWZ1bmN0aW9uKCl7Ci1tPV8xOS5kYXRhLm1hdGNoKFhpbmhhLlJFX3VybCk7Ci1pZihtKXsKLWEuaHJlZj0obVsxXT9tWzFdOiJodHRwOi8vIikrbVsyXTsKLX0KLWEuX3VwZGF0ZUFuY2hUaW1lb3V0PXNldFRpbWVvdXQoXzFhLDI1MCk7Ci19OwotYS5fdXBkYXRlQW5jaFRpbWVvdXQ9c2V0VGltZW91dChfMWEsMTAwMCk7Ci19Ci19Ci19Ci1icmVhazsKLX0KLXJldHVybiBmYWxzZTsKLX07Ci1PcGVyYS5wcm90b3R5cGUuaGFuZGxlQmFja3NwYWNlPWZ1bmN0aW9uKCl7Ci12YXIgXzFiPXRoaXMuZWRpdG9yOwotc2V0VGltZW91dChmdW5jdGlvbigpewotdmFyIHNlbD1fMWIuZ2V0U2VsZWN0aW9uKCk7Ci12YXIgXzFkPV8xYi5jcmVhdGVSYW5nZShzZWwpOwotdmFyIFNDPV8xZC5zdGFydENvbnRhaW5lcjsKLXZhciBTTz1fMWQuc3RhcnRPZmZzZXQ7Ci12YXIgRUM9XzFkLmVuZENvbnRhaW5lcjsKLXZhciBFTz1fMWQuZW5kT2Zmc2V0OwotdmFyIF8yMj1TQy5uZXh0U2libGluZzsKLWlmKFNDLm5vZGVUeXBlPT0zKXsKLVNDPVNDLnBhcmVudE5vZGU7Ci19Ci1pZighKC9cUy8udGVzdChTQy50YWdOYW1lKSkpewotdmFyIHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwotd2hpbGUoU0MuZmlyc3RDaGlsZCl7Ci1wLmFwcGVuZENoaWxkKFNDLmZpcnN0Q2hpbGQpOwotfQotU0MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocCxTQyk7Ci1YaW5oYS5yZW1vdmVGcm9tUGFyZW50KFNDKTsKLXZhciByPV8xZC5jbG9uZVJhbmdlKCk7Ci1yLnNldFN0YXJ0QmVmb3JlKF8yMik7Ci1yLnNldEVuZEFmdGVyKF8yMik7Ci1yLmV4dHJhY3RDb250ZW50cygpOwotc2VsLnJlbW92ZUFsbFJhbmdlcygpOwotc2VsLmFkZFJhbmdlKHIpOwotfQotfSwxMCk7Ci19OwotT3BlcmEucHJvdG90eXBlLmlud2FyZEh0bWw9ZnVuY3Rpb24oXzI1KXsKLV8yNT1fMjUucmVwbGFjZSgvPChcLz8pZGVsKFxzfD58XC8pL2lnLCI8JDFzdHJpa2UkMiIpOwotcmV0dXJuIF8yNTsKLX07Ci1PcGVyYS5wcm90b3R5cGUub3V0d2FyZEh0bWw9ZnVuY3Rpb24oXzI2KXsKLXJldHVybiBfMjY7Ci19OwotT3BlcmEucHJvdG90eXBlLm9uRXhlY0NvbW1hbmQ9ZnVuY3Rpb24oXzI3LFVJLF8yOSl7Ci1zd2l0Y2goXzI3KXsKLWNhc2UgInJlbW92ZWZvcm1hdCI6Ci12YXIgXzJhPXRoaXMuZWRpdG9yOwotdmFyIHNlbD1fMmEuZ2V0U2VsZWN0aW9uKCk7Ci12YXIgXzJjPV8yYS5zYXZlU2VsZWN0aW9uKHNlbCk7Ci12YXIgXzJkPV8yYS5jcmVhdGVSYW5nZShzZWwpOwotdmFyIGVscz1fMmEuX2RvYy5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7Ci12YXIgXzJmPShfMmQuc3RhcnRDb250YWluZXIubm9kZVR5cGU9PTEpP18yZC5zdGFydENvbnRhaW5lcjpfMmQuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZTsKLXZhciBpLGVsOwotaWYoc2VsLmlzQ29sbGFwc2VkKXsKLV8yZC5zZWxlY3ROb2RlQ29udGVudHMoXzJhLl9kb2MuYm9keSk7Ci19Ci1mb3IoaT0wO2k8ZWxzLmxlbmd0aDtpKyspewotZWw9ZWxzW2ldOwotaWYoXzJkLmlzUG9pbnRJblJhbmdlKGVsLDApfHwoZWxzW2ldPT1fMmYmJl8yZC5zdGFydE9mZnNldD09MCkpewotZWwucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpOwotfQotfQotdGhpcy5lZGl0b3IuX2RvYy5leGVjQ29tbWFuZChfMjcsVUksXzI5KTsKLV8yYS5yZXN0b3JlU2VsZWN0aW9uKF8yYyk7Ci1yZXR1cm4gdHJ1ZTsKLWJyZWFrOwotfQotcmV0dXJuIGZhbHNlOwotfTsKLU9wZXJhLnByb3RvdHlwZS5vbk1vdXNlRG93bj1mdW5jdGlvbihldil7Ci19OwotWGluaGEucHJvdG90eXBlLmluc2VydE5vZGVBdFNlbGVjdGlvbj1mdW5jdGlvbihfMzMpewotaWYoXzMzLm93bmVyRG9jdW1lbnQhPXRoaXMuX2RvYyl7Ci10cnl7Ci1fMzM9dGhpcy5fZG9jLmFkb3B0Tm9kZShfMzMpOwotfQotY2F0Y2goZSl7Ci19Ci19Ci10aGlzLmZvY3VzRWRpdG9yKCk7Ci12YXIgc2VsPXRoaXMuZ2V0U2VsZWN0aW9uKCk7Ci12YXIgXzM1PXRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsKLV8zNS5kZWxldGVDb250ZW50cygpOwotdmFyIF8zNj1fMzUuc3RhcnRDb250YWluZXI7Ci12YXIgcG9zPV8zNS5zdGFydE9mZnNldDsKLXZhciBfMzg9XzMzOwotc2VsLnJlbW92ZUFsbFJhbmdlcygpOwotc3dpdGNoKF8zNi5ub2RlVHlwZSl7Ci1jYXNlIDM6Ci1pZihfMzMubm9kZVR5cGU9PTMpewotXzM2Lmluc2VydERhdGEocG9zLF8zMy5kYXRhKTsKLV8zNT10aGlzLmNyZWF0ZVJhbmdlKCk7Ci1fMzUuc2V0RW5kKF8zNixwb3MrXzMzLmxlbmd0aCk7Ci1fMzUuc2V0U3RhcnQoXzM2LHBvcytfMzMubGVuZ3RoKTsKLXNlbC5hZGRSYW5nZShfMzUpOwotfWVsc2V7Ci1fMzY9XzM2LnNwbGl0VGV4dChwb3MpOwotaWYoXzMzLm5vZGVUeXBlPT0xMSl7Ci1fMzg9XzM4LmZpcnN0Q2hpbGQ7Ci19Ci1fMzYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoXzMzLF8zNik7Ci10aGlzLnNlbGVjdE5vZGVDb250ZW50cyhfMzgpOwotdGhpcy51cGRhdGVUb29sYmFyKCk7Ci19Ci1icmVhazsKLWNhc2UgMToKLWlmKF8zMy5ub2RlVHlwZT09MTEpewotXzM4PV8zOC5maXJzdENoaWxkOwotfQotXzM2Lmluc2VydEJlZm9yZShfMzMsXzM2LmNoaWxkTm9kZXNbcG9zXSk7Ci10aGlzLnNlbGVjdE5vZGVDb250ZW50cyhfMzgpOwotdGhpcy51cGRhdGVUb29sYmFyKCk7Ci1icmVhazsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0UGFyZW50RWxlbWVudD1mdW5jdGlvbihzZWwpewotaWYodHlwZW9mIHNlbD09InVuZGVmaW5lZCIpewotc2VsPXRoaXMuZ2V0U2VsZWN0aW9uKCk7Ci19Ci12YXIgXzNhPXRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsKLXRyeXsKLXZhciBwPV8zYS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjsKLWlmKCFfM2EuY29sbGFwc2VkJiZfM2Euc3RhcnRDb250YWluZXI9PV8zYS5lbmRDb250YWluZXImJl8zYS5zdGFydE9mZnNldC1fM2EuZW5kT2Zmc2V0PD0xJiZfM2Euc3RhcnRDb250YWluZXIuaGFzQ2hpbGROb2RlcygpKXsKLXA9XzNhLnN0YXJ0Q29udGFpbmVyLmNoaWxkTm9kZXNbXzNhLnN0YXJ0T2Zmc2V0XTsKLX0KLXdoaWxlKHAubm9kZVR5cGU9PTMpewotcD1wLnBhcmVudE5vZGU7Ci19Ci1yZXR1cm4gcDsKLX0KLWNhdGNoKGV4KXsKLXJldHVybiBudWxsOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5hY3RpdmVFbGVtZW50PWZ1bmN0aW9uKHNlbCl7Ci1pZigoc2VsPT09bnVsbCl8fHRoaXMuc2VsZWN0aW9uRW1wdHkoc2VsKSl7Ci1yZXR1cm4gbnVsbDsKLX0KLWlmKCFzZWwuaXNDb2xsYXBzZWQpewotaWYoc2VsLmFuY2hvck5vZGUuY2hpbGROb2Rlcy5sZW5ndGg+c2VsLmFuY2hvck9mZnNldCYmc2VsLmFuY2hvck5vZGUuY2hpbGROb2Rlc1tzZWwuYW5jaG9yT2Zmc2V0XS5ub2RlVHlwZT09MSl7Ci1yZXR1cm4gc2VsLmFuY2hvck5vZGUuY2hpbGROb2Rlc1tzZWwuYW5jaG9yT2Zmc2V0XTsKLX1lbHNlewotaWYoc2VsLmFuY2hvck5vZGUubm9kZVR5cGU9PTEpewotcmV0dXJuIHNlbC5hbmNob3JOb2RlOwotfWVsc2V7Ci1yZXR1cm4gbnVsbDsKLX0KLX0KLX0KLXJldHVybiBudWxsOwotfTsKLVhpbmhhLnByb3RvdHlwZS5zZWxlY3Rpb25FbXB0eT1mdW5jdGlvbihzZWwpewotaWYoIXNlbCl7Ci1yZXR1cm4gdHJ1ZTsKLX0KLWlmKHR5cGVvZiBzZWwuaXNDb2xsYXBzZWQhPSJ1bmRlZmluZWQiKXsKLXJldHVybiBzZWwuaXNDb2xsYXBzZWQ7Ci19Ci1yZXR1cm4gdHJ1ZTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuc2F2ZVNlbGVjdGlvbj1mdW5jdGlvbigpewotcmV0dXJuIHRoaXMuY3JlYXRlUmFuZ2UodGhpcy5nZXRTZWxlY3Rpb24oKSkuY2xvbmVSYW5nZSgpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5yZXN0b3JlU2VsZWN0aW9uPWZ1bmN0aW9uKF8zZSl7Ci12YXIgc2VsPXRoaXMuZ2V0U2VsZWN0aW9uKCk7Ci1zZWwucmVtb3ZlQWxsUmFuZ2VzKCk7Ci1zZWwuYWRkUmFuZ2UoXzNlKTsKLX07Ci1YaW5oYS5wcm90b3R5cGUuc2VsZWN0Tm9kZUNvbnRlbnRzPWZ1bmN0aW9uKF80MCxfNDEpewotdGhpcy5mb2N1c0VkaXRvcigpOwotdGhpcy5mb3JjZVJlZHJhdygpOwotdmFyIF80MjsKLXZhciBfNDM9dHlwZW9mIF80MT09InVuZGVmaW5lZCI/dHJ1ZTpmYWxzZTsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLV80Mj10aGlzLl9kb2MuY3JlYXRlUmFuZ2UoKTsKLWlmKF80MyYmXzQwLnRhZ05hbWUmJl80MC50YWdOYW1lLnRvTG93ZXJDYXNlKCkubWF0Y2goL3RhYmxlfGltZ3xpbnB1dHx0ZXh0YXJlYXxzZWxlY3QvKSl7Ci1fNDIuc2VsZWN0Tm9kZShfNDApOwotfWVsc2V7Ci1fNDIuc2VsZWN0Tm9kZUNvbnRlbnRzKF80MCk7Ci19Ci1zZWwucmVtb3ZlQWxsUmFuZ2VzKCk7Ci1zZWwuYWRkUmFuZ2UoXzQyKTsKLWlmKHR5cGVvZiBfNDEhPSJ1bmRlZmluZWQiKXsKLWlmKF80MSl7Ci1zZWwuY29sbGFwc2UoXzQyLnN0YXJ0Q29udGFpbmVyLF80Mi5zdGFydE9mZnNldCk7Ci19ZWxzZXsKLXNlbC5jb2xsYXBzZShfNDIuZW5kQ29udGFpbmVyLF80Mi5lbmRPZmZzZXQpOwotfQotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5pbnNlcnRIVE1MPWZ1bmN0aW9uKF80NSl7Ci12YXIgc2VsPXRoaXMuZ2V0U2VsZWN0aW9uKCk7Ci12YXIgXzQ3PXRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsKLXRoaXMuZm9jdXNFZGl0b3IoKTsKLXZhciBfNDg9dGhpcy5fZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLXZhciBkaXY9dGhpcy5fZG9jLmNyZWF0ZUVsZW1lbnQoImRpdiIpOwotZGl2LmlubmVySFRNTD1fNDU7Ci13aGlsZShkaXYuZmlyc3RDaGlsZCl7Ci1fNDguYXBwZW5kQ2hpbGQoZGl2LmZpcnN0Q2hpbGQpOwotfQotdmFyIF80YT10aGlzLmluc2VydE5vZGVBdFNlbGVjdGlvbihfNDgpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5nZXRTZWxlY3RlZEhUTUw9ZnVuY3Rpb24oKXsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLWlmKHNlbC5pc0NvbGxhcHNlZCl7Ci1yZXR1cm4gIiI7Ci19Ci12YXIgXzRjPXRoaXMuY3JlYXRlUmFuZ2Uoc2VsKTsKLXJldHVybiBYaW5oYS5nZXRIVE1MKF80Yy5jbG9uZUNvbnRlbnRzKCksZmFsc2UsdGhpcyk7Ci19OwotWGluaGEucHJvdG90eXBlLmdldFNlbGVjdGlvbj1mdW5jdGlvbigpewotdmFyIHNlbD10aGlzLl9pZnJhbWUuY29udGVudFdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKLWlmKHNlbCYmc2VsLmZvY3VzTm9kZSYmc2VsLmZvY3VzTm9kZS50YWdOYW1lJiZzZWwuZm9jdXNOb2RlLnRhZ05hbWU9PSJIVE1MIil7Ci12YXIgYm9kPXRoaXMuX2RvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdOwotdmFyIHJuZz10aGlzLmNyZWF0ZVJhbmdlKCk7Ci1ybmcuc2VsZWN0Tm9kZUNvbnRlbnRzKGJvZCk7Ci1zZWwucmVtb3ZlQWxsUmFuZ2VzKCk7Ci1zZWwuYWRkUmFuZ2Uocm5nKTsKLXNlbC5jb2xsYXBzZVRvRW5kKCk7Ci19Ci1yZXR1cm4gc2VsOwotfTsKLVhpbmhhLnByb3RvdHlwZS5jcmVhdGVSYW5nZT1mdW5jdGlvbihzZWwpewotdGhpcy5hY3RpdmF0ZUVkaXRvcigpOwotaWYodHlwZW9mIHNlbCE9InVuZGVmaW5lZCIpewotdHJ5ewotcmV0dXJuIHNlbC5nZXRSYW5nZUF0KDApOwotfQotY2F0Y2goZXgpewotcmV0dXJuIHRoaXMuX2RvYy5jcmVhdGVSYW5nZSgpOwotfQotfWVsc2V7Ci1yZXR1cm4gdGhpcy5fZG9jLmNyZWF0ZVJhbmdlKCk7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmlzS2V5RXZlbnQ9ZnVuY3Rpb24oXzUxKXsKLXJldHVybiBfNTEudHlwZT09ImtleXByZXNzIjsKLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0S2V5PWZ1bmN0aW9uKF81Mil7Ci1yZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShfNTIuY2hhckNvZGUpOwotfTsKLVhpbmhhLmdldE91dGVySFRNTD1mdW5jdGlvbihfNTMpewotcmV0dXJuIChuZXcgWE1MU2VyaWFsaXplcigpKS5zZXJpYWxpemVUb1N0cmluZyhfNTMpOwotfTsKLVhpbmhhLmNjPVN0cmluZy5mcm9tQ2hhckNvZGUoODI4Nik7Ci1YaW5oYS5wcm90b3R5cGUuc2V0Q0M9ZnVuY3Rpb24oXzU0KXsKLXZhciBjYz1YaW5oYS5jYzsKLXRyeXsKLWlmKF81ND09InRleHRhcmVhIil7Ci12YXIgdGE9dGhpcy5fdGV4dEFyZWE7Ci12YXIgXzU3PXRhLnNlbGVjdGlvblN0YXJ0OwotdmFyIF81OD10YS52YWx1ZS5zdWJzdHJpbmcoMCxfNTcpOwotdmFyIF81OT10YS52YWx1ZS5zdWJzdHJpbmcoXzU3LHRhLnZhbHVlLmxlbmd0aCk7Ci1pZihfNTkubWF0Y2goL15bXjxdKj4vKSl7Ci12YXIgXzVhPV81OS5pbmRleE9mKCI+IikrMTsKLXRhLnZhbHVlPV81OCtfNTkuc3Vic3RyaW5nKDAsXzVhKStjYytfNTkuc3Vic3RyaW5nKF81YSxfNTkubGVuZ3RoKTsKLX1lbHNlewotdGEudmFsdWU9XzU4K2NjK181OTsKLX0KLXRhLnZhbHVlPXRhLnZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCgiKCZbXiIrY2MrIl0qPykoIitjYysiKShbXiIrY2MrIl0qPzspIiksIiQxJDMkMiIpOwotdGEudmFsdWU9dGEudmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKCIoPHNjcmlwdFtePl0qPlteIitjYysiXSo/KSgiK2NjKyIpKFteIitjYysiXSo/PC9zY3JpcHQ+KSIpLCIkMSQzJDIiKTsKLXRhLnZhbHVlPXRhLnZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cCgiXihbXiIrY2MrIl0qKSgiK2NjKyIpKFteIitjYysiXSo8Ym9keVtePl0qPikoLio/KSIpLCIkMSQzJDIkNCIpOwotdGEudmFsdWU9dGEudmFsdWUucmVwbGFjZShjYywiPHNwYW4gaWQ9XCJYaW5oYU9wZXJhQ2FyZXRNYXJrZXJcIj5NQVJLPC9zcGFuPiIpOwotfWVsc2V7Ci12YXIgc2VsPXRoaXMuZ2V0U2VsZWN0aW9uKCk7Ci12YXIgXzVjPXRoaXMuX2RvYy5jcmVhdGVFbGVtZW50KCJzcGFuIik7Ci1fNWMuaWQ9IlhpbmhhT3BlcmFDYXJldE1hcmtlciI7Ci1zZWwuZ2V0UmFuZ2VBdCgwKS5pbnNlcnROb2RlKF81Yyk7Ci19Ci19Ci1jYXRjaChlKXsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuZmluZENDPWZ1bmN0aW9uKF81ZCl7Ci1pZihfNWQ9PSJ0ZXh0YXJlYSIpewotdmFyIHRhPXRoaXMuX3RleHRBcmVhOwotdmFyIHBvcz10YS52YWx1ZS5zZWFyY2goLyg8c3BhblxzK2lkPSJYaW5oYU9wZXJhQ2FyZXRNYXJrZXIiXHMqXC8/PigoXHN8KE1BUkspKSo8XC9zcGFuPik/KS8pOwotaWYocG9zPT0tMSl7Ci1yZXR1cm47Ci19Ci12YXIgY2M9UmVnRXhwLiQxOwotdmFyIGVuZD1wb3MrY2MubGVuZ3RoOwotdmFyIF82Mj10YS52YWx1ZS5zdWJzdHJpbmcoMCxwb3MpOwotdmFyIF82Mz10YS52YWx1ZS5zdWJzdHJpbmcoZW5kLHRhLnZhbHVlLmxlbmd0aCk7Ci10YS52YWx1ZT1fNjI7Ci10YS5zY3JvbGxUb3A9dGEuc2Nyb2xsSGVpZ2h0OwotdmFyIF82ND10YS5zY3JvbGxUb3A7Ci10YS52YWx1ZSs9XzYzOwotdGEuc2V0U2VsZWN0aW9uUmFuZ2UocG9zLHBvcyk7Ci10YS5mb2N1cygpOwotdGEuc2Nyb2xsVG9wPV82NDsKLX1lbHNlewotdmFyIF82NT10aGlzLl9kb2MuZ2V0RWxlbWVudEJ5SWQoIlhpbmhhT3BlcmFDYXJldE1hcmtlciIpOwotaWYoXzY1KXsKLXRoaXMuZm9jdXNFZGl0b3IoKTsKLXZhciBybmc9dGhpcy5jcmVhdGVSYW5nZSgpOwotcm5nLnNlbGVjdE5vZGUoXzY1KTsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLXNlbC5hZGRSYW5nZShybmcpOwotc2VsLmNvbGxhcHNlVG9TdGFydCgpOwotdGhpcy5zY3JvbGxUb0VsZW1lbnQoXzY1KTsKLV82NS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKF82NSk7Ci1yZXR1cm47Ci19Ci19Ci19OwotWGluaGEuZ2V0RG9jdHlwZT1mdW5jdGlvbihkb2MpewotdmFyIGQ9IiI7Ci1pZihkb2MuZG9jdHlwZSl7Ci1kKz0iPCFET0NUWVBFICIrZG9jLmRvY3R5cGUubmFtZSsiIFBVQkxJQyAiOwotZCs9ZG9jLmRvY3R5cGUucHVibGljSWQ/IlwiIitkb2MuZG9jdHlwZS5wdWJsaWNJZCsiXCIiOiIiOwotZCs9ZG9jLmRvY3R5cGUuc3lzdGVtSWQ/IiBcIiIrZG9jLmRvY3R5cGUuc3lzdGVtSWQrIlwiIjoiIjsKLWQrPSI+IjsKLX0KLXJldHVybiBkOwotfTsKLVhpbmhhLnByb3RvdHlwZS5fc3RhbmRhcmRJbml0SWZyYW1lPVhpbmhhLnByb3RvdHlwZS5pbml0SWZyYW1lOwotWGluaGEucHJvdG90eXBlLmluaXRJZnJhbWU9ZnVuY3Rpb24oKXsKLWlmKCF0aGlzLl9pZnJhbWVMb2FkRG9uZSl7Ci1pZih0aGlzLl9pZnJhbWUuY29udGVudFdpbmRvdyYmdGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cueGluaGFSZWFkeVRvUm9sbCl7Ci10aGlzLl9pZnJhbWVMb2FkRG9uZT10cnVlOwotdGhpcy5fc3RhbmRhcmRJbml0SWZyYW1lKCk7Ci19ZWxzZXsKLXZhciBfNmE9dGhpczsKLXNldFRpbWVvdXQoZnVuY3Rpb24oKXsKLV82YS5pbml0SWZyYW1lKCk7Ci19LDUpOwotfQotfQotfTsKLVhpbmhhLl9hZGRFdmVudE9wZXJhT3JpZz1YaW5oYS5fYWRkRXZlbnQ7Ci1YaW5oYS5fYWRkRXZlbnQ9ZnVuY3Rpb24oZWwsXzZjLF82ZCl7Ci1pZihlbC50YWdOYW1lJiZlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJzZWxlY3QiJiZfNmM9PSJjaGFuZ2UiKXsKLXJldHVybiBYaW5oYS5hZGREb20wRXZlbnQoZWwsXzZjLF82ZCk7Ci19Ci1yZXR1cm4gWGluaGEuX2FkZEV2ZW50T3BlcmFPcmlnKGVsLF82YyxfNmQpOwotfTsKLQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvV2ViS2l0L1dlYktpdC5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9tb2R1bGVzL1dlYktpdC9XZWJLaXQuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMzdlMWEuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL21vZHVsZXMvV2ViS2l0L1dlYktpdC5qcworKysgL2Rldi9udWxsCkBAIC0xLDQ4NSArMCwwIEBACi0vKiBUaGlzIGNvbXByZXNzZWQgZmlsZSBpcyBwYXJ0IG9mIFhpbmhhLiBGb3IgdW5jb21wcmVzc2VkIHNvdXJjZXMsIGZvcnVtLCBhbmQgYnVnIHJlcG9ydHMsIGdvIHRvIHhpbmhhLm9yZyAqLwotLyogVGhlIFVSTCBvZiB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgaXMgaHR0cDovL3N2bi54aW5oYS5vcmcvdHJ1bmsvbW9kdWxlcy9XZWJLaXQvV2ViS2l0LmpzICovCi1XZWJLaXQuX3BsdWdpbkluZm89e25hbWU6IldlYktpdCIsb3JpZ2luOiJYaW5oYSBDb3JlIix2ZXJzaW9uOiIkTGFzdENoYW5nZWRSZXZpc2lvbjogMTE0NiAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sIiQxIiksZGV2ZWxvcGVyOiJUaGUgWGluaGEgQ29yZSBEZXZlbG9wZXIgVGVhbSIsZGV2ZWxvcGVyX3VybDoiJEhlYWRVUkw6IGh0dHA6Ly9zdm4ueGluaGEub3JnL3RhZ3MvMC45Ni4xL21vZHVsZXMvV2ViS2l0L1dlYktpdC5qcyAkIi5yZXBsYWNlKC9eW146XSo6XHMqKC4qKVxzKlwkJC8sIiQxIiksc3BvbnNvcjoiIixzcG9uc29yX3VybDoiIixsaWNlbnNlOiJodG1sQXJlYSJ9OwotZnVuY3Rpb24gV2ViS2l0KF8xKXsKLXRoaXMuZWRpdG9yPV8xOwotXzEuV2ViS2l0PXRoaXM7Ci19OwotV2ViS2l0LnByb3RvdHlwZS5vbktleVByZXNzPWZ1bmN0aW9uKGV2KXsKLXZhciBfMz10aGlzLmVkaXRvcjsKLXZhciBzPV8zLmdldFNlbGVjdGlvbigpOwotaWYoXzMuaXNTaG9ydEN1dChldikpewotc3dpdGNoKF8zLmdldEtleShldikudG9Mb3dlckNhc2UoKSl7Ci1jYXNlICJ6IjoKLWlmKF8zLl91bkxpbmsmJl8zLl91bmxpbmtPblVuZG8pewotWGluaGEuX3N0b3BFdmVudChldik7Ci1fMy5fdW5MaW5rKCk7Ci1fMy51cGRhdGVUb29sYmFyKCk7Ci1yZXR1cm4gdHJ1ZTsKLX0KLWJyZWFrOwotY2FzZSAiYSI6Ci1icmVhazsKLWNhc2UgInYiOgotaWYoIV8zLmNvbmZpZy5odG1sYXJlYVBhc3RlKXsKLXJldHVybiB0cnVlOwotfQotYnJlYWs7Ci19Ci19Ci1zd2l0Y2goXzMuZ2V0S2V5KGV2KSl7Ci1jYXNlICIgIjoKLXZhciBfNT1mdW5jdGlvbihfNixfNyl7Ci12YXIgXzg9XzYubmV4dFNpYmxpbmc7Ci1pZih0eXBlb2YgXzc9PSJzdHJpbmciKXsKLV83PV8zLl9kb2MuY3JlYXRlRWxlbWVudChfNyk7Ci19Ci12YXIgYT1fNi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShfNyxfOCk7Ci1YaW5oYS5yZW1vdmVGcm9tUGFyZW50KF82KTsKLWEuYXBwZW5kQ2hpbGQoXzYpOwotXzguZGF0YT0iICIrXzguZGF0YTsKLXMuY29sbGFwc2UoXzgsMSk7Ci1fMy5fdW5MaW5rPWZ1bmN0aW9uKCl7Ci12YXIgdD1hLmZpcnN0Q2hpbGQ7Ci1hLnJlbW92ZUNoaWxkKHQpOwotYS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0LGEpOwotWGluaGEucmVtb3ZlRnJvbVBhcmVudChhKTsKLV8zLl91bkxpbms9bnVsbDsKLV8zLl91bmxpbmtPblVuZG89ZmFsc2U7Ci19OwotXzMuX3VubGlua09uVW5kbz10cnVlOwotcmV0dXJuIGE7Ci19OwotaWYoXzMuY29uZmlnLmNvbnZlcnRVcmxzVG9MaW5rcyYmcyYmcy5pc0NvbGxhcHNlZCYmcy5hbmNob3JOb2RlLm5vZGVUeXBlPT0zJiZzLmFuY2hvck5vZGUuZGF0YS5sZW5ndGg+MyYmcy5hbmNob3JOb2RlLmRhdGEuaW5kZXhPZigiLiIpPj0wKXsKLXZhciBfYj1zLmFuY2hvck5vZGUuZGF0YS5zdWJzdHJpbmcoMCxzLmFuY2hvck9mZnNldCkuc2VhcmNoKC9cU3s0LH0kLyk7Ci1pZihfYj09LTEpewotYnJlYWs7Ci19Ci1pZihfMy5fZ2V0Rmlyc3RBbmNlc3RvcihzLCJhIikpewotYnJlYWs7Ci19Ci12YXIgX2M9cy5hbmNob3JOb2RlLmRhdGEuc3Vic3RyaW5nKDAscy5hbmNob3JPZmZzZXQpLnJlcGxhY2UoL14uKj8oXFMqKSQvLCIkMSIpOwotdmFyIF9kPV9jLm1hdGNoKFhpbmhhLlJFX2VtYWlsKTsKLWlmKF9kKXsKLXZhciBfZT1zLmFuY2hvck5vZGU7Ci12YXIgX2Y9X2Uuc3BsaXRUZXh0KHMuYW5jaG9yT2Zmc2V0KTsKLXZhciBfMTA9X2Uuc3BsaXRUZXh0KF9iKTsKLV81KF8xMCwiYSIpLmhyZWY9Im1haWx0bzoiK19kWzBdOwotYnJlYWs7Ci19Ci1SRV9kYXRlPS8oWzAtOV0rXC4pKy87Ci1SRV9pcD0vKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPykvOwotdmFyIF8xMT1fYy5tYXRjaChYaW5oYS5SRV91cmwpOwotaWYoXzExKXsKLWlmKFJFX2RhdGUudGVzdChfYykpewotYnJlYWs7Ci19Ci12YXIgXzEyPXMuYW5jaG9yTm9kZTsKLXZhciBfMTM9XzEyLnNwbGl0VGV4dChzLmFuY2hvck9mZnNldCk7Ci12YXIgXzE0PV8xMi5zcGxpdFRleHQoX2IpOwotXzUoXzE0LCJhIikuaHJlZj0oXzExWzFdP18xMVsxXToiaHR0cDovLyIpK18xMVsyXTsKLWJyZWFrOwotfQotfQotYnJlYWs7Ci19Ci1zd2l0Y2goZXYua2V5Q29kZSl7Ci1jYXNlIDEzOgotaWYoZXYuc2hpZnRLZXkpewotfQotYnJlYWs7Ci1jYXNlIDI3OgotaWYoXzMuX3VuTGluayl7Ci1fMy5fdW5MaW5rKCk7Ci1YaW5oYS5fc3RvcEV2ZW50KGV2KTsKLX0KLWJyZWFrOwotY2FzZSA4OgotY2FzZSA0NjoKLWlmKCFldi5zaGlmdEtleSYmdGhpcy5oYW5kbGVCYWNrc3BhY2UoKSl7Ci1YaW5oYS5fc3RvcEV2ZW50KGV2KTsKLX0KLWJyZWFrOwotZGVmYXVsdDoKLV8zLl91bmxpbmtPblVuZG89ZmFsc2U7Ci1pZihzLmFuY2hvck5vZGUmJnMuYW5jaG9yTm9kZS5ub2RlVHlwZT09Myl7Ci12YXIgYT1fMy5fZ2V0Rmlyc3RBbmNlc3RvcihzLCJhIik7Ci1pZighYSl7Ci1icmVhazsKLX0KLWlmKCFhLl91cGRhdGVBbmNoVGltZW91dCl7Ci1pZihzLmFuY2hvck5vZGUuZGF0YS5tYXRjaChYaW5oYS5SRV9lbWFpbCkmJmEuaHJlZi5tYXRjaCgibWFpbHRvOiIrcy5hbmNob3JOb2RlLmRhdGEudHJpbSgpKSl7Ci12YXIgXzE2PXMuYW5jaG9yTm9kZTsKLXZhciBfMTc9ZnVuY3Rpb24oKXsKLWEuaHJlZj0ibWFpbHRvOiIrXzE2LmRhdGEudHJpbSgpOwotYS5fdXBkYXRlQW5jaFRpbWVvdXQ9c2V0VGltZW91dChfMTcsMjUwKTsKLX07Ci1hLl91cGRhdGVBbmNoVGltZW91dD1zZXRUaW1lb3V0KF8xNywxMDAwKTsKLWJyZWFrOwotfQotdmFyIG09cy5hbmNob3JOb2RlLmRhdGEubWF0Y2goWGluaGEuUkVfdXJsKTsKLWlmKG0mJmEuaHJlZi5tYXRjaChuZXcgUmVnRXhwKCJodHRwKHMpPzovLyIrWGluaGEuZXNjYXBlU3RyaW5nRm9yUmVnRXhwKHMuYW5jaG9yTm9kZS5kYXRhLnRyaW0oKSkpKSl7Ci12YXIgXzE5PXMuYW5jaG9yTm9kZTsKLXZhciBfMWE9ZnVuY3Rpb24oKXsKLW09XzE5LmRhdGEubWF0Y2goWGluaGEuUkVfdXJsKTsKLWlmKG0pewotYS5ocmVmPShtWzFdP21bMV06Imh0dHA6Ly8iKSttWzJdOwotfQotYS5fdXBkYXRlQW5jaFRpbWVvdXQ9c2V0VGltZW91dChfMWEsMjUwKTsKLX07Ci1hLl91cGRhdGVBbmNoVGltZW91dD1zZXRUaW1lb3V0KF8xYSwxMDAwKTsKLX0KLX0KLX0KLWJyZWFrOwotfQotcmV0dXJuIGZhbHNlOwotfTsKLVdlYktpdC5wcm90b3R5cGUuaGFuZGxlQmFja3NwYWNlPWZ1bmN0aW9uKCl7Ci12YXIgXzFiPXRoaXMuZWRpdG9yOwotc2V0VGltZW91dChmdW5jdGlvbigpewotdmFyIHNlbD1fMWIuZ2V0U2VsZWN0aW9uKCk7Ci12YXIgXzFkPV8xYi5jcmVhdGVSYW5nZShzZWwpOwotdmFyIFNDPV8xZC5zdGFydENvbnRhaW5lcjsKLXZhciBTTz1fMWQuc3RhcnRPZmZzZXQ7Ci12YXIgRUM9XzFkLmVuZENvbnRhaW5lcjsKLXZhciBFTz1fMWQuZW5kT2Zmc2V0OwotdmFyIF8yMj1TQy5uZXh0U2libGluZzsKLWlmKFNDLm5vZGVUeXBlPT0zKXsKLVNDPVNDLnBhcmVudE5vZGU7Ci19Ci1pZighKC9cUy8udGVzdChTQy50YWdOYW1lKSkpewotdmFyIHA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpOwotd2hpbGUoU0MuZmlyc3RDaGlsZCl7Ci1wLmFwcGVuZENoaWxkKFNDLmZpcnN0Q2hpbGQpOwotfQotU0MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocCxTQyk7Ci1YaW5oYS5yZW1vdmVGcm9tUGFyZW50KFNDKTsKLXZhciByPV8xZC5jbG9uZVJhbmdlKCk7Ci1yLnNldFN0YXJ0QmVmb3JlKF8yMik7Ci1yLnNldEVuZEFmdGVyKF8yMik7Ci1yLmV4dHJhY3RDb250ZW50cygpOwotc2VsLnJlbW92ZUFsbFJhbmdlcygpOwotc2VsLmFkZFJhbmdlKHIpOwotfQotfSwxMCk7Ci19OwotV2ViS2l0LnByb3RvdHlwZS5pbndhcmRIdG1sPWZ1bmN0aW9uKF8yNSl7Ci1yZXR1cm4gXzI1OwotfTsKLVdlYktpdC5wcm90b3R5cGUub3V0d2FyZEh0bWw9ZnVuY3Rpb24oXzI2KXsKLXJldHVybiBfMjY7Ci19OwotV2ViS2l0LnByb3RvdHlwZS5vbkV4ZWNDb21tYW5kPWZ1bmN0aW9uKF8yNyxVSSxfMjkpewotdGhpcy5lZGl0b3IuX2RvYy5leGVjQ29tbWFuZCgic3R5bGVXaXRoQ1NTIixmYWxzZSxmYWxzZSk7Ci1zd2l0Y2goXzI3KXsKLWNhc2UgInBhc3RlIjoKLWFsZXJ0KFhpbmhhLl9sYygiVGhlIFBhc3RlIGJ1dHRvbiBkb2VzIG5vdCB3b3JrIGluIHRoZSBTYWZhcmkgYnJvd3NlciBmb3Igc2VjdXJpdHkgcmVhc29ucy4gUHJlc3MgQ1RSTC1WIG9uIHlvdXIga2V5Ym9hcmQgdG8gcGFzdGUgZGlyZWN0bHkuIikpOwotcmV0dXJuIHRydWU7Ci1icmVhazsKLWNhc2UgInJlbW92ZWZvcm1hdCI6Ci12YXIgXzJhPXRoaXMuZWRpdG9yOwotdmFyIHNlbD1fMmEuZ2V0U2VsZWN0aW9uKCk7Ci12YXIgXzJjPV8yYS5zYXZlU2VsZWN0aW9uKHNlbCk7Ci12YXIgXzJkPV8yYS5jcmVhdGVSYW5nZShzZWwpOwotdmFyIGVscz1fMmEuX2RvYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwotZWxzPVhpbmhhLmNvbGxlY3Rpb25Ub0FycmF5KGVscyk7Ci12YXIgXzJmPShfMmQuc3RhcnRDb250YWluZXIubm9kZVR5cGU9PTEpP18yZC5zdGFydENvbnRhaW5lcjpfMmQuc3RhcnRDb250YWluZXIucGFyZW50Tm9kZTsKLXZhciBpLGVsLF8zMixfMzMsXzM0LHIyPV8yYS5fZG9jLmNyZWF0ZVJhbmdlKCk7Ci1mdW5jdGlvbiBjbGVhbihlbCl7Ci1pZihlbC5ub2RlVHlwZSE9MSl7Ci1yZXR1cm47Ci19Ci1lbC5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7Ci1mb3IodmFyIGo9MDtqPGVsLmNoaWxkTm9kZXMubGVuZ3RoO2orKyl7Ci1jbGVhbihlbC5jaGlsZE5vZGVzW2pdKTsKLX0KLWlmKChlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJzcGFuIiYmIWVsLmF0dHJpYnV0ZXMubGVuZ3RoKXx8ZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iZm9udCIpewotcjIuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsKTsKLV8zMz1yMi5leHRyYWN0Q29udGVudHMoKTsKLXdoaWxlKF8zMy5maXJzdENoaWxkKXsKLV8zND1fMzMucmVtb3ZlQ2hpbGQoXzMzLmZpcnN0Q2hpbGQpOwotZWwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoXzM0LGVsKTsKLX0KLWVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZWwpOwotfQotfTsKLWlmKHNlbC5pc0NvbGxhcHNlZCl7Ci1lbHM9XzJhLl9kb2MuYm9keS5jaGlsZE5vZGVzOwotZm9yKGk9MDtpPGVscy5sZW5ndGg7aSsrKXsKLWVsPWVsc1tpXTsKLWlmKGVsLm5vZGVUeXBlIT0xKXsKLWNvbnRpbnVlOwotfQotaWYoZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0ic3BhbiIpewotXzMyPV8yYS5jb252ZXJ0Tm9kZShlbCwiZGl2Iik7Ci1lbC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChfMzIsZWwpOwotZWw9XzMyOwotfQotY2xlYW4oZWwpOwotfQotfWVsc2V7Ci1mb3IoaT0wO2k8ZWxzLmxlbmd0aDtpKyspewotZWw9ZWxzW2ldOwotaWYoXzJkLmlzUG9pbnRJblJhbmdlKGVsLDApfHwoZWxzW2ldPT1fMmYmJl8yZC5zdGFydE9mZnNldD09MCkpewotY2xlYW4oZWwpOwotfQotfQotfQotcjIuZGV0YWNoKCk7Ci1fMmEucmVzdG9yZVNlbGVjdGlvbihfMmMpOwotcmV0dXJuIHRydWU7Ci1icmVhazsKLX0KLXJldHVybiBmYWxzZTsKLX07Ci1XZWJLaXQucHJvdG90eXBlLm9uTW91c2VEb3duPWZ1bmN0aW9uKGV2KXsKLWlmKGV2LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJociJ8fGV2LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJpbWciKXsKLXRoaXMuZWRpdG9yLnNlbGVjdE5vZGVDb250ZW50cyhldi50YXJnZXQpOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5pbnNlcnROb2RlQXRTZWxlY3Rpb249ZnVuY3Rpb24oXzM5KXsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLXZhciBfM2I9dGhpcy5jcmVhdGVSYW5nZShzZWwpOwotc2VsLnJlbW92ZUFsbFJhbmdlcygpOwotXzNiLmRlbGV0ZUNvbnRlbnRzKCk7Ci12YXIgXzNjPV8zYi5zdGFydENvbnRhaW5lcjsKLXZhciBwb3M9XzNiLnN0YXJ0T2Zmc2V0OwotdmFyIF8zZT1fMzk7Ci1zd2l0Y2goXzNjLm5vZGVUeXBlKXsKLWNhc2UgMzoKLWlmKF8zOS5ub2RlVHlwZT09Myl7Ci1fM2MuaW5zZXJ0RGF0YShwb3MsXzM5LmRhdGEpOwotXzNiPXRoaXMuY3JlYXRlUmFuZ2UoKTsKLV8zYi5zZXRFbmQoXzNjLHBvcytfMzkubGVuZ3RoKTsKLV8zYi5zZXRTdGFydChfM2MscG9zK18zOS5sZW5ndGgpOwotc2VsLmFkZFJhbmdlKF8zYik7Ci19ZWxzZXsKLV8zYz1fM2Muc3BsaXRUZXh0KHBvcyk7Ci1pZihfMzkubm9kZVR5cGU9PTExKXsKLV8zZT1fM2UuZmlyc3RDaGlsZDsKLX0KLV8zYy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShfMzksXzNjKTsKLXRoaXMuc2VsZWN0Tm9kZUNvbnRlbnRzKF8zZSk7Ci10aGlzLnVwZGF0ZVRvb2xiYXIoKTsKLX0KLWJyZWFrOwotY2FzZSAxOgotaWYoXzM5Lm5vZGVUeXBlPT0xMSl7Ci1fM2U9XzNlLmZpcnN0Q2hpbGQ7Ci19Ci1fM2MuaW5zZXJ0QmVmb3JlKF8zOSxfM2MuY2hpbGROb2Rlc1twb3NdKTsKLXRoaXMuc2VsZWN0Tm9kZUNvbnRlbnRzKF8zZSk7Ci10aGlzLnVwZGF0ZVRvb2xiYXIoKTsKLWJyZWFrOwotfQotfTsKLVhpbmhhLnByb3RvdHlwZS5nZXRQYXJlbnRFbGVtZW50PWZ1bmN0aW9uKHNlbCl7Ci1pZih0eXBlb2Ygc2VsPT0idW5kZWZpbmVkIil7Ci1zZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLX0KLXZhciBfNDA9dGhpcy5jcmVhdGVSYW5nZShzZWwpOwotdHJ5ewotdmFyIHA9XzQwLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyOwotaWYoIV80MC5jb2xsYXBzZWQmJl80MC5zdGFydENvbnRhaW5lcj09XzQwLmVuZENvbnRhaW5lciYmXzQwLnN0YXJ0T2Zmc2V0LV80MC5lbmRPZmZzZXQ8PTEmJl80MC5zdGFydENvbnRhaW5lci5oYXNDaGlsZE5vZGVzKCkpewotcD1fNDAuc3RhcnRDb250YWluZXIuY2hpbGROb2Rlc1tfNDAuc3RhcnRPZmZzZXRdOwotfQotd2hpbGUocC5ub2RlVHlwZT09Myl7Ci1wPXAucGFyZW50Tm9kZTsKLX0KLXJldHVybiBwOwotfQotY2F0Y2goZXgpewotcmV0dXJuIG51bGw7Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmFjdGl2ZUVsZW1lbnQ9ZnVuY3Rpb24oc2VsKXsKLWlmKChzZWw9PT1udWxsKXx8dGhpcy5zZWxlY3Rpb25FbXB0eShzZWwpKXsKLXJldHVybiBudWxsOwotfQotaWYoIXNlbC5pc0NvbGxhcHNlZCl7Ci1pZihzZWwuYW5jaG9yTm9kZS5jaGlsZE5vZGVzLmxlbmd0aD5zZWwuYW5jaG9yT2Zmc2V0JiZzZWwuYW5jaG9yTm9kZS5jaGlsZE5vZGVzW3NlbC5hbmNob3JPZmZzZXRdLm5vZGVUeXBlPT0xKXsKLXJldHVybiBzZWwuYW5jaG9yTm9kZS5jaGlsZE5vZGVzW3NlbC5hbmNob3JPZmZzZXRdOwotfWVsc2V7Ci1pZihzZWwuYW5jaG9yTm9kZS5ub2RlVHlwZT09MSl7Ci1yZXR1cm4gc2VsLmFuY2hvck5vZGU7Ci19ZWxzZXsKLXJldHVybiBudWxsOwotfQotfQotfQotcmV0dXJuIG51bGw7Ci19OwotWGluaGEucHJvdG90eXBlLnNlbGVjdGlvbkVtcHR5PWZ1bmN0aW9uKHNlbCl7Ci1pZighc2VsKXsKLXJldHVybiB0cnVlOwotfQotaWYodHlwZW9mIHNlbC5pc0NvbGxhcHNlZCE9InVuZGVmaW5lZCIpewotcmV0dXJuIHNlbC5pc0NvbGxhcHNlZDsKLX0KLXJldHVybiB0cnVlOwotfTsKLVhpbmhhLnByb3RvdHlwZS5zYXZlU2VsZWN0aW9uPWZ1bmN0aW9uKCl7Ci1yZXR1cm4gdGhpcy5jcmVhdGVSYW5nZSh0aGlzLmdldFNlbGVjdGlvbigpKS5jbG9uZVJhbmdlKCk7Ci19OwotWGluaGEucHJvdG90eXBlLnJlc3RvcmVTZWxlY3Rpb249ZnVuY3Rpb24oXzQ0KXsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLXNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKLXNlbC5hZGRSYW5nZShfNDQpOwotfTsKLVhpbmhhLnByb3RvdHlwZS5zZWxlY3ROb2RlQ29udGVudHM9ZnVuY3Rpb24oXzQ2LF80Nyl7Ci10aGlzLmZvY3VzRWRpdG9yKCk7Ci10aGlzLmZvcmNlUmVkcmF3KCk7Ci12YXIgXzQ4OwotdmFyIF80OT10eXBlb2YgXzQ3PT0idW5kZWZpbmVkIj90cnVlOmZhbHNlOwotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotXzQ4PXRoaXMuX2RvYy5jcmVhdGVSYW5nZSgpOwotaWYoXzQ5JiZfNDYudGFnTmFtZSYmXzQ2LnRhZ05hbWUudG9Mb3dlckNhc2UoKS5tYXRjaCgvdGFibGV8aW1nfGlucHV0fHRleHRhcmVhfHNlbGVjdC8pKXsKLV80OC5zZWxlY3ROb2RlKF80Nik7Ci19ZWxzZXsKLV80OC5zZWxlY3ROb2RlQ29udGVudHMoXzQ2KTsKLX0KLXNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKLXNlbC5hZGRSYW5nZShfNDgpOwotaWYodHlwZW9mIF80NyE9InVuZGVmaW5lZCIpewotaWYoXzQ3KXsKLXNlbC5jb2xsYXBzZShfNDguc3RhcnRDb250YWluZXIsXzQ4LnN0YXJ0T2Zmc2V0KTsKLX1lbHNlewotc2VsLmNvbGxhcHNlKF80OC5lbmRDb250YWluZXIsXzQ4LmVuZE9mZnNldCk7Ci19Ci19Ci19OwotWGluaGEucHJvdG90eXBlLmluc2VydEhUTUw9ZnVuY3Rpb24oXzRiKXsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLXZhciBfNGQ9dGhpcy5jcmVhdGVSYW5nZShzZWwpOwotdGhpcy5mb2N1c0VkaXRvcigpOwotdmFyIF80ZT10aGlzLl9kb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwotdmFyIGRpdj10aGlzLl9kb2MuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci1kaXYuaW5uZXJIVE1MPV80YjsKLXdoaWxlKGRpdi5maXJzdENoaWxkKXsKLV80ZS5hcHBlbmRDaGlsZChkaXYuZmlyc3RDaGlsZCk7Ci19Ci12YXIgXzUwPXRoaXMuaW5zZXJ0Tm9kZUF0U2VsZWN0aW9uKF80ZSk7Ci19OwotWGluaGEucHJvdG90eXBlLmdldFNlbGVjdGVkSFRNTD1mdW5jdGlvbigpewotdmFyIHNlbD10aGlzLmdldFNlbGVjdGlvbigpOwotaWYoc2VsLmlzQ29sbGFwc2VkKXsKLXJldHVybiAiIjsKLX0KLXZhciBfNTI9dGhpcy5jcmVhdGVSYW5nZShzZWwpOwotaWYoXzUyKXsKLXJldHVybiBYaW5oYS5nZXRIVE1MKF81Mi5jbG9uZUNvbnRlbnRzKCksZmFsc2UsdGhpcyk7Ci19ZWxzZXsKLXJldHVybiAiIjsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuZ2V0U2VsZWN0aW9uPWZ1bmN0aW9uKCl7Ci1yZXR1cm4gdGhpcy5faWZyYW1lLmNvbnRlbnRXaW5kb3cuZ2V0U2VsZWN0aW9uKCk7Ci19OwotWGluaGEucHJvdG90eXBlLmNyZWF0ZVJhbmdlPWZ1bmN0aW9uKHNlbCl7Ci10aGlzLmFjdGl2YXRlRWRpdG9yKCk7Ci1pZih0eXBlb2Ygc2VsIT0idW5kZWZpbmVkIil7Ci10cnl7Ci1yZXR1cm4gc2VsLmdldFJhbmdlQXQoMCk7Ci19Ci1jYXRjaChleCl7Ci1yZXR1cm4gdGhpcy5fZG9jLmNyZWF0ZVJhbmdlKCk7Ci19Ci19ZWxzZXsKLXJldHVybiB0aGlzLl9kb2MuY3JlYXRlUmFuZ2UoKTsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuaXNLZXlFdmVudD1mdW5jdGlvbihfNTQpewotcmV0dXJuIF81NC50eXBlPT0ia2V5ZG93biI7Ci19OwotWGluaGEucHJvdG90eXBlLmdldEtleT1mdW5jdGlvbihfNTUpewotdmFyIGtleT1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KF81NS5rZXlJZGVudGlmaWVyLnJlcGxhY2UoL15VXCsvLCIiKSwxNikpOwotaWYoXzU1LnNoaWZ0S2V5KXsKLXJldHVybiBrZXk7Ci19ZWxzZXsKLXJldHVybiBrZXkudG9Mb3dlckNhc2UoKTsKLX0KLX07Ci1YaW5oYS5nZXRPdXRlckhUTUw9ZnVuY3Rpb24oXzU3KXsKLXJldHVybiAobmV3IFhNTFNlcmlhbGl6ZXIoKSkuc2VyaWFsaXplVG9TdHJpbmcoXzU3KTsKLX07Ci1YaW5oYS5jYz1TdHJpbmcuZnJvbUNoYXJDb2RlKDgyODYpOwotWGluaGEucHJvdG90eXBlLnNldENDPWZ1bmN0aW9uKF81OCl7Ci12YXIgY2M9WGluaGEuY2M7Ci10cnl7Ci1pZihfNTg9PSJ0ZXh0YXJlYSIpewotdmFyIHRhPXRoaXMuX3RleHRBcmVhOwotdmFyIF81Yj10YS5zZWxlY3Rpb25TdGFydDsKLXZhciBfNWM9dGEudmFsdWUuc3Vic3RyaW5nKDAsXzViKTsKLXZhciBfNWQ9dGEudmFsdWUuc3Vic3RyaW5nKF81Yix0YS52YWx1ZS5sZW5ndGgpOwotaWYoXzVkLm1hdGNoKC9eW148XSo+LykpewotdmFyIF81ZT1fNWQuaW5kZXhPZigiPiIpKzE7Ci10YS52YWx1ZT1fNWMrXzVkLnN1YnN0cmluZygwLF81ZSkrY2MrXzVkLnN1YnN0cmluZyhfNWUsXzVkLmxlbmd0aCk7Ci19ZWxzZXsKLXRhLnZhbHVlPV81YytjYytfNWQ7Ci19Ci10YS52YWx1ZT10YS52YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoIigmW14iK2NjKyI7XSo/KSgiK2NjKyIpKFteIitjYysiXSo/OykiKSwiJDEkMyQyIik7Ci10YS52YWx1ZT10YS52YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoIig8c2NyaXB0W14+XSo+W14iK2NjKyJdKj8pKCIrY2MrIikoW14iK2NjKyJdKj88L3NjcmlwdD4pIiksIiQxJDMkMiIpOwotdGEudmFsdWU9dGEudmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKCJeKFteIitjYysiXSopKCIrY2MrIikoW14iK2NjKyJdKjxib2R5W14+XSo+KSguKj8pIiksIiQxJDMkMiQ0Iik7Ci19ZWxzZXsKLXZhciBzZWw9dGhpcy5nZXRTZWxlY3Rpb24oKTsKLXNlbC5nZXRSYW5nZUF0KDApLmluc2VydE5vZGUodGhpcy5fZG9jLmNyZWF0ZVRleHROb2RlKGNjKSk7Ci19Ci19Ci1jYXRjaChlKXsKLX0KLX07Ci1YaW5oYS5wcm90b3R5cGUuZmluZENDPWZ1bmN0aW9uKF82MCl7Ci12YXIgY2M9WGluaGEuY2M7Ci1pZihfNjA9PSJ0ZXh0YXJlYSIpewotdmFyIHRhPXRoaXMuX3RleHRBcmVhOwotdmFyIHBvcz10YS52YWx1ZS5pbmRleE9mKGNjKTsKLWlmKHBvcz09LTEpewotcmV0dXJuOwotfQotdmFyIGVuZD1wb3MrY2MubGVuZ3RoOwotdmFyIF82NT10YS52YWx1ZS5zdWJzdHJpbmcoMCxwb3MpOwotdmFyIF82Nj10YS52YWx1ZS5zdWJzdHJpbmcoZW5kLHRhLnZhbHVlLmxlbmd0aCk7Ci10YS52YWx1ZT1fNjU7Ci10YS5zY3JvbGxUb3A9dGEuc2Nyb2xsSGVpZ2h0OwotdmFyIF82Nz10YS5zY3JvbGxUb3A7Ci10YS52YWx1ZSs9XzY2OwotdGEuc2V0U2VsZWN0aW9uUmFuZ2UocG9zLHBvcyk7Ci10YS5mb2N1cygpOwotdGEuc2Nyb2xsVG9wPV82NzsKLX1lbHNlewotdmFyIF82OD10aGlzOwotdHJ5ewotdmFyIGRvYz10aGlzLl9kb2M7Ci1kb2MuYm9keS5pbm5lckhUTUw9ZG9jLmJvZHkuaW5uZXJIVE1MLnJlcGxhY2UobmV3IFJlZ0V4cChjYyksIjxzcGFuIGlkPVwiWGluaGFFZGl0aW5nUG9zdGlvblwiPjwvc3Bhbj4iKTsKLXZhciBfNmE9ZG9jLmdldEVsZW1lbnRCeUlkKCJYaW5oYUVkaXRpbmdQb3N0aW9uIik7Ci10aGlzLnNlbGVjdE5vZGVDb250ZW50cyhfNmEpOwotdGhpcy5zY3JvbGxUb0VsZW1lbnQoXzZhKTsKLV82YS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKF82YSk7Ci10aGlzLl9pZnJhbWUuY29udGVudFdpbmRvdy5mb2N1cygpOwotfQotY2F0Y2goZSl7Ci19Ci19Ci19OwotWGluaGEucHJvdG90eXBlLl9zdGFuZGFyZFRvZ2dsZUJvcmRlcnM9WGluaGEucHJvdG90eXBlLl90b2dnbGVCb3JkZXJzOwotWGluaGEucHJvdG90eXBlLl90b2dnbGVCb3JkZXJzPWZ1bmN0aW9uKCl7Ci12YXIgXzZiPXRoaXMuX3N0YW5kYXJkVG9nZ2xlQm9yZGVycygpOwotdmFyIF82Yz10aGlzLl9kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIlRBQkxFIik7Ci1mb3IodmFyIGk9MDtpPF82Yy5sZW5ndGg7aSsrKXsKLV82Y1tpXS5zdHlsZS5kaXNwbGF5PSJub25lIjsKLV82Y1tpXS5zdHlsZS5kaXNwbGF5PSJ0YWJsZSI7Ci19Ci1yZXR1cm4gXzZiOwotfTsKLVhpbmhhLmdldERvY3R5cGU9ZnVuY3Rpb24oZG9jKXsKLXZhciBkPSIiOwotaWYoZG9jLmRvY3R5cGUpewotZCs9IjwhRE9DVFlQRSAiK2RvYy5kb2N0eXBlLm5hbWUrIiBQVUJMSUMgIjsKLWQrPWRvYy5kb2N0eXBlLnB1YmxpY0lkPyJcIiIrZG9jLmRvY3R5cGUucHVibGljSWQrIlwiIjoiIjsKLWQrPWRvYy5kb2N0eXBlLnN5c3RlbUlkPyIgXCIiK2RvYy5kb2N0eXBlLnN5c3RlbUlkKyJcIiI6IiI7Ci1kKz0iPiI7Ci19Ci1yZXR1cm4gZDsKLX07Ci0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9wb3B1cHMvYmxhbmsuaHRtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9wb3B1cHMvYmxhbmsuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVkNWY3YS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvcG9wdXBzL2JsYW5rLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08aHRtbD48Ym9keSBvbmxvYWQ9IndpbmRvdy54aW5oYVJlYWR5VG9Sb2xsID0gdHJ1ZTsiPjwvYm9keT48L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3BvcHVwcy9lZGl0b3JfaGVscC5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3BvcHVwcy9lZGl0b3JfaGVscC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWE3YTg5Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9wb3B1cHMvZWRpdG9yX2hlbHAuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLTxodG1sPgotIDxoZWFkPgotICA8dGl0bGU+RWRpdG9yIEhlbHA8L3RpdGxlPgotICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJwb3B1cC5qcyI+PC9zY3JpcHQ+Ci0gIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9InBvcHVwLmNzcyIgLz4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotICB3aW5kb3cucmVzaXplVG8oNDAwLCA0ODApOwotWGluaGEgPSB3aW5kb3cub3BlbmVyLlhpbmhhOwotZnVuY3Rpb24gSW5pdCgpIHsKLSAgX19kbGdfdHJhbnNsYXRlKCdYaW5oYScpOwotICBfX2RsZ19pbml0KCk7Ci0KLX0KLQotCi1mdW5jdGlvbiBvbkNhbmNlbCgpIHsKLSAgX19kbGdfY2xvc2UobnVsbCk7Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci0KLTxib2R5IGNsYXNzPSJkaWFsb2ciIG9ubG9hZD0iSW5pdCgpIj4KLTxkaXYgY2xhc3M9InRpdGxlIj5FZGl0b3IgSGVscDwvZGl2PgotPHRhYmxlIHdpZHRoPSIxMDAlIiBzdHlsZT0iYmFja2dyb3VuZDogd2hpdGUgbm9uZSByZXBlYXQgc2Nyb2xsIDAlOyI+Ci0gIDx0aGVhZCBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgZ3JheTsgYmFja2dyb3VuZDogc2lsdmVyIG5vbmUgcmVwZWF0IHNjcm9sbCAwJTsiPgotICA8dHI+Ci0gICAgPHRoIGNvbHNwYW49IjIiPiAKLSAgICAgIDxzcGFuIHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+S2V5Ym9hcmQgc2hvcnRjdXRzPC9zcGFuPjxiciAvPgotICAgICAgPHNwYW4+VGhlIGVkaXRvciBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGtleSBjb21iaW5hdGlvbnM6PC9zcGFuPgotICAgIDwvdGg+Ci0gIDwvdHI+Ci0gIDwvdGhlYWQ+Ci0gIDx0Ym9keT4KLSAgPHRyPjx0ZD5FTlRFUjwvdGQ+PHRkPjxzcGFuPm5ldyBwYXJhZ3JhcGg8L3NwYW4+KCZsdDtQJmd0Oyk8L3RkPjwvdHI+Ci0gIDx0cj48dGQ+U0hJRlQtRU5URVI8L3RkPjx0ZD48c3Bhbj5pbnNlcnQgbGluZWJyZWFrPC9zcGFuPigmbHQ7QlImZ3Q7KTwvdGQ+PC90cj4KLSAgPHRyPjx0ZD5DVFJMLUE8L3RkPjx0ZD48c3Bhbj5TZWxlY3QgYWxsPC9zcGFuPjwvdGQ+PC90cj4KLSAgPHRyPjx0ZD5DVFJMLUI8L3RkPjx0ZD48c3Bhbj5Cb2xkPC9zcGFuPjwvdGQ+PC90cj4KLSAgPHRyPjx0ZD5DVFJMLUk8L3RkPjx0ZD48c3Bhbj5JdGFsaWM8L3NwYW4+PC90ZD48L3RyPgotICA8dHI+PHRkPkNUUkwtVTwvdGQ+PHRkPjxzcGFuPlVuZGVybGluZTwvc3Bhbj48L3RkPjwvdHI+Ci0gIDx0cj48dGQ+Q1RSTC1TPC90ZD48dGQ+PHNwYW4+U3RyaWtldGhyb3VnaDwvc3Bhbj48L3RkPjwvdHI+Ci0gIDx0cj48dGQ+Q1RSTC1MPC90ZD48dGQ+PHNwYW4+SnVzdGlmeSBMZWZ0PC9zcGFuPjwvdGQ+PC90cj4KLSAgPHRyPjx0ZD5DVFJMLUU8L3RkPjx0ZD48c3Bhbj5KdXN0aWZ5IENlbnRlcjwvc3Bhbj48L3RkPjwvdHI+Ci0gIDx0cj48dGQ+Q1RSTC1SPC90ZD48dGQ+PHNwYW4+SnVzdGlmeSBSaWdodDwvc3Bhbj48L3RkPjwvdHI+Ci0gIDx0cj48dGQ+Q1RSTC1KPC90ZD48dGQ+PHNwYW4+SnVzdGlmeSBGdWxsPC9zcGFuPjwvdGQ+PC90cj4KLSAgPHRyPjx0ZD5DVFJMLVo8L3RkPjx0ZD48c3Bhbj5VbmRvZXMgeW91ciBsYXN0IGFjdGlvbjwvc3Bhbj48L3RkPjwvdHI+Ci0gIDx0cj48dGQ+Q1RSTC1ZPC90ZD48dGQ+PHNwYW4+UmVkb2VzIHlvdXIgbGFzdCBhY3Rpb248L3NwYW4+PC90ZD48L3RyPgotICA8dHI+PHRkPkNUUkwtTjwvdGQ+PHRkPjxzcGFuPlNldCBmb3JtYXQgdG8gcGFyYWdyYXBoPC9zcGFuPjwvdGQ+PC90cj4KLSAgPHRyPjx0ZD5DVFJMLTAgKHplcm8pPC90ZD48dGQ+PHNwYW4+Q2xlYW4gY29udGVudCBwYXN0ZWQgZnJvbSBXb3JkPC9zcGFuPjwvdGQ+PC90cj4KLSAgPHRyPjx0ZD5DVFJMLTEgLi4gQ1RSTC02PC90ZD48dGQ+PHNwYW4+SGVhZGluZ3M8L3NwYW4+ICgmbHQ7aDEmZ3Q7IC4uICZsdDtoNiZndDspPC90ZD48L3RyPgotICA8dHI+PHRkPkNUUkwtWDwvdGQ+PHRkPjxzcGFuPkN1dCBzZWxlY3Rpb248L3NwYW4+PC90ZD48L3RyPgotICA8dHI+PHRkPkNUUkwtQzwvdGQ+PHRkPjxzcGFuPkNvcHkgc2VsZWN0aW9uPC9zcGFuPjwvdGQ+PC90cj4KLSAgPHRyPjx0ZD5DVFJMLVY8L3RkPjx0ZD48c3Bhbj5QYXN0ZSBmcm9tIGNsaXBib2FyZDwvc3Bhbj48L3RkPjwvdHI+Ci0gIDwvdGJvZHk+Ci08L3RhYmxlPgotPGRpdiBpZD0iYnV0dG9ucyI+Ci0gIDxidXR0b24gdHlwZT0iYnV0dG9uIiBuYW1lPSJjYW5jZWwiIG9uY2xpY2s9InJldHVybiBvbkNhbmNlbCgpOyI+Q2xvc2U8L2J1dHRvbj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9wb3B1cHMvcG9wdXAuY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3BvcHVwcy9wb3B1cC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiZjkzNTguLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3BvcHVwcy9wb3B1cC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi1odG1sLCBib2R5LCAuZGlhbG9nIHsKLSAgYmFja2dyb3VuZDogQnV0dG9uRmFjZTsKLSAgY29sb3I6IEJ1dHRvblRleHQ7Ci0gIGZvbnQ6IDExcHggVGFob21hLFZlcmRhbmEsc2Fucy1zZXJpZjsKLSAgbWFyZ2luOiAwcHg7Ci0gIHBhZGRpbmc6IDBweDsKLX0KLWJvZHkgeyBwYWRkaW5nOiA1cHg7IH0KLWZvcm0geyBwYWRkaW5nOiAwcHg7IG1hcmdpbjogMHB4OyB9Ci1mb3JtIHAgewotICBtYXJnaW4tdG9wOiA1cHg7Ci0gIG1hcmdpbi1ib3R0b206IDVweDsKLX0KLXRhYmxlIHsKLSAgZm9udDogMTFweCBUYWhvbWEsVmVyZGFuYSxzYW5zLXNlcmlmOwotfQotc2VsZWN0LCBpbnB1dCwgYnV0dG9uIHsgZm9udDogMTFweCBUYWhvbWEsVmVyZGFuYSxzYW5zLXNlcmlmOyB9Ci1idXR0b24geyB3aWR0aDogNzBweDsgfQotdGFibGUgLmxhYmVsIHsgdGV4dC1hbGlnbjogcmlnaHQ7IHdpZHRoOiA4ZW07IH0KLQotLmZsIHsgd2lkdGg6IDllbTsgZmxvYXQ6IGxlZnQ7IHBhZGRpbmc6IDJweCA1cHg7IHRleHQtYWxpZ246IHJpZ2h0OyB9Ci0uZnIgeyB3aWR0aDogN2VtOyBmbG9hdDogbGVmdDsgcGFkZGluZzogMnB4IDVweDsgdGV4dC1hbGlnbjogcmlnaHQ7IH0KLWZpZWxkc2V0IHsgcGFkZGluZzogMHB4IDEwcHggNXB4IDVweDsgfQotLnNwYWNlIHsgcGFkZGluZzogMnB4OyB9Ci0udGl0bGUgeyBiYWNrZ3JvdW5kOiAjZGRmOyBjb2xvcjogIzAwMDsgZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMTIwJTsgcGFkZGluZzogM3B4IDEwcHg7IG1hcmdpbi1ib3R0b206IDEwcHg7Ci1ib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IGxldHRlci1zcGFjaW5nOiAycHg7Ci19Ci0uYnV0dG9uQ29sb3IgewotICBwYWRkaW5nOiAxcHg7Ci0gIGN1cnNvcjogZGVmYXVsdDsKLSAgYm9yZGVyOiAxcHggc29saWQ7Ci0gIGJvcmRlci1jb2xvcjogQnV0dG9uSGlnaGxpZ2h0IEJ1dHRvblNoYWRvdyBCdXR0b25TaGFkb3cgQnV0dG9uSGlnaGxpZ2h0OwotfQotI2J1dHRvbnMgewotICAgICAgbWFyZ2luLXRvcDogMWVtOyAKLSAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjOTk5OwotICAgICAgcGFkZGluZzogMWVtOyAKLSAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9wb3B1cHMvcG9wdXAuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvcG9wdXBzL3BvcHVwLmpzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDM3YzhkLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9wb3B1cHMvcG9wdXAuanMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyogVGhpcyBjb21wcmVzc2VkIGZpbGUgaXMgcGFydCBvZiBYaW5oYS4gRm9yIHVuY29tcHJlc3NlZCBzb3VyY2VzLCBmb3J1bSwgYW5kIGJ1ZyByZXBvcnRzLCBnbyB0byB4aW5oYS5vcmcgKi8KLS8qIFRoZSBVUkwgb2YgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGlzIGh0dHA6Ly9zdm4ueGluaGEub3JnL3RydW5rL3BvcHVwcy9wb3B1cC5qcyAqLwotaWYodHlwZW9mIFhpbmhhPT0idW5kZWZpbmVkIil7Ci1YaW5oYT13aW5kb3cub3BlbmVyLlhpbmhhOwotfQotSFRNTEFyZWE9WGluaGE7Ci1mdW5jdGlvbiBnZXRBYnNvbHV0ZVBvcyhlbCl7Ci12YXIgcj17eDplbC5vZmZzZXRMZWZ0LHk6ZWwub2Zmc2V0VG9wfTsKLWlmKGVsLm9mZnNldFBhcmVudCl7Ci12YXIgXzM9Z2V0QWJzb2x1dGVQb3MoZWwub2Zmc2V0UGFyZW50KTsKLXIueCs9XzMueDsKLXIueSs9XzMueTsKLX0KLXJldHVybiByOwotfTsKLWZ1bmN0aW9uIGNvbWJvU2VsZWN0VmFsdWUoYyxfNSl7Ci12YXIgXzY9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgib3B0aW9uIik7Ci1mb3IodmFyIGk9XzYubGVuZ3RoOy0taT49MDspewotdmFyIG9wPV82W2ldOwotb3Auc2VsZWN0ZWQ9KG9wLnZhbHVlPT1fNSk7Ci19Ci1jLnZhbHVlPV81OwotfTsKLWZ1bmN0aW9uIF9fZGxnX29uY2xvc2UoKXsKLW9wZW5lci5EaWFsb2cuX3JldHVybihudWxsKTsKLX07Ci1mdW5jdGlvbiBfX2RsZ19pbml0KF85LF9hKXsKLV9feGluaGFfZGxnX2luaXQoX2EpOwotfTsKLWZ1bmN0aW9uIF9feGluaGFfZGxnX2luaXQoX2IpewotaWYod2luZG93Ll9fZGxnX2luaXRfZG9uZSl7Ci1yZXR1cm4gdHJ1ZTsKLX0KLWlmKHdpbmRvdy5vcGVuZXIuX2VkaXRvcl9za2luKXsKLXZhciBfYz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdOwotdmFyIF9kPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpbmsiKTsKLV9kLnR5cGU9InRleHQvY3NzIjsKLV9kLmhyZWY9d2luZG93Lm9wZW5lci5fZWRpdG9yX3VybCsic2tpbnMvIit3aW5kb3cub3BlbmVyLl9lZGl0b3Jfc2tpbisiL3NraW4uY3NzIjsKLV9kLnJlbD0ic3R5bGVzaGVldCI7Ci1fYy5hcHBlbmRDaGlsZChfZCk7Ci19Ci1pZighd2luZG93LmRpYWxvZ0FyZ3VtZW50cyYmb3BlbmVyLkRpYWxvZy5fYXJndW1lbnRzKXsKLXdpbmRvdy5kaWFsb2dBcmd1bWVudHM9b3BlbmVyLkRpYWxvZy5fYXJndW1lbnRzOwotfQotdmFyIF9lPVhpbmhhLnBhZ2VTaXplKHdpbmRvdyk7Ci1pZighX2IpewotX2I9e3dpZHRoOl9lLngsaGVpZ2h0Ol9lLnl9OwotfQotd2luZG93LnJlc2l6ZVRvKF9iLndpZHRoLF9iLmhlaWdodCk7Ci12YXIgX2Y9WGluaGEudmlld3BvcnRTaXplKHdpbmRvdyk7Ci13aW5kb3cucmVzaXplQnkoMCxfZS55LV9mLnkpOwotaWYoX2IudG9wJiZfYi5sZWZ0KXsKLXdpbmRvdy5tb3ZlVG8oX2IubGVmdCxfYi50b3ApOwotfWVsc2V7Ci1pZighWGluaGEuaXNfaWUpewotdmFyIHg9b3BlbmVyLnNjcmVlblgrKG9wZW5lci5vdXRlcldpZHRoLV9iLndpZHRoKS8yOwotdmFyIHk9b3BlbmVyLnNjcmVlblkrKG9wZW5lci5vdXRlckhlaWdodC1fYi5oZWlnaHQpLzI7Ci19ZWxzZXsKLXZhciB4PShzZWxmLnNjcmVlbi5hdmFpbFdpZHRoLV9iLndpZHRoKS8yOwotdmFyIHk9KHNlbGYuc2NyZWVuLmF2YWlsSGVpZ2h0LV9iLmhlaWdodCkvMjsKLX0KLXdpbmRvdy5tb3ZlVG8oeCx5KTsKLX0KLVhpbmhhLmFkZERvbTBFdmVudChkb2N1bWVudC5ib2R5LCJrZXlwcmVzcyIsX19kbGdfY2xvc2Vfb25fZXNjKTsKLXdpbmRvdy5fX2RsZ19pbml0X2RvbmU9dHJ1ZTsKLX07Ci1mdW5jdGlvbiBfX2RsZ190cmFuc2xhdGUoXzEyKXsKLXZhciBfMTM9WyJpbnB1dCIsInNlbGVjdCIsImxlZ2VuZCIsInNwYW4iLCJvcHRpb24iLCJ0ZCIsInRoIiwiYnV0dG9uIiwiZGl2IiwibGFiZWwiLCJhIiwiaW1nIl07Ci1mb3IodmFyIF8xND0wO18xNDxfMTMubGVuZ3RoOysrXzE0KXsKLXZhciBfMTU9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXzEzW18xNF0pOwotZm9yKHZhciBpPV8xNS5sZW5ndGg7LS1pPj0wOyl7Ci12YXIgXzE3PV8xNVtpXTsKLWlmKF8xNy5maXJzdENoaWxkJiZfMTcuZmlyc3RDaGlsZC5kYXRhKXsKLXZhciB0eHQ9WGluaGEuX2xjKF8xNy5maXJzdENoaWxkLmRhdGEsXzEyKTsKLWlmKHR4dCl7Ci1fMTcuZmlyc3RDaGlsZC5kYXRhPXR4dDsKLX0KLX0KLWlmKF8xNy50aXRsZSl7Ci12YXIgdHh0PVhpbmhhLl9sYyhfMTcudGl0bGUsXzEyKTsKLWlmKHR4dCl7Ci1fMTcudGl0bGU9dHh0OwotfQotfQotaWYoXzE3LnRhZ05hbWUudG9Mb3dlckNhc2UoKT09ImlucHV0IiYmKC9eKGJ1dHRvbnxzdWJtaXR8cmVzZXQpJC9pLnRlc3QoXzE3LnR5cGUpKSl7Ci12YXIgdHh0PVhpbmhhLl9sYyhfMTcudmFsdWUsXzEyKTsKLWlmKHR4dCl7Ci1fMTcudmFsdWU9dHh0OwotfQotfQotfQotfQotZG9jdW1lbnQudGl0bGU9WGluaGEuX2xjKGRvY3VtZW50LnRpdGxlLF8xMik7Ci19OwotZnVuY3Rpb24gX19kbGdfY2xvc2UodmFsKXsKLW9wZW5lci5EaWFsb2cuX3JldHVybih2YWwpOwotd2luZG93LmNsb3NlKCk7Ci19OwotZnVuY3Rpb24gX19kbGdfY2xvc2Vfb25fZXNjKGV2KXsKLWV2fHwoZXY9d2luZG93LmV2ZW50KTsKLWlmKGV2LmtleUNvZGU9PTI3KXsKLV9fZGxnX2Nsb3NlKG51bGwpOwotcmV0dXJuIGZhbHNlOwotfQotcmV0dXJuIHRydWU7Ci19OwotCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvcG9wdXBzL3NlbGVjdF9jb2xvci5odG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3BvcHVwcy9zZWxlY3RfY29sb3IuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODllMGU2Ny4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvcG9wdXBzL3NlbGVjdF9jb2xvci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzU5ICswLDAgQEAKLTwhLS08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4tLT4KLTxodG1sPjxoZWFkPjx0aXRsZT5TZWxlY3QgQ29sb3I8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0icG9wdXAuanMiPjwvc2NyaXB0PgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgotd2luZG93LnJlc2l6ZVRvKDI0MCwgMTgyKTsKLS8vIHJ1biBvbiBwYWdlIGxvYWQKLWZ1bmN0aW9uIEluaXQoKQotewotICBfX2RsZ190cmFuc2xhdGUoJ1hpbmhhJyk7Ci0gIF9fZGxnX2luaXQoKTsKLSAgWGluaGEuYWRkRG9tMEV2ZW50KGRvY3VtZW50LCAna2V5cHJlc3MnLCBfX2RsZ19jbG9zZV9vbl9lc2MpOwotCi0gIHZhciBjb2xvciA9IHdpbmRvdy5kaWFsb2dBcmd1bWVudHM7Ci0gIGNvbG9yID0gVmFsaWRhdGVDb2xvcihjb2xvcikgfHwgJzAwMDAwMCc7Ci0gIFZpZXcoY29sb3IpOwotfQotLy8gcHJldmlldyBjb2xvcgotZnVuY3Rpb24gVmlldyhjb2xvcikKLXsKLSAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkNvbG9yUHJldmlldyIpLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjJyArIGNvbG9yOwotICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQ29sb3JIZXgiKS52YWx1ZSA9ICcjJyArIGNvbG9yOwotfQotLy8gc2VsZWN0IGNvbG9yCi1mdW5jdGlvbiBTZXQoc3RyaW5nKQotewotICB2YXIgY29sb3IgPSBWYWxpZGF0ZUNvbG9yKHN0cmluZyk7Ci0gIGlmIChjb2xvciA9PSBudWxsKQotICB7Ci0gICAgYWxlcnQoIkludmFsaWQgY29sb3IgY29kZTogIiArIHN0cmluZyk7Ci0gIH0KLSAgZWxzZQotICB7Ci0gICAgVmlldyhjb2xvcik7Ci0gICAgX19kbGdfY2xvc2UoY29sb3IpOwotICB9Ci19Ci0vLyByZXR1cm4gdmFsaWQgY29sb3IgY29kZQotZnVuY3Rpb24gVmFsaWRhdGVDb2xvcihzdHJpbmcpCi17Ci0gIHN0cmluZyA9IHN0cmluZyB8fCAnJzsKLSAgc3RyaW5nID0gc3RyaW5nICsgIiI7Ci0gIHN0cmluZyA9IHN0cmluZy50b1VwcGVyQ2FzZSgpOwotICB2YXIgY2hhcnMgPSAnMDEyMzQ1Njc4OUFCQ0RFRic7Ci0gIHZhciBvdXQgICA9ICcnOwotICAvLyByZW1vdmUgaW52YWxpZCBjb2xvciBjaGFycwotICBmb3IgKHZhciBpPTA7IGk8c3RyaW5nLmxlbmd0aDsgaSsrKQotICB7Ci0gICAgdmFyIHNjaGFyID0gc3RyaW5nLmNoYXJBdChpKTsKLSAgICBpZiAoY2hhcnMuaW5kZXhPZihzY2hhcikgIT0gLTEpIG91dCArPSBzY2hhcjsKLSAgfQotICAvLyBjaGVjayBsZW5ndGgKLSAgaWYgKG91dC5sZW5ndGggIT0gNikgcmV0dXJuIG51bGw7Ci0gIHJldHVybiBvdXQ7Ci19Ci08L3NjcmlwdD4KLTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ci1ib2R5IHsgYmFja2dyb3VuZDpidXR0b25mYWNlOyBtYXJnaW46MDsgcGFkZGluZzowOyB9Ci1mb3JtIHsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgfQotI2NvbnRhaW5lcnByZXZpZXcgdGQgeyBiYWNrZ3JvdW5kOmJ1dHRvbmZhY2U7IH0KLSNwcmV2aWV3IHsgYmFja2dyb3VuZC1jb2xvcjojMDAwMDAwOyBwYWRkaW5nOjFweDsgaGVpZ2h0OjIxcHg7IHdpZHRoOjUwcHg7IH0KLSNDb2xvclByZXZpZXcgeyBoZWlnaHQ6MTAwJTsgd2lkdGg6MTAwJTsgfQotI0NvbG9ySGV4IHsgZm9udC1zaXplOjEycHg7IGJhY2tncm91bmQ6YnV0dG9uZmFjZTsgYm9yZGVyOjA7IH0KLSNwYWxldHRlY29sb3IgeyBjdXJzb3I6cG9pbnRlcjsgfQotI3BhbGV0dGVjb2xvciB0ZCB7IHdpZHRoOjEwcHg7IGhlaWdodDoxMHB4OyB9Ci08L3N0eWxlPgotPC9oZWFkPgotPGJvZHkgY2xhc3M9ImRpYWxvZyIgb25sb2FkPSJJbml0KCkiPgotCi08Zm9ybSBhY3Rpb249IiMiIG1ldGhvZD0iZ2V0IiBvbnN1Ym1pdD0iU2V0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdDb2xvckhleCcpLnZhbHVlKTsgcmV0dXJuIGZhbHNlOyI+Ci08dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiIHdpZHRoPSIxMDAlIiBpZD0iY29udGFpbmVycHJldmlldyI+Ci0gPHRyPgotICA8dGQgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ij48ZGl2IGlkPSJwcmV2aWV3Ij48ZGl2IGlkPSJDb2xvclByZXZpZXciPjwvZGl2PjwvZGl2PjwvdGQ+Ci0gIDx0ZCBzdHlsZT0idmVydGljYWwtYWxpZ246IG1pZGRsZTsiIHdpZHRoPSIxMDAlIj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ29sb3JIZXgiCi0gICAgaWQ9IkNvbG9ySGV4IiB2YWx1ZT0iIiBzaXplPTE1PjwvdGQ+Ci0gPC90cj4KLTwvdGFibGU+Ci08L2Zvcm0+Ci0KLTx0YWJsZSBpZD0icGFsZXR0ZWNvbG9yIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiMwMDAwMDAiPgotPHRyPgotPHRkIGJnY29sb3I9IiMwMDAwMDAiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDAwMDAnKSIgb25jbGljaz0iU2V0KCcwMDAwMDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDAwMDAwIiBvbm1vdXNlb3Zlcj0iVmlldygnMDAwMDAwJykiIG9uY2xpY2s9IlNldCgnMDAwMDAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwMDAwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzAwMDAwMCcpIiBvbmNsaWNrPSJTZXQoJzAwMDAwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMDAwMDAiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDAwMDAnKSIgb25jbGljaz0iU2V0KCcwMDAwMDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDAzMzAwIiBvbm1vdXNlb3Zlcj0iVmlldygnMDAzMzAwJykiIG9uY2xpY2s9IlNldCgnMDAzMzAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwNjYwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzAwNjYwMCcpIiBvbmNsaWNrPSJTZXQoJzAwNjYwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMDk5MDAiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDk5MDAnKSIgb25jbGljaz0iU2V0KCcwMDk5MDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDBDQzAwIiBvbm1vdXNlb3Zlcj0iVmlldygnMDBDQzAwJykiIG9uY2xpY2s9IlNldCgnMDBDQzAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwRkYwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzAwRkYwMCcpIiBvbmNsaWNrPSJTZXQoJzAwRkYwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiMzMzAwMDAiIG9ubW91c2VvdmVyPSJWaWV3KCczMzAwMDAnKSIgb25jbGljaz0iU2V0KCczMzAwMDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMzMzMzAwIiBvbm1vdXNlb3Zlcj0iVmlldygnMzMzMzAwJykiIG9uY2xpY2s9IlNldCgnMzMzMzAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzMzNjYwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzMzNjYwMCcpIiBvbmNsaWNrPSJTZXQoJzMzNjYwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiMzMzk5MDAiIG9ubW91c2VvdmVyPSJWaWV3KCczMzk5MDAnKSIgb25jbGljaz0iU2V0KCczMzk5MDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMzNDQzAwIiBvbm1vdXNlb3Zlcj0iVmlldygnMzNDQzAwJykiIG9uY2xpY2s9IlNldCgnMzNDQzAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzMzRkYwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzMzRkYwMCcpIiBvbmNsaWNrPSJTZXQoJzMzRkYwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiM2NjAwMDAiIG9ubW91c2VvdmVyPSJWaWV3KCc2NjAwMDAnKSIgb25jbGljaz0iU2V0KCc2NjAwMDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjNjYzMzAwIiBvbm1vdXNlb3Zlcj0iVmlldygnNjYzMzAwJykiIG9uY2xpY2s9IlNldCgnNjYzMzAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzY2NjYwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzY2NjYwMCcpIiBvbmNsaWNrPSJTZXQoJzY2NjYwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiM2Njk5MDAiIG9ubW91c2VvdmVyPSJWaWV3KCc2Njk5MDAnKSIgb25jbGljaz0iU2V0KCc2Njk5MDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjNjZDQzAwIiBvbm1vdXNlb3Zlcj0iVmlldygnNjZDQzAwJykiIG9uY2xpY2s9IlNldCgnNjZDQzAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzY2RkYwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzY2RkYwMCcpIiBvbmNsaWNrPSJTZXQoJzY2RkYwMCcpIj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBiZ2NvbG9yPSIjMDAwMDAwIiBvbm1vdXNlb3Zlcj0iVmlldygnMDAwMDAwJykiIG9uY2xpY2s9IlNldCgnMDAwMDAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzMzMzMzMyIgb25tb3VzZW92ZXI9IlZpZXcoJzMzMzMzMycpIiBvbmNsaWNrPSJTZXQoJzMzMzMzMycpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMDAwMDAiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDAwMDAnKSIgb25jbGljaz0iU2V0KCcwMDAwMDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDAwMDMzIiBvbm1vdXNlb3Zlcj0iVmlldygnMDAwMDMzJykiIG9uY2xpY2s9IlNldCgnMDAwMDMzJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwMzMzMyIgb25tb3VzZW92ZXI9IlZpZXcoJzAwMzMzMycpIiBvbmNsaWNrPSJTZXQoJzAwMzMzMycpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMDY2MzMiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDY2MzMnKSIgb25jbGljaz0iU2V0KCcwMDY2MzMnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDA5OTMzIiBvbm1vdXNlb3Zlcj0iVmlldygnMDA5OTMzJykiIG9uY2xpY2s9IlNldCgnMDA5OTMzJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwQ0MzMyIgb25tb3VzZW92ZXI9IlZpZXcoJzAwQ0MzMycpIiBvbmNsaWNrPSJTZXQoJzAwQ0MzMycpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMEZGMzMiIG9ubW91c2VvdmVyPSJWaWV3KCcwMEZGMzMnKSIgb25jbGljaz0iU2V0KCcwMEZGMzMnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMzMwMDMzIiBvbm1vdXNlb3Zlcj0iVmlldygnMzMwMDMzJykiIG9uY2xpY2s9IlNldCgnMzMwMDMzJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzMzMzMzMyIgb25tb3VzZW92ZXI9IlZpZXcoJzMzMzMzMycpIiBvbmNsaWNrPSJTZXQoJzMzMzMzMycpIj48L3RkPgotPHRkIGJnY29sb3I9IiMzMzY2MzMiIG9ubW91c2VvdmVyPSJWaWV3KCczMzY2MzMnKSIgb25jbGljaz0iU2V0KCczMzY2MzMnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMzM5OTMzIiBvbm1vdXNlb3Zlcj0iVmlldygnMzM5OTMzJykiIG9uY2xpY2s9IlNldCgnMzM5OTMzJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzMzQ0MzMyIgb25tb3VzZW92ZXI9IlZpZXcoJzMzQ0MzMycpIiBvbmNsaWNrPSJTZXQoJzMzQ0MzMycpIj48L3RkPgotPHRkIGJnY29sb3I9IiMzM0ZGMzMiIG9ubW91c2VvdmVyPSJWaWV3KCczM0ZGMzMnKSIgb25jbGljaz0iU2V0KCczM0ZGMzMnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjNjYwMDMzIiBvbm1vdXNlb3Zlcj0iVmlldygnNjYwMDMzJykiIG9uY2xpY2s9IlNldCgnNjYwMDMzJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzY2MzMzMyIgb25tb3VzZW92ZXI9IlZpZXcoJzY2MzMzMycpIiBvbmNsaWNrPSJTZXQoJzY2MzMzMycpIj48L3RkPgotPHRkIGJnY29sb3I9IiM2NjY2MzMiIG9ubW91c2VvdmVyPSJWaWV3KCc2NjY2MzMnKSIgb25jbGljaz0iU2V0KCc2NjY2MzMnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjNjY5OTMzIiBvbm1vdXNlb3Zlcj0iVmlldygnNjY5OTMzJykiIG9uY2xpY2s9IlNldCgnNjY5OTMzJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzY2Q0MzMyIgb25tb3VzZW92ZXI9IlZpZXcoJzY2Q0MzMycpIiBvbmNsaWNrPSJTZXQoJzY2Q0MzMycpIj48L3RkPgotPHRkIGJnY29sb3I9IiM2NkZGMzMiIG9ubW91c2VvdmVyPSJWaWV3KCc2NkZGMzMnKSIgb25jbGljaz0iU2V0KCc2NkZGMzMnKSI+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgYmdjb2xvcj0iIzAwMDAwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzAwMDAwMCcpIiBvbmNsaWNrPSJTZXQoJzAwMDAwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiM2NjY2NjYiIG9ubW91c2VvdmVyPSJWaWV3KCc2NjY2NjYnKSIgb25jbGljaz0iU2V0KCc2NjY2NjYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDAwMDAwIiBvbm1vdXNlb3Zlcj0iVmlldygnMDAwMDAwJykiIG9uY2xpY2s9IlNldCgnMDAwMDAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwMDA2NiIgb25tb3VzZW92ZXI9IlZpZXcoJzAwMDA2NicpIiBvbmNsaWNrPSJTZXQoJzAwMDA2NicpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMDMzNjYiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDMzNjYnKSIgb25jbGljaz0iU2V0KCcwMDMzNjYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDA2NjY2IiBvbm1vdXNlb3Zlcj0iVmlldygnMDA2NjY2JykiIG9uY2xpY2s9IlNldCgnMDA2NjY2JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwOTk2NiIgb25tb3VzZW92ZXI9IlZpZXcoJzAwOTk2NicpIiBvbmNsaWNrPSJTZXQoJzAwOTk2NicpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMENDNjYiIG9ubW91c2VvdmVyPSJWaWV3KCcwMENDNjYnKSIgb25jbGljaz0iU2V0KCcwMENDNjYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDBGRjY2IiBvbm1vdXNlb3Zlcj0iVmlldygnMDBGRjY2JykiIG9uY2xpY2s9IlNldCgnMDBGRjY2JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzMzMDA2NiIgb25tb3VzZW92ZXI9IlZpZXcoJzMzMDA2NicpIiBvbmNsaWNrPSJTZXQoJzMzMDA2NicpIj48L3RkPgotPHRkIGJnY29sb3I9IiMzMzMzNjYiIG9ubW91c2VvdmVyPSJWaWV3KCczMzMzNjYnKSIgb25jbGljaz0iU2V0KCczMzMzNjYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMzM2NjY2IiBvbm1vdXNlb3Zlcj0iVmlldygnMzM2NjY2JykiIG9uY2xpY2s9IlNldCgnMzM2NjY2JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzMzOTk2NiIgb25tb3VzZW92ZXI9IlZpZXcoJzMzOTk2NicpIiBvbmNsaWNrPSJTZXQoJzMzOTk2NicpIj48L3RkPgotPHRkIGJnY29sb3I9IiMzM0NDNjYiIG9ubW91c2VvdmVyPSJWaWV3KCczM0NDNjYnKSIgb25jbGljaz0iU2V0KCczM0NDNjYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMzNGRjY2IiBvbm1vdXNlb3Zlcj0iVmlldygnMzNGRjY2JykiIG9uY2xpY2s9IlNldCgnMzNGRjY2JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzY2MDA2NiIgb25tb3VzZW92ZXI9IlZpZXcoJzY2MDA2NicpIiBvbmNsaWNrPSJTZXQoJzY2MDA2NicpIj48L3RkPgotPHRkIGJnY29sb3I9IiM2NjMzNjYiIG9ubW91c2VvdmVyPSJWaWV3KCc2NjMzNjYnKSIgb25jbGljaz0iU2V0KCc2NjMzNjYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjNjY2NjY2IiBvbm1vdXNlb3Zlcj0iVmlldygnNjY2NjY2JykiIG9uY2xpY2s9IlNldCgnNjY2NjY2JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzY2OTk2NiIgb25tb3VzZW92ZXI9IlZpZXcoJzY2OTk2NicpIiBvbmNsaWNrPSJTZXQoJzY2OTk2NicpIj48L3RkPgotPHRkIGJnY29sb3I9IiM2NkNDNjYiIG9ubW91c2VvdmVyPSJWaWV3KCc2NkNDNjYnKSIgb25jbGljaz0iU2V0KCc2NkNDNjYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjNjZGRjY2IiBvbm1vdXNlb3Zlcj0iVmlldygnNjZGRjY2JykiIG9uY2xpY2s9IlNldCgnNjZGRjY2JykiPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGJnY29sb3I9IiMwMDAwMDAiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDAwMDAnKSIgb25jbGljaz0iU2V0KCcwMDAwMDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjOTk5OTk5IiBvbm1vdXNlb3Zlcj0iVmlldygnOTk5OTk5JykiIG9uY2xpY2s9IlNldCgnOTk5OTk5JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwMDAwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzAwMDAwMCcpIiBvbmNsaWNrPSJTZXQoJzAwMDAwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMDAwOTkiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDAwOTknKSIgb25jbGljaz0iU2V0KCcwMDAwOTknKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDAzMzk5IiBvbm1vdXNlb3Zlcj0iVmlldygnMDAzMzk5JykiIG9uY2xpY2s9IlNldCgnMDAzMzk5JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwNjY5OSIgb25tb3VzZW92ZXI9IlZpZXcoJzAwNjY5OScpIiBvbmNsaWNrPSJTZXQoJzAwNjY5OScpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMDk5OTkiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDk5OTknKSIgb25jbGljaz0iU2V0KCcwMDk5OTknKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDBDQzk5IiBvbm1vdXNlb3Zlcj0iVmlldygnMDBDQzk5JykiIG9uY2xpY2s9IlNldCgnMDBDQzk5JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwRkY5OSIgb25tb3VzZW92ZXI9IlZpZXcoJzAwRkY5OScpIiBvbmNsaWNrPSJTZXQoJzAwRkY5OScpIj48L3RkPgotPHRkIGJnY29sb3I9IiMzMzAwOTkiIG9ubW91c2VvdmVyPSJWaWV3KCczMzAwOTknKSIgb25jbGljaz0iU2V0KCczMzAwOTknKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMzMzMzk5IiBvbm1vdXNlb3Zlcj0iVmlldygnMzMzMzk5JykiIG9uY2xpY2s9IlNldCgnMzMzMzk5JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzMzNjY5OSIgb25tb3VzZW92ZXI9IlZpZXcoJzMzNjY5OScpIiBvbmNsaWNrPSJTZXQoJzMzNjY5OScpIj48L3RkPgotPHRkIGJnY29sb3I9IiMzMzk5OTkiIG9ubW91c2VvdmVyPSJWaWV3KCczMzk5OTknKSIgb25jbGljaz0iU2V0KCczMzk5OTknKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMzNDQzk5IiBvbm1vdXNlb3Zlcj0iVmlldygnMzNDQzk5JykiIG9uY2xpY2s9IlNldCgnMzNDQzk5JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzMzRkY5OSIgb25tb3VzZW92ZXI9IlZpZXcoJzMzRkY5OScpIiBvbmNsaWNrPSJTZXQoJzMzRkY5OScpIj48L3RkPgotPHRkIGJnY29sb3I9IiM2NjAwOTkiIG9ubW91c2VvdmVyPSJWaWV3KCc2NjAwOTknKSIgb25jbGljaz0iU2V0KCc2NjAwOTknKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjNjYzMzk5IiBvbm1vdXNlb3Zlcj0iVmlldygnNjYzMzk5JykiIG9uY2xpY2s9IlNldCgnNjYzMzk5JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzY2NjY5OSIgb25tb3VzZW92ZXI9IlZpZXcoJzY2NjY5OScpIiBvbmNsaWNrPSJTZXQoJzY2NjY5OScpIj48L3RkPgotPHRkIGJnY29sb3I9IiM2Njk5OTkiIG9ubW91c2VvdmVyPSJWaWV3KCc2Njk5OTknKSIgb25jbGljaz0iU2V0KCc2Njk5OTknKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjNjZDQzk5IiBvbm1vdXNlb3Zlcj0iVmlldygnNjZDQzk5JykiIG9uY2xpY2s9IlNldCgnNjZDQzk5JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzY2RkY5OSIgb25tb3VzZW92ZXI9IlZpZXcoJzY2RkY5OScpIiBvbmNsaWNrPSJTZXQoJzY2RkY5OScpIj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBiZ2NvbG9yPSIjMDAwMDAwIiBvbm1vdXNlb3Zlcj0iVmlldygnMDAwMDAwJykiIG9uY2xpY2s9IlNldCgnMDAwMDAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0NDQ0NDQyIgb25tb3VzZW92ZXI9IlZpZXcoJ0NDQ0NDQycpIiBvbmNsaWNrPSJTZXQoJ0NDQ0NDQycpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMDAwMDAiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDAwMDAnKSIgb25jbGljaz0iU2V0KCcwMDAwMDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDAwMENDIiBvbm1vdXNlb3Zlcj0iVmlldygnMDAwMENDJykiIG9uY2xpY2s9IlNldCgnMDAwMENDJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwMzNDQyIgb25tb3VzZW92ZXI9IlZpZXcoJzAwMzNDQycpIiBvbmNsaWNrPSJTZXQoJzAwMzNDQycpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMDY2Q0MiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDY2Q0MnKSIgb25jbGljaz0iU2V0KCcwMDY2Q0MnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDA5OUNDIiBvbm1vdXNlb3Zlcj0iVmlldygnMDA5OUNDJykiIG9uY2xpY2s9IlNldCgnMDA5OUNDJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwQ0NDQyIgb25tb3VzZW92ZXI9IlZpZXcoJzAwQ0NDQycpIiBvbmNsaWNrPSJTZXQoJzAwQ0NDQycpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMEZGQ0MiIG9ubW91c2VvdmVyPSJWaWV3KCcwMEZGQ0MnKSIgb25jbGljaz0iU2V0KCcwMEZGQ0MnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMzMwMENDIiBvbm1vdXNlb3Zlcj0iVmlldygnMzMwMENDJykiIG9uY2xpY2s9IlNldCgnMzMwMENDJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzMzMzNDQyIgb25tb3VzZW92ZXI9IlZpZXcoJzMzMzNDQycpIiBvbmNsaWNrPSJTZXQoJzMzMzNDQycpIj48L3RkPgotPHRkIGJnY29sb3I9IiMzMzY2Q0MiIG9ubW91c2VvdmVyPSJWaWV3KCczMzY2Q0MnKSIgb25jbGljaz0iU2V0KCczMzY2Q0MnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMzM5OUNDIiBvbm1vdXNlb3Zlcj0iVmlldygnMzM5OUNDJykiIG9uY2xpY2s9IlNldCgnMzM5OUNDJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzMzQ0NDQyIgb25tb3VzZW92ZXI9IlZpZXcoJzMzQ0NDQycpIiBvbmNsaWNrPSJTZXQoJzMzQ0NDQycpIj48L3RkPgotPHRkIGJnY29sb3I9IiMzM0ZGQ0MiIG9ubW91c2VvdmVyPSJWaWV3KCczM0ZGQ0MnKSIgb25jbGljaz0iU2V0KCczM0ZGQ0MnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjNjYwMENDIiBvbm1vdXNlb3Zlcj0iVmlldygnNjYwMENDJykiIG9uY2xpY2s9IlNldCgnNjYwMENDJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzY2MzNDQyIgb25tb3VzZW92ZXI9IlZpZXcoJzY2MzNDQycpIiBvbmNsaWNrPSJTZXQoJzY2MzNDQycpIj48L3RkPgotPHRkIGJnY29sb3I9IiM2NjY2Q0MiIG9ubW91c2VvdmVyPSJWaWV3KCc2NjY2Q0MnKSIgb25jbGljaz0iU2V0KCc2NjY2Q0MnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjNjY5OUNDIiBvbm1vdXNlb3Zlcj0iVmlldygnNjY5OUNDJykiIG9uY2xpY2s9IlNldCgnNjY5OUNDJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzY2Q0NDQyIgb25tb3VzZW92ZXI9IlZpZXcoJzY2Q0NDQycpIiBvbmNsaWNrPSJTZXQoJzY2Q0NDQycpIj48L3RkPgotPHRkIGJnY29sb3I9IiM2NkZGQ0MiIG9ubW91c2VvdmVyPSJWaWV3KCc2NkZGQ0MnKSIgb25jbGljaz0iU2V0KCc2NkZGQ0MnKSI+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgYmdjb2xvcj0iIzAwMDAwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzAwMDAwMCcpIiBvbmNsaWNrPSJTZXQoJzAwMDAwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiNGRkZGRkYiIG9ubW91c2VvdmVyPSJWaWV3KCdGRkZGRkYnKSIgb25jbGljaz0iU2V0KCdGRkZGRkYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDAwMDAwIiBvbm1vdXNlb3Zlcj0iVmlldygnMDAwMDAwJykiIG9uY2xpY2s9IlNldCgnMDAwMDAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwMDBGRiIgb25tb3VzZW92ZXI9IlZpZXcoJzAwMDBGRicpIiBvbmNsaWNrPSJTZXQoJzAwMDBGRicpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMDMzRkYiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDMzRkYnKSIgb25jbGljaz0iU2V0KCcwMDMzRkYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDA2NkZGIiBvbm1vdXNlb3Zlcj0iVmlldygnMDA2NkZGJykiIG9uY2xpY2s9IlNldCgnMDA2NkZGJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwOTlGRiIgb25tb3VzZW92ZXI9IlZpZXcoJzAwOTlGRicpIiBvbmNsaWNrPSJTZXQoJzAwOTlGRicpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMENDRkYiIG9ubW91c2VvdmVyPSJWaWV3KCcwMENDRkYnKSIgb25jbGljaz0iU2V0KCcwMENDRkYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDBGRkZGIiBvbm1vdXNlb3Zlcj0iVmlldygnMDBGRkZGJykiIG9uY2xpY2s9IlNldCgnMDBGRkZGJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzMzMDBGRiIgb25tb3VzZW92ZXI9IlZpZXcoJzMzMDBGRicpIiBvbmNsaWNrPSJTZXQoJzMzMDBGRicpIj48L3RkPgotPHRkIGJnY29sb3I9IiMzMzMzRkYiIG9ubW91c2VvdmVyPSJWaWV3KCczMzMzRkYnKSIgb25jbGljaz0iU2V0KCczMzMzRkYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMzM2NkZGIiBvbm1vdXNlb3Zlcj0iVmlldygnMzM2NkZGJykiIG9uY2xpY2s9IlNldCgnMzM2NkZGJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzMzOTlGRiIgb25tb3VzZW92ZXI9IlZpZXcoJzMzOTlGRicpIiBvbmNsaWNrPSJTZXQoJzMzOTlGRicpIj48L3RkPgotPHRkIGJnY29sb3I9IiMzM0NDRkYiIG9ubW91c2VvdmVyPSJWaWV3KCczM0NDRkYnKSIgb25jbGljaz0iU2V0KCczM0NDRkYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMzNGRkZGIiBvbm1vdXNlb3Zlcj0iVmlldygnMzNGRkZGJykiIG9uY2xpY2s9IlNldCgnMzNGRkZGJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzY2MDBGRiIgb25tb3VzZW92ZXI9IlZpZXcoJzY2MDBGRicpIiBvbmNsaWNrPSJTZXQoJzY2MDBGRicpIj48L3RkPgotPHRkIGJnY29sb3I9IiM2NjMzRkYiIG9ubW91c2VvdmVyPSJWaWV3KCc2NjMzRkYnKSIgb25jbGljaz0iU2V0KCc2NjMzRkYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjNjY2NkZGIiBvbm1vdXNlb3Zlcj0iVmlldygnNjY2NkZGJykiIG9uY2xpY2s9IlNldCgnNjY2NkZGJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzY2OTlGRiIgb25tb3VzZW92ZXI9IlZpZXcoJzY2OTlGRicpIiBvbmNsaWNrPSJTZXQoJzY2OTlGRicpIj48L3RkPgotPHRkIGJnY29sb3I9IiM2NkNDRkYiIG9ubW91c2VvdmVyPSJWaWV3KCc2NkNDRkYnKSIgb25jbGljaz0iU2V0KCc2NkNDRkYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjNjZGRkZGIiBvbm1vdXNlb3Zlcj0iVmlldygnNjZGRkZGJykiIG9uY2xpY2s9IlNldCgnNjZGRkZGJykiPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGJnY29sb3I9IiMwMDAwMDAiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDAwMDAnKSIgb25jbGljaz0iU2V0KCcwMDAwMDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjRkYwMDAwIiBvbm1vdXNlb3Zlcj0iVmlldygnRkYwMDAwJykiIG9uY2xpY2s9IlNldCgnRkYwMDAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwMDAwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzAwMDAwMCcpIiBvbmNsaWNrPSJTZXQoJzAwMDAwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiM5OTAwMDAiIG9ubW91c2VvdmVyPSJWaWV3KCc5OTAwMDAnKSIgb25jbGljaz0iU2V0KCc5OTAwMDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjOTkzMzAwIiBvbm1vdXNlb3Zlcj0iVmlldygnOTkzMzAwJykiIG9uY2xpY2s9IlNldCgnOTkzMzAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzk5NjYwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzk5NjYwMCcpIiBvbmNsaWNrPSJTZXQoJzk5NjYwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiM5OTk5MDAiIG9ubW91c2VvdmVyPSJWaWV3KCc5OTk5MDAnKSIgb25jbGljaz0iU2V0KCc5OTk5MDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjOTlDQzAwIiBvbm1vdXNlb3Zlcj0iVmlldygnOTlDQzAwJykiIG9uY2xpY2s9IlNldCgnOTlDQzAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzk5RkYwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzk5RkYwMCcpIiBvbmNsaWNrPSJTZXQoJzk5RkYwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiNDQzAwMDAiIG9ubW91c2VvdmVyPSJWaWV3KCdDQzAwMDAnKSIgb25jbGljaz0iU2V0KCdDQzAwMDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjQ0MzMzAwIiBvbm1vdXNlb3Zlcj0iVmlldygnQ0MzMzAwJykiIG9uY2xpY2s9IlNldCgnQ0MzMzAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0NDNjYwMCIgb25tb3VzZW92ZXI9IlZpZXcoJ0NDNjYwMCcpIiBvbmNsaWNrPSJTZXQoJ0NDNjYwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiNDQzk5MDAiIG9ubW91c2VvdmVyPSJWaWV3KCdDQzk5MDAnKSIgb25jbGljaz0iU2V0KCdDQzk5MDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjQ0NDQzAwIiBvbm1vdXNlb3Zlcj0iVmlldygnQ0NDQzAwJykiIG9uY2xpY2s9IlNldCgnQ0NDQzAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0NDRkYwMCIgb25tb3VzZW92ZXI9IlZpZXcoJ0NDRkYwMCcpIiBvbmNsaWNrPSJTZXQoJ0NDRkYwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiNGRjAwMDAiIG9ubW91c2VvdmVyPSJWaWV3KCdGRjAwMDAnKSIgb25jbGljaz0iU2V0KCdGRjAwMDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjRkYzMzAwIiBvbm1vdXNlb3Zlcj0iVmlldygnRkYzMzAwJykiIG9uY2xpY2s9IlNldCgnRkYzMzAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0ZGNjYwMCIgb25tb3VzZW92ZXI9IlZpZXcoJ0ZGNjYwMCcpIiBvbmNsaWNrPSJTZXQoJ0ZGNjYwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiNGRjk5MDAiIG9ubW91c2VvdmVyPSJWaWV3KCdGRjk5MDAnKSIgb25jbGljaz0iU2V0KCdGRjk5MDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjRkZDQzAwIiBvbm1vdXNlb3Zlcj0iVmlldygnRkZDQzAwJykiIG9uY2xpY2s9IlNldCgnRkZDQzAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0ZGRkYwMCIgb25tb3VzZW92ZXI9IlZpZXcoJ0ZGRkYwMCcpIiBvbmNsaWNrPSJTZXQoJ0ZGRkYwMCcpIj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBiZ2NvbG9yPSIjMDAwMDAwIiBvbm1vdXNlb3Zlcj0iVmlldygnMDAwMDAwJykiIG9uY2xpY2s9IlNldCgnMDAwMDAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwRkYwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzAwRkYwMCcpIiBvbmNsaWNrPSJTZXQoJzAwRkYwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMDAwMDAiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDAwMDAnKSIgb25jbGljaz0iU2V0KCcwMDAwMDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjOTkwMDMzIiBvbm1vdXNlb3Zlcj0iVmlldygnOTkwMDMzJykiIG9uY2xpY2s9IlNldCgnOTkwMDMzJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzk5MzMzMyIgb25tb3VzZW92ZXI9IlZpZXcoJzk5MzMzMycpIiBvbmNsaWNrPSJTZXQoJzk5MzMzMycpIj48L3RkPgotPHRkIGJnY29sb3I9IiM5OTY2MzMiIG9ubW91c2VvdmVyPSJWaWV3KCc5OTY2MzMnKSIgb25jbGljaz0iU2V0KCc5OTY2MzMnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjOTk5OTMzIiBvbm1vdXNlb3Zlcj0iVmlldygnOTk5OTMzJykiIG9uY2xpY2s9IlNldCgnOTk5OTMzJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzk5Q0MzMyIgb25tb3VzZW92ZXI9IlZpZXcoJzk5Q0MzMycpIiBvbmNsaWNrPSJTZXQoJzk5Q0MzMycpIj48L3RkPgotPHRkIGJnY29sb3I9IiM5OUZGMzMiIG9ubW91c2VvdmVyPSJWaWV3KCc5OUZGMzMnKSIgb25jbGljaz0iU2V0KCc5OUZGMzMnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjQ0MwMDMzIiBvbm1vdXNlb3Zlcj0iVmlldygnQ0MwMDMzJykiIG9uY2xpY2s9IlNldCgnQ0MwMDMzJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0NDMzMzMyIgb25tb3VzZW92ZXI9IlZpZXcoJ0NDMzMzMycpIiBvbmNsaWNrPSJTZXQoJ0NDMzMzMycpIj48L3RkPgotPHRkIGJnY29sb3I9IiNDQzY2MzMiIG9ubW91c2VvdmVyPSJWaWV3KCdDQzY2MzMnKSIgb25jbGljaz0iU2V0KCdDQzY2MzMnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjQ0M5OTMzIiBvbm1vdXNlb3Zlcj0iVmlldygnQ0M5OTMzJykiIG9uY2xpY2s9IlNldCgnQ0M5OTMzJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0NDQ0MzMyIgb25tb3VzZW92ZXI9IlZpZXcoJ0NDQ0MzMycpIiBvbmNsaWNrPSJTZXQoJ0NDQ0MzMycpIj48L3RkPgotPHRkIGJnY29sb3I9IiNDQ0ZGMzMiIG9ubW91c2VvdmVyPSJWaWV3KCdDQ0ZGMzMnKSIgb25jbGljaz0iU2V0KCdDQ0ZGMzMnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjRkYwMDMzIiBvbm1vdXNlb3Zlcj0iVmlldygnRkYwMDMzJykiIG9uY2xpY2s9IlNldCgnRkYwMDMzJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0ZGMzMzMyIgb25tb3VzZW92ZXI9IlZpZXcoJ0ZGMzMzMycpIiBvbmNsaWNrPSJTZXQoJ0ZGMzMzMycpIj48L3RkPgotPHRkIGJnY29sb3I9IiNGRjY2MzMiIG9ubW91c2VvdmVyPSJWaWV3KCdGRjY2MzMnKSIgb25jbGljaz0iU2V0KCdGRjY2MzMnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjRkY5OTMzIiBvbm1vdXNlb3Zlcj0iVmlldygnRkY5OTMzJykiIG9uY2xpY2s9IlNldCgnRkY5OTMzJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0ZGQ0MzMyIgb25tb3VzZW92ZXI9IlZpZXcoJ0ZGQ0MzMycpIiBvbmNsaWNrPSJTZXQoJ0ZGQ0MzMycpIj48L3RkPgotPHRkIGJnY29sb3I9IiNGRkZGMzMiIG9ubW91c2VvdmVyPSJWaWV3KCdGRkZGMzMnKSIgb25jbGljaz0iU2V0KCdGRkZGMzMnKSI+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgYmdjb2xvcj0iIzAwMDAwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzAwMDAwMCcpIiBvbmNsaWNrPSJTZXQoJzAwMDAwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMDAwRkYiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDAwRkYnKSIgb25jbGljaz0iU2V0KCcwMDAwRkYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDAwMDAwIiBvbm1vdXNlb3Zlcj0iVmlldygnMDAwMDAwJykiIG9uY2xpY2s9IlNldCgnMDAwMDAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzk5MDA2NiIgb25tb3VzZW92ZXI9IlZpZXcoJzk5MDA2NicpIiBvbmNsaWNrPSJTZXQoJzk5MDA2NicpIj48L3RkPgotPHRkIGJnY29sb3I9IiM5OTMzNjYiIG9ubW91c2VvdmVyPSJWaWV3KCc5OTMzNjYnKSIgb25jbGljaz0iU2V0KCc5OTMzNjYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjOTk2NjY2IiBvbm1vdXNlb3Zlcj0iVmlldygnOTk2NjY2JykiIG9uY2xpY2s9IlNldCgnOTk2NjY2JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzk5OTk2NiIgb25tb3VzZW92ZXI9IlZpZXcoJzk5OTk2NicpIiBvbmNsaWNrPSJTZXQoJzk5OTk2NicpIj48L3RkPgotPHRkIGJnY29sb3I9IiM5OUNDNjYiIG9ubW91c2VvdmVyPSJWaWV3KCc5OUNDNjYnKSIgb25jbGljaz0iU2V0KCc5OUNDNjYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjOTlGRjY2IiBvbm1vdXNlb3Zlcj0iVmlldygnOTlGRjY2JykiIG9uY2xpY2s9IlNldCgnOTlGRjY2JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0NDMDA2NiIgb25tb3VzZW92ZXI9IlZpZXcoJ0NDMDA2NicpIiBvbmNsaWNrPSJTZXQoJ0NDMDA2NicpIj48L3RkPgotPHRkIGJnY29sb3I9IiNDQzMzNjYiIG9ubW91c2VvdmVyPSJWaWV3KCdDQzMzNjYnKSIgb25jbGljaz0iU2V0KCdDQzMzNjYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjQ0M2NjY2IiBvbm1vdXNlb3Zlcj0iVmlldygnQ0M2NjY2JykiIG9uY2xpY2s9IlNldCgnQ0M2NjY2JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0NDOTk2NiIgb25tb3VzZW92ZXI9IlZpZXcoJ0NDOTk2NicpIiBvbmNsaWNrPSJTZXQoJ0NDOTk2NicpIj48L3RkPgotPHRkIGJnY29sb3I9IiNDQ0NDNjYiIG9ubW91c2VvdmVyPSJWaWV3KCdDQ0NDNjYnKSIgb25jbGljaz0iU2V0KCdDQ0NDNjYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjQ0NGRjY2IiBvbm1vdXNlb3Zlcj0iVmlldygnQ0NGRjY2JykiIG9uY2xpY2s9IlNldCgnQ0NGRjY2JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0ZGMDA2NiIgb25tb3VzZW92ZXI9IlZpZXcoJ0ZGMDA2NicpIiBvbmNsaWNrPSJTZXQoJ0ZGMDA2NicpIj48L3RkPgotPHRkIGJnY29sb3I9IiNGRjMzNjYiIG9ubW91c2VvdmVyPSJWaWV3KCdGRjMzNjYnKSIgb25jbGljaz0iU2V0KCdGRjMzNjYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjRkY2NjY2IiBvbm1vdXNlb3Zlcj0iVmlldygnRkY2NjY2JykiIG9uY2xpY2s9IlNldCgnRkY2NjY2JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0ZGOTk2NiIgb25tb3VzZW92ZXI9IlZpZXcoJ0ZGOTk2NicpIiBvbmNsaWNrPSJTZXQoJ0ZGOTk2NicpIj48L3RkPgotPHRkIGJnY29sb3I9IiNGRkNDNjYiIG9ubW91c2VvdmVyPSJWaWV3KCdGRkNDNjYnKSIgb25jbGljaz0iU2V0KCdGRkNDNjYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjRkZGRjY2IiBvbm1vdXNlb3Zlcj0iVmlldygnRkZGRjY2JykiIG9uY2xpY2s9IlNldCgnRkZGRjY2JykiPjwvdGQ+Ci08L3RyPgotPHRyPgotPHRkIGJnY29sb3I9IiMwMDAwMDAiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDAwMDAnKSIgb25jbGljaz0iU2V0KCcwMDAwMDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjRkZGRjAwIiBvbm1vdXNlb3Zlcj0iVmlldygnRkZGRjAwJykiIG9uY2xpY2s9IlNldCgnRkZGRjAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwMDAwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzAwMDAwMCcpIiBvbmNsaWNrPSJTZXQoJzAwMDAwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiM5OTAwOTkiIG9ubW91c2VvdmVyPSJWaWV3KCc5OTAwOTknKSIgb25jbGljaz0iU2V0KCc5OTAwOTknKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjOTkzMzk5IiBvbm1vdXNlb3Zlcj0iVmlldygnOTkzMzk5JykiIG9uY2xpY2s9IlNldCgnOTkzMzk5JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzk5NjY5OSIgb25tb3VzZW92ZXI9IlZpZXcoJzk5NjY5OScpIiBvbmNsaWNrPSJTZXQoJzk5NjY5OScpIj48L3RkPgotPHRkIGJnY29sb3I9IiM5OTk5OTkiIG9ubW91c2VvdmVyPSJWaWV3KCc5OTk5OTknKSIgb25jbGljaz0iU2V0KCc5OTk5OTknKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjOTlDQzk5IiBvbm1vdXNlb3Zlcj0iVmlldygnOTlDQzk5JykiIG9uY2xpY2s9IlNldCgnOTlDQzk5JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzk5RkY5OSIgb25tb3VzZW92ZXI9IlZpZXcoJzk5RkY5OScpIiBvbmNsaWNrPSJTZXQoJzk5RkY5OScpIj48L3RkPgotPHRkIGJnY29sb3I9IiNDQzAwOTkiIG9ubW91c2VvdmVyPSJWaWV3KCdDQzAwOTknKSIgb25jbGljaz0iU2V0KCdDQzAwOTknKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjQ0MzMzk5IiBvbm1vdXNlb3Zlcj0iVmlldygnQ0MzMzk5JykiIG9uY2xpY2s9IlNldCgnQ0MzMzk5JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0NDNjY5OSIgb25tb3VzZW92ZXI9IlZpZXcoJ0NDNjY5OScpIiBvbmNsaWNrPSJTZXQoJ0NDNjY5OScpIj48L3RkPgotPHRkIGJnY29sb3I9IiNDQzk5OTkiIG9ubW91c2VvdmVyPSJWaWV3KCdDQzk5OTknKSIgb25jbGljaz0iU2V0KCdDQzk5OTknKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjQ0NDQzk5IiBvbm1vdXNlb3Zlcj0iVmlldygnQ0NDQzk5JykiIG9uY2xpY2s9IlNldCgnQ0NDQzk5JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0NDRkY5OSIgb25tb3VzZW92ZXI9IlZpZXcoJ0NDRkY5OScpIiBvbmNsaWNrPSJTZXQoJ0NDRkY5OScpIj48L3RkPgotPHRkIGJnY29sb3I9IiNGRjAwOTkiIG9ubW91c2VvdmVyPSJWaWV3KCdGRjAwOTknKSIgb25jbGljaz0iU2V0KCdGRjAwOTknKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjRkYzMzk5IiBvbm1vdXNlb3Zlcj0iVmlldygnRkYzMzk5JykiIG9uY2xpY2s9IlNldCgnRkYzMzk5JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0ZGNjY5OSIgb25tb3VzZW92ZXI9IlZpZXcoJ0ZGNjY5OScpIiBvbmNsaWNrPSJTZXQoJ0ZGNjY5OScpIj48L3RkPgotPHRkIGJnY29sb3I9IiNGRjk5OTkiIG9ubW91c2VvdmVyPSJWaWV3KCdGRjk5OTknKSIgb25jbGljaz0iU2V0KCdGRjk5OTknKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjRkZDQzk5IiBvbm1vdXNlb3Zlcj0iVmlldygnRkZDQzk5JykiIG9uY2xpY2s9IlNldCgnRkZDQzk5JykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0ZGRkY5OSIgb25tb3VzZW92ZXI9IlZpZXcoJ0ZGRkY5OScpIiBvbmNsaWNrPSJTZXQoJ0ZGRkY5OScpIj48L3RkPgotPC90cj4KLTx0cj4KLTx0ZCBiZ2NvbG9yPSIjMDAwMDAwIiBvbm1vdXNlb3Zlcj0iVmlldygnMDAwMDAwJykiIG9uY2xpY2s9IlNldCgnMDAwMDAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzAwRkZGRiIgb25tb3VzZW92ZXI9IlZpZXcoJzAwRkZGRicpIiBvbmNsaWNrPSJTZXQoJzAwRkZGRicpIj48L3RkPgotPHRkIGJnY29sb3I9IiMwMDAwMDAiIG9ubW91c2VvdmVyPSJWaWV3KCcwMDAwMDAnKSIgb25jbGljaz0iU2V0KCcwMDAwMDAnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjOTkwMENDIiBvbm1vdXNlb3Zlcj0iVmlldygnOTkwMENDJykiIG9uY2xpY2s9IlNldCgnOTkwMENDJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzk5MzNDQyIgb25tb3VzZW92ZXI9IlZpZXcoJzk5MzNDQycpIiBvbmNsaWNrPSJTZXQoJzk5MzNDQycpIj48L3RkPgotPHRkIGJnY29sb3I9IiM5OTY2Q0MiIG9ubW91c2VvdmVyPSJWaWV3KCc5OTY2Q0MnKSIgb25jbGljaz0iU2V0KCc5OTY2Q0MnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjOTk5OUNDIiBvbm1vdXNlb3Zlcj0iVmlldygnOTk5OUNDJykiIG9uY2xpY2s9IlNldCgnOTk5OUNDJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzk5Q0NDQyIgb25tb3VzZW92ZXI9IlZpZXcoJzk5Q0NDQycpIiBvbmNsaWNrPSJTZXQoJzk5Q0NDQycpIj48L3RkPgotPHRkIGJnY29sb3I9IiM5OUZGQ0MiIG9ubW91c2VvdmVyPSJWaWV3KCc5OUZGQ0MnKSIgb25jbGljaz0iU2V0KCc5OUZGQ0MnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjQ0MwMENDIiBvbm1vdXNlb3Zlcj0iVmlldygnQ0MwMENDJykiIG9uY2xpY2s9IlNldCgnQ0MwMENDJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0NDMzNDQyIgb25tb3VzZW92ZXI9IlZpZXcoJ0NDMzNDQycpIiBvbmNsaWNrPSJTZXQoJ0NDMzNDQycpIj48L3RkPgotPHRkIGJnY29sb3I9IiNDQzY2Q0MiIG9ubW91c2VvdmVyPSJWaWV3KCdDQzY2Q0MnKSIgb25jbGljaz0iU2V0KCdDQzY2Q0MnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjQ0M5OUNDIiBvbm1vdXNlb3Zlcj0iVmlldygnQ0M5OUNDJykiIG9uY2xpY2s9IlNldCgnQ0M5OUNDJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0NDQ0NDQyIgb25tb3VzZW92ZXI9IlZpZXcoJ0NDQ0NDQycpIiBvbmNsaWNrPSJTZXQoJ0NDQ0NDQycpIj48L3RkPgotPHRkIGJnY29sb3I9IiNDQ0ZGQ0MiIG9ubW91c2VvdmVyPSJWaWV3KCdDQ0ZGQ0MnKSIgb25jbGljaz0iU2V0KCdDQ0ZGQ0MnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjRkYwMENDIiBvbm1vdXNlb3Zlcj0iVmlldygnRkYwMENDJykiIG9uY2xpY2s9IlNldCgnRkYwMENDJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0ZGMzNDQyIgb25tb3VzZW92ZXI9IlZpZXcoJ0ZGMzNDQycpIiBvbmNsaWNrPSJTZXQoJ0ZGMzNDQycpIj48L3RkPgotPHRkIGJnY29sb3I9IiNGRjY2Q0MiIG9ubW91c2VvdmVyPSJWaWV3KCdGRjY2Q0MnKSIgb25jbGljaz0iU2V0KCdGRjY2Q0MnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjRkY5OUNDIiBvbm1vdXNlb3Zlcj0iVmlldygnRkY5OUNDJykiIG9uY2xpY2s9IlNldCgnRkY5OUNDJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0ZGQ0NDQyIgb25tb3VzZW92ZXI9IlZpZXcoJ0ZGQ0NDQycpIiBvbmNsaWNrPSJTZXQoJ0ZGQ0NDQycpIj48L3RkPgotPHRkIGJnY29sb3I9IiNGRkZGQ0MiIG9ubW91c2VvdmVyPSJWaWV3KCdGRkZGQ0MnKSIgb25jbGljaz0iU2V0KCdGRkZGQ0MnKSI+PC90ZD4KLTwvdHI+Ci08dHI+Ci08dGQgYmdjb2xvcj0iIzAwMDAwMCIgb25tb3VzZW92ZXI9IlZpZXcoJzAwMDAwMCcpIiBvbmNsaWNrPSJTZXQoJzAwMDAwMCcpIj48L3RkPgotPHRkIGJnY29sb3I9IiNGRjAwRkYiIG9ubW91c2VvdmVyPSJWaWV3KCdGRjAwRkYnKSIgb25jbGljaz0iU2V0KCdGRjAwRkYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjMDAwMDAwIiBvbm1vdXNlb3Zlcj0iVmlldygnMDAwMDAwJykiIG9uY2xpY2s9IlNldCgnMDAwMDAwJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzk5MDBGRiIgb25tb3VzZW92ZXI9IlZpZXcoJzk5MDBGRicpIiBvbmNsaWNrPSJTZXQoJzk5MDBGRicpIj48L3RkPgotPHRkIGJnY29sb3I9IiM5OTMzRkYiIG9ubW91c2VvdmVyPSJWaWV3KCc5OTMzRkYnKSIgb25jbGljaz0iU2V0KCc5OTMzRkYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjOTk2NkZGIiBvbm1vdXNlb3Zlcj0iVmlldygnOTk2NkZGJykiIG9uY2xpY2s9IlNldCgnOTk2NkZGJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iIzk5OTlGRiIgb25tb3VzZW92ZXI9IlZpZXcoJzk5OTlGRicpIiBvbmNsaWNrPSJTZXQoJzk5OTlGRicpIj48L3RkPgotPHRkIGJnY29sb3I9IiM5OUNDRkYiIG9ubW91c2VvdmVyPSJWaWV3KCc5OUNDRkYnKSIgb25jbGljaz0iU2V0KCc5OUNDRkYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjOTlGRkZGIiBvbm1vdXNlb3Zlcj0iVmlldygnOTlGRkZGJykiIG9uY2xpY2s9IlNldCgnOTlGRkZGJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0NDMDBGRiIgb25tb3VzZW92ZXI9IlZpZXcoJ0NDMDBGRicpIiBvbmNsaWNrPSJTZXQoJ0NDMDBGRicpIj48L3RkPgotPHRkIGJnY29sb3I9IiNDQzMzRkYiIG9ubW91c2VvdmVyPSJWaWV3KCdDQzMzRkYnKSIgb25jbGljaz0iU2V0KCdDQzMzRkYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjQ0M2NkZGIiBvbm1vdXNlb3Zlcj0iVmlldygnQ0M2NkZGJykiIG9uY2xpY2s9IlNldCgnQ0M2NkZGJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0NDOTlGRiIgb25tb3VzZW92ZXI9IlZpZXcoJ0NDOTlGRicpIiBvbmNsaWNrPSJTZXQoJ0NDOTlGRicpIj48L3RkPgotPHRkIGJnY29sb3I9IiNDQ0NDRkYiIG9ubW91c2VvdmVyPSJWaWV3KCdDQ0NDRkYnKSIgb25jbGljaz0iU2V0KCdDQ0NDRkYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjQ0NGRkZGIiBvbm1vdXNlb3Zlcj0iVmlldygnQ0NGRkZGJykiIG9uY2xpY2s9IlNldCgnQ0NGRkZGJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0ZGMDBGRiIgb25tb3VzZW92ZXI9IlZpZXcoJ0ZGMDBGRicpIiBvbmNsaWNrPSJTZXQoJ0ZGMDBGRicpIj48L3RkPgotPHRkIGJnY29sb3I9IiNGRjMzRkYiIG9ubW91c2VvdmVyPSJWaWV3KCdGRjMzRkYnKSIgb25jbGljaz0iU2V0KCdGRjMzRkYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjRkY2NkZGIiBvbm1vdXNlb3Zlcj0iVmlldygnRkY2NkZGJykiIG9uY2xpY2s9IlNldCgnRkY2NkZGJykiPjwvdGQ+Ci08dGQgYmdjb2xvcj0iI0ZGOTlGRiIgb25tb3VzZW92ZXI9IlZpZXcoJ0ZGOTlGRicpIiBvbmNsaWNrPSJTZXQoJ0ZGOTlGRicpIj48L3RkPgotPHRkIGJnY29sb3I9IiNGRkNDRkYiIG9ubW91c2VvdmVyPSJWaWV3KCdGRkNDRkYnKSIgb25jbGljaz0iU2V0KCdGRkNDRkYnKSI+PC90ZD4KLTx0ZCBiZ2NvbG9yPSIjRkZGRkZGIiBvbm1vdXNlb3Zlcj0iVmlldygnRkZGRkZGJykiIG9uY2xpY2s9IlNldCgnRkZGRkZGJykiPjwvdGQ+Ci08L3RyPgotPC90YWJsZT4KLQotPC9ib2R5PjwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvcmVsZWFzZS1ub3Rlcy50eHQgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvcmVsZWFzZS1ub3Rlcy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNTcwMWEuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3JlbGVhc2Utbm90ZXMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzgwICswLDAgQEAKLVhpbmhhIC0gVGhlIENvbW11bml0eS1CdWlsdCBPbmxpbmUgSFRNTCBFZGl0b3IKLQotRm9yIGJ1ZyByZXBvcnRzLCBmb3J1bSwgYW5kIHVwZGF0ZXMgZ28gdG8gCi1odHRwOi8veGluaGEub3JnCi0KLVJlbGVhc2UgSGlzdG9yeQotCi1YaW5oYSAwLjk2Ci09PSBCdWdzIEZpeGVkID09Ci0KLSAqICMxNDI1IFtTbWFydFJlcGxhY2VdW0dlY2tvXSBXaGVuIGluc2VydGluZyBvcGVuaW5nIHF1b3RlLCB0aGUgc3BhY2UgYmVmb3JlIHRoZSBjdXJzb3IgaXMgZGVsZXRlZAotICogIzE0MjkgUHJvYmxlbXMgd2l0aCBBcGFjaGUgYW5kIEhFQUQgcmVxdWVzdHMuLi4KLSAqICMxNDc4IEZ1cnRoZXIgaW1wb3J0YW50IHNlY3VyaXR5IHByZWNhdXRpb25zIGZvciBFeHRlbmRlZEZpbGVNYW5hZ2VyIGFuZCBJbWFnZU1hbmFnZXIKLSAqICMxNDc4IEhpZGUgYWxsIGRvdGZpbGVzIGZyb20gdGhlIExpbmtlciBzY2FubmVyLCB0aGUgbGlua2VyIHNob3VsZG4ndCBiZSBzaG93aW5nICJoaWRkZW4iIGZpbGVzLgotICogIzE0NzggQ1NTIGZpeCB0byBkVHJlZSBpbiBsaW5rZXIsIGp1c3QgdG8gbWFrZSBzdXJlIGl0J3Mgc3R5bGVzIHdlcmUgbm90IGdldHRpbmcgY2xvYmJlcmVkLgotICogIzE0NzggU3RvcCB0aGUgU3R5bGlzdCBmcm9tIHBvc3NpYmx5IGFkZGluZyBhICBkdXBsaWNhdGUgc3R5bGVzaGVldCBpbnRvIHBhZ2VTdHlsZVNoZWV0cywgdGhpcyB3YXMgY3JlYXRpbmcgYSBzdWJ0bGUgcHJvYmxlbSBpbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuCi0gKiAjMTIyNyAgSW1wcm92ZWQgaGFuZGxpbmcgb2YgQ1NTIGltcG9ydHMgaW4gU3R5bGlzdCBwbHVnaW4uCi0gKiAjMTQ0OCBhW2IuaWRdIGlzIHVuZGVmaW5lZAotICogIzEzODcgcHJldmVudCBjcmFzaCBpbiBJRSAKLSAqICMxMTk4IEZpeCBmb3IgYmFkIHNpemluZyBvZiBlZGl0b3IuCi0gKiAjMTEyMSBEaXNhYmxlIHRhYiBpbiBJbnRlcm5ldCBFeHBsb3JlciBiZWNhdXNlIGl0IGV4aXRzIHRoZSBYaW5oYSBhcmVhLgotICogIzQ3MiAgRGlzYWJsZSBJbnNlcnRQaWN0dXJlCi0gKiAjNTc5IFBhc3MgdmFsdWUgdG8gZHJvcGRvd24gaGFuZGxlcnMuCi0gKiAjMTQ3MiBfdG9wIG5vdCByZXNwZWN0ZWQgaW4gZWRpdGluZyBsaW5rLgotICogIzE0NjcgYXV0b2ZvY3VzPWZhbHNlIG5vdCB3b3JraW5nIGFzIGV4cGVjdGVkLgotICogIzE0NjEgU3BlY2lhbCBjaGFyYWN0ZXJzIGluIGltYWdlIG1ha2UgdGh1bWJuYWlsIG5vdCBhcHBlYXIuCi0gKiAjMTQzNSBJRSBmYWlsZWQgaW4gVHJhbnNmb3JtSW5uZXJIVE1MCi0gKiAjMTIzMiBDbGlja2FibGUgaWNvbnMgb24gRXh0ZW5kZWRGaWxlTWFuYWdlcgotICogIzE0MDkgSW1hZ2UgUHJvcGVydGllcyBicm9rZW4gaW4gQ29udGV4dE1lbnUKLSAqICMxNDE5IFN0eWxpc3QgZGlzcGxheSBwcm9ibGVtIGluIElFNi83LCBIYXNMYXlvdXQgYnVnLgotICogIzEyNjIgQWx0ZXJuYXRpdmUgbWV0aG9kIGZvciByZXN0b3JpbmcgZnJvbSBmdWxsc2NyZWVuIG1vZGUuCi0gKiAjMTM4OCBDaGFuZ2UgJm1kYXNoOyB0byAmODIxMjsgZm9yIHhtbCBjb21wYXRhYmlsaXR5LgotICogIzEwOTMsICMxMzc3IFJld3JpdGUgdGhlIEluc2VydFNtaWxleSBwbHVnaW4uICBSZW1haW5zIGNvbXBhdGlibGUgd2l0aCByYXkncyBjaGFuZ2VzIGluIHI5MDQgaWYgcGVvcGxlIGhhdmUgbWFkZSBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24uCi0gKiAjMTI4MiBPcGVyYSBsb3NpbmcgaXQncyBldmVudHMgd2hlbiBkZXNpZ25Nb2RlIHR1cm5lZCBvbiBjYXVzaW5nIHN0YXR1cyBiYXIgdG8gbm90IHVwZGF0ZSBhbW9uZ3N0IG90aGVyIHRoaW5ncy4KLSAqIHIxMjI4IFJlbW92ZSBQZXJzaXN0YW50U3RvcmFnZSBmcm9tIE5ld2JpZSBleGFtcGxlLCBiZWNhdXNlIGl0IG5vdCBhY3R1YWxseSB1c2FibGUgYXRtCi0gKiByMTIyOSBGaXggZmlyZWZveCB2ZXJzaW9uIGRldGVjdGlvbi4KLSAqIHIxMjMwIGF2b2lkIHVuZWNlc3NhcnkgcG9sbHV0aW9uIG9mIGdsb2JhbCBuYW1lc3BhY2UKLSAqIHIxMjMyIFJlbW92ZWQgQ0MgbGljZW5zZSBmcm9tIFRhbmdvIGljb25zZXQsIGFzIGl0IHNlZW1zIG5vdCBhcHByb3ByaWF0ZQotICogcjEyMzIgQ2hhbmdlZCBIdG1sRW50aXRpZXMgcGx1Z2luIGxpY2Vuc2UgdG8gSFRNTEFyZWEKLSAqICMxNDg4IEZpeCBDb250cm9sIFNlbGVjdGlvbiBpbiBJRTgKLSAqIHIxMjM1IENoYW5nZSBsaWNlbnNlIHRvIEhUTUxBcmVhIC0gc2VlIGh0dHA6Ly94aW5oYS5vcmcvcHVuYmIvdmlld3RvcGljLnBocD9pZD0yNDk5Ci0gKiAjMTQ5NyBUcmFuc2Zvcm1Jbm5lckh0bWwgaGFuZGxpbmcgb2Ygb2JqZWN0IHRhZwotICogIzE0OTggQ29sb3IgcGlja2VyIGRpc3BsYXkgaW4gbmV3IGRpYWxvZ3MgaW4gSUU2Ci0gKiAjMTQ5OSBGaXggZm9jdXMgZXJyb3JzIGluIG5ldyBkaWFsb2dzIGluIElFCi0gKiAjMTUwMyB4aW5oYV90b19qcyBkaWQgbm90IGhhbmRsZSBib29sZWFucyBjb3JyZWN0bHkKLSAqICMxNTA5IFByZXZlbnQgYXR0ZW1wdGluZyB0byBjb21wcmVzcyBSRXMgaW4gU2FmYXJpIDQKLSAqICMxNTE1IFNlY3VyaXR5IHBhdGNoIHRvIHByZXZlbnQgcm9ndWUgYWNjZXNzIHRvIHRoZSBjb21wcmVzc29ycyBpbiBjb250cmliLgotICogIzE1MTggU2VjdXJpdHkgcGF0Y2ggd2hpY2ggcHJldmVudHMgbm9uLWRlZmF1bHQga2V5cyBpbiB4aW5oYV9wYXNzX3RvX3BocF9iYWNrZW5kLgotICogIzE1MTggSXNzdWUgYW4gZXJyb3IgYW5kIGlnbm9yZSB0aGUgc3BlY2lhbCBiYWNrZW5kIGNvbmZpZ3VyYXRpb24gd2hlbiB0aGUga2V5IGxvY2F0aW9uIGlzIG5vbiBkZWZhdWx0LCBmb3IgYm90aCB0aGUgSW1hZ2VNYW5hZ2VyIGFuZCBFeHRlbmRlZEZpbGVNYW5hZ2VyIGRlcHJlY2F0ZWQgY29uZmlnIHBhc3NpbmcgbWV0aG9kcy4KLSAqICMxMjA5IGFuZCAjMTE4MiBVcGdyYWRlIEVxdWF0aW9uIHRvIHVzZSBuZXcgQXNjaWlNYXRoLCBmaXggbXVsdGlwbGUgZXF1YXRpb24gZWRpdGluZy4gVGhhbmtzIHRvIE5pcmFqIEJoYXduYW5pIG9mIFVuaXZlcnNpdHkgb2YgTmV3IFNvdXRoIFdhbGVzLgotICogIzE0ODMgRml4IGNhbmNlbCBidXR0b24gaW4gRXF1YXRpb24gZWRpdG9yLgotICogIzE0ODUgQWRkIGEgZG91YmxlLWNsaWNrIGhhbmRsZXIgd2hpY2ggd2lsbCBicmluZyB1cCB0aGUgbGluay9pbWFnZSBpbnNlcnRpb24gZGlhbG9ncyAob3IgSW1hZ2VNYW5hZ2VyL0xpbmtlcikgd2hlbiBhIGxpbmsgb3IgaW1hZ2UgaXMgZG91YmxlIGNsaWNrZWQuCi0gKiAjMTQ5MiBGaXggbGlua2VyIGluIHNvbWUgc2l0dWF0aW9ucy4KLSAqICMxNDcxLCAjMTUwOCwgIzE1MTAgRml4IElFOCBwcm9ibGVtcyB3aXRoIFRhYmxlT3BlcmF0aW9ucyBhbmQgb3RoZXIgYnV0dG9ucywgYW5kIGFic29sdXRlIHBvc2l0aW9uZWQgZWRpdGluZy4KLQotPT0gTmV3IEZlYXR1cmVzID09Ci0KLSAqIHIxMTg5IGFkZGVkIHRvb2xiYXIgY29uZmlnIHRvIE5ld2JpZSBleGFtcGxlCi0gKiAjMTQ3OCBBZGQgbmV3IG1ldGhvZCBYaW5oYS5leHRlbmQgdG8gcHJvdmlkZSBtb3JlIGNsYXNzaWNhbCBvYmplY3Qgb3JpZW50ZWQgc3ViY2xhc3NlcyB3aXRoaW4gSmF2YXNjcmlwdC4KLSAqICMxNDc4IEFkZCBuZXcgbWV0aG9kIFhpbmhhLkRpYWxvZzo6c2V0TG9jYWxpemVyKCkgdG8gbW9yZSBlYXNpbHkgc2V0IGEgc3BlY2lmaWMgbG9jYWxpemVyIGZvciBhIGRpYWxvZy4KLSAqICMxNDc4IEZpbGUtUGlja2VyIG9uIGFyYml0cmFyeSBmaWVsZHMgb3V0c2lkZSBYaW5oYSAoRXh0ZW5kZWRGaWxlTWFuYWdlcikKLSAqICMxNDc4IEFkZCBjb25maWcgb3B0aW9uIHRvIHVzZSBIU3BhY2UgYW5kIFZTcGFjZSBpbiBJbWFnZU1hbmFnZXIgKGRlZmF1bHQgb2ZmKQotICogIzE0NzggQWRkIFlvdVR1YmUgYW5kIEZsaWNrciBzdXBwb3J0IHRvIEltYWdlTWFuYWdlciBzbyB0aGF0IHZpZGVvcyBhbmQgRmxpY2tyIGltYWdlcyBjYW4gYmUgc2VhcmNoZWQgYW5kIHNlbGVjdGVkIGluIHRoZSBJbWFnZU1hbmFnZXIuCi0gKiAjMTQ3OCBBZGQgYSBuZXcgZGlhbG9nIHR5cGUgIkRldGFjaGVkRGlhbG9nIiB0byBoZWxwIGxldmVyYWdlIFhpbmhhIHBsdWdpbnMgdG8gcGVyZm9ybSB0YXNrcyBvdXRzaWRlIG9mIFhpbmhhLCBhbmQgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBkaWFsb2cgZm9yIHRob3NlIHdobyB3aXNoIHRvIG1ha2UgdGhlaXIgb3duLgotICogIzE0NzggTGluay1QaWNrZXIgIG9uIGFyYml0cmFyeSBmaWVsZHMgb3V0c2lkZSBYaW5oYSAoTGlua2VyKQotICogIzE0NzggTmV3IFBsdWdpbjogV3lzaXd5Z1dyYXAgLSBjb21iaW5lZCB3aXRoIGFuIGFwcHJvcHJpYXRlIHBhZ2VTdHlsZVNoZWV0KHMpIHlvdSBjYW4gbW9yZSBlYXNpbHkgc2ltdWxhdGUgaW4gWGluaGEgd2hhdCBpdCB3aWxsICJsb29rIGxpa2UiIHdoZW4gdGhhdCBIVE1MIGlzICJwdWJsaXNoZWQiLgotICogIzE0NDYgUHJvdmlkZSBhIG1lYW5zIGZvciBhZGRpbmcgY3VzdG9tIGhvb2tzIGludG8gdGhlIENvbnRleHRNZW51IHBsdWdpbi4KLSAqICMxMjIwIEFkZCBhYmlsaXR5IHRvIHBhc3MgZXh0cmEgYXJndW1lbnRzIGluIHRoZSBwb3N0IHRvIHRoZSBiYWNrZW5kIGhhbmRsZXIgZm9yIFN1cGVyQ2xlYW4uCi0gKiAjMTQ2NSAgQWRkIGFuIG9wdGlvbiBgcmVzaXplX2ZpbGVzYCB0byBib3RoIEV4dGVuZGVkRmlsZU1hbmFnZXIgYW5kIEltYWdlTWFuYWdlciwgZGVmYXVsdHMgdHJ1ZSwgZmFsc2UgdHVybnMgb2ZmIHRoZSBhdXRvbWF0aWMgaW1hZ2UgcmVzaXppbmcuCi0gKiAjMTE4OSBBZGQgdGhlIHhtbDpsYW5nIGF0dHJpYnV0ZSB0byBMYW5nTWFya3MgcGx1Z2luLiAgVGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgcGx1Z2luIGhhcyBjaGFuZ2VkLCBvbGQgY29uZmlndXJhdGlvbnMgYXJlIGFjY2VwdGVkIHdpdGggYSB3YXJuaW5nIHRvIHRoZSBjb25zb2xlLgotICogIzE0MzMgQWRkIGEgU2F2ZU9uQmx1ciBwbHVnaW4sIGF1dGhvcmVkIGJ5IFBldGVyIFNpZXdlcnQgKHdpdGggYSBjbGVhbiB1cCBieSBKYW1lcyBTbGVlbWFuKS4KLSAqICMxNDc5IEFkZCBDU1NQaWNrZXIgcGx1Z2luLgotICogIzEyMDUgQWRkIGFsbG93X2RlbGV0ZSBhbmQgYWxsb3dfZWRpdCB0byBJbWFnZU1hbmFnZXIKLSAqICMxMjA1IEFkZCBhbGxvd19kZWxldGUgdG8gRXh0ZW5kZWRGaWxlTWFuYWdlcgotICogIzE0OTYgTWFrZSBkaWFsb2cgdGl0bGUgYmFyIGxvZ28gc2tpbmFibGUKLSAqIHIxMjQzIEFkZGVkIGEgbWV0aG9kIHRvIGFsbG93IHBsdWdpbnMgdG8gZWFzaWx5IGxvYWQgYXNzZXRzIHN5bmNocm9ub3VzbHkgKGZvciBkZXBlbmRhbmNpZXMpLiAKLSAqICMxNTAyIEFkZCBuZXcgcGx1Z2luIE1vb3Rvb2xzRmlsZU1hbmFnZXIgLSBhbiBhZHZhbmNlZCBpbWFnZSBhbmQgZmlsZSB1cGxvYWRlci9waWNrZXIvaW5zZXJ0ZXIgd2l0aCBtdWx0aS1maWxlLXVwbG9hZCwgcHJvZ3Jlc3MgYmFycywgYW5kIHByZXZpZXdzLgotICogIzE1MDcgQ29uZmlnIG9wdGlvbiB0byBzaG93IGZvbnRzIGluIHRvb2xiYXIgdXNpbmcgYWN0dWFsIGZvbnRzLgotCi09PSBUcmFuc2xhdGlvbiA9PQotCi0gKiAjMTQ3NyBEYW5pc2ggdHJhbnNsYXRpb24gZm9yIEV4dGVuZGVkRmlsZU1hbmFnZXIgYW5kIFN1cGVyQ2xlYW4KLSAqIHIxMjA1IFVwZGF0ZWQgRGFuaXNoIHRyYW5zbGF0aW9uLgotICogIzE0NzAgQ29udHJpYnV0aW9uIGZyb20gTmllbHMgQmFnZ2VzZW4gdG8gYXNzaXN0IHRyYW5zbGF0b3JzLgotICogIzE0NTQsICMxNDU1LCAjMTQ1NiwgIzE0NTcsICMxNDU4LCAjMTQ1OSwgIzE0NjAgU3BhbmlzaCB0cmFuc2xhdGlvbnMuCi0gKiAjMTQ2OSBVcGRhdGVkIGRhbmlzaCB0cmFuc2xhdGlvbi4KLQotCi1YaW5oYSAwLjk2YmV0YTIKLUJ1Z3MgRml4ZWQKLSAqICMxMzc2IFtJRTYgJiBJRTcgUXVpcmtzbW9kZV0gRGlhbG9ncyBhcmUgaW52aXNpYmxlCi0gKiAjMTM4MSBbSUVdIFF1aXJrc01vZGUgZGlhbG9nIGJhY2tncm91bmQgcmVuZGVyZWQgaW4gd3JvbmcgcG9zaXRpb24gd2hlbiBwYW5lbCBpcyBkZXRhY2hlZAotICogIzEzODMgW0lFN10gU2VjdXJlIGFuZCBOb25zZWN1cmUgV2FybmluZwotICogIzEzODIgW0lFXSBRdWlya3NNb2RlIGRpYWxvZyBiYWNrZ3JvdW5kIGZhbHNlbHkgbm9uLWdyZXkgd2l0aCBtb2RhbCBkaWFsb2dzLCBncmV5IHdoZW4gZHJhZ2dpbmcgbW9kZWxlc3MgZGlhbG9ncwotICogIzEzODkgW0lFNl0gc2VsZWN0aW9uIGxvc3Qgd2hlbiBjbGlja2luZyB0b29sYmFyIGJ1dHRvbgotICogIzEzODYgW1NhZmFyaV0gU2V0dGluZyBkZWZhdWx0IGNoZWNrYm94IHNldHRpbmdzIGluIGRpYWxvZ3MgZG9lcyBub3Qgd29yawotICogIzEzOTQgZnVsbHBhZ2UgcHV0cyBtZXRhcy8gdGl0bGUgYWxsIG9uIHRoZSBzYW1lIGxpbmUKLSAqICMxMzkwIFByZXNlcnZlU2NyaXB0cyBzaG9ydGhhbmQgcGhwIHRhZ3MKLSAqICMxMzkyIHRvbyBtdWNoIHJlY3Vyc2lvbiB3aGVuIHNldHRpbmcgSFRNTCBpbiBmdWxsUGFnZSBtb2RlIHVzaW5nIG9uR2VuZXJhdGUvb25HZW5lcmF0ZU9uY2UKLSAqICMxNDA3IFtJRThdIHdpbmRvdyByZXNpemUgY2F1c2VzIGluZmluaXRlIGxvb3AKLSAqICMxNDA4IFBIUDUgSUlTIGZpbGUgdXBsb2FkIHByb2JsZW0KLSAqICMxMzc0IFtJRThdIFRhYmxlIGluc2VydCBub3Qgd29yawotICogIzEzNzkgW0ZpcmVmb3hdIG5vIGxvbmdlciBjb3JydXB0cyBpbWFnZSBkYXRhIGZyb20gYnJva2VuIGltYWdlcwotCi1UcmFuc2xhdGlvbgotICogW1NtYXJ0UmVwbGFjZV0gQWRkZWQgRnJlbmNoIHRyYW5zbGF0aW9uCi0gKiAjMTQwNiBbRnVsbFNjcmVlbl0gQWRkZWQgU3BhbmlzaCB0cmFuc2xhdGlvbgotCi1YaW5oYSAwLjk2YmV0YQotQnVncyBGaXhlZAotICogIzMxNCBTdGF0dXMgYmFyIHNob3VsZCB3cmFwCi0gKiAjNzQxIENvbnRleHRNZW51IHNob3VsZCBub3Qgb3ZlcmZsb3cgd2luZG93IGJvdW5kYXJpZXMKLSAqICM5NjEgYmFzZUhyZWYgbm90IGNvcnJlY3RseSB0cmVhdGVkIHdoZW4gc3RyaXBwaW5nCi0gKiAjMTE2MCBTYWZhcmkgcHV0cyBzZWxlY3RlZCBIVE1MIG5lYXIgYm90dG9tIGlmIGVkaXRlZAotICogIzExNjYgVGFibGVPcGVyYXRpb25zIGRpYWxvZ3MgZG8gbm90IHJlc2l6ZSBwcm9wZXJseSBpbiBTYWZhcmkgMwotICogIzExNzMgSUU4IGJldGEgdG9vbGJhcnMgYnJva2VuCi0gKiAjMTE3NCBJRTggYmV0YSBubyB0ZXh0IGN1cnNvciBpbiB3eXNpd3lnCi0gKiAjMTE4NyBFeHRlbmRlZEZpbGVNYW5hZ2VyICJpbWdNYW5hZ2VyLmNoYW5nZURpciBpcyBub3QgYSBmdW5jdGlvbiIgZXJyb3IKLSAqICMxMTkzIFN0eWxpc3QgYnVnIHdoZW4gZm9ybWF0dGluZyBzZWxlY3RlZCB0ZXh0Ci0gKiAjMTIxMyBXb3VsZCBiZSBuaWNlIHRvIHByb3RlY3QgdW5zYXZlZCBjaGFuZ2VzIGZyb20gYWNjaWRlbnRhbCBsb3NzIHdoZW4gbmF2aWdhdGluZyBhd2F5Ci0gKiAjMTIyMSBTZWxlY3RpbmcgaGVhZGluZyBub3JtYWwgb24gbm90aGluZyB0aHJvd3MgZXhjZXB0aW9uIGFsZXJ0Ci0gKiAjMTIyNCBzZXZlbmJpdGNsZWFuPyAvIGdob3N0IGN1cnNvciBlcnJvciB3aXRoIGh0bWwgbW9kZSB0b2dnbGUgKEZpcmVmb3gpCi0gKiAjMTIyNyBObyBDU1MgcnVsZXMgbG9hZCB3aGVuIHVzaW5nIEBpbXBvcnQgaW4gZXh0ZXJuYWwgc3R5bGVzaGVldAotICogIzEyMzAgQ1NTIHdpZHRoIGF0dHJpYnV0ZSBicmVha3Mgc2VsZWN0IGRpc3BsYXkgaW4gSUUKLSAqICMxMjQwIExpbmtlcjogdHJpbSBzcGFjZXMgZnJvbSBVUkwKLSAqICMxMjQ3IENoYXJDb3VudGVyIHByb2JsZW1zIHdpdGggU2lsdmEgc2tpbgotICogIzEyNTcgRXJyb3IgaWYgdXJsIHF1ZXJ5IHN0cmluZyBpbmNsdWRlZCAnLycKLSAqICMxMjU4IEV2ZW50IG9iamVjdCBpcyBub3QgaGFuZGVkIG92ZXIgdG8gZXZlbnQgaGFuZGxlcnMgaW5zdGFsbGVkIG9uIHRleHRhcmVhCi0gKiAjMTI2MSBEdXRjaCB0cmFuc2xhdGlvbiBmb3IgRnVsbHNjcmVlbiBtb2R1bGUKLSAqICMxMjgwIHJlc3RvcmVTZWxlY3Rpb24gZG9lc24ndCBhbHdheXMgd29yayBpbiBpbnRlcm5ldCBleHBsb3JlcgotICogIzEyODEgc2VsZWN0Tm9kZUNvbnRlbnRzIGlzIGJvcmtlbiBpbiBJRSB3aGVuIHRoZSBub2RlIGlzIGEgdGV4dCBub2RlCi0gKiAjMTI4NCBfZWRpdG9yX3VybCBpcyBzdGlsbCB1c2VkIGluIGEgY291cGxlIG9mIHBsdWdpbnMuCi0gKiAjMTI4NiB1c2UgY2FsbGJhY2tzIGFzIGNyaXRlcmlhIGZvciBnZXRGaXJzdEFuY2VzdG9yCi0gKiAjMTI4OCBbRGVmaW5pdGlvbkxpc3RdIGxpc3QgaXRlbXMgcmVzdHJpY3RlZCB0byBzbWFsbCB3aWR0aCBhbmQgb25lIGxpbmUgYnkgQ1NTCi0gKiAjMTI5MCBJbXByb3ZlZCBzdXBwb3J0IGZvciBwYXN0aW5nIGZyb20gTWljcm9zb2Z0IFdvcmQKLSAqICMxMjkxIFhpbmhhLnJlbW92ZUZyb21QYXJlbnQoKSBkb2VzIG5vdCByZXR1cm4gY29ycmVjdCByZWZlcmVuY2UKLSAqICMxMjkyIGNoYW5nZSBuYW1pbmcgc2NoZW1lIG9mIHBsdWdpbiBmaWxlcwotICogIzEyOTMgW0dlY2tvXSBXaW5kb3cgc2Nyb2xscyB0byB0b3Agb2YgZWRpdGluZyBhcmVhIHdoZW4gc3dpdGNoaW5nIGZyb20gdGV4dCB0byBXWVNJV1lHCi0gKiAjMTI5NCBFZGl0b3IgaGlnaGVyIGluIEhUTUwgbW9kZQotICogIzEyOTUgVGV4dGFyZWEgbm90IGFsaWduZWQgdW5kZXIgdG9vbGJhcgotICogIzEyOTggQ1NTIHN0eWxpbmcgZ2V0cyBpbnNlcnRlZCBpbnRvIHRhYmxlIGNlbGwgYWZ0ZXIgdmlld2luZyBzb3VyY2UgKFNhZmFyaSBvbmx5KQotICogIzEzMDAgY3JlYXRlIG5hbWVzcGFjZSBmb3IgcGx1Z2lucyB3aXRoaW4gWGluaGEgbmFtZXNwYWNlCi0gKiAjMTMwMSBsb2FkaW5nIHNob3VsZCBub3QgZmFpbCBpZiBwbHVnaW4gb21pdHMgX3BsdWdpbkluZm8KLSAqICMxMzAyIGFkZCBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCBmb3IgQnJvd3NlciB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBpdAotICogIzEzMDMgYWRkIGdldEVsZW1lbnRzQnlDbGFzc05hbWUoKQotICogIzEzMDYgVG9vbGJhciBhY3Rpb25zIG5lZWQgYWNjZXNzIHRvIHRoZSBjbGljayBldmVudAotICogIzEzMDkgWGluaGEgY2hva2VzIG9uIGFuY2hvcnMKLSAqICMxMzE1IFhpbmhhJ3MgX2FkZEV2ZW50IHVzZXMgZXZlbnQgY2FwdHVyaW5nCi0gKiAjMTMxNiBJbiBJbnRlcm5ldEV4cGxvcmVyLCB0aGUgY3Vyc29yIGlzIGxvc3Qgd2hlbiBzd2l0Y2hpbmcgaW50byBzb3VyY2UgbW9kZQotICogIzEzMTcgWGluaGEncyBwb3N0YmFjayBhbmQgZ2V0YmFjayBzaG91bGQgYWxsb3cgZm9yIGZhaWx1cmUgaGFuZGxlcnMKLSAqICMxMzE5IG1ha2UgZXZlbnQgaG9va3MgbGlrZSBvbktleVByZXNzIGFjY2VzaWJsZSBmcm9tIHRoZSBjb25maWcgb2JqZWN0Ci0gKiAjMTMyMCBtYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBwbmcgaW1hZ2VzIGFzIGljb25zIGluIElFNgotICogIzEzMjEgW1NhdmVTdWJtaXRdIGljb24gaXMgaW4gImNoYW5nZWQiIHN0YXRlIGluaXRpYWxseQotICogIzEzMjIgW1NhdmVTdWJtaXRdIGVycm9yIHdoZW4gZm9ybSBhY3Rpb24gaXMgZW1wdHkKLSAqICMxMzMyIFBhbmVsIGNsYXNzZXMgYXJlIHZlcnkgZ2VuZXJpYywgYW5kIHJpc2sgY29uZmxpY3Qgd2l0aCB1c2VycyBlbWJlZGRpbmcgaXQgaW4gdGhlaXIgc2l0ZQotICogIzEzMzcgR2V0SFRNTCB0cnVuY2F0ZXMgaHlwZXJsaW5rcwotICogIzEzNDYgc3RhdHVzYmFyIHNob3dzIGIsIGksIHN0cmlrZSBpbnN0ZWFkIG9mIHN0cm9uZywgZW0sIGFuZCBkZWwKLSAqICMxMzU3IHNhZmFyaSBmb3JtIHN1Ym1pdCBoYXMgZW1wdHkgZm9ybSBmaWVsZCBuYW1lcyBpbiBQT1NUIGRhdGEsIGNhdXNlcyBmYWlsdXJlIHdpdGggcGVybCBDR0kKLQotIAotRW5oYW5jZW1lbnRzCi0gKiAjMTE3NiBDb21wbGV0ZWx5IHJldmFtcGVkIGRpYWxvZyBzeXN0ZW0sIHdoaWNoIHVzZXMgaW5saW5lIGxpZ2h0Ym94LXN0eWxlIGRpYWxvZ3MgaW5zdGVhZCBvZiBzZXBhcmF0ZSBwb3B1cCB3aW5kb3dzIAotICogIzMyNiBBZGRlZCBzdXBwb3J0IGZvciBjdXN0b21pemFibGUgaWNvbiBzZXRzCi0gKiAjMTMxOCBBZGRlZCBpY29uIHNldCBmcm9tIHRoZSBUYW5nbyBQcm9qZWN0Ci0gKiAjMTI4NyBOZXcgSW5zZXJ0Tm90ZSBwbHVnaW4gZm9yIGhhbmRsaW5nIGZvb3Rub3Rlcywgd2l0aCBhdXRvbWF0aWMgbm90ZSBudW1iZXJpbmcgYW5kIG9yZGVyaW5nLCBsaW5raW5nLCBhbmQgc3VwcG9ydCBmb3IgcmVwZWF0ZWQgcmVmZXJlbmNlcwotICogIzEyODkgTmV3IEluc2VydFNuaXBwZXQyIHBsdWdpbiwgd2l0aCBjYXRlZ29yaXphdGlvbiBvZiBzbmlwcGV0cywgc2VhcmNoIGJ5IG5hbWUsIGFuZCBhbiBYTUwgZGF0YSBmb3JtYXQKLSAqICM1OCBBZGRpdGlvbmFsIHNldHRpbmdzIGZvciBMaW5rZXIgcGx1Z2luIChsaW5rIHR5cGVzIGFuZCB0YXJnZXRzIGNhbiBiZSBjb25maWd1cmVkKQotICogIzEyMTkgQ29uZmlndXJhdGlvbiBvcHRpb24gdG8gYXV0b2ZvY3VzIGVkaXRvcgotICogIzEyODUgQ29uZmlndXJhdGlvbiBvcHRpb24gdG8gc2V0IGRvY3VtZW50IGJvZHkgY2xhc3MKLSAqICMxMzIzIEFsbG93IHNraW5zIHRvIGhhdmUgbWV0YSBpbmZvcm1hdGlvbiAoYXV0aG9yLCBldGMuKQotICogIzEzMzggX2VkaXRvcl91cmwgaXMgbm93IGF1dG9tYXRpY2FsbHkgZGV0ZWN0ZWQKLSAqICMxMzQ1IEFkZCBhIHN0YXRpYyBmdW5jdGlvbiB0aGF0IHNhdmVzIHRoZSBjb250ZW50cyBvZiBhbGwgWGluaGFzIHRvIHRoZWlyIHJlc3BlY3RpdmUgdGV4dGFyZWFzCi0KLQotWGluaGEgMC45NQotQnVncyBGaXhlZAotICogZml4ZWQgIzEwNDAgaHRtbFJlbW92ZVRhZ3MgZG9lc24ndCB3b3JrIGluIElFIAotICogZml4ZWQgIzY0NSBJRSBTYXZlIGFzIGZ1bmN0aW9uIG9ubHkgc2F2ZXMgdGhlIG9yaWdpbmFsIGh0bWwgCi0gKiBmaXhlZCAjMTEzNiBGRjMgTGludXggc2VsZWN0IGJveGVzIGluIHRvb2xiYXIgYXJlIHRvbyBzbWFsbCAKLSAqIGZpeGVkICMxMTAwIEV4dGVuZGVkIEZpbGUgTWFuYWdlciAtIEVycm9yIGFmdGVyIG9wZW5pbmcgd2luZG93Ci0gKiBmaXhlZCAjMTEwMyBbVHJhbnNmb3JtSW5uZXJIVE1MXSBJRSBicmVha3Mgc2luZ2xldCBhdHRyaWJ1dGVzIHN0YXJ0aW5nIHdpdGggIm5vIgotICogZml4ZWQgIzEwODYgUmVwZWF0ZWQgamF2YXNjcmlwdCBpbnNlcnRpb24gaW4gb25jbGljayBhdHRyaWJ1dGVzCi0gKiBmaXhlZCAjMTA5NCBJRSB0aHJvd3MgZXJyb3IgaW4gWGluaGEubG9hZFN0eWxlIGZ1bmN0aW9uCi0gKiBmaXhlZCAgIzExMTcgSUUgcmV0dXJucyBqYXZhc2NyaXB0IGVycm9yIC0xMDcyODk2NjU4Ci0gKiBmaXhlZCAjOTkzIFBhZ2VTdHlsZSB0byBvdmVycmlkZSBzdHlsZXMgaW4gUGFnZVN0eWxlc2hlZXRzCi0gKiAjMTExMiBzd2l0Y2hpbmcgYmV0d2VlbiBtb2RlcyBsZWF2ZXMgc3RyYW5nZSBjaGFyYWN0ZXJzIGluIHNvdXJjZSAKLSAqIGZpeGVkICMxMTI4IGxvYWRpbmcgZmFpbHMgd2hlbiBGdWxsc2NyZWVuIHRyaWVkIHRvIGxvYWQgYXMgcGx1Z2luCi0gKiBmaXhlZCAjMTEyNiBQZXJjZW50ICglKSBpbiBVUkwgcHJldmVudCBzdHJpcFNlbGZOYW1lZEFuY2hvcnMgZnJvbSB3b3JraW5nICAKLSAqIGZpeGVkICMxMTIwIEhUTUwgc2VsZWN0IG92ZXJsYXBzIGNvbG9yIHBpY2tlciBpbiBJRTYKLSAqICMxMTE1ICsgIzExMjcgZml4ZWQgY29tcGF0aWJpbGl0eSBpc3N1ZXMgd2l0aCBGaXJlZm94IDMKLSAqICM5NjEgKyAgIzExMzAgY2hhbmdlZCBiZWhhdmlvdXIgb2YgeGluaGFfY29uZmlnLmJhc2VIcmVmCi0gKiBmaXhlZCAjNjQ1IFNhdmUgYXMgZnVuY3Rpb24gb25seSBzYXZlcyB0aGUgb3JpZ2luYWwgaHRtbAotICogZml4ZWQgIzEwNDAgaHRtbFJlbW92ZVRhZ3MgZG9lc24ndCB3b3JrIGluIElFCi0gKiBmaXhlZCAjMTAxNSBNb3ppbGxhIHNob3dzIHNjcm9sbGJhcnMgb24gY2xpY2sgaW4gU3R5bGlzdCAKLSAqICM5MTggcmVtb3ZlZCBtb3pQYXJhSGFuZGxlciBkaXJ0eSBhcyBpdCBoYWQgYmVlbiBicm9rZW4gZm9yIGEgbG9uZyB0aW1lCi0gKiBmaXhlZCAjMTAxNSBNb3ppbGxhIHNob3dzIHNjcm9sbGJhcnMgb24gY2xpY2sgaW4gU3R5bGlzdCAKLSAqIGZpeGVkICMxMTQ4IEhUTUwgZW50aXRpZXMgYnJlYWsgd2hlbiBjdXJzb3IgaXMgaW5zaWRlIHdoZW4gc3dpdGNoaW5nIGZyb20gSFRNTCB0byBXWVNJV1lHIAotICogZml4ZWQgIzExNTEgZm9ybSBhY3Rpb24gYWx3YXlzIG1hZGUgYWJzb2x1dGUKLSAqIGZpeGVkICMxMTU1IEluc2VydEFuY2hvciBicm9rZW4gaW4gSUUgNwotICogZml4ZWQgIzExNTggW0ltYWdlTWFuYWdlcl0gaW4gSmFwYW5lc2UgZW52aXJvbm1lbnQsIGFuIGVycm9yIG9jY3VycyBieSByZWFkaW5nIG9mIGxhbmcvamEuanMgaW4gSUU2LzcgCi0gKiBmaXhlZCAjMTE1MiBQbHVnaW5zIHVzaW5nIHN1cnJvdW5kSFRNTCAoRWRpdFRhZywgTGFuZ01hcmtzKSBubyBsb25nZXIgd29yayBpbiBJRTcKLSAqIGZpeGVkICMxMTYxIHBlcm1pc3Npb24gZXJyb3IgZnJvbSBDb2xvclBpY2tlci5qcwotICogZml4ZWQgIzExODEgW1RhYmxlT3BlcmF0aW9uc10gVGFibGUgT3B0aW9ucyBkaWFsb2cgZmlyc3QgZW50cnkgZm9yIGJvcmRlciBzdHlsZSBmYXVsdHkKLSAqIGZpeGVkICMxMTg1IFtUYWJsZU9wZXJhdGlvbnNdIElFOiBzdHlsZSBmbG9hdCBicm9rZW4KLSAqIGZpeGVkICMxMTk3IFtMaW5rZXJdIElFIHNob3dzIGJ1ZyBpbiBsaW5lIDI2MgotICogZml4ZWQgIzEyMDAgW0xpbmtlcl0gRGlhbG9nIGRvZXMgbm90IHNob3cgaWYgc2Nhbm5lZCBmb2xkZXIgZW1wdHkKLSAKLUVuaGFuY2VtZW50cwotICogIzExNDMgYWRkIFNhZmFyaSBzdXBwb3J0Ci0gKiAjOTM4ICBhZGQgT3BlcmEgc3VwcG9ydAotICogIzExMzggYWRkZWQgQVBJIGZ1bmN0aW9ucyBYaW5oYS5nZXRFZGl0b3IoKSwgWGluaGEucHJvdG90eXBlLmdldFBsdWdpbkluc3RhbmNlKCksIFhpbmhhLmFkZE9ubG9hZEhhbmRsZXIoKSAKLSAqICMxMTM3IFtFcXVhdGlvbl0gRkYzIGZpeGVzICYgaW1wcm92ZWQgd2F5IG9mIGF2b2lkaW5nIGZvcm11bGEgY2hhbmdlcyBpbiBlZGl0b3IKLSAqICMxMTUwIHN5bmNocm9uaXplICJSZW1vdmUgRm9ybWF0IiBiZXR3ZWVuIGJyb3dzZXJzCi0gKiBhZGRlZCBwbHVnaW4gUHJlc2VydmVTY3JpcHRzIGZvciBlbmhhbmNlZCBlZGl0aW5nIG9mIHBhZ2VzIGNvbnRhaW5pbmcgUEhQIGFuZC9vciBKYXZhU2NyaXB0ICgpCi0gKiBMb2FkaW5nIG1lc3NhZ2UgZmFjZWxpZnQKLSAqIGFkZGVkIFhpbmhhTG9hZGVyLmpzIGZvciBlbmhhbmNlZCB1c2VyIGV4cGVyaWVuY2UgdGhyb3VnaCBlYXJseSBsb2FkaW5nIG1lc3NhZ2UKLSAqIG1hZGUgWGluaGEubWFrZUVkaXRvcnMgYWNjZXB0IGEgRE9NIHJlZmVyZW5jZSB0byB0aGUgdGV4dGFyZWEgaW5zdGVhZCBvZiB0aGUgaWQgYXMgcGFydCBvZiB4aW5oYV9lZGl0b3JzIGFycmF5ICgjMTEwNSkKLSAqICMxMTIzIEFsbG93IHJldHVybiBvZiBQSFAgYXJyYXkgZnJvbSB4aW5oYV9wYXNzX3RvX3BocF9iYWNrZW5kCi0gKiBbTGlua2VyXSBzY2FuLnBocDogQWxsb3cgc3BlY2lmaWNhdGlvbiBvZiBiYXNlIHVybCB0byB1c2UgKHNvIHRoYXQgYSBzdWJkaXJlY3RvcnkgY2FuIGJlIHVzZWQgYXMgJGRpciBhbmQgcmV0dXJuIGFwcHJvcHJpYXRlIHVybHMgdG8gdGhlIGZpbGVzIChwcmVmaXhpbmcgdGhlIHVybAotICogW0V4dGVuZGVkRmlsZU1hbmFnZXJdIG5ldyBWZXJzaW9uCi0gKiAjOTYxICsgICMxMTMwIGNoYW5nZWQgYmVoYXZpb3VyIG9mIHhpbmhhX2NvbmZpZy5iYXNlSHJlZgotICogIzExMzcgW0VxdWF0aW9uXSBpbXByb3ZlZCB3YXkgb2YgYXZvaWRpbmcgZm9ybXVsYSBjaGFuZ2VzIGluIGVkaXRvcgotICogIzQ0MiByZW1vdmVkIGFsZXJ0ICJZb3VyIERvY3VtZW50IGlzIG5vdCB3ZWxsIGZvcm1lZC4uLiIKLSAqICMxMTE5IGRpc2FibGVkIEZpcmVmb3ggMiBzcGVsbCBjaGVjayB3aGVuIENvbnRleHRNZW51IGlzIGVuYWJsZWQgCi0gKiBhZGRlZCBhIHBsdWdpbiAiR2VuZXJpY1BsdWdpbiIgYXMgYSBkZW1vY2FzZSBmb3IgcGx1Z2luIGV2ZW50IGhhbmRsZXJzCi0gKiAjMTE3MSBbU21hcnRSZXBsYWNlXSBub3cgYWxzbyByZXBsYWNlcyB0aHJlZSBkb3RzIHdpdGggYW4gZWxsaXBzaXMKLSAqICMxMTE5IFtDb250ZXh0TWVudV0gb3B0aW9uYWxseSBzd2l0Y2ggb2YgRmlyZWZveCBTcGVsbCBjaGVjawotICogIzExNzIgW0xhbmdNYXJrc10gbWFrZSBhdmFpbGFibGUgbGFuZ3VhZ2VzIGNvbmZpZ3VyYWJsZQotICogZW5oYW5jZWQgYmVoYXZpb3VyIHdoZW4geGluaGFfY29uZmlnLmJhc2VIcmVmIGlzIHNldCB0byBhbm90aGVyIHNlcnZlcgotICogIzExOTUgQWxsb3cgdG8gc3BlY2lmeSBhbiBleHRlcm5hbCB1cmwgdG8gbG9hZCBhIHBsdWdpbiBmcm9tCi0gKiAjMTIwMSBBZGQgaW53YXJkSHRtbC9vdXR3YXJkSHRtbCBmdW5jdGlvbnMgdG8gQ29uZmlnIG9iamVjdAotIAotSTE4bgotICogIzExMDkgU3BhbmlzaCBsYW5ndWFnZSBleHRlbmRlZAotICogIzExMTYgW0V4dGVuZGVkRmlsZU1hbmFnZXJdIGFkZGVkIEZyZW5jaCB0cmFuc2xhdGlvbgotICogIzg1MyB1cGRhdGVkIFRyYW5zbGF0aW9uIGZvciBmYXJzaQotICogZml4ZWQgd3JvbmcgZW5jb2RpbmcgaW4gU3BhbmlzaCBsYW5ndWFnZSBmaWxlIAotICogZml4ZWQgbm8gYm9sZC9pdGFsaWMvdW5kZXJsaW5lIGJ1dHRvbiBpbWFnZXMgaW4gU3BhbmlzaAotICogICMxMTk0IFtFeHRlbmRlZEZpbGVNYW5hZ2VyXSB1cGRhdGVkIEZyZW5jaCB0cmFuc2xhdGlvbgotCi0gCi1YaW5oYSAwLjk0Ci0gKiBUaWNrZXQgIzEwOTMgW0luc2VydFNtaWxleV0gcmVtb3ZlIHNtaWxleSBnaWZzIGZyb20gdHJ1bmsKLSAqIGZpeGVkIFRpY2tldCAjMTAxOSBDdXNvciBub3QganVtcGluZyB0byBlZGl0YWJsZSBwYXJ0IG9mIHdpbmRvdyB3aGVuIGNsaWNrZWQgaW4gSUUKLSAqIFtUYWJsZU9wZXJhdGlvbnNdIEFkZCBjb25maWcgb3B0aW9uIHRvIG5vdCBkaXNwYWx5IHRvb2xiYXIgYnV0dG9ucwotICogZml4ZWQgVGlja2V0ICMxMDIxICBQcmV2ZW50IEV4dGVuZGVkRmlsZU1hbmFnZXIgZnJvbSBtYXNraW5nIEltYWdlTWFuYWdlcgotICogZml4ZWQgVGlja2V0ICMxMDIzIFtJbWFnZU1hbmFnZXJdIEFkZCBjb25maWcgaXRlbSB0byBhbGxvdyB0aGUgYWR2YW5jZWQgaW1hZ2Ugb3B0aW9ucyB0byBiZSBoaWRkZW4gZnJvbSB0aGUgdXNlcgotICogZml4ZWQgVGlja2V0ICMxMDI2IGZpeCBwcm9ibGVtcyB3aXRoIGxvYWRpbmcgc2tpbnMKLSAqIGZpeGVkIFRpY2tldHMgIzEwMzAgJiAjMTAzMTogc2xvdyBsb2FkaW5nIGxhcmdlIHBhZ2VzIGluIElFCi0gKiBmaXhlZCBUaWNrZXQgIzEwMzQgW0V4dGVuZGVkRmlsZU1hbmFnZXJdIENvbG9yIHBpY2tlcnMgc2hvd24gd2hlbiB1c2VfY29sb3JfcGlja2VycyBpcyBmYWxzZQotICogZml4ZWQgVGlja2V0ICMxMDM1IFtUcmFuc2Zvcm1Jbm5lckhUTUxdIHRhZ3MgY29ycnVwdGVkdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzCi0gKiBmaXhlZCBUaWNrZXQgIzEwMzYgW0V4dGVuZGVkRmlsZU1hbmFnZXJdIHdpbmRvdyBpcyBvbmx5IHJlc2l6ZWQgYWZ0ZXIgYWxsIHRodW1ibmFpbHMgaGF2ZSBiZW5uIGxvYWRlZCwgd2hpY2ggY2FuIHRha2UgcXVpdGUgc29tZSB0aW1lCi0gKiBmaXhlZCBUaWNrZXQgIzEwMzkgRmlyZWZveCBmdWxsIHBhZ2UgYWRkcyBtdWx0aXBsZSBwYXJhZ3JhcGhzIGFmdGVyIHZpZXcgc291cmNlCi0gKiBmaXhlZCBUaWNrZXQgIzEwMTkgQ3Vzb3Igbm90IGp1bXBpbmcgdG8gZWRpdGFibGUgcGFydCBvZiB3aW5kb3cgd2hlbiBjbGlja2VkIGluIElFNwotICogZml4ZWQgVGlja2V0ICMxMDQ2IEVycm9yIGluIElFIDYgd2hlbiBzd2l0Y2hpbmcgZnJvbSB0ZXh0IHRvIHd5c2l3eWcKLSAqIFtET013YWxrXSBsaW5lYnJlYWtzIGluc2VydGVkIGJlZm9yZSA8YnIgLz5zCi0gKiBjYXRjaCBlcnJvciBpbiBJRSB3aGVuIHRyeWluZyB0byByZXN0b3JlIHNlbGVjdGlvbiBvbiBub24tZGlzcGxheWVkIGFyZWEKLSAqIGZpeGVkIFRpY2tldCAjOTczIEVycm9yIHN3aXRjaGluZyB3eXNpd3lnL2h0bWwgaW5jbHVkaW5nIGphdmFzY3JpcHQgZmlsZSBvbiB0aGUgY29kZQotICogZml4ZWQgVGlja2V0ICMxMDI4ICAtIFtMaW5rZXJdIGF1dG9tYXRpY2FsbHkgKGF0dGVtcHQgdG8pIHdvcmsgYXJvdW5kIGFuIGlzc3VlIHdpdGggbW9kX3NlY3VyaXR5IGJlaW5nIHRyaWdnZXJlZCBiZWNhdXNlIG9mIHRoZSBjaGFyc2V0IG9uIG91ciBQT1NUIHJlcXVlc3RzCi0gKiBmaXhlZCBUaWNrZXQgIzEwNTUgW1N0eWxpc3RdIEluYXBwcm9wcmlhdGUgc3R5bGVzIChmb3Igb3RoZXIgdGFncykgYXJlIHNob3duCi0gKiBhZGRlZCBEdXRjaCBsYW5ndWFnZSBmaWxlcwotICogYWRkZWQgbmV3IGhvb2sgJ29uQmVmb3JlU3VibWl0JyBmb3IgZmlyZVBsdWdpbkV2ZW50KCkKLSAqIGFkZGVkIG5ldyBob29rICdvbkJlZm9yZVVubG9hZCcgZm9yIGZpcmVQbHVnaW5FdmVudCgpCi0gKiBmaXhlZCBUaWNrZXQgIzEwNDggRnVsbCBTY3JlZW4gcGx1Z2luIGRvZXNuJ3QgbG9hZCBpZiBtYW55IGVkaXRvcnMgb24gcGFnZQotICogZml4ZWQgVGlja2V0ICMxMDUzIExpc3RUeXBlIHBsdWdpbiBkb2Vzbid0IHdvcmsgaW4gcGFuZWwgY29uZmlnIHdpdGggbXVsdGlwbGUgZWRpdG9ycwotICogZml4ZWQgVGlja2V0ICMxMDI2IFNraW5zIHJlZmVyZW5jZWQgd2l0aCA8bGluaz4tdGFncyBkb24ndCB3b3JrIGFueW1vcmUKLSAqIGZpeGVkIFRpY2tldCAjMTA1OSBbRXF1YXRpb25dIGxvb3NpbmcgZm9ybXVsYSBvbnN1Ym1pdAotICogZml4ZWQgVGlja2V0ICMxMDYwIFtFcXVhdGlvbl0gdmFyaW91cyB1cGRhdGVzCi0gKiBbRXF1YXRpb25dIHByZXNlcnZlIGZvcm11bGEgb24gcmVsb2FkIGluIE1vemlsbGEKLSAqIFtFcXVhdGlvbl0gdXBkYXRlZCBBU0NJSU1hdGhNTC5qcwotICogW1NraW46c2lsdmFdIHBhZGRpbmcgYW5kIGJvcmRlciBvbiB0ZXh0YXJlYSBtYWtlIHRoZSB0ZXh0bW9kZSB0b28gd2lkZSAKLSAqIGZpeGVkIFRpY2tldCMxMDAxIEVkaXRvciBsb2FkcyBhIGJ1bmNoIG9mIG51bGwgdXJscyBpbiBpZQotICogZml4ZWQgVGlja2V0ICMxMDY4IFtUcmFuZm9ybUlubmVySFRNTF0gbmV3bGluZXMgYWRkZWQgYWZ0ZXIgPC9zY3JpcHQ+Ci0gKiBmaXhlZCBUaWNrZXQjMTA2OSBFZGl0b3IgZG9jdW1lbnQgVVJMIHByZWZpeGVkIHRvIGFueSBocmVmIHRoYXQgb25seSBjb25zaXN0cyBvZiBVUkwgcGFyYW1ldGVycwotICogYWRkZWQgVGhhaSB0cmFuc2xhdGlvbiBmb3IgY29yZQotICogYWRkZWQgY29tcGxldGUgUG9ydHVndWVzZSBCcmF6aWxpYW4gdHJhbnNsYXRpb24KLSAqIHVwZGF0ZWQgbGNfcGFyc2Ugc2NyaXB0Ci0gKiBmaXhlZCBUaWNrZXQgIzEwNzEgW0V4dGVuZGVkRmlsZU1hbmFnZXJdIGV4dGVybmFsIGltYWdlIFVSTCBpbWFnZSBpbnNlcnRlZCB3aXRoIHdpZHRoL2hlaWdodCAwLCBhbWtpbmcgaXQgaW52aXNpYmxlCi0gKiBmaXhlZCBUaWNrZXQgIzEwNzQgW1N1cGVyQ2xlYW5dIHRocm93cyB3YXJuaW5ncyBpbiBQSFAgNQotICogZml4ZWQgVGlja2V0ICMxMDc5IFtEeW5hbWljQ1NTXSBsaXN0cyBYaW5oYSBpbnRlcm5hbCBDU1MKLSAqIGZpeGVkIFRpY2tldCAjMTA4MCBTb21lIHBsdWdpbnMgbGVhdmUgYmVoaW5kIHN0eWxlc2hlZXQgbGlua3MgaW4gZnVsbHBhZ2UgbW9kZQotICogZml4ZWQgVGlja2V0ICMxMDgzIENvbnZlcnQgVVJMcyB0byBsaW5rcyAtIEVycm9yCi0gKiBmaXhlZCBUaWNrZXQgIzEwODQgVVJMIGF1dG8tbGlua2luZyAoR2Vja28pOiBVUkxzIHdpdGggdXNlcjpwYXNzd29yZEBkb21haW4udGxkIGZhbHNlbHkgcmVjb2duaXplZCBhcyBlbWFpbCBhZGRyZXNzCi0gKiBmaXhlZCBUaWNrZXQgIzEwODUgVVJMIGF1dG8tbGlua2luZyAoR2Vja28pOiBJUCBudW1iZXJzIGRvbid0IHdvcmsKLSAqIGZpeGVkIFRpY2tldCAjMTA4MSBDb250cm9sIGNoYXJhY3RlciBpcyBub3QgYmVpbmcgcmVtb3ZlZCBpbnNpZGUgU0NSSVBUIHRhZ3Mgb3IgSEVBRCB3aGVuIHN3aXRjaGluZyBmcm9tIHRleHRtb2RlIHRvIGh0bWxtb2RlCi0gKiBmaXhlZCBUaWNrZXQgIzEwNzggW0luc2VydEltYWdlXSBzcGFjaW5nIGF0dHJpYnV0ZXM6IGluY29uc2lzdGVudCBiZWhhdmlvdXIgd2hlbiBlZGl0aW5nIGltYWdlCi0gKiBmaXhlZCBUaWNrZXQgIzEwODkgW0NvbG9yIFBpY2tlcl0gTG9jYWxpemUgT0sgTGFiZWwKLSAqIGZpeGVkIFRpY2tldCAjMTA5MSBbU2F2ZVN1Ym1pdF0gZG9lcyBub3QgY29ycmVjdGx5IHN1Ym1pdCB2YWx1ZSBvZiBjaGVja2JveGVzIGFuZCByYWRpbyBidXR0b25zCi0KLVhpbmhhIDAuOTMKLSAtIGZpeGVkIFRpY2tldCAjOTY3IEZvbnQgQ29sb3IgUGlja2VyIHN0b3BzIHdvcmtpbmcgYWZ0ZXIgdXNpbmcgb25lIG9mIEltYWdlTWFuYWdlciwgRXh0ZW5kZWRGaWxlTWFuYWdlciwgRnVsbFBhZ2UsIG9yIEhvcml6b250YWxSdWxlCi0gLSBmaXhlZCBUaWNrZXQgIzk2NSBXaGVuIHN3aXRjaGluZyBiZXR3ZWVuIFhpbmhhcyBpbiB0aGUgc2FtZSBwYWdlLCBpbiB0ZXh0bW9kZSB0b29sYmFyIHN0YXlzIGRpc2FibGVkCi0gLSBmaXh3ZCBUaWNrZXQgIzk2MyBET013YWxrIElFOiBoZWFkIHRhZyBhdHRyaWJ1dGVzIHdpdGhvdXQgcXVvdGVzIGFuZCBjbG9zaW5nIHNsYXNoCi0gLSBUaWNrZXQgIzk2MiBET013YWxrIE1vemlsbGE6IGltcHJvdmVkIHNvdXJjZSBpbmRlbnRhdGlvbgotIC0gZml4ZWQgVGlja2V0ICM5NTcgSWYgaXRlbSBpbiBpbiB4aW5oYV9lZGl0b3JzIGlzIG5vdCBhIHRleHRhcmVhOiBza2lwIGdyYWNlZnVsbHkKLSAtIGZpeGVkIFRpY2tldCAjOTAwOiBjYXRjaCBhbiBmYXRhbCBlcnJvciB0aGF0IG9jY3VyZWQgc29tZXRpbWVzIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gbW9kZXMgaW4gZnVsbHBhZ2UgbW9kZSBpbiBNb3ppbGxhCi0gLSBmaXhlZCBUaWNrZXQgIzk2OSBET013YWxrIEdlY2tvOiBsaW5lIGJyZWFrcyByZW5kZXJlZCBhcyA8YnI+cyBpbnNpZGUgPHByZT4gYmxvY2tzCi0gLSBmaXhlZCBUaWNrZXQgIzk3NiBMb2FkaW5nIG1lc3NhZ2UgbWlzcGxhY2VkIGluIElFNwotIC0gZml4ZWQgVGlja2V0ICM5NzcgVGFibGVPcGVyYXRpb25zIHRvb2xiYXIgb2ZmLXBsYWNlIGluIGV4dF9leGFtcGxlLmh0bWwKLSAtIGZpeGVkIFRpY2tldCAjOTc4IGRlZmluaW5nIGEgcGFkZGluZyBmb3IgPHRkPnMgaW4gZ2xvYmFsIGNzcyBhZmZlY3RzIFhpbmhhIGZyYW1ld29yawotIC0gVGlja2V0ICM5NzkgaW1wcm92ZSBjaGVja2luZyBmb3Igbm9uLXN1cHBvcnRlZCBicm93c2VycwotIC0gZml4ZWQgVGlja2V0ICM5MzQgU3VwZXJDbGVhbiBwbHVnaW4gcmV0dXJucyBqdXN0IHF1b3RhdGlvbiB3aGVuIGV4ZWN1dGVkIG9uIGxvY2FsaG9zdAotIC0gVGlja2V0ICM5MjkgU2F2ZSBjaGFuZ2VzIG9uIHBhZ2UgdW5sb2FkIGZpeGVkIGZvciBNb3ppbGxhIAotIC0gZml4ZWQgVGlja2V0ICM5ODAgSW1hZ2VNYW5hZ2VyIGNvbG9yIGZvcm1hdCBidWcKLSAtIGZpeGVkIFRpY2tldCAjOTgxIE5vIGRvY3R5cGUgaW4gaWZyYW1lIGNvbnRlbnQgZG9jdW1lbnQvIGVkaXRvciBhbHdheXMgaW4gcXVpcmtzIG1vZGUKLSAtIGZpeGVkIFRpY2tldCAjNTQzIFN0eWxpc3QgUGFuZWwgb3ZlcmZsb3cgYnJva2VuCi0gLSBUaWNrZXQgIzk4MyBhZGRlZCBpZCBmb3IgaWZyYW1lCi0gLSBmaXhlZCBUaWNrZXQgIzk4NCAhRXh0ZW5kZWRGaWxlTWFuYWdlciBwcm9kdWNlcyBwaHAgd2FybmluZwotIC0gb3B0aW1pemVkIGljb24gZmlsZSBzaXplCi0gLSBmaXhlZCAhSmF2YVNjcmlwdCBlcnJvciBpbiAhSW1hZ2VNYW5hZ2VyLyFFeHRlbmRlZEZpbGVNYW5hZ2VyIGltYWdlIGVkaXRvcgotIC0gVGlja2V0ICM5MDgqIFByb21wdHMgYnJva2VuIGluIElFNzogZml4ZWQgZm9yIEVGTSwgIUltYWdlTWFuYWdlciAmICFUYWJsZU9wZXJhdGlvbnMKLSAtIEZpeGVzIGZvciBUYWJsZU9wZXJhdGlvbnMsIHRpY2tldHMgIzgyLCAjOTA4KiwgIzkxMiBhbmQgIzk0NwotIC0gZml4ZWQgVGlja2V0ICM5OTgqIHdoaXRlc3BhY2UgYWRkZWQgYmVmb3JlIGFuZC9vciBhZnRlciBjb250ZW50IChpbiBub24tZnVsbHBhZ2UgbW9kZSkKLSAtIGZpeGVkIHNsb3cgdW5sb2FkaW5nIGluIE1vemlsbGEKLSAtIEZpeCBmb2N1cyBwcm9ibGVtIHdoZW4gc3dpdGNoaW5nIGZyb20gaHRtbCB0byB3eXNpd3lnIGluIEdlY2tvLiBTZWUgdGlja2V0ICM5MDAuCi0gLSBmaXhlZCB0b29sYmFyIGZsb2F0aW5nIGlzc3VlCi0gLSBmaXhlZCAjMTAwMyBIVE1MIGxlbmd0aCBsaW1pdGVkIHRvIDEwMjQgY2hhcmFjdGVycyB3aXRoIHBsdWdpbiBDaGFyQ291bnRlcgotIC0gVGlja2V0ICMxMDAwIG5ldyBwdWJsaWMgbWV0aG9kcyBmb3IgZ2V0dGluZy9zZXR0aW5nIGVkaXRvciBjb250ZW50Ci0gLSBmaXhlZCAjNzM1IC0gSUUgZWF0aW5nIHNjcmlwdHMgYW5kIGNvbW1lbnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgcGFnZXMuCi0gLSBBZGRlZCBuZXcgY29uZmlnIHZhcmlhYmxlcyB0byBzZXQgaWZyYW1lIHdpZHRoIGlmIGxlc3MgdGhhbiBlZGl0b3Igd2lkdGggKHRpY2tldDozMjIpIGFuZCBzZXQgYWxpZ25tZW50IG9mIHRvb2xiYXIgYnV0dG9ucy4KLSAtIGFkZGVkIEJhc3F1ZSB0cmFuc2xhdGlvbiBmb3IgWGluaGFDb3JlCi0gLSBwcmV2ZW50IGFuIGVycm9yIGlmIHNlcnZlciBpcyBzZXQgdG8gcGFyc2UgLmpzIGZpbGVzIGFzIFBIUAotIC0gVGlja2V0ICMxMjcgcGx1Z2luIEh0bWxFbnRpdGllczogRW50aXRpZXMuanMgIGZpbGUgY29ycnVwdAotCi1YaW5oYSAwLjkyYmV0YQotIC0gZml4ZWQgVGlja2V0ICM4MzEgc3RvcCBlbXB0eSBhbmNob3JzIGZyb20gYmVpbmcgcmVtb3ZlZAotIC0gTWFrZSBodG1sYXJlYS5qcyBqdXN0IGxvYWQgWGluaGFDb3JlLmpzIGluc3RlYWQgb2YgYmVpbmcgYSBjb3B5IG9mIGl0LgotIC0gZml4ZWQgVGlja2V0ICM0NDUgVG9nZ2xlIFRhYmxlQm9yZGVyIGRvZXNuJ3Qgd29yayBpZiB0aGlzLmZ1bGxwYWdlPXRydWUgb3IgdXNpbmcgRnVsbFBhZ2UgcGx1Z2luCi0gLSBmaXhlZCBUaWNrZXQgIzU1MSBzaGFwZSBhbmQgY29vcmQgYXR0cmlidXRlcyBvZiBhcmVhIGVsZW1lbnQgYXJlIGlnbm9yZWQgYnkgSUUKLSAtIGZpeGVkIFRpY2tldCAjNjUwIFNwZWxsQ2hlY2tlciBpcyBub3QgY29tcGF0aWJsZSB3aXRoIEZ1bGxQYWdlIHBsdWdpbgotIC0gZml4ZWQgVGlja2V0ICM4MTYgQ2hhcmFjdGVyTWFwIGFuZCBMaXN0VHlwZSBwYW5lbCBtb2RlcyBtYWtlIGVkaXRvciBqdW1wIHRvIHRvcCBpbiBJRQotIC0gZml4ZWQgVGlja2V0ICM1NzAgY2hhbmdlIGJlaGF2aW91ciBvZiBqdXN0aWZ5IHdoZW4gYW4gaW1hZ2UgaXMgc2VsZWN0ZWQgdG8gbWFrZSB0aGUgaW1hZ2UgZmxvYXQgbGVmdC9yaWdodCwgCi0gICBjbGljayB0aGUganVzdGlmeSBidXR0b24gYWdhaW4gdG8gdW5kbyBpdAotIC0gZml4ZWQgVGlja2V0ICM4OTEgbm9zY3JpcHQgY29udGVudCBnb3QgZXNjYXBlZAotIC0gZml4ZWQgVGlja2V0ICM4NTcgRmlyZWZveCBmYWlscyB0byBsb2FkIGluIGZ1bGxwYWdlIG1vZGUgd2hlbiA8bGluayAuLj4gdGFnIGluIHdyb25nIHBsYWNlLgotIC0gZml4ZWQgVGlja2V0ICM4NDEgU3BlbGwgQ2hlY2tlciAtIFdvbid0IHJldHVybiB0byB4aW5oYS4KLSAtIGZpeGVkIFRpY2tldCAjOTE0IEFsbCBidXR0b25zIHN0YXkgZ3JleSAmIHRoaXMuZ2V0UGFyZW50RWxlbWVudCBpcyBub3QgYSBmdW5jdGlvbiBtZXNzYWdlIHdoZW4gbm90IGNhbGxpbmcKLSAgIFhpbmhhLmxvYWRQbHVnaW5zKCkgaW4geGluaGFfaW5pdCBmdW5jdGlvbgotIC0gZml4ZWQgVGlja2V0ICM5MTEgQmFja2dyb3VuZCBjb2xvciBkb2VzIG5vdCB3b3JrIGluIEZpcmVmb3gKLSAtIGZpeGVkIFRpY2tldCAjOTEyIGFuIGVycm9yIGlzIHRocm93biBpbiBNb3ppbGxhIHdoZW4gY2xpY2tpbmcgbWVyZ2UgY2VsbHMgYnV0dG9uIGFuZCBmZXdlciB0aGFuIDIgY2VsbHMgYXJlIHNlbGVjdGVkCi0gLSBmaXhlZCBUaWNrZXQgIzgxNiBDaGFyYWN0ZXJNYXAgYW5kIExpc3RUeXBlIHBhbmVsIG1vZGVzIG1ha2UgZWRpdG9yIGp1bXAgdG8gdG9wIGluIElFCi0gLSBmaXhlZCBUaWNrZXQgIzkxNyBnZXRIVE1MV3JhcHBlciBpbiBJRSByZW5kZXJzIGF0dHJpYnV0ZXMgbGlrZSBfc3R5bGlzdF91c2VkdG9iZT0iW29iamVjdCBPYmplY3RdIgotIC0gZml4ZWQgVGlja2V0ICM1NTYgc3RyaXBCYXNlSHJlZiBkaWRuJ3Qgd29yayB3aXRob3V0IGJhc2VIcmVmIGRlZmluZWQgZXhwbGljaXRseS4KLSAtIFVwZGF0ZSBJbnNlcnRQaWN0dXJlIHBsdWdpbiBVcGRhdGUKLSAtIGZpeGVkIFRpY2tldCAjOTIxIEVGTSBleHRlbmRlZCBmaWxlIG1hbmFnZXIgLSBpZnJhbWUgaGVpZ2h0IHByb2JsZW0gKElFKQotIC0gVGlja2V0ICM5MjMgY29sb3JQaWNrZXIgZmFjZSBsaWZ0ICYgbG9jYWxpc2F0aW9uCi0gLSBmaXhlZCBUaWNrZXQgIzkyNCBFRk0gKyBJbWFnZU1hbmFnZXIgcmUtdHJhbnNmb3JtaW5nIG9mIHVybCB0byBvcmlnaW5hbCBpbWFnZSBhZnRlciBhdXRvbWF0aWMgcmVzaXplIGJyb2tlbgotIC0gVGlja2V0ICM5MDAtIHJldGFpbiBlZGl0aW5nIHBvc2l0aW9uIHBvc2l0aW9uIGJldHdlZW4gbW9kZXMKLSAtIGZpeGVkIFRpY2tldCAjOTI4IEltYWdlTWFuYWdlciBmYWlscyBpZiAoYW5vdGhlcikgRmlsZXMucGhwIGV4aXN0cyBpbiBpbmNsdWRlIHBhdGgKLSAtIGZpeGVkIFRpY2tldCAjOTM1IEVGTSBkZW1vX2ltYWdlcyBwaHAgdXBsb2FkIGFsbG93ZWQ6IHBvc3NpYmxlIHNlY3VyaXR5IHJpc2sKLSAtIFRpY2tldCAjOTM5IEphcGFuZXNlIGxhbmdhZ2Ugc3VwcG9ydCAKLSAtIGZpeGVkIFRpY2tldCAjMyBIb3Jpem9udGFsIFJ1bGUgU2VsZWN0aW9uCi0gLSBQbHVnaW4gRXh0ZW5kZWRGaWxlTWFuYWdlcjogYWRkZWQgZG9jIHRvIGFsbG93ZWQgdXBsb2FkIGV4dGVuc2lvbnMKLSAtIFBsdWdpbiBQYXN0ZVRleHQgdXBkYXRlCi0gLSBQbHVnaW4gSHRtbEVudGl0aWVzOiBkZWZhdWx0IHByZXNldCBpc28tODg1OS0xCi0gLSBmaXhlZCBUaWNrZXQgIzk0OCBJRTogaW5saW5lIHN0eWxlcyBhcmUgbm90IHJlbmRlcmVkIGJ5IERPTXdhbGsgZ2V0SFRNTCgpCi0gLSBQbHVnaW4gSG9yaXpvbnRhbFJ1bGUgdXBkYXRlCi0gLSBQbHVnaW4gU2F2ZVN1Ym1pdCB1cGRhdGUKLSAtIFBsdWdpbiBMaW5rZXIgdXBkYXRlCi0gLSBmaXhlZCBUaWNrZXQgIzgyMyBlZGl0b3IgY29udGVudHMgd2FzIG5vdCBzdWJtaXR0ZWQgd2hlbiB1c2luZyBKYXZhU2NyaXB0IGZvcm0uc3VibWl0KCkgd2l0aG91dCBwcmlvciBmb3JtLm9uc3VibWl0KCkKLSAtIGZpeGVkIFRpY2tldCAjNDU5IGFsbCBib2R5IGF0dHJpYnV0ZXMgcmVtb3ZlZCBpbiBmdWxsIHBhZ2UgbW9kZSBpbiBGaXJlRm94Ci0gLSBfZWRpdG9yX3VybCBpcyBub3cgY29udmVydGVkIHRvIGFic29sdXRlIGlmIGl0IGlzIHJlbGF0aXZlLiAKLSAtIGZpeGVkIFRpY2tldCAjNTk0IElFOiBpbnNlcnRIVE1MKCkgaW5zZXJ0cyBIVE1MIG91dHNpZGUgZWRpdG9yIHdoZW4gZWRpdG9yIGlzIG5vdCBmb2N1c3NlZAotIC0gVGlja2V0ICM5NTQgRnVsbFNjcmVlbiBtb2RlIGNhbiBub3cgYmUgY2FsbGVkIHByb2dyYW1tYXRpY2FsbHkgb3Igb24gc3RhcnR1cCB3aXRoIG9yIHdpdGhvdXQgYnV0dG9uCi0gLSBmaXhlZCBUaWNrZXQgIzMyMSBGdWxsU2NyZWVuIDogc2VsZWN0IGVsZW1lbnRzIHNob3cgdGhyb3VnaCBpbiBJRTYgCi0gLSBmaXhlZCBUaWNrZXQgIzk1MyBTdGF0dXNiYXIgaGFzIHVnbHkgd2hpdGUgZ2FwIGF0IHRoZSBib3R0b20gd2hlbiBzd2l0Y2hpbmcgYmFjayBmcm9tIGZ1bGwgc2NyZWVuIGluIElFIAotIC0gZml4ZWQgVGlja2V0ICM5NTIgRnVsbFNjcmVlbjogc2Nyb2xsYmFycyBkb24ndCBkaXNhcHBlYXIgaW4gSUUgaW4gUXVpcmtzTW9kZQotIC0gZml4ZWQgVGlja2V0ICM2MDMgUG9wb3AgRGlhbG9nIEhlaWdodCBwcm9ibGVtcwotIC0gZml4ZWQgVGlja2V0ICM5NTUgRE9Nd2FsayBnZXRIVE1MIG91dHB1dHMgZW1wdHkgYXR0cmlidXRlIHdpdGggdmFsdWUgInRydWUiIGluc3RlYWQgb2YgYXR0cmlidXRlIG5hbWUgYW5kIHNvbWUgYXJlIHNraXBwZWQgYXQgYWxsCi0gCi1YaW5oYSAwLjkxYmV0YQotIC0gY2hhbmdlZCBuYW1lc3BhY2UgZnJvbSBIVE1MQXJlYSB0byBYaW5oYQotIC0gdGhlIGNvcmUgZmlsZSBpcyBub3cgbmFtZWQgWGluaGFDb3JlLmpzIGluc3RlYWQgb2YgaHRtbGFyZWEuanMsCi0gICBwbGVhc2UgY2hhbmdlIHlvdXIgcGFnZXMgYWNjb3JkaW5nbHkgKHRoZSBodG1sYXJlYS5qcyB3aWxsIGJlIHJlbW92ZWQhKQotIC0gdGhlIGNvbG9yIHBpY2tlciBzY3JpcHQgaXMgbm93IGxvYWRlZCBvbiBkZW1hbmQgdG8gcmVkdWNlIGluaXRpYWwgbG9hZGluZyB0aW1lCi0gCi1YaW5oYSAwLjliZXRhCi1UaGlzIGVxdWFscyBYaW5oYSByZXZpc2lvbiA2MzUgb2YgSmFuIDExIDIwMDcKLSAtIEFsbCBKYXZhU2NyaXB0IGZpbGVzIG92ZXIgMmtiIGhhdmUgYmVlbiBjb21wcmVzc2VkIHVzaW5nIHRoZSBkb2pvIEphdmFTY3JpcHQgY29tcHJlc3NvcgotIC0gQWxsIGdpZnMgaGF2ZSBiZWVuIG9wdGltaXplZCB1c2luZyBUcm91dCdzIEdJRiBPcHRpbWl6ZXIgdmVyc2lvbiAyLjMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvYmx1ZS1sb29rL2J1dHRvbi1iYWNrZ3JvdW5kLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9ibHVlLWxvb2svYnV0dG9uLWJhY2tncm91bmQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjgwNjg0Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9ibHVlLWxvb2svYnV0dG9uLWJhY2tncm91bmQucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL2JsdWUtbG9vay9zZXBhcmF0b3IuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL2JsdWUtbG9vay9zZXBhcmF0b3IuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWUzZDU5Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9ibHVlLWxvb2svc2VwYXJhdG9yLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9ibHVlLWxvb2svc2tpbi5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvYmx1ZS1sb29rL3NraW4uY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGQ0NzhjLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9ibHVlLWxvb2svc2tpbi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLmh0bWxhcmVhIC50b29sYmFyLCAuaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbgotewotICBiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y4ZmQ7Ci19Ci0KLS5odG1sYXJlYSAudG9vbGJhclJvdwotewotICBtYXJnaW4tdG9wOjJweDsKLSAgbWFyZ2luLWJvdHRvbToycHg7Ci0gIGJvcmRlcjoxcHggZG90dGVkICNERURFREU7Ci0gIHBhZGRpbmc6MnB4OwotICAtbW96LWJvcmRlci1yYWRpdXM6M3B4OwotICBtYXJnaW46NHB4OwotICBoZWlnaHQ6MjVweDsKLX0KLQotLmh0bWxhcmVhIC50b29sYmFyIC5idXR0b24KLXsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7Ci0gIHdpZHRoOjIwcHg7Ci0gIGhlaWdodDoyMHB4OwotICBwYWRkaW5nOjBweDsKLSAgYm9yZGVyOjFweCBzb2xpZCAjZjdmOGZkOwotfQotCi0uYnV0dG9uSW1hZ2VDb250YWluZXIKLXsKLSAgcG9zaXRpb246cmVsYXRpdmU7Ci0gIGxlZnQ6MXB4OwotICB0b3AgOjFweDsKLX0KLQotLmh0bWxhcmVhIC50b29sYmFyIC5zZXBhcmF0b3IgewotICBtYXJnaW46MHB4OwotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoc2VwYXJhdG9yLmdpZik7Ci0gIGJvcmRlcjoxcHggI2Y3ZjhmZDsKLSAgd2lkdGg6ICAgN3B4OwotICBoZWlnaHQ6IDIwcHg7Ci0gIHBhZGRpbmc6IDBweDsKLX0KLQotLmh0bWxhcmVhIC50b29sYmFyIGEuYnV0dG9uOmhvdmVyCi17Ci0gIGJvcmRlcjogMXB4IHNvbGlkOwotICBib3JkZXItY29sb3I6IHdoaXRlICNDQ0MgI0NDQyB3aGl0ZTsKLX0KLQotLmh0bWxhcmVhIC50b29sYmFyIGEuYnV0dG9uRGlzYWJsZWQ6aG92ZXIKLXsKLSAgYm9yZGVyLWNvbG9yOiAjZjdmOGZkOwotfQotCi0uaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbi5idXR0b25BY3RpdmUsCi0uaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbi5idXR0b25QcmVzc2VkCi17Ci0gIGJvcmRlcjogMXB4IHNvbGlkOwotICBib3JkZXItY29sb3I6ICNDQ0Mgd2hpdGUgd2hpdGUgI0NDQzsKLX0KLQotLmh0bWxhcmVhIC5zdGF0dXNCYXIgewotICBib3JkZXItY29sb3I6ICNDQ0Mgd2hpdGUgd2hpdGUgI0NDQzsKLSAgcGFkZGluZzogMHB4OwotICBoZWlnaHQ6MjBweDsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7Ci0gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKLSAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjhmZDsKLSAgY29sb3I6IEJ1dHRvblRleHQ7Ci0gIGZvbnQ6IDExcHggaGVsdmV0aWNhLGFyaWFsLHNhbnMtc2VyaWY7Ci19Ci0KLS5odG1sYXJlYSAuc3RhdHVzQmFyIC5zdGF0dXNCYXJXaWRnZXRDb250YWluZXIKLXsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7Ci0gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKLSAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjhmZDsKLX0KLQotLmh0bWxhcmVhIC5zdGF0dXNCYXIgLnN0YXR1c0JhclRyZWUKLXsKLSAgZGlzcGxheTpibG9jazsKLSAgbWFyZ2luOiAzcHg7Ci19Ci0KLS5odG1sYXJlYSAuc3RhdHVzQmFyIC5zdGF0dXNCYXJUcmVlIGEKLXsKLSAgcGFkZGluZzogMnB4IDVweDsKLSAgY29sb3I6ICMwMGY7Ci0gIHRleHQtZGVjb3JhdGlvbjpub25lOwotfQotCi0uaHRtbGFyZWEgLnBhbmVsIGgxCi17Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnYnV0dG9uLWJhY2tncm91bmQucG5nJyk7Ci0gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKLSAgYmFja2dyb3VuZC1jb2xvcjogI2Y3ZjhmZDsKLX0KLS5kaWFsb2cgewotICBiYWNrZ3JvdW5kLWNvbG9yOiNmN2Y4ZmQ7Ci19Ci0uZGlhbG9nIC50aXRsZSB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybChidXR0b24tYmFja2dyb3VuZC5wbmcpOwotfSAgCi0uZGlhbG9nIGJ1dHRvbnsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7Ci19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvZ3JlZW4tbG9vay9idXR0b24tYmFja2dyb3VuZC5naWYgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvZ3JlZW4tbG9vay9idXR0b24tYmFja2dyb3VuZC5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxMzcxMTkuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL2dyZWVuLWxvb2svYnV0dG9uLWJhY2tncm91bmQuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL2dyZWVuLWxvb2svc2VwYXJhdG9yLmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9ncmVlbi1sb29rL3NlcGFyYXRvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzNTcyMzMuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL2dyZWVuLWxvb2svc2VwYXJhdG9yLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9ncmVlbi1sb29rL3NraW4uY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL2dyZWVuLWxvb2svc2tpbi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNzg1ODAuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL2dyZWVuLWxvb2svc2tpbi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0uaHRtbGFyZWEgLnRvb2xiYXIsIC5odG1sYXJlYSAudG9vbGJhciAuYnV0dG9uCi17Ci0gIGJhY2tncm91bmQtY29sb3I6I2Y4ZmRmODsKLX0KLS5odG1sYXJlYSAudG9vbGJhclJvdwotewotICBtYXJnaW4tdG9wOjJweDsKLSAgbWFyZ2luLWJvdHRvbToycHg7Ci0gIGJvcmRlcjoxcHggZG90dGVkICNERURFREU7Ci0gIHBhZGRpbmc6MnB4OwotICAtbW96LWJvcmRlci1yYWRpdXM6M3B4OwotICBtYXJnaW46NHB4OwotICBoZWlnaHQ6MjVweDsKLX0KLS5odG1sYXJlYSAudG9vbGJhciAuYnV0dG9uCi17Ci0gIGJhY2tncm91bmQtaW1hZ2U6dXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLmdpZik7Ci0gIHdpZHRoOjIwcHg7Ci0gIGhlaWdodDoyMHB4OwotICBwYWRkaW5nOjA7Ci0gIGJvcmRlcjoxcHggc29saWQgI2Y4ZmRmODsKLX0KLS5idXR0b25JbWFnZUNvbnRhaW5lcgotewotICBwb3NpdGlvbjpyZWxhdGl2ZTsKLSAgbGVmdDoxcHg7Ci0gIHRvcDoxcHg7Ci19Ci0uaHRtbGFyZWEgLnRvb2xiYXIgLnNlcGFyYXRvciB7Ci0gIG1hcmdpbjowOwotICBiYWNrZ3JvdW5kLWltYWdlOnVybChzZXBhcmF0b3IuZ2lmKTsKLSAgYm9yZGVyOjFweCAjZjhmZGY4OwotICB3aWR0aDo3cHg7Ci0gIGhlaWdodDoyMHB4OwotICBwYWRkaW5nOjA7Ci19Ci0uaHRtbGFyZWEgLnRvb2xiYXIgYS5idXR0b246aG92ZXIKLXsKLSAgYm9yZGVyOjFweCBzb2xpZDsKLSAgYm9yZGVyLWNvbG9yOiNmZmYgI2NjYyAjY2NjICNmZmY7Ci19Ci0uaHRtbGFyZWEgLnRvb2xiYXIgYS5idXR0b25EaXNhYmxlZDpob3ZlcgotewotICBib3JkZXItY29sb3I6I2Y4ZmRmODsKLX0KLS5odG1sYXJlYSAudG9vbGJhciAuYnV0dG9uQWN0aXZlLAotLmh0bWxhcmVhIC50b29sYmFyIC5idXR0b25QcmVzc2VkCi17Ci0gIGJvcmRlcjoxcHggc29saWQ7Ci0gIGJvcmRlci1jb2xvcjojY2NjICNmZmYgI2ZmZiAjY2NjOwotICBiYWNrZ3JvdW5kOiNmZmIxNjY7Ci19Ci0uaHRtbGFyZWEgLnN0YXR1c0JhciB7Ci0gIGJvcmRlci1jb2xvcjojY2NjICNmZmYgI2ZmZiAjY2NjOwotICBwYWRkaW5nOjA7Ci0gIGhlaWdodDoyMHB4OwotICBiYWNrZ3JvdW5kLWltYWdlOnVybChidXR0b24tYmFja2dyb3VuZC5naWYpOwotICBiYWNrZ3JvdW5kLXJlcGVhdDpyZXBlYXQteDsKLSAgYmFja2dyb3VuZC1jb2xvcjojZjhmZGY4OwotICBjb2xvcjpCdXR0b25UZXh0OwotICBmb250OjExcHggaGVsdmV0aWNhLGFyaWFsLHNhbnMtc2VyaWY7Ci19Ci0KLS5odG1sYXJlYSAuc3RhdHVzQmFyIC5zdGF0dXNCYXJXaWRnZXRDb250YWluZXIKLXsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLmdpZik7Ci0gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKLSAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZmRmODsKLX0KLQotLmh0bWxhcmVhIC5zdGF0dXNCYXIgLnN0YXR1c0JhclRyZWUKLXsKLSAgZGlzcGxheTpibG9jazsKLSAgbWFyZ2luOjNweDsKLX0KLS5odG1sYXJlYSAuc3RhdHVzQmFyIC5zdGF0dXNCYXJUcmVlIGEKLXsKLSAgcGFkZGluZzoycHggNXB4OwotICBjb2xvcjojMDBmOwotICB0ZXh0LWRlY29yYXRpb246bm9uZTsKLX0KLS5odG1sYXJlYSAucGFuZWwgaDEKLXsKLSAgYmFja2dyb3VuZC1pbWFnZTp1cmwoYnV0dG9uLWJhY2tncm91bmQuZ2lmKTsKLSAgYmFja2dyb3VuZC1yZXBlYXQ6cmVwZWF0LXg7Ci0gIGJhY2tncm91bmQtY29sb3I6I2Y4ZmRmODsKLX0KLS5kaWFsb2cgewotICBiYWNrZ3JvdW5kLWNvbG9yOiNmOGZkZjg7Ci19Ci0uZGlhbG9nIC50aXRsZSB7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybChidXR0b24tYmFja2dyb3VuZC5wbmcpOwotfSAgCi0uZGlhbG9nIGJ1dHRvbnsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGJ1dHRvbi1iYWNrZ3JvdW5kLnBuZyk7Ci19CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvc2lsdmEvZGlhbG9nLmpwZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9zaWx2YS9kaWFsb2cuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTY3NmI1Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9zaWx2YS9kaWFsb2cuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL3NpbHZhL2h0bWwuZ2lmIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL3NpbHZhL2h0bWwuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGQ2NTMxLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9zaWx2YS9odG1sLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9zaWx2YS9za2luLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9zaWx2YS9za2luLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTA0NGI1Ni4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvc2lsdmEvc2tpbi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxNzcgKzAsMCBAQAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovIAotLyogICAgICBzaWx2YSBza2luIGZvciBYaW5oYSAgICAgICovIAotLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovIAotLyogICAgICBieSBSYWltdW5kIE1leWVyIChyYXkpICAgICovIAotLyogICAgICB4aW5oYUByYWltdW5kbWV5ZXIuZGUgICAgICovCi0vKiAgICAgICAgICAgMjAwNy0xLTkgICAgICAgICAgICAgKi8gCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8gCi0KLS5odG1sYXJlYSAudG9vbGJhciwgLmh0bWxhcmVhIC50b29sYmFyIC5idXR0b24KLXsKLSAgYmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDsKLX0KLS5odG1sYXJlYSAudG9vbGJhcgotewotICBwYWRkaW5nOjA7Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybCh0b29sYmFyLnBuZyk7Ci19Ci0uaHRtbGFyZWEgLnRvb2xiYXJSb3cKLXsKLSAgbWFyZ2luLXRvcDowcHg7Ci0gIG1hcmdpbi1ib3R0b206MHB4OwotICBib3JkZXI6MXB4IHNvbGlkICNGMUYxRjE7Ci0gIHBhZGRpbmc6MHB4OwotICAtbW96LWJvcmRlci1yYWRpdXM6MTVweDsKLSAgbWFyZ2luOjRweDsKLSAgaGVpZ2h0OjIwcHg7Ci19Ci0vKiBoYWNrOiBJRTYgZG9lcyBub3Qga25vdyBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OyovCi1odG1sID4gYm9keSAuaHRtbGFyZWEgLnRvb2xiYXJSb3cgewotICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50OwotfQotCi0uaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbgotewotICB3aWR0aDoxOHB4OwotICBoZWlnaHQ6MThweDsKLSAgcGFkZGluZzoxcHggMnB4IDJweCAxcHggOwotICBib3JkZXI6IHNvbGlkICNGMUYxRjE7Ci0gIGJvcmRlci13aWR0aDoxcHg7Ci19Ci0KLWh0bWwgPiBib2R5IC5odG1sYXJlYSAudG9vbGJhciAuYnV0dG9uIHsKLSAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKLX0KLQotLmJ1dHRvbkltYWdlQ29udGFpbmVyCi17Ci0gIHBvc2l0aW9uOnJlbGF0aXZlOwotICBsZWZ0OjFweDsKLSAgdG9wIDoxcHg7Ci19Ci0KLS5odG1sYXJlYSAudG9vbGJhciBhLmJ1dHRvbjpob3ZlcgotewotICBib3JkZXI6IHNvbGlkIDFweDsKLSAgYm9yZGVyLWNvbG9yOiBibGFjazsKLX0KLS5odG1sYXJlYSAudG9vbGJhciBhLmJ1dHRvbkRpc2FibGVkOmhvdmVyCi17Ci0gIGJvcmRlcjogc29saWQgdHJhbnNwYXJlbnQgMXB4OwotfQotCi0uaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbi5idXR0b25BY3RpdmUsCi0uaHRtbGFyZWEgLnRvb2xiYXIgLmJ1dHRvbi5idXR0b25QcmVzc2VkCi17Ci0gIGJvcmRlcjogYmxhY2sgZG90dGVkIDFweDsKLSAgcGFkZGluZzoycHggMXB4IDFweCAycHg7ICAKLX0KLQotLmh0bWxhcmVhIC50b29sYmFyIC5idXR0b24uYnV0dG9uUHJlc3NlZCB7Ci0gIHBhZGRpbmc6MXB4IDJweCAycHggMXB4IDsKLX0KLS5odG1sYXJlYSAudG9vbGJhciAuc2VwYXJhdG9yIHsKLSAgbWFyZ2luOiAzcHg7Ci0gIGJvcmRlci1sZWZ0OiAxcHggZG90dGVkIGJsYWNrOwotICBib3JkZXItcmlnaHQ6IG5vbmU7Ci0gIHdpZHRoOiAxcHg7Ci0gIGhlaWdodDogMTFweDsKLSAgcGFkZGluZzogMHB4OwotfQotCi0uaHRtbGFyZWEgLnN0YXR1c0JhciB7Ci0gIGJvcmRlci1jb2xvcjogI0NDQyB3aGl0ZSB3aGl0ZSAjQ0NDOwotICBwYWRkaW5nOiAwcHg7Ci0gIGhlaWdodDoyMHB4OwotICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoc3RhdHVzYmFyLnBuZyk7Ci0gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQteDsKLSAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci0gIGNvbG9yOiBncmV5OwotICBmb250OiAxMXB4IEFyaWFsLEhlbHZldGljYSxzYW5zLXNlcmlmOwotICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwotfQotCi0uaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyV2lkZ2V0Q29udGFpbmVyCi17Ci0gIGJhY2tncm91bmQtaW1hZ2U6IHVybChzdGF0dXNiYXIucG5nKTsKLSAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OwotICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLX0KLQotLmh0bWxhcmVhIC5zdGF0dXNCYXIgLnN0YXR1c0JhclRyZWUKLXsKLSAgZGlzcGxheTpibG9jazsKLSAgbWFyZ2luOiAzcHg7Ci19Ci0KLS5odG1sYXJlYSAuc3RhdHVzQmFyIC5zdGF0dXNCYXJUcmVlIGEKLXsKLSAgcGFkZGluZzogMCA1cHg7Ci0gIGNvbG9yOiBncmVlbjsKLSAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7Ci0gIGxldHRlci1zcGFjaW5nOjAuMTVlbTsKLSAgZm9udC1zaXplOjEyMCU7Ci0gIGJvcmRlcjogbm9uZTsKLSAgcGFkZGluZzogMnB4IDVweDsKLX0KLS5odG1sYXJlYSAuc3RhdHVzQmFyIC5zdGF0dXNCYXJUcmVlIGE6dmlzaXRlZCB7IGNvbG9yOmdyZWVuOyB9Ci0uaHRtbGFyZWEgLnN0YXR1c0JhciAuc3RhdHVzQmFyVHJlZSBhOmhvdmVyIHsKLSAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Ci0gIGNvbG9yOiBncmVlbjsKLSAgYm9yZGVyOiBub25lOwotICBwYWRkaW5nOiAxcHggNXB4OwotfQotCi0uZGlhbG9nIHsKLSAgLyogYmFja2dyb3VuZDogdXJsKGRpYWxvZy5qcGcpICNmMGYwZjAgbm8tcmVwZWF0OyAqLwotICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjBmMGYwOwotIH0KLWJvZHkuZGlhbG9nIHsKLQlwYWRkaW5nLXRvcDowOwotfQotLmRpYWxvZywgLmRpYWxvZyBidXR0b24sIC5kaWFsb2cgaW5wdXQsIC5kaWFsb2cgc2VsZWN0LCAuZGlhbG9nIHRleHRhcmVhLCAuZGlhbG9nIHRhYmxlLC5kaWFsb2cgdGQsLmRpYWxvZyB0aCwgLnBhbmVsIHsKLSAgZm9udDogMTFweCBBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiAhSU1QT1JUQU5UOwotfQotLnBhbmVsIGEgewotICBjb2xvcjojNDQ0OwotICBib3JkZXItYm90dG9tOiAxcHggZG90dGVkICNiYmI7Ci19Ci0ucGFuZWwgYTpob3ZlciB7Ci0gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7Ci19Ci0uZGlhbG9nIC50aXRsZSwuZGlhbG9nICBoMSwuaHRtbGFyZWEgLnBhbmVsIGgxIHsKLSAgYmFja2dyb3VuZC1pbWFnZTogdXJsKHRvb2xiYXIucG5nKTsKLSAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14OwotICBjb2xvcjpibGFjazsKLSAgZm9udDpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZiAhSU1QT1JUQU5UOwotICBsZXR0ZXItc3BhY2luZzowLjJlbTsKLSAgZm9udC1zaXplOjEzcHg7Ci0gIGZvbnQtd2VpZ2h0OjQwMDsKLX0gIAotLmRpYWxvZyAudGl0bGUgewotCi19Ci0KLS5kaWFsb2cgYnV0dG9uewotICBiYWNrZ3JvdW5kOiB1cmwoc3RhdHVzYmFyLnBuZykgYm90dG9tIHJlcGVhdC14OwotICBib3JkZXI6MXB4IHNvbGlkIGdyZXk7Ci0gIGhlaWdodDoxOHB4OwotICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlCi19Ci0vKiBzZXBhcmF0ZSBkZWZpbml0aW9uIGZvciB0aGUgc2FrZSBvZiBJRTYqLwotLmRpYWxvZyBpbnB1dFt0eXBlPWJ1dHRvbl0sLmRpYWxvZyBpbnB1dFt0eXBlPXN1Ym1pdF17Ci0gIGJhY2tncm91bmQ6IHVybChzdGF0dXNiYXIucG5nKSBib3R0b20gcmVwZWF0LXg7Ci0gIGJvcmRlcjoxcHggc29saWQgZ3JleTsKLSAgaGVpZ2h0OjE4cHg7Ci0gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGUKLX0KLS5odG1sYXJlYSB0ZXh0YXJlYS54aW5oYV90ZXh0YXJlYSB7Ci0gIGJhY2tncm91bmQ6dXJsKGh0bWwuZ2lmKSBib3R0b20gcmlnaHQgbm8tcmVwZWF0OwotICAvKnBhZGRpbmc6NXB4OwotICBib3JkZXI6MnB4IGRvdHRlZCAjYmJiOyovCi0gIGZvbnQtZmFtaWx5OiAiTHVjaWRhIENvbnNvbGUiLENvdXJpZXIsbW9ub3NwYWNlOwotICBmb250LXNpemU6IDEwcHQ7Ci19Ci0uaHRtbGFyZWEgLmRUcmVlTm9kZSB7Ci0gIGNvbG9yOmJsYWNrOwotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL3NpbHZhL3NraW4ueG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL3NpbHZhL3NraW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZmUwMGQzLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9zaWx2YS9za2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08c2tpbj4KLSAgPG1ldGEgbmFtZT0ibmFtZSIgdmFsdWU9InNpbHZhIiAvPgotICA8bWV0YSBuYW1lPSJkZXZlbG9wZXIiIHZhbHVlPSJSYWltdW5kIE1leWVyIiAvPgotICA8bWV0YSBuYW1lPSJkZXZlbG9wZXJfdXJsIiB2YWx1ZT0iaHR0cDovL3gtd2Vic2VydmljZS5uZXQiIC8+Ci0gIDxtZXRhIG5hbWU9InNwb25zb3IiIHZhbHVlPSIiIC8+Ci0gIDxtZXRhIG5hbWU9InNwb25zb3JfdXJsIiB2YWx1ZT0iIiAvPgotICA8bWV0YSBuYW1lPSJ2ZXJzaW9uIiB2YWx1ZT0iMS4wIiAvPgotICA8bWV0YSBuYW1lPSJsaWNlbnNlIiB2YWx1ZT0iaHRtbEFyZWEiIC8+Ci0gIDxyZWNvbW1lbmRlZEljb25zPkNyeXN0YWw8L3JlY29tbWVuZGVkSWNvbnM+Ci08L3NraW4+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvYXV0aG9yaW5nL2VkaXRvcnMveGluaGEtMC45Ni4xL3NraW5zL3NpbHZhL3N0YXR1c2Jhci5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvc2lsdmEvc3RhdHVzYmFyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZkYjNjNi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvc2lsdmEvc3RhdHVzYmFyLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9zaWx2YS90b29sYmFyLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2F1dGhvcmluZy9lZGl0b3JzL3hpbmhhLTAuOTYuMS9za2lucy9zaWx2YS90b29sYmFyLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY0NjI5OS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9hdXRob3JpbmcvZWRpdG9ycy94aW5oYS0wLjk2LjEvc2tpbnMvc2lsdmEvdG9vbGJhci5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9pbWFnZXMvY2xpcHB5LnN2ZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2ltYWdlcy9jbGlwcHkuc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTgwYjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9pbWFnZXMvY2xpcHB5LnN2ZwpAQCAtMCwwICsxLDQgQEAKKzxzdmcgaGVpZ2h0PSIxMDI0IiB3aWR0aD0iODk2IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgorICA8IS0tIE1JVCBsaWNlbnNlIGh0dHBzOi8vb2N0aWNvbnMuZ2l0aHViLmNvbSAtLT4KKyAgPHBhdGggZD0iTTEyOCA3NjhoMjU2djY0SDEyOHYtNjR6IG0zMjAtMzg0SDEyOHY2NGgzMjB2LTY0eiBtMTI4IDE5MlY0NDhMMzg0IDY0MGwxOTIgMTkyVjcwNGgzMjBWNTc2SDU3NnogbS0yODgtNjRIMTI4djY0aDE2MHYtNjR6TTEyOCA3MDRoMTYwdi02NEgxMjh2NjR6IG01NzYgNjRoNjR2MTI4Yy0xIDE4LTcgMzMtMTkgNDVzLTI3IDE4LTQ1IDE5SDY0Yy0zNSAwLTY0LTI5LTY0LTY0VjE5MmMwLTM1IDI5LTY0IDY0LTY0aDE5MkMyNTYgNTcgMzEzIDAgMzg0IDBzMTI4IDU3IDEyOCAxMjhoMTkyYzM1IDAgNjQgMjkgNjQgNjR2MzIwaC02NFYzMjBINjR2NTc2aDY0MFY3Njh6TTEyOCAyNTZoNTEyYzAtMzUtMjktNjQtNjQtNjRoLTY0Yy0zNSAwLTY0LTI5LTY0LTY0cy0yOS02NC02NC02NC02NCAyOS02NCA2NC0yOSA2NC02NCA2NGgtNjRjLTM1IDAtNjQgMjktNjQgNjR6IiAvPgorPC9zdmc+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9pbWFnZXMvZmVhdGhlci5zdmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9pbWFnZXMvZmVhdGhlci5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM0ZTI3NAotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2ltYWdlcy9mZWF0aGVyLnN2ZwpAQCAtMCwwICsxLDEzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxOS4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KKzwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cis8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkZlYXRoZXIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgorCSB2aWV3Qm94PSIwIDAgMjM5Mi41IDQyMjYuNiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMjM5Mi41IDQyMjYuNiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+Cis8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzFfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii01MTY3LjA5NjIiIHkxPSI2OTcuNTU0OSIgeDI9Ii00NTcwLjExNjIiIHkyPSIxMzk1LjYxOSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjQyMjYgLTAuOTA2MyAwLjkwNjMgMC40MjI2IDMxNDQuODEwOCAtNDYxOS4yOTgzKSI+CisJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6I0Y2OTkyMyIvPgorCTxzdG9wICBvZmZzZXQ9IjAuMzEyMyIgc3R5bGU9InN0b3AtY29sb3I6I0Y3OUEyMyIvPgorCTxzdG9wICBvZmZzZXQ9IjAuODM4MyIgc3R5bGU9InN0b3AtY29sb3I6I0U5NzgyNiIvPgorPC9saW5lYXJHcmFkaWVudD4KKzxwYXRoIGZpbGw9InVybCgjU1ZHSURfMV8pIiBkPSJNMTc5OC45LDIwLjFDMTczMi42LDU5LjIsMTYyMi41LDE3MCwxNDkxLDMzMC41bDEyMC44LDIyOGM4NC44LTEyMS4zLDE3MC45LTIzMC40LDI1Ny44LTMyMy42CisJYzYuNy03LjQsMTAuMi0xMC45LDEwLjItMTAuOWMtMy40LDMuNi02LjgsNy4zLTEwLjIsMTAuOWMtMjguMSwzMS0xMTMuNCwxMzAuNS0yNDIuMSwzMjguMWMxMjMuOS02LjIsMzE0LjMtMzEuNSw0NjkuNi01OC4xCisJYzQ2LjItMjU4LjgtNDUuMy0zNzcuMy00NS4zLTM3Ny4zUzE5MzUuNS02MC42LDE3OTguOSwyMC4xeiIvPgorPHBhdGggZmlsbD0ibm9uZSIgZD0iTTE1OTQuNCwxMzIwLjdjMC45LTAuMiwxLjgtMC4zLDIuNy0wLjVsLTE3LjQsMS45Yy0xLjEsMC41LTIsMS0zLjEsMS40CisJQzE1ODIuNiwxMzIyLjYsMTU4OC41LDEzMjEuNiwxNTk0LjQsMTMyMC43eiIvPgorPHBhdGggZmlsbD0ibm9uZSIgZD0iTTE0NzEuMSwxNzI5LjFjLTkuOSwyLjItMjAsMy45LTMwLjIsNS40QzE0NTEuMSwxNzMzLDE0NjEuMiwxNzMxLjIsMTQ3MS4xLDE3MjkuMXoiLz4KKzxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik02MzMuMSwyNjQ1LjJjMS4zLTMuNCwyLjYtNi44LDMuOC0xMC4yYzI2LjYtNzAuMiw1Mi45LTEzOC40LDc5LTIwNC45YzI5LjMtNzQuNiw1OC4yLTE0Ni44LDg2LjgtMjE2LjgKKwljMzAuMS03My44LDU5LjgtMTQ1LjEsODkuMS0yMTRjMzAuNy03Mi4zLDYxLTE0MS45LDkwLjctMjA4LjljMjQuMi01NC41LDQ4LTEwNy4zLDcxLjUtMTU4LjRjNy44LTE3LDE1LjYtMzMuOSwyMy40LTUwLjYKKwljMTUuNC0zMy4xLDMwLjctNjUuNiw0NS43LTk3LjNjMTMuOS0yOS4zLDI3LjctNTcuOSw0MS40LTg2YzQuNS05LjQsOS4xLTE4LjYsMTMuNi0yNy45YzAuNy0xLjUsMS41LTMsMi4yLTQuNWwtMTQuOCwxLjYKKwlsLTExLjgtMjMuMmMtMS4xLDIuMy0yLjMsNC41LTMuNSw2LjhjLTIxLjIsNDIuMS00Mi4yLDg0LjYtNjMsMTI3LjVjLTEyLDI0LjgtMjQsNDkuNy0zNS45LDc0LjdjLTMzLDY5LjMtNjUuNSwxMzkuMi05Ny40LDIwOS42CisJYy0zMi4zLDcxLjEtNjMuOSwxNDIuNi05NC45LDIxNC4yYy0zMC41LDcwLjMtNjAuMywxNDAuNy04OS42LDIxMC45Yy0yOS4yLDcwLjEtNTcuNywxNDAtODUuNiwyMDkuNAorCWMtMjkuMSw3Mi41LTU3LjQsMTQ0LjMtODQuOCwyMTUuM2MtNi4yLDE2LTEyLjQsMzItMTguNSw0OGMtMjIsNTcuMy00My40LDExMy44LTY0LjMsMTY5LjZsMTguNiwzNi43bDE2LjYtMS44CisJYzAuNi0xLjcsMS4yLTMuNCwxLjgtNUM1ODAuMSwyNzg2LjUsNjA2LjcsMjcxNC45LDYzMy4xLDI2NDUuMnoiLz4KKzxwYXRoIGZpbGw9Im5vbmUiIGQ9Ik0xNDMzLjIsMTczNS43TDE0MzMuMiwxNzM1LjdjMC4xLDAsMC4xLTAuMSwwLjItMC4xQzE0MzMuNCwxNzM1LjYsMTQzMy4zLDE3MzUuNiwxNDMzLjIsMTczNS43eiIvPgorPHBhdGggZmlsbD0iI0JFMjAyRSIgZD0iTTEzOTMuMiwxOTM0LjhjLTE1LjQsMi44LTMxLjMsNS41LTQ3LjYsOC4zYy0wLjEsMC0wLjIsMC4xLTAuMywwLjFjOC4yLTEuMiwxNi4zLTIuNCwyNC4zLTMuOAorCUMxMzc3LjYsMTkzOCwxMzg1LjQsMTkzNi41LDEzOTMuMiwxOTM0Ljh6Ii8+Cis8cGF0aCBvcGFjaXR5PSIwLjM1IiBmaWxsPSIjQkUyMDJFIiBkPSJNMTM5My4yLDE5MzQuOGMtMTUuNCwyLjgtMzEuMyw1LjUtNDcuNiw4LjNjLTAuMSwwLTAuMiwwLjEtMC4zLDAuMQorCWM4LjItMS4yLDE2LjMtMi40LDI0LjMtMy44QzEzNzcuNiwxOTM4LDEzODUuNCwxOTM2LjUsMTM5My4yLDE5MzQuOHoiLz4KKzxwYXRoIGZpbGw9IiNCRTIwMkUiIGQ9Ik0xNDMzLjYsMTczNS41YzAsMC0wLjEsMC0wLjEsMC4xYy0wLjEsMC0wLjEsMC4xLTAuMiwwLjFjMi42LTAuMyw1LjEtMC44LDcuNi0xLjEKKwljMTAuMy0xLjUsMjAuNC0zLjMsMzAuMi01LjRDMTQ1OC44LDE3MzEuMiwxNDQ2LjMsMTczMy40LDE0MzMuNiwxNzM1LjVMMTQzMy42LDE3MzUuNUwxNDMzLjYsMTczNS41eiIvPgorPHBhdGggb3BhY2l0eT0iMC4zNSIgZmlsbD0iI0JFMjAyRSIgZD0iTTE0MzMuNiwxNzM1LjVjMCwwLTAuMSwwLTAuMSwwLjFjLTAuMSwwLTAuMSwwLjEtMC4yLDAuMWMyLjYtMC4zLDUuMS0wLjgsNy42LTEuMQorCWMxMC4zLTEuNSwyMC40LTMuMywzMC4yLTUuNEMxNDU4LjgsMTczMS4yLDE0NDYuMywxNzMzLjQsMTQzMy42LDE3MzUuNUwxNDMzLjYsMTczNS41TDE0MzMuNiwxNzM1LjV6Ii8+Cis8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzJfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii05NTg1LjM0MTgiIHkxPSI2MjAuNTA0OCIgeDI9Ii01MzI2LjIwOSIgeTI9IjYyMC41MDQ4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNDIyNiAtMC45MDYzIDAuOTA2MyAwLjQyMjYgMzE0NC44MTA4IC00NjE5LjI5ODMpIj4KKwk8c3RvcCAgb2Zmc2V0PSIwLjMyMzMiIHN0eWxlPSJzdG9wLWNvbG9yOiM5RTIwNjQiLz4KKwk8c3RvcCAgb2Zmc2V0PSIwLjYzMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNDOTIwMzciLz4KKwk8c3RvcCAgb2Zmc2V0PSIwLjc1MTQiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRDIzMzUiLz4KKwk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojRTk3ODI2Ii8+Cis8L2xpbmVhckdyYWRpZW50PgorPHBhdGggZmlsbD0idXJsKCNTVkdJRF8yXykiIGQ9Ik0xMjU1LjcsMTE0Ny42YzM2LjctNjguNiw3My45LTEzNS43LDExMS41LTIwMWMzOS02Ny44LDc4LjUtMTMzLjYsMTE4LjQtMTk3YzIuMy0zLjcsNC43LTcuNSw3LTExLjMKKwljMzkuNC02Mi40LDc5LjItMTIyLjQsMTE5LjMtMTc5LjhsLTEyMC44LTIyOGMtOS4xLDExLjEtMTguMiwyMi40LTI3LjUsMzMuOWMtMzQuOCw0My40LTcxLDkwLjEtMTA4LjEsMTM5LjYKKwljLTQxLjgsNTUuOC04NC44LDExNS40LTEyOC41LDE3Ny45Yy00MC4zLDU3LjgtODEuMiwxMTguMy0xMjIuMSwxODAuOWMtMzQuOCw1My4zLTY5LjgsMTA4LjItMTA0LjUsMTY0LjVjLTEuMywyLjEtMi42LDQuMi0zLjksNi4zCisJbDE1Ny4yLDMxMC41QzExODcuMywxMjc3LjYsMTIyMS4zLDEyMTIsMTI1NS43LDExNDcuNnoiLz4KKzxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfM18iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iLTkwNzEuMjA3IiB5MT0iMTA0Ny42ODk4IiB4Mj0iLTY1MzMuMTc4MiIgeTI9IjEwNDcuNjg5OCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjQyMjYgLTAuOTA2MyAwLjkwNjMgMC40MjI2IDMxNDQuODEwOCAtNDYxOS4yOTgzKSI+CisJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6IzI4MjY2MiIvPgorCTxzdG9wICBvZmZzZXQ9IjkuNTQ4MzkwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6IzY2MkU4RCIvPgorCTxzdG9wICBvZmZzZXQ9IjAuNzg4MiIgc3R5bGU9InN0b3AtY29sb3I6IzlGMjA2NCIvPgorCTxzdG9wICBvZmZzZXQ9IjAuOTQ4NyIgc3R5bGU9InN0b3AtY29sb3I6I0NEMjAzMiIvPgorPC9saW5lYXJHcmFkaWVudD4KKzxwYXRoIGZpbGw9InVybCgjU1ZHSURfM18pIiBkPSJNNTM5LjcsMjg5Ny4xYy0yMC44LDU3LjItNDEuNywxMTUuNC02Mi43LDE3NC45Yy0wLjMsMC45LTAuNiwxLjctMC45LDIuNmMtMyw4LjQtNS45LDE2LjgtOC45LDI1LjIKKwljLTE0LjEsNDAuMS0yNi40LDc2LjItNTQuNSwxNTguM2M0Ni4zLDIxLjEsODMuNSw3Ni43LDExOC43LDEzOS44Yy0zLjctNjUuMy0zMC44LTEyNi43LTgyLjEtMTc0LjIKKwljMjI4LjMsMTAuMyw0MjUtNDcuNCw1MjYuNy0yMTQuM2M5LjEtMTQuOSwxNy40LTMwLjUsMjQuOS00Ny4yYy00Ni4yLDU4LjYtMTAzLjUsODMuNS0yMTEuNCw3Ny40Yy0wLjIsMC4xLTAuNSwwLjItMC43LDAuMworCWMwLjItMC4xLDAuNS0wLjIsMC43LTAuM2MxNTguOC03MS4xLDIzOC41LTEzOS4zLDMwOC45LTI1Mi40YzE2LjctMjYuOCwzMi45LTU2LjEsNDkuNS04OC42QzEwMDksMjg0MS4yLDg0OC4xLDI4ODEuOCw2NzguNiwyODUxCisJbC0xMjcuMSwxMy45QzU0Ny41LDI4NzUuNiw1NDMuNiwyODg2LjMsNTM5LjcsMjg5Ny4xeiIvPgorPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF80XyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSItOTM0Ni4xMjYiIHkxPSI1ODAuODE3IiB4Mj0iLTUwODYuOTk0MSIgeTI9IjU4MC44MTciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC40MjI2IC0wLjkwNjMgMC45MDYzIDAuNDIyNiAzMTQ0LjgxMDggLTQ2MTkuMjk4MykiPgorCTxzdG9wICBvZmZzZXQ9IjAuMzIzMyIgc3R5bGU9InN0b3AtY29sb3I6IzlFMjA2NCIvPgorCTxzdG9wICBvZmZzZXQ9IjAuNjMwMiIgc3R5bGU9InN0b3AtY29sb3I6I0M5MjAzNyIvPgorCTxzdG9wICBvZmZzZXQ9IjAuNzUxNCIgc3R5bGU9InN0b3AtY29sb3I6I0NEMjMzNSIvPgorCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNFOTc4MjYiLz4KKzwvbGluZWFyR3JhZGllbnQ+Cis8cGF0aCBmaWxsPSJ1cmwoI1NWR0lEXzRfKSIgZD0iTTU5OSwyNjEyLjRjMjcuNS03MSw1NS44LTE0Mi44LDg0LjgtMjE1LjNjMjcuOC02OS40LDU2LjQtMTM5LjIsODUuNi0yMDkuNAorCWMyOS4yLTcwLjIsNTkuMS0xNDAuNSw4OS42LTIxMC45YzMxLTcxLjYsNjIuNy0xNDMuMSw5NC45LTIxNC4yYzMxLjktNzAuMyw2NC40LTE0MC4zLDk3LjQtMjA5LjZjMTEuOS0yNSwyMy45LTQ5LjksMzUuOS03NC43CisJYzIwLjgtNDIuOSw0MS44LTg1LjQsNjMtMTI3LjVjMS4xLTIuMywyLjMtNC41LDMuNS02LjhsLTE1Ny4yLTMxMC41Yy0yLjYsNC4yLTUuMSw4LjQtNy43LDEyLjZjLTM2LjYsNTkuOC03My4xLDEyMS0xMDguOSwxODMuNQorCWMtMzYuMiw2My4xLTcxLjcsMTI3LjQtMTA2LjQsMTkyLjZjLTI5LjMsNTUtNTcuOSwxMTAuNS04NS43LDE2Ni41Yy01LjYsMTEuNC0xMS4xLDIyLjYtMTYuNiwzMy45CisJYy0zNC4zLDcwLjUtNjUuMiwxMzguNi05My4yLDIwNC4xYy0zMS43LDc0LjItNTkuNiwxNDUuMS04NCwyMTIuM2MtMTYuMSw0NC4yLTMwLjcsODYuOS00NC4xLDEyNy45Yy0xMSwzNS0yMS41LDcwLjEtMzEuNCwxMDUKKwljLTIzLjUsODIuMy00My43LDE2NC40LTYwLjMsMjQ2LjJMNTE2LjIsMjgzMGMyMC45LTU1LjgsNDIuMy0xMTIuMyw2NC4zLTE2OS42QzU4Ni42LDI2NDQuNSw1OTIuOCwyNjI4LjQsNTk5LDI2MTIuNHoiLz4KKzxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfNV8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iLTkwMzUuNTAyOSIgeTE9IjYzOC40NDA4IiB4Mj0iLTY3OTcuMjAxMiIgeTI9IjYzOC40NDA4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNDIyNiAtMC45MDYzIDAuOTA2MyAwLjQyMjYgMzE0NC44MTA4IC00NjE5LjI5ODMpIj4KKwk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojMjgyNjYyIi8+CisJPHN0b3AgIG9mZnNldD0iOS41NDgzOTBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojNjYyRThEIi8+CisJPHN0b3AgIG9mZnNldD0iMC43ODgyIiBzdHlsZT0ic3RvcC1jb2xvcjojOUYyMDY0Ii8+CisJPHN0b3AgIG9mZnNldD0iMC45NDg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQ0QyMDMyIi8+Cis8L2xpbmVhckdyYWRpZW50PgorPHBhdGggZmlsbD0idXJsKCNTVkdJRF81XykiIGQ9Ik0zNTYuMSwyNTI5LjJjLTE5LjgsOTkuOC0zMy45LDE5OS4yLTQxLDI5OGMtMC4yLDMuNS0wLjYsNi45LTAuOCwxMC40CisJYy00OS4zLTc5LTE4MS4zLTE1Ni4xLTE4MS0xNTUuNGM5NC41LDEzNywxNjYuMiwyNzMsMTc2LjksNDA2LjVjLTUwLjYsMTAuNC0xMTkuOS00LjYtMjAwLTM0LjFjODMuNSw3Ni43LDE0Ni4yLDk3LjksMTcwLjYsMTAzLjYKKwljLTc2LjcsNC44LTE1Ni42LDU3LjUtMjM3LjEsMTE4LjJjMTE3LjctNDgsMjEyLjgtNjcsMjgwLjktNTEuNkMyMTYuNiwzNTMwLjYsMTA4LjMsMzg2OC4yLDAsNDIyNi42YzMzLjItOS44LDUzLTMyLjEsNjQuMS02Mi4zCisJYzE5LjMtNjQuOSwxNDcuNC00OTAuNywzNDguMS0xMDUwLjRjNS43LTE1LjksMTEuNS0zMS45LDE3LjMtNDhjMS42LTQuNSwzLjMtOSw0LjktMTMuNGMyMS4yLTU4LjcsNDMuMi0xMTguNiw2NS45LTE3OS43CisJYzUuMi0xMy45LDEwLjQtMjcuOCwxNS42LTQxLjhjMC4xLTAuMywwLjItMC42LDAuMy0wLjhsLTE1Ny44LTMxMS44QzM1Ny43LDI1MjEuOSwzNTYuOCwyNTI1LjUsMzU2LjEsMjUyOS4yeiIvPgorPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF82XyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSItOTM0Ni4xMjYiIHkxPSIxMDIxLjYyMTgiIHgyPSItNTA4Ni45OTQxIiB5Mj0iMTAyMS42MjE4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNDIyNiAtMC45MDYzIDAuOTA2MyAwLjQyMjYgMzE0NC44MTA4IC00NjE5LjI5ODMpIj4KKwk8c3RvcCAgb2Zmc2V0PSIwLjMyMzMiIHN0eWxlPSJzdG9wLWNvbG9yOiM5RTIwNjQiLz4KKwk8c3RvcCAgb2Zmc2V0PSIwLjYzMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNDOTIwMzciLz4KKwk8c3RvcCAgb2Zmc2V0PSIwLjc1MTQiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRDIzMzUiLz4KKwk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojRTk3ODI2Ii8+Cis8L2xpbmVhckdyYWRpZW50PgorPHBhdGggZmlsbD0idXJsKCNTVkdJRF82XykiIGQ9Ik0xMTc4LjEsMTM3MC4zYy00LjUsOS4yLTksMTguNS0xMy42LDI3LjljLTEzLjYsMjguMS0yNy40LDU2LjctNDEuNCw4NgorCWMtMTUuMSwzMS43LTMwLjMsNjQuMS00NS43LDk3LjNjLTcuOCwxNi43LTE1LjUsMzMuNS0yMy40LDUwLjZjLTIzLjUsNTEuMS00Ny4zLDEwMy45LTcxLjUsMTU4LjRjLTI5LjcsNjctNjAsMTM2LjYtOTAuNywyMDguOQorCWMtMjkuMyw2OC45LTU5LDE0MC4yLTg5LjEsMjE0Yy0yOC42LDcwLTU3LjUsMTQyLjMtODYuOCwyMTYuOGMtMjYuMSw2Ni41LTUyLjQsMTM0LjctNzksMjA0LjljLTEuMywzLjQtMi42LDYuOC0zLjgsMTAuMgorCWMtMjYuNCw2OS43LTUzLDE0MS4zLTc5LjgsMjE0LjdjLTAuNiwxLjctMS4yLDMuNC0xLjgsNWwxMjcuMS0xMy45Yy0yLjUtMC41LTUuMS0wLjgtNy42LTEuM2MxNTItMTguOSwzNTQtMTMyLjUsNDg0LjYtMjcyLjcKKwljNjAuMi02NC42LDExNC44LTE0MC44LDE2NS4zLTIzMGMzNy42LTY2LjQsNzIuOS0xNDAsMTA2LjUtMjIxLjVjMjkuNC03MS4yLDU3LjYtMTQ4LjMsODQuOC0yMzEuOWMtMzQuOSwxOC40LTc0LjksMzEuOS0xMTksNDEuMworCWMtNy43LDEuNi0xNS42LDMuMi0yMy42LDQuNmMtOCwxLjQtMTYuMSwyLjctMjQuMywzLjhsMCwwbDAsMGMwLjEsMCwwLjItMC4xLDAuMy0wLjFjMTQxLjctNTQuNSwyMzEuMS0xNTkuOCwyOTYuMS0yODguNworCWMtMzcuMywyNS40LTk3LjksNTguNy0xNzAuNSw3NC43Yy05LjksMi4yLTIwLDMuOS0zMC4yLDUuNGMtMi42LDAuNC01LjEsMC44LTcuNiwxLjFsMCwwbDAsMGMwLjEsMCwwLjEtMC4xLDAuMi0wLjEKKwljMCwwLDAuMSwwLDAuMS0wLjFsMCwwYzQ5LjItMjAuNiw5MC43LTQzLjYsMTI2LjctNzAuOGM3LjctNS44LDE1LjItMTEuOCwyMi40LTE4LjFjMTEtOS41LDIxLjQtMTkuNSwzMS40LTMwCisJYzYuNC02LjcsMTIuNi0xMy42LDE4LjYtMjAuOGMxNC4xLTE2LjgsMjcuMy0zNC45LDM5LjctNTQuNmMzLjgtNiw3LjUtMTIuMSwxMS4yLTE4LjRjNC43LTkuMSw5LjItMTgsMTMuNi0yNi44CisJYzE5LjgtMzkuOCwzNS42LTc1LjMsNDguMi0xMDYuNWM2LjMtMTUuNiwxMS44LTMwLDE2LjUtNDMuNGMxLjktNS4zLDMuNy0xMC41LDUuNC0xNS41YzUtMTUsOS4xLTI4LjMsMTIuMy00MAorCWM0LjgtMTcuNSw3LjctMzEuNCw5LjMtNDEuNWwwLDBsMCwwYy00LjgsMy44LTEwLjMsNy42LTE2LjUsMTEuM2MtNDIuOCwyNS42LTExNi4yLDQ4LjgtMTc1LjQsNTkuN2wxMTYuNy0xMi44bC0xMTYuNywxMi44CisJYy0wLjksMC4yLTEuOCwwLjMtMi43LDAuNWMtNS45LDEtMTEuOSwxLjktMTcuOSwyLjljMS4xLTAuNSwyLTEsMy4xLTEuNGwtMzk5LjMsNDMuOEMxMTc5LjYsMTM2Ny40LDExNzguOSwxMzY4LjgsMTE3OC4xLDEzNzAuM3oiCisJLz4KKzxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfN18iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iLTk2MTAuMzM0IiB5MT0iOTk5LjczMyIgeDI9Ii01MzUxLjIwMTciIHkyPSI5OTkuNzMzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNDIyNiAtMC45MDYzIDAuOTA2MyAwLjQyMjYgMzE0NC44MTA4IC00NjE5LjI5ODMpIj4KKwk8c3RvcCAgb2Zmc2V0PSIwLjMyMzMiIHN0eWxlPSJzdG9wLWNvbG9yOiM5RTIwNjQiLz4KKwk8c3RvcCAgb2Zmc2V0PSIwLjYzMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNDOTIwMzciLz4KKwk8c3RvcCAgb2Zmc2V0PSIwLjc1MTQiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRDIzMzUiLz4KKwk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojRTk3ODI2Ii8+Cis8L2xpbmVhckdyYWRpZW50PgorPHBhdGggZmlsbD0idXJsKCNTVkdJRF83XykiIGQ9Ik0xNjI3LjYsNTYzLjFjLTM1LjUsNTQuNS03NC4zLDExNi40LTExNiwxODYuNWMtMi4yLDMuNi00LjQsNy40LTYuNiwxMS4xCisJYy0zNiw2MC43LTc0LjMsMTI3LjMtMTE0LjUsMjAwLjNjLTM0LjgsNjMtNzEsMTMwLjYtMTA4LjYsMjAzLjNjLTMyLjgsNjMuMy02Ni43LDEzMC41LTEwMS41LDIwMS42bDM5OS4zLTQzLjgKKwljMTE2LjMtNTMuNSwxNjguMy0xMDEuOSwyMTguOC0xNzEuOWMxMy40LTE5LjMsMjYuOS0zOS41LDQwLjMtNjAuNGM0MS02NCw4MS4yLTEzNC41LDExNy4yLTIwNC42YzM0LjctNjcuNyw2NS4zLTEzNC44LDg4LjgtMTk1LjMKKwljMTQuOS0zOC41LDI2LjktNzQuMywzNS4yLTEwNS43YzcuMy0yNy43LDEzLTU0LDE3LjQtNzkuMUMxOTQxLjksNTMxLjYsMTc1MS41LDU1NywxNjI3LjYsNTYzLjF6Ii8+Cis8cGF0aCBmaWxsPSIjQkUyMDJFIiBkPSJNMTM2OS42LDE5MzkuNGMtOCwxLjQtMTYuMSwyLjctMjQuMywzLjhsMCwwQzEzNTMuNSwxOTQyLjEsMTM2MS42LDE5NDAuOCwxMzY5LjYsMTkzOS40eiIvPgorPHBhdGggb3BhY2l0eT0iMC4zNSIgZmlsbD0iI0JFMjAyRSIgZD0iTTEzNjkuNiwxOTM5LjRjLTgsMS40LTE2LjEsMi43LTI0LjMsMy44bDAsMEMxMzUzLjUsMTk0Mi4xLDEzNjEuNiwxOTQwLjgsMTM2OS42LDE5MzkuNHoiLz4KKzxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfOF8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iLTkzNDYuMTI2IiB5MT0iMTE1Mi43MjYxIiB4Mj0iLTUwODYuOTk0MSIgeTI9IjExNTIuNzI2MSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjQyMjYgLTAuOTA2MyAwLjkwNjMgMC40MjI2IDMxNDQuODEwOCAtNDYxOS4yOTgzKSI+CisJPHN0b3AgIG9mZnNldD0iMC4zMjMzIiBzdHlsZT0ic3RvcC1jb2xvcjojOUUyMDY0Ii8+CisJPHN0b3AgIG9mZnNldD0iMC42MzAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQzkyMDM3Ii8+CisJPHN0b3AgIG9mZnNldD0iMC43NTE0IiBzdHlsZT0ic3RvcC1jb2xvcjojQ0QyMzM1Ii8+CisJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0U5NzgyNiIvPgorPC9saW5lYXJHcmFkaWVudD4KKzxwYXRoIGZpbGw9InVybCgjU1ZHSURfOF8pIiBkPSJNMTM2OS42LDE5MzkuNGMtOCwxLjQtMTYuMSwyLjctMjQuMywzLjhsMCwwQzEzNTMuNSwxOTQyLjEsMTM2MS42LDE5NDAuOCwxMzY5LjYsMTkzOS40eiIvPgorPHBhdGggZmlsbD0iI0JFMjAyRSIgZD0iTTE0MzMuMiwxNzM1LjdjMi42LTAuMyw1LjEtMC44LDcuNi0xLjFDMTQzOC4zLDE3MzQuOSwxNDM1LjgsMTczNS4zLDE0MzMuMiwxNzM1LjdMMTQzMy4yLDE3MzUuN3oiLz4KKzxwYXRoIG9wYWNpdHk9IjAuMzUiIGZpbGw9IiNCRTIwMkUiIGQ9Ik0xNDMzLjIsMTczNS43YzIuNi0wLjMsNS4xLTAuOCw3LjYtMS4xQzE0MzguMywxNzM0LjksMTQzNS44LDE3MzUuMywxNDMzLjIsMTczNS43CisJTDE0MzMuMiwxNzM1Ljd6Ii8+Cis8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzlfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii05MzQ2LjEyNiIgeTE9IjExMzcuNzI0NyIgeDI9Ii01MDg2Ljk5NDEiIHkyPSIxMTM3LjcyNDciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC40MjI2IC0wLjkwNjMgMC45MDYzIDAuNDIyNiAzMTQ0LjgxMDggLTQ2MTkuMjk4MykiPgorCTxzdG9wICBvZmZzZXQ9IjAuMzIzMyIgc3R5bGU9InN0b3AtY29sb3I6IzlFMjA2NCIvPgorCTxzdG9wICBvZmZzZXQ9IjAuNjMwMiIgc3R5bGU9InN0b3AtY29sb3I6I0M5MjAzNyIvPgorCTxzdG9wICBvZmZzZXQ9IjAuNzUxNCIgc3R5bGU9InN0b3AtY29sb3I6I0NEMjMzNSIvPgorCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNFOTc4MjYiLz4KKzwvbGluZWFyR3JhZGllbnQ+Cis8cGF0aCBmaWxsPSJ1cmwoI1NWR0lEXzlfKSIgZD0iTTE0MzMuMiwxNzM1LjdjMi42LTAuMyw1LjEtMC44LDcuNi0xLjFDMTQzOC4zLDE3MzQuOSwxNDM1LjgsMTczNS4zLDE0MzMuMiwxNzM1LjdMMTQzMy4yLDE3MzUuN3oiCisJLz4KKzxwYXRoIGZpbGw9IiNCRTIwMkUiIGQ9Ik0xNDMzLjUsMTczNS42YzAsMCwwLjEsMCwwLjEtMC4xbDAsMGwwLDBsMCwwQzE0MzMuNiwxNzM1LjUsMTQzMy41LDE3MzUuNSwxNDMzLjUsMTczNS42eiIvPgorPHBhdGggb3BhY2l0eT0iMC4zNSIgZmlsbD0iI0JFMjAyRSIgZD0iTTE0MzMuNSwxNzM1LjZjMCwwLDAuMSwwLDAuMS0wLjFsMCwwbDAsMGwwLDBDMTQzMy42LDE3MzUuNSwxNDMzLjUsMTczNS41LDE0MzMuNSwxNzM1LjZ6IgorCS8+Cis8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzEwXyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSItNjk1My40MDcyIiB5MT0iMTEzNC43MTYxIiB4Mj0iLTYwMTEuOTk5NSIgeTI9IjExMzQuNzE2MSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjQyMjYgLTAuOTA2MyAwLjkwNjMgMC40MjI2IDMxNDQuODEwOCAtNDYxOS4yOTgzKSI+CisJPHN0b3AgIG9mZnNldD0iMC4zMjMzIiBzdHlsZT0ic3RvcC1jb2xvcjojOUUyMDY0Ii8+CisJPHN0b3AgIG9mZnNldD0iMC42MzAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQzkyMDM3Ii8+CisJPHN0b3AgIG9mZnNldD0iMC43NTE0IiBzdHlsZT0ic3RvcC1jb2xvcjojQ0QyMzM1Ii8+CisJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0U5NzgyNiIvPgorPC9saW5lYXJHcmFkaWVudD4KKzxwYXRoIGZpbGw9InVybCgjU1ZHSURfMTBfKSIgZD0iTTE0MzMuNSwxNzM1LjZjMCwwLDAuMSwwLDAuMS0wLjFsMCwwbDAsMGwwLDBDMTQzMy42LDE3MzUuNSwxNDMzLjUsMTczNS41LDE0MzMuNSwxNzM1LjZ6Ii8+Cis8cGF0aCBmaWxsPSIjNkQ2RTcxIiBkPSJNMjIxOC43LDM4N3YxMS43aDI3LjR2NzcuNGgxMi43di03Ny40aDI3LjZWMzg3SDIyMTguN3ogTTIzNzcsMzg3bC0zMC42LDYyLjJsLTMwLjgtNjIuMmgtMTUuM3Y4OS4xaDExLjcKKwl2LTcwLjdsMzAuMyw2MS4zaDguMWwzMC4zLTYxLjN2NzAuN2gxMS43VjM4N0gyMzc3eiIvPgorPC9zdmc+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2ltYWdlcy9hbmltYXRlZC1vdmVybGF5LmdpZiBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL2FuaW1hdGVkLW92ZXJsYXkuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDQxZjc1Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL2FuaW1hdGVkLW92ZXJsYXkuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9pbWFnZXMvdWktYmdfZmxhdF8wX2FhYWFhYV80MHgxMDAucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9pbWFnZXMvdWktYmdfZmxhdF8wX2FhYWFhYV80MHgxMDAucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWFiMzBiLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWJnX2ZsYXRfMF9hYWFhYWFfNDB4MTAwLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWJnX2ZsYXRfNTVfZmJlYzg4XzQweDEwMC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2ltYWdlcy91aS1iZ19mbGF0XzU1X2ZiZWM4OF80MHgxMDAucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDg0Y2I0Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWJnX2ZsYXRfNTVfZmJlYzg4XzQweDEwMC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2ltYWdlcy91aS1iZ19nbGFzc183NV9kMGU1ZjVfMXg0MDAucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9pbWFnZXMvdWktYmdfZ2xhc3NfNzVfZDBlNWY1XzF4NDAwLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I2OGRjYS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2ltYWdlcy91aS1iZ19nbGFzc183NV9kMGU1ZjVfMXg0MDAucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9pbWFnZXMvdWktYmdfZ2xhc3NfODVfZGZlZmZjXzF4NDAwLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWJnX2dsYXNzXzg1X2RmZWZmY18xeDQwMC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3ODJjZDYuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9pbWFnZXMvdWktYmdfZ2xhc3NfODVfZGZlZmZjXzF4NDAwLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWJnX2dsYXNzXzk1X2ZlZjFlY18xeDQwMC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2ltYWdlcy91aS1iZ19nbGFzc185NV9mZWYxZWNfMXg0MDAucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2U2MWJjLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWJnX2dsYXNzXzk1X2ZlZjFlY18xeDQwMC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2ltYWdlcy91aS1iZ19nbG9zcy13YXZlXzU1XzVjOWNjY181MDB4MTAwLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWJnX2dsb3NzLXdhdmVfNTVfNWM5Y2NjXzUwMHgxMDAucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTUyOTBhLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWJnX2dsb3NzLXdhdmVfNTVfNWM5Y2NjXzUwMHgxMDAucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9pbWFnZXMvdWktYmdfaW5zZXQtaGFyZF8xMDBfZjVmOGY5XzF4MTAwLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWJnX2luc2V0LWhhcmRfMTAwX2Y1ZjhmOV8xeDEwMC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMzM4ODMuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9pbWFnZXMvdWktYmdfaW5zZXQtaGFyZF8xMDBfZjVmOGY5XzF4MTAwLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWJnX2luc2V0LWhhcmRfMTAwX2ZjZmRmZF8xeDEwMC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2ltYWdlcy91aS1iZ19pbnNldC1oYXJkXzEwMF9mY2ZkZmRfMXgxMDAucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjQ5ZTM2Li4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWJnX2luc2V0LWhhcmRfMTAwX2ZjZmRmZF8xeDEwMC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2ltYWdlcy91aS1pY29uc18yMTdiYzBfMjU2eDI0MC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2ltYWdlcy91aS1pY29uc18yMTdiYzBfMjU2eDI0MC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMmI3ZTUuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9pbWFnZXMvdWktaWNvbnNfMjE3YmMwXzI1NngyNDAucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9pbWFnZXMvdWktaWNvbnNfMmU4M2ZmXzI1NngyNDAucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9pbWFnZXMvdWktaWNvbnNfMmU4M2ZmXzI1NngyNDAucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGI2MDFiLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWljb25zXzJlODNmZl8yNTZ4MjQwLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWljb25zXzQ2OWJkZF8yNTZ4MjQwLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWljb25zXzQ2OWJkZF8yNTZ4MjQwLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRmZjNmOS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2ltYWdlcy91aS1pY29uc180NjliZGRfMjU2eDI0MC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2ltYWdlcy91aS1pY29uc182ZGE4ZDVfMjU2eDI0MC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2ltYWdlcy91aS1pY29uc182ZGE4ZDVfMjU2eDI0MC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3ODA5ZjguLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9pbWFnZXMvdWktaWNvbnNfNmRhOGQ1XzI1NngyNDAucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9pbWFnZXMvdWktaWNvbnNfY2QwYTBhXzI1NngyNDAucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9pbWFnZXMvdWktaWNvbnNfY2QwYTBhXzI1NngyNDAucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDViNmIwLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWljb25zX2NkMGEwYV8yNTZ4MjQwLnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWljb25zX2Q4ZTdmM18yNTZ4MjQwLnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvaW1hZ2VzL3VpLWljb25zX2Q4ZTdmM18yNTZ4MjQwLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI0NjIyOC4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2ltYWdlcy91aS1pY29uc19kOGU3ZjNfMjU2eDI0MC5wbmcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2ltYWdlcy91aS1pY29uc19mOWJkMDFfMjU2eDI0MC5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2ltYWdlcy91aS1pY29uc19mOWJkMDFfMjU2eDI0MC5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxZjA1MzEuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9pbWFnZXMvdWktaWNvbnNfZjliZDAxXzI1NngyNDAucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9qcXVlcnktdWkubWluLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL2pxdWVyeS11aS0xLjExLjAvanF1ZXJ5LXVpLm1pbi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2ZGQwOGQuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9qcXVlcnktdWkubWluLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotLyohIGpRdWVyeSBVSSAtIHYxLjExLjAgLSAyMDE0LTA4LTA2Ci0qIGh0dHA6Ly9qcXVlcnl1aS5jb20KLSogSW5jbHVkZXM6IGNvcmUuY3NzLCBkcmFnZ2FibGUuY3NzLCByZXNpemFibGUuY3NzLCBhY2NvcmRpb24uY3NzLCBhdXRvY29tcGxldGUuY3NzLCBidXR0b24uY3NzLCBkYXRlcGlja2VyLmNzcywgZGlhbG9nLmNzcywgbWVudS5jc3MsIHRhYnMuY3NzLCB0aGVtZS5jc3MKLSogVG8gdmlldyBhbmQgbW9kaWZ5IHRoaXMgdGhlbWUsIHZpc2l0IGh0dHA6Ly9qcXVlcnl1aS5jb20vdGhlbWVyb2xsZXIvP2ZmRGVmYXVsdD1MdWNpZGElMjBHcmFuZGUlMkNMdWNpZGElMjBTYW5zJTJDQXJpYWwlMkNzYW5zLXNlcmlmJmZ3RGVmYXVsdD1ib2xkJmZzRGVmYXVsdD0xLjFlbSZjb3JuZXJSYWRpdXM9NXB4JmJnQ29sb3JIZWFkZXI9NWM5Y2NjJmJnVGV4dHVyZUhlYWRlcj1nbG9zc193YXZlJmJnSW1nT3BhY2l0eUhlYWRlcj01NSZib3JkZXJDb2xvckhlYWRlcj00Mjk3ZDcmZmNIZWFkZXI9ZmZmZmZmJmljb25Db2xvckhlYWRlcj1kOGU3ZjMmYmdDb2xvckNvbnRlbnQ9ZmNmZGZkJmJnVGV4dHVyZUNvbnRlbnQ9aW5zZXRfaGFyZCZiZ0ltZ09wYWNpdHlDb250ZW50PTEwMCZib3JkZXJDb2xvckNvbnRlbnQ9YTZjOWUyJmZjQ29udGVudD0yMjIyMjImaWNvbkNvbG9yQ29udGVudD00NjliZGQmYmdDb2xvckRlZmF1bHQ9ZGZlZmZjJmJnVGV4dHVyZURlZmF1bHQ9Z2xhc3MmYmdJbWdPcGFjaXR5RGVmYXVsdD04NSZib3JkZXJDb2xvckRlZmF1bHQ9YzVkYmVjJmZjRGVmYXVsdD0yZTZlOWUmaWNvbkNvbG9yRGVmYXVsdD02ZGE4ZDUmYmdDb2xvckhvdmVyPWQwZTVmNSZiZ1RleHR1cmVIb3Zlcj1nbGFzcyZiZ0ltZ09wYWNpdHlIb3Zlcj03NSZib3JkZXJDb2xvckhvdmVyPTc5YjdlNyZmY0hvdmVyPTFkNTk4NyZpY29uQ29sb3JIb3Zlcj0yMTdiYzAmYmdDb2xvckFjdGl2ZT1mNWY4ZjkmYmdUZXh0dXJlQWN0aXZlPWluc2V0X2hhcmQmYmdJbWdPcGFjaXR5QWN0aXZlPTEwMCZib3JkZXJDb2xvckFjdGl2ZT03OWI3ZTcmZmNBY3RpdmU9ZTE3MDA5Jmljb25Db2xvckFjdGl2ZT1mOWJkMDEmYmdDb2xvckhpZ2hsaWdodD1mYmVjODgmYmdUZXh0dXJlSGlnaGxpZ2h0PWZsYXQmYmdJbWdPcGFjaXR5SGlnaGxpZ2h0PTU1JmJvcmRlckNvbG9ySGlnaGxpZ2h0PWZhZDQyZSZmY0hpZ2hsaWdodD0zNjM2MzYmaWNvbkNvbG9ySGlnaGxpZ2h0PTJlODNmZiZiZ0NvbG9yRXJyb3I9ZmVmMWVjJmJnVGV4dHVyZUVycm9yPWdsYXNzJmJnSW1nT3BhY2l0eUVycm9yPTk1JmJvcmRlckNvbG9yRXJyb3I9Y2QwYTBhJmZjRXJyb3I9Y2QwYTBhJmljb25Db2xvckVycm9yPWNkMGEwYSZiZ0NvbG9yT3ZlcmxheT1hYWFhYWEmYmdUZXh0dXJlT3ZlcmxheT1mbGF0JmJnSW1nT3BhY2l0eU92ZXJsYXk9MCZvcGFjaXR5T3ZlcmxheT0zMCZiZ0NvbG9yU2hhZG93PWFhYWFhYSZiZ1RleHR1cmVTaGFkb3c9ZmxhdCZiZ0ltZ09wYWNpdHlTaGFkb3c9MCZvcGFjaXR5U2hhZG93PTMwJnRoaWNrbmVzc1NoYWRvdz04cHgmb2Zmc2V0VG9wU2hhZG93PS04cHgmb2Zmc2V0TGVmdFNoYWRvdz0tOHB4JmNvcm5lclJhZGl1c1NoYWRvdz04cHgKLSogQ29weXJpZ2h0IDIwMTQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yczsgTGljZW5zZWQgTUlUICovCi0KLS51aS1oZWxwZXItaGlkZGVue2Rpc3BsYXk6bm9uZX0udWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxle2JvcmRlcjowO2NsaXA6cmVjdCgwIDAgMCAwKTtoZWlnaHQ6MXB4O21hcmdpbjotMXB4O292ZXJmbG93OmhpZGRlbjtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4fS51aS1oZWxwZXItcmVzZXR7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO291dGxpbmU6MDtsaW5lLWhlaWdodDoxLjM7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOjEwMCU7bGlzdC1zdHlsZTpub25lfS51aS1oZWxwZXItY2xlYXJmaXg6YmVmb3JlLC51aS1oZWxwZXItY2xlYXJmaXg6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OnRhYmxlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZX0udWktaGVscGVyLWNsZWFyZml4OmFmdGVye2NsZWFyOmJvdGh9LnVpLWhlbHBlci1jbGVhcmZpeHttaW4taGVpZ2h0OjB9LnVpLWhlbHBlci16Zml4e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7dG9wOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6MDtmaWx0ZXI6QWxwaGEoT3BhY2l0eT0wKX0udWktZnJvbnR7ei1pbmRleDoxMDB9LnVpLXN0YXRlLWRpc2FibGVke2N1cnNvcjpkZWZhdWx0IWltcG9ydGFudH0udWktaWNvbntkaXNwbGF5OmJsb2NrO3RleHQtaW5kZW50Oi05OTk5OXB4O292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXR9LnVpLXdpZGdldC1vdmVybGF5e3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS51aS1kcmFnZ2FibGUtaGFuZGxley1tcy10b3VjaC1hY3Rpb246bm9uZTt0b3VjaC1hY3Rpb246bm9uZX0udWktcmVzaXphYmxle3Bvc2l0aW9uOnJlbGF0aXZlfS51aS1yZXNpemFibGUtaGFuZGxle3Bvc2l0aW9uOmFic29sdXRlO2ZvbnQtc2l6ZTowLjFweDtkaXNwbGF5OmJsb2NrOy1tcy10b3VjaC1hY3Rpb246bm9uZTt0b3VjaC1hY3Rpb246bm9uZX0udWktcmVzaXphYmxlLWRpc2FibGVkIC51aS1yZXNpemFibGUtaGFuZGxlLC51aS1yZXNpemFibGUtYXV0b2hpZGUgLnVpLXJlc2l6YWJsZS1oYW5kbGV7ZGlzcGxheTpub25lfS51aS1yZXNpemFibGUtbntjdXJzb3I6bi1yZXNpemU7aGVpZ2h0OjdweDt3aWR0aDoxMDAlO3RvcDotNXB4O2xlZnQ6MH0udWktcmVzaXphYmxlLXN7Y3Vyc29yOnMtcmVzaXplO2hlaWdodDo3cHg7d2lkdGg6MTAwJTtib3R0b206LTVweDtsZWZ0OjB9LnVpLXJlc2l6YWJsZS1le2N1cnNvcjplLXJlc2l6ZTt3aWR0aDo3cHg7cmlnaHQ6LTVweDt0b3A6MDtoZWlnaHQ6MTAwJX0udWktcmVzaXphYmxlLXd7Y3Vyc29yOnctcmVzaXplO3dpZHRoOjdweDtsZWZ0Oi01cHg7dG9wOjA7aGVpZ2h0OjEwMCV9LnVpLXJlc2l6YWJsZS1zZXtjdXJzb3I6c2UtcmVzaXplO3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7cmlnaHQ6MXB4O2JvdHRvbToxcHh9LnVpLXJlc2l6YWJsZS1zd3tjdXJzb3I6c3ctcmVzaXplO3dpZHRoOjlweDtoZWlnaHQ6OXB4O2xlZnQ6LTVweDtib3R0b206LTVweH0udWktcmVzaXphYmxlLW53e2N1cnNvcjpudy1yZXNpemU7d2lkdGg6OXB4O2hlaWdodDo5cHg7bGVmdDotNXB4O3RvcDotNXB4fS51aS1yZXNpemFibGUtbmV7Y3Vyc29yOm5lLXJlc2l6ZTt3aWR0aDo5cHg7aGVpZ2h0OjlweDtyaWdodDotNXB4O3RvcDotNXB4fS51aS1hY2NvcmRpb24gLnVpLWFjY29yZGlvbi1oZWFkZXJ7ZGlzcGxheTpibG9jaztjdXJzb3I6cG9pbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MnB4IDAgMCAwO3BhZGRpbmc6LjVlbSAuNWVtIC41ZW0gLjdlbTttaW4taGVpZ2h0OjA7Zm9udC1zaXplOjEwMCV9LnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWljb25ze3BhZGRpbmctbGVmdDoyLjJlbX0udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taWNvbnMgLnVpLWFjY29yZGlvbi1pY29uc3twYWRkaW5nLWxlZnQ6Mi4yZW19LnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWhlYWRlciAudWktYWNjb3JkaW9uLWhlYWRlci1pY29ue3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LjVlbTt0b3A6NTAlO21hcmdpbi10b3A6LThweH0udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24tY29udGVudHtwYWRkaW5nOjFlbSAyLjJlbTtib3JkZXItdG9wOjA7b3ZlcmZsb3c6YXV0b30udWktYXV0b2NvbXBsZXRle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtjdXJzb3I6ZGVmYXVsdH0udWktYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MDtsaW5lLWhlaWdodDpub3JtYWw7bWFyZ2luLXJpZ2h0Oi4xZW07Y3Vyc29yOnBvaW50ZXI7dmVydGljYWwtYWxpZ246bWlkZGxlO3RleHQtYWxpZ246Y2VudGVyO292ZXJmbG93OnZpc2libGV9LnVpLWJ1dHRvbiwudWktYnV0dG9uOmxpbmssLnVpLWJ1dHRvbjp2aXNpdGVkLC51aS1idXR0b246aG92ZXIsLnVpLWJ1dHRvbjphY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLWJ1dHRvbi1pY29uLW9ubHl7d2lkdGg6Mi4yZW19YnV0dG9uLnVpLWJ1dHRvbi1pY29uLW9ubHl7d2lkdGg6Mi40ZW19LnVpLWJ1dHRvbi1pY29ucy1vbmx5e3dpZHRoOjMuNGVtfWJ1dHRvbi51aS1idXR0b24taWNvbnMtb25seXt3aWR0aDozLjdlbX0udWktYnV0dG9uIC51aS1idXR0b24tdGV4dHtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0Om5vcm1hbH0udWktYnV0dG9uLXRleHQtb25seSAudWktYnV0dG9uLXRleHR7cGFkZGluZzouNGVtIDFlbX0udWktYnV0dG9uLWljb24tb25seSAudWktYnV0dG9uLXRleHQsLnVpLWJ1dHRvbi1pY29ucy1vbmx5IC51aS1idXR0b24tdGV4dHtwYWRkaW5nOi40ZW07dGV4dC1pbmRlbnQ6LTk5OTk5OTlweH0udWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IC51aS1idXR0b24tdGV4dCwudWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWJ1dHRvbi10ZXh0e3BhZGRpbmc6LjRlbSAxZW0gLjRlbSAyLjFlbX0udWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgLnVpLWJ1dHRvbi10ZXh0LC51aS1idXR0b24tdGV4dC1pY29ucyAudWktYnV0dG9uLXRleHR7cGFkZGluZzouNGVtIDIuMWVtIC40ZW0gMWVtfS51aS1idXR0b24tdGV4dC1pY29ucyAudWktYnV0dG9uLXRleHR7cGFkZGluZy1sZWZ0OjIuMWVtO3BhZGRpbmctcmlnaHQ6Mi4xZW19aW5wdXQudWktYnV0dG9ue3BhZGRpbmc6LjRlbSAxZW19LnVpLWJ1dHRvbi1pY29uLW9ubHkgLnVpLWljb24sLnVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSAudWktaWNvbiwudWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgLnVpLWljb24sLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1pY29uLC51aS1idXR0b24taWNvbnMtb25seSAudWktaWNvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO21hcmdpbi10b3A6LThweH0udWktYnV0dG9uLWljb24tb25seSAudWktaWNvbntsZWZ0OjUwJTttYXJnaW4tbGVmdDotOHB4fS51aS1idXR0b24tdGV4dC1pY29uLXByaW1hcnkgLnVpLWJ1dHRvbi1pY29uLXByaW1hcnksLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1wcmltYXJ5LC51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLWljb24tcHJpbWFyeXtsZWZ0Oi41ZW19LnVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksLnVpLWJ1dHRvbi1pY29ucy1vbmx5IC51aS1idXR0b24taWNvbi1zZWNvbmRhcnl7cmlnaHQ6LjVlbX0udWktYnV0dG9uc2V0e21hcmdpbi1yaWdodDo3cHh9LnVpLWJ1dHRvbnNldCAudWktYnV0dG9ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0Oi0uM2VtfWlucHV0LnVpLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixidXR0b24udWktYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowO3BhZGRpbmc6MH0udWktZGF0ZXBpY2tlcnt3aWR0aDoxN2VtO3BhZGRpbmc6LjJlbSAuMmVtIDA7ZGlzcGxheTpub25lfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOi4yZW0gMH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDt3aWR0aDoxLjhlbTtoZWlnaHQ6MS44ZW19LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVye3RvcDoxcHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldntsZWZ0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0e3JpZ2h0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVye2xlZnQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXJ7cmlnaHQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYgc3BhbiwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHNwYW57ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTttYXJnaW4tbGVmdDotOHB4O3RvcDo1MCU7bWFyZ2luLXRvcDotOHB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxle21hcmdpbjowIDIuM2VtO2xpbmUtaGVpZ2h0OjEuOGVtO3RleHQtYWxpZ246Y2VudGVyfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxlIHNlbGVjdHtmb250LXNpemU6MWVtO21hcmdpbjoxcHggMH0udWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwudWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFye3dpZHRoOjQ5JX0udWktZGF0ZXBpY2tlciB0YWJsZXt3aWR0aDoxMDAlO2ZvbnQtc2l6ZTouOWVtO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTttYXJnaW46MCAwIC40ZW19LnVpLWRhdGVwaWNrZXIgdGh7cGFkZGluZzouN2VtIC4zZW07dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6Ym9sZDtib3JkZXI6MH0udWktZGF0ZXBpY2tlciB0ZHtib3JkZXI6MDtwYWRkaW5nOjFweH0udWktZGF0ZXBpY2tlciB0ZCBzcGFuLC51aS1kYXRlcGlja2VyIHRkIGF7ZGlzcGxheTpibG9jaztwYWRkaW5nOi4yZW07dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5le2JhY2tncm91bmQtaW1hZ2U6bm9uZTttYXJnaW46LjdlbSAwIDAgMDtwYWRkaW5nOjAgLjJlbTtib3JkZXItbGVmdDowO2JvcmRlci1yaWdodDowO2JvcmRlci1ib3R0b206MH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbntmbG9hdDpyaWdodDttYXJnaW46LjVlbSAuMmVtIC40ZW07Y3Vyc29yOnBvaW50ZXI7cGFkZGluZzouMmVtIC42ZW0gLjNlbSAuNmVtO3dpZHRoOmF1dG87b3ZlcmZsb3c6dmlzaWJsZX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbi51aS1kYXRlcGlja2VyLWN1cnJlbnR7ZmxvYXQ6bGVmdH0udWktZGF0ZXBpY2tlci51aS1kYXRlcGlja2VyLW11bHRpe3dpZHRoOmF1dG99LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXB7ZmxvYXQ6bGVmdH0udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cCB0YWJsZXt3aWR0aDo5NSU7bWFyZ2luOjAgYXV0byAuNGVtfS51aS1kYXRlcGlja2VyLW11bHRpLTIgLnVpLWRhdGVwaWNrZXItZ3JvdXB7d2lkdGg6NTAlfS51aS1kYXRlcGlja2VyLW11bHRpLTMgLnVpLWRhdGVwaWNrZXItZ3JvdXB7d2lkdGg6MzMuMyV9LnVpLWRhdGVwaWNrZXItbXVsdGktNCAudWktZGF0ZXBpY2tlci1ncm91cHt3aWR0aDoyNSV9LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIC51aS1kYXRlcGlja2VyLWhlYWRlcntib3JkZXItbGVmdC13aWR0aDowfS51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmV7Y2xlYXI6bGVmdH0udWktZGF0ZXBpY2tlci1yb3ctYnJlYWt7Y2xlYXI6Ym90aDt3aWR0aDoxMDAlO2ZvbnQtc2l6ZTowfS51aS1kYXRlcGlja2VyLXJ0bHtkaXJlY3Rpb246cnRsfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2e3JpZ2h0OjJweDtsZWZ0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHR7bGVmdDoycHg7cmlnaHQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldjpob3ZlcntyaWdodDoxcHg7bGVmdDphdXRvfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1uZXh0OmhvdmVye2xlZnQ6MXB4O3JpZ2h0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmV7Y2xlYXI6cmlnaHR9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9ue2Zsb2F0OmxlZnR9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudCwudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXB7ZmxvYXQ6cmlnaHR9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyLC51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUgLnVpLWRhdGVwaWNrZXItaGVhZGVye2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjFweH0udWktZGlhbG9ne292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7cGFkZGluZzouMmVtO291dGxpbmU6MH0udWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGViYXJ7cGFkZGluZzouNGVtIDFlbTtwb3NpdGlvbjpyZWxhdGl2ZX0udWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGV7ZmxvYXQ6bGVmdDttYXJnaW46LjFlbSAwO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDo5MCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlYmFyLWNsb3Nle3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi4zZW07dG9wOjUwJTt3aWR0aDoyMHB4O21hcmdpbjotMTBweCAwIDAgMDtwYWRkaW5nOjFweDtoZWlnaHQ6MjBweH0udWktZGlhbG9nIC51aS1kaWFsb2ctY29udGVudHtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6MDtwYWRkaW5nOi41ZW0gMWVtO2JhY2tncm91bmQ6bm9uZTtvdmVyZmxvdzphdXRvfS51aS1kaWFsb2cgLnVpLWRpYWxvZy1idXR0b25wYW5le3RleHQtYWxpZ246bGVmdDtib3JkZXItd2lkdGg6MXB4IDAgMCAwO2JhY2tncm91bmQtaW1hZ2U6bm9uZTttYXJnaW4tdG9wOi41ZW07cGFkZGluZzouM2VtIDFlbSAuNWVtIC40ZW19LnVpLWRpYWxvZyAudWktZGlhbG9nLWJ1dHRvbnBhbmUgLnVpLWRpYWxvZy1idXR0b25zZXR7ZmxvYXQ6cmlnaHR9LnVpLWRpYWxvZyAudWktZGlhbG9nLWJ1dHRvbnBhbmUgYnV0dG9ue21hcmdpbjouNWVtIC40ZW0gLjVlbSAwO2N1cnNvcjpwb2ludGVyfS51aS1kaWFsb2cgLnVpLXJlc2l6YWJsZS1zZXt3aWR0aDoxMnB4O2hlaWdodDoxMnB4O3JpZ2h0Oi01cHg7Ym90dG9tOi01cHg7YmFja2dyb3VuZC1wb3NpdGlvbjoxNnB4IDE2cHh9LnVpLWRyYWdnYWJsZSAudWktZGlhbG9nLXRpdGxlYmFye2N1cnNvcjptb3ZlfS51aS1tZW51e2xpc3Qtc3R5bGU6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7ZGlzcGxheTpibG9jaztvdXRsaW5lOm5vbmV9LnVpLW1lbnUgLnVpLW1lbnV7cG9zaXRpb246YWJzb2x1dGV9LnVpLW1lbnUgLnVpLW1lbnUtaXRlbXtwb3NpdGlvbjpyZWxhdGl2ZTttYXJnaW46MDtwYWRkaW5nOjNweCAxZW0gM3B4IC40ZW07Y3Vyc29yOnBvaW50ZXI7bWluLWhlaWdodDowO2xpc3Qtc3R5bGUtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBQUFBUC8vL3lINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQlJBQTciKX0udWktbWVudSAudWktbWVudS1kaXZpZGVye21hcmdpbjo1cHggMDtoZWlnaHQ6MDtmb250LXNpemU6MDtsaW5lLWhlaWdodDowO2JvcmRlci13aWR0aDoxcHggMCAwIDB9LnVpLW1lbnUgLnVpLXN0YXRlLWZvY3VzLC51aS1tZW51IC51aS1zdGF0ZS1hY3RpdmV7bWFyZ2luOi0xcHh9LnVpLW1lbnUtaWNvbnN7cG9zaXRpb246cmVsYXRpdmV9LnVpLW1lbnUtaWNvbnMgLnVpLW1lbnUtaXRlbXtwYWRkaW5nLWxlZnQ6MmVtfS51aS1tZW51IC51aS1pY29ue3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6LjJlbTttYXJnaW46YXV0byAwfS51aS1tZW51IC51aS1tZW51LWljb257bGVmdDphdXRvO3JpZ2h0OjB9LnVpLXRhYnN7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzouMmVtfS51aS10YWJzIC51aS10YWJzLW5hdnttYXJnaW46MDtwYWRkaW5nOi4yZW0gLjJlbSAwfS51aS10YWJzIC51aS10YWJzLW5hdiBsaXtsaXN0LXN0eWxlOm5vbmU7ZmxvYXQ6bGVmdDtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MDttYXJnaW46MXB4IC4yZW0gMCAwO2JvcmRlci1ib3R0b20td2lkdGg6MDtwYWRkaW5nOjA7d2hpdGUtc3BhY2U6bm93cmFwfS51aS10YWJzIC51aS10YWJzLW5hdiAudWktdGFicy1hbmNob3J7ZmxvYXQ6bGVmdDtwYWRkaW5nOi41ZW0gMWVtO3RleHQtZGVjb3JhdGlvbjpub25lfS51aS10YWJzIC51aS10YWJzLW5hdiBsaS51aS10YWJzLWFjdGl2ZXttYXJnaW4tYm90dG9tOi0xcHg7cGFkZGluZy1ib3R0b206MXB4fS51aS10YWJzIC51aS10YWJzLW5hdiBsaS51aS10YWJzLWFjdGl2ZSAudWktdGFicy1hbmNob3IsLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpLnVpLXN0YXRlLWRpc2FibGVkIC51aS10YWJzLWFuY2hvciwudWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1sb2FkaW5nIC51aS10YWJzLWFuY2hvcntjdXJzb3I6dGV4dH0udWktdGFicy1jb2xsYXBzaWJsZSAudWktdGFicy1uYXYgbGkudWktdGFicy1hY3RpdmUgLnVpLXRhYnMtYW5jaG9ye2N1cnNvcjpwb2ludGVyfS51aS10YWJzIC51aS10YWJzLXBhbmVse2Rpc3BsYXk6YmxvY2s7Ym9yZGVyLXdpZHRoOjA7cGFkZGluZzoxZW0gMS40ZW07YmFja2dyb3VuZDpub25lfS51aS13aWRnZXR7Zm9udC1mYW1pbHk6THVjaWRhIEdyYW5kZSxMdWNpZGEgU2FucyxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxLjFlbX0udWktd2lkZ2V0IC51aS13aWRnZXR7Zm9udC1zaXplOjFlbX0udWktd2lkZ2V0IGlucHV0LC51aS13aWRnZXQgc2VsZWN0LC51aS13aWRnZXQgdGV4dGFyZWEsLnVpLXdpZGdldCBidXR0b257Zm9udC1mYW1pbHk6THVjaWRhIEdyYW5kZSxMdWNpZGEgU2FucyxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxZW19LnVpLXdpZGdldC1jb250ZW50e2JvcmRlcjoxcHggc29saWQgI2E2YzllMjtiYWNrZ3JvdW5kOiNmY2ZkZmQgdXJsKCJpbWFnZXMvdWktYmdfaW5zZXQtaGFyZF8xMDBfZmNmZGZkXzF4MTAwLnBuZyIpIDUwJSBib3R0b20gcmVwZWF0LXg7Y29sb3I6IzIyMn0udWktd2lkZ2V0LWNvbnRlbnQgYXtjb2xvcjojMjIyfS51aS13aWRnZXQtaGVhZGVye2JvcmRlcjoxcHggc29saWQgIzQyOTdkNztiYWNrZ3JvdW5kOiM1YzljY2MgdXJsKCJpbWFnZXMvdWktYmdfZ2xvc3Mtd2F2ZV81NV81YzljY2NfNTAweDEwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2NvbG9yOiNmZmY7Zm9udC13ZWlnaHQ6Ym9sZH0udWktd2lkZ2V0LWhlYWRlciBhe2NvbG9yOiNmZmZ9LnVpLXN0YXRlLWRlZmF1bHQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kZWZhdWx0LC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1kZWZhdWx0e2JvcmRlcjoxcHggc29saWQgI2M1ZGJlYztiYWNrZ3JvdW5kOiNkZmVmZmMgdXJsKCJpbWFnZXMvdWktYmdfZ2xhc3NfODVfZGZlZmZjXzF4NDAwLnBuZyIpIDUwJSA1MCUgcmVwZWF0LXg7Zm9udC13ZWlnaHQ6Ym9sZDtjb2xvcjojMmU2ZTllfS51aS1zdGF0ZS1kZWZhdWx0IGEsLnVpLXN0YXRlLWRlZmF1bHQgYTpsaW5rLC51aS1zdGF0ZS1kZWZhdWx0IGE6dmlzaXRlZHtjb2xvcjojMmU2ZTllO3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1zdGF0ZS1ob3ZlciwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhvdmVyLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1ob3ZlciwudWktc3RhdGUtZm9jdXMsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1mb2N1cywudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZm9jdXN7Ym9yZGVyOjFweCBzb2xpZCAjNzliN2U3O2JhY2tncm91bmQ6I2QwZTVmNSB1cmwoImltYWdlcy91aS1iZ19nbGFzc183NV9kMGU1ZjVfMXg0MDAucG5nIikgNTAlIDUwJSByZXBlYXQteDtmb250LXdlaWdodDpib2xkO2NvbG9yOiMxZDU5ODd9LnVpLXN0YXRlLWhvdmVyIGEsLnVpLXN0YXRlLWhvdmVyIGE6aG92ZXIsLnVpLXN0YXRlLWhvdmVyIGE6bGluaywudWktc3RhdGUtaG92ZXIgYTp2aXNpdGVkLC51aS1zdGF0ZS1mb2N1cyBhLC51aS1zdGF0ZS1mb2N1cyBhOmhvdmVyLC51aS1zdGF0ZS1mb2N1cyBhOmxpbmssLnVpLXN0YXRlLWZvY3VzIGE6dmlzaXRlZHtjb2xvcjojMWQ1OTg3O3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1zdGF0ZS1hY3RpdmUsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1hY3RpdmUsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWFjdGl2ZXtib3JkZXI6MXB4IHNvbGlkICM3OWI3ZTc7YmFja2dyb3VuZDojZjVmOGY5IHVybCgiaW1hZ2VzL3VpLWJnX2luc2V0LWhhcmRfMTAwX2Y1ZjhmOV8xeDEwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6I2UxNzAwOX0udWktc3RhdGUtYWN0aXZlIGEsLnVpLXN0YXRlLWFjdGl2ZSBhOmxpbmssLnVpLXN0YXRlLWFjdGl2ZSBhOnZpc2l0ZWR7Y29sb3I6I2UxNzAwOTt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktc3RhdGUtaGlnaGxpZ2h0LC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0LC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1oaWdobGlnaHR7Ym9yZGVyOjFweCBzb2xpZCAjZmFkNDJlO2JhY2tncm91bmQ6I2ZiZWM4OCB1cmwoImltYWdlcy91aS1iZ19mbGF0XzU1X2ZiZWM4OF80MHgxMDAucG5nIikgNTAlIDUwJSByZXBlYXQteDtjb2xvcjojMzYzNjM2fS51aS1zdGF0ZS1oaWdobGlnaHQgYSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCBhLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1oaWdobGlnaHQgYXtjb2xvcjojMzYzNjM2fS51aS1zdGF0ZS1lcnJvciwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvcntib3JkZXI6MXB4IHNvbGlkICNjZDBhMGE7YmFja2dyb3VuZDojZmVmMWVjIHVybCgiaW1hZ2VzL3VpLWJnX2dsYXNzXzk1X2ZlZjFlY18xeDQwMC5wbmciKSA1MCUgNTAlIHJlcGVhdC14O2NvbG9yOiNjZDBhMGF9LnVpLXN0YXRlLWVycm9yIGEsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciBhLC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvciBhe2NvbG9yOiNjZDBhMGF9LnVpLXN0YXRlLWVycm9yLXRleHQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvci10ZXh0LC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvci10ZXh0e2NvbG9yOiNjZDBhMGF9LnVpLXByaW9yaXR5LXByaW1hcnksLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1wcmltYXJ5LC51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1wcmltYXJ5e2ZvbnQtd2VpZ2h0OmJvbGR9LnVpLXByaW9yaXR5LXNlY29uZGFyeSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXNlY29uZGFyeSwudWktd2lkZ2V0LWhlYWRlciAudWktcHJpb3JpdHktc2Vjb25kYXJ5e29wYWNpdHk6Ljc7ZmlsdGVyOkFscGhhKE9wYWNpdHk9NzApO2ZvbnQtd2VpZ2h0Om5vcm1hbH0udWktc3RhdGUtZGlzYWJsZWQsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kaXNhYmxlZCwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGlzYWJsZWR7b3BhY2l0eTouMzU7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpO2JhY2tncm91bmQtaW1hZ2U6bm9uZX0udWktc3RhdGUtZGlzYWJsZWQgLnVpLWljb257ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzUpfS51aS1pY29ue3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHh9LnVpLWljb24sLnVpLXdpZGdldC1jb250ZW50IC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfNDY5YmRkXzI1NngyNDAucG5nIil9LnVpLXdpZGdldC1oZWFkZXIgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc19kOGU3ZjNfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtZGVmYXVsdCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zXzZkYThkNV8yNTZ4MjQwLnBuZyIpfS51aS1zdGF0ZS1ob3ZlciAudWktaWNvbiwudWktc3RhdGUtZm9jdXMgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoImltYWdlcy91aS1pY29uc18yMTdiYzBfMjU2eDI0MC5wbmciKX0udWktc3RhdGUtYWN0aXZlIC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKCJpbWFnZXMvdWktaWNvbnNfZjliZDAxXzI1NngyNDAucG5nIil9LnVpLXN0YXRlLWhpZ2hsaWdodCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zXzJlODNmZl8yNTZ4MjQwLnBuZyIpfS51aS1zdGF0ZS1lcnJvciAudWktaWNvbiwudWktc3RhdGUtZXJyb3ItdGV4dCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybCgiaW1hZ2VzL3VpLWljb25zX2NkMGEwYV8yNTZ4MjQwLnBuZyIpfS51aS1pY29uLWJsYW5re2JhY2tncm91bmQtcG9zaXRpb246MTZweCAxNnB4fS51aS1pY29uLWNhcmF0LTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMH0udWktaWNvbi1jYXJhdC0xLW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggMH0udWktaWNvbi1jYXJhdC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAwfS51aS1pY29uLWNhcmF0LTEtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAwfS51aS1pY29uLWNhcmF0LTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IDB9LnVpLWljb24tY2FyYXQtMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IDB9LnVpLWljb24tY2FyYXQtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggMH0udWktaWNvbi1jYXJhdC0xLW53e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IDB9LnVpLWljb24tY2FyYXQtMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggMH0udWktaWNvbi1jYXJhdC0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAwfS51aS1pY29uLXRyaWFuZ2xlLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0yLW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTZweH0udWktaWNvbi1hcnJvdy0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIC0zMnB4fS51aS1pY29uLWFycm93LTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTMycHh9LnVpLWljb24tYXJyb3ctMi1uZS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMzJweH0udWktaWNvbi1hcnJvdy0yLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMzJweH0udWktaWNvbi1hcnJvdy0yLXNlLW53e2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTMycHh9LnVpLWljb24tYXJyb3dzdG9wLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMDhweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTMycHh9LnVpLWljb24tYXJyb3d0aGljay0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjowIC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXNle2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMi1uZS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTItZS13e2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMi1zZS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTQ4cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjowIC02NHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJuLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS13e2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC02NHB4fS51aS1pY29uLWFycm93cmVmcmVzaC0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC02NHB4fS51aS1pY29uLWFycm93LTR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC04MHB4fS51aS1pY29uLWFycm93LTQtZGlhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC04MHB4fS51aS1pY29uLWV4dGxpbmt7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtODBweH0udWktaWNvbi1uZXd3aW57YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtODBweH0udWktaWNvbi1yZWZyZXNoe2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTgwcHh9LnVpLWljb24tc2h1ZmZsZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC04MHB4fS51aS1pY29uLXRyYW5zZmVyLWUtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC04MHB4fS51aS1pY29uLXRyYW5zZmVydGhpY2stZS13e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC04MHB4fS51aS1pY29uLWZvbGRlci1jb2xsYXBzZWR7YmFja2dyb3VuZC1wb3NpdGlvbjowIC05NnB4fS51aS1pY29uLWZvbGRlci1vcGVue2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTk2cHh9LnVpLWljb24tZG9jdW1lbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtOTZweH0udWktaWNvbi1kb2N1bWVudC1ie2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTk2cHh9LnVpLWljb24tbm90ZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC05NnB4fS51aS1pY29uLW1haWwtY2xvc2Vke2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTk2cHh9LnVpLWljb24tbWFpbC1vcGVue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTk2cHh9LnVpLWljb24tc3VpdGNhc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTk2cHh9LnVpLWljb24tY29tbWVudHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtOTZweH0udWktaWNvbi1wZXJzb257YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTk2cHh9LnVpLWljb24tcHJpbnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTk2cHh9LnVpLWljb24tdHJhc2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTk2cHh9LnVpLWljb24tbG9ja2Vke2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC05NnB4fS51aS1pY29uLXVubG9ja2Vke2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC05NnB4fS51aS1pY29uLWJvb2ttYXJre2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC05NnB4fS51aS1pY29uLXRhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtOTZweH0udWktaWNvbi1ob21le2JhY2tncm91bmQtcG9zaXRpb246MCAtMTEycHh9LnVpLWljb24tZmxhZ3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xMTJweH0udWktaWNvbi1jYWxlbmRhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xMTJweH0udWktaWNvbi1jYXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTExMnB4fS51aS1pY29uLXBlbmNpbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xMTJweH0udWktaWNvbi1jbG9ja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xMTJweH0udWktaWNvbi1kaXNre2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTExMnB4fS51aS1pY29uLWNhbGN1bGF0b3J7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTExMnB4fS51aS1pY29uLXpvb21pbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTEycHh9LnVpLWljb24tem9vbW91dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTEycHh9LnVpLWljb24tc2VhcmNoe2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0xMTJweH0udWktaWNvbi13cmVuY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTExMnB4fS51aS1pY29uLWdlYXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTExMnB4fS51aS1pY29uLWhlYXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0xMTJweH0udWktaWNvbi1zdGFye2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC0xMTJweH0udWktaWNvbi1saW5re2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0xMTJweH0udWktaWNvbi1jYW5jZWx7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xMjhweH0udWktaWNvbi1wbHVze2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTEyOHB4fS51aS1pY29uLXBsdXN0aGlja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xMjhweH0udWktaWNvbi1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xMjhweH0udWktaWNvbi1taW51c3RoaWNre2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTEyOHB4fS51aS1pY29uLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTEyOHB4fS51aS1pY29uLWNsb3NldGhpY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTI4cHh9LnVpLWljb24ta2V5e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xMjhweH0udWktaWNvbi1saWdodGJ1bGJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTEyOHB4fS51aS1pY29uLXNjaXNzb3Jze2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xMjhweH0udWktaWNvbi1jbGlwYm9hcmR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTEyOHB4fS51aS1pY29uLWNvcHl7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTEyOHB4fS51aS1pY29uLWNvbnRhY3R7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTEyOHB4fS51aS1pY29uLWltYWdle2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0xMjhweH0udWktaWNvbi12aWRlb3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yMjRweCAtMTI4cHh9LnVpLWljb24tc2NyaXB0e2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC0xMjhweH0udWktaWNvbi1hbGVydHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE0NHB4fS51aS1pY29uLWluZm97YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTQ0cHh9LnVpLWljb24tbm90aWNle2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE0NHB4fS51aS1pY29uLWhlbHB7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTQ0cHh9LnVpLWljb24tY2hlY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTQ0cHh9LnVpLWljb24tYnVsbGV0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE0NHB4fS51aS1pY29uLXJhZGlvLW9ue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE0NHB4fS51aS1pY29uLXJhZGlvLW9mZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTQ0cHh9LnVpLWljb24tcGluLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTE0NHB4fS51aS1pY29uLXBpbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xNDRweH0udWktaWNvbi1wbGF5e2JhY2tncm91bmQtcG9zaXRpb246MCAtMTYwcHh9LnVpLWljb24tcGF1c2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTYwcHh9LnVpLWljb24tc2Vlay1uZXh0e2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE2MHB4fS51aS1pY29uLXNlZWstcHJldntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xNjBweH0udWktaWNvbi1zZWVrLWVuZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xNjBweH0udWktaWNvbi1zZWVrLXN0YXJ0e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE2MHB4fS51aS1pY29uLXNlZWstZmlyc3R7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTYwcHh9LnVpLWljb24tc3RvcHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNjBweH0udWktaWNvbi1lamVjdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTYwcHh9LnVpLWljb24tdm9sdW1lLW9mZntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTYwcHh9LnVpLWljb24tdm9sdW1lLW9ue2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xNjBweH0udWktaWNvbi1wb3dlcntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE3NnB4fS51aS1pY29uLXNpZ25hbC1kaWFne2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE3NnB4fS51aS1pY29uLXNpZ25hbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTB7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0xe2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE3NnB4fS51aS1pY29uLWJhdHRlcnktMntiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTN7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTc2cHh9LnVpLWljb24tY2lyY2xlLXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xOTJweH0udWktaWNvbi1jaXJjbGUtbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1le2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS13e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1ue2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy1le2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWFycm93LXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy1ue2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtem9vbWlue2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtem9vbW91dHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWNoZWNre2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGVzbWFsbC1wbHVze2JhY2tncm91bmQtcG9zaXRpb246MCAtMjA4cHh9LnVpLWljb24tY2lyY2xlc21hbGwtbWludXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMjA4cHh9LnVpLWljb24tY2lyY2xlc21hbGwtY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMjA4cHh9LnVpLWljb24tc3F1YXJlc21hbGwtcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0yMDhweH0udWktaWNvbi1zcXVhcmVzbWFsbC1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0yMDhweH0udWktaWNvbi1zcXVhcmVzbWFsbC1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0yMDhweH0udWktaWNvbi1ncmlwLWRvdHRlZC12ZXJ0aWNhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTIyNHB4fS51aS1pY29uLWdyaXAtZG90dGVkLWhvcml6b250YWx7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMjI0cHh9LnVpLWljb24tZ3JpcC1zb2xpZC12ZXJ0aWNhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0yMjRweH0udWktaWNvbi1ncmlwLXNvbGlkLWhvcml6b250YWx7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMjI0cHh9LnVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNle2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTIyNHB4fS51aS1pY29uLWdyaXAtZGlhZ29uYWwtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMjI0cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci10b3AsLnVpLWNvcm5lci1sZWZ0LC51aS1jb3JuZXItdGx7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo1cHh9LnVpLWNvcm5lci1hbGwsLnVpLWNvcm5lci10b3AsLnVpLWNvcm5lci1yaWdodCwudWktY29ybmVyLXRye2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjVweH0udWktY29ybmVyLWFsbCwudWktY29ybmVyLWJvdHRvbSwudWktY29ybmVyLWxlZnQsLnVpLWNvcm5lci1ibHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjVweH0udWktY29ybmVyLWFsbCwudWktY29ybmVyLWJvdHRvbSwudWktY29ybmVyLXJpZ2h0LC51aS1jb3JuZXItYnJ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6NXB4fS51aS13aWRnZXQtb3ZlcmxheXtiYWNrZ3JvdW5kOiNhYWEgdXJsKCJpbWFnZXMvdWktYmdfZmxhdF8wX2FhYWFhYV80MHgxMDAucG5nIikgNTAlIDUwJSByZXBlYXQteDtvcGFjaXR5Oi4zO2ZpbHRlcjpBbHBoYShPcGFjaXR5PTMwKX0udWktd2lkZ2V0LXNoYWRvd3ttYXJnaW46LThweCAwIDAgLThweDtwYWRkaW5nOjhweDtiYWNrZ3JvdW5kOiNhYWEgdXJsKCJpbWFnZXMvdWktYmdfZmxhdF8wX2FhYWFhYV80MHgxMDAucG5nIikgNTAlIDUwJSByZXBlYXQteDtvcGFjaXR5Oi4zO2ZpbHRlcjpBbHBoYShPcGFjaXR5PTMwKTtib3JkZXItcmFkaXVzOjhweH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2pxdWVyeS11aS5taW4uanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9qcXVlcnktdWktMS4xMS4wL2pxdWVyeS11aS5taW4uanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkOWRiNWEuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvanF1ZXJ5LXVpLTEuMTEuMC9qcXVlcnktdWkubWluLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotLyohIGpRdWVyeSBVSSAtIHYxLjExLjAgLSAyMDE0LTA4LTA2Ci0qIGh0dHA6Ly9qcXVlcnl1aS5jb20KLSogSW5jbHVkZXM6IGNvcmUuanMsIHdpZGdldC5qcywgbW91c2UuanMsIHBvc2l0aW9uLmpzLCBkcmFnZ2FibGUuanMsIHJlc2l6YWJsZS5qcywgYWNjb3JkaW9uLmpzLCBhdXRvY29tcGxldGUuanMsIGJ1dHRvbi5qcywgZGF0ZXBpY2tlci5qcywgZGlhbG9nLmpzLCBtZW51LmpzLCB0YWJzLmpzCi0qIENvcHlyaWdodCAyMDE0IGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnM7IExpY2Vuc2VkIE1JVCAqLwotCi0oZnVuY3Rpb24oZSl7ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoWyJqcXVlcnkiXSxlKTplKGpRdWVyeSl9KShmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHQscyl7dmFyIG4sYSxvLHI9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJhcmVhIj09PXI/KG49dC5wYXJlbnROb2RlLGE9bi5uYW1lLHQuaHJlZiYmYSYmIm1hcCI9PT1uLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/KG89ZSgiaW1nW3VzZW1hcD0jIithKyJdIilbMF0sISFvJiZpKG8pKTohMSk6KC9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdC8udGVzdChyKT8hdC5kaXNhYmxlZDoiYSI9PT1yP3QuaHJlZnx8czpzKSYmaSh0KX1mdW5jdGlvbiBpKHQpe3JldHVybiBlLmV4cHIuZmlsdGVycy52aXNpYmxlKHQpJiYhZSh0KS5wYXJlbnRzKCkuYWRkQmFjaygpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiJoaWRkZW4iPT09ZS5jc3ModGhpcywidmlzaWJpbGl0eSIpfSkubGVuZ3RofWZ1bmN0aW9uIHMoZSl7Zm9yKHZhciB0LGk7ZS5sZW5ndGgmJmVbMF0hPT1kb2N1bWVudDspe2lmKHQ9ZS5jc3MoInBvc2l0aW9uIiksKCJhYnNvbHV0ZSI9PT10fHwicmVsYXRpdmUiPT09dHx8ImZpeGVkIj09PXQpJiYoaT1wYXJzZUludChlLmNzcygiekluZGV4IiksMTApLCFpc05hTihpKSYmMCE9PWkpKXJldHVybiBpO2U9ZS5wYXJlbnQoKX1yZXR1cm4gMH1mdW5jdGlvbiBuKCl7dGhpcy5fY3VySW5zdD1udWxsLHRoaXMuX2tleUV2ZW50PSExLHRoaXMuX2Rpc2FibGVkSW5wdXRzPVtdLHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nPSExLHRoaXMuX2luRGlhbG9nPSExLHRoaXMuX21haW5EaXZJZD0idWktZGF0ZXBpY2tlci1kaXYiLHRoaXMuX2lubGluZUNsYXNzPSJ1aS1kYXRlcGlja2VyLWlubGluZSIsdGhpcy5fYXBwZW5kQ2xhc3M9InVpLWRhdGVwaWNrZXItYXBwZW5kIix0aGlzLl90cmlnZ2VyQ2xhc3M9InVpLWRhdGVwaWNrZXItdHJpZ2dlciIsdGhpcy5fZGlhbG9nQ2xhc3M9InVpLWRhdGVwaWNrZXItZGlhbG9nIix0aGlzLl9kaXNhYmxlQ2xhc3M9InVpLWRhdGVwaWNrZXItZGlzYWJsZWQiLHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzPSJ1aS1kYXRlcGlja2VyLXVuc2VsZWN0YWJsZSIsdGhpcy5fY3VycmVudENsYXNzPSJ1aS1kYXRlcGlja2VyLWN1cnJlbnQtZGF5Iix0aGlzLl9kYXlPdmVyQ2xhc3M9InVpLWRhdGVwaWNrZXItZGF5cy1jZWxsLW92ZXIiLHRoaXMucmVnaW9uYWw9W10sdGhpcy5yZWdpb25hbFsiIl09e2Nsb3NlVGV4dDoiRG9uZSIscHJldlRleHQ6IlByZXYiLG5leHRUZXh0OiJOZXh0IixjdXJyZW50VGV4dDoiVG9kYXkiLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLHdlZWtIZWFkZXI6IldrIixkYXRlRm9ybWF0OiJtbS9kZC95eSIsZmlyc3REYXk6MCxpc1JUTDohMSxzaG93TW9udGhBZnRlclllYXI6ITEseWVhclN1ZmZpeDoiIn0sdGhpcy5fZGVmYXVsdHM9e3Nob3dPbjoiZm9jdXMiLHNob3dBbmltOiJmYWRlSW4iLHNob3dPcHRpb25zOnt9LGRlZmF1bHREYXRlOm51bGwsYXBwZW5kVGV4dDoiIixidXR0b25UZXh0OiIuLi4iLGJ1dHRvbkltYWdlOiIiLGJ1dHRvbkltYWdlT25seTohMSxoaWRlSWZOb1ByZXZOZXh0OiExLG5hdmlnYXRpb25Bc0RhdGVGb3JtYXQ6ITEsZ290b0N1cnJlbnQ6ITEsY2hhbmdlTW9udGg6ITEsY2hhbmdlWWVhcjohMSx5ZWFyUmFuZ2U6ImMtMTA6YysxMCIsc2hvd090aGVyTW9udGhzOiExLHNlbGVjdE90aGVyTW9udGhzOiExLHNob3dXZWVrOiExLGNhbGN1bGF0ZVdlZWs6dGhpcy5pc284NjAxV2VlayxzaG9ydFllYXJDdXRvZmY6IisxMCIsbWluRGF0ZTpudWxsLG1heERhdGU6bnVsbCxkdXJhdGlvbjoiZmFzdCIsYmVmb3JlU2hvd0RheTpudWxsLGJlZm9yZVNob3c6bnVsbCxvblNlbGVjdDpudWxsLG9uQ2hhbmdlTW9udGhZZWFyOm51bGwsb25DbG9zZTpudWxsLG51bWJlck9mTW9udGhzOjEsc2hvd0N1cnJlbnRBdFBvczowLHN0ZXBNb250aHM6MSxzdGVwQmlnTW9udGhzOjEyLGFsdEZpZWxkOiIiLGFsdEZvcm1hdDoiIixjb25zdHJhaW5JbnB1dDohMCxzaG93QnV0dG9uUGFuZWw6ITEsYXV0b1NpemU6ITEsZGlzYWJsZWQ6ITF9LGUuZXh0ZW5kKHRoaXMuX2RlZmF1bHRzLHRoaXMucmVnaW9uYWxbIiJdKSx0aGlzLnJlZ2lvbmFsLmVuPWUuZXh0ZW5kKCEwLHt9LHRoaXMucmVnaW9uYWxbIiJdKSx0aGlzLnJlZ2lvbmFsWyJlbi1VUyJdPWUuZXh0ZW5kKCEwLHt9LHRoaXMucmVnaW9uYWwuZW4pLHRoaXMuZHBEaXY9YShlKCI8ZGl2IGlkPSciK3RoaXMuX21haW5EaXZJZCsiJyBjbGFzcz0ndWktZGF0ZXBpY2tlciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IHVpLWNvcm5lci1hbGwnPjwvZGl2PiIpKX1mdW5jdGlvbiBhKHQpe3ZhciBpPSJidXR0b24sIC51aS1kYXRlcGlja2VyLXByZXYsIC51aS1kYXRlcGlja2VyLW5leHQsIC51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRkIGEiO3JldHVybiB0LmRlbGVnYXRlKGksIm1vdXNlb3V0IixmdW5jdGlvbigpe2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJ1aS1kYXRlcGlja2VyLXByZXYiKSYmZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyIiksLTEhPT10aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJ1aS1kYXRlcGlja2VyLW5leHQiKSYmZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIil9KS5kZWxlZ2F0ZShpLCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7ZS5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihtLmlubGluZT90LnBhcmVudCgpWzBdOm0uaW5wdXRbMF0pfHwoZSh0aGlzKS5wYXJlbnRzKCIudWktZGF0ZXBpY2tlci1jYWxlbmRhciIpLmZpbmQoImEiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSxlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLC0xIT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZigidWktZGF0ZXBpY2tlci1wcmV2IikmJmUodGhpcykuYWRkQ2xhc3MoInVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciIpLC0xIT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZigidWktZGF0ZXBpY2tlci1uZXh0IikmJmUodGhpcykuYWRkQ2xhc3MoInVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlciIpKX0pfWZ1bmN0aW9uIG8odCxpKXtlLmV4dGVuZCh0LGkpO2Zvcih2YXIgcyBpbiBpKW51bGw9PWlbc10mJih0W3NdPWlbc10pO3JldHVybiB0fWUudWk9ZS51aXx8e30sZS5leHRlbmQoZS51aSx7dmVyc2lvbjoiMS4xMS4wIixrZXlDb2RlOntCQUNLU1BBQ0U6OCxDT01NQToxODgsREVMRVRFOjQ2LERPV046NDAsRU5EOjM1LEVOVEVSOjEzLEVTQ0FQRToyNyxIT01FOjM2LExFRlQ6MzcsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEVSSU9EOjE5MCxSSUdIVDozOSxTUEFDRTozMixUQUI6OSxVUDozOH19KSxlLmZuLmV4dGVuZCh7c2Nyb2xsUGFyZW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jc3MoInBvc2l0aW9uIiksaT0iYWJzb2x1dGUiPT09dCxzPXRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7cmV0dXJuIGkmJiJzdGF0aWMiPT09dC5jc3MoInBvc2l0aW9uIik/ITE6LyhhdXRvfHNjcm9sbCkvLnRlc3QodC5jc3MoIm92ZXJmbG93IikrdC5jc3MoIm92ZXJmbG93LXkiKSt0LmNzcygib3ZlcmZsb3cteCIpKX0pLmVxKDApO3JldHVybiJmaXhlZCIhPT10JiZzLmxlbmd0aD9zOmUodGhpc1swXS5vd25lckRvY3VtZW50fHxkb2N1bWVudCl9LHVuaXF1ZUlkOmZ1bmN0aW9uKCl7dmFyIGU9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5pZHx8KHRoaXMuaWQ9InVpLWlkLSIrICsrZSl9KX19KCkscmVtb3ZlVW5pcXVlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7L151aS1pZC1cZCskLy50ZXN0KHRoaXMuaWQpJiZlKHRoaXMpLnJlbW92ZUF0dHIoImlkIil9KX19KSxlLmV4dGVuZChlLmV4cHJbIjoiXSx7ZGF0YTplLmV4cHIuY3JlYXRlUHNldWRvP2UuZXhwci5jcmVhdGVQc2V1ZG8oZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiEhZS5kYXRhKGksdCl9fSk6ZnVuY3Rpb24odCxpLHMpe3JldHVybiEhZS5kYXRhKHQsc1szXSl9LGZvY3VzYWJsZTpmdW5jdGlvbihpKXtyZXR1cm4gdChpLCFpc05hTihlLmF0dHIoaSwidGFiaW5kZXgiKSkpfSx0YWJiYWJsZTpmdW5jdGlvbihpKXt2YXIgcz1lLmF0dHIoaSwidGFiaW5kZXgiKSxuPWlzTmFOKHMpO3JldHVybihufHxzPj0wKSYmdChpLCFuKX19KSxlKCI8YT4iKS5vdXRlcldpZHRoKDEpLmpxdWVyeXx8ZS5lYWNoKFsiV2lkdGgiLCJIZWlnaHQiXSxmdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHModCxpLHMsYSl7cmV0dXJuIGUuZWFjaChuLGZ1bmN0aW9uKCl7aS09cGFyc2VGbG9hdChlLmNzcyh0LCJwYWRkaW5nIit0aGlzKSl8fDAscyYmKGktPXBhcnNlRmxvYXQoZS5jc3ModCwiYm9yZGVyIit0aGlzKyJXaWR0aCIpKXx8MCksYSYmKGktPXBhcnNlRmxvYXQoZS5jc3ModCwibWFyZ2luIit0aGlzKSl8fDApfSksaX12YXIgbj0iV2lkdGgiPT09aT9bIkxlZnQiLCJSaWdodCJdOlsiVG9wIiwiQm90dG9tIl0sYT1pLnRvTG93ZXJDYXNlKCksbz17aW5uZXJXaWR0aDplLmZuLmlubmVyV2lkdGgsaW5uZXJIZWlnaHQ6ZS5mbi5pbm5lckhlaWdodCxvdXRlcldpZHRoOmUuZm4ub3V0ZXJXaWR0aCxvdXRlckhlaWdodDplLmZuLm91dGVySGVpZ2h0fTtlLmZuWyJpbm5lciIraV09ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQ/b1siaW5uZXIiK2ldLmNhbGwodGhpcyk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5jc3MoYSxzKHRoaXMsdCkrInB4Iil9KX0sZS5mblsib3V0ZXIiK2ldPWZ1bmN0aW9uKHQsbil7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0P29bIm91dGVyIitpXS5jYWxsKHRoaXMsdCk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5jc3MoYSxzKHRoaXMsdCwhMCxuKSsicHgiKX0pfX0pLGUuZm4uYWRkQmFja3x8KGUuZm4uYWRkQmFjaz1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQobnVsbD09ZT90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9KSxlKCI8YT4iKS5kYXRhKCJhLWIiLCJhIikucmVtb3ZlRGF0YSgiYS1iIikuZGF0YSgiYS1iIikmJihlLmZuLnJlbW92ZURhdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGkpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QuY2FsbCh0aGlzLGUuY2FtZWxDYXNlKGkpKTp0LmNhbGwodGhpcyl9fShlLmZuLnJlbW92ZURhdGEpKSxlLnVpLmllPSEhL21zaWUgW1x3Ll0rLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSksZS5mbi5leHRlbmQoe2ZvY3VzOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpLHMpe3JldHVybiJudW1iZXIiPT10eXBlb2YgaT90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD10aGlzO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtlKHQpLmZvY3VzKCkscyYmcy5jYWxsKHQpfSxpKX0pOnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oZS5mbi5mb2N1cyksZGlzYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3ZhciBlPSJvbnNlbGVjdHN0YXJ0ImluIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpPyJzZWxlY3RzdGFydCI6Im1vdXNlZG93biI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYmluZChlKyIudWktZGlzYWJsZVNlbGVjdGlvbiIsZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSl9fSgpLGVuYWJsZVNlbGVjdGlvbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVuYmluZCgiLnVpLWRpc2FibGVTZWxlY3Rpb24iKX0sekluZGV4OmZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9PXQpcmV0dXJuIHRoaXMuY3NzKCJ6SW5kZXgiLHQpO2lmKHRoaXMubGVuZ3RoKWZvcih2YXIgaSxzLG49ZSh0aGlzWzBdKTtuLmxlbmd0aCYmblswXSE9PWRvY3VtZW50Oyl7aWYoaT1uLmNzcygicG9zaXRpb24iKSwoImFic29sdXRlIj09PWl8fCJyZWxhdGl2ZSI9PT1pfHwiZml4ZWQiPT09aSkmJihzPXBhcnNlSW50KG4uY3NzKCJ6SW5kZXgiKSwxMCksIWlzTmFOKHMpJiYwIT09cykpcmV0dXJuIHM7bj1uLnBhcmVudCgpfXJldHVybiAwfX0pLGUudWkucGx1Z2luPXthZGQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGE9ZS51aVt0XS5wcm90b3R5cGU7Zm9yKG4gaW4gcylhLnBsdWdpbnNbbl09YS5wbHVnaW5zW25dfHxbXSxhLnBsdWdpbnNbbl0ucHVzaChbaSxzW25dXSl9LGNhbGw6ZnVuY3Rpb24oZSx0LGkscyl7dmFyIG4sYT1lLnBsdWdpbnNbdF07aWYoYSYmKHN8fGUuZWxlbWVudFswXS5wYXJlbnROb2RlJiYxMSE9PWUuZWxlbWVudFswXS5wYXJlbnROb2RlLm5vZGVUeXBlKSlmb3Iobj0wO2EubGVuZ3RoPm47bisrKWUub3B0aW9uc1thW25dWzBdXSYmYVtuXVsxXS5hcHBseShlLmVsZW1lbnQsaSl9fTt2YXIgcj0wLGg9QXJyYXkucHJvdG90eXBlLnNsaWNlO2UuY2xlYW5EYXRhPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihpKXtmb3IodmFyIHMsbj0wO251bGwhPShzPWlbbl0pO24rKyl0cnl7ZShzKS50cmlnZ2VySGFuZGxlcigicmVtb3ZlIil9Y2F0Y2goYSl7fXQoaSl9fShlLmNsZWFuRGF0YSksZS53aWRnZXQ9ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGEsbyxyLGg9e30sbD10LnNwbGl0KCIuIilbMF07cmV0dXJuIHQ9dC5zcGxpdCgiLiIpWzFdLG49bCsiLSIrdCxzfHwocz1pLGk9ZS5XaWRnZXQpLGUuZXhwclsiOiJdW24udG9Mb3dlckNhc2UoKV09ZnVuY3Rpb24odCl7cmV0dXJuISFlLmRhdGEodCxuKX0sZVtsXT1lW2xdfHx7fSxhPWVbbF1bdF0sbz1lW2xdW3RdPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2NyZWF0ZVdpZGdldD8oYXJndW1lbnRzLmxlbmd0aCYmdGhpcy5fY3JlYXRlV2lkZ2V0KGUsdCksdm9pZCAwKTpuZXcgbyhlLHQpfSxlLmV4dGVuZChvLGEse3ZlcnNpb246cy52ZXJzaW9uLF9wcm90bzplLmV4dGVuZCh7fSxzKSxfY2hpbGRDb25zdHJ1Y3RvcnM6W119KSxyPW5ldyBpLHIub3B0aW9ucz1lLndpZGdldC5leHRlbmQoe30sci5vcHRpb25zKSxlLmVhY2gocyxmdW5jdGlvbih0LHMpe3JldHVybiBlLmlzRnVuY3Rpb24ocyk/KGhbdF09ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiBpLnByb3RvdHlwZVt0XS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG49ZnVuY3Rpb24oZSl7cmV0dXJuIGkucHJvdG90eXBlW3RdLmFwcGx5KHRoaXMsZSl9O3JldHVybiBmdW5jdGlvbigpe3ZhciB0LGk9dGhpcy5fc3VwZXIsYT10aGlzLl9zdXBlckFwcGx5O3JldHVybiB0aGlzLl9zdXBlcj1lLHRoaXMuX3N1cGVyQXBwbHk9bix0PXMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX3N1cGVyPWksdGhpcy5fc3VwZXJBcHBseT1hLHR9fSgpLHZvaWQgMCk6KGhbdF09cyx2b2lkIDApfSksby5wcm90b3R5cGU9ZS53aWRnZXQuZXh0ZW5kKHIse3dpZGdldEV2ZW50UHJlZml4OmE/ci53aWRnZXRFdmVudFByZWZpeHx8dDp0fSxoLHtjb25zdHJ1Y3RvcjpvLG5hbWVzcGFjZTpsLHdpZGdldE5hbWU6dCx3aWRnZXRGdWxsTmFtZTpufSksYT8oZS5lYWNoKGEuX2NoaWxkQ29uc3RydWN0b3JzLGZ1bmN0aW9uKHQsaSl7dmFyIHM9aS5wcm90b3R5cGU7ZS53aWRnZXQocy5uYW1lc3BhY2UrIi4iK3Mud2lkZ2V0TmFtZSxvLGkuX3Byb3RvKX0pLGRlbGV0ZSBhLl9jaGlsZENvbnN0cnVjdG9ycyk6aS5fY2hpbGRDb25zdHJ1Y3RvcnMucHVzaChvKSxlLndpZGdldC5icmlkZ2UodCxvKSxvfSxlLndpZGdldC5leHRlbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBpLHMsbj1oLmNhbGwoYXJndW1lbnRzLDEpLGE9MCxvPW4ubGVuZ3RoO28+YTthKyspZm9yKGkgaW4gblthXSlzPW5bYV1baV0sblthXS5oYXNPd25Qcm9wZXJ0eShpKSYmdm9pZCAwIT09cyYmKHRbaV09ZS5pc1BsYWluT2JqZWN0KHMpP2UuaXNQbGFpbk9iamVjdCh0W2ldKT9lLndpZGdldC5leHRlbmQoe30sdFtpXSxzKTplLndpZGdldC5leHRlbmQoe30scyk6cyk7cmV0dXJuIHR9LGUud2lkZ2V0LmJyaWRnZT1mdW5jdGlvbih0LGkpe3ZhciBzPWkucHJvdG90eXBlLndpZGdldEZ1bGxOYW1lfHx0O2UuZm5bdF09ZnVuY3Rpb24obil7dmFyIGE9InN0cmluZyI9PXR5cGVvZiBuLG89aC5jYWxsKGFyZ3VtZW50cywxKSxyPXRoaXM7cmV0dXJuIG49IWEmJm8ubGVuZ3RoP2Uud2lkZ2V0LmV4dGVuZC5hcHBseShudWxsLFtuXS5jb25jYXQobykpOm4sYT90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgaSxhPWUuZGF0YSh0aGlzLHMpO3JldHVybiJpbnN0YW5jZSI9PT1uPyhyPWEsITEpOmE/ZS5pc0Z1bmN0aW9uKGFbbl0pJiYiXyIhPT1uLmNoYXJBdCgwKT8oaT1hW25dLmFwcGx5KGEsbyksaSE9PWEmJnZvaWQgMCE9PWk/KHI9aSYmaS5qcXVlcnk/ci5wdXNoU3RhY2soaS5nZXQoKSk6aSwhMSk6dm9pZCAwKTplLmVycm9yKCJubyBzdWNoIG1ldGhvZCAnIituKyInIGZvciAiK3QrIiB3aWRnZXQgaW5zdGFuY2UiKTplLmVycm9yKCJjYW5ub3QgY2FsbCBtZXRob2RzIG9uICIrdCsiIHByaW9yIHRvIGluaXRpYWxpemF0aW9uOyAiKyJhdHRlbXB0ZWQgdG8gY2FsbCBtZXRob2QgJyIrbisiJyIpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZS5kYXRhKHRoaXMscyk7dD8odC5vcHRpb24obnx8e30pLHQuX2luaXQmJnQuX2luaXQoKSk6ZS5kYXRhKHRoaXMscyxuZXcgaShuLHRoaXMpKX0pLHJ9fSxlLldpZGdldD1mdW5jdGlvbigpe30sZS5XaWRnZXQuX2NoaWxkQ29uc3RydWN0b3JzPVtdLGUuV2lkZ2V0LnByb3RvdHlwZT17d2lkZ2V0TmFtZToid2lkZ2V0Iix3aWRnZXRFdmVudFByZWZpeDoiIixkZWZhdWx0RWxlbWVudDoiPGRpdj4iLG9wdGlvbnM6e2Rpc2FibGVkOiExLGNyZWF0ZTpudWxsfSxfY3JlYXRlV2lkZ2V0OmZ1bmN0aW9uKHQsaSl7aT1lKGl8fHRoaXMuZGVmYXVsdEVsZW1lbnR8fHRoaXMpWzBdLHRoaXMuZWxlbWVudD1lKGkpLHRoaXMudXVpZD1yKyssdGhpcy5ldmVudE5hbWVzcGFjZT0iLiIrdGhpcy53aWRnZXROYW1lK3RoaXMudXVpZCx0aGlzLm9wdGlvbnM9ZS53aWRnZXQuZXh0ZW5kKHt9LHRoaXMub3B0aW9ucyx0aGlzLl9nZXRDcmVhdGVPcHRpb25zKCksdCksdGhpcy5iaW5kaW5ncz1lKCksdGhpcy5ob3ZlcmFibGU9ZSgpLHRoaXMuZm9jdXNhYmxlPWUoKSxpIT09dGhpcyYmKGUuZGF0YShpLHRoaXMud2lkZ2V0RnVsbE5hbWUsdGhpcyksdGhpcy5fb24oITAsdGhpcy5lbGVtZW50LHtyZW1vdmU6ZnVuY3Rpb24oZSl7ZS50YXJnZXQ9PT1pJiZ0aGlzLmRlc3Ryb3koKX19KSx0aGlzLmRvY3VtZW50PWUoaS5zdHlsZT9pLm93bmVyRG9jdW1lbnQ6aS5kb2N1bWVudHx8aSksdGhpcy53aW5kb3c9ZSh0aGlzLmRvY3VtZW50WzBdLmRlZmF1bHRWaWV3fHx0aGlzLmRvY3VtZW50WzBdLnBhcmVudFdpbmRvdykpLHRoaXMuX2NyZWF0ZSgpLHRoaXMuX3RyaWdnZXIoImNyZWF0ZSIsbnVsbCx0aGlzLl9nZXRDcmVhdGVFdmVudERhdGEoKSksdGhpcy5faW5pdCgpfSxfZ2V0Q3JlYXRlT3B0aW9uczplLm5vb3AsX2dldENyZWF0ZUV2ZW50RGF0YTplLm5vb3AsX2NyZWF0ZTplLm5vb3AsX2luaXQ6ZS5ub29wLGRlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9kZXN0cm95KCksdGhpcy5lbGVtZW50LnVuYmluZCh0aGlzLmV2ZW50TmFtZXNwYWNlKS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0RnVsbE5hbWUpLnJlbW92ZURhdGEoZS5jYW1lbENhc2UodGhpcy53aWRnZXRGdWxsTmFtZSkpLHRoaXMud2lkZ2V0KCkudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVDbGFzcyh0aGlzLndpZGdldEZ1bGxOYW1lKyItZGlzYWJsZWQgIisidWktc3RhdGUtZGlzYWJsZWQiKSx0aGlzLmJpbmRpbmdzLnVuYmluZCh0aGlzLmV2ZW50TmFtZXNwYWNlKSx0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzLmZvY3VzYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX0sX2Rlc3Ryb3k6ZS5ub29wLHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnR9LG9wdGlvbjpmdW5jdGlvbih0LGkpe3ZhciBzLG4sYSxvPXQ7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGUud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMpO2lmKCJzdHJpbmciPT10eXBlb2YgdClpZihvPXt9LHM9dC5zcGxpdCgiLiIpLHQ9cy5zaGlmdCgpLHMubGVuZ3RoKXtmb3Iobj1vW3RdPWUud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnNbdF0pLGE9MDtzLmxlbmd0aC0xPmE7YSsrKW5bc1thXV09bltzW2FdXXx8e30sbj1uW3NbYV1dO2lmKHQ9cy5wb3AoKSwxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdm9pZCAwPT09blt0XT9udWxsOm5bdF07blt0XT1pfWVsc2V7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHZvaWQgMD09PXRoaXMub3B0aW9uc1t0XT9udWxsOnRoaXMub3B0aW9uc1t0XTtvW3RdPWl9cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMobyksdGhpc30sX3NldE9wdGlvbnM6ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQgaW4gZSl0aGlzLl9zZXRPcHRpb24odCxlW3RdKTtyZXR1cm4gdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9wdGlvbnNbZV09dCwiZGlzYWJsZWQiPT09ZSYmKHRoaXMud2lkZ2V0KCkudG9nZ2xlQ2xhc3ModGhpcy53aWRnZXRGdWxsTmFtZSsiLWRpc2FibGVkIiwhIXQpLHQmJih0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzLmZvY3VzYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKSkpLHRoaXN9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXRPcHRpb25zKHtkaXNhYmxlZDohMX0pfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbnMoe2Rpc2FibGVkOiEwfSl9LF9vbjpmdW5jdGlvbih0LGkscyl7dmFyIG4sYT10aGlzOyJib29sZWFuIiE9dHlwZW9mIHQmJihzPWksaT10LHQ9ITEpLHM/KGk9bj1lKGkpLHRoaXMuYmluZGluZ3M9dGhpcy5iaW5kaW5ncy5hZGQoaSkpOihzPWksaT10aGlzLmVsZW1lbnQsbj10aGlzLndpZGdldCgpKSxlLmVhY2gocyxmdW5jdGlvbihzLG8pe2Z1bmN0aW9uIHIoKXtyZXR1cm4gdHx8YS5vcHRpb25zLmRpc2FibGVkIT09ITAmJiFlKHRoaXMpLmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpPygic3RyaW5nIj09dHlwZW9mIG8/YVtvXTpvKS5hcHBseShhLGFyZ3VtZW50cyk6dm9pZCAwfSJzdHJpbmciIT10eXBlb2YgbyYmKHIuZ3VpZD1vLmd1aWQ9by5ndWlkfHxyLmd1aWR8fGUuZ3VpZCsrKTt2YXIgaD1zLm1hdGNoKC9eKFtcdzotXSopXHMqKC4qKSQvKSxsPWhbMV0rYS5ldmVudE5hbWVzcGFjZSx1PWhbMl07dT9uLmRlbGVnYXRlKHUsbCxyKTppLmJpbmQobCxyKX0pfSxfb2ZmOmZ1bmN0aW9uKGUsdCl7dD0odHx8IiIpLnNwbGl0KCIgIikuam9pbih0aGlzLmV2ZW50TmFtZXNwYWNlKyIgIikrdGhpcy5ldmVudE5hbWVzcGFjZSxlLnVuYmluZCh0KS51bmRlbGVnYXRlKHQpfSxfZGVsYXk6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBpKCl7cmV0dXJuKCJzdHJpbmciPT10eXBlb2YgZT9zW2VdOmUpLmFwcGx5KHMsYXJndW1lbnRzKX12YXIgcz10aGlzO3JldHVybiBzZXRUaW1lb3V0KGksdHx8MCl9LF9ob3ZlcmFibGU6ZnVuY3Rpb24odCl7dGhpcy5ob3ZlcmFibGU9dGhpcy5ob3ZlcmFibGUuYWRkKHQpLHRoaXMuX29uKHQse21vdXNlZW50ZXI6ZnVuY3Rpb24odCl7ZSh0LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfSxtb3VzZWxlYXZlOmZ1bmN0aW9uKHQpe2UodC5jdXJyZW50VGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKX19KX0sX2ZvY3VzYWJsZTpmdW5jdGlvbih0KXt0aGlzLmZvY3VzYWJsZT10aGlzLmZvY3VzYWJsZS5hZGQodCksdGhpcy5fb24odCx7Zm9jdXNpbjpmdW5jdGlvbih0KXtlKHQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9LGZvY3Vzb3V0OmZ1bmN0aW9uKHQpe2UodC5jdXJyZW50VGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX19KX0sX3RyaWdnZXI6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGEsbz10aGlzLm9wdGlvbnNbdF07aWYocz1zfHx7fSxpPWUuRXZlbnQoaSksaS50eXBlPSh0PT09dGhpcy53aWRnZXRFdmVudFByZWZpeD90OnRoaXMud2lkZ2V0RXZlbnRQcmVmaXgrdCkudG9Mb3dlckNhc2UoKSxpLnRhcmdldD10aGlzLmVsZW1lbnRbMF0sYT1pLm9yaWdpbmFsRXZlbnQpZm9yKG4gaW4gYSluIGluIGl8fChpW25dPWFbbl0pO3JldHVybiB0aGlzLmVsZW1lbnQudHJpZ2dlcihpLHMpLCEoZS5pc0Z1bmN0aW9uKG8pJiZvLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbaV0uY29uY2F0KHMpKT09PSExfHxpLmlzRGVmYXVsdFByZXZlbnRlZCgpKX19LGUuZWFjaCh7c2hvdzoiZmFkZUluIixoaWRlOiJmYWRlT3V0In0sZnVuY3Rpb24odCxpKXtlLldpZGdldC5wcm90b3R5cGVbIl8iK3RdPWZ1bmN0aW9uKHMsbixhKXsic3RyaW5nIj09dHlwZW9mIG4mJihuPXtlZmZlY3Q6bn0pO3ZhciBvLHI9bj9uPT09ITB8fCJudW1iZXIiPT10eXBlb2Ygbj9pOm4uZWZmZWN0fHxpOnQ7bj1ufHx7fSwibnVtYmVyIj09dHlwZW9mIG4mJihuPXtkdXJhdGlvbjpufSksbz0hZS5pc0VtcHR5T2JqZWN0KG4pLG4uY29tcGxldGU9YSxuLmRlbGF5JiZzLmRlbGF5KG4uZGVsYXkpLG8mJmUuZWZmZWN0cyYmZS5lZmZlY3RzLmVmZmVjdFtyXT9zW3RdKG4pOnIhPT10JiZzW3JdP3Nbcl0obi5kdXJhdGlvbixuLmVhc2luZyxhKTpzLnF1ZXVlKGZ1bmN0aW9uKGkpe2UodGhpcylbdF0oKSxhJiZhLmNhbGwoc1swXSksaSgpfSl9fSksZS53aWRnZXQ7dmFyIGw9ITE7ZShkb2N1bWVudCkubW91c2V1cChmdW5jdGlvbigpe2w9ITF9KSxlLndpZGdldCgidWkubW91c2UiLHt2ZXJzaW9uOiIxLjExLjAiLG9wdGlvbnM6e2NhbmNlbDoiaW5wdXQsdGV4dGFyZWEsYnV0dG9uLHNlbGVjdCxvcHRpb24iLGRpc3RhbmNlOjEsZGVsYXk6MH0sX21vdXNlSW5pdDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5lbGVtZW50LmJpbmQoIm1vdXNlZG93bi4iK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbihlKXtyZXR1cm4gdC5fbW91c2VEb3duKGUpfSkuYmluZCgiY2xpY2suIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24oaSl7cmV0dXJuITA9PT1lLmRhdGEoaS50YXJnZXQsdC53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKT8oZS5yZW1vdmVEYXRhKGkudGFyZ2V0LHQud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IiksaS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSwhMSk6dm9pZCAwfSksdGhpcy5zdGFydGVkPSExfSxfbW91c2VEZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnVuYmluZCgiLiIrdGhpcy53aWRnZXROYW1lKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSYmdGhpcy5kb2N1bWVudC51bmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkudW5iaW5kKCJtb3VzZXVwLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlVXBEZWxlZ2F0ZSl9LF9tb3VzZURvd246ZnVuY3Rpb24odCl7aWYoIWwpe3RoaXMuX21vdXNlU3RhcnRlZCYmdGhpcy5fbW91c2VVcCh0KSx0aGlzLl9tb3VzZURvd25FdmVudD10O3ZhciBpPXRoaXMscz0xPT09dC53aGljaCxuPSJzdHJpbmciPT10eXBlb2YgdGhpcy5vcHRpb25zLmNhbmNlbCYmdC50YXJnZXQubm9kZU5hbWU/ZSh0LnRhcmdldCkuY2xvc2VzdCh0aGlzLm9wdGlvbnMuY2FuY2VsKS5sZW5ndGg6ITE7cmV0dXJuIHMmJiFuJiZ0aGlzLl9tb3VzZUNhcHR1cmUodCk/KHRoaXMubW91c2VEZWxheU1ldD0hdGhpcy5vcHRpb25zLmRlbGF5LHRoaXMubW91c2VEZWxheU1ldHx8KHRoaXMuX21vdXNlRGVsYXlUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aS5tb3VzZURlbGF5TWV0PSEwfSx0aGlzLm9wdGlvbnMuZGVsYXkpKSx0aGlzLl9tb3VzZURpc3RhbmNlTWV0KHQpJiZ0aGlzLl9tb3VzZURlbGF5TWV0KHQpJiYodGhpcy5fbW91c2VTdGFydGVkPXRoaXMuX21vdXNlU3RhcnQodCkhPT0hMSwhdGhpcy5fbW91c2VTdGFydGVkKT8odC5wcmV2ZW50RGVmYXVsdCgpLCEwKTooITA9PT1lLmRhdGEodC50YXJnZXQsdGhpcy53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKSYmZS5yZW1vdmVEYXRhKHQudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IiksdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGkuX21vdXNlTW92ZShlKX0sdGhpcy5fbW91c2VVcERlbGVnYXRlPWZ1bmN0aW9uKGUpe3JldHVybiBpLl9tb3VzZVVwKGUpfSx0aGlzLmRvY3VtZW50LmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkuYmluZCgibW91c2V1cC4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLHQucHJldmVudERlZmF1bHQoKSxsPSEwLCEwKSk6ITB9fSxfbW91c2VNb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiBlLnVpLmllJiYoIWRvY3VtZW50LmRvY3VtZW50TW9kZXx8OT5kb2N1bWVudC5kb2N1bWVudE1vZGUpJiYhdC5idXR0b24/dGhpcy5fbW91c2VVcCh0KTp0LndoaWNoP3RoaXMuX21vdXNlU3RhcnRlZD8odGhpcy5fbW91c2VEcmFnKHQpLHQucHJldmVudERlZmF1bHQoKSk6KHRoaXMuX21vdXNlRGlzdGFuY2VNZXQodCkmJnRoaXMuX21vdXNlRGVsYXlNZXQodCkmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9dGhpcy5fbW91c2VTdGFydCh0aGlzLl9tb3VzZURvd25FdmVudCx0KSE9PSExLHRoaXMuX21vdXNlU3RhcnRlZD90aGlzLl9tb3VzZURyYWcodCk6dGhpcy5fbW91c2VVcCh0KSksIXRoaXMuX21vdXNlU3RhcnRlZCk6dGhpcy5fbW91c2VVcCh0KX0sX21vdXNlVXA6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZG9jdW1lbnQudW5iaW5kKCJtb3VzZW1vdmUuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLnVuYmluZCgibW91c2V1cC4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLHRoaXMuX21vdXNlU3RhcnRlZCYmKHRoaXMuX21vdXNlU3RhcnRlZD0hMSx0LnRhcmdldD09PXRoaXMuX21vdXNlRG93bkV2ZW50LnRhcmdldCYmZS5kYXRhKHQudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IiwhMCksdGhpcy5fbW91c2VTdG9wKHQpKSxsPSExLCExfSxfbW91c2VEaXN0YW5jZU1ldDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnModGhpcy5fbW91c2VEb3duRXZlbnQucGFnZVgtZS5wYWdlWCksTWF0aC5hYnModGhpcy5fbW91c2VEb3duRXZlbnQucGFnZVktZS5wYWdlWSkpPj10aGlzLm9wdGlvbnMuZGlzdGFuY2V9LF9tb3VzZURlbGF5TWV0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW91c2VEZWxheU1ldH0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oKXt9LF9tb3VzZURyYWc6ZnVuY3Rpb24oKXt9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oKXt9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oKXtyZXR1cm4hMH19KSxmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSx0LGkpe3JldHVybltwYXJzZUZsb2F0KGVbMF0pKihwLnRlc3QoZVswXSk/dC8xMDA6MSkscGFyc2VGbG9hdChlWzFdKSoocC50ZXN0KGVbMV0pP2kvMTAwOjEpXX1mdW5jdGlvbiBpKHQsaSl7cmV0dXJuIHBhcnNlSW50KGUuY3NzKHQsaSksMTApfHwwfWZ1bmN0aW9uIHModCl7dmFyIGk9dFswXTtyZXR1cm4gOT09PWkubm9kZVR5cGU/e3dpZHRoOnQud2lkdGgoKSxoZWlnaHQ6dC5oZWlnaHQoKSxvZmZzZXQ6e3RvcDowLGxlZnQ6MH19OmUuaXNXaW5kb3coaSk/e3dpZHRoOnQud2lkdGgoKSxoZWlnaHQ6dC5oZWlnaHQoKSxvZmZzZXQ6e3RvcDp0LnNjcm9sbFRvcCgpLGxlZnQ6dC5zY3JvbGxMZWZ0KCl9fTppLnByZXZlbnREZWZhdWx0P3t3aWR0aDowLGhlaWdodDowLG9mZnNldDp7dG9wOmkucGFnZVksbGVmdDppLnBhZ2VYfX06e3dpZHRoOnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0Lm91dGVySGVpZ2h0KCksb2Zmc2V0OnQub2Zmc2V0KCl9fWUudWk9ZS51aXx8e307dmFyIG4sYSxvPU1hdGgubWF4LHI9TWF0aC5hYnMsaD1NYXRoLnJvdW5kLGw9L2xlZnR8Y2VudGVyfHJpZ2h0Lyx1PS90b3B8Y2VudGVyfGJvdHRvbS8sZD0vW1wrXC1dXGQrKFwuW1xkXSspPyU/LyxjPS9eXHcrLyxwPS8lJC8sZj1lLmZuLnBvc2l0aW9uO2UucG9zaXRpb249e3Njcm9sbGJhcldpZHRoOmZ1bmN0aW9uKCl7aWYodm9pZCAwIT09bilyZXR1cm4gbjt2YXIgdCxpLHM9ZSgiPGRpdiBzdHlsZT0nZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo1MHB4O2hlaWdodDo1MHB4O292ZXJmbG93OmhpZGRlbjsnPjxkaXYgc3R5bGU9J2hlaWdodDoxMDBweDt3aWR0aDphdXRvOyc+PC9kaXY+PC9kaXY+IiksYT1zLmNoaWxkcmVuKClbMF07cmV0dXJuIGUoImJvZHkiKS5hcHBlbmQocyksdD1hLm9mZnNldFdpZHRoLHMuY3NzKCJvdmVyZmxvdyIsInNjcm9sbCIpLGk9YS5vZmZzZXRXaWR0aCx0PT09aSYmKGk9c1swXS5jbGllbnRXaWR0aCkscy5yZW1vdmUoKSxuPXQtaX0sZ2V0U2Nyb2xsSW5mbzpmdW5jdGlvbih0KXt2YXIgaT10LmlzV2luZG93fHx0LmlzRG9jdW1lbnQ/IiI6dC5lbGVtZW50LmNzcygib3ZlcmZsb3cteCIpLHM9dC5pc1dpbmRvd3x8dC5pc0RvY3VtZW50PyIiOnQuZWxlbWVudC5jc3MoIm92ZXJmbG93LXkiKSxuPSJzY3JvbGwiPT09aXx8ImF1dG8iPT09aSYmdC53aWR0aDx0LmVsZW1lbnRbMF0uc2Nyb2xsV2lkdGgsYT0ic2Nyb2xsIj09PXN8fCJhdXRvIj09PXMmJnQuaGVpZ2h0PHQuZWxlbWVudFswXS5zY3JvbGxIZWlnaHQ7cmV0dXJue3dpZHRoOmE/ZS5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpOjAsaGVpZ2h0Om4/ZS5wb3NpdGlvbi5zY3JvbGxiYXJXaWR0aCgpOjB9fSxnZXRXaXRoaW5JbmZvOmZ1bmN0aW9uKHQpe3ZhciBpPWUodHx8d2luZG93KSxzPWUuaXNXaW5kb3coaVswXSksbj0hIWlbMF0mJjk9PT1pWzBdLm5vZGVUeXBlO3JldHVybntlbGVtZW50OmksaXNXaW5kb3c6cyxpc0RvY3VtZW50Om4sb2Zmc2V0Omkub2Zmc2V0KCl8fHtsZWZ0OjAsdG9wOjB9LHNjcm9sbExlZnQ6aS5zY3JvbGxMZWZ0KCksc2Nyb2xsVG9wOmkuc2Nyb2xsVG9wKCksd2lkdGg6cz9pLndpZHRoKCk6aS5vdXRlcldpZHRoKCksaGVpZ2h0OnM/aS5oZWlnaHQoKTppLm91dGVySGVpZ2h0KCl9fX0sZS5mbi5wb3NpdGlvbj1mdW5jdGlvbihuKXtpZighbnx8IW4ub2YpcmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpO249ZS5leHRlbmQoe30sbik7dmFyIHAsbSxnLHYseSxiLF89ZShuLm9mKSx4PWUucG9zaXRpb24uZ2V0V2l0aGluSW5mbyhuLndpdGhpbiksdz1lLnBvc2l0aW9uLmdldFNjcm9sbEluZm8oeCksaz0obi5jb2xsaXNpb258fCJmbGlwIikuc3BsaXQoIiAiKSxUPXt9O3JldHVybiBiPXMoXyksX1swXS5wcmV2ZW50RGVmYXVsdCYmKG4uYXQ9ImxlZnQgdG9wIiksbT1iLndpZHRoLGc9Yi5oZWlnaHQsdj1iLm9mZnNldCx5PWUuZXh0ZW5kKHt9LHYpLGUuZWFjaChbIm15IiwiYXQiXSxmdW5jdGlvbigpe3ZhciBlLHQsaT0oblt0aGlzXXx8IiIpLnNwbGl0KCIgIik7MT09PWkubGVuZ3RoJiYoaT1sLnRlc3QoaVswXSk/aS5jb25jYXQoWyJjZW50ZXIiXSk6dS50ZXN0KGlbMF0pP1siY2VudGVyIl0uY29uY2F0KGkpOlsiY2VudGVyIiwiY2VudGVyIl0pLGlbMF09bC50ZXN0KGlbMF0pP2lbMF06ImNlbnRlciIsaVsxXT11LnRlc3QoaVsxXSk/aVsxXToiY2VudGVyIixlPWQuZXhlYyhpWzBdKSx0PWQuZXhlYyhpWzFdKSxUW3RoaXNdPVtlP2VbMF06MCx0P3RbMF06MF0sblt0aGlzXT1bYy5leGVjKGlbMF0pWzBdLGMuZXhlYyhpWzFdKVswXV19KSwxPT09ay5sZW5ndGgmJihrWzFdPWtbMF0pLCJyaWdodCI9PT1uLmF0WzBdP3kubGVmdCs9bToiY2VudGVyIj09PW4uYXRbMF0mJih5LmxlZnQrPW0vMiksImJvdHRvbSI9PT1uLmF0WzFdP3kudG9wKz1nOiJjZW50ZXIiPT09bi5hdFsxXSYmKHkudG9wKz1nLzIpLHA9dChULmF0LG0sZykseS5sZWZ0Kz1wWzBdLHkudG9wKz1wWzFdLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBzLGwsdT1lKHRoaXMpLGQ9dS5vdXRlcldpZHRoKCksYz11Lm91dGVySGVpZ2h0KCksZj1pKHRoaXMsIm1hcmdpbkxlZnQiKSxiPWkodGhpcywibWFyZ2luVG9wIiksRD1kK2YraSh0aGlzLCJtYXJnaW5SaWdodCIpK3cud2lkdGgsUz1jK2IraSh0aGlzLCJtYXJnaW5Cb3R0b20iKSt3LmhlaWdodCxOPWUuZXh0ZW5kKHt9LHkpLE09dChULm15LHUub3V0ZXJXaWR0aCgpLHUub3V0ZXJIZWlnaHQoKSk7InJpZ2h0Ij09PW4ubXlbMF0/Ti5sZWZ0LT1kOiJjZW50ZXIiPT09bi5teVswXSYmKE4ubGVmdC09ZC8yKSwiYm90dG9tIj09PW4ubXlbMV0/Ti50b3AtPWM6ImNlbnRlciI9PT1uLm15WzFdJiYoTi50b3AtPWMvMiksTi5sZWZ0Kz1NWzBdLE4udG9wKz1NWzFdLGF8fChOLmxlZnQ9aChOLmxlZnQpLE4udG9wPWgoTi50b3ApKSxzPXttYXJnaW5MZWZ0OmYsbWFyZ2luVG9wOmJ9LGUuZWFjaChbImxlZnQiLCJ0b3AiXSxmdW5jdGlvbih0LGkpe2UudWkucG9zaXRpb25ba1t0XV0mJmUudWkucG9zaXRpb25ba1t0XV1baV0oTix7dGFyZ2V0V2lkdGg6bSx0YXJnZXRIZWlnaHQ6ZyxlbGVtV2lkdGg6ZCxlbGVtSGVpZ2h0OmMsY29sbGlzaW9uUG9zaXRpb246cyxjb2xsaXNpb25XaWR0aDpELGNvbGxpc2lvbkhlaWdodDpTLG9mZnNldDpbcFswXStNWzBdLHBbMV0rTVsxXV0sbXk6bi5teSxhdDpuLmF0LHdpdGhpbjp4LGVsZW06dX0pfSksbi51c2luZyYmKGw9ZnVuY3Rpb24oZSl7dmFyIHQ9di5sZWZ0LU4ubGVmdCxpPXQrbS1kLHM9di50b3AtTi50b3AsYT1zK2ctYyxoPXt0YXJnZXQ6e2VsZW1lbnQ6XyxsZWZ0OnYubGVmdCx0b3A6di50b3Asd2lkdGg6bSxoZWlnaHQ6Z30sZWxlbWVudDp7ZWxlbWVudDp1LGxlZnQ6Ti5sZWZ0LHRvcDpOLnRvcCx3aWR0aDpkLGhlaWdodDpjfSxob3Jpem9udGFsOjA+aT8ibGVmdCI6dD4wPyJyaWdodCI6ImNlbnRlciIsdmVydGljYWw6MD5hPyJ0b3AiOnM+MD8iYm90dG9tIjoibWlkZGxlIn07ZD5tJiZtPnIodCtpKSYmKGguaG9yaXpvbnRhbD0iY2VudGVyIiksYz5nJiZnPnIocythKSYmKGgudmVydGljYWw9Im1pZGRsZSIpLGguaW1wb3J0YW50PW8ocih0KSxyKGkpKT5vKHIocykscihhKSk/Imhvcml6b250YWwiOiJ2ZXJ0aWNhbCIsbi51c2luZy5jYWxsKHRoaXMsZSxoKX0pLHUub2Zmc2V0KGUuZXh0ZW5kKE4se3VzaW5nOmx9KSl9KX0sZS51aS5wb3NpdGlvbj17Zml0OntsZWZ0OmZ1bmN0aW9uKGUsdCl7dmFyIGkscz10LndpdGhpbixuPXMuaXNXaW5kb3c/cy5zY3JvbGxMZWZ0OnMub2Zmc2V0LmxlZnQsYT1zLndpZHRoLHI9ZS5sZWZ0LXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCxoPW4tcixsPXIrdC5jb2xsaXNpb25XaWR0aC1hLW47dC5jb2xsaXNpb25XaWR0aD5hP2g+MCYmMD49bD8oaT1lLmxlZnQraCt0LmNvbGxpc2lvbldpZHRoLWEtbixlLmxlZnQrPWgtaSk6ZS5sZWZ0PWw+MCYmMD49aD9uOmg+bD9uK2EtdC5jb2xsaXNpb25XaWR0aDpuOmg+MD9lLmxlZnQrPWg6bD4wP2UubGVmdC09bDplLmxlZnQ9byhlLmxlZnQtcixlLmxlZnQpfSx0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzPXQud2l0aGluLG49cy5pc1dpbmRvdz9zLnNjcm9sbFRvcDpzLm9mZnNldC50b3AsYT10LndpdGhpbi5oZWlnaHQscj1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxoPW4tcixsPXIrdC5jb2xsaXNpb25IZWlnaHQtYS1uO3QuY29sbGlzaW9uSGVpZ2h0PmE/aD4wJiYwPj1sPyhpPWUudG9wK2grdC5jb2xsaXNpb25IZWlnaHQtYS1uLGUudG9wKz1oLWkpOmUudG9wPWw+MCYmMD49aD9uOmg+bD9uK2EtdC5jb2xsaXNpb25IZWlnaHQ6bjpoPjA/ZS50b3ArPWg6bD4wP2UudG9wLT1sOmUudG9wPW8oZS50b3AtcixlLnRvcCl9fSxmbGlwOntsZWZ0OmZ1bmN0aW9uKGUsdCl7dmFyIGkscyxuPXQud2l0aGluLGE9bi5vZmZzZXQubGVmdCtuLnNjcm9sbExlZnQsbz1uLndpZHRoLGg9bi5pc1dpbmRvdz9uLnNjcm9sbExlZnQ6bi5vZmZzZXQubGVmdCxsPWUubGVmdC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsdT1sLWgsZD1sK3QuY29sbGlzaW9uV2lkdGgtby1oLGM9ImxlZnQiPT09dC5teVswXT8tdC5lbGVtV2lkdGg6InJpZ2h0Ij09PXQubXlbMF0/dC5lbGVtV2lkdGg6MCxwPSJsZWZ0Ij09PXQuYXRbMF0/dC50YXJnZXRXaWR0aDoicmlnaHQiPT09dC5hdFswXT8tdC50YXJnZXRXaWR0aDowLGY9LTIqdC5vZmZzZXRbMF07MD51PyhpPWUubGVmdCtjK3ArZit0LmNvbGxpc2lvbldpZHRoLW8tYSwoMD5pfHxyKHUpPmkpJiYoZS5sZWZ0Kz1jK3ArZikpOmQ+MCYmKHM9ZS5sZWZ0LXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCtjK3ArZi1oLChzPjB8fGQ+cihzKSkmJihlLmxlZnQrPWMrcCtmKSl9LHRvcDpmdW5jdGlvbihlLHQpe3ZhciBpLHMsbj10LndpdGhpbixhPW4ub2Zmc2V0LnRvcCtuLnNjcm9sbFRvcCxvPW4uaGVpZ2h0LGg9bi5pc1dpbmRvdz9uLnNjcm9sbFRvcDpuLm9mZnNldC50b3AsbD1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCx1PWwtaCxkPWwrdC5jb2xsaXNpb25IZWlnaHQtby1oLGM9InRvcCI9PT10Lm15WzFdLHA9Yz8tdC5lbGVtSGVpZ2h0OiJib3R0b20iPT09dC5teVsxXT90LmVsZW1IZWlnaHQ6MCxmPSJ0b3AiPT09dC5hdFsxXT90LnRhcmdldEhlaWdodDoiYm90dG9tIj09PXQuYXRbMV0/LXQudGFyZ2V0SGVpZ2h0OjAsbT0tMip0Lm9mZnNldFsxXTswPnU/KHM9ZS50b3ArcCtmK20rdC5jb2xsaXNpb25IZWlnaHQtby1hLGUudG9wK3ArZittPnUmJigwPnN8fHIodSk+cykmJihlLnRvcCs9cCtmK20pKTpkPjAmJihpPWUudG9wLXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wK3ArZittLWgsZS50b3ArcCtmK20+ZCYmKGk+MHx8ZD5yKGkpKSYmKGUudG9wKz1wK2YrbSkpfX0sZmxpcGZpdDp7bGVmdDpmdW5jdGlvbigpe2UudWkucG9zaXRpb24uZmxpcC5sZWZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnVpLnBvc2l0aW9uLmZpdC5sZWZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdG9wOmZ1bmN0aW9uKCl7ZS51aS5wb3NpdGlvbi5mbGlwLnRvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS51aS5wb3NpdGlvbi5maXQudG9wLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSxmdW5jdGlvbigpe3ZhciB0LGkscyxuLG8scj1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHI/ImRpdiI6ImJvZHkiKSxzPXt2aXNpYmlsaXR5OiJoaWRkZW4iLHdpZHRoOjAsaGVpZ2h0OjAsYm9yZGVyOjAsbWFyZ2luOjAsYmFja2dyb3VuZDoibm9uZSJ9LHImJmUuZXh0ZW5kKHMse3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiLTEwMDBweCIsdG9wOiItMTAwMHB4In0pO2ZvcihvIGluIHMpdC5zdHlsZVtvXT1zW29dO3QuYXBwZW5kQ2hpbGQoaCksaT1yfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsaS5pbnNlcnRCZWZvcmUodCxpLmZpcnN0Q2hpbGQpLGguc3R5bGUuY3NzVGV4dD0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAxMC43NDMyMjIycHg7IixuPWUoaCkub2Zmc2V0KCkubGVmdCxhPW4+MTAmJjExPm4sdC5pbm5lckhUTUw9IiIsaS5yZW1vdmVDaGlsZCh0KX0oKX0oKSxlLnVpLnBvc2l0aW9uLGUud2lkZ2V0KCJ1aS5kcmFnZ2FibGUiLGUudWkubW91c2Use3ZlcnNpb246IjEuMTEuMCIsd2lkZ2V0RXZlbnRQcmVmaXg6ImRyYWciLG9wdGlvbnM6e2FkZENsYXNzZXM6ITAsYXBwZW5kVG86InBhcmVudCIsYXhpczohMSxjb25uZWN0VG9Tb3J0YWJsZTohMSxjb250YWlubWVudDohMSxjdXJzb3I6ImF1dG8iLGN1cnNvckF0OiExLGdyaWQ6ITEsaGFuZGxlOiExLGhlbHBlcjoib3JpZ2luYWwiLGlmcmFtZUZpeDohMSxvcGFjaXR5OiExLHJlZnJlc2hQb3NpdGlvbnM6ITEscmV2ZXJ0OiExLHJldmVydER1cmF0aW9uOjUwMCxzY29wZToiZGVmYXVsdCIsc2Nyb2xsOiEwLHNjcm9sbFNlbnNpdGl2aXR5OjIwLHNjcm9sbFNwZWVkOjIwLHNuYXA6ITEsc25hcE1vZGU6ImJvdGgiLHNuYXBUb2xlcmFuY2U6MjAsc3RhY2s6ITEsekluZGV4OiExLGRyYWc6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpeyJvcmlnaW5hbCIhPT10aGlzLm9wdGlvbnMuaGVscGVyfHwvXig/OnJ8YXxmKS8udGVzdCh0aGlzLmVsZW1lbnQuY3NzKCJwb3NpdGlvbiIpKXx8KHRoaXMuZWxlbWVudFswXS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSx0aGlzLm9wdGlvbnMuYWRkQ2xhc3NlcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUiKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJhZ2dhYmxlLWRpc2FibGVkIiksdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCksdGhpcy5fbW91c2VJbml0KCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpLCJoYW5kbGUiPT09ZSYmdGhpcy5fc2V0SGFuZGxlQ2xhc3NOYW1lKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuaGVscGVyfHx0aGlzLmVsZW1lbnQpLmlzKCIudWktZHJhZ2dhYmxlLWRyYWdnaW5nIik/KHRoaXMuZGVzdHJveU9uQ2xlYXI9ITAsdm9pZCAwKToodGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1kcmFnZ2FibGUgdWktZHJhZ2dhYmxlLWRyYWdnaW5nIHVpLWRyYWdnYWJsZS1kaXNhYmxlZCIpLHRoaXMuX3JlbW92ZUhhbmRsZUNsYXNzTmFtZSgpLHRoaXMuX21vdXNlRGVzdHJveSgpLHZvaWQgMCl9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5kb2N1bWVudFswXSxzPXRoaXMub3B0aW9uczt0cnl7aS5hY3RpdmVFbGVtZW50JiYiYm9keSIhPT1pLmFjdGl2ZUVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmZShpLmFjdGl2ZUVsZW1lbnQpLmJsdXIoKX1jYXRjaChuKXt9cmV0dXJuIHRoaXMuaGVscGVyfHxzLmRpc2FibGVkfHxlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktcmVzaXphYmxlLWhhbmRsZSIpLmxlbmd0aD4wPyExOih0aGlzLmhhbmRsZT10aGlzLl9nZXRIYW5kbGUodCksdGhpcy5oYW5kbGU/KGUocy5pZnJhbWVGaXg9PT0hMD8iaWZyYW1lIjpzLmlmcmFtZUZpeCkuZWFjaChmdW5jdGlvbigpe2UoIjxkaXYgY2xhc3M9J3VpLWRyYWdnYWJsZS1pZnJhbWVGaXgnIHN0eWxlPSdiYWNrZ3JvdW5kOiAjZmZmOyc+PC9kaXY+IikuY3NzKHt3aWR0aDp0aGlzLm9mZnNldFdpZHRoKyJweCIsaGVpZ2h0OnRoaXMub2Zmc2V0SGVpZ2h0KyJweCIscG9zaXRpb246ImFic29sdXRlIixvcGFjaXR5OiIwLjAwMSIsekluZGV4OjFlM30pLmNzcyhlKHRoaXMpLm9mZnNldCgpKS5hcHBlbmRUbygiYm9keSIpfSksITApOiExKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLmhlbHBlcj10aGlzLl9jcmVhdGVIZWxwZXIodCksdGhpcy5oZWxwZXIuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSxlLnVpLmRkbWFuYWdlciYmKGUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ9dGhpcyksdGhpcy5fY2FjaGVNYXJnaW5zKCksdGhpcy5jc3NQb3NpdGlvbj10aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiksdGhpcy5zY3JvbGxQYXJlbnQ9dGhpcy5oZWxwZXIuc2Nyb2xsUGFyZW50KCksdGhpcy5vZmZzZXRQYXJlbnQ9dGhpcy5oZWxwZXIub2Zmc2V0UGFyZW50KCksdGhpcy5vZmZzZXRQYXJlbnRDc3NQb3NpdGlvbj10aGlzLm9mZnNldFBhcmVudC5jc3MoInBvc2l0aW9uIiksdGhpcy5vZmZzZXQ9dGhpcy5wb3NpdGlvbkFicz10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5vZmZzZXQ9e3RvcDp0aGlzLm9mZnNldC50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMub2Zmc2V0LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnR9LHRoaXMub2Zmc2V0LnNjcm9sbD0hMSxlLmV4dGVuZCh0aGlzLm9mZnNldCx7Y2xpY2s6e2xlZnQ6dC5wYWdlWC10aGlzLm9mZnNldC5sZWZ0LHRvcDp0LnBhZ2VZLXRoaXMub2Zmc2V0LnRvcH0scGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9KSx0aGlzLm9yaWdpbmFsUG9zaXRpb249dGhpcy5wb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKHQsITEpLHRoaXMub3JpZ2luYWxQYWdlWD10LnBhZ2VYLHRoaXMub3JpZ2luYWxQYWdlWT10LnBhZ2VZLGkuY3Vyc29yQXQmJnRoaXMuX2FkanVzdE9mZnNldEZyb21IZWxwZXIoaS5jdXJzb3JBdCksdGhpcy5fc2V0Q29udGFpbm1lbnQoKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsdCk9PT0hMT8odGhpcy5fY2xlYXIoKSwhMSk6KHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSxlLnVpLmRkbWFuYWdlciYmIWkuZHJvcEJlaGF2aW91ciYmZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcyx0KSx0aGlzLl9tb3VzZURyYWcodCwhMCksZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWdTdGFydCh0aGlzLHQpLCEwKX0sX21vdXNlRHJhZzpmdW5jdGlvbih0LGkpe2lmKCJmaXhlZCI9PT10aGlzLm9mZnNldFBhcmVudENzc1Bvc2l0aW9uJiYodGhpcy5vZmZzZXQucGFyZW50PXRoaXMuX2dldFBhcmVudE9mZnNldCgpKSx0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCwhMCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSwhaSl7dmFyIHM9dGhpcy5fdWlIYXNoKCk7aWYodGhpcy5fdHJpZ2dlcigiZHJhZyIsdCxzKT09PSExKXJldHVybiB0aGlzLl9tb3VzZVVwKHt9KSwhMTt0aGlzLnBvc2l0aW9uPXMucG9zaXRpb259cmV0dXJuIHRoaXMuaGVscGVyWzBdLnN0eWxlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCIsdGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCIsZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWcodGhpcyx0KSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXt2YXIgaT10aGlzLHM9ITE7cmV0dXJuIGUudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJihzPWUudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyx0KSksdGhpcy5kcm9wcGVkJiYocz10aGlzLmRyb3BwZWQsdGhpcy5kcm9wcGVkPSExKSwiaW52YWxpZCI9PT10aGlzLm9wdGlvbnMucmV2ZXJ0JiYhc3x8InZhbGlkIj09PXRoaXMub3B0aW9ucy5yZXZlcnQmJnN8fHRoaXMub3B0aW9ucy5yZXZlcnQ9PT0hMHx8ZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5yZXZlcnQpJiZ0aGlzLm9wdGlvbnMucmV2ZXJ0LmNhbGwodGhpcy5lbGVtZW50LHMpP2UodGhpcy5oZWxwZXIpLmFuaW1hdGUodGhpcy5vcmlnaW5hbFBvc2l0aW9uLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwxMCksZnVuY3Rpb24oKXtpLl90cmlnZ2VyKCJzdG9wIix0KSE9PSExJiZpLl9jbGVhcigpfSk6dGhpcy5fdHJpZ2dlcigic3RvcCIsdCkhPT0hMSYmdGhpcy5fY2xlYXIoKSwhMX0sX21vdXNlVXA6ZnVuY3Rpb24odCl7cmV0dXJuIGUoImRpdi51aS1kcmFnZ2FibGUtaWZyYW1lRml4IikuZWFjaChmdW5jdGlvbigpe3RoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKX0pLGUudWkuZGRtYW5hZ2VyJiZlLnVpLmRkbWFuYWdlci5kcmFnU3RvcCh0aGlzLHQpLHRoaXMuZWxlbWVudC5mb2N1cygpLGUudWkubW91c2UucHJvdG90eXBlLl9tb3VzZVVwLmNhbGwodGhpcyx0KX0sY2FuY2VsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVscGVyLmlzKCIudWktZHJhZ2dhYmxlLWRyYWdnaW5nIik/dGhpcy5fbW91c2VVcCh7fSk6dGhpcy5fY2xlYXIoKSx0aGlzfSxfZ2V0SGFuZGxlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9wdGlvbnMuaGFuZGxlPyEhZSh0LnRhcmdldCkuY2xvc2VzdCh0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaGFuZGxlKSkubGVuZ3RoOiEwfSxfc2V0SGFuZGxlQ2xhc3NOYW1lOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlSGFuZGxlQ2xhc3NOYW1lKCksZSh0aGlzLm9wdGlvbnMuaGFuZGxlfHx0aGlzLmVsZW1lbnQpLmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUtaGFuZGxlIil9LF9yZW1vdmVIYW5kbGVDbGFzc05hbWU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuZmluZCgiLnVpLWRyYWdnYWJsZS1oYW5kbGUiKS5hZGRCYWNrKCkucmVtb3ZlQ2xhc3MoInVpLWRyYWdnYWJsZS1oYW5kbGUiKX0sX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnMscz1lLmlzRnVuY3Rpb24oaS5oZWxwZXIpP2UoaS5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFt0XSkpOiJjbG9uZSI9PT1pLmhlbHBlcj90aGlzLmVsZW1lbnQuY2xvbmUoKS5yZW1vdmVBdHRyKCJpZCIpOnRoaXMuZWxlbWVudDtyZXR1cm4gcy5wYXJlbnRzKCJib2R5IikubGVuZ3RofHxzLmFwcGVuZFRvKCJwYXJlbnQiPT09aS5hcHBlbmRUbz90aGlzLmVsZW1lbnRbMF0ucGFyZW50Tm9kZTppLmFwcGVuZFRvKSxzWzBdPT09dGhpcy5lbGVtZW50WzBdfHwvKGZpeGVkfGFic29sdXRlKS8udGVzdChzLmNzcygicG9zaXRpb24iKSl8fHMuY3NzKCJwb3NpdGlvbiIsImFic29sdXRlIiksc30sX2FkanVzdE9mZnNldEZyb21IZWxwZXI6ZnVuY3Rpb24odCl7InN0cmluZyI9PXR5cGVvZiB0JiYodD10LnNwbGl0KCIgIikpLGUuaXNBcnJheSh0KSYmKHQ9e2xlZnQ6K3RbMF0sdG9wOit0WzFdfHwwfSksImxlZnQiaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dC5sZWZ0K3RoaXMubWFyZ2lucy5sZWZ0KSwicmlnaHQiaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10LnJpZ2h0K3RoaXMubWFyZ2lucy5sZWZ0KSwidG9wImluIHQmJih0aGlzLm9mZnNldC5jbGljay50b3A9dC50b3ArdGhpcy5tYXJnaW5zLnRvcCksImJvdHRvbSJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXQuYm90dG9tK3RoaXMubWFyZ2lucy50b3ApfSxfaXNSb290Tm9kZTpmdW5jdGlvbihlKXtyZXR1cm4vKGh0bWx8Ym9keSkvaS50ZXN0KGUudGFnTmFtZSl8fGU9PT10aGlzLmRvY3VtZW50WzBdfSxfZ2V0UGFyZW50T2Zmc2V0OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCksaT10aGlzLmRvY3VtZW50WzBdO3JldHVybiJhYnNvbHV0ZSI9PT10aGlzLmNzc1Bvc2l0aW9uJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9PWkmJmUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYodC5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksdC50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSx0aGlzLl9pc1Jvb3ROb2RlKHRoaXMub2Zmc2V0UGFyZW50WzBdKSYmKHQ9e3RvcDowLGxlZnQ6MH0pLHt0b3A6dC50b3ArKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApLGxlZnQ6dC5sZWZ0KyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCl9fSxfZ2V0UmVsYXRpdmVPZmZzZXQ6ZnVuY3Rpb24oKXtpZigicmVsYXRpdmUiIT09dGhpcy5jc3NQb3NpdGlvbilyZXR1cm57dG9wOjAsbGVmdDowfTt2YXIgZT10aGlzLmVsZW1lbnQucG9zaXRpb24oKSx0PXRoaXMuX2lzUm9vdE5vZGUodGhpcy5zY3JvbGxQYXJlbnRbMF0pO3JldHVybnt0b3A6ZS50b3AtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygidG9wIiksMTApfHwwKSsodD8wOnRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSxsZWZ0OmUubGVmdC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKCJsZWZ0IiksMTApfHwwKSsodD8wOnRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSl9fSxfY2FjaGVNYXJnaW5zOmZ1bmN0aW9uKCl7dGhpcy5tYXJnaW5zPXtsZWZ0OnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpbkxlZnQiKSwxMCl8fDAsdG9wOnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MCxyaWdodDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5SaWdodCIpLDEwKXx8MCxib3R0b206cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luQm90dG9tIiksMTApfHwwfX0sX2NhY2hlSGVscGVyUHJvcG9ydGlvbnM6ZnVuY3Rpb24oKXt0aGlzLmhlbHBlclByb3BvcnRpb25zPXt3aWR0aDp0aGlzLmhlbHBlci5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuaGVscGVyLm91dGVySGVpZ2h0KCl9fSxfc2V0Q29udGFpbm1lbnQ6ZnVuY3Rpb24oKXt2YXIgdCxpLHMsbj10aGlzLm9wdGlvbnMsYT10aGlzLmRvY3VtZW50WzBdO3JldHVybiB0aGlzLnJlbGF0aXZlX2NvbnRhaW5lcj1udWxsLG4uY29udGFpbm1lbnQ/IndpbmRvdyI9PT1uLmNvbnRhaW5tZW50Pyh0aGlzLmNvbnRhaW5tZW50PVtlKHdpbmRvdykuc2Nyb2xsTGVmdCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsZSh3aW5kb3cpLnNjcm9sbFRvcCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLGUod2luZG93KS5zY3JvbGxMZWZ0KCkrZSh3aW5kb3cpLndpZHRoKCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCxlKHdpbmRvdykuc2Nyb2xsVG9wKCkrKGUod2luZG93KS5oZWlnaHQoKXx8YS5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXSx2b2lkIDApOiJkb2N1bWVudCI9PT1uLmNvbnRhaW5tZW50Pyh0aGlzLmNvbnRhaW5tZW50PVswLDAsZShhKS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKGUoYSkuaGVpZ2h0KCl8fGEuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF0sdm9pZCAwKTpuLmNvbnRhaW5tZW50LmNvbnN0cnVjdG9yPT09QXJyYXk/KHRoaXMuY29udGFpbm1lbnQ9bi5jb250YWlubWVudCx2b2lkIDApOigicGFyZW50Ij09PW4uY29udGFpbm1lbnQmJihuLmNvbnRhaW5tZW50PXRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUpLGk9ZShuLmNvbnRhaW5tZW50KSxzPWlbMF0scyYmKHQ9ImhpZGRlbiIhPT1pLmNzcygib3ZlcmZsb3ciKSx0aGlzLmNvbnRhaW5tZW50PVsocGFyc2VJbnQoaS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCkrKHBhcnNlSW50KGkuY3NzKCJwYWRkaW5nTGVmdCIpLDEwKXx8MCksKHBhcnNlSW50KGkuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCkrKHBhcnNlSW50KGkuY3NzKCJwYWRkaW5nVG9wIiksMTApfHwwKSwodD9NYXRoLm1heChzLnNjcm9sbFdpZHRoLHMub2Zmc2V0V2lkdGgpOnMub2Zmc2V0V2lkdGgpLShwYXJzZUludChpLmNzcygiYm9yZGVyUmlnaHRXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KGkuY3NzKCJwYWRkaW5nUmlnaHQiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQtdGhpcy5tYXJnaW5zLnJpZ2h0LCh0P01hdGgubWF4KHMuc2Nyb2xsSGVpZ2h0LHMub2Zmc2V0SGVpZ2h0KTpzLm9mZnNldEhlaWdodCktKHBhcnNlSW50KGkuY3NzKCJib3JkZXJCb3R0b21XaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KGkuY3NzKCJwYWRkaW5nQm90dG9tIiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wLXRoaXMubWFyZ2lucy5ib3R0b21dLHRoaXMucmVsYXRpdmVfY29udGFpbmVyPWkpLHZvaWQgMCk6KHRoaXMuY29udGFpbm1lbnQ9bnVsbCx2b2lkIDApfSxfY29udmVydFBvc2l0aW9uVG86ZnVuY3Rpb24oZSx0KXt0fHwodD10aGlzLnBvc2l0aW9uKTt2YXIgaT0iYWJzb2x1dGUiPT09ZT8xOi0xLHM9dGhpcy5faXNSb290Tm9kZSh0aGlzLnNjcm9sbFBhcmVudFswXSk7cmV0dXJue3RvcDp0LnRvcCt0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AqaSt0aGlzLm9mZnNldC5wYXJlbnQudG9wKmktKCJmaXhlZCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLm9mZnNldC5zY3JvbGwudG9wOnM/MDp0aGlzLm9mZnNldC5zY3JvbGwudG9wKSppLGxlZnQ6dC5sZWZ0K3RoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQqaSt0aGlzLm9mZnNldC5wYXJlbnQubGVmdCppLSgiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQ6cz8wOnRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0KSppfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgaSxzLG4sYSxvPXRoaXMub3B0aW9ucyxyPXRoaXMuX2lzUm9vdE5vZGUodGhpcy5zY3JvbGxQYXJlbnRbMF0pLGg9ZS5wYWdlWCxsPWUucGFnZVk7cmV0dXJuIHImJnRoaXMub2Zmc2V0LnNjcm9sbHx8KHRoaXMub2Zmc2V0LnNjcm9sbD17dG9wOnRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfSksdCYmKHRoaXMuY29udGFpbm1lbnQmJih0aGlzLnJlbGF0aXZlX2NvbnRhaW5lcj8ocz10aGlzLnJlbGF0aXZlX2NvbnRhaW5lci5vZmZzZXQoKSxpPVt0aGlzLmNvbnRhaW5tZW50WzBdK3MubGVmdCx0aGlzLmNvbnRhaW5tZW50WzFdK3MudG9wLHRoaXMuY29udGFpbm1lbnRbMl0rcy5sZWZ0LHRoaXMuY29udGFpbm1lbnRbM10rcy50b3BdKTppPXRoaXMuY29udGFpbm1lbnQsZS5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PGlbMF0mJihoPWlbMF0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksZS5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8aVsxXSYmKGw9aVsxXSt0aGlzLm9mZnNldC5jbGljay50b3ApLGUucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD5pWzJdJiYoaD1pWzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLGUucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPmlbM10mJihsPWlbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSksby5ncmlkJiYobj1vLmdyaWRbMV0/dGhpcy5vcmlnaW5hbFBhZ2VZK01hdGgucm91bmQoKGwtdGhpcy5vcmlnaW5hbFBhZ2VZKS9vLmdyaWRbMV0pKm8uZ3JpZFsxXTp0aGlzLm9yaWdpbmFsUGFnZVksbD1pP24tdGhpcy5vZmZzZXQuY2xpY2sudG9wPj1pWzFdfHxuLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD5pWzNdP246bi10aGlzLm9mZnNldC5jbGljay50b3A+PWlbMV0/bi1vLmdyaWRbMV06bitvLmdyaWRbMV06bixhPW8uZ3JpZFswXT90aGlzLm9yaWdpbmFsUGFnZVgrTWF0aC5yb3VuZCgoaC10aGlzLm9yaWdpbmFsUGFnZVgpL28uZ3JpZFswXSkqby5ncmlkWzBdOnRoaXMub3JpZ2luYWxQYWdlWCxoPWk/YS10aGlzLm9mZnNldC5jbGljay5sZWZ0Pj1pWzBdfHxhLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+aVsyXT9hOmEtdGhpcy5vZmZzZXQuY2xpY2subGVmdD49aVswXT9hLW8uZ3JpZFswXTphK28uZ3JpZFswXTphKSwieSI9PT1vLmF4aXMmJihoPXRoaXMub3JpZ2luYWxQYWdlWCksIngiPT09by5heGlzJiYobD10aGlzLm9yaWdpbmFsUGFnZVkpKSx7dG9wOmwtdGhpcy5vZmZzZXQuY2xpY2sudG9wLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wKygiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5vZmZzZXQuc2Nyb2xsLnRvcDpyPzA6dGhpcy5vZmZzZXQuc2Nyb2xsLnRvcCksbGVmdDpoLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQtdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCsoImZpeGVkIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMub2Zmc2V0LnNjcm9sbC5sZWZ0OnI/MDp0aGlzLm9mZnNldC5zY3JvbGwubGVmdCl9Ci19LF9jbGVhcjpmdW5jdGlvbigpe3RoaXMuaGVscGVyLnJlbW92ZUNsYXNzKCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmciKSx0aGlzLmhlbHBlclswXT09PXRoaXMuZWxlbWVudFswXXx8dGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsfHx0aGlzLmhlbHBlci5yZW1vdmUoKSx0aGlzLmhlbHBlcj1udWxsLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0aGlzLmRlc3Ryb3lPbkNsZWFyJiZ0aGlzLmRlc3Ryb3koKX0sX3RyaWdnZXI6ZnVuY3Rpb24odCxpLHMpe3JldHVybiBzPXN8fHRoaXMuX3VpSGFzaCgpLGUudWkucGx1Z2luLmNhbGwodGhpcyx0LFtpLHMsdGhpc10sITApLCJkcmFnIj09PXQmJih0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKCJhYnNvbHV0ZSIpKSxlLldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuY2FsbCh0aGlzLHQsaSxzKX0scGx1Z2luczp7fSxfdWlIYXNoOmZ1bmN0aW9uKCl7cmV0dXJue2hlbHBlcjp0aGlzLmhlbHBlcixwb3NpdGlvbjp0aGlzLnBvc2l0aW9uLG9yaWdpbmFsUG9zaXRpb246dGhpcy5vcmlnaW5hbFBvc2l0aW9uLG9mZnNldDp0aGlzLnBvc2l0aW9uQWJzfX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsImNvbm5lY3RUb1NvcnRhYmxlIix7c3RhcnQ6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXMub3B0aW9ucyxhPWUuZXh0ZW5kKHt9LGkse2l0ZW06cy5lbGVtZW50fSk7cy5zb3J0YWJsZXM9W10sZShuLmNvbm5lY3RUb1NvcnRhYmxlKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9ZSh0aGlzKS5zb3J0YWJsZSgiaW5zdGFuY2UiKTtpJiYhaS5vcHRpb25zLmRpc2FibGVkJiYocy5zb3J0YWJsZXMucHVzaCh7aW5zdGFuY2U6aSxzaG91bGRSZXZlcnQ6aS5vcHRpb25zLnJldmVydH0pLGkucmVmcmVzaFBvc2l0aW9ucygpLGkuX3RyaWdnZXIoImFjdGl2YXRlIix0LGEpKX0pfSxzdG9wOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1lLmV4dGVuZCh7fSxpLHtpdGVtOnMuZWxlbWVudH0pO2UuZWFjaChzLnNvcnRhYmxlcyxmdW5jdGlvbigpe3RoaXMuaW5zdGFuY2UuaXNPdmVyPyh0aGlzLmluc3RhbmNlLmlzT3Zlcj0wLHMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMCx0aGlzLmluc3RhbmNlLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsdGhpcy5zaG91bGRSZXZlcnQmJih0aGlzLmluc3RhbmNlLm9wdGlvbnMucmV2ZXJ0PXRoaXMuc2hvdWxkUmV2ZXJ0KSx0aGlzLmluc3RhbmNlLl9tb3VzZVN0b3AodCksdGhpcy5pbnN0YW5jZS5vcHRpb25zLmhlbHBlcj10aGlzLmluc3RhbmNlLm9wdGlvbnMuX2hlbHBlciwib3JpZ2luYWwiPT09cy5vcHRpb25zLmhlbHBlciYmdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbS5jc3Moe3RvcDoiYXV0byIsbGVmdDoiYXV0byJ9KSk6KHRoaXMuaW5zdGFuY2UuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0aGlzLmluc3RhbmNlLl90cmlnZ2VyKCJkZWFjdGl2YXRlIix0LG4pKX0pfSxkcmFnOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj10aGlzO2UuZWFjaChzLnNvcnRhYmxlcyxmdW5jdGlvbigpe3ZhciBhPSExLG89dGhpczt0aGlzLmluc3RhbmNlLnBvc2l0aW9uQWJzPXMucG9zaXRpb25BYnMsdGhpcy5pbnN0YW5jZS5oZWxwZXJQcm9wb3J0aW9ucz1zLmhlbHBlclByb3BvcnRpb25zLHRoaXMuaW5zdGFuY2Uub2Zmc2V0LmNsaWNrPXMub2Zmc2V0LmNsaWNrLHRoaXMuaW5zdGFuY2UuX2ludGVyc2VjdHNXaXRoKHRoaXMuaW5zdGFuY2UuY29udGFpbmVyQ2FjaGUpJiYoYT0hMCxlLmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5wb3NpdGlvbkFicz1zLnBvc2l0aW9uQWJzLHRoaXMuaW5zdGFuY2UuaGVscGVyUHJvcG9ydGlvbnM9cy5oZWxwZXJQcm9wb3J0aW9ucyx0aGlzLmluc3RhbmNlLm9mZnNldC5jbGljaz1zLm9mZnNldC5jbGljayx0aGlzIT09byYmdGhpcy5pbnN0YW5jZS5faW50ZXJzZWN0c1dpdGgodGhpcy5pbnN0YW5jZS5jb250YWluZXJDYWNoZSkmJmUuY29udGFpbnMoby5pbnN0YW5jZS5lbGVtZW50WzBdLHRoaXMuaW5zdGFuY2UuZWxlbWVudFswXSkmJihhPSExKSxhfSkpLGE/KHRoaXMuaW5zdGFuY2UuaXNPdmVyfHwodGhpcy5pbnN0YW5jZS5pc092ZXI9MSx0aGlzLmluc3RhbmNlLmN1cnJlbnRJdGVtPWUobikuY2xvbmUoKS5yZW1vdmVBdHRyKCJpZCIpLmFwcGVuZFRvKHRoaXMuaW5zdGFuY2UuZWxlbWVudCkuZGF0YSgidWktc29ydGFibGUtaXRlbSIsITApLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5faGVscGVyPXRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXIsdGhpcy5pbnN0YW5jZS5vcHRpb25zLmhlbHBlcj1mdW5jdGlvbigpe3JldHVybiBpLmhlbHBlclswXX0sdC50YXJnZXQ9dGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbVswXSx0aGlzLmluc3RhbmNlLl9tb3VzZUNhcHR1cmUodCwhMCksdGhpcy5pbnN0YW5jZS5fbW91c2VTdGFydCh0LCEwLCEwKSx0aGlzLmluc3RhbmNlLm9mZnNldC5jbGljay50b3A9cy5vZmZzZXQuY2xpY2sudG9wLHRoaXMuaW5zdGFuY2Uub2Zmc2V0LmNsaWNrLmxlZnQ9cy5vZmZzZXQuY2xpY2subGVmdCx0aGlzLmluc3RhbmNlLm9mZnNldC5wYXJlbnQubGVmdC09cy5vZmZzZXQucGFyZW50LmxlZnQtdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LmxlZnQsdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LnRvcC09cy5vZmZzZXQucGFyZW50LnRvcC10aGlzLmluc3RhbmNlLm9mZnNldC5wYXJlbnQudG9wLHMuX3RyaWdnZXIoInRvU29ydGFibGUiLHQpLHMuZHJvcHBlZD10aGlzLmluc3RhbmNlLmVsZW1lbnQscy5jdXJyZW50SXRlbT1zLmVsZW1lbnQsdGhpcy5pbnN0YW5jZS5mcm9tT3V0c2lkZT1zKSx0aGlzLmluc3RhbmNlLmN1cnJlbnRJdGVtJiZ0aGlzLmluc3RhbmNlLl9tb3VzZURyYWcodCkpOnRoaXMuaW5zdGFuY2UuaXNPdmVyJiYodGhpcy5pbnN0YW5jZS5pc092ZXI9MCx0aGlzLmluc3RhbmNlLmNhbmNlbEhlbHBlclJlbW92YWw9ITAsdGhpcy5pbnN0YW5jZS5vcHRpb25zLnJldmVydD0hMSx0aGlzLmluc3RhbmNlLl90cmlnZ2VyKCJvdXQiLHQsdGhpcy5pbnN0YW5jZS5fdWlIYXNoKHRoaXMuaW5zdGFuY2UpKSx0aGlzLmluc3RhbmNlLl9tb3VzZVN0b3AodCwhMCksdGhpcy5pbnN0YW5jZS5vcHRpb25zLmhlbHBlcj10aGlzLmluc3RhbmNlLm9wdGlvbnMuX2hlbHBlcix0aGlzLmluc3RhbmNlLmN1cnJlbnRJdGVtLnJlbW92ZSgpLHRoaXMuaW5zdGFuY2UucGxhY2Vob2xkZXImJnRoaXMuaW5zdGFuY2UucGxhY2Vob2xkZXIucmVtb3ZlKCkscy5fdHJpZ2dlcigiZnJvbVNvcnRhYmxlIix0KSxzLmRyb3BwZWQ9ITEpfSl9fSksZS51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCJjdXJzb3IiLHtzdGFydDpmdW5jdGlvbih0LGkscyl7dmFyIG49ZSgiYm9keSIpLGE9cy5vcHRpb25zO24uY3NzKCJjdXJzb3IiKSYmKGEuX2N1cnNvcj1uLmNzcygiY3Vyc29yIikpLG4uY3NzKCJjdXJzb3IiLGEuY3Vyc29yKX0sc3RvcDpmdW5jdGlvbih0LGkscyl7dmFyIG49cy5vcHRpb25zO24uX2N1cnNvciYmZSgiYm9keSIpLmNzcygiY3Vyc29yIixuLl9jdXJzb3IpfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwib3BhY2l0eSIse3N0YXJ0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1lKGkuaGVscGVyKSxhPXMub3B0aW9ucztuLmNzcygib3BhY2l0eSIpJiYoYS5fb3BhY2l0eT1uLmNzcygib3BhY2l0eSIpKSxuLmNzcygib3BhY2l0eSIsYS5vcGFjaXR5KX0sc3RvcDpmdW5jdGlvbih0LGkscyl7dmFyIG49cy5vcHRpb25zO24uX29wYWNpdHkmJmUoaS5oZWxwZXIpLmNzcygib3BhY2l0eSIsbi5fb3BhY2l0eSl9fSksZS51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCJzY3JvbGwiLHtzdGFydDpmdW5jdGlvbihlLHQsaSl7aS5zY3JvbGxQYXJlbnRbMF0hPT1pLmRvY3VtZW50WzBdJiYiSFRNTCIhPT1pLnNjcm9sbFBhcmVudFswXS50YWdOYW1lJiYoaS5vdmVyZmxvd09mZnNldD1pLnNjcm9sbFBhcmVudC5vZmZzZXQoKSl9LGRyYWc6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPXMub3B0aW9ucyxhPSExLG89cy5kb2N1bWVudFswXTtzLnNjcm9sbFBhcmVudFswXSE9PW8mJiJIVE1MIiE9PXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWU/KG4uYXhpcyYmIngiPT09bi5heGlzfHwocy5vdmVyZmxvd09mZnNldC50b3Arcy5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0SGVpZ2h0LXQucGFnZVk8bi5zY3JvbGxTZW5zaXRpdml0eT9zLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9YT1zLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3Arbi5zY3JvbGxTcGVlZDp0LnBhZ2VZLXMub3ZlcmZsb3dPZmZzZXQudG9wPG4uc2Nyb2xsU2Vuc2l0aXZpdHkmJihzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9YT1zLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3Atbi5zY3JvbGxTcGVlZCkpLG4uYXhpcyYmInkiPT09bi5heGlzfHwocy5vdmVyZmxvd09mZnNldC5sZWZ0K3Muc2Nyb2xsUGFyZW50WzBdLm9mZnNldFdpZHRoLXQucGFnZVg8bi5zY3JvbGxTZW5zaXRpdml0eT9zLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0PWE9cy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdCtuLnNjcm9sbFNwZWVkOnQucGFnZVgtcy5vdmVyZmxvd09mZnNldC5sZWZ0PG4uc2Nyb2xsU2Vuc2l0aXZpdHkmJihzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0PWE9cy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdC1uLnNjcm9sbFNwZWVkKSkpOihuLmF4aXMmJiJ4Ij09PW4uYXhpc3x8KHQucGFnZVktZShvKS5zY3JvbGxUb3AoKTxuLnNjcm9sbFNlbnNpdGl2aXR5P2E9ZShvKS5zY3JvbGxUb3AoZShvKS5zY3JvbGxUb3AoKS1uLnNjcm9sbFNwZWVkKTplKHdpbmRvdykuaGVpZ2h0KCktKHQucGFnZVktZShvKS5zY3JvbGxUb3AoKSk8bi5zY3JvbGxTZW5zaXRpdml0eSYmKGE9ZShvKS5zY3JvbGxUb3AoZShvKS5zY3JvbGxUb3AoKStuLnNjcm9sbFNwZWVkKSkpLG4uYXhpcyYmInkiPT09bi5heGlzfHwodC5wYWdlWC1lKG8pLnNjcm9sbExlZnQoKTxuLnNjcm9sbFNlbnNpdGl2aXR5P2E9ZShvKS5zY3JvbGxMZWZ0KGUobykuc2Nyb2xsTGVmdCgpLW4uc2Nyb2xsU3BlZWQpOmUod2luZG93KS53aWR0aCgpLSh0LnBhZ2VYLWUobykuc2Nyb2xsTGVmdCgpKTxuLnNjcm9sbFNlbnNpdGl2aXR5JiYoYT1lKG8pLnNjcm9sbExlZnQoZShvKS5zY3JvbGxMZWZ0KCkrbi5zY3JvbGxTcGVlZCkpKSksYSE9PSExJiZlLnVpLmRkbWFuYWdlciYmIW4uZHJvcEJlaGF2aW91ciYmZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMocyx0KX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInNuYXAiLHtzdGFydDpmdW5jdGlvbih0LGkscyl7dmFyIG49cy5vcHRpb25zO3Muc25hcEVsZW1lbnRzPVtdLGUobi5zbmFwLmNvbnN0cnVjdG9yIT09U3RyaW5nP24uc25hcC5pdGVtc3x8IjpkYXRhKHVpLWRyYWdnYWJsZSkiOm4uc25hcCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyksaT10Lm9mZnNldCgpO3RoaXMhPT1zLmVsZW1lbnRbMF0mJnMuc25hcEVsZW1lbnRzLnB1c2goe2l0ZW06dGhpcyx3aWR0aDp0Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dC5vdXRlckhlaWdodCgpLHRvcDppLnRvcCxsZWZ0OmkubGVmdH0pfSl9LGRyYWc6ZnVuY3Rpb24odCxpLHMpe3ZhciBuLGEsbyxyLGgsbCx1LGQsYyxwLGY9cy5vcHRpb25zLG09Zi5zbmFwVG9sZXJhbmNlLGc9aS5vZmZzZXQubGVmdCx2PWcrcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCx5PWkub2Zmc2V0LnRvcCxiPXkrcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQ7Zm9yKGM9cy5zbmFwRWxlbWVudHMubGVuZ3RoLTE7Yz49MDtjLS0paD1zLnNuYXBFbGVtZW50c1tjXS5sZWZ0LGw9aCtzLnNuYXBFbGVtZW50c1tjXS53aWR0aCx1PXMuc25hcEVsZW1lbnRzW2NdLnRvcCxkPXUrcy5zbmFwRWxlbWVudHNbY10uaGVpZ2h0LGgtbT52fHxnPmwrbXx8dS1tPmJ8fHk+ZCttfHwhZS5jb250YWlucyhzLnNuYXBFbGVtZW50c1tjXS5pdGVtLm93bmVyRG9jdW1lbnQscy5zbmFwRWxlbWVudHNbY10uaXRlbSk/KHMuc25hcEVsZW1lbnRzW2NdLnNuYXBwaW5nJiZzLm9wdGlvbnMuc25hcC5yZWxlYXNlJiZzLm9wdGlvbnMuc25hcC5yZWxlYXNlLmNhbGwocy5lbGVtZW50LHQsZS5leHRlbmQocy5fdWlIYXNoKCkse3NuYXBJdGVtOnMuc25hcEVsZW1lbnRzW2NdLml0ZW19KSkscy5zbmFwRWxlbWVudHNbY10uc25hcHBpbmc9ITEpOigiaW5uZXIiIT09Zi5zbmFwTW9kZSYmKG49bT49TWF0aC5hYnModS1iKSxhPW0+PU1hdGguYWJzKGQteSksbz1tPj1NYXRoLmFicyhoLXYpLHI9bT49TWF0aC5hYnMobC1nKSxuJiYoaS5wb3NpdGlvbi50b3A9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOnUtcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsbGVmdDowfSkudG9wLXMubWFyZ2lucy50b3ApLGEmJihpLnBvc2l0aW9uLnRvcD1zLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6ZCxsZWZ0OjB9KS50b3Atcy5tYXJnaW5zLnRvcCksbyYmKGkucG9zaXRpb24ubGVmdD1zLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6MCxsZWZ0Omgtcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aH0pLmxlZnQtcy5tYXJnaW5zLmxlZnQpLHImJihpLnBvc2l0aW9uLmxlZnQ9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpsfSkubGVmdC1zLm1hcmdpbnMubGVmdCkpLHA9bnx8YXx8b3x8ciwib3V0ZXIiIT09Zi5zbmFwTW9kZSYmKG49bT49TWF0aC5hYnModS15KSxhPW0+PU1hdGguYWJzKGQtYiksbz1tPj1NYXRoLmFicyhoLWcpLHI9bT49TWF0aC5hYnMobC12KSxuJiYoaS5wb3NpdGlvbi50b3A9cy5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOnUsbGVmdDowfSkudG9wLXMubWFyZ2lucy50b3ApLGEmJihpLnBvc2l0aW9uLnRvcD1zLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6ZC1zLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxsZWZ0OjB9KS50b3Atcy5tYXJnaW5zLnRvcCksbyYmKGkucG9zaXRpb24ubGVmdD1zLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6MCxsZWZ0Omh9KS5sZWZ0LXMubWFyZ2lucy5sZWZ0KSxyJiYoaS5wb3NpdGlvbi5sZWZ0PXMuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6bC1zLmhlbHBlclByb3BvcnRpb25zLndpZHRofSkubGVmdC1zLm1hcmdpbnMubGVmdCkpLCFzLnNuYXBFbGVtZW50c1tjXS5zbmFwcGluZyYmKG58fGF8fG98fHJ8fHApJiZzLm9wdGlvbnMuc25hcC5zbmFwJiZzLm9wdGlvbnMuc25hcC5zbmFwLmNhbGwocy5lbGVtZW50LHQsZS5leHRlbmQocy5fdWlIYXNoKCkse3NuYXBJdGVtOnMuc25hcEVsZW1lbnRzW2NdLml0ZW19KSkscy5zbmFwRWxlbWVudHNbY10uc25hcHBpbmc9bnx8YXx8b3x8cnx8cCl9fSksZS51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCJzdGFjayIse3N0YXJ0OmZ1bmN0aW9uKHQsaSxzKXt2YXIgbixhPXMub3B0aW9ucyxvPWUubWFrZUFycmF5KGUoYS5zdGFjaykpLnNvcnQoZnVuY3Rpb24odCxpKXtyZXR1cm4ocGFyc2VJbnQoZSh0KS5jc3MoInpJbmRleCIpLDEwKXx8MCktKHBhcnNlSW50KGUoaSkuY3NzKCJ6SW5kZXgiKSwxMCl8fDApfSk7by5sZW5ndGgmJihuPXBhcnNlSW50KGUob1swXSkuY3NzKCJ6SW5kZXgiKSwxMCl8fDAsZShvKS5lYWNoKGZ1bmN0aW9uKHQpe2UodGhpcykuY3NzKCJ6SW5kZXgiLG4rdCl9KSx0aGlzLmNzcygiekluZGV4IixuK28ubGVuZ3RoKSl9fSksZS51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCJ6SW5kZXgiLHtzdGFydDpmdW5jdGlvbih0LGkscyl7dmFyIG49ZShpLmhlbHBlciksYT1zLm9wdGlvbnM7bi5jc3MoInpJbmRleCIpJiYoYS5fekluZGV4PW4uY3NzKCJ6SW5kZXgiKSksbi5jc3MoInpJbmRleCIsYS56SW5kZXgpfSxzdG9wOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj1zLm9wdGlvbnM7bi5fekluZGV4JiZlKGkuaGVscGVyKS5jc3MoInpJbmRleCIsbi5fekluZGV4KX19KSxlLnVpLmRyYWdnYWJsZSxlLndpZGdldCgidWkucmVzaXphYmxlIixlLnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjExLjAiLHdpZGdldEV2ZW50UHJlZml4OiJyZXNpemUiLG9wdGlvbnM6e2Fsc29SZXNpemU6ITEsYW5pbWF0ZTohMSxhbmltYXRlRHVyYXRpb246InNsb3ciLGFuaW1hdGVFYXNpbmc6InN3aW5nIixhc3BlY3RSYXRpbzohMSxhdXRvSGlkZTohMSxjb250YWlubWVudDohMSxnaG9zdDohMSxncmlkOiExLGhhbmRsZXM6ImUscyxzZSIsaGVscGVyOiExLG1heEhlaWdodDpudWxsLG1heFdpZHRoOm51bGwsbWluSGVpZ2h0OjEwLG1pbldpZHRoOjEwLHpJbmRleDo5MCxyZXNpemU6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX251bTpmdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VJbnQoZSwxMCl8fDB9LF9pc051bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4ocGFyc2VJbnQoZSwxMCkpfSxfaGFzU2Nyb2xsOmZ1bmN0aW9uKHQsaSl7aWYoImhpZGRlbiI9PT1lKHQpLmNzcygib3ZlcmZsb3ciKSlyZXR1cm4hMTt2YXIgcz1pJiYibGVmdCI9PT1pPyJzY3JvbGxMZWZ0Ijoic2Nyb2xsVG9wIixuPSExO3JldHVybiB0W3NdPjA/ITA6KHRbc109MSxuPXRbc10+MCx0W3NdPTAsbil9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxpLHMsbixhLG89dGhpcyxyPXRoaXMub3B0aW9ucztpZih0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZSIpLGUuZXh0ZW5kKHRoaXMse19hc3BlY3RSYXRpbzohIXIuYXNwZWN0UmF0aW8sYXNwZWN0UmF0aW86ci5hc3BlY3RSYXRpbyxvcmlnaW5hbEVsZW1lbnQ6dGhpcy5lbGVtZW50LF9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzOltdLF9oZWxwZXI6ci5oZWxwZXJ8fHIuZ2hvc3R8fHIuYW5pbWF0ZT9yLmhlbHBlcnx8InVpLXJlc2l6YWJsZS1oZWxwZXIiOm51bGx9KSx0aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL2NhbnZhc3x0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9ufGltZy9pKSYmKHRoaXMuZWxlbWVudC53cmFwKGUoIjxkaXYgY2xhc3M9J3VpLXdyYXBwZXInIHN0eWxlPSdvdmVyZmxvdzogaGlkZGVuOyc+PC9kaXY+IikuY3NzKHtwb3NpdGlvbjp0aGlzLmVsZW1lbnQuY3NzKCJwb3NpdGlvbiIpLHdpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLHRvcDp0aGlzLmVsZW1lbnQuY3NzKCJ0b3AiKSxsZWZ0OnRoaXMuZWxlbWVudC5jc3MoImxlZnQiKX0pKSx0aGlzLmVsZW1lbnQ9dGhpcy5lbGVtZW50LnBhcmVudCgpLmRhdGEoInVpLXJlc2l6YWJsZSIsdGhpcy5lbGVtZW50LnJlc2l6YWJsZSgiaW5zdGFuY2UiKSksdGhpcy5lbGVtZW50SXNXcmFwcGVyPSEwLHRoaXMuZWxlbWVudC5jc3Moe21hcmdpbkxlZnQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5MZWZ0IiksbWFyZ2luVG9wOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luVG9wIiksbWFyZ2luUmlnaHQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5SaWdodCIpLG1hcmdpbkJvdHRvbTp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbkJvdHRvbSIpfSksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHttYXJnaW5MZWZ0OjAsbWFyZ2luVG9wOjAsbWFyZ2luUmlnaHQ6MCxtYXJnaW5Cb3R0b206MH0pLHRoaXMub3JpZ2luYWxSZXNpemVTdHlsZT10aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIiwibm9uZSIpLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMucHVzaCh0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe3Bvc2l0aW9uOiJzdGF0aWMiLHpvb206MSxkaXNwbGF5OiJibG9jayJ9KSksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHttYXJnaW46dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW4iKX0pLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLHRoaXMuaGFuZGxlcz1yLmhhbmRsZXN8fChlKCIudWktcmVzaXphYmxlLWhhbmRsZSIsdGhpcy5lbGVtZW50KS5sZW5ndGg/e246Ii51aS1yZXNpemFibGUtbiIsZToiLnVpLXJlc2l6YWJsZS1lIixzOiIudWktcmVzaXphYmxlLXMiLHc6Ii51aS1yZXNpemFibGUtdyIsc2U6Ii51aS1yZXNpemFibGUtc2UiLHN3OiIudWktcmVzaXphYmxlLXN3IixuZToiLnVpLXJlc2l6YWJsZS1uZSIsbnc6Ii51aS1yZXNpemFibGUtbncifToiZSxzLHNlIiksdGhpcy5oYW5kbGVzLmNvbnN0cnVjdG9yPT09U3RyaW5nKWZvcigiYWxsIj09PXRoaXMuaGFuZGxlcyYmKHRoaXMuaGFuZGxlcz0ibixlLHMsdyxzZSxzdyxuZSxudyIpLHQ9dGhpcy5oYW5kbGVzLnNwbGl0KCIsIiksdGhpcy5oYW5kbGVzPXt9LGk9MDt0Lmxlbmd0aD5pO2krKylzPWUudHJpbSh0W2ldKSxhPSJ1aS1yZXNpemFibGUtIitzLG49ZSgiPGRpdiBjbGFzcz0ndWktcmVzaXphYmxlLWhhbmRsZSAiK2ErIic+PC9kaXY+Iiksbi5jc3Moe3pJbmRleDpyLnpJbmRleH0pLCJzZSI9PT1zJiZuLmFkZENsYXNzKCJ1aS1pY29uIHVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNlIiksdGhpcy5oYW5kbGVzW3NdPSIudWktcmVzaXphYmxlLSIrcyx0aGlzLmVsZW1lbnQuYXBwZW5kKG4pO3RoaXMuX3JlbmRlckF4aXM9ZnVuY3Rpb24odCl7dmFyIGkscyxuLGE7dD10fHx0aGlzLmVsZW1lbnQ7Zm9yKGkgaW4gdGhpcy5oYW5kbGVzKXRoaXMuaGFuZGxlc1tpXS5jb25zdHJ1Y3Rvcj09PVN0cmluZyYmKHRoaXMuaGFuZGxlc1tpXT10aGlzLmVsZW1lbnQuY2hpbGRyZW4odGhpcy5oYW5kbGVzW2ldKS5maXJzdCgpLnNob3coKSksdGhpcy5lbGVtZW50SXNXcmFwcGVyJiZ0aGlzLm9yaWdpbmFsRWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvdGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbi9pKSYmKHM9ZSh0aGlzLmhhbmRsZXNbaV0sdGhpcy5lbGVtZW50KSxhPS9zd3xuZXxud3xzZXxufHMvLnRlc3QoaSk/cy5vdXRlckhlaWdodCgpOnMub3V0ZXJXaWR0aCgpLG49WyJwYWRkaW5nIiwvbmV8bnd8bi8udGVzdChpKT8iVG9wIjovc2V8c3d8cy8udGVzdChpKT8iQm90dG9tIjovXmUkLy50ZXN0KGkpPyJSaWdodCI6IkxlZnQiXS5qb2luKCIiKSx0LmNzcyhuLGEpLHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLGUodGhpcy5oYW5kbGVzW2ldKS5sZW5ndGh9LHRoaXMuX3JlbmRlckF4aXModGhpcy5lbGVtZW50KSx0aGlzLl9oYW5kbGVzPWUoIi51aS1yZXNpemFibGUtaGFuZGxlIix0aGlzLmVsZW1lbnQpLmRpc2FibGVTZWxlY3Rpb24oKSx0aGlzLl9oYW5kbGVzLm1vdXNlb3ZlcihmdW5jdGlvbigpe28ucmVzaXppbmd8fCh0aGlzLmNsYXNzTmFtZSYmKG49dGhpcy5jbGFzc05hbWUubWF0Y2goL3VpLXJlc2l6YWJsZS0oc2V8c3d8bmV8bnd8bnxlfHN8dykvaSkpLG8uYXhpcz1uJiZuWzFdP25bMV06InNlIil9KSxyLmF1dG9IaWRlJiYodGhpcy5faGFuZGxlcy5oaWRlKCksZSh0aGlzLmVsZW1lbnQpLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKS5tb3VzZWVudGVyKGZ1bmN0aW9uKCl7ci5kaXNhYmxlZHx8KGUodGhpcykucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLG8uX2hhbmRsZXMuc2hvdygpKX0pLm1vdXNlbGVhdmUoZnVuY3Rpb24oKXtyLmRpc2FibGVkfHxvLnJlc2l6aW5nfHwoZSh0aGlzKS5hZGRDbGFzcygidWktcmVzaXphYmxlLWF1dG9oaWRlIiksby5faGFuZGxlcy5oaWRlKCkpfSkpLHRoaXMuX21vdXNlSW5pdCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX21vdXNlRGVzdHJveSgpO3ZhciB0LGk9ZnVuY3Rpb24odCl7ZSh0KS5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlIHVpLXJlc2l6YWJsZS1kaXNhYmxlZCB1aS1yZXNpemFibGUtcmVzaXppbmciKS5yZW1vdmVEYXRhKCJyZXNpemFibGUiKS5yZW1vdmVEYXRhKCJ1aS1yZXNpemFibGUiKS51bmJpbmQoIi5yZXNpemFibGUiKS5maW5kKCIudWktcmVzaXphYmxlLWhhbmRsZSIpLnJlbW92ZSgpfTtyZXR1cm4gdGhpcy5lbGVtZW50SXNXcmFwcGVyJiYoaSh0aGlzLmVsZW1lbnQpLHQ9dGhpcy5lbGVtZW50LHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7cG9zaXRpb246dC5jc3MoInBvc2l0aW9uIiksd2lkdGg6dC5vdXRlcldpZHRoKCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoKSx0b3A6dC5jc3MoInRvcCIpLGxlZnQ6dC5jc3MoImxlZnQiKX0pLmluc2VydEFmdGVyKHQpLHQucmVtb3ZlKCkpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIix0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGUpLGkodGhpcy5vcmlnaW5hbEVsZW1lbnQpLHRoaXN9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24odCl7dmFyIGkscyxuPSExO2ZvcihpIGluIHRoaXMuaGFuZGxlcylzPWUodGhpcy5oYW5kbGVzW2ldKVswXSwocz09PXQudGFyZ2V0fHxlLmNvbnRhaW5zKHMsdC50YXJnZXQpKSYmKG49ITApO3JldHVybiF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJm59LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhPXRoaXMub3B0aW9ucyxvPXRoaXMuZWxlbWVudDtyZXR1cm4gdGhpcy5yZXNpemluZz0hMCx0aGlzLl9yZW5kZXJQcm94eSgpLGk9dGhpcy5fbnVtKHRoaXMuaGVscGVyLmNzcygibGVmdCIpKSxzPXRoaXMuX251bSh0aGlzLmhlbHBlci5jc3MoInRvcCIpKSxhLmNvbnRhaW5tZW50JiYoaSs9ZShhLmNvbnRhaW5tZW50KS5zY3JvbGxMZWZ0KCl8fDAscys9ZShhLmNvbnRhaW5tZW50KS5zY3JvbGxUb3AoKXx8MCksdGhpcy5vZmZzZXQ9dGhpcy5oZWxwZXIub2Zmc2V0KCksdGhpcy5wb3NpdGlvbj17bGVmdDppLHRvcDpzfSx0aGlzLnNpemU9dGhpcy5faGVscGVyP3t3aWR0aDp0aGlzLmhlbHBlci53aWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5oZWlnaHQoKX06e3dpZHRoOm8ud2lkdGgoKSxoZWlnaHQ6by5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbFNpemU9dGhpcy5faGVscGVyP3t3aWR0aDpvLm91dGVyV2lkdGgoKSxoZWlnaHQ6by5vdXRlckhlaWdodCgpfTp7d2lkdGg6by53aWR0aCgpLGhlaWdodDpvLmhlaWdodCgpfSx0aGlzLm9yaWdpbmFsUG9zaXRpb249e2xlZnQ6aSx0b3A6c30sdGhpcy5zaXplRGlmZj17d2lkdGg6by5vdXRlcldpZHRoKCktby53aWR0aCgpLGhlaWdodDpvLm91dGVySGVpZ2h0KCktby5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbE1vdXNlUG9zaXRpb249e2xlZnQ6dC5wYWdlWCx0b3A6dC5wYWdlWX0sdGhpcy5hc3BlY3RSYXRpbz0ibnVtYmVyIj09dHlwZW9mIGEuYXNwZWN0UmF0aW8/YS5hc3BlY3RSYXRpbzp0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aC90aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHR8fDEsbj1lKCIudWktcmVzaXphYmxlLSIrdGhpcy5heGlzKS5jc3MoImN1cnNvciIpLGUoImJvZHkiKS5jc3MoImN1cnNvciIsImF1dG8iPT09bj90aGlzLmF4aXMrIi1yZXNpemUiOm4pLG8uYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1yZXNpemluZyIpLHRoaXMuX3Byb3BhZ2F0ZSgic3RhcnQiLHQpLCEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQpe3ZhciBpLHM9dGhpcy5oZWxwZXIsbj17fSxhPXRoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uLG89dGhpcy5heGlzLHI9dC5wYWdlWC1hLmxlZnR8fDAsaD10LnBhZ2VZLWEudG9wfHwwLGw9dGhpcy5fY2hhbmdlW29dO3JldHVybiB0aGlzLnByZXZQb3NpdGlvbj17dG9wOnRoaXMucG9zaXRpb24udG9wLGxlZnQ6dGhpcy5wb3NpdGlvbi5sZWZ0fSx0aGlzLnByZXZTaXplPXt3aWR0aDp0aGlzLnNpemUud2lkdGgsaGVpZ2h0OnRoaXMuc2l6ZS5oZWlnaHR9LGw/KGk9bC5hcHBseSh0aGlzLFt0LHIsaF0pLHRoaXMuX3VwZGF0ZVZpcnR1YWxCb3VuZGFyaWVzKHQuc2hpZnRLZXkpLCh0aGlzLl9hc3BlY3RSYXRpb3x8dC5zaGlmdEtleSkmJihpPXRoaXMuX3VwZGF0ZVJhdGlvKGksdCkpLGk9dGhpcy5fcmVzcGVjdFNpemUoaSx0KSx0aGlzLl91cGRhdGVDYWNoZShpKSx0aGlzLl9wcm9wYWdhdGUoInJlc2l6ZSIsdCksdGhpcy5wb3NpdGlvbi50b3AhPT10aGlzLnByZXZQb3NpdGlvbi50b3AmJihuLnRvcD10aGlzLnBvc2l0aW9uLnRvcCsicHgiKSx0aGlzLnBvc2l0aW9uLmxlZnQhPT10aGlzLnByZXZQb3NpdGlvbi5sZWZ0JiYobi5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCsicHgiKSx0aGlzLnNpemUud2lkdGghPT10aGlzLnByZXZTaXplLndpZHRoJiYobi53aWR0aD10aGlzLnNpemUud2lkdGgrInB4IiksdGhpcy5zaXplLmhlaWdodCE9PXRoaXMucHJldlNpemUuaGVpZ2h0JiYobi5oZWlnaHQ9dGhpcy5zaXplLmhlaWdodCsicHgiKSxzLmNzcyhuKSwhdGhpcy5faGVscGVyJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aCYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSxlLmlzRW1wdHlPYmplY3Qobil8fHRoaXMuX3RyaWdnZXIoInJlc2l6ZSIsdCx0aGlzLnVpKCkpLCExKTohMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXt0aGlzLnJlc2l6aW5nPSExO3ZhciBpLHMsbixhLG8scixoLGw9dGhpcy5vcHRpb25zLHU9dGhpcztyZXR1cm4gdGhpcy5faGVscGVyJiYoaT10aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLHM9aS5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3QoaVswXS5ub2RlTmFtZSksbj1zJiZ0aGlzLl9oYXNTY3JvbGwoaVswXSwibGVmdCIpPzA6dS5zaXplRGlmZi5oZWlnaHQsYT1zPzA6dS5zaXplRGlmZi53aWR0aCxvPXt3aWR0aDp1LmhlbHBlci53aWR0aCgpLWEsaGVpZ2h0OnUuaGVscGVyLmhlaWdodCgpLW59LHI9cGFyc2VJbnQodS5lbGVtZW50LmNzcygibGVmdCIpLDEwKSsodS5wb3NpdGlvbi5sZWZ0LXUub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KXx8bnVsbCxoPXBhcnNlSW50KHUuZWxlbWVudC5jc3MoInRvcCIpLDEwKSsodS5wb3NpdGlvbi50b3AtdS5vcmlnaW5hbFBvc2l0aW9uLnRvcCl8fG51bGwsbC5hbmltYXRlfHx0aGlzLmVsZW1lbnQuY3NzKGUuZXh0ZW5kKG8se3RvcDpoLGxlZnQ6cn0pKSx1LmhlbHBlci5oZWlnaHQodS5zaXplLmhlaWdodCksdS5oZWxwZXIud2lkdGgodS5zaXplLndpZHRoKSx0aGlzLl9oZWxwZXImJiFsLmFuaW1hdGUmJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplKCkpLGUoImJvZHkiKS5jc3MoImN1cnNvciIsImF1dG8iKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZS1yZXNpemluZyIpLHRoaXMuX3Byb3BhZ2F0ZSgic3RvcCIsdCksdGhpcy5faGVscGVyJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSwhMX0sX3VwZGF0ZVZpcnR1YWxCb3VuZGFyaWVzOmZ1bmN0aW9uKGUpe3ZhciB0LGkscyxuLGEsbz10aGlzLm9wdGlvbnM7YT17bWluV2lkdGg6dGhpcy5faXNOdW1iZXIoby5taW5XaWR0aCk/by5taW5XaWR0aDowLG1heFdpZHRoOnRoaXMuX2lzTnVtYmVyKG8ubWF4V2lkdGgpP28ubWF4V2lkdGg6MS8wLG1pbkhlaWdodDp0aGlzLl9pc051bWJlcihvLm1pbkhlaWdodCk/by5taW5IZWlnaHQ6MCxtYXhIZWlnaHQ6dGhpcy5faXNOdW1iZXIoby5tYXhIZWlnaHQpP28ubWF4SGVpZ2h0OjEvMH0sKHRoaXMuX2FzcGVjdFJhdGlvfHxlKSYmKHQ9YS5taW5IZWlnaHQqdGhpcy5hc3BlY3RSYXRpbyxzPWEubWluV2lkdGgvdGhpcy5hc3BlY3RSYXRpbyxpPWEubWF4SGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW8sbj1hLm1heFdpZHRoL3RoaXMuYXNwZWN0UmF0aW8sdD5hLm1pbldpZHRoJiYoYS5taW5XaWR0aD10KSxzPmEubWluSGVpZ2h0JiYoYS5taW5IZWlnaHQ9cyksYS5tYXhXaWR0aD5pJiYoYS5tYXhXaWR0aD1pKSxhLm1heEhlaWdodD5uJiYoYS5tYXhIZWlnaHQ9bikpLHRoaXMuX3ZCb3VuZGFyaWVzPWF9LF91cGRhdGVDYWNoZTpmdW5jdGlvbihlKXt0aGlzLm9mZnNldD10aGlzLmhlbHBlci5vZmZzZXQoKSx0aGlzLl9pc051bWJlcihlLmxlZnQpJiYodGhpcy5wb3NpdGlvbi5sZWZ0PWUubGVmdCksdGhpcy5faXNOdW1iZXIoZS50b3ApJiYodGhpcy5wb3NpdGlvbi50b3A9ZS50b3ApLHRoaXMuX2lzTnVtYmVyKGUuaGVpZ2h0KSYmKHRoaXMuc2l6ZS5oZWlnaHQ9ZS5oZWlnaHQpLHRoaXMuX2lzTnVtYmVyKGUud2lkdGgpJiYodGhpcy5zaXplLndpZHRoPWUud2lkdGgpfSxfdXBkYXRlUmF0aW86ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wb3NpdGlvbixpPXRoaXMuc2l6ZSxzPXRoaXMuYXhpcztyZXR1cm4gdGhpcy5faXNOdW1iZXIoZS5oZWlnaHQpP2Uud2lkdGg9ZS5oZWlnaHQqdGhpcy5hc3BlY3RSYXRpbzp0aGlzLl9pc051bWJlcihlLndpZHRoKSYmKGUuaGVpZ2h0PWUud2lkdGgvdGhpcy5hc3BlY3RSYXRpbyksInN3Ij09PXMmJihlLmxlZnQ9dC5sZWZ0KyhpLndpZHRoLWUud2lkdGgpLGUudG9wPW51bGwpLCJudyI9PT1zJiYoZS50b3A9dC50b3ArKGkuaGVpZ2h0LWUuaGVpZ2h0KSxlLmxlZnQ9dC5sZWZ0KyhpLndpZHRoLWUud2lkdGgpKSxlfSxfcmVzcGVjdFNpemU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdkJvdW5kYXJpZXMsaT10aGlzLmF4aXMscz10aGlzLl9pc051bWJlcihlLndpZHRoKSYmdC5tYXhXaWR0aCYmdC5tYXhXaWR0aDxlLndpZHRoLG49dGhpcy5faXNOdW1iZXIoZS5oZWlnaHQpJiZ0Lm1heEhlaWdodCYmdC5tYXhIZWlnaHQ8ZS5oZWlnaHQsYT10aGlzLl9pc051bWJlcihlLndpZHRoKSYmdC5taW5XaWR0aCYmdC5taW5XaWR0aD5lLndpZHRoLG89dGhpcy5faXNOdW1iZXIoZS5oZWlnaHQpJiZ0Lm1pbkhlaWdodCYmdC5taW5IZWlnaHQ+ZS5oZWlnaHQscj10aGlzLm9yaWdpbmFsUG9zaXRpb24ubGVmdCt0aGlzLm9yaWdpbmFsU2l6ZS53aWR0aCxoPXRoaXMucG9zaXRpb24udG9wK3RoaXMuc2l6ZS5oZWlnaHQsbD0vc3d8bnd8dy8udGVzdChpKSx1PS9ud3xuZXxuLy50ZXN0KGkpO3JldHVybiBhJiYoZS53aWR0aD10Lm1pbldpZHRoKSxvJiYoZS5oZWlnaHQ9dC5taW5IZWlnaHQpLHMmJihlLndpZHRoPXQubWF4V2lkdGgpLG4mJihlLmhlaWdodD10Lm1heEhlaWdodCksYSYmbCYmKGUubGVmdD1yLXQubWluV2lkdGgpLHMmJmwmJihlLmxlZnQ9ci10Lm1heFdpZHRoKSxvJiZ1JiYoZS50b3A9aC10Lm1pbkhlaWdodCksbiYmdSYmKGUudG9wPWgtdC5tYXhIZWlnaHQpLGUud2lkdGh8fGUuaGVpZ2h0fHxlLmxlZnR8fCFlLnRvcD9lLndpZHRofHxlLmhlaWdodHx8ZS50b3B8fCFlLmxlZnR8fChlLmxlZnQ9bnVsbCk6ZS50b3A9bnVsbCxlfSxfcHJvcG9ydGlvbmFsbHlSZXNpemU6ZnVuY3Rpb24oKXtpZih0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aCl7dmFyIGUsdCxpLHMsbixhPXRoaXMuaGVscGVyfHx0aGlzLmVsZW1lbnQ7Zm9yKGU9MDt0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aD5lO2UrKyl7aWYobj10aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzW2VdLCF0aGlzLmJvcmRlckRpZilmb3IodGhpcy5ib3JkZXJEaWY9W10saT1bbi5jc3MoImJvcmRlclRvcFdpZHRoIiksbi5jc3MoImJvcmRlclJpZ2h0V2lkdGgiKSxuLmNzcygiYm9yZGVyQm90dG9tV2lkdGgiKSxuLmNzcygiYm9yZGVyTGVmdFdpZHRoIildLHM9W24uY3NzKCJwYWRkaW5nVG9wIiksbi5jc3MoInBhZGRpbmdSaWdodCIpLG4uY3NzKCJwYWRkaW5nQm90dG9tIiksbi5jc3MoInBhZGRpbmdMZWZ0IildLHQ9MDtpLmxlbmd0aD50O3QrKyl0aGlzLmJvcmRlckRpZlt0XT0ocGFyc2VJbnQoaVt0XSwxMCl8fDApKyhwYXJzZUludChzW3RdLDEwKXx8MCk7bi5jc3Moe2hlaWdodDphLmhlaWdodCgpLXRoaXMuYm9yZGVyRGlmWzBdLXRoaXMuYm9yZGVyRGlmWzJdfHwwLHdpZHRoOmEud2lkdGgoKS10aGlzLmJvcmRlckRpZlsxXS10aGlzLmJvcmRlckRpZlszXXx8MH0pfX19LF9yZW5kZXJQcm94eTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudCxpPXRoaXMub3B0aW9uczt0aGlzLmVsZW1lbnRPZmZzZXQ9dC5vZmZzZXQoKSx0aGlzLl9oZWxwZXI/KHRoaXMuaGVscGVyPXRoaXMuaGVscGVyfHxlKCI8ZGl2IHN0eWxlPSdvdmVyZmxvdzpoaWRkZW47Jz48L2Rpdj4iKSx0aGlzLmhlbHBlci5hZGRDbGFzcyh0aGlzLl9oZWxwZXIpLmNzcyh7d2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKS0xLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKS0xLHBvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDp0aGlzLmVsZW1lbnRPZmZzZXQubGVmdCsicHgiLHRvcDp0aGlzLmVsZW1lbnRPZmZzZXQudG9wKyJweCIsekluZGV4OisraS56SW5kZXh9KSx0aGlzLmhlbHBlci5hcHBlbmRUbygiYm9keSIpLmRpc2FibGVTZWxlY3Rpb24oKSk6dGhpcy5oZWxwZXI9dGhpcy5lbGVtZW50fSxfY2hhbmdlOntlOmZ1bmN0aW9uKGUsdCl7cmV0dXJue3dpZHRoOnRoaXMub3JpZ2luYWxTaXplLndpZHRoK3R9fSx3OmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5vcmlnaW5hbFNpemUscz10aGlzLm9yaWdpbmFsUG9zaXRpb247cmV0dXJue2xlZnQ6cy5sZWZ0K3Qsd2lkdGg6aS53aWR0aC10fX0sbjpmdW5jdGlvbihlLHQsaSl7dmFyIHM9dGhpcy5vcmlnaW5hbFNpemUsbj10aGlzLm9yaWdpbmFsUG9zaXRpb247cmV0dXJue3RvcDpuLnRvcCtpLGhlaWdodDpzLmhlaWdodC1pfX0sczpmdW5jdGlvbihlLHQsaSl7cmV0dXJue2hlaWdodDp0aGlzLm9yaWdpbmFsU2l6ZS5oZWlnaHQraX19LHNlOmZ1bmN0aW9uKHQsaSxzKXtyZXR1cm4gZS5leHRlbmQodGhpcy5fY2hhbmdlLnMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS5lLmFwcGx5KHRoaXMsW3QsaSxzXSkpfSxzdzpmdW5jdGlvbih0LGkscyl7cmV0dXJuIGUuZXh0ZW5kKHRoaXMuX2NoYW5nZS5zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2Uudy5hcHBseSh0aGlzLFt0LGksc10pKX0sbmU6ZnVuY3Rpb24odCxpLHMpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uubi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLmUuYXBwbHkodGhpcyxbdCxpLHNdKSl9LG53OmZ1bmN0aW9uKHQsaSxzKXtyZXR1cm4gZS5leHRlbmQodGhpcy5fY2hhbmdlLm4uYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS53LmFwcGx5KHRoaXMsW3QsaSxzXSkpfX0sX3Byb3BhZ2F0ZTpmdW5jdGlvbih0LGkpe2UudWkucGx1Z2luLmNhbGwodGhpcyx0LFtpLHRoaXMudWkoKV0pLCJyZXNpemUiIT09dCYmdGhpcy5fdHJpZ2dlcih0LGksdGhpcy51aSgpKX0scGx1Z2luczp7fSx1aTpmdW5jdGlvbigpe3JldHVybntvcmlnaW5hbEVsZW1lbnQ6dGhpcy5vcmlnaW5hbEVsZW1lbnQsZWxlbWVudDp0aGlzLmVsZW1lbnQsaGVscGVyOnRoaXMuaGVscGVyLHBvc2l0aW9uOnRoaXMucG9zaXRpb24sc2l6ZTp0aGlzLnNpemUsb3JpZ2luYWxTaXplOnRoaXMub3JpZ2luYWxTaXplLG9yaWdpbmFsUG9zaXRpb246dGhpcy5vcmlnaW5hbFBvc2l0aW9uLHByZXZTaXplOnRoaXMucHJldlNpemUscHJldlBvc2l0aW9uOnRoaXMucHJldlBvc2l0aW9ufX19KSxlLnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImFuaW1hdGUiLHtzdG9wOmZ1bmN0aW9uKHQpe3ZhciBpPWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLHM9aS5vcHRpb25zLG49aS5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cyxhPW4ubGVuZ3RoJiYvdGV4dGFyZWEvaS50ZXN0KG5bMF0ubm9kZU5hbWUpLG89YSYmaS5faGFzU2Nyb2xsKG5bMF0sImxlZnQiKT8wOmkuc2l6ZURpZmYuaGVpZ2h0LHI9YT8wOmkuc2l6ZURpZmYud2lkdGgsaD17d2lkdGg6aS5zaXplLndpZHRoLXIsaGVpZ2h0Omkuc2l6ZS5oZWlnaHQtb30sbD1wYXJzZUludChpLmVsZW1lbnQuY3NzKCJsZWZ0IiksMTApKyhpLnBvc2l0aW9uLmxlZnQtaS5vcmlnaW5hbFBvc2l0aW9uLmxlZnQpfHxudWxsLHU9cGFyc2VJbnQoaS5lbGVtZW50LmNzcygidG9wIiksMTApKyhpLnBvc2l0aW9uLnRvcC1pLm9yaWdpbmFsUG9zaXRpb24udG9wKXx8bnVsbDtpLmVsZW1lbnQuYW5pbWF0ZShlLmV4dGVuZChoLHUmJmw/e3RvcDp1LGxlZnQ6bH06e30pLHtkdXJhdGlvbjpzLmFuaW1hdGVEdXJhdGlvbixlYXNpbmc6cy5hbmltYXRlRWFzaW5nLHN0ZXA6ZnVuY3Rpb24oKXt2YXIgcz17d2lkdGg6cGFyc2VJbnQoaS5lbGVtZW50LmNzcygid2lkdGgiKSwxMCksaGVpZ2h0OnBhcnNlSW50KGkuZWxlbWVudC5jc3MoImhlaWdodCIpLDEwKSx0b3A6cGFyc2VJbnQoaS5lbGVtZW50LmNzcygidG9wIiksMTApLGxlZnQ6cGFyc2VJbnQoaS5lbGVtZW50LmNzcygibGVmdCIpLDEwKX07biYmbi5sZW5ndGgmJmUoblswXSkuY3NzKHt3aWR0aDpzLndpZHRoLGhlaWdodDpzLmhlaWdodH0pLGkuX3VwZGF0ZUNhY2hlKHMpLGkuX3Byb3BhZ2F0ZSgicmVzaXplIix0KX19KX19KSxlLnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImNvbnRhaW5tZW50Iix7c3RhcnQ6ZnVuY3Rpb24oKXt2YXIgdCxpLHMsbixhLG8scixoPWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLGw9aC5vcHRpb25zLHU9aC5lbGVtZW50LGQ9bC5jb250YWlubWVudCxjPWQgaW5zdGFuY2VvZiBlP2QuZ2V0KDApOi9wYXJlbnQvLnRlc3QoZCk/dS5wYXJlbnQoKS5nZXQoMCk6ZDtjJiYoaC5jb250YWluZXJFbGVtZW50PWUoYyksL2RvY3VtZW50Ly50ZXN0KGQpfHxkPT09ZG9jdW1lbnQ/KGguY29udGFpbmVyT2Zmc2V0PXtsZWZ0OjAsdG9wOjB9LGguY29udGFpbmVyUG9zaXRpb249e2xlZnQ6MCx0b3A6MH0saC5wYXJlbnREYXRhPXtlbGVtZW50OmUoZG9jdW1lbnQpLGxlZnQ6MCx0b3A6MCx3aWR0aDplKGRvY3VtZW50KS53aWR0aCgpLGhlaWdodDplKGRvY3VtZW50KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodH0pOih0PWUoYyksaT1bXSxlKFsiVG9wIiwiUmlnaHQiLCJMZWZ0IiwiQm90dG9tIl0pLmVhY2goZnVuY3Rpb24oZSxzKXtpW2VdPWguX251bSh0LmNzcygicGFkZGluZyIrcykpfSksaC5jb250YWluZXJPZmZzZXQ9dC5vZmZzZXQoKSxoLmNvbnRhaW5lclBvc2l0aW9uPXQucG9zaXRpb24oKSxoLmNvbnRhaW5lclNpemU9e2hlaWdodDp0LmlubmVySGVpZ2h0KCktaVszXSx3aWR0aDp0LmlubmVyV2lkdGgoKS1pWzFdfSxzPWguY29udGFpbmVyT2Zmc2V0LG49aC5jb250YWluZXJTaXplLmhlaWdodCxhPWguY29udGFpbmVyU2l6ZS53aWR0aCxvPWguX2hhc1Njcm9sbChjLCJsZWZ0Iik/Yy5zY3JvbGxXaWR0aDphLHI9aC5faGFzU2Nyb2xsKGMpP2Muc2Nyb2xsSGVpZ2h0Om4saC5wYXJlbnREYXRhPXtlbGVtZW50OmMsbGVmdDpzLmxlZnQsdG9wOnMudG9wLHdpZHRoOm8saGVpZ2h0OnJ9KSl9LHJlc2l6ZTpmdW5jdGlvbih0LGkpe3ZhciBzLG4sYSxvLHI9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIiksaD1yLm9wdGlvbnMsbD1yLmNvbnRhaW5lck9mZnNldCx1PXIucG9zaXRpb24sZD1yLl9hc3BlY3RSYXRpb3x8dC5zaGlmdEtleSxjPXt0b3A6MCxsZWZ0OjB9LHA9ci5jb250YWluZXJFbGVtZW50LGY9ITA7cFswXSE9PWRvY3VtZW50JiYvc3RhdGljLy50ZXN0KHAuY3NzKCJwb3NpdGlvbiIpKSYmKGM9bCksdS5sZWZ0PChyLl9oZWxwZXI/bC5sZWZ0OjApJiYoci5zaXplLndpZHRoPXIuc2l6ZS53aWR0aCsoci5faGVscGVyP3IucG9zaXRpb24ubGVmdC1sLmxlZnQ6ci5wb3NpdGlvbi5sZWZ0LWMubGVmdCksZCYmKHIuc2l6ZS5oZWlnaHQ9ci5zaXplLndpZHRoL3IuYXNwZWN0UmF0aW8sZj0hMSksci5wb3NpdGlvbi5sZWZ0PWguaGVscGVyP2wubGVmdDowKSx1LnRvcDwoci5faGVscGVyP2wudG9wOjApJiYoci5zaXplLmhlaWdodD1yLnNpemUuaGVpZ2h0KyhyLl9oZWxwZXI/ci5wb3NpdGlvbi50b3AtbC50b3A6ci5wb3NpdGlvbi50b3ApLGQmJihyLnNpemUud2lkdGg9ci5zaXplLmhlaWdodCpyLmFzcGVjdFJhdGlvLGY9ITEpLHIucG9zaXRpb24udG9wPXIuX2hlbHBlcj9sLnRvcDowKSxyLm9mZnNldC5sZWZ0PXIucGFyZW50RGF0YS5sZWZ0K3IucG9zaXRpb24ubGVmdCxyLm9mZnNldC50b3A9ci5wYXJlbnREYXRhLnRvcCtyLnBvc2l0aW9uLnRvcCxzPU1hdGguYWJzKChyLl9oZWxwZXI/ci5vZmZzZXQubGVmdC1jLmxlZnQ6ci5vZmZzZXQubGVmdC1sLmxlZnQpK3Iuc2l6ZURpZmYud2lkdGgpLG49TWF0aC5hYnMoKHIuX2hlbHBlcj9yLm9mZnNldC50b3AtYy50b3A6ci5vZmZzZXQudG9wLWwudG9wKStyLnNpemVEaWZmLmhlaWdodCksYT1yLmNvbnRhaW5lckVsZW1lbnQuZ2V0KDApPT09ci5lbGVtZW50LnBhcmVudCgpLmdldCgwKSxvPS9yZWxhdGl2ZXxhYnNvbHV0ZS8udGVzdChyLmNvbnRhaW5lckVsZW1lbnQuY3NzKCJwb3NpdGlvbiIpKSxhJiZvJiYocy09TWF0aC5hYnMoci5wYXJlbnREYXRhLmxlZnQpKSxzK3Iuc2l6ZS53aWR0aD49ci5wYXJlbnREYXRhLndpZHRoJiYoci5zaXplLndpZHRoPXIucGFyZW50RGF0YS53aWR0aC1zLGQmJihyLnNpemUuaGVpZ2h0PXIuc2l6ZS53aWR0aC9yLmFzcGVjdFJhdGlvLGY9ITEpKSxuK3Iuc2l6ZS5oZWlnaHQ+PXIucGFyZW50RGF0YS5oZWlnaHQmJihyLnNpemUuaGVpZ2h0PXIucGFyZW50RGF0YS5oZWlnaHQtbixkJiYoci5zaXplLndpZHRoPXIuc2l6ZS5oZWlnaHQqci5hc3BlY3RSYXRpbyxmPSExKSksZnx8KHIucG9zaXRpb24ubGVmdD1pLnByZXZQb3NpdGlvbi5sZWZ0LHIucG9zaXRpb24udG9wPWkucHJldlBvc2l0aW9uLnRvcCxyLnNpemUud2lkdGg9aS5wcmV2U2l6ZS53aWR0aCxyLnNpemUuaGVpZ2h0PWkucHJldlNpemUuaGVpZ2h0KX0sc3RvcDpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLGk9dC5vcHRpb25zLHM9dC5jb250YWluZXJPZmZzZXQsbj10LmNvbnRhaW5lclBvc2l0aW9uLGE9dC5jb250YWluZXJFbGVtZW50LG89ZSh0LmhlbHBlcikscj1vLm9mZnNldCgpLGg9by5vdXRlcldpZHRoKCktdC5zaXplRGlmZi53aWR0aCxsPW8ub3V0ZXJIZWlnaHQoKS10LnNpemVEaWZmLmhlaWdodDt0Ll9oZWxwZXImJiFpLmFuaW1hdGUmJi9yZWxhdGl2ZS8udGVzdChhLmNzcygicG9zaXRpb24iKSkmJmUodGhpcykuY3NzKHtsZWZ0OnIubGVmdC1uLmxlZnQtcy5sZWZ0LHdpZHRoOmgsaGVpZ2h0Omx9KSx0Ll9oZWxwZXImJiFpLmFuaW1hdGUmJi9zdGF0aWMvLnRlc3QoYS5jc3MoInBvc2l0aW9uIikpJiZlKHRoaXMpLmNzcyh7bGVmdDpyLmxlZnQtbi5sZWZ0LXMubGVmdCx3aWR0aDpoLGhlaWdodDpsfSl9fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJhbHNvUmVzaXplIix7c3RhcnQ6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLnJlc2l6YWJsZSgiaW5zdGFuY2UiKSxpPXQub3B0aW9ucyxzPWZ1bmN0aW9uKHQpe2UodCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7dC5kYXRhKCJ1aS1yZXNpemFibGUtYWxzb3Jlc2l6ZSIse3dpZHRoOnBhcnNlSW50KHQud2lkdGgoKSwxMCksaGVpZ2h0OnBhcnNlSW50KHQuaGVpZ2h0KCksMTApLGxlZnQ6cGFyc2VJbnQodC5jc3MoImxlZnQiKSwxMCksdG9wOnBhcnNlSW50KHQuY3NzKCJ0b3AiKSwxMCl9KX0pfTsib2JqZWN0IiE9dHlwZW9mIGkuYWxzb1Jlc2l6ZXx8aS5hbHNvUmVzaXplLnBhcmVudE5vZGU/cyhpLmFsc29SZXNpemUpOmkuYWxzb1Jlc2l6ZS5sZW5ndGg/KGkuYWxzb1Jlc2l6ZT1pLmFsc29SZXNpemVbMF0scyhpLmFsc29SZXNpemUpKTplLmVhY2goaS5hbHNvUmVzaXplLGZ1bmN0aW9uKGUpe3MoZSl9KX0scmVzaXplOmZ1bmN0aW9uKHQsaSl7dmFyIHM9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIiksbj1zLm9wdGlvbnMsYT1zLm9yaWdpbmFsU2l6ZSxvPXMub3JpZ2luYWxQb3NpdGlvbixyPXtoZWlnaHQ6cy5zaXplLmhlaWdodC1hLmhlaWdodHx8MCx3aWR0aDpzLnNpemUud2lkdGgtYS53aWR0aHx8MCx0b3A6cy5wb3NpdGlvbi50b3Atby50b3B8fDAsbGVmdDpzLnBvc2l0aW9uLmxlZnQtby5sZWZ0fHwwfSxoPWZ1bmN0aW9uKHQscyl7ZSh0KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxuPWUodGhpcykuZGF0YSgidWktcmVzaXphYmxlLWFsc29yZXNpemUiKSxhPXt9LG89cyYmcy5sZW5ndGg/czp0LnBhcmVudHMoaS5vcmlnaW5hbEVsZW1lbnRbMF0pLmxlbmd0aD9bIndpZHRoIiwiaGVpZ2h0Il06WyJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiXTtlLmVhY2gobyxmdW5jdGlvbihlLHQpe3ZhciBpPShuW3RdfHwwKSsoclt0XXx8MCk7aSYmaT49MCYmKGFbdF09aXx8bnVsbCl9KSx0LmNzcyhhKX0pfTsib2JqZWN0IiE9dHlwZW9mIG4uYWxzb1Jlc2l6ZXx8bi5hbHNvUmVzaXplLm5vZGVUeXBlP2gobi5hbHNvUmVzaXplKTplLmVhY2gobi5hbHNvUmVzaXplLGZ1bmN0aW9uKGUsdCl7aChlLHQpfSl9LHN0b3A6ZnVuY3Rpb24oKXtlKHRoaXMpLnJlbW92ZURhdGEoInJlc2l6YWJsZS1hbHNvcmVzaXplIil9fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJnaG9zdCIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5yZXNpemFibGUoImluc3RhbmNlIiksaT10Lm9wdGlvbnMscz10LnNpemU7dC5naG9zdD10Lm9yaWdpbmFsRWxlbWVudC5jbG9uZSgpLHQuZ2hvc3QuY3NzKHtvcGFjaXR5Oi4yNSxkaXNwbGF5OiJibG9jayIscG9zaXRpb246InJlbGF0aXZlIixoZWlnaHQ6cy5oZWlnaHQsd2lkdGg6cy53aWR0aCxtYXJnaW46MCxsZWZ0OjAsdG9wOjB9KS5hZGRDbGFzcygidWktcmVzaXphYmxlLWdob3N0IikuYWRkQ2xhc3MoInN0cmluZyI9PXR5cGVvZiBpLmdob3N0P2kuZ2hvc3Q6IiIpLHQuZ2hvc3QuYXBwZW5kVG8odC5oZWxwZXIpfSxyZXNpemU6ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLnJlc2l6YWJsZSgiaW5zdGFuY2UiKTt0Lmdob3N0JiZ0Lmdob3N0LmNzcyh7cG9zaXRpb246InJlbGF0aXZlIixoZWlnaHQ6dC5zaXplLmhlaWdodCx3aWR0aDp0LnNpemUud2lkdGh9KX0sc3RvcDpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpO3QuZ2hvc3QmJnQuaGVscGVyJiZ0LmhlbHBlci5nZXQoMCkucmVtb3ZlQ2hpbGQodC5naG9zdC5nZXQoMCkpfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiZ3JpZCIse3Jlc2l6ZTpmdW5jdGlvbigpe3ZhciB0PWUodGhpcykucmVzaXphYmxlKCJpbnN0YW5jZSIpLGk9dC5vcHRpb25zLHM9dC5zaXplLG49dC5vcmlnaW5hbFNpemUsYT10Lm9yaWdpbmFsUG9zaXRpb24sbz10LmF4aXMscj0ibnVtYmVyIj09dHlwZW9mIGkuZ3JpZD9baS5ncmlkLGkuZ3JpZF06aS5ncmlkLGg9clswXXx8MSxsPXJbMV18fDEsdT1NYXRoLnJvdW5kKChzLndpZHRoLW4ud2lkdGgpL2gpKmgsZD1NYXRoLnJvdW5kKChzLmhlaWdodC1uLmhlaWdodCkvbCkqbCxjPW4ud2lkdGgrdSxwPW4uaGVpZ2h0K2QsZj1pLm1heFdpZHRoJiZjPmkubWF4V2lkdGgsbT1pLm1heEhlaWdodCYmcD5pLm1heEhlaWdodCxnPWkubWluV2lkdGgmJmkubWluV2lkdGg+Yyx2PWkubWluSGVpZ2h0JiZpLm1pbkhlaWdodD5wO2kuZ3JpZD1yLGcmJihjKz1oKSx2JiYocCs9bCksZiYmKGMtPWgpLG0mJihwLT1sKSwvXihzZXxzfGUpJC8udGVzdChvKT8odC5zaXplLndpZHRoPWMsdC5zaXplLmhlaWdodD1wKTovXihuZSkkLy50ZXN0KG8pPyh0LnNpemUud2lkdGg9Yyx0LnNpemUuaGVpZ2h0PXAsdC5wb3NpdGlvbi50b3A9YS50b3AtZCk6L14oc3cpJC8udGVzdChvKT8odC5zaXplLndpZHRoPWMsdC5zaXplLmhlaWdodD1wLHQucG9zaXRpb24ubGVmdD1hLmxlZnQtdSk6KHAtbD4wPyh0LnNpemUuaGVpZ2h0PXAsdC5wb3NpdGlvbi50b3A9YS50b3AtZCk6KHQuc2l6ZS5oZWlnaHQ9bCx0LnBvc2l0aW9uLnRvcD1hLnRvcCtuLmhlaWdodC1sKSxjLWg+MD8odC5zaXplLndpZHRoPWMsdC5wb3NpdGlvbi5sZWZ0PWEubGVmdC11KToodC5zaXplLndpZHRoPWgsdC5wb3NpdGlvbi5sZWZ0PWEubGVmdCtuLndpZHRoLWgpKX19KSxlLnVpLnJlc2l6YWJsZSxlLndpZGdldCgidWkuYWNjb3JkaW9uIix7dmVyc2lvbjoiMS4xMS4wIixvcHRpb25zOnthY3RpdmU6MCxhbmltYXRlOnt9LGNvbGxhcHNpYmxlOiExLGV2ZW50OiJjbGljayIsaGVhZGVyOiI+IGxpID4gOmZpcnN0LWNoaWxkLD4gOm5vdChsaSk6ZXZlbiIsaGVpZ2h0U3R5bGU6ImF1dG8iLGljb25zOnthY3RpdmVIZWFkZXI6InVpLWljb24tdHJpYW5nbGUtMS1zIixoZWFkZXI6InVpLWljb24tdHJpYW5nbGUtMS1lIn0sYWN0aXZhdGU6bnVsbCxiZWZvcmVBY3RpdmF0ZTpudWxsfSxoaWRlUHJvcHM6e2JvcmRlclRvcFdpZHRoOiJoaWRlIixib3JkZXJCb3R0b21XaWR0aDoiaGlkZSIscGFkZGluZ1RvcDoiaGlkZSIscGFkZGluZ0JvdHRvbToiaGlkZSIsaGVpZ2h0OiJoaWRlIn0sc2hvd1Byb3BzOntib3JkZXJUb3BXaWR0aDoic2hvdyIsYm9yZGVyQm90dG9tV2lkdGg6InNob3ciLHBhZGRpbmdUb3A6InNob3ciLHBhZGRpbmdCb3R0b206InNob3ciLGhlaWdodDoic2hvdyJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnM7dGhpcy5wcmV2U2hvdz10aGlzLnByZXZIaWRlPWUoKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWFjY29yZGlvbiB1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0IikuYXR0cigicm9sZSIsInRhYmxpc3QiKSx0LmNvbGxhcHNpYmxlfHx0LmFjdGl2ZSE9PSExJiZudWxsIT10LmFjdGl2ZXx8KHQuYWN0aXZlPTApLHRoaXMuX3Byb2Nlc3NQYW5lbHMoKSwwPnQuYWN0aXZlJiYodC5hY3RpdmUrPXRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMuX3JlZnJlc2goKX0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybntoZWFkZXI6dGhpcy5hY3RpdmUscGFuZWw6dGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuYWN0aXZlLm5leHQoKTplKCl9fSxfY3JlYXRlSWNvbnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuaWNvbnM7dCYmKGUoIjxzcGFuPiIpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyLWljb24gdWktaWNvbiAiK3QuaGVhZGVyKS5wcmVwZW5kVG8odGhpcy5oZWFkZXJzKSx0aGlzLmFjdGl2ZS5jaGlsZHJlbigiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiIpLnJlbW92ZUNsYXNzKHQuaGVhZGVyKS5hZGRDbGFzcyh0LmFjdGl2ZUhlYWRlciksdGhpcy5oZWFkZXJzLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taWNvbnMiKSl9LF9kZXN0cm95SWNvbnM6ZnVuY3Rpb24oKXt0aGlzLmhlYWRlcnMucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1pY29ucyIpLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGU7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24gdWktd2lkZ2V0IHVpLWhlbHBlci1yZXNldCIpLnJlbW92ZUF0dHIoInJvbGUiKSx0aGlzLmhlYWRlcnMucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXIgdWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCB1aS1jb3JuZXItdG9wIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtZXhwYW5kZWQiKS5yZW1vdmVBdHRyKCJhcmlhLXNlbGVjdGVkIikucmVtb3ZlQXR0cigiYXJpYS1jb250cm9scyIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLl9kZXN0cm95SWNvbnMoKSxlPXRoaXMuaGVhZGVycy5uZXh0KCkucmVtb3ZlQ2xhc3MoInVpLWhlbHBlci1yZXNldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIHVpLWFjY29yZGlvbi1jb250ZW50IHVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCIpLmNzcygiZGlzcGxheSIsIiIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLnJlbW92ZUF0dHIoImFyaWEtbGFiZWxsZWRieSIpLnJlbW92ZVVuaXF1ZUlkKCksImNvbnRlbnQiIT09dGhpcy5vcHRpb25zLmhlaWdodFN0eWxlJiZlLmNzcygiaGVpZ2h0IiwiIil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4iYWN0aXZlIj09PWU/KHRoaXMuX2FjdGl2YXRlKHQpLHZvaWQgMCk6KCJldmVudCI9PT1lJiYodGhpcy5vcHRpb25zLmV2ZW50JiZ0aGlzLl9vZmYodGhpcy5oZWFkZXJzLHRoaXMub3B0aW9ucy5ldmVudCksdGhpcy5fc2V0dXBFdmVudHModCkpLHRoaXMuX3N1cGVyKGUsdCksImNvbGxhcHNpYmxlIiE9PWV8fHR8fHRoaXMub3B0aW9ucy5hY3RpdmUhPT0hMXx8dGhpcy5fYWN0aXZhdGUoMCksImljb25zIj09PWUmJih0aGlzLl9kZXN0cm95SWNvbnMoKSx0JiZ0aGlzLl9jcmVhdGVJY29ucygpKSwiZGlzYWJsZWQiPT09ZSYmKHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCkuYXR0cigiYXJpYS1kaXNhYmxlZCIsdCksdGhpcy5oZWFkZXJzLmFkZCh0aGlzLmhlYWRlcnMubmV4dCgpKS50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCkpLHZvaWQgMCl9LF9rZXlkb3duOmZ1bmN0aW9uKHQpe2lmKCF0LmFsdEtleSYmIXQuY3RybEtleSl7dmFyIGk9ZS51aS5rZXlDb2RlLHM9dGhpcy5oZWFkZXJzLmxlbmd0aCxuPXRoaXMuaGVhZGVycy5pbmRleCh0LnRhcmdldCksYT0hMTtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGkuUklHSFQ6Y2FzZSBpLkRPV046YT10aGlzLmhlYWRlcnNbKG4rMSklc107YnJlYWs7Y2FzZSBpLkxFRlQ6Y2FzZSBpLlVQOmE9dGhpcy5oZWFkZXJzWyhuLTErcyklc107YnJlYWs7Y2FzZSBpLlNQQUNFOmNhc2UgaS5FTlRFUjp0aGlzLl9ldmVudEhhbmRsZXIodCk7YnJlYWs7Y2FzZSBpLkhPTUU6YT10aGlzLmhlYWRlcnNbMF07YnJlYWs7Y2FzZSBpLkVORDphPXRoaXMuaGVhZGVyc1tzLTFdfWEmJihlKHQudGFyZ2V0KS5hdHRyKCJ0YWJJbmRleCIsLTEpLGUoYSkuYXR0cigidGFiSW5kZXgiLDApLGEuZm9jdXMoKSx0LnByZXZlbnREZWZhdWx0KCkpfX0sX3BhbmVsS2V5RG93bjpmdW5jdGlvbih0KXt0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuVVAmJnQuY3RybEtleSYmZSh0LmN1cnJlbnRUYXJnZXQpLnByZXYoKS5mb2N1cygpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3RoaXMuX3Byb2Nlc3NQYW5lbHMoKSx0LmFjdGl2ZT09PSExJiZ0LmNvbGxhcHNpYmxlPT09ITB8fCF0aGlzLmhlYWRlcnMubGVuZ3RoPyh0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpOnQuYWN0aXZlPT09ITE/dGhpcy5fYWN0aXZhdGUoMCk6dGhpcy5hY3RpdmUubGVuZ3RoJiYhZS5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5hY3RpdmVbMF0pP3RoaXMuaGVhZGVycy5sZW5ndGg9PT10aGlzLmhlYWRlcnMuZmluZCgiLnVpLXN0YXRlLWRpc2FibGVkIikubGVuZ3RoPyh0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpOnRoaXMuX2FjdGl2YXRlKE1hdGgubWF4KDAsdC5hY3RpdmUtMSkpOnQuYWN0aXZlPXRoaXMuaGVhZGVycy5pbmRleCh0aGlzLmFjdGl2ZSksdGhpcy5fZGVzdHJveUljb25zKCksdGhpcy5fcmVmcmVzaCgpfSxfcHJvY2Vzc1BhbmVsczpmdW5jdGlvbigpe3RoaXMuaGVhZGVycz10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaGVhZGVyKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKSx0aGlzLmhlYWRlcnMubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudCB1aS1oZWxwZXItcmVzZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpLmZpbHRlcigiOm5vdCgudWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlKSIpLmhpZGUoKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdCxpPXRoaXMub3B0aW9ucyxzPWkuaGVpZ2h0U3R5bGUsbj10aGlzLmVsZW1lbnQucGFyZW50KCk7dGhpcy5hY3RpdmU9dGhpcy5fZmluZEFjdGl2ZShpLmFjdGl2ZSkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSB1aS1jb3JuZXItdG9wIikucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwiKSx0aGlzLmFjdGl2ZS5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSIpLnNob3coKSx0aGlzLmhlYWRlcnMuYXR0cigicm9sZSIsInRhYiIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9dC51bmlxdWVJZCgpLmF0dHIoImlkIikscz10Lm5leHQoKSxuPXMudW5pcXVlSWQoKS5hdHRyKCJpZCIpO3QuYXR0cigiYXJpYS1jb250cm9scyIsbikscy5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLGkpfSkubmV4dCgpLmF0dHIoInJvbGUiLCJ0YWJwYW5lbCIpLHRoaXMuaGVhZGVycy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLCJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSkubmV4dCgpLmF0dHIoeyJhcmlhLWhpZGRlbiI6InRydWUifSkuaGlkZSgpLHRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLmFjdGl2ZS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLCJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pLm5leHQoKS5hdHRyKHsiYXJpYS1oaWRkZW4iOiJmYWxzZSJ9KTp0aGlzLmhlYWRlcnMuZXEoMCkuYXR0cigidGFiSW5kZXgiLDApLHRoaXMuX2NyZWF0ZUljb25zKCksdGhpcy5fc2V0dXBFdmVudHMoaS5ldmVudCksImZpbGwiPT09cz8odD1uLmhlaWdodCgpLHRoaXMuZWxlbWVudC5zaWJsaW5ncygiOnZpc2libGUiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9ZSh0aGlzKSxzPWkuY3NzKCJwb3NpdGlvbiIpOyJhYnNvbHV0ZSIhPT1zJiYiZml4ZWQiIT09cyYmKHQtPWkub3V0ZXJIZWlnaHQoITApKX0pLHRoaXMuaGVhZGVycy5lYWNoKGZ1bmN0aW9uKCl7dC09ZSh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmhlaWdodChNYXRoLm1heCgwLHQtZSh0aGlzKS5pbm5lckhlaWdodCgpK2UodGhpcykuaGVpZ2h0KCkpKX0pLmNzcygib3ZlcmZsb3ciLCJhdXRvIikpOiJhdXRvIj09PXMmJih0PTAsdGhpcy5oZWFkZXJzLm5leHQoKS5lYWNoKGZ1bmN0aW9uKCl7dD1NYXRoLm1heCh0LGUodGhpcykuY3NzKCJoZWlnaHQiLCIiKS5oZWlnaHQoKSl9KS5oZWlnaHQodCkpfSxfYWN0aXZhdGU6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fZmluZEFjdGl2ZSh0KVswXTtpIT09dGhpcy5hY3RpdmVbMF0mJihpPWl8fHRoaXMuYWN0aXZlWzBdLHRoaXMuX2V2ZW50SGFuZGxlcih7dGFyZ2V0OmksY3VycmVudFRhcmdldDppLHByZXZlbnREZWZhdWx0OmUubm9vcH0pKX0sX2ZpbmRBY3RpdmU6ZnVuY3Rpb24odCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0P3RoaXMuaGVhZGVycy5lcSh0KTplKCl9LF9zZXR1cEV2ZW50czpmdW5jdGlvbih0KXt2YXIgaT17a2V5ZG93bjoiX2tleWRvd24ifTt0JiZlLmVhY2godC5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7aVt0XT0iX2V2ZW50SGFuZGxlciJ9KSx0aGlzLl9vZmYodGhpcy5oZWFkZXJzLmFkZCh0aGlzLmhlYWRlcnMubmV4dCgpKSksdGhpcy5fb24odGhpcy5oZWFkZXJzLGkpLHRoaXMuX29uKHRoaXMuaGVhZGVycy5uZXh0KCkse2tleWRvd246Il9wYW5lbEtleURvd24ifSksdGhpcy5faG92ZXJhYmxlKHRoaXMuaGVhZGVycyksdGhpcy5fZm9jdXNhYmxlKHRoaXMuaGVhZGVycyl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5vcHRpb25zLHM9dGhpcy5hY3RpdmUsbj1lKHQuY3VycmVudFRhcmdldCksYT1uWzBdPT09c1swXSxvPWEmJmkuY29sbGFwc2libGUscj1vP2UoKTpuLm5leHQoKSxoPXMubmV4dCgpLGw9e29sZEhlYWRlcjpzLG9sZFBhbmVsOmgsbmV3SGVhZGVyOm8/ZSgpOm4sbmV3UGFuZWw6cn07dC5wcmV2ZW50RGVmYXVsdCgpLGEmJiFpLmNvbGxhcHNpYmxlfHx0aGlzLl90cmlnZ2VyKCJiZWZvcmVBY3RpdmF0ZSIsdCxsKT09PSExfHwoaS5hY3RpdmU9bz8hMTp0aGlzLmhlYWRlcnMuaW5kZXgobiksdGhpcy5hY3RpdmU9YT9lKCk6bix0aGlzLl90b2dnbGUobCkscy5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksaS5pY29ucyYmcy5jaGlsZHJlbigiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiIpLnJlbW92ZUNsYXNzKGkuaWNvbnMuYWN0aXZlSGVhZGVyKS5hZGRDbGFzcyhpLmljb25zLmhlYWRlciksYXx8KG4ucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwiKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIHVpLWNvcm5lci10b3AiKSxpLmljb25zJiZuLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlQ2xhc3MoaS5pY29ucy5oZWFkZXIpLmFkZENsYXNzKGkuaWNvbnMuYWN0aXZlSGVhZGVyKSxuLm5leHQoKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIikpKQotfSxfdG9nZ2xlOmZ1bmN0aW9uKHQpe3ZhciBpPXQubmV3UGFuZWwscz10aGlzLnByZXZTaG93Lmxlbmd0aD90aGlzLnByZXZTaG93OnQub2xkUGFuZWw7dGhpcy5wcmV2U2hvdy5hZGQodGhpcy5wcmV2SGlkZSkuc3RvcCghMCwhMCksdGhpcy5wcmV2U2hvdz1pLHRoaXMucHJldkhpZGU9cyx0aGlzLm9wdGlvbnMuYW5pbWF0ZT90aGlzLl9hbmltYXRlKGkscyx0KToocy5oaWRlKCksaS5zaG93KCksdGhpcy5fdG9nZ2xlQ29tcGxldGUodCkpLHMuYXR0cih7ImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxzLnByZXYoKS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSxpLmxlbmd0aCYmcy5sZW5ndGg/cy5wcmV2KCkuYXR0cih7dGFiSW5kZXg6LTEsImFyaWEtZXhwYW5kZWQiOiJmYWxzZSJ9KTppLmxlbmd0aCYmdGhpcy5oZWFkZXJzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiAwPT09ZSh0aGlzKS5hdHRyKCJ0YWJJbmRleCIpfSkuYXR0cigidGFiSW5kZXgiLC0xKSxpLmF0dHIoImFyaWEtaGlkZGVuIiwiZmFsc2UiKS5wcmV2KCkuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJ0cnVlIix0YWJJbmRleDowLCJhcmlhLWV4cGFuZGVkIjoidHJ1ZSJ9KX0sX2FuaW1hdGU6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzLG4sYSxvPXRoaXMscj0wLGg9ZS5sZW5ndGgmJighdC5sZW5ndGh8fGUuaW5kZXgoKTx0LmluZGV4KCkpLGw9dGhpcy5vcHRpb25zLmFuaW1hdGV8fHt9LHU9aCYmbC5kb3dufHxsLGQ9ZnVuY3Rpb24oKXtvLl90b2dnbGVDb21wbGV0ZShpKX07cmV0dXJuIm51bWJlciI9PXR5cGVvZiB1JiYoYT11KSwic3RyaW5nIj09dHlwZW9mIHUmJihuPXUpLG49bnx8dS5lYXNpbmd8fGwuZWFzaW5nLGE9YXx8dS5kdXJhdGlvbnx8bC5kdXJhdGlvbix0Lmxlbmd0aD9lLmxlbmd0aD8ocz1lLnNob3coKS5vdXRlckhlaWdodCgpLHQuYW5pbWF0ZSh0aGlzLmhpZGVQcm9wcyx7ZHVyYXRpb246YSxlYXNpbmc6bixzdGVwOmZ1bmN0aW9uKGUsdCl7dC5ub3c9TWF0aC5yb3VuZChlKX19KSxlLmhpZGUoKS5hbmltYXRlKHRoaXMuc2hvd1Byb3BzLHtkdXJhdGlvbjphLGVhc2luZzpuLGNvbXBsZXRlOmQsc3RlcDpmdW5jdGlvbihlLGkpe2kubm93PU1hdGgucm91bmQoZSksImhlaWdodCIhPT1pLnByb3A/cis9aS5ub3c6ImNvbnRlbnQiIT09by5vcHRpb25zLmhlaWdodFN0eWxlJiYoaS5ub3c9TWF0aC5yb3VuZChzLXQub3V0ZXJIZWlnaHQoKS1yKSxyPTApfX0pLHZvaWQgMCk6dC5hbmltYXRlKHRoaXMuaGlkZVByb3BzLGEsbixkKTplLmFuaW1hdGUodGhpcy5zaG93UHJvcHMsYSxuLGQpfSxfdG9nZ2xlQ29tcGxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vbGRQYW5lbDt0LnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKS5wcmV2KCkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci10b3AiKS5hZGRDbGFzcygidWktY29ybmVyLWFsbCIpLHQubGVuZ3RoJiYodC5wYXJlbnQoKVswXS5jbGFzc05hbWU9dC5wYXJlbnQoKVswXS5jbGFzc05hbWUpLHRoaXMuX3RyaWdnZXIoImFjdGl2YXRlIixudWxsLGUpfX0pLGUud2lkZ2V0KCJ1aS5tZW51Iix7dmVyc2lvbjoiMS4xMS4wIixkZWZhdWx0RWxlbWVudDoiPHVsPiIsZGVsYXk6MzAwLG9wdGlvbnM6e2ljb25zOntzdWJtZW51OiJ1aS1pY29uLWNhcmF0LTEtZSJ9LGl0ZW1zOiI+ICoiLG1lbnVzOiJ1bCIscG9zaXRpb246e215OiJsZWZ0LTEgdG9wIixhdDoicmlnaHQgdG9wIn0scm9sZToibWVudSIsYmx1cjpudWxsLGZvY3VzOm51bGwsc2VsZWN0Om51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZU1lbnU9dGhpcy5lbGVtZW50LHRoaXMubW91c2VIYW5kbGVkPSExLHRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1tZW51IHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCIpLnRvZ2dsZUNsYXNzKCJ1aS1tZW51LWljb25zIiwhIXRoaXMuZWxlbWVudC5maW5kKCIudWktaWNvbiIpLmxlbmd0aCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSx0YWJJbmRleDowfSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKSx0aGlzLl9vbih7Im1vdXNlZG93biAudWktbWVudS1pdGVtIjpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9LCJjbGljayAudWktbWVudS1pdGVtIjpmdW5jdGlvbih0KXt2YXIgaT1lKHQudGFyZ2V0KTshdGhpcy5tb3VzZUhhbmRsZWQmJmkubm90KCIudWktc3RhdGUtZGlzYWJsZWQiKS5sZW5ndGgmJih0aGlzLnNlbGVjdCh0KSx0LmlzUHJvcGFnYXRpb25TdG9wcGVkKCl8fCh0aGlzLm1vdXNlSGFuZGxlZD0hMCksaS5oYXMoIi51aS1tZW51IikubGVuZ3RoP3RoaXMuZXhwYW5kKHQpOiF0aGlzLmVsZW1lbnQuaXMoIjpmb2N1cyIpJiZlKHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCkuY2xvc2VzdCgiLnVpLW1lbnUiKS5sZW5ndGgmJih0aGlzLmVsZW1lbnQudHJpZ2dlcigiZm9jdXMiLFshMF0pLHRoaXMuYWN0aXZlJiYxPT09dGhpcy5hY3RpdmUucGFyZW50cygiLnVpLW1lbnUiKS5sZW5ndGgmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSkpfSwibW91c2VlbnRlciAudWktbWVudS1pdGVtIjpmdW5jdGlvbih0KXt2YXIgaT1lKHQuY3VycmVudFRhcmdldCk7aS5zaWJsaW5ncygiLnVpLXN0YXRlLWFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLmZvY3VzKHQsaSl9LG1vdXNlbGVhdmU6ImNvbGxhcHNlQWxsIiwibW91c2VsZWF2ZSAudWktbWVudSI6ImNvbGxhcHNlQWxsIixmb2N1czpmdW5jdGlvbihlLHQpe3ZhciBpPXRoaXMuYWN0aXZlfHx0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmVxKDApO3R8fHRoaXMuZm9jdXMoZSxpKX0sYmx1cjpmdW5jdGlvbih0KXt0aGlzLl9kZWxheShmdW5jdGlvbigpe2UuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCl8fHRoaXMuY29sbGFwc2VBbGwodCl9KX0sa2V5ZG93bjoiX2tleWRvd24ifSksdGhpcy5yZWZyZXNoKCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx7Y2xpY2s6ZnVuY3Rpb24oZSl7dGhpcy5fY2xvc2VPbkRvY3VtZW50Q2xpY2soZSkmJnRoaXMuY29sbGFwc2VBbGwoZSksdGhpcy5tb3VzZUhhbmRsZWQ9ITF9fSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIpLmZpbmQoIi51aS1tZW51IikuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJ1aS1tZW51IHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1tZW51LWljb25zIHVpLWZyb250IikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlQXR0cigiYXJpYS1sYWJlbGxlZGJ5IikucmVtb3ZlQXR0cigiYXJpYS1leHBhbmRlZCIpLnJlbW92ZUF0dHIoImFyaWEtaGlkZGVuIikucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpLnJlbW92ZVVuaXF1ZUlkKCkuc2hvdygpLHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudS1pdGVtIikucmVtb3ZlQ2xhc3MoInVpLW1lbnUtaXRlbSIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWRpc2FibGVkIikucmVtb3ZlVW5pcXVlSWQoKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWhhc3BvcHVwIikuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0LmRhdGEoInVpLW1lbnUtc3VibWVudS1jYXJhdCIpJiZ0LnJlbW92ZSgpfSksdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51LWRpdmlkZXIiKS5yZW1vdmVDbGFzcygidWktbWVudS1kaXZpZGVyIHVpLXdpZGdldC1jb250ZW50Iil9LF9rZXlkb3duOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGkoZSl7cmV0dXJuIGUucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpfXZhciBzLG4sYSxvLHIsaD0hMDtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGUudWkua2V5Q29kZS5QQUdFX1VQOnRoaXMucHJldmlvdXNQYWdlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfRE9XTjp0aGlzLm5leHRQYWdlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6dGhpcy5fbW92ZSgiZmlyc3QiLCJmaXJzdCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOnRoaXMuX21vdmUoImxhc3QiLCJsYXN0Iix0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDp0aGlzLnByZXZpb3VzKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkRPV046dGhpcy5uZXh0KHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkxFRlQ6dGhpcy5jb2xsYXBzZSh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5SSUdIVDp0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSYmdGhpcy5leHBhbmQodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5URVI6Y2FzZSBlLnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5fYWN0aXZhdGUodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRVNDQVBFOnRoaXMuY29sbGFwc2UodCk7YnJlYWs7ZGVmYXVsdDpoPSExLG49dGhpcy5wcmV2aW91c0ZpbHRlcnx8IiIsYT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQua2V5Q29kZSksbz0hMSxjbGVhclRpbWVvdXQodGhpcy5maWx0ZXJUaW1lciksYT09PW4/bz0hMDphPW4rYSxyPVJlZ0V4cCgiXiIraShhKSwiaSIpLHM9dGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gci50ZXN0KGUodGhpcykudGV4dCgpKX0pLHM9byYmLTEhPT1zLmluZGV4KHRoaXMuYWN0aXZlLm5leHQoKSk/dGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpOnMscy5sZW5ndGh8fChhPVN0cmluZy5mcm9tQ2hhckNvZGUodC5rZXlDb2RlKSxyPVJlZ0V4cCgiXiIraShhKSwiaSIpLHM9dGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gci50ZXN0KGUodGhpcykudGV4dCgpKX0pKSxzLmxlbmd0aD8odGhpcy5mb2N1cyh0LHMpLHMubGVuZ3RoPjE/KHRoaXMucHJldmlvdXNGaWx0ZXI9YSx0aGlzLmZpbHRlclRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXJ9LDFlMykpOmRlbGV0ZSB0aGlzLnByZXZpb3VzRmlsdGVyKTpkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcn1oJiZ0LnByZXZlbnREZWZhdWx0KCl9LF9hY3RpdmF0ZTpmdW5jdGlvbihlKXt0aGlzLmFjdGl2ZS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIil8fCh0aGlzLmFjdGl2ZS5pcygiW2FyaWEtaGFzcG9wdXA9J3RydWUnXSIpP3RoaXMuZXhwYW5kKGUpOnRoaXMuc2VsZWN0KGUpKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0LGkscz10aGlzLG49dGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUsYT10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMubWVudXMpO3RoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktbWVudS1pY29ucyIsISF0aGlzLmVsZW1lbnQuZmluZCgiLnVpLWljb24iKS5sZW5ndGgpLGEuZmlsdGVyKCI6bm90KC51aS1tZW51KSIpLmFkZENsYXNzKCJ1aS1tZW51IHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1mcm9udCIpLmhpZGUoKS5hdHRyKHtyb2xlOnRoaXMub3B0aW9ucy5yb2xlLCJhcmlhLWhpZGRlbiI6InRydWUiLCJhcmlhLWV4cGFuZGVkIjoiZmFsc2UifSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyksaT10LnBhcmVudCgpLHM9ZSgiPHNwYW4+IikuYWRkQ2xhc3MoInVpLW1lbnUtaWNvbiB1aS1pY29uICIrbikuZGF0YSgidWktbWVudS1zdWJtZW51LWNhcmF0IiwhMCk7aS5hdHRyKCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIpLnByZXBlbmQocyksdC5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLGkuYXR0cigiaWQiKSl9KSx0PWEuYWRkKHRoaXMuZWxlbWVudCksaT10LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKSxpLm5vdCgiLnVpLW1lbnUtaXRlbSIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3MuX2lzRGl2aWRlcih0KSYmdC5hZGRDbGFzcygidWktd2lkZ2V0LWNvbnRlbnQgdWktbWVudS1kaXZpZGVyIil9KSxpLm5vdCgiLnVpLW1lbnUtaXRlbSwgLnVpLW1lbnUtZGl2aWRlciIpLmFkZENsYXNzKCJ1aS1tZW51LWl0ZW0iKS51bmlxdWVJZCgpLmF0dHIoe3RhYkluZGV4Oi0xLHJvbGU6dGhpcy5faXRlbVJvbGUoKX0pLGkuZmlsdGVyKCIudWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIiwidHJ1ZSIpLHRoaXMuYWN0aXZlJiYhZS5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5hY3RpdmVbMF0pJiZ0aGlzLmJsdXIoKX0sX2l0ZW1Sb2xlOmZ1bmN0aW9uKCl7cmV0dXJue21lbnU6Im1lbnVpdGVtIixsaXN0Ym94OiJvcHRpb24ifVt0aGlzLm9wdGlvbnMucm9sZV19LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXsiaWNvbnMiPT09ZSYmdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51LWljb24iKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaWNvbnMuc3VibWVudSkuYWRkQ2xhc3ModC5zdWJtZW51KSwiZGlzYWJsZWQiPT09ZSYmdGhpcy5lbGVtZW50LnRvZ2dsZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIsISF0KS5hdHRyKCJhcmlhLWRpc2FibGVkIix0KSx0aGlzLl9zdXBlcihlLHQpfSxmb2N1czpmdW5jdGlvbihlLHQpe3ZhciBpLHM7dGhpcy5ibHVyKGUsZSYmImZvY3VzIj09PWUudHlwZSksdGhpcy5fc2Nyb2xsSW50b1ZpZXcodCksdGhpcy5hY3RpdmU9dC5maXJzdCgpLHM9dGhpcy5hY3RpdmUuYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHRoaXMub3B0aW9ucy5yb2xlJiZ0aGlzLmVsZW1lbnQuYXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixzLmF0dHIoImlkIikpLHRoaXMuYWN0aXZlLnBhcmVudCgpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksZSYmImtleWRvd24iPT09ZS50eXBlP3RoaXMuX2Nsb3NlKCk6dGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX2Nsb3NlKCl9LHRoaXMuZGVsYXkpLGk9dC5jaGlsZHJlbigiLnVpLW1lbnUiKSxpLmxlbmd0aCYmZSYmL15tb3VzZS8udGVzdChlLnR5cGUpJiZ0aGlzLl9zdGFydE9wZW5pbmcoaSksdGhpcy5hY3RpdmVNZW51PXQucGFyZW50KCksdGhpcy5fdHJpZ2dlcigiZm9jdXMiLGUse2l0ZW06dH0pfSxfc2Nyb2xsSW50b1ZpZXc6ZnVuY3Rpb24odCl7dmFyIGkscyxuLGEsbyxyO3RoaXMuX2hhc1Njcm9sbCgpJiYoaT1wYXJzZUZsb2F0KGUuY3NzKHRoaXMuYWN0aXZlTWVudVswXSwiYm9yZGVyVG9wV2lkdGgiKSl8fDAscz1wYXJzZUZsb2F0KGUuY3NzKHRoaXMuYWN0aXZlTWVudVswXSwicGFkZGluZ1RvcCIpKXx8MCxuPXQub2Zmc2V0KCkudG9wLXRoaXMuYWN0aXZlTWVudS5vZmZzZXQoKS50b3AtaS1zLGE9dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcCgpLG89dGhpcy5hY3RpdmVNZW51LmhlaWdodCgpLHI9dC5vdXRlckhlaWdodCgpLDA+bj90aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKGErbik6bityPm8mJnRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoYStuLW8rcikpfSxibHVyOmZ1bmN0aW9uKGUsdCl7dHx8Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuYWN0aXZlJiYodGhpcy5hY3RpdmUucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIiksdGhpcy5hY3RpdmU9bnVsbCx0aGlzLl90cmlnZ2VyKCJibHVyIixlLHtpdGVtOnRoaXMuYWN0aXZlfSkpfSxfc3RhcnRPcGVuaW5nOmZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSwidHJ1ZSI9PT1lLmF0dHIoImFyaWEtaGlkZGVuIikmJih0aGlzLnRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5fY2xvc2UoKSx0aGlzLl9vcGVuKGUpfSx0aGlzLmRlbGF5KSl9LF9vcGVuOmZ1bmN0aW9uKHQpe3ZhciBpPWUuZXh0ZW5kKHtvZjp0aGlzLmFjdGl2ZX0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKTtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51Iikubm90KHQucGFyZW50cygiLnVpLW1lbnUiKSkuaGlkZSgpLmF0dHIoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHQuc2hvdygpLnJlbW92ZUF0dHIoImFyaWEtaGlkZGVuIikuYXR0cigiYXJpYS1leHBhbmRlZCIsInRydWUiKS5wb3NpdGlvbihpKX0sY29sbGFwc2VBbGw6ZnVuY3Rpb24odCxpKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciBzPWk/dGhpcy5lbGVtZW50OmUodCYmdC50YXJnZXQpLmNsb3Nlc3QodGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51IikpO3MubGVuZ3RofHwocz10aGlzLmVsZW1lbnQpLHRoaXMuX2Nsb3NlKHMpLHRoaXMuYmx1cih0KSx0aGlzLmFjdGl2ZU1lbnU9c30sdGhpcy5kZWxheSl9LF9jbG9zZTpmdW5jdGlvbihlKXtlfHwoZT10aGlzLmFjdGl2ZT90aGlzLmFjdGl2ZS5wYXJlbnQoKTp0aGlzLmVsZW1lbnQpLGUuZmluZCgiLnVpLW1lbnUiKS5oaWRlKCkuYXR0cigiYXJpYS1oaWRkZW4iLCJ0cnVlIikuYXR0cigiYXJpYS1leHBhbmRlZCIsImZhbHNlIikuZW5kKCkuZmluZCgiLnVpLXN0YXRlLWFjdGl2ZSIpLm5vdCgiLnVpLXN0YXRlLWZvY3VzIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSxfY2xvc2VPbkRvY3VtZW50Q2xpY2s6ZnVuY3Rpb24odCl7cmV0dXJuIWUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51IikubGVuZ3RofSxfaXNEaXZpZGVyOmZ1bmN0aW9uKGUpe3JldHVybiEvW15cLVx1MjAxNFx1MjAxM1xzXS8udGVzdChlLnRleHQoKSl9LGNvbGxhcHNlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KCIudWktbWVudS1pdGVtIix0aGlzLmVsZW1lbnQpO3QmJnQubGVuZ3RoJiYodGhpcy5fY2xvc2UoKSx0aGlzLmZvY3VzKGUsdCkpfSxleHBhbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5hY3RpdmUmJnRoaXMuYWN0aXZlLmNoaWxkcmVuKCIudWktbWVudSAiKS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZmlyc3QoKTt0JiZ0Lmxlbmd0aCYmKHRoaXMuX29wZW4odC5wYXJlbnQoKSksdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLmZvY3VzKGUsdCl9KSl9LG5leHQ6ZnVuY3Rpb24oZSl7dGhpcy5fbW92ZSgibmV4dCIsImZpcnN0IixlKX0scHJldmlvdXM6ZnVuY3Rpb24oZSl7dGhpcy5fbW92ZSgicHJldiIsImxhc3QiLGUpfSxpc0ZpcnN0SXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLnByZXZBbGwoIi51aS1tZW51LWl0ZW0iKS5sZW5ndGh9LGlzTGFzdEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5uZXh0QWxsKCIudWktbWVudS1pdGVtIikubGVuZ3RofSxfbW92ZTpmdW5jdGlvbihlLHQsaSl7dmFyIHM7dGhpcy5hY3RpdmUmJihzPSJmaXJzdCI9PT1lfHwibGFzdCI9PT1lP3RoaXMuYWN0aXZlWyJmaXJzdCI9PT1lPyJwcmV2QWxsIjoibmV4dEFsbCJdKCIudWktbWVudS1pdGVtIikuZXEoLTEpOnRoaXMuYWN0aXZlW2UrIkFsbCJdKCIudWktbWVudS1pdGVtIikuZXEoMCkpLHMmJnMubGVuZ3RoJiZ0aGlzLmFjdGl2ZXx8KHM9dGhpcy5hY3RpdmVNZW51LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKVt0XSgpKSx0aGlzLmZvY3VzKGkscyl9LG5leHRQYWdlOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbjtyZXR1cm4gdGhpcy5hY3RpdmU/KHRoaXMuaXNMYXN0SXRlbSgpfHwodGhpcy5faGFzU2Nyb2xsKCk/KHM9dGhpcy5hY3RpdmUub2Zmc2V0KCkudG9wLG49dGhpcy5lbGVtZW50LmhlaWdodCgpLHRoaXMuYWN0aXZlLm5leHRBbGwoIi51aS1tZW51LWl0ZW0iKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIGk9ZSh0aGlzKSwwPmkub2Zmc2V0KCkudG9wLXMtbn0pLHRoaXMuZm9jdXModCxpKSk6dGhpcy5mb2N1cyh0LHRoaXMuYWN0aXZlTWVudS5maW5kKHRoaXMub3B0aW9ucy5pdGVtcylbdGhpcy5hY3RpdmU/Imxhc3QiOiJmaXJzdCJdKCkpKSx2b2lkIDApOih0aGlzLm5leHQodCksdm9pZCAwKX0scHJldmlvdXNQYWdlOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbjtyZXR1cm4gdGhpcy5hY3RpdmU/KHRoaXMuaXNGaXJzdEl0ZW0oKXx8KHRoaXMuX2hhc1Njcm9sbCgpPyhzPXRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCxuPXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmFjdGl2ZS5wcmV2QWxsKCIudWktbWVudS1pdGVtIikuZWFjaChmdW5jdGlvbigpe3JldHVybiBpPWUodGhpcyksaS5vZmZzZXQoKS50b3AtcytuPjB9KSx0aGlzLmZvY3VzKHQsaSkpOnRoaXMuZm9jdXModCx0aGlzLmFjdGl2ZU1lbnUuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmZpcnN0KCkpKSx2b2lkIDApOih0aGlzLm5leHQodCksdm9pZCAwKX0sX2hhc1Njcm9sbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKTx0aGlzLmVsZW1lbnQucHJvcCgic2Nyb2xsSGVpZ2h0Iil9LHNlbGVjdDpmdW5jdGlvbih0KXt0aGlzLmFjdGl2ZT10aGlzLmFjdGl2ZXx8ZSh0LnRhcmdldCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIpO3ZhciBpPXtpdGVtOnRoaXMuYWN0aXZlfTt0aGlzLmFjdGl2ZS5oYXMoIi51aS1tZW51IikubGVuZ3RofHx0aGlzLmNvbGxhcHNlQWxsKHQsITApLHRoaXMuX3RyaWdnZXIoInNlbGVjdCIsdCxpKX19KSxlLndpZGdldCgidWkuYXV0b2NvbXBsZXRlIix7dmVyc2lvbjoiMS4xMS4wIixkZWZhdWx0RWxlbWVudDoiPGlucHV0PiIsb3B0aW9uczp7YXBwZW5kVG86bnVsbCxhdXRvRm9jdXM6ITEsZGVsYXk6MzAwLG1pbkxlbmd0aDoxLHBvc2l0aW9uOntteToibGVmdCB0b3AiLGF0OiJsZWZ0IGJvdHRvbSIsY29sbGlzaW9uOiJub25lIn0sc291cmNlOm51bGwsY2hhbmdlOm51bGwsY2xvc2U6bnVsbCxmb2N1czpudWxsLG9wZW46bnVsbCxyZXNwb25zZTpudWxsLHNlYXJjaDpudWxsLHNlbGVjdDpudWxsfSxyZXF1ZXN0SW5kZXg6MCxwZW5kaW5nOjAsX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0LGkscyxuPXRoaXMuZWxlbWVudFswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGE9InRleHRhcmVhIj09PW4sbz0iaW5wdXQiPT09bjt0aGlzLmlzTXVsdGlMaW5lPWE/ITA6bz8hMTp0aGlzLmVsZW1lbnQucHJvcCgiaXNDb250ZW50RWRpdGFibGUiKSx0aGlzLnZhbHVlTWV0aG9kPXRoaXMuZWxlbWVudFthfHxvPyJ2YWwiOiJ0ZXh0Il0sdGhpcy5pc05ld01lbnU9ITAsdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1hdXRvY29tcGxldGUtaW5wdXQiKS5hdHRyKCJhdXRvY29tcGxldGUiLCJvZmYiKSx0aGlzLl9vbih0aGlzLmVsZW1lbnQse2tleWRvd246ZnVuY3Rpb24obil7aWYodGhpcy5lbGVtZW50LnByb3AoInJlYWRPbmx5IikpcmV0dXJuIHQ9ITAscz0hMCxpPSEwLHZvaWQgMDt0PSExLHM9ITEsaT0hMTt2YXIgYT1lLnVpLmtleUNvZGU7c3dpdGNoKG4ua2V5Q29kZSl7Y2FzZSBhLlBBR0VfVVA6dD0hMCx0aGlzLl9tb3ZlKCJwcmV2aW91c1BhZ2UiLG4pO2JyZWFrO2Nhc2UgYS5QQUdFX0RPV046dD0hMCx0aGlzLl9tb3ZlKCJuZXh0UGFnZSIsbik7YnJlYWs7Y2FzZSBhLlVQOnQ9ITAsdGhpcy5fa2V5RXZlbnQoInByZXZpb3VzIixuKTticmVhaztjYXNlIGEuRE9XTjp0PSEwLHRoaXMuX2tleUV2ZW50KCJuZXh0IixuKTticmVhaztjYXNlIGEuRU5URVI6dGhpcy5tZW51LmFjdGl2ZSYmKHQ9ITAsbi5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubWVudS5zZWxlY3QobikpO2JyZWFrO2Nhc2UgYS5UQUI6dGhpcy5tZW51LmFjdGl2ZSYmdGhpcy5tZW51LnNlbGVjdChuKTticmVhaztjYXNlIGEuRVNDQVBFOnRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpJiYodGhpcy5fdmFsdWUodGhpcy50ZXJtKSx0aGlzLmNsb3NlKG4pLG4ucHJldmVudERlZmF1bHQoKSk7YnJlYWs7ZGVmYXVsdDppPSEwLHRoaXMuX3NlYXJjaFRpbWVvdXQobil9fSxrZXlwcmVzczpmdW5jdGlvbihzKXtpZih0KXJldHVybiB0PSExLCghdGhpcy5pc011bHRpTGluZXx8dGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikpJiZzLnByZXZlbnREZWZhdWx0KCksdm9pZCAwO2lmKCFpKXt2YXIgbj1lLnVpLmtleUNvZGU7c3dpdGNoKHMua2V5Q29kZSl7Y2FzZSBuLlBBR0VfVVA6dGhpcy5fbW92ZSgicHJldmlvdXNQYWdlIixzKTticmVhaztjYXNlIG4uUEFHRV9ET1dOOnRoaXMuX21vdmUoIm5leHRQYWdlIixzKTticmVhaztjYXNlIG4uVVA6dGhpcy5fa2V5RXZlbnQoInByZXZpb3VzIixzKTticmVhaztjYXNlIG4uRE9XTjp0aGlzLl9rZXlFdmVudCgibmV4dCIscyl9fX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHM/KHM9ITEsZS5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgMCk6KHRoaXMuX3NlYXJjaFRpbWVvdXQoZSksdm9pZCAwKX0sZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLnNlbGVjdGVkSXRlbT1udWxsLHRoaXMucHJldmlvdXM9dGhpcy5fdmFsdWUoKX0sYmx1cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jYW5jZWxCbHVyPyhkZWxldGUgdGhpcy5jYW5jZWxCbHVyLHZvaWQgMCk6KGNsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5jbG9zZShlKSx0aGlzLl9jaGFuZ2UoZSksdm9pZCAwKX19KSx0aGlzLl9pbml0U291cmNlKCksdGhpcy5tZW51PWUoIjx1bD4iKS5hZGRDbGFzcygidWktYXV0b2NvbXBsZXRlIHVpLWZyb250IikuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSkubWVudSh7cm9sZTpudWxsfSkuaGlkZSgpLm1lbnUoImluc3RhbmNlIiksdGhpcy5fb24odGhpcy5tZW51LmVsZW1lbnQse21vdXNlZG93bjpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksdGhpcy5jYW5jZWxCbHVyPSEwLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuY2FuY2VsQmx1cn0pO3ZhciBpPXRoaXMubWVudS5lbGVtZW50WzBdO2UodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKS5sZW5ndGh8fHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLmRvY3VtZW50Lm9uZSgibW91c2Vkb3duIixmdW5jdGlvbihzKXtzLnRhcmdldD09PXQuZWxlbWVudFswXXx8cy50YXJnZXQ9PT1pfHxlLmNvbnRhaW5zKGkscy50YXJnZXQpfHx0LmNsb3NlKCl9KX0pfSxtZW51Zm9jdXM6ZnVuY3Rpb24odCxpKXt2YXIgcyxuO3JldHVybiB0aGlzLmlzTmV3TWVudSYmKHRoaXMuaXNOZXdNZW51PSExLHQub3JpZ2luYWxFdmVudCYmL15tb3VzZS8udGVzdCh0Lm9yaWdpbmFsRXZlbnQudHlwZSkpPyh0aGlzLm1lbnUuYmx1cigpLHRoaXMuZG9jdW1lbnQub25lKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKCl7ZSh0LnRhcmdldCkudHJpZ2dlcih0Lm9yaWdpbmFsRXZlbnQpfSksdm9pZCAwKToobj1pLml0ZW0uZGF0YSgidWktYXV0b2NvbXBsZXRlLWl0ZW0iKSwhMSE9PXRoaXMuX3RyaWdnZXIoImZvY3VzIix0LHtpdGVtOm59KSYmdC5vcmlnaW5hbEV2ZW50JiYvXmtleS8udGVzdCh0Lm9yaWdpbmFsRXZlbnQudHlwZSkmJnRoaXMuX3ZhbHVlKG4udmFsdWUpLHM9aS5pdGVtLmF0dHIoImFyaWEtbGFiZWwiKXx8bi52YWx1ZSxzJiZqUXVlcnkudHJpbShzKS5sZW5ndGgmJih0aGlzLmxpdmVSZWdpb24uY2hpbGRyZW4oKS5oaWRlKCksZSgiPGRpdj4iKS50ZXh0KHMpLmFwcGVuZFRvKHRoaXMubGl2ZVJlZ2lvbikpLHZvaWQgMCl9LG1lbnVzZWxlY3Q6ZnVuY3Rpb24oZSx0KXt2YXIgaT10Lml0ZW0uZGF0YSgidWktYXV0b2NvbXBsZXRlLWl0ZW0iKSxzPXRoaXMucHJldmlvdXM7dGhpcy5lbGVtZW50WzBdIT09dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50JiYodGhpcy5lbGVtZW50LmZvY3VzKCksdGhpcy5wcmV2aW91cz1zLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz1zLHRoaXMuc2VsZWN0ZWRJdGVtPWl9KSksITEhPT10aGlzLl90cmlnZ2VyKCJzZWxlY3QiLGUse2l0ZW06aX0pJiZ0aGlzLl92YWx1ZShpLnZhbHVlKSx0aGlzLnRlcm09dGhpcy5fdmFsdWUoKSx0aGlzLmNsb3NlKGUpLHRoaXMuc2VsZWN0ZWRJdGVtPWl9fSksdGhpcy5saXZlUmVnaW9uPWUoIjxzcGFuPiIse3JvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6ImFzc2VydGl2ZSIsImFyaWEtcmVsZXZhbnQiOiJhZGRpdGlvbnMifSkuYWRkQ2xhc3MoInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSIpLmFwcGVuZFRvKHRoaXMuZG9jdW1lbnRbMF0uYm9keSksdGhpcy5fb24odGhpcy53aW5kb3cse2JlZm9yZXVubG9hZDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKX19KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktYXV0b2NvbXBsZXRlLWlucHV0IikucmVtb3ZlQXR0cigiYXV0b2NvbXBsZXRlIiksdGhpcy5tZW51LmVsZW1lbnQucmVtb3ZlKCksdGhpcy5saXZlUmVnaW9uLnJlbW92ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5fc3VwZXIoZSx0KSwic291cmNlIj09PWUmJnRoaXMuX2luaXRTb3VyY2UoKSwiYXBwZW5kVG8iPT09ZSYmdGhpcy5tZW51LmVsZW1lbnQuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksImRpc2FibGVkIj09PWUmJnQmJnRoaXMueGhyJiZ0aGlzLnhoci5hYm9ydCgpfSxfYXBwZW5kVG86ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMuYXBwZW5kVG87cmV0dXJuIHQmJih0PXQuanF1ZXJ5fHx0Lm5vZGVUeXBlP2UodCk6dGhpcy5kb2N1bWVudC5maW5kKHQpLmVxKDApKSx0JiZ0WzBdfHwodD10aGlzLmVsZW1lbnQuY2xvc2VzdCgiLnVpLWZyb250IikpLHQubGVuZ3RofHwodD10aGlzLmRvY3VtZW50WzBdLmJvZHkpLHR9LF9pbml0U291cmNlOmZ1bmN0aW9uKCl7dmFyIHQsaSxzPXRoaXM7ZS5pc0FycmF5KHRoaXMub3B0aW9ucy5zb3VyY2UpPyh0PXRoaXMub3B0aW9ucy5zb3VyY2UsdGhpcy5zb3VyY2U9ZnVuY3Rpb24oaSxzKXtzKGUudWkuYXV0b2NvbXBsZXRlLmZpbHRlcih0LGkudGVybSkpfSk6InN0cmluZyI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuc291cmNlPyhpPXRoaXMub3B0aW9ucy5zb3VyY2UsdGhpcy5zb3VyY2U9ZnVuY3Rpb24odCxuKXtzLnhociYmcy54aHIuYWJvcnQoKSxzLnhocj1lLmFqYXgoe3VybDppLGRhdGE6dCxkYXRhVHlwZToianNvbiIsc3VjY2VzczpmdW5jdGlvbihlKXtuKGUpfSxlcnJvcjpmdW5jdGlvbigpe24oW10pfX0pfSk6dGhpcy5zb3VyY2U9dGhpcy5vcHRpb25zLnNvdXJjZX0sX3NlYXJjaFRpbWVvdXQ6ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoaW5nKSx0aGlzLnNlYXJjaGluZz10aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciB0PXRoaXMudGVybT09PXRoaXMuX3ZhbHVlKCksaT10aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSxzPWUuYWx0S2V5fHxlLmN0cmxLZXl8fGUubWV0YUtleXx8ZS5zaGlmdEtleTsoIXR8fHQmJiFpJiYhcykmJih0aGlzLnNlbGVjdGVkSXRlbT1udWxsLHRoaXMuc2VhcmNoKG51bGwsZSkpfSx0aGlzLm9wdGlvbnMuZGVsYXkpfSxzZWFyY2g6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT1udWxsIT1lP2U6dGhpcy5fdmFsdWUoKSx0aGlzLnRlcm09dGhpcy5fdmFsdWUoKSxlLmxlbmd0aDx0aGlzLm9wdGlvbnMubWluTGVuZ3RoP3RoaXMuY2xvc2UodCk6dGhpcy5fdHJpZ2dlcigic2VhcmNoIix0KSE9PSExP3RoaXMuX3NlYXJjaChlKTp2b2lkIDB9LF9zZWFyY2g6ZnVuY3Rpb24oZSl7dGhpcy5wZW5kaW5nKyssdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZyIpLHRoaXMuY2FuY2VsU2VhcmNoPSExLHRoaXMuc291cmNlKHt0ZXJtOmV9LHRoaXMuX3Jlc3BvbnNlKCkpfSxfcmVzcG9uc2U6ZnVuY3Rpb24oKXt2YXIgdD0rK3RoaXMucmVxdWVzdEluZGV4O3JldHVybiBlLnByb3h5KGZ1bmN0aW9uKGUpe3Q9PT10aGlzLnJlcXVlc3RJbmRleCYmdGhpcy5fX3Jlc3BvbnNlKGUpLHRoaXMucGVuZGluZy0tLHRoaXMucGVuZGluZ3x8dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtbG9hZGluZyIpfSx0aGlzKX0sX19yZXNwb25zZTpmdW5jdGlvbihlKXtlJiYoZT10aGlzLl9ub3JtYWxpemUoZSkpLHRoaXMuX3RyaWdnZXIoInJlc3BvbnNlIixudWxsLHtjb250ZW50OmV9KSwhdGhpcy5vcHRpb25zLmRpc2FibGVkJiZlJiZlLmxlbmd0aCYmIXRoaXMuY2FuY2VsU2VhcmNoPyh0aGlzLl9zdWdnZXN0KGUpLHRoaXMuX3RyaWdnZXIoIm9wZW4iKSk6dGhpcy5fY2xvc2UoKX0sY2xvc2U6ZnVuY3Rpb24oZSl7dGhpcy5jYW5jZWxTZWFyY2g9ITAsdGhpcy5fY2xvc2UoZSl9LF9jbG9zZTpmdW5jdGlvbihlKXt0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSYmKHRoaXMubWVudS5lbGVtZW50LmhpZGUoKSx0aGlzLm1lbnUuYmx1cigpLHRoaXMuaXNOZXdNZW51PSEwLHRoaXMuX3RyaWdnZXIoImNsb3NlIixlKSl9LF9jaGFuZ2U6ZnVuY3Rpb24oZSl7dGhpcy5wcmV2aW91cyE9PXRoaXMuX3ZhbHVlKCkmJnRoaXMuX3RyaWdnZXIoImNoYW5nZSIsZSx7aXRlbTp0aGlzLnNlbGVjdGVkSXRlbX0pfSxfbm9ybWFsaXplOmZ1bmN0aW9uKHQpe3JldHVybiB0Lmxlbmd0aCYmdFswXS5sYWJlbCYmdFswXS52YWx1ZT90OmUubWFwKHQsZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0P3tsYWJlbDp0LHZhbHVlOnR9OmUuZXh0ZW5kKHt9LHQse2xhYmVsOnQubGFiZWx8fHQudmFsdWUsdmFsdWU6dC52YWx1ZXx8dC5sYWJlbH0pfSl9LF9zdWdnZXN0OmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMubWVudS5lbGVtZW50LmVtcHR5KCk7dGhpcy5fcmVuZGVyTWVudShpLHQpLHRoaXMuaXNOZXdNZW51PSEwLHRoaXMubWVudS5yZWZyZXNoKCksaS5zaG93KCksdGhpcy5fcmVzaXplTWVudSgpLGkucG9zaXRpb24oZS5leHRlbmQoe29mOnRoaXMuZWxlbWVudH0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKSksdGhpcy5vcHRpb25zLmF1dG9Gb2N1cyYmdGhpcy5tZW51Lm5leHQoKX0sX3Jlc2l6ZU1lbnU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1lbnUuZWxlbWVudDtlLm91dGVyV2lkdGgoTWF0aC5tYXgoZS53aWR0aCgiIikub3V0ZXJXaWR0aCgpKzEsdGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSkpfSxfcmVuZGVyTWVudTpmdW5jdGlvbih0LGkpe3ZhciBzPXRoaXM7ZS5lYWNoKGksZnVuY3Rpb24oZSxpKXtzLl9yZW5kZXJJdGVtRGF0YSh0LGkpfSl9LF9yZW5kZXJJdGVtRGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9yZW5kZXJJdGVtKGUsdCkuZGF0YSgidWktYXV0b2NvbXBsZXRlLWl0ZW0iLHQpfSxfcmVuZGVySXRlbTpmdW5jdGlvbih0LGkpe3JldHVybiBlKCI8bGk+IikudGV4dChpLmxhYmVsKS5hcHBlbmRUbyh0KX0sX21vdmU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIik/dGhpcy5tZW51LmlzRmlyc3RJdGVtKCkmJi9ecHJldmlvdXMvLnRlc3QoZSl8fHRoaXMubWVudS5pc0xhc3RJdGVtKCkmJi9ebmV4dC8udGVzdChlKT8odGhpcy5pc011bHRpTGluZXx8dGhpcy5fdmFsdWUodGhpcy50ZXJtKSx0aGlzLm1lbnUuYmx1cigpLHZvaWQgMCk6KHRoaXMubWVudVtlXSh0KSx2b2lkIDApOih0aGlzLnNlYXJjaChudWxsLHQpLHZvaWQgMCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lbnUuZWxlbWVudH0sX3ZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmFsdWVNZXRob2QuYXBwbHkodGhpcy5lbGVtZW50LGFyZ3VtZW50cyl9LF9rZXlFdmVudDpmdW5jdGlvbihlLHQpeyghdGhpcy5pc011bHRpTGluZXx8dGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikpJiYodGhpcy5fbW92ZShlLHQpLHQucHJldmVudERlZmF1bHQoKSl9fSksZS5leHRlbmQoZS51aS5hdXRvY29tcGxldGUse2VzY2FwZVJlZ2V4OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csIlxcJCYiKX0sZmlsdGVyOmZ1bmN0aW9uKHQsaSl7dmFyIHM9UmVnRXhwKGUudWkuYXV0b2NvbXBsZXRlLmVzY2FwZVJlZ2V4KGkpLCJpIik7cmV0dXJuIGUuZ3JlcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBzLnRlc3QoZS5sYWJlbHx8ZS52YWx1ZXx8ZSl9KX19KSxlLndpZGdldCgidWkuYXV0b2NvbXBsZXRlIixlLnVpLmF1dG9jb21wbGV0ZSx7b3B0aW9uczp7bWVzc2FnZXM6e25vUmVzdWx0czoiTm8gc2VhcmNoIHJlc3VsdHMuIixyZXN1bHRzOmZ1bmN0aW9uKGUpe3JldHVybiBlKyhlPjE/IiByZXN1bHRzIGFyZSI6IiByZXN1bHQgaXMiKSsiIGF2YWlsYWJsZSwgdXNlIHVwIGFuZCBkb3duIGFycm93IGtleXMgdG8gbmF2aWdhdGUuIn19fSxfX3Jlc3BvbnNlOmZ1bmN0aW9uKHQpe3ZhciBpO3RoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMuY2FuY2VsU2VhcmNofHwoaT10JiZ0Lmxlbmd0aD90aGlzLm9wdGlvbnMubWVzc2FnZXMucmVzdWx0cyh0Lmxlbmd0aCk6dGhpcy5vcHRpb25zLm1lc3NhZ2VzLm5vUmVzdWx0cyx0aGlzLmxpdmVSZWdpb24uY2hpbGRyZW4oKS5oaWRlKCksZSgiPGRpdj4iKS50ZXh0KGkpLmFwcGVuZFRvKHRoaXMubGl2ZVJlZ2lvbikpfX0pLGUudWkuYXV0b2NvbXBsZXRlO3ZhciB1LGQ9InVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIixjPSJ1aS1idXR0b24taWNvbnMtb25seSB1aS1idXR0b24taWNvbi1vbmx5IHVpLWJ1dHRvbi10ZXh0LWljb25zIHVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSB1aS1idXR0b24tdGV4dC1pY29uLXNlY29uZGFyeSB1aS1idXR0b24tdGV4dC1vbmx5IixwPWZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dC5maW5kKCI6dWktYnV0dG9uIikuYnV0dG9uKCJyZWZyZXNoIil9LDEpfSxmPWZ1bmN0aW9uKHQpe3ZhciBpPXQubmFtZSxzPXQuZm9ybSxuPWUoW10pO3JldHVybiBpJiYoaT1pLnJlcGxhY2UoLycvZywiXFwnIiksbj1zP2UocykuZmluZCgiW25hbWU9JyIraSsiJ11bdHlwZT1yYWRpb10iKTplKCJbbmFtZT0nIitpKyInXVt0eXBlPXJhZGlvXSIsdC5vd25lckRvY3VtZW50KS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5mb3JtfSkpLG59O2Uud2lkZ2V0KCJ1aS5idXR0b24iLHt2ZXJzaW9uOiIxLjExLjAiLGRlZmF1bHRFbGVtZW50OiI8YnV0dG9uPiIsb3B0aW9uczp7ZGlzYWJsZWQ6bnVsbCx0ZXh0OiEwLGxhYmVsOm51bGwsaWNvbnM6e3ByaW1hcnk6bnVsbCxzZWNvbmRhcnk6bnVsbH19LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuY2xvc2VzdCgiZm9ybSIpLnVuYmluZCgicmVzZXQiK3RoaXMuZXZlbnROYW1lc3BhY2UpLmJpbmQoInJlc2V0Iit0aGlzLmV2ZW50TmFtZXNwYWNlLHApLCJib29sZWFuIiE9dHlwZW9mIHRoaXMub3B0aW9ucy5kaXNhYmxlZD90aGlzLm9wdGlvbnMuZGlzYWJsZWQ9ISF0aGlzLmVsZW1lbnQucHJvcCgiZGlzYWJsZWQiKTp0aGlzLmVsZW1lbnQucHJvcCgiZGlzYWJsZWQiLHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fZGV0ZXJtaW5lQnV0dG9uVHlwZSgpLHRoaXMuaGFzVGl0bGU9ISF0aGlzLmJ1dHRvbkVsZW1lbnQuYXR0cigidGl0bGUiKTt2YXIgdD10aGlzLGk9dGhpcy5vcHRpb25zLHM9ImNoZWNrYm94Ij09PXRoaXMudHlwZXx8InJhZGlvIj09PXRoaXMudHlwZSxuPXM/IiI6InVpLXN0YXRlLWFjdGl2ZSI7bnVsbD09PWkubGFiZWwmJihpLmxhYmVsPSJpbnB1dCI9PT10aGlzLnR5cGU/dGhpcy5idXR0b25FbGVtZW50LnZhbCgpOnRoaXMuYnV0dG9uRWxlbWVudC5odG1sKCkpLHRoaXMuX2hvdmVyYWJsZSh0aGlzLmJ1dHRvbkVsZW1lbnQpLHRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcyhkKS5hdHRyKCJyb2xlIiwiYnV0dG9uIikuYmluZCgibW91c2VlbnRlciIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2kuZGlzYWJsZWR8fHRoaXM9PT11JiZlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX0pLmJpbmQoIm1vdXNlbGVhdmUiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpLmRpc2FibGVkfHxlKHRoaXMpLnJlbW92ZUNsYXNzKG4pfSkuYmluZCgiY2xpY2siK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oZSl7aS5kaXNhYmxlZCYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX0pLHRoaXMuX29uKHtmb2N1czpmdW5jdGlvbigpe3RoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtZm9jdXMiKX0sYmx1cjpmdW5jdGlvbigpe3RoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX19KSxzJiZ0aGlzLmVsZW1lbnQuYmluZCgiY2hhbmdlIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7dC5yZWZyZXNoKCl9KSwiY2hlY2tib3giPT09dGhpcy50eXBlP3RoaXMuYnV0dG9uRWxlbWVudC5iaW5kKCJjbGljayIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe3JldHVybiBpLmRpc2FibGVkPyExOnZvaWQgMH0pOiJyYWRpbyI9PT10aGlzLnR5cGU/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7aWYoaS5kaXNhYmxlZClyZXR1cm4hMTtlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0LmJ1dHRvbkVsZW1lbnQuYXR0cigiYXJpYS1wcmVzc2VkIiwidHJ1ZSIpO3ZhciBzPXQuZWxlbWVudFswXTtmKHMpLm5vdChzKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzKS5idXR0b24oIndpZGdldCIpWzBdfSkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsImZhbHNlIil9KToodGhpcy5idXR0b25FbGVtZW50LmJpbmQoIm1vdXNlZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe3JldHVybiBpLmRpc2FibGVkPyExOihlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx1PXRoaXMsdC5kb2N1bWVudC5vbmUoIm1vdXNldXAiLGZ1bmN0aW9uKCl7dT1udWxsfSksdm9pZCAwKX0pLmJpbmQoIm1vdXNldXAiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtyZXR1cm4gaS5kaXNhYmxlZD8hMTooZSh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdm9pZCAwKX0pLmJpbmQoImtleWRvd24iK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24odCl7cmV0dXJuIGkuZGlzYWJsZWQ/ITE6KCh0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuU1BBQ0V8fHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5FTlRFUikmJmUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHZvaWQgMCl9KS5iaW5kKCJrZXl1cCIrdGhpcy5ldmVudE5hbWVzcGFjZSsiIGJsdXIiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX0pLHRoaXMuYnV0dG9uRWxlbWVudC5pcygiYSIpJiZ0aGlzLmJ1dHRvbkVsZW1lbnQua2V5dXAoZnVuY3Rpb24odCl7dC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlNQQUNFJiZlKHRoaXMpLmNsaWNrKCl9KSksdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsaS5kaXNhYmxlZCksdGhpcy5fcmVzZXRCdXR0b24oKX0sX2RldGVybWluZUJ1dHRvblR5cGU6ZnVuY3Rpb24oKXt2YXIgZSx0LGk7dGhpcy50eXBlPXRoaXMuZWxlbWVudC5pcygiW3R5cGU9Y2hlY2tib3hdIik/ImNoZWNrYm94Ijp0aGlzLmVsZW1lbnQuaXMoIlt0eXBlPXJhZGlvXSIpPyJyYWRpbyI6dGhpcy5lbGVtZW50LmlzKCJpbnB1dCIpPyJpbnB1dCI6ImJ1dHRvbiIsImNoZWNrYm94Ij09PXRoaXMudHlwZXx8InJhZGlvIj09PXRoaXMudHlwZT8oZT10aGlzLmVsZW1lbnQucGFyZW50cygpLmxhc3QoKSx0PSJsYWJlbFtmb3I9JyIrdGhpcy5lbGVtZW50LmF0dHIoImlkIikrIiddIix0aGlzLmJ1dHRvbkVsZW1lbnQ9ZS5maW5kKHQpLHRoaXMuYnV0dG9uRWxlbWVudC5sZW5ndGh8fChlPWUubGVuZ3RoP2Uuc2libGluZ3MoKTp0aGlzLmVsZW1lbnQuc2libGluZ3MoKSx0aGlzLmJ1dHRvbkVsZW1lbnQ9ZS5maWx0ZXIodCksdGhpcy5idXR0b25FbGVtZW50Lmxlbmd0aHx8KHRoaXMuYnV0dG9uRWxlbWVudD1lLmZpbmQodCkpKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSIpLGk9dGhpcy5lbGVtZW50LmlzKCI6Y2hlY2tlZCIpLGkmJnRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5idXR0b25FbGVtZW50LnByb3AoImFyaWEtcHJlc3NlZCIsaSkpOnRoaXMuYnV0dG9uRWxlbWVudD10aGlzLmVsZW1lbnR9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1dHRvbkVsZW1lbnR9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKSx0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoZCsiIHVpLXN0YXRlLWFjdGl2ZSAiK2MpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLXByZXNzZWQiKS5odG1sKHRoaXMuYnV0dG9uRWxlbWVudC5maW5kKCIudWktYnV0dG9uLXRleHQiKS5odG1sKCkpLHRoaXMuaGFzVGl0bGV8fHRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVBdHRyKCJ0aXRsZSIpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3N1cGVyKGUsdCksImRpc2FibGVkIj09PWU/KHRoaXMud2lkZ2V0KCkudG9nZ2xlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiwhIXQpLHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsISF0KSx0JiYoImNoZWNrYm94Ij09PXRoaXMudHlwZXx8InJhZGlvIj09PXRoaXMudHlwZT90aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIik6dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyB1aS1zdGF0ZS1hY3RpdmUiKSksdm9pZCAwKToodGhpcy5fcmVzZXRCdXR0b24oKSx2b2lkIDApfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LmlzKCJpbnB1dCwgYnV0dG9uIik/dGhpcy5lbGVtZW50LmlzKCI6ZGlzYWJsZWQiKTp0aGlzLmVsZW1lbnQuaGFzQ2xhc3MoInVpLWJ1dHRvbi1kaXNhYmxlZCIpO3QhPT10aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLHQpLCJyYWRpbyI9PT10aGlzLnR5cGU/Zih0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmlzKCI6Y2hlY2tlZCIpP2UodGhpcykuYnV0dG9uKCJ3aWRnZXQiKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwidHJ1ZSIpOmUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKX0pOiJjaGVja2JveCI9PT10aGlzLnR5cGUmJih0aGlzLmVsZW1lbnQuaXMoIjpjaGVja2VkIik/dGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik6dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpKX0sX3Jlc2V0QnV0dG9uOmZ1bmN0aW9uKCl7aWYoImlucHV0Ij09PXRoaXMudHlwZSlyZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsJiZ0aGlzLmVsZW1lbnQudmFsKHRoaXMub3B0aW9ucy5sYWJlbCksdm9pZCAwO3ZhciB0PXRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcyhjKSxpPWUoIjxzcGFuPjwvc3Bhbj4iLHRoaXMuZG9jdW1lbnRbMF0pLmFkZENsYXNzKCJ1aS1idXR0b24tdGV4dCIpLmh0bWwodGhpcy5vcHRpb25zLmxhYmVsKS5hcHBlbmRUbyh0LmVtcHR5KCkpLnRleHQoKSxzPXRoaXMub3B0aW9ucy5pY29ucyxuPXMucHJpbWFyeSYmcy5zZWNvbmRhcnksYT1bXTtzLnByaW1hcnl8fHMuc2Vjb25kYXJ5Pyh0aGlzLm9wdGlvbnMudGV4dCYmYS5wdXNoKCJ1aS1idXR0b24tdGV4dC1pY29uIisobj8icyI6cy5wcmltYXJ5PyItcHJpbWFyeSI6Ii1zZWNvbmRhcnkiKSkscy5wcmltYXJ5JiZ0LnByZXBlbmQoIjxzcGFuIGNsYXNzPSd1aS1idXR0b24taWNvbi1wcmltYXJ5IHVpLWljb24gIitzLnByaW1hcnkrIic+PC9zcGFuPiIpLHMuc2Vjb25kYXJ5JiZ0LmFwcGVuZCgiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXNlY29uZGFyeSB1aS1pY29uICIrcy5zZWNvbmRhcnkrIic+PC9zcGFuPiIpLHRoaXMub3B0aW9ucy50ZXh0fHwoYS5wdXNoKG4/InVpLWJ1dHRvbi1pY29ucy1vbmx5IjoidWktYnV0dG9uLWljb24tb25seSIpLHRoaXMuaGFzVGl0bGV8fHQuYXR0cigidGl0bGUiLGUudHJpbShpKSkpKTphLnB1c2goInVpLWJ1dHRvbi10ZXh0LW9ubHkiKSx0LmFkZENsYXNzKGEuam9pbigiICIpKX19KSxlLndpZGdldCgidWkuYnV0dG9uc2V0Iix7dmVyc2lvbjoiMS4xMS4wIixvcHRpb25zOntpdGVtczoiYnV0dG9uLCBpbnB1dFt0eXBlPWJ1dHRvbl0sIGlucHV0W3R5cGU9c3VibWl0XSwgaW5wdXRbdHlwZT1yZXNldF0sIGlucHV0W3R5cGU9Y2hlY2tib3hdLCBpbnB1dFt0eXBlPXJhZGlvXSwgYSwgOmRhdGEodWktYnV0dG9uKSJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWJ1dHRvbnNldCIpfSxfaW5pdDpmdW5jdGlvbigpe3RoaXMucmVmcmVzaCgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7ImRpc2FibGVkIj09PWUmJnRoaXMuYnV0dG9ucy5idXR0b24oIm9wdGlvbiIsZSx0KSx0aGlzLl9zdXBlcihlLHQpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9InJ0bCI9PT10aGlzLmVsZW1lbnQuY3NzKCJkaXJlY3Rpb24iKSxpPXRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykscz1pLmZpbHRlcigiOnVpLWJ1dHRvbiIpO2kubm90KCI6dWktYnV0dG9uIikuYnV0dG9uKCkscy5idXR0b24oInJlZnJlc2giKSx0aGlzLmJ1dHRvbnM9aS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzKS5idXR0b24oIndpZGdldCIpWzBdfSkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwgdWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IikuZmlsdGVyKCI6Zmlyc3QiKS5hZGRDbGFzcyh0PyJ1aS1jb3JuZXItcmlnaHQiOiJ1aS1jb3JuZXItbGVmdCIpLmVuZCgpLmZpbHRlcigiOmxhc3QiKS5hZGRDbGFzcyh0PyJ1aS1jb3JuZXItbGVmdCI6InVpLWNvcm5lci1yaWdodCIpLmVuZCgpLmVuZCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktYnV0dG9uc2V0IiksdGhpcy5idXR0b25zLm1hcChmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IikuZW5kKCkuYnV0dG9uKCJkZXN0cm95Iil9fSksZS51aS5idXR0b24sZS5leHRlbmQoZS51aSx7ZGF0ZXBpY2tlcjp7dmVyc2lvbjoiMS4xMS4wIn19KTt2YXIgbTtlLmV4dGVuZChuLnByb3RvdHlwZSx7bWFya2VyQ2xhc3NOYW1lOiJoYXNEYXRlcGlja2VyIixtYXhSb3dzOjQsX3dpZGdldERhdGVwaWNrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcERpdn0sc2V0RGVmYXVsdHM6ZnVuY3Rpb24oZSl7cmV0dXJuIG8odGhpcy5fZGVmYXVsdHMsZXx8e30pLHRoaXN9LF9hdHRhY2hEYXRlcGlja2VyOmZ1bmN0aW9uKHQsaSl7dmFyIHMsbixhO3M9dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG49ImRpdiI9PT1zfHwic3BhbiI9PT1zLHQuaWR8fCh0aGlzLnV1aWQrPTEsdC5pZD0iZHAiK3RoaXMudXVpZCksYT10aGlzLl9uZXdJbnN0KGUodCksbiksYS5zZXR0aW5ncz1lLmV4dGVuZCh7fSxpfHx7fSksImlucHV0Ij09PXM/dGhpcy5fY29ubmVjdERhdGVwaWNrZXIodCxhKTpuJiZ0aGlzLl9pbmxpbmVEYXRlcGlja2VyKHQsYSl9LF9uZXdJbnN0OmZ1bmN0aW9uKHQsaSl7dmFyIHM9dFswXS5pZC5yZXBsYWNlKC8oW15BLVphLXowLTlfXC1dKS9nLCJcXFxcJDEiKTtyZXR1cm57aWQ6cyxpbnB1dDp0LHNlbGVjdGVkRGF5OjAsc2VsZWN0ZWRNb250aDowLHNlbGVjdGVkWWVhcjowLGRyYXdNb250aDowLGRyYXdZZWFyOjAsaW5saW5lOmksZHBEaXY6aT9hKGUoIjxkaXYgY2xhc3M9JyIrdGhpcy5faW5saW5lQ2xhc3MrIiB1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCc+PC9kaXY+IikpOnRoaXMuZHBEaXZ9fSxfY29ubmVjdERhdGVwaWNrZXI6ZnVuY3Rpb24odCxpKXt2YXIgcz1lKHQpO2kuYXBwZW5kPWUoW10pLGkudHJpZ2dlcj1lKFtdKSxzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKXx8KHRoaXMuX2F0dGFjaG1lbnRzKHMsaSkscy5hZGRDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkua2V5ZG93bih0aGlzLl9kb0tleURvd24pLmtleXByZXNzKHRoaXMuX2RvS2V5UHJlc3MpLmtleXVwKHRoaXMuX2RvS2V5VXApLHRoaXMuX2F1dG9TaXplKGkpLGUuZGF0YSh0LCJkYXRlcGlja2VyIixpKSxpLnNldHRpbmdzLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcih0KSl9LF9hdHRhY2htZW50czpmdW5jdGlvbih0LGkpe3ZhciBzLG4sYSxvPXRoaXMuX2dldChpLCJhcHBlbmRUZXh0Iikscj10aGlzLl9nZXQoaSwiaXNSVEwiKTtpLmFwcGVuZCYmaS5hcHBlbmQucmVtb3ZlKCksbyYmKGkuYXBwZW5kPWUoIjxzcGFuIGNsYXNzPSciK3RoaXMuX2FwcGVuZENsYXNzKyInPiIrbysiPC9zcGFuPiIpLHRbcj8iYmVmb3JlIjoiYWZ0ZXIiXShpLmFwcGVuZCkpLHQudW5iaW5kKCJmb2N1cyIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLGkudHJpZ2dlciYmaS50cmlnZ2VyLnJlbW92ZSgpLHM9dGhpcy5fZ2V0KGksInNob3dPbiIpLCgiZm9jdXMiPT09c3x8ImJvdGgiPT09cykmJnQuZm9jdXModGhpcy5fc2hvd0RhdGVwaWNrZXIpLCgiYnV0dG9uIj09PXN8fCJib3RoIj09PXMpJiYobj10aGlzLl9nZXQoaSwiYnV0dG9uVGV4dCIpLGE9dGhpcy5fZ2V0KGksImJ1dHRvbkltYWdlIiksaS50cmlnZ2VyPWUodGhpcy5fZ2V0KGksImJ1dHRvbkltYWdlT25seSIpP2UoIjxpbWcvPiIpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJDbGFzcykuYXR0cih7c3JjOmEsYWx0Om4sdGl0bGU6bn0pOmUoIjxidXR0b24gdHlwZT0nYnV0dG9uJz48L2J1dHRvbj4iKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmh0bWwoYT9lKCI8aW1nLz4iKS5hdHRyKHtzcmM6YSxhbHQ6bix0aXRsZTpufSk6bikpLHRbcj8iYmVmb3JlIjoiYWZ0ZXIiXShpLnRyaWdnZXIpLGkudHJpZ2dlci5jbGljayhmdW5jdGlvbigpe3JldHVybiBlLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dD09PXRbMF0/ZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpOmUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJmUuZGF0ZXBpY2tlci5fbGFzdElucHV0IT09dFswXT8oZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLGUuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIodFswXSkpOmUuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIodFswXSksITF9KSl9LF9hdXRvU2l6ZTpmdW5jdGlvbihlKXtpZih0aGlzLl9nZXQoZSwiYXV0b1NpemUiKSYmIWUuaW5saW5lKXt2YXIgdCxpLHMsbixhPW5ldyBEYXRlKDIwMDksMTEsMjApLG89dGhpcy5fZ2V0KGUsImRhdGVGb3JtYXQiKTtvLm1hdGNoKC9bRE1dLykmJih0PWZ1bmN0aW9uKGUpe2ZvcihpPTAscz0wLG49MDtlLmxlbmd0aD5uO24rKyllW25dLmxlbmd0aD5pJiYoaT1lW25dLmxlbmd0aCxzPW4pO3JldHVybiBzfSxhLnNldE1vbnRoKHQodGhpcy5fZ2V0KGUsby5tYXRjaCgvTU0vKT8ibW9udGhOYW1lcyI6Im1vbnRoTmFtZXNTaG9ydCIpKSksYS5zZXREYXRlKHQodGhpcy5fZ2V0KGUsby5tYXRjaCgvREQvKT8iZGF5TmFtZXMiOiJkYXlOYW1lc1Nob3J0IikpKzIwLWEuZ2V0RGF5KCkpKSxlLmlucHV0LmF0dHIoInNpemUiLHRoaXMuX2Zvcm1hdERhdGUoZSxhKS5sZW5ndGgpfX0sX2lubGluZURhdGVwaWNrZXI6ZnVuY3Rpb24odCxpKXt2YXIgcz1lKHQpO3MuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpfHwocy5hZGRDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkuYXBwZW5kKGkuZHBEaXYpLGUuZGF0YSh0LCJkYXRlcGlja2VyIixpKSx0aGlzLl9zZXREYXRlKGksdGhpcy5fZ2V0RGVmYXVsdERhdGUoaSksITApLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGkpLGkuc2V0dGluZ3MuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKHQpLGkuZHBEaXYuY3NzKCJkaXNwbGF5IiwiYmxvY2siKSl9LF9kaWFsb2dEYXRlcGlja2VyOmZ1bmN0aW9uKHQsaSxzLG4sYSl7dmFyIHIsaCxsLHUsZCxjPXRoaXMuX2RpYWxvZ0luc3Q7cmV0dXJuIGN8fCh0aGlzLnV1aWQrPTEscj0iZHAiK3RoaXMudXVpZCx0aGlzLl9kaWFsb2dJbnB1dD1lKCI8aW5wdXQgdHlwZT0ndGV4dCcgaWQ9JyIrcisiJyBzdHlsZT0ncG9zaXRpb246IGFic29sdXRlOyB0b3A6IC0xMDBweDsgd2lkdGg6IDBweDsnLz4iKSx0aGlzLl9kaWFsb2dJbnB1dC5rZXlkb3duKHRoaXMuX2RvS2V5RG93biksZSgiYm9keSIpLmFwcGVuZCh0aGlzLl9kaWFsb2dJbnB1dCksYz10aGlzLl9kaWFsb2dJbnN0PXRoaXMuX25ld0luc3QodGhpcy5fZGlhbG9nSW5wdXQsITEpLGMuc2V0dGluZ3M9e30sZS5kYXRhKHRoaXMuX2RpYWxvZ0lucHV0WzBdLCJkYXRlcGlja2VyIixjKSksbyhjLnNldHRpbmdzLG58fHt9KSxpPWkmJmkuY29uc3RydWN0b3I9PT1EYXRlP3RoaXMuX2Zvcm1hdERhdGUoYyxpKTppLHRoaXMuX2RpYWxvZ0lucHV0LnZhbChpKSx0aGlzLl9wb3M9YT9hLmxlbmd0aD9hOlthLnBhZ2VYLGEucGFnZVldOm51bGwsdGhpcy5fcG9zfHwoaD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsbD1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LHU9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnR8fGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCxkPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLHRoaXMuX3Bvcz1baC8yLTEwMCt1LGwvMi0xNTArZF0pLHRoaXMuX2RpYWxvZ0lucHV0LmNzcygibGVmdCIsdGhpcy5fcG9zWzBdKzIwKyJweCIpLmNzcygidG9wIix0aGlzLl9wb3NbMV0rInB4IiksYy5zZXR0aW5ncy5vblNlbGVjdD1zLHRoaXMuX2luRGlhbG9nPSEwLHRoaXMuZHBEaXYuYWRkQ2xhc3ModGhpcy5fZGlhbG9nQ2xhc3MpLHRoaXMuX3Nob3dEYXRlcGlja2VyKHRoaXMuX2RpYWxvZ0lucHV0WzBdKSxlLmJsb2NrVUkmJmUuYmxvY2tVSSh0aGlzLmRwRGl2KSxlLmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0sImRhdGVwaWNrZXIiLGMpLHRoaXN9LF9kZXN0cm95RGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt2YXIgaSxzPWUodCksbj1lLmRhdGEodCwiZGF0ZXBpY2tlciIpO3MuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpJiYoaT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksZS5yZW1vdmVEYXRhKHQsImRhdGVwaWNrZXIiKSwiaW5wdXQiPT09aT8obi5hcHBlbmQucmVtb3ZlKCksbi50cmlnZ2VyLnJlbW92ZSgpLHMucmVtb3ZlQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLnVuYmluZCgiZm9jdXMiLHRoaXMuX3Nob3dEYXRlcGlja2VyKS51bmJpbmQoImtleWRvd24iLHRoaXMuX2RvS2V5RG93bikudW5iaW5kKCJrZXlwcmVzcyIsdGhpcy5fZG9LZXlQcmVzcykudW5iaW5kKCJrZXl1cCIsdGhpcy5fZG9LZXlVcCkpOigiZGl2Ij09PWl8fCJzcGFuIj09PWkpJiZzLnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5lbXB0eSgpKX0sX2VuYWJsZURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIGkscyxuPWUodCksYT1lLmRhdGEodCwiZGF0ZXBpY2tlciIpO24uaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpJiYoaT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksImlucHV0Ij09PWk/KHQuZGlzYWJsZWQ9ITEsYS50cmlnZ2VyLmZpbHRlcigiYnV0dG9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITF9KS5lbmQoKS5maWx0ZXIoImltZyIpLmNzcyh7b3BhY2l0eToiMS4wIixjdXJzb3I6IiJ9KSk6KCJkaXYiPT09aXx8InNwYW4iPT09aSkmJihzPW4uY2hpbGRyZW4oIi4iK3RoaXMuX2lubGluZUNsYXNzKSxzLmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikscy5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciIpLnByb3AoImRpc2FibGVkIiwhMSkpLHRoaXMuX2Rpc2FibGVkSW5wdXRzPWUubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dD9udWxsOmV9KSl9LF9kaXNhYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbih0KXt2YXIgaSxzLG49ZSh0KSxhPWUuZGF0YSh0LCJkYXRlcGlja2VyIik7bi5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkmJihpPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwiaW5wdXQiPT09aT8odC5kaXNhYmxlZD0hMCxhLnRyaWdnZXIuZmlsdGVyKCJidXR0b24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hMH0pLmVuZCgpLmZpbHRlcigiaW1nIikuY3NzKHtvcGFjaXR5OiIwLjUiLGN1cnNvcjoiZGVmYXVsdCJ9KSk6KCJkaXYiPT09aXx8InNwYW4iPT09aSkmJihzPW4uY2hpbGRyZW4oIi4iK3RoaXMuX2lubGluZUNsYXNzKSxzLmNoaWxkcmVuKCkuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikscy5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciIpLnByb3AoImRpc2FibGVkIiwhMCkpLHRoaXMuX2Rpc2FibGVkSW5wdXRzPWUubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dD9udWxsOmV9KSx0aGlzLl9kaXNhYmxlZElucHV0c1t0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGhdPXQpfSxfaXNEaXNhYmxlZERhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITE7Zm9yKHZhciB0PTA7dGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoPnQ7dCsrKWlmKHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RdPT09ZSlyZXR1cm4hMDtyZXR1cm4hMX0sX2dldEluc3Q6ZnVuY3Rpb24odCl7dHJ5e3JldHVybiBlLmRhdGEodCwiZGF0ZXBpY2tlciIpfWNhdGNoKGkpe3Rocm93Ik1pc3NpbmcgaW5zdGFuY2UgZGF0YSBmb3IgdGhpcyBkYXRlcGlja2VyIn19LF9vcHRpb25EYXRlcGlja2VyOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbixhLHIsaCxsPXRoaXMuX2dldEluc3QodCk7cmV0dXJuIDI9PT1hcmd1bWVudHMubGVuZ3RoJiYic3RyaW5nIj09dHlwZW9mIGk/ImRlZmF1bHRzIj09PWk/ZS5leHRlbmQoe30sZS5kYXRlcGlja2VyLl9kZWZhdWx0cyk6bD8iYWxsIj09PWk/ZS5leHRlbmQoe30sbC5zZXR0aW5ncyk6dGhpcy5fZ2V0KGwsaSk6bnVsbDoobj1pfHx7fSwic3RyaW5nIj09dHlwZW9mIGkmJihuPXt9LG5baV09cyksbCYmKHRoaXMuX2N1ckluc3Q9PT1sJiZ0aGlzLl9oaWRlRGF0ZXBpY2tlcigpLGE9dGhpcy5fZ2V0RGF0ZURhdGVwaWNrZXIodCwhMCkscj10aGlzLl9nZXRNaW5NYXhEYXRlKGwsIm1pbiIpLGg9dGhpcy5fZ2V0TWluTWF4RGF0ZShsLCJtYXgiKSxvKGwuc2V0dGluZ3MsbiksbnVsbCE9PXImJnZvaWQgMCE9PW4uZGF0ZUZvcm1hdCYmdm9pZCAwPT09bi5taW5EYXRlJiYobC5zZXR0aW5ncy5taW5EYXRlPXRoaXMuX2Zvcm1hdERhdGUobCxyKSksbnVsbCE9PWgmJnZvaWQgMCE9PW4uZGF0ZUZvcm1hdCYmdm9pZCAwPT09bi5tYXhEYXRlJiYobC5zZXR0aW5ncy5tYXhEYXRlPXRoaXMuX2Zvcm1hdERhdGUobCxoKSksImRpc2FibGVkImluIG4mJihuLmRpc2FibGVkP3RoaXMuX2Rpc2FibGVEYXRlcGlja2VyKHQpOnRoaXMuX2VuYWJsZURhdGVwaWNrZXIodCkpLHRoaXMuX2F0dGFjaG1lbnRzKGUodCksbCksdGhpcy5fYXV0b1NpemUobCksdGhpcy5fc2V0RGF0ZShsLGEpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShsKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGwpKSx2b2lkIDApCi19LF9jaGFuZ2VEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCxpKXt0aGlzLl9vcHRpb25EYXRlcGlja2VyKGUsdCxpKX0sX3JlZnJlc2hEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldEluc3QoZSk7dCYmdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcih0KX0sX3NldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5fZ2V0SW5zdChlKTtpJiYodGhpcy5fc2V0RGF0ZShpLHQpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGkpKX0sX2dldERhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIGk9dGhpcy5fZ2V0SW5zdChlKTtyZXR1cm4gaSYmIWkuaW5saW5lJiZ0aGlzLl9zZXREYXRlRnJvbUZpZWxkKGksdCksaT90aGlzLl9nZXREYXRlKGkpOm51bGx9LF9kb0tleURvd246ZnVuY3Rpb24odCl7dmFyIGkscyxuLGE9ZS5kYXRlcGlja2VyLl9nZXRJbnN0KHQudGFyZ2V0KSxvPSEwLHI9YS5kcERpdi5pcygiLnVpLWRhdGVwaWNrZXItcnRsIik7aWYoYS5fa2V5RXZlbnQ9ITAsZS5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZylzd2l0Y2godC5rZXlDb2RlKXtjYXNlIDk6ZS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLG89ITE7YnJlYWs7Y2FzZSAxMzpyZXR1cm4gbj1lKCJ0ZC4iK2UuZGF0ZXBpY2tlci5fZGF5T3ZlckNsYXNzKyI6bm90KC4iK2UuZGF0ZXBpY2tlci5fY3VycmVudENsYXNzKyIpIixhLmRwRGl2KSxuWzBdJiZlLmRhdGVwaWNrZXIuX3NlbGVjdERheSh0LnRhcmdldCxhLnNlbGVjdGVkTW9udGgsYS5zZWxlY3RlZFllYXIsblswXSksaT1lLmRhdGVwaWNrZXIuX2dldChhLCJvblNlbGVjdCIpLGk/KHM9ZS5kYXRlcGlja2VyLl9mb3JtYXREYXRlKGEpLGkuYXBwbHkoYS5pbnB1dD9hLmlucHV0WzBdOm51bGwsW3MsYV0pKTplLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksITE7Y2FzZSAyNzplLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7YnJlYWs7Y2FzZSAzMzplLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsdC5jdHJsS2V5Py1lLmRhdGVwaWNrZXIuX2dldChhLCJzdGVwQmlnTW9udGhzIik6LWUuZGF0ZXBpY2tlci5fZ2V0KGEsInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzQ6ZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LHQuY3RybEtleT8rZS5kYXRlcGlja2VyLl9nZXQoYSwic3RlcEJpZ01vbnRocyIpOitlLmRhdGVwaWNrZXIuX2dldChhLCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM1Oih0LmN0cmxLZXl8fHQubWV0YUtleSkmJmUuZGF0ZXBpY2tlci5fY2xlYXJEYXRlKHQudGFyZ2V0KSxvPXQuY3RybEtleXx8dC5tZXRhS2V5O2JyZWFrO2Nhc2UgMzY6KHQuY3RybEtleXx8dC5tZXRhS2V5KSYmZS5kYXRlcGlja2VyLl9nb3RvVG9kYXkodC50YXJnZXQpLG89dC5jdHJsS2V5fHx0Lm1ldGFLZXk7YnJlYWs7Y2FzZSAzNzoodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQscj8xOi0xLCJEIiksbz10LmN0cmxLZXl8fHQubWV0YUtleSx0Lm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsdC5jdHJsS2V5Py1lLmRhdGVwaWNrZXIuX2dldChhLCJzdGVwQmlnTW9udGhzIik6LWUuZGF0ZXBpY2tlci5fZ2V0KGEsInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzg6KHQuY3RybEtleXx8dC5tZXRhS2V5KSYmZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHQudGFyZ2V0LC03LCJEIiksbz10LmN0cmxLZXl8fHQubWV0YUtleTticmVhaztjYXNlIDM5Oih0LmN0cmxLZXl8fHQubWV0YUtleSkmJmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCxyPy0xOjEsIkQiKSxvPXQuY3RybEtleXx8dC5tZXRhS2V5LHQub3JpZ2luYWxFdmVudC5hbHRLZXkmJmUuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZSh0LnRhcmdldCx0LmN0cmxLZXk/K2UuZGF0ZXBpY2tlci5fZ2V0KGEsInN0ZXBCaWdNb250aHMiKTorZS5kYXRlcGlja2VyLl9nZXQoYSwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSA0MDoodC5jdHJsS2V5fHx0Lm1ldGFLZXkpJiZlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUodC50YXJnZXQsNywiRCIpLG89dC5jdHJsS2V5fHx0Lm1ldGFLZXk7YnJlYWs7ZGVmYXVsdDpvPSExfWVsc2UgMzY9PT10LmtleUNvZGUmJnQuY3RybEtleT9lLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRoaXMpOm89ITE7byYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpKX0sX2RvS2V5UHJlc3M6ZnVuY3Rpb24odCl7dmFyIGkscyxuPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0LnRhcmdldCk7cmV0dXJuIGUuZGF0ZXBpY2tlci5fZ2V0KG4sImNvbnN0cmFpbklucHV0Iik/KGk9ZS5kYXRlcGlja2VyLl9wb3NzaWJsZUNoYXJzKGUuZGF0ZXBpY2tlci5fZ2V0KG4sImRhdGVGb3JtYXQiKSkscz1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PXQuY2hhckNvZGU/dC5rZXlDb2RlOnQuY2hhckNvZGUpLHQuY3RybEtleXx8dC5tZXRhS2V5fHwiICI+c3x8IWl8fGkuaW5kZXhPZihzKT4tMSk6dm9pZCAwfSxfZG9LZXlVcDpmdW5jdGlvbih0KXt2YXIgaSxzPWUuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0LnRhcmdldCk7aWYocy5pbnB1dC52YWwoKSE9PXMubGFzdFZhbCl0cnl7aT1lLmRhdGVwaWNrZXIucGFyc2VEYXRlKGUuZGF0ZXBpY2tlci5fZ2V0KHMsImRhdGVGb3JtYXQiKSxzLmlucHV0P3MuaW5wdXQudmFsKCk6bnVsbCxlLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhzKSksaSYmKGUuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChzKSxlLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZShzKSxlLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIocykpfWNhdGNoKG4pe31yZXR1cm4hMH0sX3Nob3dEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe2lmKHQ9dC50YXJnZXR8fHQsImlucHV0IiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmKHQ9ZSgiaW5wdXQiLHQucGFyZW50Tm9kZSlbMF0pLCFlLmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKHQpJiZlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dCE9PXQpe3ZhciBpLG4sYSxyLGgsbCx1O2k9ZS5kYXRlcGlja2VyLl9nZXRJbnN0KHQpLGUuZGF0ZXBpY2tlci5fY3VySW5zdCYmZS5kYXRlcGlja2VyLl9jdXJJbnN0IT09aSYmKGUuZGF0ZXBpY2tlci5fY3VySW5zdC5kcERpdi5zdG9wKCEwLCEwKSxpJiZlLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZlLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKGUuZGF0ZXBpY2tlci5fY3VySW5zdC5pbnB1dFswXSkpLG49ZS5kYXRlcGlja2VyLl9nZXQoaSwiYmVmb3JlU2hvdyIpLGE9bj9uLmFwcGx5KHQsW3QsaV0pOnt9LGEhPT0hMSYmKG8oaS5zZXR0aW5ncyxhKSxpLmxhc3RWYWw9bnVsbCxlLmRhdGVwaWNrZXIuX2xhc3RJbnB1dD10LGUuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZChpKSxlLmRhdGVwaWNrZXIuX2luRGlhbG9nJiYodC52YWx1ZT0iIiksZS5kYXRlcGlja2VyLl9wb3N8fChlLmRhdGVwaWNrZXIuX3Bvcz1lLmRhdGVwaWNrZXIuX2ZpbmRQb3ModCksZS5kYXRlcGlja2VyLl9wb3NbMV0rPXQub2Zmc2V0SGVpZ2h0KSxyPSExLGUodCkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gcnw9ImZpeGVkIj09PWUodGhpcykuY3NzKCJwb3NpdGlvbiIpLCFyfSksaD17bGVmdDplLmRhdGVwaWNrZXIuX3Bvc1swXSx0b3A6ZS5kYXRlcGlja2VyLl9wb3NbMV19LGUuZGF0ZXBpY2tlci5fcG9zPW51bGwsaS5kcERpdi5lbXB0eSgpLGkuZHBEaXYuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGRpc3BsYXk6ImJsb2NrIix0b3A6Ii0xMDAwcHgifSksZS5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKGkpLGg9ZS5kYXRlcGlja2VyLl9jaGVja09mZnNldChpLGgsciksaS5kcERpdi5jc3Moe3Bvc2l0aW9uOmUuZGF0ZXBpY2tlci5faW5EaWFsb2cmJmUuYmxvY2tVST8ic3RhdGljIjpyPyJmaXhlZCI6ImFic29sdXRlIixkaXNwbGF5OiJub25lIixsZWZ0OmgubGVmdCsicHgiLHRvcDpoLnRvcCsicHgifSksaS5pbmxpbmV8fChsPWUuZGF0ZXBpY2tlci5fZ2V0KGksInNob3dBbmltIiksdT1lLmRhdGVwaWNrZXIuX2dldChpLCJkdXJhdGlvbiIpLGkuZHBEaXYuY3NzKCJ6LWluZGV4IixzKGUodCkpKzEpLGUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmc9ITAsZS5lZmZlY3RzJiZlLmVmZmVjdHMuZWZmZWN0W2xdP2kuZHBEaXYuc2hvdyhsLGUuZGF0ZXBpY2tlci5fZ2V0KGksInNob3dPcHRpb25zIiksdSk6aS5kcERpdltsfHwic2hvdyJdKGw/dTpudWxsKSxlLmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQoaSkmJmkuaW5wdXQuZm9jdXMoKSxlLmRhdGVwaWNrZXIuX2N1ckluc3Q9aSkpfX0sX3VwZGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dGhpcy5tYXhSb3dzPTQsbT10LHQuZHBEaXYuZW1wdHkoKS5hcHBlbmQodGhpcy5fZ2VuZXJhdGVIVE1MKHQpKSx0aGlzLl9hdHRhY2hIYW5kbGVycyh0KSx0LmRwRGl2LmZpbmQoIi4iK3RoaXMuX2RheU92ZXJDbGFzcysiIGEiKTt2YXIgaSxzPXRoaXMuX2dldE51bWJlck9mTW9udGhzKHQpLG49c1sxXSxhPTE3O3QuZHBEaXYucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItbXVsdGktMiB1aS1kYXRlcGlja2VyLW11bHRpLTMgdWktZGF0ZXBpY2tlci1tdWx0aS00Iikud2lkdGgoIiIpLG4+MSYmdC5kcERpdi5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1tdWx0aS0iK24pLmNzcygid2lkdGgiLGEqbisiZW0iKSx0LmRwRGl2WygxIT09c1swXXx8MSE9PXNbMV0/ImFkZCI6InJlbW92ZSIpKyJDbGFzcyJdKCJ1aS1kYXRlcGlja2VyLW11bHRpIiksdC5kcERpdlsodGhpcy5fZ2V0KHQsImlzUlRMIik/ImFkZCI6InJlbW92ZSIpKyJDbGFzcyJdKCJ1aS1kYXRlcGlja2VyLXJ0bCIpLHQ9PT1lLmRhdGVwaWNrZXIuX2N1ckluc3QmJmUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJmUuZGF0ZXBpY2tlci5fc2hvdWxkRm9jdXNJbnB1dCh0KSYmdC5pbnB1dC5mb2N1cygpLHQueWVhcnNodG1sJiYoaT10LnllYXJzaHRtbCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aT09PXQueWVhcnNodG1sJiZ0LnllYXJzaHRtbCYmdC5kcERpdi5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0IikucmVwbGFjZVdpdGgodC55ZWFyc2h0bWwpLGk9dC55ZWFyc2h0bWw9bnVsbH0sMCkpfSxfc2hvdWxkRm9jdXNJbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gZS5pbnB1dCYmZS5pbnB1dC5pcygiOnZpc2libGUiKSYmIWUuaW5wdXQuaXMoIjpkaXNhYmxlZCIpJiYhZS5pbnB1dC5pcygiOmZvY3VzIil9LF9jaGVja09mZnNldDpmdW5jdGlvbih0LGkscyl7dmFyIG49dC5kcERpdi5vdXRlcldpZHRoKCksYT10LmRwRGl2Lm91dGVySGVpZ2h0KCksbz10LmlucHV0P3QuaW5wdXQub3V0ZXJXaWR0aCgpOjAscj10LmlucHV0P3QuaW5wdXQub3V0ZXJIZWlnaHQoKTowLGg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKyhzPzA6ZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKSxsPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQrKHM/MDplKGRvY3VtZW50KS5zY3JvbGxUb3AoKSk7cmV0dXJuIGkubGVmdC09dGhpcy5fZ2V0KHQsImlzUlRMIik/bi1vOjAsaS5sZWZ0LT1zJiZpLmxlZnQ9PT10LmlucHV0Lm9mZnNldCgpLmxlZnQ/ZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpOjAsaS50b3AtPXMmJmkudG9wPT09dC5pbnB1dC5vZmZzZXQoKS50b3Arcj9lKGRvY3VtZW50KS5zY3JvbGxUb3AoKTowLGkubGVmdC09TWF0aC5taW4oaS5sZWZ0LGkubGVmdCtuPmgmJmg+bj9NYXRoLmFicyhpLmxlZnQrbi1oKTowKSxpLnRvcC09TWF0aC5taW4oaS50b3AsaS50b3ArYT5sJiZsPmE/TWF0aC5hYnMoYStyKTowKSxpfSxfZmluZFBvczpmdW5jdGlvbih0KXtmb3IodmFyIGkscz10aGlzLl9nZXRJbnN0KHQpLG49dGhpcy5fZ2V0KHMsImlzUlRMIik7dCYmKCJoaWRkZW4iPT09dC50eXBlfHwxIT09dC5ub2RlVHlwZXx8ZS5leHByLmZpbHRlcnMuaGlkZGVuKHQpKTspdD10W24/InByZXZpb3VzU2libGluZyI6Im5leHRTaWJsaW5nIl07cmV0dXJuIGk9ZSh0KS5vZmZzZXQoKSxbaS5sZWZ0LGkudG9wXX0sX2hpZGVEYXRlcGlja2VyOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhLG89dGhpcy5fY3VySW5zdDshb3x8dCYmbyE9PWUuZGF0YSh0LCJkYXRlcGlja2VyIil8fHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nJiYoaT10aGlzLl9nZXQobywic2hvd0FuaW0iKSxzPXRoaXMuX2dldChvLCJkdXJhdGlvbiIpLG49ZnVuY3Rpb24oKXtlLmRhdGVwaWNrZXIuX3RpZHlEaWFsb2cobyl9LGUuZWZmZWN0cyYmKGUuZWZmZWN0cy5lZmZlY3RbaV18fGUuZWZmZWN0c1tpXSk/by5kcERpdi5oaWRlKGksZS5kYXRlcGlja2VyLl9nZXQobywic2hvd09wdGlvbnMiKSxzLG4pOm8uZHBEaXZbInNsaWRlRG93biI9PT1pPyJzbGlkZVVwIjoiZmFkZUluIj09PWk/ImZhZGVPdXQiOiJoaWRlIl0oaT9zOm51bGwsbiksaXx8bigpLHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nPSExLGE9dGhpcy5fZ2V0KG8sIm9uQ2xvc2UiKSxhJiZhLmFwcGx5KG8uaW5wdXQ/by5pbnB1dFswXTpudWxsLFtvLmlucHV0P28uaW5wdXQudmFsKCk6IiIsb10pLHRoaXMuX2xhc3RJbnB1dD1udWxsLHRoaXMuX2luRGlhbG9nJiYodGhpcy5fZGlhbG9nSW5wdXQuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6IjAiLHRvcDoiLTEwMHB4In0pLGUuYmxvY2tVSSYmKGUudW5ibG9ja1VJKCksZSgiYm9keSIpLmFwcGVuZCh0aGlzLmRwRGl2KSkpLHRoaXMuX2luRGlhbG9nPSExKX0sX3RpZHlEaWFsb2c6ZnVuY3Rpb24oZSl7ZS5kcERpdi5yZW1vdmVDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcykudW5iaW5kKCIudWktZGF0ZXBpY2tlci1jYWxlbmRhciIpfSxfY2hlY2tFeHRlcm5hbENsaWNrOmZ1bmN0aW9uKHQpe2lmKGUuZGF0ZXBpY2tlci5fY3VySW5zdCl7dmFyIGk9ZSh0LnRhcmdldCkscz1lLmRhdGVwaWNrZXIuX2dldEluc3QoaVswXSk7KGlbMF0uaWQhPT1lLmRhdGVwaWNrZXIuX21haW5EaXZJZCYmMD09PWkucGFyZW50cygiIyIrZS5kYXRlcGlja2VyLl9tYWluRGl2SWQpLmxlbmd0aCYmIWkuaGFzQ2xhc3MoZS5kYXRlcGlja2VyLm1hcmtlckNsYXNzTmFtZSkmJiFpLmNsb3Nlc3QoIi4iK2UuZGF0ZXBpY2tlci5fdHJpZ2dlckNsYXNzKS5sZW5ndGgmJmUuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJighZS5kYXRlcGlja2VyLl9pbkRpYWxvZ3x8IWUuYmxvY2tVSSl8fGkuaGFzQ2xhc3MoZS5kYXRlcGlja2VyLm1hcmtlckNsYXNzTmFtZSkmJmUuZGF0ZXBpY2tlci5fY3VySW5zdCE9PXMpJiZlLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCl9fSxfYWRqdXN0RGF0ZTpmdW5jdGlvbih0LGkscyl7dmFyIG49ZSh0KSxhPXRoaXMuX2dldEluc3QoblswXSk7dGhpcy5faXNEaXNhYmxlZERhdGVwaWNrZXIoblswXSl8fCh0aGlzLl9hZGp1c3RJbnN0RGF0ZShhLGkrKCJNIj09PXM/dGhpcy5fZ2V0KGEsInNob3dDdXJyZW50QXRQb3MiKTowKSxzKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGEpKX0sX2dvdG9Ub2RheTpmdW5jdGlvbih0KXt2YXIgaSxzPWUodCksbj10aGlzLl9nZXRJbnN0KHNbMF0pO3RoaXMuX2dldChuLCJnb3RvQ3VycmVudCIpJiZuLmN1cnJlbnREYXk/KG4uc2VsZWN0ZWREYXk9bi5jdXJyZW50RGF5LG4uZHJhd01vbnRoPW4uc2VsZWN0ZWRNb250aD1uLmN1cnJlbnRNb250aCxuLmRyYXdZZWFyPW4uc2VsZWN0ZWRZZWFyPW4uY3VycmVudFllYXIpOihpPW5ldyBEYXRlLG4uc2VsZWN0ZWREYXk9aS5nZXREYXRlKCksbi5kcmF3TW9udGg9bi5zZWxlY3RlZE1vbnRoPWkuZ2V0TW9udGgoKSxuLmRyYXdZZWFyPW4uc2VsZWN0ZWRZZWFyPWkuZ2V0RnVsbFllYXIoKSksdGhpcy5fbm90aWZ5Q2hhbmdlKG4pLHRoaXMuX2FkanVzdERhdGUocyl9LF9zZWxlY3RNb250aFllYXI6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPWUodCksYT10aGlzLl9nZXRJbnN0KG5bMF0pO2FbInNlbGVjdGVkIisoIk0iPT09cz8iTW9udGgiOiJZZWFyIildPWFbImRyYXciKygiTSI9PT1zPyJNb250aCI6IlllYXIiKV09cGFyc2VJbnQoaS5vcHRpb25zW2kuc2VsZWN0ZWRJbmRleF0udmFsdWUsMTApLHRoaXMuX25vdGlmeUNoYW5nZShhKSx0aGlzLl9hZGp1c3REYXRlKG4pfSxfc2VsZWN0RGF5OmZ1bmN0aW9uKHQsaSxzLG4pe3ZhciBhLG89ZSh0KTtlKG4pLmhhc0NsYXNzKHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKXx8dGhpcy5faXNEaXNhYmxlZERhdGVwaWNrZXIob1swXSl8fChhPXRoaXMuX2dldEluc3Qob1swXSksYS5zZWxlY3RlZERheT1hLmN1cnJlbnREYXk9ZSgiYSIsbikuaHRtbCgpLGEuc2VsZWN0ZWRNb250aD1hLmN1cnJlbnRNb250aD1pLGEuc2VsZWN0ZWRZZWFyPWEuY3VycmVudFllYXI9cyx0aGlzLl9zZWxlY3REYXRlKHQsdGhpcy5fZm9ybWF0RGF0ZShhLGEuY3VycmVudERheSxhLmN1cnJlbnRNb250aCxhLmN1cnJlbnRZZWFyKSkpfSxfY2xlYXJEYXRlOmZ1bmN0aW9uKHQpe3ZhciBpPWUodCk7dGhpcy5fc2VsZWN0RGF0ZShpLCIiKX0sX3NlbGVjdERhdGU6ZnVuY3Rpb24odCxpKXt2YXIgcyxuPWUodCksYT10aGlzLl9nZXRJbnN0KG5bMF0pO2k9bnVsbCE9aT9pOnRoaXMuX2Zvcm1hdERhdGUoYSksYS5pbnB1dCYmYS5pbnB1dC52YWwoaSksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKGEpLHM9dGhpcy5fZ2V0KGEsIm9uU2VsZWN0Iikscz9zLmFwcGx5KGEuaW5wdXQ/YS5pbnB1dFswXTpudWxsLFtpLGFdKTphLmlucHV0JiZhLmlucHV0LnRyaWdnZXIoImNoYW5nZSIpLGEuaW5saW5lP3RoaXMuX3VwZGF0ZURhdGVwaWNrZXIoYSk6KHRoaXMuX2hpZGVEYXRlcGlja2VyKCksdGhpcy5fbGFzdElucHV0PWEuaW5wdXRbMF0sIm9iamVjdCIhPXR5cGVvZiBhLmlucHV0WzBdJiZhLmlucHV0LmZvY3VzKCksdGhpcy5fbGFzdElucHV0PW51bGwpfSxfdXBkYXRlQWx0ZXJuYXRlOmZ1bmN0aW9uKHQpe3ZhciBpLHMsbixhPXRoaXMuX2dldCh0LCJhbHRGaWVsZCIpO2EmJihpPXRoaXMuX2dldCh0LCJhbHRGb3JtYXQiKXx8dGhpcy5fZ2V0KHQsImRhdGVGb3JtYXQiKSxzPXRoaXMuX2dldERhdGUodCksbj10aGlzLmZvcm1hdERhdGUoaSxzLHRoaXMuX2dldEZvcm1hdENvbmZpZyh0KSksZShhKS5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS52YWwobil9KSl9LG5vV2Vla2VuZHM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXREYXkoKTtyZXR1cm5bdD4wJiY2PnQsIiJdfSxpc284NjAxV2VlazpmdW5jdGlvbihlKXt2YXIgdCxpPW5ldyBEYXRlKGUuZ2V0VGltZSgpKTtyZXR1cm4gaS5zZXREYXRlKGkuZ2V0RGF0ZSgpKzQtKGkuZ2V0RGF5KCl8fDcpKSx0PWkuZ2V0VGltZSgpLGkuc2V0TW9udGgoMCksaS5zZXREYXRlKDEpLE1hdGguZmxvb3IoTWF0aC5yb3VuZCgodC1pKS84NjRlNSkvNykrMX0scGFyc2VEYXRlOmZ1bmN0aW9uKHQsaSxzKXtpZihudWxsPT10fHxudWxsPT1pKXRocm93IkludmFsaWQgYXJndW1lbnRzIjtpZihpPSJvYmplY3QiPT10eXBlb2YgaT8iIitpOmkrIiIsIiI9PT1pKXJldHVybiBudWxsO3ZhciBuLGEsbyxyLGg9MCxsPShzP3Muc2hvcnRZZWFyQ3V0b2ZmOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5zaG9ydFllYXJDdXRvZmYsdT0ic3RyaW5nIiE9dHlwZW9mIGw/bDoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwK3BhcnNlSW50KGwsMTApLGQ9KHM/cy5kYXlOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lc1Nob3J0LGM9KHM/cy5kYXlOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXMscD0ocz9zLm1vbnRoTmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lc1Nob3J0LGY9KHM/cy5tb250aE5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzLG09LTEsZz0tMSx2PS0xLHk9LTEsYj0hMSxfPWZ1bmN0aW9uKGUpe3ZhciBpPXQubGVuZ3RoPm4rMSYmdC5jaGFyQXQobisxKT09PWU7cmV0dXJuIGkmJm4rKyxpfSx4PWZ1bmN0aW9uKGUpe3ZhciB0PV8oZSkscz0iQCI9PT1lPzE0OiIhIj09PWU/MjA6InkiPT09ZSYmdD80OiJvIj09PWU/MzoyLG49UmVnRXhwKCJeXFxkezEsIitzKyJ9IiksYT1pLnN1YnN0cmluZyhoKS5tYXRjaChuKTtpZighYSl0aHJvdyJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiAiK2g7cmV0dXJuIGgrPWFbMF0ubGVuZ3RoLHBhcnNlSW50KGFbMF0sMTApfSx3PWZ1bmN0aW9uKHQscyxuKXt2YXIgYT0tMSxvPWUubWFwKF8odCk/bjpzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuW1t0LGVdXX0pLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4tKGVbMV0ubGVuZ3RoLXRbMV0ubGVuZ3RoKX0pO2lmKGUuZWFjaChvLGZ1bmN0aW9uKGUsdCl7dmFyIHM9dFsxXTtyZXR1cm4gaS5zdWJzdHIoaCxzLmxlbmd0aCkudG9Mb3dlckNhc2UoKT09PXMudG9Mb3dlckNhc2UoKT8oYT10WzBdLGgrPXMubGVuZ3RoLCExKTp2b2lkIDB9KSwtMSE9PWEpcmV0dXJuIGErMTt0aHJvdyJVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gIitofSxrPWZ1bmN0aW9uKCl7aWYoaS5jaGFyQXQoaCkhPT10LmNoYXJBdChuKSl0aHJvdyJVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gIitoO2grK307Zm9yKG49MDt0Lmxlbmd0aD5uO24rKylpZihiKSInIiE9PXQuY2hhckF0KG4pfHxfKCInIik/aygpOmI9ITE7ZWxzZSBzd2l0Y2godC5jaGFyQXQobikpe2Nhc2UiZCI6dj14KCJkIik7YnJlYWs7Y2FzZSJEIjp3KCJEIixkLGMpO2JyZWFrO2Nhc2UibyI6eT14KCJvIik7YnJlYWs7Y2FzZSJtIjpnPXgoIm0iKTticmVhaztjYXNlIk0iOmc9dygiTSIscCxmKTticmVhaztjYXNlInkiOm09eCgieSIpO2JyZWFrO2Nhc2UiQCI6cj1uZXcgRGF0ZSh4KCJAIikpLG09ci5nZXRGdWxsWWVhcigpLGc9ci5nZXRNb250aCgpKzEsdj1yLmdldERhdGUoKTticmVhaztjYXNlIiEiOnI9bmV3IERhdGUoKHgoIiEiKS10aGlzLl90aWNrc1RvMTk3MCkvMWU0KSxtPXIuZ2V0RnVsbFllYXIoKSxnPXIuZ2V0TW9udGgoKSsxLHY9ci5nZXREYXRlKCk7YnJlYWs7Y2FzZSInIjpfKCInIik/aygpOmI9ITA7YnJlYWs7ZGVmYXVsdDprKCl9aWYoaS5sZW5ndGg+aCYmKG89aS5zdWJzdHIoaCksIS9eXHMrLy50ZXN0KG8pKSl0aHJvdyJFeHRyYS91bnBhcnNlZCBjaGFyYWN0ZXJzIGZvdW5kIGluIGRhdGU6ICIrbztpZigtMT09PW0/bT0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCk6MTAwPm0mJihtKz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCsodT49bT8wOi0xMDApKSx5Pi0xKWZvcihnPTEsdj15Ozspe2lmKGE9dGhpcy5fZ2V0RGF5c0luTW9udGgobSxnLTEpLGE+PXYpYnJlYWs7ZysrLHYtPWF9aWYocj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShtLGctMSx2KSksci5nZXRGdWxsWWVhcigpIT09bXx8ci5nZXRNb250aCgpKzEhPT1nfHxyLmdldERhdGUoKSE9PXYpdGhyb3ciSW52YWxpZCBkYXRlIjtyZXR1cm4gcn0sQVRPTToieXktbW0tZGQiLENPT0tJRToiRCwgZGQgTSB5eSIsSVNPXzg2MDE6Inl5LW1tLWRkIixSRkNfODIyOiJELCBkIE0geSIsUkZDXzg1MDoiREQsIGRkLU0teSIsUkZDXzEwMzY6IkQsIGQgTSB5IixSRkNfMTEyMzoiRCwgZCBNIHl5IixSRkNfMjgyMjoiRCwgZCBNIHl5IixSU1M6IkQsIGQgTSB5IixUSUNLUzoiISIsVElNRVNUQU1QOiJAIixXM0M6Inl5LW1tLWRkIixfdGlja3NUbzE5NzA6MWU3KjYwKjYwKjI0Kig3MTg2ODUrTWF0aC5mbG9vcig0OTIuNSktTWF0aC5mbG9vcigxOS43KStNYXRoLmZsb29yKDQuOTI1KSksZm9ybWF0RGF0ZTpmdW5jdGlvbihlLHQsaSl7aWYoIXQpcmV0dXJuIiI7dmFyIHMsbj0oaT9pLmRheU5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsYT0oaT9pLmRheU5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcyxvPShpP2kubW9udGhOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQscj0oaT9pLm1vbnRoTmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsaD1mdW5jdGlvbih0KXt2YXIgaT1lLmxlbmd0aD5zKzEmJmUuY2hhckF0KHMrMSk9PT10O3JldHVybiBpJiZzKyssaX0sbD1mdW5jdGlvbihlLHQsaSl7dmFyIHM9IiIrdDtpZihoKGUpKWZvcig7aT5zLmxlbmd0aDspcz0iMCIrcztyZXR1cm4gc30sdT1mdW5jdGlvbihlLHQsaSxzKXtyZXR1cm4gaChlKT9zW3RdOmlbdF19LGQ9IiIsYz0hMTtpZih0KWZvcihzPTA7ZS5sZW5ndGg+cztzKyspaWYoYykiJyIhPT1lLmNoYXJBdChzKXx8aCgiJyIpP2QrPWUuY2hhckF0KHMpOmM9ITE7ZWxzZSBzd2l0Y2goZS5jaGFyQXQocykpe2Nhc2UiZCI6ZCs9bCgiZCIsdC5nZXREYXRlKCksMik7YnJlYWs7Y2FzZSJEIjpkKz11KCJEIix0LmdldERheSgpLG4sYSk7YnJlYWs7Y2FzZSJvIjpkKz1sKCJvIixNYXRoLnJvdW5kKChuZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKS5nZXRUaW1lKCktbmV3IERhdGUodC5nZXRGdWxsWWVhcigpLDAsMCkuZ2V0VGltZSgpKS84NjRlNSksMyk7YnJlYWs7Y2FzZSJtIjpkKz1sKCJtIix0LmdldE1vbnRoKCkrMSwyKTticmVhaztjYXNlIk0iOmQrPXUoIk0iLHQuZ2V0TW9udGgoKSxvLHIpO2JyZWFrO2Nhc2UieSI6ZCs9aCgieSIpP3QuZ2V0RnVsbFllYXIoKTooMTA+dC5nZXRZZWFyKCklMTAwPyIwIjoiIikrdC5nZXRZZWFyKCklMTAwO2JyZWFrO2Nhc2UiQCI6ZCs9dC5nZXRUaW1lKCk7YnJlYWs7Y2FzZSIhIjpkKz0xZTQqdC5nZXRUaW1lKCkrdGhpcy5fdGlja3NUbzE5NzA7YnJlYWs7Y2FzZSInIjpoKCInIik/ZCs9IiciOmM9ITA7YnJlYWs7ZGVmYXVsdDpkKz1lLmNoYXJBdChzKX1yZXR1cm4gZH0sX3Bvc3NpYmxlQ2hhcnM6ZnVuY3Rpb24oZSl7dmFyIHQsaT0iIixzPSExLG49ZnVuY3Rpb24oaSl7dmFyIHM9ZS5sZW5ndGg+dCsxJiZlLmNoYXJBdCh0KzEpPT09aTtyZXR1cm4gcyYmdCsrLHN9O2Zvcih0PTA7ZS5sZW5ndGg+dDt0KyspaWYocykiJyIhPT1lLmNoYXJBdCh0KXx8bigiJyIpP2krPWUuY2hhckF0KHQpOnM9ITE7ZWxzZSBzd2l0Y2goZS5jaGFyQXQodCkpe2Nhc2UiZCI6Y2FzZSJtIjpjYXNlInkiOmNhc2UiQCI6aSs9IjAxMjM0NTY3ODkiO2JyZWFrO2Nhc2UiRCI6Y2FzZSJNIjpyZXR1cm4gbnVsbDtjYXNlIiciOm4oIiciKT9pKz0iJyI6cz0hMDticmVhaztkZWZhdWx0OmkrPWUuY2hhckF0KHQpfXJldHVybiBpfSxfZ2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMCE9PWUuc2V0dGluZ3NbdF0/ZS5zZXR0aW5nc1t0XTp0aGlzLl9kZWZhdWx0c1t0XX0sX3NldERhdGVGcm9tRmllbGQ6ZnVuY3Rpb24oZSx0KXtpZihlLmlucHV0LnZhbCgpIT09ZS5sYXN0VmFsKXt2YXIgaT10aGlzLl9nZXQoZSwiZGF0ZUZvcm1hdCIpLHM9ZS5sYXN0VmFsPWUuaW5wdXQ/ZS5pbnB1dC52YWwoKTpudWxsLG49dGhpcy5fZ2V0RGVmYXVsdERhdGUoZSksYT1uLG89dGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpO3RyeXthPXRoaXMucGFyc2VEYXRlKGkscyxvKXx8bn1jYXRjaChyKXtzPXQ/IiI6c31lLnNlbGVjdGVkRGF5PWEuZ2V0RGF0ZSgpLGUuZHJhd01vbnRoPWUuc2VsZWN0ZWRNb250aD1hLmdldE1vbnRoKCksZS5kcmF3WWVhcj1lLnNlbGVjdGVkWWVhcj1hLmdldEZ1bGxZZWFyKCksZS5jdXJyZW50RGF5PXM/YS5nZXREYXRlKCk6MCxlLmN1cnJlbnRNb250aD1zP2EuZ2V0TW9udGgoKTowLGUuY3VycmVudFllYXI9cz9hLmdldEZ1bGxZZWFyKCk6MCx0aGlzLl9hZGp1c3RJbnN0RGF0ZShlKX19LF9nZXREZWZhdWx0RGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcmVzdHJpY3RNaW5NYXgoZSx0aGlzLl9kZXRlcm1pbmVEYXRlKGUsdGhpcy5fZ2V0KGUsImRlZmF1bHREYXRlIiksbmV3IERhdGUpKX0sX2RldGVybWluZURhdGU6ZnVuY3Rpb24odCxpLHMpe3ZhciBuPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlO3JldHVybiB0LnNldERhdGUodC5nZXREYXRlKCkrZSksdH0sYT1mdW5jdGlvbihpKXt0cnl7cmV0dXJuIGUuZGF0ZXBpY2tlci5wYXJzZURhdGUoZS5kYXRlcGlja2VyLl9nZXQodCwiZGF0ZUZvcm1hdCIpLGksZS5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcodCkpfWNhdGNoKHMpe31mb3IodmFyIG49KGkudG9Mb3dlckNhc2UoKS5tYXRjaCgvXmMvKT9lLmRhdGVwaWNrZXIuX2dldERhdGUodCk6bnVsbCl8fG5ldyBEYXRlLGE9bi5nZXRGdWxsWWVhcigpLG89bi5nZXRNb250aCgpLHI9bi5nZXREYXRlKCksaD0vKFsrXC1dP1swLTldKylccyooZHxEfHd8V3xtfE18eXxZKT8vZyxsPWguZXhlYyhpKTtsOyl7c3dpdGNoKGxbMl18fCJkIil7Y2FzZSJkIjpjYXNlIkQiOnIrPXBhcnNlSW50KGxbMV0sMTApO2JyZWFrO2Nhc2UidyI6Y2FzZSJXIjpyKz03KnBhcnNlSW50KGxbMV0sMTApO2JyZWFrO2Nhc2UibSI6Y2FzZSJNIjpvKz1wYXJzZUludChsWzFdLDEwKSxyPU1hdGgubWluKHIsZS5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChhLG8pKTticmVhaztjYXNlInkiOmNhc2UiWSI6YSs9cGFyc2VJbnQobFsxXSwxMCkscj1NYXRoLm1pbihyLGUuZGF0ZXBpY2tlci5fZ2V0RGF5c0luTW9udGgoYSxvKSl9bD1oLmV4ZWMoaSl9cmV0dXJuIG5ldyBEYXRlKGEsbyxyKX0sbz1udWxsPT1pfHwiIj09PWk/czoic3RyaW5nIj09dHlwZW9mIGk/YShpKToibnVtYmVyIj09dHlwZW9mIGk/aXNOYU4oaSk/czpuKGkpOm5ldyBEYXRlKGkuZ2V0VGltZSgpKTtyZXR1cm4gbz1vJiYiSW52YWxpZCBEYXRlIj09IiIrbz9zOm8sbyYmKG8uc2V0SG91cnMoMCksby5zZXRNaW51dGVzKDApLG8uc2V0U2Vjb25kcygwKSxvLnNldE1pbGxpc2Vjb25kcygwKSksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3Qobyl9LF9kYXlsaWdodFNhdmluZ0FkanVzdDpmdW5jdGlvbihlKXtyZXR1cm4gZT8oZS5zZXRIb3VycyhlLmdldEhvdXJzKCk+MTI/ZS5nZXRIb3VycygpKzI6MCksZSk6bnVsbH0sX3NldERhdGU6ZnVuY3Rpb24oZSx0LGkpe3ZhciBzPSF0LG49ZS5zZWxlY3RlZE1vbnRoLGE9ZS5zZWxlY3RlZFllYXIsbz10aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RldGVybWluZURhdGUoZSx0LG5ldyBEYXRlKSk7ZS5zZWxlY3RlZERheT1lLmN1cnJlbnREYXk9by5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPWUuY3VycmVudE1vbnRoPW8uZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPWUuY3VycmVudFllYXI9by5nZXRGdWxsWWVhcigpLG49PT1lLnNlbGVjdGVkTW9udGgmJmE9PT1lLnNlbGVjdGVkWWVhcnx8aXx8dGhpcy5fbm90aWZ5Q2hhbmdlKGUpLHRoaXMuX2FkanVzdEluc3REYXRlKGUpLGUuaW5wdXQmJmUuaW5wdXQudmFsKHM/IiI6dGhpcy5fZm9ybWF0RGF0ZShlKSl9LF9nZXREYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PSFlLmN1cnJlbnRZZWFyfHxlLmlucHV0JiYiIj09PWUuaW5wdXQudmFsKCk/bnVsbDp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShlLmN1cnJlbnRZZWFyLGUuY3VycmVudE1vbnRoLGUuY3VycmVudERheSkpO3JldHVybiB0fSxfYXR0YWNoSGFuZGxlcnM6ZnVuY3Rpb24odCl7dmFyIGk9dGhpcy5fZ2V0KHQsInN0ZXBNb250aHMiKSxzPSIjIit0LmlkLnJlcGxhY2UoL1xcXFwvZywiXFwiKTt0LmRwRGl2LmZpbmQoIltkYXRhLWhhbmRsZXJdIikubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9e3ByZXY6ZnVuY3Rpb24oKXtlLmRhdGVwaWNrZXIuX2FkanVzdERhdGUocywtaSwiTSIpfSxuZXh0OmZ1bmN0aW9uKCl7ZS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHMsK2ksIk0iKX0saGlkZTpmdW5jdGlvbigpe2UuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKX0sdG9kYXk6ZnVuY3Rpb24oKXtlLmRhdGVwaWNrZXIuX2dvdG9Ub2RheShzKX0sc2VsZWN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIGUuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KHMsK3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLW1vbnRoIiksK3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLXllYXIiKSx0aGlzKSwhMX0sc2VsZWN0TW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIocyx0aGlzLCJNIiksITF9LHNlbGVjdFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIocyx0aGlzLCJZIiksITF9fTtlKHRoaXMpLmJpbmQodGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtZXZlbnQiKSx0W3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLWhhbmRsZXIiKV0pfSl9LF9nZW5lcmF0ZUhUTUw6ZnVuY3Rpb24oZSl7dmFyIHQsaSxzLG4sYSxvLHIsaCxsLHUsZCxjLHAsZixtLGcsdix5LGIsXyx4LHcsayxULEQsUyxOLE0sQyxBLFAsSSx6LEgsRixFLFcsTCxPLGo9bmV3IERhdGUsUj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShqLmdldEZ1bGxZZWFyKCksai5nZXRNb250aCgpLGouZ2V0RGF0ZSgpKSksWT10aGlzLl9nZXQoZSwiaXNSVEwiKSxKPXRoaXMuX2dldChlLCJzaG93QnV0dG9uUGFuZWwiKSxCPXRoaXMuX2dldChlLCJoaWRlSWZOb1ByZXZOZXh0IiksSz10aGlzLl9nZXQoZSwibmF2aWdhdGlvbkFzRGF0ZUZvcm1hdCIpLFY9dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoZSksVT10aGlzLl9nZXQoZSwic2hvd0N1cnJlbnRBdFBvcyIpLHE9dGhpcy5fZ2V0KGUsInN0ZXBNb250aHMiKSxHPTEhPT1WWzBdfHwxIT09VlsxXSxYPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KGUuY3VycmVudERheT9uZXcgRGF0ZShlLmN1cnJlbnRZZWFyLGUuY3VycmVudE1vbnRoLGUuY3VycmVudERheSk6bmV3IERhdGUoOTk5OSw5LDkpKSxRPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWluIiksJD10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1heCIpLFo9ZS5kcmF3TW9udGgtVSxldD1lLmRyYXdZZWFyO2lmKDA+WiYmKForPTEyLGV0LS0pLCQpZm9yKHQ9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoJC5nZXRGdWxsWWVhcigpLCQuZ2V0TW9udGgoKS1WWzBdKlZbMV0rMSwkLmdldERhdGUoKSkpLHQ9USYmUT50P1E6dDt0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShldCxaLDEpKT50OylaLS0sMD5aJiYoWj0xMSxldC0tKTtmb3IoZS5kcmF3TW9udGg9WixlLmRyYXdZZWFyPWV0LGk9dGhpcy5fZ2V0KGUsInByZXZUZXh0IiksaT1LP3RoaXMuZm9ybWF0RGF0ZShpLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LFotcSwxKSksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKTppLHM9dGhpcy5fY2FuQWRqdXN0TW9udGgoZSwtMSxldCxaKT8iPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J3ByZXYnIGRhdGEtZXZlbnQ9J2NsaWNrJyB0aXRsZT0nIitpKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/ImUiOiJ3IikrIic+IitpKyI8L3NwYW4+PC9hPiI6Qj8iIjoiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nIitpKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/ImUiOiJ3IikrIic+IitpKyI8L3NwYW4+PC9hPiIsbj10aGlzLl9nZXQoZSwibmV4dFRleHQiKSxuPUs/dGhpcy5mb3JtYXREYXRlKG4sdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZXQsWitxLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOm4sYT10aGlzLl9jYW5BZGp1c3RNb250aChlLDEsZXQsWik/IjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSduZXh0JyBkYXRhLWV2ZW50PSdjbGljaycgdGl0bGU9JyIrbisiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0iKyhZPyJ3IjoiZSIpKyInPiIrbisiPC9zcGFuPjwvYT4iOkI/IiI6IjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCcgdGl0bGU9JyIrbisiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0iKyhZPyJ3IjoiZSIpKyInPiIrbisiPC9zcGFuPjwvYT4iLG89dGhpcy5fZ2V0KGUsImN1cnJlbnRUZXh0Iikscj10aGlzLl9nZXQoZSwiZ290b0N1cnJlbnQiKSYmZS5jdXJyZW50RGF5P1g6UixvPUs/dGhpcy5mb3JtYXREYXRlKG8scix0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOm8saD1lLmlubGluZT8iIjoiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSd1aS1kYXRlcGlja2VyLWNsb3NlIHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktcHJpbWFyeSB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J2hpZGUnIGRhdGEtZXZlbnQ9J2NsaWNrJz4iK3RoaXMuX2dldChlLCJjbG9zZVRleHQiKSsiPC9idXR0b24+IixsPUo/IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB1aS13aWRnZXQtY29udGVudCc+IisoWT9oOiIiKSsodGhpcy5faXNJblJhbmdlKGUscik/IjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0ndWktZGF0ZXBpY2tlci1jdXJyZW50IHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktc2Vjb25kYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ndG9kYXknIGRhdGEtZXZlbnQ9J2NsaWNrJz4iK28rIjwvYnV0dG9uPiI6IiIpKyhZPyIiOmgpKyI8L2Rpdj4iOiIiLHU9cGFyc2VJbnQodGhpcy5fZ2V0KGUsImZpcnN0RGF5IiksMTApLHU9aXNOYU4odSk/MDp1LGQ9dGhpcy5fZ2V0KGUsInNob3dXZWVrIiksYz10aGlzLl9nZXQoZSwiZGF5TmFtZXMiKSxwPXRoaXMuX2dldChlLCJkYXlOYW1lc01pbiIpLGY9dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXMiKSxtPXRoaXMuX2dldChlLCJtb250aE5hbWVzU2hvcnQiKSxnPXRoaXMuX2dldChlLCJiZWZvcmVTaG93RGF5Iiksdj10aGlzLl9nZXQoZSwic2hvd090aGVyTW9udGhzIikseT10aGlzLl9nZXQoZSwic2VsZWN0T3RoZXJNb250aHMiKSxiPXRoaXMuX2dldERlZmF1bHREYXRlKGUpLF89IiIsdz0wO1ZbMF0+dzt3Kyspe2ZvcihrPSIiLHRoaXMubWF4Um93cz00LFQ9MDtWWzFdPlQ7VCsrKXtpZihEPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LFosZS5zZWxlY3RlZERheSkpLFM9IiB1aS1jb3JuZXItYWxsIixOPSIiLEcpe2lmKE4rPSI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWdyb3VwIixWWzFdPjEpc3dpdGNoKFQpe2Nhc2UgMDpOKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtZmlyc3QiLFM9IiB1aS1jb3JuZXItIisoWT8icmlnaHQiOiJsZWZ0Iik7YnJlYWs7Y2FzZSBWWzFdLTE6Tis9IiB1aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QiLFM9IiB1aS1jb3JuZXItIisoWT8ibGVmdCI6InJpZ2h0Iik7YnJlYWs7ZGVmYXVsdDpOKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIixTPSIifU4rPSInPiJ9Zm9yKE4rPSI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWhlYWRlciB1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCIrUysiJz4iKygvYWxsfGxlZnQvLnRlc3QoUykmJjA9PT13P1k/YTpzOiIiKSsoL2FsbHxyaWdodC8udGVzdChTKSYmMD09PXc/WT9zOmE6IiIpK3RoaXMuX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyKGUsWixldCxRLCQsdz4wfHxUPjAsZixtKSsiPC9kaXY+PHRhYmxlIGNsYXNzPSd1aS1kYXRlcGlja2VyLWNhbGVuZGFyJz48dGhlYWQ+IisiPHRyPiIsTT1kPyI8dGggY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1jb2wnPiIrdGhpcy5fZ2V0KGUsIndlZWtIZWFkZXIiKSsiPC90aD4iOiIiLHg9MDs3Png7eCsrKUM9KHgrdSklNyxNKz0iPHRoIHNjb3BlPSdjb2wnIisoKHgrdSs2KSU3Pj01PyIgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1lbmQnIjoiIikrIj4iKyI8c3BhbiB0aXRsZT0nIitjW0NdKyInPiIrcFtDXSsiPC9zcGFuPjwvdGg+Ijtmb3IoTis9TSsiPC90cj48L3RoZWFkPjx0Ym9keT4iLEE9dGhpcy5fZ2V0RGF5c0luTW9udGgoZXQsWiksZXQ9PT1lLnNlbGVjdGVkWWVhciYmWj09PWUuc2VsZWN0ZWRNb250aCYmKGUuc2VsZWN0ZWREYXk9TWF0aC5taW4oZS5zZWxlY3RlZERheSxBKSksUD0odGhpcy5fZ2V0Rmlyc3REYXlPZk1vbnRoKGV0LFopLXUrNyklNyxJPU1hdGguY2VpbCgoUCtBKS83KSx6PUc/dGhpcy5tYXhSb3dzPkk/dGhpcy5tYXhSb3dzOkk6SSx0aGlzLm1heFJvd3M9eixIPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGV0LFosMS1QKSksRj0wO3o+RjtGKyspe2ZvcihOKz0iPHRyPiIsRT1kPyI8dGQgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1jb2wnPiIrdGhpcy5fZ2V0KGUsImNhbGN1bGF0ZVdlZWsiKShIKSsiPC90ZD4iOiIiLHg9MDs3Png7eCsrKVc9Zz9nLmFwcGx5KGUuaW5wdXQ/ZS5pbnB1dFswXTpudWxsLFtIXSk6WyEwLCIiXSxMPUguZ2V0TW9udGgoKSE9PVosTz1MJiYheXx8IVdbMF18fFEmJlE+SHx8JCYmSD4kLEUrPSI8dGQgY2xhc3M9JyIrKCh4K3UrNiklNz49NT8iIHVpLWRhdGVwaWNrZXItd2Vlay1lbmQiOiIiKSsoTD8iIHVpLWRhdGVwaWNrZXItb3RoZXItbW9udGgiOiIiKSsoSC5nZXRUaW1lKCk9PT1ELmdldFRpbWUoKSYmWj09PWUuc2VsZWN0ZWRNb250aCYmZS5fa2V5RXZlbnR8fGIuZ2V0VGltZSgpPT09SC5nZXRUaW1lKCkmJmIuZ2V0VGltZSgpPT09RC5nZXRUaW1lKCk/IiAiK3RoaXMuX2RheU92ZXJDbGFzczoiIikrKE8/IiAiK3RoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKyIgdWktc3RhdGUtZGlzYWJsZWQiOiIiKSsoTCYmIXY/IiI6IiAiK1dbMV0rKEguZ2V0VGltZSgpPT09WC5nZXRUaW1lKCk/IiAiK3RoaXMuX2N1cnJlbnRDbGFzczoiIikrKEguZ2V0VGltZSgpPT09Ui5nZXRUaW1lKCk/IiB1aS1kYXRlcGlja2VyLXRvZGF5IjoiIikpKyInIisoTCYmIXZ8fCFXWzJdPyIiOiIgdGl0bGU9JyIrV1syXS5yZXBsYWNlKC8nL2csIiYjMzk7IikrIiciKSsoTz8iIjoiIGRhdGEtaGFuZGxlcj0nc2VsZWN0RGF5JyBkYXRhLWV2ZW50PSdjbGljaycgZGF0YS1tb250aD0nIitILmdldE1vbnRoKCkrIicgZGF0YS15ZWFyPSciK0guZ2V0RnVsbFllYXIoKSsiJyIpKyI+IisoTCYmIXY/IiYjeGEwOyI6Tz8iPHNwYW4gY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQnPiIrSC5nZXREYXRlKCkrIjwvc3Bhbj4iOiI8YSBjbGFzcz0ndWktc3RhdGUtZGVmYXVsdCIrKEguZ2V0VGltZSgpPT09Ui5nZXRUaW1lKCk/IiB1aS1zdGF0ZS1oaWdobGlnaHQiOiIiKSsoSC5nZXRUaW1lKCk9PT1YLmdldFRpbWUoKT8iIHVpLXN0YXRlLWFjdGl2ZSI6IiIpKyhMPyIgdWktcHJpb3JpdHktc2Vjb25kYXJ5IjoiIikrIicgaHJlZj0nIyc+IitILmdldERhdGUoKSsiPC9hPiIpKyI8L3RkPiIsSC5zZXREYXRlKEguZ2V0RGF0ZSgpKzEpLEg9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoSCk7Tis9RSsiPC90cj4ifVorKyxaPjExJiYoWj0wLGV0KyspLE4rPSI8L3Rib2R5PjwvdGFibGU+IisoRz8iPC9kaXY+IisoVlswXT4wJiZUPT09VlsxXS0xPyI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLXJvdy1icmVhayc+PC9kaXY+IjoiIik6IiIpLGsrPU59Xys9a31yZXR1cm4gXys9bCxlLl9rZXlFdmVudD0hMSxffSxfZ2VuZXJhdGVNb250aFllYXJIZWFkZXI6ZnVuY3Rpb24oZSx0LGkscyxuLGEsbyxyKXt2YXIgaCxsLHUsZCxjLHAsZixtLGc9dGhpcy5fZ2V0KGUsImNoYW5nZU1vbnRoIiksdj10aGlzLl9nZXQoZSwiY2hhbmdlWWVhciIpLHk9dGhpcy5fZ2V0KGUsInNob3dNb250aEFmdGVyWWVhciIpLGI9IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItdGl0bGUnPiIsXz0iIjtpZihhfHwhZylfKz0iPHNwYW4gY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnPiIrb1t0XSsiPC9zcGFuPiI7ZWxzZXtmb3IoaD1zJiZzLmdldEZ1bGxZZWFyKCk9PT1pLGw9biYmbi5nZXRGdWxsWWVhcigpPT09aSxfKz0iPHNlbGVjdCBjbGFzcz0ndWktZGF0ZXBpY2tlci1tb250aCcgZGF0YS1oYW5kbGVyPSdzZWxlY3RNb250aCcgZGF0YS1ldmVudD0nY2hhbmdlJz4iLHU9MDsxMj51O3UrKykoIWh8fHU+PXMuZ2V0TW9udGgoKSkmJighbHx8bi5nZXRNb250aCgpPj11KSYmKF8rPSI8b3B0aW9uIHZhbHVlPSciK3UrIiciKyh1PT09dD8iIHNlbGVjdGVkPSdzZWxlY3RlZCciOiIiKSsiPiIrclt1XSsiPC9vcHRpb24+Iik7Xys9Ijwvc2VsZWN0PiJ9aWYoeXx8KGIrPV8rKCFhJiZnJiZ2PyIiOiImI3hhMDsiKSksIWUueWVhcnNodG1sKWlmKGUueWVhcnNodG1sPSIiLGF8fCF2KWIrPSI8c3BhbiBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJz4iK2krIjwvc3Bhbj4iO2Vsc2V7Zm9yKGQ9dGhpcy5fZ2V0KGUsInllYXJSYW5nZSIpLnNwbGl0KCI6IiksYz0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCkscD1mdW5jdGlvbihlKXt2YXIgdD1lLm1hdGNoKC9jWytcLV0uKi8pP2krcGFyc2VJbnQoZS5zdWJzdHJpbmcoMSksMTApOmUubWF0Y2goL1srXC1dLiovKT9jK3BhcnNlSW50KGUsMTApOnBhcnNlSW50KGUsMTApO3JldHVybiBpc05hTih0KT9jOnR9LGY9cChkWzBdKSxtPU1hdGgubWF4KGYscChkWzFdfHwiIikpLGY9cz9NYXRoLm1heChmLHMuZ2V0RnVsbFllYXIoKSk6ZixtPW4/TWF0aC5taW4obSxuLmdldEZ1bGxZZWFyKCkpOm0sZS55ZWFyc2h0bWwrPSI8c2VsZWN0IGNsYXNzPSd1aS1kYXRlcGlja2VyLXllYXInIGRhdGEtaGFuZGxlcj0nc2VsZWN0WWVhcicgZGF0YS1ldmVudD0nY2hhbmdlJz4iO20+PWY7ZisrKWUueWVhcnNodG1sKz0iPG9wdGlvbiB2YWx1ZT0nIitmKyInIisoZj09PWk/IiBzZWxlY3RlZD0nc2VsZWN0ZWQnIjoiIikrIj4iK2YrIjwvb3B0aW9uPiI7ZS55ZWFyc2h0bWwrPSI8L3NlbGVjdD4iLGIrPWUueWVhcnNodG1sLGUueWVhcnNodG1sPW51bGx9cmV0dXJuIGIrPXRoaXMuX2dldChlLCJ5ZWFyU3VmZml4IikseSYmKGIrPSghYSYmZyYmdj8iIjoiJiN4YTA7IikrXyksYis9IjwvZGl2PiJ9LF9hZGp1c3RJbnN0RGF0ZTpmdW5jdGlvbihlLHQsaSl7dmFyIHM9ZS5kcmF3WWVhcisoIlkiPT09aT90OjApLG49ZS5kcmF3TW9udGgrKCJNIj09PWk/dDowKSxhPU1hdGgubWluKGUuc2VsZWN0ZWREYXksdGhpcy5fZ2V0RGF5c0luTW9udGgocyxuKSkrKCJEIj09PWk/dDowKSxvPXRoaXMuX3Jlc3RyaWN0TWluTWF4KGUsdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUocyxuLGEpKSk7ZS5zZWxlY3RlZERheT1vLmdldERhdGUoKSxlLmRyYXdNb250aD1lLnNlbGVjdGVkTW9udGg9by5nZXRNb250aCgpLGUuZHJhd1llYXI9ZS5zZWxlY3RlZFllYXI9by5nZXRGdWxsWWVhcigpLCgiTSI9PT1pfHwiWSI9PT1pKSYmdGhpcy5fbm90aWZ5Q2hhbmdlKGUpfSxfcmVzdHJpY3RNaW5NYXg6ZnVuY3Rpb24oZSx0KXt2YXIgaT10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1pbiIpLHM9dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtYXgiKSxuPWkmJmk+dD9pOnQ7cmV0dXJuIHMmJm4+cz9zOm59LF9ub3RpZnlDaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsIm9uQ2hhbmdlTW9udGhZZWFyIik7dCYmdC5hcHBseShlLmlucHV0P2UuaW5wdXRbMF06bnVsbCxbZS5zZWxlY3RlZFllYXIsZS5zZWxlY3RlZE1vbnRoKzEsZV0pfSxfZ2V0TnVtYmVyT2ZNb250aHM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsIm51bWJlck9mTW9udGhzIik7cmV0dXJuIG51bGw9PXQ/WzEsMV06Im51bWJlciI9PXR5cGVvZiB0P1sxLHRdOnR9LF9nZXRNaW5NYXhEYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2RldGVybWluZURhdGUoZSx0aGlzLl9nZXQoZSx0KyJEYXRlIiksbnVsbCl9LF9nZXREYXlzSW5Nb250aDpmdW5jdGlvbihlLHQpe3JldHVybiAzMi10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShlLHQsMzIpKS5nZXREYXRlKCl9LF9nZXRGaXJzdERheU9mTW9udGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IERhdGUoZSx0LDEpLmdldERheSgpfSxfY2FuQWRqdXN0TW9udGg6ZnVuY3Rpb24oZSx0LGkscyl7dmFyIG49dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoZSksYT10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShpLHMrKDA+dD90Om5bMF0qblsxXSksMSkpO3JldHVybiAwPnQmJmEuc2V0RGF0ZSh0aGlzLl9nZXREYXlzSW5Nb250aChhLmdldEZ1bGxZZWFyKCksYS5nZXRNb250aCgpKSksdGhpcy5faXNJblJhbmdlKGUsYSl9LF9pc0luUmFuZ2U6ZnVuY3Rpb24oZSx0KXt2YXIgaSxzLG49dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtaW4iKSxhPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWF4Iiksbz1udWxsLHI9bnVsbCxoPXRoaXMuX2dldChlLCJ5ZWFyUmFuZ2UiKTtyZXR1cm4gaCYmKGk9aC5zcGxpdCgiOiIpLHM9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLG89cGFyc2VJbnQoaVswXSwxMCkscj1wYXJzZUludChpWzFdLDEwKSxpWzBdLm1hdGNoKC9bK1wtXS4qLykmJihvKz1zKSxpWzFdLm1hdGNoKC9bK1wtXS4qLykmJihyKz1zKSksKCFufHx0LmdldFRpbWUoKT49bi5nZXRUaW1lKCkpJiYoIWF8fHQuZ2V0VGltZSgpPD1hLmdldFRpbWUoKSkmJighb3x8dC5nZXRGdWxsWWVhcigpPj1vKSYmKCFyfHxyPj10LmdldEZ1bGxZZWFyKCkpfSxfZ2V0Rm9ybWF0Q29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLCJzaG9ydFllYXJDdXRvZmYiKTtyZXR1cm4gdD0ic3RyaW5nIiE9dHlwZW9mIHQ/dDoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwK3BhcnNlSW50KHQsMTApLHtzaG9ydFllYXJDdXRvZmY6dCxkYXlOYW1lc1Nob3J0OnRoaXMuX2dldChlLCJkYXlOYW1lc1Nob3J0IiksZGF5TmFtZXM6dGhpcy5fZ2V0KGUsImRheU5hbWVzIiksbW9udGhOYW1lc1Nob3J0OnRoaXMuX2dldChlLCJtb250aE5hbWVzU2hvcnQiKSxtb250aE5hbWVzOnRoaXMuX2dldChlLCJtb250aE5hbWVzIil9fSxfZm9ybWF0RGF0ZTpmdW5jdGlvbihlLHQsaSxzKXt0fHwoZS5jdXJyZW50RGF5PWUuc2VsZWN0ZWREYXksZS5jdXJyZW50TW9udGg9ZS5zZWxlY3RlZE1vbnRoLGUuY3VycmVudFllYXI9ZS5zZWxlY3RlZFllYXIpO3ZhciBuPXQ/Im9iamVjdCI9PXR5cGVvZiB0P3Q6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUocyxpLHQpKTp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShlLmN1cnJlbnRZZWFyLGUuY3VycmVudE1vbnRoLGUuY3VycmVudERheSkpO3JldHVybiB0aGlzLmZvcm1hdERhdGUodGhpcy5fZ2V0KGUsImRhdGVGb3JtYXQiKSxuLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSl9fSksZS5mbi5kYXRlcGlja2VyPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpcztlLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWR8fChlKGRvY3VtZW50KS5tb3VzZWRvd24oZS5kYXRlcGlja2VyLl9jaGVja0V4dGVybmFsQ2xpY2spLGUuZGF0ZXBpY2tlci5pbml0aWFsaXplZD0hMCksMD09PWUoIiMiK2UuZGF0ZXBpY2tlci5fbWFpbkRpdklkKS5sZW5ndGgmJmUoImJvZHkiKS5hcHBlbmQoZS5kYXRlcGlja2VyLmRwRGl2KTt2YXIgaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuInN0cmluZyIhPXR5cGVvZiB0fHwiaXNEaXNhYmxlZCIhPT10JiYiZ2V0RGF0ZSIhPT10JiYid2lkZ2V0IiE9PXQ/Im9wdGlvbiI9PT10JiYyPT09YXJndW1lbnRzLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBhcmd1bWVudHNbMV0/ZS5kYXRlcGlja2VyWyJfIit0KyJEYXRlcGlja2VyIl0uYXBwbHkoZS5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQoaSkpOnRoaXMuZWFjaChmdW5jdGlvbigpeyJzdHJpbmciPT10eXBlb2YgdD9lLmRhdGVwaWNrZXJbIl8iK3QrIkRhdGVwaWNrZXIiXS5hcHBseShlLmRhdGVwaWNrZXIsW3RoaXNdLmNvbmNhdChpKSk6ZS5kYXRlcGlja2VyLl9hdHRhY2hEYXRlcGlja2VyKHRoaXMsdCl9KTplLmRhdGVwaWNrZXJbIl8iK3QrIkRhdGVwaWNrZXIiXS5hcHBseShlLmRhdGVwaWNrZXIsW3RoaXNbMF1dLmNvbmNhdChpKSl9LGUuZGF0ZXBpY2tlcj1uZXcgbixlLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQ9ITEsZS5kYXRlcGlja2VyLnV1aWQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksZS5kYXRlcGlja2VyLnZlcnNpb249IjEuMTEuMCIsZS5kYXRlcGlja2VyLGUud2lkZ2V0KCJ1aS5kaWFsb2ciLHt2ZXJzaW9uOiIxLjExLjAiLG9wdGlvbnM6e2FwcGVuZFRvOiJib2R5IixhdXRvT3BlbjohMCxidXR0b25zOltdLGNsb3NlT25Fc2NhcGU6ITAsY2xvc2VUZXh0OiJDbG9zZSIsZGlhbG9nQ2xhc3M6IiIsZHJhZ2dhYmxlOiEwLGhpZGU6bnVsbCxoZWlnaHQ6ImF1dG8iLG1heEhlaWdodDpudWxsLG1heFdpZHRoOm51bGwsbWluSGVpZ2h0OjE1MCxtaW5XaWR0aDoxNTAsbW9kYWw6ITEscG9zaXRpb246e215OiJjZW50ZXIiLGF0OiJjZW50ZXIiLG9mOndpbmRvdyxjb2xsaXNpb246ImZpdCIsdXNpbmc6ZnVuY3Rpb24odCl7dmFyIGk9ZSh0aGlzKS5jc3ModCkub2Zmc2V0KCkudG9wOzA+aSYmZSh0aGlzKS5jc3MoInRvcCIsdC50b3AtaSl9fSxyZXNpemFibGU6ITAsc2hvdzpudWxsLHRpdGxlOm51bGwsd2lkdGg6MzAwLGJlZm9yZUNsb3NlOm51bGwsY2xvc2U6bnVsbCxkcmFnOm51bGwsZHJhZ1N0YXJ0Om51bGwsZHJhZ1N0b3A6bnVsbCxmb2N1czpudWxsLG9wZW46bnVsbCxyZXNpemU6bnVsbCxyZXNpemVTdGFydDpudWxsLHJlc2l6ZVN0b3A6bnVsbH0sc2l6ZVJlbGF0ZWRPcHRpb25zOntidXR0b25zOiEwLGhlaWdodDohMCxtYXhIZWlnaHQ6ITAsbWF4V2lkdGg6ITAsbWluSGVpZ2h0OiEwLG1pbldpZHRoOiEwLHdpZHRoOiEwfSxyZXNpemFibGVSZWxhdGVkT3B0aW9uczp7bWF4SGVpZ2h0OiEwLG1heFdpZHRoOiEwLG1pbkhlaWdodDohMCxtaW5XaWR0aDohMH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub3JpZ2luYWxDc3M9e2Rpc3BsYXk6dGhpcy5lbGVtZW50WzBdLnN0eWxlLmRpc3BsYXksd2lkdGg6dGhpcy5lbGVtZW50WzBdLnN0eWxlLndpZHRoLG1pbkhlaWdodDp0aGlzLmVsZW1lbnRbMF0uc3R5bGUubWluSGVpZ2h0LG1heEhlaWdodDp0aGlzLmVsZW1lbnRbMF0uc3R5bGUubWF4SGVpZ2h0LGhlaWdodDp0aGlzLmVsZW1lbnRbMF0uc3R5bGUuaGVpZ2h0fSx0aGlzLm9yaWdpbmFsUG9zaXRpb249e3BhcmVudDp0aGlzLmVsZW1lbnQucGFyZW50KCksaW5kZXg6dGhpcy5lbGVtZW50LnBhcmVudCgpLmNoaWxkcmVuKCkuaW5kZXgodGhpcy5lbGVtZW50KX0sdGhpcy5vcmlnaW5hbFRpdGxlPXRoaXMuZWxlbWVudC5hdHRyKCJ0aXRsZSIpLHRoaXMub3B0aW9ucy50aXRsZT10aGlzLm9wdGlvbnMudGl0bGV8fHRoaXMub3JpZ2luYWxUaXRsZSx0aGlzLl9jcmVhdGVXcmFwcGVyKCksdGhpcy5lbGVtZW50LnNob3coKS5yZW1vdmVBdHRyKCJ0aXRsZSIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudCIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpLHRoaXMuX2NyZWF0ZVRpdGxlYmFyKCksdGhpcy5fY3JlYXRlQnV0dG9uUGFuZSgpLHRoaXMub3B0aW9ucy5kcmFnZ2FibGUmJmUuZm4uZHJhZ2dhYmxlJiZ0aGlzLl9tYWtlRHJhZ2dhYmxlKCksdGhpcy5vcHRpb25zLnJlc2l6YWJsZSYmZS5mbi5yZXNpemFibGUmJnRoaXMuX21ha2VSZXNpemFibGUoKSx0aGlzLl9pc09wZW49ITEsdGhpcy5fdHJhY2tGb2N1cygpfSxfaW5pdDpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5hdXRvT3BlbiYmdGhpcy5vcGVuKCl9LF9hcHBlbmRUbzpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5hcHBlbmRUbztyZXR1cm4gdCYmKHQuanF1ZXJ5fHx0Lm5vZGVUeXBlKT9lKHQpOnRoaXMuZG9jdW1lbnQuZmluZCh0fHwiYm9keSIpLmVxKDApfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5vcmlnaW5hbFBvc2l0aW9uO3RoaXMuX2Rlc3Ryb3lPdmVybGF5KCksdGhpcy5lbGVtZW50LnJlbW92ZVVuaXF1ZUlkKCkucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1jb250ZW50IHVpLXdpZGdldC1jb250ZW50IikuY3NzKHRoaXMub3JpZ2luYWxDc3MpLmRldGFjaCgpLHRoaXMudWlEaWFsb2cuc3RvcCghMCwhMCkucmVtb3ZlKCksdGhpcy5vcmlnaW5hbFRpdGxlJiZ0aGlzLmVsZW1lbnQuYXR0cigidGl0bGUiLHRoaXMub3JpZ2luYWxUaXRsZSksZT10LnBhcmVudC5jaGlsZHJlbigpLmVxKHQuaW5kZXgpLGUubGVuZ3RoJiZlWzBdIT09dGhpcy5lbGVtZW50WzBdP2UuYmVmb3JlKHRoaXMuZWxlbWVudCk6dC5wYXJlbnQuYXBwZW5kKHRoaXMuZWxlbWVudCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVpRGlhbG9nfSxkaXNhYmxlOmUubm9vcCxlbmFibGU6ZS5ub29wLGNsb3NlOmZ1bmN0aW9uKHQpe3ZhciBpLHM9dGhpcztpZih0aGlzLl9pc09wZW4mJnRoaXMuX3RyaWdnZXIoImJlZm9yZUNsb3NlIix0KSE9PSExKXtpZih0aGlzLl9pc09wZW49ITEsdGhpcy5fZm9jdXNlZEVsZW1lbnQ9bnVsbCx0aGlzLl9kZXN0cm95T3ZlcmxheSgpLHRoaXMuX3VudHJhY2tJbnN0YW5jZSgpLCF0aGlzLm9wZW5lci5maWx0ZXIoIjpmb2N1c2FibGUiKS5mb2N1cygpLmxlbmd0aCl0cnl7aT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQsaSYmImJvZHkiIT09aS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpJiZlKGkpLmJsdXIoKX1jYXRjaChuKXt9dGhpcy5faGlkZSh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7cy5fdHJpZ2dlcigiY2xvc2UiLHQpfSl9fSxpc09wZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNPcGVufSxtb3ZlVG9Ub3A6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZlVG9Ub3AoKX0sX21vdmVUb1RvcDpmdW5jdGlvbih0LGkpe3ZhciBzPSExLG49dGhpcy51aURpYWxvZy5zaWJsaW5ncygiLnVpLWZyb250OnZpc2libGUiKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4rZSh0aGlzKS5jc3MoInotaW5kZXgiKX0pLmdldCgpLGE9TWF0aC5tYXguYXBwbHkobnVsbCxuKTtyZXR1cm4gYT49K3RoaXMudWlEaWFsb2cuY3NzKCJ6LWluZGV4IikmJih0aGlzLnVpRGlhbG9nLmNzcygiei1pbmRleCIsYSsxKSxzPSEwKSxzJiYhaSYmdGhpcy5fdHJpZ2dlcigiZm9jdXMiLHQpLHN9LG9wZW46ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLl9pc09wZW4/KHRoaXMuX21vdmVUb1RvcCgpJiZ0aGlzLl9mb2N1c1RhYmJhYmxlKCksdm9pZCAwKToodGhpcy5faXNPcGVuPSEwLHRoaXMub3BlbmVyPWUodGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50KSx0aGlzLl9zaXplKCksdGhpcy5fcG9zaXRpb24oKSx0aGlzLl9jcmVhdGVPdmVybGF5KCksdGhpcy5fbW92ZVRvVG9wKG51bGwsITApLHRoaXMuX3Nob3codGhpcy51aURpYWxvZyx0aGlzLm9wdGlvbnMuc2hvdyxmdW5jdGlvbigpe3QuX2ZvY3VzVGFiYmFibGUoKSx0Ll90cmlnZ2VyKCJmb2N1cyIpfSksdGhpcy5fdHJpZ2dlcigib3BlbiIpLHZvaWQgMCl9LF9mb2N1c1RhYmJhYmxlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZm9jdXNlZEVsZW1lbnQ7ZXx8KGU9dGhpcy5lbGVtZW50LmZpbmQoIlthdXRvZm9jdXNdIikpLGUubGVuZ3RofHwoZT10aGlzLmVsZW1lbnQuZmluZCgiOnRhYmJhYmxlIikpLGUubGVuZ3RofHwoZT10aGlzLnVpRGlhbG9nQnV0dG9uUGFuZS5maW5kKCI6dGFiYmFibGUiKSksZS5sZW5ndGh8fChlPXRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlLmZpbHRlcigiOnRhYmJhYmxlIikpLGUubGVuZ3RofHwoZT10aGlzLnVpRGlhbG9nKSxlLmVxKDApLmZvY3VzKCl9LF9rZWVwRm9jdXM6ZnVuY3Rpb24odCl7ZnVuY3Rpb24gaSgpe3ZhciB0PXRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCxpPXRoaXMudWlEaWFsb2dbMF09PT10fHxlLmNvbnRhaW5zKHRoaXMudWlEaWFsb2dbMF0sdCk7aXx8dGhpcy5fZm9jdXNUYWJiYWJsZSgpfXQucHJldmVudERlZmF1bHQoKSxpLmNhbGwodGhpcyksdGhpcy5fZGVsYXkoaSl9LF9jcmVhdGVXcmFwcGVyOmZ1bmN0aW9uKCl7dGhpcy51aURpYWxvZz1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2cgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgdWktZnJvbnQgIit0aGlzLm9wdGlvbnMuZGlhbG9nQ2xhc3MpLmhpZGUoKS5hdHRyKHt0YWJJbmRleDotMSxyb2xlOiJkaWFsb2cifSkuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksdGhpcy5fb24odGhpcy51aURpYWxvZyx7a2V5ZG93bjpmdW5jdGlvbih0KXtpZih0aGlzLm9wdGlvbnMuY2xvc2VPbkVzY2FwZSYmIXQuaXNEZWZhdWx0UHJldmVudGVkKCkmJnQua2V5Q29kZSYmdC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLkVTQ0FQRSlyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2UodCksdm9pZCAwO2lmKHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5UQUImJiF0LmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgaT10aGlzLnVpRGlhbG9nLmZpbmQoIjp0YWJiYWJsZSIpLHM9aS5maWx0ZXIoIjpmaXJzdCIpLG49aS5maWx0ZXIoIjpsYXN0Iik7dC50YXJnZXQhPT1uWzBdJiZ0LnRhcmdldCE9PXRoaXMudWlEaWFsb2dbMF18fHQuc2hpZnRLZXk/dC50YXJnZXQhPT1zWzBdJiZ0LnRhcmdldCE9PXRoaXMudWlEaWFsb2dbMF18fCF0LnNoaWZ0S2V5fHwodGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtuLmZvY3VzKCl9KSx0LnByZXZlbnREZWZhdWx0KCkpOih0aGlzLl9kZWxheShmdW5jdGlvbigpe3MuZm9jdXMoKX0pLHQucHJldmVudERlZmF1bHQoKSl9fSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7dGhpcy5fbW92ZVRvVG9wKGUpJiZ0aGlzLl9mb2N1c1RhYmJhYmxlKCl9fSksdGhpcy5lbGVtZW50LmZpbmQoIlthcmlhLWRlc2NyaWJlZGJ5XSIpLmxlbmd0aHx8dGhpcy51aURpYWxvZy5hdHRyKHsiYXJpYS1kZXNjcmliZWRieSI6dGhpcy5lbGVtZW50LnVuaXF1ZUlkKCkuYXR0cigiaWQiKX0pfSxfY3JlYXRlVGl0bGViYXI6ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLnVpRGlhbG9nVGl0bGViYXI9ZSgiPGRpdj4iKS5hZGRDbGFzcygidWktZGlhbG9nLXRpdGxlYmFyIHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCB1aS1oZWxwZXItY2xlYXJmaXgiKS5wcmVwZW5kVG8odGhpcy51aURpYWxvZyksdGhpcy5fb24odGhpcy51aURpYWxvZ1RpdGxlYmFyLHttb3VzZWRvd246ZnVuY3Rpb24odCl7ZSh0LnRhcmdldCkuY2xvc2VzdCgiLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSIpfHx0aGlzLnVpRGlhbG9nLmZvY3VzKCl9fSksdGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2U9ZSgiPGJ1dHRvbiB0eXBlPSdidXR0b24nPjwvYnV0dG9uPiIpLmJ1dHRvbih7bGFiZWw6dGhpcy5vcHRpb25zLmNsb3NlVGV4dCxpY29uczp7cHJpbWFyeToidWktaWNvbi1jbG9zZXRoaWNrIn0sdGV4dDohMX0pLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGViYXItY2xvc2UiKS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nVGl0bGViYXIpLHRoaXMuX29uKHRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlLHtjbGljazpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZShlKX19KSx0PWUoIjxzcGFuPiIpLnVuaXF1ZUlkKCkuYWRkQ2xhc3MoInVpLWRpYWxvZy10aXRsZSIpLnByZXBlbmRUbyh0aGlzLnVpRGlhbG9nVGl0bGViYXIpLHRoaXMuX3RpdGxlKHQpLHRoaXMudWlEaWFsb2cuYXR0cih7ImFyaWEtbGFiZWxsZWRieSI6dC5hdHRyKCJpZCIpfSl9LF90aXRsZTpmdW5jdGlvbihlKXt0aGlzLm9wdGlvbnMudGl0bGV8fGUuaHRtbCgiJiMxNjA7IiksZS50ZXh0KHRoaXMub3B0aW9ucy50aXRsZSl9LF9jcmVhdGVCdXR0b25QYW5lOmZ1bmN0aW9uKCl7dGhpcy51aURpYWxvZ0J1dHRvblBhbmU9ZSgiPGRpdj4iKS5hZGRDbGFzcygidWktZGlhbG9nLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IiksdGhpcy51aUJ1dHRvblNldD1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctYnV0dG9uc2V0IikuYXBwZW5kVG8odGhpcy51aURpYWxvZ0J1dHRvblBhbmUpLHRoaXMuX2NyZWF0ZUJ1dHRvbnMoKQotfSxfY3JlYXRlQnV0dG9uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT10aGlzLm9wdGlvbnMuYnV0dG9ucztyZXR1cm4gdGhpcy51aURpYWxvZ0J1dHRvblBhbmUucmVtb3ZlKCksdGhpcy51aUJ1dHRvblNldC5lbXB0eSgpLGUuaXNFbXB0eU9iamVjdChpKXx8ZS5pc0FycmF5KGkpJiYhaS5sZW5ndGg/KHRoaXMudWlEaWFsb2cucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zIiksdm9pZCAwKTooZS5lYWNoKGksZnVuY3Rpb24oaSxzKXt2YXIgbixhO3M9ZS5pc0Z1bmN0aW9uKHMpP3tjbGljazpzLHRleHQ6aX06cyxzPWUuZXh0ZW5kKHt0eXBlOiJidXR0b24ifSxzKSxuPXMuY2xpY2sscy5jbGljaz1mdW5jdGlvbigpe24uYXBwbHkodC5lbGVtZW50WzBdLGFyZ3VtZW50cyl9LGE9e2ljb25zOnMuaWNvbnMsdGV4dDpzLnNob3dUZXh0fSxkZWxldGUgcy5pY29ucyxkZWxldGUgcy5zaG93VGV4dCxlKCI8YnV0dG9uPjwvYnV0dG9uPiIscykuYnV0dG9uKGEpLmFwcGVuZFRvKHQudWlCdXR0b25TZXQpfSksdGhpcy51aURpYWxvZy5hZGRDbGFzcygidWktZGlhbG9nLWJ1dHRvbnMiKSx0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nKSx2b2lkIDApfSxfbWFrZURyYWdnYWJsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7cmV0dXJue3Bvc2l0aW9uOmUucG9zaXRpb24sb2Zmc2V0OmUub2Zmc2V0fX12YXIgaT10aGlzLHM9dGhpcy5vcHRpb25zO3RoaXMudWlEaWFsb2cuZHJhZ2dhYmxlKHtjYW5jZWw6Ii51aS1kaWFsb2ctY29udGVudCwgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSIsaGFuZGxlOiIudWktZGlhbG9nLXRpdGxlYmFyIixjb250YWlubWVudDoiZG9jdW1lbnQiLHN0YXJ0OmZ1bmN0aW9uKHMsbil7ZSh0aGlzKS5hZGRDbGFzcygidWktZGlhbG9nLWRyYWdnaW5nIiksaS5fYmxvY2tGcmFtZXMoKSxpLl90cmlnZ2VyKCJkcmFnU3RhcnQiLHMsdChuKSl9LGRyYWc6ZnVuY3Rpb24oZSxzKXtpLl90cmlnZ2VyKCJkcmFnIixlLHQocykpfSxzdG9wOmZ1bmN0aW9uKG4sYSl7dmFyIG89YS5vZmZzZXQubGVmdC1pLmRvY3VtZW50LnNjcm9sbExlZnQoKSxyPWEub2Zmc2V0LnRvcC1pLmRvY3VtZW50LnNjcm9sbFRvcCgpO3MucG9zaXRpb249e215OiJsZWZ0IHRvcCIsYXQ6ImxlZnQiKyhvPj0wPyIrIjoiIikrbysiICIrInRvcCIrKHI+PTA/IisiOiIiKStyLG9mOmkud2luZG93fSxlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctZHJhZ2dpbmciKSxpLl91bmJsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcigiZHJhZ1N0b3AiLG4sdChhKSl9fSl9LF9tYWtlUmVzaXphYmxlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtyZXR1cm57b3JpZ2luYWxQb3NpdGlvbjplLm9yaWdpbmFsUG9zaXRpb24sb3JpZ2luYWxTaXplOmUub3JpZ2luYWxTaXplLHBvc2l0aW9uOmUucG9zaXRpb24sc2l6ZTplLnNpemV9fXZhciBpPXRoaXMscz10aGlzLm9wdGlvbnMsbj1zLnJlc2l6YWJsZSxhPXRoaXMudWlEaWFsb2cuY3NzKCJwb3NpdGlvbiIpLG89InN0cmluZyI9PXR5cGVvZiBuP246Im4sZSxzLHcsc2Usc3csbmUsbnciO3RoaXMudWlEaWFsb2cucmVzaXphYmxlKHtjYW5jZWw6Ii51aS1kaWFsb2ctY29udGVudCIsY29udGFpbm1lbnQ6ImRvY3VtZW50IixhbHNvUmVzaXplOnRoaXMuZWxlbWVudCxtYXhXaWR0aDpzLm1heFdpZHRoLG1heEhlaWdodDpzLm1heEhlaWdodCxtaW5XaWR0aDpzLm1pbldpZHRoLG1pbkhlaWdodDp0aGlzLl9taW5IZWlnaHQoKSxoYW5kbGVzOm8sc3RhcnQ6ZnVuY3Rpb24ocyxuKXtlKHRoaXMpLmFkZENsYXNzKCJ1aS1kaWFsb2ctcmVzaXppbmciKSxpLl9ibG9ja0ZyYW1lcygpLGkuX3RyaWdnZXIoInJlc2l6ZVN0YXJ0IixzLHQobikpfSxyZXNpemU6ZnVuY3Rpb24oZSxzKXtpLl90cmlnZ2VyKCJyZXNpemUiLGUsdChzKSl9LHN0b3A6ZnVuY3Rpb24obixhKXt2YXIgbz1pLnVpRGlhbG9nLm9mZnNldCgpLHI9by5sZWZ0LWkuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLGg9by50b3AtaS5kb2N1bWVudC5zY3JvbGxUb3AoKTtzLmhlaWdodD1pLnVpRGlhbG9nLmhlaWdodCgpLHMud2lkdGg9aS51aURpYWxvZy53aWR0aCgpLHMucG9zaXRpb249e215OiJsZWZ0IHRvcCIsYXQ6ImxlZnQiKyhyPj0wPyIrIjoiIikrcisiICIrInRvcCIrKGg+PTA/IisiOiIiKStoLG9mOmkud2luZG93fSxlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctcmVzaXppbmciKSxpLl91bmJsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcigicmVzaXplU3RvcCIsbix0KGEpKX19KS5jc3MoInBvc2l0aW9uIixhKX0sX3RyYWNrRm9jdXM6ZnVuY3Rpb24oKXt0aGlzLl9vbih0aGlzLndpZGdldCgpLHtmb2N1c2luOmZ1bmN0aW9uKHQpe3RoaXMuX3VudHJhY2tJbnN0YW5jZSgpLHRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCkudW5zaGlmdCh0aGlzKSx0aGlzLl9mb2N1c2VkRWxlbWVudD1lKHQudGFyZ2V0KX19KX0sX3VudHJhY2tJbnN0YW5jZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3RyYWNraW5nSW5zdGFuY2VzKCksaT1lLmluQXJyYXkodGhpcyx0KTstMSE9PWkmJnQuc3BsaWNlKGksMSl9LF90cmFja2luZ0luc3RhbmNlczpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZG9jdW1lbnQuZGF0YSgidWktZGlhbG9nLWluc3RhbmNlcyIpO3JldHVybiBlfHwoZT1bXSx0aGlzLmRvY3VtZW50LmRhdGEoInVpLWRpYWxvZy1pbnN0YW5jZXMiLGUpKSxlfSxfbWluSGVpZ2h0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiJhdXRvIj09PWUuaGVpZ2h0P2UubWluSGVpZ2h0Ok1hdGgubWluKGUubWluSGVpZ2h0LGUuaGVpZ2h0KX0sX3Bvc2l0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy51aURpYWxvZy5pcygiOnZpc2libGUiKTtlfHx0aGlzLnVpRGlhbG9nLnNob3coKSx0aGlzLnVpRGlhbG9nLnBvc2l0aW9uKHRoaXMub3B0aW9ucy5wb3NpdGlvbiksZXx8dGhpcy51aURpYWxvZy5oaWRlKCl9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMscz0hMSxuPXt9O2UuZWFjaCh0LGZ1bmN0aW9uKGUsdCl7aS5fc2V0T3B0aW9uKGUsdCksZSBpbiBpLnNpemVSZWxhdGVkT3B0aW9ucyYmKHM9ITApLGUgaW4gaS5yZXNpemFibGVSZWxhdGVkT3B0aW9ucyYmKG5bZV09dCl9KSxzJiYodGhpcy5fc2l6ZSgpLHRoaXMuX3Bvc2l0aW9uKCkpLHRoaXMudWlEaWFsb2cuaXMoIjpkYXRhKHVpLXJlc2l6YWJsZSkiKSYmdGhpcy51aURpYWxvZy5yZXNpemFibGUoIm9wdGlvbiIsbil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt2YXIgaSxzLG49dGhpcy51aURpYWxvZzsiZGlhbG9nQ2xhc3MiPT09ZSYmbi5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZGlhbG9nQ2xhc3MpLmFkZENsYXNzKHQpLCJkaXNhYmxlZCIhPT1lJiYodGhpcy5fc3VwZXIoZSx0KSwiYXBwZW5kVG8iPT09ZSYmdGhpcy51aURpYWxvZy5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSwiYnV0dG9ucyI9PT1lJiZ0aGlzLl9jcmVhdGVCdXR0b25zKCksImNsb3NlVGV4dCI9PT1lJiZ0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZS5idXR0b24oe2xhYmVsOiIiK3R9KSwiZHJhZ2dhYmxlIj09PWUmJihpPW4uaXMoIjpkYXRhKHVpLWRyYWdnYWJsZSkiKSxpJiYhdCYmbi5kcmFnZ2FibGUoImRlc3Ryb3kiKSwhaSYmdCYmdGhpcy5fbWFrZURyYWdnYWJsZSgpKSwicG9zaXRpb24iPT09ZSYmdGhpcy5fcG9zaXRpb24oKSwicmVzaXphYmxlIj09PWUmJihzPW4uaXMoIjpkYXRhKHVpLXJlc2l6YWJsZSkiKSxzJiYhdCYmbi5yZXNpemFibGUoImRlc3Ryb3kiKSxzJiYic3RyaW5nIj09dHlwZW9mIHQmJm4ucmVzaXphYmxlKCJvcHRpb24iLCJoYW5kbGVzIix0KSxzfHx0PT09ITF8fHRoaXMuX21ha2VSZXNpemFibGUoKSksInRpdGxlIj09PWUmJnRoaXMuX3RpdGxlKHRoaXMudWlEaWFsb2dUaXRsZWJhci5maW5kKCIudWktZGlhbG9nLXRpdGxlIikpKX0sX3NpemU6ZnVuY3Rpb24oKXt2YXIgZSx0LGkscz10aGlzLm9wdGlvbnM7dGhpcy5lbGVtZW50LnNob3coKS5jc3Moe3dpZHRoOiJhdXRvIixtaW5IZWlnaHQ6MCxtYXhIZWlnaHQ6Im5vbmUiLGhlaWdodDowfSkscy5taW5XaWR0aD5zLndpZHRoJiYocy53aWR0aD1zLm1pbldpZHRoKSxlPXRoaXMudWlEaWFsb2cuY3NzKHtoZWlnaHQ6ImF1dG8iLHdpZHRoOnMud2lkdGh9KS5vdXRlckhlaWdodCgpLHQ9TWF0aC5tYXgoMCxzLm1pbkhlaWdodC1lKSxpPSJudW1iZXIiPT10eXBlb2Ygcy5tYXhIZWlnaHQ/TWF0aC5tYXgoMCxzLm1heEhlaWdodC1lKToibm9uZSIsImF1dG8iPT09cy5oZWlnaHQ/dGhpcy5lbGVtZW50LmNzcyh7bWluSGVpZ2h0OnQsbWF4SGVpZ2h0OmksaGVpZ2h0OiJhdXRvIn0pOnRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgoMCxzLmhlaWdodC1lKSksdGhpcy51aURpYWxvZy5pcygiOmRhdGEodWktcmVzaXphYmxlKSIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgib3B0aW9uIiwibWluSGVpZ2h0Iix0aGlzLl9taW5IZWlnaHQoKSl9LF9ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzPXRoaXMuZG9jdW1lbnQuZmluZCgiaWZyYW1lIikubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm4gZSgiPGRpdj4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsd2lkdGg6dC5vdXRlcldpZHRoKCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoKX0pLmFwcGVuZFRvKHQucGFyZW50KCkpLm9mZnNldCh0Lm9mZnNldCgpKVswXX0pfSxfdW5ibG9ja0ZyYW1lczpmdW5jdGlvbigpe3RoaXMuaWZyYW1lQmxvY2tzJiYodGhpcy5pZnJhbWVCbG9ja3MucmVtb3ZlKCksZGVsZXRlIHRoaXMuaWZyYW1lQmxvY2tzKX0sX2FsbG93SW50ZXJhY3Rpb246ZnVuY3Rpb24odCl7cmV0dXJuIGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1kaWFsb2ciKS5sZW5ndGg/ITA6ISFlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktZGF0ZXBpY2tlciIpLmxlbmd0aH0sX2NyZWF0ZU92ZXJsYXk6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMubW9kYWwpe3ZhciB0PSEwO3RoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dD0hMX0pLHRoaXMuZG9jdW1lbnQuZGF0YSgidWktZGlhbG9nLW92ZXJsYXlzIil8fHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse2ZvY3VzaW46ZnVuY3Rpb24oZSl7dHx8dGhpcy5fYWxsb3dJbnRlcmFjdGlvbihlKXx8KGUucHJldmVudERlZmF1bHQoKSx0aGlzLl90cmFja2luZ0luc3RhbmNlcygpWzBdLl9mb2N1c1RhYmJhYmxlKCkpfX0pLHRoaXMub3ZlcmxheT1lKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS13aWRnZXQtb3ZlcmxheSB1aS1mcm9udCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMuX29uKHRoaXMub3ZlcmxheSx7bW91c2Vkb3duOiJfa2VlcEZvY3VzIn0pLHRoaXMuZG9jdW1lbnQuZGF0YSgidWktZGlhbG9nLW92ZXJsYXlzIiwodGhpcy5kb2N1bWVudC5kYXRhKCJ1aS1kaWFsb2ctb3ZlcmxheXMiKXx8MCkrMSl9fSxfZGVzdHJveU92ZXJsYXk6ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMubW9kYWwmJnRoaXMub3ZlcmxheSl7dmFyIGU9dGhpcy5kb2N1bWVudC5kYXRhKCJ1aS1kaWFsb2ctb3ZlcmxheXMiKS0xO2U/dGhpcy5kb2N1bWVudC5kYXRhKCJ1aS1kaWFsb2ctb3ZlcmxheXMiLGUpOnRoaXMuZG9jdW1lbnQudW5iaW5kKCJmb2N1c2luIikucmVtb3ZlRGF0YSgidWktZGlhbG9nLW92ZXJsYXlzIiksdGhpcy5vdmVybGF5LnJlbW92ZSgpLHRoaXMub3ZlcmxheT1udWxsfX19KSxlLndpZGdldCgidWkudGFicyIse3ZlcnNpb246IjEuMTEuMCIsZGVsYXk6MzAwLG9wdGlvbnM6e2FjdGl2ZTpudWxsLGNvbGxhcHNpYmxlOiExLGV2ZW50OiJjbGljayIsaGVpZ2h0U3R5bGU6ImNvbnRlbnQiLGhpZGU6bnVsbCxzaG93Om51bGwsYWN0aXZhdGU6bnVsbCxiZWZvcmVBY3RpdmF0ZTpudWxsLGJlZm9yZUxvYWQ6bnVsbCxsb2FkOm51bGx9LF9pc0xvY2FsOmZ1bmN0aW9uKCl7dmFyIGU9LyMuKiQvO3JldHVybiBmdW5jdGlvbih0KXt2YXIgaSxzO3Q9dC5jbG9uZU5vZGUoITEpLGk9dC5ocmVmLnJlcGxhY2UoZSwiIikscz1sb2NhdGlvbi5ocmVmLnJlcGxhY2UoZSwiIik7dHJ5e2k9ZGVjb2RlVVJJQ29tcG9uZW50KGkpfWNhdGNoKG4pe310cnl7cz1kZWNvZGVVUklDb21wb25lbnQocyl9Y2F0Y2gobil7fXJldHVybiB0Lmhhc2gubGVuZ3RoPjEmJmk9PT1zfX0oKSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxpPXRoaXMub3B0aW9uczt0aGlzLnJ1bm5pbmc9ITEsdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS10YWJzIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikudG9nZ2xlQ2xhc3MoInVpLXRhYnMtY29sbGFwc2libGUiLGkuY29sbGFwc2libGUpLmRlbGVnYXRlKCIudWktdGFicy1uYXYgPiBsaSIsIm1vdXNlZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbih0KXtlKHRoaXMpLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSYmdC5wcmV2ZW50RGVmYXVsdCgpfSkuZGVsZWdhdGUoIi51aS10YWJzLWFuY2hvciIsImZvY3VzIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7ZSh0aGlzKS5jbG9zZXN0KCJsaSIpLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSYmdGhpcy5ibHVyKCl9KSx0aGlzLl9wcm9jZXNzVGFicygpLGkuYWN0aXZlPXRoaXMuX2luaXRpYWxBY3RpdmUoKSxlLmlzQXJyYXkoaS5kaXNhYmxlZCkmJihpLmRpc2FibGVkPWUudW5pcXVlKGkuZGlzYWJsZWQuY29uY2F0KGUubWFwKHRoaXMudGFicy5maWx0ZXIoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRhYnMuaW5kZXgoZSl9KSkpLnNvcnQoKSksdGhpcy5hY3RpdmU9dGhpcy5vcHRpb25zLmFjdGl2ZSE9PSExJiZ0aGlzLmFuY2hvcnMubGVuZ3RoP3RoaXMuX2ZpbmRBY3RpdmUoaS5hY3RpdmUpOmUoKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5hY3RpdmUubGVuZ3RoJiZ0aGlzLmxvYWQoaS5hY3RpdmUpfSxfaW5pdGlhbEFjdGl2ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5hY3RpdmUsaT10aGlzLm9wdGlvbnMuY29sbGFwc2libGUscz1sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKTtyZXR1cm4gbnVsbD09PXQmJihzJiZ0aGlzLnRhYnMuZWFjaChmdW5jdGlvbihpLG4pe3JldHVybiBlKG4pLmF0dHIoImFyaWEtY29udHJvbHMiKT09PXM/KHQ9aSwhMSk6dm9pZCAwfSksbnVsbD09PXQmJih0PXRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZmlsdGVyKCIudWktdGFicy1hY3RpdmUiKSkpLChudWxsPT09dHx8LTE9PT10KSYmKHQ9dGhpcy50YWJzLmxlbmd0aD8wOiExKSksdCE9PSExJiYodD10aGlzLnRhYnMuaW5kZXgodGhpcy50YWJzLmVxKHQpKSwtMT09PXQmJih0PWk/ITE6MCkpLCFpJiZ0PT09ITEmJnRoaXMuYW5jaG9ycy5sZW5ndGgmJih0PTApLHR9LF9nZXRDcmVhdGVFdmVudERhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dGFiOnRoaXMuYWN0aXZlLHBhbmVsOnRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSk6ZSgpfX0sX3RhYktleWRvd246ZnVuY3Rpb24odCl7dmFyIGk9ZSh0aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoImxpIikscz10aGlzLnRhYnMuaW5kZXgoaSksbj0hMDtpZighdGhpcy5faGFuZGxlUGFnZU5hdih0KSl7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBlLnVpLmtleUNvZGUuUklHSFQ6Y2FzZSBlLnVpLmtleUNvZGUuRE9XTjpzKys7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuVVA6Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDpuPSExLHMtLTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTkQ6cz10aGlzLmFuY2hvcnMubGVuZ3RoLTE7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuSE9NRTpzPTA7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuU1BBQ0U6cmV0dXJuIHQucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSx0aGlzLl9hY3RpdmF0ZShzKSx2b2lkIDA7Y2FzZSBlLnVpLmtleUNvZGUuRU5URVI6cmV0dXJuIHQucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSx0aGlzLl9hY3RpdmF0ZShzPT09dGhpcy5vcHRpb25zLmFjdGl2ZT8hMTpzKSx2b2lkIDA7ZGVmYXVsdDpyZXR1cm59dC5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLHM9dGhpcy5fZm9jdXNOZXh0VGFiKHMsbiksdC5jdHJsS2V5fHwoaS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSx0aGlzLnRhYnMuZXEocykuYXR0cigiYXJpYS1zZWxlY3RlZCIsInRydWUiKSx0aGlzLmFjdGl2YXRpbmc9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLm9wdGlvbigiYWN0aXZlIixzKX0sdGhpcy5kZWxheSkpfX0sX3BhbmVsS2V5ZG93bjpmdW5jdGlvbih0KXt0aGlzLl9oYW5kbGVQYWdlTmF2KHQpfHx0LmN0cmxLZXkmJnQua2V5Q29kZT09PWUudWkua2V5Q29kZS5VUCYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLmFjdGl2ZS5mb2N1cygpKX0sX2hhbmRsZVBhZ2VOYXY6ZnVuY3Rpb24odCl7cmV0dXJuIHQuYWx0S2V5JiZ0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuUEFHRV9VUD8odGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUtMSwhMSkpLCEwKTp0LmFsdEtleSYmdC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlBBR0VfRE9XTj8odGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUrMSwhMCkpLCEwKTp2b2lkIDB9LF9maW5kTmV4dFRhYjpmdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHMoKXtyZXR1cm4gdD5uJiYodD0wKSwwPnQmJih0PW4pLHR9Zm9yKHZhciBuPXRoaXMudGFicy5sZW5ndGgtMTstMSE9PWUuaW5BcnJheShzKCksdGhpcy5vcHRpb25zLmRpc2FibGVkKTspdD1pP3QrMTp0LTE7cmV0dXJuIHR9LF9mb2N1c05leHRUYWI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT10aGlzLl9maW5kTmV4dFRhYihlLHQpLHRoaXMudGFicy5lcShlKS5mb2N1cygpLGV9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4iYWN0aXZlIj09PWU/KHRoaXMuX2FjdGl2YXRlKHQpLHZvaWQgMCk6ImRpc2FibGVkIj09PWU/KHRoaXMuX3NldHVwRGlzYWJsZWQodCksdm9pZCAwKToodGhpcy5fc3VwZXIoZSx0KSwiY29sbGFwc2libGUiPT09ZSYmKHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktdGFicy1jb2xsYXBzaWJsZSIsdCksdHx8dGhpcy5vcHRpb25zLmFjdGl2ZSE9PSExfHx0aGlzLl9hY3RpdmF0ZSgwKSksImV2ZW50Ij09PWUmJnRoaXMuX3NldHVwRXZlbnRzKHQpLCJoZWlnaHRTdHlsZSI9PT1lJiZ0aGlzLl9zZXR1cEhlaWdodFN0eWxlKHQpLHZvaWQgMCl9LF9zYW5pdGl6ZVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiBlP2UucmVwbGFjZSgvWyEiJCUmJygpKissLlwvOjs8PT4/QFxbXF1cXmB7fH1+XS9nLCJcXCQmIik6IiJ9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsaT10aGlzLnRhYmxpc3QuY2hpbGRyZW4oIjpoYXMoYVtocmVmXSkiKTt0LmRpc2FibGVkPWUubWFwKGkuZmlsdGVyKCIudWktc3RhdGUtZGlzYWJsZWQiKSxmdW5jdGlvbihlKXtyZXR1cm4gaS5pbmRleChlKX0pLHRoaXMuX3Byb2Nlc3NUYWJzKCksdC5hY3RpdmUhPT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aD90aGlzLmFjdGl2ZS5sZW5ndGgmJiFlLmNvbnRhaW5zKHRoaXMudGFibGlzdFswXSx0aGlzLmFjdGl2ZVswXSk/dGhpcy50YWJzLmxlbmd0aD09PXQuZGlzYWJsZWQubGVuZ3RoPyh0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpOnRoaXMuX2FjdGl2YXRlKHRoaXMuX2ZpbmROZXh0VGFiKE1hdGgubWF4KDAsdC5hY3RpdmUtMSksITEpKTp0LmFjdGl2ZT10aGlzLnRhYnMuaW5kZXgodGhpcy5hY3RpdmUpOih0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpLHRoaXMuX3JlZnJlc2goKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9zZXR1cERpc2FibGVkKHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fc2V0dXBFdmVudHModGhpcy5vcHRpb25zLmV2ZW50KSx0aGlzLl9zZXR1cEhlaWdodFN0eWxlKHRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSksdGhpcy50YWJzLm5vdCh0aGlzLmFjdGl2ZSkuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJmYWxzZSIsImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsdGFiSW5kZXg6LTF9KSx0aGlzLnBhbmVscy5ub3QodGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpKS5oaWRlKCkuYXR0cih7ImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSx0aGlzLmFjdGl2ZS5sZW5ndGg/KHRoaXMuYWN0aXZlLmFkZENsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLCJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pLHRoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKS5zaG93KCkuYXR0cih7ImFyaWEtaGlkZGVuIjoiZmFsc2UifSkpOnRoaXMudGFicy5lcSgwKS5hdHRyKCJ0YWJJbmRleCIsMCl9LF9wcm9jZXNzVGFiczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy50YWJsaXN0PXRoaXMuX2dldExpc3QoKS5hZGRDbGFzcygidWktdGFicy1uYXYgdWktaGVscGVyLXJlc2V0IHVpLWhlbHBlci1jbGVhcmZpeCB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwiKS5hdHRyKCJyb2xlIiwidGFibGlzdCIpLHRoaXMudGFicz10aGlzLnRhYmxpc3QuZmluZCgiPiBsaTpoYXMoYVtocmVmXSkiKS5hZGRDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItdG9wIikuYXR0cih7cm9sZToidGFiIix0YWJJbmRleDotMX0pLHRoaXMuYW5jaG9ycz10aGlzLnRhYnMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUoImEiLHRoaXMpWzBdfSkuYWRkQ2xhc3MoInVpLXRhYnMtYW5jaG9yIikuYXR0cih7cm9sZToicHJlc2VudGF0aW9uIix0YWJJbmRleDotMX0pLHRoaXMucGFuZWxzPWUoKSx0aGlzLmFuY2hvcnMuZWFjaChmdW5jdGlvbihpLHMpe3ZhciBuLGEsbyxyPWUocykudW5pcXVlSWQoKS5hdHRyKCJpZCIpLGg9ZShzKS5jbG9zZXN0KCJsaSIpLGw9aC5hdHRyKCJhcmlhLWNvbnRyb2xzIik7dC5faXNMb2NhbChzKT8obj1zLmhhc2gsbz1uLnN1YnN0cmluZygxKSxhPXQuZWxlbWVudC5maW5kKHQuX3Nhbml0aXplU2VsZWN0b3IobikpKToobz1oLmF0dHIoImFyaWEtY29udHJvbHMiKXx8ZSh7fSkudW5pcXVlSWQoKVswXS5pZCxuPSIjIitvLGE9dC5lbGVtZW50LmZpbmQobiksYS5sZW5ndGh8fChhPXQuX2NyZWF0ZVBhbmVsKG8pLGEuaW5zZXJ0QWZ0ZXIodC5wYW5lbHNbaS0xXXx8dC50YWJsaXN0KSksYS5hdHRyKCJhcmlhLWxpdmUiLCJwb2xpdGUiKSksYS5sZW5ndGgmJih0LnBhbmVscz10LnBhbmVscy5hZGQoYSkpLGwmJmguZGF0YSgidWktdGFicy1hcmlhLWNvbnRyb2xzIixsKSxoLmF0dHIoeyJhcmlhLWNvbnRyb2xzIjpvLCJhcmlhLWxhYmVsbGVkYnkiOnJ9KSxhLmF0dHIoImFyaWEtbGFiZWxsZWRieSIscil9KSx0aGlzLnBhbmVscy5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuYXR0cigicm9sZSIsInRhYnBhbmVsIil9LF9nZXRMaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGFibGlzdHx8dGhpcy5lbGVtZW50LmZpbmQoIm9sLHVsIikuZXEoMCl9LF9jcmVhdGVQYW5lbDpmdW5jdGlvbih0KXtyZXR1cm4gZSgiPGRpdj4iKS5hdHRyKCJpZCIsdCkuYWRkQ2xhc3MoInVpLXRhYnMtcGFuZWwgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpLmRhdGEoInVpLXRhYnMtZGVzdHJveSIsITApfSxfc2V0dXBEaXNhYmxlZDpmdW5jdGlvbih0KXtlLmlzQXJyYXkodCkmJih0Lmxlbmd0aD90Lmxlbmd0aD09PXRoaXMuYW5jaG9ycy5sZW5ndGgmJih0PSEwKTp0PSExKTtmb3IodmFyIGkscz0wO2k9dGhpcy50YWJzW3NdO3MrKyl0PT09ITB8fC0xIT09ZS5pbkFycmF5KHMsdCk/ZShpKS5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIiwidHJ1ZSIpOmUoaSkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpO3RoaXMub3B0aW9ucy5kaXNhYmxlZD10fSxfc2V0dXBFdmVudHM6ZnVuY3Rpb24odCl7dmFyIGk9e307dCYmZS5lYWNoKHQuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe2lbdF09Il9ldmVudEhhbmRsZXIifSksdGhpcy5fb2ZmKHRoaXMuYW5jaG9ycy5hZGQodGhpcy50YWJzKS5hZGQodGhpcy5wYW5lbHMpKSx0aGlzLl9vbighMCx0aGlzLmFuY2hvcnMse2NsaWNrOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX19KSx0aGlzLl9vbih0aGlzLmFuY2hvcnMsaSksdGhpcy5fb24odGhpcy50YWJzLHtrZXlkb3duOiJfdGFiS2V5ZG93biJ9KSx0aGlzLl9vbih0aGlzLnBhbmVscyx7a2V5ZG93bjoiX3BhbmVsS2V5ZG93biJ9KSx0aGlzLl9mb2N1c2FibGUodGhpcy50YWJzKSx0aGlzLl9ob3ZlcmFibGUodGhpcy50YWJzKX0sX3NldHVwSGVpZ2h0U3R5bGU6ZnVuY3Rpb24odCl7dmFyIGkscz10aGlzLmVsZW1lbnQucGFyZW50KCk7ImZpbGwiPT09dD8oaT1zLmhlaWdodCgpLGktPXRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmVsZW1lbnQuc2libGluZ3MoIjp2aXNpYmxlIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcykscz10LmNzcygicG9zaXRpb24iKTsiYWJzb2x1dGUiIT09cyYmImZpeGVkIiE9PXMmJihpLT10Lm91dGVySGVpZ2h0KCEwKSl9KSx0aGlzLmVsZW1lbnQuY2hpbGRyZW4oKS5ub3QodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24oKXtpLT1lKHRoaXMpLm91dGVySGVpZ2h0KCEwKX0pLHRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmhlaWdodChNYXRoLm1heCgwLGktZSh0aGlzKS5pbm5lckhlaWdodCgpK2UodGhpcykuaGVpZ2h0KCkpKX0pLmNzcygib3ZlcmZsb3ciLCJhdXRvIikpOiJhdXRvIj09PXQmJihpPTAsdGhpcy5wYW5lbHMuZWFjaChmdW5jdGlvbigpe2k9TWF0aC5tYXgoaSxlKHRoaXMpLmhlaWdodCgiIikuaGVpZ2h0KCkpfSkuaGVpZ2h0KGkpKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnMscz10aGlzLmFjdGl2ZSxuPWUodC5jdXJyZW50VGFyZ2V0KSxhPW4uY2xvc2VzdCgibGkiKSxvPWFbMF09PT1zWzBdLHI9byYmaS5jb2xsYXBzaWJsZSxoPXI/ZSgpOnRoaXMuX2dldFBhbmVsRm9yVGFiKGEpLGw9cy5sZW5ndGg/dGhpcy5fZ2V0UGFuZWxGb3JUYWIocyk6ZSgpLHU9e29sZFRhYjpzLG9sZFBhbmVsOmwsbmV3VGFiOnI/ZSgpOmEsbmV3UGFuZWw6aH07dC5wcmV2ZW50RGVmYXVsdCgpLGEuaGFzQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIil8fGEuaGFzQ2xhc3MoInVpLXRhYnMtbG9hZGluZyIpfHx0aGlzLnJ1bm5pbmd8fG8mJiFpLmNvbGxhcHNpYmxlfHx0aGlzLl90cmlnZ2VyKCJiZWZvcmVBY3RpdmF0ZSIsdCx1KT09PSExfHwoaS5hY3RpdmU9cj8hMTp0aGlzLnRhYnMuaW5kZXgoYSksdGhpcy5hY3RpdmU9bz9lKCk6YSx0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSxsLmxlbmd0aHx8aC5sZW5ndGh8fGUuZXJyb3IoImpRdWVyeSBVSSBUYWJzOiBNaXNtYXRjaGluZyBmcmFnbWVudCBpZGVudGlmaWVyLiIpLGgubGVuZ3RoJiZ0aGlzLmxvYWQodGhpcy50YWJzLmluZGV4KGEpLHQpLHRoaXMuX3RvZ2dsZSh0LHUpKX0sX3RvZ2dsZTpmdW5jdGlvbih0LGkpe2Z1bmN0aW9uIHMoKXthLnJ1bm5pbmc9ITEsYS5fdHJpZ2dlcigiYWN0aXZhdGUiLHQsaSl9ZnVuY3Rpb24gbigpe2kubmV3VGFiLmNsb3Nlc3QoImxpIikuYWRkQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLG8ubGVuZ3RoJiZhLm9wdGlvbnMuc2hvdz9hLl9zaG93KG8sYS5vcHRpb25zLnNob3cscyk6KG8uc2hvdygpLHMoKSl9dmFyIGE9dGhpcyxvPWkubmV3UGFuZWwscj1pLm9sZFBhbmVsO3RoaXMucnVubmluZz0hMCxyLmxlbmd0aCYmdGhpcy5vcHRpb25zLmhpZGU/dGhpcy5faGlkZShyLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7aS5vbGRUYWIuY2xvc2VzdCgibGkiKS5yZW1vdmVDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksbigpfSk6KGkub2xkVGFiLmNsb3Nlc3QoImxpIikucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLHIuaGlkZSgpLG4oKSksci5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKSxpLm9sZFRhYi5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6ImZhbHNlIiwiYXJpYS1leHBhbmRlZCI6ImZhbHNlIn0pLG8ubGVuZ3RoJiZyLmxlbmd0aD9pLm9sZFRhYi5hdHRyKCJ0YWJJbmRleCIsLTEpOm8ubGVuZ3RoJiZ0aGlzLnRhYnMuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIDA9PT1lKHRoaXMpLmF0dHIoInRhYkluZGV4Iil9KS5hdHRyKCJ0YWJJbmRleCIsLTEpLG8uYXR0cigiYXJpYS1oaWRkZW4iLCJmYWxzZSIpLGkubmV3VGFiLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoidHJ1ZSIsImFyaWEtZXhwYW5kZWQiOiJ0cnVlIix0YWJJbmRleDowfSl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgaSxzPXRoaXMuX2ZpbmRBY3RpdmUodCk7c1swXSE9PXRoaXMuYWN0aXZlWzBdJiYocy5sZW5ndGh8fChzPXRoaXMuYWN0aXZlKSxpPXMuZmluZCgiLnVpLXRhYnMtYW5jaG9yIilbMF0sdGhpcy5fZXZlbnRIYW5kbGVyKHt0YXJnZXQ6aSxjdXJyZW50VGFyZ2V0OmkscHJldmVudERlZmF1bHQ6ZS5ub29wfSkpfSxfZmluZEFjdGl2ZTpmdW5jdGlvbih0KXtyZXR1cm4gdD09PSExP2UoKTp0aGlzLnRhYnMuZXEodCl9LF9nZXRJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihlPXRoaXMuYW5jaG9ycy5pbmRleCh0aGlzLmFuY2hvcnMuZmlsdGVyKCJbaHJlZiQ9JyIrZSsiJ10iKSkpLGV9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy54aHImJnRoaXMueGhyLmFib3J0KCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS10YWJzIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIHVpLXRhYnMtY29sbGFwc2libGUiKSx0aGlzLnRhYmxpc3QucmVtb3ZlQ2xhc3MoInVpLXRhYnMtbmF2IHVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIikucmVtb3ZlQXR0cigicm9sZSIpLHRoaXMuYW5jaG9ycy5yZW1vdmVDbGFzcygidWktdGFicy1hbmNob3IiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVVbmlxdWVJZCgpLHRoaXMudGFicy5hZGQodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24oKXtlLmRhdGEodGhpcywidWktdGFicy1kZXN0cm95Iik/ZSh0aGlzKS5yZW1vdmUoKTplKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1kZWZhdWx0IHVpLXN0YXRlLWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCB1aS1jb3JuZXItdG9wIHVpLWNvcm5lci1ib3R0b20gdWktd2lkZ2V0LWNvbnRlbnQgdWktdGFicy1hY3RpdmUgdWktdGFicy1wYW5lbCIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlQXR0cigiYXJpYS1saXZlIikucmVtb3ZlQXR0cigiYXJpYS1idXN5IikucmVtb3ZlQXR0cigiYXJpYS1zZWxlY3RlZCIpLnJlbW92ZUF0dHIoImFyaWEtbGFiZWxsZWRieSIpLnJlbW92ZUF0dHIoImFyaWEtaGlkZGVuIikucmVtb3ZlQXR0cigiYXJpYS1leHBhbmRlZCIpLnJlbW92ZUF0dHIoInJvbGUiKX0pLHRoaXMudGFicy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxpPXQuZGF0YSgidWktdGFicy1hcmlhLWNvbnRyb2xzIik7aT90LmF0dHIoImFyaWEtY29udHJvbHMiLGkpLnJlbW92ZURhdGEoInVpLXRhYnMtYXJpYS1jb250cm9scyIpOnQucmVtb3ZlQXR0cigiYXJpYS1jb250cm9scyIpfSksdGhpcy5wYW5lbHMuc2hvdygpLCJjb250ZW50IiE9PXRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSYmdGhpcy5wYW5lbHMuY3NzKCJoZWlnaHQiLCIiKX0sZW5hYmxlOmZ1bmN0aW9uKHQpe3ZhciBpPXRoaXMub3B0aW9ucy5kaXNhYmxlZDtpIT09ITEmJih2b2lkIDA9PT10P2k9ITE6KHQ9dGhpcy5fZ2V0SW5kZXgodCksaT1lLmlzQXJyYXkoaSk/ZS5tYXAoaSxmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXQ/ZTpudWxsfSk6ZS5tYXAodGhpcy50YWJzLGZ1bmN0aW9uKGUsaSl7cmV0dXJuIGkhPT10P2k6bnVsbH0pKSx0aGlzLl9zZXR1cERpc2FibGVkKGkpKX0sZGlzYWJsZTpmdW5jdGlvbih0KXt2YXIgaT10aGlzLm9wdGlvbnMuZGlzYWJsZWQ7aWYoaSE9PSEwKXtpZih2b2lkIDA9PT10KWk9ITA7ZWxzZXtpZih0PXRoaXMuX2dldEluZGV4KHQpLC0xIT09ZS5pbkFycmF5KHQsaSkpcmV0dXJuO2k9ZS5pc0FycmF5KGkpP2UubWVyZ2UoW3RdLGkpLnNvcnQoKTpbdF19dGhpcy5fc2V0dXBEaXNhYmxlZChpKX19LGxvYWQ6ZnVuY3Rpb24odCxpKXt0PXRoaXMuX2dldEluZGV4KHQpO3ZhciBzPXRoaXMsbj10aGlzLnRhYnMuZXEodCksYT1uLmZpbmQoIi51aS10YWJzLWFuY2hvciIpLG89dGhpcy5fZ2V0UGFuZWxGb3JUYWIobikscj17dGFiOm4scGFuZWw6b307dGhpcy5faXNMb2NhbChhWzBdKXx8KHRoaXMueGhyPWUuYWpheCh0aGlzLl9hamF4U2V0dGluZ3MoYSxpLHIpKSx0aGlzLnhociYmImNhbmNlbGVkIiE9PXRoaXMueGhyLnN0YXR1c1RleHQmJihuLmFkZENsYXNzKCJ1aS10YWJzLWxvYWRpbmciKSxvLmF0dHIoImFyaWEtYnVzeSIsInRydWUiKSx0aGlzLnhoci5zdWNjZXNzKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtvLmh0bWwoZSkscy5fdHJpZ2dlcigibG9hZCIsaSxyKX0sMSl9KS5jb21wbGV0ZShmdW5jdGlvbihlLHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXsiYWJvcnQiPT09dCYmcy5wYW5lbHMuc3RvcCghMSwhMCksbi5yZW1vdmVDbGFzcygidWktdGFicy1sb2FkaW5nIiksby5yZW1vdmVBdHRyKCJhcmlhLWJ1c3kiKSxlPT09cy54aHImJmRlbGV0ZSBzLnhocn0sMSl9KSkpfSxfYWpheFNldHRpbmdzOmZ1bmN0aW9uKHQsaSxzKXt2YXIgbj10aGlzO3JldHVybnt1cmw6dC5hdHRyKCJocmVmIiksYmVmb3JlU2VuZDpmdW5jdGlvbih0LGEpe3JldHVybiBuLl90cmlnZ2VyKCJiZWZvcmVMb2FkIixpLGUuZXh0ZW5kKHtqcVhIUjp0LGFqYXhTZXR0aW5nczphfSxzKSl9fX0sX2dldFBhbmVsRm9yVGFiOmZ1bmN0aW9uKHQpe3ZhciBpPWUodCkuYXR0cigiYXJpYS1jb250cm9scyIpO3JldHVybiB0aGlzLmVsZW1lbnQuZmluZCh0aGlzLl9zYW5pdGl6ZVNlbGVjdG9yKCIjIitpKSl9fSl9KTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS9zY3JpcHRzL2FqYXgtdXNlci5qcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL3NjcmlwdHMvYWpheC11c2VyLmpzCmluZGV4IDNlZWQyZGEuLjFjYjU3OGMgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL3NjcmlwdHMvYWpheC11c2VyLmpzCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL3NjcmlwdHMvYWpheC11c2VyLmpzCkBAIC0xNSwxOCArMTUsMjAgQEAKICogY29weXJpZ2h0IGluIHRoaXMgd29yaywgcGxlYXNlIHNlZSB0aGUgTk9USUNFIGZpbGUgaW4gdGhlIHRvcCBsZXZlbAogKiBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCiAqLworCiAvLyBVc2VkIGluOiBJbnZpdGVNZW1iZXIuanNwLCBVc2VyQWRtaW4uanNwCiAKIGZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RPYmplY3QoKSB7CiAgICAgdmFyIHJvOwogICAgIHZhciBicm93c2VyID0gbmF2aWdhdG9yLmFwcE5hbWU7Ci0gICAgaWYgKGJyb3dzZXIgPT0gIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciIpIHsKKyAgICBpZiAoYnJvd3NlciA9PT0gIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciIpIHsKICAgICAgICAgcm8gPSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKICAgICB9IGVsc2UgewogICAgICAgICBybyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwogICAgIH0KICAgICByZXR1cm4gcm87CiB9CisKIHZhciBodHRwID0gY3JlYXRlUmVxdWVzdE9iamVjdCgpOwogdmFyIGluaXQgPSBmYWxzZTsKIHZhciBpc0J1c3kgPSBmYWxzZTsKQEAgLTM4LDggKzQwLDExIEBACiAgICAgICAgIHUgPSB1c2VyVVJMOwogICAgICAgICBpZiAoZW5hYmxlZCAhPSBudWxsKSB1ID0gdSArICImZW5hYmxlZD0iICsgZW5hYmxlZDsKICAgICAgICAgc2VuZFVzZXJSZXF1ZXN0KHUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHVzZXJTdWJtaXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlOwogICAgIH0KIH0KKwogZnVuY3Rpb24gb25Vc2VyTmFtZUNoYW5nZShlbmFibGVkKSB7CiAgICAgdSA9IHVzZXJVUkw7CiAgICAgaWYgKGVuYWJsZWQgIT0gbnVsbCkgdSA9IHUgKyAiJmVuYWJsZWQ9IiArIGVuYWJsZWQ7CkBAIC00NywxMiArNTIsMTcgQEAKICAgICBpZiAodXNlck5hbWUudmFsdWUubGVuZ3RoID4gMCkgdSA9IHUgKyAiJnN0YXJ0c1dpdGg9IiArIHVzZXJOYW1lLnZhbHVlOwogICAgIHNlbmRVc2VyUmVxdWVzdCh1KTsKIH0KKwogZnVuY3Rpb24gb25Vc2VyU2VsZWN0ZWQoKSB7CiAgICAgdXNlckxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXNlckxpc3QiKTsKICAgICB1c2VyID0gdXNlckxpc3Qub3B0aW9uc1t1c2VyTGlzdC5vcHRpb25zLnNlbGVjdGVkSW5kZXhdOwogICAgIHVzZXJOYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVzZXJOYW1lIik7CiAgICAgdXNlck5hbWUudmFsdWUgPSB1c2VyLnZhbHVlOworCisgICAgdXNlclN1Ym1pdEJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1c2VyLXN1Ym1pdCIpOworICAgIHVzZXJTdWJtaXRCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTsKIH0KKwogZnVuY3Rpb24gc2VuZFVzZXJSZXF1ZXN0KHVybCkgewogICAgIGlmIChpc0J1c3kpIHJldHVybjsKICAgICBpc0J1c3kgPSB0cnVlOwpAQCAtNjAsMTggKzcwLDE4IEBACiAgICAgaHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBoYW5kbGVVc2VyUmVzcG9uc2U7CiAgICAgaHR0cC5zZW5kKG51bGwpOwogfQorCiBmdW5jdGlvbiBoYW5kbGVVc2VyUmVzcG9uc2UoKSB7Ci0gICAgaWYgKGh0dHAucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgaWYgKGh0dHAucmVhZHlTdGF0ZSA9PT0gNCkgewogICAgICAgICB1c2VyTGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1c2VyTGlzdCIpOwogICAgICAgICBmb3IgKGkgPSB1c2VyTGlzdC5vcHRpb25zLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgIHVzZXJMaXN0Lm9wdGlvbnNbaV0gPSBudWxsOwogICAgICAgICB9ICAgCi0gICAgICAgIC8vdXNlckxpc3Qub25jaGFuZ2UgPSBudWxsOwotICAgICAgICBkYXRhID0gaHR0cC5yZXNwb25zZVRleHQ7ICAKLSAgICAgICAgaWYgKGRhdGEuaW5kZXhPZigiXG4iKSAhPSAtMSkgeworICAgICAgICBkYXRhID0gaHR0cC5yZXNwb25zZVRleHQ7CisgICAgICAgIGlmIChkYXRhLmluZGV4T2YoIlxuIikgIT09IC0xKSB7CiAgICAgICAgICAgICBsaW5lcyA9IGRhdGEuc3BsaXQoJ1xuJyk7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBpZiAobGluZXNbaV0uaW5kZXhPZignLCcpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgaWYgKGxpbmVzW2ldLmluZGV4T2YoJywnKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICB1c2VyQXJyYXkgPSBsaW5lc1tpXS5zcGxpdCgnLCcpOwogICAgICAgICAgICAgICAgICAgIHVzZXJMaXN0Lm9wdGlvbnNbdXNlckxpc3QubGVuZ3RoXSA9IAogICAgICAgICAgICAgICAgICAgICAgIG5ldyBPcHRpb24odXNlckFycmF5WzBdICsgIiAoIiArIHVzZXJBcnJheVsxXSArICIpIiwgdXNlckFycmF5WzBdKTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL3N0eWxlcy9yb2xsZXIuY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvc3R5bGVzL3JvbGxlci5jc3MKaW5kZXggMzk3YzFjZC4uNDI4Yzc4ZSAxMDA2NDQKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvc3R5bGVzL3JvbGxlci5jc3MKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkvc3R5bGVzL3JvbGxlci5jc3MKQEAgLTE2LDM0NSArMTYsMTI5IEBACiAqIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KICovCiAKLS8qCi1yb2xsZXIuY3NzOiBCYXNlIENTUyBzdHlsZXMgZm9yIFJvbGxlciB3ZWIgVUkKKy8qIHJvbGxlci5jc3M6IEJhc2UgQ1NTIHN0eWxlcyBmb3IgUm9sbGVyIHdlYiBVSSAqLwogCi1DVVNUT01JWkFCTEUgY29sb3IgYW5kIGJhY2tncm91bmQgaW1hZ2Ugc2V0dGluZ3MgaGF2ZSBiZWVuIHNlcGFyYXRlZCBvdXQKLWFuZCBwbGFjZWQgaW4gc2VwYXJhdGUgY29sb3JzLmNzcyBmaWxlcyBmb3IgZGlmZmVyZW50IGNvbG9yIHNjaGVtZXMuCi0qLwordGFibGUgeworICAgIGJvcmRlcjowOworfQogCi1ib2R5IHsKKy5jb250YWluZXIgeworICAgIG1hcmdpbjogMWVtOworfQorCisucm9sbGVyLXBhZ2UtdGl0bGUgeworICAgIG1hcmdpbi10b3A6IDBweDsKKyAgICBtYXJnaW4tYm90dG9tOiA1cHg7Cit9CisKKy5yb2xsZXItY29sdW1uLXJpZ2h0IHsKKyAgICBwYWRkaW5nLWxlZnQ6IDFlbTsKKyAgICBwYWRkaW5nLXJpZ2h0OiAyZW07Cit9CisKKy5yb2xsZXItY29sdW1uLWxlZnR7CisgICAgcGFkZGluZy1sZWZ0OiAyZW07CisgICAgcGFkZGluZy1yaWdodDogMWVtOworfQorCisuZGF0ZS1mb3JtIHsKKyAgICBtYXJnaW46IDEwcHg7Cit9CisKKy5mYWRlIHsKKyAgICBvcGFjaXR5OiAwOworICAgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAxLjI1cyBsaW5lYXI7CisgICAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDEuMjVzIGxpbmVhcjsKKyAgICAtbXMtdHJhbnNpdGlvbjogb3BhY2l0eSAxLjI1cyBsaW5lYXI7CisgICAgLW8tdHJhbnNpdGlvbjogb3BhY2l0eSAxLjI1cyBsaW5lYXI7CisgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAxLjI1cyBsaW5lYXI7Cit9CisKKy8qIGJvb3RzdHJhcCB0d2Vha3MgKi8KKworLmdseXBoaWNvbi1pbmZvLXNpZ24geworICAgIG1hcmdpbi1yaWdodDogMC41ZW07Cit9CisKKy5jb250cm9scz5pbnB1dFt0eXBlPWNoZWNrYm94XSB7CisgICAgbWFyZ2luLWJvdHRvbTogMC41ZW07Cit9CisKKy8qIG1haW4gbWVudSAqLworCisubW1fc3VidGFibGVfbGFiZWwgeworICAgIHdpZHRoOiA4ZW07CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7IAorfQorCisueW91cldlYmxvZ0JveCB7CiAgICAgYmFja2dyb3VuZDogd2hpdGU7Ci0gICAgbWFyZ2luOiAwcHg7Ci0gICAgcGFkZGluZzogMHB4OwotICAgIHRleHQtYWxpZ246IGxlZnQ7CisgICAgcGFkZGluZzogMWVtOwogfQogCi10aCwgdGQgewotICAgIGJvcmRlcjogbm9uZTsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwotICAgIHBhZGRpbmc6IDJweDsKK3RhYmxlLm1tX3RhYmxlIHRkIHsKKyAgICBwYWRkaW5nOiAwLjNlbTsKIH0KIAotYSB7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotfQotYTpsaW5rIHsKLSAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Ci19Ci1hOnZpc2l0ZWQgewotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLX0KLWE6aG92ZXIgewotICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwotfQotYTphY3RpdmUgewotICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwordGFibGUubW1fdGFibGVfYWN0aW9ucyB0ZCB7CisgICAgcGFkZGluZzogMC4xZW07CiB9CiAKLXAuc3VidGl0bGUgewotICAgIG1hcmdpbjogNXB4IDBweCAxNXB4OwotICAgIGZvbnQtc2l6ZTogMWVtOwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotICAgIGZvbnQtc2l6ZTogMTIwJTsKKy8qIGVkaXQgZW50cnkgcGFnZSAqLworCisucGFuZWwtaGVhZGluZyBhOmFmdGVyIHsKKyAgICBmb250LWZhbWlseTonR2x5cGhpY29ucyBIYWxmbGluZ3MnOworICAgIGNvbnRlbnQ6IlxlMTE0IjsKKyAgICBmbG9hdDogcmlnaHQ7CisgICAgY29sb3I6IGdyZXk7CiB9Ci1wLnBhZ2V0aXAgewotICAgIG1hcmdpbjogMHB4IDBweCAxNXB4IDBweDsKLX0KLWltZyB7Ci0gICAgYm9yZGVyOiAwcHg7Ci0gICAgb3ZlcmZsb3c6IGF1dG87Ci19Ci1pbWcudzNjIHsKLSAgICBib3JkZXI6IDBweDsKLSAgICBoZWlnaHQ6IDMxcHg7Ci0gICAgd2lkdGg6IDg4cHg7Ci0gICAgbWFyZ2luLXJpZ2h0OiA1cHg7Ci19Ci1sYWJlbCB7Ci0gICBsaW5lLWhlaWdodDogMS41ZW07CisucGFuZWwtaGVhZGluZyBhLmNvbGxhcHNlZDphZnRlciB7CisgICAgY29udGVudDoiXGUwODAiOwogfQogCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1QYWdlIGVsZW1lbnQgc3R5bGVzOiBib3hlcyBhbmQgYm9yZGVycywgZXRjLgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1kaXYuYmFubmVyU3RhdHVzQm94IHsKLSAgICBoZWlnaHQ6IDJlbTsKKyNwYW5lbC1wbHVnaW5zIHsgICAgICAvKiBLbHVkZ2UgZm9yIEVudHJ5RWRpdG9yLmpzcCAqLworICAgIG1hcmdpbi10b3A6IDZweDsgIC8qIFdpdGhvdXQgdGhpcyB0aGVyZSBubyBzcGFjZSBiZXR3ZWVuIFN1bW1hcnkgYW5kIFBsdWdpbnMgdG8gQXBwbHkgcGFuZWxzICovCiB9CiAKLS5iYW5uZXJTdGF0dXNCb3ggYSwgLmJhbm5lclN0YXR1c0JveCBhIHsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLX0KLS5iYW5uZXJMZWZ0IHsKLSAgICBwYWRkaW5nOiA0cHggMTVweCA0cHggMTBweDsKLX0KLS5iYW5uZXJSaWdodCB7Ci0gICAgcGFkZGluZzogNHB4IDEwcHggNHB4IDE1cHg7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci19Ci0uYmFubmVyQm94IHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBiYWNrZ3JvdW5kOiAjZjAwOwotfQotLnNpZGViYXJCb2R5SGVhZCBoMywgLnNlYXJjaFNpZGViYXJCb2R5IGgzIHsKLSAgICBwYWRkaW5nOiA1cHg7Ci19Ci0uc2lkZWJhcklubmVyIHsKLSAgICBwYWRkaW5nOiAwLjVlbSAwLjVlbSAwLjVlbSAxZW07Ci19Ci0uc2lkZWJhckJvZHkgdWwgewotICAgIG1hcmdpbjogMHB4OwotICAgIHBhZGRpbmctbGVmdDogNXB4OwotfQotLnNpZGViYXJCb2R5IGxpIHsKLSAgICBsaXN0LXN0eWxlLXBvc2l0aW9uOiBpbnNpZGU7Ci0gICAgbGlzdC1zdHlsZS1pbWFnZTogdXJsKC4uL2ltYWdlcy9kYXNoLmdpZik7Ci0gICAgbWFyZ2luLWxlZnQ6IDBlbTsKLSAgICBwYWRkaW5nLWxlZnQ6IDAuNWVtOwotICAgIHBhZGRpbmctdG9wOiAzcHg7Ci19Ci1kaXYuZW50cmllc0JveElubmVyIHsKLSAgICBwYWRkaW5nOiA1cHg7Ci19Ci1kaXYuZW50cnlUaXRsZUJveCB7Ci0gICAgcGFkZGluZzogNHB4OwotICAgIG1hcmdpbjogNHB4IDBweCA0cHggMHB4OwotICAgIGZvbnQtc2l6ZTogbWVkaXVtOwotfQotZGl2LmVudHJ5Qm94LCBkaXYuZW50cnlCb3hQaW5uZWQgewotICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwotICAgIGJvcmRlci1ib3R0b20td2lkdGg6IHRoaW47Ci0gICAgYm9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7Ci0gICAgcGFkZGluZzogM3B4IDBweCAzcHggMHB4OwotfQotZGl2LmVudHJ5Qm94UGlubmVkIHsKLX0KLS5lbnRyeVRpdGxlIHsKLSAgICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKLSAgICBmb250LXNpemU6IDEycHg7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotfQotLmVudHJ5RGV0YWlscyB7Ci0gICAgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLX0KLS5lbnRyeURlc2NyaXB0aW9uIHsKLSAgICBmb250LWZhbWlseTogQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsKLSAgICBmb250LXNpemU6IDExcHg7Ci0gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwotfQotc3Bhbi5ob3RCbG9ncywgYS5ob3RCbG9ncywgYTphY3RpdmUuaG90QmxvZ3MsIGE6dmlzaXRlZC5ob3RCbG9ncywgdWwuaG90QmxvZ3MgewotICAgIGZvbnQtc2l6ZTogc21hbGw7Ci0gICAgcGFkZGluZy1sZWZ0OiAwcHg7Ci0gICAgbGlzdC1zdHlsZS10eXBlOiBub25lCi19Ci1pbnB1dC5zZWFyY2hCdXR0b24gewotICAgIGN1cnNvcjogcG9pbnRlcjsKLSAgICBmb250LWZhbWlseTogbHVjaWRhLGFyaWFsLHNhbnMtc2VyaWY7Ci0gICAgaGVpZ2h0OiAxLjRlbTsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLSAgICBmb250LXNpemU6IDExcHg7Ci0gICAgcGFkZGluZzogMHB4IDBweCAycHggMHB4OwotICAgIG1hcmdpbjogNXB4OwotICAgIGJvcmRlcjogMHB4IG5vbmUgIzAwMDsKKy8qIGtlZXAgalF1ZXJ5IFVJIGRhdGVwaWNrZXIgaW4gZnJvbnQgb2Ygb3RoZXIgZWxlbWVudHMgKi8KKy51aS1kYXRlcGlja2VyIHsgCisgICAgcG9zaXRpb246IHJlbGF0aXZlOyAKKyAgICB6LWluZGV4OiAxMDAwMCAhaW1wb3J0YW50OwogfQogCisvKiBlbnRyaWVzIHBhZ2UgKi8KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotZm9ybSBsYXlvdXQgc3R5bGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWlucHV0LCBzZWxlY3QsIG9wdGlvbiB7Ci0gICAgZm9udDogc21hbGwgVmVyZGFuYSxBcmlhbCxTYW5zLXNlcmlmOwotICAgIGNvbG9yOiBibGFjazsKLSAgICBmb250OiBzbWFsbC8xLjVlbSBWZXJkYW5hLCBBcmlhbCwgSGVsdmV0aWNhLCBzYW5zLXNlcmlmOwotICAgIGZvbnQtc2l6ZTogMTAwJTsKLX0KLXRleHRhcmVhIHsKLSAgICBtYXJnaW46IDNweCAwcHggMHB4IDBweDsKLX0KLWRpdi5idXR0b25Cb3ggewotICAgIHdpZHRoOiA5OCU7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI2YzZjNmMzsKLSAgICBwYWRkaW5nOiAzcHg7Ci0gICAgbWFyZ2luLXRvcDogNWVtOwotICAgIGNsZWFyOiBib3RoOwotfQotLmxlZnQgewotICAgIGZvbnQtc2l6ZTogc21hbGw7Ci0gICAgd2lkdGg6IDEzNnB4OwotfQotLmxlZnRUaXRsZSB7Ci0gICAgZm9udC1zaXplOiBzbWFsbDsKLSAgICBmb250LXdlaWdodDogYm9sZDsKKy5zY2hlZHVsZWRFbnRyeUJveCB7CisgICAgYmFja2dyb3VuZDogI0VFRUVFMDsKKyAgICBib3JkZXI6IDFweCBncmF5IHNvbGlkOwogfQogCi0uZm9ybXRhYmxlLCAuZm9ybXRhYmxlTm9EZXNjIHsKLSAgICB3aWR0aDogMTAwJTsKLSAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotfQotLmZvcm10YWJsZSB0ZC5sYWJlbCwgLmZvcm10YWJsZSB0ZC5maWVsZCwgLmZvcm10YWJsZSB0ZC5kZXNjcmlwdGlvbiwKLS5mb3JtdGFibGVOb0Rlc2MgdGQubGFiZWwsIC5mb3JtdGFibGVOb0Rlc2MgdGQuZmllbGQsIC5mb3JtdGFibGVOb0Rlc2MgIHsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwotICAgIGJvcmRlci1zdHlsZTogc29saWQ7Ci0gICAgYm9yZGVyLXdpZHRoOiAwcHggMHB4IDFweCAwcHg7Ci0gICAgYm9yZGVyLWNvbG9yOiAjZTNlM2UzOwotICAgIHBhZGRpbmc6IDRweCAxMHB4IDRweCAxMHB4OwotfQotLmZvcm10YWJsZSB0ZC5sYWJlbCB7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gICAgd2lkdGg6IDIwJTsKLX0KLS5mb3JtdGFibGUgdGQuZmllbGQgewotICAgIHdpZHRoOiAzMCU7Ci19Ci0uZm9ybXRhYmxlIHRkLmRlc2NyaXB0aW9uIHsKLSAgICB3aWR0aDogNTAlOwotICAgIGxpbmUtaGVpZ2h0OiAxNDAlOwotfQotLmZvcm10YWJsZU5vRGVzYyB0ZC5sYWJlbCB7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gICAgd2lkdGg6IDQwJTsKLX0KLS5mb3JtdGFibGVOb0Rlc2MgdGQuZmllbGQgewotICAgIHdpZHRoOiA0MCU7Ci19Ci0uZm9ybXRhYmxlTm9EZXNjIHRkLmRlc2NyaXB0aW9uIHsKLSAgICB3aWR0aDogMCU7CisucGVuZGluZ0VudHJ5Qm94IHsKKyAgICBiYWNrZ3JvdW5kOiAjZmZjY2NjOworICAgIGJvcmRlcjogMXB4IGdyYXkgc29saWQ7CiB9CiAKLWRpdi5yb3cgewotICAgIHBhZGRpbmc6IDJweDsKLX0KLWRpdi5mb3Jtcm93IHsKLSAgICBmbG9hdDogbGVmdDsKLSAgICB3aWR0aDogODAlOwotfQotbGFiZWwuZm9ybXJvdyB7Ci0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gICAgd2lkdGg6IDIwJTsKLSAgICBwYWRkaW5nLXJpZ2h0OiAxZW07Ci19Ci1kaXYuc2lkZWZvcm1yb3cgewotICAgIGZsb2F0OiBsZWZ0OwotICAgIHdpZHRoOiAxMDAlOwotfQotbGFiZWwuc2lkZWZvcm1yb3cgewotICAgIGZsb2F0OiBsZWZ0OwotICAgIHRleHQtYWxpZ246IGxlZnQ7Ci0gICAgd2lkdGg6IDMwJTsKLSAgICBwYWRkaW5nLXJpZ2h0OiAxZW07Ci0gICAgcGFkZGluZy10b3A6IDFlbTsKLSAgICBmb250LXNpemU6IHNtYWxsZXI7Ci19Ci0KLWRpdi55b3VyV2VibG9nQm94IHsKLSAgICBwYWRkaW5nOiA4cHggMHB4IDEwcHggMHB4OwotfQotCi1pbnB1dCNmX29wZW5pZF9pZGVudGlmaWVyIHsKLSAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vLi4vaW1hZ2VzL29wZW5pZC1sb2dvLXNtYWxsLmdpZikgbm8tcmVwZWF0IHNjcm9sbCAwIDUwJTsKLSAgICBwYWRkaW5nLWxlZnQ6MThweDsKLX0KLQotaW5wdXQuZl9vcGVuaWRfaWRlbnRpZmllciB7Ci0gICAgYmFja2dyb3VuZDogdXJsKC4uLy4uL2ltYWdlcy9vcGVuaWQtbG9nby1zbWFsbC5naWYpIG5vLXJlcGVhdCBzY3JvbGwgMCA1MCU7Ci0gICAgcGFkZGluZy1sZWZ0OjE4cHg7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRhYmxlIHN0eWxlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1kaXYudGFibGVuYXYgewotICAgIGZvbnQtc2l6ZTogMTEwJQotfQotdGFibGUucm9sbGVydGFibGUgewotICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ci0gICAgd2lkdGg6IDEwMCU7Ci19Ci10YWJsZS5pbm5lcnRhYmxlIHsKLSAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwotICAgIHdpZHRoOiAxMDAlOwotICAgIG1hcmdpbi1ib3R0b206IDA7Ci19Ci10YWJsZS5yb2xsZXJ0YWJsZSB0aCB7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKLSAgICBmb250LXNpemU6IDExMCU7Ci0gICAgcGFkZGluZzogM3B4OwotfQotdGFibGUucm9sbGVydGFibGUgdGggewotICAgIGNvbG9yOiB3aGl0ZTsKLX0KLXRhYmxlLnJvbGxlcnRhYmxlIHRkLCB0YWJsZS5yb2xsZXJ0YWJsZSB0Ym9keSB0ZCB7Ci0gICAgdmVydGljYWwtYWxpZ246IHRvcDsKLX0KLXRhYmxlLnJvbGxlcnRhYmxlIHRib2R5IHRkIHsKLSAgICBwYWRkaW5nOiAzcHg7Ci19Ci10YWJsZS5pbm5lcnRhYmxlIHRib2R5IHRkIHsKLSAgICBwYWRkaW5nOiAwOwotfQotdGFibGUucm9sbGVydGFibGUgdGQuY2VudGVyIHsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci10YWJsZS5yb2xsZXJ0YWJsZSAuaW5uZXJ0YWJsZSB0ZCB7Ci0JYm9yZGVyOiBub25lOwotfQotdGFibGUuaW5uZXJ0YWJsZSB0ZC52aWV3Ym9keSB7Ci0JcGFkZGluZzogNXB4OwotfQotdGFibGUuaW5uZXJ0YWJsZSB0ciAuYm90IHsKLQltYXJnaW4tYm90dG9tOiA1cHg7Ci19Ci10YWJsZS5pbm5lcnRhYmxlIHRyIC52aWV3Ym9keSAuYm90IHsKLQlwYWRkaW5nLWJvdHRvbTogMTBweDsKLX0KLXRkLmZpZWxkIHNwYW4uZml4ZWRBdHRyIHsKLSAgICBmb250LXN0eWxlOiBpdGFsaWM7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgY29sb3I6IHJlZDsKLX0KLS5yb2xsZXJ0YWJsZV9ldmVuIHRkIHsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwotICAgIGJhY2tncm91bmQ6ICNFRUVFRUU7Ci0gICAgY29sb3I6IGJsYWNrOwotICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci19Ci0ucm9sbGVydGFibGVfb2RkIHRkewotICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7Ci0gICAgYmFja2dyb3VuZDogaW5oZXJpdDsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwotICAgIGNvbG9yOiBibGFjazsKLX0KLS5yb2xsZXJ0YWJsZV9wZW5kaW5nIHRkIHsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOworLmRyYWZ0RW50cnlCb3ggewogICAgIGJhY2tncm91bmQ6ICNmZmZmY2M7Ci0gICAgY29sb3I6IGJsYWNrOwotICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CisgICAgYm9yZGVyOiAxcHggZ3JheSBzb2xpZDsKIH0KLXRkLnJvbGxlcnRhYmxlX2VudHJ5LCBkaXYucm9sbGVydGFibGVfZW50cnkgewotICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7Ci0gICAgYmFja2dyb3VuZDogaW5oZXJpdDsKLSAgICBwYWRkaW5nOiA1cHg7Ci0gICAgdmVydGljYWwtYWxpZ246IHRvcDsKKwordGQucGVuZGluZ2VudHJ5LCB0ci5wZW5kaW5nZW50cnkgeworICAgIGJhY2tncm91bmQ6ICNmZmNjY2M7CiB9Ci10ZC5wcm9wbmFtZSB7Ci0gICAgcGFkZGluZzogMHB4IDBweCAwcHggM2VtOwotICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Cit0ZC5kcmFmdGVudHJ5LCB0ci5kcmFmdGVudHJ5IHsKKyAgICBiYWNrZ3JvdW5kOiAjZmZmZmNjOwogfQotdGFibGUuZWRpdCB0aCB7Ci0gICAgdGV4dC1hbGlnbjogcmlnaHQ7Ci0gICAgcGFkZGluZy1yaWdodDogNXB4OwordGQuc2NoZWR1bGVkZW50cnksIHRyLnNjaGVkdWxlZGVudHJ5IHsKKyAgICBiYWNrZ3JvdW5kOiAjRUVFRUUwOwogfQotdHIuYWN0aW9ucm93IHsKLSAgICBiYWNrZ3JvdW5kOiAjZTVlNWU1OworCisuZW50cnlFZGl0U2lkZWJhckxpbmsgPiBhIHsKKyAgICBmb250LXNpemU6IDEwcHQ7CiB9CisKKy8qIGNvbW1lbnRzICovCisKIHRkLnNwYW1jb21tZW50IHsKICAgICBiYWNrZ3JvdW5kOiAjZmZjY2NjOwogfQpAQCAtMzczLDQwNiArMTU3LDkxIEBACiAgICAgYmFja2dyb3VuZDogI2ZmY2NjYzsKICAgICBib3JkZXI6IDFweCBncmF5IHNvbGlkOwogfQotdGQucGVuZGluZ2VudHJ5LCB0ci5wZW5kaW5nZW50cnkgewotICAgIGJhY2tncm91bmQ6ICNmZmNjY2M7Ci19Ci10ZC5kcmFmdGVudHJ5LCB0ci5kcmFmdGVudHJ5IHsKLSAgICBiYWNrZ3JvdW5kOiAjZmZmZmNjOwotfQotdGQuc2NoZWR1bGVkZW50cnksIHRyLnNjaGVkdWxlZGVudHJ5IHsKLSAgICBiYWNrZ3JvdW5kOiAjRUVFRUUwOwotfQotLmRyYWZ0RW50cnlCb3ggewotICAgIGJhY2tncm91bmQ6ICNmZmZmY2M7Ci0gICAgYm9yZGVyOiAxcHggZ3JheSBzb2xpZDsKLX0KLS5wZW5kaW5nRW50cnlCb3ggewotICAgIGJhY2tncm91bmQ6ICNmZmNjY2M7Ci0gICAgYm9yZGVyOiAxcHggZ3JheSBzb2xpZDsKLX0KLS5zY2hlZHVsZWRFbnRyeUJveCB7Ci0gICAgYmFja2dyb3VuZDogI0VFRUVFMDsKLSAgICBib3JkZXI6IDFweCBncmF5IHNvbGlkOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DYWxlbmRhciBzdHlsZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotZGl2LmFyY2hpdmVDYWxlbmRhciB7Ci0gICAgcG9zaXRpb246IGFic29sdXRlOwotICAgIHRvcDogODBweDsKLSAgICByaWdodDogMjBweDsKLSAgICBmb250LXNpemU6IDExcHg7Ci19Ci0uaENhbGVuZGFyRGF5IHsKLSAgICBib3JkZXItd2lkdGg6IHRoaW47Ci0gICAgZm9udC1zaXplOiAuOWVtOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLS5oQ2FsZW5kYXJEYXlDdXJyZW50IHsKLSAgICBib3JkZXItc3R5bGU6IGRvdHRlZDsKLSAgICBib3JkZXItd2lkdGg6IHRoaW47Ci0gICAgZm9udC1zaXplOiAuOWVtOwotICAgIGZvbnQtd2VpZ2h0OiBib2xkZXI7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotLmhDYWxlbmRhckRheUxpbmtlZCB7Ci0gICAgYm9yZGVyLXdpZHRoOiB0aGluOwotICAgIGZvbnQtc2l6ZTogLjllbTsKLSAgICBmb250LXdlaWdodDogYm9sZGVyOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLS5oQ2FsZW5kYXJEYXlOYW1lUm93IHsKLSAgICBmb250LXNpemU6IC45ZW07Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKLSAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYzsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0uaENhbGVuZGFyRGF5Tm90SW5Nb250aCB7Ci0gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Ci0gICAgY29sb3I6ICNBQUFBQUE7Ci0gICAgZm9udC1zaXplOiAuOWVtOwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLS5oQ2FsZW5kYXJOZXh0UHJldiB7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotLmhDYWxlbmRhck1vbnRoWWVhclJvdyB7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FcnJvciBhbmQgc3RhdHVzIG1lc3NhZ2Ugc3R5bGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS5zdGF0dXNNc2cgewotICAgIGJhY2tncm91bmQ6ICNDQ0ZGQ0M7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgIzAwODAwMDsKLSAgICBjb2xvcjogIzAwMDAwMDsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICBmb250LXNpemU6IC45ZW07Ci0gICAgbWFyZ2luOiAwcHggMHB4IDEwcHggMHB4OwotICAgIHBhZGRpbmc6IDNweDsKLSAgICB3aWR0aDogOTglOwotfQotLmVycm9yIHsKLSAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKLSAgICBjb2xvcjogI0ZGMDAwMDsKLX0KLS53YXJuaW5nIHsKLSAgICBjb2xvcjogI2YwMDsKLSAgICBmb250LXNpemU6IGxhcmdlcjsKLX0KLS5lcnJvcnMsIC5tZXNzYWdlcywgLndhcm5pbmdzIHsKLSAgICBwYWRkaW5nOiA1cHg7Ci0gICAgbWFyZ2luOiAxMHB4IDBweCAxMHB4IDBweDsKLX0KLS5lcnJvcnMgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNmY2M7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgcmVkOwotfQotLm1lc3NhZ2VzIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2ZjOwotICAgIGJvcmRlcjogMXB4IHNvbGlkIGdyZWVuOwotfQotLndhcm5pbmdzIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmNlOwotICAgIGJvcmRlcjogMXB4IHNvbGlkICNmMGMwMDA7Ci19Ci1kaXYubm90aWZpY2F0aW9uIHsKLSAgICBwYWRkaW5nOiAxMHB4OwotICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmZmY2U7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2YwYzAwMDsKLX0KLWRpdi5lcnJvciB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmY2NjYzsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwOwotICAgIGNvbG9yOiAjYWEwMDAwOwotICAgIGZvbnQtc2l6ZTogMC45ZW07Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICBtYXJnaW46IDVweCAxMHB4IDVweCAwcHg7Ci0gICAgcGFkZGluZzogM3B4OwotICAgIHRleHQtYWxpZ246IGxlZnQ7Ci0gICAgdmVydGljYWwtYWxpZ246IGJvdHRvbTsKLX0KLWRpdi5vdXRwdXQgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNlMGUwZTA7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI0NDQ0M5OTsKLSAgICBjb2xvcjogIzAwMDAwMDsKLSAgICBmb250LXNpemU6IDAuOWVtOwotICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Ci0gICAgbWFyZ2luOiA1cHggMTBweCA1cHggMHB4OwotICAgIHBhZGRpbmc6IDNweDsKLSAgICB0ZXh0LWFsaWduOiBsZWZ0OwotICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXdlYmxvZyBlZGl0b3Igc3R5bGVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWRpdi5wcmV2aWV3RW50cnlTdW1tYXJ5IHsKLSAgICBib3JkZXI6IDFweCBzb2xpZCBncmF5OwotICAgIGNsZWFyOiBib3RoOwotICAgIGhlaWdodDogMTJlbTsKLSAgICB3aWR0aDogOTglOwotICAgIHBhZGRpbmc6IDEwcHg7Ci0gICAgb3ZlcmZsb3c6IGF1dG87Ci19Ci1kaXYucHJldmlld0VudHJ5Q29udGVudCB7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgZ3JheTsKLSAgICBjbGVhcjogYm90aDsKLSAgICBoZWlnaHQ6IDIyZW07Ci0gICAgd2lkdGg6IDk4JTsKLSAgICBwYWRkaW5nOiAxMHB4OwotICAgIG92ZXJmbG93OiBhdXRvOwotfQotZGl2LmNlbnRlclRpdGxlIHsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwotICAgIGNvbG9yOiBibGFjazsKLSAgICBmb250LXdlaWdodDogYm9sZGVyOwotICAgIGZvbnQtc2l6ZTogbGFyZ2U7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotZGl2LmNvbnRyb2wgewordGFibGUuaW5uZXJ0YWJsZSB7CisgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICB3aWR0aDogMTAwJTsKLSAgICAvKmhlaWdodDogMi41ZW07IEJ1dHRvbnMgZG9uJ3QgbGluZSB1cCAqLworICAgIG1hcmdpbi1ib3R0b206IDA7CiB9Ci1kaXYuY29udHJvbFRvZ2dsZSB7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgaGVpZ2h0OiAyNXB4OwordGFibGUuaW5uZXJ0YWJsZSB0Ym9keSB0ZCB7CisgICAgcGFkZGluZzogMDsKIH0KLWRpdi52aWV3ZGV0YWlscyB7Ci0gICAgYm9yZGVyOiAxcHggZG90dGVkICNDQ0NDQ0M7Ci0gICAgY29sb3I6ICMwMDAwMDA7Ci0gICAgbWFyZ2luLWxlZnQ6IDVweDsKLSAgICBtYXJnaW4tcmlnaHQ6IDVweDsKLSAgICBwYWRkaW5nOiA1cHggNXB4IDVweCA3cHg7Ci19Ci0uY29udHJvbCBpbnB1dCB7Ci0gICAgbWFyZ2luOiAwLjNlbTsKLX0KLS5jb250cm9sIHNlbGVjdCB7Ci0gICAgbWFyZ2luOiAwLjVlbTsKLX0KLWEuY29udHJvbFRvZ2dsZSB7Ci0gICAgbWFyZ2luOiA1cHg7Cit0YWJsZS5pbm5lcnRhYmxlIHRkLnZpZXdib2R5IHsKICAgICBwYWRkaW5nOiA1cHg7Ci0gICAgY29sb3I6IGJsYWNrOwotICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKIH0KLWEuY29udHJvbFRvZ2dsZTpsaW5rIHsKLSAgICBtYXJnaW46IDVweDsKLSAgICBwYWRkaW5nOiA1cHg7Ci0gICAgY29sb3I6IGJsYWNrOwotICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLX0KLWEuY29udHJvbFRvZ2dsZTp2aXNpdGVkIHsKLSAgICBtYXJnaW46IDVweDsKLSAgICBwYWRkaW5nOiA1cHg7Ci0gICAgY29sb3I6IGJsYWNrOwotICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwotICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKLX0KLWEuY29udHJvbFRvZ2dsZTpob3ZlciB7Ci0gICAgbWFyZ2luOiA1cHg7Ci0gICAgcGFkZGluZzogNXB4OwotICAgIGNvbG9yOiBibGFjazsKLSAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKLSAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTWlzYyBzdHlsZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotZGl2Lk5ONCB7Ci0gICAgZGlzcGxheTogbm9uZTsKLX0KLWRpdi5yTmF2aWdhdGlvbkJhciB7Ci0gICAgbWFyZ2luLWJvdHRvbTogMjBweDsKLSAgICBtYXJnaW4tcmlnaHQ6IDEwcHg7Ci19Ci0uZW50cnlEYXRlIHsKLSAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKLSAgICBjb2xvcjogIzk4OTg5ODsKLSAgICBmb250LXN0eWxlOiBpdGFsaWM7Ci19Ci0uY29tbWVudFRpdGxlIHsKLSAgICBiYWNrZ3JvdW5kOiAjRkZGRkREOwotICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDA7Ci0gICAgcGFkZGluZzogM3B4OwotICAgIG1hcmdpbjogMHB4IDVweCAxMHB4IDBweDsKLSAgICBjb2xvcjogIzAwMDAwMDsKLSAgICBmb250LXNpemU6IC45ZW07Ci0gICAgd2lkdGg6IDk4JTsKLX0KLS52ZXJzaW9uIHsKLSAgICBmb250LXNpemU6IHgtc21hbGw7Ci0gICAgY29sb3I6ICM4MDgwODA7Ci19Ci0ucGFnZSB7Ci0gICAgdmlzaWJpbGl0eTogaGlkZGVuOwotICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKLSAgICBmbG9hdDogbGVmdDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLSAgICBib3JkZXI6IDFweCBncmF5IHNvbGlkOwotICAgIHBhZGRpbmc6IDEwcHg7Ci0gICAgd2lkdGg6IDgwJTsKLSAgICBoZWlnaHQ6IDQwZW07Ci19Ci0udGFiIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLSAgICBib3JkZXItdG9wOiAxcHggZ3JheSBzb2xpZDsKLSAgICBib3JkZXItbGVmdDogMXB4IGdyYXkgc29saWQ7Ci0gICAgYm9yZGVyLXJpZ2h0OiAxcHggZ3JheSBzb2xpZDsKLSAgICBmb250LWZhbWlseTogdmVyZGFuYTsKLSAgICBwYWRkaW5nOiA1cHg7Ci0gICAgbWFyZ2luOiAycHg7Ci19Ci0KLXAud2Vic2l0ZURlc2NyaXB0aW9uIHsKLSAgICBmb250LXN0eWxlOiBpdGFsaWM7Ci0gICAgZm9udC1zaXplOiAxMXB4OwotfQotLnZlcnNpb24gewotICAgIGZvbnQtc2l6ZTogc21hbGw7Ci0gICAgY29sb3I6IGdyYXk7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotc3BhbiAuZGV0YWlscyB7Ci0gICAgZm9udC1zaXplOiBpbmhlcml0OwotfQotZGl2LmhlbHB0ZXh0IHsKLSAgICBiYWNrZ3JvdW5kOiAjZjBmMGYwOwotICAgIGJvcmRlcjogMXB4ICNjMGMwYzAgc29saWQ7Ci0gICAgcGFkZGluZzogMnB4OwotICAgIG1hcmdpbjogMzBweCAxMHB4IDEwcHggMHB4OwotICAgIHdpZHRoOiA3NSU7Ci19Ci0ucGFkbGVmdCB7Ci0gICAgcGFkZGluZy1sZWZ0OiA4cHg7Ci19Ci0jbG9nbyB7Ci0gICAgcGFkZGluZzogMTVweCAwcHggMTBweCAxNXB4OwotfQotLyogVHJhbnNwYXJlbnQgUE5HIGZpeCBmb3IgSUUsIHRoYW5rcyB0byBLZW5uZXRoIE0uIEtvbGFubyAqLwotI2xvZ29zaGFkb3cgewotICAgIHRvcDogMTVweDsKLSAgICBsZWZ0OiAxNXB4OwotICAgIHdpZHRoOiAxNjVweDsKLSAgICBoZWlnaHQ6IDUwcHg7Ci0gICAgX2JhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2ltYWdlcy9sb2dvLXNoYWRvdy5wbmcpOwotfQotI2xvZ29iYWNrZ3JvdW5kIHsKLSAgICB3aWR0aDogMTU5cHg7Ci0gICAgaGVpZ2h0OiA0NHB4OwotfQotI2xvZ29pbWFnZSB7Ci0gICAgd2lkdGg6IDE1OXB4OwotICAgIGhlaWdodDogNDRweDsKLSAgICBkaXNwbGF5OiBibG9jazsKLSAgICBjdXJzb3I6IHBvaW50ZXI7IC8qIE1ha2UgSUUgc2hvdyBjb3JyZWN0IGN1cnNvciBmb3IgbGluayAqLwotICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWFnZXMvdHJhbnNwYXJlbnQtbG9nby5wbmcpOwotfQotCi0vKiBtYWluIG1lbnUgcGFnZSAqLwotCi1zcGFuLm1tX3dlYmxvZ19uYW1lIHsKLSAgICBmb250LXNpemU6IGxhcmdlOwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotdGFibGUubW1fdGFibGUgewotICAgIG1hcmdpbi10b3A6IDhweDsKLX0KLXRkLm1tX3RhYmxlX2FjdGlvbnMgewotICAgIHBhZGRpbmctbGVmdDogNHB4OwotfQotdGQubW1fc3VidGFibGVfbGFiZWwgewotICAgIHdpZHRoOiAxMDVweDsKLSAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi0KLS8qIG1lZGlhIGZpbGUgcGFnZXMgKi8KLQotLm1lZGlhRmlsZVNlYXJjaFJlc3VsdCB7Ci0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgbWFyZ2luOiAxMHB4IDEwcHggMTBweCAxMHB4OwotfQotCi1kaXYubWVkaWFGaWxlVGh1bWJuYWlsIHsKLSAgIGZsb2F0OnJpZ2h0OwotICAgd2lkdGg6MTIwcHg7Ci0gICBoZWlnaHQ6MTIwcHg7Ci0gICBib3JkZXI6MXB4IHNvbGlkIGdyZXk7Ci0gICBtYXJnaW46IDEwcHgKLX0KLQotCi0vKiB3ZWJsb2cgZW50cnkgZm9ybSBwYWdlICovCi0KLXNwYW4uZW50cnlFZGl0U2lkZWJhckxpbmsgewotICAgIGZvbnQtc2l6ZTogc21hbGxlcjsKLX0KLS5lbnRyeUVkaXRUYWJsZSB0ZCB7Ci0gICAgcGFkZGluZzogMHB4IDBweCA4cHggMHB4OwotfQotdGQuZW50cnlFZGl0Rm9ybUxhYmVsIHsKLSAgICBwYWRkaW5nLXJpZ2h0OiAxNXB4OwotICAgIHBhZGRpbmctbGVmdDogMnB4OwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi1wcmUgewotICAgIHBhZGRpbmc6IDVweCA1cHggNXB4IDdweDsKLSAgICBiYWNrZ3JvdW5kOiAjZjVmNWY1OwotICAgIGNvbG9yOiAjMDAwOwotICAgIGJvcmRlcjogMXB4IGRvdHRlZCAjY2NjOwotICAgIG1hcmdpbi1sZWZ0OiA1cHg7Ci0gICAgbWFyZ2luLXJpZ2h0OiA1cHg7Ci0gICAgb3ZlcmZsb3c6IGF1dG87Ci19Ci0KLS50b3BsYWJlbCB7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgbWFyZ2luOiAxMHB4IDBweCAwcHggMHB4OwotfQotLm1pc2NDb250cm9sIHsKK3RhYmxlLmlubmVydGFibGUgdHIgLmJvdCB7CiAgICAgbWFyZ2luLWJvdHRvbTogNXB4OwogfQotCi0uY2hvb3NlciB7Ci0gICAgbWFyZ2luOiAxMHB4OwotICAgIHBhZGRpbmc6IDEwcHggMjBweCAyMHB4IDIwcHg7Ci0gICAgYmFja2dyb3VuZDogI2VlZTsKLSAgICBib3JkZXI6IDFweCBzb2xpZCAjZ3JheTsKLSAgICBoZWlnaHQ6IDhlbTsKK3RhYmxlLmlubmVydGFibGUgdHIgLnZpZXdib2R5IC5ib3QgeworICAgIHBhZGRpbmctYm90dG9tOiAxMHB4OwogfQogCi1kaXYuc2VsZWN0ZWRDaG9vc2VyIHsKLSAgICBiYWNrZ3JvdW5kOiAjQ0NGRkNDOwotICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDgwMDA7CisvKiBjYXRlZ29yaWVzICovCisKKyNmZWVkYmFjay1hcmVhIHsKKyAgICBmbG9hdDogbGVmdDsKIH0KIAotZGl2LmNob29zZXIgaDIgewotICAgIGxldHRlci1zcGFjaW5nOiAwLjBlbTsKKy8qIHNpZ24taW4gKi8KKworYm9keSB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiB9CiAKLWRpdi5vcHRpb25lciB7Ci0gICAgbWFyZ2luOiAwcHggMzBweCAzMHB4IDMwcHg7CisuZm9ybS1zaWduaW4geworICAgIG1heC13aWR0aDogMzMwcHg7CisgICAgcGFkZGluZzogMTVweDsKKyAgICBtYXJnaW46IDAgYXV0bzsKK30KKy5mb3JtLXNpZ25pbiAuZm9ybS1zaWduaW4taGVhZGluZywKKy5mb3JtLXNpZ25pbiAuY2hlY2tib3ggeworICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Cit9CisuZm9ybS1zaWduaW4gLmNoZWNrYm94IHsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorLmZvcm0tc2lnbmluIC5mb3JtLWNvbnRyb2wgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBoZWlnaHQ6IGF1dG87CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDsKKyAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIHBhZGRpbmc6IDEwcHg7CisgICAgZm9udC1zaXplOiAxNnB4OworfQorLmZvcm0tc2lnbmluIC5mb3JtLWNvbnRyb2w6Zm9jdXMgeworICAgIHotaW5kZXg6IDI7Cit9CisuZm9ybS1zaWduaW4gaW5wdXRbdHlwZT0iZW1haWwiXSB7CisgICAgbWFyZ2luLWJvdHRvbTogLTFweDsKKyAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDsKKyAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOworfQorLmZvcm0tc2lnbmluIGlucHV0W3R5cGU9InBhc3N3b3JkIl0geworICAgIG1hcmdpbi1ib3R0b206IDEwcHg7CisgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKKyAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKIH0KIAorLyogU3RpY2t5IGZvb3RlciBzdHlsZXMgKi8KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogTWVkaWEgRmlsZSBzdHlsZXMgKi8KK2h0bWwgeworICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKKyAgICBtaW4taGVpZ2h0OiAxMDAlOworfQorYm9keSB7CisgICAgbWFyZ2luLWJvdHRvbTogNjBweDsKK30KKy5mb290ZXIgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBib3R0b206IDA7CisgICAgd2lkdGg6IDEwMCU7CisgICAgaGVpZ2h0OiA2MHB4OworICAgIGJhY2tncm91bmQtY29sb3I6ICNmNWY1ZjU7CisgICAgcGFkZGluZzogMS41ZW07CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisvKiBtZWRpYSBmaWxlcyAqLwogCiAuYWxpZ24taW1hZ2VzIHsKICAgICBkaXNwbGF5OmlubGluZTsKQEAgLTc4MiwyNiArMjUxLDkxIEBACiAgICAgd2lkdGg6MTQwcHg7CiAgICAgaGVpZ2h0OjE0MHB4OwogICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOwogfQogCi0uZGlyLWltYWdlIHsKLSAgICBjdXJzb3I6cG9pbnRlcjsKLSAgICB3aWR0aDoyNXB4OwotICAgIGhlaWdodDoyNXB4OwotICAgIHBhZGRpbmc6NDBweCA0NXB4OworI3NvcnRCeU1lbnUgeworICAgIHdpZHRoOiAxNWVtOwogfQogCi0vKioqIEZvciBjb250ZXh0IG1lbnUgKioqLwotCi0jbWVudSBoMSB7Ci0gICAgbGluZS1oZWlnaHQ6MTIwJTsKLSAgICBtYXJnaW46MTVweCAwcHg7Ci0gICAgcGFkZGluZy1sZWZ0OiAwLjVlbTsKKyN2aWV3RGlyZWN0b3J5TWVudSB7CisgICAgd2lkdGg6IDE1ZW07CiB9CiAKLS8qKiogUmlnaHQgY29udHJvbCBmbG9hdHMgYWthIGNsZWFyZml4ICoqKi8KLS5jbGVhcmZpeDphZnRlciB7Ci0gIGNvbnRlbnQ6ICIiOwotICBkaXNwbGF5OiB0YWJsZTsKLSAgY2xlYXI6IGJvdGg7CisjbW92ZVRhcmdldE1lbnUgeworICAgIHdpZHRoOiAxNWVtOwogfQorCisubWVkaWFPYmplY3QgeworICAgIHdpZHRoOjEyMHB4OworICAgIGhlaWdodDoxMjBweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cit9CisKKy5tZWRpYU9iamVjdEluZm8geworICAgIGNsZWFyOmxlZnQ7CisgICAgd2lkdGg6MTMwcHg7CisgICAgbWFyZ2luLWxlZnQ6NXB4OworICAgIG1hcmdpbi10b3A6M3B4OworICAgIGZvbnQtc2l6ZToxMXB4OworfQorCitzcGFuLmdseXBoaWNvbi1maWxlIHsKKyAgICBmb250LXNpemU6IDZlbTsKK30KKworLmhpZ2hsaWdodCB7CisgICAgYm9yZGVyOiAzcHggc29saWQgI2FhYTsKK30KKworc3Bhbi5idXR0b24geworICAgIGhlaWdodDoxNXB4OworICAgIHdpZHRoOjE1cHg7CisgICAgZmxvYXQ6cmlnaHQ7Cit9CisKKy5zb3J0QnlNZW51LCAudmlld0RpcmVjdG9yeU1lbnUgeworICAgIGRpc3BsYXk6IGlubGluZTsKK30KKworI2ltYWdlR3JpZCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgb3ZlcmZsb3c6IGF1dG87CisgICAgbWFyZ2luOiAxZW0gMCAxZW0gMDsKK30KKworI2ltYWdlR3JpZCA+IGRpdiA+IHVsIHsKKyAgICBwYWRkaW5nLWxlZnQ6MDsKK30KKworZGl2LmltYWdlLWNvbnRyb2xzLAorZGl2LmltYWdlLWNvbnRyb2xzIGRpdiwKK2Rpdi5pbWFnZS1jb250cm9scyBzcGFuLAorZGl2LmltYWdlLWNvbnRyb2xzIHNlbGVjdCwKK2Rpdi5pbWFnZS1jb250cm9scyBpbnB1dCB7CisgICAgZGlzcGxheTogaW5saW5lOworfQorCisKKy8qIHRoZW1lIGVkaXQgKi8KKworLnJvdy1kaXNwbGF5LWZsZXggeworICAgIGRpc3BsYXk6IGZsZXg7Cit9Cisucm93LWRpc3BsYXktZmxleCA+IFtjbGFzcyo9J2NvbC0nXSB7CisgICAgZGlzcGxheTogZmxleDsKKyAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOworfQorCisjc2hhcmVkQ2hvb3NlciwgI2N1c3RvbUNob29zZXIgeworICAgIGhlaWdodDogMTNlbTsKK30KKworLyogbWVtYmVycyAqLworCit0ci5yb2xsZXJ0YWJsZV9wZW5kaW5nIHsKKyAgICBiYWNrZ3JvdW5kOiAjZmZmZmNjOworfQorCisKKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkveXVpMy9jc3NiYXNlL2Nzc2Jhc2UtbWluLmNzcyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL3l1aTMvY3NzYmFzZS9jc3NiYXNlLW1pbi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1Mjc4NDQuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkveXVpMy9jc3NiYXNlL2Nzc2Jhc2UtbWluLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotLyoKLVlVSSAzLjE3LjIgKGJ1aWxkIDljM2M3OGUpCi1Db3B5cmlnaHQgMjAxNCBZYWhvbyEgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotTGljZW5zZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlLgotaHR0cDovL3l1aWxpYnJhcnkuY29tL2xpY2Vuc2UvCi0qLwotCi1oMXtmb250LXNpemU6MTM4LjUlfWgye2ZvbnQtc2l6ZToxMjMuMSV9aDN7Zm9udC1zaXplOjEwOCV9aDEsaDIsaDN7bWFyZ2luOjFlbSAwfWgxLGgyLGgzLGg0LGg1LGg2LHN0cm9uZ3tmb250LXdlaWdodDpib2xkfWFiYnIsYWNyb255bXtib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgIzAwMDtjdXJzb3I6aGVscH1lbXtmb250LXN0eWxlOml0YWxpY31ibG9ja3F1b3RlLHVsLG9sLGRse21hcmdpbjoxZW19b2wsdWwsZGx7bWFyZ2luLWxlZnQ6MmVtfW9se2xpc3Qtc3R5bGU6ZGVjaW1hbCBvdXRzaWRlfXVse2xpc3Qtc3R5bGU6ZGlzYyBvdXRzaWRlfWRke21hcmdpbi1sZWZ0OjFlbX10aCx0ZHtib3JkZXI6MXB4IHNvbGlkICMwMDA7cGFkZGluZzouNWVtfXRoe2ZvbnQtd2VpZ2h0OmJvbGQ7dGV4dC1hbGlnbjpjZW50ZXJ9Y2FwdGlvbnttYXJnaW4tYm90dG9tOi41ZW07dGV4dC1hbGlnbjpjZW50ZXJ9cCxmaWVsZHNldCx0YWJsZSxwcmV7bWFyZ2luLWJvdHRvbToxZW19aW5wdXRbdHlwZT10ZXh0XSxpbnB1dFt0eXBlPXBhc3N3b3JkXSx0ZXh0YXJlYXt3aWR0aDoxMi4yNWVtOyp3aWR0aDoxMS45ZW19I3l1aTMtY3NzLXN0YW1wLmNzc2Jhc2V7ZGlzcGxheTpub25lfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkveXVpMy9jc3NiYXNlL2Nzc2Jhc2UuY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkveXVpMy9jc3NiYXNlL2Nzc2Jhc2UuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmU1NjZhLi4wMDAwMDAwCi0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL3l1aTMvY3NzYmFzZS9jc3NiYXNlLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qCi1ZVUkgMy4xNy4yIChidWlsZCA5YzNjNzhlKQotQ29weXJpZ2h0IDIwMTQgWWFob28hIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLUxpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgTGljZW5zZS4KLWh0dHA6Ly95dWlsaWJyYXJ5LmNvbS9saWNlbnNlLwotKi8KLQotLyogYmFzZS5jc3MsIHBhcnQgb2YgWVVJJ3MgQ1NTIEZvdW5kYXRpb24gKi8KLWgxIHsKLQkvKjE4cHggdmlhIFlVSSBGb250cyBDU1MgZm91bmRhdGlvbiovCi0JZm9udC1zaXplOjEzOC41JTsgIAotfQotaDIgewotCS8qMTZweCB2aWEgWVVJIEZvbnRzIENTUyBmb3VuZGF0aW9uKi8KLQlmb250LXNpemU6MTIzLjElOyAKLX0KLWgzIHsKLQkvKjE0cHggdmlhIFlVSSBGb250cyBDU1MgZm91bmRhdGlvbiovCi0JZm9udC1zaXplOjEwOCU7ICAKLX0KLWgxLGgyLGgzIHsKLQkvKiB0b3AgJiBib3R0b20gbWFyZ2luIGJhc2VkIG9uIGZvbnQgc2l6ZSAqLwotCW1hcmdpbjoxZW0gMDsKLX0KLWgxLGgyLGgzLGg0LGg1LGg2LHN0cm9uZyB7Ci0JLypicmluZ2luZyBib2xkbmVzcyBiYWNrIHRvIGhlYWRlcnMgYW5kIHRoZSBzdHJvbmcgZWxlbWVudCovCi0JZm9udC13ZWlnaHQ6Ym9sZDsgCi19Ci1hYmJyLGFjcm9ueW0gewotCS8qaW5kaWNhdGluZyB0byB1c2VycyB0aGF0IG1vcmUgaW5mbyBpcyBhdmFpbGFibGUgKi8KLQlib3JkZXItYm90dG9tOjFweCBkb3R0ZWQgIzAwMDsKLQljdXJzb3I6aGVscDsKLX0gCi1lbSB7Ci0JLypicmluZ2luZyBpdGFsaWNzIGJhY2sgdG8gdGhlIGVtIGVsZW1lbnQqLwotCWZvbnQtc3R5bGU6aXRhbGljOwotfQotYmxvY2txdW90ZSx1bCxvbCxkbCB7Ci0JLypnaXZpbmcgYmxvY2txdW90ZXMgYW5kIGxpc3RzIHJvb20gdG8gYnJlYXRoKi8KLQltYXJnaW46MWVtOwotfQotb2wsdWwsZGwgewotCS8qYnJpbmdpbmcgbGlzdHMgb24gdG8gdGhlIHBhZ2Ugd2l0aCBicmVhdGhpbmcgcm9vbSAqLwotCW1hcmdpbi1sZWZ0OjJlbTsKLX0KLW9sIHsKLQkvKmdpdmluZyBPTCdzIExJcyBnZW5lcmF0ZWQgbnVtYmVycyovCi0JbGlzdC1zdHlsZTogZGVjaW1hbCBvdXRzaWRlOwkKLX0KLXVsIHsKLQkvKmdpdmluZyBVTCdzIExJcyBnZW5lcmF0ZWQgZGlzYyBtYXJrZXJzKi8KLQlsaXN0LXN0eWxlOiBkaXNjIG91dHNpZGU7Ci19Ci1kZCB7Ci0JLypwcm92aWRpbmcgc3BhY2luZyBmb3IgZGVmaW5pdGlvbiB0ZXJtcyovCi0JbWFyZ2luLWxlZnQ6MWVtOwotfQotdGgsdGQgewotCS8qYm9yZGVycyBhbmQgcGFkZGluZyB0byBtYWtlIHRoZSB0YWJsZSByZWFkYWJsZSovCi0JYm9yZGVyOjFweCBzb2xpZCAjMDAwOwotCXBhZGRpbmc6LjVlbTsKLX0KLXRoIHsKLQkvKmRpc3Rpbmd1aXNoaW5nIHRhYmxlIGhlYWRlcnMgZnJvbSBkYXRhIGNlbGxzKi8KLQlmb250LXdlaWdodDpib2xkOwotCXRleHQtYWxpZ246Y2VudGVyOwotfQotY2FwdGlvbiB7Ci0JLypjb29yZGluYXRlZCBtYXJnaW4gdG8gbWF0Y2ggY2VsbCdzIHBhZGRpbmcqLwotCW1hcmdpbi1ib3R0b206LjVlbTsKLQkvKmNlbnRlcmVkIHNvIGl0IGRvZXNuJ3QgYmxlbmQgaW4gdG8gb3RoZXIgY29udGVudCovCi0JdGV4dC1hbGlnbjpjZW50ZXI7Ci19Ci1wLGZpZWxkc2V0LHRhYmxlLHByZSB7Ci0JLypzbyB0aGluZ3MgZG9uJ3QgcnVuIGludG8gZWFjaCBvdGhlciovCi0JbWFyZ2luLWJvdHRvbToxZW07Ci19Ci0vKiBzZXR0aW5nIGEgY29uc2lzdGVudCB3aWR0aCwgMTYwcHg7IAotICAgY29udHJvbCBvZiB0eXBlPWZpbGUgc3RpbGwgbm90IHBvc3NpYmxlCi0gICAqd2lkdGggaXMgZm9yIGllNyAobm8gaWU2IGZhbGxiYWNrKSAqLwotaW5wdXRbdHlwZT10ZXh0XSxpbnB1dFt0eXBlPXBhc3N3b3JkXSx0ZXh0YXJlYXt3aWR0aDoxMi4yNWVtOyp3aWR0aDoxMS45ZW07fQotCi0vKiBZVUkgQ1NTIERldGVjdGlvbiBTdGFtcCAqLwotI3l1aTMtY3NzLXN0YW1wLmNzc2Jhc2UgeyBkaXNwbGF5OiBub25lOyB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS95dWkzL2Nzc2ZvbnRzL2Nzc2ZvbnRzLW1pbi5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS95dWkzL2Nzc2ZvbnRzL2Nzc2ZvbnRzLW1pbi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmZmViYzcuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkveXVpMy9jc3Nmb250cy9jc3Nmb250cy1taW4uY3NzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0vKgotWVVJIDMuMTcuMiAoYnVpbGQgOWMzYzc4ZSkKLUNvcHlyaWdodCAyMDE0IFlhaG9vISBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi1MaWNlbnNlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2UuCi1odHRwOi8veXVpbGlicmFyeS5jb20vbGljZW5zZS8KLSovCi0KLWJvZHl7Zm9udDoxM3B4LzEuMjMxIGFyaWFsLGhlbHZldGljYSxjbGVhbixzYW5zLXNlcmlmOypmb250LXNpemU6c21hbGw7KmZvbnQ6eC1zbWFsbH1zZWxlY3QsaW5wdXQsYnV0dG9uLHRleHRhcmVhe2ZvbnQ6OTklIGFyaWFsLGhlbHZldGljYSxjbGVhbixzYW5zLXNlcmlmfXRhYmxle2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQ6MTAwJX1wcmUsY29kZSxrYmQsc2FtcCx0dHtmb250LWZhbWlseTptb25vc3BhY2U7KmZvbnQtc2l6ZToxMDglO2xpbmUtaGVpZ2h0OjEwMCV9I3l1aTMtY3NzLXN0YW1wLmNzc2ZvbnRze2Rpc3BsYXk6bm9uZX0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvcm9sbGVyLXVpL3l1aTMvY3NzZm9udHMvY3NzZm9udHMuY3NzIGIvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkveXVpMy9jc3Nmb250cy9jc3Nmb250cy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhOTJiNDIuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkveXVpMy9jc3Nmb250cy9jc3Nmb250cy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotWVVJIDMuMTcuMiAoYnVpbGQgOWMzYzc4ZSkKLUNvcHlyaWdodCAyMDE0IFlhaG9vISBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi1MaWNlbnNlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2UuCi1odHRwOi8veXVpbGlicmFyeS5jb20vbGljZW5zZS8KLSovCi0KLS8qKgotICogUGVyY2VudHMgY291bGQgd29yayBmb3IgSUUsIGJ1dCBmb3IgYmFja0NvbXBhdCBwdXJwb3Nlcywgd2UgYXJlIHVzaW5nIGtleXdvcmRzLgotICogeC1zbWFsbCBpcyBmb3IgSUU2LzcgcXVpcmtzIG1vZGUuCi0gKi8KLWJvZHkgewotCWZvbnQ6MTNweC8xLjIzMSBhcmlhbCxoZWx2ZXRpY2EsY2xlYW4sc2Fucy1zZXJpZjsKLQkqZm9udC1zaXplOnNtYWxsOyAvKiBmb3IgSUUgKi8KLQkqZm9udDp4LXNtYWxsOyAvKiBmb3IgSUUgaW4gcXVpcmtzIG1vZGUgKi8KLX0KLQotLyoqCi0gKiBOdWRnZSBkb3duIHRvIGdldCB0byAxM3B4IGVxdWl2YWxlbnQgZm9yIHRoZXNlIGZvcm0gZWxlbWVudHMKLSAqLyAKLXNlbGVjdCwKLWlucHV0LAotYnV0dG9uLAotdGV4dGFyZWEgewotCWZvbnQ6OTklIGFyaWFsLGhlbHZldGljYSxjbGVhbixzYW5zLXNlcmlmOwotfQotCi0vKioKLSAqIFRvIGhlbHAgdGFibGVzIHJlbWVtYmVyIHRvIGluaGVyaXQKLSAqLwotdGFibGUgewotCWZvbnQtc2l6ZTppbmhlcml0OwotCWZvbnQ6MTAwJTsKLX0KLQotLyoqCi0gKiBCdW1wIHVwIElFIHRvIGdldCB0byAxM3B4IGVxdWl2YWxlbnQgZm9yIHRoZXNlIGZpeGVkLXdpZHRoIGVsZW1lbnRzCi0gKi8KLXByZSwKLWNvZGUsCi1rYmQsCi1zYW1wLAotdHQgewotCWZvbnQtZmFtaWx5Om1vbm9zcGFjZTsKLQkqZm9udC1zaXplOjEwOCU7Ci0JbGluZS1oZWlnaHQ6MTAwJTsKLX0KLS8qIFlVSSBDU1MgRGV0ZWN0aW9uIFN0YW1wICovCi0jeXVpMy1jc3Mtc3RhbXAuY3NzZm9udHMgeyBkaXNwbGF5OiBub25lOyB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS95dWkzL2Nzc3Jlc2V0L2Nzc3Jlc2V0LW1pbi5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS95dWkzL2Nzc3Jlc2V0L2Nzc3Jlc2V0LW1pbi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMGZhZmQuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkveXVpMy9jc3NyZXNldC9jc3NyZXNldC1taW4uY3NzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0vKgotWVVJIDMuMTcuMiAoYnVpbGQgOWMzYzc4ZSkKLUNvcHlyaWdodCAyMDE0IFlhaG9vISBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi1MaWNlbnNlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2UuCi1odHRwOi8veXVpbGlicmFyeS5jb20vbGljZW5zZS8KLSovCi0KLWh0bWx7Y29sb3I6IzAwMDtiYWNrZ3JvdW5kOiNGRkZ9Ym9keSxkaXYsZGwsZHQsZGQsdWwsb2wsbGksaDEsaDIsaDMsaDQsaDUsaDYscHJlLGNvZGUsZm9ybSxmaWVsZHNldCxsZWdlbmQsaW5wdXQsdGV4dGFyZWEscCxibG9ja3F1b3RlLHRoLHRke21hcmdpbjowO3BhZGRpbmc6MH10YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH1maWVsZHNldCxpbWd7Ym9yZGVyOjB9YWRkcmVzcyxjYXB0aW9uLGNpdGUsY29kZSxkZm4sZW0sc3Ryb25nLHRoLHZhcntmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWx9b2wsdWx7bGlzdC1zdHlsZTpub25lfWNhcHRpb24sdGh7dGV4dC1hbGlnbjpsZWZ0fWgxLGgyLGgzLGg0LGg1LGg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0Om5vcm1hbH1xOmJlZm9yZSxxOmFmdGVye2NvbnRlbnQ6Jyd9YWJicixhY3Jvbnlte2JvcmRlcjowO2ZvbnQtdmFyaWFudDpub3JtYWx9c3Vwe3ZlcnRpY2FsLWFsaWduOnRleHQtdG9wfXN1Ynt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbX1pbnB1dCx0ZXh0YXJlYSxzZWxlY3R7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0Oypmb250LXNpemU6MTAwJX1sZWdlbmR7Y29sb3I6IzAwMH0jeXVpMy1jc3Mtc3RhbXAuY3NzcmVzZXR7ZGlzcGxheTpub25lfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC9yb2xsZXItdWkveXVpMy9jc3NyZXNldC9jc3NyZXNldC5jc3MgYi9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS95dWkzL2Nzc3Jlc2V0L2Nzc3Jlc2V0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRmOWNiNS4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3JvbGxlci11aS95dWkzL2Nzc3Jlc2V0L2Nzc3Jlc2V0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotWVVJIDMuMTcuMiAoYnVpbGQgOWMzYzc4ZSkKLUNvcHlyaWdodCAyMDE0IFlhaG9vISBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi1MaWNlbnNlZCB1bmRlciB0aGUgQlNEIExpY2Vuc2UuCi1odHRwOi8veXVpbGlicmFyeS5jb20vbGljZW5zZS8KLSovCi0KLS8qCi0JVE9ETyB3aWxsIG5lZWQgdG8gcmVtb3ZlIHNldHRpbmdzIG9uIEhUTUwgc2luY2Ugd2UgY2FuJ3QgbmFtZXNwYWNlIGl0LgotCVRPRE8gd2l0aCB0aGUgcHJlZml4LCBzaG91bGQgSSBncm91cCBieSBzZWxlY3RvciBvciBwcm9wZXJ0eSBmb3Igd2VpZ2h0IHNhdmluZ3M/Ci0qLwotaHRtbHsKLQljb2xvcjojMDAwOwotCWJhY2tncm91bmQ6I0ZGRjsKLX0KLS8qCi0JVE9ETyByZW1vdmUgc2V0dGluZ3Mgb24gQk9EWSBzaW5jZSB3ZSBjYW4ndCBuYW1lc3BhY2UgaXQuCi0qLwotLyoKLQlUT0RPIHRlc3QgcHV0dGluZyBhIGNsYXNzIG9uIEhFQUQuCi0JCS0gRmFpbHMgb24gRkYuIAotKi8KLWJvZHksCi1kaXYsCi1kbCwKLWR0LAotZGQsCi11bCwKLW9sLAotbGksCi1oMSwKLWgyLAotaDMsCi1oNCwKLWg1LAotaDYsCi1wcmUsCi1jb2RlLAotZm9ybSwKLWZpZWxkc2V0LAotbGVnZW5kLAotaW5wdXQsCi10ZXh0YXJlYSwKLXAsCi1ibG9ja3F1b3RlLAotdGgsCi10ZCB7Ci0JbWFyZ2luOjA7Ci0JcGFkZGluZzowOwotfQotdGFibGUgewotCWJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTsKLQlib3JkZXItc3BhY2luZzowOwotfQotZmllbGRzZXQsCi1pbWcgewotCWJvcmRlcjowOwotfQotLyoKLQlUT0RPIHRoaW5rIGFib3V0IGhhbmxkaW5nIGluaGVyaXRlbmNlIGRpZmZlcmVudGx5LCBtYXliZSBsZXR0aW5nIElFNiBmYWlsIGEgYml0Li4uCi0qLwotYWRkcmVzcywKLWNhcHRpb24sCi1jaXRlLAotY29kZSwKLWRmbiwKLWVtLAotc3Ryb25nLAotdGgsCi12YXIgewotCWZvbnQtc3R5bGU6bm9ybWFsOwotCWZvbnQtd2VpZ2h0Om5vcm1hbDsKLX0KLQotb2wsCi11bCB7Ci0JbGlzdC1zdHlsZTpub25lOwotfQotCi1jYXB0aW9uLAotdGggewotCXRleHQtYWxpZ246bGVmdDsKLX0KLWgxLAotaDIsCi1oMywKLWg0LAotaDUsCi1oNiB7Ci0JZm9udC1zaXplOjEwMCU7Ci0JZm9udC13ZWlnaHQ6bm9ybWFsOwotfQotcTpiZWZvcmUsCi1xOmFmdGVyIHsKLQljb250ZW50OicnOwotfQotYWJiciwKLWFjcm9ueW0gewotCWJvcmRlcjowOwotCWZvbnQtdmFyaWFudDpub3JtYWw7Ci19Ci0vKiB0byBwcmVzZXJ2ZSBsaW5lLWhlaWdodCBhbmQgc2VsZWN0b3IgYXBwZWFyYW5jZSAqLwotc3VwIHsKLQl2ZXJ0aWNhbC1hbGlnbjp0ZXh0LXRvcDsKLX0KLXN1YiB7Ci0JdmVydGljYWwtYWxpZ246dGV4dC1ib3R0b207Ci19Ci1pbnB1dCwKLXRleHRhcmVhLAotc2VsZWN0IHsKLQlmb250LWZhbWlseTppbmhlcml0OwotCWZvbnQtc2l6ZTppbmhlcml0OwotCWZvbnQtd2VpZ2h0OmluaGVyaXQ7Ci0JKmZvbnQtc2l6ZToxMDAlOyAvKnRvIGVuYWJsZSByZXNpemluZyBmb3IgSUUqLwotfQotLypiZWNhdXNlIGxlZ2VuZCBkb2Vzbid0IGluaGVyaXQgaW4gSUUgKi8KLWxlZ2VuZCB7Ci0JY29sb3I6IzAwMDsKLX0KLQotLyogWVVJIENTUyBEZXRlY3Rpb24gU3RhbXAgKi8KLSN5dWkzLWNzcy1zdGFtcC5jc3NyZXNldCB7IGRpc3BsYXk6IG5vbmU7IH0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWUvc2NyaXB0cy9yb2xsZXIuanMgYi9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lL3NjcmlwdHMvcm9sbGVyLmpzCmluZGV4IGQ3ZWI3OGEuLmI2MGNhNDIgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWUvc2NyaXB0cy9yb2xsZXIuanMKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZS9zY3JpcHRzL3JvbGxlci5qcwpAQCAtMjUsMTkgKzI1LDE5IEBACiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgY29va2llcyAqLwogZnVuY3Rpb24gZ2V0Q29va2llKG5hbWUpIHsKLQl2YXIgcHJlZml4ID0gbmFtZSArICI9IiAKLQl2YXIgc3RhcnQgPSBkb2N1bWVudC5jb29raWUuaW5kZXhPZihwcmVmaXgpIAorCXZhciBwcmVmaXggPSBuYW1lICsgIj0iOworCXZhciBzdGFydCA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKHByZWZpeCk7CiAKLQlpZiAoc3RhcnQ9PS0xKSB7CisJaWYgKHN0YXJ0PT09LTEpIHsKIAkJcmV0dXJuIG51bGw7CiAJfQogCQotCXZhciBlbmQgPSBkb2N1bWVudC5jb29raWUuaW5kZXhPZigiOyIsIHN0YXJ0K3ByZWZpeC5sZW5ndGgpIAotCWlmIChlbmQ9PS0xKSB7CisJdmFyIGVuZCA9IGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKCI7Iiwgc3RhcnQrcHJlZml4Lmxlbmd0aCk7CisJaWYgKGVuZD09PS0xKSB7CiAJCWVuZD1kb2N1bWVudC5jb29raWUubGVuZ3RoOwogCX0KIAotCXZhciB2YWx1ZT1kb2N1bWVudC5jb29raWUuc3Vic3RyaW5nKHN0YXJ0K3ByZWZpeC5sZW5ndGgsIGVuZCkgCisJdmFyIHZhbHVlPWRvY3VtZW50LmNvb2tpZS5zdWJzdHJpbmcoc3RhcnQrcHJlZml4Lmxlbmd0aCwgZW5kKTsKIAlyZXR1cm4gdW5lc2NhcGUodmFsdWUpOwogfQogCkBAIC03MCw3ICs3MCw3IEBACiBmdW5jdGlvbiB0b2dnbGUodGFyZ2V0SWQpIHsKICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQpIHsKICAgICAgICAgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQpOwotICAgIAlpZiAodGFyZ2V0LnN0eWxlLmRpc3BsYXkgPT0gIm5vbmUiKSB7CisgICAgCWlmICh0YXJnZXQuc3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiKSB7CiAgICAgCQl0YXJnZXQuc3R5bGUuZGlzcGxheSA9ICIiOyAgICAgICAgICAgIAogICAgIAl9IGVsc2UgewogICAgIAkJdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CkBAIC04Myw3ICs4Myw3IEBACiAgICAgdmFyIGV4cGFuZGVkOwogICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCkgewogICAgICAgICB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXRJZCk7Ci0gICAgCWlmICh0YXJnZXQuc3R5bGUuZGlzcGxheSA9PSAibm9uZSIpIHsKKyAgICAJaWYgKHRhcmdldC5zdHlsZS5kaXNwbGF5ID09PSAibm9uZSIpIHsKICAgICAJCXRhcmdldC5zdHlsZS5kaXNwbGF5ID0gIiI7ICAgIAogICAgICAgICAgICAgZXhwYW5kZWQgPSB0cnVlOyAgICAgICAgCiAgICAgCX0gZWxzZSB7CkBAIC0xMDIsNyArMTAyLDcgQEAKIGZ1bmN0aW9uIHRvZ2dsZVBsdXNNaW51cyh0YXJnZXRJZCkgewogICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCkgewogICAgICAgICB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXRJZCk7Ci0gICAgCWlmICh0YXJnZXQuaW5uZXJIVE1MID09ICIrIikgeworICAgIAlpZiAodGFyZ2V0LmlubmVySFRNTCA9PT0gIisiKSB7CiAgICAgCQl0YXJnZXQuaW5uZXJIVE1MID0gIi0iOwogICAgIAl9IGVsc2UgewogICAgIAkJdGFyZ2V0LmlubmVySFRNTCA9ICIrIjsKQEAgLTExNiw3ICsxMTYsNyBAQAogICAgIGlmIChmb2xkZXJDb29raWUgIT0gbnVsbCkgeyAvLyB3ZSBoYXZlIHVzZXIncyBsYXN0IHNldHRpbmcKICAgICAgICAgZm9sZGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9sZGVySWQpOwogICAgICAgICBwbHVzTWludXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaSIrZm9sZGVySWQpOwotICAgICAgICBpZiAoZm9sZGVyQ29va2llID09ICJ0cnVlIikgeyAvLyBzaG93CisgICAgICAgIGlmIChmb2xkZXJDb29raWUgPT09ICJ0cnVlIikgeyAvLyBzaG93CiAgICAgICAgICAgICBmb2xkZXIuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICAgICAgICAgcGx1c01pbnVzLmlubmVySFRNTCA9ICItIjsKICAgICAgICAgfSBlbHNlIHsgLy8gaGlkZQpAQCAtMTI3LDExICsxMjcsMTEgQEAKIH0KIAogZnVuY3Rpb24gdG9nZ2xlTmV4dFJvdyhlKSB7Ci0gICAgaWYgKGUudHlwZSA9PSAiY2hlY2tib3giKSB7CisgICAgaWYgKGUudHlwZSA9PT0gImNoZWNrYm94IikgewogICAgICAgICB2YXIgY2hlY2tlZCA9IGUuY2hlY2tlZDsKLSAgICB9IGVsc2UgaWYgKGUudHlwZSA9PSAicmFkaW8iKSB7CisgICAgfSBlbHNlIGlmIChlLnR5cGUgPT09ICJyYWRpbyIpIHsKICAgICAgICAgdmFyIHYgPSBlLnZhbHVlOwotICAgICAgICB2YXIgY2hlY2tlZCA9ICh2ID09ICIxIiB8fCB2ID09ICJ5IiB8fCB2ID09ICJ0cnVlIikgPyB0cnVlIDogZmFsc2U7CisgICAgICAgIHZhciBjaGVja2VkID0gKHYgPT09ICIxIiB8fCB2ID09PSAieSIgfHwgdiA9PT0gInRydWUiKTsKICAgICB9CiAgICAgLy8gdmFyIG5leHRSb3cgPSBlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5uZXh0U2libGluZzsKICAgICAvLyB0aGUgYWJvdmUgZG9lc24ndCB3b3JrIG9uIE1vemlsbGEgc2luY2UgaXQgdHJlYXRzIHdoaXRlIHNwYWNlIGFzIG5vZGVzCkBAIC0xMzksNyArMTM5LDcgQEAKICAgICB2YXIgdGFibGVCb2R5ID0gdGhpc1Jvdy5wYXJlbnROb2RlOwogICAgIHZhciBuZXh0Um93ID0gdGFibGVCb2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ciIpW3RoaXNSb3cucm93SW5kZXgrMV07CiAgICAgCi0gICAgaWYgKGNoZWNrZWQgPT0gdHJ1ZSkgeworICAgIGlmIChjaGVja2VkID09PSB0cnVlKSB7CiAgICAgICAgIG5leHRSb3cuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgIH0gZWxzZSB7CiAgICAgICAgIG5leHRSb3cuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKQEAgLTE1MSw3ICsxNTEsNyBAQAogICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCkgewogICAgICAgICB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YXJnZXRJZCk7CiAgICAgICAgIHRvZ2dsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRvZ2dsZUlkKTsKLSAgICAJaWYgKHRhcmdldC5zdHlsZS5kaXNwbGF5ID09ICJub25lIikgeworICAgIAlpZiAodGFyZ2V0LnN0eWxlLmRpc3BsYXkgPT09ICJub25lIikgewogICAgIAkJdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAiIjsgIAogICAgICAgICAgICAgZXhwYW5kZWQgPSB0cnVlOyAgCiAgICAgICAgICAgICAgICAgICAKQEAgLTE3MSw3ICsxNzEsNyBAQAogZnVuY3Rpb24gaXNibGFuayhzKSB7CiAgICBmb3IgKHZhciBpPTA7IGk8cy5sZW5ndGg7IHMrKykgewogICAgICAgdmFyIGMgPSBzLmNoYXJBdChpKTsKLSAgICAgIGlmICgoYyE9JyAnKSAmJiAoYyE9J1xuJykgJiYgKGMhPScnKSkgcmV0dXJuIGZhbHNlOworICAgICAgaWYgKChjIT09JyAnKSAmJiAoYyE9PSdcbicpICYmIChjIT09JycpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xODMsOCArMTgzLDggQEAKIGZ1bmN0aW9uIHRvZ2dsZUZ1bmN0aW9uQWxsKHRvZ2dsZSkgewogCXZhciBpbnB1dHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTsKIAlmb3IodmFyIGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aCA7IGkrKykgewotCQlpZihpbnB1dHNbaV0ubmFtZSAhPSAiY29udHJvbCIgJiYgaW5wdXRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94JyAmJiBpbnB1dHNbaV0uZGlzYWJsZWQgPT0gZmFsc2UgKSB7Ci0JCQlpZiAoaW5wdXRzW2ldLmNoZWNrZWQgPT0gdHJ1ZSl7CisJCWlmKGlucHV0c1tpXS5uYW1lICE9PSAiY29udHJvbCIgJiYgaW5wdXRzW2ldLnR5cGUgPT09ICdjaGVja2JveCcgJiYgaW5wdXRzW2ldLmRpc2FibGVkID09PSBmYWxzZSApIHsKKwkJCWlmIChpbnB1dHNbaV0uY2hlY2tlZCA9PT0gdHJ1ZSl7CiAJCQkJaW5wdXRzW2ldLmNoZWNrZWQgPSAhaW5wdXRzW2ldLmNoZWNrZWQ7CiAJCQl9IGVsc2V7CiAJCQkJaW5wdXRzW2ldLmNoZWNrZWQgPSB0b2dnbGU7CkBAIC0xOTIsMTEgKzE5MiwyMSBAQAogCQl9CiAJfQogfQorCiBmdW5jdGlvbiB0b2dnbGVGdW5jdGlvbih0b2dnbGUsbmFtZSkgezsKIAl2YXIgaW5wdXRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUobmFtZSk7CiAJZm9yKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGggOyBpKyspIHsKLQkJaWYoaW5wdXRzW2ldLnR5cGUgPT0gJ2NoZWNrYm94JyAmJiBpbnB1dHNbaV0uZGlzYWJsZWQgPT0gZmFsc2UpIHsKKwkJaWYoaW5wdXRzW2ldLnR5cGUgPT09ICdjaGVja2JveCcgJiYgaW5wdXRzW2ldLmRpc2FibGVkID09PSBmYWxzZSkgewogICAgICAgICAgICBpbnB1dHNbaV0uY2hlY2tlZCA9IHRvZ2dsZTsKIAkJfQogCX0KLX07ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorfQorCitmdW5jdGlvbiBpc1ZhbGlkVXJsKHVybCkgeworICAgIHJldHVybiAvXihodHRwfGh0dHBzfGZ0cCk6XC9cL1thLXowLTldKyhbXC1cLl17MX1bYS16MC05XSspKlwuW2Etel17Miw1fSg6WzAtOV17MSw1fSk/KFwvLiopPyQvaS50ZXN0KHVybCk7Cit9CisKK2Z1bmN0aW9uIHZhbGlkYXRlRW1haWwoZW1haWwpIHsKKyAgICB2YXIgcmUgPSAvXigoW148PigpXFtcXVxcLiw7OlxzQCJdKyhcLltePD4oKVxbXF1cXC4sOzpcc0AiXSspKil8KCIuKyIpKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfV0pfCgoW2EtekEtWlwtMC05XStcLikrW2EtekEtWl17Mix9KSkkLzsKKyAgICByZXR1cm4gcmUudGVzdChlbWFpbCk7Cit9CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9iYXNpYy9iYXNpYy1wcmV2aWV3LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2Jhc2ljL2Jhc2ljLXByZXZpZXcucG5nCmluZGV4IGM3ZTAzMzUuLmIwNjJkZDUgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2Jhc2ljL2Jhc2ljLXByZXZpZXcucG5nCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2Jhc2ljL2Jhc2ljLXByZXZpZXcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2Jhc2ljL3RoZW1lLnhtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2Jhc2ljL3RoZW1lLnhtbAppbmRleCAzMzAwOTg4Li41ZGJmNTVmIDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9iYXNpYy90aGVtZS54bWwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvYmFzaWMvdGhlbWUueG1sCkBAIC0xLDkgKzEsMjYgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UKKyAgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcKKyAgY29weXJpZ2h0IGluIHRoaXMgd29yaywgcGxlYXNlIHNlZSB0aGUgTk9USUNFIGZpbGUgaW4gdGhlIHRvcCBsZXZlbAorICBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCistLT4KIDx3ZWJsb2d0aGVtZT4KICAgICAKICAgICA8aWQ+YmFzaWM8L2lkPgogICAgIDxuYW1lPkJhc2ljPC9uYW1lPgotICAgIDxkZXNjcmlwdGlvbj5PZmZlcnMgd2lkZSBtYXJnaW5zIGZvciBibG9nZ2luZyBwcm9ncmFtbWluZyBsYW5ndWFnZSBzb3VyY2UgY29kZS48L2Rlc2NyaXB0aW9uPgorICAgIDxkZXNjcmlwdGlvbj5TdXBlci1zaW1wbGUgYmxvZyB0aGVtZSB1c2VmdWwgZm9yIHVuZGVyc3RhbmRpbmcgUm9sbGVyIHRlbXBsYXRlcy48L2Rlc2NyaXB0aW9uPgogICAgIDxhdXRob3I+Um9sbGVyIFdlYmxvZ2dlcjwvYXV0aG9yPgogCiAgICAgPCEtLSB0aGVtZSBwcmV2aWV3IGltYWdlIC0tPgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvYmFzaWNtb2JpbGUvYmFzaWMtcHJldmlldy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9iYXNpY21vYmlsZS9iYXNpYy1wcmV2aWV3LnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDcwNTY4Ny4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9iYXNpY21vYmlsZS9iYXNpYy1wcmV2aWV3LnBuZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2Jhc2ljbW9iaWxlL2Jhc2ljbW9iaWxlLXByZXZpZXcucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvYmFzaWNtb2JpbGUvYmFzaWNtb2JpbGUtcHJldmlldy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg2YmQyMgotLS0gL2Rldi9udWxsCisrKyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2Jhc2ljbW9iaWxlL2Jhc2ljbW9iaWxlLXByZXZpZXcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2Jhc2ljbW9iaWxlL3RoZW1lLnhtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2Jhc2ljbW9iaWxlL3RoZW1lLnhtbAppbmRleCA1OTQ1MWY1Li4yMTBmZmU5IDEwMDY0NAotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9iYXNpY21vYmlsZS90aGVtZS54bWwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvYmFzaWNtb2JpbGUvdGhlbWUueG1sCkBAIC0xLDE2ICsxLDMzIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91CisgIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nCisgIGNvcHlyaWdodCBpbiB0aGlzIHdvcmssIHBsZWFzZSBzZWUgdGhlIE5PVElDRSBmaWxlIGluIHRoZSB0b3AgbGV2ZWwKKyAgZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgorLS0+CiA8d2VibG9ndGhlbWU+CiAgICAgCiAgICAgPGlkPmJhc2ljbW9iaWxlPC9pZD4KICAgICA8bmFtZT5CYXNpYyBNb2JpbGU8L25hbWU+Ci0gICAgPGRlc2NyaXB0aW9uPk9mZmVycyB3aWRlIG1hcmdpbnMgZm9yIGJsb2dnaW5nIHByb2dyYW1taW5nIGxhbmd1YWdlIHNvdXJjZSBjb2RlIGFuZCBhIHNlcGFyYXRlIGJ1dHRvbiBmb3IgbW9iaWxlIHZpZXdpbmcuPC9kZXNjcmlwdGlvbj4KKyAgICA8ZGVzY3JpcHRpb24+U2FtcGxlIGFzIEJhc2ljIHRoZW1lIGJ1dCB3aXRoIG1vYmlsZSBibG9nZ2luZyBidWlsdC1pbi48L2Rlc2NyaXB0aW9uPgogICAgIDxhdXRob3I+Um9sbGVyIFdlYmxvZ2dlcjwvYXV0aG9yPgogICAgIDwhLS0gZHVhbFRoZW1lOiBNYWludGFpbiBzZXBhcmF0ZSBtb2JpbGUgJiBzdGFuZGFyZCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzLCBkZWZhdWx0IGZhbHNlLAogICAgICAgICAgbm90IG5lZWRlZCB3aXRoIHJlc3BvbnNpdmUgdGhlbWVzIG9yIHdoZXJlIG11bHRpLWRldmljZSBzdXBwb3J0IGlzIG5vdCBhIGNvbmNlcm4uIC0tPgogICAgIDxkdWFsVGhlbWU+dHJ1ZTwvZHVhbFRoZW1lPgogICAgIAogICAgIDwhLS0gdGhlbWUgcHJldmlldyBpbWFnZSAtLT4KLSAgICA8cHJldmlldy1pbWFnZSBwYXRoPSJiYXNpYy1wcmV2aWV3LnBuZyIgLz4KKyAgICA8cHJldmlldy1pbWFnZSBwYXRoPSJiYXNpY21vYmlsZS1wcmV2aWV3LnBuZyIgLz4KICAgICAKICAgICA8IS0tIHN0eWxlc2hlZXQgLS0+CiAgICAgPHN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9mYXV4Y29seS9mYXV4Y29seS1wcmV2aWV3LnBuZyBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2ZhdXhjb2x5L2ZhdXhjb2x5LXByZXZpZXcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiYTFiM2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9mYXV4Y29seS9mYXV4Y29seS1wcmV2aWV3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9mYXV4Y29seS9pbWFnZXMvZmF1eGNvbHktcHJldmlldy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9mYXV4Y29seS9pbWFnZXMvZmF1eGNvbHktcHJldmlldy5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3MDMyNTkuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvZmF1eGNvbHkvaW1hZ2VzL2ZhdXhjb2x5LXByZXZpZXcucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvZmF1eGNvbHkvdGhlbWUueG1sIGIvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvZmF1eGNvbHkvdGhlbWUueG1sCmluZGV4IDA3NDhiYmMuLmI5MjA2OWMgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2ZhdXhjb2x5L3RoZW1lLnhtbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9mYXV4Y29seS90aGVtZS54bWwKQEAgLTEsNCArMSwyMSBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdQorICB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZworICBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCisgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KKy0tPgogPHdlYmxvZ3RoZW1lPgogICAgIAogICAgIDwhLS0gWVVJIEdyaWQgYmFzZWQgUm9sbGVyIHRoZW1lIC0tPgpAQCAtOSw3ICsyNiw3IEBACiAgICAgPGRlc2NyaXB0aW9uPlRoZW1lIGJ1aWx0IG9uIHRoZSBZYWhvbyEgVXNlciBJbnRlcmZhY2UgKFlVSSkgbGlicmFyeS48L2Rlc2NyaXB0aW9uPgogCiAgICAgPCEtLSB0aGVtZSBwcmV2aWV3IGltYWdlIC0tPgotICAgIDxwcmV2aWV3LWltYWdlIHBhdGg9ImltYWdlcy9mYXV4Y29seS1wcmV2aWV3LnBuZyIgLz4KKyAgICA8cHJldmlldy1pbWFnZSBwYXRoPSJmYXV4Y29seS1wcmV2aWV3LnBuZyIgLz4KIAogICAgIDwhLS0gc3R5bGVzaGVldCAtLT4KICAgICA8c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2Zyb250cGFnZS9mcm9udHBhZ2UtcHJldmlldy5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9mcm9udHBhZ2UvZnJvbnRwYWdlLXByZXZpZXcucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYTgzNDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9mcm9udHBhZ2UvZnJvbnRwYWdlLXByZXZpZXcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2Zyb250cGFnZS90aGVtZS54bWwgYi9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9mcm9udHBhZ2UvdGhlbWUueG1sCmluZGV4IDFhYzE4M2EuLjAzYWI4ZWUgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2Zyb250cGFnZS90aGVtZS54bWwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvZnJvbnRwYWdlL3RoZW1lLnhtbApAQCAtMSwxMyArMSwzMCBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdQorICB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyAgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisKKyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZworICBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCisgIGRpcmVjdG9yeSBvZiB0aGlzIGRpc3RyaWJ1dGlvbi4KKy0tPgogPHdlYmxvZ3RoZW1lPgogICAgIAogICAgIDxpZD5mcm9udHBhZ2U8L2lkPgogICAgIDxuYW1lPkZyb250cGFnZTwvbmFtZT4KLSAgICA8ZGVzY3JpcHRpb24+Tm90IGEgc3RhbmRhcmQgYmxvZyB0ZW1wbGF0ZTsgbWVhbnQgb25seSBhcyBhIGZyb250IHBhZ2UgYWNjdW11bGF0b3Igb2YgYWxsIGJsb2dzIGhvc3RlZCBieSB0aGlzIHNlcnZlci48L2Rlc2NyaXB0aW9uPgorICAgIDxkZXNjcmlwdGlvbj5UaGVtZSBmb3IgYWdncmVnYXRlZCBmcm9udC1wYWdlIG9mIGxhcmdlIG11bHRpLWJsb2cgc2l0ZS48L2Rlc2NyaXB0aW9uPgogICAgIDxhdXRob3I+RGF2ZSBKb2huc29uPC9hdXRob3I+CiAKICAgICA8IS0tIHRoZW1lIHByZXZpZXcgaW1hZ2UgLS0+Ci0gICAgPHByZXZpZXctaW1hZ2UgcGF0aD0ic20tdGhlbWUtZnJvbnRwYWdlLnBuZyIgLz4KKyAgICA8cHJldmlldy1pbWFnZSBwYXRoPSJmcm9udHBhZ2UtcHJldmlldy5wbmciIC8+CiAgICAgCiAgICAgPCEtLSB0ZW1wbGF0ZXMgLS0+CiAgICAgPHRlbXBsYXRlIGFjdGlvbj0id2VibG9nIj4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2dhdXJhdi9lbnRyeS52bSBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2dhdXJhdi9lbnRyeS52bQppbmRleCBhNzFhMTU3Li4yOGNkNTRmIDEwMDc1NQotLS0gYS9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9nYXVyYXYvZW50cnkudm0KKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvZ2F1cmF2L2VudHJ5LnZtCkBAIC0yNDksMTEgKzI0OSw2IEBACiAJCQkJCTwvdGJvZHk+PC90YWJsZT4KIAkJCQk8L2Rpdj4KIAkJCQk8ZGl2IGNsYXNzPSJ3ZWxsIj4KLQkJCQkJPHAgY2xhc3M9ImRldGFpbHMiPgotCQkJCQlUaGlzIGlzIGp1c3Qgb25lIGVudHJ5IGluIHRoZSB3ZWJsb2cgPGI+JG1vZGVsLndlYmxvZy5uYW1lPC9iPi4KLQkJCQkJV2h5IGRvbid0IHlvdSA8YSBocmVmPSIkdXJsLmhvbWUiPnZpc2l0IHRoZSBtYWluIHBhZ2U8L2E+IG9mIHRoZSB3ZWJsb2c/PC9wPgotCQkJCTwvZGl2PgotCQkJCTxkaXYgY2xhc3M9IndlbGwiPgogCQkJCQk8aDM+UmVsYXRlZCBlbnRyaWVzPC9oMz4KIAkJCQkJI3NldCgkcmVjZW50SW5DYXQgPSAkbW9kZWwud2VibG9nLmdldFJlY2VudFdlYmxvZ0VudHJpZXMoJG1vZGVsLndlYmxvZ0VudHJ5LmNhdGVnb3J5Lm5hbWUsIDIwKSkKIAkJCQkJPHVsPiNmb3JlYWNoKCRyZWNlbnRFbnRyeSBpbiAkcmVjZW50SW5DYXQpCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9nYXVyYXYvZ2F1cmF2LXByZXZpZXcucG5nIGIvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvZ2F1cmF2L2dhdXJhdi1wcmV2aWV3LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmQ4NDBkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvZ2F1cmF2L2dhdXJhdi1wcmV2aWV3LnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9nYXVyYXYvaW1hZ2VzL3RoZW1lLWdhdXJhdi5wbmcgYi9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9nYXVyYXYvaW1hZ2VzL3RoZW1lLWdhdXJhdi5wbmcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlM2IwNjIuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvZ2F1cmF2L2ltYWdlcy90aGVtZS1nYXVyYXYucG5nCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvZ2F1cmF2L3RoZW1lLnhtbCBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2dhdXJhdi90aGVtZS54bWwKaW5kZXggMDg1M2UzYS4uNzU4OGNiNiAxMDA3NTUKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvZ2F1cmF2L3RoZW1lLnhtbAorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9nYXVyYXYvdGhlbWUueG1sCkBAIC0xLDQgKzEsMjEgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQorICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UKKyAgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90CisgIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcKKyAgY29weXJpZ2h0IGluIHRoaXMgd29yaywgcGxlYXNlIHNlZSB0aGUgTk9USUNFIGZpbGUgaW4gdGhlIHRvcCBsZXZlbAorICBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCistLT4KIDx3ZWJsb2d0aGVtZT4KICAgICAKICAgIDwhLS0gQm9vdHN0cmFwIGJhc2VkIFJvbGxlciB0aGVtZSAtLT4KQEAgLTksNyArMjYsNyBAQAogICAgIDxhdXRob3I+R2F1cmF2IFNhaW5pPC9hdXRob3I+CiAKICAgICA8IS0tIHRoZW1lIHByZXZpZXcgaW1hZ2UgLS0+Ci0gICAgPHByZXZpZXctaW1hZ2UgcGF0aD0iaW1hZ2VzL3RoZW1lLWdhdXJhdi5wbmciIC8+CisgICAgPHByZXZpZXctaW1hZ2UgcGF0aD0iZ2F1cmF2LXByZXZpZXcucG5nIiAvPgogCiAgICAgPCEtLSBzdHlsZXNoZWV0IC0tPgogICAgIDxzdHlsZXNoZWV0PgpkaWZmIC0tZ2l0IGEvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvZ2F1cmF2L3dlYmxvZy52bSBiL2FwcC9zcmMvbWFpbi93ZWJhcHAvdGhlbWVzL2dhdXJhdi93ZWJsb2cudm0KaW5kZXggNWRlYzgwYi4uYmI4NWM0ZSAxMDA3NTUKLS0tIGEvYXBwL3NyYy9tYWluL3dlYmFwcC90aGVtZXMvZ2F1cmF2L3dlYmxvZy52bQorKysgYi9hcHAvc3JjL21haW4vd2ViYXBwL3RoZW1lcy9nYXVyYXYvd2VibG9nLnZtCkBAIC02MCwxOCArNjAsMjAgQEAKIAkJCQkJCTxhIGhyZWY9IiR1cmwuZmVlZC5lbnRyaWVzLmF0b20iPlN1YnNjcmliZSB0byB0aGlzIGJsb2c8L2E+CiAJCQkJCTwvZGl2PgogCQkJCTwvZGl2PgotCQkJCTxkaXYgY2xhc3M9IndlbGwiPgotICAgICAgICAgICAgICAgICAgICAjc2V0KCRteXRhZ3MgPSAkbW9kZWwud2VibG9nLmdldFBvcHVsYXJUYWdzKC0xLCAzMCkpCi0gICAgICAgICAgICAgICAgICAgICNpZiAoJG15dGFncyAmJiAkbXl0YWdzLnNpemUoKSA+IDQpCi0gICAgICAgICAgICAgICAgICAgICAgIDxoMz5Ib3QgdGFnczwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkZXRhaWxzIj5CZWxvdyBhcmUgdGhlIG1vc3Qgb2Z0ZW4gdXNlZCB0YWdzIGluIHRoZSBibG9nLiBIb3ZlciBvdmVyIGEgdGFnIHRvIHNlZSBhIGNvdW50IG9mIGVudHJpZXMsIGNsaWNrIGEgdGFnIHRvIHNlZSB0aGUgbW9zdCByZWNlbnQgcG9zdHMgd2l0aCB0aGUgdGFnLjwvcD4KLSAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0idGFnY2xvdWQiPgotICAgICAgICAgICAgICAgICAgICAgICAjZm9yZWFjaCAoJHRhZyBpbiAkbXl0YWdzKQotICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0idGFnIHMke3RhZy5pbnRlbnNpdHl9IiBocmVmPSIkdXJsLnRhZygkdGFnLm5hbWUpIiB0aXRsZT0iJHRhZy5jb3VudCI+JHRhZy5uYW1lPC9hPgotICAgICAgICAgICAgICAgICAgICAgICAjZW5kCi0gICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgotICAgICAgICAgICAgICAgICAgICAjZW5kCisJCQkJI2lmICgkbXl0YWdzICYmICRteXRhZ3Muc2l6ZSgpID4gNCkKKyAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2VsbCI+CisgICAgICAgICAgICAgICAgICAgICAgICAjc2V0KCRteXRhZ3MgPSAkbW9kZWwud2VibG9nLmdldFBvcHVsYXJUYWdzKC0xLCAzMCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+SG90IHRhZ3M8L2gzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImRldGFpbHMiPkJlbG93IGFyZSB0aGUgbW9zdCBvZnRlbiB1c2VkIHRhZ3MgaW4gdGhlIGJsb2cuCisJCQkJCQkJICAgSG92ZXIgb3ZlciBhIHRhZyB0byBzZWUgYSBjb3VudCBvZiBlbnRyaWVzLCBjbGljayBhIHRhZyB0byBzZWUKKwkJCQkJCQkgICB0aGUgbW9zdCByZWNlbnQgcG9zdHMgd2l0aCB0aGUgdGFnLjwvcD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9InRhZ2Nsb3VkIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICNmb3JlYWNoICgkdGFnIGluICRteXRhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0idGFnIHMke3RhZy5pbnRlbnNpdHl9IiBocmVmPSIkdXJsLnRhZygkdGFnLm5hbWUpIiB0aXRsZT0iJHRhZy5jb3VudCI+JHRhZy5uYW1lPC9hPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgI2VuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAJCQkJPC9kaXY+CisJCQkJI2VuZAogCQkJPC9kaXY+IDwhLS0gY2xvc2Ugc2lkZWJhcl9jb250ZW50IC0tPgogCQk8L2Rpdj4gPCEtLSAvLnJvdyAtLT4KIAk8L2Rpdj4gPCEtLSAvLmNvbnRhaW5lciAtLT4KZGlmZiAtLWdpdCBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9FbnRyeUJhc2ljVGVzdHMuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9FbnRyeUJhc2ljVGVzdHMuamF2YQppbmRleCBmN2I1MTM0Li4yZWM4Yjg3IDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvRW50cnlCYXNpY1Rlc3RzLmphdmEKKysrIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvcGxhbmV0L2J1c2luZXNzL0VudHJ5QmFzaWNUZXN0cy5qYXZhCkBAIC0xNiwzNCArMTYsMzYgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci5wbGFuZXQuYnVzaW5lc3M7CiAKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LnBvam9zLlN1YnNjcmlwdGlvbkVudHJ5OwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5wb2pvcy5TdWJzY3JpcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LnBvam9zLlN1YnNjcmlwdGlvbkVudHJ5OwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5UZXN0VXRpbHM7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLldlYmxvZ2dlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFmdGVyRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQmVmb3JlRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwogCiAKIC8qKgogICogVGVzdCBFbnRyeSBDUlVELgogICovCi1wdWJsaWMgY2xhc3MgRW50cnlCYXNpY1Rlc3RzIGV4dGVuZHMgVGVzdENhc2UgeworcHVibGljIGNsYXNzIEVudHJ5QmFzaWNUZXN0cyB7CiAgICAgCiAgICAgcHJpdmF0ZSBTdWJzY3JpcHRpb24gdGVzdFN1YiA9IG51bGw7Ci0gICAgCi0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gc2V0dXAgcGxhbmV0CisKKyAgICBAQmVmb3JlRWFjaAorICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFRlc3RVdGlscy5zZXR1cFdlYmxvZ2dlcigpOwotICAgICAgICAKICAgICAgICAgdGVzdFN1YiA9IFRlc3RVdGlscy5zZXR1cFN1YnNjcmlwdGlvbigiZW50cnlCYXNpY1Rlc3QiKTsKICAgICB9CiAgICAgCi0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBAQWZ0ZXJFYWNoCisgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVGVzdFV0aWxzLnRlYXJkb3duU3Vic2NyaXB0aW9uKHRlc3RTdWIuZ2V0SWQoKSk7CiAgICAgfQogICAgIAotICAgIAorICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEVudHJ5Q1JVRCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgUGxhbmV0TWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFBsYW5ldE1hbmFnZXIoKTsKQEAgLTg1LDUgKzg3LDUgQEAKICAgICAgICAgZW50cnkgPSBtZ3IuZ2V0RW50cnlCeUlkKHRlc3RFbnRyeS5nZXRJZCgpKTsKICAgICAgICAgYXNzZXJ0TnVsbChlbnRyeSk7CiAgICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvRW50cnlGdW5jdGlvbmFsVGVzdHMuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9FbnRyeUZ1bmN0aW9uYWxUZXN0cy5qYXZhCmluZGV4IGExNDhkMzYuLmY2YzY4YmEgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9FbnRyeUZ1bmN0aW9uYWxUZXN0cy5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9FbnRyeUZ1bmN0aW9uYWxUZXN0cy5qYXZhCkBAIC0xNiwyMiArMTYsMjggQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci5wbGFuZXQuYnVzaW5lc3M7CiAKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LnBvam9zLlBsYW5ldDsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci5wbGFuZXQucG9qb3MuU3Vic2NyaXB0aW9uRW50cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LnBvam9zLlBsYW5ldEdyb3VwOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5wb2pvcy5TdWJzY3JpcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LnBvam9zLlN1YnNjcmlwdGlvbkVudHJ5OwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5UZXN0VXRpbHM7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLldlYmxvZ2dlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFmdGVyRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQmVmb3JlRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0Tm90TnVsbDsKIAogCiAvKioKICAqIFRlc3QgcGxhbmV0IEVudHJ5IGZ1bmN0aW9uYWxpdHkuCiAgKi8KLXB1YmxpYyBjbGFzcyBFbnRyeUZ1bmN0aW9uYWxUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKK3B1YmxpYyBjbGFzcyBFbnRyeUZ1bmN0aW9uYWxUZXN0cyAgewogICAgIAogICAgIHB1YmxpYyBzdGF0aWMgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKEVudHJ5RnVuY3Rpb25hbFRlc3RzLmNsYXNzKTsKICAgICAKQEAgLTQzLDggKzQ5LDkgQEAKICAgICBwcml2YXRlIFN1YnNjcmlwdGlvbkVudHJ5IHRlc3RFbnRyeTIgPSBudWxsOwogICAgIHByaXZhdGUgU3Vic2NyaXB0aW9uRW50cnkgdGVzdEVudHJ5MyA9IG51bGw7CiAgICAgCi0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworICAgIEBCZWZvcmVFYWNoCisgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgLy8gc2V0dXAgcGxhbmV0CiAgICAgICAgIFRlc3RVdGlscy5zZXR1cFdlYmxvZ2dlcigpOwogCkBAIC03MSw4ICs3OCw4IEBACiAgICAgICAgIGxvZy5pbmZvKCJFWElURUQiKTsKICAgICB9CiAgICAgCi0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBAQWZ0ZXJFYWNoCisgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgbG9nLmluZm8oIkVOVEVSRUQiKTsKICAgICAgICAgCiAgICAgICAgIFRlc3RVdGlscy50ZWFyZG93blN1YnNjcmlwdGlvbih0ZXN0U3ViMS5nZXRJZCgpKTsKQEAgLTgzLDcgKzkwLDggQEAKICAgICAgICAgbG9nLmluZm8oIkVYSVRFRCIpOwogICAgIH0KICAgICAKLSAgICAKKworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEVudHJ5TG9va3VwcygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgUGxhbmV0TWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFBsYW5ldE1hbmFnZXIoKTsKQEAgLTEwOCw3ICsxMTYsNyBAQAogICAgICAgICBhc3NlcnRFcXVhbHMoMCwgbWdyLmdldEVudHJpZXMoZ3JvdXAsIG5ldyBEYXRlKCksIG51bGwsIDAsIDEwKS5zaXplKCkpOwogICAgIH0KICAgICAKLSAgICAKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3REZWxldGVFbnRyaWVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBQbGFuZXRNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0UGxhbmV0TWFuYWdlcigpOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvcGxhbmV0L2J1c2luZXNzL0dyb3VwQmFzaWNUZXN0cy5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvcGxhbmV0L2J1c2luZXNzL0dyb3VwQmFzaWNUZXN0cy5qYXZhCmluZGV4IGEwM2M4NTEuLjAxZTFkNDEgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9Hcm91cEJhc2ljVGVzdHMuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvR3JvdXBCYXNpY1Rlc3RzLmphdmEKQEAgLTE2LDMyICsxNiwzNyBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5idXNpbmVzczsKIAotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci5wbGFuZXQucG9qb3MuUGxhbmV0OwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5wb2pvcy5QbGFuZXRHcm91cDsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5XZWJsb2dnZXJGYWN0b3J5OworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5BZnRlckVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuKjsKIAogCiAvKioKICAqIFRlc3QgR3JvdXAgQ1JVRC4KICAqLwotcHVibGljIGNsYXNzIEdyb3VwQmFzaWNUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKK3B1YmxpYyBjbGFzcyBHcm91cEJhc2ljVGVzdHMgIHsKICAgICAKICAgICBwcml2YXRlIFBsYW5ldCB0ZXN0UGxhbmV0ID0gbnVsbDsKICAgICAKLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIEBCZWZvcmVFYWNoCisgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgLy8gc2V0dXAgcGxhbmV0CiAgICAgICAgIFRlc3RVdGlscy5zZXR1cFdlYmxvZ2dlcigpOworICAgICAgICB0ZXN0UGxhbmV0ID0gVGVzdFV0aWxzLnNldHVwUGxhbmV0KCJwbGFuZXRGdW5jVGVzdCIpOwogICAgIH0KICAgICAKLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgIEBBZnRlckVhY2gKKyAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBUZXN0VXRpbHMudGVhcmRvd25QbGFuZXQodGVzdFBsYW5ldC5nZXRJZCgpKTsKICAgICB9CiAgICAgCi0gICAgCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0R3JvdXBDUlVEKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBQbGFuZXRNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0UGxhbmV0TWFuYWdlcigpOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvcGxhbmV0L2J1c2luZXNzL0dyb3VwRnVuY3Rpb25hbFRlc3RzLmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvR3JvdXBGdW5jdGlvbmFsVGVzdHMuamF2YQppbmRleCAzNjFmMzMzLi5jZWQ2YTQxIDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvR3JvdXBGdW5jdGlvbmFsVGVzdHMuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvR3JvdXBGdW5jdGlvbmFsVGVzdHMuamF2YQpAQCAtMTYsMjUgKzE2LDMxIEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LmJ1c2luZXNzOwogCi1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LnBvam9zLlBsYW5ldDsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci5wbGFuZXQucG9qb3MuUGxhbmV0R3JvdXA7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQWZ0ZXJFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OworCitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLmFzc2VydE5vdE51bGw7CiAKIAogLyoqCiAgKiBUZXN0IHBsYW5ldCBHcm91cCBmdW5jdGlvbmFsaXR5LgogICovCi1wdWJsaWMgY2xhc3MgR3JvdXBGdW5jdGlvbmFsVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7CitwdWJsaWMgY2xhc3MgR3JvdXBGdW5jdGlvbmFsVGVzdHMgIHsKICAgICAKICAgICBwcml2YXRlIFBsYW5ldCB0ZXN0UGxhbmV0ID0gbnVsbDsKICAgICBwcml2YXRlIFBsYW5ldEdyb3VwIHRlc3RHcm91cDEgPSBudWxsOwogICAgIHByaXZhdGUgUGxhbmV0R3JvdXAgdGVzdEdyb3VwMiA9IG51bGw7CiAgICAgCi0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBAQmVmb3JlRWFjaAorICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIC8vIHNldHVwIHBsYW5ldAogICAgICAgICBUZXN0VXRpbHMuc2V0dXBXZWJsb2dnZXIoKTsKIApAQCAtNDMsMTQgKzQ5LDE0IEBACiAgICAgICAgIHRlc3RHcm91cDIgPSBUZXN0VXRpbHMuc2V0dXBHcm91cCh0ZXN0UGxhbmV0LCAiZ3JvdXBGdW5jVGVzdDIiKTsKICAgICB9CiAgICAgCi0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBAQWZ0ZXJFYWNoCisgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVGVzdFV0aWxzLnRlYXJkb3duR3JvdXAodGVzdEdyb3VwMS5nZXRJZCgpKTsKICAgICAgICAgVGVzdFV0aWxzLnRlYXJkb3duR3JvdXAodGVzdEdyb3VwMi5nZXRJZCgpKTsKICAgICAgICAgVGVzdFV0aWxzLnRlYXJkb3duUGxhbmV0KHRlc3RQbGFuZXQuZ2V0SWQoKSk7CiAgICAgfQogICAgIAotICAgIAorICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEdyb3VwTG9va3VwcygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgUGxhbmV0TWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFBsYW5ldE1hbmFnZXIoKTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9QbGFuZXRCYXNpY1Rlc3RzLmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvUGxhbmV0QmFzaWNUZXN0cy5qYXZhCmluZGV4IGYwZTQwMGQuLjllZTI1YmIgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9QbGFuZXRCYXNpY1Rlc3RzLmphdmEKKysrIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvcGxhbmV0L2J1c2luZXNzL1BsYW5ldEJhc2ljVGVzdHMuamF2YQpAQCAtMTYsMjIgKzE2LDI0IEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LmJ1c2luZXNzOwogCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5wb2pvcy5QbGFuZXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwogCiAKIC8qKgogICogVGVzdCBQbGFuZXQgQ1JVRC4KICAqLwotcHVibGljIGNsYXNzIFBsYW5ldEJhc2ljVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7CitwdWJsaWMgY2xhc3MgUGxhbmV0QmFzaWNUZXN0cyAgewogICAgIAogICAgIHB1YmxpYyBzdGF0aWMgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFBsYW5ldEJhc2ljVGVzdHMuY2xhc3MpOwogICAgIAotICAgIAorICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFBsYW5ldENSVUQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIC8vIHNldHVwIHBsYW5ldApkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvcGxhbmV0L2J1c2luZXNzL1BsYW5ldEZ1bmN0aW9uYWxUZXN0cy5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvcGxhbmV0L2J1c2luZXNzL1BsYW5ldEZ1bmN0aW9uYWxUZXN0cy5qYXZhCmluZGV4IGMyZjVlODMuLjRhYzYzMDcgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9QbGFuZXRGdW5jdGlvbmFsVGVzdHMuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvUGxhbmV0RnVuY3Rpb25hbFRlc3RzLmphdmEKQEAgLTE2LDM0ICsxNiw0MSBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5idXNpbmVzczsKIAotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5wb2pvcy5QbGFuZXQ7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQWZ0ZXJFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy5hc3NlcnROb3ROdWxsOwogCiAKIC8qKgogICogVGVzdCBQbGFuZXQgZnVuY3Rpb25hbGl0eS4KICAqLwotcHVibGljIGNsYXNzIFBsYW5ldEZ1bmN0aW9uYWxUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKKy8vQEV4dGVuZFdpdGgoRGVyYnlKdW5pdEV4dGVuc2lvbi5jbGFzcykKK3B1YmxpYyBjbGFzcyBQbGFuZXRGdW5jdGlvbmFsVGVzdHMgIHsKICAgICAKICAgICBwdWJsaWMgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhQbGFuZXRGdW5jdGlvbmFsVGVzdHMuY2xhc3MpOwogICAgIAogICAgIHByaXZhdGUgUGxhbmV0IHRlc3RQbGFuZXQgPSBudWxsOwogICAgIAotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgQEJlZm9yZUVhY2gKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAvLyBzZXR1cCBwbGFuZXQKICAgICAgICAgVGVzdFV0aWxzLnNldHVwV2VibG9nZ2VyKCk7CiAKICAgICAgICAgdGVzdFBsYW5ldCA9IFRlc3RVdGlscy5zZXR1cFBsYW5ldCgicGxhbmV0RnVuY1Rlc3QiKTsKICAgICB9CiAgICAgCi0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBAQWZ0ZXJFYWNoCisgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVGVzdFV0aWxzLnRlYXJkb3duUGxhbmV0KHRlc3RQbGFuZXQuZ2V0SWQoKSk7CiAgICAgfQogICAgIApAQCAtNTEsMjcgKzU4LDI1IEBACiAgICAgLyoqCiAgICAgICogVGVzdCBsb29rdXAgbWVjaGFuaXNtcy4KICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RQbGFuZXRMb29rdXBzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBQbGFuZXRNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0UGxhbmV0TWFuYWdlcigpOwogICAgICAgICAKLSAgICAgICAgUGxhbmV0IHBsYW5ldCA9IG51bGw7Ci0gICAgICAgIAogICAgICAgICAvLyBieSBpZAotICAgICAgICBwbGFuZXQgPSBtZ3IuZ2V0V2VibG9nZ2VyQnlJZCh0ZXN0UGxhbmV0LmdldElkKCkpOworICAgICAgICBQbGFuZXQgcGxhbmV0ID0gbWdyLmdldFdlYmxvZ2dlckJ5SWQodGVzdFBsYW5ldC5nZXRJZCgpKTsKICAgICAgICAgYXNzZXJ0Tm90TnVsbChwbGFuZXQpOwogICAgICAgICBhc3NlcnRFcXVhbHMoInBsYW5ldEZ1bmNUZXN0IiwgcGxhbmV0LmdldEhhbmRsZSgpKTsKICAgICAgICAgCiAgICAgICAgIC8vIGJ5IGhhbmRsZQotICAgICAgICBwbGFuZXQgPSBudWxsOwogICAgICAgICBwbGFuZXQgPSBtZ3IuZ2V0V2VibG9nZ2VyKCJwbGFuZXRGdW5jVGVzdCIpOwogICAgICAgICBhc3NlcnROb3ROdWxsKHBsYW5ldCk7CiAgICAgICAgIGFzc2VydEVxdWFscygicGxhbmV0RnVuY1Rlc3QiLCBwbGFuZXQuZ2V0SGFuZGxlKCkpOwogICAgICAgICAKLSAgICAgICAgLy8gYWxsIHBsYW5ldHMKKyAgICAgICAgLy8gYWxsIHBsYW5ldHMgKHNob3VsZCBiZSAyLCB0aGUgZGVmYXVsdCBhbmQgdGhlIG9uZSB3ZSBjcmVhdGVkKQogICAgICAgICBMaXN0IHBsYW5ldHMgPSBtZ3IuZ2V0V2VibG9nZ2VycygpOwogICAgICAgICBhc3NlcnROb3ROdWxsKHBsYW5ldHMpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgcGxhbmV0cy5zaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMiwgcGxhbmV0cy5zaXplKCkpOwogICAgIH0KICAgICAKIH0KZGlmZiAtLWdpdCBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9QbGFuZXRUZXN0U3VpdGUuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9QbGFuZXRUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2YyMGVlYi4uMDAwMDAwMAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvUGxhbmV0VGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gKiAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91Ci0gKiB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKLSAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZwotICogY29weXJpZ2h0IGluIHRoaXMgd29yaywgcGxlYXNlIHNlZSB0aGUgTk9USUNFIGZpbGUgaW4gdGhlIHRvcCBsZXZlbAotICogZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LmJ1c2luZXNzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotCi0vKioKLSAqIFRlc3QgY29yZSBidXNpbmVzcyBzZXJ2aWNlcy4KLSAqCi0gKiBUaGUgY29yZSBidXNpbmVzcyBzZXJ2aWNlcyBhcmUgdGhlIHRoaW5ncyB3aGljaCBhbGxvdyB0aGUgYnVzaW5lc3MgbGF5ZXIgYXMKLSAqIGEgd2hvbGUgdG8gZnVuY3Rpb24uICBFeGFtcGxlcyB3b3VsZCBiZSB0aGUgUHJvcGVydGllc01hbmFnZXIgd2hpY2ggaXMKLSAqIGludm9sdmVkIGluIHNlcnZpY2luZyB0aGUgY29yZSBhcHBsaWNhdGlvbiBjb25maWcuCi0gKgotICogVGVzdHMgZnJvbSBmcm9tIHRoaXMgc3VpdGUgc2hvdWxkIG9ubHkgaW5jbHVkZSB0aGluZ3MgdGhhdCBhcmUgbm90IHBhcnQgb2YKLSAqIG9yIGRlcGVuZGVudCBvbiB0aGUgY29yZSB3ZWJsb2cgcGxhdGZvcm0sIGkuZS4geW91IGRvbid0IG5lZWQgYSB1c2VyIG9yIGEKLSAqIHdlYmxvZyB0byBkbyB0aGVtLgotICovCi1wdWJsaWMgY2xhc3MgUGxhbmV0VGVzdFN1aXRlIHsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0KLSAgICAgICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCQotICAgICAgICAvLyBUT0RPOiBhZGQgYSB0ZXN0IGZvciBQbGFuZXRDb25maWcKLSAgICAgICAgCi0gICAgICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShQcm9wZXJ0aWVzVGVzdC5jbGFzcyk7Ci0gICAgICAgIAotICAgICAgICAvLyBwbGFuZXRzCi0gICAgICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShQbGFuZXRCYXNpY1Rlc3RzLmNsYXNzKTsKLSAgICAgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFBsYW5ldEZ1bmN0aW9uYWxUZXN0cy5jbGFzcyk7Ci0gICAgICAgIAotICAgICAgICAvLyBncm91cHMKLSAgICAgICAgc3VpdGUuYWRkVGVzdFN1aXRlKEdyb3VwQmFzaWNUZXN0cy5jbGFzcyk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShHcm91cEZ1bmN0aW9uYWxUZXN0cy5jbGFzcyk7Ci0gICAgICAgIAotICAgICAgICAvLyBzdWJzY3JpcHRpb25zCi0gICAgICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShTdWJzY3JpcHRpb25CYXNpY1Rlc3RzLmNsYXNzKTsKLSAgICAgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFN1YnNjcmlwdGlvbkZ1bmN0aW9uYWxUZXN0cy5jbGFzcyk7Ci0gICAgICAgIAotICAgICAgICAvLyBlbnRyaWVzCi0gICAgICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShFbnRyeUJhc2ljVGVzdHMuY2xhc3MpOwotICAgICAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoRW50cnlGdW5jdGlvbmFsVGVzdHMuY2xhc3MpOwotICAgICAgICAKLSAgICAgICAgLy8gZmV0Y2hpbmcKLSAgICAgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFJvbWVGZWVkRmV0Y2hlclRlc3QuY2xhc3MpOwotICAgICAgICAKLSAgICAgICAgLy8gdXBkYXRpbmcKLSAgICAgICAgc3VpdGUuYWRkVGVzdFN1aXRlKFNpbmdsZVRocmVhZGVkRmVlZFVwZGF0ZXJUZXN0LmNsYXNzKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBzdWl0ZTsKLSAgICB9Ci0gICAgCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvUHJvcGVydGllc1Rlc3QuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9Qcm9wZXJ0aWVzVGVzdC5qYXZhCmluZGV4IDVjM2U3NDUuLjJhNDIxN2EgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9Qcm9wZXJ0aWVzVGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9Qcm9wZXJ0aWVzVGVzdC5qYXZhCkBAIC0xOCwzMyArMTgsMzkgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci5wbGFuZXQuYnVzaW5lc3M7CiAKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5Qcm9wZXJ0aWVzTWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuUnVudGltZUNvbmZpZ1Byb3BlcnR5OworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5BZnRlckVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLio7CiAKIAogLyoqCiAgKiBUZXN0IFByb3BlcnRpZXMgcmVsYXRlZCBidXNpbmVzcyBvcGVyYXRpb25zLgogICovCi1wdWJsaWMgY2xhc3MgUHJvcGVydGllc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CitwdWJsaWMgY2xhc3MgUHJvcGVydGllc1Rlc3QgIHsKICAgICAKICAgICBwdWJsaWMgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhQcm9wZXJ0aWVzVGVzdC5jbGFzcyk7CiAgICAgCi0gICAgCisgICAgQEJlZm9yZUVhY2gKICAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAvLyBzZXR1cCBwbGFuZXQKICAgICAgICAgVGVzdFV0aWxzLnNldHVwV2VibG9nZ2VyKCk7CiAKICAgICB9Ci0gICAgCisKKyAgICBAQWZ0ZXJFYWNoCiAgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHt9CiAgICAgCi0gICAgCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0UHJvcGVyaWVzQ1JVRCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgLy8gcmVtZW1iZXIsIHRoZSBwcm9wZXJ0aWVzIHRhYmxlIGlzIGluaXRpYWxpemVkIGR1cmluZyBSb2xsZXIgc3RhcnR1cApkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvcGxhbmV0L2J1c2luZXNzL1JvbWVGZWVkRmV0Y2hlclRlc3QuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9Sb21lRmVlZEZldGNoZXJUZXN0LmphdmEKaW5kZXggZDAxYzRkYy4uOTNkNTVjMiAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvcGxhbmV0L2J1c2luZXNzL1JvbWVGZWVkRmV0Y2hlclRlc3QuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvUm9tZUZlZWRGZXRjaGVyVGVzdC5qYXZhCkBAIC0xNiw3ICsxNiw2IEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LmJ1c2luZXNzOwogCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5idXNpbmVzcy5mZXRjaGVyLkZlZWRGZXRjaGVyOwpAQCAtMjQsNDMgKzIzLDM0IEBACiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LnBvam9zLlN1YnNjcmlwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5XZWJsb2dnZXJGYWN0b3J5OworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5BZnRlckVhY2g7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLio7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CiAKIAogLyoqCiAgKiBUZXN0IGRhdGFiYXNlIGltcGxlbWVudGF0aW9uIG9mIFBsYW5ldE1hbmFnZXIuCiAgKi8KLXB1YmxpYyBjbGFzcyBSb21lRmVlZEZldGNoZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworcHVibGljIGNsYXNzIFJvbWVGZWVkRmV0Y2hlclRlc3QgIHsKICAgICAKICAgICBwdWJsaWMgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhSb21lRmVlZEZldGNoZXJUZXN0LmNsYXNzKTsKICAgICAKICAgICBTdHJpbmcgZmVlZF91cmwgPSAiaHR0cHM6Ly9yb2xsZXJ3ZWJsb2dnZXIub3JnL3JvbGxlci9mZWVkL2VudHJpZXMvYXRvbSI7CiAgICAgCi0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBAQmVmb3JlRWFjaAorICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIC8vIHNldHVwIHBsYW5ldAogICAgICAgICBUZXN0VXRpbHMuc2V0dXBXZWJsb2dnZXIoKTsKICAgICB9CiAgICAgCi0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBAQWZ0ZXJFYWNoCisgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbGVhbiBzaG91bGRTa2lwKCkgewotCi0gICAgICAgIGlmIChTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEudmVyc2lvbiIpLnN0YXJ0c1dpdGgoIjEuNyIpKSB7Ci0gICAgICAgICAgICBsb2cud2FybigiU2tpcHBpbmcgdGVzdEZldGNoRmVlZCBiZWNhdXNlIGZyZWUtb2YtY2hhcmdlIHZlcnNpb25zIG9mICIgKwotICAgICAgICAgICAgICAgICJKYXZhIDEuNyBkbyBub3Qgc3VwcG9ydCBUTFMgMS4yIHdoaWNoIGlzIG5vdyBpbiBjb21tb24gdXNhZ2UuIik7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmV0Y2hGZWVkKCkgdGhyb3dzIEZldGNoZXJFeGNlcHRpb24gewogCi0gICAgICAgIGlmIChzaG91bGRTa2lwKCkpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBGZWVkRmV0Y2hlciBmZWVkRmV0Y2hlciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0RmVlZEZldGNoZXIoKTsKICAgICAgICAgICAgIApAQCAtNzgsMTMgKzY4LDEwIEBACiAgICAgICAgICAgICB0aHJvdyBleDsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0RmV0Y2hGZWVkQ29uZGl0aW9uYWxseSgpIHRocm93cyBGZXRjaGVyRXhjZXB0aW9uIHsKIAotICAgICAgICBpZiAoc2hvdWxkU2tpcCgpKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEZldGNoRmVlZENvbmRpdGlvbmFsbHkoKSB0aHJvd3MgRmV0Y2hlckV4Y2VwdGlvbiB7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIEZlZWRGZXRjaGVyIGZlZWRGZXRjaGVyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRGZWVkRmV0Y2hlcigpOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvcGxhbmV0L2J1c2luZXNzL1NpbmdsZVRocmVhZGVkRmVlZFVwZGF0ZXJUZXN0LmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvU2luZ2xlVGhyZWFkZWRGZWVkVXBkYXRlclRlc3QuamF2YQppbmRleCA4NjBkYWZkLi5iOGY2YjFhIDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvU2luZ2xlVGhyZWFkZWRGZWVkVXBkYXRlclRlc3QuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvU2luZ2xlVGhyZWFkZWRGZWVkVXBkYXRlclRlc3QuamF2YQpAQCAtMTYsNyArMTYsNiBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5idXNpbmVzczsKIAotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci5wbGFuZXQuYnVzaW5lc3MudXBkYXRlci5GZWVkVXBkYXRlcjsKQEAgLTI0LDEyICsyMywxNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5wb2pvcy5TdWJzY3JpcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQWZ0ZXJFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLio7CiAKIAogLyoqCiAgKiBUZXN0IGZlZWQgdXBkYXRlci4KICAqLwotcHVibGljIGNsYXNzIFNpbmdsZVRocmVhZGVkRmVlZFVwZGF0ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworcHVibGljIGNsYXNzIFNpbmdsZVRocmVhZGVkRmVlZFVwZGF0ZXJUZXN0ICB7CiAgICAgCiAgICAgcHVibGljIHN0YXRpYyBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coU2luZ2xlVGhyZWFkZWRGZWVkVXBkYXRlclRlc3QuY2xhc3MpOwogICAgIApAQCAtMzcsOSArNDEsOSBAQAogICAgIAogICAgIHByaXZhdGUgU3RyaW5nIGZlZWRfdXJsID0gImh0dHBzOi8vcm9sbGVyd2VibG9nZ2VyLm9yZy9yb2xsZXIvZmVlZC9lbnRyaWVzL2F0b20iOwogICAgIAotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKKyAgICBAQmVmb3JlRWFjaAorICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIC8vIHNldHVwIHBsYW5ldAogICAgICAgICBUZXN0VXRpbHMuc2V0dXBXZWJsb2dnZXIoKTsKICAgICAgICAgCkBAIC01MiwxOCArNTYsMTQgQEAKICAgICAgICAgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5mbHVzaCgpOwogICAgIH0KICAgICAKLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgIEBBZnRlckVhY2gKKyAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBUZXN0VXRpbHMudGVhcmRvd25TdWJzY3JpcHRpb24odGVzdFN1Yi5nZXRJZCgpKTsKICAgICB9Ci0gICAgCi0gICAgCisKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RVcGRhdGVTdWJzY3JpcHRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgICAgICBpZiAoUm9tZUZlZWRGZXRjaGVyVGVzdC5zaG91bGRTa2lwKCkpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCisgICAgICAgIAogICAgICAgICBQbGFuZXRNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0UGxhbmV0TWFuYWdlcigpOwogICAgICAgICBTdWJzY3JpcHRpb24gc3ViID0gbWdyLmdldFN1YnNjcmlwdGlvbkJ5SWQodGVzdFN1Yi5nZXRJZCgpKTsKICAgICAgICAgCmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvU3Vic2NyaXB0aW9uQmFzaWNUZXN0cy5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvcGxhbmV0L2J1c2luZXNzL1N1YnNjcmlwdGlvbkJhc2ljVGVzdHMuamF2YQppbmRleCA5ZjI2MDY2Li5lZmEzYzM1IDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvU3Vic2NyaXB0aW9uQmFzaWNUZXN0cy5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9TdWJzY3JpcHRpb25CYXNpY1Rlc3RzLmphdmEKQEAgLTE2LDE4ICsxNiwyMCBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5idXNpbmVzczsKIAotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5wb2pvcy5TdWJzY3JpcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwogCiAKIC8qKgogICogVGVzdCBTdWJzY3JpcHRpb24gQ1JVRC4KICAqLwotcHVibGljIGNsYXNzIFN1YnNjcmlwdGlvbkJhc2ljVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7CitwdWJsaWMgY2xhc3MgU3Vic2NyaXB0aW9uQmFzaWNUZXN0cyAgewogICAgIAotICAgIAorICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFN1YnNjcmlwdGlvbkNSVUQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIC8vIHNldHVwIHBsYW5ldApkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvcGxhbmV0L2J1c2luZXNzL1N1YnNjcmlwdGlvbkZ1bmN0aW9uYWxUZXN0cy5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvcGxhbmV0L2J1c2luZXNzL1N1YnNjcmlwdGlvbkZ1bmN0aW9uYWxUZXN0cy5qYXZhCmluZGV4IDBlODAxZDkuLmRmMGViZjEgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC9idXNpbmVzcy9TdWJzY3JpcHRpb25GdW5jdGlvbmFsVGVzdHMuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvYnVzaW5lc3MvU3Vic2NyaXB0aW9uRnVuY3Rpb25hbFRlc3RzLmphdmEKQEAgLTE2LDE4ICsxNiwyMiBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5idXNpbmVzczsKIAotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5wb2pvcy5QbGFuZXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LnBvam9zLlBsYW5ldEdyb3VwOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5wb2pvcy5TdWJzY3JpcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQWZ0ZXJFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwogCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0Tm90TnVsbDsKIAogLyoqCiAgKiBUZXN0IFN1YnNjcmlwdGlvbiBmdW5jdGlvbmFsaXR5LgogICovCi1wdWJsaWMgY2xhc3MgU3Vic2NyaXB0aW9uRnVuY3Rpb25hbFRlc3RzIGV4dGVuZHMgVGVzdENhc2UgeworcHVibGljIGNsYXNzIFN1YnNjcmlwdGlvbkZ1bmN0aW9uYWxUZXN0cyAgewogICAgIAogICAgIHByaXZhdGUgUGxhbmV0IHRlc3RQbGFuZXQgPSBudWxsOwogICAgIHByaXZhdGUgUGxhbmV0R3JvdXAgdGVzdEdyb3VwMSA9IG51bGw7CkBAIC0zNSw4ICszOSw4IEBACiAgICAgcHJpdmF0ZSBTdWJzY3JpcHRpb24gdGVzdFN1YjEgPSBudWxsOwogICAgIHByaXZhdGUgU3Vic2NyaXB0aW9uIHRlc3RTdWIyID0gbnVsbDsKICAgICAKLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIEBCZWZvcmVFYWNoCisgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgLy8gc2V0dXAgcGxhbmV0CiAgICAgICAgIFRlc3RVdGlscy5zZXR1cFdlYmxvZ2dlcigpOwogCkBAIC00Nyw4ICs1MSw4IEBACiAgICAgICAgIHRlc3RTdWIyID0gVGVzdFV0aWxzLnNldHVwU3Vic2NyaXB0aW9uKCJzdWJGdW5jVGVzdDIiKTsKICAgICB9CiAgICAgCi0gICAgCi0gICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBAQWZ0ZXJFYWNoCisgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVGVzdFV0aWxzLnRlYXJkb3duU3Vic2NyaXB0aW9uKHRlc3RTdWIxLmdldElkKCkpOwogICAgICAgICBUZXN0VXRpbHMudGVhcmRvd25TdWJzY3JpcHRpb24odGVzdFN1YjIuZ2V0SWQoKSk7CiAgICAgICAgIFRlc3RVdGlscy50ZWFyZG93bkdyb3VwKHRlc3RHcm91cDEuZ2V0SWQoKSk7CkBAIC01Niw3ICs2MCw3IEBACiAgICAgICAgIFRlc3RVdGlscy50ZWFyZG93blBsYW5ldCh0ZXN0UGxhbmV0LmdldElkKCkpOwogICAgIH0KICAgICAKLSAgICAKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RTdWJzY3JpcHRpb25Mb29rdXBzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBQbGFuZXRNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0UGxhbmV0TWFuYWdlcigpOwpAQCAtNzYsNyArODAsNyBAQAogICAgICAgICBhc3NlcnRFcXVhbHMoMiwgbWdyLmdldFN1YnNjcmlwdGlvbkNvdW50KCkpOwogICAgIH0KICAgICAKLSAgICAKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RTdWJzY3JpcHRpb25Hcm91cENSVUQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIFBsYW5ldE1hbmFnZXIgcGxhbmV0ID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRQbGFuZXRNYW5hZ2VyKCk7CmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvdXRpbC9yb21lL0Rpc2tGZWVkSW5mb0NhY2hlVGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvcGxhbmV0L3V0aWwvcm9tZS9EaXNrRmVlZEluZm9DYWNoZVRlc3QuamF2YQppbmRleCA1YzhiYzgwLi42YTdiNjJlIDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci9wbGFuZXQvdXRpbC9yb21lL0Rpc2tGZWVkSW5mb0NhY2hlVGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3BsYW5ldC91dGlsL3JvbWUvRGlza0ZlZWRJbmZvQ2FjaGVUZXN0LmphdmEKQEAgLTE2LDI1ICsxNiwyMiBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC51dGlsLnJvbWU7CiAKK2ltcG9ydCBjb20ucm9tZXRvb2xzLmZldGNoZXIuaW1wbC5EaXNrRmVlZEluZm9DYWNoZTsKK2ltcG9ydCBjb20ucm9tZXRvb2xzLmZldGNoZXIuaW1wbC5TeW5kRmVlZEluZm87CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmNvbmZpZy5XZWJsb2dnZXJDb25maWc7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CisKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotaW1wb3J0IGNvbS5yb21ldG9vbHMuZmV0Y2hlci5pbXBsLlN5bmRGZWVkSW5mbzsKLWltcG9ydCBjb20ucm9tZXRvb2xzLmZldGNoZXIuaW1wbC5EaXNrRmVlZEluZm9DYWNoZTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuY29uZmlnLldlYmxvZ2dlckNvbmZpZzsKIAoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwogCiAvKioKICAqIEBhdXRob3IgRGF2aWQgTSBKb2huc29uCiAgKi8KLXB1YmxpYyBjbGFzcyBEaXNrRmVlZEluZm9DYWNoZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CitwdWJsaWMgY2xhc3MgRGlza0ZlZWRJbmZvQ2FjaGVUZXN0ICB7CiAgICAgCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotICAgICAgICBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oRGlza0ZlZWRJbmZvQ2FjaGVUZXN0LmNsYXNzKTsKLSAgICB9Ci0gICAgCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Q2FjaGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly9jbm4uY29tIik7CiAgICAgICAgIFN5bmRGZWVkSW5mbyBpbmZvID0gbmV3IFN5bmRGZWVkSW5mbygpOwpAQCAtNDIsNyArMzksNyBAQAogICAgICAgICAKICAgICAgICAgU3RyaW5nIHRlc3RQbGFuZXRDYWNoZSA9IFdlYmxvZ2dlckNvbmZpZy5nZXRQcm9wZXJ0eSgiY2FjaGUuZGlyIik7CiAgICAgICAgIGFzc2VydE5vdE51bGwoInRlc3RQbGFuZXRDYWNoZSBub3QgbnVsbCIsIHRlc3RQbGFuZXRDYWNoZSk7Ci0gICAgICAgIGFzc2VydFRydWUoInRlc3RQbGFuZXRDYWNoZSBub3QgemVybyBsZW5ndGgiLCB0ZXN0UGxhbmV0Q2FjaGUudHJpbSgpLmxlbmd0aCgpID4gMCk7CisgICAgICAgIGFzc2VydFRydWUoIHRlc3RQbGFuZXRDYWNoZS50cmltKCkubGVuZ3RoKCkgPiAwLCAidGVzdFBsYW5ldENhY2hlIG5vdCB6ZXJvIGxlbmd0aCIpOwogICAgICAgICAKICAgICAgICAgRmlsZSBjYWNoZURpciA9IG5ldyBGaWxlKHRlc3RQbGFuZXRDYWNoZSk7CiAgICAgICAgIGlmICghY2FjaGVEaXIuZXhpc3RzKCkpIGNhY2hlRGlyLm1rZGlycygpOwpAQCAtNTYsOSArNTMsNCBAQAogICAgICAgICBhc3NlcnRFcXVhbHModXJsLCBpbmZvMi5nZXRVcmwoKSk7CiAgICAgfQogICAgIAotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoRGlza0ZlZWRJbmZvQ2FjaGVUZXN0LmNsYXNzKTsKLSAgICAgICAgCi0gICAgfQotICAgIAogfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvdGVzdGluZy9EZXJieUp1bml0RXh0ZW5zaW9uLmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci90ZXN0aW5nL0RlcmJ5SnVuaXRFeHRlbnNpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjI2YmQyCi0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvdGVzdGluZy9EZXJieUp1bml0RXh0ZW5zaW9uLmphdmEKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UKKyAqIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nCisgKiBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCisgKiBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci50ZXN0aW5nOworCisKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLmRlcmJ5LmRyZGEuTmV0d29ya1NlcnZlckNvbnRyb2w7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLnN0YXJ0dXAuU1FMU2NyaXB0UnVubmVyOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5leHRlbnNpb24uKjsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEuc3FsLkNvbm5lY3Rpb247CitpbXBvcnQgamF2YS5zcWwuRHJpdmVyTWFuYWdlcjsKKworCitwdWJsaWMgY2xhc3MgRGVyYnlKdW5pdEV4dGVuc2lvbiBpbXBsZW1lbnRzIEJlZm9yZUFsbENhbGxiYWNrLCBBZnRlckFsbENhbGxiYWNrIHsKKworICAgIHByaXZhdGUgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhEZXJieUp1bml0RXh0ZW5zaW9uLmNsYXNzKTsKKworICAgIHByaXZhdGUgc3RhdGljIERlcmJ5U3RhcnRTdG9wcGVyIGRlcmJ5U3RhcnRTdG9wcGVyID0KKyAgICAgICAgbmV3IERlcmJ5U3RhcnRTdG9wcGVyKCJ0YXJnZXQvZGVyYnktc3lzdGVtIiwgInRhcmdldC9kYnNjcmlwdHMiLCAiNDIyNCIpOworCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgYmVmb3JlQWxsKEV4dGVuc2lvbkNvbnRleHQgZXh0ZW5zaW9uQ29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGRlcmJ5U3RhcnRTdG9wcGVyLnN0YXJ0KCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgYWZ0ZXJBbGwoRXh0ZW5zaW9uQ29udGV4dCBleHRlbnNpb25Db250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGRlcmJ5U3RhcnRTdG9wcGVyLnN0b3AoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGxvZy53YXJuKCJFcnJvciBzdG9wcGluZyBEZXJieSIsIGUpOworICAgICAgICB9CisgICAgfQorfQorCisKK2NsYXNzIERlcmJ5U3RhcnRTdG9wcGVyIHsKKyAgICBwcml2YXRlIFN0cmluZyBkYXRhYmFzZURpcjsKKyAgICBwcml2YXRlIFN0cmluZyBkYXRhYmFzZVNjcmlwdHNEaXI7CisgICAgcHJpdmF0ZSBTdHJpbmcgcG9ydDsKKworCisgICAgRGVyYnlTdGFydFN0b3BwZXIoIFN0cmluZyBkYXRhYmFzZURpciwgU3RyaW5nIGRhdGFiYXNlU2NyaXB0c0RpciwgU3RyaW5nIHBvcnQgKSB7CisgICAgICAgIHRoaXMuZGF0YWJhc2VEaXIgPSBkYXRhYmFzZURpcjsKKyAgICAgICAgdGhpcy5kYXRhYmFzZVNjcmlwdHNEaXIgPSBkYXRhYmFzZVNjcmlwdHNEaXI7CisgICAgICAgIHRoaXMucG9ydCA9IHBvcnQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3RhcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT09PT09Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3RhcnRpbmcgRGVyYnkiKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09PT09PSIpOworCisgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgiZGVyYnkuc3lzdGVtLmhvbWUiLCBkYXRhYmFzZURpcik7CisgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgiZGVyYnkuZHJkYS5wb3J0TnVtYmVyIiwgcG9ydCk7CisgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgiZGVyYnkuZHJkYS5ob3N0IiwgImxvY2FsaG9zdCIpOworICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoImRlcmJ5LmRyZGEubWF4VGhyZWFkcyIsICIxMCIpOworICAgICAgICAvL1N5c3RlbS5zZXRQcm9wZXJ0eSgiZGVyYnkuZHJkYS5sb2dDb25uZWN0aW9ucyIsInRydWUiKTsKKworICAgICAgICBOZXR3b3JrU2VydmVyQ29udHJvbCBzZXJ2ZXIgPSBuZXcgTmV0d29ya1NlcnZlckNvbnRyb2woKTsKKyAgICAgICAgc2VydmVyLnN0YXJ0KG5ldyBQcmludFdyaXRlcihTeXN0ZW0ub3V0KSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMjAwMCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CisgICAgICAgIH0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSdW50aW1lIEluZm86ICIgKyBzZXJ2ZXIuZ2V0UnVudGltZUluZm8oKSk7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU3lzdGVtIEluZm86ICAiICsgc2VydmVyLmdldFN5c2luZm8oKSk7CisKKyAgICAgICAgQ2xhc3MuZm9yTmFtZSgib3JnLmFwYWNoZS5kZXJieS5qZGJjLkVtYmVkZGVkRHJpdmVyIik7CisgICAgICAgIENvbm5lY3Rpb24gY29ubiA9IERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbigiamRiYzpkZXJieTpyb2xsZXJkYjtjcmVhdGU9dHJ1ZSIsICJBUFAiLCAiQVBQIik7CisKKyAgICAgICAgLy8gY3JlYXRlIHJvbGxlciB0YWJsZXMKKworICAgICAgICBTUUxTY3JpcHRSdW5uZXIgcnVubmVyMSA9IG5ldyBTUUxTY3JpcHRSdW5uZXIoCisgICAgICAgICAgICBkYXRhYmFzZVNjcmlwdHNEaXIKKyAgICAgICAgICAgICAgICArIEZpbGUuc2VwYXJhdG9yICsgImRyb3B0YWJsZXMuc3FsIik7CisgICAgICAgIHJ1bm5lcjEucnVuU2NyaXB0KGNvbm4sIGZhbHNlKTsKKworICAgICAgICBTUUxTY3JpcHRSdW5uZXIgcnVubmVyID0gbmV3IFNRTFNjcmlwdFJ1bm5lcigKKyAgICAgICAgICAgIGRhdGFiYXNlU2NyaXB0c0RpcgorICAgICAgICAgICAgICAgICsgRmlsZS5zZXBhcmF0b3IgKyAiZGVyYnkiCisgICAgICAgICAgICAgICAgKyBGaWxlLnNlcGFyYXRvciArICJjcmVhdGVkYi5zcWwiKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJ1bm5lci5ydW5TY3JpcHQoY29ubiwgdHJ1ZSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7CisgICAgICAgICAgICBmb3IgKFN0cmluZyBtZXNzYWdlIDogcnVubmVyLmdldE1lc3NhZ2VzKCkpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obWVzc2FnZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZ25vcmVkLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3RvcCgpIHRocm93cyBFeGNlcHRpb24geworCisgICAgICAgIFN0cmluZyBkcml2ZXJVUkwgPSAiamRiYzpkZXJieTovL2xvY2FsaG9zdDoiICsgcG9ydCArICIvcm9sbGVyZGIiOworCisgICAgICAgIENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUuZGVyYnkuamRiYy5FbWJlZGRlZERyaXZlciIpOworICAgICAgICBDb25uZWN0aW9uIGNvbm4gPSBEcml2ZXJNYW5hZ2VyLmdldENvbm5lY3Rpb24oZHJpdmVyVVJMLCJBUFAiLCAiQVBQIik7CisKKyAgICAgICAgLy8gZHJvcCBSb2xsZXIgdGFibGVzCisgICAgICAgIFNRTFNjcmlwdFJ1bm5lciBydW5uZXIgPSBuZXcgU1FMU2NyaXB0UnVubmVyKAorICAgICAgICAgICAgZGF0YWJhc2VTY3JpcHRzRGlyICsgRmlsZS5zZXBhcmF0b3IgKyAiZHJvcHRhYmxlcy5zcWwiKTsKKyAgICAgICAgcnVubmVyLnJ1blNjcmlwdChjb25uLCBmYWxzZSk7CisKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09PT09PSIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlN0b3BwaW5nIERlcmJ5Iik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PT09PT0iKTsKKworICAgICAgICB0cnkgeworICAgICAgICAgICAgRHJpdmVyTWFuYWdlci5nZXRDb25uZWN0aW9uKGRyaXZlclVSTCArICI7c2h1dGRvd249dHJ1ZSIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gaWdub3JlZCkgeworICAgICAgICB9CisKKyAgICAgICAgU3lzdGVtLnNldFByb3BlcnR5KCJkZXJieS5zeXN0ZW0uaG9tZSIsIGRhdGFiYXNlRGlyKTsKKworICAgICAgICAvLyBOZXR3b3JrIERlcmJ5CisgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgiZGVyYnkuZHJkYS5wb3J0TnVtYmVyIiwgcG9ydCk7CisgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgiZGVyYnkuZHJkYS5ob3N0IiwgImxvY2FsaG9zdCIpOworICAgICAgICBTeXN0ZW0uc2V0UHJvcGVydHkoImRlcmJ5LmRyZGEubWF4VGhyZWFkcyIsICIxMCIpOworICAgICAgICAvL1N5c3RlbS5zZXRQcm9wZXJ0eSgiZGVyYnkuZHJkYS5sb2dDb25uZWN0aW9ucyIsInRydWUiKTsKKyAgICAgICAgTmV0d29ya1NlcnZlckNvbnRyb2wgc2VydmVyID0gbmV3IE5ldHdvcmtTZXJ2ZXJDb250cm9sKCk7CisgICAgICAgIHNlcnZlci5zaHV0ZG93bigpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgc2VydmVyLnBpbmcoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4cGVjdGVkKSB7fQorCisgICAgICAgIERyaXZlck1hbmFnZXIuZ2V0Q29ubmVjdGlvbigiamRiYzpkZXJieTo7c2h1dGRvd249dHJ1ZSIpOworCisgICAgICAgIHRyeSB7VGhyZWFkLnNsZWVwKDIwMDApO30gY2F0Y2ggKEV4Y2VwdGlvbiBpZ25vcmVkKSB7fQorICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvdXRpbC9Qcm9wZXJ0eUV4cGFuZGVyVGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvdXRpbC9Qcm9wZXJ0eUV4cGFuZGVyVGVzdC5qYXZhCmluZGV4IGM1N2JiNWQuLmM2OWRlN2MgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3V0aWwvUHJvcGVydHlFeHBhbmRlclRlc3QuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci91dGlsL1Byb3BlcnR5RXhwYW5kZXJUZXN0LmphdmEKQEAgLTE4LDQyICsxOCw0NSBAQAogDQogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci51dGlsOw0KIA0KK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsNCisNCiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQogaW1wb3J0IGphdmEudXRpbC5NYXA7DQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCiANCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLmFzc2VydEVxdWFsczsNCiANCiAvKioNCiAgKiBVbml0IHRlc3QgZm9yIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51dGlsLlByb3BlcnR5RXhwYW5kZXIuDQogICoNCiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzphbmlsQGJ1c3lidWRkaGEub3JnIj5BbmlsIEdhbmdvbGxpPC9hPg0KICAqLw0KLXB1YmxpYyBjbGFzcyBQcm9wZXJ0eUV4cGFuZGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsNCitjbGFzcyBQcm9wZXJ0eUV4cGFuZGVyVGVzdCAgew0KICAgICANCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwIHByb3BzID0gbmV3IEhhc2hNYXAoKTsNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwPFN0cmluZywgU3RyaW5nPiBwcm9wcyA9IG5ldyBIYXNoTWFwPD4oKTsNCiAgICAgDQotICAgIHN0YXRpYw0KLSAgICB7DQorICAgIHN0YXRpYyB7DQogICAgICAgICBwcm9wcy5wdXQoImRlZmluZWQucHJvcGVydHkub25lIiwgInZhbHVlIG9uZSIpOw0KICAgICAgICAgcHJvcHMucHV0KCJkZWZpbmVkLnByb3BlcnR5LnR3byIsICJ2YWx1ZSB0d28iKTsNCiAgICAgICAgIHByb3BzLnB1dCgiZGVmaW5lZC5wcm9wZXJ0eS53aXRoLmRvbGxhci5zaWduLmluLnZhbHVlIiwgIiQyIik7DQogICAgIH0NCi0gICAgDQotICAgIHB1YmxpYyB2b2lkIHRlc3RFeHBhbnNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisNCisgICAgQFRlc3QNCisgICAgdm9pZCB0ZXN0RXhwYW5zaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQogICAgICAgICBTdHJpbmcgZXhwYW5kZWQgPQ0KICAgICAgICAgICAgICAgICBQcm9wZXJ0eUV4cGFuZGVyLmV4cGFuZFByb3BlcnRpZXMoIlN0cmluZyB3aXRoICR7ZGVmaW5lZC5wcm9wZXJ0eS5vbmV9IGFuZCAke2RlZmluZWQucHJvcGVydHkudHdvfSBhbmQgJHtkZWZpbmVkLnByb3BlcnR5LndpdGguZG9sbGFyLnNpZ24uaW4udmFsdWV9IGFuZCAke3VuZGVmaW5lZC5wcm9wZXJ0eX0gYW5kIHNvbWUgc3R1ZmYuIiwgcHJvcHMpOw0KICAgICAgICAgDQotICAgICAgICBhc3NlcnRFcXVhbHMoIkV4cGFuZGVkIHN0cmluZyBkb2Vzbid0IG1hdGNoIGV4cGVjdGVkIiwNCi0gICAgICAgICAgICAgICAgIlN0cmluZyB3aXRoIHZhbHVlIG9uZSBhbmQgdmFsdWUgdHdvIGFuZCAkMiBhbmQgJHt1bmRlZmluZWQucHJvcGVydHl9IGFuZCBzb21lIHN0dWZmLiIsDQotICAgICAgICAgICAgICAgIGV4cGFuZGVkKTsNCisgICAgICAgIGFzc2VydEVxdWFscyhleHBhbmRlZCwNCisgICAgICAgICAgICAiU3RyaW5nIHdpdGggdmFsdWUgb25lIGFuZCB2YWx1ZSB0d28gYW5kICQyIGFuZCAke3VuZGVmaW5lZC5wcm9wZXJ0eX0gYW5kIHNvbWUgc3R1ZmYuIiwNCisgICAgICAgICAgICAiRXhwYW5kZWQgc3RyaW5nIGRvZXNuJ3QgbWF0Y2ggZXhwZWN0ZWQiKTsNCiAgICAgfQ0KLSAgICANCi0gICAgcHVibGljIHZvaWQgdGVzdFN5c3RlbVByb3BlcnR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotICAgICAgICBTdHJpbmcgZXhwYW5kZWQgPQ0KLSAgICAgICAgICAgICAgICBQcm9wZXJ0eUV4cGFuZGVyLmV4cGFuZFN5c3RlbVByb3BlcnRpZXMoIiR7amF2YS5ob21lfSIpOw0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJFeHBhbmRlZCBzdHJpbmcgZG9lc24ndCBtYXRjaCBleHBlY3RlZCIsDQotICAgICAgICAgICAgICAgIFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5ob21lIiksDQotICAgICAgICAgICAgICAgIGV4cGFuZGVkKTsNCisNCisgICAgQFRlc3QNCisgICAgdm9pZCB0ZXN0U3lzdGVtUHJvcGVydHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIFN0cmluZyBleHBhbmRlZCA9IFByb3BlcnR5RXhwYW5kZXIuZXhwYW5kU3lzdGVtUHJvcGVydGllcygiJHtqYXZhLmhvbWV9Iik7DQorICAgICAgICBhc3NlcnRFcXVhbHMoZXhwYW5kZWQsDQorICAgICAgICAgICAgU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLmhvbWUiKSwNCisgICAgICAgICAgICAiRXhwYW5kZWQgc3RyaW5nIGRvZXNuJ3QgbWF0Y2ggZXhwZWN0ZWQiDQorICAgICAgICApOw0KICAgICB9DQogICAgIA0KIH0NCmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci91dGlsL1JlZ2V4VXRpbFRlc3QuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3V0aWwvUmVnZXhVdGlsVGVzdC5qYXZhCmluZGV4IGM4NzlmZTguLmM5NGI3YWYgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3V0aWwvUmVnZXhVdGlsVGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3V0aWwvUmVnZXhVdGlsVGVzdC5qYXZhCkBAIC0xOCw0NCArMTgsMTcgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci51dGlsOwogCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0RXF1YWxzOwogCiAvKioKICAqIFRlc3QgcmVnZXggdXRpbHMuCiAgKi8KLXB1YmxpYyBjbGFzcyBSZWdleFV0aWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotICAgIAotICAgIC8qKgotICAgICAqCi0gICAgICovCi0gICAgcHVibGljIFJlZ2V4VXRpbFRlc3QoKSB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIEBwYXJhbSBhcmcwCi0gICAgICovCi0gICAgcHVibGljIFJlZ2V4VXRpbFRlc3QoU3RyaW5nIGFyZzApIHsKLSAgICAgICAgc3VwZXIoYXJnMCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIEBzZWUgVGVzdENhc2Ujc2V0VXAoKQotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIEBzZWUgVGVzdENhc2UjdGVhckRvd24oKQotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHN1cGVyLnRlYXJEb3duKCk7Ci0gICAgfQotICAgIAorcHVibGljIGNsYXNzIFJlZ2V4VXRpbFRlc3QgIHsKKworCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RW5jb2RpbmdFbWFpbCgpIHsKICAgICAgICAgLy8gdGVzdCBtYWlsdG86IGVzY2FwaW5nCiAgICAgICAgIFN0cmluZyB0ZXN0ID0gInRlc3QgPGEgaHJlZj0nbWFpbHRvOnRoaXNAZW1haWwuY29tJz5lbWFpbDwvYT4gc3RyaW5nIjsKQEAgLTY0LDcgKzM3LDggQEAKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4ocmVzdWx0KTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdCwgcmVzdWx0KTsKICAgICB9Ci0gICAgCisKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RPYmZ1c2NhdGVFbWFpbCgpIHsKICAgICAgICAgLy8gdGVzdCAicGxhaW50ZXh0IiBlc2NhcGluZwogICAgICAgICBTdHJpbmcgdGVzdCA9ICJ0aGlzQGVtYWlsLmNvbSI7CkBAIC03Miw3ICs0Niw4IEBACiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBSZWdleFV0aWwuZW5jb2RlRW1haWwodGVzdCk7CiAgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3QsIHJlc3VsdCk7CiAgICAgfQotICAgIAorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0SGV4RW1haWwoKSB7CiAgICAgICAgIC8vIHRlc3QgaGV4ICYgb2JmdXNjYXRlIHRvZ2V0aGVyCiAgICAgICAgIFN0cmluZyB0ZXN0ID0gInRlc3QgPGEgaHJlZj0nbWFpbHRvOnRoaXNAZW1haWwuY29tJz50aGlzQGVtYWlsLmNvbTwvYT4gc3RyaW5nLCBhbmQgdGhpc0BlbWFpbC5jb20iOwpAQCAtODEsOSArNTYsNSBAQAogICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihyZXN1bHQpOwogICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0LCByZXN1bHQpOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFJlZ2V4VXRpbFRlc3QuY2xhc3MpOwotICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvdXRpbC9VdGlsaXRpZXNUZXN0U3VpdGUuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3V0aWwvVXRpbGl0aWVzVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYjZmZDMuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvdXRpbC9VdGlsaXRpZXNUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKLSAqICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UKLSAqIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAotICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nCi0gKiBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCi0gKiBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci51dGlsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotCi0vKioKLSAqIFRlc3QgdmFyaW91cyB1dGlsaXR5IGNsYXNzZXMgdGhhdCBkbyBub3QgcmVxdWlyZSBhIGRhdGFiYXNlIG9yIGNvbnRhaW5lci4KLSAqLwotcHVibGljIGNsYXNzIFV0aWxpdGllc1Rlc3RTdWl0ZSB7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCi0gICAgICAgIFRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLSAgICAgICAgCi0gICAgICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShQcm9wZXJ0eUV4cGFuZGVyVGVzdC5jbGFzcyk7Ci0gICAgICAgIHN1aXRlLmFkZFRlc3RTdWl0ZShSZWdleFV0aWxUZXN0LmNsYXNzKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBzdWl0ZTsKLSAgICB9Ci0gICAgCi19CmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvQm9va21hcmtUZXN0LmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvQm9va21hcmtUZXN0LmphdmEKaW5kZXggMWE2NzkxOS4uYmEyODQ4YyAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL0Jvb2ttYXJrVGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9Cb29rbWFya1Rlc3QuamF2YQpAQCAtMTgsMjYgKzE4LDMwIEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzOwogCitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVXNlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dCb29rbWFyazsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nQm9va21hcmtGb2xkZXI7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFmdGVyRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQmVmb3JlRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKKwogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwogaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLldlYmxvZ2dlckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dCb29rbWFyazsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nQm9va21hcmtGb2xkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLlVzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZzsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwogCiAKIC8qKgogICogVGVzdCBXZWJsb2dnZXIgQm9va21hcmsgTWFuYWdlbWVudC4KICAqLwotcHVibGljIGNsYXNzIEJvb2ttYXJrVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKK3B1YmxpYyBjbGFzcyBCb29rbWFya1Rlc3QgIHsKICAgICAKICAgICBwdWJsaWMgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhCb29rbWFya1Rlc3QuY2xhc3MpOwogICAgIApAQCAtNDgsNiArNTIsNyBAQAogICAgIC8qKgogICAgICAqIEFsbCB0ZXN0cyBpbiB0aGlzIHN1aXRlIHJlcXVpcmUgYSB1c2VyIGFuZCBhIHdlYmxvZy4KICAgICAgKi8KKyAgICBAQmVmb3JlRWFjaAogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICAvLyBzZXR1cCB3ZWJsb2dnZXIKQEAgLTYyLDcgKzY3LDggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3Qgc2V0dXAgZmFpbGVkIiwgZXgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCisgICAgQEFmdGVyRWFjaAogICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICB0cnkgewpAQCAtNzksNyArODUsOCBAQAogICAgICAgICByZXR1cm4gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKTsKICAgICB9CiAgICAgCi0gICAgCisKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RCb29rbWFya0NSVUQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIEJvb2ttYXJrTWFuYWdlciBibWdyID0gZ2V0Um9sbGVyKCkuZ2V0Qm9va21hcmtNYW5hZ2VyKCk7CkBAIC0xNTEsNiArMTU4LDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IGFsbCBib29rbWFyayBsb29rdXAgbWV0aG9kcy4KICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIF90ZXN0Qm9va21hcmtMb29rdXBzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBCb29rbWFya01hbmFnZXIgYm1nciA9IGdldFJvbGxlcigpLmdldEJvb2ttYXJrTWFuYWdlcigpOwpAQCAtMjIyLDcgKzIzMCw3IEBACiAgICAgICogbWV0aG9kLiAgaSBhbSBsZWF2aW5nIHRoaXMgdGVzdCBoZXJlIGZvciBhIHdoaWxlIGp1c3QgaW4gY2FzZSB3ZSBjaGFuZ2UKICAgICAgKiBvdXIgbWluZHMuCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgX3Rlc3RNb3ZlRm9sZGVyQ29udGVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TW92ZUZvbGRlckNvbnRlbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIEJvb2ttYXJrTWFuYWdlciBibWdyID0gZ2V0Um9sbGVyKCkuZ2V0Qm9va21hcmtNYW5hZ2VyKCk7CiAgICAgICAgIHRyeSB7ICAgICAgICAKIApAQCAtMjkzLDkgKzMwMSw4IEBACiAgICAgICAgICAgICBUZXN0VXRpbHMuZW5kU2Vzc2lvbih0cnVlKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICAKLSAgICBwdWJsaWMgdm9pZCBfdGVzdEJvb2ttYXJrSW1wb3J0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Qm9va21hcmtJbXBvcnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIElucHV0U3RyZWFtIGZpcyA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCIvYm9va21hcmtzLm9wbWwiKTsKICAgICAgICAgZ2V0Um9sbGVyKCkuZ2V0Qm9va21hcmtNYW5hZ2VyKCkuaW1wb3J0Qm9va21hcmtzKApkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL0NvbW1lbnRUZXN0LmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvQ29tbWVudFRlc3QuamF2YQppbmRleCA0MzI2Nzg5Li43YjVmMjE0IDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvQ29tbWVudFRlc3QuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvQ29tbWVudFRlc3QuamF2YQpAQCAtMTgsMzAgKzE4LDI1IEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzOwogCitpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuV2VibG9nZ2VyRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy4qOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dFbnRyeUNvbW1lbnQuQXBwcm92YWxTdGF0dXM7CisKIGltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwogaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5XZWJsb2dnZXJFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuQ29tbWVudFNlYXJjaENyaXRlcmlhOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dFbnRyeUNvbW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZ0VudHJ5Q29tbWVudC5BcHByb3ZhbFN0YXR1czsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVXNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nRW50cnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZzsKIAoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwogCiAvKioKICAqIFRlc3QgQ29tbWVudCByZWxhdGVkIGJ1c2luZXNzIG9wZXJhdGlvbnMuCiAgKgogICogVGhhdCBpbmNsdWRlczoKICAqLwotcHVibGljIGNsYXNzIENvbW1lbnRUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworcHVibGljIGNsYXNzIENvbW1lbnRUZXN0ICB7CiAgICAgCiAgICAgcHVibGljIHN0YXRpYyBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coQ29tbWVudFRlc3QuY2xhc3MpOwogICAgIApAQCAtNDksMTcgKzQ0LDcgQEAKICAgICBXZWJsb2cgdGVzdFdlYmxvZyA9IG51bGw7CiAgICAgV2VibG9nRW50cnkgdGVzdEVudHJ5ID0gbnVsbDsKICAgICAKLSAgICAKLSAgICBwdWJsaWMgQ29tbWVudFRlc3QoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotICAgIAotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoQ29tbWVudFRlc3QuY2xhc3MpOwotICAgIH0KLSAgICAKLSAgICAKKwogICAgIC8qKgogICAgICAqIEFsbCB0ZXN0cyBpbiB0aGlzIHN1aXRlIHJlcXVpcmUgYSB1c2VyLCB3ZWJsb2csIGFuZCBhbiBlbnRyeS4KICAgICAgKi8KZGlmZiAtLWdpdCBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9DdXN0b21UZW1wbGF0ZVJlbmRpdGlvblRlc3QuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9DdXN0b21UZW1wbGF0ZVJlbmRpdGlvblRlc3QuamF2YQppbmRleCBmZTc2ZGZmLi40YzkyYjBkIDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb25UZXN0LmphdmEKKysrIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL0N1c3RvbVRlbXBsYXRlUmVuZGl0aW9uVGVzdC5qYXZhCkBAIC0xOCwyMiArMTgsMjQgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3M7CiAKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5DdXN0b21UZW1wbGF0ZVJlbmRpdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVGhlbWVUZW1wbGF0ZS5Db21wb25lbnRUeXBlOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5UZW1wbGF0ZVJlbmRpdGlvbi5SZW5kaXRpb25UeXBlOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5UZW1wbGF0ZVJlbmRpdGlvbi5UZW1wbGF0ZUxhbmd1YWdlOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5UaGVtZVRlbXBsYXRlLkNvbXBvbmVudFR5cGU7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLlVzZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZzsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nVGVtcGxhdGU7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFmdGVyRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQmVmb3JlRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKIAotcHVibGljIGNsYXNzIEN1c3RvbVRlbXBsYXRlUmVuZGl0aW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlewotICAgIHB1YmxpYyBzdGF0aWMgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFdlYmxvZ1BhZ2VUZXN0LmNsYXNzKTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuKjsKKworcHVibGljIGNsYXNzIEN1c3RvbVRlbXBsYXRlUmVuZGl0aW9uVGVzdCAgeworICAgIHB1YmxpYyBzdGF0aWMgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKEN1c3RvbVRlbXBsYXRlUmVuZGl0aW9uVGVzdC5jbGFzcyk7CiAKICAgICAgICBVc2VyIHRlc3RVc2VyID0gbnVsbDsKICAgICAgICBXZWJsb2cgdGVzdFdlYmxvZyA9IG51bGw7CkBAIC00MiwxOSArNDQsMTAgQEAKICAgICAgICBDdXN0b21UZW1wbGF0ZVJlbmRpdGlvbiBtb2JpbGVDb2RlID0gbnVsbDsKIAogCi0gICAgICAgcHVibGljIEN1c3RvbVRlbXBsYXRlUmVuZGl0aW9uVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICAgICBzdXBlcihuYW1lKTsKLSAgICAgICB9Ci0KLQotICAgICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLSAgICAgICAgICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoQ3VzdG9tVGVtcGxhdGVSZW5kaXRpb25UZXN0LmNsYXNzKTsKLSAgICAgICB9Ci0KLQogICAgICAgIC8qKgogICAgICAgICAqIEFsbCB0ZXN0cyBpbiB0aGlzIHN1aXRlIHJlcXVpcmUgYSB1c2VyIGFuZCBhIHdlYmxvZy4KICAgICAgICAgKi8KKyAgICAgICBAQmVmb3JlRWFjaAogICAgICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgICAgLy8gc2V0dXAgd2VibG9nZ2VyCkBAIC03OCw2ICs3MSw3IEBACiAgICAgICAgICAgIHRlc3RQYWdlLnNldFdlYmxvZyhUZXN0VXRpbHMuZ2V0TWFuYWdlZFdlYnNpdGUodGVzdFdlYmxvZykpOwogICAgICAgIH0KIAorICAgICAgIEBBZnRlckVhY2gKICAgICAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgICAgIHRyeSB7CkBAIC05Niw2ICs5MCw3IEBACiAgICAgICAgLyoqCiAgICAgICAgICogVGVzdCBiYXNpYyBwZXJzaXN0ZW5jZSBvcGVyYXRpb25zIC4uLiBDcmVhdGUsIFVwZGF0ZSwgRGVsZXRlCiAgICAgICAgICovCisgICAgICAgQFRlc3QKICAgICAgICBwdWJsaWMgdm9pZCB0ZXN0VGVtcGxhdGVDUlVEKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIFdlYmxvZ01hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dNYW5hZ2VyKCk7CiAKZGlmZiAtLWdpdCBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9GaWxlQ29udGVudE1hbmFnZXJUZXN0LmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvRmlsZUNvbnRlbnRNYW5hZ2VyVGVzdC5qYXZhCmluZGV4IGQwMGI1YjAuLjJjZmE0NGQgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9GaWxlQ29udGVudE1hbmFnZXJUZXN0LmphdmEKKysrIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL0ZpbGVDb250ZW50TWFuYWdlclRlc3QuamF2YQpAQCAtMTcsMTMgKzE3LDYgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3M7CiAKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5UZXN0VXRpbHM7CkBAIC0zMiwyNSArMjUsMjUgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVXNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51dGlsLlJvbGxlck1lc3NhZ2VzOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5BZnRlckVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CisKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuKjsKIAogLyoqCiAgKiBUZXN0IEZpbGUgTWFuYWdlbWVudCBidXNpbmVzcyBsYXllciBvcGVyYXRpb25zLgogICovCi1wdWJsaWMgY2xhc3MgRmlsZUNvbnRlbnRNYW5hZ2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKK3B1YmxpYyBjbGFzcyBGaWxlQ29udGVudE1hbmFnZXJUZXN0ICB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coRmlsZUNvbnRlbnRNYW5hZ2VyVGVzdC5jbGFzcyk7CiAgICAgVXNlciB0ZXN0VXNlciA9IG51bGw7CiAgICAgV2VibG9nIHRlc3RXZWJsb2cgPSBudWxsOwogCi0gICAgcHVibGljIEZpbGVDb250ZW50TWFuYWdlclRlc3QoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotICAgICAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShGaWxlQ29udGVudE1hbmFnZXJUZXN0LmNsYXNzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKKyAgICBAQmVmb3JlRWFjaAogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gc2V0dXAgd2VibG9nZ2VyCkBAIC01OCw3ICs1MSw3IEBACiAKICAgICB9CiAKLSAgICBAT3ZlcnJpZGUKKyAgICBAQWZ0ZXJFYWNoCiAgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgUHJvcGVydGllc01hbmFnZXIgcG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0UHJvcGVydGllc01hbmFnZXIoKTsKICAgICAgICAgTWFwIGNvbmZpZyA9IHBtZ3IuZ2V0UHJvcGVydGllcygpOwpAQCAtNzMsNiArNjYsNyBAQAogICAgIC8qKgogICAgICAqIFRlc3Qgc2ltcGxlIGZpbGUgc2F2ZS9kZWxldGUuCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmlsZUNSVUQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICB0cnkgewpAQCAtOTksOSArOTMsOSBAQAogICAgICAgICAvLyBGaWxlIHNob3VsZCBub3QgZXhpc3QgaW5pdGlhbGx5CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBGaWxlQ29udGVudCBmaWxlQ29udGVudCA9IGZtZ3IuZ2V0RmlsZUNvbnRlbnQodGVzdFdlYmxvZywgImJvb2ttYXJrcy1maWxlLWlkIik7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKCJOb24tZXhpc3RhbnQgZmlsZSByZXRyaWV2ZWQgd2l0aG91dCBhbnkgZXhjZXB0aW9uIiwgZmFsc2UpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZShmYWxzZSwgIk5vbi1leGlzdGFudCBmaWxlIHJldHJpZXZlZCB3aXRob3V0IGFueSBleGNlcHRpb24iKTsKICAgICAgICAgfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIGFzc2VydFRydWUoIkV4Y2VwdGlvbiB0aHJvd24gZm9yIG5vbi1leGlzdGFudCBmaWxlIGFzIGV4cGVjdGVkIiwgdHJ1ZSk7CisgICAgICAgICAgICBhc3NlcnRUcnVlKHRydWUsICJFeGNlcHRpb24gdGhyb3duIGZvciBub24tZXhpc3RhbnQgZmlsZSBhcyBleHBlY3RlZCIpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gc3RvcmUgYSBmaWxlCkBAIC0xMTksOSArMTEzLDkgQEAKICAgICAgICAgLy8gRmlsZSBzaG91bGQgbm90IGV4aXN0IGFmdGVyIGRlbGV0ZQogICAgICAgICB0cnkgewogICAgICAgICAgICAgRmlsZUNvbnRlbnQgZmlsZUNvbnRlbnQgPSBmbWdyLmdldEZpbGVDb250ZW50KHRlc3RXZWJsb2csICJib29rbWFya3MtZmlsZS1pZCIpOwotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgiTm9uLWV4aXN0YW50IGZpbGUgcmV0cmlldmVkIHdpdGhvdXQgYW55IGV4Y2VwdGlvbiIsIGZhbHNlKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUoZmFsc2UsICJOb24tZXhpc3RhbnQgZmlsZSByZXRyaWV2ZWQgd2l0aG91dCBhbnkgZXhjZXB0aW9uIik7CiAgICAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBhc3NlcnRUcnVlKCJFeGNlcHRpb24gdGhyb3duIGZvciBub24tZXhpc3RhbnQgZmlsZSBhcyBleHBlY3RlZCIsIHRydWUpOworICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh0cnVlLCAiRXhjZXB0aW9uIHRocm93biBmb3Igbm9uLWV4aXN0YW50IGZpbGUgYXMgZXhwZWN0ZWQiKTsKICAgICAgICAgfQogCiAgICAgICAgIFRlc3RVdGlscy5lbmRTZXNzaW9uKHRydWUpOwpAQCAtMTM0LDYgKzEyOCw3IEBACiAgICAgICoKICAgICAgKiBUaGlzIHNob3VsZCB0ZXN0IGFsbCBjb25kaXRpb25zIHdoZXJlIGEgc2F2ZSBzaG91bGQgZmFpbC4KICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RDYW5TYXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgdHJ5IHsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9Gb2xkZXJDUlVEVGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL0ZvbGRlckNSVURUZXN0LmphdmEKaW5kZXggZDZjZjljMS4uZTQyNDdiZSAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL0ZvbGRlckNSVURUZXN0LmphdmEKKysrIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL0ZvbGRlckNSVURUZXN0LmphdmEKQEAgLTE4LDE4ICsxOCwyMyBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzczsKIAotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dCb29rbWFya0ZvbGRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVXNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dCb29rbWFya0ZvbGRlcjsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQWZ0ZXJFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0TnVsbDsKIAogLyoqCiAgKiBUZXN0IGJhc2ljIGZvbGRlciBvcGVyYXRpb25zLgogICovCi1wdWJsaWMgY2xhc3MgRm9sZGVyQ1JVRFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CitwdWJsaWMgY2xhc3MgRm9sZGVyQ1JVRFRlc3QgIHsKICAgICAKICAgICBwdWJsaWMgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhGb2xkZXJDUlVEVGVzdC5jbGFzcyk7CiAgICAgCkBAIC00MCw2ICs0NSw3IEBACiAgICAgLyoqCiAgICAgICogQWxsIHRlc3RzIGluIHRoaXMgc3VpdGUgcmVxdWlyZSBhIHVzZXIgYW5kIGEgd2VibG9nLgogICAgICAqLworICAgIEBCZWZvcmVFYWNoCiAgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIGxvZy5pbmZvKCJCRUdJTiIpOwpAQCAtNTgsNyArNjQsOCBAQAogICAgICAgICAKICAgICAgICAgbG9nLmluZm8oIkVORCIpOwogICAgIH0KLSAgICAKKworICAgIEBBZnRlckVhY2gKICAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgbG9nLmluZm8oIkJFR0lOIik7CkBAIC03OSw2ICs4Niw3IEBACiAgICAgLyoqCiAgICAgICogVGVzdCBhZGQvbW9kaWZ5L3JlbW92ZSBvZiBmb2xkZXJzLgogICAgICAqLworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEJhc2ljQ1JVRCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgbG9nLmluZm8oIkJFR0lOIik7CmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvRm9sZGVyRnVuY3Rpb25hbGl0eVRlc3QuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9Gb2xkZXJGdW5jdGlvbmFsaXR5VGVzdC5qYXZhCmluZGV4IGNiOGZlZTUuLjFiMDg2ZjQgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9Gb2xkZXJGdW5jdGlvbmFsaXR5VGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9Gb2xkZXJGdW5jdGlvbmFsaXR5VGVzdC5qYXZhCkBAIC0xOCwyMSArMTgsMjUgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3M7CiAKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dCb29rbWFya0ZvbGRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVXNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dCb29rbWFya0ZvbGRlcjsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQWZ0ZXJFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwogCitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwogLyoqCiAgKiBUZXN0IGZvbGRlciBidXNpbmVzcyBmdW5jdGlvbnMgYW5kIGxvb2t1cHMuCiAgKi8KLXB1YmxpYyBjbGFzcyBGb2xkZXJGdW5jdGlvbmFsaXR5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKK3B1YmxpYyBjbGFzcyBGb2xkZXJGdW5jdGlvbmFsaXR5VGVzdCAgewogICAgIAogICAgIHB1YmxpYyBzdGF0aWMgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKEZvbGRlckZ1bmN0aW9uYWxpdHlUZXN0LmNsYXNzKTsKICAgICAKQEAgLTQyLDEwICs0NiwxMiBAQAogICAgIFdlYmxvZ0Jvb2ttYXJrRm9sZGVyIGYyID0gbnVsbDsKICAgICBXZWJsb2dCb29rbWFya0ZvbGRlciBmMyA9IG51bGw7CiAgICAgV2VibG9nQm9va21hcmtGb2xkZXIgdGVzdEZvbGRlciA9IG51bGw7Ci0gICAgCisKKwogICAgIC8qKgogICAgICAqIEFsbCB0ZXN0cyBpbiB0aGlzIHN1aXRlIHJlcXVpcmUgYSB1c2VyIGFuZCBhIHdlYmxvZy4KICAgICAgKi8KKyAgICBAQmVmb3JlRWFjaAogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBsb2cuaW5mbygiQkVHSU4iKTsKQEAgLTc0LDYgKzgwLDcgQEAKICAgICAgICAgbG9nLmluZm8oIkVORCIpOwogICAgIH0KICAgICAKKyAgICBAQWZ0ZXJFYWNoCiAgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIGxvZy5pbmZvKCJCRUdJTiIpOwpAQCAtOTQsNiArMTAxLDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IHRoZSBoYXNCb29rbWFya0ZvbGRlcigpIG1ldGhvZCBvbiBXZWJsb2cuCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0SGFzRm9sZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBsb2cuaW5mbygiQkVHSU4iKTsKQEAgLTExMCw2ICsxMTgsNyBAQAogICAgIC8qKiAKICAgICAgKiBFbnN1cmUgdGhhdCBkdXBsaWNhdGUgZm9sZGVyIG5hbWUgd2lsbCB0aHJvdyBXZWJsb2dnZXJFeGNlcHRpb24gCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0VW5pcXVlbmVzc09mRm9sZGVyTmFtZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIGxvZy5pbmZvKCJCRUdJTiIpOwpAQCAtMTQ0LDYgKzE1Myw3IEBACiAgICAgLyoqCiAgICAgICogVGVzdCBmb2xkZXIgbG9va3VwIGJ5IGlkLgogICAgICAqLworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdExvb2t1cEZvbGRlckJ5SWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIGxvZy5pbmZvKCJCRUdJTiIpOwpAQCAtMTYyLDYgKzE3Miw3IEBACiAgICAgLyoqCiAgICAgICogVGVzdCBmb2xkZXIgbG9va3VwIGJ5IGlkLgogICAgICAqLworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdExvb2t1cEZvbGRlckJ5TmFtZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgbG9nLmluZm8oIkJFR0lOIik7CkBAIC0xODQsOCArMTk1LDggQEAKICAgICAgICAgCiAgICAgICAgIGxvZy5pbmZvKCJFTkQiKTsKICAgICB9Ci0gICAgCi0gICAgCisKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RMb29rdXBBbGxGb2xkZXJzQnlXZWJsb2coKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIGxvZy5pbmZvKCJCRUdJTiIpOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL0hpdENvdW50VGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL0hpdENvdW50VGVzdC5qYXZhCmluZGV4IGQ1ZjczODguLjRmYWE1MTEgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9IaXRDb3VudFRlc3QuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvSGl0Q291bnRUZXN0LmphdmEKQEAgLTE4LDQzICsxOCwzNSBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzczsKIAotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dIaXRDb3VudDsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVXNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dIaXRDb3VudDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQWZ0ZXJFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwogCitpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLio7CiAKIC8qKgogICogVGVzdCBIaXRDb3VudCByZWxhdGVkIGJ1c2luZXNzIG9wZXJhdGlvbnMuCiAgKi8KLXB1YmxpYyBjbGFzcyBIaXRDb3VudFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CitwdWJsaWMgY2xhc3MgSGl0Q291bnRUZXN0ICB7CiAgICAgCiAgICAgcHVibGljIHN0YXRpYyBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coSGl0Q291bnRUZXN0LmNsYXNzKTsKICAgICAKICAgICBVc2VyIHRlc3RVc2VyID0gbnVsbDsKICAgICBXZWJsb2cgdGVzdFdlYmxvZyA9IG51bGw7Ci0gICAgCi0gICAgCi0gICAgcHVibGljIEhpdENvdW50VGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotICAgICAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShIaXRDb3VudFRlc3QuY2xhc3MpOwotICAgIH0KLSAgICAKLSAgICAKKwogICAgIC8qKgogICAgICAqIEFsbCB0ZXN0cyBpbiB0aGlzIHN1aXRlIHJlcXVpcmUgYSB1c2VyIGFuZCBhIHdlYmxvZy4KICAgICAgKi8KKyAgICBAQmVmb3JlRWFjaAogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICAvLyBzZXR1cCB3ZWJsb2dnZXIKQEAgLTY5LDcgKzYxLDggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3Qgc2V0dXAgZmFpbGVkIiwgZXgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCisgICAgQEFmdGVyRWFjaAogICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICB0cnkgewpAQCAtODYsNiArNzksNyBAQAogICAgIC8qKgogICAgICAqIFRlc3QgYmFzaWMgcGVyc2lzdGVuY2Ugb3BlcmF0aW9ucyAuLi4gQ3JlYXRlLCBVcGRhdGUsIERlbGV0ZS4KICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RIaXRDb3VudENSVUQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIFdlYmxvZ0VudHJ5TWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ0VudHJ5TWFuYWdlcigpOwpAQCAtMTI2LDcgKzEyMCw3IEBACiAgICAgICAgIGFzc2VydE51bGwoaGl0Q291bnQpOwogICAgIH0KICAgICAKLSAgICAKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RIaXRDb3VudExvb2t1cHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIFdlYmxvZ0VudHJ5TWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ0VudHJ5TWFuYWdlcigpOwpAQCAtMTY0LDcgKzE1OCw3IEBACiAgICAgICAgIGFzc2VydE51bGwoaGl0Q291bnQpOwogICAgIH0KICAgICAKLSAgICAKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RJbmNyZW1lbnRIaXRDb3VudCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCk7CkBAIC0yMDUsNyArMTk5LDcgQEAKICAgICAgICAgYXNzZXJ0TnVsbChoaXRDb3VudCk7CiAgICAgfQogICAgIAotICAgIAorICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFJlc2V0SGl0Q291bnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFdlYmxvZ0VudHJ5TWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ0VudHJ5TWFuYWdlcigpOwogICAgICAgICAKQEAgLTI2Niw3ICsyNjAsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0SG90V2VibG9ncygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCk7CmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvSW5kZXhNYW5hZ2VyVGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL0luZGV4TWFuYWdlclRlc3QuamF2YQppbmRleCAzN2I3MTgzLi42MTdmMDA4IDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvSW5kZXhNYW5hZ2VyVGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9JbmRleE1hbmFnZXJUZXN0LmphdmEKQEAgLTE3LDQ0ICsxNywzOSBAQAogKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzOwogCi1pbXBvcnQgamF2YS5zcWwuVGltZXN0YW1wOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnV0aWwuUm9sbGVyQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5UZXN0VXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLnNlYXJjaC5JbmRleE1hbmFnZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLnNlYXJjaC5JbmRleE1hbmFnZXJJbXBsOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5zZWFyY2gub3BlcmF0aW9ucy5BZGRFbnRyeU9wZXJhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3Muc2VhcmNoLm9wZXJhdGlvbnMuU2VhcmNoT3BlcmF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5zZWFyY2guSW5kZXhNYW5hZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5Vc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dFbnRyeTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nRW50cnkuUHViU3RhdHVzOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZ0NhdGVnb3J5OwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKLWltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dFbnRyeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nRW50cnkuUHViU3RhdHVzOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5BZnRlckVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CiAKK2ltcG9ydCBqYXZhLnNxbC5UaW1lc3RhbXA7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0RXF1YWxzOwogCiAvKioKICAqIFRlc3QgU2VhcmNoIE1hbmFnZXIgYnVzaW5lc3MgbGF5ZXIgb3BlcmF0aW9ucy4KICAqLwotcHVibGljIGNsYXNzIEluZGV4TWFuYWdlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CitwdWJsaWMgY2xhc3MgSW5kZXhNYW5hZ2VyVGVzdCAgewogICAgIFVzZXIgdGVzdFVzZXIgPSBudWxsOwogICAgIFdlYmxvZyB0ZXN0V2VibG9nID0gbnVsbDsKICAgICBwdWJsaWMgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhJbmRleE1hbmFnZXJUZXN0LmNsYXNzKTsgICAgCiAKLSAgICBwdWJsaWMgSW5kZXhNYW5hZ2VyVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0gICAgICAgIAotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoSW5kZXhNYW5hZ2VyVGVzdC5jbGFzcyk7Ci0gICAgfQotCiAgICAgLyoqCiAgICAgICogQWxsIHRlc3RzIGluIHRoaXMgc3VpdGUgcmVxdWlyZSBhIHVzZXIgYW5kIGEgd2VibG9nLgogICAgICAqLworICAgIEBCZWZvcmVFYWNoCiAgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIC8vIHNldHVwIHdlYmxvZ2dlcgpAQCAtNzMsNyArNjgsOCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBzZXR1cCBmYWlsZWQiLCBleCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKKyAgICBAQWZ0ZXJFYWNoCiAgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIHRyeSB7CkBAIC04NSw3ICs4MSw4IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJUZXN0IHRlYXJkb3duIGZhaWxlZCIsIGV4KTsKICAgICAgICAgfQogICAgIH0KLSAgICAgICAgCisKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RTZWFyY2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIHdlbSA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCk7CiAKZGlmZiAtLWdpdCBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9NZWRpYUZpbGVUZXN0LmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvTWVkaWFGaWxlVGVzdC5qYXZhCmluZGV4IDE2Y2Y3YWEuLjYyZWFjNWUgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9NZWRpYUZpbGVUZXN0LmphdmEKKysrIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL01lZGlhRmlsZVRlc3QuamF2YQpAQCAtMTcsNDEgKzE3LDI4IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzOwogCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuc3FsLlRpbWVzdGFtcDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuV2VibG9nZ2VyRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5qcGEuSlBBTWVkaWFGaWxlTWFuYWdlckltcGw7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmNvbmZpZy5XZWJsb2dnZXJDb25maWc7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLk1lZGlhRmlsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuTWVkaWFGaWxlRGlyZWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5NZWRpYUZpbGVGaWx0ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLio7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLk1lZGlhRmlsZUZpbHRlci5NZWRpYUZpbGVPcmRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuTWVkaWFGaWxlRmlsdGVyLlNpemVGaWx0ZXJUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5NZWRpYUZpbGVUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5SdW50aW1lQ29uZmlnUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLlVzZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZzsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudXRpbC5Sb2xsZXJNZXNzYWdlczsKLWltcG9ydCBvcmcuanVuaXQuRml4TWV0aG9kT3JkZXI7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lcnMuTWV0aG9kU29ydGVyczsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLnNxbC5UaW1lc3RhbXA7CitpbXBvcnQgamF2YS51dGlsLio7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuKjsKIAogLyoqCiAgKiBUZXN0IG1lZGlhIGZpbGUgcmVsYXRlZCBidXNpbmVzcyBvcGVyYXRpb25zLgogICovCi1ARml4TWV0aG9kT3JkZXIoTWV0aG9kU29ydGVycy5OQU1FX0FTQ0VORElORykKLXB1YmxpYyBjbGFzcyBNZWRpYUZpbGVUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworcHVibGljIGNsYXNzIE1lZGlhRmlsZVRlc3QgIHsKIAogICAgIHB1YmxpYyBzdGF0aWMgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKE1lZGlhRmlsZVRlc3QuY2xhc3MpOwogICAgIC8vIHN0YXRpYyBmaW5hbCBTdHJpbmcgcnVudGltZUVudjsKQEAgLTYyLDggKzQ5LDYgQEAKIAogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFRlc3RVdGlscy5zZXR1cFdlYmxvZ2dlcigpOwotICAgICAgIC8vIGFzc2VydEVxdWFscygwTCwgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dNYW5hZ2VyKCkKLSAgICAgICAvLyAgICAgICAgIC5nZXRXZWJsb2dDb3VudCgpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewpAQCAtOTAsNyArNzUsNyBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBzZXR1cCBmYWlsZWQiLCBleCk7CiAgICAgICAgIH0KIAotICAgICAgICAvKioKKyAgICAgICAgLyoKICAgICAgICAgICogUmVhbCB0ZXN0IHN0YXJ0cyBoZXJlLgogICAgICAgICAgKi8KICAgICAgICAgTWVkaWFGaWxlTWFuYWdlciBtZk1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkKQEAgLTIwMSw2ICsxODYsNyBAQAogICAgIC8qKgogICAgICAqIFRlc3QgZ2V0dGluZyBsaXN0IG9mIGFsbCBkaXJlY3RvcmllcyBmb3IgYSBnaXZlbiB1c2VyLgogICAgICAqLworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEdldE1lZGlhRmlsZURpcmVjdG9yaWVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgVXNlciB0ZXN0VXNlciA9IG51bGw7CkBAIC0yNzUsNiArMjYxLDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IGRlbGV0aW9uIG9mIG1lZGlhIGZpbGUKICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3REZWxldGVNZWRpYUZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVXNlciB0ZXN0VXNlcjsKICAgICAgICAgV2VibG9nIHRlc3RXZWJsb2c7CkBAIC0zNDUsNiArMzMyLDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IGNyZWF0aW9uIG9mIG1lZGlhIGZpbGUuCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTWVkaWFGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgVXNlciB0ZXN0VXNlcjsKQEAgLTQwMCw2ICszODgsNyBAQAogICAgIC8qKgogICAgICAqIFRlc3Qgc2VhcmNoaW5nIG1lZGlhIGZpbGUuCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0U2VhcmNoTWVkaWFGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFVzZXIgdGVzdFVzZXIgPSBudWxsOwogICAgICAgICBXZWJsb2cgdGVzdFdlYmxvZyA9IG51bGw7CkBAIC02MjQsNiArNjEzLDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IHNlYXJjaGluZyBtZWRpYSBmaWxlIHdpdGggcGFnaW5nIGxvZ2ljLgogICAgICAqLworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFNlYXJjaE1lZGlhRmlsZVBhZ2luZygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBVc2VyIHRlc3RVc2VyID0gbnVsbDsKICAgICAgICAgV2VibG9nIHRlc3RXZWJsb2cgPSBudWxsOwpAQCAtNzE0LDYgKzcwNCw3IEBACiAgICAgLyoqCiAgICAgICogVGVzdCBzZWFyY2hpbmcgbWVkaWEgZmlsZSB3aXRoIHBhZ2luZyBsb2dpYy4KICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RTZWFyY2hNZWRpYUZpbGVPcmRlckJ5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFVzZXIgdGVzdFVzZXIgPSBudWxsOwogICAgICAgICBXZWJsb2cgdGVzdFdlYmxvZyA9IG51bGw7CkBAIC04MDMsNiArNzk0LDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IG1lZGlhIGZpbGUgdXBkYXRlCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0VXBkYXRlTWVkaWFGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFVzZXIgdGVzdFVzZXIgPSBudWxsOwogICAgICAgICBXZWJsb2cgdGVzdFdlYmxvZyA9IG51bGw7CkBAIC04NzAsNiArODYyLDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IG1lZGlhIGZpbGUgYW5kIGRpcmVjdG9yeSBnZXRzCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0RGlyZWN0b3J5Q29udGVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgVXNlciB0ZXN0VXNlciA9IG51bGw7CiAgICAgICAgIFdlYmxvZyB0ZXN0V2VibG9nID0gbnVsbDsKQEAgLTk1Nyw2ICs5NTAsNyBAQAogICAgIC8qKgogICAgICAqIFRlc3QgbW92aW5nIGZpbGVzIGFjcm9zcyBkaXJlY3Rvcmllcy4KICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RNb3ZlRGlyZWN0b3J5Q29udGVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBVc2VyIHRlc3RVc2VyID0gbnVsbDsKQEAgLTEwNTMsNiArMTA0Nyw3IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RTdG9yYWdlVXBncmFkZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBVc2VyIHRlc3RVc2VyID0gbnVsbDsKICAgICAgICAgV2VibG9nIHRlc3RXZWJsb2cxID0gbnVsbDsKQEAgLTEwNzksMTggKzEwNzQsMTggQEAKICAgICAgICAgICAgICAgICAgICAgLmdldE1lZGlhRmlsZU1hbmFnZXIoKTsKICAgICAgICAgICAgIEpQQU1lZGlhRmlsZU1hbmFnZXJJbXBsIG1tZ3IgPSAoSlBBTWVkaWFGaWxlTWFuYWdlckltcGwpIG1ncjsKIAotICAgICAgICAgICAgYXNzZXJ0VHJ1ZSgiVXBncmFkZSByZXF1aXJlZCIsIG1tZ3IuaXNGaWxlU3RvcmFnZVVwZ3JhZGVSZXF1aXJlZCgpKTsKKyAgICAgICAgICAgIGFzc2VydFRydWUobW1nci5pc0ZpbGVTdG9yYWdlVXBncmFkZVJlcXVpcmVkKCksICJVcGdyYWRlIHJlcXVpcmVkIiApOwogCiAgICAgICAgICAgICBtbWdyLnVwZ3JhZGVGaWxlU3RvcmFnZSgpOwogICAgICAgICAgICAgVGVzdFV0aWxzLmVuZFNlc3Npb24odHJ1ZSk7CiAKLSAgICAgICAgICAgIGFzc2VydEZhbHNlKCJVcGdyYWRlIHJlcXVpcmVkIiwgbW1nci5pc0ZpbGVTdG9yYWdlVXBncmFkZVJlcXVpcmVkKCkpOworICAgICAgICAgICAgYXNzZXJ0RmFsc2UobW1nci5pc0ZpbGVTdG9yYWdlVXBncmFkZVJlcXVpcmVkKCksICJVcGdyYWRlIHJlcXVpcmVkIiApOwogCiAgICAgICAgICAgICAvLyBub3csIGxldCdzIGNoZWNrIHRvIHNlZSBpZiBtaWdyYXRpb24gd2FzIHN1Y2Nlc3NmdWwKIAogICAgICAgICAgICAgTWVkaWFGaWxlRGlyZWN0b3J5IHJvb3QxID0gbWdyCiAgICAgICAgICAgICAgICAgICAgIC5nZXREZWZhdWx0TWVkaWFGaWxlRGlyZWN0b3J5KHRlc3RXZWJsb2cxKTsKLSAgICAgICAgICAgIGFzc2VydE5vdE51bGwoInRlc3RibG9nMSdzIG1lZGlhZmlsZSBkaXIgZXhpc3RzIiwgcm9vdDEpOworICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbChyb290MSwgInRlc3RibG9nMSdzIG1lZGlhZmlsZSBkaXIgZXhpc3RzIiApOwogICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbChtZ3IuZ2V0TWVkaWFGaWxlQnlQYXRoKHRlc3RXZWJsb2cxLCAiL3N1YjEvaGF3ay5qcGciKSk7CiAgICAgICAgICAgICBhc3NlcnROb3ROdWxsKG1nci5nZXRNZWRpYUZpbGVCeVBhdGgodGVzdFdlYmxvZzEsCiAgICAgICAgICAgICAgICAgICAgICIvc3ViMi9uYXNhLmpwZyIpKTsKQEAgLTExMDIsNyArMTA5Nyw3IEBACiAKICAgICAgICAgICAgIE1lZGlhRmlsZURpcmVjdG9yeSByb290MiA9IG1ncgogICAgICAgICAgICAgICAgICAgICAuZ2V0RGVmYXVsdE1lZGlhRmlsZURpcmVjdG9yeSh0ZXN0V2VibG9nMik7Ci0gICAgICAgICAgICBhc3NlcnROb3ROdWxsKCJ0ZXN0YmxvZzIncyBtZWRpYWZpbGUgZGlyIGV4aXN0cyIsIHJvb3QyKTsKKyAgICAgICAgICAgIGFzc2VydE5vdE51bGwocm9vdDIsICJ0ZXN0YmxvZzIncyBtZWRpYWZpbGUgZGlyIGV4aXN0cyIpOwogICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbChyb290Mi5nZXRNZWRpYUZpbGUoImFtc3RlcmRhbS5qcGciKSk7CiAgICAgICAgICAgICBhc3NlcnROb3ROdWxsKHJvb3QyLmdldE1lZGlhRmlsZSgicDQ3LXRodW5kZXJib2x0LmpwZyIpKTsKICAgICAgICAgICAgIGFzc2VydE5vdE51bGwocm9vdDIuZ2V0TWVkaWFGaWxlKCJyb2xsZXJ3aWtpLnBuZyIpKTsKQEAgLTExMzMsNyArMTEyOCw3IEBACiAgICAgICogCiAgICAgICogVGhpcyB0ZXN0IGZhaWxzIGJ1dCBpdCBzaG91bGQgbm90LCBzbyBaJ2VkIG91dCBub3QgdG8gcnVuLgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIFp0ZXN0RGlyZWN0b3J5RGVsZXRlQXNzb2NpYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RGlyZWN0b3J5RGVsZXRlQXNzb2NpYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBVc2VyIHRlc3RVc2VyID0gbnVsbDsKICAgICAgICAgV2VibG9nIHRlc3RXZWJsb2cgPSBudWxsOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1Blcm1pc3Npb25UZXN0LmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvUGVybWlzc2lvblRlc3QuamF2YQppbmRleCA5NmNlZDYzLi44YjVjYWY1IDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvUGVybWlzc2lvblRlc3QuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvUGVybWlzc2lvblRlc3QuamF2YQpAQCAtMTcsNDQgKzE3LDM2IEBACiAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3M7CiAKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5Vc2VyOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZ1Blcm1pc3Npb247CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFmdGVyRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQmVmb3JlRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKIAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLio7CiAKIC8qKgogICogVGVzdCBVc2VyL1dlYmxvZyBQZXJtaXNzaW9ucyByZWxhdGVkIGJ1c2luZXNzIG9wZXJhdGlvbnMuCiAgKi8KLXB1YmxpYyBjbGFzcyBQZXJtaXNzaW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKK3B1YmxpYyBjbGFzcyBQZXJtaXNzaW9uVGVzdCAgewogICAgIAogICAgIHB1YmxpYyBzdGF0aWMgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFBlcm1pc3Npb25UZXN0LmNsYXNzKTsKICAgICAKICAgICBVc2VyIHRlc3RVc2VyID0gbnVsbDsKICAgICBXZWJsb2cgdGVzdFdlYmxvZyA9IG51bGw7Ci0gICAgCi0gICAgCi0gICAgcHVibGljIFBlcm1pc3Npb25UZXN0KFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFBlcm1pc3Npb25UZXN0LmNsYXNzKTsKLSAgICB9Ci0gICAgCi0gICAgCisKICAgICAvKioKICAgICAgKiBBbGwgdGVzdHMgaW4gdGhpcyBzdWl0ZSByZXF1aXJlIGEgdXNlciBhbmQgYSB3ZWJsb2cuCiAgICAgICovCisgICAgQEJlZm9yZUVhY2gKICAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgbG9nLmluZm8oIkJFR0lOIik7CkBAIC03Myw3ICs2NSw4IEBACiAgICAgICAgIAogICAgICAgICBsb2cuaW5mbygiRU5EIik7CiAgICAgfQotICAgIAorCisgICAgQEFmdGVyRWFjaAogICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBsb2cuaW5mbygiQkVHSU4iKTsKQEAgLTk0LDYgKzg3LDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IGJhc2ljIHBlcnNpc3RlbmNlIG9wZXJhdGlvbnMgLi4uIENyZWF0ZSwgVXBkYXRlLCBEZWxldGUuCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0UGVybWlzc2lvbnNDUlVEKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBsb2cuaW5mbygiQkVHSU4iKTsKQEAgLTE3Miw2ICsxNjYsNyBAQAogICAgIC8qKgogICAgICAqIFRlc3QgbG9va3VwIG1lY2hhbmlzbXMuCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0UGVybWlzc2lvbnNMb29rdXBzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBsb2cuaW5mbygiQkVHSU4iKTsKQEAgLTIzOCw2ICsyMzMsNyBAQAogICAgIC8qKgogICAgICAqIFRlc3RzIHdlYmxvZyBpbnZpdGF0aW9uIHByb2Nlc3MuCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0SW52aXRhdGlvbnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIGxvZy5pbmZvKCJCRUdJTiIpOwpAQCAtMzAwLDYgKzI5Niw3IEBACiAgICAgLyoqCiAgICAgICogVGVzdHMgd2VibG9nIGludml0YXRpb24gcHJvY2Vzcy4KICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RQZXJtaXNzaW9uQ2hlY2tzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBsb2cuaW5mbygiQkVHSU4iKTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9QaW5nc1Rlc3QuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9QaW5nc1Rlc3QuamF2YQppbmRleCAxMWZjYmRlLi42MjM2NGIxIDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvUGluZ3NUZXN0LmphdmEKKysrIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1BpbmdzVGVzdC5qYXZhCkBAIC0yMywxMSArMjMsNiBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzczsKIAotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKQEAgLTM3LDEyICszMiwxOSBAQAogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5QaW5nVGFyZ2V0OwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5Vc2VyOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2c7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFmdGVyRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQmVmb3JlRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKIAoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuKjsKIAogLyoqCiAgKiBUZXN0IFBpbmdzIHJlbGF0ZWQgYnVzaW5lc3Mgb3BlcmF0aW9ucy4KICAqLwotcHVibGljIGNsYXNzIFBpbmdzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKK3B1YmxpYyBjbGFzcyBQaW5nc1Rlc3QgIHsKICAgICAKICAgICBwdWJsaWMgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhQaW5nc1Rlc3QuY2xhc3MpOwogICAgIApAQCAtNTAsMjAgKzUyLDExIEBACiAgICAgV2VibG9nIHRlc3RXZWJsb2cgPSBudWxsOwogICAgIFBpbmdUYXJnZXQgdGVzdENvbW1vblBpbmcgPSBudWxsOwogCi0gICAgCi0gICAgcHVibGljIFBpbmdzVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotICAgICAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShQaW5nc1Rlc3QuY2xhc3MpOwotICAgIH0KLSAgICAKLSAgICAKKwogICAgIC8qKgogICAgICAqIEFsbCB0ZXN0cyBpbiB0aGlzIHN1aXRlIHJlcXVpcmUgYSB1c2VyIGFuZCBhIHdlYmxvZy4KICAgICAgKi8KKyAgICBAQmVmb3JlRWFjaAogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICAvLyBzZXR1cCB3ZWJsb2dnZXIKQEAgLTgyLDcgKzc1LDggQEAKICAgICAgICAgdGVzdENvbW1vblBpbmcuc2V0TmFtZSgidGVzdENvbW1vblBpbmciKTsKICAgICAgICAgdGVzdENvbW1vblBpbmcuc2V0UGluZ1VybCgiaHR0cDovL2xvY2FsaG9zdC90ZXN0Q29tbW9uUGluZyIpOwogICAgIH0KLSAgICAKKworICAgIEBBZnRlckVhY2gKICAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgdHJ5IHsKQEAgLTEwMSw2ICs5NSw3IEBACiAgICAgLyoqCiAgICAgICogVGVzdCBiYXNpYyBwZXJzaXN0ZW5jZSBvcGVyYXRpb25zIC4uLiBDcmVhdGUsIFVwZGF0ZSwgRGVsZXRlCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0UGluZ1RhcmdldENSVUQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIFBpbmdUYXJnZXRNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0UGluZ1RhcmdldE1hbmFnZXIoKTsKQEAgLTE0Niw2ICsxNDEsNyBAQAogICAgIC8qKgogICAgICAqIFRlc3QgbG9va3VwIG1lY2hhbmlzbXMgLi4uIGlkLCBhbGwgY29tbW9uIGZvciB3ZWJsb2cKICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RQaW5nVGFyZ2V0TG9va3VwcygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgUGluZ1RhcmdldE1hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRQaW5nVGFyZ2V0TWFuYWdlcigpOwpAQCAtMTc5LDYgKzE3NSw3IEBACiAgICAgLyoqCiAgICAgICogVGVzdCBiYXNpYyBwZXJzaXN0ZW5jZSBvcGVyYXRpb25zIC4uLiBDcmVhdGUsIFVwZGF0ZSwgRGVsZXRlCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0QXV0b1BpbmdDUlVEKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBBdXRvUGluZ01hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRBdXRvcGluZ01hbmFnZXIoKTsKQEAgLTIzMiw2ICsyMjksNyBAQAogICAgIC8qKgogICAgICAqIFRlc3Qgc3BlY2lhbCBwaW5nIHRhcmdldCByZW1vdmFsIG1ldGhvZHMgLi4uIGJ5IHdlYmxvZy90YXJnZXQsIGNvbGxlY3Rpb24sIGFsbAogICAgICAqLworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFBpbmdUYXJnZXRSZW1vdmFscygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgQXV0b1BpbmdNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0QXV0b3BpbmdNYW5hZ2VyKCk7CkBAIC0zMDYsNiArMzA0LDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IGxvb2t1cCBtZWNoYW5pc21zIC4uLiBpZCwgcGluZyB0YXJnZXQsIHdlYmxvZwogICAgICAqLworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEF1dG9QaW5nTG9va3VwcygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgQXV0b1BpbmdNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0QXV0b3BpbmdNYW5hZ2VyKCk7CkBAIC0zNTIsMTkgKzM1MSw1IEBACiAgICAgICAgIFRlc3RVdGlscy50ZWFyZG93blBpbmdUYXJnZXQocGluZ1RhcmdldC5nZXRJZCgpKTsKICAgICAgICAgVGVzdFV0aWxzLmVuZFNlc3Npb24odHJ1ZSk7CiAgICAgfQotICAgIAotICAgIAotICAgIHB1YmxpYyB2b2lkIHRlc3RBcHBsaWNhYmxlQXV0b1BpbmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIAotICAgIH0KLSAgICAKLSAgICAKLSAgICAvKioKLSAgICAgKiBUZXN0IHRoYXQgd2UgY2FuIHByb3Blcmx5IHJlbW92ZSBhIHBpbmcgdGFyZ2V0IHdoZW4gaXQgaGFzCi0gICAgICogYXNzb2NpYXRlZCBlbGVtZW50cyBsaWtlIGF1dG8gcGluZ3MgYW5kIHBpbmcgcXVldWUgZW50cmllcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlTG9hZGVkUGluZ1RhcmdldCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgdGhpcyB0ZXN0Ci0gICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvUGxhbmV0TWFuYWdlckxvY2FsVGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1BsYW5ldE1hbmFnZXJMb2NhbFRlc3QuamF2YQppbmRleCA2NjhhMzcyLi5kZWFhZjIzIDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvUGxhbmV0TWFuYWdlckxvY2FsVGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9QbGFuZXRNYW5hZ2VyTG9jYWxUZXN0LmphdmEKQEAgLTE1LDQ1ICsxNSw0NSBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzczsKIAotaW1wb3J0IGphdmEuc3FsLlRpbWVzdGFtcDsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci5wbGFuZXQuYnVzaW5lc3MuUGxhbmV0TWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci5wbGFuZXQucG9qb3MuUGxhbmV0OwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLnBsYW5ldC5wb2pvcy5QbGFuZXRHcm91cDsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5Vc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dFbnRyeTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nRW50cnkuUHViU3RhdHVzOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBsYW5ldC50YXNrcy5SZWZyZXNoUm9sbGVyUGxhbmV0VGFzazsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucGxhbmV0LnRhc2tzLlN5bmNXZWJzaXRlc1Rhc2s7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLlVzZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZzsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nRW50cnk7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZ0VudHJ5LlB1YlN0YXR1czsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQWZ0ZXJFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwogCitpbXBvcnQgamF2YS5zcWwuVGltZXN0YW1wOworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgc3RhdGljIGp1bml0LmZyYW1ld29yay5Bc3NlcnQuZmFpbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy5hc3NlcnROb3ROdWxsOwogCiAKIC8qKgogICogVGVzdCBkYXRhYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBQbGFuZXRNYW5hZ2VyIGZvciBsb2NhbCBmZWVkcy4KICAqIEBhdXRob3IgRGF2ZSBKb2huc29uCiAgKi8KLXB1YmxpYyBjbGFzcyBQbGFuZXRNYW5hZ2VyTG9jYWxUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworcHVibGljIGNsYXNzIFBsYW5ldE1hbmFnZXJMb2NhbFRlc3QgIHsKICAgICBwdWJsaWMgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhQbGFuZXRNYW5hZ2VyTG9jYWxUZXN0LmNsYXNzKTsKICAgICAKICAgICBVc2VyIHRlc3RVc2VyID0gbnVsbDsKICAgICBXZWJsb2cgdGVzdFdlYmxvZyA9IG51bGw7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotICAgICAgICBUZXN0UnVubmVyLnJ1bihQbGFuZXRNYW5hZ2VyTG9jYWxUZXN0LmNsYXNzKTsKLSAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBBbGwgdGVzdHMgaW4gdGhpcyBzdWl0ZSByZXF1aXJlIGEgdXNlciBhbmQgYSB3ZWJsb2cuCiAgICAgICovCisgICAgQEJlZm9yZUVhY2gKICAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgdHJ5IHsKQEAgLTExMiw3ICsxMTIsOCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBzZXR1cCBmYWlsZWQiLCBleCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKKyAgICBAQWZ0ZXJFYWNoCiAgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIHRyeSB7CkBAIC0xMjQsNyArMTI1LDggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3QgdGVhcmRvd24gZmFpbGVkIiwgZXgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0UmVmcmVzaEVudHJpZXMoKSB7CiAgICAgICAgIHRyeSB7ICAgICAgCiAgICAgICAgICAgICBQbGFuZXRNYW5hZ2VyIHBsYW5ldCA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0UGxhbmV0TWFuYWdlcigpOwpAQCAtMTUyLDExICsxNTQsNiBAQAogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoUGxhbmV0TWFuYWdlckxvY2FsVGVzdC5jbGFzcyk7Ci0gICAgfQotICAgIAotICAgIAorCiB9CiAKZGlmZiAtLWdpdCBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9Qcm9wZXJ0aWVzVGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1Byb3BlcnRpZXNUZXN0LmphdmEKaW5kZXggZTVjMjcyOS4uMGVkM2I4YyAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1Byb3BlcnRpZXNUZXN0LmphdmEKKysrIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1Byb3BlcnRpZXNUZXN0LmphdmEKQEAgLTE4LDQzICsxOCwzNyBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzczsKIAotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuUnVudGltZUNvbmZpZ1Byb3BlcnR5OworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5BZnRlckVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CiAKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLio7CiAKIC8qKgogICogVGVzdCBQcm9wZXJ0aWVzIHJlbGF0ZWQgYnVzaW5lc3Mgb3BlcmF0aW9ucy4KICAqLwotcHVibGljIGNsYXNzIFByb3BlcnRpZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworcHVibGljIGNsYXNzIFByb3BlcnRpZXNUZXN0ICB7CiAgICAgCiAgICAgcHVibGljIHN0YXRpYyBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coUHJvcGVydGllc1Rlc3QuY2xhc3MpOwotICAgIAotICAgIAotICAgIHB1YmxpYyBQcm9wZXJ0aWVzVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotICAgICAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShQcm9wZXJ0aWVzVGVzdC5jbGFzcyk7Ci0gICAgfQotICAgIAotICAgIAorCisgICAgQEJlZm9yZUVhY2gKICAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAvLyBzZXR1cCB3ZWJsb2dnZXIKICAgICAgICAgVGVzdFV0aWxzLnNldHVwV2VibG9nZ2VyKCk7CiAgICAgfQotICAgIAorCisgICAgQEFmdGVyRWFjaAogICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgfQotICAgIAotICAgIAorCisKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RQcm9wZXJpZXNDUlVEKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICAvLyByZW1lbWJlciwgdGhlIHByb3BlcnRpZXMgdGFibGUgaXMgaW5pdGlhbGl6ZWQgZHVyaW5nIFJvbGxlciBzdGFydHVwCmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvU1FMU2NyaXB0UnVubmVyVGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1NRTFNjcmlwdFJ1bm5lclRlc3QuamF2YQppbmRleCBiYzIwZGM4Li45MGRlMmEzIDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvU1FMU2NyaXB0UnVubmVyVGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9TUUxTY3JpcHRSdW5uZXJUZXN0LmphdmEKQEAgLTE4LDIyICsxOCwyOCBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzczsKIAoraW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5UZXN0VXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLnN0YXJ0dXAuU1FMU2NyaXB0UnVubmVyOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5zdGFydHVwLldlYmxvZ2dlclN0YXJ0dXA7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CisKIGltcG9ydCBqYXZhLnNxbC5Db25uZWN0aW9uOwogaW1wb3J0IGphdmEuc3FsLlJlc3VsdFNldDsKIGltcG9ydCBqYXZhLnNxbC5TUUxFeGNlcHRpb247Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5zdGFydHVwLldlYmxvZ2dlclN0YXJ0dXA7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLnN0YXJ0dXAuU1FMU2NyaXB0UnVubmVyOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5UZXN0VXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0RmFsc2U7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLmFzc2VydFRydWU7CiAKIC8qKgogICogVGVzdCBwYXJzaW5nIGFuZCBydW5uaW5nIG9mIFNRTCBzY3JpcHRzCiAgKi8KLXB1YmxpYyBjbGFzcyBTUUxTY3JpcHRSdW5uZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworcHVibGljIGNsYXNzIFNRTFNjcmlwdFJ1bm5lclRlc3QgIHsKICAgICBwdWJsaWMgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhTUUxTY3JpcHRSdW5uZXJUZXN0LmNsYXNzKTsKIAorICAgIEBCZWZvcmVFYWNoCiAgICAgcHVibGljIHZvaWQgc2V0VXAoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBUZXN0VXRpbHMuc2V0dXBXZWJsb2dnZXIoKTsKQEAgLTQyLDcgKzQ4LDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyB2b2lkIHRlc3RQYXJzZU9ubHkoKSB0aHJvd3MgRXhjZXB0aW9uIHsgICAgICAgIAorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFBhcnNlT25seSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBEYXRhYmFzZVByb3ZpZGVyIGRicCA9IFdlYmxvZ2dlclN0YXJ0dXAuZ2V0RGF0YWJhc2VQcm92aWRlcigpOwogICAgICAgICBDb25uZWN0aW9uIGNvbiA9IGRicC5nZXRDb25uZWN0aW9uKCk7IAogICAgICAgICAKQEAgLTU5LDggKzY2LDkgQEAKICAgICAgICAgU1FMU2NyaXB0UnVubmVyIHJ1bm5lciA9IG5ldyBTUUxTY3JpcHRSdW5uZXIoc2NyaXB0UGF0aCk7CiAgICAgICAgIGFzc2VydFRydWUocnVubmVyICE9IG51bGwpOwogICAgICAgICBhc3NlcnRUcnVlKHJ1bm5lci5nZXRDb21tYW5kQ291bnQoKSA9PSA1KTsgICAgICAgIAotICAgIH0gICAgCi0gICAgCisgICAgfQorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlUnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIERhdGFiYXNlUHJvdmlkZXIgZGJwID0gV2VibG9nZ2VyU3RhcnR1cC5nZXREYXRhYmFzZVByb3ZpZGVyKCk7CiAgICAgICAgIENvbm5lY3Rpb24gY29uID0gZGJwLmdldENvbm5lY3Rpb24oKTsgCmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvVGFza0xvY2tUZXN0LmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvVGFza0xvY2tUZXN0LmphdmEKaW5kZXggMTZkMzkxYi4uZDBhYzc0NiAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1Rhc2tMb2NrVGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9UYXNrTG9ja1Rlc3QuamF2YQpAQCAtMTgsMzkgKzE4LDMxIEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzOwogCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MucnVubmFibGUuUm9sbGVyVGFzazsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MucnVubmFibGUuVGhyZWFkTWFuYWdlcjsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQWZ0ZXJFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwogCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLmFzc2VydEZhbHNlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy5hc3NlcnRUcnVlOwogCiAvKioKICAqIFRlc3QgVGFza0xvY2sgcmVsYXRlZCBidXNpbmVzcyBvcGVyYXRpb25zLgogICovCi1wdWJsaWMgY2xhc3MgVGFza0xvY2tUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworcHVibGljIGNsYXNzIFRhc2tMb2NrVGVzdCAgewogICAgIAogICAgIHB1YmxpYyBzdGF0aWMgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFRhc2tMb2NrVGVzdC5jbGFzcyk7Ci0gICAgCi0gICAgCi0gICAgcHVibGljIFRhc2tMb2NrVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotICAgICAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShUYXNrTG9ja1Rlc3QuY2xhc3MpOwotICAgIH0KLSAgICAKLSAgICAKKworICAgIEBCZWZvcmVFYWNoCiAgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgLy8gc2V0dXAgd2VibG9nZ2VyCiAgICAgICAgIFRlc3RVdGlscy5zZXR1cFdlYmxvZ2dlcigpOwogICAgIH0KLSAgICAKKworICAgIEBBZnRlckVhY2gKICAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewogICAgIH0KICAgICAKQEAgLTU5LDYgKzUxLDcgQEAKICAgICAgKiBUZXN0IGJhc2ljIHBlcnNpc3RlbmNlIG9wZXJhdGlvbnMgLi4uIENyZWF0ZSwgVXBkYXRlLCBEZWxldGUuCiAgICAgICogQHRocm93cyBFeGNlcHRpb24gaWYgb25lIGlzIHJhaXNlZAogICAgICAqLworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFRhc2tMb2NrQ1JVRCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgVGhyZWFkTWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFRocmVhZE1hbmFnZXIoKTsKQEAgLTY4LDIyICs2MSwyMiBAQAogICAgICAgICB0YXNrLmluaXQoKTsKICAgICAgICAgCiAgICAgICAgIC8vIHRyeSB0byBhY3F1aXJlIGEgbG9jawotICAgICAgICBhc3NlcnRUcnVlKCJGYWlsZWQgdG8gYWNxdWlyZSBsZWFzZS4iLG1nci5yZWdpc3RlckxlYXNlKHRhc2spKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShtZ3IucmVnaXN0ZXJMZWFzZSh0YXNrKSwgIkZhaWxlZCB0byBhY3F1aXJlIGxlYXNlLiIpOwogICAgICAgICAvLyBXZSBkb24ndCBmbHVzaCBoZXJlIGJlY2F1c2UgcmVnaXN0ZXJMZWFzZSBzaG91bGQgZmx1c2ggb24gaXRzIG93bgogICAgICAgICBUZXN0VXRpbHMuZW5kU2Vzc2lvbihmYWxzZSk7CiAgICAgICAgIAogICAgICAgICAvLyBtYWtlIHN1cmUgdGFzayBpcyBsb2NrZWQKLSAgICAgICAgYXNzZXJ0RmFsc2UoIkFjcXVpcmVkIGxlYXNlIGEgc2Vjb25kIHRpbWUgd2hlbiB3ZSBzaG91bGRuJ3QgaGF2ZSBiZWVuIGFibGUgdG8uIixtZ3IucmVnaXN0ZXJMZWFzZSh0YXNrKSk7CisgICAgICAgIGFzc2VydEZhbHNlKG1nci5yZWdpc3RlckxlYXNlKHRhc2spLCJBY3F1aXJlZCBsZWFzZSBhIHNlY29uZCB0aW1lIHdoZW4gd2Ugc2hvdWxkbid0IGhhdmUgYmVlbiBhYmxlIHRvLiIpOwogICAgICAgICBUZXN0VXRpbHMuZW5kU2Vzc2lvbihmYWxzZSk7CiAgICAgICAgIAogICAgICAgICAvLyB0cnkgdG8gcmVsZWFzZSBhIGxvY2sKLSAgICAgICAgYXNzZXJ0VHJ1ZSgiUmVsZWFzZSBvZiBsZWFzZSBmYWlsZWQuIixtZ3IudW5yZWdpc3RlckxlYXNlKHRhc2spKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShtZ3IudW5yZWdpc3RlckxlYXNlKHRhc2spLCAiUmVsZWFzZSBvZiBsZWFzZSBmYWlsZWQuIik7CiAgICAgICAgIC8vIFdlIGRvbid0IGZsdXNoIGhlcmUgYmVjYXVzZSB1bnJlZ2lzdGVyTGVhc2Ugc2hvdWxkIGZsdXNoIG9uIGl0cyBvd24KICAgICAgICAgVGVzdFV0aWxzLmVuZFNlc3Npb24oZmFsc2UpOwogCiAgICAgICAgIC8vIEN1cnJlbnQgdW5yZWdpc3RlckxlYXNlIHNlbWFudGljcyBhcmUgaWRlbXBvdGVudC4gIERvdWJsZSByZWxlYXNlIHNob3VsZAogICAgICAgICAvLyBhY3R1YWxseSBzdWNjZWVkLgotICAgICAgICBhc3NlcnRUcnVlKCJTZWNvbmQgcmVsZWFzZSBmYWlsZWQuIiwgbWdyLnVucmVnaXN0ZXJMZWFzZSh0YXNrKSk7CisgICAgICAgIGFzc2VydFRydWUoIG1nci51bnJlZ2lzdGVyTGVhc2UodGFzayksICJTZWNvbmQgcmVsZWFzZSBmYWlsZWQuIik7CiAgICAgICAgIFRlc3RVdGlscy5lbmRTZXNzaW9uKGZhbHNlKTsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvVGhlbWVNYW5hZ2VyVGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1RoZW1lTWFuYWdlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDU4NGM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1RoZW1lTWFuYWdlclRlc3QuamF2YQpAQCAtMCwwICsxLDYwIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisgKiBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UKKyAqIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nCisgKiBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCisgKiBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3M7CisKKworaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKK2ltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5UZXN0VXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLnRoZW1lcy5UaGVtZU1hbmFnZXI7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFmdGVyRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQmVmb3JlRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy5hc3NlcnROb3ROdWxsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy5hc3NlcnROdWxsOworCitwdWJsaWMgY2xhc3MgVGhlbWVNYW5hZ2VyVGVzdCAgeworICAgIHB1YmxpYyBzdGF0aWMgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFRoZW1lTWFuYWdlclRlc3QuY2xhc3MpOworCisgICAgQEJlZm9yZUVhY2gKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBUZXN0VXRpbHMuc2V0dXBXZWJsb2dnZXIoKTsKKyAgICB9CisKKyAgICBAQWZ0ZXJFYWNoCisgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RUaGVtZUFzc3VtcHRpb25zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICAgICAgVGhlbWVNYW5hZ2VyIHRoZW1lTWFuYWdlciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0VGhlbWVNYW5hZ2VyKCk7CisgICAgICAgIHRoZW1lTWFuYWdlci5pbml0aWFsaXplKCk7CisKKyAgICAgICAgYXNzZXJ0Tm90TnVsbCggdGhlbWVNYW5hZ2VyLmdldFRoZW1lKCJiYXNpYyIpICk7CisgICAgICAgIGFzc2VydE5vdE51bGwoIHRoZW1lTWFuYWdlci5nZXRUaGVtZSgiYmFzaWMiKS5nZXRTdHlsZXNoZWV0KCkgKTsKKyAgICAgICAgYXNzZXJ0TnVsbCggdGhlbWVNYW5hZ2VyLmdldFRoZW1lKCJmcm9udHBhZ2UiKS5nZXRTdHlsZXNoZWV0KCkgKTsKKyAgICB9CisgICAgICAgIAorfQorCisKKworCmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvVXNlclRlc3QuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9Vc2VyVGVzdC5qYXZhCmluZGV4IGIxZTIwZmIuLmIwNmQ3YzYgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9Vc2VyVGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9Vc2VyVGVzdC5qYXZhCkBAIC0xOCw0MCArMTgsMzQgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3M7CiAKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2c7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5jb25maWcuV2VibG9nZ2VyQ29uZmlnOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5Vc2VyOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5BZnRlckVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CiAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwogCiAvKioKICAqIFRlc3QgVXNlciByZWxhdGVkIGJ1c2luZXNzIG9wZXJhdGlvbnMuCiAgKi8KLXB1YmxpYyBjbGFzcyBVc2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKK3B1YmxpYyBjbGFzcyBVc2VyVGVzdCAgewogICAgIAogICAgIHB1YmxpYyBzdGF0aWMgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFVzZXJUZXN0LmNsYXNzKTsKLSAgICAKLSAgICAKLSAgICBwdWJsaWMgVXNlclRlc3QoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotICAgIAotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoVXNlclRlc3QuY2xhc3MpOwotICAgIH0KLSAgICAKLSAgICAKKworCisgICAgQEJlZm9yZUVhY2gKICAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAvLyBzZXR1cCB3ZWJsb2dnZXIKICAgICAgICAgVGVzdFV0aWxzLnNldHVwV2VibG9nZ2VyKCk7CiAgICAgfQotICAgIAorCisgICAgQEFmdGVyRWFjaAogICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgfQogICAgIApAQCAtNTksNiArNTMsNyBAQAogICAgIC8qKgogICAgICAqIFRlc3QgYmFzaWMgcGVyc2lzdGVuY2Ugb3BlcmF0aW9ucyAuLi4gQ3JlYXRlLCBVcGRhdGUsIERlbGV0ZS4KICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RVc2VyQ1JVRCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgVXNlck1hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRVc2VyTWFuYWdlcigpOwpAQCAtMTE3LDYgKzExMiw3IEBACiAgICAgLyoqCiAgICAgICogVGVzdCBsb29rdXAgbWVjaGFuaXNtcy4KICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RVc2VyTG9va3VwcygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgVXNlck1hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRVc2VyTWFuYWdlcigpOwpAQCAtMTcxLDYgKzE2Nyw3IEBACiAgICAgLyoqCiAgICAgICogVGVzdCBiYXNpYyB1c2VyIHJvbGUgcGVyc2lzdGVuY2UgLi4uIEFkZCwgUmVtb3ZlCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Um9sZUNSVUQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIFVzZXJNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0VXNlck1hbmFnZXIoKTsKQEAgLTIzNCwxMiArMjMxLDQgQEAKICAgICAgICAgVGVzdFV0aWxzLmVuZFNlc3Npb24odHJ1ZSk7CiAgICAgfQogCi0gICAgCi0gICAgLyoqCi0gICAgICogVGVzdCBhYmlsaXR5IHRvIHJlbW92ZSBhIHVzZXIgd2l0aCBhIGZ1bGwgc2V0IG9mIGRhdGEuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdGVzdFJlbW92ZUxvYWRlZFVzZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHRlc3RSZW1vdmVMb2FkZWRVc2VyCi0gICAgfQotICAgIAogfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1dlYmxvZ0NhdGVnb3J5Q1JVRFRlc3QuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9XZWJsb2dDYXRlZ29yeUNSVURUZXN0LmphdmEKaW5kZXggYWQ3YTg3OS4uZDQ4ZmMyYyAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1dlYmxvZ0NhdGVnb3J5Q1JVRFRlc3QuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvV2VibG9nQ2F0ZWdvcnlDUlVEVGVzdC5qYXZhCkBAIC0xOCwxOSArMTgsMjIgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3M7CiAKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVXNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nQ2F0ZWdvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZzsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nQ2F0ZWdvcnk7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFmdGVyRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQmVmb3JlRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKIAoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwogCiAvKioKICAqIFRlc3QgV2VibG9nQ2F0ZWdvcnkgQ1JVRCBhY3Rpb25zLgogICovCi1wdWJsaWMgY2xhc3MgV2VibG9nQ2F0ZWdvcnlDUlVEVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKK3B1YmxpYyBjbGFzcyBXZWJsb2dDYXRlZ29yeUNSVURUZXN0ICB7CiAgICAgCiAgICAgcHVibGljIHN0YXRpYyBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coV2VibG9nQ2F0ZWdvcnlDUlVEVGVzdC5jbGFzcyk7CiAgICAgCkBAIC00MSw2ICs0NCw3IEBACiAgICAgLyoqCiAgICAgICogQWxsIHRlc3RzIGluIHRoaXMgc3VpdGUgcmVxdWlyZSBhIHVzZXIgYW5kIGEgd2VibG9nLgogICAgICAqLworICAgIEBCZWZvcmVFYWNoCiAgICAgcHVibGljIHZvaWQgc2V0VXAoKSB7CiAgICAgICAgIAogICAgICAgICBsb2cuaW5mbygiQkVHSU4iKTsKQEAgLTU4LDcgKzYyLDggQEAKICAgICAgICAgCiAgICAgICAgIGxvZy5pbmZvKCJFTkQiKTsKICAgICB9Ci0gICAgCisKKyAgICBAQWZ0ZXJFYWNoCiAgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB7CiAgICAgICAgIAogICAgICAgICBsb2cuaW5mbygiQkVHSU4iKTsKQEAgLTc4LDYgKzgzLDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IFdlYmxvZ0NhdGVnb3J5LmVxdWFscygpIG1ldGhvZC4KICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RXZWJsb2dDYXRlZ29yeUVxdWFsaXR5KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBsb2cuaW5mbygiQkVHSU4iKTsKQEAgLTk5LDYgKzEwNSw3IEBACiAgICAgLyoqCiAgICAgICogVGVzdCBiYXNpYyBwZXJzaXN0ZW5jZSBvcGVyYXRpb25zIC4uLiBDcmVhdGUsIFVwZGF0ZSwgRGVsZXRlLgogICAgICAqLworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEJhc2ljQ1JVRCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgbG9nLmluZm8oIkJFR0lOIik7CkBAIC0xNTksNiArMTY2LDcgQEAKICAgICAvKioKICAgICAgKiBNYWtlIHN1cmUgdGhhdCBkZWxldGluZyBhIGNhdGVnb3J5IGRlbGV0ZXMgYWxsIGNoaWxkIGNhdGVnb3JpZXMuCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Q2F0ZWdvcnlDYXNjYWRpbmdEZWxldGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIGxvZy5pbmZvKCJCRUdJTiIpOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1dlYmxvZ0NhdGVnb3J5RnVuY3Rpb25hbGl0eVRlc3QuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9XZWJsb2dDYXRlZ29yeUZ1bmN0aW9uYWxpdHlUZXN0LmphdmEKaW5kZXggZjdiMmY3Zi4uY2MyODM3ZCAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1dlYmxvZ0NhdGVnb3J5RnVuY3Rpb25hbGl0eVRlc3QuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvV2VibG9nQ2F0ZWdvcnlGdW5jdGlvbmFsaXR5VGVzdC5qYXZhCkBAIC0xOCwyMiArMTgsMjYgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3M7CiAKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVXNlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dDYXRlZ29yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nRW50cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZ0VudHJ5LlB1YlN0YXR1czsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5BZnRlckVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CiAKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwogCiAvKioKICAqIFRlc3QgV2VibG9nIENhdGVnb3J5IHJlbGF0ZWQgYnVzaW5lc3Mgb3BlcmF0aW9ucy4KICAqLwotcHVibGljIGNsYXNzIFdlYmxvZ0NhdGVnb3J5RnVuY3Rpb25hbGl0eVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CitwdWJsaWMgY2xhc3MgV2VibG9nQ2F0ZWdvcnlGdW5jdGlvbmFsaXR5VGVzdCAgewogICAgIAogICAgIHB1YmxpYyBzdGF0aWMgTG9nIGxvZyA9IExvZ0ZhY3RvcnkuZ2V0TG9nKFdlYmxvZ0NhdGVnb3J5RnVuY3Rpb25hbGl0eVRlc3QuY2xhc3MpOwogICAgIApAQCAtNDgsNiArNTIsNyBAQAogICAgIC8qKgogICAgICAqIEFsbCB0ZXN0cyBpbiB0aGlzIHN1aXRlIHJlcXVpcmUgYSB1c2VyIGFuZCBhIHdlYmxvZy4KICAgICAgKi8KKyAgICBAQmVmb3JlRWFjaAogICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgewogICAgICAgICAKICAgICAgICAgbG9nLmluZm8oIkJFR0lOIik7CkBAIC03NCw3ICs3OSw4IEBACiAgICAgICAgIAogICAgICAgICBsb2cuaW5mbygiRU5EIik7CiAgICAgfQotICAgIAorCisgICAgQEFmdGVyRWFjaAogICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewogICAgICAgICAKICAgICAgICAgbG9nLmluZm8oIkJFR0lOIik7CkBAIC05Myw2ICs5OSw3IEBACiAgICAgLyoqCiAgICAgICogVGVzdCB0aGUgaGFzQ2F0ZWdvcnkoKSBtZXRob2Qgb24gV2VibG9nQ2F0ZWdvcnkuCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0SGFzQ2F0ZWdvcnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIGxvZy5pbmZvKCJCRUdJTiIpOwpAQCAtMTA3LDYgKzExNCw3IEBACiAgICAgLyoqCiAgICAgICogTG9va3VwIGNhdGVnb3J5IGJ5IGlkLgogICAgICAqLworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdExvb2t1cENhdGVnb3J5QnlJZCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgbG9nLmluZm8oIkJFR0lOIik7CkBAIC0xMjQsNiArMTMyLDcgQEAKICAgICAvKioKICAgICAgKiBMb29rdXAgY2F0ZWdvcnkgYnkgbmFtZS4KICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RMb29rdXBDYXRlZ29yeUJ5TmFtZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgbG9nLmluZm8oIkJFR0lOIik7CkBAIC0xNTEsNiArMTYwLDcgQEAKICAgICAvKioKICAgICAgKiBMb29rdXAgYWxsIGNhdGVnb3JpZXMgZm9yIGEgd2VibG9nLgogICAgICAqLworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdExvb2t1cEFsbENhdGVnb3JpZXNCeVdlYmxvZygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgbG9nLmluZm8oIkJFR0lOIik7CkBAIC0xNjgsNiArMTc4LDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IG1vdmluZyBlbnRyaWVzIGluIGNhdGVnb3J5IHRvIG5ldyBjYXRlZ29yeS4KICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RNb3ZlV2VibG9nQ2F0ZWdvcnlDb250ZW50cygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBsb2cuaW5mbygiQkVHSU4iKTsKICAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCk7CmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvV2VibG9nRW50cnlUZXN0LmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvV2VibG9nRW50cnlUZXN0LmphdmEKaW5kZXggNzhlYWViMy4uOTkwMGVmYyAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1dlYmxvZ0VudHJ5VGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9XZWJsb2dFbnRyeVRlc3QuamF2YQpAQCAtMTgsNTYgKzE4LDM3IEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzOwogCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKLWltcG9ydCBqYXZhLnNxbC5UaW1lc3RhbXA7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nRW50cnlDb21tZW50OwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5UYWdTdGF0OwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5Vc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dDYXRlZ29yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nRW50cnk7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLio7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZ0VudHJ5LlB1YlN0YXR1czsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nRW50cnlTZWFyY2hDcml0ZXJpYTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nRW50cnlUYWc7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZzsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQWZ0ZXJFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwogCitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKK2ltcG9ydCBqYXZhLnNxbC5UaW1lc3RhbXA7CitpbXBvcnQgamF2YS51dGlsLio7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuKjsKIAogLyoqCiAgKiBUZXN0IFdlYmxvZ0VudHJ5IHJlbGF0ZWQgYnVzaW5lc3Mgb3BlcmF0aW9ucy4KICAqLwotcHVibGljIGNsYXNzIFdlYmxvZ0VudHJ5VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKK3B1YmxpYyBjbGFzcyBXZWJsb2dFbnRyeVRlc3QgIHsKICAgICAKICAgICBwdWJsaWMgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhXZWJsb2dFbnRyeVRlc3QuY2xhc3MpOwogICAgIAogICAgIFVzZXIgdGVzdFVzZXIgPSBudWxsOwogICAgIFdlYmxvZyB0ZXN0V2VibG9nID0gbnVsbDsKLSAgICAKLSAgICAKLSAgICBwdWJsaWMgV2VibG9nRW50cnlUZXN0KFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFdlYmxvZ0VudHJ5VGVzdC5jbGFzcyk7Ci0gICAgfQotICAgIAorCiAgICAgCiAgICAgLyoqCiAgICAgICogQWxsIHRlc3RzIGluIHRoaXMgc3VpdGUgcmVxdWlyZSBhIHVzZXIgYW5kIGEgd2VibG9nLgogICAgICAqLworICAgIEBCZWZvcmVFYWNoCiAgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyBzZXR1cCB3ZWJsb2dnZXIKQEAgLTg5LDcgKzcwLDggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlRlc3Qgc2V0dXAgZmFpbGVkIiwgZXgpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCisgICAgQEFmdGVyRWFjaAogICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICB0cnkgewpAQCAtMTA2LDYgKzg4LDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IGJhc2ljIHBlcnNpc3RlbmNlIG9wZXJhdGlvbnMgLi4uIENyZWF0ZSwgVXBkYXRlLCBEZWxldGUuCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0V2VibG9nRW50cnlDUlVEKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBXZWJsb2dFbnRyeU1hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dFbnRyeU1hbmFnZXIoKTsKQEAgLTE1Nyw2ICsxNDAsNyBAQAogICAgIC8qKgogICAgICAqIFRlc3QgbG9va3VwIG1lY2hhbmlzbXMgLi4uIAogICAgICAqLworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFdlYmxvZ0VudHJ5TG9va3VwcygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCk7CkBAIC0zMjYsNiArMzEwLDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IHRoYXQgdGhlIGNyZWF0ZUFuY2hvcigpIG1ldGhvZCBhY3R1YWxseSBlbnN1cmVzIHVuaXF1ZSBhbmNob3JzLgogICAgICAqLworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdENyZWF0ZUFuY2hvcigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCk7CkBAIC0zNTUsNiArMzQwLDcgQEAKICAgICAgICAgVGVzdFV0aWxzLmVuZFNlc3Npb24odHJ1ZSk7CiAgICAgfQogCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlQW5FbnRyeVdpdGhUYWdzU2hvcnRjdXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFdlYmxvZ0VudHJ5TWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ0VudHJ5TWFuYWdlcigpOwpAQCAtNDA0LDcgKzM5MCw4IEBACiAgICAgICAgICAgICBsb2cuaW5mbyhzdy50b1N0cmluZygpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAgICAgCisKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RBZGRNdWx0aXBsZVRhZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBXZWJsb2dFbnRyeU1hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dFbnRyeU1hbmFnZXIoKTsKQEAgLTQzMSw3ICs0MTgsOCBAQAogICAgICAgICBUZXN0VXRpbHMudGVhcmRvd25XZWJsb2dFbnRyeShpZCk7CiAgICAgICAgIFRlc3RVdGlscy5lbmRTZXNzaW9uKHRydWUpOwogICAgIH0KLSAgICAKKworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEFkZE11bHRpcGxlSWRlbnRpY2FsVGFncygpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIFdlYmxvZ0VudHJ5TWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ0VudHJ5TWFuYWdlcigpOwpAQCAtNDU2LDggKzQ0NCw5IEBACiAgICAgICAgIC8vIHRlYXJkb3duIG91ciB0ZXN0IGVudHJ5CiAgICAgICAgIFRlc3RVdGlscy50ZWFyZG93bldlYmxvZ0VudHJ5KGlkKTsKICAgICAgICAgVGVzdFV0aWxzLmVuZFNlc3Npb24odHJ1ZSk7Ci0gICAgfSAgICAKKyAgICB9CiAKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVUYWdzVmlhU2hvcnRjdXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIFdlYmxvZ0VudHJ5TWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ0VudHJ5TWFuYWdlcigpOwpAQCAtNDk2LDcgKzQ4NSw4IEBACiAgICAgICAgICAgICBsb2cuaW5mbyhzdy50b1N0cmluZygpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFRhZ3NFeGlzdCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCk7CkBAIC01NDYsNyArNTM2LDggQEAKICAgICAgICAgVGVzdFV0aWxzLnRlYXJkb3duV2VibG9nKHdpZCk7CiAgICAgICAgIFRlc3RVdGlscy5lbmRTZXNzaW9uKHRydWUpOwogICAgIH0KLSAgICAKKworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEdldEVudHJpZXNCeVRhZygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCk7CkBAIC01ODIsOCArNTczLDkgQEAKICAgICAgICAgICAgIGxvZy5pbmZvKHN3LnRvU3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgfQotICAgICAgICAKIAorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0UmVtb3ZlRW50cnlUYWdDYXNjYWRpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogICAgICAgICBXZWJsb2dFbnRyeU1hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dFbnRyeU1hbmFnZXIoKTsKQEAgLTYxNyw4ICs2MDksOSBAQAogCiAgICAgICAgIC8vIHRlcm1pbmF0ZQogICAgICAgICBUZXN0VXRpbHMuZW5kU2Vzc2lvbih0cnVlKTsKLSAgICB9IAotICAgIAorICAgIH0KKworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFVwZGF0ZVRhZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCk7CiAKQEAgLTY2Miw2ICs2NTUsNyBAQAogICAgICAqIAogICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgICovCisgICAgQFRlc3QKICAgICAgcHVibGljIHZvaWQgdGVzdFVwZGF0ZVRhZ1RpbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgIFdlYmxvZ0VudHJ5TWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ0VudHJ5TWFuYWdlcigpOwogCkBAIC03MTAsNiArNzA0LDcgQEAKICAgICAgICAgVGVzdFV0aWxzLmVuZFNlc3Npb24odHJ1ZSk7CiAgICAgfQogCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0VGFnQWdncmVnYXRlcygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBsb2cuaW5mbygiQkVHSU4iKTsKICAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCk7CkBAIC04MTgsOCArODEzLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgSW50ZWdlciBleHBlY3RlZENvdW50ID0KICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkV2VibG9nVGFncy5nZXQoc3RhdC5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGFzc2VydEVxdWFscyhzdGF0LmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkQ291bnQuaW50VmFsdWUoKSwgc3RhdC5nZXRDb3VudCgpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRDb3VudC5pbnRWYWx1ZSgpLCBzdGF0LmdldENvdW50KCksIHN0YXQuZ2V0TmFtZSgpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdGFncyA9IG1nci5nZXRUYWdzKG51bGwsIG51bGwsIG51bGwsIDAsIC0xKTsKQEAgLTgzNyw3ICs4MzEsNyBAQAogICAgICAgICAgICAgICAgICAgICBmYWlsKCJVbmV4cGVjdGVkIHRhZ05hbWUuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIEludGVnZXIgZXhwZWN0ZWRDb3VudCA9IGV4cGVjdGVkU2l0ZVRhZ3MuZ2V0KHN0YXQuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoc3RhdC5nZXROYW1lKCksIGV4cGVjdGVkQ291bnQuaW50VmFsdWUoKSwgc3RhdC5nZXRDb3VudCgpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRFcXVhbHMoIGV4cGVjdGVkQ291bnQuaW50VmFsdWUoKSwgc3RhdC5nZXRDb3VudCgpLCBzdGF0LmdldE5hbWUoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIFRlc3RVdGlscy50ZWFyZG93bldlYmxvZyh0ZXN0V2VibG9nMi5nZXRJZCgpKTsKQEAgLTg1NCw2ICs4NDgsNyBAQAogICAgICAgICBsb2cuaW5mbygiRU5EIik7CiAgICAgfQogCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0VGFnQWdncmVnYXRlc0Nhc2VTZW5zaXRpdml0eSgpIHRocm93cyBFeGNlcHRpb24gewogCiAgICAgICAgIFdlYmxvZyB0ZXN0V2VibG9nMiA9IFRlc3RVdGlscy5zZXR1cFdlYmxvZygiZW50cnlUZXN0V2VibG9nMiIsCkBAIC05MzgsNiArOTMzLDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IHRoYXQgd2UgY2FuIGFkZCBhbmQgcmVtb3ZlIGVudHJ5IGF0dHJpYnV0ZXMgZm9yIGFuIGVudHJ5LgogICAgICAqLworICAgIEBUZXN0CiAgICAgIHB1YmxpYyB2b2lkIHRlc3RFbnRyeUF0dHJpYnV0ZUNSVUQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIFdlYmxvZ0VudHJ5TWFuYWdlciBlbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dFbnRyeU1hbmFnZXIoKTsKQEAgLTk5OSw4ICs5OTUsOSBAQAogICAgICAgICBlbnRyeSA9IGVtZ3IuZ2V0V2VibG9nRW50cnkoaWQpOwogICAgICAgICBhc3NlcnROdWxsKGVudHJ5KTsKICAgICB9Ci0gICAgCi0gICAgCisKKworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFdlYmxvZ1N0YXRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKICAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIGVtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ0VudHJ5TWFuYWdlcigpOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1dlYmxvZ1BhZ2VUZXN0LmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvV2VibG9nUGFnZVRlc3QuamF2YQppbmRleCA1YjYzM2I0Li44YjgwZmUyIDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvV2VibG9nUGFnZVRlc3QuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvV2VibG9nUGFnZVRlc3QuamF2YQpAQCAtMTgsNDQgKzE4LDM5IEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzOwogCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVGhlbWVUZW1wbGF0ZS5Db21wb25lbnRUeXBlOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5Vc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dUZW1wbGF0ZTsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dUZW1wbGF0ZTsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQWZ0ZXJFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwogCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBzdGF0aWMganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlLmFzc2VydE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0Tm90TnVsbDsKIAogLyoqCiAgKiBUZXN0IFdlYmxvZyBQYWdlIHJlbGF0ZWQgYnVzaW5lc3Mgb3BlcmF0aW9ucy4KICAqLwotcHVibGljIGNsYXNzIFdlYmxvZ1BhZ2VUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworcHVibGljIGNsYXNzIFdlYmxvZ1BhZ2VUZXN0ICB7CiAgICAgCiAgICAgcHVibGljIHN0YXRpYyBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coV2VibG9nUGFnZVRlc3QuY2xhc3MpOwogICAgIAogICAgIFVzZXIgdGVzdFVzZXIgPSBudWxsOwogICAgIFdlYmxvZyB0ZXN0V2VibG9nID0gbnVsbDsKICAgICBXZWJsb2dUZW1wbGF0ZSB0ZXN0UGFnZSA9IG51bGw7Ci0gICAgCi0gICAgCi0gICAgcHVibGljIFdlYmxvZ1BhZ2VUZXN0KFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHN1cGVyKG5hbWUpOwotICAgIH0KLSAgICAKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFdlYmxvZ1BhZ2VUZXN0LmNsYXNzKTsKLSAgICB9Ci0gICAgCisKICAgICAKICAgICAvKioKICAgICAgKiBBbGwgdGVzdHMgaW4gdGhpcyBzdWl0ZSByZXF1aXJlIGEgdXNlciBhbmQgYSB3ZWJsb2cuCiAgICAgICovCisgICAgQEJlZm9yZUVhY2gKICAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgLy8gc2V0dXAgd2VibG9nZ2VyCkBAIC03OCw3ICs3Myw4IEBACiAgICAgICAgIHRlc3RQYWdlLnNldExhc3RNb2RpZmllZChuZXcgamF2YS51dGlsLkRhdGUoKSk7CiAgICAgICAgIHRlc3RQYWdlLnNldFdlYmxvZyhUZXN0VXRpbHMuZ2V0TWFuYWdlZFdlYnNpdGUodGVzdFdlYmxvZykpOwogICAgIH0KLSAgICAKKworICAgIEBBZnRlckVhY2gKICAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgdHJ5IHsKQEAgLTk3LDYgKzkzLDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IGJhc2ljIHBlcnNpc3RlbmNlIG9wZXJhdGlvbnMgLi4uIENyZWF0ZSwgVXBkYXRlLCBEZWxldGUKICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RUZW1wbGF0ZUNSVUQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIFdlYmxvZ01hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRXZWJsb2dNYW5hZ2VyKCk7CkBAIC0xMzUsNiArMTMyLDcgQEAKICAgICAvKioKICAgICAgKiBUZXN0IGxvb2t1cCBtZWNoYW5pc21zIC4uLiBpZCwgbmFtZSwgbGluaywgd2VibG9nCiAgICAgICovCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0UGVybWlzc2lvbnNMb29rdXBzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBXZWJsb2dNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nTWFuYWdlcigpOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1dlYmxvZ1N0YXRzVGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1dlYmxvZ1N0YXRzVGVzdC5qYXZhCmluZGV4IDZjZTNlYzkuLmM1MmVjNjkgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9XZWJsb2dTdGF0c1Rlc3QuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvV2VibG9nU3RhdHNUZXN0LmphdmEKQEAgLTEsMjAgKzEsMzcgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAqICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UKKyAqIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorICogdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nCisgKiBjb3B5cmlnaHQgaW4gdGhpcyB3b3JrLCBwbGVhc2Ugc2VlIHRoZSBOT1RJQ0UgZmlsZSBpbiB0aGUgdG9wIGxldmVsCisgKiBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCisgKi8KKwogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3M7CiAKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci51dGlsLlJvbGxlckNvbnN0YW50czsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOworaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy4qOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5BZnRlckVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CisKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci51dGlsLlJvbGxlckNvbnN0YW50czsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dFbnRyeUNvbW1lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLlN0YXRDb3VudDsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVXNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nRW50cnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZzsKIAotLyoqCi0gKgotICovCi1wdWJsaWMgY2xhc3MgV2VibG9nU3RhdHNUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLmFzc2VydE5vdE51bGw7CisKK3B1YmxpYyBjbGFzcyBXZWJsb2dTdGF0c1Rlc3QgIHsKICAgICAKICAgICBwcml2YXRlIFVzZXIgdXNlcjEsIHVzZXIyOwogICAgIApAQCAtMjgsMTAgKzQ1LDkgQEAKICAgICBwcml2YXRlIFdlYmxvZyB3ZWJzaXRlMjsKICAgICAgICAgcHJpdmF0ZSBXZWJsb2dFbnRyeSBlbnRyeTIxOwogICAgICAgICAgICAgcHJpdmF0ZSBXZWJsb2dFbnRyeUNvbW1lbnQgY29tbWVudDIxOyAKLSAgICAKLSAgICBwdWJsaWMgV2VibG9nU3RhdHNUZXN0KCkgewotICAgIH0gIAotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBAQmVmb3JlRWFjaAorICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIC8vIGNyZWF0ZSB3ZWJsb2cgd2l0aCB0aHJlZSBlbnRyaWVzIGFuZCB0d28gY29tbWVudHMgcGVyIGVudHJ5CiAgICAgICAgIHVzZXIxID0gVGVzdFV0aWxzLnNldHVwVXNlcigiYV9jb21tZW50Q291bnRUZXN0VXNlciIpOwogICAgICAgICB1c2VyMiA9IFRlc3RVdGlscy5zZXR1cFVzZXIoImJfY29tbWVudENvdW50VGVzdFVzZXIiKTsKQEAgLTUzLDYgKzY5LDggQEAKIAogICAgICAgICBUaHJlYWQuc2xlZXAoUm9sbGVyQ29uc3RhbnRzLlNFQ19JTl9NUyk7CiAgICAgfQorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0TW9zdENvbW1lbnRlZFdlYmxvZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsgICAgICAgIAogICAgICAgICBXZWJsb2dNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nTWFuYWdlcigpOyAgICAgCiAgICAgICAgIExpc3QgbGlzdCA9IG1nci5nZXRNb3N0Q29tbWVudGVkV2VibG9ncyhudWxsLCBudWxsLCAwLCAtMSk7ICAKQEAgLTcwLDYgKzg4LDggQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKHdlYnNpdGUyLmdldElkKCksIHMyLmdldFN1YmplY3RJZCgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDFMLCBzMi5nZXRDb3VudCgpKTsgICAKICAgICB9CisKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRNb3N0Q29tbWVudGVkV2VibG9nRW50cmllcygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgV2VibG9nRW50cnlNYW5hZ2VyIG1nciA9IFdlYmxvZ2dlckZhY3RvcnkuZ2V0V2VibG9nZ2VyKCkuZ2V0V2VibG9nRW50cnlNYW5hZ2VyKCk7ICAgICAgCkBAIC04Niw2ICsxMDYsOCBAQAogICAgICAgICBTdGF0Q291bnQgczIgPSAoU3RhdENvdW50KWxpc3QuZ2V0KDEpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMUwsIHMyLmdldENvdW50KCkpOyAgIAogICAgIH0KKworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEdldFVzZXJOYW1lTGV0dGVyTWFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAgICAgICAKICAgICAgICAgVXNlck1hbmFnZXIgbWdyID0gV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRVc2VyTWFuYWdlcigpOyAgICAgIAogICAgICAgICBNYXAgbWFwID0gbWdyLmdldFVzZXJOYW1lTGV0dGVyTWFwKCk7ICAgIApAQCAtOTMsNiArMTE1LDggQEAKICAgICAgICAgYXNzZXJ0Tm90TnVsbChtYXAuZ2V0KCJCIikpOwogICAgICAgICBhc3NlcnROb3ROdWxsKG1hcC5nZXQoIkMiKSk7CiAgICAgfQorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0V2VibG9nTGV0dGVyTWFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAgICAgICAKICAgICAgICAgV2VibG9nTWFuYWdlciBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFdlYmxvZ01hbmFnZXIoKTsKICAgICAgICAgTWFwIG1hcCA9IG1nci5nZXRXZWJsb2dIYW5kbGVMZXR0ZXJNYXAoKTsgICAgCkBAIC0xMDAsNyArMTI0LDkgQEAKICAgICAgICAgYXNzZXJ0Tm90TnVsbChtYXAuZ2V0KCJCIikpOwogICAgICAgICBhc3NlcnROb3ROdWxsKG1hcC5nZXQoIkMiKSk7CiAgICAgfQotICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBAQWZ0ZXJFYWNoCisgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIC8vIFRPRE86IEFUTEFTIGZpZ3VyZSBvdXQgd2h5IGNvbW1lbnRzIG11c3QgYmUgdG9ybiBkb3duIGZpcnN0CiAgICAgICAgIFRlc3RVdGlscy50ZWFyZG93bkNvbW1lbnQoY29tbWVudDExLmdldElkKCkpOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1dlYmxvZ1Rlc3QuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9XZWJsb2dUZXN0LmphdmEKaW5kZXggY2E0Y2IyOS4uZTNjZmRiYyAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL1dlYmxvZ1Rlc3QuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvYnVzaW5lc3MvV2VibG9nVGVzdC5qYXZhCkBAIC0xNyw0MSArMTcsMzMgQEAKICovCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzczsKIAotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5UZXN0VXRpbHM7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLlN0YXRDb3VudDsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVXNlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5BZnRlckVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwogCiAKIC8qKgogICogVGVzdCBXZWJsb2cgcmVsYXRlZCBidXNpbmVzcyBvcGVyYXRpb25zLgogICovCi1wdWJsaWMgY2xhc3MgV2VibG9nVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKK3B1YmxpYyBjbGFzcyBXZWJsb2dUZXN0ICB7CiAgICAgCiAgICAgcHVibGljIHN0YXRpYyBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coV2VibG9nVGVzdC5jbGFzcyk7CiAgICAgCiAgICAgVXNlciB0ZXN0VXNlciA9IG51bGw7CiAgICAgCi0gICAgCi0gICAgcHVibGljIFdlYmxvZ1Rlc3QoU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotICAgIAotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoV2VibG9nVGVzdC5jbGFzcyk7Ci0gICAgfQotICAgIAotICAgIAogICAgIC8qKgogICAgICAqIEFsbCB0ZXN0cyBpbiB0aGlzIHN1aXRlIHJlcXVpcmUgYSB1c2VyLgogICAgICAqLworICAgIEBCZWZvcmVFYWNoCiAgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIGxvZy5pbmZvKCJCRUdJTiIpOwpAQCAtNjksNyArNjEsOCBAQAogICAgICAgICAKICAgICAgICAgbG9nLmluZm8oIkVORCIpOwogICAgIH0KLSAgICAKKworICAgIEBBZnRlckVhY2gKICAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgbG9nLmluZm8oIkJFR0lOIik7CkBAIC04OSw2ICs4Miw3IEBACiAgICAgLyoqCiAgICAgICogVGVzdCBiYXNpYyBwZXJzaXN0ZW5jZSBvcGVyYXRpb25zIC4uLiBDcmVhdGUsIFVwZGF0ZSwgRGVsZXRlLgogICAgICAqLworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFdlYmxvZ0NSVUQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIGxvZy5pbmZvKCJCRUdJTiIpOwpAQCAtMTU5LDYgKzE1Myw3IEBACiAgICAgLyoqCiAgICAgICogVGVzdCBsb29rdXAgbWVjaGFuaXNtcy4KICAgICAgKi8KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RXZWJsb2dMb29rdXBzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIAogICAgICAgICBsb2cuaW5mbygiQkVHSU4iKTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9qcGEvSlBBT0F1dGhNYW5hZ2VyVGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL2pwYS9KUEFPQXV0aE1hbmFnZXJUZXN0LmphdmEKaW5kZXggZDk0ZDViMy4uMGIyYWIzOSAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL2pwYS9KUEFPQXV0aE1hbmFnZXJUZXN0LmphdmEKKysrIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL2pwYS9KUEFPQXV0aE1hbmFnZXJUZXN0LmphdmEKQEAgLTE4LDIxICsxOCwyNSBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5qcGE7CiAKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CiBpbXBvcnQgbmV0Lm9hdXRoLk9BdXRoQWNjZXNzb3I7CiBpbXBvcnQgbmV0Lm9hdXRoLk9BdXRoQ29uc3VtZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuYnVzaW5lc3MuV2VibG9nZ2VyRmFjdG9yeTsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQWZ0ZXJFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwogCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLio7CiAKIC8qKgogICogVGVzdCBXZWJsb2dnZXIgQm9va21hcmsgTWFuYWdlbWVudC4KICAqLwotcHVibGljIGNsYXNzIEpQQU9BdXRoTWFuYWdlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7ICAgIAorcHVibGljIGNsYXNzIEpQQU9BdXRoTWFuYWdlclRlc3QgIHsKICAgICBwdWJsaWMgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhKUEFPQXV0aE1hbmFnZXJUZXN0LmNsYXNzKTsKIAorICAgIEBCZWZvcmVFYWNoCiAgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIC8vIHNldHVwIHdlYmxvZ2dlcgpAQCAtNDUsNyArNDksOCBAQAogICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVGVzdCBzZXR1cCBmYWlsZWQiLCBleCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKKyAgICBAQWZ0ZXJFYWNoCiAgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIHRyeSB7CkBAIC01Niw2ICs2MSw3IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RDUlVEKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIEpQQU9BdXRoTWFuYWdlckltcGwgb21nciA9IChKUEFPQXV0aE1hbmFnZXJJbXBsKQogICAgICAgICAgICAgV2VibG9nZ2VyRmFjdG9yeS5nZXRXZWJsb2dnZXIoKS5nZXRPQXV0aE1hbmFnZXIoKTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9idXNpbmVzcy9wbHVnaW5zL0NvbW1lbnRQbHVnaW5zVGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL3BsdWdpbnMvQ29tbWVudFBsdWdpbnNUZXN0LmphdmEKaW5kZXggZWM0YjAwMC4uMTE2NmEwNSAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL3BsdWdpbnMvQ29tbWVudFBsdWdpbnNUZXN0LmphdmEKKysrIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL2J1c2luZXNzL3BsdWdpbnMvQ29tbWVudFBsdWdpbnNUZXN0LmphdmEKQEAgLTE4LDMwICsxOCwzNSBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5wbHVnaW5zOwogCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5UZXN0VXRpbHM7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLmJ1c2luZXNzLldlYmxvZ2dlckZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZ0VudHJ5Q29tbWVudDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQWZ0ZXJFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5CZWZvcmVFYWNoOworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5UZXN0OwogCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLmFzc2VydEVxdWFsczsKIAogLyoqCiAgKiBUZXN0IGNvbW1lbnQgcGx1Z2lucy4KICAqLwotcHVibGljIGNsYXNzIENvbW1lbnRQbHVnaW5zVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKK3B1YmxpYyBjbGFzcyBDb21tZW50UGx1Z2luc1Rlc3QgIHsKIAogICAgIHByaXZhdGUgU3RyaW5nIGNvbnZlcnRMaW5lc1N0YXJ0ID0gInBhcmFncmFwaDFcblxucGFyYWdyYXBoMlxubGluZTJcbmxpbmUzXG5cbnBhcmFncmFwaDMiOwogICAgIHByaXZhdGUgU3RyaW5nIGNvbnZlcnRMaW5lc0Zvcm1hdHRlZCA9ICJcbjxwPnBhcmFncmFwaDE8L3A+XG5cblxuPHA+cGFyYWdyYXBoMjxici8+XG5saW5lMjxici8+XG5saW5lMzwvcD5cblxuXG48cD5wYXJhZ3JhcGgzPC9wPlxuXG4iOwogICAgIAotICAgIAotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisKKyAgICBAQmVmb3JlRWFjaAorICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFRlc3RVdGlscy5zZXR1cFdlYmxvZ2dlcigpOwogICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCisgICAgQEFmdGVyRWFjaAorICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIC8vIG5vLW9wCiAgICAgfQogICAgIAotICAgIAorICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEF1dG9Gb3JtYXRQbHVnaW4oKSB7CiAgICAgICAgIAogICAgICAgICBQbHVnaW5NYW5hZ2VyIHBtZ3IgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldFBsdWdpbk1hbmFnZXIoKTsKZGlmZiAtLWdpdCBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci9wbGFuZXQvYnVzaW5lc3MvV2VibG9nZ2VyUm9tZUZlZWRGZXRjaGVyVGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3BsYW5ldC9idXNpbmVzcy9XZWJsb2dnZXJSb21lRmVlZEZldGNoZXJUZXN0LmphdmEKaW5kZXggZjU0NDAzMS4uNTJhMDFlYiAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3BsYW5ldC9idXNpbmVzcy9XZWJsb2dnZXJSb21lRmVlZEZldGNoZXJUZXN0LmphdmEKKysrIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3BsYW5ldC9idXNpbmVzcy9XZWJsb2dnZXJSb21lRmVlZEZldGNoZXJUZXN0LmphdmEKQEAgLTE4LDE5ICsxOCwyMiBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wbGFuZXQuYnVzaW5lc3M7CiAKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LmJ1c2luZXNzLmZldGNoZXIuRmVlZEZldGNoZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIucGxhbmV0LnBvam9zLlN1YnNjcmlwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIuVGVzdFV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5idXNpbmVzcy5XZWJsb2dnZXJGYWN0b3J5OworaW1wb3J0IG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5BZnRlckVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuKjsKIAogLyoqCiAgKiBUZXN0IGN1c3RvbSB3ZWJsb2dnZXIgZmVlZCBmZXRjaGVyLgogICovCi1wdWJsaWMgY2xhc3MgV2VibG9nZ2VyUm9tZUZlZWRGZXRjaGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKK3B1YmxpYyBjbGFzcyBXZWJsb2dnZXJSb21lRmVlZEZldGNoZXJUZXN0ICB7CiAgICAgCiAgICAgcHVibGljIHN0YXRpYyBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coV2VibG9nZ2VyUm9tZUZlZWRGZXRjaGVyVGVzdC5jbGFzcyk7CiAgICAgCkBAIC00Miw3ICs0NSw3IEBACiAgICAgLyoqCiAgICAgICogQWxsIHRlc3RzIGluIHRoaXMgc3VpdGUgcmVxdWlyZSBhIHVzZXIgYW5kIGEgd2VibG9nLgogICAgICAqLwotICAgIEBPdmVycmlkZQorICAgIEBCZWZvcmVFYWNoCiAgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIC8vIHNldHVwIHdlYmxvZ2dlcgpAQCAtNTgsNyArNjEsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIEBPdmVycmlkZQorICAgIEBBZnRlckVhY2gKICAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICAKICAgICAgICAgdHJ5IHsKQEAgLTcyLDcgKzc1LDcgQEAKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICAKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RGZXRjaFN1YnNjcmlwdGlvbigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICB0cnkgewogICAgICAgICAgICAgRmVlZEZldGNoZXIgZmVlZEZldGNoZXIgPSBXZWJsb2dnZXJGYWN0b3J5LmdldFdlYmxvZ2dlcigpLmdldEZlZWRGZXRjaGVyKCk7CmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvQXBwbGljYXRpb25SZXNvdXJjZXNUZXN0LmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvQXBwbGljYXRpb25SZXNvdXJjZXNUZXN0LmphdmEKaW5kZXggMzVkYmRkZC4uZTUyZTIyYSAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL0FwcGxpY2F0aW9uUmVzb3VyY2VzVGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9BcHBsaWNhdGlvblJlc291cmNlc1Rlc3QuamF2YQpAQCAtMjIsMTMgKzIyLDEzIEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpOwogCitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkJlZm9yZUVhY2g7CisKIGltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwogCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLmFzc2VydEZhbHNlOwogCiAKIC8qKgpAQCAtNDcsMzMgKzQ3LDEyIEBACiAgKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzptb2xlbkBtYWlsLmNvbSI+SmFhcCB2YW4gZGVyIE1vbGVuPC9hPgogICogQHZlcnNpb24gJFJldmlzaW9uOiAxLjcgJAogICovCi1wdWJsaWMgY2xhc3MgQXBwbGljYXRpb25SZXNvdXJjZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKK3B1YmxpYyBjbGFzcyBBcHBsaWNhdGlvblJlc291cmNlc1Rlc3QgewogCS8vcHJpdmF0ZSBTdHJpbmcgdXNlckRpciA9IG51bGw7CiAJcHJpdmF0ZSBQcm9wZXJ0aWVzIGJhc2VQcm9wcyA9IG51bGw7IAogCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgQXBwbGljYXRpb25SZXNvdXJjZXNUZXN0KFN0cmluZyBuYW1lKQotCXsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotLy8JCXN1aXRlLmFkZFRlc3QobmV3IEFwcGxpY2F0aW9uUmVzb3VyY2VzVGVzdCgidGVzdFN5c3RlbVByb3BlcnRpZXMiKSk7Ci0vLwkJc3VpdGUuYWRkVGVzdCgKLS8vCQkJbmV3IEFwcGxpY2F0aW9uUmVzb3VyY2VzVGVzdCgidGVzdEFwcGxpY2F0aW9uUmVzb3VyY2VzX3poX2NuIikpOwotCQlyZXR1cm4gc3VpdGU7Ci0JfQotCQotCS8qKgotCSAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLQl7Ci0JCXN1cGVyLnNldFVwKCk7CisJQEJlZm9yZUVhY2gKKwlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogCQkvL3VzZXJEaXIgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGlyIik7CiAJCQogCQkvLyBsb2FkIGJhc2UgQXBwbGljYXRpb25SZXNvdXJjZXMucHJvcGVydGllcyBmaWxlCkBAIC04NCwxNiArNjMsMTIgQEAKIAogCS8qKgogCSAqIFRlc3QgU2ltcGxlIENoaW5lc2Ugc3R1ZmYuCi0JICogCi0JICogQHRocm93cyBFeGNlcHRpb24KIAkgKi8KLQlwdWJsaWMgdm9pZCBfdGVzdEFwcGxpY2F0aW9uUmVzb3VyY2VzX3poX2NuKCkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKKwlwdWJsaWMgdm9pZCB0ZXN0QXBwbGljYXRpb25SZXNvdXJjZXNfemhfY24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJdmVyaWZ5UmVzb3VyY2VCdW5kbGUoIkFwcGxpY2F0aW9uUmVzb3VyY2VzX3poX2NuIik7CiAJfQogCi0gICAgcHVibGljIHZvaWQgdGVzdFN5c3RlbVByb3BlcnRpZXMoKQotICAgIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U3lzdGVtUHJvcGVydGllcygpIHsKICAgICAgICAgUHJvcGVydGllcyBzeXNQcm9wcyA9IFN5c3RlbS5nZXRQcm9wZXJ0aWVzKCk7CiAgICAgICAgIGZvciAoT2JqZWN0IGtleSA6IHN5c1Byb3BzLmtleVNldCgpKSB7CiAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oa2V5ICsgIiA9ICIgKyBzeXNQcm9wcy5nZXRQcm9wZXJ0eSgoU3RyaW5nKWtleSkpOwpAQCAtMTA2LDggKzgxLDcgQEAKIAkgKiBAcGFyYW0gYnVuZGxlIG5hbWUgb2YgYnVuZGxlIHRvIHRlc3QKIAkgKiBAdGhyb3dzIEV4Y2VwdGlvbiBpZiBmaWxlIG5vdCBmb3VuZCwgb3IgaWYgaW8gZWN4ZXB0aW9uIG9jY3Vycy4KIAkgKi8KLQlwcml2YXRlIHZvaWQgdmVyaWZ5UmVzb3VyY2VCdW5kbGUoU3RyaW5nIGJ1bmRsZSkgdGhyb3dzIEV4Y2VwdGlvbgotCXsKKwlwcml2YXRlIHZvaWQgdmVyaWZ5UmVzb3VyY2VCdW5kbGUoU3RyaW5nIGJ1bmRsZSkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCS8vIHZlcmlmeSB1c2VyLWRpcjsgc2hvdWxkIGVuZCB3aXRoIHJvbGxlcgogCQkvL2Fzc2VydE5vdE51bGwodXNlckRpcik7CiAJCS8vYXNzZXJ0VHJ1ZSh1c2VyRGlyLmVuZHNXaXRoKCJyb2xsZXIiKSk7CmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvVUlQbHVnaW5NYW5hZ2VyVGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL1VJUGx1Z2luTWFuYWdlclRlc3QuamF2YQppbmRleCAzY2MzYjE0Li5hYzg3YjNjIDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvVUlQbHVnaW5NYW5hZ2VyVGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9VSVBsdWdpbk1hbmFnZXJUZXN0LmphdmEKQEAgLTE4LDM3ICsxOCwyMiBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aTsKIAotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZzsKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5Mb2dGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5jb3JlLlJvbGxlckNvbnRleHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLmNvcmUucGx1Z2lucy5VSVBsdWdpbk1hbmFnZXI7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0RXF1YWxzOwogCiAvKioKICAqIFRlc3QgUGx1Z2luIE1hbmFnZW1lbnQgYnVzaW5lc3MgbGF5ZXIgb3BlcmF0aW9ucy4KICAqLwotcHVibGljIGNsYXNzIFVJUGx1Z2luTWFuYWdlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CitwdWJsaWMgY2xhc3MgVUlQbHVnaW5NYW5hZ2VyVGVzdCAgewogICAgIAogICAgIHByaXZhdGUgc3RhdGljIExvZyBsb2cgPSBMb2dGYWN0b3J5LmdldExvZyhVSVBsdWdpbk1hbmFnZXJUZXN0LmNsYXNzKTsKICAgICAKLSAgICAKLSAgICBwdWJsaWMgVUlQbHVnaW5NYW5hZ2VyVGVzdChTdHJpbmcgbmFtZSkgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotICAgICAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShVSVBsdWdpbk1hbmFnZXJUZXN0LmNsYXNzKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsgfQotICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7IH0KLSAgICAKLSAgICAKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RFbnRyeUVkaXRvcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAJbG9nLmRlYnVnKCJTdGFydCIpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9VSVRlc3RTdWl0ZS5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL1VJVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YWJjNzAuLjAwMDAwMDAKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL1VJVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCi0gKiAgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91Ci0gKiB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKLSAqIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4gIEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZwotICogY29weXJpZ2h0IGluIHRoaXMgd29yaywgcGxlYXNlIHNlZSB0aGUgTk9USUNFIGZpbGUgaW4gdGhlIHRvcCBsZXZlbAotICogZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucGxhbmV0LmJ1c2luZXNzLldlYmxvZ2dlclJvbWVGZWVkRmV0Y2hlclRlc3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnJlbmRlcmluZy51dGlsLkNvbW1lbnRWYWxpZGF0b3JUZXN0OwotCi0KLS8qKgotICogVGVzdCBVSS4KLSAqLwotcHVibGljIGNsYXNzIFVJVGVzdFN1aXRlIHsKLSAgICAKLSAgICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0KLSAgICAgICAgVGVzdFN1aXRlIHN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCQotICAgICAgICAvLyBjb21tZW50IHBsdWdpbnMKLSAgICAgICAgc3VpdGUuYWRkVGVzdFN1aXRlKENvbW1lbnRWYWxpZGF0b3JUZXN0LmNsYXNzKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGN1c3RvbSBwbGFuZXQgZmV0Y2hlcgotICAgICAgICBzdWl0ZS5hZGRUZXN0U3VpdGUoV2VibG9nZ2VyUm9tZUZlZWRGZXRjaGVyVGVzdC5jbGFzcyk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gc3VpdGU7Ci0gICAgfQotICAgIAotfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL2NvcmUvZmlsdGVycy9Jbml0RmlsdGVyVGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL2NvcmUvZmlsdGVycy9Jbml0RmlsdGVyVGVzdC5qYXZhCmluZGV4IDBjN2FlZjQuLjMwZjFhM2UgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9jb3JlL2ZpbHRlcnMvSW5pdEZpbHRlclRlc3QuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvY29yZS9maWx0ZXJzL0luaXRGaWx0ZXJUZXN0LmphdmEKQEAgLTE4LDE1ICsxOCwxOSBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51aS5jb3JlLmZpbHRlcnM7CiAKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0RXF1YWxzOworCiAKIC8qKgogICogQGF1dGhvciBLb2hlaSBOb3pha2kKICAqLwotcHVibGljIGNsYXNzIEluaXRGaWx0ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgeworcHVibGljIGNsYXNzIEluaXRGaWx0ZXJUZXN0ICB7CiAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0VSVkVSX05BTUUgPSAicm9sbGVyLmV4YW1wbGUuY29tIjsKIAorICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEdldEFic29sdXRlVXJsT25Sb290V2l0aEh0dHAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgYm9vbGVhbiBzZWN1cmUgPSBmYWxzZTsKICAgICAgICAgU3RyaW5nIGNvbnRleHRQYXRoID0gIiI7CkBAIC0zNyw2ICs0MSw3IEBACiAgICAgICAgIGFzc2VydEVxdWFscygiaHR0cDovL3JvbGxlci5leGFtcGxlLmNvbSIsIGFic29sdXRlVXJsKTsKICAgICB9CiAKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRBYnNvbHV0ZVVybE9uUm9vdFdpdGhIdHRwcygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBib29sZWFuIHNlY3VyZSA9IHRydWU7CiAgICAgICAgIFN0cmluZyBjb250ZXh0UGF0aCA9ICIiOwpAQCAtNDcsNiArNTIsNyBAQAogICAgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly9yb2xsZXIuZXhhbXBsZS5jb20iLCBhYnNvbHV0ZVVybCk7CiAgICAgfQogCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0QWJzb2x1dGVVcmxBZ2FpbnN0VG9wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIGJvb2xlYW4gc2VjdXJlID0gZmFsc2U7CiAgICAgICAgIFN0cmluZyBjb250ZXh0UGF0aCA9ICIvcm9sbGVyIjsKQEAgLTU3LDYgKzYzLDcgQEAKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJodHRwOi8vcm9sbGVyLmV4YW1wbGUuY29tL3JvbGxlciIsIGFic29sdXRlVXJsKTsKICAgICB9CiAKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRBYnNvbHV0ZVVybEFnYWluc3RQZXJtYWxpbmsoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgYm9vbGVhbiBzZWN1cmUgPSBmYWxzZTsKICAgICAgICAgU3RyaW5nIGNvbnRleHRQYXRoID0gIi9yb2xsZXIiOwpAQCAtNjcsNiArNzQsNyBAQAogICAgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly9yb2xsZXIuZXhhbXBsZS5jb20vcm9sbGVyIiwgYWJzb2x1dGVVcmwpOwogICAgIH0KIAorICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFJlbW92ZVRyYWlsaW5nU2xhc2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiwgSW5pdEZpbHRlci5yZW1vdmVUcmFpbGluZ1NsYXNoKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiwgSW5pdEZpbHRlci5yZW1vdmVUcmFpbGluZ1NsYXNoKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tIikpOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3JlbmRlcmluZy91dGlsL0NvbW1lbnRWYWxpZGF0b3JUZXN0LmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvcmVuZGVyaW5nL3V0aWwvQ29tbWVudFZhbGlkYXRvclRlc3QuamF2YQppbmRleCA2MDVjMjc5Li5hNmNkNDZiIDEwMDY0NAotLS0gYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvcmVuZGVyaW5nL3V0aWwvQ29tbWVudFZhbGlkYXRvclRlc3QuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvcmVuZGVyaW5nL3V0aWwvQ29tbWVudFZhbGlkYXRvclRlc3QuamF2YQpAQCAtMTgsMzAgKzE4LDMzIEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnVpLnJlbmRlcmluZy51dGlsOwogCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5wb2pvcy5XZWJsb2dFbnRyeUNvbW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLlRlc3RVdGlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuVXNlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nRW50cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZzsKK2ltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIucG9qb3MuV2VibG9nRW50cnk7CitpbXBvcnQgb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnBvam9zLldlYmxvZ0VudHJ5Q29tbWVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkucmVuZGVyaW5nLnBsdWdpbnMuY29tbWVudHMuQ29tbWVudFZhbGlkYXRpb25NYW5hZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51dGlsLlJvbGxlck1lc3NhZ2VzOwotaW1wb3J0IG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci5UZXN0VXRpbHM7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFmdGVyRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQmVmb3JlRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5qdXBpdGVyLmFwaS5Bc3NlcnRpb25zLmFzc2VydFRydWU7CiAKIC8qKgogICoKICAqIEBhdXRob3IgRGF2aWQgTS4gSm9obnNvbgogICovCi1wdWJsaWMgY2xhc3MgQ29tbWVudFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CitwdWJsaWMgY2xhc3MgQ29tbWVudFZhbGlkYXRvclRlc3QgIHsKICAgICBDb21tZW50VmFsaWRhdGlvbk1hbmFnZXIgbWdyID0gbnVsbDsKICAgICBXZWJsb2cgICAgICAgIHdlYmxvZyA9IG51bGw7CiAgICAgVXNlciAgICAgICAgICAgdXNlciA9IG51bGw7CiAgICAgV2VibG9nRW50cnkgICAgZW50cnkgPSBudWxsOwogICAgIAotICAgIC8qKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIENvbW1lbnRWYWxpZGF0b3JUZXN0ICovCi0gICAgcHVibGljIENvbW1lbnRWYWxpZGF0b3JUZXN0KCkgewotICAgIH0gCiAKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIEBCZWZvcmVFYWNoCisgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgLy8gc2V0dXAgd2VibG9nZ2VyCiAgICAgICAgIFRlc3RVdGlscy5zZXR1cFdlYmxvZ2dlcigpOwogICAgICAgICAKQEAgLTU3LDE0ICs2MCwxNiBAQAogCiAgICAgICAgIFRlc3RVdGlscy5lbmRTZXNzaW9uKHRydWUpOwogICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCisgICAgQEFmdGVyRWFjaAorICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIFRlc3RVdGlscy50ZWFyZG93bldlYmxvZ0VudHJ5KGVudHJ5LmdldElkKCkpOwogICAgICAgICAvL1Rlc3RVdGlscy50ZWFyZG93bldlYmxvZ0NhdGVnb3J5KHdlYmxvZy5nZXREZWZhdWx0Q2F0ZWdvcnkoKS5nZXRJZCgpKTsKICAgICAgICAgVGVzdFV0aWxzLnRlYXJkb3duV2VibG9nKHdlYmxvZy5nZXRJZCgpKTsKICAgICAgICAgVGVzdFV0aWxzLnRlYXJkb3duVXNlcih1c2VyLmdldFVzZXJOYW1lKCkpOwogICAgIH0KLSAgICAKKworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEV4Y2Vzc1NpemVDb21tZW50VmFsaWRhdG9yKCkgewogICAgICAgICBSb2xsZXJNZXNzYWdlcyBtc2dzID0gbmV3IFJvbGxlck1lc3NhZ2VzKCk7CiAgICAgICAgIFdlYmxvZ0VudHJ5Q29tbWVudCBjb21tZW50ID0gY3JlYXRlRW1wdHlDb21tZW50KCk7CkBAIC04MSw3ICs4Niw4IEBACiAgICAgICAgIGNvbW1lbnQuc2V0Q29udGVudChzYi50b1N0cmluZygpKTsgCiAgICAgICAgIGFzc2VydFRydWUobWdyLnZhbGlkYXRlQ29tbWVudChjb21tZW50LCBtc2dzKSAhPSAxMDApOwogICAgIH0KLSAgICAKKworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEV4Y2Vzc0xpbmtzQ29tbWVudFZhbGlkYXRvcigpIHsKICAgICAgICAgUm9sbGVyTWVzc2FnZXMgbXNncyA9IG5ldyBSb2xsZXJNZXNzYWdlcygpOwogICAgICAgICBXZWJsb2dFbnRyeUNvbW1lbnQgY29tbWVudCA9IGNyZWF0ZUVtcHR5Q29tbWVudCgpOwpAQCAtOTksNyArMTA1LDggQEAKICAgICAgICAgKTsgCiAgICAgICAgIGFzc2VydFRydWUobWdyLnZhbGlkYXRlQ29tbWVudChjb21tZW50LCBtc2dzKSAhPSAxMDApOyAgICAgICAgCiAgICAgfQotICAgIAorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0QmxhY2tsaXN0Q29tbWVudFZhbGlkYXRvcigpIHsKICAgICAgICAgUm9sbGVyTWVzc2FnZXMgbXNncyA9IG5ldyBSb2xsZXJNZXNzYWdlcygpOwogICAgICAgICBXZWJsb2dFbnRyeUNvbW1lbnQgY29tbWVudCA9IGNyZWF0ZUVtcHR5Q29tbWVudCgpOwpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvdXRpbC9VSUFjdGlvblRlc3QuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91aS9zdHJ1dHMyL3V0aWwvVUlBY3Rpb25UZXN0LmphdmEKaW5kZXggMzg2NmMwYi4uZjgwNGNmMSAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3VpL3N0cnV0czIvdXRpbC9VSUFjdGlvblRlc3QuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdWkvc3RydXRzMi91dGlsL1VJQWN0aW9uVGVzdC5qYXZhCkBAIC0xOCwyMSArMTgsMTQgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudWkuc3RydXRzMi51dGlsOwogCitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CiAKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0RXF1YWxzOwogCiAKLXB1YmxpYyBjbGFzcyBVSUFjdGlvblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7CitwdWJsaWMgY2xhc3MgVUlBY3Rpb25UZXN0ICB7CiAKLSAgICBwdWJsaWMgVUlBY3Rpb25UZXN0KCkgewotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoVUlBY3Rpb25UZXN0LmNsYXNzKTsKLSAgICB9Ci0KKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RDbGVhblRleHRFbXB0eSgpIHsKICAgICAgICAgYXNzZXJ0RXF1YWxzKG51bGwsVUlBY3Rpb24uY2xlYW5UZXh0S2V5KG51bGwpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCIiLFVJQWN0aW9uLmNsZWFuVGV4dEtleSgiIikpOwpAQCAtNDAsNiArMzMsNyBAQAogICAgICAgICBhc3NlcnRFcXVhbHMoIiIsVUlBY3Rpb24uY2xlYW5UZXh0QXJnKCIiKSk7CiAgICAgfQogCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW5UZXh0S2V5KCkgewogICAgICAgICBhc3NlcnRFcXVhbHMobnVsbCxVSUFjdGlvbi5jbGVhblRleHRLZXkobnVsbCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIiIsVUlBY3Rpb24uY2xlYW5UZXh0S2V5KCIiKSk7CkBAIC01OCw2ICs1Miw3IEBACiAgICAgICAgIGFzc2VydEVxdWFscygiIiwgVUlBY3Rpb24uY2xlYW5UZXh0S2V5KCJzb21ldGhpbmcgJXtmb299IG1vcmUiKSk7CiAgICAgfQogCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0Q2xlYW5UZXh0QXJnKCkgewogICAgICAgICBhc3NlcnRFcXVhbHMoIiZsdDtpJmd0O3NvbWUgdGV4dCZsdDsvaSZndDsiLFVJQWN0aW9uLmNsZWFuVGV4dEFyZygiPGk+c29tZSB0ZXh0PC9pPiIpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKCImbHQ7aSZndDtzb21lICR7dGV4dH0mbHQ7L2kmZ3Q7IixVSUFjdGlvbi5jbGVhblRleHRBcmcoIjxpPnNvbWUgJHt0ZXh0fTwvaT4iKSk7CmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdXRpbC9CbGFja2xpc3RUZXN0LmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdXRpbC9CbGFja2xpc3RUZXN0LmphdmEKaW5kZXggMTU4Yjc0MC4uNjM4YWU5ZCAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3V0aWwvQmxhY2tsaXN0VGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91dGlsL0JsYWNrbGlzdFRlc3QuamF2YQpAQCAtMTgsODUgKzE4LDcyIEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnV0aWw7CiAKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuTG9nOwogaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLkxvZ0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFmdGVyRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuQmVmb3JlRWFjaDsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy5hc3NlcnRGYWxzZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0VHJ1ZTsKIAogLyoqCiAgKiBUZXN0IGJsYWNrbGlzdCBmdW5jdGlvbmFsaXR5LgogICovCi1wdWJsaWMgY2xhc3MgQmxhY2tsaXN0VGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgICBwdWJsaWMgc3RhdGljIExvZyBsb2cgPSAgICAKLSAgICAgICAgTG9nRmFjdG9yeS5nZXRMb2coQmxhY2tsaXN0VGVzdC5jbGFzcyk7ICAKK3B1YmxpYyBjbGFzcyBCbGFja2xpc3RUZXN0ICB7CisgICAgcHVibGljIHN0YXRpYyBMb2cgbG9nID0gTG9nRmFjdG9yeS5nZXRMb2coQmxhY2tsaXN0VGVzdC5jbGFzcyk7CiAgICAgCiAgICAgcHJpdmF0ZSBCbGFja2xpc3QgYmxhY2tsaXN0OwogICAgIAotICAgICAgCi0gICAgcHVibGljIEJsYWNrbGlzdFRlc3QoKSB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIEBwYXJhbSBhcmcwCi0gICAgICovCi0gICAgcHVibGljIEJsYWNrbGlzdFRlc3QoU3RyaW5nIGFyZzApIHsKLSAgICAgICAgc3VwZXIoYXJnMCk7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIEBzZWUgVGVzdENhc2Ujc2V0VXAoKQotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHN1cGVyLnNldFVwKCk7CisgICAgQEJlZm9yZUVhY2gKKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBibGFja2xpc3QgPSBCbGFja2xpc3QuZ2V0QmxhY2tsaXN0KCk7CiAgICAgICAgIFN0cmluZyBGUyA9IEZpbGUuc2VwYXJhdG9yOwogICAgICAgICBTdHJpbmcgYmxhY2tsaXN0TmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgicHJvamVjdC5idWlsZC5kaXJlY3RvcnkiKSArIEZTICsgImNsYXNzZXMiICsgImJsYWNrbGlzdC50eHQiOwogICAgICAgICBsb2cuaW5mbygiUHJvY2Vzc2luZyBCbGFja2xpc3QgZmlsZTogIiArIGJsYWNrbGlzdE5hbWUpOwogICAgICAgICBibGFja2xpc3QubG9hZEJsYWNrbGlzdEZyb21GaWxlKGJsYWNrbGlzdE5hbWUpOwogICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBAc2VlIFRlc3RDYXNlI3RlYXJEb3duKCkKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBzdXBlci50ZWFyRG93bigpOwotICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbihibGFja2xpc3QpOworCisgICAgQEFmdGVyRWFjaAorICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgfQotICAgIAorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0SXNCbGFja2xpc3RlZDAoKSB7CiAgICAgICAgIGFzc2VydEZhbHNlKGJsYWNrbGlzdC5pc0JsYWNrbGlzdGVkKCJmb3VyIHNjb3JlIGFuZCBzZXZlbiB5ZWFycyBhZ28uY29tIikpOwogICAgIH0KICAgICAKICAgICAvLyB0ZXN0IG5vbi1yZWdleAorICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdElzQmxhY2tsaXN0ZWQxKCkgewogICAgICAgICBhc3NlcnRUcnVlKGJsYWNrbGlzdC5pc0JsYWNrbGlzdGVkKCJ3d3cubXlibGFja2xpc3RlZHNpdGUuY29tIikpOwogICAgIH0KICAgICAKICAgICAvLyB0ZXN0IHRoZSByZWdleCBwYXR0ZXJucworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdElzQmxhY2tsaXN0ZWQyKCkgewogICAgICAgICBhc3NlcnRUcnVlKGJsYWNrbGlzdC5pc0JsYWNrbGlzdGVkKCJ3d3cubHNvdHIuY29tIikpOwogICAgIH0KICAgICAKICAgICAvLyB0ZXN0IHRoZSByZWdleCBwYXR0ZXJucworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdElzQmxhY2tsaXN0ZWQzKCkgewogICAgICAgICBhc3NlcnRUcnVlKGJsYWNrbGlzdC5pc0JsYWNrbGlzdGVkKCJidXltb3Jlb25saW5lLmNvbSIpKTsKICAgICB9CiAgICAgCiAgICAgLy8gdGVzdCB0aGUgcmVnZXggcGF0dGVybnMKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RJc0JsYWNrbGlzdGVkNCgpIHsKICAgICAgICAgYXNzZXJ0VHJ1ZShibGFja2xpc3QuaXNCbGFja2xpc3RlZCgiZGlldC1lbmxhcmdlbWVudC5jb20iKSk7CiAgICAgfQogICAgIAogICAgIC8vIHRlc3QgdGhlIHJlZ2V4IHBhdHRlcm5zCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0SXNCbGFja2xpc3RlZDUoKSB7CiAgICAgICAgIGFzc2VydFRydWUoYmxhY2tsaXN0LmlzQmxhY2tsaXN0ZWQoInZpYWdyYS5jb20iKSk7CiAgICAgfQogICAgIAotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoQmxhY2tsaXN0VGVzdC5jbGFzcyk7Ci0gICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdXRpbC9MUlVDYWNoZTJUZXN0LmphdmEgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdXRpbC9MUlVDYWNoZTJUZXN0LmphdmEKaW5kZXggNTg1ZTFlOC4uOTg5ZTM1YiAxMDA2NDQKLS0tIGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3V0aWwvTFJVQ2FjaGUyVGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91dGlsL0xSVUNhY2hlMlRlc3QuamF2YQpAQCAtMTgsMjQgKzE4LDE2IEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS5yb2xsZXIud2VibG9nZ2VyLnV0aWw7CiAKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKK2ltcG9ydCBvcmcuanVuaXQuanVwaXRlci5hcGkuVGVzdDsKIAoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy4qOwogCiAvKioKICAqIFRlc3QgTFJVQ2FjaGUyLgogICovCi1wdWJsaWMgY2xhc3MgTFJVQ2FjaGUyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgICAKLSAgICAvKioKLSAgICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotICAgICAgICBzdXBlci5zZXRVcCgpOwotICAgIH0KLSAgICAKK3B1YmxpYyBjbGFzcyBMUlVDYWNoZTJUZXN0ICB7CisKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RUaW1lb3V0KCkgewogICAgICAgICAvLyBDcmVhdGUgY2FjaGUgd2l0aCAxMDAgaXRlbSBsaW1pdCBhbmQgMTUgc2Vjb25kIHRpbWVvdXQKICAgICAgICAgVGVzdEVudmlyb25tZW50IGVudiA9IG5ldyBUZXN0RW52aXJvbm1lbnQoKTsKQEAgLTU0LDcgKzQ2LDggQEAKICAgICAgICAgYXNzZXJ0TnVsbChjYWNoZS5nZXQoImtleTIiKSk7CiAgICAgICAgIGFzc2VydE51bGwoY2FjaGUuZ2V0KCJrZXkzIikpOwogICAgIH0KLSAgICAKKworICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdExSVSgpIHsKICAgICAgICAgLy8gQ3JlYXRlIGNhY2hlIHdpdGggMyBpdGVtIGxpbWl0IGFuZCAxNSBzZWNvbmQgdGltZW91dAogICAgICAgICBUZXN0RW52aXJvbm1lbnQgZW52ID0gbmV3IFRlc3RFbnZpcm9ubWVudCgpOwpAQCAtNzgsNyArNzEsOCBAQAogICAgICAgICBjYWNoZS5wdXQoImtleTQiLCAic3RyaW5nNCIpOwogICAgICAgICBhc3NlcnROdWxsKGNhY2hlLmdldCgia2V5MyIpKTsKICAgICB9Ci0gICAgCisKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RQdXJnZSgpIHsKICAgICAgICAgLy8gQ3JlYXRlIGNhY2hlIHdpdGggMTAwIGl0ZW0gbGltaXQgYW5kIDE1IHNlY29uZCB0aW1lb3V0CiAgICAgICAgIFRlc3RFbnZpcm9ubWVudCBlbnYgPSBuZXcgVGVzdEVudmlyb25tZW50KCk7CkBAIC05OSwxNCArOTMsNiBAQAogICAgICAgICBhc3NlcnRFcXVhbHMoMCwgY2FjaGUuc2l6ZSgpKTsKICAgICB9CiAgICAgCi0gICAgLyoqCi0gICAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQotICAgICAqLwotICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLSAgICAgICAgc3VwZXIudGVhckRvd24oKTsKLSAgICB9Ci0gICAgCiAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBUZXN0RW52aXJvbm1lbnQgaW1wbGVtZW50cyBMUlVDYWNoZTIuRW52aXJvbm1lbnQgewogICAgICAgICBwdWJsaWMgbG9uZyB0aW1lID0gMDsKICAgICAgICAgcHVibGljIGxvbmcgZ2V0Q3VycmVudFRpbWVJbk1pbGxpcygpIHsKQEAgLTExNCw4ICsxMDAsNSBAQAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoTFJVQ2FjaGUyVGVzdC5jbGFzcyk7Ci0gICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdXRpbC9MaW5rYmFja0V4dHJhY3RvclRlc3QuamF2YSBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91dGlsL0xpbmtiYWNrRXh0cmFjdG9yVGVzdC5qYXZhCmluZGV4IDAzNjFjMmMuLjgxNTM4NjQgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91dGlsL0xpbmtiYWNrRXh0cmFjdG9yVGVzdC5qYXZhCisrKyBiL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91dGlsL0xpbmtiYWNrRXh0cmFjdG9yVGVzdC5qYXZhCkBAIC0xOCw1MSArMTgsMjQgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnJvbGxlci53ZWJsb2dnZXIudXRpbDsKIAotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuanVwaXRlci5hcGkuQXNzZXJ0aW9ucy5hc3NlcnRFcXVhbHM7CiAKIC8qKgogICogVGVzdCBsaW5rYmFjayBleHRyYWN0b3IuCiAgKi8KLXB1YmxpYyBjbGFzcyBMaW5rYmFja0V4dHJhY3RvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0gICAgCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0b3IgZm9yIExpbmtiYWNrRXh0cmFjdG9yVGVzdC4KLSAgICAgKiBAcGFyYW0gYXJnMAotICAgICAqLwotICAgIHB1YmxpYyBMaW5rYmFja0V4dHJhY3RvclRlc3QoU3RyaW5nIGFyZzApIHsKLSAgICAgICAgc3VwZXIoYXJnMCk7Ci0gICAgfQorcHVibGljIGNsYXNzIExpbmtiYWNrRXh0cmFjdG9yVGVzdCAgewogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBAc2VlIFRlc3RDYXNlI3NldFVwKCkKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBzdXBlci5zZXRVcCgpOwotICAgIH0KLSAgICAKLSAgICAvKioKLSAgICAgKiBAc2VlIFRlc3RDYXNlI3RlYXJEb3duKCkKLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBzdXBlci50ZWFyRG93bigpOwotICAgIH0KLSAgICAKICAgICBwdWJsaWMgdm9pZCB0ZXN0TGlua2JhY2tFeHRyYWN0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nW11bXSB0ZXN0cmVmcyA9IG5ldyBTdHJpbmdbXVtdCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIFNlY29uZCBVUkwgY29udGFpbnMgYSBsaW5rIHRvIHRoZSBmaXJzdAogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICJodHRwOi8vY2Fzc2FuZHJhLmFwYWNoZS5vcmcvIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vcm9sbGVyd2VibG9nZ2VyLm9yZy9yb2xsZXIvZW50cnkvY29tcG9zaXRlX2tleXNfaW5fY2Fzc2FuZHJhIgorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHBzOi8vcm9sbGVyd2VibG9nZ2VyLm9yZy9yb2xsZXIvZW50cnkvY29tcG9zaXRlX2tleXNfaW5fY2Fzc2FuZHJhIgogICAgICAgICAgICAgfSwKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAiaHR0cDovL3JvbGxlci5hcGFjaGUub3JnL2Rvd25sb2Fkcy9kb3dubG9hZHMuaHRtbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3JvbGxlcndlYmxvZ2dlci5vcmcvcHJvamVjdC9kYXRlLzIwMTQwNjI3IgorICAgICAgICAgICAgICAgICAgICAgICAgImh0dHBzOi8vcm9sbGVyd2VibG9nZ2VyLm9yZy9wcm9qZWN0L2RhdGUvMjAxNDA2MjciCiAgICAgICAgICAgICB9CiAgICAgICAgIH07CiAKQEAgLTc0LDkgKzQ3LDYgQEAKIAogICAgICAgICAvLyB0b2RvOiBsZS5nZXRQZXJtYWxpbmsoKSBhbmQgbGUuZ2V0RXhjZXJwdCgpIHdvcmtpbmcKICAgICB9Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotICAgICAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShMaW5rYmFja0V4dHJhY3RvclRlc3QuY2xhc3MpOwotICAgIH0KKwogICAgIAogfQpkaWZmIC0tZ2l0IGEvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3V0aWwvVXRpbGl0aWVzVGVzdC5qYXZhIGIvYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS9yb2xsZXIvd2VibG9nZ2VyL3V0aWwvVXRpbGl0aWVzVGVzdC5qYXZhCmluZGV4IDZkYjcwNDYuLjJiOTdkMGMgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvcm9sbGVyL3dlYmxvZ2dlci91dGlsL1V0aWxpdGllc1Rlc3QuamF2YQorKysgYi9hcHAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3JvbGxlci93ZWJsb2dnZXIvdXRpbC9VdGlsaXRpZXNUZXN0LmphdmEKQEAgLTE4LDYyICsxOCw0MCBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUucm9sbGVyLndlYmxvZ2dlci51dGlsOwogCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7CitpbXBvcnQgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLlRlc3Q7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0Lmp1cGl0ZXIuYXBpLkFzc2VydGlvbnMuYXNzZXJ0RXF1YWxzOwogCiAvKioKICAqIFRlc3QgdXRpbGl0aWVzLgogICovCi1wdWJsaWMgY2xhc3MgVXRpbGl0aWVzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgICAKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RvciBmb3IgTGlua2JhY2tFeHRyYWN0b3JUZXN0LgotICAgICAqIEBwYXJhbSBhcmcwCi0gICAgICovCi0gICAgcHVibGljIFV0aWxpdGllc1Rlc3QoU3RyaW5nIGFyZzApIHsKLSAgICAgICAgc3VwZXIoYXJnMCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQHNlZSBUZXN0Q2FzZSNzZXRVcCgpCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIuc2V0VXAoKTsKLSAgICB9Ci0gICAgCi0gICAgLyoqCi0gICAgICogQHNlZSBUZXN0Q2FzZSN0ZWFyRG93bigpCi0gICAgICovCi0gICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgc3VwZXIudGVhckRvd24oKTsKLSAgICB9Ci0gICAgCitwdWJsaWMgY2xhc3MgVXRpbGl0aWVzVGVzdCAgeworCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RXh0cmFjdEhUTUwoKSB7CiAgICAgICAgIFN0cmluZyB0ZXN0ID0gIjxhPmtlZXAgbWU8L2E+IjsKICAgICAgICAgU3RyaW5nIGV4cGVjdCA9ICI8YT48L2E+IjsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IFV0aWxpdGllcy5leHRyYWN0SFRNTCh0ZXN0KTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdCwgcmVzdWx0KTsKICAgICB9Ci0gICAgCisKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVIVE1MKCkgewogICAgICAgICBTdHJpbmcgdGVzdCA9ICI8YnI+PGJyPjxwPmEgPGI+Ym9sZDwvYj4gc2VudGVuY2Ugd2l0aCBhIDxhIGhyZWY9XCJodHRwOi8vZXhhbXBsZS5jb21cIj5saW5rPC9hPjwvcD4iOwogICAgICAgICBTdHJpbmcgZXhwZWN0ID0gImEgYm9sZCBzZW50ZW5jZSB3aXRoIGEgbGluayI7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBVdGlsaXRpZXMucmVtb3ZlSFRNTCh0ZXN0LCBmYWxzZSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhleHBlY3QsIHJlc3VsdCk7CiAgICAgfQotICAgIAorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0VHJ1bmNhdGVOaWNlbHkxKCkgewogICAgICAgICBTdHJpbmcgdGVzdCA9ICJibGFoIGJsYWggYmxhaCBibGFoIGJsYWgiOwogICAgICAgICBTdHJpbmcgZXhwZWN0ID0gImJsYWggYmxhaCBibGFoIjsKICAgICAgICAgU3RyaW5nIHJlc3VsdCA9IFV0aWxpdGllcy50cnVuY2F0ZU5pY2VseSh0ZXN0LCAxMSwgMTUsICIiKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdCwgcmVzdWx0KTsKICAgICB9Ci0gICAgCisKKyAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RUcnVuY2F0ZU5pY2VseTIoKSB7CiAgICAgICAgIFN0cmluZyB0ZXN0ID0gIjxwPjxiPmJsYWgxIGJsYWgyPC9iPiA8aT5ibGFoMyBibGFoNCBibGFoNTwvaT48L3A+IjsKICAgICAgICAgU3RyaW5nIGV4cGVjdCA9ICI8cD48Yj5ibGFoMSBibGFoMjwvYj4gPGk+YmxhaDM8L2k+PC9wPiI7CkBAIC04Myw2ICs2MSw3IEBACiAgICAgfQogICAgIAogICAgIC8qIGJyb2tlbiBiZWNhdXNlIGl0IHVzZXMgVXRpbGl0aWVzTW9kZWwgd2hpY2ggaXMgcGFydCBvZiAudWkuKiBwYWNrYWdlCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0QWRkTm9Gb2xsb3coKSB7CiAgICAgICAgIFN0cmluZyB0ZXN0MSA9ICI8cD50aGlzIHNvbWUgdGV4dCB3aXRoIGEgPGEgaHJlZj1cImh0dHA6Ly9leGFtcGxlLmNvbVwiPmxpbms8L2E+IjsKICAgICAgICAgU3RyaW5nIGV4cGVjdDEgPSAiPHA+dGhpcyBzb21lIHRleHQgd2l0aCBhIDxhIGhyZWY9XCJodHRwOi8vZXhhbXBsZS5jb21cIiByZWw9XCJub2ZvbGxvd1wiPmxpbms8L2E+IjsKQEAgLTk2LDkgKzc1LDUgQEAKICAgICAgCiAgICAgfQogICAgICAqLwotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoVXRpbGl0aWVzVGVzdC5jbGFzcyk7Ci0gICAgfQotICAgIAorCiB9CmRpZmYgLS1naXQgYS9hcHAvc3JjL3Rlc3QvcmVzb3VyY2VzL3JvbGxlci1jdXN0b20ucHJvcGVydGllcyBiL2FwcC9zcmMvdGVzdC9yZXNvdXJjZXMvcm9sbGVyLWN1c3RvbS5wcm9wZXJ0aWVzCmluZGV4IGFmNzIxMzMuLmRkNmE1ODAgMTAwNjQ0Ci0tLSBhL2FwcC9zcmMvdGVzdC9yZXNvdXJjZXMvcm9sbGVyLWN1c3RvbS5wcm9wZXJ0aWVzCisrKyBiL2FwcC9zcmMvdGVzdC9yZXNvdXJjZXMvcm9sbGVyLWN1c3RvbS5wcm9wZXJ0aWVzCkBAIC0xLDMgKzEsNCBAQAorCiBkYXRhYmFzZS5jb25maWd1cmF0aW9uVHlwZT1qZGJjCiBkYXRhYmFzZS5qZGJjLmRyaXZlckNsYXNzPW9yZy5hcGFjaGUuZGVyYnkuamRiYy5DbGllbnREcml2ZXIKIGRhdGFiYXNlLmpkYmMuY29ubmVjdGlvblVSTD1qZGJjOmRlcmJ5Oi8vbG9jYWxob3N0OjQyMjQvbWVtb3J5OnJvbGxlcmRiCmRpZmYgLS1naXQgYS9hc3NlbWJseS1yZWxlYXNlL2NvcHktZmlsZXMuc2ggYi9hc3NlbWJseS1yZWxlYXNlL2NvcHktZmlsZXMuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg0ZTE1YQotLS0gL2Rldi9udWxsCisrKyBiL2Fzc2VtYmx5LXJlbGVhc2UvY29weS1maWxlcy5zaApAQCAtMCwwICsxIEBACitjcCB0YXJnZXQvcm9sbGVyLXJlbGVhc2UKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5LXJlbGVhc2UvY29weS10by1hc2Yuc2ggYi9hc3NlbWJseS1yZWxlYXNlL2NvcHktdG8tYXNmLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmIwODNmZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hc3NlbWJseS1yZWxlYXNlL2NvcHktdG8tYXNmLnNoCkBAIC0wLDAgKzEsMiBAQAorY3AgdGFyZ2V0L3JvbGxlci1yZWxlYXNlLSogfi9zcmMuYXNmL3JvbGxlci1kaXN0L2Rldi9yb2xsZXIvcm9sbGVyLTYuMC92Ni4wLjAKKwpkaWZmIC0tZ2l0IGEvYXNzZW1ibHktcmVsZWFzZS9wb20ueG1sIGIvYXNzZW1ibHktcmVsZWFzZS9wb20ueG1sCmluZGV4IDdiNmY3YzcuLjhjYzQxM2EgMTAwNjQ0Ci0tLSBhL2Fzc2VtYmx5LXJlbGVhc2UvcG9tLnhtbAorKysgYi9hc3NlbWJseS1yZWxlYXNlL3BvbS54bWwKQEAgLTIyLDcgKzIyLDcgQEAKICAgICA8cGFyZW50PgogICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnJvbGxlcjwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+cm9sbGVyLXByb2plY3Q8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjUuMi4zPC92ZXJzaW9uPgorICAgICAgICA8dmVyc2lvbj42LjAuMC1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CiAgICAgPC9wYXJlbnQ+CiAKZGlmZiAtLWdpdCBhL2Fzc2VtYmx5LXJlbGVhc2Uvc2lnbi1yZWxlYXNlLnNoIGIvYXNzZW1ibHktcmVsZWFzZS9zaWduLXJlbGVhc2Uuc2gKaW5kZXggZmE1YTdlOS4uOTM0MmEzNSAxMDA3NTUKLS0tIGEvYXNzZW1ibHktcmVsZWFzZS9zaWduLXJlbGVhc2Uuc2gKKysrIGIvYXNzZW1ibHktcmVsZWFzZS9zaWduLXJlbGVhc2Uuc2gKQEAgLTEsNyArMSw3IEBACiAjIS91c3IvYmluL2VudiBiYXNoCiAKLWV4cG9ydCByY3N0cmluZz0iLXJjLTIiCi1leHBvcnQgdnN0cmluZz0iNS4yLjMiCitleHBvcnQgcmNzdHJpbmc9IiIKK2V4cG9ydCB2c3RyaW5nPSI2LjAuMC1TTkFQU0hPVCIKIAogIyBmb3IgcmMgcmVsZWFzZXMgd2UgcmVuYW1lIHRoZSByZWxlYXNlIGZpbGVzCiBpZiBbIHJjc3RyaW5nICE9ICIiIF07IHRoZW4KZGlmZiAtLWdpdCBhL2RvY2tlci1jb21wb3NlLnltbCBiL2RvY2tlci1jb21wb3NlLnltbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjg4ODgyCi0tLSAvZGV2L251bGwKKysrIGIvZG9ja2VyLWNvbXBvc2UueW1sCkBAIC0wLDAgKzEsNDggQEAKKworIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91CisjIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdAorIyB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuICBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcKKyMgY29weXJpZ2h0IGluIHRoaXMgd29yaywgcGxlYXNlIHNlZSB0aGUgTk9USUNFIGZpbGUgaW4gdGhlIHRvcCBsZXZlbAorIyBkaXJlY3Rvcnkgb2YgdGhpcyBkaXN0cmlidXRpb24uCisKKworIyBFeGFtcGxlIERvY2tlciBDb21wb3NlIHNldHVwIGZvciBydW5uaW5nIFJvbGxlciBhbmQgUG9zdHJlU1FMIGxvY2FsbHkKKworCit2ZXJzaW9uOiAnMy4yJworCitzZXJ2aWNlczoKKworICAgcG9zdGdyZXNxbDoKKyAgICAgIGltYWdlOiAicG9zdGdyZXM6MTAuMCIKKyAgICAgIHBvcnRzOgorICAgICAgICAgLSAiNTQzMjo1NDMyIgorICAgICAgdm9sdW1lczoKKyAgICAgICAgIC0gdHlwZTogYmluZAorICAgICAgICAgICBzb3VyY2U6IC4vZG9ja2VyL3Bvc3RncmVzcWwtZGF0YQorICAgICAgICAgICB0YXJnZXQ6IC92YXIvbGliL3Bvc3RncmVzcWwvZGF0YQorICAgICAgZW52aXJvbm1lbnQ6CisgICAgICAgICAtIFBPU1RHUkVTX0RCPXJvbGxlcmRiCisgICAgICAgICAtIFBPU1RHUkVTX1VTRVI9c2NvdHQKKyAgICAgICAgIC0gUE9TVEdSRVNfUEFTU1dPUkQ9dGlnZXIKKworICAgcm9sbGVyOgorICAgICAgaW1hZ2U6CisgICAgICAgICBidWlsZDogLgorICAgICAgcG9ydHM6CisgICAgICAgICAtICI4MDgwOjgwODAiCisgICAgICB2b2x1bWVzOgorICAgICAgICAgLSB0eXBlOiBiaW5kCisgICAgICAgICAgIHNvdXJjZTogLi9kb2NrZXIvcm9sbGVyLWRhdGEKKyAgICAgICAgICAgdGFyZ2V0OiAvdmFyL2xpYi9yb2xsZXIvZGF0YQorCmRpZmYgLS1naXQgYS9kb2NrZXIvZW50cnktcG9pbnQuc2ggYi9kb2NrZXIvZW50cnktcG9pbnQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMThjNzRhYwotLS0gL2Rldi9udWxsCisrKyBiL2RvY2tlci9lbnRyeS1wb2ludC5zaApAQCAtMCwwICsxLDM0IEBACisjIS91c3IvYmluL2VudiBiYXNoCisKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlCisjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdQorIyB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QKKyMgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLiAgRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nCisjIGNvcHlyaWdodCBpbiB0aGlzIHdvcmssIHBsZWFzZSBzZWUgdGhlIE5PVElDRSBmaWxlIGluIHRoZSB0b3AgbGV2ZWwKKyMgZGlyZWN0b3J5IG9mIHRoaXMgZGlzdHJpYnV0aW9uLgorCitjYXQgPiAvdXNyL2xvY2FsL3RvbWNhdC9saWIvcm9sbGVyLWN1c3RvbS5wcm9wZXJ0aWVzIDw8IEVPRgoraW5zdGFsbGF0aW9uLnR5cGU9YXV0bworbWVkaWFmaWxlcy5zdG9yYWdlLmRpcj0ke1NUT1JBR0VfUk9PVH0vcm9sbGVyX21lZGlhZmlsZXMKK3NlYXJjaC5pbmRleC5kaXI9JHtTVE9SQUdFX1JPT1R9L3JvbGxlcl9zZWFyY2hpbmRleAorbG9nNGouYXBwZW5kZXIucm9sbGVyLkZpbGU9L3Vzci9sb2NhbC90b21jYXQvbG9ncy9yb2xsZXIubG9nCitkYXRhYmFzZS5jb25maWd1cmF0aW9uVHlwZT1qZGJjCitkYXRhYmFzZS5qZGJjLmRyaXZlckNsYXNzPSR7REFUQUJBU0VfSkRCQ19EUklWRVJDTEFTU30KK2RhdGFiYXNlLmpkYmMuY29ubmVjdGlvblVSTD0ke0RBVEFCQVNFX0pEQkNfQ09OTkVDVElPTlVSTH0KK2RhdGFiYXNlLmpkYmMudXNlcm5hbWU9JHtEQVRBQkFTRV9KREJDX1VTRVJOQU1FfQorZGF0YWJhc2UuamRiYy5wYXNzd29yZD0ke0RBVEFCQVNFX0pEQkNfUEFTU1dPUkR9CitFT0YKKworL3Vzci9sb2NhbC90b21jYXQvYmluL3dhaXQtZm9yLWl0LnNoICR7REFUQUJBU0VfSE9TVH0KKy91c3IvbG9jYWwvdG9tY2F0L2Jpbi9jYXRhbGluYS5zaCBydW4KKworCmRpZmYgLS1naXQgYS9kb2NrZXIvd2FpdC1mb3ItaXQuc2ggYi9kb2NrZXIvd2FpdC1mb3ItaXQuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDcxYzJiZQotLS0gL2Rldi9udWxsCisrKyBiL2RvY2tlci93YWl0LWZvci1pdC5zaApAQCAtMCwwICsxLDE3OCBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorIyAgIFVzZSB0aGlzIHNjcmlwdCB0byB0ZXN0IGlmIGEgZ2l2ZW4gVENQIGhvc3QvcG9ydCBhcmUgYXZhaWxhYmxlCisKK1dBSVRGT1JJVF9jbWRuYW1lPSR7MCMjKi99CisKK2VjaG9lcnIoKSB7IGlmIFtbICRXQUlURk9SSVRfUVVJRVQgLW5lIDEgXV07IHRoZW4gZWNobyAiJEAiIDE+JjI7IGZpIH0KKwordXNhZ2UoKQoreworICAgIGNhdCA8PCBVU0FHRSA+JjIKK1VzYWdlOgorICAgICRXQUlURk9SSVRfY21kbmFtZSBob3N0OnBvcnQgWy1zXSBbLXQgdGltZW91dF0gWy0tIGNvbW1hbmQgYXJnc10KKyAgICAtaCBIT1NUIHwgLS1ob3N0PUhPU1QgICAgICAgSG9zdCBvciBJUCB1bmRlciB0ZXN0CisgICAgLXAgUE9SVCB8IC0tcG9ydD1QT1JUICAgICAgIFRDUCBwb3J0IHVuZGVyIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IHNwZWNpZnkgdGhlIGhvc3QgYW5kIHBvcnQgYXMgaG9zdDpwb3J0CisgICAgLXMgfCAtLXN0cmljdCAgICAgICAgICAgICAgIE9ubHkgZXhlY3V0ZSBzdWJjb21tYW5kIGlmIHRoZSB0ZXN0IHN1Y2NlZWRzCisgICAgLXEgfCAtLXF1aWV0ICAgICAgICAgICAgICAgIERvbid0IG91dHB1dCBhbnkgc3RhdHVzIG1lc3NhZ2VzCisgICAgLXQgVElNRU9VVCB8IC0tdGltZW91dD1USU1FT1VUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVvdXQgaW4gc2Vjb25kcywgemVybyBmb3Igbm8gdGltZW91dAorICAgIC0tIENPTU1BTkQgQVJHUyAgICAgICAgICAgICBFeGVjdXRlIGNvbW1hbmQgd2l0aCBhcmdzIGFmdGVyIHRoZSB0ZXN0IGZpbmlzaGVzCitVU0FHRQorICAgIGV4aXQgMQorfQorCit3YWl0X2ZvcigpCit7CisgICAgaWYgW1sgJFdBSVRGT1JJVF9USU1FT1VUIC1ndCAwIF1dOyB0aGVuCisgICAgICAgIGVjaG9lcnIgIiRXQUlURk9SSVRfY21kbmFtZTogd2FpdGluZyAkV0FJVEZPUklUX1RJTUVPVVQgc2Vjb25kcyBmb3IgJFdBSVRGT1JJVF9IT1NUOiRXQUlURk9SSVRfUE9SVCIKKyAgICBlbHNlCisgICAgICAgIGVjaG9lcnIgIiRXQUlURk9SSVRfY21kbmFtZTogd2FpdGluZyBmb3IgJFdBSVRGT1JJVF9IT1NUOiRXQUlURk9SSVRfUE9SVCB3aXRob3V0IGEgdGltZW91dCIKKyAgICBmaQorICAgIFdBSVRGT1JJVF9zdGFydF90cz0kKGRhdGUgKyVzKQorICAgIHdoaWxlIDoKKyAgICBkbworICAgICAgICBpZiBbWyAkV0FJVEZPUklUX0lTQlVTWSAtZXEgMSBdXTsgdGhlbgorICAgICAgICAgICAgbmMgLXogJFdBSVRGT1JJVF9IT1NUICRXQUlURk9SSVRfUE9SVAorICAgICAgICAgICAgV0FJVEZPUklUX3Jlc3VsdD0kPworICAgICAgICBlbHNlCisgICAgICAgICAgICAoZWNobyA+IC9kZXYvdGNwLyRXQUlURk9SSVRfSE9TVC8kV0FJVEZPUklUX1BPUlQpID4vZGV2L251bGwgMj4mMQorICAgICAgICAgICAgV0FJVEZPUklUX3Jlc3VsdD0kPworICAgICAgICBmaQorICAgICAgICBpZiBbWyAkV0FJVEZPUklUX3Jlc3VsdCAtZXEgMCBdXTsgdGhlbgorICAgICAgICAgICAgV0FJVEZPUklUX2VuZF90cz0kKGRhdGUgKyVzKQorICAgICAgICAgICAgZWNob2VyciAiJFdBSVRGT1JJVF9jbWRuYW1lOiAkV0FJVEZPUklUX0hPU1Q6JFdBSVRGT1JJVF9QT1JUIGlzIGF2YWlsYWJsZSBhZnRlciAkKChXQUlURk9SSVRfZW5kX3RzIC0gV0FJVEZPUklUX3N0YXJ0X3RzKSkgc2Vjb25kcyIKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGZpCisgICAgICAgIHNsZWVwIDEKKyAgICBkb25lCisgICAgcmV0dXJuICRXQUlURk9SSVRfcmVzdWx0Cit9CisKK3dhaXRfZm9yX3dyYXBwZXIoKQoreworICAgICMgSW4gb3JkZXIgdG8gc3VwcG9ydCBTSUdJTlQgZHVyaW5nIHRpbWVvdXQ6IGh0dHA6Ly91bml4LnN0YWNrZXhjaGFuZ2UuY29tL2EvNTc2OTIKKyAgICBpZiBbWyAkV0FJVEZPUklUX1FVSUVUIC1lcSAxIF1dOyB0aGVuCisgICAgICAgIHRpbWVvdXQgJFdBSVRGT1JJVF9CVVNZVElNRUZMQUcgJFdBSVRGT1JJVF9USU1FT1VUICQwIC0tcXVpZXQgLS1jaGlsZCAtLWhvc3Q9JFdBSVRGT1JJVF9IT1NUIC0tcG9ydD0kV0FJVEZPUklUX1BPUlQgLS10aW1lb3V0PSRXQUlURk9SSVRfVElNRU9VVCAmCisgICAgZWxzZQorICAgICAgICB0aW1lb3V0ICRXQUlURk9SSVRfQlVTWVRJTUVGTEFHICRXQUlURk9SSVRfVElNRU9VVCAkMCAtLWNoaWxkIC0taG9zdD0kV0FJVEZPUklUX0hPU1QgLS1wb3J0PSRXQUlURk9SSVRfUE9SVCAtLXRpbWVvdXQ9JFdBSVRGT1JJVF9USU1FT1VUICYKKyAgICBmaQorICAgIFdBSVRGT1JJVF9QSUQ9JCEKKyAgICB0cmFwICJraWxsIC1JTlQgLSRXQUlURk9SSVRfUElEIiBJTlQKKyAgICB3YWl0ICRXQUlURk9SSVRfUElECisgICAgV0FJVEZPUklUX1JFU1VMVD0kPworICAgIGlmIFtbICRXQUlURk9SSVRfUkVTVUxUIC1uZSAwIF1dOyB0aGVuCisgICAgICAgIGVjaG9lcnIgIiRXQUlURk9SSVRfY21kbmFtZTogdGltZW91dCBvY2N1cnJlZCBhZnRlciB3YWl0aW5nICRXQUlURk9SSVRfVElNRU9VVCBzZWNvbmRzIGZvciAkV0FJVEZPUklUX0hPU1Q6JFdBSVRGT1JJVF9QT1JUIgorICAgIGZpCisgICAgcmV0dXJuICRXQUlURk9SSVRfUkVTVUxUCit9CisKKyMgcHJvY2VzcyBhcmd1bWVudHMKK3doaWxlIFtbICQjIC1ndCAwIF1dCitkbworICAgIGNhc2UgIiQxIiBpbgorICAgICAgICAqOiogKQorICAgICAgICBXQUlURk9SSVRfaG9zdHBvcnQ9KCR7MS8vOi8gfSkKKyAgICAgICAgV0FJVEZPUklUX0hPU1Q9JHtXQUlURk9SSVRfaG9zdHBvcnRbMF19CisgICAgICAgIFdBSVRGT1JJVF9QT1JUPSR7V0FJVEZPUklUX2hvc3Rwb3J0WzFdfQorICAgICAgICBzaGlmdCAxCisgICAgICAgIDs7CisgICAgICAgIC0tY2hpbGQpCisgICAgICAgIFdBSVRGT1JJVF9DSElMRD0xCisgICAgICAgIHNoaWZ0IDEKKyAgICAgICAgOzsKKyAgICAgICAgLXEgfCAtLXF1aWV0KQorICAgICAgICBXQUlURk9SSVRfUVVJRVQ9MQorICAgICAgICBzaGlmdCAxCisgICAgICAgIDs7CisgICAgICAgIC1zIHwgLS1zdHJpY3QpCisgICAgICAgIFdBSVRGT1JJVF9TVFJJQ1Q9MQorICAgICAgICBzaGlmdCAxCisgICAgICAgIDs7CisgICAgICAgIC1oKQorICAgICAgICBXQUlURk9SSVRfSE9TVD0iJDIiCisgICAgICAgIGlmIFtbICRXQUlURk9SSVRfSE9TVCA9PSAiIiBdXTsgdGhlbiBicmVhazsgZmkKKyAgICAgICAgc2hpZnQgMgorICAgICAgICA7OworICAgICAgICAtLWhvc3Q9KikKKyAgICAgICAgV0FJVEZPUklUX0hPU1Q9IiR7MSMqPX0iCisgICAgICAgIHNoaWZ0IDEKKyAgICAgICAgOzsKKyAgICAgICAgLXApCisgICAgICAgIFdBSVRGT1JJVF9QT1JUPSIkMiIKKyAgICAgICAgaWYgW1sgJFdBSVRGT1JJVF9QT1JUID09ICIiIF1dOyB0aGVuIGJyZWFrOyBmaQorICAgICAgICBzaGlmdCAyCisgICAgICAgIDs7CisgICAgICAgIC0tcG9ydD0qKQorICAgICAgICBXQUlURk9SSVRfUE9SVD0iJHsxIyo9fSIKKyAgICAgICAgc2hpZnQgMQorICAgICAgICA7OworICAgICAgICAtdCkKKyAgICAgICAgV0FJVEZPUklUX1RJTUVPVVQ9IiQyIgorICAgICAgICBpZiBbWyAkV0FJVEZPUklUX1RJTUVPVVQgPT0gIiIgXV07IHRoZW4gYnJlYWs7IGZpCisgICAgICAgIHNoaWZ0IDIKKyAgICAgICAgOzsKKyAgICAgICAgLS10aW1lb3V0PSopCisgICAgICAgIFdBSVRGT1JJVF9USU1FT1VUPSIkezEjKj19IgorICAgICAgICBzaGlmdCAxCisgICAgICAgIDs7CisgICAgICAgIC0tKQorICAgICAgICBzaGlmdAorICAgICAgICBXQUlURk9SSVRfQ0xJPSgiJEAiKQorICAgICAgICBicmVhaworICAgICAgICA7OworICAgICAgICAtLWhlbHApCisgICAgICAgIHVzYWdlCisgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgIGVjaG9lcnIgIlVua25vd24gYXJndW1lbnQ6ICQxIgorICAgICAgICB1c2FnZQorICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworaWYgW1sgIiRXQUlURk9SSVRfSE9TVCIgPT0gIiIgfHwgIiRXQUlURk9SSVRfUE9SVCIgPT0gIiIgXV07IHRoZW4KKyAgICBlY2hvZXJyICJFcnJvcjogeW91IG5lZWQgdG8gcHJvdmlkZSBhIGhvc3QgYW5kIHBvcnQgdG8gdGVzdC4iCisgICAgdXNhZ2UKK2ZpCisKK1dBSVRGT1JJVF9USU1FT1VUPSR7V0FJVEZPUklUX1RJTUVPVVQ6LTE1fQorV0FJVEZPUklUX1NUUklDVD0ke1dBSVRGT1JJVF9TVFJJQ1Q6LTB9CitXQUlURk9SSVRfQ0hJTEQ9JHtXQUlURk9SSVRfQ0hJTEQ6LTB9CitXQUlURk9SSVRfUVVJRVQ9JHtXQUlURk9SSVRfUVVJRVQ6LTB9CisKKyMgY2hlY2sgdG8gc2VlIGlmIHRpbWVvdXQgaXMgZnJvbSBidXN5Ym94PworV0FJVEZPUklUX1RJTUVPVVRfUEFUSD0kKHR5cGUgLXAgdGltZW91dCkKK1dBSVRGT1JJVF9USU1FT1VUX1BBVEg9JChyZWFscGF0aCAkV0FJVEZPUklUX1RJTUVPVVRfUEFUSCAyPi9kZXYvbnVsbCB8fCByZWFkbGluayAtZiAkV0FJVEZPUklUX1RJTUVPVVRfUEFUSCkKK2lmIFtbICRXQUlURk9SSVRfVElNRU9VVF9QQVRIID1+ICJidXN5Ym94IiBdXTsgdGhlbgorICAgICAgICBXQUlURk9SSVRfSVNCVVNZPTEKKyAgICAgICAgV0FJVEZPUklUX0JVU1lUSU1FRkxBRz0iLXQiCisKK2Vsc2UKKyAgICAgICAgV0FJVEZPUklUX0lTQlVTWT0wCisgICAgICAgIFdBSVRGT1JJVF9CVVNZVElNRUZMQUc9IiIKK2ZpCisKK2lmIFtbICRXQUlURk9SSVRfQ0hJTEQgLWd0IDAgXV07IHRoZW4KKyAgICB3YWl0X2ZvcgorICAgIFdBSVRGT1JJVF9SRVNVTFQ9JD8KKyAgICBleGl0ICRXQUlURk9SSVRfUkVTVUxUCitlbHNlCisgICAgaWYgW1sgJFdBSVRGT1JJVF9USU1FT1VUIC1ndCAwIF1dOyB0aGVuCisgICAgICAgIHdhaXRfZm9yX3dyYXBwZXIKKyAgICAgICAgV0FJVEZPUklUX1JFU1VMVD0kPworICAgIGVsc2UKKyAgICAgICAgd2FpdF9mb3IKKyAgICAgICAgV0FJVEZPUklUX1JFU1VMVD0kPworICAgIGZpCitmaQorCitpZiBbWyAkV0FJVEZPUklUX0NMSSAhPSAiIiBdXTsgdGhlbgorICAgIGlmIFtbICRXQUlURk9SSVRfUkVTVUxUIC1uZSAwICYmICRXQUlURk9SSVRfU1RSSUNUIC1lcSAxIF1dOyB0aGVuCisgICAgICAgIGVjaG9lcnIgIiRXQUlURk9SSVRfY21kbmFtZTogc3RyaWN0IG1vZGUsIHJlZnVzaW5nIHRvIGV4ZWN1dGUgc3VicHJvY2VzcyIKKyAgICAgICAgZXhpdCAkV0FJVEZPUklUX1JFU1VMVAorICAgIGZpCisgICAgZXhlYyAiJHtXQUlURk9SSVRfQ0xJW0BdfSIKK2Vsc2UKKyAgICBleGl0ICRXQUlURk9SSVRfUkVTVUxUCitmaQpkaWZmIC0tZ2l0IGEvZG9jcy9SRUFETUUubWQgYi9kb2NzL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODZiMDc5Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9SRUFETUUubWQKQEAgLTAsMCArMSwxMCBAQAorIyBkb2NzL1JFQURNRS5tZAorCitJbiB0aGlzIGRpcmVjdG9yeSB5b3UnbGwgZmluZCBSb2xsZXIgZG9jcyBpbiBPcGVuIE9mZmljZSAoT0RGKSBmb3JtYXQsIHZhcmlvdXMgZXhhbXBsZXMgYW5kIHRlc3QgcGxhbnMuCisKKyogYHJvbGxlci1pbnN0YWxsLWd1aWRlLm9kdGAgLSBIb3cgdG8gaW5zdGFsbCBSb2xsZXIKKyogYHJvbGxlci11c2VyLWd1aWRlLm9kdGAgLSBIb3cgdG8gdXNlIFJvbGxlcgorKiBgcm9sbGVyLXRlbXBsYXRlLWd1aWRlLm9kdGAgLSBIb3cgdG8gY3JlYXRlIFJvbGxlciB0ZW1wbGF0ZXMgYW5kIHRoZW1lcworKiBgZXhhbXBsZXMvYCAtIGV4YW1wbGUgY29uZmlndXJhdGlvbiBhbmQgc2NyaXB0IGZpbGVzCisqIGB0ZXN0aW5nL2AgLSBWYXJpb3VzIHRlc3Qgc2NyaXB0cworCmRpZmYgLS1naXQgYS9kb2NzL1JFQURNRS50eHQgYi9kb2NzL1JFQURNRS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5MmJhMmQuLjAwMDAwMDAKLS0tIGEvZG9jcy9SRUFETUUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1JbiB0aGlzIGRpcmVjdG9yeSB5b3UnbGwgZmluZCBSb2xsZXIgZG9jcyBpbiBPREYgZm9ybWF0LCB2YXJpb3VzIGV4YW1wbGVzIGFuZCAKLXRlc3QgcGxhbnMuCi0KLSAgICByb2xsZXItaW5zdGFsbC1ndWlkZS5vZHQgIC0gSG93IHRvIGluc3RhbGwgUm9sbGVyIAotICAgIHJvbGxlci11c2VyLWd1aWRlLm9kdCAgICAgLSBIb3cgdG8gdXNlIFJvbGxlciAKLSAgICByb2xsZXItdGVtcGxhdGUtZ3VpZGUub2R0IC0gSG93IHRvIGNyZWF0ZSBSb2xsZXIgdGVtcGxhdGVzIGFuZCB0aGVtZXMgCi0gICAgZXhhbXBsZXMvICAgICAgICAgICAgICAgICAtIGV4YW1wbGUgY29uZmlndXJhdGlvbiBhbmQgc2NyaXB0IGZpbGVzCi0gICAgdGVzdGluZy8gICAgICAgICAgICAgICAgICAtIFZhcmlvdXMgdGVzdCBzY3JpcHRzCi0KZGlmZiAtLWdpdCBhL2RvY3MvYmVmb3JlLWFuZC1hZnRlci9lbnRyaWVzLnBuZyBiL2RvY3MvYmVmb3JlLWFuZC1hZnRlci9lbnRyaWVzLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTg3OTg2Ci0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9iZWZvcmUtYW5kLWFmdGVyL2VudHJpZXMucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvYmVmb3JlLWFuZC1hZnRlci9lbnRyeS1lZGl0LnBuZyBiL2RvY3MvYmVmb3JlLWFuZC1hZnRlci9lbnRyeS1lZGl0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2VhNDhlCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9iZWZvcmUtYW5kLWFmdGVyL2VudHJ5LWVkaXQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvYmVmb3JlLWFuZC1hZnRlci9tYWluLW1lbnUucG5nIGIvZG9jcy9iZWZvcmUtYW5kLWFmdGVyL21haW4tbWVudS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4ZDdmYQotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvYmVmb3JlLWFuZC1hZnRlci9tYWluLW1lbnUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvYmVmb3JlLWFuZC1hZnRlci9tZWRpYS1maWxlLXZpZXcucG5nIGIvZG9jcy9iZWZvcmUtYW5kLWFmdGVyL21lZGlhLWZpbGUtdmlldy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk1ODk3NgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvYmVmb3JlLWFuZC1hZnRlci9tZWRpYS1maWxlLXZpZXcucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2RvY3MvZXhhbXBsZXMvc2NyaXB0aW5nL2dyb292eS9leGFtcGxlcy9yb2xsZXJhcGkvcm9sbGVyLWN1c3RvbS5wcm9wZXJ0aWVzIGIvZG9jcy9leGFtcGxlcy9zY3JpcHRpbmcvZ3Jvb3Z5L2V4YW1wbGVzL3JvbGxlcmFwaS9yb2xsZXItY3VzdG9tLnByb3BlcnRpZXMKaW5kZXggMjAyNjAzZC4uOTI0ZjdhOCAxMDA2NDQKLS0tIGEvZG9jcy9leGFtcGxlcy9zY3JpcHRpbmcvZ3Jvb3Z5L2V4YW1wbGVzL3JvbGxlcmFwaS9yb2xsZXItY3VzdG9tLnByb3BlcnRpZXMKKysrIGIvZG9jcy9leGFtcGxlcy9zY3JpcHRpbmcvZ3Jvb3Z5L2V4YW1wbGVzL3JvbGxlcmFwaS9yb2xsZXItY3VzdG9tLnByb3BlcnRpZXMKQEAgLTEsMTAgKzEsMTIgQEAKIAogZGF0YWJhc2UuY29uZmlndXJhdGlvblR5cGU9amRiYwotZGF0YWJhc2UuamRiYy5kcml2ZXJDbGFzcz1jb20ubXlzcWwuamRiYy5Ecml2ZXIKLWRhdGFiYXNlLmpkYmMuY29ubmVjdGlvblVSTD1qZGJjOm15c3FsOi8vbG9jYWxob3N0L3JvbGxlcjUyMG5ldz9hdXRvUmVjb25uZWN0PXRydWUmdXNlVW5pY29kZT10cnVlJmNoYXJhY3RlckVuY29kaW5nPXV0Zi04Jm15c3FsRW5jb2Rpbmc9dXRmJnVzZUZhc3REYXRlUGFyc2luZz1mYWxzZQorZGF0YWJhc2UuamRiYy5kcml2ZXJDbGFzcz1vcmcucG9zdGdyZXNxbC5Ecml2ZXIKK2RhdGFiYXNlLmpkYmMuY29ubmVjdGlvblVSTD1qZGJjOnBvc3RncmVzcWw6Ly9sb2NhbGhvc3Qvcm9sbGVyZGIKIGRhdGFiYXNlLmpkYmMudXNlcm5hbWU9c2NvdHQKIGRhdGFiYXNlLmpkYmMucGFzc3dvcmQ9dGlnZXIKIAogbG9nNGouY2F0ZWdvcnkub3JnLmFwYWNoZS5yb2xsZXI9REVCVUcKIAorbG9nNGouYXBwZW5kZXIucm9sbGVyLkZpbGU9Li9sb2dzL3JvbGxlci5sb2cKKwogdGhlbWVzLmRpcj0uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZG9jcy9yZWFkbWUtaW1hZ2VzL2VkaXQtZW50cnkuanBnIGIvZG9jcy9yZWFkbWUtaW1hZ2VzL2VkaXQtZW50cnkuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YjFlMGYKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3JlYWRtZS1pbWFnZXMvZWRpdC1lbnRyeS5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZG9jcy9yZWFkbWUtaW1hZ2VzL2VudHJpZXMuanBnIGIvZG9jcy9yZWFkbWUtaW1hZ2VzL2VudHJpZXMuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NDZjOTkKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL3JlYWRtZS1pbWFnZXMvZW50cmllcy5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaXQtc2VsZW5pdW0vcG9tLnhtbCBiL2l0LXNlbGVuaXVtL3BvbS54bWwKaW5kZXggOWZkMzA5My4uYjE1NTk4MyAxMDA2NDQKLS0tIGEvaXQtc2VsZW5pdW0vcG9tLnhtbAorKysgYi9pdC1zZWxlbml1bS9wb20ueG1sCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5yb2xsZXI8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPnJvbGxlci1wcm9qZWN0PC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj41LjIuMzwvdmVyc2lvbj4KKyAgICAgICAgPHZlcnNpb24+Ni4wLjAtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgogICAgIDwvcGFyZW50PgogCmRpZmYgLS1naXQgYS9pdC1zZWxlbml1bS9zcmMvdGVzdC9yZXNvdXJjZXMvcm9sbGVyLWpldHR5cnVuLnByb3BlcnRpZXMgYi9pdC1zZWxlbml1bS9zcmMvdGVzdC9yZXNvdXJjZXMvcm9sbGVyLWpldHR5cnVuLnByb3BlcnRpZXMKaW5kZXggZWE1YzgwOC4uZTNmZGQ1MiAxMDA2NDQKLS0tIGEvaXQtc2VsZW5pdW0vc3JjL3Rlc3QvcmVzb3VyY2VzL3JvbGxlci1qZXR0eXJ1bi5wcm9wZXJ0aWVzCisrKyBiL2l0LXNlbGVuaXVtL3NyYy90ZXN0L3Jlc291cmNlcy9yb2xsZXItamV0dHlydW4ucHJvcGVydGllcwpAQCAtMjMsNyArMjMsNyBAQAogcGFzc3dkcy5lbmNyeXB0aW9uLmVuYWJsZWQ9ZmFsc2UKIAogIyB1c2Ugc3JjIGNvcHkgb2YgdGhlbWVzIGZvciByZWFkLW9ubHkgYWNjZXNzCi10aGVtZXMuZGlyPXRhcmdldC9yb2xsZXItc2VsZW5pdW0tdGVzdHMtNS4yLjMvdGhlbWVzCit0aGVtZXMuZGlyPXRhcmdldC9yb2xsZXItc2VsZW5pdW0tdGVzdHMtNi4wLjAtU05BUFNIT1QvdGhlbWVzCiAKICMgcHV0IHdvcmsgaW4gd29yayBkaXIKIHNlYXJjaC5pbmRleC5kaXIgICAgICAgICAgPXRhcmdldC93b3JrL3NlYXJjaC1pbmRleApkaWZmIC0tZ2l0IGEvcG9tLnhtbCBiL3BvbS54bWwKaW5kZXggYmNlMDViNi4uOGE5MTQzMiAxMDA2NDQKLS0tIGEvcG9tLnhtbAorKysgYi9wb20ueG1sCkBAIC0yMiw3ICsyMiw3IEBACiAgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogICAgIDxncm91cElkPm9yZy5hcGFjaGUucm9sbGVyPC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPnJvbGxlci1wcm9qZWN0PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjUuMi4zPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMC4wLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CiAKICAgICA8cHJlcmVxdWlzaXRlcz4KQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgPHByb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+VVRGLTg8L3Byb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmc+CiAgICAgICAgIDxwcm9qZWN0LnJlcG9ydGluZy5vdXRwdXRFbmNvZGluZz5VVEYtODwvcHJvamVjdC5yZXBvcnRpbmcub3V0cHV0RW5jb2Rpbmc+CiAgICAgICAgIDxkZXJieS52ZXJzaW9uPjEwLjExLjEuMTwvZGVyYnkudmVyc2lvbj4KLSAgICAgICAgPHJvbGxlci52ZXJzaW9uPjUuMi4zPC9yb2xsZXIudmVyc2lvbj4KKyAgICAgICAgPHJvbGxlci52ZXJzaW9uPjYuMC4wLVNOQVBTSE9UPC9yb2xsZXIudmVyc2lvbj4KICAgICA8L3Byb3BlcnRpZXM+CiAKICAgICA8bW9kdWxlcz4KQEAgLTYxLDEwICs2MSwxMCBAQAogICAgICAgICAgICAgICAgIDxwbHVnaW4+CiAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4zLjE8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjMuOC4wPC92ZXJzaW9uPgogICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2U+MS43PC9zb3VyY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGFyZ2V0PjEuNzwvdGFyZ2V0PgorICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZT4xMTwvc291cmNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPHRhcmdldD4xMTwvdGFyZ2V0PgogICAgICAgICAgICAgICAgICAgICAgICAgPGZvcms+dHJ1ZTwvZm9yaz4KICAgICAgICAgICAgICAgICAgICAgICAgIDxlbmNvZGluZz4ke3Byb2plY3QuYnVpbGQuc291cmNlRW5jb2Rpbmd9PC9lbmNvZGluZz4KICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgpAQCAtOTMsMTQgKzkzLDE1IEBACiAgICAgICAgICAgICAgICAgPC9wbHVnaW4+CiAgICAgICAgICAgICA8L3BsdWdpbnM+CiAgICAgICAgIDwvcGx1Z2luTWFuYWdlbWVudD4KLSAgICAgPC9idWlsZD4KKyAgICA8L2J1aWxkPgogCiAgICAgPGRlcGVuZGVuY3lNYW5hZ2VtZW50PgogICAgICAgICA8ZGVwZW5kZW5jaWVzPgogICAgICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPHZlcnNpb24+NC4xMjwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuanVuaXQuanVwaXRlcjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdC1qdXBpdGVyLWVuZ2luZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj41LjEuMDwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CiAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgogICAgIDwvZGVwZW5kZW5jeU1hbmFnZW1lbnQ+Cg==