IyBDb3B5cmlnaHQgKEMpIDE5ODgsIDE5ODksIDE5OTYsIDE5OTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIE1ha2UuCiMKIyBWTVMgZXh0ZW5zaW9ucyBmcm9tIEdOVSBNYWtlIDMuNjAgaW1wb3J0ZWQgYnkKIyAgS2xhdXMgS+RtcGYgKGtrYWVtcGZAcHJvZ2lzLmRlKSBvZiBwcm9HSVMgU29mdHdhcmUsIEFhY2hlbiwgR2VybWFueQojCiMgR05VIE1ha2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQojIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgR05VIE1ha2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIEdOVSBNYWtlOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KCkNDID0gY2Mvd2FybgpDUCA9IGNvcHkKCiUub2JqOiAlLmMKCSQoQ0MpICQoQ0ZMQUdTKS9vYmo9JEAgJDwKIwojCU1ha2VmaWxlIGZvciBHTlUgTWFrZQojCgpDRkxBR1MgPSAkKGRlZmluZXMpIC9kZWJ1Zy9ub29wdC9pbmNsdWRlPShbXSxbLmdsb2JdKQojTERGTEFHUyA9IC9kZWIKTERGTEFHUyA9CgpkZWZpbmVzID0gL2RlZmluZT0oInVubGluaz1yZW1vdmUiLCJIQVZFX0NPTkZJR19IIiwiVk1TIiwiYWxsb2NhdGVkX3ZhcmlhYmxlX2V4cGFuZF9mb3JfZmlsZT1hbGxvY192YXJfZXhwYW5kX2Zvcl9maWxlIikKCkxPQURfQVZHID0gL2RlZmluZT0iTk9fTERBViIKCiMgSWYgeW91IGRvbid0IHdhbnQgYXJjaGl2ZSBzdXBwb3J0LCBjb21tZW50IHRoZXNlIG91dC4KQVJDSElWRVMgPSAsYXIub2JqLGFyc2Nhbi5vYmoKQVJDSElWRVNfU1JDID0gYXIuYyBhcnNjYW4uYwoKIyBJZiB5b3VyIHN5c3RlbSBuZWVkcyBleHRyYSBsaWJyYXJpZXMgbG9hZGVkIGluLCBkZWZpbmUgdGhlbSBoZXJlLgojIFN5c3RlbSBWIHByb2JhYmx5IG5lZWQgLWxQVyBmb3IgYWxsb2NhLgojIGlmIG9uIHZheCwgdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZQojTE9BRExJQkVTID0gLGMub3B0L29wdApMT0FETElCRVMgPSxzeXMkJGxpYnJhcnk6dmF4Y3J0bC5vbGIvbGliCgojIElmIHlvdXIgc3lzdGVtIGRvZXNuJ3QgaGF2ZSBhbGxvY2EsIG9yIHRoZSBvbmUgcHJvdmlkZWQgaXMgYmFkLAojIGdldCBpdCBmcm9tIHRoZSBFbWFjcyBkaXN0cmlidXRpb24gYW5kIGRlZmluZSB0aGVzZS4KQUxMT0NBID0gLGFsbG9jYS5vYmoKQUxMT0NBU1JDID0gYWxsb2NhLmMKCiMgSWYgdGhlcmUgYXJlIHJlbW90ZSBleGVjdXRpb24gZmFjaWxpdGllcyBkZWZpbmVkLAojIGVuYWJsZSB0aGVtIHdpdGggc3dpdGNoZXMgaGVyZSAoc2VlIHJlbW90ZS0qLmMpLgpSRU1PVEUgPQoKIyBBbnkgZXh0cmEgb2JqZWN0IGZpbGVzIHlvdXIgc3lzdGVtIG5lZWRzLgpleHRyYXMgPSAsc2lnbmFtZS5vYmoscmVtb3RlLXN0dWIub2JqLHZtc2Z1bmN0aW9ucy5vYmosdm1zaWZ5Lm9iagojLGRpcmVjdG9yeS5vYmoKIyBhcyBhbiBhbHRlcm5hdGl2ZToKZ2xvYiA9ICxbLmdsb2JdZ2xvYi5vYmosWy5nbG9iXWZubWF0Y2gub2JqCmdldG9wdCA9ICxnZXRvcHQub2JqLGdldG9wdDEub2JqCiMgRGlyZWN0b3J5IHRvIGluc3RhbGwgYG1ha2UnIGluLgpiaW5kaXIgPSBbXQojIERpcmVjdG9yeSB0byBpbnN0YWxsIHRoZSBtYW4gcGFnZSBpbi4KbWFuZGlyID0gW10KIyBOdW1iZXIgdG8gcHV0IG9uIHRoZSBtYW4gcGFnZSBmaWxlbmFtZS4KbWFuZXh0ID0gMQoKb2JqcyA9IGNvbW1hbmRzLm9iaixqb2Iub2JqLGRpci5vYmosZmlsZS5vYmosbWlzYy5vYmosXAogICAgICAgbWFpbi5vYmoscmVhZC5vYmoscmVtYWtlLm9iaixydWxlLm9iaixpbXBsaWNpdC5vYmosXAogICAgICAgZGVmYXVsdC5vYmosdmFyaWFibGUub2JqLGV4cGFuZC5vYmosZnVuY3Rpb24ub2JqLFwKICAgICAgIHZwYXRoLm9iaix2ZXJzaW9uLm9iaiQoQVJDSElWRVMpJChBTExPQ0EpJChleHRyYXMpJChnZXRvcHQpJChnbG9iKQpzcmNzID0gY29tbWFuZHMuYyBqb2IuYyBkaXIuYyBmaWxlLmMgbWlzYy5jIFwKCW1haW4uYyByZWFkLmMgcmVtYWtlLmMgcnVsZS5jIGltcGxpY2l0LmMgXAoJZGVmYXVsdC5jIHZhcmlhYmxlLmMgZXhwYW5kLmMgZnVuY3Rpb24uYyBcCgl2cGF0aC5jIHZlcnNpb24uYyB2bXNmdW5jdGlvbnMuYyB2bXNpZnkuYyAkKEFSQ0hJVkVTX1NSQykgJChBTExPQ0FTUkMpIFwKCWNvbW1hbmRzLmggZGVwLmggZmlsZWRlZi5oIGpvYi5oIG1ha2UuaCBydWxlLmggdmFyaWFibGUuaAoKCi5QSE9OWTogYWxsIGRvYwphbGw6IGNvbmZpZy5oIG1ha2UuZXhlCgpkb2M6IG1ha2UuaW5mbyBtYWtlLmR2aQoKCm1ha2UuZXhlOiAkKG9ianMpCgkkKExEKSQoTERGTEFHUykvZXhlPSRAICReJChMT0FETElCRVMpCgouUEhPTlk6IGNsZWFuIHJlYWxjbGVhbgpjbGVhbjoKCS0kKFJNKSBtYWtlLmV4ZTssKi5vYmo7KgoKIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkZXBlbmRlbmNpZXMuCmNvbW1hbmRzLm9iajogY29tbWFuZHMuYyBtYWtlLmggZGVwLmggY29tbWFuZHMuaCBmaWxlZGVmLmggdmFyaWFibGUuaCBqb2IuaApqb2Iub2JqOiBqb2IuYyBtYWtlLmggY29tbWFuZHMuaCBqb2IuaCBmaWxlZGVmLmggdmFyaWFibGUuaApkaXIub2JqOiBkaXIuYyBtYWtlLmgKZmlsZS5vYmo6IGZpbGUuYyBtYWtlLmggY29tbWFuZHMuaCBkZXAuaCBmaWxlZGVmLmggdmFyaWFibGUuaAptaXNjLm9iajogbWlzYy5jIG1ha2UuaCBkZXAuaAptYWluLm9iajogbWFpbi5jIG1ha2UuaCBjb21tYW5kcy5oIGRlcC5oIGZpbGVkZWYuaCB2YXJpYWJsZS5oIGpvYi5oCnJlYWQub2JqOiByZWFkLmMgbWFrZS5oIGNvbW1hbmRzLmggZGVwLmggZmlsZWRlZi5oIHZhcmlhYmxlLmgKcmVtYWtlLm9iajogcmVtYWtlLmMgbWFrZS5oIGNvbW1hbmRzLmggam9iLmggZGVwLmggZmlsZWRlZi5oCnJ1bGUub2JqOiBydWxlLmMgbWFrZS5oIGNvbW1hbmRzLmggZGVwLmggZmlsZWRlZi5oIHZhcmlhYmxlLmggcnVsZS5oCmltcGxpY2l0Lm9iajogaW1wbGljaXQuYyBtYWtlLmggcnVsZS5oIGRlcC5oIGZpbGVkZWYuaApkZWZhdWx0Lm9iajogZGVmYXVsdC5jIG1ha2UuaCBydWxlLmggZGVwLmggZmlsZWRlZi5oIGNvbW1hbmRzLmggdmFyaWFibGUuaAp2YXJpYWJsZS5vYmo6IHZhcmlhYmxlLmMgbWFrZS5oIGNvbW1hbmRzLmggdmFyaWFibGUuaCBkZXAuaCBmaWxlZGVmLmgKZXhwYW5kLm9iajogZXhwYW5kLmMgbWFrZS5oIGNvbW1hbmRzLmggZmlsZWRlZi5oIHZhcmlhYmxlLmgKZnVuY3Rpb24ub2JqOiBmdW5jdGlvbi5jIG1ha2UuaCB2YXJpYWJsZS5oIGRlcC5oIGNvbW1hbmRzLmggam9iLmgKdnBhdGgub2JqOiB2cGF0aC5jIG1ha2UuaCBmaWxlZGVmLmggdmFyaWFibGUuaAp2ZXJzaW9uLm9iajogdmVyc2lvbi5jCmFyc2Nhbi5vYmo6IGFyc2Nhbi5jCmFyLm9iajogYXIuYyBtYWtlLmggZmlsZWRlZi5oCnNpZ25hbWUub2JqOiBzaWduYW1lLmMKcmVtb3RlLXN0dWIub2JqOiByZW1vdGUtc3R1Yi5jClsuZ2xvYl1nbG9iLm9iajogWy5nbG9iXWdsb2IuYwpbLmdsb2JdZm5tYXRjaC5vYmo6IFsuZ2xvYl1mbm1hdGNoLmMKZ2V0b3B0Lm9iajogZ2V0b3B0LmMKZ2V0b3B0MS5vYmo6IGdldG9wdDEuYwoKY29uZmlnLmg6IGNvbmZpZy5oLXZtcwoJJChDUCkgJDwgJEAK