FDD2022 Big Tits Beauty Vol.10

ID: FDD2022

Release Date: 2004-10-29

Length: 110min

Studio:

FantaDream (FDD)

Series:

Big Tits Beauty

Genre:

Nice AssBustyFamous NamesJapanese Traditional Bind

Recommend

W3siaWQiOiJidHNfal9NXzMwMHgxMDAiLCJhZHNwb3QiOiJqX01fMzAweDEwMCIsIndlaWdodCI6IjEiLCJmY2FwIjpmYWxzZSwic2NoZWR1bGUiOmZhbHNlLCJtYXhXaWR0aCI6Ijc2OCIsIm1pbldpZHRoIjpmYWxzZSwidGltZXpvbmUiOmZhbHNlLCJleGNsdWRlIjpmYWxzZSwiZG9tYWluIjpmYWxzZSwiY29kZSI6IjxhIGhyZWY9XCJodHRwczpcL1wvYnRzby5wd1wvdmlkZW9cL0JpZyUyMFRpdHMlMjBCZWF1dHklMjBWb2wuMTAlMjAlMjBcIiB0YXJnZXQ9XCJfYmxhbmtcIj48aW1nIHNyYz1cIlwvYXBwXC9idHNcL1ZpZXdcL2ltZ1wvcDMwMDEwMC5wbmdcIj48XC9hPiJ9LHsiaWQiOiJleG9jX2pfTV8zMDB4MTAwIiwiYWRzcG90Ijoial9NXzMwMHgxMDAiLCJ3ZWlnaHQiOiIzIiwiZmNhcCI6ZmFsc2UsInNjaGVkdWxlIjpmYWxzZSwibWF4V2lkdGgiOiI3NjgiLCJtaW5XaWR0aCI6ZmFsc2UsInRpbWV6b25lIjpmYWxzZSwiZXhjbHVkZSI6ZmFsc2UsImRvbWFpbiI6ZmFsc2UsImNvZGUiOiI8c2NyaXB0IGFzeW5jIHR5cGU9XCJhcHBsaWNhdGlvblwvamF2YXNjcmlwdFwiIHNyYz1cImh0dHBzOlwvXC9hLm1hZ3Nydi5jb21cL2FkLXByb3ZpZGVyLmpzXCI+PFwvc2NyaXB0PiBcclxuIDxpbnMgY2xhc3M9XCJlYXM2YTk3ODg4ZTEwXCIgZGF0YS16b25laWQ9XCIxMDI2MzEwXCI+PFwvaW5zPiBcclxuIDxzY3JpcHQ+KEFkUHJvdmlkZXIgPSB3aW5kb3cuQWRQcm92aWRlciB8fCBbXSkucHVzaCh7XCJzZXJ2ZVwiOiB7fX0pOzxcL3NjcmlwdD4ifSx7ImlkIjoiamF2X2pfTV8zMDB4MTAwIiwiYWRzcG90Ijoial9NXzMwMHgxMDAiLCJ3ZWlnaHQiOiIyIiwiZmNhcCI6ZmFsc2UsInNjaGVkdWxlIjpmYWxzZSwibWF4V2lkdGgiOiI3NjgiLCJtaW5XaWR0aCI6ZmFsc2UsInRpbWV6b25lIjpmYWxzZSwiZXhjbHVkZSI6ZmFsc2UsImRvbWFpbiI6ZmFsc2UsImNvZGUiOiI8YSBocmVmPVwiaHR0cHM6XC9cL3RlbGxtZS5wd1wvZ29cL2phdlwiIHRhcmdldD1cIl9ibGFua1wiPjxpbWcgc3JjPVwiXC9hcHBcL2phdlwvVmlld1wvaW1nXC9iYW5uZXIuNjAweDEwMC5qcGdcIiB3aWR0aD1cIjMwMFwiIGhlaWdodD1cIjUwXCI+PFwvYT4ifSx7ImlkIjoianVpY19qX01fMzAweDEwMCIsImFkc3BvdCI6ImpfTV8zMDB4MTAwIiwid2VpZ2h0IjoiNSIsImZjYXAiOmZhbHNlLCJzY2hlZHVsZSI6ZmFsc2UsIm1heFdpZHRoIjoiNzY4IiwibWluV2lkdGgiOmZhbHNlLCJ0aW1lem9uZSI6ZmFsc2UsImV4Y2x1ZGUiOmZhbHNlLCJkb21haW4iOmZhbHNlLCJjb2RlIjoiPGlmcmFtZSBib3JkZXI9MCBmcmFtZWJvcmRlcj0wIG1hcmdpbmhlaWdodD0wIG1hcmdpbndpZHRoPTAgd2lkdGg9MzAwIGhlaWdodD0xMDAgc2Nyb2xsaW5nPW5vIGFsbG93dHJhbnNwYXJlbmN5PXRydWUgc3JjPVwvXC9hZHNlcnZlci5qdWljeWFkcy5jb21cL2Fkc2hvdy5waHA/YWR6b25lPTQ1MTc0MD48XC9pZnJhbWU+In0seyJpZCI6Indhdl9qX01fMzAweDEwMCIsImFkc3BvdCI6ImpfTV8zMDB4MTAwIiwid2VpZ2h0IjoiMiIsImZjYXAiOmZhbHNlLCJzY2hlZHVsZSI6ZmFsc2UsIm1heFdpZHRoIjoiNzY4IiwibWluV2lkdGgiOmZhbHNlLCJ0aW1lem9uZSI6ZmFsc2UsImV4Y2x1ZGUiOmZhbHNlLCJkb21haW4iOmZhbHNlLCJjb2RlIjoiPGEgaHJlZj1cImh0dHBzOlwvXC9hdnhvLmNsdWJcL1wiIHRhcmdldD1cIl9ibGFua1wiPjxpbWcgc3JjPVwiXC9hcHBcL3dhdlwvVmlld1wvaW1nXC9iYW5uZXIuNjAweDEwMC5qcGdcIiB3aWR0aD1cIjMwMFwiIGhlaWdodD1cIjUwXCI+PFwvYT4ifV0=

Stars

Akari Yamazaki

Recommend

