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YWRvd2JnIHsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lIHJlcGVhdCBzY3JvbGwgMCAwICMwMDAwMDA7CiAgICAgICAgYm9yZGVyOiAwIG5vbmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgei1pbmRleDogOTk5OwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQogICAgLndhcnB7CiAgICAgICAgbWF4LXdpZHRoOiA3MjBweDsKICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgIH0KPC9zdHlsZT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICogewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgfQoKICAgIGE6aG92ZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIH0KCiAgICBhIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICB9CgogICAgYm9keSwKICAgIGh0bWwgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXgtd2lkdGg6IDc1MHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIG1pbi13aWR0aDogMzIwcHg7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmZjsKICAgICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICB9CgogICAgLmxheWVyLTEgewogICAgICAgIGRpc3BsYXk6IG5vbmUKICAgIH0KCiAgICBpbWcgewogICAgICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KCiAgICAuaW1nZHdQIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLmNsaWNrQnRuIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwoKICAgIH0KCiAgICBALXdlYmtpdC1rZXlmcmFtZXMgdGFkYSB7CgogICAgICAgIGZyb20sCiAgICAgICAgdG8gewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgxLCAxLCAxKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEsIDEsIDEpCiAgICAgICAgfQoKICAgICAgICAxMCUsCiAgICAgICAgMjAlIHsKICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlM2QoLjksIC45LCAuOSkgcm90YXRlM2QoMCwgMCwgMSwgLTNkZWcpOwogICAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoLjksIC45LCAuOSkgcm90YXRlM2QoMCwgMCwgMSwgLTNkZWcpCiAgICAgICAgfQoKICAgICAgICAzMCUsCiAgICAgICAgNTAlLAogICAgICAgIDcwJSwKICAgICAgICA5MCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgxLjEsIDEuMSwgMS4xKSByb3RhdGUzZCgwLCAwLCAxLCAzZGVnKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEuMSwgMS4xLCAxLjEpIHJvdGF0ZTNkKDAsIDAsIDEsIDNkZWcpCiAgICAgICAgfQoKICAgICAgICA0MCUsCiAgICAgICAgNjAlLAogICAgICAgIDgwJSB7CiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKDEuMSwgMS4xLCAxLjEpIHJvdGF0ZTNkKDAsIDAsIDEsIC0zZGVnKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEuMSwgMS4xLCAxLjEpIHJvdGF0ZTNkKDAsIDAsIDEsIC0zZGVnKQogICAgICAgIH0KICAgIH0KCiAgICBAa2V5ZnJhbWVzIHRhZGEgewoKICAgICAgICBmcm9tLAogICAgICAgIHRvIHsKICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlM2QoMSwgMSwgMSk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLCAxLCAxKQogICAgICAgIH0KCiAgICAgICAgMTAlLAogICAgICAgIDIwJSB7CiAgICAgICAgICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZTNkKC45LCAuOSwgLjkpIHJvdGF0ZTNkKDAsIDAsIDEsIC0zZGVnKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKC45LCAuOSwgLjkpIHJvdGF0ZTNkKDAsIDAsIDEsIC0zZGVnKQogICAgICAgIH0KCiAgICAgICAgMzAlLAogICAgICAgIDUwJSwKICAgICAgICA3MCUsCiAgICAgICAgOTAlIHsKICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlM2QoMS4xLCAxLjEsIDEuMSkgcm90YXRlM2QoMCwgMCwgMSwgM2RlZyk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLjEsIDEuMSwgMS4xKSByb3RhdGUzZCgwLCAwLCAxLCAzZGVnKQogICAgICAgIH0KCiAgICAgICAgNDAlLAogICAgICAgIDYwJSwKICAgICAgICA4MCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgxLjEsIDEuMSwgMS4xKSByb3RhdGUzZCgwLCAwLCAxLCAtM2RlZyk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLjEsIDEuMSwgMS4xKSByb3RhdGUzZCgwLCAwLCAxLCAtM2RlZykKICAgICAgICB9CiAgICB9CgogICAgQC13ZWJraXQta2V5ZnJhbWVzIGZhbmdkYSB7CiAgICAgICAgMCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgxLCAxLCAxKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEsIDEsIDEpCiAgICAgICAgfQoKICAgICAgICA1MCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgwLjksIDAuOSwgMC45KTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAuOSwgMC45LCAwLjkpCiAgICAgICAgfQoKICAgICAgICAxMDAlIHsKICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlM2QoMSwgMSwgMSk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLCAxLCAxKQogICAgICAgIH0KICAgIH0KCiAgICBAa2V5ZnJhbWVzIGZhbmdkYSB7CiAgICAgICAgMCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgxLCAxLCAxKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDEsIDEsIDEpCiAgICAgICAgfQoKICAgICAgICA1MCUgewogICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUzZCgwLjksIDAuOSwgMC45KTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZTNkKDAuOSwgMC45LCAwLjkpCiAgICAgICAgfQoKICAgICAgICAxMDAlIHsKICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlM2QoMSwgMSwgMSk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUzZCgxLCAxLCAxKQogICAgICAgIH0KICAgIH0KCiAgICAuYW5pbWF0ZWQuaW5maW5pdGUgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICAgICAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogaW5maW5pdGU7CiAgICB9CgogICAgLmFuaW1hdGVkIHsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogMnM7CiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAyczsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGg7CiAgICAgICAgYW5pbWF0aW9uLWZpbGwtbW9kZTogYm90aDsKICAgIH0KCiAgICAudGFkYSB7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogdGFkYTsKICAgICAgICBhbmltYXRpb24tbmFtZTogdGFkYQogICAgfQoKICAgIC5mYW5nZGEgewogICAgICAgIC13ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGZhbmdkYTsKICAgICAgICBhbmltYXRpb24tbmFtZTogZmFuZ2RhCiAgICB9CgogICAgLnBvc2lCdG4gewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgei1pbmRleDogMTAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogNXB4IDA7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOwogICAgfQoKICAgIC5wb3NpQnRuaW1nIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kOwogICAgfQoKICAgIC5sZWZ0IHsKICAgICAgICB3aWR0aDogMjUlOwogICAgfQoKICAgIC5sZWZ0IGltZyB7CiAgICAgICAgd2lkdGg6IDYwcHg7CiAgICAgICAgZGlzcGxheTogaW5oZXJpdDsKICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgIH0KCiAgICAuY2VudGVyIHsKICAgICAgICB3aWR0aDogNDQlOwogICAgICAgIGxpbmUtaGVpZ2h0OiAzMHB4OwogICAgICAgIHBhZGRpbmc6IDAgMC41JTsKICAgIH0KCiAgICAuY2VudGVyIC5jZW5yZXJfdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBjb2xvcjogIzMzMzMzMzsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgIH0KCiAgICAuY2VudGVyIC5jZW5yZXJfdHh0IHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgY29sb3I6ICMzMzMzMzM7CiAgICB9CgogICAgLnJpZ2h0IHsKICAgICAgICB3aWR0aDogMzAlOwogICAgfQoKICAgIC5yaWdodCAucmlnaHRidG4gewogICAgICAgIHdpZHRoOiA5MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICMzY2MzMDA7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDQ1cHg7CiAgICAgICAgbWFyZ2luOiA3cHggYXV0bzsKICAgICAgICBsaW5lLWhlaWdodDogNDVweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1cHg7CiAgICB9CgogICAgLmhlaWdodCB7CiAgICAgICAgaGVpZ2h0OiA3MHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgfQoKICAgIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjQwcHgpIHsKICAgICAgICAubGVmdCBpbWcgewogICAgICAgICAgICB3aWR0aDogMTIwcHg7CiAgICAgICAgfQoKICAgICAgICAubGVmdCB7CiAgICAgICAgICAgIHdpZHRoOiAxNSU7CiAgICAgICAgfQoKICAgICAgICAuY2VudGVyIC5jZW5yZXJfdGl0bGUgewogICAgICAgICAgICBmb250LXNpemU6IDM2cHg7CiAgICAgICAgfQoKICAgICAgICAuY2VucmVyX3R4dCB7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMjRweCAhaW1wb3J0YW50OwogICAgICAgIH0KCiAgICAgICAgLmNlbnRlciB7CiAgICAgICAgICAgIHdpZHRoOiA2NCU7CiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA2MHB4OwogICAgICAgICAgICBwYWRkaW5nOiAwIDAuNSU7CiAgICAgICAgfQoKICAgICAgICAucmlnaHQgewogICAgICAgICAgICB3aWR0aDogMjAlOwogICAgICAgIH0KCiAgICAgICAgLnJpZ2h0YnRuIHsKICAgICAgICAgICAgd2lkdGg6IDE4MHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgOwogICAgICAgICAgICBoZWlnaHQ6IDkwcHggIWltcG9ydGFudDsKICAgICAgICA7CiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiA5MHB4ICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIG1hcmdpbjogMTVweCBhdXRvICFpbXBvcnRhbnQ7CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMzZweCAhaW1wb3J0YW50OwogICAgICAgIH0KICAgIH0KCiAgICAuZ2lmIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1JTsKICAgICAgICByaWdodDogMDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICB3aWR0aDogMjQuNiU7CgogICAgfQoKICAgIC5pbWdkd1AgLmRvbndsb2FkIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDRweDsKICAgICAgICB0b3A6IDEuNSU7CiAgICAgICAgd2lkdGg6IDIwJTsKICAgIH0KICAgIC53ZWl4aW4td3JhcHBlcnsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAjRkZGRkZGOwogICAgICAgIHotaW5kZXg6IDk5OTk5OwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CiAgICAjd2VpeGluVGlwIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHotaW5kZXg6IDEwMDAwMDAwOwogICAgfQogICAgLmJ0biB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMi41JTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KICAgIC5idG4gaW1newogICAgICAgIG1hcmdpbi1sZWZ0OiAyNSU7CiAgICAgICAgd2lkdGg6IDUwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KICAgIC5oZWFkZXJ7bWFyZ2luOjAgYXV0bzt3aWR0aDoxMDAlO2hlaWdodDo0cmVtO21heC13aWR0aDo3MjBweDtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjM7fQogICAgIC5mb290ZXJ7bWFyZ2luOjAgYXV0bzt3aWR0aDoxMDAlO21heC13aWR0aDo3MjBweDtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjM7Ym90dG9tOjB9Cjwvc3R5bGU+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkubm90X2Rvd24gewoJICAgIGZpbHRlcjogYWxwaGEob3BhY2l0eT02MCk7CgkgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsKCSAgICBvcGFjaXR5OiAwLjY7CgkgICAgLW1vei1vcGFjaXR5OiAwLjY7CgkgICAgd2lkdGg6IDEwMCU7CgkgICAgaGVpZ2h0OiAxMDAlOwoJfQoJLm5vdF9kb3duX2JvZHkgewoJICAgIHBvc2l0aW9uOiBmaXhlZDsKCSAgICB0b3A6IDBweDsKCSAgICBsZWZ0OiAwcHg7CgkgICAgIGRpc3BsYXk6IG5vbmU7IAoJICAgIHotaW5kZXg6IDEwMDsKCSAgICB3aWR0aDogMTAwJTsKCSAgICBoZWlnaHQ6IDEwMCU7Cgl9Cgkubm90X2Rvd25faW1nIHsKCSAgICBwb3NpdGlvbjogZml4ZWQ7CgkgICAgd2lkdGg6IDkwJTsKCSAgICBsZWZ0OiA1JTsKCSAgICB0b3A6IDQwJTsKCSAgICB6LWluZGV4OiAxMDA7Cgl9Cgkubm90X2Rvd25faW1nIGltZyB7CgkgICAgd2lkdGg6IDEwMCU7Cgl9Cgkuc2hhZG93LWJveCB7CgkJZGlzcGxheTogbm9uZTsKCQl3aWR0aDogMTAwJTsKCSAgICB0b3A6IDBweDsKCSAgICBwb3NpdGlvbjogZml4ZWQ7CgkgICAgYmFja2dyb3VuZC1jb2xvcjogI2M4YzhjODsKCSAgICB6LWluZGV4OiAxMDAwMDsKCSAgICBoZWlnaHQ6IDEwMCU7Cgl9Cgkuc2hhZG93LWJveCBpbWcgewoJCXdpZHRoOiAxMDAlOwoJCXotaW5kZXg6IDEwMDAxOwogICAgCXRvcDogMDsKICAgIAlsZWZ0OiAwOwoJfQoJI3NoYWRvdyB7CgkJYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CgkgICAgei1pbmRleDogMTAwMDA7CgkgICAgd2lkdGg6IDEwMCU7CgkgICAgaGVpZ2h0OiA3MDBweDsKCX0KCSNhbmRyb2lkX2Rvd25sb2FkIHsKCQlkaXNwbGF5OiBub25lOwoJfQo8L3N0eWxlPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgI2luc3RhbGxJbmZvIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB6LWluZGV4OiA5OTk7CiAgICB9CiAgICAjaW5zdGFsbEluZm8gaW1nIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgIH0KICAgICNjbG9zZUJ0biB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNjBweDsKICAgICAgICBsaW5lLWhlaWdodDogNjBweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuODUpOwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICB9CiAgICAKICAgIC5vcGFjaXR5ewogICAgICAgIGZpbHRlcjphbHBoYShvcGFjaXR5PTgwKTsgIC8q5pSv5oyBIElFIOa1j+iniOWZqCovCiAgICAgICAgLW1vei1vcGFjaXR5OjAuODA7IC8q5pSv5oyBIEZpcmVGb3gg5rWP6KeI5ZmoKi8KICAgICAgICAta2h0bWwtb3BhY2l0eTogMC44OyAvKndlYmtpdOWGheaguOa1j+iniOWZqCovCiAgICAgICAgb3BhY2l0eTowLjgwOyAgLyrmlK/mjIEgQ2hyb21lLCBPcGVyYSwgU2FmYXJpIOetiea1j+iniOWZqCovCiAgICB9CiAgICAKICAgICNjb3B5X2RpdnsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMThweCAxOHB4IDAgMDsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIHotaW5kZXg6IDEwMDAyOwogICAgfQogICAgI2NvcHlfZGl2IHB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICBtYXJnaW46IDE1cHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICflvq7ova/pm4Xpu5EnOwogICAgfQogICAgI2NvcHlfZGl2IHVsewogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTsKICAgIH0KICAgICNjb3B5X2RpdiBpbWd7CiAgICAgICAgd2lkdGg6IDUwcHg7CiAgICB9CiAgICAjY29weV9kaXYgdWwgbGl7CiAgICAgICAgZmxvYXQ6IGxlZnQ7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAn5b6u6L2v6ZuF6buRJzsKICAgIH0KICAgICNjb3B5X2RpdiBidXR0b257CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJhY2tncm91bmQ6ICNlZmVmZWY7CiAgICAgICAgcGFkZGluZzogNXB4IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgfQogICAgCiAgICAuY19hbGVydF9kaWFsb2cuZGlhbG9nX29wZW57CiAgICAgICAgei1pbmRleDogMTAwMDM7CiAgICB9Cjwvc3R5bGU+CjxsaW5rIGhyZWY9Ii9jc3MvZGlhbG9nLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4KPHNjcmlwdCBzcmM9Ii9qcy9tRGlhbG9nTWluLmpzIj48L3NjcmlwdD4KICAKPC9oZWFkPgo8Ym9keT4KICAgPGRpdiBzdHlsZT0icG9zaXRpb246IGZpeGVkOyB0b3A6IDVweDsgcmlnaHQ6IDVweDsgd2lkdGg6IDEyMHB4OyB6LWluZGV4OiA5OTsgcGFkZGluZzogMTBweDsgdGV4dC1hbGlnbjogY2VudGVyOyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNik7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGJvcmRlci1yYWRpdXM6IDVweDtkaXNwbGF5Om5vbmU7IiBpZD0icXJjb2RlYm94Ij48ZGl2IGlkPSJxcmNvZGUiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAwIGF1dG87Ij48L2Rpdj7miYvmnLrmiavmj4/kuIvovb08L2Rpdj4KICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgaWQ9IngiIG9uY2xpY2s9IiQoJyNxcmNvZGVib3gnKS5oaWRlKCk7JCh0aGlzKS5oaWRlKCk7IiBzdHlsZT0icG9zaXRpb246IGZpeGVkO3RvcDogMTcwcHg7cmlnaHQ6IDY1cHg7Ym9yZGVyOiAxcHggc29saWQgcmdiKDI1NSwgMjU1LCAyNTUpO2JvcmRlci1yYWRpdXM6IDUwJTtjb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUpO3dpZHRoOiAyMHB4O2hlaWdodDogMjBweDt0ZXh0LWRlY29yYXRpb246IG5vbmU7Zm9udC1mYW1pbHk6IEFyaWFsO2xpbmUtaGVpZ2h0OiAyMnB4O2ZvbnQtd2VpZ2h0OiBub3JtYWw7Zm9udC1zaXplOiAxMnB4O3RleHQtYWxpZ246IGNlbnRlcjt6LWluZGV4Ojk7ZGlzcGxheTpub25lOyI+WDwvYT4KPGRpdiBjbGFzcz0id2FycCI+CiAgICA8IS0t5a6i5pyNLS0+CiAgICA8YSBpZD0ia2VmdSIgaHJlZj0iaHR0cDovL2x2bXEuZGZkcnBqZy54eXovZGlzdC9jaGF0bGluay5odG1sPyIgdGFyZ2V0PSJfYmxhbmsiPgogICAgICAgIDxkaXYgc3R5bGU9InBvc2l0aW9uOiBmaXhlZDsgdG9wOiAyODlweDsgcmlnaHQ6IDVweDsgd2lkdGg6IDgwcHg7IHotaW5kZXg6IDk5OTk7IHBhZGRpbmc6IDEwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgIGNvbG9yOiByZ2IoMCwgMCwgMCk7IGJvcmRlci1yYWRpdXM6IDVweDsiPgogICAgICAgICAgICA8aW1nIHN0eWxlPSJ3aWR0aDoxMDAlO2hlaWdodDoxMDAlOyIgc3JjPSIvaW1ncy9rZi5wbmciLz4KICAgICAgICA8L2Rpdj4KICAgIDwvYT4KICAgIDwhLS0g5LiL6L295Yy6IC0tPgogIDxkaXYgaWQ9ImFuZHJvaWRfZG93bmxvYWQiIGRhdGEtY2xpcGJvYXJkLXRleHQ9IkhFSUpJTjovL2NvbS5sdnNlLmx2c2VnYW1lcGthYS5hMDAxP2V4dD0iPgogIAkJPGRpdiBjbGFzcz0iaGVhZGVyIiBpZD0iaGVhZGVyLWFuZHJvaWQiPgoJICAgICAgICA8aW1nIHNyYz0iIj4KCSAgICA8L2Rpdj4KCSAgICAgPGRpdiBjbGFzcz0iZm9vdGVyIiBpZD0iZm9vdGVyLWFuZHJvaWQiPgogICAgICAgICAgICAgPCEtLeaOqOW5v+WRmGlkLS0+CiAgICAgICAgICAgIDxkaXYgaWQ9InByb21vdGVyX2lkIiBzdHlsZT0ibWFyZ2luOiAxMHB4IGF1dG87IHdpZHRoOiAxMjBweDsgei1pbmRleDogOTk7IHBhZGRpbmc6IDEwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgYmFja2dyb3VuZC1jb2xvcjogI2ZlZTYwNjsgb3BhY2l0eTogMC45OyBjb2xvcjogcmdiKDAsIDAsIDApOyBib3JkZXItcmFkaXVzOiAxMnB4OyBkaXNwbGF5OiBub25lO2ZvbnQtd2VpZ2h0OiA5MDA7Ij4KICAgICAgICAgICAgICAgIDxzcGFuPgogICAgICAgICAgICAgICAgICAgIOmCgOivt+egge+8mjxzcGFuPjwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgIAogICAgICAgICAgICA8L2Rpdj4KCSAgICAgICAgPGltZyBpZD0iZm9vdGVyIiBzcmM9Ii9pbWdzL3N0eWxlXzEvZm9vdGVyLnBuZyI+CgkgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaW1nZHdQIj4KICAgICAgICAgICAgPGEgY2xhc3M9ImRvbndsb2FkIiBocmVmPSJqYXZhc2NyaXB0OiI+CiAgICAgICAgICAgICAgICA8aW1nIHNyYz0iIj4KICAgICAgICAgICAgPC9hPgogICAgICAgICAgICA8aW1nIGlkPSJiZzEiIHNyYz0iL2ltZ3Mvc3R5bGVfMS9iZzEuanBnIj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbWdkd1AiPgogICAgICAgICAgICA8aW1nIGlkPSJiZzIiIHNyYz0iL2ltZ3Mvc3R5bGVfMS9iZzIuanBnIj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJpbWdkd1AiPgogICAgICAgICAgICA8aW1nIGlkPSJiZzMiIHNyYz0iL2ltZ3Mvc3R5bGVfMS9iZzMuanBnIj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0ibm90X2Rvd25fYm9keSI+CgkgICAgPGRpdiBjbGFzcz0ibm90X2Rvd24iPgoJICAgIDwvZGl2PgoJICAgIDxkaXYgY2xhc3M9Im5vdF9kb3duX2ltZyI+CgkgICAgCTxpbWcgc3JjPSIvaW1ncy9ub19kb3duX2NvcHkucG5nIj4KCSAgICA8L2Rpdj4KCTwvZGl2PgoJPGRpdiBpZD0icG9zdGVyX2lvc19ndWlkZSIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPgoJICAgIDxkaXY+CiAgICAJICAgIDxpbWcgc3R5bGU9ImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAxMDAlIiBzcmM9Ii9pbWdzLzJfMDEuanBnIj4KCSAgICA8L2Rpdj4KCSAgICA8ZGl2IGlkPSJkb253bG9hZF90ZiI+CiAgICAJICAgIDxpbWcgc3R5bGU9ImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAxMDAlIiBzcmM9Ii9pbWdzLzJfMDIuanBnIj4KCSAgICA8L2Rpdj4KCSAgICA8ZGl2IGlkPSJkb253bG9hZF9jb21wIj4KCSAgICAgICAgPGltZyBzdHlsZT0iZGlzcGxheTpibG9jazsgd2lkdGg6IDEwMCUiIHNyYz0iL2ltZ3MvMl8wMy5qcGciPgoJICAgIDwvZGl2PgoJICAgIDxkaXY+CgkgICAgICAgIDxpbWcgc3R5bGU9ImRpc3BsYXk6YmxvY2s7IHdpZHRoOiAxMDAlIiBzcmM9Ii9pbWdzLzJfMDQuanBnIj4KCSAgICA8L2Rpdj4KCTwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0ic2hhZG93LWJveCI+Cgk8aW1nIHNyYz0iL2ltZ3MvZ3VpZGVfd2VpeGluLnBuZyI+CjwvZGl2Pgo8ZGl2IGlkPSJpbnN0YWxsSW5mbyI+CiAgICA8aW1nIHNyYz0iIiBhbHQ9IiIgaWQ9ImltZ0luZm8iPgogICAgPGRpdiBpZD0iY2xvc2VCdG4iPueCueWHu+WFs+mXrTwvZGl2Pgo8L2Rpdj4KCgo8ZGl2IHN0eWxlPSJkaXNwbGF5Om5vbmU7IiBjbGFzcz0ic29yY2UiPuaVsOaNruW6kzwvZGl2PgoKPGlmcmFtZSBpZD0iaWZyYW1lMSIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iIj48L3NjcmlwdD4KPC9pZnJhbWU+CgogICAgPGRpdiBpZD0nY29weV9kaXYnIGNsYXNzPSJvcGFjaXR5Ij4KICAgICAgICA8cD7lpoLmnpzlj7PkuIrop5IuLi7ml6Dms5Xngrnlh7s8L3A+CiAgICAgICAgPHVsPgogICAgICAgICAgICA8bGkgc3R5bGU9Im1hcmdpbjogMCAxNXB4IDQ1cHggMTVweDsiPgogICAgICAgICAgICAgICAgPGltZyBpZD0naWVfaWNvbicgc3JjPSIvaW1ncy9pZS5wbmciIC8+CiAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgIDxsaSBzdHlsZT0ibWFyZ2luOiAxNnB4IDA7Ij4KICAgICAgICAgICAgICAgIOivt+WkjeWItumTvuaOpeWIsOa1j+iniOWZqOaJk+W8gAogICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8bGkgc3R5bGU9Im1hcmdpbjogMTNweCAyM3B4IDAgMDtmbG9hdDpyaWdodCI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgb25jbGljaz0iY29weVRleHQobG9jYXRpb24uaHJlZik7Ij7lpI3liLY8L2J1dHRvbj4KICAgICAgICAgICAgPC9saT4KICAgICAgICA8L3VsPgogICAgPC9kaXY+CgogIDxzY3JpcHQgc3JjPSIvYXNzZXRzL2xpYi9qcXVlcnkvanF1ZXJ5LTEuMTEuMy5taW4uanMiIHJlbD0icHJlbG9hZCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly93d3cuZHN5bC53dTM2dS5jYy9zdGF0aWMvanMvZHN5bC5zZGsudi4xLjAuMC5qcyI+PC9zY3JpcHQ+CiAgIDxzY3JpcHQgc3JjPSIvanMvcXJjb2RlLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0PgogICA8c2NyaXB0IHNyYz0iL2pzL2RldmljZS5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgIGRvY3VtZW50LndyaXRlKCI8c2NyaXB0IHNyYz0nL2pzL3psdnVtZS5qcz9hY3Rpb249bW9uaXRvciZyYW5kb209IisgTWF0aC5yYW5kb20oKSsiJz48XC9zY3JpcHQ+Iik7Cjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgIHZhciBwcm9tb3Rlcl9pZCA9ICcnOwogICAgICBpZiAocHJvbW90ZXJfaWQpIHsKICAgICAgICAgICQoJyNwcm9tb3Rlcl9pZCcpLnNob3coKTsKICAgICAgfQogICAgICAKICAgICAgdmFyIG9zID0gMTsgLy8gMSDlronljZMgMiBpb3MKICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1woaVteO10rOyggVTspPyBDUFUuK01hYyBPUyBYLykpIHsKICAgICAgICAgIG9zID0gMjsKICAgICAgfQoJZnVuY3Rpb24gY2hlY2tfc2FmYXJpKCkgewogICAgCWlmICghIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1woaVteO10rOyggVTspPyBDUFUuK01hYyBPUyBYLykpIHsKCQkJdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOwoJCSAgICAvL+WIpOaWreaYr+S4jeaYr+WcqGlQaG9uZeeahFNhZmFpcua1j+iniOWZqOaJk+W8gOeahOacrOmhtemdogoJCSAgICBpZiAodWEuaW5kZXhPZignYXBwbGV3ZWJraXQnKSA+IC0xICYmIHVhLmluZGV4T2YoJ21vYmlsZScpID4gLTEgJiYgdWEuaW5kZXhPZignc2FmYXJpJykgPiAtMSAmJgoJCSAgICAgICAgdWEuaW5kZXhPZignbGludXgnKSA9PT0gLTEgJiYgdWEuaW5kZXhPZignYW5kcm9pZCcpID09PSAtMSAmJiB1YS5pbmRleE9mKCdjaHJvbWUnKSA9PT0gLTEgJiYKCQkgICAgICAgIHVhLmluZGV4T2YoJ2lvcycpID09PSAtMSAmJiB1YS5pbmRleE9mKCdicm93c2VyJykgPT09IC0xKSB7CgkJICAgICAgICByZXR1cm4gdHJ1ZTsKCQkgICAgfQoJCSAgICBlbHNlIHsKCQkgICAgICAgIC8vYWxlcnQoIuivt+S9v+eUqGlQaG9uZeS4reeahFNhZmFyaea1j+iniOWZqOaJk+W8gOacrOmhtemdou+8gSIpOwoJCSAgICAgICAgLy8gYWxlcnQoIuivt+aCqOS9v+eUqHNhZmFyaea1j+iniOWZqOaJk+W8gOacrOe9kemhtX4iKTsKCSAgICAgICAgICAgICQoJy5ub3RfZG93bl9ib2R5Jykuc2hvdygpOwoJCSAgICAgICAgcmV0dXJuIGZhbHNlOwoJCSAgICB9CiAgICAJfQoJfQogIHdpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7Ci8vICAgCSQoJyNpZnJhbWUxJykubG9hZCgKLy8gICAJCWZ1bmN0aW9uKCl7Ci8vICAgCQkJd2luZG93LmxvY2F0aW9uLmhyZWY9J2h0dHA6Ly9sc2UyNi50b3AvaW5zdGFsbF9jb25maWcucGhwJzsKLy8gICAJCX0KLy8gICAJKTsKICAJCiAgCQogICAgCiAgfQogIAoJJChmdW5jdGlvbigpIHsvLyDliJ3lp4vljJblhoXlrrkKICAgICAgICAvLyDpmo/mnLrojrflj5blm77niYcKICAgICAgICAvLyBsZXQgbWF4ID0gMzsKICAgICAgICAvLyBsZXQgcmFuZG9tID0gcGFyc2VJbnQoTWF0aC5yYW5kb20oKSoobWF4KzEpLDEwKTsKICAgICAgICAvLyBsZXQgdXJsID0gJy9pbWdzL3N0eWxlXycgKyByYW5kb20gKyAnLyc7CiAgICAgICAgLy8gJCgnI2Zvb3RlcicpLmF0dHIoJ3NyYycsIHVybCArICdmb290ZXIucG5nJyk7CiAgICAgICAgLy8gJCgnI2JnMScpLmF0dHIoJ3NyYycsIHVybCArICdiZzEuanBnJyk7CiAgICAgICAgLy8gJCgnI2JnMicpLmF0dHIoJ3NyYycsIHVybCArICdiZzIuanBnJyk7CiAgICAgICAgLy8gJCgnI2JnMycpLmF0dHIoJ3NyYycsIHVybCArICdiZzMuanBnJyk7CgkKCSAgICBpZigiIiA9PSAiIil7CgkJJCgiLmhlYWRlciIpLmhpZGUoKTsKCX0KCWlmKCIvaW1ncy9zdHlsZV8xL2Zvb3Rlci5wbmciID09ICIiKXsKCQkkKCIuZm9vdGVyIikuaGlkZSgpOwoJfQoJaWYoIiIgPT0gIiIpewoJCSQoIi5kajEiKS5oaWRlKCk7Cgl9CglpZigiL2ltZ3Mvc3R5bGVfMS9iZzIuanBnIiA9PSAiIil7CgkJJCgiLmJnMiIpLmhpZGUoKTsKCX0KCWlmKCIiID09ICIiKXsKCQkkKCIuZGoyIikuaGlkZSgpOwoJfQoJaWYoIiIgPT0gIiIpewoJCSQoIi5pY29fZG93bmxvYWQiKS5oaWRlKCk7Cgl9CgkKCWlmKCJodHRwczovL2xzbHNtLmNuc3VkaS5jb20vZGlzdC9jaGF0bGluay5odG1sPyI9PSIiKXsKCSAgICAJJCgiI2tlZnUiKS5oaWRlKCk7Cgl9ZWxzZXsKCSAgICAkKCIja2VmdSIpLmF0dHIoImhyZWYiLCdodHRwczovL2xzbHNtLmNuc3VkaS5jb20vZGlzdC9jaGF0bGluay5odG1sPycpOwoJfQoJCgl2YXIgdWEgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpOwoJaWYoMCA9PSAxICYmIHVhLm1hdGNoKC9NaWNyb01lc3Nlbmdlci9pKSAhPSAnbWljcm9tZXNzZW5nZXInKXsKCQkkKCIjcXJjb2RlYm94Iikuc2hvdygpOwoJCSQoIiN4Iikuc2hvdygpOwoJfQoJdmFyIHdlYnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwogICAgdmFyIHFyY29kZSA9IG5ldyBRUkNvZGUoJ3FyY29kZScsIHsKICAgICAgdGV4dDogd2VidXJsLAogICAgICB3aWR0aDogMTIwLAogICAgICBoZWlnaHQ6IDEyMCwKICAgICAgY29sb3JEYXJrOiAnIzAwMDAwMCcsCiAgICAgIGNvbG9yTGlnaHQ6ICcjZmZmZmZmJywKICAgICAgY29ycmVjdExldmVsOiBRUkNvZGUuQ29ycmVjdExldmVsLkgKICAgIH0pOwogICAgdmFyIHBhY2thZ2V0YWcgPSAiY29tLmx2c2UubHZzZWdhbWVwa2FhLmEwMDEiOwogIAl2YXIgcHJvbW90ZXJfdHJlZSA9ICIiOwogIAl2YXIgcHJvbW90ZXIgPSAiIjsKICAJdmFyIHNwcmVhZF9zbmlkID0gIiI7CiAgCXZhciBzcHJlYWQgPSAiMSI7CiAgCXZhciB3ZWl4aW4gPSAiMCI7CiAgCQogIAkKICAJCiAgCXRyeSB7CiAgICAgIC8vb3Blbmluc3RhbGzliJ3lp4vljJbml7blsIbkuI5vcGVuaW5zdGFsbOacjeWKoeWZqOS6pOS6ku+8jOW6lOWwveWPr+iDveaXqeeahOiwg+eUqAogICAgICAgIC8vdmFyIGRhdGEgPSBPcGVuSW5zdGFsbC5wYXJzZVVybFBhcmFtcygpOy8vb3Blbmluc3RhbGwuanPkuK3mj5DkvpvnmoTlt6Xlhbflh73mlbDvvIzop6PmnpB1cmzkuK3nmoTmiYDmnInmn6Xor6Llj4LmlbAKICAgICAgdmFyIGRhdGEgPSB7InBhY2thZ2VUYWciOnBhY2thZ2V0YWcsInByb21vdGVyX3RyZWUiOnByb21vdGVyX3RyZWUsInByb21vdGVyIjpwcm9tb3Rlciwic3ByZWFkIjpzcHJlYWQsIndlaXhpbiI6d2VpeGluLCJzcHJlYWRfc25pZCI6c3ByZWFkX3NuaWR9OwogICAgICAgIHZhciBpc19zdWxpYW4gPSBmYWxzZTsKICAgICAgICAvKioKICAgICAgICAqIOesrOS4gOS4quWPguaVsOaYr+e7keWumueahOS4i+i9veaMiemSrueahGlk5oiW6ICFRE9NCiAgICAgICAgKiDnrKzkuozkuKrlj4LmlbDmmK9TdUxpbmtlcueahOmFjee9rgogICAgICAgICovCiAgICAgICAgY29uc29sZS5sb2coJ29zPScrb3MpOwogICAgICAgIHZhciBzdW5saW5rX29iaiA9ICcjYW5kcm9pZF9kb3dubG9hZCc7CiAgICAgICAgaWYgKG9zID09IDIpIHsKICAgICAgICAgICAgc3VubGlua19vYmogPSAnI2Rvbndsb2FkX3RmJzsKICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIFN1TGlua2VyKHN1bmxpbmtfb2JqLHsKICAgICAgICAgICAgLy8o5b+F5aGrKSDns7vnu5/liIbphY1hcHBLZXkKICAgICAgICAgICAgYXBwS2V5OiJ6bHZ1cmMiLCAKICAgICAgICAgICAgLy8o6YCJ5aGrKSDoh6rlrprkuYnpmYTluKblj4LmlbAs5Lya6YCP5Lyg5Yiw5YmN56uvCiAgICAgICAgICAgIHBhcmFtczogZGF0YSwKICAgICAgICAgICAgLy8o6YCJ5aGrKSDph43lrprlkJHlj4LmlbDvvIxTREvlm57osIPkuK3kvJrov5Tlm57or6XlgLwKICAgICAgICAgICAgcmVkaXJlY3Q6IiIgLAogICAgICAgICAgICAvLyjpgInloaspIOaOqOW5v+a4oOmBkyzkuI3loavnmoTor53orqTkuLrmmK/pu5jorqTmuKDpgZMKICAgICAgICAgICAgY2hhbm5lbDoiIiwKICAgICAgICAgICAgLy8gKOmAieWhqykg5Yid5aeL5YyW5a6M5q+V5Zue6LCDCiAgICAgICAgICAgIG9uUmVhZHk6IGZ1bmN0aW9uIChzdWxpbmtlcikgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIuWIneWni+WMlue7k+adnyIpOwogICAgICAgICAgICAgICAgaXNfc3VsaWFuID0gdHJ1ZTsKICAgICAgICAgICAgICAgIC8vIOWIneWni+WMluWujOWQjuWPr+S7peWwneivleWUpOmGkuS4gOasoTsKICAgICAgICAgICAgICAgIC8vIHN1bGlua2VyLndha2V1cCgpOwogICAgICAgICAgICB9LAogICAgICAgICAgICAvLyAo6YCJ5aGrKSDlvIDlp4vllKTphpJBcHAKICAgICAgICAgICAgb25XYWtldXA6IGZ1bmN0aW9uIChpc01hbnVhbCkgewogICAgICAgICAgICAgICAgLy8g5Y+v5Lul5byA5ZCv5by556qX77yM5bu66K6uMjAwMG1zLOWPr+S7peS9v+eUqGlzTWFudWFs5p2l5Yik5pat5b2T5YmN5piv5ZCm5omL5Yqo5ZSk6YaS77yM5p+Q5Lqb5oOF5Ya15LiL5omL5Yqo5ZSk6YaS5LiN6ZyA6KaB5pi+56S65by556qX5o+Q56S6CiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygi5byA5aeL5ZSk6YaS5bqU55SoIiwi5omL5Yqo5ZSk6YaSIixpc01hbnVhbCk7CiAgICAgICAgICAgICAgICBEaWFsb2cuaW5pdCgn5q2j5Zyo5Yqg6L295Lit77yM6K+356iN5ZCOLi4uJywgMzAwMDApOwogICAgICAgICAgICB9LAogICAgICAgICAgICAvLyAo6YCJ5aGrKSDlvIDlp4vkuIvovb1BcHAKICAgICAgICAgICAgb25Eb3dubG9hZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgY29uc29sZS5sb2coIuW8gOWni+S4i+i9veW6lOeUqCIpOwogICAgICAgICAgICAgICAgRGlhbG9nLmNsb3NlKCk7CiAgICAgICAgICAgICAgICBpZiAob3MgPT0gMSkgewogICAgICAgICAgICAgICAgICAgIGlmICghbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvXChpW147XSs7KCBVOyk/IENQVS4rTWFjIE9TIFgvKSkgewogICAgICAgICAgICAgICAgICAgICAgICBzaG93R3VpZGUoKTsKICAgICAgICAgICAgICAgIAl9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYW5kcm9pZF9kb3dubG9hZCIpLnN0eWxlLmRpc3BsYXk9Im5vbmUiOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9zdGVyX2lvc19ndWlkZSIpLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayI7CiAgICAgICAgICAgICAgICAJfQogICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAvLyAo6YCJ5aGrKSDpgYfliLDkuI3mlK/mjIHnmoTmtY/op4jlmajlm57osIMKICAgICAgICAgICAgb25Ccm93c2VyTm90U3VwcG9ydDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgLy8g5Y+v5Lul5YWz6Zet5by556qXCiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygi5LiN5pSv5oyB55qE5rWP6KeI5ZmoIik7CiAgICAgICAgICAgIH0sCiAgICAgICAgfSk7CiAgICAgICAgCiAgICAgICAgCiAgICAgICAgJCgnI2Rvbndsb2FkX2NvbXAnKS5jbGljayhmdW5jdGlvbigpIHsKICAgICAgICAgICAgLy92YXIgdXJsID0gJ2l0bXMtc2VydmljZXM6Ly8/YWN0aW9uPWRvd25sb2FkLW1hbmlmZXN0JnVybD1odHRwczovLzIyNi15dWVodWEub3NzLWNuLXNoZW56aGVuLmFsaXl1bmNzLmNvbS9kb3dubG9hZC9kb3duaW9zLnBsaXN0JzsKICAgICAgICAgICAgICAgIGlmKCJodHRwczovL2l5aGh2LnRvcC84OWhxIiE9IiIpewogICAgICAgICAgICAgICAgICAgICBEaWFsb2cuaW5pdCgn5q2j5Zyo5Yqg6L295Lit77yM6K+356iN5ZCOLi4uJywgMzAwMCk7CiAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9ICdodHRwczovL2l5aGh2LnRvcC84OWhxJzsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDsKICAgICAgICAgICAgICAgIH1lbHNlewogICAgICAgICAgICAgICAgICAgIERpYWxvZy5pbml0KCfmmoLml6DkvIHkuJrnrb4uLi4nLCAzMDAwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgfSk7CiAgICB9IGNhdGNoKGVycil7CiAgICAgIGNvbnNvbGUubG9nKGVycik7CiAgICB9CiAgICAKICAgICAgICBpZiAob3MgPT0gMikgewogICAgICAgICAgICAkKCcjYW5kcm9pZF9kb3dubG9hZCcpLmNsaWNrKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgJCgiI2Rvbndsb2FkX3RmIikuY2xpY2soKQogICAgICAgICAgICAgICAgLy8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFuZHJvaWRfZG93bmxvYWQiKS5zdHlsZS5kaXNwbGF5PSJub25lIjsKICAgICAgICAgICAgICAgIC8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwb3N0ZXJfaW9zX2d1aWRlIikuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIjsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCc9PT09PT7pgJ/pk77mnI3liqHnirbmgIHvvJonK2lzX3N1bGlhbik7CiAgICAgICAgICAgIGlmICghaXNfc3VsaWFuKSB7CiAgICAgICAgICAgICAgICBpZiAob3MgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICQoJyNkb3dubG9hZF90ZicpLmNsaWNrKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBEaWFsb2cuaW5pdCgn5q2j5Zyo5Yqg6L295Lit77yM6K+356iN5ZCOLi4uJywgMzAwMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIGRlZmF1bHRVcmwgIT09ICd1bmRlZmluZWQnKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGRlZmF1bHRVcmwpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL1woaVteO10rOyggVTspPyBDUFUuK01hYyBPUyBYLykpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IGRlZmF1bHRVcmwuaW9zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBkZWZhdWx0VXJsLmFuZHJvaWQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwgNTAwMCApOwogICAgICAgIAogICAgICAgIAogICAgICAgIHZhciB1ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKICAgICAgICB2YXIgaXNBbmRyb2lkID0gdS5pbmRleE9mKCdBbmRyb2lkJykgPiAtMSB8fCB1LmluZGV4T2YoJ0FkcicpID4gLTE7IC8vYW5kcm9pZOe7iOerrwogICAgICAgIHZhciBpc2lPUyA9ICEhdS5tYXRjaCgvXChpW147XSs7KCBVOyk/IENQVS4rTWFjIE9TIFgvKTsgLy9pb3Pnu4jnq68KICAgICAgICBpZihpc2lPUyl7CiAgICAgICAgICAgICQoJyNpZV9pY29uJykuYXR0cignc3JjJywnL2ltZ3Mvc2FmYXJpLnBuZycpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAKICAgICAgICAvL+WmguaenOaYr+WcqFFR5YaF572u5rWP6KeI5Zmo5oiW5b6u5L+h6YeMCiAgICAgICAgaWYoCiAgICAgICAgICAgIC9NaWNyb01lc3Nlbmdlci9pLnRlc3QodSkKICAgICAgICAgICAgfHwgKGlzaU9TICYmIC8gUVEvaS50ZXN0KHUpKQogICAgICAgICAgICB8fCAoaXNBbmRyb2lkICYmIC9NUVFCcm93c2VyL2kudGVzdCh1KSAmJiAvUVEvaS50ZXN0KHUuc3BsaXQoJ01RUUJyb3dzZXInKSkpCiAgICAgICAgICAgIC8vIHx8IHRydWUKICAgICAgICAgICAgKXsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgJCgnLnNoYWRvdy1ib3gnKS5zaG93KCk7CiAgICAJICAgIAlkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PSdoaWRkZW4nOyAgICAKCSAgICAJICAgIGRvY3VtZW50LnRpdGxlID0gJ+a4qemmqOaPkOekuic7CiAgICAJICAgIAl2YXIgbW89ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO307ICAgIAogICAgICAgICAgICAJZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIixtbyx7cGFzc2l2ZTpmYWxzZX0pOy8v56aB5q2i6aG16Z2i5ruR5YqoCiAgICAgICAgICAgIAkKICAgICAgICAgICAgCSQoJyNjb3B5X2RpdicpLnNob3coKTsKICAgICAgICAgICAgCWlmKGlzQW5kcm9pZCl7CiAgICAgICAgICAgIAkgICAgbG9jYXRpb24uaHJlZiA9ICdtdHRicm93c2VyOi8vdXJsPScrbG9jYXRpb24uaHJlZjsKICAgICAgICAgICAgCX0KICAgICAgICAgICAgICAgIAogICAgICAgIH1lbHNlewogICAgICAgICAgICAKCQkgICAgJCgnI2FuZHJvaWRfZG93bmxvYWQnKS5zaG93KCk7CgkJCWNoZWNrX3NhZmFyaSgpOwoJCSAgICAkKCcubm90X2Rvd25faW1nJykuY2xpY2soZnVuY3Rpb24oKSB7CgkJICAgICAgICB2YXIgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7CgkJICAgICAgICBjb3B5VGV4dCh1cmwpOwoJCSAgICB9KTsKCQkgICAgCiAgICAgICAgfQogIAoJfSk7IAogIAogICAgZnVuY3Rpb24gY29weVRleHQodGV4dCkgewogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHRleHQpOwogICAgICAgIGlucHV0LnNlbGVjdCgpOwogICAgICAgIHZhciBvbGRDb250ZW50RWRpdGFibGUgPSBpbnB1dC5jb250ZW50RWRpdGFibGU7CiAgICAgICAgdmFyIG9sZFJlYWRPbmx5ID0gaW5wdXQucmVhZE9ubHk7CiAgICAgICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICBpbnB1dC5jb250ZW50RWRpdGFibGUgPSB0cnVlOwogICAgICAgIGlucHV0LnJlYWRPbmx5ID0gZmFsc2U7CiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGlucHV0KTsKICAgICAgICB2YXIgcyA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgICBzLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgIHMuYWRkUmFuZ2UocmFuZ2UpOwogICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKDAsIDk5OTk5OSk7IC8vIEEgYmlnIG51bWJlciwgdG8gY292ZXIgYW55dGhpbmcgdGhhdCBjb3VsZCBiZSBpbnNpZGUgdGhlIGVsZW1lbnQuCiAgICAgICAgaW5wdXQuY29udGVudEVkaXRhYmxlID0gb2xkQ29udGVudEVkaXRhYmxlOwogICAgICAgIGlucHV0LnJlYWRPbmx5ID0gb2xkUmVhZE9ubHk7CiAgICAgICAgaWYgKGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5JykpIHsKICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsKICAgICAgICAgICAgY29uc29sZS5sb2coZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKSk7CgkJICAgIERpYWxvZy5pbml0KCflpI3liLbmiJDlip8nLCAyMDAwKTsKICAgICAgICAgICAgLy8gJCgnLm5vdF9kb3duX2JvZHknKS5oaWRlKCk7CiAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoaW5wdXQpOwogICAgfQo8L3NjcmlwdD4KPGRpdiBzdHlsZT0iZGlzcGxheTpibG9jazsiPjwvZGl2Pgo8L2JvZHk+Cgo8L2h0bWw+