W3siaWQiOiJleG9jX2pfTV8zMDB4MjUwIiwiYWRzcG90Ijoial9NXzMwMHgyNTAiLCJ3ZWlnaHQiOiIyIiwiZmNhcCI6ZmFsc2UsInNjaGVkdWxlIjpmYWxzZSwibWF4V2lkdGgiOiI3NjgiLCJtaW5XaWR0aCI6ZmFsc2UsInRpbWV6b25lIjpmYWxzZSwiZXhjbHVkZSI6ZmFsc2UsImRvbWFpbiI6ZmFsc2UsImNvZGUiOiI8c2NyaXB0IGFzeW5jIHR5cGU9XCJhcHBsaWNhdGlvblwvamF2YXNjcmlwdFwiIHNyYz1cImh0dHBzOlwvXC9hLm1hZ3Nydi5jb21cL2FkLXByb3ZpZGVyLmpzXCI+PFwvc2NyaXB0PiBcclxuIDxpbnMgY2xhc3M9XCJlYXM2YTk3ODg4ZTEwXCIgZGF0YS16b25laWQ9XCIxMDM5ODAyXCI+PFwvaW5zPiBcclxuIDxzY3JpcHQ+KEFkUHJvdmlkZXIgPSB3aW5kb3cuQWRQcm92aWRlciB8fCBbXSkucHVzaCh7XCJzZXJ2ZVwiOiB7fX0pOzxcL3NjcmlwdD4ifSx7ImlkIjoianVpY19qX01fMzAweDI1MCIsImFkc3BvdCI6ImpfTV8zMDB4MjUwIiwid2VpZ2h0IjoiMyIsImZjYXAiOmZhbHNlLCJzY2hlZHVsZSI6ZmFsc2UsIm1heFdpZHRoIjoiNzY4IiwibWluV2lkdGgiOmZhbHNlLCJ0aW1lem9uZSI6ZmFsc2UsImV4Y2x1ZGUiOmZhbHNlLCJkb21haW4iOmZhbHNlLCJjb2RlIjoiPGlmcmFtZSBib3JkZXI9MCBmcmFtZWJvcmRlcj0wIG1hcmdpbmhlaWdodD0wIG1hcmdpbndpZHRoPTAgd2lkdGg9MzA4IGhlaWdodD0yNTggc2Nyb2xsaW5nPW5vIGFsbG93dHJhbnNwYXJlbmN5PXRydWUgc3JjPVwvXC9hZHNlcnZlci5qdWljeWFkcy5jb21cL2Fkc2hvdy5waHA/YWR6b25lPTM2Mjc4MT48XC9pZnJhbWU+In1d
W3siaWQiOiJhZHN0X2pfUE9QVU5ERVIiLCJhZHNwb3QiOiJqX1BPUFVOREVSIiwid2VpZ2h0IjoiNSIsImZjYXAiOiIyIiwic2NoZWR1bGUiOmZhbHNlLCJtYXhXaWR0aCI6ZmFsc2UsIm1pbldpZHRoIjoiNzY4IiwidGltZXpvbmUiOmZhbHNlLCJleGNsdWRlIjpmYWxzZSwiZG9tYWluIjpmYWxzZSwiY29kZSI6IjxzY3JpcHQgdHlwZT0ndGV4dFwvamF2YXNjcmlwdCcgc3JjPSdcL1wvcGwxMTA3NjQucHVodG1sLmNvbVwvZjdcLzQ4XC82YVwvZjc0ODZhMDBjMjA0YjRmMGM4ZGU0NTZkN2JhNjQ2ZTAuanMnPjxcL3NjcmlwdD4ifSx7ImlkIjoiY2xpY19qX1BPUFVOREVSIiwiYWRzcG90Ijoial9QT1BVTkRFUiIsIndlaWdodCI6IjciLCJmY2FwIjoiMiIsInNjaGVkdWxlIjpmYWxzZSwibWF4V2lkdGgiOmZhbHNlLCJtaW5XaWR0aCI6ZmFsc2UsInRpbWV6b25lIjpmYWxzZSwiZXhjbHVkZSI6ZmFsc2UsImRvbWFpbiI6ZmFsc2UsImNvZGUiOiI8c2NyaXB0IGRhdGEtY2Zhc3luYz1cImZhbHNlXCIgdHlwZT1cInRleHRcL2phdmFzY3JpcHRcIiBzcmM9XCJcL1wvMmNuanVoMzRqYnBvaW50LmNvbVwvdFwvOVwvZnJldFwvbWVvdzRcLzM2OTA4OVwvYnJ0LmpzXCI+PFwvc2NyaXB0PiJ9LHsiaWQiOiJleG9jX2pfUE9QVU5ERVIiLCJhZHNwb3QiOiJqX1BPUFVOREVSIiwid2VpZ2h0IjoiNiIsImZjYXAiOiIyIiwic2NoZWR1bGUiOmZhbHNlLCJtYXhXaWR0aCI6ZmFsc2UsIm1pbldpZHRoIjoiNzY4IiwidGltZXpvbmUiOmZhbHNlLCJleGNsdWRlIjpmYWxzZSwiZG9tYWluIjpmYWxzZSwiY29kZSI6IjxzY3JpcHQgdHlwZT1cImFwcGxpY2F0aW9uXC9qYXZhc2NyaXB0XCI+XHJcbihmdW5jdGlvbigpIHtcclxuXHJcbiAgICBcL1wvdmVyc2lvbiAxLjAuMFxyXG5cclxuICAgIHZhciBhZENvbmZpZyA9IHtcclxuICAgIFwiYWRzX2hvc3RcIjogXCJhLnBlbXNydi5jb21cIixcclxuICAgIFwic3luZGljYXRpb25faG9zdFwiOiBcInMucGVtc3J2LmNvbVwiLFxyXG4gICAgXCJpZHpvbmVcIjogMTAwODEzNCxcclxuICAgIFwicG9wdXBfZmFsbGJhY2tcIjogZmFsc2UsXHJcbiAgICBcInBvcHVwX2ZvcmNlXCI6IGZhbHNlLFxyXG4gICAgXCJjaHJvbWVfZW5hYmxlZFwiOiB0cnVlLFxyXG4gICAgXCJuZXdfdGFiXCI6IGZhbHNlLFxyXG4gICAgXCJmcmVxdWVuY3lfcGVyaW9kXCI6IDcyMCxcclxuICAgIFwiZnJlcXVlbmN5X2NvdW50XCI6IDEsXHJcbiAgICBcInRyaWdnZXJfbWV0aG9kXCI6IDMsXHJcbiAgICBcInRyaWdnZXJfY2xhc3NcIjogXCJcIixcclxuICAgIFwidHJpZ2dlcl9kZWxheVwiOiAwLFxyXG4gICAgXCJvbmx5X2lubGluZVwiOiBmYWxzZVxyXG59O1xyXG5cclxuaWYoIXdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKXtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPWRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbD1PYmplY3QucXVlcnlTZWxlY3RvckFsbD1mdW5jdGlvbiBxdWVyeVNlbGVjdG9yQWxsUG9seWZpbGwocixjLGksaixhKXt2YXIgZD1kb2N1bWVudCxzPWQuY3JlYXRlU3R5bGVTaGVldCgpO2E9ZC5hbGw7Yz1bXTtyPXIucmVwbGFjZShcL1xcW2ZvclxcYlwvZ2ksXCJbaHRtbEZvclwiKS5zcGxpdChcIixcIik7Zm9yKGk9ci5sZW5ndGg7aS0tOyl7cy5hZGRSdWxlKHJbaV0sXCJrOnZcIik7Zm9yKGo9YS5sZW5ndGg7ai0tOyl7YVtqXS5jdXJyZW50U3R5bGUuayYmYy5wdXNoKGFbal0pfXMucmVtb3ZlUnVsZSgwKX1yZXR1cm4gY319dmFyIHBvcE1hZ2ljPXt2ZXJzaW9uOjEsY29va2llX25hbWU6XCJcIix1cmw6XCJcIixjb25maWc6e30sb3Blbl9jb3VudDowLHRvcDpudWxsLGJyb3dzZXI6bnVsbCx2ZW5vcl9sb2FkZWQ6ZmFsc2UsdmVub3I6ZmFsc2UsY29uZmlnVHBsOnthZHNfaG9zdDpcIlwiLHN5bmRpY2F0aW9uX2hvc3Q6XCJcIixpZHpvbmU6XCJcIixmcmVxdWVuY3lfcGVyaW9kOjcyMCxmcmVxdWVuY3lfY291bnQ6MSx0cmlnZ2VyX21ldGhvZDoxLHRyaWdnZXJfY2xhc3M6XCJcIixwb3B1cF9mb3JjZTpmYWxzZSxwb3B1cF9mYWxsYmFjazpmYWxzZSxjaHJvbWVfZW5hYmxlZDp0cnVlLG5ld190YWI6ZmFsc2UsY2F0OlwiXCIsdGFnczpcIlwiLGVsOlwiXCIsc3ViOlwiXCIsc3ViMjpcIlwiLHN1YjM6XCJcIixvbmx5X2lubGluZTpmYWxzZSx0cmlnZ2VyX2RlbGF5OjAsY29va2llY29uc2VudDp0cnVlfSxpbml0OmZ1bmN0aW9uKGNvbmZpZyl7aWYodHlwZW9mIGNvbmZpZy5pZHpvbmU9PT1cInVuZGVmaW5lZFwifHwhY29uZmlnLmlkem9uZSl7cmV0dXJufWlmKHR5cGVvZiBjb25maWdbXCJjdXN0b21UYXJnZXRpbmdcIl09PT1cInVuZGVmaW5lZFwiKXtjb25maWdbXCJjdXN0b21UYXJnZXRpbmdcIl09W119d2luZG93W1wiY3VzdG9tVGFyZ2V0aW5nXCJdPWNvbmZpZ1tcImN1c3RvbVRhcmdldGluZ1wiXXx8bnVsbDt2YXIgY3VzdG9tVGFyZ2V0aW5nPU9iamVjdC5rZXlzKGNvbmZpZ1tcImN1c3RvbVRhcmdldGluZ1wiXSkuZmlsdGVyKGZ1bmN0aW9uKGMpe3JldHVybiBjLnNlYXJjaChcImV4X1wiKT49MH0pO2lmKGN1c3RvbVRhcmdldGluZy5sZW5ndGgpe2N1c3RvbVRhcmdldGluZy5mb3JFYWNoKGZ1bmN0aW9uKGN0KXtyZXR1cm4gdGhpcy5jb25maWdUcGxbY3RdPW51bGx9LmJpbmQodGhpcykpfWZvcih2YXIga2V5IGluIHRoaXMuY29uZmlnVHBsKXtpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnVHBsLGtleSkpe2NvbnRpbnVlfWlmKHR5cGVvZiBjb25maWdba2V5XSE9PVwidW5kZWZpbmVkXCIpe3RoaXMuY29uZmlnW2tleV09Y29uZmlnW2tleV19ZWxzZXt0aGlzLmNvbmZpZ1trZXldPXRoaXMuY29uZmlnVHBsW2tleV19fWlmKHR5cGVvZiB0aGlzLmNvbmZpZy5pZHpvbmU9PT1cInVuZGVmaW5lZFwifHx0aGlzLmNvbmZpZy5pZHpvbmU9PT1cIlwiKXtyZXR1cm59aWYodGhpcy5jb25maWcub25seV9pbmxpbmUhPT10cnVlKXt0aGlzLmxvYWRIb3N0ZWQoKX10aGlzLmFkZEV2ZW50VG9FbGVtZW50KHdpbmRvdyxcImxvYWRcIix0aGlzLnByZXBhcmVQb3ApfSxnZXRDb3VudEZyb21Db29raWU6ZnVuY3Rpb24oKXtpZighdGhpcy5jb25maWcuY29va2llY29uc2VudCl7cmV0dXJuIDB9dmFyIHNob3duQ29va2llPXBvcE1hZ2ljLmdldENvb2tpZShwb3BNYWdpYy5jb29raWVfbmFtZSk7dmFyIGN0cj10eXBlb2Ygc2hvd25Db29raWU9PT1cInVuZGVmaW5lZFwiPzA6cGFyc2VJbnQoc2hvd25Db29raWUpO2lmKGlzTmFOKGN0cikpe2N0cj0wfXJldHVybiBjdHJ9LGdldExhc3RPcGVuZWRUaW1lRnJvbUNvb2tpZTpmdW5jdGlvbigpe3ZhciBzaG93bkNvb2tpZT1wb3BNYWdpYy5nZXRDb29raWUocG9wTWFnaWMuY29va2llX25hbWUpO3ZhciBkZWxheT1udWxsO2lmKHR5cGVvZiBzaG93bkNvb2tpZSE9PVwidW5kZWZpbmVkXCIpe3ZhciB2YWx1ZT1zaG93bkNvb2tpZS5zcGxpdChcIjtcIilbMV07ZGVsYXk9dmFsdWU+MD9wYXJzZUludCh2YWx1ZSk6MH1pZihpc05hTihkZWxheSkpe2RlbGF5PW51bGx9cmV0dXJuIGRlbGF5fSxzaG91bGRTaG93OmZ1bmN0aW9uKCl7aWYocG9wTWFnaWMub3Blbl9jb3VudD49cG9wTWFnaWMuY29uZmlnLmZyZXF1ZW5jeV9jb3VudCl7cmV0dXJuIGZhbHNlfXZhciBjdHI9cG9wTWFnaWMuZ2V0Q291bnRGcm9tQ29va2llKCk7Y29uc3QgbGFzdF9vcGVuZWRfdGltZT1wb3BNYWdpYy5nZXRMYXN0T3BlbmVkVGltZUZyb21Db29raWUoKTtjb25zdCBjdXJyZW50X3RpbWU9TWF0aC5mbG9vcihEYXRlLm5vdygpXC8xZTMpO2NvbnN0IG1heGltdW1EZWxheVRpbWU9bGFzdF9vcGVuZWRfdGltZStwb3BNYWdpYy5jb25maWcudHJpZ2dlcl9kZWxheTtpZihsYXN0X29wZW5lZF90aW1lJiZtYXhpbXVtRGVsYXlUaW1lPmN1cnJlbnRfdGltZSl7cmV0dXJuIGZhbHNlfXBvcE1hZ2ljLm9wZW5fY291bnQ9Y3RyO3JldHVybiEoY3RyPj1wb3BNYWdpYy5jb25maWcuZnJlcXVlbmN5X2NvdW50KX0sdmVub3JTaG91bGRTaG93OmZ1bmN0aW9uKCl7cmV0dXJuIHBvcE1hZ2ljLnZlbm9yX2xvYWRlZCYmcG9wTWFnaWMudmVub3I9PT1cIjBcIn0sc2V0QXNPcGVuZWQ6ZnVuY3Rpb24oKXt2YXIgbmV3X2N0cj0xO2lmKHBvcE1hZ2ljLm9wZW5fY291bnQhPT0wKXtuZXdfY3RyPXBvcE1hZ2ljLm9wZW5fY291bnQrMX1lbHNle25ld19jdHI9cG9wTWFnaWMuZ2V0Q291bnRGcm9tQ29va2llKCkrMX1jb25zdCBsYXN0X29wZW5lZF90aW1lPU1hdGguZmxvb3IoRGF0ZS5ub3coKVwvMWUzKTtpZihwb3BNYWdpYy5jb25maWcuY29va2llY29uc2VudCl7cG9wTWFnaWMuc2V0Q29va2llKHBvcE1hZ2ljLmNvb2tpZV9uYW1lLGAke25ld19jdHJ9OyR7bGFzdF9vcGVuZWRfdGltZX1gLHBvcE1hZ2ljLmNvbmZpZy5mcmVxdWVuY3lfcGVyaW9kKX19LGxvYWRIb3N0ZWQ6ZnVuY3Rpb24oKXt2YXIgaG9zdGVkU2NyaXB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7aG9zdGVkU2NyaXB0LnR5cGU9XCJhcHBsaWNhdGlvblwvamF2YXNjcmlwdFwiO2hvc3RlZFNjcmlwdC5hc3luYz10cnVlO2hvc3RlZFNjcmlwdC5zcmM9XCJcL1wvXCIrdGhpcy5jb25maWcuYWRzX2hvc3QrXCJcL3BvcHVuZGVyMTAwMC5qc1wiO2hvc3RlZFNjcmlwdC5pZD1cInBvcG1hZ2ljbGRyXCI7Zm9yKHZhciBrZXkgaW4gdGhpcy5jb25maWcpe2lmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb25maWcsa2V5KSl7Y29udGludWV9aWYoa2V5PT09XCJhZHNfaG9zdFwifHxrZXk9PT1cInN5bmRpY2F0aW9uX2hvc3RcIil7Y29udGludWV9aG9zdGVkU2NyaXB0LnNldEF0dHJpYnV0ZShcImRhdGEtZXhvLVwiK2tleSx0aGlzLmNvbmZpZ1trZXldKX12YXIgaW5zZXJ0QW5jaG9yPWRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYm9keVwiKS5pdGVtKDApO2lmKGluc2VydEFuY2hvci5maXJzdENoaWxkKXtpbnNlcnRBbmNob3IuaW5zZXJ0QmVmb3JlKGhvc3RlZFNjcmlwdCxpbnNlcnRBbmNob3IuZmlyc3RDaGlsZCl9ZWxzZXtpbnNlcnRBbmNob3IuYXBwZW5kQ2hpbGQoaG9zdGVkU2NyaXB0KX19LHByZXBhcmVQb3A6ZnVuY3Rpb24oKXtpZih0eXBlb2YgZXhvSnNQb3AxMDE9PT1cIm9iamVjdFwiJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhvSnNQb3AxMDEsXCJhZGRcIikpe3JldHVybn1wb3BNYWdpYy50b3A9c2VsZjtpZihwb3BNYWdpYy50b3AhPT1zZWxmKXt0cnl7aWYodG9wLmRvY3VtZW50LmxvY2F0aW9uLnRvU3RyaW5nKCkpe3BvcE1hZ2ljLnRvcD10b3B9fWNhdGNoKGVycil7fX1wb3BNYWdpYy5jb29raWVfbmFtZT1cInpvbmUtY2FwLVwiK3BvcE1hZ2ljLmNvbmZpZy5pZHpvbmU7aWYocG9wTWFnaWMuc2hvdWxkU2hvdygpKXt2YXIgeG1saHR0cD1uZXcgWE1MSHR0cFJlcXVlc3Q7eG1saHR0cC5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtpZih4bWxodHRwLnJlYWR5U3RhdGU9PVhNTEh0dHBSZXF1ZXN0LkRPTkUpe3BvcE1hZ2ljLnZlbm9yX2xvYWRlZD10cnVlO2lmKHhtbGh0dHAuc3RhdHVzPT0yMDApe3BvcE1hZ2ljLnZlbm9yPXhtbGh0dHAucmVzcG9uc2VUZXh0fWVsc2V7cG9wTWFnaWMudmVub3I9XCIwXCJ9fX07dmFyIHByb3RvY29sPWRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sIT09XCJodHRwczpcIiYmZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2whPT1cImh0dHA6XCI/XCJodHRwczpcIjpkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbDt4bWxodHRwLm9wZW4oXCJHRVRcIixwcm90b2NvbCtcIlwvXC9cIitwb3BNYWdpYy5jb25maWcuc3luZGljYXRpb25faG9zdCtcIlwvdmVub3IucGhwXCIsdHJ1ZSk7dHJ5e3htbGh0dHAuc2VuZCgpfWNhdGNoKGVycm9yKXtwb3BNYWdpYy52ZW5vcl9sb2FkZWQ9dHJ1ZX19cG9wTWFnaWMuYnVpbGRVcmwoKTtwb3BNYWdpYy5icm93c2VyPXBvcE1hZ2ljLmJyb3dzZXJEZXRlY3Rvci5kZXRlY3RCcm93c2VyKG5hdmlnYXRvci51c2VyQWdlbnQpO2lmKCFwb3BNYWdpYy5jb25maWcuY2hyb21lX2VuYWJsZWQmJihwb3BNYWdpYy5icm93c2VyLm5hbWU9PT1cImNocm9tZVwifHxwb3BNYWdpYy5icm93c2VyLm5hbWU9PT1cImNyaW9zXCIpKXtyZXR1cm59dmFyIHBvcE1ldGhvZD1wb3BNYWdpYy5nZXRQb3BNZXRob2QocG9wTWFnaWMuYnJvd3Nlcik7cG9wTWFnaWMuYWRkRXZlbnQoXCJjbGlja1wiLHBvcE1ldGhvZCl9LGdldFBvcE1ldGhvZDpmdW5jdGlvbihicm93c2VySW5mbyl7aWYocG9wTWFnaWMuY29uZmlnLnBvcHVwX2ZvcmNlKXtyZXR1cm4gcG9wTWFnaWMubWV0aG9kcy5wb3B1cH1pZihwb3BNYWdpYy5jb25maWcucG9wdXBfZmFsbGJhY2smJmJyb3dzZXJJbmZvLm5hbWU9PT1cImNocm9tZVwiJiZicm93c2VySW5mby52ZXJzaW9uPj02OCYmIWJyb3dzZXJJbmZvLmlzTW9iaWxlKXtyZXR1cm4gcG9wTWFnaWMubWV0aG9kcy5wb3B1cH1pZihicm93c2VySW5mby5pc01vYmlsZSl7cmV0dXJuIHBvcE1hZ2ljLm1ldGhvZHMuZGVmYXVsdH1pZihicm93c2VySW5mby5uYW1lPT09XCJjaHJvbWVcIil7cmV0dXJuIHBvcE1hZ2ljLm1ldGhvZHMuY2hyb21lVGFifXJldHVybiBwb3BNYWdpYy5tZXRob2RzLmRlZmF1bHR9LGJ1aWxkVXJsOmZ1bmN0aW9uKCl7dmFyIHByb3RvY29sPWRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sIT09XCJodHRwczpcIiYmZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2whPT1cImh0dHA6XCI/XCJodHRwczpcIjpkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbDt2YXIgcD10b3A9PT1zZWxmP2RvY3VtZW50LlVSTDpkb2N1bWVudC5yZWZlcnJlcjt2YXIgc2NyaXB0X2luZm89e3R5cGU6XCJpbmxpbmVcIixuYW1lOlwicG9wTWFnaWNcIix2ZXI6dGhpcy52ZXJzaW9ufTt2YXIgZW5jb2RlU2NyaXB0SW5mbz1mdW5jdGlvbihzY3JpcHRfaW5mbyl7dmFyIHJlc3VsdD1zY3JpcHRfaW5mb1tcInR5cGVcIl0rXCJ8XCIrc2NyaXB0X2luZm9bXCJuYW1lXCJdK1wifFwiK3NjcmlwdF9pbmZvW1widmVyXCJdO3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoYnRvYShyZXN1bHQpKX07dmFyIGN1c3RvbVRhcmdldGluZ1BhcmFtcz1cIlwiO2lmKGN1c3RvbVRhcmdldGluZyYmT2JqZWN0LmtleXMoY3VzdG9tVGFyZ2V0aW5nKS5sZW5ndGgpe3ZhciBjdXN0b21UYXJnZXRpbmdLZXlzPXR5cGVvZiBjdXN0b21UYXJnZXRpbmc9PT1cIm9iamVjdFwiP09iamVjdC5rZXlzKGN1c3RvbVRhcmdldGluZyk6Y3VzdG9tVGFyZ2V0aW5nO3ZhciB2YWx1ZTtjdXN0b21UYXJnZXRpbmdLZXlzLmZvckVhY2goZnVuY3Rpb24oa2V5KXtpZih0eXBlb2YgY3VzdG9tVGFyZ2V0aW5nPT09XCJvYmplY3RcIil7dmFsdWU9Y3VzdG9tVGFyZ2V0aW5nW2tleV19ZWxzZSBpZihBcnJheS5pc0FycmF5KGN1c3RvbVRhcmdldGluZykpe3ZhbHVlPXNjcmlwdEVsLmdldEF0dHJpYnV0ZShrZXkpfXZhciBrZXlXaXRob3V0RXhvUHJlZml4PWtleS5yZXBsYWNlKFwiZGF0YS1leG8tXCIsXCJcIik7Y3VzdG9tVGFyZ2V0aW5nUGFyYW1zKz1gJiR7a2V5V2l0aG91dEV4b1ByZWZpeH09JHt2YWx1ZX1gfSl9dGhpcy51cmw9cHJvdG9jb2wrXCJcL1wvXCIrdGhpcy5jb25maWcuc3luZGljYXRpb25faG9zdCtcIlwvc3BsYXNoLnBocFwiK1wiP2NhdD1cIit0aGlzLmNvbmZpZy5jYXQrXCImaWR6b25lPVwiK3RoaXMuY29uZmlnLmlkem9uZStcIiZ0eXBlPThcIitcIiZwPVwiK2VuY29kZVVSSUNvbXBvbmVudChwKStcIiZzdWI9XCIrdGhpcy5jb25maWcuc3ViKyh0aGlzLmNvbmZpZy5zdWIyIT09XCJcIj9cIiZzdWIyPVwiK3RoaXMuY29uZmlnLnN1YjI6XCJcIikrKHRoaXMuY29uZmlnLnN1YjMhPT1cIlwiP1wiJnN1YjM9XCIrdGhpcy5jb25maWcuc3ViMzpcIlwiKStcIiZibG9jaz0xXCIrXCImZWw9XCIrdGhpcy5jb25maWcuZWwrXCImdGFncz1cIit0aGlzLmNvbmZpZy50YWdzK1wiJmNvb2tpZWNvbnNlbnQ9XCIrdGhpcy5jb25maWcuY29va2llY29uc2VudCtcIiZzY3JfaW5mbz1cIitlbmNvZGVTY3JpcHRJbmZvKHNjcmlwdF9pbmZvKStjdXN0b21UYXJnZXRpbmdQYXJhbXN9LGFkZEV2ZW50VG9FbGVtZW50OmZ1bmN0aW9uKG9iaix0eXBlLGZuKXtpZihvYmouYWRkRXZlbnRMaXN0ZW5lcil7b2JqLmFkZEV2ZW50TGlzdGVuZXIodHlwZSxmbixmYWxzZSl9ZWxzZSBpZihvYmouYXR0YWNoRXZlbnQpe29ialtcImVcIit0eXBlK2ZuXT1mbjtvYmpbdHlwZStmbl09ZnVuY3Rpb24oKXtvYmpbXCJlXCIrdHlwZStmbl0od2luZG93LmV2ZW50KX07b2JqLmF0dGFjaEV2ZW50KFwib25cIit0eXBlLG9ialt0eXBlK2ZuXSl9ZWxzZXtvYmpbXCJvblwiK3R5cGVdPW9ialtcImVcIit0eXBlK2ZuXX19LGFkZEV2ZW50OmZ1bmN0aW9uKHR5cGUsZm4pe3ZhciB0YXJnZXRFbGVtZW50cztpZihwb3BNYWdpYy5jb25maWcudHJpZ2dlcl9tZXRob2Q9PVwiM1wiKXt0YXJnZXRFbGVtZW50cz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiYVwiKTtmb3IoaT0wO2k8dGFyZ2V0RWxlbWVudHMubGVuZ3RoO2krKyl7cG9wTWFnaWMuYWRkRXZlbnRUb0VsZW1lbnQodGFyZ2V0RWxlbWVudHNbaV0sdHlwZSxmbil9cmV0dXJufWlmKHBvcE1hZ2ljLmNvbmZpZy50cmlnZ2VyX21ldGhvZD09XCIyXCImJnBvcE1hZ2ljLmNvbmZpZy50cmlnZ2VyX21ldGhvZCE9XCJcIil7dmFyIHRyaWdnZXJfY2xhc3Nlczt2YXIgdHJpZ2dlcl9jbGFzc2VzX2ZpbmFsPVtdO2lmKHBvcE1hZ2ljLmNvbmZpZy50cmlnZ2VyX2NsYXNzLmluZGV4T2YoXCIsXCIpPT09LTEpe3RyaWdnZXJfY2xhc3Nlcz1wb3BNYWdpYy5jb25maWcudHJpZ2dlcl9jbGFzcy5zcGxpdChcIiBcIil9ZWxzZXt2YXIgdHJpbW1lZF90cmlnZ2VyX2NsYXNzZXM9cG9wTWFnaWMuY29uZmlnLnRyaWdnZXJfY2xhc3MucmVwbGFjZShcL1xcc1wvZyxcIlwiKTt0cmlnZ2VyX2NsYXNzZXM9dHJpbW1lZF90cmlnZ2VyX2NsYXNzZXMuc3BsaXQoXCIsXCIpfWZvcih2YXIgaT0wO2k8dHJpZ2dlcl9jbGFzc2VzLmxlbmd0aDtpKyspe2lmKHRyaWdnZXJfY2xhc3Nlc1tpXSE9PVwiXCIpe3RyaWdnZXJfY2xhc3Nlc19maW5hbC5wdXNoKFwiLlwiK3RyaWdnZXJfY2xhc3Nlc1tpXSl9fXRhcmdldEVsZW1lbnRzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodHJpZ2dlcl9jbGFzc2VzX2ZpbmFsLmpvaW4oXCIsIFwiKSk7Zm9yKGk9MDtpPHRhcmdldEVsZW1lbnRzLmxlbmd0aDtpKyspe3BvcE1hZ2ljLmFkZEV2ZW50VG9FbGVtZW50KHRhcmdldEVsZW1lbnRzW2ldLHR5cGUsZm4pfXJldHVybn1wb3BNYWdpYy5hZGRFdmVudFRvRWxlbWVudChkb2N1bWVudCx0eXBlLGZuKX0sc2V0Q29va2llOmZ1bmN0aW9uKG5hbWUsdmFsdWUsdHRsX21pbnV0ZXMpe2lmKCF0aGlzLmNvbmZpZy5jb29raWVjb25zZW50KXtyZXR1cm4gZmFsc2V9dHRsX21pbnV0ZXM9cGFyc2VJbnQodHRsX21pbnV0ZXMsMTApO3ZhciBub3dfZGF0ZT1uZXcgRGF0ZTtub3dfZGF0ZS5zZXRNaW51dGVzKG5vd19kYXRlLmdldE1pbnV0ZXMoKStwYXJzZUludCh0dGxfbWludXRlcykpO3ZhciBjX3ZhbHVlPWVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkrXCI7IGV4cGlyZXM9XCIrbm93X2RhdGUudG9VVENTdHJpbmcoKStcIjsgcGF0aD1cL1wiO2RvY3VtZW50LmNvb2tpZT1uYW1lK1wiPVwiK2NfdmFsdWV9LGdldENvb2tpZTpmdW5jdGlvbihuYW1lKXtpZighdGhpcy5jb25maWcuY29va2llY29uc2VudCl7cmV0dXJuIGZhbHNlfXZhciBpLHgseSxjb29raWVzQXJyYXk9ZG9jdW1lbnQuY29va2llLnNwbGl0KFwiO1wiKTtmb3IoaT0wO2k8Y29va2llc0FycmF5Lmxlbmd0aDtpKyspe3g9Y29va2llc0FycmF5W2ldLnN1YnN0cigwLGNvb2tpZXNBcnJheVtpXS5pbmRleE9mKFwiPVwiKSk7eT1jb29raWVzQXJyYXlbaV0uc3Vic3RyKGNvb2tpZXNBcnJheVtpXS5pbmRleE9mKFwiPVwiKSsxKTt4PXgucmVwbGFjZShcL15cXHMrfFxccyskXC9nLFwiXCIpO2lmKHg9PT1uYW1lKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHkpfX19LHJhbmRTdHI6ZnVuY3Rpb24obGVuZ3RoLHBvc3NpYmxlQ2hhcnMpe3ZhciB0ZXh0PVwiXCI7dmFyIHBvc3NpYmxlPXBvc3NpYmxlQ2hhcnN8fFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODlcIjtmb3IodmFyIGk9MDtpPGxlbmd0aDtpKyspe3RleHQrPXBvc3NpYmxlLmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqcG9zc2libGUubGVuZ3RoKSl9cmV0dXJuIHRleHR9LGlzVmFsaWRVc2VyRXZlbnQ6ZnVuY3Rpb24oZXZlbnQpe2lmKFwiaXNUcnVzdGVkXCJpbiBldmVudCYmZXZlbnQuaXNUcnVzdGVkJiZwb3BNYWdpYy5icm93c2VyLm5hbWUhPT1cImllXCImJnBvcE1hZ2ljLmJyb3dzZXIubmFtZSE9PVwic2FmYXJpXCIpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGV2ZW50LnNjcmVlblghPTAmJmV2ZW50LnNjcmVlblkhPTB9fSxpc1ZhbGlkSHJlZjpmdW5jdGlvbihocmVmKXtpZih0eXBlb2YgaHJlZj09PVwidW5kZWZpbmVkXCJ8fGhyZWY9PVwiXCIpe3JldHVybiBmYWxzZX12YXIgZW1wdHlfcmVmPVwvXFxzP2phdmFzY3JpcHRcXHM/OlwvaTtyZXR1cm4hZW1wdHlfcmVmLnRlc3QoaHJlZil9LGZpbmRMaW5rVG9PcGVuOmZ1bmN0aW9uKGNsaWNrZWRFbGVtZW50KXt2YXIgdGFyZ2V0PWNsaWNrZWRFbGVtZW50O3ZhciBsb2NhdGlvbj1mYWxzZTt0cnl7dmFyIGJyZWFrQ3RyPTA7d2hpbGUoYnJlYWtDdHI8MjAmJiF0YXJnZXQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSYmdGFyZ2V0IT09ZG9jdW1lbnQmJnRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09XCJodG1sXCIpe3RhcmdldD10YXJnZXQucGFyZW50Tm9kZTticmVha0N0cisrfXZhciBlbGVtZW50VGFyZ2V0QXR0cj10YXJnZXQuZ2V0QXR0cmlidXRlKFwidGFyZ2V0XCIpO2lmKCFlbGVtZW50VGFyZ2V0QXR0cnx8ZWxlbWVudFRhcmdldEF0dHIuaW5kZXhPZihcIl9ibGFua1wiKT09PS0xKXtsb2NhdGlvbj10YXJnZXQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKX19Y2F0Y2goZXJyKXt9aWYoIXBvcE1hZ2ljLmlzVmFsaWRIcmVmKGxvY2F0aW9uKSl7bG9jYXRpb249ZmFsc2V9cmV0dXJuIGxvY2F0aW9ufHx3aW5kb3cubG9jYXRpb24uaHJlZn0sZ2V0UHVJZDpmdW5jdGlvbigpe3JldHVyblwib2tfXCIrTWF0aC5mbG9vcig4OTk5OTk5OSpNYXRoLnJhbmRvbSgpKzFlNyl9LGJyb3dzZXJEZXRlY3Rvcjp7YnJvd3NlckRlZmluaXRpb25zOltbXCJmaXJlZm94XCIsXC9GaXJlZm94XFxcLyhbMC05Ll0rKSg/Olxcc3wkKVwvXSxbXCJvcGVyYVwiLFwvT3BlcmFcXFwvKFswLTkuXSspKD86XFxzfCQpXC9dLFtcIm9wZXJhXCIsXC9PUFJcXFwvKFswLTkuXSspKDo/XFxzfCQpJFwvXSxbXCJlZGdlXCIsXC9FZGcoPzplfClcXFwvKFswLTkuX10rKVwvXSxbXCJpZVwiLFwvVHJpZGVudFxcXC83XFwuMC4qcnY6KFswLTkuXSspXFwpLipHZWNrbyRcL10sW1wiaWVcIixcL01TSUVcXHMoWzAtOS5dKyk7LipUcmlkZW50XFxcL1s0LTddLjBcL10sW1wiaWVcIixcL01TSUVcXHMoN1xcLjApXC9dLFtcInNhZmFyaVwiLFwvVmVyc2lvblxcXC8oWzAtOS5fXSspLipTYWZhcmlcL10sW1wiY2hyb21lXCIsXC8oPyFDaHJvbS4qRWRnKD86ZXwpKUNocm9tKD86ZXxpdW0pXFxcLyhbMC05Ll0rKSg6P1xcc3wkKVwvXSxbXCJjaHJvbWVcIixcLyg/IUNocm9tLipPUFIpQ2hyb20oPzplfGl1bSlcXFwvKFswLTkuXSspKDo/XFxzfCQpXC9dLFtcImJiMTBcIixcL0JCMTA7XFxzVG91Y2guKlZlcnNpb25cXFwvKFswLTkuXSspXC9dLFtcImFuZHJvaWRcIixcL0FuZHJvaWRcXHMoWzAtOS5dKylcL10sW1wiaW9zXCIsXC9WZXJzaW9uXFxcLyhbMC05Ll9dKykuKk1vYmlsZS4qU2FmYXJpLipcL10sW1wieWFuZGV4YnJvd3NlclwiLFwvWWFCcm93c2VyXFxcLyhbMC05Ll9dKylcL10sW1wiY3Jpb3NcIixcL0NyaU9TXFxcLyhbMC05Ll0rKSg6P1xcc3wkKVwvXV0sZGV0ZWN0QnJvd3NlcjpmdW5jdGlvbih1c2VyQWdlbnQpe3ZhciBpc01vYmlsZT11c2VyQWdlbnQubWF0Y2goXC9BbmRyb2lkfEJsYWNrQmVycnl8aVBob25lfGlQYWR8aVBvZHxPcGVyYSBNaW5pfElFTW9iaWxlfFdlYk9TfFdpbmRvd3MgUGhvbmVcL2kpO2Zvcih2YXIgaSBpbiB0aGlzLmJyb3dzZXJEZWZpbml0aW9ucyl7dmFyIGRlZmluaXRpb249dGhpcy5icm93c2VyRGVmaW5pdGlvbnNbaV07aWYoZGVmaW5pdGlvblsxXS50ZXN0KHVzZXJBZ2VudCkpe3ZhciBtYXRjaD1kZWZpbml0aW9uWzFdLmV4ZWModXNlckFnZW50KTt2YXIgdmVyc2lvbj1tYXRjaCYmbWF0Y2hbMV0uc3BsaXQoXC9bLl9dXC8pLnNsaWNlKDAsMyk7dmFyIHZlcnNpb25UYWlscz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh2ZXJzaW9uLDEpLmpvaW4oXCJcIil8fFwiMFwiO2lmKHZlcnNpb24mJnZlcnNpb24ubGVuZ3RoPDMpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHZlcnNpb24sdmVyc2lvbi5sZW5ndGg9PT0xP1swLDBdOlswXSl9cmV0dXJue25hbWU6ZGVmaW5pdGlvblswXSx2ZXJzaW9uOnZlcnNpb24uam9pbihcIi5cIiksdmVyc2lvbk51bWJlcjpwYXJzZUZsb2F0KHZlcnNpb25bMF0rXCIuXCIrdmVyc2lvblRhaWxzKSxpc01vYmlsZTppc01vYmlsZX19fXJldHVybntuYW1lOlwib3RoZXJcIix2ZXJzaW9uOlwiMS4wXCIsdmVyc2lvbk51bWJlcjoxLGlzTW9iaWxlOmlzTW9iaWxlfX19LG1ldGhvZHM6e2RlZmF1bHQ6ZnVuY3Rpb24odHJpZ2dlcmVkRXZlbnQpe2lmKCFwb3BNYWdpYy5zaG91bGRTaG93KCl8fCFwb3BNYWdpYy52ZW5vclNob3VsZFNob3coKXx8IXBvcE1hZ2ljLmlzVmFsaWRVc2VyRXZlbnQodHJpZ2dlcmVkRXZlbnQpKXJldHVybiB0cnVlO3ZhciBjbGlja2VkRWxlbWVudD10cmlnZ2VyZWRFdmVudC50YXJnZXR8fHRyaWdnZXJlZEV2ZW50LnNyY0VsZW1lbnQ7dmFyIGhyZWY9cG9wTWFnaWMuZmluZExpbmtUb09wZW4oY2xpY2tlZEVsZW1lbnQpO3dpbmRvdy5vcGVuKGhyZWYsXCJfYmxhbmtcIik7cG9wTWFnaWMuc2V0QXNPcGVuZWQoKTtwb3BNYWdpYy50b3AuZG9jdW1lbnQubG9jYXRpb249cG9wTWFnaWMudXJsO2lmKHR5cGVvZiB0cmlnZ2VyZWRFdmVudC5wcmV2ZW50RGVmYXVsdCE9PVwidW5kZWZpbmVkXCIpe3RyaWdnZXJlZEV2ZW50LnByZXZlbnREZWZhdWx0KCk7dHJpZ2dlcmVkRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9cmV0dXJuIHRydWV9LGNocm9tZVRhYjpmdW5jdGlvbihldmVudCl7aWYoIXBvcE1hZ2ljLnNob3VsZFNob3coKXx8IXBvcE1hZ2ljLnZlbm9yU2hvdWxkU2hvdygpfHwhcG9wTWFnaWMuaXNWYWxpZFVzZXJFdmVudChldmVudCkpcmV0dXJuIHRydWU7aWYodHlwZW9mIGV2ZW50LnByZXZlbnREZWZhdWx0IT09XCJ1bmRlZmluZWRcIil7ZXZlbnQucHJldmVudERlZmF1bHQoKTtldmVudC5zdG9wUHJvcGFnYXRpb24oKX1lbHNle3JldHVybiB0cnVlfXZhciBhPXRvcC53aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7dmFyIHRhcmdldD1ldmVudC50YXJnZXR8fGV2ZW50LnNyY0VsZW1lbnQ7YS5ocmVmPXBvcE1hZ2ljLmZpbmRMaW5rVG9PcGVuKHRhcmdldCk7ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJib2R5XCIpWzBdLmFwcGVuZENoaWxkKGEpO3ZhciBlPW5ldyBNb3VzZUV2ZW50KFwiY2xpY2tcIix7YnViYmxlczp0cnVlLGNhbmNlbGFibGU6dHJ1ZSx2aWV3OndpbmRvdyxzY3JlZW5YOjAsc2NyZWVuWTowLGNsaWVudFg6MCxjbGllbnRZOjAsY3RybEtleTp0cnVlLGFsdEtleTpmYWxzZSxzaGlmdEtleTpmYWxzZSxtZXRhS2V5OnRydWUsYnV0dG9uOjB9KTtlLnByZXZlbnREZWZhdWx0PXVuZGVmaW5lZDthLmRpc3BhdGNoRXZlbnQoZSk7YS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGEpO3dpbmRvdy5vcGVuKHBvcE1hZ2ljLnVybCxcIl9zZWxmXCIpO3BvcE1hZ2ljLnNldEFzT3BlbmVkKCl9LHBvcHVwOmZ1bmN0aW9uKHRyaWdnZXJlZEV2ZW50KXtpZighcG9wTWFnaWMuc2hvdWxkU2hvdygpfHwhcG9wTWFnaWMudmVub3JTaG91bGRTaG93KCl8fCFwb3BNYWdpYy5pc1ZhbGlkVXNlckV2ZW50KHRyaWdnZXJlZEV2ZW50KSlyZXR1cm4gdHJ1ZTt2YXIgd2luT3B0aW9ucz1cIlwiO2lmKHBvcE1hZ2ljLmNvbmZpZy5wb3B1cF9mYWxsYmFjayYmIXBvcE1hZ2ljLmNvbmZpZy5wb3B1cF9mb3JjZSl7dmFyIGhlaWdodD1NYXRoLm1heChNYXRoLnJvdW5kKHdpbmRvdy5pbm5lckhlaWdodCouOCksMzAwKTt2YXIgd2lkdGg9TWF0aC5tYXgoTWF0aC5yb3VuZCh3aW5kb3cuaW5uZXJXaWR0aCouNyksMzAwKTt2YXIgdG9wPXdpbmRvdy5zY3JlZW5ZKzEwMDt2YXIgbGVmdD13aW5kb3cuc2NyZWVuWCsxMDA7d2luT3B0aW9ucz1cIm1lbnViYXI9MSxyZXNpemFibGU9MSx3aWR0aD1cIit3aWR0aCtcIixoZWlnaHQ9XCIraGVpZ2h0K1wiLHRvcD1cIit0b3ArXCIsbGVmdD1cIitsZWZ0fXZhciBwcmVQb3BVcmw9ZG9jdW1lbnQubG9jYXRpb24uaHJlZjt2YXIgcG9wV2luPXdpbmRvdy5vcGVuKHByZVBvcFVybCxwb3BNYWdpYy5nZXRQdUlkKCksd2luT3B0aW9ucyk7c2V0VGltZW91dChmdW5jdGlvbigpe3BvcFdpbi5sb2NhdGlvbi5ocmVmPXBvcE1hZ2ljLnVybH0sMjAwKTtwb3BNYWdpYy5zZXRBc09wZW5lZCgpO2lmKHR5cGVvZiB0cmlnZ2VyZWRFdmVudC5wcmV2ZW50RGVmYXVsdCE9PVwidW5kZWZpbmVkXCIpe3RyaWdnZXJlZEV2ZW50LnByZXZlbnREZWZhdWx0KCk7dHJpZ2dlcmVkRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCl9fX19OyAgICBwb3BNYWdpYy5pbml0KGFkQ29uZmlnKTtcclxufSkoKTtcclxuXHJcblxyXG48XC9zY3JpcHQ+In0seyJpZCI6ImV4b21fal9QT1BVTkRFUiIsImFkc3BvdCI6ImpfUE9QVU5ERVIiLCJ3ZWlnaHQiOiI2IiwiZmNhcCI6IjIiLCJzY2hlZHVsZSI6ZmFsc2UsIm1heFdpZHRoIjoiNzY4IiwibWluV2lkdGgiOmZhbHNlLCJ0aW1lem9uZSI6ZmFsc2UsImV4Y2x1ZGUiOmZhbHNlLCJkb21haW4iOmZhbHNlLCJjb2RlIjoiPHNjcmlwdCB0eXBlPVwiYXBwbGljYXRpb25cL2phdmFzY3JpcHRcIj5cclxuKGZ1bmN0aW9uKCkge1xyXG5cclxuICAgIFwvXC92ZXJzaW9uIDEuMC4wXHJcblxyXG4gICAgdmFyIGFkQ29uZmlnID0ge1xyXG4gICAgXCJhZHNfaG9zdFwiOiBcImEucGVtc3J2LmNvbVwiLFxyXG4gICAgXCJzeW5kaWNhdGlvbl9ob3N0XCI6IFwicy5wZW1zcnYuY29tXCIsXHJcbiAgICBcImlkem9uZVwiOiAxMTM5NzI4LFxyXG4gICAgXCJwb3B1cF9mYWxsYmFja1wiOiBmYWxzZSxcclxuICAgIFwicG9wdXBfZm9yY2VcIjogZmFsc2UsXHJcbiAgICBcImNocm9tZV9lbmFibGVkXCI6IHRydWUsXHJcbiAgICBcIm5ld190YWJcIjogZmFsc2UsXHJcbiAgICBcImZyZXF1ZW5jeV9wZXJpb2RcIjogNzIwLFxyXG4gICAgXCJmcmVxdWVuY3lfY291bnRcIjogMSxcclxuICAgIFwidHJpZ2dlcl9tZXRob2RcIjogMyxcclxuICAgIFwidHJpZ2dlcl9jbGFzc1wiOiBcIlwiLFxyXG4gICAgXCJ0cmlnZ2VyX2RlbGF5XCI6IDAsXHJcbiAgICBcIm9ubHlfaW5saW5lXCI6IGZhbHNlXHJcbn07XHJcblxyXG5pZighd2luZG93LmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwpe2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw9ZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yQWxsPU9iamVjdC5xdWVyeVNlbGVjdG9yQWxsPWZ1bmN0aW9uIHF1ZXJ5U2VsZWN0b3JBbGxQb2x5ZmlsbChyLGMsaSxqLGEpe3ZhciBkPWRvY3VtZW50LHM9ZC5jcmVhdGVTdHlsZVNoZWV0KCk7YT1kLmFsbDtjPVtdO3I9ci5yZXBsYWNlKFwvXFxbZm9yXFxiXC9naSxcIltodG1sRm9yXCIpLnNwbGl0KFwiLFwiKTtmb3IoaT1yLmxlbmd0aDtpLS07KXtzLmFkZFJ1bGUocltpXSxcIms6dlwiKTtmb3Ioaj1hLmxlbmd0aDtqLS07KXthW2pdLmN1cnJlbnRTdHlsZS5rJiZjLnB1c2goYVtqXSl9cy5yZW1vdmVSdWxlKDApfXJldHVybiBjfX12YXIgcG9wTWFnaWM9e3ZlcnNpb246MSxjb29raWVfbmFtZTpcIlwiLHVybDpcIlwiLGNvbmZpZzp7fSxvcGVuX2NvdW50OjAsdG9wOm51bGwsYnJvd3NlcjpudWxsLHZlbm9yX2xvYWRlZDpmYWxzZSx2ZW5vcjpmYWxzZSxjb25maWdUcGw6e2Fkc19ob3N0OlwiXCIsc3luZGljYXRpb25faG9zdDpcIlwiLGlkem9uZTpcIlwiLGZyZXF1ZW5jeV9wZXJpb2Q6NzIwLGZyZXF1ZW5jeV9jb3VudDoxLHRyaWdnZXJfbWV0aG9kOjEsdHJpZ2dlcl9jbGFzczpcIlwiLHBvcHVwX2ZvcmNlOmZhbHNlLHBvcHVwX2ZhbGxiYWNrOmZhbHNlLGNocm9tZV9lbmFibGVkOnRydWUsbmV3X3RhYjpmYWxzZSxjYXQ6XCJcIix0YWdzOlwiXCIsZWw6XCJcIixzdWI6XCJcIixzdWIyOlwiXCIsc3ViMzpcIlwiLG9ubHlfaW5saW5lOmZhbHNlLHRyaWdnZXJfZGVsYXk6MCxjb29raWVjb25zZW50OnRydWV9LGluaXQ6ZnVuY3Rpb24oY29uZmlnKXtpZih0eXBlb2YgY29uZmlnLmlkem9uZT09PVwidW5kZWZpbmVkXCJ8fCFjb25maWcuaWR6b25lKXtyZXR1cm59aWYodHlwZW9mIGNvbmZpZ1tcImN1c3RvbVRhcmdldGluZ1wiXT09PVwidW5kZWZpbmVkXCIpe2NvbmZpZ1tcImN1c3RvbVRhcmdldGluZ1wiXT1bXX13aW5kb3dbXCJjdXN0b21UYXJnZXRpbmdcIl09Y29uZmlnW1wiY3VzdG9tVGFyZ2V0aW5nXCJdfHxudWxsO3ZhciBjdXN0b21UYXJnZXRpbmc9T2JqZWN0LmtleXMoY29uZmlnW1wiY3VzdG9tVGFyZ2V0aW5nXCJdKS5maWx0ZXIoZnVuY3Rpb24oYyl7cmV0dXJuIGMuc2VhcmNoKFwiZXhfXCIpPj0wfSk7aWYoY3VzdG9tVGFyZ2V0aW5nLmxlbmd0aCl7Y3VzdG9tVGFyZ2V0aW5nLmZvckVhY2goZnVuY3Rpb24oY3Qpe3JldHVybiB0aGlzLmNvbmZpZ1RwbFtjdF09bnVsbH0uYmluZCh0aGlzKSl9Zm9yKHZhciBrZXkgaW4gdGhpcy5jb25maWdUcGwpe2lmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5jb25maWdUcGwsa2V5KSl7Y29udGludWV9aWYodHlwZW9mIGNvbmZpZ1trZXldIT09XCJ1bmRlZmluZWRcIil7dGhpcy5jb25maWdba2V5XT1jb25maWdba2V5XX1lbHNle3RoaXMuY29uZmlnW2tleV09dGhpcy5jb25maWdUcGxba2V5XX19aWYodHlwZW9mIHRoaXMuY29uZmlnLmlkem9uZT09PVwidW5kZWZpbmVkXCJ8fHRoaXMuY29uZmlnLmlkem9uZT09PVwiXCIpe3JldHVybn1pZih0aGlzLmNvbmZpZy5vbmx5X2lubGluZSE9PXRydWUpe3RoaXMubG9hZEhvc3RlZCgpfXRoaXMuYWRkRXZlbnRUb0VsZW1lbnQod2luZG93LFwibG9hZFwiLHRoaXMucHJlcGFyZVBvcCl9LGdldENvdW50RnJvbUNvb2tpZTpmdW5jdGlvbigpe2lmKCF0aGlzLmNvbmZpZy5jb29raWVjb25zZW50KXtyZXR1cm4gMH12YXIgc2hvd25Db29raWU9cG9wTWFnaWMuZ2V0Q29va2llKHBvcE1hZ2ljLmNvb2tpZV9uYW1lKTt2YXIgY3RyPXR5cGVvZiBzaG93bkNvb2tpZT09PVwidW5kZWZpbmVkXCI/MDpwYXJzZUludChzaG93bkNvb2tpZSk7aWYoaXNOYU4oY3RyKSl7Y3RyPTB9cmV0dXJuIGN0cn0sZ2V0TGFzdE9wZW5lZFRpbWVGcm9tQ29va2llOmZ1bmN0aW9uKCl7dmFyIHNob3duQ29va2llPXBvcE1hZ2ljLmdldENvb2tpZShwb3BNYWdpYy5jb29raWVfbmFtZSk7dmFyIGRlbGF5PW51bGw7aWYodHlwZW9mIHNob3duQ29va2llIT09XCJ1bmRlZmluZWRcIil7dmFyIHZhbHVlPXNob3duQ29va2llLnNwbGl0KFwiO1wiKVsxXTtkZWxheT12YWx1ZT4wP3BhcnNlSW50KHZhbHVlKTowfWlmKGlzTmFOKGRlbGF5KSl7ZGVsYXk9bnVsbH1yZXR1cm4gZGVsYXl9LHNob3VsZFNob3c6ZnVuY3Rpb24oKXtpZihwb3BNYWdpYy5vcGVuX2NvdW50Pj1wb3BNYWdpYy5jb25maWcuZnJlcXVlbmN5X2NvdW50KXtyZXR1cm4gZmFsc2V9dmFyIGN0cj1wb3BNYWdpYy5nZXRDb3VudEZyb21Db29raWUoKTtjb25zdCBsYXN0X29wZW5lZF90aW1lPXBvcE1hZ2ljLmdldExhc3RPcGVuZWRUaW1lRnJvbUNvb2tpZSgpO2NvbnN0IGN1cnJlbnRfdGltZT1NYXRoLmZsb29yKERhdGUubm93KClcLzFlMyk7Y29uc3QgbWF4aW11bURlbGF5VGltZT1sYXN0X29wZW5lZF90aW1lK3BvcE1hZ2ljLmNvbmZpZy50cmlnZ2VyX2RlbGF5O2lmKGxhc3Rfb3BlbmVkX3RpbWUmJm1heGltdW1EZWxheVRpbWU+Y3VycmVudF90aW1lKXtyZXR1cm4gZmFsc2V9cG9wTWFnaWMub3Blbl9jb3VudD1jdHI7cmV0dXJuIShjdHI+PXBvcE1hZ2ljLmNvbmZpZy5mcmVxdWVuY3lfY291bnQpfSx2ZW5vclNob3VsZFNob3c6ZnVuY3Rpb24oKXtyZXR1cm4gcG9wTWFnaWMudmVub3JfbG9hZGVkJiZwb3BNYWdpYy52ZW5vcj09PVwiMFwifSxzZXRBc09wZW5lZDpmdW5jdGlvbigpe3ZhciBuZXdfY3RyPTE7aWYocG9wTWFnaWMub3Blbl9jb3VudCE9PTApe25ld19jdHI9cG9wTWFnaWMub3Blbl9jb3VudCsxfWVsc2V7bmV3X2N0cj1wb3BNYWdpYy5nZXRDb3VudEZyb21Db29raWUoKSsxfWNvbnN0IGxhc3Rfb3BlbmVkX3RpbWU9TWF0aC5mbG9vcihEYXRlLm5vdygpXC8xZTMpO2lmKHBvcE1hZ2ljLmNvbmZpZy5jb29raWVjb25zZW50KXtwb3BNYWdpYy5zZXRDb29raWUocG9wTWFnaWMuY29va2llX25hbWUsYCR7bmV3X2N0cn07JHtsYXN0X29wZW5lZF90aW1lfWAscG9wTWFnaWMuY29uZmlnLmZyZXF1ZW5jeV9wZXJpb2QpfX0sbG9hZEhvc3RlZDpmdW5jdGlvbigpe3ZhciBob3N0ZWRTY3JpcHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtob3N0ZWRTY3JpcHQudHlwZT1cImFwcGxpY2F0aW9uXC9qYXZhc2NyaXB0XCI7aG9zdGVkU2NyaXB0LmFzeW5jPXRydWU7aG9zdGVkU2NyaXB0LnNyYz1cIlwvXC9cIit0aGlzLmNvbmZpZy5hZHNfaG9zdCtcIlwvcG9wdW5kZXIxMDAwLmpzXCI7aG9zdGVkU2NyaXB0LmlkPVwicG9wbWFnaWNsZHJcIjtmb3IodmFyIGtleSBpbiB0aGlzLmNvbmZpZyl7aWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmNvbmZpZyxrZXkpKXtjb250aW51ZX1pZihrZXk9PT1cImFkc19ob3N0XCJ8fGtleT09PVwic3luZGljYXRpb25faG9zdFwiKXtjb250aW51ZX1ob3N0ZWRTY3JpcHQuc2V0QXR0cmlidXRlKFwiZGF0YS1leG8tXCIra2V5LHRoaXMuY29uZmlnW2tleV0pfXZhciBpbnNlcnRBbmNob3I9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJib2R5XCIpLml0ZW0oMCk7aWYoaW5zZXJ0QW5jaG9yLmZpcnN0Q2hpbGQpe2luc2VydEFuY2hvci5pbnNlcnRCZWZvcmUoaG9zdGVkU2NyaXB0LGluc2VydEFuY2hvci5maXJzdENoaWxkKX1lbHNle2luc2VydEFuY2hvci5hcHBlbmRDaGlsZChob3N0ZWRTY3JpcHQpfX0scHJlcGFyZVBvcDpmdW5jdGlvbigpe2lmKHR5cGVvZiBleG9Kc1BvcDEwMT09PVwib2JqZWN0XCImJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleG9Kc1BvcDEwMSxcImFkZFwiKSl7cmV0dXJufXBvcE1hZ2ljLnRvcD1zZWxmO2lmKHBvcE1hZ2ljLnRvcCE9PXNlbGYpe3RyeXtpZih0b3AuZG9jdW1lbnQubG9jYXRpb24udG9TdHJpbmcoKSl7cG9wTWFnaWMudG9wPXRvcH19Y2F0Y2goZXJyKXt9fXBvcE1hZ2ljLmNvb2tpZV9uYW1lPVwiem9uZS1jYXAtXCIrcG9wTWFnaWMuY29uZmlnLmlkem9uZTtpZihwb3BNYWdpYy5zaG91bGRTaG93KCkpe3ZhciB4bWxodHRwPW5ldyBYTUxIdHRwUmVxdWVzdDt4bWxodHRwLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKHhtbGh0dHAucmVhZHlTdGF0ZT09WE1MSHR0cFJlcXVlc3QuRE9ORSl7cG9wTWFnaWMudmVub3JfbG9hZGVkPXRydWU7aWYoeG1saHR0cC5zdGF0dXM9PTIwMCl7cG9wTWFnaWMudmVub3I9eG1saHR0cC5yZXNwb25zZVRleHR9ZWxzZXtwb3BNYWdpYy52ZW5vcj1cIjBcIn19fTt2YXIgcHJvdG9jb2w9ZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2whPT1cImh0dHBzOlwiJiZkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCE9PVwiaHR0cDpcIj9cImh0dHBzOlwiOmRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sO3htbGh0dHAub3BlbihcIkdFVFwiLHByb3RvY29sK1wiXC9cL1wiK3BvcE1hZ2ljLmNvbmZpZy5zeW5kaWNhdGlvbl9ob3N0K1wiXC92ZW5vci5waHBcIix0cnVlKTt0cnl7eG1saHR0cC5zZW5kKCl9Y2F0Y2goZXJyb3Ipe3BvcE1hZ2ljLnZlbm9yX2xvYWRlZD10cnVlfX1wb3BNYWdpYy5idWlsZFVybCgpO3BvcE1hZ2ljLmJyb3dzZXI9cG9wTWFnaWMuYnJvd3NlckRldGVjdG9yLmRldGVjdEJyb3dzZXIobmF2aWdhdG9yLnVzZXJBZ2VudCk7aWYoIXBvcE1hZ2ljLmNvbmZpZy5jaHJvbWVfZW5hYmxlZCYmKHBvcE1hZ2ljLmJyb3dzZXIubmFtZT09PVwiY2hyb21lXCJ8fHBvcE1hZ2ljLmJyb3dzZXIubmFtZT09PVwiY3Jpb3NcIikpe3JldHVybn12YXIgcG9wTWV0aG9kPXBvcE1hZ2ljLmdldFBvcE1ldGhvZChwb3BNYWdpYy5icm93c2VyKTtwb3BNYWdpYy5hZGRFdmVudChcImNsaWNrXCIscG9wTWV0aG9kKX0sZ2V0UG9wTWV0aG9kOmZ1bmN0aW9uKGJyb3dzZXJJbmZvKXtpZihwb3BNYWdpYy5jb25maWcucG9wdXBfZm9yY2Upe3JldHVybiBwb3BNYWdpYy5tZXRob2RzLnBvcHVwfWlmKHBvcE1hZ2ljLmNvbmZpZy5wb3B1cF9mYWxsYmFjayYmYnJvd3NlckluZm8ubmFtZT09PVwiY2hyb21lXCImJmJyb3dzZXJJbmZvLnZlcnNpb24+PTY4JiYhYnJvd3NlckluZm8uaXNNb2JpbGUpe3JldHVybiBwb3BNYWdpYy5tZXRob2RzLnBvcHVwfWlmKGJyb3dzZXJJbmZvLmlzTW9iaWxlKXtyZXR1cm4gcG9wTWFnaWMubWV0aG9kcy5kZWZhdWx0fWlmKGJyb3dzZXJJbmZvLm5hbWU9PT1cImNocm9tZVwiKXtyZXR1cm4gcG9wTWFnaWMubWV0aG9kcy5jaHJvbWVUYWJ9cmV0dXJuIHBvcE1hZ2ljLm1ldGhvZHMuZGVmYXVsdH0sYnVpbGRVcmw6ZnVuY3Rpb24oKXt2YXIgcHJvdG9jb2w9ZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2whPT1cImh0dHBzOlwiJiZkb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCE9PVwiaHR0cDpcIj9cImh0dHBzOlwiOmRvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sO3ZhciBwPXRvcD09PXNlbGY/ZG9jdW1lbnQuVVJMOmRvY3VtZW50LnJlZmVycmVyO3ZhciBzY3JpcHRfaW5mbz17dHlwZTpcImlubGluZVwiLG5hbWU6XCJwb3BNYWdpY1wiLHZlcjp0aGlzLnZlcnNpb259O3ZhciBlbmNvZGVTY3JpcHRJbmZvPWZ1bmN0aW9uKHNjcmlwdF9pbmZvKXt2YXIgcmVzdWx0PXNjcmlwdF9pbmZvW1widHlwZVwiXStcInxcIitzY3JpcHRfaW5mb1tcIm5hbWVcIl0rXCJ8XCIrc2NyaXB0X2luZm9bXCJ2ZXJcIl07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChidG9hKHJlc3VsdCkpfTt2YXIgY3VzdG9tVGFyZ2V0aW5nUGFyYW1zPVwiXCI7aWYoY3VzdG9tVGFyZ2V0aW5nJiZPYmplY3Qua2V5cyhjdXN0b21UYXJnZXRpbmcpLmxlbmd0aCl7dmFyIGN1c3RvbVRhcmdldGluZ0tleXM9dHlwZW9mIGN1c3RvbVRhcmdldGluZz09PVwib2JqZWN0XCI/T2JqZWN0LmtleXMoY3VzdG9tVGFyZ2V0aW5nKTpjdXN0b21UYXJnZXRpbmc7dmFyIHZhbHVlO2N1c3RvbVRhcmdldGluZ0tleXMuZm9yRWFjaChmdW5jdGlvbihrZXkpe2lmKHR5cGVvZiBjdXN0b21UYXJnZXRpbmc9PT1cIm9iamVjdFwiKXt2YWx1ZT1jdXN0b21UYXJnZXRpbmdba2V5XX1lbHNlIGlmKEFycmF5LmlzQXJyYXkoY3VzdG9tVGFyZ2V0aW5nKSl7dmFsdWU9c2NyaXB0RWwuZ2V0QXR0cmlidXRlKGtleSl9dmFyIGtleVdpdGhvdXRFeG9QcmVmaXg9a2V5LnJlcGxhY2UoXCJkYXRhLWV4by1cIixcIlwiKTtjdXN0b21UYXJnZXRpbmdQYXJhbXMrPWAmJHtrZXlXaXRob3V0RXhvUHJlZml4fT0ke3ZhbHVlfWB9KX10aGlzLnVybD1wcm90b2NvbCtcIlwvXC9cIit0aGlzLmNvbmZpZy5zeW5kaWNhdGlvbl9ob3N0K1wiXC9zcGxhc2gucGhwXCIrXCI/Y2F0PVwiK3RoaXMuY29uZmlnLmNhdCtcIiZpZHpvbmU9XCIrdGhpcy5jb25maWcuaWR6b25lK1wiJnR5cGU9OFwiK1wiJnA9XCIrZW5jb2RlVVJJQ29tcG9uZW50KHApK1wiJnN1Yj1cIit0aGlzLmNvbmZpZy5zdWIrKHRoaXMuY29uZmlnLnN1YjIhPT1cIlwiP1wiJnN1YjI9XCIrdGhpcy5jb25maWcuc3ViMjpcIlwiKSsodGhpcy5jb25maWcuc3ViMyE9PVwiXCI/XCImc3ViMz1cIit0aGlzLmNvbmZpZy5zdWIzOlwiXCIpK1wiJmJsb2NrPTFcIitcIiZlbD1cIit0aGlzLmNvbmZpZy5lbCtcIiZ0YWdzPVwiK3RoaXMuY29uZmlnLnRhZ3MrXCImY29va2llY29uc2VudD1cIit0aGlzLmNvbmZpZy5jb29raWVjb25zZW50K1wiJnNjcl9pbmZvPVwiK2VuY29kZVNjcmlwdEluZm8oc2NyaXB0X2luZm8pK2N1c3RvbVRhcmdldGluZ1BhcmFtc30sYWRkRXZlbnRUb0VsZW1lbnQ6ZnVuY3Rpb24ob2JqLHR5cGUsZm4pe2lmKG9iai5hZGRFdmVudExpc3RlbmVyKXtvYmouYWRkRXZlbnRMaXN0ZW5lcih0eXBlLGZuLGZhbHNlKX1lbHNlIGlmKG9iai5hdHRhY2hFdmVudCl7b2JqW1wiZVwiK3R5cGUrZm5dPWZuO29ialt0eXBlK2ZuXT1mdW5jdGlvbigpe29ialtcImVcIit0eXBlK2ZuXSh3aW5kb3cuZXZlbnQpfTtvYmouYXR0YWNoRXZlbnQoXCJvblwiK3R5cGUsb2JqW3R5cGUrZm5dKX1lbHNle29ialtcIm9uXCIrdHlwZV09b2JqW1wiZVwiK3R5cGUrZm5dfX0sYWRkRXZlbnQ6ZnVuY3Rpb24odHlwZSxmbil7dmFyIHRhcmdldEVsZW1lbnRzO2lmKHBvcE1hZ2ljLmNvbmZpZy50cmlnZ2VyX21ldGhvZD09XCIzXCIpe3RhcmdldEVsZW1lbnRzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJhXCIpO2ZvcihpPTA7aTx0YXJnZXRFbGVtZW50cy5sZW5ndGg7aSsrKXtwb3BNYWdpYy5hZGRFdmVudFRvRWxlbWVudCh0YXJnZXRFbGVtZW50c1tpXSx0eXBlLGZuKX1yZXR1cm59aWYocG9wTWFnaWMuY29uZmlnLnRyaWdnZXJfbWV0aG9kPT1cIjJcIiYmcG9wTWFnaWMuY29uZmlnLnRyaWdnZXJfbWV0aG9kIT1cIlwiKXt2YXIgdHJpZ2dlcl9jbGFzc2VzO3ZhciB0cmlnZ2VyX2NsYXNzZXNfZmluYWw9W107aWYocG9wTWFnaWMuY29uZmlnLnRyaWdnZXJfY2xhc3MuaW5kZXhPZihcIixcIik9PT0tMSl7dHJpZ2dlcl9jbGFzc2VzPXBvcE1hZ2ljLmNvbmZpZy50cmlnZ2VyX2NsYXNzLnNwbGl0KFwiIFwiKX1lbHNle3ZhciB0cmltbWVkX3RyaWdnZXJfY2xhc3Nlcz1wb3BNYWdpYy5jb25maWcudHJpZ2dlcl9jbGFzcy5yZXBsYWNlKFwvXFxzXC9nLFwiXCIpO3RyaWdnZXJfY2xhc3Nlcz10cmltbWVkX3RyaWdnZXJfY2xhc3Nlcy5zcGxpdChcIixcIil9Zm9yKHZhciBpPTA7aTx0cmlnZ2VyX2NsYXNzZXMubGVuZ3RoO2krKyl7aWYodHJpZ2dlcl9jbGFzc2VzW2ldIT09XCJcIil7dHJpZ2dlcl9jbGFzc2VzX2ZpbmFsLnB1c2goXCIuXCIrdHJpZ2dlcl9jbGFzc2VzW2ldKX19dGFyZ2V0RWxlbWVudHM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCh0cmlnZ2VyX2NsYXNzZXNfZmluYWwuam9pbihcIiwgXCIpKTtmb3IoaT0wO2k8dGFyZ2V0RWxlbWVudHMubGVuZ3RoO2krKyl7cG9wTWFnaWMuYWRkRXZlbnRUb0VsZW1lbnQodGFyZ2V0RWxlbWVudHNbaV0sdHlwZSxmbil9cmV0dXJufXBvcE1hZ2ljLmFkZEV2ZW50VG9FbGVtZW50KGRvY3VtZW50LHR5cGUsZm4pfSxzZXRDb29raWU6ZnVuY3Rpb24obmFtZSx2YWx1ZSx0dGxfbWludXRlcyl7aWYoIXRoaXMuY29uZmlnLmNvb2tpZWNvbnNlbnQpe3JldHVybiBmYWxzZX10dGxfbWludXRlcz1wYXJzZUludCh0dGxfbWludXRlcywxMCk7dmFyIG5vd19kYXRlPW5ldyBEYXRlO25vd19kYXRlLnNldE1pbnV0ZXMobm93X2RhdGUuZ2V0TWludXRlcygpK3BhcnNlSW50KHR0bF9taW51dGVzKSk7dmFyIGNfdmFsdWU9ZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKStcIjsgZXhwaXJlcz1cIitub3dfZGF0ZS50b1VUQ1N0cmluZygpK1wiOyBwYXRoPVwvXCI7ZG9jdW1lbnQuY29va2llPW5hbWUrXCI9XCIrY192YWx1ZX0sZ2V0Q29va2llOmZ1bmN0aW9uKG5hbWUpe2lmKCF0aGlzLmNvbmZpZy5jb29raWVjb25zZW50KXtyZXR1cm4gZmFsc2V9dmFyIGkseCx5LGNvb2tpZXNBcnJheT1kb2N1bWVudC5jb29raWUuc3BsaXQoXCI7XCIpO2ZvcihpPTA7aTxjb29raWVzQXJyYXkubGVuZ3RoO2krKyl7eD1jb29raWVzQXJyYXlbaV0uc3Vic3RyKDAsY29va2llc0FycmF5W2ldLmluZGV4T2YoXCI9XCIpKTt5PWNvb2tpZXNBcnJheVtpXS5zdWJzdHIoY29va2llc0FycmF5W2ldLmluZGV4T2YoXCI9XCIpKzEpO3g9eC5yZXBsYWNlKFwvXlxccyt8XFxzKyRcL2csXCJcIik7aWYoeD09PW5hbWUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoeSl9fX0scmFuZFN0cjpmdW5jdGlvbihsZW5ndGgscG9zc2libGVDaGFycyl7dmFyIHRleHQ9XCJcIjt2YXIgcG9zc2libGU9cG9zc2libGVDaGFyc3x8XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OVwiO2Zvcih2YXIgaT0wO2k8bGVuZ3RoO2krKyl7dGV4dCs9cG9zc2libGUuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpwb3NzaWJsZS5sZW5ndGgpKX1yZXR1cm4gdGV4dH0saXNWYWxpZFVzZXJFdmVudDpmdW5jdGlvbihldmVudCl7aWYoXCJpc1RydXN0ZWRcImluIGV2ZW50JiZldmVudC5pc1RydXN0ZWQmJnBvcE1hZ2ljLmJyb3dzZXIubmFtZSE9PVwiaWVcIiYmcG9wTWFnaWMuYnJvd3Nlci5uYW1lIT09XCJzYWZhcmlcIil7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZXZlbnQuc2NyZWVuWCE9MCYmZXZlbnQuc2NyZWVuWSE9MH19LGlzVmFsaWRIcmVmOmZ1bmN0aW9uKGhyZWYpe2lmKHR5cGVvZiBocmVmPT09XCJ1bmRlZmluZWRcInx8aHJlZj09XCJcIil7cmV0dXJuIGZhbHNlfXZhciBlbXB0eV9yZWY9XC9cXHM/amF2YXNjcmlwdFxccz86XC9pO3JldHVybiFlbXB0eV9yZWYudGVzdChocmVmKX0sZmluZExpbmtUb09wZW46ZnVuY3Rpb24oY2xpY2tlZEVsZW1lbnQpe3ZhciB0YXJnZXQ9Y2xpY2tlZEVsZW1lbnQ7dmFyIGxvY2F0aW9uPWZhbHNlO3RyeXt2YXIgYnJlYWtDdHI9MDt3aGlsZShicmVha0N0cjwyMCYmIXRhcmdldC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpJiZ0YXJnZXQhPT1kb2N1bWVudCYmdGFyZ2V0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkhPT1cImh0bWxcIil7dGFyZ2V0PXRhcmdldC5wYXJlbnROb2RlO2JyZWFrQ3RyKyt9dmFyIGVsZW1lbnRUYXJnZXRBdHRyPXRhcmdldC5nZXRBdHRyaWJ1dGUoXCJ0YXJnZXRcIik7aWYoIWVsZW1lbnRUYXJnZXRBdHRyfHxlbGVtZW50VGFyZ2V0QXR0ci5pbmRleE9mKFwiX2JsYW5rXCIpPT09LTEpe2xvY2F0aW9uPXRhcmdldC5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpfX1jYXRjaChlcnIpe31pZighcG9wTWFnaWMuaXNWYWxpZEhyZWYobG9jYXRpb24pKXtsb2NhdGlvbj1mYWxzZX1yZXR1cm4gbG9jYXRpb258fHdpbmRvdy5sb2NhdGlvbi5ocmVmfSxnZXRQdUlkOmZ1bmN0aW9uKCl7cmV0dXJuXCJva19cIitNYXRoLmZsb29yKDg5OTk5OTk5Kk1hdGgucmFuZG9tKCkrMWU3KX0sYnJvd3NlckRldGVjdG9yOnticm93c2VyRGVmaW5pdGlvbnM6W1tcImZpcmVmb3hcIixcL0ZpcmVmb3hcXFwvKFswLTkuXSspKD86XFxzfCQpXC9dLFtcIm9wZXJhXCIsXC9PcGVyYVxcXC8oWzAtOS5dKykoPzpcXHN8JClcL10sW1wib3BlcmFcIixcL09QUlxcXC8oWzAtOS5dKykoOj9cXHN8JCkkXC9dLFtcImVkZ2VcIixcL0VkZyg/OmV8KVxcXC8oWzAtOS5fXSspXC9dLFtcImllXCIsXC9UcmlkZW50XFxcLzdcXC4wLipydjooWzAtOS5dKylcXCkuKkdlY2tvJFwvXSxbXCJpZVwiLFwvTVNJRVxccyhbMC05Ll0rKTsuKlRyaWRlbnRcXFwvWzQtN10uMFwvXSxbXCJpZVwiLFwvTVNJRVxccyg3XFwuMClcL10sW1wic2FmYXJpXCIsXC9WZXJzaW9uXFxcLyhbMC05Ll9dKykuKlNhZmFyaVwvXSxbXCJjaHJvbWVcIixcLyg/IUNocm9tLipFZGcoPzplfCkpQ2hyb20oPzplfGl1bSlcXFwvKFswLTkuXSspKDo/XFxzfCQpXC9dLFtcImNocm9tZVwiLFwvKD8hQ2hyb20uKk9QUilDaHJvbSg/OmV8aXVtKVxcXC8oWzAtOS5dKykoOj9cXHN8JClcL10sW1wiYmIxMFwiLFwvQkIxMDtcXHNUb3VjaC4qVmVyc2lvblxcXC8oWzAtOS5dKylcL10sW1wiYW5kcm9pZFwiLFwvQW5kcm9pZFxccyhbMC05Ll0rKVwvXSxbXCJpb3NcIixcL1ZlcnNpb25cXFwvKFswLTkuX10rKS4qTW9iaWxlLipTYWZhcmkuKlwvXSxbXCJ5YW5kZXhicm93c2VyXCIsXC9ZYUJyb3dzZXJcXFwvKFswLTkuX10rKVwvXSxbXCJjcmlvc1wiLFwvQ3JpT1NcXFwvKFswLTkuXSspKDo/XFxzfCQpXC9dXSxkZXRlY3RCcm93c2VyOmZ1bmN0aW9uKHVzZXJBZ2VudCl7dmFyIGlzTW9iaWxlPXVzZXJBZ2VudC5tYXRjaChcL0FuZHJvaWR8QmxhY2tCZXJyeXxpUGhvbmV8aVBhZHxpUG9kfE9wZXJhIE1pbml8SUVNb2JpbGV8V2ViT1N8V2luZG93cyBQaG9uZVwvaSk7Zm9yKHZhciBpIGluIHRoaXMuYnJvd3NlckRlZmluaXRpb25zKXt2YXIgZGVmaW5pdGlvbj10aGlzLmJyb3dzZXJEZWZpbml0aW9uc1tpXTtpZihkZWZpbml0aW9uWzFdLnRlc3QodXNlckFnZW50KSl7dmFyIG1hdGNoPWRlZmluaXRpb25bMV0uZXhlYyh1c2VyQWdlbnQpO3ZhciB2ZXJzaW9uPW1hdGNoJiZtYXRjaFsxXS5zcGxpdChcL1suX11cLykuc2xpY2UoMCwzKTt2YXIgdmVyc2lvblRhaWxzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHZlcnNpb24sMSkuam9pbihcIlwiKXx8XCIwXCI7aWYodmVyc2lvbiYmdmVyc2lvbi5sZW5ndGg8Myl7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodmVyc2lvbix2ZXJzaW9uLmxlbmd0aD09PTE/WzAsMF06WzBdKX1yZXR1cm57bmFtZTpkZWZpbml0aW9uWzBdLHZlcnNpb246dmVyc2lvbi5qb2luKFwiLlwiKSx2ZXJzaW9uTnVtYmVyOnBhcnNlRmxvYXQodmVyc2lvblswXStcIi5cIit2ZXJzaW9uVGFpbHMpLGlzTW9iaWxlOmlzTW9iaWxlfX19cmV0dXJue25hbWU6XCJvdGhlclwiLHZlcnNpb246XCIxLjBcIix2ZXJzaW9uTnVtYmVyOjEsaXNNb2JpbGU6aXNNb2JpbGV9fX0sbWV0aG9kczp7ZGVmYXVsdDpmdW5jdGlvbih0cmlnZ2VyZWRFdmVudCl7aWYoIXBvcE1hZ2ljLnNob3VsZFNob3coKXx8IXBvcE1hZ2ljLnZlbm9yU2hvdWxkU2hvdygpfHwhcG9wTWFnaWMuaXNWYWxpZFVzZXJFdmVudCh0cmlnZ2VyZWRFdmVudCkpcmV0dXJuIHRydWU7dmFyIGNsaWNrZWRFbGVtZW50PXRyaWdnZXJlZEV2ZW50LnRhcmdldHx8dHJpZ2dlcmVkRXZlbnQuc3JjRWxlbWVudDt2YXIgaHJlZj1wb3BNYWdpYy5maW5kTGlua1RvT3BlbihjbGlja2VkRWxlbWVudCk7d2luZG93Lm9wZW4oaHJlZixcIl9ibGFua1wiKTtwb3BNYWdpYy5zZXRBc09wZW5lZCgpO3BvcE1hZ2ljLnRvcC5kb2N1bWVudC5sb2NhdGlvbj1wb3BNYWdpYy51cmw7aWYodHlwZW9mIHRyaWdnZXJlZEV2ZW50LnByZXZlbnREZWZhdWx0IT09XCJ1bmRlZmluZWRcIil7dHJpZ2dlcmVkRXZlbnQucHJldmVudERlZmF1bHQoKTt0cmlnZ2VyZWRFdmVudC5zdG9wUHJvcGFnYXRpb24oKX1yZXR1cm4gdHJ1ZX0sY2hyb21lVGFiOmZ1bmN0aW9uKGV2ZW50KXtpZighcG9wTWFnaWMuc2hvdWxkU2hvdygpfHwhcG9wTWFnaWMudmVub3JTaG91bGRTaG93KCl8fCFwb3BNYWdpYy5pc1ZhbGlkVXNlckV2ZW50KGV2ZW50KSlyZXR1cm4gdHJ1ZTtpZih0eXBlb2YgZXZlbnQucHJldmVudERlZmF1bHQhPT1cInVuZGVmaW5lZFwiKXtldmVudC5wcmV2ZW50RGVmYXVsdCgpO2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpfWVsc2V7cmV0dXJuIHRydWV9dmFyIGE9dG9wLndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTt2YXIgdGFyZ2V0PWV2ZW50LnRhcmdldHx8ZXZlbnQuc3JjRWxlbWVudDthLmhyZWY9cG9wTWFnaWMuZmluZExpbmtUb09wZW4odGFyZ2V0KTtkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIilbMF0uYXBwZW5kQ2hpbGQoYSk7dmFyIGU9bmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiLHtidWJibGVzOnRydWUsY2FuY2VsYWJsZTp0cnVlLHZpZXc6d2luZG93LHNjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDowLGNsaWVudFk6MCxjdHJsS2V5OnRydWUsYWx0S2V5OmZhbHNlLHNoaWZ0S2V5OmZhbHNlLG1ldGFLZXk6dHJ1ZSxidXR0b246MH0pO2UucHJldmVudERlZmF1bHQ9dW5kZWZpbmVkO2EuZGlzcGF0Y2hFdmVudChlKTthLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSk7d2luZG93Lm9wZW4ocG9wTWFnaWMudXJsLFwiX3NlbGZcIik7cG9wTWFnaWMuc2V0QXNPcGVuZWQoKX0scG9wdXA6ZnVuY3Rpb24odHJpZ2dlcmVkRXZlbnQpe2lmKCFwb3BNYWdpYy5zaG91bGRTaG93KCl8fCFwb3BNYWdpYy52ZW5vclNob3VsZFNob3coKXx8IXBvcE1hZ2ljLmlzVmFsaWRVc2VyRXZlbnQodHJpZ2dlcmVkRXZlbnQpKXJldHVybiB0cnVlO3ZhciB3aW5PcHRpb25zPVwiXCI7aWYocG9wTWFnaWMuY29uZmlnLnBvcHVwX2ZhbGxiYWNrJiYhcG9wTWFnaWMuY29uZmlnLnBvcHVwX2ZvcmNlKXt2YXIgaGVpZ2h0PU1hdGgubWF4KE1hdGgucm91bmQod2luZG93LmlubmVySGVpZ2h0Ki44KSwzMDApO3ZhciB3aWR0aD1NYXRoLm1heChNYXRoLnJvdW5kKHdpbmRvdy5pbm5lcldpZHRoKi43KSwzMDApO3ZhciB0b3A9d2luZG93LnNjcmVlblkrMTAwO3ZhciBsZWZ0PXdpbmRvdy5zY3JlZW5YKzEwMDt3aW5PcHRpb25zPVwibWVudWJhcj0xLHJlc2l6YWJsZT0xLHdpZHRoPVwiK3dpZHRoK1wiLGhlaWdodD1cIitoZWlnaHQrXCIsdG9wPVwiK3RvcCtcIixsZWZ0PVwiK2xlZnR9dmFyIHByZVBvcFVybD1kb2N1bWVudC5sb2NhdGlvbi5ocmVmO3ZhciBwb3BXaW49d2luZG93Lm9wZW4ocHJlUG9wVXJsLHBvcE1hZ2ljLmdldFB1SWQoKSx3aW5PcHRpb25zKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cG9wV2luLmxvY2F0aW9uLmhyZWY9cG9wTWFnaWMudXJsfSwyMDApO3BvcE1hZ2ljLnNldEFzT3BlbmVkKCk7aWYodHlwZW9mIHRyaWdnZXJlZEV2ZW50LnByZXZlbnREZWZhdWx0IT09XCJ1bmRlZmluZWRcIil7dHJpZ2dlcmVkRXZlbnQucHJldmVudERlZmF1bHQoKTt0cmlnZ2VyZWRFdmVudC5zdG9wUHJvcGFnYXRpb24oKX19fX07ICAgIHBvcE1hZ2ljLmluaXQoYWRDb25maWcpO1xyXG59KSgpO1xyXG5cclxuXHJcbjxcL3NjcmlwdD4ifV0=