diff --git a/CHANGELOG.md b/CHANGELOG.md index d49c0ac..b522840 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ### Added - The autosuggest dropdown now shows a preview of the resolved date/time next to each suggestion (e.g. `Next Monday` — `2025-01-06`), so you can see what will actually be inserted before picking one. +- **Korean support** (partial): `오늘`/`내일`/`어제`, weekdays, `이번`/`다음`/`지난` prefixes, and suffix-style relative expressions (`3일 후`, `2주 전`). Vocabulary based on [CreamNuts' nldates-obsidian-korean](https://github.com/CreamNuts/nldates-obsidian-korean) (MIT), with thanks. Like the other partially-supported languages, chrono-node has no Korean parser to fall back on, so some combined phrasings (weekday + specific time, date ranges) aren't recognized yet — tracked in [#40](https://github.com/Amato21/nldates-revived/issues/40). ## [0.9.71] - 2026-07-17 diff --git a/README.md b/README.md index 7a1572e..a5ea30e 100644 --- a/README.md +++ b/README.md @@ -21,10 +21,13 @@ Enable any combination in **Settings → Natural Language Dates → Language set | German | Partially supported | | Portuguese | Partially supported | | Japanese | Full support | +| Korean | Partially supported | | Dutch | Under development | You can enable several languages at once — the autosuggest and parser understand all of them simultaneously. +Korean support (`오늘`, `내일`, `다음 주 월요일`, `3일 후`...) reuses vocabulary from [CreamNuts' nldates-obsidian-korean](https://github.com/CreamNuts/nldates-obsidian-korean) — many thanks for that work. As with the other "partially supported" languages, chrono-node has no Korean parser to fall back on, so some combined phrasings (e.g. a weekday together with a specific time, or date ranges) aren't recognized yet ([#40](https://github.com/Amato21/nldates-revived/issues/40)). + --- ## How to Install @@ -131,6 +134,7 @@ This project stands on the shoulders of giants. Huge thanks to: * **[Argentina Ortega Sainz (argenos)](https://github.com/argenos):** The original creator of this plugin. This revival is based on their excellent work. * **[RensOliemans](https://github.com/RensOliemans):** For the major contributions and foundational work on the multilingual support. +* **[CreamNuts](https://github.com/CreamNuts):** For [nldates-obsidian-korean](https://github.com/CreamNuts/nldates-obsidian-korean), whose vocabulary this plugin's Korean support is built on. * **Amato21:** Maintainer of this "Revived" version. Powered by the [chrono-node](https://github.com/wanasit/chrono) library. diff --git a/main.js b/main.js index 9da739b..92fc087 100644 --- a/main.js +++ b/main.js @@ -1056,7 +1056,7 @@ var i18n$1 = {exports: {}}; var i18n = i18n$1.exports; -const dict$a = { +const dict$b = { today: "Today", tomorrow: "Tomorrow", yesterday: "Yesterday", @@ -1101,7 +1101,7 @@ const dict$a = { first: "first", }; -const dict$9 = { +const dict$a = { today: "今日", tomorrow: "明日", yesterday: "昨日", @@ -1146,7 +1146,7 @@ const dict$9 = { to: "まで|までに", }; -const dict$8 = { +const dict$9 = { today: "Aujourd'hui", tomorrow: "Demain", yesterday: "Hier", @@ -1191,7 +1191,7 @@ const dict$8 = { first: "premier|première", }; -const dict$7 = { +const dict$8 = { today: "Hoje", tomorrow: "Amanhã", yesterday: "Ontem", @@ -1237,7 +1237,7 @@ const dict$7 = { first: "primeiro|primeira", }; -const dict$6 = { +const dict$7 = { today: "Heute", tomorrow: "Morgen", yesterday: "Gestern", @@ -1282,7 +1282,7 @@ const dict$6 = { first: "erster|erste|erstes", }; -const dict$5 = { +const dict$6 = { today: "Vandaag", tomorrow: "Morgen", yesterday: "Gisteren", @@ -1327,7 +1327,7 @@ const dict$5 = { first: "eerste", }; -const dict$4 = { +const dict$5 = { today: "Hoy", tomorrow: "Mañana", yesterday: "Ayer", @@ -1373,7 +1373,7 @@ const dict$4 = { first: "primer|primera", }; -const dict$3 = { +const dict$4 = { today: "Oggi", tomorrow: "Domani", yesterday: "Ieri", @@ -1418,7 +1418,7 @@ const dict$3 = { first: "primo|prima", }; -const dict$2 = { +const dict$3 = { today: "Сегодня", tomorrow: "Завтра", yesterday: "Вчера", @@ -1463,7 +1463,7 @@ const dict$2 = { first: "первый|первая|первое|первые", }; -const dict$1 = { +const dict$2 = { today: "Сьогодні", tomorrow: "Завтра", yesterday: "Вчора", @@ -1508,7 +1508,7 @@ const dict$1 = { first: "перший|перша|перше|перші", }; -const dict = { +const dict$1 = { today: "今天", tomorrow: "明天", yesterday: "昨天", @@ -1567,23 +1567,97 @@ const dict = { first: "第一|第一個|第一个", }; +// Korean support. Vocabulary for today/tomorrow/yesterday, weekdays, +// this/next/last, the hour/minute/day/week/month/year units, and the +// "later"/"agosuffix" relative-expression markers is taken directly from +// CreamNuts' translateKoreanToEnglish() dictionary +// (https://github.com/CreamNuts/nldates-obsidian-korean, MIT), since it's +// vocabulary a real Korean-speaking user base has already been using. +// +// Korean phrases numbers in a suffix position (number + unit + marker, e.g. +// "3일 후" = "3 days" + "후" ("later") = "in 3 days"), not English's prefix +// "in 3 days" -- so inminutes/indays/etc. and daysago/weeksago/etc. below are +// built suffix-style, the same mechanism already used for Chinese (see +// zh.ts's "later"/"agosuffix" comments), rather than mirroring the English +// template literally. +// +// UNVERIFIED: "and"/"at"/"from"/"to"/"of" below don't have an equivalent in +// CreamNuts' file (his translator doesn't support combined durations, +// weekday+time, or date ranges) and are my own best-effort picks, not +// checked by a Korean speaker. Korean normally attaches particles like 에 +// ("at")/부터("from")/까지("to")/의("of") directly to the previous word with +// no space, while this plugin's regex patterns require them as a +// space-separated standalone word -- so "next Monday at 3pm"-, "from Monday +// to Friday"-, "in 2 weeks and 3 days"-, and "the 15th of next month"-style +// combined expressions may not match natural Korean phrasing even though the +// simple expressions above do. Tracked in #40. +const dict = { + today: "오늘", + tomorrow: "내일", + yesterday: "어제", + next: "다음", + last: "지난", + this: "이번", + in: "앞으로", + sunday: "일요일", + monday: "월요일", + tuesday: "화요일", + wednesday: "수요일", + thursday: "목요일", + friday: "금요일", + saturday: "토요일", + inminutes: "%{timeDelta}분 후", + inhours: "%{timeDelta}시간 후", + indays: "%{timeDelta}일 후", + inweeks: "%{timeDelta}주 후", + inmonths: "%{timeDelta}개월 후", + daysago: "%{timeDelta}일 전", + weeksago: "%{timeDelta}주 전", + monthsago: "%{timeDelta}개월 전", + minutesago: "%{timeDelta}분 전", + hoursago: "%{timeDelta}시간 전", + // Suffix markers for "N unit" + marker (e.g. "3일 후" = "in 3 days", + // "2주 전" = "2 weeks ago") -- verified against CreamNuts' handleNativeDateExpressions()/processNumberPattern(). + later: "후|뒤", + agosuffix: "전", + time: "시간", + now: "지금", + plusminutes: "+%{timeDelta}분", + minusminutes: "-%{timeDelta}분", + plushour: "+%{timeDelta}시간", + minushour: "-%{timeDelta}시간", + minute: "분", + hour: "시간", + day: "일", + week: "주", + month: "개월|달", + year: "년", + and: "그리고", + at: "에", + from: "부터", + to: "까지", + of: "의", + first: "첫", +}; + const notFoundDefault = "NOTFOUND"; // Cache des traducteurs pour éviter de les recréer à chaque appel // Performance optimization: translators are created once and reused const translatorCache = {}; // Map des modules de langue pour faciliter l'accès const languageModules = { - en: dict$a, - ja: dict$9, - fr: dict$8, - pt: dict$7, - de: dict$6, - nl: dict$5, - es: dict$4, - it: dict$3, - ru: dict$2, - uk: dict$1, - 'zh.hant': dict, + en: dict$b, + ja: dict$a, + fr: dict$9, + pt: dict$8, + de: dict$7, + nl: dict$6, + es: dict$5, + it: dict$4, + ru: dict$3, + uk: dict$2, + 'zh.hant': dict$1, + ko: dict, }; /** * Obtient un traducteur pour une langue donnée (avec cache) @@ -1602,7 +1676,7 @@ function getTranslator(lang) { else { // Fallback vers l'anglais si la langue n'est pas trouvée if (!translatorCache['en']) { - translatorCache['en'] = i18n.create({ values: dict$a }); + translatorCache['en'] = i18n.create({ values: dict$b }); } return translatorCache['en']; } @@ -2128,6 +2202,7 @@ const DEFAULT_SETTINGS = { russian: false, ukrainian: false, chinese: false, + korean: false, modalToggleTime: false, modalToggleLink: false, modalMomentFormat: "YYYY-MM-DD HH:mm", @@ -2216,6 +2291,7 @@ class NLDSettingsTab extends require$$0.PluginSettingTab { this.createLanguageSetting(containerEl, "Russian", "russian", "ru"); this.createLanguageSetting(containerEl, "Ukrainian", "ukrainian", "uk"); this.createLanguageSetting(containerEl, "Chinese (Traditional)", "chinese", "zh.hant", "partially supported"); + this.createLanguageSetting(containerEl, "Korean", "korean", "ko", "partially supported"); new require$$0.Setting(containerEl).setHeading().setName("Hotkey formatting settings"); const timeFormatSetting = new require$$0.Setting(containerEl) .setName("Time format") @@ -17507,4 +17583,4 @@ class NaturalLanguageDates extends require$$0.Plugin { } module.exports = NaturalLanguageDates; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL29ic2lkaWFuLWRhaWx5LW5vdGVzLWludGVyZmFjZS9kaXN0L21haW4uanMiLCJzcmMvd2luZG93LW1vbWVudC50cyIsInNyYy9kYXRlLWZvcm1hdHRlci50cyIsIm5vZGVfbW9kdWxlcy9yb2RkZWgtaTE4bi9kaXN0L2kxOG4uanMiLCJzcmMvbGFuZy9lbi50cyIsInNyYy9sYW5nL2phLnRzIiwic3JjL2xhbmcvZnIudHMiLCJzcmMvbGFuZy9wdC50cyIsInNyYy9sYW5nL2RlLnRzIiwic3JjL2xhbmcvbmwudHMiLCJzcmMvbGFuZy9lcy50cyIsInNyYy9sYW5nL2l0LnRzIiwic3JjL2xhbmcvcnUudHMiLCJzcmMvbGFuZy91ay50cyIsInNyYy9sYW5nL3poLnRzIiwic3JjL2xhbmcvaGVscGVyLnRzIiwic3JjL3RyYW5zbGF0aW9uLWNvbGxlY3Rvci50cyIsInNyYy91dGlscy50cyIsInNyYy9tb2RhbHMvaGlzdG9yeS1tYW5hZ2VyLW1vZGFsLnRzIiwic3JjL3NldHRpbmdzLnRzIiwic3JjL21vZGFscy9kYXRlLXBpY2tlci50cyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS90eXBlcy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS91dGlscy9kYXRlcy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS90aW1lem9uZS5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9yZXN1bHRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3V0aWxzL3BhdHRlcm4uanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY2FsY3VsYXRpb24veWVhcnMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOTW9udGhOYW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTlllYXJNb250aERheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9yZWZpbmVycy9FTk1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jYWxjdWxhdGlvbi9tZXJnaW5nQ2FsY3VsYXRpb24uanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9yZWZpbmVycy9FTk1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVBYmJyUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcmVmaW5lcnMvRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcmVmaW5lcnMvT3ZlcmxhcFJlbW92YWxSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9Gb3J3YXJkRGF0ZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3JlZmluZXJzL1VubGlrZWx5Rm9ybWF0RmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9wYXJzZXJzL0lTT0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcmVmaW5lcnMvTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb25maWd1cmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5DYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTkNhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5SZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVBZnRlckRhdGVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcmVmaW5lcnMvRU5NZXJnZVJlbGF0aXZlRm9sbG93QnlEYXRlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VORXh0cmFjdFllYXJTdWZmaXhSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcmVmaW5lcnMvRU5Vbmxpa2VseUZvcm1hdEZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL2NvbmZpZ3VyYXRpb24uanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY2hyb25vLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9wYXJzZXJzL0RFVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9wYXJzZXJzL0RFV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcmVmaW5lcnMvREVNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9yZWZpbmVycy9ERU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERUNhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9wYXJzZXJzL0RFQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9wYXJzZXJzL0RFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcGFyc2Vycy9GUkNhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3BhcnNlcnMvRlJUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3JlZmluZXJzL0ZSTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9yZWZpbmVycy9GUk1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3BhcnNlcnMvRlJXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcGFyc2Vycy9GUlNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcGFyc2Vycy9GUlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcGFyc2Vycy9GUlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcGFyc2Vycy9GUlRpbWVVbml0UmVsYXRpdmVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3BhcnNlcnMvSlBTdGFuZGFyZFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3JlZmluZXJzL0pQTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcGFyc2Vycy9KUENhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9wYXJzZXJzL0pQV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3BhcnNlcnMvSlBTbGFzaERhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9wYXJzZXJzL0pQVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9yZWZpbmVycy9KUE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcmVmaW5lcnMvSlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcGFyc2Vycy9KUFdlZWtkYXlXaXRoUGFyZW50aGVzZXNQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3B0L2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3B0L3BhcnNlcnMvUFRXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcGFyc2Vycy9QVFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcmVmaW5lcnMvUFRNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3B0L3JlZmluZXJzL1BUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcGFyc2Vycy9QVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3B0L3BhcnNlcnMvUFRDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcGFyc2Vycy9QVENhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3JlZmluZXJzL05MTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcmVmaW5lcnMvTkxNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTENhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MTW9udGhOYW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTFNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTENhc3VhbERhdGVUaW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTFRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTFRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTFRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFucy9wYXJzZXJzL1pISGFuc0RhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zRGVhZGxpbmVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zUmVsYXRpb25XZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFucy9wYXJzZXJzL1pISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFucy9wYXJzZXJzL1pISGFuc1dlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50Q2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFudC9wYXJzZXJzL1pISGFudERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50RGVhZGxpbmVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50UmVsYXRpb25XZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFudC9wYXJzZXJzL1pISGFudFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFudC9wYXJzZXJzL1pISGFudFdlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3JlZmluZXJzL1pISGFudE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFucy9wYXJzZXJzL1pISGFuc0Nhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3JlZmluZXJzL1pISGFuc01lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcmVmaW5lcnMvWkhIYW5zTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcGFyc2Vycy9SVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVNb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9yZWZpbmVycy9SVU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3JlZmluZXJzL1JVTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVDYXN1YWxUaW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcGFyc2Vycy9SVVdlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcGFyc2Vycy9SVVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VzL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VzL3BhcnNlcnMvRVNXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcGFyc2Vycy9FU1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcmVmaW5lcnMvRVNNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VzL3JlZmluZXJzL0VTTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcGFyc2Vycy9FU01vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VzL3BhcnNlcnMvRVNDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcGFyc2Vycy9FU0Nhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9wYXJzZXJzL1VLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS01vbnRoTmFtZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3JlZmluZXJzL1VLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcmVmaW5lcnMvVUtNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS0Nhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9wYXJzZXJzL1VLV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9wYXJzZXJzL1VLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUTW9udGhOYW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVENhc3VhbFllYXJNb250aERheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRTbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVFRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVFRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9yZWZpbmVycy9JVE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3JlZmluZXJzL0lUTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRDYXN1YWxUaW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVFdlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVFRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9yZWZpbmVycy9JVE1lcmdlUmVsYXRpdmVEYXRlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvc3YvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvc3YvcGFyc2Vycy9TVldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9wYXJzZXJzL1NWTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvc3YvcGFyc2Vycy9TVlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9wYXJzZXJzL1NWQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3N2L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZmkvcGFyc2Vycy9GSVRpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZmkvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZmkvcGFyc2Vycy9GSVdlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZmkvcGFyc2Vycy9GSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZmkvcmVmaW5lcnMvRklNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9yZWZpbmVycy9GSU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZmkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJU3RhbmRhcmRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJTW9udGhZZWFyUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSVllYXJQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklDYXN1YWxUaW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSVdlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcmVmaW5lcnMvVklNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9yZWZpbmVycy9WSU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcmVmaW5lcnMvVklNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vaW5kZXguanMiLCJzcmMvbG9nZ2VyLnRzIiwic3JjL2Nocm9uby50cyIsInNyYy90aW1lLWRldGVjdG9yLnRzIiwic3JjL2xydS1jYWNoZS50cyIsInNyYy9wYXJzZXIudHMiLCJzcmMvc3VnZ2VzdC9kYXRlLXN1Z2dlc3QudHMiLCJzcmMvY29tbWFuZHMudHMiLCJzcmMvaGlzdG9yeS1tYW5hZ2VyLnRzIiwic3JjL2NvbnRleHQtYW5hbHl6ZXIudHMiLCJzcmMvZXJyb3JzLnRzIiwic3JjL21haW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG52YXIgb2JzaWRpYW4gPSByZXF1aXJlKCdvYnNpZGlhbicpO1xuXG5jb25zdCBERUZBVUxUX0RBSUxZX05PVEVfRk9STUFUID0gXCJZWVlZLU1NLUREXCI7XG5jb25zdCBERUZBVUxUX1dFRUtMWV9OT1RFX0ZPUk1BVCA9IFwiZ2dnZy1bV113d1wiO1xuY29uc3QgREVGQVVMVF9NT05USExZX05PVEVfRk9STUFUID0gXCJZWVlZLU1NXCI7XG5jb25zdCBERUZBVUxUX1FVQVJURVJMWV9OT1RFX0ZPUk1BVCA9IFwiWVlZWS1bUV1RXCI7XG5jb25zdCBERUZBVUxUX1lFQVJMWV9OT1RFX0ZPUk1BVCA9IFwiWVlZWVwiO1xuXG5mdW5jdGlvbiBzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MocGVyaW9kaWNpdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IHBlcmlvZGljTm90ZXMgPSB3aW5kb3cuYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik7XG4gICAgcmV0dXJuIHBlcmlvZGljTm90ZXMgJiYgcGVyaW9kaWNOb3Rlcy5zZXR0aW5ncz8uW3BlcmlvZGljaXR5XT8uZW5hYmxlZDtcbn1cbi8qKlxuICogUmVhZCB0aGUgdXNlciBzZXR0aW5ncyBmb3IgdGhlIGBkYWlseS1ub3Rlc2AgcGx1Z2luXG4gKiB0byBrZWVwIGJlaGF2aW9yIG9mIGNyZWF0aW5nIGEgbmV3IG5vdGUgaW4tc3luYy5cbiAqL1xuZnVuY3Rpb24gZ2V0RGFpbHlOb3RlU2V0dGluZ3MoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgeyBpbnRlcm5hbFBsdWdpbnMsIHBsdWdpbnMgfSA9IHdpbmRvdy5hcHA7XG4gICAgICAgIGlmIChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJkYWlseVwiKSkge1xuICAgICAgICAgICAgY29uc3QgeyBmb3JtYXQsIGZvbGRlciwgdGVtcGxhdGUgfSA9IHBsdWdpbnMuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik/LnNldHRpbmdzPy5kYWlseSB8fCB7fTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBmb3JtYXQgfHwgREVGQVVMVF9EQUlMWV9OT1RFX0ZPUk1BVCxcbiAgICAgICAgICAgICAgICBmb2xkZXI6IGZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBmb2xkZXIsIGZvcm1hdCwgdGVtcGxhdGUgfSA9IGludGVybmFsUGx1Z2lucy5nZXRQbHVnaW5CeUlkKFwiZGFpbHktbm90ZXNcIik/Lmluc3RhbmNlPy5vcHRpb25zIHx8IHt9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9ybWF0OiBmb3JtYXQgfHwgREVGQVVMVF9EQUlMWV9OT1RFX0ZPUk1BVCxcbiAgICAgICAgICAgIGZvbGRlcjogZm9sZGVyPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZT8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKFwiTm8gY3VzdG9tIGRhaWx5IG5vdGUgc2V0dGluZ3MgZm91bmQhXCIsIGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYHdlZWtseS1ub3Rlc2AgcGx1Z2luXG4gKiB0byBrZWVwIGJlaGF2aW9yIG9mIGNyZWF0aW5nIGEgbmV3IG5vdGUgaW4tc3luYy5cbiAqL1xuZnVuY3Rpb24gZ2V0V2Vla2x5Tm90ZVNldHRpbmdzKCkge1xuICAgIHRyeSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGNvbnN0IHBsdWdpbk1hbmFnZXIgPSB3aW5kb3cuYXBwLnBsdWdpbnM7XG4gICAgICAgIGNvbnN0IGNhbGVuZGFyU2V0dGluZ3MgPSBwbHVnaW5NYW5hZ2VyLmdldFBsdWdpbihcImNhbGVuZGFyXCIpPy5vcHRpb25zO1xuICAgICAgICBjb25zdCBwZXJpb2RpY05vdGVzU2V0dGluZ3MgPSBwbHVnaW5NYW5hZ2VyLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpPy5zZXR0aW5ncz8ud2Vla2x5O1xuICAgICAgICBpZiAoc2hvdWxkVXNlUGVyaW9kaWNOb3Rlc1NldHRpbmdzKFwid2Vla2x5XCIpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogcGVyaW9kaWNOb3Rlc1NldHRpbmdzLmZvcm1hdCB8fCBERUZBVUxUX1dFRUtMWV9OT1RFX0ZPUk1BVCxcbiAgICAgICAgICAgICAgICBmb2xkZXI6IHBlcmlvZGljTm90ZXNTZXR0aW5ncy5mb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBwZXJpb2RpY05vdGVzU2V0dGluZ3MudGVtcGxhdGU/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IGNhbGVuZGFyU2V0dGluZ3MgfHwge307XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmb3JtYXQ6IHNldHRpbmdzLndlZWtseU5vdGVGb3JtYXQgfHwgREVGQVVMVF9XRUVLTFlfTk9URV9GT1JNQVQsXG4gICAgICAgICAgICBmb2xkZXI6IHNldHRpbmdzLndlZWtseU5vdGVGb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHNldHRpbmdzLndlZWtseU5vdGVUZW1wbGF0ZT8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKFwiTm8gY3VzdG9tIHdlZWtseSBub3RlIHNldHRpbmdzIGZvdW5kIVwiLCBlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogUmVhZCB0aGUgdXNlciBzZXR0aW5ncyBmb3IgdGhlIGBwZXJpb2RpYy1ub3Rlc2AgcGx1Z2luXG4gKiB0byBrZWVwIGJlaGF2aW9yIG9mIGNyZWF0aW5nIGEgbmV3IG5vdGUgaW4tc3luYy5cbiAqL1xuZnVuY3Rpb24gZ2V0TW9udGhseU5vdGVTZXR0aW5ncygpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IHBsdWdpbk1hbmFnZXIgPSB3aW5kb3cuYXBwLnBsdWdpbnM7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSAoc2hvdWxkVXNlUGVyaW9kaWNOb3Rlc1NldHRpbmdzKFwibW9udGhseVwiKSAmJlxuICAgICAgICAgICAgcGx1Z2luTWFuYWdlci5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKT8uc2V0dGluZ3M/Lm1vbnRobHkpIHx8XG4gICAgICAgICAgICB7fTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1hdDogc2V0dGluZ3MuZm9ybWF0IHx8IERFRkFVTFRfTU9OVEhMWV9OT1RFX0ZPUk1BVCxcbiAgICAgICAgICAgIGZvbGRlcjogc2V0dGluZ3MuZm9sZGVyPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgICAgIHRlbXBsYXRlOiBzZXR0aW5ncy50ZW1wbGF0ZT8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKFwiTm8gY3VzdG9tIG1vbnRobHkgbm90ZSBzZXR0aW5ncyBmb3VuZCFcIiwgZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIFJlYWQgdGhlIHVzZXIgc2V0dGluZ3MgZm9yIHRoZSBgcGVyaW9kaWMtbm90ZXNgIHBsdWdpblxuICogdG8ga2VlcCBiZWhhdmlvciBvZiBjcmVhdGluZyBhIG5ldyBub3RlIGluLXN5bmMuXG4gKi9cbmZ1bmN0aW9uIGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncygpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IHBsdWdpbk1hbmFnZXIgPSB3aW5kb3cuYXBwLnBsdWdpbnM7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSAoc2hvdWxkVXNlUGVyaW9kaWNOb3Rlc1NldHRpbmdzKFwicXVhcnRlcmx5XCIpICYmXG4gICAgICAgICAgICBwbHVnaW5NYW5hZ2VyLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpPy5zZXR0aW5ncz8ucXVhcnRlcmx5KSB8fFxuICAgICAgICAgICAge307XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmb3JtYXQ6IHNldHRpbmdzLmZvcm1hdCB8fCBERUZBVUxUX1FVQVJURVJMWV9OT1RFX0ZPUk1BVCxcbiAgICAgICAgICAgIGZvbGRlcjogc2V0dGluZ3MuZm9sZGVyPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgICAgIHRlbXBsYXRlOiBzZXR0aW5ncy50ZW1wbGF0ZT8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKFwiTm8gY3VzdG9tIHF1YXJ0ZXJseSBub3RlIHNldHRpbmdzIGZvdW5kIVwiLCBlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogUmVhZCB0aGUgdXNlciBzZXR0aW5ncyBmb3IgdGhlIGBwZXJpb2RpYy1ub3Rlc2AgcGx1Z2luXG4gKiB0byBrZWVwIGJlaGF2aW9yIG9mIGNyZWF0aW5nIGEgbmV3IG5vdGUgaW4tc3luYy5cbiAqL1xuZnVuY3Rpb24gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJ5ZWFybHlcIikgJiZcbiAgICAgICAgICAgIHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik/LnNldHRpbmdzPy55ZWFybHkpIHx8XG4gICAgICAgICAgICB7fTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1hdDogc2V0dGluZ3MuZm9ybWF0IHx8IERFRkFVTFRfWUVBUkxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBzZXR0aW5ncy5mb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHNldHRpbmdzLnRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20geWVhcmx5IG5vdGUgc2V0dGluZ3MgZm91bmQhXCIsIGVycik7XG4gICAgfVxufVxuXG4vLyBDcmVkaXQ6IEBjcmVhdGlvbml4L3BhdGguanNcbmZ1bmN0aW9uIGpvaW4oLi4ucGFydFNlZ21lbnRzKSB7XG4gICAgLy8gU3BsaXQgdGhlIGlucHV0cyBpbnRvIGEgbGlzdCBvZiBwYXRoIGNvbW1hbmRzLlxuICAgIGxldCBwYXJ0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gcGFydFNlZ21lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdChwYXJ0U2VnbWVudHNbaV0uc3BsaXQoXCIvXCIpKTtcbiAgICB9XG4gICAgLy8gSW50ZXJwcmV0IHRoZSBwYXRoIGNvbW1hbmRzIHRvIGdldCB0aGUgbmV3IHJlc29sdmVkIHBhdGguXG4gICAgY29uc3QgbmV3UGFydHMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb25zdCBwYXJ0ID0gcGFydHNbaV07XG4gICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzXG4gICAgICAgIC8vIEFsc28gcmVtb3ZlIFwiLlwiIHNlZ21lbnRzXG4gICAgICAgIGlmICghcGFydCB8fCBwYXJ0ID09PSBcIi5cIilcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAvLyBQdXNoIG5ldyBwYXRoIHNlZ21lbnRzLlxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBuZXdQYXJ0cy5wdXNoKHBhcnQpO1xuICAgIH1cbiAgICAvLyBQcmVzZXJ2ZSB0aGUgaW5pdGlhbCBzbGFzaCBpZiB0aGVyZSB3YXMgb25lLlxuICAgIGlmIChwYXJ0c1swXSA9PT0gXCJcIilcbiAgICAgICAgbmV3UGFydHMudW5zaGlmdChcIlwiKTtcbiAgICAvLyBUdXJuIGJhY2sgaW50byBhIHNpbmdsZSBzdHJpbmcgcGF0aC5cbiAgICByZXR1cm4gbmV3UGFydHMuam9pbihcIi9cIik7XG59XG5mdW5jdGlvbiBiYXNlbmFtZShmdWxsUGF0aCkge1xuICAgIGxldCBiYXNlID0gZnVsbFBhdGguc3Vic3RyaW5nKGZ1bGxQYXRoLmxhc3RJbmRleE9mKFwiL1wiKSArIDEpO1xuICAgIGlmIChiYXNlLmxhc3RJbmRleE9mKFwiLlwiKSAhPSAtMSlcbiAgICAgICAgYmFzZSA9IGJhc2Uuc3Vic3RyaW5nKDAsIGJhc2UubGFzdEluZGV4T2YoXCIuXCIpKTtcbiAgICByZXR1cm4gYmFzZTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUZvbGRlckV4aXN0cyhwYXRoKSB7XG4gICAgY29uc3QgZGlycyA9IHBhdGgucmVwbGFjZSgvXFxcXC9nLCBcIi9cIikuc3BsaXQoXCIvXCIpO1xuICAgIGRpcnMucG9wKCk7IC8vIHJlbW92ZSBiYXNlbmFtZVxuICAgIGlmIChkaXJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBkaXIgPSBqb2luKC4uLmRpcnMpO1xuICAgICAgICBpZiAoIXdpbmRvdy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGRpcikpIHtcbiAgICAgICAgICAgIGF3YWl0IHdpbmRvdy5hcHAudmF1bHQuY3JlYXRlRm9sZGVyKGRpcik7XG4gICAgICAgIH1cbiAgICB9XG59XG5hc3luYyBmdW5jdGlvbiBnZXROb3RlUGF0aChkaXJlY3RvcnksIGZpbGVuYW1lKSB7XG4gICAgaWYgKCFmaWxlbmFtZS5lbmRzV2l0aChcIi5tZFwiKSkge1xuICAgICAgICBmaWxlbmFtZSArPSBcIi5tZFwiO1xuICAgIH1cbiAgICBjb25zdCBwYXRoID0gb2JzaWRpYW4ubm9ybWFsaXplUGF0aChqb2luKGRpcmVjdG9yeSwgZmlsZW5hbWUpKTtcbiAgICBhd2FpdCBlbnN1cmVGb2xkZXJFeGlzdHMocGF0aCk7XG4gICAgcmV0dXJuIHBhdGg7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRUZW1wbGF0ZUluZm8odGVtcGxhdGUpIHtcbiAgICBjb25zdCB7IG1ldGFkYXRhQ2FjaGUsIHZhdWx0IH0gPSB3aW5kb3cuYXBwO1xuICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IG9ic2lkaWFuLm5vcm1hbGl6ZVBhdGgodGVtcGxhdGUpO1xuICAgIGlmICh0ZW1wbGF0ZVBhdGggPT09IFwiL1wiKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1wiXCIsIG51bGxdKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVGaWxlID0gbWV0YWRhdGFDYWNoZS5nZXRGaXJzdExpbmtwYXRoRGVzdCh0ZW1wbGF0ZVBhdGgsIFwiXCIpO1xuICAgICAgICBjb25zdCBjb250ZW50cyA9IGF3YWl0IHZhdWx0LmNhY2hlZFJlYWQodGVtcGxhdGVGaWxlKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgSUZvbGRJbmZvID0gd2luZG93LmFwcC5mb2xkTWFuYWdlci5sb2FkKHRlbXBsYXRlRmlsZSk7XG4gICAgICAgIHJldHVybiBbY29udGVudHMsIElGb2xkSW5mb107XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHJlYWQgdGhlIGRhaWx5IG5vdGUgdGVtcGxhdGUgJyR7dGVtcGxhdGVQYXRofSdgLCBlcnIpO1xuICAgICAgICBuZXcgb2JzaWRpYW4uTm90aWNlKFwiRmFpbGVkIHRvIHJlYWQgdGhlIGRhaWx5IG5vdGUgdGVtcGxhdGVcIik7XG4gICAgICAgIHJldHVybiBbXCJcIiwgbnVsbF07XG4gICAgfVxufVxuXG4vKipcbiAqIGRhdGVVSUQgaXMgYSB3YXkgb2Ygd2Vla2x5IGlkZW50aWZ5aW5nIGRhaWx5L3dlZWtseS9tb250aGx5IG5vdGVzLlxuICogVGhleSBhcmUgcHJlZml4ZWQgd2l0aCB0aGUgZ3JhbnVsYXJpdHkgdG8gYXZvaWQgYW1iaWd1aXR5LlxuICovXG5mdW5jdGlvbiBnZXREYXRlVUlEKGRhdGUsIGdyYW51bGFyaXR5ID0gXCJkYXlcIikge1xuICAgIGNvbnN0IHRzID0gZGF0ZS5jbG9uZSgpLnN0YXJ0T2YoZ3JhbnVsYXJpdHkpLmZvcm1hdCgpO1xuICAgIHJldHVybiBgJHtncmFudWxhcml0eX0tJHt0c31gO1xufVxuZnVuY3Rpb24gcmVtb3ZlRXNjYXBlZENoYXJhY3RlcnMoZm9ybWF0KSB7XG4gICAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKC9cXFtbXlxcXV0qXFxdL2csIFwiXCIpOyAvLyByZW1vdmUgZXZlcnl0aGluZyB3aXRoaW4gYnJhY2tldHNcbn1cbi8qKlxuICogWFhYOiBXaGVuIHBhcnNpbmcgZGF0ZXMgdGhhdCBjb250YWluIGJvdGggd2VlayBudW1iZXJzIGFuZCBtb250aHMsXG4gKiBNb21lbnQgY2hvc2VzIHRvIGlnbm9yZSB0aGUgd2VlayBudW1iZXJzLiBGb3IgdGhlIHdlZWsgZGF0ZVVJRCwgd2VcbiAqIHdhbnQgdGhlIG9wcG9zaXRlIGJlaGF2aW9yLiBTdHJpcCB0aGUgTU1NIGZyb20gdGhlIGZvcm1hdCB0byBwYXRjaC5cbiAqL1xuZnVuY3Rpb24gaXNGb3JtYXRBbWJpZ3VvdXMoZm9ybWF0LCBncmFudWxhcml0eSkge1xuICAgIGlmIChncmFudWxhcml0eSA9PT0gXCJ3ZWVrXCIpIHtcbiAgICAgICAgY29uc3QgY2xlYW5Gb3JtYXQgPSByZW1vdmVFc2NhcGVkQ2hhcmFjdGVycyhmb3JtYXQpO1xuICAgICAgICByZXR1cm4gKC93ezEsMn0vaS50ZXN0KGNsZWFuRm9ybWF0KSAmJlxuICAgICAgICAgICAgKC9NezEsNH0vLnRlc3QoY2xlYW5Gb3JtYXQpIHx8IC9EezEsNH0vLnRlc3QoY2xlYW5Gb3JtYXQpKSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdldERhdGVGcm9tRmlsZShmaWxlLCBncmFudWxhcml0eSkge1xuICAgIHJldHVybiBnZXREYXRlRnJvbUZpbGVuYW1lKGZpbGUuYmFzZW5hbWUsIGdyYW51bGFyaXR5KTtcbn1cbmZ1bmN0aW9uIGdldERhdGVGcm9tUGF0aChwYXRoLCBncmFudWxhcml0eSkge1xuICAgIHJldHVybiBnZXREYXRlRnJvbUZpbGVuYW1lKGJhc2VuYW1lKHBhdGgpLCBncmFudWxhcml0eSk7XG59XG5mdW5jdGlvbiBnZXREYXRlRnJvbUZpbGVuYW1lKGZpbGVuYW1lLCBncmFudWxhcml0eSkge1xuICAgIGNvbnN0IGdldFNldHRpbmdzID0ge1xuICAgICAgICBkYXk6IGdldERhaWx5Tm90ZVNldHRpbmdzLFxuICAgICAgICB3ZWVrOiBnZXRXZWVrbHlOb3RlU2V0dGluZ3MsXG4gICAgICAgIG1vbnRoOiBnZXRNb250aGx5Tm90ZVNldHRpbmdzLFxuICAgICAgICBxdWFydGVyOiBnZXRRdWFydGVybHlOb3RlU2V0dGluZ3MsXG4gICAgICAgIHllYXI6IGdldFllYXJseU5vdGVTZXR0aW5ncyxcbiAgICB9O1xuICAgIGNvbnN0IGZvcm1hdCA9IGdldFNldHRpbmdzW2dyYW51bGFyaXR5XSgpLmZvcm1hdC5zcGxpdChcIi9cIikucG9wKCk7XG4gICAgY29uc3Qgbm90ZURhdGUgPSB3aW5kb3cubW9tZW50KGZpbGVuYW1lLCBmb3JtYXQsIHRydWUpO1xuICAgIGlmICghbm90ZURhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoaXNGb3JtYXRBbWJpZ3VvdXMoZm9ybWF0LCBncmFudWxhcml0eSkpIHtcbiAgICAgICAgaWYgKGdyYW51bGFyaXR5ID09PSBcIndlZWtcIikge1xuICAgICAgICAgICAgY29uc3QgY2xlYW5Gb3JtYXQgPSByZW1vdmVFc2NhcGVkQ2hhcmFjdGVycyhmb3JtYXQpO1xuICAgICAgICAgICAgaWYgKC93ezEsMn0vaS50ZXN0KGNsZWFuRm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cubW9tZW50KGZpbGVuYW1lLCBcbiAgICAgICAgICAgICAgICAvLyBJZiBmb3JtYXQgY29udGFpbnMgd2VlaywgcmVtb3ZlIGRheSAmIG1vbnRoIGZvcm1hdHRpbmdcbiAgICAgICAgICAgICAgICBmb3JtYXQucmVwbGFjZSgvTXsxLDR9L2csIFwiXCIpLnJlcGxhY2UoL0R7MSw0fS9nLCBcIlwiKSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBub3RlRGF0ZTtcbn1cblxuY2xhc3MgRGFpbHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBkYWlseS1ub3RlcyBwbHVnaW5cbiAqIHNvIGl0IHdpbGwgcmVwbGFjZSB7e2RhdGV9fSwge3t0aXRsZX19LCBhbmQge3t0aW1lfX0gd2l0aCB0aGVcbiAqIGZvcm1hdHRlZCB0aW1lc3RhbXAuXG4gKlxuICogTm90ZTogaXQgaGFzIGFuIGFkZGVkIGJvbnVzIHRoYXQgaXQncyBub3QgJ3RvZGF5JyBzcGVjaWZpYy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlRGFpbHlOb3RlKGRhdGUpIHtcbiAgICBjb25zdCBhcHAgPSB3aW5kb3cuYXBwO1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IGFwcDtcbiAgICBjb25zdCBtb21lbnQgPSB3aW5kb3cubW9tZW50O1xuICAgIGNvbnN0IHsgdGVtcGxhdGUsIGZvcm1hdCwgZm9sZGVyIH0gPSBnZXREYWlseU5vdGVTZXR0aW5ncygpO1xuICAgIGNvbnN0IFt0ZW1wbGF0ZUNvbnRlbnRzLCBJRm9sZEluZm9dID0gYXdhaXQgZ2V0VGVtcGxhdGVJbmZvKHRlbXBsYXRlKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGRhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBhd2FpdCBnZXROb3RlUGF0aChmb2xkZXIsIGZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBjcmVhdGVkRmlsZSA9IGF3YWl0IHZhdWx0LmNyZWF0ZShub3JtYWxpemVkUGF0aCwgdGVtcGxhdGVDb250ZW50c1xuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKmRhdGVcXHMqfX0vZ2ksIGZpbGVuYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpbWVcXHMqfX0vZ2ksIG1vbWVudCgpLmZvcm1hdChcIkhIOm1tXCIpKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpdGxlXFxzKn19L2dpLCBmaWxlbmFtZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyooZGF0ZXx0aW1lKVxccyooKFsrLV1cXGQrKShbeXFtd2Roc10pKT9cXHMqKDouKz8pP319L2dpLCAoXywgX3RpbWVPckRhdGUsIGNhbGMsIHRpbWVEZWx0YSwgdW5pdCwgbW9tZW50Rm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSBtb21lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gZGF0ZS5jbG9uZSgpLnNldCh7XG4gICAgICAgICAgICAgICAgaG91cjogbm93LmdldChcImhvdXJcIiksXG4gICAgICAgICAgICAgICAgbWludXRlOiBub3cuZ2V0KFwibWludXRlXCIpLFxuICAgICAgICAgICAgICAgIHNlY29uZDogbm93LmdldChcInNlY29uZFwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNhbGMpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5hZGQocGFyc2VJbnQodGltZURlbHRhLCAxMCksIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1vbWVudEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQobW9tZW50Rm9ybWF0LnN1YnN0cmluZygxKS50cmltKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnllc3RlcmRheVxccyp9fS9naSwgZGF0ZS5jbG9uZSgpLnN1YnRyYWN0KDEsIFwiZGF5XCIpLmZvcm1hdChmb3JtYXQpKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRvbW9ycm93XFxzKn19L2dpLCBkYXRlLmNsb25lKCkuYWRkKDEsIFwiZFwiKS5mb3JtYXQoZm9ybWF0KSkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBhcHAuZm9sZE1hbmFnZXIuc2F2ZShjcmVhdGVkRmlsZSwgSUZvbGRJbmZvKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRGaWxlO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgZmlsZTogJyR7bm9ybWFsaXplZFBhdGh9J2AsIGVycik7XG4gICAgICAgIG5ldyBvYnNpZGlhbi5Ob3RpY2UoXCJVbmFibGUgdG8gY3JlYXRlIG5ldyBmaWxlLlwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXREYWlseU5vdGUoZGF0ZSwgZGFpbHlOb3Rlcykge1xuICAgIHJldHVybiBkYWlseU5vdGVzW2dldERhdGVVSUQoZGF0ZSwgXCJkYXlcIildID8/IG51bGw7XG59XG5mdW5jdGlvbiBnZXRBbGxEYWlseU5vdGVzKCkge1xuICAgIC8qKlxuICAgICAqIEZpbmQgYWxsIGRhaWx5IG5vdGVzIGluIHRoZSBkYWlseSBub3RlIGZvbGRlclxuICAgICAqL1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyBmb2xkZXIgfSA9IGdldERhaWx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgZGFpbHlOb3Rlc0ZvbGRlciA9IHZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChvYnNpZGlhbi5ub3JtYWxpemVQYXRoKGZvbGRlcikpO1xuICAgIGlmICghZGFpbHlOb3Rlc0ZvbGRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRGFpbHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvcihcIkZhaWxlZCB0byBmaW5kIGRhaWx5IG5vdGVzIGZvbGRlclwiKTtcbiAgICB9XG4gICAgY29uc3QgZGFpbHlOb3RlcyA9IHt9O1xuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbihkYWlseU5vdGVzRm9sZGVyLCAobm90ZSkgPT4ge1xuICAgICAgICBpZiAobm90ZSBpbnN0YW5jZW9mIG9ic2lkaWFuLlRGaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gZ2V0RGF0ZUZyb21GaWxlKG5vdGUsIFwiZGF5XCIpO1xuICAgICAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gZ2V0RGF0ZVVJRChkYXRlLCBcImRheVwiKTtcbiAgICAgICAgICAgICAgICBkYWlseU5vdGVzW2RhdGVTdHJpbmddID0gbm90ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkYWlseU5vdGVzO1xufVxuXG5jbGFzcyBXZWVrbHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cbmZ1bmN0aW9uIGdldERheXNPZldlZWsoKSB7XG4gICAgY29uc3QgeyBtb21lbnQgfSA9IHdpbmRvdztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGxldCB3ZWVrU3RhcnQgPSBtb21lbnQubG9jYWxlRGF0YSgpLl93ZWVrLmRvdztcbiAgICBjb25zdCBkYXlzT2ZXZWVrID0gW1xuICAgICAgICBcInN1bmRheVwiLFxuICAgICAgICBcIm1vbmRheVwiLFxuICAgICAgICBcInR1ZXNkYXlcIixcbiAgICAgICAgXCJ3ZWRuZXNkYXlcIixcbiAgICAgICAgXCJ0aHVyc2RheVwiLFxuICAgICAgICBcImZyaWRheVwiLFxuICAgICAgICBcInNhdHVyZGF5XCIsXG4gICAgXTtcbiAgICB3aGlsZSAod2Vla1N0YXJ0KSB7XG4gICAgICAgIGRheXNPZldlZWsucHVzaChkYXlzT2ZXZWVrLnNoaWZ0KCkpO1xuICAgICAgICB3ZWVrU3RhcnQtLTtcbiAgICB9XG4gICAgcmV0dXJuIGRheXNPZldlZWs7XG59XG5mdW5jdGlvbiBnZXREYXlPZldlZWtOdW1lcmljYWxWYWx1ZShkYXlPZldlZWtOYW1lKSB7XG4gICAgcmV0dXJuIGdldERheXNPZldlZWsoKS5pbmRleE9mKGRheU9mV2Vla05hbWUudG9Mb3dlckNhc2UoKSk7XG59XG5hc3luYyBmdW5jdGlvbiBjcmVhdGVXZWVrbHlOb3RlKGRhdGUpIHtcbiAgICBjb25zdCB7IHZhdWx0IH0gPSB3aW5kb3cuYXBwO1xuICAgIGNvbnN0IHsgdGVtcGxhdGUsIGZvcm1hdCwgZm9sZGVyIH0gPSBnZXRXZWVrbHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBbdGVtcGxhdGVDb250ZW50cywgSUZvbGRJbmZvXSA9IGF3YWl0IGdldFRlbXBsYXRlSW5mbyh0ZW1wbGF0ZSk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBkYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gYXdhaXQgZ2V0Tm90ZVBhdGgoZm9sZGVyLCBmaWxlbmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY3JlYXRlZEZpbGUgPSBhd2FpdCB2YXVsdC5jcmVhdGUobm9ybWFsaXplZFBhdGgsIHRlbXBsYXRlQ29udGVudHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyooZGF0ZXx0aW1lKVxccyooKFsrLV1cXGQrKShbeXFtd2Roc10pKT9cXHMqKDouKz8pP319L2dpLCAoXywgX3RpbWVPckRhdGUsIGNhbGMsIHRpbWVEZWx0YSwgdW5pdCwgbW9tZW50Rm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSB3aW5kb3cubW9tZW50KCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IGRhdGUuY2xvbmUoKS5zZXQoe1xuICAgICAgICAgICAgICAgIGhvdXI6IG5vdy5nZXQoXCJob3VyXCIpLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogbm93LmdldChcIm1pbnV0ZVwiKSxcbiAgICAgICAgICAgICAgICBzZWNvbmQ6IG5vdy5nZXQoXCJzZWNvbmRcIiksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjYWxjKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudERhdGUuYWRkKHBhcnNlSW50KHRpbWVEZWx0YSwgMTApLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtb21lbnRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KG1vbWVudEZvcm1hdC5zdWJzdHJpbmcoMSkudHJpbSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aXRsZVxccyp9fS9naSwgZmlsZW5hbWUpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGltZVxccyp9fS9naSwgd2luZG93Lm1vbWVudCgpLmZvcm1hdChcIkhIOm1tXCIpKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihzdW5kYXl8bW9uZGF5fHR1ZXNkYXl8d2VkbmVzZGF5fHRodXJzZGF5fGZyaWRheXxzYXR1cmRheSlcXHMqOiguKj8pfX0vZ2ksIChfLCBkYXlPZldlZWssIG1vbWVudEZvcm1hdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF5ID0gZ2V0RGF5T2ZXZWVrTnVtZXJpY2FsVmFsdWUoZGF5T2ZXZWVrKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRlLndlZWtkYXkoZGF5KS5mb3JtYXQobW9tZW50Rm9ybWF0LnRyaW0oKSk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgd2luZG93LmFwcC5mb2xkTWFuYWdlci5zYXZlKGNyZWF0ZWRGaWxlLCBJRm9sZEluZm8pO1xuICAgICAgICByZXR1cm4gY3JlYXRlZEZpbGU7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBmaWxlOiAnJHtub3JtYWxpemVkUGF0aH0nYCwgZXJyKTtcbiAgICAgICAgbmV3IG9ic2lkaWFuLk5vdGljZShcIlVuYWJsZSB0byBjcmVhdGUgbmV3IGZpbGUuXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFdlZWtseU5vdGUoZGF0ZSwgd2Vla2x5Tm90ZXMpIHtcbiAgICByZXR1cm4gd2Vla2x5Tm90ZXNbZ2V0RGF0ZVVJRChkYXRlLCBcIndlZWtcIildID8/IG51bGw7XG59XG5mdW5jdGlvbiBnZXRBbGxXZWVrbHlOb3RlcygpIHtcbiAgICBjb25zdCB3ZWVrbHlOb3RlcyA9IHt9O1xuICAgIGlmICghYXBwSGFzV2Vla2x5Tm90ZXNQbHVnaW5Mb2FkZWQoKSkge1xuICAgICAgICByZXR1cm4gd2Vla2x5Tm90ZXM7XG4gICAgfVxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyBmb2xkZXIgfSA9IGdldFdlZWtseU5vdGVTZXR0aW5ncygpO1xuICAgIGNvbnN0IHdlZWtseU5vdGVzRm9sZGVyID0gdmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG9ic2lkaWFuLm5vcm1hbGl6ZVBhdGgoZm9sZGVyKSk7XG4gICAgaWYgKCF3ZWVrbHlOb3Rlc0ZvbGRlcikge1xuICAgICAgICB0aHJvdyBuZXcgV2Vla2x5Tm90ZXNGb2xkZXJNaXNzaW5nRXJyb3IoXCJGYWlsZWQgdG8gZmluZCB3ZWVrbHkgbm90ZXMgZm9sZGVyXCIpO1xuICAgIH1cbiAgICBvYnNpZGlhbi5WYXVsdC5yZWN1cnNlQ2hpbGRyZW4od2Vla2x5Tm90ZXNGb2xkZXIsIChub3RlKSA9PiB7XG4gICAgICAgIGlmIChub3RlIGluc3RhbmNlb2Ygb2JzaWRpYW4uVEZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBnZXREYXRlRnJvbUZpbGUobm90ZSwgXCJ3ZWVrXCIpO1xuICAgICAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gZ2V0RGF0ZVVJRChkYXRlLCBcIndlZWtcIik7XG4gICAgICAgICAgICAgICAgd2Vla2x5Tm90ZXNbZGF0ZVN0cmluZ10gPSBub3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHdlZWtseU5vdGVzO1xufVxuXG5jbGFzcyBNb250aGx5Tm90ZXNGb2xkZXJNaXNzaW5nRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gbWltaWNzIHRoZSBiZWhhdmlvciBvZiB0aGUgZGFpbHktbm90ZXMgcGx1Z2luXG4gKiBzbyBpdCB3aWxsIHJlcGxhY2Uge3tkYXRlfX0sIHt7dGl0bGV9fSwgYW5kIHt7dGltZX19IHdpdGggdGhlXG4gKiBmb3JtYXR0ZWQgdGltZXN0YW1wLlxuICpcbiAqIE5vdGU6IGl0IGhhcyBhbiBhZGRlZCBib251cyB0aGF0IGl0J3Mgbm90ICd0b2RheScgc3BlY2lmaWMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZU1vbnRobHlOb3RlKGRhdGUpIHtcbiAgICBjb25zdCB7IHZhdWx0IH0gPSB3aW5kb3cuYXBwO1xuICAgIGNvbnN0IHsgdGVtcGxhdGUsIGZvcm1hdCwgZm9sZGVyIH0gPSBnZXRNb250aGx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgW3RlbXBsYXRlQ29udGVudHMsIElGb2xkSW5mb10gPSBhd2FpdCBnZXRUZW1wbGF0ZUluZm8odGVtcGxhdGUpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGF3YWl0IGdldE5vdGVQYXRoKGZvbGRlciwgZmlsZW5hbWUpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRGaWxlID0gYXdhaXQgdmF1bHQuY3JlYXRlKG5vcm1hbGl6ZWRQYXRoLCB0ZW1wbGF0ZUNvbnRlbnRzXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqKGRhdGV8dGltZSlcXHMqKChbKy1dXFxkKykoW3lxbXdkaHNdKSk/XFxzKig6Lis/KT99fS9naSwgKF8sIF90aW1lT3JEYXRlLCBjYWxjLCB0aW1lRGVsdGEsIHVuaXQsIG1vbWVudEZvcm1hdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gd2luZG93Lm1vbWVudCgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBkYXRlLmNsb25lKCkuc2V0KHtcbiAgICAgICAgICAgICAgICBob3VyOiBub3cuZ2V0KFwiaG91clwiKSxcbiAgICAgICAgICAgICAgICBtaW51dGU6IG5vdy5nZXQoXCJtaW51dGVcIiksXG4gICAgICAgICAgICAgICAgc2Vjb25kOiBub3cuZ2V0KFwic2Vjb25kXCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY2FsYykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnREYXRlLmFkZChwYXJzZUludCh0aW1lRGVsdGEsIDEwKSwgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW9tZW50Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChtb21lbnRGb3JtYXQuc3Vic3RyaW5nKDEpLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqZGF0ZVxccyp9fS9naSwgZmlsZW5hbWUpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGltZVxccyp9fS9naSwgd2luZG93Lm1vbWVudCgpLmZvcm1hdChcIkhIOm1tXCIpKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpdGxlXFxzKn19L2dpLCBmaWxlbmFtZSkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLnNhdmUoY3JlYXRlZEZpbGUsIElGb2xkSW5mbyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVkRmlsZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGZpbGU6ICcke25vcm1hbGl6ZWRQYXRofSdgLCBlcnIpO1xuICAgICAgICBuZXcgb2JzaWRpYW4uTm90aWNlKFwiVW5hYmxlIHRvIGNyZWF0ZSBuZXcgZmlsZS5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0TW9udGhseU5vdGUoZGF0ZSwgbW9udGhseU5vdGVzKSB7XG4gICAgcmV0dXJuIG1vbnRobHlOb3Rlc1tnZXREYXRlVUlEKGRhdGUsIFwibW9udGhcIildID8/IG51bGw7XG59XG5mdW5jdGlvbiBnZXRBbGxNb250aGx5Tm90ZXMoKSB7XG4gICAgY29uc3QgbW9udGhseU5vdGVzID0ge307XG4gICAgaWYgKCFhcHBIYXNNb250aGx5Tm90ZXNQbHVnaW5Mb2FkZWQoKSkge1xuICAgICAgICByZXR1cm4gbW9udGhseU5vdGVzO1xuICAgIH1cbiAgICBjb25zdCB7IHZhdWx0IH0gPSB3aW5kb3cuYXBwO1xuICAgIGNvbnN0IHsgZm9sZGVyIH0gPSBnZXRNb250aGx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgbW9udGhseU5vdGVzRm9sZGVyID0gdmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG9ic2lkaWFuLm5vcm1hbGl6ZVBhdGgoZm9sZGVyKSk7XG4gICAgaWYgKCFtb250aGx5Tm90ZXNGb2xkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IE1vbnRobHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvcihcIkZhaWxlZCB0byBmaW5kIG1vbnRobHkgbm90ZXMgZm9sZGVyXCIpO1xuICAgIH1cbiAgICBvYnNpZGlhbi5WYXVsdC5yZWN1cnNlQ2hpbGRyZW4obW9udGhseU5vdGVzRm9sZGVyLCAobm90ZSkgPT4ge1xuICAgICAgICBpZiAobm90ZSBpbnN0YW5jZW9mIG9ic2lkaWFuLlRGaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gZ2V0RGF0ZUZyb21GaWxlKG5vdGUsIFwibW9udGhcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwibW9udGhcIik7XG4gICAgICAgICAgICAgICAgbW9udGhseU5vdGVzW2RhdGVTdHJpbmddID0gbm90ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBtb250aGx5Tm90ZXM7XG59XG5cbmNsYXNzIFF1YXJ0ZXJseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIG1pbWljcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGRhaWx5LW5vdGVzIHBsdWdpblxuICogc28gaXQgd2lsbCByZXBsYWNlIHt7ZGF0ZX19LCB7e3RpdGxlfX0sIGFuZCB7e3RpbWV9fSB3aXRoIHRoZVxuICogZm9ybWF0dGVkIHRpbWVzdGFtcC5cbiAqXG4gKiBOb3RlOiBpdCBoYXMgYW4gYWRkZWQgYm9udXMgdGhhdCBpdCdzIG5vdCAndG9kYXknIHNwZWNpZmljLlxuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVRdWFydGVybHlOb3RlKGRhdGUpIHtcbiAgICBjb25zdCB7IHZhdWx0IH0gPSB3aW5kb3cuYXBwO1xuICAgIGNvbnN0IHsgdGVtcGxhdGUsIGZvcm1hdCwgZm9sZGVyIH0gPSBnZXRRdWFydGVybHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBbdGVtcGxhdGVDb250ZW50cywgSUZvbGRJbmZvXSA9IGF3YWl0IGdldFRlbXBsYXRlSW5mbyh0ZW1wbGF0ZSk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBkYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gYXdhaXQgZ2V0Tm90ZVBhdGgoZm9sZGVyLCBmaWxlbmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY3JlYXRlZEZpbGUgPSBhd2FpdCB2YXVsdC5jcmVhdGUobm9ybWFsaXplZFBhdGgsIHRlbXBsYXRlQ29udGVudHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyooZGF0ZXx0aW1lKVxccyooKFsrLV1cXGQrKShbeXFtd2Roc10pKT9cXHMqKDouKz8pP319L2dpLCAoXywgX3RpbWVPckRhdGUsIGNhbGMsIHRpbWVEZWx0YSwgdW5pdCwgbW9tZW50Rm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSB3aW5kb3cubW9tZW50KCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IGRhdGUuY2xvbmUoKS5zZXQoe1xuICAgICAgICAgICAgICAgIGhvdXI6IG5vdy5nZXQoXCJob3VyXCIpLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogbm93LmdldChcIm1pbnV0ZVwiKSxcbiAgICAgICAgICAgICAgICBzZWNvbmQ6IG5vdy5nZXQoXCJzZWNvbmRcIiksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjYWxjKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudERhdGUuYWRkKHBhcnNlSW50KHRpbWVEZWx0YSwgMTApLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtb21lbnRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KG1vbWVudEZvcm1hdC5zdWJzdHJpbmcoMSkudHJpbSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccypkYXRlXFxzKn19L2dpLCBmaWxlbmFtZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aW1lXFxzKn19L2dpLCB3aW5kb3cubW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGl0bGVcXHMqfX0vZ2ksIGZpbGVuYW1lKSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHdpbmRvdy5hcHAuZm9sZE1hbmFnZXIuc2F2ZShjcmVhdGVkRmlsZSwgSUZvbGRJbmZvKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRGaWxlO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgZmlsZTogJyR7bm9ybWFsaXplZFBhdGh9J2AsIGVycik7XG4gICAgICAgIG5ldyBvYnNpZGlhbi5Ob3RpY2UoXCJVbmFibGUgdG8gY3JlYXRlIG5ldyBmaWxlLlwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRRdWFydGVybHlOb3RlKGRhdGUsIHF1YXJ0ZXJseSkge1xuICAgIHJldHVybiBxdWFydGVybHlbZ2V0RGF0ZVVJRChkYXRlLCBcInF1YXJ0ZXJcIildID8/IG51bGw7XG59XG5mdW5jdGlvbiBnZXRBbGxRdWFydGVybHlOb3RlcygpIHtcbiAgICBjb25zdCBxdWFydGVybHkgPSB7fTtcbiAgICBpZiAoIWFwcEhhc1F1YXJ0ZXJseU5vdGVzUGx1Z2luTG9hZGVkKCkpIHtcbiAgICAgICAgcmV0dXJuIHF1YXJ0ZXJseTtcbiAgICB9XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0UXVhcnRlcmx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgcXVhcnRlcmx5Rm9sZGVyID0gdmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG9ic2lkaWFuLm5vcm1hbGl6ZVBhdGgoZm9sZGVyKSk7XG4gICAgaWYgKCFxdWFydGVybHlGb2xkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFF1YXJ0ZXJseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yKFwiRmFpbGVkIHRvIGZpbmQgcXVhcnRlcmx5IG5vdGVzIGZvbGRlclwiKTtcbiAgICB9XG4gICAgb2JzaWRpYW4uVmF1bHQucmVjdXJzZUNoaWxkcmVuKHF1YXJ0ZXJseUZvbGRlciwgKG5vdGUpID0+IHtcbiAgICAgICAgaWYgKG5vdGUgaW5zdGFuY2VvZiBvYnNpZGlhbi5URmlsZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGdldERhdGVGcm9tRmlsZShub3RlLCBcInF1YXJ0ZXJcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwicXVhcnRlclwiKTtcbiAgICAgICAgICAgICAgICBxdWFydGVybHlbZGF0ZVN0cmluZ10gPSBub3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHF1YXJ0ZXJseTtcbn1cblxuY2xhc3MgWWVhcmx5Tm90ZXNGb2xkZXJNaXNzaW5nRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gbWltaWNzIHRoZSBiZWhhdmlvciBvZiB0aGUgZGFpbHktbm90ZXMgcGx1Z2luXG4gKiBzbyBpdCB3aWxsIHJlcGxhY2Uge3tkYXRlfX0sIHt7dGl0bGV9fSwgYW5kIHt7dGltZX19IHdpdGggdGhlXG4gKiBmb3JtYXR0ZWQgdGltZXN0YW1wLlxuICpcbiAqIE5vdGU6IGl0IGhhcyBhbiBhZGRlZCBib251cyB0aGF0IGl0J3Mgbm90ICd0b2RheScgc3BlY2lmaWMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVllYXJseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldFllYXJseU5vdGVTZXR0aW5ncygpO1xuICAgIGNvbnN0IFt0ZW1wbGF0ZUNvbnRlbnRzLCBJRm9sZEluZm9dID0gYXdhaXQgZ2V0VGVtcGxhdGVJbmZvKHRlbXBsYXRlKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGRhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBhd2FpdCBnZXROb3RlUGF0aChmb2xkZXIsIGZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBjcmVhdGVkRmlsZSA9IGF3YWl0IHZhdWx0LmNyZWF0ZShub3JtYWxpemVkUGF0aCwgdGVtcGxhdGVDb250ZW50c1xuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IHdpbmRvdy5tb21lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gZGF0ZS5jbG9uZSgpLnNldCh7XG4gICAgICAgICAgICAgICAgaG91cjogbm93LmdldChcImhvdXJcIiksXG4gICAgICAgICAgICAgICAgbWludXRlOiBub3cuZ2V0KFwibWludXRlXCIpLFxuICAgICAgICAgICAgICAgIHNlY29uZDogbm93LmdldChcInNlY29uZFwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNhbGMpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5hZGQocGFyc2VJbnQodGltZURlbHRhLCAxMCksIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1vbWVudEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQobW9tZW50Rm9ybWF0LnN1YnN0cmluZygxKS50cmltKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKmRhdGVcXHMqfX0vZ2ksIGZpbGVuYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpbWVcXHMqfX0vZ2ksIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoXCJISDptbVwiKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aXRsZVxccyp9fS9naSwgZmlsZW5hbWUpKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgd2luZG93LmFwcC5mb2xkTWFuYWdlci5zYXZlKGNyZWF0ZWRGaWxlLCBJRm9sZEluZm8pO1xuICAgICAgICByZXR1cm4gY3JlYXRlZEZpbGU7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBmaWxlOiAnJHtub3JtYWxpemVkUGF0aH0nYCwgZXJyKTtcbiAgICAgICAgbmV3IG9ic2lkaWFuLk5vdGljZShcIlVuYWJsZSB0byBjcmVhdGUgbmV3IGZpbGUuXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFllYXJseU5vdGUoZGF0ZSwgeWVhcmx5Tm90ZXMpIHtcbiAgICByZXR1cm4geWVhcmx5Tm90ZXNbZ2V0RGF0ZVVJRChkYXRlLCBcInllYXJcIildID8/IG51bGw7XG59XG5mdW5jdGlvbiBnZXRBbGxZZWFybHlOb3RlcygpIHtcbiAgICBjb25zdCB5ZWFybHlOb3RlcyA9IHt9O1xuICAgIGlmICghYXBwSGFzWWVhcmx5Tm90ZXNQbHVnaW5Mb2FkZWQoKSkge1xuICAgICAgICByZXR1cm4geWVhcmx5Tm90ZXM7XG4gICAgfVxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyBmb2xkZXIgfSA9IGdldFllYXJseU5vdGVTZXR0aW5ncygpO1xuICAgIGNvbnN0IHllYXJseU5vdGVzRm9sZGVyID0gdmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG9ic2lkaWFuLm5vcm1hbGl6ZVBhdGgoZm9sZGVyKSk7XG4gICAgaWYgKCF5ZWFybHlOb3Rlc0ZvbGRlcikge1xuICAgICAgICB0aHJvdyBuZXcgWWVhcmx5Tm90ZXNGb2xkZXJNaXNzaW5nRXJyb3IoXCJGYWlsZWQgdG8gZmluZCB5ZWFybHkgbm90ZXMgZm9sZGVyXCIpO1xuICAgIH1cbiAgICBvYnNpZGlhbi5WYXVsdC5yZWN1cnNlQ2hpbGRyZW4oeWVhcmx5Tm90ZXNGb2xkZXIsIChub3RlKSA9PiB7XG4gICAgICAgIGlmIChub3RlIGluc3RhbmNlb2Ygb2JzaWRpYW4uVEZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBnZXREYXRlRnJvbUZpbGUobm90ZSwgXCJ5ZWFyXCIpO1xuICAgICAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlU3RyaW5nID0gZ2V0RGF0ZVVJRChkYXRlLCBcInllYXJcIik7XG4gICAgICAgICAgICAgICAgeWVhcmx5Tm90ZXNbZGF0ZVN0cmluZ10gPSBub3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHllYXJseU5vdGVzO1xufVxuXG5mdW5jdGlvbiBhcHBIYXNEYWlseU5vdGVzUGx1Z2luTG9hZGVkKCkge1xuICAgIGNvbnN0IHsgYXBwIH0gPSB3aW5kb3c7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBkYWlseU5vdGVzUGx1Z2luID0gYXBwLmludGVybmFsUGx1Z2lucy5wbHVnaW5zW1wiZGFpbHktbm90ZXNcIl07XG4gICAgaWYgKGRhaWx5Tm90ZXNQbHVnaW4gJiYgZGFpbHlOb3Rlc1BsdWdpbi5lbmFibGVkKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IHBlcmlvZGljTm90ZXMgPSBhcHAucGx1Z2lucy5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKTtcbiAgICByZXR1cm4gcGVyaW9kaWNOb3RlcyAmJiBwZXJpb2RpY05vdGVzLnNldHRpbmdzPy5kYWlseT8uZW5hYmxlZDtcbn1cbi8qKlxuICogWFhYOiBcIldlZWtseSBOb3Rlc1wiIGxpdmUgaW4gZWl0aGVyIHRoZSBDYWxlbmRhciBwbHVnaW4gb3IgdGhlIHBlcmlvZGljLW5vdGVzIHBsdWdpbi5cbiAqIENoZWNrIGJvdGggdW50aWwgdGhlIHdlZWtseSBub3RlcyBmZWF0dXJlIGlzIHJlbW92ZWQgZnJvbSB0aGUgQ2FsZW5kYXIgcGx1Z2luLlxuICovXG5mdW5jdGlvbiBhcHBIYXNXZWVrbHlOb3Rlc1BsdWdpbkxvYWRlZCgpIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgaWYgKGFwcC5wbHVnaW5zLmdldFBsdWdpbihcImNhbGVuZGFyXCIpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IHBlcmlvZGljTm90ZXMgPSBhcHAucGx1Z2lucy5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKTtcbiAgICByZXR1cm4gcGVyaW9kaWNOb3RlcyAmJiBwZXJpb2RpY05vdGVzLnNldHRpbmdzPy53ZWVrbHk/LmVuYWJsZWQ7XG59XG5mdW5jdGlvbiBhcHBIYXNNb250aGx5Tm90ZXNQbHVnaW5Mb2FkZWQoKSB7XG4gICAgY29uc3QgeyBhcHAgfSA9IHdpbmRvdztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IHBlcmlvZGljTm90ZXMgPSBhcHAucGx1Z2lucy5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKTtcbiAgICByZXR1cm4gcGVyaW9kaWNOb3RlcyAmJiBwZXJpb2RpY05vdGVzLnNldHRpbmdzPy5tb250aGx5Py5lbmFibGVkO1xufVxuZnVuY3Rpb24gYXBwSGFzUXVhcnRlcmx5Tm90ZXNQbHVnaW5Mb2FkZWQoKSB7XG4gICAgY29uc3QgeyBhcHAgfSA9IHdpbmRvdztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IHBlcmlvZGljTm90ZXMgPSBhcHAucGx1Z2lucy5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKTtcbiAgICByZXR1cm4gcGVyaW9kaWNOb3RlcyAmJiBwZXJpb2RpY05vdGVzLnNldHRpbmdzPy5xdWFydGVybHk/LmVuYWJsZWQ7XG59XG5mdW5jdGlvbiBhcHBIYXNZZWFybHlOb3Rlc1BsdWdpbkxvYWRlZCgpIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LnllYXJseT8uZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGdldFBlcmlvZGljTm90ZVNldHRpbmdzKGdyYW51bGFyaXR5KSB7XG4gICAgY29uc3QgZ2V0U2V0dGluZ3MgPSB7XG4gICAgICAgIGRheTogZ2V0RGFpbHlOb3RlU2V0dGluZ3MsXG4gICAgICAgIHdlZWs6IGdldFdlZWtseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgbW9udGg6IGdldE1vbnRobHlOb3RlU2V0dGluZ3MsXG4gICAgICAgIHF1YXJ0ZXI6IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgeWVhcjogZ2V0WWVhcmx5Tm90ZVNldHRpbmdzLFxuICAgIH1bZ3JhbnVsYXJpdHldO1xuICAgIHJldHVybiBnZXRTZXR0aW5ncygpO1xufVxuZnVuY3Rpb24gY3JlYXRlUGVyaW9kaWNOb3RlKGdyYW51bGFyaXR5LCBkYXRlKSB7XG4gICAgY29uc3QgY3JlYXRlRm4gPSB7XG4gICAgICAgIGRheTogY3JlYXRlRGFpbHlOb3RlLFxuICAgICAgICBtb250aDogY3JlYXRlTW9udGhseU5vdGUsXG4gICAgICAgIHdlZWs6IGNyZWF0ZVdlZWtseU5vdGUsXG4gICAgfTtcbiAgICByZXR1cm4gY3JlYXRlRm5bZ3JhbnVsYXJpdHldKGRhdGUpO1xufVxuXG5leHBvcnRzLkRFRkFVTFRfREFJTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX0RBSUxZX05PVEVfRk9STUFUO1xuZXhwb3J0cy5ERUZBVUxUX01PTlRITFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX01PTlRITFlfTk9URV9GT1JNQVQ7XG5leHBvcnRzLkRFRkFVTFRfUVVBUlRFUkxZX05PVEVfRk9STUFUID0gREVGQVVMVF9RVUFSVEVSTFlfTk9URV9GT1JNQVQ7XG5leHBvcnRzLkRFRkFVTFRfV0VFS0xZX05PVEVfRk9STUFUID0gREVGQVVMVF9XRUVLTFlfTk9URV9GT1JNQVQ7XG5leHBvcnRzLkRFRkFVTFRfWUVBUkxZX05PVEVfRk9STUFUID0gREVGQVVMVF9ZRUFSTFlfTk9URV9GT1JNQVQ7XG5leHBvcnRzLmFwcEhhc0RhaWx5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNEYWlseU5vdGVzUGx1Z2luTG9hZGVkO1xuZXhwb3J0cy5hcHBIYXNNb250aGx5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNNb250aGx5Tm90ZXNQbHVnaW5Mb2FkZWQ7XG5leHBvcnRzLmFwcEhhc1F1YXJ0ZXJseU5vdGVzUGx1Z2luTG9hZGVkID0gYXBwSGFzUXVhcnRlcmx5Tm90ZXNQbHVnaW5Mb2FkZWQ7XG5leHBvcnRzLmFwcEhhc1dlZWtseU5vdGVzUGx1Z2luTG9hZGVkID0gYXBwSGFzV2Vla2x5Tm90ZXNQbHVnaW5Mb2FkZWQ7XG5leHBvcnRzLmFwcEhhc1llYXJseU5vdGVzUGx1Z2luTG9hZGVkID0gYXBwSGFzWWVhcmx5Tm90ZXNQbHVnaW5Mb2FkZWQ7XG5leHBvcnRzLmNyZWF0ZURhaWx5Tm90ZSA9IGNyZWF0ZURhaWx5Tm90ZTtcbmV4cG9ydHMuY3JlYXRlTW9udGhseU5vdGUgPSBjcmVhdGVNb250aGx5Tm90ZTtcbmV4cG9ydHMuY3JlYXRlUGVyaW9kaWNOb3RlID0gY3JlYXRlUGVyaW9kaWNOb3RlO1xuZXhwb3J0cy5jcmVhdGVRdWFydGVybHlOb3RlID0gY3JlYXRlUXVhcnRlcmx5Tm90ZTtcbmV4cG9ydHMuY3JlYXRlV2Vla2x5Tm90ZSA9IGNyZWF0ZVdlZWtseU5vdGU7XG5leHBvcnRzLmNyZWF0ZVllYXJseU5vdGUgPSBjcmVhdGVZZWFybHlOb3RlO1xuZXhwb3J0cy5nZXRBbGxEYWlseU5vdGVzID0gZ2V0QWxsRGFpbHlOb3RlcztcbmV4cG9ydHMuZ2V0QWxsTW9udGhseU5vdGVzID0gZ2V0QWxsTW9udGhseU5vdGVzO1xuZXhwb3J0cy5nZXRBbGxRdWFydGVybHlOb3RlcyA9IGdldEFsbFF1YXJ0ZXJseU5vdGVzO1xuZXhwb3J0cy5nZXRBbGxXZWVrbHlOb3RlcyA9IGdldEFsbFdlZWtseU5vdGVzO1xuZXhwb3J0cy5nZXRBbGxZZWFybHlOb3RlcyA9IGdldEFsbFllYXJseU5vdGVzO1xuZXhwb3J0cy5nZXREYWlseU5vdGUgPSBnZXREYWlseU5vdGU7XG5leHBvcnRzLmdldERhaWx5Tm90ZVNldHRpbmdzID0gZ2V0RGFpbHlOb3RlU2V0dGluZ3M7XG5leHBvcnRzLmdldERhdGVGcm9tRmlsZSA9IGdldERhdGVGcm9tRmlsZTtcbmV4cG9ydHMuZ2V0RGF0ZUZyb21QYXRoID0gZ2V0RGF0ZUZyb21QYXRoO1xuZXhwb3J0cy5nZXREYXRlVUlEID0gZ2V0RGF0ZVVJRDtcbmV4cG9ydHMuZ2V0TW9udGhseU5vdGUgPSBnZXRNb250aGx5Tm90ZTtcbmV4cG9ydHMuZ2V0TW9udGhseU5vdGVTZXR0aW5ncyA9IGdldE1vbnRobHlOb3RlU2V0dGluZ3M7XG5leHBvcnRzLmdldFBlcmlvZGljTm90ZVNldHRpbmdzID0gZ2V0UGVyaW9kaWNOb3RlU2V0dGluZ3M7XG5leHBvcnRzLmdldFF1YXJ0ZXJseU5vdGUgPSBnZXRRdWFydGVybHlOb3RlO1xuZXhwb3J0cy5nZXRRdWFydGVybHlOb3RlU2V0dGluZ3MgPSBnZXRRdWFydGVybHlOb3RlU2V0dGluZ3M7XG5leHBvcnRzLmdldFRlbXBsYXRlSW5mbyA9IGdldFRlbXBsYXRlSW5mbztcbmV4cG9ydHMuZ2V0V2Vla2x5Tm90ZSA9IGdldFdlZWtseU5vdGU7XG5leHBvcnRzLmdldFdlZWtseU5vdGVTZXR0aW5ncyA9IGdldFdlZWtseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0WWVhcmx5Tm90ZSA9IGdldFllYXJseU5vdGU7XG5leHBvcnRzLmdldFllYXJseU5vdGVTZXR0aW5ncyA9IGdldFllYXJseU5vdGVTZXR0aW5ncztcbiIsIi8vIE9ic2lkaWFuIGJ1bmRsZXMgbW9tZW50LmpzIGFuZCBleHBvc2VzIGl0IGFzIHdpbmRvdy5tb21lbnQgYXQgcnVudGltZS5cbi8vIEl0cyB0eXBlIGlzIGRlY2xhcmVkIGdsb2JhbGx5IHZpYSBcImRlY2xhcmUgZ2xvYmFsXCIgaW4gdHlwZXMuZC50cywgd2hpY2hcbi8vIHdvcmtzIGZpbmUgZm9yIHdob2xlLXByb2plY3QgdHlwZS1jaGVja2luZyAodGhpcyBwcm9qZWN0J3Mgb3duIHRzY29uZmlnLFxuLy8gdGVzdHMsIGJ1aWxkKSBidXQgbm90IGZvciB0b29scyB0aGF0IHR5cGUtY2hlY2sgZmlsZXMgaW4gaXNvbGF0aW9uIC0tXG4vLyB0aG9zZSBuZXZlciBzZWUgdGhlIGFtYmllbnQgYXVnbWVudGF0aW9uIGZyb20gdGhhdCBzZXBhcmF0ZSBmaWxlLCBzb1xuLy8gZXZlcnkgd2luZG93Lm1vbWVudCB1c2FnZSBzaWxlbnRseSByZXNvbHZlcyB0byBgYW55YCB0aGVyZSwgY2FzY2FkaW5nXG4vLyBpbnRvIHVuc2FmZS0qIGxpbnQgd2FybmluZ3Mgb24gZXZlcnkgbGluZSB0aGF0IHRvdWNoZXMgaXRzIHJldHVybiB2YWx1ZS5cbi8vXG4vLyBSZS1leHBvcnRpbmcgdGhyb3VnaCBhIHJlYWwgRVMgaW1wb3J0IHNpZGVzdGVwcyB0aGF0OiBhIG1vZHVsZSBpbXBvcnQnc1xuLy8gdHlwZSBpcyByZXNvbHZlZCBmcm9tIHRoaXMgZmlsZSdzIG93biBkZWNsYXJlZCB0eXBlIHJlZ2FyZGxlc3Mgb2YgYW1iaWVudFxuLy8gZGVjbGFyYXRpb24gdmlzaWJpbGl0eSBlbHNld2hlcmUuXG4vL1xuLy8gVXNlcyBhIFByb3h5IGluc3RlYWQgb2YgY2FwdHVyaW5nIHdpbmRvdy5tb21lbnQgZGlyZWN0bHkgYXQgbW9kdWxlLWxvYWRcbi8vIHRpbWUsIHNvIGxhdGVyIG11dGF0aW9ucyBvZiB3aW5kb3cubW9tZW50IGFyZSBzdGlsbCByZWZsZWN0ZWQgLS0gc29tZVxuLy8gdGVzdHMgaW50ZW50aW9uYWxseSBtb25rZXktcGF0Y2ggd2luZG93Lm1vbWVudCBtaWQtdGVzdCAodG8gZXhlcmNpc2Vcbi8vIGVycm9yLWhhbmRsaW5nIGJyYW5jaGVzIGFyb3VuZCBhIHRocm93aW5nIC5mb3JtYXQoKSksIGFuZCBhIHBsYWluXG4vLyBjYXB0dXJlZCByZWZlcmVuY2Ugd291bGQga2VlcCBwb2ludGluZyBhdCB0aGUgcHJlLW1vY2sgZnVuY3Rpb24uXG5jb25zdCBtb21lbnQ6IHR5cGVvZiBpbXBvcnQoXCJtb21lbnRcIikgPSBuZXcgUHJveHkoXG4gICgoKTogdW5kZWZpbmVkID0+IHVuZGVmaW5lZCkgYXMgdW5rbm93biBhcyB0eXBlb2YgaW1wb3J0KFwibW9tZW50XCIpLFxuICB7XG4gICAgYXBwbHk6IChfdGFyZ2V0LCB0aGlzQXJnLCBhcmdzOiB1bmtub3duW10pID0+XG4gICAgICBSZWZsZWN0LmFwcGx5KHdpbmRvdy5tb21lbnQgYXMgdW5rbm93biBhcyAoLi4uYTogdW5rbm93bltdKSA9PiB1bmtub3duLCB0aGlzQXJnLCBhcmdzKSxcbiAgICBnZXQ6IChfdGFyZ2V0LCBwcm9wLCByZWNlaXZlcik6IHVua25vd24gPT4gUmVmbGVjdC5nZXQod2luZG93Lm1vbWVudCwgcHJvcCwgcmVjZWl2ZXIpLFxuICB9XG4pO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQ7XG4iLCIvKipcbiAqIE1vZHVsZSBwb3VyIGxlIGZvcm1hdGFnZSBkZSBkYXRlc1xuICovXG5pbXBvcnQgbW9tZW50IGZyb20gXCIuL3dpbmRvdy1tb21lbnRcIjtcblxuLyoqXG4gKiBDbGFzc2UgcG91ciBmb3JtYXRlciBkZXMgZGF0ZXNcbiAqL1xuZXhwb3J0IGNsYXNzIERhdGVGb3JtYXR0ZXIge1xuICAvKipcbiAgICogRm9ybWF0ZSB1bmUgZGF0ZSBzZWxvbiBsZSBmb3JtYXQgc3DDqWNpZmnDqVxuICAgKiBAcGFyYW0gZGF0ZSBMYSBkYXRlIMOgIGZvcm1hdGVyXG4gICAqIEBwYXJhbSBmb3JtYXQgTGUgZm9ybWF0IGRlIGRhdGUgKGZvcm1hdCBNb21lbnQuanMpXG4gICAqIEByZXR1cm5zIExhIGRhdGUgZm9ybWF0w6llIGVuIHN0cmluZ1xuICAgKi9cbiAgc3RhdGljIGZvcm1hdChkYXRlOiBEYXRlLCBmb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG1vbWVudChkYXRlKS5mb3JtYXQoZm9ybWF0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRlIHVuZSBkYXRlIGF2ZWMgaGV1cmVcbiAgICogQHBhcmFtIGRhdGUgTGEgZGF0ZSDDoCBmb3JtYXRlclxuICAgKiBAcGFyYW0gZGF0ZUZvcm1hdCBMZSBmb3JtYXQgZGUgZGF0ZVxuICAgKiBAcGFyYW0gdGltZUZvcm1hdCBMZSBmb3JtYXQgZCdoZXVyZVxuICAgKiBAcGFyYW0gc2VwYXJhdG9yIExlIHPDqXBhcmF0ZXVyIGVudHJlIGRhdGUgZXQgaGV1cmUgKGTDqWZhdXQ6IFwiIFwiKVxuICAgKiBAcmV0dXJucyBMYSBkYXRlIGZvcm1hdMOpZSBhdmVjIGwnaGV1cmVcbiAgICovXG4gIHN0YXRpYyBmb3JtYXRXaXRoVGltZShcbiAgICBkYXRlOiBEYXRlLFxuICAgIGRhdGVGb3JtYXQ6IHN0cmluZyxcbiAgICB0aW1lRm9ybWF0OiBzdHJpbmcsXG4gICAgc2VwYXJhdG9yID0gXCIgXCJcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRlU3RyID0gdGhpcy5mb3JtYXQoZGF0ZSwgZGF0ZUZvcm1hdCk7XG4gICAgY29uc3QgdGltZVN0ciA9IHRoaXMuZm9ybWF0KGRhdGUsIHRpbWVGb3JtYXQpO1xuICAgIHJldHVybiBgJHtkYXRlU3RyfSR7c2VwYXJhdG9yfSR7dGltZVN0cn1gO1xuICB9XG59XG5cbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS42LjJcbihmdW5jdGlvbigpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICB2YXIgX19iaW5kID0gZnVuY3Rpb24oZm4sIG1lKXsgcmV0dXJuIGZ1bmN0aW9uKCl7IHJldHVybiBmbi5hcHBseShtZSwgYXJndW1lbnRzKTsgfTsgfTtcblxuICAoZnVuY3Rpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgIHJldHVybiBkZWZpbmUoW10sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcm9vdC5pMThuID0gZmFjdG9yeSgpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgcmV0dXJuIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcm9vdC5pMThuID0gZmFjdG9yeSgpO1xuICAgIH1cbiAgfSkoKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYgIT09IG51bGwgPyBzZWxmIDogdGhpcyksIGZ1bmN0aW9uKCkge1xuICAgIHZhciBUcmFuc2xhdG9yLCBpMThuLCB0cmFuc2xhdG9yO1xuXG4gICAgVHJhbnNsYXRvciA9IChmdW5jdGlvbigpIHtcbiAgICAgIGZ1bmN0aW9uIFRyYW5zbGF0b3IoKSB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlID0gX19iaW5kKHRoaXMudHJhbnNsYXRlLCB0aGlzKTsgICAgICAgIHRoaXMuZGF0YSA9IHtcbiAgICAgICAgICB2YWx1ZXM6IHt9LFxuICAgICAgICAgIGNvbnRleHRzOiBbXVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmdsb2JhbENvbnRleHQgPSB7fTtcbiAgICAgIH1cblxuICAgICAgVHJhbnNsYXRvci5wcm90b3R5cGUudHJhbnNsYXRlID0gZnVuY3Rpb24odGV4dCwgZGVmYXVsdE51bU9yRm9ybWF0dGluZywgbnVtT3JGb3JtYXR0aW5nT3JDb250ZXh0LCBmb3JtYXR0aW5nT3JDb250ZXh0LCBjb250ZXh0KSB7XG4gICAgICAgIHZhciBkZWZhdWx0VGV4dCwgZm9ybWF0dGluZywgaXNPYmplY3QsIG51bTtcblxuICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgY29udGV4dCA9IHRoaXMuZ2xvYmFsQ29udGV4dDtcbiAgICAgICAgfVxuICAgICAgICBpc09iamVjdCA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICAgIHZhciB0eXBlO1xuXG4gICAgICAgICAgdHlwZSA9IHR5cGVvZiBvYmo7XG4gICAgICAgICAgcmV0dXJuIHR5cGUgPT09IFwiZnVuY3Rpb25cIiB8fCB0eXBlID09PSBcIm9iamVjdFwiICYmICEhb2JqO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoaXNPYmplY3QoZGVmYXVsdE51bU9yRm9ybWF0dGluZykpIHtcbiAgICAgICAgICBkZWZhdWx0VGV4dCA9IG51bGw7XG4gICAgICAgICAgbnVtID0gbnVsbDtcbiAgICAgICAgICBmb3JtYXR0aW5nID0gZGVmYXVsdE51bU9yRm9ybWF0dGluZztcbiAgICAgICAgICBjb250ZXh0ID0gbnVtT3JGb3JtYXR0aW5nT3JDb250ZXh0IHx8IHRoaXMuZ2xvYmFsQ29udGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGRlZmF1bHROdW1PckZvcm1hdHRpbmcgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGRlZmF1bHRUZXh0ID0gbnVsbDtcbiAgICAgICAgICAgIG51bSA9IGRlZmF1bHROdW1PckZvcm1hdHRpbmc7XG4gICAgICAgICAgICBmb3JtYXR0aW5nID0gbnVtT3JGb3JtYXR0aW5nT3JDb250ZXh0O1xuICAgICAgICAgICAgY29udGV4dCA9IGZvcm1hdHRpbmdPckNvbnRleHQgfHwgdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0VGV4dCA9IGRlZmF1bHROdW1PckZvcm1hdHRpbmc7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG51bU9yRm9ybWF0dGluZ09yQ29udGV4dCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICBudW0gPSBudW1PckZvcm1hdHRpbmdPckNvbnRleHQ7XG4gICAgICAgICAgICAgIGZvcm1hdHRpbmcgPSBmb3JtYXR0aW5nT3JDb250ZXh0O1xuICAgICAgICAgICAgICBjb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG51bSA9IG51bGw7XG4gICAgICAgICAgICAgIGZvcm1hdHRpbmcgPSBudW1PckZvcm1hdHRpbmdPckNvbnRleHQ7XG4gICAgICAgICAgICAgIGNvbnRleHQgPSBmb3JtYXR0aW5nT3JDb250ZXh0IHx8IHRoaXMuZ2xvYmFsQ29udGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JqZWN0KHRleHQpKSB7XG4gICAgICAgICAgaWYgKGlzT2JqZWN0KHRleHRbJ2kxOG4nXSkpIHtcbiAgICAgICAgICAgIHRleHQgPSB0ZXh0WydpMThuJ107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZUhhc2godGV4dCwgY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dCh0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIGNvbnRleHQsIGRlZmF1bHRUZXh0KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgVHJhbnNsYXRvci5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oZCkge1xuICAgICAgICB2YXIgYywgaywgdiwgX2ksIF9sZW4sIF9yZWYsIF9yZWYxLCBfcmVzdWx0cztcblxuICAgICAgICBpZiAoKGQudmFsdWVzICE9IG51bGwpKSB7XG4gICAgICAgICAgX3JlZiA9IGQudmFsdWVzO1xuICAgICAgICAgIGZvciAoayBpbiBfcmVmKSB7XG4gICAgICAgICAgICB2ID0gX3JlZltrXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS52YWx1ZXNba10gPSB2O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKGQuY29udGV4dHMgIT0gbnVsbCkpIHtcbiAgICAgICAgICBfcmVmMSA9IGQuY29udGV4dHM7XG4gICAgICAgICAgX3Jlc3VsdHMgPSBbXTtcbiAgICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYxLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgICBjID0gX3JlZjFbX2ldO1xuICAgICAgICAgICAgX3Jlc3VsdHMucHVzaCh0aGlzLmRhdGEuY29udGV4dHMucHVzaChjKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBfcmVzdWx0cztcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgVHJhbnNsYXRvci5wcm90b3R5cGUuc2V0Q29udGV4dCA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsQ29udGV4dFtrZXldID0gdmFsdWU7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbihleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5zaW9uID0gZXh0O1xuICAgICAgfTtcblxuICAgICAgVHJhbnNsYXRvci5wcm90b3R5cGUuY2xlYXJDb250ZXh0ID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsb2JhbENvbnRleHRba2V5XSA9IG51bGw7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnJlc2V0RGF0YSgpO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNldENvbnRleHQoKTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLnJlc2V0RGF0YSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhID0ge1xuICAgICAgICAgIHZhbHVlczoge30sXG4gICAgICAgICAgY29udGV4dHM6IFtdXG4gICAgICAgIH07XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5yZXNldENvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsQ29udGV4dCA9IHt9O1xuICAgICAgfTtcblxuICAgICAgVHJhbnNsYXRvci5wcm90b3R5cGUudHJhbnNsYXRlSGFzaCA9IGZ1bmN0aW9uKGhhc2gsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIGssIHY7XG5cbiAgICAgICAgZm9yIChrIGluIGhhc2gpIHtcbiAgICAgICAgICB2ID0gaGFzaFtrXTtcbiAgICAgICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGhhc2hba10gPSB0aGlzLnRyYW5zbGF0ZVRleHQodiwgbnVsbCwgbnVsbCwgY29udGV4dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYXNoO1xuICAgICAgfTtcblxuICAgICAgVHJhbnNsYXRvci5wcm90b3R5cGUudHJhbnNsYXRlVGV4dCA9IGZ1bmN0aW9uKHRleHQsIG51bSwgZm9ybWF0dGluZywgY29udGV4dCwgZGVmYXVsdFRleHQpIHtcbiAgICAgICAgdmFyIGNvbnRleHREYXRhLCByZXN1bHQ7XG5cbiAgICAgICAgaWYgKGNvbnRleHQgPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSB0aGlzLmdsb2JhbENvbnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0YSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMudXNlT3JpZ2luYWxUZXh0KGRlZmF1bHRUZXh0IHx8IHRleHQsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dERhdGEgPSB0aGlzLmdldENvbnRleHREYXRhKHRoaXMuZGF0YSwgY29udGV4dCk7XG4gICAgICAgIGlmIChjb250ZXh0RGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0ID0gdGhpcy5maW5kVHJhbnNsYXRpb24odGV4dCwgbnVtLCBmb3JtYXR0aW5nLCBjb250ZXh0RGF0YS52YWx1ZXMsIGRlZmF1bHRUZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLmZpbmRUcmFuc2xhdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIHRoaXMuZGF0YS52YWx1ZXMsIGRlZmF1bHRUZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy51c2VPcmlnaW5hbFRleHQoZGVmYXVsdFRleHQgfHwgdGV4dCwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfTtcblxuICAgICAgVHJhbnNsYXRvci5wcm90b3R5cGUuZmluZFRyYW5zbGF0aW9uID0gZnVuY3Rpb24odGV4dCwgbnVtLCBmb3JtYXR0aW5nLCBkYXRhLCBkZWZhdWx0VGV4dCkge1xuICAgICAgICB2YXIgYSwgYiwgYywgZCwgZSwgcmVzdWx0LCB0cmlwbGUsIHZhbHVlLCBfaSwgX2xlbjtcblxuICAgICAgICB2YWx1ZSA9IGRhdGFbdGV4dF07XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAodGhpcy5leHRlbnNpb24gJiYgdHlwZW9mIHRoaXMuZXh0ZW5zaW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5leHRlbnNpb24odGV4dCwgbnVtLCBmb3JtYXR0aW5nLCB2YWx1ZSk7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuYXBwbHlOdW1iZXJzKHZhbHVlLCBudW0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGb3JtYXR0aW5nKHZhbHVlLCBudW0sIGZvcm1hdHRpbmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51c2VPcmlnaW5hbFRleHQoZGVmYXVsdFRleHQgfHwgdGV4dCwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChudW0gPT0gbnVsbCkgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGb3JtYXR0aW5nKHZhbHVlLCBudW0sIGZvcm1hdHRpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBBcnJheSB8fCB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGEgPSBudW0gPT09IG51bGw7XG4gICAgICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IHZhbHVlLmxlbmd0aDsgX2kgPCBfbGVuOyBfaSsrKSB7XG4gICAgICAgICAgICAgIHRyaXBsZSA9IHZhbHVlW19pXTtcbiAgICAgICAgICAgICAgYiA9IHRyaXBsZVswXSA9PT0gbnVsbDtcbiAgICAgICAgICAgICAgYyA9IHRyaXBsZVsxXSA9PT0gbnVsbDtcbiAgICAgICAgICAgICAgZCA9IG51bSA+PSB0cmlwbGVbMF07XG4gICAgICAgICAgICAgIGUgPSBudW0gPD0gdHJpcGxlWzFdO1xuICAgICAgICAgICAgICBpZiAoYSAmJiBiICYmIGMgfHwgIWEgJiYgKCFiICYmIGQgJiYgKGMgfHwgZSkgfHwgYiAmJiAhYyAmJiBlKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuYXBwbHlGb3JtYXR0aW5nKHRyaXBsZVsyXS5yZXBsYWNlKFwiLSVuXCIsIFN0cmluZygtbnVtKSksIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGb3JtYXR0aW5nKHJlc3VsdC5yZXBsYWNlKFwiJW5cIiwgU3RyaW5nKG51bSkpLCBudW0sIGZvcm1hdHRpbmcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfTtcblxuICAgICAgVHJhbnNsYXRvci5wcm90b3R5cGUuYXBwbHlOdW1iZXJzID0gZnVuY3Rpb24oc3RyLCBudW0pIHtcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoXCItJW5cIiwgU3RyaW5nKC1udW0pKTtcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoXCIlblwiLCBTdHJpbmcobnVtKSk7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5nZXRDb250ZXh0RGF0YSA9IGZ1bmN0aW9uKGRhdGEsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIGMsIGVxdWFsLCBrZXksIHZhbHVlLCBfaSwgX2xlbiwgX3JlZiwgX3JlZjE7XG5cbiAgICAgICAgaWYgKGRhdGEuY29udGV4dHMgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIF9yZWYgPSBkYXRhLmNvbnRleHRzO1xuICAgICAgICBmb3IgKF9pID0gMCwgX2xlbiA9IF9yZWYubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICBjID0gX3JlZltfaV07XG4gICAgICAgICAgZXF1YWwgPSB0cnVlO1xuICAgICAgICAgIF9yZWYxID0gYy5tYXRjaGVzO1xuICAgICAgICAgIGZvciAoa2V5IGluIF9yZWYxKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IF9yZWYxW2tleV07XG4gICAgICAgICAgICBlcXVhbCA9IGVxdWFsICYmIHZhbHVlID09PSBjb250ZXh0W2tleV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlcXVhbCkge1xuICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfTtcblxuICAgICAgVHJhbnNsYXRvci5wcm90b3R5cGUudXNlT3JpZ2luYWxUZXh0ID0gZnVuY3Rpb24odGV4dCwgbnVtLCBmb3JtYXR0aW5nKSB7XG4gICAgICAgIGlmIChudW0gPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5Rm9ybWF0dGluZyh0ZXh0LCBudW0sIGZvcm1hdHRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFwcGx5Rm9ybWF0dGluZyh0ZXh0LnJlcGxhY2UoXCIlblwiLCBTdHJpbmcobnVtKSksIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5hcHBseUZvcm1hdHRpbmcgPSBmdW5jdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcpIHtcbiAgICAgICAgdmFyIGluZCwgcmVnZXg7XG5cbiAgICAgICAgZm9yIChpbmQgaW4gZm9ybWF0dGluZykge1xuICAgICAgICAgIHJlZ2V4ID0gbmV3IFJlZ0V4cChcIiV7XCIgKyBpbmQgKyBcIn1cIiwgXCJnXCIpO1xuICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UocmVnZXgsIGZvcm1hdHRpbmdbaW5kXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gVHJhbnNsYXRvcjtcblxuICAgIH0pKCk7XG4gICAgdHJhbnNsYXRvciA9IG5ldyBUcmFuc2xhdG9yKCk7XG4gICAgaTE4biA9IHRyYW5zbGF0b3IudHJhbnNsYXRlO1xuICAgIGkxOG4udHJhbnNsYXRvciA9IHRyYW5zbGF0b3I7XG4gICAgaTE4bi5jcmVhdGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICB2YXIgdHJhbnM7XG5cbiAgICAgIHRyYW5zID0gbmV3IFRyYW5zbGF0b3IoKTtcbiAgICAgIGlmIChkYXRhICE9IG51bGwpIHtcbiAgICAgICAgdHJhbnMuYWRkKGRhdGEpO1xuICAgICAgfVxuICAgICAgdHJhbnMudHJhbnNsYXRlLmNyZWF0ZSA9IGkxOG4uY3JlYXRlO1xuICAgICAgdHJhbnMudHJhbnNsYXRlLnRyYW5zbGF0b3IgPSB0cmFucztcbiAgICAgIHJldHVybiB0cmFucy50cmFuc2xhdGU7XG4gICAgfTtcbiAgICByZXR1cm4gaTE4bjtcbiAgfSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJUb2RheVwiLFxuICB0b21vcnJvdzogXCJUb21vcnJvd1wiLFxuICB5ZXN0ZXJkYXk6IFwiWWVzdGVyZGF5XCIsXG4gIG5leHQ6IFwiTmV4dFwiLFxuICBsYXN0OiBcIkxhc3RcIixcbiAgdGhpczogXCJUaGlzXCIsXG4gIGluOiBcIkluXCIsXG4gIHN1bmRheTogXCJTdW5kYXlcIixcbiAgbW9uZGF5OiBcIk1vbmRheVwiLFxuICB0dWVzZGF5OiBcIlR1ZXNkYXlcIixcbiAgd2VkbmVzZGF5OiBcIldlZG5lc2RheVwiLFxuICB0aHVyc2RheTogXCJUaHVyc2RheVwiLFxuICBmcmlkYXk6IFwiRnJpZGF5XCIsXG4gIHNhdHVyZGF5OiBcIlNhdHVyZGF5XCIsXG4gIGlubWludXRlczogXCJpbiAle3RpbWVEZWx0YX0gbWludXRlc1wiLFxuICBpbmhvdXJzOiBcImluICV7dGltZURlbHRhfSBob3Vyc1wiLFxuICBpbmRheXM6IFwiaW4gJXt0aW1lRGVsdGF9IGRheXNcIixcbiAgaW53ZWVrczogXCJpbiAle3RpbWVEZWx0YX0gd2Vla3NcIixcbiAgaW5tb250aHM6IFwiaW4gJXt0aW1lRGVsdGF9IG1vbnRoc1wiLFxuICBkYXlzYWdvOiBcIiV7dGltZURlbHRhfSBkYXlzIGFnb1wiLFxuICB3ZWVrc2FnbzogXCIle3RpbWVEZWx0YX0gd2Vla3MgYWdvXCIsXG4gIG1vbnRoc2FnbzogXCIle3RpbWVEZWx0YX0gbW9udGhzIGFnb1wiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfSBtaW51dGVzIGFnb1wiLFxuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX0gaG91cnMgYWdvXCIsXG4gIHRpbWU6IFwiVGltZVwiLFxuICBub3c6IFwiTm93XCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0gbWludXRlc1wiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX0gaG91clwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSBob3VyXCIsXG4gIG1pbnV0ZTogXCJNaW51dGV8TWludXRlc3xtaW58bWluc3xtXCIsXG4gIGhvdXI6IFwiSG91cnxIb3Vyc3xofGhyfGhyc3xoXCIsXG4gIGRheTogXCJEYXl8RGF5c3xkXCIsXG4gIHdlZWs6IFwiV2Vla3xXZWVrc3x3XCIsXG4gIG1vbnRoOiBcIk1vbnRofE1vbnRoc3xNfG1vXCIsXG4gIHllYXI6IFwiWWVhcnxZZWFyc3x5fHlyfHlyc1wiLFxuICBhbmQ6IFwiQW5kXCIsXG4gIGF0OiBcIkF0XCIsXG4gIGZyb206IFwiRnJvbVwiLFxuICB0bzogXCJUb3xVbnRpbHxUaWxsXCIsXG4gIG9mOiBcIm9mXCIsXG4gIGZpcnN0OiBcImZpcnN0XCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuIiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwi5LuK5pelXCIsXG4gIHRvbW9ycm93OiBcIuaYjuaXpVwiLFxuICB5ZXN0ZXJkYXk6IFwi5pio5pelXCIsXG4gIG5leHQ6IFwi5qyhfOe/jHzmnaVcIiwgLy8gXCJUc3VnaS9Zb2t1L1JhaVwiIChleDogUmFpLXNodSA9IFNlbWFpbmUgcHJvY2hhaW5lKVxuICBsYXN0OiBcIuWJjXzljrt85YWIfOaYqFwiLCAvLyBcIk1hZS9LeW8vU2VuL1Nha3VcIiAoZXg6IFNlbi1zaHUgPSBTZW1haW5lIGRlcm5pw6hyZSlcbiAgdGhpczogXCLku4p85pysfOW9k1wiLCAvLyBcIkltYS9Ib24vVG9cIiAoZXg6IEtvbi1zaHUgPSBDZXR0ZSBzZW1haW5lKVxuICBpbjogXCLjgYLjgah8YXRvXCIsIC8vIFwiQXRvXCIgKFBvdXIgZGlyZSBcIkRhbnMgWCBtaW51dGVzXCIgLT4gXCJBdG8gWCBmdW5cIilcbiAgc3VuZGF5OiBcIuaXpeabnOaXpVwiLFxuICBtb25kYXk6IFwi5pyI5puc5pelXCIsXG4gIHR1ZXNkYXk6IFwi54Gr5puc5pelXCIsXG4gIHdlZG5lc2RheTogXCLmsLTmm5zml6VcIixcbiAgdGh1cnNkYXk6IFwi5pyo5puc5pelXCIsXG4gIGZyaWRheTogXCLph5Hmm5zml6VcIixcbiAgc2F0dXJkYXk6IFwi5Zyf5puc5pelXCIsXG4gIGlubWludXRlczogXCIle3RpbWVEZWx0YX3liIblvoxcIiwgLy8gWCBtaW51dGVzIGFmdGVyXG4gIGluaG91cnM6IFwiJXt0aW1lRGVsdGF95pmC6ZaT5b6MXCIsXG4gIGluZGF5czogXCIle3RpbWVEZWx0YX3ml6XlvoxcIixcbiAgaW53ZWVrczogXCIle3RpbWVEZWx0YX3pgLHplpPlvoxcIixcbiAgaW5tb250aHM6IFwiJXt0aW1lRGVsdGF944O25pyI5b6MXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF95pel5YmNXCIsIC8vIFggZGF5cyBhZ29cbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF96YCx6ZaT5YmNXCIsXG4gIG1vbnRoc2FnbzogXCIle3RpbWVEZWx0YX3jg7bmnIjliY1cIixcbiAgbWludXRlc2FnbzogXCIle3RpbWVEZWx0YX3liIbliY1cIiwgLy8gWCBtaW51dGVzIGFnb1xuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX3mmYLplpPliY1cIiwgLy8gWCBob3VycyBhZ29cbiAgdGltZTogXCLmmYLplpNcIixcbiAgbm93OiBcIuS7ilwiLCAvLyBJbWEgKE1haW50ZW5hbnQpXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0g5YiGXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IOWIhlwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IOaZgumWk1wiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSDmmYLplpNcIixcbiAgbWludXRlOiBcIuWIhnzjgbXjgpN844G344KTfGZ1blwiLFxuICBob3VyOiBcIuaZgumWk3zjgZjjgYvjgpN85pmCfOOBmFwiLFxuICBkYXk6IFwi5pelfOOBq+OBoVwiLFxuICB3ZWVrOiBcIumAsXzpgLHplpN844GX44KF44GGfOOBl+OCheOBhuOBi+OCk1wiLFxuICBtb250aDogXCLmnIh844O25pyIfOOBi+OBkuOBpHzjgYzjgaRcIixcbiAgeWVhcjogXCLlubR844Gt44KTXCIsXG4gIG9mOiBcIuOBrlwiLFxuICBmaXJzdDogXCLmnIDliJ1856ys5LiAfOWInXzmnIDliJ3jga5cIixcbiAgYW5kOiBcIuOBqHzjgYrjgojjgbNcIixcbiAgYXQ6IFwi44GrfOOBp1wiLFxuICBmcm9tOiBcIuOBi+OCiXzjgojjgopcIixcbiAgdG86IFwi44G+44GnfOOBvuOBp+OBq1wiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJBdWpvdXJkJ2h1aVwiLFxuICB0b21vcnJvdzogXCJEZW1haW5cIixcbiAgeWVzdGVyZGF5OiBcIkhpZXJcIixcbiAgbmV4dDogXCJwcm9jaGFpbnxwcm9jaGFpbmV8c3VpdmFudHxzdWl2YW50ZVwiLFxuICBsYXN0OiBcImRlcm5pZXJ8ZGVybmnDqHJlfHBhc3PDqXxwYXNzw6llXCIsXG4gIHRoaXM6IFwiY2V8Y2V0dGV8Y2V0XCIsXG4gIGluOiBcImRhbnNcIixcbiAgc3VuZGF5OiBcIkRpbWFuY2hlXCIsXG4gIG1vbmRheTogXCJMdW5kaVwiLFxuICB0dWVzZGF5OiBcIk1hcmRpXCIsXG4gIHdlZG5lc2RheTogXCJNZXJjcmVkaVwiLFxuICB0aHVyc2RheTogXCJKZXVkaVwiLFxuICBmcmlkYXk6IFwiVmVuZHJlZGlcIixcbiAgc2F0dXJkYXk6IFwiU2FtZWRpXCIsXG4gIGlubWludXRlczogXCJkYW5zICV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIGluaG91cnM6IFwiZGFucyAle3RpbWVEZWx0YX0gaGV1cmVzXCIsXG4gIGluZGF5czogXCJkYW5zICV7dGltZURlbHRhfSBqb3Vyc1wiLFxuICBpbndlZWtzOiBcImRhbnMgJXt0aW1lRGVsdGF9IHNlbWFpbmVzXCIsXG4gIGlubW9udGhzOiBcImRhbnMgJXt0aW1lRGVsdGF9IG1vaXNcIixcbiAgZGF5c2FnbzogXCJpbCB5IGEgJXt0aW1lRGVsdGF9IGpvdXJzXCIsXG4gIHdlZWtzYWdvOiBcImlsIHkgYSAle3RpbWVEZWx0YX0gc2VtYWluZXNcIixcbiAgbW9udGhzYWdvOiBcImlsIHkgYSAle3RpbWVEZWx0YX0gbW9pc1wiLFxuICBtaW51dGVzYWdvOiBcImlsIHkgYSAle3RpbWVEZWx0YX0gbWludXRlc1wiLFxuICBob3Vyc2FnbzogXCJpbCB5IGEgJXt0aW1lRGVsdGF9IGhldXJlc1wiLFxuICB0aW1lOiBcImhldXJlXCIsXG4gIG5vdzogXCJtYWludGVuYW50XCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0gbWludXRlc1wiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX0gaGV1cmVcIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX0gaGV1cmVcIixcbiAgbWludXRlOiBcIm1pbnV0ZXxtaW51dGVzfG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJoZXVyZXxoZXVyZXN8aFwiLFxuICBkYXk6IFwiam91cnxqb3Vyc3xqfGRcIixcbiAgd2VlazogXCJzZW1haW5lfHNlbWFpbmVzfHN8d1wiLFxuICBtb250aDogXCJtb2lzfE18bW9cIixcbiAgeWVhcjogXCJhbm7DqWV8YW5uw6llc3xhbnxhbnN8YXx5XCIsXG4gIGFuZDogXCJldFwiLFxuICBhdDogXCLDoHxhXCIsXG4gIGZyb206IFwiZGV8ZGVwdWlzfGR1XCIsXG4gIHRvOiBcIsOgfGF8anVzcXUnw6B8anVzcXUnYXV8YXVcIixcbiAgb2Y6IFwiZHV8ZGVcIixcbiAgZmlyc3Q6IFwicHJlbWllcnxwcmVtacOocmVcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7IiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwiSG9qZVwiLFxuICB0b21vcnJvdzogXCJBbWFuaMOjXCIsXG4gIHllc3RlcmRheTogXCJPbnRlbVwiLFxuICBuZXh0OiBcInByw7N4aW1vfHByw7N4aW1hfHNlZ3VpbnRlXCIsXG4gIGxhc3Q6IFwiw7psdGltb3zDumx0aW1hfHBhc3NhZG98cGFzc2FkYVwiLFxuICB0aGlzOiBcImVzdGV8ZXN0YVwiLFxuICBpbjogXCJlbXxkYXF1aSBhfGRhcXVpXCIsXG4gIHN1bmRheTogXCJEb21pbmdvXCIsXG4gIG1vbmRheTogXCJTZWd1bmRhLWZlaXJhXCIsXG4gIHR1ZXNkYXk6IFwiVGVyw6dhLWZlaXJhXCIsXG4gIHdlZG5lc2RheTogXCJRdWFydGEtZmVpcmFcIixcbiAgdGh1cnNkYXk6IFwiUXVpbnRhLWZlaXJhXCIsXG4gIGZyaWRheTogXCJTZXh0YS1mZWlyYVwiLFxuICBzYXR1cmRheTogXCJTw6FiYWRvXCIsXG4gIGlubWludXRlczogXCJlbSAle3RpbWVEZWx0YX0gbWludXRvc1wiLFxuICBpbmhvdXJzOiBcImVtICV7dGltZURlbHRhfSBob3Jhc1wiLFxuICBpbmRheXM6IFwiZW0gJXt0aW1lRGVsdGF9IGRpYXNcIixcbiAgaW53ZWVrczogXCJlbSAle3RpbWVEZWx0YX0gc2VtYW5hc1wiLFxuICBpbm1vbnRoczogXCJlbSAle3RpbWVEZWx0YX0gbWVzZXNcIixcbiAgZGF5c2FnbzogXCJow6EgJXt0aW1lRGVsdGF9IGRpYXNcIixcbiAgd2Vla3NhZ286IFwiaMOhICV7dGltZURlbHRhfSBzZW1hbmFzXCIsXG4gIG1vbnRoc2FnbzogXCJow6EgJXt0aW1lRGVsdGF9IG1lc2VzXCIsXG4gIG1pbnV0ZXNhZ286IFwiaMOhICV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIGhvdXJzYWdvOiBcImjDoSAle3RpbWVEZWx0YX0gaG9yYXNcIixcbiAgYWdvc3VmZml4OiBcImF0csOhc3xhdHJhc1wiLFxuICB0aW1lOiBcImhvcmFcIixcbiAgbm93OiBcImFnb3JhXCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0gbWludXRvc1wiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX0gaG9yYVwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSBob3JhXCIsXG4gIG1pbnV0ZTogXCJtaW51dG98bWludXRvc3xtaW58bWluc3xtXCIsXG4gIGhvdXI6IFwiaG9yYXxob3Jhc3xoXCIsXG4gIGRheTogXCJkaWF8ZGlhc3xkXCIsXG4gIHdlZWs6IFwic2VtYW5hfHNlbWFuYXN8c3x3XCIsXG4gIG1vbnRoOiBcIm3DqnN8bWVzZXN8TXxtb1wiLFxuICB5ZWFyOiBcImFub3xhbm9zfGF8eVwiLFxuICBhbmQ6IFwiZVwiLFxuICBhdDogXCLDoHN8YXN8w6B8YVwiLFxuICBmcm9tOiBcImRlfGRlc2RlXCIsXG4gIHRvOiBcImF0w6l8YW98w6BcIixcbiAgb2Y6IFwiZG98ZGF8ZGVcIixcbiAgZmlyc3Q6IFwicHJpbWVpcm98cHJpbWVpcmFcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7IiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwiSGV1dGVcIixcbiAgdG9tb3Jyb3c6IFwiTW9yZ2VuXCIsXG4gIHllc3RlcmRheTogXCJHZXN0ZXJuXCIsXG4gIG5leHQ6IFwibsOkY2hzdGVyfG7DpGNoc3RlfG7DpGNoc3Rlc3xuw6RjaHN0ZW5cIixcbiAgbGFzdDogXCJsZXR6dGVyfGxldHp0ZXxsZXR6dGVzXCIsXG4gIHRoaXM6IFwiZGllc2VyfGRpZXNlfGRpZXNlc1wiLFxuICBpbjogXCJpblwiLFxuICBzdW5kYXk6IFwiU29ubnRhZ1wiLFxuICBtb25kYXk6IFwiTW9udGFnXCIsXG4gIHR1ZXNkYXk6IFwiRGllbnN0YWdcIixcbiAgd2VkbmVzZGF5OiBcIk1pdHR3b2NoXCIsXG4gIHRodXJzZGF5OiBcIkRvbm5lcnN0YWdcIixcbiAgZnJpZGF5OiBcIkZyZWl0YWdcIixcbiAgc2F0dXJkYXk6IFwiU2Ftc3RhZ1wiLFxuICBpbm1pbnV0ZXM6IFwiaW4gJXt0aW1lRGVsdGF9IE1pbnV0ZW5cIixcbiAgaW5ob3VyczogXCJpbiAle3RpbWVEZWx0YX0gU3R1bmRlblwiLFxuICBpbmRheXM6IFwiaW4gJXt0aW1lRGVsdGF9IFRhZ2VuXCIsXG4gIGlud2Vla3M6IFwiaW4gJXt0aW1lRGVsdGF9IFdvY2hlblwiLFxuICBpbm1vbnRoczogXCJpbiAle3RpbWVEZWx0YX0gTW9uYXRlblwiLFxuICBkYXlzYWdvOiBcInZvciAle3RpbWVEZWx0YX0gVGFnZW5cIixcbiAgd2Vla3NhZ286IFwidm9yICV7dGltZURlbHRhfSBXb2NoZW5cIixcbiAgbW9udGhzYWdvOiBcInZvciAle3RpbWVEZWx0YX0gTW9uYXRlblwiLFxuICBtaW51dGVzYWdvOiBcInZvciAle3RpbWVEZWx0YX0gTWludXRlblwiLFxuICBob3Vyc2FnbzogXCJ2b3IgJXt0aW1lRGVsdGF9IFN0dW5kZW5cIixcbiAgdGltZTogXCJaZWl0XCIsXG4gIG5vdzogXCJqZXR6dFwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF9IE1pbnV0ZW5cIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0gTWludXRlblwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IFN0dW5kZVwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSBTdHVuZGVcIixcbiAgbWludXRlOiBcIk1pbnV0ZXxNaW51dGVufG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJTdHVuZGV8U3R1bmRlbnxTdGR8aFwiLFxuICBkYXk6IFwiVGFnfFRhZ2V8ZHx0XCIsXG4gIHdlZWs6IFwiV29jaGV8V29jaGVufHdcIixcbiAgbW9udGg6IFwiTW9uYXR8TW9uYXRlfE1vbmF0c3xNfG1vXCIsXG4gIHllYXI6IFwiSmFocnxKYWhyZXxqfHlcIixcbiAgYW5kOiBcInVuZFwiLFxuICBhdDogXCJ1bVwiLFxuICBmcm9tOiBcInZvbnxhYlwiLFxuICB0bzogXCJiaXN8YmlzIHp1bVwiLFxuICBvZjogXCJkZXN8dm9tXCIsXG4gIGZpcnN0OiBcImVyc3RlcnxlcnN0ZXxlcnN0ZXNcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7IiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwiVmFuZGFhZ1wiLFxuICB0b21vcnJvdzogXCJNb3JnZW5cIixcbiAgeWVzdGVyZGF5OiBcIkdpc3RlcmVuXCIsXG4gIG5leHQ6IFwidm9sZ2VuZGVcIixcbiAgbGFzdDogXCJ2b3JpZ2V8bGFhdHN0ZVwiLFxuICB0aGlzOiBcImRlemV8ZGl0XCIsXG4gIGluOiBcIm92ZXJcIixcbiAgc3VuZGF5OiBcInpvbmRhZ1wiLFxuICBtb25kYXk6IFwibWFhbmRhZ1wiLFxuICB0dWVzZGF5OiBcImRpbnNkYWdcIixcbiAgd2VkbmVzZGF5OiBcIndvZW5zZGFnXCIsXG4gIHRodXJzZGF5OiBcImRvbmRlcmRhZ1wiLFxuICBmcmlkYXk6IFwidnJpamRhZ1wiLFxuICBzYXR1cmRheTogXCJ6YXRlcmRhZ1wiLFxuICBpbm1pbnV0ZXM6IFwib3ZlciAle3RpbWVEZWx0YX0gbWludXRlblwiLFxuICBpbmhvdXJzOiBcIm92ZXIgJXt0aW1lRGVsdGF9IHVyZW5cIixcbiAgaW5kYXlzOiBcIm92ZXIgJXt0aW1lRGVsdGF9IGRhZ2VuXCIsXG4gIGlud2Vla3M6IFwib3ZlciAle3RpbWVEZWx0YX0gd2VrZW5cIixcbiAgaW5tb250aHM6IFwib3ZlciAle3RpbWVEZWx0YX0gbWFhbmRlblwiLFxuICBkYXlzYWdvOiBcIiV7dGltZURlbHRhfSBkYWdlbiBnZWxlZGVuXCIsXG4gIHdlZWtzYWdvOiBcIiV7dGltZURlbHRhfSB3ZWtlbiBnZWxlZGVuXCIsXG4gIG1vbnRoc2FnbzogXCIle3RpbWVEZWx0YX0gbWFhbmRlbiBnZWxlZGVuXCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9IG1pbnV0ZW4gZ2VsZWRlblwiLFxuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX0gdXJlbiBnZWxlZGVuXCIsXG4gIHRpbWU6IFwidGlqZFwiLFxuICBub3c6IFwibnVcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dGVuXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0ZW5cIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSB1dXJcIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX0gdXVyXCIsXG4gIG1pbnV0ZTogXCJtaW51dXR8bWludXRlbnxtaW58bWluc3xtXCIsXG4gIGhvdXI6IFwidXVyfHVyZW58dXxoXCIsXG4gIGRheTogXCJkYWd8ZGFnZW58ZFwiLFxuICB3ZWVrOiBcIndlZWt8d2VrZW58d1wiLFxuICBtb250aDogXCJtYWFuZHxtYWFuZGVufE18bW9cIixcbiAgeWVhcjogXCJqYWFyfGphcmVufGp8eVwiLFxuICBhbmQ6IFwiZW5cIixcbiAgYXQ6IFwib21cIixcbiAgZnJvbTogXCJ2YW58dmFuYWZcIixcbiAgdG86IFwidG90fHRvdCBlbiBtZXRcIixcbiAgb2Y6IFwidmFuXCIsXG4gIGZpcnN0OiBcImVlcnN0ZVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDtcbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIkhveVwiLFxuICB0b21vcnJvdzogXCJNYcOxYW5hXCIsXG4gIHllc3RlcmRheTogXCJBeWVyXCIsXG4gIG5leHQ6IFwicHLDs3hpbW98cHLDs3hpbWF8c2lndWllbnRlXCIsXG4gIGxhc3Q6IFwiw7psdGltb3zDumx0aW1hfHBhc2Fkb3xwYXNhZGFcIixcbiAgdGhpczogXCJlc3RlfGVzdGFcIixcbiAgaW46IFwiZW58ZGVudHJvIGRlXCIsXG4gIHN1bmRheTogXCJEb21pbmdvXCIsXG4gIG1vbmRheTogXCJMdW5lc1wiLFxuICB0dWVzZGF5OiBcIk1hcnRlc1wiLFxuICB3ZWRuZXNkYXk6IFwiTWnDqXJjb2xlc1wiLFxuICB0aHVyc2RheTogXCJKdWV2ZXNcIixcbiAgZnJpZGF5OiBcIlZpZXJuZXNcIixcbiAgc2F0dXJkYXk6IFwiU8OhYmFkb1wiLFxuICBpbm1pbnV0ZXM6IFwiZW4gJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgaW5ob3VyczogXCJlbiAle3RpbWVEZWx0YX0gaG9yYXNcIixcbiAgaW5kYXlzOiBcImVuICV7dGltZURlbHRhfSBkw61hc1wiLFxuICBpbndlZWtzOiBcImVuICV7dGltZURlbHRhfSBzZW1hbmFzXCIsXG4gIGlubW9udGhzOiBcImVuICV7dGltZURlbHRhfSBtZXNlc1wiLFxuICBkYXlzYWdvOiBcImhhY2UgJXt0aW1lRGVsdGF9IGTDrWFzXCIsXG4gIHdlZWtzYWdvOiBcImhhY2UgJXt0aW1lRGVsdGF9IHNlbWFuYXNcIixcbiAgbW9udGhzYWdvOiBcImhhY2UgJXt0aW1lRGVsdGF9IG1lc2VzXCIsXG4gIG1pbnV0ZXNhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gbWludXRvc1wiLFxuICBob3Vyc2FnbzogXCJoYWNlICV7dGltZURlbHRhfSBob3Jhc1wiLFxuICBhZ29zdWZmaXg6IFwiYXRyw6FzfGF0cmFzXCIsXG4gIHRpbWU6IFwiaG9yYVwiLFxuICBub3c6IFwiYWhvcmFcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBob3JhXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IGhvcmFcIixcbiAgbWludXRlOiBcIm1pbnV0b3xtaW51dG9zfG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJob3JhfGhvcmFzfGhcIixcbiAgZGF5OiBcImTDrWF8ZMOtYXN8ZFwiLFxuICB3ZWVrOiBcInNlbWFuYXxzZW1hbmFzfHN8d1wiLFxuICBtb250aDogXCJtZXN8bWVzZXN8TXxtb1wiLFxuICB5ZWFyOiBcImHDsW98YcOxb3N8YXx5XCIsXG4gIGFuZDogXCJ5XCIsXG4gIGF0OiBcImEgbGFzfGEgbGF8YXxlblwiLFxuICBmcm9tOiBcImRlfGRlc2RlXCIsXG4gIHRvOiBcImF8aGFzdGFcIixcbiAgb2Y6IFwiZGV8ZGVsXCIsXG4gIGZpcnN0OiBcInByaW1lcnxwcmltZXJhXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuXG4iLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJPZ2dpXCIsXG4gIHRvbW9ycm93OiBcIkRvbWFuaVwiLFxuICB5ZXN0ZXJkYXk6IFwiSWVyaVwiLFxuICBuZXh0OiBcInByb3NzaW1vfHByb3NzaW1hfHNlZ3VlbnRlXCIsXG4gIGxhc3Q6IFwidWx0aW1vfHVsdGltYXxzY29yc298c2NvcnNhfHBhc3NhdG98cGFzc2F0YVwiLFxuICB0aGlzOiBcInF1ZXN0b3xxdWVzdGFcIixcbiAgaW46IFwiaW58dHJhXCIsXG4gIHN1bmRheTogXCJEb21lbmljYVwiLFxuICBtb25kYXk6IFwiTHVuZWTDrFwiLFxuICB0dWVzZGF5OiBcIk1hcnRlZMOsXCIsXG4gIHdlZG5lc2RheTogXCJNZXJjb2xlZMOsXCIsXG4gIHRodXJzZGF5OiBcIkdpb3ZlZMOsXCIsXG4gIGZyaWRheTogXCJWZW5lcmTDrFwiLFxuICBzYXR1cmRheTogXCJTYWJhdG9cIixcbiAgaW5taW51dGVzOiBcInRyYSAle3RpbWVEZWx0YX0gbWludXRpXCIsXG4gIGluaG91cnM6IFwidHJhICV7dGltZURlbHRhfSBvcmVcIixcbiAgaW5kYXlzOiBcInRyYSAle3RpbWVEZWx0YX0gZ2lvcm5pXCIsXG4gIGlud2Vla3M6IFwidHJhICV7dGltZURlbHRhfSBzZXR0aW1hbmVcIixcbiAgaW5tb250aHM6IFwidHJhICV7dGltZURlbHRhfSBtZXNpXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9IGdpb3JuaSBmYVwiLFxuICB3ZWVrc2FnbzogXCIle3RpbWVEZWx0YX0gc2V0dGltYW5lIGZhXCIsXG4gIG1vbnRoc2FnbzogXCIle3RpbWVEZWx0YX0gbWVzaSBmYVwiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfSBtaW51dGkgZmFcIixcbiAgaG91cnNhZ286IFwiJXt0aW1lRGVsdGF9IG9yZSBmYVwiLFxuICB0aW1lOiBcIm9yYVwiLFxuICBub3c6IFwiYWRlc3NvfG9yYVwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF9IG1pbnV0aVwiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfSBtaW51dGlcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBvcmFcIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX0gb3JhXCIsXG4gIG1pbnV0ZTogXCJtaW51dG98bWludXRpfG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJvcmF8b3JlfGhcIixcbiAgZGF5OiBcImdpb3Jub3xnaW9ybml8Z3xkXCIsXG4gIHdlZWs6IFwic2V0dGltYW5hfHNldHRpbWFuZXxzfHdcIixcbiAgbW9udGg6IFwibWVzZXxtZXNpfE18bW9cIixcbiAgeWVhcjogXCJhbm5vfGFubml8YXx5XCIsXG4gIGFuZDogXCJlXCIsXG4gIGF0OiBcImFsbGV8YWxsYXxhXCIsXG4gIGZyb206IFwiZGF8ZGFsfGRhbGxhXCIsXG4gIHRvOiBcImF8ZmlubyBhfGZpbm8gYWx8ZmlubyBhbGxhXCIsXG4gIG9mOiBcImRlbHxkZWxsYXxkaVwiLFxuICBmaXJzdDogXCJwcmltb3xwcmltYVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDtcblxuIiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwi0KHQtdCz0L7QtNC90Y9cIixcbiAgdG9tb3Jyb3c6IFwi0JfQsNCy0YLRgNCwXCIsXG4gIHllc3RlcmRheTogXCLQktGH0LXRgNCwXCIsXG4gIG5leHQ6IFwi0YHQu9C10LTRg9GO0YnQuNC5fNGB0LvQtdC00YPRjtGJ0LDRj3zRgdC70LXQtNGD0Y7RidC10LV80YHQu9C10LTRg9GO0YnQuNC1XCIsXG4gIGxhc3Q6IFwi0L/QvtGB0LvQtdC00L3QuNC5fNC/0L7RgdC70LXQtNC90Y/Rj3zQv9C+0YHQu9C10LTQvdC10LV80L/QvtGB0LvQtdC00L3QuNC1fNC/0YDQvtGI0LvRi9C5fNC/0YDQvtGI0LvQsNGPfNC/0YDQvtGI0LvQvtC1fNC/0YDQvtGI0LvRi9C1XCIsXG4gIHRoaXM6IFwi0Y3RgtC+0YJ80Y3RgtCwfNGN0YLQvnzRjdGC0LhcIixcbiAgaW46IFwi0YfQtdGA0LXQt1wiLFxuICBzdW5kYXk6IFwi0JLQvtGB0LrRgNC10YHQtdC90YzQtXzQktC+0YHQutGA0LXRgdC10L3RjNGPXCIsXG4gIG1vbmRheTogXCLQn9C+0L3QtdC00LXQu9GM0L3QuNC6fNCf0L7QvdC10LTQtdC70YzQvdC40LrQsFwiLFxuICB0dWVzZGF5OiBcItCS0YLQvtGA0L3QuNC6fNCS0YLQvtGA0L3QuNC60LBcIixcbiAgd2VkbmVzZGF5OiBcItCh0YDQtdC00LB80KHRgNC10LTRi1wiLFxuICB0aHVyc2RheTogXCLQp9C10YLQstC10YDQs3zQp9C10YLQstC10YDQs9CwXCIsXG4gIGZyaWRheTogXCLQn9GP0YLQvdC40YbQsHzQn9GP0YLQvdC40YbRi1wiLFxuICBzYXR1cmRheTogXCLQodGD0LHQsdC+0YLQsHzQodGD0LHQsdC+0YLRi1wiLFxuICBpbm1pbnV0ZXM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LzQuNC90YPRgnzQvNC40L3Rg9GC0YN80LzQuNC90YPRgtGLXCIsXG4gIGluaG91cnM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0YfQsNGBfNGH0LDRgdCwfNGH0LDRgdC+0LJcIixcbiAgaW5kYXlzOiBcItGH0LXRgNC10LcgJXt0aW1lRGVsdGF9INC00LXQvdGMfNC00L3Rj3zQtNC90LXQuVwiLFxuICBpbndlZWtzOiBcItGH0LXRgNC10LcgJXt0aW1lRGVsdGF9INC90LXQtNC10LvRjnzQvdC10LTQtdC70Lh80L3QtdC00LXQu9GMXCIsXG4gIGlubW9udGhzOiBcItGH0LXRgNC10LcgJXt0aW1lRGVsdGF9INC80LXRgdGP0YZ80LzQtdGB0Y/RhtCwfNC80LXRgdGP0YbQtdCyXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9INC00LXQvdGMfNC00L3Rj3zQtNC90LXQuSDQvdCw0LfQsNC0XCIsXG4gIHdlZWtzYWdvOiBcIiV7dGltZURlbHRhfSDQvdC10LTQtdC70Y580L3QtdC00LXQu9C4fNC90LXQtNC10LvRjCDQvdCw0LfQsNC0XCIsXG4gIG1vbnRoc2FnbzogXCIle3RpbWVEZWx0YX0g0LzQtdGB0Y/RhnzQvNC10YHRj9GG0LB80LzQtdGB0Y/RhtC10LIg0L3QsNC30LDQtFwiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfSDQvNC40L3Rg9GCfNC80LjQvdGD0YLRg3zQvNC40L3Rg9GC0Ysg0L3QsNC30LDQtFwiLFxuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX0g0YfQsNGBfNGH0LDRgdCwfNGH0LDRgdC+0LIg0L3QsNC30LDQtFwiLFxuICB0aW1lOiBcItCy0YDQtdC80Y9cIixcbiAgbm93OiBcItGB0LXQudGH0LDRgVwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRi1wiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfSDQvNC40L3Rg9GCfNC80LjQvdGD0YLRg3zQvNC40L3Rg9GC0YtcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSDRh9Cw0YF80YfQsNGB0LB80YfQsNGB0L7QslwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSDRh9Cw0YF80YfQsNGB0LB80YfQsNGB0L7QslwiLFxuICBtaW51dGU6IFwi0LzQuNC90YPRgtCwfNC80LjQvdGD0YLRi3zQvNC40L3Rg9GCfNC80LjQvXzQvFwiLFxuICBob3VyOiBcItGH0LDRgXzRh9Cw0YHQsHzRh9Cw0YHQvtCyfNGHXCIsXG4gIGRheTogXCLQtNC10L3RjHzQtNC90Y980LTQvdC10Ll80LRcIixcbiAgd2VlazogXCLQvdC10LTQtdC70Y980L3QtdC00LXQu9C4fNC90LXQtNC10LvRjHzQvXzQvdC10LRcIixcbiAgbW9udGg6IFwi0LzQtdGB0Y/RhnzQvNC10YHRj9GG0LB80LzQtdGB0Y/RhtC10LJ80LzQtdGBfNC8XCIsXG4gIHllYXI6IFwi0LPQvtC0fNCz0L7QtNCwfNC70LXRgnzQs3zQu1wiLFxuICBhbmQ6IFwi0LhcIixcbiAgYXQ6IFwi0LJcIixcbiAgZnJvbTogXCLRgXzQvtGCXCIsXG4gIHRvOiBcItC00L580LpcIixcbiAgb2Y6IFwi0LjQt3zQvtGCXCIsXG4gIGZpcnN0OiBcItC/0LXRgNCy0YvQuXzQv9C10YDQstCw0Y980L/QtdGA0LLQvtC1fNC/0LXRgNCy0YvQtVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDtcbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcItCh0YzQvtCz0L7QtNC90ZZcIixcbiAgdG9tb3Jyb3c6IFwi0JfQsNCy0YLRgNCwXCIsXG4gIHllc3RlcmRheTogXCLQktGH0L7RgNCwXCIsXG4gIG5leHQ6IFwi0L3QsNGB0YLRg9C/0L3QuNC5fNC90LDRgdGC0YPQv9C90LB80L3QsNGB0YLRg9C/0L3QtXzQvdCw0YHRgtGD0L/QvdGWXCIsXG4gIGxhc3Q6IFwi0L7RgdGC0LDQvdC90ZbQuXzQvtGB0YLQsNC90L3Rj3zQvtGB0YLQsNC90L3RlHzQvtGB0YLQsNC90L3RlnzQvNC40L3Rg9C70LjQuXzQvNC40L3Rg9C70LB80LzQuNC90YPQu9C1fNC80LjQvdGD0LvRllwiLFxuICB0aGlzOiBcItGG0LXQuXzRhtGPfNGG0LV80YbRllwiLFxuICBpbjogXCLRh9C10YDQtdC3XCIsXG4gIHN1bmRheTogXCLQndC10LTRltC70Y980J3QtdC00ZbQu9GWXCIsXG4gIG1vbmRheTogXCLQn9C+0L3QtdC00ZbQu9C+0Lp80J/QvtC90LXQtNGW0LvQutCwXCIsXG4gIHR1ZXNkYXk6IFwi0JLRltCy0YLQvtGA0L7QunzQktGW0LLRgtC+0YDQutCwXCIsXG4gIHdlZG5lc2RheTogXCLQodC10YDQtdC00LB80KHQtdGA0LXQtNC4XCIsXG4gIHRodXJzZGF5OiBcItCn0LXRgtCy0LXRgHzQp9C10YLQstC10YDQs9CwXCIsXG4gIGZyaWRheTogXCLQnyfRj9GC0L3QuNGG0Y980J8n0Y/RgtC90LjRhtGWXCIsXG4gIHNhdHVyZGF5OiBcItCh0YPQsdC+0YLQsHzQodGD0LHQvtGC0LhcIixcbiAgaW5taW51dGVzOiBcItGH0LXRgNC10LcgJXt0aW1lRGVsdGF9INGF0LLQuNC70LjQvdGDfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvVwiLFxuICBpbmhvdXJzOiBcItGH0LXRgNC10LcgJXt0aW1lRGVsdGF9INCz0L7QtNC40L3Rg3zQs9C+0LTQuNC90Lh80LPQvtC00LjQvVwiLFxuICBpbmRheXM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LTQtdC90Yx80LTQvdGWfNC00L3RltCyXCIsXG4gIGlud2Vla3M6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0YLQuNC20LTQtdC90Yx80YLQuNC20L3RlnzRgtC40LbQvdGW0LJcIixcbiAgaW5tb250aHM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LzRltGB0Y/RhtGMfNC80ZbRgdGP0YbRlnzQvNGW0YHRj9GG0ZbQslwiLFxuICBkYXlzYWdvOiBcIiV7dGltZURlbHRhfSDQtNC10L3RjHzQtNC90ZZ80LTQvdGW0LIg0YLQvtC80YNcIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF9INGC0LjQttC00LXQvdGMfNGC0LjQttC90ZZ80YLQuNC20L3RltCyINGC0L7QvNGDXCIsXG4gIG1vbnRoc2FnbzogXCIle3RpbWVEZWx0YX0g0LzRltGB0Y/RhtGMfNC80ZbRgdGP0YbRlnzQvNGW0YHRj9GG0ZbQsiDRgtC+0LzRg1wiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfSDRhdCy0LjQu9C40L3Rg3zRhdCy0LjQu9C40L3QuHzRhdCy0LjQu9C40L0g0YLQvtC80YNcIixcbiAgaG91cnNhZ286IFwiJXt0aW1lRGVsdGF9INCz0L7QtNC40L3Rg3zQs9C+0LTQuNC90Lh80LPQvtC00LjQvSDRgtC+0LzRg1wiLFxuICB0aW1lOiBcItGH0LDRgVwiLFxuICBub3c6IFwi0LfQsNGA0LDQt1wiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF9INGF0LLQuNC70LjQvdGDfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvVwiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfSDRhdCy0LjQu9C40L3Rg3zRhdCy0LjQu9C40L3QuHzRhdCy0LjQu9C40L1cIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSDQs9C+0LTQuNC90YN80LPQvtC00LjQvdC4fNCz0L7QtNC40L1cIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX0g0LPQvtC00LjQvdGDfNCz0L7QtNC40L3QuHzQs9C+0LTQuNC9XCIsXG4gIG1pbnV0ZTogXCLRhdCy0LjQu9C40L3QsHzRhdCy0LjQu9C40L3QuHzRhdCy0LjQu9C40L180YXQsnzQvFwiLFxuICBob3VyOiBcItCz0L7QtNC40L3QsHzQs9C+0LTQuNC90Lh80LPQvtC00LjQvXzQs9C+0LR80LNcIixcbiAgZGF5OiBcItC00LXQvdGMfNC00L3RlnzQtNC90ZbQsnzQtFwiLFxuICB3ZWVrOiBcItGC0LjQttC00LXQvdGMfNGC0LjQttC90ZZ80YLQuNC20L3RltCyfNGCfNGC0LjQtlwiLFxuICBtb250aDogXCLQvNGW0YHRj9GG0Yx80LzRltGB0Y/RhtGWfNC80ZbRgdGP0YbRltCyfNC80ZbRgXzQvFwiLFxuICB5ZWFyOiBcItGA0ZbQunzRgNC+0LrQuHzRgNC+0LrRltCyfNGAXCIsXG4gIGFuZDogXCLRllwiLFxuICBhdDogXCLQvlwiLFxuICBmcm9tOiBcItC3fNCy0ZbQtFwiLFxuICB0bzogXCLQtNC+fNC6XCIsXG4gIG9mOiBcItC3fNCy0ZbQtFwiLFxuICBmaXJzdDogXCLQv9C10YDRiNC40Ll80L/QtdGA0YjQsHzQv9C10YDRiNC1fNC/0LXRgNGI0ZZcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG4iLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCLku4rlpKlcIixcbiAgdG9tb3Jyb3c6IFwi5piO5aSpXCIsXG4gIHllc3RlcmRheTogXCLmmKjlpKlcIixcbiAgLy8gRm9ybWFsIChcIuS4i+S4gOWAi1wiL1wi5LiL5LiA5LiqXCIpIGFuZCBzaG9ydCBwcmVmaXggKFwi5LiLXCIsIGUuZy4gXCLkuIvmmJ/mnJ/kuIBcIi9cIuS4i+WRqOS4gFwiKSBmb3JtcyxcbiAgLy8gY292ZXJpbmcgYm90aCBUcmFkaXRpb25hbCBhbmQgU2ltcGxpZmllZCBzY3JpcHQuXG4gIG5leHQ6IFwi5LiL5LiA5YCLfOS4i+S4gOS4qnzkuItcIixcbiAgLy8gXCLmnIDlvowv5pyA5ZCOXCIgKFwibGFzdFwiIGluIGdlbmVyYWwpLCBcIuS4iuS4gOWAiy/kuIrkuIDkuKpcIiAoXCJwcmV2aW91c1wiKSwgYW5kIHNob3J0IFwi5LiKXCJcbiAgLy8gKGUuZy4gXCLkuIrmmJ/mnJ/kuIBcIi9cIuS4iuWRqOS4gFwiKS5cbiAgbGFzdDogXCLmnIDlvox85pyA5ZCOfOS4iuS4gOWAi3zkuIrkuIDkuKp85LiKXCIsXG4gIC8vIFwi6YCZ5YCLL+i/meS4qlwiIChmb3JtYWwpIGFuZCBzaG9ydCBcIumAmS/ov5lcIiAoZS5nLiBcIumAmeaYn+acn+S4gFwiL1wi6L+Z5ZGo5LiAXCIpLlxuICB0aGlzOiBcIumAmeWAi3zov5nkuKp86YCZfOi/mVwiLFxuICBpbjogXCLlnKhcIixcbiAgLy8gXCLnpq7mi5wv56S85oucXCIgKGNvbGxvcXVpYWwsIG9yaWdpbmFsbHkgXCJ3b3JzaGlwIGRheVwiKSBpcyBhbHNvIGV4dHJlbWVseSBjb21tb25cbiAgLy8gZm9yIHdlZWtkYXlzLCBlLmcuIFwi56au5ouc5LiAXCIvXCLnpLzmi5zkuIBcIiBmb3IgTW9uZGF5LlxuICBzdW5kYXk6IFwi5pif5pyf5pelfOWRqOaXpXzpgLHml6V85pif5pyf5aSpfOemruaLnOaXpXznpLzmi5zml6V856au5ouc5aSpfOekvOaLnOWkqVwiLFxuICBtb25kYXk6IFwi5pif5pyf5LiAfOWRqOS4gHzpgLHkuIB856au5ouc5LiAfOekvOaLnOS4gFwiLFxuICB0dWVzZGF5OiBcIuaYn+acn+S6jHzlkajkuox86YCx5LqMfOemruaLnOS6jHznpLzmi5zkuoxcIixcbiAgd2VkbmVzZGF5OiBcIuaYn+acn+S4iXzlkajkuIl86YCx5LiJfOemruaLnOS4iXznpLzmi5zkuIlcIixcbiAgdGh1cnNkYXk6IFwi5pif5pyf5ZubfOWRqOWbm3zpgLHlm5t856au5ouc5ZubfOekvOaLnOWbm1wiLFxuICBmcmlkYXk6IFwi5pif5pyf5LqUfOWRqOS6lHzpgLHkupR856au5ouc5LqUfOekvOaLnOS6lFwiLFxuICBzYXR1cmRheTogXCLmmJ/mnJ/lha185ZGo5YWtfOmAseWFrXznpq7mi5zlha1856S85ouc5YWtXCIsXG4gIGlubWludXRlczogXCIle3RpbWVEZWx0YX3liIbpkJjlvoxcIixcbiAgaW5ob3VyczogXCIle3RpbWVEZWx0YX3lsI/mmYLlvoxcIixcbiAgaW5kYXlzOiBcIiV7dGltZURlbHRhfeWkqeW+jFwiLFxuICBpbndlZWtzOiBcIiV7dGltZURlbHRhfemAseW+jFwiLFxuICBpbm1vbnRoczogXCIle3RpbWVEZWx0YX3lgIvmnIjlvoxcIixcbiAgZGF5c2FnbzogXCIle3RpbWVEZWx0YX3lpKnliY1cIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF96YCx5YmNXCIsXG4gIG1vbnRoc2FnbzogXCIle3RpbWVEZWx0YX3lgIvmnIjliY1cIixcbiAgbWludXRlc2FnbzogXCIle3RpbWVEZWx0YX3liIbpkJjliY1cIixcbiAgaG91cnNhZ286IFwiJXt0aW1lRGVsdGF95bCP5pmC5YmNXCIsXG4gIC8vIE5vdCB1c2VkIGZvciBkaXNwbGF5LCBvbmx5IGZvciBtYXRjaGluZyBcIk4gdW5pdFwiICsgdGhpcyBtYXJrZXIgKGUuZy5cbiAgLy8gXCIy5aSp5b6MXCIvXCIy5aSp5ZCOXCIgPSBcIjIgZGF5c1wiICsgXCLlvoxcIi9cIuWQjlwiID0gXCIyIGRheXMgbGF0ZXJcIikuIEtlcHQgc2VwYXJhdGUgZnJvbVxuICAvLyB0aGUgJXt0aW1lRGVsdGF9IHRlbXBsYXRlcyBhYm92ZSAod2hpY2ggYXJlIGFsc28gdXNlZCB2ZXJiYXRpbSBpblxuICAvLyBhdXRvc3VnZ2VzdCBsYWJlbHMgYW5kIGRvbid0IHN1cHBvcnQgXCJ8XCIgYWx0ZXJuYXRpdmVzIHRoZSBzYW1lIHdheSkuXG4gIC8vIFwi5LmL5b6ML+S5i+WQjlwiIGFuZCBcIuS7peW+jC/ku6XlkI5cIiBhcmUgZXF1YWxseSBjb21tb24gYWx0ZXJuYXRpdmVzIHRvIGJhcmUgXCLlvowv5ZCOXCJcbiAgLy8gKGUuZy4gXCIy5aSp5LmL5b6MXCIsIFwiM+WAi+aciOS7peW+jFwiKS5cbiAgbGF0ZXI6IFwi5b6MfOWQjnzkuYvlvox85LmL5ZCOfOS7peW+jHzku6XlkI5cIixcbiAgdGltZTogXCLmmYLplpN85pe26Ze0XCIsXG4gIG5vdzogXCLnj77lnKh8546w5ZyoXCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX3liIbpkJhcIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX3liIbpkJhcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfeWwj+aZglwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfeWwj+aZglwiLFxuICBtaW51dGU6IFwi5YiG6ZCYfOWIhumSn3zliIZcIixcbiAgaG91cjogXCLlsI/mmYJ85bCP5pe2fOaZgnzml7ZcIixcbiAgZGF5OiBcIuWkqXzml6VcIixcbiAgd2VlazogXCLpgLF85ZGofOaYn+acn3zlgIvmmJ/mnJ985Liq5pif5pyffOemruaLnHznpLzmi5x85YCL56au5oucfOS4quekvOaLnFwiLFxuICBtb250aDogXCLmnIh85YCL5pyIfOS4quaciFwiLFxuICB5ZWFyOiBcIuW5tFwiLFxuICBhbmQ6IFwi5ZKMXCIsXG4gIGF0OiBcIuWcqFwiLFxuICBmcm9tOiBcIuW+nnzku4586IeqXCIsXG4gIHRvOiBcIuWIsHzoh7NcIixcbiAgb2Y6IFwi55qEXCIsXG4gIGZpcnN0OiBcIuesrOS4gHznrKzkuIDlgIt856ys5LiA5LiqXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuIiwiaW1wb3J0IGkxOG4gZnJvbSAncm9kZGVoLWkxOG4nO1xuXG5pbXBvcnQgZW4gZnJvbSAnLi9lbic7XG5pbXBvcnQgamEgZnJvbSAnLi9qYSc7XG5pbXBvcnQgZnIgZnJvbSAnLi9mcic7XG5pbXBvcnQgcHQgZnJvbSAnLi9wdCc7XG5pbXBvcnQgZGUgZnJvbSAnLi9kZSc7XG5pbXBvcnQgbmwgZnJvbSAnLi9ubCc7XG5pbXBvcnQgZXMgZnJvbSAnLi9lcyc7XG5pbXBvcnQgaXQgZnJvbSAnLi9pdCc7XG5pbXBvcnQgcnUgZnJvbSAnLi9ydSc7XG5pbXBvcnQgdWsgZnJvbSAnLi91ayc7XG5pbXBvcnQgemggZnJvbSAnLi96aCc7XG5cbmNvbnN0IG5vdEZvdW5kRGVmYXVsdCA9IFwiTk9URk9VTkRcIiBhcyBjb25zdDtcblxudHlwZSBUcmFuc2xhdG9yID0gKGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPikgPT4gc3RyaW5nO1xuXG4vLyBDYWNoZSBkZXMgdHJhZHVjdGV1cnMgcG91ciDDqXZpdGVyIGRlIGxlcyByZWNyw6llciDDoCBjaGFxdWUgYXBwZWxcbi8vIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogdHJhbnNsYXRvcnMgYXJlIGNyZWF0ZWQgb25jZSBhbmQgcmV1c2VkXG5jb25zdCB0cmFuc2xhdG9yQ2FjaGU6IFJlY29yZDxzdHJpbmcsIFRyYW5zbGF0b3I+ID0ge307XG5cbi8vIFNoYXBlIHNoYXJlZCBieSBldmVyeSBsYW5ndWFnZSBkaWN0OiBzYW1lIGtleXMgYXMgYGVuYCwgYnV0IGVhY2ggbGFuZ3VhZ2Vcbi8vIGhhcyBpdHMgb3duIHN0cmluZyB2YWx1ZXMgKG5vdCBgZW5gJ3MgZXhhY3QgbGl0ZXJhbCB0ZXh0KSAtLSB1c2luZ1xuLy8gYHR5cGVvZiBlbmAgZGlyZWN0bHkgaGVyZSB3b3VsZCBjb21wYXJlIGV2ZXJ5IG90aGVyIGxhbmd1YWdlJ3MgdGV4dFxuLy8gYWdhaW5zdCBgZW5gJ3MgbGl0ZXJhbCBFbmdsaXNoIHN0cmluZ3MgYW5kIGFsd2F5cyBmYWlsLlxudHlwZSBMYW5nRGljdCA9IHsgcmVhZG9ubHkgW0sgaW4ga2V5b2YgdHlwZW9mIGVuXTogc3RyaW5nIH07XG5cbi8vIE1hcCBkZXMgbW9kdWxlcyBkZSBsYW5ndWUgcG91ciBmYWNpbGl0ZXIgbCdhY2PDqHNcbmNvbnN0IGxhbmd1YWdlTW9kdWxlczogUmVjb3JkPHN0cmluZywgTGFuZ0RpY3Q+ID0ge1xuICBlbixcbiAgamEsXG4gIGZyLFxuICBwdCxcbiAgZGUsXG4gIG5sLFxuICBlcyxcbiAgaXQsXG4gIHJ1LFxuICB1ayxcbiAgJ3poLmhhbnQnOiB6aCxcbn07XG5cbi8qKlxuICogT2J0aWVudCB1biB0cmFkdWN0ZXVyIHBvdXIgdW5lIGxhbmd1ZSBkb25uw6llIChhdmVjIGNhY2hlKVxuICogR2V0cyBhIHRyYW5zbGF0b3IgZm9yIGEgZ2l2ZW4gbGFuZ3VhZ2UgKGNhY2hlZClcbiAqL1xuZnVuY3Rpb24gZ2V0VHJhbnNsYXRvcihsYW5nOiBzdHJpbmcpOiBUcmFuc2xhdG9yIHtcbiAgaWYgKCF0cmFuc2xhdG9yQ2FjaGVbbGFuZ10pIHtcbiAgICBjb25zdCBsYW5ndWFnZU1vZHVsZSA9IGxhbmd1YWdlTW9kdWxlc1tsYW5nXTtcbiAgICBpZiAobGFuZ3VhZ2VNb2R1bGUpIHtcbiAgICAgIC8vIHJvZGRlaC1pMThuJ3Mgc2hpcHBlZCB0eXBlcyBkZWNsYXJlIHRoZSAybmQgY2FsbCBhcmd1bWVudCBhc1xuICAgICAgLy8gYG51bWJlciB8IEZvcm1hdHRpbmdDb250ZXh0YCwgYnV0IGl0cyBhY3R1YWwgcnVudGltZSBBUEkgKHVzZWRcbiAgICAgIC8vIHRocm91Z2hvdXQgdGhpcyBmaWxlKSBhbHNvIGFjY2VwdHMgYSBwbGFpbiBzdHJpbmcgZGVmYXVsdCB2YWx1ZSAtLVxuICAgICAgLy8gdGhhdCBvdmVybG9hZCBqdXN0IGlzbid0IHJlZmxlY3RlZCBpbiBpdHMgLmQudHMsIGhlbmNlIHRoZSBjYXN0LlxuICAgICAgdHJhbnNsYXRvckNhY2hlW2xhbmddID0gaTE4bi5jcmVhdGUoeyB2YWx1ZXM6IGxhbmd1YWdlTW9kdWxlIH0pIGFzIHVua25vd24gYXMgVHJhbnNsYXRvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgdmVycyBsJ2FuZ2xhaXMgc2kgbGEgbGFuZ3VlIG4nZXN0IHBhcyB0cm91dsOpZVxuICAgICAgaWYgKCF0cmFuc2xhdG9yQ2FjaGVbJ2VuJ10pIHtcbiAgICAgICAgdHJhbnNsYXRvckNhY2hlWydlbiddID0gaTE4bi5jcmVhdGUoeyB2YWx1ZXM6IGVuIH0pIGFzIHVua25vd24gYXMgVHJhbnNsYXRvcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cmFuc2xhdG9yQ2FjaGVbJ2VuJ107XG4gICAgfVxuICB9XG4gIHJldHVybiB0cmFuc2xhdG9yQ2FjaGVbbGFuZ107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHQoa2V5OiBzdHJpbmcsIGxhbmc6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gIGNvbnN0IGxhbmdUcmFuc2xhdG9yID0gZ2V0VHJhbnNsYXRvcihsYW5nKTtcbiAgY29uc3QgdHJhbnNsYXRpb24gPSBsYW5nVHJhbnNsYXRvcihrZXksIG5vdEZvdW5kRGVmYXVsdCwgdmFyaWFibGVzKTtcbiAgXG4gIGlmICh0cmFuc2xhdGlvbiA9PT0gbm90Rm91bmREZWZhdWx0KSB7XG4gICAgY29uc3QgZW5UcmFuc2xhdG9yID0gZ2V0VHJhbnNsYXRvcihcImVuXCIpO1xuICAgIHJldHVybiBlblRyYW5zbGF0b3Ioa2V5LCBub3RGb3VuZERlZmF1bHQsIHZhcmlhYmxlcyk7XG4gIH1cbiAgcmV0dXJuIHRyYW5zbGF0aW9uO1xufSIsImltcG9ydCB0IGZyb20gXCIuL2xhbmcvaGVscGVyXCI7XG5cbi8qKlxuICogQ29sbGVjdHMgYW5kIGNhY2hlcyB0cmFuc2xhdGVkIHdvcmRzIGFjcm9zcyBtdWx0aXBsZSBsYW5ndWFnZXMsIGFuZCBidWlsZHNcbiAqIHJlZ2V4IGFsdGVybmF0aW9ucyBmcm9tIHRoZW0uXG4gKlxuICogRXZlcnkgc3VwcG9ydGVkIGxhbmd1YWdlIGNhbiBkZWZpbmUgc2V2ZXJhbCB2YXJpYW50cyBmb3IgdGhlIHNhbWUgY29uY2VwdFxuICogKGUuZy4gRnJlbmNoIFwibmV4dFwiOiBcInByb2NoYWlufHByb2NoYWluZXxzdWl2YW50fHN1aXZhbnRlXCIpLCBhbmQgZXZlcnlcbiAqIGZlYXR1cmUgb2YgdGhlIHBhcnNlciBuZWVkcyB0byBnYXRoZXIgdGhvc2UgdmFyaWFudHMgYWNyb3NzICphbGwqIGFjdGl2ZVxuICogbGFuZ3VhZ2VzIGJlZm9yZSBidWlsZGluZyBhIHJlZ2V4IG91dCBvZiB0aGVtLiBUaGlzIGNsYXNzIGNlbnRyYWxpemVzIHRoYXRcbiAqIFwibG9vayB1cCBhIHRyYW5zbGF0aW9uIGtleSBpbiBldmVyeSBhY3RpdmUgbGFuZ3VhZ2UsIHNwbGl0IG11bHRpLXZhcmlhbnRcbiAqIGVudHJpZXMgb24gJ3wnLCB0cmltLCBkZWR1cGVcIiBwYXR0ZXJuLCB3aGljaCB1c2VkIHRvIGJlIHJlcGVhdGVkIGlubGluZVxuICogcm91Z2hseSBmaWZ0ZWVuIHRpbWVzIHRocm91Z2hvdXQgTkxEUGFyc2VyIChhbmQsIGxlc3MgZXhoYXVzdGl2ZWx5LCBpblxuICogQ29udGV4dEFuYWx5emVyIGFuZCB1dGlscy50cykuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkNvbGxlY3RvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRpb25DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZXM6IHN0cmluZ1tdKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgdHJhbnNsYXRpb24gd2l0aCBjYWNoaW5nIGZvciBwZXJmb3JtYW5jZS5cbiAgICovXG4gIHRyYW5zbGF0ZShrZXk6IHN0cmluZywgbGFuZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGAke2xhbmd9OiR7a2V5fWA7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy50cmFuc2xhdGlvbkNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICBjb25zdCB0cmFuc2xhdGVkID0gdChrZXksIGxhbmcpO1xuICAgIHRoaXMudHJhbnNsYXRpb25DYWNoZS5zZXQoY2FjaGVLZXksIHRyYW5zbGF0ZWQpO1xuICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3RzIGV2ZXJ5IHZhcmlhbnQgb2YgYGtleWAncyB0cmFuc2xhdGlvbiBhY3Jvc3MgYWxsIGFjdGl2ZSBsYW5ndWFnZXMsXG4gICAqIHNwbGl0dGluZyBtdWx0aS12YXJpYW50IGVudHJpZXMgKGUuZy4gXCJhfGJ8Y1wiKSBvbiBcInxcIiwgdHJpbW1pbmcsIGFuZFxuICAgKiBkZS1kdXBsaWNhdGluZy4gRW50cmllcyB0aGF0IGFyZW4ndCBmb3VuZCBmb3IgYSBnaXZlbiBsYW5ndWFnZSBhcmUgc2tpcHBlZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRyYW5zbGF0aW9uIGtleSAoZS5nLiBcIm5leHRcIiwgXCJtb25kYXlcIiwgXCJpbmRheXNcIilcbiAgICogQHBhcmFtIG9wdGlvbnMubG93ZXJjYXNlIC0gTG93ZXJjYXNlIGVhY2ggdmFyaWFudCAoZGVmYXVsdDogZmFsc2UpXG4gICAqL1xuICBjb2xsZWN0V29yZHMoa2V5OiBzdHJpbmcsIG9wdGlvbnM6IHsgbG93ZXJjYXNlPzogYm9vbGVhbiB9ID0ge30pOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgd29yZHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBsYW5nIG9mIHRoaXMubGFuZ3VhZ2VzKSB7XG4gICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRoaXMudHJhbnNsYXRlKGtleSwgbGFuZyk7XG4gICAgICBpZiAoIXRyYW5zbGF0aW9uIHx8IHRyYW5zbGF0aW9uID09PSBcIk5PVEZPVU5EXCIpIGNvbnRpbnVlO1xuXG4gICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgdHJhbnNsYXRpb24uc3BsaXQoXCJ8XCIpKSB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSB2YXJpYW50LnRyaW0oKTtcbiAgICAgICAgLy8gTm8gY3VycmVudCBsYW5ndWFnZSBkaWN0aW9uYXJ5IGVudHJ5IGhhcyBhbiBlbXB0eSBcInx8XCIgc2VnbWVudCBvclxuICAgICAgICAvLyBhIHRyYWlsaW5nL2xlYWRpbmcgXCJ8XCIsIHNvIHRoaXMgZ3VhcmQgY2FuJ3QgYWN0dWFsbHkgYmUgZmFsc2Ugd2l0aFxuICAgICAgICAvLyByZWFsIGRhdGEgLS0ga2VwdCBpbiBjYXNlIGEgZnV0dXJlIGRpY3Rpb25hcnkgZW50cnkgaXMgbWFsZm9ybWVkLlxuICAgICAgICBpZiAodHJpbW1lZCkge1xuICAgICAgICAgIHdvcmRzLnB1c2gob3B0aW9ucy5sb3dlcmNhc2UgPyB0cmltbWVkLnRvTG93ZXJDYXNlKCkgOiB0cmltbWVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQod29yZHMpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSByZWdleCBhbHRlcm5hdGlvbiAoXCJhfGJ8Y1wiKSBmcm9tIGEgbGlzdCBvZiB3b3JkcywgZXNjYXBpbmcgcmVnZXhcbiAgICogc3BlY2lhbCBjaGFyYWN0ZXJzLlxuICAgKlxuICAgKiBMb25nZXN0IHdvcmRzIGFyZSBzb3J0ZWQgZmlyc3Q6IG90aGVyd2lzZSBhIHNob3J0ZXIgd29yZCB0aGF0IGlzIGEgcHJlZml4XG4gICAqIG9mIGEgbG9uZ2VyIG9uZSAoZS5nLiBGcmVuY2ggXCJwcm9jaGFpblwiIHZzIFwicHJvY2hhaW5lXCIpIGNhbiBtYXRjaCBmaXJzdFxuICAgKiBhbmQgbGVhdmUgdGhlIHJlbWFpbmluZyBsZXR0ZXJzIHRvIGJlIG1pcy1jYXB0dXJlZCBieSB3aGF0ZXZlciBjb21lcyBuZXh0XG4gICAqIGluIHRoZSBwYXR0ZXJuLlxuICAgKi9cbiAgYnVpbGRBbHRlcm5hdGlvbih3b3Jkczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IGVzY2FwZVJlZ2V4ID0gKHN0cjogc3RyaW5nKSA9PiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQod29yZHMpXVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAubWFwKGVzY2FwZVJlZ2V4KVxuICAgICAgLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZTogY29sbGVjdFdvcmRzKGtleSkgZm9sbG93ZWQgYnkgYnVpbGRBbHRlcm5hdGlvbigpIGluIG9uZSBjYWxsLlxuICAgKi9cbiAgYnVpbGRBbHRlcm5hdGlvbkZvcihrZXk6IHN0cmluZywgb3B0aW9uczogeyBsb3dlcmNhc2U/OiBib29sZWFuIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRBbHRlcm5hdGlvbih0aGlzLmNvbGxlY3RXb3JkcyhrZXksIG9wdGlvbnMpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQXBwLCBFZGl0b3IsIEVkaXRvclJhbmdlLCBFZGl0b3JQb3NpdGlvbiwgbm9ybWFsaXplUGF0aCwgVEZpbGUsIE1hcmtkb3duVmlldywgV29ya3NwYWNlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQge1xuICBjcmVhdGVEYWlseU5vdGUsXG4gIGdldEFsbERhaWx5Tm90ZXMsXG4gIGdldERhaWx5Tm90ZSxcbn0gZnJvbSBcIm9ic2lkaWFuLWRhaWx5LW5vdGVzLWludGVyZmFjZVwiO1xuXG5pbXBvcnQgeyBEYXlPZldlZWsgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgRGF0ZUZvcm1hdHRlciB9IGZyb20gXCIuL2RhdGUtZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbkNvbGxlY3RvciB9IGZyb20gXCIuL3RyYW5zbGF0aW9uLWNvbGxlY3RvclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbi8vIFR5cGUgYWxpYXMgZm9yIE1vbWVudCBmcm9tIHRoZSBtb21lbnQgbGlicmFyeSBidW5kbGVkIHdpdGggT2JzaWRpYW5cbi8vIFVzaW5nIHRoZSB0eXBlIGZyb20gdGhlIG1vbWVudCBsaWJyYXJ5IHR5cGVzIHNpbmNlIG1vbWVudCBpcyBidW5kbGVkIHdpdGggT2JzaWRpYW5cbi8vIFRoZSBtb21lbnQgcGFja2FnZSBpcyBidW5kbGVkIHdpdGggT2JzaWRpYW4sIGJ1dCB0aGUgTW9tZW50IHR5cGUgaXMgbm90IGV4cG9ydGVkIGZyb20gb2JzaWRpYW4gbW9kdWxlXG50eXBlIE1vbWVudCA9IGltcG9ydChcIm1vbWVudFwiKS5Nb21lbnQ7XG5cbmNvbnN0IGRheXNPZldlZWs6IE9taXQ8RGF5T2ZXZWVrLCBcImxvY2FsZS1kZWZhdWx0XCI+W10gPSBbXG4gIFwic3VuZGF5XCIsXG4gIFwibW9uZGF5XCIsXG4gIFwidHVlc2RheVwiLFxuICBcIndlZG5lc2RheVwiLFxuICBcInRodXJzZGF5XCIsXG4gIFwiZnJpZGF5XCIsXG4gIFwic2F0dXJkYXlcIixcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdvcmRCb3VuZGFyaWVzKGVkaXRvcjogRWRpdG9yKTogRWRpdG9yUmFuZ2Uge1xuICBjb25zdCBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XG5cbiAgY29uc3QgcG9zID0gZWRpdG9yLnBvc1RvT2Zmc2V0KGN1cnNvcik7XG4gIGNvbnN0IGVkaXRvcldpdGhDTSA9IGVkaXRvciBhcyBFZGl0b3IgJiB7IGNtPzogeyBzdGF0ZTogeyB3b3JkQXQ6IChwb3M6IG51bWJlcikgPT4geyBmcm9tOiBudW1iZXI7IHRvOiBudW1iZXIgfSB8IG51bGwgfSB9IH07XG4gIC8vIHdvcmRBdCgpIHJldHVybnMgbnVsbCB3aGVuIHRoZSBjdXJzb3IgaXNuJ3QgaW5zaWRlL2FkamFjZW50IHRvIGEgd29yZFxuICAvLyAoZW1wdHkgbGluZSwgd2hpdGVzcGFjZSwgcHVuY3R1YXRpb24tb25seSB0ZXh0KSAtLSBmYWxsIGJhY2sgdG8gYVxuICAvLyB6ZXJvLXdpZHRoIHJhbmdlIGF0IHRoZSBjdXJzb3IgaW5zdGVhZCBvZiBjcmFzaGluZy5cbiAgY29uc3Qgd29yZCA9IGVkaXRvcldpdGhDTS5jbT8uc3RhdGUud29yZEF0KHBvcyk7XG4gIGlmICghd29yZCkge1xuICAgIHJldHVybiB7IGZyb206IGN1cnNvciwgdG86IGN1cnNvciB9O1xuICB9XG4gIGNvbnN0IHdvcmRTdGFydCA9IGVkaXRvci5vZmZzZXRUb1Bvcyh3b3JkLmZyb20pO1xuICBjb25zdCB3b3JkRW5kID0gZWRpdG9yLm9mZnNldFRvUG9zKHdvcmQudG8pO1xuICByZXR1cm4ge1xuICAgIGZyb206IHdvcmRTdGFydCxcbiAgICB0bzogd29yZEVuZCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGVkVGV4dChlZGl0b3I6IEVkaXRvcik6IHN0cmluZyB7XG4gIGlmIChlZGl0b3Iuc29tZXRoaW5nU2VsZWN0ZWQoKSkge1xuICAgIHJldHVybiBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgd29yZEJvdW5kYXJpZXMgPSBnZXRXb3JkQm91bmRhcmllcyhlZGl0b3IpO1xuICAgIC8vIFNlbGVjdCB0aGUgd29yZCBhdCBjdXJzb3IgcG9zaXRpb24gdG8gZW5hYmxlIHRleHQgcmVwbGFjZW1lbnRcbiAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGRhdGUgcGFyc2luZyBjb21tYW5kcyB0byB3b3JrIGNvcnJlY3RseVxuICAgIGVkaXRvci5zZXRTZWxlY3Rpb24od29yZEJvdW5kYXJpZXMuZnJvbSwgd29yZEJvdW5kYXJpZXMudG8pO1xuICAgIHJldHVybiBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdEN1cnNvcihcbiAgZWRpdG9yOiBFZGl0b3IsXG4gIGN1cnNvcjogRWRpdG9yUG9zaXRpb24sXG4gIG5ld1N0cjogc3RyaW5nLFxuICBvbGRTdHI6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGNvbnN0IGN1cnNvck9mZnNldCA9IG5ld1N0ci5sZW5ndGggLSBvbGRTdHIubGVuZ3RoO1xuICBlZGl0b3Iuc2V0Q3Vyc29yKHtcbiAgICBsaW5lOiBjdXJzb3IubGluZSxcbiAgICBjaDogY3Vyc29yLmNoICsgY3Vyc29yT2Zmc2V0LFxuICB9KTtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIHBvdXIgY29tcGF0aWJpbGl0w6kgYXZlYyBsZSBjb2RlIGV4aXN0YW50XG4gKiBAZGVwcmVjYXRlZCBVdGlsaXNlciBEYXRlRm9ybWF0dGVyLmZvcm1hdCgpIGRpcmVjdGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXR0ZWREYXRlKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIERhdGVGb3JtYXR0ZXIuZm9ybWF0KGRhdGUsIGZvcm1hdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF5T2ZNb250aCh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCAwKS5nZXREYXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRydXRoeShmbGFnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIFtcInlcIiwgXCJ5ZXNcIiwgXCIxXCIsIFwidFwiLCBcInRydWVcIl0uaW5kZXhPZihmbGFnLnRvTG93ZXJDYXNlKCkpID49IDA7XG59XG5cbi8qKlxuICogVmFsaWRlIHVuIGZvcm1hdCBNb21lbnQuanMgZXQgcmV0b3VybmUgdW4gcsOpc3VsdGF0IGF2ZWMgcHLDqXZpc3VhbGlzYXRpb25cbiAqIEBwYXJhbSBmb3JtYXQgLSBMZSBmb3JtYXQgTW9tZW50LmpzIMOgIHZhbGlkZXJcbiAqIEByZXR1cm5zIFVuIG9iamV0IGNvbnRlbmFudCB2YWxpZCAoYm9vbMOpZW4pLCBlcnJvciAob3B0aW9ubmVsKSwgcHJldmlldyAob3B0aW9ubmVsKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVNb21lbnRGb3JtYXQoZm9ybWF0OiBzdHJpbmcpOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZzsgcHJldmlldz86IHN0cmluZyB9IHtcbiAgaWYgKCFmb3JtYXQgfHwgdHlwZW9mIGZvcm1hdCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBcIkxlIGZvcm1hdCBuZSBwZXV0IHBhcyDDqnRyZSB2aWRlXCIgfTtcbiAgfVxuXG4gIC8vIExpbWl0ZXIgbGEgbG9uZ3VldXIgZHUgZm9ybWF0IHBvdXIgw6l2aXRlciBsZXMgYXR0YXF1ZXNcbiAgY29uc3QgTUFYX0ZPUk1BVF9MRU5HVEggPSAxMDA7XG4gIGlmIChmb3JtYXQubGVuZ3RoID4gTUFYX0ZPUk1BVF9MRU5HVEgpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBgTGUgZm9ybWF0IG5lIHBldXQgcGFzIGTDqXBhc3NlciAke01BWF9GT1JNQVRfTEVOR1RIfSBjYXJhY3TDqHJlc2AgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdGVzdERhdGUgPSBtb21lbnQoKTtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSB0ZXN0RGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBcbiAgICAvLyBWw6lyaWZpZXIgcXVlIGxlIGZvcm1hdCBwcm9kdWl0IHF1ZWxxdWUgY2hvc2UgZGUgdmFsaWRlXG4gICAgaWYgKCFmb3JtYXR0ZWQgfHwgZm9ybWF0dGVkID09PSBmb3JtYXQpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IFwiRm9ybWF0IGludmFsaWRlIG91IG5vbiByZWNvbm51XCIgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gVsOpcmlmaWVyIHF1ZSBsZSBmb3JtYXQgbmUgY29udGllbnQgcGFzIGRlIGNhcmFjdMOocmVzIGRhbmdlcmV1eFxuICAgIC8vIE1vbWVudC5qcyB1dGlsaXNlIGRlcyBjYXJhY3TDqHJlcyBzcMOpY2lhdXgsIG1haXMgb24gdmV1dCDDqXZpdGVyIGxlcyBpbmplY3Rpb25zXG4gICAgLy8gTGVzIGZvcm1hdHMgTW9tZW50LmpzIHZhbGlkZXMgY29udGllbm5lbnQgcHJpbmNpcGFsZW1lbnQgZGVzIGxldHRyZXMsIGNoaWZmcmVzIGV0IGNhcmFjdMOocmVzIGRlIHBvbmN0dWF0aW9uXG4gICAgY29uc3QgZGFuZ2Vyb3VzUGF0dGVybiA9IC9bPD5cIidgXS87XG4gICAgaWYgKGRhbmdlcm91c1BhdHRlcm4udGVzdChmb3JtYXQpKSB7XG4gICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBcIkxlIGZvcm1hdCBjb250aWVudCBkZXMgY2FyYWN0w6hyZXMgbm9uIGF1dG9yaXPDqXNcIiB9O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgcHJldmlldzogZm9ybWF0dGVkIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkVycmV1ciBsb3JzIGRlIGxhIHZhbGlkYXRpb24gZHUgZm9ybWF0XCIgfTtcbiAgfVxufVxuXG4vKipcbiAqIFNhbml0aXplIGV0IHZhbGlkZSB1bmUgZW50csOpZSB1dGlsaXNhdGV1ciBwb3VyIMOpdml0ZXIgbGVzIGluamVjdGlvbnNcbiAqIEBwYXJhbSBpbnB1dCAtIEwnZW50csOpZSDDoCBzYW5pdGl6ZXJcbiAqIEBwYXJhbSBtYXhMZW5ndGggLSBMb25ndWV1ciBtYXhpbWFsZSBhdXRvcmlzw6llIChkw6lmYXV0OiAyMDApXG4gKiBAcmV0dXJucyBMJ2VudHLDqWUgc2FuaXRpesOpZSBvdSBudWxsIHNpIGludmFsaWRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUlucHV0KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsLCBtYXhMZW5ndGggPSAyMDApOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBMaW1pdGVyIGxhIGxvbmd1ZXVyXG4gIGNvbnN0IHRyaW1tZWQgPSBpbnB1dC50cmltKCkuc3Vic3RyaW5nKDAsIG1heExlbmd0aCk7XG4gIFxuICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFJlamV0ZXIgbGVzIGNhcmFjdMOocmVzIGRlIGNvbnRyw7RsZSBldCBsZXMgY2FyYWN0w6hyZXMgc2FucyB1c2FnZSBsw6lnaXRpbWUgZGFucyB1bmVcbiAgLy8gZXhwcmVzc2lvbiBkZSBkYXRlIGVuIGxhbmdhZ2UgbmF0dXJlbCAoZXg6IFwiPFwiLCBcIj5cIiwgXCJgXCIpLiBPbiBuJ3V0aWxpc2UgcGFzIGRlIHdoaXRlbGlzdFxuICAvLyBkZSBzY3JpcHRzIGNhciBsZXMgZGF0ZXMgZW4gbGFuZ2FnZSBuYXR1cmVsIHV0aWxpc2VudCBkZXMgbGV0dHJlcyBkZSB0b3V0ZXMgbGVzIGxhbmd1ZXNcbiAgLy8gc3VwcG9ydMOpZXMgKGxhdGluLCBjeXJpbGxpcXVlLCBqYXBvbmFpcywgY2hpbm9pcy4uLiksIGFpbnNpIHF1ZSBsJ2Fwb3N0cm9waGVcbiAgLy8gKGV4OiBcIkF1am91cmQnaHVpXCIgZW4gZnJhbsOnYWlzLCBcItCfJ9GP0YLQvdC40YbRllwiIGVuIHVrcmFpbmllbikuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4IC0tIGludGVudGlvbmFsOiB0aGlzIHJhbmdlIGlzIHRoZSBhY3R1YWwgc2FuaXRpemF0aW9uIHRhcmdldCwgbm90IGEgdHlwby5cbiAgY29uc3QgaW52YWxpZENoYXJzUGF0dGVybiA9IC9bPD5gXFx1MDAwMC1cXHUwMDFGXFx1MDA3Ri1cXHUwMDlGXS87XG5cbiAgaWYgKGludmFsaWRDaGFyc1BhdHRlcm4udGVzdCh0cmltbWVkKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRyaW1tZWQ7XG59XG5cbi8qKlxuICogVmFsaWRlIHVuIHBhcmFtw6h0cmUgVVJJIHBvdXIgw6l2aXRlciBsZXMgaW5qZWN0aW9uc1xuICogQHBhcmFtIHBhcmFtIC0gTGUgcGFyYW3DqHRyZSDDoCB2YWxpZGVyXG4gKiBAcGFyYW0gbWF4TGVuZ3RoIC0gTG9uZ3VldXIgbWF4aW1hbGUgYXV0b3Jpc8OpZSAoZMOpZmF1dDogMTAwKVxuICogQHJldHVybnMgTGUgcGFyYW3DqHRyZSB2YWxpZMOpIG91IG51bGwgc2kgaW52YWxpZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVXJpUGFyYW0ocGFyYW06IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwsIG1heExlbmd0aCA9IDEwMCk6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gc2FuaXRpemVJbnB1dChwYXJhbSwgbWF4TGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtOdW1iZXIoZGF5T2ZXZWVrOiBPbWl0PERheU9mV2VlaywgXCJsb2NhbGUtZGVmYXVsdFwiPik6IG51bWJlciB7XG4gIHJldHVybiBkYXlzT2ZXZWVrLmluZGV4T2YoZGF5T2ZXZWVrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZVdlZWtTdGFydCgpOiBPbWl0PERheU9mV2VlaywgXCJsb2NhbGUtZGVmYXVsdFwiPiB7XG4gIGNvbnN0IGxvY2FsZURhdGEgPSBtb21lbnQubG9jYWxlRGF0YSgpIGFzIHsgX3dlZWs/OiB7IGRvdzogbnVtYmVyIH0gfTtcbiAgY29uc3Qgc3RhcnRPZldlZWsgPSBsb2NhbGVEYXRhLl93ZWVrPy5kb3cgPz8gMDtcbiAgcmV0dXJuIGRheXNPZldlZWtbc3RhcnRPZldlZWtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVNYXJrZG93bkxpbmsoYXBwOiBBcHAsIHN1YnBhdGg6IHN0cmluZywgYWxpYXM/OiBzdHJpbmcpIHtcbiAgY29uc3QgdmF1bHRXaXRoQ29uZmlnID0gYXBwLnZhdWx0IGFzIHR5cGVvZiBhcHAudmF1bHQgJiB7IGdldENvbmZpZzogKGtleTogc3RyaW5nKSA9PiBib29sZWFuIH07XG4gIGNvbnN0IHVzZU1hcmtkb3duTGlua3MgPSB2YXVsdFdpdGhDb25maWcuZ2V0Q29uZmlnKFwidXNlTWFya2Rvd25MaW5rc1wiKTtcbiAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgoc3VicGF0aCk7XG5cbiAgaWYgKHVzZU1hcmtkb3duTGlua3MpIHtcbiAgICBpZiAoYWxpYXMpIHtcbiAgICAgIHJldHVybiBgWyR7YWxpYXN9XSgke3BhdGgucmVwbGFjZSgvIC9nLCBcIiUyMFwiKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBbJHtzdWJwYXRofV0oJHtwYXRofSlgO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYWxpYXMpIHtcbiAgICAgIHJldHVybiBgW1ske3BhdGh9fCR7YWxpYXN9XV1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYFtbJHtwYXRofV1dYDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlRGFpbHlOb3RlKGRhdGU6IE1vbWVudCk6IFByb21pc2U8VEZpbGUgfCBudWxsPiB7XG4gIC8vIEJvcnJvd2VkIGZyb20gdGhlIFNsYXRlZCBwbHVnaW46XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90Z3Jvc2luZ2VyL3NsYXRlZC1vYnNpZGlhbi9ibG9iL21haW4vc3JjL3ZhdWx0LnRzI0wxN1xuICBjb25zdCBkZXNpcmVkTm90ZSA9IGdldERhaWx5Tm90ZShkYXRlLCBnZXRBbGxEYWlseU5vdGVzKCkpO1xuICBpZiAoZGVzaXJlZE5vdGUpIHtcbiAgICByZXR1cm4gZGVzaXJlZE5vdGU7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZURhaWx5Tm90ZShkYXRlKTtcbn1cblxuLy8gU291cmNlIGBjaHJvbm9gOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3dhbmFzaXQvY2hyb25vL2Jsb2IvNDdmMTFkYTZiNjU2Y2Q1Y2I2MWYyNDZlOGNjYTcwNjk4MzIwOGRlZC9zcmMvdXRpbHMvcGF0dGVybi50cyNMOFxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LCBXYW5hc2l0IFRhbmFraXRydW5ncnVhbmdcbnR5cGUgRGljdGlvbmFyeUxpa2UgPSBzdHJpbmdbXSB8IHsgW3dvcmQ6IHN0cmluZ106IHVua25vd24gfSB8IE1hcDxzdHJpbmcsIHVua25vd24+O1xuXG4vLyBUaGUgQXJyYXkvTWFwIGJyYW5jaGVzIGJlbG93IGFyZSB1bnJlYWNoYWJsZSB3aXRoIHRoaXMgZmlsZSdzIG9ubHkgY2FsbGVyXG4vLyAobWF0Y2hBbnlQYXR0ZXJuKCkgaXMgb25seSBldmVyIGludm9rZWQgd2l0aCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWSwgYVxuLy8gcGxhaW4gb2JqZWN0KSAtLSBrZXB0IGJlY2F1c2UgdGhleSdyZSBjb3BpZWQgdmVyYmF0aW0gZnJvbSBjaHJvbm8tbm9kZSdzXG4vLyBtb3JlIGdlbmVyaWNhbGx5LXVzZWQgb3JpZ2luYWwsIG5vdCBiZWNhdXNlIHRoZXkncmUgY3VycmVudGx5IGV4ZXJjaXNlZC5cbmZ1bmN0aW9uIGV4dHJhY3RUZXJtcyhkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5TGlrZSk6IHN0cmluZ1tdIHtcbiAgbGV0IGtleXM6IHN0cmluZ1tdO1xuICBpZiAoZGljdGlvbmFyeSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAga2V5cyA9IFsuLi5kaWN0aW9uYXJ5XTtcbiAgfSBlbHNlIGlmIChkaWN0aW9uYXJ5IGluc3RhbmNlb2YgTWFwKSB7XG4gICAga2V5cyA9IEFycmF5LmZyb20oZGljdGlvbmFyeS5rZXlzKCkpO1xuICB9IGVsc2Uge1xuICAgIGtleXMgPSBPYmplY3Qua2V5cyhkaWN0aW9uYXJ5KTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuZnVuY3Rpb24gbWF0Y2hBbnlQYXR0ZXJuKGRpY3Rpb25hcnk6IERpY3Rpb25hcnlMaWtlKTogc3RyaW5nIHtcbiAgY29uc3Qgam9pbmVkVGVybXMgPSBleHRyYWN0VGVybXMoZGljdGlvbmFyeSlcbiAgICAuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcbiAgICAuam9pbihcInxcIilcbiAgICAucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIik7XG5cbiAgcmV0dXJuIGAoPzoke2pvaW5lZFRlcm1zfSlgO1xufVxuXG5jb25zdCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWTogeyBbd29yZDogc3RyaW5nXTogbnVtYmVyIH0gPSB7XG4gIGZpcnN0OiAxLFxuICBzZWNvbmQ6IDIsXG4gIHRoaXJkOiAzLFxuICBmb3VydGg6IDQsXG4gIGZpZnRoOiA1LFxuICBzaXh0aDogNixcbiAgc2V2ZW50aDogNyxcbiAgZWlnaHRoOiA4LFxuICBuaW50aDogOSxcbiAgdGVudGg6IDEwLFxuICBlbGV2ZW50aDogMTEsXG4gIHR3ZWxmdGg6IDEyLFxuICB0aGlydGVlbnRoOiAxMyxcbiAgZm91cnRlZW50aDogMTQsXG4gIGZpZnRlZW50aDogMTUsXG4gIHNpeHRlZW50aDogMTYsXG4gIHNldmVudGVlbnRoOiAxNyxcbiAgZWlnaHRlZW50aDogMTgsXG4gIG5pbmV0ZWVudGg6IDE5LFxuICB0d2VudGlldGg6IDIwLFxuICBcInR3ZW50eSBmaXJzdFwiOiAyMSxcbiAgXCJ0d2VudHktZmlyc3RcIjogMjEsXG4gIFwidHdlbnR5IHNlY29uZFwiOiAyMixcbiAgXCJ0d2VudHktc2Vjb25kXCI6IDIyLFxuICBcInR3ZW50eSB0aGlyZFwiOiAyMyxcbiAgXCJ0d2VudHktdGhpcmRcIjogMjMsXG4gIFwidHdlbnR5IGZvdXJ0aFwiOiAyNCxcbiAgXCJ0d2VudHktZm91cnRoXCI6IDI0LFxuICBcInR3ZW50eSBmaWZ0aFwiOiAyNSxcbiAgXCJ0d2VudHktZmlmdGhcIjogMjUsXG4gIFwidHdlbnR5IHNpeHRoXCI6IDI2LFxuICBcInR3ZW50eS1zaXh0aFwiOiAyNixcbiAgXCJ0d2VudHkgc2V2ZW50aFwiOiAyNyxcbiAgXCJ0d2VudHktc2V2ZW50aFwiOiAyNyxcbiAgXCJ0d2VudHkgZWlnaHRoXCI6IDI4LFxuICBcInR3ZW50eS1laWdodGhcIjogMjgsXG4gIFwidHdlbnR5IG5pbnRoXCI6IDI5LFxuICBcInR3ZW50eS1uaW50aFwiOiAyOSxcbiAgdGhpcnRpZXRoOiAzMCxcbiAgXCJ0aGlydHkgZmlyc3RcIjogMzEsXG4gIFwidGhpcnR5LWZpcnN0XCI6IDMxLFxufTtcblxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oXG4gIE9SRElOQUxfV09SRF9ESUNUSU9OQVJZXG4pfXxbMC05XXsxLDJ9KD86c3R8bmR8cmR8dGh8w6htZXzDqG1lfGVyfGV8ZXJ8ZXxcXFxcLik/KWA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoOiBzdHJpbmcpOiBudW1iZXIge1xuICBsZXQgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICB9XG5cbiAgLy8gUmVtb3ZlIG9yZGluYWwgc3VmZml4ZXM6IHN0LCBuZCwgcmQsIHRoLCDDqG1lLCBlciwgZSwgYW5kIHRyYWlsaW5nIGRvdFxuICBudW0gPSBudW0ucmVwbGFjZSgvKD86c3R8bmR8cmR8dGh8w6htZXxlcnxlfFxcLikkL2ksIFwiXCIpO1xuICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cblxuLyoqXG4gKiBEw6l0ZXJtaW5lIHNpIHVuZSBleHByZXNzaW9uIHRlbXBvcmVsbGUgcmVsYXRpdmUgY291cnRlIChtaW51dGVzL2hldXJlcykgZGV2cmFpdCBvbWV0dHJlIGxhIGRhdGVcbiAqIGNhciBlbGxlIHJlc3RlIGRhbnMgbGEgbcOqbWUgam91cm7DqWUgKGF1am91cmQnaHVpKVxuICogQHBhcmFtIHRleHQgLSBMZSB0ZXh0ZSBkZSBsJ2V4cHJlc3Npb24gdGVtcG9yZWxsZSAoZXg6IFwiZGFucyAxNSBtaW5cIiwgXCJpbiAyIGhvdXJzXCIsIFwiMzDliIbpkJjlvoxcIilcbiAqIEBwYXJhbSBsYW5ndWFnZXMgLSBMZXMgbGFuZ3VlcyBzdXBwb3J0w6llcyBwb3VyIGTDqXRlY3RlciBsZXMgcGF0dGVybnNcbiAqIEByZXR1cm5zIHRydWUgc2kgYydlc3QgdW5lIGV4cHJlc3Npb24gcmVsYXRpdmUgY291cnRlIHF1aSByZXN0ZSBhdWpvdXJkJ2h1aVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHRleHQ6IHN0cmluZywgbGFuZ3VhZ2VzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBsb3dlclRleHQgPSB0ZXh0LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICBjb25zdCB0YyA9IG5ldyBUcmFuc2xhdGlvbkNvbGxlY3RvcihsYW5ndWFnZXMpO1xuXG4gIGNvbnN0IGluUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoXCJpblwiKTtcbiAgY29uc3QgbWludXRlUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoXCJtaW51dGVcIik7XG4gIGNvbnN0IGhvdXJQYXR0ZXJuID0gdGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcImhvdXJcIik7XG4gIC8vIFN1ZmZpeC1zdHlsZSBsYW5ndWFnZXMgKGUuZy4gQ2hpbmVzZSBcIjMw5YiG6ZCY5b6MXCIpIG1hcmsgXCJsYXRlclwiIGluc3RlYWQgb2ZcbiAgLy8gcHJlZml4aW5nIHdpdGggXCJpblwiOyBzZWUgdHJhbnNsYXRpb24tY29sbGVjdG9yLnRzIC8gcGFyc2VyLnRzIGZvciB3aHkgdGhpc1xuICAvLyBpcyBhIHNlcGFyYXRlIGtleSBmcm9tIHRoZSBkYXkvaG91ci9taW51dGUgd29yZCBsaXN0cy5cbiAgY29uc3QgbGF0ZXJQYXR0ZXJuID0gdGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcImxhdGVyXCIpO1xuXG4gIGNvbnN0IHNob3J0UmVsYXRpdmVQYXR0ZXJuczogUmVnRXhwW10gPSBbXTtcblxuICAvLyBFdmVyeSBvbmUgb2YgdGhlIDExIHN1cHBvcnRlZCBsYW5ndWFnZXMgZGVmaW5lcyBtaW51dGUvaG91ciB0b2dldGhlclxuICAvLyB3aXRoIGluL2xhdGVyLCBzbyB0aGUgbmVzdGVkIGBpZiAobWludXRlUGF0dGVybilgL2BpZiAoaG91clBhdHRlcm4pYFxuICAvLyBjaGVja3MgYmVsb3cgY2FuJ3QgYWN0dWFsbHkgYmUgZmFsc2Ugd2hpbGUgdGhlaXIgZW5jbG9zaW5nIGBpZmAgaXMgdHJ1ZVxuICAvLyAtLSBubyBjb21iaW5hdGlvbiBvZiByZWFsIChvciB1bmtub3duKSBsYW5ndWFnZSBjb2RlcyBwcm9kdWNlcyBcImluXCIgb3JcbiAgLy8gXCJsYXRlclwiIHdpdGhvdXQgYWxzbyBwcm9kdWNpbmcgXCJtaW51dGVcIiBhbmQgXCJob3VyXCIuIEtlcHQgYXMgYSBndWFyZCBpblxuICAvLyBjYXNlIGEgZnV0dXJlIGxhbmd1YWdlIG1vZHVsZSBpcyBhdXRob3JlZCBpbmNvbXBsZXRlbHkuXG5cbiAgLy8gUHJlZml4IHN0eWxlOiBcImluIFggbWludXRlc1wiL1wiZGFucyBYIG1pblwiLy4uLlxuICBpZiAoaW5QYXR0ZXJuKSB7XG4gICAgaWYgKG1pbnV0ZVBhdHRlcm4pIHtcbiAgICAgIHNob3J0UmVsYXRpdmVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYF4oPzoke2luUGF0dGVybn0pXFxcXHMrXFxcXGQrXFxcXHMrKD86JHttaW51dGVQYXR0ZXJufSlgLCAnaScpKTtcbiAgICB9XG4gICAgaWYgKGhvdXJQYXR0ZXJuKSB7XG4gICAgICBzaG9ydFJlbGF0aXZlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBeKD86JHtpblBhdHRlcm59KVxcXFxzK1xcXFxkK1xcXFxzKyg/OiR7aG91clBhdHRlcm59KWAsICdpJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN1ZmZpeCBzdHlsZTogXCJYIG1pbnV0ZXNcIiArIFwibGF0ZXJcIiBtYXJrZXIsIGUuZy4gQ2hpbmVzZSBcIjMw5YiG6ZCY5b6MXCJcbiAgaWYgKGxhdGVyUGF0dGVybikge1xuICAgIGlmIChtaW51dGVQYXR0ZXJuKSB7XG4gICAgICBzaG9ydFJlbGF0aXZlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBeXFxcXGQrXFxcXHMqKD86JHttaW51dGVQYXR0ZXJufSlcXFxccyooPzoke2xhdGVyUGF0dGVybn0pJGAsICdpJykpO1xuICAgIH1cbiAgICBpZiAoaG91clBhdHRlcm4pIHtcbiAgICAgIHNob3J0UmVsYXRpdmVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYF5cXFxcZCtcXFxccyooPzoke2hvdXJQYXR0ZXJufSlcXFxccyooPzoke2xhdGVyUGF0dGVybn0pJGAsICdpJykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzaG9ydFJlbGF0aXZlUGF0dGVybnMuc29tZShwYXR0ZXJuID0+IHBhdHRlcm4udGVzdChsb3dlclRleHQpKTtcbn1cblxuLyoqXG4gKiBPYnRpZW50IGwnw6lkaXRldXIgYWN0aWYgZGUgbWFuacOocmUgZmxleGlibGUsIGNvbXBhdGlibGUgYXZlYyBRdWlja0FkZCBldCBhdXRyZXMgcGx1Z2luc1xuICogRXNzYWllIHBsdXNpZXVycyBtw6l0aG9kZXMgcG91ciB0cm91dmVyIGwnw6lkaXRldXIgYWN0aWZcbiAqIEBwYXJhbSB3b3Jrc3BhY2UgLSBMJ2luc3RhbmNlIFdvcmtzcGFjZSBkJ09ic2lkaWFuXG4gKiBAcmV0dXJucyBMJ8OpZGl0ZXVyIGFjdGlmIG91IG51bGwgc2kgYXVjdW4gbidlc3QgdHJvdXbDqVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlRWRpdG9yKHdvcmtzcGFjZTogV29ya3NwYWNlKTogRWRpdG9yIHwgbnVsbCB7XG4gIC8vIE3DqXRob2RlIDE6IFV0aWxpc2VyIGFjdGl2ZUVkaXRvciBzaSBkaXNwb25pYmxlIChPYnNpZGlhbiByw6ljZW50KVxuICBjb25zdCB3b3Jrc3BhY2VXaXRoQWN0aXZlRWRpdG9yID0gd29ya3NwYWNlIGFzIHR5cGVvZiB3b3Jrc3BhY2UgJiB7IGFjdGl2ZUVkaXRvcj86IHsgZWRpdG9yPzogRWRpdG9yIH0gfTtcbiAgaWYgKHdvcmtzcGFjZVdpdGhBY3RpdmVFZGl0b3IuYWN0aXZlRWRpdG9yPy5lZGl0b3IpIHtcbiAgICByZXR1cm4gd29ya3NwYWNlV2l0aEFjdGl2ZUVkaXRvci5hY3RpdmVFZGl0b3IuZWRpdG9yO1xuICB9XG5cbiAgLy8gTcOpdGhvZGUgMjogVXRpbGlzZXIgZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpIChtw6l0aG9kZSBzdGFuZGFyZClcbiAgY29uc3QgYWN0aXZlVmlldyA9IHdvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XG4gIGlmIChhY3RpdmVWaWV3Py5lZGl0b3IpIHtcbiAgICByZXR1cm4gYWN0aXZlVmlldy5lZGl0b3I7XG4gIH1cblxuICAvLyBNw6l0aG9kZSAzOiBDaGVyY2hlciBkYW5zIHRvdXMgbGVzIGxlYWZzIHBvdXIgdHJvdXZlciB1biDDqWRpdGV1ciBhY3RpZlxuICAvLyBVdGlsZSBwb3VyIFF1aWNrQWRkIGV0IGF1dHJlcyBwbHVnaW5zIHF1aSBjcsOpZW50IGRlcyDDqWRpdGV1cnMgcGVyc29ubmFsaXPDqXNcbiAgY29uc3QgYWN0aXZlTGVhZiA9IHdvcmtzcGFjZS5nZXRNb3N0UmVjZW50TGVhZigpO1xuICBpZiAoYWN0aXZlTGVhZikge1xuICAgIGNvbnN0IHZpZXcgPSBhY3RpdmVMZWFmLnZpZXc7XG4gICAgLy8gVsOpcmlmaWVyIHNpIGxhIHZ1ZSBhIHVuIMOpZGl0ZXVyXG4gICAgY29uc3Qgdmlld1dpdGhFZGl0b3IgPSB2aWV3IGFzIHR5cGVvZiB2aWV3ICYgeyBlZGl0b3I/OiBFZGl0b3IgfTtcbiAgICBpZiAodmlld1dpdGhFZGl0b3IuZWRpdG9yKSB7XG4gICAgICByZXR1cm4gdmlld1dpdGhFZGl0b3IuZWRpdG9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIE3DqXRob2RlcyA0IGV0IDU6IFBhcmNvdXJpciB0b3VzIGxlcyBsZWFmcyBtYXJrZG93biwgZW4gcHLDqWbDqXJhbnQgY2VsdWkgcXVpXG4gIC8vIGEgbGUgZm9jdXMsIHNpbm9uIGxlIHByZW1pZXIgw6lkaXRldXIgZGlzcG9uaWJsZSBlbiBkZXJuaWVyIHJlY291cnMuXG4gIGxldCBmaXJzdEF2YWlsYWJsZUVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG4gIGZvciAoY29uc3QgbGVhZiBvZiB3b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKFwibWFya2Rvd25cIikpIHtcbiAgICBjb25zdCB2aWV3ID0gbGVhZi52aWV3O1xuICAgIGlmICh2aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3ICYmIHZpZXcuZWRpdG9yKSB7XG4gICAgICBjb25zdCBlZGl0b3JFbCA9ICh2aWV3LmVkaXRvciBhcyBFZGl0b3IgJiB7IGNtPzogeyBoYXNGb2N1cz86ICgpID0+IGJvb2xlYW4gfSB9KS5jbTtcbiAgICAgIGlmIChlZGl0b3JFbD8uaGFzRm9jdXM/LigpKSB7XG4gICAgICAgIHJldHVybiB2aWV3LmVkaXRvcjtcbiAgICAgIH1cbiAgICAgIGZpcnN0QXZhaWxhYmxlRWRpdG9yID0gZmlyc3RBdmFpbGFibGVFZGl0b3IgPz8gdmlldy5lZGl0b3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpcnN0QXZhaWxhYmxlRWRpdG9yO1xufVxuXG4vLyBFeHRyYWN0cyBhIHJlYWRhYmxlIG1lc3NhZ2UgZnJvbSBhIGNhdWdodCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuIFBsYWluXG4vLyBgU3RyaW5nKGUpYCBpcyB1bnNhZmUgZm9yIGFyYml0cmFyeSB1bmtub3duIHZhbHVlcyAoYSB0aHJvd24gcGxhaW4gb2JqZWN0XG4vLyB3b3VsZCBzdHJpbmdpZnkgdG8gdGhlIHVzZWxlc3MgXCJbb2JqZWN0IE9iamVjdF1cIiksIGJ1dCBibGFua2V0XG4vLyBgSlNPTi5zdHJpbmdpZnkoZSlgIGlzbid0IHJpZ2h0IGVpdGhlciAtLSBpdCB3b3VsZCB3cmFwIHRocm93biBzdHJpbmdzIGluXG4vLyBsaXRlcmFsIHF1b3RlcywgY2hhbmdpbmcgd2hhdCBhbHJlYWR5LXRocm93bi1zdHJpbmcgY2FsbCBzaXRlcyBsb2cuXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVFcnJvcihlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGUubWVzc2FnZTtcbiAgaWYgKHR5cGVvZiBlID09PSBcInN0cmluZ1wiKSByZXR1cm4gZTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xufSIsImltcG9ydCB7IEFwcCwgTW9kYWwsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB0eXBlIE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuLi9tYWluXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuLi93aW5kb3ctbW9tZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpc3RvcnlNYW5hZ2VyTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XG4gIHByaXZhdGUgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcztcbiAgLy8gVHdvLWNsaWNrIGNvbmZpcm1hdGlvbiBmb3IgXCJDbGVhciBhbGxcIjogZmlyc3QgY2xpY2sgYXJtcyBpdCwgc2Vjb25kXG4gIC8vIGNsaWNrIChvbiB0aGUgc2FtZSByZW5kZXIpIGFjdHVhbGx5IGNsZWFycyAtLSBhdm9pZHMgd2lwaW5nIHRoZSB3aG9sZVxuICAvLyBoaXN0b3J5IGZyb20gYSBzaW5nbGUgYWNjaWRlbnRhbCBjbGljaywgd2l0aG91dCB0aGUgY29tcGxleGl0eSBvZiBhXG4gIC8vIHNlcGFyYXRlIGNvbmZpcm1hdGlvbiBtb2RhbCBvciBhIHRpbWVvdXQgdG8gcmVzZXQgdGhlIGFybWluZyBzdGF0ZS5cbiAgcHJpdmF0ZSBjbGVhckFsbEFybWVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpIHtcbiAgICBzdXBlcihhcHApO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICB9XG5cbiAgb25PcGVuKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJBbGxBcm1lZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY29udGVudEVsLmVtcHR5KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbmRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBGZXRjaGVkIGJlZm9yZSB0b3VjaGluZyB0aGUgRE9NIHNvIHRoZSBtb2RhbCBkb2Vzbid0IGZsYXNoIGFuXG4gICAgLy8gZW1wdHkvaGVhZGVyLW9ubHkgc3RhdGUgd2hpbGUgdGhlIChhc3luYykgaGlzdG9yeSBsb2FkIGlzIGluIGZsaWdodC5cbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIuZ2V0RW50cmllc0Zvck1hbmFnZW1lbnQoKTtcblxuICAgIGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xuICAgIGNvbnRlbnRFbC5lbXB0eSgpO1xuICAgIGNvbnRlbnRFbC5hZGRDbGFzcyhcIm5sZC1oaXN0b3J5LW1hbmFnZXItbW9kYWxcIik7XG5cbiAgICBjb250ZW50RWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiTWFuYWdlIHN1Z2dlc3Rpb24gaGlzdG9yeVwiIH0pO1xuXG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250ZW50RWwuY3JlYXRlRWwoXCJwXCIsIHsgdGV4dDogXCJObyBoaXN0b3J5IHlldC4gU3VnZ2VzdGlvbnMgeW91IHNlbGVjdCBmcm9tIHRoZSBhdXRvc3VnZ2VzdCBwb3B1cCB3aWxsIGFwcGVhciBoZXJlLlwiIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5ldyBTZXR0aW5nKGNvbnRlbnRFbClcbiAgICAgIC5zZXROYW1lKFwiQ2xlYXIgYWxsIGhpc3RvcnlcIilcbiAgICAgIC5zZXREZXNjKHRoaXMuY2xlYXJBbGxBcm1lZFxuICAgICAgICA/IFwiQ2xpY2sgYWdhaW4gdG8gY29uZmlybSAtLSB0aGlzIGNhbm5vdCBiZSB1bmRvbmUuXCJcbiAgICAgICAgOiBgUmVtb3ZlIGFsbCAke2VudHJpZXMubGVuZ3RofSBlbnRyaWVzLmApXG4gICAgICAuYWRkQnV0dG9uKChidXR0b24pID0+IHtcbiAgICAgICAgYnV0dG9uLnNldEJ1dHRvblRleHQodGhpcy5jbGVhckFsbEFybWVkID8gXCJDbGljayBhZ2FpbiB0byBjb25maXJtXCIgOiBcIkNsZWFyIGFsbFwiKTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJBbGxBcm1lZCkge1xuICAgICAgICAgIGJ1dHRvbi5zZXRXYXJuaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5jbGVhckFsbEFybWVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQWxsQXJtZWQgPSB0cnVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIuY2xlYXJIaXN0b3J5KCk7XG4gICAgICAgICAgdGhpcy5jbGVhckFsbEFybWVkID0gZmFsc2U7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgY29uc3QgbGFzdFVzZWRUZXh0ID0gbW9tZW50KGVudHJ5Lmxhc3RVc2VkKS5mcm9tTm93KCk7XG4gICAgICBjb25zdCB0aW1lc1RleHQgPSBlbnRyeS5jb3VudCA9PT0gMSA/IFwiMSB0aW1lXCIgOiBgJHtlbnRyeS5jb3VudH0gdGltZXNgO1xuXG4gICAgICBuZXcgU2V0dGluZyhjb250ZW50RWwpXG4gICAgICAgIC5zZXROYW1lKGVudHJ5LmRpc3BsYXkpXG4gICAgICAgIC5zZXREZXNjKGBVc2VkICR7dGltZXNUZXh0fSDCtyBsYXN0IHVzZWQgJHtsYXN0VXNlZFRleHR9YClcbiAgICAgICAgLmFkZEJ1dHRvbigoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgYnV0dG9uXG4gICAgICAgICAgICAuc2V0SWNvbihcInRyYXNoXCIpXG4gICAgICAgICAgICAuc2V0VG9vbHRpcChcIlJlbW92ZSB0aGlzIGVudHJ5XCIpXG4gICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIERlbGV0aW5nIGEgc2luZ2xlIGVudHJ5IGlzIGEgZGlmZmVyZW50IGFjdGlvbiBmcm9tIFwiQ2xlYXJcbiAgICAgICAgICAgICAgLy8gYWxsXCIgLS0gZG9uJ3QgbGVhdmUgdGhhdCBidXR0b24gYXJtZWQgZnJvbSBhbiBlYXJsaWVyIGNsaWNrLFxuICAgICAgICAgICAgICAvLyB3aGVyZSBhIGxhdGVyLCB1bnJlbGF0ZWQgXCJDbGVhciBhbGxcIiBjbGljayB3b3VsZCB0aGVuIHdpcGVcbiAgICAgICAgICAgICAgLy8gZXZlcnl0aGluZyB3aXRob3V0IHRoZSB1c2VyIHJlLWNvbmZpcm1pbmcgdGhhdCBzcGVjaWZpYyBpbnRlbnQuXG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJBbGxBcm1lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlci5yZW1vdmVFbnRyeShlbnRyeS5rZXkpO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgTmF0dXJhbExhbmd1YWdlRGF0ZXMgZnJvbSBcIi4vbWFpblwiO1xuaW1wb3J0IHsgZ2V0TG9jYWxlV2Vla1N0YXJ0LCB2YWxpZGF0ZU1vbWVudEZvcm1hdCB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuL3dpbmRvdy1tb21lbnRcIjtcbmltcG9ydCBIaXN0b3J5TWFuYWdlck1vZGFsIGZyb20gXCIuL21vZGFscy9oaXN0b3J5LW1hbmFnZXItbW9kYWxcIjtcblxuLyoqXG4gKiBEYXkgb2YgdGhlIHdlZWsgdHlwZSBmb3Igd2VlayBzdGFydCBwcmVmZXJlbmNlLlxuICogQ2FuIGJlIGEgc3BlY2lmaWMgZGF5IG9yIFwibG9jYWxlLWRlZmF1bHRcIiB0byB1c2UgdGhlIHN5c3RlbSBsb2NhbGUuXG4gKi9cbmV4cG9ydCB0eXBlIERheU9mV2VlayA9XG4gIHwgXCJzdW5kYXlcIlxuICB8IFwibW9uZGF5XCJcbiAgfCBcInR1ZXNkYXlcIlxuICB8IFwid2VkbmVzZGF5XCJcbiAgfCBcInRodXJzZGF5XCJcbiAgfCBcImZyaWRheVwiXG4gIHwgXCJzYXR1cmRheVwiXG4gIHwgXCJsb2NhbGUtZGVmYXVsdFwiO1xuXG4vKipcbiAqIFBsdWdpbiBzZXR0aW5ncyBpbnRlcmZhY2UuXG4gKiBDb250YWlucyBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTmF0dXJhbCBMYW5ndWFnZSBEYXRlcyBwbHVnaW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTkxEU2V0dGluZ3Mge1xuICBhdXRvc3VnZ2VzdFRvZ2dsZUxpbms6IGJvb2xlYW47XG4gIGF1dG9jb21wbGV0ZVRyaWdnZXJQaHJhc2U6IHN0cmluZztcbiAgaXNBdXRvc3VnZ2VzdEVuYWJsZWQ6IGJvb2xlYW47XG5cbiAgZm9ybWF0OiBzdHJpbmc7XG4gIHRpbWVGb3JtYXQ6IHN0cmluZztcbiAgc2VwYXJhdG9yOiBzdHJpbmc7XG4gIHdlZWtTdGFydDogRGF5T2ZXZWVrO1xuICBsYW5ndWFnZXM6IHN0cmluZ1tdO1xuXG4gIGVuZ2xpc2g6IGJvb2xlYW47XG4gIGphcGFuZXNlOiBib29sZWFuO1xuICBmcmVuY2g6IGJvb2xlYW47XG4gIGdlcm1hbjogYm9vbGVhbjtcbiAgcG9ydHVndWVzZTogYm9vbGVhbjtcbiAgZHV0Y2g6IGJvb2xlYW47XG4gIHNwYW5pc2g6IGJvb2xlYW47XG4gIGl0YWxpYW46IGJvb2xlYW47XG4gIHJ1c3NpYW46IGJvb2xlYW47XG4gIHVrcmFpbmlhbjogYm9vbGVhbjtcbiAgY2hpbmVzZTogYm9vbGVhbjtcblxuICBtb2RhbFRvZ2dsZVRpbWU6IGJvb2xlYW47XG4gIG1vZGFsVG9nZ2xlTGluazogYm9vbGVhbjtcbiAgbW9kYWxNb21lbnRGb3JtYXQ6IHN0cmluZztcblxuICAvLyBTbWFydCBzdWdnZXN0aW9uc1xuICBlbmFibGVTbWFydFN1Z2dlc3Rpb25zOiBib29sZWFuO1xuICBlbmFibGVIaXN0b3J5U3VnZ2VzdGlvbnM6IGJvb2xlYW47XG4gIGVuYWJsZUNvbnRleHRTdWdnZXN0aW9uczogYm9vbGVhbjtcblxuICAvLyBTbWFydCBkYXRlIGZvcm1hdHRpbmdcbiAgb21pdERhdGVGb3JTaG9ydFJlbGF0aXZlOiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVRUSU5HUzogTkxEU2V0dGluZ3MgPSB7XG4gIGF1dG9zdWdnZXN0VG9nZ2xlTGluazogdHJ1ZSxcbiAgYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZTogXCJAXCIsXG4gIGlzQXV0b3N1Z2dlc3RFbmFibGVkOiB0cnVlLFxuXG4gIGZvcm1hdDogXCJZWVlZLU1NLUREXCIsXG4gIHRpbWVGb3JtYXQ6IFwiSEg6bW1cIixcbiAgc2VwYXJhdG9yOiBcIiBcIixcbiAgd2Vla1N0YXJ0OiBcImxvY2FsZS1kZWZhdWx0XCIsXG4gIGxhbmd1YWdlczogW1wiZW5cIl0sXG5cbiAgZW5nbGlzaDogdHJ1ZSwgIC8vIFN5bmNocm9uaXplZCB3aXRoIGxhbmd1YWdlczogW1wiZW5cIl1cbiAgamFwYW5lc2U6IGZhbHNlLFxuICBmcmVuY2g6IGZhbHNlLFxuICBnZXJtYW46IGZhbHNlLFxuICBwb3J0dWd1ZXNlOiBmYWxzZSxcbiAgZHV0Y2g6IGZhbHNlLFxuICBzcGFuaXNoOiBmYWxzZSxcbiAgaXRhbGlhbjogZmFsc2UsXG4gIHJ1c3NpYW46IGZhbHNlLFxuICB1a3JhaW5pYW46IGZhbHNlLFxuICBjaGluZXNlOiBmYWxzZSxcblxuICBtb2RhbFRvZ2dsZVRpbWU6IGZhbHNlLFxuICBtb2RhbFRvZ2dsZUxpbms6IGZhbHNlLFxuICBtb2RhbE1vbWVudEZvcm1hdDogXCJZWVlZLU1NLUREIEhIOm1tXCIsXG5cbiAgLy8gU21hcnQgc3VnZ2VzdGlvbnNcbiAgZW5hYmxlU21hcnRTdWdnZXN0aW9uczogdHJ1ZSxcbiAgZW5hYmxlSGlzdG9yeVN1Z2dlc3Rpb25zOiB0cnVlLFxuICBlbmFibGVDb250ZXh0U3VnZ2VzdGlvbnM6IHRydWUsXG5cbiAgLy8gU21hcnQgZGF0ZSBmb3JtYXR0aW5nXG4gIG9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZTogdHJ1ZSxcbn07XG5cbmNvbnN0IHdlZWtkYXlzID0gW1xuICBcInN1bmRheVwiLFxuICBcIm1vbmRheVwiLFxuICBcInR1ZXNkYXlcIixcbiAgXCJ3ZWRuZXNkYXlcIixcbiAgXCJ0aHVyc2RheVwiLFxuICBcImZyaWRheVwiLFxuICBcInNhdHVyZGF5XCIsXG5dO1xuXG5leHBvcnQgY2xhc3MgTkxEU2V0dGluZ3NUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbiAgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcztcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcykge1xuICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcbiAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgfVxuXG4gIGRpc3BsYXkoKTogdm9pZCB7XG4gICAgY29uc3QgeyBjb250YWluZXJFbCB9ID0gdGhpcztcbiAgICBjb25zdCBsb2NhbGl6ZWRXZWVrZGF5cyA9IG1vbWVudC53ZWVrZGF5cygpO1xuICAgIGNvbnN0IGxvY2FsZVdlZWtTdGFydCA9IGdldExvY2FsZVdlZWtTdGFydCgpO1xuXG4gICAgY29udGFpbmVyRWwuZW1wdHkoKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKS5zZXRIZWFkaW5nKCkuc2V0TmFtZShcIk5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZXNcIik7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJQYXJzZXIgc2V0dGluZ3NcIik7XG5cbiAgICBjb25zdCBkYXRlRm9ybWF0U2V0dGluZyA9IG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJEYXRlIGZvcm1hdFwiKVxuICAgICAgLnNldERlc2MoXCJPdXRwdXQgZm9ybWF0IGZvciBwYXJzZWQgZGF0ZXNcIilcbiAgICAgIC5hZGRNb21lbnRGb3JtYXQoKHRleHQpID0+XG4gICAgICAgIHRleHRcbiAgICAgICAgICAuc2V0RGVmYXVsdEZvcm1hdChcIllZWVktTU0tRERcIilcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlTW9tZW50Rm9ybWF0KHZhbHVlIHx8IFwiWVlZWS1NTS1ERFwiKTtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0ZWQudmFsaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0ID0gdmFsdWUgfHwgXCJZWVlZLU1NLUREXCI7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAvLyBNZXR0cmUgw6Agam91ciBsYSBkZXNjcmlwdGlvbiBhdmVjIGxhIHByw6l2aXN1YWxpc2F0aW9uLlxuICAgICAgICAgICAgICAvLyB2YWxpZGF0ZU1vbWVudEZvcm1hdCgpJ3MgY29udHJhY3QgZ3VhcmFudGVlcyBwcmV2aWV3IGlzIHNldFxuICAgICAgICAgICAgICAvLyB3aGVuZXZlciB2YWxpZCBpcyB0cnVlLCBzbyB0aGUgXCI6ICcnXCIgZmFsbGJhY2sgYmVsb3cgaXNcbiAgICAgICAgICAgICAgLy8gdW5yZWFjaGFibGUgd2l0aCByZWFsIGRhdGEuXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXRTZXR0aW5nLnNldERlc2MoYE91dHB1dCBmb3JtYXQgZm9yIHBhcnNlZCBkYXRlcyR7dmFsaWRhdGVkLnByZXZpZXcgPyBgIChQcmV2aWV3OiAke3ZhbGlkYXRlZC5wcmV2aWV3fSlgIDogXCJcIn1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEFmZmljaGVyIGwnZXJyZXVyIGRhbnMgbGEgZGVzY3JpcHRpb24uIEV2ZXJ5IGludmFsaWQtZm9ybWF0XG4gICAgICAgICAgICAgIC8vIHJldHVybiBmcm9tIHZhbGlkYXRlTW9tZW50Rm9ybWF0KCkgYWx3YXlzIHNldHMgZXJyb3IsIHNvIHRoZVxuICAgICAgICAgICAgICAvLyBcIkZvcm1hdCBpbnZhbGlkZVwiIGZhbGxiYWNrIGJlbG93IGlzIHVucmVhY2hhYmxlIHdpdGggcmVhbCBkYXRhLlxuICAgICAgICAgICAgICBkYXRlRm9ybWF0U2V0dGluZy5zZXREZXNjKGBPdXRwdXQgZm9ybWF0IGZvciBwYXJzZWQgZGF0ZXMgLSDimqDvuI8gJHt2YWxpZGF0ZWQuZXJyb3IgfHwgXCJGb3JtYXQgaW52YWxpZGVcIn1gKTtcbiAgICAgICAgICAgICAgLy8gTmUgcGFzIHNhdXZlZ2FyZGVyIGxlIGZvcm1hdCBpbnZhbGlkZSwgcmVzdGF1cmVyIGxlIHByw6ljw6lkZW50XG4gICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgKTtcbiAgICBcbiAgICAvLyBBZmZpY2hlciBsYSBwcsOpdmlzdWFsaXNhdGlvbiBpbml0aWFsZVxuICAgIGNvbnN0IGluaXRpYWxWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICBpZiAoaW5pdGlhbFZhbGlkYXRpb24udmFsaWQgJiYgaW5pdGlhbFZhbGlkYXRpb24ucHJldmlldykge1xuICAgICAgZGF0ZUZvcm1hdFNldHRpbmcuc2V0RGVzYyhgT3V0cHV0IGZvcm1hdCBmb3IgcGFyc2VkIGRhdGVzIChQcmV2aWV3OiAke2luaXRpYWxWYWxpZGF0aW9uLnByZXZpZXd9KWApO1xuICAgIH1cblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJXZWVrIHN0YXJ0cyBvblwiKVxuICAgICAgLnNldERlc2MoXCJXaGljaCBkYXkgdG8gY29uc2lkZXIgYXMgdGhlIHN0YXJ0IG9mIHRoZSB3ZWVrXCIpXG4gICAgICAuYWRkRHJvcGRvd24oKGRyb3Bkb3duKSA9PiB7XG4gICAgICAgIGRyb3Bkb3duLmFkZE9wdGlvbihcImxvY2FsZS1kZWZhdWx0XCIsIGBMb2NhbGUgZGVmYXVsdCAoJHtTdHJpbmcobG9jYWxlV2Vla1N0YXJ0KX0pYCk7XG4gICAgICAgIGxvY2FsaXplZFdlZWtkYXlzLmZvckVhY2goKGRheSwgaSkgPT4ge1xuICAgICAgICAgIGRyb3Bkb3duLmFkZE9wdGlvbih3ZWVrZGF5c1tpXSwgZGF5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRyb3Bkb3duLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLndlZWtTdGFydC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgZHJvcGRvd24ub25DaGFuZ2UoYXN5bmMgKHZhbHVlOiBEYXlPZldlZWspID0+IHtcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy53ZWVrU3RhcnQgPSB2YWx1ZTtcbiAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKS5zZXRIZWFkaW5nKCkuc2V0TmFtZShcIkxhbmd1YWdlIHNldHRpbmdzXCIpO1xuXG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiRW5nbGlzaFwiLCBcImVuZ2xpc2hcIiwgXCJlblwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJKYXBhbmVzZVwiLCBcImphcGFuZXNlXCIsIFwiamFcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiRnJlbmNoXCIsIFwiZnJlbmNoXCIsIFwiZnJcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiR2VybWFuXCIsIFwiZ2VybWFuXCIsIFwiZGVcIiwgXCJwYXJ0aWFsbHkgc3VwcG9ydGVkXCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIlBvcnR1Z3Vlc2VcIiwgXCJwb3J0dWd1ZXNlXCIsIFwicHRcIiwgXCJwYXJ0aWFsbHkgc3VwcG9ydGVkXCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIkR1dGNoXCIsIFwiZHV0Y2hcIiwgXCJubFwiLCBcInVuZGVyIGRldmVsb3BtZW50XCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIlNwYW5pc2hcIiwgXCJzcGFuaXNoXCIsIFwiZXNcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiSXRhbGlhblwiLCBcIml0YWxpYW5cIiwgXCJpdFwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJSdXNzaWFuXCIsIFwicnVzc2lhblwiLCBcInJ1XCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIlVrcmFpbmlhblwiLCBcInVrcmFpbmlhblwiLCBcInVrXCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIkNoaW5lc2UgKFRyYWRpdGlvbmFsKVwiLCBcImNoaW5lc2VcIiwgXCJ6aC5oYW50XCIsIFwicGFydGlhbGx5IHN1cHBvcnRlZFwiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKS5zZXRIZWFkaW5nKCkuc2V0TmFtZShcIkhvdGtleSBmb3JtYXR0aW5nIHNldHRpbmdzXCIpO1xuXG4gICAgY29uc3QgdGltZUZvcm1hdFNldHRpbmcgPSBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiVGltZSBmb3JtYXRcIilcbiAgICAgIC5zZXREZXNjKFwiRm9ybWF0IGZvciB0aGUgaG90a2V5cyB0aGF0IGluY2x1ZGUgdGhlIGN1cnJlbnQgdGltZVwiKVxuICAgICAgLmFkZE1vbWVudEZvcm1hdCgodGV4dCkgPT5cbiAgICAgICAgdGV4dFxuICAgICAgICAgIC5zZXREZWZhdWx0Rm9ybWF0KFwiSEg6bW1cIilcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdClcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh2YWx1ZSB8fCBcIkhIOm1tXCIpO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlZC52YWxpZCkge1xuICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0ID0gdmFsdWUgfHwgXCJISDptbVwiO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgLy8gTWV0dHJlIMOgIGpvdXIgbGEgZGVzY3JpcHRpb24gYXZlYyBsYSBwcsOpdmlzdWFsaXNhdGlvbiAoc2VlXG4gICAgICAgICAgICAgIC8vIHRoZSBkYXRlLWZvcm1hdCBzZXR0aW5nIGFib3ZlOiB0aGUgXCI6ICcnXCIgZmFsbGJhY2sgaGVyZSBpc1xuICAgICAgICAgICAgICAvLyBzaW1pbGFybHkgdW5yZWFjaGFibGUgZ2l2ZW4gdmFsaWRhdGVNb21lbnRGb3JtYXQoKSdzIGNvbnRyYWN0KS5cbiAgICAgICAgICAgICAgdGltZUZvcm1hdFNldHRpbmcuc2V0RGVzYyhgRm9ybWF0IGZvciB0aGUgaG90a2V5cyB0aGF0IGluY2x1ZGUgdGhlIGN1cnJlbnQgdGltZSR7dmFsaWRhdGVkLnByZXZpZXcgPyBgIChQcmV2aWV3OiAke3ZhbGlkYXRlZC5wcmV2aWV3fSlgIDogXCJcIn1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEFmZmljaGVyIGwnZXJyZXVyIGRhbnMgbGEgZGVzY3JpcHRpb24gKHVucmVhY2hhYmxlIGZhbGxiYWNrLFxuICAgICAgICAgICAgICAvLyBzYW1lIHJlYXNvbmluZyBhcyB0aGUgZGF0ZS1mb3JtYXQgc2V0dGluZyBhYm92ZSkuXG4gICAgICAgICAgICAgIHRpbWVGb3JtYXRTZXR0aW5nLnNldERlc2MoYEZvcm1hdCBmb3IgdGhlIGhvdGtleXMgdGhhdCBpbmNsdWRlIHRoZSBjdXJyZW50IHRpbWUgLSDimqDvuI8gJHt2YWxpZGF0ZWQuZXJyb3IgfHwgXCJGb3JtYXQgaW52YWxpZGVcIn1gKTtcbiAgICAgICAgICAgICAgLy8gTmUgcGFzIHNhdXZlZ2FyZGVyIGxlIGZvcm1hdCBpbnZhbGlkZSwgcmVzdGF1cmVyIGxlIHByw6ljw6lkZW50XG4gICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgXG4gICAgLy8gQWZmaWNoZXIgbGEgcHLDqXZpc3VhbGlzYXRpb24gaW5pdGlhbGVcbiAgICBjb25zdCBpbml0aWFsVGltZVZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0KTtcbiAgICBpZiAoaW5pdGlhbFRpbWVWYWxpZGF0aW9uLnZhbGlkICYmIGluaXRpYWxUaW1lVmFsaWRhdGlvbi5wcmV2aWV3KSB7XG4gICAgICB0aW1lRm9ybWF0U2V0dGluZy5zZXREZXNjKGBGb3JtYXQgZm9yIHRoZSBob3RrZXlzIHRoYXQgaW5jbHVkZSB0aGUgY3VycmVudCB0aW1lIChQcmV2aWV3OiAke2luaXRpYWxUaW1lVmFsaWRhdGlvbi5wcmV2aWV3fSlgKTtcbiAgICB9XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiU2VwYXJhdG9yXCIpXG4gICAgICAuc2V0RGVzYyhcIlNlcGFyYXRvciBiZXR3ZWVuIGRhdGUgYW5kIHRpbWUgZm9yIGVudHJpZXMgdGhhdCBoYXZlIGJvdGhcIilcbiAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PlxuICAgICAgICB0ZXh0XG4gICAgICAgICAgLnNldFBsYWNlaG9sZGVyKFwiU2VwYXJhdG9yIGlzIGVtcHR5XCIpXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnNlcGFyYXRvcilcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZXBhcmF0b3IgPSB2YWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiRGF0ZSBhdXRvc3VnZ2VzdFwiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJFbmFibGUgZGF0ZSBhdXRvc3VnZ2VzdFwiKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIGBJbnB1dCBkYXRlcyB3aXRoIG5hdHVyYWwgbGFuZ3VhZ2UuIE9wZW4gdGhlIHN1Z2dlc3QgbWVudSB3aXRoICR7dGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZX1gXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5pc0F1dG9zdWdnZXN0RW5hYmxlZClcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pc0F1dG9zdWdnZXN0RW5hYmxlZCA9IHZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiQWRkIGRhdGVzIGFzIGxpbms/XCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJJZiBlbmFibGVkLCBkYXRlcyBjcmVhdGVkIHZpYSBhdXRvc3VnZ2VzdCB3aWxsIGJlIHdyYXBwZWQgaW4gW1t3aWtpbGlua3NdXVwiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvc3VnZ2VzdFRvZ2dsZUxpbmspXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b3N1Z2dlc3RUb2dnbGVMaW5rID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIGNvbnN0IHRyaWdnZXJQaHJhc2VEZXNjID0gXCJDaGFyYWN0ZXIocykgdGhhdCB3aWxsIGNhdXNlIHRoZSBkYXRlIGF1dG9zdWdnZXN0IHRvIG9wZW5cIjtcbiAgICBjb25zdCB0cmlnZ2VyUGhyYXNlU2V0dGluZyA9IG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJUcmlnZ2VyIHBocmFzZVwiKVxuICAgICAgLnNldERlc2ModHJpZ2dlclBocmFzZURlc2MpXG4gICAgICAuYWRkTW9tZW50Rm9ybWF0KCh0ZXh0KSA9PlxuICAgICAgICB0ZXh0XG4gICAgICAgICAgLnNldFBsYWNlaG9sZGVyKERFRkFVTFRfU0VUVElOR1MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSlcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSB8fCBcIkBcIilcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgaWYgKHRyaW1tZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSA9IHRyaW1tZWQ7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICB0cmlnZ2VyUGhyYXNlU2V0dGluZy5zZXREZXNjKHRyaWdnZXJQaHJhc2VEZXNjKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEFuIGVtcHR5IHRyaWdnZXIgcGhyYXNlIG1ha2VzIG9uVHJpZ2dlcigpJ3NcbiAgICAgICAgICAgICAgLy8gcXVlcnkuc3RhcnRzV2l0aCh0cmlnZ2VyUGhyYXNlKSBhbHdheXMgdHJ1ZSwgc28gdGhlXG4gICAgICAgICAgICAgIC8vIGF1dG9zdWdnZXN0IHBvcHVwIHdvdWxkIGZpcmUgb24gdmlydHVhbGx5IGV2ZXJ5IGtleXN0cm9rZS5cbiAgICAgICAgICAgICAgLy8gUmVmdXNlIHRvIHNhdmUgaXQsIG1hdGNoaW5nIHRoZSBEYXRlL1RpbWUgZm9ybWF0IGZpZWxkcyBhYm92ZS5cbiAgICAgICAgICAgICAgdHJpZ2dlclBocmFzZVNldHRpbmcuc2V0RGVzYyhgJHt0cmlnZ2VyUGhyYXNlRGVzY30gLSDimqDvuI8gVHJpZ2dlciBwaHJhc2UgY2Fubm90IGJlIGVtcHR5YCk7XG4gICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSB8fCBcIkBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJTbWFydCBzdWdnZXN0aW9uc1wiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJFbmFibGUgc21hcnQgc3VnZ2VzdGlvbnNcIilcbiAgICAgIC5zZXREZXNjKFxuICAgICAgICBcIkVuYWJsZSBpbnRlbGxpZ2VudCBzdWdnZXN0aW9ucyBiYXNlZCBvbiB5b3VyIHVzYWdlIGhpc3RvcnkgYW5kIGRvY3VtZW50IGNvbnRleHRcIlxuICAgICAgKVxuICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PlxuICAgICAgICB0b2dnbGVcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlU21hcnRTdWdnZXN0aW9ucylcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVTbWFydFN1Z2dlc3Rpb25zID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJIaXN0b3J5LWJhc2VkIHN1Z2dlc3Rpb25zXCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJMZWFybiBmcm9tIHlvdXIgZnJlcXVlbnRseSB1c2VkIGRhdGUgcGF0dGVybnMgYW5kIHByaW9yaXRpemUgdGhlbSBpbiBzdWdnZXN0aW9uc1wiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVIaXN0b3J5U3VnZ2VzdGlvbnMpXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSGlzdG9yeVN1Z2dlc3Rpb25zID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJDb250ZXh0LWJhc2VkIHN1Z2dlc3Rpb25zXCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJTdWdnZXN0IGRhdGVzIGJhc2VkIG9uIGRhdGVzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgY3VycmVudCBkb2N1bWVudFwiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVDb250ZXh0U3VnZ2VzdGlvbnMpXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlQ29udGV4dFN1Z2dlc3Rpb25zID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJNYW5hZ2UgaGlzdG9yeVwiKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIFwiVmlldyB5b3VyIHN1Z2dlc3Rpb24gaGlzdG9yeSBhbmQgcmVtb3ZlIGluZGl2aWR1YWwgZW50cmllcywgb3IgY2xlYXIgaXQgZW50aXJlbHlcIlxuICAgICAgKVxuICAgICAgLmFkZEJ1dHRvbigoYnV0dG9uKSA9PlxuICAgICAgICBidXR0b25cbiAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIk1hbmFnZSBoaXN0b3J5XCIpXG4gICAgICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICAgICAgbmV3IEhpc3RvcnlNYW5hZ2VyTW9kYWwodGhpcy5hcHAsIHRoaXMucGx1Z2luKS5vcGVuKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJEYXRlIGZvcm1hdHRpbmdcIik7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiT21pdCBkYXRlIGZvciBzaG9ydCByZWxhdGl2ZSBleHByZXNzaW9uc1wiKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIFwiV2hlbiBlbmFibGVkLCBzaG9ydCByZWxhdGl2ZSBleHByZXNzaW9ucyBmb3IgdG9kYXkgKGUuZy4sICdpbiAxNSBtaW4nLCAnZGFucyAyIGhldXJlcycpIHdpbGwgZGlzcGxheSBvbmx5IHRoZSB0aW1lIChlLmcuLCAnMTQ6MzAnKSBpbnN0ZWFkIG9mICdbWzIwMjQtMDEtMTVdXSAxNDozMCdcIlxuICAgICAgKVxuICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PlxuICAgICAgICB0b2dnbGVcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLm9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZSA9IHZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgdGV4dDogc3RyaW5nLCBzZXR0aW5nS2V5OiBrZXlvZiBOTERTZXR0aW5ncywgY29kZTogc3RyaW5nLCBub3RlPzogc3RyaW5nKSA6IFNldHRpbmcge1xuICAgIG5vdGUgPSBub3RlID8gYCAoJHtub3RlfSlgIDogXCJcIjtcbiAgICByZXR1cm4gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZSh0ZXh0KVxuICAgICAgLnNldERlc2MoYFdoZXRoZXIgdG8gcGFyc2UgJHt0ZXh0fSBvciBub3RgICsgbm90ZSlcbiAgICAgIC5hZGRUb2dnbGUobCA9PlxuICAgICAgICBsXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzW3NldHRpbmdLZXldIGFzIGJvb2xlYW4pXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2KSA9PiB7XG4gICAgICAgICAgICAodGhpcy5wbHVnaW4uc2V0dGluZ3Nbc2V0dGluZ0tleV0gYXMgYm9vbGVhbikgPSB2O1xuICAgICAgICAgICAgdGhpcy5lZGl0TGFuZ3VhZ2VzKGNvZGUsIHYpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZXNldFBhcnNlcigpO1xuICAgICAgICAgIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlZGl0TGFuZ3VhZ2VzKGNvZGU6IHN0cmluZywgZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChlbmFibGVkKSB7XG4gICAgICBpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcy5pbmNsdWRlcyhjb2RlKSkge1xuICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXMucHVzaChjb2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXMuaW5kZXhPZihjb2RlKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSIsImltcG9ydCB7IEFwcCwgTW9kYWwsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGdlbmVyYXRlTWFya2Rvd25MaW5rLCBnZXRMb2NhbGVXZWVrU3RhcnQsIHZhbGlkYXRlTW9tZW50Rm9ybWF0LCBnZXRBY3RpdmVFZGl0b3IgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB0eXBlIE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuLi9tYWluXCI7XG5pbXBvcnQgeyBERUZBVUxUX1NFVFRJTkdTIH0gZnJvbSBcIi4uL3NldHRpbmdzXCI7XG5pbXBvcnQgdCBmcm9tIFwiLi4vbGFuZy9oZWxwZXJcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIi4uL3dpbmRvdy1tb21lbnRcIjtcblxudHlwZSBNb21lbnQgPSBpbXBvcnQoXCJtb21lbnRcIikuTW9tZW50O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRlUGlja2VyTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XG4gIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXM7XG4gIHByaXZhdGUgc2VsZWN0ZWREYXRlOiBNb21lbnQ7XG4gIHByaXZhdGUgY3VycmVudE1vbnRoOiBNb21lbnQ7XG4gIHByaXZhdGUgY2FsZW5kYXJFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBxdWlja0J1dHRvbnNFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwcmV2aWV3RWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZGF0ZUlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0RhcmtNb2RlOiBib29sZWFuO1xuICBwcml2YXRlIHRoZW1lT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBrZXlib2FyZEhhbmRsZXI6ICgoZTogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZERhdGVGbjogKChkYXRlOiBNb21lbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpIHtcbiAgICBzdXBlcihhcHApO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbW9tZW50KCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBtb21lbnQoKTtcbiAgICAvLyBEw6l0ZWN0ZXIgbGUgbW9kZSBzb21icmVcbiAgICB0aGlzLmlzRGFya01vZGUgPSBhY3RpdmVEb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInRoZW1lLWRhcmtcIik7XG4gIH1cblxuICBvbk9wZW4oKTogdm9pZCB7XG4gICAgY29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XG4gICAgY29udGVudEVsLmVtcHR5KCk7XG4gICAgY29udGVudEVsLmFkZENsYXNzKFwibmxkLWRhdGUtcGlja2VyLW1vZGFsXCIpO1xuXG4gICAgLy8gQWpvdXRlciBsZXMgc3R5bGVzIHBvdXIgbGUgbW9kZSBzb21icmVcbiAgICBpZiAodGhpcy5pc0RhcmtNb2RlKSB7XG4gICAgICBjb250ZW50RWwuYWRkQ2xhc3MoXCJubGQtZGFyay1tb2RlXCIpO1xuICAgIH1cblxuICAgIGxldCBtb21lbnRGb3JtYXQgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5tb2RhbE1vbWVudEZvcm1hdDtcbiAgICBsZXQgaW5zZXJ0QXNMaW5rID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxUb2dnbGVMaW5rO1xuICAgIGxldCBkYXRlSW5wdXQgPSBcIlwiO1xuXG4gICAgY29uc3QgZ2V0RGF0ZVN0ciA9ICgpID0+IHtcbiAgICAgIGxldCBjbGVhbkRhdGVJbnB1dCA9IGRhdGVJbnB1dDtcbiAgICAgIGxldCBzaG91bGRJbmNsdWRlQWxpYXMgPSBmYWxzZTtcblxuICAgICAgaWYgKGRhdGVJbnB1dC5lbmRzV2l0aChcInxcIikpIHtcbiAgICAgICAgc2hvdWxkSW5jbHVkZUFsaWFzID0gdHJ1ZTtcbiAgICAgICAgY2xlYW5EYXRlSW5wdXQgPSBkYXRlSW5wdXQuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuXG4gICAgICAvLyBVdGlsaXNlciBsYSBkYXRlIHPDqWxlY3Rpb25uw6llIGRhbnMgbGUgY2FsZW5kcmllciBzaSBkaXNwb25pYmxlXG4gICAgICBjb25zdCBkYXRlVG9QYXJzZSA9IGNsZWFuRGF0ZUlucHV0IHx8IHRoaXMuc2VsZWN0ZWREYXRlLmZvcm1hdChcIllZWVktTU0tRERcIik7XG4gICAgICBjb25zdCBwYXJzZWREYXRlID0gdGhpcy5wbHVnaW4ucGFyc2VEYXRlKGRhdGVUb1BhcnNlKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgYXZhbnQgdXRpbGlzYXRpb25cbiAgICAgIGNvbnN0IGZvcm1hdFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdChtb21lbnRGb3JtYXQpO1xuICAgICAgY29uc3QgZm9ybWF0VG9Vc2UgPSBmb3JtYXRWYWxpZGF0aW9uLnZhbGlkID8gbW9tZW50Rm9ybWF0IDogREVGQVVMVF9TRVRUSU5HUy5tb2RhbE1vbWVudEZvcm1hdDtcbiAgICAgIFxuICAgICAgbGV0IHBhcnNlZERhdGVTdHJpbmcgPSBwYXJzZWREYXRlLm1vbWVudC5pc1ZhbGlkKClcbiAgICAgICAgPyBwYXJzZWREYXRlLm1vbWVudC5mb3JtYXQoZm9ybWF0VG9Vc2UpXG4gICAgICAgIDogXCJcIjtcblxuICAgICAgaWYgKGluc2VydEFzTGluaykge1xuICAgICAgICBwYXJzZWREYXRlU3RyaW5nID0gZ2VuZXJhdGVNYXJrZG93bkxpbmsoXG4gICAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgICAgcGFyc2VkRGF0ZVN0cmluZyxcbiAgICAgICAgICBzaG91bGRJbmNsdWRlQWxpYXMgPyBjbGVhbkRhdGVJbnB1dCA6IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkRGF0ZVN0cmluZztcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlUHJldmlldyA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnByZXZpZXdFbCkge1xuICAgICAgICB0aGlzLnByZXZpZXdFbC5zZXRUZXh0KGdldERhdGVTdHIoKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHN5bmNJbnB1dCBjb250cm9scyB3aGV0aGVyIHRoZSByYXcgdGV4dCBmaWVsZCBnZXRzIG92ZXJ3cml0dGVuIHdpdGhcbiAgICAvLyB0aGUgZm9ybWF0dGVkIGRhdGUuIENhbGVuZGFyIGNsaWNrcy9xdWljayBidXR0b25zL2tleWJvYXJkIG5hdiB3YW50XG4gICAgLy8gdGhhdCAoaXQncyBob3cgdGhlIGZpZWxkIHJlZmxlY3RzIHRoZSBzZWxlY3Rpb24pLCBidXQgdGhlIGZpZWxkJ3Mgb3duXG4gICAgLy8gb25DaGFuZ2UgaGFuZGxlciBtdXN0IE5PVCBzeW5jIGl0c2VsZiB3aGlsZSB0aGUgdXNlciBpcyBzdGlsbCB0eXBpbmdcbiAgICAvLyBpbnRvIGl0IC0tIGdldERhdGVTdHIoKS91cGRhdGVQcmV2aWV3KCkgYWxyZWFkeSBzaG93IGEgbGl2ZSBwcmV2aWV3XG4gICAgLy8gb2YgdGhlIHBhcnNlZCByZXN1bHQgc2VwYXJhdGVseSwgd2l0aG91dCB0b3VjaGluZyB3aGF0J3MgYmVpbmcgdHlwZWQuXG4gICAgY29uc3QgdXBkYXRlU2VsZWN0ZWREYXRlID0gKGRhdGU6IE1vbWVudCwgc3luY0lucHV0ID0gdHJ1ZSkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBkYXRlLmNsb25lKCk7XG4gICAgICBpZiAoc3luY0lucHV0ICYmIHRoaXMuZGF0ZUlucHV0RWwpIHtcbiAgICAgICAgdGhpcy5kYXRlSW5wdXRFbC52YWx1ZSA9IGRhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZVByZXZpZXcoKTtcbiAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICB9O1xuXG4gICAgLy8gU3RvY2tlciBsYSBmb25jdGlvbiBwb3VyIHF1J2VsbGUgc29pdCBhY2Nlc3NpYmxlIGRlcHVpcyByZW5kZXJDYWxlbmRhclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlRm4gPSB1cGRhdGVTZWxlY3RlZERhdGU7XG5cbiAgICAvLyBDb250YWluZXIgcHJpbmNpcGFsXG4gICAgY29uc3QgY29udGFpbmVyID0gY29udGVudEVsLmNyZWF0ZURpdihcIm5sZC1kYXRlLXBpY2tlci1jb250YWluZXJcIik7XG5cbiAgICAvLyBTZWN0aW9uIGRlcyBib3V0b25zIHJhcGlkZXNcbiAgICB0aGlzLnF1aWNrQnV0dG9uc0VsID0gY29udGFpbmVyLmNyZWF0ZURpdihcIm5sZC1xdWljay1idXR0b25zXCIpO1xuICAgIHRoaXMucmVuZGVyUXVpY2tCdXR0b25zKHVwZGF0ZVNlbGVjdGVkRGF0ZSk7XG5cbiAgICAvLyBTZWN0aW9uIGR1IGNhbGVuZHJpZXJcbiAgICBjb25zdCBjYWxlbmRhclNlY3Rpb24gPSBjb250YWluZXIuY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLXNlY3Rpb25cIik7XG4gICAgXG4gICAgLy8gTmF2aWdhdGlvbiBkdSBjYWxlbmRyaWVyXG4gICAgY29uc3QgbmF2RWwgPSBjYWxlbmRhclNlY3Rpb24uY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLW5hdlwiKTtcbiAgICBjb25zdCBwcmV2TW9udGhCdG4gPSBuYXZFbC5jcmVhdGVFbChcImJ1dHRvblwiLCB7XG4gICAgICBjbHM6IFwibmxkLW5hdi1idG5cIixcbiAgICAgIHRleHQ6IFwi4oC5XCIsXG4gICAgICBhdHRyOiB7IFwiYXJpYS1sYWJlbFwiOiBcIk1vaXMgcHLDqWPDqWRlbnRcIiB9XG4gICAgfSk7XG4gICAgXG4gICAgY29uc3QgbW9udGhZZWFyRWwgPSBuYXZFbC5jcmVhdGVEaXYoXCJubGQtbW9udGgteWVhclwiKTtcbiAgICBcbiAgICBjb25zdCBuZXh0TW9udGhCdG4gPSBuYXZFbC5jcmVhdGVFbChcImJ1dHRvblwiLCB7XG4gICAgICBjbHM6IFwibmxkLW5hdi1idG5cIixcbiAgICAgIHRleHQ6IFwi4oC6XCIsXG4gICAgICBhdHRyOiB7IFwiYXJpYS1sYWJlbFwiOiBcIk1vaXMgc3VpdmFudFwiIH1cbiAgICB9KTtcblxuICAgIHByZXZNb250aEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGguc3VidHJhY3QoMSwgXCJtb250aFwiKTtcbiAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICAgIHRoaXMudXBkYXRlTW9udGhZZWFyRGlzcGxheShtb250aFllYXJFbCk7XG4gICAgfSk7XG5cbiAgICBuZXh0TW9udGhCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoLmFkZCgxLCBcIm1vbnRoXCIpO1xuICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgdGhpcy51cGRhdGVNb250aFllYXJEaXNwbGF5KG1vbnRoWWVhckVsKTtcbiAgICB9KTtcblxuICAgIC8vIFPDqWxlY3RldXIgZCdhbm7DqWUgKGRyb3Bkb3duKVxuICAgIGNvbnN0IHllYXJTZWxlY3QgPSBuYXZFbC5jcmVhdGVFbChcInNlbGVjdFwiLCB7IGNsczogXCJubGQteWVhci1zZWxlY3RcIiB9KTtcbiAgICBjb25zdCBjdXJyZW50WWVhciA9IHRoaXMuY3VycmVudE1vbnRoLnllYXIoKTtcbiAgICBmb3IgKGxldCB5ZWFyID0gY3VycmVudFllYXIgLSAxMDsgeWVhciA8PSBjdXJyZW50WWVhciArIDEwOyB5ZWFyKyspIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHllYXJTZWxlY3QuY3JlYXRlRWwoXCJvcHRpb25cIiwgeyB0ZXh0OiBTdHJpbmcoeWVhciksIHZhbHVlOiBTdHJpbmcoeWVhcikgfSk7XG4gICAgICBpZiAoeWVhciA9PT0gY3VycmVudFllYXIpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgeWVhclNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIChlKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudDtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoLnllYXIocGFyc2VJbnQodGFyZ2V0LnZhbHVlKSk7XG4gICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICB0aGlzLnVwZGF0ZU1vbnRoWWVhckRpc3BsYXkobW9udGhZZWFyRWwpO1xuICAgIH0pO1xuXG4gICAgLy8gU8OpbGVjdGV1ciBkZSBtb2lzIChkcm9wZG93bilcbiAgICBjb25zdCBtb250aFNlbGVjdCA9IG5hdkVsLmNyZWF0ZUVsKFwic2VsZWN0XCIsIHsgY2xzOiBcIm5sZC1tb250aC1zZWxlY3RcIiB9KTtcbiAgICBjb25zdCBtb250aE5hbWVzID0gbW9tZW50Lm1vbnRocygpO1xuICAgIG1vbnRoTmFtZXMuZm9yRWFjaCgobW9udGgsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBvcHRpb24gPSBtb250aFNlbGVjdC5jcmVhdGVFbChcIm9wdGlvblwiLCB7IHRleHQ6IG1vbnRoLCB2YWx1ZTogU3RyaW5nKGluZGV4KSB9KTtcbiAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5jdXJyZW50TW9udGgubW9udGgoKSkge1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG1vbnRoU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xuICAgICAgdGhpcy5jdXJyZW50TW9udGgubW9udGgocGFyc2VJbnQodGFyZ2V0LnZhbHVlKSk7XG4gICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICB0aGlzLnVwZGF0ZU1vbnRoWWVhckRpc3BsYXkobW9udGhZZWFyRWwpO1xuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVNb250aFllYXJEaXNwbGF5KG1vbnRoWWVhckVsKTtcblxuICAgIC8vIENhbGVuZHJpZXJcbiAgICB0aGlzLmNhbGVuZGFyRWwgPSBjYWxlbmRhclNlY3Rpb24uY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyXCIpO1xuICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcblxuICAgIC8vIFNlY3Rpb24gZGUgc2Fpc2llIG1hbnVlbGxlXG4gICAgY29uc3QgaW5wdXRTZWN0aW9uID0gY29udGFpbmVyLmNyZWF0ZURpdihcIm5sZC1pbnB1dC1zZWN0aW9uXCIpO1xuICAgIGNvbnN0IGRhdGVJbnB1dEVsID0gbmV3IFNldHRpbmcoaW5wdXRTZWN0aW9uKVxuICAgICAgLnNldE5hbWUoXCJEYXRlXCIpXG4gICAgICAuc2V0RGVzYyhcIlwiKVxuICAgICAgLmFkZFRleHQoKHRleHRFbCkgPT4ge1xuICAgICAgICB0ZXh0RWwuc2V0UGxhY2Vob2xkZXIoXCJUb2RheVwiKTtcbiAgICAgICAgdGV4dEVsLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWREYXRlLmZvcm1hdChcIllZWVktTU0tRERcIikpO1xuICAgICAgICB0aGlzLmRhdGVJbnB1dEVsID0gdGV4dEVsLmlucHV0RWw7XG5cbiAgICAgICAgdGV4dEVsLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGRhdGVJbnB1dCA9IHZhbHVlO1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wbHVnaW4ucGFyc2VEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWQubW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICB1cGRhdGVTZWxlY3RlZERhdGUocGFyc2VkLm1vbWVudCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB1cGRhdGVQcmV2aWV3KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRleHRFbC5pbnB1dEVsLmZvY3VzKCksIDEwKTtcbiAgICAgIH0pO1xuICAgIHRoaXMucHJldmlld0VsID0gZGF0ZUlucHV0RWwuZGVzY0VsO1xuICAgIHVwZGF0ZVByZXZpZXcoKTtcblxuICAgIC8vIE9wdGlvbnMgZGUgZm9ybWF0XG4gICAgY29uc3QgZm9ybWF0U2V0dGluZyA9IG5ldyBTZXR0aW5nKGlucHV0U2VjdGlvbilcbiAgICAgIC5zZXROYW1lKFwiRGF0ZSBmb3JtYXRcIilcbiAgICAgIC5zZXREZXNjKFwiTW9tZW50IGZvcm1hdCB0byBiZSB1c2VkXCIpXG4gICAgICAuYWRkTW9tZW50Rm9ybWF0KChtb21lbnRFbCkgPT4ge1xuICAgICAgICBtb21lbnRFbC5zZXRQbGFjZWhvbGRlcihcIllZWVktTU0tREQgSEg6bW1cIik7XG4gICAgICAgIG1vbWVudEVsLnNldFZhbHVlKG1vbWVudEZvcm1hdCk7XG4gICAgICAgIG1vbWVudEVsLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlTW9tZW50Rm9ybWF0KHZhbHVlLnRyaW0oKSB8fCBcIllZWVktTU0tREQgSEg6bW1cIik7XG4gICAgICAgICAgaWYgKHZhbGlkYXRlZC52YWxpZCkge1xuICAgICAgICAgICAgbW9tZW50Rm9ybWF0ID0gdmFsdWUudHJpbSgpIHx8IFwiWVlZWS1NTS1ERCBISDptbVwiO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxNb21lbnRGb3JtYXQgPSBtb21lbnRGb3JtYXQ7XG4gICAgICAgICAgICB2b2lkIHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgdXBkYXRlUHJldmlldygpO1xuICAgICAgICAgICAgLy8gTWV0dHJlIMOgIGpvdXIgbGEgZGVzY3JpcHRpb24gYXZlYyBsYSBwcsOpdmlzdWFsaXNhdGlvblxuICAgICAgICAgICAgZm9ybWF0U2V0dGluZy5zZXREZXNjKGBNb21lbnQgZm9ybWF0IHRvIGJlIHVzZWQke3ZhbGlkYXRlZC5wcmV2aWV3ID8gYCAoUHJldmlldzogJHt2YWxpZGF0ZWQucHJldmlld30pYCA6IFwiXCJ9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFmZmljaGVyIGwnZXJyZXVyIGRhbnMgbGEgZGVzY3JpcHRpb25cbiAgICAgICAgICAgIGZvcm1hdFNldHRpbmcuc2V0RGVzYyhgTW9tZW50IGZvcm1hdCB0byBiZSB1c2VkIC0g4pqg77iPICR7dmFsaWRhdGVkLmVycm9yIHx8IFwiRm9ybWF0IGludmFsaWRlXCJ9YCk7XG4gICAgICAgICAgICAvLyBOZSBwYXMgc2F1dmVnYXJkZXIgbGUgZm9ybWF0IGludmFsaWRlLCByZXN0YXVyZXIgbGUgcHLDqWPDqWRlbnRcbiAgICAgICAgICAgIG1vbWVudEVsLnNldFZhbHVlKG1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIFxuICAgIC8vIEFmZmljaGVyIGxhIHByw6l2aXN1YWxpc2F0aW9uIGluaXRpYWxlXG4gICAgY29uc3QgaW5pdGlhbFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdChtb21lbnRGb3JtYXQpO1xuICAgIGlmIChpbml0aWFsVmFsaWRhdGlvbi52YWxpZCAmJiBpbml0aWFsVmFsaWRhdGlvbi5wcmV2aWV3KSB7XG4gICAgICBmb3JtYXRTZXR0aW5nLnNldERlc2MoYE1vbWVudCBmb3JtYXQgdG8gYmUgdXNlZCAoUHJldmlldzogJHtpbml0aWFsVmFsaWRhdGlvbi5wcmV2aWV3fSlgKTtcbiAgICB9XG5cbiAgICBuZXcgU2V0dGluZyhpbnB1dFNlY3Rpb24pXG4gICAgICAuc2V0TmFtZShcIkFkZCBhcyBsaW5rP1wiKVxuICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlRWwpID0+IHtcbiAgICAgICAgdG9nZ2xlRWwuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxUb2dnbGVMaW5rKS5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBpbnNlcnRBc0xpbmsgPSB2YWx1ZTtcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5tb2RhbFRvZ2dsZUxpbmsgPSBpbnNlcnRBc0xpbms7XG4gICAgICAgICAgdm9pZCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB1cGRhdGVQcmV2aWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAvLyBCb3V0b25zIGQnYWN0aW9uXG4gICAgaW5wdXRTZWN0aW9uLmNyZWF0ZURpdihcIm1vZGFsLWJ1dHRvbi1jb250YWluZXJcIiwgKGJ1dHRvbkNvbnRhaW5lckVsKSA9PiB7XG4gICAgICBidXR0b25Db250YWluZXJFbFxuICAgICAgICAuY3JlYXRlRWwoXCJidXR0b25cIiwgeyBhdHRyOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSwgdGV4dDogXCJOZXZlciBtaW5kXCIgfSlcbiAgICAgICAgLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB0aGlzLmNsb3NlKCkpO1xuICAgICAgYnV0dG9uQ29udGFpbmVyRWwuY3JlYXRlRWwoXCJidXR0b25cIiwge1xuICAgICAgICBhdHRyOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgY2xzOiBcIm1vZC1jdGFcIixcbiAgICAgICAgdGV4dDogXCJJbnNlcnQgZGF0ZVwiLFxuICAgICAgfSkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgdGhpcy5pbnNlcnREYXRlKGdldERhdGVTdHIoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJhY2NvdXJjaXMgY2xhdmllclxuICAgIHRoaXMua2V5Ym9hcmRIYW5kbGVyID0gdGhpcy5jcmVhdGVLZXlib2FyZEhhbmRsZXIocHJldk1vbnRoQnRuLCBuZXh0TW9udGhCdG4sIHVwZGF0ZVNlbGVjdGVkRGF0ZSk7XG4gICAgdGhpcy5jb250ZW50RWwuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlib2FyZEhhbmRsZXIpO1xuXG4gICAgLy8gT2JzZXJ2ZXIgbGVzIGNoYW5nZW1lbnRzIGRlIHRow6htZVxuICAgIHRoaXMuc2V0dXBUaGVtZU9ic2VydmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclF1aWNrQnV0dG9ucyh1cGRhdGVTZWxlY3RlZERhdGU6IChkYXRlOiBNb21lbnQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucXVpY2tCdXR0b25zRWwpIHJldHVybjtcblxuICAgIHRoaXMucXVpY2tCdXR0b25zRWwuZW1wdHkoKTtcbiAgICB0aGlzLnF1aWNrQnV0dG9uc0VsLmNyZWF0ZURpdih7IGNsczogXCJubGQtcXVpY2stYnV0dG9ucy1sYWJlbFwiLCB0ZXh0OiBcIlF1aWNrIHNlbGVjdDpcIiB9KTtcblxuICAgIGNvbnN0IHByaW1hcnlMYW5nID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzWzBdIHx8IFwiZW5cIjtcbiAgICBcbiAgICAvLyBGb25jdGlvbiBoZWxwZXIgcG91ciBvYnRlbmlyIGxhIHByZW1pw6hyZSB2YXJpYW50ZSBkJ3VuZSB0cmFkdWN0aW9uXG4gICAgY29uc3QgZ2V0Rmlyc3RWYXJpYW50ID0gKGtleTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdChrZXksIHByaW1hcnlMYW5nKTtcbiAgICAgIGlmICh0cmFuc2xhdGlvbiA9PT0gXCJOT1RGT1VORFwiKSB7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgICB9XG4gICAgICAvLyBQcmVuZHJlIGxhIHByZW1pw6hyZSB2YXJpYW50ZSBzaSBwbHVzaWV1cnMgKHPDqXBhcsOpZXMgcGFyIHwpXG4gICAgICByZXR1cm4gdHJhbnNsYXRpb24uc3BsaXQoXCJ8XCIpWzBdLnRyaW0oKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcXVpY2tPcHRpb25zID0gW1xuICAgICAgeyBcbiAgICAgICAgbGFiZWw6IGdldEZpcnN0VmFyaWFudChcInRvZGF5XCIpLCBcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKSBcbiAgICAgIH0sXG4gICAgICB7IFxuICAgICAgICBsYWJlbDogZ2V0Rmlyc3RWYXJpYW50KFwidG9tb3Jyb3dcIiksIFxuICAgICAgICBtb21lbnQ6IG1vbWVudCgpLmFkZCgxLCBcImRheVwiKSBcbiAgICAgIH0sXG4gICAgICB7IFxuICAgICAgICBsYWJlbDogZ2V0Rmlyc3RWYXJpYW50KFwieWVzdGVyZGF5XCIpLCBcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKS5zdWJ0cmFjdCgxLCBcImRheVwiKSBcbiAgICAgIH0sXG4gICAgICB7IFxuICAgICAgICBsYWJlbDogYCR7Z2V0Rmlyc3RWYXJpYW50KFwibmV4dFwiKX0gJHtnZXRGaXJzdFZhcmlhbnQoXCJ3ZWVrXCIpfWAsIFxuICAgICAgICBtb21lbnQ6IG1vbWVudCgpLmFkZCgxLCBcIndlZWtcIikgXG4gICAgICB9LFxuICAgICAgeyBcbiAgICAgICAgbGFiZWw6IGAke2dldEZpcnN0VmFyaWFudChcIm5leHRcIil9ICR7Z2V0Rmlyc3RWYXJpYW50KFwibW9udGhcIil9YCwgXG4gICAgICAgIG1vbWVudDogbW9tZW50KCkuYWRkKDEsIFwibW9udGhcIikgXG4gICAgICB9LFxuICAgICAgeyBcbiAgICAgICAgbGFiZWw6IGAke2dldEZpcnN0VmFyaWFudChcIm5leHRcIil9ICR7Z2V0Rmlyc3RWYXJpYW50KFwieWVhclwiKX1gLCBcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKS5hZGQoMSwgXCJ5ZWFyXCIpIFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgYnV0dG9uc0NvbnRhaW5lciA9IHRoaXMucXVpY2tCdXR0b25zRWwuY3JlYXRlRGl2KFwibmxkLXF1aWNrLWJ1dHRvbnMtZ3JpZFwiKTtcblxuICAgIHF1aWNrT3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IGJ1dHRvbnNDb250YWluZXIuY3JlYXRlRWwoXCJidXR0b25cIiwge1xuICAgICAgICBjbHM6IFwibmxkLXF1aWNrLWJ0blwiLFxuICAgICAgICB0ZXh0OiBvcHRpb24ubGFiZWwsXG4gICAgICB9KTtcblxuICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVNlbGVjdGVkRGF0ZShvcHRpb24ubW9tZW50KTtcbiAgICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBvcHRpb24ubW9tZW50LmNsb25lKCk7XG4gICAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDYWxlbmRhcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FsZW5kYXJFbCkgcmV0dXJuO1xuXG4gICAgdGhpcy5jYWxlbmRhckVsLmVtcHR5KCk7XG5cbiAgICAvLyBFbi10w6p0ZXMgZGVzIGpvdXJzIGRlIGxhIHNlbWFpbmVcbiAgICBjb25zdCB3ZWVrU3RhcnQgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy53ZWVrU3RhcnQgPT09IFwibG9jYWxlLWRlZmF1bHRcIlxuICAgICAgPyBnZXRMb2NhbGVXZWVrU3RhcnQoKVxuICAgICAgOiB0aGlzLnBsdWdpbi5zZXR0aW5ncy53ZWVrU3RhcnQ7XG4gICAgXG4gICAgY29uc3Qgd2Vla1N0YXJ0SW5kZXggPSB3ZWVrU3RhcnQgPT09IFwic3VuZGF5XCIgPyAwIDogMTtcbiAgICBjb25zdCB3ZWVrZGF5cyA9IG1vbWVudC53ZWVrZGF5c1Nob3J0KCk7XG4gICAgY29uc3Qgb3JkZXJlZFdlZWtkYXlzID0gW1xuICAgICAgLi4ud2Vla2RheXMuc2xpY2Uod2Vla1N0YXJ0SW5kZXgpLFxuICAgICAgLi4ud2Vla2RheXMuc2xpY2UoMCwgd2Vla1N0YXJ0SW5kZXgpLFxuICAgIF07XG5cbiAgICBjb25zdCBoZWFkZXJSb3cgPSB0aGlzLmNhbGVuZGFyRWwuY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLWhlYWRlclwiKTtcbiAgICBvcmRlcmVkV2Vla2RheXMuZm9yRWFjaCgoZGF5KSA9PiB7XG4gICAgICBjb25zdCBkYXlIZWFkZXIgPSBoZWFkZXJSb3cuY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLWRheS1oZWFkZXJcIik7XG4gICAgICBkYXlIZWFkZXIuc2V0VGV4dChkYXkpO1xuICAgIH0pO1xuXG4gICAgLy8gR3JpbGxlIGR1IGNhbGVuZHJpZXJcbiAgICBjb25zdCBncmlkID0gdGhpcy5jYWxlbmRhckVsLmNyZWF0ZURpdihcIm5sZC1jYWxlbmRhci1ncmlkXCIpO1xuXG4gICAgY29uc3Qgc3RhcnRPZk1vbnRoID0gdGhpcy5jdXJyZW50TW9udGguY2xvbmUoKS5zdGFydE9mKFwibW9udGhcIik7XG4gICAgY29uc3QgZW5kT2ZNb250aCA9IHRoaXMuY3VycmVudE1vbnRoLmNsb25lKCkuZW5kT2YoXCJtb250aFwiKTtcbiAgICBcbiAgICAvLyBDYWxjdWxlciBsZSBkw6lidXQgZGUgbGEgc2VtYWluZSBzZWxvbiBsZXMgcHLDqWbDqXJlbmNlc1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHN0YXJ0T2ZNb250aC5jbG9uZSgpO1xuICAgIGNvbnN0IGRheU9mV2VlayA9IHN0YXJ0RGF0ZS5kYXkoKTtcbiAgICBjb25zdCBkaWZmID0gZGF5T2ZXZWVrIC0gd2Vla1N0YXJ0SW5kZXg7XG4gICAgaWYgKGRpZmYgPCAwKSB7XG4gICAgICBzdGFydERhdGUuc3VidHJhY3QoNyArIGRpZmYsIFwiZGF5c1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnREYXRlLnN1YnRyYWN0KGRpZmYsIFwiZGF5c1wiKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2FsY3VsZXIgbGEgZmluIGRlIGxhIHNlbWFpbmVcbiAgICBjb25zdCBlbmREYXRlID0gZW5kT2ZNb250aC5jbG9uZSgpO1xuICAgIGNvbnN0IGVuZERheU9mV2VlayA9IGVuZERhdGUuZGF5KCk7XG4gICAgY29uc3QgZW5kRGlmZiA9ICg2ICsgd2Vla1N0YXJ0SW5kZXggLSBlbmREYXlPZldlZWspICUgNztcbiAgICBpZiAoZW5kRGlmZiA+IDApIHtcbiAgICAgIGVuZERhdGUuYWRkKGVuZERpZmYsIFwiZGF5c1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b2RheSA9IG1vbWVudCgpO1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gc3RhcnREYXRlLmNsb25lKCk7XG5cbiAgICB3aGlsZSAoY3VycmVudERhdGUuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSwgXCJkYXlcIikpIHtcbiAgICAgIC8vIENhcHR1cmVyIGxhIGRhdGUgYWN0dWVsbGUgZGFucyB1bmUgdmFyaWFibGUgbG9jYWxlIHBvdXIgw6l2aXRlciBsZXMgcHJvYmzDqG1lcyBkZSBjbG9zdXJlXG4gICAgICBjb25zdCBkYXRlRm9yVGhpc0RheSA9IGN1cnJlbnREYXRlLmNsb25lKCk7XG4gICAgICBjb25zdCBkYXlFbCA9IGdyaWQuY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLWRheVwiKTtcbiAgICAgIGNvbnN0IGRheU51bWJlciA9IGRhdGVGb3JUaGlzRGF5LmRhdGUoKTtcblxuICAgICAgLy8gU3R5bGUgc2Vsb24gbGUgdHlwZSBkZSBqb3VyXG4gICAgICBpZiAoZGF0ZUZvclRoaXNEYXkuaXNTYW1lKHRvZGF5LCBcImRheVwiKSkge1xuICAgICAgICBkYXlFbC5hZGRDbGFzcyhcIm5sZC10b2RheVwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRlRm9yVGhpc0RheS5pc1NhbWUodGhpcy5zZWxlY3RlZERhdGUsIFwiZGF5XCIpKSB7XG4gICAgICAgIGRheUVsLmFkZENsYXNzKFwibmxkLXNlbGVjdGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKCFkYXRlRm9yVGhpc0RheS5pc1NhbWUodGhpcy5jdXJyZW50TW9udGgsIFwibW9udGhcIikpIHtcbiAgICAgICAgZGF5RWwuYWRkQ2xhc3MoXCJubGQtb3RoZXItbW9udGhcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRheU51bWJlckVsID0gZGF5RWwuY3JlYXRlRGl2KFwibmxkLWRheS1udW1iZXJcIik7XG4gICAgICBkYXlOdW1iZXJFbC5zZXRUZXh0KFN0cmluZyhkYXlOdW1iZXIpKTtcblxuICAgICAgLy8gw4l2w6luZW1lbnQgZGUgY2xpY1xuICAgICAgZGF5RWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlRm4pIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZUZuKGRhdGVGb3JUaGlzRGF5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGN1cnJlbnREYXRlLmFkZCgxLCBcImRheVwiKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vbnRoWWVhckRpc3BsYXkobW9udGhZZWFyRWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgbW9udGhZZWFyRWwuZW1wdHkoKTtcbiAgICBjb25zdCBtb250aE5hbWUgPSB0aGlzLmN1cnJlbnRNb250aC5mb3JtYXQoXCJNTU1NXCIpO1xuICAgIGNvbnN0IHllYXIgPSB0aGlzLmN1cnJlbnRNb250aC5mb3JtYXQoXCJZWVlZXCIpO1xuICAgIGNvbnN0IG1vbnRoU3BhbiA9IG1vbnRoWWVhckVsLmNyZWF0ZVNwYW4oKTtcbiAgICBtb250aFNwYW4uc2V0VGV4dChtb250aE5hbWUpO1xuICAgIGNvbnN0IHNwYWNlU3BhbiA9IG1vbnRoWWVhckVsLmNyZWF0ZVNwYW4oKTtcbiAgICBzcGFjZVNwYW4uc2V0VGV4dChcIiBcIik7XG4gICAgY29uc3QgeWVhclNwYW4gPSBtb250aFllYXJFbC5jcmVhdGVTcGFuKCk7XG4gICAgeWVhclNwYW4uc2V0VGV4dCh5ZWFyKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlS2V5Ym9hcmRIYW5kbGVyKFxuICAgIHByZXZNb250aEJ0bjogSFRNTEVsZW1lbnQsXG4gICAgbmV4dE1vbnRoQnRuOiBIVE1MRWxlbWVudCxcbiAgICB1cGRhdGVTZWxlY3RlZERhdGU6IChkYXRlOiBNb21lbnQpID0+IHZvaWRcbiAgKTogKGU6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQge1xuICAgIHJldHVybiAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgLy8gw4l2aXRlciBsZXMgcmFjY291cmNpcyBzaSBvbiBlc3QgZGFucyB1biBpbnB1dFxuICAgICAgaWYgKGUudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fCBlLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChlLmtleSkge1xuICAgICAgICBjYXNlIFwiQXJyb3dMZWZ0XCI6XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHByZXZNb250aEJ0bi5jbGljaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQXJyb3dSaWdodFwiOlxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBuZXh0TW9udGhCdG4uY2xpY2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFycm93VXBcIjpcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGguc3VidHJhY3QoMSwgXCJtb250aFwiKTtcbiAgICAgICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIjpcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGguYWRkKDEsIFwibW9udGhcIik7XG4gICAgICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiSG9tZVwiOlxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB1cGRhdGVTZWxlY3RlZERhdGUobW9tZW50KCkpO1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gbW9tZW50KCk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRXNjYXBlXCI6XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFRoZW1lT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgLy8gT2JzZXJ2ZXIgbGVzIGNoYW5nZW1lbnRzIGRlIGNsYXNzZSBwb3VyIGTDqXRlY3RlciBsZSBjaGFuZ2VtZW50IGRlIHRow6htZVxuICAgIHRoaXMudGhlbWVPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICAgIGNvbnN0IHdhc0RhcmtNb2RlID0gdGhpcy5pc0RhcmtNb2RlO1xuICAgICAgdGhpcy5pc0RhcmtNb2RlID0gYWN0aXZlRG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJ0aGVtZS1kYXJrXCIpO1xuXG4gICAgICBpZiAod2FzRGFya01vZGUgIT09IHRoaXMuaXNEYXJrTW9kZSAmJiB0aGlzLmNvbnRlbnRFbCkge1xuICAgICAgICBpZiAodGhpcy5pc0RhcmtNb2RlKSB7XG4gICAgICAgICAgdGhpcy5jb250ZW50RWwuYWRkQ2xhc3MoXCJubGQtZGFyay1tb2RlXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29udGVudEVsLnJlbW92ZUNsYXNzKFwibmxkLWRhcmstbW9kZVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50aGVtZU9ic2VydmVyLm9ic2VydmUoYWN0aXZlRG9jdW1lbnQuYm9keSwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIl0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluc2VydERhdGUoZGF0ZVN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKHRoaXMuYXBwLndvcmtzcGFjZSk7XG4gICAgaWYgKCFhY3RpdmVFZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIGFjdGl2ZUVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKGRhdGVTdHIpO1xuICB9XG5cbiAgb25DbG9zZSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcbiAgICBjb250ZW50RWwuZW1wdHkoKTtcblxuICAgIC8vIE5ldHRveWVyIGxlcyBldmVudCBsaXN0ZW5lcnNcbiAgICBpZiAodGhpcy5rZXlib2FyZEhhbmRsZXIpIHtcbiAgICAgIGNvbnRlbnRFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmtleWJvYXJkSGFuZGxlcik7XG4gICAgICB0aGlzLmtleWJvYXJkSGFuZGxlciA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gTmV0dG95ZXIgbCdvYnNlcnZlciBkZSB0aMOobWVcbiAgICBpZiAodGhpcy50aGVtZU9ic2VydmVyKSB7XG4gICAgICB0aGlzLnRoZW1lT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy50aGVtZU9ic2VydmVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCB2YXIgTWVyaWRpZW07XG4oZnVuY3Rpb24gKE1lcmlkaWVtKSB7XG4gICAgTWVyaWRpZW1bTWVyaWRpZW1bXCJBTVwiXSA9IDBdID0gXCJBTVwiO1xuICAgIE1lcmlkaWVtW01lcmlkaWVtW1wiUE1cIl0gPSAxXSA9IFwiUE1cIjtcbn0pKE1lcmlkaWVtIHx8IChNZXJpZGllbSA9IHt9KSk7XG5leHBvcnQgdmFyIFdlZWtkYXk7XG4oZnVuY3Rpb24gKFdlZWtkYXkpIHtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJTVU5EQVlcIl0gPSAwXSA9IFwiU1VOREFZXCI7XG4gICAgV2Vla2RheVtXZWVrZGF5W1wiTU9OREFZXCJdID0gMV0gPSBcIk1PTkRBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIlRVRVNEQVlcIl0gPSAyXSA9IFwiVFVFU0RBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIldFRE5FU0RBWVwiXSA9IDNdID0gXCJXRURORVNEQVlcIjtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJUSFVSU0RBWVwiXSA9IDRdID0gXCJUSFVSU0RBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIkZSSURBWVwiXSA9IDVdID0gXCJGUklEQVlcIjtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJTQVRVUkRBWVwiXSA9IDZdID0gXCJTQVRVUkRBWVwiO1xufSkoV2Vla2RheSB8fCAoV2Vla2RheSA9IHt9KSk7XG5leHBvcnQgdmFyIE1vbnRoO1xuKGZ1bmN0aW9uIChNb250aCkge1xuICAgIE1vbnRoW01vbnRoW1wiSkFOVUFSWVwiXSA9IDFdID0gXCJKQU5VQVJZXCI7XG4gICAgTW9udGhbTW9udGhbXCJGRUJSVUFSWVwiXSA9IDJdID0gXCJGRUJSVUFSWVwiO1xuICAgIE1vbnRoW01vbnRoW1wiTUFSQ0hcIl0gPSAzXSA9IFwiTUFSQ0hcIjtcbiAgICBNb250aFtNb250aFtcIkFQUklMXCJdID0gNF0gPSBcIkFQUklMXCI7XG4gICAgTW9udGhbTW9udGhbXCJNQVlcIl0gPSA1XSA9IFwiTUFZXCI7XG4gICAgTW9udGhbTW9udGhbXCJKVU5FXCJdID0gNl0gPSBcIkpVTkVcIjtcbiAgICBNb250aFtNb250aFtcIkpVTFlcIl0gPSA3XSA9IFwiSlVMWVwiO1xuICAgIE1vbnRoW01vbnRoW1wiQVVHVVNUXCJdID0gOF0gPSBcIkFVR1VTVFwiO1xuICAgIE1vbnRoW01vbnRoW1wiU0VQVEVNQkVSXCJdID0gOV0gPSBcIlNFUFRFTUJFUlwiO1xuICAgIE1vbnRoW01vbnRoW1wiT0NUT0JFUlwiXSA9IDEwXSA9IFwiT0NUT0JFUlwiO1xuICAgIE1vbnRoW01vbnRoW1wiTk9WRU1CRVJcIl0gPSAxMV0gPSBcIk5PVkVNQkVSXCI7XG4gICAgTW9udGhbTW9udGhbXCJERUNFTUJFUlwiXSA9IDEyXSA9IFwiREVDRU1CRVJcIjtcbn0pKE1vbnRoIHx8IChNb250aCA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0KSB7XG4gICAgY29tcG9uZW50LmFzc2lnbihcImRheVwiLCB0YXJnZXQuZ2V0RGF0ZSgpKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwibW9udGhcIiwgdGFyZ2V0LmdldE1vbnRoKCkgKyAxKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwieWVhclwiLCB0YXJnZXQuZ2V0RnVsbFllYXIoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXNzaWduU2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXQpIHtcbiAgICBjb21wb25lbnQuYXNzaWduKFwiaG91clwiLCB0YXJnZXQuZ2V0SG91cnMoKSk7XG4gICAgY29tcG9uZW50LmFzc2lnbihcIm1pbnV0ZVwiLCB0YXJnZXQuZ2V0TWludXRlcygpKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwic2Vjb25kXCIsIHRhcmdldC5nZXRTZWNvbmRzKCkpO1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCB0YXJnZXQuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtZXJpZGllbVwiLCB0YXJnZXQuZ2V0SG91cnMoKSA8IDEyID8gTWVyaWRpZW0uQU0gOiBNZXJpZGllbS5QTSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW1wbHlTaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldCkge1xuICAgIGNvbXBvbmVudC5pbXBseShcImRheVwiLCB0YXJnZXQuZ2V0RGF0ZSgpKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtb250aFwiLCB0YXJnZXQuZ2V0TW9udGgoKSArIDEpO1xuICAgIGNvbXBvbmVudC5pbXBseShcInllYXJcIiwgdGFyZ2V0LmdldEZ1bGxZZWFyKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXQpIHtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIHRhcmdldC5nZXRIb3VycygpKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgdGFyZ2V0LmdldE1pbnV0ZXMoKSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIHRhcmdldC5nZXRTZWNvbmRzKCkpO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRhcmdldC5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgdGFyZ2V0LmdldEhvdXJzKCkgPCAxMiA/IE1lcmlkaWVtLkFNIDogTWVyaWRpZW0uUE0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0ZXMuanMubWFwIiwiaW1wb3J0IHsgV2Vla2RheSwgTW9udGggfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuZXhwb3J0IGNvbnN0IFRJTUVaT05FX0FCQlJfTUFQID0ge1xuICAgIEFDRFQ6IDYzMCxcbiAgICBBQ1NUOiA1NzAsXG4gICAgQURUOiAtMTgwLFxuICAgIEFFRFQ6IDY2MCxcbiAgICBBRVNUOiA2MDAsXG4gICAgQUZUOiAyNzAsXG4gICAgQUtEVDogLTQ4MCxcbiAgICBBS1NUOiAtNTQwLFxuICAgIEFMTVQ6IDM2MCxcbiAgICBBTVNUOiAtMTgwLFxuICAgIEFNVDogLTI0MCxcbiAgICBBTkFTVDogNzIwLFxuICAgIEFOQVQ6IDcyMCxcbiAgICBBUVRUOiAzMDAsXG4gICAgQVJUOiAtMTgwLFxuICAgIEFTVDogLTI0MCxcbiAgICBBV0RUOiA1NDAsXG4gICAgQVdTVDogNDgwLFxuICAgIEFaT1NUOiAwLFxuICAgIEFaT1Q6IC02MCxcbiAgICBBWlNUOiAzMDAsXG4gICAgQVpUOiAyNDAsXG4gICAgQk5UOiA0ODAsXG4gICAgQk9UOiAtMjQwLFxuICAgIEJSU1Q6IC0xMjAsXG4gICAgQlJUOiAtMTgwLFxuICAgIEJTVDogNjAsXG4gICAgQlRUOiAzNjAsXG4gICAgQ0FTVDogNDgwLFxuICAgIENBVDogMTIwLFxuICAgIENDVDogMzkwLFxuICAgIENEVDogLTMwMCxcbiAgICBDRVNUOiAxMjAsXG4gICAgQ0VUOiB7XG4gICAgICAgIHRpbWV6b25lT2Zmc2V0RHVyaW5nRHN0OiAyICogNjAsXG4gICAgICAgIHRpbWV6b25lT2Zmc2V0Tm9uRHN0OiA2MCxcbiAgICAgICAgZHN0U3RhcnQ6ICh5ZWFyKSA9PiBnZXRMYXN0V2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TGFzdFdlZWtkYXlPZk1vbnRoKHllYXIsIE1vbnRoLk9DVE9CRVIsIFdlZWtkYXkuU1VOREFZLCAzKSxcbiAgICB9LFxuICAgIENIQURUOiA4MjUsXG4gICAgQ0hBU1Q6IDc2NSxcbiAgICBDS1Q6IC02MDAsXG4gICAgQ0xTVDogLTE4MCxcbiAgICBDTFQ6IC0yNDAsXG4gICAgQ09UOiAtMzAwLFxuICAgIENTVDogLTM2MCxcbiAgICBDVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTUgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC02ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIENWVDogLTYwLFxuICAgIENYVDogNDIwLFxuICAgIENoU1Q6IDYwMCxcbiAgICBEQVZUOiA0MjAsXG4gICAgRUFTU1Q6IC0zMDAsXG4gICAgRUFTVDogLTM2MCxcbiAgICBFQVQ6IDE4MCxcbiAgICBFQ1Q6IC0zMDAsXG4gICAgRURUOiAtMjQwLFxuICAgIEVFU1Q6IDE4MCxcbiAgICBFRVQ6IDEyMCxcbiAgICBFR1NUOiAwLFxuICAgIEVHVDogLTYwLFxuICAgIEVTVDogLTMwMCxcbiAgICBFVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTQgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC01ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIEZKU1Q6IDc4MCxcbiAgICBGSlQ6IDcyMCxcbiAgICBGS1NUOiAtMTgwLFxuICAgIEZLVDogLTI0MCxcbiAgICBGTlQ6IC0xMjAsXG4gICAgR0FMVDogLTM2MCxcbiAgICBHQU1UOiAtNTQwLFxuICAgIEdFVDogMjQwLFxuICAgIEdGVDogLTE4MCxcbiAgICBHSUxUOiA3MjAsXG4gICAgR01UOiAwLFxuICAgIEdTVDogMjQwLFxuICAgIEdZVDogLTI0MCxcbiAgICBIQUE6IC0xODAsXG4gICAgSEFDOiAtMzAwLFxuICAgIEhBRFQ6IC01NDAsXG4gICAgSEFFOiAtMjQwLFxuICAgIEhBUDogLTQyMCxcbiAgICBIQVI6IC0zNjAsXG4gICAgSEFTVDogLTYwMCxcbiAgICBIQVQ6IC05MCxcbiAgICBIQVk6IC00ODAsXG4gICAgSEtUOiA0ODAsXG4gICAgSExWOiAtMjEwLFxuICAgIEhOQTogLTI0MCxcbiAgICBITkM6IC0zNjAsXG4gICAgSE5FOiAtMzAwLFxuICAgIEhOUDogLTQ4MCxcbiAgICBITlI6IC00MjAsXG4gICAgSE5UOiAtMTUwLFxuICAgIEhOWTogLTU0MCxcbiAgICBIT1ZUOiA0MjAsXG4gICAgSUNUOiA0MjAsXG4gICAgSURUOiAxODAsXG4gICAgSU9UOiAzNjAsXG4gICAgSVJEVDogMjcwLFxuICAgIElSS1NUOiA1NDAsXG4gICAgSVJLVDogNTQwLFxuICAgIElSU1Q6IDIxMCxcbiAgICBJU1Q6IDMzMCxcbiAgICBKU1Q6IDU0MCxcbiAgICBLR1Q6IDM2MCxcbiAgICBLUkFTVDogNDgwLFxuICAgIEtSQVQ6IDQ4MCxcbiAgICBLU1Q6IDU0MCxcbiAgICBLVVlUOiAyNDAsXG4gICAgTEhEVDogNjYwLFxuICAgIExIU1Q6IDYzMCxcbiAgICBMSU5UOiA4NDAsXG4gICAgTUFHU1Q6IDcyMCxcbiAgICBNQUdUOiA3MjAsXG4gICAgTUFSVDogLTUxMCxcbiAgICBNQVdUOiAzMDAsXG4gICAgTURUOiAtMzYwLFxuICAgIE1FU1o6IDEyMCxcbiAgICBNRVo6IDYwLFxuICAgIE1IVDogNzIwLFxuICAgIE1NVDogMzkwLFxuICAgIE1TRDogMjQwLFxuICAgIE1TSzogMTgwLFxuICAgIE1TVDogLTQyMCxcbiAgICBNVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTYgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC03ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIE1VVDogMjQwLFxuICAgIE1WVDogMzAwLFxuICAgIE1ZVDogNDgwLFxuICAgIE5DVDogNjYwLFxuICAgIE5EVDogLTkwLFxuICAgIE5GVDogNjkwLFxuICAgIE5PVlNUOiA0MjAsXG4gICAgTk9WVDogMzYwLFxuICAgIE5QVDogMzQ1LFxuICAgIE5TVDogLTE1MCxcbiAgICBOVVQ6IC02NjAsXG4gICAgTlpEVDogNzgwLFxuICAgIE5aU1Q6IDcyMCxcbiAgICBPTVNTVDogNDIwLFxuICAgIE9NU1Q6IDQyMCxcbiAgICBQRFQ6IC00MjAsXG4gICAgUEVUOiAtMzAwLFxuICAgIFBFVFNUOiA3MjAsXG4gICAgUEVUVDogNzIwLFxuICAgIFBHVDogNjAwLFxuICAgIFBIT1Q6IDc4MCxcbiAgICBQSFQ6IDQ4MCxcbiAgICBQS1Q6IDMwMCxcbiAgICBQTURUOiAtMTIwLFxuICAgIFBNU1Q6IC0xODAsXG4gICAgUE9OVDogNjYwLFxuICAgIFBTVDogLTQ4MCxcbiAgICBQVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTcgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC04ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIFBXVDogNTQwLFxuICAgIFBZU1Q6IC0xODAsXG4gICAgUFlUOiAtMjQwLFxuICAgIFJFVDogMjQwLFxuICAgIFNBTVQ6IDI0MCxcbiAgICBTQVNUOiAxMjAsXG4gICAgU0JUOiA2NjAsXG4gICAgU0NUOiAyNDAsXG4gICAgU0dUOiA0ODAsXG4gICAgU1JUOiAtMTgwLFxuICAgIFNTVDogLTY2MCxcbiAgICBUQUhUOiAtNjAwLFxuICAgIFRGVDogMzAwLFxuICAgIFRKVDogMzAwLFxuICAgIFRLVDogNzgwLFxuICAgIFRMVDogNTQwLFxuICAgIFRNVDogMzAwLFxuICAgIFRWVDogNzIwLFxuICAgIFVMQVQ6IDQ4MCxcbiAgICBVVEM6IDAsXG4gICAgVVlTVDogLTEyMCxcbiAgICBVWVQ6IC0xODAsXG4gICAgVVpUOiAzMDAsXG4gICAgVkVUOiAtMjEwLFxuICAgIFZMQVNUOiA2NjAsXG4gICAgVkxBVDogNjYwLFxuICAgIFZVVDogNjYwLFxuICAgIFdBU1Q6IDEyMCxcbiAgICBXQVQ6IDYwLFxuICAgIFdFU1Q6IDYwLFxuICAgIFdFU1o6IDYwLFxuICAgIFdFVDogMCxcbiAgICBXRVo6IDAsXG4gICAgV0ZUOiA3MjAsXG4gICAgV0dTVDogLTEyMCxcbiAgICBXR1Q6IC0xODAsXG4gICAgV0lCOiA0MjAsXG4gICAgV0lUOiA1NDAsXG4gICAgV0lUQTogNDgwLFxuICAgIFdTVDogNzgwLFxuICAgIFdUOiAwLFxuICAgIFlBS1NUOiA2MDAsXG4gICAgWUFLVDogNjAwLFxuICAgIFlBUFQ6IDYwMCxcbiAgICBZRUtTVDogMzYwLFxuICAgIFlFS1Q6IDM2MCxcbn07XG5leHBvcnQgZnVuY3Rpb24gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgbW9udGgsIHdlZWtkYXksIG4sIGhvdXIgPSAwKSB7XG4gICAgbGV0IGRheU9mTW9udGggPSAwO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgICAgZGF5T2ZNb250aCsrO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgaWYgKGRhdGUuZ2V0RGF5KCkgPT09IHdlZWtkYXkpXG4gICAgICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheU9mTW9udGgsIGhvdXIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3RXZWVrZGF5T2ZNb250aCh5ZWFyLCBtb250aCwgd2Vla2RheSwgaG91ciA9IDApIHtcbiAgICBjb25zdCBvbmVJbmRleGVkV2Vla2RheSA9IHdlZWtkYXkgPT09IDAgPyA3IDogd2Vla2RheTtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxICsgMSwgMSwgMTIpO1xuICAgIGNvbnN0IGZpcnN0V2Vla2RheU5leHRNb250aCA9IGRhdGUuZ2V0RGF5KCkgPT09IDAgPyA3IDogZGF0ZS5nZXREYXkoKTtcbiAgICBsZXQgZGF5RGlmZjtcbiAgICBpZiAoZmlyc3RXZWVrZGF5TmV4dE1vbnRoID09PSBvbmVJbmRleGVkV2Vla2RheSlcbiAgICAgICAgZGF5RGlmZiA9IDc7XG4gICAgZWxzZSBpZiAoZmlyc3RXZWVrZGF5TmV4dE1vbnRoIDwgb25lSW5kZXhlZFdlZWtkYXkpXG4gICAgICAgIGRheURpZmYgPSA3ICsgZmlyc3RXZWVrZGF5TmV4dE1vbnRoIC0gb25lSW5kZXhlZFdlZWtkYXk7XG4gICAgZWxzZVxuICAgICAgICBkYXlEaWZmID0gZmlyc3RXZWVrZGF5TmV4dE1vbnRoIC0gb25lSW5kZXhlZFdlZWtkYXk7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF5RGlmZik7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF0ZS5nZXREYXRlKCksIGhvdXIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvVGltZXpvbmVPZmZzZXQodGltZXpvbmVJbnB1dCwgZGF0ZSwgdGltZXpvbmVPdmVycmlkZXMgPSB7fSkge1xuICAgIGlmICh0aW1lem9uZUlucHV0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGltZXpvbmVJbnB1dCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gdGltZXpvbmVJbnB1dDtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2hlZFRpbWV6b25lID0gdGltZXpvbmVPdmVycmlkZXNbdGltZXpvbmVJbnB1dF0gPz8gVElNRVpPTkVfQUJCUl9NQVBbdGltZXpvbmVJbnB1dF07XG4gICAgaWYgKG1hdGNoZWRUaW1lem9uZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG1hdGNoZWRUaW1lem9uZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVkVGltZXpvbmU7XG4gICAgfVxuICAgIGlmIChkYXRlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChkYXRlID4gbWF0Y2hlZFRpbWV6b25lLmRzdFN0YXJ0KGRhdGUuZ2V0RnVsbFllYXIoKSkgJiYgIShkYXRlID4gbWF0Y2hlZFRpbWV6b25lLmRzdEVuZChkYXRlLmdldEZ1bGxZZWFyKCkpKSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlZFRpbWV6b25lLnRpbWV6b25lT2Zmc2V0RHVyaW5nRHN0O1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlZFRpbWV6b25lLnRpbWV6b25lT2Zmc2V0Tm9uRHN0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZXpvbmUuanMubWFwIiwiZXhwb3J0IGNvbnN0IEVtcHR5RHVyYXRpb24gPSB7XG4gICAgZGF5OiAwLFxuICAgIHNlY29uZDogMCxcbiAgICBtaWxsaXNlY29uZDogMCxcbn07XG5leHBvcnQgZnVuY3Rpb24gYWRkRHVyYXRpb24ocmVmLCBkdXJhdGlvbikge1xuICAgIGxldCBkYXRlID0gbmV3IERhdGUocmVmKTtcbiAgICBpZiAoZHVyYXRpb25bXCJ5XCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wieWVhclwiXSA9IGR1cmF0aW9uW1wieVwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wieVwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wibW9cIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJtb250aFwiXSA9IGR1cmF0aW9uW1wibW9cIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIm1vXCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJNXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wibW9udGhcIl0gPSBkdXJhdGlvbltcIk1cIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIk1cIl07XG4gICAgfVxuICAgIGlmIChkdXJhdGlvbltcIndcIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJ3ZWVrXCJdID0gZHVyYXRpb25bXCJ3XCJdO1xuICAgICAgICBkZWxldGUgZHVyYXRpb25bXCJ3XCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJkXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wiZGF5XCJdID0gZHVyYXRpb25bXCJkXCJdO1xuICAgICAgICBkZWxldGUgZHVyYXRpb25bXCJkXCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJoXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wiaG91clwiXSA9IGR1cmF0aW9uW1wiaFwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wiaFwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wibVwiXSkge1xuICAgICAgICBkdXJhdGlvbltcIm1pbnV0ZVwiXSA9IGR1cmF0aW9uW1wibVwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wibVwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wic1wiXSkge1xuICAgICAgICBkdXJhdGlvbltcInNlY29uZFwiXSA9IGR1cmF0aW9uW1wic1wiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wic1wiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wibXNcIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJtaWxsaXNlY29uZFwiXSA9IGR1cmF0aW9uW1wibXNcIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIm1zXCJdO1xuICAgIH1cbiAgICBpZiAoXCJ5ZWFyXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wieWVhclwiXSk7XG4gICAgICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wieWVhclwiXSAtIGZsb29yO1xuICAgICAgICBpZiAocmVtYWluaW5nRnJhY3Rpb24gPiAwKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5tb250aCA9IGR1cmF0aW9uPy5tb250aCA/PyAwO1xuICAgICAgICAgICAgZHVyYXRpb24ubW9udGggKz0gcmVtYWluaW5nRnJhY3Rpb24gKiAxMjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJxdWFydGVyXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wicXVhcnRlclwiXSk7XG4gICAgICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgZmxvb3IgKiAzKTtcbiAgICB9XG4gICAgaWYgKFwibW9udGhcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJtb250aFwiXSk7XG4gICAgICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wibW9udGhcIl0gLSBmbG9vcjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0ZyYWN0aW9uID4gMCkge1xuICAgICAgICAgICAgZHVyYXRpb24ud2VlayA9IGR1cmF0aW9uPy53ZWVrID8/IDA7XG4gICAgICAgICAgICBkdXJhdGlvbi53ZWVrICs9IHJlbWFpbmluZ0ZyYWN0aW9uICogNDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJ3ZWVrXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wid2Vla1wiXSk7XG4gICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGZsb29yICogNyk7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJ3ZWVrXCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLmRheSA9IGR1cmF0aW9uPy5kYXkgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLmRheSArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogNyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKFwiZGF5XCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wiZGF5XCJdKTtcbiAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wiZGF5XCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLmhvdXIgPSBkdXJhdGlvbj8uaG91ciA/PyAwO1xuICAgICAgICAgICAgZHVyYXRpb24uaG91ciArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogMjQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcImhvdXJcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJob3VyXCJdKTtcbiAgICAgICAgZGF0ZS5zZXRIb3VycyhkYXRlLmdldEhvdXJzKCkgKyBmbG9vcik7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJob3VyXCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbnV0ZSA9IGR1cmF0aW9uPy5taW51dGUgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbnV0ZSArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogNjApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcIm1pbnV0ZVwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihkdXJhdGlvbltcIm1pbnV0ZVwiXSk7XG4gICAgICAgIGRhdGUuc2V0TWludXRlcyhkYXRlLmdldE1pbnV0ZXMoKSArIGZsb29yKTtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nRnJhY3Rpb24gPSBkdXJhdGlvbltcIm1pbnV0ZVwiXSAtIGZsb29yO1xuICAgICAgICBpZiAocmVtYWluaW5nRnJhY3Rpb24gPiAwKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5zZWNvbmQgPSBkdXJhdGlvbj8uc2Vjb25kID8/IDA7XG4gICAgICAgICAgICBkdXJhdGlvbi5zZWNvbmQgKz0gTWF0aC5yb3VuZChyZW1haW5pbmdGcmFjdGlvbiAqIDYwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJzZWNvbmRcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJzZWNvbmRcIl0pO1xuICAgICAgICBkYXRlLnNldFNlY29uZHMoZGF0ZS5nZXRTZWNvbmRzKCkgKyBmbG9vcik7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJzZWNvbmRcIl0gLSBmbG9vcjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0ZyYWN0aW9uID4gMCkge1xuICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmQgPSBkdXJhdGlvbj8ubWlsbGlzZWNvbmQgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kICs9IE1hdGgucm91bmQocmVtYWluaW5nRnJhY3Rpb24gKiAxMDAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJtaWxsaXNlY29uZFwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihkdXJhdGlvbltcIm1pbGxpc2Vjb25kXCJdKTtcbiAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHMoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSArIGZsb29yKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG59XG5leHBvcnQgZnVuY3Rpb24gcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgY29uc3QgcmV2ZXJzZWQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkdXJhdGlvbikge1xuICAgICAgICByZXZlcnNlZFtrZXldID0gLWR1cmF0aW9uW2tleV07XG4gICAgfVxuICAgIHJldHVybiByZXZlcnNlZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWR1cmF0aW9uLmpzLm1hcCIsImltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBhc3NpZ25TaW1pbGFyVGltZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgeyB0b1RpbWV6b25lT2Zmc2V0IH0gZnJvbSBcIi4vdGltZXpvbmUuanNcIjtcbmltcG9ydCB7IGFkZER1cmF0aW9uLCBFbXB0eUR1cmF0aW9uIH0gZnJvbSBcIi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VXaXRoVGltZXpvbmUge1xuICAgIGluc3RhbnQ7XG4gICAgdGltZXpvbmVPZmZzZXQ7XG4gICAgY29uc3RydWN0b3IoaW5zdGFudCwgdGltZXpvbmVPZmZzZXQpIHtcbiAgICAgICAgdGhpcy5pbnN0YW50ID0gaW5zdGFudCA/PyBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLnRpbWV6b25lT2Zmc2V0ID0gdGltZXpvbmVPZmZzZXQgPz8gbnVsbDtcbiAgICB9XG4gICAgc3RhdGljIGZyb21EYXRlKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWZlcmVuY2VXaXRoVGltZXpvbmUoZGF0ZSk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tSW5wdXQoaW5wdXQsIHRpbWV6b25lT3ZlcnJpZGVzKSB7XG4gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZlcmVuY2VXaXRoVGltZXpvbmUuZnJvbURhdGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluc3RhbnQgPSBpbnB1dD8uaW5zdGFudCA/PyBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IHRvVGltZXpvbmVPZmZzZXQoaW5wdXQ/LnRpbWV6b25lLCBpbnN0YW50LCB0aW1lem9uZU92ZXJyaWRlcyk7XG4gICAgICAgIHJldHVybiBuZXcgUmVmZXJlbmNlV2l0aFRpbWV6b25lKGluc3RhbnQsIHRpbWV6b25lT2Zmc2V0KTtcbiAgICB9XG4gICAgZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGhpcy5pbnN0YW50KTtcbiAgICAgICAgaWYgKHRoaXMudGltZXpvbmVPZmZzZXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0TWludXRlcyhkYXRlLmdldE1pbnV0ZXMoKSAtIHRoaXMuZ2V0U3lzdGVtVGltZXpvbmVBZGp1c3RtZW50TWludXRlKHRoaXMuaW5zdGFudCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgICBnZXRTeXN0ZW1UaW1lem9uZUFkanVzdG1lbnRNaW51dGUoZGF0ZSwgb3ZlcnJpZGVUaW1lem9uZU9mZnNldCkge1xuICAgICAgICBpZiAoIWRhdGUpIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lem9uZU9mZnNldCA9IC1kYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgICAgIGNvbnN0IHRhcmdldFRpbWV6b25lT2Zmc2V0ID0gb3ZlcnJpZGVUaW1lem9uZU9mZnNldCA/PyB0aGlzLnRpbWV6b25lT2Zmc2V0ID8/IGN1cnJlbnRUaW1lem9uZU9mZnNldDtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lem9uZU9mZnNldCAtIHRhcmdldFRpbWV6b25lT2Zmc2V0O1xuICAgIH1cbiAgICBnZXRUaW1lem9uZU9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZXpvbmVPZmZzZXQgPz8gLXRoaXMuaW5zdGFudC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBQYXJzaW5nQ29tcG9uZW50cyB7XG4gICAga25vd25WYWx1ZXM7XG4gICAgaW1wbGllZFZhbHVlcztcbiAgICByZWZlcmVuY2U7XG4gICAgX3RhZ3MgPSBuZXcgU2V0KCk7XG4gICAgY29uc3RydWN0b3IocmVmZXJlbmNlLCBrbm93bkNvbXBvbmVudHMpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgICAgIHRoaXMua25vd25WYWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5pbXBsaWVkVmFsdWVzID0ge307XG4gICAgICAgIGlmIChrbm93bkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGtub3duQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgIHRoaXMua25vd25WYWx1ZXNba2V5XSA9IGtub3duQ29tcG9uZW50c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB0aGlzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgdGhpcy5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgdGhpcy5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgdGhpcy5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKHJlZmVyZW5jZSwgZHVyYXRpb24gPSBFbXB0eUR1cmF0aW9uKSB7XG4gICAgICAgIGxldCBkYXRlID0gYWRkRHVyYXRpb24ocmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpLCBkdXJhdGlvbik7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlKTtcbiAgICAgICAgY29tcG9uZW50cy5hZGRUYWcoXCJyZXN1bHQvcmVsYXRpdmVEYXRlXCIpO1xuICAgICAgICBpZiAoXCJob3VyXCIgaW4gZHVyYXRpb24gfHwgXCJtaW51dGVcIiBpbiBkdXJhdGlvbiB8fCBcInNlY29uZFwiIGluIGR1cmF0aW9uIHx8IFwibWlsbGlzZWNvbmRcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hZGRUYWcoXCJyZXN1bHQvcmVsYXRpdmVEYXRlQW5kVGltZVwiKTtcbiAgICAgICAgICAgIGFzc2lnblNpbWlsYXJUaW1lKGNvbXBvbmVudHMsIGRhdGUpO1xuICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50cywgZGF0ZSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInRpbWV6b25lT2Zmc2V0XCIsIHJlZmVyZW5jZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50cywgZGF0ZSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwidGltZXpvbmVPZmZzZXRcIiwgcmVmZXJlbmNlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgICAgICAgICAgaWYgKFwiZGF5XCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIndlZWtkYXlcIiwgZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChcIndlZWtcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ3ZWVrZGF5XCIsIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgaWYgKFwibW9udGhcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwieWVhclwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxuICAgIGdldChjb21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCBpbiB0aGlzLmtub3duVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5rbm93blZhbHVlc1tjb21wb25lbnRdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnQgaW4gdGhpcy5pbXBsaWVkVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBsaWVkVmFsdWVzW2NvbXBvbmVudF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlzQ2VydGFpbihjb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudCBpbiB0aGlzLmtub3duVmFsdWVzO1xuICAgIH1cbiAgICBnZXRDZXJ0YWluQ29tcG9uZW50cygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMua25vd25WYWx1ZXMpO1xuICAgIH1cbiAgICBpbXBseShjb21wb25lbnQsIHZhbHVlKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQgaW4gdGhpcy5rbm93blZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbXBsaWVkVmFsdWVzW2NvbXBvbmVudF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFzc2lnbihjb21wb25lbnQsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMua25vd25WYWx1ZXNbY29tcG9uZW50XSA9IHZhbHVlO1xuICAgICAgICBkZWxldGUgdGhpcy5pbXBsaWVkVmFsdWVzW2NvbXBvbmVudF07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhZGREdXJhdGlvbkFzSW1wbGllZChkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuZGF0ZVdpdGhvdXRUaW1lem9uZUFkanVzdG1lbnQoKTtcbiAgICAgICAgY29uc3QgZGF0ZSA9IGFkZER1cmF0aW9uKGN1cnJlbnREYXRlLCBkdXJhdGlvbik7XG4gICAgICAgIGlmIChcImRheVwiIGluIGR1cmF0aW9uIHx8IFwid2Vla1wiIGluIGR1cmF0aW9uIHx8IFwibW9udGhcIiBpbiBkdXJhdGlvbiB8fCBcInllYXJcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kZWxldGUoW1wiZGF5XCIsIFwid2Vla2RheVwiLCBcIm1vbnRoXCIsIFwieWVhclwiXSk7XG4gICAgICAgICAgICB0aGlzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuaW1wbHkoXCJ3ZWVrZGF5XCIsIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJzZWNvbmRcIiBpbiBkdXJhdGlvbiB8fCBcIm1pbnV0ZVwiIGluIGR1cmF0aW9uIHx8IFwiaG91clwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZShbXCJzZWNvbmRcIiwgXCJtaW51dGVcIiwgXCJob3VyXCJdKTtcbiAgICAgICAgICAgIHRoaXMuaW1wbHkoXCJzZWNvbmRcIiwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcIm1pbnV0ZVwiLCBkYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICB0aGlzLmltcGx5KFwiaG91clwiLCBkYXRlLmdldEhvdXJzKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZWxldGUoY29tcG9uZW50cykge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudHMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMgPSBbY29tcG9uZW50c107XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMua25vd25WYWx1ZXNbY29tcG9uZW50XTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmltcGxpZWRWYWx1ZXNbY29tcG9uZW50XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHRoaXMucmVmZXJlbmNlKTtcbiAgICAgICAgY29tcG9uZW50Lmtub3duVmFsdWVzID0ge307XG4gICAgICAgIGNvbXBvbmVudC5pbXBsaWVkVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMua25vd25WYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5rbm93blZhbHVlc1trZXldID0gdGhpcy5rbm93blZhbHVlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuaW1wbGllZFZhbHVlcykge1xuICAgICAgICAgICAgY29tcG9uZW50LmltcGxpZWRWYWx1ZXNba2V5XSA9IHRoaXMuaW1wbGllZFZhbHVlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxuICAgIGlzT25seURhdGUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0NlcnRhaW4oXCJob3VyXCIpICYmICF0aGlzLmlzQ2VydGFpbihcIm1pbnV0ZVwiKSAmJiAhdGhpcy5pc0NlcnRhaW4oXCJzZWNvbmRcIik7XG4gICAgfVxuICAgIGlzT25seVRpbWUoKSB7XG4gICAgICAgIHJldHVybiAoIXRoaXMuaXNDZXJ0YWluKFwid2Vla2RheVwiKSAmJiAhdGhpcy5pc0NlcnRhaW4oXCJkYXlcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwibW9udGhcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwieWVhclwiKSk7XG4gICAgfVxuICAgIGlzT25seVdlZWtkYXlDb21wb25lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ2VydGFpbihcIndlZWtkYXlcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwiZGF5XCIpICYmICF0aGlzLmlzQ2VydGFpbihcIm1vbnRoXCIpO1xuICAgIH1cbiAgICBpc0RhdGVXaXRoVW5rbm93blllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ2VydGFpbihcIm1vbnRoXCIpICYmICF0aGlzLmlzQ2VydGFpbihcInllYXJcIik7XG4gICAgfVxuICAgIGlzVmFsaWREYXRlKCkge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpO1xuICAgICAgICBpZiAoZGF0ZS5nZXRGdWxsWWVhcigpICE9PSB0aGlzLmdldChcInllYXJcIikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkYXRlLmdldE1vbnRoKCkgIT09IHRoaXMuZ2V0KFwibW9udGhcIikgLSAxKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoZGF0ZS5nZXREYXRlKCkgIT09IHRoaXMuZ2V0KFwiZGF5XCIpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5nZXQoXCJob3VyXCIpICE9IG51bGwgJiYgZGF0ZS5nZXRIb3VycygpICE9IHRoaXMuZ2V0KFwiaG91clwiKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KFwibWludXRlXCIpICE9IG51bGwgJiYgZGF0ZS5nZXRNaW51dGVzKCkgIT0gdGhpcy5nZXQoXCJtaW51dGVcIikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGBbUGFyc2luZ0NvbXBvbmVudHMge1xuICAgICAgICAgICAgdGFnczogJHtKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHRoaXMuX3RhZ3MpLnNvcnQoKSl9LCBcbiAgICAgICAgICAgIGtub3duVmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMua25vd25WYWx1ZXMpfSwgXG4gICAgICAgICAgICBpbXBsaWVkVmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMuaW1wbGllZFZhbHVlcyl9fSwgXG4gICAgICAgICAgICByZWZlcmVuY2U6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5yZWZlcmVuY2UpfV1gO1xuICAgIH1cbiAgICBkYXRlKCkge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpO1xuICAgICAgICBjb25zdCB0aW1lem9uZUFkanVzdG1lbnQgPSB0aGlzLnJlZmVyZW5jZS5nZXRTeXN0ZW1UaW1lem9uZUFkanVzdG1lbnRNaW51dGUoZGF0ZSwgdGhpcy5nZXQoXCJ0aW1lem9uZU9mZnNldFwiKSk7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIHRpbWV6b25lQWRqdXN0bWVudCAqIDYwMDAwKTtcbiAgICB9XG4gICAgYWRkVGFnKHRhZykge1xuICAgICAgICB0aGlzLl90YWdzLmFkZCh0YWcpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkVGFncyh0YWdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhZ3MuYWRkKHRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRhZ3MoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2V0KHRoaXMuX3RhZ3MpO1xuICAgIH1cbiAgICBkYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRoaXMuZ2V0KFwieWVhclwiKSwgdGhpcy5nZXQoXCJtb250aFwiKSAtIDEsIHRoaXMuZ2V0KFwiZGF5XCIpLCB0aGlzLmdldChcImhvdXJcIiksIHRoaXMuZ2V0KFwibWludXRlXCIpLCB0aGlzLmdldChcInNlY29uZFwiKSwgdGhpcy5nZXQoXCJtaWxsaXNlY29uZFwiKSk7XG4gICAgICAgIGRhdGUuc2V0RnVsbFllYXIodGhpcy5nZXQoXCJ5ZWFyXCIpKTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFBhcnNpbmdSZXN1bHQge1xuICAgIHJlZkRhdGU7XG4gICAgaW5kZXg7XG4gICAgdGV4dDtcbiAgICByZWZlcmVuY2U7XG4gICAgc3RhcnQ7XG4gICAgZW5kO1xuICAgIGNvbnN0cnVjdG9yKHJlZmVyZW5jZSwgaW5kZXgsIHRleHQsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgICAgIHRoaXMucmVmRGF0ZSA9IHJlZmVyZW5jZS5pbnN0YW50O1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydCB8fCBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgfVxuICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgUGFyc2luZ1Jlc3VsdCh0aGlzLnJlZmVyZW5jZSwgdGhpcy5pbmRleCwgdGhpcy50ZXh0KTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gdGhpcy5zdGFydCA/IHRoaXMuc3RhcnQuY2xvbmUoKSA6IG51bGw7XG4gICAgICAgIHJlc3VsdC5lbmQgPSB0aGlzLmVuZCA/IHRoaXMuZW5kLmNsb25lKCkgOiBudWxsO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBkYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5kYXRlKCk7XG4gICAgfVxuICAgIGFkZFRhZyh0YWcpIHtcbiAgICAgICAgdGhpcy5zdGFydC5hZGRUYWcodGFnKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kKSB7XG4gICAgICAgICAgICB0aGlzLmVuZC5hZGRUYWcodGFnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkVGFncyh0YWdzKSB7XG4gICAgICAgIHRoaXMuc3RhcnQuYWRkVGFncyh0YWdzKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kKSB7XG4gICAgICAgICAgICB0aGlzLmVuZC5hZGRUYWdzKHRhZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0YWdzKCkge1xuICAgICAgICBjb25zdCBjb21iaW5lZFRhZ3MgPSBuZXcgU2V0KHRoaXMuc3RhcnQudGFncygpKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhZyBvZiB0aGlzLmVuZC50YWdzKCkpIHtcbiAgICAgICAgICAgICAgICBjb21iaW5lZFRhZ3MuYWRkKHRhZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkVGFncztcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSBBcnJheS5mcm9tKHRoaXMudGFncygpKS5zb3J0KCk7XG4gICAgICAgIHJldHVybiBgW1BhcnNpbmdSZXN1bHQge2luZGV4OiAke3RoaXMuaW5kZXh9LCB0ZXh0OiAnJHt0aGlzLnRleHR9JywgdGFnczogJHtKU09OLnN0cmluZ2lmeSh0YWdzKX0gLi4ufV1gO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc3VsdHMuanMubWFwIiwiZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKHByZWZpeCwgc2luZ2xlVGltZXVuaXRQYXR0ZXJuLCBjb25uZWN0b3JQYXR0ZXJuID0gXCJcXFxcc3swLDV9LD9cXFxcc3swLDV9XCIpIHtcbiAgICBjb25zdCBzaW5nbGVUaW1ldW5pdFBhdHRlcm5Ob0NhcHR1cmUgPSBzaW5nbGVUaW1ldW5pdFBhdHRlcm4ucmVwbGFjZSgvXFwoKD8hXFw/KS9nLCBcIig/OlwiKTtcbiAgICByZXR1cm4gYCR7cHJlZml4fSR7c2luZ2xlVGltZXVuaXRQYXR0ZXJuTm9DYXB0dXJlfSg/OiR7Y29ubmVjdG9yUGF0dGVybn0ke3NpbmdsZVRpbWV1bml0UGF0dGVybk5vQ2FwdHVyZX0pezAsMTB9YDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VGVybXMoZGljdGlvbmFyeSkge1xuICAgIGxldCBrZXlzO1xuICAgIGlmIChkaWN0aW9uYXJ5IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAga2V5cyA9IFsuLi5kaWN0aW9uYXJ5XTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGljdGlvbmFyeSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICBrZXlzID0gQXJyYXkuZnJvbShkaWN0aW9uYXJ5LmtleXMoKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoZGljdGlvbmFyeSk7XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoQW55UGF0dGVybihkaWN0aW9uYXJ5KSB7XG4gICAgY29uc3Qgam9pbmVkVGVybXMgPSBleHRyYWN0VGVybXMoZGljdGlvbmFyeSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAgIC5qb2luKFwifFwiKVxuICAgICAgICAucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIik7XG4gICAgcmV0dXJuIGAoPzoke2pvaW5lZFRlcm1zfSlgO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLCJpbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gZmluZE1vc3RMaWtlbHlBRFllYXIoeWVhck51bWJlcikge1xuICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyID4gNTApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMTkwMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMjAwMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geWVhck51bWJlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kWWVhckNsb3Nlc3RUb1JlZihyZWZEYXRlLCBkYXksIG1vbnRoKSB7XG4gICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShyZWZEYXRlKTtcbiAgICBkYXRlLnNldE1vbnRoKG1vbnRoIC0gMSk7XG4gICAgZGF0ZS5zZXREYXRlKGRheSk7XG4gICAgY29uc3QgbmV4dFllYXIgPSBhZGREdXJhdGlvbihkYXRlLCB7IFwieWVhclwiOiAxIH0pO1xuICAgIGNvbnN0IGxhc3RZZWFyID0gYWRkRHVyYXRpb24oZGF0ZSwgeyBcInllYXJcIjogLTEgfSk7XG4gICAgaWYgKE1hdGguYWJzKG5leHRZZWFyLmdldFRpbWUoKSAtIHJlZkRhdGUuZ2V0VGltZSgpKSA8IE1hdGguYWJzKGRhdGUuZ2V0VGltZSgpIC0gcmVmRGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgIGRhdGUgPSBuZXh0WWVhcjtcbiAgICB9XG4gICAgZWxzZSBpZiAoTWF0aC5hYnMobGFzdFllYXIuZ2V0VGltZSgpIC0gcmVmRGF0ZS5nZXRUaW1lKCkpIDwgTWF0aC5hYnMoZGF0ZS5nZXRUaW1lKCkgLSByZWZEYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgZGF0ZSA9IGxhc3RZZWFyO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9eWVhcnMuanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBzdW5kYXk6IDAsXG4gICAgc3VuOiAwLFxuICAgIFwic3VuLlwiOiAwLFxuICAgIG1vbmRheTogMSxcbiAgICBtb246IDEsXG4gICAgXCJtb24uXCI6IDEsXG4gICAgdHVlc2RheTogMixcbiAgICB0dWU6IDIsXG4gICAgXCJ0dWUuXCI6IDIsXG4gICAgd2VkbmVzZGF5OiAzLFxuICAgIHdlZDogMyxcbiAgICBcIndlZC5cIjogMyxcbiAgICB0aHVyc2RheTogNCxcbiAgICB0aHVyczogNCxcbiAgICBcInRodXJzLlwiOiA0LFxuICAgIHRodXI6IDQsXG4gICAgXCJ0aHVyLlwiOiA0LFxuICAgIHRodTogNCxcbiAgICBcInRodS5cIjogNCxcbiAgICBmcmlkYXk6IDUsXG4gICAgZnJpOiA1LFxuICAgIFwiZnJpLlwiOiA1LFxuICAgIHNhdHVyZGF5OiA2LFxuICAgIHNhdDogNixcbiAgICBcInNhdC5cIjogNixcbn07XG5leHBvcnQgY29uc3QgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlkgPSB7XG4gICAgamFudWFyeTogMSxcbiAgICBmZWJydWFyeTogMixcbiAgICBtYXJjaDogMyxcbiAgICBhcHJpbDogNCxcbiAgICBtYXk6IDUsXG4gICAganVuZTogNixcbiAgICBqdWx5OiA3LFxuICAgIGF1Z3VzdDogOCxcbiAgICBzZXB0ZW1iZXI6IDksXG4gICAgb2N0b2JlcjogMTAsXG4gICAgbm92ZW1iZXI6IDExLFxuICAgIGRlY2VtYmVyOiAxMixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICBqYW46IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgZmViOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIG1hcjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBhcHI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAganVuOiA2LFxuICAgIFwianVuLlwiOiA2LFxuICAgIGp1bDogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBhdWc6IDgsXG4gICAgXCJhdWcuXCI6IDgsXG4gICAgc2VwOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIHNlcHQ6IDksXG4gICAgXCJzZXB0LlwiOiA5LFxuICAgIG9jdDogMTAsXG4gICAgXCJvY3QuXCI6IDEwLFxuICAgIG5vdjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIGRlYzogMTIsXG4gICAgXCJkZWMuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBvbmU6IDEsXG4gICAgdHdvOiAyLFxuICAgIHRocmVlOiAzLFxuICAgIGZvdXI6IDQsXG4gICAgZml2ZTogNSxcbiAgICBzaXg6IDYsXG4gICAgc2V2ZW46IDcsXG4gICAgZWlnaHQ6IDgsXG4gICAgbmluZTogOSxcbiAgICB0ZW46IDEwLFxuICAgIGVsZXZlbjogMTEsXG4gICAgdHdlbHZlOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgZmlyc3Q6IDEsXG4gICAgc2Vjb25kOiAyLFxuICAgIHRoaXJkOiAzLFxuICAgIGZvdXJ0aDogNCxcbiAgICBmaWZ0aDogNSxcbiAgICBzaXh0aDogNixcbiAgICBzZXZlbnRoOiA3LFxuICAgIGVpZ2h0aDogOCxcbiAgICBuaW50aDogOSxcbiAgICB0ZW50aDogMTAsXG4gICAgZWxldmVudGg6IDExLFxuICAgIHR3ZWxmdGg6IDEyLFxuICAgIHRoaXJ0ZWVudGg6IDEzLFxuICAgIGZvdXJ0ZWVudGg6IDE0LFxuICAgIGZpZnRlZW50aDogMTUsXG4gICAgc2l4dGVlbnRoOiAxNixcbiAgICBzZXZlbnRlZW50aDogMTcsXG4gICAgZWlnaHRlZW50aDogMTgsXG4gICAgbmluZXRlZW50aDogMTksXG4gICAgdHdlbnRpZXRoOiAyMCxcbiAgICBcInR3ZW50eSBmaXJzdFwiOiAyMSxcbiAgICBcInR3ZW50eS1maXJzdFwiOiAyMSxcbiAgICBcInR3ZW50eSBzZWNvbmRcIjogMjIsXG4gICAgXCJ0d2VudHktc2Vjb25kXCI6IDIyLFxuICAgIFwidHdlbnR5IHRoaXJkXCI6IDIzLFxuICAgIFwidHdlbnR5LXRoaXJkXCI6IDIzLFxuICAgIFwidHdlbnR5IGZvdXJ0aFwiOiAyNCxcbiAgICBcInR3ZW50eS1mb3VydGhcIjogMjQsXG4gICAgXCJ0d2VudHkgZmlmdGhcIjogMjUsXG4gICAgXCJ0d2VudHktZmlmdGhcIjogMjUsXG4gICAgXCJ0d2VudHkgc2l4dGhcIjogMjYsXG4gICAgXCJ0d2VudHktc2l4dGhcIjogMjYsXG4gICAgXCJ0d2VudHkgc2V2ZW50aFwiOiAyNyxcbiAgICBcInR3ZW50eS1zZXZlbnRoXCI6IDI3LFxuICAgIFwidHdlbnR5IGVpZ2h0aFwiOiAyOCxcbiAgICBcInR3ZW50eS1laWdodGhcIjogMjgsXG4gICAgXCJ0d2VudHkgbmludGhcIjogMjksXG4gICAgXCJ0d2VudHktbmludGhcIjogMjksXG4gICAgXCJ0aGlydGlldGhcIjogMzAsXG4gICAgXCJ0aGlydHkgZmlyc3RcIjogMzEsXG4gICAgXCJ0aGlydHktZmlyc3RcIjogMzEsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZX05PX0FCQlIgPSB7XG4gICAgc2Vjb25kOiBcInNlY29uZFwiLFxuICAgIHNlY29uZHM6IFwic2Vjb25kXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZXM6IFwibWludXRlXCIsXG4gICAgaG91cjogXCJob3VyXCIsXG4gICAgaG91cnM6IFwiaG91clwiLFxuICAgIGRheTogXCJkYXlcIixcbiAgICBkYXlzOiBcImRheVwiLFxuICAgIHdlZWs6IFwid2Vla1wiLFxuICAgIHdlZWtzOiBcIndlZWtcIixcbiAgICBtb250aDogXCJtb250aFwiLFxuICAgIG1vbnRoczogXCJtb250aFwiLFxuICAgIHF1YXJ0ZXI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJcIixcbiAgICB5ZWFyOiBcInllYXJcIixcbiAgICB5ZWFyczogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIHM6IFwic2Vjb25kXCIsXG4gICAgc2VjOiBcInNlY29uZFwiLFxuICAgIHNlY29uZDogXCJzZWNvbmRcIixcbiAgICBzZWNvbmRzOiBcInNlY29uZFwiLFxuICAgIG06IFwibWludXRlXCIsXG4gICAgbWluOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnM6IFwibWludXRlXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZXM6IFwibWludXRlXCIsXG4gICAgaDogXCJob3VyXCIsXG4gICAgaHI6IFwiaG91clwiLFxuICAgIGhyczogXCJob3VyXCIsXG4gICAgaG91cjogXCJob3VyXCIsXG4gICAgaG91cnM6IFwiaG91clwiLFxuICAgIGQ6IFwiZGF5XCIsXG4gICAgZGF5OiBcImRheVwiLFxuICAgIGRheXM6IFwiZGF5XCIsXG4gICAgdzogXCJ3ZWVrXCIsXG4gICAgd2VlazogXCJ3ZWVrXCIsXG4gICAgd2Vla3M6IFwid2Vla1wiLFxuICAgIG1vOiBcIm1vbnRoXCIsXG4gICAgbW9uOiBcIm1vbnRoXCIsXG4gICAgbW9zOiBcIm1vbnRoXCIsXG4gICAgbW9udGg6IFwibW9udGhcIixcbiAgICBtb250aHM6IFwibW9udGhcIixcbiAgICBxdHI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJcIixcbiAgICB5OiBcInllYXJcIixcbiAgICB5cjogXCJ5ZWFyXCIsXG4gICAgeWVhcjogXCJ5ZWFyXCIsXG4gICAgeWVhcnM6IFwieWVhclwiLFxuICAgIC4uLlRJTUVfVU5JVF9ESUNUSU9OQVJZX05PX0FCQlIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfGhhbGYoPzpcXFxcc3swLDJ9YW4/KT98YW4/XFxcXGIoPzpcXFxcc3swLDJ9ZmV3KT98ZmV3fHNldmVyYWx8dGhlfGE/XFxcXHN7MCwyfWNvdXBsZVxcXFxzezAsMn0oPzpvZik/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwiYVwiIHx8IG51bSA9PT0gXCJhblwiIHx8IG51bSA9PSBcInRoZVwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2Zldy8pKSB7XG4gICAgICAgIHJldHVybiAzO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2hhbGYvKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2NvdXBsZS8pKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3NldmVyYWwvKSkge1xuICAgICAgICByZXR1cm4gNztcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZKX18WzAtOV17MSwyfSg/OnN0fG5kfHJkfHRoKT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgbGV0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgbnVtID0gbnVtLnJlcGxhY2UoLyg/OnN0fG5kfHJkfHRoKSQvaSwgXCJcIik7XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfVxcXFxzezAsMn0oPzpCRXxBRHxCQ3xCQ0V8Q0UpfFsxLTldWzAtOV17M318WzUtOV1bMC05XXwyWzAtNV0pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXIobWF0Y2gpIHtcbiAgICBpZiAoL0JFL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC9CRS9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKSAtIDU0MztcbiAgICB9XG4gICAgaWYgKC9CQ0U/L2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC9CQ0U/L2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gLXBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgaWYgKC8oQUR8Q0UpL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC8oQUR8Q0UpL2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBjb25zdCByYXdZZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihyYXdZZWFyTnVtYmVyKTtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCwzfSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZX05PX0FCQlIpfSlgO1xuY29uc3QgVElNRV9VTklUX0NPTk5FQ1RPUl9QQVRURVJOID0gYFxcXFxzezAsNX0sPyg/OlxcXFxzKmFuZCk/XFxcXHN7MCw1fWA7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OmFib3V0fGFyb3VuZClcXFxcc3swLDN9KT9gLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFRJTUVfVU5JVF9DT05ORUNUT1JfUEFUVEVSTik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihgKD86KD86YWJvdXR8YXJvdW5kKVxcXFxzezAsM30pP2AsIFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOLCBUSU1FX1VOSVRfQ09OTkVDVE9SX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGZyYWdtZW50cykubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgaWYgKG1hdGNoWzBdLm1hdGNoKC9eW2EtekEtWl0rJC8pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImV4cG9ydCBjbGFzcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuSGFzQ2hhbmdlKGNvbnRleHQsIGN1cnJlbnRJbm5lclBhdHRlcm4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXJQYXR0ZXJuKGNvbnRleHQpICE9PSBjdXJyZW50SW5uZXJQYXR0ZXJuO1xuICAgIH1cbiAgICBwYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gYChcXFxcV3xeKWA7XG4gICAgfVxuICAgIGNhY2hlZElubmVyUGF0dGVybiA9IG51bGw7XG4gICAgY2FjaGVkUGF0dGVybiA9IG51bGw7XG4gICAgcGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZElubmVyUGF0dGVybikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlubmVyUGF0dGVybkhhc0NoYW5nZShjb250ZXh0LCB0aGlzLmNhY2hlZElubmVyUGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYXR0ZXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGVkSW5uZXJQYXR0ZXJuID0gdGhpcy5pbm5lclBhdHRlcm4oY29udGV4dCk7XG4gICAgICAgIHRoaXMuY2FjaGVkUGF0dGVybiA9IG5ldyBSZWdFeHAoYCR7dGhpcy5wYXR0ZXJuTGVmdEJvdW5kYXJ5KCl9JHt0aGlzLmNhY2hlZElubmVyUGF0dGVybi5zb3VyY2V9YCwgdGhpcy5jYWNoZWRJbm5lclBhdHRlcm4uZmxhZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYXR0ZXJuO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IG1hdGNoWzFdID8/IFwiXCI7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gbWF0Y2guaW5kZXggKyBoZWFkZXIubGVuZ3RoO1xuICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnN1YnN0cmluZyhoZWFkZXIubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCBtYXRjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbWF0Y2hbaSAtIDFdID0gbWF0Y2hbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTl9XSVRIX09QVElPTkFMX1BSRUZJWCA9IG5ldyBSZWdFeHAoYCg/Oig/OndpdGhpbnxpbnxmb3IpXFxcXHMqKT9gICtcbiAgICBgKD86KD86YWJvdXR8YXJvdW5kfHJvdWdobHl8YXBwcm94aW1hdGVseXxqdXN0KVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fV0lUSF9QUkVGSVggPSBuZXcgUmVnRXhwKGAoPzp3aXRoaW58aW58Zm9yKVxcXFxzKmAgK1xuICAgIGAoPzooPzphYm91dHxhcm91bmR8cm91Z2hseXxhcHByb3hpbWF0ZWx5fGp1c3QpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUEFUVEVSTl9XSVRIX1BSRUZJWF9TVFJJQ1QgPSBuZXcgUmVnRXhwKGAoPzp3aXRoaW58aW58Zm9yKVxcXFxzKmAgK1xuICAgIGAoPzooPzphYm91dHxhcm91bmR8cm91Z2hseXxhcHByb3hpbWF0ZWx5fGp1c3QpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gUEFUVEVSTl9XSVRIX1BSRUZJWF9TVFJJQ1Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9uLmZvcndhcmREYXRlID8gUEFUVEVSTl9XSVRIX09QVElPTkFMX1BSRUZJWCA6IFBBVFRFUk5fV0lUSF9QUkVGSVg7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15mb3JcXHMqdGhlXFxzKlxcdysvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghdGltZVVuaXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKD86b25cXFxcc3swLDN9KT9gICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgYCg/OmAgK1xuICAgIGBcXFxcc3swLDN9KD86dG98XFxcXC18XFxcXOKAk3x1bnRpbHx0aHJvdWdofHRpbGwpP1xcXFxzezAsM31gICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBgKD86LXwvfFxcXFxzezAsM30oPzpvZik/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlwiICtcbiAgICBgKD86LXwvfCw/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7WUVBUl9QQVRURVJOfSg/IVxcXFx3KSlgICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86LXwvfFxcXFxzKiw/XFxcXHMqKVwiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pKD8hXFxcXHMqKD86YW18cG0pKVxcXFxzKmAgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiKD86dG98XFxcXC0pXFxcXHMqXCIgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlcXFxccypgICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD86XCIgK1xuICAgIGAoPzotfC98XFxcXHMqLFxcXFxzKnxcXFxccyspYCArXG4gICAgYCgke1lFQVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpKD8hXFxcXDpcXFxcZClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX0dST1VQID0gMjtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzaG91bGRTa2lwWWVhckxpa2VEYXRlO1xuICAgIGNvbnN0cnVjdG9yKHNob3VsZFNraXBZZWFyTGlrZURhdGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zaG91bGRTa2lwWWVhckxpa2VEYXRlID0gc2hvdWxkU2tpcFllYXJMaWtlRGF0ZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkU2tpcFllYXJMaWtlRGF0ZSkge1xuICAgICAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSAmJiAhbWF0Y2hbWUVBUl9HUk9VUF0gJiYgbWF0Y2hbREFURV9HUk9VUF0ubWF0Y2goL14yWzAtNV0kLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dFxuICAgICAgICAgICAgLmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZFRhZyhcInBhcnNlci9FTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlclwiKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY29tcG9uZW50cztcbiAgICAgICAgcmVzdWx0LmVuZCA9IGNvbXBvbmVudHMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlksIE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKCg/OmluKVxcXFxzKik/YCArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgYFxcXFxzKmAgK1xuICAgIGAoPzpgICtcbiAgICBgKD86LHwtfG9mKT9cXFxccyooJHtZRUFSX1BBVFRFUk59KT9gICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKVwiLCBcImlcIik7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDI7XG5jb25zdCBZRUFSX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTW9udGhOYW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aE5hbWUgPSBtYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobWF0Y2hbMF0ubGVuZ3RoIDw9IDMgJiYgIUZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZW21vbnRoTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCArIChtYXRjaFtQUkVGSVhfR1JPVVBdIHx8IFwiXCIpLmxlbmd0aCwgbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hZGRUYWcoXCJwYXJzZXIvRU5Nb250aE5hbWVQYXJzZXJcIik7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttb250aE5hbWVdO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCAxLCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5Nb250aE5hbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoWzAtOV17NH0pWy1cXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYCg/Oigke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pfChbMC05XXsxLDJ9KSlbLVxcXFwuXFxcXC9cXFxcc11gICtcbiAgICBgKFswLTldezEsMn0pYCArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05VTUJFUl9HUk9VUCA9IDM7XG5jb25zdCBEQVRFX05VTUJFUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlllYXJNb250aERheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb250aERhdGVPcmRlcjtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb250aERhdGVPcmRlcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vbnRoRGF0ZU9yZGVyID0gc3RyaWN0TW9udGhEYXRlT3JkZXI7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgbGV0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfTlVNQkVSX0dST1VQXSk7XG4gICAgICAgIGxldCBtb250aCA9IG1hdGNoW01PTlRIX05VTUJFUl9HUk9VUF1cbiAgICAgICAgICAgID8gcGFyc2VJbnQobWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXSlcbiAgICAgICAgICAgIDogTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdHJpY3RNb250aERhdGVPcmRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRheSA+PSAxICYmIGRheSA8PSAxMikge1xuICAgICAgICAgICAgICAgIFttb250aCwgZGF5XSA9IFtkYXksIG1vbnRoXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5IDwgMSB8fCBkYXkgPiAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICAgICAgeWVhcjogeWVhcixcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlllYXJNb250aERheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFswLTldfDBbMS05XXwxWzAxMl0pLyhbMC05XXs0fSlcIiArIFwiXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCkuaW1wbHkoXCJkYXlcIiwgMSkuYXNzaWduKFwibW9udGhcIiwgbW9udGgpLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5mdW5jdGlvbiBwcmltYXJ5VGltZVBhdHRlcm4obGVmdEJvdW5kYXJ5LCBwcmltYXJ5UHJlZml4LCBwcmltYXJ5U3VmZml4LCBmbGFncykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGAke2xlZnRCb3VuZGFyeX1gICtcbiAgICAgICAgYCR7cHJpbWFyeVByZWZpeH1gICtcbiAgICAgICAgYChcXFxcZHsxLDR9KWAgK1xuICAgICAgICBgKD86YCArXG4gICAgICAgIGAoPzpcXFxcLnw6fO+8milgICtcbiAgICAgICAgYChcXFxcZHsxLDJ9KWAgK1xuICAgICAgICBgKD86YCArXG4gICAgICAgIGAoPzo6fO+8milgICtcbiAgICAgICAgYChcXFxcZHsyfSlgICtcbiAgICAgICAgYCg/OlxcXFwuKFxcXFxkezEsNn0pKT9gICtcbiAgICAgICAgYCk/YCArXG4gICAgICAgIGApP2AgK1xuICAgICAgICBgKD86XFxcXHMqKGFcXFxcLm1cXFxcLnxwXFxcXC5tXFxcXC58YW0/fHBtPykpP2AgK1xuICAgICAgICBgJHtwcmltYXJ5U3VmZml4fWAsIGZsYWdzKTtcbn1cbmZ1bmN0aW9uIGZvbGxvd2luZ1RpbWVQYXR0ZW4oZm9sbG93aW5nUGhhc2UsIGZvbGxvd2luZ1N1ZmZpeCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKCR7Zm9sbG93aW5nUGhhc2V9KWAgK1xuICAgICAgICBgKFxcXFxkezEsNH0pYCArXG4gICAgICAgIGAoPzpgICtcbiAgICAgICAgYCg/OlxcXFwufFxcXFw6fFxcXFzvvJopYCArXG4gICAgICAgIGAoXFxcXGR7MSwyfSlgICtcbiAgICAgICAgYCg/OmAgK1xuICAgICAgICBgKD86XFxcXC58XFxcXDp8XFxcXO+8milgICtcbiAgICAgICAgYChcXFxcZHsxLDJ9KSg/OlxcXFwuKFxcXFxkezEsNn0pKT9gICtcbiAgICAgICAgYCk/YCArXG4gICAgICAgIGApP2AgK1xuICAgICAgICBgKD86XFxcXHMqKGFcXFxcLm1cXFxcLnxwXFxcXC5tXFxcXC58YW0/fHBtPykpP2AgK1xuICAgICAgICBgJHtmb2xsb3dpbmdTdWZmaXh9YCwgXCJpXCIpO1xufVxuY29uc3QgSE9VUl9HUk9VUCA9IDI7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSAzO1xuY29uc3QgU0VDT05EX0dST1VQID0gNDtcbmNvbnN0IE1JTExJX1NFQ09ORF9HUk9VUCA9IDU7XG5jb25zdCBBTV9QTV9IT1VSX0dST1VQID0gNjtcbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBwYXR0ZXJuRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBcImlcIjtcbiAgICB9XG4gICAgcHJpbWFyeVBhdHRlcm5MZWZ0Qm91bmRhcnkoKSB7XG4gICAgICAgIHJldHVybiBgKF58XFxcXHN8VHxcXFxcYilgO1xuICAgIH1cbiAgICBwcmltYXJ5U3VmZml4KCkge1xuICAgICAgICByZXR1cm4gYCg/IS8pKD89XFxcXFd8JClgO1xuICAgIH1cbiAgICBmb2xsb3dpbmdTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD8hLykoPz1cXFxcV3wkKWA7XG4gICAgfVxuICAgIHBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQcmltYXJ5VGltZVBhdHRlcm5UaHJvdWdoQ2FjaGUoKTtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBzdGFydENvbXBvbmVudHMgPSB0aGlzLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICBpZiAoIXN0YXJ0Q29tcG9uZW50cykge1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLm1hdGNoKC9eXFxkezR9LykpIHtcbiAgICAgICAgICAgICAgICBtYXRjaC5pbmRleCArPSA0O1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzFdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdGV4dCA9IG1hdGNoWzBdLnN1YnN0cmluZyhtYXRjaFsxXS5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQoaW5kZXgsIHRleHQsIHN0YXJ0Q29tcG9uZW50cyk7XG4gICAgICAgIG1hdGNoLmluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nVGV4dCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcobWF0Y2guaW5kZXgpO1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdQYXR0ZXJuID0gdGhpcy5nZXRGb2xsb3dpbmdUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpO1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdNYXRjaCA9IGZvbGxvd2luZ1BhdHRlcm4uZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICAgICAgaWYgKHRleHQubWF0Y2goL15cXGR7Myw0fS8pICYmIGZvbGxvd2luZ01hdGNoKSB7XG4gICAgICAgICAgICBpZiAoZm9sbG93aW5nTWF0Y2hbMF0ubWF0Y2goL15cXHMqKFsrLV0pXFxzKlxcZHsyLDR9JC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9sbG93aW5nTWF0Y2hbMF0ubWF0Y2goL15cXHMqKFsrLV0pXFxzKlxcZHsyfVxcV1xcZHsyfS8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb2xsb3dpbmdNYXRjaCB8fFxuICAgICAgICAgICAgZm9sbG93aW5nTWF0Y2hbMF0ubWF0Y2goL15cXHMqKFsrLV0pXFxzKlxcZHszLDR9JC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVja0FuZFJldHVybldpdGhvdXRGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LmVuZCA9IHRoaXMuZXh0cmFjdEZvbGxvd2luZ1RpbWVDb21wb25lbnRzKGNvbnRleHQsIGZvbGxvd2luZ01hdGNoLCByZXN1bHQpO1xuICAgICAgICBpZiAocmVzdWx0LmVuZCkge1xuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gZm9sbG93aW5nTWF0Y2hbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tBbmRSZXR1cm5XaXRoRm9sbG93aW5nUGF0dGVybihyZXN1bHQpO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoLCBzdHJpY3QgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBsZXQgbWludXRlID0gMDtcbiAgICAgICAgbGV0IG1lcmlkaWVtID0gbnVsbDtcbiAgICAgICAgbGV0IGhvdXIgPSBwYXJzZUludChtYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbSE9VUl9HUk9VUF0ubGVuZ3RoID09IDQgJiYgbWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBudWxsICYmICFtYXRjaFtBTV9QTV9IT1VSX0dST1VQXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc3RyaWN0TW9kZSB8fCBtYXRjaFtNSU5VVEVfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1pbnV0ZSA9IGhvdXIgJSAxMDA7XG4gICAgICAgICAgICBob3VyID0gTWF0aC5mbG9vcihob3VyIC8gMTAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXS5sZW5ndGggPT0gMSAmJiAhbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID4gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtNSUxMSV9TRUNPTkRfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hbTUlMTElfU0VDT05EX0dST1VQXS5zdWJzdHJpbmcoMCwgMykpO1xuICAgICAgICAgICAgaWYgKG1pbGxpc2Vjb25kID49IDEwMDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbGxpc2Vjb25kXCIsIG1pbGxpc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBwYXJzZUludChtYXRjaFtTRUNPTkRfR1JPVVBdKTtcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gNjApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInNlY29uZFwiLCBzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbiAgICBleHRyYWN0Rm9sbG93aW5nVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBpZiAobWF0Y2hbTUlMTElfU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBtaWxsaXNlY29uZCA9IHBhcnNlSW50KG1hdGNoW01JTExJX1NFQ09ORF9HUk9VUF0uc3Vic3RyaW5nKDAsIDMpKTtcbiAgICAgICAgICAgIGlmIChtaWxsaXNlY29uZCA+PSAxMDAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCBtaWxsaXNlY29uZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW1NFQ09ORF9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaG91ciA9IHBhcnNlSW50KG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCB8fCBob3VyID4gMjQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XG4gICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtBTV9QTV9IT1VSX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wb25lbnRzLmlzQ2VydGFpbihcImRheVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBjb21wb25lbnRzLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFtcG0gPT0gXCJwXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikpIHtcbiAgICAgICAgICAgICAgICBpZiAobWVyaWRpZW0gPT0gTWVyaWRpZW0uQU0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSAhPSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gPj0gMCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEF0UE0gPSByZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikgJiYgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPiAxMjtcbiAgICAgICAgICAgIGlmIChzdGFydEF0UE0pIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgLSAxMiA+IGhvdXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA8PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgaG91ciArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPD0gMTIpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnRzLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBjb21wb25lbnRzLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbiAgICBjaGVja0FuZFJldHVybldpdGhvdXRGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQkLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXlxcZFxcZFxcZCskLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXFxkW2FwQVBdJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmRpbmdXaXRoTnVtYmVycyA9IHJlc3VsdC50ZXh0Lm1hdGNoKC9bXlxcZDouXShcXGRbXFxkLl0rKSQvKTtcbiAgICAgICAgaWYgKGVuZGluZ1dpdGhOdW1iZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRpbmdOdW1iZXJzID0gZW5kaW5nV2l0aE51bWJlcnNbMV07XG4gICAgICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZW5kaW5nTnVtYmVycy5pbmNsdWRlcyhcIi5cIikgJiYgIWVuZGluZ051bWJlcnMubWF0Y2goL1xcZChcXC5cXGR7Mn0pKyQvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW5kaW5nTnVtYmVyVmFsID0gcGFyc2VJbnQoZW5kaW5nTnVtYmVycyk7XG4gICAgICAgICAgICBpZiAoZW5kaW5nTnVtYmVyVmFsID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjaGVja0FuZFJldHVybldpdGhGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQrLVxcZCskLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVuZGluZ1dpdGhOdW1iZXJzID0gcmVzdWx0LnRleHQubWF0Y2goL1teXFxkOi5dKFxcZFtcXGQuXSspXFxzKi1cXHMqKFxcZFtcXGQuXSspJC8pO1xuICAgICAgICBpZiAoZW5kaW5nV2l0aE51bWJlcnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0aW5nTnVtYmVycyA9IGVuZGluZ1dpdGhOdW1iZXJzWzFdO1xuICAgICAgICAgICAgY29uc3QgZW5kaW5nTnVtYmVycyA9IGVuZGluZ1dpdGhOdW1iZXJzWzJdO1xuICAgICAgICAgICAgaWYgKGVuZGluZ051bWJlcnMuaW5jbHVkZXMoXCIuXCIpICYmICFlbmRpbmdOdW1iZXJzLm1hdGNoKC9cXGQoXFwuXFxkezJ9KSskLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVuZGluZ051bWJlclZhbCA9IHBhcnNlSW50KGVuZGluZ051bWJlcnMpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRpbmdOdW1iZXJWYWwgPSBwYXJzZUludChzdGFydGluZ051bWJlcnMpO1xuICAgICAgICAgICAgaWYgKGVuZGluZ051bWJlclZhbCA+IDI0IHx8IHN0YXJ0aW5nTnVtYmVyVmFsID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjYWNoZWRQcmltYXJ5UHJlZml4ID0gbnVsbDtcbiAgICBjYWNoZWRQcmltYXJ5U3VmZml4ID0gbnVsbDtcbiAgICBjYWNoZWRQcmltYXJ5VGltZVBhdHRlcm4gPSBudWxsO1xuICAgIGdldFByaW1hcnlUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpIHtcbiAgICAgICAgY29uc3QgcHJpbWFyeVByZWZpeCA9IHRoaXMucHJpbWFyeVByZWZpeCgpO1xuICAgICAgICBjb25zdCBwcmltYXJ5U3VmZml4ID0gdGhpcy5wcmltYXJ5U3VmZml4KCk7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZFByaW1hcnlQcmVmaXggPT09IHByaW1hcnlQcmVmaXggJiYgdGhpcy5jYWNoZWRQcmltYXJ5U3VmZml4ID09PSBwcmltYXJ5U3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQcmltYXJ5VGltZVBhdHRlcm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZWRQcmltYXJ5VGltZVBhdHRlcm4gPSBwcmltYXJ5VGltZVBhdHRlcm4odGhpcy5wcmltYXJ5UGF0dGVybkxlZnRCb3VuZGFyeSgpLCBwcmltYXJ5UHJlZml4LCBwcmltYXJ5U3VmZml4LCB0aGlzLnBhdHRlcm5GbGFncygpKTtcbiAgICAgICAgdGhpcy5jYWNoZWRQcmltYXJ5UHJlZml4ID0gcHJpbWFyeVByZWZpeDtcbiAgICAgICAgdGhpcy5jYWNoZWRQcmltYXJ5U3VmZml4ID0gcHJpbWFyeVN1ZmZpeDtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUHJpbWFyeVRpbWVQYXR0ZXJuO1xuICAgIH1cbiAgICBjYWNoZWRGb2xsb3dpbmdQaGFzZSA9IG51bGw7XG4gICAgY2FjaGVkRm9sbG93aW5nU3VmZml4ID0gbnVsbDtcbiAgICBjYWNoZWRGb2xsb3dpbmdUaW1lUGF0dGVuID0gbnVsbDtcbiAgICBnZXRGb2xsb3dpbmdUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpIHtcbiAgICAgICAgY29uc3QgZm9sbG93aW5nUGhhc2UgPSB0aGlzLmZvbGxvd2luZ1BoYXNlKCk7XG4gICAgICAgIGNvbnN0IGZvbGxvd2luZ1N1ZmZpeCA9IHRoaXMuZm9sbG93aW5nU3VmZml4KCk7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZEZvbGxvd2luZ1BoYXNlID09PSBmb2xsb3dpbmdQaGFzZSAmJiB0aGlzLmNhY2hlZEZvbGxvd2luZ1N1ZmZpeCA9PT0gZm9sbG93aW5nU3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRGb2xsb3dpbmdUaW1lUGF0dGVuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGVkRm9sbG93aW5nVGltZVBhdHRlbiA9IGZvbGxvd2luZ1RpbWVQYXR0ZW4oZm9sbG93aW5nUGhhc2UsIGZvbGxvd2luZ1N1ZmZpeCk7XG4gICAgICAgIHRoaXMuY2FjaGVkRm9sbG93aW5nUGhhc2UgPSBmb2xsb3dpbmdQaGFzZTtcbiAgICAgICAgdGhpcy5jYWNoZWRGb2xsb3dpbmdTdWZmaXggPSBmb2xsb3dpbmdTdWZmaXg7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEZvbGxvd2luZ1RpbWVQYXR0ZW47XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcihzdHJpY3RNb2RlKTtcbiAgICB9XG4gICAgZm9sbG93aW5nUGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBcIlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHx0b3x1bnRpbHx0aHJvdWdofHRpbGx8XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/Oig/OmF0fGZyb20pXFxcXHMqKT8/XCI7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/OlxcXFxzKig/Om9cXFxcVypjbG9ja3xhdFxcXFxzKm5pZ2h0fGluXFxcXHMqdGhlXFxcXHMqKD86bW9ybmluZ3xhZnRlcm5vb24pKSk/KD8hLykoPz1cXFxcV3wkKVwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICAgICAgaWYgKCFjb21wb25lbnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbMF0uZW5kc1dpdGgoXCJuaWdodFwiKSkge1xuICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgIGlmIChob3VyID49IDYgJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwiYWZ0ZXJub29uXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICBpZiAoaG91ciA+PSAwICYmIGhvdXIgPD0gNikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwibW9ybmluZ1wiKSkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzLmFkZFRhZyhcInBhcnNlci9FTlRpbWVFeHByZXNzaW9uUGFyc2VyXCIpO1xuICAgIH1cbiAgICBleHRyYWN0Rm9sbG93aW5nVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdDb21wb25lbnRzID0gc3VwZXIuZXh0cmFjdEZvbGxvd2luZ1RpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoLCByZXN1bHQpO1xuICAgICAgICBpZiAoZm9sbG93aW5nQ29tcG9uZW50cykge1xuICAgICAgICAgICAgZm9sbG93aW5nQ29tcG9uZW50cy5hZGRUYWcoXCJwYXJzZXIvRU5UaW1lRXhwcmVzc2lvblBhcnNlclwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9sbG93aW5nQ29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmFnb3xiZWZvcmV8ZWFybGllcikoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFNUUklDVF9QQVRURVJOID0gbmV3IFJlZ0V4cChgKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KVxcXFxzezAsNX0oPzphZ298YmVmb3JlfGVhcmxpZXIpKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmljdE1vZGUgPyBTVFJJQ1RfUEFUVEVSTiA6IFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHtUSU1FX1VOSVRTX1BBVFRFUk59KVxcXFxzezAsNX0oPzpsYXRlcnxhZnRlcnxmcm9tIG5vd3xoZW5jZWZvcnRofGZvcndhcmR8b3V0KWAgKyBcIig/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBTVFJJQ1RfUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOfSlcXFxcc3swLDV9KGxhdGVyfGFmdGVyfGZyb20gbm93KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgR1JPVVBfTlVNX1RJTUVVTklUUyA9IDE7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbR1JPVVBfTlVNX1RJTUVVTklUU10pO1xuICAgICAgICBpZiAoIXRpbWVVbml0cykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanMubWFwIiwiZXhwb3J0IGNsYXNzIEZpbHRlciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZmlsdGVyKChyKSA9PiB0aGlzLmlzVmFsaWQoY29udGV4dCwgcikpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VkUmVzdWx0cyA9IFtdO1xuICAgICAgICBsZXQgY3VyUmVzdWx0ID0gcmVzdWx0c1swXTtcbiAgICAgICAgbGV0IG5leHRSZXN1bHQgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG5leHRSZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICAgICAgY29uc3QgdGV4dEJldHdlZW4gPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKGN1clJlc3VsdC5pbmRleCArIGN1clJlc3VsdC50ZXh0Lmxlbmd0aCwgbmV4dFJlc3VsdC5pbmRleCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJSZXN1bHQsIG5leHRSZXN1bHQsIGNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VkUmVzdWx0cy5wdXNoKGN1clJlc3VsdCk7XG4gICAgICAgICAgICAgICAgY3VyUmVzdWx0ID0gbmV4dFJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBjdXJSZXN1bHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBuZXh0UmVzdWx0O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFJlc3VsdCA9IHRoaXMubWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBsZWZ0LCByaWdodCwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gbWVyZ2VkICR7bGVmdH0gYW5kICR7cmlnaHR9IGludG8gJHttZXJnZWRSZXN1bHR9YCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3VyUmVzdWx0ID0gbWVyZ2VkUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJSZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgICAgbWVyZ2VkUmVzdWx0cy5wdXNoKGN1clJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lcmdlZFJlc3VsdHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWJzdHJhY3RSZWZpbmVycy5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiAhY3VycmVudFJlc3VsdC5lbmQgJiYgIW5leHRSZXN1bHQuZW5kICYmIHRleHRCZXR3ZWVuLm1hdGNoKHRoaXMucGF0dGVybkJldHdlZW4oKSkgIT0gbnVsbDtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBmcm9tUmVzdWx0LCB0b1Jlc3VsdCkge1xuICAgICAgICBpZiAoIWZyb21SZXN1bHQuc3RhcnQuaXNPbmx5V2Vla2RheUNvbXBvbmVudCgpICYmICF0b1Jlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmdldENlcnRhaW5Db21wb25lbnRzKCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFmcm9tUmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21SZXN1bHQuc3RhcnQuaW1wbHkoa2V5LCB0b1Jlc3VsdC5zdGFydC5nZXQoa2V5KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmdldENlcnRhaW5Db21wb25lbnRzKCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0b1Jlc3VsdC5zdGFydC5pc0NlcnRhaW4oa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB0b1Jlc3VsdC5zdGFydC5pbXBseShrZXksIGZyb21SZXN1bHQuc3RhcnQuZ2V0KGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tUmVzdWx0LnN0YXJ0LmRhdGUoKSA+IHRvUmVzdWx0LnN0YXJ0LmRhdGUoKSkge1xuICAgICAgICAgICAgbGV0IGZyb21EYXRlID0gZnJvbVJlc3VsdC5zdGFydC5kYXRlKCk7XG4gICAgICAgICAgICBsZXQgdG9EYXRlID0gdG9SZXN1bHQuc3RhcnQuZGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHRvUmVzdWx0LnN0YXJ0LmlzT25seVdlZWtkYXlDb21wb25lbnQoKSAmJiBhZGREdXJhdGlvbih0b0RhdGUsIHsgZGF5OiA3IH0pID4gZnJvbURhdGUpIHtcbiAgICAgICAgICAgICAgICB0b0RhdGUgPSBhZGREdXJhdGlvbih0b0RhdGUsIHsgZGF5OiA3IH0pO1xuICAgICAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIHRvRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgdG9EYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB0b1Jlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgdG9EYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZnJvbVJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkgJiYgYWRkRHVyYXRpb24oZnJvbURhdGUsIHsgZGF5OiAtNyB9KSA8IHRvRGF0ZSkge1xuICAgICAgICAgICAgICAgIGZyb21EYXRlID0gYWRkRHVyYXRpb24oZnJvbURhdGUsIHsgZGF5OiAtNyB9KTtcbiAgICAgICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGZyb21EYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgZnJvbVJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIGZyb21EYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBmcm9tRGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRvUmVzdWx0LnN0YXJ0LmlzRGF0ZVdpdGhVbmtub3duWWVhcigpICYmIGFkZER1cmF0aW9uKHRvRGF0ZSwgeyB5ZWFyOiAxIH0pID4gZnJvbURhdGUpIHtcbiAgICAgICAgICAgICAgICB0b0RhdGUgPSBhZGREdXJhdGlvbih0b0RhdGUsIHsgeWVhcjogMSB9KTtcbiAgICAgICAgICAgICAgICB0b1Jlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgdG9EYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZnJvbVJlc3VsdC5zdGFydC5pc0RhdGVXaXRoVW5rbm93blllYXIoKSAmJiBhZGREdXJhdGlvbihmcm9tRGF0ZSwgeyB5ZWFyOiAtMSB9KSA8IHRvRGF0ZSkge1xuICAgICAgICAgICAgICAgIGZyb21EYXRlID0gYWRkRHVyYXRpb24oZnJvbURhdGUsIHsgeWVhcjogLTEgfSk7XG4gICAgICAgICAgICAgICAgZnJvbVJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZnJvbURhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBbdG9SZXN1bHQsIGZyb21SZXN1bHRdID0gW2Zyb21SZXN1bHQsIHRvUmVzdWx0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBmcm9tUmVzdWx0LmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5zdGFydCA9IGZyb21SZXN1bHQuc3RhcnQ7XG4gICAgICAgIHJlc3VsdC5lbmQgPSB0b1Jlc3VsdC5zdGFydDtcbiAgICAgICAgcmVzdWx0LmluZGV4ID0gTWF0aC5taW4oZnJvbVJlc3VsdC5pbmRleCwgdG9SZXN1bHQuaW5kZXgpO1xuICAgICAgICBpZiAoZnJvbVJlc3VsdC5pbmRleCA8IHRvUmVzdWx0LmluZGV4KSB7XG4gICAgICAgICAgICByZXN1bHQudGV4dCA9IGZyb21SZXN1bHQudGV4dCArIHRleHRCZXR3ZWVuICsgdG9SZXN1bHQudGV4dDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC50ZXh0ID0gdG9SZXN1bHQudGV4dCArIHRleHRCZXR3ZWVuICsgZnJvbVJlc3VsdC50ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKHRvfC184oCTfHVudGlsfHRocm91Z2h8dGlsbClcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi91dGlscy9kYXRlcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGF0ZVRpbWVSZXN1bHQoZGF0ZVJlc3VsdCwgdGltZVJlc3VsdCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGRhdGVSZXN1bHQuY2xvbmUoKTtcbiAgICBjb25zdCBiZWdpbkRhdGUgPSBkYXRlUmVzdWx0LnN0YXJ0O1xuICAgIGNvbnN0IGJlZ2luVGltZSA9IHRpbWVSZXN1bHQuc3RhcnQ7XG4gICAgcmVzdWx0LnN0YXJ0ID0gbWVyZ2VEYXRlVGltZUNvbXBvbmVudChiZWdpbkRhdGUsIGJlZ2luVGltZSk7XG4gICAgaWYgKGRhdGVSZXN1bHQuZW5kICE9IG51bGwgfHwgdGltZVJlc3VsdC5lbmQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBlbmREYXRlID0gZGF0ZVJlc3VsdC5lbmQgPT0gbnVsbCA/IGRhdGVSZXN1bHQuc3RhcnQgOiBkYXRlUmVzdWx0LmVuZDtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IHRpbWVSZXN1bHQuZW5kID09IG51bGwgPyB0aW1lUmVzdWx0LnN0YXJ0IDogdGltZVJlc3VsdC5lbmQ7XG4gICAgICAgIGNvbnN0IGVuZERhdGVUaW1lID0gbWVyZ2VEYXRlVGltZUNvbXBvbmVudChlbmREYXRlLCBlbmRUaW1lKTtcbiAgICAgICAgaWYgKGRhdGVSZXN1bHQuZW5kID09IG51bGwgJiYgZW5kRGF0ZVRpbWUuZGF0ZSgpLmdldFRpbWUoKSA8IHJlc3VsdC5zdGFydC5kYXRlKCkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0RGF5ID0gbmV3IERhdGUoZW5kRGF0ZVRpbWUuZGF0ZSgpLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgIGlmIChlbmREYXRlVGltZS5pc0NlcnRhaW4oXCJkYXlcIikpIHtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShlbmREYXRlVGltZSwgbmV4dERheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJEYXRlKGVuZERhdGVUaW1lLCBuZXh0RGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuZW5kID0gZW5kRGF0ZVRpbWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRlVGltZUNvbXBvbmVudChkYXRlQ29tcG9uZW50LCB0aW1lQ29tcG9uZW50KSB7XG4gICAgY29uc3QgZGF0ZVRpbWVDb21wb25lbnQgPSBkYXRlQ29tcG9uZW50LmNsb25lKCk7XG4gICAgaWYgKHRpbWVDb21wb25lbnQuaXNDZXJ0YWluKFwiaG91clwiKSkge1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJob3VyXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmFzc2lnbihcIm1pbnV0ZVwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1pbnV0ZVwiKSk7XG4gICAgICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcInNlY29uZFwiKSkge1xuICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuYXNzaWduKFwic2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwic2Vjb25kXCIpKTtcbiAgICAgICAgICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcIm1pbGxpc2Vjb25kXCIpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuYXNzaWduKFwibWlsbGlzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJtaWxsaXNlY29uZFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWlsbGlzZWNvbmRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJzZWNvbmRcIikpO1xuICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1pbGxpc2Vjb25kXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWludXRlXCIpKTtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJzZWNvbmRcIikpO1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWlsbGlzZWNvbmRcIikpO1xuICAgIH1cbiAgICBpZiAodGltZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCB0aW1lQ29tcG9uZW50LmdldChcInRpbWV6b25lT2Zmc2V0XCIpKTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZUhhc01lYW5pbmdmdWxNZXJpZGllbSA9IGRhdGVDb21wb25lbnQuZ2V0KFwibWVyaWRpZW1cIikgIT0gbnVsbCAmJlxuICAgICAgICAoZGF0ZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSB8fFxuICAgICAgICAgICAgQXJyYXkuZnJvbShkYXRlQ29tcG9uZW50LnRhZ3MoKSkuc29tZSgodCkgPT4gdC5zdGFydHNXaXRoKFwiY2FzdWFsUmVmZXJlbmNlL1wiKSkpO1xuICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmFzc2lnbihcIm1lcmlkaWVtXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWVyaWRpZW1cIikpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aW1lQ29tcG9uZW50LmdldChcIm1lcmlkaWVtXCIpICE9IG51bGwgJiYgIWRhdGVIYXNNZWFuaW5nZnVsTWVyaWRpZW0pIHtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1lcmlkaWVtXCIpKTtcbiAgICB9XG4gICAgaWYgKGRhdGVUaW1lQ29tcG9uZW50LmdldChcIm1lcmlkaWVtXCIpID09IE1lcmlkaWVtLlBNICYmIGRhdGVUaW1lQ29tcG9uZW50LmdldChcImhvdXJcIikgPCAxMikge1xuICAgICAgICBpZiAodGltZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJob3VyXCIpKSB7XG4gICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJob3VyXCIsIGRhdGVUaW1lQ29tcG9uZW50LmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgZGF0ZVRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkYXRlVGltZUNvbXBvbmVudC5hZGRUYWdzKGRhdGVDb21wb25lbnQudGFncygpKTtcbiAgICBkYXRlVGltZUNvbXBvbmVudC5hZGRUYWdzKHRpbWVDb21wb25lbnQudGFncygpKTtcbiAgICByZXR1cm4gZGF0ZVRpbWVDb21wb25lbnQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnaW5nQ2FsY3VsYXRpb24uanMubWFwIiwiaW1wb3J0IHsgTWVyZ2luZ1JlZmluZXIgfSBmcm9tIFwiLi4vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgbWVyZ2VEYXRlVGltZVJlc3VsdCB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi9tZXJnaW5nQ2FsY3VsYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiAoKChjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seURhdGUoKSAmJiBuZXh0UmVzdWx0LnN0YXJ0LmlzT25seVRpbWUoKSkgfHxcbiAgICAgICAgICAgIChuZXh0UmVzdWx0LnN0YXJ0LmlzT25seURhdGUoKSAmJiBjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seVRpbWUoKSkpICYmXG4gICAgICAgICAgICB0ZXh0QmV0d2Vlbi5tYXRjaCh0aGlzLnBhdHRlcm5CZXR3ZWVuKCkpICE9IG51bGwpO1xuICAgIH1cbiAgICBtZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY3VycmVudFJlc3VsdC5zdGFydC5pc09ubHlEYXRlKClcbiAgICAgICAgICAgID8gbWVyZ2VEYXRlVGltZVJlc3VsdChjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KVxuICAgICAgICAgICAgOiBtZXJnZURhdGVUaW1lUmVzdWx0KG5leHRSZXN1bHQsIGN1cnJlbnRSZXN1bHQpO1xuICAgICAgICByZXN1bHQuaW5kZXggPSBjdXJyZW50UmVzdWx0LmluZGV4O1xuICAgICAgICByZXN1bHQudGV4dCA9IGN1cnJlbnRSZXN1bHQudGV4dCArIHRleHRCZXR3ZWVuICsgbmV4dFJlc3VsdC50ZXh0O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXlxcXFxzKihUfGF0fGFmdGVyfGJlZm9yZXxvbnxvZnwsfC18XFxcXC584oiZfDopP1xcXFxzKiRcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5NZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyB0b1RpbWV6b25lT2Zmc2V0IH0gZnJvbSBcIi4uLy4uL3RpbWV6b25lLmpzXCI7XG5jb25zdCBUSU1FWk9ORV9OQU1FX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXlxcXFxzKiw/XFxcXHMqXFxcXCg/KFtBLVpdezIsNH0pXFxcXCk/KD89XFxcXFd8JClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXh0cmFjdFRpbWV6b25lQWJiclJlZmluZXIge1xuICAgIHRpbWV6b25lT3ZlcnJpZGVzO1xuICAgIGNvbnN0cnVjdG9yKHRpbWV6b25lT3ZlcnJpZGVzKSB7XG4gICAgICAgIHRoaXMudGltZXpvbmVPdmVycmlkZXMgPSB0aW1lem9uZU92ZXJyaWRlcztcbiAgICB9XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgY29uc3QgdGltZXpvbmVPdmVycmlkZXMgPSBjb250ZXh0Lm9wdGlvbi50aW1lem9uZXMgPz8ge307XG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWZmaXggPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IFRJTUVaT05FX05BTUVfUEFUVEVSTi5leGVjKHN1ZmZpeCk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGltZXpvbmVBYmJyID0gbWF0Y2hbMV0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZkRhdGUgPSByZXN1bHQuc3RhcnQuZGF0ZSgpID8/IHJlc3VsdC5yZWZEYXRlID8/IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBjb25zdCB0ek92ZXJyaWRlcyA9IHsgLi4udGhpcy50aW1lem9uZU92ZXJyaWRlcywgLi4udGltZXpvbmVPdmVycmlkZXMgfTtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZFRpbWV6b25lT2Zmc2V0ID0gdG9UaW1lem9uZU9mZnNldCh0aW1lem9uZUFiYnIsIHJlZkRhdGUsIHR6T3ZlcnJpZGVzKTtcbiAgICAgICAgICAgIGlmIChleHRyYWN0ZWRUaW1lem9uZU9mZnNldCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEV4dHJhY3RpbmcgdGltZXpvbmU6ICcke3RpbWV6b25lQWJicn0nIGludG86ICR7ZXh0cmFjdGVkVGltZXpvbmVPZmZzZXR9IGZvcjogJHtyZXN1bHQuc3RhcnR9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lem9uZU9mZnNldCA9IHJlc3VsdC5zdGFydC5nZXQoXCJ0aW1lem9uZU9mZnNldFwiKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50VGltZXpvbmVPZmZzZXQgIT09IG51bGwgJiYgZXh0cmFjdGVkVGltZXpvbmVPZmZzZXQgIT0gY3VycmVudFRpbWV6b25lT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lem9uZUFiYnIgIT0gbWF0Y2hbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuaXNPbmx5RGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWV6b25lQWJiciAhPSBtYXRjaFsxXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCBleHRyYWN0ZWRUaW1lem9uZU9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0LmVuZCAhPSBudWxsICYmICFyZXN1bHQuZW5kLmlzQ2VydGFpbihcInRpbWV6b25lT2Zmc2V0XCIpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCBleHRyYWN0ZWRUaW1lem9uZU9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FeHRyYWN0VGltZXpvbmVBYmJyUmVmaW5lci5qcy5tYXAiLCJjb25zdCBUSU1FWk9ORV9PRkZTRVRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJeXFxcXHMqKD86XFxcXCg/KD86R01UfFVUQylcXFxccz8pPyhbKy1dKShcXFxcZHsxLDJ9KSg/Ojo/KFxcXFxkezJ9KSk/XFxcXCk/XCIsIFwiaVwiKTtcbmNvbnN0IFRJTUVaT05FX09GRlNFVF9TSUdOX0dST1VQID0gMTtcbmNvbnN0IFRJTUVaT05FX09GRlNFVF9IT1VSX09GRlNFVF9HUk9VUCA9IDI7XG5jb25zdCBUSU1FWk9ORV9PRkZTRVRfTUlOVVRFX09GRlNFVF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIHtcbiAgICByZWZpbmUoY29udGV4dCwgcmVzdWx0cykge1xuICAgICAgICByZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcocmVzdWx0LmluZGV4ICsgcmVzdWx0LnRleHQubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gVElNRVpPTkVfT0ZGU0VUX1BBVFRFUk4uZXhlYyhzdWZmaXgpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFeHRyYWN0aW5nIHRpbWV6b25lOiAnJHttYXRjaFswXX0nIGludG8gOiAke3Jlc3VsdH1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaG91ck9mZnNldCA9IHBhcnNlSW50KG1hdGNoW1RJTUVaT05FX09GRlNFVF9IT1VSX09GRlNFVF9HUk9VUF0pO1xuICAgICAgICAgICAgY29uc3QgbWludXRlT2Zmc2V0ID0gcGFyc2VJbnQobWF0Y2hbVElNRVpPTkVfT0ZGU0VUX01JTlVURV9PRkZTRVRfR1JPVVBdIHx8IFwiMFwiKTtcbiAgICAgICAgICAgIGxldCB0aW1lem9uZU9mZnNldCA9IGhvdXJPZmZzZXQgKiA2MCArIG1pbnV0ZU9mZnNldDtcbiAgICAgICAgICAgIGlmICh0aW1lem9uZU9mZnNldCA+IDE0ICogNjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbVElNRVpPTkVfT0ZGU0VUX1NJR05fR1JPVVBdID09PSBcIi1cIikge1xuICAgICAgICAgICAgICAgIHRpbWV6b25lT2Zmc2V0ID0gLXRpbWV6b25lT2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgdGltZXpvbmVPZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInRpbWV6b25lT2Zmc2V0XCIsIHRpbWV6b25lT2Zmc2V0KTtcbiAgICAgICAgICAgIHJlc3VsdC50ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lci5qcy5tYXAiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBPdmVybGFwUmVtb3ZhbFJlZmluZXIge1xuICAgIHJlZmluZShjb250ZXh0LCByZXN1bHRzKSB7XG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkUmVzdWx0cyA9IFtdO1xuICAgICAgICBsZXQgcHJldlJlc3VsdCA9IHJlc3VsdHNbMF07XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzdWx0c1tpXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaW5kZXggPj0gcHJldlJlc3VsdC5pbmRleCArIHByZXZSZXN1bHQudGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZFJlc3VsdHMucHVzaChwcmV2UmVzdWx0KTtcbiAgICAgICAgICAgICAgICBwcmV2UmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGtlcHQgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlbW92ZWQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC50ZXh0Lmxlbmd0aCA+IHByZXZSZXN1bHQudGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBrZXB0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJlbW92ZWQgPSBwcmV2UmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAga2VwdCA9IHByZXZSZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gcmVtb3ZlICR7cmVtb3ZlZH0gYnkgJHtrZXB0fWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2UmVzdWx0ID0ga2VwdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldlJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZFJlc3VsdHMucHVzaChwcmV2UmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWRSZXN1bHRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU92ZXJsYXBSZW1vdmFsUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBXZWVrZGF5IH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi9yZXN1bHRzLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkocmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcikge1xuICAgIGNvbnN0IHJlZkRhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgY29uc3QgZGF5c1RvV2Vla2RheSA9IGdldERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIGxldCBjb21wb25lbnRzID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSk7XG4gICAgY29tcG9uZW50cyA9IGNvbXBvbmVudHMuYWRkRHVyYXRpb25Bc0ltcGxpZWQoeyBkYXk6IGRheXNUb1dlZWtkYXkgfSk7XG4gICAgY29tcG9uZW50cy5hc3NpZ24oXCJ3ZWVrZGF5XCIsIHdlZWtkYXkpO1xuICAgIHJldHVybiBjb21wb25lbnRzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSwgbW9kaWZpZXIpIHtcbiAgICBjb25zdCByZWZXZWVrZGF5ID0gcmVmRGF0ZS5nZXREYXkoKTtcbiAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7XG4gICAgICAgIGNhc2UgXCJ0aGlzXCI6XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGF5c0ZvcndhcmRUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSk7XG4gICAgICAgIGNhc2UgXCJsYXN0XCI6XG4gICAgICAgICAgICByZXR1cm4gZ2V0QmFja3dhcmREYXlzVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpO1xuICAgICAgICBjYXNlIFwibmV4dFwiOlxuICAgICAgICAgICAgaWYgKHJlZldlZWtkYXkgPT0gV2Vla2RheS5TVU5EQVkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2Vla2RheSA9PSBXZWVrZGF5LlNVTkRBWSA/IDcgOiB3ZWVrZGF5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlZldlZWtkYXkgPT0gV2Vla2RheS5TQVRVUkRBWSkge1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5ID09IFdlZWtkYXkuU0FUVVJEQVkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA3O1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5ID09IFdlZWtkYXkuU1VOREFZKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gODtcbiAgICAgICAgICAgICAgICByZXR1cm4gMSArIHdlZWtkYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2Vla2RheSA8IHJlZldlZWtkYXkgJiYgd2Vla2RheSAhPSBXZWVrZGF5LlNVTkRBWSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCB3ZWVrZGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCB3ZWVrZGF5KSArIDc7XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZXREYXlzVG9XZWVrZGF5Q2xvc2VzdChyZWZEYXRlLCB3ZWVrZGF5KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlzVG9XZWVrZGF5Q2xvc2VzdChyZWZEYXRlLCB3ZWVrZGF5KSB7XG4gICAgY29uc3QgYmFja3dhcmQgPSBnZXRCYWNrd2FyZERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSk7XG4gICAgY29uc3QgZm9yd2FyZCA9IGdldERheXNGb3J3YXJkVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpO1xuICAgIHJldHVybiBmb3J3YXJkIDwgLWJhY2t3YXJkID8gZm9yd2FyZCA6IGJhY2t3YXJkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERheXNGb3J3YXJkVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpIHtcbiAgICBjb25zdCByZWZXZWVrZGF5ID0gcmVmRGF0ZS5nZXREYXkoKTtcbiAgICBsZXQgZm9yd2FyZENvdW50ID0gd2Vla2RheSAtIHJlZldlZWtkYXk7XG4gICAgaWYgKGZvcndhcmRDb3VudCA8IDApIHtcbiAgICAgICAgZm9yd2FyZENvdW50ICs9IDc7XG4gICAgfVxuICAgIHJldHVybiBmb3J3YXJkQ291bnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFja3dhcmREYXlzVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpIHtcbiAgICBjb25zdCByZWZXZWVrZGF5ID0gcmVmRGF0ZS5nZXREYXkoKTtcbiAgICBsZXQgYmFja3dhcmRDb3VudCA9IHdlZWtkYXkgLSByZWZXZWVrZGF5O1xuICAgIGlmIChiYWNrd2FyZENvdW50ID49IDApIHtcbiAgICAgICAgYmFja3dhcmRDb3VudCAtPSA3O1xuICAgIH1cbiAgICByZXR1cm4gYmFja3dhcmRDb3VudDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlZWtkYXlzLmpzLm1hcCIsImltcG9ydCAqIGFzIGRhdGVzIGZyb20gXCIuLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgaW1wbHlTaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgYWRkRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmltcG9ydCB7IGdldERheXNGb3J3YXJkVG9XZWVrZGF5IH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3J3YXJkRGF0ZVJlZmluZXIge1xuICAgIHJlZmluZShjb250ZXh0LCByZXN1bHRzKSB7XG4gICAgICAgIGlmICghY29udGV4dC5vcHRpb24uZm9yd2FyZERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVmRGF0ZSA9IGNvbnRleHQucmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlUaW1lKCkgJiYgY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudCA+IHJlc3VsdC5zdGFydC5kYXRlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWZEYXRlID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmRm9sbG93aW5nRGF5ID0gbmV3IERhdGUocmVmRGF0ZSk7XG4gICAgICAgICAgICAgICAgcmVmRm9sbG93aW5nRGF5LnNldERhdGUocmVmRm9sbG93aW5nRGF5LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIGRhdGVzLmltcGx5U2ltaWxhckRhdGUocmVzdWx0LnN0YXJ0LCByZWZGb2xsb3dpbmdEYXkpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB0aW1lIGZyb20gdGhlIHJlZiBkYXRlICgke3JlZkRhdGV9KSB0byB0aGUgZm9sbG93aW5nIGRheSAoJHtyZWZGb2xsb3dpbmdEYXl9KWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZW5kICYmIHJlc3VsdC5lbmQuaXNPbmx5VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVzLmltcGx5U2ltaWxhckRhdGUocmVzdWx0LmVuZCwgcmVmRm9sbG93aW5nRGF5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5kYXRlKCkgPiByZXN1bHQuZW5kLmRhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmRm9sbG93aW5nRGF5LnNldERhdGUocmVmRm9sbG93aW5nRGF5LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMuaW1wbHlTaW1pbGFyRGF0ZShyZXN1bHQuZW5kLCByZWZGb2xsb3dpbmdEYXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkgJiYgcmVmRGF0ZSA+IHJlc3VsdC5zdGFydC5kYXRlKCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF5c1RvQWRkID0gZ2V0RGF5c0ZvcndhcmRUb1dlZWtkYXkocmVmRGF0ZSwgcmVzdWx0LnN0YXJ0LmdldChcIndlZWtkYXlcIikpIHx8IDc7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZGVkV2Vla2RheSA9IGFkZER1cmF0aW9uKHJlZkRhdGUsIHsgZGF5OiBkYXlzVG9BZGQgfSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyRGF0ZShyZXN1bHQuc3RhcnQsIGZvcndhcmRlZFdlZWtkYXkpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB3ZWVrZGF5ICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgJiYgcmVzdWx0LnN0YXJ0LmRhdGUoKSA+IHJlc3VsdC5lbmQuZGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXlzVG9BZGQgPSBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCByZXN1bHQuc3RhcnQuZ2V0KFwid2Vla2RheVwiKSkgfHwgNztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZGVkV2Vla2RheSA9IGFkZER1cmF0aW9uKHJlZkRhdGUsIHsgZGF5OiBkYXlzVG9BZGQgfSk7XG4gICAgICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhckRhdGUocmVzdWx0LmVuZCwgZm9yd2FyZGVkV2Vla2RheSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBhZGp1c3RlZCAke3Jlc3VsdH0gd2Vla2RheSAoJHtyZXN1bHQuZW5kfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc0RhdGVXaXRoVW5rbm93blllYXIoKSAmJiByZWZEYXRlID4gcmVzdWx0LnN0YXJ0LmRhdGUoKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMyAmJiByZWZEYXRlID4gcmVzdWx0LnN0YXJ0LmRhdGUoKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgcmVzdWx0LnN0YXJ0LmdldChcInllYXJcIikgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB5ZWFyICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVuZCAmJiAhcmVzdWx0LmVuZC5pc0NlcnRhaW4oXCJ5ZWFyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwieWVhclwiLCByZXN1bHQuZW5kLmdldChcInllYXJcIikgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gYWRqdXN0ZWQgJHtyZXN1bHR9IG1vbnRoICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZvcndhcmREYXRlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBGaWx0ZXIgfSBmcm9tIFwiLi4vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVW5saWtlbHlGb3JtYXRGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpc1ZhbGlkKGNvbnRleHQsIHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnRleHQucmVwbGFjZShcIiBcIiwgXCJcIikubWF0Y2goL15cXGQqKFxcLlxcZCopPyQvKSkge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFJlbW92aW5nIHVubGlrZWx5IHJlc3VsdCAnJHtyZXN1bHQudGV4dH0nYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc3VsdC5zdGFydC5pc1ZhbGlkRGF0ZSgpKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZpbmcgaW52YWxpZCByZXN1bHQ6ICR7cmVzdWx0fSAoJHtyZXN1bHQuc3RhcnR9KWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5lbmQgJiYgIXJlc3VsdC5lbmQuaXNWYWxpZERhdGUoKSkge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFJlbW92aW5nIGludmFsaWQgcmVzdWx0OiAke3Jlc3VsdH0gKCR7cmVzdWx0LmVuZH0pYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N0cmljdE1vZGVWYWxpZChjb250ZXh0LCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpc1N0cmljdE1vZGVWYWxpZChjb250ZXh0LCByZXN1bHQpIHtcbiAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAoU3RyaWN0KSBSZW1vdmluZyB3ZWVrZGF5IG9ubHkgY29tcG9uZW50OiAke3Jlc3VsdH0gKCR7cmVzdWx0LmVuZH0pYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Vbmxpa2VseUZvcm1hdEZpbHRlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoWzAtOV17NH0pXFxcXC0oWzAtOV17MSwyfSlcXFxcLShbMC05XXsxLDJ9KVwiICtcbiAgICBcIig/OlRcIiArXG4gICAgXCIoWzAtOV17MSwyfSk6KFswLTldezEsMn0pXCIgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiOihbMC05XXsxLDJ9KSg/OlxcXFwuKFxcXFxkezEsNH0pKT9cIiArXG4gICAgXCIpP1wiICtcbiAgICBcIihcIiArXG4gICAgXCJafChbKy1dXFxcXGR7Mn0pOj8oXFxcXGR7Mn0pP1wiICtcbiAgICBcIik/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBNT05USF9OVU1CRVJfR1JPVVAgPSAyO1xuY29uc3QgREFURV9OVU1CRVJfR1JPVVAgPSAzO1xuY29uc3QgSE9VUl9OVU1CRVJfR1JPVVAgPSA0O1xuY29uc3QgTUlOVVRFX05VTUJFUl9HUk9VUCA9IDU7XG5jb25zdCBTRUNPTkRfTlVNQkVSX0dST1VQID0gNjtcbmNvbnN0IE1JTExJU0VDT05EX05VTUJFUl9HUk9VUCA9IDc7XG5jb25zdCBUWkRfR1JPVVAgPSA4O1xuY29uc3QgVFpEX0hPVVJfT0ZGU0VUX0dST1VQID0gOTtcbmNvbnN0IFRaRF9NSU5VVEVfT0ZGU0VUX0dST1VQID0gMTA7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJU09Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIFwieWVhclwiOiBwYXJzZUludChtYXRjaFtZRUFSX05VTUJFUl9HUk9VUF0pLFxuICAgICAgICAgICAgXCJtb250aFwiOiBwYXJzZUludChtYXRjaFtNT05USF9OVU1CRVJfR1JPVVBdKSxcbiAgICAgICAgICAgIFwiZGF5XCI6IHBhcnNlSW50KG1hdGNoW0RBVEVfTlVNQkVSX0dST1VQXSksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobWF0Y2hbSE9VUl9OVU1CRVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBwYXJzZUludChtYXRjaFtIT1VSX05VTUJFUl9HUk9VUF0pKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWludXRlXCIsIHBhcnNlSW50KG1hdGNoW01JTlVURV9OVU1CRVJfR1JPVVBdKSk7XG4gICAgICAgICAgICBpZiAobWF0Y2hbU0VDT05EX05VTUJFUl9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwic2Vjb25kXCIsIHBhcnNlSW50KG1hdGNoW1NFQ09ORF9OVU1CRVJfR1JPVVBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbTUlMTElTRUNPTkRfTlVNQkVSX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCBwYXJzZUludChtYXRjaFtNSUxMSVNFQ09ORF9OVU1CRVJfR1JPVVBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbVFpEX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoW1RaRF9IT1VSX09GRlNFVF9HUk9VUF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG91ck9mZnNldCA9IHBhcnNlSW50KG1hdGNoW1RaRF9IT1VSX09GRlNFVF9HUk9VUF0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWludXRlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoW1RaRF9NSU5VVEVfT0ZGU0VUX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW51dGVPZmZzZXQgPSBwYXJzZUludChtYXRjaFtUWkRfTUlOVVRFX09GRlNFVF9HUk9VUF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGhvdXJPZmZzZXQgKiA2MDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBtaW51dGVPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbWludXRlT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgb2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cy5hZGRUYWcoXCJwYXJzZXIvSVNPRm9ybWF0UGFyc2VyXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlTT0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCBuZXdSZXN1bHQgPSBuZXh0UmVzdWx0LmNsb25lKCk7XG4gICAgICAgIG5ld1Jlc3VsdC5pbmRleCA9IGN1cnJlbnRSZXN1bHQuaW5kZXg7XG4gICAgICAgIG5ld1Jlc3VsdC50ZXh0ID0gY3VycmVudFJlc3VsdC50ZXh0ICsgdGV4dEJldHdlZW4gKyBuZXdSZXN1bHQudGV4dDtcbiAgICAgICAgbmV3UmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgY3VycmVudFJlc3VsdC5zdGFydC5nZXQoXCJ3ZWVrZGF5XCIpKTtcbiAgICAgICAgaWYgKG5ld1Jlc3VsdC5lbmQpIHtcbiAgICAgICAgICAgIG5ld1Jlc3VsdC5lbmQuYXNzaWduKFwid2Vla2RheVwiLCBjdXJyZW50UmVzdWx0LnN0YXJ0LmdldChcIndlZWtkYXlcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdSZXN1bHQ7XG4gICAgfVxuICAgIHNob3VsZE1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCB3ZWVrZGF5VGhlbk5vcm1hbERhdGUgPSBjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seVdlZWtkYXlDb21wb25lbnQoKSAmJlxuICAgICAgICAgICAgIWN1cnJlbnRSZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwiaG91clwiKSAmJlxuICAgICAgICAgICAgbmV4dFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJkYXlcIik7XG4gICAgICAgIHJldHVybiB3ZWVrZGF5VGhlbk5vcm1hbERhdGUgJiYgdGV4dEJldHdlZW4ubWF0Y2goL14sP1xccyokLykgIT0gbnVsbDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBFeHRyYWN0VGltZXpvbmVBYmJyUmVmaW5lciBmcm9tIFwiLi9jb21tb24vcmVmaW5lcnMvRXh0cmFjdFRpbWV6b25lQWJiclJlZmluZXIuanNcIjtcbmltcG9ydCBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgT3ZlcmxhcFJlbW92YWxSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9PdmVybGFwUmVtb3ZhbFJlZmluZXIuanNcIjtcbmltcG9ydCBGb3J3YXJkRGF0ZVJlZmluZXIgZnJvbSBcIi4vY29tbW9uL3JlZmluZXJzL0ZvcndhcmREYXRlUmVmaW5lci5qc1wiO1xuaW1wb3J0IFVubGlrZWx5Rm9ybWF0RmlsdGVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9Vbmxpa2VseUZvcm1hdEZpbHRlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9jb21tb24vcGFyc2Vycy9JU09Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbiwgc3RyaWN0TW9kZSA9IGZhbHNlKSB7XG4gICAgY29uZmlndXJhdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IElTT0Zvcm1hdFBhcnNlcigpKTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzLnVuc2hpZnQobmV3IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy51bnNoaWZ0KG5ldyBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyKCkpO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMudW5zaGlmdChuZXcgT3ZlcmxhcFJlbW92YWxSZWZpbmVyKCkpO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMucHVzaChuZXcgRXh0cmFjdFRpbWV6b25lQWJiclJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBPdmVybGFwUmVtb3ZhbFJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBGb3J3YXJkRGF0ZVJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBVbmxpa2VseUZvcm1hdEZpbHRlcihzdHJpY3RNb2RlKSk7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWd1cmF0aW9ucy5qcy5tYXAiLCJpbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgYXNzaWduU2ltaWxhclRpbWUsIGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gbm93KHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IHRhcmdldERhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgYXNzaWduU2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgcmVmZXJlbmNlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2Uvbm93XCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9kYXkocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgdGFyZ2V0RGF0ZSA9IHJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgY29tcG9uZW50LmRlbGV0ZShcIm1lcmlkaWVtXCIpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvdG9kYXlcIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB5ZXN0ZXJkYXkocmVmZXJlbmNlKSB7XG4gICAgcmV0dXJuIHRoZURheUJlZm9yZShyZWZlcmVuY2UsIDEpLmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS95ZXN0ZXJkYXlcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9tb3Jyb3cocmVmZXJlbmNlKSB7XG4gICAgcmV0dXJuIHRoZURheUFmdGVyKHJlZmVyZW5jZSwgMSkuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL3RvbW9ycm93XCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRoZURheUJlZm9yZShyZWZlcmVuY2UsIG51bURheSkge1xuICAgIHJldHVybiB0aGVEYXlBZnRlcihyZWZlcmVuY2UsIC1udW1EYXkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRoZURheUFmdGVyKHJlZmVyZW5jZSwgbkRheXMpIHtcbiAgICBjb25zdCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgIG5ld0RhdGUuc2V0RGF0ZShuZXdEYXRlLmdldERhdGUoKSArIG5EYXlzKTtcbiAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5ld0RhdGUpO1xuICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBuZXdEYXRlKTtcbiAgICBjb21wb25lbnQuZGVsZXRlKFwibWVyaWRpZW1cIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b25pZ2h0KHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMjIpIHtcbiAgICBjb25zdCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS90b25pZ2h0XCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbGFzdE5pZ2h0KHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMCkge1xuICAgIGxldCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBpZiAodGFyZ2V0RGF0ZS5nZXRIb3VycygpIDwgNikge1xuICAgICAgICB0YXJnZXREYXRlID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkgLSAyNCAqIDYwICogNjAgKiAxMDAwKTtcbiAgICB9XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIGltcGx5SG91cik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBldmVuaW5nKHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMjApIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2V2ZW5pbmdcIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB5ZXN0ZXJkYXlFdmVuaW5nKHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMjApIHtcbiAgICBsZXQgdGFyZ2V0RGF0ZSA9IHJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgdGFyZ2V0RGF0ZSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpIC0gMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIGltcGx5SG91cik7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UveWVzdGVyZGF5XCIpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvZXZlbmluZ1wiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1pZG5pZ2h0KHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBpZiAocmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpLmdldEhvdXJzKCkgPiAyKSB7XG4gICAgICAgIGNvbXBvbmVudC5hZGREdXJhdGlvbkFzSW1wbGllZCh7IGRheTogMSB9KTtcbiAgICB9XG4gICAgY29tcG9uZW50LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL21pZG5pZ2h0XCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbW9ybmluZyhyZWZlcmVuY2UsIGltcGx5SG91ciA9IDYpIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbW9ybmluZ1wiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFmdGVybm9vbihyZWZlcmVuY2UsIGltcGx5SG91ciA9IDE1KSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIGltcGx5SG91cik7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vb24ocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwiaG91clwiLCAxMik7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL25vb25cIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNhc3VhbFJlZmVyZW5jZXMuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvKG5vd3x0b2RheXx0b25pZ2h0fHRvbW9ycm93fG92ZXJtb3Jyb3d8dG1yfHRtcnd8eWVzdGVyZGF5fGxhc3RcXHMqbmlnaHQpKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTkNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBsZXQgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJub3dcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9kYXlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ5ZXN0ZXJkYXlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9tb3Jyb3dcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ0bXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ0bXJ3XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9uaWdodFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9uaWdodChjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwib3Zlcm1vcnJvd1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC9sYXN0XFxzKm5pZ2h0LykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldERhdGUuZ2V0SG91cnMoKSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRGF5ID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNEYXkuc2V0RGF0ZShwcmV2aW91c0RheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBwcmV2aW91c0RheTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwicGFyc2VyL0VOQ2FzdWFsRGF0ZVBhcnNlclwiKTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTkNhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgKiBhcyBjYXN1YWxSZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IC8oPzp0aGlzKT9cXHN7MCwzfShtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0fG1pZG5pZ2h0fG1pZGRheXxub29uKSg/PVxcV3wkKS9pO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5DYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBsZXQgY29tcG9uZW50ID0gbnVsbDtcbiAgICAgICAgc3dpdGNoIChtYXRjaFsxXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiYWZ0ZXJub29uXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5hZnRlcm5vb24oY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImV2ZW5pbmdcIjpcbiAgICAgICAgICAgIGNhc2UgXCJuaWdodFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IGNhc3VhbFJlZmVyZW5jZXMuZXZlbmluZyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWlkbmlnaHRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBjYXN1YWxSZWZlcmVuY2VzLm1pZG5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtb3JuaW5nXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5tb3JuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub29uXCI6XG4gICAgICAgICAgICBjYXNlIFwibWlkZGF5XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5ub29uKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwicGFyc2VyL0VOQ2FzdWFsVGltZVBhcnNlclwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuaW1wb3J0IHsgV2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86b25cXFxccyo/KT9cIiArXG4gICAgXCIoPzoodGhpc3xsYXN0fHBhc3R8bmV4dClcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9fHdlZWtlbmR8d2Vla2RheSlgICtcbiAgICBcIig/OlxcXFxzKig/OlxcXFwsfFxcXFwpfFxcXFzvvIkpKT9cIiArXG4gICAgXCIoPzpcXFxccyooPzpvZlxcXFxzKik/KHRoaXN8bGFzdHxwYXN0fG5leHQpXFxcXHMqd2Vlayk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQgPT0gXCJsYXN0XCIgfHwgbW9kaWZpZXJXb3JkID09IFwicGFzdFwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcIm5leHRcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQgPT0gXCJ0aGlzXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJ0aGlzXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2Vla2RheV93b3JkID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHdlZWtkYXk7XG4gICAgICAgIGlmIChXRUVLREFZX0RJQ1RJT05BUllbd2Vla2RheV93b3JkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW3dlZWtkYXlfd29yZF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2Vla2RheV93b3JkID09IFwid2Vla2VuZFwiKSB7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gbW9kaWZpZXIgPT0gXCJsYXN0XCIgPyBXZWVrZGF5LlNVTkRBWSA6IFdlZWtkYXkuU0FUVVJEQVk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2Vla2RheV93b3JkID09IFwid2Vla2RheVwiKSB7XG4gICAgICAgICAgICBjb25zdCByZWZXZWVrZGF5ID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkuZ2V0RGF5KCk7XG4gICAgICAgICAgICBpZiAocmVmV2Vla2RheSA9PSBXZWVrZGF5LlNVTkRBWSB8fCByZWZXZWVrZGF5ID09IFdlZWtkYXkuU0FUVVJEQVkpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gbW9kaWZpZXIgPT0gXCJsYXN0XCIgPyBXZWVrZGF5LkZSSURBWSA6IFdlZWtkYXkuTU9OREFZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHJlZldlZWtkYXkgLSAxO1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBtb2RpZmllciA9PSBcImxhc3RcIiA/IHdlZWtkYXkgLSAxIDogd2Vla2RheSArIDE7XG4gICAgICAgICAgICAgICAgd2Vla2RheSA9ICh3ZWVrZGF5ICUgNSkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5XZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCh0aGlzfGxhc3R8cGFzdHxuZXh0fGFmdGVyXFxcXHMqdGhpcylcXFxccyooJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSkoPz1cXFxccyopYCArIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9ESUZJRVJfV09SRF9HUk9VUCA9IDE7XG5jb25zdCBSRUxBVElWRV9XT1JEX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb2RpZmllciA9IG1hdGNoW01PRElGSUVSX1dPUkRfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHVuaXRXb3JkID0gbWF0Y2hbUkVMQVRJVkVfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGltZXVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVt1bml0V29yZF07XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcIm5leHRcIiB8fCBtb2RpZmllci5zdGFydHNXaXRoKFwiYWZ0ZXJcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICAgICAgdGltZVVuaXRzW3RpbWV1bml0XSA9IDE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcImxhc3RcIiB8fCBtb2RpZmllciA9PSBcInBhc3RcIikge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gLTE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAodW5pdFdvcmQubWF0Y2goL3dlZWsvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRXb3JkLm1hdGNoKC9tb250aC9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL3llYXIvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyLCBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoW15cXFxcZF18XilcIiArXG4gICAgXCIoWzAtM117MCwxfVswLTldezF9KVtcXFxcL1xcXFwuXFxcXC1dKFswLTNdezAsMX1bMC05XXsxfSlcIiArXG4gICAgXCIoPzpbXFxcXC9cXFxcLlxcXFwtXShbMC05XXs0fXxbMC05XXsyfSkpP1wiICtcbiAgICBcIihcXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBPUEVOSU5HX0dST1VQID0gMTtcbmNvbnN0IEVORElOR19HUk9VUCA9IDU7XG5jb25zdCBGSVJTVF9OVU1CRVJTX0dST1VQID0gMjtcbmNvbnN0IFNFQ09ORF9OVU1CRVJTX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIHtcbiAgICBncm91cE51bWJlck1vbnRoO1xuICAgIGdyb3VwTnVtYmVyRGF5O1xuICAgIGNvbnN0cnVjdG9yKGxpdHRsZUVuZGlhbikge1xuICAgICAgICB0aGlzLmdyb3VwTnVtYmVyTW9udGggPSBsaXR0bGVFbmRpYW4gPyBTRUNPTkRfTlVNQkVSU19HUk9VUCA6IEZJUlNUX05VTUJFUlNfR1JPVVA7XG4gICAgICAgIHRoaXMuZ3JvdXBOdW1iZXJEYXkgPSBsaXR0bGVFbmRpYW4gPyBGSVJTVF9OVU1CRVJTX0dST1VQIDogU0VDT05EX05VTUJFUlNfR1JPVVA7XG4gICAgfVxuICAgIHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFtPUEVOSU5HX0dST1VQXS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGluZGV4RW5kID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggLSBtYXRjaFtFTkRJTkdfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdGV4dEJlZm9yZSA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKHRleHRCZWZvcmUubWF0Y2goXCJcXFxcZC8/JFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXhFbmQgPCBjb250ZXh0LnRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0QWZ0ZXIgPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKGluZGV4RW5kKTtcbiAgICAgICAgICAgIGlmICh0ZXh0QWZ0ZXIubWF0Y2goXCJeLz9cXFxcZFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXh0ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpO1xuICAgICAgICBpZiAodGV4dC5tYXRjaCgvXlxcZFxcLlxcZCQvKSB8fCB0ZXh0Lm1hdGNoKC9eXFxkXFwuXFxkezEsMn1cXC5cXGR7MSwyfVxccyokLykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hdGNoW1lFQVJfR1JPVVBdICYmIHRleHQuaW5kZXhPZihcIi9cIikgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KGluZGV4LCB0ZXh0KTtcbiAgICAgICAgbGV0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbdGhpcy5ncm91cE51bWJlck1vbnRoXSk7XG4gICAgICAgIGxldCBkYXkgPSBwYXJzZUludChtYXRjaFt0aGlzLmdyb3VwTnVtYmVyRGF5XSk7XG4gICAgICAgIGlmIChtb250aCA8IDEgfHwgbW9udGggPiAxMikge1xuICAgICAgICAgICAgaWYgKG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF5ID49IDEgJiYgZGF5IDw9IDEyICYmIG1vbnRoIDw9IDMxKSB7XG4gICAgICAgICAgICAgICAgICAgIFtkYXksIG1vbnRoXSA9IFttb250aCwgZGF5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5IDwgMSB8fCBkYXkgPiAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZE1vc3RMaWtlbHlBRFllYXIocmF3WWVhck51bWJlcik7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0LmFkZFRhZyhcInBhcnNlci9TbGFzaERhdGVGb3JtYXRQYXJzZXJcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCh0aGlzfGxhc3R8cGFzdHxuZXh0fGFmdGVyfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fTk9fQUJCUiA9IG5ldyBSZWdFeHAoYCh0aGlzfGxhc3R8cGFzdHxuZXh0fGFmdGVyfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGFsbG93QWJicmV2aWF0aW9ucztcbiAgICBjb25zdHJ1Y3RvcihhbGxvd0FiYnJldmlhdGlvbnMgPSB0cnVlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID0gYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbG93QWJicmV2aWF0aW9ucyA/IFBBVFRFUk4gOiBQQVRURVJOX05PX0FCQlI7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsYXN0XCI6XG4gICAgICAgICAgICBjYXNlIFwicGFzdFwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHJldmVyc2VEdXJhdGlvbihkdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgZHVyYXRpb24pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5mdW5jdGlvbiBJc1Bvc2l0aXZlRm9sbG93aW5nUmVmZXJlbmNlKHJlc3VsdCkge1xuICAgIHJldHVybiByZXN1bHQudGV4dC5tYXRjaCgvXlsrLV0vaSkgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIElzTmVnYXRpdmVGb2xsb3dpbmdSZWZlcmVuY2UocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9eLS9pKSAhPSBudWxsO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZVJlbGF0aXZlQWZ0ZXJEYXRlUmVmaW5lciBleHRlbmRzIE1lcmdpbmdSZWZpbmVyIHtcbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgaWYgKCF0ZXh0QmV0d2Vlbi5tYXRjaCgvXlxccyokL2kpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIElzUG9zaXRpdmVGb2xsb3dpbmdSZWZlcmVuY2UobmV4dFJlc3VsdCkgfHwgSXNOZWdhdGl2ZUZvbGxvd2luZ1JlZmVyZW5jZShuZXh0UmVzdWx0KTtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0LCBjb250ZXh0KSB7XG4gICAgICAgIGxldCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG5leHRSZXN1bHQudGV4dCk7XG4gICAgICAgIGlmIChJc05lZ2F0aXZlRm9sbG93aW5nUmVmZXJlbmNlKG5leHRSZXN1bHQpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tRGF0ZShjdXJyZW50UmVzdWx0LnN0YXJ0LmRhdGUoKSksIHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2luZ1Jlc3VsdChjdXJyZW50UmVzdWx0LnJlZmVyZW5jZSwgY3VycmVudFJlc3VsdC5pbmRleCwgYCR7Y3VycmVudFJlc3VsdC50ZXh0fSR7dGV4dEJldHdlZW59JHtuZXh0UmVzdWx0LnRleHR9YCwgY29tcG9uZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5NZXJnZVJlbGF0aXZlQWZ0ZXJEYXRlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5mdW5jdGlvbiBoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKGJlZm9yZXxmcm9tKSQvaSkgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGhhc0ltcGxpZWRMYXRlclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKGFmdGVyfHNpbmNlKSQvaSkgIT0gbnVsbDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VSZWxhdGl2ZUZvbGxvd0J5RGF0ZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyokL2k7XG4gICAgfVxuICAgIHNob3VsZE1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBpZiAoIXRleHRCZXR3ZWVuLm1hdGNoKHRoaXMucGF0dGVybkJldHdlZW4oKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhhc0ltcGxpZWRFYXJsaWVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSAmJiAhaGFzSW1wbGllZExhdGVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwiZGF5XCIpICYmICEhbmV4dFJlc3VsdC5zdGFydC5nZXQoXCJtb250aFwiKSAmJiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwieWVhclwiKTtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24oY3VycmVudFJlc3VsdC50ZXh0KTtcbiAgICAgICAgaWYgKGhhc0ltcGxpZWRFYXJsaWVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoUmVmZXJlbmNlV2l0aFRpbWV6b25lLmZyb21EYXRlKG5leHRSZXN1bHQuc3RhcnQuZGF0ZSgpKSwgZHVyYXRpb24pO1xuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdSZXN1bHQobmV4dFJlc3VsdC5yZWZlcmVuY2UsIGN1cnJlbnRSZXN1bHQuaW5kZXgsIGAke2N1cnJlbnRSZXN1bHQudGV4dH0ke3RleHRCZXR3ZWVufSR7bmV4dFJlc3VsdC50ZXh0fWAsIGNvbXBvbmVudHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOTWVyZ2VSZWxhdGl2ZUZvbGxvd0J5RGF0ZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBZRUFSX1NVRkZJWF9QQVRURVJOID0gbmV3IFJlZ0V4cChgXlxcXFxzKigke1lFQVJfUEFUVEVSTn0pYCwgXCJpXCIpO1xuY29uc3QgWUVBUl9HUk9VUCA9IDE7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTkV4dHJhY3RZZWFyU3VmZml4UmVmaW5lciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgcmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzRGF0ZVdpdGhVbmtub3duWWVhcigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3VmZml4ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHQudGV4dC5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBZRUFSX1NVRkZJWF9QQVRURVJOLmV4ZWMoc3VmZml4KTtcbiAgICAgICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0udHJpbSgpLmxlbmd0aCA8PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEV4dHJhY3RpbmcgeWVhcjogJyR7bWF0Y2hbMF19JyBpbnRvIDogJHtyZXN1bHR9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTkV4dHJhY3RZZWFyU3VmZml4UmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Fic3RyYWN0UmVmaW5lcnMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVW5saWtlbHlGb3JtYXRGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cbiAgICBpc1ZhbGlkKGNvbnRleHQsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gcmVzdWx0LnRleHQudHJpbSgpO1xuICAgICAgICBpZiAodGV4dCA9PT0gY29udGV4dC50ZXh0LnRyaW0oKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQudG9Mb3dlckNhc2UoKSA9PT0gXCJtYXlcIikge1xuICAgICAgICAgICAgY29uc3QgdGV4dEJlZm9yZSA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcoMCwgcmVzdWx0LmluZGV4KS50cmltKCk7XG4gICAgICAgICAgICBpZiAoIXRleHRCZWZvcmUubWF0Y2goL1xcYihpbikkL2kpKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSZW1vdmluZyB1bmxpa2VseSByZXN1bHQ6ICR7cmVzdWx0fWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dC50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKFwidGhlIHNlY29uZFwiKSkge1xuICAgICAgICAgICAgY29uc3QgdGV4dEFmdGVyID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHQudGV4dC5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICh0ZXh0QWZ0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZpbmcgdW5saWtlbHkgcmVzdWx0OiAke3Jlc3VsdH1gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlVubGlrZWx5Rm9ybWF0RmlsdGVyLmpzLm1hcCIsImltcG9ydCBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5Nb250aE5hbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTk1vbnRoTmFtZVBhcnNlci5qc1wiO1xuaW1wb3J0IEVOWWVhck1vbnRoRGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5ZZWFyTW9udGhEYXlQYXJzZXIuanNcIjtcbmltcG9ydCBFTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IEVOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvRU5NZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0VOTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgRU5DYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5DYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5DYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5DYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5XZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5XZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5SZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZVJlbGF0aXZlQWZ0ZXJEYXRlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVBZnRlckRhdGVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZVJlbGF0aXZlRm9sbG93QnlEYXRlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVGb2xsb3dCeURhdGVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgT3ZlcmxhcFJlbW92YWxSZWZpbmVyIGZyb20gXCIuLi8uLi9jb21tb24vcmVmaW5lcnMvT3ZlcmxhcFJlbW92YWxSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIuanNcIjtcbmltcG9ydCBFTlVubGlrZWx5Rm9ybWF0RmlsdGVyIGZyb20gXCIuL3JlZmluZXJzL0VOVW5saWtlbHlGb3JtYXRGaWx0ZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVORGVmYXVsdENvbmZpZ3VyYXRpb24ge1xuICAgIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5jcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCBsaXR0bGVFbmRpYW4pO1xuICAgICAgICBvcHRpb24ucGFyc2Vycy5wdXNoKG5ldyBFTkNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVOQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICAgICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgRU5Nb250aE5hbWVQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgICAgICBvcHRpb24ucGFyc2Vycy5wdXNoKG5ldyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBFTlVubGlrZWx5Rm9ybWF0RmlsdGVyKCkpO1xuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cbiAgICBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5XZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICAgICAgbmV3IEVOU2xhc2hNb250aEZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVFeHByZXNzaW9uUGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVmaW5lcnM6IFtuZXcgRU5NZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICAgICAgfSwgc3RyaWN0TW9kZSk7XG4gICAgICAgIG9wdGlvbnMucGFyc2Vycy51bnNoaWZ0KG5ldyBFTlllYXJNb250aERheVBhcnNlcihzdHJpY3RNb2RlKSk7XG4gICAgICAgIG9wdGlvbnMucmVmaW5lcnMudW5zaGlmdChuZXcgRU5NZXJnZVJlbGF0aXZlRm9sbG93QnlEYXRlUmVmaW5lcigpKTtcbiAgICAgICAgb3B0aW9ucy5yZWZpbmVycy51bnNoaWZ0KG5ldyBFTk1lcmdlUmVsYXRpdmVBZnRlckRhdGVSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnVuc2hpZnQobmV3IE92ZXJsYXBSZW1vdmFsUmVmaW5lcigpKTtcbiAgICAgICAgb3B0aW9ucy5yZWZpbmVycy5wdXNoKG5ldyBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnB1c2gobmV3IEVORXh0cmFjdFllYXJTdWZmaXhSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnB1c2gobmV3IEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCkpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWd1cmF0aW9uLmpzLm1hcCIsImltcG9ydCB7IFJlZmVyZW5jZVdpdGhUaW1lem9uZSwgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQgfSBmcm9tIFwiLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgRU5EZWZhdWx0Q29uZmlndXJhdGlvbiBmcm9tIFwiLi9sb2NhbGVzL2VuL2NvbmZpZ3VyYXRpb24uanNcIjtcbmV4cG9ydCBjbGFzcyBDaHJvbm8ge1xuICAgIHBhcnNlcnM7XG4gICAgcmVmaW5lcnM7XG4gICAgZGVmYXVsdENvbmZpZyA9IG5ldyBFTkRlZmF1bHRDb25maWd1cmF0aW9uKCk7XG4gICAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbiB8fCB0aGlzLmRlZmF1bHRDb25maWcuY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpO1xuICAgICAgICB0aGlzLnBhcnNlcnMgPSBbLi4uY29uZmlndXJhdGlvbi5wYXJzZXJzXTtcbiAgICAgICAgdGhpcy5yZWZpbmVycyA9IFsuLi5jb25maWd1cmF0aW9uLnJlZmluZXJzXTtcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2hyb25vKHtcbiAgICAgICAgICAgIHBhcnNlcnM6IFsuLi50aGlzLnBhcnNlcnNdLFxuICAgICAgICAgICAgcmVmaW5lcnM6IFsuLi50aGlzLnJlZmluZXJzXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBhcnNlRGF0ZSh0ZXh0LCByZWZlcmVuY2VEYXRlLCBvcHRpb24pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMucGFyc2UodGV4dCwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMubGVuZ3RoID4gMCA/IHJlc3VsdHNbMF0uc3RhcnQuZGF0ZSgpIDogbnVsbDtcbiAgICB9XG4gICAgcGFyc2UodGV4dCwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgUGFyc2luZ0NvbnRleHQodGV4dCwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9uKTtcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgdGhpcy5wYXJzZXJzLmZvckVhY2goKHBhcnNlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVzdWx0cyA9IENocm9uby5leGVjdXRlUGFyc2VyKGNvbnRleHQsIHBhcnNlcik7XG4gICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQocGFyc2VkUmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVmaW5lcnMuZm9yRWFjaChmdW5jdGlvbiAocmVmaW5lcikge1xuICAgICAgICAgICAgcmVzdWx0cyA9IHJlZmluZXIucmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHN0YXRpYyBleGVjdXRlUGFyc2VyKGNvbnRleHQsIHBhcnNlcikge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBwYXJzZXIucGF0dGVybihjb250ZXh0KTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gY29udGV4dC50ZXh0O1xuICAgICAgICBsZXQgcmVtYWluaW5nVGV4dCA9IGNvbnRleHQudGV4dDtcbiAgICAgICAgbGV0IG1hdGNoID0gcGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXggKyBvcmlnaW5hbFRleHQubGVuZ3RoIC0gcmVtYWluaW5nVGV4dC5sZW5ndGg7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyLmV4dHJhY3QoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gb3JpZ2luYWxUZXh0LnN1YnN0cmluZyhtYXRjaC5pbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIG1hdGNoID0gcGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHBhcnNlZFJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUGFyc2luZ1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIHBhcnNlZFJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFBhcnNpbmdDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0LnN0YXJ0ID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEluZGV4ID0gcGFyc2VkUmVzdWx0LmluZGV4O1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVGV4dCA9IHBhcnNlZFJlc3VsdC50ZXh0O1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiBjb25zb2xlLmxvZyhgJHtwYXJzZXIuY29uc3RydWN0b3IubmFtZX0gZXh0cmFjdGVkIChhdCBpbmRleD0ke3BhcnNlZEluZGV4fSkgJyR7cGFyc2VkVGV4dH0nYCkpO1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHBhcnNlZFJlc3VsdCk7XG4gICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gb3JpZ2luYWxUZXh0LnN1YnN0cmluZyhwYXJzZWRJbmRleCArIHBhcnNlZFRleHQubGVuZ3RoKTtcbiAgICAgICAgICAgIG1hdGNoID0gcGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBQYXJzaW5nQ29udGV4dCB7XG4gICAgdGV4dDtcbiAgICBvcHRpb247XG4gICAgcmVmZXJlbmNlO1xuICAgIHJlZkRhdGU7XG4gICAgY29uc3RydWN0b3IodGV4dCwgcmVmRGF0ZSwgb3B0aW9uKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHRoaXMub3B0aW9uID0gb3B0aW9uID8/IHt9O1xuICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tSW5wdXQocmVmRGF0ZSwgdGhpcy5vcHRpb24udGltZXpvbmVzKTtcbiAgICAgICAgdGhpcy5yZWZEYXRlID0gdGhpcy5yZWZlcmVuY2UuaW5zdGFudDtcbiAgICB9XG4gICAgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoY29tcG9uZW50cykge1xuICAgICAgICBpZiAoY29tcG9uZW50cyBpbnN0YW5jZW9mIFBhcnNpbmdDb21wb25lbnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdDb21wb25lbnRzKHRoaXMucmVmZXJlbmNlLCBjb21wb25lbnRzKTtcbiAgICB9XG4gICAgY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgdGV4dE9yRW5kSW5kZXgsIHN0YXJ0Q29tcG9uZW50cywgZW5kQ29tcG9uZW50cykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gdHlwZW9mIHRleHRPckVuZEluZGV4ID09PSBcInN0cmluZ1wiID8gdGV4dE9yRW5kSW5kZXggOiB0aGlzLnRleHQuc3Vic3RyaW5nKGluZGV4LCB0ZXh0T3JFbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gc3RhcnRDb21wb25lbnRzID8gdGhpcy5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cyhzdGFydENvbXBvbmVudHMpIDogbnVsbDtcbiAgICAgICAgY29uc3QgZW5kID0gZW5kQ29tcG9uZW50cyA/IHRoaXMuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoZW5kQ29tcG9uZW50cykgOiBudWxsO1xuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdSZXN1bHQodGhpcy5yZWZlcmVuY2UsIGluZGV4LCB0ZXh0LCBzdGFydCwgZW5kKTtcbiAgICB9XG4gICAgZGVidWcoYmxvY2spIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uLmRlYnVnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb24uZGVidWcgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uLmRlYnVnKGJsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLm9wdGlvbi5kZWJ1ZztcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmRlYnVnKGJsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNocm9uby5qcy5tYXAiLCJpbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgRU5EZWZhdWx0Q29uZmlndXJhdGlvbiBmcm9tIFwiLi9jb25maWd1cmF0aW9uLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBFTkRlZmF1bHRDb25maWd1cmF0aW9uKCk7XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjb25maWd1cmF0aW9uLmNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oZmFsc2UpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNvbmZpZ3VyYXRpb24uY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlLCBmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IEdCID0gbmV3IENocm9ubyhjb25maWd1cmF0aW9uLmNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERVRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86dW18dm9uKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YmlzKVxcXFxzKlwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaFswXS5tYXRjaCgvXlxccypcXGR7NH1cXHMqJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIFwic29ubnRhZ1wiOiAwLFxuICAgIFwic29cIjogMCxcbiAgICBcIm1vbnRhZ1wiOiAxLFxuICAgIFwibW9cIjogMSxcbiAgICBcImRpZW5zdGFnXCI6IDIsXG4gICAgXCJkaVwiOiAyLFxuICAgIFwibWl0dHdvY2hcIjogMyxcbiAgICBcIm1pXCI6IDMsXG4gICAgXCJkb25uZXJzdGFnXCI6IDQsXG4gICAgXCJkb1wiOiA0LFxuICAgIFwiZnJlaXRhZ1wiOiA1LFxuICAgIFwiZnJcIjogNSxcbiAgICBcInNhbXN0YWdcIjogNixcbiAgICBcInNhXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJqYW51YXJcIjogMSxcbiAgICBcImrDpG5uZXJcIjogMSxcbiAgICBcImphbm5lclwiOiAxLFxuICAgIFwiamFuXCI6IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgXCJmZWJydWFyXCI6IDIsXG4gICAgXCJmZWJlclwiOiAyLFxuICAgIFwiZmViXCI6IDIsXG4gICAgXCJmZWIuXCI6IDIsXG4gICAgXCJtw6RyelwiOiAzLFxuICAgIFwibWFlcnpcIjogMyxcbiAgICBcIm3DpHJcIjogMyxcbiAgICBcIm3DpHIuXCI6IDMsXG4gICAgXCJtcnpcIjogMyxcbiAgICBcIm1yei5cIjogMyxcbiAgICBcImFwcmlsXCI6IDQsXG4gICAgXCJhcHJcIjogNCxcbiAgICBcImFwci5cIjogNCxcbiAgICBcIm1haVwiOiA1LFxuICAgIFwianVuaVwiOiA2LFxuICAgIFwianVuXCI6IDYsXG4gICAgXCJqdW4uXCI6IDYsXG4gICAgXCJqdWxpXCI6IDcsXG4gICAgXCJqdWxcIjogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBcImF1Z3VzdFwiOiA4LFxuICAgIFwiYXVnXCI6IDgsXG4gICAgXCJhdWcuXCI6IDgsXG4gICAgXCJzZXB0ZW1iZXJcIjogOSxcbiAgICBcInNlcFwiOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIFwic2VwdFwiOiA5LFxuICAgIFwic2VwdC5cIjogOSxcbiAgICBcIm9rdG9iZXJcIjogMTAsXG4gICAgXCJva3RcIjogMTAsXG4gICAgXCJva3QuXCI6IDEwLFxuICAgIFwibm92ZW1iZXJcIjogMTEsXG4gICAgXCJub3ZcIjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIFwiZGV6ZW1iZXJcIjogMTIsXG4gICAgXCJkZXpcIjogMTIsXG4gICAgXCJkZXouXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcImVpbnNcIjogMSxcbiAgICBcImVpbmVcIjogMSxcbiAgICBcImVpbmVtXCI6IDEsXG4gICAgXCJlaW5lblwiOiAxLFxuICAgIFwiZWluZXJcIjogMSxcbiAgICBcInp3ZWlcIjogMixcbiAgICBcImRyZWlcIjogMyxcbiAgICBcInZpZXJcIjogNCxcbiAgICBcImbDvG5mXCI6IDUsXG4gICAgXCJmdWVuZlwiOiA1LFxuICAgIFwic2VjaHNcIjogNixcbiAgICBcInNpZWJlblwiOiA3LFxuICAgIFwiYWNodFwiOiA4LFxuICAgIFwibmV1blwiOiA5LFxuICAgIFwiemVoblwiOiAxMCxcbiAgICBcImVsZlwiOiAxMSxcbiAgICBcInp3w7ZsZlwiOiAxMixcbiAgICBcInp3b2VsZlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUlkgPSB7XG4gICAgc2VrOiBcInNlY29uZFwiLFxuICAgIHNla3VuZGU6IFwic2Vjb25kXCIsXG4gICAgc2VrdW5kZW46IFwic2Vjb25kXCIsXG4gICAgbWluOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZTogXCJtaW51dGVcIixcbiAgICBtaW51dGVuOiBcIm1pbnV0ZVwiLFxuICAgIGg6IFwiaG91clwiLFxuICAgIHN0ZDogXCJob3VyXCIsXG4gICAgc3R1bmRlOiBcImhvdXJcIixcbiAgICBzdHVuZGVuOiBcImhvdXJcIixcbiAgICB0YWc6IFwiZGF5XCIsXG4gICAgdGFnZTogXCJkYXlcIixcbiAgICB0YWdlbjogXCJkYXlcIixcbiAgICB3b2NoZTogXCJ3ZWVrXCIsXG4gICAgd29jaGVuOiBcIndlZWtcIixcbiAgICBtb25hdDogXCJtb250aFwiLFxuICAgIG1vbmF0ZTogXCJtb250aFwiLFxuICAgIG1vbmF0ZW46IFwibW9udGhcIixcbiAgICBtb25hdHM6IFwibW9udGhcIixcbiAgICBxdWFydGFsOiBcInF1YXJ0ZXJcIixcbiAgICBxdWFydGFsczogXCJxdWFydGVyXCIsXG4gICAgcXVhcnRhbGU6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0YWxlbjogXCJxdWFydGVyXCIsXG4gICAgYTogXCJ5ZWFyXCIsXG4gICAgajogXCJ5ZWFyXCIsXG4gICAganI6IFwieWVhclwiLFxuICAgIGphaHI6IFwieWVhclwiLFxuICAgIGphaHJlOiBcInllYXJcIixcbiAgICBqYWhyZW46IFwieWVhclwiLFxuICAgIGphaHJlczogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfGhhbGI/fGhhbGJlP3xlaW5pZ2VuP3x3ZW5pZ2VuP3xtZWhyZXJlbj8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJlaW5cIiB8fCBudW0gPT09IFwiZWluZXJcIiB8fCBudW0gPT09IFwiZWluZW1cIiB8fCBudW0gPT09IFwiZWluZW5cIiB8fCBudW0gPT09IFwiZWluZVwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3dlbmlnZW4vKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9oYWxiLykgfHwgbnVtLm1hdGNoKC9oYWxiZW4vKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2VpbmlnZW4vKSkge1xuICAgICAgICByZXR1cm4gMztcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9tZWhyZXJlbi8pKSB7XG4gICAgICAgIHJldHVybiA3O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IGAoPzpbMC05XXsxLDR9KD86XFxcXHMqW3ZuXVxcXFwuP1xcXFxzKig/OkMoPzpocik/fCg/OnVcXFxcLj98ZFxcXFwuPyg/OlxcXFxzKmdcXFxcLj8pPyk/XFxcXHMqWilcXFxcLj98XFxcXHMqKD86dVxcXFwuP3xkXFxcXC4/KD86XFxcXHMqZ1xcXFwuKT8pXFxcXHMqWlxcXFwuPyk/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC92L2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2dpLCBcIlwiKSk7XG4gICAgfVxuICAgIGlmICgvbi9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2dpLCBcIlwiKSk7XG4gICAgfVxuICAgIGlmICgvei9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2dpLCBcIlwiKSk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnRzO1xufVxuZnVuY3Rpb24gY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaFsxXSk7XG4gICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgIGZyYWdtZW50c1t1bml0XSA9IG51bTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86YVttbl1cXFxccyo/KT9cIiArXG4gICAgXCIoPzooZGllc2VbbW5dfGxldHp0ZVttbl18big/OsOkfGFlKWNoc3RlW21uXSlcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihkaWVzZXxsZXR6dGV8big/OsOkfGFlKWNoc3RlKVxcXFxzKndvY2hlKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgU1VGRklYX0dST1VQID0gMztcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1NVRkZJWF9HUk9VUF07XG4gICAgICAgIGxldCBtb2RpZmllcldvcmQgPSBwcmVmaXggfHwgcG9zdGZpeDtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkIHx8IFwiXCI7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9sZXR6dGUvKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQubWF0Y2goL2Noc3RlLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9kaWVzZS8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5jb25zdCBGSVJTVF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXnxcXFxcc3xUKVwiICtcbiAgICBcIig/Oig/OnVtfHZvbilcXFxccyopP1wiICtcbiAgICBcIihcXFxcZHsxLDJ9KSg/Omh8Oik/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86bXw6KT8pP1wiICtcbiAgICBcIig/OihcXFxcZHsxLDJ9KSg/OnMpPyk/XCIgK1xuICAgIFwiKD86XFxcXHMqVWhyKT9cIiArXG4gICAgXCIoPzpcXFxccyoobW9yZ2Vuc3x2b3JtaXR0YWdzfG5hY2htaXR0YWdzfGFiZW5kc3xuYWNodHN8YW1cXFxccysoPzpNb3JnZW58Vm9ybWl0dGFnfE5hY2htaXR0YWd8QWJlbmQpfGluXFxcXHMrZGVyXFxcXHMrTmFjaHQpKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBTRUNPTkRfUkVHX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXlxcXFxzKihcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YmlzKD86XFxcXHMrdW0pP3xcXFxcPylcXFxccypcIiArXG4gICAgXCIoXFxcXGR7MSwyfSkoPzpofDopP1wiICtcbiAgICBcIig/OihcXFxcZHsxLDJ9KSg/Om18Oik/KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzpzKT8pP1wiICtcbiAgICBcIig/OlxcXFxzKlVocik/XCIgK1xuICAgIFwiKD86XFxcXHMqKG1vcmdlbnN8dm9ybWl0dGFnc3xuYWNobWl0dGFnc3xhYmVuZHN8bmFjaHRzfGFtXFxcXHMrKD86TW9yZ2VufFZvcm1pdHRhZ3xOYWNobWl0dGFnfEFiZW5kKXxpblxcXFxzK2RlclxcXFxzK05hY2h0KSk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgSE9VUl9HUk9VUCA9IDI7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSAzO1xuY29uc3QgU0VDT05EX0dST1VQID0gNDtcbmNvbnN0IEFNX1BNX0hPVVJfR1JPVVAgPSA1O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIEZJUlNUX1JFR19QQVRURVJOO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCArIG1hdGNoWzFdLmxlbmd0aCwgbWF0Y2hbMF0uc3Vic3RyaW5nKG1hdGNoWzFdLmxlbmd0aCkpO1xuICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGR7NH0kLykpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydCA9IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5leHRyYWN0VGltZUNvbXBvbmVudChyZXN1bHQuc3RhcnQuY2xvbmUoKSwgbWF0Y2gpO1xuICAgICAgICBpZiAoIXJlc3VsdC5zdGFydCkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVtYWluaW5nVGV4dCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBjb25zdCBzZWNvbmRNYXRjaCA9IFNFQ09ORF9SRUdfUEFUVEVSTi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2gpIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQgPSBERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuZXh0cmFjdFRpbWVDb21wb25lbnQocmVzdWx0LnN0YXJ0LmNsb25lKCksIHNlY29uZE1hdGNoKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuZW5kKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gc2Vjb25kTWF0Y2hbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgc3RhdGljIGV4dHJhY3RUaW1lQ29tcG9uZW50KGV4dHJhY3RpbmdDb21wb25lbnRzLCBtYXRjaCkge1xuICAgICAgICBsZXQgaG91ciA9IDA7XG4gICAgICAgIGxldCBtaW51dGUgPSAwO1xuICAgICAgICBsZXQgbWVyaWRpZW0gPSBudWxsO1xuICAgICAgICBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWludXRlID49IDYwIHx8IGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtLm1hdGNoKC9tb3JnZW58dm9ybWl0dGFnLykpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtLm1hdGNoKC9uYWNobWl0dGFnfGFiZW5kLykpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFtcG0ubWF0Y2goL25hY2h0LykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtTRUNPTkRfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcInNlY29uZFwiLCBzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHRyYWN0aW5nQ29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKGJpcyg/OlxccyooPzphbXx6dW0pKT98LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHx1bXxhbXwsfC0pP1xcXFxzKiRcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oZGllc2VuKT9cXHMqKG1vcmdlbnx2b3JtaXR0YWd8bWl0dGFncz98bmFjaG1pdHRhZ3xhYmVuZHxuYWNodHxtaXR0ZXJuYWNodCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkUGF0dGVybiA9IG1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICByZXR1cm4gREVDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkUGF0dGVybik7XG4gICAgfVxuICAgIHN0YXRpYyBleHRyYWN0VGltZUNvbXBvbmVudHMoY29tcG9uZW50LCB0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgc3dpdGNoICh0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgICAgIGNhc2UgXCJtb3JnZW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInZvcm1pdHRhZ1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgOSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWl0dGFnXCI6XG4gICAgICAgICAgICBjYXNlIFwibWl0dGFnc1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5hY2htaXR0YWdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJhYmVuZFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5hY2h0XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWl0dGVybmFjaHRcIjpcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmdldChcImhvdXJcIikgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGREdXJhdGlvbkFzSW1wbGllZCh7IFwiZGF5XCI6IDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERUNhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IERFQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9ERUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChqZXR6dHxoZXV0ZXxtb3JnZW58w7xiZXJtb3JnZW58dWViZXJtb3JnZW58Z2VzdGVybnx2b3JnZXN0ZXJufGxldHp0ZVxcXFxzKm5hY2h0KWAgK1xuICAgIGAoPzpcXFxccyoobW9yZ2VufHZvcm1pdHRhZ3xtaXR0YWdzP3xuYWNobWl0dGFnfGFiZW5kfG5hY2h0fG1pdHRlcm5hY2h0KSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBUSU1FX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgIGNvbnN0IGRhdGVLZXl3b3JkID0gKG1hdGNoW0RBVEVfR1JPVVBdIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkID0gKG1hdGNoW1RJTUVfR1JPVVBdIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAoZGF0ZUtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqZXR6dFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJoZXV0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogMSB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLDvGJlcm1vcmdlblwiOlxuICAgICAgICAgICAgY2FzZSBcInVlYmVybW9yZ2VuXCI6XG4gICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IGFkZER1cmF0aW9uKHRhcmdldERhdGUsIHsgZGF5OiAyIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImdlc3Rlcm5cIjpcbiAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IC0xIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInZvcmdlc3Rlcm5cIjpcbiAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IC0yIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZUtleXdvcmQubWF0Y2goL2xldHp0ZVxccypuYWNodC8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXREYXRlLmdldEhvdXJzKCkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IC0xIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lS2V5d29yZCkge1xuICAgICAgICAgICAgY29tcG9uZW50ID0gREVDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzphbVxcXFxzKj8pP1wiICtcbiAgICBcIig/OmRlblxcXFxzKj8pP1wiICtcbiAgICBgKFswLTldezEsMn0pXFxcXC5gICtcbiAgICBgKD86XFxcXHMqKD86YmlzKD86XFxcXHMqKD86YW18enVtKSk/fFxcXFwtfFxcXFzigJN8XFxcXHMpXFxcXHMqKFswLTldezEsMn0pXFxcXC4/KT9cXFxccypgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86KD86LXwvfCw/XFxcXHMqKSgke1lFQVJfUEFUVEVSTn0oPyFbXlxcXFxzXVxcXFxkKSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBOVU1CRVJfUEFUVEVSTiwgcGFyc2VOdW1iZXJQYXR0ZXJuLCBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86XFxcXHMqKCg/Om7DpGNoc3RlfGtvbW1lbmRlfGZvbGdlbmRlfGxldHp0ZXx2ZXJnYW5nZW5lfHZvcmlnZXx2b3IoPzpoZXJ8YW4pZ2VnYW5nZW5lKSg/OnN8bnxtfHIpP3x2b3J8aW4pXFxcXHMqKT9gICtcbiAgICAgICAgICAgIGAoJHtOVU1CRVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKihuw6RjaHN0ZXxrb21tZW5kZXxmb2xnZW5kZXxsZXR6dGV8dmVyZ2FuZ2VuZXx2b3JpZ2V8dm9yKD86aGVyfGFuKWdlZ2FuZ2VuZSkoPzpzfG58bXxyKT8pP2AgK1xuICAgICAgICAgICAgYFxcXFxzKigke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbnVtID0gbWF0Y2hbMl0gPyBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMl0pIDogMTtcbiAgICAgICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzRdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBsZXQgdGltZVVuaXRzID0ge307XG4gICAgICAgIHRpbWVVbml0c1t1bml0XSA9IG51bTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbWF0Y2hbMV0gfHwgbWF0Y2hbM10gfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXIgPSBtb2RpZmllci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC92b3IvLnRlc3QobW9kaWZpZXIpIHx8IC9sZXR6dGUvLnRlc3QobW9kaWZpZXIpIHx8IC92ZXJnYW5nZW4vLnRlc3QobW9kaWZpZXIpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86aW58ZsO8cnx3w6RocmVuZClcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgSVNPRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9JU09Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBERVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IERFV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IERFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0RFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgREVNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9ERU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgREVDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgREVDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVDYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgREVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9ERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IERFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IERFVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9ERVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBERUNhc3VhbFRpbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgREVDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IERFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgSVNPRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgREVUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IERFTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgREVXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgREVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBERU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLCBuZXcgREVNZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAvKG1haW50ZW5hbnR8YXVqb3VyZCdodWl8ZGVtYWlufGhpZXJ8Y2V0dGVcXHMqbnVpdHxsYVxccyp2ZWlsbGUpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAobG93ZXJUZXh0KSB7XG4gICAgICAgICAgICBjYXNlIFwibWFpbnRlbmFudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiYXVqb3VyZCdodWlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaGllclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiZGVtYWluXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC9jZXR0ZVxccypudWl0LykpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobG93ZXJUZXh0Lm1hdGNoKC9sYVxccyp2ZWlsbGUvKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0RheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNEYXkuc2V0RGF0ZShwcmV2aW91c0RheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBwcmV2aW91c0RheSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gLyhjZXQ/KT9cXHMqKG1hdGlufHNvaXJ8YXByw6hzLW1pZGl8YXByZW18YSBtaWRpfMOgIG1pbnVpdCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHN1ZmZpeExvd2VyID0gbWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKHN1ZmZpeExvd2VyKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXByw6hzLW1pZGlcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhcHJlbVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTQpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic29pclwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWF0aW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYSBtaWRpXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLDoCBtaW51aXRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzpbw6BhXSlcXFxccyopP1wiO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfFvDoGFdfFxcXFw/KVxcXFxzKlwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaFswXS5tYXRjaCgvXlxccypcXGR7NH1cXHMqJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeXFxcXHMqKFR8w6B8YXxhdXx2ZXJzfGRlfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUk1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijDoHxhfGF1fC0pXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUk1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJkaW1hbmNoZVwiOiAwLFxuICAgIFwiZGltXCI6IDAsXG4gICAgXCJsdW5kaVwiOiAxLFxuICAgIFwibHVuXCI6IDEsXG4gICAgXCJtYXJkaVwiOiAyLFxuICAgIFwibWFyXCI6IDIsXG4gICAgXCJtZXJjcmVkaVwiOiAzLFxuICAgIFwibWVyXCI6IDMsXG4gICAgXCJqZXVkaVwiOiA0LFxuICAgIFwiamV1XCI6IDQsXG4gICAgXCJ2ZW5kcmVkaVwiOiA1LFxuICAgIFwidmVuXCI6IDUsXG4gICAgXCJzYW1lZGlcIjogNixcbiAgICBcInNhbVwiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwiamFudmllclwiOiAxLFxuICAgIFwiamFuXCI6IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgXCJmw6l2cmllclwiOiAyLFxuICAgIFwiZsOpdlwiOiAyLFxuICAgIFwiZsOpdi5cIjogMixcbiAgICBcImZldnJpZXJcIjogMixcbiAgICBcImZldlwiOiAyLFxuICAgIFwiZmV2LlwiOiAyLFxuICAgIFwibWFyc1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhdnJpbFwiOiA0LFxuICAgIFwiYXZyXCI6IDQsXG4gICAgXCJhdnIuXCI6IDQsXG4gICAgXCJtYWlcIjogNSxcbiAgICBcImp1aW5cIjogNixcbiAgICBcImp1blwiOiA2LFxuICAgIFwianVpbGxldFwiOiA3LFxuICAgIFwianVpbFwiOiA3LFxuICAgIFwianVsXCI6IDcsXG4gICAgXCJqdWwuXCI6IDcsXG4gICAgXCJhb8O7dFwiOiA4LFxuICAgIFwiYW91dFwiOiA4LFxuICAgIFwic2VwdGVtYnJlXCI6IDksXG4gICAgXCJzZXBcIjogOSxcbiAgICBcInNlcC5cIjogOSxcbiAgICBcInNlcHRcIjogOSxcbiAgICBcInNlcHQuXCI6IDksXG4gICAgXCJvY3RvYnJlXCI6IDEwLFxuICAgIFwib2N0XCI6IDEwLFxuICAgIFwib2N0LlwiOiAxMCxcbiAgICBcIm5vdmVtYnJlXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImTDqWNlbWJyZVwiOiAxMixcbiAgICBcImRlY2VtYnJlXCI6IDEyLFxuICAgIFwiZGVjXCI6IDEyLFxuICAgIFwiZGVjLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ1blwiOiAxLFxuICAgIFwiZGV1eFwiOiAyLFxuICAgIFwidHJvaXNcIjogMyxcbiAgICBcInF1YXRyZVwiOiA0LFxuICAgIFwiY2lucVwiOiA1LFxuICAgIFwic2l4XCI6IDYsXG4gICAgXCJzZXB0XCI6IDcsXG4gICAgXCJodWl0XCI6IDgsXG4gICAgXCJuZXVmXCI6IDksXG4gICAgXCJkaXhcIjogMTAsXG4gICAgXCJvbnplXCI6IDExLFxuICAgIFwiZG91emVcIjogMTIsXG4gICAgXCJ0cmVpemVcIjogMTMsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VjXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWNvbmRlXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWNvbmRlc1wiOiBcInNlY29uZFwiLFxuICAgIFwibWluXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW5zXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dGVcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0ZXNcIjogXCJtaW51dGVcIixcbiAgICBcImhcIjogXCJob3VyXCIsXG4gICAgXCJoclwiOiBcImhvdXJcIixcbiAgICBcImhyc1wiOiBcImhvdXJcIixcbiAgICBcImhldXJlXCI6IFwiaG91clwiLFxuICAgIFwiaGV1cmVzXCI6IFwiaG91clwiLFxuICAgIFwiam91clwiOiBcImRheVwiLFxuICAgIFwiam91cnNcIjogXCJkYXlcIixcbiAgICBcInNlbWFpbmVcIjogXCJ3ZWVrXCIsXG4gICAgXCJzZW1haW5lc1wiOiBcIndlZWtcIixcbiAgICBcIm1vaXNcIjogXCJtb250aFwiLFxuICAgIFwidHJpbWVzdHJlXCI6IFwicXVhcnRlclwiLFxuICAgIFwidHJpbWVzdHJlc1wiOiBcInF1YXJ0ZXJcIixcbiAgICBcImFuc1wiOiBcInllYXJcIixcbiAgICBcImFubsOpZVwiOiBcInllYXJcIixcbiAgICBcImFubsOpZXNcIjogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfHVuZT9cXFxcYnxxdWVscXVlcz98ZGVtaS0/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwidW5lXCIgfHwgbnVtID09PSBcInVuXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvcXVlbHF1ZXM/LykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvZGVtaS0/LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OlswLTldezEsMn0oPzplcik/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGxldCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIG51bSA9IG51bS5yZXBsYWNlKC8oPzplcikkL2ksIFwiXCIpO1xuICAgIHJldHVybiBwYXJzZUludChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IGAoPzpbMS05XVswLTldezAsM31cXFxccyooPzpBQ3xBRHxwXFxcXC5cXFxccypDKD86aHI/KT9cXFxcLlxcXFxzKm5cXFxcLil8WzEtMl1bMC05XXszfXxbNS05XVswLTldKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9BQy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvQkMvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoL0FEL2kudGVzdChtYXRjaCkgfHwgL0MvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL1teXFxkXSsvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGxldCB5ZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyID4gNTApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMTkwMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMjAwMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geWVhck51bWJlcjtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCw1fSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KVxcXFxzezAsNX1gO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgV0VFS0RBWV9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86KD86XFxcXCx8XFxcXCh8XFxcXO+8iClcXFxccyopP1wiICtcbiAgICBcIig/Oig/OmNlKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKGRlcm5pZXJ8cHJvY2hhaW4pXFxcXHMqKT9cIiArXG4gICAgXCIoPz1cXFxcV3xcXFxcZHwkKVwiLCBcImlcIik7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMTtcbmNvbnN0IFBPU1RGSVhfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGlmICh3ZWVrZGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdWZmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgc3VmZml4ID0gc3VmZml4IHx8IFwiXCI7XG4gICAgICAgIHN1ZmZpeCA9IHN1ZmZpeC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAoc3VmZml4ID09IFwiZGVybmllclwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN1ZmZpeCA9PSBcInByb2NoYWluXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5jb25zdCBGSVJTVF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXnxcXFxcc3xUKVwiICtcbiAgICBcIig/Oig/OlvDoGFdKVxcXFxzKik/XCIgK1xuICAgIFwiKFxcXFxkezEsMn0pKD86aHw6KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzptfDopPyk/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86c3w6KT8pP1wiICtcbiAgICBcIig/OlxcXFxzKihBXFxcXC5NXFxcXC58UFxcXFwuTVxcXFwufEFNP3xQTT8pKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBTRUNPTkRfUkVHX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXlxcXFxzKihcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8W8OgYV18XFxcXD8pXFxcXHMqXCIgK1xuICAgIFwiKFxcXFxkezEsMn0pKD86aHw6KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzptfDopPyk/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86c3w6KT8pP1wiICtcbiAgICBcIig/OlxcXFxzKihBXFxcXC5NXFxcXC58UFxcXFwuTVxcXFwufEFNP3xQTT8pKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBIT1VSX0dST1VQID0gMjtcbmNvbnN0IE1JTlVURV9HUk9VUCA9IDM7XG5jb25zdCBTRUNPTkRfR1JPVVAgPSA0O1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUCA9IDU7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUlNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIHBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gRklSU1RfUkVHX1BBVFRFUk47XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4ICsgbWF0Y2hbMV0ubGVuZ3RoLCBtYXRjaFswXS5zdWJzdHJpbmcobWF0Y2hbMV0ubGVuZ3RoKSk7XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXlxcZHs0fSQvKSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gRlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50KHJlc3VsdC5zdGFydC5jbG9uZSgpLCBtYXRjaCk7XG4gICAgICAgIGlmICghcmVzdWx0LnN0YXJ0KSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW1haW5pbmdUZXh0ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHNlY29uZE1hdGNoID0gU0VDT05EX1JFR19QQVRURVJOLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaCkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IEZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5leHRyYWN0VGltZUNvbXBvbmVudChyZXN1bHQuc3RhcnQuY2xvbmUoKSwgc2Vjb25kTWF0Y2gpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGV4dCArPSBzZWNvbmRNYXRjaFswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzdGF0aWMgZXh0cmFjdFRpbWVDb21wb25lbnQoZXh0cmFjdGluZ0NvbXBvbmVudHMsIG1hdGNoKSB7XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IG51bGw7XG4gICAgICAgIGhvdXIgPSBwYXJzZUludChtYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIGlmIChtYXRjaFtNSU5VVEVfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjAgfHwgaG91ciA+IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+PSAxMikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5QTTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPiAxMilcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGFtcG0gPSBtYXRjaFtBTV9QTV9IT1VSX0dST1VQXVswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKGFtcG0gPT0gXCJhXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtID09IFwicFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5QTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJtaW51dGVcIiwgbWludXRlKTtcbiAgICAgICAgaWYgKG1lcmlkaWVtICE9PSBudWxsKSB7XG4gICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgZXh0cmFjdGluZ0NvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBwYXJzZUludChtYXRjaFtTRUNPTkRfR1JPVVBdKTtcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gNjApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXh0cmFjdGluZ0NvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBPUkRJTkFMX05VTUJFUl9QQVRURVJOLCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpvblxcXFxzKj8pP1wiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgYCg/OlxcXFxzKig/OmF1fFxcXFwtfFxcXFzigJN8anVzcXUnYXU/fFxcXFxzKVxcXFxzKigke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KSk/YCArXG4gICAgYCg/Oi18L3xcXFxccyooPzpkZSk/XFxcXHMqKWAgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGAoPzooPzotfC98LD9cXFxccyopKCR7WUVBUl9QQVRURVJOfSg/IVteXFxcXHNdXFxcXGQpKSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgaWwgeSBhXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz0oPzpcXFxcV3wkKSlgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86ZGFuc3xlbnxwb3VyfHBlbmRhbnR8ZGUpXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTlVNQkVSX1BBVFRFUk4sIHBhcnNlTnVtYmVyUGF0dGVybiwgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCg/Omxlcz98bGF8bCd8ZHV8ZGVzPylcXFxccypgICtcbiAgICAgICAgICAgIGAoJHtOVU1CRVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKihwcm9jaGFpbmU/cz98ZGVybmlbZcOoXXJlP3M/fHBhc3Nbw6llXWU/cz98cHJbw6llXWNbw6llXWRlbnRzP3xzdWl2YW50ZT9zPykpP2AgK1xuICAgICAgICAgICAgYFxcXFxzKigke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKihwcm9jaGFpbmU/cz98ZGVybmlbZcOoXXJlP3M/fHBhc3Nbw6llXWU/cz98cHJbw6llXWNbw6llXWRlbnRzP3xzdWl2YW50ZT9zPykpP2AsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IG1hdGNoWzFdID8gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKSA6IDE7XG4gICAgICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFszXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICB0aW1lVW5pdHNbdW5pdF0gPSBudW07XG4gICAgICAgIGxldCBtb2RpZmllciA9IG1hdGNoWzJdIHx8IG1hdGNoWzRdIHx8IFwiXCI7XG4gICAgICAgIG1vZGlmaWVyID0gbW9kaWZpZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFtb2RpZmllcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvZGVybmlbZcOoXXJlP3M/Ly50ZXN0KG1vZGlmaWVyKSB8fCAvcGFzc1vDqWVdZT9zPy8udGVzdChtb2RpZmllcikgfHwgL3ByW8OpZV1jW8OpZV1kZW50cz8vLnRlc3QobW9kaWZpZXIpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IEZSQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IEZSQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRlJUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBGUk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0ZSTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBGUk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9GUk1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEZSV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IEZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IEZSTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBGUlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9GUlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRlJUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBGUkNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRlJDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBGUlRpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBGUldlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgRlJNZXJnZURhdGVUaW1lUmVmaW5lcigpLCBuZXcgRlJNZXJnZURhdGVSYW5nZVJlZmluZXIoKV0sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJleHBvcnQgY29uc3QgTlVNQkVSID0ge1xuICAgIFwi6Zu2XCI6IDAsXG4gICAgXCLjgIdcIjogMCxcbiAgICBcIuS4gFwiOiAxLFxuICAgIFwi5LqMXCI6IDIsXG4gICAgXCLkuIlcIjogMyxcbiAgICBcIuWbm1wiOiA0LFxuICAgIFwi5LqUXCI6IDUsXG4gICAgXCLlha1cIjogNixcbiAgICBcIuS4g1wiOiA3LFxuICAgIFwi5YWrXCI6IDgsXG4gICAgXCLkuZ1cIjogOSxcbiAgICBcIuWNgVwiOiAxMCxcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9PRkZTRVQgPSB7XG4gICAgXCLml6VcIjogMCxcbiAgICBcIuaciFwiOiAxLFxuICAgIFwi54GrXCI6IDIsXG4gICAgXCLmsLRcIjogMyxcbiAgICBcIuacqFwiOiA0LFxuICAgIFwi6YeRXCI6IDUsXG4gICAgXCLlnJ9cIjogNixcbn07XG5leHBvcnQgZnVuY3Rpb24gdG9IYW5rYWt1KHRleHQpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRleHQpXG4gICAgICAgIC5yZXBsYWNlKC9cXHUyMDE5L2csIFwiXFx1MDAyN1wiKVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAxRC9nLCBcIlxcdTAwMjJcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcdTMwMDAvZywgXCJcXHUwMDIwXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHVGRkU1L2csIFwiXFx1MDBBNVwiKVxuICAgICAgICAucmVwbGFjZSgvW1xcdUZGMDFcXHVGRjAzLVxcdUZGMDZcXHVGRjA4XFx1RkYwOVxcdUZGMEMtXFx1RkYxOVxcdUZGMUMtXFx1RkYxRlxcdUZGMjEtXFx1RkYzQlxcdUZGM0RcXHVGRjNGXFx1RkY0MS1cXHVGRjVCXFx1RkY1RFxcdUZGNUVdL2csIGFscGhhTnVtKTtcbn1cbmZ1bmN0aW9uIGFscGhhTnVtKHRva2VuKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodG9rZW4uY2hhckNvZGVBdCgwKSAtIDY1MjQ4KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBqYVN0cmluZ1RvTnVtYmVyKHRleHQpIHtcbiAgICBsZXQgbnVtYmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHRbaV07XG4gICAgICAgIGlmIChjaGFyID09PSBcIuWNgVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPT09IDAgPyBOVU1CRVJbY2hhcl0gOiBudW1iZXIgKiBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gTlVNQkVSW2NoYXJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgdG9IYW5rYWt1IH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvKD86KD86KFvlkIzku4rmnKxdKXwoKOaYreWSjHzlubPmiJB85Luk5ZKMKT8oWzAtOe+8kC3vvJldezEsNH185YWDKSkp5bm0XFxzKik/KFswLTnvvJAt77yZXXsxLDJ9KeaciFxccyooWzAtOe+8kC3vvJldezEsMn0p5pelL2k7XG5jb25zdCBTUEVDSUFMX1lFQVJfR1JPVVAgPSAxO1xuY29uc3QgVFlQSUNBTF9ZRUFSX0dST1VQID0gMjtcbmNvbnN0IEVSQV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDQ7XG5jb25zdCBNT05USF9HUk9VUCA9IDU7XG5jb25zdCBEQVlfR1JPVVAgPSA2O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBTdGFuZGFyZFBhcnNlciB7XG4gICAgcGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludCh0b0hhbmtha3UobWF0Y2hbTU9OVEhfR1JPVVBdKSk7XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaFtEQVlfR1JPVVBdKSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1hdGNoW1NQRUNJQUxfWUVBUl9HUk9VUF0gJiYgbWF0Y2hbU1BFQ0lBTF9ZRUFSX0dST1VQXS5tYXRjaChcIuWQjHzku4p85pysXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW1RZUElDQUxfWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1UZXh0ID0gbWF0Y2hbWUVBUl9OVU1CRVJfR1JPVVBdO1xuICAgICAgICAgICAgbGV0IHllYXIgPSB5ZWFyTnVtVGV4dCA9PSBcIuWFg1wiID8gMSA6IHBhcnNlSW50KHRvSGFua2FrdSh5ZWFyTnVtVGV4dCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoW0VSQV9HUk9VUF0gPT0gXCLku6TlkoxcIikge1xuICAgICAgICAgICAgICAgIHllYXIgKz0gMjAxODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoW0VSQV9HUk9VUF0gPT0gXCLlubPmiJBcIikge1xuICAgICAgICAgICAgICAgIHllYXIgKz0gMTk4ODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoW0VSQV9HUk9VUF0gPT0gXCLmmK3lkoxcIikge1xuICAgICAgICAgICAgICAgIHllYXIgKz0gMTkyNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBTdGFuZGFyZFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo44GL44KJfO+8jXzjg7x8LXzvvZ58filcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUpQTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IC/ku4rml6V844GN44KH44GGfOacrOaXpXzjgbvjgpPjgZjjgaR85pio5pelfOOBjeOBruOBhnzmmI7ml6V844GC44GX44GffOS7iuWknHzjgZPjgpPjgoR85LuK5aSVfOOBk+OCk+OChuOBhnzku4rmmal844GT44KT44Gw44KTfOS7iuacnXzjgZHjgZUvaTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVRleHRUb0thbmppKHRleHQpIHtcbiAgICBzd2l0Y2ggKHRleHQpIHtcbiAgICAgICAgY2FzZSBcIuOBjeOCh+OBhlwiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5LuK5pelXCI7XG4gICAgICAgIGNhc2UgXCLjgbvjgpPjgZjjgaRcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuacrOaXpVwiO1xuICAgICAgICBjYXNlIFwi44GN44Gu44GGXCI6XG4gICAgICAgICAgICByZXR1cm4gXCLmmKjml6VcIjtcbiAgICAgICAgY2FzZSBcIuOBguOBl+OBn1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5piO5pelXCI7XG4gICAgICAgIGNhc2UgXCLjgZPjgpPjgoRcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuS7iuWknFwiO1xuICAgICAgICBjYXNlIFwi44GT44KT44KG44GGXCI6XG4gICAgICAgICAgICByZXR1cm4gXCLku4rlpJVcIjtcbiAgICAgICAgY2FzZSBcIuOBk+OCk+OBsOOCk1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5LuK5pmpXCI7XG4gICAgICAgIGNhc2UgXCLjgZHjgZVcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuS7iuacnVwiO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBDYXN1YWxEYXRlUGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gbm9ybWFsaXplVGV4dFRvS2FuamkobWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKHRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCLmmKjml6VcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIuaYjuaXpVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbW9ycm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLmnKzml6VcIjpcbiAgICAgICAgICAgIGNhc2UgXCLku4rml6VcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQgPT0gXCLku4rlpJxcIiB8fCB0ZXh0ID09IFwi5LuK5aSVXCIgfHwgdGV4dCA9PSBcIuS7iuaZqVwiKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0ZXh0Lm1hdGNoKFwi5LuK5pydXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUpQQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX09GRlNFVCB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIigoPzxwcmVmaXg+5YmN44GufOasoeOBrnzku4rpgLEpKT8oPzx3ZWVrZGF5PlwiICsgT2JqZWN0LmtleXMoV0VFS0RBWV9PRkZTRVQpLmpvaW4oXCJ8XCIpICsgXCIpKD865puc5pelfOabnClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBXZWVrZGF5UGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLmdyb3Vwcy5wcmVmaXggfHwgXCJcIjtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKHByZWZpeC5tYXRjaCgv5YmN44GuLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJlZml4Lm1hdGNoKC/mrKHjga4vKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXgubWF0Y2goL+S7iumAsS8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyLCBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgdG9IYW5rYWt1IH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoWzAtOe+8kC3vvJldezR9W1xcXFwvfFxcXFzvvI9dKT9cIiArIFwiKFswLTHvvJAt77yRXXswLDF9WzAtOe+8kC3vvJldezF9KSg/OltcXFxcL3xcXFxc77yPXShbMC0z77yQLe+8k117MCwxfVswLTnvvJAt77yZXXsxfSkpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAyO1xuY29uc3QgREFZX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpQU2xhc2hEYXRlRm9ybWF0UGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoW01PTlRIX0dST1VQXSkpO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludCh0b0hhbmtha3UobWF0Y2hbREFZX0dST1VQXSkpO1xuICAgICAgICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXkgPCAxIHx8IGRheSA+IDMxKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIHJlc3VsdC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgcmF3WWVhck51bWJlciA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaFtZRUFSX0dST1VQXSkpO1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xuICAgICAgICAgICAgcmVzdWx0LmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudCwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBTbGFzaERhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgTlVNQkVSLCBqYVN0cmluZ1RvTnVtYmVyLCB0b0hhbmtha3UgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBGSVJTVF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpcIiArXG4gICAgXCIo5Y2I5YmNfOWNiOW+jHxBLk0ufFAuTS58QU18UE0pXCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yM44CBXSopXCIgK1xuICAgIFwiKD86KFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/OuaZgig/IemWkyl8OnzvvJopXCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihbMC0577yQLe+8mV0rfOWNinxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihbMC0577yQLe+8mV0rfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD8656eSKT8pXCIgK1xuICAgIFwiKD86XFxcXHMqKEEuTS58UC5NLnxBTT98UE0/KSk/XCIsIFwiaVwiKTtcbmNvbnN0IFNFQ09ORF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpeXFxcXHMqKD8644GL44KJfFxcXFwtfFxcXFzigJN8XFxcXO+8jXxcXFxcfnxcXFxc44CcKVxcXFxzKilcIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIo5Y2I5YmNfOWNiOW+jHxBLk0ufFAuTS58QU18UE0pXCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yM44CBXSopXCIgK1xuICAgIFwiKD86KFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/OuaZgnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFswLTnvvJAt77yZXSt85Y2KfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD865YiGfDp877yaKT9cIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUF8xID0gMTtcbmNvbnN0IEhPVVJfR1JPVVAgPSAyO1xuY29uc3QgTUlOVVRFX0dST1VQID0gMztcbmNvbnN0IFNFQ09ORF9HUk9VUCA9IDQ7XG5jb25zdCBBTV9QTV9IT1VSX0dST1VQXzIgPSA1O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBGSVJTVF9SRUdfUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaC5pbmRleCA+IDAgJiYgY29udGV4dC50ZXh0W21hdGNoLmluZGV4IC0gMV0ubWF0Y2goL1xcdy8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY3JlYXRlVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2hbSE9VUl9HUk9VUF0sIG1hdGNoW01JTlVURV9HUk9VUF0sIG1hdGNoW1NFQ09ORF9HUk9VUF0sIG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBfMV0gPz8gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF8yXSk7XG4gICAgICAgIGlmICghcmVzdWx0LnN0YXJ0KSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBtYXRjaCA9IFNFQ09ORF9SRUdfUEFUVEVSTi5leGVjKGNvbnRleHQudGV4dC5zdWJzdHJpbmcocmVzdWx0LmluZGV4ICsgcmVzdWx0LnRleHQubGVuZ3RoKSk7XG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnRleHQgPSByZXN1bHQudGV4dCArIG1hdGNoWzBdO1xuICAgICAgICByZXN1bHQuZW5kID0gY3JlYXRlVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2hbSE9VUl9HUk9VUF0sIG1hdGNoW01JTlVURV9HUk9VUF0sIG1hdGNoW1NFQ09ORF9HUk9VUF0sIG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBfMV0gPz8gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF8yXSk7XG4gICAgICAgIGlmICghcmVzdWx0LmVuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXN1bHQuZW5kLmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpICYmIHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIHJlc3VsdC5zdGFydC5nZXQoXCJtZXJpZGllbVwiKSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcIm1lcmlkaWVtXCIpID09PSBNZXJpZGllbS5QTSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSAtIDEyID4gcmVzdWx0LmVuZC5nZXQoXCJob3VyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5lbmQuZ2V0KFwiaG91clwiKSA8IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiaG91clwiLCByZXN1bHQuZW5kLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQuZW5kLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCByZXN1bHQuZW5kLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2hIb3VyLCBtYXRjaE1pbnV0ZSwgbWF0Y2hTZWNvbmQsIG1hdGNoQW1QbSkge1xuICAgIGxldCBob3VyID0gMDtcbiAgICBsZXQgbWVyaWRpZW0gPSAtMTtcbiAgICBsZXQgdGFyZ2V0Q29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICBob3VyID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoSG91cikpO1xuICAgIGlmIChpc05hTihob3VyKSkge1xuICAgICAgICBob3VyID0gamFTdHJpbmdUb051bWJlcihtYXRjaEhvdXIpO1xuICAgIH1cbiAgICBpZiAoaG91ciA+IDI0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAobWF0Y2hNaW51dGUpIHtcbiAgICAgICAgbGV0IG1pbnV0ZTtcbiAgICAgICAgaWYgKG1hdGNoTWludXRlID09PSBcIuWNilwiKSB7XG4gICAgICAgICAgICBtaW51dGUgPSAzMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaE1pbnV0ZSkpO1xuICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBqYVN0cmluZ1RvTnVtYmVyKG1hdGNoTWludXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWludXRlID49IDYwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgfVxuICAgIGlmIChtYXRjaFNlY29uZCkge1xuICAgICAgICBsZXQgc2Vjb25kID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoU2Vjb25kKSk7XG4gICAgICAgIGlmIChpc05hTihzZWNvbmQpKSB7XG4gICAgICAgICAgICBzZWNvbmQgPSBqYVN0cmluZ1RvTnVtYmVyKG1hdGNoU2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwic2Vjb25kXCIsIHNlY29uZCk7XG4gICAgfVxuICAgIGlmIChtYXRjaEFtUG0pIHtcbiAgICAgICAgaWYgKGhvdXIgPiAxMikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgQU1QTVN0cmluZyA9IG1hdGNoQW1QbTtcbiAgICAgICAgaWYgKEFNUE1TdHJpbmcgPT09IFwi5Y2I5YmNXCIgfHwgQU1QTVN0cmluZ1swXS50b0xvd2VyQ2FzZSgpID09PSBcImFcIikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMilcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBTVBNU3RyaW5nID09PSBcIuWNiOW+jFwiIHx8IEFNUE1TdHJpbmdbMF0udG9Mb3dlckNhc2UoKSA9PT0gXCJwXCIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBob3VyKTtcbiAgICBpZiAobWVyaWRpZW0gPj0gMCkge1xuICAgICAgICB0YXJnZXRDb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIHRhcmdldENvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRDb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRDb21wb25lbnRzO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpQTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijjga4pP1xccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCBuZXdSZXN1bHQgPSBjdXJyZW50UmVzdWx0LmNsb25lKCk7XG4gICAgICAgIG5ld1Jlc3VsdC50ZXh0ID0gY3VycmVudFJlc3VsdC50ZXh0ICsgdGV4dEJldHdlZW4gKyBuZXh0UmVzdWx0LnRleHQ7XG4gICAgICAgIG5ld1Jlc3VsdC5zdGFydC5hc3NpZ24oXCJ3ZWVrZGF5XCIsIG5leHRSZXN1bHQuc3RhcnQuZ2V0KFwid2Vla2RheVwiKSk7XG4gICAgICAgIGlmIChuZXdSZXN1bHQuZW5kKSB7XG4gICAgICAgICAgICBuZXdSZXN1bHQuZW5kLmFzc2lnbihcIndlZWtkYXlcIiwgbmV4dFJlc3VsdC5zdGFydC5nZXQoXCJ3ZWVrZGF5XCIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3UmVzdWx0O1xuICAgIH1cbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsRGF0ZVRoZW5XZWVrZGF5ID0gY3VycmVudFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJkYXlcIikgJiZcbiAgICAgICAgICAgIG5leHRSZXN1bHQuc3RhcnQuaXNPbmx5V2Vla2RheUNvbXBvbmVudCgpICYmXG4gICAgICAgICAgICAhbmV4dFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJob3VyXCIpO1xuICAgICAgICByZXR1cm4gbm9ybWFsRGF0ZVRoZW5XZWVrZGF5ICYmIHRleHRCZXR3ZWVuLm1hdGNoKC9eWyzjgIHjga5dP1xccyokLykgIT09IG51bGw7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfT0ZGU0VUIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86XFxcXCh8XFxcXO+8iCkoPzx3ZWVrZGF5PlwiICsgT2JqZWN0LmtleXMoV0VFS0RBWV9PRkZTRVQpLmpvaW4oXCJ8XCIpICsgXCIpKD86XFxcXCl8XFxcXO+8iSlcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBXZWVrZGF5V2l0aFBhcmVudGhlc2VzUGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1KUFdlZWtkYXlXaXRoUGFyZW50aGVzZXNQYXJzZXIuanMubWFwIiwiaW1wb3J0IEpQU3RhbmRhcmRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUFN0YW5kYXJkUGFyc2VyLmpzXCI7XG5pbXBvcnQgSlBNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSlBNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBKUENhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBKUFdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBKUFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0pQU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgSlBUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0pQVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBKUE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0pQTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBKUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgSlBXZWVrZGF5V2l0aFBhcmVudGhlc2VzUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSlBXZWVrZGF5V2l0aFBhcmVudGhlc2VzUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBKUENhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uKHtcbiAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgbmV3IEpQU3RhbmRhcmRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUFdlZWtkYXlXaXRoUGFyZW50aGVzZXNQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUFNsYXNoRGF0ZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEpQVGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtcbiAgICAgICAgICAgIG5ldyBKUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUE1lcmdlRGF0ZVRpbWVSZWZpbmVyKCksXG4gICAgICAgICAgICBuZXcgSlBNZXJnZURhdGVSYW5nZVJlZmluZXIoKSxcbiAgICAgICAgXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzID0gY29uZmlndXJhdGlvbi5yZWZpbmVycy5maWx0ZXIoKHJlZmluZXIpID0+ICEocmVmaW5lciBpbnN0YW5jZW9mIE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIpKTtcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJkb21pbmdvXCI6IDAsXG4gICAgXCJkb21cIjogMCxcbiAgICBcInNlZ3VuZGFcIjogMSxcbiAgICBcInNlZ3VuZGEtZmVpcmFcIjogMSxcbiAgICBcInNlZ1wiOiAxLFxuICAgIFwidGVyw6dhXCI6IDIsXG4gICAgXCJ0ZXLDp2EtZmVpcmFcIjogMixcbiAgICBcInRlclwiOiAyLFxuICAgIFwicXVhcnRhXCI6IDMsXG4gICAgXCJxdWFydGEtZmVpcmFcIjogMyxcbiAgICBcInF1YVwiOiAzLFxuICAgIFwicXVpbnRhXCI6IDQsXG4gICAgXCJxdWludGEtZmVpcmFcIjogNCxcbiAgICBcInF1aVwiOiA0LFxuICAgIFwic2V4dGFcIjogNSxcbiAgICBcInNleHRhLWZlaXJhXCI6IDUsXG4gICAgXCJzZXhcIjogNSxcbiAgICBcInPDoWJhZG9cIjogNixcbiAgICBcInNhYmFkb1wiOiA2LFxuICAgIFwic2FiXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJqYW5laXJvXCI6IDEsXG4gICAgXCJqYW5cIjogMSxcbiAgICBcImphbi5cIjogMSxcbiAgICBcImZldmVyZWlyb1wiOiAyLFxuICAgIFwiZmV2XCI6IDIsXG4gICAgXCJmZXYuXCI6IDIsXG4gICAgXCJtYXLDp29cIjogMyxcbiAgICBcIm1hclwiOiAzLFxuICAgIFwibWFyLlwiOiAzLFxuICAgIFwiYWJyaWxcIjogNCxcbiAgICBcImFiclwiOiA0LFxuICAgIFwiYWJyLlwiOiA0LFxuICAgIFwibWFpb1wiOiA1LFxuICAgIFwibWFpXCI6IDUsXG4gICAgXCJtYWkuXCI6IDUsXG4gICAgXCJqdW5ob1wiOiA2LFxuICAgIFwianVuXCI6IDYsXG4gICAgXCJqdW4uXCI6IDYsXG4gICAgXCJqdWxob1wiOiA3LFxuICAgIFwianVsXCI6IDcsXG4gICAgXCJqdWwuXCI6IDcsXG4gICAgXCJhZ29zdG9cIjogOCxcbiAgICBcImFnb1wiOiA4LFxuICAgIFwiYWdvLlwiOiA4LFxuICAgIFwic2V0ZW1icm9cIjogOSxcbiAgICBcInNldFwiOiA5LFxuICAgIFwic2V0LlwiOiA5LFxuICAgIFwib3V0dWJyb1wiOiAxMCxcbiAgICBcIm91dFwiOiAxMCxcbiAgICBcIm91dC5cIjogMTAsXG4gICAgXCJub3ZlbWJyb1wiOiAxMSxcbiAgICBcIm5vdlwiOiAxMSxcbiAgICBcIm5vdi5cIjogMTEsXG4gICAgXCJkZXplbWJyb1wiOiAxMixcbiAgICBcImRlelwiOiAxMixcbiAgICBcImRlei5cIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IFwiWzAtOV17MSw0fSg/IVteXFxcXHNdXFxcXGQpKD86XFxcXHMqW2F8ZF1cXFxcLj9cXFxccypjXFxcXC4/fFxcXFxzKmFcXFxcLj9cXFxccypkXFxcXC4/KT9cIjtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXIobWF0Y2gpIHtcbiAgICBpZiAobWF0Y2gubWF0Y2goL15bMC05XXsxLDR9JC8pKSB7XG4gICAgICAgIGxldCB5ZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgICAgICBpZiAoeWVhck51bWJlciA8IDEwMCkge1xuICAgICAgICAgICAgaWYgKHllYXJOdW1iZXIgPiA1MCkge1xuICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMTkwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMjAwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhck51bWJlcjtcbiAgICB9XG4gICAgaWYgKG1hdGNoLm1hdGNoKC9hXFwuP1xccypjXFwuPy9pKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL2FcXC4/XFxzKmNcXC4/L2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gLXBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86KGVzdGV8ZXN0YXxwYXNzYWRvfHByW2/Ds114aW1vKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKGVzdGV8ZXN0YXxwYXNzYWRvfHByW8Ozb114aW1vKVxcXFxzKnNlbWFuYSk/XCIgK1xuICAgIFwiKD89XFxcXFd8XFxcXGR8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKHdlZWtkYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbm9ybSA9IHByZWZpeCB8fCBwb3N0Zml4IHx8IFwiXCI7XG4gICAgICAgIG5vcm0gPSBub3JtLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChub3JtID09IFwicGFzc2Fkb1wiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vcm0gPT0gXCJwcsOzeGltb1wiIHx8IG5vcm0gPT0gXCJwcm94aW1vXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9ybSA9PSBcImVzdGVcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVFdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVFRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86YW8/fMOgcz98ZGFzfGRhfGRlfGRvKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YSg/Om8pP3xcXFxcPylcXFxccypcIjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooPzosfMOgKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKD86LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pKD86wrp8wqp8wrApP2AgK1xuICAgIFwiKD86XFxcXHMqKD86ZGVzZGV8ZGV8XFxcXC18XFxcXOKAk3xhbz98XFxcXHMpXFxcXHMqKFswLTldezEsMn0pKD86wrp8wqp8wrApPyk/XFxcXHMqKD86ZGUpP1xcXFxzKlwiICtcbiAgICBgKD86LXwvfFxcXFxzKig/OmRlfCwpP1xcXFxzKilgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86XFxcXHMqKD86ZGV8LCk/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVENhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oYWdvcmF8aG9qZXxhbWFuaGF8YW1hbmjDo3xvbnRlbSkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhZ29yYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaG9qZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJhbWFuaGFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhbWFuaMOjXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm9udGVtXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIC8oPzplc3RhXFxzKik/KG1hbmhhfG1hbmjDo3x0YXJkZXxtZWlhLW5vaXRlfG1laW8tZGlhfG5vaXRlKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0YXJkZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub2l0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2V2ZW5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWFuaGFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJtYW5ow6NcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL21vcm5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVpYS1ub2l0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbWlkbmlnaHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVpby1kaWFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9ub29uXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UFRDYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBQVFdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9QVFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBQVFRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUFRUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFBUTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvUFRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IFBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1BUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgUFRNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9QVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFBUQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1BUQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFBUQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1BUQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgUFRDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IFBUQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgUFRXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgUFRUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFBUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFBUTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IFBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKHRvdHwtKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXlxcXFxzKihvbXxuYXx2b29yfGluIGRlfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gLyhudXx2YW5kYWFnfG1vcmdlbnxtb3JnZW5kfGdpc3RlcmVuKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGxvd2VyVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcIm51XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJ2YW5kYWFnXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgY2FzZSBcIm1vcmdlbmRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiZ2lzdGVyZW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBEQVlfR1JPVVAgPSAxO1xuY29uc3QgTU9NRU5UX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiAvKGRlemUpP1xccyoobmFtaWRkYWd8YXZvbmR8bWlkZGVybmFjaHR8b2NodGVuZHxtaWRkYWd8J3MgbWlkZGFnc3wncyBhdm9uZHN8J3Mgb2NodGVuZHMpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBdID09PSBcImRlemVcIikge1xuICAgICAgICAgICAgY29tcG9uZW50LmFzc2lnbihcImRheVwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtb250aFwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50LmFzc2lnbihcInllYXJcIiwgY29udGV4dC5yZWZEYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAobWF0Y2hbTU9NRU5UX0dST1VQXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwibmFtaWRkYWdcIjpcbiAgICAgICAgICAgIGNhc2UgXCIncyBuYW1pZGRhZ3NcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9hZnRlcm5vb25cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYXZvbmRcIjpcbiAgICAgICAgICAgIGNhc2UgXCIncyBhdm9uZHMnXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMjApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvZXZlbmluZ1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkZXJuYWNodFwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbWlkbmlnaHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwib2NodGVuZFwiOlxuICAgICAgICAgICAgY2FzZSBcIidzIG9jaHRlbmRzXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9tb3JuaW5nXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcIidzIG1pZGRhZ3NcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9ub29uXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxDYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgem9uZGFnOiAwLFxuICAgIHpvbjogMCxcbiAgICBcInpvbi5cIjogMCxcbiAgICB6bzogMCxcbiAgICBcInpvLlwiOiAwLFxuICAgIG1hYW5kYWc6IDEsXG4gICAgbWE6IDEsXG4gICAgXCJtYS5cIjogMSxcbiAgICBkaW5zZGFnOiAyLFxuICAgIGRpbjogMixcbiAgICBcImRpbi5cIjogMixcbiAgICBkaTogMixcbiAgICBcImRpLlwiOiAyLFxuICAgIHdvZW5zZGFnOiAzLFxuICAgIHdvZTogMyxcbiAgICBcIndvZS5cIjogMyxcbiAgICB3bzogMyxcbiAgICBcIndvLlwiOiAzLFxuICAgIGRvbmRlcmRhZzogNCxcbiAgICBkb25kOiA0LFxuICAgIFwiZG9uZC5cIjogNCxcbiAgICBkbzogNCxcbiAgICBcImRvLlwiOiA0LFxuICAgIHZyaWpkYWc6IDUsXG4gICAgdnJpajogNSxcbiAgICBcInZyaWouXCI6IDUsXG4gICAgdnI6IDUsXG4gICAgXCJ2ci5cIjogNSxcbiAgICB6YXRlcmRhZzogNixcbiAgICB6YXQ6IDYsXG4gICAgXCJ6YXQuXCI6IDYsXG4gICAgXCJ6YVwiOiA2LFxuICAgIFwiemEuXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgamFudWFyaTogMSxcbiAgICBqYW46IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgZmVicnVhcmk6IDIsXG4gICAgZmViOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIG1hYXJ0OiAzLFxuICAgIG1hcjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBtcnQ6IDMsXG4gICAgXCJtcnQuXCI6IDMsXG4gICAgYXByaWw6IDQsXG4gICAgYXByOiA0LFxuICAgIFwiYXByLlwiOiA0LFxuICAgIG1laTogNSxcbiAgICBqdW5pOiA2LFxuICAgIGp1bjogNixcbiAgICBcImp1bi5cIjogNixcbiAgICBqdWxpOiA3LFxuICAgIGp1bDogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBhdWd1c3R1czogOCxcbiAgICBhdWc6IDgsXG4gICAgXCJhdWcuXCI6IDgsXG4gICAgc2VwdGVtYmVyOiA5LFxuICAgIHNlcDogOSxcbiAgICBcInNlcC5cIjogOSxcbiAgICBzZXB0OiA5LFxuICAgIFwic2VwdC5cIjogOSxcbiAgICBva3RvYmVyOiAxMCxcbiAgICBva3Q6IDEwLFxuICAgIFwib2t0LlwiOiAxMCxcbiAgICBub3ZlbWJlcjogMTEsXG4gICAgbm92OiAxMSxcbiAgICBcIm5vdi5cIjogMTEsXG4gICAgZGVjZW1iZXI6IDEyLFxuICAgIGRlYzogMTIsXG4gICAgXCJkZWMuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBlZW46IDEsXG4gICAgdHdlZTogMixcbiAgICBkcmllOiAzLFxuICAgIHZpZXI6IDQsXG4gICAgdmlqZjogNSxcbiAgICB6ZXM6IDYsXG4gICAgemV2ZW46IDcsXG4gICAgYWNodDogOCxcbiAgICBuZWdlbjogOSxcbiAgICB0aWVuOiAxMCxcbiAgICBlbGY6IDExLFxuICAgIHR3YWFsZjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IE9SRElOQUxfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIGVlcnN0ZTogMSxcbiAgICB0d2VlZGU6IDIsXG4gICAgZGVyZGU6IDMsXG4gICAgdmllcmRlOiA0LFxuICAgIHZpamZkZTogNSxcbiAgICB6ZXNkZTogNixcbiAgICB6ZXZlbmRlOiA3LFxuICAgIGFjaHRzdGU6IDgsXG4gICAgbmVnZW5kZTogOSxcbiAgICB0aWVuZGU6IDEwLFxuICAgIGVsZmRlOiAxMSxcbiAgICB0d2FhbGZkZTogMTIsXG4gICAgZGVydGllbmRlOiAxMyxcbiAgICB2ZWVydGllbmRlOiAxNCxcbiAgICB2aWpmdGllbmRlOiAxNSxcbiAgICB6ZXN0aWVuZGU6IDE2LFxuICAgIHpldmVudGllbmRlOiAxNyxcbiAgICBhY2h0dGllbmRlOiAxOCxcbiAgICBuZWdlbnRpZW5kZTogMTksXG4gICAgdHdpbnRpZ3N0ZTogMjAsXG4gICAgXCJlZW5lbnR3aW50aWdzdGVcIjogMjEsXG4gICAgXCJ0d2Vlw6tudHdpbnRpZ3N0ZVwiOiAyMixcbiAgICBcImRyaWVlbnR3aW50aWdzdGVcIjogMjMsXG4gICAgXCJ2aWVyZW50d2ludGlnc3RlXCI6IDI0LFxuICAgIFwidmlqZmVudHdpbnRpZ3N0ZVwiOiAyNSxcbiAgICBcInplc2VudHdpbnRpZ3N0ZVwiOiAyNixcbiAgICBcInpldmVuZW50d2ludGlnc3RlXCI6IDI3LFxuICAgIFwiYWNodGVudHdpbnRpZ1wiOiAyOCxcbiAgICBcIm5lZ2VuZW50d2ludGlnXCI6IDI5LFxuICAgIFwiZGVydGlnc3RlXCI6IDMwLFxuICAgIFwiZWVuZW5kZXJ0aWdzdGVcIjogMzEsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIHNlYzogXCJzZWNvbmRcIixcbiAgICBzZWNvbmQ6IFwic2Vjb25kXCIsXG4gICAgc2Vjb25kZW46IFwic2Vjb25kXCIsXG4gICAgbWluOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnM6IFwibWludXRlXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV1dDogXCJtaW51dGVcIixcbiAgICBtaW51dGVuOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV1dGplOiBcIm1pbnV0ZVwiLFxuICAgIGg6IFwiaG91clwiLFxuICAgIGhyOiBcImhvdXJcIixcbiAgICBocnM6IFwiaG91clwiLFxuICAgIHV1cjogXCJob3VyXCIsXG4gICAgdTogXCJob3VyXCIsXG4gICAgdXJlbjogXCJob3VyXCIsXG4gICAgZGFnOiBcImRheVwiLFxuICAgIGRhZ2VuOiBcImRheVwiLFxuICAgIHdlZWs6IFwid2Vla1wiLFxuICAgIHdla2VuOiBcIndlZWtcIixcbiAgICBtYWFuZDogXCJtb250aFwiLFxuICAgIG1hYW5kZW46IFwibW9udGhcIixcbiAgICBqYWFyOiBcInllYXJcIixcbiAgICBqcjogXCJ5ZWFyXCIsXG4gICAgamFyZW46IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBOVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSl9fFswLTldK3xbMC05XStbXFxcXC4sXVswLTldK3xoYWx2ZT98aGFsZnxwYWFyKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwicGFhclwiKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwiaGFsZlwiIHx8IG51bS5tYXRjaCgvaGFsdmU/LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtLnJlcGxhY2UoXCIsXCIsIFwiLlwiKSk7XG59XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihPUkRJTkFMX1dPUkRfRElDVElPTkFSWSl9fFswLTldezEsMn0oPzpzdGV8ZGUpPylgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBsZXQgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBudW0gPSBudW0ucmVwbGFjZSgvKD86c3RlfGRlKSQvaSwgXCJcIik7XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfVxcXFxzKig/OnZvb3IgQ2hyaXN0dXN8bmEgQ2hyaXN0dXMpfFsxLTJdWzAtOV17M318WzUtOV1bMC05XSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmICgvdm9vciBDaHJpc3R1cy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvdm9vciBDaHJpc3R1cy9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGlmICgvbmEgQ2hyaXN0dXMvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL25hIENocmlzdHVzL2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBjb25zdCByYXdZZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihyYXdZZWFyTnVtYmVyKTtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCw1fSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KVxcXFxzezAsNX1gO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OmJpbm5lbnxpbilcXFxccyopP2AsIFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTik7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAoPzpiaW5uZW58aW58YmlubmVuIGRlfHZvb3IpXFxcXHMqYCArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBgKD89XFxcXFd8JClgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi8uLi9ubC9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzpvcFxcXFxzKj8pP1wiICtcbiAgICBcIig/OihkZXplfHZvcmlnZXx2b2xnZW5kZSlcXFxccyooPzp3ZWVrXFxcXHMqKT8pP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcInZvcmlnZVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcInZvbGdlbmRlXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwiZGV6ZVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86b25cXFxccyo/KT9cIiArXG4gICAgYCgke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KWAgK1xuICAgIFwiKD86XFxcXHMqXCIgK1xuICAgIFwiKD86dG90fFxcXFwtfFxcXFzigJN8dW50aWx8dGhyb3VnaHx0aWxsfFxcXFxzKVxcXFxzKlwiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/Oi18L3xcXFxccyooPzpvZik/XFxcXHMqKVwiICtcbiAgICBcIihcIiArXG4gICAgbWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpICtcbiAgICBcIilcIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIoPzotfC98LD9cXFxccyopXCIgK1xuICAgIGAoJHtZRUFSX1BBVFRFUk59KD8hW15cXFxcc11cXFxcZCkpYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY29tcG9uZW50cztcbiAgICAgICAgcmVzdWx0LmVuZCA9IGNvbXBvbmVudHMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGBcXFxccypgICtcbiAgICBgKD86YCArXG4gICAgYFssLV0/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSk/YCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVteXFxcXHNcXFxcd118XFxcXHMrW14wLTldfFxcXFxzKyR8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDE7XG5jb25zdCBZRUFSX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MTW9udGhOYW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aE5hbWUgPSBtYXRjaFtNT05USF9OQU1FX0dST1VQXTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21vbnRoTmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCAxLCBtb250aCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTE1vbnRoTmFtZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFswLTldfDBbMS05XXwxWzAxMl0pLyhbMC05XXs0fSlcIiArIFwiXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxTbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCkuaW1wbHkoXCJkYXlcIiwgMSkuYXNzaWduKFwibW9udGhcIiwgbW9udGgpLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxTbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/Oig/Om9tKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8b218XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/OlxcXFxzKig/OnV1cikpPyg/IS8pKD89XFxcXFd8JClcIjtcbiAgICB9XG4gICAgZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15cXHMqXFxkezR9XFxzKiQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoWzAtOV17NH0pW1xcXFwuXFxcXC9cXFxcc11gICtcbiAgICBgKD86KCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSl8KFswLTldezEsMn0pKVtcXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYChbMC05XXsxLDJ9KWAgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgWUVBUl9OVU1CRVJfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OVU1CRVJfR1JPVVAgPSAzO1xuY29uc3QgREFURV9OVU1CRVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gbWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXVxuICAgICAgICAgICAgPyBwYXJzZUludChtYXRjaFtNT05USF9OVU1CRVJfR1JPVVBdKVxuICAgICAgICAgICAgOiBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX05VTUJFUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFtEQVRFX05VTUJFUl9HUk9VUF0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF5OiBkYXksXG4gICAgICAgICAgICBtb250aDogbW9udGgsXG4gICAgICAgICAgICB5ZWFyOiB5ZWFyLFxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IFRJTUVfT0ZfREFZX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MQ2FzdWFsRGF0ZVRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oZ2lzdGVyZW58bW9yZ2VufHZhbikob2NodGVuZHxtaWRkYWd8bmFtaWRkYWd8YXZvbmR8bmFjaHQpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXRlVGV4dCA9IG1hdGNoW0RBVEVfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWVUZXh0ID0gbWF0Y2hbVElNRV9PRl9EQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgc3dpdGNoIChkYXRlVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcImdpc3RlcmVuXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNEYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNEYXkuc2V0RGF0ZShwcmV2aW91c0RheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHByZXZpb3VzRGF5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ2YW5cIjpcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aW1lVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcIm9jaHRlbmRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkYWdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibmFtaWRkYWdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYXZvbmRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTENhc3VhbERhdGVUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKGRpdHxkZXplfHZvcmlnfGFmZ2Vsb3BlbnwoPzphYW4pP2tvbWVuZHxvdmVyfFxcXFwrfC0pZT9cXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUFJFRklYX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgVElNRV9VTklUX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbVElNRV9VTklUX1dPUkRfR1JPVVBdKTtcbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ2b3JpZ1wiOlxuICAgICAgICAgICAgY2FzZSBcImFmZ2Vsb3BlblwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoZGl0fGRlemV8KD86YWFuKT9rb21lbmR8dm9sZ2VuZHxhZmdlbG9wZW58dm9yaWcpZT9cXFxccyooJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSkoPz1cXFxccyopYCArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBNT0RJRklFUl9XT1JEX0dST1VQID0gMTtcbmNvbnN0IFJFTEFUSVZFX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwidm9sZ2VuZFwiIHx8IG1vZGlmaWVyID09IFwia29tZW5kXCIgfHwgbW9kaWZpZXIgPT0gXCJhYW5rb21lbmRcIikge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwiYWZnZWxvcGVuXCIgfHwgbW9kaWZpZXIgPT0gXCJ2b3JpZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh1bml0V29yZC5tYXRjaCgvd2Vlay9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL21hYW5kL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0V29yZC5tYXRjaCgvamFhci9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNb250aCgwKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIoPzpnZWxlZGVufHZvb3J8ZWVyZGVyKSg/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBTVFJJQ1RfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJcIiArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBcImdlbGVkZW4oPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpY3RNb2RlID8gU1RSSUNUX1BBVFRFUk4gOiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGNvbnN0IG91dHB1dFRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBvdXRwdXRUaW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIlwiICsgXCIoXCIgKyBUSU1FX1VOSVRTX1BBVFRFUk4gKyBcIilcIiArIFwiKGxhdGVyfG5hfHZhbmFmIG51fHZvb3J0YWFufHZvb3J1aXR8dWl0KVwiICsgXCIoPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIobGF0ZXJ8dmFuYWYgbnUpXCIgKyBcIig/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBHUk9VUF9OVU1fVElNRVVOSVRTID0gMTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpY3RNb2RlID8gU1RSSUNUX1BBVFRFUk4gOiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZnJhZ21lbnRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFtHUk9VUF9OVU1fVElNRVVOSVRTXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIGZyYWdtZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgTkxNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvTkxNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBOTE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL05MTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBOTENhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBOTENhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTENhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IE5MTW9udGhOYW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxNb250aE5hbWVQYXJzZXIuanNcIjtcbmltcG9ydCBOTFNsYXNoTW9udGhGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTFNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBOTFRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IE5MQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIuanNcIjtcbmltcG9ydCBOTENhc3VhbERhdGVUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxDYXN1YWxEYXRlVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL05MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBOTFRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL05MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgTkxDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBOTENhc3VhbERhdGVUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgTkxNb250aE5hbWVQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBOTFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBOTENhc3VhbFllYXJNb250aERheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MU2xhc2hNb250aEZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MVGltZUV4cHJlc3Npb25QYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgTkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBOTFRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IE5MTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IE5MTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiZXhwb3J0IGNvbnN0IE5VTUJFUiA9IHtcbiAgICBcIumbtlwiOiAwLFxuICAgIFwi44CHXCI6IDAsXG4gICAgXCLkuIBcIjogMSxcbiAgICBcIuS6jFwiOiAyLFxuICAgIFwi5LikXCI6IDIsXG4gICAgXCLkuIlcIjogMyxcbiAgICBcIuWbm1wiOiA0LFxuICAgIFwi5LqUXCI6IDUsXG4gICAgXCLlha1cIjogNixcbiAgICBcIuS4g1wiOiA3LFxuICAgIFwi5YWrXCI6IDgsXG4gICAgXCLkuZ1cIjogOSxcbiAgICBcIuWNgVwiOiAxMCxcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9PRkZTRVQgPSB7XG4gICAgXCLlpKlcIjogMCxcbiAgICBcIuaXpVwiOiAwLFxuICAgIFwi5LiAXCI6IDEsXG4gICAgXCLkuoxcIjogMixcbiAgICBcIuS4iVwiOiAzLFxuICAgIFwi5ZubXCI6IDQsXG4gICAgXCLkupRcIjogNSxcbiAgICBcIuWFrVwiOiA2LFxufTtcbmV4cG9ydCBmdW5jdGlvbiB6aFN0cmluZ1RvTnVtYmVyKHRleHQpIHtcbiAgICBsZXQgbnVtYmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHRbaV07XG4gICAgICAgIGlmIChjaGFyID09PSBcIuWNgVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPT09IDAgPyBOVU1CRVJbY2hhcl0gOiBudW1iZXIgKiBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gTlVNQkVSW2NoYXJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gemhTdHJpbmdUb1llYXIodGV4dCkge1xuICAgIGxldCBzdHJpbmcgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGFyID0gdGV4dFtpXTtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nICsgTlVNQkVSW2NoYXJdO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciwgemhTdHJpbmdUb1llYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBZRUFSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMjtcbmNvbnN0IERBWV9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsyLDR9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgICAgICAgICBcIl17NH18XCIgK1xuICAgICAgICAgICAgXCJbXCIgK1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICAgICAgICAgIFwiXXsyfVwiICtcbiAgICAgICAgICAgIFwiKT9cIiArXG4gICAgICAgICAgICBcIig/OlxcXFxzKilcIiArXG4gICAgICAgICAgICBcIig/OuW5tCk/XCIgK1xuICAgICAgICAgICAgXCIoPzpbXFxcXHN8LHzvvIxdKilcIiArXG4gICAgICAgICAgICBcIihcIiArXG4gICAgICAgICAgICBcIlxcXFxkezEsMn18XCIgK1xuICAgICAgICAgICAgXCJbXCIgK1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICAgICAgICAgIFwiXXsxLDN9XCIgK1xuICAgICAgICAgICAgXCIpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrmnIgpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsxLDJ9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgICAgICAgICBcIl17MSwzfVwiICtcbiAgICAgICAgICAgIFwiKT9cIiArXG4gICAgICAgICAgICBcIig/OlxcXFxzKilcIiArXG4gICAgICAgICAgICBcIig/OuaXpXzlj7cpP1wiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBsZXQgbW9udGggPSBwYXJzZUludChtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4obW9udGgpKVxuICAgICAgICAgICAgbW9udGggPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBdKSB7XG4gICAgICAgICAgICBsZXQgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFZX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZGF5KSlcbiAgICAgICAgICAgICAgICBkYXkgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0RBWV9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGNvbnRleHQucmVmRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oeWVhcikpXG4gICAgICAgICAgICAgICAgeWVhciA9IHpoU3RyaW5nVG9ZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYWRkRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdK3zljYp85YegKSg/OlxcXFxzKilcIiArXG4gICAgXCIoPzrkuKopP1wiICtcbiAgICBcIijnp5IoPzrpkp8pP3zliIbpkp985bCP5pe2fOmSn3zml6V85aSpfOaYn+acn3znpLzmi5x85pyIfOW5tClcIiArXG4gICAgXCIoPzooPzrkuYt86L+HKT/lkI58KD865LmLKT/lhoUpXCIsIFwiaVwiKTtcbmNvbnN0IE5VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBVTklUX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgbGV0IG51bWJlciA9IHBhcnNlSW50KG1hdGNoW05VTUJFUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgbnVtYmVyID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtOVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RyaW5nID0gbWF0Y2hbTlVNQkVSX0dST1VQXTtcbiAgICAgICAgICAgIGlmIChzdHJpbmcgPT09IFwi5YegXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3RyaW5nID09PSBcIuWNilwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gMC41O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgY29uc3QgdW5pdCA9IG1hdGNoW1VOSVRfR1JPVVBdO1xuICAgICAgICBjb25zdCB1bml0QWJiciA9IHVuaXRbMF07XG4gICAgICAgIGlmICh1bml0QWJici5tYXRjaCgvW+aXpeWkqeaYn+ekvOaciOW5tF0vKSkge1xuICAgICAgICAgICAgaWYgKHVuaXRBYmJyID09IFwi5pelXCIgfHwgdW5pdEFiYnIgPT0gXCLlpKlcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLmRheSA9IG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHVuaXRBYmJyID09IFwi5pifXCIgfHwgdW5pdEFiYnIgPT0gXCLnpLxcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLndlZWsgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuaciFwiKSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubW9udGggPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuW5tFwiKSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ueWVhciA9IG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBhZGREdXJhdGlvbihjb250ZXh0LnJlZkRhdGUsIGR1cmF0aW9uKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVuaXRBYmJyID09IFwi56eSXCIpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLnNlY29uZCA9IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuWIhlwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5taW51dGUgPSBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLlsI9cIiB8fCB1bml0QWJiciA9PSBcIumSn1wiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5ob3VyID0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBhZGREdXJhdGlvbihjb250ZXh0LnJlZkRhdGUsIGR1cmF0aW9uKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgZGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1pbnV0ZVwiLCBkYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgV0VFS0RBWV9PRkZTRVQgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/PHByZWZpeD7kuIp85LiLfOi/mSkoPzrkuKopPyg/OuaYn+acn3znpLzmi5x85ZGoKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIilcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNSZWxhdGlvbldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLmdyb3Vwcy5wcmVmaXg7XG4gICAgICAgIGlmIChwcmVmaXggPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLkuItcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLov5lcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGxldCBzdGFydE1vbWVudEZpeGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlZk9mZnNldCA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcImxhc3RcIiB8fCBtb2RpZmllciA9PSBcInBhc3RcIikge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgKG9mZnNldCAtIDcgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgICAgIHN0YXJ0TW9tZW50Rml4ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyID09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAob2Zmc2V0ICsgNyAtIHJlZk9mZnNldCkpO1xuICAgICAgICAgICAgc3RhcnRNb21lbnRGaXhlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXIgPT0gXCJ0aGlzXCIpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIChvZmZzZXQgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkaWZmID0gb2Zmc2V0IC0gcmVmT2Zmc2V0O1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiAtPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiArPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgb2Zmc2V0KTtcbiAgICAgICAgaWYgKHN0YXJ0TW9tZW50Rml4ZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IEZJUlNUX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OuS7jnzoh6opP1wiICtcbiAgICBcIig/OlwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKOaXqXzmnJ185pmaKXxcIiArXG4gICAgXCIo5LiKKD865Y2IKXzml6koPzrkuIopfOS4iyg/OuWNiCl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpfFwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKD865pelfOWkqSlcIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKykoPzpcXFxccyopKD8654K5fOaXtnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3zljYp85q2jfOaVtHxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgU0VDT05EX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Ol5cXFxccyooPzrliLB86IezfFxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnClcXFxccyopXCIgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlkI585aSn5ZCOfOaYqCko5pepfOacnXzmmZopfFwiICtcbiAgICBcIijkuIooPzrljYgpfOaXqSg/OuS4iil85LiLKD865Y2IKXzmmZooPzrkuIopfOWknCg/OuaZmik/fOS4rSg/OuWNiCl85YeMKD865pmoKSl8XCIgK1xuICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlkI585aSn5ZCOfOaYqCkoPzrml6V85aSpKVwiICtcbiAgICBcIig/OltcXFxccyzvvIxdKilcIiArXG4gICAgXCIoPzoo5LiKKD865Y2IKXzml6koPzrkuIopfOS4iyg/OuWNiCl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpKT9cIiArXG4gICAgXCIpP1wiICtcbiAgICBcIig/OltcXFxccyzvvIxdKilcIiArXG4gICAgXCIoPzooXFxcXGQrfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKSg/OlxcXFxzKikoPzrngrl85pe2fDp877yaKVwiICtcbiAgICBcIig/OlxcXFxzKilcIiArXG4gICAgXCIoXFxcXGQrfOWNinzmraN85pW0fFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD865YiGfDp877yaKT9cIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/Ouenkik/KVwiICtcbiAgICBcIig/OlxcXFxzKihBLk0ufFAuTS58QU0/fFBNPykpP1wiLCBcImlcIik7XG5jb25zdCBEQVlfR1JPVVBfMSA9IDE7XG5jb25zdCBaSF9BTV9QTV9IT1VSX0dST1VQXzEgPSAyO1xuY29uc3QgWkhfQU1fUE1fSE9VUl9HUk9VUF8yID0gMztcbmNvbnN0IERBWV9HUk9VUF8zID0gNDtcbmNvbnN0IFpIX0FNX1BNX0hPVVJfR1JPVVBfMyA9IDU7XG5jb25zdCBIT1VSX0dST1VQID0gNjtcbmNvbnN0IE1JTlVURV9HUk9VUCA9IDc7XG5jb25zdCBTRUNPTkRfR1JPVVAgPSA4O1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUCA9IDk7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBwYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gXCIoKVwiO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBGSVJTVF9SRUdfUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaC5pbmRleCA+IDAgJiYgY29udGV4dC50ZXh0W21hdGNoLmluZGV4IC0gMV0ubWF0Y2goL1xcdy8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnQgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBtYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5pioXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgc3RhcnRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBzdGFydE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBzdGFydE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIHN0YXJ0TW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIHN0YXJ0TW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtID09IFwicFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzEgPSBtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuaXqVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTEgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmcyID0gbWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXTtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pepXCIgfHwgemhBTVBNMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTIgPT0gXCLkuItcIiB8fCB6aEFNUE0yID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgemhBTVBNU3RyaW5nMyA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM107XG4gICAgICAgICAgICBjb25zdCB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuaXqVwiIHx8IHpoQU1QTTMgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0zID09IFwi5LiLXCIgfHwgemhBTVBNMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBTRUNPTkRfUkVHX1BBVFRFUk4uZXhlYyhjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCkpO1xuICAgICAgICBpZiAoIXNlY29uZE1hdGNoKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbmRNb21lbnQgPSBuZXcgRGF0ZShzdGFydE1vbWVudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbREFZX0dST1VQXzFdIHx8IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgZW5kTW9tZW50ID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLliY1cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgKyAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKflkI5cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiZGF5XCIsIGVuZE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJtb250aFwiLCBlbmRNb21lbnQuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJ5ZWFyXCIsIGVuZE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBzZWNvbmRNYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWQjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kTW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCBlbmRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtb250aFwiLCBlbmRNb21lbnQuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGhvdXIgPSAwO1xuICAgICAgICBtaW51dGUgPSAwO1xuICAgICAgICBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHNlY29uZCA9IHBhcnNlSW50KHNlY29uZE1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwic2Vjb25kXCIsIHNlY29uZCk7XG4gICAgICAgIH1cbiAgICAgICAgaG91ciA9IHBhcnNlSW50KHNlY29uZE1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgaWYgKGlzTmFOKGhvdXIpKSB7XG4gICAgICAgICAgICBob3VyID0gemhTdHJpbmdUb051bWJlcihzZWNvbmRNYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdID09IFwi5Y2KXCIpIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSAzMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmraNcIiB8fCBzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdID09IFwi5pW0XCIpIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWludXRlID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWludXRlID0gemhTdHJpbmdUb051bWJlcihzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEwMCkge1xuICAgICAgICAgICAgbWludXRlID0gaG91ciAlIDEwMDtcbiAgICAgICAgICAgIGhvdXIgPSBNYXRoLmZsb29yKGhvdXIgLyAxMDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID4gMjQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XG4gICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA+IDEyKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29uc3QgYW1wbSA9IHNlY29uZE1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzEgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuaXqVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTEgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmcyID0gc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXTtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pepXCIgfHwgemhBTVBNMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTIgPT0gXCLkuItcIiB8fCB6aEFNUE0yID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgemhBTVBNU3RyaW5nMyA9IHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM107XG4gICAgICAgICAgICBjb25zdCB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuaXqVwiIHx8IHpoQU1QTTMgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0zID09IFwi5LiLXCIgfHwgemhBTVBNMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC50ZXh0ID0gcmVzdWx0LnRleHQgKyBzZWNvbmRNYXRjaFswXTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gPj0gMCkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEF0UE0gPSByZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikgJiYgcmVzdWx0LnN0YXJ0LmdldChcIm1lcmlkaWVtXCIpID09IDE7XG4gICAgICAgICAgICBpZiAoc3RhcnRBdFBNICYmIHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpID4gaG91cikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtZXJpZGllbVwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPiAxMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0LmVuZC5kYXRlKCkuZ2V0VGltZSgpIDwgcmVzdWx0LnN0YXJ0LmRhdGUoKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJkYXlcIiwgcmVzdWx0LmVuZC5nZXQoXCJkYXlcIikgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgV0VFS0RBWV9PRkZTRVQgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OuaYn+acn3znpLzmi5x85ZGoKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIilcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3QgZGF5T2ZXZWVrID0gbWF0Y2guZ3JvdXBzLndlZWtkYXk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfT0ZGU0VUW2RheU9mV2Vla107XG4gICAgICAgIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0TW9tZW50Rml4ZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVmT2Zmc2V0ID0gZGF0ZS5nZXREYXkoKTtcbiAgICAgICAgbGV0IGRpZmYgPSBvZmZzZXQgLSByZWZPZmZzZXQ7XG4gICAgICAgIGlmIChNYXRoLmFicyhkaWZmIC0gNykgPCBNYXRoLmFicyhkaWZmKSkge1xuICAgICAgICAgICAgZGlmZiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChNYXRoLmFicyhkaWZmICsgNykgPCBNYXRoLmFicyhkaWZmKSkge1xuICAgICAgICAgICAgZGlmZiArPSA3O1xuICAgICAgICB9XG4gICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGRpZmYpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwid2Vla2RheVwiLCBvZmZzZXQpO1xuICAgICAgICBpZiAoc3RhcnRNb21lbnRGaXhlZCkge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW5zV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IE5PV19HUk9VUCA9IDE7XG5jb25zdCBEQVlfR1JPVVBfMSA9IDI7XG5jb25zdCBUSU1FX0dST1VQXzEgPSAzO1xuY29uc3QgVElNRV9HUk9VUF8yID0gNDtcbmNvbnN0IERBWV9HUk9VUF8zID0gNTtcbmNvbnN0IFRJTUVfR1JPVVBfMyA9IDY7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiKOiAjOWutnznq4soPzrliLt85Y2zKXzljbPliLspfFwiICtcbiAgICAgICAgICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlvox85aSn5b6MfOiBvXzmmKh85bCLfOeQtCko5pepfOacnXzmmZopfFwiICtcbiAgICAgICAgICAgIFwiKOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgICAgICAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKD865pelfOWkqSlcIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKD86KOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCByZWZEYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKG1hdGNoW05PV19HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgcmVmRGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1pbnV0ZVwiLCByZWZEYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJzZWNvbmRcIiwgcmVmRGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgcmVmRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbREFZX0dST1VQXzFdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkxID0gbWF0Y2hbREFZX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgdGltZTEgPSBtYXRjaFtUSU1FX0dST1VQXzFdO1xuICAgICAgICAgICAgaWYgKGRheTEgPT0gXCLmmI5cIiB8fCBkYXkxID09IFwi6IG9XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVmRGF0ZS5nZXRIb3VycygpID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5pioXCIgfHwgZGF5MSA9PSBcIuWwi1wiIHx8IGRheTEgPT0gXCLnkLRcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlvoxcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+W+jFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZTEgPT0gXCLml6lcIiB8fCB0aW1lMSA9PSBcIuacnVwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUxID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtUSU1FX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lU3RyaW5nMiA9IG1hdGNoW1RJTUVfR1JPVVBfMl07XG4gICAgICAgICAgICBjb25zdCB0aW1lMiA9IHRpbWVTdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHRpbWUyID09IFwi5pepXCIgfHwgdGltZTIgPT0gXCLmnJ1cIiB8fCB0aW1lMiA9PSBcIuS4ilwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUyID09IFwi5LiLXCIgfHwgdGltZTIgPT0gXCLmmY9cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLlpJxcIiB8fCB0aW1lMiA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiIHx8IGRheTMgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIGlmIChyZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLmmKhcIiB8fCBkYXkzID09IFwi5bCLXCIgfHwgZGF5MyA9PSBcIueQtFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuW+jFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmczID0gbWF0Y2hbVElNRV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nMykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWUzID0gdGltZVN0cmluZzNbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRpbWUzID09IFwi5pepXCIgfHwgdGltZTMgPT0gXCLmnJ1cIiB8fCB0aW1lMyA9PSBcIuS4ilwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5LiLXCIgfHwgdGltZTMgPT0gXCLmmY9cIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5LitXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuWknFwiIHx8IHRpbWUzID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50Q2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJleHBvcnQgY29uc3QgTlVNQkVSID0ge1xuICAgIFwi6Zu2XCI6IDAsXG4gICAgXCLkuIBcIjogMSxcbiAgICBcIuS6jFwiOiAyLFxuICAgIFwi5YWpXCI6IDIsXG4gICAgXCLkuIlcIjogMyxcbiAgICBcIuWbm1wiOiA0LFxuICAgIFwi5LqUXCI6IDUsXG4gICAgXCLlha1cIjogNixcbiAgICBcIuS4g1wiOiA3LFxuICAgIFwi5YWrXCI6IDgsXG4gICAgXCLkuZ1cIjogOSxcbiAgICBcIuWNgVwiOiAxMCxcbiAgICBcIuW7v1wiOiAyMCxcbiAgICBcIuWNhVwiOiAzMCxcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9PRkZTRVQgPSB7XG4gICAgXCLlpKlcIjogMCxcbiAgICBcIuaXpVwiOiAwLFxuICAgIFwi5LiAXCI6IDEsXG4gICAgXCLkuoxcIjogMixcbiAgICBcIuS4iVwiOiAzLFxuICAgIFwi5ZubXCI6IDQsXG4gICAgXCLkupRcIjogNSxcbiAgICBcIuWFrVwiOiA2LFxufTtcbmV4cG9ydCBmdW5jdGlvbiB6aFN0cmluZ1RvTnVtYmVyKHRleHQpIHtcbiAgICBsZXQgbnVtYmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHRbaV07XG4gICAgICAgIGlmIChjaGFyID09PSBcIuWNgVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPT09IDAgPyBOVU1CRVJbY2hhcl0gOiBudW1iZXIgKiBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gTlVNQkVSW2NoYXJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gemhTdHJpbmdUb1llYXIodGV4dCkge1xuICAgIGxldCBzdHJpbmcgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGFyID0gdGV4dFtpXTtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nICsgTlVNQkVSW2NoYXJdO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciwgemhTdHJpbmdUb1llYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBZRUFSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMjtcbmNvbnN0IERBWV9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnREYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsyLDR9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezR9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezJ9XCIgK1xuICAgICAgICAgICAgXCIpP1wiICtcbiAgICAgICAgICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICAgICAgICAgIFwiKD865bm0KT9cIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKFwiICtcbiAgICAgICAgICAgIFwiXFxcXGR7MSwyfXxcIiArXG4gICAgICAgICAgICBcIltcIiArIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArIFwiXXsxLDJ9XCIgK1xuICAgICAgICAgICAgXCIpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrmnIgpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsxLDJ9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezEsMn1cIiArXG4gICAgICAgICAgICBcIik/XCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrml6V86JmfKT9cIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgbGV0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbTU9OVEhfR1JPVVBdKTtcbiAgICAgICAgaWYgKGlzTmFOKG1vbnRoKSlcbiAgICAgICAgICAgIG1vbnRoID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbREFZX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBWV9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKGRheSkpXG4gICAgICAgICAgICAgICAgZGF5ID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtEQVlfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGxldCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHllYXIpKVxuICAgICAgICAgICAgICAgIHllYXIgPSB6aFN0cmluZ1RvWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgY29udGV4dC5yZWZEYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50RGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFkZER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgeyBOVU1CRVIsIHpoU3RyaW5nVG9OdW1iZXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSt85Y2KfOW5vikoPzpcXFxccyopXCIgK1xuICAgIFwiKD865YCLKT9cIiArXG4gICAgXCIo56eSKD866ZCYKT985YiG6ZCYfOWwj+aZgnzpkJh85pelfOWkqXzmmJ/mnJ9856au5oucfOaciHzlubQpXCIgK1xuICAgIFwiKD86KD865LmLfOmBjik/5b6MfCg/OuS5iyk/5YWnKVwiLCBcImlcIik7XG5jb25zdCBOVU1CRVJfR1JPVVAgPSAxO1xuY29uc3QgVU5JVF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGxldCBudW1iZXIgPSBwYXJzZUludChtYXRjaFtOVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgIG51bWJlciA9IHpoU3RyaW5nVG9OdW1iZXIobWF0Y2hbTlVNQkVSX0dST1VQXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZyA9IG1hdGNoW05VTUJFUl9HUk9VUF07XG4gICAgICAgICAgICBpZiAoc3RyaW5nID09PSBcIuW5vlwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG51bWJlciA9IDAuNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0ge307XG4gICAgICAgIGNvbnN0IHVuaXQgPSBtYXRjaFtVTklUX0dST1VQXTtcbiAgICAgICAgY29uc3QgdW5pdEFiYnIgPSB1bml0WzBdO1xuICAgICAgICBpZiAodW5pdEFiYnIubWF0Y2goL1vml6XlpKnmmJ/npq7mnIjlubRdLykpIHtcbiAgICAgICAgICAgIGlmICh1bml0QWJiciA9PSBcIuaXpVwiIHx8IHVuaXRBYmJyID09IFwi5aSpXCIpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi5kYXkgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuaYn1wiIHx8IHVuaXRBYmJyID09IFwi56auXCIpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi53ZWVrID0gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLmnIhcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1vbnRoID0gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLlubRcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLnllYXIgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gYWRkRHVyYXRpb24oY29udGV4dC5yZWZEYXRlLCBkdXJhdGlvbik7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bml0QWJiciA9PSBcIuenklwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5zZWNvbmQgPSBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLliIZcIikge1xuICAgICAgICAgICAgZHVyYXRpb24ubWludXRlID0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRBYmJyID09IFwi5bCPXCIgfHwgdW5pdEFiYnIgPT0gXCLpkJhcIikge1xuICAgICAgICAgICAgZHVyYXRpb24uaG91ciA9IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gYWRkRHVyYXRpb24oY29udGV4dC5yZWZEYXRlLCBkdXJhdGlvbik7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGRhdGUuZ2V0SG91cnMoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtaW51dGVcIiwgZGF0ZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwic2Vjb25kXCIsIGRhdGUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IFdFRUtEQVlfT0ZGU0VUIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzxwcmVmaXg+5LiKfOS7inzkuIt86YCZfOWRoikoPzrlgIspPyg/OuaYn+acn3znpq7mi5x86YCxKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIilcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLmdyb3Vwcy5wcmVmaXg7XG4gICAgICAgIGlmIChwcmVmaXggPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLkuItcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLku4pcIiB8fCBwcmVmaXggPT0gXCLpgJlcIiB8fCBwcmVmaXggPT0gXCLlkaJcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGxldCBzdGFydE1vbWVudEZpeGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlZk9mZnNldCA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcImxhc3RcIiB8fCBtb2RpZmllciA9PSBcInBhc3RcIikge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgKG9mZnNldCAtIDcgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgICAgIHN0YXJ0TW9tZW50Rml4ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyID09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAob2Zmc2V0ICsgNyAtIHJlZk9mZnNldCkpO1xuICAgICAgICAgICAgc3RhcnRNb21lbnRGaXhlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXIgPT0gXCJ0aGlzXCIpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIChvZmZzZXQgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkaWZmID0gb2Zmc2V0IC0gcmVmT2Zmc2V0O1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiAtPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiArPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgb2Zmc2V0KTtcbiAgICAgICAgaWYgKHN0YXJ0TW9tZW50Rml4ZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFudFJlbGF0aW9uV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IEZJUlNUX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OueUsXzlvp586IeqKT9cIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIo5LuKfOaYjnzliY185aSn5YmNfOW+jHzlpKflvox86IG9fOaYqHzlsIt855C0KSjml6l85pydfOaZmil8XCIgK1xuICAgIFwiKOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgXCIo5LuKfOaYjnzliY185aSn5YmNfOW+jHzlpKflvox86IG9fOaYqHzlsIt855C0KSg/OuaXpXzlpKkpXCIgK1xuICAgIFwiKD86W1xcXFxzLO+8jF0qKVwiICtcbiAgICBcIig/OijkuIooPzrljYh85pmdKXzmnJ0oPzrml6kpfOaXqSg/OuS4iil85LiLKD865Y2IfOaZnSl85pmPKD865pmdKXzmmZooPzrkuIopfOWknCg/OuaZmik/fOS4rSg/OuWNiCl85YeMKD865pmoKSkpP1wiICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD86W1xcXFxzLO+8jF0qKVwiICtcbiAgICBcIig/OihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/Oum7nnzmmYJ8OnzvvJopXCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt85Y2KfOato3zmlbR8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrliIZ8OnzvvJopP1wiICtcbiAgICBcIig/OlxcXFxzKilcIiArXG4gICAgXCIoXFxcXGQrfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD8656eSKT8pXCIgK1xuICAgIFwiKD86XFxcXHMqKEEuTS58UC5NLnxBTT98UE0/KSk/XCIsIFwiaVwiKTtcbmNvbnN0IFNFQ09ORF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpeXFxcXHMqKD865YiwfOiHs3xcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJwpXFxcXHMqKVwiICtcbiAgICBcIig/OlwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKOaXqXzmnJ185pmaKXxcIiArXG4gICAgXCIo5LiKKD865Y2IfOaZnSl85pydKD865pepKXzml6koPzrkuIopfOS4iyg/OuWNiHzmmZ0pfOaZjyg/OuaZnSl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpfFwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKD865pelfOWkqSlcIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKykoPzpcXFxccyopKD866buefOaZgnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3zljYp85q2jfOaVtHxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgREFZX0dST1VQXzEgPSAxO1xuY29uc3QgWkhfQU1fUE1fSE9VUl9HUk9VUF8xID0gMjtcbmNvbnN0IFpIX0FNX1BNX0hPVVJfR1JPVVBfMiA9IDM7XG5jb25zdCBEQVlfR1JPVVBfMyA9IDQ7XG5jb25zdCBaSF9BTV9QTV9IT1VSX0dST1VQXzMgPSA1O1xuY29uc3QgSE9VUl9HUk9VUCA9IDY7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSA3O1xuY29uc3QgU0VDT05EX0dST1VQID0gODtcbmNvbnN0IEFNX1BNX0hPVVJfR1JPVVAgPSA5O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFwiKClcIjtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gRklSU1RfUkVHX1BBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2guaW5kZXggPiAwICYmIGNvbnRleHQudGV4dFttYXRjaC5pbmRleCAtIDFdLm1hdGNoKC9cXHcvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAobWF0Y2hbREFZX0dST1VQXzFdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkxID0gbWF0Y2hbREFZX0dST1VQXzFdO1xuICAgICAgICAgICAgaWYgKGRheTEgPT0gXCLmmI5cIiB8fCBkYXkxID09IFwi6IG9XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuaYqFwiIHx8IGRheTEgPT0gXCLlsItcIiB8fCBkYXkxID09IFwi55C0XCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+W+jFwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgc3RhcnRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBzdGFydE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiIHx8IGRheTMgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5pioXCIgfHwgZGF5MyA9PSBcIuWwi1wiIHx8IGRheTMgPT0gXCLnkLRcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlvoxcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBzdGFydE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIHN0YXJ0TW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIHN0YXJ0TW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSkge1xuICAgICAgICAgICAgdmFyIHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB2YXIgYW1wbSA9IG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdKSB7XG4gICAgICAgICAgICB2YXIgemhBTVBNU3RyaW5nMSA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV07XG4gICAgICAgICAgICB2YXIgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuacnVwiIHx8IHpoQU1QTTEgPT0gXCLml6lcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0xID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXSkge1xuICAgICAgICAgICAgdmFyIHpoQU1QTVN0cmluZzIgPSBtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pydXCIgfHwgemhBTVBNMiA9PSBcIuaXqVwiIHx8IHpoQU1QTTIgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0yID09IFwi5LiLXCIgfHwgemhBTVBNMiA9PSBcIuaZj1wiIHx8IHpoQU1QTTIgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzNdKSB7XG4gICAgICAgICAgICB2YXIgemhBTVBNU3RyaW5nMyA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM107XG4gICAgICAgICAgICB2YXIgemhBTVBNMyA9IHpoQU1QTVN0cmluZzNbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMyA9PSBcIuS4ilwiIHx8IHpoQU1QTTMgPT0gXCLmnJ1cIiB8fCB6aEFNUE0zID09IFwi5pepXCIgfHwgemhBTVBNMyA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTMgPT0gXCLkuItcIiB8fCB6aEFNUE0zID09IFwi5pmPXCIgfHwgemhBTVBNMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBTRUNPTkRfUkVHX1BBVFRFUk4uZXhlYyhjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCkpO1xuICAgICAgICBpZiAoIXNlY29uZE1hdGNoKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbmRNb21lbnQgPSBuZXcgRGF0ZShzdGFydE1vbWVudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbREFZX0dST1VQXzFdIHx8IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgZW5kTW9tZW50ID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiIHx8IGRheTEgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlZkRhdGUuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIiB8fCBkYXkxID09IFwi5bCLXCIgfHwgZGF5MSA9PSBcIueQtFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuW+jFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+W+jFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kTW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgZGF5MyA9IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmIChkYXkzID09IFwi5piOXCIgfHwgZGF5MyA9PSBcIuiBvVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiIHx8IGRheTMgPT0gXCLlsItcIiB8fCBkYXkzID09IFwi55C0XCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwibW9udGhcIiwgZW5kTW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwieWVhclwiLCBlbmRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwiZGF5XCIsIGVuZE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwieWVhclwiLCBlbmRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaG91ciA9IDA7XG4gICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgIG1lcmlkaWVtID0gLTE7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtTRUNPTkRfR1JPVVBdKSB7XG4gICAgICAgICAgICBsZXQgc2Vjb25kID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oc2Vjb25kKSkge1xuICAgICAgICAgICAgICAgIHNlY29uZCA9IHpoU3RyaW5nVG9OdW1iZXIoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB2YXIgYW1wbSA9IHNlY29uZE1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzEgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTEgPSB6aEFNUE1TdHJpbmcxWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTEgPT0gXCLmnJ1cIiB8fCB6aEFNUE0xID09IFwi5pepXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoemhBTVBNMSA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMl0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzIgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pydXCIgfHwgemhBTVBNMiA9PSBcIuaXqVwiIHx8IHpoQU1QTTIgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0yID09IFwi5LiLXCIgfHwgemhBTVBNMiA9PSBcIuaZj1wiIHx8IHpoQU1QTTIgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzNdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmczID0gc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXTtcbiAgICAgICAgICAgIHZhciB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuacnVwiIHx8IHpoQU1QTTMgPT0gXCLml6lcIiB8fCB6aEFNUE0zID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoemhBTVBNMyA9PSBcIuS4i1wiIHx8IHpoQU1QTTMgPT0gXCLmmY9cIiB8fCB6aEFNUE0zID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnRleHQgPSByZXN1bHQudGV4dCArIHNlY29uZE1hdGNoWzBdO1xuICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0QXRQTSA9IHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSAmJiByZXN1bHQuc3RhcnQuZ2V0KFwibWVyaWRpZW1cIikgPT0gMTtcbiAgICAgICAgICAgIGlmIChzdGFydEF0UE0gJiYgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPiBob3VyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQuZW5kLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCByZXN1bHQuZW5kLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBXRUVLREFZX09GRlNFVCB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD865pif5pyffOemruaLnHzpgLEpKD88d2Vla2RheT5cIiArIE9iamVjdC5rZXlzKFdFRUtEQVlfT0ZGU0VUKS5qb2luKFwifFwiKSArIFwiKVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFudFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnRGaXhlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCByZWZPZmZzZXQgPSBkYXRlLmdldERheSgpO1xuICAgICAgICBsZXQgZGlmZiA9IG9mZnNldCAtIHJlZk9mZnNldDtcbiAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICBkaWZmIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICBkaWZmICs9IDc7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ3ZWVrZGF5XCIsIG9mZnNldCk7XG4gICAgICAgIGlmIChzdGFydE1vbWVudEZpeGVkKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnRXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo6IezfOWIsHxcXC18XFx+fO+9nnzvvI1844O8KVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0V4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgWkhIYW50Q2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnREYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW50RGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW50RGVhZGxpbmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50V2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBoYW50ID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKCk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgWkhIYW50Q2FzdWFsRGF0ZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uKHtcbiAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgbmV3IFpISGFudERhdGVQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnRXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIoKSwgbmV3IFpISGFudE1lcmdlRGF0ZVRpbWVSZWZpbmVyKCldLFxuICAgIH0pO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMgPSBjb25maWd1cmF0aW9uLnJlZmluZXJzLmZpbHRlcigocmVmaW5lcikgPT4gIShyZWZpbmVyIGluc3RhbmNlb2YgRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lcikpO1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBOT1dfR1JPVVAgPSAxO1xuY29uc3QgREFZX0dST1VQXzEgPSAyO1xuY29uc3QgVElNRV9HUk9VUF8xID0gMztcbmNvbnN0IFRJTUVfR1JPVVBfMiA9IDQ7XG5jb25zdCBEQVlfR1JPVVBfMyA9IDU7XG5jb25zdCBUSU1FX0dST1VQXzMgPSA2O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW5zQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIijnjrDlnKh856uLKD865Yi7fOWNsyl85Y2z5Yi7KXxcIiArXG4gICAgICAgICAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKOaXqXzmmZopfFwiICtcbiAgICAgICAgICAgIFwiKOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgICAgICAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKD865pelfOWkqSlcIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKD86KOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCByZWZEYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKG1hdGNoW05PV19HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgcmVmRGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1pbnV0ZVwiLCByZWZEYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJzZWNvbmRcIiwgcmVmRGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgcmVmRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbREFZX0dST1VQXzFdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkxID0gbWF0Y2hbREFZX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgdGltZTEgPSBtYXRjaFtUSU1FX0dST1VQXzFdO1xuICAgICAgICAgICAgaWYgKGRheTEgPT0gXCLmmI5cIikge1xuICAgICAgICAgICAgICAgIGlmIChyZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZTEgPT0gXCLml6lcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMSA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbVElNRV9HUk9VUF8yXSkge1xuICAgICAgICAgICAgY29uc3QgdGltZVN0cmluZzIgPSBtYXRjaFtUSU1FX0dST1VQXzJdO1xuICAgICAgICAgICAgY29uc3QgdGltZTIgPSB0aW1lU3RyaW5nMlswXTtcbiAgICAgICAgICAgIGlmICh0aW1lMiA9PSBcIuaXqVwiIHx8IHRpbWUyID09IFwi5LiKXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuItcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLlpJxcIiB8fCB0aW1lMiA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZkRhdGUuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWQjlwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmczID0gbWF0Y2hbVElNRV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nMykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWUzID0gdGltZVN0cmluZzNbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRpbWUzID09IFwi5pepXCIgfHwgdGltZTMgPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuS4i1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZTMgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5aScXCIgfHwgdGltZTMgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo6IezfOWIsHwtfH58772efO+8jXzjg7wpXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lci5qc1wiO1xuaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBaSEhhbnNDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc0RhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnNEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zRGVhZGxpbmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnNXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc01lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9aSEhhbnNNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBaSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9aSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGhhbnMgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBaSEhhbnNDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGF0ZVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1dlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFpISGFuc01lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLCBuZXcgWkhIYW5zTWVyZ2VEYXRlVGltZVJlZmluZXIoKV0sXG4gICAgfSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycyA9IGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMuZmlsdGVyKChyZWZpbmVyKSA9PiAhKHJlZmluZXIgaW5zdGFuY2VvZiBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyKSk7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IEV4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgWkhIYW5zRGF0ZVBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyIGZyb20gXCIuL2hhbnMvcGFyc2Vycy9aSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zUmVsYXRpb25XZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vaGFucy9wYXJzZXJzL1pISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zV2Vla2RheVBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudENhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vaGFudC9wYXJzZXJzL1pISGFudENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnREYXRlUGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnREYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50RGVhZGxpbmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vaGFudC9wYXJzZXJzL1pISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50UmVsYXRpb25XZWVrZGF5UGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9oYW50L3BhcnNlcnMvWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRXZWVrZGF5UGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnRXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL2hhbnQvcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vaGFudC9yZWZpbmVycy9aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0ICogYXMgaGFudCBmcm9tIFwiLi9oYW50L2luZGV4LmpzXCI7XG5leHBvcnQgKiBhcyBoYW5zIGZyb20gXCIuL2hhbnMvaW5kZXguanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbigpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFpISGFudENhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBaSEhhbnREYXRlUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGF0ZVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudFJlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGVhZGxpbmVGb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCksIG5ldyBaSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICB9KTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzID0gY29uZmlndXJhdGlvbi5yZWZpbmVycy5maWx0ZXIoKHJlZmluZXIpID0+ICEocmVmaW5lciBpbnN0YW5jZW9mIEV4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIpKTtcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBSRUdFWF9QQVJUUyA9IHtcbiAgICBsZWZ0Qm91bmRhcnk6IFwiKFteXFxcXHB7TH1cXFxccHtOfV9dfF4pXCIsXG4gICAgcmlnaHRCb3VuZGFyeTogXCIoPz1bXlxcXFxwe0x9XFxcXHB7Tn1fXXwkKVwiLFxuICAgIGZsYWdzOiBcIml1XCIsXG59O1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICDQstC+0YHQutGA0LXRgdC10L3RjNC1OiAwLFxuICAgINCy0L7RgdC60YDQtdGB0LXQvdGM0Y86IDAsXG4gICAg0LLRgdC6OiAwLFxuICAgIFwi0LLRgdC6LlwiOiAwLFxuICAgINC/0L7QvdC10LTQtdC70YzQvdC40Lo6IDEsXG4gICAg0L/QvtC90LXQtNC10LvRjNC90LjQutCwOiAxLFxuICAgINC/0L06IDEsXG4gICAgXCLQv9C9LlwiOiAxLFxuICAgINCy0YLQvtGA0L3QuNC6OiAyLFxuICAgINCy0YLQvtGA0L3QuNC60LA6IDIsXG4gICAg0LLRgjogMixcbiAgICBcItCy0YIuXCI6IDIsXG4gICAg0YHRgNC10LTQsDogMyxcbiAgICDRgdGA0LXQtNGLOiAzLFxuICAgINGB0YDQtdC00YM6IDMsXG4gICAg0YHRgDogMyxcbiAgICBcItGB0YAuXCI6IDMsXG4gICAg0YfQtdGC0LLQtdGA0LM6IDQsXG4gICAg0YfQtdGC0LLQtdGA0LPQsDogNCxcbiAgICDRh9GCOiA0LFxuICAgIFwi0YfRgi5cIjogNCxcbiAgICDQv9GP0YLQvdC40YbQsDogNSxcbiAgICDQv9GP0YLQvdC40YbRgzogNSxcbiAgICDQv9GP0YLQvdC40YbRizogNSxcbiAgICDQv9GCOiA1LFxuICAgIFwi0L/Rgi5cIjogNSxcbiAgICDRgdGD0LHQsdC+0YLQsDogNixcbiAgICDRgdGD0LHQsdC+0YLRgzogNixcbiAgICDRgdGD0LHQsdC+0YLRizogNixcbiAgICDRgdCxOiA2LFxuICAgIFwi0YHQsS5cIjogNixcbn07XG5leHBvcnQgY29uc3QgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlkgPSB7XG4gICAg0Y/QvdCy0LDRgNGMOiAxLFxuICAgINGP0L3QstCw0YDRjzogMSxcbiAgICDRj9C90LLQsNGA0LU6IDEsXG4gICAg0YTQtdCy0YDQsNC70Yw6IDIsXG4gICAg0YTQtdCy0YDQsNC70Y86IDIsXG4gICAg0YTQtdCy0YDQsNC70LU6IDIsXG4gICAg0LzQsNGA0YI6IDMsXG4gICAg0LzQsNGA0YLQsDogMyxcbiAgICDQvNCw0YDRgtC1OiAzLFxuICAgINCw0L/RgNC10LvRjDogNCxcbiAgICDQsNC/0YDQtdC70Y86IDQsXG4gICAg0LDQv9GA0LXQu9C1OiA0LFxuICAgINC80LDQuTogNSxcbiAgICDQvNCw0Y86IDUsXG4gICAg0LzQsNC1OiA1LFxuICAgINC40Y7QvdGMOiA2LFxuICAgINC40Y7QvdGPOiA2LFxuICAgINC40Y7QvdC1OiA2LFxuICAgINC40Y7Qu9GMOiA3LFxuICAgINC40Y7Qu9GPOiA3LFxuICAgINC40Y7Qu9C1OiA3LFxuICAgINCw0LLQs9GD0YHRgjogOCxcbiAgICDQsNCy0LPRg9GB0YLQsDogOCxcbiAgICDQsNCy0LPRg9GB0YLQtTogOCxcbiAgICDRgdC10L3RgtGP0LHRgNGMOiA5LFxuICAgINGB0LXQvdGC0Y/QsdGA0Y86IDksXG4gICAg0YHQtdC90YLRj9Cx0YDQtTogOSxcbiAgICDQvtC60YLRj9Cx0YDRjDogMTAsXG4gICAg0L7QutGC0Y/QsdGA0Y86IDEwLFxuICAgINC+0LrRgtGP0LHRgNC1OiAxMCxcbiAgICDQvdC+0Y/QsdGA0Yw6IDExLFxuICAgINC90L7Rj9Cx0YDRjzogMTEsXG4gICAg0L3QvtGP0LHRgNC1OiAxMSxcbiAgICDQtNC10LrQsNCx0YDRjDogMTIsXG4gICAg0LTQtdC60LDQsdGA0Y86IDEyLFxuICAgINC00LXQutCw0LHRgNC1OiAxMixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICDRj9C90LI6IDEsXG4gICAgXCLRj9C90LIuXCI6IDEsXG4gICAg0YTQtdCyOiAyLFxuICAgIFwi0YTQtdCyLlwiOiAyLFxuICAgINC80LDRgDogMyxcbiAgICBcItC80LDRgC5cIjogMyxcbiAgICDQsNC/0YA6IDQsXG4gICAgXCLQsNC/0YAuXCI6IDQsXG4gICAg0LDQstCzOiA4LFxuICAgIFwi0LDQstCzLlwiOiA4LFxuICAgINGB0LXQvTogOSxcbiAgICBcItGB0LXQvS5cIjogOSxcbiAgICDQvtC60YI6IDEwLFxuICAgIFwi0L7QutGCLlwiOiAxMCxcbiAgICDQvdC+0Y86IDExLFxuICAgIFwi0L3QvtGPLlwiOiAxMSxcbiAgICDQtNC10Lo6IDEyLFxuICAgIFwi0LTQtdC6LlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAg0L7QtNC40L06IDEsXG4gICAg0L7QtNC90LA6IDEsXG4gICAg0L7QtNC90L7QuTogMSxcbiAgICDQvtC00L3RgzogMSxcbiAgICDQtNCy0LU6IDIsXG4gICAg0LTQstCwOiAyLFxuICAgINC00LLRg9GFOiAyLFxuICAgINGC0YDQuDogMyxcbiAgICDRgtGA0LXRhTogMyxcbiAgICDRgtGA0ZHRhTogMyxcbiAgICDRh9C10YLRi9GA0LU6IDQsXG4gICAg0YfQtdGC0YvRgNC10YU6IDQsXG4gICAg0YfQtdGC0YvRgNGR0YU6IDQsXG4gICAg0L/Rj9GC0Yw6IDUsXG4gICAg0L/Rj9GC0Lg6IDUsXG4gICAg0YjQtdGB0YLRjDogNixcbiAgICDRiNC10YHRgtC4OiA2LFxuICAgINGB0LXQvNGMOiA3LFxuICAgINGB0LXQvNC4OiA3LFxuICAgINCy0L7RgdC10LzRjDogOCxcbiAgICDQstC+0YHRjNC80Lg6IDgsXG4gICAg0LTQtdCy0Y/RgtGMOiA5LFxuICAgINC00LXQstGP0YLQuDogOSxcbiAgICDQtNC10YHRj9GC0Yw6IDEwLFxuICAgINC00LXRgdGP0YLQuDogMTAsXG4gICAg0L7QtNC40L3QvdCw0LTRhtCw0YLRjDogMTEsXG4gICAg0L7QtNC40L3QvdCw0LTRhtCw0YLQuDogMTEsXG4gICAg0LTQstC10L3QsNC00YbQsNGC0Yw6IDEyLFxuICAgINC00LLQtdC90LDQtNGG0LDRgtC4OiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAg0L/QtdGA0LLQvtC1OiAxLFxuICAgINC/0LXRgNCy0L7Qs9C+OiAxLFxuICAgINCy0YLQvtGA0L7QtTogMixcbiAgICDQstGC0L7RgNC+0LPQvjogMixcbiAgICDRgtGA0LXRgtGM0LU6IDMsXG4gICAg0YLRgNC10YLRjNC10LPQvjogMyxcbiAgICDRh9C10YLQstC10YDRgtC+0LU6IDQsXG4gICAg0YfQtdGC0LLQtdGA0YLQvtCz0L46IDQsXG4gICAg0L/Rj9GC0L7QtTogNSxcbiAgICDQv9GP0YLQvtCz0L46IDUsXG4gICAg0YjQtdGB0YLQvtC1OiA2LFxuICAgINGI0LXRgdGC0L7Qs9C+OiA2LFxuICAgINGB0LXQtNGM0LzQvtC1OiA3LFxuICAgINGB0LXQtNGM0LzQvtCz0L46IDcsXG4gICAg0LLQvtGB0YzQvNC+0LU6IDgsXG4gICAg0LLQvtGB0YzQvNC+0LPQvjogOCxcbiAgICDQtNC10LLRj9GC0L7QtTogOSxcbiAgICDQtNC10LLRj9GC0L7Qs9C+OiA5LFxuICAgINC00LXRgdGP0YLQvtC1OiAxMCxcbiAgICDQtNC10YHRj9GC0L7Qs9C+OiAxMCxcbiAgICDQvtC00LjQvdC90LDQtNGG0LDRgtC+0LU6IDExLFxuICAgINC+0LTQuNC90L3QsNC00YbQsNGC0L7Qs9C+OiAxMSxcbiAgICDQtNCy0LXQvdCw0LTRhtCw0YLQvtC1OiAxMixcbiAgICDQtNCy0LXQvdCw0LTRhtCw0YLQvtCz0L46IDEyLFxuICAgINGC0YDQuNC90LDQtNGG0LDRgtC+0LU6IDEzLFxuICAgINGC0YDQuNC90LDQtNGG0LDRgtC+0LPQvjogMTMsXG4gICAg0YfQtdGC0YvRgNC90LDQtNGG0LDRgtC+0LU6IDE0LFxuICAgINGH0LXRgtGL0YDQvdCw0LTRhtCw0YLQvtCz0L46IDE0LFxuICAgINC/0Y/RgtC90LDQtNGG0LDRgtC+0LU6IDE1LFxuICAgINC/0Y/RgtC90LDQtNGG0LDRgtC+0LPQvjogMTUsXG4gICAg0YjQtdGB0YLQvdCw0LTRhtCw0YLQvtC1OiAxNixcbiAgICDRiNC10YHRgtC90LDQtNGG0LDRgtC+0LPQvjogMTYsXG4gICAg0YHQtdC80L3QsNC00YbQsNGC0L7QtTogMTcsXG4gICAg0YHQtdC80L3QsNC00YbQsNGC0L7Qs9C+OiAxNyxcbiAgICDQstC+0YHQtdC80L3QsNC00YbQsNGC0L7QtTogMTgsXG4gICAg0LLQvtGB0LXQvNC90LDQtNGG0LDRgtC+0LPQvjogMTgsXG4gICAg0LTQtdCy0Y/RgtC90LDQtNGG0LDRgtC+0LU6IDE5LFxuICAgINC00LXQstGP0YLQvdCw0LTRhtCw0YLQvtCz0L46IDE5LFxuICAgINC00LLQsNC00YbQsNGC0L7QtTogMjAsXG4gICAg0LTQstCw0LTRhtCw0YLQvtCz0L46IDIwLFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQv9C10YDQstC+0LVcIjogMjEsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0LXRgNCy0L7Qs9C+XCI6IDIxLFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQstGC0L7RgNC+0LVcIjogMjIsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINCy0YLQvtGA0L7Qs9C+XCI6IDIyLFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDRgtGA0LXRgtGM0LVcIjogMjMsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGC0YDQtdGC0YzQtdCz0L5cIjogMjMsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGH0LXRgtCy0LXRgNGC0L7QtVwiOiAyNCxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YfQtdGC0LLQtdGA0YLQvtCz0L5cIjogMjQsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0Y/RgtC+0LVcIjogMjUsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0Y/RgtC+0LPQvlwiOiAyNSxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YjQtdGB0YLQvtC1XCI6IDI2LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDRiNC10YHRgtC+0LPQvlwiOiAyNixcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YHQtdC00YzQvNC+0LVcIjogMjcsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGB0LXQtNGM0LzQvtCz0L5cIjogMjcsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINCy0L7RgdGM0LzQvtC1XCI6IDI4LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQstC+0YHRjNC80L7Qs9C+XCI6IDI4LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQtNC10LLRj9GC0L7QtVwiOiAyOSxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0LTQtdCy0Y/RgtC+0LPQvlwiOiAyOSxcbiAgICBcItGC0YDQuNC00YbQsNGC0L7QtVwiOiAzMCxcbiAgICBcItGC0YDQuNC00YbQsNGC0L7Qs9C+XCI6IDMwLFxuICAgIFwi0YLRgNC40LTRhtCw0YLRjCDQv9C10YDQstC+0LVcIjogMzEsXG4gICAgXCLRgtGA0LjQtNGG0LDRgtGMINC/0LXRgNCy0L7Qs9C+XCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICDRgdC10Lo6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00LA6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC0OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNGLOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNGDOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutCwOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutC4OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQtdC6OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutGDOiBcInNlY29uZFwiLFxuICAgINC80LjQvTogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0LA6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgjogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0Ys6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgtGDOiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQvtC6OiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQutC4OiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQutGDOiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQvtGH0LXQujogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0L7Rh9C60Lg6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgtC+0YfQutGDOiBcIm1pbnV0ZVwiLFxuICAgINGH0LDRgTogXCJob3VyXCIsXG4gICAg0YfQsNGB0L7QsjogXCJob3VyXCIsXG4gICAg0YfQsNGB0LA6IFwiaG91clwiLFxuICAgINGH0LDRgdGDOiBcImhvdXJcIixcbiAgICDRh9Cw0YHQuNC60L7QsjogXCJob3VyXCIsXG4gICAg0YfQsNGB0LjQutCwOiBcImhvdXJcIixcbiAgICDRh9Cw0YHQuNC60LU6IFwiaG91clwiLFxuICAgINGH0LDRgdC40Lo6IFwiaG91clwiLFxuICAgINC00LXQvdGMOiBcImRheVwiLFxuICAgINC00L3RjzogXCJkYXlcIixcbiAgICDQtNC90LXQuTogXCJkYXlcIixcbiAgICDRgdGD0YLQvtC6OiBcImRheVwiLFxuICAgINGB0YPRgtC60Lg6IFwiZGF5XCIsXG4gICAg0L3QtdC00LXQu9GPOiBcIndlZWtcIixcbiAgICDQvdC10LTQtdC70LU6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvQuDogXCJ3ZWVrXCIsXG4gICAg0L3QtdC00LXQu9GOOiBcIndlZWtcIixcbiAgICDQvdC10LTQtdC70Yw6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvRjNC60LU6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvRjNC60Lg6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvQtdC6OiBcIndlZWtcIixcbiAgICDQvNC10YHRj9GGOiBcIm1vbnRoXCIsXG4gICAg0LzQtdGB0Y/RhtC1OiBcIm1vbnRoXCIsXG4gICAg0LzQtdGB0Y/RhtC10LI6IFwibW9udGhcIixcbiAgICDQvNC10YHRj9GG0LA6IFwibW9udGhcIixcbiAgICDQutCy0LDRgNGC0LDQuzogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvQtTogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvQvtCyOiBcInF1YXJ0ZXJcIixcbiAgICDQs9C+0LQ6IFwieWVhclwiLFxuICAgINCz0L7QtNCwOiBcInllYXJcIixcbiAgICDQs9C+0LTRgzogXCJ5ZWFyXCIsXG4gICAg0LPQvtC00L7QsjogXCJ5ZWFyXCIsXG4gICAg0LvQtdGCOiBcInllYXJcIixcbiAgICDQs9C+0LTQuNC6OiBcInllYXJcIixcbiAgICDQs9C+0LTQuNC60LA6IFwieWVhclwiLFxuICAgINCz0L7QtNC40LrQvtCyOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt80L/QvtC7fNC90LXRgdC60L7Qu9GM0LrQvnzQv9Cw0YAoPzrRi3zRgyl8XFxcXHN7MCwzfSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgaWYgKG51bS5tYXRjaCgv0L3QtdGB0LrQvtC70YzQutC+LykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgv0L/QvtC7LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC/Qv9Cw0YAvKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtID09PSBcIlwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XXsxLDJ9KD860LPQvnzQvtCz0L580LV80L7QtSk/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5jb25zdCB5ZWFyID0gXCIoPzpcXFxccysoPzrQs9C+0LTRg3zQs9C+0LTQsHzQs9C+0LR80LN80LMuKSk/XCI7XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfSR7eWVhcn1cXFxccyooPzrQvS7RjS580LTQviDQvS7RjS580L0uINGNLnzQtNC+INC9LiDRjS4pfFsxLTJdWzAtOV17M30ke3llYXJ9fFs1LTldWzAtOV0ke3llYXJ9KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC8o0LPQvtC0fNCz0L7QtNCwfNCzfNCzLikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjQs9C+0LR80LPQvtC00LB80LN80LMuKS9pLCBcIlwiKTtcbiAgICB9XG4gICAgaWYgKC8o0LTQviDQvS7RjS580LTQviDQvS4g0Y0uKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKNC00L4g0L0u0Y0ufNC00L4g0L0uINGNLikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoLyjQvS4g0Y0ufNC9LtGNLikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjQvS4g0Y0ufNC9LtGNLikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUkVHRVggPSBuZXcgUmVnRXhwKFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgXCJpXCIpO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfUEFUVEVSTiA9IHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKGAoPzooPzrQvtC60L7Qu9C+fNC/0YDQuNC80LXRgNC90L4pXFxcXHN7MCwzfSk/YCwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBgKD86KD860L7QutC+0LvQvnzQv9GA0LjQvNC10YDQvdC+KVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkke1JFR0VYX1BBUlRTLnJpZ2h0Qm91bmRhcnl9YDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9uLmZvcndhcmREYXRlXG4gICAgICAgICAgICA/IG5ldyBSZWdFeHAoUEFUVEVSTiwgUkVHRVhfUEFSVFMuZmxhZ3MpXG4gICAgICAgICAgICA6IG5ldyBSZWdFeHAoYCg/OtCyINGC0LXRh9C10L3QuNC1fNCyINGC0LXRh9C10L3QuNC4KVxcXFxzKiR7UEFUVEVSTn1gLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5leHBvcnQgY2xhc3MgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodGhpcy5pbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCksIFJFR0VYX1BBUlRTLmZsYWdzKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuSGFzQ2hhbmdlKGNvbnRleHQsIGN1cnJlbnRJbm5lclBhdHRlcm4pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAke3RoaXMuaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpfSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGAoPzrRgSk/XFxcXHMqKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgICAgICAgICBgKD86YCArXG4gICAgICAgICAgICBgXFxcXHN7MCwzfSg/OtC/0L58LXzigJN80LTQvik/XFxcXHN7MCwzfWAgK1xuICAgICAgICAgICAgYCgke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KWAgK1xuICAgICAgICAgICAgYCk/YCArXG4gICAgICAgICAgICBgKD86LXxcXFxcL3xcXFxcc3swLDN9KD86b2YpP1xcXFxzezAsM30pYCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGAoPzotfFxcXFwvfCw/XFxcXHN7MCwzfSlgICtcbiAgICAgICAgICAgIGAoJHtZRUFSX1BBVFRFUk59KD8hW15cXFxcc11cXFxcZCkpYCArXG4gICAgICAgICAgICBgKT9gO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSwgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVNb250aE5hbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChgKCg/OtCyKVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGBcXFxccypgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBbLC1dP1xcXFxzKigke1lFQVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCk/YCArXG4gICAgICAgICAgICBgKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKWApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA8PSAzICYmICFGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWVttb250aE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lXTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgMSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVTW9udGhOYW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCB7IFJFR0VYX1BBUlRTIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoc3RyaWN0TW9kZSk7XG4gICAgfVxuICAgIHBhdHRlcm5GbGFncygpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmZsYWdzO1xuICAgIH1cbiAgICBwcmltYXJ5UGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIGAoXnxcXFxcc3xUfCg/OlteXFxcXHB7TH1cXFxccHtOfV9dKSlgO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIGBcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx80LTQvnzQuHzQv9C+fFxcXFw/KVxcXFxzKmA7XG4gICAgfVxuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD86KD860LJ80YEpXFxcXHMqKT8/YDtcbiAgICB9XG4gICAgcHJpbWFyeVN1ZmZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAoPzpcXFxccyooPzrRg9GC0YDQsHzQstC10YfQtdGA0LB80L/QvtGB0LvQtSDQv9C+0LvRg9C00L3RjykpPyg/IVxcXFwvKSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItCy0LXRh9C10YDQsFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItC/0L7RgdC70LUg0L/QvtC70YPQtNC90Y9cIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID49IDAgJiYgaG91ciA8PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwi0YPRgtGA0LBcIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKCR7VElNRV9VTklUU19QQVRURVJOfSlcXFxcc3swLDV90L3QsNC30LDQtCg/PSg/OlxcXFxXfCQpKWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo0Lgg0LTQvnzQuCDQv9C+fNC00L580L/QvnwtKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVU1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBeXFxcXHMqKFR80LJ8LHwtKT9cXFxccyokYCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVUNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCg/OtGBfNGB0L4pP1xcXFxzKijRgdC10LPQvtC00L3Rj3zQstGH0LXRgNCwfNC30LDQstGC0YDQsHzQv9C+0YHQu9C10LfQsNCy0YLRgNCwfNC/0L7RgdC70LXQv9C+0YHQu9C10LfQsNCy0YLRgNCwfNC/0L7Qt9Cw0L/QvtC30LDQstGH0LXRgNCwfNC/0L7Qt9Cw0LLRh9C10YDQsClgO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGxvd2VyVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcItGB0LXQs9C+0LTQvdGPXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcItCy0YfQtdGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcItC30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbW9ycm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9C+0YHQu9C10LfQsNCy0YLRgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7RgdC70LXQv9C+0YHQu9C10LfQsNCy0YLRgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDMpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7Qt9Cw0LLRh9C10YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUJlZm9yZShjb250ZXh0LnJlZmVyZW5jZSwgMik7XG4gICAgICAgICAgICBjYXNlIFwi0L/QvtC30LDQv9C+0LfQsNCy0YfQtdGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50aGVEYXlCZWZvcmUoY29udGV4dC5yZWZlcmVuY2UsIDMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCjRgdC10LnRh9Cw0YF80L/RgNC+0YjQu9GL0LxcXFxccyrQstC10YfQtdGA0L7QvHzQv9GA0L7RiNC70L7QuVxcXFxzKtC90L7Rh9GM0Y580YHQu9C10LTRg9GO0YnQtdC5XFxcXHMq0L3QvtGH0YzRjnzRgdC10LPQvtC00L3Rj1xcXFxzKtC90L7Rh9GM0Y580Y3RgtC+0LlcXFxccyrQvdC+0YfRjNGOfNC90L7Rh9GM0Y580Y3RgtC40Lwg0YPRgtGA0L7QvHzRg9GC0YDQvtC8fNGD0YLRgNCwfNCyXFxcXHMq0L/QvtC70LTQtdC90Yx80LLQtdGH0LXRgNC+0Lx80LLQtdGH0LXRgNCwfNCyXFxcXHMq0L/QvtC70L3QvtGH0YwpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChsb3dlclRleHQgPT09IFwi0YHQtdC50YfQsNGBXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dCA9PT0gXCLQstC10YfQtdGA0L7QvFwiIHx8IGxvd2VyVGV4dCA9PT0gXCLQstC10YfQtdGA0LBcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMuZXZlbmluZyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5lbmRzV2l0aChcItGD0YLRgNC+0LxcIikgfHwgbG93ZXJUZXh0LmVuZHNXaXRoKFwi0YPRgtGA0LBcIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1vcm5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL9CyXFxzKtC/0L7Qu9C00LXQvdGMLykpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vb24oY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL9C/0YDQvtGI0LvQvtC5XFxzKtC90L7Rh9GM0Y4vKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubGFzdE5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/Qv9GA0L7RiNC70YvQvFxccyrQstC10YfQtdGA0L7QvC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXlFdmVuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/RgdC70LXQtNGD0Y7RidC10LlcXHMq0L3QvtGH0YzRji8pKSB7XG4gICAgICAgICAgICBjb25zdCBkYXlzVG9BZGQgPSB0YXJnZXREYXRlLmdldEhvdXJzKCkgPCAyMiA/IDEgOiAyO1xuICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIG5leHREYXkuc2V0RGF0ZShuZXh0RGF5LmdldERhdGUoKSArIGRheXNUb0FkZCk7XG4gICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QslxccyrQv9C+0LvQvdC+0YfRjC8pIHx8IGxvd2VyVGV4dC5lbmRzV2l0aChcItC90L7Rh9GM0Y5cIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1pZG5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoPzooPzosfFxcXFwofO+8iClcXFxccyopP2AgK1xuICAgICAgICAgICAgYCg/OtCyXFxcXHMqPyk/YCArXG4gICAgICAgICAgICBgKD86KNGN0YLRg3zRjdGC0L7RgnzQv9GA0L7RiNC70YvQuXzQv9GA0L7RiNC70YPRjnzRgdC70LXQtNGD0Y7RidC40Ll80YHQu9C10LTRg9GO0YnRg9GOfNGB0LvQtdC00YPRjtGJ0LXQs9C+KVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKig/Oix8XFxcXCl877yJKSk/YCArXG4gICAgICAgICAgICBgKD86XFxcXHMq0L3QsFxcXFxzKijRjdGC0L7QuXzQv9GA0L7RiNC70L7QuXzRgdC70LXQtNGD0Y7RidC10LkpXFxcXHMq0L3QtdC00LXQu9C1KT9gKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcItC/0YDQvtGI0LvRi9C5XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0L/RgNC+0YjQu9GD0Y5cIiB8fCBtb2RpZmllcldvcmQgPT0gXCLQv9GA0L7RiNC70L7QuVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcItGB0LvQtdC00YPRjtGJ0LjQuVwiIHx8XG4gICAgICAgICAgICBtb2RpZmllcldvcmQgPT0gXCLRgdC70LXQtNGD0Y7RidGD0Y5cIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXJXb3JkID09IFwi0YHQu9C10LTRg9GO0YnQtdC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItGB0LvQtdC00YPRjtGJ0LXQs9C+XCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwi0Y3RgtC+0YJcIiB8fCBtb2RpZmllcldvcmQgPT0gXCLRjdGC0YNcIiB8fCBtb2RpZmllcldvcmQgPT0gXCLRjdGC0L7QuVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmNvbnN0IE1PRElGSUVSX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgUkVMQVRJVkVfV09SRF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKNCyINC/0YDQvtGI0LvQvtC8fNC90LAg0L/RgNC+0YjQu9C+0Ll80L3QsCDRgdC70LXQtNGD0Y7RidC10Ll80LIg0YHQu9C10LTRg9GO0YnQtdC8fNC90LAg0Y3RgtC+0Ll80LIg0Y3RgtC+0LwpXFxcXHMqKCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwi0L3QsCDRgdC70LXQtNGD0Y7RidC10LlcIiB8fCBtb2RpZmllciA9PSBcItCyINGB0LvQtdC00YPRjtGJ0LXQvFwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCLQsiDQv9GA0L7RiNC70L7QvFwiIHx8IG1vZGlmaWVyID09IFwi0L3QsCDQv9GA0L7RiNC70L7QuVwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh0aW1ldW5pdC5tYXRjaCgvd2Vlay9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGltZXVuaXQubWF0Y2goL21vbnRoL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aW1ldW5pdC5tYXRjaCgveWVhci9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNb250aCgwKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKNGN0YLQuHzQv9C+0YHQu9C10LTQvdC40LV80L/RgNC+0YjQu9GL0LV80YHQu9C10LTRg9GO0YnQuNC1fNC/0L7RgdC70LV80YHQv9GD0YHRgtGPfNGH0LXRgNC10Ld8XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsyXSk7XG4gICAgICAgIHN3aXRjaCAocHJlZml4KSB7XG4gICAgICAgICAgICBjYXNlIFwi0L/QvtGB0LvQtdC00L3QuNC1XCI6XG4gICAgICAgICAgICBjYXNlIFwi0L/RgNC+0YjQu9GL0LVcIjpcbiAgICAgICAgICAgIGNhc2UgXCItXCI6XG4gICAgICAgICAgICAgICAgdGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IFJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFJVTW9udGhOYW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVNb250aE5hbWVQYXJzZXIuanNcIjtcbmltcG9ydCBSVVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFJVVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvUlVNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBSVU1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1JVTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgUlVDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVDYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBSVUNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgUlVDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKHRydWUpLFxuICAgICAgICAgICAgbmV3IFJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBSVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFJVV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFJVVGltZUV4cHJlc3Npb25QYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgUlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBSVU1lcmdlRGF0ZVRpbWVSZWZpbmVyKCksIG5ldyBSVU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcImRvbWluZ29cIjogMCxcbiAgICBcImRvbVwiOiAwLFxuICAgIFwibHVuZXNcIjogMSxcbiAgICBcImx1blwiOiAxLFxuICAgIFwibWFydGVzXCI6IDIsXG4gICAgXCJtYXJcIjogMixcbiAgICBcIm1pw6lyY29sZXNcIjogMyxcbiAgICBcIm1pZXJjb2xlc1wiOiAzLFxuICAgIFwibWnDqVwiOiAzLFxuICAgIFwibWllXCI6IDMsXG4gICAgXCJqdWV2ZXNcIjogNCxcbiAgICBcImp1ZVwiOiA0LFxuICAgIFwidmllcm5lc1wiOiA1LFxuICAgIFwidmllXCI6IDUsXG4gICAgXCJzw6FiYWRvXCI6IDYsXG4gICAgXCJzYWJhZG9cIjogNixcbiAgICBcInPDoWJcIjogNixcbiAgICBcInNhYlwiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwiZW5lcm9cIjogMSxcbiAgICBcImVuZVwiOiAxLFxuICAgIFwiZW5lLlwiOiAxLFxuICAgIFwiZmVicmVyb1wiOiAyLFxuICAgIFwiZmViXCI6IDIsXG4gICAgXCJmZWIuXCI6IDIsXG4gICAgXCJtYXJ6b1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhYnJpbFwiOiA0LFxuICAgIFwiYWJyXCI6IDQsXG4gICAgXCJhYnIuXCI6IDQsXG4gICAgXCJtYXlvXCI6IDUsXG4gICAgXCJtYXlcIjogNSxcbiAgICBcIm1heS5cIjogNSxcbiAgICBcImp1bmlvXCI6IDYsXG4gICAgXCJqdW5cIjogNixcbiAgICBcImp1bi5cIjogNixcbiAgICBcImp1bGlvXCI6IDcsXG4gICAgXCJqdWxcIjogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBcImFnb3N0b1wiOiA4LFxuICAgIFwiYWdvXCI6IDgsXG4gICAgXCJhZ28uXCI6IDgsXG4gICAgXCJzZXB0aWVtYnJlXCI6IDksXG4gICAgXCJzZXRpZW1icmVcIjogOSxcbiAgICBcInNlcFwiOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIFwib2N0dWJyZVwiOiAxMCxcbiAgICBcIm9jdFwiOiAxMCxcbiAgICBcIm9jdC5cIjogMTAsXG4gICAgXCJub3ZpZW1icmVcIjogMTEsXG4gICAgXCJub3ZcIjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIFwiZGljaWVtYnJlXCI6IDEyLFxuICAgIFwiZGljXCI6IDEyLFxuICAgIFwiZGljLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ1bm9cIjogMSxcbiAgICBcImRvc1wiOiAyLFxuICAgIFwidHJlc1wiOiAzLFxuICAgIFwiY3VhdHJvXCI6IDQsXG4gICAgXCJjaW5jb1wiOiA1LFxuICAgIFwic2Vpc1wiOiA2LFxuICAgIFwic2lldGVcIjogNyxcbiAgICBcIm9jaG9cIjogOCxcbiAgICBcIm51ZXZlXCI6IDksXG4gICAgXCJkaWV6XCI6IDEwLFxuICAgIFwib25jZVwiOiAxMSxcbiAgICBcImRvY2VcIjogMTIsXG4gICAgXCJ0cmVjZVwiOiAxMyxcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJzZWNcIjogXCJzZWNvbmRcIixcbiAgICBcInNlZ3VuZG9cIjogXCJzZWNvbmRcIixcbiAgICBcInNlZ3VuZG9zXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW5cIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnNcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0b1wiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXRvc1wiOiBcIm1pbnV0ZVwiLFxuICAgIFwiaFwiOiBcImhvdXJcIixcbiAgICBcImhyXCI6IFwiaG91clwiLFxuICAgIFwiaHJzXCI6IFwiaG91clwiLFxuICAgIFwiaG9yYVwiOiBcImhvdXJcIixcbiAgICBcImhvcmFzXCI6IFwiaG91clwiLFxuICAgIFwiZMOtYVwiOiBcImRheVwiLFxuICAgIFwiZMOtYXNcIjogXCJkYXlcIixcbiAgICBcInNlbWFuYVwiOiBcIndlZWtcIixcbiAgICBcInNlbWFuYXNcIjogXCJ3ZWVrXCIsXG4gICAgXCJtZXNcIjogXCJtb250aFwiLFxuICAgIFwibWVzZXNcIjogXCJtb250aFwiLFxuICAgIFwiY3VhcnRvXCI6IFwicXVhcnRlclwiLFxuICAgIFwiY3VhcnRvc1wiOiBcInF1YXJ0ZXJcIixcbiAgICBcImHDsW9cIjogXCJ5ZWFyXCIsXG4gICAgXCJhw7Fvc1wiOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt8dW4/fHVubz98dW5hP3xhbGd1bm9zP3x1bm9zP3xkZW1pLT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJ1blwiIHx8IG51bSA9PT0gXCJ1bmFcIiB8fCBudW0gPT09IFwidW5vXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvYWxndW5vcz8vKSkge1xuICAgICAgICByZXR1cm4gMztcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC91bm9zPy8pKSB7XG4gICAgICAgIHJldHVybiAzO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL21lZGlhPy8pKSB7XG4gICAgICAgIHJldHVybiAwLjU7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUZsb2F0KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gXCJbMC05XXsxLDR9KD8hW15cXFxcc11cXFxcZCkoPzpcXFxccypbYXxkXVxcXFwuP1xcXFxzKmNcXFxcLj98XFxcXHMqYVxcXFwuP1xcXFxzKmRcXFxcLj8pP1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmIChtYXRjaC5tYXRjaCgvXlswLTldezEsNH0kLykpIHtcbiAgICAgICAgbGV0IHllYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgICAgICBpZiAoeWVhck51bWJlciA+IDUwKSB7XG4gICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAxOTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAyMDAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyTnVtYmVyO1xuICAgIH1cbiAgICBpZiAobWF0Y2gubWF0Y2goL2FcXC4/XFxzKmNcXC4/L2kpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvYVxcLj9cXHMqY1xcLj8vaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnRzO1xufVxuZnVuY3Rpb24gY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaFsxXSk7XG4gICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgIGZyYWdtZW50c1t1bml0XSA9IG51bTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86KGVzdGV8ZXN0YXxwYXNhZG98cHJbb8OzXXhpbW8pXFxcXHMqKT9cIiArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlxcXFxzKig/OlxcXFwsfFxcXFwpfFxcXFzvvIkpKT9cIiArXG4gICAgXCIoPzpcXFxccyooZXN0ZXxlc3RhfHBhc2Fkb3xwclvDs29deGltbylcXFxccypzZW1hbmEpP1wiICtcbiAgICBcIig/PVxcXFxXfFxcXFxkfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMjtcbmNvbnN0IFBPU1RGSVhfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRVNXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGlmICh3ZWVrZGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgbGV0IG5vcm0gPSBwcmVmaXggfHwgcG9zdGZpeCB8fCBcIlwiO1xuICAgICAgICBub3JtID0gbm9ybS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAobm9ybSA9PSBcInBhc2Fkb1wiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vcm0gPT0gXCJwcsOzeGltb1wiIHx8IG5vcm0gPT0gXCJwcm94aW1vXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9ybSA9PSBcImVzdGVcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU1dlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU1RpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86YXNsYXN8ZGVzbGFzfGxhcz98YWw/fGRlfGRlbClcXFxccyopP1wiO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfGEoPzpsKT98XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RVNUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeXFxcXHMqKD86LHxkZXxhc2xhc3xhKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVTTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKD86LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVTTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pKD86wrp8wqp8wrApP2AgK1xuICAgIFwiKD86XFxcXHMqKD86ZGVzZGV8ZGV8XFxcXC18XFxcXOKAk3xhbz98XFxcXHMpXFxcXHMqKFswLTldezEsMn0pKD86wrp8wqp8wrApPyk/XFxcXHMqKD86ZGUpP1xcXFxzKlwiICtcbiAgICBgKD86LXwvfFxcXFxzKig/OmRlfCwpP1xcXFxzKilgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86XFxcXHMqKD86ZGV8LCk/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRVNNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU01vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU0Nhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oYWhvcmF8aG95fG1hw7FhbmF8YXllcikoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhaG9yYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaG95XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm1hw7FhbmFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiYXllclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU0Nhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUsIGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiAvKD86ZXN0YVxccyopPyhtYcOxYW5hfHRhcmRlfG1lZGlhbm9jaGV8bWVkaW9kaWF8bWVkaW9kw61hfG5vY2hlKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0YXJkZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub2NoZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2V2ZW5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWHDsWFuYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbW9ybmluZ1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZWRpYW5vY2hlXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9taWRuaWdodFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZWRpb2RpYVwiOlxuICAgICAgICAgICAgY2FzZSBcIm1lZGlvZMOtYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL25vb25cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU0Nhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCg/OmVufHBvcnxkdXJhbnRlfGRlfGRlbnRybyBkZSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRVNXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgRVNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VTVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBFU01lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0VTTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBFU01lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FU01lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEVTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFU0Nhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FU0Nhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBFU0Nhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FU0Nhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBFU1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgRVNDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVTQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgRVNXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRVNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBFU01lcmdlRGF0ZVRpbWVSZWZpbmVyKCksIG5ldyBFU01lcmdlRGF0ZVJhbmdlUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBSRUdFWF9QQVJUUyA9IHtcbiAgICBsZWZ0Qm91bmRhcnk6IFwiKFteXFxcXHB7TH1cXFxccHtOfV9dfF4pXCIsXG4gICAgcmlnaHRCb3VuZGFyeTogXCIoPz1bXlxcXFxwe0x9XFxcXHB7Tn1fXXwkKVwiLFxuICAgIGZsYWdzOiBcIml1XCIsXG59O1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcItC90LXQtNGW0LvRj1wiOiAwLFxuICAgIFwi0L3QtdC00ZbQu9GWXCI6IDAsXG4gICAgXCLQvdC10LTRltC70Y5cIjogMCxcbiAgICBcItC90LRcIjogMCxcbiAgICBcItC90LQuXCI6IDAsXG4gICAgXCLQv9C+0L3QtdC00ZbQu9C+0LpcIjogMSxcbiAgICBcItC/0L7QvdC10LTRltC70LrQsFwiOiAxLFxuICAgIFwi0L/QvVwiOiAxLFxuICAgIFwi0L/QvS5cIjogMSxcbiAgICBcItCy0ZbQstGC0L7RgNC+0LpcIjogMixcbiAgICBcItCy0ZbQstGC0L7RgNC60LBcIjogMixcbiAgICBcItCy0YJcIjogMixcbiAgICBcItCy0YIuXCI6IDIsXG4gICAgXCLRgdC10YDQtdC00LBcIjogMyxcbiAgICBcItGB0LXRgNC10LTQuFwiOiAzLFxuICAgIFwi0YHQtdGA0LXQtNGDXCI6IDMsXG4gICAgXCLRgdGAXCI6IDMsXG4gICAgXCLRgdGALlwiOiAzLFxuICAgIFwi0YfQtdGC0LLQtdGAXCI6IDQsXG4gICAgXCLRh9C10YLQstC10YDQs9CwXCI6IDQsXG4gICAgXCLRh9C10YLQstC10YDQs9GDXCI6IDQsXG4gICAgXCLRh9GCXCI6IDQsXG4gICAgXCLRh9GCLlwiOiA0LFxuICAgIFwi0L8n0Y/RgtC90LjRhtGPXCI6IDUsXG4gICAgXCLQvyfRj9GC0L3QuNGG0ZZcIjogNSxcbiAgICBcItC/J9GP0YLQvdC40YbRjlwiOiA1LFxuICAgIFwi0L/RglwiOiA1LFxuICAgIFwi0L/Rgi5cIjogNSxcbiAgICBcItGB0YPQsdC+0YLQsFwiOiA2LFxuICAgIFwi0YHRg9Cx0L7RgtC4XCI6IDYsXG4gICAgXCLRgdGD0LHQvtGC0YNcIjogNixcbiAgICBcItGB0LFcIjogNixcbiAgICBcItGB0LEuXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZID0ge1xuICAgIFwi0YHRltGH0LXQvdGMXCI6IDEsXG4gICAgXCLRgdGW0YfQvdGPXCI6IDEsXG4gICAgXCLRgdGW0YfQvdGWXCI6IDEsXG4gICAgXCLQu9GO0YLQuNC5XCI6IDIsXG4gICAgXCLQu9GO0YLQvtCz0L5cIjogMixcbiAgICBcItC70Y7RgtC+0LzRg1wiOiAyLFxuICAgIFwi0LHQtdGA0LXQt9C10L3RjFwiOiAzLFxuICAgIFwi0LHQtdGA0LXQt9C90Y9cIjogMyxcbiAgICBcItCx0LXRgNC10LfQvdGWXCI6IDMsXG4gICAgXCLQutCy0ZbRgtC10L3RjFwiOiA0LFxuICAgIFwi0LrQstGW0YLQvdGPXCI6IDQsXG4gICAgXCLQutCy0ZbRgtC90ZZcIjogNCxcbiAgICBcItGC0YDQsNCy0LXQvdGMXCI6IDUsXG4gICAgXCLRgtGA0LDQstC90Y9cIjogNSxcbiAgICBcItGC0YDQsNCy0L3RllwiOiA1LFxuICAgIFwi0YfQtdGA0LLQtdC90YxcIjogNixcbiAgICBcItGH0LXRgNCy0L3Rj1wiOiA2LFxuICAgIFwi0YfQtdGA0LLQvdGWXCI6IDYsXG4gICAgXCLQu9C40L/QtdC90YxcIjogNyxcbiAgICBcItC70LjQv9C90Y9cIjogNyxcbiAgICBcItC70LjQv9C90ZZcIjogNyxcbiAgICBcItGB0LXRgNC/0LXQvdGMXCI6IDgsXG4gICAgXCLRgdC10YDQv9C90Y9cIjogOCxcbiAgICBcItGB0LXRgNC/0L3RllwiOiA4LFxuICAgIFwi0LLQtdGA0LXRgdC10L3RjFwiOiA5LFxuICAgIFwi0LLQtdGA0LXRgdC90Y9cIjogOSxcbiAgICBcItCy0LXRgNC10YHQvdGWXCI6IDksXG4gICAgXCLQttC+0LLRgtC10L3RjFwiOiAxMCxcbiAgICBcItC20L7QstGC0L3Rj1wiOiAxMCxcbiAgICBcItC20L7QstGC0L3RllwiOiAxMCxcbiAgICBcItC70LjRgdGC0L7Qv9Cw0LRcIjogMTEsXG4gICAgXCLQu9C40YHRgtC+0L/QsNC00LBcIjogMTEsXG4gICAgXCLQu9C40YHRgtC+0L/QsNC00YNcIjogMTEsXG4gICAgXCLQs9GA0YPQtNC10L3RjFwiOiAxMixcbiAgICBcItCz0YDRg9C00L3Rj1wiOiAxMixcbiAgICBcItCz0YDRg9C00L3RllwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICBcItGB0ZbRh1wiOiAxLFxuICAgIFwi0YHRltGHLlwiOiAxLFxuICAgIFwi0LvRjtGCXCI6IDIsXG4gICAgXCLQu9GO0YIuXCI6IDIsXG4gICAgXCLQsdC10YBcIjogMyxcbiAgICBcItCx0LXRgC5cIjogMyxcbiAgICBcItC60LLRltGCXCI6IDQsXG4gICAgXCLQutCy0ZbRgi5cIjogNCxcbiAgICBcItGC0YDQsNCyXCI6IDUsXG4gICAgXCLRgtGA0LDQsi5cIjogNSxcbiAgICBcItGH0LXRgNCyXCI6IDYsXG4gICAgXCLRh9C10YDQsi5cIjogNixcbiAgICBcItC70LjQv1wiOiA3LFxuICAgIFwi0LvQuNC/LlwiOiA3LFxuICAgIFwi0YHQtdGA0L9cIjogOCxcbiAgICBcItGB0LXRgNC/LlwiOiA4LFxuICAgIFwi0YHQtdGAXCI6IDgsXG4gICAgXCJj0LXRgC5cIjogOCxcbiAgICBcItCy0LXRgFwiOiA5LFxuICAgIFwi0LLQtdGALlwiOiA5LFxuICAgIFwi0LLQtdGA0LXRgVwiOiA5LFxuICAgIFwi0LLQtdGA0LXRgS5cIjogOSxcbiAgICBcItC20L7QstGCXCI6IDEwLFxuICAgIFwi0LbQvtCy0YIuXCI6IDEwLFxuICAgIFwi0LvQuNGB0YLQvtC/XCI6IDExLFxuICAgIFwi0LvQuNGB0YLQvtC/LlwiOiAxMSxcbiAgICBcItCz0YDRg9C0XCI6IDEyLFxuICAgIFwi0LPRgNGD0LQuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcItC+0LTQuNC9XCI6IDEsXG4gICAgXCLQvtC00L3QsFwiOiAxLFxuICAgIFwi0L7QtNC90L7Rl1wiOiAxLFxuICAgIFwi0L7QtNC90YNcIjogMSxcbiAgICBcItC00LLRllwiOiAyLFxuICAgIFwi0LTQstCwXCI6IDIsXG4gICAgXCLQtNCy0L7RhVwiOiAyLFxuICAgIFwi0YLRgNC4XCI6IDMsXG4gICAgXCLRgtGA0YzQvtGFXCI6IDMsXG4gICAgXCLRh9C+0YLQuNGA0LhcIjogNCxcbiAgICBcItGH0L7RgtC40YDRjNC+0YVcIjogNCxcbiAgICBcItC/J9GP0YLRjFwiOiA1LFxuICAgIFwi0L8n0Y/RgtC4XCI6IDUsXG4gICAgXCLRiNGW0YHRgtGMXCI6IDYsXG4gICAgXCLRiNC10YHRgtC4XCI6IDYsXG4gICAgXCLRgdGW0LxcIjogNyxcbiAgICBcItGB0LXQvNC4XCI6IDcsXG4gICAgXCLQstGW0YHRltC8XCI6IDgsXG4gICAgXCLQstC+0YHRjNC80LhcIjogOCxcbiAgICBcItC00LXQsifRj9GC0YxcIjogOSxcbiAgICBcItC00LXQsifRj9GC0LhcIjogOSxcbiAgICBcItC00LXRgdGP0YLRjFwiOiAxMCxcbiAgICBcItC00LXRgdGP0YLQuFwiOiAxMCxcbiAgICBcItC+0LTQuNC90LDQtNGG0Y/RgtGMXCI6IDExLFxuICAgIFwi0L7QtNC40L3QsNC00YbRj9GC0LhcIjogMTEsXG4gICAgXCLQtNCy0LDQvdCw0LTRhtGP0YLRjFwiOiAxMixcbiAgICBcItC00LLQsNC90LDQtNGG0Y/RgtC4XCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcItC/0LXRgNGI0LVcIjogMSxcbiAgICBcItC/0LXRgNGI0L7Qs9C+XCI6IDEsXG4gICAgXCLQtNGA0YPQs9C1XCI6IDIsXG4gICAgXCLQtNGA0YPQs9C+0LPQvlwiOiAyLFxuICAgIFwi0YLRgNC10YLRlFwiOiAzLFxuICAgIFwi0YLRgNC10YLRjNC+0LPQvlwiOiAzLFxuICAgIFwi0YfQtdGC0LLQtdGA0YLQtVwiOiA0LFxuICAgIFwi0YfQtdGC0LLQtdGA0YLQvtCz0L5cIjogNCxcbiAgICBcItC/J9GP0YLQtVwiOiA1LFxuICAgIFwi0L8n0Y/RgtC+0LPQvlwiOiA1LFxuICAgIFwi0YjQvtGB0YLQtVwiOiA2LFxuICAgIFwi0YjQvtGB0YLQvtCz0L5cIjogNixcbiAgICBcItGB0YzQvtC80LVcIjogNyxcbiAgICBcItGB0YzQvtC80L7Qs9C+XCI6IDcsXG4gICAgXCLQstC+0YHRjNC80LVcIjogOCxcbiAgICBcItCy0L7RgdGM0LzQvtCz0L5cIjogOCxcbiAgICBcItC00LXQsifRj9GC0LVcIjogOSxcbiAgICBcItC00LXQsifRj9GC0L7Qs9C+XCI6IDksXG4gICAgXCLQtNC10YHRj9GC0LVcIjogMTAsXG4gICAgXCLQtNC10YHRj9GC0L7Qs9C+XCI6IDEwLFxuICAgIFwi0L7QtNC40L3QsNC00YbRj9GC0LVcIjogMTEsXG4gICAgXCLQvtC00LjQvdCw0LTRhtGP0YLQvtCz0L5cIjogMTEsXG4gICAgXCLQtNCy0LDQvdCw0LTRhtGP0YLQtVwiOiAxMixcbiAgICBcItC00LLQsNC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxMixcbiAgICBcItGC0YDQuNC90LDQtNGG0Y/RgtC1XCI6IDEzLFxuICAgIFwi0YLRgNC40L3QsNC00YbRj9GC0L7Qs9C+XCI6IDEzLFxuICAgIFwi0YfQvtGC0LjRgNC90LDQtNGG0Y/RgtC1XCI6IDE0LFxuICAgIFwi0YfQvtGC0LjQvdGA0L3QsNC00YbRj9GC0L7Qs9C+XCI6IDE0LFxuICAgIFwi0L8n0Y/RgtC90LDQtNGG0Y/RgtC1XCI6IDE1LFxuICAgIFwi0L8n0Y/RgtC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxNSxcbiAgICBcItGI0ZbRgdGC0L3QsNC00YbRj9GC0LVcIjogMTYsXG4gICAgXCLRiNGW0YHRgtC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxNixcbiAgICBcItGB0ZbQvNC90LDQtNGG0Y/RgtC1XCI6IDE3LFxuICAgIFwi0YHRltC80L3QsNC00YbRj9GC0L7Qs9C+XCI6IDE3LFxuICAgIFwi0LLRltGB0ZbQvNC90LDQtNGG0Y/RgtC1XCI6IDE4LFxuICAgIFwi0LLRltGB0ZbQvNC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxOCxcbiAgICBcItC00LXQsifRj9GC0L3QsNC00YbRj9GC0LVcIjogMTksXG4gICAgXCLQtNC10LIn0Y/RgtC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxOSxcbiAgICBcItC00LLQsNC00YbRj9GC0LVcIjogMjAsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtC+0LPQvlwiOiAyMCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0L/QtdGA0YjQtVwiOiAyMSxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0L/QtdGA0YjQvtCz0L5cIjogMjEsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINC00YDRg9Cz0LVcIjogMjIsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINC00YDRg9Cz0L7Qs9C+XCI6IDIyLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRgtGA0LXRgtGUXCI6IDIzLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRgtGA0LXRgtGM0L7Qs9C+XCI6IDIzLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRh9C10YLQstC10YDRgtC1XCI6IDI0LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRh9C10YLQstC10YDRgtC+0LPQvlwiOiAyNCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0L8n0Y/RgtC1XCI6IDI1LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDQvyfRj9GC0L7Qs9C+XCI6IDI1LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRiNC+0YHRgtC1XCI6IDI2LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRiNC+0YHRgtC+0LPQvlwiOiAyNixcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0YHRjNC+0LzQtVwiOiAyNyxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0YHRjNC+0LzQvtCz0L5cIjogMjcsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINCy0L7RgdGM0LzQtVwiOiAyOCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LLQvtGB0YzQvNC+0LPQvlwiOiAyOCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LTQtdCyJ9GP0YLQtVwiOiAyOSxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LTQtdCyJ9GP0YLQvtCz0L5cIjogMjksXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtC1XCI6IDMwLFxuICAgIFwi0YLRgNC40LTRhtGP0YLQvtCz0L5cIjogMzAsXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtGMINC/0LXRgNGI0LVcIjogMzEsXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtGMINC/0LXRgNGI0L7Qs9C+XCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICDRgdC10Lo6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00LA6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC0OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC4OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNGDOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQvtC6OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutC4OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutGDOiBcInNlY29uZFwiLFxuICAgINGF0LI6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90LA6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC9OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC4OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdGDOiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0Lo6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90LrQuDogXCJtaW51dGVcIixcbiAgICDRhdCy0LjQu9C40L3QutGDOiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0YfQvtC6OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0YfQutC4OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0YfQutGDOiBcIm1pbnV0ZVwiLFxuICAgINCz0L7QtDogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdCwOiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC9OiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC90Lg6IFwiaG91clwiLFxuICAgINCz0L7QtNC40L3RgzogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdC60LA6IFwiaG91clwiLFxuICAgINCz0L7QtNC40L3QvtC6OiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC90LrQuDogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdC60YM6IFwiaG91clwiLFxuICAgINC00LXQvdGMOiBcImRheVwiLFxuICAgINC00L3RjzogXCJkYXlcIixcbiAgICDQtNC90ZbQsjogXCJkYXlcIixcbiAgICDQtNC90ZY6IFwiZGF5XCIsXG4gICAg0LTQvtCx0LA6IFwiZGF5XCIsXG4gICAg0LTQvtCx0YM6IFwiZGF5XCIsXG4gICAg0YLQuNC20LTQtdC90Yw6IFwid2Vla1wiLFxuICAgINGC0LjQttC90Y46IFwid2Vla1wiLFxuICAgINGC0LjQttC90Y86IFwid2Vla1wiLFxuICAgINGC0LjQttC90ZY6IFwid2Vla1wiLFxuICAgINGC0LjQttC90ZbQsjogXCJ3ZWVrXCIsXG4gICAg0LzRltGB0Y/RhtGMOiBcIm1vbnRoXCIsXG4gICAg0LzRltGB0Y/RhtGW0LI6IFwibW9udGhcIixcbiAgICDQvNGW0YHRj9GG0ZY6IFwibW9udGhcIixcbiAgICDQvNGW0YHRj9GG0Y86IFwibW9udGhcIixcbiAgICDQutCy0LDRgNGC0LDQuzogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvRgzogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvQsDogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvRltCyOiBcInF1YXJ0ZXJcIixcbiAgICDQutCy0LDRgNGC0LDQu9GWOiBcInF1YXJ0ZXJcIixcbiAgICDRgNGW0Lo6IFwieWVhclwiLFxuICAgINGA0L7QutGDOiBcInllYXJcIixcbiAgICDRgNC+0YbRljogXCJ5ZWFyXCIsXG4gICAg0YDQvtC60ZbQsjogXCJ5ZWFyXCIsXG4gICAg0YDQvtC60Lg6IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBOVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSl9fFswLTldK3xbMC05XStcXFxcLlswLTldK3zQv9GW0LJ80LTQtdC60ZbQu9GM0LrQsHzQv9Cw0YAoPzrRgyl8XFxcXHN7MCwzfSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgaWYgKG51bS5tYXRjaCgv0LTQtdC60ZbQu9GM0LrQsC8pKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL9C/0ZbQsi8pKSB7XG4gICAgICAgIHJldHVybiAwLjU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgv0L/QsNGALykpIHtcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJcIikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZKX18WzAtOV17MSwyfSg/OtCz0L580L7Qs9C+fNC1KT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cbmNvbnN0IHllYXIgPSBcIig/OlxcXFxzKyg/OtGA0L7QutGDfNGA0ZbQunzRgHzRgC4pKT9cIjtcbmV4cG9ydCBjb25zdCBZRUFSX1BBVFRFUk4gPSBgKD86WzEtOV1bMC05XXswLDN9JHt5ZWFyfVxcXFxzKig/OtC9LtC1LnzQtNC+INC9LtC1LnzQvS4g0LUufNC00L4g0L0uINC1Lil8WzEtMl1bMC05XXszfSR7eWVhcn18WzUtOV1bMC05XSR7eWVhcn0pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgaWYgKC8o0YDRltC6fNGA0L7QutGDfNGAfNGALikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjRgNGW0Lp80YDQvtC60YN80YB80YAuKS9pLCBcIlwiKTtcbiAgICB9XG4gICAgaWYgKC8o0LTQviDQvS7QtS580LTQviDQvS4g0LUuKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKNC00L4g0L0u0LUufNC00L4g0L0uINC1LikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoLyjQvS4g0LUufNC9LtC1LikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjQvS4g0LUufNC9LtC1LikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUkVHRVggPSBuZXcgUmVnRXhwKFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgXCJpXCIpO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfUEFUVEVSTiA9IHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKGAoPzooPzrQsdC70LjQt9GM0LrQvnzQv9GA0LjQsdC70LjQt9C90L4pXFxcXHN7MCwzfSk/YCwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBgKD86KD860L/RgNC40LHQu9C40LfQvdC+fNC+0YDRltGU0L3RgtC+0LLQvdC+KVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkke1JFR0VYX1BBUlRTLnJpZ2h0Qm91bmRhcnl9YDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9uLmZvcndhcmREYXRlXG4gICAgICAgICAgICA/IG5ldyBSZWdFeHAoUEFUVEVSTiwgXCJpXCIpXG4gICAgICAgICAgICA6IG5ldyBSZWdFeHAoYCg/OtC/0YDQvtGC0Y/Qs9C+0Lx80L3QsCDQv9GA0L7RgtGP0LfRlnzQv9GA0L7RgtGP0LPQvtC8fNGD0L/RgNC+0LTQvtCy0LZ80LLQv9GA0L7QtNC+0LLQtilcXFxccyoke1BBVFRFUk59YCwgUkVHRVhfUEFSVFMuZmxhZ3MpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IFJFR0VYX1BBUlRTIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuZXhwb3J0IGNsYXNzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHBhdHRlcm5MZWZ0Qm91bmRhcnkoKSB7XG4gICAgICAgIHJldHVybiBSRUdFWF9QQVJUUy5sZWZ0Qm91bmRhcnk7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHRoaXMuaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybkhhc0NoYW5nZShjb250ZXh0LCBjdXJyZW50SW5uZXJQYXR0ZXJuKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgJHt0aGlzLmlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KX0ke1JFR0VYX1BBUlRTLnJpZ2h0Qm91bmRhcnl9YCwgUkVHRVhfUEFSVFMuZmxhZ3MpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXJQYXR0ZXJuIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoPzrQt3zRltC3KT9cXFxccyooJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBcXFxcc3swLDN9KD860L/QvnwtfOKAk3zQtNC+KT9cXFxcc3swLDN9YCArXG4gICAgICAgICAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgICAgICAgICBgKT9gICtcbiAgICAgICAgICAgIGAoPzotfFxcXFwvfFxcXFxzezAsM30oPzpvZik/XFxcXHN7MCwzfSlgICtcbiAgICAgICAgICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OmAgK1xuICAgICAgICAgICAgYCg/Oi18XFxcXC98LD9cXFxcc3swLDN9KWAgK1xuICAgICAgICAgICAgYCgke1lFQVJfUEFUVEVSTn0oPyFbXlxcXFxzXVxcXFxkKSlgICtcbiAgICAgICAgICAgIGApP2ApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyUGF0dGVybihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZLCBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVWtNb250aE5hbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChgKCg/OtCyfNGDKVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGBcXFxccypgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBbLC1dP1xcXFxzKigke1lFQVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCk/YCArXG4gICAgICAgICAgICBgKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKWApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA8PSAzICYmICFGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWVttb250aE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lXTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyUGF0dGVybihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LCAxLCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtNb250aE5hbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IHsgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1RpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcihzdHJpY3RNb2RlKTtcbiAgICB9XG4gICAgcGF0dGVybkZsYWdzKCkge1xuICAgICAgICByZXR1cm4gUkVHRVhfUEFSVFMuZmxhZ3M7XG4gICAgfVxuICAgIHByaW1hcnlQYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gYChefFxcXFxzfFR8KD86W15cXFxccHtMfVxcXFxwe059X10pKWA7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gYFxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHzQtNC+fNGWfNC/0L58XFxcXD8pXFxcXHMqYDtcbiAgICB9XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAoPzooPzrQsnzRg3zQvnzQvtCxfNC3fNGW0Ld80LLRltC0KVxcXFxzKik/P2A7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD86XFxcXHMqKD860YDQsNC90LrRg3zQstC10YfQvtGA0LB80L/QviDQvtCx0ZbQtNGWfNC/0ZbRgdC70Y8g0L7QsdGW0LTRgykpPyg/IVxcXFwvKSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItCy0LXRh9C+0YDQsFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItC/0L4g0L7QsdGW0LTRllwiKSB8fCBtYXRjaFswXS5lbmRzV2l0aChcItC/0ZbRgdC70Y8g0L7QsdGW0LTRg1wiKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gMCAmJiBob3VyIDw9IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0uZW5kc1dpdGgoXCLRgNCw0L3QutGDXCIpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fdGC0L7QvNGDKD89KD86XFxcXFd8JCkpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBvdXRwdXRUaW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgb3V0cHV0VGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS01lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijRliDQtNC+fNGWINC/0L580LTQvnzQv9C+fC0pXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS01lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5cXFxccyooVHzQsnzRg3zQvnwsfC0pP1xcXFxzKiRgKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKD860Ld80ZbQt3zQstGW0LQpP1xcXFxzKijRgdGM0L7Qs9C+0LTQvdGWfNCy0YfQvtGA0LB80LfQsNCy0YLRgNCwfNC/0ZbRgdC70Y/Qt9Cw0LLRgtGA0LB80L/RltGB0LvRj9C/0ZbRgdC70Y/Qt9Cw0LLRgtGA0LB80L/QvtC30LDQv9C+0LfQsNCy0YfQvtGA0LB80L/QvtC30LDQstGH0L7RgNCwKWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAobG93ZXJUZXh0KSB7XG4gICAgICAgICAgICBjYXNlIFwi0YHRjNC+0LPQvtC00L3RllwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQstGH0L7RgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQt9Cw0LLRgtGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwi0L/RltGB0LvRj9C30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUFmdGVyKGNvbnRleHQucmVmZXJlbmNlLCAyKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9GW0YHQu9GP0L/RltGB0LvRj9C30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUFmdGVyKGNvbnRleHQucmVmZXJlbmNlLCAzKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9C+0LfQsNCy0YfQvtGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50aGVEYXlCZWZvcmUoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7Qt9Cw0L/QvtC30LDQstGH0L7RgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QmVmb3JlKGNvbnRleHQucmVmZXJlbmNlLCAzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGAo0LfQsNGA0LDQt3zQvNC40L3Rg9C70L7Qs9C+XFxcXHMq0LLQtdGH0L7RgNCwfNC80LjQvdGD0LvQvtGXXFxcXHMq0L3QvtGH0ZZ80L3QsNGB0YLRg9C/0L3QvtGXXFxcXHMq0L3QvtGH0ZZ80YHRjNC+0LPQvtC00L3RllxcXFxzKtCy0L3QvtGH0ZZ80YbRltGU0ZdcXFxccyrQvdC+0YfRlnzRhtGM0L7Qs9C+INGA0LDQvdC60YN80LLRgNCw0L3RhtGWfNGA0LDQvdC60YN80LfRgNCw0L3QutGDfNC+0L/RltCy0LTQvdGWfNCy0LLQtdGH0LXRgNGWfNCy0LXRh9C+0YDQsHzQvtC/0ZbQstC90L7Rh9GWfNCy0L3QvtGH0ZYpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChsb3dlclRleHQgPT09IFwi0LfQsNGA0LDQt1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQgPT09IFwi0LLQstC10YfQtdGA0ZZcIiB8fCBsb3dlclRleHQgPT09IFwi0LLQtdGH0L7RgNCwXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLmV2ZW5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQuZW5kc1dpdGgoXCLQstGA0LDQvdGG0ZZcIikgfHwgbG93ZXJUZXh0LmVuZHNXaXRoKFwi0YDQsNC90LrRg1wiKSB8fCBsb3dlclRleHQuZW5kc1dpdGgoXCLQt9GA0LDQvdC60YNcIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1vcm5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQuZW5kc1dpdGgoXCLQvtC/0ZbQstC00L3RllwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubm9vbihjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5tYXRjaCgv0LzQuNC90YPQu9C+0ZdcXHMq0L3QvtGH0ZYvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubGFzdE5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QvNC40L3Rg9C70L7Qs9C+XFxzKtCy0LXRh9C+0YDQsC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXlFdmVuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QvdCw0YHRgtGD0L/QvdC+0ZdcXHMq0L3QvtGH0ZYvKSkge1xuICAgICAgICAgICAgY29uc3QgZGF5c1RvQWRkID0gdGFyZ2V0RGF0ZS5nZXRIb3VycygpIDwgMjIgPyAxIDogMjtcbiAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyBkYXlzVG9BZGQpO1xuICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5tYXRjaCgv0YbRltGU0ZdcXHMq0L3QvtGH0ZYvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubWlkbmlnaHQoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQuZW5kc1dpdGgoXCLQvtC/0ZbQstC90L7Rh9GWXCIpIHx8IGxvd2VyVGV4dC5lbmRzV2l0aChcItCy0L3QvtGH0ZZcIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1pZG5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1dlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoPzooPzosfFxcXFwofO+8iClcXFxccyopP2AgK1xuICAgICAgICAgICAgYCg/OtCyXFxcXHMqPyk/YCArXG4gICAgICAgICAgICBgKD860YNcXFxccyo/KT9gICtcbiAgICAgICAgICAgIGAoPzoo0YbQtdC5fNC80LjQvdGD0LvQvtCz0L580LzQuNC90YPQu9C40Ll80L/QvtC/0LXRgNC10LTQvdGW0Ll80L/QvtC/0LXRgNC10LTQvdGM0L7Qs9C+fNC90LDRgdGC0YPQv9C90L7Qs9C+fNC90LDRgdGC0YPQv9C90LjQuXzQvdCw0YHRgtGD0L/QvdC+0LzRgylcXFxccyopP2AgK1xuICAgICAgICAgICAgYCgke21hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGAoPzpcXFxccyooPzosfFxcXFwpfO+8iSkpP2AgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKijQvdCwfNGDfNCyKVxcXFxzKijRhtGM0L7QvNGDfNC80LjQvdGD0LvQvtC80YN80L3QsNGB0YLRg9C/0L3QvtC80YMpXFxcXHMq0YLQuNC20L3Rlik/YCk7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQgPT0gXCLQvNC40L3Rg9C70L7Qs9C+XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItC80LjQvdGD0LvQuNC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItC/0L7Qv9C10YDQtdC00L3RltC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItC/0L7Qv9C10YDQtdC00L3RjNC+0LPQvlwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcItC90LDRgdGC0YPQv9C90L7Qs9C+XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0L3QsNGB0YLRg9C/0L3QuNC5XCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwi0YbQtdC5XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0YbRjNC+0LPQvlwiIHx8IG1vZGlmaWVyV29yZCA9PSBcItGG0YzQvtC80YNcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1dlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBNT0RJRklFUl9XT1JEX0dST1VQID0gMTtcbmNvbnN0IFJFTEFUSVZFX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAo0LIg0LzQuNC90YPQu9C+0LzRg3zRgyDQvNC40L3Rg9C70L7QvNGDfNC90LAg0LzQuNC90YPQu9C+0LzRg3zQvNC40L3Rg9C70L7Qs9C+fNC90LAg0L3QsNGB0YLRg9C/0L3QvtC80YN80LIg0L3QsNGB0YLRg9C/0L3QvtC80YN80YMg0L3QsNGB0YLRg9C/0L3QvtC80YN80L3QsNGB0YLRg9C/0L3QvtCz0L580L3QsCDRhtGM0L7QvNGDfNCyINGG0YzQvtC80YN80YMg0YbRjNC+0LzRg3zRhtGM0L7Qs9C+KVxcXFxzKmAgK1xuICAgICAgICAgICAgYCgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KSg/PVxcXFxzKilgKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwi0L3QsCDQvdCw0YHRgtGD0L/QvdC+0LzRg1wiIHx8XG4gICAgICAgICAgICBtb2RpZmllciA9PSBcItCyINC90LDRgdGC0YPQv9C90L7QvNGDXCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyID09IFwi0YMg0L3QsNGB0YLRg9C/0L3QvtC80YNcIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXIgPT0gXCLQvdCw0YHRgtGD0L/QvdC+0LPQvlwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCLQvdCwINC80LjQvdGD0LvQvtC80YNcIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXIgPT0gXCLQsiDQvNC40L3Rg9C70L7QvNGDXCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyID09IFwi0YMg0LzQuNC90YPQu9C+0LzRg1wiIHx8XG4gICAgICAgICAgICBtb2RpZmllciA9PSBcItC80LjQvdGD0LvQvtCz0L5cIikge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gLTE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAodGltZXVuaXQubWF0Y2goL3dlZWsvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRpbWV1bml0Lm1hdGNoKC9tb250aC9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGltZXVuaXQubWF0Y2goL3llYXIvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1RpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCjRhtGWfNC+0YHRgtCw0L3QvdGWfNC80LjQvdGD0LvRlnzQvNCw0LnQsdGD0YLQvdGWfNC90LDRgdGC0YPQv9C90ZZ80L/RltGB0LvRj3zRh9C10YDQtdC3fFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSlgO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbM10pO1xuICAgICAgICBzd2l0Y2ggKHByZWZpeCkge1xuICAgICAgICAgICAgY2FzZSBcItC+0YHRgtCw0L3QvdGWXCI6XG4gICAgICAgICAgICBjYXNlIFwi0LzQuNC90YPQu9GWXCI6XG4gICAgICAgICAgICBjYXNlIFwiLVwiOlxuICAgICAgICAgICAgICAgIHRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCBVS1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFVLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBVa01vbnRoTmFtZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLTW9udGhOYW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgVUtUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBVS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFVLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1VLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgVUtNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9VS01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IFVLQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFVLQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IFVLV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFVLUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFVLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBVS0Nhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgVUtDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVrTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVLUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIodHJ1ZSksXG4gICAgICAgICAgICBuZXcgVUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFVLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVUtXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVUtUaW1lRXhwcmVzc2lvblBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBVS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFVLTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IFVLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcImRvbWVuaWNhXCI6IDAsXG4gICAgXCJkb21cIjogMCxcbiAgICBcImx1bmVkw6xcIjogMSxcbiAgICBcImx1blwiOiAxLFxuICAgIFwibWFydGVkw6xcIjogMixcbiAgICBcIm1hclwiOiAyLFxuICAgIFwibWVyY29sZWTDrFwiOiAzLFxuICAgIFwibWVyY1wiOiAzLFxuICAgIFwiZ2lvdmVkw6xcIjogNCxcbiAgICBcImdpb3ZcIjogNCxcbiAgICBcInZlbmVyZMOsXCI6IDUsXG4gICAgXCJ2ZW5cIjogNSxcbiAgICBcInNhYmF0b1wiOiA2LFxuICAgIFwic2FiXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZID0ge307XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICBcImdlbm5haW9cIjogMSxcbiAgICBcImdlblwiOiAxLFxuICAgIFwiZ2VuLlwiOiAxLFxuICAgIFwiZmViYnJhaW9cIjogMixcbiAgICBcImZlYlwiOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIFwiZmVicmFpb1wiOiAyLFxuICAgIFwiZmViYlwiOiAyLFxuICAgIFwiZmViYi5cIjogMixcbiAgICBcIm1hcnpvXCI6IDMsXG4gICAgXCJtYXJcIjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBcImFwcmlsZVwiOiA0LFxuICAgIFwiYXByXCI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAgXCJtYWdnaW9cIjogNSxcbiAgICBcIm1hZ1wiOiA1LFxuICAgIFwiZ2l1Z25vXCI6IDYsXG4gICAgXCJnaXVcIjogNixcbiAgICBcImx1Z2xpb1wiOiA3LFxuICAgIFwibHVnXCI6IDcsXG4gICAgXCJsdWdsXCI6IDcsXG4gICAgXCJsdWcuXCI6IDcsXG4gICAgXCJhZ29zdG9cIjogOCxcbiAgICBcImFnb1wiOiA4LFxuICAgIFwic2V0dGVtYnJlXCI6IDksXG4gICAgXCJzZXRcIjogOSxcbiAgICBcInNldC5cIjogOSxcbiAgICBcInNldHRcIjogOSxcbiAgICBcInNldHQuXCI6IDksXG4gICAgXCJvdHRvYnJlXCI6IDEwLFxuICAgIFwib3R0XCI6IDEwLFxuICAgIFwib3R0LlwiOiAxMCxcbiAgICBcIm5vdmVtYnJlXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImRpY2VtYnJlXCI6IDEyLFxuICAgIFwiZGljXCI6IDEyLFxuICAgIFwiZGljZVwiOiAxMixcbiAgICBcImRpYy5cIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IElOVEVHRVJfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIFwidW5vXCI6IDEsXG4gICAgXCJkdWVcIjogMixcbiAgICBcInRyZVwiOiAzLFxuICAgIFwicXVhdHRyb1wiOiA0LFxuICAgIFwiY2lucXVlXCI6IDUsXG4gICAgXCJzZWlcIjogNixcbiAgICBcInNldHRlXCI6IDcsXG4gICAgXCJvdHRvXCI6IDgsXG4gICAgXCJub3ZlXCI6IDksXG4gICAgXCJkaWVjaVwiOiAxMCxcbiAgICBcInVuZGljaVwiOiAxMSxcbiAgICBcImRvZGljaVwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJwcmltb1wiOiAxLFxuICAgIFwic2Vjb25kb1wiOiAyLFxuICAgIFwidGVyem9cIjogMyxcbiAgICBcInF1YXJ0b1wiOiA0LFxuICAgIFwicXVpbnRvXCI6IDUsXG4gICAgXCJzZXN0b1wiOiA2LFxuICAgIFwic2V0dGltb1wiOiA3LFxuICAgIFwib3R0YXZvXCI6IDgsXG4gICAgXCJub25vXCI6IDksXG4gICAgXCJkZWNpbW9cIjogMTAsXG4gICAgXCJ1bmRpY2VzaW1vXCI6IDExLFxuICAgIFwiZG9kaWNlc2ltb1wiOiAxMixcbiAgICBcInRyZWRpY2VzaW1vXCI6IDEzLFxuICAgIFwicXVhdHRvcmRpY2VzaW1vXCI6IDE0LFxuICAgIFwicXVpbmRpY2VzaW1vXCI6IDE1LFxuICAgIFwic2VkaWNlc2ltb1wiOiAxNixcbiAgICBcImRpY2lhc3NldHRlc2ltb1wiOiAxNyxcbiAgICBcImRpY2lvdHRlc2ltb1wiOiAxOCxcbiAgICBcImRpY2lhbm5vdmVzaW1vXCI6IDE5LFxuICAgIFwidmVudGVzaW1vXCI6IDIwLFxuICAgIFwidmVudHVuZXNpbW9cIjogMjEsXG4gICAgXCJ2ZW50aWR1ZXNpbW9cIjogMjIsXG4gICAgXCJ2ZW50aXRyZWVzaW1vXCI6IDIzLFxuICAgIFwidmVudGlxdWF0dHJlc2ltb1wiOiAyNCxcbiAgICBcInZlbnRpY2lucXVlc2ltb1wiOiAyNSxcbiAgICBcInZlbnRpc2VpZXNpbW9cIjogMjYsXG4gICAgXCJ2ZW50aXNldHRlc2ltb1wiOiAyNyxcbiAgICBcInZlbnRvdHRlc2ltb1wiOiAyOCxcbiAgICBcInZlbnRpbm92ZXNpbW9cIjogMjksXG4gICAgXCJ0cmVudGVzaW1vXCI6IDMwLFxuICAgIFwidHJlbnR1bmVzaW1vXCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICBcInNlY1wiOiBcInNlY29uZFwiLFxuICAgIFwic2Vjb25kb1wiOiBcInNlY29uZFwiLFxuICAgIFwic2Vjb25kaVwiOiBcInNlY29uZFwiLFxuICAgIFwibWluXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW5zXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dGlcIjogXCJtaW51dGVcIixcbiAgICBcImhcIjogXCJob3VyXCIsXG4gICAgXCJoclwiOiBcImhvdXJcIixcbiAgICBcIm9cIjogXCJob3VyXCIsXG4gICAgXCJvcmFcIjogXCJob3VyXCIsXG4gICAgXCJvcmVcIjogXCJob3VyXCIsXG4gICAgXCJnaW9ybm9cIjogXCJkYXlcIixcbiAgICBcImdpb3JuaVwiOiBcImRheVwiLFxuICAgIFwic2V0dGltYW5hXCI6IFwid2Vla1wiLFxuICAgIFwic2V0dGltYW5lXCI6IFwid2Vla1wiLFxuICAgIFwibWVzZVwiOiBcIm1vbnRoXCIsXG4gICAgXCJ0cmltZXN0cmVcIjogXCJxdWFydGVyXCIsXG4gICAgXCJ0cmltZXN0cmlcIjogXCJxdWFydGVyXCIsXG4gICAgXCJhbm5pXCI6IFwieWVhclwiLFxuICAgIFwiYW5ub1wiOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt8aGFsZig/OlxcXFxzezAsMn11bj8pP3x1bj9cXFxcYig/OlxcXFxzezAsMn1xdWFsY3Vubyk/fHF1YWxjdW5vfG1vbHRpfGE/XFxcXHN7MCwyfWFsY3VuaVxcXFxzezAsMn0oPzpvZik/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwidW5cIiB8fCBudW0gPT09IFwidW5hXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvYWxjdW5pLykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvbWV0w6EvKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3BhaW8vKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9tb2x0aS8pKSB7XG4gICAgICAgIHJldHVybiA3O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XXsxLDJ9KD86bW98bmRvfHJ6b3xzaW1vfGVzaW1vKT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgbGV0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgbnVtID0gbnVtLnJlcGxhY2UoLyg/Omltb3xuZG98cnpvfHJ0b3xudG98c3RvfHRhdm98bm9ub3xjaW1vfHRpbW98ZXNpbW8pJC9pLCBcIlwiKTtcbiAgICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBZRUFSX1BBVFRFUk4gPSBgKD86WzEtOV1bMC05XXswLDN9XFxcXHN7MCwyfSg/OkJFfEFEfEJDfEJDRXxDRSl8WzEtMl1bMC05XXszfXxbNS05XVswLTldKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9CRS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvQkUvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCkgLSA1NDM7XG4gICAgfVxuICAgIGlmICgvQkNFPy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvQkNFPy9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGlmICgvKEFEfENFKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKEFEfENFKS9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgY29uc3QgcmF3WWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICByZXR1cm4gZmluZE1vc3RMaWtlbHlBRFllYXIocmF3WWVhck51bWJlcik7XG59XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4gPSBgKCR7TlVNQkVSX1BBVFRFUk59KVxcXFxzezAsM30oJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OmFib3V0fGFyb3VuZClcXFxcc3swLDN9KT9gLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOX1dJVEhfUFJFRklYID0gbmV3IFJlZ0V4cChgKD86d2l0aGlufGlufGZvcilcXFxccypgICtcbiAgICBgKD86KD86cGnDuSBvIG1lbm98aW50b3Jub3xhcHByb3NzaW1hdGl2YW1lbnRlfHZlcnNvfHZlcnNvIGxlKVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fV0lUSE9VVF9QUkVGSVggPSBuZXcgUmVnRXhwKGAoPzooPzpwacO5IG8gbWVub3xpbnRvcm5vfGFwcHJvc3NpbWF0aXZhbWVudGV8dmVyc298dmVyc28gbGUpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gY29udGV4dC5vcHRpb24uZm9yd2FyZERhdGUgPyBQQVRURVJOX1dJVEhPVVRfUFJFRklYIDogUEFUVEVSTl9XSVRIX1BSRUZJWDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKD86b25cXFxcc3swLDN9KT9gICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgYCg/OmAgK1xuICAgIGBcXFxcc3swLDN9KD86YWx8XFxcXC18XFxcXOKAk3xmaW5vfGFsbGV8YWxsbyk/XFxcXHN7MCwzfWAgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICBcIik/XCIgK1xuICAgIGAoPzotfC98XFxcXHN7MCwzfSg/OmRhbCk/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlwiICtcbiAgICBgKD86LXwvfCw/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7WUVBUl9QQVRURVJOfSg/IVteXFxcXHNdXFxcXGQpKWAgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzotfC98XFxcXHMqLD9cXFxccyopXCIgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSkoPyFcXFxccyooPzphbXxwbSkpXFxcXHMqYCArXG4gICAgXCIoPzpcIiArXG4gICAgXCIoPzphbHxcXFxcLXxcXFxcYWxsZXxcXFxcZGVsfFxcXFxzKVxcXFxzKlwiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pXFxcXHMqYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/OlwiICtcbiAgICBcIig/Oi18L3xcXFxccyosP1xcXFxzKilcIiArXG4gICAgYCgke1lFQVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpKD8hXFxcXDpcXFxcZClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX0dST1VQID0gMjtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cyh7XG4gICAgICAgICAgICBkYXk6IGRheSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfVE9fR1JPVVBdKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIHJlc3VsdC5zdGFydCA9IGNvbXBvbmVudHM7XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjb21wb25lbnRzLmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiZGF5XCIsIGVuZERhdGUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZLCBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgoPzppbilcXFxccyopP2AgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGBcXFxccypgICtcbiAgICBgKD86YCArXG4gICAgYFssLV0/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSk/YCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVteXFxcXHNcXFxcd118XFxcXHMrW14wLTldfFxcXFxzKyR8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAyO1xuY29uc3QgWUVBUl9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA8PSAzICYmICFGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWVttb250aE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXggKyAobWF0Y2hbUFJFRklYX0dST1VQXSB8fCBcIlwiKS5sZW5ndGgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lXTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgMSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTW9udGhOYW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezR9KVtcXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYCg/Oigke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pfChbMC05XXsxLDJ9KSlbXFxcXC5cXFxcL1xcXFxzXWAgK1xuICAgIGAoWzAtOV17MSwyfSlgICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfTlVNQkVSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTlVNQkVSX0dST1VQID0gMztcbmNvbnN0IERBVEVfTlVNQkVSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aCA9IG1hdGNoW01PTlRIX05VTUJFUl9HUk9VUF1cbiAgICAgICAgICAgID8gcGFyc2VJbnQobWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXSlcbiAgICAgICAgICAgIDogTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFURV9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICAgICAgeWVhcjogeWVhcixcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVENhc3VhbFllYXJNb250aERheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFswLTldfDBbMS05XXwxWzAxMl0pLyhbMC05XXs0fSlcIiArIFwiXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCkuaW1wbHkoXCJkYXlcIiwgMSkuYXNzaWduKFwibW9udGhcIiwgbW9udGgpLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRTbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKHN0cmljdE1vZGUpO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfHRvfFxcXFw/KVxcXFxzKlwiO1xuICAgIH1cbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzphbGxlfGRhbGxlKVxcXFxzKik/P1wiO1xuICAgIH1cbiAgICBwcmltYXJ5U3VmZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzpcXFxccyooPzppbiBwdW50b3xvXFxcXFcqaW4gcHVudG98KD86ZGl8ZGVsfGRlbGxhfGlufGFsfGFsbGF8YWxsZSlcXFxccyooPzptYXR0aW5hfHBvbWVyaWdnaW98c2VyYSkpKT8oPyEvKSg/PVxcXFxXfCQpXCI7XG4gICAgfVxuICAgIGV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwic2VyYVwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcInBvbWVyaWdnaW9cIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID49IDAgJiYgaG91ciA8PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwibWF0dGluYVwiKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgY29tcG9uZW50cy5nZXQoXCJob3VyXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmZhfHByaW1hfHByZWNlZGVudGUpKD89KD86XFxcXFd8JCkpYCwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHtUSU1FX1VOSVRTX1BBVFRFUk59KVxcXFxzezAsNX1mYSg/PSg/OlxcXFxXfCQpKWAsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBvdXRwdXRUaW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgb3V0cHV0VGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVFRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmRvcG98cGnDuSB0YXJkaXxkYSBhZGVzc298YXZhbnRpfG9sdHJlfGEgc2VndWlyZSlgICsgXCIoPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIoZG9wb3xwacO5IHRhcmRpKVwiICsgXCIoPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuY29uc3QgR1JPVVBfTlVNX1RJTUVVTklUUyA9IDE7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbR1JPVVBfTlVNX1RJTUVVTklUU10pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBmcmFnbWVudHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoodG98LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHxhbGxlfGRvcG98cHJpbWF8aWx8ZGl8ZGVsfGRlbGxlfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyhvcmF8b2dnaXxzdGFzZXJhfHF1ZXN0YSBzZXJhfGRvbWFuaXxkbW58aWVyaVxccypzZXJhKSg/PVxcV3wkKS9pO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSVRDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJvcmFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm9nZ2lcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaWVyaVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiZG9tYW5pXCI6XG4gICAgICAgICAgICBjYXNlIFwiZG1uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcInN0YXNlcmFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJxdWVzdGEgc2VyYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbmlnaHQoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC9pZXJpXFxzKnNlcmEvKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0RGF0ZS5nZXRIb3VycygpID4gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNEYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0RheS5zZXREYXRlKHByZXZpb3VzRGF5LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IHByZXZpb3VzRGF5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyg/OnF1ZXN0b3xxdWVzdGEpP1xcc3swLDN9KG1hdHRpbmF8cG9tZXJpZ2dpb3xzZXJhfG5vdHRlfG1lenphbm90dGV8bWV6em9naW9ybm8pKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVENhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChtYXRjaFsxXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwicG9tZXJpZ2dpb1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzZXJhXCI6XG4gICAgICAgICAgICBjYXNlIFwibm90dGVcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWV6emFub3R0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1hdHRpbmFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZXp6b2dpb3Jub1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86aWxcXFxccyo/KT9cIiArXG4gICAgXCIoPzoocXVlc3RhfGwndWx0aW1hfHNjb3JzYXxwcm9zc2ltYSlcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihxdWVzdGF8bCd1bHRpbWF8c2NvcnNhfHByb3NzaW1hKVxcXFxzKnNldHRpbWFuYSk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcInVsdGltYVwiIHx8IG1vZGlmaWVyV29yZCA9PSBcInNjb3JzYVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidWx0aW1hXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwicHJvc3NpbWFcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInByb3NzaW1hXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwicXVlc3RhXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJxdWVzdGFcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVFdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKHF1ZXN0b3x1bHRpbW98c2NvcnNvfHByb3NzaW1vfGRvcG9cXFxccypxdWVzdG98cXVlc3RhfHVsdGltYXxzY29yc2F8cHJvc3NpbWFcXFxccypxdWVzdGEpXFxcXHMqKCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pKD89XFxcXHMqKWAgKyBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IE1PRElGSUVSX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgUkVMQVRJVkVfV09SRF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBtYXRjaFtNT0RJRklFUl9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB1bml0V29yZCA9IG1hdGNoW1JFTEFUSVZFX1dPUkRfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWV1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbdW5pdFdvcmRdO1xuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCJwcm9zc2ltb1wiIHx8IG1vZGlmaWVyLnN0YXJ0c1dpdGgoXCJkb3BvXCIpKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCJwcmltYVwiIHx8IG1vZGlmaWVyID09IFwicHJlY2VkZW50ZVwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh1bml0V29yZC5tYXRjaCgvc2V0dGltYW5hL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0V29yZC5tYXRjaCgvbWVzZS9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL2Fubm8vaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKHF1ZXN0b3x1bHRpbW98cGFzc2F0b3xwcm9zc2ltb3xkb3BvfHF1ZXN0YXx1bHRpbWF8cGFzc2F0YXxwcm9zc2ltYXxcXFxcK3wtKVxcXFxzKigke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsYXN0XCI6XG4gICAgICAgICAgICBjYXNlIFwicGFzdFwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5mdW5jdGlvbiBoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKHByaW1hfGRhbCkkL2kpICE9IG51bGw7XG59XG5mdW5jdGlvbiBoYXNJbXBsaWVkTGF0ZXJSZWZlcmVuY2VEYXRlKHJlc3VsdCkge1xuICAgIHJldHVybiByZXN1bHQudGV4dC5tYXRjaCgvXFxzKyhkb3BvfGRhbHxmaW5vKSQvaSkgIT0gbnVsbDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VSZWxhdGl2ZURhdGVSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqJC9pO1xuICAgIH1cbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgaWYgKCF0ZXh0QmV0d2Vlbi5tYXRjaCh0aGlzLnBhdHRlcm5CZXR3ZWVuKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUoY3VycmVudFJlc3VsdCkgJiYgIWhhc0ltcGxpZWRMYXRlclJlZmVyZW5jZURhdGUoY3VycmVudFJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISFuZXh0UmVzdWx0LnN0YXJ0LmdldChcImRheVwiKSAmJiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwibW9udGhcIikgJiYgISFuZXh0UmVzdWx0LnN0YXJ0LmdldChcInllYXJcIik7XG4gICAgfVxuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBsZXQgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihjdXJyZW50UmVzdWx0LnRleHQpO1xuICAgICAgICBpZiAoaGFzSW1wbGllZEVhcmxpZXJSZWZlcmVuY2VEYXRlKGN1cnJlbnRSZXN1bHQpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tRGF0ZShuZXh0UmVzdWx0LnN0YXJ0LmRhdGUoKSksIHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2luZ1Jlc3VsdChuZXh0UmVzdWx0LnJlZmVyZW5jZSwgY3VycmVudFJlc3VsdC5pbmRleCwgYCR7Y3VycmVudFJlc3VsdC50ZXh0fSR7dGV4dEJldHdlZW59JHtuZXh0UmVzdWx0LnRleHR9YCwgY29tcG9uZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRNZXJnZVJlbGF0aXZlRGF0ZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IEVOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSVRNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFTk1vbnRoTmFtZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUTW9udGhOYW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5DYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVENhc3VhbFllYXJNb250aERheVBhcnNlci5qc1wiO1xuaW1wb3J0IEVOU2xhc2hNb250aEZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUU2xhc2hNb250aEZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEVOVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9JVE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEVOTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSVRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCBFTkNhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBFTkNhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVENhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBFTldlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBJVFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlUmVsYXRpdmVEYXRlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9JVE1lcmdlUmVsYXRpdmVEYXRlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlLCBmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IEdCID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCB0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRU5DYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEVOQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBFTk1vbnRoTmFtZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBJVFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVOV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVOQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5UaW1lRXhwcmVzc2lvblBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgbmV3IEVOVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgRU5NZXJnZVJlbGF0aXZlRGF0ZVJlZmluZXIoKSwgbmV3IEVOTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcInPDtm5kYWdcIjogMCxcbiAgICBcInPDtm5cIjogMCxcbiAgICBcInNvXCI6IDAsXG4gICAgXCJtw6VuZGFnXCI6IDEsXG4gICAgXCJtw6VuXCI6IDEsXG4gICAgXCJtw6VcIjogMSxcbiAgICBcInRpc2RhZ1wiOiAyLFxuICAgIFwidGlzXCI6IDIsXG4gICAgXCJ0aVwiOiAyLFxuICAgIFwib25zZGFnXCI6IDMsXG4gICAgXCJvbnNcIjogMyxcbiAgICBcIm9uXCI6IDMsXG4gICAgXCJ0b3JzZGFnXCI6IDQsXG4gICAgXCJ0b3JzXCI6IDQsXG4gICAgXCJ0b1wiOiA0LFxuICAgIFwiZnJlZGFnXCI6IDUsXG4gICAgXCJmcmVcIjogNSxcbiAgICBcImZyXCI6IDUsXG4gICAgXCJsw7ZyZGFnXCI6IDYsXG4gICAgXCJsw7ZyXCI6IDYsXG4gICAgXCJsw7ZcIjogNixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICBcImphbnVhcmlcIjogMSxcbiAgICBcImphblwiOiAxLFxuICAgIFwiamFuLlwiOiAxLFxuICAgIFwiZmVicnVhcmlcIjogMixcbiAgICBcImZlYlwiOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIFwibWFyc1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhcHJpbFwiOiA0LFxuICAgIFwiYXByXCI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAgXCJtYWpcIjogNSxcbiAgICBcImp1bmlcIjogNixcbiAgICBcImp1blwiOiA2LFxuICAgIFwianVuLlwiOiA2LFxuICAgIFwianVsaVwiOiA3LFxuICAgIFwianVsXCI6IDcsXG4gICAgXCJqdWwuXCI6IDcsXG4gICAgXCJhdWd1c3RpXCI6IDgsXG4gICAgXCJhdWdcIjogOCxcbiAgICBcImF1Zy5cIjogOCxcbiAgICBcInNlcHRlbWJlclwiOiA5LFxuICAgIFwic2VwXCI6IDksXG4gICAgXCJzZXAuXCI6IDksXG4gICAgXCJzZXB0XCI6IDksXG4gICAgXCJva3RvYmVyXCI6IDEwLFxuICAgIFwib2t0XCI6IDEwLFxuICAgIFwib2t0LlwiOiAxMCxcbiAgICBcIm5vdmVtYmVyXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImRlY2VtYmVyXCI6IDEyLFxuICAgIFwiZGVjXCI6IDEyLFxuICAgIFwiZGVjLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfRElDVElPTkFSWSA9IHtcbiAgICBcImbDtnJzdGFcIjogMSxcbiAgICBcImFuZHJhXCI6IDIsXG4gICAgXCJ0cmVkamVcIjogMyxcbiAgICBcImZqw6RyZGVcIjogNCxcbiAgICBcImZlbXRlXCI6IDUsXG4gICAgXCJzasOkdHRlXCI6IDYsXG4gICAgXCJzanVuZGVcIjogNyxcbiAgICBcIsOldHRvbmRlXCI6IDgsXG4gICAgXCJuaW9uZGVcIjogOSxcbiAgICBcInRpb25kZVwiOiAxMCxcbiAgICBcImVsZnRlXCI6IDExLFxuICAgIFwidG9sZnRlXCI6IDEyLFxuICAgIFwidHJldHRvbmRlXCI6IDEzLFxuICAgIFwiZmpvcnRvbmRlXCI6IDE0LFxuICAgIFwiZmVtdG9uZGVcIjogMTUsXG4gICAgXCJzZXh0b25kZVwiOiAxNixcbiAgICBcInNqdXR0b25kZVwiOiAxNyxcbiAgICBcImFydG9uZGVcIjogMTgsXG4gICAgXCJuaXR0b25kZVwiOiAxOSxcbiAgICBcInRqdWdvbmRlXCI6IDIwLFxuICAgIFwidGp1Z29mw7Zyc3RhXCI6IDIxLFxuICAgIFwidGp1Z29hbmRyYVwiOiAyMixcbiAgICBcInRqdWdvdHJlZGplXCI6IDIzLFxuICAgIFwidGp1Z29masOkcmRlXCI6IDI0LFxuICAgIFwidGp1Z29mZW10ZVwiOiAyNSxcbiAgICBcInRqdWdvc2rDpHR0ZVwiOiAyNixcbiAgICBcInRqdWdvc2p1bmRlXCI6IDI3LFxuICAgIFwidGp1Z2/DpXR0b25kZVwiOiAyOCxcbiAgICBcInRqdWdvbmlvbmRlXCI6IDI5LFxuICAgIFwidHJldHRpb25kZVwiOiAzMCxcbiAgICBcInRyZXR0aW9mw7Zyc3RhXCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcImVuXCI6IDEsXG4gICAgXCJldHRcIjogMSxcbiAgICBcInR2w6VcIjogMixcbiAgICBcInRyZVwiOiAzLFxuICAgIFwiZnlyYVwiOiA0LFxuICAgIFwiZmVtXCI6IDUsXG4gICAgXCJzZXhcIjogNixcbiAgICBcInNqdVwiOiA3LFxuICAgIFwiw6V0dGFcIjogOCxcbiAgICBcIm5pb1wiOiA5LFxuICAgIFwidGlvXCI6IDEwLFxuICAgIFwiZWx2YVwiOiAxMSxcbiAgICBcInRvbHZcIjogMTIsXG4gICAgXCJ0cmV0dG9uXCI6IDEzLFxuICAgIFwiZmpvcnRvblwiOiAxNCxcbiAgICBcImZlbXRvblwiOiAxNSxcbiAgICBcInNleHRvblwiOiAxNixcbiAgICBcInNqdXR0b25cIjogMTcsXG4gICAgXCJhcnRvblwiOiAxOCxcbiAgICBcIm5pdHRvblwiOiAxOSxcbiAgICBcInRqdWdvXCI6IDIwLFxuICAgIFwidHJldHRp0L5cIjogMzAsXG4gICAgXCJmeXJ0aW9cIjogNDAsXG4gICAgXCJmZW10aW9cIjogNTAsXG4gICAgXCJzZXh0aW9cIjogNjAsXG4gICAgXCJzanV0dGlvXCI6IDcwLFxuICAgIFwiw6V0dGlvXCI6IDgwLFxuICAgIFwibml0dGlvXCI6IDkwLFxuICAgIFwiaHVuZHJhXCI6IDEwMCxcbiAgICBcInR1c2VuXCI6IDEwMDAsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VrXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bmRcIjogXCJzZWNvbmRcIixcbiAgICBcInNla3VuZGVyXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW5cIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0XCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dGVyXCI6IFwibWludXRlXCIsXG4gICAgXCJ0aW1cIjogXCJob3VyXCIsXG4gICAgXCJ0aW1tZVwiOiBcImhvdXJcIixcbiAgICBcInRpbW1hclwiOiBcImhvdXJcIixcbiAgICBcImRhZ1wiOiBcImRheVwiLFxuICAgIFwiZGFnYXJcIjogXCJkYXlcIixcbiAgICBcInZlY2thXCI6IFwid2Vla1wiLFxuICAgIFwidmVja29yXCI6IFwid2Vla1wiLFxuICAgIFwibcOlblwiOiBcIm1vbnRoXCIsXG4gICAgXCJtw6VuYWRcIjogXCJtb250aFwiLFxuICAgIFwibcOlbmFkZXJcIjogXCJtb250aFwiLFxuICAgIFwiw6VyXCI6IFwieWVhclwiLFxuICAgIFwia3ZhcnTQsGxcIjogXCJxdWFydGVyXCIsXG4gICAgXCJrdmFydGFsXCI6IFwicXVhcnRlclwiLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfTk9fQUJCUl9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VrdW5kXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bmRlclwiOiBcInNlY29uZFwiLFxuICAgIFwibWludXRcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0ZXJcIjogXCJtaW51dGVcIixcbiAgICBcInRpbW1lXCI6IFwiaG91clwiLFxuICAgIFwidGltbWFyXCI6IFwiaG91clwiLFxuICAgIFwiZGFnXCI6IFwiZGF5XCIsXG4gICAgXCJkYWdhclwiOiBcImRheVwiLFxuICAgIFwidmVja2FcIjogXCJ3ZWVrXCIsXG4gICAgXCJ2ZWNrb3JcIjogXCJ3ZWVrXCIsXG4gICAgXCJtw6VuYWRcIjogXCJtb250aFwiLFxuICAgIFwibcOlbmFkZXJcIjogXCJtb250aFwiLFxuICAgIFwiw6VyXCI6IFwieWVhclwiLFxuICAgIFwia3ZhcnRhbFwiOiBcInF1YXJ0ZXJcIixcbn07XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18XFxcXGQrKWA7XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihPUkRJTkFMX05VTUJFUl9ESUNUSU9OQVJZKX18XFxcXGR7MSwyfSg/OmV8OmUpKWA7XG5leHBvcnQgY29uc3QgVElNRV9VTklUX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkpfSlcXFxcc3swLDV9YDtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9OT19BQkJSX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfTlVNQkVSX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX05VTUJFUl9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUludChudW0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmICgvXFxkKy8udGVzdChtYXRjaCkpIHtcbiAgICAgICAgbGV0IHllYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgICAgICB5ZWFyTnVtYmVyID0gZmluZE1vc3RMaWtlbHlBRFllYXIoeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXJOdW1iZXI7XG4gICAgfVxuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86cMOlXFxcXHMqPyk/XCIgK1xuICAgIFwiKD86KGbDtnJyYXxzZW5hc3RlfG7DpHN0YXxrb21tYW5kZSlcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihmw7ZycmF8c2VuYXN0ZXxuw6RzdGF8a29tbWFuZGUpXFxcXHMqdmVja2EpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBTVUZGSVhfR1JPVVAgPSAzO1xuY29uc3QgV0VFS0RBWV9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTVldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfRElDVElPTkFSWVtkYXlPZldlZWtdO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfR1JPVVBdO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gbWF0Y2hbU1VGRklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQubWF0Y2goL2bDtnJyYXxzZW5hc3RlLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9uw6RzdGF8a29tbWFuZGUvKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIG9mZnNldCwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNWV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86ZGVuXFxcXHMqPyk/XCIgK1xuICAgIGAoWzAtOV17MSwyfSlgICtcbiAgICBgKD86XFxcXHMqKD86dGlsbHxcXFxcLXxcXFxc4oCTfFxcXFxzKVxcXFxzKihbMC05XXsxLDJ9KSk/XFxcXHMqYCArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgYCg/Oig/Oi18L3wsP1xcXFxzKikoWzAtOV17NH0oPyFbXlxcXFxzXVxcXFxkKSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU1ZNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoZGVubmF8ZGVuIGjDpHJ8ZsO2cnJhfHBhc3NlcmFkZXxuw6RzdGF8a29tbWFuZGV8ZWZ0ZXJ8XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUEFUVEVSTl9OT19BQkJSID0gbmV3IFJlZ0V4cChgKGRlbm5hfGRlbiBow6RyfGbDtnJyYXxwYXNzZXJhZGV8bsOkc3RhfGtvbW1hbmRlfGVmdGVyfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU1ZUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGFsbG93QWJicmV2aWF0aW9ucztcbiAgICBjb25zdHJ1Y3RvcihhbGxvd0FiYnJldmlhdGlvbnMgPSB0cnVlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID0gYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbG93QWJicmV2aWF0aW9ucyA/IFBBVFRFUk4gOiBQQVRURVJOX05PX0FCQlI7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJmw7ZycmFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwYXNzZXJhZGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCItXCI6XG4gICAgICAgICAgICAgICAgZHVyYXRpb24gPSByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIGR1cmF0aW9uKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAobnV8aWRhZ3xpbW9yZ29ufMO2dmVybW9yZ29ufGlnw6VyfGbDtnJyZ8OlcnxpXFxcXHMqZsO2cnJnw6VyKWAgK1xuICAgIGAoPzpcXFxccyooPzpww6VcXFxccyopPyhtb3Jnb25lbj98ZsO2cm1pZGRhZ2VuP3xtaWRkYWdlbj98ZWZ0ZXJtaWRkYWdlbj98a3bDpGxsZW4/fG5hdHRlbj98bWlkbmF0dCkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgVElNRV9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTVkNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBkYXRlS2V5d29yZCA9IChtYXRjaFtEQVRFX0dST1VQXSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1lS2V5d29yZCA9IChtYXRjaFtUSU1FX0dST1VQXSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGRhdGVLZXl3b3JkKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWRhZ1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImltb3Jnb25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJpbW9yblwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWfDpXJcIjpcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0RheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0RheS5zZXREYXRlKHByZXZpb3VzRGF5LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgcHJldmlvdXNEYXkpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBwcmV2aW91c0RheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZsO2cnJnw6VyXCI6XG4gICAgICAgICAgICBjYXNlIFwiaSBmw7ZycmfDpXJcIjpcbiAgICAgICAgICAgICAgICBjb25zdCB0d29EYXlzQWdvID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgIHR3b0RheXNBZ28uc2V0RGF0ZSh0d29EYXlzQWdvLmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdHdvRGF5c0Fnbyk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHR3b0RheXNBZ28pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodGltZUtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJtb3Jnb25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJtb3Jnb25lblwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJmw7ZybWlkZGFnXCI6XG4gICAgICAgICAgICBjYXNlIFwiZsO2cm1pZGRhZ2VuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ2VuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJlZnRlcm1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcImVmdGVybWlkZGFnZW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImt2w6RsbFwiOlxuICAgICAgICAgICAgY2FzZSBcImt2w6RsbGVuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJuYXR0XCI6XG4gICAgICAgICAgICBjYXNlIFwibmF0dGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwibWlkbmF0dFwiOlxuICAgICAgICAgICAgICAgIGlmICh0aW1lS2V5d29yZCA9PT0gXCJtaWRuYXR0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVkNhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgU1ZXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvU1ZXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgU1ZNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9TVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFNWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1NWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFNWQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1NWQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgU1ZDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBTVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFNWV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFNWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW10sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzprbG98a2VsbG8pXFxcXHMqKT9cIjtcbiAgICB9XG4gICAgZm9sbG93aW5nUGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBcIlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnClcXFxccypcIjtcbiAgICB9XG4gICAgZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15cXHMqXFxkezR9XFxzKiQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcInN1bm51bnRhaVwiOiAwLFxuICAgIFwic3VubnVudGFpbmFcIjogMCxcbiAgICBcInN1XCI6IDAsXG4gICAgXCJtYWFuYW50YWlcIjogMSxcbiAgICBcIm1hYW5hbnRhaW5hXCI6IDEsXG4gICAgXCJtYVwiOiAxLFxuICAgIFwidGlpc3RhaVwiOiAyLFxuICAgIFwidGlpc3RhaW5hXCI6IDIsXG4gICAgXCJ0aVwiOiAyLFxuICAgIFwia2Vza2l2aWlra29cIjogMyxcbiAgICBcImtlc2tpdmlpa2tvbmFcIjogMyxcbiAgICBcImtlXCI6IDMsXG4gICAgXCJ0b3JzdGFpXCI6IDQsXG4gICAgXCJ0b3JzdGFpbmFcIjogNCxcbiAgICBcInRvXCI6IDQsXG4gICAgXCJwZXJqYW50YWlcIjogNSxcbiAgICBcInBlcmphbnRhaW5hXCI6IDUsXG4gICAgXCJwZVwiOiA1LFxuICAgIFwibGF1YW50YWlcIjogNixcbiAgICBcImxhdWFudGFpbmFcIjogNixcbiAgICBcImxhXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ0YW1taWt1dVwiOiAxLFxuICAgIFwidGFtbWlrdXV0YVwiOiAxLFxuICAgIFwidGFtbWlrdXVuXCI6IDEsXG4gICAgXCJ0YW1taVwiOiAxLFxuICAgIFwiaGVsbWlrdXVcIjogMixcbiAgICBcImhlbG1pa3V1dGFcIjogMixcbiAgICBcImhlbG1pa3V1blwiOiAyLFxuICAgIFwiaGVsbWlcIjogMixcbiAgICBcIm1hYWxpc2t1dVwiOiAzLFxuICAgIFwibWFhbGlza3V1dGFcIjogMyxcbiAgICBcIm1hYWxpc2t1dW5cIjogMyxcbiAgICBcIm1hYWxpc1wiOiAzLFxuICAgIFwiaHVodGlrdXVcIjogNCxcbiAgICBcImh1aHRpa3V1dGFcIjogNCxcbiAgICBcImh1aHRpa3V1blwiOiA0LFxuICAgIFwiaHVodGlcIjogNCxcbiAgICBcInRvdWtva3V1XCI6IDUsXG4gICAgXCJ0b3Vrb2t1dXRhXCI6IDUsXG4gICAgXCJ0b3Vrb2t1dW5cIjogNSxcbiAgICBcInRvdWtvXCI6IDUsXG4gICAgXCJrZXPDpGt1dVwiOiA2LFxuICAgIFwia2Vzw6RrdXV0YVwiOiA2LFxuICAgIFwia2Vzw6RrdXVuXCI6IDYsXG4gICAgXCJrZXPDpFwiOiA2LFxuICAgIFwiaGVpbsOka3V1XCI6IDcsXG4gICAgXCJoZWluw6RrdXV0YVwiOiA3LFxuICAgIFwiaGVpbsOka3V1blwiOiA3LFxuICAgIFwiaGVpbsOkXCI6IDcsXG4gICAgXCJlbG9rdXVcIjogOCxcbiAgICBcImVsb2t1dXRhXCI6IDgsXG4gICAgXCJlbG9rdXVuXCI6IDgsXG4gICAgXCJlbG9cIjogOCxcbiAgICBcInN5eXNrdXVcIjogOSxcbiAgICBcInN5eXNrdXV0YVwiOiA5LFxuICAgIFwic3l5c2t1dW5cIjogOSxcbiAgICBcInN5eXNcIjogOSxcbiAgICBcImxva2FrdXVcIjogMTAsXG4gICAgXCJsb2tha3V1dGFcIjogMTAsXG4gICAgXCJsb2tha3V1blwiOiAxMCxcbiAgICBcImxva2FcIjogMTAsXG4gICAgXCJtYXJyYXNrdXVcIjogMTEsXG4gICAgXCJtYXJyYXNrdXV0YVwiOiAxMSxcbiAgICBcIm1hcnJhc2t1dW5cIjogMTEsXG4gICAgXCJtYXJyYXNcIjogMTEsXG4gICAgXCJqb3VsdWt1dVwiOiAxMixcbiAgICBcImpvdWx1a3V1dGFcIjogMTIsXG4gICAgXCJqb3VsdWt1dW5cIjogMTIsXG4gICAgXCJqb3VsdVwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ5a3NpXCI6IDEsXG4gICAgXCJ5aGRlblwiOiAxLFxuICAgIFwia2Frc2lcIjogMixcbiAgICBcImthaGRlblwiOiAyLFxuICAgIFwia29sbWVcIjogMyxcbiAgICBcImtvbG1lblwiOiAzLFxuICAgIFwibmVsasOkXCI6IDQsXG4gICAgXCJuZWxqw6RuXCI6IDQsXG4gICAgXCJ2aWlzaVwiOiA1LFxuICAgIFwidmlpZGVuXCI6IDUsXG4gICAgXCJrdXVzaVwiOiA2LFxuICAgIFwia3V1ZGVuXCI6IDYsXG4gICAgXCJzZWl0c2Vtw6RuXCI6IDcsXG4gICAgXCJrYWhkZWtzYW5cIjogOCxcbiAgICBcInloZGVrc8OkblwiOiA5LFxuICAgIFwia3ltbWVuZW5cIjogMTAsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic1wiOiBcInNlY29uZFwiLFxuICAgIFwic2VrXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bnRpXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bnRpYVwiOiBcInNlY29uZFwiLFxuICAgIFwic2VrdW5uaW5cIjogXCJzZWNvbmRcIixcbiAgICBcIm1pblwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0dGlcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV1dHRpYVwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0aW5cIjogXCJtaW51dGVcIixcbiAgICBcInRcIjogXCJob3VyXCIsXG4gICAgXCJ0dW50aVwiOiBcImhvdXJcIixcbiAgICBcInR1bnRpYVwiOiBcImhvdXJcIixcbiAgICBcInR1bm5pblwiOiBcImhvdXJcIixcbiAgICBcInB2XCI6IFwiZGF5XCIsXG4gICAgXCJww6RpdsOkXCI6IFwiZGF5XCIsXG4gICAgXCJww6RpdsOkw6RcIjogXCJkYXlcIixcbiAgICBcInDDpGl2w6RuXCI6IFwiZGF5XCIsXG4gICAgXCJ2a1wiOiBcIndlZWtcIixcbiAgICBcInZpaWtrb1wiOiBcIndlZWtcIixcbiAgICBcInZpaWtrb2FcIjogXCJ3ZWVrXCIsXG4gICAgXCJ2aWlrb25cIjogXCJ3ZWVrXCIsXG4gICAgXCJra1wiOiBcIm1vbnRoXCIsXG4gICAgXCJrdXVrYXVzaVwiOiBcIm1vbnRoXCIsXG4gICAgXCJrdXVrYXV0dGFcIjogXCJtb250aFwiLFxuICAgIFwia3V1a2F1ZGVuXCI6IFwibW9udGhcIixcbiAgICBcInZ1b3NpXCI6IFwieWVhclwiLFxuICAgIFwidnVvdHRhXCI6IFwieWVhclwiLFxuICAgIFwidnVvZGVuXCI6IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfTk9fQUJCUl9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VrdW50aVwiOiBcInNlY29uZFwiLFxuICAgIFwic2VrdW50aWFcIjogXCJzZWNvbmRcIixcbiAgICBcInNla3VubmluXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW51dXR0aVwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0dGlhXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dXRpblwiOiBcIm1pbnV0ZVwiLFxuICAgIFwidHVudGlcIjogXCJob3VyXCIsXG4gICAgXCJ0dW50aWFcIjogXCJob3VyXCIsXG4gICAgXCJ0dW5uaW5cIjogXCJob3VyXCIsXG4gICAgXCJww6RpdsOkXCI6IFwiZGF5XCIsXG4gICAgXCJww6RpdsOkw6RcIjogXCJkYXlcIixcbiAgICBcInDDpGl2w6RuXCI6IFwiZGF5XCIsXG4gICAgXCJ2aWlra29cIjogXCJ3ZWVrXCIsXG4gICAgXCJ2aWlra29hXCI6IFwid2Vla1wiLFxuICAgIFwidmlpa29uXCI6IFwid2Vla1wiLFxuICAgIFwia3V1a2F1c2lcIjogXCJtb250aFwiLFxuICAgIFwia3V1a2F1dHRhXCI6IFwibW9udGhcIixcbiAgICBcImt1dWthdWRlblwiOiBcIm1vbnRoXCIsXG4gICAgXCJ2dW9zaVwiOiBcInllYXJcIixcbiAgICBcInZ1b3R0YVwiOiBcInllYXJcIixcbiAgICBcInZ1b2RlblwiOiBcInllYXJcIixcbn07XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18XFxcXGQrKWA7XG5leHBvcnQgY29uc3QgVElNRV9VTklUX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkpfSlcXFxcc3swLDV9YDtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9OT19BQkJSX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9cXGQrLy50ZXN0KG1hdGNoKSkge1xuICAgICAgICBsZXQgeWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICAgICAgaWYgKHllYXJOdW1iZXIgPCAxMDApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSBmaW5kTW9zdExpa2VseUFEWWVhcih5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhck51bWJlcjtcbiAgICB9XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzoodmlpbWV8ZWRlbGxpbmVufGVkZWxsaXNlbsOkfGVuc2l8c2V1cmFhdmF8c2V1cmFhdmFuYXx0w6Rtw6R8dMOkbsOkKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKHZpaW1lfGVuc2l8c2V1cmFhdmEpXFxcXHMqdmlpa29sbGEpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMjtcbmNvbnN0IFNVRkZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSVdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfRElDVElPTkFSWVtkYXlPZldlZWtdO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfR1JPVVBdO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gbWF0Y2hbU1VGRklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQubWF0Y2goL3ZpaW1lfGVkZWxsaW5lbnxlZGVsbGlzZW7DpC8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZC5tYXRjaCgvZW5zaXxzZXVyYWF2YXxzZXVyYWF2YW5hLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCBvZmZzZXQsIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GSVdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pXFxcXC4/YCArXG4gICAgYCg/OlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXHMpXFxcXHMqKFswLTldezEsMn0pXFxcXC4/KT9cXFxccypgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86KD86LXwvfCw/XFxcXHMqKShbMC05XXs0fSg/IVteXFxcXHNdXFxcXGQpKSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFURV9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFtEQVRFX0dST1VQXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhck51bWJlciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZUludChtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChzZXVyYWF2YXxzZXVyYWF2YXR8c2V1cmFhdmllbnxlZGVsbGluZW58ZWRlbGxpc2V0fGVkZWxsaXN0ZW58dmlpbWVpc2V0fHZpaW1laXN0ZW58a3VsdW5lZXR8a3VsdW5laWRlbnxcXFxcK3wtKVxcXFxzKigke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBQQVRURVJOX05PX0FCQlIgPSBuZXcgUmVnRXhwKGAoc2V1cmFhdmF8c2V1cmFhdmF0fHNldXJhYXZpZW58ZWRlbGxpbmVufGVkZWxsaXNldHxlZGVsbGlzdGVufHZpaW1laXNldHx2aWltZWlzdGVufGt1bHVuZWV0fGt1bHVuZWlkZW58XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIGNvbnN0cnVjdG9yKGFsbG93QWJicmV2aWF0aW9ucyA9IHRydWUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbGxvd0FiYnJldmlhdGlvbnMgPSBhbGxvd0FiYnJldmlhdGlvbnM7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID8gUEFUVEVSTiA6IFBBVFRFUk5fTk9fQUJCUjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMl0pO1xuICAgICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHByZWZpeCkge1xuICAgICAgICAgICAgY2FzZSBcImVkZWxsaW5lblwiOlxuICAgICAgICAgICAgY2FzZSBcImVkZWxsaXNldFwiOlxuICAgICAgICAgICAgY2FzZSBcImVkZWxsaXN0ZW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJ2aWltZWlzZXRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ2aWltZWlzdGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwia3VsdW5lZXRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJrdWx1bmVpZGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwiLVwiOlxuICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBkdXJhdGlvbik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHMqc2l0dGVuKD89XFxcXFd8JClgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKCR7VElNRV9VTklUU19QQVRURVJOfSlcXFxccyooPzpzaXPDpGxsw6R8a3VsdWVzc2F8cMOkw6RzdMOkKSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8odMOkbsOkXFxzKik/KGFhbXVsbGF8YWFtdW5hfGFhbXVww6RpdsOkbGzDpHxww6RpdsOkbGzDpHxpbHRhcMOkaXbDpGxsw6R8aWxsYWxsYXx5w7ZsbMOkfGtlc2tpecO2bGzDpCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkUGF0dGVybiA9IG1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICByZXR1cm4gRklDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkUGF0dGVybik7XG4gICAgfVxuICAgIHN0YXRpYyBleHRyYWN0VGltZUNvbXBvbmVudHMoY29tcG9uZW50LCB0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgc3dpdGNoICh0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgICAgIGNhc2UgXCJhYW11bGxhXCI6XG4gICAgICAgICAgICBjYXNlIFwiYWFtdW5hXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJhYW11cMOkaXbDpGxsw6RcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInDDpGl2w6RsbMOkXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWx0YXDDpGl2w6RsbMOkXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWxsYWxsYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInnDtmxsw6RcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJrZXNraXnDtmxsw6RcIjpcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmdldChcImhvdXJcIikgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGREdXJhdGlvbkFzSW1wbGllZCh7IFwiZGF5XCI6IDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GSUNhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IEZJQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9GSUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChueXR8dMOkbsOkw6RufGh1b21lbm5hfHlsaWh1b21lbm5hfGVpbGVufHRvaXNzYXDDpGl2w6Ruw6R8dmlpbWVcXFxccyp5w7Zuw6QpYCArXG4gICAgYCg/OlxcXFxzKihhYW11bGxhfGFhbXVuYXxhYW11cMOkaXbDpGxsw6R8cMOkaXbDpGxsw6R8aWx0YXDDpGl2w6RsbMOkfGlsbGFsbGF8ecO2bGzDpHxrZXNraXnDtmxsw6QpKT9gICtcbiAgICBgKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IFRJTUVfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRklDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICAgICAgY29uc3QgZGF0ZUtleXdvcmQgPSAobWF0Y2hbREFURV9HUk9VUF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGltZUtleXdvcmQgPSAobWF0Y2hbVElNRV9HUk9VUF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChkYXRlS2V5d29yZCkge1xuICAgICAgICAgICAgY2FzZSBcIm55dFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0w6Ruw6TDpG5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJodW9tZW5uYVwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogMSB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ5bGlodW9tZW5uYVwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogMiB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJlaWxlblwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTEgfSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9pc3NhcMOkaXbDpG7DpFwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTIgfSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChkYXRlS2V5d29yZC5tYXRjaCgvdmlpbWVcXHMqecO2bsOkLykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldERhdGUuZ2V0SG91cnMoKSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTEgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVLZXl3b3JkKSB7XG4gICAgICAgICAgICBjb21wb25lbnQgPSBGSUNhc3VhbFRpbWVQYXJzZXIuZXh0cmFjdFRpbWVDb21wb25lbnRzKGNvbXBvbmVudCwgdGltZUtleXdvcmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSU1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKigtfOKAkylcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRklNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHxrbG98a2VsbG98LHwtKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRklUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBGSVdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9GSVdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBGSU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgRklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBGSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEZJQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IEZJQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IEZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0ZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRklNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9GSU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBGSUNhc3VhbFRpbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRklDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgSVNPRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgRklUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRklXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgRklNZXJnZURhdGVSYW5nZVJlZmluZXIoKSwgbmV3IEZJTWVyZ2VEYXRlVGltZVJlZmluZXIoKV0sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIFwiY2hcXHUxZWU3IG5oXFx1MWVhZHRcIjogMCxcbiAgICBcImNuXCI6IDAsXG4gICAgXCJ0aFxcdTFlZTkgaGFpXCI6IDEsXG4gICAgXCJ0MlwiOiAxLFxuICAgIFwidGhcXHUxZWU5IGJhXCI6IDIsXG4gICAgXCJ0M1wiOiAyLFxuICAgIFwidGhcXHUxZWU5IHRcXHUwMWIwXCI6IDMsXG4gICAgXCJ0NFwiOiAzLFxuICAgIFwidGhcXHUxZWU5IG5cXHUwMTAzbVwiOiA0LFxuICAgIFwidDVcIjogNCxcbiAgICBcInRoXFx1MWVlOSBzXFx1MDBlMXVcIjogNSxcbiAgICBcInQ2XCI6IDUsXG4gICAgXCJ0aFxcdTFlZTkgYlxcdTFlYTN5XCI6IDYsXG4gICAgXCJ0N1wiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwidGhcXHUwMGUxbmcgMVwiOiAxLFxuICAgIFwidGhcXHUwMGUxbmcgbVxcdTFlZDl0XCI6IDEsXG4gICAgXCJ0aFxcdTAwZTFuZyBnaVxcdTAwZWFuZ1wiOiAxLFxuICAgIFwidGhcXHUwMGUxbmcgMlwiOiAyLFxuICAgIFwidGhcXHUwMGUxbmcgaGFpXCI6IDIsXG4gICAgXCJ0aFxcdTAwZTFuZyAzXCI6IDMsXG4gICAgXCJ0aFxcdTAwZTFuZyBiYVwiOiAzLFxuICAgIFwidGhcXHUwMGUxbmcgNFwiOiA0LFxuICAgIFwidGhcXHUwMGUxbmcgdFxcdTAxYjBcIjogNCxcbiAgICBcInRoXFx1MDBlMW5nIDVcIjogNSxcbiAgICBcInRoXFx1MDBlMW5nIG5cXHUwMTAzbVwiOiA1LFxuICAgIFwidGhcXHUwMGUxbmcgNlwiOiA2LFxuICAgIFwidGhcXHUwMGUxbmcgc1xcdTAwZTF1XCI6IDYsXG4gICAgXCJ0aFxcdTAwZTFuZyA3XCI6IDcsXG4gICAgXCJ0aFxcdTAwZTFuZyBiXFx1MWVhM3lcIjogNyxcbiAgICBcInRoXFx1MDBlMW5nIDhcIjogOCxcbiAgICBcInRoXFx1MDBlMW5nIHRcXHUwMGUxbVwiOiA4LFxuICAgIFwidGhcXHUwMGUxbmcgOVwiOiA5LFxuICAgIFwidGhcXHUwMGUxbmcgY2hcXHUwMGVkblwiOiA5LFxuICAgIFwidGhcXHUwMGUxbmcgMTBcIjogMTAsXG4gICAgXCJ0aFxcdTAwZTFuZyBtXFx1MDFiMFxcdTFlZGRpXCI6IDEwLFxuICAgIFwidGhcXHUwMGUxbmcgMTFcIjogMTEsXG4gICAgXCJ0aFxcdTAwZTFuZyBtXFx1MDFiMFxcdTFlZGRpIG1cXHUxZWQ5dFwiOiAxMSxcbiAgICBcInRoXFx1MDBlMW5nIDEyXCI6IDEyLFxuICAgIFwidGhcXHUwMGUxbmcgbVxcdTAxYjBcXHUxZWRkaSBoYWlcIjogMTIsXG4gICAgXCJ0aFxcdTAwZTFuZyBjaFxcdTFlYTFwXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcIm1cXHUxZWQ5dFwiOiAxLFxuICAgIFwiaGFpXCI6IDIsXG4gICAgXCJiYVwiOiAzLFxuICAgIFwiYlxcdTFlZDFuXCI6IDQsXG4gICAgXCJuXFx1MDEwM21cIjogNSxcbiAgICBcInNcXHUwMGUxdVwiOiA2LFxuICAgIFwiYlxcdTFlYTN5XCI6IDcsXG4gICAgXCJ0XFx1MDBlMW1cIjogOCxcbiAgICBcImNoXFx1MDBlZG5cIjogOSxcbiAgICBcIm1cXHUwMWIwXFx1MWVkZGlcIjogMTAsXG4gICAgXCJtXFx1MDFiMFxcdTFlZGRpIG1cXHUxZWQ5dFwiOiAxMSxcbiAgICBcIm1cXHUwMWIwXFx1MWVkZGkgaGFpXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICBcImdpXFx1MDBlMnlcIjogXCJzZWNvbmRcIixcbiAgICBcInBoXFx1MDBmYXRcIjogXCJtaW51dGVcIixcbiAgICBcImdpXFx1MWVkZFwiOiBcImhvdXJcIixcbiAgICBcIm5nXFx1MDBlMHlcIjogXCJkYXlcIixcbiAgICBcInR1XFx1MWVhN25cIjogXCJ3ZWVrXCIsXG4gICAgXCJ0aFxcdTAwZTFuZ1wiOiBcIm1vbnRoXCIsXG4gICAgXCJuXFx1MDEwM21cIjogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gXCIoPzpcIiArIG1hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSkgKyBcInxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSspXCI7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IFwiKD86WzAtOV17MSw0fSg/OlxcXFxzKlRDTik/KVwiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGNvbnN0IHVwcGVyID0gbWF0Y2gudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBudW0gPSBwYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2csIFwiXCIpKTtcbiAgICBpZiAoL1RDTi8udGVzdCh1cHBlcikpXG4gICAgICAgIHJldHVybiAtbnVtO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihudW0pO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gXCIoXCIgKyBOVU1CRVJfUEFUVEVSTiArIFwiKVxcXFxzezAsNX0oXCIgKyBtYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpICsgXCIpXFxcXHN7MCw1fVwiO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86bmdcXHUwMGUweVxcXFxzKik/XCIgK1xuICAgIFwiKFswLTldezEsMn0pXCIgK1xuICAgIFwiXFxcXHMqdGhcXHUwMGUxbmdcXFxccypcIiArXG4gICAgXCIoWzAtOV17MSwyfSlcIiArXG4gICAgXCIoPzpcXFxccypuXFx1MDEwM21cXFxccyooXCIgK1xuICAgIFlFQVJfUEFUVEVSTiArXG4gICAgXCIpKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBEQVlfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAyO1xuY29uc3QgWUVBUl9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSVN0YW5kYXJkUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFtEQVlfR1JPVVBdKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludChtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEgfHwgbW9udGggPiAxMilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJU3RhbmRhcmRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSwgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcIiArIG1hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKSArIFwiKVwiICsgXCIoPzpcXFxccyooPzpuxINtfC8pXFxcXHMqKFwiICsgWUVBUl9QQVRURVJOICsgXCIpKT9cIiArIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAxO1xuY29uc3QgWUVBUl9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSU1vbnRoWWVhclBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKCFtb250aClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBjb250ZXh0LnJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTW9udGhZZWFyUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OlxcXFxibsSDbVxcXFxzKihcIiArIFlFQVJfUEFUVEVSTiArIFwiKXxcXFxcYihbMC05XXsxLDR9KVxcXFxzKihUQ04pKSg/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfV0lUSF9OQU1fR1JPVVAgPSAxO1xuY29uc3QgQkFSRV9CQ19ZRUFSX0dST1VQID0gMjtcbmNvbnN0IEJBUkVfQkNfU1VGRklYX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJWWVhclBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHllYXJUZXh0O1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9XSVRIX05BTV9HUk9VUF0pIHtcbiAgICAgICAgICAgIHllYXJUZXh0ID0gbWF0Y2hbWUVBUl9XSVRIX05BTV9HUk9VUF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5ZWFyVGV4dCA9IG1hdGNoW0JBUkVfQkNfWUVBUl9HUk9VUF0gKyBcIiBcIiArIG1hdGNoW0JBUkVfQkNfU1VGRklYX0dST1VQXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgcGFyc2VZZWFyKHllYXJUZXh0KSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIDEpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgMSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklZZWFyUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvXFxiKGjDtG0gbmF5fGjDtG0gcXVhfGjDtG0ga2lhfG5nw6B5IG1haXxuZ8OgeSBraWF8YsOieSBnaeG7nXxsw7pjIG7DoHkpKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSUNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2hbMV0udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImLDonkgZ2nhu51cIjpcbiAgICAgICAgICAgIGNhc2UgXCJsw7pjIG7DoHlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcImjDtG0gbmF5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcImjDtG0gcXVhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJow7RtIGtpYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUJlZm9yZShjb250ZXh0LnJlZmVyZW5jZSwgMik7XG4gICAgICAgICAgICBjYXNlIFwibmfDoHkgbWFpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm5nw6B5IGtpYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUFmdGVyKGNvbnRleHQucmVmZXJlbmNlLCAyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyhideG7lWlcXHMqKT8oc8Ohbmcgc+G7m218c8Ohbmd8dHLGsGF8Y2hp4buBdXx04buRaXzEkcOqbXxu4butYSDEkcOqbXxiw6xuaCBtaW5oKSg/PVxcV3wkKS9pO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBjb250ZXh0LnJlZkRhdGUpO1xuICAgICAgICByZXR1cm4gVklDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIG1hdGNoWzJdLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgICBzdGF0aWMgZXh0cmFjdFRpbWVDb21wb25lbnRzKGNvbXBvbmVudCwga2V5d29yZCkge1xuICAgICAgICBzd2l0Y2ggKGtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJiXFx1MDBlY25oIG1pbmhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzXFx1MDBlMW5nIHNcXHUxZWRibVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzXFx1MDBlMW5nXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRyXFx1MDFiMGFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNoaVxcdTFlYzF1XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0XFx1MWVkMWlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIlxcdTAxMTFcXHUwMGVhbVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMjIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiblxcdTFlZWRhIFxcdTAxMTFcXHUwMGVhbVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXCIgK1xuICAgIG1hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpICtcbiAgICBcIilcIiArXG4gICAgXCIoPzpcXFxccyoobsOgeXx04bubaXxzYXUoPyFcXFxccypraGkpfHF1YSkpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAxO1xuY29uc3QgTU9ESUZJRVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkb3dUZXh0ID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgZG93ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2Rvd1RleHRdO1xuICAgICAgICBpZiAoZG93ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBtYXRjaFtNT0RJRklFUl9HUk9VUF07XG4gICAgICAgIGxldCBtb2RpZmllclR5cGUgPSBudWxsO1xuICAgICAgICBpZiAobW9kaWZpZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBtb2RpZmllci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKG0uaW5jbHVkZXMoXCJ04bubaVwiKSB8fCBtLmluY2x1ZGVzKFwic2F1XCIpKVxuICAgICAgICAgICAgICAgIG1vZGlmaWVyVHlwZSA9IFwibmV4dFwiO1xuICAgICAgICAgICAgZWxzZSBpZiAobS5pbmNsdWRlcyhcInF1YVwiKSlcbiAgICAgICAgICAgICAgICBtb2RpZmllclR5cGUgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIGRvdywgbW9kaWZpZXJUeXBlKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSVdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpsXFx1MDBmYWNcXFxccyp8dlxcdTAwZTBvXFxcXHMqKT9cIiArXG4gICAgXCIoWzAtOV17MSwyfSlcIiArXG4gICAgXCIoPzpcXFxccypnaVxcdTFlZGRcXFxccyooWzAtOV17MSwyfSk/XFxcXHMqKD86cGhcXHUwMGZhdFxcXFxzKik/XCIgK1xuICAgIFwiKHNcXHUwMGUxbmd8dHJcXHUwMWIwYXxjaGlcXHUxZWMxdXx0XFx1MWVkMWl8XFx1MDExMVxcdTAwZWFtKT9cIiArXG4gICAgXCJ8OihbMC05XXsyfSkpXCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgSE9VUl9HUk9VUCA9IDE7XG5jb25zdCBNSU5VVEVfR0lPX0dST1VQID0gMjtcbmNvbnN0IE1FUklESUVNX0dST1VQID0gMztcbmNvbnN0IE1JTlVURV9DT0xPTl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSVRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaG91ciA+IDIzKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiaG91clwiLCBob3VyKTtcbiAgICAgICAgY29uc3QgbWludXRlID0gbWF0Y2hbTUlOVVRFX0NPTE9OX0dST1VQXVxuICAgICAgICAgICAgPyBwYXJzZUludChtYXRjaFtNSU5VVEVfQ09MT05fR1JPVVBdKVxuICAgICAgICAgICAgOiBtYXRjaFtNSU5VVEVfR0lPX0dST1VQXVxuICAgICAgICAgICAgICAgID8gcGFyc2VJbnQobWF0Y2hbTUlOVVRFX0dJT19HUk9VUF0pXG4gICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICBpZiAobWludXRlID49IDYwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtaW51dGVcIiwgbWludXRlKTtcbiAgICAgICAgY29uc3QgbWVyaWRpZW0gPSBtYXRjaFtNRVJJRElFTV9HUk9VUF0/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChtZXJpZGllbSA9PT0gXCJzw6FuZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1lcmlkaWVtID09PSBcInRyxrBhXCIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIgKyAxMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgaG91ciA+PSAxMiA/IE1lcmlkaWVtLlBNIDogTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1lcmlkaWVtID09PSBcImNoaeG7gXVcIiB8fCBtZXJpZGllbSA9PT0gXCJ04buRaVwiIHx8IG1lcmlkaWVtID09PSBcIsSRw6ptXCIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIgKyAxMik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSVRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCJcXFxcc3swLDV9KD86dHJcXHUwMWIwXFx1MWVkYmN8cXVhKSg/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghZHVyYXRpb24pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBcIlxcXFxzezAsNX0oPzpzYXV8blxcdTFlZWZhfHRcXHUxZWRiaXx0aVxcdTFlYmZwKSg/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBkdXJhdGlvbik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzp0cm9uZ1xcXFxzKig/OnZcXHUwMGYybmdcXFxccyopPylcIiArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghdGltZVVuaXRzKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSwgTlVNQkVSX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmNvbnN0IENBU1VBTF9VTklUX1BBVFRFUk4gPSBcIig/OlwiICsgTlVNQkVSX1BBVFRFUk4gKyBcIlxcXFxzezAsNX0pPyg/OlwiICsgbWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKSArIFwiKVwiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIobsOgeXx0csaw4bubY3xxdWF8c2F1fHThu5tpfHRp4bq/cClcXFxccyooXCIgK1xuICAgIENBU1VBTF9VTklUX1BBVFRFUk4gK1xuICAgIFwiKVwiICtcbiAgICBcInwoXCIgK1xuICAgIENBU1VBTF9VTklUX1BBVFRFUk4gK1xuICAgIFwiKVxcXFxzKihuw6B5fHRyxrDhu5tjfHF1YXxzYXV8dOG7m2l8dGnhur9wKVwiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSAobWF0Y2hbMV0gfHwgbWF0Y2hbNF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFRleHQgPSAobWF0Y2hbMl0gfHwgbWF0Y2hbM10gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gcGFyc2VEdXJhdGlvbih1bml0VGV4dCk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhkdXJhdGlvbikubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbdW5pdFRleHRdO1xuICAgICAgICAgICAgaWYgKCF1bml0KVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7IFt1bml0XTogMSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RpZmllciA9PT0gXCJ0csaw4bubY1wiIHx8IG1vZGlmaWVyID09PSBcInF1YVwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHJldmVyc2VEdXJhdGlvbihkdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgZHVyYXRpb24pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyooPzrigJN8LXzEkeG6v258dOG7m2l8dsOgKVxccyokLztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKig/OmzDumN8dsOgb3wsfFR8LSk/XFxzKiQvO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZXh0ZW5kcyBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIHtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSVN0YW5kYXJkUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklTdGFuZGFyZFBhcnNlci5qc1wiO1xuaW1wb3J0IFZJTW9udGhZZWFyUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklNb250aFllYXJQYXJzZXIuanNcIjtcbmltcG9ydCBWSVllYXJQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVllYXJQYXJzZXIuanNcIjtcbmltcG9ydCBWSUNhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSUNhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBWSUNhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBWSVdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBWSVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1ZJVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSU1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9WSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IFZJTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvVklNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IFZJTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9WSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKHRydWUpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCBsaXR0bGVFbmRpYW4pO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFZJQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBWSUNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgVklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBWSVN0YW5kYXJkUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVklNb250aFllYXJQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVllYXJQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVRpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBWSVRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtcbiAgICAgICAgICAgIG5ldyBWSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLFxuICAgICAgICAgICAgbmV3IFZJTWVyZ2VEYXRlVGltZVJlZmluZXIoKSxcbiAgICAgICAgXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCAqIGFzIGVuIGZyb20gXCIuL2xvY2FsZXMvZW4vaW5kZXguanNcIjtcbmltcG9ydCB7IENocm9ubywgUGFyc2luZ0NvbnRleHQgfSBmcm9tIFwiLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5leHBvcnQgeyBlbiwgQ2hyb25vLCBQYXJzaW5nQ29udGV4dCwgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmltcG9ydCAqIGFzIGRlIGZyb20gXCIuL2xvY2FsZXMvZGUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGZyIGZyb20gXCIuL2xvY2FsZXMvZnIvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGphIGZyb20gXCIuL2xvY2FsZXMvamEvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHB0IGZyb20gXCIuL2xvY2FsZXMvcHQvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIG5sIGZyb20gXCIuL2xvY2FsZXMvbmwvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHpoIGZyb20gXCIuL2xvY2FsZXMvemgvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHJ1IGZyb20gXCIuL2xvY2FsZXMvcnUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGVzIGZyb20gXCIuL2xvY2FsZXMvZXMvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHVrIGZyb20gXCIuL2xvY2FsZXMvdWsvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGl0IGZyb20gXCIuL2xvY2FsZXMvaXQvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHN2IGZyb20gXCIuL2xvY2FsZXMvc3YvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGZpIGZyb20gXCIuL2xvY2FsZXMvZmkvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHZpIGZyb20gXCIuL2xvY2FsZXMvdmkvaW5kZXguanNcIjtcbmV4cG9ydCB7IGRlLCBmciwgamEsIHB0LCBubCwgemgsIHJ1LCBlcywgdWssIGl0LCBzdiwgZmksIHZpIH07XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gZW4uc3RyaWN0O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IGVuLmNhc3VhbDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qKlxuICogU3lzdMOobWUgZGUgbG9nZ2luZyBzdHJ1Y3R1csOpIHBvdXIgTmF0dXJhbCBMYW5ndWFnZSBEYXRlc1xuICovXG5cbmV4cG9ydCB0eXBlIExvZ0xldmVsID0gJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcic7XG5cbi8qKlxuICogRm9ybWF0ZSB1bmUgZW50csOpZSBkZSBsb2cgYXZlYyB0aW1lc3RhbXBcbiAqL1xuZnVuY3Rpb24gZm9ybWF0TG9nRW50cnkobGV2ZWw6IExvZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiB1bmtub3duKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICBcbiAgaWYgKGNvbnRleHQpIHtcbiAgICByZXR1cm4gYFske3RpbWVzdGFtcH1dIFske2xldmVsLnRvVXBwZXJDYXNlKCl9XSAke21lc3NhZ2V9IHwgQ29udGV4dDogJHtKU09OLnN0cmluZ2lmeShjb250ZXh0KX1gO1xuICB9XG4gIHJldHVybiBgWyR7dGltZXN0YW1wfV0gWyR7bGV2ZWwudG9VcHBlckNhc2UoKX1dICR7bWVzc2FnZX1gO1xufVxuXG4vKipcbiAqIFN5c3TDqG1lIGRlIGxvZ2dpbmcgc3RydWN0dXLDqVxuICovXG5leHBvcnQgY29uc3QgbG9nZ2VyID0ge1xuICAvKipcbiAgICogTG9nIGRlIG5pdmVhdSBkZWJ1ZyAocG91ciBsZSBkw6l2ZWxvcHBlbWVudClcbiAgICovXG4gIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2dFbnRyeSgnZGVidWcnLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgICBjb25zb2xlLmRlYnVnKGZvcm1hdHRlZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvZyBkZSBuaXZlYXUgaW5mbyAoaW5mb3JtYXRpb25zIGfDqW7DqXJhbGVzKVxuICAgKi9cbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nRW50cnkoJ2luZm8nLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgICBjb25zb2xlLmRlYnVnKGZvcm1hdHRlZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvZyBkZSBuaXZlYXUgd2FybiAoYXZlcnRpc3NlbWVudHMpXG4gICAqL1xuICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2dFbnRyeSgnd2FybicsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIGNvbnNvbGUud2Fybihmb3JtYXR0ZWQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBMb2cgZGUgbml2ZWF1IGVycm9yIChlcnJldXJzKVxuICAgKi9cbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBjb250ZXh0PzogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdExvZ0VudHJ5KCdlcnJvcicsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0dGVkKTtcbiAgfSxcbn07XG5cbiIsIi8vIENIQU5HRU1FTlQgSUNJIDogT24gdXRpbGlzZSBcImltcG9ydCAqIGFzIGNocm9ub1wiIGNhciBsYSB2ZXJzaW9uIDIueCBuJ2EgcGx1cyBkJ2V4cG9ydCBwYXIgZMOpZmF1dFxuaW1wb3J0ICogYXMgY2hyb25vIGZyb20gXCJjaHJvbm8tbm9kZVwiO1xuaW1wb3J0IHsgQ2hyb25vLCBQYXJzZXIsIFBhcnNpbmdDb250ZXh0LCBSZWZpbmVyIH0gZnJvbSBcImNocm9uby1ub2RlXCI7XG5pbXBvcnQgeyBPUkRJTkFMX05VTUJFUl9QQVRURVJOLCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLCBkZXNjcmliZUVycm9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dlclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbi8vIExvY2FsIHR5cGUgZGVmaW5pdGlvbiBtYXRjaGluZyBjaHJvbm8tbm9kZSdzIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4vLyBDb25maWd1cmF0aW9uIGlzIG5vdCBleHBvcnRlZCBmcm9tIHRoZSBtYWluIG1vZHVsZSwgc28gd2UgZGVmaW5lIGl0IGxvY2FsbHlcbmludGVyZmFjZSBDaHJvbm9Db25maWd1cmF0aW9uIHtcbiAgcGFyc2VyczogUGFyc2VyW107XG4gIHJlZmluZXJzOiBSZWZpbmVyW107XG59XG5cbmZ1bmN0aW9uIGdldE9yZGluYWxEYXRlUGFyc2VyKCkge1xuICByZXR1cm4gKHtcbiAgICBwYXR0ZXJuOiAoKSA9PiBuZXcgUmVnRXhwKE9SRElOQUxfTlVNQkVSX1BBVFRFUk4pLFxuICAgIGV4dHJhY3Q6IChjb250ZXh0OiBQYXJzaW5nQ29udGV4dCwgbWF0Y2g6IFJlZ0V4cE1hdGNoQXJyYXkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRheTogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFswXSksXG4gICAgICAgIC8vIG1vbWVudCguLi4pLm1vbnRoKCkgaXMgMC1pbmRleGVkIChKYW49MCksIGJ1dCBjaHJvbm8tbm9kZSdzXG4gICAgICAgIC8vIFBhcnNpbmdDb21wb25lbnRzLm1vbnRoIGlzIDEtaW5kZXhlZCAoSmFuPTEpIC0tIHZlcmlmaWVkIGFnYWluc3RcbiAgICAgICAgLy8gY2hyb25vLW5vZGUncyBvd24gbG9jYWxlIGNvbnN0YW50cy4gV2l0aG91dCB0aGUgKzEgdGhpcyBhbHdheXNcbiAgICAgICAgLy8gcmVzb2x2ZWQgdG8gdGhlIHdyb25nIG1vbnRoIChhbmQsIHZpYSBmb3J3YXJkRGF0ZSwgc29tZXRpbWVzIHRoZVxuICAgICAgICAvLyB3cm9uZyB5ZWFyIHRvbykuXG4gICAgICAgIC8vIE11c3QgdXNlIGNvbnRleHQucmVmRGF0ZSAodGhlIGRhdGUgY2hyb25vIHdhcyBhc2tlZCB0byBwYXJzZVxuICAgICAgICAvLyByZWxhdGl2ZSB0byksIG5vdCBtb21lbnQoKSAodGhlIHJlYWwgY3VycmVudCB3YWxsLWNsb2NrIHRpbWUpOlxuICAgICAgICAvLyBjYWxsZXJzIGNhbiBhbmQgZG8gcGFzcyBhbiBleHBsaWNpdCByZWZlcmVuY2UgZGF0ZSwgZS5nLiB0ZXN0cywgb3JcbiAgICAgICAgLy8gZ2V0UGFyc2VkRGF0ZVJlc3VsdCgpJ3MgY2FsbGVycyBpbiBwYXJzZXIudHMuXG4gICAgICAgIG1vbnRoOiBtb21lbnQoY29udGV4dC5yZWZEYXRlKS5tb250aCgpICsgMSxcbiAgICAgIH07XG4gICAgfSxcbiAgfSBhcyBQYXJzZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDaHJvbm9zKGxhbmd1YWdlczogc3RyaW5nW10pOiBDaHJvbm9bXSB7XG4gIGNvbnN0IGxvY2FsZSA9IG1vbWVudC5sb2NhbGUoKTtcbiAgY29uc3QgaXNHQiA9IGxvY2FsZSA9PT0gJ2VuLWdiJztcblxuICBjb25zdCBjaHJvbm9zOiBDaHJvbm9bXSA9IFtdO1xuICBjb25zdCBvcmRpbmFsRGF0ZVBhcnNlciA9IGdldE9yZGluYWxEYXRlUGFyc2VyKCk7XG4gIC8vIEJ1aWxkcyBhIENocm9ubyBpbnN0YW5jZSBmb3IgYSBsb2NhbGUgbW9kdWxlLCBzdXBwb3J0aW5nIGJvdGggY2hyb25vLW5vZGVcbiAgLy8gQVBJIHNoYXBlczogb2xkZXIgbG9jYWxlcyBzdGlsbCBleHBvc2UgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihpc0dCKSxcbiAgLy8gYnV0IGFzIG9mIGNocm9uby1ub2RlIDIueCB0aGUgXCJlblwiIGxvY2FsZSBpbnN0ZWFkIGV4cG9ydHMgcHJlLWJ1aWx0XG4gIC8vIENocm9ubyBpbnN0YW5jZXMgKGNhc3VhbC9HQi9zdHJpY3QpIHdpdGggbm8gY29uZmlnIGZhY3RvcnkgYXQgYWxsLiBBXG4gIC8vIGxvY2FsZSBtaXNzaW5nIGJvdGggd291bGQgcHJldmlvdXNseSBiZSBzaWxlbnRseSB0cmVhdGVkIGFzIHVuc3VwcG9ydGVkXG4gIC8vIChsb2dnZWQgYXQgXCJ3YXJuXCIgb25seSkgYW5kIGV2ZXJ5IG1hdGNoIGZvciB0aGF0IGxhbmd1YWdlIHdvdWxkIGZhbGxcbiAgLy8gdGhyb3VnaCB0byB0b2RheS9ub3cgd2l0aCBubyB2aXNpYmxlIGVycm9yIC0tIHRoaXMgaGFwcGVuZWQgZm9yIEVuZ2xpc2hcbiAgLy8gc3BlY2lmaWNhbGx5LCBmb3IgZXZlcnkgdXNlciB3aG8gZW5hYmxlZCBpdCwgc2luY2UgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvblxuICAvLyBpcyBleGFjdGx5IHdoYXQgZGlzYXBwZWFyZWQgZnJvbSB0aGF0IG1vZHVsZS5cbiAgY29uc3QgYnVpbGRDaHJvbm9Gb3JNb2R1bGUgPSAobGFuZ01vZHVsZToge1xuICAgIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24/OiAoaXNHQjogYm9vbGVhbikgPT4gdW5rbm93bjtcbiAgICBjYXN1YWw/OiBDaHJvbm87XG4gICAgR0I/OiBDaHJvbm87XG4gIH0gfCB1bmRlZmluZWQpOiBDaHJvbm8gfCBudWxsID0+IHtcbiAgICBpZiAoIWxhbmdNb2R1bGUpIHJldHVybiBudWxsO1xuICAgIGlmIChsYW5nTW9kdWxlLmNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGxhbmdNb2R1bGUuY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihpc0dCKTtcbiAgICAgIC8vIENocm9ubyBjb25zdHJ1Y3RvciBhY2NlcHRzIENvbmZpZ3VyYXRpb24gdHlwZSAtIGNhc3QgbmVlZGVkIGJlY2F1c2UgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbiByZXR1cm5zIHVua25vd25cbiAgICAgIHJldHVybiBuZXcgQ2hyb25vKGNvbmZpZyBhcyBDaHJvbm9Db25maWd1cmF0aW9uKTtcbiAgICB9XG4gICAgaWYgKGxhbmdNb2R1bGUuY2FzdWFsKSB7XG4gICAgICAvLyBDbG9uZSBzbyB3ZSBkb24ndCBtdXRhdGUgY2hyb25vLW5vZGUncyBzaGFyZWQgc2luZ2xldG9uIGluc3RhbmNlXG4gICAgICAvLyAobXVsdGlwbGUgTkxEUGFyc2VyIGluc3RhbmNlcyB3b3VsZCBvdGhlcndpc2UgYWxsIHB1c2ggdGhlaXIgb3duXG4gICAgICAvLyBvcmRpbmFsRGF0ZVBhcnNlciBvbnRvIHRoZSBzYW1lIHNoYXJlZCBvYmplY3QpLlxuICAgICAgY29uc3QgYmFzZSA9IChpc0dCICYmIGxhbmdNb2R1bGUuR0IpID8gbGFuZ01vZHVsZS5HQiA6IGxhbmdNb2R1bGUuY2FzdWFsO1xuICAgICAgcmV0dXJuIGJhc2UuY2xvbmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgbGFuZ3VhZ2VzLmZvckVhY2gobCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE9uIGFjY8OoZGUgYXV4IGxhbmd1ZXMgZHluYW1pcXVlbWVudCB2aWEgUmVjb3JkXG4gICAgICBjb25zdCBsYW5nTW9kdWxlID0gKGNocm9ubyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbF0gYXMge1xuICAgICAgICBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uPzogKGlzR0I6IGJvb2xlYW4pID0+IHVua25vd247XG4gICAgICAgIGNhc3VhbD86IENocm9ubztcbiAgICAgICAgR0I/OiBDaHJvbm87XG4gICAgICB9IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgYyA9IGJ1aWxkQ2hyb25vRm9yTW9kdWxlKGxhbmdNb2R1bGUpO1xuICAgICAgaWYgKCFjKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBMYW5ndWFnZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IGNocm9uby1ub2RlYCwgeyBsYW5ndWFnZTogbCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYy5wYXJzZXJzLnB1c2gob3JkaW5hbERhdGVQYXJzZXIpO1xuICAgICAgY2hyb25vcy5wdXNoKGMpO1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiQ2hyb25vIGluaXRpYWxpemVkIGZvciBsYW5ndWFnZVwiLCB7IGxhbmd1YWdlOiBsIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBpbml0aWFsaXplIGNocm9ubyBmb3IgbGFuZ3VhZ2VgLCB7XG4gICAgICAgIGxhbmd1YWdlOiBsLFxuICAgICAgICBlcnJvcjogZGVzY3JpYmVFcnJvcihlcnJvciksXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFNpIGF1Y3VuZSBsYW5ndWUgbidhIHB1IMOqdHJlIGluaXRpYWxpc8OpZSwgdXRpbGlzZXIgbCdhbmdsYWlzIHBhciBkw6lmYXV0XG4gIGlmIChjaHJvbm9zLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZ2dlci53YXJuKCdObyBsYW5ndWFnZXMgY291bGQgYmUgaW5pdGlhbGl6ZWQsIGF0dGVtcHRpbmcgRW5nbGlzaCBmYWxsYmFjaycpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbk1vZHVsZSA9IChjaHJvbm8gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVuIGFzIHtcbiAgICAgICAgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbj86IChpc0dCOiBib29sZWFuKSA9PiB1bmtub3duO1xuICAgICAgICBjYXN1YWw/OiBDaHJvbm87XG4gICAgICAgIEdCPzogQ2hyb25vO1xuICAgICAgfSB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGMgPSBidWlsZENocm9ub0Zvck1vZHVsZShlbk1vZHVsZSk7XG4gICAgICBpZiAoYykge1xuICAgICAgICBjLnBhcnNlcnMucHVzaChvcmRpbmFsRGF0ZVBhcnNlcik7XG4gICAgICAgIGNocm9ub3MucHVzaChjKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0RlZmF1bHQgRW5nbGlzaCBjaHJvbm8gaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0VuZ2xpc2ggY2hyb25vIG1vZHVsZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGluaXRpYWxpemUgZGVmYXVsdCBFbmdsaXNoIGNocm9ubycsIHtcbiAgICAgICAgZXJyb3I6IGRlc2NyaWJlRXJyb3IoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNocm9ub3M7XG59IiwiaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcImNocm9uby1ub2RlXCI7XG5pbXBvcnQgdCBmcm9tIFwiLi9sYW5nL2hlbHBlclwiO1xuXG4vKipcbiAqIEludGVyZmFjZSBwb3VyIGxlcyBkw6lwZW5kYW5jZXMgbsOpY2Vzc2FpcmVzIMOgIGxhIGTDqXRlY3Rpb24gZCdoZXVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVEZXRlY3RvckRlcGVuZGVuY2llcyB7XG4gIGxhbmd1YWdlczogc3RyaW5nW107XG4gIGNocm9ub3M6IENocm9ub1tdO1xuICByZWdleFJlbGF0aXZlOiBSZWdFeHA7XG4gIHJlZ2V4UmVsYXRpdmVDb21iaW5lZDogUmVnRXhwO1xuICByZWdleFdlZWtkYXk6IFJlZ0V4cDtcbiAgcmVnZXhXZWVrZGF5V2l0aFRpbWU6IFJlZ0V4cDtcbn1cblxuLyoqXG4gKiBDbGFzc2UgcG91ciBkw6l0ZWN0ZXIgc2kgdW4gdGV4dGUgY29udGllbnQgdW5lIGNvbXBvc2FudGUgZCdoZXVyZVxuICovXG5leHBvcnQgY2xhc3MgVGltZURldGVjdG9yIHtcbiAgcHJpdmF0ZSBsYW5ndWFnZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIGNocm9ub3M6IENocm9ub1tdO1xuICBwcml2YXRlIHJlZ2V4UmVsYXRpdmU6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWdleFJlbGF0aXZlQ29tYmluZWQ6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWdleFdlZWtkYXk6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWdleFdlZWtkYXlXaXRoVGltZTogUmVnRXhwO1xuXG4gIGNvbnN0cnVjdG9yKGRlcGVuZGVuY2llczogVGltZURldGVjdG9yRGVwZW5kZW5jaWVzKSB7XG4gICAgdGhpcy5sYW5ndWFnZXMgPSBkZXBlbmRlbmNpZXMubGFuZ3VhZ2VzO1xuICAgIHRoaXMuY2hyb25vcyA9IGRlcGVuZGVuY2llcy5jaHJvbm9zO1xuICAgIHRoaXMucmVnZXhSZWxhdGl2ZSA9IGRlcGVuZGVuY2llcy5yZWdleFJlbGF0aXZlO1xuICAgIHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkID0gZGVwZW5kZW5jaWVzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZDtcbiAgICB0aGlzLnJlZ2V4V2Vla2RheSA9IGRlcGVuZGVuY2llcy5yZWdleFdlZWtkYXk7XG4gICAgdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSA9IGRlcGVuZGVuY2llcy5yZWdleFdlZWtkYXlXaXRoVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWw6lyaWZpZSBzaSBsZSB0ZXh0ZSBjb250aWVudCB1bmUgY29tcG9zYW50ZSBkJ2hldXJlXG4gICAqL1xuICBoYXNUaW1lQ29tcG9uZW50KHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIDEuIElmIGl0J3MgXCJub3dcIiBpbiBhbnkgbGFuZ3VhZ2UsIFlFUy5cbiAgICAvLyBUcmFuc2xhdGlvbnMgY2FuIGxpc3Qgc2V2ZXJhbCB2YXJpYW50cyBwaXBlLXNlcGFyYXRlZCAoZS5nLiBJdGFsaWFuXG4gICAgLy8gXCJhZGVzc298b3JhXCIsIENoaW5lc2UgXCLnj77lnKh8546w5ZyoXCIpOyBzcGxpdCBlYWNoIGxhbmd1YWdlJ3MgXCJub3dcIiBlbnRyeVxuICAgIC8vIGRpcmVjdGx5IGluc3RlYWQgb2YgdHJ5aW5nIHRvIG1hdGNoIGluZGl2aWR1YWwgaW1tZWRpYXRlS2V5d29yZHNcbiAgICAvLyBlbnRyaWVzIChhbHJlYWR5IHNwbGl0LCBmb3IgYWxsIG9mIG5vdy90b2RheS90b21vcnJvdy95ZXN0ZXJkYXlcbiAgICAvLyBjb21iaW5lZCkgYWdhaW5zdCB0aGUgcmF3LCB1bnNwbGl0IHRyYW5zbGF0aW9uIHN0cmluZywgd2hpY2ggY291bGRcbiAgICAvLyBuZXZlciBlcXVhbCBhIHNpbmdsZSBhbHJlYWR5LXNwbGl0IHZhcmlhbnQuXG4gICAgY29uc3Qgbm93V29yZHMgPSB0aGlzLmxhbmd1YWdlcy5mbGF0TWFwKGxhbmcgPT5cbiAgICAgIHQoJ25vdycsIGxhbmcpLnRvTG93ZXJDYXNlKCkuc3BsaXQoJ3wnKS5tYXAodyA9PiB3LnRyaW0oKSkuZmlsdGVyKHcgPT4gdylcbiAgICApO1xuICAgIC8vIEV4YWN0LCBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGFnYWluc3QgdGhlIHdob2xlIHN0cmluZyAtLSBubyBuZWVkIHRvXG4gICAgLy8gY29tcGlsZSBhIFJlZ0V4cCBwZXIgd29yZCBwZXIgY2FsbCBmb3IgdGhhdCwgYSBwbGFpbiBsb3dlcmNhc2UgK1xuICAgIC8vIGluY2x1ZGVzKCkgZG9lcyB0aGUgc2FtZSB0aGluZyBtb3JlIHNpbXBseSBhbmQgbW9yZSBjaGVhcGx5LlxuICAgIGlmIChub3dXb3Jkcy5pbmNsdWRlcyh0ZXh0LnRvTG93ZXJDYXNlKCkudHJpbSgpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gMi4gRmlyc3QgY2hlY2sgY29tYmluYXRpb25zIFwiaW4gWCB3ZWVrcyBhbmQgWSBkYXlzXCJcbiAgICBjb25zdCByZWxDb21iaW5lZE1hdGNoID0gdGV4dC5tYXRjaCh0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZCk7XG4gICAgaWYgKHJlbENvbWJpbmVkTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdW5pdFN0cjEgPSByZWxDb21iaW5lZE1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHVuaXRTdHIyID0gcmVsQ29tYmluZWRNYXRjaFs0XS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIHVuaXRzIGlzIGhvdXJzIG9yIG1pbnV0ZXMgLT4gWUVTXG4gICAgICAgIGlmICh1bml0U3RyMS5zdGFydHNXaXRoKCdoJykgfHwgdW5pdFN0cjEgPT09ICdtJyB8fCB1bml0U3RyMS5zdGFydHNXaXRoKCdtaW4nKSB8fFxuICAgICAgICAgICAgdW5pdFN0cjIuc3RhcnRzV2l0aCgnaCcpIHx8IHVuaXRTdHIyID09PSAnbScgfHwgdW5pdFN0cjIuc3RhcnRzV2l0aCgnbWluJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyd2lzZSAtPiBOTyAoZGF5cywgd2Vla3MsIG1vbnRocywgeWVhcnMpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAzLiBJZiBpdCdzIGEgc2ltcGxlIGRlbGF5IGluIEhPVVJTIG9yIE1JTlVURVMgLT4gWUVTXG4gICAgY29uc3QgcmVsTWF0Y2ggPSB0ZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZSk7XG4gICAgaWYgKHJlbE1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHVuaXRTdHIgPSByZWxNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAvLyBtLCBtaW4sIG1pbnV0ZXMsIGgsIGhvdXJzLi4uXG4gICAgICAgIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ2gnKSB8fCB1bml0U3RyID09PSAnbScgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdtaW4nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGF5cywgbW9udGhzLCB5ZWFycyAtPiBOT1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gNC4gSWYgaXQncyBhIHNwZWNpZmljIGRheSB3aXRoIHRpbWUgKE5leHQgTW9uZGF5IGF0IDNwbSkgLT4gWUVTXG4gICAgaWYgKHRoaXMucmVnZXhXZWVrZGF5V2l0aFRpbWUgJiYgdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZS50ZXN0KHRleHQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gNS4gSWYgaXQncyBhIHNwZWNpZmljIGRheSB3aXRob3V0IHRpbWUgKE5leHQgTW9uZGF5KSBvciBUb21vcnJvdyAtPiBOTyAoR2VuZXJhbGx5IHdlIGp1c3Qgd2FudCB0aGUgZGF0ZSlcbiAgICAvLyBJZiB5b3Ugd2FudCB0aW1lIGZvciBcIlRvbW9ycm93XCIsIHJlbW92ZSB0aGUgbGluZXMgYmVsb3cuXG4gICAgaWYgKHRoaXMucmVnZXhXZWVrZGF5LnRlc3QodGV4dCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgdG9kYXkvdG9tb3Jyb3cveWVzdGVyZGF5IGtleXdvcmRzIGluIGFsbCBsYW5ndWFnZXNcbiAgICBjb25zdCBkYXRlS2V5d29yZHMgPSBbJ3RvZGF5JywgJ3RvbW9ycm93JywgJ3llc3RlcmRheSddO1xuICAgIGNvbnN0IGRhdGVXb3Jkczogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBkYXRlS2V5d29yZHMpIHtcbiAgICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgICAvLyB0KCkgYWx3YXlzIGZhbGxzIGJhY2sgdG8gRW5nbGlzaCAobGFuZy9oZWxwZXIudHMpLCBhbmQgZW4udHNcbiAgICAgICAgLy8gYWx3YXlzIGRlZmluZXMgdG9kYXkvdG9tb3Jyb3cveWVzdGVyZGF5LCBzbyB0aGlzIGd1YXJkIGNhbid0XG4gICAgICAgIC8vIGFjdHVhbGx5IGJlIGZhbHNlIGZvciB0aGVzZSB0aHJlZSBrZXlzIC0tIGtlcHQgZm9yIHNhZmV0eSBpbiBjYXNlXG4gICAgICAgIC8vIHRoYXQgaW52YXJpYW50IGV2ZXIgY2hhbmdlcy5cbiAgICAgICAgY29uc3Qgd29yZCA9IHQoa2V5LCBsYW5nKTtcbiAgICAgICAgaWYgKHdvcmQgJiYgd29yZCAhPT0gXCJOT1RGT1VORFwiKSB7XG4gICAgICAgICAgZGF0ZVdvcmRzLnB1c2god29yZC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0ZVdvcmRzLnNvbWUodyA9PiBuZXcgUmVnRXhwKGBeJHt3LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyl9JGAsICdpJykudGVzdCh0ZXh0KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGFzayB0aGUgbGlicmFyeSBpZiBpdCBzZWVzIGFuIGV4cGxpY2l0IHRpbWUgKGV4OiBcIlRvbW9ycm93IGF0IDVwbVwiKVxuICAgIGlmICghdGhpcy5jaHJvbm9zKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNocm9ub3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFJlc3VsdCA9IGMucGFyc2UodGV4dCk7XG4gICAgICAgIGlmIChwYXJzZWRSZXN1bHQgJiYgcGFyc2VkUmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBzdGFydCA9IHBhcnNlZFJlc3VsdFswXS5zdGFydDtcbiAgICAgICAgICBpZiAoc3RhcnQgJiYgKHN0YXJ0LmlzQ2VydGFpbihcImhvdXJcIikgfHwgc3RhcnQuaXNDZXJ0YWluKFwibWludXRlXCIpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIHBhcnNpbmcgZXJyb3JzXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4iLCIvKipcbiAqIEltcGzDqW1lbnRhdGlvbiBkJ3VuIGNhY2hlIExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgYXZlYyBsaW1pdGUgZGUgdGFpbGxlXG4gKiBVdGlsaXPDqSBwb3VyIGxpbWl0ZXIgbGEgbcOpbW9pcmUgdXRpbGlzw6llIHBhciBsZXMgY2FjaGVzXG4gKi9cbmV4cG9ydCBjbGFzcyBMUlVDYWNoZTxLLCBWPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4U2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIGNhY2hlOiBNYXA8SywgVj47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgTFJVIGNhY2hlIHdpdGggdGhlIHNwZWNpZmllZCBtYXhpbXVtIHNpemVcbiAgICogXG4gICAqIEBwYXJhbSBtYXhTaXplIC0gTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gc3RvcmUgaW4gdGhlIGNhY2hlIChkZWZhdWx0OiA1MDApXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtYXhTaXplID0gNTAwKSB7XG4gICAgaWYgKG1heFNpemUgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTFJVIENhY2hlIG1heFNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5tYXhTaXplID0gbWF4U2l6ZTtcbiAgICB0aGlzLmNhY2hlID0gbmV3IE1hcDxLLCBWPigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGtleSBleGlzdHMgaW4gdGhlIGNhY2hlXG4gICAqIFbDqXJpZmllIHNpIHVuZSBjbMOpIGV4aXN0ZSBkYW5zIGxlIGNhY2hlXG4gICAqIFxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBjaGVja1xuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBrZXkgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGhhcyhrZXk6IEspOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5oYXMoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW50IHVuZSB2YWxldXIgZHUgY2FjaGUgZXQgbGEgbWFycXVlIGNvbW1lIHLDqWNlbW1lbnQgdXRpbGlzw6llXG4gICAqIEdldHMgYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZSBieSBrZXlcbiAgICogSWYgdGhlIGtleSBleGlzdHMsIGl0IGlzIG1vdmVkIHRvIHRoZSBlbmQgKG1vc3QgcmVjZW50bHkgdXNlZClcbiAgICogXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIHJldHJpZXZlXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSwgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0KGtleTogSyk6IFYgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRMOpcGxhY2VyIGxhIGNsw6kgw6AgbGEgZmluIChtb3N0IHJlY2VudGx5IHVzZWQpXG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBam91dGUgb3UgbWV0IMOgIGpvdXIgdW5lIHZhbGV1ciBkYW5zIGxlIGNhY2hlXG4gICAqIFNldHMgYSB2YWx1ZSBpbiB0aGUgY2FjaGVcbiAgICogSWYgdGhlIGtleSBhbHJlYWR5IGV4aXN0cywgaXQgaXMgdXBkYXRlZCBhbmQgbW92ZWQgdG8gdGhlIGVuZFxuICAgKiBTaSBsYSB0YWlsbGUgbWF4aW1hbGUgZXN0IGF0dGVpbnRlLCBzdXBwcmltZSBsJ2VudHLDqWUgbGEgbW9pbnMgcsOpY2VtbWVudCB1dGlsaXPDqWVcbiAgICogXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIHNldFxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc3RvcmVcbiAgICovXG4gIHNldChrZXk6IEssIHZhbHVlOiBWKTogdm9pZCB7XG4gICAgLy8gU2kgbGEgY2zDqSBleGlzdGUgZMOpasOgLCBsYSBzdXBwcmltZXIgZCdhYm9yZCBwb3VyIGxhIGTDqXBsYWNlciDDoCBsYSBmaW5cbiAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSkge1xuICAgICAgdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2FjaGUuc2l6ZSA+PSB0aGlzLm1heFNpemUpIHtcbiAgICAgIC8vIFN1cHByaW1lciBsJ2VudHLDqWUgbGEgbW9pbnMgcsOpY2VtbWVudCB1dGlsaXPDqWUgKHByZW1pw6hyZSBlbnRyw6llKVxuICAgICAgLy8gTWFwIGl0ZXJhdG9yJ3MgSXRlcmF0b3JSZXN1bHQudmFsdWUgdHlwZSBkZWZhdWx0cyB0byBcIlQgfCBhbnlcIiAodGhlXG4gICAgICAvLyByZXR1cm4tcG9zaXRpb24gdHlwZSBwYXJhbSBkZWZhdWx0cyB0byBhbnkpLCB3aGljaCBUUyBjb2xsYXBzZXMgdG9cbiAgICAgIC8vIGFueSAtLSBjYXN0IGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4ganVzdCBhbm5vdGF0aW5nIHRoZSB2YXJpYWJsZS5cbiAgICAgIGNvbnN0IGZpcnN0S2V5ID0gdGhpcy5jYWNoZS5rZXlzKCkubmV4dCgpLnZhbHVlIGFzIEsgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZmlyc3RLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShmaXJzdEtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFqb3V0ZXIgbGEgbm91dmVsbGUgZW50csOpZSDDoCBsYSBmaW5cbiAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdXBwcmltZSB1bmUgZW50csOpZSBkdSBjYWNoZVxuICAgKiBEZWxldGVzIGFuIGVudHJ5IGZyb20gdGhlIGNhY2hlXG4gICAqIFxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBkZWxldGVcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUga2V5IHdhcyBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGRlbGV0ZShrZXk6IEspOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaWRlIGNvbXBsw6h0ZW1lbnQgbGUgY2FjaGVcbiAgICogQ2xlYXJzIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgbGEgdGFpbGxlIGFjdHVlbGxlIGR1IGNhY2hlXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgY2FjaGVcbiAgICogXG4gICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGNhY2hlXG4gICAqL1xuICBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgbGEgdGFpbGxlIG1heGltYWxlIGR1IGNhY2hlXG4gICAqIEdldHMgdGhlIG1heGltdW0gc2l6ZSBsaW1pdCBvZiB0aGUgY2FjaGVcbiAgICogXG4gICAqIEByZXR1cm5zIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzdG9yZWRcbiAgICovXG4gIGdldCBtYXhTaXplTGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tYXhTaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG91cm5lIHVuIGl0w6lyYXRldXIgc3VyIHRvdXRlcyBsZXMgZW50csOpZXMgZHUgY2FjaGVcbiAgICogUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIGFsbCBlbnRyaWVzIGluIHRoZSBjYWNoZVxuICAgKiBVdGlsZSBwb3VyIGxlIG5ldHRveWFnZSBww6lyaW9kaXF1ZVxuICAgKiBVc2VmdWwgZm9yIHBlcmlvZGljIGNsZWFudXBcbiAgICogXG4gICAqIEByZXR1cm5zIEl0ZXJhdG9yIG92ZXIgW2tleSwgdmFsdWVdIHBhaXJzXG4gICAqL1xuICBlbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0ssIFZdPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZW50cmllcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG91cm5lIHVuIGl0w6lyYXRldXIgc3VyIHRvdXRlcyBsZXMgY2zDqXMgZHUgY2FjaGVcbiAgICogUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIGFsbCBrZXlzIGluIHRoZSBjYWNoZVxuICAgKiBcbiAgICogQHJldHVybnMgSXRlcmF0b3Igb3ZlciBrZXlzXG4gICAqL1xuICBrZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8Sz4ge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmtleXMoKTtcbiAgfVxufVxuXG4iLCJpbXBvcnQgeyBDaHJvbm8sIFBhcnNlZFJlc3VsdCwgUGFyc2luZ09wdGlvbiB9IGZyb20gXCJjaHJvbm8tbm9kZVwiO1xuaW1wb3J0IGdldENocm9ub3MgZnJvbSBcIi4vY2hyb25vXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IFRpbWVEZXRlY3RvciB9IGZyb20gXCIuL3RpbWUtZGV0ZWN0b3JcIjtcbmltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSBcIi4vbHJ1LWNhY2hlXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbkNvbGxlY3RvciB9IGZyb20gXCIuL3RyYW5zbGF0aW9uLWNvbGxlY3RvclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbmltcG9ydCB7IERheU9mV2VlayB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQge1xuICBnZXRMb2NhbGVXZWVrU3RhcnQsXG4gIGdldFdlZWtOdW1iZXIsXG4gIE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sXG4gIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gIGRlc2NyaWJlRXJyb3IsXG59IGZyb20gXCIuL3V0aWxzXCI7XG5cblxuLy8gVHlwZSBhbGlhcyBmb3IgTW9tZW50IGZyb20gdGhlIG1vbWVudCBsaWJyYXJ5IGJ1bmRsZWQgd2l0aCBPYnNpZGlhblxuLy8gVXNpbmcgdGhlIHR5cGUgZnJvbSB0aGUgbW9tZW50IGxpYnJhcnkgdHlwZXMgc2luY2UgbW9tZW50IGlzIGJ1bmRsZWQgd2l0aCBPYnNpZGlhblxuLy8gVGhlIG1vbWVudCBwYWNrYWdlIGlzIGJ1bmRsZWQgd2l0aCBPYnNpZGlhbiwgYnV0IHRoZSBNb21lbnQgdHlwZSBpcyBub3QgZXhwb3J0ZWQgZnJvbSBvYnNpZGlhbiBtb2R1bGVcbnR5cGUgTW9tZW50ID0gaW1wb3J0KFwibW9tZW50XCIpLk1vbWVudDtcblxudHlwZSBUaW1lVW5pdCA9ICdtaW51dGVzJyB8ICdob3VycycgfCAnZGF5cycgfCAnd2Vla3MnIHwgJ21vbnRocycgfCAneWVhcnMnO1xuXG4vKipcbiAqIFJlc3VsdCBvYmplY3QgcmV0dXJuZWQgYnkgZGF0ZSBwYXJzaW5nIG1ldGhvZHMuXG4gKiBDb250YWlucyB0aGUgcGFyc2VkIGRhdGUgaW4gbXVsdGlwbGUgZm9ybWF0cyBmb3IgY29udmVuaWVuY2UuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXN1bHQgPSBwbHVnaW4ucGFyc2VEYXRlKFwidG9tb3Jyb3dcIik7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9ybWF0dGVkU3RyaW5nKTsgLy8gXCIyMDI1LTAxLTA2XCJcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5kYXRlKTsgLy8gRGF0ZSBvYmplY3RcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5tb21lbnQuZm9ybWF0KFwiZGRkZFwiKSk7IC8vIFwiTW9uZGF5XCJcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5MRFJlc3VsdCB7XG4gIC8qKiBGb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0ICovXG4gIGZvcm1hdHRlZFN0cmluZzogc3RyaW5nO1xuICAvKiogTmF0aXZlIEphdmFTY3JpcHQgRGF0ZSBvYmplY3QgKi9cbiAgZGF0ZTogRGF0ZTtcbiAgLyoqIE1vbWVudC5qcyBvYmplY3QgZm9yIGFkdmFuY2VkIGRhdGUgbWFuaXB1bGF0aW9uICovXG4gIG1vbWVudDogTW9tZW50O1xufVxuXG4vKipcbiAqIFJlc3VsdCBvYmplY3QgcmV0dXJuZWQgYnkgZGF0ZSByYW5nZSBwYXJzaW5nIG1ldGhvZHMuXG4gKiBDb250YWlucyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBvZiBhIHBhcnNlZCByYW5nZSwgcGx1cyBhIGxpc3Qgb2YgYWxsIGRhdGVzIGluIHRoZSByYW5nZS5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJhbmdlID0gcGx1Z2luLnBhcnNlRGF0ZVJhbmdlKFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCIpO1xuICogaWYgKHJhbmdlKSB7XG4gKiAgIGNvbnNvbGUubG9nKHJhbmdlLnN0YXJ0RGF0ZSk7IC8vIERhdGUgb2JqZWN0IGZvciBNb25kYXlcbiAqICAgY29uc29sZS5sb2cocmFuZ2UuZW5kRGF0ZSk7IC8vIERhdGUgb2JqZWN0IGZvciBGcmlkYXlcbiAqICAgY29uc29sZS5sb2cocmFuZ2UuZGF0ZUxpc3Q/Lmxlbmd0aCk7IC8vIDUgKE1vbmRheSB0aHJvdWdoIEZyaWRheSlcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5MRFJhbmdlUmVzdWx0IHtcbiAgLyoqIEZvcm1hdHRlZCByYW5nZSBzdHJpbmcgKGUuZy4sIFwiMjAyNS0wMS0wNiB0byAyMDI1LTAxLTEwXCIpICovXG4gIGZvcm1hdHRlZFN0cmluZzogc3RyaW5nO1xuICAvKiogU3RhcnQgZGF0ZSBvZiB0aGUgcmFuZ2UgYXMgYSBuYXRpdmUgRGF0ZSBvYmplY3QgKi9cbiAgc3RhcnREYXRlOiBEYXRlO1xuICAvKiogRW5kIGRhdGUgb2YgdGhlIHJhbmdlIGFzIGEgbmF0aXZlIERhdGUgb2JqZWN0ICovXG4gIGVuZERhdGU6IERhdGU7XG4gIC8qKiBTdGFydCBkYXRlIGFzIGEgTW9tZW50LmpzIG9iamVjdCAqL1xuICBzdGFydE1vbWVudDogTW9tZW50O1xuICAvKiogRW5kIGRhdGUgYXMgYSBNb21lbnQuanMgb2JqZWN0ICovXG4gIGVuZE1vbWVudDogTW9tZW50O1xuICAvKiogQWx3YXlzIHRydWUgZm9yIHJhbmdlIHJlc3VsdHMgKi9cbiAgaXNSYW5nZTogdHJ1ZTtcbiAgLyoqIE9wdGlvbmFsIGxpc3Qgb2YgYWxsIGRhdGVzIGluIHRoZSByYW5nZSBhcyBNb21lbnQgb2JqZWN0cyAqL1xuICBkYXRlTGlzdD86IE1vbWVudFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTERQYXJzZXIge1xuICBjaHJvbm9zOiBDaHJvbm9bXTtcbiAgbGFuZ3VhZ2VzOiBzdHJpbmdbXTtcbiAgXG4gIC8vIER5bmFtaWMgcmVnZXggZ2VuZXJhdGVkIGZyb20gdHJhbnNsYXRpb25zXG4gIHJlZ2V4UmVsYXRpdmU6IFJlZ0V4cDtcbiAgcmVnZXhSZWxhdGl2ZUNvbWJpbmVkOiBSZWdFeHA7IC8vIEZvciBcImluIDIgd2Vla3MgYW5kIDMgZGF5c1wiXG4gIHJlZ2V4V2Vla2RheTogUmVnRXhwO1xuICByZWdleFdlZWtkYXlXaXRoVGltZTogUmVnRXhwOyAvLyBGb3IgXCJuZXh0IE1vbmRheSBhdCAzcG1cIlxuICByZWdleFdlZWtkYXlPbmx5OiBSZWdFeHA7IC8vIEZvciBcIndlZG5lc2RheVwiICh3aXRob3V0IHByZWZpeClcbiAgcmVnZXhEYXRlUmFuZ2U6IFJlZ0V4cDsgLy8gRm9yIFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCJcbiAgcmVnZXhPcmRpbmFsT2ZNb250aDogUmVnRXhwOyAvLyBGb3IgXCJ0aGUgMTV0aCBvZiBuZXh0IG1vbnRoXCJcbiAgcmVnZXhMYXN0RGF5T2ZNb250aDogUmVnRXhwOyAvLyBGb3IgXCJsYXN0IGRheSBvZiBtb250aFwiXG4gIHJlZ2V4V2Vla2RheU9mTW9udGg6IFJlZ0V4cDsgLy8gRm9yIFwiZmlyc3QgTW9uZGF5IG9mIG1vbnRoXCJcbiAgLy8gRm9yIHN1ZmZpeCBsYW5ndWFnZXMgdGhhdCBwdXQgdGhlIHF1YW50aWZpZXIvdW5pdCBiZWZvcmUgdGhlIFwibGF0ZXJcIiBtYXJrZXJcbiAgLy8gaW5zdGVhZCBvZiBhbiBcImluXCIgcHJlZml4IChlLmcuIENoaW5lc2UgXCIy5aSp5b6MXCIgPSBcIjIgZGF5c1wiICsgXCLlvoxcIiA9IFwibGF0ZXJcIikuXG4gIHJlZ2V4UmVsYXRpdmVTdWZmaXg6IFJlZ0V4cCB8IG51bGw7XG4gIHJlZ2V4UmVsYXRpdmVDb21iaW5lZFN1ZmZpeDogUmVnRXhwIHwgbnVsbDsgLy8gRm9yIFwiMumAseWSjDPlpKnlvoxcIiAoMiB3ZWVrcyBhbmQgMyBkYXlzIGxhdGVyKVxuICAvLyBNaXJyb3Igb2YgcmVnZXhSZWxhdGl2ZVN1ZmZpeCBmb3IgdGhlIFBBU1QgZGlyZWN0aW9uIChlLmcuIFBvcnR1Z3Vlc2VcbiAgLy8gXCIzIGRpYXMgYXRyw6FzXCIgPSBcIjMgZGF5c1wiICsgXCJhdHLDoXNcIiA9IFwiYWdvXCIpLlxuICByZWdleEFnb1N1ZmZpeDogUmVnRXhwIHwgbnVsbDtcbiAgXG4gIC8vIEtleXdvcmRzIGZvciBhbGwgbGFuZ3VhZ2VzXG4gIGltbWVkaWF0ZUtleXdvcmRzOiBTZXQ8c3RyaW5nPjtcbiAgcHJlZml4S2V5d29yZHM6IHsgdGhpczogU2V0PHN0cmluZz47IG5leHQ6IFNldDxzdHJpbmc+OyBsYXN0OiBTZXQ8c3RyaW5nPiB9O1xuICB0aW1lVW5pdE1hcDogTWFwPHN0cmluZywgVGltZVVuaXQ+O1xuICBcbiAgLy8gQ2FjaGUgZm9yIHBhcnNlZCBkYXRlcyAoTFJVIGF2ZWMgbGltaXRlIGRlIDUwMCBlbnRyw6llcylcbiAgcHJpdmF0ZSBjYWNoZTogTFJVQ2FjaGU8c3RyaW5nLCBEYXRlPjtcbiAgcHJpdmF0ZSBjYWNoZURheTogbnVtYmVyOyAvLyBEYXkgb2YgeWVhciBmb3IgY2FjaGUgaW52YWxpZGF0aW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX0NBQ0hFX1NJWkUgPSA1MDA7XG4gIFxuICAvLyBDb2xsZWN0cy9jYWNoZXMgdHJhbnNsYXRpb25zIGFjcm9zcyBhbGwgYWN0aXZlIGxhbmd1YWdlcyBhbmQgYnVpbGRzXG4gIC8vIHJlZ2V4IGFsdGVybmF0aW9ucyBmcm9tIHRoZW0gKHNlZSB0cmFuc2xhdGlvbi1jb2xsZWN0b3IudHMpXG4gIHByaXZhdGUgdGM6IFRyYW5zbGF0aW9uQ29sbGVjdG9yO1xuXG4gIC8vIFRpbWUgZGV0ZWN0b3JcbiAgcHJpdmF0ZSB0aW1lRGV0ZWN0b3I6IFRpbWVEZXRlY3RvcjtcblxuICBjb25zdHJ1Y3RvcihsYW5ndWFnZXM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5sYW5ndWFnZXMgPSBsYW5ndWFnZXM7XG4gICAgdGhpcy5jaHJvbm9zID0gZ2V0Q2hyb25vcyhsYW5ndWFnZXMpO1xuICAgIHRoaXMudGMgPSBuZXcgVHJhbnNsYXRpb25Db2xsZWN0b3IobGFuZ3VhZ2VzKTtcbiAgICB0aGlzLmluaXRpYWxpemVSZWdleCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUtleXdvcmRzKCk7XG4gICAgdGhpcy5jYWNoZSA9IG5ldyBMUlVDYWNoZTxzdHJpbmcsIERhdGU+KHRoaXMuTUFYX0NBQ0hFX1NJWkUpO1xuICAgIHRoaXMuY2FjaGVEYXkgPSB0aGlzLmdldERheU9mWWVhcigpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdGltZSBkZXRlY3RvclxuICAgIHRoaXMudGltZURldGVjdG9yID0gbmV3IFRpbWVEZXRlY3Rvcih7XG4gICAgICBsYW5ndWFnZXM6IHRoaXMubGFuZ3VhZ2VzLFxuICAgICAgY2hyb25vczogdGhpcy5jaHJvbm9zLFxuICAgICAgcmVnZXhSZWxhdGl2ZTogdGhpcy5yZWdleFJlbGF0aXZlLFxuICAgICAgcmVnZXhSZWxhdGl2ZUNvbWJpbmVkOiB0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZCxcbiAgICAgIHJlZ2V4V2Vla2RheTogdGhpcy5yZWdleFdlZWtkYXksXG4gICAgICByZWdleFdlZWtkYXlXaXRoVGltZTogdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemVzIGR5bmFtaWMgcmVnZXggZnJvbSB0cmFuc2xhdGlvbnNcbiAgcHJpdmF0ZSBpbml0aWFsaXplUmVnZXgoKTogdm9pZCB7XG4gICAgY29uc3QgaW5Xb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwiaW5cIik7XG4gICAgY29uc3QgbmV4dFdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoXCJuZXh0XCIpO1xuICAgIGNvbnN0IGxhc3RXb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwibGFzdFwiKTtcbiAgICBjb25zdCB0aGlzV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcInRoaXNcIik7XG4gICAgY29uc3QgYW5kV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImFuZFwiKTtcbiAgICBjb25zdCBhdFdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoXCJhdFwiKTtcbiAgICBjb25zdCBmcm9tV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImZyb21cIik7XG4gICAgY29uc3QgdG9Xb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwidG9cIik7XG5cbiAgICAvLyBDb2xsZWN0IHdlZWtkYXlzIChsb3dlcmNhc2VkKSBhY3Jvc3MgYWxsIGxhbmd1YWdlcywgcGx1cyB0aGUgY29tbW9uXG4gICAgLy8gRW5nbGlzaCBhYmJyZXZpYXRpb25zIChtb24vdHVlLy4uLikgd2hpY2ggYXJlbid0IHBhcnQgb2YgdGhlIGRpY3Rpb25hcnkuXG4gICAgY29uc3Qgd2Vla2RheUtleXMgPSBbJ3N1bmRheScsICdtb25kYXknLCAndHVlc2RheScsICd3ZWRuZXNkYXknLCAndGh1cnNkYXknLCAnZnJpZGF5JywgJ3NhdHVyZGF5J107XG4gICAgY29uc3Qgd2Vla2RheXMgPSB3ZWVrZGF5S2V5cy5mbGF0TWFwKGtleSA9PiB0aGlzLnRjLmNvbGxlY3RXb3JkcyhrZXksIHsgbG93ZXJjYXNlOiB0cnVlIH0pKTtcbiAgICBpZiAodGhpcy5sYW5ndWFnZXMuaW5jbHVkZXMoJ2VuJykpIHtcbiAgICAgIHdlZWtkYXlzLnB1c2goJ21vbicsICd0dWUnLCAnd2VkJywgJ3RodScsICdmcmknLCAnc2F0JywgJ3N1bicpO1xuICAgIH1cblxuICAgIC8vIENvbGxlY3QgdGltZSB1bml0cyAobWludXRlL2hvdXIvZGF5L3dlZWsvbW9udGgveWVhcikgYWNyb3NzIGFsbCBsYW5ndWFnZXNcbiAgICBjb25zdCB0aW1lVW5pdEtleXMgPSBbJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICBjb25zdCB0aW1lVW5pdHMgPSB0aW1lVW5pdEtleXMuZmxhdE1hcChrZXkgPT4gdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5KSk7XG5cbiAgICBjb25zdCBpblBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oaW5Xb3Jkcyk7XG4gICAgY29uc3QgcHJlZml4UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihbLi4udGhpc1dvcmRzLCAuLi5uZXh0V29yZHMsIC4uLmxhc3RXb3Jkc10pO1xuICAgIGNvbnN0IHdlZWtkYXlQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKHdlZWtkYXlzKTtcbiAgICBjb25zdCB0aW1lVW5pdFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24odGltZVVuaXRzKTtcbiAgICBjb25zdCBhbmRQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKGFuZFdvcmRzKTtcbiAgICBjb25zdCBhdFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oYXRXb3Jkcyk7XG4gICAgY29uc3QgZnJvbVBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oZnJvbVdvcmRzKTtcbiAgICBjb25zdCB0b1BhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24odG9Xb3Jkcyk7XG5cbiAgICAvLyBTaW1wbGUgcmVnZXggZm9yIFwiaW4gMiBtaW51dGVzXCJcbiAgICB0aGlzLnJlZ2V4UmVsYXRpdmUgPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooPzoke2luUGF0dGVybn0pXFxcXHMrKFxcXFxkKylcXFxccyooJHt0aW1lVW5pdFBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFJlZ2V4IGZvciBjb21iaW5hdGlvbnMgXCJpbiAyIHdlZWtzIGFuZCAzIGRheXNcIlxuICAgIHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeXFxcXHMqKD86JHtpblBhdHRlcm59KVxcXFxzKyhcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccysoPzoke2FuZFBhdHRlcm59KVxcXFxzKyhcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBTaW1wbGUgcmVnZXggZm9yIFwibmV4dCBNb25kYXlcIlxuICAgIC8vIFVzZXMgXFxzKiAobm90IFxccyspIGJldHdlZW4gcHJlZml4IGFuZCB3ZWVrZGF5IHNvIGxhbmd1YWdlcyB3aXRob3V0IHNwYWNlc1xuICAgIC8vIGJldHdlZW4gd29yZHMgKGUuZy4gQ2hpbmVzZSBcIuS4i+S4gOWAi+aYn+acn+S4gFwiKSBzdGlsbCBtYXRjaC5cbiAgICB0aGlzLnJlZ2V4V2Vla2RheSA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKigke3ByZWZpeFBhdHRlcm59KVxcXFxzKigke3dlZWtkYXlQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBSZWdleCBmb3IgXCJuZXh0IE1vbmRheSBhdCAzcG1cIiAtIGNhcHR1cmVzIGRheSBhbmQgdGltZVxuICAgIHRoaXMucmVnZXhXZWVrZGF5V2l0aFRpbWUgPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooJHtwcmVmaXhQYXR0ZXJufSlcXFxccyooJHt3ZWVrZGF5UGF0dGVybn0pXFxcXHMrKD86JHthdFBhdHRlcm59KVxcXFxzKyguKykkYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBSZWdleCBmb3Igc2ltcGxlIHdlZWtkYXkgd2l0aG91dCBwcmVmaXggKGUuZy4sIFwid2VkbmVzZGF5XCIsIFwiZnJpZGF5XCIpXG4gICAgdGhpcy5yZWdleFdlZWtkYXlPbmx5ID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeXFxcXHMqKCR7d2Vla2RheVBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFJlZ2V4IGZvciBcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiIC0gY2FwdHVyZXMgdHdvIHdlZWtkYXlzXG4gICAgdGhpcy5yZWdleERhdGVSYW5nZSA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKig/OiR7ZnJvbVBhdHRlcm59KVxcXFxzKigke3dlZWtkYXlQYXR0ZXJufSlcXFxccyooPzoke3RvUGF0dGVybn0pXFxcXHMqKCR7d2Vla2RheVBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIGNvbnN0IG9mUGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcIm9mXCIpO1xuICAgIGNvbnN0IGZpcnN0UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcImZpcnN0XCIpO1xuXG4gICAgLy8gUmVnZXggZm9yIFwidGhlIDE1dGggb2YgbmV4dCBtb250aFwiIG9yIFwibGUgMTUgZHUgbW9pcyBwcm9jaGFpblwiXG4gICAgLy8gUGF0dGVybjogKG9wdGlvbmFsIFwidGhlXCIvXCJsZVwiL1wiZGVyXCIpIChvcmRpbmFsIG51bWJlciBsaWtlIFwiMTV0aFwiLCBcIjE1w6htZVwiLCBcIjE1LlwiKSBcIm9mXCIvXCJkdVwiL1wiZGVzXCIgKG5leHQvbGFzdC90aGlzKSAobW9udGgpXG4gICAgLy8gQWxzbyBoYW5kbGVzIEZyZW5jaCBpbnZlcnNpb246IFwibGUgMTUgZHUgbW9pcyBwcm9jaGFpblwiIChtb250aCBiZWZvcmUgcHJlZml4KVxuICAgIC8vIEFsc28gaGFuZGxlcyBHZXJtYW46IFwiZGVyIDE1LiBkZXMgbsOkY2hzdGVuIE1vbmF0c1wiIChwcmVmaXggYmV0d2VlbiBcIm9mXCIgYW5kIG1vbnRoKVxuICAgIC8vIFVzaW5nIE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gZnJvbSB1dGlscy50cyBmb3Igb3JkaW5hbCBtYXRjaGluZ1xuICAgIHRoaXMucmVnZXhPcmRpbmFsT2ZNb250aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKig/OnRoZXxsZXxkZXJ8ZGFzfGVsfGlsfG98ZGV8aGV0KT9cXFxccyooJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlcXFxccysoPzoke29mUGF0dGVybn0pXFxcXHMrKD86KCR7cHJlZml4UGF0dGVybn0pXFxcXHMrKT8oJHt0aW1lVW5pdFBhdHRlcm59KSg/OlxcXFxzKygke3ByZWZpeFBhdHRlcm59KSk/XFxcXHMqJGAsXG4gICAgICAnaSdcbiAgICApO1xuXG4gICAgLy8gUmVnZXggZm9yIFwibGFzdCBkYXkgb2YgbW9udGhcIiBvciBcImRlcm5pZXIgam91ciBkdSBtb2lzXCJcbiAgICBjb25zdCBkYXlQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uRm9yKFwiZGF5XCIpO1xuXG4gICAgLy8gTWFrZSBwcmVmaXggb3B0aW9uYWwgLSBcImxhc3QgZGF5IG9mIG1vbnRoXCIgd2l0aG91dCBwcmVmaXggbWVhbnMgXCJ0aGlzIG1vbnRoXCJcbiAgICAvLyBcImxhc3RcIiBoZXJlIGlzIGFuIGFkamVjdGl2ZSBtb2RpZnlpbmcgXCJkYXlcIiwgbm90IGEgdGVtcG9yYWwgcHJlZml4XG4gICAgLy8gQWxzbyBoYW5kbGUgRnJlbmNoIGludmVyc2lvbjogXCJkZXJuaWVyIGpvdXIgZHUgbW9pcyBwcm9jaGFpblwiIChtb250aCBiZWZvcmUgcHJlZml4KVxuICAgIC8vIFBhdHRlcm46IChvcHRpb25hbCBwcmVmaXgpIFwibGFzdFwiIChkYXkgd29yZCkgXCJvZlwiIChvcHRpb25hbCBwcmVmaXgpIChtb250aCkgKG9wdGlvbmFsIHByZWZpeCBhZnRlciBtb250aClcbiAgICAvLyBSZXVzZSBsYXN0V29yZHMgY29sbGVjdGVkIGFib3ZlIChsaW5lIDE0OC0xNTApXG4gICAgY29uc3QgbGFzdEFkamVjdGl2ZVBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24obGFzdFdvcmRzKTtcbiAgICBcbiAgICB0aGlzLnJlZ2V4TGFzdERheU9mTW9udGggPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooPzooJHtwcmVmaXhQYXR0ZXJufSlcXFxccyspPygke2xhc3RBZGplY3RpdmVQYXR0ZXJufSlcXFxccysoJHtkYXlQYXR0ZXJufSlcXFxccysoPzoke29mUGF0dGVybn0pXFxcXHMrKD86KCR7cHJlZml4UGF0dGVybn0pXFxcXHMrKT8oJHt0aW1lVW5pdFBhdHRlcm59KSg/OlxcXFxzKygke3ByZWZpeFBhdHRlcm59KSk/XFxcXHMqJGAsXG4gICAgICAnaSdcbiAgICApO1xuXG4gICAgLy8gUmVnZXggZm9yIFwiZmlyc3QgTW9uZGF5IG9mIG1vbnRoXCIgb3IgXCJwcmVtaWVyIGx1bmRpIGR1IG1vaXNcIiBvciBcImxhc3QgTW9uZGF5IG9mIG1vbnRoXCJcbiAgICAvLyBBbHNvIGhhbmRsZSBGcmVuY2ggaW52ZXJzaW9uOiBcInByZW1pZXIgbHVuZGkgZHUgbW9pcyBwcm9jaGFpblwiIChtb250aCBiZWZvcmUgcHJlZml4KVxuICAgIHRoaXMucmVnZXhXZWVrZGF5T2ZNb250aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKigke2ZpcnN0UGF0dGVybn18JHtwcmVmaXhQYXR0ZXJufSlcXFxccysoJHt3ZWVrZGF5UGF0dGVybn0pXFxcXHMrKD86JHtvZlBhdHRlcm59KVxcXFxzKyg/Oigke3ByZWZpeFBhdHRlcm59KVxcXFxzKyk/KCR7dGltZVVuaXRQYXR0ZXJufSkoPzpcXFxccysoJHtwcmVmaXhQYXR0ZXJufSkpP1xcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFN1ZmZpeC1zdHlsZSBsYW5ndWFnZXMgKGUuZy4gQ2hpbmVzZSBcIjLlpKnlvoxcIi9cIjLlpKnlkI5cIiwgSmFwYW5lc2UgXCIy5pel5b6MXCIpIHB1dFxuICAgIC8vIHRoZSBcImxhdGVyXCIgbWFya2VyIGFmdGVyIHRoZSBudW1iZXIgYW5kIHVuaXQgaW5zdGVhZCBvZiB1c2luZyBhbiBcImluXCJcbiAgICAvLyBwcmVmaXguIEVhY2ggbGFuZ3VhZ2UgY2FuIGxpc3QgaXRzIG1hcmtlcihzKSBleHBsaWNpdGx5IHVuZGVyIHRoZVxuICAgIC8vIFwibGF0ZXJcIiBrZXkgKGUuZy4gQ2hpbmVzZSBcIuW+jHzlkI5cIiBmb3IgYm90aCBzY3JpcHRzKTsgdGhpcyBrZXkgaXMgbmV2ZXJcbiAgICAvLyB1c2VkIGZvciBkaXNwbGF5L2ludGVycG9sYXRpb24sIG9ubHkgZm9yIHRoaXMgbWF0Y2hpbmcsIHNvIGl0J3Mgc2FmZSB0b1xuICAgIC8vIGxpc3QgbXVsdGlwbGUgc2NyaXB0IHZhcmlhbnRzIHdpdGggXCJ8XCIgdGhlIHNhbWUgd2F5IHdlZWtkYXkvcHJlZml4IHdvcmRzXG4gICAgLy8gZG8uIFRoZSBcImluZGF5c1wiIHRlbXBsYXRlIGl0c2VsZiBtdXN0IHN0YXkgYSBzaW5nbGUgZm9ybSBzaW5jZSBpdCdzXG4gICAgLy8gYWxzbyB1c2VkIHZlcmJhdGltIGluIGF1dG9zdWdnZXN0IGxhYmVscywgYW5kIHRlbXBsYXRlcyB3aXRoXG4gICAgLy8gJXt0aW1lRGVsdGF9IGRvbid0IGdldCBzcGxpdCBvbiBcInxcIiBsaWtlIHBsYWluIHdvcmQgbGlzdHMgZG8uXG4gICAgLy9cbiAgICAvLyBMYW5ndWFnZXMgdGhhdCBkb24ndCBkZWZpbmUgXCJsYXRlclwiIGZhbGwgYmFjayB0byBpbmZlcnJpbmcgdGhlIG1hcmtlclxuICAgIC8vIGZyb20gdGhlaXIgXCJpbmRheXNcIiB0ZW1wbGF0ZSAoZS5nLiBcIiV7dGltZURlbHRhfeWkqeW+jFwiIC0+IG1hcmtlciBcIuW+jFwiKSxcbiAgICAvLyBzbyB0aGlzIHN0aWxsIHdvcmtzIGZvciBhbnkgbGFuZ3VhZ2UgYXV0aG9yZWQgd2l0aG91dCB0aGUgZXh0cmEga2V5LlxuICAgIGNvbnN0IHN1ZmZpeE1hcmtlcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IGxhbmcgb2YgdGhpcy5sYW5ndWFnZXMpIHtcbiAgICAgIGNvbnN0IGxhdGVyV29yZCA9IHRoaXMudGMudHJhbnNsYXRlKCdsYXRlcicsIGxhbmcpO1xuICAgICAgaWYgKGxhdGVyV29yZCAmJiBsYXRlcldvcmQgIT09ICdOT1RGT1VORCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBtYXJrZXIgb2YgbGF0ZXJXb3JkLnNwbGl0KCd8JykubWFwKHcgPT4gdy50cmltKCkpLmZpbHRlcih3ID0+IHcpKSB7XG4gICAgICAgICAgc3VmZml4TWFya2Vycy5hZGQobWFya2VyKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnRjLnRyYW5zbGF0ZSgnaW5kYXlzJywgbGFuZyk7XG4gICAgICBpZiAoIXRlbXBsYXRlIHx8IHRlbXBsYXRlID09PSAnTk9URk9VTkQnIHx8IHRlbXBsYXRlLmluZGV4T2YoJyV7dGltZURlbHRhfScpICE9PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVtYWluZGVyID0gdGVtcGxhdGUuc2xpY2UoJyV7dGltZURlbHRhfScubGVuZ3RoKTtcbiAgICAgIGNvbnN0IGRheVdvcmQgPSB0aGlzLnRjLnRyYW5zbGF0ZSgnZGF5JywgbGFuZyk7XG4gICAgICBpZiAoIWRheVdvcmQgfHwgZGF5V29yZCA9PT0gJ05PVEZPVU5EJykgY29udGludWU7XG4gICAgICBjb25zdCB1bml0VXNlZCA9IGRheVdvcmQuc3BsaXQoJ3wnKS5tYXAodyA9PiB3LnRyaW0oKSkuZmlsdGVyKHcgPT4gdykuZmluZCh2ID0+IHJlbWFpbmRlci5zdGFydHNXaXRoKHYpKTtcbiAgICAgIGlmICghdW5pdFVzZWQpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgbWFya2VyID0gcmVtYWluZGVyLnNsaWNlKHVuaXRVc2VkLmxlbmd0aCkudHJpbSgpO1xuICAgICAgaWYgKG1hcmtlcikgc3VmZml4TWFya2Vycy5hZGQobWFya2VyKTtcbiAgICB9XG5cbiAgICBpZiAoc3VmZml4TWFya2Vycy5zaXplID4gMCkge1xuICAgICAgY29uc3Qgc3VmZml4UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihBcnJheS5mcm9tKHN1ZmZpeE1hcmtlcnMpKTtcbiAgICAgIHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCA9IG5ldyBSZWdFeHAoXG4gICAgICAgIGBeXFxcXHMqKFxcXFxkKylcXFxccyooJHt0aW1lVW5pdFBhdHRlcm59KVxcXFxzKig/OiR7c3VmZml4UGF0dGVybn0pXFxcXHMqJGAsXG4gICAgICAgICdpJ1xuICAgICAgKTtcbiAgICAgIHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkU3VmZml4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgYF5cXFxccyooXFxcXGQrKVxcXFxzKigke3RpbWVVbml0UGF0dGVybn0pXFxcXHMqKD86JHthbmRQYXR0ZXJufSlcXFxccyooXFxcXGQrKVxcXFxzKigke3RpbWVVbml0UGF0dGVybn0pXFxcXHMqKD86JHtzdWZmaXhQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICAgJ2knXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlZ2V4UmVsYXRpdmVTdWZmaXggPSBudWxsO1xuICAgICAgdGhpcy5yZWdleFJlbGF0aXZlQ29tYmluZWRTdWZmaXggPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFN1ZmZpeC1zdHlsZSBQQVNUIGxhbmd1YWdlcyAoZS5nLiBQb3J0dWd1ZXNlIFwiMyBkaWFzIGF0csOhc1wiID0gXCIzIGRheXNcIlxuICAgIC8vICsgXCJhdHLDoXNcIiA9IFwiYWdvXCIpLCB0aGUgcGFzdC1kaXJlY3Rpb24gbWlycm9yIG9mIHRoZSBcImxhdGVyXCIgbWVjaGFuaXNtXG4gICAgLy8gYWJvdmUuIFVubGlrZSBcImxhdGVyXCIsIHRoZXJlJ3Mgbm8gdGVtcGxhdGUgdG8gaW5mZXIgdGhpcyBtYXJrZXIgZnJvbVxuICAgIC8vICh0aGUgZGF5c2FnbyB0ZW1wbGF0ZSBhbHJlYWR5IGhhcyBpdHMgb3duICV7dGltZURlbHRhfS1wcmVmaXggZm9ybSwgXCJow6FcbiAgICAvLyAle3RpbWVEZWx0YX0gZGlhc1wiLCB3aGljaCBkb2Vzbid0IGltcGx5IGEgc3VmZml4IHZhcmlhbnQgYWxzbyBleGlzdHMpLFxuICAgIC8vIHNvIGxhbmd1YWdlcyBtdXN0IG9wdCBpbiBleHBsaWNpdGx5IHZpYSB0aGUgXCJhZ29zdWZmaXhcIiBrZXkuXG4gICAgY29uc3QgYWdvU3VmZml4TWFya2VycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgYWdvU3VmZml4V29yZCA9IHRoaXMudGMudHJhbnNsYXRlKCdhZ29zdWZmaXgnLCBsYW5nKTtcbiAgICAgIGlmIChhZ29TdWZmaXhXb3JkICYmIGFnb1N1ZmZpeFdvcmQgIT09ICdOT1RGT1VORCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBtYXJrZXIgb2YgYWdvU3VmZml4V29yZC5zcGxpdCgnfCcpLm1hcCh3ID0+IHcudHJpbSgpKS5maWx0ZXIodyA9PiB3KSkge1xuICAgICAgICAgIGFnb1N1ZmZpeE1hcmtlcnMuYWRkKG1hcmtlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWdvU3VmZml4TWFya2Vycy5zaXplID4gMCkge1xuICAgICAgY29uc3QgYWdvU3VmZml4UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihBcnJheS5mcm9tKGFnb1N1ZmZpeE1hcmtlcnMpKTtcbiAgICAgIHRoaXMucmVnZXhBZ29TdWZmaXggPSBuZXcgUmVnRXhwKFxuICAgICAgICBgXlxcXFxzKihcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccyooPzoke2Fnb1N1ZmZpeFBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgICAnaSdcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVnZXhBZ29TdWZmaXggPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIEluaXRpYWxpemVzIGtleXdvcmRzIGZvciBmYXN0IGRldGVjdGlvblxuICBwcml2YXRlIGluaXRpYWxpemVLZXl3b3JkcygpOiB2b2lkIHtcbiAgICB0aGlzLmltbWVkaWF0ZUtleXdvcmRzID0gbmV3IFNldChcbiAgICAgIFsnbm93JywgJ3RvZGF5JywgJ3RvbW9ycm93JywgJ3llc3RlcmRheSddLmZsYXRNYXAoa2V5ID0+IHRoaXMudGMuY29sbGVjdFdvcmRzKGtleSwgeyBsb3dlcmNhc2U6IHRydWUgfSkpXG4gICAgKTtcbiAgICB0aGlzLnByZWZpeEtleXdvcmRzID0ge1xuICAgICAgdGhpczogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcInRoaXNcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkpLFxuICAgICAgbmV4dDogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcIm5leHRcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkpLFxuICAgICAgbGFzdDogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImxhc3RcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkpLFxuICAgIH07XG5cbiAgICAvLyBUaW1lIHVuaXRzIHdpdGggbWFwcGluZyB0byBNb21lbnQuanMgdW5pdHNcbiAgICBjb25zdCB1bml0TWFwcGluZ3M6IHsga2V5OiBzdHJpbmc7IG1vbWVudFVuaXQ6IFRpbWVVbml0IH1bXSA9IFtcbiAgICAgIHsga2V5OiAnbWludXRlJywgbW9tZW50VW5pdDogJ21pbnV0ZXMnIH0sXG4gICAgICB7IGtleTogJ2hvdXInLCBtb21lbnRVbml0OiAnaG91cnMnIH0sXG4gICAgICB7IGtleTogJ2RheScsIG1vbWVudFVuaXQ6ICdkYXlzJyB9LFxuICAgICAgeyBrZXk6ICd3ZWVrJywgbW9tZW50VW5pdDogJ3dlZWtzJyB9LFxuICAgICAgeyBrZXk6ICdtb250aCcsIG1vbWVudFVuaXQ6ICdtb250aHMnIH0sXG4gICAgICB7IGtleTogJ3llYXInLCBtb21lbnRVbml0OiAneWVhcnMnIH0sXG4gICAgXTtcbiAgICB0aGlzLnRpbWVVbml0TWFwID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgbWFwcGluZyBvZiB1bml0TWFwcGluZ3MpIHtcbiAgICAgIGZvciAoY29uc3Qgd29yZCBvZiB0aGlzLnRjLmNvbGxlY3RXb3JkcyhtYXBwaW5nLmtleSwgeyBsb3dlcmNhc2U6IHRydWUgfSkpIHtcbiAgICAgICAgdGhpcy50aW1lVW5pdE1hcC5zZXQod29yZCwgbWFwcGluZy5tb21lbnRVbml0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAtLS0gVVRJTElUWSBGVU5DVElPTjogREFZIE5BTUUg4oaSIE5VTUVSSUMgSU5ERVggQ09OVkVSU0lPTiAtLS1cbiAgLy8gQ29udmVydHMgZGF5IG5hbWVzIGZyb20gYWxsIGxhbmd1YWdlcyB0byBudW1lcmljIGluZGljZXMgKDAtNilcbiAgLy8gTW9tZW50LmpzIHVzZXM6IDA9U3VuZGF5LCAxPU1vbmRheSwgMj1UdWVzZGF5LCAzPVdlZG5lc2RheSwgND1UaHVyc2RheSwgNT1GcmlkYXksIDY9U2F0dXJkYXlcbiAgcHJpdmF0ZSBnZXREYXlPZldlZWtJbmRleChkYXlOYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBkYXlOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBFbmdsaXNoIGRheSBuYW1lcy9hYmJyZXZpYXRpb25zLCBhbHdheXMgYXZhaWxhYmxlIHJlZ2FyZGxlc3Mgb2YgYWN0aXZlIGxhbmd1YWdlc1xuICAgIGNvbnN0IGRheU1hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHtcbiAgICAgICdzdW5kYXknOiAwLCAnc3VuJzogMCxcbiAgICAgICdtb25kYXknOiAxLCAnbW9uJzogMSxcbiAgICAgICd0dWVzZGF5JzogMiwgJ3R1ZSc6IDIsICd0dWVzJzogMixcbiAgICAgICd3ZWRuZXNkYXknOiAzLCAnd2VkJzogMyxcbiAgICAgICd0aHVyc2RheSc6IDQsICd0aHUnOiA0LCAndGh1cic6IDQsICd0aHVycyc6IDQsXG4gICAgICAnZnJpZGF5JzogNSwgJ2ZyaSc6IDUsXG4gICAgICAnc2F0dXJkYXknOiA2LCAnc2F0JzogNixcbiAgICB9O1xuXG4gICAgLy8gQWRkIGRheXMgZnJvbSBhbGwgZW5hYmxlZCBsYW5ndWFnZXNcbiAgICBjb25zdCBkYXlLZXlzID0gWydzdW5kYXknLCAnbW9uZGF5JywgJ3R1ZXNkYXknLCAnd2VkbmVzZGF5JywgJ3RodXJzZGF5JywgJ2ZyaWRheScsICdzYXR1cmRheSddO1xuICAgIGRheUtleXMuZm9yRWFjaCgoa2V5LCBpKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5LCB7IGxvd2VyY2FzZTogdHJ1ZSB9KSkge1xuICAgICAgICBkYXlNYXBbdmFyaWFudF0gPSBpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRheU1hcFtub3JtYWxpemVkXSA/PyAwOyAvLyBEZWZhdWx0IHRvIFN1bmRheSBpZiBub3QgcmVjb2duaXplZFxuICB9XG5cbiAgLy8gLS0tIENBQ0hFIFVUSUxJVElFUyAtLS1cbiAgLy8gR2V0IGRheSBvZiB5ZWFyICgxLTM2NS8zNjYpIGZvciBjYWNoZSBpbnZhbGlkYXRpb25cbiAgcHJpdmF0ZSBnZXREYXlPZlllYXIoKTogbnVtYmVyIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIDAsIDApO1xuICAgIGNvbnN0IGRpZmYgPSBub3cuZ2V0VGltZSgpIC0gc3RhcnQuZ2V0VGltZSgpO1xuICAgIHJldHVybiBNYXRoLmZsb29yKGRpZmYgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgY2FjaGUga2V5IGZyb20gc2VsZWN0ZWRUZXh0LCB3ZWVrU3RhcnRQcmVmZXJlbmNlLCBhbmQgY3VycmVudCBkYXlcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNhY2hlS2V5KHNlbGVjdGVkVGV4dDogc3RyaW5nLCB3ZWVrU3RhcnRQcmVmZXJlbmNlOiBEYXlPZldlZWspOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1cnJlbnREYXkgPSB0aGlzLmdldERheU9mWWVhcigpO1xuICAgIC8vIEluY2x1ZGUgZGF5IGluIGtleSB0byBhdXRvbWF0aWNhbGx5IGludmFsaWRhdGUgY2FjaGUgd2hlbiBkYXkgY2hhbmdlc1xuICAgIHJldHVybiBgJHtzZWxlY3RlZFRleHQudHJpbSgpfXwke3dlZWtTdGFydFByZWZlcmVuY2V9fCR7Y3VycmVudERheX1gO1xuICB9XG5cbiAgLy8gU3RvcmUgcmVzdWx0IGluIGNhY2hlIGFuZCByZXR1cm4gaXRcbiAgcHJpdmF0ZSBjYWNoZUFuZFJldHVybihjYWNoZUtleTogc3RyaW5nLCByZXN1bHQ6IERhdGUpOiBEYXRlIHtcbiAgICAvLyBDcsOpZXIgdW5lIG5vdXZlbGxlIGluc3RhbmNlIGRlIERhdGUgcG91ciDDqXZpdGVyIGxlcyByw6lmw6lyZW5jZXMgcGFydGFnw6llc1xuICAgIGNvbnN0IGNhY2hlZERhdGUgPSBuZXcgRGF0ZShyZXN1bHQuZ2V0VGltZSgpKTtcbiAgICB0aGlzLmNhY2hlLnNldChjYWNoZUtleSwgY2FjaGVkRGF0ZSk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHJlc3VsdC5nZXRUaW1lKCkpO1xuICB9XG5cbiAgLy8gLS0tIE1BSU4gRU5HSU5FIC0tLVxuICAvKipcbiAgICogUGFyc2VzIGEgbmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyBhbmQgcmV0dXJucyBhIERhdGUgb2JqZWN0LlxuICAgKiBcbiAgICogU3VwcG9ydHMgbXVsdGlwbGUgbGFuZ3VhZ2VzIGFuZCB2YXJpb3VzIGRhdGUgZXhwcmVzc2lvbnM6XG4gICAqIC0gSW1tZWRpYXRlIGRhdGVzOiBcInRvZGF5XCIsIFwidG9tb3Jyb3dcIiwgXCJ5ZXN0ZXJkYXlcIiwgXCJub3dcIlxuICAgKiAtIFJlbGF0aXZlIGRhdGVzOiBcImluIDIgZGF5c1wiLCBcImluIDMgd2Vla3NcIiwgXCJpbiAxIG1vbnRoXCJcbiAgICogLSBDb21iaW5lZCBkdXJhdGlvbnM6IFwiaW4gMiB3ZWVrcyBhbmQgMyBkYXlzXCJcbiAgICogLSBXZWVrZGF5czogXCJuZXh0IE1vbmRheVwiLCBcImxhc3QgRnJpZGF5XCIsIFwidGhpcyBXZWRuZXNkYXlcIlxuICAgKiAtIFdlZWtkYXlzIHdpdGggdGltZTogXCJuZXh0IE1vbmRheSBhdCAzcG1cIlxuICAgKiAtIFBlcmlvZHM6IFwibmV4dCB3ZWVrXCIsIFwibmV4dCBtb250aFwiLCBcIm5leHQgeWVhclwiXG4gICAqIFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRUZXh0IC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyB0byBwYXJzZSAoZS5nLiwgXCJ0b21vcnJvd1wiLCBcImluIDIgZGF5c1wiLCBcIm5leHQgTW9uZGF5XCIpXG4gICAqIEBwYXJhbSB3ZWVrU3RhcnRQcmVmZXJlbmNlIC0gRGF5IG9mIHdlZWsgdG8gY29uc2lkZXIgYXMgd2VlayBzdGFydCAoYWZmZWN0cyBcIm5leHQgd2Vla1wiIGNhbGN1bGF0aW9ucylcbiAgICogQHJldHVybnMgUGFyc2VkIERhdGUgb2JqZWN0LCBvciBjdXJyZW50IGRhdGUgaWYgcGFyc2luZyBmYWlsc1xuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBwYXJzZXIgPSBuZXcgTkxEUGFyc2VyKFsnZW4nLCAnZnInXSk7XG4gICAqIGNvbnN0IGRhdGUgPSBwYXJzZXIuZ2V0UGFyc2VkRGF0ZShcInRvbW9ycm93XCIsIFwibW9uZGF5XCIpO1xuICAgKiBjb25zb2xlLmxvZyhkYXRlKTsgLy8gRGF0ZSBvYmplY3QgZm9yIHRvbW9ycm93XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0UGFyc2VkRGF0ZShzZWxlY3RlZFRleHQ6IHN0cmluZywgd2Vla1N0YXJ0UHJlZmVyZW5jZTogRGF5T2ZXZWVrKTogRGF0ZSB7XG4gICAgLy8gTmV0dG95ZXIgbGVzIGNhcmFjdMOocmVzIHNww6ljaWF1eCBlbiBmaW4gZGUgY2hhw65uZSAoZXg6IFwidG9tb3Jyb3chISFcIilcbiAgICBjb25zdCBjbGVhbmVkVGV4dCA9IHNlbGVjdGVkVGV4dC50cmltKCkucmVwbGFjZSgvWyE/Ll0rJC8sICcnKTtcbiAgICBjb25zdCB0ZXh0ID0gY2xlYW5lZFRleHQudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIFwibm93XCIvXCJ0b2RheVwiLCBcIlggYWdvXCIsIGFuZCBcImluIFggdW5pdHNcIiBhbGwgcmVzb2x2ZSByZWxhdGl2ZSB0byB0aGVcbiAgICAvLyBleGFjdCBjdXJyZW50IGluc3RhbnQgKG5vdCBqdXN0IHRoZSBjdXJyZW50IGRheSksIHNvIGNhY2hpbmcgdGhlbSBhdFxuICAgIC8vIHRoZSBjYWNoZSdzIGRheS1zaXplZCBncmFudWxhcml0eSB3b3VsZCByZXR1cm4gYSBzdGFsZSB0aW1lIG9uIGV2ZXJ5XG4gICAgLy8gY2FsbCBhZnRlciB0aGUgZmlyc3Qgd2l0aGluIHRoYXQgZGF5IChlLmcuIFwiaW4gMjAgbWludXRlc1wiIG9yIFwibm93XCJcbiAgICAvLyBhbHdheXMgcmV0dXJuaW5nIHRoZSBmaXJzdCByZXN1bHQgdGhleSBldmVyIHByb2R1Y2VkIHRoYXQgZGF5KS5cbiAgICAvLyBBbHdheXMgY29tcHV0ZSB0aGVzZSBmcmVzaCwgYnlwYXNzaW5nIHRoZSBjYWNoZSBlbnRpcmVseS5cbiAgICAvLyBcInRvbW9ycm93XCIvXCJ5ZXN0ZXJkYXlcIiByZXNvbHZlIHRvIGEgc3BlY2lmaWMgY2FsZW5kYXIgZGF5IGxpa2UgdGhlXG4gICAgLy8gb3RoZXIgY2FjaGVkIGV4cHJlc3Npb25zIGJlbG93LCBzbyB0aGV5IHN0YXkgb24gdGhlIGNhY2hlZCBwYXRoXG4gICAgLy8gKGhhbmRsZWQgYnkgdHJ5SW1tZWRpYXRlS2V5d29yZHMgZnVydGhlciBkb3duKS5cbiAgICBjb25zdCBub3dXb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKCdub3cnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KTtcbiAgICBjb25zdCB0b2RheVdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoJ3RvZGF5JywgeyBsb3dlcmNhc2U6IHRydWUgfSk7XG4gICAgY29uc3Qgdm9sYXRpbGVSZXN1bHQgPVxuICAgICAgKG5vd1dvcmRzLmluY2x1ZGVzKHRleHQpIHx8IHRvZGF5V29yZHMuaW5jbHVkZXModGV4dCkgPyBuZXcgRGF0ZSgpIDogbnVsbCkgPz9cbiAgICAgIHRoaXMudHJ5UGFzdEV4cHJlc3Npb25zKHRleHQsIGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlSZWxhdGl2ZUNhbGN1bGF0aW9uKGNsZWFuZWRUZXh0KTtcbiAgICBpZiAodm9sYXRpbGVSZXN1bHQpIHJldHVybiB2b2xhdGlsZVJlc3VsdDtcblxuICAgIC8vIFbDqXJpZmllciBzaSBsZSBqb3VyIGEgY2hhbmfDqSBwb3VyIGludmFsaWRlciBsZSBjYWNoZVxuICAgIGNvbnN0IGN1cnJlbnREYXkgPSB0aGlzLmdldERheU9mWWVhcigpO1xuICAgIGlmIChjdXJyZW50RGF5ICE9PSB0aGlzLmNhY2hlRGF5KSB7XG4gICAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgICB0aGlzLmNhY2hlRGF5ID0gY3VycmVudERheTtcbiAgICB9XG5cbiAgICAvLyBHw6luw6lyZXIgbGEgY2zDqSBkdSBjYWNoZSBhdmVjIGxlIHRleHRlIG5ldHRvecOpIHBvdXIgcXVlIFwidG9tb3Jyb3dcIiBldCBcInRvbW9ycm93ISEhXCIgdXRpbGlzZW50IGxhIG3Dqm1lIGNsw6lcbiAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuZ2VuZXJhdGVDYWNoZUtleShjbGVhbmVkVGV4dCwgd2Vla1N0YXJ0UHJlZmVyZW5jZSk7XG5cbiAgICAvLyBWw6lyaWZpZXIgbGUgY2FjaGUgYXZhbnQgZGUgcGFyc2VyXG4gICAgY29uc3QgY2FjaGVkRGF0ZSA9IHRoaXMuY2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoY2FjaGVkRGF0ZSkge1xuICAgICAgLy8gQ3LDqWVyIHVuZSBub3V2ZWxsZSBpbnN0YW5jZSBkZSBEYXRlIHBvdXIgw6l2aXRlciBsZXMgcsOpZsOpcmVuY2VzIHBhcnRhZ8OpZXNcbiAgICAgIHJldHVybiBuZXcgRGF0ZShjYWNoZWREYXRlLmdldFRpbWUoKSk7XG4gICAgfVxuXG4gICAgLy8gRWFjaCB0cnkqKCkgbWV0aG9kIGJlbG93IHJldHVybnMgbnVsbCB3aGVuIGl0IGRvZXNuJ3QgcmVjb2duaXplIHRoZVxuICAgIC8vIGlucHV0LCBsZXR0aW5nIHRoZSBuZXh0IGxldmVsIGhhdmUgYSBzaG90IC0tIHNhbWUgTEVWRUwgMS00IG9yZGVyIHRoaXNcbiAgICAvLyBmaWxlIGhhcyBhbHdheXMgdXNlZCwganVzdCBzcGxpdCBpbnRvIG5hbWVkLCBpbmRlcGVuZGVudGx5IHJlYWRhYmxlXG4gICAgLy8gbWV0aG9kcyBpbnN0ZWFkIG9mIG9uZSBmdW5jdGlvbiB0aGF0IHVzZWQgdG8gcnVuIH41NzAgbGluZXMuXG4gICAgY29uc3QgcmVzdWx0ID1cbiAgICAgIHRoaXMudHJ5SW1tZWRpYXRlS2V5d29yZHModGV4dCkgPz9cbiAgICAgIHRoaXMudHJ5RGF0ZVJhbmdlU2hvcnRjdXQoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLnRyeVdlZWtkYXlzKGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlPcmRpbmFsT2ZNb250aChjbGVhbmVkVGV4dCkgPz9cbiAgICAgIHRoaXMudHJ5TGFzdERheU9mTW9udGgoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLnRyeVdlZWtkYXlPZk1vbnRoKGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlOZXh0UGVyaW9kU2hvcnRjdXQoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLmNocm9ub0ZhbGxiYWNrKHNlbGVjdGVkVGV4dCwgd2Vla1N0YXJ0UHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZUFuZFJldHVybihjYWNoZUtleSwgcmVzdWx0KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAxOiBJTU1FRElBVEUgS0VZV09SRFMgKFNwZWVkIGFuZCBQcmVjaXNpb24pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeUltbWVkaWF0ZUtleXdvcmRzKHRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuaW1tZWRpYXRlS2V5d29yZHMuaGFzKHRleHQpKSByZXR1cm4gbnVsbDtcblxuICAgIGlmICh0aGlzLnRjLmNvbGxlY3RXb3Jkcygnbm93JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3RvZGF5JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3RvbW9ycm93JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoMSwgJ2RheXMnKS50b0RhdGUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGMuY29sbGVjdFdvcmRzKCd5ZXN0ZXJkYXknLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyh0ZXh0KSkge1xuICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXlzJykudG9EYXRlKCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExFVkVMIDEuNTogUEFTVCBFWFBSRVNTSU9OUyAoMiBkYXlzIGFnbywgaWwgeSBhIDMgbWluKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSB0cnlQYXN0RXhwcmVzc2lvbnModGV4dDogc3RyaW5nLCBjbGVhbmVkVGV4dDogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIC8vIENoZWNrIGZvciBcImFnb1wiIGV4cHJlc3Npb25zIGluIEVuZ2xpc2ggKGUuZy4sIFwiMiBkYXlzIGFnb1wiKS4gVW5saWtlXG4gICAgLy8gZXZlcnkgb3RoZXIgdW5pdC1jYXB0dXJpbmcgcmVnZXggaW4gdGhpcyBmaWxlLCB0aGlzIG9uZSBjYXB0dXJlcyB0aGVcbiAgICAvLyB1bml0IGdlbmVyaWNhbGx5IChcXHcrLCBub3QgcmVzdHJpY3RlZCB0byBrbm93biB0cmFuc2xhdGVkIHdvcmRzKSwgc29cbiAgICAvLyBndWVzc1VuaXQoKSdzIGFiYnJldmlhdGlvbi1ndWVzc2luZyBmYWxsYmFjayBpcyBnZW51aW5lbHkgcmVhY2hhYmxlXG4gICAgLy8gaGVyZSBmb3IgdW5pdHMgbm8gZW5hYmxlZCBsYW5ndWFnZSdzIGRpY3Rpb25hcnkgcmVjb2duaXplcy5cbiAgICBjb25zdCBhZ29NYXRjaCA9IHRleHQubWF0Y2goL14oXFxkKylcXHMrKFxcdyspXFxzK2FnbyQvaSk7XG4gICAgaWYgKGFnb01hdGNoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGFnb01hdGNoWzFdKTtcbiAgICAgIGNvbnN0IHVuaXRTdHIgPSBhZ29NYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHVuaXQgPSB0aGlzLmd1ZXNzVW5pdCh1bml0U3RyKTtcbiAgICAgIHJldHVybiBtb21lbnQoKS5zdWJ0cmFjdCh2YWx1ZSwgdW5pdCkudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHBhc3QgZXhwcmVzc2lvbnMgaW4gYWxsIGxhbmd1YWdlcyAoZS5nLiwgXCJpbCB5IGEgMyBtaW51dGVzXCIsIFwidm9yIDIgU3R1bmRlblwiLCBldGMuKVxuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgbWludXRlc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcIm1pbnV0ZXNhZ29cIiwgbGFuZyk7XG4gICAgICBjb25zdCBob3Vyc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcImhvdXJzYWdvXCIsIGxhbmcpO1xuICAgICAgY29uc3QgZGF5c0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcImRheXNhZ29cIiwgbGFuZyk7XG4gICAgICBjb25zdCB3ZWVrc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcIndlZWtzYWdvXCIsIGxhbmcpO1xuICAgICAgY29uc3QgbW9udGhzQWdvUGF0dGVybiA9IHRoaXMudGMudHJhbnNsYXRlKFwibW9udGhzYWdvXCIsIGxhbmcpO1xuXG4gICAgICBjb25zdCBwYXR0ZXJucyA9IFtcbiAgICAgICAgeyBwYXR0ZXJuOiBtaW51dGVzQWdvUGF0dGVybiwgdW5pdDogJ21pbnV0ZXMnIGFzIGNvbnN0IH0sXG4gICAgICAgIHsgcGF0dGVybjogaG91cnNBZ29QYXR0ZXJuLCB1bml0OiAnaG91cnMnIGFzIGNvbnN0IH0sXG4gICAgICAgIHsgcGF0dGVybjogZGF5c0Fnb1BhdHRlcm4sIHVuaXQ6ICdkYXlzJyBhcyBjb25zdCB9LFxuICAgICAgICB7IHBhdHRlcm46IHdlZWtzQWdvUGF0dGVybiwgdW5pdDogJ3dlZWtzJyBhcyBjb25zdCB9LFxuICAgICAgICB7IHBhdHRlcm46IG1vbnRoc0Fnb1BhdHRlcm4sIHVuaXQ6ICdtb250aHMnIGFzIGNvbnN0IH0sXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IHsgcGF0dGVybiwgdW5pdCB9IG9mIHBhdHRlcm5zKSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gdGhpcy5idWlsZEFnb1JlZ2V4KHBhdHRlcm4pO1xuICAgICAgICBpZiAocmVnZXgpIHtcbiAgICAgICAgICBjb25zdCBtYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHJlZ2V4KTtcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQobWF0Y2hbMV0pO1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdWZmaXgtc3R5bGUgcGFzdCBleHByZXNzaW9ucywgZS5nLiBQb3J0dWd1ZXNlIFwiMyBkaWFzIGF0csOhc1wiICgzIGRheXMgYWdvKVxuICAgIGNvbnN0IGFnb1N1ZmZpeE1hdGNoID0gdGhpcy5yZWdleEFnb1N1ZmZpeCA/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhBZ29TdWZmaXgpIDogbnVsbDtcbiAgICBpZiAoYWdvU3VmZml4TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQoYWdvU3VmZml4TWF0Y2hbMV0pO1xuICAgICAgY29uc3QgdW5pdFN0ciA9IGFnb1N1ZmZpeE1hdGNoWzJdLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgY29uc3QgdW5pdCA9IHRoaXMuZ3Vlc3NVbml0KHVuaXRTdHIpO1xuICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENvbnZlcnRzIGFuIFwiWCBhZ29cIiB0cmFuc2xhdGlvbiB0ZW1wbGF0ZSBpbnRvIGEgbWF0Y2hpbmcgcmVnZXguXG4gIC8vIEV4YW1wbGU6IFwiaWwgeSBhICV7dGltZURlbHRhfSBtaW51dGVzXCIgLT4gXCJpbCB5IGEgKFxcZCspIG1pbnV0ZXNcIlxuICAvLyBFeGFtcGxlOiBcItGH0LXRgNC10LcgJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRiyDQvdCw0LfQsNC0XCIgKFJ1c3NpYW5cbiAgLy8gZ3JhbW1hdGljYWwgZm9ybXMpIC0+IFwi0YfQtdGA0LXQtyAoXFxkKykgKD860LzQuNC90YPRgnzQvNC40L3Rg9GC0YN80LzQuNC90YPRgtGLKSDQvdCw0LfQsNC0XCJcbiAgLy8gRXhhbXBsZTogXCIle3RpbWVEZWx0YX3lpKnliY1cIiAoQ2hpbmVzZSwgbm8gc3BhY2VzKSAtPiBcIihcXGQrKeWkqeWJjVwiXG4gIHByaXZhdGUgYnVpbGRBZ29SZWdleChwYXR0ZXJuOiBzdHJpbmcpOiBSZWdFeHAgfCBudWxsIHtcbiAgICBpZiAoIXBhdHRlcm4gfHwgcGF0dGVybiA9PT0gXCJOT1RGT1VORFwiKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGVzY2FwZVJlZ2V4ID0gKHN0cjogc3RyaW5nKSA9PiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbiAgICAvLyBQbGFjZWhvbGRlciBzd2FwcGVkIGluIGJlZm9yZSBlc2NhcGluZyBhbmQgYmFjayBvdXQgYWZ0ZXJ3YXJkcywgc29cbiAgICAvLyAle3RpbWVEZWx0YX0gYmVjb21lcyBhIHJlYWwgY2FwdHVyZSBncm91cCBpbnN0ZWFkIG9mIGJlaW5nIG1hbmdsZWQgYnlcbiAgICAvLyBlc2NhcGluZyBpdHMgb3duIGluc2VydGVkIFwiKFxcZCspXCIsIGFuZCBzbyBpdCBzdGlsbCB3b3JrcyB3aGVuIGVtYmVkZGVkXG4gICAgLy8gaW4gYSB0b2tlbiB3aXRoIG5vIHN1cnJvdW5kaW5nIHdoaXRlc3BhY2UgKGUuZy4gQ2hpbmVzZSBcIiV7dGltZURlbHRhfeWkqeWJjVwiKS5cbiAgICBjb25zdCBQTEFDRUhPTERFUiA9ICdcXHUwMDAwVElNRURFTFRBXFx1MDAwMCc7XG5cbiAgICBjb25zdCByZWdleFN0ciA9IHBhdHRlcm5cbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAubWFwKHRva2VuID0+IHtcbiAgICAgICAgY29uc3Qgd2l0aFBsYWNlaG9sZGVyID0gdG9rZW4ucmVwbGFjZSgvJVxce3RpbWVEZWx0YVxcfS9nLCBQTEFDRUhPTERFUik7XG4gICAgICAgIC8vIFwifFwiIGluc2lkZSBhIHRva2VuIG1lYW5zIG11bHRpcGxlIGdyYW1tYXRpY2FsIGZvcm1zIG9mIHRoZSBzYW1lXG4gICAgICAgIC8vIHdvcmQgKGUuZy4gUnVzc2lhbiBcItC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRi1wiKTogdHVybiBpdCBpbnRvIGFuXG4gICAgICAgIC8vIGFsdGVybmF0aW9uIGluc3RlYWQgb2YgZXNjYXBpbmcgaXQgaW50byBhIGxpdGVyYWwgcGlwZS5cbiAgICAgICAgaWYgKHdpdGhQbGFjZWhvbGRlci5pbmNsdWRlcygnfCcpKSB7XG4gICAgICAgICAgY29uc3QgYWx0ZXJuYXRpdmVzID0gd2l0aFBsYWNlaG9sZGVyXG4gICAgICAgICAgICAuc3BsaXQoJ3wnKVxuICAgICAgICAgICAgLm1hcChhbHQgPT4gZXNjYXBlUmVnZXgoYWx0KS5zcGxpdChQTEFDRUhPTERFUikuam9pbignKFxcXFxkKyknKSk7XG4gICAgICAgICAgcmV0dXJuIGAoPzoke2FsdGVybmF0aXZlcy5qb2luKCd8Jyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVzY2FwZVJlZ2V4KHdpdGhQbGFjZWhvbGRlcikuc3BsaXQoUExBQ0VIT0xERVIpLmpvaW4oJyhcXFxcZCspJyk7XG4gICAgICB9KVxuICAgICAgLmpvaW4oJ1xcXFxzKycpO1xuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4ke3JlZ2V4U3RyfSRgLCAnaScpO1xuICB9XG5cbiAgLy8gU2hhcmVkIGFiYnJldmlhdGlvbi1ndWVzc2luZyBmYWxsYmFjayBmb3IgdW5pdCB3b3JkcyB0aGF0IGFyZW4ndCBpbiBhbnlcbiAgLy8gZW5hYmxlZCBsYW5ndWFnZSdzIGRpY3Rpb25hcnkuIE9ubHkgcmVhY2hhYmxlIGZyb20gY2FsbGVycyB3aG9zZSByZWdleFxuICAvLyBjYXB0dXJlcyB0aGUgdW5pdCBnZW5lcmljYWxseSAodGhlIGhhcmRjb2RlZCBFbmdsaXNoIFwiYWdvXCIgcmVnZXggYWJvdmUsXG4gIC8vIGFuZCB0aGUgbXVsdGktdW5pdCBcImluIFggYW5kIFlcIiBzcGxpdCBiZWxvdykgLS0gcmVnZXhSZWxhdGl2ZSBhbmQgdGhlXG4gIC8vIHN1ZmZpeCByZWdleGVzIHJlc3RyaWN0IHRoZWlyIGNhcHR1cmUgZ3JvdXAgdG8gYWxyZWFkeS1rbm93biB3b3Jkcywgc29cbiAgLy8gdGhpcyBmYWxsYmFjayBjYW4gbmV2ZXIgZmlyZSBmb3IgdGhlbSAodmVyaWZpZWQgZW1waXJpY2FsbHkgYmVmb3JlIHRoZVxuICAvLyBkZWFkIGJyYW5jaGVzIHRoYXQgdXNlZCB0byBzaXQgaW4gdGhvc2UgcGF0aHMgd2VyZSByZW1vdmVkKS5cbiAgcHJpdmF0ZSBndWVzc1VuaXQodW5pdFN0cjogc3RyaW5nKTogVGltZVVuaXQge1xuICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMudGltZVVuaXRNYXAuZ2V0KHVuaXRTdHIpO1xuICAgIGlmIChtYXBwZWQpIHtcbiAgICAgIHJldHVybiBtYXBwZWQ7XG4gICAgfVxuICAgIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ2gnKSkgcmV0dXJuICdob3Vycyc7XG4gICAgZWxzZSBpZiAodW5pdFN0ci5zdGFydHNXaXRoKCdkJykgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdqJykpIHJldHVybiAnZGF5cyc7XG4gICAgZWxzZSBpZiAodW5pdFN0ci5zdGFydHNXaXRoKCd3JykgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdzJykpIHJldHVybiAnd2Vla3MnO1xuICAgIGVsc2UgaWYgKHVuaXRTdHIgPT09ICdtJyB8fCB1bml0U3RyLnN0YXJ0c1dpdGgoJ21pbicpKSByZXR1cm4gJ21pbnV0ZXMnO1xuICAgIGVsc2UgaWYgKHVuaXRTdHIuc3RhcnRzV2l0aCgnbW8nKSB8fCB1bml0U3RyID09PSAnTScgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdtb2lzJykpIHJldHVybiAnbW9udGhzJztcbiAgICBlbHNlIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ3knKSB8fCB1bml0U3RyLnN0YXJ0c1dpdGgoJ2EnKSkgcmV0dXJuICd5ZWFycyc7XG4gICAgcmV0dXJuICdkYXlzJztcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAyOiBSRUxBVElWRSBDQUxDVUxBVElPTiAoaW4gMiBtaW51dGVzLCBpbiAxIHllYXIuLi4pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeVJlbGF0aXZlQ2FsY3VsYXRpb24oY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICAvLyBGaXJzdCBjaGVjayBjb21iaW5hdGlvbnMgXCJpbiAyIHdlZWtzIGFuZCAzIGRheXNcIiBvciBtdWx0aXBsZSBjb21iaW5hdGlvbnNcbiAgICAvLyBUcnkgdG8gcGFyc2UgbXVsdGlwbGUgY29tYmluYXRpb25zIGxpa2UgXCJpbiAxIHllYXIgYW5kIDIgbW9udGhzIGFuZCAzIHdlZWtzIGFuZCA0IGRheXNcIlxuICAgIGxldCBoYXNNdWx0aVVuaXRzID0gZmFsc2U7XG4gICAgY29uc3QgdG90YWxNb21lbnQgPSBtb21lbnQoKTtcblxuICAgIC8vIFRyeSB0byBtYXRjaCBhbGwgXCJYIHVuaXRcIiBwYXR0ZXJucyBhZnRlciBcImluXCJcbiAgICBjb25zdCBpblBhdHRlcm5zID0gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMubGFuZ3VhZ2VzLm1hcChsID0+IHRoaXMudGMudHJhbnNsYXRlKFwiaW5cIiwgbCkpLmZpbHRlcih2ID0+IHYgIT09IFwiTk9URk9VTkRcIikuZmxhdE1hcCh2ID0+IHYuc3BsaXQoXCJ8XCIpKSkpO1xuICAgIGNvbnN0IGFuZFBhdHRlcm5zID0gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMubGFuZ3VhZ2VzLm1hcChsID0+IHRoaXMudGMudHJhbnNsYXRlKFwiYW5kXCIsIGwpKS5maWx0ZXIodiA9PiB2ICE9PSBcIk5PVEZPVU5EXCIpLmZsYXRNYXAodiA9PiB2LnNwbGl0KFwifFwiKSkpKTtcblxuICAgIGNvbnN0IGluUmVnZXggPSBuZXcgUmVnRXhwKGBeKCR7dGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKGluUGF0dGVybnMpfSlcXFxccytgLCAnaScpO1xuICAgIGNvbnN0IGFuZFJlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXHMrKCR7dGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKGFuZFBhdHRlcm5zKX0pXFxcXHMrYCwgJ2dpJyk7XG5cbiAgICBpZiAoY2xlYW5lZFRleHQubWF0Y2goaW5SZWdleCkpIHtcbiAgICAgIGNvbnN0IHdpdGhvdXRJbiA9IGNsZWFuZWRUZXh0LnJlcGxhY2UoaW5SZWdleCwgJycpO1xuICAgICAgY29uc3QgcGFydHMgPSB3aXRob3V0SW4uc3BsaXQoYW5kUmVnZXgpLmZpbHRlcihwID0+IHAgJiYgIWFuZFBhdHRlcm5zLnNvbWUoYSA9PiBhLnRvTG93ZXJDYXNlKCkgPT09IHAudHJpbSgpLnRvTG93ZXJDYXNlKCkpKTtcblxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgIC8vIE11bHRpcGxlIHVuaXRzIGRldGVjdGVkICgyIG9yIG1vcmUpXG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgICAgIGNvbnN0IHVuaXRNYXRjaCA9IHBhcnQudHJpbSgpLm1hdGNoKC9eKFxcZCspXFxzKyhbXlxcc10rKSQvaSk7XG4gICAgICAgICAgaWYgKHVuaXRNYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh1bml0TWF0Y2hbMV0pO1xuICAgICAgICAgICAgY29uc3QgdW5pdFN0ciA9IHVuaXRNYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgICAgIHRvdGFsTW9tZW50LmFkZCh2YWx1ZSwgdGhpcy5ndWVzc1VuaXQodW5pdFN0cikpO1xuICAgICAgICAgICAgaGFzTXVsdGlVbml0cyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNNdWx0aVVuaXRzKSB7XG4gICAgICAgICAgcmV0dXJuIHRvdGFsTW9tZW50LnRvRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3VmZml4LXN0eWxlIGNvbWJpbmF0aW9ucywgZS5nLiBDaGluZXNlIFwiMumAseWSjDPlpKnlvoxcIiAoMiB3ZWVrcyBhbmQgMyBkYXlzIGxhdGVyKVxuICAgIGNvbnN0IHJlbENvbWJpbmVkU3VmZml4TWF0Y2ggPSB0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZFN1ZmZpeCA/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkU3VmZml4KSA6IG51bGw7XG4gICAgaWYgKHJlbENvbWJpbmVkU3VmZml4TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHBhcnNlSW50KHJlbENvbWJpbmVkU3VmZml4TWF0Y2hbMV0pO1xuICAgICAgY29uc3QgdW5pdFN0cjEgPSByZWxDb21iaW5lZFN1ZmZpeE1hdGNoWzJdLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgY29uc3QgdmFsdWUyID0gcGFyc2VJbnQocmVsQ29tYmluZWRTdWZmaXhNYXRjaFszXSk7XG4gICAgICBjb25zdCB1bml0U3RyMiA9IHJlbENvbWJpbmVkU3VmZml4TWF0Y2hbNF0udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgIGNvbnN0IHVuaXQxID0gdGhpcy5ndWVzc1VuaXQodW5pdFN0cjEpO1xuICAgICAgY29uc3QgdW5pdDIgPSB0aGlzLmd1ZXNzVW5pdCh1bml0U3RyMik7XG5cbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQodmFsdWUxLCB1bml0MSkuYWRkKHZhbHVlMiwgdW5pdDIpLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIFRoZW4gY2hlY2sgc2ltcGxlIGV4cHJlc3Npb25zIFwiaW4gMiBtaW51dGVzXCJcbiAgICBjb25zdCByZWxNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZSk7XG4gICAgaWYgKHJlbE1hdGNoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHJlbE1hdGNoWzFdKTtcbiAgICAgIGNvbnN0IHVuaXRTdHIgPSByZWxNYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgICAgLy8gdW5pdFN0ciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcmVnaXN0ZXJlZCBrZXkgaGVyZTogcmVnZXhSZWxhdGl2ZSdzXG4gICAgICAvLyB1bml0IGNhcHR1cmUgZ3JvdXAgaXMgYnVpbHQgZnJvbSB0aGlzLnRjLmNvbGxlY3RXb3JkcygpIGZvciB0aGUgc2FtZVxuICAgICAgLy8gc2l4IGtleXMgdGhhdCBwb3B1bGF0ZSB0aW1lVW5pdE1hcCwgc28gYSBzdWNjZXNzZnVsIHJlZ2V4IG1hdGNoXG4gICAgICAvLyBhbHJlYWR5IGltcGxpZXMgYSBoaXQgLS0gdGhlIGZhbGxiYWNrIGJlbG93IGlzIHVucmVhY2hhYmxlLlxuICAgICAgY29uc3QgdW5pdCA9IHRoaXMudGltZVVuaXRNYXAuZ2V0KHVuaXRTdHIpID8/IHRoaXMuZ3Vlc3NVbml0KHVuaXRTdHIpO1xuXG4gICAgICAvLyBNb21lbnRKUyBoYW5kbGVzIHllYXIgdHJhbnNpdGlvbnMgcGVyZmVjdGx5XG4gICAgICByZXR1cm4gbW9tZW50KCkuYWRkKHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBTdWZmaXgtc3R5bGUgc2ltcGxlIGV4cHJlc3Npb25zLCBlLmcuIENoaW5lc2UgXCIy5aSp5b6MXCIgKDIgZGF5cyBsYXRlcilcbiAgICBjb25zdCByZWxTdWZmaXhNYXRjaCA9IHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCA/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCkgOiBudWxsO1xuICAgIGlmIChyZWxTdWZmaXhNYXRjaCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChyZWxTdWZmaXhNYXRjaFsxXSk7XG4gICAgICBjb25zdCB1bml0U3RyID0gcmVsU3VmZml4TWF0Y2hbMl0udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICBjb25zdCB1bml0ID0gdGhpcy5ndWVzc1VuaXQodW5pdFN0cik7XG4gICAgICByZXR1cm4gbW9tZW50KCkuYWRkKHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAyLjU6IERBVEUgUkFOR0VTIChmcm9tIE1vbmRheSB0byBGcmlkYXkpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSZXR1cm5zIGp1c3QgdGhlIHN0YXJ0IGRhdGUsIGZvciBnZXRQYXJzZWREYXRlKCkncyBzaW5nbGUtRGF0ZSBjb250cmFjdFxuICAvLyAtLSBzZWUgZ2V0UGFyc2VkRGF0ZVJhbmdlKCkgZm9yIHRoZSBmdWxsIHJhbmdlIHdpdGggYSBkYXRlIGxpc3QuXG4gIHByaXZhdGUgdHJ5RGF0ZVJhbmdlU2hvcnRjdXQoY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCByYW5nZU1hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleERhdGVSYW5nZSk7XG4gICAgaWYgKCFyYW5nZU1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHN0YXJ0RGF5TmFtZSA9IHJhbmdlTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtID0gbW9tZW50KCk7XG4gICAgY29uc3Qgc3RhcnREYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoc3RhcnREYXlOYW1lKTtcblxuICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbW9tZW50KCkuZGF5KHN0YXJ0RGF5SW5kZXgpO1xuICAgIGlmIChzdGFydE1vbWVudC5pc0JlZm9yZShtLCAnZGF5JykpIHtcbiAgICAgIHN0YXJ0TW9tZW50LmFkZCgxLCAnd2VlaycpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFydE1vbWVudC50b0RhdGUoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAzOiBXRUVLREFZUyAobmV4dCBmcmlkYXkuLi4pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeVdlZWtkYXlzKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgLy8gRmlyc3QgY2hlY2sgXCJuZXh0IE1vbmRheSBhdCAzcG1cIlxuICAgIGNvbnN0IHdlZWtXaXRoVGltZU1hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSk7XG4gICAgaWYgKHdlZWtXaXRoVGltZU1hdGNoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSB3ZWVrV2l0aFRpbWVNYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgZGF5TmFtZSA9IHdlZWtXaXRoVGltZU1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB0aW1lUGFydCA9IHdlZWtXaXRoVGltZU1hdGNoWzNdLnRyaW0oKTtcblxuICAgICAgY29uc3QgbSA9IG1vbWVudCgpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGRheU5hbWUpO1xuXG4gICAgICBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy50aGlzLmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uZGF5KGRheUluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uYWRkKDEsICd3ZWVrcycpLmRheShkYXlJbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgICAvLyBQb3VyIFwibGFzdC9kZXJuaWVyIDxqb3VyPlwiLCBvbiBjaWJsZSB0b3Vqb3VycyBsYSBzZW1haW5lIHByw6ljw6lkZW50ZVxuICAgICAgICBtLmRheShkYXlJbmRleCkuc3VidHJhY3QoMSwgJ3dlZWsnKTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFyc2UgdGltZSB3aXRoIGNocm9uby1ub2RlLiBnZXRQYXJzZWREYXRlUmVzdWx0IHJldHVybnMgbnVsbFxuICAgICAgLy8gKHJhdGhlciB0aGFuIGEgXCJub3dcIiBwbGFjZWhvbGRlcikgd2hlbiBub3RoaW5nIG1hdGNoZWQsIHNvIGEgdGltZVxuICAgICAgLy8gcGFydCBjaHJvbm8tbm9kZSBjYW4ndCBwYXJzZSAoZS5nLiBcIm5leHQgTW9uZGF5IGF0IHp6cXF4eFwiKSBmYWxsc1xuICAgICAgLy8gYmFjayB0byB0aGUgYWxyZWFkeS1jb21wdXRlZCB3ZWVrZGF5IGRhdGUgYmVsb3csIGluc3RlYWQgb2ZcbiAgICAgIC8vIHNpbGVudGx5IGRpc2NhcmRpbmcgaXQgaW4gZmF2b3Igb2YgdGhlIGFjdHVhbCBjdXJyZW50IGRhdGUvdGltZS5cbiAgICAgIGNvbnN0IHRpbWVSZXN1bHQgPSB0aGlzLmdldFBhcnNlZERhdGVSZXN1bHQodGltZVBhcnQsIG0udG9EYXRlKCkpO1xuICAgICAgaWYgKHRpbWVSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVSZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRpbWUgcGFyc2luZyBmYWlscywgcmV0dXJuIGp1c3QgdGhlIGRhdGVcbiAgICAgIHJldHVybiBtLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIFRoZW4gY2hlY2sgc2ltcGxlIGV4cHJlc3Npb25zIFwibmV4dCBNb25kYXlcIlxuICAgIGNvbnN0IHdlZWtNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5KTtcbiAgICBpZiAod2Vla01hdGNoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSB3ZWVrTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGRheU5hbWUgPSB3ZWVrTWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcblxuICAgICAgY29uc3QgbSA9IG1vbWVudCgpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGRheU5hbWUpO1xuXG4gICAgICBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy50aGlzLmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uZGF5KGRheUluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uYWRkKDEsICd3ZWVrcycpLmRheShkYXlJbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgICAvLyBQb3VyIFwibGFzdC9kZXJuaWVyIDxqb3VyPlwiLCBvbiBjaWJsZSB0b3Vqb3VycyBsYSBzZW1haW5lIHByw6ljw6lkZW50ZVxuICAgICAgICBtLmRheShkYXlJbmRleCkuc3VidHJhY3QoMSwgJ3dlZWsnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciB3ZWVrZGF5IHdpdGhvdXQgcHJlZml4IChlLmcuLCBcIndlZG5lc2RheVwiLCBcImZyaWRheVwiKVxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIFwibmV4dCBbZGF5XVwiIG9yIFwidGhpcyBbZGF5XVwiIGlmIHRvZGF5XG4gICAgY29uc3Qgd2Vla09ubHlNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5T25seSk7XG4gICAgaWYgKHdlZWtPbmx5TWF0Y2gpIHtcbiAgICAgIGNvbnN0IGRheU5hbWUgPSB3ZWVrT25seU1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBtID0gbW9tZW50KCk7XG4gICAgICBjb25zdCBkYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoZGF5TmFtZSk7XG5cbiAgICAgIG0uZGF5KGRheUluZGV4KTtcbiAgICAgIC8vIElmIHRoZSBkYXkgaXMgaW4gdGhlIHBhc3QgKGJlZm9yZSB0b2RheSksIG1vdmUgdG8gbmV4dCB3ZWVrXG4gICAgICBpZiAobS5pc0JlZm9yZShtb21lbnQoKSwgJ2RheScpKSB7XG4gICAgICAgIG0uYWRkKDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAzLjVhOiBcInRoZSBYdGggb2YgbmV4dCBtb250aFwiIC8gXCJ0aGUgTnRoIG9mIG5leHQgeWVhclwiXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeU9yZGluYWxPZk1vbnRoKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3Qgb3JkaW5hbE9mTW9udGhNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhPcmRpbmFsT2ZNb250aCk7XG4gICAgaWYgKCFvcmRpbmFsT2ZNb250aE1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG9yZGluYWxTdHIgPSBvcmRpbmFsT2ZNb250aE1hdGNoWzFdLnRyaW0oKTtcbiAgICAvLyBHcm91cHM6IFsxXT1vcmRpbmFsLCBbMl09cHJlZml4IGJlZm9yZSBtb250aCAob3B0aW9uYWwpLCBbM109bW9udGgsIFs0XT1wcmVmaXggYWZ0ZXIgbW9udGggKG9wdGlvbmFsLCBmb3IgRnJlbmNoKVxuICAgIGNvbnN0IHByZWZpeEJlZm9yZSA9IG9yZGluYWxPZk1vbnRoTWF0Y2hbMl0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgY29uc3QgcGVyaW9kU3RyID0gb3JkaW5hbE9mTW9udGhNYXRjaFszXT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwcmVmaXhBZnRlciA9IG9yZGluYWxPZk1vbnRoTWF0Y2hbNF0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgICAvLyBVc2UgcHJlZml4IGFmdGVyIG1vbnRoIGlmIHByZXNlbnQgKEZyZW5jaCBpbnZlcnNpb24pLCBvdGhlcndpc2UgcHJlZml4IGJlZm9yZVxuICAgIGNvbnN0IHByZWZpeCA9IHByZWZpeEFmdGVyIHx8IHByZWZpeEJlZm9yZTtcblxuICAgIC8vIFBhcnNlIG9yZGluYWwgbnVtYmVyIChlLmcuLCBcIjE1dGhcIiAtPiAxNSwgXCJmaXJzdFwiIC0+IDEpXG4gICAgY29uc3QgZGF5TnVtYmVyID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihvcmRpbmFsU3RyKTtcblxuICAgIC8vIERldGVybWluZSB3aGljaCBwZXJpb2QgKG1vbnRoL3llYXIpIHRvIHRhcmdldFxuICAgIGNvbnN0IHRhcmdldE1vbWVudCA9IG1vbWVudCgpO1xuICAgIGNvbnN0IGlzTW9udGggPSB0aGlzLnRjLmNvbGxlY3RXb3JkcygnbW9udGgnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyhwZXJpb2RTdHIpO1xuICAgIGNvbnN0IGlzWWVhciA9ICFpc01vbnRoICYmIHRoaXMudGMuY29sbGVjdFdvcmRzKCd5ZWFyJywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocGVyaW9kU3RyKTtcblxuICAgIGlmIChpc01vbnRoKSB7XG4gICAgICBpZiAocHJlZml4ICYmIHRoaXMucHJlZml4S2V5d29yZHMubmV4dC5oYXMocHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgfSBlbHNlIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5zdWJ0cmFjdCgxLCAnbW9udGhzJykuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgZGF5IG9mIG1vbnRoIChjbGFtcCB0byB2YWxpZCByYW5nZSlcbiAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gdGFyZ2V0TW9tZW50LmRheXNJbk1vbnRoKCk7XG4gICAgICBjb25zdCB0YXJnZXREYXkgPSBNYXRoLm1pbihkYXlOdW1iZXIsIGRheXNJbk1vbnRoKTtcbiAgICAgIHRhcmdldE1vbWVudC5kYXRlKHRhcmdldERheSk7XG4gICAgfSBlbHNlIGlmIChpc1llYXIpIHtcbiAgICAgIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5hZGQoMSwgJ3llYXJzJykuc3RhcnRPZigneWVhcicpO1xuICAgICAgfSBlbHNlIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5zdWJ0cmFjdCgxLCAneWVhcnMnKS5zdGFydE9mKCd5ZWFyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3RhcnRPZigneWVhcicpO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3IgeWVhciwgaW50ZXJwcmV0IGFzIGRheSBvZiB5ZWFyICgxLTM2NS8zNjYpXG4gICAgICBjb25zdCBkYXlzSW5ZZWFyID0gdGFyZ2V0TW9tZW50LmlzTGVhcFllYXIoKSA/IDM2NiA6IDM2NTtcbiAgICAgIGNvbnN0IHRhcmdldERheU9mWWVhciA9IE1hdGgubWluKGRheU51bWJlciwgZGF5c0luWWVhcik7XG4gICAgICB0YXJnZXRNb21lbnQuZGF5T2ZZZWFyKHRhcmdldERheU9mWWVhcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldE1vbWVudC50b0RhdGUoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAzLjViOiBcImxhc3QgZGF5IG9mIG1vbnRoXCIgLyBcImRlcm5pZXIgam91ciBkdSBtb2lzXCJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHByaXZhdGUgdHJ5TGFzdERheU9mTW9udGgoY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCBsYXN0RGF5T2ZNb250aE1hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleExhc3REYXlPZk1vbnRoKTtcbiAgICBpZiAoIWxhc3REYXlPZk1vbnRoTWF0Y2gpIHJldHVybiBudWxsO1xuXG4gICAgLy8gR3JvdXBzOiBbMV09cHJlZml4IGJlZm9yZSBcImxhc3RcIiAob3B0aW9uYWwpLCBbMl09XCJsYXN0XCIsIFszXT1kYXksIFs0XT1wcmVmaXggYmVmb3JlIG1vbnRoIChvcHRpb25hbCksIFs1XT1tb250aCwgWzZdPXByZWZpeCBhZnRlciBtb250aCAob3B0aW9uYWwsIGZvciBGcmVuY2gpXG4gICAgY29uc3QgcHJlZml4QmVmb3JlID0gbGFzdERheU9mTW9udGhNYXRjaFsxXT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwZXJpb2RTdHIgPSBsYXN0RGF5T2ZNb250aE1hdGNoWzVdPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgIGNvbnN0IHByZWZpeEFmdGVyID0gbGFzdERheU9mTW9udGhNYXRjaFs2XT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwcmVmaXhCZWZvcmVNb250aCA9IGxhc3REYXlPZk1vbnRoTWF0Y2hbNF0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgICAvLyBVc2UgcHJlZml4IGFmdGVyIG1vbnRoIGlmIHByZXNlbnQgKEZyZW5jaCBpbnZlcnNpb24pLCBvdGhlcndpc2UgcHJlZml4IGJlZm9yZSBtb250aCwgb3RoZXJ3aXNlIHByZWZpeCBiZWZvcmUgXCJsYXN0XCJcbiAgICBjb25zdCBwcmVmaXggPSBwcmVmaXhBZnRlciB8fCBwcmVmaXhCZWZvcmVNb250aCB8fCBwcmVmaXhCZWZvcmU7XG5cbiAgICBjb25zdCB0YXJnZXRNb21lbnQgPSBtb21lbnQoKTtcbiAgICBjb25zdCBpc01vbnRoID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoJ21vbnRoJywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocGVyaW9kU3RyKTtcbiAgICBpZiAoIWlzTW9udGgpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKHByZWZpeCkpIHtcbiAgICAgIHRhcmdldE1vbWVudC5hZGQoMSwgJ21vbnRocycpLmVuZE9mKCdtb250aCcpO1xuICAgIH0gZWxzZSBpZiAocHJlZml4ICYmIHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgdGFyZ2V0TW9tZW50LnN1YnRyYWN0KDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gXCJ0aGlzXCIvbm8gcHJlZml4IGJvdGggbWVhbiBcInRoaXMgbW9udGhcIlxuICAgICAgdGFyZ2V0TW9tZW50LmVuZE9mKCdtb250aCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRNb21lbnQudG9EYXRlKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVWRUwgMy41YzogXCJmaXJzdCBNb25kYXkgb2YgbW9udGhcIiAvIFwibGFzdCBGcmlkYXkgb2YgbmV4dCBtb250aFwiXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeVdlZWtkYXlPZk1vbnRoKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3Qgd2Vla2RheU9mTW9udGhNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5T2ZNb250aCk7XG4gICAgaWYgKCF3ZWVrZGF5T2ZNb250aE1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIEdyb3VwczogWzFdPWZpcnN0L3ByZWZpeCwgWzJdPXdlZWtkYXksIFszXT1wcmVmaXggYmVmb3JlIG1vbnRoIChvcHRpb25hbCksIFs0XT1tb250aCwgWzVdPXByZWZpeCBhZnRlciBtb250aCAob3B0aW9uYWwsIGZvciBGcmVuY2gpXG4gICAgY29uc3QgcHJlZml4T3JGaXJzdCA9IHdlZWtkYXlPZk1vbnRoTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBkYXlOYW1lID0gd2Vla2RheU9mTW9udGhNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHByZWZpeEJlZm9yZU1vbnRoID0gd2Vla2RheU9mTW9udGhNYXRjaFszXT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwZXJpb2RTdHIgPSB3ZWVrZGF5T2ZNb250aE1hdGNoWzRdPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgIGNvbnN0IHByZWZpeEFmdGVyID0gd2Vla2RheU9mTW9udGhNYXRjaFs1XT8udG9Mb3dlckNhc2UoKSB8fCAnJztcblxuICAgIC8vIFVzZSBwcmVmaXggYWZ0ZXIgbW9udGggaWYgcHJlc2VudCAoRnJlbmNoIGludmVyc2lvbiksIG90aGVyd2lzZSBwcmVmaXggYmVmb3JlIG1vbnRoLCBvdGhlcndpc2UgcHJlZml4T3JGaXJzdFxuICAgIGNvbnN0IG1vbnRoUHJlZml4ID0gcHJlZml4QWZ0ZXIgfHwgcHJlZml4QmVmb3JlTW9udGg7XG5cbiAgICBjb25zdCBkYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoZGF5TmFtZSk7XG4gICAgY29uc3QgaXNGaXJzdCA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwiZmlyc3RcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocHJlZml4T3JGaXJzdCk7XG4gICAgY29uc3QgaXNNb250aCA9IHRoaXMudGMuY29sbGVjdFdvcmRzKCdtb250aCcsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZFN0cik7XG4gICAgaWYgKCFpc01vbnRoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGlzTGFzdCA9ICFpc0ZpcnN0ICYmIHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4T3JGaXJzdCk7XG4gICAgbGV0IHRhcmdldE1vbWVudCA9IG1vbWVudCgpO1xuXG4gICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgIC8vIEZpcnN0IHdlZWtkYXkgb2YgbW9udGhcbiAgICAgIGlmIChtb250aFByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKG1vbnRoUHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgfSBlbHNlIGlmIChtb250aFByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLmxhc3QuaGFzKG1vbnRoUHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3VidHJhY3QoMSwgJ21vbnRocycpLnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgd2Vla2RheSBpbiB0aGUgdGFyZ2V0IG1vbnRoXG4gICAgICBjb25zdCBmaXJzdERheU9mTW9udGggPSB0YXJnZXRNb21lbnQuY2xvbmUoKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgY29uc3QgZmlyc3RXZWVrZGF5SW5kZXggPSBmaXJzdERheU9mTW9udGguZGF5KCk7XG4gICAgICBjb25zdCBkYXlzVG9BZGQgPSAoZGF5SW5kZXggLSBmaXJzdFdlZWtkYXlJbmRleCArIDcpICUgNztcbiAgICAgIHRhcmdldE1vbWVudCA9IGZpcnN0RGF5T2ZNb250aC5hZGQoZGF5c1RvQWRkLCAnZGF5cycpO1xuICAgIH0gZWxzZSBpZiAoaXNMYXN0KSB7XG4gICAgICAvLyBMYXN0IHdlZWtkYXkgb2YgbW9udGhcbiAgICAgIGlmIChtb250aFByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKG1vbnRoUHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSBpZiAobW9udGhQcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0Lmhhcyhtb250aFByZWZpeCkpIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN1YnRyYWN0KDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgICAgdGFyZ2V0TW9tZW50LmVuZE9mKCdtb250aCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBGaW5kIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIHdlZWtkYXkgYnkgZ29pbmcgdG8gZW5kIG9mIG1vbnRoIGFuZCB3b3JraW5nIGJhY2t3YXJkc1xuICAgICAgY29uc3QgbGFzdERheU9mTW9udGggPSB0YXJnZXRNb21lbnQuY2xvbmUoKS5lbmRPZignbW9udGgnKTtcbiAgICAgIGNvbnN0IGxhc3RXZWVrZGF5SW5kZXggPSBsYXN0RGF5T2ZNb250aC5kYXkoKTtcbiAgICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGxhc3RXZWVrZGF5SW5kZXggLSBkYXlJbmRleCArIDcpICUgNztcbiAgICAgIHRhcmdldE1vbWVudCA9IGxhc3REYXlPZk1vbnRoLnN1YnRyYWN0KGRheXNUb1N1YnRyYWN0LCAnZGF5cycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcmVmaXgtYmFzZWQgKG5leHQvdGhpcykgLSBkZWZhdWx0IHRvIGZpcnN0XG4gICAgICBpZiAobW9udGhQcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0Lmhhcyhtb250aFByZWZpeCkpIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LmFkZCgxLCAnbW9udGhzJykuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHdlZWtkYXkgaW4gdGhlIHRhcmdldCBtb250aFxuICAgICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gdGFyZ2V0TW9tZW50LmNsb25lKCkuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIGNvbnN0IGZpcnN0V2Vla2RheUluZGV4ID0gZmlyc3REYXlPZk1vbnRoLmRheSgpO1xuICAgICAgY29uc3QgZGF5c1RvQWRkID0gKGRheUluZGV4IC0gZmlyc3RXZWVrZGF5SW5kZXggKyA3KSAlIDc7XG4gICAgICB0YXJnZXRNb21lbnQgPSBmaXJzdERheU9mTW9udGguYWRkKGRheXNUb0FkZCwgJ2RheXMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0TW9tZW50LnRvRGF0ZSgpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExFVkVMIDRhOiBcIm5leHQgbW9udGhcIiAvIFwibmV4dCB5ZWFyXCIgc2hvcnRjdXQgKGJlZm9yZSBmYWxsaW5nIHRvIGNocm9uby1ub2RlKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTm90ZTogXCJuZXh0IHdlZWtcIiBpcyBpbnRlbnRpb25hbGx5IE5PVCBoYW5kbGVkIGhlcmUgLS0gaXQncyBsZWZ0IHRvXG4gIC8vIGdldFBhcnNlZERhdGVSYW5nZSgpIHRvIGdlbmVyYXRlIGEgZnVsbCBkYXRlIGxpc3QsIHNvIHRoYXQgY2FzZSBmYWxsc1xuICAvLyB0aHJvdWdoIHRvIHRoZSBjaHJvbm8tbm9kZSBmYWxsYmFjayBpbnN0ZWFkLlxuICBwcml2YXRlIHRyeU5leHRQZXJpb2RTaG9ydGN1dChjbGVhbmVkVGV4dDogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIC8vIFVzZXMgXFxzKiAobm90IFxccyspIHNvIHRoaXMgYWxzbyBtYXRjaGVzIGxhbmd1YWdlcyB3aXRob3V0IHNwYWNlcyBiZXR3ZWVuXG4gICAgLy8gd29yZHMgKGUuZy4gQ2hpbmVzZSBcIuS4i+S4gOWAi+aYn+acn1wiKS4gVGhlIHBlcmlvZCBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIGtub3duXG4gICAgLy8gd2Vlay9tb250aC95ZWFyIHdvcmRzIGRpcmVjdGx5IChub3QgYSBnZW5lcmljIFxcUysvXFx3KyBjYXB0dXJlKTogb3RoZXJ3aXNlIGFcbiAgICAvLyBzaG9ydGVyIHdvcmQgdGhhdCBpcyBhIHByZWZpeCBvZiBhIGxvbmdlciBvbmUgKGUuZy4gRnJlbmNoIFwicHJvY2hhaW5cIiB2c1xuICAgIC8vIFwicHJvY2hhaW5lXCIpIGNhbiBtYXRjaCBmaXJzdCBhbmQgbGVhdmUgdGhlIHJlbWFpbmluZyBsZXR0ZXJzIHRvIGJlXG4gICAgLy8gbWlzLWNhcHR1cmVkIGFzIHRoZSBwZXJpb2QuXG4gICAgY29uc3QgbmV4dFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oQXJyYXkuZnJvbSh0aGlzLnByZWZpeEtleXdvcmRzLm5leHQpKTtcbiAgICBjb25zdCBwZXJpb2RXb3Jkc0FsbCA9IFsnd2VlaycsICdtb250aCcsICd5ZWFyJ10uZmxhdE1hcChrZXkgPT4gdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5KSk7XG4gICAgY29uc3QgcGVyaW9kUGF0dGVybkFsbCA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihwZXJpb2RXb3Jkc0FsbCk7XG4gICAgY29uc3QgbmV4dERhdGVNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKG5ldyBSZWdFeHAoYCgke25leHRQYXR0ZXJufSlcXFxccyooJHtwZXJpb2RQYXR0ZXJuQWxsfSlgLCAnaScpKTtcbiAgICBpZiAoIW5leHREYXRlTWF0Y2gpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcGVyaW9kID0gbmV4dERhdGVNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGlzTmV4dFdlZWsgPSB0aGlzLnRjLmNvbGxlY3RXb3Jkcygnd2VlaycsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZCk7XG4gICAgaWYgKGlzTmV4dFdlZWspIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHRoaXMudGMuY29sbGVjdFdvcmRzKCdtb250aCcsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoMSwgJ21vbnRocycpLnN0YXJ0T2YoJ21vbnRoJykudG9EYXRlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRjLmNvbGxlY3RXb3JkcygneWVhcicsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoMSwgJ3llYXJzJykuc3RhcnRPZigneWVhcicpLnRvRGF0ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCA0YjogVEhFIFJFU1QgKGNocm9uby1ub2RlIGxpYnJhcnksIGZpbmFsIGZhbGxiYWNrKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSBjaHJvbm9GYWxsYmFjayhzZWxlY3RlZFRleHQ6IHN0cmluZywgd2Vla1N0YXJ0UHJlZmVyZW5jZTogRGF5T2ZXZWVrKTogRGF0ZSB7XG4gICAgaWYgKCF0aGlzLmNocm9ub3MgfHwgdGhpcy5jaHJvbm9zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBEYXRlKCk7XG5cbiAgICAvLyBXZSB1c2UgdGhlIFwiQmVzdCBTY29yZVwiIHRlY2huaXF1ZSB0byBjaG9vc2UgYmV0d2VlbiBFTiBhbmQgRlJcbiAgICBjb25zdCB3ZWVrU3RhcnQgPSB3ZWVrU3RhcnRQcmVmZXJlbmNlID09PSBcImxvY2FsZS1kZWZhdWx0XCIgPyBnZXRMb2NhbGVXZWVrU3RhcnQoKSA6IHdlZWtTdGFydFByZWZlcmVuY2U7XG4gICAgY29uc3QgbG9jYWxlID0geyB3ZWVrU3RhcnQ6IGdldFdlZWtOdW1iZXIod2Vla1N0YXJ0KSB9O1xuICAgIGNvbnN0IHJlZmVyZW5jZURhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgLy8gU3RhbmRhcmQgbGlicmFyeSBjYWxsIHdpdGggZm9yY2VkIGZvcndhcmREYXRlXG4gICAgY29uc3QgY2hyb25vUmVzdWx0ID0gdGhpcy5nZXRQYXJzZWREYXRlUmVzdWx0KHNlbGVjdGVkVGV4dCwgcmVmZXJlbmNlRGF0ZSwge1xuICAgICAgbG9jYWxlLFxuICAgICAgZm9yd2FyZERhdGU6IHRydWVcbiAgICB9IGFzIFBhcnNpbmdPcHRpb24pO1xuICAgIC8vIE5vdGhpbmcgbWF0Y2hlZCBhbnl3aGVyZTogdGhpcyBpcyB0aGUgZmluYWwgZmFsbGJhY2sgbGV2ZWwsIHNvIChwZXJcbiAgICAvLyB0aGlzIG1ldGhvZCdzIGRvY3VtZW50ZWQgY29udHJhY3QpIGZhbGwgYmFjayB0byB0aGUgY3VycmVudCBkYXRlLlxuICAgIHJldHVybiBjaHJvbm9SZXN1bHQgPz8gbmV3IERhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgcmFuZ2Ugc3RyaW5nIGFuZCByZXR1cm5zIGEgcmFuZ2UgcmVzdWx0LlxuICAgKiBcbiAgICogU3VwcG9ydHMgdmFyaW91cyByYW5nZSBleHByZXNzaW9uczpcbiAgICogLSBXZWVrZGF5IHJhbmdlczogXCJmcm9tIE1vbmRheSB0byBGcmlkYXlcIlxuICAgKiAtIFdlZWsgcmFuZ2VzOiBcIm5leHQgd2Vla1wiIChyZXR1cm5zIGFsbCBkYXlzIG9mIG5leHQgd2VlaylcbiAgICogLSBXb3JrcyBpbiBhbGwgZW5hYmxlZCBsYW5ndWFnZXMgd2l0aCBuYXRpdmUgdHJhbnNsYXRpb25zXG4gICAqIFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRUZXh0IC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHJhbmdlIHN0cmluZyAoZS5nLiwgXCJmcm9tIE1vbmRheSB0byBGcmlkYXlcIiwgXCJuZXh0IHdlZWtcIilcbiAgICogQHBhcmFtIHdlZWtTdGFydFByZWZlcmVuY2UgLSBEYXkgb2Ygd2VlayB0byBjb25zaWRlciBhcyB3ZWVrIHN0YXJ0XG4gICAqIEByZXR1cm5zIE5MRFJhbmdlUmVzdWx0IG9iamVjdCB3aXRoIHN0YXJ0L2VuZCBkYXRlcyBhbmQgZGF0ZSBsaXN0LCBvciBudWxsIGlmIG5vdCBhIHJhbmdlXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBhcnNlciA9IG5ldyBOTERQYXJzZXIoWydlbicsICdmciddKTtcbiAgICogY29uc3QgcmFuZ2UgPSBwYXJzZXIuZ2V0UGFyc2VkRGF0ZVJhbmdlKFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCIsIFwibW9uZGF5XCIpO1xuICAgKiBpZiAocmFuZ2UpIHtcbiAgICogICBjb25zb2xlLmxvZyhyYW5nZS5kYXRlTGlzdD8ubGVuZ3RoKTsgLy8gNSAoTW9uZGF5IHRocm91Z2ggRnJpZGF5KVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0UGFyc2VkRGF0ZVJhbmdlKHNlbGVjdGVkVGV4dDogc3RyaW5nLCB3ZWVrU3RhcnRQcmVmZXJlbmNlOiBEYXlPZldlZWspOiBOTERSYW5nZVJlc3VsdCB8IG51bGwge1xuICAgIC8vIENoZWNrIFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCJcbiAgICBjb25zdCByYW5nZU1hdGNoID0gc2VsZWN0ZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhEYXRlUmFuZ2UpO1xuICAgIGlmIChyYW5nZU1hdGNoKSB7XG4gICAgICBjb25zdCBzdGFydERheU5hbWUgPSByYW5nZU1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBlbmREYXlOYW1lID0gcmFuZ2VNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgXG4gICAgICBjb25zdCBtID0gbW9tZW50KCk7XG4gICAgICBjb25zdCBzdGFydERheUluZGV4ID0gdGhpcy5nZXREYXlPZldlZWtJbmRleChzdGFydERheU5hbWUpO1xuICAgICAgY29uc3QgZW5kRGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGVuZERheU5hbWUpO1xuICAgICAgXG4gICAgICAvLyBGaW5kIG5leHQgc3RhcnQgZGF5XG4gICAgICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudCgpLmRheShzdGFydERheUluZGV4KTtcbiAgICAgIGlmIChzdGFydE1vbWVudC5pc0JlZm9yZShtLCAnZGF5JykpIHtcbiAgICAgICAgc3RhcnRNb21lbnQuYWRkKDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZpbmQgbmV4dCBlbmQgZGF5IChtdXN0IGJlIGFmdGVyIG9yIGVxdWFsIHRvIHN0YXJ0IGRheSlcbiAgICAgIGxldCBlbmRNb21lbnQgPSBtb21lbnQoKS5kYXkoZW5kRGF5SW5kZXgpO1xuICAgICAgLy8gSWYgZW5kIGRheSBpcyBiZWZvcmUgc3RhcnQgZGF5LCB0YWtlIHRoZSBvbmUgZnJvbSBuZXh0IHdlZWtcbiAgICAgIGlmIChlbmRNb21lbnQuaXNCZWZvcmUoc3RhcnRNb21lbnQsICdkYXknKSkge1xuICAgICAgICBlbmRNb21lbnQuYWRkKDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgZW5kTW9tZW50IGlzIGFsd2F5cyBhZnRlciBvciBlcXVhbCB0byBzdGFydE1vbWVudFxuICAgICAgaWYgKGVuZE1vbWVudC5pc0JlZm9yZShzdGFydE1vbWVudCwgJ2RheScpKSB7XG4gICAgICAgIGVuZE1vbWVudCA9IHN0YXJ0TW9tZW50LmNsb25lKCkuYWRkKDEsICd3ZWVrJykuZGF5KGVuZERheUluZGV4KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgZm9ybWF0ID0gXCJZWVlZLU1NLUREXCI7XG4gICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IHN0YXJ0TW9tZW50LmZvcm1hdChmb3JtYXQpO1xuICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZW5kTW9tZW50LmZvcm1hdChmb3JtYXQpO1xuICAgICAgXG4gICAgICAvLyBHZW5lcmF0ZSBsaXN0IG9mIGFsbCBkYXRlcyBpbiByYW5nZVxuICAgICAgY29uc3QgZGF0ZUxpc3Q6IE1vbWVudFtdID0gW107XG4gICAgICBjb25zdCBjdXJyZW50TW9tZW50ID0gc3RhcnRNb21lbnQuY2xvbmUoKTtcbiAgICAgIHdoaWxlIChjdXJyZW50TW9tZW50LmlzU2FtZU9yQmVmb3JlKGVuZE1vbWVudCwgJ2RheScpKSB7XG4gICAgICAgIGRhdGVMaXN0LnB1c2goY3VycmVudE1vbWVudC5jbG9uZSgpKTtcbiAgICAgICAgY3VycmVudE1vbWVudC5hZGQoMSwgJ2RheScpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCByZXN1bHQ6IE5MRFJhbmdlUmVzdWx0ID0ge1xuICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IGAke3N0YXJ0Rm9ybWF0dGVkfSB0byAke2VuZEZvcm1hdHRlZH1gLFxuICAgICAgICBzdGFydERhdGU6IHN0YXJ0TW9tZW50LnRvRGF0ZSgpLFxuICAgICAgICBlbmREYXRlOiBlbmRNb21lbnQudG9EYXRlKCksXG4gICAgICAgIHN0YXJ0TW9tZW50OiBzdGFydE1vbWVudC5jbG9uZSgpLFxuICAgICAgICBlbmRNb21lbnQ6IGVuZE1vbWVudC5jbG9uZSgpLFxuICAgICAgICBpc1JhbmdlOiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICBkYXRlTGlzdDogZGF0ZUxpc3QsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgXCJuZXh0IHdlZWtcIiBhcyByYW5nZSAoYm90aCBcIm5leHQgd2Vla1wiIGFuZCBcIndlZWsgbmV4dFwiIGZvciBsYW5ndWFnZXMgbGlrZSBGcmVuY2gpXG4gICAgLy8gVXNlcyBcXHMqIChub3QgXFxzKykgc28gdGhpcyBhbHNvIG1hdGNoZXMgbGFuZ3VhZ2VzIHdpdGhvdXQgc3BhY2VzIGJldHdlZW5cbiAgICAvLyB3b3JkcyAoZS5nLiBDaGluZXNlIFwi5LiL5LiA5YCL5pif5pyfXCIpLiBUaGUgcGVyaW9kIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUga25vd25cbiAgICAvLyBcIndlZWtcIiB3b3JkcyBkaXJlY3RseSAobm90IGEgZ2VuZXJpYyBcXFMrL1xcdysgY2FwdHVyZSk6IG90aGVyd2lzZSBhIHNob3J0ZXJcbiAgICAvLyB3b3JkIHRoYXQgaXMgYSBwcmVmaXggb2YgYSBsb25nZXIgb25lIChlLmcuIEZyZW5jaCBcInByb2NoYWluXCIgdnMgXCJwcm9jaGFpbmVcIilcbiAgICAvLyBjYW4gbWF0Y2ggZmlyc3QgYW5kIGxlYXZlIHRoZSByZW1haW5pbmcgbGV0dGVycyB0byBiZSBtaXMtY2FwdHVyZWQgYXMgdGhlIHBlcmlvZC5cbiAgICBjb25zdCBuZXh0UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihBcnJheS5mcm9tKHRoaXMucHJlZml4S2V5d29yZHMubmV4dCkpO1xuICAgIGNvbnN0IHdlZWtQYXR0ZXJuQWxsID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uRm9yKCd3ZWVrJyk7XG4gICAgLy8gRmlyc3QgdHJ5IFwibmV4dCB3ZWVrXCIgcGF0dGVyblxuICAgIGxldCBuZXh0V2Vla01hdGNoID0gc2VsZWN0ZWRUZXh0Lm1hdGNoKG5ldyBSZWdFeHAoYCgke25leHRQYXR0ZXJufSlcXFxccyooJHt3ZWVrUGF0dGVybkFsbH0pYCwgJ2knKSk7XG4gICAgbGV0IHBlcmlvZEluZGV4ID0gMjsgLy8gSW5kZXggb2YgcGVyaW9kIGluIG1hdGNoIGFycmF5XG4gICAgaWYgKCFuZXh0V2Vla01hdGNoKSB7XG4gICAgICAvLyBUcnkgcmV2ZXJzZSBwYXR0ZXJuIFwid2VlayBuZXh0XCIgZm9yIGxhbmd1YWdlcyBsaWtlIEZyZW5jaFxuICAgICAgbmV4dFdlZWtNYXRjaCA9IHNlbGVjdGVkVGV4dC5tYXRjaChuZXcgUmVnRXhwKGAoJHt3ZWVrUGF0dGVybkFsbH0pXFxcXHMqKCR7bmV4dFBhdHRlcm59KWAsICdpJykpO1xuICAgICAgaWYgKG5leHRXZWVrTWF0Y2gpIHtcbiAgICAgICAgcGVyaW9kSW5kZXggPSAxOyAvLyBQZXJpb2QgaXMgbm93IGF0IGluZGV4IDFcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5leHRXZWVrTWF0Y2gpIHtcbiAgICAgIGNvbnN0IHBlcmlvZCA9IG5leHRXZWVrTWF0Y2hbcGVyaW9kSW5kZXhdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3dlZWsnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyhwZXJpb2QpKSB7XG4gICAgICAgIC8vIE5leHQgd2VlayAtPiByZXR1cm4gZnJvbSBNb25kYXkgdG8gU3VuZGF5IG9mIG5leHQgd2Vla1xuICAgICAgICBjb25zdCB3ZWVrU3RhcnQgPSB3ZWVrU3RhcnRQcmVmZXJlbmNlID09PSBcImxvY2FsZS1kZWZhdWx0XCIgPyBnZXRMb2NhbGVXZWVrU3RhcnQoKSA6IHdlZWtTdGFydFByZWZlcmVuY2U7XG4gICAgICAgIGNvbnN0IHdlZWtTdGFydEluZGV4ID0gdGhpcy5nZXREYXlPZldlZWtJbmRleChTdHJpbmcod2Vla1N0YXJ0KSk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQoKS5hZGQoMSwgJ3dlZWtzJykuZGF5KHdlZWtTdGFydEluZGV4KTtcbiAgICAgICAgY29uc3QgZW5kTW9tZW50ID0gc3RhcnRNb21lbnQuY2xvbmUoKS5hZGQoNiwgJ2RheXMnKTtcblxuICAgICAgICBjb25zdCBmb3JtYXQgPSBcIllZWVktTU0tRERcIjtcbiAgICAgICAgY29uc3Qgc3RhcnRGb3JtYXR0ZWQgPSBzdGFydE1vbWVudC5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZW5kTW9tZW50LmZvcm1hdChmb3JtYXQpO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlIGxpc3Qgb2YgYWxsIGRhdGVzIGluIHJhbmdlXG4gICAgICAgIGNvbnN0IGRhdGVMaXN0OiBNb21lbnRbXSA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50TW9tZW50ID0gc3RhcnRNb21lbnQuY2xvbmUoKTtcbiAgICAgICAgd2hpbGUgKGN1cnJlbnRNb21lbnQuaXNTYW1lT3JCZWZvcmUoZW5kTW9tZW50LCAnZGF5JykpIHtcbiAgICAgICAgICBkYXRlTGlzdC5wdXNoKGN1cnJlbnRNb21lbnQuY2xvbmUoKSk7XG4gICAgICAgICAgY3VycmVudE1vbWVudC5hZGQoMSwgJ2RheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBOTERSYW5nZVJlc3VsdCA9IHtcbiAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IGAke3N0YXJ0Rm9ybWF0dGVkfSB0byAke2VuZEZvcm1hdHRlZH1gLFxuICAgICAgICAgIHN0YXJ0RGF0ZTogc3RhcnRNb21lbnQudG9EYXRlKCksXG4gICAgICAgICAgZW5kRGF0ZTogZW5kTW9tZW50LnRvRGF0ZSgpLFxuICAgICAgICAgIHN0YXJ0TW9tZW50OiBzdGFydE1vbWVudC5jbG9uZSgpLFxuICAgICAgICAgIGVuZE1vbWVudDogZW5kTW9tZW50LmNsb25lKCksXG4gICAgICAgICAgaXNSYW5nZTogdHJ1ZSBhcyBjb25zdCxcbiAgICAgICAgICBkYXRlTGlzdDogZGF0ZUxpc3QsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyAtLS0gVVRJTElUWSBGVU5DVElPTjogV0hPIEhBUyBUSEUgQkVTVCBTQ09SRT8gLS0tXG4gIC8vIFJldHVybnMgbnVsbCAocmF0aGVyIHRoYW4gYSBcIm5vd1wiIHBsYWNlaG9sZGVyKSB3aGVuIGNocm9uby1ub2RlIGZvdW5kIG5vXG4gIC8vIG1hdGNoLCBzbyBjYWxsZXJzIGNhbiB0ZWxsIFwibm90aGluZyBwYXJzZWRcIiBhcGFydCBmcm9tIFwicGFyc2VkIHRvIHJpZ2h0XG4gIC8vIG5vd1wiIGFuZCBmYWxsIGJhY2sgYWNjb3JkaW5nbHkgaW5zdGVhZCBvZiBzaWxlbnRseSBhY2NlcHRpbmcgYSBib2d1c1xuICAvLyBjdXJyZW50LWRhdGUvdGltZSByZXN1bHQuXG4gIGdldFBhcnNlZERhdGVSZXN1bHQodGV4dDogc3RyaW5nLCByZWZlcmVuY2VEYXRlPzogRGF0ZSwgb3B0aW9uPzogUGFyc2luZ09wdGlvbik6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY2hyb25vcyB8fCB0aGlzLmNocm9ub3MubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgYmVzdFJlc3VsdDogUGFyc2VkUmVzdWx0IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGJlc3RTY29yZSA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaHJvbm9zKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYy5wYXJzZSh0ZXh0LCByZWZlcmVuY2VEYXRlLCBvcHRpb24pO1xuICAgICAgICAvLyBjaHJvbm8gY2FuIHJldHVybiBzZXZlcmFsIGRpc2pvaW50IG1hdGNoZXMgZm9yIG9uZSBzdHJpbmcgKGUuZy5cbiAgICAgICAgLy8gXCJ0b2RheSBpbiAzIG1pbnV0ZXNcIiAtPiBbXCJ0b2RheVwiLCBcImluIDMgbWludXRlc1wiXSwgcGFyc2VkIGFzIHR3b1xuICAgICAgICAvLyBpbmRlcGVuZGVudCBjYW5kaWRhdGVzLCBuZWl0aGVyIGNvbnRhaW5pbmcgdGhlIG90aGVyKS4gQ29tcGFyaW5nXG4gICAgICAgIC8vIGV2ZXJ5IGNhbmRpZGF0ZSdzIHNjb3JlIC0tIG5vdCBqdXN0IHJlc3VsdHNbMF0gLS0gbWVhbnMgdGhlIG1vcmVcbiAgICAgICAgLy8gc3BlY2lmaWMvaW5mb3JtYXRpdmUgb25lIHdpbnMgaW5zdGVhZCBvZiBhbHdheXMgcGlja2luZyB3aGljaGV2ZXJcbiAgICAgICAgLy8gY2hyb25vIGhhcHBlbmVkIHRvIGxpc3QgZmlyc3QsIHdoaWNoIHNpbGVudGx5IGRpc2NhcmRlZCBcImluIDNcbiAgICAgICAgLy8gbWludXRlc1wiIGFuZCByZXR1cm5lZCB0aGUgY3VycmVudCB0aW1lIHVubW9kaWZpZWQuXG4gICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgcmVzdWx0cyB8fCBbXSkge1xuICAgICAgICAgIGlmIChtYXRjaC50ZXh0Lmxlbmd0aCA+IGJlc3RTY29yZSkge1xuICAgICAgICAgICAgYmVzdFNjb3JlID0gbWF0Y2gudGV4dC5sZW5ndGg7XG4gICAgICAgICAgICBiZXN0UmVzdWx0ID0gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdDaHJvbm8gcGFyc2luZyBlcnJvciBpbiBnZXRQYXJzZWREYXRlUmVzdWx0Jywge1xuICAgICAgICAgIHRleHQsXG4gICAgICAgICAgZXJyb3I6IGRlc2NyaWJlRXJyb3IoZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVzdFJlc3VsdCA/IGJlc3RSZXN1bHQuc3RhcnQuZGF0ZSgpIDogbnVsbDtcbiAgfVxuXG4gIGdldFBhcnNlZFJlc3VsdCh0ZXh0OiBzdHJpbmcpOiBQYXJzZWRSZXN1bHRbXSB7XG4gICAgaWYgKCF0aGlzLmNocm9ub3MpIHJldHVybiBbXTtcbiAgICBsZXQgYmVzdFJlc3VsdHM6IFBhcnNlZFJlc3VsdFtdID0gW107XG4gICAgbGV0IGJlc3RTY29yZSA9IDA7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hyb25vcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGMucGFyc2UodGV4dCk7XG4gICAgICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChyZXN1bHRzWzBdLnRleHQubGVuZ3RoID4gYmVzdFNjb3JlKSB7XG4gICAgICAgICAgICBiZXN0U2NvcmUgPSByZXN1bHRzWzBdLnRleHQubGVuZ3RoO1xuICAgICAgICAgICAgYmVzdFJlc3VsdHMgPSByZXN1bHRzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybignQ2hyb25vIHBhcnNpbmcgZXJyb3IgaW4gZ2V0UGFyc2VkUmVzdWx0Jywge1xuICAgICAgICAgIHRleHQsXG4gICAgICAgICAgZXJyb3I6IGRlc2NyaWJlRXJyb3IoZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVzdFJlc3VsdHM7XG4gIH1cblxuICAvLyAtLS0gVElNRSBERVRFQ1RJT04gKEZPUiBESVNQTEFZKSAtLS1cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHRleHQgc3RyaW5nIGNvbnRhaW5zIGEgdGltZSBjb21wb25lbnQuXG4gICAqIFxuICAgKiBEZXRlY3RzIHZhcmlvdXMgdGltZSBleHByZXNzaW9uczpcbiAgICogLSBFeHBsaWNpdCB0aW1lczogXCJhdCAzcG1cIiwgXCJhdCAxNTowMFwiLCBcIsOgIDE1aFwiXG4gICAqIC0gVGltZSBpbiByZWxhdGl2ZSBleHByZXNzaW9uczogXCJpbiAyIGhvdXJzXCIsIFwiZGFucyAyIGhldXJlc1wiXG4gICAqIC0gV29ya3Mgd2l0aCBhbGwgZW5hYmxlZCBsYW5ndWFnZXNcbiAgICogXG4gICAqIEBwYXJhbSB0ZXh0IC0gVGV4dCBzdHJpbmcgdG8gY2hlY2sgZm9yIHRpbWUgY29tcG9uZW50XG4gICAqIEByZXR1cm5zIHRydWUgaWYgYSB0aW1lIGNvbXBvbmVudCBpcyBkZXRlY3RlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBhcnNlciA9IG5ldyBOTERQYXJzZXIoWydlbicsICdmciddKTtcbiAgICogcGFyc2VyLmhhc1RpbWVDb21wb25lbnQoXCJuZXh0IE1vbmRheSBhdCAzcG1cIik7IC8vIHRydWVcbiAgICogcGFyc2VyLmhhc1RpbWVDb21wb25lbnQoXCJ0b21vcnJvd1wiKTsgLy8gZmFsc2VcbiAgICogcGFyc2VyLmhhc1RpbWVDb21wb25lbnQoXCJpbiAyIGhvdXJzXCIpOyAvLyB0cnVlXG4gICAqIGBgYFxuICAgKi9cbiAgaGFzVGltZUNvbXBvbmVudCh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50aW1lRGV0ZWN0b3IuaGFzVGltZUNvbXBvbmVudCh0ZXh0KTtcbiAgfVxuXG4gIC8vIC0tLSBDQUNIRSBTVEFUSVNUSUNTIChGT1IgTU9OSVRPUklORykgLS0tXG4gIC8qKlxuICAgKiBSZXRvdXJuZSBsZXMgc3RhdGlzdGlxdWVzIGR1IGNhY2hlIGRlIHBhcnNpbmdcbiAgICovXG4gIGdldENhY2hlU3RhdHMoKTogeyBzaXplOiBudW1iZXI7IG1heFNpemU6IG51bWJlciB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2l6ZTogdGhpcy5jYWNoZS5zaXplLFxuICAgICAgbWF4U2l6ZTogdGhpcy5jYWNoZS5tYXhTaXplTGltaXQsXG4gICAgfTtcbiAgfVxufSIsImltcG9ydCB7XG4gIEFwcCxcbiAgRWRpdG9yLFxuICBFZGl0b3JQb3NpdGlvbixcbiAgRWRpdG9yU3VnZ2VzdCxcbiAgRWRpdG9yU3VnZ2VzdENvbnRleHQsXG4gIEVkaXRvclN1Z2dlc3RUcmlnZ2VySW5mbyxcbiAgVEZpbGUsXG59IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHR5cGUgTmF0dXJhbExhbmd1YWdlRGF0ZXMgZnJvbSBcIi4uL21haW5cIjtcbmltcG9ydCB0IGZyb20gXCIuLi9sYW5nL2hlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVNYXJrZG93bkxpbmssIHNob3VsZE9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZSwgZ2V0QWN0aXZlRWRpdG9yIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2VyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuLi93aW5kb3ctbW9tZW50XCI7XG5cbmZ1bmN0aW9uIGVzY2FwZVJlZ2V4KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xufVxuXG4vLyBPcHRpbWFsIFN0cmluZyBBbGlnbm1lbnQgKE9TQSkgZWRpdCBkaXN0YW5jZTogbGlrZSBMZXZlbnNodGVpbiwgYnV0IGFsc29cbi8vIHRyZWF0cyBzd2FwcGluZyB0d28gYWRqYWNlbnQgY2hhcmFjdGVycyBhcyBhIHNpbmdsZSBlZGl0IChlLmcuIFwiaGVpclwiIHZzXG4vLyBcImhpZXJcIiBpcyBkaXN0YW5jZSAxLCBub3QgMikgLS0gYW4gYWRqYWNlbnQtbGV0dGVyIHRyYW5zcG9zaXRpb24gaXMgb25lIG9mXG4vLyB0aGUgbW9zdCBjb21tb24gdHlwaW5nIG1pc3Rha2VzLCBhbmQgcGxhaW4gTGV2ZW5zaHRlaW4gd291bGQgb3RoZXJ3aXNlXG4vLyBjb3VudCBpdCBhcyB0d28gc3Vic3RpdHV0aW9ucyBhbmQgcHVzaCBpdCBwYXN0IHRoZSB0aHJlc2hvbGQgaW5cbi8vIGZ1enp5TWF0Y2hlc1F1ZXJ5KCkgYmVsb3cuIFNwYWNlIGlzIGtlcHQgdG8gdGhyZWUgcm9sbGluZyByb3dzIG9mIGxlbmd0aFxuLy8gYi5sZW5ndGggKyAxIChpbnN0ZWFkIG9mIGEgZnVsbCAoYS5sZW5ndGgrMSkgeCAoYi5sZW5ndGgrMSkgdGFibGUpIHNpbmNlXG4vLyB0aGlzIHJ1bnMgb24gZXZlcnkga2V5c3Ryb2tlIGFnYWluc3QgZXZlcnkgY2FuZGlkYXRlLlxuZnVuY3Rpb24gZWRpdERpc3RhbmNlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgbiA9IGIubGVuZ3RoO1xuICBsZXQgdHdvUm93c0FnbyA9IG5ldyBBcnJheTxudW1iZXI+KG4gKyAxKS5maWxsKDApO1xuICBsZXQgcHJldlJvdyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IG4gKyAxIH0sIChfLCBqKSA9PiBqKTtcbiAgbGV0IGN1cnJlbnRSb3cgPSBuZXcgQXJyYXk8bnVtYmVyPihuICsgMSkuZmlsbCgwKTtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8PSBhLmxlbmd0aDsgaSsrKSB7XG4gICAgY3VycmVudFJvd1swXSA9IGk7XG4gICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XG4gICAgICBjb25zdCBjb3N0ID0gYVtpIC0gMV0gPT09IGJbaiAtIDFdID8gMCA6IDE7XG4gICAgICBsZXQgdmFsdWUgPSBNYXRoLm1pbihcbiAgICAgICAgcHJldlJvd1tqXSArIDEsIC8vIGRlbGV0aW9uXG4gICAgICAgIGN1cnJlbnRSb3dbaiAtIDFdICsgMSwgLy8gaW5zZXJ0aW9uXG4gICAgICAgIHByZXZSb3dbaiAtIDFdICsgY29zdCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICk7XG4gICAgICBpZiAoaSA+IDEgJiYgaiA+IDEgJiYgYVtpIC0gMV0gPT09IGJbaiAtIDJdICYmIGFbaSAtIDJdID09PSBiW2ogLSAxXSkge1xuICAgICAgICB2YWx1ZSA9IE1hdGgubWluKHZhbHVlLCB0d29Sb3dzQWdvW2ogLSAyXSArIDEpOyAvLyB0cmFuc3Bvc2l0aW9uXG4gICAgICB9XG4gICAgICBjdXJyZW50Um93W2pdID0gdmFsdWU7XG4gICAgfVxuICAgIFt0d29Sb3dzQWdvLCBwcmV2Um93LCBjdXJyZW50Um93XSA9IFtwcmV2Um93LCBjdXJyZW50Um93LCB0d29Sb3dzQWdvXTtcbiAgfVxuICByZXR1cm4gcHJldlJvd1tuXTtcbn1cblxuLy8gUHJlZml4IG1hdGNoIGlmIHBvc3NpYmxlIChmYXN0LCBleGFjdCwgYW5kIHRoZSBvbmx5IGJlaGF2aW9yIGZvciBxdWVyaWVzXG4vLyB0b28gc2hvcnQgdG8gZnV6enktbWF0Y2ggcmVsaWFibHkpOyBvdGhlcndpc2UgdG9sZXJhdGUgYSBzbWFsbCBlZGl0XG4vLyBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBxdWVyeSBhbmQgY2FuZGlkYXRlIHByZWZpeGVzIG9mIHNpbWlsYXIgbGVuZ3RoLCBzbyBhXG4vLyBzaW5nbGUgd3JvbmcvbWlzc2luZy90cmFuc3Bvc2VkIGxldHRlciBuZWFyIHRoZSBzdGFydCBvZiB0aGUgcXVlcnkgc3RpbGxcbi8vIHN1cmZhY2VzIHRoZSBpbnRlbmRlZCBzdWdnZXN0aW9uIGluc3RlYWQgb2Ygbm9uZSBhdCBhbGwuIENoZWNrcyBhIHdpbmRvd1xuLy8gb2YgcHJlZml4IGxlbmd0aHMgYXJvdW5kIHRoZSBxdWVyeSdzIG93biBsZW5ndGggKHF1ZXJ5Lmxlbmd0aCDCsSB0aHJlc2hvbGQpXG4vLyByYXRoZXIgdGhhbiBhIHNpbmdsZSBmaXhlZC1sZW5ndGggc2xpY2UgLS0gY29tcGFyaW5nIGFnYWluc3QgYSBwcmVmaXhcbi8vIHRoYXQncyBmb3JjZWQgdG8gYmUgbG9uZ2VyIHRoYW4gdGhlIHF1ZXJ5IGJ5IG1vcmUgdGhhbiB0aGUgdGhyZXNob2xkIHdvdWxkXG4vLyBvdGhlcndpc2UgbWFrZSB0aGUgZWRpdCBkaXN0YW5jZSBhdCBsZWFzdCB0aGF0IGxlbmd0aCBkaWZmZXJlbmNlLCB3aGljaFxuLy8gY2FuIGV4Y2VlZCB0aGUgdGhyZXNob2xkIGV2ZW4gZm9yIGFuIGV4YWN0LXByZWZpeCBtYXRjaCAoZS5nLiBcInRvbXVyXCJcbi8vIGFnYWluc3QgYSBmaXhlZCA3LWNoYXJhY3RlciBzbGljZSBvZiBcInRvbW9ycm93XCIgaXMgYWxyZWFkeSAyIGVkaXRzIGF3YXlcbi8vIGJlZm9yZSBhY2NvdW50aW5nIGZvciB0aGUgYWN0dWFsIHR5cG8pLiBPbmx5IHVzZWQgZm9yIHNob3J0LCBmaXhlZFxuLy8gY2FuZGlkYXRlIGxpc3RzICh0b2RheS90b21vcnJvdywgd2Vla2RheXMsIGhpc3RvcnkvY29udGV4dCkgLS0gdGhlXG4vLyBtdWx0aS1zdGFnZSBwcm9ncmVzc2l2ZS10eXBpbmcgc3VnZ2VzdGlvbiBnZW5lcmF0b3JzIGVsc2V3aGVyZSBpbiB0aGlzXG4vLyBmaWxlIGtlZXAgc3RyaWN0IHByZWZpeCBtYXRjaGluZywgc2luY2UgZnV6enkgbWF0Y2hpbmcgaW50ZXJhY3RzXG4vLyB1bnByZWRpY3RhYmx5IHdpdGggdGhlaXIgcGFydGlhbC1jb21wbGV0aW9uIGxvZ2ljLlxuZnVuY3Rpb24gZnV6enlNYXRjaGVzUXVlcnkoY2FuZGlkYXRlOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgYyA9IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBxID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCFxIHx8IGMuc3RhcnRzV2l0aChxKSkgcmV0dXJuIHRydWU7XG4gIGlmIChxLmxlbmd0aCA8PSAyKSByZXR1cm4gZmFsc2U7IC8vIHRvbyBzaG9ydCB0byBmdXp6eS1tYXRjaCB3aXRob3V0IG5vaXNlXG4gIGNvbnN0IHRocmVzaG9sZCA9IHEubGVuZ3RoIDw9IDUgPyAxIDogMjtcbiAgY29uc3QgbWluTGVuID0gTWF0aC5tYXgoMSwgcS5sZW5ndGggLSB0aHJlc2hvbGQpO1xuICBjb25zdCBtYXhMZW4gPSBNYXRoLm1pbihjLmxlbmd0aCwgcS5sZW5ndGggKyB0aHJlc2hvbGQpO1xuICBmb3IgKGxldCBsZW4gPSBtaW5MZW47IGxlbiA8PSBtYXhMZW47IGxlbisrKSB7XG4gICAgaWYgKGVkaXREaXN0YW5jZShjLnNsaWNlKDAsIGxlbiksIHEpIDw9IHRocmVzaG9sZCkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRlU3VnZ2VzdCBleHRlbmRzIEVkaXRvclN1Z2dlc3Q8c3RyaW5nPiB7XG4gIHByaXZhdGUgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcztcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcykge1xuICAgIHN1cGVyKGFwcCk7XG4gICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cbiAgICAvLyBUeXBlIGFzc2VydGlvbiBuZWVkZWQ6IE9ic2lkaWFuJ3MgRWRpdG9yU3VnZ2VzdCBzY29wZSBkb2Vzbid0IGV4cG9zZSByZWdpc3RlciBtZXRob2QgaW4gdHlwZXMsXG4gICAgLy8gYnV0IGl0IGV4aXN0cyBhdCBydW50aW1lLiBUaGlzIGFsbG93cyB1cyB0byByZWdpc3RlciBjdXN0b20ga2V5Ym9hcmQgc2hvcnRjdXRzLlxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zY29wZSBhcyB0eXBlb2YgdGhpcy5zY29wZSAmIHtcbiAgICAgIHJlZ2lzdGVyOiAobW9kaWZpZXJzOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiBib29sZWFuKSA9PiB2b2lkO1xuICAgIH07XG4gICAgc2NvcGUucmVnaXN0ZXIoW1wiU2hpZnRcIl0sIFwiRW50ZXJcIiwgKGV2dDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgLy8gVHlwZSBhc3NlcnRpb24gbmVlZGVkOiBFZGl0b3JTdWdnZXN0J3MgaW50ZXJuYWwgc3VnZ2VzdGlvbnMgQVBJIGlzIG5vdCBmdWxseSB0eXBlZC5cbiAgICAgIC8vIFRoaXMgYWxsb3dzIGFjY2VzcyB0byB1c2VTZWxlY3RlZEl0ZW0gbWV0aG9kIHdoaWNoIGV4aXN0cyBhdCBydW50aW1lIGZvciBTaGlmdCtFbnRlciBmdW5jdGlvbmFsaXR5LlxuICAgICAgY29uc3QgZWRpdG9yU3VnZ2VzdCA9IHRoaXMgYXMgdW5rbm93biBhcyB7XG4gICAgICAgIHN1Z2dlc3Rpb25zOiB7IHVzZVNlbGVjdGVkSXRlbTogKGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCB9O1xuICAgICAgfTtcbiAgICAgIGVkaXRvclN1Z2dlc3Quc3VnZ2VzdGlvbnMudXNlU2VsZWN0ZWRJdGVtKGV2dCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b3N1Z2dlc3RUb2dnbGVMaW5rKSB7XG4gICAgICB0aGlzLnNldEluc3RydWN0aW9ucyhbeyBjb21tYW5kOiBcIlNoaWZ0XCIsIHB1cnBvc2U6IFwiS2VlcCB0ZXh0IGFzIGFsaWFzXCIgfV0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFN1Z2dlc3Rpb25zKGNvbnRleHQ6IEVkaXRvclN1Z2dlc3RDb250ZXh0KTogc3RyaW5nW10ge1xuICAgIC8vIGhhbmRsZSBubyBtYXRjaGVzXG4gICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSB0aGlzLmdldERhdGVTdWdnZXN0aW9ucyhjb250ZXh0KTtcbiAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID8gc3VnZ2VzdGlvbnMgOiBbIGNvbnRleHQucXVlcnkgXTtcbiAgfVxuXG4gIGdldERhdGVTdWdnZXN0aW9ucyhjb250ZXh0OiBFZGl0b3JTdWdnZXN0Q29udGV4dCk6IHN0cmluZ1tdIHtcbiAgICAvLyBSw6ljdXDDqXJlciBsZXMgc3VnZ2VzdGlvbnMgc3RhbmRhcmRcbiAgICBjb25zdCBzdGFuZGFyZFN1Z2dlc3Rpb25zID0gdGhpcy51bmlxdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzLmZsYXRNYXAoXG4gICAgICBsYW5ndWFnZSA9PiB7XG4gICAgICAgIGxldCBzdWdnZXN0aW9ucyA9IHRoaXMuZ2V0VGltZVN1Z2dlc3Rpb25zKGNvbnRleHQucXVlcnksIGxhbmd1YWdlKTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb25zKVxuICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9ucztcbiAgICAgICAgXG4gICAgICAgIHN1Z2dlc3Rpb25zID0gdGhpcy5nZXRJbW1lZGlhdGVTdWdnZXN0aW9ucyhjb250ZXh0LnF1ZXJ5LCBsYW5ndWFnZSk7XG4gICAgICAgIGlmIChzdWdnZXN0aW9ucylcbiAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnM7XG5cbiAgICAgICAgc3VnZ2VzdGlvbnMgPSB0aGlzLmdldFJlbGF0aXZlU3VnZ2VzdGlvbnMoY29udGV4dC5xdWVyeSwgbGFuZ3VhZ2UpO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zO1xuXG4gICAgICAgIHN1Z2dlc3Rpb25zID0gdGhpcy5nZXRXZWVrZGF5U3VnZ2VzdGlvbnMoY29udGV4dC5xdWVyeSwgbGFuZ3VhZ2UpO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRTdWdnZXN0aW9ucyhjb250ZXh0LnF1ZXJ5LCBsYW5ndWFnZSk7XG4gICAgICB9XG4gICAgKSk7XG5cbiAgICAvLyBTaSBsZXMgc3VnZ2VzdGlvbnMgaW50ZWxsaWdlbnRlcyBzb250IGTDqXNhY3RpdsOpZXMsIHJldG91cm5lciBsZXMgc3VnZ2VzdGlvbnMgc3RhbmRhcmRcbiAgICBpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZVNtYXJ0U3VnZ2VzdGlvbnMpIHtcbiAgICAgIHJldHVybiBzdGFuZGFyZFN1Z2dlc3Rpb25zO1xuICAgIH1cblxuICAgIC8vIFLDqWN1cMOpcmVyIGxlcyBzdWdnZXN0aW9ucyBpbnRlbGxpZ2VudGVzIChoaXN0b3JpcXVlICsgY29udGV4dGUpXG4gICAgY29uc3Qgc21hcnRTdWdnZXN0aW9ucyA9IHRoaXMuZ2V0U21hcnRTdWdnZXN0aW9ucyhjb250ZXh0LCBzdGFuZGFyZFN1Z2dlc3Rpb25zKTtcblxuICAgIC8vIEZ1c2lvbm5lciA6IHN1Z2dlc3Rpb25zIGludGVsbGlnZW50ZXMgZW4gcHJpb3JpdMOpLCBwdWlzIHN1Z2dlc3Rpb25zIHN0YW5kYXJkXG4gICAgY29uc3QgbWVyZ2VkID0gWy4uLnNtYXJ0U3VnZ2VzdGlvbnNdO1xuICAgIGZvciAoY29uc3Qgc3VnZ2VzdGlvbiBvZiBzdGFuZGFyZFN1Z2dlc3Rpb25zKSB7XG4gICAgICBpZiAoIW1lcmdlZC5pbmNsdWRlcyhzdWdnZXN0aW9uKSkge1xuICAgICAgICBtZXJnZWQucHVzaChzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgbGVzIHN1Z2dlc3Rpb25zIGludGVsbGlnZW50ZXMgYmFzw6llcyBzdXIgbCdoaXN0b3JpcXVlIGV0IGxlIGNvbnRleHRlXG4gICAqL1xuICBwcml2YXRlIGdldFNtYXJ0U3VnZ2VzdGlvbnMoY29udGV4dDogRWRpdG9yU3VnZ2VzdENvbnRleHQsIF9zdGFuZGFyZFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzbWFydFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHF1ZXJ5ID0gY29udGV4dC5xdWVyeS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gU3VnZ2VzdGlvbnMgYmFzw6llcyBzdXIgbCdoaXN0b3JpcXVlXG4gICAgaWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUhpc3RvcnlTdWdnZXN0aW9ucyAmJiB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGlzdG9yeVN1Z2dlc3Rpb25zID0gdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIuZ2V0VG9wU3VnZ2VzdGlvbnNTeW5jKDE1KTtcbiAgICAgICAgZm9yIChjb25zdCBzdWdnZXN0aW9uIG9mIGhpc3RvcnlTdWdnZXN0aW9ucykge1xuICAgICAgICAgIC8vIFbDqXJpZmllciBxdWUgbGEgc3VnZ2VzdGlvbiBjb3JyZXNwb25kIMOgIGxhIHJlcXXDqnRlICh0b2zDqHJlIHVuZSBwZXRpdGUgZmF1dGUgZGUgZnJhcHBlKVxuICAgICAgICAgIGlmIChmdXp6eU1hdGNoZXNRdWVyeShzdWdnZXN0aW9uLCBxdWVyeSkgJiYgIXNtYXJ0U3VnZ2VzdGlvbnMuaW5jbHVkZXMoc3VnZ2VzdGlvbikpIHtcbiAgICAgICAgICAgIHNtYXJ0U3VnZ2VzdGlvbnMucHVzaChzdWdnZXN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmVyIGxlcyBlcnJldXJzIHNpbGVuY2lldXNlbWVudFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1Z2dlc3Rpb25zIGJhc8OpZXMgc3VyIGxlIGNvbnRleHRlXG4gICAgaWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUNvbnRleHRTdWdnZXN0aW9ucyAmJiB0aGlzLnBsdWdpbi5jb250ZXh0QW5hbHl6ZXIgJiYgY29udGV4dC5lZGl0b3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRJbmZvID0gdGhpcy5wbHVnaW4uY29udGV4dEFuYWx5emVyLmFuYWx5emVDb250ZXh0U3luYyhcbiAgICAgICAgICBjb250ZXh0LmVkaXRvcixcbiAgICAgICAgICBjb250ZXh0LnN0YXJ0LmxpbmVcbiAgICAgICAgKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEFqb3V0ZXIgbGVzIGRhdGVzIHRyb3V2w6llcyBkYW5zIGxlIGNvbnRleHRlICh0b2zDqHJlIHVuZSBwZXRpdGUgZmF1dGUgZGUgZnJhcHBlKVxuICAgICAgICBmb3IgKGNvbnN0IGRhdGVTdHIgb2YgY29udGV4dEluZm8uZGF0ZXNJbkNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoZnV6enlNYXRjaGVzUXVlcnkoZGF0ZVN0ciwgcXVlcnkpICYmICFzbWFydFN1Z2dlc3Rpb25zLmluY2x1ZGVzKGRhdGVTdHIpKSB7XG4gICAgICAgICAgICBzbWFydFN1Z2dlc3Rpb25zLnB1c2goZGF0ZVN0cik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlciBsZXMgZXJyZXVycyBzaWxlbmNpZXVzZW1lbnRcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc21hcnRTdWdnZXN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGltZVN1Z2dlc3Rpb25zKGlucHV0U3RyOiBzdHJpbmcsIGxhbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAvLyBPbmx5IHRoZSBmaXJzdCB2YXJpYW50IG9mIGEgcGlwZS1zZXBhcmF0ZWQgdHJhbnNsYXRpb24gKGUuZy4gQ2hpbmVzZVxuICAgIC8vIFwi5pmC6ZaTfOaXtumXtFwiKSBpcyB1c2VkIGZvciBkaXNwbGF5L21hdGNoaW5nIC0tIGVtYmVkZGluZyB0aGUgcmF3XG4gICAgLy8gbXVsdGktdmFyaWFudCBzdHJpbmcgd291bGQgYm90aCBnYXJibGUgdGhlIHN1Z2dlc3Rpb24gdGV4dCBhbmQsIHNpbmNlXG4gICAgLy8gXCJ8XCIgaXMgYSByZWdleCBtZXRhY2hhcmFjdGVyLCBzaWxlbnRseSBicmVhayB0aGUgXCJeXCIgYW5jaG9yIGJlbG93LlxuICAgIGNvbnN0IHRpbWVXb3JkID0gdChcInRpbWVcIiwgbGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICBjb25zdCBub3dXb3JkID0gdChcIm5vd1wiLCBsYW5nKS5zcGxpdCgnfCcpWzBdO1xuICAgIGlmIChpbnB1dFN0ci5tYXRjaChuZXcgUmVnRXhwKGBeJHtlc2NhcGVSZWdleCh0aW1lV29yZCl9YCwgXCJpXCIpKSkge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBbXG4gICAgICAgIG5vd1dvcmQsXG4gICAgICAgIHQoXCJwbHVzbWludXRlc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogXCIxNVwiIH0pLFxuICAgICAgICB0KFwicGx1c2hvdXJcIiwgbGFuZywgeyB0aW1lRGVsdGE6IFwiMVwiIH0pLFxuICAgICAgICB0KFwibWludXNtaW51dGVzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBcIjE1XCIgfSksXG4gICAgICAgIHQoXCJtaW51c2hvdXJcIiwgbGFuZywgeyB0aW1lRGVsdGE6IFwiMVwiIH0pLFxuICAgICAgXVxuICAgICAgICAubWFwKHZhbCA9PiBgJHt0aW1lV29yZH06JHt2YWx9YClcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGlucHV0U3RyLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwID8gc3VnZ2VzdGlvbnMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbW1lZGlhdGVTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gRXNjYXBlIGVhY2ggdHJhbnNsYXRpb24ncyB2YXJpYW50cyBpbmRpdmlkdWFsbHkgYmVmb3JlIGpvaW5pbmcgaW50b1xuICAgIC8vIGFuIGFsdGVybmF0aW9uOiBhIGxhbmd1YWdlJ3Mgb3duIFwifFwiLXNlcGFyYXRlZCB2YXJpYW50cyBzdGF5XG4gICAgLy8gbWVhbmluZ2Z1bCBhbHRlcm5hdGlvbiwgYnV0IGFueSBvdGhlciByZWdleCBtZXRhY2hhcmFjdGVyIG9uZSBtaWdodFxuICAgIC8vIGNvbnRhaW4gY2FuJ3QgY29ycnVwdCB0aGUgcGF0dGVybi4gQW5jaG9yZWQgd2l0aCBcIl5cIiBsaWtlIHRoZSBvdGhlclxuICAgIC8vIHN1Z2dlc3Rpb24gZ2VuZXJhdG9ycyBpbiB0aGlzIGZpbGUgLS0gb3RoZXJ3aXNlIGEgc2hvcnQsIGNvbW1vblxuICAgIC8vIHN1YnN0cmluZyAoZS5nLiBDaGluZXNlIFwibmV4dFwiOiBcIuS4i+S4gOWAi3zkuIvkuIDkuKp85LiLXCIsIHRoZSBsYXN0IHZhcmlhbnRcbiAgICAvLyBiZWluZyBhIHNpbmdsZSBiYXJlIGNoYXJhY3RlcikgY2FuIG1hdGNoIGluIHRoZSBtaWRkbGUgb2YgdW5yZWxhdGVkXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgYnVpbGRQYXR0ZXJuID0gKHRyYW5zbGF0aW9uOiBzdHJpbmcpID0+XG4gICAgICB0cmFuc2xhdGlvbi5zcGxpdCgnfCcpLm1hcCh2ID0+IGVzY2FwZVJlZ2V4KHYudHJpbSgpKSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ3wnKTtcbiAgICBjb25zdCBwcmVmaXhQYXR0ZXJuID0gW3QoXCJuZXh0XCIsIGxhbmcpLCB0KFwibGFzdFwiLCBsYW5nKSwgdChcInRoaXNcIiwgbGFuZyldXG4gICAgICAubWFwKGJ1aWxkUGF0dGVybilcbiAgICAgIC5qb2luKCd8Jyk7XG4gICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChgXigke3ByZWZpeFBhdHRlcm59KWAsIFwiaVwiKTtcbiAgICBjb25zdCBtYXRjaCA9IGlucHV0U3RyLm1hdGNoKHJlZ2V4cClcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IG1hdGNoWzFdXG4gICAgICAvLyBQcmVuZHJlIHNldWxlbWVudCBsYSBwcmVtacOocmUgdmFyaWFudGUgKGF2YW50IGxlIHwpIHBvdXIgbGVzIHN1Z2dlc3Rpb25zXG4gICAgICBjb25zdCBnZXRGaXJzdFZhcmlhbnQgPSAodmFsOiBzdHJpbmcpID0+IHZhbC5zcGxpdCgnfCcpWzBdO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBbXG4gICAgICAgIHQoXCJ3ZWVrXCIsIGxhbmcpLFxuICAgICAgICB0KFwibW9udGhcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ5ZWFyXCIsIGxhbmcpLFxuICAgICAgICB0KFwic3VuZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwibW9uZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwidHVlc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcIndlZG5lc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInRodXJzZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwiZnJpZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwic2F0dXJkYXlcIiwgbGFuZyksXG4gICAgICBdXG4gICAgICAgIC5tYXAodmFsID0+IHtcbiAgICAgICAgICBjb25zdCBmaXJzdFZhcmlhbnQgPSBnZXRGaXJzdFZhcmlhbnQodmFsKTtcbiAgICAgICAgICAvLyBDYXBpdGFsaXNlciBsYSBwcmVtacOocmUgbGV0dHJlIHBvdXIgdW4gbWVpbGxldXIgYWZmaWNoYWdlXG4gICAgICAgICAgcmV0dXJuIGZpcnN0VmFyaWFudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGZpcnN0VmFyaWFudC5zbGljZSgxKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCh2YWwgPT4gYCR7cmVmZXJlbmNlfSAke3ZhbH1gKVxuICAgICAgICAuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVsYXRpdmVTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gVsOpcmlmaWVyIGQnYWJvcmQgbGVzIGV4cHJlc3Npb25zIGNvbWJpbsOpZXMgY29tbWUgXCJpbiAxIG1vbnRoIGFuZFwiIG91IFwiZGFucyAxIG1vaXMgZXRcIlxuICAgIC8vIFBlcm1ldHRyZSBsYSBzYWlzaWUgcHJvZ3Jlc3NpdmUgOiBcImluIDEgbW9udGggYW5kXCIsIFwiaW4gMSBtb250aCBhbmQgM1wiLCBcImluIDMgbW9udGggYW5kXCIsIGV0Yy5cbiAgICBjb25zdCBhbmRQYXR0ZXJuID0gdChcImFuZFwiLCBsYW5nKS5zcGxpdCgnfCcpWzBdOyAvLyBQcmVuZHJlIGxhIHByZW1pw6hyZSB2YXJpYW50ZVxuICAgIC8vIFJlZ2V4IHBsdXMgZmxleGlibGUgcXVpIHBlcm1ldCBsYSBzYWlzaWUgYXByw6hzIFwiYW5kXCJcbiAgICBjb25zdCBjb21iaW5lZFJlZ2V4ID0gbmV3IFJlZ0V4cChgXigke3QoXCJpblwiLCBsYW5nKX0gKT8oWystXT9cXFxcZCspXFxcXHMrKCR7dChcIm1pbnV0ZVwiLCBsYW5nKX18JHt0KFwiaG91clwiLCBsYW5nKX18JHt0KFwiZGF5XCIsIGxhbmcpfXwke3QoXCJ3ZWVrXCIsIGxhbmcpfXwke3QoXCJtb250aFwiLCBsYW5nKX18JHt0KFwieWVhclwiLCBsYW5nKX0pXFxcXHMrKCR7YW5kUGF0dGVybn0pKFxcXFxzKy4qKT8kYCwgXCJpXCIpO1xuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2ggPSBpbnB1dFN0ci5tYXRjaChjb21iaW5lZFJlZ2V4KTtcbiAgICBpZiAoY29tYmluZWRNYXRjaCkge1xuICAgICAgY29uc3QgYWZ0ZXJBbmQgPSBjb21iaW5lZE1hdGNoWzVdID8gY29tYmluZWRNYXRjaFs1XS50cmltKCkgOiAnJztcbiAgICAgIFxuICAgICAgLy8gRXh0cmFpcmUgbGEgcGFydGllIGF2YW50IFwiYW5kXCIgcG91ciByZWNvbnN0cnVpcmUgY29ycmVjdGVtZW50XG4gICAgICBjb25zdCBiZWZvcmVBbmQgPSBpbnB1dFN0ci5zdWJzdHJpbmcoMCwgaW5wdXRTdHIuaW5kZXhPZihjb21iaW5lZE1hdGNoWzRdKSArIGNvbWJpbmVkTWF0Y2hbNF0ubGVuZ3RoKS50cmltRW5kKCk7XG4gICAgICBcbiAgICAgIC8vIFNpIG9uIGEgZMOpasOgIGNvbW1lbmPDqSDDoCB0YXBlciBhcHLDqHMgXCJhbmRcIiwgZXh0cmFpcmUgbGUgbm9tYnJlIHMnaWwgeSBlbiBhIHVuXG4gICAgICBsZXQgc3VnZ2VzdGVkTnVtYmVyID0gXCIxXCI7XG4gICAgICBsZXQgYWZ0ZXJBbmRXaXRob3V0TnVtYmVyID0gYWZ0ZXJBbmQ7XG4gICAgICBpZiAoYWZ0ZXJBbmQpIHtcbiAgICAgICAgY29uc3QgbnVtYmVyTWF0Y2ggPSBhZnRlckFuZC5tYXRjaCgvXihcXGQrKSguKikkLyk7XG4gICAgICAgIGlmIChudW1iZXJNYXRjaCkge1xuICAgICAgICAgIHN1Z2dlc3RlZE51bWJlciA9IG51bWJlck1hdGNoWzFdO1xuICAgICAgICAgIGFmdGVyQW5kV2l0aG91dE51bWJlciA9IG51bWJlck1hdGNoWzJdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtcbiAgICAgICAgdChcImlubWludXRlc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogc3VnZ2VzdGVkTnVtYmVyIH0pLFxuICAgICAgICB0KFwiaW5ob3Vyc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogc3VnZ2VzdGVkTnVtYmVyIH0pLFxuICAgICAgICB0KFwiaW5kYXlzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBzdWdnZXN0ZWROdW1iZXIgfSksXG4gICAgICAgIHQoXCJpbndlZWtzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBzdWdnZXN0ZWROdW1iZXIgfSksXG4gICAgICAgIHQoXCJpbm1vbnRoc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogc3VnZ2VzdGVkTnVtYmVyIH0pLFxuICAgICAgXVxuICAgICAgICAubWFwKHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHVuaXRQYXJ0ID0gcy5yZXBsYWNlKC9eZGFucyB8XmluIC9pLCAnJyk7XG4gICAgICAgICAgLy8gdW5pdFBhcnQgZXN0IGNvbW1lIFwiMyBkYXlzXCIgb3UgXCI1IG1pbnV0ZXNcIlxuICAgICAgICAgIGlmIChhZnRlckFuZCkge1xuICAgICAgICAgICAgLy8gU2kgb24gYSBkw6lqw6AgY29tbWVuY8OpIMOgIHRhcGVyLCBjb21wbMOpdGVyIGludGVsbGlnZW1tZW50XG4gICAgICAgICAgICAvLyB1bml0UGFydCBjb21tZW5jZSBwYXIgbGUgbm9tYnJlIChleDogXCIzIGRheXNcIilcbiAgICAgICAgICAgIGNvbnN0IHVuaXRXb3JkcyA9IHVuaXRQYXJ0LnNwbGl0KCcgJyk7XG4gICAgICAgICAgICBpZiAodW5pdFdvcmRzLmxlbmd0aCA+IDEgJiYgdW5pdFdvcmRzWzBdID09PSBzdWdnZXN0ZWROdW1iZXIpIHtcbiAgICAgICAgICAgICAgLy8gTGUgbm9tYnJlIGNvcnJlc3BvbmQsIG9uIHBldXQgc3VnZ8OpcmVyIGxlIHJlc3RlIChleDogXCJkYXlzXCIpXG4gICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IHVuaXRQYXJ0LnN1YnN0cmluZyhzdWdnZXN0ZWROdW1iZXIubGVuZ3RoKS50cmltKCk7XG4gICAgICAgICAgICAgIGlmIChhZnRlckFuZFdpdGhvdXROdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBTaSBvbiBhIHRhcMOpIHF1ZWxxdWUgY2hvc2UgYXByw6hzIGxlIG5vbWJyZSwgdsOpcmlmaWVyIHNpIMOnYSBjb3JyZXNwb25kXG4gICAgICAgICAgICAgICAgLy8gTk9URToga25vd24gcm91Z2ggZWRnZSAtLSB0aGlzIGRyb3BzIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZVxuICAgICAgICAgICAgICAgIC8vIG51bWJlciBhbmQgdW5pdCAoZS5nLiB0eXBpbmcgXCIzIGRheVwiIGFmdGVyIFwiYW5kXCIgcHJvZHVjZXNcbiAgICAgICAgICAgICAgICAvLyBcIi4uLmFuZCAzc1wiIGluc3RlYWQgb2YgXCIuLi5hbmQgMyBkYXlzXCIpLCBzbyB0aGUgcmVidWlsdFxuICAgICAgICAgICAgICAgIC8vIGNhbmRpZGF0ZSB0aGVuIGZhaWxzIHRoZSBvdXRlciBwcmVmaXggZmlsdGVyIGJlbG93IGFuZCB0aGlzXG4gICAgICAgICAgICAgICAgLy8gd2hvbGUgYnJhbmNoIHNpbGVudGx5IGNvbnRyaWJ1dGVzIG5vIHN1Z2dlc3Rpb24uIFZlcmlmaWVkXG4gICAgICAgICAgICAgICAgLy8gYXMgdGhlIGFjdHVhbCBjdXJyZW50IGJlaGF2aW9yOyBsZWZ0IGFsb25lIGFzIGEgbmFycm93XG4gICAgICAgICAgICAgICAgLy8gYXV0b3N1Z2dlc3QtdGV4dCBwb2xpc2ggaXNzdWUgcmF0aGVyIHRoYW4gZml4ZWQgaGVyZS5cbiAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChhZnRlckFuZFdpdGhvdXROdW1iZXIudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtiZWZvcmVBbmR9ICR7c3VnZ2VzdGVkTnVtYmVyfSR7cmVtYWluaW5nLnN1YnN0cmluZyhhZnRlckFuZFdpdGhvdXROdW1iZXIubGVuZ3RoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBPbiBhIGp1c3RlIHRhcMOpIGxlIG5vbWJyZSwgc3VnZ8OpcmVyIGxlIHJlc3RlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2JlZm9yZUFuZH0gJHt1bml0UGFydH1gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZWFjaGVkIGZvciBsYW5ndWFnZXMgdGhhdCBkb24ndCBzZXBhcmF0ZSB0aGUgbnVtYmVyIGFuZCB1bml0XG4gICAgICAgICAgICAvLyB3aXRoIGEgc3BhY2UgKGUuZy4gQ2hpbmVzZSBcIjPlpKnlvoxcIiwgSmFwYW5lc2UgXCIz5pel5b6MXCIpOiB1bml0UGFydFxuICAgICAgICAgICAgLy8gdGhlbiBoYXMgbm8gc3BhY2UgYXQgYWxsLCBzbyB1bml0V29yZHMubGVuZ3RoID4gMSBhYm92ZSBpc1xuICAgICAgICAgICAgLy8gZmFsc2UgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBudW1iZXIgbWF0Y2hlcy4gTm90ZSB0aGlzIGhhc1xuICAgICAgICAgICAgLy8gaXRzIG93biByb3VnaCBlZGdlIHN5bW1ldHJpYyB0byB0aGUgb25lIGFib3ZlIC0tIHNpbmNlXG4gICAgICAgICAgICAvLyB1bml0UGFydCBoYXMgbm8gc3BhY2UsIHVuaXRQYXJ0LmluZGV4T2YoJyAnKSBpcyAtMSBhbmRcbiAgICAgICAgICAgIC8vIHVuaXRXaXRob3V0TnVtYmVyIGVuZHMgdXAgYmVpbmcgdGhlICp3aG9sZSogdW5pdFBhcnRcbiAgICAgICAgICAgIC8vIChpbmNsdWRpbmcgaXRzIG93biBsZWFkaW5nIG51bWJlciksIHNvIHRoZSByZXR1cm5lZCBzdWdnZXN0aW9uXG4gICAgICAgICAgICAvLyBkdXBsaWNhdGVzIHRoZSBudW1iZXIgKGUuZy4gXCLlnKggMyDlpKkg5ZKMIDQgNOWIhumQmOW+jFwiIGluc3RlYWQgb2ZcbiAgICAgICAgICAgIC8vIFwiLi4u5ZKMIDTliIbpkJjlvoxcIikuIFZlcmlmaWVkIGFzIHRoZSBhY3R1YWwgY3VycmVudCBiZWhhdmlvcjtcbiAgICAgICAgICAgIC8vIGxlZnQgYWxvbmUgYXMgdGhlIHNhbWUga2luZCBvZiBuYXJyb3cgYXV0b3N1Z2dlc3QtdGV4dCBwb2xpc2hcbiAgICAgICAgICAgIC8vIGlzc3VlIGFzIHRoZSBvbmUgZG9jdW1lbnRlZCBhYm92ZSwgbm90IGZpeGVkIGhlcmUuXG4gICAgICAgICAgICBjb25zdCB1bml0V2l0aG91dE51bWJlciA9IHVuaXRQYXJ0LnN1YnN0cmluZyh1bml0UGFydC5pbmRleE9mKCcgJykgKyAxKTtcbiAgICAgICAgICAgIGlmICh1bml0V2l0aG91dE51bWJlci50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoYWZ0ZXJBbmQudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGAke2JlZm9yZUFuZH0gJHtzdWdnZXN0ZWROdW1iZXJ9ICR7dW5pdFdpdGhvdXROdW1iZXJ9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYCR7YmVmb3JlQW5kfSAke3VuaXRQYXJ0fWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFbDqXJpZmllciBsZXMgcGxhZ2VzIGRlIGRhdGVzIHBhcnRpZWxsZXMgY29tbWUgXCJkZSBsdW5kaSDDoFwiIG91IFwiZnJvbSBtb25kYXkgdG9cIlxuICAgIC8vIFBlcm1ldHRyZSBsYSBzYWlzaWUgcHJvZ3Jlc3NpdmUgOiBcImRlIGx1bmRpIGFcIiwgXCJkZSBsdW5kaSBhIHZcIiwgXCJkZSBsdW5kaSBhIHZlXCIsIGV0Yy5cbiAgICBjb25zdCBmcm9tUGF0dGVybiA9IHQoXCJmcm9tXCIsIGxhbmcpLnNwbGl0KCd8JylbMF07XG4gICAgY29uc3QgdG9QYXR0ZXJuID0gdChcInRvXCIsIGxhbmcpLnNwbGl0KCd8JylbMF07XG4gICAgLy8gUmVnZXggcGx1cyBmbGV4aWJsZSBxdWkgcGVybWV0IGxhIHNhaXNpZSBwcm9ncmVzc2l2ZSBhcHLDqHMgXCLDoFwiIG91IFwiYVwiXG4gICAgY29uc3QgcmFuZ2VQYXJ0aWFsUmVnZXggPSBuZXcgUmVnRXhwKGBeKCR7ZnJvbVBhdHRlcm59fGRlfGR1KVxcXFxzKygke3QoXCJzdW5kYXlcIiwgbGFuZyl9fCR7dChcIm1vbmRheVwiLCBsYW5nKX18JHt0KFwidHVlc2RheVwiLCBsYW5nKX18JHt0KFwid2VkbmVzZGF5XCIsIGxhbmcpfXwke3QoXCJ0aHVyc2RheVwiLCBsYW5nKX18JHt0KFwiZnJpZGF5XCIsIGxhbmcpfXwke3QoXCJzYXR1cmRheVwiLCBsYW5nKX0pXFxcXHMrKCR7dG9QYXR0ZXJufXzDoHxhKShcXFxccysuKik/JGAsIFwiaVwiKTtcbiAgICBjb25zdCByYW5nZVBhcnRpYWxNYXRjaCA9IGlucHV0U3RyLm1hdGNoKHJhbmdlUGFydGlhbFJlZ2V4KTtcbiAgICBpZiAocmFuZ2VQYXJ0aWFsTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGFmdGVyVG8gPSByYW5nZVBhcnRpYWxNYXRjaFs0XSA/IHJhbmdlUGFydGlhbE1hdGNoWzRdLnRyaW0oKSA6ICcnO1xuICAgICAgLy8gRXh0cmFpcmUgbGEgcGFydGllIGF2YW50IFwiw6BcIiBvdSBcImFcIiBwb3VyIHJlY29uc3RydWlyZSBjb3JyZWN0ZW1lbnRcbiAgICAgIGNvbnN0IGJlZm9yZVRvID0gaW5wdXRTdHIuc3Vic3RyaW5nKDAsIGlucHV0U3RyLmluZGV4T2YocmFuZ2VQYXJ0aWFsTWF0Y2hbM10pICsgcmFuZ2VQYXJ0aWFsTWF0Y2hbM10ubGVuZ3RoKS50cmltRW5kKCk7XG4gICAgICBcbiAgICAgIC8vIEfDqW7DqXJlciBkZXMgc3VnZ2VzdGlvbnMgcG91ciBsZXMgam91cnMgZGUgZmluIHBvc3NpYmxlc1xuICAgICAgY29uc3QgYWxsRGF5cyA9IFtcbiAgICAgICAgdChcInN1bmRheVwiLCBsYW5nKSxcbiAgICAgICAgdChcIm1vbmRheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInR1ZXNkYXlcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ3ZWRuZXNkYXlcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ0aHVyc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcImZyaWRheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInNhdHVyZGF5XCIsIGxhbmcpLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gYWxsRGF5c1xuICAgICAgICAubWFwKGRheSA9PiB7XG4gICAgICAgICAgaWYgKGFmdGVyVG8pIHtcbiAgICAgICAgICAgIC8vIFNpIG9uIGEgZMOpasOgIGNvbW1lbmPDqSDDoCB0YXBlciwgZmlsdHJlciBsZXMgam91cnMgcXVpIGNvbW1lbmNlbnQgcGFyIGNlIHRleHRlXG4gICAgICAgICAgICBpZiAoZGF5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChhZnRlclRvLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIC8vIFJlbXBsYWNlciBcImFmdGVyVG9cIiBwYXIgbGUgam91ciBjb21wbGV0XG4gICAgICAgICAgICAgIHJldHVybiBgJHtiZWZvcmVUb30gJHtkYXl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYCR7YmVmb3JlVG99ICR7ZGF5fWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gc3RhbmRhcmQgcG91ciBsZXMgZGF0ZXMgcmVsYXRpdmVzIHNpbXBsZXNcbiAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKGBeKCR7dChcImluXCIsIGxhbmcpfSApPyhbKy1dP1xcXFxkKylgLCBcImlcIilcbiAgICBjb25zdCByZWxhdGl2ZURhdGUgPSBpbnB1dFN0ci5tYXRjaChyZWdleHApO1xuICAgIGlmIChyZWxhdGl2ZURhdGUpIHtcbiAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlbGF0aXZlRGF0ZVtyZWxhdGl2ZURhdGUubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtcbiAgICAgICAgdChcImlubWludXRlc1wiLCBsYW5nLCB7IHRpbWVEZWx0YSB9KSxcbiAgICAgICAgdChcImluaG91cnNcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJpbmRheXNcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJpbndlZWtzXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwiaW5tb250aHNcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJtaW51dGVzYWdvXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwiaG91cnNhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJkYXlzYWdvXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwid2Vla3NhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJtb250aHNhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICBdLmZpbHRlcihpdGVtcyA9PiBpdGVtcy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoaW5wdXRTdHIudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIGFuIGVtcHR5IGFycmF5IGhlcmU6IGFueSBkaWdpdC1sZWQgaW5wdXQgKGluY2x1ZGluZ1xuICAgICAgLy8gc3VmZml4LXN0eWxlIFwiMyBkaWFzIGF0csOhc1wiKSBtYXRjaGVzIHRoaXMgcmVnZXhwIHRvbywgc2luY2UgaXRzXG4gICAgICAvLyBwcmVmaXggZ3JvdXAgaXMgb3B0aW9uYWwgLS0gcmV0dXJuaW5nIHVuY29uZGl0aW9uYWxseSB3b3VsZCBtYWtlXG4gICAgICAvLyB0aGUgc3VmZml4LXBhdHRlcm4gY2hlY2sgYmVsb3cgdW5yZWFjaGFibGUgZGVhZCBjb2RlIGZvciBldmVyeVxuICAgICAgLy8gc3VmZml4LW9ubHkgbGFuZ3VhZ2UuXG4gICAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3VmZml4LXN0eWxlIHBhc3QgZXhwcmVzc2lvbnMsIGUuZy4gUG9ydHVndWVzZS9TcGFuaXNoIFwiMyBkaWFzIGF0csOhc1wiXG4gICAgLy8gKFggdW5pdCArIGFnb3N1ZmZpeCBtYXJrZXIpLCB0aGUgcGFzdC10ZW5zZSBtaXJyb3Igb2YgdGhlIHByZWZpeFxuICAgIC8vIHN1Z2dlc3Rpb25zIGFib3ZlLlxuICAgIGNvbnN0IGFnb1N1ZmZpeCA9IHQoXCJhZ29zdWZmaXhcIiwgbGFuZyk7XG4gICAgaWYgKGFnb1N1ZmZpeCAmJiBhZ29TdWZmaXggIT09IFwiTk9URk9VTkRcIikge1xuICAgICAgY29uc3Qgc3VmZml4TWF0Y2ggPSBpbnB1dFN0ci5tYXRjaCgvXihcXGQrKVxccysoXFx3KikvaSk7XG4gICAgICBpZiAoc3VmZml4TWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZURlbHRhID0gc3VmZml4TWF0Y2hbMV07XG4gICAgICAgIGNvbnN0IHN1ZmZpeFZhcmlhbnQgPSBhZ29TdWZmaXguc3BsaXQoJ3wnKVswXTtcblxuICAgICAgICBjb25zdCB1bml0VHlwZXMgPSBbJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdW5pdFR5cGUgb2YgdW5pdFR5cGVzKSB7XG4gICAgICAgICAgY29uc3Qgd29yZHMgPSB0KHVuaXRUeXBlLCBsYW5nKS5zcGxpdCgnfCcpLm1hcCh3ID0+IHcudHJpbSgpKS5zbGljZSgwLCAyKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goYCR7dGltZURlbHRhfSAke3dvcmR9ICR7c3VmZml4VmFyaWFudH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHN1Z2dlc3Rpb25zLmZpbHRlcihpdGVtID0+IGl0ZW0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGlucHV0U3RyLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgICAgaWYgKGZpbHRlcmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFdlZWtkYXlTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gTGUgcGFyc2VyIHBldXQgZ8OpcmVyIGxlcyBhYnLDqXZpYXRpb25zICh0aHUsIG1vbiwgc2F0LCBldGMuKSwgZG9uYyBvbiBkb2l0IGxlcyBwcm9wb3NlciBhdXNzaVxuICAgIGNvbnN0IHdlZWtkYXlzID0gW1xuICAgICAgeyBrZXk6ICdzdW5kYXknLCBhYmJyOiBbJ3N1biddIH0sXG4gICAgICB7IGtleTogJ21vbmRheScsIGFiYnI6IFsnbW9uJ10gfSxcbiAgICAgIHsga2V5OiAndHVlc2RheScsIGFiYnI6IFsndHVlJywgJ3R1ZXMnXSB9LFxuICAgICAgeyBrZXk6ICd3ZWRuZXNkYXknLCBhYmJyOiBbJ3dlZCddIH0sXG4gICAgICB7IGtleTogJ3RodXJzZGF5JywgYWJicjogWyd0aHUnLCAndGh1cicsICd0aHVycyddIH0sXG4gICAgICB7IGtleTogJ2ZyaWRheScsIGFiYnI6IFsnZnJpJ10gfSxcbiAgICAgIHsga2V5OiAnc2F0dXJkYXknLCBhYmJyOiBbJ3NhdCddIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IGlucHV0TG93ZXIgPSBpbnB1dFN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBkYXkgb2Ygd2Vla2RheXMpIHtcbiAgICAgIC8vIHQoKSBhbHdheXMgZmFsbHMgYmFjayB0byBFbmdsaXNoLCBhbmQgZW4udHMgYWx3YXlzIGRlZmluZXMgYWxsXG4gICAgICAvLyBzZXZlbiB3ZWVrZGF5cywgc28gdGhpcyBndWFyZCBjYW4ndCBhY3R1YWxseSBiZSBmYWxzZS5cbiAgICAgIGNvbnN0IGRheU5hbWUgPSB0KGRheS5rZXksIGxhbmcpO1xuICAgICAgaWYgKCFkYXlOYW1lIHx8IGRheU5hbWUgPT09IFwiTk9URk9VTkRcIikgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGZpcnN0VmFyaWFudCA9IGRheU5hbWUuc3BsaXQoJ3wnKVswXS50cmltKCk7XG4gICAgICBjb25zdCBkYXlOYW1lTG93ZXIgPSBmaXJzdFZhcmlhbnQudG9Mb3dlckNhc2UoKTtcblxuICAgICAgLy8gVsOpcmlmaWVyIHNpIGxlIG5vbSBjb21wbGV0IGNvbW1lbmNlIHBhciBsJ2lucHV0ICh0b2zDqHJlIHVuZSBwZXRpdGUgZmF1dGUgZGUgZnJhcHBlKVxuICAgICAgaWYgKGZ1enp5TWF0Y2hlc1F1ZXJ5KGRheU5hbWVMb3dlciwgaW5wdXRMb3dlcikpIHtcbiAgICAgICAgY29uc3QgY2FwaXRhbGl6ZWQgPSBmaXJzdFZhcmlhbnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBmaXJzdFZhcmlhbnQuc2xpY2UoMSk7XG4gICAgICAgIGlmICghc3VnZ2VzdGlvbnMuaW5jbHVkZXMoY2FwaXRhbGl6ZWQpKSB7XG4gICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChjYXBpdGFsaXplZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVsOpcmlmaWVyIHNpIHVuZSBhYnLDqXZpYXRpb24gY29ycmVzcG9uZCAtLSB0aGUgYWJicmV2aWF0aW9ucyBiZWxvdyBhcmVcbiAgICAgIC8vIEVuZ2xpc2gtb25seSAoZS5nLiBcIm1vblwiKSwgYnV0IGRheU5hbWUvZmlyc3RWYXJpYW50IGlzIHRyYW5zbGF0ZWRcbiAgICAgIC8vIChlLmcuIEZyZW5jaCBcImx1bmRpXCIpLCBzbyBmb3IgYW55IG5vbi1FbmdsaXNoIGxhbmd1YWdlIHRoZSBmdWxsLW5hbWVcbiAgICAgIC8vIGNoZWNrIGFib3ZlIG5ldmVyIG1hdGNoZXMgd2hpbGUgdGhpcyBhYmJyZXZpYXRpb24gY2hlY2sgc3RpbGwgZG9lcy5cbiAgICAgIC8vIFRoaXMgaXMgd2hhdCBsZXRzIEVuZ2xpc2ggd2Vla2RheSBhYmJyZXZpYXRpb25zIHdvcmsgYXMgYSBzaG9ydGN1dFxuICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGljaCBsYW5ndWFnZSBpcyBhY3RpdmUgKHZlcmlmaWVkOiB0eXBpbmcgXCJtb25cIiB3aXRoXG4gICAgICAvLyBvbmx5IEZyZW5jaCBlbmFibGVkIGNvcnJlY3RseSBzdWdnZXN0cyBcIkx1bmRpXCIpLlxuICAgICAgZm9yIChjb25zdCBhYmJyIG9mIGRheS5hYmJyKSB7XG4gICAgICAgIGlmIChhYmJyLnN0YXJ0c1dpdGgoaW5wdXRMb3dlcikpIHtcbiAgICAgICAgICBjb25zdCBjYXBpdGFsaXplZCA9IGZpcnN0VmFyaWFudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGZpcnN0VmFyaWFudC5zbGljZSgxKTtcbiAgICAgICAgICBpZiAoIXN1Z2dlc3Rpb25zLmluY2x1ZGVzKGNhcGl0YWxpemVkKSkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChjYXBpdGFsaXplZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyBzdWdnZXN0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFN1Z2dlc3Rpb25zKGlucHV0U3RyOiBzdHJpbmcsIGxhbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgdChcInRvZGF5XCIsIGxhbmcpLFxuICAgICAgdChcInllc3RlcmRheVwiLCBsYW5nKSxcbiAgICAgIHQoXCJ0b21vcnJvd1wiLCBsYW5nKSxcbiAgICBdLmZpbHRlcihpdGVtID0+IGZ1enp5TWF0Y2hlc1F1ZXJ5KGl0ZW0sIGlucHV0U3RyKSk7XG4gIH1cblxuICByZW5kZXJTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZywgZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlldyA9IHRoaXMucmVzb2x2ZVByZXZpZXdUZXh0KHN1Z2dlc3Rpb24pO1xuICAgIGlmICghcHJldmlldyB8fCBwcmV2aWV3ID09PSBzdWdnZXN0aW9uKSB7XG4gICAgICBlbC5zZXRUZXh0KHN1Z2dlc3Rpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBPYnNpZGlhbiByZWN5Y2xlcyBzdWdnZXN0aW9uLXJvdyBlbGVtZW50cyBhY3Jvc3MgcmVuZGVycyAodmlydHVhbGl6ZWRcbiAgICAvLyBsaXN0KSwgc28gYSBzdGFsZSBwcmV2aW91cyByZW5kZXIncyBjb250ZW50IG11c3QgYmUgY2xlYXJlZCBiZWZvcmVcbiAgICAvLyBhcHBlbmRpbmcgbmV3IHNwYW5zIC0tIG90aGVyd2lzZSBvbGQgdGV4dC9zcGFucyBzdGFjayB1cCBvbiB0b3Agb2ZcbiAgICAvLyBlYWNoIG90aGVyIG9uIHRoZSByZXVzZWQgZWxlbWVudC5cbiAgICBlbC5lbXB0eSgpO1xuICAgIGVsLmFkZENsYXNzKFwibmxkLXN1Z2dlc3Rpb24taXRlbVwiKTtcbiAgICBlbC5jcmVhdGVTcGFuKHsgY2xzOiBcIm5sZC1zdWdnZXN0aW9uLXRleHRcIiwgdGV4dDogc3VnZ2VzdGlvbiB9KTtcbiAgICBlbC5jcmVhdGVTcGFuKHsgY2xzOiBcIm5sZC1zdWdnZXN0aW9uLXByZXZpZXdcIiwgdGV4dDogcHJldmlldyB9KTtcbiAgfVxuXG4gIC8vIFJlc29sdmVzIGEgc3VnZ2VzdGlvbiB0byB0aGUgcGxhaW4tdGV4dCBkYXRlL3RpbWUgaXQgd291bGQgYWN0dWFsbHlcbiAgLy8gaW5zZXJ0IChubyBbW2xpbmtzXV0sIG5vIGFsaWFzKSAtLSBzaG93biBuZXh0IHRvIHRoZSBzdWdnZXN0aW9uIGluIHRoZVxuICAvLyBkcm9wZG93biBzbyB0aGUgdXNlciBjYW4gc2VlIHRoZSByZXNvbHZlZCB2YWx1ZSBiZWZvcmUgcGlja2luZyBvbmUuXG4gIC8vIERlbGliZXJhdGVseSBtaXJyb3JzIHNlbGVjdFN1Z2dlc3Rpb24oKSdzIG93biBkYXRlL3RpbWUgcmVzb2x1dGlvblxuICAvLyAodGltZS1zdWdnZXN0aW9uIC8gZGF0ZS1yYW5nZSAvIGh5YnJpZC1kYXRlLXRpbWUgYnJhbmNoZXMpIHNvIHRoZVxuICAvLyBwcmV2aWV3IGNhbiBuZXZlciBzaG93IHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSB3aGF0IHNlbGVjdGluZyB0aGVcbiAgLy8gc3VnZ2VzdGlvbiBhY3R1YWxseSBwcm9kdWNlcyAtLSBhbmQsIHVubGlrZSBzZWxlY3RTdWdnZXN0aW9uKCksIG5ldmVyXG4gIC8vIHRvdWNoZXMgdGhlIGVkaXRvciBvciBoaXN0b3J5IGFuZCBjYW4ndCB0aHJvdzogYSBwYXJzaW5nIGZhaWx1cmUgaGVyZVxuICAvLyBqdXN0IG1lYW5zIG5vIHByZXZpZXcgaXMgc2hvd24sIG5vdCBhIGJyb2tlbiBzdWdnZXN0aW9uIGxpc3QuXG4gIHByaXZhdGUgcmVzb2x2ZVByZXZpZXdUZXh0KHN1Z2dlc3Rpb246IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uSXNUaW1lKHN1Z2dlc3Rpb24pKSB7XG4gICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gc3VnZ2VzdGlvbi5zdWJzdHJpbmcodGhpcy5nZXRUaW1lUHJlZml4TGVuZ3RoKHN1Z2dlc3Rpb24pKTtcbiAgICAgICAgY29uc3QgcGFyc2VkVGltZSA9IHRoaXMucGx1Z2luLnBhcnNlVGltZSh0aW1lUGFydCk7XG4gICAgICAgIC8vIHBhcnNlRGF0ZSgpL3BhcnNlVGltZSgpIG5ldmVyIHRocm93IC0tIG9uIHVucGFyc2VhYmxlIGlucHV0IHRoZXlcbiAgICAgICAgLy8gcmV0dXJuIGFuIE5MRFJlc3VsdCB3aXRoIGZvcm1hdHRlZFN0cmluZyBcIkludmFsaWQgZGF0ZVwiIGFuZCBhblxuICAgICAgICAvLyBpbnZhbGlkIG1vbWVudCwgbm90IGFuIGV4Y2VwdGlvbi4gQ2hlY2tpbmcgaXNWYWxpZCgpIGV4cGxpY2l0bHkgaXNcbiAgICAgICAgLy8gd2hhdCBhY3R1YWxseSBjYXRjaGVzIHRoYXQgY2FzZSAodGhlIHRyeS9jYXRjaCBiZWxvdyBpcyBvbmx5IGFcbiAgICAgICAgLy8gc2FmZXR5IG5ldCBmb3IgZ2VudWluZWx5IHVuZXhwZWN0ZWQgZXJyb3JzIGVsc2V3aGVyZSBpbiB0aGlzIG1ldGhvZCkuXG4gICAgICAgIGlmICghcGFyc2VkVGltZS5tb21lbnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZFRpbWUuZm9ybWF0dGVkU3RyaW5nO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRlUmFuZ2UgPSB0aGlzLnBsdWdpbi5wYXJzZURhdGVSYW5nZShzdWdnZXN0aW9uKTtcbiAgICAgIGlmIChkYXRlUmFuZ2UpIHtcbiAgICAgICAgaWYgKGRhdGVSYW5nZS5kYXRlTGlzdCAmJiBkYXRlUmFuZ2UuZGF0ZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiBkYXRlUmFuZ2UuZGF0ZUxpc3QubWFwKG0gPT4gbS5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KSkuam9pbignLCAnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IGRhdGVSYW5nZS5zdGFydE1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZGF0ZVJhbmdlLmVuZE1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgY29uc3QgcHJpbWFyeUxhbmcgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXNbMF0gfHwgJ2VuJztcbiAgICAgICAgY29uc3QgdG9UcmFuc2xhdGlvbiA9IHQoXCJ0b1wiLCBwcmltYXJ5TGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICAgICAgcmV0dXJuIGAke3N0YXJ0Rm9ybWF0dGVkfSAke3RvVHJhbnNsYXRpb259ICR7ZW5kRm9ybWF0dGVkfWA7XG4gICAgICB9XG5cbiAgICAgIGxldCBoYXNUaW1lID0gdGhpcy5wbHVnaW4uaGFzVGltZUNvbXBvbmVudChzdWdnZXN0aW9uKTtcbiAgICAgIGlmICghaGFzVGltZSkge1xuICAgICAgICBjb25zdCBleHBsaWNpdFRpbWVSZWdleCA9IC9cXGQrXFxzKihtaW58bWluc3xtaW51dGV8bWludXRlc3xofGhvdXJ8aG91cnN8aGV1cmV8aGV1cmVzfHNlY3xzZWNvbmR8c2Vjb25kcykoPyFbYS16XSkvaTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb24ubWF0Y2goZXhwbGljaXRUaW1lUmVnZXgpKSB7XG4gICAgICAgICAgaGFzVGltZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VkUmVzdWx0ID0gdGhpcy5wbHVnaW4ucGFyc2VEYXRlKHN1Z2dlc3Rpb24pO1xuICAgICAgaWYgKCFwYXJzZWRSZXN1bHQubW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNUaW1lKSB7XG4gICAgICAgIGNvbnN0IGlzVG9kYXkgPSBwYXJzZWRSZXN1bHQubW9tZW50LmlzU2FtZShtb21lbnQoKSwgJ2RheScpO1xuICAgICAgICBjb25zdCBpc1JlbGF0aXZlU2hvcnRUZXJtID0gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHN1Z2dlc3Rpb24sIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gICAgICAgIGNvbnN0IHNob3VsZE9taXREYXRlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlICYmIGlzVG9kYXkgJiYgaXNSZWxhdGl2ZVNob3J0VGVybTtcbiAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgIGlmIChzaG91bGRPbWl0RGF0ZSkge1xuICAgICAgICAgIHJldHVybiB0aW1lUGFydDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgIHJldHVybiBgJHtkYXRlUGFydH0gJHt0aW1lUGFydH1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlZFJlc3VsdC5mb3JtYXR0ZWRTdHJpbmc7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdEYXRlU3VnZ2VzdDogZmFpbGVkIHRvIHJlc29sdmUgYXV0b3N1Z2dlc3QgcHJldmlldycsIHsgc3VnZ2VzdGlvbiwgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gVXRpbGlzZXIgbCfDqWRpdGV1ciBkdSBjb250ZXh0ZSBzaSBkaXNwb25pYmxlLCBzaW5vbiBjaGVyY2hlciBsJ8OpZGl0ZXVyIGFjdGlmXG4gICAgbGV0IGVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHRoaXMuY29udGV4dD8uZWRpdG9yKSB7XG4gICAgICBlZGl0b3IgPSB0aGlzLmNvbnRleHQuZWRpdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICBlZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3IodGhpcy5hcHAud29ya3NwYWNlKTtcbiAgICB9XG5cbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluY2x1ZGVBbGlhcyA9IGV2ZW50LnNoaWZ0S2V5O1xuICAgIC8vIFdoZW4ga2VlcGluZyB0aGUgdHlwZWQgdGV4dCBhcyBhbGlhcyAoU2hpZnQpLCBwcmVmZXIgd2hhdCB0aGUgdXNlclxuICAgIC8vIGFjdHVhbGx5IHR5cGVkIG92ZXIgdGhlIHN1Z2dlc3Rpb24ncyBjYW5vbmljYWwgZGljdGlvbmFyeSBjYXNpbmdcbiAgICAvLyAoZS5nLiBGcmVuY2ggXCJkZW1haW5cIiB2cyB0aGUgZGljdGlvbmFyeSdzIFwiRGVtYWluXCIpIC0tIGJ1dCBvbmx5IHdoZW5cbiAgICAvLyB0aGV5IHR5cGVkIHRoZSBjb21wbGV0ZSB3b3JkL3BocmFzZSwganVzdCBpbiBhIGRpZmZlcmVudCBjYXNpbmc7IGFcbiAgICAvLyBwYXJ0aWFsIHF1ZXJ5IChcImRlbWFpXCIpIHdvdWxkIG1ha2UgZm9yIGEgYnJva2VuLWxvb2tpbmcgYWxpYXMsIHNvXG4gICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBmdWxsIHN1Z2dlc3Rpb24gdGV4dCBpbiB0aGF0IGNhc2UuIExhbmd1YWdlLWFnbm9zdGljOlxuICAgIC8vIHRoaXMgb25seSBjb21wYXJlcyB0aGUgdHlwZWQgdGV4dCB0byB0aGUgc3VnZ2VzdGlvbiB0ZXh0LlxuICAgIGNvbnN0IHR5cGVkUXVlcnkgPSB0aGlzLmNvbnRleHQ/LnF1ZXJ5O1xuICAgIGNvbnN0IGFsaWFzVGV4dCA9ICh0eXBlZFF1ZXJ5ICYmIHR5cGVkUXVlcnkudG9Mb3dlckNhc2UoKSA9PT0gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpKVxuICAgICAgPyB0eXBlZFF1ZXJ5XG4gICAgICA6IHN1Z2dlc3Rpb247XG4gICAgbGV0IGRhdGVTdHIgPSBcIlwiO1xuICAgIGxldCBtYWtlSW50b0xpbmsgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvc3VnZ2VzdFRvZ2dsZUxpbms7XG5cbiAgICAvLyBXZSBjaGVjayBpZiB0aGUgaW5wdXQgY29udGFpbnMgYSB0aW1lIGNvbXBvbmVudCB1c2luZyB0aGUgcGFyc2VyIGxvZ2ljLlxuICAgIGxldCBoYXNUaW1lID0gdGhpcy5wbHVnaW4uaGFzVGltZUNvbXBvbmVudChzdWdnZXN0aW9uKTtcblxuICAgIC8vIC0tLSBDT1JSRUNUSU9OIE1VTFRJTEFOR1VFIC0tLVxuICAgIC8vIFNpIGxlIHBhcnNlciBuJ2EgcGFzIGTDqXRlY3TDqSBsJ2hldXJlIChzb3V2ZW50IGxlIGNhcyBlbiBhbmdsYWlzIHBvdXIgXCJpbiAyIG1pbnV0ZXNcIiksXG4gICAgLy8gb24gZm9yY2UgbGEgZMOpdGVjdGlvbiBzaSBvbiB2b2l0IGRlcyBtb3RzIGNsw6lzIGV4cGxpY2l0ZXMgKG1pbiwgaG91ciwgZXRjKS5cbiAgICAvLyBJTVBPUlRBTlQ6IE5lIHBhcyBtYXRjaGVyIFwibVwiIGRhbnMgXCJtb250aFwiIC0gdsOpcmlmaWVyIHF1ZSBjJ2VzdCBiaWVuIHVuIG1vdCBkZSB0ZW1wc1xuICAgIGlmICghaGFzVGltZSkge1xuICAgICAgLy8gUmVnZXggcG91ciBkw6l0ZWN0ZXIgdW4gY2hpZmZyZSBzdWl2aSBkZSBtaW4vaG91ci9oZXVyZS9oIChtYWlzIHBhcyBcIm1cIiBzZXVsIHF1aSBwb3VycmFpdCDDqnRyZSBcIm1vbnRoXCIpXG4gICAgICAvLyBPbiB2w6lyaWZpZSBxdWUgXCJtXCIgZXN0IHN1aXZpIGRlIFwiaW5cIiwgXCJpbnNcIiwgb3UgZXN0IGVuIGZpbiBkZSBtb3QsIGV0IHBhcyBcIm9udGhcIiAobW9udGgpXG4gICAgICBjb25zdCBleHBsaWNpdFRpbWVSZWdleCA9IC9cXGQrXFxzKihtaW58bWluc3xtaW51dGV8bWludXRlc3xofGhvdXJ8aG91cnN8aGV1cmV8aGV1cmVzfHNlY3xzZWNvbmR8c2Vjb25kcykoPyFbYS16XSkvaTtcbiAgICAgIGlmIChzdWdnZXN0aW9uLm1hdGNoKGV4cGxpY2l0VGltZVJlZ2V4KSkge1xuICAgICAgICBoYXNUaW1lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25Jc1RpbWUoc3VnZ2VzdGlvbikpIHtcbiAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gc3VnZ2VzdGlvbi5zdWJzdHJpbmcodGhpcy5nZXRUaW1lUHJlZml4TGVuZ3RoKHN1Z2dlc3Rpb24pKTtcbiAgICAgIGRhdGVTdHIgPSB0aGlzLnBsdWdpbi5wYXJzZVRpbWUodGltZVBhcnQpLmZvcm1hdHRlZFN0cmluZztcbiAgICAgIG1ha2VJbnRvTGluayA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWw6lyaWZpZXIgZCdhYm9yZCBzaSBjJ2VzdCB1bmUgcGxhZ2UgZGUgZGF0ZXNcbiAgICAgIGNvbnN0IGRhdGVSYW5nZSA9IHRoaXMucGx1Z2luLnBhcnNlRGF0ZVJhbmdlKHN1Z2dlc3Rpb24pO1xuICAgICAgXG4gICAgICBpZiAoZGF0ZVJhbmdlKSB7XG4gICAgICAgIC8vIEMnZXN0IHVuZSBwbGFnZSBkZSBkYXRlc1xuICAgICAgICAvLyBTaSBvbiBhIHVuZSBsaXN0ZSBkZSBkYXRlcywgZ8OpbsOpcmVyIHVuZSBsaXN0ZSBkZSBsaWVucyBhdSBsaWV1IGQndW5lIHBsYWdlXG4gICAgICAgIGlmIChkYXRlUmFuZ2UuZGF0ZUxpc3QgJiYgZGF0ZVJhbmdlLmRhdGVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBkYXRlTGlua3MgPSBkYXRlUmFuZ2UuZGF0ZUxpc3QubWFwKG0gPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gbS5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgICAgIHJldHVybiBtYWtlSW50b0xpbmsgXG4gICAgICAgICAgICAgID8gZ2VuZXJhdGVNYXJrZG93bkxpbmsodGhpcy5hcHAsIGZvcm1hdHRlZClcbiAgICAgICAgICAgICAgOiBmb3JtYXR0ZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGF0ZVN0ciA9IGRhdGVMaW5rcy5qb2luKCcsICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIHZlcnMgbCdhbmNpZW4gY29tcG9ydGVtZW50IChwbGFnZSlcbiAgICAgICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IGRhdGVSYW5nZS5zdGFydE1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgICBjb25zdCBlbmRGb3JtYXR0ZWQgPSBkYXRlUmFuZ2UuZW5kTW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIE9idGVuaXIgbGEgdHJhZHVjdGlvbiBkZSBcInRvXCIgc2Vsb24gbGEgbGFuZ3VlIHByaW5jaXBhbGVcbiAgICAgICAgICBjb25zdCBwcmltYXJ5TGFuZyA9IHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlc1swXSB8fCAnZW4nO1xuICAgICAgICAgIGNvbnN0IHRvVHJhbnNsYXRpb24gPSB0KFwidG9cIiwgcHJpbWFyeUxhbmcpLnNwbGl0KCd8JylbMF07IC8vIFByZW5kcmUgbGEgcHJlbWnDqHJlIHZhcmlhbnRlXG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKG1ha2VJbnRvTGluaykge1xuICAgICAgICAgICAgZGF0ZVN0ciA9IGdlbmVyYXRlTWFya2Rvd25MaW5rKFxuICAgICAgICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgICAgICAgc3RhcnRGb3JtYXR0ZWQsXG4gICAgICAgICAgICAgIGluY2x1ZGVBbGlhcyA/IGFsaWFzVGV4dCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgKSArIGAgJHt0b1RyYW5zbGF0aW9ufSBgICsgZ2VuZXJhdGVNYXJrZG93bkxpbmsoXG4gICAgICAgICAgICAgIHRoaXMuYXBwLFxuICAgICAgICAgICAgICBlbmRGb3JtYXR0ZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGVTdHIgPSBgJHtzdGFydEZvcm1hdHRlZH0gJHt0b1RyYW5zbGF0aW9ufSAke2VuZEZvcm1hdHRlZH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtYWtlSW50b0xpbmsgPSBmYWxzZTsgLy8gRMOpasOgIGfDqXLDqSBjaS1kZXNzdXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFJlc3VsdCA9IHRoaXMucGx1Z2luLnBhcnNlRGF0ZShzdWdnZXN0aW9uKTtcblxuICAgICAgICAvLyAtLS0gT1BUSU1JU0FUSU9OIDogT21ldHRyZSBsYSBkYXRlIHBvdXIgZXhwcmVzc2lvbnMgcmVsYXRpdmVzIGNvdXJ0ZXMgYXVqb3VyZCdodWkgLS0tXG4gICAgICAgIGNvbnN0IGlzVG9kYXkgPSBwYXJzZWRSZXN1bHQubW9tZW50LmlzU2FtZShtb21lbnQoKSwgJ2RheScpO1xuICAgICAgICBjb25zdCBpc1JlbGF0aXZlU2hvcnRUZXJtID0gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHN1Z2dlc3Rpb24sIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gICAgICAgIGNvbnN0IHNob3VsZE9taXREYXRlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlICYmIGlzVG9kYXkgJiYgaXNSZWxhdGl2ZVNob3J0VGVybSAmJiBoYXNUaW1lO1xuXG4gICAgICAgIC8vIC0tLSBIWUJSSUQgTElOSyBMT0dJQyBTVEFSVCAtLS1cbiAgICAgICAgLy8gSWYgYSB0aW1lIGlzIGRldGVjdGVkIEFORCBsaW5raW5nIGlzIGVuYWJsZWQsIHdlIHNwbGl0IHRoZSBsaW5rLlxuICAgICAgICAvLyBFeHBlY3RlZCByZXN1bHQ6IFtbWVlZWS1NTS1ERF1dIEhIOm1tXG4gICAgICAgIGlmIChoYXNUaW1lICYmIG1ha2VJbnRvTGluaykge1xuICAgICAgICAgIGlmIChzaG91bGRPbWl0RGF0ZSkge1xuICAgICAgICAgICAgLy8gQ0FTIE9QVElNSVPDiSA6IEp1c3RlIGwnaGV1cmUgcG91ciBcImRhbnMgWCBtaW4vaGV1cmVzXCIgYXVqb3VyZCdodWlcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gcGFyc2VkUmVzdWx0Lm1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdCB8fCBcIkhIOm1tXCIpO1xuICAgICAgICAgICAgZGF0ZVN0ciA9IHRpbWVQYXJ0O1xuICAgICAgICAgICAgbWFrZUludG9MaW5rID0gZmFsc2U7IC8vIFBhcyBkZSBsaWVuIG7DqWNlc3NhaXJlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIDEuIEZvcm1hdCB0aGUgZGF0ZSBwYXJ0XG4gICAgICAgICAgICBjb25zdCBkYXRlUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIDIuIEZvcm1hdCB0aGUgdGltZSBwYXJ0IChmYWxsYmFjayB0byBISDptbSBpZiBub3Qgc2V0KVxuICAgICAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG5cbiAgICAgICAgICAgIC8vIDMuIEdlbmVyYXRlIHRoZSBtYXJrZG93biBsaW5rIE9OTFkgZm9yIHRoZSBkYXRlIHBhcnRcbiAgICAgICAgICAgIGRhdGVTdHIgPSBnZW5lcmF0ZU1hcmtkb3duTGluayhcbiAgICAgICAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgICAgICAgIGRhdGVQYXJ0LFxuICAgICAgICAgICAgICBpbmNsdWRlQWxpYXMgPyBhbGlhc1RleHQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICkgKyBcIiBcIiArIHRpbWVQYXJ0OyAvLyBBcHBlbmQgdGltZSBhcyBwbGFpbiB0ZXh0XG5cbiAgICAgICAgICAgIC8vIDQuIERpc2FibGUgc3RhbmRhcmQgbGlua2luZyBzaW5jZSB3ZSBjb25zdHJ1Y3RlZCBpdCBtYW51YWxseSBhYm92ZVxuICAgICAgICAgICAgbWFrZUludG9MaW5rID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGhhc1RpbWUgJiYgIW1ha2VJbnRvTGluaykge1xuICAgICAgICAgIC8vIE3Dqm1lIGxvZ2lxdWUgc2kgcGFzIGRlIGxpZW4gbWFpcyBhdmVjIGhldXJlXG4gICAgICAgICAgaWYgKHNob3VsZE9taXREYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQgfHwgXCJISDptbVwiKTtcbiAgICAgICAgICAgIGRhdGVTdHIgPSB0aW1lUGFydDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGF0ZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBkYXRlU3RyID0gYCR7ZGF0ZVBhcnR9ICR7dGltZVBhcnR9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3RhbmRhcmQgYmVoYXZpb3IgZm9yIGRhdGVzIHdpdGhvdXQgdGltZSAoZS5nLiwgQHRvbW9ycm93KVxuICAgICAgICAgIGRhdGVTdHIgPSBwYXJzZWRSZXN1bHQuZm9ybWF0dGVkU3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIC8vIC0tLSBIWUJSSUQgTElOSyBMT0dJQyBFTkQgLS0tXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1ha2VJbnRvTGluaykge1xuICAgICAgZGF0ZVN0ciA9IGdlbmVyYXRlTWFya2Rvd25MaW5rKFxuICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgZGF0ZVN0cixcbiAgICAgICAgaW5jbHVkZUFsaWFzID8gYWxpYXNUZXh0IDogdW5kZWZpbmVkXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb250ZXh0KSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0RhdGVTdWdnZXN0OiBjb250ZXh0IGlzIHVuZGVmaW5lZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBlZGl0b3IucmVwbGFjZVJhbmdlKGRhdGVTdHIsIHRoaXMuY29udGV4dC5zdGFydCwgdGhpcy5jb250ZXh0LmVuZCk7XG5cbiAgICAvLyBFbnJlZ2lzdHJlciBsYSBzw6lsZWN0aW9uIGRhbnMgbCdoaXN0b3JpcXVlIChkZSBtYW5pw6hyZSBhc3luY2hyb25lKVxuICAgIGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVTbWFydFN1Z2dlc3Rpb25zICYmIFxuICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVIaXN0b3J5U3VnZ2VzdGlvbnMgJiYgXG4gICAgICAgIHRoaXMucGx1Z2luLmhpc3RvcnlNYW5hZ2VyKSB7XG4gICAgICB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlci5yZWNvcmRTZWxlY3Rpb24oc3VnZ2VzdGlvbikuY2F0Y2goX2VyciA9PiB7XG4gICAgICAgIC8vIElnbm9yZXIgbGVzIGVycmV1cnMgc2lsZW5jaWV1c2VtZW50XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblRyaWdnZXIoXG4gICAgY3Vyc29yOiBFZGl0b3JQb3NpdGlvbixcbiAgICBlZGl0b3I6IEVkaXRvcixcbiAgICBfZmlsZTogVEZpbGVcbiAgKTogRWRpdG9yU3VnZ2VzdFRyaWdnZXJJbmZvIHtcbiAgICBpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLmlzQXV0b3N1Z2dlc3RFbmFibGVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlnZ2VyUGhyYXNlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZTtcbiAgICBjb25zdCBzdGFydFBvcyA9IHRoaXMuY29udGV4dD8uc3RhcnQgfHwge1xuICAgICAgbGluZTogY3Vyc29yLmxpbmUsXG4gICAgICBjaDogY3Vyc29yLmNoIC0gdHJpZ2dlclBocmFzZS5sZW5ndGgsXG4gICAgfTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gZWRpdG9yLmdldFJhbmdlKHN0YXJ0UG9zLCBjdXJzb3IpO1xuXG4gICAgaWYgKCFxdWVyeS5zdGFydHNXaXRoKHRyaWdnZXJQaHJhc2UpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVjZWRpbmdDaGFyID0gZWRpdG9yLmdldFJhbmdlKFxuICAgICAge1xuICAgICAgICBsaW5lOiBzdGFydFBvcy5saW5lLFxuICAgICAgICBjaDogc3RhcnRQb3MuY2ggLSAxLFxuICAgICAgfSxcbiAgICAgIHN0YXJ0UG9zXG4gICAgKTtcblxuICAgIC8vIFNob3J0LWNpcmN1aXQgaWYgYEBgIGFzIGEgcGFydCBvZiBhIHdvcmQgKGUuZy4gcGFydCBvZiBhbiBlbWFpbCBhZGRyZXNzKVxuICAgIGlmIChwcmVjZWRpbmdDaGFyICYmIC9bYGEtekEtWjAtOV0vLnRlc3QocHJlY2VkaW5nQ2hhcikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogc3RhcnRQb3MsXG4gICAgICBlbmQ6IGN1cnNvcixcbiAgICAgIHF1ZXJ5OiBlZGl0b3IuZ2V0UmFuZ2Uoc3RhcnRQb3MsIGN1cnNvcikuc3Vic3RyaW5nKHRyaWdnZXJQaHJhc2UubGVuZ3RoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1Z2dlc3Rpb25Jc1RpbWUoc3VnZ2VzdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcy5zb21lKGxhbmcgPT4ge1xuICAgICAgY29uc3QgdGltZVdvcmQgPSB0KFwidGltZVwiLCBsYW5nKS5zcGxpdCgnfCcpWzBdO1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb24uc3RhcnRzV2l0aChgJHt0aW1lV29yZH06YCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBMZW5ndGggb2YgdGhlIFwiPFRpbWVXb3JkPjpcIiBwcmVmaXggdGhhdCBnZXRUaW1lU3VnZ2VzdGlvbnMoKSBidWlsZHMgaXRzXG4gIC8vIHN1Z2dlc3Rpb25zIHdpdGgsIHNvIGNhbGxlcnMgY2FuIHN0cmlwIGV4YWN0bHkgdGhhdCBtYW55IGNoYXJhY3RlcnNcbiAgLy8gaW5zdGVhZCBvZiBhIGhhcmRjb2RlZCBsZW5ndGggLS0gXCJUaW1lOlwiIGlzIDUgY2hhcnMgb25seSBpbiBFbmdsaXNoIGFuZFxuICAvLyBhIGZldyBvdGhlcnMgYnkgY29pbmNpZGVuY2UgKGUuZy4gRnJlbmNoIFwiaGV1cmU6XCIgaXMgNiwgSXRhbGlhbiBcIm9yYTpcIlxuICAvLyBpcyA0LCBDaGluZXNlIFwi5pmC6ZaTOlwiIGlzIDMgVVRGLTE2IGNvZGUgdW5pdHMpLlxuICBwcm90ZWN0ZWQgZ2V0VGltZVByZWZpeExlbmd0aChzdWdnZXN0aW9uOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXMpIHtcbiAgICAgIGNvbnN0IHRpbWVXb3JkID0gdChcInRpbWVcIiwgbGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICAgIGNvbnN0IHByZWZpeCA9IGAke3RpbWVXb3JkfTpgO1xuICAgICAgaWYgKHN1Z2dlc3Rpb24uc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgIHJldHVybiBwcmVmaXgubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHByb3RlY3RlZCB1bmlxdWUoc3VnZ2VzdGlvbnM6IHN0cmluZ1tdKSA6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gc3VnZ2VzdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0sIHBvcykge1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmluZGV4T2YoaXRlbSkgPT0gcG9zO1xuICAgIH0pXG4gIH1cbn0iLCJpbXBvcnQgeyBhZGp1c3RDdXJzb3IsIGdldFNlbGVjdGVkVGV4dCwgc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlLCBnZXRBY3RpdmVFZGl0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuL21haW5cIjtcbmltcG9ydCB0IGZyb20gXCIuL2xhbmcvaGVscGVyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuL3dpbmRvdy1tb21lbnRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnNlQ29tbWFuZChwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzLCBtb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgeyB3b3Jrc3BhY2UgfSA9IHBsdWdpbi5hcHA7XG4gIGNvbnN0IGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcih3b3Jrc3BhY2UpO1xuXG4gIC8vIEwnw6lkaXRldXIgcG91cnJhaXQgbmUgcGFzIMOqdHJlIGRpc3BvbmlibGUgKHBhciBleGVtcGxlIGRhbnMgdW5lIHZ1ZSBub24tbWFya2Rvd24pXG4gIGlmICghZWRpdG9yKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNlbGVjdGVkVGV4dCA9IGdldFNlbGVjdGVkVGV4dChlZGl0b3IpO1xuICAvLyBDYXB0dXJlZCBhZnRlciBnZXRTZWxlY3RlZFRleHQoKTogd2hlbiBub3RoaW5nIHdhcyBzZWxlY3RlZCwgdGhhdCBjYWxsXG4gIC8vIGV4cGFuZHMgdGhlIHNlbGVjdGlvbiB0byB0aGUgd29yZCBhdCB0aGUgY3Vyc29yLCB3aGljaCBtb3ZlcyB3aGVyZSB0aGVcbiAgLy8gc2VsZWN0aW9uIGFjdHVhbGx5IGVuZHMuIENhcHR1cmluZyB0aGUgY3Vyc29yIGJlZm9yZWhhbmQgd291bGQgYW5jaG9yXG4gIC8vIGFkanVzdEN1cnNvcigpJ3Mgb2Zmc2V0IG1hdGggdG8gdGhlIHByZS1leHBhbnNpb24gcG9zaXRpb24gaW5zdGVhZCBvZlxuICAvLyB0aGUgZWRnZSBvZiB0aGUgdGV4dCB0aGF0J3MgYWJvdXQgdG8gYmUgcmVwbGFjZWQuXG4gIGNvbnN0IGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3IoXCJ0b1wiKTtcblxuICAvLyBWw6lyaWZpZXIgZCdhYm9yZCBzaSBjJ2VzdCB1bmUgcGxhZ2UgZGUgZGF0ZXNcbiAgY29uc3QgZGF0ZVJhbmdlID0gcGx1Z2luLnBhcnNlRGF0ZVJhbmdlKHNlbGVjdGVkVGV4dCk7XG4gIGlmIChkYXRlUmFuZ2UpIHtcbiAgICAvLyBDJ2VzdCB1bmUgcGxhZ2UgZGUgZGF0ZXNcbiAgICBsZXQgbmV3U3RyID0gXCJcIjtcbiAgICBcbiAgICAvLyBTaSBvbiBhIHVuZSBsaXN0ZSBkZSBkYXRlcywgZ8OpbsOpcmVyIHVuZSBsaXN0ZSBkZSBsaWVucyBhdSBsaWV1IGQndW5lIHBsYWdlXG4gICAgaWYgKGRhdGVSYW5nZS5kYXRlTGlzdCAmJiBkYXRlUmFuZ2UuZGF0ZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGF0ZUxpbmtzID0gZGF0ZVJhbmdlLmRhdGVMaXN0Lm1hcChtID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gbS5mb3JtYXQocGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgIGlmIChtb2RlID09IFwicmVwbGFjZVwiKSB7XG4gICAgICAgICAgcmV0dXJuIGBbWyR7Zm9ybWF0dGVkfV1dYDtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IFwibGlua1wiKSB7XG4gICAgICAgICAgcmV0dXJuIGBbJHtmb3JtYXR0ZWR9XSgke2Zvcm1hdHRlZH0pYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBcImNsZWFuXCIgYW5kIFwidGltZVwiIGJvdGggcmVzb2x2ZSB0byB0aGUgcGxhaW4gZm9ybWF0dGVkIGRhdGUgaGVyZTpcbiAgICAgICAgICAvLyBlYWNoIGRhdGVMaXN0IGVudHJ5IGlzIGEgd2hvbGUgY2FsZW5kYXIgZGF5IHdpdGggbm8gcGFyc2VkIHRpbWVcbiAgICAgICAgICAvLyBjb21wb25lbnQsIHNvIFwidGltZVwiIGZvciBhIHJhbmdlIG1lYW5zIHRoZSBzYW1lIGFzIFwiY2xlYW5cIiAoc2VlXG4gICAgICAgICAgLy8gdGhlIGlkZW50aWNhbCBtb2RlID09IFwidGltZVwiIGNhc2UgaW4gdGhlIG5vbi1saXN0IGJyYW5jaCBiZWxvdykuXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBuZXdTdHIgPSBkYXRlTGlua3Muam9pbignLCAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgdmVycyBsJ2FuY2llbiBjb21wb3J0ZW1lbnQgKHBsYWdlKVxuICAgICAgY29uc3Qgc3RhcnRGb3JtYXR0ZWQgPSBkYXRlUmFuZ2Uuc3RhcnRNb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZGF0ZVJhbmdlLmVuZE1vbWVudC5mb3JtYXQocGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICBcbiAgICAgIC8vIE9idGVuaXIgbGEgdHJhZHVjdGlvbiBkZSBcInRvXCIgc2Vsb24gbGEgbGFuZ3VlIHByaW5jaXBhbGVcbiAgICAgIGNvbnN0IHByaW1hcnlMYW5nID0gcGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlc1swXSB8fCAnZW4nO1xuICAgICAgY29uc3QgdG9UcmFuc2xhdGlvbiA9IHQoXCJ0b1wiLCBwcmltYXJ5TGFuZykuc3BsaXQoJ3wnKVswXTsgLy8gUHJlbmRyZSBsYSBwcmVtacOocmUgdmFyaWFudGVcbiAgICAgIFxuICAgICAgaWYgKG1vZGUgPT0gXCJyZXBsYWNlXCIpIHtcbiAgICAgICAgLy8gR8OpbsOpcmVyIGRlcyBsaWVucyBwb3VyIGxhIHBsYWdlIDogW1tzdGFydF1dIHRvIFtbZW5kXV1cbiAgICAgICAgbmV3U3RyID0gYFtbJHtzdGFydEZvcm1hdHRlZH1dXSAke3RvVHJhbnNsYXRpb259IFtbJHtlbmRGb3JtYXR0ZWR9XV1gO1xuICAgICAgfSBlbHNlIGlmIChtb2RlID09IFwibGlua1wiKSB7XG4gICAgICAgIC8vIExpZW4gTWFya2Rvd24gc3RhbmRhcmRcbiAgICAgICAgbmV3U3RyID0gYFske3NlbGVjdGVkVGV4dH1dKCR7ZGF0ZVJhbmdlLmZvcm1hdHRlZFN0cmluZ30pYDtcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBcImNsZWFuXCIpIHtcbiAgICAgICAgLy8gVGV4dGUgYnJ1dCBzYW5zIGxpZW5cbiAgICAgICAgbmV3U3RyID0gYCR7c3RhcnRGb3JtYXR0ZWR9ICR7dG9UcmFuc2xhdGlvbn0gJHtlbmRGb3JtYXR0ZWR9YDtcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBcInRpbWVcIikge1xuICAgICAgICAvLyBQYXMgZCdoZXVyZSBwb3VyIGxlcyBwbGFnZXNcbiAgICAgICAgbmV3U3RyID0gYCR7c3RhcnRGb3JtYXR0ZWR9ICR7dG9UcmFuc2xhdGlvbn0gJHtlbmRGb3JtYXR0ZWR9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24obmV3U3RyKTtcbiAgICBhZGp1c3RDdXJzb3IoZWRpdG9yLCBjdXJzb3IsIG5ld1N0ciwgc2VsZWN0ZWRUZXh0KTtcbiAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTaW5vbiwgdHJhaXRlciBjb21tZSB1bmUgZGF0ZSBub3JtYWxlXG4gIGNvbnN0IGRhdGUgPSBwbHVnaW4ucGFyc2VEYXRlKHNlbGVjdGVkVGV4dCk7XG5cbiAgaWYgKCFkYXRlLm1vbWVudC5pc1ZhbGlkKCkpIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gICAgZWRpdG9yLnNldEN1cnNvcih7XG4gICAgICBsaW5lOiBjdXJzb3IubGluZSxcbiAgICAgIGNoOiBjdXJzb3IuY2gsXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gLS0tIE1PRElGSUNBVElPTiBJTlRFTExJR0VOVEUgVjAuOSAtLS1cbiAgLy8gT24gdsOpcmlmaWUgc2kgdW5lIGhldXJlIGVzdCBwcsOpc2VudGUgZGFucyBsZSB0ZXh0ZSBzw6lsZWN0aW9ubsOpXG4gIGNvbnN0IGhhc1RpbWUgPSBwbHVnaW4uaGFzVGltZUNvbXBvbmVudChzZWxlY3RlZFRleHQpO1xuXG4gIC8vIC0tLSBPUFRJTUlTQVRJT04gOiBPbWV0dHJlIGxhIGRhdGUgcG91ciBleHByZXNzaW9ucyByZWxhdGl2ZXMgY291cnRlcyBhdWpvdXJkJ2h1aSAtLS1cbiAgY29uc3QgaXNUb2RheSA9IGRhdGUubW9tZW50LmlzU2FtZShtb21lbnQoKSwgJ2RheScpO1xuICBjb25zdCBpc1JlbGF0aXZlU2hvcnRUZXJtID0gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHNlbGVjdGVkVGV4dCwgcGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gIGNvbnN0IHNob3VsZE9taXREYXRlID0gcGx1Z2luLnNldHRpbmdzLm9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZSAmJiBpc1RvZGF5ICYmIGlzUmVsYXRpdmVTaG9ydFRlcm0gJiYgaGFzVGltZTtcblxuICBsZXQgbmV3U3RyID0gXCJcIjtcblxuICBpZiAobW9kZSA9PSBcInJlcGxhY2VcIikge1xuICAgIC8vIEMnZXN0IGxlIG1vZGUgcGFyIGTDqWZhdXQgKENyZWF0ZSBMaW5rKVxuICAgIGlmIChoYXNUaW1lKSB7XG4gICAgICAgIGlmIChzaG91bGRPbWl0RGF0ZSkge1xuICAgICAgICAgICAgLy8gQ0FTIE9QVElNSVPDiSA6IEp1c3RlIGwnaGV1cmUgcG91ciBcImRhbnMgWCBtaW4vaGV1cmVzXCIgYXVqb3VyZCdodWlcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gZGF0ZS5tb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBuZXdTdHIgPSB0aW1lUGFydDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENBUyBIWUJSSURFIDogW1tEYXRlXV0gSGV1cmVcbiAgICAgICAgICAgIGNvbnN0IGRhdGVQYXJ0ID0gZGF0ZS5tb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgICAgLy8gU2kgbCd1dGlsaXNhdGV1ciBuJ2EgcGFzIG1pcyBkZSBmb3JtYXQgZCdoZXVyZSwgb24gZm9yY2UgSEg6bW0gcGFyIHPDqWN1cml0w6lcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gZGF0ZS5tb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG5ld1N0ciA9IGBbWyR7ZGF0ZVBhcnR9XV0gJHt0aW1lUGFydH1gO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ0FTIENMQVNTSVFVRSA6IFtbRGF0ZV1dXG4gICAgICAgIG5ld1N0ciA9IGBbWyR7ZGF0ZS5mb3JtYXR0ZWRTdHJpbmd9XV1gO1xuICAgIH1cbiAgfSBlbHNlIGlmIChtb2RlID09IFwibGlua1wiKSB7XG4gICAgLy8gTGllbiBNYXJrZG93biBzdGFuZGFyZCBbdGV4dGVdKGRhdGUpXG4gICAgbmV3U3RyID0gYFske3NlbGVjdGVkVGV4dH1dKCR7ZGF0ZS5mb3JtYXR0ZWRTdHJpbmd9KWA7XG4gIH0gZWxzZSBpZiAobW9kZSA9PSBcImNsZWFuXCIpIHtcbiAgICAvLyBUZXh0ZSBicnV0IHNhbnMgbGllblxuICAgIG5ld1N0ciA9IGAke2RhdGUuZm9ybWF0dGVkU3RyaW5nfWA7XG4gIH0gZWxzZSBpZiAobW9kZSA9PSBcInRpbWVcIikge1xuICAgIC8vIEp1c3RlIGwnaGV1cmVcbiAgICBjb25zdCB0aW1lID0gcGx1Z2luLnBhcnNlVGltZShzZWxlY3RlZFRleHQpO1xuICAgIG5ld1N0ciA9IGAke3RpbWUuZm9ybWF0dGVkU3RyaW5nfWA7XG4gIH1cblxuICBlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihuZXdTdHIpO1xuICBhZGp1c3RDdXJzb3IoZWRpdG9yLCBjdXJzb3IsIG5ld1N0ciwgc2VsZWN0ZWRUZXh0KTtcbiAgZWRpdG9yLmZvY3VzKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRNb21lbnRDb21tYW5kKFxuICBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzLFxuICBkYXRlOiBEYXRlLFxuICBmb3JtYXQ6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IHsgd29ya3NwYWNlIH0gPSBwbHVnaW4uYXBwO1xuICBjb25zdCBlZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3Iod29ya3NwYWNlKTtcblxuICBpZiAoZWRpdG9yKSB7XG4gICAgZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24obW9tZW50KGRhdGUpLmZvcm1hdChmb3JtYXQpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm93Q29tbWFuZChwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzKTogdm9pZCB7XG4gIGNvbnN0IGZvcm1hdCA9IGAke3BsdWdpbi5zZXR0aW5ncy5mb3JtYXR9JHtwbHVnaW4uc2V0dGluZ3Muc2VwYXJhdG9yfSR7cGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXR9YDtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGluc2VydE1vbWVudENvbW1hbmQocGx1Z2luLCBkYXRlLCBmb3JtYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudERhdGVDb21tYW5kKHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpOiB2b2lkIHtcbiAgY29uc3QgZm9ybWF0ID0gcGx1Z2luLnNldHRpbmdzLmZvcm1hdDtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGluc2VydE1vbWVudENvbW1hbmQocGx1Z2luLCBkYXRlLCBmb3JtYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFRpbWVDb21tYW5kKHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpOiB2b2lkIHtcbiAgY29uc3QgZm9ybWF0ID0gcGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQ7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBpbnNlcnRNb21lbnRDb21tYW5kKHBsdWdpbiwgZGF0ZSwgZm9ybWF0KTtcbn0iLCJpbXBvcnQgeyBQbHVnaW4sIG5vcm1hbGl6ZVBhdGggfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlFbnRyeSB7XG4gIGNvdW50OiBudW1iZXI7IC8vIE5vbWJyZSBkZSBmb2lzIHF1ZSBjZXR0ZSBzdWdnZXN0aW9uIGEgw6l0w6kgc8OpbGVjdGlvbm7DqWVcbiAgbGFzdFVzZWQ6IG51bWJlcjsgLy8gRGF0ZS5ub3coKSBkZSBsYSBkZXJuacOocmUgc8OpbGVjdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvbkhpc3Rvcnkge1xuICBbc3VnZ2VzdGlvbjogc3RyaW5nXTogSGlzdG9yeUVudHJ5O1xufVxuXG5jb25zdCBNQVhfSElTVE9SWV9TSVpFID0gMTAwOyAvLyBMaW1pdGUgZHUgbm9tYnJlIGQnZW50csOpZXMgZGFucyBsJ2hpc3RvcmlxdWVcbmNvbnN0IEhJU1RPUllfRklMRSA9IFwicGx1Z2lucy9ubGRhdGVzLXJldml2ZWQvaGlzdG9yeS5qc29uXCI7XG5jb25zdCBDTEVBTlVQX0lOVEVSVkFMID0gMzAwMDAwOyAvLyBOZXR0b3lhZ2UgcMOpcmlvZGlxdWUgdG91dGVzIGxlcyA1IG1pbnV0ZXNcblxuLy8gQSBzdWdnZXN0aW9uJ3MgcmFuayBpcyBmcmVxdWVuY3kgd2VpZ2h0ZWQgYnkgcmVjZW5jeSwgbm90IHJhdyBsaWZldGltZVxuLy8gY291bnQ6IHdpdGhvdXQgZGVjYXksIHNvbWV0aGluZyBzZWxlY3RlZCA1MCB0aW1lcyBzaXggbW9udGhzIGFnbyB3b3VsZFxuLy8gcGVybWFuZW50bHkgb3V0cmFuayBzb21ldGhpbmcgc2VsZWN0ZWQgMyB0aW1lcyB0aGlzIHdlZWssIGV2ZW4gdGhvdWdoXG4vLyB0aGUgbGF0dGVyIGlzIGNsZWFybHkgbW9yZSByZWxldmFudCAqbm93Ki4gSGFsdmluZyB0aGUgd2VpZ2h0IGV2ZXJ5XG4vLyBIQUxGX0xJRkVfTVMgb2YgaW5hY3Rpdml0eSBtZWFucyBldmVyeSByZXVzZSBcInJlZnJlc2hlc1wiIGFuIGVudHJ5LCB3aGlsZVxuLy8gZ2VudWluZWx5IHN0YWxlIGVudHJpZXMgZmFkZSBvdXQgaW5zdGVhZCBvZiBjYW1waW5nIHRoZSB0b3Agb2YgdGhlIGxpc3Rcbi8vIGZvcmV2ZXIuXG5jb25zdCBIQUxGX0xJRkVfTVMgPSAzMCAqIDI0ICogNjAgKiA2MCAqIDEwMDA7IC8vIDMwIGpvdXJzXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpc3RvcnlNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBwbHVnaW46IFBsdWdpbjtcbiAgcHJpdmF0ZSBoaXN0b3J5OiBTZWxlY3Rpb25IaXN0b3J5ID0ge307XG4gIHByaXZhdGUgaGlzdG9yeUxvYWRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGNhY2hlZFRvcFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGNhY2hlVmFsaWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjbGVhbnVwSW50ZXJ2YWw6IG51bWJlciB8IG51bGwgPSBudWxsOyAvLyBJRCBkZSBsJ2ludGVydmFsbGUgZGUgbmV0dG95YWdlXG5cbiAgY29uc3RydWN0b3IocGx1Z2luOiBQbHVnaW4pIHtcbiAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICB0aGlzLnN0YXJ0UGVyaW9kaWNDbGVhbnVwKCk7XG4gIH1cblxuICAvKipcbiAgICogRMOpbWFycmUgbGUgbmV0dG95YWdlIHDDqXJpb2RpcXVlIGRlIGwnaGlzdG9yaXF1ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydFBlcmlvZGljQ2xlYW51cCgpOiB2b2lkIHtcbiAgICAvLyBOZXR0b3llciB0b3V0ZXMgbGVzIDUgbWludXRlc1xuICAgIHRoaXMuY2xlYW51cEludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucGVyZm9ybVBlcmlvZGljQ2xlYW51cCgpO1xuICAgIH0sIENMRUFOVVBfSU5URVJWQUwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFycsOqdGUgbGUgbmV0dG95YWdlIHDDqXJpb2RpcXVlICjDoCBhcHBlbGVyIGxvcnMgZGUgbGEgZGVzdHJ1Y3Rpb24pXG4gICAqL1xuICBzdG9wUGVyaW9kaWNDbGVhbnVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsZWFudXBJbnRlcnZhbCAhPT0gbnVsbCkge1xuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5jbGVhbnVwSW50ZXJ2YWwpO1xuICAgICAgdGhpcy5jbGVhbnVwSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFZmZlY3R1ZSB1biBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZGUgbCdoaXN0b3JpcXVlXG4gICAqIFLDqWR1aXQgbGEgdGFpbGxlIHNpIG7DqWNlc3NhaXJlIGV0IG5ldHRvaWUgbGVzIGVudHLDqWVzIHBldSB1dGlsaXPDqWVzXG4gICAqL1xuICBwcml2YXRlIHBlcmZvcm1QZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhpc3RvcnlMb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50U2l6ZSA9IE9iamVjdC5rZXlzKHRoaXMuaGlzdG9yeSkubGVuZ3RoO1xuICAgIFxuICAgIC8vIFNpIGwnaGlzdG9yaXF1ZSBkw6lwYXNzZSBsYSBsaW1pdGUsIGxlIHLDqWR1aXJlXG4gICAgaWYgKGN1cnJlbnRTaXplID4gTUFYX0hJU1RPUllfU0laRSkge1xuICAgICAgdGhpcy50cmltSGlzdG9yeSgpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBOZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZGUgbCdoaXN0b3JpcXVlOiByw6lkdWl0IGRlICR7Y3VycmVudFNpemV9IMOgICR7T2JqZWN0LmtleXModGhpcy5oaXN0b3J5KS5sZW5ndGh9IGVudHLDqWVzYCk7XG4gICAgfVxuXG4gICAgLy8gTWV0dHJlIMOgIGpvdXIgbGUgY2FjaGUgZGVzIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRpdCB1biBoaXN0b3JpcXVlIGNoYXJnw6kgZGVwdWlzIGxlIGRpc3F1ZSB2ZXJzIGxlIGZvcm1hdCBhY3R1ZWwuXG4gICAqIExlcyBmaWNoaWVycyDDqWNyaXRzIHBhciB1bmUgdmVyc2lvbiBhbnTDqXJpZXVyZSBkdSBwbHVnaW4gc3RvY2tlbnQgdW5cbiAgICogc2ltcGxlIGNvbXB0ZXVyIChgeyBbc3VnZ2VzdGlvbl06IG51bWJlciB9YCkgYXUgbGlldSBkZVxuICAgKiBgeyBbc3VnZ2VzdGlvbl06IEhpc3RvcnlFbnRyeSB9YCAtLSBvbiBkb25uZSDDoCBjZXMgZW50csOpZXMgdW5cbiAgICogbGFzdFVzZWQgZGUgXCJtYWludGVuYW50XCIgcG91ciBuZSBwYXMgbGVzIGZhaXJlIGRpc3BhcmHDrnRyZVxuICAgKiBpbW3DqWRpYXRlbWVudCBkdSBjbGFzc2VtZW50IGxlIHRlbXBzIHF1J3VuIG5vdXZlbCB1c2FnZSBsZXMgcmFmcmHDrmNoaXNzZS5cbiAgICovXG4gIHByaXZhdGUgbWlncmF0ZUhpc3RvcnkocmF3OiB1bmtub3duKTogU2VsZWN0aW9uSGlzdG9yeSB7XG4gICAgY29uc3QgbWlncmF0ZWQ6IFNlbGVjdGlvbkhpc3RvcnkgPSB7fTtcbiAgICAvLyB0eXBlb2YgW10gPT09IFwib2JqZWN0XCIsIHNvIGEgdG9wLWxldmVsIEpTT04gYXJyYXkgKGNvcnJ1cHRlZCBmaWxlLFxuICAgIC8vIHN0cmF5IG1hbnVhbCBlZGl0KSB3b3VsZCBvdGhlcndpc2Ugc2FpbCB0aHJvdWdoIHRoZSBjYWxsZXInc1xuICAgIC8vIGB0eXBlb2YgcGFyc2VkID09PSBcIm9iamVjdFwiYCBjaGVjayBhbmQgZ2V0IHdhbGtlZCBoZXJlOiBPYmplY3QuZW50cmllcygpXG4gICAgLy8gb24gYW4gYXJyYXkgeWllbGRzIG51bWVyaWMtc3RyaW5nIGtleXMgKFwiMFwiLCBcIjFcIiwgLi4uKSB0aGF0IHdvdWxkIGJlXG4gICAgLy8gbWlncmF0ZWQgaW50byBib2d1cyBoaXN0b3J5IGVudHJpZXMuXG4gICAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICAgIHJldHVybiBtaWdyYXRlZDtcbiAgICB9XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIG1pZ3JhdGVkW2tleV0gPSB7IGNvdW50OiB2YWx1ZSwgbGFzdFVzZWQ6IG5vdyB9O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHR5cGVvZiAodmFsdWUgYXMgSGlzdG9yeUVudHJ5KS5jb3VudCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICB0eXBlb2YgKHZhbHVlIGFzIEhpc3RvcnlFbnRyeSkubGFzdFVzZWQgPT09IFwibnVtYmVyXCJcbiAgICAgICkge1xuICAgICAgICAvLyBDb3B5IG9ubHkgdGhlIHR3byBleHBlY3RlZCBmaWVsZHMgcmF0aGVyIHRoYW4ga2VlcGluZyB0aGUgd2hvbGVcbiAgICAgICAgLy8gcGFyc2VkIG9iamVjdCByZWZlcmVuY2UsIHNvIHVuZXhwZWN0ZWQgZXh0cmEgcHJvcGVydGllcyBvbiBhXG4gICAgICAgIC8vIG1hbGZvcm1lZCBlbnRyeSBhcmVuJ3Qgc2lsZW50bHkgY2FycmllZCBmb3J3YXJkIGFuZCByZS1wZXJzaXN0ZWQuXG4gICAgICAgIG1pZ3JhdGVkW2tleV0gPSB7XG4gICAgICAgICAgY291bnQ6ICh2YWx1ZSBhcyBIaXN0b3J5RW50cnkpLmNvdW50LFxuICAgICAgICAgIGxhc3RVc2VkOiAodmFsdWUgYXMgSGlzdG9yeUVudHJ5KS5sYXN0VXNlZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIEFueXRoaW5nIGVsc2UgKG1hbGZvcm1lZCBlbnRyeSkgaXMgc2lsZW50bHkgZHJvcHBlZCByYXRoZXIgdGhhblxuICAgICAgLy8gY2FycmllZCBmb3J3YXJkIC0tIGEgc2luZ2xlIGJhZCBlbnRyeSBzaG91bGRuJ3QgcG9pc29uIHRoZSByZXN0LlxuICAgIH1cbiAgICByZXR1cm4gbWlncmF0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2NvcmUgZCd1bmUgZW50csOpZSA6IGZyw6lxdWVuY2UgcG9uZMOpcsOpZSBwYXIgbGEgZnJhw65jaGV1ciBkJ3V0aWxpc2F0aW9uXG4gICAqICh2b2lyIEhBTEZfTElGRV9NUykuIFV0aWxpc8OpIHBvdXIgdHJpZXIvdHJpbW1lciBsJ2hpc3RvcmlxdWUuXG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVTY29yZShlbnRyeTogSGlzdG9yeUVudHJ5LCBub3c6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYWdlTXMgPSBNYXRoLm1heCgwLCBub3cgLSBlbnRyeS5sYXN0VXNlZCk7XG4gICAgY29uc3QgZGVjYXkgPSBNYXRoLnBvdygwLjUsIGFnZU1zIC8gSEFMRl9MSUZFX01TKTtcbiAgICByZXR1cm4gZW50cnkuY291bnQgKiBkZWNheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFyZ2UgbCdoaXN0b3JpcXVlIGRlcHVpcyBsZSBzdG9ja2FnZVxuICAgKi9cbiAgYXN5bmMgbG9hZEhpc3RvcnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaGlzdG9yeUxvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdEaXIgPSB0aGlzLnBsdWdpbi5hcHAudmF1bHQuY29uZmlnRGlyO1xuICAgICAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgoYCR7Y29uZmlnRGlyfS8ke0hJU1RPUllfRklMRX1gKTtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHRoaXMucGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhwYXRoKTtcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLnJlYWQocGF0aCk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkOiB1bmtub3duID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICBpZiAocGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeSA9IHRoaXMubWlncmF0ZUhpc3RvcnkocGFyc2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVGhlIGV4aXN0cygpL3JlYWQoKSBjYWxscyBhYm92ZSBhbHJlYWR5IGhhbmRsZSB0aGUgXCJmaWxlIGRvZXNuJ3RcbiAgICAgIC8vIGV4aXN0IHlldFwiIGNhc2UgZXhwbGljaXRseSAodGhlIGBpZiAoZXhpc3RzKWAgZ3VhcmQpIC0tIHJlYWNoaW5nXG4gICAgICAvLyB0aGlzIGNhdGNoIG1lYW5zIGFuIGFjdHVhbCBhbm9tYWx5IChjb3JydXB0ZWQgSlNPTiBmcm9tIGFuXG4gICAgICAvLyBpbnRlcnJ1cHRlZCB3cml0ZSwgYSBzeW5jIGNvbmZsaWN0LCBldGMuKSwgc28gbG9nIGl0IGluc3RlYWQgb2ZcbiAgICAgIC8vIHNpbGVudGx5IGRpc2NhcmRpbmcgdGhlIHVzZXIncyBoaXN0b3J5IHdpdGggbm8gZGlhZ25vc3RpYyB0cmFpbC5cbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGxvYWRpbmcgaGlzdG9yeTpcIiwgeyBlcnJvciB9KTtcbiAgICAgIHRoaXMuaGlzdG9yeSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLmhpc3RvcnlMb2FkZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVucmVnaXN0cmUgbCdoaXN0b3JpcXVlIGRhbnMgbGUgc3RvY2thZ2VcbiAgICovXG4gIGFzeW5jIHNhdmVIaXN0b3J5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdEaXIgPSB0aGlzLnBsdWdpbi5hcHAudmF1bHQuY29uZmlnRGlyO1xuICAgICAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgoYCR7Y29uZmlnRGlyfS8ke0hJU1RPUllfRklMRX1gKTtcbiAgICAgIGNvbnN0IGRpciA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcbiAgICAgIFxuICAgICAgLy8gQ3LDqWVyIGxlIGRvc3NpZXIgc2kgbsOpY2Vzc2FpcmVcbiAgICAgIGNvbnN0IGRpckV4aXN0cyA9IGF3YWl0IHRoaXMucGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhkaXIpO1xuICAgICAgaWYgKCFkaXJFeGlzdHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uYXBwLnZhdWx0LmFkYXB0ZXIubWtkaXIoZGlyKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUocGF0aCwgSlNPTi5zdHJpbmdpZnkodGhpcy5oaXN0b3J5LCBudWxsLCAyKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIHNhdmluZyBoaXN0b3J5OlwiLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpc2UgdW5lIHN1Z2dlc3Rpb24gZW4gY2FwaXRhbGlzYW50IGxhIHByZW1pw6hyZSBsZXR0cmVcbiAgICogRXhlbXBsZTogXCJkZW1haW5cIiAtPiBcIkRlbWFpblwiLCBcImx1bmRpIHByb2NoYWluXCIgLT4gXCJMdW5kaSBwcm9jaGFpblwiXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXN1Z2dlc3Rpb24gfHwgc3VnZ2VzdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWQgPSBzdWdnZXN0aW9uLnRyaW0oKTtcbiAgICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cmltbWVkO1xuICAgIH1cblxuICAgIC8vIENhcGl0YWxpemUgZWFjaCB3b3JkIGluZGl2aWR1YWxseSwgbm90IGp1c3QgdGhlIGZpcnN0IGNoYXJhY3RlciBvZlxuICAgIC8vIHRoZSB3aG9sZSBzdHJpbmc6IGhpc3Rvcnkga2V5cyBhcmUgc3RvcmVkIGZ1bGx5IGxvd2VyY2FzZSAoc2VlXG4gICAgLy8gcmVjb3JkU2VsZWN0aW9uKCkpLCBzbyBhIG11bHRpLXdvcmQgc3VnZ2VzdGlvbiBsaWtlIFwibmV4dCBmcmlkYXlcIlxuICAgIC8vIHdvdWxkIG90aGVyd2lzZSBkaXNwbGF5IGFzIFwiTmV4dCBmcmlkYXlcIiAtLSBvbmx5IHRoZSB2ZXJ5IGZpcnN0XG4gICAgLy8gbGV0dGVyIGNhcGl0YWxpemVkIC0tIGluY29uc2lzdGVudCB3aXRoIHRoZSBcIk5leHQgRnJpZGF5XCIgdGhhdCBvdGhlclxuICAgIC8vIHN1Z2dlc3Rpb24gc291cmNlcyAoZS5nLiBkYXRlLXN1Z2dlc3QudHMncyBnZXRJbW1lZGlhdGVTdWdnZXN0aW9ucylcbiAgICAvLyBzaG93IGZvciB0aGUgZXhhY3Qgc2FtZSBwaHJhc2UgaW4gdGhlIHNhbWUgZHJvcGRvd24uXG4gICAgcmV0dXJuIHRyaW1tZWRcbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICAvKipcbiAgICogRW5yZWdpc3RyZSB1bmUgc8OpbGVjdGlvbiBkYW5zIGwnaGlzdG9yaXF1ZVxuICAgKi9cbiAgYXN5bmMgcmVjb3JkU2VsZWN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcblxuICAgIC8vIE5vcm1hbGlzZXIgbGEgc3VnZ2VzdGlvbiAoZW4gbWludXNjdWxlcyBwb3VyIGxhIGNsw6ksIMOpdml0ZSBsZXMgZG91YmxvbnMpXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbmNyw6ltZW50ZXIgbGUgY29tcHRldXIgZXQgcmFmcmHDrmNoaXIgbGEgZGF0ZSBkJ3V0aWxpc2F0aW9uICh1dGlsaXNlciBsYSBjbMOpIGVuIG1pbnVzY3VsZXMpXG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmhpc3Rvcnlbbm9ybWFsaXplZF07XG4gICAgdGhpcy5oaXN0b3J5W25vcm1hbGl6ZWRdID0ge1xuICAgICAgY291bnQ6IChleGlzdGluZz8uY291bnQgfHwgMCkgKyAxLFxuICAgICAgbGFzdFVzZWQ6IERhdGUubm93KCksXG4gICAgfTtcblxuICAgIC8vIExpbWl0ZXIgbGEgdGFpbGxlIGRlIGwnaGlzdG9yaXF1ZSBzaSBuw6ljZXNzYWlyZVxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmhpc3RvcnkpLmxlbmd0aCA+IE1BWF9ISVNUT1JZX1NJWkUpIHtcbiAgICAgIHRoaXMudHJpbUhpc3RvcnkoKTtcbiAgICB9XG5cbiAgICAvLyBNZXR0cmUgw6Agam91ciBsZSBjYWNoZVxuICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcblxuICAgIC8vIFNhdmUgKGFzeW5jaHJvbm91c2x5LCBkb24ndCBibG9jaylcbiAgICB0aGlzLnNhdmVIaXN0b3J5KCkuY2F0Y2goKGVycjogdW5rbm93bikgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3Igc2F2aW5nIGhpc3Rvcnk6XCIsIHsgZXJyb3I6IGVyciB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSw6lkdWl0IGxhIHRhaWxsZSBkZSBsJ2hpc3RvcmlxdWUgZW4gZ2FyZGFudCBsZXMgZW50csOpZXMgbGVzIHBsdXMgcGVydGluZW50ZXNcbiAgICogKGZyw6lxdWVuY2UgcG9uZMOpcsOpZSBwYXIgbGEgZnJhw65jaGV1ciwgdm9pciBjb21wdXRlU2NvcmUoKSlcbiAgICovXG4gIHByaXZhdGUgdHJpbUhpc3RvcnkoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModGhpcy5oaXN0b3J5KTtcblxuICAgIC8vIFRyaWVyIHBhciBzY29yZSAoZMOpY3JvaXNzYW50KVxuICAgIGVudHJpZXMuc29ydCgoYSwgYikgPT4gdGhpcy5jb21wdXRlU2NvcmUoYlsxXSwgbm93KSAtIHRoaXMuY29tcHV0ZVNjb3JlKGFbMV0sIG5vdykpO1xuXG4gICAgLy8gR2FyZGVyIHVuaXF1ZW1lbnQgbGVzIE1BWF9ISVNUT1JZX1NJWkUgZW50csOpZXMgbGVzIHBsdXMgcGVydGluZW50ZXNcbiAgICBjb25zdCB0cmltbWVkID0gZW50cmllcy5zbGljZSgwLCBNQVhfSElTVE9SWV9TSVpFKTtcblxuICAgIHRoaXMuaGlzdG9yeSA9IE9iamVjdC5mcm9tRW50cmllcyh0cmltbWVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFyZ2UgbCdoaXN0b3JpcXVlIGV0IG1ldCDDoCBqb3VyIGxlIGNhY2hlICjDoCBhcHBlbGVyIGF1IGTDqW1hcnJhZ2UpXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcbiAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0IMOgIGpvdXIgbGUgY2FjaGUgZGVzIHN1Z2dlc3Rpb25zIGxlcyBwbHVzIHBlcnRpbmVudGVzXG4gICAqIChmcsOpcXVlbmNlIHBvbmTDqXLDqWUgcGFyIGxhIGZyYcOuY2hldXIsIHZvaXIgY29tcHV0ZVNjb3JlKCkpXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUNhY2hlKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuaGlzdG9yeSk7XG5cbiAgICAvLyBUcmllciBwYXIgc2NvcmUgKGTDqWNyb2lzc2FudClcbiAgICBlbnRyaWVzLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcHV0ZVNjb3JlKGJbMV0sIG5vdykgLSB0aGlzLmNvbXB1dGVTY29yZShhWzFdLCBub3cpKTtcblxuICAgIC8vIE1ldHRyZSBlbiBjYWNoZSBsZXMgdG9wIHN1Z2dlc3Rpb25zIGF2ZWMgbGEgcHJlbWnDqHJlIGxldHRyZSBjYXBpdGFsaXPDqWVcbiAgICB0aGlzLmNhY2hlZFRvcFN1Z2dlc3Rpb25zID0gZW50cmllcy5zbGljZSgwLCA1MCkubWFwKChbc3VnZ2VzdGlvbl0pID0+XG4gICAgICB0aGlzLm5vcm1hbGl6ZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbilcbiAgICApO1xuICAgIHRoaXMuY2FjaGVWYWxpZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUsOpY3Vww6hyZSBsZXMgc3VnZ2VzdGlvbnMgbGVzIHBsdXMgZnLDqXF1ZW50ZXMgZGUgbWFuacOocmUgc3luY2hyb25lICh1dGlsaXNlIGxlIGNhY2hlKVxuICAgKiBAcGFyYW0gbGltaXQgTm9tYnJlIG1heGltdW0gZGUgc3VnZ2VzdGlvbnMgw6AgcmV0b3VybmVyXG4gICAqL1xuICBnZXRUb3BTdWdnZXN0aW9uc1N5bmMobGltaXQgPSAxMCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuY2FjaGVWYWxpZCkge1xuICAgICAgLy8gU2kgbGUgY2FjaGUgbidlc3QgcGFzIHZhbGlkZSwgcmV0b3VybmVyIHVuIHRhYmxlYXUgdmlkZVxuICAgICAgLy8gTGUgY2FjaGUgc2VyYSBtaXMgw6Agam91ciBsb3JzIGRlIGwnaW5pdGlhbGlzYXRpb25cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkVG9wU3VnZ2VzdGlvbnMuc2xpY2UoMCwgbGltaXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgbGVzIHN1Z2dlc3Rpb25zIGxlcyBwbHVzIGZyw6lxdWVudGVzLCB0cmnDqWVzIHBhciBmcsOpcXVlbmNlIChhc3luYywgbWV0IMOgIGpvdXIgbGUgY2FjaGUpXG4gICAqIEBwYXJhbSBsaW1pdCBOb21icmUgbWF4aW11bSBkZSBzdWdnZXN0aW9ucyDDoCByZXRvdXJuZXJcbiAgICovXG4gIGFzeW5jIGdldFRvcFN1Z2dlc3Rpb25zKGxpbWl0ID0gMTApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkSGlzdG9yeSgpO1xuICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWRUb3BTdWdnZXN0aW9ucy5zbGljZSgwLCBsaW1pdCk7XG4gIH1cblxuICAvKipcbiAgICogUsOpaW5pdGlhbGlzZSBsJ2hpc3RvcmlxdWVcbiAgICovXG4gIGFzeW5jIGNsZWFySGlzdG9yeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmhpc3RvcnkgPSB7fTtcbiAgICB0aGlzLmNhY2hlZFRvcFN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5jYWNoZVZhbGlkID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLnNhdmVIaXN0b3J5KCk7XG4gIH1cblxuICAvKipcbiAgICogU3VwcHJpbWUgdW5lIHNldWxlIGVudHLDqWUgZGUgbCdoaXN0b3JpcXVlIChnZXN0aW9uIGZpbmUsIHBhciBvcHBvc2l0aW9uXG4gICAqIMOgIGNsZWFySGlzdG9yeSgpIHF1aSB2aWRlIHRvdXQpLiBgc3VnZ2VzdGlvbmAgcGV1dCDDqnRyZSBsYSBmb3JtZSBub3JtYWxpc8OpZVxuICAgKiBhZmZpY2jDqWUgw6AgbCd1dGlsaXNhdGV1ciAoZXg6IFwiTmV4dCBGcmlkYXlcIikgb3UgbGEgY2zDqSBicnV0ZSBzdG9ja8OpZSBlblxuICAgKiBpbnRlcm5lIChleDogXCJuZXh0IGZyaWRheVwiKSAtLSBsZXMgZGV1eCBzb250IGFjY2VwdMOpZXMgcHVpc3F1ZVxuICAgKiBsJ3V0aWxpc2F0ZXVyIG5lIHZvaXQgamFtYWlzIGxhIGNsw6kgYnJ1dGUsIHNldWxlbWVudCBsYSB2ZXJzaW9uIGFmZmljaMOpZS5cbiAgICovXG4gIGFzeW5jIHJlbW92ZUVudHJ5KHN1Z2dlc3Rpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBzdWdnZXN0aW9uLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGlmICghKG5vcm1hbGl6ZWQgaW4gdGhpcy5oaXN0b3J5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLmhpc3Rvcnlbbm9ybWFsaXplZF07XG4gICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuXG4gICAgYXdhaXQgdGhpcy5zYXZlSGlzdG9yeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgdG91dGVzIGxlcyBlbnRyw6llcyBkZSBsJ2hpc3RvcmlxdWUsIHRyacOpZXMgcGFyIHBlcnRpbmVuY2VcbiAgICogKHZvaXIgY29tcHV0ZVNjb3JlKCkpLCBhdmVjIGxldXJzIG3DqXRhZG9ubsOpZXMgLS0gdXRpbGlzw6kgcGFyIGwnaW50ZXJmYWNlXG4gICAqIGRlIGdlc3Rpb24gZmluZSBkZSBsJ2hpc3RvcmlxdWUgKGFmZmljaGFnZSArIHN1cHByZXNzaW9uIGluZGl2aWR1ZWxsZSkuXG4gICAqIENvbnRyYWlyZW1lbnQgw6AgZ2V0VG9wU3VnZ2VzdGlvbnNTeW5jKCkvZ2V0VG9wU3VnZ2VzdGlvbnMoKSwgcXVpIG5lXG4gICAqIHJlbnZvaWVudCBxdWUgbGUgdGV4dGUgYWZmaWNow6ksIGNlY2kgcmVudm9pZSBhdXNzaSBsYSBjbMOpIGJydXRlIChwb3VyXG4gICAqIHJlbW92ZUVudHJ5KCkpIGV0IGxlcyBtw6l0YWRvbm7DqWVzIGNvdW50L2xhc3RVc2VkIChwb3VyIGwnYWZmaWNoYWdlKS5cbiAgICovXG4gIGFzeW5jIGdldEVudHJpZXNGb3JNYW5hZ2VtZW50KCk6IFByb21pc2U8QXJyYXk8eyBrZXk6IHN0cmluZzsgZGlzcGxheTogc3RyaW5nOyBjb3VudDogbnVtYmVyOyBsYXN0VXNlZDogbnVtYmVyIH0+PiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkSGlzdG9yeSgpO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5oaXN0b3J5KVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcHV0ZVNjb3JlKGJbMV0sIG5vdykgLSB0aGlzLmNvbXB1dGVTY29yZShhWzFdLCBub3cpKVxuICAgICAgLm1hcCgoW2tleSwgZW50cnldKSA9PiAoe1xuICAgICAgICBrZXksXG4gICAgICAgIGRpc3BsYXk6IHRoaXMubm9ybWFsaXplU3VnZ2VzdGlvbihrZXkpLFxuICAgICAgICBjb3VudDogZW50cnkuY291bnQsXG4gICAgICAgIGxhc3RVc2VkOiBlbnRyeS5sYXN0VXNlZCxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXR0b2llIGxlcyByZXNzb3VyY2VzIGxvcnMgZGUgbGEgZGVzdHJ1Y3Rpb24gZGUgbCdpbnN0YW5jZVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BQZXJpb2RpY0NsZWFudXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSw6ljdXDDqHJlIGwnaGlzdG9yaXF1ZSBjb21wbGV0IChwb3VyIGRlYnVnKVxuICAgKi9cbiAgYXN5bmMgZ2V0SGlzdG9yeSgpOiBQcm9taXNlPFNlbGVjdGlvbkhpc3Rvcnk+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRIaXN0b3J5KCk7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5oaXN0b3J5IH07XG4gIH1cbn1cbiIsImltcG9ydCB7IEFwcCwgTWFya2Rvd25WaWV3LCBFZGl0b3IgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB0eXBlIE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuL21haW5cIjtcbmltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSBcIi4vbHJ1LWNhY2hlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9uQ29sbGVjdG9yIH0gZnJvbSBcIi4vdHJhbnNsYXRpb24tY29sbGVjdG9yXCI7XG5cbi8vIENoZWFwLCBub24tY3J5cHRvZ3JhcGhpYyBzdHJpbmcgaGFzaCAoZGpiMiB2YXJpYW50KSB1c2VkIHRvIGZpbmdlcnByaW50XG4vLyB0aGUgc2Nhbm5lZCBjb250ZXh0IHdpbmRvdyBmb3IgY2FjaGUga2V5cyAtLSBmYXN0IGVub3VnaCB0byBydW4gb24gZXZlcnlcbi8vIGtleXN0cm9rZSB3aGlsZSBzdGlsbCBkaXN0aW5ndWlzaGluZyBkaWZmZXJlbnQgY29udGVudCByZWxpYWJseS5cbmZ1bmN0aW9uIHNpbXBsZUhhc2goc3RyOiBzdHJpbmcpOiBudW1iZXIge1xuICBsZXQgaGFzaCA9IDUzODE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2ggKyBzdHIuY2hhckNvZGVBdChpKSkgfCAwO1xuICB9XG4gIHJldHVybiBoYXNoO1xufVxuXG5jb25zdCBDT05URVhUX0xJTkVTID0gMTA7IC8vIE5vbWJyZSBkZSBsaWduZXMgw6AgYW5hbHlzZXIgYXZhbnQgZXQgYXByw6hzIGxlIGN1cnNldXJcbmNvbnN0IE1BWF9EQVRFU19UT19FWFRSQUNUID0gMTA7IC8vIE5vbWJyZSBtYXhpbXVtIGRlIGRhdGVzIMOgIGV4dHJhaXJlIGR1IGNvbnRleHRlXG5jb25zdCBNQVhfQ0FDSEVfU0laRSA9IDIwMDsgLy8gTGltaXRlIGRlIHRhaWxsZSBkdSBjYWNoZSBkZSBjb250ZXh0ZVxuY29uc3QgQ0FDSEVfVElNRU9VVCA9IDUwMDA7IC8vIDUgc2Vjb25kZXMgZGUgY2FjaGVcbmNvbnN0IENMRUFOVVBfSU5URVJWQUwgPSAzMDAwMDsgLy8gTmV0dG95YWdlIHDDqXJpb2RpcXVlIHRvdXRlcyBsZXMgMzAgc2Vjb25kZXNcblxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0SW5mbyB7XG4gIGRhdGVzSW5Db250ZXh0OiBzdHJpbmdbXTsgLy8gRGF0ZXMgdHJvdXbDqWVzIGRhbnMgbGUgY29udGV4dGUgKGZvcm1hdHMgbmF0dXJlbHMgZMOpdGVjdMOpcylcbiAgdGl0bGU/OiBzdHJpbmc7IC8vIFRpdHJlIGRlIGxhIG5vdGVcbiAgdGFnczogc3RyaW5nW107IC8vIFRhZ3MgZGUgbGEgbm90ZVxuICB0aW1lc3RhbXA6IG51bWJlcjsgLy8gVGltZXN0YW1wIGRlIGNyw6lhdGlvbiBwb3VyIGxlIG5ldHRveWFnZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0QW5hbHl6ZXIge1xuICBwcml2YXRlIGFwcDogQXBwO1xuICBwcml2YXRlIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXM7XG4gIHByaXZhdGUgY2FjaGU6IExSVUNhY2hlPHN0cmluZywgQ29udGV4dEluZm8+OyAvLyBDYWNoZSB0ZW1wb3JhaXJlIHBhciBmaWNoaWVyIGF2ZWMgbGltaXRlIGRlIHRhaWxsZVxuICBwcml2YXRlIGNsZWFudXBJbnRlcnZhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7IC8vIElEIGRlIGwnaW50ZXJ2YWxsZSBkZSBuZXR0b3lhZ2VcbiAgXG4gIC8vIFBhdHRlcm5zIHJlZ2V4IHBvdXIgbGEgZMOpdGVjdGlvbiBkZSBkYXRlcyAoZ8OpbsOpcsOpcyBkeW5hbWlxdWVtZW50KVxuICBwcml2YXRlIGRhdGVQYXR0ZXJuczogUmVnRXhwW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcykge1xuICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgIHRoaXMuY2FjaGUgPSBuZXcgTFJVQ2FjaGU8c3RyaW5nLCBDb250ZXh0SW5mbz4oTUFYX0NBQ0hFX1NJWkUpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGVQYXR0ZXJucygpO1xuICAgIHRoaXMuc3RhcnRQZXJpb2RpY0NsZWFudXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEw6ltYXJyZSBsZSBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZHUgY2FjaGVcbiAgICovXG4gIHByaXZhdGUgc3RhcnRQZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgLy8gTmV0dG95ZXIgdG91dGVzIGxlcyAzMCBzZWNvbmRlc1xuICAgIHRoaXMuY2xlYW51cEludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuY2xlYW51cEV4cGlyZWRFbnRyaWVzKCk7XG4gICAgfSwgQ0xFQU5VUF9JTlRFUlZBTCk7XG4gIH1cblxuICAvKipcbiAgICogQXJyw6p0ZSBsZSBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgKMOgIGFwcGVsZXIgbG9ycyBkZSBsYSBkZXN0cnVjdGlvbilcbiAgICovXG4gIHN0b3BQZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xlYW51cEludGVydmFsICE9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmNsZWFudXBJbnRlcnZhbCk7XG4gICAgICB0aGlzLmNsZWFudXBJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5ldHRvaWUgbGVzIGVudHLDqWVzIGV4cGlyw6llcyBkdSBjYWNoZVxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbnVwRXhwaXJlZEVudHJpZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBrZXlzVG9EZWxldGU6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBQYXJjb3VyaXIgdG91dGVzIGxlcyBlbnRyw6llcyBkdSBjYWNoZVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuY2FjaGUuZW50cmllcygpKSB7XG4gICAgICBpZiAodmFsdWUudGltZXN0YW1wICYmIChub3cgLSB2YWx1ZS50aW1lc3RhbXApID4gQ0FDSEVfVElNRU9VVCkge1xuICAgICAgICBrZXlzVG9EZWxldGUucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1cHByaW1lciBsZXMgZW50csOpZXMgZXhwaXLDqWVzXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c1RvRGVsZXRlKSB7XG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIGlmIChrZXlzVG9EZWxldGUubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBOZXR0b3lhZ2UgZHUgY2FjaGUgZGUgY29udGV4dGU6ICR7a2V5c1RvRGVsZXRlLmxlbmd0aH0gZW50csOpZXMgc3VwcHJpbcOpZXNgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGlzZSBsZXMgcGF0dGVybnMgcmVnZXggcG91ciBsYSBkw6l0ZWN0aW9uIGRlIGRhdGVzIGRhbnMgdG91dGVzIGxlcyBsYW5ndWVzIGFjdGl2w6llc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplRGF0ZVBhdHRlcm5zKCk6IHZvaWQge1xuICAgIGNvbnN0IHRjID0gbmV3IFRyYW5zbGF0aW9uQ29sbGVjdG9yKHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG5cbiAgICBjb25zdCB3ZWVrZGF5S2V5cyA9IFsnc3VuZGF5JywgJ21vbmRheScsICd0dWVzZGF5JywgJ3dlZG5lc2RheScsICd0aHVyc2RheScsICdmcmlkYXknLCAnc2F0dXJkYXknXTtcbiAgICBjb25zdCB3ZWVrZGF5UGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb24od2Vla2RheUtleXMuZmxhdE1hcChrZXkgPT4gdGMuY29sbGVjdFdvcmRzKGtleSkpKTtcbiAgICBjb25zdCB0aW1lV29yZFBhdHRlcm4gPSB0Yy5idWlsZEFsdGVybmF0aW9uKFsndG9kYXknLCAndG9tb3Jyb3cnLCAneWVzdGVyZGF5J10uZmxhdE1hcChrZXkgPT4gdGMuY29sbGVjdFdvcmRzKGtleSkpKTtcbiAgICBjb25zdCB0aW1lVW5pdEtleXMgPSBbJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICBjb25zdCB0aW1lVW5pdFBhdHRlcm4gPSB0Yy5idWlsZEFsdGVybmF0aW9uKHRpbWVVbml0S2V5cy5mbGF0TWFwKGtleSA9PiB0Yy5jb2xsZWN0V29yZHMoa2V5KSkpO1xuICAgIGNvbnN0IGluUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoJ2luJyk7XG4gICAgY29uc3QgcHJlZml4UGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb24oWy4uLnRjLmNvbGxlY3RXb3JkcygnbmV4dCcpLCAuLi50Yy5jb2xsZWN0V29yZHMoJ2xhc3QnKV0pO1xuXG4gICAgdGhpcy5kYXRlUGF0dGVybnMgPSBbXTtcblxuICAgIC8vIFxcYiBpcyBkZWZpbmVkIGluIHRlcm1zIG9mIFxcdywgd2hpY2ggaXMgQVNDSUktb25seTogaXQgbmV2ZXIgbWF0Y2hlc1xuICAgIC8vIGFyb3VuZCBDSksgY2hhcmFjdGVycyAobm8gYm91bmRhcnkgZXhpc3RzIGJldHdlZW4gdHdvIENoaW5lc2VcbiAgICAvLyBjaGFyYWN0ZXJzIGFzIGZhciBhcyBcXGIgaXMgY29uY2VybmVkKSwgc28gaXQgc2lsZW50bHkgZHJvcHMgZXZlcnkgQ0pLXG4gICAgLy8gbWF0Y2guIFVzaW5nIGV4cGxpY2l0IGxvb2thcm91bmQgYWdhaW5zdCBMYXRpbiBhbHBoYW51bWVyaWNzIGluc3RlYWRcbiAgICAvLyBzdGlsbCBibG9ja3MgcGFydGlhbC13b3JkIG1hdGNoZXMgZm9yIExhdGluIHNjcmlwdHMgKGUuZy4gXCJNb25kYXlcIlxuICAgIC8vIGluc2lkZSBcIk1vbmRheWlzaFwiKSB3aGlsZSBpbXBvc2luZyBubyBib3VuZGFyeSBhdCBhbGwgbmV4dCB0byBDSktcbiAgICAvLyBjaGFyYWN0ZXJzLCB3aGljaCBkb24ndCBoYXZlIHdvcmQgc2VwYXJhdG9ycyB0byBjaGVjayBhZ2FpbnN0IGFueXdheS5cbiAgICAvL1xuICAgIC8vIFRoZSBsZWFkaW5nIGJvdW5kYXJ5IGNhbid0IGJlIGEgbG9va2JlaGluZCAoXCIoPzwhLi4uKVwiKTogdGhhdCBzeW50YXhcbiAgICAvLyBpc24ndCBzdXBwb3J0ZWQgb24gaU9TL1NhZmFyaSBiZWZvcmUgMTYuNCBhbmQgdGhyb3dzIGF0IFJlZ0V4cFxuICAgIC8vIGNvbnN0cnVjdGlvbiB0aW1lLCBicmVha2luZyBldmVyeSBvbmUgb2YgdGhlc2UgcGF0dGVybnMgb24gb2xkZXJcbiAgICAvLyBkZXZpY2VzLiBVc2luZyBhIGNvbnN1bWluZyBhbHRlcm5hdGlvbiAoXCJzdGFydC1vZi1zdHJpbmcgb3IgYSBzaW5nbGVcbiAgICAvLyBub24td29yZCBjaGFyYWN0ZXJcIikgaW5zdGVhZCB3b3JrcyB0aGUgc2FtZSB3YXkgYnV0IGFjdHVhbGx5IGNvbnN1bWVzXG4gICAgLy8gdGhhdCBsZWFkaW5nIGNoYXJhY3Rlciwgc28gdGhlIGNvbnRlbnQgdG8gZXh0cmFjdCBpcyB3cmFwcGVkIGluIGl0c1xuICAgIC8vIG93biBjYXB0dXJpbmcgZ3JvdXAgYmVsb3cgcmF0aGVyIHRoYW4gcmVhZCBvZmYgdGhlIHdob2xlIG1hdGNoLlxuICAgIC8vIExvb2thaGVhZCAoXCIoPyEuLi4pXCIpIGhhcyBubyBzdWNoIGNvbXBhdGliaWxpdHkgaXNzdWUgYW5kIGNhbiBzdGF5LlxuICAgIGNvbnN0IHdvcmRCb3VuZGFyeUJlZm9yZSA9ICcoPzpefFteYS16QS1aMC05X10pJztcbiAgICBjb25zdCB3b3JkQm91bmRhcnlBZnRlciA9ICcoPyFbYS16QS1aMC05X10pJztcblxuICAgIC8vIFBhdHRlcm4gMTogSm91cnMgZGUgbGEgc2VtYWluZVxuICAgIGlmICh3ZWVrZGF5UGF0dGVybikge1xuICAgICAgdGhpcy5kYXRlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGAke3dvcmRCb3VuZGFyeUJlZm9yZX0oJHt3ZWVrZGF5UGF0dGVybn0pJHt3b3JkQm91bmRhcnlBZnRlcn1gLCAnZ2knKSk7XG4gICAgfVxuXG4gICAgLy8gUGF0dGVybiAyOiBNb3RzIHRlbXBvcmVscyBjb3VyYW50cyAodG9kYXksIHRvbW9ycm93LCB5ZXN0ZXJkYXkpXG4gICAgaWYgKHRpbWVXb3JkUGF0dGVybikge1xuICAgICAgdGhpcy5kYXRlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGAke3dvcmRCb3VuZGFyeUJlZm9yZX0oJHt0aW1lV29yZFBhdHRlcm59KSR7d29yZEJvdW5kYXJ5QWZ0ZXJ9YCwgJ2dpJykpO1xuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gMzogRXhwcmVzc2lvbnMgcmVsYXRpdmVzIFwiZGFucyBYIGpvdXJzL3NlbWFpbmVzL21vaXNcIlxuICAgIGlmIChpblBhdHRlcm4gJiYgdGltZVVuaXRQYXR0ZXJuKSB7XG4gICAgICB0aGlzLmRhdGVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYCR7d29yZEJvdW5kYXJ5QmVmb3JlfSgoPzoke2luUGF0dGVybn0pXFxcXHMqXFxcXGQrXFxcXHMqKD86JHt0aW1lVW5pdFBhdHRlcm59KSkke3dvcmRCb3VuZGFyeUFmdGVyfWAsICdnaScpKTtcbiAgICB9XG5cbiAgICAvLyBQYXR0ZXJuIDQ6IEV4cHJlc3Npb25zIFwibmV4dC9sYXN0IHdlZWtkYXkvd2Vlay9tb250aC95ZWFyXCJcbiAgICAvLyBFdmVyeSBvbmUgb2YgdGhlIDExIHN1cHBvcnRlZCBsYW5ndWFnZXMgZGVmaW5lcyB3ZWVrZGF5cyBhbmQgdGltZVxuICAgIC8vIHVuaXRzIHRvZ2V0aGVyIHdpdGggbmV4dC9sYXN0LCBzbyB0aGUgbmVzdGVkIGNoZWNrcyBiZWxvdyBjYW4ndFxuICAgIC8vIGFjdHVhbGx5IGJlIGZhbHNlIHdoaWxlIHByZWZpeFBhdHRlcm4gaXMgdHJ1ZSAtLSBrZXB0IGFzIGEgZ3VhcmQgaW5cbiAgICAvLyBjYXNlIGEgZnV0dXJlIGxhbmd1YWdlIG1vZHVsZSBpcyBhdXRob3JlZCBpbmNvbXBsZXRlbHkuXG4gICAgaWYgKHByZWZpeFBhdHRlcm4pIHtcbiAgICAgIGlmICh3ZWVrZGF5UGF0dGVybikge1xuICAgICAgICB0aGlzLmRhdGVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYCR7d29yZEJvdW5kYXJ5QmVmb3JlfSgoPzoke3ByZWZpeFBhdHRlcm59KVxcXFxzKig/OiR7d2Vla2RheVBhdHRlcm59KSkke3dvcmRCb3VuZGFyeUFmdGVyfWAsICdnaScpKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lVW5pdFBhdHRlcm4pIHtcbiAgICAgICAgdGhpcy5kYXRlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGAke3dvcmRCb3VuZGFyeUJlZm9yZX0oKD86JHtwcmVmaXhQYXR0ZXJufSlcXFxccyooPzoke3RpbWVVbml0UGF0dGVybn0pKSR7d29yZEJvdW5kYXJ5QWZ0ZXJ9YCwgJ2dpJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSw6lpbml0aWFsaXNlIGxlcyBwYXR0ZXJucyAow6AgYXBwZWxlciBxdWFuZCBsZXMgbGFuZ3VlcyBjaGFuZ2VudClcbiAgICovXG4gIHJlc2V0UGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplRGF0ZVBhdHRlcm5zKCk7XG4gICAgdGhpcy5jbGVhckNhY2hlKCk7IC8vIFZpZGVyIGxlIGNhY2hlIGNhciBsZXMgcGF0dGVybnMgb250IGNoYW5nw6lcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXR0b2llIGxlIGNhY2hlIGxvcnMgZGUgbGEgZGVzdHJ1Y3Rpb24gZGUgbCdpbnN0YW5jZVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BQZXJpb2RpY0NsZWFudXAoKTtcbiAgICB0aGlzLmNsZWFyQ2FjaGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmFseXNlIGxlIGNvbnRleHRlIGF1dG91ciBkdSBjdXJzZXVyIGRlIG1hbmnDqHJlIHN5bmNocm9uZSAodXRpbGlzZSBsZSBjYWNoZSlcbiAgICovXG4gIGFuYWx5emVDb250ZXh0U3luYyhlZGl0b3I6IEVkaXRvciwgY3Vyc29yTGluZTogbnVtYmVyKTogQ29udGV4dEluZm8ge1xuICAgIGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xuICAgIGlmICghYWN0aXZlVmlldykge1xuICAgICAgcmV0dXJuIHsgZGF0ZXNJbkNvbnRleHQ6IFtdLCB0YWdzOiBbXSwgdGltZXN0YW1wOiBEYXRlLm5vdygpIH07XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZSA9IGFjdGl2ZVZpZXcuZmlsZTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybiB7IGRhdGVzSW5Db250ZXh0OiBbXSwgdGFnczogW10sIHRpbWVzdGFtcDogRGF0ZS5ub3coKSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHRJbmZvID0ge1xuICAgICAgZGF0ZXNJbkNvbnRleHQ6IFtdLFxuICAgICAgdGFnczogW10sXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBBbmFseXNlciBsZSBjb250ZXh0ZSBhdXRvdXIgZHUgY3Vyc2V1clxuICAgICAgY29uc3QgY29udGVudCA9IGVkaXRvci5nZXRWYWx1ZSgpO1xuICAgICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xuXG4gICAgICBjb25zdCBzdGFydExpbmUgPSBNYXRoLm1heCgwLCBjdXJzb3JMaW5lIC0gQ09OVEVYVF9MSU5FUyk7XG4gICAgICBjb25zdCBlbmRMaW5lID0gTWF0aC5taW4obGluZXMubGVuZ3RoIC0gMSwgY3Vyc29yTGluZSArIENPTlRFWFRfTElORVMpO1xuXG4gICAgICBjb25zdCBjb250ZXh0TGluZXMgPSBsaW5lcy5zbGljZShzdGFydExpbmUsIGVuZExpbmUgKyAxKTtcbiAgICAgIGNvbnN0IGNvbnRleHRUZXh0ID0gY29udGV4dExpbmVzLmpvaW4oXCJcXG5cIik7XG5cbiAgICAgIC8vIFbDqXJpZmllciBsZSBjYWNoZSAoYXZlYyB0aW1lb3V0KS4gVGhlIGtleSBpbmNsdWRlcyBhIGNoZWFwIGhhc2ggb2ZcbiAgICAgIC8vIHRoZSBhY3R1YWwgc2Nhbm5lZCB3aW5kb3csIG5vdCBqdXN0IGZpbGUrbGluZTogd2l0aG91dCBpdCwgZWRpdGluZ1xuICAgICAgLy8gY29udGVudCB3aXRoaW4gdGhlIMKxQ09OVEVYVF9MSU5FUyB3aW5kb3cgKHdpdGhvdXQgbW92aW5nIHRoZSBjdXJzb3JcbiAgICAgIC8vIHRvIGEgZGlmZmVyZW50IGxpbmUpIHdvdWxkIGtlZXAgc2VydmluZyBhIHN0YWxlIGNhY2hlZCByZXN1bHQgdW50aWxcbiAgICAgIC8vIENBQ0hFX1RJTUVPVVQgZXhwaXJlcywgc2luY2UgZmlsZStsaW5lIGFsb25lIGRvZXNuJ3QgY2hhbmdlIHdoZW5cbiAgICAgIC8vIG5lYXJieSBjb250ZW50IGRvZXMuXG4gICAgICBjb25zdCBjYWNoZUtleSA9IGAke2ZpbGUucGF0aH0tJHtjdXJzb3JMaW5lfS0ke3NpbXBsZUhhc2goY29udGV4dFRleHQpfWA7XG4gICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIC8vIFbDqXJpZmllciBzaSBsJ2VudHLDqWUgbidlc3QgcGFzIGV4cGlyw6llXG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGlmIChjYWNoZWQudGltZXN0YW1wICYmIChub3cgLSBjYWNoZWQudGltZXN0YW1wKSA8PSBDQUNIRV9USU1FT1VUKSB7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBFbnRyw6llIGV4cGlyw6llLCBsYSBzdXBwcmltZXJcbiAgICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRXh0cmFpcmUgbGVzIHRhZ3MgZGVwdWlzIGxlcyBtw6l0YWRvbm7DqWVzXG4gICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xuICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgIGlmIChtZXRhZGF0YS50YWdzKSB7XG4gICAgICAgICAgY29udGV4dC50YWdzID0gbWV0YWRhdGEudGFncy5tYXAodGFnID0+IHRhZy50YWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXh0cmFpcmUgbGUgdGl0cmUgZGVwdWlzIGxlcyBmcm9udG1hdHRlciBvdSBsZSBwcmVtaWVyIHRpdHJlXG4gICAgICAgIC8vIEZyb250bWF0dGVyIHZhbHVlcyBhcmUgdXNlci1hdXRob3JlZCBZQU1MLCBzbyBcInRpdGxlXCIgaXNuJ3RcbiAgICAgICAgLy8gZ3VhcmFudGVlZCB0byBhY3R1YWxseSBiZSBhIHN0cmluZyAoZS5nLiBgdGl0bGU6IDQyYCkuXG4gICAgICAgIGlmICh0eXBlb2YgbWV0YWRhdGEuZnJvbnRtYXR0ZXI/LnRpdGxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgY29udGV4dC50aXRsZSA9IG1ldGFkYXRhLmZyb250bWF0dGVyLnRpdGxlO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmhlYWRpbmdzICYmIG1ldGFkYXRhLmhlYWRpbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb250ZXh0LnRpdGxlID0gbWV0YWRhdGEuaGVhZGluZ3NbMF0uaGVhZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBFeHRyYWlyZSBsZXMgZGF0ZXMgZHUgY29udGV4dGVcbiAgICAgIGNvbnRleHQuZGF0ZXNJbkNvbnRleHQgPSB0aGlzLmV4dHJhY3REYXRlc0Zyb21Db250ZXh0KGNvbnRleHRUZXh0KTtcblxuICAgICAgLy8gTWV0dHJlIGVuIGNhY2hlIChsZSBMUlUgY2FjaGUgZ8OocmUgYXV0b21hdGlxdWVtZW50IGxhIGxpbWl0ZSBkZSB0YWlsbGUpXG4gICAgICB0aGlzLmNhY2hlLnNldChjYWNoZUtleSwgY29udGV4dCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3IgYW5hbHl6aW5nIGNvbnRleHQ6XCIsIHsgZXJyb3IgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQW5hbHlzZSBsZSBjb250ZXh0ZSBhdXRvdXIgZHUgY3Vyc2V1ciBkYW5zIGxlIGRvY3VtZW50IGFjdHVlbCAoYXN5bmMsIHBvdXIgY29tcGF0aWJpbGl0w6kpXG4gICAqL1xuICBhbmFseXplQ29udGV4dChlZGl0b3I6IEVkaXRvciwgY3Vyc29yTGluZTogbnVtYmVyKTogUHJvbWlzZTxDb250ZXh0SW5mbz4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5hbmFseXplQ29udGV4dFN5bmMoZWRpdG9yLCBjdXJzb3JMaW5lKSk7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXNlIHVuZSBkYXRlIGV4dHJhaXRlIGVuIGNhcGl0YWxpc2FudCBsYSBwcmVtacOocmUgbGV0dHJlXG4gICAqIEV4ZW1wbGU6IFwiZGVtYWluXCIgLT4gXCJEZW1haW5cIiwgXCJsdW5kaSBwcm9jaGFpblwiIC0+IFwiTHVuZGkgcHJvY2hhaW5cIlxuICAgKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVEYXRlKGRhdGVTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlU3RyIHx8IGRhdGVTdHIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZGF0ZVN0cjtcbiAgICB9XG5cbiAgICBjb25zdCB0cmltbWVkID0gZGF0ZVN0ci50cmltKCk7XG4gICAgaWYgKHRyaW1tZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJpbW1lZDtcbiAgICB9XG5cbiAgICAvLyBDYXBpdGFsaXplIGVhY2ggd29yZCBpbmRpdmlkdWFsbHksIG5vdCBqdXN0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2ZcbiAgICAvLyB0aGUgd2hvbGUgc3RyaW5nOiBtdWx0aS13b3JkIG1hdGNoZXMgZnJvbSB0aGUgcHJlZml4K3dlZWtkYXkvcHJlZml4K1xuICAgIC8vIHVuaXQgcGF0dGVybnMgKGUuZy4gXCJuZXh0IEZyaWRheVwiKSB3b3VsZCBvdGhlcndpc2UgaGF2ZSB0aGVpciBzZWNvbmRcbiAgICAvLyB3b3JkIGZvcmNlZCB0byBsb3dlcmNhc2UgKFwiTmV4dCBmcmlkYXlcIiksIGluY29ycmVjdGx5IG1hbmdsaW5nXG4gICAgLy8gY2FwaXRhbGl6ZWQgd2Vla2RheS9tb250aCBuYW1lcyB0aGUgdXNlciBhY3R1YWxseSB0eXBlZC5cbiAgICByZXR1cm4gdHJpbW1lZFxuICAgICAgLnNwbGl0KC9cXHMrLylcbiAgICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWl0IGxlcyBleHByZXNzaW9ucyBkZSBkYXRlcyBwb3RlbnRpZWxsZXMgZHUgdGV4dGVcbiAgICogVXRpbGlzZSBkZXMgcGF0dGVybnMgZHluYW1pcXVlcyBtdWx0aS1sYW5ndWUgcG91ciBkw6l0ZWN0ZXIgbGVzIGRhdGVzIG5hdHVyZWxsZXNcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdERhdGVzRnJvbUNvbnRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIC8vIFV0aWxpc2VyIGxlcyBwYXR0ZXJucyBkeW5hbWlxdWVzIGfDqW7DqXLDqXMgcG91ciB0b3V0ZXMgbGVzIGxhbmd1ZXMgYWN0aXbDqWVzXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuZGF0ZVBhdHRlcm5zKSB7XG4gICAgICAvLyBUaGUgbGVhZGluZyBib3VuZGFyeSBjb25zdW1lcyBhIGNoYXJhY3RlciBpbnN0ZWFkIG9mIHVzaW5nIGFcbiAgICAgIC8vIHplcm8td2lkdGggbG9va2JlaGluZCAoc2VlIGluaXRpYWxpemVEYXRlUGF0dGVybnMpLCBzbyB0aGUgdGV4dCB0b1xuICAgICAgLy8gZXh0cmFjdCBpcyByZWFkIGZyb20gY2FwdHVyZSBncm91cCAxLCBub3QgdGhlIHdob2xlIG1hdGNoLlxuICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHBhdHRlcm4pKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBtYXRjaFsxXTtcbiAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAvLyBQb3VyIGxlcyBsYW5ndWVzIHNhbnMgY2Fzc2UgKGNvbW1lIGxlIGphcG9uYWlzKSwgdG9Mb3dlckNhc2UoKSBuZSBjaGFuZ2UgcmllblxuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBjb250ZW50LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICAgIGlmICghc2Vlbi5oYXMobm9ybWFsaXplZCkgJiYgZGF0ZXMubGVuZ3RoIDwgTUFYX0RBVEVTX1RPX0VYVFJBQ1QpIHtcbiAgICAgICAgICAgIHNlZW4uYWRkKG5vcm1hbGl6ZWQpO1xuICAgICAgICAgICAgLy8gTm9ybWFsaXNlciBhdmVjIGxhIHByZW1pw6hyZSBsZXR0cmUgZW4gbWFqdXNjdWxlIChvdSBsYWlzc2VyIHRlbCBxdWVsIHBvdXIgbGUgamFwb25haXMpXG4gICAgICAgICAgICBkYXRlcy5wdXNoKHRoaXMubm9ybWFsaXplRGF0ZShjb250ZW50LnRyaW0oKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXR0b2llIGxlIGNhY2hlIChwZXV0IMOqdHJlIGFwcGVsw6kgcMOpcmlvZGlxdWVtZW50KVxuICAgKi9cbiAgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgbGVzIHN0YXRpc3RpcXVlcyBkdSBjYWNoZSBkZSBjb250ZXh0ZVxuICAgKi9cbiAgZ2V0Q2FjaGVTdGF0cygpOiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBzaXplOiB0aGlzLmNhY2hlLnNpemUsXG4gICAgICBtYXhTaXplOiB0aGlzLmNhY2hlLm1heFNpemVMaW1pdCxcbiAgICB9O1xuICB9XG59XG4iLCIvKipcbiAqIENsYXNzZSBkJ2VycmV1ciBwZXJzb25uYWxpc8OpZSBwb3VyIE5hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXNcbiAqL1xuZXhwb3J0IGNsYXNzIE5MRFBhcnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjb250ZXh0PzogdW5rbm93bjtcbiAgcHVibGljIHJlYWRvbmx5IHNldmVyaXR5OiAnZGVidWcnIHwgJ3dhcm4nIHwgJ2Vycm9yJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgY29kZTogc3RyaW5nLFxuICAgIHNldmVyaXR5OiAnZGVidWcnIHwgJ3dhcm4nIHwgJ2Vycm9yJyA9ICdlcnJvcicsXG4gICAgY29udGV4dD86IHVua25vd25cbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ05MRFBhcnNlRXJyb3InO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5zZXZlcml0eSA9IHNldmVyaXR5O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgICAvLyBNYWludGllbnQgbGEgc3RhY2sgdHJhY2UgcG91ciBsZSBkw6lib2dhZ2UgKFY4IG9ubHkpXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOTERQYXJzZUVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb2RlcyBkJ2VycmV1ciBjb25zdGFudHNcbiAqL1xuZXhwb3J0IGNvbnN0IEVycm9yQ29kZXMgPSB7XG4gIC8vIEluaXRpYWxpc2F0aW9uXG4gIFBBUlNFUl9JTklUX0ZBSUxFRDogJ1BBUlNFUl9JTklUX0ZBSUxFRCcsXG4gIENIUk9OT19JTklUX0ZBSUxFRDogJ0NIUk9OT19JTklUX0ZBSUxFRCcsXG4gIFxuICAvLyBQYXJzaW5nXG4gIFBBUlNFX0ZBSUxFRDogJ1BBUlNFX0ZBSUxFRCcsXG4gIENIUk9OT19QQVJTRV9FUlJPUjogJ0NIUk9OT19QQVJTRV9FUlJPUicsXG4gIFxuICAvLyBDb25maWd1cmF0aW9uXG4gIFNFVFRJTkdTX0xPQURfRkFJTEVEOiAnU0VUVElOR1NfTE9BRF9GQUlMRUQnLFxuICBJTlZBTElEX0xBTkdVQUdFOiAnSU5WQUxJRF9MQU5HVUFHRScsXG59IGFzIGNvbnN0O1xuXG4iLCJpbXBvcnQgeyBOb3RpY2UsIE9ic2lkaWFuUHJvdG9jb2xEYXRhLCBQbHVnaW4gfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuaW1wb3J0IERhdGVQaWNrZXJNb2RhbCBmcm9tIFwiLi9tb2RhbHMvZGF0ZS1waWNrZXJcIjtcbmltcG9ydCBOTERQYXJzZXIsIHsgTkxEUmVzdWx0IH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyBOTERTZXR0aW5nc1RhYiwgTkxEU2V0dGluZ3MsIERFRkFVTFRfU0VUVElOR1MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IERhdGVTdWdnZXN0IGZyb20gXCIuL3N1Z2dlc3QvZGF0ZS1zdWdnZXN0XCI7XG5pbXBvcnQge1xuICBnZXRQYXJzZUNvbW1hbmQsXG4gIGdldEN1cnJlbnREYXRlQ29tbWFuZCxcbiAgZ2V0Q3VycmVudFRpbWVDb21tYW5kLFxuICBnZXROb3dDb21tYW5kLFxufSBmcm9tIFwiLi9jb21tYW5kc1wiO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVEYWlseU5vdGUsIHBhcnNlVHJ1dGh5LCB2YWxpZGF0ZVVyaVBhcmFtLCB2YWxpZGF0ZU1vbWVudEZvcm1hdCwgZ2V0QWN0aXZlRWRpdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IERhdGVGb3JtYXR0ZXIgfSBmcm9tIFwiLi9kYXRlLWZvcm1hdHRlclwiO1xuaW1wb3J0IEhpc3RvcnlNYW5hZ2VyIGZyb20gXCIuL2hpc3RvcnktbWFuYWdlclwiO1xuaW1wb3J0IENvbnRleHRBbmFseXplciBmcm9tIFwiLi9jb250ZXh0LWFuYWx5emVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IE5MRFBhcnNlRXJyb3IsIEVycm9yQ29kZXMgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIi4vd2luZG93LW1vbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYXR1cmFsTGFuZ3VhZ2VEYXRlcyBleHRlbmRzIFBsdWdpbiB7XG4gIHB1YmxpYyBwYXJzZXI6IE5MRFBhcnNlcjtcbiAgcHVibGljIHNldHRpbmdzOiBOTERTZXR0aW5ncztcbiAgcHVibGljIGhpc3RvcnlNYW5hZ2VyOiBIaXN0b3J5TWFuYWdlcjtcbiAgcHVibGljIGNvbnRleHRBbmFseXplcjogQ29udGV4dEFuYWx5emVyO1xuICBwcml2YXRlIG1lbW9yeU1vbml0b3JpbmdJbnRlcnZhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUVNT1JZX01PTklUT1JJTkdfSU5URVJWQUwgPSA2MDAwMDA7IC8vIFRvdXRlcyBsZXMgMTAgbWludXRlc1xuXG4gIGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgcGFyc2VyIGltbWVkaWF0ZWx5IChubyBuZWVkIHRvIHdhaXQgZm9yIG9uTGF5b3V0UmVhZHkpXG4gICAgdGhpcy5yZXNldFBhcnNlcigpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzbWFydCBzdWdnZXN0aW9uIG1hbmFnZXJzXG4gICAgdGhpcy5oaXN0b3J5TWFuYWdlciA9IG5ldyBIaXN0b3J5TWFuYWdlcih0aGlzKTtcbiAgICB0aGlzLmNvbnRleHRBbmFseXplciA9IG5ldyBDb250ZXh0QW5hbHl6ZXIodGhpcy5hcHAsIHRoaXMpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgaGlzdG9yeSBhc3luY2hyb25vdXNseVxuICAgIHRoaXMuaGlzdG9yeU1hbmFnZXIuaW5pdGlhbGl6ZSgpLmNhdGNoKChlcnI6IHVua25vd24pID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGluaXRpYWxpemluZyBoaXN0b3J5XCIsIHsgZXJyb3I6IGVyciB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtZGF0ZXNcIixcbiAgICAgIG5hbWU6IFwiUGFyc2UgbmF0dXJhbCBsYW5ndWFnZSBkYXRlXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwicmVwbGFjZVwiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtZGF0ZXMtbGlua1wiLFxuICAgICAgbmFtZTogXCJQYXJzZSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgKGFzIGxpbmspXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwibGlua1wiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtZGF0ZS1jbGVhblwiLFxuICAgICAgbmFtZTogXCJQYXJzZSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgKGFzIHBsYWluIHRleHQpXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwiY2xlYW5cIiksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwibmxwLXBhcnNlLXRpbWVcIixcbiAgICAgIG5hbWU6IFwiUGFyc2UgbmF0dXJhbCBsYW5ndWFnZSB0aW1lXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwidGltZVwiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtbm93XCIsXG4gICAgICBuYW1lOiBcIkluc2VydCB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0Tm93Q29tbWFuZCh0aGlzKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtdG9kYXlcIixcbiAgICAgIG5hbWU6IFwiSW5zZXJ0IHRoZSBjdXJyZW50IGRhdGVcIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBnZXRDdXJyZW50RGF0ZUNvbW1hbmQodGhpcyksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwibmxwLXRpbWVcIixcbiAgICAgIG5hbWU6IFwiSW5zZXJ0IHRoZSBjdXJyZW50IHRpbWVcIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBnZXRDdXJyZW50VGltZUNvbW1hbmQodGhpcyksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwibmxwLXBpY2tlclwiLFxuICAgICAgbmFtZTogXCJEYXRlIHBpY2tlclwiLFxuICAgICAgY2hlY2tDYWxsYmFjazogKGNoZWNraW5nOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmIChjaGVja2luZykge1xuICAgICAgICAgIHJldHVybiAhIWdldEFjdGl2ZUVkaXRvcih0aGlzLmFwcC53b3Jrc3BhY2UpO1xuICAgICAgICB9XG4gICAgICAgIG5ldyBEYXRlUGlja2VyTW9kYWwodGhpcy5hcHAsIHRoaXMpLm9wZW4oKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZFNldHRpbmdUYWIobmV3IE5MRFNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XG4gICAgdGhpcy5yZWdpc3Rlck9ic2lkaWFuUHJvdG9jb2xIYW5kbGVyKFwibmxkYXRlc1wiLCBwYXJhbXMgPT4gdGhpcy5hY3Rpb25IYW5kbGVyKHBhcmFtcykpO1xuICAgIHRoaXMucmVnaXN0ZXJFZGl0b3JTdWdnZXN0KG5ldyBEYXRlU3VnZ2VzdCh0aGlzLmFwcCwgdGhpcykpO1xuXG4gICAgLy8gRMOpbWFycmVyIGxlIG1vbml0b3JpbmcgZGUgbGEgbcOpbW9pcmVcbiAgICB0aGlzLnN0YXJ0TWVtb3J5TW9uaXRvcmluZygpO1xuICB9XG5cbiAgcmVzZXRQYXJzZXIoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucGFyc2VyID0gbmV3IE5MRFBhcnNlcih0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gICAgICBsb2dnZXIuZGVidWcoXCJQYXJzZXIgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XCIsIHsgbGFuZ3VhZ2VzOiB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgcGFyc2VFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgTkxEUGFyc2VFcnJvciBcbiAgICAgICAgPyBlcnJvciBcbiAgICAgICAgOiBuZXcgTkxEUGFyc2VFcnJvcihcbiAgICAgICAgICAgICdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYXJzZXInLFxuICAgICAgICAgICAgRXJyb3JDb2Rlcy5QQVJTRVJfSU5JVF9GQUlMRUQsXG4gICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgeyBvcmlnaW5hbEVycm9yOiBlcnJvciwgbGFuZ3VhZ2VzOiB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyB9XG4gICAgICAgICAgKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYXJzZXInLCB7XG4gICAgICAgIGNvZGU6IHBhcnNlRXJyb3IuY29kZSxcbiAgICAgICAgZXJyb3I6IHBhcnNlRXJyb3IubWVzc2FnZSxcbiAgICAgICAgY29udGV4dDogcGFyc2VFcnJvci5jb250ZXh0LFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBwYXJzZXIgd2l0aCBFbmdsaXNoIGFzIGRlZmF1bHQgaW4gY2FzZSBvZiBlcnJvciB0byBwcmV2ZW50IHBsdWdpbiBmcm9tIGNyYXNoaW5nIGNvbXBsZXRlbHlcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucGFyc2VyID0gbmV3IE5MRFBhcnNlcihbJ2VuJ10pO1xuICAgICAgICBsb2dnZXIuaW5mbygnUGFyc2VyIGluaXRpYWxpemVkIHdpdGggRW5nbGlzaCBmYWxsYmFjaycpO1xuICAgICAgICBcbiAgICAgICAgLy8gTm90aWZpZXIgbCd1dGlsaXNhdGV1ciB1bmlxdWVtZW50IHBvdXIgbGVzIGVycmV1cnMgY3JpdGlxdWVzXG4gICAgICAgIG5ldyBOb3RpY2UoXG4gICAgICAgICAgJ05hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXM6IEZhaWxlZCB0byBpbml0aWFsaXplIHdpdGggc2VsZWN0ZWQgbGFuZ3VhZ2VzLiBVc2luZyBFbmdsaXNoIGFzIGZhbGxiYWNrLicsXG4gICAgICAgICAgNTAwMFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZmFsbGJhY2tFcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIHBhcnNlciBldmVuIHdpdGggRW5nbGlzaCBmYWxsYmFjaycsIHsgZXJyb3I6IGZhbGxiYWNrRXJyb3IgfSk7XG4gICAgICAgIG5ldyBOb3RpY2UoXG4gICAgICAgICAgJ05hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXM6IENyaXRpY2FsIGVycm9yIC0gcGFyc2VyIGluaXRpYWxpemF0aW9uIGZhaWxlZC4gUGxlYXNlIHJlc3RhcnQgT2JzaWRpYW4uJyxcbiAgICAgICAgICAxMDAwMFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBSZXNldCBjb250ZXh0IHBhdHRlcm5zIHdoZW4gbGFuZ3VhZ2VzIGNoYW5nZVxuICAgIGlmICh0aGlzLmNvbnRleHRBbmFseXplcikge1xuICAgICAgdGhpcy5jb250ZXh0QW5hbHl6ZXIucmVzZXRQYXR0ZXJucygpO1xuICAgIH1cbiAgfVxuXG4gIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIC8vIEFycsOqdGVyIGxlIG1vbml0b3JpbmcgZGUgbGEgbcOpbW9pcmVcbiAgICB0aGlzLnN0b3BNZW1vcnlNb25pdG9yaW5nKCk7XG4gICAgXG4gICAgLy8gTmV0dG95ZXIgbGVzIHJlc3NvdXJjZXNcbiAgICBpZiAodGhpcy5jb250ZXh0QW5hbHl6ZXIpIHtcbiAgICAgIHRoaXMuY29udGV4dEFuYWx5emVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGlzdG9yeU1hbmFnZXIpIHtcbiAgICAgIHRoaXMuaGlzdG9yeU1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEw6ltYXJyZSBsZSBtb25pdG9yaW5nIHDDqXJpb2RpcXVlIGRlIGwndXRpbGlzYXRpb24gbcOpbW9pcmVcbiAgICovXG4gIHByaXZhdGUgc3RhcnRNZW1vcnlNb25pdG9yaW5nKCk6IHZvaWQge1xuICAgIC8vIExvZ2dlciBsZXMgc3RhdGlzdGlxdWVzIHRvdXRlcyBsZXMgMTAgbWludXRlc1xuICAgIHRoaXMubWVtb3J5TW9uaXRvcmluZ0ludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMubG9nTWVtb3J5VXNhZ2UoKTtcbiAgICB9LCB0aGlzLk1FTU9SWV9NT05JVE9SSU5HX0lOVEVSVkFMKTtcbiAgICBcbiAgICAvLyBMb2dnZXIgaW1tw6lkaWF0ZW1lbnQgYXUgZMOpbWFycmFnZVxuICAgIHRoaXMubG9nTWVtb3J5VXNhZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcnLDqnRlIGxlIG1vbml0b3JpbmcgZGUgbGEgbcOpbW9pcmVcbiAgICovXG4gIHByaXZhdGUgc3RvcE1lbW9yeU1vbml0b3JpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWVtb3J5TW9uaXRvcmluZ0ludGVydmFsICE9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLm1lbW9yeU1vbml0b3JpbmdJbnRlcnZhbCk7XG4gICAgICB0aGlzLm1lbW9yeU1vbml0b3JpbmdJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvZyBsZXMgc3RhdGlzdGlxdWVzIGQndXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1xuICAgKi9cbiAgcHJpdmF0ZSBsb2dNZW1vcnlVc2FnZSgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHM6IHtcbiAgICAgICAgcGFyc2luZ0NhY2hlPzogeyBzaXplOiBudW1iZXI7IG1heFNpemU6IG51bWJlciB9O1xuICAgICAgICBjb250ZXh0Q2FjaGU/OiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH07XG4gICAgICAgIGhpc3Rvcnk/OiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH07XG4gICAgICB9ID0ge307XG5cbiAgICAgIC8vIFN0YXRpc3RpcXVlcyBkdSBjYWNoZSBkZSBwYXJzaW5nXG4gICAgICBpZiAodGhpcy5wYXJzZXIpIHtcbiAgICAgICAgc3RhdHMucGFyc2luZ0NhY2hlID0gdGhpcy5wYXJzZXIuZ2V0Q2FjaGVTdGF0cygpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdGF0aXN0aXF1ZXMgZHUgY2FjaGUgZGUgY29udGV4dGVcbiAgICAgIGlmICh0aGlzLmNvbnRleHRBbmFseXplcikge1xuICAgICAgICBzdGF0cy5jb250ZXh0Q2FjaGUgPSB0aGlzLmNvbnRleHRBbmFseXplci5nZXRDYWNoZVN0YXRzKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0YXRpc3RpcXVlcyBkZSBsJ2hpc3RvcmlxdWVcbiAgICAgIGlmICh0aGlzLmhpc3RvcnlNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMuaGlzdG9yeU1hbmFnZXIuZ2V0SGlzdG9yeSgpLnRoZW4oaGlzdG9yeSA9PiB7XG4gICAgICAgICAgc3RhdHMuaGlzdG9yeSA9IHtcbiAgICAgICAgICAgIHNpemU6IE9iamVjdC5rZXlzKGhpc3RvcnkpLmxlbmd0aCxcbiAgICAgICAgICAgIG1heFNpemU6IDEwMCwgLy8gTUFYX0hJU1RPUllfU0laRVxuICAgICAgICAgIH07XG4gICAgICAgICAgXG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiVXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1wiLCBzdGF0cyk7XG4gICAgICAgIH0pLmNhdGNoKChlcnI6IHVua25vd24pID0+IHtcbiAgICAgICAgICBsb2dnZXIud2FybihcIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgbGVzIHN0YXRpc3RpcXVlcyBkZSBsJ2hpc3RvcmlxdWVcIiwgeyBlcnJvcjogZXJyIH0pO1xuICAgICAgICAgIC8vIExvZ2dlciBxdWFuZCBtw6ptZSBsZXMgYXV0cmVzIHN0YXRpc3RpcXVlc1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0cykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiVXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1wiLCBzdGF0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0cykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcIlV0aWxpc2F0aW9uIG3DqW1vaXJlIGRlcyBjYWNoZXNcIiwgc3RhdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiRXJyZXVyIGxvcnMgZHUgbW9uaXRvcmluZyBkZSBsYSBtw6ltb2lyZVwiLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2FkZWREYXRhID0gYXdhaXQgdGhpcy5sb2FkRGF0YSgpIGFzIFBhcnRpYWw8TkxEU2V0dGluZ3M+IHwgbnVsbDtcbiAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgbG9hZGVkRGF0YSk7XG4gICAgXG4gICAgLy8gRW5zdXJlIGxhbmd1YWdlcyBpcyBub3QgZW1wdHkgKHVzZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWNlc3NhcnkpXG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyB8fCB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2V0dGluZ3MubGFuZ3VhZ2VzID0gWy4uLkRFRkFVTFRfU0VUVElOR1MubGFuZ3VhZ2VzXTtcbiAgICB9XG4gICAgXG4gICAgLy8gU3luY2hyb25pemUgZmxhZ3Mgd2l0aCBsYW5ndWFnZXMgYXJyYXkgaWYgbmVjZXNzYXJ5XG4gICAgdGhpcy5zeW5jTGFuZ3VhZ2VGbGFncygpO1xuICB9XG5cbiAgLy8gU3luY2hyb25pemVzIGxhbmd1YWdlIGZsYWdzIChlbmdsaXNoLCBmcmVuY2gsIGV0Yy4pIHdpdGggbGFuZ3VhZ2VzIGFycmF5XG4gIHByaXZhdGUgc3luY0xhbmd1YWdlRmxhZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgbGFuZ3VhZ2VNYXA6IHsgW2tleTogc3RyaW5nXToga2V5b2YgTkxEU2V0dGluZ3MgfSA9IHtcbiAgICAgICdlbic6ICdlbmdsaXNoJyxcbiAgICAgICdqYSc6ICdqYXBhbmVzZScsXG4gICAgICAnZnInOiAnZnJlbmNoJyxcbiAgICAgICdkZSc6ICdnZXJtYW4nLFxuICAgICAgJ3B0JzogJ3BvcnR1Z3Vlc2UnLFxuICAgICAgJ25sJzogJ2R1dGNoJyxcbiAgICAgICdlcyc6ICdzcGFuaXNoJyxcbiAgICAgICdpdCc6ICdpdGFsaWFuJyxcbiAgICAgICdydSc6ICdydXNzaWFuJyxcbiAgICAgICd1ayc6ICd1a3JhaW5pYW4nLFxuICAgICAgJ3poLmhhbnQnOiAnY2hpbmVzZScsXG4gICAgfTtcbiAgICBcbiAgICAvLyBSZXNldCBhbGwgZmxhZ3NcbiAgICB0aGlzLnNldHRpbmdzLmVuZ2xpc2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLmphcGFuZXNlID0gZmFsc2U7XG4gICAgdGhpcy5zZXR0aW5ncy5mcmVuY2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLmdlcm1hbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MucG9ydHVndWVzZSA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MuZHV0Y2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLnNwYW5pc2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLml0YWxpYW4gPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLnJ1c3NpYW4gPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLnVrcmFpbmlhbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MuY2hpbmVzZSA9IGZhbHNlO1xuICAgIFxuICAgIC8vIEVuYWJsZSBmbGFncyBjb3JyZXNwb25kaW5nIHRvIGxhbmd1YWdlcyBpbiBhcnJheVxuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgZmxhZ0tleSA9IGxhbmd1YWdlTWFwW2xhbmddO1xuICAgICAgaWYgKGZsYWdLZXkpIHtcbiAgICAgICAgKHRoaXMuc2V0dGluZ3NbZmxhZ0tleV0gYXMgYm9vbGVhbikgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIG5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSBzdHJpbmcgYW5kIGZvcm1hdHMgaXQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0LlxuICAgKiBcbiAgICogVGhpcyBpcyB0aGUgY29yZSBwYXJzaW5nIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBjdXN0b20gZm9ybWF0IHN0cmluZy5cbiAgICogVGhlIGlucHV0IGlzIHZhbGlkYXRlZCBhbmQgc2FuaXRpemVkIGJlZm9yZSBwYXJzaW5nLlxuICAgKiBcbiAgICogQHBhcmFtIGRhdGVTdHJpbmcgLSBOYXR1cmFsIGxhbmd1YWdlIGRhdGUgc3RyaW5nIChlLmcuLCBcInRvZGF5XCIsIFwidG9tb3Jyb3dcIiwgXCJpbiAyIGRheXNcIiwgXCJuZXh0IE1vbmRheVwiKVxuICAgKiBAcGFyYW0gZm9ybWF0IC0gTW9tZW50LmpzIGZvcm1hdCBzdHJpbmcgKGUuZy4sIFwiWVlZWS1NTS1ERFwiLCBcIkREL01NL1lZWVlcIiwgXCJNTU1NIERvLCBZWVlZXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3QgY29udGFpbmluZyB0aGUgZm9ybWF0dGVkIHN0cmluZywgRGF0ZSBvYmplY3QsIGFuZCBNb21lbnQgb2JqZWN0XG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlc3VsdCA9IHBsdWdpbi5wYXJzZShcInRvbW9ycm93XCIsIFwiWVlZWS1NTS1ERFwiKTtcbiAgICogY29uc29sZS5sb2cocmVzdWx0LmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMjAyNS0wMS0wNlwiXG4gICAqIFxuICAgKiBjb25zdCByZXN1bHQyID0gcGx1Z2luLnBhcnNlKFwibmV4dCBNb25kYXlcIiwgXCJkZGRkLCBNTU1NIERvXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiTW9uZGF5LCBKYW51YXJ5IDZ0aFwiXG4gICAqIGBgYFxuICAgKi9cbiAgcGFyc2UoZGF0ZVN0cmluZzogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyk6IE5MRFJlc3VsdCB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgLy8gUGFyc2VyIG5vdCB5ZXQgaW5pdGlhbGl6ZWQsIGluaXRpYWxpemUgaXQgbm93XG4gICAgICB0aGlzLnJlc2V0UGFyc2VyKCk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgYXZhbnQgdXRpbGlzYXRpb25cbiAgICBjb25zdCBmb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQoZm9ybWF0KTtcbiAgICBpZiAoIWZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBmb3JtYXQgaW4gcGFyc2UoKVwiLCB7IGZvcm1hdCwgZXJyb3I6IGZvcm1hdFZhbGlkYXRpb24uZXJyb3IgfSk7XG4gICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXQgZW4gY2FzIGQnZXJyZXVyXG4gICAgICBmb3JtYXQgPSBERUZBVUxUX1NFVFRJTkdTLmZvcm1hdDtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGVyIGV0IHNhbml0aXplciBsJ2VudHLDqWUgdXRpbGlzYXRldXJcbiAgICBjb25zdCBzYW5pdGl6ZWRJbnB1dCA9IHZhbGlkYXRlVXJpUGFyYW0oZGF0ZVN0cmluZywgMjAwKTtcbiAgICBpZiAoIXNhbml0aXplZElucHV0KSB7XG4gICAgICBsb2dnZXIud2FybihcIkludmFsaWQgaW5wdXQgaW4gcGFyc2UoKVwiLCB7IGRhdGVTdHJpbmcgfSk7XG4gICAgICAvLyBSZXRvdXJuZXIgdW5lIGRhdGUgaW52YWxpZGUgcGx1dMO0dCBxdWUgZGUgcGxhbnRlclxuICAgICAgY29uc3QgaW52YWxpZERhdGUgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9ybWF0dGVkU3RyaW5nOiBcIkludmFsaWQgZGF0ZVwiLFxuICAgICAgICBkYXRlOiBpbnZhbGlkRGF0ZSxcbiAgICAgICAgbW9tZW50OiBtb21lbnQoaW52YWxpZERhdGUpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZXIuZ2V0UGFyc2VkRGF0ZShzYW5pdGl6ZWRJbnB1dCwgdGhpcy5zZXR0aW5ncy53ZWVrU3RhcnQpO1xuICAgIGNvbnN0IGZvcm1hdHRlZFN0cmluZyA9IERhdGVGb3JtYXR0ZXIuZm9ybWF0KGRhdGUsIGZvcm1hdCk7XG4gICAgaWYgKGZvcm1hdHRlZFN0cmluZyA9PT0gXCJJbnZhbGlkIGRhdGVcIikge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiSW5wdXQgZGF0ZSBjYW4ndCBiZSBwYXJzZWQgYnkgbmxkYXRlc1wiLCB7IGRhdGVTdHJpbmc6IHNhbml0aXplZElucHV0IH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmb3JtYXR0ZWRTdHJpbmcsXG4gICAgICBkYXRlLFxuICAgICAgbW9tZW50OiBtb21lbnQoZGF0ZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgc3RyaW5nIHVzaW5nIHRoZSBwbHVnaW4ncyBjb25maWd1cmVkIGRhdGUgZm9ybWF0LlxuICAgKiBcbiAgICogQXV0b21hdGljYWxseSBkZXRlY3RzIGlmIHRoZSBpbnB1dCBjb250YWlucyBhIHRpbWUgY29tcG9uZW50IGFuZCBpbmNsdWRlcyBpdCBpbiB0aGUgb3V0cHV0LlxuICAgKiBVc2VzIHRoZSBmb3JtYXQgZnJvbSBwbHVnaW4gc2V0dGluZ3MgKGRlZmF1bHQ6IFwiWVlZWS1NTS1ERFwiKS5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyAoZS5nLiwgXCJ0b2RheVwiLCBcInRvbW9ycm93XCIsIFwibmV4dCBNb25kYXkgYXQgM3BtXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3Qgd2l0aCBmb3JtYXR0ZWQgc3RyaW5nIHVzaW5nIGNvbmZpZ3VyZWQgZm9ybWF0XG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIElmIHNldHRpbmdzLmZvcm1hdCBpcyBcIllZWVktTU0tRERcIiBhbmQgc2V0dGluZ3MudGltZUZvcm1hdCBpcyBcIkhIOm1tXCJcbiAgICogY29uc3QgcmVzdWx0ID0gcGx1Z2luLnBhcnNlRGF0ZShcInRvbW9ycm93XCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9ybWF0dGVkU3RyaW5nKTsgLy8gXCIyMDI1LTAxLTA2XCJcbiAgICogXG4gICAqIGNvbnN0IHJlc3VsdDIgPSBwbHVnaW4ucGFyc2VEYXRlKFwibmV4dCBNb25kYXkgYXQgM3BtXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMjAyNS0wMS0wNiAxNTowMFwiXG4gICAqIGBgYFxuICAgKi9cbiAgcGFyc2VEYXRlKGRhdGVTdHJpbmc6IHN0cmluZyk6IE5MRFJlc3VsdCB7XG4gICAgLy8gVmFsaWRlciBldCBzYW5pdGl6ZXIgbCdlbnRyw6llIHV0aWxpc2F0ZXVyXG4gICAgY29uc3Qgc2FuaXRpemVkSW5wdXQgPSB2YWxpZGF0ZVVyaVBhcmFtKGRhdGVTdHJpbmcsIDIwMCk7XG4gICAgaWYgKCFzYW5pdGl6ZWRJbnB1dCkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJJbnZhbGlkIGlucHV0IGluIHBhcnNlRGF0ZSgpXCIsIHsgZGF0ZVN0cmluZyB9KTtcbiAgICAgIGNvbnN0IGludmFsaWREYXRlID0gbmV3IERhdGUoTmFOKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvcm1hdHRlZFN0cmluZzogXCJJbnZhbGlkIGRhdGVcIixcbiAgICAgICAgZGF0ZTogaW52YWxpZERhdGUsXG4gICAgICAgIG1vbWVudDogbW9tZW50KGludmFsaWREYXRlKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgZGUgZGF0ZVxuICAgIGNvbnN0IGRhdGVGb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQodGhpcy5zZXR0aW5ncy5mb3JtYXQpO1xuICAgIGlmICghZGF0ZUZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBkYXRlIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGhpcy5zZXR0aW5ncy5mb3JtYXQsIGVycm9yOiBkYXRlRm9ybWF0VmFsaWRhdGlvbi5lcnJvciB9KTtcbiAgICAgIC8vIFV0aWxpc2VyIGxlIGZvcm1hdCBwYXIgZMOpZmF1dFxuICAgICAgdGhpcy5zZXR0aW5ncy5mb3JtYXQgPSBERUZBVUxUX1NFVFRJTkdTLmZvcm1hdDtcbiAgICB9XG5cbiAgICAvLyAxLiBBc2sgdGhlIHBhcnNlciBpZiB0aW1lIGlzIGRldGVjdGVkXG4gICAgY29uc3QgaGFzVGltZSA9IHRoaXMucGFyc2VyLmhhc1RpbWVDb21wb25lbnQoc2FuaXRpemVkSW5wdXQpO1xuICAgIGxldCBmb3JtYXRUb1VzZSA9IHRoaXMuc2V0dGluZ3MuZm9ybWF0O1xuXG4gICAgLy8gMi4gSWYgdGltZSBpcyBkZXRlY3RlZC4uLlxuICAgIGlmIChoYXNUaW1lKSB7XG4gICAgICBjb25zdCB0aW1lRm9ybWF0ID0gdGhpcy5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIjtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgZGUgdGVtcHNcbiAgICAgIGNvbnN0IHRpbWVGb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQodGltZUZvcm1hdCk7XG4gICAgICBpZiAoIXRpbWVGb3JtYXRWYWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCB0aW1lIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGltZUZvcm1hdCwgZXJyb3I6IHRpbWVGb3JtYXRWYWxpZGF0aW9uLmVycm9yIH0pO1xuICAgICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXRcbiAgICAgICAgZm9ybWF0VG9Vc2UgPSBgJHt0aGlzLnNldHRpbmdzLmZvcm1hdH0gJHtERUZBVUxUX1NFVFRJTkdTLnRpbWVGb3JtYXR9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRJUDogSGVyZSB3ZSBmb3JtYXQgXCJEYXRlIFRJTUUuXCJcbiAgICAgICAgLy8gQnV0IEJFV0FSRTogaXQgaXMgdGhlIFwiZGF0ZS1zdWdnZXN0LnRzXCIgZmlsZSB0aGF0IHdpbGwgYWRkIHRoZSBbWyBdXS5cbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgdG91Y2ggZGF0ZS1zdWdnZXN0LCBpdCB3aWxsIG1ha2UgW1tEYXRlIFRpbWVdXS5cbiAgICAgICAgLy8gVG8gbWFrZSBbW0RhdGVdXSBUaW1lLCB3ZSBoYXZlIHRvIGJlIGNsZXZlci5cbiAgICAgICAgXG4gICAgICAgIGZvcm1hdFRvVXNlID0gYCR7Zm9ybWF0VG9Vc2V9ICR7dGltZUZvcm1hdH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGFyc2Uoc2FuaXRpemVkSW5wdXQsIGZvcm1hdFRvVXNlKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIG5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSByYW5nZSBzdHJpbmcuXG4gICAqIFxuICAgKiBTdXBwb3J0cyB2YXJpb3VzIHJhbmdlIGV4cHJlc3Npb25zOlxuICAgKiAtIFdlZWtkYXkgcmFuZ2VzOiBcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiIC8gXCJkZSBsdW5kaSDDoCB2ZW5kcmVkaVwiXG4gICAqIC0gV2VlayByYW5nZXM6IFwibmV4dCB3ZWVrXCIgLyBcInNlbWFpbmUgcHJvY2hhaW5lXCIgKHJldHVybnMgYWxsIGRheXMgb2YgdGhlIHdlZWspXG4gICAqIFxuICAgKiBUaGUgcmVzdWx0IGluY2x1ZGVzIGEgbGlzdCBvZiBhbGwgZGF0ZXMgaW4gdGhlIHJhbmdlIGZvciBlYXN5IGl0ZXJhdGlvbi5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHJhbmdlIHN0cmluZ1xuICAgKiBAcmV0dXJucyBOTERSYW5nZVJlc3VsdCBvYmplY3Qgd2l0aCBzdGFydC9lbmQgZGF0ZXMgYW5kIGRhdGUgbGlzdCwgb3IgbnVsbCBpZiBub3QgYSByYW5nZVxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByYW5nZSA9IHBsdWdpbi5wYXJzZURhdGVSYW5nZShcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiKTtcbiAgICogaWYgKHJhbmdlKSB7XG4gICAqICAgY29uc29sZS5sb2cocmFuZ2Uuc3RhcnREYXRlKTsgLy8gRGF0ZSBmb3IgTW9uZGF5XG4gICAqICAgY29uc29sZS5sb2cocmFuZ2UuZW5kRGF0ZSk7IC8vIERhdGUgZm9yIEZyaWRheVxuICAgKiAgIGNvbnNvbGUubG9nKHJhbmdlLmRhdGVMaXN0Py5sZW5ndGgpOyAvLyA1XG4gICAqICAgXG4gICAqICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBkYXRlcyBpbiByYW5nZVxuICAgKiAgIHJhbmdlLmRhdGVMaXN0Py5mb3JFYWNoKGRhdGUgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2coZGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpKTtcbiAgICogICB9KTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHBhcnNlRGF0ZVJhbmdlKGRhdGVTdHJpbmc6IHN0cmluZyk6IGltcG9ydChcIi4vcGFyc2VyXCIpLk5MRFJhbmdlUmVzdWx0IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgdGhpcy5yZXNldFBhcnNlcigpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGwnZW50csOpZSB1dGlsaXNhdGV1clxuICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdmFsaWRhdGVVcmlQYXJhbShkYXRlU3RyaW5nLCAyMDApO1xuICAgIGlmICghc2FuaXRpemVkSW5wdXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBpbnB1dCBpbiBwYXJzZURhdGVSYW5nZSgpXCIsIHsgZGF0ZVN0cmluZyB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBhcnNlci5nZXRQYXJzZWREYXRlUmFuZ2Uoc2FuaXRpemVkSW5wdXQsIHRoaXMuc2V0dGluZ3Mud2Vla1N0YXJ0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIHRpbWUgc3RyaW5nIHVzaW5nIHRoZSBwbHVnaW4ncyBjb25maWd1cmVkIHRpbWUgZm9ybWF0LlxuICAgKiBcbiAgICogRXh0cmFjdHMgb25seSB0aGUgdGltZSBjb21wb25lbnQgZnJvbSB0aGUgaW5wdXQgYW5kIGZvcm1hdHMgaXQgYWNjb3JkaW5nIHRvIHNldHRpbmdzLlxuICAgKiBVc2VzIHRoZSB0aW1lIGZvcm1hdCBmcm9tIHBsdWdpbiBzZXR0aW5ncyAoZGVmYXVsdDogXCJISDptbVwiKS5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSB0aW1lIHN0cmluZyAoZS5nLiwgXCJub3dcIiwgXCJpbiAyIGhvdXJzXCIsIFwiYXQgM3BtXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3Qgd2l0aCBmb3JtYXR0ZWQgdGltZSBzdHJpbmdcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gSWYgc2V0dGluZ3MudGltZUZvcm1hdCBpcyBcIkhIOm1tXCJcbiAgICogY29uc3QgcmVzdWx0ID0gcGx1Z2luLnBhcnNlVGltZShcImluIDIgaG91cnNcIik7XG4gICAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb3JtYXR0ZWRTdHJpbmcpOyAvLyBcIjE3OjMwXCIgKGlmIGN1cnJlbnQgdGltZSBpcyAxNTozMClcbiAgICogXG4gICAqIGNvbnN0IHJlc3VsdDIgPSBwbHVnaW4ucGFyc2VUaW1lKFwiYXQgM3BtXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMTU6MDBcIlxuICAgKiBgYGBcbiAgICovXG4gIHBhcnNlVGltZShkYXRlU3RyaW5nOiBzdHJpbmcpOiBOTERSZXN1bHQge1xuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGwnZW50csOpZSB1dGlsaXNhdGV1clxuICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdmFsaWRhdGVVcmlQYXJhbShkYXRlU3RyaW5nLCAyMDApO1xuICAgIGlmICghc2FuaXRpemVkSW5wdXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBpbnB1dCBpbiBwYXJzZVRpbWUoKVwiLCB7IGRhdGVTdHJpbmcgfSk7XG4gICAgICBjb25zdCBpbnZhbGlkRGF0ZSA9IG5ldyBEYXRlKE5hTik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IFwiSW52YWxpZCBkYXRlXCIsXG4gICAgICAgIGRhdGU6IGludmFsaWREYXRlLFxuICAgICAgICBtb21lbnQ6IG1vbWVudChpbnZhbGlkRGF0ZSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZhbGlkZXIgbGUgZm9ybWF0IGRlIHRlbXBzXG4gICAgY29uc3QgdGltZUZvcm1hdFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh0aGlzLnNldHRpbmdzLnRpbWVGb3JtYXQpO1xuICAgIGlmICghdGltZUZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCB0aW1lIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGhpcy5zZXR0aW5ncy50aW1lRm9ybWF0LCBlcnJvcjogdGltZUZvcm1hdFZhbGlkYXRpb24uZXJyb3IgfSk7XG4gICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXRcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlKHNhbml0aXplZElucHV0LCBERUZBVUxUX1NFVFRJTkdTLnRpbWVGb3JtYXQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBhcnNlKHNhbml0aXplZElucHV0LCB0aGlzLnNldHRpbmdzLnRpbWVGb3JtYXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHRleHQgc3RyaW5nIGNvbnRhaW5zIGEgdGltZSBjb21wb25lbnQuXG4gICAqIFxuICAgKiBVc2VmdWwgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdG8gaW5jbHVkZSB0aW1lIGZvcm1hdHRpbmcgaW4gdGhlIG91dHB1dC5cbiAgICogRGV0ZWN0cyB2YXJpb3VzIHRpbWUgZXhwcmVzc2lvbnMgaW4gYWxsIGVuYWJsZWQgbGFuZ3VhZ2VzLlxuICAgKiBcbiAgICogQHBhcmFtIHRleHQgLSBUZXh0IHN0cmluZyB0byBjaGVjayBmb3IgdGltZSBjb21wb25lbnRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBhIHRpbWUgY29tcG9uZW50IGlzIGRldGVjdGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJuZXh0IE1vbmRheSBhdCAzcG1cIik7IC8vIHRydWVcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJ0b21vcnJvd1wiKTsgLy8gZmFsc2VcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJpbiAyIGhvdXJzXCIpOyAvLyB0cnVlXG4gICAqIHBsdWdpbi5oYXNUaW1lQ29tcG9uZW50KFwiZGFucyAyIGhldXJlc1wiKTsgLy8gdHJ1ZSAoRnJlbmNoKVxuICAgKiBgYGBcbiAgICovXG4gIGhhc1RpbWVDb21wb25lbnQodGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgdGhpcy5yZXNldFBhcnNlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuaGFzVGltZUNvbXBvbmVudCh0ZXh0KTtcbiAgfVxuXG4gIGFzeW5jIGFjdGlvbkhhbmRsZXIocGFyYW1zOiBPYnNpZGlhblByb3RvY29sRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgd29ya3NwYWNlIH0gPSB0aGlzLmFwcDtcblxuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGxlcyBwYXJhbcOodHJlcyBVUkkgcG91ciDDqXZpdGVyIGxlcyBpbmplY3Rpb25zXG4gICAgY29uc3QgZGF5ID0gdmFsaWRhdGVVcmlQYXJhbShwYXJhbXMuZGF5LCAxMDApO1xuICAgIGlmICghZGF5KSB7XG4gICAgICBsb2dnZXIud2FybihcIkludmFsaWQgZGF5IHBhcmFtZXRlciBpbiBVUklcIiwgeyBkYXk6IHBhcmFtcy5kYXkgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZSA9IHRoaXMucGFyc2VEYXRlKGRheSk7XG4gICAgY29uc3QgbmV3UGFuZSA9IHBhcnNlVHJ1dGh5KHBhcmFtcy5uZXdQYW5lIHx8IFwieWVzXCIpO1xuXG4gICAgaWYgKGRhdGUubW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgY29uc3QgZGFpbHlOb3RlID0gYXdhaXQgZ2V0T3JDcmVhdGVEYWlseU5vdGUoZGF0ZS5tb21lbnQpO1xuICAgICAgYXdhaXQgd29ya3NwYWNlLmdldExlYWYobmV3UGFuZSkub3BlbkZpbGUoZGFpbHlOb3RlKTtcbiAgICB9XG4gIH1cbn0iXSwibmFtZXMiOlsicmVxdWlyZSQkMCIsInRoaXMiLCJkaWN0IiwiZW4iLCJqYSIsImZyIiwicHQiLCJkZSIsIm5sIiwiZXMiLCJpdCIsInJ1IiwidWsiLCJ6aCIsIm5vcm1hbGl6ZVBhdGgiLCJnZXREYWlseU5vdGUiLCJnZXRBbGxEYWlseU5vdGVzIiwiY3JlYXRlRGFpbHlOb3RlIiwiZXh0cmFjdFRlcm1zIiwibWF0Y2hBbnlQYXR0ZXJuIiwiT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkiLCJPUkRJTkFMX05VTUJFUl9QQVRURVJOIiwicGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiIsIk1hcmtkb3duVmlldyIsIk1vZGFsIiwiU2V0dGluZyIsIlBsdWdpblNldHRpbmdUYWIiLCJXRUVLREFZX0RJQ1RJT05BUlkiLCJGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSIsIk1PTlRIX0RJQ1RJT05BUlkiLCJJTlRFR0VSX1dPUkRfRElDVElPTkFSWSIsIlRJTUVfVU5JVF9ESUNUSU9OQVJZIiwiTlVNQkVSX1BBVFRFUk4iLCJwYXJzZU51bWJlclBhdHRlcm4iLCJZRUFSX1BBVFRFUk4iLCJwYXJzZVllYXIiLCJTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4iLCJTSU5HTEVfVElNRV9VTklUX1JFR0VYIiwiU0lOR0xFX1RJTUVfVU5JVF9OT19BQkJSX1BBVFRFUk4iLCJUSU1FX1VOSVRTX1BBVFRFUk4iLCJUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTiIsInBhcnNlRHVyYXRpb24iLCJjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudCIsIlBBVFRFUk5fV0lUSF9QUkVGSVgiLCJFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIiwiUEFUVEVSTiIsIkRBVEVfR1JPVVAiLCJEQVRFX1RPX0dST1VQIiwiTU9OVEhfTkFNRV9HUk9VUCIsIllFQVJfR1JPVVAiLCJFTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciIsIkVOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyIiwiUFJFRklYX0dST1VQIiwiRU5Nb250aE5hbWVQYXJzZXIiLCJZRUFSX05VTUJFUl9HUk9VUCIsIk1PTlRIX05VTUJFUl9HUk9VUCIsIkRBVEVfTlVNQkVSX0dST1VQIiwiTU9OVEhfR1JPVVAiLCJFTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIiLCJIT1VSX0dST1VQIiwiTUlOVVRFX0dST1VQIiwiU0VDT05EX0dST1VQIiwiQU1fUE1fSE9VUl9HUk9VUCIsIkVOVGltZUV4cHJlc3Npb25QYXJzZXIiLCJTVFJJQ1RfUEFUVEVSTiIsIkVOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIiLCJHUk9VUF9OVU1fVElNRVVOSVRTIiwiRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyIiwiRU5NZXJnZURhdGVSYW5nZVJlZmluZXIiLCJFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyIiwiZGF0ZXMuaW1wbHlTaW1pbGFyRGF0ZSIsInJlZmVyZW5jZXMubm93IiwicmVmZXJlbmNlcy50b2RheSIsInJlZmVyZW5jZXMueWVzdGVyZGF5IiwicmVmZXJlbmNlcy50b21vcnJvdyIsInJlZmVyZW5jZXMudG9uaWdodCIsInJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIiLCJjYXN1YWxSZWZlcmVuY2VzLmFmdGVybm9vbiIsImNhc3VhbFJlZmVyZW5jZXMuZXZlbmluZyIsImNhc3VhbFJlZmVyZW5jZXMubWlkbmlnaHQiLCJjYXN1YWxSZWZlcmVuY2VzLm1vcm5pbmciLCJjYXN1YWxSZWZlcmVuY2VzLm5vb24iLCJXRUVLREFZX0dST1VQIiwiUE9TVEZJWF9HUk9VUCIsIk1PRElGSUVSX1dPUkRfR1JPVVAiLCJSRUxBVElWRV9XT1JEX0dST1VQIiwiUEFUVEVSTl9OT19BQkJSIiwiRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIiwiaGFzSW1wbGllZEVhcmxpZXJSZWZlcmVuY2VEYXRlIiwiaGFzSW1wbGllZExhdGVyUmVmZXJlbmNlRGF0ZSIsImNhc3VhbCIsInN0cmljdCIsIkdCIiwicGFyc2UiLCJwYXJzZURhdGUiLCJTVUZGSVhfR1JPVVAiLCJGSVJTVF9SRUdfUEFUVEVSTiIsIlNFQ09ORF9SRUdfUEFUVEVSTiIsIlRJTUVfR1JPVVAiLCJjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uIiwiY3JlYXRlQ29uZmlndXJhdGlvbiIsIkRFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlciIsIkZSVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIiLCJGUlRpbWVVbml0UmVsYXRpdmVGb3JtYXRQYXJzZXIiLCJOVU1CRVIiLCJXRUVLREFZX09GRlNFVCIsIkRBWV9HUk9VUCIsInpoU3RyaW5nVG9OdW1iZXIiLCJ6aFN0cmluZ1RvWWVhciIsIk5VTUJFUl9HUk9VUCIsIlVOSVRfR1JPVVAiLCJEQVlfR1JPVVBfMSIsIlpIX0FNX1BNX0hPVVJfR1JPVVBfMSIsIlpIX0FNX1BNX0hPVVJfR1JPVVBfMiIsIkRBWV9HUk9VUF8zIiwiWkhfQU1fUE1fSE9VUl9HUk9VUF8zIiwiTk9XX0dST1VQIiwiVElNRV9HUk9VUF8xIiwiVElNRV9HUk9VUF8yIiwiVElNRV9HUk9VUF8zIiwiUkVHRVhfUEFSVFMiLCJ5ZWFyIiwiQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmciLCJBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIiwicmVmZXJlbmNlcy50aGVEYXlCZWZvcmUiLCJyZWZlcmVuY2VzLmV2ZW5pbmciLCJyZWZlcmVuY2VzLm1vcm5pbmciLCJyZWZlcmVuY2VzLm5vb24iLCJyZWZlcmVuY2VzLmxhc3ROaWdodCIsInJlZmVyZW5jZXMueWVzdGVyZGF5RXZlbmluZyIsInJlZmVyZW5jZXMubWlkbmlnaHQiLCJFTkNhc3VhbERhdGVQYXJzZXIiLCJFTkNhc3VhbFRpbWVQYXJzZXIiLCJFTldlZWtkYXlQYXJzZXIiLCJUSU1FX1VOSVRfTk9fQUJCUl9ESUNUSU9OQVJZIiwiZW4uc3RyaWN0IiwiZW4uY2FzdWFsIiwiY2hyb25vLmVuIiwiRWRpdG9yU3VnZ2VzdCIsIkNMRUFOVVBfSU5URVJWQUwiLCJQbHVnaW4iLCJOb3RpY2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUVBLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBTyxFQUFFLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsSUFBSSxRQUFRLEdBQUdBLDhCQUFtQixDQUFDO0FBQ25DO0FBQ0EsTUFBTSx5QkFBeUIsR0FBRyxZQUFZLENBQUM7QUFDL0MsTUFBTSwwQkFBMEIsR0FBRyxZQUFZLENBQUM7QUFDaEQsTUFBTSwyQkFBMkIsR0FBRyxTQUFTLENBQUM7QUFDOUMsTUFBTSw2QkFBNkIsR0FBRyxXQUFXLENBQUM7QUFDbEQsTUFBTSwwQkFBMEIsR0FBRyxNQUFNLENBQUM7QUFDMUM7QUFDQSxTQUFTLDhCQUE4QixDQUFDLFdBQVcsRUFBRTtBQUNyRDtBQUNBLElBQUksTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDekUsSUFBSSxPQUFPLGFBQWEsSUFBSSxhQUFhLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxFQUFFLE9BQU8sQ0FBQztBQUMzRSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLG9C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Q0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6RCxRQUFRLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN4QixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDbEQsUUFBUSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUI7QUFDQTtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssR0FBRztBQUNqQyxZQUFZLFNBQVM7QUFDckI7QUFDQTtBQUNBLFlBQVksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQyxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsSUFBSSxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUNELFNBQVMsUUFBUSxDQUFDLFFBQVEsRUFBRTtBQUM1QixJQUFJLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRSxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsUUFBUSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxD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QUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQy9DLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDL0MsQ0FBQyxFQUFFLEtBQUssS0FBSyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7O0FDNUJsQixTQUFTLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUU7QUFDckQsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUM5QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFDTSxTQUFTLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUU7QUFDckQsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUNoRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDcEQsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztBQUM5RCxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFD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QUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRztBQUNkLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRztBQUNkLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRTtBQUNaLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksS0FBSyxFQUFFLEdBQUc7QUFDZCxJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksS0FBSyxFQUFFLEdBQUc7QUFDZCxJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElB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LEVBQUUsQ0FBQyxDQUFDO0FBQzFGLEtBQUs7QUFDTCxJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQ2QsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxLQUFLLEVBQUUsR0FBRztBQUNkLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDWCxJQUFJLElBQUksRUFBRSxFQUFFO0FBQ1osSUFBSSxJQUFJLEVBQUUsRUFBRTtBQUNaLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFB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TCxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3hCLFFBQVEsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxRQUFRLE9BQU8sUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlCLEtBQUs7QUFDTCxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCLFFBQVEsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxRQUFRLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTCxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCLFFBQVEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QyxRQUFRLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTCxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCLFFBQVEsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxRQUFRLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTCxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCLFFBQVEsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QyxRQUFRLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLEtBQUs7QUFDTCxJQUFJLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZCLFFBQVEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQyxRQUFRLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxD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SUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxTQUFTLEVBQUUsRUFBRTtBQUNqQixJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ2IsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUNiLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLFVBQVUsRUFBRSxFQUFFO0FBQ2xCLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDYixJQUFJLE1BQU0sRUFBRSxFQUFF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UUFBUSxXQUFXO0FBQzNCLFlBQVksS0FBSyxRQUFRLENBQUM7QUFDMUIsWUFBWSxLQUFLLFVBQVU7QUFDM0IsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxXQUFXLENBQUM7QUFDN0IsWUFBWSxLQUFLLGFBQWE7QUFDOUIsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxRQUFRLENBQUM7QUFDMUIsWUFBWSxLQUFLLFVBQVU7QUFDM0IsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELGdCQUFnQixNQUFN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Z0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssVUFBVTtBQUMzQixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxjQUFjO0FBQy9CLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLFNBQVM7QUFDMUIsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVD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 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL29ic2lkaWFuLWRhaWx5LW5vdGVzLWludGVyZmFjZS9kaXN0L21haW4uanMiLCJzcmMvd2luZG93LW1vbWVudC50cyIsInNyYy9kYXRlLWZvcm1hdHRlci50cyIsIm5vZGVfbW9kdWxlcy9yb2RkZWgtaTE4bi9kaXN0L2kxOG4uanMiLCJzcmMvbGFuZy9lbi50cyIsInNyYy9sYW5nL2phLnRzIiwic3JjL2xhbmcvZnIudHMiLCJzcmMvbGFuZy9wdC50cyIsInNyYy9sYW5nL2RlLnRzIiwic3JjL2xhbmcvbmwudHMiLCJzcmMvbGFuZy9lcy50cyIsInNyYy9sYW5nL2l0LnRzIiwic3JjL2xhbmcvcnUudHMiLCJzcmMvbGFuZy91ay50cyIsInNyYy9sYW5nL3poLnRzIiwic3JjL2xhbmcva28udHMiLCJzcmMvbGFuZy9oZWxwZXIudHMiLCJzcmMvdHJhbnNsYXRpb24tY29sbGVjdG9yLnRzIiwic3JjL3V0aWxzLnRzIiwic3JjL21vZGFscy9oaXN0b3J5LW1hbmFnZXItbW9kYWwudHMiLCJzcmMvc2V0dGluZ3MudHMiLCJzcmMvbW9kYWxzL2RhdGUtcGlja2VyLnRzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3R5cGVzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3V0aWxzL2RhdGVzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3RpbWV6b25lLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL3Jlc3VsdHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vdXRpbHMvcGF0dGVybi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jYWxjdWxhdGlvbi95ZWFycy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5Nb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOWWVhck1vbnRoRGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5UaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9hYnN0cmFjdFJlZmluZXJzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NhbGN1bGF0aW9uL21lcmdpbmdDYWxjdWxhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VOTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3JlZmluZXJzL0V4dHJhY3RUaW1lem9uZUFiYnJSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9PdmVybGFwUmVtb3ZhbFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY2FsY3VsYXRpb24vd2Vla2RheXMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3JlZmluZXJzL0ZvcndhcmREYXRlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcmVmaW5lcnMvVW5saWtlbHlGb3JtYXRGaWx0ZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbmZpZ3VyYXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTkNhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3BhcnNlcnMvRU5XZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcGFyc2Vycy9FTlJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9wYXJzZXJzL0VOVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VuL3JlZmluZXJzL0VOTWVyZ2VSZWxhdGl2ZUFmdGVyRGF0ZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVGb2xsb3dCeURhdGVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vcmVmaW5lcnMvRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9yZWZpbmVycy9FTlVubGlrZWx5Rm9ybWF0RmlsdGVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZW4vY29uZmlndXJhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9jaHJvbm8uanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9yZWZpbmVycy9ERU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3JlZmluZXJzL0RFTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9kZS9wYXJzZXJzL0RFQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2RlL3BhcnNlcnMvREVUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvcGFyc2Vycy9ERVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZGUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3BhcnNlcnMvRlJDYXN1YWxUaW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcGFyc2Vycy9GUlRpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcmVmaW5lcnMvRlJNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3JlZmluZXJzL0ZSTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZnIvcGFyc2Vycy9GUldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL3BhcnNlcnMvRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9mci9wYXJzZXJzL0ZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcGFyc2Vycy9KUFN0YW5kYXJkUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcmVmaW5lcnMvSlBNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9wYXJzZXJzL0pQQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3BhcnNlcnMvSlBXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvamEvcGFyc2Vycy9KUFNsYXNoRGF0ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3BhcnNlcnMvSlBUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL3JlZmluZXJzL0pQTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9yZWZpbmVycy9KUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9qYS9wYXJzZXJzL0pQV2Vla2RheVdpdGhQYXJlbnRoZXNlc1BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2phL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcGFyc2Vycy9QVFdlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9wYXJzZXJzL1BUVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9yZWZpbmVycy9QVE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcmVmaW5lcnMvUFRNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9wYXJzZXJzL1BUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcHQvcGFyc2Vycy9QVENhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9wdC9wYXJzZXJzL1BUQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3B0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcmVmaW5lcnMvTkxNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9yZWZpbmVycy9OTE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTENhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvbmwvcGFyc2Vycy9OTE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxNb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MU2xhc2hNb250aEZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MQ2FzdWFsRGF0ZVRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL3BhcnNlcnMvTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ubC9wYXJzZXJzL05MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL25sL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFucy9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcGFyc2Vycy9aSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcGFyc2Vycy9aSEhhbnNSZWxhdGlvbldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcGFyc2Vycy9aSEhhbnRDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFudC9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50RGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcGFyc2Vycy9aSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcGFyc2Vycy9aSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW50L3BhcnNlcnMvWkhIYW50V2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFudC9yZWZpbmVycy9aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9oYW5zL3BhcnNlcnMvWkhIYW5zQ2FzdWFsRGF0ZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvcmVmaW5lcnMvWkhIYW5zTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvemgvaGFucy9yZWZpbmVycy9aSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3poL2hhbnMvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy96aC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcGFyc2Vycy9SVU1vbnRoTmFtZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3JlZmluZXJzL1JVTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcmVmaW5lcnMvUlVNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvcnUvcGFyc2Vycy9SVUNhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L3BhcnNlcnMvUlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9ydS9wYXJzZXJzL1JVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3J1L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcGFyc2Vycy9FU1dlZWtkYXlQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9yZWZpbmVycy9FU01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcmVmaW5lcnMvRVNNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZXMvcGFyc2Vycy9FU0Nhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9lcy9wYXJzZXJzL0VTQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VzL3BhcnNlcnMvRVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2VzL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9wYXJzZXJzL1VLTW9udGhOYW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcmVmaW5lcnMvVUtNZXJnZURhdGVSYW5nZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9yZWZpbmVycy9VS01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS0Nhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy91ay9wYXJzZXJzL1VLQ2FzdWFsVGltZVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtXZWVrZGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvcGFyc2Vycy9VS1JlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3VrL3BhcnNlcnMvVUtUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdWsvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRNb250aE5hbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVFNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3JlZmluZXJzL0lUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcmVmaW5lcnMvSVRNZXJnZURhdGVUaW1lUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvcGFyc2Vycy9JVENhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3BhcnNlcnMvSVRSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9pdC9wYXJzZXJzL0lUVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2l0L3JlZmluZXJzL0lUTWVyZ2VSZWxhdGl2ZURhdGVSZWZpbmVyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvaXQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9wYXJzZXJzL1NWV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3N2L3BhcnNlcnMvU1ZNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9zdi9wYXJzZXJzL1NWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3N2L3BhcnNlcnMvU1ZDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvc3YvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJVGltZUV4cHJlc3Npb25QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9wYXJzZXJzL0ZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3BhcnNlcnMvRklDYXN1YWxUaW1lUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvZmkvcGFyc2Vycy9GSUNhc3VhbERhdGVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9yZWZpbmVycy9GSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL2ZpL3JlZmluZXJzL0ZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy9maS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL2NvbnN0YW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklTdGFuZGFyZFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklNb250aFllYXJQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJWWVhclBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklDYXN1YWxEYXRlUGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSUNhc3VhbFRpbWVQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9wYXJzZXJzL1ZJV2Vla2RheVBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lRXhwcmVzc2lvblBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3BhcnNlcnMvVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL2Nocm9uby1ub2RlL2Rpc3QvZXNtL2xvY2FsZXMvdmkvcGFyc2Vycy9WSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9yZWZpbmVycy9WSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9sb2NhbGVzL3ZpL3JlZmluZXJzL1ZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9yZWZpbmVycy9WSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanMiLCJub2RlX21vZHVsZXMvY2hyb25vLW5vZGUvZGlzdC9lc20vbG9jYWxlcy92aS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jaHJvbm8tbm9kZS9kaXN0L2VzbS9pbmRleC5qcyIsInNyYy9sb2dnZXIudHMiLCJzcmMvY2hyb25vLnRzIiwic3JjL3RpbWUtZGV0ZWN0b3IudHMiLCJzcmMvbHJ1LWNhY2hlLnRzIiwic3JjL3BhcnNlci50cyIsInNyYy9zdWdnZXN0L2RhdGUtc3VnZ2VzdC50cyIsInNyYy9jb21tYW5kcy50cyIsInNyYy9oaXN0b3J5LW1hbmFnZXIudHMiLCJzcmMvY29udGV4dC1hbmFseXplci50cyIsInNyYy9lcnJvcnMudHMiLCJzcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBvYnNpZGlhbiA9IHJlcXVpcmUoJ29ic2lkaWFuJyk7XG5cbmNvbnN0IERFRkFVTFRfREFJTFlfTk9URV9GT1JNQVQgPSBcIllZWVktTU0tRERcIjtcbmNvbnN0IERFRkFVTFRfV0VFS0xZX05PVEVfRk9STUFUID0gXCJnZ2dnLVtXXXd3XCI7XG5jb25zdCBERUZBVUxUX01PTlRITFlfTk9URV9GT1JNQVQgPSBcIllZWVktTU1cIjtcbmNvbnN0IERFRkFVTFRfUVVBUlRFUkxZX05PVEVfRk9STUFUID0gXCJZWVlZLVtRXVFcIjtcbmNvbnN0IERFRkFVTFRfWUVBUkxZX05PVEVfRk9STUFUID0gXCJZWVlZXCI7XG5cbmZ1bmN0aW9uIHNob3VsZFVzZVBlcmlvZGljTm90ZXNTZXR0aW5ncyhwZXJpb2RpY2l0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IHdpbmRvdy5hcHAucGx1Z2lucy5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKTtcbiAgICByZXR1cm4gcGVyaW9kaWNOb3RlcyAmJiBwZXJpb2RpY05vdGVzLnNldHRpbmdzPy5bcGVyaW9kaWNpdHldPy5lbmFibGVkO1xufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYGRhaWx5LW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXREYWlseU5vdGVTZXR0aW5ncygpIHtcbiAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCB7IGludGVybmFsUGx1Z2lucywgcGx1Z2lucyB9ID0gd2luZG93LmFwcDtcbiAgICAgICAgaWYgKHNob3VsZFVzZVBlcmlvZGljTm90ZXNTZXR0aW5ncyhcImRhaWx5XCIpKSB7XG4gICAgICAgICAgICBjb25zdCB7IGZvcm1hdCwgZm9sZGVyLCB0ZW1wbGF0ZSB9ID0gcGx1Z2lucy5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKT8uc2V0dGluZ3M/LmRhaWx5IHx8IHt9O1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCB8fCBERUZBVUxUX0RBSUxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgICAgIGZvbGRlcjogZm9sZGVyPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGVtcGxhdGU/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGZvbGRlciwgZm9ybWF0LCB0ZW1wbGF0ZSB9ID0gaW50ZXJuYWxQbHVnaW5zLmdldFBsdWdpbkJ5SWQoXCJkYWlseS1ub3Rlc1wiKT8uaW5zdGFuY2U/Lm9wdGlvbnMgfHwge307XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmb3JtYXQ6IGZvcm1hdCB8fCBERUZBVUxUX0RBSUxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBmb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gZGFpbHkgbm90ZSBzZXR0aW5ncyBmb3VuZCFcIiwgZXJyKTtcbiAgICB9XG59XG4vKipcbiAqIFJlYWQgdGhlIHVzZXIgc2V0dGluZ3MgZm9yIHRoZSBgd2Vla2x5LW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXRXZWVrbHlOb3RlU2V0dGluZ3MoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICAgICAgY29uc3QgY2FsZW5kYXJTZXR0aW5ncyA9IHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwiY2FsZW5kYXJcIik/Lm9wdGlvbnM7XG4gICAgICAgIGNvbnN0IHBlcmlvZGljTm90ZXNTZXR0aW5ncyA9IHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik/LnNldHRpbmdzPy53ZWVrbHk7XG4gICAgICAgIGlmIChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJ3ZWVrbHlcIikpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0OiBwZXJpb2RpY05vdGVzU2V0dGluZ3MuZm9ybWF0IHx8IERFRkFVTFRfV0VFS0xZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgICAgIGZvbGRlcjogcGVyaW9kaWNOb3Rlc1NldHRpbmdzLmZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHBlcmlvZGljTm90ZXNTZXR0aW5ncy50ZW1wbGF0ZT8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gY2FsZW5kYXJTZXR0aW5ncyB8fCB7fTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1hdDogc2V0dGluZ3Mud2Vla2x5Tm90ZUZvcm1hdCB8fCBERUZBVUxUX1dFRUtMWV9OT1RFX0ZPUk1BVCxcbiAgICAgICAgICAgIGZvbGRlcjogc2V0dGluZ3Mud2Vla2x5Tm90ZUZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogc2V0dGluZ3Mud2Vla2x5Tm90ZVRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gd2Vla2x5IG5vdGUgc2V0dGluZ3MgZm91bmQhXCIsIGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYHBlcmlvZGljLW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXRNb250aGx5Tm90ZVNldHRpbmdzKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJtb250aGx5XCIpICYmXG4gICAgICAgICAgICBwbHVnaW5NYW5hZ2VyLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpPy5zZXR0aW5ncz8ubW9udGhseSkgfHxcbiAgICAgICAgICAgIHt9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9ybWF0OiBzZXR0aW5ncy5mb3JtYXQgfHwgREVGQVVMVF9NT05USExZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBzZXR0aW5ncy5mb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHNldHRpbmdzLnRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gbW9udGhseSBub3RlIHNldHRpbmdzIGZvdW5kIVwiLCBlcnIpO1xuICAgIH1cbn1cbi8qKlxuICogUmVhZCB0aGUgdXNlciBzZXR0aW5ncyBmb3IgdGhlIGBwZXJpb2RpYy1ub3Rlc2AgcGx1Z2luXG4gKiB0byBrZWVwIGJlaGF2aW9yIG9mIGNyZWF0aW5nIGEgbmV3IG5vdGUgaW4tc3luYy5cbiAqL1xuZnVuY3Rpb24gZ2V0UXVhcnRlcmx5Tm90ZVNldHRpbmdzKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGx1Z2luTWFuYWdlciA9IHdpbmRvdy5hcHAucGx1Z2lucztcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IChzaG91bGRVc2VQZXJpb2RpY05vdGVzU2V0dGluZ3MoXCJxdWFydGVybHlcIikgJiZcbiAgICAgICAgICAgIHBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik/LnNldHRpbmdzPy5xdWFydGVybHkpIHx8XG4gICAgICAgICAgICB7fTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1hdDogc2V0dGluZ3MuZm9ybWF0IHx8IERFRkFVTFRfUVVBUlRFUkxZX05PVEVfRk9STUFULFxuICAgICAgICAgICAgZm9sZGVyOiBzZXR0aW5ncy5mb2xkZXI/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICAgICAgdGVtcGxhdGU6IHNldHRpbmdzLnRlbXBsYXRlPy50cmltKCkgfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmluZm8oXCJObyBjdXN0b20gcXVhcnRlcmx5IG5vdGUgc2V0dGluZ3MgZm91bmQhXCIsIGVycik7XG4gICAgfVxufVxuLyoqXG4gKiBSZWFkIHRoZSB1c2VyIHNldHRpbmdzIGZvciB0aGUgYHBlcmlvZGljLW5vdGVzYCBwbHVnaW5cbiAqIHRvIGtlZXAgYmVoYXZpb3Igb2YgY3JlYXRpbmcgYSBuZXcgbm90ZSBpbi1zeW5jLlxuICovXG5mdW5jdGlvbiBnZXRZZWFybHlOb3RlU2V0dGluZ3MoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBwbHVnaW5NYW5hZ2VyID0gd2luZG93LmFwcC5wbHVnaW5zO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gKHNob3VsZFVzZVBlcmlvZGljTm90ZXNTZXR0aW5ncyhcInllYXJseVwiKSAmJlxuICAgICAgICAgICAgcGx1Z2luTWFuYWdlci5nZXRQbHVnaW4oXCJwZXJpb2RpYy1ub3Rlc1wiKT8uc2V0dGluZ3M/LnllYXJseSkgfHxcbiAgICAgICAgICAgIHt9O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9ybWF0OiBzZXR0aW5ncy5mb3JtYXQgfHwgREVGQVVMVF9ZRUFSTFlfTk9URV9GT1JNQVQsXG4gICAgICAgICAgICBmb2xkZXI6IHNldHRpbmdzLmZvbGRlcj8udHJpbSgpIHx8IFwiXCIsXG4gICAgICAgICAgICB0ZW1wbGF0ZTogc2V0dGluZ3MudGVtcGxhdGU/LnRyaW0oKSB8fCBcIlwiLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhcIk5vIGN1c3RvbSB5ZWFybHkgbm90ZSBzZXR0aW5ncyBmb3VuZCFcIiwgZXJyKTtcbiAgICB9XG59XG5cbi8vIENyZWRpdDogQGNyZWF0aW9uaXgvcGF0aC5qc1xuZnVuY3Rpb24gam9pbiguLi5wYXJ0U2VnbWVudHMpIHtcbiAgICAvLyBTcGxpdCB0aGUgaW5wdXRzIGludG8gYSBsaXN0IG9mIHBhdGggY29tbWFuZHMuXG4gICAgbGV0IHBhcnRzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJ0U2VnbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KHBhcnRTZWdtZW50c1tpXS5zcGxpdChcIi9cIikpO1xuICAgIH1cbiAgICAvLyBJbnRlcnByZXQgdGhlIHBhdGggY29tbWFuZHMgdG8gZ2V0IHRoZSBuZXcgcmVzb2x2ZWQgcGF0aC5cbiAgICBjb25zdCBuZXdQYXJ0cyA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHBhcnQgPSBwYXJ0c1tpXTtcbiAgICAgICAgLy8gUmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXNcbiAgICAgICAgLy8gQWxzbyByZW1vdmUgXCIuXCIgc2VnbWVudHNcbiAgICAgICAgaWYgKCFwYXJ0IHx8IHBhcnQgPT09IFwiLlwiKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIC8vIFB1c2ggbmV3IHBhdGggc2VnbWVudHMuXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG5ld1BhcnRzLnB1c2gocGFydCk7XG4gICAgfVxuICAgIC8vIFByZXNlcnZlIHRoZSBpbml0aWFsIHNsYXNoIGlmIHRoZXJlIHdhcyBvbmUuXG4gICAgaWYgKHBhcnRzWzBdID09PSBcIlwiKVxuICAgICAgICBuZXdQYXJ0cy51bnNoaWZ0KFwiXCIpO1xuICAgIC8vIFR1cm4gYmFjayBpbnRvIGEgc2luZ2xlIHN0cmluZyBwYXRoLlxuICAgIHJldHVybiBuZXdQYXJ0cy5qb2luKFwiL1wiKTtcbn1cbmZ1bmN0aW9uIGJhc2VuYW1lKGZ1bGxQYXRoKSB7XG4gICAgbGV0IGJhc2UgPSBmdWxsUGF0aC5zdWJzdHJpbmcoZnVsbFBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSk7XG4gICAgaWYgKGJhc2UubGFzdEluZGV4T2YoXCIuXCIpICE9IC0xKVxuICAgICAgICBiYXNlID0gYmFzZS5zdWJzdHJpbmcoMCwgYmFzZS5sYXN0SW5kZXhPZihcIi5cIikpO1xuICAgIHJldHVybiBiYXNlO1xufVxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlRm9sZGVyRXhpc3RzKHBhdGgpIHtcbiAgICBjb25zdCBkaXJzID0gcGF0aC5yZXBsYWNlKC9cXFxcL2csIFwiL1wiKS5zcGxpdChcIi9cIik7XG4gICAgZGlycy5wb3AoKTsgLy8gcmVtb3ZlIGJhc2VuYW1lXG4gICAgaWYgKGRpcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGRpciA9IGpvaW4oLi4uZGlycyk7XG4gICAgICAgIGlmICghd2luZG93LmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoZGlyKSkge1xuICAgICAgICAgICAgYXdhaXQgd2luZG93LmFwcC52YXVsdC5jcmVhdGVGb2xkZXIoZGlyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGdldE5vdGVQYXRoKGRpcmVjdG9yeSwgZmlsZW5hbWUpIHtcbiAgICBpZiAoIWZpbGVuYW1lLmVuZHNXaXRoKFwiLm1kXCIpKSB7XG4gICAgICAgIGZpbGVuYW1lICs9IFwiLm1kXCI7XG4gICAgfVxuICAgIGNvbnN0IHBhdGggPSBvYnNpZGlhbi5ub3JtYWxpemVQYXRoKGpvaW4oZGlyZWN0b3J5LCBmaWxlbmFtZSkpO1xuICAgIGF3YWl0IGVuc3VyZUZvbGRlckV4aXN0cyhwYXRoKTtcbiAgICByZXR1cm4gcGF0aDtcbn1cbmFzeW5jIGZ1bmN0aW9uIGdldFRlbXBsYXRlSW5mbyh0ZW1wbGF0ZSkge1xuICAgIGNvbnN0IHsgbWV0YWRhdGFDYWNoZSwgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgdGVtcGxhdGVQYXRoID0gb2JzaWRpYW4ubm9ybWFsaXplUGF0aCh0ZW1wbGF0ZSk7XG4gICAgaWYgKHRlbXBsYXRlUGF0aCA9PT0gXCIvXCIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXCJcIiwgbnVsbF0pO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZUZpbGUgPSBtZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KHRlbXBsYXRlUGF0aCwgXCJcIik7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgdmF1bHQuY2FjaGVkUmVhZCh0ZW1wbGF0ZUZpbGUpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICBjb25zdCBJRm9sZEluZm8gPSB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLmxvYWQodGVtcGxhdGVGaWxlKTtcbiAgICAgICAgcmV0dXJuIFtjb250ZW50cywgSUZvbGRJbmZvXTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcmVhZCB0aGUgZGFpbHkgbm90ZSB0ZW1wbGF0ZSAnJHt0ZW1wbGF0ZVBhdGh9J2AsIGVycik7XG4gICAgICAgIG5ldyBvYnNpZGlhbi5Ob3RpY2UoXCJGYWlsZWQgdG8gcmVhZCB0aGUgZGFpbHkgbm90ZSB0ZW1wbGF0ZVwiKTtcbiAgICAgICAgcmV0dXJuIFtcIlwiLCBudWxsXTtcbiAgICB9XG59XG5cbi8qKlxuICogZGF0ZVVJRCBpcyBhIHdheSBvZiB3ZWVrbHkgaWRlbnRpZnlpbmcgZGFpbHkvd2Vla2x5L21vbnRobHkgbm90ZXMuXG4gKiBUaGV5IGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBncmFudWxhcml0eSB0byBhdm9pZCBhbWJpZ3VpdHkuXG4gKi9cbmZ1bmN0aW9uIGdldERhdGVVSUQoZGF0ZSwgZ3JhbnVsYXJpdHkgPSBcImRheVwiKSB7XG4gICAgY29uc3QgdHMgPSBkYXRlLmNsb25lKCkuc3RhcnRPZihncmFudWxhcml0eSkuZm9ybWF0KCk7XG4gICAgcmV0dXJuIGAke2dyYW51bGFyaXR5fS0ke3RzfWA7XG59XG5mdW5jdGlvbiByZW1vdmVFc2NhcGVkQ2hhcmFjdGVycyhmb3JtYXQpIHtcbiAgICByZXR1cm4gZm9ybWF0LnJlcGxhY2UoL1xcW1teXFxdXSpcXF0vZywgXCJcIik7IC8vIHJlbW92ZSBldmVyeXRoaW5nIHdpdGhpbiBicmFja2V0c1xufVxuLyoqXG4gKiBYWFg6IFdoZW4gcGFyc2luZyBkYXRlcyB0aGF0IGNvbnRhaW4gYm90aCB3ZWVrIG51bWJlcnMgYW5kIG1vbnRocyxcbiAqIE1vbWVudCBjaG9zZXMgdG8gaWdub3JlIHRoZSB3ZWVrIG51bWJlcnMuIEZvciB0aGUgd2VlayBkYXRlVUlELCB3ZVxuICogd2FudCB0aGUgb3Bwb3NpdGUgYmVoYXZpb3IuIFN0cmlwIHRoZSBNTU0gZnJvbSB0aGUgZm9ybWF0IHRvIHBhdGNoLlxuICovXG5mdW5jdGlvbiBpc0Zvcm1hdEFtYmlndW91cyhmb3JtYXQsIGdyYW51bGFyaXR5KSB7XG4gICAgaWYgKGdyYW51bGFyaXR5ID09PSBcIndlZWtcIikge1xuICAgICAgICBjb25zdCBjbGVhbkZvcm1hdCA9IHJlbW92ZUVzY2FwZWRDaGFyYWN0ZXJzKGZvcm1hdCk7XG4gICAgICAgIHJldHVybiAoL3d7MSwyfS9pLnRlc3QoY2xlYW5Gb3JtYXQpICYmXG4gICAgICAgICAgICAoL017MSw0fS8udGVzdChjbGVhbkZvcm1hdCkgfHwgL0R7MSw0fS8udGVzdChjbGVhbkZvcm1hdCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0RGF0ZUZyb21GaWxlKGZpbGUsIGdyYW51bGFyaXR5KSB7XG4gICAgcmV0dXJuIGdldERhdGVGcm9tRmlsZW5hbWUoZmlsZS5iYXNlbmFtZSwgZ3JhbnVsYXJpdHkpO1xufVxuZnVuY3Rpb24gZ2V0RGF0ZUZyb21QYXRoKHBhdGgsIGdyYW51bGFyaXR5KSB7XG4gICAgcmV0dXJuIGdldERhdGVGcm9tRmlsZW5hbWUoYmFzZW5hbWUocGF0aCksIGdyYW51bGFyaXR5KTtcbn1cbmZ1bmN0aW9uIGdldERhdGVGcm9tRmlsZW5hbWUoZmlsZW5hbWUsIGdyYW51bGFyaXR5KSB7XG4gICAgY29uc3QgZ2V0U2V0dGluZ3MgPSB7XG4gICAgICAgIGRheTogZ2V0RGFpbHlOb3RlU2V0dGluZ3MsXG4gICAgICAgIHdlZWs6IGdldFdlZWtseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgbW9udGg6IGdldE1vbnRobHlOb3RlU2V0dGluZ3MsXG4gICAgICAgIHF1YXJ0ZXI6IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgeWVhcjogZ2V0WWVhcmx5Tm90ZVNldHRpbmdzLFxuICAgIH07XG4gICAgY29uc3QgZm9ybWF0ID0gZ2V0U2V0dGluZ3NbZ3JhbnVsYXJpdHldKCkuZm9ybWF0LnNwbGl0KFwiL1wiKS5wb3AoKTtcbiAgICBjb25zdCBub3RlRGF0ZSA9IHdpbmRvdy5tb21lbnQoZmlsZW5hbWUsIGZvcm1hdCwgdHJ1ZSk7XG4gICAgaWYgKCFub3RlRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChpc0Zvcm1hdEFtYmlndW91cyhmb3JtYXQsIGdyYW51bGFyaXR5KSkge1xuICAgICAgICBpZiAoZ3JhbnVsYXJpdHkgPT09IFwid2Vla1wiKSB7XG4gICAgICAgICAgICBjb25zdCBjbGVhbkZvcm1hdCA9IHJlbW92ZUVzY2FwZWRDaGFyYWN0ZXJzKGZvcm1hdCk7XG4gICAgICAgICAgICBpZiAoL3d7MSwyfS9pLnRlc3QoY2xlYW5Gb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5tb21lbnQoZmlsZW5hbWUsIFxuICAgICAgICAgICAgICAgIC8vIElmIGZvcm1hdCBjb250YWlucyB3ZWVrLCByZW1vdmUgZGF5ICYgbW9udGggZm9ybWF0dGluZ1xuICAgICAgICAgICAgICAgIGZvcm1hdC5yZXBsYWNlKC9NezEsNH0vZywgXCJcIikucmVwbGFjZSgvRHsxLDR9L2csIFwiXCIpLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5vdGVEYXRlO1xufVxuXG5jbGFzcyBEYWlseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIG1pbWljcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGRhaWx5LW5vdGVzIHBsdWdpblxuICogc28gaXQgd2lsbCByZXBsYWNlIHt7ZGF0ZX19LCB7e3RpdGxlfX0sIGFuZCB7e3RpbWV9fSB3aXRoIHRoZVxuICogZm9ybWF0dGVkIHRpbWVzdGFtcC5cbiAqXG4gKiBOb3RlOiBpdCBoYXMgYW4gYWRkZWQgYm9udXMgdGhhdCBpdCdzIG5vdCAndG9kYXknIHNwZWNpZmljLlxuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVEYWlseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IGFwcCA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gYXBwO1xuICAgIGNvbnN0IG1vbWVudCA9IHdpbmRvdy5tb21lbnQ7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldERhaWx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgW3RlbXBsYXRlQ29udGVudHMsIElGb2xkSW5mb10gPSBhd2FpdCBnZXRUZW1wbGF0ZUluZm8odGVtcGxhdGUpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGF3YWl0IGdldE5vdGVQYXRoKGZvbGRlciwgZmlsZW5hbWUpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRGaWxlID0gYXdhaXQgdmF1bHQuY3JlYXRlKG5vcm1hbGl6ZWRQYXRoLCB0ZW1wbGF0ZUNvbnRlbnRzXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqZGF0ZVxccyp9fS9naSwgZmlsZW5hbWUpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGltZVxccyp9fS9naSwgbW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGl0bGVcXHMqfX0vZ2ksIGZpbGVuYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IG1vbWVudCgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBkYXRlLmNsb25lKCkuc2V0KHtcbiAgICAgICAgICAgICAgICBob3VyOiBub3cuZ2V0KFwiaG91clwiKSxcbiAgICAgICAgICAgICAgICBtaW51dGU6IG5vdy5nZXQoXCJtaW51dGVcIiksXG4gICAgICAgICAgICAgICAgc2Vjb25kOiBub3cuZ2V0KFwic2Vjb25kXCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY2FsYykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnREYXRlLmFkZChwYXJzZUludCh0aW1lRGVsdGEsIDEwKSwgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW9tZW50Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChtb21lbnRGb3JtYXQuc3Vic3RyaW5nKDEpLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqeWVzdGVyZGF5XFxzKn19L2dpLCBkYXRlLmNsb25lKCkuc3VidHJhY3QoMSwgXCJkYXlcIikuZm9ybWF0KGZvcm1hdCkpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdG9tb3Jyb3dcXHMqfX0vZ2ksIGRhdGUuY2xvbmUoKS5hZGQoMSwgXCJkXCIpLmZvcm1hdChmb3JtYXQpKSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIGFwcC5mb2xkTWFuYWdlci5zYXZlKGNyZWF0ZWRGaWxlLCBJRm9sZEluZm8pO1xuICAgICAgICByZXR1cm4gY3JlYXRlZEZpbGU7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBmaWxlOiAnJHtub3JtYWxpemVkUGF0aH0nYCwgZXJyKTtcbiAgICAgICAgbmV3IG9ic2lkaWFuLk5vdGljZShcIlVuYWJsZSB0byBjcmVhdGUgbmV3IGZpbGUuXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldERhaWx5Tm90ZShkYXRlLCBkYWlseU5vdGVzKSB7XG4gICAgcmV0dXJuIGRhaWx5Tm90ZXNbZ2V0RGF0ZVVJRChkYXRlLCBcImRheVwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbERhaWx5Tm90ZXMoKSB7XG4gICAgLyoqXG4gICAgICogRmluZCBhbGwgZGFpbHkgbm90ZXMgaW4gdGhlIGRhaWx5IG5vdGUgZm9sZGVyXG4gICAgICovXG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0RGFpbHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBkYWlseU5vdGVzRm9sZGVyID0gdmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKG9ic2lkaWFuLm5vcm1hbGl6ZVBhdGgoZm9sZGVyKSk7XG4gICAgaWYgKCFkYWlseU5vdGVzRm9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBEYWlseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yKFwiRmFpbGVkIHRvIGZpbmQgZGFpbHkgbm90ZXMgZm9sZGVyXCIpO1xuICAgIH1cbiAgICBjb25zdCBkYWlseU5vdGVzID0ge307XG4gICAgb2JzaWRpYW4uVmF1bHQucmVjdXJzZUNoaWxkcmVuKGRhaWx5Tm90ZXNGb2xkZXIsIChub3RlKSA9PiB7XG4gICAgICAgIGlmIChub3RlIGluc3RhbmNlb2Ygb2JzaWRpYW4uVEZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBnZXREYXRlRnJvbUZpbGUobm90ZSwgXCJkYXlcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwiZGF5XCIpO1xuICAgICAgICAgICAgICAgIGRhaWx5Tm90ZXNbZGF0ZVN0cmluZ10gPSBub3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhaWx5Tm90ZXM7XG59XG5cbmNsYXNzIFdlZWtseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xufVxuZnVuY3Rpb24gZ2V0RGF5c09mV2VlaygpIHtcbiAgICBjb25zdCB7IG1vbWVudCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgbGV0IHdlZWtTdGFydCA9IG1vbWVudC5sb2NhbGVEYXRhKCkuX3dlZWsuZG93O1xuICAgIGNvbnN0IGRheXNPZldlZWsgPSBbXG4gICAgICAgIFwic3VuZGF5XCIsXG4gICAgICAgIFwibW9uZGF5XCIsXG4gICAgICAgIFwidHVlc2RheVwiLFxuICAgICAgICBcIndlZG5lc2RheVwiLFxuICAgICAgICBcInRodXJzZGF5XCIsXG4gICAgICAgIFwiZnJpZGF5XCIsXG4gICAgICAgIFwic2F0dXJkYXlcIixcbiAgICBdO1xuICAgIHdoaWxlICh3ZWVrU3RhcnQpIHtcbiAgICAgICAgZGF5c09mV2Vlay5wdXNoKGRheXNPZldlZWsuc2hpZnQoKSk7XG4gICAgICAgIHdlZWtTdGFydC0tO1xuICAgIH1cbiAgICByZXR1cm4gZGF5c09mV2Vlaztcbn1cbmZ1bmN0aW9uIGdldERheU9mV2Vla051bWVyaWNhbFZhbHVlKGRheU9mV2Vla05hbWUpIHtcbiAgICByZXR1cm4gZ2V0RGF5c09mV2VlaygpLmluZGV4T2YoZGF5T2ZXZWVrTmFtZS50b0xvd2VyQ2FzZSgpKTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVdlZWtseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldFdlZWtseU5vdGVTZXR0aW5ncygpO1xuICAgIGNvbnN0IFt0ZW1wbGF0ZUNvbnRlbnRzLCBJRm9sZEluZm9dID0gYXdhaXQgZ2V0VGVtcGxhdGVJbmZvKHRlbXBsYXRlKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGRhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBhd2FpdCBnZXROb3RlUGF0aChmb2xkZXIsIGZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBjcmVhdGVkRmlsZSA9IGF3YWl0IHZhdWx0LmNyZWF0ZShub3JtYWxpemVkUGF0aCwgdGVtcGxhdGVDb250ZW50c1xuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IHdpbmRvdy5tb21lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gZGF0ZS5jbG9uZSgpLnNldCh7XG4gICAgICAgICAgICAgICAgaG91cjogbm93LmdldChcImhvdXJcIiksXG4gICAgICAgICAgICAgICAgbWludXRlOiBub3cuZ2V0KFwibWludXRlXCIpLFxuICAgICAgICAgICAgICAgIHNlY29uZDogbm93LmdldChcInNlY29uZFwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNhbGMpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5hZGQocGFyc2VJbnQodGltZURlbHRhLCAxMCksIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1vbWVudEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQobW9tZW50Rm9ybWF0LnN1YnN0cmluZygxKS50cmltKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpdGxlXFxzKn19L2dpLCBmaWxlbmFtZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aW1lXFxzKn19L2dpLCB3aW5kb3cubW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KVxccyo6KC4qPyl9fS9naSwgKF8sIGRheU9mV2VlaywgbW9tZW50Rm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXkgPSBnZXREYXlPZldlZWtOdW1lcmljYWxWYWx1ZShkYXlPZldlZWspO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUud2Vla2RheShkYXkpLmZvcm1hdChtb21lbnRGb3JtYXQudHJpbSgpKTtcbiAgICAgICAgfSkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLnNhdmUoY3JlYXRlZEZpbGUsIElGb2xkSW5mbyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVkRmlsZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGZpbGU6ICcke25vcm1hbGl6ZWRQYXRofSdgLCBlcnIpO1xuICAgICAgICBuZXcgb2JzaWRpYW4uTm90aWNlKFwiVW5hYmxlIHRvIGNyZWF0ZSBuZXcgZmlsZS5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0V2Vla2x5Tm90ZShkYXRlLCB3ZWVrbHlOb3Rlcykge1xuICAgIHJldHVybiB3ZWVrbHlOb3Rlc1tnZXREYXRlVUlEKGRhdGUsIFwid2Vla1wiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbFdlZWtseU5vdGVzKCkge1xuICAgIGNvbnN0IHdlZWtseU5vdGVzID0ge307XG4gICAgaWYgKCFhcHBIYXNXZWVrbHlOb3Rlc1BsdWdpbkxvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiB3ZWVrbHlOb3RlcztcbiAgICB9XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0V2Vla2x5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3Qgd2Vla2x5Tm90ZXNGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIXdlZWtseU5vdGVzRm9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBXZWVrbHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvcihcIkZhaWxlZCB0byBmaW5kIHdlZWtseSBub3RlcyBmb2xkZXJcIik7XG4gICAgfVxuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbih3ZWVrbHlOb3Rlc0ZvbGRlciwgKG5vdGUpID0+IHtcbiAgICAgICAgaWYgKG5vdGUgaW5zdGFuY2VvZiBvYnNpZGlhbi5URmlsZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGdldERhdGVGcm9tRmlsZShub3RlLCBcIndlZWtcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwid2Vla1wiKTtcbiAgICAgICAgICAgICAgICB3ZWVrbHlOb3Rlc1tkYXRlU3RyaW5nXSA9IG5vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gd2Vla2x5Tm90ZXM7XG59XG5cbmNsYXNzIE1vbnRobHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBkYWlseS1ub3RlcyBwbHVnaW5cbiAqIHNvIGl0IHdpbGwgcmVwbGFjZSB7e2RhdGV9fSwge3t0aXRsZX19LCBhbmQge3t0aW1lfX0gd2l0aCB0aGVcbiAqIGZvcm1hdHRlZCB0aW1lc3RhbXAuXG4gKlxuICogTm90ZTogaXQgaGFzIGFuIGFkZGVkIGJvbnVzIHRoYXQgaXQncyBub3QgJ3RvZGF5JyBzcGVjaWZpYy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlTW9udGhseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldE1vbnRobHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBbdGVtcGxhdGVDb250ZW50cywgSUZvbGRJbmZvXSA9IGF3YWl0IGdldFRlbXBsYXRlSW5mbyh0ZW1wbGF0ZSk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBkYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gYXdhaXQgZ2V0Tm90ZVBhdGgoZm9sZGVyLCBmaWxlbmFtZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY3JlYXRlZEZpbGUgPSBhd2FpdCB2YXVsdC5jcmVhdGUobm9ybWFsaXplZFBhdGgsIHRlbXBsYXRlQ29udGVudHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyooZGF0ZXx0aW1lKVxccyooKFsrLV1cXGQrKShbeXFtd2Roc10pKT9cXHMqKDouKz8pP319L2dpLCAoXywgX3RpbWVPckRhdGUsIGNhbGMsIHRpbWVEZWx0YSwgdW5pdCwgbW9tZW50Rm9ybWF0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3cgPSB3aW5kb3cubW9tZW50KCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IGRhdGUuY2xvbmUoKS5zZXQoe1xuICAgICAgICAgICAgICAgIGhvdXI6IG5vdy5nZXQoXCJob3VyXCIpLFxuICAgICAgICAgICAgICAgIG1pbnV0ZTogbm93LmdldChcIm1pbnV0ZVwiKSxcbiAgICAgICAgICAgICAgICBzZWNvbmQ6IG5vdy5nZXQoXCJzZWNvbmRcIiksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjYWxjKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudERhdGUuYWRkKHBhcnNlSW50KHRpbWVEZWx0YSwgMTApLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtb21lbnRGb3JtYXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KG1vbWVudEZvcm1hdC5zdWJzdHJpbmcoMSkudHJpbSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccypkYXRlXFxzKn19L2dpLCBmaWxlbmFtZSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aW1lXFxzKn19L2dpLCB3aW5kb3cubW9tZW50KCkuZm9ybWF0KFwiSEg6bW1cIikpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGl0bGVcXHMqfX0vZ2ksIGZpbGVuYW1lKSk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIHdpbmRvdy5hcHAuZm9sZE1hbmFnZXIuc2F2ZShjcmVhdGVkRmlsZSwgSUZvbGRJbmZvKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRGaWxlO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgZmlsZTogJyR7bm9ybWFsaXplZFBhdGh9J2AsIGVycik7XG4gICAgICAgIG5ldyBvYnNpZGlhbi5Ob3RpY2UoXCJVbmFibGUgdG8gY3JlYXRlIG5ldyBmaWxlLlwiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRNb250aGx5Tm90ZShkYXRlLCBtb250aGx5Tm90ZXMpIHtcbiAgICByZXR1cm4gbW9udGhseU5vdGVzW2dldERhdGVVSUQoZGF0ZSwgXCJtb250aFwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbE1vbnRobHlOb3RlcygpIHtcbiAgICBjb25zdCBtb250aGx5Tm90ZXMgPSB7fTtcbiAgICBpZiAoIWFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiBtb250aGx5Tm90ZXM7XG4gICAgfVxuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyBmb2xkZXIgfSA9IGdldE1vbnRobHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBtb250aGx5Tm90ZXNGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIW1vbnRobHlOb3Rlc0ZvbGRlcikge1xuICAgICAgICB0aHJvdyBuZXcgTW9udGhseU5vdGVzRm9sZGVyTWlzc2luZ0Vycm9yKFwiRmFpbGVkIHRvIGZpbmQgbW9udGhseSBub3RlcyBmb2xkZXJcIik7XG4gICAgfVxuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbihtb250aGx5Tm90ZXNGb2xkZXIsIChub3RlKSA9PiB7XG4gICAgICAgIGlmIChub3RlIGluc3RhbmNlb2Ygb2JzaWRpYW4uVEZpbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBnZXREYXRlRnJvbUZpbGUobm90ZSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGdldERhdGVVSUQoZGF0ZSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgICAgICBtb250aGx5Tm90ZXNbZGF0ZVN0cmluZ10gPSBub3RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG1vbnRobHlOb3Rlcztcbn1cblxuY2xhc3MgUXVhcnRlcmx5Tm90ZXNGb2xkZXJNaXNzaW5nRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG59XG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gbWltaWNzIHRoZSBiZWhhdmlvciBvZiB0aGUgZGFpbHktbm90ZXMgcGx1Z2luXG4gKiBzbyBpdCB3aWxsIHJlcGxhY2Uge3tkYXRlfX0sIHt7dGl0bGV9fSwgYW5kIHt7dGltZX19IHdpdGggdGhlXG4gKiBmb3JtYXR0ZWQgdGltZXN0YW1wLlxuICpcbiAqIE5vdGU6IGl0IGhhcyBhbiBhZGRlZCBib251cyB0aGF0IGl0J3Mgbm90ICd0b2RheScgc3BlY2lmaWMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVF1YXJ0ZXJseU5vdGUoZGF0ZSkge1xuICAgIGNvbnN0IHsgdmF1bHQgfSA9IHdpbmRvdy5hcHA7XG4gICAgY29uc3QgeyB0ZW1wbGF0ZSwgZm9ybWF0LCBmb2xkZXIgfSA9IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncygpO1xuICAgIGNvbnN0IFt0ZW1wbGF0ZUNvbnRlbnRzLCBJRm9sZEluZm9dID0gYXdhaXQgZ2V0VGVtcGxhdGVJbmZvKHRlbXBsYXRlKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IGRhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBhd2FpdCBnZXROb3RlUGF0aChmb2xkZXIsIGZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBjcmVhdGVkRmlsZSA9IGF3YWl0IHZhdWx0LmNyZWF0ZShub3JtYWxpemVkUGF0aCwgdGVtcGxhdGVDb250ZW50c1xuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKihkYXRlfHRpbWUpXFxzKigoWystXVxcZCspKFt5cW13ZGhzXSkpP1xccyooOi4rPyk/fX0vZ2ksIChfLCBfdGltZU9yRGF0ZSwgY2FsYywgdGltZURlbHRhLCB1bml0LCBtb21lbnRGb3JtYXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IHdpbmRvdy5tb21lbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gZGF0ZS5jbG9uZSgpLnNldCh7XG4gICAgICAgICAgICAgICAgaG91cjogbm93LmdldChcImhvdXJcIiksXG4gICAgICAgICAgICAgICAgbWludXRlOiBub3cuZ2V0KFwibWludXRlXCIpLFxuICAgICAgICAgICAgICAgIHNlY29uZDogbm93LmdldChcInNlY29uZFwiKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNhbGMpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50RGF0ZS5hZGQocGFyc2VJbnQodGltZURlbHRhLCAxMCksIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1vbWVudEZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50RGF0ZS5mb3JtYXQobW9tZW50Rm9ybWF0LnN1YnN0cmluZygxKS50cmltKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChmb3JtYXQpO1xuICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKmRhdGVcXHMqfX0vZ2ksIGZpbGVuYW1lKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpbWVcXHMqfX0vZ2ksIHdpbmRvdy5tb21lbnQoKS5mb3JtYXQoXCJISDptbVwiKSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC97e1xccyp0aXRsZVxccyp9fS9naSwgZmlsZW5hbWUpKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgd2luZG93LmFwcC5mb2xkTWFuYWdlci5zYXZlKGNyZWF0ZWRGaWxlLCBJRm9sZEluZm8pO1xuICAgICAgICByZXR1cm4gY3JlYXRlZEZpbGU7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBmaWxlOiAnJHtub3JtYWxpemVkUGF0aH0nYCwgZXJyKTtcbiAgICAgICAgbmV3IG9ic2lkaWFuLk5vdGljZShcIlVuYWJsZSB0byBjcmVhdGUgbmV3IGZpbGUuXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFF1YXJ0ZXJseU5vdGUoZGF0ZSwgcXVhcnRlcmx5KSB7XG4gICAgcmV0dXJuIHF1YXJ0ZXJseVtnZXREYXRlVUlEKGRhdGUsIFwicXVhcnRlclwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbFF1YXJ0ZXJseU5vdGVzKCkge1xuICAgIGNvbnN0IHF1YXJ0ZXJseSA9IHt9O1xuICAgIGlmICghYXBwSGFzUXVhcnRlcmx5Tm90ZXNQbHVnaW5Mb2FkZWQoKSkge1xuICAgICAgICByZXR1cm4gcXVhcnRlcmx5O1xuICAgIH1cbiAgICBjb25zdCB7IHZhdWx0IH0gPSB3aW5kb3cuYXBwO1xuICAgIGNvbnN0IHsgZm9sZGVyIH0gPSBnZXRRdWFydGVybHlOb3RlU2V0dGluZ3MoKTtcbiAgICBjb25zdCBxdWFydGVybHlGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIXF1YXJ0ZXJseUZvbGRlcikge1xuICAgICAgICB0aHJvdyBuZXcgUXVhcnRlcmx5Tm90ZXNGb2xkZXJNaXNzaW5nRXJyb3IoXCJGYWlsZWQgdG8gZmluZCBxdWFydGVybHkgbm90ZXMgZm9sZGVyXCIpO1xuICAgIH1cbiAgICBvYnNpZGlhbi5WYXVsdC5yZWN1cnNlQ2hpbGRyZW4ocXVhcnRlcmx5Rm9sZGVyLCAobm90ZSkgPT4ge1xuICAgICAgICBpZiAobm90ZSBpbnN0YW5jZW9mIG9ic2lkaWFuLlRGaWxlKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gZ2V0RGF0ZUZyb21GaWxlKG5vdGUsIFwicXVhcnRlclwiKTtcbiAgICAgICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVN0cmluZyA9IGdldERhdGVVSUQoZGF0ZSwgXCJxdWFydGVyXCIpO1xuICAgICAgICAgICAgICAgIHF1YXJ0ZXJseVtkYXRlU3RyaW5nXSA9IG5vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcXVhcnRlcmx5O1xufVxuXG5jbGFzcyBZZWFybHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvciBleHRlbmRzIEVycm9yIHtcbn1cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBkYWlseS1ub3RlcyBwbHVnaW5cbiAqIHNvIGl0IHdpbGwgcmVwbGFjZSB7e2RhdGV9fSwge3t0aXRsZX19LCBhbmQge3t0aW1lfX0gd2l0aCB0aGVcbiAqIGZvcm1hdHRlZCB0aW1lc3RhbXAuXG4gKlxuICogTm90ZTogaXQgaGFzIGFuIGFkZGVkIGJvbnVzIHRoYXQgaXQncyBub3QgJ3RvZGF5JyBzcGVjaWZpYy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlWWVhcmx5Tm90ZShkYXRlKSB7XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IHRlbXBsYXRlLCBmb3JtYXQsIGZvbGRlciB9ID0gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgW3RlbXBsYXRlQ29udGVudHMsIElGb2xkSW5mb10gPSBhd2FpdCBnZXRUZW1wbGF0ZUluZm8odGVtcGxhdGUpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGF3YWl0IGdldE5vdGVQYXRoKGZvbGRlciwgZmlsZW5hbWUpO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWRGaWxlID0gYXdhaXQgdmF1bHQuY3JlYXRlKG5vcm1hbGl6ZWRQYXRoLCB0ZW1wbGF0ZUNvbnRlbnRzXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqKGRhdGV8dGltZSlcXHMqKChbKy1dXFxkKykoW3lxbXdkaHNdKSk/XFxzKig6Lis/KT99fS9naSwgKF8sIF90aW1lT3JEYXRlLCBjYWxjLCB0aW1lRGVsdGEsIHVuaXQsIG1vbWVudEZvcm1hdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gd2luZG93Lm1vbWVudCgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBkYXRlLmNsb25lKCkuc2V0KHtcbiAgICAgICAgICAgICAgICBob3VyOiBub3cuZ2V0KFwiaG91clwiKSxcbiAgICAgICAgICAgICAgICBtaW51dGU6IG5vdy5nZXQoXCJtaW51dGVcIiksXG4gICAgICAgICAgICAgICAgc2Vjb25kOiBub3cuZ2V0KFwic2Vjb25kXCIpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY2FsYykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnREYXRlLmFkZChwYXJzZUludCh0aW1lRGVsdGEsIDEwKSwgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobW9tZW50Rm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnREYXRlLmZvcm1hdChtb21lbnRGb3JtYXQuc3Vic3RyaW5nKDEpLnRyaW0oKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudERhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqZGF0ZVxccyp9fS9naSwgZmlsZW5hbWUpXG4gICAgICAgICAgICAucmVwbGFjZSgve3tcXHMqdGltZVxccyp9fS9naSwgd2luZG93Lm1vbWVudCgpLmZvcm1hdChcIkhIOm1tXCIpKVxuICAgICAgICAgICAgLnJlcGxhY2UoL3t7XFxzKnRpdGxlXFxzKn19L2dpLCBmaWxlbmFtZSkpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICB3aW5kb3cuYXBwLmZvbGRNYW5hZ2VyLnNhdmUoY3JlYXRlZEZpbGUsIElGb2xkSW5mbyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVkRmlsZTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY3JlYXRlIGZpbGU6ICcke25vcm1hbGl6ZWRQYXRofSdgLCBlcnIpO1xuICAgICAgICBuZXcgb2JzaWRpYW4uTm90aWNlKFwiVW5hYmxlIHRvIGNyZWF0ZSBuZXcgZmlsZS5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0WWVhcmx5Tm90ZShkYXRlLCB5ZWFybHlOb3Rlcykge1xuICAgIHJldHVybiB5ZWFybHlOb3Rlc1tnZXREYXRlVUlEKGRhdGUsIFwieWVhclwiKV0gPz8gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldEFsbFllYXJseU5vdGVzKCkge1xuICAgIGNvbnN0IHllYXJseU5vdGVzID0ge307XG4gICAgaWYgKCFhcHBIYXNZZWFybHlOb3Rlc1BsdWdpbkxvYWRlZCgpKSB7XG4gICAgICAgIHJldHVybiB5ZWFybHlOb3RlcztcbiAgICB9XG4gICAgY29uc3QgeyB2YXVsdCB9ID0gd2luZG93LmFwcDtcbiAgICBjb25zdCB7IGZvbGRlciB9ID0gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzKCk7XG4gICAgY29uc3QgeWVhcmx5Tm90ZXNGb2xkZXIgPSB2YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgob2JzaWRpYW4ubm9ybWFsaXplUGF0aChmb2xkZXIpKTtcbiAgICBpZiAoIXllYXJseU5vdGVzRm9sZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBZZWFybHlOb3Rlc0ZvbGRlck1pc3NpbmdFcnJvcihcIkZhaWxlZCB0byBmaW5kIHllYXJseSBub3RlcyBmb2xkZXJcIik7XG4gICAgfVxuICAgIG9ic2lkaWFuLlZhdWx0LnJlY3Vyc2VDaGlsZHJlbih5ZWFybHlOb3Rlc0ZvbGRlciwgKG5vdGUpID0+IHtcbiAgICAgICAgaWYgKG5vdGUgaW5zdGFuY2VvZiBvYnNpZGlhbi5URmlsZSkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IGdldERhdGVGcm9tRmlsZShub3RlLCBcInllYXJcIik7XG4gICAgICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVTdHJpbmcgPSBnZXREYXRlVUlEKGRhdGUsIFwieWVhclwiKTtcbiAgICAgICAgICAgICAgICB5ZWFybHlOb3Rlc1tkYXRlU3RyaW5nXSA9IG5vdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4geWVhcmx5Tm90ZXM7XG59XG5cbmZ1bmN0aW9uIGFwcEhhc0RhaWx5Tm90ZXNQbHVnaW5Mb2FkZWQoKSB7XG4gICAgY29uc3QgeyBhcHAgfSA9IHdpbmRvdztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IGRhaWx5Tm90ZXNQbHVnaW4gPSBhcHAuaW50ZXJuYWxQbHVnaW5zLnBsdWdpbnNbXCJkYWlseS1ub3Rlc1wiXTtcbiAgICBpZiAoZGFpbHlOb3Rlc1BsdWdpbiAmJiBkYWlseU5vdGVzUGx1Z2luLmVuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LmRhaWx5Py5lbmFibGVkO1xufVxuLyoqXG4gKiBYWFg6IFwiV2Vla2x5IE5vdGVzXCIgbGl2ZSBpbiBlaXRoZXIgdGhlIENhbGVuZGFyIHBsdWdpbiBvciB0aGUgcGVyaW9kaWMtbm90ZXMgcGx1Z2luLlxuICogQ2hlY2sgYm90aCB1bnRpbCB0aGUgd2Vla2x5IG5vdGVzIGZlYXR1cmUgaXMgcmVtb3ZlZCBmcm9tIHRoZSBDYWxlbmRhciBwbHVnaW4uXG4gKi9cbmZ1bmN0aW9uIGFwcEhhc1dlZWtseU5vdGVzUGx1Z2luTG9hZGVkKCkge1xuICAgIGNvbnN0IHsgYXBwIH0gPSB3aW5kb3c7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAoYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKFwiY2FsZW5kYXJcIikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LndlZWtseT8uZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZCgpIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/Lm1vbnRobHk/LmVuYWJsZWQ7XG59XG5mdW5jdGlvbiBhcHBIYXNRdWFydGVybHlOb3Rlc1BsdWdpbkxvYWRlZCgpIHtcbiAgICBjb25zdCB7IGFwcCB9ID0gd2luZG93O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgY29uc3QgcGVyaW9kaWNOb3RlcyA9IGFwcC5wbHVnaW5zLmdldFBsdWdpbihcInBlcmlvZGljLW5vdGVzXCIpO1xuICAgIHJldHVybiBwZXJpb2RpY05vdGVzICYmIHBlcmlvZGljTm90ZXMuc2V0dGluZ3M/LnF1YXJ0ZXJseT8uZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGFwcEhhc1llYXJseU5vdGVzUGx1Z2luTG9hZGVkKCkge1xuICAgIGNvbnN0IHsgYXBwIH0gPSB3aW5kb3c7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBjb25zdCBwZXJpb2RpY05vdGVzID0gYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKFwicGVyaW9kaWMtbm90ZXNcIik7XG4gICAgcmV0dXJuIHBlcmlvZGljTm90ZXMgJiYgcGVyaW9kaWNOb3Rlcy5zZXR0aW5ncz8ueWVhcmx5Py5lbmFibGVkO1xufVxuZnVuY3Rpb24gZ2V0UGVyaW9kaWNOb3RlU2V0dGluZ3MoZ3JhbnVsYXJpdHkpIHtcbiAgICBjb25zdCBnZXRTZXR0aW5ncyA9IHtcbiAgICAgICAgZGF5OiBnZXREYWlseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgd2VlazogZ2V0V2Vla2x5Tm90ZVNldHRpbmdzLFxuICAgICAgICBtb250aDogZ2V0TW9udGhseU5vdGVTZXR0aW5ncyxcbiAgICAgICAgcXVhcnRlcjogZ2V0UXVhcnRlcmx5Tm90ZVNldHRpbmdzLFxuICAgICAgICB5ZWFyOiBnZXRZZWFybHlOb3RlU2V0dGluZ3MsXG4gICAgfVtncmFudWxhcml0eV07XG4gICAgcmV0dXJuIGdldFNldHRpbmdzKCk7XG59XG5mdW5jdGlvbiBjcmVhdGVQZXJpb2RpY05vdGUoZ3JhbnVsYXJpdHksIGRhdGUpIHtcbiAgICBjb25zdCBjcmVhdGVGbiA9IHtcbiAgICAgICAgZGF5OiBjcmVhdGVEYWlseU5vdGUsXG4gICAgICAgIG1vbnRoOiBjcmVhdGVNb250aGx5Tm90ZSxcbiAgICAgICAgd2VlazogY3JlYXRlV2Vla2x5Tm90ZSxcbiAgICB9O1xuICAgIHJldHVybiBjcmVhdGVGbltncmFudWxhcml0eV0oZGF0ZSk7XG59XG5cbmV4cG9ydHMuREVGQVVMVF9EQUlMWV9OT1RFX0ZPUk1BVCA9IERFRkFVTFRfREFJTFlfTk9URV9GT1JNQVQ7XG5leHBvcnRzLkRFRkFVTFRfTU9OVEhMWV9OT1RFX0ZPUk1BVCA9IERFRkFVTFRfTU9OVEhMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuREVGQVVMVF9RVUFSVEVSTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX1FVQVJURVJMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuREVGQVVMVF9XRUVLTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX1dFRUtMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuREVGQVVMVF9ZRUFSTFlfTk9URV9GT1JNQVQgPSBERUZBVUxUX1lFQVJMWV9OT1RFX0ZPUk1BVDtcbmV4cG9ydHMuYXBwSGFzRGFpbHlOb3Rlc1BsdWdpbkxvYWRlZCA9IGFwcEhhc0RhaWx5Tm90ZXNQbHVnaW5Mb2FkZWQ7XG5leHBvcnRzLmFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZCA9IGFwcEhhc01vbnRobHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuYXBwSGFzUXVhcnRlcmx5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNRdWFydGVybHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuYXBwSGFzV2Vla2x5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNXZWVrbHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuYXBwSGFzWWVhcmx5Tm90ZXNQbHVnaW5Mb2FkZWQgPSBhcHBIYXNZZWFybHlOb3Rlc1BsdWdpbkxvYWRlZDtcbmV4cG9ydHMuY3JlYXRlRGFpbHlOb3RlID0gY3JlYXRlRGFpbHlOb3RlO1xuZXhwb3J0cy5jcmVhdGVNb250aGx5Tm90ZSA9IGNyZWF0ZU1vbnRobHlOb3RlO1xuZXhwb3J0cy5jcmVhdGVQZXJpb2RpY05vdGUgPSBjcmVhdGVQZXJpb2RpY05vdGU7XG5leHBvcnRzLmNyZWF0ZVF1YXJ0ZXJseU5vdGUgPSBjcmVhdGVRdWFydGVybHlOb3RlO1xuZXhwb3J0cy5jcmVhdGVXZWVrbHlOb3RlID0gY3JlYXRlV2Vla2x5Tm90ZTtcbmV4cG9ydHMuY3JlYXRlWWVhcmx5Tm90ZSA9IGNyZWF0ZVllYXJseU5vdGU7XG5leHBvcnRzLmdldEFsbERhaWx5Tm90ZXMgPSBnZXRBbGxEYWlseU5vdGVzO1xuZXhwb3J0cy5nZXRBbGxNb250aGx5Tm90ZXMgPSBnZXRBbGxNb250aGx5Tm90ZXM7XG5leHBvcnRzLmdldEFsbFF1YXJ0ZXJseU5vdGVzID0gZ2V0QWxsUXVhcnRlcmx5Tm90ZXM7XG5leHBvcnRzLmdldEFsbFdlZWtseU5vdGVzID0gZ2V0QWxsV2Vla2x5Tm90ZXM7XG5leHBvcnRzLmdldEFsbFllYXJseU5vdGVzID0gZ2V0QWxsWWVhcmx5Tm90ZXM7XG5leHBvcnRzLmdldERhaWx5Tm90ZSA9IGdldERhaWx5Tm90ZTtcbmV4cG9ydHMuZ2V0RGFpbHlOb3RlU2V0dGluZ3MgPSBnZXREYWlseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0RGF0ZUZyb21GaWxlID0gZ2V0RGF0ZUZyb21GaWxlO1xuZXhwb3J0cy5nZXREYXRlRnJvbVBhdGggPSBnZXREYXRlRnJvbVBhdGg7XG5leHBvcnRzLmdldERhdGVVSUQgPSBnZXREYXRlVUlEO1xuZXhwb3J0cy5nZXRNb250aGx5Tm90ZSA9IGdldE1vbnRobHlOb3RlO1xuZXhwb3J0cy5nZXRNb250aGx5Tm90ZVNldHRpbmdzID0gZ2V0TW9udGhseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0UGVyaW9kaWNOb3RlU2V0dGluZ3MgPSBnZXRQZXJpb2RpY05vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0UXVhcnRlcmx5Tm90ZSA9IGdldFF1YXJ0ZXJseU5vdGU7XG5leHBvcnRzLmdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncyA9IGdldFF1YXJ0ZXJseU5vdGVTZXR0aW5ncztcbmV4cG9ydHMuZ2V0VGVtcGxhdGVJbmZvID0gZ2V0VGVtcGxhdGVJbmZvO1xuZXhwb3J0cy5nZXRXZWVrbHlOb3RlID0gZ2V0V2Vla2x5Tm90ZTtcbmV4cG9ydHMuZ2V0V2Vla2x5Tm90ZVNldHRpbmdzID0gZ2V0V2Vla2x5Tm90ZVNldHRpbmdzO1xuZXhwb3J0cy5nZXRZZWFybHlOb3RlID0gZ2V0WWVhcmx5Tm90ZTtcbmV4cG9ydHMuZ2V0WWVhcmx5Tm90ZVNldHRpbmdzID0gZ2V0WWVhcmx5Tm90ZVNldHRpbmdzO1xuIiwiLy8gT2JzaWRpYW4gYnVuZGxlcyBtb21lbnQuanMgYW5kIGV4cG9zZXMgaXQgYXMgd2luZG93Lm1vbWVudCBhdCBydW50aW1lLlxuLy8gSXRzIHR5cGUgaXMgZGVjbGFyZWQgZ2xvYmFsbHkgdmlhIFwiZGVjbGFyZSBnbG9iYWxcIiBpbiB0eXBlcy5kLnRzLCB3aGljaFxuLy8gd29ya3MgZmluZSBmb3Igd2hvbGUtcHJvamVjdCB0eXBlLWNoZWNraW5nICh0aGlzIHByb2plY3QncyBvd24gdHNjb25maWcsXG4vLyB0ZXN0cywgYnVpbGQpIGJ1dCBub3QgZm9yIHRvb2xzIHRoYXQgdHlwZS1jaGVjayBmaWxlcyBpbiBpc29sYXRpb24gLS1cbi8vIHRob3NlIG5ldmVyIHNlZSB0aGUgYW1iaWVudCBhdWdtZW50YXRpb24gZnJvbSB0aGF0IHNlcGFyYXRlIGZpbGUsIHNvXG4vLyBldmVyeSB3aW5kb3cubW9tZW50IHVzYWdlIHNpbGVudGx5IHJlc29sdmVzIHRvIGBhbnlgIHRoZXJlLCBjYXNjYWRpbmdcbi8vIGludG8gdW5zYWZlLSogbGludCB3YXJuaW5ncyBvbiBldmVyeSBsaW5lIHRoYXQgdG91Y2hlcyBpdHMgcmV0dXJuIHZhbHVlLlxuLy9cbi8vIFJlLWV4cG9ydGluZyB0aHJvdWdoIGEgcmVhbCBFUyBpbXBvcnQgc2lkZXN0ZXBzIHRoYXQ6IGEgbW9kdWxlIGltcG9ydCdzXG4vLyB0eXBlIGlzIHJlc29sdmVkIGZyb20gdGhpcyBmaWxlJ3Mgb3duIGRlY2xhcmVkIHR5cGUgcmVnYXJkbGVzcyBvZiBhbWJpZW50XG4vLyBkZWNsYXJhdGlvbiB2aXNpYmlsaXR5IGVsc2V3aGVyZS5cbi8vXG4vLyBVc2VzIGEgUHJveHkgaW5zdGVhZCBvZiBjYXB0dXJpbmcgd2luZG93Lm1vbWVudCBkaXJlY3RseSBhdCBtb2R1bGUtbG9hZFxuLy8gdGltZSwgc28gbGF0ZXIgbXV0YXRpb25zIG9mIHdpbmRvdy5tb21lbnQgYXJlIHN0aWxsIHJlZmxlY3RlZCAtLSBzb21lXG4vLyB0ZXN0cyBpbnRlbnRpb25hbGx5IG1vbmtleS1wYXRjaCB3aW5kb3cubW9tZW50IG1pZC10ZXN0ICh0byBleGVyY2lzZVxuLy8gZXJyb3ItaGFuZGxpbmcgYnJhbmNoZXMgYXJvdW5kIGEgdGhyb3dpbmcgLmZvcm1hdCgpKSwgYW5kIGEgcGxhaW5cbi8vIGNhcHR1cmVkIHJlZmVyZW5jZSB3b3VsZCBrZWVwIHBvaW50aW5nIGF0IHRoZSBwcmUtbW9jayBmdW5jdGlvbi5cbmNvbnN0IG1vbWVudDogdHlwZW9mIGltcG9ydChcIm1vbWVudFwiKSA9IG5ldyBQcm94eShcbiAgKCgpOiB1bmRlZmluZWQgPT4gdW5kZWZpbmVkKSBhcyB1bmtub3duIGFzIHR5cGVvZiBpbXBvcnQoXCJtb21lbnRcIiksXG4gIHtcbiAgICBhcHBseTogKF90YXJnZXQsIHRoaXNBcmcsIGFyZ3M6IHVua25vd25bXSkgPT5cbiAgICAgIFJlZmxlY3QuYXBwbHkod2luZG93Lm1vbWVudCBhcyB1bmtub3duIGFzICguLi5hOiB1bmtub3duW10pID0+IHVua25vd24sIHRoaXNBcmcsIGFyZ3MpLFxuICAgIGdldDogKF90YXJnZXQsIHByb3AsIHJlY2VpdmVyKTogdW5rbm93biA9PiBSZWZsZWN0LmdldCh3aW5kb3cubW9tZW50LCBwcm9wLCByZWNlaXZlciksXG4gIH1cbik7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudDtcbiIsIi8qKlxuICogTW9kdWxlIHBvdXIgbGUgZm9ybWF0YWdlIGRlIGRhdGVzXG4gKi9cbmltcG9ydCBtb21lbnQgZnJvbSBcIi4vd2luZG93LW1vbWVudFwiO1xuXG4vKipcbiAqIENsYXNzZSBwb3VyIGZvcm1hdGVyIGRlcyBkYXRlc1xuICovXG5leHBvcnQgY2xhc3MgRGF0ZUZvcm1hdHRlciB7XG4gIC8qKlxuICAgKiBGb3JtYXRlIHVuZSBkYXRlIHNlbG9uIGxlIGZvcm1hdCBzcMOpY2lmacOpXG4gICAqIEBwYXJhbSBkYXRlIExhIGRhdGUgw6AgZm9ybWF0ZXJcbiAgICogQHBhcmFtIGZvcm1hdCBMZSBmb3JtYXQgZGUgZGF0ZSAoZm9ybWF0IE1vbWVudC5qcylcbiAgICogQHJldHVybnMgTGEgZGF0ZSBmb3JtYXTDqWUgZW4gc3RyaW5nXG4gICAqL1xuICBzdGF0aWMgZm9ybWF0KGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbW9tZW50KGRhdGUpLmZvcm1hdChmb3JtYXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdGUgdW5lIGRhdGUgYXZlYyBoZXVyZVxuICAgKiBAcGFyYW0gZGF0ZSBMYSBkYXRlIMOgIGZvcm1hdGVyXG4gICAqIEBwYXJhbSBkYXRlRm9ybWF0IExlIGZvcm1hdCBkZSBkYXRlXG4gICAqIEBwYXJhbSB0aW1lRm9ybWF0IExlIGZvcm1hdCBkJ2hldXJlXG4gICAqIEBwYXJhbSBzZXBhcmF0b3IgTGUgc8OpcGFyYXRldXIgZW50cmUgZGF0ZSBldCBoZXVyZSAoZMOpZmF1dDogXCIgXCIpXG4gICAqIEByZXR1cm5zIExhIGRhdGUgZm9ybWF0w6llIGF2ZWMgbCdoZXVyZVxuICAgKi9cbiAgc3RhdGljIGZvcm1hdFdpdGhUaW1lKFxuICAgIGRhdGU6IERhdGUsXG4gICAgZGF0ZUZvcm1hdDogc3RyaW5nLFxuICAgIHRpbWVGb3JtYXQ6IHN0cmluZyxcbiAgICBzZXBhcmF0b3IgPSBcIiBcIlxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGVTdHIgPSB0aGlzLmZvcm1hdChkYXRlLCBkYXRlRm9ybWF0KTtcbiAgICBjb25zdCB0aW1lU3RyID0gdGhpcy5mb3JtYXQoZGF0ZSwgdGltZUZvcm1hdCk7XG4gICAgcmV0dXJuIGAke2RhdGVTdHJ9JHtzZXBhcmF0b3J9JHt0aW1lU3RyfWA7XG4gIH1cbn1cblxuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjYuMlxuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG4gIHZhciBfX2JpbmQgPSBmdW5jdGlvbihmbiwgbWUpeyByZXR1cm4gZnVuY3Rpb24oKXsgcmV0dXJuIGZuLmFwcGx5KG1lLCBhcmd1bWVudHMpOyB9OyB9O1xuXG4gIChmdW5jdGlvbihyb290LCBmYWN0b3J5KSB7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgcmV0dXJuIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByb290LmkxOG4gPSBmYWN0b3J5KCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByb290LmkxOG4gPSBmYWN0b3J5KCk7XG4gICAgfVxuICB9KSgodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZiAhPT0gbnVsbCA/IHNlbGYgOiB0aGlzKSwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIFRyYW5zbGF0b3IsIGkxOG4sIHRyYW5zbGF0b3I7XG5cbiAgICBUcmFuc2xhdG9yID0gKGZ1bmN0aW9uKCkge1xuICAgICAgZnVuY3Rpb24gVHJhbnNsYXRvcigpIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGUgPSBfX2JpbmQodGhpcy50cmFuc2xhdGUsIHRoaXMpOyAgICAgICAgdGhpcy5kYXRhID0ge1xuICAgICAgICAgIHZhbHVlczoge30sXG4gICAgICAgICAgY29udGV4dHM6IFtdXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29udGV4dCA9IHt9O1xuICAgICAgfVxuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS50cmFuc2xhdGUgPSBmdW5jdGlvbih0ZXh0LCBkZWZhdWx0TnVtT3JGb3JtYXR0aW5nLCBudW1PckZvcm1hdHRpbmdPckNvbnRleHQsIGZvcm1hdHRpbmdPckNvbnRleHQsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIGRlZmF1bHRUZXh0LCBmb3JtYXR0aW5nLCBpc09iamVjdCwgbnVtO1xuXG4gICAgICAgIGlmIChjb250ZXh0ID09IG51bGwpIHtcbiAgICAgICAgICBjb250ZXh0ID0gdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGlzT2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7XG4gICAgICAgICAgdmFyIHR5cGU7XG5cbiAgICAgICAgICB0eXBlID0gdHlwZW9mIG9iajtcbiAgICAgICAgICByZXR1cm4gdHlwZSA9PT0gXCJmdW5jdGlvblwiIHx8IHR5cGUgPT09IFwib2JqZWN0XCIgJiYgISFvYmo7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChpc09iamVjdChkZWZhdWx0TnVtT3JGb3JtYXR0aW5nKSkge1xuICAgICAgICAgIGRlZmF1bHRUZXh0ID0gbnVsbDtcbiAgICAgICAgICBudW0gPSBudWxsO1xuICAgICAgICAgIGZvcm1hdHRpbmcgPSBkZWZhdWx0TnVtT3JGb3JtYXR0aW5nO1xuICAgICAgICAgIGNvbnRleHQgPSBudW1PckZvcm1hdHRpbmdPckNvbnRleHQgfHwgdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdE51bU9yRm9ybWF0dGluZyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgZGVmYXVsdFRleHQgPSBudWxsO1xuICAgICAgICAgICAgbnVtID0gZGVmYXVsdE51bU9yRm9ybWF0dGluZztcbiAgICAgICAgICAgIGZvcm1hdHRpbmcgPSBudW1PckZvcm1hdHRpbmdPckNvbnRleHQ7XG4gICAgICAgICAgICBjb250ZXh0ID0gZm9ybWF0dGluZ09yQ29udGV4dCB8fCB0aGlzLmdsb2JhbENvbnRleHQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmF1bHRUZXh0ID0gZGVmYXVsdE51bU9yRm9ybWF0dGluZztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbnVtT3JGb3JtYXR0aW5nT3JDb250ZXh0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgIG51bSA9IG51bU9yRm9ybWF0dGluZ09yQ29udGV4dDtcbiAgICAgICAgICAgICAgZm9ybWF0dGluZyA9IGZvcm1hdHRpbmdPckNvbnRleHQ7XG4gICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbnVtID0gbnVsbDtcbiAgICAgICAgICAgICAgZm9ybWF0dGluZyA9IG51bU9yRm9ybWF0dGluZ09yQ29udGV4dDtcbiAgICAgICAgICAgICAgY29udGV4dCA9IGZvcm1hdHRpbmdPckNvbnRleHQgfHwgdGhpcy5nbG9iYWxDb250ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPYmplY3QodGV4dCkpIHtcbiAgICAgICAgICBpZiAoaXNPYmplY3QodGV4dFsnaTE4biddKSkge1xuICAgICAgICAgICAgdGV4dCA9IHRleHRbJ2kxOG4nXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlSGFzaCh0ZXh0LCBjb250ZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0KHRleHQsIG51bSwgZm9ybWF0dGluZywgY29udGV4dCwgZGVmYXVsdFRleHQpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihkKSB7XG4gICAgICAgIHZhciBjLCBrLCB2LCBfaSwgX2xlbiwgX3JlZiwgX3JlZjEsIF9yZXN1bHRzO1xuXG4gICAgICAgIGlmICgoZC52YWx1ZXMgIT0gbnVsbCkpIHtcbiAgICAgICAgICBfcmVmID0gZC52YWx1ZXM7XG4gICAgICAgICAgZm9yIChrIGluIF9yZWYpIHtcbiAgICAgICAgICAgIHYgPSBfcmVmW2tdO1xuICAgICAgICAgICAgdGhpcy5kYXRhLnZhbHVlc1trXSA9IHY7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgoZC5jb250ZXh0cyAhPSBudWxsKSkge1xuICAgICAgICAgIF9yZWYxID0gZC5jb250ZXh0cztcbiAgICAgICAgICBfcmVzdWx0cyA9IFtdO1xuICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZjEubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgIGMgPSBfcmVmMVtfaV07XG4gICAgICAgICAgICBfcmVzdWx0cy5wdXNoKHRoaXMuZGF0YS5jb250ZXh0cy5wdXNoKGMpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIF9yZXN1bHRzO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5zZXRDb250ZXh0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nbG9iYWxDb250ZXh0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLmV4dGVuZCA9IGZ1bmN0aW9uKGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leHRlbnNpb24gPSBleHQ7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5jbGVhckNvbnRleHQgPSBmdW5jdGlvbihrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsQ29udGV4dFtrZXldID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc2V0Q29udGV4dCgpO1xuICAgICAgfTtcblxuICAgICAgVHJhbnNsYXRvci5wcm90b3R5cGUucmVzZXREYXRhID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEgPSB7XG4gICAgICAgICAgdmFsdWVzOiB7fSxcbiAgICAgICAgICBjb250ZXh0czogW11cbiAgICAgICAgfTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLnJlc2V0Q29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nbG9iYWxDb250ZXh0ID0ge307XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS50cmFuc2xhdGVIYXNoID0gZnVuY3Rpb24oaGFzaCwgY29udGV4dCkge1xuICAgICAgICB2YXIgaywgdjtcblxuICAgICAgICBmb3IgKGsgaW4gaGFzaCkge1xuICAgICAgICAgIHYgPSBoYXNoW2tdO1xuICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaGFzaFtrXSA9IHRoaXMudHJhbnNsYXRlVGV4dCh2LCBudWxsLCBudWxsLCBjb250ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc2g7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS50cmFuc2xhdGVUZXh0ID0gZnVuY3Rpb24odGV4dCwgbnVtLCBmb3JtYXR0aW5nLCBjb250ZXh0LCBkZWZhdWx0VGV4dCkge1xuICAgICAgICB2YXIgY29udGV4dERhdGEsIHJlc3VsdDtcblxuICAgICAgICBpZiAoY29udGV4dCA9PSBudWxsKSB7XG4gICAgICAgICAgY29udGV4dCA9IHRoaXMuZ2xvYmFsQ29udGV4dDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy51c2VPcmlnaW5hbFRleHQoZGVmYXVsdFRleHQgfHwgdGV4dCwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZXh0RGF0YSA9IHRoaXMuZ2V0Q29udGV4dERhdGEodGhpcy5kYXRhLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKGNvbnRleHREYXRhICE9IG51bGwpIHtcbiAgICAgICAgICByZXN1bHQgPSB0aGlzLmZpbmRUcmFuc2xhdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIGNvbnRleHREYXRhLnZhbHVlcywgZGVmYXVsdFRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZmluZFRyYW5zbGF0aW9uKHRleHQsIG51bSwgZm9ybWF0dGluZywgdGhpcy5kYXRhLnZhbHVlcywgZGVmYXVsdFRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnVzZU9yaWdpbmFsVGV4dChkZWZhdWx0VGV4dCB8fCB0ZXh0LCBudW0sIGZvcm1hdHRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5maW5kVHJhbnNsYXRpb24gPSBmdW5jdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIGRhdGEsIGRlZmF1bHRUZXh0KSB7XG4gICAgICAgIHZhciBhLCBiLCBjLCBkLCBlLCByZXN1bHQsIHRyaXBsZSwgdmFsdWUsIF9pLCBfbGVuO1xuXG4gICAgICAgIHZhbHVlID0gZGF0YVt0ZXh0XTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIGlmICh0aGlzLmV4dGVuc2lvbiAmJiB0eXBlb2YgdGhpcy5leHRlbnNpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmV4dGVuc2lvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcsIHZhbHVlKTtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5hcHBseU51bWJlcnModmFsdWUsIG51bSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUZvcm1hdHRpbmcodmFsdWUsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZU9yaWdpbmFsVGV4dChkZWZhdWx0VGV4dCB8fCB0ZXh0LCBudW0sIGZvcm1hdHRpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKG51bSA9PSBudWxsKSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUZvcm1hdHRpbmcodmFsdWUsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5IHx8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgYSA9IG51bSA9PT0gbnVsbDtcbiAgICAgICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gdmFsdWUubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgICAgdHJpcGxlID0gdmFsdWVbX2ldO1xuICAgICAgICAgICAgICBiID0gdHJpcGxlWzBdID09PSBudWxsO1xuICAgICAgICAgICAgICBjID0gdHJpcGxlWzFdID09PSBudWxsO1xuICAgICAgICAgICAgICBkID0gbnVtID49IHRyaXBsZVswXTtcbiAgICAgICAgICAgICAgZSA9IG51bSA8PSB0cmlwbGVbMV07XG4gICAgICAgICAgICAgIGlmIChhICYmIGIgJiYgYyB8fCAhYSAmJiAoIWIgJiYgZCAmJiAoYyB8fCBlKSB8fCBiICYmICFjICYmIGUpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5hcHBseUZvcm1hdHRpbmcodHJpcGxlWzJdLnJlcGxhY2UoXCItJW5cIiwgU3RyaW5nKC1udW0pKSwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBseUZvcm1hdHRpbmcocmVzdWx0LnJlcGxhY2UoXCIlblwiLCBTdHJpbmcobnVtKSksIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS5hcHBseU51bWJlcnMgPSBmdW5jdGlvbihzdHIsIG51bSkge1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShcIi0lblwiLCBTdHJpbmcoLW51bSkpO1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShcIiVuXCIsIFN0cmluZyhudW0pKTtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLmdldENvbnRleHREYXRhID0gZnVuY3Rpb24oZGF0YSwgY29udGV4dCkge1xuICAgICAgICB2YXIgYywgZXF1YWwsIGtleSwgdmFsdWUsIF9pLCBfbGVuLCBfcmVmLCBfcmVmMTtcblxuICAgICAgICBpZiAoZGF0YS5jb250ZXh0cyA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgX3JlZiA9IGRhdGEuY29udGV4dHM7XG4gICAgICAgIGZvciAoX2kgPSAwLCBfbGVuID0gX3JlZi5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIGMgPSBfcmVmW19pXTtcbiAgICAgICAgICBlcXVhbCA9IHRydWU7XG4gICAgICAgICAgX3JlZjEgPSBjLm1hdGNoZXM7XG4gICAgICAgICAgZm9yIChrZXkgaW4gX3JlZjEpIHtcbiAgICAgICAgICAgIHZhbHVlID0gX3JlZjFba2V5XTtcbiAgICAgICAgICAgIGVxdWFsID0gZXF1YWwgJiYgdmFsdWUgPT09IGNvbnRleHRba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGVxdWFsKSB7XG4gICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuXG4gICAgICBUcmFuc2xhdG9yLnByb3RvdHlwZS51c2VPcmlnaW5hbFRleHQgPSBmdW5jdGlvbih0ZXh0LCBudW0sIGZvcm1hdHRpbmcpIHtcbiAgICAgICAgaWYgKG51bSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGb3JtYXR0aW5nKHRleHQsIG51bSwgZm9ybWF0dGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGb3JtYXR0aW5nKHRleHQucmVwbGFjZShcIiVuXCIsIFN0cmluZyhudW0pKSwgbnVtLCBmb3JtYXR0aW5nKTtcbiAgICAgIH07XG5cbiAgICAgIFRyYW5zbGF0b3IucHJvdG90eXBlLmFwcGx5Rm9ybWF0dGluZyA9IGZ1bmN0aW9uKHRleHQsIG51bSwgZm9ybWF0dGluZykge1xuICAgICAgICB2YXIgaW5kLCByZWdleDtcblxuICAgICAgICBmb3IgKGluZCBpbiBmb3JtYXR0aW5nKSB7XG4gICAgICAgICAgcmVnZXggPSBuZXcgUmVnRXhwKFwiJXtcIiArIGluZCArIFwifVwiLCBcImdcIik7XG4gICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShyZWdleCwgZm9ybWF0dGluZ1tpbmRdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBUcmFuc2xhdG9yO1xuXG4gICAgfSkoKTtcbiAgICB0cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0b3IoKTtcbiAgICBpMThuID0gdHJhbnNsYXRvci50cmFuc2xhdGU7XG4gICAgaTE4bi50cmFuc2xhdG9yID0gdHJhbnNsYXRvcjtcbiAgICBpMThuLmNyZWF0ZSA9IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIHZhciB0cmFucztcblxuICAgICAgdHJhbnMgPSBuZXcgVHJhbnNsYXRvcigpO1xuICAgICAgaWYgKGRhdGEgIT0gbnVsbCkge1xuICAgICAgICB0cmFucy5hZGQoZGF0YSk7XG4gICAgICB9XG4gICAgICB0cmFucy50cmFuc2xhdGUuY3JlYXRlID0gaTE4bi5jcmVhdGU7XG4gICAgICB0cmFucy50cmFuc2xhdGUudHJhbnNsYXRvciA9IHRyYW5zO1xuICAgICAgcmV0dXJuIHRyYW5zLnRyYW5zbGF0ZTtcbiAgICB9O1xuICAgIHJldHVybiBpMThuO1xuICB9KTtcblxufSkuY2FsbCh0aGlzKTtcbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIlRvZGF5XCIsXG4gIHRvbW9ycm93OiBcIlRvbW9ycm93XCIsXG4gIHllc3RlcmRheTogXCJZZXN0ZXJkYXlcIixcbiAgbmV4dDogXCJOZXh0XCIsXG4gIGxhc3Q6IFwiTGFzdFwiLFxuICB0aGlzOiBcIlRoaXNcIixcbiAgaW46IFwiSW5cIixcbiAgc3VuZGF5OiBcIlN1bmRheVwiLFxuICBtb25kYXk6IFwiTW9uZGF5XCIsXG4gIHR1ZXNkYXk6IFwiVHVlc2RheVwiLFxuICB3ZWRuZXNkYXk6IFwiV2VkbmVzZGF5XCIsXG4gIHRodXJzZGF5OiBcIlRodXJzZGF5XCIsXG4gIGZyaWRheTogXCJGcmlkYXlcIixcbiAgc2F0dXJkYXk6IFwiU2F0dXJkYXlcIixcbiAgaW5taW51dGVzOiBcImluICV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIGluaG91cnM6IFwiaW4gJXt0aW1lRGVsdGF9IGhvdXJzXCIsXG4gIGluZGF5czogXCJpbiAle3RpbWVEZWx0YX0gZGF5c1wiLFxuICBpbndlZWtzOiBcImluICV7dGltZURlbHRhfSB3ZWVrc1wiLFxuICBpbm1vbnRoczogXCJpbiAle3RpbWVEZWx0YX0gbW9udGhzXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9IGRheXMgYWdvXCIsXG4gIHdlZWtzYWdvOiBcIiV7dGltZURlbHRhfSB3ZWVrcyBhZ29cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSBtb250aHMgYWdvXCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9IG1pbnV0ZXMgYWdvXCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSBob3VycyBhZ29cIixcbiAgdGltZTogXCJUaW1lXCIsXG4gIG5vdzogXCJOb3dcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0ZXNcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBob3VyXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IGhvdXJcIixcbiAgbWludXRlOiBcIk1pbnV0ZXxNaW51dGVzfG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJIb3VyfEhvdXJzfGh8aHJ8aHJzfGhcIixcbiAgZGF5OiBcIkRheXxEYXlzfGRcIixcbiAgd2VlazogXCJXZWVrfFdlZWtzfHdcIixcbiAgbW9udGg6IFwiTW9udGh8TW9udGhzfE18bW9cIixcbiAgeWVhcjogXCJZZWFyfFllYXJzfHl8eXJ8eXJzXCIsXG4gIGFuZDogXCJBbmRcIixcbiAgYXQ6IFwiQXRcIixcbiAgZnJvbTogXCJGcm9tXCIsXG4gIHRvOiBcIlRvfFVudGlsfFRpbGxcIixcbiAgb2Y6IFwib2ZcIixcbiAgZmlyc3Q6IFwiZmlyc3RcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG4iLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCLku4rml6VcIixcbiAgdG9tb3Jyb3c6IFwi5piO5pelXCIsXG4gIHllc3RlcmRheTogXCLmmKjml6VcIixcbiAgbmV4dDogXCLmrKF857+MfOadpVwiLCAvLyBcIlRzdWdpL1lva3UvUmFpXCIgKGV4OiBSYWktc2h1ID0gU2VtYWluZSBwcm9jaGFpbmUpXG4gIGxhc3Q6IFwi5YmNfOWOu3zlhYh85pioXCIsIC8vIFwiTWFlL0t5by9TZW4vU2FrdVwiIChleDogU2VuLXNodSA9IFNlbWFpbmUgZGVybmnDqHJlKVxuICB0aGlzOiBcIuS7inzmnKx85b2TXCIsIC8vIFwiSW1hL0hvbi9Ub1wiIChleDogS29uLXNodSA9IENldHRlIHNlbWFpbmUpXG4gIGluOiBcIuOBguOBqHxhdG9cIiwgLy8gXCJBdG9cIiAoUG91ciBkaXJlIFwiRGFucyBYIG1pbnV0ZXNcIiAtPiBcIkF0byBYIGZ1blwiKVxuICBzdW5kYXk6IFwi5pel5puc5pelXCIsXG4gIG1vbmRheTogXCLmnIjmm5zml6VcIixcbiAgdHVlc2RheTogXCLngavmm5zml6VcIixcbiAgd2VkbmVzZGF5OiBcIuawtOabnOaXpVwiLFxuICB0aHVyc2RheTogXCLmnKjmm5zml6VcIixcbiAgZnJpZGF5OiBcIumHkeabnOaXpVwiLFxuICBzYXR1cmRheTogXCLlnJ/mm5zml6VcIixcbiAgaW5taW51dGVzOiBcIiV7dGltZURlbHRhfeWIhuW+jFwiLCAvLyBYIG1pbnV0ZXMgYWZ0ZXJcbiAgaW5ob3VyczogXCIle3RpbWVEZWx0YX3mmYLplpPlvoxcIixcbiAgaW5kYXlzOiBcIiV7dGltZURlbHRhfeaXpeW+jFwiLFxuICBpbndlZWtzOiBcIiV7dGltZURlbHRhfemAsemWk+W+jFwiLFxuICBpbm1vbnRoczogXCIle3RpbWVEZWx0YX3jg7bmnIjlvoxcIixcbiAgZGF5c2FnbzogXCIle3RpbWVEZWx0YX3ml6XliY1cIiwgLy8gWCBkYXlzIGFnb1xuICB3ZWVrc2FnbzogXCIle3RpbWVEZWx0YX3pgLHplpPliY1cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfeODtuaciOWJjVwiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfeWIhuWJjVwiLCAvLyBYIG1pbnV0ZXMgYWdvXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfeaZgumWk+WJjVwiLCAvLyBYIGhvdXJzIGFnb1xuICB0aW1lOiBcIuaZgumWk1wiLFxuICBub3c6IFwi5LuKXCIsIC8vIEltYSAoTWFpbnRlbmFudClcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSDliIZcIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0g5YiGXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX0g5pmC6ZaTXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IOaZgumWk1wiLFxuICBtaW51dGU6IFwi5YiGfOOBteOCk3zjgbfjgpN8ZnVuXCIsXG4gIGhvdXI6IFwi5pmC6ZaTfOOBmOOBi+OCk3zmmYJ844GYXCIsXG4gIGRheTogXCLml6V844Gr44GhXCIsXG4gIHdlZWs6IFwi6YCxfOmAsemWk3zjgZfjgoXjgYZ844GX44KF44GG44GL44KTXCIsXG4gIG1vbnRoOiBcIuaciHzjg7bmnIh844GL44GS44GkfOOBjOOBpFwiLFxuICB5ZWFyOiBcIuW5tHzjga3jgpNcIixcbiAgb2Y6IFwi44GuXCIsXG4gIGZpcnN0OiBcIuacgOWInXznrKzkuIB85YidfOacgOWIneOBrlwiLFxuICBhbmQ6IFwi44GofOOBiuOCiOOBs1wiLFxuICBhdDogXCLjgat844GnXCIsXG4gIGZyb206IFwi44GL44KJfOOCiOOCilwiLFxuICB0bzogXCLjgb7jgad844G+44Gn44GrXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0OyIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIkF1am91cmQnaHVpXCIsXG4gIHRvbW9ycm93OiBcIkRlbWFpblwiLFxuICB5ZXN0ZXJkYXk6IFwiSGllclwiLFxuICBuZXh0OiBcInByb2NoYWlufHByb2NoYWluZXxzdWl2YW50fHN1aXZhbnRlXCIsXG4gIGxhc3Q6IFwiZGVybmllcnxkZXJuacOocmV8cGFzc8OpfHBhc3PDqWVcIixcbiAgdGhpczogXCJjZXxjZXR0ZXxjZXRcIixcbiAgaW46IFwiZGFuc1wiLFxuICBzdW5kYXk6IFwiRGltYW5jaGVcIixcbiAgbW9uZGF5OiBcIkx1bmRpXCIsXG4gIHR1ZXNkYXk6IFwiTWFyZGlcIixcbiAgd2VkbmVzZGF5OiBcIk1lcmNyZWRpXCIsXG4gIHRodXJzZGF5OiBcIkpldWRpXCIsXG4gIGZyaWRheTogXCJWZW5kcmVkaVwiLFxuICBzYXR1cmRheTogXCJTYW1lZGlcIixcbiAgaW5taW51dGVzOiBcImRhbnMgJXt0aW1lRGVsdGF9IG1pbnV0ZXNcIixcbiAgaW5ob3VyczogXCJkYW5zICV7dGltZURlbHRhfSBoZXVyZXNcIixcbiAgaW5kYXlzOiBcImRhbnMgJXt0aW1lRGVsdGF9IGpvdXJzXCIsXG4gIGlud2Vla3M6IFwiZGFucyAle3RpbWVEZWx0YX0gc2VtYWluZXNcIixcbiAgaW5tb250aHM6IFwiZGFucyAle3RpbWVEZWx0YX0gbW9pc1wiLFxuICBkYXlzYWdvOiBcImlsIHkgYSAle3RpbWVEZWx0YX0gam91cnNcIixcbiAgd2Vla3NhZ286IFwiaWwgeSBhICV7dGltZURlbHRhfSBzZW1haW5lc1wiLFxuICBtb250aHNhZ286IFwiaWwgeSBhICV7dGltZURlbHRhfSBtb2lzXCIsXG4gIG1pbnV0ZXNhZ286IFwiaWwgeSBhICV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIGhvdXJzYWdvOiBcImlsIHkgYSAle3RpbWVEZWx0YX0gaGV1cmVzXCIsXG4gIHRpbWU6IFwiaGV1cmVcIixcbiAgbm93OiBcIm1haW50ZW5hbnRcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dGVzXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0ZXNcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBoZXVyZVwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSBoZXVyZVwiLFxuICBtaW51dGU6IFwibWludXRlfG1pbnV0ZXN8bWlufG1pbnN8bVwiLFxuICBob3VyOiBcImhldXJlfGhldXJlc3xoXCIsXG4gIGRheTogXCJqb3VyfGpvdXJzfGp8ZFwiLFxuICB3ZWVrOiBcInNlbWFpbmV8c2VtYWluZXN8c3x3XCIsXG4gIG1vbnRoOiBcIm1vaXN8TXxtb1wiLFxuICB5ZWFyOiBcImFubsOpZXxhbm7DqWVzfGFufGFuc3xhfHlcIixcbiAgYW5kOiBcImV0XCIsXG4gIGF0OiBcIsOgfGFcIixcbiAgZnJvbTogXCJkZXxkZXB1aXN8ZHVcIixcbiAgdG86IFwiw6B8YXxqdXNxdSfDoHxqdXNxdSdhdXxhdVwiLFxuICBvZjogXCJkdXxkZVwiLFxuICBmaXJzdDogXCJwcmVtaWVyfHByZW1pw6hyZVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJIb2plXCIsXG4gIHRvbW9ycm93OiBcIkFtYW5ow6NcIixcbiAgeWVzdGVyZGF5OiBcIk9udGVtXCIsXG4gIG5leHQ6IFwicHLDs3hpbW98cHLDs3hpbWF8c2VndWludGVcIixcbiAgbGFzdDogXCLDumx0aW1vfMO6bHRpbWF8cGFzc2Fkb3xwYXNzYWRhXCIsXG4gIHRoaXM6IFwiZXN0ZXxlc3RhXCIsXG4gIGluOiBcImVtfGRhcXVpIGF8ZGFxdWlcIixcbiAgc3VuZGF5OiBcIkRvbWluZ29cIixcbiAgbW9uZGF5OiBcIlNlZ3VuZGEtZmVpcmFcIixcbiAgdHVlc2RheTogXCJUZXLDp2EtZmVpcmFcIixcbiAgd2VkbmVzZGF5OiBcIlF1YXJ0YS1mZWlyYVwiLFxuICB0aHVyc2RheTogXCJRdWludGEtZmVpcmFcIixcbiAgZnJpZGF5OiBcIlNleHRhLWZlaXJhXCIsXG4gIHNhdHVyZGF5OiBcIlPDoWJhZG9cIixcbiAgaW5taW51dGVzOiBcImVtICV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIGluaG91cnM6IFwiZW0gJXt0aW1lRGVsdGF9IGhvcmFzXCIsXG4gIGluZGF5czogXCJlbSAle3RpbWVEZWx0YX0gZGlhc1wiLFxuICBpbndlZWtzOiBcImVtICV7dGltZURlbHRhfSBzZW1hbmFzXCIsXG4gIGlubW9udGhzOiBcImVtICV7dGltZURlbHRhfSBtZXNlc1wiLFxuICBkYXlzYWdvOiBcImjDoSAle3RpbWVEZWx0YX0gZGlhc1wiLFxuICB3ZWVrc2FnbzogXCJow6EgJXt0aW1lRGVsdGF9IHNlbWFuYXNcIixcbiAgbW9udGhzYWdvOiBcImjDoSAle3RpbWVEZWx0YX0gbWVzZXNcIixcbiAgbWludXRlc2FnbzogXCJow6EgJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgaG91cnNhZ286IFwiaMOhICV7dGltZURlbHRhfSBob3Jhc1wiLFxuICBhZ29zdWZmaXg6IFwiYXRyw6FzfGF0cmFzXCIsXG4gIHRpbWU6IFwiaG9yYVwiLFxuICBub3c6IFwiYWdvcmFcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgcGx1c2hvdXI6IFwiKyV7dGltZURlbHRhfSBob3JhXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IGhvcmFcIixcbiAgbWludXRlOiBcIm1pbnV0b3xtaW51dG9zfG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJob3JhfGhvcmFzfGhcIixcbiAgZGF5OiBcImRpYXxkaWFzfGRcIixcbiAgd2VlazogXCJzZW1hbmF8c2VtYW5hc3xzfHdcIixcbiAgbW9udGg6IFwibcOqc3xtZXNlc3xNfG1vXCIsXG4gIHllYXI6IFwiYW5vfGFub3N8YXx5XCIsXG4gIGFuZDogXCJlXCIsXG4gIGF0OiBcIsOgc3xhc3zDoHxhXCIsXG4gIGZyb206IFwiZGV8ZGVzZGVcIixcbiAgdG86IFwiYXTDqXxhb3zDoFwiLFxuICBvZjogXCJkb3xkYXxkZVwiLFxuICBmaXJzdDogXCJwcmltZWlyb3xwcmltZWlyYVwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJIZXV0ZVwiLFxuICB0b21vcnJvdzogXCJNb3JnZW5cIixcbiAgeWVzdGVyZGF5OiBcIkdlc3Rlcm5cIixcbiAgbmV4dDogXCJuw6RjaHN0ZXJ8bsOkY2hzdGV8bsOkY2hzdGVzfG7DpGNoc3RlblwiLFxuICBsYXN0OiBcImxldHp0ZXJ8bGV0enRlfGxldHp0ZXNcIixcbiAgdGhpczogXCJkaWVzZXJ8ZGllc2V8ZGllc2VzXCIsXG4gIGluOiBcImluXCIsXG4gIHN1bmRheTogXCJTb25udGFnXCIsXG4gIG1vbmRheTogXCJNb250YWdcIixcbiAgdHVlc2RheTogXCJEaWVuc3RhZ1wiLFxuICB3ZWRuZXNkYXk6IFwiTWl0dHdvY2hcIixcbiAgdGh1cnNkYXk6IFwiRG9ubmVyc3RhZ1wiLFxuICBmcmlkYXk6IFwiRnJlaXRhZ1wiLFxuICBzYXR1cmRheTogXCJTYW1zdGFnXCIsXG4gIGlubWludXRlczogXCJpbiAle3RpbWVEZWx0YX0gTWludXRlblwiLFxuICBpbmhvdXJzOiBcImluICV7dGltZURlbHRhfSBTdHVuZGVuXCIsXG4gIGluZGF5czogXCJpbiAle3RpbWVEZWx0YX0gVGFnZW5cIixcbiAgaW53ZWVrczogXCJpbiAle3RpbWVEZWx0YX0gV29jaGVuXCIsXG4gIGlubW9udGhzOiBcImluICV7dGltZURlbHRhfSBNb25hdGVuXCIsXG4gIGRheXNhZ286IFwidm9yICV7dGltZURlbHRhfSBUYWdlblwiLFxuICB3ZWVrc2FnbzogXCJ2b3IgJXt0aW1lRGVsdGF9IFdvY2hlblwiLFxuICBtb250aHNhZ286IFwidm9yICV7dGltZURlbHRhfSBNb25hdGVuXCIsXG4gIG1pbnV0ZXNhZ286IFwidm9yICV7dGltZURlbHRhfSBNaW51dGVuXCIsXG4gIGhvdXJzYWdvOiBcInZvciAle3RpbWVEZWx0YX0gU3R1bmRlblwiLFxuICB0aW1lOiBcIlplaXRcIixcbiAgbm93OiBcImpldHp0XCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0gTWludXRlblwiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfSBNaW51dGVuXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX0gU3R1bmRlXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9IFN0dW5kZVwiLFxuICBtaW51dGU6IFwiTWludXRlfE1pbnV0ZW58bWlufG1pbnN8bVwiLFxuICBob3VyOiBcIlN0dW5kZXxTdHVuZGVufFN0ZHxoXCIsXG4gIGRheTogXCJUYWd8VGFnZXxkfHRcIixcbiAgd2VlazogXCJXb2NoZXxXb2NoZW58d1wiLFxuICBtb250aDogXCJNb25hdHxNb25hdGV8TW9uYXRzfE18bW9cIixcbiAgeWVhcjogXCJKYWhyfEphaHJlfGp8eVwiLFxuICBhbmQ6IFwidW5kXCIsXG4gIGF0OiBcInVtXCIsXG4gIGZyb206IFwidm9ufGFiXCIsXG4gIHRvOiBcImJpc3xiaXMgenVtXCIsXG4gIG9mOiBcImRlc3x2b21cIixcbiAgZmlyc3Q6IFwiZXJzdGVyfGVyc3RlfGVyc3Rlc1wiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDsiLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCJWYW5kYWFnXCIsXG4gIHRvbW9ycm93OiBcIk1vcmdlblwiLFxuICB5ZXN0ZXJkYXk6IFwiR2lzdGVyZW5cIixcbiAgbmV4dDogXCJ2b2xnZW5kZVwiLFxuICBsYXN0OiBcInZvcmlnZXxsYWF0c3RlXCIsXG4gIHRoaXM6IFwiZGV6ZXxkaXRcIixcbiAgaW46IFwib3ZlclwiLFxuICBzdW5kYXk6IFwiem9uZGFnXCIsXG4gIG1vbmRheTogXCJtYWFuZGFnXCIsXG4gIHR1ZXNkYXk6IFwiZGluc2RhZ1wiLFxuICB3ZWRuZXNkYXk6IFwid29lbnNkYWdcIixcbiAgdGh1cnNkYXk6IFwiZG9uZGVyZGFnXCIsXG4gIGZyaWRheTogXCJ2cmlqZGFnXCIsXG4gIHNhdHVyZGF5OiBcInphdGVyZGFnXCIsXG4gIGlubWludXRlczogXCJvdmVyICV7dGltZURlbHRhfSBtaW51dGVuXCIsXG4gIGluaG91cnM6IFwib3ZlciAle3RpbWVEZWx0YX0gdXJlblwiLFxuICBpbmRheXM6IFwib3ZlciAle3RpbWVEZWx0YX0gZGFnZW5cIixcbiAgaW53ZWVrczogXCJvdmVyICV7dGltZURlbHRhfSB3ZWtlblwiLFxuICBpbm1vbnRoczogXCJvdmVyICV7dGltZURlbHRhfSBtYWFuZGVuXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9IGRhZ2VuIGdlbGVkZW5cIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF9IHdla2VuIGdlbGVkZW5cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSBtYWFuZGVuIGdlbGVkZW5cIixcbiAgbWludXRlc2FnbzogXCIle3RpbWVEZWx0YX0gbWludXRlbiBnZWxlZGVuXCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSB1cmVuIGdlbGVkZW5cIixcbiAgdGltZTogXCJ0aWpkXCIsXG4gIG5vdzogXCJudVwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF9IG1pbnV0ZW5cIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0gbWludXRlblwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IHV1clwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSB1dXJcIixcbiAgbWludXRlOiBcIm1pbnV1dHxtaW51dGVufG1pbnxtaW5zfG1cIixcbiAgaG91cjogXCJ1dXJ8dXJlbnx1fGhcIixcbiAgZGF5OiBcImRhZ3xkYWdlbnxkXCIsXG4gIHdlZWs6IFwid2Vla3x3ZWtlbnx3XCIsXG4gIG1vbnRoOiBcIm1hYW5kfG1hYW5kZW58TXxtb1wiLFxuICB5ZWFyOiBcImphYXJ8amFyZW58anx5XCIsXG4gIGFuZDogXCJlblwiLFxuICBhdDogXCJvbVwiLFxuICBmcm9tOiBcInZhbnx2YW5hZlwiLFxuICB0bzogXCJ0b3R8dG90IGVuIG1ldFwiLFxuICBvZjogXCJ2YW5cIixcbiAgZmlyc3Q6IFwiZWVyc3RlXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuIiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwiSG95XCIsXG4gIHRvbW9ycm93OiBcIk1hw7FhbmFcIixcbiAgeWVzdGVyZGF5OiBcIkF5ZXJcIixcbiAgbmV4dDogXCJwcsOzeGltb3xwcsOzeGltYXxzaWd1aWVudGVcIixcbiAgbGFzdDogXCLDumx0aW1vfMO6bHRpbWF8cGFzYWRvfHBhc2FkYVwiLFxuICB0aGlzOiBcImVzdGV8ZXN0YVwiLFxuICBpbjogXCJlbnxkZW50cm8gZGVcIixcbiAgc3VuZGF5OiBcIkRvbWluZ29cIixcbiAgbW9uZGF5OiBcIkx1bmVzXCIsXG4gIHR1ZXNkYXk6IFwiTWFydGVzXCIsXG4gIHdlZG5lc2RheTogXCJNacOpcmNvbGVzXCIsXG4gIHRodXJzZGF5OiBcIkp1ZXZlc1wiLFxuICBmcmlkYXk6IFwiVmllcm5lc1wiLFxuICBzYXR1cmRheTogXCJTw6FiYWRvXCIsXG4gIGlubWludXRlczogXCJlbiAle3RpbWVEZWx0YX0gbWludXRvc1wiLFxuICBpbmhvdXJzOiBcImVuICV7dGltZURlbHRhfSBob3Jhc1wiLFxuICBpbmRheXM6IFwiZW4gJXt0aW1lRGVsdGF9IGTDrWFzXCIsXG4gIGlud2Vla3M6IFwiZW4gJXt0aW1lRGVsdGF9IHNlbWFuYXNcIixcbiAgaW5tb250aHM6IFwiZW4gJXt0aW1lRGVsdGF9IG1lc2VzXCIsXG4gIGRheXNhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gZMOtYXNcIixcbiAgd2Vla3NhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gc2VtYW5hc1wiLFxuICBtb250aHNhZ286IFwiaGFjZSAle3RpbWVEZWx0YX0gbWVzZXNcIixcbiAgbWludXRlc2FnbzogXCJoYWNlICV7dGltZURlbHRhfSBtaW51dG9zXCIsXG4gIGhvdXJzYWdvOiBcImhhY2UgJXt0aW1lRGVsdGF9IGhvcmFzXCIsXG4gIGFnb3N1ZmZpeDogXCJhdHLDoXN8YXRyYXNcIixcbiAgdGltZTogXCJob3JhXCIsXG4gIG5vdzogXCJhaG9yYVwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF9IG1pbnV0b3NcIixcbiAgbWludXNtaW51dGVzOiBcIi0le3RpbWVEZWx0YX0gbWludXRvc1wiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IGhvcmFcIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX0gaG9yYVwiLFxuICBtaW51dGU6IFwibWludXRvfG1pbnV0b3N8bWlufG1pbnN8bVwiLFxuICBob3VyOiBcImhvcmF8aG9yYXN8aFwiLFxuICBkYXk6IFwiZMOtYXxkw61hc3xkXCIsXG4gIHdlZWs6IFwic2VtYW5hfHNlbWFuYXN8c3x3XCIsXG4gIG1vbnRoOiBcIm1lc3xtZXNlc3xNfG1vXCIsXG4gIHllYXI6IFwiYcOxb3xhw7Fvc3xhfHlcIixcbiAgYW5kOiBcInlcIixcbiAgYXQ6IFwiYSBsYXN8YSBsYXxhfGVuXCIsXG4gIGZyb206IFwiZGV8ZGVzZGVcIixcbiAgdG86IFwiYXxoYXN0YVwiLFxuICBvZjogXCJkZXxkZWxcIixcbiAgZmlyc3Q6IFwicHJpbWVyfHByaW1lcmFcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG5cbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIk9nZ2lcIixcbiAgdG9tb3Jyb3c6IFwiRG9tYW5pXCIsXG4gIHllc3RlcmRheTogXCJJZXJpXCIsXG4gIG5leHQ6IFwicHJvc3NpbW98cHJvc3NpbWF8c2VndWVudGVcIixcbiAgbGFzdDogXCJ1bHRpbW98dWx0aW1hfHNjb3Jzb3xzY29yc2F8cGFzc2F0b3xwYXNzYXRhXCIsXG4gIHRoaXM6IFwicXVlc3RvfHF1ZXN0YVwiLFxuICBpbjogXCJpbnx0cmFcIixcbiAgc3VuZGF5OiBcIkRvbWVuaWNhXCIsXG4gIG1vbmRheTogXCJMdW5lZMOsXCIsXG4gIHR1ZXNkYXk6IFwiTWFydGVkw6xcIixcbiAgd2VkbmVzZGF5OiBcIk1lcmNvbGVkw6xcIixcbiAgdGh1cnNkYXk6IFwiR2lvdmVkw6xcIixcbiAgZnJpZGF5OiBcIlZlbmVyZMOsXCIsXG4gIHNhdHVyZGF5OiBcIlNhYmF0b1wiLFxuICBpbm1pbnV0ZXM6IFwidHJhICV7dGltZURlbHRhfSBtaW51dGlcIixcbiAgaW5ob3VyczogXCJ0cmEgJXt0aW1lRGVsdGF9IG9yZVwiLFxuICBpbmRheXM6IFwidHJhICV7dGltZURlbHRhfSBnaW9ybmlcIixcbiAgaW53ZWVrczogXCJ0cmEgJXt0aW1lRGVsdGF9IHNldHRpbWFuZVwiLFxuICBpbm1vbnRoczogXCJ0cmEgJXt0aW1lRGVsdGF9IG1lc2lcIixcbiAgZGF5c2FnbzogXCIle3RpbWVEZWx0YX0gZ2lvcm5pIGZhXCIsXG4gIHdlZWtzYWdvOiBcIiV7dGltZURlbHRhfSBzZXR0aW1hbmUgZmFcIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSBtZXNpIGZhXCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9IG1pbnV0aSBmYVwiLFxuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX0gb3JlIGZhXCIsXG4gIHRpbWU6IFwib3JhXCIsXG4gIG5vdzogXCJhZGVzc298b3JhXCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0gbWludXRpXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9IG1pbnV0aVwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9IG9yYVwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSBvcmFcIixcbiAgbWludXRlOiBcIm1pbnV0b3xtaW51dGl8bWlufG1pbnN8bVwiLFxuICBob3VyOiBcIm9yYXxvcmV8aFwiLFxuICBkYXk6IFwiZ2lvcm5vfGdpb3JuaXxnfGRcIixcbiAgd2VlazogXCJzZXR0aW1hbmF8c2V0dGltYW5lfHN8d1wiLFxuICBtb250aDogXCJtZXNlfG1lc2l8TXxtb1wiLFxuICB5ZWFyOiBcImFubm98YW5uaXxhfHlcIixcbiAgYW5kOiBcImVcIixcbiAgYXQ6IFwiYWxsZXxhbGxhfGFcIixcbiAgZnJvbTogXCJkYXxkYWx8ZGFsbGFcIixcbiAgdG86IFwiYXxmaW5vIGF8ZmlubyBhbHxmaW5vIGFsbGFcIixcbiAgb2Y6IFwiZGVsfGRlbGxhfGRpXCIsXG4gIGZpcnN0OiBcInByaW1vfHByaW1hXCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuXG4iLCJjb25zdCBkaWN0ID0ge1xuICB0b2RheTogXCLQodC10LPQvtC00L3Rj1wiLFxuICB0b21vcnJvdzogXCLQl9Cw0LLRgtGA0LBcIixcbiAgeWVzdGVyZGF5OiBcItCS0YfQtdGA0LBcIixcbiAgbmV4dDogXCLRgdC70LXQtNGD0Y7RidC40Ll80YHQu9C10LTRg9GO0YnQsNGPfNGB0LvQtdC00YPRjtGJ0LXQtXzRgdC70LXQtNGD0Y7RidC40LVcIixcbiAgbGFzdDogXCLQv9C+0YHQu9C10LTQvdC40Ll80L/QvtGB0LvQtdC00L3Rj9GPfNC/0L7RgdC70LXQtNC90LXQtXzQv9C+0YHQu9C10LTQvdC40LV80L/RgNC+0YjQu9GL0Ll80L/RgNC+0YjQu9Cw0Y980L/RgNC+0YjQu9C+0LV80L/RgNC+0YjQu9GL0LVcIixcbiAgdGhpczogXCLRjdGC0L7RgnzRjdGC0LB80Y3RgtC+fNGN0YLQuFwiLFxuICBpbjogXCLRh9C10YDQtdC3XCIsXG4gIHN1bmRheTogXCLQktC+0YHQutGA0LXRgdC10L3RjNC1fNCS0L7RgdC60YDQtdGB0LXQvdGM0Y9cIixcbiAgbW9uZGF5OiBcItCf0L7QvdC10LTQtdC70YzQvdC40Lp80J/QvtC90LXQtNC10LvRjNC90LjQutCwXCIsXG4gIHR1ZXNkYXk6IFwi0JLRgtC+0YDQvdC40Lp80JLRgtC+0YDQvdC40LrQsFwiLFxuICB3ZWRuZXNkYXk6IFwi0KHRgNC10LTQsHzQodGA0LXQtNGLXCIsXG4gIHRodXJzZGF5OiBcItCn0LXRgtCy0LXRgNCzfNCn0LXRgtCy0LXRgNCz0LBcIixcbiAgZnJpZGF5OiBcItCf0Y/RgtC90LjRhtCwfNCf0Y/RgtC90LjRhtGLXCIsXG4gIHNhdHVyZGF5OiBcItCh0YPQsdCx0L7RgtCwfNCh0YPQsdCx0L7RgtGLXCIsXG4gIGlubWludXRlczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDQvNC40L3Rg9GCfNC80LjQvdGD0YLRg3zQvNC40L3Rg9GC0YtcIixcbiAgaW5ob3VyczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDRh9Cw0YF80YfQsNGB0LB80YfQsNGB0L7QslwiLFxuICBpbmRheXM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LTQtdC90Yx80LTQvdGPfNC00L3QtdC5XCIsXG4gIGlud2Vla3M6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0L3QtdC00LXQu9GOfNC90LXQtNC10LvQuHzQvdC10LTQtdC70YxcIixcbiAgaW5tb250aHM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LzQtdGB0Y/RhnzQvNC10YHRj9GG0LB80LzQtdGB0Y/RhtC10LJcIixcbiAgZGF5c2FnbzogXCIle3RpbWVEZWx0YX0g0LTQtdC90Yx80LTQvdGPfNC00L3QtdC5INC90LDQt9Cw0LRcIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF9INC90LXQtNC10LvRjnzQvdC10LTQtdC70Lh80L3QtdC00LXQu9GMINC90LDQt9Cw0LRcIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSDQvNC10YHRj9GGfNC80LXRgdGP0YbQsHzQvNC10YHRj9GG0LXQsiDQvdCw0LfQsNC0XCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRiyDQvdCw0LfQsNC0XCIsXG4gIGhvdXJzYWdvOiBcIiV7dGltZURlbHRhfSDRh9Cw0YF80YfQsNGB0LB80YfQsNGB0L7QsiDQvdCw0LfQsNC0XCIsXG4gIHRpbWU6IFwi0LLRgNC10LzRj1wiLFxuICBub3c6IFwi0YHQtdC50YfQsNGBXCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0g0LzQuNC90YPRgnzQvNC40L3Rg9GC0YN80LzQuNC90YPRgtGLXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRi1wiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9INGH0LDRgXzRh9Cw0YHQsHzRh9Cw0YHQvtCyXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF9INGH0LDRgXzRh9Cw0YHQsHzRh9Cw0YHQvtCyXCIsXG4gIG1pbnV0ZTogXCLQvNC40L3Rg9GC0LB80LzQuNC90YPRgtGLfNC80LjQvdGD0YJ80LzQuNC9fNC8XCIsXG4gIGhvdXI6IFwi0YfQsNGBfNGH0LDRgdCwfNGH0LDRgdC+0LJ80YdcIixcbiAgZGF5OiBcItC00LXQvdGMfNC00L3Rj3zQtNC90LXQuXzQtFwiLFxuICB3ZWVrOiBcItC90LXQtNC10LvRj3zQvdC10LTQtdC70Lh80L3QtdC00LXQu9GMfNC9fNC90LXQtFwiLFxuICBtb250aDogXCLQvNC10YHRj9GGfNC80LXRgdGP0YbQsHzQvNC10YHRj9GG0LXQsnzQvNC10YF80LxcIixcbiAgeWVhcjogXCLQs9C+0LR80LPQvtC00LB80LvQtdGCfNCzfNC7XCIsXG4gIGFuZDogXCLQuFwiLFxuICBhdDogXCLQslwiLFxuICBmcm9tOiBcItGBfNC+0YJcIixcbiAgdG86IFwi0LTQvnzQulwiLFxuICBvZjogXCLQuNC3fNC+0YJcIixcbiAgZmlyc3Q6IFwi0L/QtdGA0LLRi9C5fNC/0LXRgNCy0LDRj3zQv9C10YDQstC+0LV80L/QtdGA0LLRi9C1XCIsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBkaWN0O1xuIiwiY29uc3QgZGljdCA9IHtcbiAgdG9kYXk6IFwi0KHRjNC+0LPQvtC00L3RllwiLFxuICB0b21vcnJvdzogXCLQl9Cw0LLRgtGA0LBcIixcbiAgeWVzdGVyZGF5OiBcItCS0YfQvtGA0LBcIixcbiAgbmV4dDogXCLQvdCw0YHRgtGD0L/QvdC40Ll80L3QsNGB0YLRg9C/0L3QsHzQvdCw0YHRgtGD0L/QvdC1fNC90LDRgdGC0YPQv9C90ZZcIixcbiAgbGFzdDogXCLQvtGB0YLQsNC90L3RltC5fNC+0YHRgtCw0L3QvdGPfNC+0YHRgtCw0L3QvdGUfNC+0YHRgtCw0L3QvdGWfNC80LjQvdGD0LvQuNC5fNC80LjQvdGD0LvQsHzQvNC40L3Rg9C70LV80LzQuNC90YPQu9GWXCIsXG4gIHRoaXM6IFwi0YbQtdC5fNGG0Y980YbQtXzRhtGWXCIsXG4gIGluOiBcItGH0LXRgNC10LdcIixcbiAgc3VuZGF5OiBcItCd0LXQtNGW0LvRj3zQndC10LTRltC70ZZcIixcbiAgbW9uZGF5OiBcItCf0L7QvdC10LTRltC70L7QunzQn9C+0L3QtdC00ZbQu9C60LBcIixcbiAgdHVlc2RheTogXCLQktGW0LLRgtC+0YDQvtC6fNCS0ZbQstGC0L7RgNC60LBcIixcbiAgd2VkbmVzZGF5OiBcItCh0LXRgNC10LTQsHzQodC10YDQtdC00LhcIixcbiAgdGh1cnNkYXk6IFwi0KfQtdGC0LLQtdGAfNCn0LXRgtCy0LXRgNCz0LBcIixcbiAgZnJpZGF5OiBcItCfJ9GP0YLQvdC40YbRj3zQnyfRj9GC0L3QuNGG0ZZcIixcbiAgc2F0dXJkYXk6IFwi0KHRg9Cx0L7RgtCwfNCh0YPQsdC+0YLQuFwiLFxuICBpbm1pbnV0ZXM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0YXQstC40LvQuNC90YN80YXQstC40LvQuNC90Lh80YXQstC40LvQuNC9XCIsXG4gIGluaG91cnM6IFwi0YfQtdGA0LXQtyAle3RpbWVEZWx0YX0g0LPQvtC00LjQvdGDfNCz0L7QtNC40L3QuHzQs9C+0LTQuNC9XCIsXG4gIGluZGF5czogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDQtNC10L3RjHzQtNC90ZZ80LTQvdGW0LJcIixcbiAgaW53ZWVrczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDRgtC40LbQtNC10L3RjHzRgtC40LbQvdGWfNGC0LjQttC90ZbQslwiLFxuICBpbm1vbnRoczogXCLRh9C10YDQtdC3ICV7dGltZURlbHRhfSDQvNGW0YHRj9GG0Yx80LzRltGB0Y/RhtGWfNC80ZbRgdGP0YbRltCyXCIsXG4gIGRheXNhZ286IFwiJXt0aW1lRGVsdGF9INC00LXQvdGMfNC00L3RlnzQtNC90ZbQsiDRgtC+0LzRg1wiLFxuICB3ZWVrc2FnbzogXCIle3RpbWVEZWx0YX0g0YLQuNC20LTQtdC90Yx80YLQuNC20L3RlnzRgtC40LbQvdGW0LIg0YLQvtC80YNcIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfSDQvNGW0YHRj9GG0Yx80LzRltGB0Y/RhtGWfNC80ZbRgdGP0YbRltCyINGC0L7QvNGDXCIsXG4gIG1pbnV0ZXNhZ286IFwiJXt0aW1lRGVsdGF9INGF0LLQuNC70LjQvdGDfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvSDRgtC+0LzRg1wiLFxuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX0g0LPQvtC00LjQvdGDfNCz0L7QtNC40L3QuHzQs9C+0LTQuNC9INGC0L7QvNGDXCIsXG4gIHRpbWU6IFwi0YfQsNGBXCIsXG4gIG5vdzogXCLQt9Cw0YDQsNC3XCIsXG4gIHBsdXNtaW51dGVzOiBcIisle3RpbWVEZWx0YX0g0YXQstC40LvQuNC90YN80YXQstC40LvQuNC90Lh80YXQstC40LvQuNC9XCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF9INGF0LLQuNC70LjQvdGDfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvVwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF9INCz0L7QtNC40L3Rg3zQs9C+0LTQuNC90Lh80LPQvtC00LjQvVwiLFxuICBtaW51c2hvdXI6IFwiLSV7dGltZURlbHRhfSDQs9C+0LTQuNC90YN80LPQvtC00LjQvdC4fNCz0L7QtNC40L1cIixcbiAgbWludXRlOiBcItGF0LLQuNC70LjQvdCwfNGF0LLQuNC70LjQvdC4fNGF0LLQuNC70LjQvXzRhdCyfNC8XCIsXG4gIGhvdXI6IFwi0LPQvtC00LjQvdCwfNCz0L7QtNC40L3QuHzQs9C+0LTQuNC9fNCz0L7QtHzQs1wiLFxuICBkYXk6IFwi0LTQtdC90Yx80LTQvdGWfNC00L3RltCyfNC0XCIsXG4gIHdlZWs6IFwi0YLQuNC20LTQtdC90Yx80YLQuNC20L3RlnzRgtC40LbQvdGW0LJ80YJ80YLQuNC2XCIsXG4gIG1vbnRoOiBcItC80ZbRgdGP0YbRjHzQvNGW0YHRj9GG0ZZ80LzRltGB0Y/RhtGW0LJ80LzRltGBfNC8XCIsXG4gIHllYXI6IFwi0YDRltC6fNGA0L7QutC4fNGA0L7QutGW0LJ80YBcIixcbiAgYW5kOiBcItGWXCIsXG4gIGF0OiBcItC+XCIsXG4gIGZyb206IFwi0Ld80LLRltC0XCIsXG4gIHRvOiBcItC00L580LpcIixcbiAgb2Y6IFwi0Ld80LLRltC0XCIsXG4gIGZpcnN0OiBcItC/0LXRgNGI0LjQuXzQv9C10YDRiNCwfNC/0LXRgNGI0LV80L/QtdGA0YjRllwiLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGRlZmF1bHQgZGljdDtcbiIsImNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIuS7iuWkqVwiLFxuICB0b21vcnJvdzogXCLmmI7lpKlcIixcbiAgeWVzdGVyZGF5OiBcIuaYqOWkqVwiLFxuICAvLyBGb3JtYWwgKFwi5LiL5LiA5YCLXCIvXCLkuIvkuIDkuKpcIikgYW5kIHNob3J0IHByZWZpeCAoXCLkuItcIiwgZS5nLiBcIuS4i+aYn+acn+S4gFwiL1wi5LiL5ZGo5LiAXCIpIGZvcm1zLFxuICAvLyBjb3ZlcmluZyBib3RoIFRyYWRpdGlvbmFsIGFuZCBTaW1wbGlmaWVkIHNjcmlwdC5cbiAgbmV4dDogXCLkuIvkuIDlgIt85LiL5LiA5LiqfOS4i1wiLFxuICAvLyBcIuacgOW+jC/mnIDlkI5cIiAoXCJsYXN0XCIgaW4gZ2VuZXJhbCksIFwi5LiK5LiA5YCLL+S4iuS4gOS4qlwiIChcInByZXZpb3VzXCIpLCBhbmQgc2hvcnQgXCLkuIpcIlxuICAvLyAoZS5nLiBcIuS4iuaYn+acn+S4gFwiL1wi5LiK5ZGo5LiAXCIpLlxuICBsYXN0OiBcIuacgOW+jHzmnIDlkI585LiK5LiA5YCLfOS4iuS4gOS4qnzkuIpcIixcbiAgLy8gXCLpgJnlgIsv6L+Z5LiqXCIgKGZvcm1hbCkgYW5kIHNob3J0IFwi6YCZL+i/mVwiIChlLmcuIFwi6YCZ5pif5pyf5LiAXCIvXCLov5nlkajkuIBcIikuXG4gIHRoaXM6IFwi6YCZ5YCLfOi/meS4qnzpgJl86L+ZXCIsXG4gIGluOiBcIuWcqFwiLFxuICAvLyBcIuemruaLnC/npLzmi5xcIiAoY29sbG9xdWlhbCwgb3JpZ2luYWxseSBcIndvcnNoaXAgZGF5XCIpIGlzIGFsc28gZXh0cmVtZWx5IGNvbW1vblxuICAvLyBmb3Igd2Vla2RheXMsIGUuZy4gXCLnpq7mi5zkuIBcIi9cIuekvOaLnOS4gFwiIGZvciBNb25kYXkuXG4gIHN1bmRheTogXCLmmJ/mnJ/ml6V85ZGo5pelfOmAseaXpXzmmJ/mnJ/lpKl856au5ouc5pelfOekvOaLnOaXpXznpq7mi5zlpKl856S85ouc5aSpXCIsXG4gIG1vbmRheTogXCLmmJ/mnJ/kuIB85ZGo5LiAfOmAseS4gHznpq7mi5zkuIB856S85ouc5LiAXCIsXG4gIHR1ZXNkYXk6IFwi5pif5pyf5LqMfOWRqOS6jHzpgLHkuox856au5ouc5LqMfOekvOaLnOS6jFwiLFxuICB3ZWRuZXNkYXk6IFwi5pif5pyf5LiJfOWRqOS4iXzpgLHkuIl856au5ouc5LiJfOekvOaLnOS4iVwiLFxuICB0aHVyc2RheTogXCLmmJ/mnJ/lm5t85ZGo5ZubfOmAseWbm3znpq7mi5zlm5t856S85ouc5ZubXCIsXG4gIGZyaWRheTogXCLmmJ/mnJ/kupR85ZGo5LqUfOmAseS6lHznpq7mi5zkupR856S85ouc5LqUXCIsXG4gIHNhdHVyZGF5OiBcIuaYn+acn+WFrXzlkajlha186YCx5YWtfOemruaLnOWFrXznpLzmi5zlha1cIixcbiAgaW5taW51dGVzOiBcIiV7dGltZURlbHRhfeWIhumQmOW+jFwiLFxuICBpbmhvdXJzOiBcIiV7dGltZURlbHRhfeWwj+aZguW+jFwiLFxuICBpbmRheXM6IFwiJXt0aW1lRGVsdGF95aSp5b6MXCIsXG4gIGlud2Vla3M6IFwiJXt0aW1lRGVsdGF96YCx5b6MXCIsXG4gIGlubW9udGhzOiBcIiV7dGltZURlbHRhfeWAi+aciOW+jFwiLFxuICBkYXlzYWdvOiBcIiV7dGltZURlbHRhfeWkqeWJjVwiLFxuICB3ZWVrc2FnbzogXCIle3RpbWVEZWx0YX3pgLHliY1cIixcbiAgbW9udGhzYWdvOiBcIiV7dGltZURlbHRhfeWAi+aciOWJjVwiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfeWIhumQmOWJjVwiLFxuICBob3Vyc2FnbzogXCIle3RpbWVEZWx0YX3lsI/mmYLliY1cIixcbiAgLy8gTm90IHVzZWQgZm9yIGRpc3BsYXksIG9ubHkgZm9yIG1hdGNoaW5nIFwiTiB1bml0XCIgKyB0aGlzIG1hcmtlciAoZS5nLlxuICAvLyBcIjLlpKnlvoxcIi9cIjLlpKnlkI5cIiA9IFwiMiBkYXlzXCIgKyBcIuW+jFwiL1wi5ZCOXCIgPSBcIjIgZGF5cyBsYXRlclwiKS4gS2VwdCBzZXBhcmF0ZSBmcm9tXG4gIC8vIHRoZSAle3RpbWVEZWx0YX0gdGVtcGxhdGVzIGFib3ZlICh3aGljaCBhcmUgYWxzbyB1c2VkIHZlcmJhdGltIGluXG4gIC8vIGF1dG9zdWdnZXN0IGxhYmVscyBhbmQgZG9uJ3Qgc3VwcG9ydCBcInxcIiBhbHRlcm5hdGl2ZXMgdGhlIHNhbWUgd2F5KS5cbiAgLy8gXCLkuYvlvowv5LmL5ZCOXCIgYW5kIFwi5Lul5b6ML+S7peWQjlwiIGFyZSBlcXVhbGx5IGNvbW1vbiBhbHRlcm5hdGl2ZXMgdG8gYmFyZSBcIuW+jC/lkI5cIlxuICAvLyAoZS5nLiBcIjLlpKnkuYvlvoxcIiwgXCIz5YCL5pyI5Lul5b6MXCIpLlxuICBsYXRlcjogXCLlvox85ZCOfOS5i+W+jHzkuYvlkI585Lul5b6MfOS7peWQjlwiLFxuICB0aW1lOiBcIuaZgumWk3zml7bpl7RcIixcbiAgbm93OiBcIuePvuWcqHznjrDlnKhcIixcbiAgcGx1c21pbnV0ZXM6IFwiKyV7dGltZURlbHRhfeWIhumQmFwiLFxuICBtaW51c21pbnV0ZXM6IFwiLSV7dGltZURlbHRhfeWIhumQmFwiLFxuICBwbHVzaG91cjogXCIrJXt0aW1lRGVsdGF95bCP5pmCXCIsXG4gIG1pbnVzaG91cjogXCItJXt0aW1lRGVsdGF95bCP5pmCXCIsXG4gIG1pbnV0ZTogXCLliIbpkJh85YiG6ZKffOWIhlwiLFxuICBob3VyOiBcIuWwj+aZgnzlsI/ml7Z85pmCfOaXtlwiLFxuICBkYXk6IFwi5aSpfOaXpVwiLFxuICB3ZWVrOiBcIumAsXzlkah85pif5pyffOWAi+aYn+acn3zkuKrmmJ/mnJ9856au5oucfOekvOaLnHzlgIvnpq7mi5x85Liq56S85oucXCIsXG4gIG1vbnRoOiBcIuaciHzlgIvmnIh85Liq5pyIXCIsXG4gIHllYXI6IFwi5bm0XCIsXG4gIGFuZDogXCLlkoxcIixcbiAgYXQ6IFwi5ZyoXCIsXG4gIGZyb206IFwi5b6efOS7jnzoh6pcIixcbiAgdG86IFwi5YiwfOiHs1wiLFxuICBvZjogXCLnmoRcIixcbiAgZmlyc3Q6IFwi56ys5LiAfOesrOS4gOWAi3znrKzkuIDkuKpcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG4iLCIvLyBLb3JlYW4gc3VwcG9ydC4gVm9jYWJ1bGFyeSBmb3IgdG9kYXkvdG9tb3Jyb3cveWVzdGVyZGF5LCB3ZWVrZGF5cyxcbi8vIHRoaXMvbmV4dC9sYXN0LCB0aGUgaG91ci9taW51dGUvZGF5L3dlZWsvbW9udGgveWVhciB1bml0cywgYW5kIHRoZVxuLy8gXCJsYXRlclwiL1wiYWdvc3VmZml4XCIgcmVsYXRpdmUtZXhwcmVzc2lvbiBtYXJrZXJzIGlzIHRha2VuIGRpcmVjdGx5IGZyb21cbi8vIENyZWFtTnV0cycgdHJhbnNsYXRlS29yZWFuVG9FbmdsaXNoKCkgZGljdGlvbmFyeVxuLy8gKGh0dHBzOi8vZ2l0aHViLmNvbS9DcmVhbU51dHMvbmxkYXRlcy1vYnNpZGlhbi1rb3JlYW4sIE1JVCksIHNpbmNlIGl0J3Ncbi8vIHZvY2FidWxhcnkgYSByZWFsIEtvcmVhbi1zcGVha2luZyB1c2VyIGJhc2UgaGFzIGFscmVhZHkgYmVlbiB1c2luZy5cbi8vXG4vLyBLb3JlYW4gcGhyYXNlcyBudW1iZXJzIGluIGEgc3VmZml4IHBvc2l0aW9uIChudW1iZXIgKyB1bml0ICsgbWFya2VyLCBlLmcuXG4vLyBcIjPsnbwg7ZuEXCIgPSBcIjMgZGF5c1wiICsgXCLtm4RcIiAoXCJsYXRlclwiKSA9IFwiaW4gMyBkYXlzXCIpLCBub3QgRW5nbGlzaCdzIHByZWZpeFxuLy8gXCJpbiAzIGRheXNcIiAtLSBzbyBpbm1pbnV0ZXMvaW5kYXlzL2V0Yy4gYW5kIGRheXNhZ28vd2Vla3NhZ28vZXRjLiBiZWxvdyBhcmVcbi8vIGJ1aWx0IHN1ZmZpeC1zdHlsZSwgdGhlIHNhbWUgbWVjaGFuaXNtIGFscmVhZHkgdXNlZCBmb3IgQ2hpbmVzZSAoc2VlXG4vLyB6aC50cydzIFwibGF0ZXJcIi9cImFnb3N1ZmZpeFwiIGNvbW1lbnRzKSwgcmF0aGVyIHRoYW4gbWlycm9yaW5nIHRoZSBFbmdsaXNoXG4vLyB0ZW1wbGF0ZSBsaXRlcmFsbHkuXG4vL1xuLy8gVU5WRVJJRklFRDogXCJhbmRcIi9cImF0XCIvXCJmcm9tXCIvXCJ0b1wiL1wib2ZcIiBiZWxvdyBkb24ndCBoYXZlIGFuIGVxdWl2YWxlbnQgaW5cbi8vIENyZWFtTnV0cycgZmlsZSAoaGlzIHRyYW5zbGF0b3IgZG9lc24ndCBzdXBwb3J0IGNvbWJpbmVkIGR1cmF0aW9ucyxcbi8vIHdlZWtkYXkrdGltZSwgb3IgZGF0ZSByYW5nZXMpIGFuZCBhcmUgbXkgb3duIGJlc3QtZWZmb3J0IHBpY2tzLCBub3Rcbi8vIGNoZWNrZWQgYnkgYSBLb3JlYW4gc3BlYWtlci4gS29yZWFuIG5vcm1hbGx5IGF0dGFjaGVzIHBhcnRpY2xlcyBsaWtlIOyXkFxuLy8gKFwiYXRcIikv67aA7YSwKFwiZnJvbVwiKS/quYzsp4AoXCJ0b1wiKS/snZgoXCJvZlwiKSBkaXJlY3RseSB0byB0aGUgcHJldmlvdXMgd29yZCB3aXRoXG4vLyBubyBzcGFjZSwgd2hpbGUgdGhpcyBwbHVnaW4ncyByZWdleCBwYXR0ZXJucyByZXF1aXJlIHRoZW0gYXMgYVxuLy8gc3BhY2Utc2VwYXJhdGVkIHN0YW5kYWxvbmUgd29yZCAtLSBzbyBcIm5leHQgTW9uZGF5IGF0IDNwbVwiLSwgXCJmcm9tIE1vbmRheVxuLy8gdG8gRnJpZGF5XCItLCBcImluIDIgd2Vla3MgYW5kIDMgZGF5c1wiLSwgYW5kIFwidGhlIDE1dGggb2YgbmV4dCBtb250aFwiLXN0eWxlXG4vLyBjb21iaW5lZCBleHByZXNzaW9ucyBtYXkgbm90IG1hdGNoIG5hdHVyYWwgS29yZWFuIHBocmFzaW5nIGV2ZW4gdGhvdWdoIHRoZVxuLy8gc2ltcGxlIGV4cHJlc3Npb25zIGFib3ZlIGRvLiBUcmFja2VkIGluICM0MC5cbmNvbnN0IGRpY3QgPSB7XG4gIHRvZGF5OiBcIuyYpOuKmFwiLFxuICB0b21vcnJvdzogXCLrgrTsnbxcIixcbiAgeWVzdGVyZGF5OiBcIuyWtOygnFwiLFxuICBuZXh0OiBcIuuLpOydjFwiLFxuICBsYXN0OiBcIuyngOuCnFwiLFxuICB0aGlzOiBcIuydtOuyiFwiLFxuICBpbjogXCLslZ7snLzroZxcIixcbiAgc3VuZGF5OiBcIuydvOyalOydvFwiLFxuICBtb25kYXk6IFwi7JuU7JqU7J28XCIsXG4gIHR1ZXNkYXk6IFwi7ZmU7JqU7J28XCIsXG4gIHdlZG5lc2RheTogXCLsiJjsmpTsnbxcIixcbiAgdGh1cnNkYXk6IFwi66qp7JqU7J28XCIsXG4gIGZyaWRheTogXCLquIjsmpTsnbxcIixcbiAgc2F0dXJkYXk6IFwi7Yag7JqU7J28XCIsXG4gIGlubWludXRlczogXCIle3RpbWVEZWx0YX3rtoQg7ZuEXCIsXG4gIGluaG91cnM6IFwiJXt0aW1lRGVsdGF97Iuc6rCEIO2bhFwiLFxuICBpbmRheXM6IFwiJXt0aW1lRGVsdGF97J28IO2bhFwiLFxuICBpbndlZWtzOiBcIiV7dGltZURlbHRhfeyjvCDtm4RcIixcbiAgaW5tb250aHM6IFwiJXt0aW1lRGVsdGF96rCc7JuUIO2bhFwiLFxuICBkYXlzYWdvOiBcIiV7dGltZURlbHRhfeydvCDsoIRcIixcbiAgd2Vla3NhZ286IFwiJXt0aW1lRGVsdGF97KO8IOyghFwiLFxuICBtb250aHNhZ286IFwiJXt0aW1lRGVsdGF96rCc7JuUIOyghFwiLFxuICBtaW51dGVzYWdvOiBcIiV7dGltZURlbHRhfeu2hCDsoIRcIixcbiAgaG91cnNhZ286IFwiJXt0aW1lRGVsdGF97Iuc6rCEIOyghFwiLFxuICAvLyBTdWZmaXggbWFya2VycyBmb3IgXCJOIHVuaXRcIiArIG1hcmtlciAoZS5nLiBcIjPsnbwg7ZuEXCIgPSBcImluIDMgZGF5c1wiLFxuICAvLyBcIjLso7wg7KCEXCIgPSBcIjIgd2Vla3MgYWdvXCIpIC0tIHZlcmlmaWVkIGFnYWluc3QgQ3JlYW1OdXRzJyBoYW5kbGVOYXRpdmVEYXRlRXhwcmVzc2lvbnMoKS9wcm9jZXNzTnVtYmVyUGF0dGVybigpLlxuICBsYXRlcjogXCLtm4R865KkXCIsXG4gIGFnb3N1ZmZpeDogXCLsoIRcIixcbiAgdGltZTogXCLsi5zqsIRcIixcbiAgbm93OiBcIuyngOq4iFwiLFxuICBwbHVzbWludXRlczogXCIrJXt0aW1lRGVsdGF967aEXCIsXG4gIG1pbnVzbWludXRlczogXCItJXt0aW1lRGVsdGF967aEXCIsXG4gIHBsdXNob3VyOiBcIisle3RpbWVEZWx0YX3si5zqsIRcIixcbiAgbWludXNob3VyOiBcIi0le3RpbWVEZWx0YX3si5zqsIRcIixcbiAgbWludXRlOiBcIuu2hFwiLFxuICBob3VyOiBcIuyLnOqwhFwiLFxuICBkYXk6IFwi7J28XCIsXG4gIHdlZWs6IFwi7KO8XCIsXG4gIG1vbnRoOiBcIuqwnOyblHzri6xcIixcbiAgeWVhcjogXCLrhYRcIixcbiAgYW5kOiBcIuq3uOumrOqzoFwiLFxuICBhdDogXCLsl5BcIixcbiAgZnJvbTogXCLrtoDthLBcIixcbiAgdG86IFwi6rmM7KeAXCIsXG4gIG9mOiBcIuydmFwiLFxuICBmaXJzdDogXCLssqtcIixcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGRpY3Q7XG4iLCJpbXBvcnQgaTE4biBmcm9tICdyb2RkZWgtaTE4bic7XG5cbmltcG9ydCBlbiBmcm9tICcuL2VuJztcbmltcG9ydCBqYSBmcm9tICcuL2phJztcbmltcG9ydCBmciBmcm9tICcuL2ZyJztcbmltcG9ydCBwdCBmcm9tICcuL3B0JztcbmltcG9ydCBkZSBmcm9tICcuL2RlJztcbmltcG9ydCBubCBmcm9tICcuL25sJztcbmltcG9ydCBlcyBmcm9tICcuL2VzJztcbmltcG9ydCBpdCBmcm9tICcuL2l0JztcbmltcG9ydCBydSBmcm9tICcuL3J1JztcbmltcG9ydCB1ayBmcm9tICcuL3VrJztcbmltcG9ydCB6aCBmcm9tICcuL3poJztcbmltcG9ydCBrbyBmcm9tICcuL2tvJztcblxuY29uc3Qgbm90Rm91bmREZWZhdWx0ID0gXCJOT1RGT1VORFwiIGFzIGNvbnN0O1xuXG50eXBlIFRyYW5zbGF0b3IgPSAoa2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nLCB2YXJpYWJsZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSA9PiBzdHJpbmc7XG5cbi8vIENhY2hlIGRlcyB0cmFkdWN0ZXVycyBwb3VyIMOpdml0ZXIgZGUgbGVzIHJlY3LDqWVyIMOgIGNoYXF1ZSBhcHBlbFxuLy8gUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOiB0cmFuc2xhdG9ycyBhcmUgY3JlYXRlZCBvbmNlIGFuZCByZXVzZWRcbmNvbnN0IHRyYW5zbGF0b3JDYWNoZTogUmVjb3JkPHN0cmluZywgVHJhbnNsYXRvcj4gPSB7fTtcblxuLy8gU2hhcGUgc2hhcmVkIGJ5IGV2ZXJ5IGxhbmd1YWdlIGRpY3Q6IHNhbWUga2V5cyBhcyBgZW5gLCBidXQgZWFjaCBsYW5ndWFnZVxuLy8gaGFzIGl0cyBvd24gc3RyaW5nIHZhbHVlcyAobm90IGBlbmAncyBleGFjdCBsaXRlcmFsIHRleHQpIC0tIHVzaW5nXG4vLyBgdHlwZW9mIGVuYCBkaXJlY3RseSBoZXJlIHdvdWxkIGNvbXBhcmUgZXZlcnkgb3RoZXIgbGFuZ3VhZ2UncyB0ZXh0XG4vLyBhZ2FpbnN0IGBlbmAncyBsaXRlcmFsIEVuZ2xpc2ggc3RyaW5ncyBhbmQgYWx3YXlzIGZhaWwuXG50eXBlIExhbmdEaWN0ID0geyByZWFkb25seSBbSyBpbiBrZXlvZiB0eXBlb2YgZW5dOiBzdHJpbmcgfTtcblxuLy8gTWFwIGRlcyBtb2R1bGVzIGRlIGxhbmd1ZSBwb3VyIGZhY2lsaXRlciBsJ2FjY8Ooc1xuY29uc3QgbGFuZ3VhZ2VNb2R1bGVzOiBSZWNvcmQ8c3RyaW5nLCBMYW5nRGljdD4gPSB7XG4gIGVuLFxuICBqYSxcbiAgZnIsXG4gIHB0LFxuICBkZSxcbiAgbmwsXG4gIGVzLFxuICBpdCxcbiAgcnUsXG4gIHVrLFxuICAnemguaGFudCc6IHpoLFxuICBrbyxcbn07XG5cbi8qKlxuICogT2J0aWVudCB1biB0cmFkdWN0ZXVyIHBvdXIgdW5lIGxhbmd1ZSBkb25uw6llIChhdmVjIGNhY2hlKVxuICogR2V0cyBhIHRyYW5zbGF0b3IgZm9yIGEgZ2l2ZW4gbGFuZ3VhZ2UgKGNhY2hlZClcbiAqL1xuZnVuY3Rpb24gZ2V0VHJhbnNsYXRvcihsYW5nOiBzdHJpbmcpOiBUcmFuc2xhdG9yIHtcbiAgaWYgKCF0cmFuc2xhdG9yQ2FjaGVbbGFuZ10pIHtcbiAgICBjb25zdCBsYW5ndWFnZU1vZHVsZSA9IGxhbmd1YWdlTW9kdWxlc1tsYW5nXTtcbiAgICBpZiAobGFuZ3VhZ2VNb2R1bGUpIHtcbiAgICAgIC8vIHJvZGRlaC1pMThuJ3Mgc2hpcHBlZCB0eXBlcyBkZWNsYXJlIHRoZSAybmQgY2FsbCBhcmd1bWVudCBhc1xuICAgICAgLy8gYG51bWJlciB8IEZvcm1hdHRpbmdDb250ZXh0YCwgYnV0IGl0cyBhY3R1YWwgcnVudGltZSBBUEkgKHVzZWRcbiAgICAgIC8vIHRocm91Z2hvdXQgdGhpcyBmaWxlKSBhbHNvIGFjY2VwdHMgYSBwbGFpbiBzdHJpbmcgZGVmYXVsdCB2YWx1ZSAtLVxuICAgICAgLy8gdGhhdCBvdmVybG9hZCBqdXN0IGlzbid0IHJlZmxlY3RlZCBpbiBpdHMgLmQudHMsIGhlbmNlIHRoZSBjYXN0LlxuICAgICAgdHJhbnNsYXRvckNhY2hlW2xhbmddID0gaTE4bi5jcmVhdGUoeyB2YWx1ZXM6IGxhbmd1YWdlTW9kdWxlIH0pIGFzIHVua25vd24gYXMgVHJhbnNsYXRvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgdmVycyBsJ2FuZ2xhaXMgc2kgbGEgbGFuZ3VlIG4nZXN0IHBhcyB0cm91dsOpZVxuICAgICAgaWYgKCF0cmFuc2xhdG9yQ2FjaGVbJ2VuJ10pIHtcbiAgICAgICAgdHJhbnNsYXRvckNhY2hlWydlbiddID0gaTE4bi5jcmVhdGUoeyB2YWx1ZXM6IGVuIH0pIGFzIHVua25vd24gYXMgVHJhbnNsYXRvcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cmFuc2xhdG9yQ2FjaGVbJ2VuJ107XG4gICAgfVxuICB9XG4gIHJldHVybiB0cmFuc2xhdG9yQ2FjaGVbbGFuZ107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHQoa2V5OiBzdHJpbmcsIGxhbmc6IHN0cmluZywgdmFyaWFibGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gIGNvbnN0IGxhbmdUcmFuc2xhdG9yID0gZ2V0VHJhbnNsYXRvcihsYW5nKTtcbiAgY29uc3QgdHJhbnNsYXRpb24gPSBsYW5nVHJhbnNsYXRvcihrZXksIG5vdEZvdW5kRGVmYXVsdCwgdmFyaWFibGVzKTtcbiAgXG4gIGlmICh0cmFuc2xhdGlvbiA9PT0gbm90Rm91bmREZWZhdWx0KSB7XG4gICAgY29uc3QgZW5UcmFuc2xhdG9yID0gZ2V0VHJhbnNsYXRvcihcImVuXCIpO1xuICAgIHJldHVybiBlblRyYW5zbGF0b3Ioa2V5LCBub3RGb3VuZERlZmF1bHQsIHZhcmlhYmxlcyk7XG4gIH1cbiAgcmV0dXJuIHRyYW5zbGF0aW9uO1xufSIsImltcG9ydCB0IGZyb20gXCIuL2xhbmcvaGVscGVyXCI7XG5cbi8qKlxuICogQ29sbGVjdHMgYW5kIGNhY2hlcyB0cmFuc2xhdGVkIHdvcmRzIGFjcm9zcyBtdWx0aXBsZSBsYW5ndWFnZXMsIGFuZCBidWlsZHNcbiAqIHJlZ2V4IGFsdGVybmF0aW9ucyBmcm9tIHRoZW0uXG4gKlxuICogRXZlcnkgc3VwcG9ydGVkIGxhbmd1YWdlIGNhbiBkZWZpbmUgc2V2ZXJhbCB2YXJpYW50cyBmb3IgdGhlIHNhbWUgY29uY2VwdFxuICogKGUuZy4gRnJlbmNoIFwibmV4dFwiOiBcInByb2NoYWlufHByb2NoYWluZXxzdWl2YW50fHN1aXZhbnRlXCIpLCBhbmQgZXZlcnlcbiAqIGZlYXR1cmUgb2YgdGhlIHBhcnNlciBuZWVkcyB0byBnYXRoZXIgdGhvc2UgdmFyaWFudHMgYWNyb3NzICphbGwqIGFjdGl2ZVxuICogbGFuZ3VhZ2VzIGJlZm9yZSBidWlsZGluZyBhIHJlZ2V4IG91dCBvZiB0aGVtLiBUaGlzIGNsYXNzIGNlbnRyYWxpemVzIHRoYXRcbiAqIFwibG9vayB1cCBhIHRyYW5zbGF0aW9uIGtleSBpbiBldmVyeSBhY3RpdmUgbGFuZ3VhZ2UsIHNwbGl0IG11bHRpLXZhcmlhbnRcbiAqIGVudHJpZXMgb24gJ3wnLCB0cmltLCBkZWR1cGVcIiBwYXR0ZXJuLCB3aGljaCB1c2VkIHRvIGJlIHJlcGVhdGVkIGlubGluZVxuICogcm91Z2hseSBmaWZ0ZWVuIHRpbWVzIHRocm91Z2hvdXQgTkxEUGFyc2VyIChhbmQsIGxlc3MgZXhoYXVzdGl2ZWx5LCBpblxuICogQ29udGV4dEFuYWx5emVyIGFuZCB1dGlscy50cykuXG4gKi9cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkNvbGxlY3RvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRpb25DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZXM6IHN0cmluZ1tdKSB7fVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgdHJhbnNsYXRpb24gd2l0aCBjYWNoaW5nIGZvciBwZXJmb3JtYW5jZS5cbiAgICovXG4gIHRyYW5zbGF0ZShrZXk6IHN0cmluZywgbGFuZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBjYWNoZUtleSA9IGAke2xhbmd9OiR7a2V5fWA7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy50cmFuc2xhdGlvbkNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKGNhY2hlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICBjb25zdCB0cmFuc2xhdGVkID0gdChrZXksIGxhbmcpO1xuICAgIHRoaXMudHJhbnNsYXRpb25DYWNoZS5zZXQoY2FjaGVLZXksIHRyYW5zbGF0ZWQpO1xuICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbGxlY3RzIGV2ZXJ5IHZhcmlhbnQgb2YgYGtleWAncyB0cmFuc2xhdGlvbiBhY3Jvc3MgYWxsIGFjdGl2ZSBsYW5ndWFnZXMsXG4gICAqIHNwbGl0dGluZyBtdWx0aS12YXJpYW50IGVudHJpZXMgKGUuZy4gXCJhfGJ8Y1wiKSBvbiBcInxcIiwgdHJpbW1pbmcsIGFuZFxuICAgKiBkZS1kdXBsaWNhdGluZy4gRW50cmllcyB0aGF0IGFyZW4ndCBmb3VuZCBmb3IgYSBnaXZlbiBsYW5ndWFnZSBhcmUgc2tpcHBlZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRyYW5zbGF0aW9uIGtleSAoZS5nLiBcIm5leHRcIiwgXCJtb25kYXlcIiwgXCJpbmRheXNcIilcbiAgICogQHBhcmFtIG9wdGlvbnMubG93ZXJjYXNlIC0gTG93ZXJjYXNlIGVhY2ggdmFyaWFudCAoZGVmYXVsdDogZmFsc2UpXG4gICAqL1xuICBjb2xsZWN0V29yZHMoa2V5OiBzdHJpbmcsIG9wdGlvbnM6IHsgbG93ZXJjYXNlPzogYm9vbGVhbiB9ID0ge30pOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgd29yZHM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChjb25zdCBsYW5nIG9mIHRoaXMubGFuZ3VhZ2VzKSB7XG4gICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IHRoaXMudHJhbnNsYXRlKGtleSwgbGFuZyk7XG4gICAgICBpZiAoIXRyYW5zbGF0aW9uIHx8IHRyYW5zbGF0aW9uID09PSBcIk5PVEZPVU5EXCIpIGNvbnRpbnVlO1xuXG4gICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgdHJhbnNsYXRpb24uc3BsaXQoXCJ8XCIpKSB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSB2YXJpYW50LnRyaW0oKTtcbiAgICAgICAgLy8gTm8gY3VycmVudCBsYW5ndWFnZSBkaWN0aW9uYXJ5IGVudHJ5IGhhcyBhbiBlbXB0eSBcInx8XCIgc2VnbWVudCBvclxuICAgICAgICAvLyBhIHRyYWlsaW5nL2xlYWRpbmcgXCJ8XCIsIHNvIHRoaXMgZ3VhcmQgY2FuJ3QgYWN0dWFsbHkgYmUgZmFsc2Ugd2l0aFxuICAgICAgICAvLyByZWFsIGRhdGEgLS0ga2VwdCBpbiBjYXNlIGEgZnV0dXJlIGRpY3Rpb25hcnkgZW50cnkgaXMgbWFsZm9ybWVkLlxuICAgICAgICBpZiAodHJpbW1lZCkge1xuICAgICAgICAgIHdvcmRzLnB1c2gob3B0aW9ucy5sb3dlcmNhc2UgPyB0cmltbWVkLnRvTG93ZXJDYXNlKCkgOiB0cmltbWVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQod29yZHMpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgYSByZWdleCBhbHRlcm5hdGlvbiAoXCJhfGJ8Y1wiKSBmcm9tIGEgbGlzdCBvZiB3b3JkcywgZXNjYXBpbmcgcmVnZXhcbiAgICogc3BlY2lhbCBjaGFyYWN0ZXJzLlxuICAgKlxuICAgKiBMb25nZXN0IHdvcmRzIGFyZSBzb3J0ZWQgZmlyc3Q6IG90aGVyd2lzZSBhIHNob3J0ZXIgd29yZCB0aGF0IGlzIGEgcHJlZml4XG4gICAqIG9mIGEgbG9uZ2VyIG9uZSAoZS5nLiBGcmVuY2ggXCJwcm9jaGFpblwiIHZzIFwicHJvY2hhaW5lXCIpIGNhbiBtYXRjaCBmaXJzdFxuICAgKiBhbmQgbGVhdmUgdGhlIHJlbWFpbmluZyBsZXR0ZXJzIHRvIGJlIG1pcy1jYXB0dXJlZCBieSB3aGF0ZXZlciBjb21lcyBuZXh0XG4gICAqIGluIHRoZSBwYXR0ZXJuLlxuICAgKi9cbiAgYnVpbGRBbHRlcm5hdGlvbih3b3Jkczogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IGVzY2FwZVJlZ2V4ID0gKHN0cjogc3RyaW5nKSA9PiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbiAgICByZXR1cm4gWy4uLm5ldyBTZXQod29yZHMpXVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAubWFwKGVzY2FwZVJlZ2V4KVxuICAgICAgLmpvaW4oJ3wnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZW5pZW5jZTogY29sbGVjdFdvcmRzKGtleSkgZm9sbG93ZWQgYnkgYnVpbGRBbHRlcm5hdGlvbigpIGluIG9uZSBjYWxsLlxuICAgKi9cbiAgYnVpbGRBbHRlcm5hdGlvbkZvcihrZXk6IHN0cmluZywgb3B0aW9uczogeyBsb3dlcmNhc2U/OiBib29sZWFuIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRBbHRlcm5hdGlvbih0aGlzLmNvbGxlY3RXb3JkcyhrZXksIG9wdGlvbnMpKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQXBwLCBFZGl0b3IsIEVkaXRvclJhbmdlLCBFZGl0b3JQb3NpdGlvbiwgbm9ybWFsaXplUGF0aCwgVEZpbGUsIE1hcmtkb3duVmlldywgV29ya3NwYWNlIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQge1xuICBjcmVhdGVEYWlseU5vdGUsXG4gIGdldEFsbERhaWx5Tm90ZXMsXG4gIGdldERhaWx5Tm90ZSxcbn0gZnJvbSBcIm9ic2lkaWFuLWRhaWx5LW5vdGVzLWludGVyZmFjZVwiO1xuXG5pbXBvcnQgeyBEYXlPZldlZWsgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IHsgRGF0ZUZvcm1hdHRlciB9IGZyb20gXCIuL2RhdGUtZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbkNvbGxlY3RvciB9IGZyb20gXCIuL3RyYW5zbGF0aW9uLWNvbGxlY3RvclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbi8vIFR5cGUgYWxpYXMgZm9yIE1vbWVudCBmcm9tIHRoZSBtb21lbnQgbGlicmFyeSBidW5kbGVkIHdpdGggT2JzaWRpYW5cbi8vIFVzaW5nIHRoZSB0eXBlIGZyb20gdGhlIG1vbWVudCBsaWJyYXJ5IHR5cGVzIHNpbmNlIG1vbWVudCBpcyBidW5kbGVkIHdpdGggT2JzaWRpYW5cbi8vIFRoZSBtb21lbnQgcGFja2FnZSBpcyBidW5kbGVkIHdpdGggT2JzaWRpYW4sIGJ1dCB0aGUgTW9tZW50IHR5cGUgaXMgbm90IGV4cG9ydGVkIGZyb20gb2JzaWRpYW4gbW9kdWxlXG50eXBlIE1vbWVudCA9IGltcG9ydChcIm1vbWVudFwiKS5Nb21lbnQ7XG5cbmNvbnN0IGRheXNPZldlZWs6IE9taXQ8RGF5T2ZXZWVrLCBcImxvY2FsZS1kZWZhdWx0XCI+W10gPSBbXG4gIFwic3VuZGF5XCIsXG4gIFwibW9uZGF5XCIsXG4gIFwidHVlc2RheVwiLFxuICBcIndlZG5lc2RheVwiLFxuICBcInRodXJzZGF5XCIsXG4gIFwiZnJpZGF5XCIsXG4gIFwic2F0dXJkYXlcIixcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdvcmRCb3VuZGFyaWVzKGVkaXRvcjogRWRpdG9yKTogRWRpdG9yUmFuZ2Uge1xuICBjb25zdCBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XG5cbiAgY29uc3QgcG9zID0gZWRpdG9yLnBvc1RvT2Zmc2V0KGN1cnNvcik7XG4gIGNvbnN0IGVkaXRvcldpdGhDTSA9IGVkaXRvciBhcyBFZGl0b3IgJiB7IGNtPzogeyBzdGF0ZTogeyB3b3JkQXQ6IChwb3M6IG51bWJlcikgPT4geyBmcm9tOiBudW1iZXI7IHRvOiBudW1iZXIgfSB8IG51bGwgfSB9IH07XG4gIC8vIHdvcmRBdCgpIHJldHVybnMgbnVsbCB3aGVuIHRoZSBjdXJzb3IgaXNuJ3QgaW5zaWRlL2FkamFjZW50IHRvIGEgd29yZFxuICAvLyAoZW1wdHkgbGluZSwgd2hpdGVzcGFjZSwgcHVuY3R1YXRpb24tb25seSB0ZXh0KSAtLSBmYWxsIGJhY2sgdG8gYVxuICAvLyB6ZXJvLXdpZHRoIHJhbmdlIGF0IHRoZSBjdXJzb3IgaW5zdGVhZCBvZiBjcmFzaGluZy5cbiAgY29uc3Qgd29yZCA9IGVkaXRvcldpdGhDTS5jbT8uc3RhdGUud29yZEF0KHBvcyk7XG4gIGlmICghd29yZCkge1xuICAgIHJldHVybiB7IGZyb206IGN1cnNvciwgdG86IGN1cnNvciB9O1xuICB9XG4gIGNvbnN0IHdvcmRTdGFydCA9IGVkaXRvci5vZmZzZXRUb1Bvcyh3b3JkLmZyb20pO1xuICBjb25zdCB3b3JkRW5kID0gZWRpdG9yLm9mZnNldFRvUG9zKHdvcmQudG8pO1xuICByZXR1cm4ge1xuICAgIGZyb206IHdvcmRTdGFydCxcbiAgICB0bzogd29yZEVuZCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbGVjdGVkVGV4dChlZGl0b3I6IEVkaXRvcik6IHN0cmluZyB7XG4gIGlmIChlZGl0b3Iuc29tZXRoaW5nU2VsZWN0ZWQoKSkge1xuICAgIHJldHVybiBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgd29yZEJvdW5kYXJpZXMgPSBnZXRXb3JkQm91bmRhcmllcyhlZGl0b3IpO1xuICAgIC8vIFNlbGVjdCB0aGUgd29yZCBhdCBjdXJzb3IgcG9zaXRpb24gdG8gZW5hYmxlIHRleHQgcmVwbGFjZW1lbnRcbiAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGRhdGUgcGFyc2luZyBjb21tYW5kcyB0byB3b3JrIGNvcnJlY3RseVxuICAgIGVkaXRvci5zZXRTZWxlY3Rpb24od29yZEJvdW5kYXJpZXMuZnJvbSwgd29yZEJvdW5kYXJpZXMudG8pO1xuICAgIHJldHVybiBlZGl0b3IuZ2V0U2VsZWN0aW9uKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdEN1cnNvcihcbiAgZWRpdG9yOiBFZGl0b3IsXG4gIGN1cnNvcjogRWRpdG9yUG9zaXRpb24sXG4gIG5ld1N0cjogc3RyaW5nLFxuICBvbGRTdHI6IHN0cmluZ1xuKTogdm9pZCB7XG4gIGNvbnN0IGN1cnNvck9mZnNldCA9IG5ld1N0ci5sZW5ndGggLSBvbGRTdHIubGVuZ3RoO1xuICBlZGl0b3Iuc2V0Q3Vyc29yKHtcbiAgICBsaW5lOiBjdXJzb3IubGluZSxcbiAgICBjaDogY3Vyc29yLmNoICsgY3Vyc29yT2Zmc2V0LFxuICB9KTtcbn1cblxuLyoqXG4gKiBXcmFwcGVyIHBvdXIgY29tcGF0aWJpbGl0w6kgYXZlYyBsZSBjb2RlIGV4aXN0YW50XG4gKiBAZGVwcmVjYXRlZCBVdGlsaXNlciBEYXRlRm9ybWF0dGVyLmZvcm1hdCgpIGRpcmVjdGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGb3JtYXR0ZWREYXRlKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIERhdGVGb3JtYXR0ZXIuZm9ybWF0KGRhdGUsIGZvcm1hdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF5T2ZNb250aCh5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCAwKS5nZXREYXRlKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRydXRoeShmbGFnOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIFtcInlcIiwgXCJ5ZXNcIiwgXCIxXCIsIFwidFwiLCBcInRydWVcIl0uaW5kZXhPZihmbGFnLnRvTG93ZXJDYXNlKCkpID49IDA7XG59XG5cbi8qKlxuICogVmFsaWRlIHVuIGZvcm1hdCBNb21lbnQuanMgZXQgcmV0b3VybmUgdW4gcsOpc3VsdGF0IGF2ZWMgcHLDqXZpc3VhbGlzYXRpb25cbiAqIEBwYXJhbSBmb3JtYXQgLSBMZSBmb3JtYXQgTW9tZW50LmpzIMOgIHZhbGlkZXJcbiAqIEByZXR1cm5zIFVuIG9iamV0IGNvbnRlbmFudCB2YWxpZCAoYm9vbMOpZW4pLCBlcnJvciAob3B0aW9ubmVsKSwgcHJldmlldyAob3B0aW9ubmVsKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVNb21lbnRGb3JtYXQoZm9ybWF0OiBzdHJpbmcpOiB7IHZhbGlkOiBib29sZWFuOyBlcnJvcj86IHN0cmluZzsgcHJldmlldz86IHN0cmluZyB9IHtcbiAgaWYgKCFmb3JtYXQgfHwgdHlwZW9mIGZvcm1hdCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBcIkxlIGZvcm1hdCBuZSBwZXV0IHBhcyDDqnRyZSB2aWRlXCIgfTtcbiAgfVxuXG4gIC8vIExpbWl0ZXIgbGEgbG9uZ3VldXIgZHUgZm9ybWF0IHBvdXIgw6l2aXRlciBsZXMgYXR0YXF1ZXNcbiAgY29uc3QgTUFYX0ZPUk1BVF9MRU5HVEggPSAxMDA7XG4gIGlmIChmb3JtYXQubGVuZ3RoID4gTUFYX0ZPUk1BVF9MRU5HVEgpIHtcbiAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBgTGUgZm9ybWF0IG5lIHBldXQgcGFzIGTDqXBhc3NlciAke01BWF9GT1JNQVRfTEVOR1RIfSBjYXJhY3TDqHJlc2AgfTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdGVzdERhdGUgPSBtb21lbnQoKTtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSB0ZXN0RGF0ZS5mb3JtYXQoZm9ybWF0KTtcbiAgICBcbiAgICAvLyBWw6lyaWZpZXIgcXVlIGxlIGZvcm1hdCBwcm9kdWl0IHF1ZWxxdWUgY2hvc2UgZGUgdmFsaWRlXG4gICAgaWYgKCFmb3JtYXR0ZWQgfHwgZm9ybWF0dGVkID09PSBmb3JtYXQpIHtcbiAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgZXJyb3I6IFwiRm9ybWF0IGludmFsaWRlIG91IG5vbiByZWNvbm51XCIgfTtcbiAgICB9XG4gICAgXG4gICAgLy8gVsOpcmlmaWVyIHF1ZSBsZSBmb3JtYXQgbmUgY29udGllbnQgcGFzIGRlIGNhcmFjdMOocmVzIGRhbmdlcmV1eFxuICAgIC8vIE1vbWVudC5qcyB1dGlsaXNlIGRlcyBjYXJhY3TDqHJlcyBzcMOpY2lhdXgsIG1haXMgb24gdmV1dCDDqXZpdGVyIGxlcyBpbmplY3Rpb25zXG4gICAgLy8gTGVzIGZvcm1hdHMgTW9tZW50LmpzIHZhbGlkZXMgY29udGllbm5lbnQgcHJpbmNpcGFsZW1lbnQgZGVzIGxldHRyZXMsIGNoaWZmcmVzIGV0IGNhcmFjdMOocmVzIGRlIHBvbmN0dWF0aW9uXG4gICAgY29uc3QgZGFuZ2Vyb3VzUGF0dGVybiA9IC9bPD5cIidgXS87XG4gICAgaWYgKGRhbmdlcm91c1BhdHRlcm4udGVzdChmb3JtYXQpKSB7XG4gICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIGVycm9yOiBcIkxlIGZvcm1hdCBjb250aWVudCBkZXMgY2FyYWN0w6hyZXMgbm9uIGF1dG9yaXPDqXNcIiB9O1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgcHJldmlldzogZm9ybWF0dGVkIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBcIkVycmV1ciBsb3JzIGRlIGxhIHZhbGlkYXRpb24gZHUgZm9ybWF0XCIgfTtcbiAgfVxufVxuXG4vKipcbiAqIFNhbml0aXplIGV0IHZhbGlkZSB1bmUgZW50csOpZSB1dGlsaXNhdGV1ciBwb3VyIMOpdml0ZXIgbGVzIGluamVjdGlvbnNcbiAqIEBwYXJhbSBpbnB1dCAtIEwnZW50csOpZSDDoCBzYW5pdGl6ZXJcbiAqIEBwYXJhbSBtYXhMZW5ndGggLSBMb25ndWV1ciBtYXhpbWFsZSBhdXRvcmlzw6llIChkw6lmYXV0OiAyMDApXG4gKiBAcmV0dXJucyBMJ2VudHLDqWUgc2FuaXRpesOpZSBvdSBudWxsIHNpIGludmFsaWRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZUlucHV0KGlucHV0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsLCBtYXhMZW5ndGggPSAyMDApOiBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBMaW1pdGVyIGxhIGxvbmd1ZXVyXG4gIGNvbnN0IHRyaW1tZWQgPSBpbnB1dC50cmltKCkuc3Vic3RyaW5nKDAsIG1heExlbmd0aCk7XG4gIFxuICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFJlamV0ZXIgbGVzIGNhcmFjdMOocmVzIGRlIGNvbnRyw7RsZSBldCBsZXMgY2FyYWN0w6hyZXMgc2FucyB1c2FnZSBsw6lnaXRpbWUgZGFucyB1bmVcbiAgLy8gZXhwcmVzc2lvbiBkZSBkYXRlIGVuIGxhbmdhZ2UgbmF0dXJlbCAoZXg6IFwiPFwiLCBcIj5cIiwgXCJgXCIpLiBPbiBuJ3V0aWxpc2UgcGFzIGRlIHdoaXRlbGlzdFxuICAvLyBkZSBzY3JpcHRzIGNhciBsZXMgZGF0ZXMgZW4gbGFuZ2FnZSBuYXR1cmVsIHV0aWxpc2VudCBkZXMgbGV0dHJlcyBkZSB0b3V0ZXMgbGVzIGxhbmd1ZXNcbiAgLy8gc3VwcG9ydMOpZXMgKGxhdGluLCBjeXJpbGxpcXVlLCBqYXBvbmFpcywgY2hpbm9pcy4uLiksIGFpbnNpIHF1ZSBsJ2Fwb3N0cm9waGVcbiAgLy8gKGV4OiBcIkF1am91cmQnaHVpXCIgZW4gZnJhbsOnYWlzLCBcItCfJ9GP0YLQvdC40YbRllwiIGVuIHVrcmFpbmllbikuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4IC0tIGludGVudGlvbmFsOiB0aGlzIHJhbmdlIGlzIHRoZSBhY3R1YWwgc2FuaXRpemF0aW9uIHRhcmdldCwgbm90IGEgdHlwby5cbiAgY29uc3QgaW52YWxpZENoYXJzUGF0dGVybiA9IC9bPD5gXFx1MDAwMC1cXHUwMDFGXFx1MDA3Ri1cXHUwMDlGXS87XG5cbiAgaWYgKGludmFsaWRDaGFyc1BhdHRlcm4udGVzdCh0cmltbWVkKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRyaW1tZWQ7XG59XG5cbi8qKlxuICogVmFsaWRlIHVuIHBhcmFtw6h0cmUgVVJJIHBvdXIgw6l2aXRlciBsZXMgaW5qZWN0aW9uc1xuICogQHBhcmFtIHBhcmFtIC0gTGUgcGFyYW3DqHRyZSDDoCB2YWxpZGVyXG4gKiBAcGFyYW0gbWF4TGVuZ3RoIC0gTG9uZ3VldXIgbWF4aW1hbGUgYXV0b3Jpc8OpZSAoZMOpZmF1dDogMTAwKVxuICogQHJldHVybnMgTGUgcGFyYW3DqHRyZSB2YWxpZMOpIG91IG51bGwgc2kgaW52YWxpZGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVXJpUGFyYW0ocGFyYW06IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwsIG1heExlbmd0aCA9IDEwMCk6IHN0cmluZyB8IG51bGwge1xuICByZXR1cm4gc2FuaXRpemVJbnB1dChwYXJhbSwgbWF4TGVuZ3RoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtOdW1iZXIoZGF5T2ZXZWVrOiBPbWl0PERheU9mV2VlaywgXCJsb2NhbGUtZGVmYXVsdFwiPik6IG51bWJlciB7XG4gIHJldHVybiBkYXlzT2ZXZWVrLmluZGV4T2YoZGF5T2ZXZWVrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsZVdlZWtTdGFydCgpOiBPbWl0PERheU9mV2VlaywgXCJsb2NhbGUtZGVmYXVsdFwiPiB7XG4gIGNvbnN0IGxvY2FsZURhdGEgPSBtb21lbnQubG9jYWxlRGF0YSgpIGFzIHsgX3dlZWs/OiB7IGRvdzogbnVtYmVyIH0gfTtcbiAgY29uc3Qgc3RhcnRPZldlZWsgPSBsb2NhbGVEYXRhLl93ZWVrPy5kb3cgPz8gMDtcbiAgcmV0dXJuIGRheXNPZldlZWtbc3RhcnRPZldlZWtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVNYXJrZG93bkxpbmsoYXBwOiBBcHAsIHN1YnBhdGg6IHN0cmluZywgYWxpYXM/OiBzdHJpbmcpIHtcbiAgY29uc3QgdmF1bHRXaXRoQ29uZmlnID0gYXBwLnZhdWx0IGFzIHR5cGVvZiBhcHAudmF1bHQgJiB7IGdldENvbmZpZzogKGtleTogc3RyaW5nKSA9PiBib29sZWFuIH07XG4gIGNvbnN0IHVzZU1hcmtkb3duTGlua3MgPSB2YXVsdFdpdGhDb25maWcuZ2V0Q29uZmlnKFwidXNlTWFya2Rvd25MaW5rc1wiKTtcbiAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgoc3VicGF0aCk7XG5cbiAgaWYgKHVzZU1hcmtkb3duTGlua3MpIHtcbiAgICBpZiAoYWxpYXMpIHtcbiAgICAgIHJldHVybiBgWyR7YWxpYXN9XSgke3BhdGgucmVwbGFjZSgvIC9nLCBcIiUyMFwiKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGBbJHtzdWJwYXRofV0oJHtwYXRofSlgO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYWxpYXMpIHtcbiAgICAgIHJldHVybiBgW1ske3BhdGh9fCR7YWxpYXN9XV1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYFtbJHtwYXRofV1dYDtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlRGFpbHlOb3RlKGRhdGU6IE1vbWVudCk6IFByb21pc2U8VEZpbGUgfCBudWxsPiB7XG4gIC8vIEJvcnJvd2VkIGZyb20gdGhlIFNsYXRlZCBwbHVnaW46XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90Z3Jvc2luZ2VyL3NsYXRlZC1vYnNpZGlhbi9ibG9iL21haW4vc3JjL3ZhdWx0LnRzI0wxN1xuICBjb25zdCBkZXNpcmVkTm90ZSA9IGdldERhaWx5Tm90ZShkYXRlLCBnZXRBbGxEYWlseU5vdGVzKCkpO1xuICBpZiAoZGVzaXJlZE5vdGUpIHtcbiAgICByZXR1cm4gZGVzaXJlZE5vdGU7XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZURhaWx5Tm90ZShkYXRlKTtcbn1cblxuLy8gU291cmNlIGBjaHJvbm9gOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3dhbmFzaXQvY2hyb25vL2Jsb2IvNDdmMTFkYTZiNjU2Y2Q1Y2I2MWYyNDZlOGNjYTcwNjk4MzIwOGRlZC9zcmMvdXRpbHMvcGF0dGVybi50cyNMOFxuLy8gQ29weXJpZ2h0IChjKSAyMDE0LCBXYW5hc2l0IFRhbmFraXRydW5ncnVhbmdcbnR5cGUgRGljdGlvbmFyeUxpa2UgPSBzdHJpbmdbXSB8IHsgW3dvcmQ6IHN0cmluZ106IHVua25vd24gfSB8IE1hcDxzdHJpbmcsIHVua25vd24+O1xuXG4vLyBUaGUgQXJyYXkvTWFwIGJyYW5jaGVzIGJlbG93IGFyZSB1bnJlYWNoYWJsZSB3aXRoIHRoaXMgZmlsZSdzIG9ubHkgY2FsbGVyXG4vLyAobWF0Y2hBbnlQYXR0ZXJuKCkgaXMgb25seSBldmVyIGludm9rZWQgd2l0aCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWSwgYVxuLy8gcGxhaW4gb2JqZWN0KSAtLSBrZXB0IGJlY2F1c2UgdGhleSdyZSBjb3BpZWQgdmVyYmF0aW0gZnJvbSBjaHJvbm8tbm9kZSdzXG4vLyBtb3JlIGdlbmVyaWNhbGx5LXVzZWQgb3JpZ2luYWwsIG5vdCBiZWNhdXNlIHRoZXkncmUgY3VycmVudGx5IGV4ZXJjaXNlZC5cbmZ1bmN0aW9uIGV4dHJhY3RUZXJtcyhkaWN0aW9uYXJ5OiBEaWN0aW9uYXJ5TGlrZSk6IHN0cmluZ1tdIHtcbiAgbGV0IGtleXM6IHN0cmluZ1tdO1xuICBpZiAoZGljdGlvbmFyeSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAga2V5cyA9IFsuLi5kaWN0aW9uYXJ5XTtcbiAgfSBlbHNlIGlmIChkaWN0aW9uYXJ5IGluc3RhbmNlb2YgTWFwKSB7XG4gICAga2V5cyA9IEFycmF5LmZyb20oZGljdGlvbmFyeS5rZXlzKCkpO1xuICB9IGVsc2Uge1xuICAgIGtleXMgPSBPYmplY3Qua2V5cyhkaWN0aW9uYXJ5KTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuZnVuY3Rpb24gbWF0Y2hBbnlQYXR0ZXJuKGRpY3Rpb25hcnk6IERpY3Rpb25hcnlMaWtlKTogc3RyaW5nIHtcbiAgY29uc3Qgam9pbmVkVGVybXMgPSBleHRyYWN0VGVybXMoZGljdGlvbmFyeSlcbiAgICAuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClcbiAgICAuam9pbihcInxcIilcbiAgICAucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIik7XG5cbiAgcmV0dXJuIGAoPzoke2pvaW5lZFRlcm1zfSlgO1xufVxuXG5jb25zdCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWTogeyBbd29yZDogc3RyaW5nXTogbnVtYmVyIH0gPSB7XG4gIGZpcnN0OiAxLFxuICBzZWNvbmQ6IDIsXG4gIHRoaXJkOiAzLFxuICBmb3VydGg6IDQsXG4gIGZpZnRoOiA1LFxuICBzaXh0aDogNixcbiAgc2V2ZW50aDogNyxcbiAgZWlnaHRoOiA4LFxuICBuaW50aDogOSxcbiAgdGVudGg6IDEwLFxuICBlbGV2ZW50aDogMTEsXG4gIHR3ZWxmdGg6IDEyLFxuICB0aGlydGVlbnRoOiAxMyxcbiAgZm91cnRlZW50aDogMTQsXG4gIGZpZnRlZW50aDogMTUsXG4gIHNpeHRlZW50aDogMTYsXG4gIHNldmVudGVlbnRoOiAxNyxcbiAgZWlnaHRlZW50aDogMTgsXG4gIG5pbmV0ZWVudGg6IDE5LFxuICB0d2VudGlldGg6IDIwLFxuICBcInR3ZW50eSBmaXJzdFwiOiAyMSxcbiAgXCJ0d2VudHktZmlyc3RcIjogMjEsXG4gIFwidHdlbnR5IHNlY29uZFwiOiAyMixcbiAgXCJ0d2VudHktc2Vjb25kXCI6IDIyLFxuICBcInR3ZW50eSB0aGlyZFwiOiAyMyxcbiAgXCJ0d2VudHktdGhpcmRcIjogMjMsXG4gIFwidHdlbnR5IGZvdXJ0aFwiOiAyNCxcbiAgXCJ0d2VudHktZm91cnRoXCI6IDI0LFxuICBcInR3ZW50eSBmaWZ0aFwiOiAyNSxcbiAgXCJ0d2VudHktZmlmdGhcIjogMjUsXG4gIFwidHdlbnR5IHNpeHRoXCI6IDI2LFxuICBcInR3ZW50eS1zaXh0aFwiOiAyNixcbiAgXCJ0d2VudHkgc2V2ZW50aFwiOiAyNyxcbiAgXCJ0d2VudHktc2V2ZW50aFwiOiAyNyxcbiAgXCJ0d2VudHkgZWlnaHRoXCI6IDI4LFxuICBcInR3ZW50eS1laWdodGhcIjogMjgsXG4gIFwidHdlbnR5IG5pbnRoXCI6IDI5LFxuICBcInR3ZW50eS1uaW50aFwiOiAyOSxcbiAgdGhpcnRpZXRoOiAzMCxcbiAgXCJ0aGlydHkgZmlyc3RcIjogMzEsXG4gIFwidGhpcnR5LWZpcnN0XCI6IDMxLFxufTtcblxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oXG4gIE9SRElOQUxfV09SRF9ESUNUSU9OQVJZXG4pfXxbMC05XXsxLDJ9KD86c3R8bmR8cmR8dGh8w6htZXzDqG1lfGVyfGV8ZXJ8ZXxcXFxcLik/KWA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoOiBzdHJpbmcpOiBudW1iZXIge1xuICBsZXQgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICB9XG5cbiAgLy8gUmVtb3ZlIG9yZGluYWwgc3VmZml4ZXM6IHN0LCBuZCwgcmQsIHRoLCDDqG1lLCBlciwgZSwgYW5kIHRyYWlsaW5nIGRvdFxuICBudW0gPSBudW0ucmVwbGFjZSgvKD86c3R8bmR8cmR8dGh8w6htZXxlcnxlfFxcLikkL2ksIFwiXCIpO1xuICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cblxuLyoqXG4gKiBEw6l0ZXJtaW5lIHNpIHVuZSBleHByZXNzaW9uIHRlbXBvcmVsbGUgcmVsYXRpdmUgY291cnRlIChtaW51dGVzL2hldXJlcykgZGV2cmFpdCBvbWV0dHJlIGxhIGRhdGVcbiAqIGNhciBlbGxlIHJlc3RlIGRhbnMgbGEgbcOqbWUgam91cm7DqWUgKGF1am91cmQnaHVpKVxuICogQHBhcmFtIHRleHQgLSBMZSB0ZXh0ZSBkZSBsJ2V4cHJlc3Npb24gdGVtcG9yZWxsZSAoZXg6IFwiZGFucyAxNSBtaW5cIiwgXCJpbiAyIGhvdXJzXCIsIFwiMzDliIbpkJjlvoxcIilcbiAqIEBwYXJhbSBsYW5ndWFnZXMgLSBMZXMgbGFuZ3VlcyBzdXBwb3J0w6llcyBwb3VyIGTDqXRlY3RlciBsZXMgcGF0dGVybnNcbiAqIEByZXR1cm5zIHRydWUgc2kgYydlc3QgdW5lIGV4cHJlc3Npb24gcmVsYXRpdmUgY291cnRlIHF1aSByZXN0ZSBhdWpvdXJkJ2h1aVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHRleHQ6IHN0cmluZywgbGFuZ3VhZ2VzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBsb3dlclRleHQgPSB0ZXh0LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICBjb25zdCB0YyA9IG5ldyBUcmFuc2xhdGlvbkNvbGxlY3RvcihsYW5ndWFnZXMpO1xuXG4gIGNvbnN0IGluUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoXCJpblwiKTtcbiAgY29uc3QgbWludXRlUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoXCJtaW51dGVcIik7XG4gIGNvbnN0IGhvdXJQYXR0ZXJuID0gdGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcImhvdXJcIik7XG4gIC8vIFN1ZmZpeC1zdHlsZSBsYW5ndWFnZXMgKGUuZy4gQ2hpbmVzZSBcIjMw5YiG6ZCY5b6MXCIpIG1hcmsgXCJsYXRlclwiIGluc3RlYWQgb2ZcbiAgLy8gcHJlZml4aW5nIHdpdGggXCJpblwiOyBzZWUgdHJhbnNsYXRpb24tY29sbGVjdG9yLnRzIC8gcGFyc2VyLnRzIGZvciB3aHkgdGhpc1xuICAvLyBpcyBhIHNlcGFyYXRlIGtleSBmcm9tIHRoZSBkYXkvaG91ci9taW51dGUgd29yZCBsaXN0cy5cbiAgY29uc3QgbGF0ZXJQYXR0ZXJuID0gdGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcImxhdGVyXCIpO1xuXG4gIGNvbnN0IHNob3J0UmVsYXRpdmVQYXR0ZXJuczogUmVnRXhwW10gPSBbXTtcblxuICAvLyBFdmVyeSBvbmUgb2YgdGhlIDExIHN1cHBvcnRlZCBsYW5ndWFnZXMgZGVmaW5lcyBtaW51dGUvaG91ciB0b2dldGhlclxuICAvLyB3aXRoIGluL2xhdGVyLCBzbyB0aGUgbmVzdGVkIGBpZiAobWludXRlUGF0dGVybilgL2BpZiAoaG91clBhdHRlcm4pYFxuICAvLyBjaGVja3MgYmVsb3cgY2FuJ3QgYWN0dWFsbHkgYmUgZmFsc2Ugd2hpbGUgdGhlaXIgZW5jbG9zaW5nIGBpZmAgaXMgdHJ1ZVxuICAvLyAtLSBubyBjb21iaW5hdGlvbiBvZiByZWFsIChvciB1bmtub3duKSBsYW5ndWFnZSBjb2RlcyBwcm9kdWNlcyBcImluXCIgb3JcbiAgLy8gXCJsYXRlclwiIHdpdGhvdXQgYWxzbyBwcm9kdWNpbmcgXCJtaW51dGVcIiBhbmQgXCJob3VyXCIuIEtlcHQgYXMgYSBndWFyZCBpblxuICAvLyBjYXNlIGEgZnV0dXJlIGxhbmd1YWdlIG1vZHVsZSBpcyBhdXRob3JlZCBpbmNvbXBsZXRlbHkuXG5cbiAgLy8gUHJlZml4IHN0eWxlOiBcImluIFggbWludXRlc1wiL1wiZGFucyBYIG1pblwiLy4uLlxuICBpZiAoaW5QYXR0ZXJuKSB7XG4gICAgaWYgKG1pbnV0ZVBhdHRlcm4pIHtcbiAgICAgIHNob3J0UmVsYXRpdmVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYF4oPzoke2luUGF0dGVybn0pXFxcXHMrXFxcXGQrXFxcXHMrKD86JHttaW51dGVQYXR0ZXJufSlgLCAnaScpKTtcbiAgICB9XG4gICAgaWYgKGhvdXJQYXR0ZXJuKSB7XG4gICAgICBzaG9ydFJlbGF0aXZlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBeKD86JHtpblBhdHRlcm59KVxcXFxzK1xcXFxkK1xcXFxzKyg/OiR7aG91clBhdHRlcm59KWAsICdpJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN1ZmZpeCBzdHlsZTogXCJYIG1pbnV0ZXNcIiArIFwibGF0ZXJcIiBtYXJrZXIsIGUuZy4gQ2hpbmVzZSBcIjMw5YiG6ZCY5b6MXCJcbiAgaWYgKGxhdGVyUGF0dGVybikge1xuICAgIGlmIChtaW51dGVQYXR0ZXJuKSB7XG4gICAgICBzaG9ydFJlbGF0aXZlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGBeXFxcXGQrXFxcXHMqKD86JHttaW51dGVQYXR0ZXJufSlcXFxccyooPzoke2xhdGVyUGF0dGVybn0pJGAsICdpJykpO1xuICAgIH1cbiAgICBpZiAoaG91clBhdHRlcm4pIHtcbiAgICAgIHNob3J0UmVsYXRpdmVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYF5cXFxcZCtcXFxccyooPzoke2hvdXJQYXR0ZXJufSlcXFxccyooPzoke2xhdGVyUGF0dGVybn0pJGAsICdpJykpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzaG9ydFJlbGF0aXZlUGF0dGVybnMuc29tZShwYXR0ZXJuID0+IHBhdHRlcm4udGVzdChsb3dlclRleHQpKTtcbn1cblxuLyoqXG4gKiBPYnRpZW50IGwnw6lkaXRldXIgYWN0aWYgZGUgbWFuacOocmUgZmxleGlibGUsIGNvbXBhdGlibGUgYXZlYyBRdWlja0FkZCBldCBhdXRyZXMgcGx1Z2luc1xuICogRXNzYWllIHBsdXNpZXVycyBtw6l0aG9kZXMgcG91ciB0cm91dmVyIGwnw6lkaXRldXIgYWN0aWZcbiAqIEBwYXJhbSB3b3Jrc3BhY2UgLSBMJ2luc3RhbmNlIFdvcmtzcGFjZSBkJ09ic2lkaWFuXG4gKiBAcmV0dXJucyBMJ8OpZGl0ZXVyIGFjdGlmIG91IG51bGwgc2kgYXVjdW4gbidlc3QgdHJvdXbDqVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlRWRpdG9yKHdvcmtzcGFjZTogV29ya3NwYWNlKTogRWRpdG9yIHwgbnVsbCB7XG4gIC8vIE3DqXRob2RlIDE6IFV0aWxpc2VyIGFjdGl2ZUVkaXRvciBzaSBkaXNwb25pYmxlIChPYnNpZGlhbiByw6ljZW50KVxuICBjb25zdCB3b3Jrc3BhY2VXaXRoQWN0aXZlRWRpdG9yID0gd29ya3NwYWNlIGFzIHR5cGVvZiB3b3Jrc3BhY2UgJiB7IGFjdGl2ZUVkaXRvcj86IHsgZWRpdG9yPzogRWRpdG9yIH0gfTtcbiAgaWYgKHdvcmtzcGFjZVdpdGhBY3RpdmVFZGl0b3IuYWN0aXZlRWRpdG9yPy5lZGl0b3IpIHtcbiAgICByZXR1cm4gd29ya3NwYWNlV2l0aEFjdGl2ZUVkaXRvci5hY3RpdmVFZGl0b3IuZWRpdG9yO1xuICB9XG5cbiAgLy8gTcOpdGhvZGUgMjogVXRpbGlzZXIgZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpIChtw6l0aG9kZSBzdGFuZGFyZClcbiAgY29uc3QgYWN0aXZlVmlldyA9IHdvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldyk7XG4gIGlmIChhY3RpdmVWaWV3Py5lZGl0b3IpIHtcbiAgICByZXR1cm4gYWN0aXZlVmlldy5lZGl0b3I7XG4gIH1cblxuICAvLyBNw6l0aG9kZSAzOiBDaGVyY2hlciBkYW5zIHRvdXMgbGVzIGxlYWZzIHBvdXIgdHJvdXZlciB1biDDqWRpdGV1ciBhY3RpZlxuICAvLyBVdGlsZSBwb3VyIFF1aWNrQWRkIGV0IGF1dHJlcyBwbHVnaW5zIHF1aSBjcsOpZW50IGRlcyDDqWRpdGV1cnMgcGVyc29ubmFsaXPDqXNcbiAgY29uc3QgYWN0aXZlTGVhZiA9IHdvcmtzcGFjZS5nZXRNb3N0UmVjZW50TGVhZigpO1xuICBpZiAoYWN0aXZlTGVhZikge1xuICAgIGNvbnN0IHZpZXcgPSBhY3RpdmVMZWFmLnZpZXc7XG4gICAgLy8gVsOpcmlmaWVyIHNpIGxhIHZ1ZSBhIHVuIMOpZGl0ZXVyXG4gICAgY29uc3Qgdmlld1dpdGhFZGl0b3IgPSB2aWV3IGFzIHR5cGVvZiB2aWV3ICYgeyBlZGl0b3I/OiBFZGl0b3IgfTtcbiAgICBpZiAodmlld1dpdGhFZGl0b3IuZWRpdG9yKSB7XG4gICAgICByZXR1cm4gdmlld1dpdGhFZGl0b3IuZWRpdG9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIE3DqXRob2RlcyA0IGV0IDU6IFBhcmNvdXJpciB0b3VzIGxlcyBsZWFmcyBtYXJrZG93biwgZW4gcHLDqWbDqXJhbnQgY2VsdWkgcXVpXG4gIC8vIGEgbGUgZm9jdXMsIHNpbm9uIGxlIHByZW1pZXIgw6lkaXRldXIgZGlzcG9uaWJsZSBlbiBkZXJuaWVyIHJlY291cnMuXG4gIGxldCBmaXJzdEF2YWlsYWJsZUVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG4gIGZvciAoY29uc3QgbGVhZiBvZiB3b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKFwibWFya2Rvd25cIikpIHtcbiAgICBjb25zdCB2aWV3ID0gbGVhZi52aWV3O1xuICAgIGlmICh2aWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3ICYmIHZpZXcuZWRpdG9yKSB7XG4gICAgICBjb25zdCBlZGl0b3JFbCA9ICh2aWV3LmVkaXRvciBhcyBFZGl0b3IgJiB7IGNtPzogeyBoYXNGb2N1cz86ICgpID0+IGJvb2xlYW4gfSB9KS5jbTtcbiAgICAgIGlmIChlZGl0b3JFbD8uaGFzRm9jdXM/LigpKSB7XG4gICAgICAgIHJldHVybiB2aWV3LmVkaXRvcjtcbiAgICAgIH1cbiAgICAgIGZpcnN0QXZhaWxhYmxlRWRpdG9yID0gZmlyc3RBdmFpbGFibGVFZGl0b3IgPz8gdmlldy5lZGl0b3I7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZpcnN0QXZhaWxhYmxlRWRpdG9yO1xufVxuXG4vLyBFeHRyYWN0cyBhIHJlYWRhYmxlIG1lc3NhZ2UgZnJvbSBhIGNhdWdodCB2YWx1ZSBvZiB1bmtub3duIHR5cGUuIFBsYWluXG4vLyBgU3RyaW5nKGUpYCBpcyB1bnNhZmUgZm9yIGFyYml0cmFyeSB1bmtub3duIHZhbHVlcyAoYSB0aHJvd24gcGxhaW4gb2JqZWN0XG4vLyB3b3VsZCBzdHJpbmdpZnkgdG8gdGhlIHVzZWxlc3MgXCJbb2JqZWN0IE9iamVjdF1cIiksIGJ1dCBibGFua2V0XG4vLyBgSlNPTi5zdHJpbmdpZnkoZSlgIGlzbid0IHJpZ2h0IGVpdGhlciAtLSBpdCB3b3VsZCB3cmFwIHRocm93biBzdHJpbmdzIGluXG4vLyBsaXRlcmFsIHF1b3RlcywgY2hhbmdpbmcgd2hhdCBhbHJlYWR5LXRocm93bi1zdHJpbmcgY2FsbCBzaXRlcyBsb2cuXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVFcnJvcihlOiB1bmtub3duKTogc3RyaW5nIHtcbiAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGUubWVzc2FnZTtcbiAgaWYgKHR5cGVvZiBlID09PSBcInN0cmluZ1wiKSByZXR1cm4gZTtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xufSIsImltcG9ydCB7IEFwcCwgTW9kYWwsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB0eXBlIE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuLi9tYWluXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuLi93aW5kb3ctbW9tZW50XCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpc3RvcnlNYW5hZ2VyTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XG4gIHByaXZhdGUgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcztcbiAgLy8gVHdvLWNsaWNrIGNvbmZpcm1hdGlvbiBmb3IgXCJDbGVhciBhbGxcIjogZmlyc3QgY2xpY2sgYXJtcyBpdCwgc2Vjb25kXG4gIC8vIGNsaWNrIChvbiB0aGUgc2FtZSByZW5kZXIpIGFjdHVhbGx5IGNsZWFycyAtLSBhdm9pZHMgd2lwaW5nIHRoZSB3aG9sZVxuICAvLyBoaXN0b3J5IGZyb20gYSBzaW5nbGUgYWNjaWRlbnRhbCBjbGljaywgd2l0aG91dCB0aGUgY29tcGxleGl0eSBvZiBhXG4gIC8vIHNlcGFyYXRlIGNvbmZpcm1hdGlvbiBtb2RhbCBvciBhIHRpbWVvdXQgdG8gcmVzZXQgdGhlIGFybWluZyBzdGF0ZS5cbiAgcHJpdmF0ZSBjbGVhckFsbEFybWVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpIHtcbiAgICBzdXBlcihhcHApO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICB9XG5cbiAgb25PcGVuKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJBbGxBcm1lZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY29udGVudEVsLmVtcHR5KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlbmRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBGZXRjaGVkIGJlZm9yZSB0b3VjaGluZyB0aGUgRE9NIHNvIHRoZSBtb2RhbCBkb2Vzbid0IGZsYXNoIGFuXG4gICAgLy8gZW1wdHkvaGVhZGVyLW9ubHkgc3RhdGUgd2hpbGUgdGhlIChhc3luYykgaGlzdG9yeSBsb2FkIGlzIGluIGZsaWdodC5cbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIuZ2V0RW50cmllc0Zvck1hbmFnZW1lbnQoKTtcblxuICAgIGNvbnN0IHsgY29udGVudEVsIH0gPSB0aGlzO1xuICAgIGNvbnRlbnRFbC5lbXB0eSgpO1xuICAgIGNvbnRlbnRFbC5hZGRDbGFzcyhcIm5sZC1oaXN0b3J5LW1hbmFnZXItbW9kYWxcIik7XG5cbiAgICBjb250ZW50RWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiTWFuYWdlIHN1Z2dlc3Rpb24gaGlzdG9yeVwiIH0pO1xuXG4gICAgaWYgKGVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb250ZW50RWwuY3JlYXRlRWwoXCJwXCIsIHsgdGV4dDogXCJObyBoaXN0b3J5IHlldC4gU3VnZ2VzdGlvbnMgeW91IHNlbGVjdCBmcm9tIHRoZSBhdXRvc3VnZ2VzdCBwb3B1cCB3aWxsIGFwcGVhciBoZXJlLlwiIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5ldyBTZXR0aW5nKGNvbnRlbnRFbClcbiAgICAgIC5zZXROYW1lKFwiQ2xlYXIgYWxsIGhpc3RvcnlcIilcbiAgICAgIC5zZXREZXNjKHRoaXMuY2xlYXJBbGxBcm1lZFxuICAgICAgICA/IFwiQ2xpY2sgYWdhaW4gdG8gY29uZmlybSAtLSB0aGlzIGNhbm5vdCBiZSB1bmRvbmUuXCJcbiAgICAgICAgOiBgUmVtb3ZlIGFsbCAke2VudHJpZXMubGVuZ3RofSBlbnRyaWVzLmApXG4gICAgICAuYWRkQnV0dG9uKChidXR0b24pID0+IHtcbiAgICAgICAgYnV0dG9uLnNldEJ1dHRvblRleHQodGhpcy5jbGVhckFsbEFybWVkID8gXCJDbGljayBhZ2FpbiB0byBjb25maXJtXCIgOiBcIkNsZWFyIGFsbFwiKTtcbiAgICAgICAgaWYgKHRoaXMuY2xlYXJBbGxBcm1lZCkge1xuICAgICAgICAgIGJ1dHRvbi5zZXRXYXJuaW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnV0dG9uLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5jbGVhckFsbEFybWVkKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQWxsQXJtZWQgPSB0cnVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIuY2xlYXJIaXN0b3J5KCk7XG4gICAgICAgICAgdGhpcy5jbGVhckFsbEFybWVkID0gZmFsc2U7XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgY29uc3QgbGFzdFVzZWRUZXh0ID0gbW9tZW50KGVudHJ5Lmxhc3RVc2VkKS5mcm9tTm93KCk7XG4gICAgICBjb25zdCB0aW1lc1RleHQgPSBlbnRyeS5jb3VudCA9PT0gMSA/IFwiMSB0aW1lXCIgOiBgJHtlbnRyeS5jb3VudH0gdGltZXNgO1xuXG4gICAgICBuZXcgU2V0dGluZyhjb250ZW50RWwpXG4gICAgICAgIC5zZXROYW1lKGVudHJ5LmRpc3BsYXkpXG4gICAgICAgIC5zZXREZXNjKGBVc2VkICR7dGltZXNUZXh0fSDCtyBsYXN0IHVzZWQgJHtsYXN0VXNlZFRleHR9YClcbiAgICAgICAgLmFkZEJ1dHRvbigoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgYnV0dG9uXG4gICAgICAgICAgICAuc2V0SWNvbihcInRyYXNoXCIpXG4gICAgICAgICAgICAuc2V0VG9vbHRpcChcIlJlbW92ZSB0aGlzIGVudHJ5XCIpXG4gICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgIC8vIERlbGV0aW5nIGEgc2luZ2xlIGVudHJ5IGlzIGEgZGlmZmVyZW50IGFjdGlvbiBmcm9tIFwiQ2xlYXJcbiAgICAgICAgICAgICAgLy8gYWxsXCIgLS0gZG9uJ3QgbGVhdmUgdGhhdCBidXR0b24gYXJtZWQgZnJvbSBhbiBlYXJsaWVyIGNsaWNrLFxuICAgICAgICAgICAgICAvLyB3aGVyZSBhIGxhdGVyLCB1bnJlbGF0ZWQgXCJDbGVhciBhbGxcIiBjbGljayB3b3VsZCB0aGVuIHdpcGVcbiAgICAgICAgICAgICAgLy8gZXZlcnl0aGluZyB3aXRob3V0IHRoZSB1c2VyIHJlLWNvbmZpcm1pbmcgdGhhdCBzcGVjaWZpYyBpbnRlbnQuXG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJBbGxBcm1lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlci5yZW1vdmVFbnRyeShlbnRyeS5rZXkpO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlcigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgTmF0dXJhbExhbmd1YWdlRGF0ZXMgZnJvbSBcIi4vbWFpblwiO1xuaW1wb3J0IHsgZ2V0TG9jYWxlV2Vla1N0YXJ0LCB2YWxpZGF0ZU1vbWVudEZvcm1hdCB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuL3dpbmRvdy1tb21lbnRcIjtcbmltcG9ydCBIaXN0b3J5TWFuYWdlck1vZGFsIGZyb20gXCIuL21vZGFscy9oaXN0b3J5LW1hbmFnZXItbW9kYWxcIjtcblxuLyoqXG4gKiBEYXkgb2YgdGhlIHdlZWsgdHlwZSBmb3Igd2VlayBzdGFydCBwcmVmZXJlbmNlLlxuICogQ2FuIGJlIGEgc3BlY2lmaWMgZGF5IG9yIFwibG9jYWxlLWRlZmF1bHRcIiB0byB1c2UgdGhlIHN5c3RlbSBsb2NhbGUuXG4gKi9cbmV4cG9ydCB0eXBlIERheU9mV2VlayA9XG4gIHwgXCJzdW5kYXlcIlxuICB8IFwibW9uZGF5XCJcbiAgfCBcInR1ZXNkYXlcIlxuICB8IFwid2VkbmVzZGF5XCJcbiAgfCBcInRodXJzZGF5XCJcbiAgfCBcImZyaWRheVwiXG4gIHwgXCJzYXR1cmRheVwiXG4gIHwgXCJsb2NhbGUtZGVmYXVsdFwiO1xuXG4vKipcbiAqIFBsdWdpbiBzZXR0aW5ncyBpbnRlcmZhY2UuXG4gKiBDb250YWlucyBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgTmF0dXJhbCBMYW5ndWFnZSBEYXRlcyBwbHVnaW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTkxEU2V0dGluZ3Mge1xuICBhdXRvc3VnZ2VzdFRvZ2dsZUxpbms6IGJvb2xlYW47XG4gIGF1dG9jb21wbGV0ZVRyaWdnZXJQaHJhc2U6IHN0cmluZztcbiAgaXNBdXRvc3VnZ2VzdEVuYWJsZWQ6IGJvb2xlYW47XG5cbiAgZm9ybWF0OiBzdHJpbmc7XG4gIHRpbWVGb3JtYXQ6IHN0cmluZztcbiAgc2VwYXJhdG9yOiBzdHJpbmc7XG4gIHdlZWtTdGFydDogRGF5T2ZXZWVrO1xuICBsYW5ndWFnZXM6IHN0cmluZ1tdO1xuXG4gIGVuZ2xpc2g6IGJvb2xlYW47XG4gIGphcGFuZXNlOiBib29sZWFuO1xuICBmcmVuY2g6IGJvb2xlYW47XG4gIGdlcm1hbjogYm9vbGVhbjtcbiAgcG9ydHVndWVzZTogYm9vbGVhbjtcbiAgZHV0Y2g6IGJvb2xlYW47XG4gIHNwYW5pc2g6IGJvb2xlYW47XG4gIGl0YWxpYW46IGJvb2xlYW47XG4gIHJ1c3NpYW46IGJvb2xlYW47XG4gIHVrcmFpbmlhbjogYm9vbGVhbjtcbiAgY2hpbmVzZTogYm9vbGVhbjtcbiAga29yZWFuOiBib29sZWFuO1xuXG4gIG1vZGFsVG9nZ2xlVGltZTogYm9vbGVhbjtcbiAgbW9kYWxUb2dnbGVMaW5rOiBib29sZWFuO1xuICBtb2RhbE1vbWVudEZvcm1hdDogc3RyaW5nO1xuXG4gIC8vIFNtYXJ0IHN1Z2dlc3Rpb25zXG4gIGVuYWJsZVNtYXJ0U3VnZ2VzdGlvbnM6IGJvb2xlYW47XG4gIGVuYWJsZUhpc3RvcnlTdWdnZXN0aW9uczogYm9vbGVhbjtcbiAgZW5hYmxlQ29udGV4dFN1Z2dlc3Rpb25zOiBib29sZWFuO1xuXG4gIC8vIFNtYXJ0IGRhdGUgZm9ybWF0dGluZ1xuICBvbWl0RGF0ZUZvclNob3J0UmVsYXRpdmU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1NFVFRJTkdTOiBOTERTZXR0aW5ncyA9IHtcbiAgYXV0b3N1Z2dlc3RUb2dnbGVMaW5rOiB0cnVlLFxuICBhdXRvY29tcGxldGVUcmlnZ2VyUGhyYXNlOiBcIkBcIixcbiAgaXNBdXRvc3VnZ2VzdEVuYWJsZWQ6IHRydWUsXG5cbiAgZm9ybWF0OiBcIllZWVktTU0tRERcIixcbiAgdGltZUZvcm1hdDogXCJISDptbVwiLFxuICBzZXBhcmF0b3I6IFwiIFwiLFxuICB3ZWVrU3RhcnQ6IFwibG9jYWxlLWRlZmF1bHRcIixcbiAgbGFuZ3VhZ2VzOiBbXCJlblwiXSxcblxuICBlbmdsaXNoOiB0cnVlLCAgLy8gU3luY2hyb25pemVkIHdpdGggbGFuZ3VhZ2VzOiBbXCJlblwiXVxuICBqYXBhbmVzZTogZmFsc2UsXG4gIGZyZW5jaDogZmFsc2UsXG4gIGdlcm1hbjogZmFsc2UsXG4gIHBvcnR1Z3Vlc2U6IGZhbHNlLFxuICBkdXRjaDogZmFsc2UsXG4gIHNwYW5pc2g6IGZhbHNlLFxuICBpdGFsaWFuOiBmYWxzZSxcbiAgcnVzc2lhbjogZmFsc2UsXG4gIHVrcmFpbmlhbjogZmFsc2UsXG4gIGNoaW5lc2U6IGZhbHNlLFxuICBrb3JlYW46IGZhbHNlLFxuXG4gIG1vZGFsVG9nZ2xlVGltZTogZmFsc2UsXG4gIG1vZGFsVG9nZ2xlTGluazogZmFsc2UsXG4gIG1vZGFsTW9tZW50Rm9ybWF0OiBcIllZWVktTU0tREQgSEg6bW1cIixcblxuICAvLyBTbWFydCBzdWdnZXN0aW9uc1xuICBlbmFibGVTbWFydFN1Z2dlc3Rpb25zOiB0cnVlLFxuICBlbmFibGVIaXN0b3J5U3VnZ2VzdGlvbnM6IHRydWUsXG4gIGVuYWJsZUNvbnRleHRTdWdnZXN0aW9uczogdHJ1ZSxcblxuICAvLyBTbWFydCBkYXRlIGZvcm1hdHRpbmdcbiAgb21pdERhdGVGb3JTaG9ydFJlbGF0aXZlOiB0cnVlLFxufTtcblxuY29uc3Qgd2Vla2RheXMgPSBbXG4gIFwic3VuZGF5XCIsXG4gIFwibW9uZGF5XCIsXG4gIFwidHVlc2RheVwiLFxuICBcIndlZG5lc2RheVwiLFxuICBcInRodXJzZGF5XCIsXG4gIFwiZnJpZGF5XCIsXG4gIFwic2F0dXJkYXlcIixcbl07XG5cbmV4cG9ydCBjbGFzcyBOTERTZXR0aW5nc1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xuICBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzO1xuXG4gIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzKSB7XG4gICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICB9XG5cbiAgZGlzcGxheSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNvbnRhaW5lckVsIH0gPSB0aGlzO1xuICAgIGNvbnN0IGxvY2FsaXplZFdlZWtkYXlzID0gbW9tZW50LndlZWtkYXlzKCk7XG4gICAgY29uc3QgbG9jYWxlV2Vla1N0YXJ0ID0gZ2V0TG9jYWxlV2Vla1N0YXJ0KCk7XG5cbiAgICBjb250YWluZXJFbC5lbXB0eSgpO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiTmF0dXJhbCBsYW5ndWFnZSBkYXRlc1wiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKS5zZXRIZWFkaW5nKCkuc2V0TmFtZShcIlBhcnNlciBzZXR0aW5nc1wiKTtcblxuICAgIGNvbnN0IGRhdGVGb3JtYXRTZXR0aW5nID0gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIkRhdGUgZm9ybWF0XCIpXG4gICAgICAuc2V0RGVzYyhcIk91dHB1dCBmb3JtYXQgZm9yIHBhcnNlZCBkYXRlc1wiKVxuICAgICAgLmFkZE1vbWVudEZvcm1hdCgodGV4dCkgPT5cbiAgICAgICAgdGV4dFxuICAgICAgICAgIC5zZXREZWZhdWx0Rm9ybWF0KFwiWVlZWS1NTS1ERFwiKVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWRhdGVNb21lbnRGb3JtYXQodmFsdWUgfHwgXCJZWVlZLU1NLUREXCIpO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlZC52YWxpZCkge1xuICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQgPSB2YWx1ZSB8fCBcIllZWVktTU0tRERcIjtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgIC8vIE1ldHRyZSDDoCBqb3VyIGxhIGRlc2NyaXB0aW9uIGF2ZWMgbGEgcHLDqXZpc3VhbGlzYXRpb24uXG4gICAgICAgICAgICAgIC8vIHZhbGlkYXRlTW9tZW50Rm9ybWF0KCkncyBjb250cmFjdCBndWFyYW50ZWVzIHByZXZpZXcgaXMgc2V0XG4gICAgICAgICAgICAgIC8vIHdoZW5ldmVyIHZhbGlkIGlzIHRydWUsIHNvIHRoZSBcIjogJydcIiBmYWxsYmFjayBiZWxvdyBpc1xuICAgICAgICAgICAgICAvLyB1bnJlYWNoYWJsZSB3aXRoIHJlYWwgZGF0YS5cbiAgICAgICAgICAgICAgZGF0ZUZvcm1hdFNldHRpbmcuc2V0RGVzYyhgT3V0cHV0IGZvcm1hdCBmb3IgcGFyc2VkIGRhdGVzJHt2YWxpZGF0ZWQucHJldmlldyA/IGAgKFByZXZpZXc6ICR7dmFsaWRhdGVkLnByZXZpZXd9KWAgOiBcIlwifWApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQWZmaWNoZXIgbCdlcnJldXIgZGFucyBsYSBkZXNjcmlwdGlvbi4gRXZlcnkgaW52YWxpZC1mb3JtYXRcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGZyb20gdmFsaWRhdGVNb21lbnRGb3JtYXQoKSBhbHdheXMgc2V0cyBlcnJvciwgc28gdGhlXG4gICAgICAgICAgICAgIC8vIFwiRm9ybWF0IGludmFsaWRlXCIgZmFsbGJhY2sgYmVsb3cgaXMgdW5yZWFjaGFibGUgd2l0aCByZWFsIGRhdGEuXG4gICAgICAgICAgICAgIGRhdGVGb3JtYXRTZXR0aW5nLnNldERlc2MoYE91dHB1dCBmb3JtYXQgZm9yIHBhcnNlZCBkYXRlcyAtIOKaoO+4jyAke3ZhbGlkYXRlZC5lcnJvciB8fCBcIkZvcm1hdCBpbnZhbGlkZVwifWApO1xuICAgICAgICAgICAgICAvLyBOZSBwYXMgc2F1dmVnYXJkZXIgbGUgZm9ybWF0IGludmFsaWRlLCByZXN0YXVyZXIgbGUgcHLDqWPDqWRlbnRcbiAgICAgICAgICAgICAgdGV4dC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICApO1xuICAgIFxuICAgIC8vIEFmZmljaGVyIGxhIHByw6l2aXN1YWxpc2F0aW9uIGluaXRpYWxlXG4gICAgY29uc3QgaW5pdGlhbFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgIGlmIChpbml0aWFsVmFsaWRhdGlvbi52YWxpZCAmJiBpbml0aWFsVmFsaWRhdGlvbi5wcmV2aWV3KSB7XG4gICAgICBkYXRlRm9ybWF0U2V0dGluZy5zZXREZXNjKGBPdXRwdXQgZm9ybWF0IGZvciBwYXJzZWQgZGF0ZXMgKFByZXZpZXc6ICR7aW5pdGlhbFZhbGlkYXRpb24ucHJldmlld30pYCk7XG4gICAgfVxuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZShcIldlZWsgc3RhcnRzIG9uXCIpXG4gICAgICAuc2V0RGVzYyhcIldoaWNoIGRheSB0byBjb25zaWRlciBhcyB0aGUgc3RhcnQgb2YgdGhlIHdlZWtcIilcbiAgICAgIC5hZGREcm9wZG93bigoZHJvcGRvd24pID0+IHtcbiAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKFwibG9jYWxlLWRlZmF1bHRcIiwgYExvY2FsZSBkZWZhdWx0ICgke1N0cmluZyhsb2NhbGVXZWVrU3RhcnQpfSlgKTtcbiAgICAgICAgbG9jYWxpemVkV2Vla2RheXMuZm9yRWFjaCgoZGF5LCBpKSA9PiB7XG4gICAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKHdlZWtkYXlzW2ldLCBkYXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgZHJvcGRvd24uc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Mud2Vla1N0YXJ0LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBkcm9wZG93bi5vbkNoYW5nZShhc3luYyAodmFsdWU6IERheU9mV2VlaykgPT4ge1xuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLndlZWtTdGFydCA9IHZhbHVlO1xuICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiTGFuZ3VhZ2Ugc2V0dGluZ3NcIik7XG5cbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJFbmdsaXNoXCIsIFwiZW5nbGlzaFwiLCBcImVuXCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIkphcGFuZXNlXCIsIFwiamFwYW5lc2VcIiwgXCJqYVwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJGcmVuY2hcIiwgXCJmcmVuY2hcIiwgXCJmclwiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJHZXJtYW5cIiwgXCJnZXJtYW5cIiwgXCJkZVwiLCBcInBhcnRpYWxseSBzdXBwb3J0ZWRcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiUG9ydHVndWVzZVwiLCBcInBvcnR1Z3Vlc2VcIiwgXCJwdFwiLCBcInBhcnRpYWxseSBzdXBwb3J0ZWRcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiRHV0Y2hcIiwgXCJkdXRjaFwiLCBcIm5sXCIsIFwidW5kZXIgZGV2ZWxvcG1lbnRcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiU3BhbmlzaFwiLCBcInNwYW5pc2hcIiwgXCJlc1wiKTtcbiAgICB0aGlzLmNyZWF0ZUxhbmd1YWdlU2V0dGluZyhjb250YWluZXJFbCwgXCJJdGFsaWFuXCIsIFwiaXRhbGlhblwiLCBcIml0XCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIlJ1c3NpYW5cIiwgXCJydXNzaWFuXCIsIFwicnVcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiVWtyYWluaWFuXCIsIFwidWtyYWluaWFuXCIsIFwidWtcIik7XG4gICAgdGhpcy5jcmVhdGVMYW5ndWFnZVNldHRpbmcoY29udGFpbmVyRWwsIFwiQ2hpbmVzZSAoVHJhZGl0aW9uYWwpXCIsIFwiY2hpbmVzZVwiLCBcInpoLmhhbnRcIiwgXCJwYXJ0aWFsbHkgc3VwcG9ydGVkXCIpO1xuICAgIHRoaXMuY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsLCBcIktvcmVhblwiLCBcImtvcmVhblwiLCBcImtvXCIsIFwicGFydGlhbGx5IHN1cHBvcnRlZFwiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKS5zZXRIZWFkaW5nKCkuc2V0TmFtZShcIkhvdGtleSBmb3JtYXR0aW5nIHNldHRpbmdzXCIpO1xuXG4gICAgY29uc3QgdGltZUZvcm1hdFNldHRpbmcgPSBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiVGltZSBmb3JtYXRcIilcbiAgICAgIC5zZXREZXNjKFwiRm9ybWF0IGZvciB0aGUgaG90a2V5cyB0aGF0IGluY2x1ZGUgdGhlIGN1cnJlbnQgdGltZVwiKVxuICAgICAgLmFkZE1vbWVudEZvcm1hdCgodGV4dCkgPT5cbiAgICAgICAgdGV4dFxuICAgICAgICAgIC5zZXREZWZhdWx0Rm9ybWF0KFwiSEg6bW1cIilcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdClcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWQgPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh2YWx1ZSB8fCBcIkhIOm1tXCIpO1xuICAgICAgICAgICAgaWYgKHZhbGlkYXRlZC52YWxpZCkge1xuICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0ID0gdmFsdWUgfHwgXCJISDptbVwiO1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgLy8gTWV0dHJlIMOgIGpvdXIgbGEgZGVzY3JpcHRpb24gYXZlYyBsYSBwcsOpdmlzdWFsaXNhdGlvbiAoc2VlXG4gICAgICAgICAgICAgIC8vIHRoZSBkYXRlLWZvcm1hdCBzZXR0aW5nIGFib3ZlOiB0aGUgXCI6ICcnXCIgZmFsbGJhY2sgaGVyZSBpc1xuICAgICAgICAgICAgICAvLyBzaW1pbGFybHkgdW5yZWFjaGFibGUgZ2l2ZW4gdmFsaWRhdGVNb21lbnRGb3JtYXQoKSdzIGNvbnRyYWN0KS5cbiAgICAgICAgICAgICAgdGltZUZvcm1hdFNldHRpbmcuc2V0RGVzYyhgRm9ybWF0IGZvciB0aGUgaG90a2V5cyB0aGF0IGluY2x1ZGUgdGhlIGN1cnJlbnQgdGltZSR7dmFsaWRhdGVkLnByZXZpZXcgPyBgIChQcmV2aWV3OiAke3ZhbGlkYXRlZC5wcmV2aWV3fSlgIDogXCJcIn1gKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEFmZmljaGVyIGwnZXJyZXVyIGRhbnMgbGEgZGVzY3JpcHRpb24gKHVucmVhY2hhYmxlIGZhbGxiYWNrLFxuICAgICAgICAgICAgICAvLyBzYW1lIHJlYXNvbmluZyBhcyB0aGUgZGF0ZS1mb3JtYXQgc2V0dGluZyBhYm92ZSkuXG4gICAgICAgICAgICAgIHRpbWVGb3JtYXRTZXR0aW5nLnNldERlc2MoYEZvcm1hdCBmb3IgdGhlIGhvdGtleXMgdGhhdCBpbmNsdWRlIHRoZSBjdXJyZW50IHRpbWUgLSDimqDvuI8gJHt2YWxpZGF0ZWQuZXJyb3IgfHwgXCJGb3JtYXQgaW52YWxpZGVcIn1gKTtcbiAgICAgICAgICAgICAgLy8gTmUgcGFzIHNhdXZlZ2FyZGVyIGxlIGZvcm1hdCBpbnZhbGlkZSwgcmVzdGF1cmVyIGxlIHByw6ljw6lkZW50XG4gICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gICAgXG4gICAgLy8gQWZmaWNoZXIgbGEgcHLDqXZpc3VhbGlzYXRpb24gaW5pdGlhbGVcbiAgICBjb25zdCBpbml0aWFsVGltZVZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0KTtcbiAgICBpZiAoaW5pdGlhbFRpbWVWYWxpZGF0aW9uLnZhbGlkICYmIGluaXRpYWxUaW1lVmFsaWRhdGlvbi5wcmV2aWV3KSB7XG4gICAgICB0aW1lRm9ybWF0U2V0dGluZy5zZXREZXNjKGBGb3JtYXQgZm9yIHRoZSBob3RrZXlzIHRoYXQgaW5jbHVkZSB0aGUgY3VycmVudCB0aW1lIChQcmV2aWV3OiAke2luaXRpYWxUaW1lVmFsaWRhdGlvbi5wcmV2aWV3fSlgKTtcbiAgICB9XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiU2VwYXJhdG9yXCIpXG4gICAgICAuc2V0RGVzYyhcIlNlcGFyYXRvciBiZXR3ZWVuIGRhdGUgYW5kIHRpbWUgZm9yIGVudHJpZXMgdGhhdCBoYXZlIGJvdGhcIilcbiAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PlxuICAgICAgICB0ZXh0XG4gICAgICAgICAgLnNldFBsYWNlaG9sZGVyKFwiU2VwYXJhdG9yIGlzIGVtcHR5XCIpXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnNlcGFyYXRvcilcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5zZXBhcmF0b3IgPSB2YWx1ZTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpLnNldEhlYWRpbmcoKS5zZXROYW1lKFwiRGF0ZSBhdXRvc3VnZ2VzdFwiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJFbmFibGUgZGF0ZSBhdXRvc3VnZ2VzdFwiKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIGBJbnB1dCBkYXRlcyB3aXRoIG5hdHVyYWwgbGFuZ3VhZ2UuIE9wZW4gdGhlIHN1Z2dlc3QgbWVudSB3aXRoICR7dGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZX1gXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5pc0F1dG9zdWdnZXN0RW5hYmxlZClcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pc0F1dG9zdWdnZXN0RW5hYmxlZCA9IHZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiQWRkIGRhdGVzIGFzIGxpbms/XCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJJZiBlbmFibGVkLCBkYXRlcyBjcmVhdGVkIHZpYSBhdXRvc3VnZ2VzdCB3aWxsIGJlIHdyYXBwZWQgaW4gW1t3aWtpbGlua3NdXVwiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvc3VnZ2VzdFRvZ2dsZUxpbmspXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b3N1Z2dlc3RUb2dnbGVMaW5rID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIGNvbnN0IHRyaWdnZXJQaHJhc2VEZXNjID0gXCJDaGFyYWN0ZXIocykgdGhhdCB3aWxsIGNhdXNlIHRoZSBkYXRlIGF1dG9zdWdnZXN0IHRvIG9wZW5cIjtcbiAgICBjb25zdCB0cmlnZ2VyUGhyYXNlU2V0dGluZyA9IG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJUcmlnZ2VyIHBocmFzZVwiKVxuICAgICAgLnNldERlc2ModHJpZ2dlclBocmFzZURlc2MpXG4gICAgICAuYWRkTW9tZW50Rm9ybWF0KCh0ZXh0KSA9PlxuICAgICAgICB0ZXh0XG4gICAgICAgICAgLnNldFBsYWNlaG9sZGVyKERFRkFVTFRfU0VUVElOR1MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSlcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSB8fCBcIkBcIilcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0cmltbWVkID0gdmFsdWUudHJpbSgpO1xuICAgICAgICAgICAgaWYgKHRyaW1tZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSA9IHRyaW1tZWQ7XG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICB0cmlnZ2VyUGhyYXNlU2V0dGluZy5zZXREZXNjKHRyaWdnZXJQaHJhc2VEZXNjKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEFuIGVtcHR5IHRyaWdnZXIgcGhyYXNlIG1ha2VzIG9uVHJpZ2dlcigpJ3NcbiAgICAgICAgICAgICAgLy8gcXVlcnkuc3RhcnRzV2l0aCh0cmlnZ2VyUGhyYXNlKSBhbHdheXMgdHJ1ZSwgc28gdGhlXG4gICAgICAgICAgICAgIC8vIGF1dG9zdWdnZXN0IHBvcHVwIHdvdWxkIGZpcmUgb24gdmlydHVhbGx5IGV2ZXJ5IGtleXN0cm9rZS5cbiAgICAgICAgICAgICAgLy8gUmVmdXNlIHRvIHNhdmUgaXQsIG1hdGNoaW5nIHRoZSBEYXRlL1RpbWUgZm9ybWF0IGZpZWxkcyBhYm92ZS5cbiAgICAgICAgICAgICAgdHJpZ2dlclBocmFzZVNldHRpbmcuc2V0RGVzYyhgJHt0cmlnZ2VyUGhyYXNlRGVzY30gLSDimqDvuI8gVHJpZ2dlciBwaHJhc2UgY2Fubm90IGJlIGVtcHR5YCk7XG4gICAgICAgICAgICAgIHRleHQuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZSB8fCBcIkBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJTbWFydCBzdWdnZXN0aW9uc1wiKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJFbmFibGUgc21hcnQgc3VnZ2VzdGlvbnNcIilcbiAgICAgIC5zZXREZXNjKFxuICAgICAgICBcIkVuYWJsZSBpbnRlbGxpZ2VudCBzdWdnZXN0aW9ucyBiYXNlZCBvbiB5b3VyIHVzYWdlIGhpc3RvcnkgYW5kIGRvY3VtZW50IGNvbnRleHRcIlxuICAgICAgKVxuICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PlxuICAgICAgICB0b2dnbGVcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlU21hcnRTdWdnZXN0aW9ucylcbiAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVTbWFydFN1Z2dlc3Rpb25zID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJIaXN0b3J5LWJhc2VkIHN1Z2dlc3Rpb25zXCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJMZWFybiBmcm9tIHlvdXIgZnJlcXVlbnRseSB1c2VkIGRhdGUgcGF0dGVybnMgYW5kIHByaW9yaXRpemUgdGhlbSBpbiBzdWdnZXN0aW9uc1wiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVIaXN0b3J5U3VnZ2VzdGlvbnMpXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlSGlzdG9yeVN1Z2dlc3Rpb25zID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJDb250ZXh0LWJhc2VkIHN1Z2dlc3Rpb25zXCIpXG4gICAgICAuc2V0RGVzYyhcbiAgICAgICAgXCJTdWdnZXN0IGRhdGVzIGJhc2VkIG9uIGRhdGVzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgY3VycmVudCBkb2N1bWVudFwiXG4gICAgICApXG4gICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgIHRvZ2dsZVxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVDb250ZXh0U3VnZ2VzdGlvbnMpXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZW5hYmxlQ29udGV4dFN1Z2dlc3Rpb25zID0gdmFsdWU7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgLnNldE5hbWUoXCJNYW5hZ2UgaGlzdG9yeVwiKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIFwiVmlldyB5b3VyIHN1Z2dlc3Rpb24gaGlzdG9yeSBhbmQgcmVtb3ZlIGluZGl2aWR1YWwgZW50cmllcywgb3IgY2xlYXIgaXQgZW50aXJlbHlcIlxuICAgICAgKVxuICAgICAgLmFkZEJ1dHRvbigoYnV0dG9uKSA9PlxuICAgICAgICBidXR0b25cbiAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIk1hbmFnZSBoaXN0b3J5XCIpXG4gICAgICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICAgICAgbmV3IEhpc3RvcnlNYW5hZ2VyTW9kYWwodGhpcy5hcHAsIHRoaXMucGx1Z2luKS5vcGVuKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbCkuc2V0SGVhZGluZygpLnNldE5hbWUoXCJEYXRlIGZvcm1hdHRpbmdcIik7XG5cbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgIC5zZXROYW1lKFwiT21pdCBkYXRlIGZvciBzaG9ydCByZWxhdGl2ZSBleHByZXNzaW9uc1wiKVxuICAgICAgLnNldERlc2MoXG4gICAgICAgIFwiV2hlbiBlbmFibGVkLCBzaG9ydCByZWxhdGl2ZSBleHByZXNzaW9ucyBmb3IgdG9kYXkgKGUuZy4sICdpbiAxNSBtaW4nLCAnZGFucyAyIGhldXJlcycpIHdpbGwgZGlzcGxheSBvbmx5IHRoZSB0aW1lIChlLmcuLCAnMTQ6MzAnKSBpbnN0ZWFkIG9mICdbWzIwMjQtMDEtMTVdXSAxNDozMCdcIlxuICAgICAgKVxuICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PlxuICAgICAgICB0b2dnbGVcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKVxuICAgICAgICAgIC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLm9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZSA9IHZhbHVlO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlTGFuZ3VhZ2VTZXR0aW5nKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgdGV4dDogc3RyaW5nLCBzZXR0aW5nS2V5OiBrZXlvZiBOTERTZXR0aW5ncywgY29kZTogc3RyaW5nLCBub3RlPzogc3RyaW5nKSA6IFNldHRpbmcge1xuICAgIG5vdGUgPSBub3RlID8gYCAoJHtub3RlfSlgIDogXCJcIjtcbiAgICByZXR1cm4gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAuc2V0TmFtZSh0ZXh0KVxuICAgICAgLnNldERlc2MoYFdoZXRoZXIgdG8gcGFyc2UgJHt0ZXh0fSBvciBub3RgICsgbm90ZSlcbiAgICAgIC5hZGRUb2dnbGUobCA9PlxuICAgICAgICBsXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzW3NldHRpbmdLZXldIGFzIGJvb2xlYW4pXG4gICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2KSA9PiB7XG4gICAgICAgICAgICAodGhpcy5wbHVnaW4uc2V0dGluZ3Nbc2V0dGluZ0tleV0gYXMgYm9vbGVhbikgPSB2O1xuICAgICAgICAgICAgdGhpcy5lZGl0TGFuZ3VhZ2VzKGNvZGUsIHYpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZXNldFBhcnNlcigpO1xuICAgICAgICAgIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlZGl0TGFuZ3VhZ2VzKGNvZGU6IHN0cmluZywgZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChlbmFibGVkKSB7XG4gICAgICBpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcy5pbmNsdWRlcyhjb2RlKSkge1xuICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXMucHVzaChjb2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXMuaW5kZXhPZihjb2RlKTtcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSIsImltcG9ydCB7IEFwcCwgTW9kYWwsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGdlbmVyYXRlTWFya2Rvd25MaW5rLCBnZXRMb2NhbGVXZWVrU3RhcnQsIHZhbGlkYXRlTW9tZW50Rm9ybWF0LCBnZXRBY3RpdmVFZGl0b3IgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB0eXBlIE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuLi9tYWluXCI7XG5pbXBvcnQgeyBERUZBVUxUX1NFVFRJTkdTIH0gZnJvbSBcIi4uL3NldHRpbmdzXCI7XG5pbXBvcnQgdCBmcm9tIFwiLi4vbGFuZy9oZWxwZXJcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIi4uL3dpbmRvdy1tb21lbnRcIjtcblxudHlwZSBNb21lbnQgPSBpbXBvcnQoXCJtb21lbnRcIikuTW9tZW50O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRlUGlja2VyTW9kYWwgZXh0ZW5kcyBNb2RhbCB7XG4gIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXM7XG4gIHByaXZhdGUgc2VsZWN0ZWREYXRlOiBNb21lbnQ7XG4gIHByaXZhdGUgY3VycmVudE1vbnRoOiBNb21lbnQ7XG4gIHByaXZhdGUgY2FsZW5kYXJFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBxdWlja0J1dHRvbnNFbDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwcmV2aWV3RWw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZGF0ZUlucHV0RWw6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpc0RhcmtNb2RlOiBib29sZWFuO1xuICBwcml2YXRlIHRoZW1lT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBrZXlib2FyZEhhbmRsZXI6ICgoZTogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZERhdGVGbjogKChkYXRlOiBNb21lbnQpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpIHtcbiAgICBzdXBlcihhcHApO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbW9tZW50KCk7XG4gICAgdGhpcy5jdXJyZW50TW9udGggPSBtb21lbnQoKTtcbiAgICAvLyBEw6l0ZWN0ZXIgbGUgbW9kZSBzb21icmVcbiAgICB0aGlzLmlzRGFya01vZGUgPSBhY3RpdmVEb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInRoZW1lLWRhcmtcIik7XG4gIH1cblxuICBvbk9wZW4oKTogdm9pZCB7XG4gICAgY29uc3QgeyBjb250ZW50RWwgfSA9IHRoaXM7XG4gICAgY29udGVudEVsLmVtcHR5KCk7XG4gICAgY29udGVudEVsLmFkZENsYXNzKFwibmxkLWRhdGUtcGlja2VyLW1vZGFsXCIpO1xuXG4gICAgLy8gQWpvdXRlciBsZXMgc3R5bGVzIHBvdXIgbGUgbW9kZSBzb21icmVcbiAgICBpZiAodGhpcy5pc0RhcmtNb2RlKSB7XG4gICAgICBjb250ZW50RWwuYWRkQ2xhc3MoXCJubGQtZGFyay1tb2RlXCIpO1xuICAgIH1cblxuICAgIGxldCBtb21lbnRGb3JtYXQgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5tb2RhbE1vbWVudEZvcm1hdDtcbiAgICBsZXQgaW5zZXJ0QXNMaW5rID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxUb2dnbGVMaW5rO1xuICAgIGxldCBkYXRlSW5wdXQgPSBcIlwiO1xuXG4gICAgY29uc3QgZ2V0RGF0ZVN0ciA9ICgpID0+IHtcbiAgICAgIGxldCBjbGVhbkRhdGVJbnB1dCA9IGRhdGVJbnB1dDtcbiAgICAgIGxldCBzaG91bGRJbmNsdWRlQWxpYXMgPSBmYWxzZTtcblxuICAgICAgaWYgKGRhdGVJbnB1dC5lbmRzV2l0aChcInxcIikpIHtcbiAgICAgICAgc2hvdWxkSW5jbHVkZUFsaWFzID0gdHJ1ZTtcbiAgICAgICAgY2xlYW5EYXRlSW5wdXQgPSBkYXRlSW5wdXQuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuXG4gICAgICAvLyBVdGlsaXNlciBsYSBkYXRlIHPDqWxlY3Rpb25uw6llIGRhbnMgbGUgY2FsZW5kcmllciBzaSBkaXNwb25pYmxlXG4gICAgICBjb25zdCBkYXRlVG9QYXJzZSA9IGNsZWFuRGF0ZUlucHV0IHx8IHRoaXMuc2VsZWN0ZWREYXRlLmZvcm1hdChcIllZWVktTU0tRERcIik7XG4gICAgICBjb25zdCBwYXJzZWREYXRlID0gdGhpcy5wbHVnaW4ucGFyc2VEYXRlKGRhdGVUb1BhcnNlKTtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgYXZhbnQgdXRpbGlzYXRpb25cbiAgICAgIGNvbnN0IGZvcm1hdFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdChtb21lbnRGb3JtYXQpO1xuICAgICAgY29uc3QgZm9ybWF0VG9Vc2UgPSBmb3JtYXRWYWxpZGF0aW9uLnZhbGlkID8gbW9tZW50Rm9ybWF0IDogREVGQVVMVF9TRVRUSU5HUy5tb2RhbE1vbWVudEZvcm1hdDtcbiAgICAgIFxuICAgICAgbGV0IHBhcnNlZERhdGVTdHJpbmcgPSBwYXJzZWREYXRlLm1vbWVudC5pc1ZhbGlkKClcbiAgICAgICAgPyBwYXJzZWREYXRlLm1vbWVudC5mb3JtYXQoZm9ybWF0VG9Vc2UpXG4gICAgICAgIDogXCJcIjtcblxuICAgICAgaWYgKGluc2VydEFzTGluaykge1xuICAgICAgICBwYXJzZWREYXRlU3RyaW5nID0gZ2VuZXJhdGVNYXJrZG93bkxpbmsoXG4gICAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgICAgcGFyc2VkRGF0ZVN0cmluZyxcbiAgICAgICAgICBzaG91bGRJbmNsdWRlQWxpYXMgPyBjbGVhbkRhdGVJbnB1dCA6IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VkRGF0ZVN0cmluZztcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlUHJldmlldyA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnByZXZpZXdFbCkge1xuICAgICAgICB0aGlzLnByZXZpZXdFbC5zZXRUZXh0KGdldERhdGVTdHIoKSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHN5bmNJbnB1dCBjb250cm9scyB3aGV0aGVyIHRoZSByYXcgdGV4dCBmaWVsZCBnZXRzIG92ZXJ3cml0dGVuIHdpdGhcbiAgICAvLyB0aGUgZm9ybWF0dGVkIGRhdGUuIENhbGVuZGFyIGNsaWNrcy9xdWljayBidXR0b25zL2tleWJvYXJkIG5hdiB3YW50XG4gICAgLy8gdGhhdCAoaXQncyBob3cgdGhlIGZpZWxkIHJlZmxlY3RzIHRoZSBzZWxlY3Rpb24pLCBidXQgdGhlIGZpZWxkJ3Mgb3duXG4gICAgLy8gb25DaGFuZ2UgaGFuZGxlciBtdXN0IE5PVCBzeW5jIGl0c2VsZiB3aGlsZSB0aGUgdXNlciBpcyBzdGlsbCB0eXBpbmdcbiAgICAvLyBpbnRvIGl0IC0tIGdldERhdGVTdHIoKS91cGRhdGVQcmV2aWV3KCkgYWxyZWFkeSBzaG93IGEgbGl2ZSBwcmV2aWV3XG4gICAgLy8gb2YgdGhlIHBhcnNlZCByZXN1bHQgc2VwYXJhdGVseSwgd2l0aG91dCB0b3VjaGluZyB3aGF0J3MgYmVpbmcgdHlwZWQuXG4gICAgY29uc3QgdXBkYXRlU2VsZWN0ZWREYXRlID0gKGRhdGU6IE1vbWVudCwgc3luY0lucHV0ID0gdHJ1ZSkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBkYXRlLmNsb25lKCk7XG4gICAgICBpZiAoc3luY0lucHV0ICYmIHRoaXMuZGF0ZUlucHV0RWwpIHtcbiAgICAgICAgdGhpcy5kYXRlSW5wdXRFbC52YWx1ZSA9IGRhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZVByZXZpZXcoKTtcbiAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICB9O1xuXG4gICAgLy8gU3RvY2tlciBsYSBmb25jdGlvbiBwb3VyIHF1J2VsbGUgc29pdCBhY2Nlc3NpYmxlIGRlcHVpcyByZW5kZXJDYWxlbmRhclxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlRm4gPSB1cGRhdGVTZWxlY3RlZERhdGU7XG5cbiAgICAvLyBDb250YWluZXIgcHJpbmNpcGFsXG4gICAgY29uc3QgY29udGFpbmVyID0gY29udGVudEVsLmNyZWF0ZURpdihcIm5sZC1kYXRlLXBpY2tlci1jb250YWluZXJcIik7XG5cbiAgICAvLyBTZWN0aW9uIGRlcyBib3V0b25zIHJhcGlkZXNcbiAgICB0aGlzLnF1aWNrQnV0dG9uc0VsID0gY29udGFpbmVyLmNyZWF0ZURpdihcIm5sZC1xdWljay1idXR0b25zXCIpO1xuICAgIHRoaXMucmVuZGVyUXVpY2tCdXR0b25zKHVwZGF0ZVNlbGVjdGVkRGF0ZSk7XG5cbiAgICAvLyBTZWN0aW9uIGR1IGNhbGVuZHJpZXJcbiAgICBjb25zdCBjYWxlbmRhclNlY3Rpb24gPSBjb250YWluZXIuY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLXNlY3Rpb25cIik7XG4gICAgXG4gICAgLy8gTmF2aWdhdGlvbiBkdSBjYWxlbmRyaWVyXG4gICAgY29uc3QgbmF2RWwgPSBjYWxlbmRhclNlY3Rpb24uY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLW5hdlwiKTtcbiAgICBjb25zdCBwcmV2TW9udGhCdG4gPSBuYXZFbC5jcmVhdGVFbChcImJ1dHRvblwiLCB7XG4gICAgICBjbHM6IFwibmxkLW5hdi1idG5cIixcbiAgICAgIHRleHQ6IFwi4oC5XCIsXG4gICAgICBhdHRyOiB7IFwiYXJpYS1sYWJlbFwiOiBcIk1vaXMgcHLDqWPDqWRlbnRcIiB9XG4gICAgfSk7XG4gICAgXG4gICAgY29uc3QgbW9udGhZZWFyRWwgPSBuYXZFbC5jcmVhdGVEaXYoXCJubGQtbW9udGgteWVhclwiKTtcbiAgICBcbiAgICBjb25zdCBuZXh0TW9udGhCdG4gPSBuYXZFbC5jcmVhdGVFbChcImJ1dHRvblwiLCB7XG4gICAgICBjbHM6IFwibmxkLW5hdi1idG5cIixcbiAgICAgIHRleHQ6IFwi4oC6XCIsXG4gICAgICBhdHRyOiB7IFwiYXJpYS1sYWJlbFwiOiBcIk1vaXMgc3VpdmFudFwiIH1cbiAgICB9KTtcblxuICAgIHByZXZNb250aEJ0bi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50TW9udGguc3VidHJhY3QoMSwgXCJtb250aFwiKTtcbiAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICAgIHRoaXMudXBkYXRlTW9udGhZZWFyRGlzcGxheShtb250aFllYXJFbCk7XG4gICAgfSk7XG5cbiAgICBuZXh0TW9udGhCdG4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoLmFkZCgxLCBcIm1vbnRoXCIpO1xuICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgdGhpcy51cGRhdGVNb250aFllYXJEaXNwbGF5KG1vbnRoWWVhckVsKTtcbiAgICB9KTtcblxuICAgIC8vIFPDqWxlY3RldXIgZCdhbm7DqWUgKGRyb3Bkb3duKVxuICAgIGNvbnN0IHllYXJTZWxlY3QgPSBuYXZFbC5jcmVhdGVFbChcInNlbGVjdFwiLCB7IGNsczogXCJubGQteWVhci1zZWxlY3RcIiB9KTtcbiAgICBjb25zdCBjdXJyZW50WWVhciA9IHRoaXMuY3VycmVudE1vbnRoLnllYXIoKTtcbiAgICBmb3IgKGxldCB5ZWFyID0gY3VycmVudFllYXIgLSAxMDsgeWVhciA8PSBjdXJyZW50WWVhciArIDEwOyB5ZWFyKyspIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHllYXJTZWxlY3QuY3JlYXRlRWwoXCJvcHRpb25cIiwgeyB0ZXh0OiBTdHJpbmcoeWVhciksIHZhbHVlOiBTdHJpbmcoeWVhcikgfSk7XG4gICAgICBpZiAoeWVhciA9PT0gY3VycmVudFllYXIpIHtcbiAgICAgICAgb3B0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgeWVhclNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIChlKSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudDtcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoLnllYXIocGFyc2VJbnQodGFyZ2V0LnZhbHVlKSk7XG4gICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICB0aGlzLnVwZGF0ZU1vbnRoWWVhckRpc3BsYXkobW9udGhZZWFyRWwpO1xuICAgIH0pO1xuXG4gICAgLy8gU8OpbGVjdGV1ciBkZSBtb2lzIChkcm9wZG93bilcbiAgICBjb25zdCBtb250aFNlbGVjdCA9IG5hdkVsLmNyZWF0ZUVsKFwic2VsZWN0XCIsIHsgY2xzOiBcIm5sZC1tb250aC1zZWxlY3RcIiB9KTtcbiAgICBjb25zdCBtb250aE5hbWVzID0gbW9tZW50Lm1vbnRocygpO1xuICAgIG1vbnRoTmFtZXMuZm9yRWFjaCgobW9udGgsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBvcHRpb24gPSBtb250aFNlbGVjdC5jcmVhdGVFbChcIm9wdGlvblwiLCB7IHRleHQ6IG1vbnRoLCB2YWx1ZTogU3RyaW5nKGluZGV4KSB9KTtcbiAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5jdXJyZW50TW9udGgubW9udGgoKSkge1xuICAgICAgICBvcHRpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIG1vbnRoU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgKGUpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xuICAgICAgdGhpcy5jdXJyZW50TW9udGgubW9udGgocGFyc2VJbnQodGFyZ2V0LnZhbHVlKSk7XG4gICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICB0aGlzLnVwZGF0ZU1vbnRoWWVhckRpc3BsYXkobW9udGhZZWFyRWwpO1xuICAgIH0pO1xuXG4gICAgdGhpcy51cGRhdGVNb250aFllYXJEaXNwbGF5KG1vbnRoWWVhckVsKTtcblxuICAgIC8vIENhbGVuZHJpZXJcbiAgICB0aGlzLmNhbGVuZGFyRWwgPSBjYWxlbmRhclNlY3Rpb24uY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyXCIpO1xuICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcblxuICAgIC8vIFNlY3Rpb24gZGUgc2Fpc2llIG1hbnVlbGxlXG4gICAgY29uc3QgaW5wdXRTZWN0aW9uID0gY29udGFpbmVyLmNyZWF0ZURpdihcIm5sZC1pbnB1dC1zZWN0aW9uXCIpO1xuICAgIGNvbnN0IGRhdGVJbnB1dEVsID0gbmV3IFNldHRpbmcoaW5wdXRTZWN0aW9uKVxuICAgICAgLnNldE5hbWUoXCJEYXRlXCIpXG4gICAgICAuc2V0RGVzYyhcIlwiKVxuICAgICAgLmFkZFRleHQoKHRleHRFbCkgPT4ge1xuICAgICAgICB0ZXh0RWwuc2V0UGxhY2Vob2xkZXIoXCJUb2RheVwiKTtcbiAgICAgICAgdGV4dEVsLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWREYXRlLmZvcm1hdChcIllZWVktTU0tRERcIikpO1xuICAgICAgICB0aGlzLmRhdGVJbnB1dEVsID0gdGV4dEVsLmlucHV0RWw7XG5cbiAgICAgICAgdGV4dEVsLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGRhdGVJbnB1dCA9IHZhbHVlO1xuICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gdGhpcy5wbHVnaW4ucGFyc2VEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChwYXJzZWQubW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICB1cGRhdGVTZWxlY3RlZERhdGUocGFyc2VkLm1vbWVudCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB1cGRhdGVQcmV2aWV3KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRleHRFbC5pbnB1dEVsLmZvY3VzKCksIDEwKTtcbiAgICAgIH0pO1xuICAgIHRoaXMucHJldmlld0VsID0gZGF0ZUlucHV0RWwuZGVzY0VsO1xuICAgIHVwZGF0ZVByZXZpZXcoKTtcblxuICAgIC8vIE9wdGlvbnMgZGUgZm9ybWF0XG4gICAgY29uc3QgZm9ybWF0U2V0dGluZyA9IG5ldyBTZXR0aW5nKGlucHV0U2VjdGlvbilcbiAgICAgIC5zZXROYW1lKFwiRGF0ZSBmb3JtYXRcIilcbiAgICAgIC5zZXREZXNjKFwiTW9tZW50IGZvcm1hdCB0byBiZSB1c2VkXCIpXG4gICAgICAuYWRkTW9tZW50Rm9ybWF0KChtb21lbnRFbCkgPT4ge1xuICAgICAgICBtb21lbnRFbC5zZXRQbGFjZWhvbGRlcihcIllZWVktTU0tREQgSEg6bW1cIik7XG4gICAgICAgIG1vbWVudEVsLnNldFZhbHVlKG1vbWVudEZvcm1hdCk7XG4gICAgICAgIG1vbWVudEVsLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZCA9IHZhbGlkYXRlTW9tZW50Rm9ybWF0KHZhbHVlLnRyaW0oKSB8fCBcIllZWVktTU0tREQgSEg6bW1cIik7XG4gICAgICAgICAgaWYgKHZhbGlkYXRlZC52YWxpZCkge1xuICAgICAgICAgICAgbW9tZW50Rm9ybWF0ID0gdmFsdWUudHJpbSgpIHx8IFwiWVlZWS1NTS1ERCBISDptbVwiO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxNb21lbnRGb3JtYXQgPSBtb21lbnRGb3JtYXQ7XG4gICAgICAgICAgICB2b2lkIHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgdXBkYXRlUHJldmlldygpO1xuICAgICAgICAgICAgLy8gTWV0dHJlIMOgIGpvdXIgbGEgZGVzY3JpcHRpb24gYXZlYyBsYSBwcsOpdmlzdWFsaXNhdGlvblxuICAgICAgICAgICAgZm9ybWF0U2V0dGluZy5zZXREZXNjKGBNb21lbnQgZm9ybWF0IHRvIGJlIHVzZWQke3ZhbGlkYXRlZC5wcmV2aWV3ID8gYCAoUHJldmlldzogJHt2YWxpZGF0ZWQucHJldmlld30pYCA6IFwiXCJ9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFmZmljaGVyIGwnZXJyZXVyIGRhbnMgbGEgZGVzY3JpcHRpb25cbiAgICAgICAgICAgIGZvcm1hdFNldHRpbmcuc2V0RGVzYyhgTW9tZW50IGZvcm1hdCB0byBiZSB1c2VkIC0g4pqg77iPICR7dmFsaWRhdGVkLmVycm9yIHx8IFwiRm9ybWF0IGludmFsaWRlXCJ9YCk7XG4gICAgICAgICAgICAvLyBOZSBwYXMgc2F1dmVnYXJkZXIgbGUgZm9ybWF0IGludmFsaWRlLCByZXN0YXVyZXIgbGUgcHLDqWPDqWRlbnRcbiAgICAgICAgICAgIG1vbWVudEVsLnNldFZhbHVlKG1vbWVudEZvcm1hdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIFxuICAgIC8vIEFmZmljaGVyIGxhIHByw6l2aXN1YWxpc2F0aW9uIGluaXRpYWxlXG4gICAgY29uc3QgaW5pdGlhbFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdChtb21lbnRGb3JtYXQpO1xuICAgIGlmIChpbml0aWFsVmFsaWRhdGlvbi52YWxpZCAmJiBpbml0aWFsVmFsaWRhdGlvbi5wcmV2aWV3KSB7XG4gICAgICBmb3JtYXRTZXR0aW5nLnNldERlc2MoYE1vbWVudCBmb3JtYXQgdG8gYmUgdXNlZCAoUHJldmlldzogJHtpbml0aWFsVmFsaWRhdGlvbi5wcmV2aWV3fSlgKTtcbiAgICB9XG5cbiAgICBuZXcgU2V0dGluZyhpbnB1dFNlY3Rpb24pXG4gICAgICAuc2V0TmFtZShcIkFkZCBhcyBsaW5rP1wiKVxuICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlRWwpID0+IHtcbiAgICAgICAgdG9nZ2xlRWwuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubW9kYWxUb2dnbGVMaW5rKS5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICBpbnNlcnRBc0xpbmsgPSB2YWx1ZTtcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5tb2RhbFRvZ2dsZUxpbmsgPSBpbnNlcnRBc0xpbms7XG4gICAgICAgICAgdm9pZCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICB1cGRhdGVQcmV2aWV3KCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAvLyBCb3V0b25zIGQnYWN0aW9uXG4gICAgaW5wdXRTZWN0aW9uLmNyZWF0ZURpdihcIm1vZGFsLWJ1dHRvbi1jb250YWluZXJcIiwgKGJ1dHRvbkNvbnRhaW5lckVsKSA9PiB7XG4gICAgICBidXR0b25Db250YWluZXJFbFxuICAgICAgICAuY3JlYXRlRWwoXCJidXR0b25cIiwgeyBhdHRyOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSwgdGV4dDogXCJOZXZlciBtaW5kXCIgfSlcbiAgICAgICAgLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB0aGlzLmNsb3NlKCkpO1xuICAgICAgYnV0dG9uQ29udGFpbmVyRWwuY3JlYXRlRWwoXCJidXR0b25cIiwge1xuICAgICAgICBhdHRyOiB7IHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgY2xzOiBcIm1vZC1jdGFcIixcbiAgICAgICAgdGV4dDogXCJJbnNlcnQgZGF0ZVwiLFxuICAgICAgfSkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgdGhpcy5pbnNlcnREYXRlKGdldERhdGVTdHIoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFJhY2NvdXJjaXMgY2xhdmllclxuICAgIHRoaXMua2V5Ym9hcmRIYW5kbGVyID0gdGhpcy5jcmVhdGVLZXlib2FyZEhhbmRsZXIocHJldk1vbnRoQnRuLCBuZXh0TW9udGhCdG4sIHVwZGF0ZVNlbGVjdGVkRGF0ZSk7XG4gICAgdGhpcy5jb250ZW50RWwuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5rZXlib2FyZEhhbmRsZXIpO1xuXG4gICAgLy8gT2JzZXJ2ZXIgbGVzIGNoYW5nZW1lbnRzIGRlIHRow6htZVxuICAgIHRoaXMuc2V0dXBUaGVtZU9ic2VydmVyKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclF1aWNrQnV0dG9ucyh1cGRhdGVTZWxlY3RlZERhdGU6IChkYXRlOiBNb21lbnQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucXVpY2tCdXR0b25zRWwpIHJldHVybjtcblxuICAgIHRoaXMucXVpY2tCdXR0b25zRWwuZW1wdHkoKTtcbiAgICB0aGlzLnF1aWNrQnV0dG9uc0VsLmNyZWF0ZURpdih7IGNsczogXCJubGQtcXVpY2stYnV0dG9ucy1sYWJlbFwiLCB0ZXh0OiBcIlF1aWNrIHNlbGVjdDpcIiB9KTtcblxuICAgIGNvbnN0IHByaW1hcnlMYW5nID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzWzBdIHx8IFwiZW5cIjtcbiAgICBcbiAgICAvLyBGb25jdGlvbiBoZWxwZXIgcG91ciBvYnRlbmlyIGxhIHByZW1pw6hyZSB2YXJpYW50ZSBkJ3VuZSB0cmFkdWN0aW9uXG4gICAgY29uc3QgZ2V0Rmlyc3RWYXJpYW50ID0gKGtleTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gdChrZXksIHByaW1hcnlMYW5nKTtcbiAgICAgIGlmICh0cmFuc2xhdGlvbiA9PT0gXCJOT1RGT1VORFwiKSB7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgICB9XG4gICAgICAvLyBQcmVuZHJlIGxhIHByZW1pw6hyZSB2YXJpYW50ZSBzaSBwbHVzaWV1cnMgKHPDqXBhcsOpZXMgcGFyIHwpXG4gICAgICByZXR1cm4gdHJhbnNsYXRpb24uc3BsaXQoXCJ8XCIpWzBdLnRyaW0oKTtcbiAgICB9O1xuXG4gICAgY29uc3QgcXVpY2tPcHRpb25zID0gW1xuICAgICAgeyBcbiAgICAgICAgbGFiZWw6IGdldEZpcnN0VmFyaWFudChcInRvZGF5XCIpLCBcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKSBcbiAgICAgIH0sXG4gICAgICB7IFxuICAgICAgICBsYWJlbDogZ2V0Rmlyc3RWYXJpYW50KFwidG9tb3Jyb3dcIiksIFxuICAgICAgICBtb21lbnQ6IG1vbWVudCgpLmFkZCgxLCBcImRheVwiKSBcbiAgICAgIH0sXG4gICAgICB7IFxuICAgICAgICBsYWJlbDogZ2V0Rmlyc3RWYXJpYW50KFwieWVzdGVyZGF5XCIpLCBcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKS5zdWJ0cmFjdCgxLCBcImRheVwiKSBcbiAgICAgIH0sXG4gICAgICB7IFxuICAgICAgICBsYWJlbDogYCR7Z2V0Rmlyc3RWYXJpYW50KFwibmV4dFwiKX0gJHtnZXRGaXJzdFZhcmlhbnQoXCJ3ZWVrXCIpfWAsIFxuICAgICAgICBtb21lbnQ6IG1vbWVudCgpLmFkZCgxLCBcIndlZWtcIikgXG4gICAgICB9LFxuICAgICAgeyBcbiAgICAgICAgbGFiZWw6IGAke2dldEZpcnN0VmFyaWFudChcIm5leHRcIil9ICR7Z2V0Rmlyc3RWYXJpYW50KFwibW9udGhcIil9YCwgXG4gICAgICAgIG1vbWVudDogbW9tZW50KCkuYWRkKDEsIFwibW9udGhcIikgXG4gICAgICB9LFxuICAgICAgeyBcbiAgICAgICAgbGFiZWw6IGAke2dldEZpcnN0VmFyaWFudChcIm5leHRcIil9ICR7Z2V0Rmlyc3RWYXJpYW50KFwieWVhclwiKX1gLCBcbiAgICAgICAgbW9tZW50OiBtb21lbnQoKS5hZGQoMSwgXCJ5ZWFyXCIpIFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgY29uc3QgYnV0dG9uc0NvbnRhaW5lciA9IHRoaXMucXVpY2tCdXR0b25zRWwuY3JlYXRlRGl2KFwibmxkLXF1aWNrLWJ1dHRvbnMtZ3JpZFwiKTtcblxuICAgIHF1aWNrT3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGJ1dHRvbiA9IGJ1dHRvbnNDb250YWluZXIuY3JlYXRlRWwoXCJidXR0b25cIiwge1xuICAgICAgICBjbHM6IFwibmxkLXF1aWNrLWJ0blwiLFxuICAgICAgICB0ZXh0OiBvcHRpb24ubGFiZWwsXG4gICAgICB9KTtcblxuICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIHVwZGF0ZVNlbGVjdGVkRGF0ZShvcHRpb24ubW9tZW50KTtcbiAgICAgICAgdGhpcy5jdXJyZW50TW9udGggPSBvcHRpb24ubW9tZW50LmNsb25lKCk7XG4gICAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJDYWxlbmRhcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FsZW5kYXJFbCkgcmV0dXJuO1xuXG4gICAgdGhpcy5jYWxlbmRhckVsLmVtcHR5KCk7XG5cbiAgICAvLyBFbi10w6p0ZXMgZGVzIGpvdXJzIGRlIGxhIHNlbWFpbmVcbiAgICBjb25zdCB3ZWVrU3RhcnQgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy53ZWVrU3RhcnQgPT09IFwibG9jYWxlLWRlZmF1bHRcIlxuICAgICAgPyBnZXRMb2NhbGVXZWVrU3RhcnQoKVxuICAgICAgOiB0aGlzLnBsdWdpbi5zZXR0aW5ncy53ZWVrU3RhcnQ7XG4gICAgXG4gICAgY29uc3Qgd2Vla1N0YXJ0SW5kZXggPSB3ZWVrU3RhcnQgPT09IFwic3VuZGF5XCIgPyAwIDogMTtcbiAgICBjb25zdCB3ZWVrZGF5cyA9IG1vbWVudC53ZWVrZGF5c1Nob3J0KCk7XG4gICAgY29uc3Qgb3JkZXJlZFdlZWtkYXlzID0gW1xuICAgICAgLi4ud2Vla2RheXMuc2xpY2Uod2Vla1N0YXJ0SW5kZXgpLFxuICAgICAgLi4ud2Vla2RheXMuc2xpY2UoMCwgd2Vla1N0YXJ0SW5kZXgpLFxuICAgIF07XG5cbiAgICBjb25zdCBoZWFkZXJSb3cgPSB0aGlzLmNhbGVuZGFyRWwuY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLWhlYWRlclwiKTtcbiAgICBvcmRlcmVkV2Vla2RheXMuZm9yRWFjaCgoZGF5KSA9PiB7XG4gICAgICBjb25zdCBkYXlIZWFkZXIgPSBoZWFkZXJSb3cuY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLWRheS1oZWFkZXJcIik7XG4gICAgICBkYXlIZWFkZXIuc2V0VGV4dChkYXkpO1xuICAgIH0pO1xuXG4gICAgLy8gR3JpbGxlIGR1IGNhbGVuZHJpZXJcbiAgICBjb25zdCBncmlkID0gdGhpcy5jYWxlbmRhckVsLmNyZWF0ZURpdihcIm5sZC1jYWxlbmRhci1ncmlkXCIpO1xuXG4gICAgY29uc3Qgc3RhcnRPZk1vbnRoID0gdGhpcy5jdXJyZW50TW9udGguY2xvbmUoKS5zdGFydE9mKFwibW9udGhcIik7XG4gICAgY29uc3QgZW5kT2ZNb250aCA9IHRoaXMuY3VycmVudE1vbnRoLmNsb25lKCkuZW5kT2YoXCJtb250aFwiKTtcbiAgICBcbiAgICAvLyBDYWxjdWxlciBsZSBkw6lidXQgZGUgbGEgc2VtYWluZSBzZWxvbiBsZXMgcHLDqWbDqXJlbmNlc1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHN0YXJ0T2ZNb250aC5jbG9uZSgpO1xuICAgIGNvbnN0IGRheU9mV2VlayA9IHN0YXJ0RGF0ZS5kYXkoKTtcbiAgICBjb25zdCBkaWZmID0gZGF5T2ZXZWVrIC0gd2Vla1N0YXJ0SW5kZXg7XG4gICAgaWYgKGRpZmYgPCAwKSB7XG4gICAgICBzdGFydERhdGUuc3VidHJhY3QoNyArIGRpZmYsIFwiZGF5c1wiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnREYXRlLnN1YnRyYWN0KGRpZmYsIFwiZGF5c1wiKTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2FsY3VsZXIgbGEgZmluIGRlIGxhIHNlbWFpbmVcbiAgICBjb25zdCBlbmREYXRlID0gZW5kT2ZNb250aC5jbG9uZSgpO1xuICAgIGNvbnN0IGVuZERheU9mV2VlayA9IGVuZERhdGUuZGF5KCk7XG4gICAgY29uc3QgZW5kRGlmZiA9ICg2ICsgd2Vla1N0YXJ0SW5kZXggLSBlbmREYXlPZldlZWspICUgNztcbiAgICBpZiAoZW5kRGlmZiA+IDApIHtcbiAgICAgIGVuZERhdGUuYWRkKGVuZERpZmYsIFwiZGF5c1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCB0b2RheSA9IG1vbWVudCgpO1xuICAgIGNvbnN0IGN1cnJlbnREYXRlID0gc3RhcnREYXRlLmNsb25lKCk7XG5cbiAgICB3aGlsZSAoY3VycmVudERhdGUuaXNTYW1lT3JCZWZvcmUoZW5kRGF0ZSwgXCJkYXlcIikpIHtcbiAgICAgIC8vIENhcHR1cmVyIGxhIGRhdGUgYWN0dWVsbGUgZGFucyB1bmUgdmFyaWFibGUgbG9jYWxlIHBvdXIgw6l2aXRlciBsZXMgcHJvYmzDqG1lcyBkZSBjbG9zdXJlXG4gICAgICBjb25zdCBkYXRlRm9yVGhpc0RheSA9IGN1cnJlbnREYXRlLmNsb25lKCk7XG4gICAgICBjb25zdCBkYXlFbCA9IGdyaWQuY3JlYXRlRGl2KFwibmxkLWNhbGVuZGFyLWRheVwiKTtcbiAgICAgIGNvbnN0IGRheU51bWJlciA9IGRhdGVGb3JUaGlzRGF5LmRhdGUoKTtcblxuICAgICAgLy8gU3R5bGUgc2Vsb24gbGUgdHlwZSBkZSBqb3VyXG4gICAgICBpZiAoZGF0ZUZvclRoaXNEYXkuaXNTYW1lKHRvZGF5LCBcImRheVwiKSkge1xuICAgICAgICBkYXlFbC5hZGRDbGFzcyhcIm5sZC10b2RheVwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRlRm9yVGhpc0RheS5pc1NhbWUodGhpcy5zZWxlY3RlZERhdGUsIFwiZGF5XCIpKSB7XG4gICAgICAgIGRheUVsLmFkZENsYXNzKFwibmxkLXNlbGVjdGVkXCIpO1xuICAgICAgfVxuICAgICAgaWYgKCFkYXRlRm9yVGhpc0RheS5pc1NhbWUodGhpcy5jdXJyZW50TW9udGgsIFwibW9udGhcIikpIHtcbiAgICAgICAgZGF5RWwuYWRkQ2xhc3MoXCJubGQtb3RoZXItbW9udGhcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRheU51bWJlckVsID0gZGF5RWwuY3JlYXRlRGl2KFwibmxkLWRheS1udW1iZXJcIik7XG4gICAgICBkYXlOdW1iZXJFbC5zZXRUZXh0KFN0cmluZyhkYXlOdW1iZXIpKTtcblxuICAgICAgLy8gw4l2w6luZW1lbnQgZGUgY2xpY1xuICAgICAgZGF5RWwuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlRm4pIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZUZuKGRhdGVGb3JUaGlzRGF5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGN1cnJlbnREYXRlLmFkZCgxLCBcImRheVwiKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vbnRoWWVhckRpc3BsYXkobW9udGhZZWFyRWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgbW9udGhZZWFyRWwuZW1wdHkoKTtcbiAgICBjb25zdCBtb250aE5hbWUgPSB0aGlzLmN1cnJlbnRNb250aC5mb3JtYXQoXCJNTU1NXCIpO1xuICAgIGNvbnN0IHllYXIgPSB0aGlzLmN1cnJlbnRNb250aC5mb3JtYXQoXCJZWVlZXCIpO1xuICAgIGNvbnN0IG1vbnRoU3BhbiA9IG1vbnRoWWVhckVsLmNyZWF0ZVNwYW4oKTtcbiAgICBtb250aFNwYW4uc2V0VGV4dChtb250aE5hbWUpO1xuICAgIGNvbnN0IHNwYWNlU3BhbiA9IG1vbnRoWWVhckVsLmNyZWF0ZVNwYW4oKTtcbiAgICBzcGFjZVNwYW4uc2V0VGV4dChcIiBcIik7XG4gICAgY29uc3QgeWVhclNwYW4gPSBtb250aFllYXJFbC5jcmVhdGVTcGFuKCk7XG4gICAgeWVhclNwYW4uc2V0VGV4dCh5ZWFyKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlS2V5Ym9hcmRIYW5kbGVyKFxuICAgIHByZXZNb250aEJ0bjogSFRNTEVsZW1lbnQsXG4gICAgbmV4dE1vbnRoQnRuOiBIVE1MRWxlbWVudCxcbiAgICB1cGRhdGVTZWxlY3RlZERhdGU6IChkYXRlOiBNb21lbnQpID0+IHZvaWRcbiAgKTogKGU6IEtleWJvYXJkRXZlbnQpID0+IHZvaWQge1xuICAgIHJldHVybiAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgLy8gw4l2aXRlciBsZXMgcmFjY291cmNpcyBzaSBvbiBlc3QgZGFucyB1biBpbnB1dFxuICAgICAgaWYgKGUudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCB8fCBlLnRhcmdldCBpbnN0YW5jZW9mIEhUTUxTZWxlY3RFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChlLmtleSkge1xuICAgICAgICBjYXNlIFwiQXJyb3dMZWZ0XCI6XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHByZXZNb250aEJ0bi5jbGljaygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQXJyb3dSaWdodFwiOlxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBuZXh0TW9udGhCdG4uY2xpY2soKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkFycm93VXBcIjpcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGguc3VidHJhY3QoMSwgXCJtb250aFwiKTtcbiAgICAgICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJBcnJvd0Rvd25cIjpcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50TW9udGguYWRkKDEsIFwibW9udGhcIik7XG4gICAgICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiSG9tZVwiOlxuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICB1cGRhdGVTZWxlY3RlZERhdGUobW9tZW50KCkpO1xuICAgICAgICAgIHRoaXMuY3VycmVudE1vbnRoID0gbW9tZW50KCk7XG4gICAgICAgICAgdGhpcy5yZW5kZXJDYWxlbmRhcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRXNjYXBlXCI6XG4gICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFRoZW1lT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgLy8gT2JzZXJ2ZXIgbGVzIGNoYW5nZW1lbnRzIGRlIGNsYXNzZSBwb3VyIGTDqXRlY3RlciBsZSBjaGFuZ2VtZW50IGRlIHRow6htZVxuICAgIHRoaXMudGhlbWVPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICAgIGNvbnN0IHdhc0RhcmtNb2RlID0gdGhpcy5pc0RhcmtNb2RlO1xuICAgICAgdGhpcy5pc0RhcmtNb2RlID0gYWN0aXZlRG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJ0aGVtZS1kYXJrXCIpO1xuXG4gICAgICBpZiAod2FzRGFya01vZGUgIT09IHRoaXMuaXNEYXJrTW9kZSAmJiB0aGlzLmNvbnRlbnRFbCkge1xuICAgICAgICBpZiAodGhpcy5pc0RhcmtNb2RlKSB7XG4gICAgICAgICAgdGhpcy5jb250ZW50RWwuYWRkQ2xhc3MoXCJubGQtZGFyay1tb2RlXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY29udGVudEVsLnJlbW92ZUNsYXNzKFwibmxkLWRhcmstbW9kZVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy50aGVtZU9ic2VydmVyLm9ic2VydmUoYWN0aXZlRG9jdW1lbnQuYm9keSwge1xuICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIl0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluc2VydERhdGUoZGF0ZVN0cjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlRWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKHRoaXMuYXBwLndvcmtzcGFjZSk7XG4gICAgaWYgKCFhY3RpdmVFZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jbG9zZSgpO1xuICAgIGFjdGl2ZUVkaXRvci5yZXBsYWNlU2VsZWN0aW9uKGRhdGVTdHIpO1xuICB9XG5cbiAgb25DbG9zZSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGNvbnRlbnRFbCB9ID0gdGhpcztcbiAgICBjb250ZW50RWwuZW1wdHkoKTtcblxuICAgIC8vIE5ldHRveWVyIGxlcyBldmVudCBsaXN0ZW5lcnNcbiAgICBpZiAodGhpcy5rZXlib2FyZEhhbmRsZXIpIHtcbiAgICAgIGNvbnRlbnRFbC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLmtleWJvYXJkSGFuZGxlcik7XG4gICAgICB0aGlzLmtleWJvYXJkSGFuZGxlciA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gTmV0dG95ZXIgbCdvYnNlcnZlciBkZSB0aMOobWVcbiAgICBpZiAodGhpcy50aGVtZU9ic2VydmVyKSB7XG4gICAgICB0aGlzLnRoZW1lT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy50aGVtZU9ic2VydmVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCB2YXIgTWVyaWRpZW07XG4oZnVuY3Rpb24gKE1lcmlkaWVtKSB7XG4gICAgTWVyaWRpZW1bTWVyaWRpZW1bXCJBTVwiXSA9IDBdID0gXCJBTVwiO1xuICAgIE1lcmlkaWVtW01lcmlkaWVtW1wiUE1cIl0gPSAxXSA9IFwiUE1cIjtcbn0pKE1lcmlkaWVtIHx8IChNZXJpZGllbSA9IHt9KSk7XG5leHBvcnQgdmFyIFdlZWtkYXk7XG4oZnVuY3Rpb24gKFdlZWtkYXkpIHtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJTVU5EQVlcIl0gPSAwXSA9IFwiU1VOREFZXCI7XG4gICAgV2Vla2RheVtXZWVrZGF5W1wiTU9OREFZXCJdID0gMV0gPSBcIk1PTkRBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIlRVRVNEQVlcIl0gPSAyXSA9IFwiVFVFU0RBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIldFRE5FU0RBWVwiXSA9IDNdID0gXCJXRURORVNEQVlcIjtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJUSFVSU0RBWVwiXSA9IDRdID0gXCJUSFVSU0RBWVwiO1xuICAgIFdlZWtkYXlbV2Vla2RheVtcIkZSSURBWVwiXSA9IDVdID0gXCJGUklEQVlcIjtcbiAgICBXZWVrZGF5W1dlZWtkYXlbXCJTQVRVUkRBWVwiXSA9IDZdID0gXCJTQVRVUkRBWVwiO1xufSkoV2Vla2RheSB8fCAoV2Vla2RheSA9IHt9KSk7XG5leHBvcnQgdmFyIE1vbnRoO1xuKGZ1bmN0aW9uIChNb250aCkge1xuICAgIE1vbnRoW01vbnRoW1wiSkFOVUFSWVwiXSA9IDFdID0gXCJKQU5VQVJZXCI7XG4gICAgTW9udGhbTW9udGhbXCJGRUJSVUFSWVwiXSA9IDJdID0gXCJGRUJSVUFSWVwiO1xuICAgIE1vbnRoW01vbnRoW1wiTUFSQ0hcIl0gPSAzXSA9IFwiTUFSQ0hcIjtcbiAgICBNb250aFtNb250aFtcIkFQUklMXCJdID0gNF0gPSBcIkFQUklMXCI7XG4gICAgTW9udGhbTW9udGhbXCJNQVlcIl0gPSA1XSA9IFwiTUFZXCI7XG4gICAgTW9udGhbTW9udGhbXCJKVU5FXCJdID0gNl0gPSBcIkpVTkVcIjtcbiAgICBNb250aFtNb250aFtcIkpVTFlcIl0gPSA3XSA9IFwiSlVMWVwiO1xuICAgIE1vbnRoW01vbnRoW1wiQVVHVVNUXCJdID0gOF0gPSBcIkFVR1VTVFwiO1xuICAgIE1vbnRoW01vbnRoW1wiU0VQVEVNQkVSXCJdID0gOV0gPSBcIlNFUFRFTUJFUlwiO1xuICAgIE1vbnRoW01vbnRoW1wiT0NUT0JFUlwiXSA9IDEwXSA9IFwiT0NUT0JFUlwiO1xuICAgIE1vbnRoW01vbnRoW1wiTk9WRU1CRVJcIl0gPSAxMV0gPSBcIk5PVkVNQkVSXCI7XG4gICAgTW9udGhbTW9udGhbXCJERUNFTUJFUlwiXSA9IDEyXSA9IFwiREVDRU1CRVJcIjtcbn0pKE1vbnRoIHx8IChNb250aCA9IHt9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0KSB7XG4gICAgY29tcG9uZW50LmFzc2lnbihcImRheVwiLCB0YXJnZXQuZ2V0RGF0ZSgpKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwibW9udGhcIiwgdGFyZ2V0LmdldE1vbnRoKCkgKyAxKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwieWVhclwiLCB0YXJnZXQuZ2V0RnVsbFllYXIoKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXNzaWduU2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXQpIHtcbiAgICBjb21wb25lbnQuYXNzaWduKFwiaG91clwiLCB0YXJnZXQuZ2V0SG91cnMoKSk7XG4gICAgY29tcG9uZW50LmFzc2lnbihcIm1pbnV0ZVwiLCB0YXJnZXQuZ2V0TWludXRlcygpKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwic2Vjb25kXCIsIHRhcmdldC5nZXRTZWNvbmRzKCkpO1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCB0YXJnZXQuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtZXJpZGllbVwiLCB0YXJnZXQuZ2V0SG91cnMoKSA8IDEyID8gTWVyaWRpZW0uQU0gOiBNZXJpZGllbS5QTSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW1wbHlTaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldCkge1xuICAgIGNvbXBvbmVudC5pbXBseShcImRheVwiLCB0YXJnZXQuZ2V0RGF0ZSgpKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtb250aFwiLCB0YXJnZXQuZ2V0TW9udGgoKSArIDEpO1xuICAgIGNvbXBvbmVudC5pbXBseShcInllYXJcIiwgdGFyZ2V0LmdldEZ1bGxZZWFyKCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXQpIHtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIHRhcmdldC5nZXRIb3VycygpKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgdGFyZ2V0LmdldE1pbnV0ZXMoKSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIHRhcmdldC5nZXRTZWNvbmRzKCkpO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRhcmdldC5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgdGFyZ2V0LmdldEhvdXJzKCkgPCAxMiA/IE1lcmlkaWVtLkFNIDogTWVyaWRpZW0uUE0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0ZXMuanMubWFwIiwiaW1wb3J0IHsgV2Vla2RheSwgTW9udGggfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuZXhwb3J0IGNvbnN0IFRJTUVaT05FX0FCQlJfTUFQID0ge1xuICAgIEFDRFQ6IDYzMCxcbiAgICBBQ1NUOiA1NzAsXG4gICAgQURUOiAtMTgwLFxuICAgIEFFRFQ6IDY2MCxcbiAgICBBRVNUOiA2MDAsXG4gICAgQUZUOiAyNzAsXG4gICAgQUtEVDogLTQ4MCxcbiAgICBBS1NUOiAtNTQwLFxuICAgIEFMTVQ6IDM2MCxcbiAgICBBTVNUOiAtMTgwLFxuICAgIEFNVDogLTI0MCxcbiAgICBBTkFTVDogNzIwLFxuICAgIEFOQVQ6IDcyMCxcbiAgICBBUVRUOiAzMDAsXG4gICAgQVJUOiAtMTgwLFxuICAgIEFTVDogLTI0MCxcbiAgICBBV0RUOiA1NDAsXG4gICAgQVdTVDogNDgwLFxuICAgIEFaT1NUOiAwLFxuICAgIEFaT1Q6IC02MCxcbiAgICBBWlNUOiAzMDAsXG4gICAgQVpUOiAyNDAsXG4gICAgQk5UOiA0ODAsXG4gICAgQk9UOiAtMjQwLFxuICAgIEJSU1Q6IC0xMjAsXG4gICAgQlJUOiAtMTgwLFxuICAgIEJTVDogNjAsXG4gICAgQlRUOiAzNjAsXG4gICAgQ0FTVDogNDgwLFxuICAgIENBVDogMTIwLFxuICAgIENDVDogMzkwLFxuICAgIENEVDogLTMwMCxcbiAgICBDRVNUOiAxMjAsXG4gICAgQ0VUOiB7XG4gICAgICAgIHRpbWV6b25lT2Zmc2V0RHVyaW5nRHN0OiAyICogNjAsXG4gICAgICAgIHRpbWV6b25lT2Zmc2V0Tm9uRHN0OiA2MCxcbiAgICAgICAgZHN0U3RhcnQ6ICh5ZWFyKSA9PiBnZXRMYXN0V2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TGFzdFdlZWtkYXlPZk1vbnRoKHllYXIsIE1vbnRoLk9DVE9CRVIsIFdlZWtkYXkuU1VOREFZLCAzKSxcbiAgICB9LFxuICAgIENIQURUOiA4MjUsXG4gICAgQ0hBU1Q6IDc2NSxcbiAgICBDS1Q6IC02MDAsXG4gICAgQ0xTVDogLTE4MCxcbiAgICBDTFQ6IC0yNDAsXG4gICAgQ09UOiAtMzAwLFxuICAgIENTVDogLTM2MCxcbiAgICBDVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTUgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC02ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIENWVDogLTYwLFxuICAgIENYVDogNDIwLFxuICAgIENoU1Q6IDYwMCxcbiAgICBEQVZUOiA0MjAsXG4gICAgRUFTU1Q6IC0zMDAsXG4gICAgRUFTVDogLTM2MCxcbiAgICBFQVQ6IDE4MCxcbiAgICBFQ1Q6IC0zMDAsXG4gICAgRURUOiAtMjQwLFxuICAgIEVFU1Q6IDE4MCxcbiAgICBFRVQ6IDEyMCxcbiAgICBFR1NUOiAwLFxuICAgIEVHVDogLTYwLFxuICAgIEVTVDogLTMwMCxcbiAgICBFVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTQgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC01ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIEZKU1Q6IDc4MCxcbiAgICBGSlQ6IDcyMCxcbiAgICBGS1NUOiAtMTgwLFxuICAgIEZLVDogLTI0MCxcbiAgICBGTlQ6IC0xMjAsXG4gICAgR0FMVDogLTM2MCxcbiAgICBHQU1UOiAtNTQwLFxuICAgIEdFVDogMjQwLFxuICAgIEdGVDogLTE4MCxcbiAgICBHSUxUOiA3MjAsXG4gICAgR01UOiAwLFxuICAgIEdTVDogMjQwLFxuICAgIEdZVDogLTI0MCxcbiAgICBIQUE6IC0xODAsXG4gICAgSEFDOiAtMzAwLFxuICAgIEhBRFQ6IC01NDAsXG4gICAgSEFFOiAtMjQwLFxuICAgIEhBUDogLTQyMCxcbiAgICBIQVI6IC0zNjAsXG4gICAgSEFTVDogLTYwMCxcbiAgICBIQVQ6IC05MCxcbiAgICBIQVk6IC00ODAsXG4gICAgSEtUOiA0ODAsXG4gICAgSExWOiAtMjEwLFxuICAgIEhOQTogLTI0MCxcbiAgICBITkM6IC0zNjAsXG4gICAgSE5FOiAtMzAwLFxuICAgIEhOUDogLTQ4MCxcbiAgICBITlI6IC00MjAsXG4gICAgSE5UOiAtMTUwLFxuICAgIEhOWTogLTU0MCxcbiAgICBIT1ZUOiA0MjAsXG4gICAgSUNUOiA0MjAsXG4gICAgSURUOiAxODAsXG4gICAgSU9UOiAzNjAsXG4gICAgSVJEVDogMjcwLFxuICAgIElSS1NUOiA1NDAsXG4gICAgSVJLVDogNTQwLFxuICAgIElSU1Q6IDIxMCxcbiAgICBJU1Q6IDMzMCxcbiAgICBKU1Q6IDU0MCxcbiAgICBLR1Q6IDM2MCxcbiAgICBLUkFTVDogNDgwLFxuICAgIEtSQVQ6IDQ4MCxcbiAgICBLU1Q6IDU0MCxcbiAgICBLVVlUOiAyNDAsXG4gICAgTEhEVDogNjYwLFxuICAgIExIU1Q6IDYzMCxcbiAgICBMSU5UOiA4NDAsXG4gICAgTUFHU1Q6IDcyMCxcbiAgICBNQUdUOiA3MjAsXG4gICAgTUFSVDogLTUxMCxcbiAgICBNQVdUOiAzMDAsXG4gICAgTURUOiAtMzYwLFxuICAgIE1FU1o6IDEyMCxcbiAgICBNRVo6IDYwLFxuICAgIE1IVDogNzIwLFxuICAgIE1NVDogMzkwLFxuICAgIE1TRDogMjQwLFxuICAgIE1TSzogMTgwLFxuICAgIE1TVDogLTQyMCxcbiAgICBNVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTYgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC03ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIE1VVDogMjQwLFxuICAgIE1WVDogMzAwLFxuICAgIE1ZVDogNDgwLFxuICAgIE5DVDogNjYwLFxuICAgIE5EVDogLTkwLFxuICAgIE5GVDogNjkwLFxuICAgIE5PVlNUOiA0MjAsXG4gICAgTk9WVDogMzYwLFxuICAgIE5QVDogMzQ1LFxuICAgIE5TVDogLTE1MCxcbiAgICBOVVQ6IC02NjAsXG4gICAgTlpEVDogNzgwLFxuICAgIE5aU1Q6IDcyMCxcbiAgICBPTVNTVDogNDIwLFxuICAgIE9NU1Q6IDQyMCxcbiAgICBQRFQ6IC00MjAsXG4gICAgUEVUOiAtMzAwLFxuICAgIFBFVFNUOiA3MjAsXG4gICAgUEVUVDogNzIwLFxuICAgIFBHVDogNjAwLFxuICAgIFBIT1Q6IDc4MCxcbiAgICBQSFQ6IDQ4MCxcbiAgICBQS1Q6IDMwMCxcbiAgICBQTURUOiAtMTIwLFxuICAgIFBNU1Q6IC0xODAsXG4gICAgUE9OVDogNjYwLFxuICAgIFBTVDogLTQ4MCxcbiAgICBQVDoge1xuICAgICAgICB0aW1lem9uZU9mZnNldER1cmluZ0RzdDogLTcgKiA2MCxcbiAgICAgICAgdGltZXpvbmVPZmZzZXROb25Ec3Q6IC04ICogNjAsXG4gICAgICAgIGRzdFN0YXJ0OiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTUFSQ0gsIFdlZWtkYXkuU1VOREFZLCAyLCAyKSxcbiAgICAgICAgZHN0RW5kOiAoeWVhcikgPT4gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgTW9udGguTk9WRU1CRVIsIFdlZWtkYXkuU1VOREFZLCAxLCAyKSxcbiAgICB9LFxuICAgIFBXVDogNTQwLFxuICAgIFBZU1Q6IC0xODAsXG4gICAgUFlUOiAtMjQwLFxuICAgIFJFVDogMjQwLFxuICAgIFNBTVQ6IDI0MCxcbiAgICBTQVNUOiAxMjAsXG4gICAgU0JUOiA2NjAsXG4gICAgU0NUOiAyNDAsXG4gICAgU0dUOiA0ODAsXG4gICAgU1JUOiAtMTgwLFxuICAgIFNTVDogLTY2MCxcbiAgICBUQUhUOiAtNjAwLFxuICAgIFRGVDogMzAwLFxuICAgIFRKVDogMzAwLFxuICAgIFRLVDogNzgwLFxuICAgIFRMVDogNTQwLFxuICAgIFRNVDogMzAwLFxuICAgIFRWVDogNzIwLFxuICAgIFVMQVQ6IDQ4MCxcbiAgICBVVEM6IDAsXG4gICAgVVlTVDogLTEyMCxcbiAgICBVWVQ6IC0xODAsXG4gICAgVVpUOiAzMDAsXG4gICAgVkVUOiAtMjEwLFxuICAgIFZMQVNUOiA2NjAsXG4gICAgVkxBVDogNjYwLFxuICAgIFZVVDogNjYwLFxuICAgIFdBU1Q6IDEyMCxcbiAgICBXQVQ6IDYwLFxuICAgIFdFU1Q6IDYwLFxuICAgIFdFU1o6IDYwLFxuICAgIFdFVDogMCxcbiAgICBXRVo6IDAsXG4gICAgV0ZUOiA3MjAsXG4gICAgV0dTVDogLTEyMCxcbiAgICBXR1Q6IC0xODAsXG4gICAgV0lCOiA0MjAsXG4gICAgV0lUOiA1NDAsXG4gICAgV0lUQTogNDgwLFxuICAgIFdTVDogNzgwLFxuICAgIFdUOiAwLFxuICAgIFlBS1NUOiA2MDAsXG4gICAgWUFLVDogNjAwLFxuICAgIFlBUFQ6IDYwMCxcbiAgICBZRUtTVDogMzYwLFxuICAgIFlFS1Q6IDM2MCxcbn07XG5leHBvcnQgZnVuY3Rpb24gZ2V0TnRoV2Vla2RheU9mTW9udGgoeWVhciwgbW9udGgsIHdlZWtkYXksIG4sIGhvdXIgPSAwKSB7XG4gICAgbGV0IGRheU9mTW9udGggPSAwO1xuICAgIGxldCBpID0gMDtcbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgICAgZGF5T2ZNb250aCsrO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgaWYgKGRhdGUuZ2V0RGF5KCkgPT09IHdlZWtkYXkpXG4gICAgICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aCAtIDEsIGRheU9mTW9udGgsIGhvdXIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3RXZWVrZGF5T2ZNb250aCh5ZWFyLCBtb250aCwgd2Vla2RheSwgaG91ciA9IDApIHtcbiAgICBjb25zdCBvbmVJbmRleGVkV2Vla2RheSA9IHdlZWtkYXkgPT09IDAgPyA3IDogd2Vla2RheTtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGggLSAxICsgMSwgMSwgMTIpO1xuICAgIGNvbnN0IGZpcnN0V2Vla2RheU5leHRNb250aCA9IGRhdGUuZ2V0RGF5KCkgPT09IDAgPyA3IDogZGF0ZS5nZXREYXkoKTtcbiAgICBsZXQgZGF5RGlmZjtcbiAgICBpZiAoZmlyc3RXZWVrZGF5TmV4dE1vbnRoID09PSBvbmVJbmRleGVkV2Vla2RheSlcbiAgICAgICAgZGF5RGlmZiA9IDc7XG4gICAgZWxzZSBpZiAoZmlyc3RXZWVrZGF5TmV4dE1vbnRoIDwgb25lSW5kZXhlZFdlZWtkYXkpXG4gICAgICAgIGRheURpZmYgPSA3ICsgZmlyc3RXZWVrZGF5TmV4dE1vbnRoIC0gb25lSW5kZXhlZFdlZWtkYXk7XG4gICAgZWxzZVxuICAgICAgICBkYXlEaWZmID0gZmlyc3RXZWVrZGF5TmV4dE1vbnRoIC0gb25lSW5kZXhlZFdlZWtkYXk7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF5RGlmZik7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoIC0gMSwgZGF0ZS5nZXREYXRlKCksIGhvdXIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvVGltZXpvbmVPZmZzZXQodGltZXpvbmVJbnB1dCwgZGF0ZSwgdGltZXpvbmVPdmVycmlkZXMgPSB7fSkge1xuICAgIGlmICh0aW1lem9uZUlucHV0ID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdGltZXpvbmVJbnB1dCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gdGltZXpvbmVJbnB1dDtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2hlZFRpbWV6b25lID0gdGltZXpvbmVPdmVycmlkZXNbdGltZXpvbmVJbnB1dF0gPz8gVElNRVpPTkVfQUJCUl9NQVBbdGltZXpvbmVJbnB1dF07XG4gICAgaWYgKG1hdGNoZWRUaW1lem9uZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG1hdGNoZWRUaW1lem9uZSA9PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVkVGltZXpvbmU7XG4gICAgfVxuICAgIGlmIChkYXRlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChkYXRlID4gbWF0Y2hlZFRpbWV6b25lLmRzdFN0YXJ0KGRhdGUuZ2V0RnVsbFllYXIoKSkgJiYgIShkYXRlID4gbWF0Y2hlZFRpbWV6b25lLmRzdEVuZChkYXRlLmdldEZ1bGxZZWFyKCkpKSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlZFRpbWV6b25lLnRpbWV6b25lT2Zmc2V0RHVyaW5nRHN0O1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlZFRpbWV6b25lLnRpbWV6b25lT2Zmc2V0Tm9uRHN0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZXpvbmUuanMubWFwIiwiZXhwb3J0IGNvbnN0IEVtcHR5RHVyYXRpb24gPSB7XG4gICAgZGF5OiAwLFxuICAgIHNlY29uZDogMCxcbiAgICBtaWxsaXNlY29uZDogMCxcbn07XG5leHBvcnQgZnVuY3Rpb24gYWRkRHVyYXRpb24ocmVmLCBkdXJhdGlvbikge1xuICAgIGxldCBkYXRlID0gbmV3IERhdGUocmVmKTtcbiAgICBpZiAoZHVyYXRpb25bXCJ5XCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wieWVhclwiXSA9IGR1cmF0aW9uW1wieVwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wieVwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wibW9cIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJtb250aFwiXSA9IGR1cmF0aW9uW1wibW9cIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIm1vXCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJNXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wibW9udGhcIl0gPSBkdXJhdGlvbltcIk1cIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIk1cIl07XG4gICAgfVxuICAgIGlmIChkdXJhdGlvbltcIndcIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJ3ZWVrXCJdID0gZHVyYXRpb25bXCJ3XCJdO1xuICAgICAgICBkZWxldGUgZHVyYXRpb25bXCJ3XCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJkXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wiZGF5XCJdID0gZHVyYXRpb25bXCJkXCJdO1xuICAgICAgICBkZWxldGUgZHVyYXRpb25bXCJkXCJdO1xuICAgIH1cbiAgICBpZiAoZHVyYXRpb25bXCJoXCJdKSB7XG4gICAgICAgIGR1cmF0aW9uW1wiaG91clwiXSA9IGR1cmF0aW9uW1wiaFwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wiaFwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wibVwiXSkge1xuICAgICAgICBkdXJhdGlvbltcIm1pbnV0ZVwiXSA9IGR1cmF0aW9uW1wibVwiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wibVwiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wic1wiXSkge1xuICAgICAgICBkdXJhdGlvbltcInNlY29uZFwiXSA9IGR1cmF0aW9uW1wic1wiXTtcbiAgICAgICAgZGVsZXRlIGR1cmF0aW9uW1wic1wiXTtcbiAgICB9XG4gICAgaWYgKGR1cmF0aW9uW1wibXNcIl0pIHtcbiAgICAgICAgZHVyYXRpb25bXCJtaWxsaXNlY29uZFwiXSA9IGR1cmF0aW9uW1wibXNcIl07XG4gICAgICAgIGRlbGV0ZSBkdXJhdGlvbltcIm1zXCJdO1xuICAgIH1cbiAgICBpZiAoXCJ5ZWFyXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wieWVhclwiXSk7XG4gICAgICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wieWVhclwiXSAtIGZsb29yO1xuICAgICAgICBpZiAocmVtYWluaW5nRnJhY3Rpb24gPiAwKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5tb250aCA9IGR1cmF0aW9uPy5tb250aCA/PyAwO1xuICAgICAgICAgICAgZHVyYXRpb24ubW9udGggKz0gcmVtYWluaW5nRnJhY3Rpb24gKiAxMjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJxdWFydGVyXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wicXVhcnRlclwiXSk7XG4gICAgICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgZmxvb3IgKiAzKTtcbiAgICB9XG4gICAgaWYgKFwibW9udGhcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJtb250aFwiXSk7XG4gICAgICAgIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wibW9udGhcIl0gLSBmbG9vcjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0ZyYWN0aW9uID4gMCkge1xuICAgICAgICAgICAgZHVyYXRpb24ud2VlayA9IGR1cmF0aW9uPy53ZWVrID8/IDA7XG4gICAgICAgICAgICBkdXJhdGlvbi53ZWVrICs9IHJlbWFpbmluZ0ZyYWN0aW9uICogNDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJ3ZWVrXCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wid2Vla1wiXSk7XG4gICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGZsb29yICogNyk7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJ3ZWVrXCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLmRheSA9IGR1cmF0aW9uPy5kYXkgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLmRheSArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogNyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKFwiZGF5XCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yKGR1cmF0aW9uW1wiZGF5XCJdKTtcbiAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZmxvb3IpO1xuICAgICAgICBjb25zdCByZW1haW5pbmdGcmFjdGlvbiA9IGR1cmF0aW9uW1wiZGF5XCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLmhvdXIgPSBkdXJhdGlvbj8uaG91ciA/PyAwO1xuICAgICAgICAgICAgZHVyYXRpb24uaG91ciArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogMjQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcImhvdXJcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJob3VyXCJdKTtcbiAgICAgICAgZGF0ZS5zZXRIb3VycyhkYXRlLmdldEhvdXJzKCkgKyBmbG9vcik7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJob3VyXCJdIC0gZmxvb3I7XG4gICAgICAgIGlmIChyZW1haW5pbmdGcmFjdGlvbiA+IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbnV0ZSA9IGR1cmF0aW9uPy5taW51dGUgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbnV0ZSArPSBNYXRoLnJvdW5kKHJlbWFpbmluZ0ZyYWN0aW9uICogNjApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChcIm1pbnV0ZVwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihkdXJhdGlvbltcIm1pbnV0ZVwiXSk7XG4gICAgICAgIGRhdGUuc2V0TWludXRlcyhkYXRlLmdldE1pbnV0ZXMoKSArIGZsb29yKTtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nRnJhY3Rpb24gPSBkdXJhdGlvbltcIm1pbnV0ZVwiXSAtIGZsb29yO1xuICAgICAgICBpZiAocmVtYWluaW5nRnJhY3Rpb24gPiAwKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5zZWNvbmQgPSBkdXJhdGlvbj8uc2Vjb25kID8/IDA7XG4gICAgICAgICAgICBkdXJhdGlvbi5zZWNvbmQgKz0gTWF0aC5yb3VuZChyZW1haW5pbmdGcmFjdGlvbiAqIDYwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJzZWNvbmRcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBmbG9vciA9IE1hdGguZmxvb3IoZHVyYXRpb25bXCJzZWNvbmRcIl0pO1xuICAgICAgICBkYXRlLnNldFNlY29uZHMoZGF0ZS5nZXRTZWNvbmRzKCkgKyBmbG9vcik7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0ZyYWN0aW9uID0gZHVyYXRpb25bXCJzZWNvbmRcIl0gLSBmbG9vcjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0ZyYWN0aW9uID4gMCkge1xuICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmQgPSBkdXJhdGlvbj8ubWlsbGlzZWNvbmQgPz8gMDtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kICs9IE1hdGgucm91bmQocmVtYWluaW5nRnJhY3Rpb24gKiAxMDAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoXCJtaWxsaXNlY29uZFwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZsb29yID0gTWF0aC5mbG9vcihkdXJhdGlvbltcIm1pbGxpc2Vjb25kXCJdKTtcbiAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHMoZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSArIGZsb29yKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGU7XG59XG5leHBvcnQgZnVuY3Rpb24gcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgY29uc3QgcmV2ZXJzZWQgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkdXJhdGlvbikge1xuICAgICAgICByZXZlcnNlZFtrZXldID0gLWR1cmF0aW9uW2tleV07XG4gICAgfVxuICAgIHJldHVybiByZXZlcnNlZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWR1cmF0aW9uLmpzLm1hcCIsImltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBhc3NpZ25TaW1pbGFyVGltZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgeyB0b1RpbWV6b25lT2Zmc2V0IH0gZnJvbSBcIi4vdGltZXpvbmUuanNcIjtcbmltcG9ydCB7IGFkZER1cmF0aW9uLCBFbXB0eUR1cmF0aW9uIH0gZnJvbSBcIi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBjbGFzcyBSZWZlcmVuY2VXaXRoVGltZXpvbmUge1xuICAgIGluc3RhbnQ7XG4gICAgdGltZXpvbmVPZmZzZXQ7XG4gICAgY29uc3RydWN0b3IoaW5zdGFudCwgdGltZXpvbmVPZmZzZXQpIHtcbiAgICAgICAgdGhpcy5pbnN0YW50ID0gaW5zdGFudCA/PyBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLnRpbWV6b25lT2Zmc2V0ID0gdGltZXpvbmVPZmZzZXQgPz8gbnVsbDtcbiAgICB9XG4gICAgc3RhdGljIGZyb21EYXRlKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWZlcmVuY2VXaXRoVGltZXpvbmUoZGF0ZSk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tSW5wdXQoaW5wdXQsIHRpbWV6b25lT3ZlcnJpZGVzKSB7XG4gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZlcmVuY2VXaXRoVGltZXpvbmUuZnJvbURhdGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluc3RhbnQgPSBpbnB1dD8uaW5zdGFudCA/PyBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IHRvVGltZXpvbmVPZmZzZXQoaW5wdXQ/LnRpbWV6b25lLCBpbnN0YW50LCB0aW1lem9uZU92ZXJyaWRlcyk7XG4gICAgICAgIHJldHVybiBuZXcgUmVmZXJlbmNlV2l0aFRpbWV6b25lKGluc3RhbnQsIHRpbWV6b25lT2Zmc2V0KTtcbiAgICB9XG4gICAgZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGhpcy5pbnN0YW50KTtcbiAgICAgICAgaWYgKHRoaXMudGltZXpvbmVPZmZzZXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0TWludXRlcyhkYXRlLmdldE1pbnV0ZXMoKSAtIHRoaXMuZ2V0U3lzdGVtVGltZXpvbmVBZGp1c3RtZW50TWludXRlKHRoaXMuaW5zdGFudCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgICBnZXRTeXN0ZW1UaW1lem9uZUFkanVzdG1lbnRNaW51dGUoZGF0ZSwgb3ZlcnJpZGVUaW1lem9uZU9mZnNldCkge1xuICAgICAgICBpZiAoIWRhdGUpIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lem9uZU9mZnNldCA9IC1kYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgICAgIGNvbnN0IHRhcmdldFRpbWV6b25lT2Zmc2V0ID0gb3ZlcnJpZGVUaW1lem9uZU9mZnNldCA/PyB0aGlzLnRpbWV6b25lT2Zmc2V0ID8/IGN1cnJlbnRUaW1lem9uZU9mZnNldDtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRUaW1lem9uZU9mZnNldCAtIHRhcmdldFRpbWV6b25lT2Zmc2V0O1xuICAgIH1cbiAgICBnZXRUaW1lem9uZU9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZXpvbmVPZmZzZXQgPz8gLXRoaXMuaW5zdGFudC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBQYXJzaW5nQ29tcG9uZW50cyB7XG4gICAga25vd25WYWx1ZXM7XG4gICAgaW1wbGllZFZhbHVlcztcbiAgICByZWZlcmVuY2U7XG4gICAgX3RhZ3MgPSBuZXcgU2V0KCk7XG4gICAgY29uc3RydWN0b3IocmVmZXJlbmNlLCBrbm93bkNvbXBvbmVudHMpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgICAgIHRoaXMua25vd25WYWx1ZXMgPSB7fTtcbiAgICAgICAgdGhpcy5pbXBsaWVkVmFsdWVzID0ge307XG4gICAgICAgIGlmIChrbm93bkNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGtub3duQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgIHRoaXMua25vd25WYWx1ZXNba2V5XSA9IGtub3duQ29tcG9uZW50c1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB0aGlzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgdGhpcy5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgdGhpcy5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgdGhpcy5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKHJlZmVyZW5jZSwgZHVyYXRpb24gPSBFbXB0eUR1cmF0aW9uKSB7XG4gICAgICAgIGxldCBkYXRlID0gYWRkRHVyYXRpb24ocmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpLCBkdXJhdGlvbik7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlKTtcbiAgICAgICAgY29tcG9uZW50cy5hZGRUYWcoXCJyZXN1bHQvcmVsYXRpdmVEYXRlXCIpO1xuICAgICAgICBpZiAoXCJob3VyXCIgaW4gZHVyYXRpb24gfHwgXCJtaW51dGVcIiBpbiBkdXJhdGlvbiB8fCBcInNlY29uZFwiIGluIGR1cmF0aW9uIHx8IFwibWlsbGlzZWNvbmRcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hZGRUYWcoXCJyZXN1bHQvcmVsYXRpdmVEYXRlQW5kVGltZVwiKTtcbiAgICAgICAgICAgIGFzc2lnblNpbWlsYXJUaW1lKGNvbXBvbmVudHMsIGRhdGUpO1xuICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50cywgZGF0ZSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInRpbWV6b25lT2Zmc2V0XCIsIHJlZmVyZW5jZS5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50cywgZGF0ZSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwidGltZXpvbmVPZmZzZXRcIiwgcmVmZXJlbmNlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgICAgICAgICAgaWYgKFwiZGF5XCIgaW4gZHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIndlZWtkYXlcIiwgZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChcIndlZWtcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ3ZWVrZGF5XCIsIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgaWYgKFwibW9udGhcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFwieWVhclwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxuICAgIGdldChjb21wb25lbnQpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCBpbiB0aGlzLmtub3duVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5rbm93blZhbHVlc1tjb21wb25lbnRdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnQgaW4gdGhpcy5pbXBsaWVkVmFsdWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbXBsaWVkVmFsdWVzW2NvbXBvbmVudF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlzQ2VydGFpbihjb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudCBpbiB0aGlzLmtub3duVmFsdWVzO1xuICAgIH1cbiAgICBnZXRDZXJ0YWluQ29tcG9uZW50cygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMua25vd25WYWx1ZXMpO1xuICAgIH1cbiAgICBpbXBseShjb21wb25lbnQsIHZhbHVlKSB7XG4gICAgICAgIGlmIChjb21wb25lbnQgaW4gdGhpcy5rbm93blZhbHVlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbXBsaWVkVmFsdWVzW2NvbXBvbmVudF0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGFzc2lnbihjb21wb25lbnQsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMua25vd25WYWx1ZXNbY29tcG9uZW50XSA9IHZhbHVlO1xuICAgICAgICBkZWxldGUgdGhpcy5pbXBsaWVkVmFsdWVzW2NvbXBvbmVudF07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhZGREdXJhdGlvbkFzSW1wbGllZChkdXJhdGlvbikge1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMuZGF0ZVdpdGhvdXRUaW1lem9uZUFkanVzdG1lbnQoKTtcbiAgICAgICAgY29uc3QgZGF0ZSA9IGFkZER1cmF0aW9uKGN1cnJlbnREYXRlLCBkdXJhdGlvbik7XG4gICAgICAgIGlmIChcImRheVwiIGluIGR1cmF0aW9uIHx8IFwid2Vla1wiIGluIGR1cmF0aW9uIHx8IFwibW9udGhcIiBpbiBkdXJhdGlvbiB8fCBcInllYXJcIiBpbiBkdXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kZWxldGUoW1wiZGF5XCIsIFwid2Vla2RheVwiLCBcIm1vbnRoXCIsIFwieWVhclwiXSk7XG4gICAgICAgICAgICB0aGlzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuaW1wbHkoXCJ3ZWVrZGF5XCIsIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXCJzZWNvbmRcIiBpbiBkdXJhdGlvbiB8fCBcIm1pbnV0ZVwiIGluIGR1cmF0aW9uIHx8IFwiaG91clwiIGluIGR1cmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZShbXCJzZWNvbmRcIiwgXCJtaW51dGVcIiwgXCJob3VyXCJdKTtcbiAgICAgICAgICAgIHRoaXMuaW1wbHkoXCJzZWNvbmRcIiwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgdGhpcy5pbXBseShcIm1pbnV0ZVwiLCBkYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICB0aGlzLmltcGx5KFwiaG91clwiLCBkYXRlLmdldEhvdXJzKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZWxldGUoY29tcG9uZW50cykge1xuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudHMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMgPSBbY29tcG9uZW50c107XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMua25vd25WYWx1ZXNbY29tcG9uZW50XTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmltcGxpZWRWYWx1ZXNbY29tcG9uZW50XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHRoaXMucmVmZXJlbmNlKTtcbiAgICAgICAgY29tcG9uZW50Lmtub3duVmFsdWVzID0ge307XG4gICAgICAgIGNvbXBvbmVudC5pbXBsaWVkVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMua25vd25WYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5rbm93blZhbHVlc1trZXldID0gdGhpcy5rbm93blZhbHVlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuaW1wbGllZFZhbHVlcykge1xuICAgICAgICAgICAgY29tcG9uZW50LmltcGxpZWRWYWx1ZXNba2V5XSA9IHRoaXMuaW1wbGllZFZhbHVlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxuICAgIGlzT25seURhdGUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0NlcnRhaW4oXCJob3VyXCIpICYmICF0aGlzLmlzQ2VydGFpbihcIm1pbnV0ZVwiKSAmJiAhdGhpcy5pc0NlcnRhaW4oXCJzZWNvbmRcIik7XG4gICAgfVxuICAgIGlzT25seVRpbWUoKSB7XG4gICAgICAgIHJldHVybiAoIXRoaXMuaXNDZXJ0YWluKFwid2Vla2RheVwiKSAmJiAhdGhpcy5pc0NlcnRhaW4oXCJkYXlcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwibW9udGhcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwieWVhclwiKSk7XG4gICAgfVxuICAgIGlzT25seVdlZWtkYXlDb21wb25lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ2VydGFpbihcIndlZWtkYXlcIikgJiYgIXRoaXMuaXNDZXJ0YWluKFwiZGF5XCIpICYmICF0aGlzLmlzQ2VydGFpbihcIm1vbnRoXCIpO1xuICAgIH1cbiAgICBpc0RhdGVXaXRoVW5rbm93blllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzQ2VydGFpbihcIm1vbnRoXCIpICYmICF0aGlzLmlzQ2VydGFpbihcInllYXJcIik7XG4gICAgfVxuICAgIGlzVmFsaWREYXRlKCkge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpO1xuICAgICAgICBpZiAoZGF0ZS5nZXRGdWxsWWVhcigpICE9PSB0aGlzLmdldChcInllYXJcIikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChkYXRlLmdldE1vbnRoKCkgIT09IHRoaXMuZ2V0KFwibW9udGhcIikgLSAxKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoZGF0ZS5nZXREYXRlKCkgIT09IHRoaXMuZ2V0KFwiZGF5XCIpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5nZXQoXCJob3VyXCIpICE9IG51bGwgJiYgZGF0ZS5nZXRIb3VycygpICE9IHRoaXMuZ2V0KFwiaG91clwiKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0KFwibWludXRlXCIpICE9IG51bGwgJiYgZGF0ZS5nZXRNaW51dGVzKCkgIT0gdGhpcy5nZXQoXCJtaW51dGVcIikpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGBbUGFyc2luZ0NvbXBvbmVudHMge1xuICAgICAgICAgICAgdGFnczogJHtKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKHRoaXMuX3RhZ3MpLnNvcnQoKSl9LCBcbiAgICAgICAgICAgIGtub3duVmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMua25vd25WYWx1ZXMpfSwgXG4gICAgICAgICAgICBpbXBsaWVkVmFsdWVzOiAke0pTT04uc3RyaW5naWZ5KHRoaXMuaW1wbGllZFZhbHVlcyl9fSwgXG4gICAgICAgICAgICByZWZlcmVuY2U6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5yZWZlcmVuY2UpfV1gO1xuICAgIH1cbiAgICBkYXRlKCkge1xuICAgICAgICBjb25zdCBkYXRlID0gdGhpcy5kYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpO1xuICAgICAgICBjb25zdCB0aW1lem9uZUFkanVzdG1lbnQgPSB0aGlzLnJlZmVyZW5jZS5nZXRTeXN0ZW1UaW1lem9uZUFkanVzdG1lbnRNaW51dGUoZGF0ZSwgdGhpcy5nZXQoXCJ0aW1lem9uZU9mZnNldFwiKSk7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIHRpbWV6b25lQWRqdXN0bWVudCAqIDYwMDAwKTtcbiAgICB9XG4gICAgYWRkVGFnKHRhZykge1xuICAgICAgICB0aGlzLl90YWdzLmFkZCh0YWcpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkVGFncyh0YWdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhZ3MuYWRkKHRhZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHRhZ3MoKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2V0KHRoaXMuX3RhZ3MpO1xuICAgIH1cbiAgICBkYXRlV2l0aG91dFRpbWV6b25lQWRqdXN0bWVudCgpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRoaXMuZ2V0KFwieWVhclwiKSwgdGhpcy5nZXQoXCJtb250aFwiKSAtIDEsIHRoaXMuZ2V0KFwiZGF5XCIpLCB0aGlzLmdldChcImhvdXJcIiksIHRoaXMuZ2V0KFwibWludXRlXCIpLCB0aGlzLmdldChcInNlY29uZFwiKSwgdGhpcy5nZXQoXCJtaWxsaXNlY29uZFwiKSk7XG4gICAgICAgIGRhdGUuc2V0RnVsbFllYXIodGhpcy5nZXQoXCJ5ZWFyXCIpKTtcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIFBhcnNpbmdSZXN1bHQge1xuICAgIHJlZkRhdGU7XG4gICAgaW5kZXg7XG4gICAgdGV4dDtcbiAgICByZWZlcmVuY2U7XG4gICAgc3RhcnQ7XG4gICAgZW5kO1xuICAgIGNvbnN0cnVjdG9yKHJlZmVyZW5jZSwgaW5kZXgsIHRleHQsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2U7XG4gICAgICAgIHRoaXMucmVmRGF0ZSA9IHJlZmVyZW5jZS5pbnN0YW50O1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHRoaXMuc3RhcnQgPSBzdGFydCB8fCBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlKTtcbiAgICAgICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgfVxuICAgIGNsb25lKCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgUGFyc2luZ1Jlc3VsdCh0aGlzLnJlZmVyZW5jZSwgdGhpcy5pbmRleCwgdGhpcy50ZXh0KTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gdGhpcy5zdGFydCA/IHRoaXMuc3RhcnQuY2xvbmUoKSA6IG51bGw7XG4gICAgICAgIHJlc3VsdC5lbmQgPSB0aGlzLmVuZCA/IHRoaXMuZW5kLmNsb25lKCkgOiBudWxsO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBkYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydC5kYXRlKCk7XG4gICAgfVxuICAgIGFkZFRhZyh0YWcpIHtcbiAgICAgICAgdGhpcy5zdGFydC5hZGRUYWcodGFnKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kKSB7XG4gICAgICAgICAgICB0aGlzLmVuZC5hZGRUYWcodGFnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkVGFncyh0YWdzKSB7XG4gICAgICAgIHRoaXMuc3RhcnQuYWRkVGFncyh0YWdzKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kKSB7XG4gICAgICAgICAgICB0aGlzLmVuZC5hZGRUYWdzKHRhZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0YWdzKCkge1xuICAgICAgICBjb25zdCBjb21iaW5lZFRhZ3MgPSBuZXcgU2V0KHRoaXMuc3RhcnQudGFncygpKTtcbiAgICAgICAgaWYgKHRoaXMuZW5kKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRhZyBvZiB0aGlzLmVuZC50YWdzKCkpIHtcbiAgICAgICAgICAgICAgICBjb21iaW5lZFRhZ3MuYWRkKHRhZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbWJpbmVkVGFncztcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSBBcnJheS5mcm9tKHRoaXMudGFncygpKS5zb3J0KCk7XG4gICAgICAgIHJldHVybiBgW1BhcnNpbmdSZXN1bHQge2luZGV4OiAke3RoaXMuaW5kZXh9LCB0ZXh0OiAnJHt0aGlzLnRleHR9JywgdGFnczogJHtKU09OLnN0cmluZ2lmeSh0YWdzKX0gLi4ufV1gO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc3VsdHMuanMubWFwIiwiZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKHByZWZpeCwgc2luZ2xlVGltZXVuaXRQYXR0ZXJuLCBjb25uZWN0b3JQYXR0ZXJuID0gXCJcXFxcc3swLDV9LD9cXFxcc3swLDV9XCIpIHtcbiAgICBjb25zdCBzaW5nbGVUaW1ldW5pdFBhdHRlcm5Ob0NhcHR1cmUgPSBzaW5nbGVUaW1ldW5pdFBhdHRlcm4ucmVwbGFjZSgvXFwoKD8hXFw/KS9nLCBcIig/OlwiKTtcbiAgICByZXR1cm4gYCR7cHJlZml4fSR7c2luZ2xlVGltZXVuaXRQYXR0ZXJuTm9DYXB0dXJlfSg/OiR7Y29ubmVjdG9yUGF0dGVybn0ke3NpbmdsZVRpbWV1bml0UGF0dGVybk5vQ2FwdHVyZX0pezAsMTB9YDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0VGVybXMoZGljdGlvbmFyeSkge1xuICAgIGxldCBrZXlzO1xuICAgIGlmIChkaWN0aW9uYXJ5IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAga2V5cyA9IFsuLi5kaWN0aW9uYXJ5XTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGljdGlvbmFyeSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICBrZXlzID0gQXJyYXkuZnJvbShkaWN0aW9uYXJ5LmtleXMoKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXMoZGljdGlvbmFyeSk7XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoQW55UGF0dGVybihkaWN0aW9uYXJ5KSB7XG4gICAgY29uc3Qgam9pbmVkVGVybXMgPSBleHRyYWN0VGVybXMoZGljdGlvbmFyeSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG4gICAgICAgIC5qb2luKFwifFwiKVxuICAgICAgICAucmVwbGFjZSgvXFwuL2csIFwiXFxcXC5cIik7XG4gICAgcmV0dXJuIGAoPzoke2pvaW5lZFRlcm1zfSlgO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGF0dGVybi5qcy5tYXAiLCJpbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gZmluZE1vc3RMaWtlbHlBRFllYXIoeWVhck51bWJlcikge1xuICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyID4gNTApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMTkwMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMjAwMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geWVhck51bWJlcjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5kWWVhckNsb3Nlc3RUb1JlZihyZWZEYXRlLCBkYXksIG1vbnRoKSB7XG4gICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShyZWZEYXRlKTtcbiAgICBkYXRlLnNldE1vbnRoKG1vbnRoIC0gMSk7XG4gICAgZGF0ZS5zZXREYXRlKGRheSk7XG4gICAgY29uc3QgbmV4dFllYXIgPSBhZGREdXJhdGlvbihkYXRlLCB7IFwieWVhclwiOiAxIH0pO1xuICAgIGNvbnN0IGxhc3RZZWFyID0gYWRkRHVyYXRpb24oZGF0ZSwgeyBcInllYXJcIjogLTEgfSk7XG4gICAgaWYgKE1hdGguYWJzKG5leHRZZWFyLmdldFRpbWUoKSAtIHJlZkRhdGUuZ2V0VGltZSgpKSA8IE1hdGguYWJzKGRhdGUuZ2V0VGltZSgpIC0gcmVmRGF0ZS5nZXRUaW1lKCkpKSB7XG4gICAgICAgIGRhdGUgPSBuZXh0WWVhcjtcbiAgICB9XG4gICAgZWxzZSBpZiAoTWF0aC5hYnMobGFzdFllYXIuZ2V0VGltZSgpIC0gcmVmRGF0ZS5nZXRUaW1lKCkpIDwgTWF0aC5hYnMoZGF0ZS5nZXRUaW1lKCkgLSByZWZEYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgZGF0ZSA9IGxhc3RZZWFyO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9eWVhcnMuanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBzdW5kYXk6IDAsXG4gICAgc3VuOiAwLFxuICAgIFwic3VuLlwiOiAwLFxuICAgIG1vbmRheTogMSxcbiAgICBtb246IDEsXG4gICAgXCJtb24uXCI6IDEsXG4gICAgdHVlc2RheTogMixcbiAgICB0dWU6IDIsXG4gICAgXCJ0dWUuXCI6IDIsXG4gICAgd2VkbmVzZGF5OiAzLFxuICAgIHdlZDogMyxcbiAgICBcIndlZC5cIjogMyxcbiAgICB0aHVyc2RheTogNCxcbiAgICB0aHVyczogNCxcbiAgICBcInRodXJzLlwiOiA0LFxuICAgIHRodXI6IDQsXG4gICAgXCJ0aHVyLlwiOiA0LFxuICAgIHRodTogNCxcbiAgICBcInRodS5cIjogNCxcbiAgICBmcmlkYXk6IDUsXG4gICAgZnJpOiA1LFxuICAgIFwiZnJpLlwiOiA1LFxuICAgIHNhdHVyZGF5OiA2LFxuICAgIHNhdDogNixcbiAgICBcInNhdC5cIjogNixcbn07XG5leHBvcnQgY29uc3QgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlkgPSB7XG4gICAgamFudWFyeTogMSxcbiAgICBmZWJydWFyeTogMixcbiAgICBtYXJjaDogMyxcbiAgICBhcHJpbDogNCxcbiAgICBtYXk6IDUsXG4gICAganVuZTogNixcbiAgICBqdWx5OiA3LFxuICAgIGF1Z3VzdDogOCxcbiAgICBzZXB0ZW1iZXI6IDksXG4gICAgb2N0b2JlcjogMTAsXG4gICAgbm92ZW1iZXI6IDExLFxuICAgIGRlY2VtYmVyOiAxMixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICBqYW46IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgZmViOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIG1hcjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBhcHI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAganVuOiA2LFxuICAgIFwianVuLlwiOiA2LFxuICAgIGp1bDogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBhdWc6IDgsXG4gICAgXCJhdWcuXCI6IDgsXG4gICAgc2VwOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIHNlcHQ6IDksXG4gICAgXCJzZXB0LlwiOiA5LFxuICAgIG9jdDogMTAsXG4gICAgXCJvY3QuXCI6IDEwLFxuICAgIG5vdjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIGRlYzogMTIsXG4gICAgXCJkZWMuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBvbmU6IDEsXG4gICAgdHdvOiAyLFxuICAgIHRocmVlOiAzLFxuICAgIGZvdXI6IDQsXG4gICAgZml2ZTogNSxcbiAgICBzaXg6IDYsXG4gICAgc2V2ZW46IDcsXG4gICAgZWlnaHQ6IDgsXG4gICAgbmluZTogOSxcbiAgICB0ZW46IDEwLFxuICAgIGVsZXZlbjogMTEsXG4gICAgdHdlbHZlOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgZmlyc3Q6IDEsXG4gICAgc2Vjb25kOiAyLFxuICAgIHRoaXJkOiAzLFxuICAgIGZvdXJ0aDogNCxcbiAgICBmaWZ0aDogNSxcbiAgICBzaXh0aDogNixcbiAgICBzZXZlbnRoOiA3LFxuICAgIGVpZ2h0aDogOCxcbiAgICBuaW50aDogOSxcbiAgICB0ZW50aDogMTAsXG4gICAgZWxldmVudGg6IDExLFxuICAgIHR3ZWxmdGg6IDEyLFxuICAgIHRoaXJ0ZWVudGg6IDEzLFxuICAgIGZvdXJ0ZWVudGg6IDE0LFxuICAgIGZpZnRlZW50aDogMTUsXG4gICAgc2l4dGVlbnRoOiAxNixcbiAgICBzZXZlbnRlZW50aDogMTcsXG4gICAgZWlnaHRlZW50aDogMTgsXG4gICAgbmluZXRlZW50aDogMTksXG4gICAgdHdlbnRpZXRoOiAyMCxcbiAgICBcInR3ZW50eSBmaXJzdFwiOiAyMSxcbiAgICBcInR3ZW50eS1maXJzdFwiOiAyMSxcbiAgICBcInR3ZW50eSBzZWNvbmRcIjogMjIsXG4gICAgXCJ0d2VudHktc2Vjb25kXCI6IDIyLFxuICAgIFwidHdlbnR5IHRoaXJkXCI6IDIzLFxuICAgIFwidHdlbnR5LXRoaXJkXCI6IDIzLFxuICAgIFwidHdlbnR5IGZvdXJ0aFwiOiAyNCxcbiAgICBcInR3ZW50eS1mb3VydGhcIjogMjQsXG4gICAgXCJ0d2VudHkgZmlmdGhcIjogMjUsXG4gICAgXCJ0d2VudHktZmlmdGhcIjogMjUsXG4gICAgXCJ0d2VudHkgc2l4dGhcIjogMjYsXG4gICAgXCJ0d2VudHktc2l4dGhcIjogMjYsXG4gICAgXCJ0d2VudHkgc2V2ZW50aFwiOiAyNyxcbiAgICBcInR3ZW50eS1zZXZlbnRoXCI6IDI3LFxuICAgIFwidHdlbnR5IGVpZ2h0aFwiOiAyOCxcbiAgICBcInR3ZW50eS1laWdodGhcIjogMjgsXG4gICAgXCJ0d2VudHkgbmludGhcIjogMjksXG4gICAgXCJ0d2VudHktbmludGhcIjogMjksXG4gICAgXCJ0aGlydGlldGhcIjogMzAsXG4gICAgXCJ0aGlydHkgZmlyc3RcIjogMzEsXG4gICAgXCJ0aGlydHktZmlyc3RcIjogMzEsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZX05PX0FCQlIgPSB7XG4gICAgc2Vjb25kOiBcInNlY29uZFwiLFxuICAgIHNlY29uZHM6IFwic2Vjb25kXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZXM6IFwibWludXRlXCIsXG4gICAgaG91cjogXCJob3VyXCIsXG4gICAgaG91cnM6IFwiaG91clwiLFxuICAgIGRheTogXCJkYXlcIixcbiAgICBkYXlzOiBcImRheVwiLFxuICAgIHdlZWs6IFwid2Vla1wiLFxuICAgIHdlZWtzOiBcIndlZWtcIixcbiAgICBtb250aDogXCJtb250aFwiLFxuICAgIG1vbnRoczogXCJtb250aFwiLFxuICAgIHF1YXJ0ZXI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJcIixcbiAgICB5ZWFyOiBcInllYXJcIixcbiAgICB5ZWFyczogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIHM6IFwic2Vjb25kXCIsXG4gICAgc2VjOiBcInNlY29uZFwiLFxuICAgIHNlY29uZDogXCJzZWNvbmRcIixcbiAgICBzZWNvbmRzOiBcInNlY29uZFwiLFxuICAgIG06IFwibWludXRlXCIsXG4gICAgbWluOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnM6IFwibWludXRlXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZXM6IFwibWludXRlXCIsXG4gICAgaDogXCJob3VyXCIsXG4gICAgaHI6IFwiaG91clwiLFxuICAgIGhyczogXCJob3VyXCIsXG4gICAgaG91cjogXCJob3VyXCIsXG4gICAgaG91cnM6IFwiaG91clwiLFxuICAgIGQ6IFwiZGF5XCIsXG4gICAgZGF5OiBcImRheVwiLFxuICAgIGRheXM6IFwiZGF5XCIsXG4gICAgdzogXCJ3ZWVrXCIsXG4gICAgd2VlazogXCJ3ZWVrXCIsXG4gICAgd2Vla3M6IFwid2Vla1wiLFxuICAgIG1vOiBcIm1vbnRoXCIsXG4gICAgbW9uOiBcIm1vbnRoXCIsXG4gICAgbW9zOiBcIm1vbnRoXCIsXG4gICAgbW9udGg6IFwibW9udGhcIixcbiAgICBtb250aHM6IFwibW9udGhcIixcbiAgICBxdHI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXI6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0ZXJzOiBcInF1YXJ0ZXJcIixcbiAgICB5OiBcInllYXJcIixcbiAgICB5cjogXCJ5ZWFyXCIsXG4gICAgeWVhcjogXCJ5ZWFyXCIsXG4gICAgeWVhcnM6IFwieWVhclwiLFxuICAgIC4uLlRJTUVfVU5JVF9ESUNUSU9OQVJZX05PX0FCQlIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfGhhbGYoPzpcXFxcc3swLDJ9YW4/KT98YW4/XFxcXGIoPzpcXFxcc3swLDJ9ZmV3KT98ZmV3fHNldmVyYWx8dGhlfGE/XFxcXHN7MCwyfWNvdXBsZVxcXFxzezAsMn0oPzpvZik/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwiYVwiIHx8IG51bSA9PT0gXCJhblwiIHx8IG51bSA9PSBcInRoZVwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2Zldy8pKSB7XG4gICAgICAgIHJldHVybiAzO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2hhbGYvKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2NvdXBsZS8pKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3NldmVyYWwvKSkge1xuICAgICAgICByZXR1cm4gNztcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZKX18WzAtOV17MSwyfSg/OnN0fG5kfHJkfHRoKT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgbGV0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgbnVtID0gbnVtLnJlcGxhY2UoLyg/OnN0fG5kfHJkfHRoKSQvaSwgXCJcIik7XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfVxcXFxzezAsMn0oPzpCRXxBRHxCQ3xCQ0V8Q0UpfFsxLTldWzAtOV17M318WzUtOV1bMC05XXwyWzAtNV0pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXIobWF0Y2gpIHtcbiAgICBpZiAoL0JFL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC9CRS9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKSAtIDU0MztcbiAgICB9XG4gICAgaWYgKC9CQ0U/L2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC9CQ0U/L2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gLXBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgaWYgKC8oQUR8Q0UpL2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgbWF0Y2ggPSBtYXRjaC5yZXBsYWNlKC8oQUR8Q0UpL2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBjb25zdCByYXdZZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihyYXdZZWFyTnVtYmVyKTtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCwzfSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZX05PX0FCQlIpfSlgO1xuY29uc3QgVElNRV9VTklUX0NPTk5FQ1RPUl9QQVRURVJOID0gYFxcXFxzezAsNX0sPyg/OlxcXFxzKmFuZCk/XFxcXHN7MCw1fWA7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OmFib3V0fGFyb3VuZClcXFxcc3swLDN9KT9gLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFRJTUVfVU5JVF9DT05ORUNUT1JfUEFUVEVSTik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihgKD86KD86YWJvdXR8YXJvdW5kKVxcXFxzezAsM30pP2AsIFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOLCBUSU1FX1VOSVRfQ09OTkVDVE9SX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKGZyYWdtZW50cykubGVuZ3RoID09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgaWYgKG1hdGNoWzBdLm1hdGNoKC9eW2EtekEtWl0rJC8pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImV4cG9ydCBjbGFzcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuSGFzQ2hhbmdlKGNvbnRleHQsIGN1cnJlbnRJbm5lclBhdHRlcm4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXJQYXR0ZXJuKGNvbnRleHQpICE9PSBjdXJyZW50SW5uZXJQYXR0ZXJuO1xuICAgIH1cbiAgICBwYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gYChcXFxcV3xeKWA7XG4gICAgfVxuICAgIGNhY2hlZElubmVyUGF0dGVybiA9IG51bGw7XG4gICAgY2FjaGVkUGF0dGVybiA9IG51bGw7XG4gICAgcGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZElubmVyUGF0dGVybikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlubmVyUGF0dGVybkhhc0NoYW5nZShjb250ZXh0LCB0aGlzLmNhY2hlZElubmVyUGF0dGVybikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYXR0ZXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGVkSW5uZXJQYXR0ZXJuID0gdGhpcy5pbm5lclBhdHRlcm4oY29udGV4dCk7XG4gICAgICAgIHRoaXMuY2FjaGVkUGF0dGVybiA9IG5ldyBSZWdFeHAoYCR7dGhpcy5wYXR0ZXJuTGVmdEJvdW5kYXJ5KCl9JHt0aGlzLmNhY2hlZElubmVyUGF0dGVybi5zb3VyY2V9YCwgdGhpcy5jYWNoZWRJbm5lclBhdHRlcm4uZmxhZ3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQYXR0ZXJuO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IG1hdGNoWzFdID8/IFwiXCI7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gbWF0Y2guaW5kZXggKyBoZWFkZXIubGVuZ3RoO1xuICAgICAgICBtYXRjaFswXSA9IG1hdGNoWzBdLnN1YnN0cmluZyhoZWFkZXIubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDI7IGkgPCBtYXRjaC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbWF0Y2hbaSAtIDFdID0gbWF0Y2hbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTl9XSVRIX09QVElPTkFMX1BSRUZJWCA9IG5ldyBSZWdFeHAoYCg/Oig/OndpdGhpbnxpbnxmb3IpXFxcXHMqKT9gICtcbiAgICBgKD86KD86YWJvdXR8YXJvdW5kfHJvdWdobHl8YXBwcm94aW1hdGVseXxqdXN0KVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fV0lUSF9QUkVGSVggPSBuZXcgUmVnRXhwKGAoPzp3aXRoaW58aW58Zm9yKVxcXFxzKmAgK1xuICAgIGAoPzooPzphYm91dHxhcm91bmR8cm91Z2hseXxhcHByb3hpbWF0ZWx5fGp1c3QpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUEFUVEVSTl9XSVRIX1BSRUZJWF9TVFJJQ1QgPSBuZXcgUmVnRXhwKGAoPzp3aXRoaW58aW58Zm9yKVxcXFxzKmAgK1xuICAgIGAoPzooPzphYm91dHxhcm91bmR8cm91Z2hseXxhcHByb3hpbWF0ZWx5fGp1c3QpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gUEFUVEVSTl9XSVRIX1BSRUZJWF9TVFJJQ1Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9uLmZvcndhcmREYXRlID8gUEFUVEVSTl9XSVRIX09QVElPTkFMX1BSRUZJWCA6IFBBVFRFUk5fV0lUSF9QUkVGSVg7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15mb3JcXHMqdGhlXFxzKlxcdysvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghdGltZVVuaXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKD86b25cXFxcc3swLDN9KT9gICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgYCg/OmAgK1xuICAgIGBcXFxcc3swLDN9KD86dG98XFxcXC18XFxcXOKAk3x1bnRpbHx0aHJvdWdofHRpbGwpP1xcXFxzezAsM31gICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBgKD86LXwvfFxcXFxzezAsM30oPzpvZik/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlwiICtcbiAgICBgKD86LXwvfCw/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7WUVBUl9QQVRURVJOfSg/IVxcXFx3KSlgICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86LXwvfFxcXFxzKiw/XFxcXHMqKVwiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pKD8hXFxcXHMqKD86YW18cG0pKVxcXFxzKmAgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiKD86dG98XFxcXC0pXFxcXHMqXCIgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlcXFxccypgICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD86XCIgK1xuICAgIGAoPzotfC98XFxcXHMqLFxcXFxzKnxcXFxccyspYCArXG4gICAgYCgke1lFQVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpKD8hXFxcXDpcXFxcZClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX0dST1VQID0gMjtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzaG91bGRTa2lwWWVhckxpa2VEYXRlO1xuICAgIGNvbnN0cnVjdG9yKHNob3VsZFNraXBZZWFyTGlrZURhdGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zaG91bGRTa2lwWWVhckxpa2VEYXRlID0gc2hvdWxkU2tpcFllYXJMaWtlRGF0ZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkU2tpcFllYXJMaWtlRGF0ZSkge1xuICAgICAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSAmJiAhbWF0Y2hbWUVBUl9HUk9VUF0gJiYgbWF0Y2hbREFURV9HUk9VUF0ubWF0Y2goL14yWzAtNV0kLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dFxuICAgICAgICAgICAgLmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZFRhZyhcInBhcnNlci9FTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlclwiKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY29tcG9uZW50cztcbiAgICAgICAgcmVzdWx0LmVuZCA9IGNvbXBvbmVudHMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlksIE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKCg/OmluKVxcXFxzKik/YCArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgYFxcXFxzKmAgK1xuICAgIGAoPzpgICtcbiAgICBgKD86LHwtfG9mKT9cXFxccyooJHtZRUFSX1BBVFRFUk59KT9gICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKVwiLCBcImlcIik7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDI7XG5jb25zdCBZRUFSX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTW9udGhOYW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aE5hbWUgPSBtYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAobWF0Y2hbMF0ubGVuZ3RoIDw9IDMgJiYgIUZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZW21vbnRoTmFtZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCArIChtYXRjaFtQUkVGSVhfR1JPVVBdIHx8IFwiXCIpLmxlbmd0aCwgbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hZGRUYWcoXCJwYXJzZXIvRU5Nb250aE5hbWVQYXJzZXJcIik7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttb250aE5hbWVdO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCAxLCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5Nb250aE5hbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoWzAtOV17NH0pWy1cXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYCg/Oigke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pfChbMC05XXsxLDJ9KSlbLVxcXFwuXFxcXC9cXFxcc11gICtcbiAgICBgKFswLTldezEsMn0pYCArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05VTUJFUl9HUk9VUCA9IDM7XG5jb25zdCBEQVRFX05VTUJFUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlllYXJNb250aERheVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb250aERhdGVPcmRlcjtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb250aERhdGVPcmRlcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vbnRoRGF0ZU9yZGVyID0gc3RyaWN0TW9udGhEYXRlT3JkZXI7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgbGV0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfTlVNQkVSX0dST1VQXSk7XG4gICAgICAgIGxldCBtb250aCA9IG1hdGNoW01PTlRIX05VTUJFUl9HUk9VUF1cbiAgICAgICAgICAgID8gcGFyc2VJbnQobWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXSlcbiAgICAgICAgICAgIDogTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zdHJpY3RNb250aERhdGVPcmRlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRheSA+PSAxICYmIGRheSA8PSAxMikge1xuICAgICAgICAgICAgICAgIFttb250aCwgZGF5XSA9IFtkYXksIG1vbnRoXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5IDwgMSB8fCBkYXkgPiAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICAgICAgeWVhcjogeWVhcixcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlllYXJNb250aERheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFswLTldfDBbMS05XXwxWzAxMl0pLyhbMC05XXs0fSlcIiArIFwiXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCkuaW1wbHkoXCJkYXlcIiwgMSkuYXNzaWduKFwibW9udGhcIiwgbW9udGgpLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5mdW5jdGlvbiBwcmltYXJ5VGltZVBhdHRlcm4obGVmdEJvdW5kYXJ5LCBwcmltYXJ5UHJlZml4LCBwcmltYXJ5U3VmZml4LCBmbGFncykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGAke2xlZnRCb3VuZGFyeX1gICtcbiAgICAgICAgYCR7cHJpbWFyeVByZWZpeH1gICtcbiAgICAgICAgYChcXFxcZHsxLDR9KWAgK1xuICAgICAgICBgKD86YCArXG4gICAgICAgIGAoPzpcXFxcLnw6fO+8milgICtcbiAgICAgICAgYChcXFxcZHsxLDJ9KWAgK1xuICAgICAgICBgKD86YCArXG4gICAgICAgIGAoPzo6fO+8milgICtcbiAgICAgICAgYChcXFxcZHsyfSlgICtcbiAgICAgICAgYCg/OlxcXFwuKFxcXFxkezEsNn0pKT9gICtcbiAgICAgICAgYCk/YCArXG4gICAgICAgIGApP2AgK1xuICAgICAgICBgKD86XFxcXHMqKGFcXFxcLm1cXFxcLnxwXFxcXC5tXFxcXC58YW0/fHBtPykpP2AgK1xuICAgICAgICBgJHtwcmltYXJ5U3VmZml4fWAsIGZsYWdzKTtcbn1cbmZ1bmN0aW9uIGZvbGxvd2luZ1RpbWVQYXR0ZW4oZm9sbG93aW5nUGhhc2UsIGZvbGxvd2luZ1N1ZmZpeCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKCR7Zm9sbG93aW5nUGhhc2V9KWAgK1xuICAgICAgICBgKFxcXFxkezEsNH0pYCArXG4gICAgICAgIGAoPzpgICtcbiAgICAgICAgYCg/OlxcXFwufFxcXFw6fFxcXFzvvJopYCArXG4gICAgICAgIGAoXFxcXGR7MSwyfSlgICtcbiAgICAgICAgYCg/OmAgK1xuICAgICAgICBgKD86XFxcXC58XFxcXDp8XFxcXO+8milgICtcbiAgICAgICAgYChcXFxcZHsxLDJ9KSg/OlxcXFwuKFxcXFxkezEsNn0pKT9gICtcbiAgICAgICAgYCk/YCArXG4gICAgICAgIGApP2AgK1xuICAgICAgICBgKD86XFxcXHMqKGFcXFxcLm1cXFxcLnxwXFxcXC5tXFxcXC58YW0/fHBtPykpP2AgK1xuICAgICAgICBgJHtmb2xsb3dpbmdTdWZmaXh9YCwgXCJpXCIpO1xufVxuY29uc3QgSE9VUl9HUk9VUCA9IDI7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSAzO1xuY29uc3QgU0VDT05EX0dST1VQID0gNDtcbmNvbnN0IE1JTExJX1NFQ09ORF9HUk9VUCA9IDU7XG5jb25zdCBBTV9QTV9IT1VSX0dST1VQID0gNjtcbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBwYXR0ZXJuRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBcImlcIjtcbiAgICB9XG4gICAgcHJpbWFyeVBhdHRlcm5MZWZ0Qm91bmRhcnkoKSB7XG4gICAgICAgIHJldHVybiBgKF58XFxcXHN8VHxcXFxcYilgO1xuICAgIH1cbiAgICBwcmltYXJ5U3VmZml4KCkge1xuICAgICAgICByZXR1cm4gYCg/IS8pKD89XFxcXFd8JClgO1xuICAgIH1cbiAgICBmb2xsb3dpbmdTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD8hLykoPz1cXFxcV3wkKWA7XG4gICAgfVxuICAgIHBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRQcmltYXJ5VGltZVBhdHRlcm5UaHJvdWdoQ2FjaGUoKTtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBzdGFydENvbXBvbmVudHMgPSB0aGlzLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICBpZiAoIXN0YXJ0Q29tcG9uZW50cykge1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLm1hdGNoKC9eXFxkezR9LykpIHtcbiAgICAgICAgICAgICAgICBtYXRjaC5pbmRleCArPSA0O1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoWzFdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdGV4dCA9IG1hdGNoWzBdLnN1YnN0cmluZyhtYXRjaFsxXS5sZW5ndGgpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQoaW5kZXgsIHRleHQsIHN0YXJ0Q29tcG9uZW50cyk7XG4gICAgICAgIG1hdGNoLmluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmVtYWluaW5nVGV4dCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcobWF0Y2guaW5kZXgpO1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdQYXR0ZXJuID0gdGhpcy5nZXRGb2xsb3dpbmdUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpO1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdNYXRjaCA9IGZvbGxvd2luZ1BhdHRlcm4uZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICAgICAgaWYgKHRleHQubWF0Y2goL15cXGR7Myw0fS8pICYmIGZvbGxvd2luZ01hdGNoKSB7XG4gICAgICAgICAgICBpZiAoZm9sbG93aW5nTWF0Y2hbMF0ubWF0Y2goL15cXHMqKFsrLV0pXFxzKlxcZHsyLDR9JC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9sbG93aW5nTWF0Y2hbMF0ubWF0Y2goL15cXHMqKFsrLV0pXFxzKlxcZHsyfVxcV1xcZHsyfS8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb2xsb3dpbmdNYXRjaCB8fFxuICAgICAgICAgICAgZm9sbG93aW5nTWF0Y2hbMF0ubWF0Y2goL15cXHMqKFsrLV0pXFxzKlxcZHszLDR9JC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVja0FuZFJldHVybldpdGhvdXRGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LmVuZCA9IHRoaXMuZXh0cmFjdEZvbGxvd2luZ1RpbWVDb21wb25lbnRzKGNvbnRleHQsIGZvbGxvd2luZ01hdGNoLCByZXN1bHQpO1xuICAgICAgICBpZiAocmVzdWx0LmVuZCkge1xuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gZm9sbG93aW5nTWF0Y2hbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tBbmRSZXR1cm5XaXRoRm9sbG93aW5nUGF0dGVybihyZXN1bHQpO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoLCBzdHJpY3QgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBsZXQgbWludXRlID0gMDtcbiAgICAgICAgbGV0IG1lcmlkaWVtID0gbnVsbDtcbiAgICAgICAgbGV0IGhvdXIgPSBwYXJzZUludChtYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbSE9VUl9HUk9VUF0ubGVuZ3RoID09IDQgJiYgbWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBudWxsICYmICFtYXRjaFtBTV9QTV9IT1VSX0dST1VQXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc3RyaWN0TW9kZSB8fCBtYXRjaFtNSU5VVEVfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1pbnV0ZSA9IGhvdXIgJSAxMDA7XG4gICAgICAgICAgICBob3VyID0gTWF0aC5mbG9vcihob3VyIC8gMTAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXS5sZW5ndGggPT0gMSAmJiAhbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID4gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtNSUxMSV9TRUNPTkRfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hbTUlMTElfU0VDT05EX0dST1VQXS5zdWJzdHJpbmcoMCwgMykpO1xuICAgICAgICAgICAgaWYgKG1pbGxpc2Vjb25kID49IDEwMDApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbGxpc2Vjb25kXCIsIG1pbGxpc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBwYXJzZUludChtYXRjaFtTRUNPTkRfR1JPVVBdKTtcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gNjApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInNlY29uZFwiLCBzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbiAgICBleHRyYWN0Rm9sbG93aW5nVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBpZiAobWF0Y2hbTUlMTElfU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBtaWxsaXNlY29uZCA9IHBhcnNlSW50KG1hdGNoW01JTExJX1NFQ09ORF9HUk9VUF0uc3Vic3RyaW5nKDAsIDMpKTtcbiAgICAgICAgICAgIGlmIChtaWxsaXNlY29uZCA+PSAxMDAwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCBtaWxsaXNlY29uZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW1NFQ09ORF9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kID0gcGFyc2VJbnQobWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaG91ciA9IHBhcnNlSW50KG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCB8fCBob3VyID4gMjQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XG4gICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtBTV9QTV9IT1VSX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wb25lbnRzLmlzQ2VydGFpbihcImRheVwiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBjb21wb25lbnRzLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFtcG0gPT0gXCJwXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikpIHtcbiAgICAgICAgICAgICAgICBpZiAobWVyaWRpZW0gPT0gTWVyaWRpZW0uQU0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSAhPSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gPj0gMCkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEF0UE0gPSByZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikgJiYgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPiAxMjtcbiAgICAgICAgICAgIGlmIChzdGFydEF0UE0pIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgLSAxMiA+IGhvdXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA8PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgaG91ciArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPD0gMTIpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb21wb25lbnRzLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBjb21wb25lbnRzLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbiAgICBjaGVja0FuZFJldHVybldpdGhvdXRGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQkLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXlxcZFxcZFxcZCskLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXFxkW2FwQVBdJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmRpbmdXaXRoTnVtYmVycyA9IHJlc3VsdC50ZXh0Lm1hdGNoKC9bXlxcZDouXShcXGRbXFxkLl0rKSQvKTtcbiAgICAgICAgaWYgKGVuZGluZ1dpdGhOdW1iZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBlbmRpbmdOdW1iZXJzID0gZW5kaW5nV2l0aE51bWJlcnNbMV07XG4gICAgICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZW5kaW5nTnVtYmVycy5pbmNsdWRlcyhcIi5cIikgJiYgIWVuZGluZ051bWJlcnMubWF0Y2goL1xcZChcXC5cXGR7Mn0pKyQvKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZW5kaW5nTnVtYmVyVmFsID0gcGFyc2VJbnQoZW5kaW5nTnVtYmVycyk7XG4gICAgICAgICAgICBpZiAoZW5kaW5nTnVtYmVyVmFsID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjaGVja0FuZFJldHVybldpdGhGb2xsb3dpbmdQYXR0ZXJuKHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQrLVxcZCskLykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVuZGluZ1dpdGhOdW1iZXJzID0gcmVzdWx0LnRleHQubWF0Y2goL1teXFxkOi5dKFxcZFtcXGQuXSspXFxzKi1cXHMqKFxcZFtcXGQuXSspJC8pO1xuICAgICAgICBpZiAoZW5kaW5nV2l0aE51bWJlcnMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0aW5nTnVtYmVycyA9IGVuZGluZ1dpdGhOdW1iZXJzWzFdO1xuICAgICAgICAgICAgY29uc3QgZW5kaW5nTnVtYmVycyA9IGVuZGluZ1dpdGhOdW1iZXJzWzJdO1xuICAgICAgICAgICAgaWYgKGVuZGluZ051bWJlcnMuaW5jbHVkZXMoXCIuXCIpICYmICFlbmRpbmdOdW1iZXJzLm1hdGNoKC9cXGQoXFwuXFxkezJ9KSskLykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVuZGluZ051bWJlclZhbCA9IHBhcnNlSW50KGVuZGluZ051bWJlcnMpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRpbmdOdW1iZXJWYWwgPSBwYXJzZUludChzdGFydGluZ051bWJlcnMpO1xuICAgICAgICAgICAgaWYgKGVuZGluZ051bWJlclZhbCA+IDI0IHx8IHN0YXJ0aW5nTnVtYmVyVmFsID4gMjQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBjYWNoZWRQcmltYXJ5UHJlZml4ID0gbnVsbDtcbiAgICBjYWNoZWRQcmltYXJ5U3VmZml4ID0gbnVsbDtcbiAgICBjYWNoZWRQcmltYXJ5VGltZVBhdHRlcm4gPSBudWxsO1xuICAgIGdldFByaW1hcnlUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpIHtcbiAgICAgICAgY29uc3QgcHJpbWFyeVByZWZpeCA9IHRoaXMucHJpbWFyeVByZWZpeCgpO1xuICAgICAgICBjb25zdCBwcmltYXJ5U3VmZml4ID0gdGhpcy5wcmltYXJ5U3VmZml4KCk7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZFByaW1hcnlQcmVmaXggPT09IHByaW1hcnlQcmVmaXggJiYgdGhpcy5jYWNoZWRQcmltYXJ5U3VmZml4ID09PSBwcmltYXJ5U3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRQcmltYXJ5VGltZVBhdHRlcm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZWRQcmltYXJ5VGltZVBhdHRlcm4gPSBwcmltYXJ5VGltZVBhdHRlcm4odGhpcy5wcmltYXJ5UGF0dGVybkxlZnRCb3VuZGFyeSgpLCBwcmltYXJ5UHJlZml4LCBwcmltYXJ5U3VmZml4LCB0aGlzLnBhdHRlcm5GbGFncygpKTtcbiAgICAgICAgdGhpcy5jYWNoZWRQcmltYXJ5UHJlZml4ID0gcHJpbWFyeVByZWZpeDtcbiAgICAgICAgdGhpcy5jYWNoZWRQcmltYXJ5U3VmZml4ID0gcHJpbWFyeVN1ZmZpeDtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkUHJpbWFyeVRpbWVQYXR0ZXJuO1xuICAgIH1cbiAgICBjYWNoZWRGb2xsb3dpbmdQaGFzZSA9IG51bGw7XG4gICAgY2FjaGVkRm9sbG93aW5nU3VmZml4ID0gbnVsbDtcbiAgICBjYWNoZWRGb2xsb3dpbmdUaW1lUGF0dGVuID0gbnVsbDtcbiAgICBnZXRGb2xsb3dpbmdUaW1lUGF0dGVyblRocm91Z2hDYWNoZSgpIHtcbiAgICAgICAgY29uc3QgZm9sbG93aW5nUGhhc2UgPSB0aGlzLmZvbGxvd2luZ1BoYXNlKCk7XG4gICAgICAgIGNvbnN0IGZvbGxvd2luZ1N1ZmZpeCA9IHRoaXMuZm9sbG93aW5nU3VmZml4KCk7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlZEZvbGxvd2luZ1BoYXNlID09PSBmb2xsb3dpbmdQaGFzZSAmJiB0aGlzLmNhY2hlZEZvbGxvd2luZ1N1ZmZpeCA9PT0gZm9sbG93aW5nU3VmZml4KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWRGb2xsb3dpbmdUaW1lUGF0dGVuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FjaGVkRm9sbG93aW5nVGltZVBhdHRlbiA9IGZvbGxvd2luZ1RpbWVQYXR0ZW4oZm9sbG93aW5nUGhhc2UsIGZvbGxvd2luZ1N1ZmZpeCk7XG4gICAgICAgIHRoaXMuY2FjaGVkRm9sbG93aW5nUGhhc2UgPSBmb2xsb3dpbmdQaGFzZTtcbiAgICAgICAgdGhpcy5jYWNoZWRGb2xsb3dpbmdTdWZmaXggPSBmb2xsb3dpbmdTdWZmaXg7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZEZvbGxvd2luZ1RpbWVQYXR0ZW47XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcihzdHJpY3RNb2RlKTtcbiAgICB9XG4gICAgZm9sbG93aW5nUGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBcIlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHx0b3x1bnRpbHx0aHJvdWdofHRpbGx8XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/Oig/OmF0fGZyb20pXFxcXHMqKT8/XCI7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/OlxcXFxzKig/Om9cXFxcVypjbG9ja3xhdFxcXFxzKm5pZ2h0fGluXFxcXHMqdGhlXFxcXHMqKD86bW9ybmluZ3xhZnRlcm5vb24pKSk/KD8hLykoPz1cXFxcV3wkKVwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICAgICAgaWYgKCFjb21wb25lbnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbMF0uZW5kc1dpdGgoXCJuaWdodFwiKSkge1xuICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgIGlmIChob3VyID49IDYgJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwiYWZ0ZXJub29uXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICBpZiAoaG91ciA+PSAwICYmIGhvdXIgPD0gNikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwibW9ybmluZ1wiKSkge1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzLmFkZFRhZyhcInBhcnNlci9FTlRpbWVFeHByZXNzaW9uUGFyc2VyXCIpO1xuICAgIH1cbiAgICBleHRyYWN0Rm9sbG93aW5nVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCBmb2xsb3dpbmdDb21wb25lbnRzID0gc3VwZXIuZXh0cmFjdEZvbGxvd2luZ1RpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoLCByZXN1bHQpO1xuICAgICAgICBpZiAoZm9sbG93aW5nQ29tcG9uZW50cykge1xuICAgICAgICAgICAgZm9sbG93aW5nQ29tcG9uZW50cy5hZGRUYWcoXCJwYXJzZXIvRU5UaW1lRXhwcmVzc2lvblBhcnNlclwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9sbG93aW5nQ29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmFnb3xiZWZvcmV8ZWFybGllcikoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFNUUklDVF9QQVRURVJOID0gbmV3IFJlZ0V4cChgKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KVxcXFxzezAsNX0oPzphZ298YmVmb3JlfGVhcmxpZXIpKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmljdE1vZGUgPyBTVFJJQ1RfUEFUVEVSTiA6IFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHtUSU1FX1VOSVRTX1BBVFRFUk59KVxcXFxzezAsNX0oPzpsYXRlcnxhZnRlcnxmcm9tIG5vd3xoZW5jZWZvcnRofGZvcndhcmR8b3V0KWAgKyBcIig/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBTVFJJQ1RfUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOfSlcXFxcc3swLDV9KGxhdGVyfGFmdGVyfGZyb20gbm93KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgR1JPVVBfTlVNX1RJTUVVTklUUyA9IDE7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbR1JPVVBfTlVNX1RJTUVVTklUU10pO1xuICAgICAgICBpZiAoIXRpbWVVbml0cykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanMubWFwIiwiZXhwb3J0IGNsYXNzIEZpbHRlciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZmlsdGVyKChyKSA9PiB0aGlzLmlzVmFsaWQoY29udGV4dCwgcikpO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHJlc3VsdHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWVyZ2VkUmVzdWx0cyA9IFtdO1xuICAgICAgICBsZXQgY3VyUmVzdWx0ID0gcmVzdWx0c1swXTtcbiAgICAgICAgbGV0IG5leHRSZXN1bHQgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG5leHRSZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICAgICAgY29uc3QgdGV4dEJldHdlZW4gPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKGN1clJlc3VsdC5pbmRleCArIGN1clJlc3VsdC50ZXh0Lmxlbmd0aCwgbmV4dFJlc3VsdC5pbmRleCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJSZXN1bHQsIG5leHRSZXN1bHQsIGNvbnRleHQpKSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VkUmVzdWx0cy5wdXNoKGN1clJlc3VsdCk7XG4gICAgICAgICAgICAgICAgY3VyUmVzdWx0ID0gbmV4dFJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBjdXJSZXN1bHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBuZXh0UmVzdWx0O1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFJlc3VsdCA9IHRoaXMubWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBsZWZ0LCByaWdodCwgY29udGV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gbWVyZ2VkICR7bGVmdH0gYW5kICR7cmlnaHR9IGludG8gJHttZXJnZWRSZXN1bHR9YCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY3VyUmVzdWx0ID0gbWVyZ2VkUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJSZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgICAgbWVyZ2VkUmVzdWx0cy5wdXNoKGN1clJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lcmdlZFJlc3VsdHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YWJzdHJhY3RSZWZpbmVycy5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiAhY3VycmVudFJlc3VsdC5lbmQgJiYgIW5leHRSZXN1bHQuZW5kICYmIHRleHRCZXR3ZWVuLm1hdGNoKHRoaXMucGF0dGVybkJldHdlZW4oKSkgIT0gbnVsbDtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBmcm9tUmVzdWx0LCB0b1Jlc3VsdCkge1xuICAgICAgICBpZiAoIWZyb21SZXN1bHQuc3RhcnQuaXNPbmx5V2Vla2RheUNvbXBvbmVudCgpICYmICF0b1Jlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmdldENlcnRhaW5Db21wb25lbnRzKCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFmcm9tUmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21SZXN1bHQuc3RhcnQuaW1wbHkoa2V5LCB0b1Jlc3VsdC5zdGFydC5nZXQoa2V5KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmdldENlcnRhaW5Db21wb25lbnRzKCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0b1Jlc3VsdC5zdGFydC5pc0NlcnRhaW4oa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB0b1Jlc3VsdC5zdGFydC5pbXBseShrZXksIGZyb21SZXN1bHQuc3RhcnQuZ2V0KGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmcm9tUmVzdWx0LnN0YXJ0LmRhdGUoKSA+IHRvUmVzdWx0LnN0YXJ0LmRhdGUoKSkge1xuICAgICAgICAgICAgbGV0IGZyb21EYXRlID0gZnJvbVJlc3VsdC5zdGFydC5kYXRlKCk7XG4gICAgICAgICAgICBsZXQgdG9EYXRlID0gdG9SZXN1bHQuc3RhcnQuZGF0ZSgpO1xuICAgICAgICAgICAgaWYgKHRvUmVzdWx0LnN0YXJ0LmlzT25seVdlZWtkYXlDb21wb25lbnQoKSAmJiBhZGREdXJhdGlvbih0b0RhdGUsIHsgZGF5OiA3IH0pID4gZnJvbURhdGUpIHtcbiAgICAgICAgICAgICAgICB0b0RhdGUgPSBhZGREdXJhdGlvbih0b0RhdGUsIHsgZGF5OiA3IH0pO1xuICAgICAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIHRvRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgICAgIHRvUmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgdG9EYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB0b1Jlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgdG9EYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZnJvbVJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkgJiYgYWRkRHVyYXRpb24oZnJvbURhdGUsIHsgZGF5OiAtNyB9KSA8IHRvRGF0ZSkge1xuICAgICAgICAgICAgICAgIGZyb21EYXRlID0gYWRkRHVyYXRpb24oZnJvbURhdGUsIHsgZGF5OiAtNyB9KTtcbiAgICAgICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGZyb21EYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICAgICAgZnJvbVJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIGZyb21EYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBmcm9tUmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBmcm9tRGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRvUmVzdWx0LnN0YXJ0LmlzRGF0ZVdpdGhVbmtub3duWWVhcigpICYmIGFkZER1cmF0aW9uKHRvRGF0ZSwgeyB5ZWFyOiAxIH0pID4gZnJvbURhdGUpIHtcbiAgICAgICAgICAgICAgICB0b0RhdGUgPSBhZGREdXJhdGlvbih0b0RhdGUsIHsgeWVhcjogMSB9KTtcbiAgICAgICAgICAgICAgICB0b1Jlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgdG9EYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZnJvbVJlc3VsdC5zdGFydC5pc0RhdGVXaXRoVW5rbm93blllYXIoKSAmJiBhZGREdXJhdGlvbihmcm9tRGF0ZSwgeyB5ZWFyOiAtMSB9KSA8IHRvRGF0ZSkge1xuICAgICAgICAgICAgICAgIGZyb21EYXRlID0gYWRkRHVyYXRpb24oZnJvbURhdGUsIHsgeWVhcjogLTEgfSk7XG4gICAgICAgICAgICAgICAgZnJvbVJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZnJvbURhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBbdG9SZXN1bHQsIGZyb21SZXN1bHRdID0gW2Zyb21SZXN1bHQsIHRvUmVzdWx0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBmcm9tUmVzdWx0LmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5zdGFydCA9IGZyb21SZXN1bHQuc3RhcnQ7XG4gICAgICAgIHJlc3VsdC5lbmQgPSB0b1Jlc3VsdC5zdGFydDtcbiAgICAgICAgcmVzdWx0LmluZGV4ID0gTWF0aC5taW4oZnJvbVJlc3VsdC5pbmRleCwgdG9SZXN1bHQuaW5kZXgpO1xuICAgICAgICBpZiAoZnJvbVJlc3VsdC5pbmRleCA8IHRvUmVzdWx0LmluZGV4KSB7XG4gICAgICAgICAgICByZXN1bHQudGV4dCA9IGZyb21SZXN1bHQudGV4dCArIHRleHRCZXR3ZWVuICsgdG9SZXN1bHQudGV4dDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC50ZXh0ID0gdG9SZXN1bHQudGV4dCArIHRleHRCZXR3ZWVuICsgZnJvbVJlc3VsdC50ZXh0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKHRvfC184oCTfHVudGlsfHRocm91Z2h8dGlsbClcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi91dGlscy9kYXRlcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlRGF0ZVRpbWVSZXN1bHQoZGF0ZVJlc3VsdCwgdGltZVJlc3VsdCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGRhdGVSZXN1bHQuY2xvbmUoKTtcbiAgICBjb25zdCBiZWdpbkRhdGUgPSBkYXRlUmVzdWx0LnN0YXJ0O1xuICAgIGNvbnN0IGJlZ2luVGltZSA9IHRpbWVSZXN1bHQuc3RhcnQ7XG4gICAgcmVzdWx0LnN0YXJ0ID0gbWVyZ2VEYXRlVGltZUNvbXBvbmVudChiZWdpbkRhdGUsIGJlZ2luVGltZSk7XG4gICAgaWYgKGRhdGVSZXN1bHQuZW5kICE9IG51bGwgfHwgdGltZVJlc3VsdC5lbmQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBlbmREYXRlID0gZGF0ZVJlc3VsdC5lbmQgPT0gbnVsbCA/IGRhdGVSZXN1bHQuc3RhcnQgOiBkYXRlUmVzdWx0LmVuZDtcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IHRpbWVSZXN1bHQuZW5kID09IG51bGwgPyB0aW1lUmVzdWx0LnN0YXJ0IDogdGltZVJlc3VsdC5lbmQ7XG4gICAgICAgIGNvbnN0IGVuZERhdGVUaW1lID0gbWVyZ2VEYXRlVGltZUNvbXBvbmVudChlbmREYXRlLCBlbmRUaW1lKTtcbiAgICAgICAgaWYgKGRhdGVSZXN1bHQuZW5kID09IG51bGwgJiYgZW5kRGF0ZVRpbWUuZGF0ZSgpLmdldFRpbWUoKSA8IHJlc3VsdC5zdGFydC5kYXRlKCkuZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0RGF5ID0gbmV3IERhdGUoZW5kRGF0ZVRpbWUuZGF0ZSgpLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgIGlmIChlbmREYXRlVGltZS5pc0NlcnRhaW4oXCJkYXlcIikpIHtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShlbmREYXRlVGltZSwgbmV4dERheSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJEYXRlKGVuZERhdGVUaW1lLCBuZXh0RGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuZW5kID0gZW5kRGF0ZVRpbWU7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VEYXRlVGltZUNvbXBvbmVudChkYXRlQ29tcG9uZW50LCB0aW1lQ29tcG9uZW50KSB7XG4gICAgY29uc3QgZGF0ZVRpbWVDb21wb25lbnQgPSBkYXRlQ29tcG9uZW50LmNsb25lKCk7XG4gICAgaWYgKHRpbWVDb21wb25lbnQuaXNDZXJ0YWluKFwiaG91clwiKSkge1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJob3VyXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmFzc2lnbihcIm1pbnV0ZVwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1pbnV0ZVwiKSk7XG4gICAgICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcInNlY29uZFwiKSkge1xuICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuYXNzaWduKFwic2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwic2Vjb25kXCIpKTtcbiAgICAgICAgICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcIm1pbGxpc2Vjb25kXCIpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuYXNzaWduKFwibWlsbGlzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJtaWxsaXNlY29uZFwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWlsbGlzZWNvbmRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJzZWNvbmRcIikpO1xuICAgICAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1pbGxpc2Vjb25kXCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWludXRlXCIpKTtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgdGltZUNvbXBvbmVudC5nZXQoXCJzZWNvbmRcIikpO1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWlsbGlzZWNvbmRcIikpO1xuICAgIH1cbiAgICBpZiAodGltZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCB0aW1lQ29tcG9uZW50LmdldChcInRpbWV6b25lT2Zmc2V0XCIpKTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZUhhc01lYW5pbmdmdWxNZXJpZGllbSA9IGRhdGVDb21wb25lbnQuZ2V0KFwibWVyaWRpZW1cIikgIT0gbnVsbCAmJlxuICAgICAgICAoZGF0ZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSB8fFxuICAgICAgICAgICAgQXJyYXkuZnJvbShkYXRlQ29tcG9uZW50LnRhZ3MoKSkuc29tZSgodCkgPT4gdC5zdGFydHNXaXRoKFwiY2FzdWFsUmVmZXJlbmNlL1wiKSkpO1xuICAgIGlmICh0aW1lQ29tcG9uZW50LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgIGRhdGVUaW1lQ29tcG9uZW50LmFzc2lnbihcIm1lcmlkaWVtXCIsIHRpbWVDb21wb25lbnQuZ2V0KFwibWVyaWRpZW1cIikpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0aW1lQ29tcG9uZW50LmdldChcIm1lcmlkaWVtXCIpICE9IG51bGwgJiYgIWRhdGVIYXNNZWFuaW5nZnVsTWVyaWRpZW0pIHtcbiAgICAgICAgZGF0ZVRpbWVDb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCB0aW1lQ29tcG9uZW50LmdldChcIm1lcmlkaWVtXCIpKTtcbiAgICB9XG4gICAgaWYgKGRhdGVUaW1lQ29tcG9uZW50LmdldChcIm1lcmlkaWVtXCIpID09IE1lcmlkaWVtLlBNICYmIGRhdGVUaW1lQ29tcG9uZW50LmdldChcImhvdXJcIikgPCAxMikge1xuICAgICAgICBpZiAodGltZUNvbXBvbmVudC5pc0NlcnRhaW4oXCJob3VyXCIpKSB7XG4gICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5hc3NpZ24oXCJob3VyXCIsIGRhdGVUaW1lQ29tcG9uZW50LmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRlVGltZUNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgZGF0ZVRpbWVDb21wb25lbnQuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkYXRlVGltZUNvbXBvbmVudC5hZGRUYWdzKGRhdGVDb21wb25lbnQudGFncygpKTtcbiAgICBkYXRlVGltZUNvbXBvbmVudC5hZGRUYWdzKHRpbWVDb21wb25lbnQudGFncygpKTtcbiAgICByZXR1cm4gZGF0ZVRpbWVDb21wb25lbnQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnaW5nQ2FsY3VsYXRpb24uanMubWFwIiwiaW1wb3J0IHsgTWVyZ2luZ1JlZmluZXIgfSBmcm9tIFwiLi4vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgbWVyZ2VEYXRlVGltZVJlc3VsdCB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi9tZXJnaW5nQ2FsY3VsYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgc2hvdWxkTWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIHJldHVybiAoKChjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seURhdGUoKSAmJiBuZXh0UmVzdWx0LnN0YXJ0LmlzT25seVRpbWUoKSkgfHxcbiAgICAgICAgICAgIChuZXh0UmVzdWx0LnN0YXJ0LmlzT25seURhdGUoKSAmJiBjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seVRpbWUoKSkpICYmXG4gICAgICAgICAgICB0ZXh0QmV0d2Vlbi5tYXRjaCh0aGlzLnBhdHRlcm5CZXR3ZWVuKCkpICE9IG51bGwpO1xuICAgIH1cbiAgICBtZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY3VycmVudFJlc3VsdC5zdGFydC5pc09ubHlEYXRlKClcbiAgICAgICAgICAgID8gbWVyZ2VEYXRlVGltZVJlc3VsdChjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KVxuICAgICAgICAgICAgOiBtZXJnZURhdGVUaW1lUmVzdWx0KG5leHRSZXN1bHQsIGN1cnJlbnRSZXN1bHQpO1xuICAgICAgICByZXN1bHQuaW5kZXggPSBjdXJyZW50UmVzdWx0LmluZGV4O1xuICAgICAgICByZXN1bHQudGV4dCA9IGN1cnJlbnRSZXN1bHQudGV4dCArIHRleHRCZXR3ZWVuICsgbmV4dFJlc3VsdC50ZXh0O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXlxcXFxzKihUfGF0fGFmdGVyfGJlZm9yZXxvbnxvZnwsfC18XFxcXC584oiZfDopP1xcXFxzKiRcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5NZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyB0b1RpbWV6b25lT2Zmc2V0IH0gZnJvbSBcIi4uLy4uL3RpbWV6b25lLmpzXCI7XG5jb25zdCBUSU1FWk9ORV9OQU1FX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXlxcXFxzKiw/XFxcXHMqXFxcXCg/KFtBLVpdezIsNH0pXFxcXCk/KD89XFxcXFd8JClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRXh0cmFjdFRpbWV6b25lQWJiclJlZmluZXIge1xuICAgIHRpbWV6b25lT3ZlcnJpZGVzO1xuICAgIGNvbnN0cnVjdG9yKHRpbWV6b25lT3ZlcnJpZGVzKSB7XG4gICAgICAgIHRoaXMudGltZXpvbmVPdmVycmlkZXMgPSB0aW1lem9uZU92ZXJyaWRlcztcbiAgICB9XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgY29uc3QgdGltZXpvbmVPdmVycmlkZXMgPSBjb250ZXh0Lm9wdGlvbi50aW1lem9uZXMgPz8ge307XG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWZmaXggPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IFRJTUVaT05FX05BTUVfUEFUVEVSTi5leGVjKHN1ZmZpeCk7XG4gICAgICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGltZXpvbmVBYmJyID0gbWF0Y2hbMV0udG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlZkRhdGUgPSByZXN1bHQuc3RhcnQuZGF0ZSgpID8/IHJlc3VsdC5yZWZEYXRlID8/IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBjb25zdCB0ek92ZXJyaWRlcyA9IHsgLi4udGhpcy50aW1lem9uZU92ZXJyaWRlcywgLi4udGltZXpvbmVPdmVycmlkZXMgfTtcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZFRpbWV6b25lT2Zmc2V0ID0gdG9UaW1lem9uZU9mZnNldCh0aW1lem9uZUFiYnIsIHJlZkRhdGUsIHR6T3ZlcnJpZGVzKTtcbiAgICAgICAgICAgIGlmIChleHRyYWN0ZWRUaW1lem9uZU9mZnNldCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEV4dHJhY3RpbmcgdGltZXpvbmU6ICcke3RpbWV6b25lQWJicn0nIGludG86ICR7ZXh0cmFjdGVkVGltZXpvbmVPZmZzZXR9IGZvcjogJHtyZXN1bHQuc3RhcnR9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaW1lem9uZU9mZnNldCA9IHJlc3VsdC5zdGFydC5nZXQoXCJ0aW1lem9uZU9mZnNldFwiKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50VGltZXpvbmVPZmZzZXQgIT09IG51bGwgJiYgZXh0cmFjdGVkVGltZXpvbmVPZmZzZXQgIT0gY3VycmVudFRpbWV6b25lT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lem9uZUFiYnIgIT0gbWF0Y2hbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuaXNPbmx5RGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRpbWV6b25lQWJiciAhPSBtYXRjaFsxXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCBleHRyYWN0ZWRUaW1lem9uZU9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0LmVuZCAhPSBudWxsICYmICFyZXN1bHQuZW5kLmlzQ2VydGFpbihcInRpbWV6b25lT2Zmc2V0XCIpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJ0aW1lem9uZU9mZnNldFwiLCBleHRyYWN0ZWRUaW1lem9uZU9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FeHRyYWN0VGltZXpvbmVBYmJyUmVmaW5lci5qcy5tYXAiLCJjb25zdCBUSU1FWk9ORV9PRkZTRVRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJeXFxcXHMqKD86XFxcXCg/KD86R01UfFVUQylcXFxccz8pPyhbKy1dKShcXFxcZHsxLDJ9KSg/Ojo/KFxcXFxkezJ9KSk/XFxcXCk/XCIsIFwiaVwiKTtcbmNvbnN0IFRJTUVaT05FX09GRlNFVF9TSUdOX0dST1VQID0gMTtcbmNvbnN0IFRJTUVaT05FX09GRlNFVF9IT1VSX09GRlNFVF9HUk9VUCA9IDI7XG5jb25zdCBUSU1FWk9ORV9PRkZTRVRfTUlOVVRFX09GRlNFVF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIHtcbiAgICByZWZpbmUoY29udGV4dCwgcmVzdWx0cykge1xuICAgICAgICByZXN1bHRzLmZvckVhY2goZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJ0aW1lem9uZU9mZnNldFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcocmVzdWx0LmluZGV4ICsgcmVzdWx0LnRleHQubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gVElNRVpPTkVfT0ZGU0VUX1BBVFRFUk4uZXhlYyhzdWZmaXgpO1xuICAgICAgICAgICAgaWYgKCFtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFeHRyYWN0aW5nIHRpbWV6b25lOiAnJHttYXRjaFswXX0nIGludG8gOiAke3Jlc3VsdH1gKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaG91ck9mZnNldCA9IHBhcnNlSW50KG1hdGNoW1RJTUVaT05FX09GRlNFVF9IT1VSX09GRlNFVF9HUk9VUF0pO1xuICAgICAgICAgICAgY29uc3QgbWludXRlT2Zmc2V0ID0gcGFyc2VJbnQobWF0Y2hbVElNRVpPTkVfT0ZGU0VUX01JTlVURV9PRkZTRVRfR1JPVVBdIHx8IFwiMFwiKTtcbiAgICAgICAgICAgIGxldCB0aW1lem9uZU9mZnNldCA9IGhvdXJPZmZzZXQgKiA2MCArIG1pbnV0ZU9mZnNldDtcbiAgICAgICAgICAgIGlmICh0aW1lem9uZU9mZnNldCA+IDE0ICogNjApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbVElNRVpPTkVfT0ZGU0VUX1NJR05fR1JPVVBdID09PSBcIi1cIikge1xuICAgICAgICAgICAgICAgIHRpbWV6b25lT2Zmc2V0ID0gLXRpbWV6b25lT2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgdGltZXpvbmVPZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInRpbWV6b25lT2Zmc2V0XCIsIHRpbWV6b25lT2Zmc2V0KTtcbiAgICAgICAgICAgIHJlc3VsdC50ZXh0ICs9IG1hdGNoWzBdO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lci5qcy5tYXAiLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBPdmVybGFwUmVtb3ZhbFJlZmluZXIge1xuICAgIHJlZmluZShjb250ZXh0LCByZXN1bHRzKSB7XG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlcmVkUmVzdWx0cyA9IFtdO1xuICAgICAgICBsZXQgcHJldlJlc3VsdCA9IHJlc3VsdHNbMF07XG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcmVzdWx0c1tpXTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuaW5kZXggPj0gcHJldlJlc3VsdC5pbmRleCArIHByZXZSZXN1bHQudGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZFJlc3VsdHMucHVzaChwcmV2UmVzdWx0KTtcbiAgICAgICAgICAgICAgICBwcmV2UmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGtlcHQgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHJlbW92ZWQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC50ZXh0Lmxlbmd0aCA+IHByZXZSZXN1bHQudGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBrZXB0ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJlbW92ZWQgPSBwcmV2UmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAga2VwdCA9IHByZXZSZXN1bHQ7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZCA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gcmVtb3ZlICR7cmVtb3ZlZH0gYnkgJHtrZXB0fWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcmV2UmVzdWx0ID0ga2VwdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldlJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZFJlc3VsdHMucHVzaChwcmV2UmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyZWRSZXN1bHRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU92ZXJsYXBSZW1vdmFsUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBXZWVrZGF5IH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi9yZXN1bHRzLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkocmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcikge1xuICAgIGNvbnN0IHJlZkRhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgY29uc3QgZGF5c1RvV2Vla2RheSA9IGdldERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIGxldCBjb21wb25lbnRzID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSk7XG4gICAgY29tcG9uZW50cyA9IGNvbXBvbmVudHMuYWRkRHVyYXRpb25Bc0ltcGxpZWQoeyBkYXk6IGRheXNUb1dlZWtkYXkgfSk7XG4gICAgY29tcG9uZW50cy5hc3NpZ24oXCJ3ZWVrZGF5XCIsIHdlZWtkYXkpO1xuICAgIHJldHVybiBjb21wb25lbnRzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSwgbW9kaWZpZXIpIHtcbiAgICBjb25zdCByZWZXZWVrZGF5ID0gcmVmRGF0ZS5nZXREYXkoKTtcbiAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7XG4gICAgICAgIGNhc2UgXCJ0aGlzXCI6XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGF5c0ZvcndhcmRUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSk7XG4gICAgICAgIGNhc2UgXCJsYXN0XCI6XG4gICAgICAgICAgICByZXR1cm4gZ2V0QmFja3dhcmREYXlzVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpO1xuICAgICAgICBjYXNlIFwibmV4dFwiOlxuICAgICAgICAgICAgaWYgKHJlZldlZWtkYXkgPT0gV2Vla2RheS5TVU5EQVkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gd2Vla2RheSA9PSBXZWVrZGF5LlNVTkRBWSA/IDcgOiB3ZWVrZGF5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlZldlZWtkYXkgPT0gV2Vla2RheS5TQVRVUkRBWSkge1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5ID09IFdlZWtkYXkuU0FUVVJEQVkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA3O1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5ID09IFdlZWtkYXkuU1VOREFZKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gODtcbiAgICAgICAgICAgICAgICByZXR1cm4gMSArIHdlZWtkYXk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2Vla2RheSA8IHJlZldlZWtkYXkgJiYgd2Vla2RheSAhPSBXZWVrZGF5LlNVTkRBWSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCB3ZWVrZGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCB3ZWVrZGF5KSArIDc7XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBnZXREYXlzVG9XZWVrZGF5Q2xvc2VzdChyZWZEYXRlLCB3ZWVrZGF5KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXlzVG9XZWVrZGF5Q2xvc2VzdChyZWZEYXRlLCB3ZWVrZGF5KSB7XG4gICAgY29uc3QgYmFja3dhcmQgPSBnZXRCYWNrd2FyZERheXNUb1dlZWtkYXkocmVmRGF0ZSwgd2Vla2RheSk7XG4gICAgY29uc3QgZm9yd2FyZCA9IGdldERheXNGb3J3YXJkVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpO1xuICAgIHJldHVybiBmb3J3YXJkIDwgLWJhY2t3YXJkID8gZm9yd2FyZCA6IGJhY2t3YXJkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldERheXNGb3J3YXJkVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpIHtcbiAgICBjb25zdCByZWZXZWVrZGF5ID0gcmVmRGF0ZS5nZXREYXkoKTtcbiAgICBsZXQgZm9yd2FyZENvdW50ID0gd2Vla2RheSAtIHJlZldlZWtkYXk7XG4gICAgaWYgKGZvcndhcmRDb3VudCA8IDApIHtcbiAgICAgICAgZm9yd2FyZENvdW50ICs9IDc7XG4gICAgfVxuICAgIHJldHVybiBmb3J3YXJkQ291bnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFja3dhcmREYXlzVG9XZWVrZGF5KHJlZkRhdGUsIHdlZWtkYXkpIHtcbiAgICBjb25zdCByZWZXZWVrZGF5ID0gcmVmRGF0ZS5nZXREYXkoKTtcbiAgICBsZXQgYmFja3dhcmRDb3VudCA9IHdlZWtkYXkgLSByZWZXZWVrZGF5O1xuICAgIGlmIChiYWNrd2FyZENvdW50ID49IDApIHtcbiAgICAgICAgYmFja3dhcmRDb3VudCAtPSA3O1xuICAgIH1cbiAgICByZXR1cm4gYmFja3dhcmRDb3VudDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlZWtkYXlzLmpzLm1hcCIsImltcG9ydCAqIGFzIGRhdGVzIGZyb20gXCIuLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgaW1wbHlTaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgYWRkRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmltcG9ydCB7IGdldERheXNGb3J3YXJkVG9XZWVrZGF5IH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGb3J3YXJkRGF0ZVJlZmluZXIge1xuICAgIHJlZmluZShjb250ZXh0LCByZXN1bHRzKSB7XG4gICAgICAgIGlmICghY29udGV4dC5vcHRpb24uZm9yd2FyZERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVmRGF0ZSA9IGNvbnRleHQucmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlUaW1lKCkgJiYgY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudCA+IHJlc3VsdC5zdGFydC5kYXRlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWZEYXRlID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVmRm9sbG93aW5nRGF5ID0gbmV3IERhdGUocmVmRGF0ZSk7XG4gICAgICAgICAgICAgICAgcmVmRm9sbG93aW5nRGF5LnNldERhdGUocmVmRm9sbG93aW5nRGF5LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIGRhdGVzLmltcGx5U2ltaWxhckRhdGUocmVzdWx0LnN0YXJ0LCByZWZGb2xsb3dpbmdEYXkpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB0aW1lIGZyb20gdGhlIHJlZiBkYXRlICgke3JlZkRhdGV9KSB0byB0aGUgZm9sbG93aW5nIGRheSAoJHtyZWZGb2xsb3dpbmdEYXl9KWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZW5kICYmIHJlc3VsdC5lbmQuaXNPbmx5VGltZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVzLmltcGx5U2ltaWxhckRhdGUocmVzdWx0LmVuZCwgcmVmRm9sbG93aW5nRGF5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5kYXRlKCkgPiByZXN1bHQuZW5kLmRhdGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmRm9sbG93aW5nRGF5LnNldERhdGUocmVmRm9sbG93aW5nRGF5LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZXMuaW1wbHlTaW1pbGFyRGF0ZShyZXN1bHQuZW5kLCByZWZGb2xsb3dpbmdEYXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkgJiYgcmVmRGF0ZSA+IHJlc3VsdC5zdGFydC5kYXRlKCkpIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF5c1RvQWRkID0gZ2V0RGF5c0ZvcndhcmRUb1dlZWtkYXkocmVmRGF0ZSwgcmVzdWx0LnN0YXJ0LmdldChcIndlZWtkYXlcIikpIHx8IDc7XG4gICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZGVkV2Vla2RheSA9IGFkZER1cmF0aW9uKHJlZkRhdGUsIHsgZGF5OiBkYXlzVG9BZGQgfSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyRGF0ZShyZXN1bHQuc3RhcnQsIGZvcndhcmRlZFdlZWtkYXkpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB3ZWVrZGF5ICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgJiYgcmVzdWx0LnN0YXJ0LmRhdGUoKSA+IHJlc3VsdC5lbmQuZGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXlzVG9BZGQgPSBnZXREYXlzRm9yd2FyZFRvV2Vla2RheShyZWZEYXRlLCByZXN1bHQuc3RhcnQuZ2V0KFwid2Vla2RheVwiKSkgfHwgNztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9yd2FyZGVkV2Vla2RheSA9IGFkZER1cmF0aW9uKHJlZkRhdGUsIHsgZGF5OiBkYXlzVG9BZGQgfSk7XG4gICAgICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhckRhdGUocmVzdWx0LmVuZCwgZm9yd2FyZGVkV2Vla2RheSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBhZGp1c3RlZCAke3Jlc3VsdH0gd2Vla2RheSAoJHtyZXN1bHQuZW5kfSlgKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc0RhdGVXaXRoVW5rbm93blllYXIoKSAmJiByZWZEYXRlID4gcmVzdWx0LnN0YXJ0LmRhdGUoKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMyAmJiByZWZEYXRlID4gcmVzdWx0LnN0YXJ0LmRhdGUoKTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgcmVzdWx0LnN0YXJ0LmdldChcInllYXJcIikgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGFkanVzdGVkICR7cmVzdWx0fSB5ZWFyICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVuZCAmJiAhcmVzdWx0LmVuZC5pc0NlcnRhaW4oXCJ5ZWFyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwieWVhclwiLCByZXN1bHQuZW5kLmdldChcInllYXJcIikgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gYWRqdXN0ZWQgJHtyZXN1bHR9IG1vbnRoICgke3Jlc3VsdC5zdGFydH0pYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZvcndhcmREYXRlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBGaWx0ZXIgfSBmcm9tIFwiLi4vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVW5saWtlbHlGb3JtYXRGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIHN0cmljdE1vZGU7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpc1ZhbGlkKGNvbnRleHQsIHJlc3VsdCkge1xuICAgICAgICBpZiAocmVzdWx0LnRleHQucmVwbGFjZShcIiBcIiwgXCJcIikubWF0Y2goL15cXGQqKFxcLlxcZCopPyQvKSkge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFJlbW92aW5nIHVubGlrZWx5IHJlc3VsdCAnJHtyZXN1bHQudGV4dH0nYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc3VsdC5zdGFydC5pc1ZhbGlkRGF0ZSgpKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZpbmcgaW52YWxpZCByZXN1bHQ6ICR7cmVzdWx0fSAoJHtyZXN1bHQuc3RhcnR9KWApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdC5lbmQgJiYgIXJlc3VsdC5lbmQuaXNWYWxpZERhdGUoKSkge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFJlbW92aW5nIGludmFsaWQgcmVzdWx0OiAke3Jlc3VsdH0gKCR7cmVzdWx0LmVuZH0pYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1N0cmljdE1vZGVWYWxpZChjb250ZXh0LCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpc1N0cmljdE1vZGVWYWxpZChjb250ZXh0LCByZXN1bHQpIHtcbiAgICAgICAgaWYgKHJlc3VsdC5zdGFydC5pc09ubHlXZWVrZGF5Q29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGAoU3RyaWN0KSBSZW1vdmluZyB3ZWVrZGF5IG9ubHkgY29tcG9uZW50OiAke3Jlc3VsdH0gKCR7cmVzdWx0LmVuZH0pYCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Vbmxpa2VseUZvcm1hdEZpbHRlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoWzAtOV17NH0pXFxcXC0oWzAtOV17MSwyfSlcXFxcLShbMC05XXsxLDJ9KVwiICtcbiAgICBcIig/OlRcIiArXG4gICAgXCIoWzAtOV17MSwyfSk6KFswLTldezEsMn0pXCIgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiOihbMC05XXsxLDJ9KSg/OlxcXFwuKFxcXFxkezEsNH0pKT9cIiArXG4gICAgXCIpP1wiICtcbiAgICBcIihcIiArXG4gICAgXCJafChbKy1dXFxcXGR7Mn0pOj8oXFxcXGR7Mn0pP1wiICtcbiAgICBcIik/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBNT05USF9OVU1CRVJfR1JPVVAgPSAyO1xuY29uc3QgREFURV9OVU1CRVJfR1JPVVAgPSAzO1xuY29uc3QgSE9VUl9OVU1CRVJfR1JPVVAgPSA0O1xuY29uc3QgTUlOVVRFX05VTUJFUl9HUk9VUCA9IDU7XG5jb25zdCBTRUNPTkRfTlVNQkVSX0dST1VQID0gNjtcbmNvbnN0IE1JTExJU0VDT05EX05VTUJFUl9HUk9VUCA9IDc7XG5jb25zdCBUWkRfR1JPVVAgPSA4O1xuY29uc3QgVFpEX0hPVVJfT0ZGU0VUX0dST1VQID0gOTtcbmNvbnN0IFRaRF9NSU5VVEVfT0ZGU0VUX0dST1VQID0gMTA7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJU09Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIFwieWVhclwiOiBwYXJzZUludChtYXRjaFtZRUFSX05VTUJFUl9HUk9VUF0pLFxuICAgICAgICAgICAgXCJtb250aFwiOiBwYXJzZUludChtYXRjaFtNT05USF9OVU1CRVJfR1JPVVBdKSxcbiAgICAgICAgICAgIFwiZGF5XCI6IHBhcnNlSW50KG1hdGNoW0RBVEVfTlVNQkVSX0dST1VQXSksXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobWF0Y2hbSE9VUl9OVU1CRVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBwYXJzZUludChtYXRjaFtIT1VSX05VTUJFUl9HUk9VUF0pKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWludXRlXCIsIHBhcnNlSW50KG1hdGNoW01JTlVURV9OVU1CRVJfR1JPVVBdKSk7XG4gICAgICAgICAgICBpZiAobWF0Y2hbU0VDT05EX05VTUJFUl9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwic2Vjb25kXCIsIHBhcnNlSW50KG1hdGNoW1NFQ09ORF9OVU1CRVJfR1JPVVBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbTUlMTElTRUNPTkRfTlVNQkVSX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtaWxsaXNlY29uZFwiLCBwYXJzZUludChtYXRjaFtNSUxMSVNFQ09ORF9OVU1CRVJfR1JPVVBdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbVFpEX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoW1RaRF9IT1VSX09GRlNFVF9HUk9VUF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG91ck9mZnNldCA9IHBhcnNlSW50KG1hdGNoW1RaRF9IT1VSX09GRlNFVF9HUk9VUF0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgbWludXRlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoW1RaRF9NSU5VVEVfT0ZGU0VUX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtaW51dGVPZmZzZXQgPSBwYXJzZUludChtYXRjaFtUWkRfTUlOVVRFX09GRlNFVF9HUk9VUF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGhvdXJPZmZzZXQgKiA2MDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSBtaW51dGVPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gbWludXRlT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgb2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cy5hZGRUYWcoXCJwYXJzZXIvSVNPRm9ybWF0UGFyc2VyXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlTT0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi9hYnN0cmFjdFJlZmluZXJzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCBuZXdSZXN1bHQgPSBuZXh0UmVzdWx0LmNsb25lKCk7XG4gICAgICAgIG5ld1Jlc3VsdC5pbmRleCA9IGN1cnJlbnRSZXN1bHQuaW5kZXg7XG4gICAgICAgIG5ld1Jlc3VsdC50ZXh0ID0gY3VycmVudFJlc3VsdC50ZXh0ICsgdGV4dEJldHdlZW4gKyBuZXdSZXN1bHQudGV4dDtcbiAgICAgICAgbmV3UmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgY3VycmVudFJlc3VsdC5zdGFydC5nZXQoXCJ3ZWVrZGF5XCIpKTtcbiAgICAgICAgaWYgKG5ld1Jlc3VsdC5lbmQpIHtcbiAgICAgICAgICAgIG5ld1Jlc3VsdC5lbmQuYXNzaWduKFwid2Vla2RheVwiLCBjdXJyZW50UmVzdWx0LnN0YXJ0LmdldChcIndlZWtkYXlcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdSZXN1bHQ7XG4gICAgfVxuICAgIHNob3VsZE1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCB3ZWVrZGF5VGhlbk5vcm1hbERhdGUgPSBjdXJyZW50UmVzdWx0LnN0YXJ0LmlzT25seVdlZWtkYXlDb21wb25lbnQoKSAmJlxuICAgICAgICAgICAgIWN1cnJlbnRSZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwiaG91clwiKSAmJlxuICAgICAgICAgICAgbmV4dFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJkYXlcIik7XG4gICAgICAgIHJldHVybiB3ZWVrZGF5VGhlbk5vcm1hbERhdGUgJiYgdGV4dEJldHdlZW4ubWF0Y2goL14sP1xccyokLykgIT0gbnVsbDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBFeHRyYWN0VGltZXpvbmVBYmJyUmVmaW5lciBmcm9tIFwiLi9jb21tb24vcmVmaW5lcnMvRXh0cmFjdFRpbWV6b25lQWJiclJlZmluZXIuanNcIjtcbmltcG9ydCBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgT3ZlcmxhcFJlbW92YWxSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9PdmVybGFwUmVtb3ZhbFJlZmluZXIuanNcIjtcbmltcG9ydCBGb3J3YXJkRGF0ZVJlZmluZXIgZnJvbSBcIi4vY29tbW9uL3JlZmluZXJzL0ZvcndhcmREYXRlUmVmaW5lci5qc1wiO1xuaW1wb3J0IFVubGlrZWx5Rm9ybWF0RmlsdGVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9Vbmxpa2VseUZvcm1hdEZpbHRlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9jb21tb24vcGFyc2Vycy9JU09Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGZyb20gXCIuL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbiwgc3RyaWN0TW9kZSA9IGZhbHNlKSB7XG4gICAgY29uZmlndXJhdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IElTT0Zvcm1hdFBhcnNlcigpKTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzLnVuc2hpZnQobmV3IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy51bnNoaWZ0KG5ldyBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyKCkpO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMudW5zaGlmdChuZXcgT3ZlcmxhcFJlbW92YWxSZWZpbmVyKCkpO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMucHVzaChuZXcgRXh0cmFjdFRpbWV6b25lQWJiclJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBPdmVybGFwUmVtb3ZhbFJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBGb3J3YXJkRGF0ZVJlZmluZXIoKSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBVbmxpa2VseUZvcm1hdEZpbHRlcihzdHJpY3RNb2RlKSk7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWd1cmF0aW9ucy5qcy5tYXAiLCJpbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgYXNzaWduU2ltaWxhclRpbWUsIGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gbm93KHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IHRhcmdldERhdGUgPSByZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgYXNzaWduU2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwidGltZXpvbmVPZmZzZXRcIiwgcmVmZXJlbmNlLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2Uvbm93XCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9kYXkocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgdGFyZ2V0RGF0ZSA9IHJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgY29tcG9uZW50LmRlbGV0ZShcIm1lcmlkaWVtXCIpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvdG9kYXlcIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB5ZXN0ZXJkYXkocmVmZXJlbmNlKSB7XG4gICAgcmV0dXJuIHRoZURheUJlZm9yZShyZWZlcmVuY2UsIDEpLmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS95ZXN0ZXJkYXlcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9tb3Jyb3cocmVmZXJlbmNlKSB7XG4gICAgcmV0dXJuIHRoZURheUFmdGVyKHJlZmVyZW5jZSwgMSkuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL3RvbW9ycm93XCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRoZURheUJlZm9yZShyZWZlcmVuY2UsIG51bURheSkge1xuICAgIHJldHVybiB0aGVEYXlBZnRlcihyZWZlcmVuY2UsIC1udW1EYXkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRoZURheUFmdGVyKHJlZmVyZW5jZSwgbkRheXMpIHtcbiAgICBjb25zdCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgIG5ld0RhdGUuc2V0RGF0ZShuZXdEYXRlLmdldERhdGUoKSArIG5EYXlzKTtcbiAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5ld0RhdGUpO1xuICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBuZXdEYXRlKTtcbiAgICBjb21wb25lbnQuZGVsZXRlKFwibWVyaWRpZW1cIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b25pZ2h0KHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMjIpIHtcbiAgICBjb25zdCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS90b25pZ2h0XCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbGFzdE5pZ2h0KHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMCkge1xuICAgIGxldCB0YXJnZXREYXRlID0gcmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpO1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBpZiAodGFyZ2V0RGF0ZS5nZXRIb3VycygpIDwgNikge1xuICAgICAgICB0YXJnZXREYXRlID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkgLSAyNCAqIDYwICogNjAgKiAxMDAwKTtcbiAgICB9XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIGltcGx5SG91cik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBldmVuaW5nKHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMjApIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2V2ZW5pbmdcIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB5ZXN0ZXJkYXlFdmVuaW5nKHJlZmVyZW5jZSwgaW1wbHlIb3VyID0gMjApIHtcbiAgICBsZXQgdGFyZ2V0RGF0ZSA9IHJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgdGFyZ2V0RGF0ZSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpIC0gMjQgKiA2MCAqIDYwICogMTAwMCk7XG4gICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIGltcGx5SG91cik7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UveWVzdGVyZGF5XCIpO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvZXZlbmluZ1wiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1pZG5pZ2h0KHJlZmVyZW5jZSkge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBQYXJzaW5nQ29tcG9uZW50cyhyZWZlcmVuY2UsIHt9KTtcbiAgICBpZiAocmVmZXJlbmNlLmdldERhdGVXaXRoQWRqdXN0ZWRUaW1lem9uZSgpLmdldEhvdXJzKCkgPiAyKSB7XG4gICAgICAgIGNvbXBvbmVudC5hZGREdXJhdGlvbkFzSW1wbGllZCh7IGRheTogMSB9KTtcbiAgICB9XG4gICAgY29tcG9uZW50LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL21pZG5pZ2h0XCIpO1xuICAgIHJldHVybiBjb21wb25lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbW9ybmluZyhyZWZlcmVuY2UsIGltcGx5SG91ciA9IDYpIHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBuZXcgUGFyc2luZ0NvbXBvbmVudHMocmVmZXJlbmNlLCB7fSk7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgaW1wbHlIb3VyKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbW9ybmluZ1wiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFmdGVybm9vbihyZWZlcmVuY2UsIGltcGx5SG91ciA9IDE1KSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIGltcGx5SG91cik7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICByZXR1cm4gY29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vb24ocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gbmV3IFBhcnNpbmdDb21wb25lbnRzKHJlZmVyZW5jZSwge30pO1xuICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICBjb21wb25lbnQuYXNzaWduKFwiaG91clwiLCAxMik7XG4gICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL25vb25cIik7XG4gICAgcmV0dXJuIGNvbXBvbmVudDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNhc3VhbFJlZmVyZW5jZXMuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvKG5vd3x0b2RheXx0b25pZ2h0fHRvbW9ycm93fG92ZXJtb3Jyb3d8dG1yfHRtcnd8eWVzdGVyZGF5fGxhc3RcXHMqbmlnaHQpKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTkNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBsZXQgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJub3dcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9kYXlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ5ZXN0ZXJkYXlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9tb3Jyb3dcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ0bXJcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ0bXJ3XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9uaWdodFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9uaWdodChjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwib3Zlcm1vcnJvd1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC9sYXN0XFxzKm5pZ2h0LykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldERhdGUuZ2V0SG91cnMoKSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzRGF5ID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNEYXkuc2V0RGF0ZShwcmV2aW91c0RheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBwcmV2aW91c0RheTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwicGFyc2VyL0VOQ2FzdWFsRGF0ZVBhcnNlclwiKTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTkNhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgKiBhcyBjYXN1YWxSZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IC8oPzp0aGlzKT9cXHN7MCwzfShtb3JuaW5nfGFmdGVybm9vbnxldmVuaW5nfG5pZ2h0fG1pZG5pZ2h0fG1pZGRheXxub29uKSg/PVxcV3wkKS9pO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5DYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBsZXQgY29tcG9uZW50ID0gbnVsbDtcbiAgICAgICAgc3dpdGNoIChtYXRjaFsxXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwiYWZ0ZXJub29uXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5hZnRlcm5vb24oY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImV2ZW5pbmdcIjpcbiAgICAgICAgICAgIGNhc2UgXCJuaWdodFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IGNhc3VhbFJlZmVyZW5jZXMuZXZlbmluZyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWlkbmlnaHRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBjYXN1YWxSZWZlcmVuY2VzLm1pZG5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtb3JuaW5nXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5tb3JuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub29uXCI6XG4gICAgICAgICAgICBjYXNlIFwibWlkZGF5XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY2FzdWFsUmVmZXJlbmNlcy5ub29uKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwicGFyc2VyL0VOQ2FzdWFsVGltZVBhcnNlclwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuaW1wb3J0IHsgV2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86b25cXFxccyo/KT9cIiArXG4gICAgXCIoPzoodGhpc3xsYXN0fHBhc3R8bmV4dClcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9fHdlZWtlbmR8d2Vla2RheSlgICtcbiAgICBcIig/OlxcXFxzKig/OlxcXFwsfFxcXFwpfFxcXFzvvIkpKT9cIiArXG4gICAgXCIoPzpcXFxccyooPzpvZlxcXFxzKik/KHRoaXN8bGFzdHxwYXN0fG5leHQpXFxcXHMqd2Vlayk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQgPT0gXCJsYXN0XCIgfHwgbW9kaWZpZXJXb3JkID09IFwicGFzdFwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcIm5leHRcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQgPT0gXCJ0aGlzXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJ0aGlzXCI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2Vla2RheV93b3JkID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHdlZWtkYXk7XG4gICAgICAgIGlmIChXRUVLREFZX0RJQ1RJT05BUllbd2Vla2RheV93b3JkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW3dlZWtkYXlfd29yZF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2Vla2RheV93b3JkID09IFwid2Vla2VuZFwiKSB7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gbW9kaWZpZXIgPT0gXCJsYXN0XCIgPyBXZWVrZGF5LlNVTkRBWSA6IFdlZWtkYXkuU0FUVVJEQVk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAod2Vla2RheV93b3JkID09IFwid2Vla2RheVwiKSB7XG4gICAgICAgICAgICBjb25zdCByZWZXZWVrZGF5ID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkuZ2V0RGF5KCk7XG4gICAgICAgICAgICBpZiAocmVmV2Vla2RheSA9PSBXZWVrZGF5LlNVTkRBWSB8fCByZWZXZWVrZGF5ID09IFdlZWtkYXkuU0FUVVJEQVkpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gbW9kaWZpZXIgPT0gXCJsYXN0XCIgPyBXZWVrZGF5LkZSSURBWSA6IFdlZWtkYXkuTU9OREFZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHJlZldlZWtkYXkgLSAxO1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBtb2RpZmllciA9PSBcImxhc3RcIiA/IHdlZWtkYXkgLSAxIDogd2Vla2RheSArIDE7XG4gICAgICAgICAgICAgICAgd2Vla2RheSA9ICh3ZWVrZGF5ICUgNSkgKyAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5XZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCh0aGlzfGxhc3R8cGFzdHxuZXh0fGFmdGVyXFxcXHMqdGhpcylcXFxccyooJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSkoPz1cXFxccyopYCArIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9ESUZJRVJfV09SRF9HUk9VUCA9IDE7XG5jb25zdCBSRUxBVElWRV9XT1JEX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb2RpZmllciA9IG1hdGNoW01PRElGSUVSX1dPUkRfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHVuaXRXb3JkID0gbWF0Y2hbUkVMQVRJVkVfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGltZXVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVt1bml0V29yZF07XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcIm5leHRcIiB8fCBtb2RpZmllci5zdGFydHNXaXRoKFwiYWZ0ZXJcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICAgICAgdGltZVVuaXRzW3RpbWV1bml0XSA9IDE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcImxhc3RcIiB8fCBtb2RpZmllciA9PSBcInBhc3RcIikge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gLTE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAodW5pdFdvcmQubWF0Y2goL3dlZWsvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRXb3JkLm1hdGNoKC9tb250aC9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL3llYXIvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyLCBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoW15cXFxcZF18XilcIiArXG4gICAgXCIoWzAtM117MCwxfVswLTldezF9KVtcXFxcL1xcXFwuXFxcXC1dKFswLTNdezAsMX1bMC05XXsxfSlcIiArXG4gICAgXCIoPzpbXFxcXC9cXFxcLlxcXFwtXShbMC05XXs0fXxbMC05XXsyfSkpP1wiICtcbiAgICBcIihcXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBPUEVOSU5HX0dST1VQID0gMTtcbmNvbnN0IEVORElOR19HUk9VUCA9IDU7XG5jb25zdCBGSVJTVF9OVU1CRVJTX0dST1VQID0gMjtcbmNvbnN0IFNFQ09ORF9OVU1CRVJTX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIHtcbiAgICBncm91cE51bWJlck1vbnRoO1xuICAgIGdyb3VwTnVtYmVyRGF5O1xuICAgIGNvbnN0cnVjdG9yKGxpdHRsZUVuZGlhbikge1xuICAgICAgICB0aGlzLmdyb3VwTnVtYmVyTW9udGggPSBsaXR0bGVFbmRpYW4gPyBTRUNPTkRfTlVNQkVSU19HUk9VUCA6IEZJUlNUX05VTUJFUlNfR1JPVVA7XG4gICAgICAgIHRoaXMuZ3JvdXBOdW1iZXJEYXkgPSBsaXR0bGVFbmRpYW4gPyBGSVJTVF9OVU1CRVJTX0dST1VQIDogU0VDT05EX05VTUJFUlNfR1JPVVA7XG4gICAgfVxuICAgIHBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFtPUEVOSU5HX0dST1VQXS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGluZGV4RW5kID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggLSBtYXRjaFtFTkRJTkdfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgY29uc3QgdGV4dEJlZm9yZSA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKHRleHRCZWZvcmUubWF0Y2goXCJcXFxcZC8/JFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5kZXhFbmQgPCBjb250ZXh0LnRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0QWZ0ZXIgPSBjb250ZXh0LnRleHQuc3Vic3RyaW5nKGluZGV4RW5kKTtcbiAgICAgICAgICAgIGlmICh0ZXh0QWZ0ZXIubWF0Y2goXCJeLz9cXFxcZFwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXh0ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhpbmRleCwgaW5kZXhFbmQpO1xuICAgICAgICBpZiAodGV4dC5tYXRjaCgvXlxcZFxcLlxcZCQvKSB8fCB0ZXh0Lm1hdGNoKC9eXFxkXFwuXFxkezEsMn1cXC5cXGR7MSwyfVxccyokLykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hdGNoW1lFQVJfR1JPVVBdICYmIHRleHQuaW5kZXhPZihcIi9cIikgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KGluZGV4LCB0ZXh0KTtcbiAgICAgICAgbGV0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbdGhpcy5ncm91cE51bWJlck1vbnRoXSk7XG4gICAgICAgIGxldCBkYXkgPSBwYXJzZUludChtYXRjaFt0aGlzLmdyb3VwTnVtYmVyRGF5XSk7XG4gICAgICAgIGlmIChtb250aCA8IDEgfHwgbW9udGggPiAxMikge1xuICAgICAgICAgICAgaWYgKG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF5ID49IDEgJiYgZGF5IDw9IDEyICYmIG1vbnRoIDw9IDMxKSB7XG4gICAgICAgICAgICAgICAgICAgIFtkYXksIG1vbnRoXSA9IFttb250aCwgZGF5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5IDwgMSB8fCBkYXkgPiAzMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZE1vc3RMaWtlbHlBRFllYXIocmF3WWVhck51bWJlcik7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0LmFkZFRhZyhcInBhcnNlci9TbGFzaERhdGVGb3JtYXRQYXJzZXJcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCh0aGlzfGxhc3R8cGFzdHxuZXh0fGFmdGVyfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fTk9fQUJCUiA9IG5ldyBSZWdFeHAoYCh0aGlzfGxhc3R8cGFzdHxuZXh0fGFmdGVyfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGFsbG93QWJicmV2aWF0aW9ucztcbiAgICBjb25zdHJ1Y3RvcihhbGxvd0FiYnJldmlhdGlvbnMgPSB0cnVlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID0gYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbG93QWJicmV2aWF0aW9ucyA/IFBBVFRFUk4gOiBQQVRURVJOX05PX0FCQlI7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsYXN0XCI6XG4gICAgICAgICAgICBjYXNlIFwicGFzdFwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiA9IHJldmVyc2VEdXJhdGlvbihkdXJhdGlvbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgZHVyYXRpb24pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5mdW5jdGlvbiBJc1Bvc2l0aXZlRm9sbG93aW5nUmVmZXJlbmNlKHJlc3VsdCkge1xuICAgIHJldHVybiByZXN1bHQudGV4dC5tYXRjaCgvXlsrLV0vaSkgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIElzTmVnYXRpdmVGb2xsb3dpbmdSZWZlcmVuY2UocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9eLS9pKSAhPSBudWxsO1xufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZVJlbGF0aXZlQWZ0ZXJEYXRlUmVmaW5lciBleHRlbmRzIE1lcmdpbmdSZWZpbmVyIHtcbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgaWYgKCF0ZXh0QmV0d2Vlbi5tYXRjaCgvXlxccyokL2kpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIElzUG9zaXRpdmVGb2xsb3dpbmdSZWZlcmVuY2UobmV4dFJlc3VsdCkgfHwgSXNOZWdhdGl2ZUZvbGxvd2luZ1JlZmVyZW5jZShuZXh0UmVzdWx0KTtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0LCBjb250ZXh0KSB7XG4gICAgICAgIGxldCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG5leHRSZXN1bHQudGV4dCk7XG4gICAgICAgIGlmIChJc05lZ2F0aXZlRm9sbG93aW5nUmVmZXJlbmNlKG5leHRSZXN1bHQpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tRGF0ZShjdXJyZW50UmVzdWx0LnN0YXJ0LmRhdGUoKSksIHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2luZ1Jlc3VsdChjdXJyZW50UmVzdWx0LnJlZmVyZW5jZSwgY3VycmVudFJlc3VsdC5pbmRleCwgYCR7Y3VycmVudFJlc3VsdC50ZXh0fSR7dGV4dEJldHdlZW59JHtuZXh0UmVzdWx0LnRleHR9YCwgY29tcG9uZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RU5NZXJnZVJlbGF0aXZlQWZ0ZXJEYXRlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5mdW5jdGlvbiBoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKGJlZm9yZXxmcm9tKSQvaSkgIT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGhhc0ltcGxpZWRMYXRlclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKGFmdGVyfHNpbmNlKSQvaSkgIT0gbnVsbDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VSZWxhdGl2ZUZvbGxvd0J5RGF0ZVJlZmluZXIgZXh0ZW5kcyBNZXJnaW5nUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyokL2k7XG4gICAgfVxuICAgIHNob3VsZE1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBpZiAoIXRleHRCZXR3ZWVuLm1hdGNoKHRoaXMucGF0dGVybkJldHdlZW4oKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWhhc0ltcGxpZWRFYXJsaWVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSAmJiAhaGFzSW1wbGllZExhdGVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwiZGF5XCIpICYmICEhbmV4dFJlc3VsdC5zdGFydC5nZXQoXCJtb250aFwiKSAmJiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwieWVhclwiKTtcbiAgICB9XG4gICAgbWVyZ2VSZXN1bHRzKHRleHRCZXR3ZWVuLCBjdXJyZW50UmVzdWx0LCBuZXh0UmVzdWx0KSB7XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24oY3VycmVudFJlc3VsdC50ZXh0KTtcbiAgICAgICAgaWYgKGhhc0ltcGxpZWRFYXJsaWVyUmVmZXJlbmNlRGF0ZShjdXJyZW50UmVzdWx0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoUmVmZXJlbmNlV2l0aFRpbWV6b25lLmZyb21EYXRlKG5leHRSZXN1bHQuc3RhcnQuZGF0ZSgpKSwgZHVyYXRpb24pO1xuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdSZXN1bHQobmV4dFJlc3VsdC5yZWZlcmVuY2UsIGN1cnJlbnRSZXN1bHQuaW5kZXgsIGAke2N1cnJlbnRSZXN1bHQudGV4dH0ke3RleHRCZXR3ZWVufSR7bmV4dFJlc3VsdC50ZXh0fWAsIGNvbXBvbmVudHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVOTWVyZ2VSZWxhdGl2ZUZvbGxvd0J5RGF0ZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBZRUFSX1NVRkZJWF9QQVRURVJOID0gbmV3IFJlZ0V4cChgXlxcXFxzKigke1lFQVJfUEFUVEVSTn0pYCwgXCJpXCIpO1xuY29uc3QgWUVBUl9HUk9VUCA9IDE7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTkV4dHJhY3RZZWFyU3VmZml4UmVmaW5lciB7XG4gICAgcmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpIHtcbiAgICAgICAgcmVzdWx0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzRGF0ZVdpdGhVbmtub3duWWVhcigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3VmZml4ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHQudGV4dC5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSBZRUFSX1NVRkZJWF9QQVRURVJOLmV4ZWMoc3VmZml4KTtcbiAgICAgICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0udHJpbSgpLmxlbmd0aCA8PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEV4dHJhY3RpbmcgeWVhcjogJyR7bWF0Y2hbMF19JyBpbnRvIDogJHtyZXN1bHR9YCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTkV4dHJhY3RZZWFyU3VmZml4UmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Fic3RyYWN0UmVmaW5lcnMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVW5saWtlbHlGb3JtYXRGaWx0ZXIgZXh0ZW5kcyBGaWx0ZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cbiAgICBpc1ZhbGlkKGNvbnRleHQsIHJlc3VsdCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gcmVzdWx0LnRleHQudHJpbSgpO1xuICAgICAgICBpZiAodGV4dCA9PT0gY29udGV4dC50ZXh0LnRyaW0oKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQudG9Mb3dlckNhc2UoKSA9PT0gXCJtYXlcIikge1xuICAgICAgICAgICAgY29uc3QgdGV4dEJlZm9yZSA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcoMCwgcmVzdWx0LmluZGV4KS50cmltKCk7XG4gICAgICAgICAgICBpZiAoIXRleHRCZWZvcmUubWF0Y2goL1xcYihpbikkL2kpKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSZW1vdmluZyB1bmxpa2VseSByZXN1bHQ6ICR7cmVzdWx0fWApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGV4dC50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKFwidGhlIHNlY29uZFwiKSkge1xuICAgICAgICAgICAgY29uc3QgdGV4dEFmdGVyID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhyZXN1bHQuaW5kZXggKyByZXN1bHQudGV4dC5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgICAgIGlmICh0ZXh0QWZ0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuZGVidWcoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgUmVtb3ZpbmcgdW5saWtlbHkgcmVzdWx0OiAke3Jlc3VsdH1gKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FTlVubGlrZWx5Rm9ybWF0RmlsdGVyLmpzLm1hcCIsImltcG9ydCBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5Nb250aE5hbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTk1vbnRoTmFtZVBhcnNlci5qc1wiO1xuaW1wb3J0IEVOWWVhck1vbnRoRGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5ZZWFyTW9udGhEYXlQYXJzZXIuanNcIjtcbmltcG9ydCBFTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IEVOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvRU5NZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0VOTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgRU5DYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5DYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5DYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5DYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5XZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5XZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5SZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FTlJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRU5UaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZVJlbGF0aXZlQWZ0ZXJEYXRlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVBZnRlckRhdGVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRU5NZXJnZVJlbGF0aXZlRm9sbG93QnlEYXRlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FTk1lcmdlUmVsYXRpdmVGb2xsb3dCeURhdGVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgT3ZlcmxhcFJlbW92YWxSZWZpbmVyIGZyb20gXCIuLi8uLi9jb21tb24vcmVmaW5lcnMvT3ZlcmxhcFJlbW92YWxSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvRU5FeHRyYWN0WWVhclN1ZmZpeFJlZmluZXIuanNcIjtcbmltcG9ydCBFTlVubGlrZWx5Rm9ybWF0RmlsdGVyIGZyb20gXCIuL3JlZmluZXJzL0VOVW5saWtlbHlGb3JtYXRGaWx0ZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVORGVmYXVsdENvbmZpZ3VyYXRpb24ge1xuICAgIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5jcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCBsaXR0bGVFbmRpYW4pO1xuICAgICAgICBvcHRpb24ucGFyc2Vycy5wdXNoKG5ldyBFTkNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVOQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICAgICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgRU5Nb250aE5hbWVQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVOUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgICAgICBvcHRpb24ucGFyc2Vycy5wdXNoKG5ldyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIoKSk7XG4gICAgICAgIG9wdGlvbi5yZWZpbmVycy5wdXNoKG5ldyBFTlVubGlrZWx5Rm9ybWF0RmlsdGVyKCkpO1xuICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cbiAgICBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgICAgICBuZXcgRU5XZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICAgICAgbmV3IEVOU2xhc2hNb250aEZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVFeHByZXNzaW9uUGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcmVmaW5lcnM6IFtuZXcgRU5NZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICAgICAgfSwgc3RyaWN0TW9kZSk7XG4gICAgICAgIG9wdGlvbnMucGFyc2Vycy51bnNoaWZ0KG5ldyBFTlllYXJNb250aERheVBhcnNlcihzdHJpY3RNb2RlKSk7XG4gICAgICAgIG9wdGlvbnMucmVmaW5lcnMudW5zaGlmdChuZXcgRU5NZXJnZVJlbGF0aXZlRm9sbG93QnlEYXRlUmVmaW5lcigpKTtcbiAgICAgICAgb3B0aW9ucy5yZWZpbmVycy51bnNoaWZ0KG5ldyBFTk1lcmdlUmVsYXRpdmVBZnRlckRhdGVSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnVuc2hpZnQobmV3IE92ZXJsYXBSZW1vdmFsUmVmaW5lcigpKTtcbiAgICAgICAgb3B0aW9ucy5yZWZpbmVycy5wdXNoKG5ldyBFTk1lcmdlRGF0ZVRpbWVSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnB1c2gobmV3IEVORXh0cmFjdFllYXJTdWZmaXhSZWZpbmVyKCkpO1xuICAgICAgICBvcHRpb25zLnJlZmluZXJzLnB1c2gobmV3IEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCkpO1xuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWd1cmF0aW9uLmpzLm1hcCIsImltcG9ydCB7IFJlZmVyZW5jZVdpdGhUaW1lem9uZSwgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQgfSBmcm9tIFwiLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgRU5EZWZhdWx0Q29uZmlndXJhdGlvbiBmcm9tIFwiLi9sb2NhbGVzL2VuL2NvbmZpZ3VyYXRpb24uanNcIjtcbmV4cG9ydCBjbGFzcyBDaHJvbm8ge1xuICAgIHBhcnNlcnM7XG4gICAgcmVmaW5lcnM7XG4gICAgZGVmYXVsdENvbmZpZyA9IG5ldyBFTkRlZmF1bHRDb25maWd1cmF0aW9uKCk7XG4gICAgY29uc3RydWN0b3IoY29uZmlndXJhdGlvbikge1xuICAgICAgICBjb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbiB8fCB0aGlzLmRlZmF1bHRDb25maWcuY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpO1xuICAgICAgICB0aGlzLnBhcnNlcnMgPSBbLi4uY29uZmlndXJhdGlvbi5wYXJzZXJzXTtcbiAgICAgICAgdGhpcy5yZWZpbmVycyA9IFsuLi5jb25maWd1cmF0aW9uLnJlZmluZXJzXTtcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2hyb25vKHtcbiAgICAgICAgICAgIHBhcnNlcnM6IFsuLi50aGlzLnBhcnNlcnNdLFxuICAgICAgICAgICAgcmVmaW5lcnM6IFsuLi50aGlzLnJlZmluZXJzXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBhcnNlRGF0ZSh0ZXh0LCByZWZlcmVuY2VEYXRlLCBvcHRpb24pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMucGFyc2UodGV4dCwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9uKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMubGVuZ3RoID4gMCA/IHJlc3VsdHNbMF0uc3RhcnQuZGF0ZSgpIDogbnVsbDtcbiAgICB9XG4gICAgcGFyc2UodGV4dCwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgUGFyc2luZ0NvbnRleHQodGV4dCwgcmVmZXJlbmNlRGF0ZSwgb3B0aW9uKTtcbiAgICAgICAgbGV0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgdGhpcy5wYXJzZXJzLmZvckVhY2goKHBhcnNlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVzdWx0cyA9IENocm9uby5leGVjdXRlUGFyc2VyKGNvbnRleHQsIHBhcnNlcik7XG4gICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQocGFyc2VkUmVzdWx0cyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhLmluZGV4IC0gYi5pbmRleDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVmaW5lcnMuZm9yRWFjaChmdW5jdGlvbiAocmVmaW5lcikge1xuICAgICAgICAgICAgcmVzdWx0cyA9IHJlZmluZXIucmVmaW5lKGNvbnRleHQsIHJlc3VsdHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHN0YXRpYyBleGVjdXRlUGFyc2VyKGNvbnRleHQsIHBhcnNlcikge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gW107XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBwYXJzZXIucGF0dGVybihjb250ZXh0KTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gY29udGV4dC50ZXh0O1xuICAgICAgICBsZXQgcmVtYWluaW5nVGV4dCA9IGNvbnRleHQudGV4dDtcbiAgICAgICAgbGV0IG1hdGNoID0gcGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXggKyBvcmlnaW5hbFRleHQubGVuZ3RoIC0gcmVtYWluaW5nVGV4dC5sZW5ndGg7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyLmV4dHJhY3QoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gb3JpZ2luYWxUZXh0LnN1YnN0cmluZyhtYXRjaC5pbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIG1hdGNoID0gcGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHBhcnNlZFJlc3VsdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUGFyc2luZ1Jlc3VsdCkge1xuICAgICAgICAgICAgICAgIHBhcnNlZFJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFBhcnNpbmdDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0LnN0YXJ0ID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkUmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZEluZGV4ID0gcGFyc2VkUmVzdWx0LmluZGV4O1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVGV4dCA9IHBhcnNlZFJlc3VsdC50ZXh0O1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZygoKSA9PiBjb25zb2xlLmxvZyhgJHtwYXJzZXIuY29uc3RydWN0b3IubmFtZX0gZXh0cmFjdGVkIChhdCBpbmRleD0ke3BhcnNlZEluZGV4fSkgJyR7cGFyc2VkVGV4dH0nYCkpO1xuICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHBhcnNlZFJlc3VsdCk7XG4gICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gb3JpZ2luYWxUZXh0LnN1YnN0cmluZyhwYXJzZWRJbmRleCArIHBhcnNlZFRleHQubGVuZ3RoKTtcbiAgICAgICAgICAgIG1hdGNoID0gcGF0dGVybi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBQYXJzaW5nQ29udGV4dCB7XG4gICAgdGV4dDtcbiAgICBvcHRpb247XG4gICAgcmVmZXJlbmNlO1xuICAgIHJlZkRhdGU7XG4gICAgY29uc3RydWN0b3IodGV4dCwgcmVmRGF0ZSwgb3B0aW9uKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIHRoaXMub3B0aW9uID0gb3B0aW9uID8/IHt9O1xuICAgICAgICB0aGlzLnJlZmVyZW5jZSA9IFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tSW5wdXQocmVmRGF0ZSwgdGhpcy5vcHRpb24udGltZXpvbmVzKTtcbiAgICAgICAgdGhpcy5yZWZEYXRlID0gdGhpcy5yZWZlcmVuY2UuaW5zdGFudDtcbiAgICB9XG4gICAgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoY29tcG9uZW50cykge1xuICAgICAgICBpZiAoY29tcG9uZW50cyBpbnN0YW5jZW9mIFBhcnNpbmdDb21wb25lbnRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdDb21wb25lbnRzKHRoaXMucmVmZXJlbmNlLCBjb21wb25lbnRzKTtcbiAgICB9XG4gICAgY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgdGV4dE9yRW5kSW5kZXgsIHN0YXJ0Q29tcG9uZW50cywgZW5kQ29tcG9uZW50cykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gdHlwZW9mIHRleHRPckVuZEluZGV4ID09PSBcInN0cmluZ1wiID8gdGV4dE9yRW5kSW5kZXggOiB0aGlzLnRleHQuc3Vic3RyaW5nKGluZGV4LCB0ZXh0T3JFbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gc3RhcnRDb21wb25lbnRzID8gdGhpcy5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cyhzdGFydENvbXBvbmVudHMpIDogbnVsbDtcbiAgICAgICAgY29uc3QgZW5kID0gZW5kQ29tcG9uZW50cyA/IHRoaXMuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoZW5kQ29tcG9uZW50cykgOiBudWxsO1xuICAgICAgICByZXR1cm4gbmV3IFBhcnNpbmdSZXN1bHQodGhpcy5yZWZlcmVuY2UsIGluZGV4LCB0ZXh0LCBzdGFydCwgZW5kKTtcbiAgICB9XG4gICAgZGVidWcoYmxvY2spIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9uLmRlYnVnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb24uZGVidWcgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uLmRlYnVnKGJsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLm9wdGlvbi5kZWJ1ZztcbiAgICAgICAgICAgICAgICBoYW5kbGVyLmRlYnVnKGJsb2NrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNocm9uby5qcy5tYXAiLCJpbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgRU5EZWZhdWx0Q29uZmlndXJhdGlvbiBmcm9tIFwiLi9jb25maWd1cmF0aW9uLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY29uZmlndXJhdGlvbiA9IG5ldyBFTkRlZmF1bHRDb25maWd1cmF0aW9uKCk7XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjb25maWd1cmF0aW9uLmNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oZmFsc2UpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNvbmZpZ3VyYXRpb24uY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlLCBmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IEdCID0gbmV3IENocm9ubyhjb25maWd1cmF0aW9uLmNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERVRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86dW18dm9uKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YmlzKVxcXFxzKlwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaFswXS5tYXRjaCgvXlxccypcXGR7NH1cXHMqJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIFwic29ubnRhZ1wiOiAwLFxuICAgIFwic29cIjogMCxcbiAgICBcIm1vbnRhZ1wiOiAxLFxuICAgIFwibW9cIjogMSxcbiAgICBcImRpZW5zdGFnXCI6IDIsXG4gICAgXCJkaVwiOiAyLFxuICAgIFwibWl0dHdvY2hcIjogMyxcbiAgICBcIm1pXCI6IDMsXG4gICAgXCJkb25uZXJzdGFnXCI6IDQsXG4gICAgXCJkb1wiOiA0LFxuICAgIFwiZnJlaXRhZ1wiOiA1LFxuICAgIFwiZnJcIjogNSxcbiAgICBcInNhbXN0YWdcIjogNixcbiAgICBcInNhXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJqYW51YXJcIjogMSxcbiAgICBcImrDpG5uZXJcIjogMSxcbiAgICBcImphbm5lclwiOiAxLFxuICAgIFwiamFuXCI6IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgXCJmZWJydWFyXCI6IDIsXG4gICAgXCJmZWJlclwiOiAyLFxuICAgIFwiZmViXCI6IDIsXG4gICAgXCJmZWIuXCI6IDIsXG4gICAgXCJtw6RyelwiOiAzLFxuICAgIFwibWFlcnpcIjogMyxcbiAgICBcIm3DpHJcIjogMyxcbiAgICBcIm3DpHIuXCI6IDMsXG4gICAgXCJtcnpcIjogMyxcbiAgICBcIm1yei5cIjogMyxcbiAgICBcImFwcmlsXCI6IDQsXG4gICAgXCJhcHJcIjogNCxcbiAgICBcImFwci5cIjogNCxcbiAgICBcIm1haVwiOiA1LFxuICAgIFwianVuaVwiOiA2LFxuICAgIFwianVuXCI6IDYsXG4gICAgXCJqdW4uXCI6IDYsXG4gICAgXCJqdWxpXCI6IDcsXG4gICAgXCJqdWxcIjogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBcImF1Z3VzdFwiOiA4LFxuICAgIFwiYXVnXCI6IDgsXG4gICAgXCJhdWcuXCI6IDgsXG4gICAgXCJzZXB0ZW1iZXJcIjogOSxcbiAgICBcInNlcFwiOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIFwic2VwdFwiOiA5LFxuICAgIFwic2VwdC5cIjogOSxcbiAgICBcIm9rdG9iZXJcIjogMTAsXG4gICAgXCJva3RcIjogMTAsXG4gICAgXCJva3QuXCI6IDEwLFxuICAgIFwibm92ZW1iZXJcIjogMTEsXG4gICAgXCJub3ZcIjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIFwiZGV6ZW1iZXJcIjogMTIsXG4gICAgXCJkZXpcIjogMTIsXG4gICAgXCJkZXouXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcImVpbnNcIjogMSxcbiAgICBcImVpbmVcIjogMSxcbiAgICBcImVpbmVtXCI6IDEsXG4gICAgXCJlaW5lblwiOiAxLFxuICAgIFwiZWluZXJcIjogMSxcbiAgICBcInp3ZWlcIjogMixcbiAgICBcImRyZWlcIjogMyxcbiAgICBcInZpZXJcIjogNCxcbiAgICBcImbDvG5mXCI6IDUsXG4gICAgXCJmdWVuZlwiOiA1LFxuICAgIFwic2VjaHNcIjogNixcbiAgICBcInNpZWJlblwiOiA3LFxuICAgIFwiYWNodFwiOiA4LFxuICAgIFwibmV1blwiOiA5LFxuICAgIFwiemVoblwiOiAxMCxcbiAgICBcImVsZlwiOiAxMSxcbiAgICBcInp3w7ZsZlwiOiAxMixcbiAgICBcInp3b2VsZlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUlkgPSB7XG4gICAgc2VrOiBcInNlY29uZFwiLFxuICAgIHNla3VuZGU6IFwic2Vjb25kXCIsXG4gICAgc2VrdW5kZW46IFwic2Vjb25kXCIsXG4gICAgbWluOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZTogXCJtaW51dGVcIixcbiAgICBtaW51dGVuOiBcIm1pbnV0ZVwiLFxuICAgIGg6IFwiaG91clwiLFxuICAgIHN0ZDogXCJob3VyXCIsXG4gICAgc3R1bmRlOiBcImhvdXJcIixcbiAgICBzdHVuZGVuOiBcImhvdXJcIixcbiAgICB0YWc6IFwiZGF5XCIsXG4gICAgdGFnZTogXCJkYXlcIixcbiAgICB0YWdlbjogXCJkYXlcIixcbiAgICB3b2NoZTogXCJ3ZWVrXCIsXG4gICAgd29jaGVuOiBcIndlZWtcIixcbiAgICBtb25hdDogXCJtb250aFwiLFxuICAgIG1vbmF0ZTogXCJtb250aFwiLFxuICAgIG1vbmF0ZW46IFwibW9udGhcIixcbiAgICBtb25hdHM6IFwibW9udGhcIixcbiAgICBxdWFydGFsOiBcInF1YXJ0ZXJcIixcbiAgICBxdWFydGFsczogXCJxdWFydGVyXCIsXG4gICAgcXVhcnRhbGU6IFwicXVhcnRlclwiLFxuICAgIHF1YXJ0YWxlbjogXCJxdWFydGVyXCIsXG4gICAgYTogXCJ5ZWFyXCIsXG4gICAgajogXCJ5ZWFyXCIsXG4gICAganI6IFwieWVhclwiLFxuICAgIGphaHI6IFwieWVhclwiLFxuICAgIGphaHJlOiBcInllYXJcIixcbiAgICBqYWhyZW46IFwieWVhclwiLFxuICAgIGphaHJlczogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfGhhbGI/fGhhbGJlP3xlaW5pZ2VuP3x3ZW5pZ2VuP3xtZWhyZXJlbj8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJlaW5cIiB8fCBudW0gPT09IFwiZWluZXJcIiB8fCBudW0gPT09IFwiZWluZW1cIiB8fCBudW0gPT09IFwiZWluZW5cIiB8fCBudW0gPT09IFwiZWluZVwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3dlbmlnZW4vKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9oYWxiLykgfHwgbnVtLm1hdGNoKC9oYWxiZW4vKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL2VpbmlnZW4vKSkge1xuICAgICAgICByZXR1cm4gMztcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9tZWhyZXJlbi8pKSB7XG4gICAgICAgIHJldHVybiA3O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IGAoPzpbMC05XXsxLDR9KD86XFxcXHMqW3ZuXVxcXFwuP1xcXFxzKig/OkMoPzpocik/fCg/OnVcXFxcLj98ZFxcXFwuPyg/OlxcXFxzKmdcXFxcLj8pPyk/XFxcXHMqWilcXFxcLj98XFxcXHMqKD86dVxcXFwuP3xkXFxcXC4/KD86XFxcXHMqZ1xcXFwuKT8pXFxcXHMqWlxcXFwuPyk/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC92L2kudGVzdChtYXRjaCkpIHtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2dpLCBcIlwiKSk7XG4gICAgfVxuICAgIGlmICgvbi9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2dpLCBcIlwiKSk7XG4gICAgfVxuICAgIGlmICgvei9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2dpLCBcIlwiKSk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnRzO1xufVxuZnVuY3Rpb24gY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaFsxXSk7XG4gICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgIGZyYWdtZW50c1t1bml0XSA9IG51bTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86YVttbl1cXFxccyo/KT9cIiArXG4gICAgXCIoPzooZGllc2VbbW5dfGxldHp0ZVttbl18big/OsOkfGFlKWNoc3RlW21uXSlcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihkaWVzZXxsZXR6dGV8big/OsOkfGFlKWNoc3RlKVxcXFxzKndvY2hlKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBQUkVGSVhfR1JPVVAgPSAxO1xuY29uc3QgU1VGRklYX0dST1VQID0gMztcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1NVRkZJWF9HUk9VUF07XG4gICAgICAgIGxldCBtb2RpZmllcldvcmQgPSBwcmVmaXggfHwgcG9zdGZpeDtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkIHx8IFwiXCI7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9sZXR6dGUvKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtb2RpZmllcldvcmQubWF0Y2goL2Noc3RlLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9kaWVzZS8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5jb25zdCBGSVJTVF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXnxcXFxcc3xUKVwiICtcbiAgICBcIig/Oig/OnVtfHZvbilcXFxccyopP1wiICtcbiAgICBcIihcXFxcZHsxLDJ9KSg/Omh8Oik/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86bXw6KT8pP1wiICtcbiAgICBcIig/OihcXFxcZHsxLDJ9KSg/OnMpPyk/XCIgK1xuICAgIFwiKD86XFxcXHMqVWhyKT9cIiArXG4gICAgXCIoPzpcXFxccyoobW9yZ2Vuc3x2b3JtaXR0YWdzfG5hY2htaXR0YWdzfGFiZW5kc3xuYWNodHN8YW1cXFxccysoPzpNb3JnZW58Vm9ybWl0dGFnfE5hY2htaXR0YWd8QWJlbmQpfGluXFxcXHMrZGVyXFxcXHMrTmFjaHQpKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBTRUNPTkRfUkVHX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXlxcXFxzKihcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YmlzKD86XFxcXHMrdW0pP3xcXFxcPylcXFxccypcIiArXG4gICAgXCIoXFxcXGR7MSwyfSkoPzpofDopP1wiICtcbiAgICBcIig/OihcXFxcZHsxLDJ9KSg/Om18Oik/KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzpzKT8pP1wiICtcbiAgICBcIig/OlxcXFxzKlVocik/XCIgK1xuICAgIFwiKD86XFxcXHMqKG1vcmdlbnN8dm9ybWl0dGFnc3xuYWNobWl0dGFnc3xhYmVuZHN8bmFjaHRzfGFtXFxcXHMrKD86TW9yZ2VufFZvcm1pdHRhZ3xOYWNobWl0dGFnfEFiZW5kKXxpblxcXFxzK2RlclxcXFxzK05hY2h0KSk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgSE9VUl9HUk9VUCA9IDI7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSAzO1xuY29uc3QgU0VDT05EX0dST1VQID0gNDtcbmNvbnN0IEFNX1BNX0hPVVJfR1JPVVAgPSA1O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIEZJUlNUX1JFR19QQVRURVJOO1xuICAgIH1cbiAgICBleHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCArIG1hdGNoWzFdLmxlbmd0aCwgbWF0Y2hbMF0uc3Vic3RyaW5nKG1hdGNoWzFdLmxlbmd0aCkpO1xuICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGR7NH0kLykpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydCA9IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5leHRyYWN0VGltZUNvbXBvbmVudChyZXN1bHQuc3RhcnQuY2xvbmUoKSwgbWF0Y2gpO1xuICAgICAgICBpZiAoIXJlc3VsdC5zdGFydCkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVtYWluaW5nVGV4dCA9IGNvbnRleHQudGV4dC5zdWJzdHJpbmcobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBjb25zdCBzZWNvbmRNYXRjaCA9IFNFQ09ORF9SRUdfUEFUVEVSTi5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2gpIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQgPSBERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuZXh0cmFjdFRpbWVDb21wb25lbnQocmVzdWx0LnN0YXJ0LmNsb25lKCksIHNlY29uZE1hdGNoKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQuZW5kKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnRleHQgKz0gc2Vjb25kTWF0Y2hbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgc3RhdGljIGV4dHJhY3RUaW1lQ29tcG9uZW50KGV4dHJhY3RpbmdDb21wb25lbnRzLCBtYXRjaCkge1xuICAgICAgICBsZXQgaG91ciA9IDA7XG4gICAgICAgIGxldCBtaW51dGUgPSAwO1xuICAgICAgICBsZXQgbWVyaWRpZW0gPSBudWxsO1xuICAgICAgICBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWludXRlID49IDYwIHx8IGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtLm1hdGNoKC9tb3JnZW58dm9ybWl0dGFnLykpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtLm1hdGNoKC9uYWNobWl0dGFnfGFiZW5kLykpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLlBNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFtcG0ubWF0Y2goL25hY2h0LykpIHtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtTRUNPTkRfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGV4dHJhY3RpbmdDb21wb25lbnRzLmFzc2lnbihcInNlY29uZFwiLCBzZWNvbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHRyYWN0aW5nQ29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERVNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKGJpcyg/OlxccyooPzphbXx6dW0pKT98LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHx1bXxhbXwsfC0pP1xcXFxzKiRcIik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBERUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oZGllc2VuKT9cXHMqKG1vcmdlbnx2b3JtaXR0YWd8bWl0dGFncz98bmFjaG1pdHRhZ3xhYmVuZHxuYWNodHxtaXR0ZXJuYWNodCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkUGF0dGVybiA9IG1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICByZXR1cm4gREVDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkUGF0dGVybik7XG4gICAgfVxuICAgIHN0YXRpYyBleHRyYWN0VGltZUNvbXBvbmVudHMoY29tcG9uZW50LCB0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgc3dpdGNoICh0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgICAgIGNhc2UgXCJtb3JnZW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInZvcm1pdHRhZ1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgOSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWl0dGFnXCI6XG4gICAgICAgICAgICBjYXNlIFwibWl0dGFnc1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5hY2htaXR0YWdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJhYmVuZFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5hY2h0XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWl0dGVybmFjaHRcIjpcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmdldChcImhvdXJcIikgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGREdXJhdGlvbkFzSW1wbGllZCh7IFwiZGF5XCI6IDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERUNhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IERFQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9ERUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChqZXR6dHxoZXV0ZXxtb3JnZW58w7xiZXJtb3JnZW58dWViZXJtb3JnZW58Z2VzdGVybnx2b3JnZXN0ZXJufGxldHp0ZVxcXFxzKm5hY2h0KWAgK1xuICAgIGAoPzpcXFxccyoobW9yZ2VufHZvcm1pdHRhZ3xtaXR0YWdzP3xuYWNobWl0dGFnfGFiZW5kfG5hY2h0fG1pdHRlcm5hY2h0KSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBUSU1FX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCk7XG4gICAgICAgIGNvbnN0IGRhdGVLZXl3b3JkID0gKG1hdGNoW0RBVEVfR1JPVVBdIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkID0gKG1hdGNoW1RJTUVfR1JPVVBdIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAoZGF0ZUtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJqZXR6dFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJoZXV0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogMSB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLDvGJlcm1vcmdlblwiOlxuICAgICAgICAgICAgY2FzZSBcInVlYmVybW9yZ2VuXCI6XG4gICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IGFkZER1cmF0aW9uKHRhcmdldERhdGUsIHsgZGF5OiAyIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImdlc3Rlcm5cIjpcbiAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IC0xIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInZvcmdlc3Rlcm5cIjpcbiAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IC0yIH0pO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZUtleXdvcmQubWF0Y2goL2xldHp0ZVxccypuYWNodC8pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXREYXRlLmdldEhvdXJzKCkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXREYXRlID0gYWRkRHVyYXRpb24odGFyZ2V0RGF0ZSwgeyBkYXk6IC0xIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lS2V5d29yZCkge1xuICAgICAgICAgICAgY29tcG9uZW50ID0gREVDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzphbVxcXFxzKj8pP1wiICtcbiAgICBcIig/OmRlblxcXFxzKj8pP1wiICtcbiAgICBgKFswLTldezEsMn0pXFxcXC5gICtcbiAgICBgKD86XFxcXHMqKD86YmlzKD86XFxcXHMqKD86YW18enVtKSk/fFxcXFwtfFxcXFzigJN8XFxcXHMpXFxcXHMqKFswLTldezEsMn0pXFxcXC4/KT9cXFxccypgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86KD86LXwvfCw/XFxcXHMqKSgke1lFQVJfUEFUVEVSTn0oPyFbXlxcXFxzXVxcXFxkKSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBOVU1CRVJfUEFUVEVSTiwgcGFyc2VOdW1iZXJQYXR0ZXJuLCBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgREVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86XFxcXHMqKCg/Om7DpGNoc3RlfGtvbW1lbmRlfGZvbGdlbmRlfGxldHp0ZXx2ZXJnYW5nZW5lfHZvcmlnZXx2b3IoPzpoZXJ8YW4pZ2VnYW5nZW5lKSg/OnN8bnxtfHIpP3x2b3J8aW4pXFxcXHMqKT9gICtcbiAgICAgICAgICAgIGAoJHtOVU1CRVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKihuw6RjaHN0ZXxrb21tZW5kZXxmb2xnZW5kZXxsZXR6dGV8dmVyZ2FuZ2VuZXx2b3JpZ2V8dm9yKD86aGVyfGFuKWdlZ2FuZ2VuZSkoPzpzfG58bXxyKT8pP2AgK1xuICAgICAgICAgICAgYFxcXFxzKigke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbnVtID0gbWF0Y2hbMl0gPyBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMl0pIDogMTtcbiAgICAgICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzRdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBsZXQgdGltZVVuaXRzID0ge307XG4gICAgICAgIHRpbWVVbml0c1t1bml0XSA9IG51bTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbWF0Y2hbMV0gfHwgbWF0Y2hbM10gfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXIgPSBtb2RpZmllci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC92b3IvLnRlc3QobW9kaWZpZXIpIHx8IC9sZXR6dGUvLnRlc3QobW9kaWZpZXIpIHx8IC92ZXJnYW5nZW4vLnRlc3QobW9kaWZpZXIpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERFVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86aW58ZsO8cnx3w6RocmVuZClcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9REVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgSVNPRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9JU09Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBERVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IERFV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IERFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0RFTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgREVNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9ERU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgREVDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgREVDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvREVDYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgREVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9ERU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IERFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0RFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IERFVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9ERVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBERUNhc3VhbFRpbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgREVDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IERFVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgSVNPRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgREVUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IERFU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IERFTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgREVXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgREVUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBERU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLCBuZXcgREVNZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5pbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAvKG1haW50ZW5hbnR8YXVqb3VyZCdodWl8ZGVtYWlufGhpZXJ8Y2V0dGVcXHMqbnVpdHxsYVxccyp2ZWlsbGUpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAobG93ZXJUZXh0KSB7XG4gICAgICAgICAgICBjYXNlIFwibWFpbnRlbmFudFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiYXVqb3VyZCdodWlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaGllclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiZGVtYWluXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC9jZXR0ZVxccypudWl0LykpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobG93ZXJUZXh0Lm1hdGNoKC9sYVxccyp2ZWlsbGUvKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0RheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNEYXkuc2V0RGF0ZShwcmV2aW91c0RheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBwcmV2aW91c0RheSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gLyhjZXQ/KT9cXHMqKG1hdGlufHNvaXJ8YXByw6hzLW1pZGl8YXByZW18YSBtaWRpfMOgIG1pbnVpdCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHN1ZmZpeExvd2VyID0gbWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKHN1ZmZpeExvd2VyKSB7XG4gICAgICAgICAgICBjYXNlIFwiYXByw6hzLW1pZGlcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhcHJlbVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTQpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic29pclwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWF0aW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYSBtaWRpXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCLDoCBtaW51aXRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzpbw6BhXSlcXFxccyopP1wiO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfFvDoGFdfFxcXFw/KVxcXFxzKlwiO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaFswXS5tYXRjaCgvXlxccypcXGR7NH1cXHMqJC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXIuZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeXFxcXHMqKFR8w6B8YXxhdXx2ZXJzfGRlfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUk1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijDoHxhfGF1fC0pXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUk1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJkaW1hbmNoZVwiOiAwLFxuICAgIFwiZGltXCI6IDAsXG4gICAgXCJsdW5kaVwiOiAxLFxuICAgIFwibHVuXCI6IDEsXG4gICAgXCJtYXJkaVwiOiAyLFxuICAgIFwibWFyXCI6IDIsXG4gICAgXCJtZXJjcmVkaVwiOiAzLFxuICAgIFwibWVyXCI6IDMsXG4gICAgXCJqZXVkaVwiOiA0LFxuICAgIFwiamV1XCI6IDQsXG4gICAgXCJ2ZW5kcmVkaVwiOiA1LFxuICAgIFwidmVuXCI6IDUsXG4gICAgXCJzYW1lZGlcIjogNixcbiAgICBcInNhbVwiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwiamFudmllclwiOiAxLFxuICAgIFwiamFuXCI6IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgXCJmw6l2cmllclwiOiAyLFxuICAgIFwiZsOpdlwiOiAyLFxuICAgIFwiZsOpdi5cIjogMixcbiAgICBcImZldnJpZXJcIjogMixcbiAgICBcImZldlwiOiAyLFxuICAgIFwiZmV2LlwiOiAyLFxuICAgIFwibWFyc1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhdnJpbFwiOiA0LFxuICAgIFwiYXZyXCI6IDQsXG4gICAgXCJhdnIuXCI6IDQsXG4gICAgXCJtYWlcIjogNSxcbiAgICBcImp1aW5cIjogNixcbiAgICBcImp1blwiOiA2LFxuICAgIFwianVpbGxldFwiOiA3LFxuICAgIFwianVpbFwiOiA3LFxuICAgIFwianVsXCI6IDcsXG4gICAgXCJqdWwuXCI6IDcsXG4gICAgXCJhb8O7dFwiOiA4LFxuICAgIFwiYW91dFwiOiA4LFxuICAgIFwic2VwdGVtYnJlXCI6IDksXG4gICAgXCJzZXBcIjogOSxcbiAgICBcInNlcC5cIjogOSxcbiAgICBcInNlcHRcIjogOSxcbiAgICBcInNlcHQuXCI6IDksXG4gICAgXCJvY3RvYnJlXCI6IDEwLFxuICAgIFwib2N0XCI6IDEwLFxuICAgIFwib2N0LlwiOiAxMCxcbiAgICBcIm5vdmVtYnJlXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImTDqWNlbWJyZVwiOiAxMixcbiAgICBcImRlY2VtYnJlXCI6IDEyLFxuICAgIFwiZGVjXCI6IDEyLFxuICAgIFwiZGVjLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ1blwiOiAxLFxuICAgIFwiZGV1eFwiOiAyLFxuICAgIFwidHJvaXNcIjogMyxcbiAgICBcInF1YXRyZVwiOiA0LFxuICAgIFwiY2lucVwiOiA1LFxuICAgIFwic2l4XCI6IDYsXG4gICAgXCJzZXB0XCI6IDcsXG4gICAgXCJodWl0XCI6IDgsXG4gICAgXCJuZXVmXCI6IDksXG4gICAgXCJkaXhcIjogMTAsXG4gICAgXCJvbnplXCI6IDExLFxuICAgIFwiZG91emVcIjogMTIsXG4gICAgXCJ0cmVpemVcIjogMTMsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VjXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWNvbmRlXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWNvbmRlc1wiOiBcInNlY29uZFwiLFxuICAgIFwibWluXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW5zXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dGVcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0ZXNcIjogXCJtaW51dGVcIixcbiAgICBcImhcIjogXCJob3VyXCIsXG4gICAgXCJoclwiOiBcImhvdXJcIixcbiAgICBcImhyc1wiOiBcImhvdXJcIixcbiAgICBcImhldXJlXCI6IFwiaG91clwiLFxuICAgIFwiaGV1cmVzXCI6IFwiaG91clwiLFxuICAgIFwiam91clwiOiBcImRheVwiLFxuICAgIFwiam91cnNcIjogXCJkYXlcIixcbiAgICBcInNlbWFpbmVcIjogXCJ3ZWVrXCIsXG4gICAgXCJzZW1haW5lc1wiOiBcIndlZWtcIixcbiAgICBcIm1vaXNcIjogXCJtb250aFwiLFxuICAgIFwidHJpbWVzdHJlXCI6IFwicXVhcnRlclwiLFxuICAgIFwidHJpbWVzdHJlc1wiOiBcInF1YXJ0ZXJcIixcbiAgICBcImFuc1wiOiBcInllYXJcIixcbiAgICBcImFubsOpZVwiOiBcInllYXJcIixcbiAgICBcImFubsOpZXNcIjogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18WzAtOV0rfFswLTldK1xcXFwuWzAtOV0rfHVuZT9cXFxcYnxxdWVscXVlcz98ZGVtaS0/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwidW5lXCIgfHwgbnVtID09PSBcInVuXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvcXVlbHF1ZXM/LykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvZGVtaS0/LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OlswLTldezEsMn0oPzplcik/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGxldCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIG51bSA9IG51bS5yZXBsYWNlKC8oPzplcikkL2ksIFwiXCIpO1xuICAgIHJldHVybiBwYXJzZUludChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IGAoPzpbMS05XVswLTldezAsM31cXFxccyooPzpBQ3xBRHxwXFxcXC5cXFxccypDKD86aHI/KT9cXFxcLlxcXFxzKm5cXFxcLil8WzEtMl1bMC05XXszfXxbNS05XVswLTldKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9BQy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvQkMvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoL0FEL2kudGVzdChtYXRjaCkgfHwgL0MvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL1teXFxkXSsvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGxldCB5ZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyID4gNTApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMTkwMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMjAwMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geWVhck51bWJlcjtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCw1fSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KVxcXFxzezAsNX1gO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgV0VFS0RBWV9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86KD86XFxcXCx8XFxcXCh8XFxcXO+8iClcXFxccyopP1wiICtcbiAgICBcIig/Oig/OmNlKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKGRlcm5pZXJ8cHJvY2hhaW4pXFxcXHMqKT9cIiArXG4gICAgXCIoPz1cXFxcV3xcXFxcZHwkKVwiLCBcImlcIik7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMTtcbmNvbnN0IFBPU1RGSVhfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGlmICh3ZWVrZGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdWZmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgc3VmZml4ID0gc3VmZml4IHx8IFwiXCI7XG4gICAgICAgIHN1ZmZpeCA9IHN1ZmZpeC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAoc3VmZml4ID09IFwiZGVybmllclwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN1ZmZpeCA9PSBcInByb2NoYWluXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCB3ZWVrZGF5LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5jb25zdCBGSVJTVF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXnxcXFxcc3xUKVwiICtcbiAgICBcIig/Oig/OlvDoGFdKVxcXFxzKik/XCIgK1xuICAgIFwiKFxcXFxkezEsMn0pKD86aHw6KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzptfDopPyk/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86c3w6KT8pP1wiICtcbiAgICBcIig/OlxcXFxzKihBXFxcXC5NXFxcXC58UFxcXFwuTVxcXFwufEFNP3xQTT8pKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBTRUNPTkRfUkVHX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXlxcXFxzKihcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8W8OgYV18XFxcXD8pXFxcXHMqXCIgK1xuICAgIFwiKFxcXFxkezEsMn0pKD86aHw6KT9cIiArXG4gICAgXCIoPzooXFxcXGR7MSwyfSkoPzptfDopPyk/XCIgK1xuICAgIFwiKD86KFxcXFxkezEsMn0pKD86c3w6KT8pP1wiICtcbiAgICBcIig/OlxcXFxzKihBXFxcXC5NXFxcXC58UFxcXFwuTVxcXFwufEFNP3xQTT8pKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBIT1VSX0dST1VQID0gMjtcbmNvbnN0IE1JTlVURV9HUk9VUCA9IDM7XG5jb25zdCBTRUNPTkRfR1JPVVAgPSA0O1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUCA9IDU7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUlNwZWNpZmljVGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIHBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gRklSU1RfUkVHX1BBVFRFUk47XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4ICsgbWF0Y2hbMV0ubGVuZ3RoLCBtYXRjaFswXS5zdWJzdHJpbmcobWF0Y2hbMV0ubGVuZ3RoKSk7XG4gICAgICAgIGlmIChyZXN1bHQudGV4dC5tYXRjaCgvXlxcZHs0fSQvKSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gRlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50KHJlc3VsdC5zdGFydC5jbG9uZSgpLCBtYXRjaCk7XG4gICAgICAgIGlmICghcmVzdWx0LnN0YXJ0KSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZW1haW5pbmdUZXh0ID0gY29udGV4dC50ZXh0LnN1YnN0cmluZyhtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHNlY29uZE1hdGNoID0gU0VDT05EX1JFR19QQVRURVJOLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaCkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IEZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5leHRyYWN0VGltZUNvbXBvbmVudChyZXN1bHQuc3RhcnQuY2xvbmUoKSwgc2Vjb25kTWF0Y2gpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5lbmQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGV4dCArPSBzZWNvbmRNYXRjaFswXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzdGF0aWMgZXh0cmFjdFRpbWVDb21wb25lbnQoZXh0cmFjdGluZ0NvbXBvbmVudHMsIG1hdGNoKSB7XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IG51bGw7XG4gICAgICAgIGhvdXIgPSBwYXJzZUludChtYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIGlmIChtYXRjaFtNSU5VVEVfR1JPVVBdICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjAgfHwgaG91ciA+IDI0KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91ciA+PSAxMikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5QTTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGhvdXIgPiAxMilcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGFtcG0gPSBtYXRjaFtBTV9QTV9IT1VSX0dST1VQXVswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKGFtcG0gPT0gXCJhXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IE1lcmlkaWVtLkFNO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtID09IFwicFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5QTTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMikge1xuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJtaW51dGVcIiwgbWludXRlKTtcbiAgICAgICAgaWYgKG1lcmlkaWVtICE9PSBudWxsKSB7XG4gICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgZXh0cmFjdGluZ0NvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmQgPSBwYXJzZUludChtYXRjaFtTRUNPTkRfR1JPVVBdKTtcbiAgICAgICAgICAgIGlmIChzZWNvbmQgPj0gNjApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBleHRyYWN0aW5nQ29tcG9uZW50cy5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXh0cmFjdGluZ0NvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBPUkRJTkFMX05VTUJFUl9QQVRURVJOLCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpvblxcXFxzKj8pP1wiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgYCg/OlxcXFxzKig/OmF1fFxcXFwtfFxcXFzigJN8anVzcXUnYXU/fFxcXFxzKVxcXFxzKigke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KSk/YCArXG4gICAgYCg/Oi18L3xcXFxccyooPzpkZSk/XFxcXHMqKWAgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGAoPzooPzotfC98LD9cXFxccyopKCR7WUVBUl9QQVRURVJOfSg/IVteXFxcXHNdXFxcXGQpKSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGUk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GUk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgaWwgeSBhXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz0oPzpcXFxcV3wkKSlgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKD86ZGFuc3xlbnxwb3VyfHBlbmRhbnR8ZGUpXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTlVNQkVSX1BBVFRFUk4sIHBhcnNlTnVtYmVyUGF0dGVybiwgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZSVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCg/Omxlcz98bGF8bCd8ZHV8ZGVzPylcXFxccypgICtcbiAgICAgICAgICAgIGAoJHtOVU1CRVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKihwcm9jaGFpbmU/cz98ZGVybmlbZcOoXXJlP3M/fHBhc3Nbw6llXWU/cz98cHJbw6llXWNbw6llXWRlbnRzP3xzdWl2YW50ZT9zPykpP2AgK1xuICAgICAgICAgICAgYFxcXFxzKigke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKihwcm9jaGFpbmU/cz98ZGVybmlbZcOoXXJlP3M/fHBhc3Nbw6llXWU/cz98cHJbw6llXWNbw6llXWRlbnRzP3xzdWl2YW50ZT9zPykpP2AsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IG1hdGNoWzFdID8gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKSA6IDE7XG4gICAgICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFszXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHt9O1xuICAgICAgICB0aW1lVW5pdHNbdW5pdF0gPSBudW07XG4gICAgICAgIGxldCBtb2RpZmllciA9IG1hdGNoWzJdIHx8IG1hdGNoWzRdIHx8IFwiXCI7XG4gICAgICAgIG1vZGlmaWVyID0gbW9kaWZpZXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFtb2RpZmllcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvZGVybmlbZcOoXXJlP3M/Ly50ZXN0KG1vZGlmaWVyKSB8fCAvcGFzc1vDqWVdZT9zPy8udGVzdChtb2RpZmllcikgfHwgL3ByW8OpZV1jW8OpZV1kZW50cz8vLnRlc3QobW9kaWZpZXIpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IEZSQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IEZSQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRlJUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBGUk1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0ZSTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBGUk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9GUk1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEZSV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IEZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZSU3BlY2lmaWNUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IEZSTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBGUlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9GUlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRlJUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRlJUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBGUkNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRlJDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgRlJNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBGUlRpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRlJTcGVjaWZpY1RpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZSVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBGUldlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgRlJNZXJnZURhdGVUaW1lUmVmaW5lcigpLCBuZXcgRlJNZXJnZURhdGVSYW5nZVJlZmluZXIoKV0sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJleHBvcnQgY29uc3QgTlVNQkVSID0ge1xuICAgIFwi6Zu2XCI6IDAsXG4gICAgXCLjgIdcIjogMCxcbiAgICBcIuS4gFwiOiAxLFxuICAgIFwi5LqMXCI6IDIsXG4gICAgXCLkuIlcIjogMyxcbiAgICBcIuWbm1wiOiA0LFxuICAgIFwi5LqUXCI6IDUsXG4gICAgXCLlha1cIjogNixcbiAgICBcIuS4g1wiOiA3LFxuICAgIFwi5YWrXCI6IDgsXG4gICAgXCLkuZ1cIjogOSxcbiAgICBcIuWNgVwiOiAxMCxcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9PRkZTRVQgPSB7XG4gICAgXCLml6VcIjogMCxcbiAgICBcIuaciFwiOiAxLFxuICAgIFwi54GrXCI6IDIsXG4gICAgXCLmsLRcIjogMyxcbiAgICBcIuacqFwiOiA0LFxuICAgIFwi6YeRXCI6IDUsXG4gICAgXCLlnJ9cIjogNixcbn07XG5leHBvcnQgZnVuY3Rpb24gdG9IYW5rYWt1KHRleHQpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRleHQpXG4gICAgICAgIC5yZXBsYWNlKC9cXHUyMDE5L2csIFwiXFx1MDAyN1wiKVxuICAgICAgICAucmVwbGFjZSgvXFx1MjAxRC9nLCBcIlxcdTAwMjJcIilcbiAgICAgICAgLnJlcGxhY2UoL1xcdTMwMDAvZywgXCJcXHUwMDIwXCIpXG4gICAgICAgIC5yZXBsYWNlKC9cXHVGRkU1L2csIFwiXFx1MDBBNVwiKVxuICAgICAgICAucmVwbGFjZSgvW1xcdUZGMDFcXHVGRjAzLVxcdUZGMDZcXHVGRjA4XFx1RkYwOVxcdUZGMEMtXFx1RkYxOVxcdUZGMUMtXFx1RkYxRlxcdUZGMjEtXFx1RkYzQlxcdUZGM0RcXHVGRjNGXFx1RkY0MS1cXHVGRjVCXFx1RkY1RFxcdUZGNUVdL2csIGFscGhhTnVtKTtcbn1cbmZ1bmN0aW9uIGFscGhhTnVtKHRva2VuKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodG9rZW4uY2hhckNvZGVBdCgwKSAtIDY1MjQ4KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBqYVN0cmluZ1RvTnVtYmVyKHRleHQpIHtcbiAgICBsZXQgbnVtYmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHRbaV07XG4gICAgICAgIGlmIChjaGFyID09PSBcIuWNgVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPT09IDAgPyBOVU1CRVJbY2hhcl0gOiBudW1iZXIgKiBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gTlVNQkVSW2NoYXJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgdG9IYW5rYWt1IH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvKD86KD86KFvlkIzku4rmnKxdKXwoKOaYreWSjHzlubPmiJB85Luk5ZKMKT8oWzAtOe+8kC3vvJldezEsNH185YWDKSkp5bm0XFxzKik/KFswLTnvvJAt77yZXXsxLDJ9KeaciFxccyooWzAtOe+8kC3vvJldezEsMn0p5pelL2k7XG5jb25zdCBTUEVDSUFMX1lFQVJfR1JPVVAgPSAxO1xuY29uc3QgVFlQSUNBTF9ZRUFSX0dST1VQID0gMjtcbmNvbnN0IEVSQV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX05VTUJFUl9HUk9VUCA9IDQ7XG5jb25zdCBNT05USF9HUk9VUCA9IDU7XG5jb25zdCBEQVlfR1JPVVAgPSA2O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBTdGFuZGFyZFBhcnNlciB7XG4gICAgcGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludCh0b0hhbmtha3UobWF0Y2hbTU9OVEhfR1JPVVBdKSk7XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaFtEQVlfR1JPVVBdKSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1hdGNoW1NQRUNJQUxfWUVBUl9HUk9VUF0gJiYgbWF0Y2hbU1BFQ0lBTF9ZRUFSX0dST1VQXS5tYXRjaChcIuWQjHzku4p85pysXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgY29udGV4dC5yZWZlcmVuY2UuZ2V0RGF0ZVdpdGhBZGp1c3RlZFRpbWV6b25lKCkuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW1RZUElDQUxfWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1UZXh0ID0gbWF0Y2hbWUVBUl9OVU1CRVJfR1JPVVBdO1xuICAgICAgICAgICAgbGV0IHllYXIgPSB5ZWFyTnVtVGV4dCA9PSBcIuWFg1wiID8gMSA6IHBhcnNlSW50KHRvSGFua2FrdSh5ZWFyTnVtVGV4dCkpO1xuICAgICAgICAgICAgaWYgKG1hdGNoW0VSQV9HUk9VUF0gPT0gXCLku6TlkoxcIikge1xuICAgICAgICAgICAgICAgIHllYXIgKz0gMjAxODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoW0VSQV9HUk9VUF0gPT0gXCLlubPmiJBcIikge1xuICAgICAgICAgICAgICAgIHllYXIgKz0gMTk4ODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG1hdGNoW0VSQV9HUk9VUF0gPT0gXCLmmK3lkoxcIikge1xuICAgICAgICAgICAgICAgIHllYXIgKz0gMTkyNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBTdGFuZGFyZFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo44GL44KJfO+8jXzjg7x8LXzvvZ58filcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUpQTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IC/ku4rml6V844GN44KH44GGfOacrOaXpXzjgbvjgpPjgZjjgaR85pio5pelfOOBjeOBruOBhnzmmI7ml6V844GC44GX44GffOS7iuWknHzjgZPjgpPjgoR85LuK5aSVfOOBk+OCk+OChuOBhnzku4rmmal844GT44KT44Gw44KTfOS7iuacnXzjgZHjgZUvaTtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVRleHRUb0thbmppKHRleHQpIHtcbiAgICBzd2l0Y2ggKHRleHQpIHtcbiAgICAgICAgY2FzZSBcIuOBjeOCh+OBhlwiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5LuK5pelXCI7XG4gICAgICAgIGNhc2UgXCLjgbvjgpPjgZjjgaRcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuacrOaXpVwiO1xuICAgICAgICBjYXNlIFwi44GN44Gu44GGXCI6XG4gICAgICAgICAgICByZXR1cm4gXCLmmKjml6VcIjtcbiAgICAgICAgY2FzZSBcIuOBguOBl+OBn1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5piO5pelXCI7XG4gICAgICAgIGNhc2UgXCLjgZPjgpPjgoRcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuS7iuWknFwiO1xuICAgICAgICBjYXNlIFwi44GT44KT44KG44GGXCI6XG4gICAgICAgICAgICByZXR1cm4gXCLku4rlpJVcIjtcbiAgICAgICAgY2FzZSBcIuOBk+OCk+OBsOOCk1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwi5LuK5pmpXCI7XG4gICAgICAgIGNhc2UgXCLjgZHjgZVcIjpcbiAgICAgICAgICAgIHJldHVybiBcIuS7iuacnVwiO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBDYXN1YWxEYXRlUGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gbm9ybWFsaXplVGV4dFRvS2FuamkobWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKHRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCLmmKjml6VcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIuaYjuaXpVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbW9ycm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLmnKzml6VcIjpcbiAgICAgICAgICAgIGNhc2UgXCLku4rml6VcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRleHQgPT0gXCLku4rlpJxcIiB8fCB0ZXh0ID09IFwi5LuK5aSVXCIgfHwgdGV4dCA9PSBcIuS7iuaZqVwiKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0ZXh0Lm1hdGNoKFwi5LuK5pydXCIpKSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUpQQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX09GRlNFVCB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIigoPzxwcmVmaXg+5YmN44GufOasoeOBrnzku4rpgLEpKT8oPzx3ZWVrZGF5PlwiICsgT2JqZWN0LmtleXMoV0VFS0RBWV9PRkZTRVQpLmpvaW4oXCJ8XCIpICsgXCIpKD865puc5pelfOabnClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBXZWVrZGF5UGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLmdyb3Vwcy5wcmVmaXggfHwgXCJcIjtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKHByZWZpeC5tYXRjaCgv5YmN44GuLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJlZml4Lm1hdGNoKC/mrKHjga4vKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXgubWF0Y2goL+S7iumAsS8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0LCBtb2RpZmllcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyLCBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgdG9IYW5rYWt1IH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoWzAtOe+8kC3vvJldezR9W1xcXFwvfFxcXFzvvI9dKT9cIiArIFwiKFswLTHvvJAt77yRXXswLDF9WzAtOe+8kC3vvJldezF9KSg/OltcXFxcL3xcXFxc77yPXShbMC0z77yQLe+8k117MCwxfVswLTnvvJAt77yZXXsxfSkpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAyO1xuY29uc3QgREFZX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpQU2xhc2hEYXRlRm9ybWF0UGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoW01PTlRIX0dST1VQXSkpO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludCh0b0hhbmtha3UobWF0Y2hbREFZX0dST1VQXSkpO1xuICAgICAgICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXkgPCAxIHx8IGRheSA+IDMxKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIHJlc3VsdC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgcmF3WWVhck51bWJlciA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaFtZRUFSX0dST1VQXSkpO1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xuICAgICAgICAgICAgcmVzdWx0LmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudCwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBTbGFzaERhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgTlVNQkVSLCBqYVN0cmluZ1RvTnVtYmVyLCB0b0hhbmtha3UgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBGSVJTVF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpcIiArXG4gICAgXCIo5Y2I5YmNfOWNiOW+jHxBLk0ufFAuTS58QU18UE0pXCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yM44CBXSopXCIgK1xuICAgIFwiKD86KFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/OuaZgig/IemWkyl8OnzvvJopXCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihbMC0577yQLe+8mV0rfOWNinxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihbMC0577yQLe+8mV0rfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD8656eSKT8pXCIgK1xuICAgIFwiKD86XFxcXHMqKEEuTS58UC5NLnxBTT98UE0/KSk/XCIsIFwiaVwiKTtcbmNvbnN0IFNFQ09ORF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpeXFxcXHMqKD8644GL44KJfFxcXFwtfFxcXFzigJN8XFxcXO+8jXxcXFxcfnxcXFxc44CcKVxcXFxzKilcIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIo5Y2I5YmNfOWNiOW+jHxBLk0ufFAuTS58QU18UE0pXCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yM44CBXSopXCIgK1xuICAgIFwiKD86KFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/OuaZgnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFswLTnvvJAt77yZXSt85Y2KfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD865YiGfDp877yaKT9cIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFswLTnvvJAt77yZXSt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUF8xID0gMTtcbmNvbnN0IEhPVVJfR1JPVVAgPSAyO1xuY29uc3QgTUlOVVRFX0dST1VQID0gMztcbmNvbnN0IFNFQ09ORF9HUk9VUCA9IDQ7XG5jb25zdCBBTV9QTV9IT1VSX0dST1VQXzIgPSA1O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBGSVJTVF9SRUdfUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaC5pbmRleCA+IDAgJiYgY29udGV4dC50ZXh0W21hdGNoLmluZGV4IC0gMV0ubWF0Y2goL1xcdy8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY3JlYXRlVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2hbSE9VUl9HUk9VUF0sIG1hdGNoW01JTlVURV9HUk9VUF0sIG1hdGNoW1NFQ09ORF9HUk9VUF0sIG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBfMV0gPz8gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF8yXSk7XG4gICAgICAgIGlmICghcmVzdWx0LnN0YXJ0KSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCArPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBtYXRjaCA9IFNFQ09ORF9SRUdfUEFUVEVSTi5leGVjKGNvbnRleHQudGV4dC5zdWJzdHJpbmcocmVzdWx0LmluZGV4ICsgcmVzdWx0LnRleHQubGVuZ3RoKSk7XG4gICAgICAgIGlmICghbWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnRleHQgPSByZXN1bHQudGV4dCArIG1hdGNoWzBdO1xuICAgICAgICByZXN1bHQuZW5kID0gY3JlYXRlVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2hbSE9VUl9HUk9VUF0sIG1hdGNoW01JTlVURV9HUk9VUF0sIG1hdGNoW1NFQ09ORF9HUk9VUF0sIG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBfMV0gPz8gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF8yXSk7XG4gICAgICAgIGlmICghcmVzdWx0LmVuZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXN1bHQuZW5kLmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpICYmIHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIHJlc3VsdC5zdGFydC5nZXQoXCJtZXJpZGllbVwiKSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcIm1lcmlkaWVtXCIpID09PSBNZXJpZGllbS5QTSkge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSAtIDEyID4gcmVzdWx0LmVuZC5nZXQoXCJob3VyXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5lbmQuZ2V0KFwiaG91clwiKSA8IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiaG91clwiLCByZXN1bHQuZW5kLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQuZW5kLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCByZXN1bHQuZW5kLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2hIb3VyLCBtYXRjaE1pbnV0ZSwgbWF0Y2hTZWNvbmQsIG1hdGNoQW1QbSkge1xuICAgIGxldCBob3VyID0gMDtcbiAgICBsZXQgbWVyaWRpZW0gPSAtMTtcbiAgICBsZXQgdGFyZ2V0Q29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICBob3VyID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoSG91cikpO1xuICAgIGlmIChpc05hTihob3VyKSkge1xuICAgICAgICBob3VyID0gamFTdHJpbmdUb051bWJlcihtYXRjaEhvdXIpO1xuICAgIH1cbiAgICBpZiAoaG91ciA+IDI0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAobWF0Y2hNaW51dGUpIHtcbiAgICAgICAgbGV0IG1pbnV0ZTtcbiAgICAgICAgaWYgKG1hdGNoTWludXRlID09PSBcIuWNilwiKSB7XG4gICAgICAgICAgICBtaW51dGUgPSAzMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KHRvSGFua2FrdShtYXRjaE1pbnV0ZSkpO1xuICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBqYVN0cmluZ1RvTnVtYmVyKG1hdGNoTWludXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWludXRlID49IDYwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgfVxuICAgIGlmIChtYXRjaFNlY29uZCkge1xuICAgICAgICBsZXQgc2Vjb25kID0gcGFyc2VJbnQodG9IYW5rYWt1KG1hdGNoU2Vjb25kKSk7XG4gICAgICAgIGlmIChpc05hTihzZWNvbmQpKSB7XG4gICAgICAgICAgICBzZWNvbmQgPSBqYVN0cmluZ1RvTnVtYmVyKG1hdGNoU2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwic2Vjb25kXCIsIHNlY29uZCk7XG4gICAgfVxuICAgIGlmIChtYXRjaEFtUG0pIHtcbiAgICAgICAgaWYgKGhvdXIgPiAxMikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgQU1QTVN0cmluZyA9IG1hdGNoQW1QbTtcbiAgICAgICAgaWYgKEFNUE1TdHJpbmcgPT09IFwi5Y2I5YmNXCIgfHwgQU1QTVN0cmluZ1swXS50b0xvd2VyQ2FzZSgpID09PSBcImFcIikge1xuICAgICAgICAgICAgbWVyaWRpZW0gPSBNZXJpZGllbS5BTTtcbiAgICAgICAgICAgIGlmIChob3VyID09PSAxMilcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBTVBNU3RyaW5nID09PSBcIuWNiOW+jFwiIHx8IEFNUE1TdHJpbmdbMF0udG9Mb3dlckNhc2UoKSA9PT0gXCJwXCIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gTWVyaWRpZW0uUE07XG4gICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRhcmdldENvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBob3VyKTtcbiAgICBpZiAobWVyaWRpZW0gPj0gMCkge1xuICAgICAgICB0YXJnZXRDb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIHRhcmdldENvbXBvbmVudHMuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRDb21wb25lbnRzLmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRDb21wb25lbnRzO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpQTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijjga4pP1xccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBjb25zdCBuZXdSZXN1bHQgPSBjdXJyZW50UmVzdWx0LmNsb25lKCk7XG4gICAgICAgIG5ld1Jlc3VsdC50ZXh0ID0gY3VycmVudFJlc3VsdC50ZXh0ICsgdGV4dEJldHdlZW4gKyBuZXh0UmVzdWx0LnRleHQ7XG4gICAgICAgIG5ld1Jlc3VsdC5zdGFydC5hc3NpZ24oXCJ3ZWVrZGF5XCIsIG5leHRSZXN1bHQuc3RhcnQuZ2V0KFwid2Vla2RheVwiKSk7XG4gICAgICAgIGlmIChuZXdSZXN1bHQuZW5kKSB7XG4gICAgICAgICAgICBuZXdSZXN1bHQuZW5kLmFzc2lnbihcIndlZWtkYXlcIiwgbmV4dFJlc3VsdC5zdGFydC5nZXQoXCJ3ZWVrZGF5XCIpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3UmVzdWx0O1xuICAgIH1cbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsRGF0ZVRoZW5XZWVrZGF5ID0gY3VycmVudFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJkYXlcIikgJiZcbiAgICAgICAgICAgIG5leHRSZXN1bHQuc3RhcnQuaXNPbmx5V2Vla2RheUNvbXBvbmVudCgpICYmXG4gICAgICAgICAgICAhbmV4dFJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJob3VyXCIpO1xuICAgICAgICByZXR1cm4gbm9ybWFsRGF0ZVRoZW5XZWVrZGF5ICYmIHRleHRCZXR3ZWVuLm1hdGNoKC9eWyzjgIHjga5dP1xccyokLykgIT09IG51bGw7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfT0ZGU0VUIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86XFxcXCh8XFxcXO+8iCkoPzx3ZWVrZGF5PlwiICsgT2JqZWN0LmtleXMoV0VFS0RBWV9PRkZTRVQpLmpvaW4oXCJ8XCIpICsgXCIpKD86XFxcXCl8XFxcXO+8iSlcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSlBXZWVrZGF5V2l0aFBhcmVudGhlc2VzUGFyc2VyIHtcbiAgICBwYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgZXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgb2Zmc2V0KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1KUFdlZWtkYXlXaXRoUGFyZW50aGVzZXNQYXJzZXIuanMubWFwIiwiaW1wb3J0IEpQU3RhbmRhcmRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUFN0YW5kYXJkUGFyc2VyLmpzXCI7XG5pbXBvcnQgSlBNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSlBNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBKUENhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBKUFdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9KUFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBKUFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0pQU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgSlBUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0pQVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBKUE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0pQTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBKUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSlBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgSlBXZWVrZGF5V2l0aFBhcmVudGhlc2VzUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSlBXZWVrZGF5V2l0aFBhcmVudGhlc2VzUGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBKUENhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uKHtcbiAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgbmV3IEpQU3RhbmRhcmRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUFdlZWtkYXlXaXRoUGFyZW50aGVzZXNQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUFNsYXNoRGF0ZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEpQVGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtcbiAgICAgICAgICAgIG5ldyBKUE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIoKSxcbiAgICAgICAgICAgIG5ldyBKUE1lcmdlRGF0ZVRpbWVSZWZpbmVyKCksXG4gICAgICAgICAgICBuZXcgSlBNZXJnZURhdGVSYW5nZVJlZmluZXIoKSxcbiAgICAgICAgXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzID0gY29uZmlndXJhdGlvbi5yZWZpbmVycy5maWx0ZXIoKHJlZmluZXIpID0+ICEocmVmaW5lciBpbnN0YW5jZW9mIE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIpKTtcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJkb21pbmdvXCI6IDAsXG4gICAgXCJkb21cIjogMCxcbiAgICBcInNlZ3VuZGFcIjogMSxcbiAgICBcInNlZ3VuZGEtZmVpcmFcIjogMSxcbiAgICBcInNlZ1wiOiAxLFxuICAgIFwidGVyw6dhXCI6IDIsXG4gICAgXCJ0ZXLDp2EtZmVpcmFcIjogMixcbiAgICBcInRlclwiOiAyLFxuICAgIFwicXVhcnRhXCI6IDMsXG4gICAgXCJxdWFydGEtZmVpcmFcIjogMyxcbiAgICBcInF1YVwiOiAzLFxuICAgIFwicXVpbnRhXCI6IDQsXG4gICAgXCJxdWludGEtZmVpcmFcIjogNCxcbiAgICBcInF1aVwiOiA0LFxuICAgIFwic2V4dGFcIjogNSxcbiAgICBcInNleHRhLWZlaXJhXCI6IDUsXG4gICAgXCJzZXhcIjogNSxcbiAgICBcInPDoWJhZG9cIjogNixcbiAgICBcInNhYmFkb1wiOiA2LFxuICAgIFwic2FiXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJqYW5laXJvXCI6IDEsXG4gICAgXCJqYW5cIjogMSxcbiAgICBcImphbi5cIjogMSxcbiAgICBcImZldmVyZWlyb1wiOiAyLFxuICAgIFwiZmV2XCI6IDIsXG4gICAgXCJmZXYuXCI6IDIsXG4gICAgXCJtYXLDp29cIjogMyxcbiAgICBcIm1hclwiOiAzLFxuICAgIFwibWFyLlwiOiAzLFxuICAgIFwiYWJyaWxcIjogNCxcbiAgICBcImFiclwiOiA0LFxuICAgIFwiYWJyLlwiOiA0LFxuICAgIFwibWFpb1wiOiA1LFxuICAgIFwibWFpXCI6IDUsXG4gICAgXCJtYWkuXCI6IDUsXG4gICAgXCJqdW5ob1wiOiA2LFxuICAgIFwianVuXCI6IDYsXG4gICAgXCJqdW4uXCI6IDYsXG4gICAgXCJqdWxob1wiOiA3LFxuICAgIFwianVsXCI6IDcsXG4gICAgXCJqdWwuXCI6IDcsXG4gICAgXCJhZ29zdG9cIjogOCxcbiAgICBcImFnb1wiOiA4LFxuICAgIFwiYWdvLlwiOiA4LFxuICAgIFwic2V0ZW1icm9cIjogOSxcbiAgICBcInNldFwiOiA5LFxuICAgIFwic2V0LlwiOiA5LFxuICAgIFwib3V0dWJyb1wiOiAxMCxcbiAgICBcIm91dFwiOiAxMCxcbiAgICBcIm91dC5cIjogMTAsXG4gICAgXCJub3ZlbWJyb1wiOiAxMSxcbiAgICBcIm5vdlwiOiAxMSxcbiAgICBcIm5vdi5cIjogMTEsXG4gICAgXCJkZXplbWJyb1wiOiAxMixcbiAgICBcImRlelwiOiAxMixcbiAgICBcImRlei5cIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IFwiWzAtOV17MSw0fSg/IVteXFxcXHNdXFxcXGQpKD86XFxcXHMqW2F8ZF1cXFxcLj9cXFxccypjXFxcXC4/fFxcXFxzKmFcXFxcLj9cXFxccypkXFxcXC4/KT9cIjtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXIobWF0Y2gpIHtcbiAgICBpZiAobWF0Y2gubWF0Y2goL15bMC05XXsxLDR9JC8pKSB7XG4gICAgICAgIGxldCB5ZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgICAgICBpZiAoeWVhck51bWJlciA8IDEwMCkge1xuICAgICAgICAgICAgaWYgKHllYXJOdW1iZXIgPiA1MCkge1xuICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMTkwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHllYXJOdW1iZXIgPSB5ZWFyTnVtYmVyICsgMjAwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhck51bWJlcjtcbiAgICB9XG4gICAgaWYgKG1hdGNoLm1hdGNoKC9hXFwuP1xccypjXFwuPy9pKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL2FcXC4/XFxzKmNcXC4/L2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gLXBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86KGVzdGV8ZXN0YXxwYXNzYWRvfHByW2/Ds114aW1vKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKGVzdGV8ZXN0YXxwYXNzYWRvfHByW8Ozb114aW1vKVxcXFxzKnNlbWFuYSk/XCIgK1xuICAgIFwiKD89XFxcXFd8XFxcXGR8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKHdlZWtkYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbm9ybSA9IHByZWZpeCB8fCBwb3N0Zml4IHx8IFwiXCI7XG4gICAgICAgIG5vcm0gPSBub3JtLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChub3JtID09IFwicGFzc2Fkb1wiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vcm0gPT0gXCJwcsOzeGltb1wiIHx8IG5vcm0gPT0gXCJwcm94aW1vXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9ybSA9PSBcImVzdGVcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVFdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVFRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86YW8/fMOgcz98ZGFzfGRhfGRlfGRvKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8YSg/Om8pP3xcXFxcPylcXFxccypcIjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooPzosfMOgKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKD86LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pKD86wrp8wqp8wrApP2AgK1xuICAgIFwiKD86XFxcXHMqKD86ZGVzZGV8ZGV8XFxcXC18XFxcXOKAk3xhbz98XFxcXHMpXFxcXHMqKFswLTldezEsMn0pKD86wrp8wqp8wrApPyk/XFxcXHMqKD86ZGUpP1xcXFxzKlwiICtcbiAgICBgKD86LXwvfFxcXFxzKig/OmRlfCwpP1xcXFxzKilgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86XFxcXHMqKD86ZGV8LCk/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1QVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQVENhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oYWdvcmF8aG9qZXxhbWFuaGF8YW1hbmjDo3xvbnRlbSkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhZ29yYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaG9qZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJhbWFuaGFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJhbWFuaMOjXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm9udGVtXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVBUQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUFRDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIC8oPzplc3RhXFxzKik/KG1hbmhhfG1hbmjDo3x0YXJkZXxtZWlhLW5vaXRlfG1laW8tZGlhfG5vaXRlKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0YXJkZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub2l0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2V2ZW5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWFuaGFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJtYW5ow6NcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL21vcm5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVpYS1ub2l0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbWlkbmlnaHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWVpby1kaWFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9ub29uXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UFRDYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBQVFdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9QVFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBQVFRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUFRUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFBUTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvUFRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IFBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1BUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgUFRNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9QVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFBUQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1BUQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFBUQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1BUQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgUFRDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IFBUQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgUFRXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgUFRUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFBUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFBUTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IFBUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKHRvdHwtKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiXlxcXFxzKihvbXxuYXx2b29yfGluIGRlfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gLyhudXx2YW5kYWFnfG1vcmdlbnxtb3JnZW5kfGdpc3RlcmVuKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGxvd2VyVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcIm51XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJ2YW5kYWFnXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgY2FzZSBcIm1vcmdlbmRcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiZ2lzdGVyZW5cIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBEQVlfR1JPVVAgPSAxO1xuY29uc3QgTU9NRU5UX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiAvKGRlemUpP1xccyoobmFtaWRkYWd8YXZvbmR8bWlkZGVybmFjaHR8b2NodGVuZHxtaWRkYWd8J3MgbWlkZGFnc3wncyBhdm9uZHN8J3Mgb2NodGVuZHMpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBdID09PSBcImRlemVcIikge1xuICAgICAgICAgICAgY29tcG9uZW50LmFzc2lnbihcImRheVwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5hc3NpZ24oXCJtb250aFwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50LmFzc2lnbihcInllYXJcIiwgY29udGV4dC5yZWZEYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAobWF0Y2hbTU9NRU5UX0dST1VQXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwibmFtaWRkYWdcIjpcbiAgICAgICAgICAgIGNhc2UgXCIncyBuYW1pZGRhZ3NcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9hZnRlcm5vb25cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYXZvbmRcIjpcbiAgICAgICAgICAgIGNhc2UgXCIncyBhdm9uZHMnXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMjApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvZXZlbmluZ1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkZXJuYWNodFwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbWlkbmlnaHRcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwib2NodGVuZFwiOlxuICAgICAgICAgICAgY2FzZSBcIidzIG9jaHRlbmRzXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9tb3JuaW5nXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcIidzIG1pZGRhZ3NcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9ub29uXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxDYXN1YWxUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBXRUVLREFZX0RJQ1RJT05BUlkgPSB7XG4gICAgem9uZGFnOiAwLFxuICAgIHpvbjogMCxcbiAgICBcInpvbi5cIjogMCxcbiAgICB6bzogMCxcbiAgICBcInpvLlwiOiAwLFxuICAgIG1hYW5kYWc6IDEsXG4gICAgbWE6IDEsXG4gICAgXCJtYS5cIjogMSxcbiAgICBkaW5zZGFnOiAyLFxuICAgIGRpbjogMixcbiAgICBcImRpbi5cIjogMixcbiAgICBkaTogMixcbiAgICBcImRpLlwiOiAyLFxuICAgIHdvZW5zZGFnOiAzLFxuICAgIHdvZTogMyxcbiAgICBcIndvZS5cIjogMyxcbiAgICB3bzogMyxcbiAgICBcIndvLlwiOiAzLFxuICAgIGRvbmRlcmRhZzogNCxcbiAgICBkb25kOiA0LFxuICAgIFwiZG9uZC5cIjogNCxcbiAgICBkbzogNCxcbiAgICBcImRvLlwiOiA0LFxuICAgIHZyaWpkYWc6IDUsXG4gICAgdnJpajogNSxcbiAgICBcInZyaWouXCI6IDUsXG4gICAgdnI6IDUsXG4gICAgXCJ2ci5cIjogNSxcbiAgICB6YXRlcmRhZzogNixcbiAgICB6YXQ6IDYsXG4gICAgXCJ6YXQuXCI6IDYsXG4gICAgXCJ6YVwiOiA2LFxuICAgIFwiemEuXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgamFudWFyaTogMSxcbiAgICBqYW46IDEsXG4gICAgXCJqYW4uXCI6IDEsXG4gICAgZmVicnVhcmk6IDIsXG4gICAgZmViOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIG1hYXJ0OiAzLFxuICAgIG1hcjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBtcnQ6IDMsXG4gICAgXCJtcnQuXCI6IDMsXG4gICAgYXByaWw6IDQsXG4gICAgYXByOiA0LFxuICAgIFwiYXByLlwiOiA0LFxuICAgIG1laTogNSxcbiAgICBqdW5pOiA2LFxuICAgIGp1bjogNixcbiAgICBcImp1bi5cIjogNixcbiAgICBqdWxpOiA3LFxuICAgIGp1bDogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBhdWd1c3R1czogOCxcbiAgICBhdWc6IDgsXG4gICAgXCJhdWcuXCI6IDgsXG4gICAgc2VwdGVtYmVyOiA5LFxuICAgIHNlcDogOSxcbiAgICBcInNlcC5cIjogOSxcbiAgICBzZXB0OiA5LFxuICAgIFwic2VwdC5cIjogOSxcbiAgICBva3RvYmVyOiAxMCxcbiAgICBva3Q6IDEwLFxuICAgIFwib2t0LlwiOiAxMCxcbiAgICBub3ZlbWJlcjogMTEsXG4gICAgbm92OiAxMSxcbiAgICBcIm5vdi5cIjogMTEsXG4gICAgZGVjZW1iZXI6IDEyLFxuICAgIGRlYzogMTIsXG4gICAgXCJkZWMuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBlZW46IDEsXG4gICAgdHdlZTogMixcbiAgICBkcmllOiAzLFxuICAgIHZpZXI6IDQsXG4gICAgdmlqZjogNSxcbiAgICB6ZXM6IDYsXG4gICAgemV2ZW46IDcsXG4gICAgYWNodDogOCxcbiAgICBuZWdlbjogOSxcbiAgICB0aWVuOiAxMCxcbiAgICBlbGY6IDExLFxuICAgIHR3YWFsZjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IE9SRElOQUxfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIGVlcnN0ZTogMSxcbiAgICB0d2VlZGU6IDIsXG4gICAgZGVyZGU6IDMsXG4gICAgdmllcmRlOiA0LFxuICAgIHZpamZkZTogNSxcbiAgICB6ZXNkZTogNixcbiAgICB6ZXZlbmRlOiA3LFxuICAgIGFjaHRzdGU6IDgsXG4gICAgbmVnZW5kZTogOSxcbiAgICB0aWVuZGU6IDEwLFxuICAgIGVsZmRlOiAxMSxcbiAgICB0d2FhbGZkZTogMTIsXG4gICAgZGVydGllbmRlOiAxMyxcbiAgICB2ZWVydGllbmRlOiAxNCxcbiAgICB2aWpmdGllbmRlOiAxNSxcbiAgICB6ZXN0aWVuZGU6IDE2LFxuICAgIHpldmVudGllbmRlOiAxNyxcbiAgICBhY2h0dGllbmRlOiAxOCxcbiAgICBuZWdlbnRpZW5kZTogMTksXG4gICAgdHdpbnRpZ3N0ZTogMjAsXG4gICAgXCJlZW5lbnR3aW50aWdzdGVcIjogMjEsXG4gICAgXCJ0d2Vlw6tudHdpbnRpZ3N0ZVwiOiAyMixcbiAgICBcImRyaWVlbnR3aW50aWdzdGVcIjogMjMsXG4gICAgXCJ2aWVyZW50d2ludGlnc3RlXCI6IDI0LFxuICAgIFwidmlqZmVudHdpbnRpZ3N0ZVwiOiAyNSxcbiAgICBcInplc2VudHdpbnRpZ3N0ZVwiOiAyNixcbiAgICBcInpldmVuZW50d2ludGlnc3RlXCI6IDI3LFxuICAgIFwiYWNodGVudHdpbnRpZ1wiOiAyOCxcbiAgICBcIm5lZ2VuZW50d2ludGlnXCI6IDI5LFxuICAgIFwiZGVydGlnc3RlXCI6IDMwLFxuICAgIFwiZWVuZW5kZXJ0aWdzdGVcIjogMzEsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIHNlYzogXCJzZWNvbmRcIixcbiAgICBzZWNvbmQ6IFwic2Vjb25kXCIsXG4gICAgc2Vjb25kZW46IFwic2Vjb25kXCIsXG4gICAgbWluOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnM6IFwibWludXRlXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV1dDogXCJtaW51dGVcIixcbiAgICBtaW51dGVuOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV1dGplOiBcIm1pbnV0ZVwiLFxuICAgIGg6IFwiaG91clwiLFxuICAgIGhyOiBcImhvdXJcIixcbiAgICBocnM6IFwiaG91clwiLFxuICAgIHV1cjogXCJob3VyXCIsXG4gICAgdTogXCJob3VyXCIsXG4gICAgdXJlbjogXCJob3VyXCIsXG4gICAgZGFnOiBcImRheVwiLFxuICAgIGRhZ2VuOiBcImRheVwiLFxuICAgIHdlZWs6IFwid2Vla1wiLFxuICAgIHdla2VuOiBcIndlZWtcIixcbiAgICBtYWFuZDogXCJtb250aFwiLFxuICAgIG1hYW5kZW46IFwibW9udGhcIixcbiAgICBqYWFyOiBcInllYXJcIixcbiAgICBqcjogXCJ5ZWFyXCIsXG4gICAgamFyZW46IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBOVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSl9fFswLTldK3xbMC05XStbXFxcXC4sXVswLTldK3xoYWx2ZT98aGFsZnxwYWFyKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwicGFhclwiKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwiaGFsZlwiIHx8IG51bS5tYXRjaCgvaGFsdmU/LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtLnJlcGxhY2UoXCIsXCIsIFwiLlwiKSk7XG59XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihPUkRJTkFMX1dPUkRfRElDVElPTkFSWSl9fFswLTldezEsMn0oPzpzdGV8ZGUpPylgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBsZXQgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBudW0gPSBudW0ucmVwbGFjZSgvKD86c3RlfGRlKSQvaSwgXCJcIik7XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfVxcXFxzKig/OnZvb3IgQ2hyaXN0dXN8bmEgQ2hyaXN0dXMpfFsxLTJdWzAtOV17M318WzUtOV1bMC05XSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmICgvdm9vciBDaHJpc3R1cy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvdm9vciBDaHJpc3R1cy9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGlmICgvbmEgQ2hyaXN0dXMvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoL25hIENocmlzdHVzL2ksIFwiXCIpO1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBjb25zdCByYXdZZWFyTnVtYmVyID0gcGFyc2VJbnQobWF0Y2gpO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihyYXdZZWFyTnVtYmVyKTtcbn1cbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiA9IGAoJHtOVU1CRVJfUEFUVEVSTn0pXFxcXHN7MCw1fSgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KVxcXFxzezAsNX1gO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OmJpbm5lbnxpbilcXFxccyopP2AsIFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTik7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAoPzpiaW5uZW58aW58YmlubmVuIGRlfHZvb3IpXFxcXHMqYCArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBgKD89XFxcXFd8JClgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi8uLi9ubC9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzpvcFxcXFxzKj8pP1wiICtcbiAgICBcIig/OihkZXplfHZvcmlnZXx2b2xnZW5kZSlcXFxccyooPzp3ZWVrXFxcXHMqKT8pP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcInZvcmlnZVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcInZvbGdlbmRlXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwiZGV6ZVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86b25cXFxccyo/KT9cIiArXG4gICAgYCgke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KWAgK1xuICAgIFwiKD86XFxcXHMqXCIgK1xuICAgIFwiKD86dG90fFxcXFwtfFxcXFzigJN8dW50aWx8dGhyb3VnaHx0aWxsfFxcXFxzKVxcXFxzKlwiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/Oi18L3xcXFxccyooPzpvZik/XFxcXHMqKVwiICtcbiAgICBcIihcIiArXG4gICAgbWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpICtcbiAgICBcIilcIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIoPzotfC98LD9cXFxccyopXCIgK1xuICAgIGAoJHtZRUFSX1BBVFRFUk59KD8hW15cXFxcc11cXFxcZCkpYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0ID0gY29tcG9uZW50cztcbiAgICAgICAgcmVzdWx0LmVuZCA9IGNvbXBvbmVudHMuY2xvbmUoKTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGBcXFxccypgICtcbiAgICBgKD86YCArXG4gICAgYFssLV0/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSk/YCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVteXFxcXHNcXFxcd118XFxcXHMrW14wLTldfFxcXFxzKyR8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDE7XG5jb25zdCBZRUFSX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MTW9udGhOYW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aE5hbWUgPSBtYXRjaFtNT05USF9OQU1FX0dST1VQXTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21vbnRoTmFtZS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCAxLCBtb250aCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTE1vbnRoTmFtZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFswLTldfDBbMS05XXwxWzAxMl0pLyhbMC05XXs0fSlcIiArIFwiXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxTbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCkuaW1wbHkoXCJkYXlcIiwgMSkuYXNzaWduKFwibW9udGhcIiwgbW9udGgpLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxTbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/Oig/Om9tKVxcXFxzKik/XCI7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gXCJcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx8b218XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBcIig/OlxcXFxzKig/OnV1cikpPyg/IS8pKD89XFxcXFd8JClcIjtcbiAgICB9XG4gICAgZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15cXHMqXFxkezR9XFxzKiQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoWzAtOV17NH0pW1xcXFwuXFxcXC9cXFxcc11gICtcbiAgICBgKD86KCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSl8KFswLTldezEsMn0pKVtcXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYChbMC05XXsxLDJ9KWAgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgWUVBUl9OVU1CRVJfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OVU1CRVJfR1JPVVAgPSAzO1xuY29uc3QgREFURV9OVU1CRVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gbWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXVxuICAgICAgICAgICAgPyBwYXJzZUludChtYXRjaFtNT05USF9OVU1CRVJfR1JPVVBdKVxuICAgICAgICAgICAgOiBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBpZiAobW9udGggPCAxIHx8IG1vbnRoID4gMTIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX05VTUJFUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFtEQVRFX05VTUJFUl9HUk9VUF0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF5OiBkYXksXG4gICAgICAgICAgICBtb250aDogbW9udGgsXG4gICAgICAgICAgICB5ZWFyOiB5ZWFyLFxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IFRJTUVfT0ZfREFZX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MQ2FzdWFsRGF0ZVRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oZ2lzdGVyZW58bW9yZ2VufHZhbikob2NodGVuZHxtaWRkYWd8bmFtaWRkYWd8YXZvbmR8bmFjaHQpKD89XFxXfCQpL2k7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXRlVGV4dCA9IG1hdGNoW0RBVEVfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWVUZXh0ID0gbWF0Y2hbVElNRV9PRl9EQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgc3dpdGNoIChkYXRlVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcImdpc3RlcmVuXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNEYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNEYXkuc2V0RGF0ZShwcmV2aW91c0RheS5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHByZXZpb3VzRGF5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ2YW5cIjpcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1vcmdlblwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aW1lVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcIm9jaHRlbmRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkYWdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibmFtaWRkYWdcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiYXZvbmRcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1OTENhc3VhbERhdGVUaW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKGRpdHxkZXplfHZvcmlnfGFmZ2Vsb3BlbnwoPzphYW4pP2tvbWVuZHxvdmVyfFxcXFwrfC0pZT9cXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUFJFRklYX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgVElNRV9VTklUX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbVElNRV9VTklUX1dPUkRfR1JPVVBdKTtcbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ2b3JpZ1wiOlxuICAgICAgICAgICAgY2FzZSBcImFmZ2Vsb3BlblwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoZGl0fGRlemV8KD86YWFuKT9rb21lbmR8dm9sZ2VuZHxhZmdlbG9wZW58dm9yaWcpZT9cXFxccyooJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSkoPz1cXFxccyopYCArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBNT0RJRklFUl9XT1JEX0dST1VQID0gMTtcbmNvbnN0IFJFTEFUSVZFX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwidm9sZ2VuZFwiIHx8IG1vZGlmaWVyID09IFwia29tZW5kXCIgfHwgbW9kaWZpZXIgPT0gXCJhYW5rb21lbmRcIikge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwiYWZnZWxvcGVuXCIgfHwgbW9kaWZpZXIgPT0gXCJ2b3JpZ1wiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh1bml0V29yZC5tYXRjaCgvd2Vlay9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL21hYW5kL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0V29yZC5tYXRjaCgvamFhci9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNb250aCgwKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIoPzpnZWxlZGVufHZvb3J8ZWVyZGVyKSg/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBTVFJJQ1RfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCJcIiArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBcImdlbGVkZW4oPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpY3RNb2RlID8gU1RSSUNUX1BBVFRFUk4gOiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGNvbnN0IG91dHB1dFRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBvdXRwdXRUaW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5MVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIlwiICsgXCIoXCIgKyBUSU1FX1VOSVRTX1BBVFRFUk4gKyBcIilcIiArIFwiKGxhdGVyfG5hfHZhbmFmIG51fHZvb3J0YWFufHZvb3J1aXR8dWl0KVwiICsgXCIoPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIobGF0ZXJ8dmFuYWYgbnUpXCIgKyBcIig/PSg/OlxcXFxXfCQpKVwiLCBcImlcIik7XG5jb25zdCBHUk9VUF9OVU1fVElNRVVOSVRTID0gMTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdHJpY3RNb2RlID8gU1RSSUNUX1BBVFRFUk4gOiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZnJhZ21lbnRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFtHUk9VUF9OVU1fVElNRVVOSVRTXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIGZyYWdtZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TkxUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgTkxNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvTkxNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBOTE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL05MTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBOTENhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBOTENhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTENhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgTkxNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTE1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IE5MTW9udGhOYW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxNb250aE5hbWVQYXJzZXIuanNcIjtcbmltcG9ydCBOTFNsYXNoTW9udGhGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9OTFNsYXNoTW9udGhGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBOTFRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IE5MQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxDYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIuanNcIjtcbmltcG9ydCBOTENhc3VhbERhdGVUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxDYXN1YWxEYXRlVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL05MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBOTFRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvTkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IE5MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL05MVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgTkxDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBOTENhc3VhbERhdGVUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IE5MVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgTkxUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgTkxNb250aE5hbWVQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBOTFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBOTENhc3VhbFllYXJNb250aERheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MU2xhc2hNb250aEZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IE5MVGltZUV4cHJlc3Npb25QYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgTkxUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBOTFRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IE5MTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IE5MTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiZXhwb3J0IGNvbnN0IE5VTUJFUiA9IHtcbiAgICBcIumbtlwiOiAwLFxuICAgIFwi44CHXCI6IDAsXG4gICAgXCLkuIBcIjogMSxcbiAgICBcIuS6jFwiOiAyLFxuICAgIFwi5LikXCI6IDIsXG4gICAgXCLkuIlcIjogMyxcbiAgICBcIuWbm1wiOiA0LFxuICAgIFwi5LqUXCI6IDUsXG4gICAgXCLlha1cIjogNixcbiAgICBcIuS4g1wiOiA3LFxuICAgIFwi5YWrXCI6IDgsXG4gICAgXCLkuZ1cIjogOSxcbiAgICBcIuWNgVwiOiAxMCxcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9PRkZTRVQgPSB7XG4gICAgXCLlpKlcIjogMCxcbiAgICBcIuaXpVwiOiAwLFxuICAgIFwi5LiAXCI6IDEsXG4gICAgXCLkuoxcIjogMixcbiAgICBcIuS4iVwiOiAzLFxuICAgIFwi5ZubXCI6IDQsXG4gICAgXCLkupRcIjogNSxcbiAgICBcIuWFrVwiOiA2LFxufTtcbmV4cG9ydCBmdW5jdGlvbiB6aFN0cmluZ1RvTnVtYmVyKHRleHQpIHtcbiAgICBsZXQgbnVtYmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHRbaV07XG4gICAgICAgIGlmIChjaGFyID09PSBcIuWNgVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPT09IDAgPyBOVU1CRVJbY2hhcl0gOiBudW1iZXIgKiBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gTlVNQkVSW2NoYXJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gemhTdHJpbmdUb1llYXIodGV4dCkge1xuICAgIGxldCBzdHJpbmcgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGFyID0gdGV4dFtpXTtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nICsgTlVNQkVSW2NoYXJdO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciwgemhTdHJpbmdUb1llYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBZRUFSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMjtcbmNvbnN0IERBWV9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsyLDR9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgICAgICAgICBcIl17NH18XCIgK1xuICAgICAgICAgICAgXCJbXCIgK1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICAgICAgICAgIFwiXXsyfVwiICtcbiAgICAgICAgICAgIFwiKT9cIiArXG4gICAgICAgICAgICBcIig/OlxcXFxzKilcIiArXG4gICAgICAgICAgICBcIig/OuW5tCk/XCIgK1xuICAgICAgICAgICAgXCIoPzpbXFxcXHN8LHzvvIxdKilcIiArXG4gICAgICAgICAgICBcIihcIiArXG4gICAgICAgICAgICBcIlxcXFxkezEsMn18XCIgK1xuICAgICAgICAgICAgXCJbXCIgK1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICAgICAgICAgIFwiXXsxLDN9XCIgK1xuICAgICAgICAgICAgXCIpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrmnIgpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsxLDJ9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgICAgICAgICBcIl17MSwzfVwiICtcbiAgICAgICAgICAgIFwiKT9cIiArXG4gICAgICAgICAgICBcIig/OlxcXFxzKilcIiArXG4gICAgICAgICAgICBcIig/OuaXpXzlj7cpP1wiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBsZXQgbW9udGggPSBwYXJzZUludChtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4obW9udGgpKVxuICAgICAgICAgICAgbW9udGggPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBdKSB7XG4gICAgICAgICAgICBsZXQgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFZX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oZGF5KSlcbiAgICAgICAgICAgICAgICBkYXkgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0RBWV9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGNvbnRleHQucmVmRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHllYXIgPSBwYXJzZUludChtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oeWVhcikpXG4gICAgICAgICAgICAgICAgeWVhciA9IHpoU3RyaW5nVG9ZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYWRkRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdK3zljYp85YegKSg/OlxcXFxzKilcIiArXG4gICAgXCIoPzrkuKopP1wiICtcbiAgICBcIijnp5IoPzrpkp8pP3zliIbpkp985bCP5pe2fOmSn3zml6V85aSpfOaYn+acn3znpLzmi5x85pyIfOW5tClcIiArXG4gICAgXCIoPzooPzrkuYt86L+HKT/lkI58KD865LmLKT/lhoUpXCIsIFwiaVwiKTtcbmNvbnN0IE5VTUJFUl9HUk9VUCA9IDE7XG5jb25zdCBVTklUX0dST1VQID0gMjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgbGV0IG51bWJlciA9IHBhcnNlSW50KG1hdGNoW05VTUJFUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgbnVtYmVyID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtOVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOYU4obnVtYmVyKSkge1xuICAgICAgICAgICAgY29uc3Qgc3RyaW5nID0gbWF0Y2hbTlVNQkVSX0dST1VQXTtcbiAgICAgICAgICAgIGlmIChzdHJpbmcgPT09IFwi5YegXCIpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgPSAzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc3RyaW5nID09PSBcIuWNilwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gMC41O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgY29uc3QgdW5pdCA9IG1hdGNoW1VOSVRfR1JPVVBdO1xuICAgICAgICBjb25zdCB1bml0QWJiciA9IHVuaXRbMF07XG4gICAgICAgIGlmICh1bml0QWJici5tYXRjaCgvW+aXpeWkqeaYn+ekvOaciOW5tF0vKSkge1xuICAgICAgICAgICAgaWYgKHVuaXRBYmJyID09IFwi5pelXCIgfHwgdW5pdEFiYnIgPT0gXCLlpKlcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLmRheSA9IG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHVuaXRBYmJyID09IFwi5pifXCIgfHwgdW5pdEFiYnIgPT0gXCLnpLxcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLndlZWsgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuaciFwiKSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubW9udGggPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuW5tFwiKSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ueWVhciA9IG51bWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBhZGREdXJhdGlvbihjb250ZXh0LnJlZkRhdGUsIGR1cmF0aW9uKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVuaXRBYmJyID09IFwi56eSXCIpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uLnNlY29uZCA9IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuWIhlwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5taW51dGUgPSBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLlsI9cIiB8fCB1bml0QWJiciA9PSBcIumSn1wiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5ob3VyID0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBhZGREdXJhdGlvbihjb250ZXh0LnJlZkRhdGUsIGR1cmF0aW9uKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgZGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1pbnV0ZVwiLCBkYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgV0VFS0RBWV9PRkZTRVQgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/PHByZWZpeD7kuIp85LiLfOi/mSkoPzrkuKopPyg/OuaYn+acn3znpLzmi5x85ZGoKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIilcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNSZWxhdGlvbldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLmdyb3Vwcy5wcmVmaXg7XG4gICAgICAgIGlmIChwcmVmaXggPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLkuItcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLov5lcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGxldCBzdGFydE1vbWVudEZpeGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlZk9mZnNldCA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcImxhc3RcIiB8fCBtb2RpZmllciA9PSBcInBhc3RcIikge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgKG9mZnNldCAtIDcgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgICAgIHN0YXJ0TW9tZW50Rml4ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyID09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAob2Zmc2V0ICsgNyAtIHJlZk9mZnNldCkpO1xuICAgICAgICAgICAgc3RhcnRNb21lbnRGaXhlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXIgPT0gXCJ0aGlzXCIpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIChvZmZzZXQgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkaWZmID0gb2Zmc2V0IC0gcmVmT2Zmc2V0O1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiAtPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiArPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgb2Zmc2V0KTtcbiAgICAgICAgaWYgKHN0YXJ0TW9tZW50Rml4ZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IEZJUlNUX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OuS7jnzoh6opP1wiICtcbiAgICBcIig/OlwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKOaXqXzmnJ185pmaKXxcIiArXG4gICAgXCIo5LiKKD865Y2IKXzml6koPzrkuIopfOS4iyg/OuWNiCl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpfFwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKD865pelfOWkqSlcIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKykoPzpcXFxccyopKD8654K5fOaXtnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3zljYp85q2jfOaVtHxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgU0VDT05EX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Ol5cXFxccyooPzrliLB86IezfFxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnClcXFxccyopXCIgK1xuICAgIFwiKD86XCIgK1xuICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlkI585aSn5ZCOfOaYqCko5pepfOacnXzmmZopfFwiICtcbiAgICBcIijkuIooPzrljYgpfOaXqSg/OuS4iil85LiLKD865Y2IKXzmmZooPzrkuIopfOWknCg/OuaZmik/fOS4rSg/OuWNiCl85YeMKD865pmoKSl8XCIgK1xuICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlkI585aSn5ZCOfOaYqCkoPzrml6V85aSpKVwiICtcbiAgICBcIig/OltcXFxccyzvvIxdKilcIiArXG4gICAgXCIoPzoo5LiKKD865Y2IKXzml6koPzrkuIopfOS4iyg/OuWNiCl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpKT9cIiArXG4gICAgXCIpP1wiICtcbiAgICBcIig/OltcXFxccyzvvIxdKilcIiArXG4gICAgXCIoPzooXFxcXGQrfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKSg/OlxcXFxzKikoPzrngrl85pe2fDp877yaKVwiICtcbiAgICBcIig/OlxcXFxzKilcIiArXG4gICAgXCIoXFxcXGQrfOWNinzmraN85pW0fFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD865YiGfDp877yaKT9cIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/Ouenkik/KVwiICtcbiAgICBcIig/OlxcXFxzKihBLk0ufFAuTS58QU0/fFBNPykpP1wiLCBcImlcIik7XG5jb25zdCBEQVlfR1JPVVBfMSA9IDE7XG5jb25zdCBaSF9BTV9QTV9IT1VSX0dST1VQXzEgPSAyO1xuY29uc3QgWkhfQU1fUE1fSE9VUl9HUk9VUF8yID0gMztcbmNvbnN0IERBWV9HUk9VUF8zID0gNDtcbmNvbnN0IFpIX0FNX1BNX0hPVVJfR1JPVVBfMyA9IDU7XG5jb25zdCBIT1VSX0dST1VQID0gNjtcbmNvbnN0IE1JTlVURV9HUk9VUCA9IDc7XG5jb25zdCBTRUNPTkRfR1JPVVAgPSA4O1xuY29uc3QgQU1fUE1fSE9VUl9HUk9VUCA9IDk7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBwYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gXCIoKVwiO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBGSVJTVF9SRUdfUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGlmIChtYXRjaC5pbmRleCA+IDAgJiYgY29udGV4dC50ZXh0W21hdGNoLmluZGV4IC0gMV0ubWF0Y2goL1xcdy8pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnQgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChtYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBtYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5pioXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgc3RhcnRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBzdGFydE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBzdGFydE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIHN0YXJ0TW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIHN0YXJ0TW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICBjb25zdCBhbXBtID0gbWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF1bMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChhbXBtID09IFwiYVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbXBtID09IFwicFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzEgPSBtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuaXqVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTEgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmcyID0gbWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXTtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pepXCIgfHwgemhBTVBNMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTIgPT0gXCLkuItcIiB8fCB6aEFNUE0yID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgemhBTVBNU3RyaW5nMyA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM107XG4gICAgICAgICAgICBjb25zdCB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuaXqVwiIHx8IHpoQU1QTTMgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0zID09IFwi5LiLXCIgfHwgemhBTVBNMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBTRUNPTkRfUkVHX1BBVFRFUk4uZXhlYyhjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCkpO1xuICAgICAgICBpZiAoIXNlY29uZE1hdGNoKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbmRNb21lbnQgPSBuZXcgRGF0ZShzdGFydE1vbWVudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbREFZX0dST1VQXzFdIHx8IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgZW5kTW9tZW50ID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRleHQucmVmZXJlbmNlLmluc3RhbnQuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLliY1cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgKyAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKflkI5cIikge1xuICAgICAgICAgICAgICAgIGVuZE1vbWVudC5zZXREYXRlKGVuZE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiZGF5XCIsIGVuZE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJtb250aFwiLCBlbmRNb21lbnQuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJ5ZWFyXCIsIGVuZE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBzZWNvbmRNYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWQjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kTW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCBlbmRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtb250aFwiLCBlbmRNb21lbnQuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGhvdXIgPSAwO1xuICAgICAgICBtaW51dGUgPSAwO1xuICAgICAgICBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IHNlY29uZCA9IHBhcnNlSW50KHNlY29uZE1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwic2Vjb25kXCIsIHNlY29uZCk7XG4gICAgICAgIH1cbiAgICAgICAgaG91ciA9IHBhcnNlSW50KHNlY29uZE1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgaWYgKGlzTmFOKGhvdXIpKSB7XG4gICAgICAgICAgICBob3VyID0gemhTdHJpbmdUb051bWJlcihzZWNvbmRNYXRjaFtIT1VSX0dST1VQXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdID09IFwi5Y2KXCIpIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSAzMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmraNcIiB8fCBzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdID09IFwi5pW0XCIpIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWludXRlID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWludXRlID0gemhTdHJpbmdUb051bWJlcihzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEwMCkge1xuICAgICAgICAgICAgbWludXRlID0gaG91ciAlIDEwMDtcbiAgICAgICAgICAgIGhvdXIgPSBNYXRoLmZsb29yKGhvdXIgLyAxMDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaW51dGUgPj0gNjApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID4gMjQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VyID49IDEyKSB7XG4gICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlY29uZE1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBpZiAoaG91ciA+IDEyKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29uc3QgYW1wbSA9IHNlY29uZE1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzEgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuaXqVwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTEgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmcyID0gc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXTtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pepXCIgfHwgemhBTVBNMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTIgPT0gXCLkuItcIiB8fCB6aEFNUE0yID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgemhBTVBNU3RyaW5nMyA9IHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM107XG4gICAgICAgICAgICBjb25zdCB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuaXqVwiIHx8IHpoQU1QTTMgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0zID09IFwi5LiLXCIgfHwgemhBTVBNMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC50ZXh0ID0gcmVzdWx0LnRleHQgKyBzZWNvbmRNYXRjaFswXTtcbiAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICAgICAgICBpZiAobWVyaWRpZW0gPj0gMCkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJtZXJpZGllbVwiLCBtZXJpZGllbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEF0UE0gPSByZXN1bHQuc3RhcnQuaXNDZXJ0YWluKFwibWVyaWRpZW1cIikgJiYgcmVzdWx0LnN0YXJ0LmdldChcIm1lcmlkaWVtXCIpID09IDE7XG4gICAgICAgICAgICBpZiAoc3RhcnRBdFBNICYmIHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpID4gaG91cikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtZXJpZGllbVwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPiAxMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0LmVuZC5kYXRlKCkuZ2V0VGltZSgpIDwgcmVzdWx0LnN0YXJ0LmRhdGUoKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuaW1wbHkoXCJkYXlcIiwgcmVzdWx0LmVuZC5nZXQoXCJkYXlcIikgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgV0VFS0RBWV9PRkZTRVQgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OuaYn+acn3znpLzmi5x85ZGoKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIilcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3QgZGF5T2ZXZWVrID0gbWF0Y2guZ3JvdXBzLndlZWtkYXk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfT0ZGU0VUW2RheU9mV2Vla107XG4gICAgICAgIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0TW9tZW50Rml4ZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVmT2Zmc2V0ID0gZGF0ZS5nZXREYXkoKTtcbiAgICAgICAgbGV0IGRpZmYgPSBvZmZzZXQgLSByZWZPZmZzZXQ7XG4gICAgICAgIGlmIChNYXRoLmFicyhkaWZmIC0gNykgPCBNYXRoLmFicyhkaWZmKSkge1xuICAgICAgICAgICAgZGlmZiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChNYXRoLmFicyhkaWZmICsgNykgPCBNYXRoLmFicyhkaWZmKSkge1xuICAgICAgICAgICAgZGlmZiArPSA3O1xuICAgICAgICB9XG4gICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGRpZmYpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwid2Vla2RheVwiLCBvZmZzZXQpO1xuICAgICAgICBpZiAoc3RhcnRNb21lbnRGaXhlZCkge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW5zV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IE5PV19HUk9VUCA9IDE7XG5jb25zdCBEQVlfR1JPVVBfMSA9IDI7XG5jb25zdCBUSU1FX0dST1VQXzEgPSAzO1xuY29uc3QgVElNRV9HUk9VUF8yID0gNDtcbmNvbnN0IERBWV9HUk9VUF8zID0gNTtcbmNvbnN0IFRJTUVfR1JPVVBfMyA9IDY7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKFwiKOiAjOWutnznq4soPzrliLt85Y2zKXzljbPliLspfFwiICtcbiAgICAgICAgICAgIFwiKOS7inzmmI585YmNfOWkp+WJjXzlvox85aSn5b6MfOiBvXzmmKh85bCLfOeQtCko5pepfOacnXzmmZopfFwiICtcbiAgICAgICAgICAgIFwiKOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgICAgICAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKD865pelfOWkqSlcIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKD86KOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCByZWZEYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKG1hdGNoW05PV19HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgcmVmRGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1pbnV0ZVwiLCByZWZEYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJzZWNvbmRcIiwgcmVmRGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgcmVmRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbREFZX0dST1VQXzFdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkxID0gbWF0Y2hbREFZX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgdGltZTEgPSBtYXRjaFtUSU1FX0dST1VQXzFdO1xuICAgICAgICAgICAgaWYgKGRheTEgPT0gXCLmmI5cIiB8fCBkYXkxID09IFwi6IG9XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVmRGF0ZS5nZXRIb3VycygpID4gMSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5pioXCIgfHwgZGF5MSA9PSBcIuWwi1wiIHx8IGRheTEgPT0gXCLnkLRcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlvoxcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+W+jFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZTEgPT0gXCLml6lcIiB8fCB0aW1lMSA9PSBcIuacnVwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUxID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtUSU1FX0dST1VQXzJdKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lU3RyaW5nMiA9IG1hdGNoW1RJTUVfR1JPVVBfMl07XG4gICAgICAgICAgICBjb25zdCB0aW1lMiA9IHRpbWVTdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHRpbWUyID09IFwi5pepXCIgfHwgdGltZTIgPT0gXCLmnJ1cIiB8fCB0aW1lMiA9PSBcIuS4ilwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUyID09IFwi5LiLXCIgfHwgdGltZTIgPT0gXCLmmY9cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLlpJxcIiB8fCB0aW1lMiA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiIHx8IGRheTMgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIGlmIChyZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLmmKhcIiB8fCBkYXkzID09IFwi5bCLXCIgfHwgZGF5MyA9PSBcIueQtFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuW+jFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmczID0gbWF0Y2hbVElNRV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nMykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWUzID0gdGltZVN0cmluZzNbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRpbWUzID09IFwi5pepXCIgfHwgdGltZTMgPT0gXCLmnJ1cIiB8fCB0aW1lMyA9PSBcIuS4ilwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5LiLXCIgfHwgdGltZTMgPT0gXCLmmY9cIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5LitXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuWknFwiIHx8IHRpbWUzID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50Q2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJleHBvcnQgY29uc3QgTlVNQkVSID0ge1xuICAgIFwi6Zu2XCI6IDAsXG4gICAgXCLkuIBcIjogMSxcbiAgICBcIuS6jFwiOiAyLFxuICAgIFwi5YWpXCI6IDIsXG4gICAgXCLkuIlcIjogMyxcbiAgICBcIuWbm1wiOiA0LFxuICAgIFwi5LqUXCI6IDUsXG4gICAgXCLlha1cIjogNixcbiAgICBcIuS4g1wiOiA3LFxuICAgIFwi5YWrXCI6IDgsXG4gICAgXCLkuZ1cIjogOSxcbiAgICBcIuWNgVwiOiAxMCxcbiAgICBcIuW7v1wiOiAyMCxcbiAgICBcIuWNhVwiOiAzMCxcbn07XG5leHBvcnQgY29uc3QgV0VFS0RBWV9PRkZTRVQgPSB7XG4gICAgXCLlpKlcIjogMCxcbiAgICBcIuaXpVwiOiAwLFxuICAgIFwi5LiAXCI6IDEsXG4gICAgXCLkuoxcIjogMixcbiAgICBcIuS4iVwiOiAzLFxuICAgIFwi5ZubXCI6IDQsXG4gICAgXCLkupRcIjogNSxcbiAgICBcIuWFrVwiOiA2LFxufTtcbmV4cG9ydCBmdW5jdGlvbiB6aFN0cmluZ1RvTnVtYmVyKHRleHQpIHtcbiAgICBsZXQgbnVtYmVyID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgY2hhciA9IHRleHRbaV07XG4gICAgICAgIGlmIChjaGFyID09PSBcIuWNgVwiKSB7XG4gICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgPT09IDAgPyBOVU1CRVJbY2hhcl0gOiBudW1iZXIgKiBOVU1CRVJbY2hhcl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBudW1iZXIgKz0gTlVNQkVSW2NoYXJdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudW1iZXI7XG59XG5leHBvcnQgZnVuY3Rpb24gemhTdHJpbmdUb1llYXIodGV4dCkge1xuICAgIGxldCBzdHJpbmcgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGFyID0gdGV4dFtpXTtcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nICsgTlVNQkVSW2NoYXJdO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQoc3RyaW5nKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciwgemhTdHJpbmdUb1llYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBZRUFSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMjtcbmNvbnN0IERBWV9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnREYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsyLDR9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezR9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezJ9XCIgK1xuICAgICAgICAgICAgXCIpP1wiICtcbiAgICAgICAgICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICAgICAgICAgIFwiKD865bm0KT9cIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKFwiICtcbiAgICAgICAgICAgIFwiXFxcXGR7MSwyfXxcIiArXG4gICAgICAgICAgICBcIltcIiArIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArIFwiXXsxLDJ9XCIgK1xuICAgICAgICAgICAgXCIpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrmnIgpXCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoXCIgK1xuICAgICAgICAgICAgXCJcXFxcZHsxLDJ9fFwiICtcbiAgICAgICAgICAgIFwiW1wiICsgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICsgXCJdezEsMn1cIiArXG4gICAgICAgICAgICBcIik/XCIgK1xuICAgICAgICAgICAgXCIoPzpcXFxccyopXCIgK1xuICAgICAgICAgICAgXCIoPzrml6V86JmfKT9cIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgbGV0IG1vbnRoID0gcGFyc2VJbnQobWF0Y2hbTU9OVEhfR1JPVVBdKTtcbiAgICAgICAgaWYgKGlzTmFOKG1vbnRoKSlcbiAgICAgICAgICAgIG1vbnRoID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbREFZX0dST1VQXSkge1xuICAgICAgICAgICAgbGV0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBWV9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKGRheSkpXG4gICAgICAgICAgICAgICAgZGF5ID0gemhTdHJpbmdUb051bWJlcihtYXRjaFtEQVlfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBjb250ZXh0LnJlZkRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGxldCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHllYXIpKVxuICAgICAgICAgICAgICAgIHllYXIgPSB6aFN0cmluZ1RvWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgY29udGV4dC5yZWZEYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50RGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFkZER1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgeyBOVU1CRVIsIHpoU3RyaW5nVG9OdW1iZXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSt85Y2KfOW5vikoPzpcXFxccyopXCIgK1xuICAgIFwiKD865YCLKT9cIiArXG4gICAgXCIo56eSKD866ZCYKT985YiG6ZCYfOWwj+aZgnzpkJh85pelfOWkqXzmmJ/mnJ9856au5oucfOaciHzlubQpXCIgK1xuICAgIFwiKD86KD865LmLfOmBjik/5b6MfCg/OuS5iyk/5YWnKVwiLCBcImlcIik7XG5jb25zdCBOVU1CRVJfR1JPVVAgPSAxO1xuY29uc3QgVU5JVF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGxldCBudW1iZXIgPSBwYXJzZUludChtYXRjaFtOVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgIG51bWJlciA9IHpoU3RyaW5nVG9OdW1iZXIobWF0Y2hbTlVNQkVSX0dST1VQXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKG51bWJlcikpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0cmluZyA9IG1hdGNoW05VTUJFUl9HUk9VUF07XG4gICAgICAgICAgICBpZiAoc3RyaW5nID09PSBcIuW5vlwiKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyID0gMztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0cmluZyA9PT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG51bWJlciA9IDAuNTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0ge307XG4gICAgICAgIGNvbnN0IHVuaXQgPSBtYXRjaFtVTklUX0dST1VQXTtcbiAgICAgICAgY29uc3QgdW5pdEFiYnIgPSB1bml0WzBdO1xuICAgICAgICBpZiAodW5pdEFiYnIubWF0Y2goL1vml6XlpKnmmJ/npq7mnIjlubRdLykpIHtcbiAgICAgICAgICAgIGlmICh1bml0QWJiciA9PSBcIuaXpVwiIHx8IHVuaXRBYmJyID09IFwi5aSpXCIpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi5kYXkgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bml0QWJiciA9PSBcIuaYn1wiIHx8IHVuaXRBYmJyID09IFwi56auXCIpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi53ZWVrID0gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLmnIhcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1vbnRoID0gbnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLlubRcIikge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLnllYXIgPSBudW1iZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gYWRkRHVyYXRpb24oY29udGV4dC5yZWZEYXRlLCBkdXJhdGlvbik7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bml0QWJiciA9PSBcIuenklwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbi5zZWNvbmQgPSBudW1iZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdEFiYnIgPT0gXCLliIZcIikge1xuICAgICAgICAgICAgZHVyYXRpb24ubWludXRlID0gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVuaXRBYmJyID09IFwi5bCPXCIgfHwgdW5pdEFiYnIgPT0gXCLpkJhcIikge1xuICAgICAgICAgICAgZHVyYXRpb24uaG91ciA9IG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gYWRkRHVyYXRpb24oY29udGV4dC5yZWZEYXRlLCBkdXJhdGlvbik7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGRhdGUuZ2V0SG91cnMoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtaW51dGVcIiwgZGF0ZS5nZXRNaW51dGVzKCkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwic2Vjb25kXCIsIGRhdGUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IFdFRUtEQVlfT0ZGU0VUIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzxwcmVmaXg+5LiKfOS7inzkuIt86YCZfOWRoikoPzrlgIspPyg/OuaYn+acn3znpq7mi5x86YCxKSg/PHdlZWtkYXk+XCIgKyBPYmplY3Qua2V5cyhXRUVLREFZX09GRlNFVCkuam9pbihcInxcIikgKyBcIilcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoLmdyb3Vwcy5wcmVmaXg7XG4gICAgICAgIGlmIChwcmVmaXggPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLkuItcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwcmVmaXggPT0gXCLku4pcIiB8fCBwcmVmaXggPT0gXCLpgJlcIiB8fCBwcmVmaXggPT0gXCLlkaJcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZEYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGxldCBzdGFydE1vbWVudEZpeGVkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlZk9mZnNldCA9IGRhdGUuZ2V0RGF5KCk7XG4gICAgICAgIGlmIChtb2RpZmllciA9PSBcImxhc3RcIiB8fCBtb2RpZmllciA9PSBcInBhc3RcIikge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgKG9mZnNldCAtIDcgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgICAgIHN0YXJ0TW9tZW50Rml4ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyID09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAob2Zmc2V0ICsgNyAtIHJlZk9mZnNldCkpO1xuICAgICAgICAgICAgc3RhcnRNb21lbnRGaXhlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXIgPT0gXCJ0aGlzXCIpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIChvZmZzZXQgLSByZWZPZmZzZXQpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCBkaWZmID0gb2Zmc2V0IC0gcmVmT2Zmc2V0O1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiAtPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICAgICAgZGlmZiArPSA3O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIndlZWtkYXlcIiwgb2Zmc2V0KTtcbiAgICAgICAgaWYgKHN0YXJ0TW9tZW50Rml4ZWQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFudFJlbGF0aW9uV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IE5VTUJFUiwgemhTdHJpbmdUb051bWJlciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IEZJUlNUX1JFR19QQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OueUsXzlvp586IeqKT9cIiArXG4gICAgXCIoPzpcIiArXG4gICAgXCIo5LuKfOaYjnzliY185aSn5YmNfOW+jHzlpKflvox86IG9fOaYqHzlsIt855C0KSjml6l85pydfOaZmil8XCIgK1xuICAgIFwiKOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgXCIo5LuKfOaYjnzliY185aSn5YmNfOW+jHzlpKflvox86IG9fOaYqHzlsIt855C0KSg/OuaXpXzlpKkpXCIgK1xuICAgIFwiKD86W1xcXFxzLO+8jF0qKVwiICtcbiAgICBcIig/OijkuIooPzrljYh85pmdKXzmnJ0oPzrml6kpfOaXqSg/OuS4iil85LiLKD865Y2IfOaZnSl85pmPKD865pmdKXzmmZooPzrkuIopfOWknCg/OuaZmik/fOS4rSg/OuWNiCl85YeMKD865pmoKSkpP1wiICtcbiAgICBcIik/XCIgK1xuICAgIFwiKD86W1xcXFxzLO+8jF0qKVwiICtcbiAgICBcIig/OihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspKD86XFxcXHMqKSg/Oum7nnzmmYJ8OnzvvJopXCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt85Y2KfOato3zmlbR8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrliIZ8OnzvvJopP1wiICtcbiAgICBcIig/OlxcXFxzKilcIiArXG4gICAgXCIoXFxcXGQrfFtcIiArXG4gICAgT2JqZWN0LmtleXMoTlVNQkVSKS5qb2luKFwiXCIpICtcbiAgICBcIl0rKT8oPzpcXFxccyopKD8656eSKT8pXCIgK1xuICAgIFwiKD86XFxcXHMqKEEuTS58UC5NLnxBTT98UE0/KSk/XCIsIFwiaVwiKTtcbmNvbnN0IFNFQ09ORF9SRUdfUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpeXFxcXHMqKD865YiwfOiHs3xcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJwpXFxcXHMqKVwiICtcbiAgICBcIig/OlwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKOaXqXzmnJ185pmaKXxcIiArXG4gICAgXCIo5LiKKD865Y2IfOaZnSl85pydKD865pepKXzml6koPzrkuIopfOS4iyg/OuWNiHzmmZ0pfOaZjyg/OuaZnSl85pmaKD865LiKKXzlpJwoPzrmmZopP3zkuK0oPzrljYgpfOWHjCg/OuaZqCkpfFwiICtcbiAgICBcIijku4p85piOfOWJjXzlpKfliY185b6MfOWkp+W+jHzogb185piofOWwi3znkLQpKD865pelfOWkqSlcIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KOS4iig/OuWNiHzmmZ0pfOacnSg/OuaXqSl85pepKD865LiKKXzkuIsoPzrljYh85pmdKXzmmY8oPzrmmZ0pfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPzpbXFxcXHMs77yMXSopXCIgK1xuICAgIFwiKD86KFxcXFxkK3xbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKykoPzpcXFxccyopKD866buefOaZgnw6fO+8milcIiArXG4gICAgXCIoPzpcXFxccyopXCIgK1xuICAgIFwiKFxcXFxkK3zljYp85q2jfOaVtHxbXCIgK1xuICAgIE9iamVjdC5rZXlzKE5VTUJFUikuam9pbihcIlwiKSArXG4gICAgXCJdKyk/KD86XFxcXHMqKSg/OuWIhnw6fO+8mik/XCIgK1xuICAgIFwiKD86XFxcXHMqKVwiICtcbiAgICBcIihcXFxcZCt8W1wiICtcbiAgICBPYmplY3Qua2V5cyhOVU1CRVIpLmpvaW4oXCJcIikgK1xuICAgIFwiXSspPyg/OlxcXFxzKikoPzrnp5IpPylcIiArXG4gICAgXCIoPzpcXFxccyooQS5NLnxQLk0ufEFNP3xQTT8pKT9cIiwgXCJpXCIpO1xuY29uc3QgREFZX0dST1VQXzEgPSAxO1xuY29uc3QgWkhfQU1fUE1fSE9VUl9HUk9VUF8xID0gMjtcbmNvbnN0IFpIX0FNX1BNX0hPVVJfR1JPVVBfMiA9IDM7XG5jb25zdCBEQVlfR1JPVVBfMyA9IDQ7XG5jb25zdCBaSF9BTV9QTV9IT1VSX0dST1VQXzMgPSA1O1xuY29uc3QgSE9VUl9HUk9VUCA9IDY7XG5jb25zdCBNSU5VVEVfR1JPVVAgPSA3O1xuY29uc3QgU0VDT05EX0dST1VQID0gODtcbmNvbnN0IEFNX1BNX0hPVVJfR1JPVVAgPSA5O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFwiKClcIjtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gRklSU1RfUkVHX1BBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2guaW5kZXggPiAwICYmIGNvbnRleHQudGV4dFttYXRjaC5pbmRleCAtIDFdLm1hdGNoKC9cXHcvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAobWF0Y2hbREFZX0dST1VQXzFdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkxID0gbWF0Y2hbREFZX0dST1VQXzFdO1xuICAgICAgICAgICAgaWYgKGRheTEgPT0gXCLmmI5cIiB8fCBkYXkxID09IFwi6IG9XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5yZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuaYqFwiIHx8IGRheTEgPT0gXCLlsItcIiB8fCBkYXkxID09IFwi55C0XCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+W+jFwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgc3RhcnRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCBzdGFydE1vbWVudC5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiIHx8IGRheTMgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5pioXCIgfHwgZGF5MyA9PSBcIuWwi1wiIHx8IGRheTMgPT0gXCLnkLRcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRNb21lbnQuc2V0RGF0ZShzdGFydE1vbWVudC5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlvoxcIikge1xuICAgICAgICAgICAgICAgIHN0YXJ0TW9tZW50LnNldERhdGUoc3RhcnRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBzdGFydE1vbWVudC5zZXREYXRlKHN0YXJ0TW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBzdGFydE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIHN0YXJ0TW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIHN0YXJ0TW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtb250aFwiLCBzdGFydE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHN0YXJ0TW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBob3VyID0gMDtcbiAgICAgICAgbGV0IG1pbnV0ZSA9IDA7XG4gICAgICAgIGxldCBtZXJpZGllbSA9IC0xO1xuICAgICAgICBpZiAobWF0Y2hbU0VDT05EX0dST1VQXSkge1xuICAgICAgICAgICAgdmFyIHNlY29uZCA9IHBhcnNlSW50KG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgaWYgKGlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgICAgICAgICBzZWNvbmQgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW1NFQ09ORF9HUk9VUF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlY29uZCA+PSA2MClcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IG1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChtYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKG1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB2YXIgYW1wbSA9IG1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdKSB7XG4gICAgICAgICAgICB2YXIgemhBTVBNU3RyaW5nMSA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV07XG4gICAgICAgICAgICB2YXIgemhBTVBNMSA9IHpoQU1QTVN0cmluZzFbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMSA9PSBcIuacnVwiIHx8IHpoQU1QTTEgPT0gXCLml6lcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0xID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8yXSkge1xuICAgICAgICAgICAgdmFyIHpoQU1QTVN0cmluZzIgPSBtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pydXCIgfHwgemhBTVBNMiA9PSBcIuaXqVwiIHx8IHpoQU1QTTIgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0yID09IFwi5LiLXCIgfHwgemhBTVBNMiA9PSBcIuaZj1wiIHx8IHpoQU1QTTIgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzNdKSB7XG4gICAgICAgICAgICB2YXIgemhBTVBNU3RyaW5nMyA9IG1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfM107XG4gICAgICAgICAgICB2YXIgemhBTVBNMyA9IHpoQU1QTVN0cmluZzNbMF07XG4gICAgICAgICAgICBpZiAoemhBTVBNMyA9PSBcIuS4ilwiIHx8IHpoQU1QTTMgPT0gXCLmnJ1cIiB8fCB6aEFNUE0zID09IFwi5pepXCIgfHwgemhBTVBNMyA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAwO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID09IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHpoQU1QTTMgPT0gXCLkuItcIiB8fCB6aEFNUE0zID09IFwi5pmPXCIgfHwgemhBTVBNMyA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgbWVyaWRpZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Vjb25kTWF0Y2ggPSBTRUNPTkRfUkVHX1BBVFRFUk4uZXhlYyhjb250ZXh0LnRleHQuc3Vic3RyaW5nKHJlc3VsdC5pbmRleCArIHJlc3VsdC50ZXh0Lmxlbmd0aCkpO1xuICAgICAgICBpZiAoIXNlY29uZE1hdGNoKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LnRleHQubWF0Y2goL15cXGQrJC8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBlbmRNb21lbnQgPSBuZXcgRGF0ZShzdGFydE1vbWVudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbREFZX0dST1VQXzFdIHx8IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgZW5kTW9tZW50ID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTEgPSBzZWNvbmRNYXRjaFtEQVlfR1JPVVBfMV07XG4gICAgICAgICAgICBpZiAoZGF5MSA9PSBcIuaYjlwiIHx8IGRheTEgPT0gXCLogb1cIikge1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LnJlZkRhdGUuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIiB8fCBkYXkxID09IFwi5bCLXCIgfHwgZGF5MSA9PSBcIueQtFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WJjVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuW+jFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+W+jFwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kTW9tZW50LmdldERhdGUoKSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcInllYXJcIiwgZW5kTW9tZW50LmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXSkge1xuICAgICAgICAgICAgY29uc3QgZGF5MyA9IHNlY29uZE1hdGNoW0RBWV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmIChkYXkzID09IFwi5piOXCIgfHwgZGF5MyA9PSBcIuiBvVwiKSB7XG4gICAgICAgICAgICAgICAgZW5kTW9tZW50LnNldERhdGUoZW5kTW9tZW50LmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiIHx8IGRheTMgPT0gXCLlsItcIiB8fCBkYXkzID09IFwi55C0XCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpIC0gMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5b6MXCIpIHtcbiAgICAgICAgICAgICAgICBlbmRNb21lbnQuc2V0RGF0ZShlbmRNb21lbnQuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmRNb21lbnQuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwibW9udGhcIiwgZW5kTW9tZW50LmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwieWVhclwiLCBlbmRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwiZGF5XCIsIGVuZE1vbWVudC5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1vbnRoXCIsIGVuZE1vbWVudC5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmltcGx5KFwieWVhclwiLCBlbmRNb21lbnQuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaG91ciA9IDA7XG4gICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgIG1lcmlkaWVtID0gLTE7XG4gICAgICAgIGlmIChzZWNvbmRNYXRjaFtTRUNPTkRfR1JPVVBdKSB7XG4gICAgICAgICAgICBsZXQgc2Vjb25kID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4oc2Vjb25kKSkge1xuICAgICAgICAgICAgICAgIHNlY29uZCA9IHpoU3RyaW5nVG9OdW1iZXIoc2Vjb25kTWF0Y2hbU0VDT05EX0dST1VQXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2Vjb25kID49IDYwKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJzZWNvbmRcIiwgc2Vjb25kKTtcbiAgICAgICAgfVxuICAgICAgICBob3VyID0gcGFyc2VJbnQoc2Vjb25kTWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaXNOYU4oaG91cikpIHtcbiAgICAgICAgICAgIGhvdXIgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW0hPVVJfR1JPVVBdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSkge1xuICAgICAgICAgICAgaWYgKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLljYpcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDMwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2Vjb25kTWF0Y2hbTUlOVVRFX0dST1VQXSA9PSBcIuato1wiIHx8IHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0gPT0gXCLmlbRcIikge1xuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludChzZWNvbmRNYXRjaFtNSU5VVEVfR1JPVVBdKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSB6aFN0cmluZ1RvTnVtYmVyKHNlY29uZE1hdGNoW01JTlVURV9HUk9VUF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChob3VyID4gMTAwKSB7XG4gICAgICAgICAgICBtaW51dGUgPSBob3VyICUgMTAwO1xuICAgICAgICAgICAgaG91ciA9IE1hdGguZmxvb3IoaG91ciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbnV0ZSA+PSA2MCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPiAyNCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhvdXIgPj0gMTIpIHtcbiAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2Vjb25kTWF0Y2hbQU1fUE1fSE9VUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGlmIChob3VyID4gMTIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB2YXIgYW1wbSA9IHNlY29uZE1hdGNoW0FNX1BNX0hPVVJfR1JPVVBdWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcImFcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYW1wbSA9PSBcInBcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN0YXJ0LmlzQ2VydGFpbihcIm1lcmlkaWVtXCIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1lcmlkaWVtID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhcnQuZ2V0KFwiaG91clwiKSA9PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgIT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIHJlc3VsdC5zdGFydC5nZXQoXCJob3VyXCIpICsgMTIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMV0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzEgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzFdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTEgPSB6aEFNUE1TdHJpbmcxWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTEgPT0gXCLmnJ1cIiB8fCB6aEFNUE0xID09IFwi5pepXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoemhBTVBNMSA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgbWVyaWRpZW0gPSAxO1xuICAgICAgICAgICAgICAgIGlmIChob3VyICE9IDEyKVxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlY29uZE1hdGNoW1pIX0FNX1BNX0hPVVJfR1JPVVBfMl0pIHtcbiAgICAgICAgICAgIGNvbnN0IHpoQU1QTVN0cmluZzIgPSBzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzJdO1xuICAgICAgICAgICAgdmFyIHpoQU1QTTIgPSB6aEFNUE1TdHJpbmcyWzBdO1xuICAgICAgICAgICAgaWYgKHpoQU1QTTIgPT0gXCLkuIpcIiB8fCB6aEFNUE0yID09IFwi5pydXCIgfHwgemhBTVBNMiA9PSBcIuaXqVwiIHx8IHpoQU1QTTIgPT0gXCLlh4xcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMDtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA9PSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh6aEFNUE0yID09IFwi5LiLXCIgfHwgemhBTVBNMiA9PSBcIuaZj1wiIHx8IHpoQU1QTTIgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgIG1lcmlkaWVtID0gMTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciAhPSAxMilcbiAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWNvbmRNYXRjaFtaSF9BTV9QTV9IT1VSX0dST1VQXzNdKSB7XG4gICAgICAgICAgICBjb25zdCB6aEFNUE1TdHJpbmczID0gc2Vjb25kTWF0Y2hbWkhfQU1fUE1fSE9VUl9HUk9VUF8zXTtcbiAgICAgICAgICAgIHZhciB6aEFNUE0zID0gemhBTVBNU3RyaW5nM1swXTtcbiAgICAgICAgICAgIGlmICh6aEFNUE0zID09IFwi5LiKXCIgfHwgemhBTVBNMyA9PSBcIuacnVwiIHx8IHpoQU1QTTMgPT0gXCLml6lcIiB8fCB6aEFNUE0zID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoemhBTVBNMyA9PSBcIuS4i1wiIHx8IHpoQU1QTTMgPT0gXCLmmY9cIiB8fCB6aEFNUE0zID09IFwi5pmaXCIpIHtcbiAgICAgICAgICAgICAgICBtZXJpZGllbSA9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgIT0gMTIpXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnRleHQgPSByZXN1bHQudGV4dCArIHNlY29uZE1hdGNoWzBdO1xuICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImhvdXJcIiwgaG91cik7XG4gICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwibWludXRlXCIsIG1pbnV0ZSk7XG4gICAgICAgIGlmIChtZXJpZGllbSA+PSAwKSB7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcIm1lcmlkaWVtXCIsIG1lcmlkaWVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0QXRQTSA9IHJlc3VsdC5zdGFydC5pc0NlcnRhaW4oXCJtZXJpZGllbVwiKSAmJiByZXN1bHQuc3RhcnQuZ2V0KFwibWVyaWRpZW1cIikgPT0gMTtcbiAgICAgICAgICAgIGlmIChzdGFydEF0UE0gJiYgcmVzdWx0LnN0YXJ0LmdldChcImhvdXJcIikgPiBob3VyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaG91ciA+IDEyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQuZW5kLmRhdGUoKS5nZXRUaW1lKCkgPCByZXN1bHQuc3RhcnQuZGF0ZSgpLmdldFRpbWUoKSkge1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5pbXBseShcImRheVwiLCByZXN1bHQuZW5kLmdldChcImRheVwiKSArIDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBXRUVLREFZX09GRlNFVCB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD865pif5pyffOemruaLnHzpgLEpKD88d2Vla2RheT5cIiArIE9iamVjdC5rZXlzKFdFRUtEQVlfT0ZGU0VUKS5qb2luKFwifFwiKSArIFwiKVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFpISGFudFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaC5ncm91cHMud2Vla2RheTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gV0VFS0RBWV9PRkZTRVRbZGF5T2ZXZWVrXTtcbiAgICAgICAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnRGaXhlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCByZWZPZmZzZXQgPSBkYXRlLmdldERheSgpO1xuICAgICAgICBsZXQgZGlmZiA9IG9mZnNldCAtIHJlZk9mZnNldDtcbiAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgLSA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICBkaWZmIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKGRpZmYgKyA3KSA8IE1hdGguYWJzKGRpZmYpKSB7XG4gICAgICAgICAgICBkaWZmICs9IDc7XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgZGlmZik7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ3ZWVrZGF5XCIsIG9mZnNldCk7XG4gICAgICAgIGlmIChzdGFydE1vbWVudEZpeGVkKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnRXZWVrZGF5UGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo6IezfOWIsHxcXC18XFx+fO+9nnzvvI1844O8KVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9WkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0V4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgWkhIYW50Q2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnREYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW50RGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW50RGVhZGxpbmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50V2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFudFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBoYW50ID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKCk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgWkhIYW50Q2FzdWFsRGF0ZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uKHtcbiAgICAgICAgcGFyc2VyczogW1xuICAgICAgICAgICAgbmV3IFpISGFudERhdGVQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnRXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnREZWFkbGluZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBaSEhhbnRNZXJnZURhdGVSYW5nZVJlZmluZXIoKSwgbmV3IFpISGFudE1lcmdlRGF0ZVRpbWVSZWZpbmVyKCldLFxuICAgIH0pO1xuICAgIGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMgPSBjb25maWd1cmF0aW9uLnJlZmluZXJzLmZpbHRlcigocmVmaW5lcikgPT4gIShyZWZpbmVyIGluc3RhbmNlb2YgRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lcikpO1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBOT1dfR1JPVVAgPSAxO1xuY29uc3QgREFZX0dST1VQXzEgPSAyO1xuY29uc3QgVElNRV9HUk9VUF8xID0gMztcbmNvbnN0IFRJTUVfR1JPVVBfMiA9IDQ7XG5jb25zdCBEQVlfR1JPVVBfMyA9IDU7XG5jb25zdCBUSU1FX0dST1VQXzMgPSA2O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgWkhIYW5zQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIijnjrDlnKh856uLKD865Yi7fOWNsyl85Y2z5Yi7KXxcIiArXG4gICAgICAgICAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKOaXqXzmmZopfFwiICtcbiAgICAgICAgICAgIFwiKOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKXxcIiArXG4gICAgICAgICAgICBcIijku4p85piOfOWJjXzlpKfliY185ZCOfOWkp+WQjnzmmKgpKD865pelfOWkqSlcIiArXG4gICAgICAgICAgICBcIig/OltcXFxcc3wsfO+8jF0qKVwiICtcbiAgICAgICAgICAgIFwiKD86KOS4iig/OuWNiCl85pepKD865LiKKXzkuIsoPzrljYgpfOaZmig/OuS4iil85aScKD865pmaKT985LitKD865Y2IKXzlh4woPzrmmagpKSk/XCIsIFwiaVwiKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbWF0Y2guaW5kZXg7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChpbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCByZWZEYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKHJlZkRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgaWYgKG1hdGNoW05PV19HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgcmVmRGF0ZS5nZXRIb3VycygpKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1pbnV0ZVwiLCByZWZEYXRlLmdldE1pbnV0ZXMoKSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJzZWNvbmRcIiwgcmVmRGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgcmVmRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbREFZX0dST1VQXzFdKSB7XG4gICAgICAgICAgICBjb25zdCBkYXkxID0gbWF0Y2hbREFZX0dST1VQXzFdO1xuICAgICAgICAgICAgY29uc3QgdGltZTEgPSBtYXRjaFtUSU1FX0dST1VQXzFdO1xuICAgICAgICAgICAgaWYgKGRheTEgPT0gXCLmmI5cIikge1xuICAgICAgICAgICAgICAgIGlmIChyZWZEYXRlLmdldEhvdXJzKCkgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLmmKhcIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWJjVwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkxID09IFwi5aSn5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTEgPT0gXCLlkI5cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MSA9PSBcIuWkp+WQjlwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGltZTEgPT0gXCLml6lcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMSA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobWF0Y2hbVElNRV9HUk9VUF8yXSkge1xuICAgICAgICAgICAgY29uc3QgdGltZVN0cmluZzIgPSBtYXRjaFtUSU1FX0dST1VQXzJdO1xuICAgICAgICAgICAgY29uc3QgdGltZTIgPSB0aW1lU3RyaW5nMlswXTtcbiAgICAgICAgICAgIGlmICh0aW1lMiA9PSBcIuaXqVwiIHx8IHRpbWUyID09IFwi5LiKXCIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuItcIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTIpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1lcmlkaWVtXCIsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGltZTIgPT0gXCLlpJxcIiB8fCB0aW1lMiA9PSBcIuaZmlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAyMik7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lMiA9PSBcIuWHjFwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChtYXRjaFtEQVlfR1JPVVBfM10pIHtcbiAgICAgICAgICAgIGNvbnN0IGRheTMgPSBtYXRjaFtEQVlfR1JPVVBfM107XG4gICAgICAgICAgICBpZiAoZGF5MyA9PSBcIuaYjlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZkRhdGUuZ2V0SG91cnMoKSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuaYqFwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5YmNXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGRheTMgPT0gXCLlpKfliY1cIikge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5MyA9PSBcIuWQjlwiKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkYXkzID09IFwi5aSn5ZCOXCIpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRpbWVTdHJpbmczID0gbWF0Y2hbVElNRV9HUk9VUF8zXTtcbiAgICAgICAgICAgIGlmICh0aW1lU3RyaW5nMykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWUzID0gdGltZVN0cmluZzNbMF07XG4gICAgICAgICAgICAgICAgaWYgKHRpbWUzID09IFwi5pepXCIgfHwgdGltZTMgPT0gXCLkuIpcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aW1lMyA9PSBcIuS4i1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcImhvdXJcIiwgMTUpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtZXJpZGllbVwiLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZTMgPT0gXCLkuK1cIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5aScXCIgfHwgdGltZTMgPT0gXCLmmZpcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwibWVyaWRpZW1cIiwgMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWUzID09IFwi5YeMXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo6IezfOWIsHwtfH58772efO+8jXzjg7wpXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1aSEhhbnNNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBaSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVpISGFuc01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvRXh0cmFjdFRpbWV6b25lT2Zmc2V0UmVmaW5lci5qc1wiO1xuaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBaSEhhbnNDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc0RhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnNEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zRGVhZGxpbmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9aSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1pISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnNXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvWkhIYW5zV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc01lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9aSEhhbnNNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBaSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9aSEhhbnNNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGhhbnMgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBaSEhhbnNDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGF0ZVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1dlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFpISGFuc01lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLCBuZXcgWkhIYW5zTWVyZ2VEYXRlVGltZVJlZmluZXIoKV0sXG4gICAgfSk7XG4gICAgY29uZmlndXJhdGlvbi5yZWZpbmVycyA9IGNvbmZpZ3VyYXRpb24ucmVmaW5lcnMuZmlsdGVyKChyZWZpbmVyKSA9PiAhKHJlZmluZXIgaW5zdGFuY2VvZiBFeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyKSk7XG4gICAgcmV0dXJuIGNvbmZpZ3VyYXRpb247XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IEV4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9yZWZpbmVycy9FeHRyYWN0VGltZXpvbmVPZmZzZXRSZWZpbmVyLmpzXCI7XG5pbXBvcnQgWkhIYW5zRGF0ZVBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc0RlYWRsaW5lRm9ybWF0UGFyc2VyIGZyb20gXCIuL2hhbnMvcGFyc2Vycy9aSEhhbnNEZWFkbGluZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zUmVsYXRpb25XZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vaGFucy9wYXJzZXJzL1pISGFuc1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW5zV2Vla2RheVBhcnNlciBmcm9tIFwiLi9oYW5zL3BhcnNlcnMvWkhIYW5zV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFpISGFudENhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vaGFudC9wYXJzZXJzL1pISGFudENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnREYXRlUGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnREYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50RGVhZGxpbmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vaGFudC9wYXJzZXJzL1pISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50UmVsYXRpb25XZWVrZGF5UGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnRSZWxhdGlvbldlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9oYW50L3BhcnNlcnMvWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBaSEhhbnRXZWVrZGF5UGFyc2VyIGZyb20gXCIuL2hhbnQvcGFyc2Vycy9aSEhhbnRXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL2hhbnQvcmVmaW5lcnMvWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgWkhIYW50TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vaGFudC9yZWZpbmVycy9aSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0ICogYXMgaGFudCBmcm9tIFwiLi9oYW50L2luZGV4LmpzXCI7XG5leHBvcnQgKiBhcyBoYW5zIGZyb20gXCIuL2hhbnMvaW5kZXguanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbigpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFpISGFudENhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBaSEhhbnREYXRlUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGF0ZVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudFJlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFuc1JlbGF0aW9uV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudFdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW50VGltZUV4cHJlc3Npb25QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBaSEhhbnNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFpISGFudERlYWRsaW5lRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgWkhIYW5zRGVhZGxpbmVGb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgWkhIYW50TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCksIG5ldyBaSEhhbnRNZXJnZURhdGVUaW1lUmVmaW5lcigpXSxcbiAgICB9KTtcbiAgICBjb25maWd1cmF0aW9uLnJlZmluZXJzID0gY29uZmlndXJhdGlvbi5yZWZpbmVycy5maWx0ZXIoKHJlZmluZXIpID0+ICEocmVmaW5lciBpbnN0YW5jZW9mIEV4dHJhY3RUaW1lem9uZU9mZnNldFJlZmluZXIpKTtcbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBSRUdFWF9QQVJUUyA9IHtcbiAgICBsZWZ0Qm91bmRhcnk6IFwiKFteXFxcXHB7TH1cXFxccHtOfV9dfF4pXCIsXG4gICAgcmlnaHRCb3VuZGFyeTogXCIoPz1bXlxcXFxwe0x9XFxcXHB7Tn1fXXwkKVwiLFxuICAgIGZsYWdzOiBcIml1XCIsXG59O1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICDQstC+0YHQutGA0LXRgdC10L3RjNC1OiAwLFxuICAgINCy0L7RgdC60YDQtdGB0LXQvdGM0Y86IDAsXG4gICAg0LLRgdC6OiAwLFxuICAgIFwi0LLRgdC6LlwiOiAwLFxuICAgINC/0L7QvdC10LTQtdC70YzQvdC40Lo6IDEsXG4gICAg0L/QvtC90LXQtNC10LvRjNC90LjQutCwOiAxLFxuICAgINC/0L06IDEsXG4gICAgXCLQv9C9LlwiOiAxLFxuICAgINCy0YLQvtGA0L3QuNC6OiAyLFxuICAgINCy0YLQvtGA0L3QuNC60LA6IDIsXG4gICAg0LLRgjogMixcbiAgICBcItCy0YIuXCI6IDIsXG4gICAg0YHRgNC10LTQsDogMyxcbiAgICDRgdGA0LXQtNGLOiAzLFxuICAgINGB0YDQtdC00YM6IDMsXG4gICAg0YHRgDogMyxcbiAgICBcItGB0YAuXCI6IDMsXG4gICAg0YfQtdGC0LLQtdGA0LM6IDQsXG4gICAg0YfQtdGC0LLQtdGA0LPQsDogNCxcbiAgICDRh9GCOiA0LFxuICAgIFwi0YfRgi5cIjogNCxcbiAgICDQv9GP0YLQvdC40YbQsDogNSxcbiAgICDQv9GP0YLQvdC40YbRgzogNSxcbiAgICDQv9GP0YLQvdC40YbRizogNSxcbiAgICDQv9GCOiA1LFxuICAgIFwi0L/Rgi5cIjogNSxcbiAgICDRgdGD0LHQsdC+0YLQsDogNixcbiAgICDRgdGD0LHQsdC+0YLRgzogNixcbiAgICDRgdGD0LHQsdC+0YLRizogNixcbiAgICDRgdCxOiA2LFxuICAgIFwi0YHQsS5cIjogNixcbn07XG5leHBvcnQgY29uc3QgRlVMTF9NT05USF9OQU1FX0RJQ1RJT05BUlkgPSB7XG4gICAg0Y/QvdCy0LDRgNGMOiAxLFxuICAgINGP0L3QstCw0YDRjzogMSxcbiAgICDRj9C90LLQsNGA0LU6IDEsXG4gICAg0YTQtdCy0YDQsNC70Yw6IDIsXG4gICAg0YTQtdCy0YDQsNC70Y86IDIsXG4gICAg0YTQtdCy0YDQsNC70LU6IDIsXG4gICAg0LzQsNGA0YI6IDMsXG4gICAg0LzQsNGA0YLQsDogMyxcbiAgICDQvNCw0YDRgtC1OiAzLFxuICAgINCw0L/RgNC10LvRjDogNCxcbiAgICDQsNC/0YDQtdC70Y86IDQsXG4gICAg0LDQv9GA0LXQu9C1OiA0LFxuICAgINC80LDQuTogNSxcbiAgICDQvNCw0Y86IDUsXG4gICAg0LzQsNC1OiA1LFxuICAgINC40Y7QvdGMOiA2LFxuICAgINC40Y7QvdGPOiA2LFxuICAgINC40Y7QvdC1OiA2LFxuICAgINC40Y7Qu9GMOiA3LFxuICAgINC40Y7Qu9GPOiA3LFxuICAgINC40Y7Qu9C1OiA3LFxuICAgINCw0LLQs9GD0YHRgjogOCxcbiAgICDQsNCy0LPRg9GB0YLQsDogOCxcbiAgICDQsNCy0LPRg9GB0YLQtTogOCxcbiAgICDRgdC10L3RgtGP0LHRgNGMOiA5LFxuICAgINGB0LXQvdGC0Y/QsdGA0Y86IDksXG4gICAg0YHQtdC90YLRj9Cx0YDQtTogOSxcbiAgICDQvtC60YLRj9Cx0YDRjDogMTAsXG4gICAg0L7QutGC0Y/QsdGA0Y86IDEwLFxuICAgINC+0LrRgtGP0LHRgNC1OiAxMCxcbiAgICDQvdC+0Y/QsdGA0Yw6IDExLFxuICAgINC90L7Rj9Cx0YDRjzogMTEsXG4gICAg0L3QvtGP0LHRgNC1OiAxMSxcbiAgICDQtNC10LrQsNCx0YDRjDogMTIsXG4gICAg0LTQtdC60LDQsdGA0Y86IDEyLFxuICAgINC00LXQutCw0LHRgNC1OiAxMixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICDRj9C90LI6IDEsXG4gICAgXCLRj9C90LIuXCI6IDEsXG4gICAg0YTQtdCyOiAyLFxuICAgIFwi0YTQtdCyLlwiOiAyLFxuICAgINC80LDRgDogMyxcbiAgICBcItC80LDRgC5cIjogMyxcbiAgICDQsNC/0YA6IDQsXG4gICAgXCLQsNC/0YAuXCI6IDQsXG4gICAg0LDQstCzOiA4LFxuICAgIFwi0LDQstCzLlwiOiA4LFxuICAgINGB0LXQvTogOSxcbiAgICBcItGB0LXQvS5cIjogOSxcbiAgICDQvtC60YI6IDEwLFxuICAgIFwi0L7QutGCLlwiOiAxMCxcbiAgICDQvdC+0Y86IDExLFxuICAgIFwi0L3QvtGPLlwiOiAxMSxcbiAgICDQtNC10Lo6IDEyLFxuICAgIFwi0LTQtdC6LlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAg0L7QtNC40L06IDEsXG4gICAg0L7QtNC90LA6IDEsXG4gICAg0L7QtNC90L7QuTogMSxcbiAgICDQvtC00L3RgzogMSxcbiAgICDQtNCy0LU6IDIsXG4gICAg0LTQstCwOiAyLFxuICAgINC00LLRg9GFOiAyLFxuICAgINGC0YDQuDogMyxcbiAgICDRgtGA0LXRhTogMyxcbiAgICDRgtGA0ZHRhTogMyxcbiAgICDRh9C10YLRi9GA0LU6IDQsXG4gICAg0YfQtdGC0YvRgNC10YU6IDQsXG4gICAg0YfQtdGC0YvRgNGR0YU6IDQsXG4gICAg0L/Rj9GC0Yw6IDUsXG4gICAg0L/Rj9GC0Lg6IDUsXG4gICAg0YjQtdGB0YLRjDogNixcbiAgICDRiNC10YHRgtC4OiA2LFxuICAgINGB0LXQvNGMOiA3LFxuICAgINGB0LXQvNC4OiA3LFxuICAgINCy0L7RgdC10LzRjDogOCxcbiAgICDQstC+0YHRjNC80Lg6IDgsXG4gICAg0LTQtdCy0Y/RgtGMOiA5LFxuICAgINC00LXQstGP0YLQuDogOSxcbiAgICDQtNC10YHRj9GC0Yw6IDEwLFxuICAgINC00LXRgdGP0YLQuDogMTAsXG4gICAg0L7QtNC40L3QvdCw0LTRhtCw0YLRjDogMTEsXG4gICAg0L7QtNC40L3QvdCw0LTRhtCw0YLQuDogMTEsXG4gICAg0LTQstC10L3QsNC00YbQsNGC0Yw6IDEyLFxuICAgINC00LLQtdC90LDQtNGG0LDRgtC4OiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAg0L/QtdGA0LLQvtC1OiAxLFxuICAgINC/0LXRgNCy0L7Qs9C+OiAxLFxuICAgINCy0YLQvtGA0L7QtTogMixcbiAgICDQstGC0L7RgNC+0LPQvjogMixcbiAgICDRgtGA0LXRgtGM0LU6IDMsXG4gICAg0YLRgNC10YLRjNC10LPQvjogMyxcbiAgICDRh9C10YLQstC10YDRgtC+0LU6IDQsXG4gICAg0YfQtdGC0LLQtdGA0YLQvtCz0L46IDQsXG4gICAg0L/Rj9GC0L7QtTogNSxcbiAgICDQv9GP0YLQvtCz0L46IDUsXG4gICAg0YjQtdGB0YLQvtC1OiA2LFxuICAgINGI0LXRgdGC0L7Qs9C+OiA2LFxuICAgINGB0LXQtNGM0LzQvtC1OiA3LFxuICAgINGB0LXQtNGM0LzQvtCz0L46IDcsXG4gICAg0LLQvtGB0YzQvNC+0LU6IDgsXG4gICAg0LLQvtGB0YzQvNC+0LPQvjogOCxcbiAgICDQtNC10LLRj9GC0L7QtTogOSxcbiAgICDQtNC10LLRj9GC0L7Qs9C+OiA5LFxuICAgINC00LXRgdGP0YLQvtC1OiAxMCxcbiAgICDQtNC10YHRj9GC0L7Qs9C+OiAxMCxcbiAgICDQvtC00LjQvdC90LDQtNGG0LDRgtC+0LU6IDExLFxuICAgINC+0LTQuNC90L3QsNC00YbQsNGC0L7Qs9C+OiAxMSxcbiAgICDQtNCy0LXQvdCw0LTRhtCw0YLQvtC1OiAxMixcbiAgICDQtNCy0LXQvdCw0LTRhtCw0YLQvtCz0L46IDEyLFxuICAgINGC0YDQuNC90LDQtNGG0LDRgtC+0LU6IDEzLFxuICAgINGC0YDQuNC90LDQtNGG0LDRgtC+0LPQvjogMTMsXG4gICAg0YfQtdGC0YvRgNC90LDQtNGG0LDRgtC+0LU6IDE0LFxuICAgINGH0LXRgtGL0YDQvdCw0LTRhtCw0YLQvtCz0L46IDE0LFxuICAgINC/0Y/RgtC90LDQtNGG0LDRgtC+0LU6IDE1LFxuICAgINC/0Y/RgtC90LDQtNGG0LDRgtC+0LPQvjogMTUsXG4gICAg0YjQtdGB0YLQvdCw0LTRhtCw0YLQvtC1OiAxNixcbiAgICDRiNC10YHRgtC90LDQtNGG0LDRgtC+0LPQvjogMTYsXG4gICAg0YHQtdC80L3QsNC00YbQsNGC0L7QtTogMTcsXG4gICAg0YHQtdC80L3QsNC00YbQsNGC0L7Qs9C+OiAxNyxcbiAgICDQstC+0YHQtdC80L3QsNC00YbQsNGC0L7QtTogMTgsXG4gICAg0LLQvtGB0LXQvNC90LDQtNGG0LDRgtC+0LPQvjogMTgsXG4gICAg0LTQtdCy0Y/RgtC90LDQtNGG0LDRgtC+0LU6IDE5LFxuICAgINC00LXQstGP0YLQvdCw0LTRhtCw0YLQvtCz0L46IDE5LFxuICAgINC00LLQsNC00YbQsNGC0L7QtTogMjAsXG4gICAg0LTQstCw0LTRhtCw0YLQvtCz0L46IDIwLFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQv9C10YDQstC+0LVcIjogMjEsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0LXRgNCy0L7Qs9C+XCI6IDIxLFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQstGC0L7RgNC+0LVcIjogMjIsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINCy0YLQvtGA0L7Qs9C+XCI6IDIyLFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDRgtGA0LXRgtGM0LVcIjogMjMsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGC0YDQtdGC0YzQtdCz0L5cIjogMjMsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGH0LXRgtCy0LXRgNGC0L7QtVwiOiAyNCxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YfQtdGC0LLQtdGA0YLQvtCz0L5cIjogMjQsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0Y/RgtC+0LVcIjogMjUsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINC/0Y/RgtC+0LPQvlwiOiAyNSxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YjQtdGB0YLQvtC1XCI6IDI2LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDRiNC10YHRgtC+0LPQvlwiOiAyNixcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0YHQtdC00YzQvNC+0LVcIjogMjcsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINGB0LXQtNGM0LzQvtCz0L5cIjogMjcsXG4gICAgXCLQtNCy0LDQtNGG0LDRgtGMINCy0L7RgdGM0LzQvtC1XCI6IDI4LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQstC+0YHRjNC80L7Qs9C+XCI6IDI4LFxuICAgIFwi0LTQstCw0LTRhtCw0YLRjCDQtNC10LLRj9GC0L7QtVwiOiAyOSxcbiAgICBcItC00LLQsNC00YbQsNGC0Ywg0LTQtdCy0Y/RgtC+0LPQvlwiOiAyOSxcbiAgICBcItGC0YDQuNC00YbQsNGC0L7QtVwiOiAzMCxcbiAgICBcItGC0YDQuNC00YbQsNGC0L7Qs9C+XCI6IDMwLFxuICAgIFwi0YLRgNC40LTRhtCw0YLRjCDQv9C10YDQstC+0LVcIjogMzEsXG4gICAgXCLRgtGA0LjQtNGG0LDRgtGMINC/0LXRgNCy0L7Qs9C+XCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICDRgdC10Lo6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00LA6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC0OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNGLOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNGDOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutCwOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutC4OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQtdC6OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutGDOiBcInNlY29uZFwiLFxuICAgINC80LjQvTogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0LA6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgjogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0Ys6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgtGDOiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQvtC6OiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQutC4OiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQutGDOiBcIm1pbnV0ZVwiLFxuICAgINC80LjQvdGD0YLQvtGH0LXQujogXCJtaW51dGVcIixcbiAgICDQvNC40L3Rg9GC0L7Rh9C60Lg6IFwibWludXRlXCIsXG4gICAg0LzQuNC90YPRgtC+0YfQutGDOiBcIm1pbnV0ZVwiLFxuICAgINGH0LDRgTogXCJob3VyXCIsXG4gICAg0YfQsNGB0L7QsjogXCJob3VyXCIsXG4gICAg0YfQsNGB0LA6IFwiaG91clwiLFxuICAgINGH0LDRgdGDOiBcImhvdXJcIixcbiAgICDRh9Cw0YHQuNC60L7QsjogXCJob3VyXCIsXG4gICAg0YfQsNGB0LjQutCwOiBcImhvdXJcIixcbiAgICDRh9Cw0YHQuNC60LU6IFwiaG91clwiLFxuICAgINGH0LDRgdC40Lo6IFwiaG91clwiLFxuICAgINC00LXQvdGMOiBcImRheVwiLFxuICAgINC00L3RjzogXCJkYXlcIixcbiAgICDQtNC90LXQuTogXCJkYXlcIixcbiAgICDRgdGD0YLQvtC6OiBcImRheVwiLFxuICAgINGB0YPRgtC60Lg6IFwiZGF5XCIsXG4gICAg0L3QtdC00LXQu9GPOiBcIndlZWtcIixcbiAgICDQvdC10LTQtdC70LU6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvQuDogXCJ3ZWVrXCIsXG4gICAg0L3QtdC00LXQu9GOOiBcIndlZWtcIixcbiAgICDQvdC10LTQtdC70Yw6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvRjNC60LU6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvRjNC60Lg6IFwid2Vla1wiLFxuICAgINC90LXQtNC10LvQtdC6OiBcIndlZWtcIixcbiAgICDQvNC10YHRj9GGOiBcIm1vbnRoXCIsXG4gICAg0LzQtdGB0Y/RhtC1OiBcIm1vbnRoXCIsXG4gICAg0LzQtdGB0Y/RhtC10LI6IFwibW9udGhcIixcbiAgICDQvNC10YHRj9GG0LA6IFwibW9udGhcIixcbiAgICDQutCy0LDRgNGC0LDQuzogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvQtTogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvQvtCyOiBcInF1YXJ0ZXJcIixcbiAgICDQs9C+0LQ6IFwieWVhclwiLFxuICAgINCz0L7QtNCwOiBcInllYXJcIixcbiAgICDQs9C+0LTRgzogXCJ5ZWFyXCIsXG4gICAg0LPQvtC00L7QsjogXCJ5ZWFyXCIsXG4gICAg0LvQtdGCOiBcInllYXJcIixcbiAgICDQs9C+0LTQuNC6OiBcInllYXJcIixcbiAgICDQs9C+0LTQuNC60LA6IFwieWVhclwiLFxuICAgINCz0L7QtNC40LrQvtCyOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt80L/QvtC7fNC90LXRgdC60L7Qu9GM0LrQvnzQv9Cw0YAoPzrRi3zRgyl8XFxcXHN7MCwzfSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgaWYgKG51bS5tYXRjaCgv0L3QtdGB0LrQvtC70YzQutC+LykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgv0L/QvtC7LykpIHtcbiAgICAgICAgcmV0dXJuIDAuNTtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC/Qv9Cw0YAvKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtID09PSBcIlwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XXsxLDJ9KD860LPQvnzQvtCz0L580LV80L7QtSk/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5jb25zdCB5ZWFyID0gXCIoPzpcXFxccysoPzrQs9C+0LTRg3zQs9C+0LTQsHzQs9C+0LR80LN80LMuKSk/XCI7XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gYCg/OlsxLTldWzAtOV17MCwzfSR7eWVhcn1cXFxccyooPzrQvS7RjS580LTQviDQvS7RjS580L0uINGNLnzQtNC+INC9LiDRjS4pfFsxLTJdWzAtOV17M30ke3llYXJ9fFs1LTldWzAtOV0ke3llYXJ9KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC8o0LPQvtC0fNCz0L7QtNCwfNCzfNCzLikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjQs9C+0LR80LPQvtC00LB80LN80LMuKS9pLCBcIlwiKTtcbiAgICB9XG4gICAgaWYgKC8o0LTQviDQvS7RjS580LTQviDQvS4g0Y0uKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKNC00L4g0L0u0Y0ufNC00L4g0L0uINGNLikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoLyjQvS4g0Y0ufNC9LtGNLikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjQvS4g0Y0ufNC9LtGNLikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUkVHRVggPSBuZXcgUmVnRXhwKFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgXCJpXCIpO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfUEFUVEVSTiA9IHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKGAoPzooPzrQvtC60L7Qu9C+fNC/0YDQuNC80LXRgNC90L4pXFxcXHN7MCwzfSk/YCwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBgKD86KD860L7QutC+0LvQvnzQv9GA0LjQvNC10YDQvdC+KVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkke1JFR0VYX1BBUlRTLnJpZ2h0Qm91bmRhcnl9YDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9uLmZvcndhcmREYXRlXG4gICAgICAgICAgICA/IG5ldyBSZWdFeHAoUEFUVEVSTiwgUkVHRVhfUEFSVFMuZmxhZ3MpXG4gICAgICAgICAgICA6IG5ldyBSZWdFeHAoYCg/OtCyINGC0LXRh9C10L3QuNC1fNCyINGC0LXRh9C10L3QuNC4KVxcXFxzKiR7UEFUVEVSTn1gLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5leHBvcnQgY2xhc3MgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodGhpcy5pbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCksIFJFR0VYX1BBUlRTLmZsYWdzKTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuSGFzQ2hhbmdlKGNvbnRleHQsIGN1cnJlbnRJbm5lclBhdHRlcm4pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGAke3RoaXMuaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpfSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGAoPzrRgSk/XFxcXHMqKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgICAgICAgICBgKD86YCArXG4gICAgICAgICAgICBgXFxcXHN7MCwzfSg/OtC/0L58LXzigJN80LTQvik/XFxcXHN7MCwzfWAgK1xuICAgICAgICAgICAgYCgke09SRElOQUxfTlVNQkVSX1BBVFRFUk59KWAgK1xuICAgICAgICAgICAgYCk/YCArXG4gICAgICAgICAgICBgKD86LXxcXFxcL3xcXFxcc3swLDN9KD86b2YpP1xcXFxzezAsM30pYCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGAoPzotfFxcXFwvfCw/XFxcXHN7MCwzfSlgICtcbiAgICAgICAgICAgIGAoJHtZRUFSX1BBVFRFUk59KD8hW15cXFxcc11cXFxcZCkpYCArXG4gICAgICAgICAgICBgKT9gO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXJOdW1iZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgZGF5LCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaFtEQVRFX1RPX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZSA9IHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4obWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSwgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVNb250aE5hbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChgKCg/OtCyKVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGBcXFxccypgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBbLC1dP1xcXFxzKigke1lFQVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCk/YCArXG4gICAgICAgICAgICBgKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKWApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA8PSAzICYmICFGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWVttb250aE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lXTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgMSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVTW9udGhOYW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCB7IFJFR0VYX1BBUlRTIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVUaW1lRXhwcmVzc2lvblBhcnNlciBleHRlbmRzIEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUpIHtcbiAgICAgICAgc3VwZXIoc3RyaWN0TW9kZSk7XG4gICAgfVxuICAgIHBhdHRlcm5GbGFncygpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmZsYWdzO1xuICAgIH1cbiAgICBwcmltYXJ5UGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIGAoXnxcXFxcc3xUfCg/OlteXFxcXHB7TH1cXFxccHtOfV9dKSlgO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIGBcXFxccyooPzpcXFxcLXxcXFxc4oCTfFxcXFx+fFxcXFzjgJx80LTQvnzQuHzQv9C+fFxcXFw/KVxcXFxzKmA7XG4gICAgfVxuICAgIHByaW1hcnlQcmVmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD86KD860LJ80YEpXFxcXHMqKT8/YDtcbiAgICB9XG4gICAgcHJpbWFyeVN1ZmZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAoPzpcXFxccyooPzrRg9GC0YDQsHzQstC10YfQtdGA0LB80L/QvtGB0LvQtSDQv9C+0LvRg9C00L3RjykpPyg/IVxcXFwvKSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItCy0LXRh9C10YDQsFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItC/0L7RgdC70LUg0L/QvtC70YPQtNC90Y9cIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID49IDAgJiYgaG91ciA8PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwi0YPRgtGA0LBcIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKCR7VElNRV9VTklUU19QQVRURVJOfSlcXFxcc3swLDV90L3QsNC30LDQtCg/PSg/OlxcXFxXfCQpKWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUlVNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoo0Lgg0LTQvnzQuCDQv9C+fNC00L580L/QvnwtKVxccyokL2k7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVNZXJnZURhdGVSYW5nZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVU1lcmdlRGF0ZVRpbWVSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKGBeXFxcXHMqKFR80LJ8LHwtKT9cXFxccyokYCk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVNZXJnZURhdGVUaW1lUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVUNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCg/OtGBfNGB0L4pP1xcXFxzKijRgdC10LPQvtC00L3Rj3zQstGH0LXRgNCwfNC30LDQstGC0YDQsHzQv9C+0YHQu9C10LfQsNCy0YLRgNCwfNC/0L7RgdC70LXQv9C+0YHQu9C10LfQsNCy0YLRgNCwfNC/0L7Qt9Cw0L/QvtC30LDQstGH0LXRgNCwfNC/0L7Qt9Cw0LLRh9C10YDQsClgO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbG93ZXJUZXh0ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGxvd2VyVGV4dCkge1xuICAgICAgICAgICAgY2FzZSBcItGB0LXQs9C+0LTQvdGPXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcItCy0YfQtdGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcItC30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbW9ycm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9C+0YHQu9C10LfQsNCy0YLRgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7RgdC70LXQv9C+0YHQu9C10LfQsNCy0YLRgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QWZ0ZXIoY29udGV4dC5yZWZlcmVuY2UsIDMpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7Qt9Cw0LLRh9C10YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUJlZm9yZShjb250ZXh0LnJlZmVyZW5jZSwgMik7XG4gICAgICAgICAgICBjYXNlIFwi0L/QvtC30LDQv9C+0LfQsNCy0YfQtdGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50aGVEYXlCZWZvcmUoY29udGV4dC5yZWZlcmVuY2UsIDMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCjRgdC10LnRh9Cw0YF80L/RgNC+0YjQu9GL0LxcXFxccyrQstC10YfQtdGA0L7QvHzQv9GA0L7RiNC70L7QuVxcXFxzKtC90L7Rh9GM0Y580YHQu9C10LTRg9GO0YnQtdC5XFxcXHMq0L3QvtGH0YzRjnzRgdC10LPQvtC00L3Rj1xcXFxzKtC90L7Rh9GM0Y580Y3RgtC+0LlcXFxccyrQvdC+0YfRjNGOfNC90L7Rh9GM0Y580Y3RgtC40Lwg0YPRgtGA0L7QvHzRg9GC0YDQvtC8fNGD0YLRgNCwfNCyXFxcXHMq0L/QvtC70LTQtdC90Yx80LLQtdGH0LXRgNC+0Lx80LLQtdGH0LXRgNCwfNCyXFxcXHMq0L/QvtC70L3QvtGH0YwpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChsb3dlclRleHQgPT09IFwi0YHQtdC50YfQsNGBXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dCA9PT0gXCLQstC10YfQtdGA0L7QvFwiIHx8IGxvd2VyVGV4dCA9PT0gXCLQstC10YfQtdGA0LBcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMuZXZlbmluZyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5lbmRzV2l0aChcItGD0YLRgNC+0LxcIikgfHwgbG93ZXJUZXh0LmVuZHNXaXRoKFwi0YPRgtGA0LBcIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1vcm5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL9CyXFxzKtC/0L7Qu9C00LXQvdGMLykpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vb24oY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQubWF0Y2goL9C/0YDQvtGI0LvQvtC5XFxzKtC90L7Rh9GM0Y4vKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubGFzdE5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/Qv9GA0L7RiNC70YvQvFxccyrQstC10YfQtdGA0L7QvC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXlFdmVuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/RgdC70LXQtNGD0Y7RidC10LlcXHMq0L3QvtGH0YzRji8pKSB7XG4gICAgICAgICAgICBjb25zdCBkYXlzVG9BZGQgPSB0YXJnZXREYXRlLmdldEhvdXJzKCkgPCAyMiA/IDEgOiAyO1xuICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgIG5leHREYXkuc2V0RGF0ZShuZXh0RGF5LmdldERhdGUoKSArIGRheXNUb0FkZCk7XG4gICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QslxccyrQv9C+0LvQvdC+0YfRjC8pIHx8IGxvd2VyVGV4dC5lbmRzV2l0aChcItC90L7Rh9GM0Y5cIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1pZG5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoPzooPzosfFxcXFwofO+8iClcXFxccyopP2AgK1xuICAgICAgICAgICAgYCg/OtCyXFxcXHMqPyk/YCArXG4gICAgICAgICAgICBgKD86KNGN0YLRg3zRjdGC0L7RgnzQv9GA0L7RiNC70YvQuXzQv9GA0L7RiNC70YPRjnzRgdC70LXQtNGD0Y7RidC40Ll80YHQu9C10LTRg9GO0YnRg9GOfNGB0LvQtdC00YPRjtGJ0LXQs9C+KVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKig/Oix8XFxcXCl877yJKSk/YCArXG4gICAgICAgICAgICBgKD86XFxcXHMq0L3QsFxcXFxzKijRjdGC0L7QuXzQv9GA0L7RiNC70L7QuXzRgdC70LXQtNGD0Y7RidC10LkpXFxcXHMq0L3QtdC00LXQu9C1KT9gKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcItC/0YDQvtGI0LvRi9C5XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0L/RgNC+0YjQu9GD0Y5cIiB8fCBtb2RpZmllcldvcmQgPT0gXCLQv9GA0L7RiNC70L7QuVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcItGB0LvQtdC00YPRjtGJ0LjQuVwiIHx8XG4gICAgICAgICAgICBtb2RpZmllcldvcmQgPT0gXCLRgdC70LXQtNGD0Y7RidGD0Y5cIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXJXb3JkID09IFwi0YHQu9C10LTRg9GO0YnQtdC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItGB0LvQtdC00YPRjtGJ0LXQs9C+XCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwi0Y3RgtC+0YJcIiB8fCBtb2RpZmllcldvcmQgPT0gXCLRjdGC0YNcIiB8fCBtb2RpZmllcldvcmQgPT0gXCLRjdGC0L7QuVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheShjb250ZXh0LnJlZmVyZW5jZSwgd2Vla2RheSwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJVV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmNvbnN0IE1PRElGSUVSX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgUkVMQVRJVkVfV09SRF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSVVJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKNCyINC/0YDQvtGI0LvQvtC8fNC90LAg0L/RgNC+0YjQu9C+0Ll80L3QsCDRgdC70LXQtNGD0Y7RidC10Ll80LIg0YHQu9C10LTRg9GO0YnQtdC8fNC90LAg0Y3RgtC+0Ll80LIg0Y3RgtC+0LwpXFxcXHMqKCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwi0L3QsCDRgdC70LXQtNGD0Y7RidC10LlcIiB8fCBtb2RpZmllciA9PSBcItCyINGB0LvQtdC00YPRjtGJ0LXQvFwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCLQsiDQv9GA0L7RiNC70L7QvFwiIHx8IG1vZGlmaWVyID09IFwi0L3QsCDQv9GA0L7RiNC70L7QuVwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh0aW1ldW5pdC5tYXRjaCgvd2Vlay9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpIC0gZGF0ZS5nZXREYXkoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGltZXVuaXQubWF0Y2goL21vbnRoL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aW1ldW5pdC5tYXRjaCgveWVhci9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgZGF0ZS5zZXRNb250aCgwKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJ5ZWFyXCIsIGRhdGUuZ2V0RnVsbFllYXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKNGN0YLQuHzQv9C+0YHQu9C10LTQvdC40LV80L/RgNC+0YjQu9GL0LV80YHQu9C10LTRg9GO0YnQuNC1fNC/0L7RgdC70LV80YHQv9GD0YHRgtGPfNGH0LXRgNC10Ld8XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsyXSk7XG4gICAgICAgIHN3aXRjaCAocHJlZml4KSB7XG4gICAgICAgICAgICBjYXNlIFwi0L/QvtGB0LvQtdC00L3QuNC1XCI6XG4gICAgICAgICAgICBjYXNlIFwi0L/RgNC+0YjQu9GL0LVcIjpcbiAgICAgICAgICAgIGNhc2UgXCItXCI6XG4gICAgICAgICAgICAgICAgdGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SVVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IFJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFJVTW9udGhOYW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVNb250aE5hbWVQYXJzZXIuanNcIjtcbmltcG9ydCBSVVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFJVVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvUlVNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmltcG9ydCBSVU1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1JVTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCB7IGluY2x1ZGVDb21tb25Db25maWd1cmF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvbmZpZ3VyYXRpb25zLmpzXCI7XG5pbXBvcnQgUlVDYXN1YWxEYXRlUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVDYXN1YWxEYXRlUGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVDYXN1YWxUaW1lUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVDYXN1YWxUaW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9SVVJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgUlVUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvUlVUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBSVUNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgUlVDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFJVVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKHRydWUpLFxuICAgICAgICAgICAgbmV3IFJVVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBSVU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFJVV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFJVVGltZUV4cHJlc3Npb25QYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgUlVUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBSVU1lcmdlRGF0ZVRpbWVSZWZpbmVyKCksIG5ldyBSVU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcImRvbWluZ29cIjogMCxcbiAgICBcImRvbVwiOiAwLFxuICAgIFwibHVuZXNcIjogMSxcbiAgICBcImx1blwiOiAxLFxuICAgIFwibWFydGVzXCI6IDIsXG4gICAgXCJtYXJcIjogMixcbiAgICBcIm1pw6lyY29sZXNcIjogMyxcbiAgICBcIm1pZXJjb2xlc1wiOiAzLFxuICAgIFwibWnDqVwiOiAzLFxuICAgIFwibWllXCI6IDMsXG4gICAgXCJqdWV2ZXNcIjogNCxcbiAgICBcImp1ZVwiOiA0LFxuICAgIFwidmllcm5lc1wiOiA1LFxuICAgIFwidmllXCI6IDUsXG4gICAgXCJzw6FiYWRvXCI6IDYsXG4gICAgXCJzYWJhZG9cIjogNixcbiAgICBcInPDoWJcIjogNixcbiAgICBcInNhYlwiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwiZW5lcm9cIjogMSxcbiAgICBcImVuZVwiOiAxLFxuICAgIFwiZW5lLlwiOiAxLFxuICAgIFwiZmVicmVyb1wiOiAyLFxuICAgIFwiZmViXCI6IDIsXG4gICAgXCJmZWIuXCI6IDIsXG4gICAgXCJtYXJ6b1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhYnJpbFwiOiA0LFxuICAgIFwiYWJyXCI6IDQsXG4gICAgXCJhYnIuXCI6IDQsXG4gICAgXCJtYXlvXCI6IDUsXG4gICAgXCJtYXlcIjogNSxcbiAgICBcIm1heS5cIjogNSxcbiAgICBcImp1bmlvXCI6IDYsXG4gICAgXCJqdW5cIjogNixcbiAgICBcImp1bi5cIjogNixcbiAgICBcImp1bGlvXCI6IDcsXG4gICAgXCJqdWxcIjogNyxcbiAgICBcImp1bC5cIjogNyxcbiAgICBcImFnb3N0b1wiOiA4LFxuICAgIFwiYWdvXCI6IDgsXG4gICAgXCJhZ28uXCI6IDgsXG4gICAgXCJzZXB0aWVtYnJlXCI6IDksXG4gICAgXCJzZXRpZW1icmVcIjogOSxcbiAgICBcInNlcFwiOiA5LFxuICAgIFwic2VwLlwiOiA5LFxuICAgIFwib2N0dWJyZVwiOiAxMCxcbiAgICBcIm9jdFwiOiAxMCxcbiAgICBcIm9jdC5cIjogMTAsXG4gICAgXCJub3ZpZW1icmVcIjogMTEsXG4gICAgXCJub3ZcIjogMTEsXG4gICAgXCJub3YuXCI6IDExLFxuICAgIFwiZGljaWVtYnJlXCI6IDEyLFxuICAgIFwiZGljXCI6IDEyLFxuICAgIFwiZGljLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ1bm9cIjogMSxcbiAgICBcImRvc1wiOiAyLFxuICAgIFwidHJlc1wiOiAzLFxuICAgIFwiY3VhdHJvXCI6IDQsXG4gICAgXCJjaW5jb1wiOiA1LFxuICAgIFwic2Vpc1wiOiA2LFxuICAgIFwic2lldGVcIjogNyxcbiAgICBcIm9jaG9cIjogOCxcbiAgICBcIm51ZXZlXCI6IDksXG4gICAgXCJkaWV6XCI6IDEwLFxuICAgIFwib25jZVwiOiAxMSxcbiAgICBcImRvY2VcIjogMTIsXG4gICAgXCJ0cmVjZVwiOiAxMyxcbn07XG5leHBvcnQgY29uc3QgVElNRV9VTklUX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJzZWNcIjogXCJzZWNvbmRcIixcbiAgICBcInNlZ3VuZG9cIjogXCJzZWNvbmRcIixcbiAgICBcInNlZ3VuZG9zXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW5cIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnNcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0b1wiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXRvc1wiOiBcIm1pbnV0ZVwiLFxuICAgIFwiaFwiOiBcImhvdXJcIixcbiAgICBcImhyXCI6IFwiaG91clwiLFxuICAgIFwiaHJzXCI6IFwiaG91clwiLFxuICAgIFwiaG9yYVwiOiBcImhvdXJcIixcbiAgICBcImhvcmFzXCI6IFwiaG91clwiLFxuICAgIFwiZMOtYVwiOiBcImRheVwiLFxuICAgIFwiZMOtYXNcIjogXCJkYXlcIixcbiAgICBcInNlbWFuYVwiOiBcIndlZWtcIixcbiAgICBcInNlbWFuYXNcIjogXCJ3ZWVrXCIsXG4gICAgXCJtZXNcIjogXCJtb250aFwiLFxuICAgIFwibWVzZXNcIjogXCJtb250aFwiLFxuICAgIFwiY3VhcnRvXCI6IFwicXVhcnRlclwiLFxuICAgIFwiY3VhcnRvc1wiOiBcInF1YXJ0ZXJcIixcbiAgICBcImHDsW9cIjogXCJ5ZWFyXCIsXG4gICAgXCJhw7Fvc1wiOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt8dW4/fHVubz98dW5hP3xhbGd1bm9zP3x1bm9zP3xkZW1pLT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBtYXRjaC50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJ1blwiIHx8IG51bSA9PT0gXCJ1bmFcIiB8fCBudW0gPT09IFwidW5vXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvYWxndW5vcz8vKSkge1xuICAgICAgICByZXR1cm4gMztcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC91bm9zPy8pKSB7XG4gICAgICAgIHJldHVybiAzO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL21lZGlhPy8pKSB7XG4gICAgICAgIHJldHVybiAwLjU7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUZsb2F0KG51bSk7XG59XG5leHBvcnQgY29uc3QgWUVBUl9QQVRURVJOID0gXCJbMC05XXsxLDR9KD8hW15cXFxcc11cXFxcZCkoPzpcXFxccypbYXxkXVxcXFwuP1xcXFxzKmNcXFxcLj98XFxcXHMqYVxcXFwuP1xcXFxzKmRcXFxcLj8pP1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmIChtYXRjaC5tYXRjaCgvXlswLTldezEsNH0kLykpIHtcbiAgICAgICAgbGV0IHllYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgICAgICBpZiAoeWVhck51bWJlciA+IDUwKSB7XG4gICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAxOTAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgeWVhck51bWJlciA9IHllYXJOdW1iZXIgKyAyMDAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyTnVtYmVyO1xuICAgIH1cbiAgICBpZiAobWF0Y2gubWF0Y2goL2FcXC4/XFxzKmNcXC4/L2kpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvYVxcLj9cXHMqY1xcLj8vaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCk7XG4gICAgICAgIG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIH1cbiAgICByZXR1cm4gZnJhZ21lbnRzO1xufVxuZnVuY3Rpb24gY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaFsxXSk7XG4gICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgIGZyYWdtZW50c1t1bml0XSA9IG51bTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86KGVzdGV8ZXN0YXxwYXNhZG98cHJbb8OzXXhpbW8pXFxcXHMqKT9cIiArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlxcXFxzKig/OlxcXFwsfFxcXFwpfFxcXFzvvIkpKT9cIiArXG4gICAgXCIoPzpcXFxccyooZXN0ZXxlc3RhfHBhc2Fkb3xwclvDs29deGltbylcXFxccypzZW1hbmEpP1wiICtcbiAgICBcIig/PVxcXFxXfFxcXFxkfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMjtcbmNvbnN0IFBPU1RGSVhfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRVNXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGlmICh3ZWVrZGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgbGV0IG5vcm0gPSBwcmVmaXggfHwgcG9zdGZpeCB8fCBcIlwiO1xuICAgICAgICBub3JtID0gbm9ybS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbW9kaWZpZXIgPSBudWxsO1xuICAgICAgICBpZiAobm9ybSA9PSBcInBhc2Fkb1wiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidGhpc1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vcm0gPT0gXCJwcsOzeGltb1wiIHx8IG5vcm0gPT0gXCJwcm94aW1vXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobm9ybSA9PSBcImVzdGVcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU1dlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU1RpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIFwiKD86KD86YXNsYXN8ZGVzbGFzfGxhcz98YWw/fGRlfGRlbClcXFxccyopP1wiO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfGEoPzpsKT98XFxcXD8pXFxcXHMqXCI7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RVNUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeXFxcXHMqKD86LHxkZXxhc2xhc3xhKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVTTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGV4dGVuZHMgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqKD86LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUVTTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pKD86wrp8wqp8wrApP2AgK1xuICAgIFwiKD86XFxcXHMqKD86ZGVzZGV8ZGV8XFxcXC18XFxcXOKAk3xhbz98XFxcXHMpXFxcXHMqKFswLTldezEsMn0pKD86wrp8wqp8wrApPyk/XFxcXHMqKD86ZGUpP1xcXFxzKlwiICtcbiAgICBgKD86LXwvfFxcXFxzKig/OmRlfCwpP1xcXFxzKilgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86XFxcXHMqKD86ZGV8LCk/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRVNNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU01vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU0Nhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8oYWhvcmF8aG95fG1hw7FhbmF8YXllcikoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhaG9yYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaG95XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm1hw7FhbmFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiYXllclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU0Nhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUsIGltcGx5U2ltaWxhclRpbWUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVTQ2FzdWFsVGltZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiAvKD86ZXN0YVxccyopPyhtYcOxYW5hfHRhcmRlfG1lZGlhbm9jaGV8bWVkaW9kaWF8bWVkaW9kw61hfG5vY2hlKSg/PVxcV3wkKS9pO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGF0ZSA9IGNvbnRleHQucmVmRGF0ZTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0YXJkZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2FmdGVybm9vblwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJub2NoZVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL2V2ZW5pbmdcIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWHDsWFuYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDYpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGRUYWcoXCJjYXN1YWxSZWZlcmVuY2UvbW9ybmluZ1wiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZWRpYW5vY2hlXCI6XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dERheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIG5leHREYXkpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmFkZFRhZyhcImNhc3VhbFJlZmVyZW5jZS9taWRuaWdodFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZWRpb2RpYVwiOlxuICAgICAgICAgICAgY2FzZSBcIm1lZGlvZMOtYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuYWRkVGFnKFwiY2FzdWFsUmVmZXJlbmNlL25vb25cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1FU0Nhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFU1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCg/OmVufHBvcnxkdXJhbnRlfGRlfGRlbnRybyBkZSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IFNsYXNoRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvU2xhc2hEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRVNXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgRVNUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0VTVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBFU01lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0VTTWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmltcG9ydCBFU01lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9FU01lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEVTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFU0Nhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FU0Nhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBFU0Nhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9FU0Nhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBFU1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMucHVzaChuZXcgRVNDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnB1c2gobmV3IEVTQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgRVNXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRVNUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVTTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRVNUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW25ldyBFU01lcmdlRGF0ZVRpbWVSZWZpbmVyKCksIG5ldyBFU01lcmdlRGF0ZVJhbmdlUmVmaW5lcigpXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCB7IG1hdGNoQW55UGF0dGVybiwgcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgZmluZE1vc3RMaWtlbHlBRFllYXIgfSBmcm9tIFwiLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmV4cG9ydCBjb25zdCBSRUdFWF9QQVJUUyA9IHtcbiAgICBsZWZ0Qm91bmRhcnk6IFwiKFteXFxcXHB7TH1cXFxccHtOfV9dfF4pXCIsXG4gICAgcmlnaHRCb3VuZGFyeTogXCIoPz1bXlxcXFxwe0x9XFxcXHB7Tn1fXXwkKVwiLFxuICAgIGZsYWdzOiBcIml1XCIsXG59O1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcItC90LXQtNGW0LvRj1wiOiAwLFxuICAgIFwi0L3QtdC00ZbQu9GWXCI6IDAsXG4gICAgXCLQvdC10LTRltC70Y5cIjogMCxcbiAgICBcItC90LRcIjogMCxcbiAgICBcItC90LQuXCI6IDAsXG4gICAgXCLQv9C+0L3QtdC00ZbQu9C+0LpcIjogMSxcbiAgICBcItC/0L7QvdC10LTRltC70LrQsFwiOiAxLFxuICAgIFwi0L/QvVwiOiAxLFxuICAgIFwi0L/QvS5cIjogMSxcbiAgICBcItCy0ZbQstGC0L7RgNC+0LpcIjogMixcbiAgICBcItCy0ZbQstGC0L7RgNC60LBcIjogMixcbiAgICBcItCy0YJcIjogMixcbiAgICBcItCy0YIuXCI6IDIsXG4gICAgXCLRgdC10YDQtdC00LBcIjogMyxcbiAgICBcItGB0LXRgNC10LTQuFwiOiAzLFxuICAgIFwi0YHQtdGA0LXQtNGDXCI6IDMsXG4gICAgXCLRgdGAXCI6IDMsXG4gICAgXCLRgdGALlwiOiAzLFxuICAgIFwi0YfQtdGC0LLQtdGAXCI6IDQsXG4gICAgXCLRh9C10YLQstC10YDQs9CwXCI6IDQsXG4gICAgXCLRh9C10YLQstC10YDQs9GDXCI6IDQsXG4gICAgXCLRh9GCXCI6IDQsXG4gICAgXCLRh9GCLlwiOiA0LFxuICAgIFwi0L8n0Y/RgtC90LjRhtGPXCI6IDUsXG4gICAgXCLQvyfRj9GC0L3QuNGG0ZZcIjogNSxcbiAgICBcItC/J9GP0YLQvdC40YbRjlwiOiA1LFxuICAgIFwi0L/RglwiOiA1LFxuICAgIFwi0L/Rgi5cIjogNSxcbiAgICBcItGB0YPQsdC+0YLQsFwiOiA2LFxuICAgIFwi0YHRg9Cx0L7RgtC4XCI6IDYsXG4gICAgXCLRgdGD0LHQvtGC0YNcIjogNixcbiAgICBcItGB0LFcIjogNixcbiAgICBcItGB0LEuXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZID0ge1xuICAgIFwi0YHRltGH0LXQvdGMXCI6IDEsXG4gICAgXCLRgdGW0YfQvdGPXCI6IDEsXG4gICAgXCLRgdGW0YfQvdGWXCI6IDEsXG4gICAgXCLQu9GO0YLQuNC5XCI6IDIsXG4gICAgXCLQu9GO0YLQvtCz0L5cIjogMixcbiAgICBcItC70Y7RgtC+0LzRg1wiOiAyLFxuICAgIFwi0LHQtdGA0LXQt9C10L3RjFwiOiAzLFxuICAgIFwi0LHQtdGA0LXQt9C90Y9cIjogMyxcbiAgICBcItCx0LXRgNC10LfQvdGWXCI6IDMsXG4gICAgXCLQutCy0ZbRgtC10L3RjFwiOiA0LFxuICAgIFwi0LrQstGW0YLQvdGPXCI6IDQsXG4gICAgXCLQutCy0ZbRgtC90ZZcIjogNCxcbiAgICBcItGC0YDQsNCy0LXQvdGMXCI6IDUsXG4gICAgXCLRgtGA0LDQstC90Y9cIjogNSxcbiAgICBcItGC0YDQsNCy0L3RllwiOiA1LFxuICAgIFwi0YfQtdGA0LLQtdC90YxcIjogNixcbiAgICBcItGH0LXRgNCy0L3Rj1wiOiA2LFxuICAgIFwi0YfQtdGA0LLQvdGWXCI6IDYsXG4gICAgXCLQu9C40L/QtdC90YxcIjogNyxcbiAgICBcItC70LjQv9C90Y9cIjogNyxcbiAgICBcItC70LjQv9C90ZZcIjogNyxcbiAgICBcItGB0LXRgNC/0LXQvdGMXCI6IDgsXG4gICAgXCLRgdC10YDQv9C90Y9cIjogOCxcbiAgICBcItGB0LXRgNC/0L3RllwiOiA4LFxuICAgIFwi0LLQtdGA0LXRgdC10L3RjFwiOiA5LFxuICAgIFwi0LLQtdGA0LXRgdC90Y9cIjogOSxcbiAgICBcItCy0LXRgNC10YHQvdGWXCI6IDksXG4gICAgXCLQttC+0LLRgtC10L3RjFwiOiAxMCxcbiAgICBcItC20L7QstGC0L3Rj1wiOiAxMCxcbiAgICBcItC20L7QstGC0L3RllwiOiAxMCxcbiAgICBcItC70LjRgdGC0L7Qv9Cw0LRcIjogMTEsXG4gICAgXCLQu9C40YHRgtC+0L/QsNC00LBcIjogMTEsXG4gICAgXCLQu9C40YHRgtC+0L/QsNC00YNcIjogMTEsXG4gICAgXCLQs9GA0YPQtNC10L3RjFwiOiAxMixcbiAgICBcItCz0YDRg9C00L3Rj1wiOiAxMixcbiAgICBcItCz0YDRg9C00L3RllwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICBcItGB0ZbRh1wiOiAxLFxuICAgIFwi0YHRltGHLlwiOiAxLFxuICAgIFwi0LvRjtGCXCI6IDIsXG4gICAgXCLQu9GO0YIuXCI6IDIsXG4gICAgXCLQsdC10YBcIjogMyxcbiAgICBcItCx0LXRgC5cIjogMyxcbiAgICBcItC60LLRltGCXCI6IDQsXG4gICAgXCLQutCy0ZbRgi5cIjogNCxcbiAgICBcItGC0YDQsNCyXCI6IDUsXG4gICAgXCLRgtGA0LDQsi5cIjogNSxcbiAgICBcItGH0LXRgNCyXCI6IDYsXG4gICAgXCLRh9C10YDQsi5cIjogNixcbiAgICBcItC70LjQv1wiOiA3LFxuICAgIFwi0LvQuNC/LlwiOiA3LFxuICAgIFwi0YHQtdGA0L9cIjogOCxcbiAgICBcItGB0LXRgNC/LlwiOiA4LFxuICAgIFwi0YHQtdGAXCI6IDgsXG4gICAgXCJj0LXRgC5cIjogOCxcbiAgICBcItCy0LXRgFwiOiA5LFxuICAgIFwi0LLQtdGALlwiOiA5LFxuICAgIFwi0LLQtdGA0LXRgVwiOiA5LFxuICAgIFwi0LLQtdGA0LXRgS5cIjogOSxcbiAgICBcItC20L7QstGCXCI6IDEwLFxuICAgIFwi0LbQvtCy0YIuXCI6IDEwLFxuICAgIFwi0LvQuNGB0YLQvtC/XCI6IDExLFxuICAgIFwi0LvQuNGB0YLQvtC/LlwiOiAxMSxcbiAgICBcItCz0YDRg9C0XCI6IDEyLFxuICAgIFwi0LPRgNGD0LQuXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcItC+0LTQuNC9XCI6IDEsXG4gICAgXCLQvtC00L3QsFwiOiAxLFxuICAgIFwi0L7QtNC90L7Rl1wiOiAxLFxuICAgIFwi0L7QtNC90YNcIjogMSxcbiAgICBcItC00LLRllwiOiAyLFxuICAgIFwi0LTQstCwXCI6IDIsXG4gICAgXCLQtNCy0L7RhVwiOiAyLFxuICAgIFwi0YLRgNC4XCI6IDMsXG4gICAgXCLRgtGA0YzQvtGFXCI6IDMsXG4gICAgXCLRh9C+0YLQuNGA0LhcIjogNCxcbiAgICBcItGH0L7RgtC40YDRjNC+0YVcIjogNCxcbiAgICBcItC/J9GP0YLRjFwiOiA1LFxuICAgIFwi0L8n0Y/RgtC4XCI6IDUsXG4gICAgXCLRiNGW0YHRgtGMXCI6IDYsXG4gICAgXCLRiNC10YHRgtC4XCI6IDYsXG4gICAgXCLRgdGW0LxcIjogNyxcbiAgICBcItGB0LXQvNC4XCI6IDcsXG4gICAgXCLQstGW0YHRltC8XCI6IDgsXG4gICAgXCLQstC+0YHRjNC80LhcIjogOCxcbiAgICBcItC00LXQsifRj9GC0YxcIjogOSxcbiAgICBcItC00LXQsifRj9GC0LhcIjogOSxcbiAgICBcItC00LXRgdGP0YLRjFwiOiAxMCxcbiAgICBcItC00LXRgdGP0YLQuFwiOiAxMCxcbiAgICBcItC+0LTQuNC90LDQtNGG0Y/RgtGMXCI6IDExLFxuICAgIFwi0L7QtNC40L3QsNC00YbRj9GC0LhcIjogMTEsXG4gICAgXCLQtNCy0LDQvdCw0LTRhtGP0YLRjFwiOiAxMixcbiAgICBcItC00LLQsNC90LDQtNGG0Y/RgtC4XCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBPUkRJTkFMX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcItC/0LXRgNGI0LVcIjogMSxcbiAgICBcItC/0LXRgNGI0L7Qs9C+XCI6IDEsXG4gICAgXCLQtNGA0YPQs9C1XCI6IDIsXG4gICAgXCLQtNGA0YPQs9C+0LPQvlwiOiAyLFxuICAgIFwi0YLRgNC10YLRlFwiOiAzLFxuICAgIFwi0YLRgNC10YLRjNC+0LPQvlwiOiAzLFxuICAgIFwi0YfQtdGC0LLQtdGA0YLQtVwiOiA0LFxuICAgIFwi0YfQtdGC0LLQtdGA0YLQvtCz0L5cIjogNCxcbiAgICBcItC/J9GP0YLQtVwiOiA1LFxuICAgIFwi0L8n0Y/RgtC+0LPQvlwiOiA1LFxuICAgIFwi0YjQvtGB0YLQtVwiOiA2LFxuICAgIFwi0YjQvtGB0YLQvtCz0L5cIjogNixcbiAgICBcItGB0YzQvtC80LVcIjogNyxcbiAgICBcItGB0YzQvtC80L7Qs9C+XCI6IDcsXG4gICAgXCLQstC+0YHRjNC80LVcIjogOCxcbiAgICBcItCy0L7RgdGM0LzQvtCz0L5cIjogOCxcbiAgICBcItC00LXQsifRj9GC0LVcIjogOSxcbiAgICBcItC00LXQsifRj9GC0L7Qs9C+XCI6IDksXG4gICAgXCLQtNC10YHRj9GC0LVcIjogMTAsXG4gICAgXCLQtNC10YHRj9GC0L7Qs9C+XCI6IDEwLFxuICAgIFwi0L7QtNC40L3QsNC00YbRj9GC0LVcIjogMTEsXG4gICAgXCLQvtC00LjQvdCw0LTRhtGP0YLQvtCz0L5cIjogMTEsXG4gICAgXCLQtNCy0LDQvdCw0LTRhtGP0YLQtVwiOiAxMixcbiAgICBcItC00LLQsNC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxMixcbiAgICBcItGC0YDQuNC90LDQtNGG0Y/RgtC1XCI6IDEzLFxuICAgIFwi0YLRgNC40L3QsNC00YbRj9GC0L7Qs9C+XCI6IDEzLFxuICAgIFwi0YfQvtGC0LjRgNC90LDQtNGG0Y/RgtC1XCI6IDE0LFxuICAgIFwi0YfQvtGC0LjQvdGA0L3QsNC00YbRj9GC0L7Qs9C+XCI6IDE0LFxuICAgIFwi0L8n0Y/RgtC90LDQtNGG0Y/RgtC1XCI6IDE1LFxuICAgIFwi0L8n0Y/RgtC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxNSxcbiAgICBcItGI0ZbRgdGC0L3QsNC00YbRj9GC0LVcIjogMTYsXG4gICAgXCLRiNGW0YHRgtC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxNixcbiAgICBcItGB0ZbQvNC90LDQtNGG0Y/RgtC1XCI6IDE3LFxuICAgIFwi0YHRltC80L3QsNC00YbRj9GC0L7Qs9C+XCI6IDE3LFxuICAgIFwi0LLRltGB0ZbQvNC90LDQtNGG0Y/RgtC1XCI6IDE4LFxuICAgIFwi0LLRltGB0ZbQvNC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxOCxcbiAgICBcItC00LXQsifRj9GC0L3QsNC00YbRj9GC0LVcIjogMTksXG4gICAgXCLQtNC10LIn0Y/RgtC90LDQtNGG0Y/RgtC+0LPQvlwiOiAxOSxcbiAgICBcItC00LLQsNC00YbRj9GC0LVcIjogMjAsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtC+0LPQvlwiOiAyMCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0L/QtdGA0YjQtVwiOiAyMSxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0L/QtdGA0YjQvtCz0L5cIjogMjEsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINC00YDRg9Cz0LVcIjogMjIsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINC00YDRg9Cz0L7Qs9C+XCI6IDIyLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRgtGA0LXRgtGUXCI6IDIzLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRgtGA0LXRgtGM0L7Qs9C+XCI6IDIzLFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRh9C10YLQstC10YDRgtC1XCI6IDI0LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRh9C10YLQstC10YDRgtC+0LPQvlwiOiAyNCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0L8n0Y/RgtC1XCI6IDI1LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDQvyfRj9GC0L7Qs9C+XCI6IDI1LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRiNC+0YHRgtC1XCI6IDI2LFxuICAgIFwi0LTQstCw0LTRhtGP0YLRjCDRiNC+0YHRgtC+0LPQvlwiOiAyNixcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0YHRjNC+0LzQtVwiOiAyNyxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0YHRjNC+0LzQvtCz0L5cIjogMjcsXG4gICAgXCLQtNCy0LDQtNGG0Y/RgtGMINCy0L7RgdGM0LzQtVwiOiAyOCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LLQvtGB0YzQvNC+0LPQvlwiOiAyOCxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LTQtdCyJ9GP0YLQtVwiOiAyOSxcbiAgICBcItC00LLQsNC00YbRj9GC0Ywg0LTQtdCyJ9GP0YLQvtCz0L5cIjogMjksXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtC1XCI6IDMwLFxuICAgIFwi0YLRgNC40LTRhtGP0YLQvtCz0L5cIjogMzAsXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtGMINC/0LXRgNGI0LVcIjogMzEsXG4gICAgXCLRgtGA0LjQtNGG0Y/RgtGMINC/0LXRgNGI0L7Qs9C+XCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICDRgdC10Lo6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC00LA6IFwic2Vjb25kXCIsXG4gICAg0YHQtdC60YPQvdC0OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC4OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNGDOiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQvtC6OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutC4OiBcInNlY29uZFwiLFxuICAgINGB0LXQutGD0L3QtNC+0YfQutGDOiBcInNlY29uZFwiLFxuICAgINGF0LI6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90LA6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC9OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC4OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdGDOiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0Lo6IFwibWludXRlXCIsXG4gICAg0YXQstC40LvQuNC90LrQuDogXCJtaW51dGVcIixcbiAgICDRhdCy0LjQu9C40L3QutGDOiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0YfQvtC6OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0YfQutC4OiBcIm1pbnV0ZVwiLFxuICAgINGF0LLQuNC70LjQvdC+0YfQutGDOiBcIm1pbnV0ZVwiLFxuICAgINCz0L7QtDogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdCwOiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC9OiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC90Lg6IFwiaG91clwiLFxuICAgINCz0L7QtNC40L3RgzogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdC60LA6IFwiaG91clwiLFxuICAgINCz0L7QtNC40L3QvtC6OiBcImhvdXJcIixcbiAgICDQs9C+0LTQuNC90LrQuDogXCJob3VyXCIsXG4gICAg0LPQvtC00LjQvdC60YM6IFwiaG91clwiLFxuICAgINC00LXQvdGMOiBcImRheVwiLFxuICAgINC00L3RjzogXCJkYXlcIixcbiAgICDQtNC90ZbQsjogXCJkYXlcIixcbiAgICDQtNC90ZY6IFwiZGF5XCIsXG4gICAg0LTQvtCx0LA6IFwiZGF5XCIsXG4gICAg0LTQvtCx0YM6IFwiZGF5XCIsXG4gICAg0YLQuNC20LTQtdC90Yw6IFwid2Vla1wiLFxuICAgINGC0LjQttC90Y46IFwid2Vla1wiLFxuICAgINGC0LjQttC90Y86IFwid2Vla1wiLFxuICAgINGC0LjQttC90ZY6IFwid2Vla1wiLFxuICAgINGC0LjQttC90ZbQsjogXCJ3ZWVrXCIsXG4gICAg0LzRltGB0Y/RhtGMOiBcIm1vbnRoXCIsXG4gICAg0LzRltGB0Y/RhtGW0LI6IFwibW9udGhcIixcbiAgICDQvNGW0YHRj9GG0ZY6IFwibW9udGhcIixcbiAgICDQvNGW0YHRj9GG0Y86IFwibW9udGhcIixcbiAgICDQutCy0LDRgNGC0LDQuzogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvRgzogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvQsDogXCJxdWFydGVyXCIsXG4gICAg0LrQstCw0YDRgtCw0LvRltCyOiBcInF1YXJ0ZXJcIixcbiAgICDQutCy0LDRgNGC0LDQu9GWOiBcInF1YXJ0ZXJcIixcbiAgICDRgNGW0Lo6IFwieWVhclwiLFxuICAgINGA0L7QutGDOiBcInllYXJcIixcbiAgICDRgNC+0YbRljogXCJ5ZWFyXCIsXG4gICAg0YDQvtC60ZbQsjogXCJ5ZWFyXCIsXG4gICAg0YDQvtC60Lg6IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBOVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSl9fFswLTldK3xbMC05XStcXFxcLlswLTldK3zQv9GW0LJ80LTQtdC60ZbQu9GM0LrQsHzQv9Cw0YAoPzrRgyl8XFxcXHN7MCwzfSlgO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgaWYgKG51bS5tYXRjaCgv0LTQtdC60ZbQu9GM0LrQsC8pKSB7XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL9C/0ZbQsi8pKSB7XG4gICAgICAgIHJldHVybiAwLjU7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgv0L/QsNGALykpIHtcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bSA9PT0gXCJcIikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBPUkRJTkFMX05VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZKX18WzAtOV17MSwyfSg/OtCz0L580L7Qs9C+fNC1KT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cbmNvbnN0IHllYXIgPSBcIig/OlxcXFxzKyg/OtGA0L7QutGDfNGA0ZbQunzRgHzRgC4pKT9cIjtcbmV4cG9ydCBjb25zdCBZRUFSX1BBVFRFUk4gPSBgKD86WzEtOV1bMC05XXswLDN9JHt5ZWFyfVxcXFxzKig/OtC9LtC1LnzQtNC+INC9LtC1LnzQvS4g0LUufNC00L4g0L0uINC1Lil8WzEtMl1bMC05XXszfSR7eWVhcn18WzUtOV1bMC05XSR7eWVhcn0pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVllYXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgaWYgKC8o0YDRltC6fNGA0L7QutGDfNGAfNGALikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjRgNGW0Lp80YDQvtC60YN80YB80YAuKS9pLCBcIlwiKTtcbiAgICB9XG4gICAgaWYgKC8o0LTQviDQvS7QtS580LTQviDQvS4g0LUuKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKNC00L4g0L0u0LUufNC00L4g0L0uINC1LikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiAtcGFyc2VJbnQobWF0Y2gpO1xuICAgIH1cbiAgICBpZiAoLyjQvS4g0LUufNC9LtC1LikvaS50ZXN0KG1hdGNoKSkge1xuICAgICAgICBtYXRjaCA9IG1hdGNoLnJlcGxhY2UoLyjQvS4g0LUufNC9LtC1LikvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGNvbnN0IHJhd1llYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgcmV0dXJuIGZpbmRNb3N0TGlrZWx5QURZZWFyKHJhd1llYXJOdW1iZXIpO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDN9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pYDtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfUkVHRVggPSBuZXcgUmVnRXhwKFNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiwgXCJpXCIpO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfUEFUVEVSTiA9IHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuKGAoPzooPzrQsdC70LjQt9GM0LrQvnzQv9GA0LjQsdC70LjQt9C90L4pXFxcXHN7MCwzfSk/YCwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29sbGVjdERhdGVUaW1lRnJhZ21lbnQoZnJhZ21lbnRzLCBtYXRjaCk7XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBgKD86KD860L/RgNC40LHQu9C40LfQvdC+fNC+0YDRltGU0L3RgtC+0LLQvdC+KVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkke1JFR0VYX1BBUlRTLnJpZ2h0Qm91bmRhcnl9YDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgcGF0dGVybkxlZnRCb3VuZGFyeSgpIHtcbiAgICAgICAgcmV0dXJuIFJFR0VYX1BBUlRTLmxlZnRCb3VuZGFyeTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9uLmZvcndhcmREYXRlXG4gICAgICAgICAgICA/IG5ldyBSZWdFeHAoUEFUVEVSTiwgXCJpXCIpXG4gICAgICAgICAgICA6IG5ldyBSZWdFeHAoYCg/OtC/0YDQvtGC0Y/Qs9C+0Lx80L3QsCDQv9GA0L7RgtGP0LfRlnzQv9GA0L7RgtGP0LPQvtC8fNGD0L/RgNC+0LTQvtCy0LZ80LLQv9GA0L7QtNC+0LLQtilcXFxccyoke1BBVFRFUk59YCwgUkVHRVhfUEFSVFMuZmxhZ3MpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IFJFR0VYX1BBUlRTIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuZXhwb3J0IGNsYXNzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIHBhdHRlcm5MZWZ0Qm91bmRhcnkoKSB7XG4gICAgICAgIHJldHVybiBSRUdFWF9QQVJUUy5sZWZ0Qm91bmRhcnk7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHRoaXMuaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpLCBSRUdFWF9QQVJUUy5mbGFncyk7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybkhhc0NoYW5nZShjb250ZXh0LCBjdXJyZW50SW5uZXJQYXR0ZXJuKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgJHt0aGlzLmlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KX0ke1JFR0VYX1BBUlRTLnJpZ2h0Qm91bmRhcnl9YCwgUkVHRVhfUEFSVFMuZmxhZ3MpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXJQYXR0ZXJuIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoPzrQt3zRltC3KT9cXFxccyooJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBcXFxcc3swLDN9KD860L/QvnwtfOKAk3zQtNC+KT9cXFxcc3swLDN9YCArXG4gICAgICAgICAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgICAgICAgICBgKT9gICtcbiAgICAgICAgICAgIGAoPzotfFxcXFwvfFxcXFxzezAsM30oPzpvZik/XFxcXHN7MCwzfSlgICtcbiAgICAgICAgICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgICAgICAgICAgYCg/OmAgK1xuICAgICAgICAgICAgYCg/Oi18XFxcXC98LD9cXFxcc3swLDN9KWAgK1xuICAgICAgICAgICAgYCgke1lFQVJfUEFUVEVSTn0oPyFbXlxcXFxzXVxcXFxkKSlgICtcbiAgICAgICAgICAgIGApP2ApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX0dST1VQXSk7XG4gICAgICAgIGlmIChkYXkgPiAzMSkge1xuICAgICAgICAgICAgbWF0Y2guaW5kZXggPSBtYXRjaC5pbmRleCArIG1hdGNoW0RBVEVfR1JPVVBdLmxlbmd0aDtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtb250aFwiLCBtb250aCk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJkYXlcIiwgZGF5KTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyTnVtYmVyID0gcGFyc2VZZWFyUGF0dGVybihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZLCBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMjtcbmNvbnN0IFlFQVJfR1JPVVAgPSAzO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVWtNb250aE5hbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIChgKCg/OtCyfNGDKVxcXFxzKik/YCArXG4gICAgICAgICAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGBcXFxccypgICtcbiAgICAgICAgICAgIGAoPzpgICtcbiAgICAgICAgICAgIGBbLC1dP1xcXFxzKigke1lFQVJfUEFUVEVSTn0pP2AgK1xuICAgICAgICAgICAgYCk/YCArXG4gICAgICAgICAgICBgKD89W15cXFxcc1xcXFx3XXxcXFxccytbXjAtOV18XFxcXHMrJHwkKWApO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA8PSAzICYmICFGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWVttb250aE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lXTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyUGF0dGVybihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LCAxLCBtb250aCk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtNb250aE5hbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTWVyaWRpZW0gfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IHsgUkVHRVhfUEFSVFMgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1RpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RUaW1lRXhwcmVzc2lvblBhcnNlciB7XG4gICAgY29uc3RydWN0b3Ioc3RyaWN0TW9kZSkge1xuICAgICAgICBzdXBlcihzdHJpY3RNb2RlKTtcbiAgICB9XG4gICAgcGF0dGVybkZsYWdzKCkge1xuICAgICAgICByZXR1cm4gUkVHRVhfUEFSVFMuZmxhZ3M7XG4gICAgfVxuICAgIHByaW1hcnlQYXR0ZXJuTGVmdEJvdW5kYXJ5KCkge1xuICAgICAgICByZXR1cm4gYChefFxcXFxzfFR8KD86W15cXFxccHtMfVxcXFxwe059X10pKWA7XG4gICAgfVxuICAgIGZvbGxvd2luZ1BoYXNlKCkge1xuICAgICAgICByZXR1cm4gYFxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnHzQtNC+fNGWfNC/0L58XFxcXD8pXFxcXHMqYDtcbiAgICB9XG4gICAgcHJpbWFyeVByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuIGAoPzooPzrQsnzRg3zQvnzQvtCxfNC3fNGW0Ld80LLRltC0KVxcXFxzKik/P2A7XG4gICAgfVxuICAgIHByaW1hcnlTdWZmaXgoKSB7XG4gICAgICAgIHJldHVybiBgKD86XFxcXHMqKD860YDQsNC90LrRg3zQstC10YfQvtGA0LB80L/QviDQvtCx0ZbQtNGWfNC/0ZbRgdC70Y8g0L7QsdGW0LTRgykpPyg/IVxcXFwvKSR7UkVHRVhfUEFSVFMucmlnaHRCb3VuZGFyeX1gO1xuICAgIH1cbiAgICBleHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzdXBlci5leHRyYWN0UHJpbWFyeVRpbWVDb21wb25lbnRzKGNvbnRleHQsIG1hdGNoKTtcbiAgICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItCy0LXRh9C+0YDQsFwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcItC/0L4g0L7QsdGW0LTRllwiKSB8fCBtYXRjaFswXS5lbmRzV2l0aChcItC/0ZbRgdC70Y8g0L7QsdGW0LTRg1wiKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gMCAmJiBob3VyIDw9IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbMF0uZW5kc1dpdGgoXCLRgNCw0L3QutGDXCIpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaG91ciA9IGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50cztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1RpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fdGC0L7QvNGDKD89KD86XFxcXFd8JCkpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBvdXRwdXRUaW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgb3V0cHV0VGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS01lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKijRliDQtNC+fNGWINC/0L580LTQvnzQv9C+fC0pXFxzKiQvaTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS01lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5cXFxccyooVHzQsnzRg3zQvnwsfC0pP1xcXFxzKiRgKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4vQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVLQ2FzdWFsRGF0ZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVyblN0cmluZyhjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBgKD860Ld80ZbQt3zQstGW0LQpP1xcXFxzKijRgdGM0L7Qs9C+0LTQvdGWfNCy0YfQvtGA0LB80LfQsNCy0YLRgNCwfNC/0ZbRgdC70Y/Qt9Cw0LLRgtGA0LB80L/RltGB0LvRj9C/0ZbRgdC70Y/Qt9Cw0LLRgtGA0LB80L/QvtC30LDQv9C+0LfQsNCy0YfQvtGA0LB80L/QvtC30LDQstGH0L7RgNCwKWA7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIHN3aXRjaCAobG93ZXJUZXh0KSB7XG4gICAgICAgICAgICBjYXNlIFwi0YHRjNC+0LPQvtC00L3RllwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQstGH0L7RgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCLQt9Cw0LLRgtGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b21vcnJvdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwi0L/RltGB0LvRj9C30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUFmdGVyKGNvbnRleHQucmVmZXJlbmNlLCAyKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9GW0YHQu9GP0L/RltGB0LvRj9C30LDQstGC0YDQsFwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUFmdGVyKGNvbnRleHQucmVmZXJlbmNlLCAzKTtcbiAgICAgICAgICAgIGNhc2UgXCLQv9C+0LfQsNCy0YfQvtGA0LBcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50aGVEYXlCZWZvcmUoY29udGV4dC5yZWZlcmVuY2UsIDIpO1xuICAgICAgICAgICAgY2FzZSBcItC/0L7Qt9Cw0L/QvtC30LDQstGH0L7RgNCwXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudGhlRGF5QmVmb3JlKGNvbnRleHQucmVmZXJlbmNlLCAzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgKiBhcyByZWZlcmVuY2VzIGZyb20gXCIuLi8uLi8uLi9jb21tb24vY2FzdWFsUmVmZXJlbmNlcy5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuU3RyaW5nKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGAo0LfQsNGA0LDQt3zQvNC40L3Rg9C70L7Qs9C+XFxcXHMq0LLQtdGH0L7RgNCwfNC80LjQvdGD0LvQvtGXXFxcXHMq0L3QvtGH0ZZ80L3QsNGB0YLRg9C/0L3QvtGXXFxcXHMq0L3QvtGH0ZZ80YHRjNC+0LPQvtC00L3RllxcXFxzKtCy0L3QvtGH0ZZ80YbRltGU0ZdcXFxccyrQvdC+0YfRlnzRhtGM0L7Qs9C+INGA0LDQvdC60YN80LLRgNCw0L3RhtGWfNGA0LDQvdC60YN80LfRgNCw0L3QutGDfNC+0L/RltCy0LTQvdGWfNCy0LLQtdGH0LXRgNGWfNCy0LXRh9C+0YDQsHzQvtC/0ZbQstC90L7Rh9GWfNCy0L3QvtGH0ZYpYDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGxldCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBsb3dlclRleHQgPSBtYXRjaFswXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGlmIChsb3dlclRleHQgPT09IFwi0LfQsNGA0LDQt1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQgPT09IFwi0LLQstC10YfQtdGA0ZZcIiB8fCBsb3dlclRleHQgPT09IFwi0LLQtdGH0L7RgNCwXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLmV2ZW5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQuZW5kc1dpdGgoXCLQstGA0LDQvdGG0ZZcIikgfHwgbG93ZXJUZXh0LmVuZHNXaXRoKFwi0YDQsNC90LrRg1wiKSB8fCBsb3dlclRleHQuZW5kc1dpdGgoXCLQt9GA0LDQvdC60YNcIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1vcm5pbmcoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQuZW5kc1dpdGgoXCLQvtC/0ZbQstC00L3RllwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubm9vbihjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5tYXRjaCgv0LzQuNC90YPQu9C+0ZdcXHMq0L3QvtGH0ZYvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubGFzdE5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QvNC40L3Rg9C70L7Qs9C+XFxzKtCy0LXRh9C+0YDQsC8pKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy55ZXN0ZXJkYXlFdmVuaW5nKGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC/QvdCw0YHRgtGD0L/QvdC+0ZdcXHMq0L3QvtGH0ZYvKSkge1xuICAgICAgICAgICAgY29uc3QgZGF5c1RvQWRkID0gdGFyZ2V0RGF0ZS5nZXRIb3VycygpIDwgMjIgPyAxIDogMjtcbiAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICBuZXh0RGF5LnNldERhdGUobmV4dERheS5nZXREYXRlKCkgKyBkYXlzVG9BZGQpO1xuICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvd2VyVGV4dC5tYXRjaCgv0YbRltGU0ZdcXHMq0L3QvtGH0ZYvKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMubWlkbmlnaHQoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb3dlclRleHQuZW5kc1dpdGgoXCLQvtC/0ZbQstC90L7Rh9GWXCIpIHx8IGxvd2VyVGV4dC5lbmRzV2l0aChcItCy0L3QvtGH0ZZcIikpIHtcbiAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLm1pZG5pZ2h0KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vd2Vla2RheXMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1dlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAoPzooPzosfFxcXFwofO+8iClcXFxccyopP2AgK1xuICAgICAgICAgICAgYCg/OtCyXFxcXHMqPyk/YCArXG4gICAgICAgICAgICBgKD860YNcXFxccyo/KT9gICtcbiAgICAgICAgICAgIGAoPzoo0YbQtdC5fNC80LjQvdGD0LvQvtCz0L580LzQuNC90YPQu9C40Ll80L/QvtC/0LXRgNC10LTQvdGW0Ll80L/QvtC/0LXRgNC10LTQvdGM0L7Qs9C+fNC90LDRgdGC0YPQv9C90L7Qs9C+fNC90LDRgdGC0YPQv9C90LjQuXzQvdCw0YHRgtGD0L/QvdC+0LzRgylcXFxccyopP2AgK1xuICAgICAgICAgICAgYCgke21hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpfSlgICtcbiAgICAgICAgICAgIGAoPzpcXFxccyooPzosfFxcXFwpfO+8iSkpP2AgK1xuICAgICAgICAgICAgYCg/OlxcXFxzKijQvdCwfNGDfNCyKVxcXFxzKijRhtGM0L7QvNGDfNC80LjQvdGD0LvQvtC80YN80L3QsNGB0YLRg9C/0L3QvtC80YMpXFxcXHMq0YLQuNC20L3Rlik/YCk7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBtYXRjaFtXRUVLREFZX0dST1VQXS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB3ZWVrZGF5ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2RheU9mV2Vla107XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoW1BSRUZJWF9HUk9VUF07XG4gICAgICAgIGNvbnN0IHBvc3RmaXggPSBtYXRjaFtQT1NURklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQgPT0gXCLQvNC40L3Rg9C70L7Qs9C+XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItC80LjQvdGD0LvQuNC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItC/0L7Qv9C10YDQtdC00L3RltC5XCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyV29yZCA9PSBcItC/0L7Qv9C10YDQtdC00L3RjNC+0LPQvlwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZCA9PSBcItC90LDRgdGC0YPQv9C90L7Qs9C+XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0L3QsNGB0YLRg9C/0L3QuNC5XCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwi0YbQtdC5XCIgfHwgbW9kaWZpZXJXb3JkID09IFwi0YbRjNC+0LPQvlwiIHx8IG1vZGlmaWVyV29yZCA9PSBcItGG0YzQvtC80YNcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInRoaXNcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1VS1dlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoTGVmdFJpZ2h0Qm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nLmpzXCI7XG5jb25zdCBNT0RJRklFUl9XT1JEX0dST1VQID0gMTtcbmNvbnN0IFJFTEFUSVZFX1dPUkRfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVUtSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKGAo0LIg0LzQuNC90YPQu9C+0LzRg3zRgyDQvNC40L3Rg9C70L7QvNGDfNC90LAg0LzQuNC90YPQu9C+0LzRg3zQvNC40L3Rg9C70L7Qs9C+fNC90LAg0L3QsNGB0YLRg9C/0L3QvtC80YN80LIg0L3QsNGB0YLRg9C/0L3QvtC80YN80YMg0L3QsNGB0YLRg9C/0L3QvtC80YN80L3QsNGB0YLRg9C/0L3QvtCz0L580L3QsCDRhtGM0L7QvNGDfNCyINGG0YzQvtC80YN80YMg0YbRjNC+0LzRg3zRhtGM0L7Qs9C+KVxcXFxzKmAgK1xuICAgICAgICAgICAgYCgke21hdGNoQW55UGF0dGVybihUSU1FX1VOSVRfRElDVElPTkFSWSl9KSg/PVxcXFxzKilgKTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gbWF0Y2hbTU9ESUZJRVJfV09SRF9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFdvcmQgPSBtYXRjaFtSRUxBVElWRV9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1ldW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW3VuaXRXb3JkXTtcbiAgICAgICAgaWYgKG1vZGlmaWVyID09IFwi0L3QsCDQvdCw0YHRgtGD0L/QvdC+0LzRg1wiIHx8XG4gICAgICAgICAgICBtb2RpZmllciA9PSBcItCyINC90LDRgdGC0YPQv9C90L7QvNGDXCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyID09IFwi0YMg0L3QsNGB0YLRg9C/0L3QvtC80YNcIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXIgPT0gXCLQvdCw0YHRgtGD0L/QvdC+0LPQvlwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCLQvdCwINC80LjQvdGD0LvQvtC80YNcIiB8fFxuICAgICAgICAgICAgbW9kaWZpZXIgPT0gXCLQsiDQvNC40L3Rg9C70L7QvNGDXCIgfHxcbiAgICAgICAgICAgIG1vZGlmaWVyID09IFwi0YMg0LzQuNC90YPQu9C+0LzRg1wiIHx8XG4gICAgICAgICAgICBtb2RpZmllciA9PSBcItC80LjQvdGD0LvQvtCz0L5cIikge1xuICAgICAgICAgICAgY29uc3QgdGltZVVuaXRzID0ge307XG4gICAgICAgICAgICB0aW1lVW5pdHNbdGltZXVuaXRdID0gLTE7XG4gICAgICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUoY29udGV4dC5yZWZlcmVuY2UuaW5zdGFudC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAodGltZXVuaXQubWF0Y2goL3dlZWsvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRpbWV1bml0Lm1hdGNoKC9tb250aC9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGltZXVuaXQubWF0Y2goL3llYXIvaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVLUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVS1RpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhMZWZ0UmlnaHRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm5TdHJpbmcoY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYCjRhtGWfNC+0YHRgtCw0L3QvdGWfNC80LjQvdGD0LvRlnzQvNCw0LnQsdGD0YLQvdGWfNC90LDRgdGC0YPQv9C90ZZ80L/RltGB0LvRj3zRh9C10YDQtdC3fFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19QQVRURVJOfSlgO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbM10pO1xuICAgICAgICBzd2l0Y2ggKHByZWZpeCkge1xuICAgICAgICAgICAgY2FzZSBcItC+0YHRgtCw0L3QvdGWXCI6XG4gICAgICAgICAgICBjYXNlIFwi0LzQuNC90YPQu9GWXCI6XG4gICAgICAgICAgICBjYXNlIFwiLVwiOlxuICAgICAgICAgICAgICAgIHRpbWVVbml0cyA9IHJldmVyc2VEdXJhdGlvbih0aW1lVW5pdHMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VUtUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCBVS1RpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFVLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBVa01vbnRoTmFtZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLTW9udGhOYW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgVUtUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBVS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFVLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL1VLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgVUtNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9VS01lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5pbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IFVLQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IFVLQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IFVLV2Vla2RheVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLV2Vla2RheVBhcnNlci5qc1wiO1xuaW1wb3J0IFVLUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVUtSZWxhdGl2ZURhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFVLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1VLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBVS0Nhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgVUtDYXN1YWxUaW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVrTW9udGhOYW1lUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVLUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFVLVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIodHJ1ZSksXG4gICAgICAgICAgICBuZXcgVUtUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFVLTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVUtXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVUtUaW1lRXhwcmVzc2lvblBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBVS1RpbWVVbml0QWdvRm9ybWF0UGFyc2VyKCksXG4gICAgICAgIF0sXG4gICAgICAgIHJlZmluZXJzOiBbbmV3IFVLTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IFVLTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcImRvbWVuaWNhXCI6IDAsXG4gICAgXCJkb21cIjogMCxcbiAgICBcImx1bmVkw6xcIjogMSxcbiAgICBcImx1blwiOiAxLFxuICAgIFwibWFydGVkw6xcIjogMixcbiAgICBcIm1hclwiOiAyLFxuICAgIFwibWVyY29sZWTDrFwiOiAzLFxuICAgIFwibWVyY1wiOiAzLFxuICAgIFwiZ2lvdmVkw6xcIjogNCxcbiAgICBcImdpb3ZcIjogNCxcbiAgICBcInZlbmVyZMOsXCI6IDUsXG4gICAgXCJ2ZW5cIjogNSxcbiAgICBcInNhYmF0b1wiOiA2LFxuICAgIFwic2FiXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZID0ge307XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICAuLi5GVUxMX01PTlRIX05BTUVfRElDVElPTkFSWSxcbiAgICBcImdlbm5haW9cIjogMSxcbiAgICBcImdlblwiOiAxLFxuICAgIFwiZ2VuLlwiOiAxLFxuICAgIFwiZmViYnJhaW9cIjogMixcbiAgICBcImZlYlwiOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIFwiZmVicmFpb1wiOiAyLFxuICAgIFwiZmViYlwiOiAyLFxuICAgIFwiZmViYi5cIjogMixcbiAgICBcIm1hcnpvXCI6IDMsXG4gICAgXCJtYXJcIjogMyxcbiAgICBcIm1hci5cIjogMyxcbiAgICBcImFwcmlsZVwiOiA0LFxuICAgIFwiYXByXCI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAgXCJtYWdnaW9cIjogNSxcbiAgICBcIm1hZ1wiOiA1LFxuICAgIFwiZ2l1Z25vXCI6IDYsXG4gICAgXCJnaXVcIjogNixcbiAgICBcImx1Z2xpb1wiOiA3LFxuICAgIFwibHVnXCI6IDcsXG4gICAgXCJsdWdsXCI6IDcsXG4gICAgXCJsdWcuXCI6IDcsXG4gICAgXCJhZ29zdG9cIjogOCxcbiAgICBcImFnb1wiOiA4LFxuICAgIFwic2V0dGVtYnJlXCI6IDksXG4gICAgXCJzZXRcIjogOSxcbiAgICBcInNldC5cIjogOSxcbiAgICBcInNldHRcIjogOSxcbiAgICBcInNldHQuXCI6IDksXG4gICAgXCJvdHRvYnJlXCI6IDEwLFxuICAgIFwib3R0XCI6IDEwLFxuICAgIFwib3R0LlwiOiAxMCxcbiAgICBcIm5vdmVtYnJlXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImRpY2VtYnJlXCI6IDEyLFxuICAgIFwiZGljXCI6IDEyLFxuICAgIFwiZGljZVwiOiAxMixcbiAgICBcImRpYy5cIjogMTIsXG59O1xuZXhwb3J0IGNvbnN0IElOVEVHRVJfV09SRF9ESUNUSU9OQVJZID0ge1xuICAgIFwidW5vXCI6IDEsXG4gICAgXCJkdWVcIjogMixcbiAgICBcInRyZVwiOiAzLFxuICAgIFwicXVhdHRyb1wiOiA0LFxuICAgIFwiY2lucXVlXCI6IDUsXG4gICAgXCJzZWlcIjogNixcbiAgICBcInNldHRlXCI6IDcsXG4gICAgXCJvdHRvXCI6IDgsXG4gICAgXCJub3ZlXCI6IDksXG4gICAgXCJkaWVjaVwiOiAxMCxcbiAgICBcInVuZGljaVwiOiAxMSxcbiAgICBcImRvZGljaVwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJwcmltb1wiOiAxLFxuICAgIFwic2Vjb25kb1wiOiAyLFxuICAgIFwidGVyem9cIjogMyxcbiAgICBcInF1YXJ0b1wiOiA0LFxuICAgIFwicXVpbnRvXCI6IDUsXG4gICAgXCJzZXN0b1wiOiA2LFxuICAgIFwic2V0dGltb1wiOiA3LFxuICAgIFwib3R0YXZvXCI6IDgsXG4gICAgXCJub25vXCI6IDksXG4gICAgXCJkZWNpbW9cIjogMTAsXG4gICAgXCJ1bmRpY2VzaW1vXCI6IDExLFxuICAgIFwiZG9kaWNlc2ltb1wiOiAxMixcbiAgICBcInRyZWRpY2VzaW1vXCI6IDEzLFxuICAgIFwicXVhdHRvcmRpY2VzaW1vXCI6IDE0LFxuICAgIFwicXVpbmRpY2VzaW1vXCI6IDE1LFxuICAgIFwic2VkaWNlc2ltb1wiOiAxNixcbiAgICBcImRpY2lhc3NldHRlc2ltb1wiOiAxNyxcbiAgICBcImRpY2lvdHRlc2ltb1wiOiAxOCxcbiAgICBcImRpY2lhbm5vdmVzaW1vXCI6IDE5LFxuICAgIFwidmVudGVzaW1vXCI6IDIwLFxuICAgIFwidmVudHVuZXNpbW9cIjogMjEsXG4gICAgXCJ2ZW50aWR1ZXNpbW9cIjogMjIsXG4gICAgXCJ2ZW50aXRyZWVzaW1vXCI6IDIzLFxuICAgIFwidmVudGlxdWF0dHJlc2ltb1wiOiAyNCxcbiAgICBcInZlbnRpY2lucXVlc2ltb1wiOiAyNSxcbiAgICBcInZlbnRpc2VpZXNpbW9cIjogMjYsXG4gICAgXCJ2ZW50aXNldHRlc2ltb1wiOiAyNyxcbiAgICBcInZlbnRvdHRlc2ltb1wiOiAyOCxcbiAgICBcInZlbnRpbm92ZXNpbW9cIjogMjksXG4gICAgXCJ0cmVudGVzaW1vXCI6IDMwLFxuICAgIFwidHJlbnR1bmVzaW1vXCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICBcInNlY1wiOiBcInNlY29uZFwiLFxuICAgIFwic2Vjb25kb1wiOiBcInNlY29uZFwiLFxuICAgIFwic2Vjb25kaVwiOiBcInNlY29uZFwiLFxuICAgIFwibWluXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW5zXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dGlcIjogXCJtaW51dGVcIixcbiAgICBcImhcIjogXCJob3VyXCIsXG4gICAgXCJoclwiOiBcImhvdXJcIixcbiAgICBcIm9cIjogXCJob3VyXCIsXG4gICAgXCJvcmFcIjogXCJob3VyXCIsXG4gICAgXCJvcmVcIjogXCJob3VyXCIsXG4gICAgXCJnaW9ybm9cIjogXCJkYXlcIixcbiAgICBcImdpb3JuaVwiOiBcImRheVwiLFxuICAgIFwic2V0dGltYW5hXCI6IFwid2Vla1wiLFxuICAgIFwic2V0dGltYW5lXCI6IFwid2Vla1wiLFxuICAgIFwibWVzZVwiOiBcIm1vbnRoXCIsXG4gICAgXCJ0cmltZXN0cmVcIjogXCJxdWFydGVyXCIsXG4gICAgXCJ0cmltZXN0cmlcIjogXCJxdWFydGVyXCIsXG4gICAgXCJhbm5pXCI6IFwieWVhclwiLFxuICAgIFwiYW5ub1wiOiBcInllYXJcIixcbn07XG5leHBvcnQgY29uc3QgTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSt8aGFsZig/OlxcXFxzezAsMn11bj8pP3x1bj9cXFxcYig/OlxcXFxzezAsMn1xdWFsY3Vubyk/fHF1YWxjdW5vfG1vbHRpfGE/XFxcXHN7MCwyfWFsY3VuaVxcXFxzezAsMn0oPzpvZik/KWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0gPT09IFwidW5cIiB8fCBudW0gPT09IFwidW5hXCIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvYWxjdW5pLykpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bS5tYXRjaCgvbWV0w6EvKSkge1xuICAgICAgICByZXR1cm4gMC41O1xuICAgIH1cbiAgICBlbHNlIGlmIChudW0ubWF0Y2goL3BhaW8vKSkge1xuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgZWxzZSBpZiAobnVtLm1hdGNoKC9tb2x0aS8pKSB7XG4gICAgICAgIHJldHVybiA3O1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oT1JESU5BTF9XT1JEX0RJQ1RJT05BUlkpfXxbMC05XXsxLDJ9KD86bW98bmRvfHJ6b3xzaW1vfGVzaW1vKT8pYDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgbGV0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gT1JESU5BTF9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgbnVtID0gbnVtLnJlcGxhY2UoLyg/Omltb3xuZG98cnpvfHJ0b3xudG98c3RvfHRhdm98bm9ub3xjaW1vfHRpbW98ZXNpbW8pJC9pLCBcIlwiKTtcbiAgICByZXR1cm4gcGFyc2VJbnQobnVtKTtcbn1cbmV4cG9ydCBjb25zdCBZRUFSX1BBVFRFUk4gPSBgKD86WzEtOV1bMC05XXswLDN9XFxcXHN7MCwyfSg/OkJFfEFEfEJDfEJDRXxDRSl8WzEtMl1bMC05XXszfXxbNS05XVswLTldKWA7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9CRS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvQkUvaSwgXCJcIik7XG4gICAgICAgIHJldHVybiBwYXJzZUludChtYXRjaCkgLSA1NDM7XG4gICAgfVxuICAgIGlmICgvQkNFPy9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvQkNFPy9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIC1wYXJzZUludChtYXRjaCk7XG4gICAgfVxuICAgIGlmICgvKEFEfENFKS9pLnRlc3QobWF0Y2gpKSB7XG4gICAgICAgIG1hdGNoID0gbWF0Y2gucmVwbGFjZSgvKEFEfENFKS9pLCBcIlwiKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbiAgICB9XG4gICAgY29uc3QgcmF3WWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICByZXR1cm4gZmluZE1vc3RMaWtlbHlBRFllYXIocmF3WWVhck51bWJlcik7XG59XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4gPSBgKCR7TlVNQkVSX1BBVFRFUk59KVxcXFxzezAsM30oJHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oYCg/Oig/OmFib3V0fGFyb3VuZClcXFxcc3swLDN9KT9gLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb24odGltZXVuaXRUZXh0KSB7XG4gICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgbGV0IHJlbWFpbmluZ1RleHQgPSB0aW1ldW5pdFRleHQ7XG4gICAgbGV0IG1hdGNoID0gU0lOR0xFX1RJTUVfVU5JVF9SRUdFWC5leGVjKHJlbWFpbmluZ1RleHQpO1xuICAgIHdoaWxlIChtYXRjaCkge1xuICAgICAgICBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKTtcbiAgICAgICAgcmVtYWluaW5nVGV4dCA9IHJlbWFpbmluZ1RleHQuc3Vic3RyaW5nKG1hdGNoWzBdLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbmZ1bmN0aW9uIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpIHtcbiAgICBjb25zdCBudW0gPSBwYXJzZU51bWJlclBhdHRlcm4obWF0Y2hbMV0pO1xuICAgIGNvbnN0IHVuaXQgPSBUSU1FX1VOSVRfRElDVElPTkFSWVttYXRjaFsyXS50b0xvd2VyQ2FzZSgpXTtcbiAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUU19QQVRURVJOLCBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOX1dJVEhfUFJFRklYID0gbmV3IFJlZ0V4cChgKD86d2l0aGlufGlufGZvcilcXFxccypgICtcbiAgICBgKD86KD86cGnDuSBvIG1lbm98aW50b3Jub3xhcHByb3NzaW1hdGl2YW1lbnRlfHZlcnNvfHZlcnNvIGxlKVxcXFxzKig/On5cXFxccyopPyk/KCR7VElNRV9VTklUU19QQVRURVJOfSkoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IFBBVFRFUk5fV0lUSE9VVF9QUkVGSVggPSBuZXcgUmVnRXhwKGAoPzooPzpwacO5IG8gbWVub3xpbnRvcm5vfGFwcHJvc3NpbWF0aXZhbWVudGV8dmVyc298dmVyc28gbGUpXFxcXHMqKD86flxcXFxzKik/KT8oJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5UaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oY29udGV4dCkge1xuICAgICAgICByZXR1cm4gY29udGV4dC5vcHRpb24uZm9yd2FyZERhdGUgPyBQQVRURVJOX1dJVEhPVVRfUFJFRklYIDogUEFUVEVSTl9XSVRIX1BSRUZJWDtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKD86b25cXFxcc3swLDN9KT9gICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pYCArXG4gICAgYCg/OmAgK1xuICAgIGBcXFxcc3swLDN9KD86YWx8XFxcXC18XFxcXOKAk3xmaW5vfGFsbGV8YWxsbyk/XFxcXHN7MCwzfWAgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlgICtcbiAgICBcIik/XCIgK1xuICAgIGAoPzotfC98XFxcXHN7MCwzfSg/OmRhbCk/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBcIig/OlwiICtcbiAgICBgKD86LXwvfCw/XFxcXHN7MCwzfSlgICtcbiAgICBgKCR7WUVBUl9QQVRURVJOfSg/IVteXFxcXHNdXFxcXGQpKWAgK1xuICAgIFwiKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDM7XG5jb25zdCBZRUFSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IGZpbmRZZWFyQ2xvc2VzdFRvUmVmIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5pbXBvcnQgeyBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiwgcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzotfC98XFxcXHMqLD9cXFxccyopXCIgK1xuICAgIGAoJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSkoPyFcXFxccyooPzphbXxwbSkpXFxcXHMqYCArXG4gICAgXCIoPzpcIiArXG4gICAgXCIoPzphbHxcXFxcLXxcXFxcYWxsZXxcXFxcZGVsfFxcXFxzKVxcXFxzKlwiICtcbiAgICBgKCR7T1JESU5BTF9OVU1CRVJfUEFUVEVSTn0pXFxcXHMqYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/OlwiICtcbiAgICBcIig/Oi18L3xcXFxccyosP1xcXFxzKilcIiArXG4gICAgYCgke1lFQVJfUEFUVEVSTn0pYCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpKD8hXFxcXDpcXFxcZClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfTkFNRV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX0dST1VQID0gMjtcbmNvbnN0IERBVEVfVE9fR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX05BTUVfR1JPVVBdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cyh7XG4gICAgICAgICAgICBkYXk6IGRheSxcbiAgICAgICAgICAgIG1vbnRoOiBtb250aCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuKG1hdGNoW0RBVEVfVE9fR1JPVVBdKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIHJlc3VsdC5zdGFydCA9IGNvbXBvbmVudHM7XG4gICAgICAgIHJlc3VsdC5lbmQgPSBjb21wb25lbnRzLmNsb25lKCk7XG4gICAgICAgIHJlc3VsdC5lbmQuYXNzaWduKFwiZGF5XCIsIGVuZERhdGUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZLCBNT05USF9ESUNUSU9OQVJZIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBZRUFSX1BBVFRFUk4sIHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgoPzppbilcXFxccyopP2AgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oTU9OVEhfRElDVElPTkFSWSl9KWAgK1xuICAgIGBcXFxccypgICtcbiAgICBgKD86YCArXG4gICAgYFssLV0/XFxcXHMqKCR7WUVBUl9QQVRURVJOfSk/YCArXG4gICAgXCIpP1wiICtcbiAgICBcIig/PVteXFxcXHNcXFxcd118XFxcXHMrW14wLTldfFxcXFxzKyR8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAyO1xuY29uc3QgWUVBUl9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTk1vbnRoTmFtZVBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGhOYW1lID0gbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKG1hdGNoWzBdLmxlbmd0aCA8PSAzICYmICFGVUxMX01PTlRIX05BTUVfRElDVElPTkFSWVttb250aE5hbWVdKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXggKyAobWF0Y2hbUFJFRklYX0dST1VQXSB8fCBcIlwiKS5sZW5ndGgsIG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbW9udGhOYW1lXTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgaWYgKG1hdGNoW1lFQVJfR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VZZWFyKG1hdGNoW1lFQVJfR1JPVVBdKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHllYXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeWVhciA9IGZpbmRZZWFyQ2xvc2VzdFRvUmVmKGNvbnRleHQucmVmRGF0ZSwgMSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTW9udGhOYW1lUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezR9KVtcXFxcLlxcXFwvXFxcXHNdYCArXG4gICAgYCg/Oigke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pfChbMC05XXsxLDJ9KSlbXFxcXC5cXFxcL1xcXFxzXWAgK1xuICAgIGAoWzAtOV17MSwyfSlgICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfTlVNQkVSX0dST1VQID0gMTtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAyO1xuY29uc3QgTU9OVEhfTlVNQkVSX0dST1VQID0gMztcbmNvbnN0IERBVEVfTlVNQkVSX0dST1VQID0gNDtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBtb250aCA9IG1hdGNoW01PTlRIX05VTUJFUl9HUk9VUF1cbiAgICAgICAgICAgID8gcGFyc2VJbnQobWF0Y2hbTU9OVEhfTlVNQkVSX0dST1VQXSlcbiAgICAgICAgICAgIDogTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKG1vbnRoIDwgMSB8fCBtb250aCA+IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFURV9OVU1CRVJfR1JPVVBdKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRheTogZGF5LFxuICAgICAgICAgICAgbW9udGg6IG1vbnRoLFxuICAgICAgICAgICAgeWVhcjogeWVhcixcbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVENhc3VhbFllYXJNb250aERheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFswLTldfDBbMS05XXwxWzAxMl0pLyhbMC05XXs0fSlcIiArIFwiXCIsIFwiaVwiKTtcbmNvbnN0IE1PTlRIX0dST1VQID0gMTtcbmNvbnN0IFlFQVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB5ZWFyID0gcGFyc2VJbnQobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KG1hdGNoW01PTlRIX0dST1VQXSk7XG4gICAgICAgIHJldHVybiBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCkuaW1wbHkoXCJkYXlcIiwgMSkuYXNzaWduKFwibW9udGhcIiwgbW9udGgpLmFzc2lnbihcInllYXJcIiwgeWVhcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRTbGFzaE1vbnRoRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKHN0cmljdE1vZGUpO1xuICAgIH1cbiAgICBmb2xsb3dpbmdQaGFzZSgpIHtcbiAgICAgICAgcmV0dXJuIFwiXFxcXHMqKD86XFxcXC18XFxcXOKAk3xcXFxcfnxcXFxc44CcfHRvfFxcXFw/KVxcXFxzKlwiO1xuICAgIH1cbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzphbGxlfGRhbGxlKVxcXFxzKik/P1wiO1xuICAgIH1cbiAgICBwcmltYXJ5U3VmZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzpcXFxccyooPzppbiBwdW50b3xvXFxcXFcqaW4gcHVudG98KD86ZGl8ZGVsfGRlbGxhfGlufGFsfGFsbGF8YWxsZSlcXFxccyooPzptYXR0aW5hfHBvbWVyaWdnaW98c2VyYSkpKT8oPyEvKSg/PVxcXFxXfCQpXCI7XG4gICAgfVxuICAgIGV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwic2VyYVwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPj0gNiAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJob3VyXCIsIGNvbXBvbmVudHMuZ2V0KFwiaG91clwiKSArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFswXS5lbmRzV2l0aChcInBvbWVyaWdnaW9cIikpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3VyID0gY29tcG9uZW50cy5nZXQoXCJob3VyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChob3VyID49IDAgJiYgaG91ciA8PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwiaG91clwiLCBjb21wb25lbnRzLmdldChcImhvdXJcIikgKyAxMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzBdLmVuZHNXaXRoKFwibWF0dGluYVwiKSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdXIgPSBjb21wb25lbnRzLmdldChcImhvdXJcIik7XG4gICAgICAgICAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcImhvdXJcIiwgY29tcG9uZW50cy5nZXQoXCJob3VyXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRUaW1lRXhwcmVzc2lvblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmZhfHByaW1hfHByZWNlZGVudGUpKD89KD86XFxcXFd8JCkpYCwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKGAoJHtUSU1FX1VOSVRTX1BBVFRFUk59KVxcXFxzezAsNX1mYSg/PSg/OlxcXFxXfCQpKWAsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRpbWVVbml0cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMV0pO1xuICAgICAgICBjb25zdCBvdXRwdXRUaW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgb3V0cHV0VGltZVVuaXRzKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVFRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHN7MCw1fSg/OmRvcG98cGnDuSB0YXJkaXxkYSBhZGVzc298YXZhbnRpfG9sdHJlfGEgc2VndWlyZSlgICsgXCIoPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuY29uc3QgU1RSSUNUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKFwiXCIgKyBcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCIoZG9wb3xwacO5IHRhcmRpKVwiICsgXCIoPz0oPzpcXFxcV3wkKSlcIiwgXCJpXCIpO1xuY29uc3QgR1JPVVBfTlVNX1RJTUVVTklUUyA9IDE7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc3RyaWN0TW9kZSA9IHN0cmljdE1vZGU7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaWN0TW9kZSA/IFNUUklDVF9QQVRURVJOIDogUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGZyYWdtZW50cyA9IHBhcnNlRHVyYXRpb24obWF0Y2hbR1JPVVBfTlVNX1RJTUVVTklUU10pO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBmcmFnbWVudHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyoodG98LSlcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRU5NZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHxhbGxlfGRvcG98cHJpbWF8aWx8ZGl8ZGVsfGRlbGxlfCx8LSk/XFxcXHMqJFwiKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVE1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgYXNzaWduU2ltaWxhckRhdGUgfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvZGF0ZXMuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyhvcmF8b2dnaXxzdGFzZXJhfHF1ZXN0YSBzZXJhfGRvbWFuaXxkbW58aWVyaVxccypzZXJhKSg/PVxcV3wkKS9pO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSVRDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IGxvd2VyVGV4dCA9IG1hdGNoWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChsb3dlclRleHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJvcmFcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm9nZ2lcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy50b2RheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiaWVyaVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnllc3RlcmRheShjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICBjYXNlIFwiZG9tYW5pXCI6XG4gICAgICAgICAgICBjYXNlIFwiZG1uXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcInN0YXNlcmFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJxdWVzdGEgc2VyYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRvbmlnaHQoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobG93ZXJUZXh0Lm1hdGNoKC9pZXJpXFxzKnNlcmEvKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0RGF0ZS5nZXRIb3VycygpID4gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNEYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0RheS5zZXREYXRlKHByZXZpb3VzRGF5LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RGF0ZSA9IHByZXZpb3VzRGF5O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IE1lcmlkaWVtIH0gZnJvbSBcIi4uLy4uLy4uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGFzc2lnblNpbWlsYXJEYXRlLCBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyg/OnF1ZXN0b3xxdWVzdGEpP1xcc3swLDN9KG1hdHRpbmF8cG9tZXJpZ2dpb3xzZXJhfG5vdHRlfG1lenphbm90dGV8bWV6em9naW9ybm8pKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVENhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChtYXRjaFsxXS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlIFwicG9tZXJpZ2dpb1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzZXJhXCI6XG4gICAgICAgICAgICBjYXNlIFwibm90dGVcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWV6emFub3R0ZVwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1hdHRpbmFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtZXp6b2dpb3Jub1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86aWxcXFxccyo/KT9cIiArXG4gICAgXCIoPzoocXVlc3RhfGwndWx0aW1hfHNjb3JzYXxwcm9zc2ltYSlcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihxdWVzdGF8bCd1bHRpbWF8c2NvcnNhfHByb3NzaW1hKVxcXFxzKnNldHRpbWFuYSk/XCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgUFJFRklYX0dST1VQID0gMTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAyO1xuY29uc3QgUE9TVEZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVFdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHdlZWtkYXkgPSBXRUVLREFZX0RJQ1RJT05BUllbZGF5T2ZXZWVrXTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gbWF0Y2hbUFJFRklYX0dST1VQXTtcbiAgICAgICAgY29uc3QgcG9zdGZpeCA9IG1hdGNoW1BPU1RGSVhfR1JPVVBdO1xuICAgICAgICBsZXQgbW9kaWZpZXJXb3JkID0gcHJlZml4IHx8IHBvc3RmaXg7XG4gICAgICAgIG1vZGlmaWVyV29yZCA9IG1vZGlmaWVyV29yZCB8fCBcIlwiO1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IG1vZGlmaWVyID0gbnVsbDtcbiAgICAgICAgaWYgKG1vZGlmaWVyV29yZCA9PSBcInVsdGltYVwiIHx8IG1vZGlmaWVyV29yZCA9PSBcInNjb3JzYVwiKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwidWx0aW1hXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwicHJvc3NpbWFcIikge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcInByb3NzaW1hXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkID09IFwicXVlc3RhXCIpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJxdWVzdGFcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIHdlZWtkYXksIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JVFdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgVElNRV9VTklUX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKHF1ZXN0b3x1bHRpbW98c2NvcnNvfHByb3NzaW1vfGRvcG9cXFxccypxdWVzdG98cXVlc3RhfHVsdGltYXxzY29yc2F8cHJvc3NpbWFcXFxccypxdWVzdGEpXFxcXHMqKCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pKD89XFxcXHMqKWAgKyBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IE1PRElGSUVSX1dPUkRfR1JPVVAgPSAxO1xuY29uc3QgUkVMQVRJVkVfV09SRF9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJVFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBtYXRjaFtNT0RJRklFUl9XT1JEX0dST1VQXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB1bml0V29yZCA9IG1hdGNoW1JFTEFUSVZFX1dPUkRfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRpbWV1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbdW5pdFdvcmRdO1xuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCJwcm9zc2ltb1wiIHx8IG1vZGlmaWVyLnN0YXJ0c1dpdGgoXCJkb3BvXCIpKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgdGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobW9kaWZpZXIgPT0gXCJwcmltYVwiIHx8IG1vZGlmaWVyID09IFwicHJlY2VkZW50ZVwiKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSB7fTtcbiAgICAgICAgICAgIHRpbWVVbml0c1t0aW1ldW5pdF0gPSAtMTtcbiAgICAgICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgbGV0IGRhdGUgPSBuZXcgRGF0ZShjb250ZXh0LnJlZmVyZW5jZS5pbnN0YW50LmdldFRpbWUoKSk7XG4gICAgICAgIGlmICh1bml0V29yZC5tYXRjaCgvc2V0dGltYW5hL2kpKSB7XG4gICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSBkYXRlLmdldERheSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJkYXlcIiwgZGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcIm1vbnRoXCIsIGRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1bml0V29yZC5tYXRjaCgvbWVzZS9pKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXREYXRlKDEpO1xuICAgICAgICAgICAgY29tcG9uZW50cy5pbXBseShcImRheVwiLCBkYXRlLmdldERhdGUoKSk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmFzc2lnbihcInllYXJcIiwgZGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwibW9udGhcIiwgZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodW5pdFdvcmQubWF0Y2goL2Fubm8vaSkpIHtcbiAgICAgICAgICAgIGRhdGUuc2V0RGF0ZSgxKTtcbiAgICAgICAgICAgIGRhdGUuc2V0TW9udGgoMCk7XG4gICAgICAgICAgICBjb21wb25lbnRzLmltcGx5KFwiZGF5XCIsIGRhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuaW1wbHkoXCJtb250aFwiLCBkYXRlLmdldE1vbnRoKCkgKyAxKTtcbiAgICAgICAgICAgIGNvbXBvbmVudHMuYXNzaWduKFwieWVhclwiLCBkYXRlLmdldEZ1bGxZZWFyKCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKHF1ZXN0b3x1bHRpbW98cGFzc2F0b3xwcm9zc2ltb3xkb3BvfHF1ZXN0YXx1bHRpbWF8cGFzc2F0YXxwcm9zc2ltYXxcXFxcK3wtKVxcXFxzKigke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsYXN0XCI6XG4gICAgICAgICAgICBjYXNlIFwicGFzdFwiOlxuICAgICAgICAgICAgY2FzZSBcIi1cIjpcbiAgICAgICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCB0aW1lVW5pdHMpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlUVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJnaW5nUmVmaW5lciB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vYWJzdHJhY3RSZWZpbmVycy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMsIFBhcnNpbmdSZXN1bHQsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5mdW5jdGlvbiBoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUocmVzdWx0KSB7XG4gICAgcmV0dXJuIHJlc3VsdC50ZXh0Lm1hdGNoKC9cXHMrKHByaW1hfGRhbCkkL2kpICE9IG51bGw7XG59XG5mdW5jdGlvbiBoYXNJbXBsaWVkTGF0ZXJSZWZlcmVuY2VEYXRlKHJlc3VsdCkge1xuICAgIHJldHVybiByZXN1bHQudGV4dC5tYXRjaCgvXFxzKyhkb3BvfGRhbHxmaW5vKSQvaSkgIT0gbnVsbDtcbn1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVOTWVyZ2VSZWxhdGl2ZURhdGVSZWZpbmVyIGV4dGVuZHMgTWVyZ2luZ1JlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gL15cXHMqJC9pO1xuICAgIH1cbiAgICBzaG91bGRNZXJnZVJlc3VsdHModGV4dEJldHdlZW4sIGN1cnJlbnRSZXN1bHQsIG5leHRSZXN1bHQpIHtcbiAgICAgICAgaWYgKCF0ZXh0QmV0d2Vlbi5tYXRjaCh0aGlzLnBhdHRlcm5CZXR3ZWVuKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUoY3VycmVudFJlc3VsdCkgJiYgIWhhc0ltcGxpZWRMYXRlclJlZmVyZW5jZURhdGUoY3VycmVudFJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISFuZXh0UmVzdWx0LnN0YXJ0LmdldChcImRheVwiKSAmJiAhIW5leHRSZXN1bHQuc3RhcnQuZ2V0KFwibW9udGhcIikgJiYgISFuZXh0UmVzdWx0LnN0YXJ0LmdldChcInllYXJcIik7XG4gICAgfVxuICAgIG1lcmdlUmVzdWx0cyh0ZXh0QmV0d2VlbiwgY3VycmVudFJlc3VsdCwgbmV4dFJlc3VsdCkge1xuICAgICAgICBsZXQgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihjdXJyZW50UmVzdWx0LnRleHQpO1xuICAgICAgICBpZiAoaGFzSW1wbGllZEVhcmxpZXJSZWZlcmVuY2VEYXRlKGN1cnJlbnRSZXN1bHQpKSB7XG4gICAgICAgICAgICB0aW1lVW5pdHMgPSByZXZlcnNlRHVyYXRpb24odGltZVVuaXRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZVdpdGhUaW1lem9uZS5mcm9tRGF0ZShuZXh0UmVzdWx0LnN0YXJ0LmRhdGUoKSksIHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBuZXcgUGFyc2luZ1Jlc3VsdChuZXh0UmVzdWx0LnJlZmVyZW5jZSwgY3VycmVudFJlc3VsdC5pbmRleCwgYCR7Y3VycmVudFJlc3VsdC50ZXh0fSR7dGV4dEJldHdlZW59JHtuZXh0UmVzdWx0LnRleHR9YCwgY29tcG9uZW50cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SVRNZXJnZVJlbGF0aXZlRGF0ZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IEVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVE1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IEVOTW9udGhOYW1lTWlkZGxlRW5kaWFuUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvSVRNb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIuanNcIjtcbmltcG9ydCBFTk1vbnRoTmFtZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUTW9udGhOYW1lUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5DYXN1YWxZZWFyTW9udGhEYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVENhc3VhbFllYXJNb250aERheVBhcnNlci5qc1wiO1xuaW1wb3J0IEVOU2xhc2hNb250aEZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUU2xhc2hNb250aEZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEVOVGltZUV4cHJlc3Npb25QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVFeHByZXNzaW9uUGFyc2VyLmpzXCI7XG5pbXBvcnQgRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9JVE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IEVOTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvSVRNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCBFTkNhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVENhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBFTkNhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVENhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBFTldlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBJVFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0lUUmVsYXRpdmVEYXRlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgeyBDaHJvbm8gfSBmcm9tIFwiLi4vLi4vY2hyb25vLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9JVFRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBFTk1lcmdlUmVsYXRpdmVEYXRlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9JVE1lcmdlUmVsYXRpdmVEYXRlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlLCBmYWxzZSkpO1xuZXhwb3J0IGNvbnN0IEdCID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCB0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRU5DYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEVOQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBFTk1vbnRoTmFtZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBJVFJlbGF0aXZlRGF0ZUZvcm1hdFBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIoKSk7XG4gICAgcmV0dXJuIG9wdGlvbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb25maWd1cmF0aW9uKHN0cmljdE1vZGUgPSB0cnVlLCBsaXR0bGVFbmRpYW4gPSBmYWxzZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5Nb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBFTk1vbnRoTmFtZU1pZGRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVOV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEVOQ2FzdWFsWWVhck1vbnRoRGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5TbGFzaE1vbnRoRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRU5UaW1lRXhwcmVzc2lvblBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBFTlRpbWVVbml0QWdvRm9ybWF0UGFyc2VyKHN0cmljdE1vZGUpLFxuICAgICAgICAgICAgbmV3IEVOVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgRU5NZXJnZVJlbGF0aXZlRGF0ZVJlZmluZXIoKSwgbmV3IEVOTWVyZ2VEYXRlVGltZVJlZmluZXIoKSwgbmV3IEVOTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyKCldLFxuICAgIH0sIHN0cmljdE1vZGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcInPDtm5kYWdcIjogMCxcbiAgICBcInPDtm5cIjogMCxcbiAgICBcInNvXCI6IDAsXG4gICAgXCJtw6VuZGFnXCI6IDEsXG4gICAgXCJtw6VuXCI6IDEsXG4gICAgXCJtw6VcIjogMSxcbiAgICBcInRpc2RhZ1wiOiAyLFxuICAgIFwidGlzXCI6IDIsXG4gICAgXCJ0aVwiOiAyLFxuICAgIFwib25zZGFnXCI6IDMsXG4gICAgXCJvbnNcIjogMyxcbiAgICBcIm9uXCI6IDMsXG4gICAgXCJ0b3JzZGFnXCI6IDQsXG4gICAgXCJ0b3JzXCI6IDQsXG4gICAgXCJ0b1wiOiA0LFxuICAgIFwiZnJlZGFnXCI6IDUsXG4gICAgXCJmcmVcIjogNSxcbiAgICBcImZyXCI6IDUsXG4gICAgXCJsw7ZyZGFnXCI6IDYsXG4gICAgXCJsw7ZyXCI6IDYsXG4gICAgXCJsw7ZcIjogNixcbn07XG5leHBvcnQgY29uc3QgTU9OVEhfRElDVElPTkFSWSA9IHtcbiAgICBcImphbnVhcmlcIjogMSxcbiAgICBcImphblwiOiAxLFxuICAgIFwiamFuLlwiOiAxLFxuICAgIFwiZmVicnVhcmlcIjogMixcbiAgICBcImZlYlwiOiAyLFxuICAgIFwiZmViLlwiOiAyLFxuICAgIFwibWFyc1wiOiAzLFxuICAgIFwibWFyXCI6IDMsXG4gICAgXCJtYXIuXCI6IDMsXG4gICAgXCJhcHJpbFwiOiA0LFxuICAgIFwiYXByXCI6IDQsXG4gICAgXCJhcHIuXCI6IDQsXG4gICAgXCJtYWpcIjogNSxcbiAgICBcImp1bmlcIjogNixcbiAgICBcImp1blwiOiA2LFxuICAgIFwianVuLlwiOiA2LFxuICAgIFwianVsaVwiOiA3LFxuICAgIFwianVsXCI6IDcsXG4gICAgXCJqdWwuXCI6IDcsXG4gICAgXCJhdWd1c3RpXCI6IDgsXG4gICAgXCJhdWdcIjogOCxcbiAgICBcImF1Zy5cIjogOCxcbiAgICBcInNlcHRlbWJlclwiOiA5LFxuICAgIFwic2VwXCI6IDksXG4gICAgXCJzZXAuXCI6IDksXG4gICAgXCJzZXB0XCI6IDksXG4gICAgXCJva3RvYmVyXCI6IDEwLFxuICAgIFwib2t0XCI6IDEwLFxuICAgIFwib2t0LlwiOiAxMCxcbiAgICBcIm5vdmVtYmVyXCI6IDExLFxuICAgIFwibm92XCI6IDExLFxuICAgIFwibm92LlwiOiAxMSxcbiAgICBcImRlY2VtYmVyXCI6IDEyLFxuICAgIFwiZGVjXCI6IDEyLFxuICAgIFwiZGVjLlwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfRElDVElPTkFSWSA9IHtcbiAgICBcImbDtnJzdGFcIjogMSxcbiAgICBcImFuZHJhXCI6IDIsXG4gICAgXCJ0cmVkamVcIjogMyxcbiAgICBcImZqw6RyZGVcIjogNCxcbiAgICBcImZlbXRlXCI6IDUsXG4gICAgXCJzasOkdHRlXCI6IDYsXG4gICAgXCJzanVuZGVcIjogNyxcbiAgICBcIsOldHRvbmRlXCI6IDgsXG4gICAgXCJuaW9uZGVcIjogOSxcbiAgICBcInRpb25kZVwiOiAxMCxcbiAgICBcImVsZnRlXCI6IDExLFxuICAgIFwidG9sZnRlXCI6IDEyLFxuICAgIFwidHJldHRvbmRlXCI6IDEzLFxuICAgIFwiZmpvcnRvbmRlXCI6IDE0LFxuICAgIFwiZmVtdG9uZGVcIjogMTUsXG4gICAgXCJzZXh0b25kZVwiOiAxNixcbiAgICBcInNqdXR0b25kZVwiOiAxNyxcbiAgICBcImFydG9uZGVcIjogMTgsXG4gICAgXCJuaXR0b25kZVwiOiAxOSxcbiAgICBcInRqdWdvbmRlXCI6IDIwLFxuICAgIFwidGp1Z29mw7Zyc3RhXCI6IDIxLFxuICAgIFwidGp1Z29hbmRyYVwiOiAyMixcbiAgICBcInRqdWdvdHJlZGplXCI6IDIzLFxuICAgIFwidGp1Z29masOkcmRlXCI6IDI0LFxuICAgIFwidGp1Z29mZW10ZVwiOiAyNSxcbiAgICBcInRqdWdvc2rDpHR0ZVwiOiAyNixcbiAgICBcInRqdWdvc2p1bmRlXCI6IDI3LFxuICAgIFwidGp1Z2/DpXR0b25kZVwiOiAyOCxcbiAgICBcInRqdWdvbmlvbmRlXCI6IDI5LFxuICAgIFwidHJldHRpb25kZVwiOiAzMCxcbiAgICBcInRyZXR0aW9mw7Zyc3RhXCI6IDMxLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcImVuXCI6IDEsXG4gICAgXCJldHRcIjogMSxcbiAgICBcInR2w6VcIjogMixcbiAgICBcInRyZVwiOiAzLFxuICAgIFwiZnlyYVwiOiA0LFxuICAgIFwiZmVtXCI6IDUsXG4gICAgXCJzZXhcIjogNixcbiAgICBcInNqdVwiOiA3LFxuICAgIFwiw6V0dGFcIjogOCxcbiAgICBcIm5pb1wiOiA5LFxuICAgIFwidGlvXCI6IDEwLFxuICAgIFwiZWx2YVwiOiAxMSxcbiAgICBcInRvbHZcIjogMTIsXG4gICAgXCJ0cmV0dG9uXCI6IDEzLFxuICAgIFwiZmpvcnRvblwiOiAxNCxcbiAgICBcImZlbXRvblwiOiAxNSxcbiAgICBcInNleHRvblwiOiAxNixcbiAgICBcInNqdXR0b25cIjogMTcsXG4gICAgXCJhcnRvblwiOiAxOCxcbiAgICBcIm5pdHRvblwiOiAxOSxcbiAgICBcInRqdWdvXCI6IDIwLFxuICAgIFwidHJldHRp0L5cIjogMzAsXG4gICAgXCJmeXJ0aW9cIjogNDAsXG4gICAgXCJmZW10aW9cIjogNTAsXG4gICAgXCJzZXh0aW9cIjogNjAsXG4gICAgXCJzanV0dGlvXCI6IDcwLFxuICAgIFwiw6V0dGlvXCI6IDgwLFxuICAgIFwibml0dGlvXCI6IDkwLFxuICAgIFwiaHVuZHJhXCI6IDEwMCxcbiAgICBcInR1c2VuXCI6IDEwMDAsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VrXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bmRcIjogXCJzZWNvbmRcIixcbiAgICBcInNla3VuZGVyXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW5cIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0XCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dGVyXCI6IFwibWludXRlXCIsXG4gICAgXCJ0aW1cIjogXCJob3VyXCIsXG4gICAgXCJ0aW1tZVwiOiBcImhvdXJcIixcbiAgICBcInRpbW1hclwiOiBcImhvdXJcIixcbiAgICBcImRhZ1wiOiBcImRheVwiLFxuICAgIFwiZGFnYXJcIjogXCJkYXlcIixcbiAgICBcInZlY2thXCI6IFwid2Vla1wiLFxuICAgIFwidmVja29yXCI6IFwid2Vla1wiLFxuICAgIFwibcOlblwiOiBcIm1vbnRoXCIsXG4gICAgXCJtw6VuYWRcIjogXCJtb250aFwiLFxuICAgIFwibcOlbmFkZXJcIjogXCJtb250aFwiLFxuICAgIFwiw6VyXCI6IFwieWVhclwiLFxuICAgIFwia3ZhcnTQsGxcIjogXCJxdWFydGVyXCIsXG4gICAgXCJrdmFydGFsXCI6IFwicXVhcnRlclwiLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfTk9fQUJCUl9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VrdW5kXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bmRlclwiOiBcInNlY29uZFwiLFxuICAgIFwibWludXRcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV0ZXJcIjogXCJtaW51dGVcIixcbiAgICBcInRpbW1lXCI6IFwiaG91clwiLFxuICAgIFwidGltbWFyXCI6IFwiaG91clwiLFxuICAgIFwiZGFnXCI6IFwiZGF5XCIsXG4gICAgXCJkYWdhclwiOiBcImRheVwiLFxuICAgIFwidmVja2FcIjogXCJ3ZWVrXCIsXG4gICAgXCJ2ZWNrb3JcIjogXCJ3ZWVrXCIsXG4gICAgXCJtw6VuYWRcIjogXCJtb250aFwiLFxuICAgIFwibcOlbmFkZXJcIjogXCJtb250aFwiLFxuICAgIFwiw6VyXCI6IFwieWVhclwiLFxuICAgIFwia3ZhcnRhbFwiOiBcInF1YXJ0ZXJcIixcbn07XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18XFxcXGQrKWA7XG5leHBvcnQgY29uc3QgT1JESU5BTF9OVU1CRVJfUEFUVEVSTiA9IGAoPzoke21hdGNoQW55UGF0dGVybihPUkRJTkFMX05VTUJFUl9ESUNUSU9OQVJZKX18XFxcXGR7MSwyfSg/OmV8OmUpKWA7XG5leHBvcnQgY29uc3QgVElNRV9VTklUX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkpfSlcXFxcc3swLDV9YDtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9OT19BQkJSX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKE9SRElOQUxfTlVNQkVSX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBPUkRJTkFMX05VTUJFUl9ESUNUSU9OQVJZW251bV07XG4gICAgfVxuICAgIHJldHVybiBwYXJzZUludChudW0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGlmICgvXFxkKy8udGVzdChtYXRjaCkpIHtcbiAgICAgICAgbGV0IHllYXJOdW1iZXIgPSBwYXJzZUludChtYXRjaCk7XG4gICAgICAgIGlmICh5ZWFyTnVtYmVyIDwgMTAwKSB7XG4gICAgICAgICAgICB5ZWFyTnVtYmVyID0gZmluZE1vc3RMaWtlbHlBRFllYXIoeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXJOdW1iZXI7XG4gICAgfVxuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG1hdGNoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzooPzpcXFxcLHxcXFxcKHxcXFxc77yIKVxcXFxzKik/XCIgK1xuICAgIFwiKD86cMOlXFxcXHMqPyk/XCIgK1xuICAgIFwiKD86KGbDtnJyYXxzZW5hc3RlfG7DpHN0YXxrb21tYW5kZSlcXFxccyopP1wiICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKFdFRUtEQVlfRElDVElPTkFSWSl9KWAgK1xuICAgIFwiKD86XFxcXHMqKD86XFxcXCx8XFxcXCl8XFxcXO+8iSkpP1wiICtcbiAgICBcIig/OlxcXFxzKihmw7ZycmF8c2VuYXN0ZXxuw6RzdGF8a29tbWFuZGUpXFxcXHMqdmVja2EpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBTVUZGSVhfR1JPVVAgPSAzO1xuY29uc3QgV0VFS0RBWV9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTVldlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfRElDVElPTkFSWVtkYXlPZldlZWtdO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfR1JPVVBdO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gbWF0Y2hbU1VGRklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQubWF0Y2goL2bDtnJyYXxzZW5hc3RlLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJsYXN0XCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobW9kaWZpZXJXb3JkLm1hdGNoKC9uw6RzdGF8a29tbWFuZGUvKSkge1xuICAgICAgICAgICAgbW9kaWZpZXIgPSBcIm5leHRcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIG9mZnNldCwgbW9kaWZpZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNWV2Vla2RheVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHBhcnNlWWVhciB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86ZGVuXFxcXHMqPyk/XCIgK1xuICAgIGAoWzAtOV17MSwyfSlgICtcbiAgICBgKD86XFxcXHMqKD86dGlsbHxcXFxcLXxcXFxc4oCTfFxcXFxzKVxcXFxzKihbMC05XXsxLDJ9KSk/XFxcXHMqYCArXG4gICAgYCgke21hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKX0pYCArXG4gICAgYCg/Oig/Oi18L3wsP1xcXFxzKikoWzAtOV17NH0oPyFbXlxcXFxzXVxcXFxkKSkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgREFURV9UT19HUk9VUCA9IDI7XG5jb25zdCBNT05USF9OQU1FX0dST1VQID0gMztcbmNvbnN0IFlFQVJfR1JPVVAgPSA0O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU1ZNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICBjb25zdCBtb250aCA9IE1PTlRIX0RJQ1RJT05BUllbbWF0Y2hbTU9OVEhfTkFNRV9HUk9VUF0udG9Mb3dlckNhc2UoKV07XG4gICAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KG1hdGNoW0RBVEVfR1JPVVBdKTtcbiAgICAgICAgaWYgKGRheSA+IDMxKSB7XG4gICAgICAgICAgICBtYXRjaC5pbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbREFURV9HUk9VUF0ubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXJOdW1iZXIgPSBwYXJzZVllYXIobWF0Y2hbWUVBUl9HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgeWVhck51bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB5ZWFyID0gZmluZFllYXJDbG9zZXN0VG9SZWYoY29udGV4dC5yZWZEYXRlLCBkYXksIG1vbnRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcInllYXJcIiwgeWVhcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoW0RBVEVfVE9fR1JPVVBdKSB7XG4gICAgICAgICAgICBjb25zdCBlbmREYXRlID0gcGFyc2VJbnQobWF0Y2hbREFURV9UT19HUk9VUF0pO1xuICAgICAgICAgICAgcmVzdWx0LmVuZCA9IHJlc3VsdC5zdGFydC5jbG9uZSgpO1xuICAgICAgICAgICAgcmVzdWx0LmVuZC5hc3NpZ24oXCJkYXlcIiwgZW5kRGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ0NvbXBvbmVudHMgfSBmcm9tIFwiLi4vLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyByZXZlcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24vZHVyYXRpb24uanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAoZGVubmF8ZGVuIGjDpHJ8ZsO2cnJhfHBhc3NlcmFkZXxuw6RzdGF8a29tbWFuZGV8ZWZ0ZXJ8XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgUEFUVEVSTl9OT19BQkJSID0gbmV3IFJlZ0V4cChgKGRlbm5hfGRlbiBow6RyfGbDtnJyYXxwYXNzZXJhZGV8bsOkc3RhfGtvbW1hbmRlfGVmdGVyfFxcXFwrfC0pXFxcXHMqKCR7VElNRV9VTklUU19OT19BQkJSX1BBVFRFUk59KSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU1ZUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGFsbG93QWJicmV2aWF0aW9ucztcbiAgICBjb25zdHJ1Y3RvcihhbGxvd0FiYnJldmlhdGlvbnMgPSB0cnVlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID0gYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbG93QWJicmV2aWF0aW9ucyA/IFBBVFRFUk4gOiBQQVRURVJOX05PX0FCQlI7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzJdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChwcmVmaXgpIHtcbiAgICAgICAgICAgIGNhc2UgXCJmw7ZycmFcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwYXNzZXJhZGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCItXCI6XG4gICAgICAgICAgICAgICAgZHVyYXRpb24gPSByZXZlcnNlRHVyYXRpb24oZHVyYXRpb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIGR1cmF0aW9uKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKGAobnV8aWRhZ3xpbW9yZ29ufMO2dmVybW9yZ29ufGlnw6VyfGbDtnJyZ8OlcnxpXFxcXHMqZsO2cnJnw6VyKWAgK1xuICAgIGAoPzpcXFxccyooPzpww6VcXFxccyopPyhtb3Jnb25lbj98ZsO2cm1pZGRhZ2VuP3xtaWRkYWdlbj98ZWZ0ZXJtaWRkYWdlbj98a3bDpGxsZW4/fG5hdHRlbj98bWlkbmF0dCkpP2AgK1xuICAgIGAoPz1cXFxcV3wkKWAsIFwiaVwiKTtcbmNvbnN0IERBVEVfR1JPVVAgPSAxO1xuY29uc3QgVElNRV9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTVkNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0YXJnZXREYXRlID0gY29udGV4dC5yZWZEYXRlO1xuICAgICAgICBjb25zdCBkYXRlS2V5d29yZCA9IChtYXRjaFtEQVRFX0dST1VQXSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0aW1lS2V5d29yZCA9IChtYXRjaFtUSU1FX0dST1VQXSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgY29tcG9uZW50ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgICAgICBzd2l0Y2ggKGRhdGVLZXl3b3JkKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLm5vdyhjb250ZXh0LnJlZmVyZW5jZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWRhZ1wiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImltb3Jnb25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJpbW9yblwiOlxuICAgICAgICAgICAgICAgIGNvbnN0IG5leHREYXkgPSBuZXcgRGF0ZSh0YXJnZXREYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICAgICAgbmV4dERheS5zZXREYXRlKG5leHREYXkuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCBuZXh0RGF5KTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgbmV4dERheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWfDpXJcIjpcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0RheSA9IG5ldyBEYXRlKHRhcmdldERhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0RheS5zZXREYXRlKHByZXZpb3VzRGF5LmdldERhdGUoKSAtIDEpO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgcHJldmlvdXNEYXkpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBwcmV2aW91c0RheSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZsO2cnJnw6VyXCI6XG4gICAgICAgICAgICBjYXNlIFwiaSBmw7ZycmfDpXJcIjpcbiAgICAgICAgICAgICAgICBjb25zdCB0d29EYXlzQWdvID0gbmV3IERhdGUodGFyZ2V0RGF0ZS5nZXRUaW1lKCkpO1xuICAgICAgICAgICAgICAgIHR3b0RheXNBZ28uc2V0RGF0ZSh0d29EYXlzQWdvLmdldERhdGUoKSAtIDIpO1xuICAgICAgICAgICAgICAgIGFzc2lnblNpbWlsYXJEYXRlKGNvbXBvbmVudCwgdHdvRGF5c0Fnbyk7XG4gICAgICAgICAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHR3b0RheXNBZ28pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodGltZUtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJtb3Jnb25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJtb3Jnb25lblwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJmw7ZybWlkZGFnXCI6XG4gICAgICAgICAgICBjYXNlIFwiZsO2cm1pZGRhZ2VuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcIm1pZGRhZ2VuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJlZnRlcm1pZGRhZ1wiOlxuICAgICAgICAgICAgY2FzZSBcImVmdGVybWlkZGFnZW5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE1KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbGxpc2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImt2w6RsbFwiOlxuICAgICAgICAgICAgY2FzZSBcImt2w6RsbGVuXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAyMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJuYXR0XCI6XG4gICAgICAgICAgICBjYXNlIFwibmF0dGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwibWlkbmF0dFwiOlxuICAgICAgICAgICAgICAgIGlmICh0aW1lS2V5d29yZCA9PT0gXCJtaWRuYXR0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWlsbGlzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TVkNhc3VhbERhdGVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgU1ZXZWVrZGF5UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvU1ZXZWVrZGF5UGFyc2VyLmpzXCI7XG5pbXBvcnQgU1ZNb250aE5hbWVMaXR0bGVFbmRpYW5QYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9TVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlci5qc1wiO1xuaW1wb3J0IFNWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1NWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IFNWQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1NWQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuZXhwb3J0IHsgQ2hyb25vLCBQYXJzaW5nUmVzdWx0LCBQYXJzaW5nQ29tcG9uZW50cywgUmVmZXJlbmNlV2l0aFRpbWV6b25lIH07XG5leHBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IG5ldyBDaHJvbm8oY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbigpKTtcbmV4cG9ydCBjb25zdCBzdHJpY3QgPSBuZXcgQ2hyb25vKGNyZWF0ZUNvbmZpZ3VyYXRpb24odHJ1ZSkpO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKSB7XG4gICAgcmV0dXJuIGNhc3VhbC5wYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24obGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbiA9IGNyZWF0ZUNvbmZpZ3VyYXRpb24oZmFsc2UsIGxpdHRsZUVuZGlhbik7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgU1ZDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBTVk1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFNWV2Vla2RheVBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IFNWVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpLFxuICAgICAgICBdLFxuICAgICAgICByZWZpbmVyczogW10sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0VGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJVGltZUV4cHJlc3Npb25QYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFRpbWVFeHByZXNzaW9uUGFyc2VyIHtcbiAgICBwcmltYXJ5UHJlZml4KCkge1xuICAgICAgICByZXR1cm4gXCIoPzooPzprbG98a2VsbG8pXFxcXHMqKT9cIjtcbiAgICB9XG4gICAgZm9sbG93aW5nUGhhc2UoKSB7XG4gICAgICAgIHJldHVybiBcIlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXH58XFxcXOOAnClcXFxccypcIjtcbiAgICB9XG4gICAgZXh0cmFjdFByaW1hcnlUaW1lQ29tcG9uZW50cyhjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBpZiAobWF0Y2hbMF0ubWF0Y2goL15cXHMqXFxkezR9XFxzKiQvKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLmV4dHJhY3RQcmltYXJ5VGltZUNvbXBvbmVudHMoY29udGV4dCwgbWF0Y2gpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJVGltZUV4cHJlc3Npb25QYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuLCByZXBlYXRlZFRpbWV1bml0UGF0dGVybiB9IGZyb20gXCIuLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBmaW5kTW9zdExpa2VseUFEWWVhciB9IGZyb20gXCIuLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuZXhwb3J0IGNvbnN0IFdFRUtEQVlfRElDVElPTkFSWSA9IHtcbiAgICBcInN1bm51bnRhaVwiOiAwLFxuICAgIFwic3VubnVudGFpbmFcIjogMCxcbiAgICBcInN1XCI6IDAsXG4gICAgXCJtYWFuYW50YWlcIjogMSxcbiAgICBcIm1hYW5hbnRhaW5hXCI6IDEsXG4gICAgXCJtYVwiOiAxLFxuICAgIFwidGlpc3RhaVwiOiAyLFxuICAgIFwidGlpc3RhaW5hXCI6IDIsXG4gICAgXCJ0aVwiOiAyLFxuICAgIFwia2Vza2l2aWlra29cIjogMyxcbiAgICBcImtlc2tpdmlpa2tvbmFcIjogMyxcbiAgICBcImtlXCI6IDMsXG4gICAgXCJ0b3JzdGFpXCI6IDQsXG4gICAgXCJ0b3JzdGFpbmFcIjogNCxcbiAgICBcInRvXCI6IDQsXG4gICAgXCJwZXJqYW50YWlcIjogNSxcbiAgICBcInBlcmphbnRhaW5hXCI6IDUsXG4gICAgXCJwZVwiOiA1LFxuICAgIFwibGF1YW50YWlcIjogNixcbiAgICBcImxhdWFudGFpbmFcIjogNixcbiAgICBcImxhXCI6IDYsXG59O1xuZXhwb3J0IGNvbnN0IE1PTlRIX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ0YW1taWt1dVwiOiAxLFxuICAgIFwidGFtbWlrdXV0YVwiOiAxLFxuICAgIFwidGFtbWlrdXVuXCI6IDEsXG4gICAgXCJ0YW1taVwiOiAxLFxuICAgIFwiaGVsbWlrdXVcIjogMixcbiAgICBcImhlbG1pa3V1dGFcIjogMixcbiAgICBcImhlbG1pa3V1blwiOiAyLFxuICAgIFwiaGVsbWlcIjogMixcbiAgICBcIm1hYWxpc2t1dVwiOiAzLFxuICAgIFwibWFhbGlza3V1dGFcIjogMyxcbiAgICBcIm1hYWxpc2t1dW5cIjogMyxcbiAgICBcIm1hYWxpc1wiOiAzLFxuICAgIFwiaHVodGlrdXVcIjogNCxcbiAgICBcImh1aHRpa3V1dGFcIjogNCxcbiAgICBcImh1aHRpa3V1blwiOiA0LFxuICAgIFwiaHVodGlcIjogNCxcbiAgICBcInRvdWtva3V1XCI6IDUsXG4gICAgXCJ0b3Vrb2t1dXRhXCI6IDUsXG4gICAgXCJ0b3Vrb2t1dW5cIjogNSxcbiAgICBcInRvdWtvXCI6IDUsXG4gICAgXCJrZXPDpGt1dVwiOiA2LFxuICAgIFwia2Vzw6RrdXV0YVwiOiA2LFxuICAgIFwia2Vzw6RrdXVuXCI6IDYsXG4gICAgXCJrZXPDpFwiOiA2LFxuICAgIFwiaGVpbsOka3V1XCI6IDcsXG4gICAgXCJoZWluw6RrdXV0YVwiOiA3LFxuICAgIFwiaGVpbsOka3V1blwiOiA3LFxuICAgIFwiaGVpbsOkXCI6IDcsXG4gICAgXCJlbG9rdXVcIjogOCxcbiAgICBcImVsb2t1dXRhXCI6IDgsXG4gICAgXCJlbG9rdXVuXCI6IDgsXG4gICAgXCJlbG9cIjogOCxcbiAgICBcInN5eXNrdXVcIjogOSxcbiAgICBcInN5eXNrdXV0YVwiOiA5LFxuICAgIFwic3l5c2t1dW5cIjogOSxcbiAgICBcInN5eXNcIjogOSxcbiAgICBcImxva2FrdXVcIjogMTAsXG4gICAgXCJsb2tha3V1dGFcIjogMTAsXG4gICAgXCJsb2tha3V1blwiOiAxMCxcbiAgICBcImxva2FcIjogMTAsXG4gICAgXCJtYXJyYXNrdXVcIjogMTEsXG4gICAgXCJtYXJyYXNrdXV0YVwiOiAxMSxcbiAgICBcIm1hcnJhc2t1dW5cIjogMTEsXG4gICAgXCJtYXJyYXNcIjogMTEsXG4gICAgXCJqb3VsdWt1dVwiOiAxMixcbiAgICBcImpvdWx1a3V1dGFcIjogMTIsXG4gICAgXCJqb3VsdWt1dW5cIjogMTIsXG4gICAgXCJqb3VsdVwiOiAxMixcbn07XG5leHBvcnQgY29uc3QgSU5URUdFUl9XT1JEX0RJQ1RJT05BUlkgPSB7XG4gICAgXCJ5a3NpXCI6IDEsXG4gICAgXCJ5aGRlblwiOiAxLFxuICAgIFwia2Frc2lcIjogMixcbiAgICBcImthaGRlblwiOiAyLFxuICAgIFwia29sbWVcIjogMyxcbiAgICBcImtvbG1lblwiOiAzLFxuICAgIFwibmVsasOkXCI6IDQsXG4gICAgXCJuZWxqw6RuXCI6IDQsXG4gICAgXCJ2aWlzaVwiOiA1LFxuICAgIFwidmlpZGVuXCI6IDUsXG4gICAgXCJrdXVzaVwiOiA2LFxuICAgIFwia3V1ZGVuXCI6IDYsXG4gICAgXCJzZWl0c2Vtw6RuXCI6IDcsXG4gICAgXCJrYWhkZWtzYW5cIjogOCxcbiAgICBcInloZGVrc8OkblwiOiA5LFxuICAgIFwia3ltbWVuZW5cIjogMTAsXG59O1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVF9ESUNUSU9OQVJZID0ge1xuICAgIFwic1wiOiBcInNlY29uZFwiLFxuICAgIFwic2VrXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bnRpXCI6IFwic2Vjb25kXCIsXG4gICAgXCJzZWt1bnRpYVwiOiBcInNlY29uZFwiLFxuICAgIFwic2VrdW5uaW5cIjogXCJzZWNvbmRcIixcbiAgICBcIm1pblwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0dGlcIjogXCJtaW51dGVcIixcbiAgICBcIm1pbnV1dHRpYVwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0aW5cIjogXCJtaW51dGVcIixcbiAgICBcInRcIjogXCJob3VyXCIsXG4gICAgXCJ0dW50aVwiOiBcImhvdXJcIixcbiAgICBcInR1bnRpYVwiOiBcImhvdXJcIixcbiAgICBcInR1bm5pblwiOiBcImhvdXJcIixcbiAgICBcInB2XCI6IFwiZGF5XCIsXG4gICAgXCJww6RpdsOkXCI6IFwiZGF5XCIsXG4gICAgXCJww6RpdsOkw6RcIjogXCJkYXlcIixcbiAgICBcInDDpGl2w6RuXCI6IFwiZGF5XCIsXG4gICAgXCJ2a1wiOiBcIndlZWtcIixcbiAgICBcInZpaWtrb1wiOiBcIndlZWtcIixcbiAgICBcInZpaWtrb2FcIjogXCJ3ZWVrXCIsXG4gICAgXCJ2aWlrb25cIjogXCJ3ZWVrXCIsXG4gICAgXCJra1wiOiBcIm1vbnRoXCIsXG4gICAgXCJrdXVrYXVzaVwiOiBcIm1vbnRoXCIsXG4gICAgXCJrdXVrYXV0dGFcIjogXCJtb250aFwiLFxuICAgIFwia3V1a2F1ZGVuXCI6IFwibW9udGhcIixcbiAgICBcInZ1b3NpXCI6IFwieWVhclwiLFxuICAgIFwidnVvdHRhXCI6IFwieWVhclwiLFxuICAgIFwidnVvZGVuXCI6IFwieWVhclwiLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfTk9fQUJCUl9ESUNUSU9OQVJZID0ge1xuICAgIFwic2VrdW50aVwiOiBcInNlY29uZFwiLFxuICAgIFwic2VrdW50aWFcIjogXCJzZWNvbmRcIixcbiAgICBcInNla3VubmluXCI6IFwic2Vjb25kXCIsXG4gICAgXCJtaW51dXR0aVwiOiBcIm1pbnV0ZVwiLFxuICAgIFwibWludXV0dGlhXCI6IFwibWludXRlXCIsXG4gICAgXCJtaW51dXRpblwiOiBcIm1pbnV0ZVwiLFxuICAgIFwidHVudGlcIjogXCJob3VyXCIsXG4gICAgXCJ0dW50aWFcIjogXCJob3VyXCIsXG4gICAgXCJ0dW5uaW5cIjogXCJob3VyXCIsXG4gICAgXCJww6RpdsOkXCI6IFwiZGF5XCIsXG4gICAgXCJww6RpdsOkw6RcIjogXCJkYXlcIixcbiAgICBcInDDpGl2w6RuXCI6IFwiZGF5XCIsXG4gICAgXCJ2aWlra29cIjogXCJ3ZWVrXCIsXG4gICAgXCJ2aWlra29hXCI6IFwid2Vla1wiLFxuICAgIFwidmlpa29uXCI6IFwid2Vla1wiLFxuICAgIFwia3V1a2F1c2lcIjogXCJtb250aFwiLFxuICAgIFwia3V1a2F1dHRhXCI6IFwibW9udGhcIixcbiAgICBcImt1dWthdWRlblwiOiBcIm1vbnRoXCIsXG4gICAgXCJ2dW9zaVwiOiBcInllYXJcIixcbiAgICBcInZ1b3R0YVwiOiBcInllYXJcIixcbiAgICBcInZ1b2RlblwiOiBcInllYXJcIixcbn07XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VEdXJhdGlvbih0aW1ldW5pdFRleHQpIHtcbiAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICBsZXQgcmVtYWluaW5nVGV4dCA9IHRpbWV1bml0VGV4dDtcbiAgICBsZXQgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgd2hpbGUgKG1hdGNoKSB7XG4gICAgICAgIGNvbGxlY3REYXRlVGltZUZyYWdtZW50KGZyYWdtZW50cywgbWF0Y2gpO1xuICAgICAgICByZW1haW5pbmdUZXh0ID0gcmVtYWluaW5nVGV4dC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgbWF0Y2ggPSBTSU5HTEVfVElNRV9VTklUX1JFR0VYLmV4ZWMocmVtYWluaW5nVGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBmcmFnbWVudHM7XG59XG5mdW5jdGlvbiBjb2xsZWN0RGF0ZVRpbWVGcmFnbWVudChmcmFnbWVudHMsIG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbbWF0Y2hbMl0udG9Mb3dlckNhc2UoKV07XG4gICAgZnJhZ21lbnRzW3VuaXRdID0gbnVtO1xufVxuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gYCg/OiR7bWF0Y2hBbnlQYXR0ZXJuKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZKX18XFxcXGQrKWA7XG5leHBvcnQgY29uc3QgVElNRV9VTklUX1BBVFRFUk4gPSBgKD86JHttYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpfSlgO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKX0pXFxcXHN7MCw1fWA7XG5jb25zdCBTSU5HTEVfVElNRV9VTklUX1JFR0VYID0gbmV3IFJlZ0V4cChTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4sIFwiaVwiKTtcbmNvbnN0IFNJTkdMRV9USU1FX1VOSVRfTk9fQUJCUl9QQVRURVJOID0gYCgke05VTUJFUl9QQVRURVJOfSlcXFxcc3swLDV9KCR7bWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkpfSlcXFxcc3swLDV9YDtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRTX1BBVFRFUk4gPSByZXBlYXRlZFRpbWV1bml0UGF0dGVybihcIlwiLCBTSU5HTEVfVElNRV9VTklUX1BBVFRFUk4pO1xuZXhwb3J0IGNvbnN0IFRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9OT19BQkJSX1BBVFRFUk4pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlTnVtYmVyUGF0dGVybihtYXRjaCkge1xuICAgIGNvbnN0IG51bSA9IG1hdGNoLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKElOVEVHRVJfV09SRF9ESUNUSU9OQVJZW251bV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlSW50KG51bSk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VZZWFyKG1hdGNoKSB7XG4gICAgaWYgKC9cXGQrLy50ZXN0KG1hdGNoKSkge1xuICAgICAgICBsZXQgeWVhck51bWJlciA9IHBhcnNlSW50KG1hdGNoKTtcbiAgICAgICAgaWYgKHllYXJOdW1iZXIgPCAxMDApIHtcbiAgICAgICAgICAgIHllYXJOdW1iZXIgPSBmaW5kTW9zdExpa2VseUFEWWVhcih5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhck51bWJlcjtcbiAgICB9XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBJTlRFR0VSX1dPUkRfRElDVElPTkFSWVtudW1dO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VJbnQobWF0Y2gpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsImltcG9ydCB7IFdFRUtEQVlfRElDVElPTkFSWSB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IG1hdGNoQW55UGF0dGVybiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9wYXR0ZXJuLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5IH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL3dlZWtkYXlzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/Oig/OlxcXFwsfFxcXFwofFxcXFzvvIgpXFxcXHMqKT9cIiArXG4gICAgXCIoPzoodmlpbWV8ZWRlbGxpbmVufGVkZWxsaXNlbsOkfGVuc2l8c2V1cmFhdmF8c2V1cmFhdmFuYXx0w6Rtw6R8dMOkbsOkKVxcXFxzKik/XCIgK1xuICAgIGAoJHttYXRjaEFueVBhdHRlcm4oV0VFS0RBWV9ESUNUSU9OQVJZKX0pYCArXG4gICAgXCIoPzpcXFxccyooPzpcXFxcLHxcXFxcKXxcXFxc77yJKSk/XCIgK1xuICAgIFwiKD86XFxcXHMqKHZpaW1lfGVuc2l8c2V1cmFhdmEpXFxcXHMqdmlpa29sbGEpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFBSRUZJWF9HUk9VUCA9IDE7XG5jb25zdCBXRUVLREFZX0dST1VQID0gMjtcbmNvbnN0IFNVRkZJWF9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSVdlZWtkYXlQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9IG1hdGNoW1dFRUtEQVlfR1JPVVBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IFdFRUtEQVlfRElDVElPTkFSWVtkYXlPZldlZWtdO1xuICAgICAgICBjb25zdCBwcmVmaXggPSBtYXRjaFtQUkVGSVhfR1JPVVBdO1xuICAgICAgICBjb25zdCBwb3N0Zml4ID0gbWF0Y2hbU1VGRklYX0dST1VQXTtcbiAgICAgICAgbGV0IG1vZGlmaWVyV29yZCA9IHByZWZpeCB8fCBwb3N0Zml4O1xuICAgICAgICBtb2RpZmllcldvcmQgPSBtb2RpZmllcldvcmQgfHwgXCJcIjtcbiAgICAgICAgbW9kaWZpZXJXb3JkID0gbW9kaWZpZXJXb3JkLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBtb2RpZmllciA9IG51bGw7XG4gICAgICAgIGlmIChtb2RpZmllcldvcmQubWF0Y2goL3ZpaW1lfGVkZWxsaW5lbnxlZGVsbGlzZW7DpC8pKSB7XG4gICAgICAgICAgICBtb2RpZmllciA9IFwibGFzdFwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGlmaWVyV29yZC5tYXRjaCgvZW5zaXxzZXVyYWF2YXxzZXVyYWF2YW5hLykpIHtcbiAgICAgICAgICAgIG1vZGlmaWVyID0gXCJuZXh0XCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZVBhcnNpbmdDb21wb25lbnRzQXRXZWVrZGF5KGNvbnRleHQucmVmZXJlbmNlLCBvZmZzZXQsIG1vZGlmaWVyKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GSVdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgZmluZFllYXJDbG9zZXN0VG9SZWYgfSBmcm9tIFwiLi4vLi4vLi4vY2FsY3VsYXRpb24veWVhcnMuanNcIjtcbmltcG9ydCB7IE1PTlRIX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChgKFswLTldezEsMn0pXFxcXC4/YCArXG4gICAgYCg/OlxcXFxzKig/OlxcXFwtfFxcXFzigJN8XFxcXHMpXFxcXHMqKFswLTldezEsMn0pXFxcXC4/KT9cXFxccypgICtcbiAgICBgKCR7bWF0Y2hBbnlQYXR0ZXJuKE1PTlRIX0RJQ1RJT05BUlkpfSlgICtcbiAgICBgKD86KD86LXwvfCw/XFxcXHMqKShbMC05XXs0fSg/IVteXFxcXHNdXFxcXGQpKSk/YCArXG4gICAgYCg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuY29uc3QgREFURV9HUk9VUCA9IDE7XG5jb25zdCBEQVRFX1RPX0dST1VQID0gMjtcbmNvbnN0IE1PTlRIX05BTUVfR1JPVVAgPSAzO1xuY29uc3QgWUVBUl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gY29udGV4dC5jcmVhdGVQYXJzaW5nUmVzdWx0KG1hdGNoLmluZGV4LCBtYXRjaFswXSk7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gTU9OVEhfRElDVElPTkFSWVttYXRjaFtNT05USF9OQU1FX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgY29uc3QgZGF5ID0gcGFyc2VJbnQobWF0Y2hbREFURV9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEpIHtcbiAgICAgICAgICAgIG1hdGNoLmluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFtEQVRFX0dST1VQXS5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiZGF5XCIsIGRheSk7XG4gICAgICAgIGlmIChtYXRjaFtZRUFSX0dST1VQXSkge1xuICAgICAgICAgICAgY29uc3QgeWVhck51bWJlciA9IHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwieWVhclwiLCB5ZWFyTnVtYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHllYXIgPSBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpO1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCB5ZWFyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbREFURV9UT19HUk9VUF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGUgPSBwYXJzZUludChtYXRjaFtEQVRFX1RPX0dST1VQXSk7XG4gICAgICAgICAgICByZXN1bHQuZW5kID0gcmVzdWx0LnN0YXJ0LmNsb25lKCk7XG4gICAgICAgICAgICByZXN1bHQuZW5kLmFzc2lnbihcImRheVwiLCBlbmREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFRJTUVfVU5JVFNfUEFUVEVSTiwgcGFyc2VEdXJhdGlvbiwgVElNRV9VTklUU19OT19BQkJSX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChzZXVyYWF2YXxzZXVyYWF2YXR8c2V1cmFhdmllbnxlZGVsbGluZW58ZWRlbGxpc2V0fGVkZWxsaXN0ZW58dmlpbWVpc2V0fHZpaW1laXN0ZW58a3VsdW5lZXR8a3VsdW5laWRlbnxcXFxcK3wtKVxcXFxzKigke1RJTUVfVU5JVFNfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBQQVRURVJOX05PX0FCQlIgPSBuZXcgUmVnRXhwKGAoc2V1cmFhdmF8c2V1cmFhdmF0fHNldXJhYXZpZW58ZWRlbGxpbmVufGVkZWxsaXNldHxlZGVsbGlzdGVufHZpaW1laXNldHx2aWltZWlzdGVufGt1bHVuZWV0fGt1bHVuZWlkZW58XFxcXCt8LSlcXFxccyooJHtUSU1FX1VOSVRTX05PX0FCQlJfUEFUVEVSTn0pKD89XFxcXFd8JClgLCBcImlcIik7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgYWxsb3dBYmJyZXZpYXRpb25zO1xuICAgIGNvbnN0cnVjdG9yKGFsbG93QWJicmV2aWF0aW9ucyA9IHRydWUpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbGxvd0FiYnJldmlhdGlvbnMgPSBhbGxvd0FiYnJldmlhdGlvbnM7XG4gICAgfVxuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dBYmJyZXZpYXRpb25zID8gUEFUVEVSTiA6IFBBVFRFUk5fTk9fQUJCUjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb24obWF0Y2hbMl0pO1xuICAgICAgICBpZiAoIWR1cmF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHByZWZpeCkge1xuICAgICAgICAgICAgY2FzZSBcImVkZWxsaW5lblwiOlxuICAgICAgICAgICAgY2FzZSBcImVkZWxsaXNldFwiOlxuICAgICAgICAgICAgY2FzZSBcImVkZWxsaXN0ZW5cIjpcbiAgICAgICAgICAgIGNhc2UgXCJ2aWltZWlzZXRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJ2aWltZWlzdGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwia3VsdW5lZXRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJrdWx1bmVpZGVuXCI6XG4gICAgICAgICAgICBjYXNlIFwiLVwiOlxuICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBkdXJhdGlvbik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCgke1RJTUVfVU5JVFNfUEFUVEVSTn0pXFxcXHMqc2l0dGVuKD89XFxcXFd8JClgLCBcImlcIik7XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCB0aW1lVW5pdHMgPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3Qgb3V0cHV0VGltZVVuaXRzID0gcmV2ZXJzZUR1cmF0aW9uKHRpbWVVbml0cyk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIG91dHB1dFRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRTX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZJVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgKCR7VElNRV9VTklUU19QQVRURVJOfSlcXFxccyooPzpzaXPDpGxsw6R8a3VsdWVzc2F8cMOkw6RzdMOkKSg/PVxcXFxXfCQpYCwgXCJpXCIpO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSUNhc3VhbFRpbWVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIC8odMOkbsOkXFxzKik/KGFhbXVsbGF8YWFtdW5hfGFhbXVww6RpdsOkbGzDpHxww6RpdsOkbGzDpHxpbHRhcMOkaXbDpGxsw6R8aWxsYWxsYXx5w7ZsbMOkfGtlc2tpecO2bGzDpCkoPz1cXFd8JCkvaTtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZkRhdGU7XG4gICAgICAgIGNvbnN0IHRpbWVLZXl3b3JkUGF0dGVybiA9IG1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgaW1wbHlTaW1pbGFyVGltZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICByZXR1cm4gRklDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIHRpbWVLZXl3b3JkUGF0dGVybik7XG4gICAgfVxuICAgIHN0YXRpYyBleHRyYWN0VGltZUNvbXBvbmVudHMoY29tcG9uZW50LCB0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgc3dpdGNoICh0aW1lS2V5d29yZFBhdHRlcm4pIHtcbiAgICAgICAgICAgIGNhc2UgXCJhYW11bGxhXCI6XG4gICAgICAgICAgICBjYXNlIFwiYWFtdW5hXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA2KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJhYW11cMOkaXbDpGxsw6RcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDkpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInDDpGl2w6RsbMOkXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxMik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWx0YXDDpGl2w6RsbMOkXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWxsYWxsYVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMTgpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJzZWNvbmRcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInnDtmxsw6RcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDIyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJrZXNraXnDtmxsw6RcIjpcbiAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmdldChcImhvdXJcIikgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5hZGREdXJhdGlvbkFzSW1wbGllZCh7IFwiZGF5XCI6IDEgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcInNlY29uZFwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5BTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1GSUNhc3VhbFRpbWVQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBhc3NpZ25TaW1pbGFyRGF0ZSwgaW1wbHlTaW1pbGFyVGltZSB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9kYXRlcy5qc1wiO1xuaW1wb3J0IEZJQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9GSUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCAqIGFzIHJlZmVyZW5jZXMgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9jYXN1YWxSZWZlcmVuY2VzLmpzXCI7XG5pbXBvcnQgeyBhZGREdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoYChueXR8dMOkbsOkw6RufGh1b21lbm5hfHlsaWh1b21lbm5hfGVpbGVufHRvaXNzYXDDpGl2w6Ruw6R8dmlpbWVcXFxccyp5w7Zuw6QpYCArXG4gICAgYCg/OlxcXFxzKihhYW11bGxhfGFhbXVuYXxhYW11cMOkaXbDpGxsw6R8cMOkaXbDpGxsw6R8aWx0YXDDpGl2w6RsbMOkfGlsbGFsbGF8ecO2bGzDpHxrZXNraXnDtmxsw6QpKT9gICtcbiAgICBgKD89XFxcXFd8JClgLCBcImlcIik7XG5jb25zdCBEQVRFX0dST1VQID0gMTtcbmNvbnN0IFRJTUVfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRklDYXN1YWxEYXRlUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybihjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHRhcmdldERhdGUgPSBjb250ZXh0LnJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKTtcbiAgICAgICAgY29uc3QgZGF0ZUtleXdvcmQgPSAobWF0Y2hbREFURV9HUk9VUF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdGltZUtleXdvcmQgPSAobWF0Y2hbVElNRV9HUk9VUF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGNvbXBvbmVudCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ0NvbXBvbmVudHMoKTtcbiAgICAgICAgc3dpdGNoIChkYXRlS2V5d29yZCkge1xuICAgICAgICAgICAgY2FzZSBcIm55dFwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHJlZmVyZW5jZXMubm93KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0w6Ruw6TDpG5cIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgPSByZWZlcmVuY2VzLnRvZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJodW9tZW5uYVwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogMSB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ5bGlodW9tZW5uYVwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogMiB9KTtcbiAgICAgICAgICAgICAgICBhc3NpZ25TaW1pbGFyRGF0ZShjb21wb25lbnQsIHRhcmdldERhdGUpO1xuICAgICAgICAgICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJlaWxlblwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTEgfSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidG9pc3NhcMOkaXbDpG7DpFwiOlxuICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTIgfSk7XG4gICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICBpbXBseVNpbWlsYXJUaW1lKGNvbXBvbmVudCwgdGFyZ2V0RGF0ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChkYXRlS2V5d29yZC5tYXRjaCgvdmlpbWVcXHMqecO2bsOkLykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldERhdGUuZ2V0SG91cnMoKSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldERhdGUgPSBhZGREdXJhdGlvbih0YXJnZXREYXRlLCB7IGRheTogLTEgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXNzaWduU2ltaWxhckRhdGUoY29tcG9uZW50LCB0YXJnZXREYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVLZXl3b3JkKSB7XG4gICAgICAgICAgICBjb21wb25lbnQgPSBGSUNhc3VhbFRpbWVQYXJzZXIuZXh0cmFjdFRpbWVDb21wb25lbnRzKGNvbXBvbmVudCwgdGltZUtleXdvcmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wb25lbnQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RklDYXN1YWxEYXRlUGFyc2VyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGSU1lcmdlRGF0ZVJhbmdlUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKigtfOKAkylcXHMqJC9pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzLm1hcCIsImltcG9ydCBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIGZyb20gXCIuLi8uLi8uLi9jb21tb24vcmVmaW5lcnMvQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRklNZXJnZURhdGVUaW1lUmVmaW5lciBleHRlbmRzIEFic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIge1xuICAgIHBhdHRlcm5CZXR3ZWVuKCkge1xuICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIl5cXFxccyooVHxrbG98a2VsbG98LHwtKT9cXFxccyokXCIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IHsgaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vLi4vY29uZmlndXJhdGlvbnMuanNcIjtcbmltcG9ydCB7IENocm9ubyB9IGZyb20gXCIuLi8uLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi4vLi4vcmVzdWx0cy5qc1wiO1xuaW1wb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCBTbGFzaERhdGVGb3JtYXRQYXJzZXIgZnJvbSBcIi4uLy4uL2NvbW1vbi9wYXJzZXJzL1NsYXNoRGF0ZUZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRklUaW1lRXhwcmVzc2lvblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJVGltZUV4cHJlc3Npb25QYXJzZXIuanNcIjtcbmltcG9ydCBGSVdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9GSVdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBGSU1vbnRoTmFtZUxpdHRsZUVuZGlhblBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyLmpzXCI7XG5pbXBvcnQgRklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgRklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBGSVRpbWVVbml0V2l0aGluRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qc1wiO1xuaW1wb3J0IEZJQ2FzdWFsRGF0ZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJQ2FzdWFsRGF0ZVBhcnNlci5qc1wiO1xuaW1wb3J0IEZJQ2FzdWFsVGltZVBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL0ZJQ2FzdWFsVGltZVBhcnNlci5qc1wiO1xuaW1wb3J0IEZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyIGZyb20gXCIuL3JlZmluZXJzL0ZJTWVyZ2VEYXRlUmFuZ2VSZWZpbmVyLmpzXCI7XG5pbXBvcnQgRklNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9GSU1lcmdlRGF0ZVRpbWVSZWZpbmVyLmpzXCI7XG5leHBvcnQgeyBDaHJvbm8sIFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfTtcbmV4cG9ydCB7IE1lcmlkaWVtLCBXZWVrZGF5IH07XG5leHBvcnQgY29uc3QgY2FzdWFsID0gbmV3IENocm9ubyhjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKCkpO1xuZXhwb3J0IGNvbnN0IHN0cmljdCA9IG5ldyBDaHJvbm8oY3JlYXRlQ29uZmlndXJhdGlvbih0cnVlKSk7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2UodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZURhdGUodGV4dCwgcmVmLCBvcHRpb24pIHtcbiAgICByZXR1cm4gY2FzdWFsLnBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbik7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihsaXR0bGVFbmRpYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgb3B0aW9uID0gY3JlYXRlQ29uZmlndXJhdGlvbihmYWxzZSwgbGl0dGxlRW5kaWFuKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBGSUNhc3VhbFRpbWVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgRklDYXN1YWxEYXRlUGFyc2VyKCkpO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IEZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlcigpKTtcbiAgICByZXR1cm4gb3B0aW9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ3VyYXRpb24oc3RyaWN0TW9kZSA9IHRydWUsIGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICByZXR1cm4gaW5jbHVkZUNvbW1vbkNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwYXJzZXJzOiBbXG4gICAgICAgICAgICBuZXcgSVNPRm9ybWF0UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgU2xhc2hEYXRlRm9ybWF0UGFyc2VyKGxpdHRsZUVuZGlhbiksXG4gICAgICAgICAgICBuZXcgRklUaW1lRXhwcmVzc2lvblBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZJTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRklXZWVrZGF5UGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgRklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcigpLFxuICAgICAgICAgICAgbmV3IEZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtuZXcgRklNZXJnZURhdGVSYW5nZVJlZmluZXIoKSwgbmV3IEZJTWVyZ2VEYXRlVGltZVJlZmluZXIoKV0sXG4gICAgfSwgc3RyaWN0TW9kZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4sIHJlcGVhdGVkVGltZXVuaXRQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmltcG9ydCB7IGZpbmRNb3N0TGlrZWx5QURZZWFyIH0gZnJvbSBcIi4uLy4uL2NhbGN1bGF0aW9uL3llYXJzLmpzXCI7XG5leHBvcnQgY29uc3QgV0VFS0RBWV9ESUNUSU9OQVJZID0ge1xuICAgIFwiY2hcXHUxZWU3IG5oXFx1MWVhZHRcIjogMCxcbiAgICBcImNuXCI6IDAsXG4gICAgXCJ0aFxcdTFlZTkgaGFpXCI6IDEsXG4gICAgXCJ0MlwiOiAxLFxuICAgIFwidGhcXHUxZWU5IGJhXCI6IDIsXG4gICAgXCJ0M1wiOiAyLFxuICAgIFwidGhcXHUxZWU5IHRcXHUwMWIwXCI6IDMsXG4gICAgXCJ0NFwiOiAzLFxuICAgIFwidGhcXHUxZWU5IG5cXHUwMTAzbVwiOiA0LFxuICAgIFwidDVcIjogNCxcbiAgICBcInRoXFx1MWVlOSBzXFx1MDBlMXVcIjogNSxcbiAgICBcInQ2XCI6IDUsXG4gICAgXCJ0aFxcdTFlZTkgYlxcdTFlYTN5XCI6IDYsXG4gICAgXCJ0N1wiOiA2LFxufTtcbmV4cG9ydCBjb25zdCBNT05USF9ESUNUSU9OQVJZID0ge1xuICAgIFwidGhcXHUwMGUxbmcgMVwiOiAxLFxuICAgIFwidGhcXHUwMGUxbmcgbVxcdTFlZDl0XCI6IDEsXG4gICAgXCJ0aFxcdTAwZTFuZyBnaVxcdTAwZWFuZ1wiOiAxLFxuICAgIFwidGhcXHUwMGUxbmcgMlwiOiAyLFxuICAgIFwidGhcXHUwMGUxbmcgaGFpXCI6IDIsXG4gICAgXCJ0aFxcdTAwZTFuZyAzXCI6IDMsXG4gICAgXCJ0aFxcdTAwZTFuZyBiYVwiOiAzLFxuICAgIFwidGhcXHUwMGUxbmcgNFwiOiA0LFxuICAgIFwidGhcXHUwMGUxbmcgdFxcdTAxYjBcIjogNCxcbiAgICBcInRoXFx1MDBlMW5nIDVcIjogNSxcbiAgICBcInRoXFx1MDBlMW5nIG5cXHUwMTAzbVwiOiA1LFxuICAgIFwidGhcXHUwMGUxbmcgNlwiOiA2LFxuICAgIFwidGhcXHUwMGUxbmcgc1xcdTAwZTF1XCI6IDYsXG4gICAgXCJ0aFxcdTAwZTFuZyA3XCI6IDcsXG4gICAgXCJ0aFxcdTAwZTFuZyBiXFx1MWVhM3lcIjogNyxcbiAgICBcInRoXFx1MDBlMW5nIDhcIjogOCxcbiAgICBcInRoXFx1MDBlMW5nIHRcXHUwMGUxbVwiOiA4LFxuICAgIFwidGhcXHUwMGUxbmcgOVwiOiA5LFxuICAgIFwidGhcXHUwMGUxbmcgY2hcXHUwMGVkblwiOiA5LFxuICAgIFwidGhcXHUwMGUxbmcgMTBcIjogMTAsXG4gICAgXCJ0aFxcdTAwZTFuZyBtXFx1MDFiMFxcdTFlZGRpXCI6IDEwLFxuICAgIFwidGhcXHUwMGUxbmcgMTFcIjogMTEsXG4gICAgXCJ0aFxcdTAwZTFuZyBtXFx1MDFiMFxcdTFlZGRpIG1cXHUxZWQ5dFwiOiAxMSxcbiAgICBcInRoXFx1MDBlMW5nIDEyXCI6IDEyLFxuICAgIFwidGhcXHUwMGUxbmcgbVxcdTAxYjBcXHUxZWRkaSBoYWlcIjogMTIsXG4gICAgXCJ0aFxcdTAwZTFuZyBjaFxcdTFlYTFwXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBJTlRFR0VSX1dPUkRfRElDVElPTkFSWSA9IHtcbiAgICBcIm1cXHUxZWQ5dFwiOiAxLFxuICAgIFwiaGFpXCI6IDIsXG4gICAgXCJiYVwiOiAzLFxuICAgIFwiYlxcdTFlZDFuXCI6IDQsXG4gICAgXCJuXFx1MDEwM21cIjogNSxcbiAgICBcInNcXHUwMGUxdVwiOiA2LFxuICAgIFwiYlxcdTFlYTN5XCI6IDcsXG4gICAgXCJ0XFx1MDBlMW1cIjogOCxcbiAgICBcImNoXFx1MDBlZG5cIjogOSxcbiAgICBcIm1cXHUwMWIwXFx1MWVkZGlcIjogMTAsXG4gICAgXCJtXFx1MDFiMFxcdTFlZGRpIG1cXHUxZWQ5dFwiOiAxMSxcbiAgICBcIm1cXHUwMWIwXFx1MWVkZGkgaGFpXCI6IDEyLFxufTtcbmV4cG9ydCBjb25zdCBUSU1FX1VOSVRfRElDVElPTkFSWSA9IHtcbiAgICBcImdpXFx1MDBlMnlcIjogXCJzZWNvbmRcIixcbiAgICBcInBoXFx1MDBmYXRcIjogXCJtaW51dGVcIixcbiAgICBcImdpXFx1MWVkZFwiOiBcImhvdXJcIixcbiAgICBcIm5nXFx1MDBlMHlcIjogXCJkYXlcIixcbiAgICBcInR1XFx1MWVhN25cIjogXCJ3ZWVrXCIsXG4gICAgXCJ0aFxcdTAwZTFuZ1wiOiBcIm1vbnRoXCIsXG4gICAgXCJuXFx1MDEwM21cIjogXCJ5ZWFyXCIsXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUl9QQVRURVJOID0gXCIoPzpcIiArIG1hdGNoQW55UGF0dGVybihJTlRFR0VSX1dPUkRfRElDVElPTkFSWSkgKyBcInxbMC05XSt8WzAtOV0rXFxcXC5bMC05XSspXCI7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoKSB7XG4gICAgY29uc3QgbnVtID0gbWF0Y2gudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gSU5URUdFUl9XT1JEX0RJQ1RJT05BUllbbnVtXTtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW0pO1xufVxuZXhwb3J0IGNvbnN0IFlFQVJfUEFUVEVSTiA9IFwiKD86WzAtOV17MSw0fSg/OlxcXFxzKlRDTik/KVwiO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlWWVhcihtYXRjaCkge1xuICAgIGNvbnN0IHVwcGVyID0gbWF0Y2gudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBudW0gPSBwYXJzZUludChtYXRjaC5yZXBsYWNlKC9bXjAtOV0rL2csIFwiXCIpKTtcbiAgICBpZiAoL1RDTi8udGVzdCh1cHBlcikpXG4gICAgICAgIHJldHVybiAtbnVtO1xuICAgIHJldHVybiBmaW5kTW9zdExpa2VseUFEWWVhcihudW0pO1xufVxuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOID0gXCIoXCIgKyBOVU1CRVJfUEFUVEVSTiArIFwiKVxcXFxzezAsNX0oXCIgKyBtYXRjaEFueVBhdHRlcm4oVElNRV9VTklUX0RJQ1RJT05BUlkpICsgXCIpXFxcXHN7MCw1fVwiO1xuY29uc3QgU0lOR0xFX1RJTUVfVU5JVF9SRUdFWCA9IG5ldyBSZWdFeHAoU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOLCBcImlcIik7XG5leHBvcnQgY29uc3QgVElNRV9VTklUU19QQVRURVJOID0gcmVwZWF0ZWRUaW1ldW5pdFBhdHRlcm4oXCJcIiwgU0lOR0xFX1RJTUVfVU5JVF9QQVRURVJOKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uKHRpbWV1bml0VGV4dCkge1xuICAgIGNvbnN0IGZyYWdtZW50cyA9IHt9O1xuICAgIGxldCByZW1haW5pbmdUZXh0ID0gdGltZXVuaXRUZXh0O1xuICAgIGxldCBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB3aGlsZSAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbnVtID0gcGFyc2VOdW1iZXJQYXR0ZXJuKG1hdGNoWzFdKTtcbiAgICAgICAgY29uc3QgdW5pdCA9IFRJTUVfVU5JVF9ESUNUSU9OQVJZW21hdGNoWzJdLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICBmcmFnbWVudHNbdW5pdF0gPSBudW07XG4gICAgICAgIHJlbWFpbmluZ1RleHQgPSByZW1haW5pbmdUZXh0LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICBtYXRjaCA9IFNJTkdMRV9USU1FX1VOSVRfUkVHRVguZXhlYyhyZW1haW5pbmdUZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGZyYWdtZW50cztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiLCJpbXBvcnQgeyBmaW5kWWVhckNsb3Nlc3RUb1JlZiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi95ZWFycy5qc1wiO1xuaW1wb3J0IHsgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKD86bmdcXHUwMGUweVxcXFxzKik/XCIgK1xuICAgIFwiKFswLTldezEsMn0pXCIgK1xuICAgIFwiXFxcXHMqdGhcXHUwMGUxbmdcXFxccypcIiArXG4gICAgXCIoWzAtOV17MSwyfSlcIiArXG4gICAgXCIoPzpcXFxccypuXFx1MDEwM21cXFxccyooXCIgK1xuICAgIFlFQVJfUEFUVEVSTiArXG4gICAgXCIpKT9cIiArXG4gICAgXCIoPz1cXFxcV3wkKVwiLCBcImlcIik7XG5jb25zdCBEQVlfR1JPVVAgPSAxO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAyO1xuY29uc3QgWUVBUl9HUk9VUCA9IDM7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSVN0YW5kYXJkUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkYXkgPSBwYXJzZUludChtYXRjaFtEQVlfR1JPVVBdKTtcbiAgICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludChtYXRjaFtNT05USF9HUk9VUF0pO1xuICAgICAgICBpZiAoZGF5ID4gMzEgfHwgbW9udGggPiAxMilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcImRheVwiLCBkYXkpO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibW9udGhcIiwgbW9udGgpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBmaW5kWWVhckNsb3Nlc3RUb1JlZihjb250ZXh0LnJlZkRhdGUsIGRheSwgbW9udGgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJU3RhbmRhcmRQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgTU9OVEhfRElDVElPTkFSWSwgWUVBUl9QQVRURVJOLCBwYXJzZVllYXIgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcIiArIG1hdGNoQW55UGF0dGVybihNT05USF9ESUNUSU9OQVJZKSArIFwiKVwiICsgXCIoPzpcXFxccyooPzpuxINtfC8pXFxcXHMqKFwiICsgWUVBUl9QQVRURVJOICsgXCIpKT9cIiArIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgTU9OVEhfR1JPVVAgPSAxO1xuY29uc3QgWUVBUl9HUk9VUCA9IDI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSU1vbnRoWWVhclBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9udGggPSBNT05USF9ESUNUSU9OQVJZW21hdGNoW01PTlRIX0dST1VQXS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgaWYgKCFtb250aClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcIm1vbnRoXCIsIG1vbnRoKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwiZGF5XCIsIDEpO1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9HUk9VUF0pIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJ5ZWFyXCIsIHBhcnNlWWVhcihtYXRjaFtZRUFSX0dST1VQXSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwieWVhclwiLCBjb250ZXh0LnJlZmVyZW5jZS5nZXREYXRlV2l0aEFkanVzdGVkVGltZXpvbmUoKS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTW9udGhZZWFyUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IFlFQVJfUEFUVEVSTiwgcGFyc2VZZWFyIH0gZnJvbSBcIi4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIig/OlxcXFxibsSDbVxcXFxzKihcIiArIFlFQVJfUEFUVEVSTiArIFwiKXxcXFxcYihbMC05XXsxLDR9KVxcXFxzKihUQ04pKSg/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFlFQVJfV0lUSF9OQU1fR1JPVVAgPSAxO1xuY29uc3QgQkFSRV9CQ19ZRUFSX0dST1VQID0gMjtcbmNvbnN0IEJBUkVfQkNfU1VGRklYX0dST1VQID0gMztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJWWVhclBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgbGV0IHllYXJUZXh0O1xuICAgICAgICBpZiAobWF0Y2hbWUVBUl9XSVRIX05BTV9HUk9VUF0pIHtcbiAgICAgICAgICAgIHllYXJUZXh0ID0gbWF0Y2hbWUVBUl9XSVRIX05BTV9HUk9VUF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB5ZWFyVGV4dCA9IG1hdGNoW0JBUkVfQkNfWUVBUl9HUk9VUF0gKyBcIiBcIiArIG1hdGNoW0JBUkVfQkNfU1VGRklYX0dST1VQXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdSZXN1bHQobWF0Y2guaW5kZXgsIG1hdGNoWzBdKTtcbiAgICAgICAgcmVzdWx0LnN0YXJ0LmFzc2lnbihcInllYXJcIiwgcGFyc2VZZWFyKHllYXJUZXh0KSk7XG4gICAgICAgIHJlc3VsdC5zdGFydC5pbXBseShcIm1vbnRoXCIsIDEpO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJkYXlcIiwgMSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklZZWFyUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0ICogYXMgcmVmZXJlbmNlcyBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL2Nhc3VhbFJlZmVyZW5jZXMuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSAvXFxiKGjDtG0gbmF5fGjDtG0gcXVhfGjDtG0ga2lhfG5nw6B5IG1haXxuZ8OgeSBraWF8YsOieSBnaeG7nXxsw7pjIG7DoHkpKD89XFxXfCQpL2k7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSUNhc3VhbERhdGVQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2hbMV0udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBcImLDonkgZ2nhu51cIjpcbiAgICAgICAgICAgIGNhc2UgXCJsw7pjIG7DoHlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVmZXJlbmNlcy5ub3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcImjDtG0gbmF5XCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9kYXkoY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcImjDtG0gcXVhXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMueWVzdGVyZGF5KGNvbnRleHQucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIGNhc2UgXCJow7RtIGtpYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUJlZm9yZShjb250ZXh0LnJlZmVyZW5jZSwgMik7XG4gICAgICAgICAgICBjYXNlIFwibmfDoHkgbWFpXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZXMudG9tb3Jyb3coY29udGV4dC5yZWZlcmVuY2UpO1xuICAgICAgICAgICAgY2FzZSBcIm5nw6B5IGtpYVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiByZWZlcmVuY2VzLnRoZURheUFmdGVyKGNvbnRleHQucmVmZXJlbmNlLCAyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVQYXJzaW5nQ29tcG9uZW50cygpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJQ2FzdWFsRGF0ZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBpbXBseVNpbWlsYXJUaW1lIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2RhdGVzLmpzXCI7XG5jb25zdCBQQVRURVJOID0gLyhideG7lWlcXHMqKT8oc8Ohbmcgc+G7m218c8Ohbmd8dHLGsGF8Y2hp4buBdXx04buRaXzEkcOqbXxu4butYSDEkcOqbXxiw6xuaCBtaW5oKSg/PVxcV3wkKS9pO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklDYXN1YWxUaW1lUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBjb250ZXh0LmNyZWF0ZVBhcnNpbmdDb21wb25lbnRzKCk7XG4gICAgICAgIGltcGx5U2ltaWxhclRpbWUoY29tcG9uZW50LCBjb250ZXh0LnJlZkRhdGUpO1xuICAgICAgICByZXR1cm4gVklDYXN1YWxUaW1lUGFyc2VyLmV4dHJhY3RUaW1lQ29tcG9uZW50cyhjb21wb25lbnQsIG1hdGNoWzJdLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgICBzdGF0aWMgZXh0cmFjdFRpbWVDb21wb25lbnRzKGNvbXBvbmVudCwga2V5d29yZCkge1xuICAgICAgICBzd2l0Y2ggKGtleXdvcmQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJiXFx1MDBlY25oIG1pbmhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJzXFx1MDBlMW5nIHNcXHUxZWRibVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgNik7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzXFx1MDBlMW5nXCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCA5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRyXFx1MDFiMGFcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDEyKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImNoaVxcdTFlYzF1XCI6XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwiaG91clwiLCAxNSk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLlBNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ0XFx1MWVkMWlcIjpcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJob3VyXCIsIDE5KTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtaW51dGVcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIlxcdTAxMTFcXHUwMGVhbVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMjIpO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1pbnV0ZVwiLCAwKTtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuaW1wbHkoXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiblxcdTFlZWRhIFxcdTAxMTFcXHUwMGVhbVwiOlxuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcImhvdXJcIiwgMCk7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmltcGx5KFwibWludXRlXCIsIDApO1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5pbXBseShcIm1lcmlkaWVtXCIsIE1lcmlkaWVtLkFNKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcG9uZW50O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJQ2FzdWFsVGltZVBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBXRUVLREFZX0RJQ1RJT05BUlkgfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBtYXRjaEFueVBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzaW5nQ29tcG9uZW50c0F0V2Vla2RheSB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi93ZWVrZGF5cy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoXCIgK1xuICAgIG1hdGNoQW55UGF0dGVybihXRUVLREFZX0RJQ1RJT05BUlkpICtcbiAgICBcIilcIiArXG4gICAgXCIoPzpcXFxccyoobsOgeXx04bubaXxzYXUoPyFcXFxccypraGkpfHF1YSkpP1wiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmNvbnN0IFdFRUtEQVlfR1JPVVAgPSAxO1xuY29uc3QgTU9ESUZJRVJfR1JPVVAgPSAyO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklXZWVrZGF5UGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBkb3dUZXh0ID0gbWF0Y2hbV0VFS0RBWV9HUk9VUF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgZG93ID0gV0VFS0RBWV9ESUNUSU9OQVJZW2Rvd1RleHRdO1xuICAgICAgICBpZiAoZG93ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBtYXRjaFtNT0RJRklFUl9HUk9VUF07XG4gICAgICAgIGxldCBtb2RpZmllclR5cGUgPSBudWxsO1xuICAgICAgICBpZiAobW9kaWZpZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBtb2RpZmllci50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKG0uaW5jbHVkZXMoXCJ04bubaVwiKSB8fCBtLmluY2x1ZGVzKFwic2F1XCIpKVxuICAgICAgICAgICAgICAgIG1vZGlmaWVyVHlwZSA9IFwibmV4dFwiO1xuICAgICAgICAgICAgZWxzZSBpZiAobS5pbmNsdWRlcyhcInF1YVwiKSlcbiAgICAgICAgICAgICAgICBtb2RpZmllclR5cGUgPSBcImxhc3RcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlUGFyc2luZ0NvbXBvbmVudHNBdFdlZWtkYXkoY29udGV4dC5yZWZlcmVuY2UsIGRvdywgbW9kaWZpZXJUeXBlKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSVdlZWtkYXlQYXJzZXIuanMubWFwIiwiaW1wb3J0IHsgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcgfSBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3BhcnNlcnMvQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5LmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSB9IGZyb20gXCIuLi8uLi8uLi90eXBlcy5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzpsXFx1MDBmYWNcXFxccyp8dlxcdTAwZTBvXFxcXHMqKT9cIiArXG4gICAgXCIoWzAtOV17MSwyfSlcIiArXG4gICAgXCIoPzpcXFxccypnaVxcdTFlZGRcXFxccyooWzAtOV17MSwyfSk/XFxcXHMqKD86cGhcXHUwMGZhdFxcXFxzKik/XCIgK1xuICAgIFwiKHNcXHUwMGUxbmd8dHJcXHUwMWIwYXxjaGlcXHUxZWMxdXx0XFx1MWVkMWl8XFx1MDExMVxcdTAwZWFtKT9cIiArXG4gICAgXCJ8OihbMC05XXsyfSkpXCIgK1xuICAgIFwiKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuY29uc3QgSE9VUl9HUk9VUCA9IDE7XG5jb25zdCBNSU5VVEVfR0lPX0dST1VQID0gMjtcbmNvbnN0IE1FUklESUVNX0dST1VQID0gMztcbmNvbnN0IE1JTlVURV9DT0xPTl9HUk9VUCA9IDQ7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSVRpbWVFeHByZXNzaW9uUGFyc2VyIGV4dGVuZHMgQWJzdHJhY3RQYXJzZXJXaXRoV29yZEJvdW5kYXJ5Q2hlY2tpbmcge1xuICAgIGlubmVyUGF0dGVybigpIHtcbiAgICAgICAgcmV0dXJuIFBBVFRFUk47XG4gICAgfVxuICAgIGlubmVyRXh0cmFjdChjb250ZXh0LCBtYXRjaCkge1xuICAgICAgICBjb25zdCBob3VyID0gcGFyc2VJbnQobWF0Y2hbSE9VUl9HUk9VUF0pO1xuICAgICAgICBpZiAoaG91ciA+IDIzKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNvbnRleHQuY3JlYXRlUGFyc2luZ1Jlc3VsdChtYXRjaC5pbmRleCwgbWF0Y2hbMF0pO1xuICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwiaG91clwiLCBob3VyKTtcbiAgICAgICAgY29uc3QgbWludXRlID0gbWF0Y2hbTUlOVVRFX0NPTE9OX0dST1VQXVxuICAgICAgICAgICAgPyBwYXJzZUludChtYXRjaFtNSU5VVEVfQ09MT05fR1JPVVBdKVxuICAgICAgICAgICAgOiBtYXRjaFtNSU5VVEVfR0lPX0dST1VQXVxuICAgICAgICAgICAgICAgID8gcGFyc2VJbnQobWF0Y2hbTUlOVVRFX0dJT19HUk9VUF0pXG4gICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICBpZiAobWludXRlID49IDYwKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtaW51dGVcIiwgbWludXRlKTtcbiAgICAgICAgY29uc3QgbWVyaWRpZW0gPSBtYXRjaFtNRVJJRElFTV9HUk9VUF0/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChtZXJpZGllbSA9PT0gXCJzw6FuZ1wiKSB7XG4gICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDEyKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1lcmlkaWVtID09PSBcInRyxrBhXCIpIHtcbiAgICAgICAgICAgIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgTWVyaWRpZW0uUE0pO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIgKyAxMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuc3RhcnQuYXNzaWduKFwibWVyaWRpZW1cIiwgaG91ciA+PSAxMiA/IE1lcmlkaWVtLlBNIDogTWVyaWRpZW0uQU0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1lcmlkaWVtID09PSBcImNoaeG7gXVcIiB8fCBtZXJpZGllbSA9PT0gXCJ04buRaVwiIHx8IG1lcmlkaWVtID09PSBcIsSRw6ptXCIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJtZXJpZGllbVwiLCBNZXJpZGllbS5QTSk7XG4gICAgICAgICAgICBpZiAoaG91ciA8IDEyKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5zdGFydC5hc3NpZ24oXCJob3VyXCIsIGhvdXIgKyAxMik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnN0YXJ0LmltcGx5KFwic2Vjb25kXCIsIDApO1xuICAgICAgICByZXN1bHQuc3RhcnQuaW1wbHkoXCJtaWxsaXNlY29uZFwiLCAwKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSVRpbWVFeHByZXNzaW9uUGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuaW1wb3J0IHsgcmV2ZXJzZUR1cmF0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2NhbGN1bGF0aW9uL2R1cmF0aW9uLmpzXCI7XG5jb25zdCBQQVRURVJOID0gbmV3IFJlZ0V4cChcIihcIiArIFRJTUVfVU5JVFNfUEFUVEVSTiArIFwiKVwiICsgXCJcXFxcc3swLDV9KD86dHJcXHUwMWIwXFx1MWVkYmN8cXVhKSg/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZXh0ZW5kcyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB7XG4gICAgc3RyaWN0TW9kZTtcbiAgICBjb25zdHJ1Y3RvcihzdHJpY3RNb2RlID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zdHJpY3RNb2RlID0gc3RyaWN0TW9kZTtcbiAgICB9XG4gICAgaW5uZXJQYXR0ZXJuKCkge1xuICAgICAgICByZXR1cm4gUEFUVEVSTjtcbiAgICB9XG4gICAgaW5uZXJFeHRyYWN0KGNvbnRleHQsIG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghZHVyYXRpb24pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgcmV2ZXJzZUR1cmF0aW9uKGR1cmF0aW9uKSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBwYXJzZUR1cmF0aW9uLCBUSU1FX1VOSVRTX1BBVFRFUk4gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmNvbnN0IFBBVFRFUk4gPSBuZXcgUmVnRXhwKFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpXCIgKyBcIlxcXFxzezAsNX0oPzpzYXV8blxcdTFlZWZhfHRcXHUxZWRiaXx0aVxcdTFlYmZwKSg/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZVVuaXRMYXRlckZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uKG1hdGNoWzFdKTtcbiAgICAgICAgaWYgKCFkdXJhdGlvbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gUGFyc2luZ0NvbXBvbmVudHMuY3JlYXRlUmVsYXRpdmVGcm9tUmVmZXJlbmNlKGNvbnRleHQucmVmZXJlbmNlLCBkdXJhdGlvbik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzLm1hcCIsImltcG9ydCB7IHBhcnNlRHVyYXRpb24sIFRJTUVfVU5JVFNfUEFUVEVSTiB9IGZyb20gXCIuLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IFBhcnNpbmdDb21wb25lbnRzIH0gZnJvbSBcIi4uLy4uLy4uL3Jlc3VsdHMuanNcIjtcbmltcG9ydCB7IEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIH0gZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9wYXJzZXJzL0Fic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeS5qc1wiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIoPzp0cm9uZ1xcXFxzKig/OnZcXHUwMGYybmdcXFxccyopPylcIiArIFwiKFwiICsgVElNRV9VTklUU19QQVRURVJOICsgXCIpKD89XFxcXFd8JClcIiwgXCJpXCIpO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBzdHJpY3RNb2RlO1xuICAgIGNvbnN0cnVjdG9yKHN0cmljdE1vZGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnN0cmljdE1vZGUgPSBzdHJpY3RNb2RlO1xuICAgIH1cbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZVVuaXRzID0gcGFyc2VEdXJhdGlvbihtYXRjaFsxXSk7XG4gICAgICAgIGlmICghdGltZVVuaXRzKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiBQYXJzaW5nQ29tcG9uZW50cy5jcmVhdGVSZWxhdGl2ZUZyb21SZWZlcmVuY2UoY29udGV4dC5yZWZlcmVuY2UsIHRpbWVVbml0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgeyBUSU1FX1VOSVRfRElDVElPTkFSWSwgTlVNQkVSX1BBVFRFUk4sIHBhcnNlRHVyYXRpb24gfSBmcm9tIFwiLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBQYXJzaW5nQ29tcG9uZW50cyB9IGZyb20gXCIuLi8uLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnlDaGVja2luZyB9IGZyb20gXCIuLi8uLi8uLi9jb21tb24vcGFyc2Vycy9BYnN0cmFjdFBhcnNlcldpdGhXb3JkQm91bmRhcnkuanNcIjtcbmltcG9ydCB7IHJldmVyc2VEdXJhdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9jYWxjdWxhdGlvbi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHsgbWF0Y2hBbnlQYXR0ZXJuIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3BhdHRlcm4uanNcIjtcbmNvbnN0IENBU1VBTF9VTklUX1BBVFRFUk4gPSBcIig/OlwiICsgTlVNQkVSX1BBVFRFUk4gKyBcIlxcXFxzezAsNX0pPyg/OlwiICsgbWF0Y2hBbnlQYXR0ZXJuKFRJTUVfVU5JVF9ESUNUSU9OQVJZKSArIFwiKVwiO1xuY29uc3QgUEFUVEVSTiA9IG5ldyBSZWdFeHAoXCIobsOgeXx0csaw4bubY3xxdWF8c2F1fHThu5tpfHRp4bq/cClcXFxccyooXCIgK1xuICAgIENBU1VBTF9VTklUX1BBVFRFUk4gK1xuICAgIFwiKVwiICtcbiAgICBcInwoXCIgK1xuICAgIENBU1VBTF9VTklUX1BBVFRFUk4gK1xuICAgIFwiKVxcXFxzKihuw6B5fHRyxrDhu5tjfHF1YXxzYXV8dOG7m2l8dGnhur9wKVwiICtcbiAgICBcIig/PVxcXFxXfCQpXCIsIFwiaVwiKTtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlciBleHRlbmRzIEFic3RyYWN0UGFyc2VyV2l0aFdvcmRCb3VuZGFyeUNoZWNraW5nIHtcbiAgICBpbm5lclBhdHRlcm4oKSB7XG4gICAgICAgIHJldHVybiBQQVRURVJOO1xuICAgIH1cbiAgICBpbm5lckV4dHJhY3QoY29udGV4dCwgbWF0Y2gpIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSAobWF0Y2hbMV0gfHwgbWF0Y2hbNF0gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgdW5pdFRleHQgPSAobWF0Y2hbMl0gfHwgbWF0Y2hbM10gfHwgXCJcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gcGFyc2VEdXJhdGlvbih1bml0VGV4dCk7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhkdXJhdGlvbikubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCB1bml0ID0gVElNRV9VTklUX0RJQ1RJT05BUllbdW5pdFRleHRdO1xuICAgICAgICAgICAgaWYgKCF1bml0KVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7IFt1bml0XTogMSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChtb2RpZmllciA9PT0gXCJ0csaw4bubY1wiIHx8IG1vZGlmaWVyID09PSBcInF1YVwiKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHJldmVyc2VEdXJhdGlvbihkdXJhdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFBhcnNpbmdDb21wb25lbnRzLmNyZWF0ZVJlbGF0aXZlRnJvbVJlZmVyZW5jZShjb250ZXh0LnJlZmVyZW5jZSwgZHVyYXRpb24pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJVGltZVVuaXRDYXN1YWxSZWxhdGl2ZUZvcm1hdFBhcnNlci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVSYW5nZVJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9BYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVklNZXJnZURhdGVSYW5nZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVJhbmdlUmVmaW5lciB7XG4gICAgcGF0dGVybkJldHdlZW4oKSB7XG4gICAgICAgIHJldHVybiAvXlxccyooPzrigJN8LXzEkeG6v258dOG7m2l8dsOgKVxccyokLztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1WSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgQWJzdHJhY3RNZXJnZURhdGVUaW1lUmVmaW5lciBmcm9tIFwiLi4vLi4vLi4vY29tbW9uL3JlZmluZXJzL0Fic3RyYWN0TWVyZ2VEYXRlVGltZVJlZmluZXIuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZJTWVyZ2VEYXRlVGltZVJlZmluZXIgZXh0ZW5kcyBBYnN0cmFjdE1lcmdlRGF0ZVRpbWVSZWZpbmVyIHtcbiAgICBwYXR0ZXJuQmV0d2VlbigpIHtcbiAgICAgICAgcmV0dXJuIC9eXFxzKig/OmzDumN8dsOgb3wsfFR8LSk/XFxzKiQvO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTWVyZ2VEYXRlVGltZVJlZmluZXIuanMubWFwIiwiaW1wb3J0IE1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZnJvbSBcIi4uLy4uLy4uL2NvbW1vbi9yZWZpbmVycy9NZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIgZXh0ZW5kcyBNZXJnZVdlZWtkYXlDb21wb25lbnRSZWZpbmVyIHtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZJTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lci5qcy5tYXAiLCJpbXBvcnQgeyBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi8uLi9jb25maWd1cmF0aW9ucy5qc1wiO1xuaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcIi4uLy4uL2Nocm9uby5qc1wiO1xuaW1wb3J0IHsgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9IGZyb20gXCIuLi8uLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuLi8uLi90eXBlcy5qc1wiO1xuaW1wb3J0IElTT0Zvcm1hdFBhcnNlciBmcm9tIFwiLi4vLi4vY29tbW9uL3BhcnNlcnMvSVNPRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgU2xhc2hEYXRlRm9ybWF0UGFyc2VyIGZyb20gXCIuLi8uLi9jb21tb24vcGFyc2Vycy9TbGFzaERhdGVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSVN0YW5kYXJkUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklTdGFuZGFyZFBhcnNlci5qc1wiO1xuaW1wb3J0IFZJTW9udGhZZWFyUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklNb250aFllYXJQYXJzZXIuanNcIjtcbmltcG9ydCBWSVllYXJQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVllYXJQYXJzZXIuanNcIjtcbmltcG9ydCBWSUNhc3VhbERhdGVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSUNhc3VhbERhdGVQYXJzZXIuanNcIjtcbmltcG9ydCBWSUNhc3VhbFRpbWVQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSUNhc3VhbFRpbWVQYXJzZXIuanNcIjtcbmltcG9ydCBWSVdlZWtkYXlQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVdlZWtkYXlQYXJzZXIuanNcIjtcbmltcG9ydCBWSVRpbWVFeHByZXNzaW9uUGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklUaW1lRXhwcmVzc2lvblBhcnNlci5qc1wiO1xuaW1wb3J0IFZJVGltZVVuaXRBZ29Gb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVRpbWVVbml0QWdvRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyIGZyb20gXCIuL3BhcnNlcnMvVklUaW1lVW5pdExhdGVyRm9ybWF0UGFyc2VyLmpzXCI7XG5pbXBvcnQgVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlciBmcm9tIFwiLi9wYXJzZXJzL1ZJVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIgZnJvbSBcIi4vcGFyc2Vycy9WSVRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIuanNcIjtcbmltcG9ydCBWSU1lcmdlRGF0ZVJhbmdlUmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9WSU1lcmdlRGF0ZVJhbmdlUmVmaW5lci5qc1wiO1xuaW1wb3J0IFZJTWVyZ2VEYXRlVGltZVJlZmluZXIgZnJvbSBcIi4vcmVmaW5lcnMvVklNZXJnZURhdGVUaW1lUmVmaW5lci5qc1wiO1xuaW1wb3J0IFZJTWVyZ2VXZWVrZGF5Q29tcG9uZW50UmVmaW5lciBmcm9tIFwiLi9yZWZpbmVycy9WSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIuanNcIjtcbmV4cG9ydCB7IENocm9ubywgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmV4cG9ydCBjb25zdCBjYXN1YWwgPSBuZXcgQ2hyb25vKGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24oKSk7XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gbmV3IENocm9ubyhjcmVhdGVDb25maWd1cmF0aW9uKHRydWUpKTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uKGxpdHRsZUVuZGlhbiA9IHRydWUpIHtcbiAgICBjb25zdCBvcHRpb24gPSBjcmVhdGVDb25maWd1cmF0aW9uKGZhbHNlLCBsaXR0bGVFbmRpYW4pO1xuICAgIG9wdGlvbi5wYXJzZXJzLnVuc2hpZnQobmV3IFZJQ2FzdWFsVGltZVBhcnNlcigpKTtcbiAgICBvcHRpb24ucGFyc2Vycy51bnNoaWZ0KG5ldyBWSUNhc3VhbERhdGVQYXJzZXIoKSk7XG4gICAgb3B0aW9uLnBhcnNlcnMudW5zaGlmdChuZXcgVklUaW1lVW5pdENhc3VhbFJlbGF0aXZlRm9ybWF0UGFyc2VyKCkpO1xuICAgIHJldHVybiBvcHRpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29uZmlndXJhdGlvbihzdHJpY3RNb2RlID0gdHJ1ZSwgbGl0dGxlRW5kaWFuID0gdHJ1ZSkge1xuICAgIHJldHVybiBpbmNsdWRlQ29tbW9uQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHBhcnNlcnM6IFtcbiAgICAgICAgICAgIG5ldyBJU09Gb3JtYXRQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBTbGFzaERhdGVGb3JtYXRQYXJzZXIobGl0dGxlRW5kaWFuKSxcbiAgICAgICAgICAgIG5ldyBWSVN0YW5kYXJkUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVklNb250aFllYXJQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVllYXJQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVdlZWtkYXlQYXJzZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSVRpbWVFeHByZXNzaW9uUGFyc2VyKCksXG4gICAgICAgICAgICBuZXcgVklUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgICAgIG5ldyBWSVRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIoc3RyaWN0TW9kZSksXG4gICAgICAgICAgICBuZXcgVklUaW1lVW5pdFdpdGhpbkZvcm1hdFBhcnNlcihzdHJpY3RNb2RlKSxcbiAgICAgICAgXSxcbiAgICAgICAgcmVmaW5lcnM6IFtcbiAgICAgICAgICAgIG5ldyBWSU1lcmdlV2Vla2RheUNvbXBvbmVudFJlZmluZXIoKSxcbiAgICAgICAgICAgIG5ldyBWSU1lcmdlRGF0ZVJhbmdlUmVmaW5lcigpLFxuICAgICAgICAgICAgbmV3IFZJTWVyZ2VEYXRlVGltZVJlZmluZXIoKSxcbiAgICAgICAgXSxcbiAgICB9LCBzdHJpY3RNb2RlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCAqIGFzIGVuIGZyb20gXCIuL2xvY2FsZXMvZW4vaW5kZXguanNcIjtcbmltcG9ydCB7IENocm9ubywgUGFyc2luZ0NvbnRleHQgfSBmcm9tIFwiLi9jaHJvbm8uanNcIjtcbmltcG9ydCB7IFBhcnNpbmdSZXN1bHQsIFBhcnNpbmdDb21wb25lbnRzLCBSZWZlcmVuY2VXaXRoVGltZXpvbmUgfSBmcm9tIFwiLi9yZXN1bHRzLmpzXCI7XG5pbXBvcnQgeyBNZXJpZGllbSwgV2Vla2RheSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5leHBvcnQgeyBlbiwgQ2hyb25vLCBQYXJzaW5nQ29udGV4dCwgUGFyc2luZ1Jlc3VsdCwgUGFyc2luZ0NvbXBvbmVudHMsIFJlZmVyZW5jZVdpdGhUaW1lem9uZSB9O1xuZXhwb3J0IHsgTWVyaWRpZW0sIFdlZWtkYXkgfTtcbmltcG9ydCAqIGFzIGRlIGZyb20gXCIuL2xvY2FsZXMvZGUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGZyIGZyb20gXCIuL2xvY2FsZXMvZnIvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGphIGZyb20gXCIuL2xvY2FsZXMvamEvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHB0IGZyb20gXCIuL2xvY2FsZXMvcHQvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIG5sIGZyb20gXCIuL2xvY2FsZXMvbmwvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHpoIGZyb20gXCIuL2xvY2FsZXMvemgvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHJ1IGZyb20gXCIuL2xvY2FsZXMvcnUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGVzIGZyb20gXCIuL2xvY2FsZXMvZXMvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHVrIGZyb20gXCIuL2xvY2FsZXMvdWsvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGl0IGZyb20gXCIuL2xvY2FsZXMvaXQvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHN2IGZyb20gXCIuL2xvY2FsZXMvc3YvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIGZpIGZyb20gXCIuL2xvY2FsZXMvZmkvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHZpIGZyb20gXCIuL2xvY2FsZXMvdmkvaW5kZXguanNcIjtcbmV4cG9ydCB7IGRlLCBmciwgamEsIHB0LCBubCwgemgsIHJ1LCBlcywgdWssIGl0LCBzdiwgZmksIHZpIH07XG5leHBvcnQgY29uc3Qgc3RyaWN0ID0gZW4uc3RyaWN0O1xuZXhwb3J0IGNvbnN0IGNhc3VhbCA9IGVuLmNhc3VhbDtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2UodGV4dCwgcmVmLCBvcHRpb24pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZSh0ZXh0LCByZWYsIG9wdGlvbikge1xuICAgIHJldHVybiBjYXN1YWwucGFyc2VEYXRlKHRleHQsIHJlZiwgb3B0aW9uKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qKlxuICogU3lzdMOobWUgZGUgbG9nZ2luZyBzdHJ1Y3R1csOpIHBvdXIgTmF0dXJhbCBMYW5ndWFnZSBEYXRlc1xuICovXG5cbmV4cG9ydCB0eXBlIExvZ0xldmVsID0gJ2RlYnVnJyB8ICdpbmZvJyB8ICd3YXJuJyB8ICdlcnJvcic7XG5cbi8qKlxuICogRm9ybWF0ZSB1bmUgZW50csOpZSBkZSBsb2cgYXZlYyB0aW1lc3RhbXBcbiAqL1xuZnVuY3Rpb24gZm9ybWF0TG9nRW50cnkobGV2ZWw6IExvZ0xldmVsLCBtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiB1bmtub3duKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuICBcbiAgaWYgKGNvbnRleHQpIHtcbiAgICByZXR1cm4gYFske3RpbWVzdGFtcH1dIFske2xldmVsLnRvVXBwZXJDYXNlKCl9XSAke21lc3NhZ2V9IHwgQ29udGV4dDogJHtKU09OLnN0cmluZ2lmeShjb250ZXh0KX1gO1xuICB9XG4gIHJldHVybiBgWyR7dGltZXN0YW1wfV0gWyR7bGV2ZWwudG9VcHBlckNhc2UoKX1dICR7bWVzc2FnZX1gO1xufVxuXG4vKipcbiAqIFN5c3TDqG1lIGRlIGxvZ2dpbmcgc3RydWN0dXLDqVxuICovXG5leHBvcnQgY29uc3QgbG9nZ2VyID0ge1xuICAvKipcbiAgICogTG9nIGRlIG5pdmVhdSBkZWJ1ZyAocG91ciBsZSBkw6l2ZWxvcHBlbWVudClcbiAgICovXG4gIGRlYnVnKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2dFbnRyeSgnZGVidWcnLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgICBjb25zb2xlLmRlYnVnKGZvcm1hdHRlZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvZyBkZSBuaXZlYXUgaW5mbyAoaW5mb3JtYXRpb25zIGfDqW7DqXJhbGVzKVxuICAgKi9cbiAgaW5mbyhtZXNzYWdlOiBzdHJpbmcsIGNvbnRleHQ/OiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TG9nRW50cnkoJ2luZm8nLCBtZXNzYWdlLCBjb250ZXh0KTtcbiAgICBjb25zb2xlLmRlYnVnKGZvcm1hdHRlZCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvZyBkZSBuaXZlYXUgd2FybiAoYXZlcnRpc3NlbWVudHMpXG4gICAqL1xuICB3YXJuKG1lc3NhZ2U6IHN0cmluZywgY29udGV4dD86IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXRMb2dFbnRyeSgnd2FybicsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIGNvbnNvbGUud2Fybihmb3JtYXR0ZWQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBMb2cgZGUgbml2ZWF1IGVycm9yIChlcnJldXJzKVxuICAgKi9cbiAgZXJyb3IobWVzc2FnZTogc3RyaW5nLCBjb250ZXh0PzogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdExvZ0VudHJ5KCdlcnJvcicsIG1lc3NhZ2UsIGNvbnRleHQpO1xuICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0dGVkKTtcbiAgfSxcbn07XG5cbiIsIi8vIENIQU5HRU1FTlQgSUNJIDogT24gdXRpbGlzZSBcImltcG9ydCAqIGFzIGNocm9ub1wiIGNhciBsYSB2ZXJzaW9uIDIueCBuJ2EgcGx1cyBkJ2V4cG9ydCBwYXIgZMOpZmF1dFxuaW1wb3J0ICogYXMgY2hyb25vIGZyb20gXCJjaHJvbm8tbm9kZVwiO1xuaW1wb3J0IHsgQ2hyb25vLCBQYXJzZXIsIFBhcnNpbmdDb250ZXh0LCBSZWZpbmVyIH0gZnJvbSBcImNocm9uby1ub2RlXCI7XG5pbXBvcnQgeyBPUkRJTkFMX05VTUJFUl9QQVRURVJOLCBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLCBkZXNjcmliZUVycm9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dlclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbi8vIExvY2FsIHR5cGUgZGVmaW5pdGlvbiBtYXRjaGluZyBjaHJvbm8tbm9kZSdzIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4vLyBDb25maWd1cmF0aW9uIGlzIG5vdCBleHBvcnRlZCBmcm9tIHRoZSBtYWluIG1vZHVsZSwgc28gd2UgZGVmaW5lIGl0IGxvY2FsbHlcbmludGVyZmFjZSBDaHJvbm9Db25maWd1cmF0aW9uIHtcbiAgcGFyc2VyczogUGFyc2VyW107XG4gIHJlZmluZXJzOiBSZWZpbmVyW107XG59XG5cbmZ1bmN0aW9uIGdldE9yZGluYWxEYXRlUGFyc2VyKCkge1xuICByZXR1cm4gKHtcbiAgICBwYXR0ZXJuOiAoKSA9PiBuZXcgUmVnRXhwKE9SRElOQUxfTlVNQkVSX1BBVFRFUk4pLFxuICAgIGV4dHJhY3Q6IChjb250ZXh0OiBQYXJzaW5nQ29udGV4dCwgbWF0Y2g6IFJlZ0V4cE1hdGNoQXJyYXkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRheTogcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihtYXRjaFswXSksXG4gICAgICAgIC8vIG1vbWVudCguLi4pLm1vbnRoKCkgaXMgMC1pbmRleGVkIChKYW49MCksIGJ1dCBjaHJvbm8tbm9kZSdzXG4gICAgICAgIC8vIFBhcnNpbmdDb21wb25lbnRzLm1vbnRoIGlzIDEtaW5kZXhlZCAoSmFuPTEpIC0tIHZlcmlmaWVkIGFnYWluc3RcbiAgICAgICAgLy8gY2hyb25vLW5vZGUncyBvd24gbG9jYWxlIGNvbnN0YW50cy4gV2l0aG91dCB0aGUgKzEgdGhpcyBhbHdheXNcbiAgICAgICAgLy8gcmVzb2x2ZWQgdG8gdGhlIHdyb25nIG1vbnRoIChhbmQsIHZpYSBmb3J3YXJkRGF0ZSwgc29tZXRpbWVzIHRoZVxuICAgICAgICAvLyB3cm9uZyB5ZWFyIHRvbykuXG4gICAgICAgIC8vIE11c3QgdXNlIGNvbnRleHQucmVmRGF0ZSAodGhlIGRhdGUgY2hyb25vIHdhcyBhc2tlZCB0byBwYXJzZVxuICAgICAgICAvLyByZWxhdGl2ZSB0byksIG5vdCBtb21lbnQoKSAodGhlIHJlYWwgY3VycmVudCB3YWxsLWNsb2NrIHRpbWUpOlxuICAgICAgICAvLyBjYWxsZXJzIGNhbiBhbmQgZG8gcGFzcyBhbiBleHBsaWNpdCByZWZlcmVuY2UgZGF0ZSwgZS5nLiB0ZXN0cywgb3JcbiAgICAgICAgLy8gZ2V0UGFyc2VkRGF0ZVJlc3VsdCgpJ3MgY2FsbGVycyBpbiBwYXJzZXIudHMuXG4gICAgICAgIG1vbnRoOiBtb21lbnQoY29udGV4dC5yZWZEYXRlKS5tb250aCgpICsgMSxcbiAgICAgIH07XG4gICAgfSxcbiAgfSBhcyBQYXJzZXIpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDaHJvbm9zKGxhbmd1YWdlczogc3RyaW5nW10pOiBDaHJvbm9bXSB7XG4gIGNvbnN0IGxvY2FsZSA9IG1vbWVudC5sb2NhbGUoKTtcbiAgY29uc3QgaXNHQiA9IGxvY2FsZSA9PT0gJ2VuLWdiJztcblxuICBjb25zdCBjaHJvbm9zOiBDaHJvbm9bXSA9IFtdO1xuICBjb25zdCBvcmRpbmFsRGF0ZVBhcnNlciA9IGdldE9yZGluYWxEYXRlUGFyc2VyKCk7XG4gIC8vIEJ1aWxkcyBhIENocm9ubyBpbnN0YW5jZSBmb3IgYSBsb2NhbGUgbW9kdWxlLCBzdXBwb3J0aW5nIGJvdGggY2hyb25vLW5vZGVcbiAgLy8gQVBJIHNoYXBlczogb2xkZXIgbG9jYWxlcyBzdGlsbCBleHBvc2UgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihpc0dCKSxcbiAgLy8gYnV0IGFzIG9mIGNocm9uby1ub2RlIDIueCB0aGUgXCJlblwiIGxvY2FsZSBpbnN0ZWFkIGV4cG9ydHMgcHJlLWJ1aWx0XG4gIC8vIENocm9ubyBpbnN0YW5jZXMgKGNhc3VhbC9HQi9zdHJpY3QpIHdpdGggbm8gY29uZmlnIGZhY3RvcnkgYXQgYWxsLiBBXG4gIC8vIGxvY2FsZSBtaXNzaW5nIGJvdGggd291bGQgcHJldmlvdXNseSBiZSBzaWxlbnRseSB0cmVhdGVkIGFzIHVuc3VwcG9ydGVkXG4gIC8vIChsb2dnZWQgYXQgXCJ3YXJuXCIgb25seSkgYW5kIGV2ZXJ5IG1hdGNoIGZvciB0aGF0IGxhbmd1YWdlIHdvdWxkIGZhbGxcbiAgLy8gdGhyb3VnaCB0byB0b2RheS9ub3cgd2l0aCBubyB2aXNpYmxlIGVycm9yIC0tIHRoaXMgaGFwcGVuZWQgZm9yIEVuZ2xpc2hcbiAgLy8gc3BlY2lmaWNhbGx5LCBmb3IgZXZlcnkgdXNlciB3aG8gZW5hYmxlZCBpdCwgc2luY2UgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvblxuICAvLyBpcyBleGFjdGx5IHdoYXQgZGlzYXBwZWFyZWQgZnJvbSB0aGF0IG1vZHVsZS5cbiAgY29uc3QgYnVpbGRDaHJvbm9Gb3JNb2R1bGUgPSAobGFuZ01vZHVsZToge1xuICAgIGNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24/OiAoaXNHQjogYm9vbGVhbikgPT4gdW5rbm93bjtcbiAgICBjYXN1YWw/OiBDaHJvbm87XG4gICAgR0I/OiBDaHJvbm87XG4gIH0gfCB1bmRlZmluZWQpOiBDaHJvbm8gfCBudWxsID0+IHtcbiAgICBpZiAoIWxhbmdNb2R1bGUpIHJldHVybiBudWxsO1xuICAgIGlmIChsYW5nTW9kdWxlLmNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24pIHtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IGxhbmdNb2R1bGUuY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbihpc0dCKTtcbiAgICAgIC8vIENocm9ubyBjb25zdHJ1Y3RvciBhY2NlcHRzIENvbmZpZ3VyYXRpb24gdHlwZSAtIGNhc3QgbmVlZGVkIGJlY2F1c2UgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbiByZXR1cm5zIHVua25vd25cbiAgICAgIHJldHVybiBuZXcgQ2hyb25vKGNvbmZpZyBhcyBDaHJvbm9Db25maWd1cmF0aW9uKTtcbiAgICB9XG4gICAgaWYgKGxhbmdNb2R1bGUuY2FzdWFsKSB7XG4gICAgICAvLyBDbG9uZSBzbyB3ZSBkb24ndCBtdXRhdGUgY2hyb25vLW5vZGUncyBzaGFyZWQgc2luZ2xldG9uIGluc3RhbmNlXG4gICAgICAvLyAobXVsdGlwbGUgTkxEUGFyc2VyIGluc3RhbmNlcyB3b3VsZCBvdGhlcndpc2UgYWxsIHB1c2ggdGhlaXIgb3duXG4gICAgICAvLyBvcmRpbmFsRGF0ZVBhcnNlciBvbnRvIHRoZSBzYW1lIHNoYXJlZCBvYmplY3QpLlxuICAgICAgY29uc3QgYmFzZSA9IChpc0dCICYmIGxhbmdNb2R1bGUuR0IpID8gbGFuZ01vZHVsZS5HQiA6IGxhbmdNb2R1bGUuY2FzdWFsO1xuICAgICAgcmV0dXJuIGJhc2UuY2xvbmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgbGFuZ3VhZ2VzLmZvckVhY2gobCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE9uIGFjY8OoZGUgYXV4IGxhbmd1ZXMgZHluYW1pcXVlbWVudCB2aWEgUmVjb3JkXG4gICAgICBjb25zdCBsYW5nTW9kdWxlID0gKGNocm9ubyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbF0gYXMge1xuICAgICAgICBjcmVhdGVDYXN1YWxDb25maWd1cmF0aW9uPzogKGlzR0I6IGJvb2xlYW4pID0+IHVua25vd247XG4gICAgICAgIGNhc3VhbD86IENocm9ubztcbiAgICAgICAgR0I/OiBDaHJvbm87XG4gICAgICB9IHwgdW5kZWZpbmVkO1xuICAgICAgY29uc3QgYyA9IGJ1aWxkQ2hyb25vRm9yTW9kdWxlKGxhbmdNb2R1bGUpO1xuICAgICAgaWYgKCFjKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBMYW5ndWFnZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IGNocm9uby1ub2RlYCwgeyBsYW5ndWFnZTogbCB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYy5wYXJzZXJzLnB1c2gob3JkaW5hbERhdGVQYXJzZXIpO1xuICAgICAgY2hyb25vcy5wdXNoKGMpO1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiQ2hyb25vIGluaXRpYWxpemVkIGZvciBsYW5ndWFnZVwiLCB7IGxhbmd1YWdlOiBsIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEZhaWxlZCB0byBpbml0aWFsaXplIGNocm9ubyBmb3IgbGFuZ3VhZ2VgLCB7XG4gICAgICAgIGxhbmd1YWdlOiBsLFxuICAgICAgICBlcnJvcjogZGVzY3JpYmVFcnJvcihlcnJvciksXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFNpIGF1Y3VuZSBsYW5ndWUgbidhIHB1IMOqdHJlIGluaXRpYWxpc8OpZSwgdXRpbGlzZXIgbCdhbmdsYWlzIHBhciBkw6lmYXV0XG4gIGlmIChjaHJvbm9zLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZ2dlci53YXJuKCdObyBsYW5ndWFnZXMgY291bGQgYmUgaW5pdGlhbGl6ZWQsIGF0dGVtcHRpbmcgRW5nbGlzaCBmYWxsYmFjaycpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbk1vZHVsZSA9IChjaHJvbm8gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmVuIGFzIHtcbiAgICAgICAgY3JlYXRlQ2FzdWFsQ29uZmlndXJhdGlvbj86IChpc0dCOiBib29sZWFuKSA9PiB1bmtub3duO1xuICAgICAgICBjYXN1YWw/OiBDaHJvbm87XG4gICAgICAgIEdCPzogQ2hyb25vO1xuICAgICAgfSB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGMgPSBidWlsZENocm9ub0Zvck1vZHVsZShlbk1vZHVsZSk7XG4gICAgICBpZiAoYykge1xuICAgICAgICBjLnBhcnNlcnMucHVzaChvcmRpbmFsRGF0ZVBhcnNlcik7XG4gICAgICAgIGNocm9ub3MucHVzaChjKTtcbiAgICAgICAgbG9nZ2VyLmluZm8oJ0RlZmF1bHQgRW5nbGlzaCBjaHJvbm8gaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0VuZ2xpc2ggY2hyb25vIG1vZHVsZSBub3QgYXZhaWxhYmxlJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGluaXRpYWxpemUgZGVmYXVsdCBFbmdsaXNoIGNocm9ubycsIHtcbiAgICAgICAgZXJyb3I6IGRlc2NyaWJlRXJyb3IoZXJyb3IpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNocm9ub3M7XG59IiwiaW1wb3J0IHsgQ2hyb25vIH0gZnJvbSBcImNocm9uby1ub2RlXCI7XG5pbXBvcnQgdCBmcm9tIFwiLi9sYW5nL2hlbHBlclwiO1xuXG4vKipcbiAqIEludGVyZmFjZSBwb3VyIGxlcyBkw6lwZW5kYW5jZXMgbsOpY2Vzc2FpcmVzIMOgIGxhIGTDqXRlY3Rpb24gZCdoZXVyZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVEZXRlY3RvckRlcGVuZGVuY2llcyB7XG4gIGxhbmd1YWdlczogc3RyaW5nW107XG4gIGNocm9ub3M6IENocm9ub1tdO1xuICByZWdleFJlbGF0aXZlOiBSZWdFeHA7XG4gIHJlZ2V4UmVsYXRpdmVDb21iaW5lZDogUmVnRXhwO1xuICByZWdleFdlZWtkYXk6IFJlZ0V4cDtcbiAgcmVnZXhXZWVrZGF5V2l0aFRpbWU6IFJlZ0V4cDtcbn1cblxuLyoqXG4gKiBDbGFzc2UgcG91ciBkw6l0ZWN0ZXIgc2kgdW4gdGV4dGUgY29udGllbnQgdW5lIGNvbXBvc2FudGUgZCdoZXVyZVxuICovXG5leHBvcnQgY2xhc3MgVGltZURldGVjdG9yIHtcbiAgcHJpdmF0ZSBsYW5ndWFnZXM6IHN0cmluZ1tdO1xuICBwcml2YXRlIGNocm9ub3M6IENocm9ub1tdO1xuICBwcml2YXRlIHJlZ2V4UmVsYXRpdmU6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWdleFJlbGF0aXZlQ29tYmluZWQ6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWdleFdlZWtkYXk6IFJlZ0V4cDtcbiAgcHJpdmF0ZSByZWdleFdlZWtkYXlXaXRoVGltZTogUmVnRXhwO1xuXG4gIGNvbnN0cnVjdG9yKGRlcGVuZGVuY2llczogVGltZURldGVjdG9yRGVwZW5kZW5jaWVzKSB7XG4gICAgdGhpcy5sYW5ndWFnZXMgPSBkZXBlbmRlbmNpZXMubGFuZ3VhZ2VzO1xuICAgIHRoaXMuY2hyb25vcyA9IGRlcGVuZGVuY2llcy5jaHJvbm9zO1xuICAgIHRoaXMucmVnZXhSZWxhdGl2ZSA9IGRlcGVuZGVuY2llcy5yZWdleFJlbGF0aXZlO1xuICAgIHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkID0gZGVwZW5kZW5jaWVzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZDtcbiAgICB0aGlzLnJlZ2V4V2Vla2RheSA9IGRlcGVuZGVuY2llcy5yZWdleFdlZWtkYXk7XG4gICAgdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSA9IGRlcGVuZGVuY2llcy5yZWdleFdlZWtkYXlXaXRoVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWw6lyaWZpZSBzaSBsZSB0ZXh0ZSBjb250aWVudCB1bmUgY29tcG9zYW50ZSBkJ2hldXJlXG4gICAqL1xuICBoYXNUaW1lQ29tcG9uZW50KHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIDEuIElmIGl0J3MgXCJub3dcIiBpbiBhbnkgbGFuZ3VhZ2UsIFlFUy5cbiAgICAvLyBUcmFuc2xhdGlvbnMgY2FuIGxpc3Qgc2V2ZXJhbCB2YXJpYW50cyBwaXBlLXNlcGFyYXRlZCAoZS5nLiBJdGFsaWFuXG4gICAgLy8gXCJhZGVzc298b3JhXCIsIENoaW5lc2UgXCLnj77lnKh8546w5ZyoXCIpOyBzcGxpdCBlYWNoIGxhbmd1YWdlJ3MgXCJub3dcIiBlbnRyeVxuICAgIC8vIGRpcmVjdGx5IGluc3RlYWQgb2YgdHJ5aW5nIHRvIG1hdGNoIGluZGl2aWR1YWwgaW1tZWRpYXRlS2V5d29yZHNcbiAgICAvLyBlbnRyaWVzIChhbHJlYWR5IHNwbGl0LCBmb3IgYWxsIG9mIG5vdy90b2RheS90b21vcnJvdy95ZXN0ZXJkYXlcbiAgICAvLyBjb21iaW5lZCkgYWdhaW5zdCB0aGUgcmF3LCB1bnNwbGl0IHRyYW5zbGF0aW9uIHN0cmluZywgd2hpY2ggY291bGRcbiAgICAvLyBuZXZlciBlcXVhbCBhIHNpbmdsZSBhbHJlYWR5LXNwbGl0IHZhcmlhbnQuXG4gICAgY29uc3Qgbm93V29yZHMgPSB0aGlzLmxhbmd1YWdlcy5mbGF0TWFwKGxhbmcgPT5cbiAgICAgIHQoJ25vdycsIGxhbmcpLnRvTG93ZXJDYXNlKCkuc3BsaXQoJ3wnKS5tYXAodyA9PiB3LnRyaW0oKSkuZmlsdGVyKHcgPT4gdylcbiAgICApO1xuICAgIC8vIEV4YWN0LCBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGFnYWluc3QgdGhlIHdob2xlIHN0cmluZyAtLSBubyBuZWVkIHRvXG4gICAgLy8gY29tcGlsZSBhIFJlZ0V4cCBwZXIgd29yZCBwZXIgY2FsbCBmb3IgdGhhdCwgYSBwbGFpbiBsb3dlcmNhc2UgK1xuICAgIC8vIGluY2x1ZGVzKCkgZG9lcyB0aGUgc2FtZSB0aGluZyBtb3JlIHNpbXBseSBhbmQgbW9yZSBjaGVhcGx5LlxuICAgIGlmIChub3dXb3Jkcy5pbmNsdWRlcyh0ZXh0LnRvTG93ZXJDYXNlKCkudHJpbSgpKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gMi4gRmlyc3QgY2hlY2sgY29tYmluYXRpb25zIFwiaW4gWCB3ZWVrcyBhbmQgWSBkYXlzXCJcbiAgICBjb25zdCByZWxDb21iaW5lZE1hdGNoID0gdGV4dC5tYXRjaCh0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZCk7XG4gICAgaWYgKHJlbENvbWJpbmVkTWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdW5pdFN0cjEgPSByZWxDb21iaW5lZE1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHVuaXRTdHIyID0gcmVsQ29tYmluZWRNYXRjaFs0XS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIHVuaXRzIGlzIGhvdXJzIG9yIG1pbnV0ZXMgLT4gWUVTXG4gICAgICAgIGlmICh1bml0U3RyMS5zdGFydHNXaXRoKCdoJykgfHwgdW5pdFN0cjEgPT09ICdtJyB8fCB1bml0U3RyMS5zdGFydHNXaXRoKCdtaW4nKSB8fFxuICAgICAgICAgICAgdW5pdFN0cjIuc3RhcnRzV2l0aCgnaCcpIHx8IHVuaXRTdHIyID09PSAnbScgfHwgdW5pdFN0cjIuc3RhcnRzV2l0aCgnbWluJykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyd2lzZSAtPiBOTyAoZGF5cywgd2Vla3MsIG1vbnRocywgeWVhcnMpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAzLiBJZiBpdCdzIGEgc2ltcGxlIGRlbGF5IGluIEhPVVJTIG9yIE1JTlVURVMgLT4gWUVTXG4gICAgY29uc3QgcmVsTWF0Y2ggPSB0ZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZSk7XG4gICAgaWYgKHJlbE1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHVuaXRTdHIgPSByZWxNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAvLyBtLCBtaW4sIG1pbnV0ZXMsIGgsIGhvdXJzLi4uXG4gICAgICAgIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ2gnKSB8fCB1bml0U3RyID09PSAnbScgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdtaW4nKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRGF5cywgbW9udGhzLCB5ZWFycyAtPiBOT1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gNC4gSWYgaXQncyBhIHNwZWNpZmljIGRheSB3aXRoIHRpbWUgKE5leHQgTW9uZGF5IGF0IDNwbSkgLT4gWUVTXG4gICAgaWYgKHRoaXMucmVnZXhXZWVrZGF5V2l0aFRpbWUgJiYgdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZS50ZXN0KHRleHQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgXG4gICAgLy8gNS4gSWYgaXQncyBhIHNwZWNpZmljIGRheSB3aXRob3V0IHRpbWUgKE5leHQgTW9uZGF5KSBvciBUb21vcnJvdyAtPiBOTyAoR2VuZXJhbGx5IHdlIGp1c3Qgd2FudCB0aGUgZGF0ZSlcbiAgICAvLyBJZiB5b3Ugd2FudCB0aW1lIGZvciBcIlRvbW9ycm93XCIsIHJlbW92ZSB0aGUgbGluZXMgYmVsb3cuXG4gICAgaWYgKHRoaXMucmVnZXhXZWVrZGF5LnRlc3QodGV4dCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgdG9kYXkvdG9tb3Jyb3cveWVzdGVyZGF5IGtleXdvcmRzIGluIGFsbCBsYW5ndWFnZXNcbiAgICBjb25zdCBkYXRlS2V5d29yZHMgPSBbJ3RvZGF5JywgJ3RvbW9ycm93JywgJ3llc3RlcmRheSddO1xuICAgIGNvbnN0IGRhdGVXb3Jkczogc3RyaW5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBkYXRlS2V5d29yZHMpIHtcbiAgICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgICAvLyB0KCkgYWx3YXlzIGZhbGxzIGJhY2sgdG8gRW5nbGlzaCAobGFuZy9oZWxwZXIudHMpLCBhbmQgZW4udHNcbiAgICAgICAgLy8gYWx3YXlzIGRlZmluZXMgdG9kYXkvdG9tb3Jyb3cveWVzdGVyZGF5LCBzbyB0aGlzIGd1YXJkIGNhbid0XG4gICAgICAgIC8vIGFjdHVhbGx5IGJlIGZhbHNlIGZvciB0aGVzZSB0aHJlZSBrZXlzIC0tIGtlcHQgZm9yIHNhZmV0eSBpbiBjYXNlXG4gICAgICAgIC8vIHRoYXQgaW52YXJpYW50IGV2ZXIgY2hhbmdlcy5cbiAgICAgICAgY29uc3Qgd29yZCA9IHQoa2V5LCBsYW5nKTtcbiAgICAgICAgaWYgKHdvcmQgJiYgd29yZCAhPT0gXCJOT1RGT1VORFwiKSB7XG4gICAgICAgICAgZGF0ZVdvcmRzLnB1c2god29yZC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGF0ZVdvcmRzLnNvbWUodyA9PiBuZXcgUmVnRXhwKGBeJHt3LnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyl9JGAsICdpJykudGVzdCh0ZXh0KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGFzayB0aGUgbGlicmFyeSBpZiBpdCBzZWVzIGFuIGV4cGxpY2l0IHRpbWUgKGV4OiBcIlRvbW9ycm93IGF0IDVwbVwiKVxuICAgIGlmICghdGhpcy5jaHJvbm9zKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNocm9ub3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFJlc3VsdCA9IGMucGFyc2UodGV4dCk7XG4gICAgICAgIGlmIChwYXJzZWRSZXN1bHQgJiYgcGFyc2VkUmVzdWx0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBzdGFydCA9IHBhcnNlZFJlc3VsdFswXS5zdGFydDtcbiAgICAgICAgICBpZiAoc3RhcnQgJiYgKHN0YXJ0LmlzQ2VydGFpbihcImhvdXJcIikgfHwgc3RhcnQuaXNDZXJ0YWluKFwibWludXRlXCIpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlIHBhcnNpbmcgZXJyb3JzXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4iLCIvKipcbiAqIEltcGzDqW1lbnRhdGlvbiBkJ3VuIGNhY2hlIExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgYXZlYyBsaW1pdGUgZGUgdGFpbGxlXG4gKiBVdGlsaXPDqSBwb3VyIGxpbWl0ZXIgbGEgbcOpbW9pcmUgdXRpbGlzw6llIHBhciBsZXMgY2FjaGVzXG4gKi9cbmV4cG9ydCBjbGFzcyBMUlVDYWNoZTxLLCBWPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4U2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIGNhY2hlOiBNYXA8SywgVj47XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgTFJVIGNhY2hlIHdpdGggdGhlIHNwZWNpZmllZCBtYXhpbXVtIHNpemVcbiAgICogXG4gICAqIEBwYXJhbSBtYXhTaXplIC0gTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gc3RvcmUgaW4gdGhlIGNhY2hlIChkZWZhdWx0OiA1MDApXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtYXhTaXplID0gNTAwKSB7XG4gICAgaWYgKG1heFNpemUgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTFJVIENhY2hlIG1heFNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMFwiKTtcbiAgICB9XG4gICAgdGhpcy5tYXhTaXplID0gbWF4U2l6ZTtcbiAgICB0aGlzLmNhY2hlID0gbmV3IE1hcDxLLCBWPigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGtleSBleGlzdHMgaW4gdGhlIGNhY2hlXG4gICAqIFbDqXJpZmllIHNpIHVuZSBjbMOpIGV4aXN0ZSBkYW5zIGxlIGNhY2hlXG4gICAqIFxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBjaGVja1xuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBrZXkgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGhhcyhrZXk6IEspOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5oYXMoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW50IHVuZSB2YWxldXIgZHUgY2FjaGUgZXQgbGEgbWFycXVlIGNvbW1lIHLDqWNlbW1lbnQgdXRpbGlzw6llXG4gICAqIEdldHMgYSB2YWx1ZSBmcm9tIHRoZSBjYWNoZSBieSBrZXlcbiAgICogSWYgdGhlIGtleSBleGlzdHMsIGl0IGlzIG1vdmVkIHRvIHRoZSBlbmQgKG1vc3QgcmVjZW50bHkgdXNlZClcbiAgICogXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIHJldHJpZXZlXG4gICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSwgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuICAgKi9cbiAgZ2V0KGtleTogSyk6IFYgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5jYWNoZS5nZXQoa2V5KTtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRMOpcGxhY2VyIGxhIGNsw6kgw6AgbGEgZmluIChtb3N0IHJlY2VudGx5IHVzZWQpXG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBam91dGUgb3UgbWV0IMOgIGpvdXIgdW5lIHZhbGV1ciBkYW5zIGxlIGNhY2hlXG4gICAqIFNldHMgYSB2YWx1ZSBpbiB0aGUgY2FjaGVcbiAgICogSWYgdGhlIGtleSBhbHJlYWR5IGV4aXN0cywgaXQgaXMgdXBkYXRlZCBhbmQgbW92ZWQgdG8gdGhlIGVuZFxuICAgKiBTaSBsYSB0YWlsbGUgbWF4aW1hbGUgZXN0IGF0dGVpbnRlLCBzdXBwcmltZSBsJ2VudHLDqWUgbGEgbW9pbnMgcsOpY2VtbWVudCB1dGlsaXPDqWVcbiAgICogXG4gICAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHRvIHNldFxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc3RvcmVcbiAgICovXG4gIHNldChrZXk6IEssIHZhbHVlOiBWKTogdm9pZCB7XG4gICAgLy8gU2kgbGEgY2zDqSBleGlzdGUgZMOpasOgLCBsYSBzdXBwcmltZXIgZCdhYm9yZCBwb3VyIGxhIGTDqXBsYWNlciDDoCBsYSBmaW5cbiAgICBpZiAodGhpcy5jYWNoZS5oYXMoa2V5KSkge1xuICAgICAgdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2FjaGUuc2l6ZSA+PSB0aGlzLm1heFNpemUpIHtcbiAgICAgIC8vIFN1cHByaW1lciBsJ2VudHLDqWUgbGEgbW9pbnMgcsOpY2VtbWVudCB1dGlsaXPDqWUgKHByZW1pw6hyZSBlbnRyw6llKVxuICAgICAgLy8gTWFwIGl0ZXJhdG9yJ3MgSXRlcmF0b3JSZXN1bHQudmFsdWUgdHlwZSBkZWZhdWx0cyB0byBcIlQgfCBhbnlcIiAodGhlXG4gICAgICAvLyByZXR1cm4tcG9zaXRpb24gdHlwZSBwYXJhbSBkZWZhdWx0cyB0byBhbnkpLCB3aGljaCBUUyBjb2xsYXBzZXMgdG9cbiAgICAgIC8vIGFueSAtLSBjYXN0IGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4ganVzdCBhbm5vdGF0aW5nIHRoZSB2YXJpYWJsZS5cbiAgICAgIGNvbnN0IGZpcnN0S2V5ID0gdGhpcy5jYWNoZS5rZXlzKCkubmV4dCgpLnZhbHVlIGFzIEsgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoZmlyc3RLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShmaXJzdEtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEFqb3V0ZXIgbGEgbm91dmVsbGUgZW50csOpZSDDoCBsYSBmaW5cbiAgICB0aGlzLmNhY2hlLnNldChrZXksIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdXBwcmltZSB1bmUgZW50csOpZSBkdSBjYWNoZVxuICAgKiBEZWxldGVzIGFuIGVudHJ5IGZyb20gdGhlIGNhY2hlXG4gICAqIFxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBkZWxldGVcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUga2V5IHdhcyBkZWxldGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICovXG4gIGRlbGV0ZShrZXk6IEspOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZS5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaWRlIGNvbXBsw6h0ZW1lbnQgbGUgY2FjaGVcbiAgICogQ2xlYXJzIGFsbCBlbnRyaWVzIGZyb20gdGhlIGNhY2hlXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgbGEgdGFpbGxlIGFjdHVlbGxlIGR1IGNhY2hlXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgY2FjaGVcbiAgICogXG4gICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIGNhY2hlXG4gICAqL1xuICBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgbGEgdGFpbGxlIG1heGltYWxlIGR1IGNhY2hlXG4gICAqIEdldHMgdGhlIG1heGltdW0gc2l6ZSBsaW1pdCBvZiB0aGUgY2FjaGVcbiAgICogXG4gICAqIEByZXR1cm5zIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzdG9yZWRcbiAgICovXG4gIGdldCBtYXhTaXplTGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5tYXhTaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG91cm5lIHVuIGl0w6lyYXRldXIgc3VyIHRvdXRlcyBsZXMgZW50csOpZXMgZHUgY2FjaGVcbiAgICogUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIGFsbCBlbnRyaWVzIGluIHRoZSBjYWNoZVxuICAgKiBVdGlsZSBwb3VyIGxlIG5ldHRveWFnZSBww6lyaW9kaXF1ZVxuICAgKiBVc2VmdWwgZm9yIHBlcmlvZGljIGNsZWFudXBcbiAgICogXG4gICAqIEByZXR1cm5zIEl0ZXJhdG9yIG92ZXIgW2tleSwgdmFsdWVdIHBhaXJzXG4gICAqL1xuICBlbnRyaWVzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8W0ssIFZdPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZW50cmllcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG91cm5lIHVuIGl0w6lyYXRldXIgc3VyIHRvdXRlcyBsZXMgY2zDqXMgZHUgY2FjaGVcbiAgICogUmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIGFsbCBrZXlzIGluIHRoZSBjYWNoZVxuICAgKiBcbiAgICogQHJldHVybnMgSXRlcmF0b3Igb3ZlciBrZXlzXG4gICAqL1xuICBrZXlzKCk6IEl0ZXJhYmxlSXRlcmF0b3I8Sz4ge1xuICAgIHJldHVybiB0aGlzLmNhY2hlLmtleXMoKTtcbiAgfVxufVxuXG4iLCJpbXBvcnQgeyBDaHJvbm8sIFBhcnNlZFJlc3VsdCwgUGFyc2luZ09wdGlvbiB9IGZyb20gXCJjaHJvbm8tbm9kZVwiO1xuaW1wb3J0IGdldENocm9ub3MgZnJvbSBcIi4vY2hyb25vXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IFRpbWVEZXRlY3RvciB9IGZyb20gXCIuL3RpbWUtZGV0ZWN0b3JcIjtcbmltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSBcIi4vbHJ1LWNhY2hlXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbkNvbGxlY3RvciB9IGZyb20gXCIuL3RyYW5zbGF0aW9uLWNvbGxlY3RvclwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwiLi93aW5kb3ctbW9tZW50XCI7XG5cbmltcG9ydCB7IERheU9mV2VlayB9IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQge1xuICBnZXRMb2NhbGVXZWVrU3RhcnQsXG4gIGdldFdlZWtOdW1iZXIsXG4gIE9SRElOQUxfTlVNQkVSX1BBVFRFUk4sXG4gIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sXG4gIGRlc2NyaWJlRXJyb3IsXG59IGZyb20gXCIuL3V0aWxzXCI7XG5cblxuLy8gVHlwZSBhbGlhcyBmb3IgTW9tZW50IGZyb20gdGhlIG1vbWVudCBsaWJyYXJ5IGJ1bmRsZWQgd2l0aCBPYnNpZGlhblxuLy8gVXNpbmcgdGhlIHR5cGUgZnJvbSB0aGUgbW9tZW50IGxpYnJhcnkgdHlwZXMgc2luY2UgbW9tZW50IGlzIGJ1bmRsZWQgd2l0aCBPYnNpZGlhblxuLy8gVGhlIG1vbWVudCBwYWNrYWdlIGlzIGJ1bmRsZWQgd2l0aCBPYnNpZGlhbiwgYnV0IHRoZSBNb21lbnQgdHlwZSBpcyBub3QgZXhwb3J0ZWQgZnJvbSBvYnNpZGlhbiBtb2R1bGVcbnR5cGUgTW9tZW50ID0gaW1wb3J0KFwibW9tZW50XCIpLk1vbWVudDtcblxudHlwZSBUaW1lVW5pdCA9ICdtaW51dGVzJyB8ICdob3VycycgfCAnZGF5cycgfCAnd2Vla3MnIHwgJ21vbnRocycgfCAneWVhcnMnO1xuXG4vKipcbiAqIFJlc3VsdCBvYmplY3QgcmV0dXJuZWQgYnkgZGF0ZSBwYXJzaW5nIG1ldGhvZHMuXG4gKiBDb250YWlucyB0aGUgcGFyc2VkIGRhdGUgaW4gbXVsdGlwbGUgZm9ybWF0cyBmb3IgY29udmVuaWVuY2UuXG4gKiBcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByZXN1bHQgPSBwbHVnaW4ucGFyc2VEYXRlKFwidG9tb3Jyb3dcIik7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9ybWF0dGVkU3RyaW5nKTsgLy8gXCIyMDI1LTAxLTA2XCJcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5kYXRlKTsgLy8gRGF0ZSBvYmplY3RcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5tb21lbnQuZm9ybWF0KFwiZGRkZFwiKSk7IC8vIFwiTW9uZGF5XCJcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5MRFJlc3VsdCB7XG4gIC8qKiBGb3JtYXR0ZWQgZGF0ZSBzdHJpbmcgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0ICovXG4gIGZvcm1hdHRlZFN0cmluZzogc3RyaW5nO1xuICAvKiogTmF0aXZlIEphdmFTY3JpcHQgRGF0ZSBvYmplY3QgKi9cbiAgZGF0ZTogRGF0ZTtcbiAgLyoqIE1vbWVudC5qcyBvYmplY3QgZm9yIGFkdmFuY2VkIGRhdGUgbWFuaXB1bGF0aW9uICovXG4gIG1vbWVudDogTW9tZW50O1xufVxuXG4vKipcbiAqIFJlc3VsdCBvYmplY3QgcmV0dXJuZWQgYnkgZGF0ZSByYW5nZSBwYXJzaW5nIG1ldGhvZHMuXG4gKiBDb250YWlucyB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcyBvZiBhIHBhcnNlZCByYW5nZSwgcGx1cyBhIGxpc3Qgb2YgYWxsIGRhdGVzIGluIHRoZSByYW5nZS5cbiAqIFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJhbmdlID0gcGx1Z2luLnBhcnNlRGF0ZVJhbmdlKFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCIpO1xuICogaWYgKHJhbmdlKSB7XG4gKiAgIGNvbnNvbGUubG9nKHJhbmdlLnN0YXJ0RGF0ZSk7IC8vIERhdGUgb2JqZWN0IGZvciBNb25kYXlcbiAqICAgY29uc29sZS5sb2cocmFuZ2UuZW5kRGF0ZSk7IC8vIERhdGUgb2JqZWN0IGZvciBGcmlkYXlcbiAqICAgY29uc29sZS5sb2cocmFuZ2UuZGF0ZUxpc3Q/Lmxlbmd0aCk7IC8vIDUgKE1vbmRheSB0aHJvdWdoIEZyaWRheSlcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5MRFJhbmdlUmVzdWx0IHtcbiAgLyoqIEZvcm1hdHRlZCByYW5nZSBzdHJpbmcgKGUuZy4sIFwiMjAyNS0wMS0wNiB0byAyMDI1LTAxLTEwXCIpICovXG4gIGZvcm1hdHRlZFN0cmluZzogc3RyaW5nO1xuICAvKiogU3RhcnQgZGF0ZSBvZiB0aGUgcmFuZ2UgYXMgYSBuYXRpdmUgRGF0ZSBvYmplY3QgKi9cbiAgc3RhcnREYXRlOiBEYXRlO1xuICAvKiogRW5kIGRhdGUgb2YgdGhlIHJhbmdlIGFzIGEgbmF0aXZlIERhdGUgb2JqZWN0ICovXG4gIGVuZERhdGU6IERhdGU7XG4gIC8qKiBTdGFydCBkYXRlIGFzIGEgTW9tZW50LmpzIG9iamVjdCAqL1xuICBzdGFydE1vbWVudDogTW9tZW50O1xuICAvKiogRW5kIGRhdGUgYXMgYSBNb21lbnQuanMgb2JqZWN0ICovXG4gIGVuZE1vbWVudDogTW9tZW50O1xuICAvKiogQWx3YXlzIHRydWUgZm9yIHJhbmdlIHJlc3VsdHMgKi9cbiAgaXNSYW5nZTogdHJ1ZTtcbiAgLyoqIE9wdGlvbmFsIGxpc3Qgb2YgYWxsIGRhdGVzIGluIHRoZSByYW5nZSBhcyBNb21lbnQgb2JqZWN0cyAqL1xuICBkYXRlTGlzdD86IE1vbWVudFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOTERQYXJzZXIge1xuICBjaHJvbm9zOiBDaHJvbm9bXTtcbiAgbGFuZ3VhZ2VzOiBzdHJpbmdbXTtcbiAgXG4gIC8vIER5bmFtaWMgcmVnZXggZ2VuZXJhdGVkIGZyb20gdHJhbnNsYXRpb25zXG4gIHJlZ2V4UmVsYXRpdmU6IFJlZ0V4cDtcbiAgcmVnZXhSZWxhdGl2ZUNvbWJpbmVkOiBSZWdFeHA7IC8vIEZvciBcImluIDIgd2Vla3MgYW5kIDMgZGF5c1wiXG4gIHJlZ2V4V2Vla2RheTogUmVnRXhwO1xuICByZWdleFdlZWtkYXlXaXRoVGltZTogUmVnRXhwOyAvLyBGb3IgXCJuZXh0IE1vbmRheSBhdCAzcG1cIlxuICByZWdleFdlZWtkYXlPbmx5OiBSZWdFeHA7IC8vIEZvciBcIndlZG5lc2RheVwiICh3aXRob3V0IHByZWZpeClcbiAgcmVnZXhEYXRlUmFuZ2U6IFJlZ0V4cDsgLy8gRm9yIFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCJcbiAgcmVnZXhPcmRpbmFsT2ZNb250aDogUmVnRXhwOyAvLyBGb3IgXCJ0aGUgMTV0aCBvZiBuZXh0IG1vbnRoXCJcbiAgcmVnZXhMYXN0RGF5T2ZNb250aDogUmVnRXhwOyAvLyBGb3IgXCJsYXN0IGRheSBvZiBtb250aFwiXG4gIHJlZ2V4V2Vla2RheU9mTW9udGg6IFJlZ0V4cDsgLy8gRm9yIFwiZmlyc3QgTW9uZGF5IG9mIG1vbnRoXCJcbiAgLy8gRm9yIHN1ZmZpeCBsYW5ndWFnZXMgdGhhdCBwdXQgdGhlIHF1YW50aWZpZXIvdW5pdCBiZWZvcmUgdGhlIFwibGF0ZXJcIiBtYXJrZXJcbiAgLy8gaW5zdGVhZCBvZiBhbiBcImluXCIgcHJlZml4IChlLmcuIENoaW5lc2UgXCIy5aSp5b6MXCIgPSBcIjIgZGF5c1wiICsgXCLlvoxcIiA9IFwibGF0ZXJcIikuXG4gIHJlZ2V4UmVsYXRpdmVTdWZmaXg6IFJlZ0V4cCB8IG51bGw7XG4gIHJlZ2V4UmVsYXRpdmVDb21iaW5lZFN1ZmZpeDogUmVnRXhwIHwgbnVsbDsgLy8gRm9yIFwiMumAseWSjDPlpKnlvoxcIiAoMiB3ZWVrcyBhbmQgMyBkYXlzIGxhdGVyKVxuICAvLyBNaXJyb3Igb2YgcmVnZXhSZWxhdGl2ZVN1ZmZpeCBmb3IgdGhlIFBBU1QgZGlyZWN0aW9uIChlLmcuIFBvcnR1Z3Vlc2VcbiAgLy8gXCIzIGRpYXMgYXRyw6FzXCIgPSBcIjMgZGF5c1wiICsgXCJhdHLDoXNcIiA9IFwiYWdvXCIpLlxuICByZWdleEFnb1N1ZmZpeDogUmVnRXhwIHwgbnVsbDtcbiAgXG4gIC8vIEtleXdvcmRzIGZvciBhbGwgbGFuZ3VhZ2VzXG4gIGltbWVkaWF0ZUtleXdvcmRzOiBTZXQ8c3RyaW5nPjtcbiAgcHJlZml4S2V5d29yZHM6IHsgdGhpczogU2V0PHN0cmluZz47IG5leHQ6IFNldDxzdHJpbmc+OyBsYXN0OiBTZXQ8c3RyaW5nPiB9O1xuICB0aW1lVW5pdE1hcDogTWFwPHN0cmluZywgVGltZVVuaXQ+O1xuICBcbiAgLy8gQ2FjaGUgZm9yIHBhcnNlZCBkYXRlcyAoTFJVIGF2ZWMgbGltaXRlIGRlIDUwMCBlbnRyw6llcylcbiAgcHJpdmF0ZSBjYWNoZTogTFJVQ2FjaGU8c3RyaW5nLCBEYXRlPjtcbiAgcHJpdmF0ZSBjYWNoZURheTogbnVtYmVyOyAvLyBEYXkgb2YgeWVhciBmb3IgY2FjaGUgaW52YWxpZGF0aW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgTUFYX0NBQ0hFX1NJWkUgPSA1MDA7XG4gIFxuICAvLyBDb2xsZWN0cy9jYWNoZXMgdHJhbnNsYXRpb25zIGFjcm9zcyBhbGwgYWN0aXZlIGxhbmd1YWdlcyBhbmQgYnVpbGRzXG4gIC8vIHJlZ2V4IGFsdGVybmF0aW9ucyBmcm9tIHRoZW0gKHNlZSB0cmFuc2xhdGlvbi1jb2xsZWN0b3IudHMpXG4gIHByaXZhdGUgdGM6IFRyYW5zbGF0aW9uQ29sbGVjdG9yO1xuXG4gIC8vIFRpbWUgZGV0ZWN0b3JcbiAgcHJpdmF0ZSB0aW1lRGV0ZWN0b3I6IFRpbWVEZXRlY3RvcjtcblxuICBjb25zdHJ1Y3RvcihsYW5ndWFnZXM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5sYW5ndWFnZXMgPSBsYW5ndWFnZXM7XG4gICAgdGhpcy5jaHJvbm9zID0gZ2V0Q2hyb25vcyhsYW5ndWFnZXMpO1xuICAgIHRoaXMudGMgPSBuZXcgVHJhbnNsYXRpb25Db2xsZWN0b3IobGFuZ3VhZ2VzKTtcbiAgICB0aGlzLmluaXRpYWxpemVSZWdleCgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUtleXdvcmRzKCk7XG4gICAgdGhpcy5jYWNoZSA9IG5ldyBMUlVDYWNoZTxzdHJpbmcsIERhdGU+KHRoaXMuTUFYX0NBQ0hFX1NJWkUpO1xuICAgIHRoaXMuY2FjaGVEYXkgPSB0aGlzLmdldERheU9mWWVhcigpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgdGltZSBkZXRlY3RvclxuICAgIHRoaXMudGltZURldGVjdG9yID0gbmV3IFRpbWVEZXRlY3Rvcih7XG4gICAgICBsYW5ndWFnZXM6IHRoaXMubGFuZ3VhZ2VzLFxuICAgICAgY2hyb25vczogdGhpcy5jaHJvbm9zLFxuICAgICAgcmVnZXhSZWxhdGl2ZTogdGhpcy5yZWdleFJlbGF0aXZlLFxuICAgICAgcmVnZXhSZWxhdGl2ZUNvbWJpbmVkOiB0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZCxcbiAgICAgIHJlZ2V4V2Vla2RheTogdGhpcy5yZWdleFdlZWtkYXksXG4gICAgICByZWdleFdlZWtkYXlXaXRoVGltZTogdGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemVzIGR5bmFtaWMgcmVnZXggZnJvbSB0cmFuc2xhdGlvbnNcbiAgcHJpdmF0ZSBpbml0aWFsaXplUmVnZXgoKTogdm9pZCB7XG4gICAgY29uc3QgaW5Xb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwiaW5cIik7XG4gICAgY29uc3QgbmV4dFdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoXCJuZXh0XCIpO1xuICAgIGNvbnN0IGxhc3RXb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwibGFzdFwiKTtcbiAgICBjb25zdCB0aGlzV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcInRoaXNcIik7XG4gICAgY29uc3QgYW5kV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImFuZFwiKTtcbiAgICBjb25zdCBhdFdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoXCJhdFwiKTtcbiAgICBjb25zdCBmcm9tV29yZHMgPSB0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImZyb21cIik7XG4gICAgY29uc3QgdG9Xb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwidG9cIik7XG5cbiAgICAvLyBDb2xsZWN0IHdlZWtkYXlzIChsb3dlcmNhc2VkKSBhY3Jvc3MgYWxsIGxhbmd1YWdlcywgcGx1cyB0aGUgY29tbW9uXG4gICAgLy8gRW5nbGlzaCBhYmJyZXZpYXRpb25zIChtb24vdHVlLy4uLikgd2hpY2ggYXJlbid0IHBhcnQgb2YgdGhlIGRpY3Rpb25hcnkuXG4gICAgY29uc3Qgd2Vla2RheUtleXMgPSBbJ3N1bmRheScsICdtb25kYXknLCAndHVlc2RheScsICd3ZWRuZXNkYXknLCAndGh1cnNkYXknLCAnZnJpZGF5JywgJ3NhdHVyZGF5J107XG4gICAgY29uc3Qgd2Vla2RheXMgPSB3ZWVrZGF5S2V5cy5mbGF0TWFwKGtleSA9PiB0aGlzLnRjLmNvbGxlY3RXb3JkcyhrZXksIHsgbG93ZXJjYXNlOiB0cnVlIH0pKTtcbiAgICBpZiAodGhpcy5sYW5ndWFnZXMuaW5jbHVkZXMoJ2VuJykpIHtcbiAgICAgIHdlZWtkYXlzLnB1c2goJ21vbicsICd0dWUnLCAnd2VkJywgJ3RodScsICdmcmknLCAnc2F0JywgJ3N1bicpO1xuICAgIH1cblxuICAgIC8vIENvbGxlY3QgdGltZSB1bml0cyAobWludXRlL2hvdXIvZGF5L3dlZWsvbW9udGgveWVhcikgYWNyb3NzIGFsbCBsYW5ndWFnZXNcbiAgICBjb25zdCB0aW1lVW5pdEtleXMgPSBbJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICBjb25zdCB0aW1lVW5pdHMgPSB0aW1lVW5pdEtleXMuZmxhdE1hcChrZXkgPT4gdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5KSk7XG5cbiAgICBjb25zdCBpblBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oaW5Xb3Jkcyk7XG4gICAgY29uc3QgcHJlZml4UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihbLi4udGhpc1dvcmRzLCAuLi5uZXh0V29yZHMsIC4uLmxhc3RXb3Jkc10pO1xuICAgIGNvbnN0IHdlZWtkYXlQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKHdlZWtkYXlzKTtcbiAgICBjb25zdCB0aW1lVW5pdFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24odGltZVVuaXRzKTtcbiAgICBjb25zdCBhbmRQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKGFuZFdvcmRzKTtcbiAgICBjb25zdCBhdFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oYXRXb3Jkcyk7XG4gICAgY29uc3QgZnJvbVBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oZnJvbVdvcmRzKTtcbiAgICBjb25zdCB0b1BhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24odG9Xb3Jkcyk7XG5cbiAgICAvLyBTaW1wbGUgcmVnZXggZm9yIFwiaW4gMiBtaW51dGVzXCJcbiAgICB0aGlzLnJlZ2V4UmVsYXRpdmUgPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooPzoke2luUGF0dGVybn0pXFxcXHMrKFxcXFxkKylcXFxccyooJHt0aW1lVW5pdFBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFJlZ2V4IGZvciBjb21iaW5hdGlvbnMgXCJpbiAyIHdlZWtzIGFuZCAzIGRheXNcIlxuICAgIHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeXFxcXHMqKD86JHtpblBhdHRlcm59KVxcXFxzKyhcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccysoPzoke2FuZFBhdHRlcm59KVxcXFxzKyhcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBTaW1wbGUgcmVnZXggZm9yIFwibmV4dCBNb25kYXlcIlxuICAgIC8vIFVzZXMgXFxzKiAobm90IFxccyspIGJldHdlZW4gcHJlZml4IGFuZCB3ZWVrZGF5IHNvIGxhbmd1YWdlcyB3aXRob3V0IHNwYWNlc1xuICAgIC8vIGJldHdlZW4gd29yZHMgKGUuZy4gQ2hpbmVzZSBcIuS4i+S4gOWAi+aYn+acn+S4gFwiKSBzdGlsbCBtYXRjaC5cbiAgICB0aGlzLnJlZ2V4V2Vla2RheSA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKigke3ByZWZpeFBhdHRlcm59KVxcXFxzKigke3dlZWtkYXlQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBSZWdleCBmb3IgXCJuZXh0IE1vbmRheSBhdCAzcG1cIiAtIGNhcHR1cmVzIGRheSBhbmQgdGltZVxuICAgIHRoaXMucmVnZXhXZWVrZGF5V2l0aFRpbWUgPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooJHtwcmVmaXhQYXR0ZXJufSlcXFxccyooJHt3ZWVrZGF5UGF0dGVybn0pXFxcXHMrKD86JHthdFBhdHRlcm59KVxcXFxzKyguKykkYCxcbiAgICAgICdpJ1xuICAgICk7XG5cbiAgICAvLyBSZWdleCBmb3Igc2ltcGxlIHdlZWtkYXkgd2l0aG91dCBwcmVmaXggKGUuZy4sIFwid2VkbmVzZGF5XCIsIFwiZnJpZGF5XCIpXG4gICAgdGhpcy5yZWdleFdlZWtkYXlPbmx5ID0gbmV3IFJlZ0V4cChcbiAgICAgIGBeXFxcXHMqKCR7d2Vla2RheVBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFJlZ2V4IGZvciBcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiIC0gY2FwdHVyZXMgdHdvIHdlZWtkYXlzXG4gICAgdGhpcy5yZWdleERhdGVSYW5nZSA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKig/OiR7ZnJvbVBhdHRlcm59KVxcXFxzKigke3dlZWtkYXlQYXR0ZXJufSlcXFxccyooPzoke3RvUGF0dGVybn0pXFxcXHMqKCR7d2Vla2RheVBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIGNvbnN0IG9mUGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcIm9mXCIpO1xuICAgIGNvbnN0IGZpcnN0UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbkZvcihcImZpcnN0XCIpO1xuXG4gICAgLy8gUmVnZXggZm9yIFwidGhlIDE1dGggb2YgbmV4dCBtb250aFwiIG9yIFwibGUgMTUgZHUgbW9pcyBwcm9jaGFpblwiXG4gICAgLy8gUGF0dGVybjogKG9wdGlvbmFsIFwidGhlXCIvXCJsZVwiL1wiZGVyXCIpIChvcmRpbmFsIG51bWJlciBsaWtlIFwiMTV0aFwiLCBcIjE1w6htZVwiLCBcIjE1LlwiKSBcIm9mXCIvXCJkdVwiL1wiZGVzXCIgKG5leHQvbGFzdC90aGlzKSAobW9udGgpXG4gICAgLy8gQWxzbyBoYW5kbGVzIEZyZW5jaCBpbnZlcnNpb246IFwibGUgMTUgZHUgbW9pcyBwcm9jaGFpblwiIChtb250aCBiZWZvcmUgcHJlZml4KVxuICAgIC8vIEFsc28gaGFuZGxlcyBHZXJtYW46IFwiZGVyIDE1LiBkZXMgbsOkY2hzdGVuIE1vbmF0c1wiIChwcmVmaXggYmV0d2VlbiBcIm9mXCIgYW5kIG1vbnRoKVxuICAgIC8vIFVzaW5nIE9SRElOQUxfTlVNQkVSX1BBVFRFUk4gZnJvbSB1dGlscy50cyBmb3Igb3JkaW5hbCBtYXRjaGluZ1xuICAgIHRoaXMucmVnZXhPcmRpbmFsT2ZNb250aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKig/OnRoZXxsZXxkZXJ8ZGFzfGVsfGlsfG98ZGV8aGV0KT9cXFxccyooJHtPUkRJTkFMX05VTUJFUl9QQVRURVJOfSlcXFxccysoPzoke29mUGF0dGVybn0pXFxcXHMrKD86KCR7cHJlZml4UGF0dGVybn0pXFxcXHMrKT8oJHt0aW1lVW5pdFBhdHRlcm59KSg/OlxcXFxzKygke3ByZWZpeFBhdHRlcm59KSk/XFxcXHMqJGAsXG4gICAgICAnaSdcbiAgICApO1xuXG4gICAgLy8gUmVnZXggZm9yIFwibGFzdCBkYXkgb2YgbW9udGhcIiBvciBcImRlcm5pZXIgam91ciBkdSBtb2lzXCJcbiAgICBjb25zdCBkYXlQYXR0ZXJuID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uRm9yKFwiZGF5XCIpO1xuXG4gICAgLy8gTWFrZSBwcmVmaXggb3B0aW9uYWwgLSBcImxhc3QgZGF5IG9mIG1vbnRoXCIgd2l0aG91dCBwcmVmaXggbWVhbnMgXCJ0aGlzIG1vbnRoXCJcbiAgICAvLyBcImxhc3RcIiBoZXJlIGlzIGFuIGFkamVjdGl2ZSBtb2RpZnlpbmcgXCJkYXlcIiwgbm90IGEgdGVtcG9yYWwgcHJlZml4XG4gICAgLy8gQWxzbyBoYW5kbGUgRnJlbmNoIGludmVyc2lvbjogXCJkZXJuaWVyIGpvdXIgZHUgbW9pcyBwcm9jaGFpblwiIChtb250aCBiZWZvcmUgcHJlZml4KVxuICAgIC8vIFBhdHRlcm46IChvcHRpb25hbCBwcmVmaXgpIFwibGFzdFwiIChkYXkgd29yZCkgXCJvZlwiIChvcHRpb25hbCBwcmVmaXgpIChtb250aCkgKG9wdGlvbmFsIHByZWZpeCBhZnRlciBtb250aClcbiAgICAvLyBSZXVzZSBsYXN0V29yZHMgY29sbGVjdGVkIGFib3ZlIChsaW5lIDE0OC0xNTApXG4gICAgY29uc3QgbGFzdEFkamVjdGl2ZVBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24obGFzdFdvcmRzKTtcbiAgICBcbiAgICB0aGlzLnJlZ2V4TGFzdERheU9mTW9udGggPSBuZXcgUmVnRXhwKFxuICAgICAgYF5cXFxccyooPzooJHtwcmVmaXhQYXR0ZXJufSlcXFxccyspPygke2xhc3RBZGplY3RpdmVQYXR0ZXJufSlcXFxccysoJHtkYXlQYXR0ZXJufSlcXFxccysoPzoke29mUGF0dGVybn0pXFxcXHMrKD86KCR7cHJlZml4UGF0dGVybn0pXFxcXHMrKT8oJHt0aW1lVW5pdFBhdHRlcm59KSg/OlxcXFxzKygke3ByZWZpeFBhdHRlcm59KSk/XFxcXHMqJGAsXG4gICAgICAnaSdcbiAgICApO1xuXG4gICAgLy8gUmVnZXggZm9yIFwiZmlyc3QgTW9uZGF5IG9mIG1vbnRoXCIgb3IgXCJwcmVtaWVyIGx1bmRpIGR1IG1vaXNcIiBvciBcImxhc3QgTW9uZGF5IG9mIG1vbnRoXCJcbiAgICAvLyBBbHNvIGhhbmRsZSBGcmVuY2ggaW52ZXJzaW9uOiBcInByZW1pZXIgbHVuZGkgZHUgbW9pcyBwcm9jaGFpblwiIChtb250aCBiZWZvcmUgcHJlZml4KVxuICAgIHRoaXMucmVnZXhXZWVrZGF5T2ZNb250aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXlxcXFxzKigke2ZpcnN0UGF0dGVybn18JHtwcmVmaXhQYXR0ZXJufSlcXFxccysoJHt3ZWVrZGF5UGF0dGVybn0pXFxcXHMrKD86JHtvZlBhdHRlcm59KVxcXFxzKyg/Oigke3ByZWZpeFBhdHRlcm59KVxcXFxzKyk/KCR7dGltZVVuaXRQYXR0ZXJufSkoPzpcXFxccysoJHtwcmVmaXhQYXR0ZXJufSkpP1xcXFxzKiRgLFxuICAgICAgJ2knXG4gICAgKTtcblxuICAgIC8vIFN1ZmZpeC1zdHlsZSBsYW5ndWFnZXMgKGUuZy4gQ2hpbmVzZSBcIjLlpKnlvoxcIi9cIjLlpKnlkI5cIiwgSmFwYW5lc2UgXCIy5pel5b6MXCIpIHB1dFxuICAgIC8vIHRoZSBcImxhdGVyXCIgbWFya2VyIGFmdGVyIHRoZSBudW1iZXIgYW5kIHVuaXQgaW5zdGVhZCBvZiB1c2luZyBhbiBcImluXCJcbiAgICAvLyBwcmVmaXguIEVhY2ggbGFuZ3VhZ2UgY2FuIGxpc3QgaXRzIG1hcmtlcihzKSBleHBsaWNpdGx5IHVuZGVyIHRoZVxuICAgIC8vIFwibGF0ZXJcIiBrZXkgKGUuZy4gQ2hpbmVzZSBcIuW+jHzlkI5cIiBmb3IgYm90aCBzY3JpcHRzKTsgdGhpcyBrZXkgaXMgbmV2ZXJcbiAgICAvLyB1c2VkIGZvciBkaXNwbGF5L2ludGVycG9sYXRpb24sIG9ubHkgZm9yIHRoaXMgbWF0Y2hpbmcsIHNvIGl0J3Mgc2FmZSB0b1xuICAgIC8vIGxpc3QgbXVsdGlwbGUgc2NyaXB0IHZhcmlhbnRzIHdpdGggXCJ8XCIgdGhlIHNhbWUgd2F5IHdlZWtkYXkvcHJlZml4IHdvcmRzXG4gICAgLy8gZG8uIFRoZSBcImluZGF5c1wiIHRlbXBsYXRlIGl0c2VsZiBtdXN0IHN0YXkgYSBzaW5nbGUgZm9ybSBzaW5jZSBpdCdzXG4gICAgLy8gYWxzbyB1c2VkIHZlcmJhdGltIGluIGF1dG9zdWdnZXN0IGxhYmVscywgYW5kIHRlbXBsYXRlcyB3aXRoXG4gICAgLy8gJXt0aW1lRGVsdGF9IGRvbid0IGdldCBzcGxpdCBvbiBcInxcIiBsaWtlIHBsYWluIHdvcmQgbGlzdHMgZG8uXG4gICAgLy9cbiAgICAvLyBMYW5ndWFnZXMgdGhhdCBkb24ndCBkZWZpbmUgXCJsYXRlclwiIGZhbGwgYmFjayB0byBpbmZlcnJpbmcgdGhlIG1hcmtlclxuICAgIC8vIGZyb20gdGhlaXIgXCJpbmRheXNcIiB0ZW1wbGF0ZSAoZS5nLiBcIiV7dGltZURlbHRhfeWkqeW+jFwiIC0+IG1hcmtlciBcIuW+jFwiKSxcbiAgICAvLyBzbyB0aGlzIHN0aWxsIHdvcmtzIGZvciBhbnkgbGFuZ3VhZ2UgYXV0aG9yZWQgd2l0aG91dCB0aGUgZXh0cmEga2V5LlxuICAgIGNvbnN0IHN1ZmZpeE1hcmtlcnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IGxhbmcgb2YgdGhpcy5sYW5ndWFnZXMpIHtcbiAgICAgIGNvbnN0IGxhdGVyV29yZCA9IHRoaXMudGMudHJhbnNsYXRlKCdsYXRlcicsIGxhbmcpO1xuICAgICAgaWYgKGxhdGVyV29yZCAmJiBsYXRlcldvcmQgIT09ICdOT1RGT1VORCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBtYXJrZXIgb2YgbGF0ZXJXb3JkLnNwbGl0KCd8JykubWFwKHcgPT4gdy50cmltKCkpLmZpbHRlcih3ID0+IHcpKSB7XG4gICAgICAgICAgc3VmZml4TWFya2Vycy5hZGQobWFya2VyKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnRjLnRyYW5zbGF0ZSgnaW5kYXlzJywgbGFuZyk7XG4gICAgICBpZiAoIXRlbXBsYXRlIHx8IHRlbXBsYXRlID09PSAnTk9URk9VTkQnIHx8IHRlbXBsYXRlLmluZGV4T2YoJyV7dGltZURlbHRhfScpICE9PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVtYWluZGVyID0gdGVtcGxhdGUuc2xpY2UoJyV7dGltZURlbHRhfScubGVuZ3RoKTtcbiAgICAgIGNvbnN0IGRheVdvcmQgPSB0aGlzLnRjLnRyYW5zbGF0ZSgnZGF5JywgbGFuZyk7XG4gICAgICBpZiAoIWRheVdvcmQgfHwgZGF5V29yZCA9PT0gJ05PVEZPVU5EJykgY29udGludWU7XG4gICAgICBjb25zdCB1bml0VXNlZCA9IGRheVdvcmQuc3BsaXQoJ3wnKS5tYXAodyA9PiB3LnRyaW0oKSkuZmlsdGVyKHcgPT4gdykuZmluZCh2ID0+IHJlbWFpbmRlci5zdGFydHNXaXRoKHYpKTtcbiAgICAgIGlmICghdW5pdFVzZWQpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgbWFya2VyID0gcmVtYWluZGVyLnNsaWNlKHVuaXRVc2VkLmxlbmd0aCkudHJpbSgpO1xuICAgICAgaWYgKG1hcmtlcikgc3VmZml4TWFya2Vycy5hZGQobWFya2VyKTtcbiAgICB9XG5cbiAgICBpZiAoc3VmZml4TWFya2Vycy5zaXplID4gMCkge1xuICAgICAgY29uc3Qgc3VmZml4UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihBcnJheS5mcm9tKHN1ZmZpeE1hcmtlcnMpKTtcbiAgICAgIHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCA9IG5ldyBSZWdFeHAoXG4gICAgICAgIGBeXFxcXHMqKFxcXFxkKylcXFxccyooJHt0aW1lVW5pdFBhdHRlcm59KVxcXFxzKig/OiR7c3VmZml4UGF0dGVybn0pXFxcXHMqJGAsXG4gICAgICAgICdpJ1xuICAgICAgKTtcbiAgICAgIHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkU3VmZml4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgYF5cXFxccyooXFxcXGQrKVxcXFxzKigke3RpbWVVbml0UGF0dGVybn0pXFxcXHMqKD86JHthbmRQYXR0ZXJufSlcXFxccyooXFxcXGQrKVxcXFxzKigke3RpbWVVbml0UGF0dGVybn0pXFxcXHMqKD86JHtzdWZmaXhQYXR0ZXJufSlcXFxccyokYCxcbiAgICAgICAgJ2knXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlZ2V4UmVsYXRpdmVTdWZmaXggPSBudWxsO1xuICAgICAgdGhpcy5yZWdleFJlbGF0aXZlQ29tYmluZWRTdWZmaXggPSBudWxsO1xuICAgIH1cblxuICAgIC8vIFN1ZmZpeC1zdHlsZSBQQVNUIGxhbmd1YWdlcyAoZS5nLiBQb3J0dWd1ZXNlIFwiMyBkaWFzIGF0csOhc1wiID0gXCIzIGRheXNcIlxuICAgIC8vICsgXCJhdHLDoXNcIiA9IFwiYWdvXCIpLCB0aGUgcGFzdC1kaXJlY3Rpb24gbWlycm9yIG9mIHRoZSBcImxhdGVyXCIgbWVjaGFuaXNtXG4gICAgLy8gYWJvdmUuIFVubGlrZSBcImxhdGVyXCIsIHRoZXJlJ3Mgbm8gdGVtcGxhdGUgdG8gaW5mZXIgdGhpcyBtYXJrZXIgZnJvbVxuICAgIC8vICh0aGUgZGF5c2FnbyB0ZW1wbGF0ZSBhbHJlYWR5IGhhcyBpdHMgb3duICV7dGltZURlbHRhfS1wcmVmaXggZm9ybSwgXCJow6FcbiAgICAvLyAle3RpbWVEZWx0YX0gZGlhc1wiLCB3aGljaCBkb2Vzbid0IGltcGx5IGEgc3VmZml4IHZhcmlhbnQgYWxzbyBleGlzdHMpLFxuICAgIC8vIHNvIGxhbmd1YWdlcyBtdXN0IG9wdCBpbiBleHBsaWNpdGx5IHZpYSB0aGUgXCJhZ29zdWZmaXhcIiBrZXkuXG4gICAgY29uc3QgYWdvU3VmZml4TWFya2VycyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgYWdvU3VmZml4V29yZCA9IHRoaXMudGMudHJhbnNsYXRlKCdhZ29zdWZmaXgnLCBsYW5nKTtcbiAgICAgIGlmIChhZ29TdWZmaXhXb3JkICYmIGFnb1N1ZmZpeFdvcmQgIT09ICdOT1RGT1VORCcpIHtcbiAgICAgICAgZm9yIChjb25zdCBtYXJrZXIgb2YgYWdvU3VmZml4V29yZC5zcGxpdCgnfCcpLm1hcCh3ID0+IHcudHJpbSgpKS5maWx0ZXIodyA9PiB3KSkge1xuICAgICAgICAgIGFnb1N1ZmZpeE1hcmtlcnMuYWRkKG1hcmtlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWdvU3VmZml4TWFya2Vycy5zaXplID4gMCkge1xuICAgICAgY29uc3QgYWdvU3VmZml4UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihBcnJheS5mcm9tKGFnb1N1ZmZpeE1hcmtlcnMpKTtcbiAgICAgIHRoaXMucmVnZXhBZ29TdWZmaXggPSBuZXcgUmVnRXhwKFxuICAgICAgICBgXlxcXFxzKihcXFxcZCspXFxcXHMqKCR7dGltZVVuaXRQYXR0ZXJufSlcXFxccyooPzoke2Fnb1N1ZmZpeFBhdHRlcm59KVxcXFxzKiRgLFxuICAgICAgICAnaSdcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVnZXhBZ29TdWZmaXggPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIEluaXRpYWxpemVzIGtleXdvcmRzIGZvciBmYXN0IGRldGVjdGlvblxuICBwcml2YXRlIGluaXRpYWxpemVLZXl3b3JkcygpOiB2b2lkIHtcbiAgICB0aGlzLmltbWVkaWF0ZUtleXdvcmRzID0gbmV3IFNldChcbiAgICAgIFsnbm93JywgJ3RvZGF5JywgJ3RvbW9ycm93JywgJ3llc3RlcmRheSddLmZsYXRNYXAoa2V5ID0+IHRoaXMudGMuY29sbGVjdFdvcmRzKGtleSwgeyBsb3dlcmNhc2U6IHRydWUgfSkpXG4gICAgKTtcbiAgICB0aGlzLnByZWZpeEtleXdvcmRzID0ge1xuICAgICAgdGhpczogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcInRoaXNcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkpLFxuICAgICAgbmV4dDogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcIm5leHRcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkpLFxuICAgICAgbGFzdDogbmV3IFNldCh0aGlzLnRjLmNvbGxlY3RXb3JkcyhcImxhc3RcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkpLFxuICAgIH07XG5cbiAgICAvLyBUaW1lIHVuaXRzIHdpdGggbWFwcGluZyB0byBNb21lbnQuanMgdW5pdHNcbiAgICBjb25zdCB1bml0TWFwcGluZ3M6IHsga2V5OiBzdHJpbmc7IG1vbWVudFVuaXQ6IFRpbWVVbml0IH1bXSA9IFtcbiAgICAgIHsga2V5OiAnbWludXRlJywgbW9tZW50VW5pdDogJ21pbnV0ZXMnIH0sXG4gICAgICB7IGtleTogJ2hvdXInLCBtb21lbnRVbml0OiAnaG91cnMnIH0sXG4gICAgICB7IGtleTogJ2RheScsIG1vbWVudFVuaXQ6ICdkYXlzJyB9LFxuICAgICAgeyBrZXk6ICd3ZWVrJywgbW9tZW50VW5pdDogJ3dlZWtzJyB9LFxuICAgICAgeyBrZXk6ICdtb250aCcsIG1vbWVudFVuaXQ6ICdtb250aHMnIH0sXG4gICAgICB7IGtleTogJ3llYXInLCBtb21lbnRVbml0OiAneWVhcnMnIH0sXG4gICAgXTtcbiAgICB0aGlzLnRpbWVVbml0TWFwID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgbWFwcGluZyBvZiB1bml0TWFwcGluZ3MpIHtcbiAgICAgIGZvciAoY29uc3Qgd29yZCBvZiB0aGlzLnRjLmNvbGxlY3RXb3JkcyhtYXBwaW5nLmtleSwgeyBsb3dlcmNhc2U6IHRydWUgfSkpIHtcbiAgICAgICAgdGhpcy50aW1lVW5pdE1hcC5zZXQod29yZCwgbWFwcGluZy5tb21lbnRVbml0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAtLS0gVVRJTElUWSBGVU5DVElPTjogREFZIE5BTUUg4oaSIE5VTUVSSUMgSU5ERVggQ09OVkVSU0lPTiAtLS1cbiAgLy8gQ29udmVydHMgZGF5IG5hbWVzIGZyb20gYWxsIGxhbmd1YWdlcyB0byBudW1lcmljIGluZGljZXMgKDAtNilcbiAgLy8gTW9tZW50LmpzIHVzZXM6IDA9U3VuZGF5LCAxPU1vbmRheSwgMj1UdWVzZGF5LCAzPVdlZG5lc2RheSwgND1UaHVyc2RheSwgNT1GcmlkYXksIDY9U2F0dXJkYXlcbiAgcHJpdmF0ZSBnZXREYXlPZldlZWtJbmRleChkYXlOYW1lOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBkYXlOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBFbmdsaXNoIGRheSBuYW1lcy9hYmJyZXZpYXRpb25zLCBhbHdheXMgYXZhaWxhYmxlIHJlZ2FyZGxlc3Mgb2YgYWN0aXZlIGxhbmd1YWdlc1xuICAgIGNvbnN0IGRheU1hcDogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IHtcbiAgICAgICdzdW5kYXknOiAwLCAnc3VuJzogMCxcbiAgICAgICdtb25kYXknOiAxLCAnbW9uJzogMSxcbiAgICAgICd0dWVzZGF5JzogMiwgJ3R1ZSc6IDIsICd0dWVzJzogMixcbiAgICAgICd3ZWRuZXNkYXknOiAzLCAnd2VkJzogMyxcbiAgICAgICd0aHVyc2RheSc6IDQsICd0aHUnOiA0LCAndGh1cic6IDQsICd0aHVycyc6IDQsXG4gICAgICAnZnJpZGF5JzogNSwgJ2ZyaSc6IDUsXG4gICAgICAnc2F0dXJkYXknOiA2LCAnc2F0JzogNixcbiAgICB9O1xuXG4gICAgLy8gQWRkIGRheXMgZnJvbSBhbGwgZW5hYmxlZCBsYW5ndWFnZXNcbiAgICBjb25zdCBkYXlLZXlzID0gWydzdW5kYXknLCAnbW9uZGF5JywgJ3R1ZXNkYXknLCAnd2VkbmVzZGF5JywgJ3RodXJzZGF5JywgJ2ZyaWRheScsICdzYXR1cmRheSddO1xuICAgIGRheUtleXMuZm9yRWFjaCgoa2V5LCBpKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHZhcmlhbnQgb2YgdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5LCB7IGxvd2VyY2FzZTogdHJ1ZSB9KSkge1xuICAgICAgICBkYXlNYXBbdmFyaWFudF0gPSBpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRheU1hcFtub3JtYWxpemVkXSA/PyAwOyAvLyBEZWZhdWx0IHRvIFN1bmRheSBpZiBub3QgcmVjb2duaXplZFxuICB9XG5cbiAgLy8gLS0tIENBQ0hFIFVUSUxJVElFUyAtLS1cbiAgLy8gR2V0IGRheSBvZiB5ZWFyICgxLTM2NS8zNjYpIGZvciBjYWNoZSBpbnZhbGlkYXRpb25cbiAgcHJpdmF0ZSBnZXREYXlPZlllYXIoKTogbnVtYmVyIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIDAsIDApO1xuICAgIGNvbnN0IGRpZmYgPSBub3cuZ2V0VGltZSgpIC0gc3RhcnQuZ2V0VGltZSgpO1xuICAgIHJldHVybiBNYXRoLmZsb29yKGRpZmYgLyAoMTAwMCAqIDYwICogNjAgKiAyNCkpO1xuICB9XG5cbiAgLy8gR2VuZXJhdGUgY2FjaGUga2V5IGZyb20gc2VsZWN0ZWRUZXh0LCB3ZWVrU3RhcnRQcmVmZXJlbmNlLCBhbmQgY3VycmVudCBkYXlcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNhY2hlS2V5KHNlbGVjdGVkVGV4dDogc3RyaW5nLCB3ZWVrU3RhcnRQcmVmZXJlbmNlOiBEYXlPZldlZWspOiBzdHJpbmcge1xuICAgIGNvbnN0IGN1cnJlbnREYXkgPSB0aGlzLmdldERheU9mWWVhcigpO1xuICAgIC8vIEluY2x1ZGUgZGF5IGluIGtleSB0byBhdXRvbWF0aWNhbGx5IGludmFsaWRhdGUgY2FjaGUgd2hlbiBkYXkgY2hhbmdlc1xuICAgIHJldHVybiBgJHtzZWxlY3RlZFRleHQudHJpbSgpfXwke3dlZWtTdGFydFByZWZlcmVuY2V9fCR7Y3VycmVudERheX1gO1xuICB9XG5cbiAgLy8gU3RvcmUgcmVzdWx0IGluIGNhY2hlIGFuZCByZXR1cm4gaXRcbiAgcHJpdmF0ZSBjYWNoZUFuZFJldHVybihjYWNoZUtleTogc3RyaW5nLCByZXN1bHQ6IERhdGUpOiBEYXRlIHtcbiAgICAvLyBDcsOpZXIgdW5lIG5vdXZlbGxlIGluc3RhbmNlIGRlIERhdGUgcG91ciDDqXZpdGVyIGxlcyByw6lmw6lyZW5jZXMgcGFydGFnw6llc1xuICAgIGNvbnN0IGNhY2hlZERhdGUgPSBuZXcgRGF0ZShyZXN1bHQuZ2V0VGltZSgpKTtcbiAgICB0aGlzLmNhY2hlLnNldChjYWNoZUtleSwgY2FjaGVkRGF0ZSk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHJlc3VsdC5nZXRUaW1lKCkpO1xuICB9XG5cbiAgLy8gLS0tIE1BSU4gRU5HSU5FIC0tLVxuICAvKipcbiAgICogUGFyc2VzIGEgbmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyBhbmQgcmV0dXJucyBhIERhdGUgb2JqZWN0LlxuICAgKiBcbiAgICogU3VwcG9ydHMgbXVsdGlwbGUgbGFuZ3VhZ2VzIGFuZCB2YXJpb3VzIGRhdGUgZXhwcmVzc2lvbnM6XG4gICAqIC0gSW1tZWRpYXRlIGRhdGVzOiBcInRvZGF5XCIsIFwidG9tb3Jyb3dcIiwgXCJ5ZXN0ZXJkYXlcIiwgXCJub3dcIlxuICAgKiAtIFJlbGF0aXZlIGRhdGVzOiBcImluIDIgZGF5c1wiLCBcImluIDMgd2Vla3NcIiwgXCJpbiAxIG1vbnRoXCJcbiAgICogLSBDb21iaW5lZCBkdXJhdGlvbnM6IFwiaW4gMiB3ZWVrcyBhbmQgMyBkYXlzXCJcbiAgICogLSBXZWVrZGF5czogXCJuZXh0IE1vbmRheVwiLCBcImxhc3QgRnJpZGF5XCIsIFwidGhpcyBXZWRuZXNkYXlcIlxuICAgKiAtIFdlZWtkYXlzIHdpdGggdGltZTogXCJuZXh0IE1vbmRheSBhdCAzcG1cIlxuICAgKiAtIFBlcmlvZHM6IFwibmV4dCB3ZWVrXCIsIFwibmV4dCBtb250aFwiLCBcIm5leHQgeWVhclwiXG4gICAqIFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRUZXh0IC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyB0byBwYXJzZSAoZS5nLiwgXCJ0b21vcnJvd1wiLCBcImluIDIgZGF5c1wiLCBcIm5leHQgTW9uZGF5XCIpXG4gICAqIEBwYXJhbSB3ZWVrU3RhcnRQcmVmZXJlbmNlIC0gRGF5IG9mIHdlZWsgdG8gY29uc2lkZXIgYXMgd2VlayBzdGFydCAoYWZmZWN0cyBcIm5leHQgd2Vla1wiIGNhbGN1bGF0aW9ucylcbiAgICogQHJldHVybnMgUGFyc2VkIERhdGUgb2JqZWN0LCBvciBjdXJyZW50IGRhdGUgaWYgcGFyc2luZyBmYWlsc1xuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBwYXJzZXIgPSBuZXcgTkxEUGFyc2VyKFsnZW4nLCAnZnInXSk7XG4gICAqIGNvbnN0IGRhdGUgPSBwYXJzZXIuZ2V0UGFyc2VkRGF0ZShcInRvbW9ycm93XCIsIFwibW9uZGF5XCIpO1xuICAgKiBjb25zb2xlLmxvZyhkYXRlKTsgLy8gRGF0ZSBvYmplY3QgZm9yIHRvbW9ycm93XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0UGFyc2VkRGF0ZShzZWxlY3RlZFRleHQ6IHN0cmluZywgd2Vla1N0YXJ0UHJlZmVyZW5jZTogRGF5T2ZXZWVrKTogRGF0ZSB7XG4gICAgLy8gTmV0dG95ZXIgbGVzIGNhcmFjdMOocmVzIHNww6ljaWF1eCBlbiBmaW4gZGUgY2hhw65uZSAoZXg6IFwidG9tb3Jyb3chISFcIilcbiAgICBjb25zdCBjbGVhbmVkVGV4dCA9IHNlbGVjdGVkVGV4dC50cmltKCkucmVwbGFjZSgvWyE/Ll0rJC8sICcnKTtcbiAgICBjb25zdCB0ZXh0ID0gY2xlYW5lZFRleHQudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIFwibm93XCIvXCJ0b2RheVwiLCBcIlggYWdvXCIsIGFuZCBcImluIFggdW5pdHNcIiBhbGwgcmVzb2x2ZSByZWxhdGl2ZSB0byB0aGVcbiAgICAvLyBleGFjdCBjdXJyZW50IGluc3RhbnQgKG5vdCBqdXN0IHRoZSBjdXJyZW50IGRheSksIHNvIGNhY2hpbmcgdGhlbSBhdFxuICAgIC8vIHRoZSBjYWNoZSdzIGRheS1zaXplZCBncmFudWxhcml0eSB3b3VsZCByZXR1cm4gYSBzdGFsZSB0aW1lIG9uIGV2ZXJ5XG4gICAgLy8gY2FsbCBhZnRlciB0aGUgZmlyc3Qgd2l0aGluIHRoYXQgZGF5IChlLmcuIFwiaW4gMjAgbWludXRlc1wiIG9yIFwibm93XCJcbiAgICAvLyBhbHdheXMgcmV0dXJuaW5nIHRoZSBmaXJzdCByZXN1bHQgdGhleSBldmVyIHByb2R1Y2VkIHRoYXQgZGF5KS5cbiAgICAvLyBBbHdheXMgY29tcHV0ZSB0aGVzZSBmcmVzaCwgYnlwYXNzaW5nIHRoZSBjYWNoZSBlbnRpcmVseS5cbiAgICAvLyBcInRvbW9ycm93XCIvXCJ5ZXN0ZXJkYXlcIiByZXNvbHZlIHRvIGEgc3BlY2lmaWMgY2FsZW5kYXIgZGF5IGxpa2UgdGhlXG4gICAgLy8gb3RoZXIgY2FjaGVkIGV4cHJlc3Npb25zIGJlbG93LCBzbyB0aGV5IHN0YXkgb24gdGhlIGNhY2hlZCBwYXRoXG4gICAgLy8gKGhhbmRsZWQgYnkgdHJ5SW1tZWRpYXRlS2V5d29yZHMgZnVydGhlciBkb3duKS5cbiAgICBjb25zdCBub3dXb3JkcyA9IHRoaXMudGMuY29sbGVjdFdvcmRzKCdub3cnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KTtcbiAgICBjb25zdCB0b2RheVdvcmRzID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoJ3RvZGF5JywgeyBsb3dlcmNhc2U6IHRydWUgfSk7XG4gICAgY29uc3Qgdm9sYXRpbGVSZXN1bHQgPVxuICAgICAgKG5vd1dvcmRzLmluY2x1ZGVzKHRleHQpIHx8IHRvZGF5V29yZHMuaW5jbHVkZXModGV4dCkgPyBuZXcgRGF0ZSgpIDogbnVsbCkgPz9cbiAgICAgIHRoaXMudHJ5UGFzdEV4cHJlc3Npb25zKHRleHQsIGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlSZWxhdGl2ZUNhbGN1bGF0aW9uKGNsZWFuZWRUZXh0KTtcbiAgICBpZiAodm9sYXRpbGVSZXN1bHQpIHJldHVybiB2b2xhdGlsZVJlc3VsdDtcblxuICAgIC8vIFbDqXJpZmllciBzaSBsZSBqb3VyIGEgY2hhbmfDqSBwb3VyIGludmFsaWRlciBsZSBjYWNoZVxuICAgIGNvbnN0IGN1cnJlbnREYXkgPSB0aGlzLmdldERheU9mWWVhcigpO1xuICAgIGlmIChjdXJyZW50RGF5ICE9PSB0aGlzLmNhY2hlRGF5KSB7XG4gICAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gICAgICB0aGlzLmNhY2hlRGF5ID0gY3VycmVudERheTtcbiAgICB9XG5cbiAgICAvLyBHw6luw6lyZXIgbGEgY2zDqSBkdSBjYWNoZSBhdmVjIGxlIHRleHRlIG5ldHRvecOpIHBvdXIgcXVlIFwidG9tb3Jyb3dcIiBldCBcInRvbW9ycm93ISEhXCIgdXRpbGlzZW50IGxhIG3Dqm1lIGNsw6lcbiAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuZ2VuZXJhdGVDYWNoZUtleShjbGVhbmVkVGV4dCwgd2Vla1N0YXJ0UHJlZmVyZW5jZSk7XG5cbiAgICAvLyBWw6lyaWZpZXIgbGUgY2FjaGUgYXZhbnQgZGUgcGFyc2VyXG4gICAgY29uc3QgY2FjaGVkRGF0ZSA9IHRoaXMuY2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoY2FjaGVkRGF0ZSkge1xuICAgICAgLy8gQ3LDqWVyIHVuZSBub3V2ZWxsZSBpbnN0YW5jZSBkZSBEYXRlIHBvdXIgw6l2aXRlciBsZXMgcsOpZsOpcmVuY2VzIHBhcnRhZ8OpZXNcbiAgICAgIHJldHVybiBuZXcgRGF0ZShjYWNoZWREYXRlLmdldFRpbWUoKSk7XG4gICAgfVxuXG4gICAgLy8gRWFjaCB0cnkqKCkgbWV0aG9kIGJlbG93IHJldHVybnMgbnVsbCB3aGVuIGl0IGRvZXNuJ3QgcmVjb2duaXplIHRoZVxuICAgIC8vIGlucHV0LCBsZXR0aW5nIHRoZSBuZXh0IGxldmVsIGhhdmUgYSBzaG90IC0tIHNhbWUgTEVWRUwgMS00IG9yZGVyIHRoaXNcbiAgICAvLyBmaWxlIGhhcyBhbHdheXMgdXNlZCwganVzdCBzcGxpdCBpbnRvIG5hbWVkLCBpbmRlcGVuZGVudGx5IHJlYWRhYmxlXG4gICAgLy8gbWV0aG9kcyBpbnN0ZWFkIG9mIG9uZSBmdW5jdGlvbiB0aGF0IHVzZWQgdG8gcnVuIH41NzAgbGluZXMuXG4gICAgY29uc3QgcmVzdWx0ID1cbiAgICAgIHRoaXMudHJ5SW1tZWRpYXRlS2V5d29yZHModGV4dCkgPz9cbiAgICAgIHRoaXMudHJ5RGF0ZVJhbmdlU2hvcnRjdXQoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLnRyeVdlZWtkYXlzKGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlPcmRpbmFsT2ZNb250aChjbGVhbmVkVGV4dCkgPz9cbiAgICAgIHRoaXMudHJ5TGFzdERheU9mTW9udGgoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLnRyeVdlZWtkYXlPZk1vbnRoKGNsZWFuZWRUZXh0KSA/P1xuICAgICAgdGhpcy50cnlOZXh0UGVyaW9kU2hvcnRjdXQoY2xlYW5lZFRleHQpID8/XG4gICAgICB0aGlzLmNocm9ub0ZhbGxiYWNrKHNlbGVjdGVkVGV4dCwgd2Vla1N0YXJ0UHJlZmVyZW5jZSk7XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZUFuZFJldHVybihjYWNoZUtleSwgcmVzdWx0KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAxOiBJTU1FRElBVEUgS0VZV09SRFMgKFNwZWVkIGFuZCBQcmVjaXNpb24pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeUltbWVkaWF0ZUtleXdvcmRzKHRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuaW1tZWRpYXRlS2V5d29yZHMuaGFzKHRleHQpKSByZXR1cm4gbnVsbDtcblxuICAgIGlmICh0aGlzLnRjLmNvbGxlY3RXb3Jkcygnbm93JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3RvZGF5JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3RvbW9ycm93JywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXModGV4dCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoMSwgJ2RheXMnKS50b0RhdGUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGMuY29sbGVjdFdvcmRzKCd5ZXN0ZXJkYXknLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyh0ZXh0KSkge1xuICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KDEsICdkYXlzJykudG9EYXRlKCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExFVkVMIDEuNTogUEFTVCBFWFBSRVNTSU9OUyAoMiBkYXlzIGFnbywgaWwgeSBhIDMgbWluKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSB0cnlQYXN0RXhwcmVzc2lvbnModGV4dDogc3RyaW5nLCBjbGVhbmVkVGV4dDogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIC8vIENoZWNrIGZvciBcImFnb1wiIGV4cHJlc3Npb25zIGluIEVuZ2xpc2ggKGUuZy4sIFwiMiBkYXlzIGFnb1wiKS4gVW5saWtlXG4gICAgLy8gZXZlcnkgb3RoZXIgdW5pdC1jYXB0dXJpbmcgcmVnZXggaW4gdGhpcyBmaWxlLCB0aGlzIG9uZSBjYXB0dXJlcyB0aGVcbiAgICAvLyB1bml0IGdlbmVyaWNhbGx5IChcXHcrLCBub3QgcmVzdHJpY3RlZCB0byBrbm93biB0cmFuc2xhdGVkIHdvcmRzKSwgc29cbiAgICAvLyBndWVzc1VuaXQoKSdzIGFiYnJldmlhdGlvbi1ndWVzc2luZyBmYWxsYmFjayBpcyBnZW51aW5lbHkgcmVhY2hhYmxlXG4gICAgLy8gaGVyZSBmb3IgdW5pdHMgbm8gZW5hYmxlZCBsYW5ndWFnZSdzIGRpY3Rpb25hcnkgcmVjb2duaXplcy5cbiAgICBjb25zdCBhZ29NYXRjaCA9IHRleHQubWF0Y2goL14oXFxkKylcXHMrKFxcdyspXFxzK2FnbyQvaSk7XG4gICAgaWYgKGFnb01hdGNoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGFnb01hdGNoWzFdKTtcbiAgICAgIGNvbnN0IHVuaXRTdHIgPSBhZ29NYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgIGNvbnN0IHVuaXQgPSB0aGlzLmd1ZXNzVW5pdCh1bml0U3RyKTtcbiAgICAgIHJldHVybiBtb21lbnQoKS5zdWJ0cmFjdCh2YWx1ZSwgdW5pdCkudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIHBhc3QgZXhwcmVzc2lvbnMgaW4gYWxsIGxhbmd1YWdlcyAoZS5nLiwgXCJpbCB5IGEgMyBtaW51dGVzXCIsIFwidm9yIDIgU3R1bmRlblwiLCBldGMuKVxuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgbWludXRlc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcIm1pbnV0ZXNhZ29cIiwgbGFuZyk7XG4gICAgICBjb25zdCBob3Vyc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcImhvdXJzYWdvXCIsIGxhbmcpO1xuICAgICAgY29uc3QgZGF5c0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcImRheXNhZ29cIiwgbGFuZyk7XG4gICAgICBjb25zdCB3ZWVrc0Fnb1BhdHRlcm4gPSB0aGlzLnRjLnRyYW5zbGF0ZShcIndlZWtzYWdvXCIsIGxhbmcpO1xuICAgICAgY29uc3QgbW9udGhzQWdvUGF0dGVybiA9IHRoaXMudGMudHJhbnNsYXRlKFwibW9udGhzYWdvXCIsIGxhbmcpO1xuXG4gICAgICBjb25zdCBwYXR0ZXJucyA9IFtcbiAgICAgICAgeyBwYXR0ZXJuOiBtaW51dGVzQWdvUGF0dGVybiwgdW5pdDogJ21pbnV0ZXMnIGFzIGNvbnN0IH0sXG4gICAgICAgIHsgcGF0dGVybjogaG91cnNBZ29QYXR0ZXJuLCB1bml0OiAnaG91cnMnIGFzIGNvbnN0IH0sXG4gICAgICAgIHsgcGF0dGVybjogZGF5c0Fnb1BhdHRlcm4sIHVuaXQ6ICdkYXlzJyBhcyBjb25zdCB9LFxuICAgICAgICB7IHBhdHRlcm46IHdlZWtzQWdvUGF0dGVybiwgdW5pdDogJ3dlZWtzJyBhcyBjb25zdCB9LFxuICAgICAgICB7IHBhdHRlcm46IG1vbnRoc0Fnb1BhdHRlcm4sIHVuaXQ6ICdtb250aHMnIGFzIGNvbnN0IH0sXG4gICAgICBdO1xuXG4gICAgICBmb3IgKGNvbnN0IHsgcGF0dGVybiwgdW5pdCB9IG9mIHBhdHRlcm5zKSB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gdGhpcy5idWlsZEFnb1JlZ2V4KHBhdHRlcm4pO1xuICAgICAgICBpZiAocmVnZXgpIHtcbiAgICAgICAgICBjb25zdCBtYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHJlZ2V4KTtcbiAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQobWF0Y2hbMV0pO1xuICAgICAgICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTdWZmaXgtc3R5bGUgcGFzdCBleHByZXNzaW9ucywgZS5nLiBQb3J0dWd1ZXNlIFwiMyBkaWFzIGF0csOhc1wiICgzIGRheXMgYWdvKVxuICAgIGNvbnN0IGFnb1N1ZmZpeE1hdGNoID0gdGhpcy5yZWdleEFnb1N1ZmZpeCA/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhBZ29TdWZmaXgpIDogbnVsbDtcbiAgICBpZiAoYWdvU3VmZml4TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQoYWdvU3VmZml4TWF0Y2hbMV0pO1xuICAgICAgY29uc3QgdW5pdFN0ciA9IGFnb1N1ZmZpeE1hdGNoWzJdLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgY29uc3QgdW5pdCA9IHRoaXMuZ3Vlc3NVbml0KHVuaXRTdHIpO1xuICAgICAgcmV0dXJuIG1vbWVudCgpLnN1YnRyYWN0KHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIENvbnZlcnRzIGFuIFwiWCBhZ29cIiB0cmFuc2xhdGlvbiB0ZW1wbGF0ZSBpbnRvIGEgbWF0Y2hpbmcgcmVnZXguXG4gIC8vIEV4YW1wbGU6IFwiaWwgeSBhICV7dGltZURlbHRhfSBtaW51dGVzXCIgLT4gXCJpbCB5IGEgKFxcZCspIG1pbnV0ZXNcIlxuICAvLyBFeGFtcGxlOiBcItGH0LXRgNC10LcgJXt0aW1lRGVsdGF9INC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRiyDQvdCw0LfQsNC0XCIgKFJ1c3NpYW5cbiAgLy8gZ3JhbW1hdGljYWwgZm9ybXMpIC0+IFwi0YfQtdGA0LXQtyAoXFxkKykgKD860LzQuNC90YPRgnzQvNC40L3Rg9GC0YN80LzQuNC90YPRgtGLKSDQvdCw0LfQsNC0XCJcbiAgLy8gRXhhbXBsZTogXCIle3RpbWVEZWx0YX3lpKnliY1cIiAoQ2hpbmVzZSwgbm8gc3BhY2VzKSAtPiBcIihcXGQrKeWkqeWJjVwiXG4gIHByaXZhdGUgYnVpbGRBZ29SZWdleChwYXR0ZXJuOiBzdHJpbmcpOiBSZWdFeHAgfCBudWxsIHtcbiAgICBpZiAoIXBhdHRlcm4gfHwgcGF0dGVybiA9PT0gXCJOT1RGT1VORFwiKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGVzY2FwZVJlZ2V4ID0gKHN0cjogc3RyaW5nKSA9PiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcbiAgICAvLyBQbGFjZWhvbGRlciBzd2FwcGVkIGluIGJlZm9yZSBlc2NhcGluZyBhbmQgYmFjayBvdXQgYWZ0ZXJ3YXJkcywgc29cbiAgICAvLyAle3RpbWVEZWx0YX0gYmVjb21lcyBhIHJlYWwgY2FwdHVyZSBncm91cCBpbnN0ZWFkIG9mIGJlaW5nIG1hbmdsZWQgYnlcbiAgICAvLyBlc2NhcGluZyBpdHMgb3duIGluc2VydGVkIFwiKFxcZCspXCIsIGFuZCBzbyBpdCBzdGlsbCB3b3JrcyB3aGVuIGVtYmVkZGVkXG4gICAgLy8gaW4gYSB0b2tlbiB3aXRoIG5vIHN1cnJvdW5kaW5nIHdoaXRlc3BhY2UgKGUuZy4gQ2hpbmVzZSBcIiV7dGltZURlbHRhfeWkqeWJjVwiKS5cbiAgICBjb25zdCBQTEFDRUhPTERFUiA9ICdcXHUwMDAwVElNRURFTFRBXFx1MDAwMCc7XG5cbiAgICBjb25zdCByZWdleFN0ciA9IHBhdHRlcm5cbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAubWFwKHRva2VuID0+IHtcbiAgICAgICAgY29uc3Qgd2l0aFBsYWNlaG9sZGVyID0gdG9rZW4ucmVwbGFjZSgvJVxce3RpbWVEZWx0YVxcfS9nLCBQTEFDRUhPTERFUik7XG4gICAgICAgIC8vIFwifFwiIGluc2lkZSBhIHRva2VuIG1lYW5zIG11bHRpcGxlIGdyYW1tYXRpY2FsIGZvcm1zIG9mIHRoZSBzYW1lXG4gICAgICAgIC8vIHdvcmQgKGUuZy4gUnVzc2lhbiBcItC80LjQvdGD0YJ80LzQuNC90YPRgtGDfNC80LjQvdGD0YLRi1wiKTogdHVybiBpdCBpbnRvIGFuXG4gICAgICAgIC8vIGFsdGVybmF0aW9uIGluc3RlYWQgb2YgZXNjYXBpbmcgaXQgaW50byBhIGxpdGVyYWwgcGlwZS5cbiAgICAgICAgaWYgKHdpdGhQbGFjZWhvbGRlci5pbmNsdWRlcygnfCcpKSB7XG4gICAgICAgICAgY29uc3QgYWx0ZXJuYXRpdmVzID0gd2l0aFBsYWNlaG9sZGVyXG4gICAgICAgICAgICAuc3BsaXQoJ3wnKVxuICAgICAgICAgICAgLm1hcChhbHQgPT4gZXNjYXBlUmVnZXgoYWx0KS5zcGxpdChQTEFDRUhPTERFUikuam9pbignKFxcXFxkKyknKSk7XG4gICAgICAgICAgcmV0dXJuIGAoPzoke2FsdGVybmF0aXZlcy5qb2luKCd8Jyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVzY2FwZVJlZ2V4KHdpdGhQbGFjZWhvbGRlcikuc3BsaXQoUExBQ0VIT0xERVIpLmpvaW4oJyhcXFxcZCspJyk7XG4gICAgICB9KVxuICAgICAgLmpvaW4oJ1xcXFxzKycpO1xuXG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4ke3JlZ2V4U3RyfSRgLCAnaScpO1xuICB9XG5cbiAgLy8gU2hhcmVkIGFiYnJldmlhdGlvbi1ndWVzc2luZyBmYWxsYmFjayBmb3IgdW5pdCB3b3JkcyB0aGF0IGFyZW4ndCBpbiBhbnlcbiAgLy8gZW5hYmxlZCBsYW5ndWFnZSdzIGRpY3Rpb25hcnkuIE9ubHkgcmVhY2hhYmxlIGZyb20gY2FsbGVycyB3aG9zZSByZWdleFxuICAvLyBjYXB0dXJlcyB0aGUgdW5pdCBnZW5lcmljYWxseSAodGhlIGhhcmRjb2RlZCBFbmdsaXNoIFwiYWdvXCIgcmVnZXggYWJvdmUsXG4gIC8vIGFuZCB0aGUgbXVsdGktdW5pdCBcImluIFggYW5kIFlcIiBzcGxpdCBiZWxvdykgLS0gcmVnZXhSZWxhdGl2ZSBhbmQgdGhlXG4gIC8vIHN1ZmZpeCByZWdleGVzIHJlc3RyaWN0IHRoZWlyIGNhcHR1cmUgZ3JvdXAgdG8gYWxyZWFkeS1rbm93biB3b3Jkcywgc29cbiAgLy8gdGhpcyBmYWxsYmFjayBjYW4gbmV2ZXIgZmlyZSBmb3IgdGhlbSAodmVyaWZpZWQgZW1waXJpY2FsbHkgYmVmb3JlIHRoZVxuICAvLyBkZWFkIGJyYW5jaGVzIHRoYXQgdXNlZCB0byBzaXQgaW4gdGhvc2UgcGF0aHMgd2VyZSByZW1vdmVkKS5cbiAgcHJpdmF0ZSBndWVzc1VuaXQodW5pdFN0cjogc3RyaW5nKTogVGltZVVuaXQge1xuICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMudGltZVVuaXRNYXAuZ2V0KHVuaXRTdHIpO1xuICAgIGlmIChtYXBwZWQpIHtcbiAgICAgIHJldHVybiBtYXBwZWQ7XG4gICAgfVxuICAgIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ2gnKSkgcmV0dXJuICdob3Vycyc7XG4gICAgZWxzZSBpZiAodW5pdFN0ci5zdGFydHNXaXRoKCdkJykgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdqJykpIHJldHVybiAnZGF5cyc7XG4gICAgZWxzZSBpZiAodW5pdFN0ci5zdGFydHNXaXRoKCd3JykgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdzJykpIHJldHVybiAnd2Vla3MnO1xuICAgIGVsc2UgaWYgKHVuaXRTdHIgPT09ICdtJyB8fCB1bml0U3RyLnN0YXJ0c1dpdGgoJ21pbicpKSByZXR1cm4gJ21pbnV0ZXMnO1xuICAgIGVsc2UgaWYgKHVuaXRTdHIuc3RhcnRzV2l0aCgnbW8nKSB8fCB1bml0U3RyID09PSAnTScgfHwgdW5pdFN0ci5zdGFydHNXaXRoKCdtb2lzJykpIHJldHVybiAnbW9udGhzJztcbiAgICBlbHNlIGlmICh1bml0U3RyLnN0YXJ0c1dpdGgoJ3knKSB8fCB1bml0U3RyLnN0YXJ0c1dpdGgoJ2EnKSkgcmV0dXJuICd5ZWFycyc7XG4gICAgcmV0dXJuICdkYXlzJztcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAyOiBSRUxBVElWRSBDQUxDVUxBVElPTiAoaW4gMiBtaW51dGVzLCBpbiAxIHllYXIuLi4pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeVJlbGF0aXZlQ2FsY3VsYXRpb24oY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICAvLyBGaXJzdCBjaGVjayBjb21iaW5hdGlvbnMgXCJpbiAyIHdlZWtzIGFuZCAzIGRheXNcIiBvciBtdWx0aXBsZSBjb21iaW5hdGlvbnNcbiAgICAvLyBUcnkgdG8gcGFyc2UgbXVsdGlwbGUgY29tYmluYXRpb25zIGxpa2UgXCJpbiAxIHllYXIgYW5kIDIgbW9udGhzIGFuZCAzIHdlZWtzIGFuZCA0IGRheXNcIlxuICAgIGxldCBoYXNNdWx0aVVuaXRzID0gZmFsc2U7XG4gICAgY29uc3QgdG90YWxNb21lbnQgPSBtb21lbnQoKTtcblxuICAgIC8vIFRyeSB0byBtYXRjaCBhbGwgXCJYIHVuaXRcIiBwYXR0ZXJucyBhZnRlciBcImluXCJcbiAgICBjb25zdCBpblBhdHRlcm5zID0gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMubGFuZ3VhZ2VzLm1hcChsID0+IHRoaXMudGMudHJhbnNsYXRlKFwiaW5cIiwgbCkpLmZpbHRlcih2ID0+IHYgIT09IFwiTk9URk9VTkRcIikuZmxhdE1hcCh2ID0+IHYuc3BsaXQoXCJ8XCIpKSkpO1xuICAgIGNvbnN0IGFuZFBhdHRlcm5zID0gQXJyYXkuZnJvbShuZXcgU2V0KHRoaXMubGFuZ3VhZ2VzLm1hcChsID0+IHRoaXMudGMudHJhbnNsYXRlKFwiYW5kXCIsIGwpKS5maWx0ZXIodiA9PiB2ICE9PSBcIk5PVEZPVU5EXCIpLmZsYXRNYXAodiA9PiB2LnNwbGl0KFwifFwiKSkpKTtcblxuICAgIGNvbnN0IGluUmVnZXggPSBuZXcgUmVnRXhwKGBeKCR7dGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKGluUGF0dGVybnMpfSlcXFxccytgLCAnaScpO1xuICAgIGNvbnN0IGFuZFJlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXHMrKCR7dGhpcy50Yy5idWlsZEFsdGVybmF0aW9uKGFuZFBhdHRlcm5zKX0pXFxcXHMrYCwgJ2dpJyk7XG5cbiAgICBpZiAoY2xlYW5lZFRleHQubWF0Y2goaW5SZWdleCkpIHtcbiAgICAgIGNvbnN0IHdpdGhvdXRJbiA9IGNsZWFuZWRUZXh0LnJlcGxhY2UoaW5SZWdleCwgJycpO1xuICAgICAgY29uc3QgcGFydHMgPSB3aXRob3V0SW4uc3BsaXQoYW5kUmVnZXgpLmZpbHRlcihwID0+IHAgJiYgIWFuZFBhdHRlcm5zLnNvbWUoYSA9PiBhLnRvTG93ZXJDYXNlKCkgPT09IHAudHJpbSgpLnRvTG93ZXJDYXNlKCkpKTtcblxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgIC8vIE11bHRpcGxlIHVuaXRzIGRldGVjdGVkICgyIG9yIG1vcmUpXG4gICAgICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgICAgIGNvbnN0IHVuaXRNYXRjaCA9IHBhcnQudHJpbSgpLm1hdGNoKC9eKFxcZCspXFxzKyhbXlxcc10rKSQvaSk7XG4gICAgICAgICAgaWYgKHVuaXRNYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludCh1bml0TWF0Y2hbMV0pO1xuICAgICAgICAgICAgY29uc3QgdW5pdFN0ciA9IHVuaXRNYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgICAgIHRvdGFsTW9tZW50LmFkZCh2YWx1ZSwgdGhpcy5ndWVzc1VuaXQodW5pdFN0cikpO1xuICAgICAgICAgICAgaGFzTXVsdGlVbml0cyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNNdWx0aVVuaXRzKSB7XG4gICAgICAgICAgcmV0dXJuIHRvdGFsTW9tZW50LnRvRGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3VmZml4LXN0eWxlIGNvbWJpbmF0aW9ucywgZS5nLiBDaGluZXNlIFwiMumAseWSjDPlpKnlvoxcIiAoMiB3ZWVrcyBhbmQgMyBkYXlzIGxhdGVyKVxuICAgIGNvbnN0IHJlbENvbWJpbmVkU3VmZml4TWF0Y2ggPSB0aGlzLnJlZ2V4UmVsYXRpdmVDb21iaW5lZFN1ZmZpeCA/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZUNvbWJpbmVkU3VmZml4KSA6IG51bGw7XG4gICAgaWYgKHJlbENvbWJpbmVkU3VmZml4TWF0Y2gpIHtcbiAgICAgIGNvbnN0IHZhbHVlMSA9IHBhcnNlSW50KHJlbENvbWJpbmVkU3VmZml4TWF0Y2hbMV0pO1xuICAgICAgY29uc3QgdW5pdFN0cjEgPSByZWxDb21iaW5lZFN1ZmZpeE1hdGNoWzJdLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgY29uc3QgdmFsdWUyID0gcGFyc2VJbnQocmVsQ29tYmluZWRTdWZmaXhNYXRjaFszXSk7XG4gICAgICBjb25zdCB1bml0U3RyMiA9IHJlbENvbWJpbmVkU3VmZml4TWF0Y2hbNF0udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgIGNvbnN0IHVuaXQxID0gdGhpcy5ndWVzc1VuaXQodW5pdFN0cjEpO1xuICAgICAgY29uc3QgdW5pdDIgPSB0aGlzLmd1ZXNzVW5pdCh1bml0U3RyMik7XG5cbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQodmFsdWUxLCB1bml0MSkuYWRkKHZhbHVlMiwgdW5pdDIpLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIFRoZW4gY2hlY2sgc2ltcGxlIGV4cHJlc3Npb25zIFwiaW4gMiBtaW51dGVzXCJcbiAgICBjb25zdCByZWxNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZSk7XG4gICAgaWYgKHJlbE1hdGNoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHJlbE1hdGNoWzFdKTtcbiAgICAgIGNvbnN0IHVuaXRTdHIgPSByZWxNYXRjaFsyXS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgICAgLy8gdW5pdFN0ciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcmVnaXN0ZXJlZCBrZXkgaGVyZTogcmVnZXhSZWxhdGl2ZSdzXG4gICAgICAvLyB1bml0IGNhcHR1cmUgZ3JvdXAgaXMgYnVpbHQgZnJvbSB0aGlzLnRjLmNvbGxlY3RXb3JkcygpIGZvciB0aGUgc2FtZVxuICAgICAgLy8gc2l4IGtleXMgdGhhdCBwb3B1bGF0ZSB0aW1lVW5pdE1hcCwgc28gYSBzdWNjZXNzZnVsIHJlZ2V4IG1hdGNoXG4gICAgICAvLyBhbHJlYWR5IGltcGxpZXMgYSBoaXQgLS0gdGhlIGZhbGxiYWNrIGJlbG93IGlzIHVucmVhY2hhYmxlLlxuICAgICAgY29uc3QgdW5pdCA9IHRoaXMudGltZVVuaXRNYXAuZ2V0KHVuaXRTdHIpID8/IHRoaXMuZ3Vlc3NVbml0KHVuaXRTdHIpO1xuXG4gICAgICAvLyBNb21lbnRKUyBoYW5kbGVzIHllYXIgdHJhbnNpdGlvbnMgcGVyZmVjdGx5XG4gICAgICByZXR1cm4gbW9tZW50KCkuYWRkKHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBTdWZmaXgtc3R5bGUgc2ltcGxlIGV4cHJlc3Npb25zLCBlLmcuIENoaW5lc2UgXCIy5aSp5b6MXCIgKDIgZGF5cyBsYXRlcilcbiAgICBjb25zdCByZWxTdWZmaXhNYXRjaCA9IHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCA/IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhSZWxhdGl2ZVN1ZmZpeCkgOiBudWxsO1xuICAgIGlmIChyZWxTdWZmaXhNYXRjaCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBwYXJzZUludChyZWxTdWZmaXhNYXRjaFsxXSk7XG4gICAgICBjb25zdCB1bml0U3RyID0gcmVsU3VmZml4TWF0Y2hbMl0udG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgICBjb25zdCB1bml0ID0gdGhpcy5ndWVzc1VuaXQodW5pdFN0cik7XG4gICAgICByZXR1cm4gbW9tZW50KCkuYWRkKHZhbHVlLCB1bml0KS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAyLjU6IERBVEUgUkFOR0VTIChmcm9tIE1vbmRheSB0byBGcmlkYXkpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSZXR1cm5zIGp1c3QgdGhlIHN0YXJ0IGRhdGUsIGZvciBnZXRQYXJzZWREYXRlKCkncyBzaW5nbGUtRGF0ZSBjb250cmFjdFxuICAvLyAtLSBzZWUgZ2V0UGFyc2VkRGF0ZVJhbmdlKCkgZm9yIHRoZSBmdWxsIHJhbmdlIHdpdGggYSBkYXRlIGxpc3QuXG4gIHByaXZhdGUgdHJ5RGF0ZVJhbmdlU2hvcnRjdXQoY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCByYW5nZU1hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleERhdGVSYW5nZSk7XG4gICAgaWYgKCFyYW5nZU1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IHN0YXJ0RGF5TmFtZSA9IHJhbmdlTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBtID0gbW9tZW50KCk7XG4gICAgY29uc3Qgc3RhcnREYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoc3RhcnREYXlOYW1lKTtcblxuICAgIGNvbnN0IHN0YXJ0TW9tZW50ID0gbW9tZW50KCkuZGF5KHN0YXJ0RGF5SW5kZXgpO1xuICAgIGlmIChzdGFydE1vbWVudC5pc0JlZm9yZShtLCAnZGF5JykpIHtcbiAgICAgIHN0YXJ0TW9tZW50LmFkZCgxLCAnd2VlaycpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFydE1vbWVudC50b0RhdGUoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAzOiBXRUVLREFZUyAobmV4dCBmcmlkYXkuLi4pXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeVdlZWtkYXlzKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgLy8gRmlyc3QgY2hlY2sgXCJuZXh0IE1vbmRheSBhdCAzcG1cIlxuICAgIGNvbnN0IHdlZWtXaXRoVGltZU1hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleFdlZWtkYXlXaXRoVGltZSk7XG4gICAgaWYgKHdlZWtXaXRoVGltZU1hdGNoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSB3ZWVrV2l0aFRpbWVNYXRjaFsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgZGF5TmFtZSA9IHdlZWtXaXRoVGltZU1hdGNoWzJdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB0aW1lUGFydCA9IHdlZWtXaXRoVGltZU1hdGNoWzNdLnRyaW0oKTtcblxuICAgICAgY29uc3QgbSA9IG1vbWVudCgpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGRheU5hbWUpO1xuXG4gICAgICBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy50aGlzLmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uZGF5KGRheUluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uYWRkKDEsICd3ZWVrcycpLmRheShkYXlJbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgICAvLyBQb3VyIFwibGFzdC9kZXJuaWVyIDxqb3VyPlwiLCBvbiBjaWJsZSB0b3Vqb3VycyBsYSBzZW1haW5lIHByw6ljw6lkZW50ZVxuICAgICAgICBtLmRheShkYXlJbmRleCkuc3VidHJhY3QoMSwgJ3dlZWsnKTtcbiAgICAgIH1cblxuICAgICAgLy8gUGFyc2UgdGltZSB3aXRoIGNocm9uby1ub2RlLiBnZXRQYXJzZWREYXRlUmVzdWx0IHJldHVybnMgbnVsbFxuICAgICAgLy8gKHJhdGhlciB0aGFuIGEgXCJub3dcIiBwbGFjZWhvbGRlcikgd2hlbiBub3RoaW5nIG1hdGNoZWQsIHNvIGEgdGltZVxuICAgICAgLy8gcGFydCBjaHJvbm8tbm9kZSBjYW4ndCBwYXJzZSAoZS5nLiBcIm5leHQgTW9uZGF5IGF0IHp6cXF4eFwiKSBmYWxsc1xuICAgICAgLy8gYmFjayB0byB0aGUgYWxyZWFkeS1jb21wdXRlZCB3ZWVrZGF5IGRhdGUgYmVsb3csIGluc3RlYWQgb2ZcbiAgICAgIC8vIHNpbGVudGx5IGRpc2NhcmRpbmcgaXQgaW4gZmF2b3Igb2YgdGhlIGFjdHVhbCBjdXJyZW50IGRhdGUvdGltZS5cbiAgICAgIGNvbnN0IHRpbWVSZXN1bHQgPSB0aGlzLmdldFBhcnNlZERhdGVSZXN1bHQodGltZVBhcnQsIG0udG9EYXRlKCkpO1xuICAgICAgaWYgKHRpbWVSZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHRpbWVSZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRpbWUgcGFyc2luZyBmYWlscywgcmV0dXJuIGp1c3QgdGhlIGRhdGVcbiAgICAgIHJldHVybiBtLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIFRoZW4gY2hlY2sgc2ltcGxlIGV4cHJlc3Npb25zIFwibmV4dCBNb25kYXlcIlxuICAgIGNvbnN0IHdlZWtNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5KTtcbiAgICBpZiAod2Vla01hdGNoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSB3ZWVrTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGRheU5hbWUgPSB3ZWVrTWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcblxuICAgICAgY29uc3QgbSA9IG1vbWVudCgpO1xuICAgICAgY29uc3QgZGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGRheU5hbWUpO1xuXG4gICAgICBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy50aGlzLmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uZGF5KGRheUluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIG0uYWRkKDEsICd3ZWVrcycpLmRheShkYXlJbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgICAvLyBQb3VyIFwibGFzdC9kZXJuaWVyIDxqb3VyPlwiLCBvbiBjaWJsZSB0b3Vqb3VycyBsYSBzZW1haW5lIHByw6ljw6lkZW50ZVxuICAgICAgICBtLmRheShkYXlJbmRleCkuc3VidHJhY3QoMSwgJ3dlZWsnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciB3ZWVrZGF5IHdpdGhvdXQgcHJlZml4IChlLmcuLCBcIndlZG5lc2RheVwiLCBcImZyaWRheVwiKVxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIGludGVycHJldGVkIGFzIFwibmV4dCBbZGF5XVwiIG9yIFwidGhpcyBbZGF5XVwiIGlmIHRvZGF5XG4gICAgY29uc3Qgd2Vla09ubHlNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5T25seSk7XG4gICAgaWYgKHdlZWtPbmx5TWF0Y2gpIHtcbiAgICAgIGNvbnN0IGRheU5hbWUgPSB3ZWVrT25seU1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBtID0gbW9tZW50KCk7XG4gICAgICBjb25zdCBkYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoZGF5TmFtZSk7XG5cbiAgICAgIG0uZGF5KGRheUluZGV4KTtcbiAgICAgIC8vIElmIHRoZSBkYXkgaXMgaW4gdGhlIHBhc3QgKGJlZm9yZSB0b2RheSksIG1vdmUgdG8gbmV4dCB3ZWVrXG4gICAgICBpZiAobS5pc0JlZm9yZShtb21lbnQoKSwgJ2RheScpKSB7XG4gICAgICAgIG0uYWRkKDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAzLjVhOiBcInRoZSBYdGggb2YgbmV4dCBtb250aFwiIC8gXCJ0aGUgTnRoIG9mIG5leHQgeWVhclwiXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeU9yZGluYWxPZk1vbnRoKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3Qgb3JkaW5hbE9mTW9udGhNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhPcmRpbmFsT2ZNb250aCk7XG4gICAgaWYgKCFvcmRpbmFsT2ZNb250aE1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IG9yZGluYWxTdHIgPSBvcmRpbmFsT2ZNb250aE1hdGNoWzFdLnRyaW0oKTtcbiAgICAvLyBHcm91cHM6IFsxXT1vcmRpbmFsLCBbMl09cHJlZml4IGJlZm9yZSBtb250aCAob3B0aW9uYWwpLCBbM109bW9udGgsIFs0XT1wcmVmaXggYWZ0ZXIgbW9udGggKG9wdGlvbmFsLCBmb3IgRnJlbmNoKVxuICAgIGNvbnN0IHByZWZpeEJlZm9yZSA9IG9yZGluYWxPZk1vbnRoTWF0Y2hbMl0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG4gICAgY29uc3QgcGVyaW9kU3RyID0gb3JkaW5hbE9mTW9udGhNYXRjaFszXT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwcmVmaXhBZnRlciA9IG9yZGluYWxPZk1vbnRoTWF0Y2hbNF0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgICAvLyBVc2UgcHJlZml4IGFmdGVyIG1vbnRoIGlmIHByZXNlbnQgKEZyZW5jaCBpbnZlcnNpb24pLCBvdGhlcndpc2UgcHJlZml4IGJlZm9yZVxuICAgIGNvbnN0IHByZWZpeCA9IHByZWZpeEFmdGVyIHx8IHByZWZpeEJlZm9yZTtcblxuICAgIC8vIFBhcnNlIG9yZGluYWwgbnVtYmVyIChlLmcuLCBcIjE1dGhcIiAtPiAxNSwgXCJmaXJzdFwiIC0+IDEpXG4gICAgY29uc3QgZGF5TnVtYmVyID0gcGFyc2VPcmRpbmFsTnVtYmVyUGF0dGVybihvcmRpbmFsU3RyKTtcblxuICAgIC8vIERldGVybWluZSB3aGljaCBwZXJpb2QgKG1vbnRoL3llYXIpIHRvIHRhcmdldFxuICAgIGNvbnN0IHRhcmdldE1vbWVudCA9IG1vbWVudCgpO1xuICAgIGNvbnN0IGlzTW9udGggPSB0aGlzLnRjLmNvbGxlY3RXb3JkcygnbW9udGgnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyhwZXJpb2RTdHIpO1xuICAgIGNvbnN0IGlzWWVhciA9ICFpc01vbnRoICYmIHRoaXMudGMuY29sbGVjdFdvcmRzKCd5ZWFyJywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocGVyaW9kU3RyKTtcblxuICAgIGlmIChpc01vbnRoKSB7XG4gICAgICBpZiAocHJlZml4ICYmIHRoaXMucHJlZml4S2V5d29yZHMubmV4dC5oYXMocHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgfSBlbHNlIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5zdWJ0cmFjdCgxLCAnbW9udGhzJykuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgZGF5IG9mIG1vbnRoIChjbGFtcCB0byB2YWxpZCByYW5nZSlcbiAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gdGFyZ2V0TW9tZW50LmRheXNJbk1vbnRoKCk7XG4gICAgICBjb25zdCB0YXJnZXREYXkgPSBNYXRoLm1pbihkYXlOdW1iZXIsIGRheXNJbk1vbnRoKTtcbiAgICAgIHRhcmdldE1vbWVudC5kYXRlKHRhcmdldERheSk7XG4gICAgfSBlbHNlIGlmIChpc1llYXIpIHtcbiAgICAgIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5hZGQoMSwgJ3llYXJzJykuc3RhcnRPZigneWVhcicpO1xuICAgICAgfSBlbHNlIGlmIChwcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0LmhhcyhwcmVmaXgpKSB7XG4gICAgICAgIHRhcmdldE1vbWVudC5zdWJ0cmFjdCgxLCAneWVhcnMnKS5zdGFydE9mKCd5ZWFyJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3RhcnRPZigneWVhcicpO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3IgeWVhciwgaW50ZXJwcmV0IGFzIGRheSBvZiB5ZWFyICgxLTM2NS8zNjYpXG4gICAgICBjb25zdCBkYXlzSW5ZZWFyID0gdGFyZ2V0TW9tZW50LmlzTGVhcFllYXIoKSA/IDM2NiA6IDM2NTtcbiAgICAgIGNvbnN0IHRhcmdldERheU9mWWVhciA9IE1hdGgubWluKGRheU51bWJlciwgZGF5c0luWWVhcik7XG4gICAgICB0YXJnZXRNb21lbnQuZGF5T2ZZZWFyKHRhcmdldERheU9mWWVhcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldE1vbWVudC50b0RhdGUoKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCAzLjViOiBcImxhc3QgZGF5IG9mIG1vbnRoXCIgLyBcImRlcm5pZXIgam91ciBkdSBtb2lzXCJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIHByaXZhdGUgdHJ5TGFzdERheU9mTW9udGgoY2xlYW5lZFRleHQ6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCBsYXN0RGF5T2ZNb250aE1hdGNoID0gY2xlYW5lZFRleHQubWF0Y2godGhpcy5yZWdleExhc3REYXlPZk1vbnRoKTtcbiAgICBpZiAoIWxhc3REYXlPZk1vbnRoTWF0Y2gpIHJldHVybiBudWxsO1xuXG4gICAgLy8gR3JvdXBzOiBbMV09cHJlZml4IGJlZm9yZSBcImxhc3RcIiAob3B0aW9uYWwpLCBbMl09XCJsYXN0XCIsIFszXT1kYXksIFs0XT1wcmVmaXggYmVmb3JlIG1vbnRoIChvcHRpb25hbCksIFs1XT1tb250aCwgWzZdPXByZWZpeCBhZnRlciBtb250aCAob3B0aW9uYWwsIGZvciBGcmVuY2gpXG4gICAgY29uc3QgcHJlZml4QmVmb3JlID0gbGFzdERheU9mTW9udGhNYXRjaFsxXT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwZXJpb2RTdHIgPSBsYXN0RGF5T2ZNb250aE1hdGNoWzVdPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgIGNvbnN0IHByZWZpeEFmdGVyID0gbGFzdERheU9mTW9udGhNYXRjaFs2XT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwcmVmaXhCZWZvcmVNb250aCA9IGxhc3REYXlPZk1vbnRoTWF0Y2hbNF0/LnRvTG93ZXJDYXNlKCkgfHwgJyc7XG5cbiAgICAvLyBVc2UgcHJlZml4IGFmdGVyIG1vbnRoIGlmIHByZXNlbnQgKEZyZW5jaCBpbnZlcnNpb24pLCBvdGhlcndpc2UgcHJlZml4IGJlZm9yZSBtb250aCwgb3RoZXJ3aXNlIHByZWZpeCBiZWZvcmUgXCJsYXN0XCJcbiAgICBjb25zdCBwcmVmaXggPSBwcmVmaXhBZnRlciB8fCBwcmVmaXhCZWZvcmVNb250aCB8fCBwcmVmaXhCZWZvcmU7XG5cbiAgICBjb25zdCB0YXJnZXRNb21lbnQgPSBtb21lbnQoKTtcbiAgICBjb25zdCBpc01vbnRoID0gdGhpcy50Yy5jb2xsZWN0V29yZHMoJ21vbnRoJywgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocGVyaW9kU3RyKTtcbiAgICBpZiAoIWlzTW9udGgpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKHByZWZpeCkpIHtcbiAgICAgIHRhcmdldE1vbWVudC5hZGQoMSwgJ21vbnRocycpLmVuZE9mKCdtb250aCcpO1xuICAgIH0gZWxzZSBpZiAocHJlZml4ICYmIHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4KSkge1xuICAgICAgdGFyZ2V0TW9tZW50LnN1YnRyYWN0KDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gXCJ0aGlzXCIvbm8gcHJlZml4IGJvdGggbWVhbiBcInRoaXMgbW9udGhcIlxuICAgICAgdGFyZ2V0TW9tZW50LmVuZE9mKCdtb250aCcpO1xuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRNb21lbnQudG9EYXRlKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVWRUwgMy41YzogXCJmaXJzdCBNb25kYXkgb2YgbW9udGhcIiAvIFwibGFzdCBGcmlkYXkgb2YgbmV4dCBtb250aFwiXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBwcml2YXRlIHRyeVdlZWtkYXlPZk1vbnRoKGNsZWFuZWRUZXh0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3Qgd2Vla2RheU9mTW9udGhNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhXZWVrZGF5T2ZNb250aCk7XG4gICAgaWYgKCF3ZWVrZGF5T2ZNb250aE1hdGNoKSByZXR1cm4gbnVsbDtcblxuICAgIC8vIEdyb3VwczogWzFdPWZpcnN0L3ByZWZpeCwgWzJdPXdlZWtkYXksIFszXT1wcmVmaXggYmVmb3JlIG1vbnRoIChvcHRpb25hbCksIFs0XT1tb250aCwgWzVdPXByZWZpeCBhZnRlciBtb250aCAob3B0aW9uYWwsIGZvciBGcmVuY2gpXG4gICAgY29uc3QgcHJlZml4T3JGaXJzdCA9IHdlZWtkYXlPZk1vbnRoTWF0Y2hbMV0udG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBkYXlOYW1lID0gd2Vla2RheU9mTW9udGhNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHByZWZpeEJlZm9yZU1vbnRoID0gd2Vla2RheU9mTW9udGhNYXRjaFszXT8udG9Mb3dlckNhc2UoKSB8fCAnJztcbiAgICBjb25zdCBwZXJpb2RTdHIgPSB3ZWVrZGF5T2ZNb250aE1hdGNoWzRdPy50b0xvd2VyQ2FzZSgpIHx8ICcnO1xuICAgIGNvbnN0IHByZWZpeEFmdGVyID0gd2Vla2RheU9mTW9udGhNYXRjaFs1XT8udG9Mb3dlckNhc2UoKSB8fCAnJztcblxuICAgIC8vIFVzZSBwcmVmaXggYWZ0ZXIgbW9udGggaWYgcHJlc2VudCAoRnJlbmNoIGludmVyc2lvbiksIG90aGVyd2lzZSBwcmVmaXggYmVmb3JlIG1vbnRoLCBvdGhlcndpc2UgcHJlZml4T3JGaXJzdFxuICAgIGNvbnN0IG1vbnRoUHJlZml4ID0gcHJlZml4QWZ0ZXIgfHwgcHJlZml4QmVmb3JlTW9udGg7XG5cbiAgICBjb25zdCBkYXlJbmRleCA9IHRoaXMuZ2V0RGF5T2ZXZWVrSW5kZXgoZGF5TmFtZSk7XG4gICAgY29uc3QgaXNGaXJzdCA9IHRoaXMudGMuY29sbGVjdFdvcmRzKFwiZmlyc3RcIiwgeyBsb3dlcmNhc2U6IHRydWUgfSkuaW5jbHVkZXMocHJlZml4T3JGaXJzdCk7XG4gICAgY29uc3QgaXNNb250aCA9IHRoaXMudGMuY29sbGVjdFdvcmRzKCdtb250aCcsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZFN0cik7XG4gICAgaWYgKCFpc01vbnRoKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGlzTGFzdCA9ICFpc0ZpcnN0ICYmIHRoaXMucHJlZml4S2V5d29yZHMubGFzdC5oYXMocHJlZml4T3JGaXJzdCk7XG4gICAgbGV0IHRhcmdldE1vbWVudCA9IG1vbWVudCgpO1xuXG4gICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgIC8vIEZpcnN0IHdlZWtkYXkgb2YgbW9udGhcbiAgICAgIGlmIChtb250aFByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKG1vbnRoUHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgfSBlbHNlIGlmIChtb250aFByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLmxhc3QuaGFzKG1vbnRoUHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3VidHJhY3QoMSwgJ21vbnRocycpLnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRNb21lbnQuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgd2Vla2RheSBpbiB0aGUgdGFyZ2V0IG1vbnRoXG4gICAgICBjb25zdCBmaXJzdERheU9mTW9udGggPSB0YXJnZXRNb21lbnQuY2xvbmUoKS5zdGFydE9mKCdtb250aCcpO1xuICAgICAgY29uc3QgZmlyc3RXZWVrZGF5SW5kZXggPSBmaXJzdERheU9mTW9udGguZGF5KCk7XG4gICAgICBjb25zdCBkYXlzVG9BZGQgPSAoZGF5SW5kZXggLSBmaXJzdFdlZWtkYXlJbmRleCArIDcpICUgNztcbiAgICAgIHRhcmdldE1vbWVudCA9IGZpcnN0RGF5T2ZNb250aC5hZGQoZGF5c1RvQWRkLCAnZGF5cycpO1xuICAgIH0gZWxzZSBpZiAoaXNMYXN0KSB7XG4gICAgICAvLyBMYXN0IHdlZWtkYXkgb2YgbW9udGhcbiAgICAgIGlmIChtb250aFByZWZpeCAmJiB0aGlzLnByZWZpeEtleXdvcmRzLm5leHQuaGFzKG1vbnRoUHJlZml4KSkge1xuICAgICAgICB0YXJnZXRNb21lbnQuYWRkKDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSBpZiAobW9udGhQcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5sYXN0Lmhhcyhtb250aFByZWZpeCkpIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN1YnRyYWN0KDEsICdtb250aHMnKS5lbmRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgICAgdGFyZ2V0TW9tZW50LmVuZE9mKCdtb250aCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBGaW5kIHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgdGhlIHdlZWtkYXkgYnkgZ29pbmcgdG8gZW5kIG9mIG1vbnRoIGFuZCB3b3JraW5nIGJhY2t3YXJkc1xuICAgICAgY29uc3QgbGFzdERheU9mTW9udGggPSB0YXJnZXRNb21lbnQuY2xvbmUoKS5lbmRPZignbW9udGgnKTtcbiAgICAgIGNvbnN0IGxhc3RXZWVrZGF5SW5kZXggPSBsYXN0RGF5T2ZNb250aC5kYXkoKTtcbiAgICAgIGNvbnN0IGRheXNUb1N1YnRyYWN0ID0gKGxhc3RXZWVrZGF5SW5kZXggLSBkYXlJbmRleCArIDcpICUgNztcbiAgICAgIHRhcmdldE1vbWVudCA9IGxhc3REYXlPZk1vbnRoLnN1YnRyYWN0KGRheXNUb1N1YnRyYWN0LCAnZGF5cycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBQcmVmaXgtYmFzZWQgKG5leHQvdGhpcykgLSBkZWZhdWx0IHRvIGZpcnN0XG4gICAgICBpZiAobW9udGhQcmVmaXggJiYgdGhpcy5wcmVmaXhLZXl3b3Jkcy5uZXh0Lmhhcyhtb250aFByZWZpeCkpIHtcbiAgICAgICAgdGFyZ2V0TW9tZW50LmFkZCgxLCAnbW9udGhzJykuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwidGhpc1wiL25vIHByZWZpeCBib3RoIG1lYW4gXCJ0aGlzIG1vbnRoXCJcbiAgICAgICAgdGFyZ2V0TW9tZW50LnN0YXJ0T2YoJ21vbnRoJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIHdlZWtkYXkgaW4gdGhlIHRhcmdldCBtb250aFxuICAgICAgY29uc3QgZmlyc3REYXlPZk1vbnRoID0gdGFyZ2V0TW9tZW50LmNsb25lKCkuc3RhcnRPZignbW9udGgnKTtcbiAgICAgIGNvbnN0IGZpcnN0V2Vla2RheUluZGV4ID0gZmlyc3REYXlPZk1vbnRoLmRheSgpO1xuICAgICAgY29uc3QgZGF5c1RvQWRkID0gKGRheUluZGV4IC0gZmlyc3RXZWVrZGF5SW5kZXggKyA3KSAlIDc7XG4gICAgICB0YXJnZXRNb21lbnQgPSBmaXJzdERheU9mTW9udGguYWRkKGRheXNUb0FkZCwgJ2RheXMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0TW9tZW50LnRvRGF0ZSgpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExFVkVMIDRhOiBcIm5leHQgbW9udGhcIiAvIFwibmV4dCB5ZWFyXCIgc2hvcnRjdXQgKGJlZm9yZSBmYWxsaW5nIHRvIGNocm9uby1ub2RlKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTm90ZTogXCJuZXh0IHdlZWtcIiBpcyBpbnRlbnRpb25hbGx5IE5PVCBoYW5kbGVkIGhlcmUgLS0gaXQncyBsZWZ0IHRvXG4gIC8vIGdldFBhcnNlZERhdGVSYW5nZSgpIHRvIGdlbmVyYXRlIGEgZnVsbCBkYXRlIGxpc3QsIHNvIHRoYXQgY2FzZSBmYWxsc1xuICAvLyB0aHJvdWdoIHRvIHRoZSBjaHJvbm8tbm9kZSBmYWxsYmFjayBpbnN0ZWFkLlxuICBwcml2YXRlIHRyeU5leHRQZXJpb2RTaG9ydGN1dChjbGVhbmVkVGV4dDogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIC8vIFVzZXMgXFxzKiAobm90IFxccyspIHNvIHRoaXMgYWxzbyBtYXRjaGVzIGxhbmd1YWdlcyB3aXRob3V0IHNwYWNlcyBiZXR3ZWVuXG4gICAgLy8gd29yZHMgKGUuZy4gQ2hpbmVzZSBcIuS4i+S4gOWAi+aYn+acn1wiKS4gVGhlIHBlcmlvZCBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIGtub3duXG4gICAgLy8gd2Vlay9tb250aC95ZWFyIHdvcmRzIGRpcmVjdGx5IChub3QgYSBnZW5lcmljIFxcUysvXFx3KyBjYXB0dXJlKTogb3RoZXJ3aXNlIGFcbiAgICAvLyBzaG9ydGVyIHdvcmQgdGhhdCBpcyBhIHByZWZpeCBvZiBhIGxvbmdlciBvbmUgKGUuZy4gRnJlbmNoIFwicHJvY2hhaW5cIiB2c1xuICAgIC8vIFwicHJvY2hhaW5lXCIpIGNhbiBtYXRjaCBmaXJzdCBhbmQgbGVhdmUgdGhlIHJlbWFpbmluZyBsZXR0ZXJzIHRvIGJlXG4gICAgLy8gbWlzLWNhcHR1cmVkIGFzIHRoZSBwZXJpb2QuXG4gICAgY29uc3QgbmV4dFBhdHRlcm4gPSB0aGlzLnRjLmJ1aWxkQWx0ZXJuYXRpb24oQXJyYXkuZnJvbSh0aGlzLnByZWZpeEtleXdvcmRzLm5leHQpKTtcbiAgICBjb25zdCBwZXJpb2RXb3Jkc0FsbCA9IFsnd2VlaycsICdtb250aCcsICd5ZWFyJ10uZmxhdE1hcChrZXkgPT4gdGhpcy50Yy5jb2xsZWN0V29yZHMoa2V5KSk7XG4gICAgY29uc3QgcGVyaW9kUGF0dGVybkFsbCA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihwZXJpb2RXb3Jkc0FsbCk7XG4gICAgY29uc3QgbmV4dERhdGVNYXRjaCA9IGNsZWFuZWRUZXh0Lm1hdGNoKG5ldyBSZWdFeHAoYCgke25leHRQYXR0ZXJufSlcXFxccyooJHtwZXJpb2RQYXR0ZXJuQWxsfSlgLCAnaScpKTtcbiAgICBpZiAoIW5leHREYXRlTWF0Y2gpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgcGVyaW9kID0gbmV4dERhdGVNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGlzTmV4dFdlZWsgPSB0aGlzLnRjLmNvbGxlY3RXb3Jkcygnd2VlaycsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZCk7XG4gICAgaWYgKGlzTmV4dFdlZWspIHJldHVybiBudWxsO1xuXG4gICAgaWYgKHRoaXMudGMuY29sbGVjdFdvcmRzKCdtb250aCcsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoMSwgJ21vbnRocycpLnN0YXJ0T2YoJ21vbnRoJykudG9EYXRlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRjLmNvbGxlY3RXb3JkcygneWVhcicsIHsgbG93ZXJjYXNlOiB0cnVlIH0pLmluY2x1ZGVzKHBlcmlvZCkpIHtcbiAgICAgIHJldHVybiBtb21lbnQoKS5hZGQoMSwgJ3llYXJzJykuc3RhcnRPZigneWVhcicpLnRvRGF0ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBMRVZFTCA0YjogVEhFIFJFU1QgKGNocm9uby1ub2RlIGxpYnJhcnksIGZpbmFsIGZhbGxiYWNrKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgcHJpdmF0ZSBjaHJvbm9GYWxsYmFjayhzZWxlY3RlZFRleHQ6IHN0cmluZywgd2Vla1N0YXJ0UHJlZmVyZW5jZTogRGF5T2ZXZWVrKTogRGF0ZSB7XG4gICAgaWYgKCF0aGlzLmNocm9ub3MgfHwgdGhpcy5jaHJvbm9zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBEYXRlKCk7XG5cbiAgICAvLyBXZSB1c2UgdGhlIFwiQmVzdCBTY29yZVwiIHRlY2huaXF1ZSB0byBjaG9vc2UgYmV0d2VlbiBFTiBhbmQgRlJcbiAgICBjb25zdCB3ZWVrU3RhcnQgPSB3ZWVrU3RhcnRQcmVmZXJlbmNlID09PSBcImxvY2FsZS1kZWZhdWx0XCIgPyBnZXRMb2NhbGVXZWVrU3RhcnQoKSA6IHdlZWtTdGFydFByZWZlcmVuY2U7XG4gICAgY29uc3QgbG9jYWxlID0geyB3ZWVrU3RhcnQ6IGdldFdlZWtOdW1iZXIod2Vla1N0YXJ0KSB9O1xuICAgIGNvbnN0IHJlZmVyZW5jZURhdGUgPSBuZXcgRGF0ZSgpO1xuXG4gICAgLy8gU3RhbmRhcmQgbGlicmFyeSBjYWxsIHdpdGggZm9yY2VkIGZvcndhcmREYXRlXG4gICAgY29uc3QgY2hyb25vUmVzdWx0ID0gdGhpcy5nZXRQYXJzZWREYXRlUmVzdWx0KHNlbGVjdGVkVGV4dCwgcmVmZXJlbmNlRGF0ZSwge1xuICAgICAgbG9jYWxlLFxuICAgICAgZm9yd2FyZERhdGU6IHRydWVcbiAgICB9IGFzIFBhcnNpbmdPcHRpb24pO1xuICAgIC8vIE5vdGhpbmcgbWF0Y2hlZCBhbnl3aGVyZTogdGhpcyBpcyB0aGUgZmluYWwgZmFsbGJhY2sgbGV2ZWwsIHNvIChwZXJcbiAgICAvLyB0aGlzIG1ldGhvZCdzIGRvY3VtZW50ZWQgY29udHJhY3QpIGZhbGwgYmFjayB0byB0aGUgY3VycmVudCBkYXRlLlxuICAgIHJldHVybiBjaHJvbm9SZXN1bHQgPz8gbmV3IERhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgcmFuZ2Ugc3RyaW5nIGFuZCByZXR1cm5zIGEgcmFuZ2UgcmVzdWx0LlxuICAgKiBcbiAgICogU3VwcG9ydHMgdmFyaW91cyByYW5nZSBleHByZXNzaW9uczpcbiAgICogLSBXZWVrZGF5IHJhbmdlczogXCJmcm9tIE1vbmRheSB0byBGcmlkYXlcIlxuICAgKiAtIFdlZWsgcmFuZ2VzOiBcIm5leHQgd2Vla1wiIChyZXR1cm5zIGFsbCBkYXlzIG9mIG5leHQgd2VlaylcbiAgICogLSBXb3JrcyBpbiBhbGwgZW5hYmxlZCBsYW5ndWFnZXMgd2l0aCBuYXRpdmUgdHJhbnNsYXRpb25zXG4gICAqIFxuICAgKiBAcGFyYW0gc2VsZWN0ZWRUZXh0IC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHJhbmdlIHN0cmluZyAoZS5nLiwgXCJmcm9tIE1vbmRheSB0byBGcmlkYXlcIiwgXCJuZXh0IHdlZWtcIilcbiAgICogQHBhcmFtIHdlZWtTdGFydFByZWZlcmVuY2UgLSBEYXkgb2Ygd2VlayB0byBjb25zaWRlciBhcyB3ZWVrIHN0YXJ0XG4gICAqIEByZXR1cm5zIE5MRFJhbmdlUmVzdWx0IG9iamVjdCB3aXRoIHN0YXJ0L2VuZCBkYXRlcyBhbmQgZGF0ZSBsaXN0LCBvciBudWxsIGlmIG5vdCBhIHJhbmdlXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBhcnNlciA9IG5ldyBOTERQYXJzZXIoWydlbicsICdmciddKTtcbiAgICogY29uc3QgcmFuZ2UgPSBwYXJzZXIuZ2V0UGFyc2VkRGF0ZVJhbmdlKFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCIsIFwibW9uZGF5XCIpO1xuICAgKiBpZiAocmFuZ2UpIHtcbiAgICogICBjb25zb2xlLmxvZyhyYW5nZS5kYXRlTGlzdD8ubGVuZ3RoKTsgLy8gNSAoTW9uZGF5IHRocm91Z2ggRnJpZGF5KVxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0UGFyc2VkRGF0ZVJhbmdlKHNlbGVjdGVkVGV4dDogc3RyaW5nLCB3ZWVrU3RhcnRQcmVmZXJlbmNlOiBEYXlPZldlZWspOiBOTERSYW5nZVJlc3VsdCB8IG51bGwge1xuICAgIC8vIENoZWNrIFwiZnJvbSBNb25kYXkgdG8gRnJpZGF5XCJcbiAgICBjb25zdCByYW5nZU1hdGNoID0gc2VsZWN0ZWRUZXh0Lm1hdGNoKHRoaXMucmVnZXhEYXRlUmFuZ2UpO1xuICAgIGlmIChyYW5nZU1hdGNoKSB7XG4gICAgICBjb25zdCBzdGFydERheU5hbWUgPSByYW5nZU1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBlbmREYXlOYW1lID0gcmFuZ2VNYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgXG4gICAgICBjb25zdCBtID0gbW9tZW50KCk7XG4gICAgICBjb25zdCBzdGFydERheUluZGV4ID0gdGhpcy5nZXREYXlPZldlZWtJbmRleChzdGFydERheU5hbWUpO1xuICAgICAgY29uc3QgZW5kRGF5SW5kZXggPSB0aGlzLmdldERheU9mV2Vla0luZGV4KGVuZERheU5hbWUpO1xuICAgICAgXG4gICAgICAvLyBGaW5kIG5leHQgc3RhcnQgZGF5XG4gICAgICBjb25zdCBzdGFydE1vbWVudCA9IG1vbWVudCgpLmRheShzdGFydERheUluZGV4KTtcbiAgICAgIGlmIChzdGFydE1vbWVudC5pc0JlZm9yZShtLCAnZGF5JykpIHtcbiAgICAgICAgc3RhcnRNb21lbnQuYWRkKDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZpbmQgbmV4dCBlbmQgZGF5IChtdXN0IGJlIGFmdGVyIG9yIGVxdWFsIHRvIHN0YXJ0IGRheSlcbiAgICAgIGxldCBlbmRNb21lbnQgPSBtb21lbnQoKS5kYXkoZW5kRGF5SW5kZXgpO1xuICAgICAgLy8gSWYgZW5kIGRheSBpcyBiZWZvcmUgc3RhcnQgZGF5LCB0YWtlIHRoZSBvbmUgZnJvbSBuZXh0IHdlZWtcbiAgICAgIGlmIChlbmRNb21lbnQuaXNCZWZvcmUoc3RhcnRNb21lbnQsICdkYXknKSkge1xuICAgICAgICBlbmRNb21lbnQuYWRkKDEsICd3ZWVrJyk7XG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgZW5kTW9tZW50IGlzIGFsd2F5cyBhZnRlciBvciBlcXVhbCB0byBzdGFydE1vbWVudFxuICAgICAgaWYgKGVuZE1vbWVudC5pc0JlZm9yZShzdGFydE1vbWVudCwgJ2RheScpKSB7XG4gICAgICAgIGVuZE1vbWVudCA9IHN0YXJ0TW9tZW50LmNsb25lKCkuYWRkKDEsICd3ZWVrJykuZGF5KGVuZERheUluZGV4KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc3QgZm9ybWF0ID0gXCJZWVlZLU1NLUREXCI7XG4gICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IHN0YXJ0TW9tZW50LmZvcm1hdChmb3JtYXQpO1xuICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZW5kTW9tZW50LmZvcm1hdChmb3JtYXQpO1xuICAgICAgXG4gICAgICAvLyBHZW5lcmF0ZSBsaXN0IG9mIGFsbCBkYXRlcyBpbiByYW5nZVxuICAgICAgY29uc3QgZGF0ZUxpc3Q6IE1vbWVudFtdID0gW107XG4gICAgICBjb25zdCBjdXJyZW50TW9tZW50ID0gc3RhcnRNb21lbnQuY2xvbmUoKTtcbiAgICAgIHdoaWxlIChjdXJyZW50TW9tZW50LmlzU2FtZU9yQmVmb3JlKGVuZE1vbWVudCwgJ2RheScpKSB7XG4gICAgICAgIGRhdGVMaXN0LnB1c2goY3VycmVudE1vbWVudC5jbG9uZSgpKTtcbiAgICAgICAgY3VycmVudE1vbWVudC5hZGQoMSwgJ2RheScpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCByZXN1bHQ6IE5MRFJhbmdlUmVzdWx0ID0ge1xuICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IGAke3N0YXJ0Rm9ybWF0dGVkfSB0byAke2VuZEZvcm1hdHRlZH1gLFxuICAgICAgICBzdGFydERhdGU6IHN0YXJ0TW9tZW50LnRvRGF0ZSgpLFxuICAgICAgICBlbmREYXRlOiBlbmRNb21lbnQudG9EYXRlKCksXG4gICAgICAgIHN0YXJ0TW9tZW50OiBzdGFydE1vbWVudC5jbG9uZSgpLFxuICAgICAgICBlbmRNb21lbnQ6IGVuZE1vbWVudC5jbG9uZSgpLFxuICAgICAgICBpc1JhbmdlOiB0cnVlIGFzIGNvbnN0LFxuICAgICAgICBkYXRlTGlzdDogZGF0ZUxpc3QsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgXG4gICAgLy8gQ2hlY2sgXCJuZXh0IHdlZWtcIiBhcyByYW5nZSAoYm90aCBcIm5leHQgd2Vla1wiIGFuZCBcIndlZWsgbmV4dFwiIGZvciBsYW5ndWFnZXMgbGlrZSBGcmVuY2gpXG4gICAgLy8gVXNlcyBcXHMqIChub3QgXFxzKykgc28gdGhpcyBhbHNvIG1hdGNoZXMgbGFuZ3VhZ2VzIHdpdGhvdXQgc3BhY2VzIGJldHdlZW5cbiAgICAvLyB3b3JkcyAoZS5nLiBDaGluZXNlIFwi5LiL5LiA5YCL5pif5pyfXCIpLiBUaGUgcGVyaW9kIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUga25vd25cbiAgICAvLyBcIndlZWtcIiB3b3JkcyBkaXJlY3RseSAobm90IGEgZ2VuZXJpYyBcXFMrL1xcdysgY2FwdHVyZSk6IG90aGVyd2lzZSBhIHNob3J0ZXJcbiAgICAvLyB3b3JkIHRoYXQgaXMgYSBwcmVmaXggb2YgYSBsb25nZXIgb25lIChlLmcuIEZyZW5jaCBcInByb2NoYWluXCIgdnMgXCJwcm9jaGFpbmVcIilcbiAgICAvLyBjYW4gbWF0Y2ggZmlyc3QgYW5kIGxlYXZlIHRoZSByZW1haW5pbmcgbGV0dGVycyB0byBiZSBtaXMtY2FwdHVyZWQgYXMgdGhlIHBlcmlvZC5cbiAgICBjb25zdCBuZXh0UGF0dGVybiA9IHRoaXMudGMuYnVpbGRBbHRlcm5hdGlvbihBcnJheS5mcm9tKHRoaXMucHJlZml4S2V5d29yZHMubmV4dCkpO1xuICAgIGNvbnN0IHdlZWtQYXR0ZXJuQWxsID0gdGhpcy50Yy5idWlsZEFsdGVybmF0aW9uRm9yKCd3ZWVrJyk7XG4gICAgLy8gRmlyc3QgdHJ5IFwibmV4dCB3ZWVrXCIgcGF0dGVyblxuICAgIGxldCBuZXh0V2Vla01hdGNoID0gc2VsZWN0ZWRUZXh0Lm1hdGNoKG5ldyBSZWdFeHAoYCgke25leHRQYXR0ZXJufSlcXFxccyooJHt3ZWVrUGF0dGVybkFsbH0pYCwgJ2knKSk7XG4gICAgbGV0IHBlcmlvZEluZGV4ID0gMjsgLy8gSW5kZXggb2YgcGVyaW9kIGluIG1hdGNoIGFycmF5XG4gICAgaWYgKCFuZXh0V2Vla01hdGNoKSB7XG4gICAgICAvLyBUcnkgcmV2ZXJzZSBwYXR0ZXJuIFwid2VlayBuZXh0XCIgZm9yIGxhbmd1YWdlcyBsaWtlIEZyZW5jaFxuICAgICAgbmV4dFdlZWtNYXRjaCA9IHNlbGVjdGVkVGV4dC5tYXRjaChuZXcgUmVnRXhwKGAoJHt3ZWVrUGF0dGVybkFsbH0pXFxcXHMqKCR7bmV4dFBhdHRlcm59KWAsICdpJykpO1xuICAgICAgaWYgKG5leHRXZWVrTWF0Y2gpIHtcbiAgICAgICAgcGVyaW9kSW5kZXggPSAxOyAvLyBQZXJpb2QgaXMgbm93IGF0IGluZGV4IDFcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKG5leHRXZWVrTWF0Y2gpIHtcbiAgICAgIGNvbnN0IHBlcmlvZCA9IG5leHRXZWVrTWF0Y2hbcGVyaW9kSW5kZXhdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodGhpcy50Yy5jb2xsZWN0V29yZHMoJ3dlZWsnLCB7IGxvd2VyY2FzZTogdHJ1ZSB9KS5pbmNsdWRlcyhwZXJpb2QpKSB7XG4gICAgICAgIC8vIE5leHQgd2VlayAtPiByZXR1cm4gZnJvbSBNb25kYXkgdG8gU3VuZGF5IG9mIG5leHQgd2Vla1xuICAgICAgICBjb25zdCB3ZWVrU3RhcnQgPSB3ZWVrU3RhcnRQcmVmZXJlbmNlID09PSBcImxvY2FsZS1kZWZhdWx0XCIgPyBnZXRMb2NhbGVXZWVrU3RhcnQoKSA6IHdlZWtTdGFydFByZWZlcmVuY2U7XG4gICAgICAgIGNvbnN0IHdlZWtTdGFydEluZGV4ID0gdGhpcy5nZXREYXlPZldlZWtJbmRleChTdHJpbmcod2Vla1N0YXJ0KSk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnRNb21lbnQgPSBtb21lbnQoKS5hZGQoMSwgJ3dlZWtzJykuZGF5KHdlZWtTdGFydEluZGV4KTtcbiAgICAgICAgY29uc3QgZW5kTW9tZW50ID0gc3RhcnRNb21lbnQuY2xvbmUoKS5hZGQoNiwgJ2RheXMnKTtcblxuICAgICAgICBjb25zdCBmb3JtYXQgPSBcIllZWVktTU0tRERcIjtcbiAgICAgICAgY29uc3Qgc3RhcnRGb3JtYXR0ZWQgPSBzdGFydE1vbWVudC5mb3JtYXQoZm9ybWF0KTtcbiAgICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZW5kTW9tZW50LmZvcm1hdChmb3JtYXQpO1xuXG4gICAgICAgIC8vIEdlbmVyYXRlIGxpc3Qgb2YgYWxsIGRhdGVzIGluIHJhbmdlXG4gICAgICAgIGNvbnN0IGRhdGVMaXN0OiBNb21lbnRbXSA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50TW9tZW50ID0gc3RhcnRNb21lbnQuY2xvbmUoKTtcbiAgICAgICAgd2hpbGUgKGN1cnJlbnRNb21lbnQuaXNTYW1lT3JCZWZvcmUoZW5kTW9tZW50LCAnZGF5JykpIHtcbiAgICAgICAgICBkYXRlTGlzdC5wdXNoKGN1cnJlbnRNb21lbnQuY2xvbmUoKSk7XG4gICAgICAgICAgY3VycmVudE1vbWVudC5hZGQoMSwgJ2RheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBOTERSYW5nZVJlc3VsdCA9IHtcbiAgICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IGAke3N0YXJ0Rm9ybWF0dGVkfSB0byAke2VuZEZvcm1hdHRlZH1gLFxuICAgICAgICAgIHN0YXJ0RGF0ZTogc3RhcnRNb21lbnQudG9EYXRlKCksXG4gICAgICAgICAgZW5kRGF0ZTogZW5kTW9tZW50LnRvRGF0ZSgpLFxuICAgICAgICAgIHN0YXJ0TW9tZW50OiBzdGFydE1vbWVudC5jbG9uZSgpLFxuICAgICAgICAgIGVuZE1vbWVudDogZW5kTW9tZW50LmNsb25lKCksXG4gICAgICAgICAgaXNSYW5nZTogdHJ1ZSBhcyBjb25zdCxcbiAgICAgICAgICBkYXRlTGlzdDogZGF0ZUxpc3QsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyAtLS0gVVRJTElUWSBGVU5DVElPTjogV0hPIEhBUyBUSEUgQkVTVCBTQ09SRT8gLS0tXG4gIC8vIFJldHVybnMgbnVsbCAocmF0aGVyIHRoYW4gYSBcIm5vd1wiIHBsYWNlaG9sZGVyKSB3aGVuIGNocm9uby1ub2RlIGZvdW5kIG5vXG4gIC8vIG1hdGNoLCBzbyBjYWxsZXJzIGNhbiB0ZWxsIFwibm90aGluZyBwYXJzZWRcIiBhcGFydCBmcm9tIFwicGFyc2VkIHRvIHJpZ2h0XG4gIC8vIG5vd1wiIGFuZCBmYWxsIGJhY2sgYWNjb3JkaW5nbHkgaW5zdGVhZCBvZiBzaWxlbnRseSBhY2NlcHRpbmcgYSBib2d1c1xuICAvLyBjdXJyZW50LWRhdGUvdGltZSByZXN1bHQuXG4gIGdldFBhcnNlZERhdGVSZXN1bHQodGV4dDogc3RyaW5nLCByZWZlcmVuY2VEYXRlPzogRGF0ZSwgb3B0aW9uPzogUGFyc2luZ09wdGlvbik6IERhdGUgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuY2hyb25vcyB8fCB0aGlzLmNocm9ub3MubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgYmVzdFJlc3VsdDogUGFyc2VkUmVzdWx0IHwgbnVsbCA9IG51bGw7XG4gICAgbGV0IGJlc3RTY29yZSA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaHJvbm9zKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHRzID0gYy5wYXJzZSh0ZXh0LCByZWZlcmVuY2VEYXRlLCBvcHRpb24pO1xuICAgICAgICAvLyBjaHJvbm8gY2FuIHJldHVybiBzZXZlcmFsIGRpc2pvaW50IG1hdGNoZXMgZm9yIG9uZSBzdHJpbmcgKGUuZy5cbiAgICAgICAgLy8gXCJ0b2RheSBpbiAzIG1pbnV0ZXNcIiAtPiBbXCJ0b2RheVwiLCBcImluIDMgbWludXRlc1wiXSwgcGFyc2VkIGFzIHR3b1xuICAgICAgICAvLyBpbmRlcGVuZGVudCBjYW5kaWRhdGVzLCBuZWl0aGVyIGNvbnRhaW5pbmcgdGhlIG90aGVyKS4gQ29tcGFyaW5nXG4gICAgICAgIC8vIGV2ZXJ5IGNhbmRpZGF0ZSdzIHNjb3JlIC0tIG5vdCBqdXN0IHJlc3VsdHNbMF0gLS0gbWVhbnMgdGhlIG1vcmVcbiAgICAgICAgLy8gc3BlY2lmaWMvaW5mb3JtYXRpdmUgb25lIHdpbnMgaW5zdGVhZCBvZiBhbHdheXMgcGlja2luZyB3aGljaGV2ZXJcbiAgICAgICAgLy8gY2hyb25vIGhhcHBlbmVkIHRvIGxpc3QgZmlyc3QsIHdoaWNoIHNpbGVudGx5IGRpc2NhcmRlZCBcImluIDNcbiAgICAgICAgLy8gbWludXRlc1wiIGFuZCByZXR1cm5lZCB0aGUgY3VycmVudCB0aW1lIHVubW9kaWZpZWQuXG4gICAgICAgIGZvciAoY29uc3QgbWF0Y2ggb2YgcmVzdWx0cyB8fCBbXSkge1xuICAgICAgICAgIGlmIChtYXRjaC50ZXh0Lmxlbmd0aCA+IGJlc3RTY29yZSkge1xuICAgICAgICAgICAgYmVzdFNjb3JlID0gbWF0Y2gudGV4dC5sZW5ndGg7XG4gICAgICAgICAgICBiZXN0UmVzdWx0ID0gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdDaHJvbm8gcGFyc2luZyBlcnJvciBpbiBnZXRQYXJzZWREYXRlUmVzdWx0Jywge1xuICAgICAgICAgIHRleHQsXG4gICAgICAgICAgZXJyb3I6IGRlc2NyaWJlRXJyb3IoZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVzdFJlc3VsdCA/IGJlc3RSZXN1bHQuc3RhcnQuZGF0ZSgpIDogbnVsbDtcbiAgfVxuXG4gIGdldFBhcnNlZFJlc3VsdCh0ZXh0OiBzdHJpbmcpOiBQYXJzZWRSZXN1bHRbXSB7XG4gICAgaWYgKCF0aGlzLmNocm9ub3MpIHJldHVybiBbXTtcbiAgICBsZXQgYmVzdFJlc3VsdHM6IFBhcnNlZFJlc3VsdFtdID0gW107XG4gICAgbGV0IGJlc3RTY29yZSA9IDA7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hyb25vcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGMucGFyc2UodGV4dCk7XG4gICAgICAgIGlmIChyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGlmIChyZXN1bHRzWzBdLnRleHQubGVuZ3RoID4gYmVzdFNjb3JlKSB7XG4gICAgICAgICAgICBiZXN0U2NvcmUgPSByZXN1bHRzWzBdLnRleHQubGVuZ3RoO1xuICAgICAgICAgICAgYmVzdFJlc3VsdHMgPSByZXN1bHRzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2dnZXIud2FybignQ2hyb25vIHBhcnNpbmcgZXJyb3IgaW4gZ2V0UGFyc2VkUmVzdWx0Jywge1xuICAgICAgICAgIHRleHQsXG4gICAgICAgICAgZXJyb3I6IGRlc2NyaWJlRXJyb3IoZSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmVzdFJlc3VsdHM7XG4gIH1cblxuICAvLyAtLS0gVElNRSBERVRFQ1RJT04gKEZPUiBESVNQTEFZKSAtLS1cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHRleHQgc3RyaW5nIGNvbnRhaW5zIGEgdGltZSBjb21wb25lbnQuXG4gICAqIFxuICAgKiBEZXRlY3RzIHZhcmlvdXMgdGltZSBleHByZXNzaW9uczpcbiAgICogLSBFeHBsaWNpdCB0aW1lczogXCJhdCAzcG1cIiwgXCJhdCAxNTowMFwiLCBcIsOgIDE1aFwiXG4gICAqIC0gVGltZSBpbiByZWxhdGl2ZSBleHByZXNzaW9uczogXCJpbiAyIGhvdXJzXCIsIFwiZGFucyAyIGhldXJlc1wiXG4gICAqIC0gV29ya3Mgd2l0aCBhbGwgZW5hYmxlZCBsYW5ndWFnZXNcbiAgICogXG4gICAqIEBwYXJhbSB0ZXh0IC0gVGV4dCBzdHJpbmcgdG8gY2hlY2sgZm9yIHRpbWUgY29tcG9uZW50XG4gICAqIEByZXR1cm5zIHRydWUgaWYgYSB0aW1lIGNvbXBvbmVudCBpcyBkZXRlY3RlZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBhcnNlciA9IG5ldyBOTERQYXJzZXIoWydlbicsICdmciddKTtcbiAgICogcGFyc2VyLmhhc1RpbWVDb21wb25lbnQoXCJuZXh0IE1vbmRheSBhdCAzcG1cIik7IC8vIHRydWVcbiAgICogcGFyc2VyLmhhc1RpbWVDb21wb25lbnQoXCJ0b21vcnJvd1wiKTsgLy8gZmFsc2VcbiAgICogcGFyc2VyLmhhc1RpbWVDb21wb25lbnQoXCJpbiAyIGhvdXJzXCIpOyAvLyB0cnVlXG4gICAqIGBgYFxuICAgKi9cbiAgaGFzVGltZUNvbXBvbmVudCh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50aW1lRGV0ZWN0b3IuaGFzVGltZUNvbXBvbmVudCh0ZXh0KTtcbiAgfVxuXG4gIC8vIC0tLSBDQUNIRSBTVEFUSVNUSUNTIChGT1IgTU9OSVRPUklORykgLS0tXG4gIC8qKlxuICAgKiBSZXRvdXJuZSBsZXMgc3RhdGlzdGlxdWVzIGR1IGNhY2hlIGRlIHBhcnNpbmdcbiAgICovXG4gIGdldENhY2hlU3RhdHMoKTogeyBzaXplOiBudW1iZXI7IG1heFNpemU6IG51bWJlciB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2l6ZTogdGhpcy5jYWNoZS5zaXplLFxuICAgICAgbWF4U2l6ZTogdGhpcy5jYWNoZS5tYXhTaXplTGltaXQsXG4gICAgfTtcbiAgfVxufSIsImltcG9ydCB7XG4gIEFwcCxcbiAgRWRpdG9yLFxuICBFZGl0b3JQb3NpdGlvbixcbiAgRWRpdG9yU3VnZ2VzdCxcbiAgRWRpdG9yU3VnZ2VzdENvbnRleHQsXG4gIEVkaXRvclN1Z2dlc3RUcmlnZ2VySW5mbyxcbiAgVEZpbGUsXG59IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHR5cGUgTmF0dXJhbExhbmd1YWdlRGF0ZXMgZnJvbSBcIi4uL21haW5cIjtcbmltcG9ydCB0IGZyb20gXCIuLi9sYW5nL2hlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGVNYXJrZG93bkxpbmssIHNob3VsZE9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZSwgZ2V0QWN0aXZlRWRpdG9yIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi4vbG9nZ2VyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuLi93aW5kb3ctbW9tZW50XCI7XG5cbmZ1bmN0aW9uIGVzY2FwZVJlZ2V4KHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpO1xufVxuXG4vLyBPcHRpbWFsIFN0cmluZyBBbGlnbm1lbnQgKE9TQSkgZWRpdCBkaXN0YW5jZTogbGlrZSBMZXZlbnNodGVpbiwgYnV0IGFsc29cbi8vIHRyZWF0cyBzd2FwcGluZyB0d28gYWRqYWNlbnQgY2hhcmFjdGVycyBhcyBhIHNpbmdsZSBlZGl0IChlLmcuIFwiaGVpclwiIHZzXG4vLyBcImhpZXJcIiBpcyBkaXN0YW5jZSAxLCBub3QgMikgLS0gYW4gYWRqYWNlbnQtbGV0dGVyIHRyYW5zcG9zaXRpb24gaXMgb25lIG9mXG4vLyB0aGUgbW9zdCBjb21tb24gdHlwaW5nIG1pc3Rha2VzLCBhbmQgcGxhaW4gTGV2ZW5zaHRlaW4gd291bGQgb3RoZXJ3aXNlXG4vLyBjb3VudCBpdCBhcyB0d28gc3Vic3RpdHV0aW9ucyBhbmQgcHVzaCBpdCBwYXN0IHRoZSB0aHJlc2hvbGQgaW5cbi8vIGZ1enp5TWF0Y2hlc1F1ZXJ5KCkgYmVsb3cuIFNwYWNlIGlzIGtlcHQgdG8gdGhyZWUgcm9sbGluZyByb3dzIG9mIGxlbmd0aFxuLy8gYi5sZW5ndGggKyAxIChpbnN0ZWFkIG9mIGEgZnVsbCAoYS5sZW5ndGgrMSkgeCAoYi5sZW5ndGgrMSkgdGFibGUpIHNpbmNlXG4vLyB0aGlzIHJ1bnMgb24gZXZlcnkga2V5c3Ryb2tlIGFnYWluc3QgZXZlcnkgY2FuZGlkYXRlLlxuZnVuY3Rpb24gZWRpdERpc3RhbmNlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgbiA9IGIubGVuZ3RoO1xuICBsZXQgdHdvUm93c0FnbyA9IG5ldyBBcnJheTxudW1iZXI+KG4gKyAxKS5maWxsKDApO1xuICBsZXQgcHJldlJvdyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IG4gKyAxIH0sIChfLCBqKSA9PiBqKTtcbiAgbGV0IGN1cnJlbnRSb3cgPSBuZXcgQXJyYXk8bnVtYmVyPihuICsgMSkuZmlsbCgwKTtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8PSBhLmxlbmd0aDsgaSsrKSB7XG4gICAgY3VycmVudFJvd1swXSA9IGk7XG4gICAgZm9yIChsZXQgaiA9IDE7IGogPD0gbjsgaisrKSB7XG4gICAgICBjb25zdCBjb3N0ID0gYVtpIC0gMV0gPT09IGJbaiAtIDFdID8gMCA6IDE7XG4gICAgICBsZXQgdmFsdWUgPSBNYXRoLm1pbihcbiAgICAgICAgcHJldlJvd1tqXSArIDEsIC8vIGRlbGV0aW9uXG4gICAgICAgIGN1cnJlbnRSb3dbaiAtIDFdICsgMSwgLy8gaW5zZXJ0aW9uXG4gICAgICAgIHByZXZSb3dbaiAtIDFdICsgY29zdCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICk7XG4gICAgICBpZiAoaSA+IDEgJiYgaiA+IDEgJiYgYVtpIC0gMV0gPT09IGJbaiAtIDJdICYmIGFbaSAtIDJdID09PSBiW2ogLSAxXSkge1xuICAgICAgICB2YWx1ZSA9IE1hdGgubWluKHZhbHVlLCB0d29Sb3dzQWdvW2ogLSAyXSArIDEpOyAvLyB0cmFuc3Bvc2l0aW9uXG4gICAgICB9XG4gICAgICBjdXJyZW50Um93W2pdID0gdmFsdWU7XG4gICAgfVxuICAgIFt0d29Sb3dzQWdvLCBwcmV2Um93LCBjdXJyZW50Um93XSA9IFtwcmV2Um93LCBjdXJyZW50Um93LCB0d29Sb3dzQWdvXTtcbiAgfVxuICByZXR1cm4gcHJldlJvd1tuXTtcbn1cblxuLy8gUHJlZml4IG1hdGNoIGlmIHBvc3NpYmxlIChmYXN0LCBleGFjdCwgYW5kIHRoZSBvbmx5IGJlaGF2aW9yIGZvciBxdWVyaWVzXG4vLyB0b28gc2hvcnQgdG8gZnV6enktbWF0Y2ggcmVsaWFibHkpOyBvdGhlcndpc2UgdG9sZXJhdGUgYSBzbWFsbCBlZGl0XG4vLyBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBxdWVyeSBhbmQgY2FuZGlkYXRlIHByZWZpeGVzIG9mIHNpbWlsYXIgbGVuZ3RoLCBzbyBhXG4vLyBzaW5nbGUgd3JvbmcvbWlzc2luZy90cmFuc3Bvc2VkIGxldHRlciBuZWFyIHRoZSBzdGFydCBvZiB0aGUgcXVlcnkgc3RpbGxcbi8vIHN1cmZhY2VzIHRoZSBpbnRlbmRlZCBzdWdnZXN0aW9uIGluc3RlYWQgb2Ygbm9uZSBhdCBhbGwuIENoZWNrcyBhIHdpbmRvd1xuLy8gb2YgcHJlZml4IGxlbmd0aHMgYXJvdW5kIHRoZSBxdWVyeSdzIG93biBsZW5ndGggKHF1ZXJ5Lmxlbmd0aCDCsSB0aHJlc2hvbGQpXG4vLyByYXRoZXIgdGhhbiBhIHNpbmdsZSBmaXhlZC1sZW5ndGggc2xpY2UgLS0gY29tcGFyaW5nIGFnYWluc3QgYSBwcmVmaXhcbi8vIHRoYXQncyBmb3JjZWQgdG8gYmUgbG9uZ2VyIHRoYW4gdGhlIHF1ZXJ5IGJ5IG1vcmUgdGhhbiB0aGUgdGhyZXNob2xkIHdvdWxkXG4vLyBvdGhlcndpc2UgbWFrZSB0aGUgZWRpdCBkaXN0YW5jZSBhdCBsZWFzdCB0aGF0IGxlbmd0aCBkaWZmZXJlbmNlLCB3aGljaFxuLy8gY2FuIGV4Y2VlZCB0aGUgdGhyZXNob2xkIGV2ZW4gZm9yIGFuIGV4YWN0LXByZWZpeCBtYXRjaCAoZS5nLiBcInRvbXVyXCJcbi8vIGFnYWluc3QgYSBmaXhlZCA3LWNoYXJhY3RlciBzbGljZSBvZiBcInRvbW9ycm93XCIgaXMgYWxyZWFkeSAyIGVkaXRzIGF3YXlcbi8vIGJlZm9yZSBhY2NvdW50aW5nIGZvciB0aGUgYWN0dWFsIHR5cG8pLiBPbmx5IHVzZWQgZm9yIHNob3J0LCBmaXhlZFxuLy8gY2FuZGlkYXRlIGxpc3RzICh0b2RheS90b21vcnJvdywgd2Vla2RheXMsIGhpc3RvcnkvY29udGV4dCkgLS0gdGhlXG4vLyBtdWx0aS1zdGFnZSBwcm9ncmVzc2l2ZS10eXBpbmcgc3VnZ2VzdGlvbiBnZW5lcmF0b3JzIGVsc2V3aGVyZSBpbiB0aGlzXG4vLyBmaWxlIGtlZXAgc3RyaWN0IHByZWZpeCBtYXRjaGluZywgc2luY2UgZnV6enkgbWF0Y2hpbmcgaW50ZXJhY3RzXG4vLyB1bnByZWRpY3RhYmx5IHdpdGggdGhlaXIgcGFydGlhbC1jb21wbGV0aW9uIGxvZ2ljLlxuZnVuY3Rpb24gZnV6enlNYXRjaGVzUXVlcnkoY2FuZGlkYXRlOiBzdHJpbmcsIHF1ZXJ5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgYyA9IGNhbmRpZGF0ZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBxID0gcXVlcnkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCFxIHx8IGMuc3RhcnRzV2l0aChxKSkgcmV0dXJuIHRydWU7XG4gIGlmIChxLmxlbmd0aCA8PSAyKSByZXR1cm4gZmFsc2U7IC8vIHRvbyBzaG9ydCB0byBmdXp6eS1tYXRjaCB3aXRob3V0IG5vaXNlXG4gIGNvbnN0IHRocmVzaG9sZCA9IHEubGVuZ3RoIDw9IDUgPyAxIDogMjtcbiAgY29uc3QgbWluTGVuID0gTWF0aC5tYXgoMSwgcS5sZW5ndGggLSB0aHJlc2hvbGQpO1xuICBjb25zdCBtYXhMZW4gPSBNYXRoLm1pbihjLmxlbmd0aCwgcS5sZW5ndGggKyB0aHJlc2hvbGQpO1xuICBmb3IgKGxldCBsZW4gPSBtaW5MZW47IGxlbiA8PSBtYXhMZW47IGxlbisrKSB7XG4gICAgaWYgKGVkaXREaXN0YW5jZShjLnNsaWNlKDAsIGxlbiksIHEpIDw9IHRocmVzaG9sZCkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRlU3VnZ2VzdCBleHRlbmRzIEVkaXRvclN1Z2dlc3Q8c3RyaW5nPiB7XG4gIHByaXZhdGUgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcztcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcykge1xuICAgIHN1cGVyKGFwcCk7XG4gICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cbiAgICAvLyBUeXBlIGFzc2VydGlvbiBuZWVkZWQ6IE9ic2lkaWFuJ3MgRWRpdG9yU3VnZ2VzdCBzY29wZSBkb2Vzbid0IGV4cG9zZSByZWdpc3RlciBtZXRob2QgaW4gdHlwZXMsXG4gICAgLy8gYnV0IGl0IGV4aXN0cyBhdCBydW50aW1lLiBUaGlzIGFsbG93cyB1cyB0byByZWdpc3RlciBjdXN0b20ga2V5Ym9hcmQgc2hvcnRjdXRzLlxuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5zY29wZSBhcyB0eXBlb2YgdGhpcy5zY29wZSAmIHtcbiAgICAgIHJlZ2lzdGVyOiAobW9kaWZpZXJzOiBzdHJpbmdbXSwga2V5OiBzdHJpbmcsIGNhbGxiYWNrOiAoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiBib29sZWFuKSA9PiB2b2lkO1xuICAgIH07XG4gICAgc2NvcGUucmVnaXN0ZXIoW1wiU2hpZnRcIl0sIFwiRW50ZXJcIiwgKGV2dDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgLy8gVHlwZSBhc3NlcnRpb24gbmVlZGVkOiBFZGl0b3JTdWdnZXN0J3MgaW50ZXJuYWwgc3VnZ2VzdGlvbnMgQVBJIGlzIG5vdCBmdWxseSB0eXBlZC5cbiAgICAgIC8vIFRoaXMgYWxsb3dzIGFjY2VzcyB0byB1c2VTZWxlY3RlZEl0ZW0gbWV0aG9kIHdoaWNoIGV4aXN0cyBhdCBydW50aW1lIGZvciBTaGlmdCtFbnRlciBmdW5jdGlvbmFsaXR5LlxuICAgICAgY29uc3QgZWRpdG9yU3VnZ2VzdCA9IHRoaXMgYXMgdW5rbm93biBhcyB7XG4gICAgICAgIHN1Z2dlc3Rpb25zOiB7IHVzZVNlbGVjdGVkSXRlbTogKGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdm9pZCB9O1xuICAgICAgfTtcbiAgICAgIGVkaXRvclN1Z2dlc3Quc3VnZ2VzdGlvbnMudXNlU2VsZWN0ZWRJdGVtKGV2dCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b3N1Z2dlc3RUb2dnbGVMaW5rKSB7XG4gICAgICB0aGlzLnNldEluc3RydWN0aW9ucyhbeyBjb21tYW5kOiBcIlNoaWZ0XCIsIHB1cnBvc2U6IFwiS2VlcCB0ZXh0IGFzIGFsaWFzXCIgfV0pO1xuICAgIH1cbiAgfVxuXG4gIGdldFN1Z2dlc3Rpb25zKGNvbnRleHQ6IEVkaXRvclN1Z2dlc3RDb250ZXh0KTogc3RyaW5nW10ge1xuICAgIC8vIGhhbmRsZSBubyBtYXRjaGVzXG4gICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSB0aGlzLmdldERhdGVTdWdnZXN0aW9ucyhjb250ZXh0KTtcbiAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID8gc3VnZ2VzdGlvbnMgOiBbIGNvbnRleHQucXVlcnkgXTtcbiAgfVxuXG4gIGdldERhdGVTdWdnZXN0aW9ucyhjb250ZXh0OiBFZGl0b3JTdWdnZXN0Q29udGV4dCk6IHN0cmluZ1tdIHtcbiAgICAvLyBSw6ljdXDDqXJlciBsZXMgc3VnZ2VzdGlvbnMgc3RhbmRhcmRcbiAgICBjb25zdCBzdGFuZGFyZFN1Z2dlc3Rpb25zID0gdGhpcy51bmlxdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubGFuZ3VhZ2VzLmZsYXRNYXAoXG4gICAgICBsYW5ndWFnZSA9PiB7XG4gICAgICAgIGxldCBzdWdnZXN0aW9ucyA9IHRoaXMuZ2V0VGltZVN1Z2dlc3Rpb25zKGNvbnRleHQucXVlcnksIGxhbmd1YWdlKTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb25zKVxuICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9ucztcbiAgICAgICAgXG4gICAgICAgIHN1Z2dlc3Rpb25zID0gdGhpcy5nZXRJbW1lZGlhdGVTdWdnZXN0aW9ucyhjb250ZXh0LnF1ZXJ5LCBsYW5ndWFnZSk7XG4gICAgICAgIGlmIChzdWdnZXN0aW9ucylcbiAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnM7XG5cbiAgICAgICAgc3VnZ2VzdGlvbnMgPSB0aGlzLmdldFJlbGF0aXZlU3VnZ2VzdGlvbnMoY29udGV4dC5xdWVyeSwgbGFuZ3VhZ2UpO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zO1xuXG4gICAgICAgIHN1Z2dlc3Rpb25zID0gdGhpcy5nZXRXZWVrZGF5U3VnZ2VzdGlvbnMoY29udGV4dC5xdWVyeSwgbGFuZ3VhZ2UpO1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRTdWdnZXN0aW9ucyhjb250ZXh0LnF1ZXJ5LCBsYW5ndWFnZSk7XG4gICAgICB9XG4gICAgKSk7XG5cbiAgICAvLyBTaSBsZXMgc3VnZ2VzdGlvbnMgaW50ZWxsaWdlbnRlcyBzb250IGTDqXNhY3RpdsOpZXMsIHJldG91cm5lciBsZXMgc3VnZ2VzdGlvbnMgc3RhbmRhcmRcbiAgICBpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZVNtYXJ0U3VnZ2VzdGlvbnMpIHtcbiAgICAgIHJldHVybiBzdGFuZGFyZFN1Z2dlc3Rpb25zO1xuICAgIH1cblxuICAgIC8vIFLDqWN1cMOpcmVyIGxlcyBzdWdnZXN0aW9ucyBpbnRlbGxpZ2VudGVzIChoaXN0b3JpcXVlICsgY29udGV4dGUpXG4gICAgY29uc3Qgc21hcnRTdWdnZXN0aW9ucyA9IHRoaXMuZ2V0U21hcnRTdWdnZXN0aW9ucyhjb250ZXh0LCBzdGFuZGFyZFN1Z2dlc3Rpb25zKTtcblxuICAgIC8vIEZ1c2lvbm5lciA6IHN1Z2dlc3Rpb25zIGludGVsbGlnZW50ZXMgZW4gcHJpb3JpdMOpLCBwdWlzIHN1Z2dlc3Rpb25zIHN0YW5kYXJkXG4gICAgY29uc3QgbWVyZ2VkID0gWy4uLnNtYXJ0U3VnZ2VzdGlvbnNdO1xuICAgIGZvciAoY29uc3Qgc3VnZ2VzdGlvbiBvZiBzdGFuZGFyZFN1Z2dlc3Rpb25zKSB7XG4gICAgICBpZiAoIW1lcmdlZC5pbmNsdWRlcyhzdWdnZXN0aW9uKSkge1xuICAgICAgICBtZXJnZWQucHVzaChzdWdnZXN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgbGVzIHN1Z2dlc3Rpb25zIGludGVsbGlnZW50ZXMgYmFzw6llcyBzdXIgbCdoaXN0b3JpcXVlIGV0IGxlIGNvbnRleHRlXG4gICAqL1xuICBwcml2YXRlIGdldFNtYXJ0U3VnZ2VzdGlvbnMoY29udGV4dDogRWRpdG9yU3VnZ2VzdENvbnRleHQsIF9zdGFuZGFyZFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzbWFydFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHF1ZXJ5ID0gY29udGV4dC5xdWVyeS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gU3VnZ2VzdGlvbnMgYmFzw6llcyBzdXIgbCdoaXN0b3JpcXVlXG4gICAgaWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUhpc3RvcnlTdWdnZXN0aW9ucyAmJiB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaGlzdG9yeVN1Z2dlc3Rpb25zID0gdGhpcy5wbHVnaW4uaGlzdG9yeU1hbmFnZXIuZ2V0VG9wU3VnZ2VzdGlvbnNTeW5jKDE1KTtcbiAgICAgICAgZm9yIChjb25zdCBzdWdnZXN0aW9uIG9mIGhpc3RvcnlTdWdnZXN0aW9ucykge1xuICAgICAgICAgIC8vIFbDqXJpZmllciBxdWUgbGEgc3VnZ2VzdGlvbiBjb3JyZXNwb25kIMOgIGxhIHJlcXXDqnRlICh0b2zDqHJlIHVuZSBwZXRpdGUgZmF1dGUgZGUgZnJhcHBlKVxuICAgICAgICAgIGlmIChmdXp6eU1hdGNoZXNRdWVyeShzdWdnZXN0aW9uLCBxdWVyeSkgJiYgIXNtYXJ0U3VnZ2VzdGlvbnMuaW5jbHVkZXMoc3VnZ2VzdGlvbikpIHtcbiAgICAgICAgICAgIHNtYXJ0U3VnZ2VzdGlvbnMucHVzaChzdWdnZXN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmVyIGxlcyBlcnJldXJzIHNpbGVuY2lldXNlbWVudFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1Z2dlc3Rpb25zIGJhc8OpZXMgc3VyIGxlIGNvbnRleHRlXG4gICAgaWYgKHRoaXMucGx1Z2luLnNldHRpbmdzLmVuYWJsZUNvbnRleHRTdWdnZXN0aW9ucyAmJiB0aGlzLnBsdWdpbi5jb250ZXh0QW5hbHl6ZXIgJiYgY29udGV4dC5lZGl0b3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHRJbmZvID0gdGhpcy5wbHVnaW4uY29udGV4dEFuYWx5emVyLmFuYWx5emVDb250ZXh0U3luYyhcbiAgICAgICAgICBjb250ZXh0LmVkaXRvcixcbiAgICAgICAgICBjb250ZXh0LnN0YXJ0LmxpbmVcbiAgICAgICAgKTtcbiAgICAgICAgXG4gICAgICAgIC8vIEFqb3V0ZXIgbGVzIGRhdGVzIHRyb3V2w6llcyBkYW5zIGxlIGNvbnRleHRlICh0b2zDqHJlIHVuZSBwZXRpdGUgZmF1dGUgZGUgZnJhcHBlKVxuICAgICAgICBmb3IgKGNvbnN0IGRhdGVTdHIgb2YgY29udGV4dEluZm8uZGF0ZXNJbkNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoZnV6enlNYXRjaGVzUXVlcnkoZGF0ZVN0ciwgcXVlcnkpICYmICFzbWFydFN1Z2dlc3Rpb25zLmluY2x1ZGVzKGRhdGVTdHIpKSB7XG4gICAgICAgICAgICBzbWFydFN1Z2dlc3Rpb25zLnB1c2goZGF0ZVN0cik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSWdub3JlciBsZXMgZXJyZXVycyBzaWxlbmNpZXVzZW1lbnRcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc21hcnRTdWdnZXN0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGltZVN1Z2dlc3Rpb25zKGlucHV0U3RyOiBzdHJpbmcsIGxhbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAvLyBPbmx5IHRoZSBmaXJzdCB2YXJpYW50IG9mIGEgcGlwZS1zZXBhcmF0ZWQgdHJhbnNsYXRpb24gKGUuZy4gQ2hpbmVzZVxuICAgIC8vIFwi5pmC6ZaTfOaXtumXtFwiKSBpcyB1c2VkIGZvciBkaXNwbGF5L21hdGNoaW5nIC0tIGVtYmVkZGluZyB0aGUgcmF3XG4gICAgLy8gbXVsdGktdmFyaWFudCBzdHJpbmcgd291bGQgYm90aCBnYXJibGUgdGhlIHN1Z2dlc3Rpb24gdGV4dCBhbmQsIHNpbmNlXG4gICAgLy8gXCJ8XCIgaXMgYSByZWdleCBtZXRhY2hhcmFjdGVyLCBzaWxlbnRseSBicmVhayB0aGUgXCJeXCIgYW5jaG9yIGJlbG93LlxuICAgIGNvbnN0IHRpbWVXb3JkID0gdChcInRpbWVcIiwgbGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICBjb25zdCBub3dXb3JkID0gdChcIm5vd1wiLCBsYW5nKS5zcGxpdCgnfCcpWzBdO1xuICAgIGlmIChpbnB1dFN0ci5tYXRjaChuZXcgUmVnRXhwKGBeJHtlc2NhcGVSZWdleCh0aW1lV29yZCl9YCwgXCJpXCIpKSkge1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBbXG4gICAgICAgIG5vd1dvcmQsXG4gICAgICAgIHQoXCJwbHVzbWludXRlc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogXCIxNVwiIH0pLFxuICAgICAgICB0KFwicGx1c2hvdXJcIiwgbGFuZywgeyB0aW1lRGVsdGE6IFwiMVwiIH0pLFxuICAgICAgICB0KFwibWludXNtaW51dGVzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBcIjE1XCIgfSksXG4gICAgICAgIHQoXCJtaW51c2hvdXJcIiwgbGFuZywgeyB0aW1lRGVsdGE6IFwiMVwiIH0pLFxuICAgICAgXVxuICAgICAgICAubWFwKHZhbCA9PiBgJHt0aW1lV29yZH06JHt2YWx9YClcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGlucHV0U3RyLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9ucy5sZW5ndGggPiAwID8gc3VnZ2VzdGlvbnMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbW1lZGlhdGVTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gRXNjYXBlIGVhY2ggdHJhbnNsYXRpb24ncyB2YXJpYW50cyBpbmRpdmlkdWFsbHkgYmVmb3JlIGpvaW5pbmcgaW50b1xuICAgIC8vIGFuIGFsdGVybmF0aW9uOiBhIGxhbmd1YWdlJ3Mgb3duIFwifFwiLXNlcGFyYXRlZCB2YXJpYW50cyBzdGF5XG4gICAgLy8gbWVhbmluZ2Z1bCBhbHRlcm5hdGlvbiwgYnV0IGFueSBvdGhlciByZWdleCBtZXRhY2hhcmFjdGVyIG9uZSBtaWdodFxuICAgIC8vIGNvbnRhaW4gY2FuJ3QgY29ycnVwdCB0aGUgcGF0dGVybi4gQW5jaG9yZWQgd2l0aCBcIl5cIiBsaWtlIHRoZSBvdGhlclxuICAgIC8vIHN1Z2dlc3Rpb24gZ2VuZXJhdG9ycyBpbiB0aGlzIGZpbGUgLS0gb3RoZXJ3aXNlIGEgc2hvcnQsIGNvbW1vblxuICAgIC8vIHN1YnN0cmluZyAoZS5nLiBDaGluZXNlIFwibmV4dFwiOiBcIuS4i+S4gOWAi3zkuIvkuIDkuKp85LiLXCIsIHRoZSBsYXN0IHZhcmlhbnRcbiAgICAvLyBiZWluZyBhIHNpbmdsZSBiYXJlIGNoYXJhY3RlcikgY2FuIG1hdGNoIGluIHRoZSBtaWRkbGUgb2YgdW5yZWxhdGVkXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgYnVpbGRQYXR0ZXJuID0gKHRyYW5zbGF0aW9uOiBzdHJpbmcpID0+XG4gICAgICB0cmFuc2xhdGlvbi5zcGxpdCgnfCcpLm1hcCh2ID0+IGVzY2FwZVJlZ2V4KHYudHJpbSgpKSkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ3wnKTtcbiAgICBjb25zdCBwcmVmaXhQYXR0ZXJuID0gW3QoXCJuZXh0XCIsIGxhbmcpLCB0KFwibGFzdFwiLCBsYW5nKSwgdChcInRoaXNcIiwgbGFuZyldXG4gICAgICAubWFwKGJ1aWxkUGF0dGVybilcbiAgICAgIC5qb2luKCd8Jyk7XG4gICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChgXigke3ByZWZpeFBhdHRlcm59KWAsIFwiaVwiKTtcbiAgICBjb25zdCBtYXRjaCA9IGlucHV0U3RyLm1hdGNoKHJlZ2V4cClcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGNvbnN0IHJlZmVyZW5jZSA9IG1hdGNoWzFdXG4gICAgICAvLyBQcmVuZHJlIHNldWxlbWVudCBsYSBwcmVtacOocmUgdmFyaWFudGUgKGF2YW50IGxlIHwpIHBvdXIgbGVzIHN1Z2dlc3Rpb25zXG4gICAgICBjb25zdCBnZXRGaXJzdFZhcmlhbnQgPSAodmFsOiBzdHJpbmcpID0+IHZhbC5zcGxpdCgnfCcpWzBdO1xuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBbXG4gICAgICAgIHQoXCJ3ZWVrXCIsIGxhbmcpLFxuICAgICAgICB0KFwibW9udGhcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ5ZWFyXCIsIGxhbmcpLFxuICAgICAgICB0KFwic3VuZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwibW9uZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwidHVlc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcIndlZG5lc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInRodXJzZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwiZnJpZGF5XCIsIGxhbmcpLFxuICAgICAgICB0KFwic2F0dXJkYXlcIiwgbGFuZyksXG4gICAgICBdXG4gICAgICAgIC5tYXAodmFsID0+IHtcbiAgICAgICAgICBjb25zdCBmaXJzdFZhcmlhbnQgPSBnZXRGaXJzdFZhcmlhbnQodmFsKTtcbiAgICAgICAgICAvLyBDYXBpdGFsaXNlciBsYSBwcmVtacOocmUgbGV0dHJlIHBvdXIgdW4gbWVpbGxldXIgYWZmaWNoYWdlXG4gICAgICAgICAgcmV0dXJuIGZpcnN0VmFyaWFudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGZpcnN0VmFyaWFudC5zbGljZSgxKTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcCh2YWwgPT4gYCR7cmVmZXJlbmNlfSAke3ZhbH1gKVxuICAgICAgICAuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVsYXRpdmVTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gVsOpcmlmaWVyIGQnYWJvcmQgbGVzIGV4cHJlc3Npb25zIGNvbWJpbsOpZXMgY29tbWUgXCJpbiAxIG1vbnRoIGFuZFwiIG91IFwiZGFucyAxIG1vaXMgZXRcIlxuICAgIC8vIFBlcm1ldHRyZSBsYSBzYWlzaWUgcHJvZ3Jlc3NpdmUgOiBcImluIDEgbW9udGggYW5kXCIsIFwiaW4gMSBtb250aCBhbmQgM1wiLCBcImluIDMgbW9udGggYW5kXCIsIGV0Yy5cbiAgICBjb25zdCBhbmRQYXR0ZXJuID0gdChcImFuZFwiLCBsYW5nKS5zcGxpdCgnfCcpWzBdOyAvLyBQcmVuZHJlIGxhIHByZW1pw6hyZSB2YXJpYW50ZVxuICAgIC8vIFJlZ2V4IHBsdXMgZmxleGlibGUgcXVpIHBlcm1ldCBsYSBzYWlzaWUgYXByw6hzIFwiYW5kXCJcbiAgICBjb25zdCBjb21iaW5lZFJlZ2V4ID0gbmV3IFJlZ0V4cChgXigke3QoXCJpblwiLCBsYW5nKX0gKT8oWystXT9cXFxcZCspXFxcXHMrKCR7dChcIm1pbnV0ZVwiLCBsYW5nKX18JHt0KFwiaG91clwiLCBsYW5nKX18JHt0KFwiZGF5XCIsIGxhbmcpfXwke3QoXCJ3ZWVrXCIsIGxhbmcpfXwke3QoXCJtb250aFwiLCBsYW5nKX18JHt0KFwieWVhclwiLCBsYW5nKX0pXFxcXHMrKCR7YW5kUGF0dGVybn0pKFxcXFxzKy4qKT8kYCwgXCJpXCIpO1xuICAgIGNvbnN0IGNvbWJpbmVkTWF0Y2ggPSBpbnB1dFN0ci5tYXRjaChjb21iaW5lZFJlZ2V4KTtcbiAgICBpZiAoY29tYmluZWRNYXRjaCkge1xuICAgICAgY29uc3QgYWZ0ZXJBbmQgPSBjb21iaW5lZE1hdGNoWzVdID8gY29tYmluZWRNYXRjaFs1XS50cmltKCkgOiAnJztcbiAgICAgIFxuICAgICAgLy8gRXh0cmFpcmUgbGEgcGFydGllIGF2YW50IFwiYW5kXCIgcG91ciByZWNvbnN0cnVpcmUgY29ycmVjdGVtZW50XG4gICAgICBjb25zdCBiZWZvcmVBbmQgPSBpbnB1dFN0ci5zdWJzdHJpbmcoMCwgaW5wdXRTdHIuaW5kZXhPZihjb21iaW5lZE1hdGNoWzRdKSArIGNvbWJpbmVkTWF0Y2hbNF0ubGVuZ3RoKS50cmltRW5kKCk7XG4gICAgICBcbiAgICAgIC8vIFNpIG9uIGEgZMOpasOgIGNvbW1lbmPDqSDDoCB0YXBlciBhcHLDqHMgXCJhbmRcIiwgZXh0cmFpcmUgbGUgbm9tYnJlIHMnaWwgeSBlbiBhIHVuXG4gICAgICBsZXQgc3VnZ2VzdGVkTnVtYmVyID0gXCIxXCI7XG4gICAgICBsZXQgYWZ0ZXJBbmRXaXRob3V0TnVtYmVyID0gYWZ0ZXJBbmQ7XG4gICAgICBpZiAoYWZ0ZXJBbmQpIHtcbiAgICAgICAgY29uc3QgbnVtYmVyTWF0Y2ggPSBhZnRlckFuZC5tYXRjaCgvXihcXGQrKSguKikkLyk7XG4gICAgICAgIGlmIChudW1iZXJNYXRjaCkge1xuICAgICAgICAgIHN1Z2dlc3RlZE51bWJlciA9IG51bWJlck1hdGNoWzFdO1xuICAgICAgICAgIGFmdGVyQW5kV2l0aG91dE51bWJlciA9IG51bWJlck1hdGNoWzJdLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtcbiAgICAgICAgdChcImlubWludXRlc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogc3VnZ2VzdGVkTnVtYmVyIH0pLFxuICAgICAgICB0KFwiaW5ob3Vyc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogc3VnZ2VzdGVkTnVtYmVyIH0pLFxuICAgICAgICB0KFwiaW5kYXlzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBzdWdnZXN0ZWROdW1iZXIgfSksXG4gICAgICAgIHQoXCJpbndlZWtzXCIsIGxhbmcsIHsgdGltZURlbHRhOiBzdWdnZXN0ZWROdW1iZXIgfSksXG4gICAgICAgIHQoXCJpbm1vbnRoc1wiLCBsYW5nLCB7IHRpbWVEZWx0YTogc3VnZ2VzdGVkTnVtYmVyIH0pLFxuICAgICAgXVxuICAgICAgICAubWFwKHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHVuaXRQYXJ0ID0gcy5yZXBsYWNlKC9eZGFucyB8XmluIC9pLCAnJyk7XG4gICAgICAgICAgLy8gdW5pdFBhcnQgZXN0IGNvbW1lIFwiMyBkYXlzXCIgb3UgXCI1IG1pbnV0ZXNcIlxuICAgICAgICAgIGlmIChhZnRlckFuZCkge1xuICAgICAgICAgICAgLy8gU2kgb24gYSBkw6lqw6AgY29tbWVuY8OpIMOgIHRhcGVyLCBjb21wbMOpdGVyIGludGVsbGlnZW1tZW50XG4gICAgICAgICAgICAvLyB1bml0UGFydCBjb21tZW5jZSBwYXIgbGUgbm9tYnJlIChleDogXCIzIGRheXNcIilcbiAgICAgICAgICAgIGNvbnN0IHVuaXRXb3JkcyA9IHVuaXRQYXJ0LnNwbGl0KCcgJyk7XG4gICAgICAgICAgICBpZiAodW5pdFdvcmRzLmxlbmd0aCA+IDEgJiYgdW5pdFdvcmRzWzBdID09PSBzdWdnZXN0ZWROdW1iZXIpIHtcbiAgICAgICAgICAgICAgLy8gTGUgbm9tYnJlIGNvcnJlc3BvbmQsIG9uIHBldXQgc3VnZ8OpcmVyIGxlIHJlc3RlIChleDogXCJkYXlzXCIpXG4gICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZyA9IHVuaXRQYXJ0LnN1YnN0cmluZyhzdWdnZXN0ZWROdW1iZXIubGVuZ3RoKS50cmltKCk7XG4gICAgICAgICAgICAgIGlmIChhZnRlckFuZFdpdGhvdXROdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBTaSBvbiBhIHRhcMOpIHF1ZWxxdWUgY2hvc2UgYXByw6hzIGxlIG5vbWJyZSwgdsOpcmlmaWVyIHNpIMOnYSBjb3JyZXNwb25kXG4gICAgICAgICAgICAgICAgLy8gTk9URToga25vd24gcm91Z2ggZWRnZSAtLSB0aGlzIGRyb3BzIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZVxuICAgICAgICAgICAgICAgIC8vIG51bWJlciBhbmQgdW5pdCAoZS5nLiB0eXBpbmcgXCIzIGRheVwiIGFmdGVyIFwiYW5kXCIgcHJvZHVjZXNcbiAgICAgICAgICAgICAgICAvLyBcIi4uLmFuZCAzc1wiIGluc3RlYWQgb2YgXCIuLi5hbmQgMyBkYXlzXCIpLCBzbyB0aGUgcmVidWlsdFxuICAgICAgICAgICAgICAgIC8vIGNhbmRpZGF0ZSB0aGVuIGZhaWxzIHRoZSBvdXRlciBwcmVmaXggZmlsdGVyIGJlbG93IGFuZCB0aGlzXG4gICAgICAgICAgICAgICAgLy8gd2hvbGUgYnJhbmNoIHNpbGVudGx5IGNvbnRyaWJ1dGVzIG5vIHN1Z2dlc3Rpb24uIFZlcmlmaWVkXG4gICAgICAgICAgICAgICAgLy8gYXMgdGhlIGFjdHVhbCBjdXJyZW50IGJlaGF2aW9yOyBsZWZ0IGFsb25lIGFzIGEgbmFycm93XG4gICAgICAgICAgICAgICAgLy8gYXV0b3N1Z2dlc3QtdGV4dCBwb2xpc2ggaXNzdWUgcmF0aGVyIHRoYW4gZml4ZWQgaGVyZS5cbiAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChhZnRlckFuZFdpdGhvdXROdW1iZXIudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtiZWZvcmVBbmR9ICR7c3VnZ2VzdGVkTnVtYmVyfSR7cmVtYWluaW5nLnN1YnN0cmluZyhhZnRlckFuZFdpdGhvdXROdW1iZXIubGVuZ3RoKX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBPbiBhIGp1c3RlIHRhcMOpIGxlIG5vbWJyZSwgc3VnZ8OpcmVyIGxlIHJlc3RlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2JlZm9yZUFuZH0gJHt1bml0UGFydH1gO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZWFjaGVkIGZvciBsYW5ndWFnZXMgdGhhdCBkb24ndCBzZXBhcmF0ZSB0aGUgbnVtYmVyIGFuZCB1bml0XG4gICAgICAgICAgICAvLyB3aXRoIGEgc3BhY2UgKGUuZy4gQ2hpbmVzZSBcIjPlpKnlvoxcIiwgSmFwYW5lc2UgXCIz5pel5b6MXCIpOiB1bml0UGFydFxuICAgICAgICAgICAgLy8gdGhlbiBoYXMgbm8gc3BhY2UgYXQgYWxsLCBzbyB1bml0V29yZHMubGVuZ3RoID4gMSBhYm92ZSBpc1xuICAgICAgICAgICAgLy8gZmFsc2UgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBudW1iZXIgbWF0Y2hlcy4gTm90ZSB0aGlzIGhhc1xuICAgICAgICAgICAgLy8gaXRzIG93biByb3VnaCBlZGdlIHN5bW1ldHJpYyB0byB0aGUgb25lIGFib3ZlIC0tIHNpbmNlXG4gICAgICAgICAgICAvLyB1bml0UGFydCBoYXMgbm8gc3BhY2UsIHVuaXRQYXJ0LmluZGV4T2YoJyAnKSBpcyAtMSBhbmRcbiAgICAgICAgICAgIC8vIHVuaXRXaXRob3V0TnVtYmVyIGVuZHMgdXAgYmVpbmcgdGhlICp3aG9sZSogdW5pdFBhcnRcbiAgICAgICAgICAgIC8vIChpbmNsdWRpbmcgaXRzIG93biBsZWFkaW5nIG51bWJlciksIHNvIHRoZSByZXR1cm5lZCBzdWdnZXN0aW9uXG4gICAgICAgICAgICAvLyBkdXBsaWNhdGVzIHRoZSBudW1iZXIgKGUuZy4gXCLlnKggMyDlpKkg5ZKMIDQgNOWIhumQmOW+jFwiIGluc3RlYWQgb2ZcbiAgICAgICAgICAgIC8vIFwiLi4u5ZKMIDTliIbpkJjlvoxcIikuIFZlcmlmaWVkIGFzIHRoZSBhY3R1YWwgY3VycmVudCBiZWhhdmlvcjtcbiAgICAgICAgICAgIC8vIGxlZnQgYWxvbmUgYXMgdGhlIHNhbWUga2luZCBvZiBuYXJyb3cgYXV0b3N1Z2dlc3QtdGV4dCBwb2xpc2hcbiAgICAgICAgICAgIC8vIGlzc3VlIGFzIHRoZSBvbmUgZG9jdW1lbnRlZCBhYm92ZSwgbm90IGZpeGVkIGhlcmUuXG4gICAgICAgICAgICBjb25zdCB1bml0V2l0aG91dE51bWJlciA9IHVuaXRQYXJ0LnN1YnN0cmluZyh1bml0UGFydC5pbmRleE9mKCcgJykgKyAxKTtcbiAgICAgICAgICAgIGlmICh1bml0V2l0aG91dE51bWJlci50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoYWZ0ZXJBbmQudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGAke2JlZm9yZUFuZH0gJHtzdWdnZXN0ZWROdW1iZXJ9ICR7dW5pdFdpdGhvdXROdW1iZXJ9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYCR7YmVmb3JlQW5kfSAke3VuaXRQYXJ0fWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFbDqXJpZmllciBsZXMgcGxhZ2VzIGRlIGRhdGVzIHBhcnRpZWxsZXMgY29tbWUgXCJkZSBsdW5kaSDDoFwiIG91IFwiZnJvbSBtb25kYXkgdG9cIlxuICAgIC8vIFBlcm1ldHRyZSBsYSBzYWlzaWUgcHJvZ3Jlc3NpdmUgOiBcImRlIGx1bmRpIGFcIiwgXCJkZSBsdW5kaSBhIHZcIiwgXCJkZSBsdW5kaSBhIHZlXCIsIGV0Yy5cbiAgICBjb25zdCBmcm9tUGF0dGVybiA9IHQoXCJmcm9tXCIsIGxhbmcpLnNwbGl0KCd8JylbMF07XG4gICAgY29uc3QgdG9QYXR0ZXJuID0gdChcInRvXCIsIGxhbmcpLnNwbGl0KCd8JylbMF07XG4gICAgLy8gUmVnZXggcGx1cyBmbGV4aWJsZSBxdWkgcGVybWV0IGxhIHNhaXNpZSBwcm9ncmVzc2l2ZSBhcHLDqHMgXCLDoFwiIG91IFwiYVwiXG4gICAgY29uc3QgcmFuZ2VQYXJ0aWFsUmVnZXggPSBuZXcgUmVnRXhwKGBeKCR7ZnJvbVBhdHRlcm59fGRlfGR1KVxcXFxzKygke3QoXCJzdW5kYXlcIiwgbGFuZyl9fCR7dChcIm1vbmRheVwiLCBsYW5nKX18JHt0KFwidHVlc2RheVwiLCBsYW5nKX18JHt0KFwid2VkbmVzZGF5XCIsIGxhbmcpfXwke3QoXCJ0aHVyc2RheVwiLCBsYW5nKX18JHt0KFwiZnJpZGF5XCIsIGxhbmcpfXwke3QoXCJzYXR1cmRheVwiLCBsYW5nKX0pXFxcXHMrKCR7dG9QYXR0ZXJufXzDoHxhKShcXFxccysuKik/JGAsIFwiaVwiKTtcbiAgICBjb25zdCByYW5nZVBhcnRpYWxNYXRjaCA9IGlucHV0U3RyLm1hdGNoKHJhbmdlUGFydGlhbFJlZ2V4KTtcbiAgICBpZiAocmFuZ2VQYXJ0aWFsTWF0Y2gpIHtcbiAgICAgIGNvbnN0IGFmdGVyVG8gPSByYW5nZVBhcnRpYWxNYXRjaFs0XSA/IHJhbmdlUGFydGlhbE1hdGNoWzRdLnRyaW0oKSA6ICcnO1xuICAgICAgLy8gRXh0cmFpcmUgbGEgcGFydGllIGF2YW50IFwiw6BcIiBvdSBcImFcIiBwb3VyIHJlY29uc3RydWlyZSBjb3JyZWN0ZW1lbnRcbiAgICAgIGNvbnN0IGJlZm9yZVRvID0gaW5wdXRTdHIuc3Vic3RyaW5nKDAsIGlucHV0U3RyLmluZGV4T2YocmFuZ2VQYXJ0aWFsTWF0Y2hbM10pICsgcmFuZ2VQYXJ0aWFsTWF0Y2hbM10ubGVuZ3RoKS50cmltRW5kKCk7XG4gICAgICBcbiAgICAgIC8vIEfDqW7DqXJlciBkZXMgc3VnZ2VzdGlvbnMgcG91ciBsZXMgam91cnMgZGUgZmluIHBvc3NpYmxlc1xuICAgICAgY29uc3QgYWxsRGF5cyA9IFtcbiAgICAgICAgdChcInN1bmRheVwiLCBsYW5nKSxcbiAgICAgICAgdChcIm1vbmRheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInR1ZXNkYXlcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ3ZWRuZXNkYXlcIiwgbGFuZyksXG4gICAgICAgIHQoXCJ0aHVyc2RheVwiLCBsYW5nKSxcbiAgICAgICAgdChcImZyaWRheVwiLCBsYW5nKSxcbiAgICAgICAgdChcInNhdHVyZGF5XCIsIGxhbmcpLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gYWxsRGF5c1xuICAgICAgICAubWFwKGRheSA9PiB7XG4gICAgICAgICAgaWYgKGFmdGVyVG8pIHtcbiAgICAgICAgICAgIC8vIFNpIG9uIGEgZMOpasOgIGNvbW1lbmPDqSDDoCB0YXBlciwgZmlsdHJlciBsZXMgam91cnMgcXVpIGNvbW1lbmNlbnQgcGFyIGNlIHRleHRlXG4gICAgICAgICAgICBpZiAoZGF5LnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChhZnRlclRvLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIC8vIFJlbXBsYWNlciBcImFmdGVyVG9cIiBwYXIgbGUgam91ciBjb21wbGV0XG4gICAgICAgICAgICAgIHJldHVybiBgJHtiZWZvcmVUb30gJHtkYXl9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYCR7YmVmb3JlVG99ICR7ZGF5fWA7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pOiBpdGVtIGlzIHN0cmluZyA9PiBpdGVtICE9PSBudWxsKVxuICAgICAgICAuZmlsdGVyKGl0ZW1zID0+IGl0ZW1zLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChpbnB1dFN0ci50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICByZXR1cm4gc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IHN1Z2dlc3Rpb25zIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gc3RhbmRhcmQgcG91ciBsZXMgZGF0ZXMgcmVsYXRpdmVzIHNpbXBsZXNcbiAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKGBeKCR7dChcImluXCIsIGxhbmcpfSApPyhbKy1dP1xcXFxkKylgLCBcImlcIilcbiAgICBjb25zdCByZWxhdGl2ZURhdGUgPSBpbnB1dFN0ci5tYXRjaChyZWdleHApO1xuICAgIGlmIChyZWxhdGl2ZURhdGUpIHtcbiAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlbGF0aXZlRGF0ZVtyZWxhdGl2ZURhdGUubGVuZ3RoIC0gMV07XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IFtcbiAgICAgICAgdChcImlubWludXRlc1wiLCBsYW5nLCB7IHRpbWVEZWx0YSB9KSxcbiAgICAgICAgdChcImluaG91cnNcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJpbmRheXNcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJpbndlZWtzXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwiaW5tb250aHNcIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJtaW51dGVzYWdvXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwiaG91cnNhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJkYXlzYWdvXCIsIGxhbmcsIHsgdGltZURlbHRhIH0pLFxuICAgICAgICB0KFwid2Vla3NhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICAgIHQoXCJtb250aHNhZ29cIiwgbGFuZywgeyB0aW1lRGVsdGEgfSksXG4gICAgICBdLmZpbHRlcihpdGVtcyA9PiBpdGVtcy50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoaW5wdXRTdHIudG9Mb3dlckNhc2UoKSkpO1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIGFuIGVtcHR5IGFycmF5IGhlcmU6IGFueSBkaWdpdC1sZWQgaW5wdXQgKGluY2x1ZGluZ1xuICAgICAgLy8gc3VmZml4LXN0eWxlIFwiMyBkaWFzIGF0csOhc1wiKSBtYXRjaGVzIHRoaXMgcmVnZXhwIHRvbywgc2luY2UgaXRzXG4gICAgICAvLyBwcmVmaXggZ3JvdXAgaXMgb3B0aW9uYWwgLS0gcmV0dXJuaW5nIHVuY29uZGl0aW9uYWxseSB3b3VsZCBtYWtlXG4gICAgICAvLyB0aGUgc3VmZml4LXBhdHRlcm4gY2hlY2sgYmVsb3cgdW5yZWFjaGFibGUgZGVhZCBjb2RlIGZvciBldmVyeVxuICAgICAgLy8gc3VmZml4LW9ubHkgbGFuZ3VhZ2UuXG4gICAgICBpZiAoc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU3VmZml4LXN0eWxlIHBhc3QgZXhwcmVzc2lvbnMsIGUuZy4gUG9ydHVndWVzZS9TcGFuaXNoIFwiMyBkaWFzIGF0csOhc1wiXG4gICAgLy8gKFggdW5pdCArIGFnb3N1ZmZpeCBtYXJrZXIpLCB0aGUgcGFzdC10ZW5zZSBtaXJyb3Igb2YgdGhlIHByZWZpeFxuICAgIC8vIHN1Z2dlc3Rpb25zIGFib3ZlLlxuICAgIGNvbnN0IGFnb1N1ZmZpeCA9IHQoXCJhZ29zdWZmaXhcIiwgbGFuZyk7XG4gICAgaWYgKGFnb1N1ZmZpeCAmJiBhZ29TdWZmaXggIT09IFwiTk9URk9VTkRcIikge1xuICAgICAgY29uc3Qgc3VmZml4TWF0Y2ggPSBpbnB1dFN0ci5tYXRjaCgvXihcXGQrKVxccysoXFx3KikvaSk7XG4gICAgICBpZiAoc3VmZml4TWF0Y2gpIHtcbiAgICAgICAgY29uc3QgdGltZURlbHRhID0gc3VmZml4TWF0Y2hbMV07XG4gICAgICAgIGNvbnN0IHN1ZmZpeFZhcmlhbnQgPSBhZ29TdWZmaXguc3BsaXQoJ3wnKVswXTtcblxuICAgICAgICBjb25zdCB1bml0VHlwZXMgPSBbJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgdW5pdFR5cGUgb2YgdW5pdFR5cGVzKSB7XG4gICAgICAgICAgY29uc3Qgd29yZHMgPSB0KHVuaXRUeXBlLCBsYW5nKS5zcGxpdCgnfCcpLm1hcCh3ID0+IHcudHJpbSgpKS5zbGljZSgwLCAyKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zLnB1c2goYCR7dGltZURlbHRhfSAke3dvcmR9ICR7c3VmZml4VmFyaWFudH1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHN1Z2dlc3Rpb25zLmZpbHRlcihpdGVtID0+IGl0ZW0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGlucHV0U3RyLnRvTG93ZXJDYXNlKCkpKTtcbiAgICAgICAgaWYgKGZpbHRlcmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFdlZWtkYXlTdWdnZXN0aW9ucyhpbnB1dFN0cjogc3RyaW5nLCBsYW5nOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgLy8gTGUgcGFyc2VyIHBldXQgZ8OpcmVyIGxlcyBhYnLDqXZpYXRpb25zICh0aHUsIG1vbiwgc2F0LCBldGMuKSwgZG9uYyBvbiBkb2l0IGxlcyBwcm9wb3NlciBhdXNzaVxuICAgIGNvbnN0IHdlZWtkYXlzID0gW1xuICAgICAgeyBrZXk6ICdzdW5kYXknLCBhYmJyOiBbJ3N1biddIH0sXG4gICAgICB7IGtleTogJ21vbmRheScsIGFiYnI6IFsnbW9uJ10gfSxcbiAgICAgIHsga2V5OiAndHVlc2RheScsIGFiYnI6IFsndHVlJywgJ3R1ZXMnXSB9LFxuICAgICAgeyBrZXk6ICd3ZWRuZXNkYXknLCBhYmJyOiBbJ3dlZCddIH0sXG4gICAgICB7IGtleTogJ3RodXJzZGF5JywgYWJicjogWyd0aHUnLCAndGh1cicsICd0aHVycyddIH0sXG4gICAgICB7IGtleTogJ2ZyaWRheScsIGFiYnI6IFsnZnJpJ10gfSxcbiAgICAgIHsga2V5OiAnc2F0dXJkYXknLCBhYmJyOiBbJ3NhdCddIH0sXG4gICAgXTtcblxuICAgIGNvbnN0IGlucHV0TG93ZXIgPSBpbnB1dFN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBkYXkgb2Ygd2Vla2RheXMpIHtcbiAgICAgIC8vIHQoKSBhbHdheXMgZmFsbHMgYmFjayB0byBFbmdsaXNoLCBhbmQgZW4udHMgYWx3YXlzIGRlZmluZXMgYWxsXG4gICAgICAvLyBzZXZlbiB3ZWVrZGF5cywgc28gdGhpcyBndWFyZCBjYW4ndCBhY3R1YWxseSBiZSBmYWxzZS5cbiAgICAgIGNvbnN0IGRheU5hbWUgPSB0KGRheS5rZXksIGxhbmcpO1xuICAgICAgaWYgKCFkYXlOYW1lIHx8IGRheU5hbWUgPT09IFwiTk9URk9VTkRcIikgY29udGludWU7XG5cbiAgICAgIGNvbnN0IGZpcnN0VmFyaWFudCA9IGRheU5hbWUuc3BsaXQoJ3wnKVswXS50cmltKCk7XG4gICAgICBjb25zdCBkYXlOYW1lTG93ZXIgPSBmaXJzdFZhcmlhbnQudG9Mb3dlckNhc2UoKTtcblxuICAgICAgLy8gVsOpcmlmaWVyIHNpIGxlIG5vbSBjb21wbGV0IGNvbW1lbmNlIHBhciBsJ2lucHV0ICh0b2zDqHJlIHVuZSBwZXRpdGUgZmF1dGUgZGUgZnJhcHBlKVxuICAgICAgaWYgKGZ1enp5TWF0Y2hlc1F1ZXJ5KGRheU5hbWVMb3dlciwgaW5wdXRMb3dlcikpIHtcbiAgICAgICAgY29uc3QgY2FwaXRhbGl6ZWQgPSBmaXJzdFZhcmlhbnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBmaXJzdFZhcmlhbnQuc2xpY2UoMSk7XG4gICAgICAgIGlmICghc3VnZ2VzdGlvbnMuaW5jbHVkZXMoY2FwaXRhbGl6ZWQpKSB7XG4gICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChjYXBpdGFsaXplZCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVsOpcmlmaWVyIHNpIHVuZSBhYnLDqXZpYXRpb24gY29ycmVzcG9uZCAtLSB0aGUgYWJicmV2aWF0aW9ucyBiZWxvdyBhcmVcbiAgICAgIC8vIEVuZ2xpc2gtb25seSAoZS5nLiBcIm1vblwiKSwgYnV0IGRheU5hbWUvZmlyc3RWYXJpYW50IGlzIHRyYW5zbGF0ZWRcbiAgICAgIC8vIChlLmcuIEZyZW5jaCBcImx1bmRpXCIpLCBzbyBmb3IgYW55IG5vbi1FbmdsaXNoIGxhbmd1YWdlIHRoZSBmdWxsLW5hbWVcbiAgICAgIC8vIGNoZWNrIGFib3ZlIG5ldmVyIG1hdGNoZXMgd2hpbGUgdGhpcyBhYmJyZXZpYXRpb24gY2hlY2sgc3RpbGwgZG9lcy5cbiAgICAgIC8vIFRoaXMgaXMgd2hhdCBsZXRzIEVuZ2xpc2ggd2Vla2RheSBhYmJyZXZpYXRpb25zIHdvcmsgYXMgYSBzaG9ydGN1dFxuICAgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGljaCBsYW5ndWFnZSBpcyBhY3RpdmUgKHZlcmlmaWVkOiB0eXBpbmcgXCJtb25cIiB3aXRoXG4gICAgICAvLyBvbmx5IEZyZW5jaCBlbmFibGVkIGNvcnJlY3RseSBzdWdnZXN0cyBcIkx1bmRpXCIpLlxuICAgICAgZm9yIChjb25zdCBhYmJyIG9mIGRheS5hYmJyKSB7XG4gICAgICAgIGlmIChhYmJyLnN0YXJ0c1dpdGgoaW5wdXRMb3dlcikpIHtcbiAgICAgICAgICBjb25zdCBjYXBpdGFsaXplZCA9IGZpcnN0VmFyaWFudC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGZpcnN0VmFyaWFudC5zbGljZSgxKTtcbiAgICAgICAgICBpZiAoIXN1Z2dlc3Rpb25zLmluY2x1ZGVzKGNhcGl0YWxpemVkKSkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMucHVzaChjYXBpdGFsaXplZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyBzdWdnZXN0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZGVmYXVsdFN1Z2dlc3Rpb25zKGlucHV0U3RyOiBzdHJpbmcsIGxhbmc6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gW1xuICAgICAgdChcInRvZGF5XCIsIGxhbmcpLFxuICAgICAgdChcInllc3RlcmRheVwiLCBsYW5nKSxcbiAgICAgIHQoXCJ0b21vcnJvd1wiLCBsYW5nKSxcbiAgICBdLmZpbHRlcihpdGVtID0+IGZ1enp5TWF0Y2hlc1F1ZXJ5KGl0ZW0sIGlucHV0U3RyKSk7XG4gIH1cblxuICByZW5kZXJTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZywgZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlldyA9IHRoaXMucmVzb2x2ZVByZXZpZXdUZXh0KHN1Z2dlc3Rpb24pO1xuICAgIGlmICghcHJldmlldyB8fCBwcmV2aWV3ID09PSBzdWdnZXN0aW9uKSB7XG4gICAgICBlbC5zZXRUZXh0KHN1Z2dlc3Rpb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBPYnNpZGlhbiByZWN5Y2xlcyBzdWdnZXN0aW9uLXJvdyBlbGVtZW50cyBhY3Jvc3MgcmVuZGVycyAodmlydHVhbGl6ZWRcbiAgICAvLyBsaXN0KSwgc28gYSBzdGFsZSBwcmV2aW91cyByZW5kZXIncyBjb250ZW50IG11c3QgYmUgY2xlYXJlZCBiZWZvcmVcbiAgICAvLyBhcHBlbmRpbmcgbmV3IHNwYW5zIC0tIG90aGVyd2lzZSBvbGQgdGV4dC9zcGFucyBzdGFjayB1cCBvbiB0b3Agb2ZcbiAgICAvLyBlYWNoIG90aGVyIG9uIHRoZSByZXVzZWQgZWxlbWVudC5cbiAgICBlbC5lbXB0eSgpO1xuICAgIGVsLmFkZENsYXNzKFwibmxkLXN1Z2dlc3Rpb24taXRlbVwiKTtcbiAgICBlbC5jcmVhdGVTcGFuKHsgY2xzOiBcIm5sZC1zdWdnZXN0aW9uLXRleHRcIiwgdGV4dDogc3VnZ2VzdGlvbiB9KTtcbiAgICBlbC5jcmVhdGVTcGFuKHsgY2xzOiBcIm5sZC1zdWdnZXN0aW9uLXByZXZpZXdcIiwgdGV4dDogcHJldmlldyB9KTtcbiAgfVxuXG4gIC8vIFJlc29sdmVzIGEgc3VnZ2VzdGlvbiB0byB0aGUgcGxhaW4tdGV4dCBkYXRlL3RpbWUgaXQgd291bGQgYWN0dWFsbHlcbiAgLy8gaW5zZXJ0IChubyBbW2xpbmtzXV0sIG5vIGFsaWFzKSAtLSBzaG93biBuZXh0IHRvIHRoZSBzdWdnZXN0aW9uIGluIHRoZVxuICAvLyBkcm9wZG93biBzbyB0aGUgdXNlciBjYW4gc2VlIHRoZSByZXNvbHZlZCB2YWx1ZSBiZWZvcmUgcGlja2luZyBvbmUuXG4gIC8vIERlbGliZXJhdGVseSBtaXJyb3JzIHNlbGVjdFN1Z2dlc3Rpb24oKSdzIG93biBkYXRlL3RpbWUgcmVzb2x1dGlvblxuICAvLyAodGltZS1zdWdnZXN0aW9uIC8gZGF0ZS1yYW5nZSAvIGh5YnJpZC1kYXRlLXRpbWUgYnJhbmNoZXMpIHNvIHRoZVxuICAvLyBwcmV2aWV3IGNhbiBuZXZlciBzaG93IHNvbWV0aGluZyBkaWZmZXJlbnQgZnJvbSB3aGF0IHNlbGVjdGluZyB0aGVcbiAgLy8gc3VnZ2VzdGlvbiBhY3R1YWxseSBwcm9kdWNlcyAtLSBhbmQsIHVubGlrZSBzZWxlY3RTdWdnZXN0aW9uKCksIG5ldmVyXG4gIC8vIHRvdWNoZXMgdGhlIGVkaXRvciBvciBoaXN0b3J5IGFuZCBjYW4ndCB0aHJvdzogYSBwYXJzaW5nIGZhaWx1cmUgaGVyZVxuICAvLyBqdXN0IG1lYW5zIG5vIHByZXZpZXcgaXMgc2hvd24sIG5vdCBhIGJyb2tlbiBzdWdnZXN0aW9uIGxpc3QuXG4gIHByaXZhdGUgcmVzb2x2ZVByZXZpZXdUZXh0KHN1Z2dlc3Rpb246IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uSXNUaW1lKHN1Z2dlc3Rpb24pKSB7XG4gICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gc3VnZ2VzdGlvbi5zdWJzdHJpbmcodGhpcy5nZXRUaW1lUHJlZml4TGVuZ3RoKHN1Z2dlc3Rpb24pKTtcbiAgICAgICAgY29uc3QgcGFyc2VkVGltZSA9IHRoaXMucGx1Z2luLnBhcnNlVGltZSh0aW1lUGFydCk7XG4gICAgICAgIC8vIHBhcnNlRGF0ZSgpL3BhcnNlVGltZSgpIG5ldmVyIHRocm93IC0tIG9uIHVucGFyc2VhYmxlIGlucHV0IHRoZXlcbiAgICAgICAgLy8gcmV0dXJuIGFuIE5MRFJlc3VsdCB3aXRoIGZvcm1hdHRlZFN0cmluZyBcIkludmFsaWQgZGF0ZVwiIGFuZCBhblxuICAgICAgICAvLyBpbnZhbGlkIG1vbWVudCwgbm90IGFuIGV4Y2VwdGlvbi4gQ2hlY2tpbmcgaXNWYWxpZCgpIGV4cGxpY2l0bHkgaXNcbiAgICAgICAgLy8gd2hhdCBhY3R1YWxseSBjYXRjaGVzIHRoYXQgY2FzZSAodGhlIHRyeS9jYXRjaCBiZWxvdyBpcyBvbmx5IGFcbiAgICAgICAgLy8gc2FmZXR5IG5ldCBmb3IgZ2VudWluZWx5IHVuZXhwZWN0ZWQgZXJyb3JzIGVsc2V3aGVyZSBpbiB0aGlzIG1ldGhvZCkuXG4gICAgICAgIGlmICghcGFyc2VkVGltZS5tb21lbnQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZFRpbWUuZm9ybWF0dGVkU3RyaW5nO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRlUmFuZ2UgPSB0aGlzLnBsdWdpbi5wYXJzZURhdGVSYW5nZShzdWdnZXN0aW9uKTtcbiAgICAgIGlmIChkYXRlUmFuZ2UpIHtcbiAgICAgICAgaWYgKGRhdGVSYW5nZS5kYXRlTGlzdCAmJiBkYXRlUmFuZ2UuZGF0ZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHJldHVybiBkYXRlUmFuZ2UuZGF0ZUxpc3QubWFwKG0gPT4gbS5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KSkuam9pbignLCAnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IGRhdGVSYW5nZS5zdGFydE1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZGF0ZVJhbmdlLmVuZE1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgY29uc3QgcHJpbWFyeUxhbmcgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXNbMF0gfHwgJ2VuJztcbiAgICAgICAgY29uc3QgdG9UcmFuc2xhdGlvbiA9IHQoXCJ0b1wiLCBwcmltYXJ5TGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICAgICAgcmV0dXJuIGAke3N0YXJ0Rm9ybWF0dGVkfSAke3RvVHJhbnNsYXRpb259ICR7ZW5kRm9ybWF0dGVkfWA7XG4gICAgICB9XG5cbiAgICAgIGxldCBoYXNUaW1lID0gdGhpcy5wbHVnaW4uaGFzVGltZUNvbXBvbmVudChzdWdnZXN0aW9uKTtcbiAgICAgIGlmICghaGFzVGltZSkge1xuICAgICAgICBjb25zdCBleHBsaWNpdFRpbWVSZWdleCA9IC9cXGQrXFxzKihtaW58bWluc3xtaW51dGV8bWludXRlc3xofGhvdXJ8aG91cnN8aGV1cmV8aGV1cmVzfHNlY3xzZWNvbmR8c2Vjb25kcykoPyFbYS16XSkvaTtcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb24ubWF0Y2goZXhwbGljaXRUaW1lUmVnZXgpKSB7XG4gICAgICAgICAgaGFzVGltZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyc2VkUmVzdWx0ID0gdGhpcy5wbHVnaW4ucGFyc2VEYXRlKHN1Z2dlc3Rpb24pO1xuICAgICAgaWYgKCFwYXJzZWRSZXN1bHQubW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNUaW1lKSB7XG4gICAgICAgIGNvbnN0IGlzVG9kYXkgPSBwYXJzZWRSZXN1bHQubW9tZW50LmlzU2FtZShtb21lbnQoKSwgJ2RheScpO1xuICAgICAgICBjb25zdCBpc1JlbGF0aXZlU2hvcnRUZXJtID0gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHN1Z2dlc3Rpb24sIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gICAgICAgIGNvbnN0IHNob3VsZE9taXREYXRlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlICYmIGlzVG9kYXkgJiYgaXNSZWxhdGl2ZVNob3J0VGVybTtcbiAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgIGlmIChzaG91bGRPbWl0RGF0ZSkge1xuICAgICAgICAgIHJldHVybiB0aW1lUGFydDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkYXRlUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgIHJldHVybiBgJHtkYXRlUGFydH0gJHt0aW1lUGFydH1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlZFJlc3VsdC5mb3JtYXR0ZWRTdHJpbmc7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdEYXRlU3VnZ2VzdDogZmFpbGVkIHRvIHJlc29sdmUgYXV0b3N1Z2dlc3QgcHJldmlldycsIHsgc3VnZ2VzdGlvbiwgZXJyb3IgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBzZWxlY3RTdWdnZXN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQgfCBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgLy8gVXRpbGlzZXIgbCfDqWRpdGV1ciBkdSBjb250ZXh0ZSBzaSBkaXNwb25pYmxlLCBzaW5vbiBjaGVyY2hlciBsJ8OpZGl0ZXVyIGFjdGlmXG4gICAgbGV0IGVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKHRoaXMuY29udGV4dD8uZWRpdG9yKSB7XG4gICAgICBlZGl0b3IgPSB0aGlzLmNvbnRleHQuZWRpdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICBlZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3IodGhpcy5hcHAud29ya3NwYWNlKTtcbiAgICB9XG5cbiAgICBpZiAoIWVkaXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluY2x1ZGVBbGlhcyA9IGV2ZW50LnNoaWZ0S2V5O1xuICAgIC8vIFdoZW4ga2VlcGluZyB0aGUgdHlwZWQgdGV4dCBhcyBhbGlhcyAoU2hpZnQpLCBwcmVmZXIgd2hhdCB0aGUgdXNlclxuICAgIC8vIGFjdHVhbGx5IHR5cGVkIG92ZXIgdGhlIHN1Z2dlc3Rpb24ncyBjYW5vbmljYWwgZGljdGlvbmFyeSBjYXNpbmdcbiAgICAvLyAoZS5nLiBGcmVuY2ggXCJkZW1haW5cIiB2cyB0aGUgZGljdGlvbmFyeSdzIFwiRGVtYWluXCIpIC0tIGJ1dCBvbmx5IHdoZW5cbiAgICAvLyB0aGV5IHR5cGVkIHRoZSBjb21wbGV0ZSB3b3JkL3BocmFzZSwganVzdCBpbiBhIGRpZmZlcmVudCBjYXNpbmc7IGFcbiAgICAvLyBwYXJ0aWFsIHF1ZXJ5IChcImRlbWFpXCIpIHdvdWxkIG1ha2UgZm9yIGEgYnJva2VuLWxvb2tpbmcgYWxpYXMsIHNvXG4gICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBmdWxsIHN1Z2dlc3Rpb24gdGV4dCBpbiB0aGF0IGNhc2UuIExhbmd1YWdlLWFnbm9zdGljOlxuICAgIC8vIHRoaXMgb25seSBjb21wYXJlcyB0aGUgdHlwZWQgdGV4dCB0byB0aGUgc3VnZ2VzdGlvbiB0ZXh0LlxuICAgIGNvbnN0IHR5cGVkUXVlcnkgPSB0aGlzLmNvbnRleHQ/LnF1ZXJ5O1xuICAgIGNvbnN0IGFsaWFzVGV4dCA9ICh0eXBlZFF1ZXJ5ICYmIHR5cGVkUXVlcnkudG9Mb3dlckNhc2UoKSA9PT0gc3VnZ2VzdGlvbi50b0xvd2VyQ2FzZSgpKVxuICAgICAgPyB0eXBlZFF1ZXJ5XG4gICAgICA6IHN1Z2dlc3Rpb247XG4gICAgbGV0IGRhdGVTdHIgPSBcIlwiO1xuICAgIGxldCBtYWtlSW50b0xpbmsgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hdXRvc3VnZ2VzdFRvZ2dsZUxpbms7XG5cbiAgICAvLyBXZSBjaGVjayBpZiB0aGUgaW5wdXQgY29udGFpbnMgYSB0aW1lIGNvbXBvbmVudCB1c2luZyB0aGUgcGFyc2VyIGxvZ2ljLlxuICAgIGxldCBoYXNUaW1lID0gdGhpcy5wbHVnaW4uaGFzVGltZUNvbXBvbmVudChzdWdnZXN0aW9uKTtcblxuICAgIC8vIC0tLSBDT1JSRUNUSU9OIE1VTFRJTEFOR1VFIC0tLVxuICAgIC8vIFNpIGxlIHBhcnNlciBuJ2EgcGFzIGTDqXRlY3TDqSBsJ2hldXJlIChzb3V2ZW50IGxlIGNhcyBlbiBhbmdsYWlzIHBvdXIgXCJpbiAyIG1pbnV0ZXNcIiksXG4gICAgLy8gb24gZm9yY2UgbGEgZMOpdGVjdGlvbiBzaSBvbiB2b2l0IGRlcyBtb3RzIGNsw6lzIGV4cGxpY2l0ZXMgKG1pbiwgaG91ciwgZXRjKS5cbiAgICAvLyBJTVBPUlRBTlQ6IE5lIHBhcyBtYXRjaGVyIFwibVwiIGRhbnMgXCJtb250aFwiIC0gdsOpcmlmaWVyIHF1ZSBjJ2VzdCBiaWVuIHVuIG1vdCBkZSB0ZW1wc1xuICAgIGlmICghaGFzVGltZSkge1xuICAgICAgLy8gUmVnZXggcG91ciBkw6l0ZWN0ZXIgdW4gY2hpZmZyZSBzdWl2aSBkZSBtaW4vaG91ci9oZXVyZS9oIChtYWlzIHBhcyBcIm1cIiBzZXVsIHF1aSBwb3VycmFpdCDDqnRyZSBcIm1vbnRoXCIpXG4gICAgICAvLyBPbiB2w6lyaWZpZSBxdWUgXCJtXCIgZXN0IHN1aXZpIGRlIFwiaW5cIiwgXCJpbnNcIiwgb3UgZXN0IGVuIGZpbiBkZSBtb3QsIGV0IHBhcyBcIm9udGhcIiAobW9udGgpXG4gICAgICBjb25zdCBleHBsaWNpdFRpbWVSZWdleCA9IC9cXGQrXFxzKihtaW58bWluc3xtaW51dGV8bWludXRlc3xofGhvdXJ8aG91cnN8aGV1cmV8aGV1cmVzfHNlY3xzZWNvbmR8c2Vjb25kcykoPyFbYS16XSkvaTtcbiAgICAgIGlmIChzdWdnZXN0aW9uLm1hdGNoKGV4cGxpY2l0VGltZVJlZ2V4KSkge1xuICAgICAgICBoYXNUaW1lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25Jc1RpbWUoc3VnZ2VzdGlvbikpIHtcbiAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gc3VnZ2VzdGlvbi5zdWJzdHJpbmcodGhpcy5nZXRUaW1lUHJlZml4TGVuZ3RoKHN1Z2dlc3Rpb24pKTtcbiAgICAgIGRhdGVTdHIgPSB0aGlzLnBsdWdpbi5wYXJzZVRpbWUodGltZVBhcnQpLmZvcm1hdHRlZFN0cmluZztcbiAgICAgIG1ha2VJbnRvTGluayA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWw6lyaWZpZXIgZCdhYm9yZCBzaSBjJ2VzdCB1bmUgcGxhZ2UgZGUgZGF0ZXNcbiAgICAgIGNvbnN0IGRhdGVSYW5nZSA9IHRoaXMucGx1Z2luLnBhcnNlRGF0ZVJhbmdlKHN1Z2dlc3Rpb24pO1xuICAgICAgXG4gICAgICBpZiAoZGF0ZVJhbmdlKSB7XG4gICAgICAgIC8vIEMnZXN0IHVuZSBwbGFnZSBkZSBkYXRlc1xuICAgICAgICAvLyBTaSBvbiBhIHVuZSBsaXN0ZSBkZSBkYXRlcywgZ8OpbsOpcmVyIHVuZSBsaXN0ZSBkZSBsaWVucyBhdSBsaWV1IGQndW5lIHBsYWdlXG4gICAgICAgIGlmIChkYXRlUmFuZ2UuZGF0ZUxpc3QgJiYgZGF0ZVJhbmdlLmRhdGVMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBkYXRlTGlua3MgPSBkYXRlUmFuZ2UuZGF0ZUxpc3QubWFwKG0gPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gbS5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgICAgIHJldHVybiBtYWtlSW50b0xpbmsgXG4gICAgICAgICAgICAgID8gZ2VuZXJhdGVNYXJrZG93bkxpbmsodGhpcy5hcHAsIGZvcm1hdHRlZClcbiAgICAgICAgICAgICAgOiBmb3JtYXR0ZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZGF0ZVN0ciA9IGRhdGVMaW5rcy5qb2luKCcsICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIHZlcnMgbCdhbmNpZW4gY29tcG9ydGVtZW50IChwbGFnZSlcbiAgICAgICAgICBjb25zdCBzdGFydEZvcm1hdHRlZCA9IGRhdGVSYW5nZS5zdGFydE1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9ybWF0KTtcbiAgICAgICAgICBjb25zdCBlbmRGb3JtYXR0ZWQgPSBkYXRlUmFuZ2UuZW5kTW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIE9idGVuaXIgbGEgdHJhZHVjdGlvbiBkZSBcInRvXCIgc2Vsb24gbGEgbGFuZ3VlIHByaW5jaXBhbGVcbiAgICAgICAgICBjb25zdCBwcmltYXJ5TGFuZyA9IHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlc1swXSB8fCAnZW4nO1xuICAgICAgICAgIGNvbnN0IHRvVHJhbnNsYXRpb24gPSB0KFwidG9cIiwgcHJpbWFyeUxhbmcpLnNwbGl0KCd8JylbMF07IC8vIFByZW5kcmUgbGEgcHJlbWnDqHJlIHZhcmlhbnRlXG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKG1ha2VJbnRvTGluaykge1xuICAgICAgICAgICAgZGF0ZVN0ciA9IGdlbmVyYXRlTWFya2Rvd25MaW5rKFxuICAgICAgICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgICAgICAgc3RhcnRGb3JtYXR0ZWQsXG4gICAgICAgICAgICAgIGluY2x1ZGVBbGlhcyA/IGFsaWFzVGV4dCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgKSArIGAgJHt0b1RyYW5zbGF0aW9ufSBgICsgZ2VuZXJhdGVNYXJrZG93bkxpbmsoXG4gICAgICAgICAgICAgIHRoaXMuYXBwLFxuICAgICAgICAgICAgICBlbmRGb3JtYXR0ZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGVTdHIgPSBgJHtzdGFydEZvcm1hdHRlZH0gJHt0b1RyYW5zbGF0aW9ufSAke2VuZEZvcm1hdHRlZH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBtYWtlSW50b0xpbmsgPSBmYWxzZTsgLy8gRMOpasOgIGfDqXLDqSBjaS1kZXNzdXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFJlc3VsdCA9IHRoaXMucGx1Z2luLnBhcnNlRGF0ZShzdWdnZXN0aW9uKTtcblxuICAgICAgICAvLyAtLS0gT1BUSU1JU0FUSU9OIDogT21ldHRyZSBsYSBkYXRlIHBvdXIgZXhwcmVzc2lvbnMgcmVsYXRpdmVzIGNvdXJ0ZXMgYXVqb3VyZCdodWkgLS0tXG4gICAgICAgIGNvbnN0IGlzVG9kYXkgPSBwYXJzZWRSZXN1bHQubW9tZW50LmlzU2FtZShtb21lbnQoKSwgJ2RheScpO1xuICAgICAgICBjb25zdCBpc1JlbGF0aXZlU2hvcnRUZXJtID0gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHN1Z2dlc3Rpb24sIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gICAgICAgIGNvbnN0IHNob3VsZE9taXREYXRlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3Mub21pdERhdGVGb3JTaG9ydFJlbGF0aXZlICYmIGlzVG9kYXkgJiYgaXNSZWxhdGl2ZVNob3J0VGVybSAmJiBoYXNUaW1lO1xuXG4gICAgICAgIC8vIC0tLSBIWUJSSUQgTElOSyBMT0dJQyBTVEFSVCAtLS1cbiAgICAgICAgLy8gSWYgYSB0aW1lIGlzIGRldGVjdGVkIEFORCBsaW5raW5nIGlzIGVuYWJsZWQsIHdlIHNwbGl0IHRoZSBsaW5rLlxuICAgICAgICAvLyBFeHBlY3RlZCByZXN1bHQ6IFtbWVlZWS1NTS1ERF1dIEhIOm1tXG4gICAgICAgIGlmIChoYXNUaW1lICYmIG1ha2VJbnRvTGluaykge1xuICAgICAgICAgIGlmIChzaG91bGRPbWl0RGF0ZSkge1xuICAgICAgICAgICAgLy8gQ0FTIE9QVElNSVPDiSA6IEp1c3RlIGwnaGV1cmUgcG91ciBcImRhbnMgWCBtaW4vaGV1cmVzXCIgYXVqb3VyZCdodWlcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gcGFyc2VkUmVzdWx0Lm1vbWVudC5mb3JtYXQodGhpcy5wbHVnaW4uc2V0dGluZ3MudGltZUZvcm1hdCB8fCBcIkhIOm1tXCIpO1xuICAgICAgICAgICAgZGF0ZVN0ciA9IHRpbWVQYXJ0O1xuICAgICAgICAgICAgbWFrZUludG9MaW5rID0gZmFsc2U7IC8vIFBhcyBkZSBsaWVuIG7DqWNlc3NhaXJlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIDEuIEZvcm1hdCB0aGUgZGF0ZSBwYXJ0XG4gICAgICAgICAgICBjb25zdCBkYXRlUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIDIuIEZvcm1hdCB0aGUgdGltZSBwYXJ0IChmYWxsYmFjayB0byBISDptbSBpZiBub3Qgc2V0KVxuICAgICAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG5cbiAgICAgICAgICAgIC8vIDMuIEdlbmVyYXRlIHRoZSBtYXJrZG93biBsaW5rIE9OTFkgZm9yIHRoZSBkYXRlIHBhcnRcbiAgICAgICAgICAgIGRhdGVTdHIgPSBnZW5lcmF0ZU1hcmtkb3duTGluayhcbiAgICAgICAgICAgICAgdGhpcy5hcHAsXG4gICAgICAgICAgICAgIGRhdGVQYXJ0LFxuICAgICAgICAgICAgICBpbmNsdWRlQWxpYXMgPyBhbGlhc1RleHQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICkgKyBcIiBcIiArIHRpbWVQYXJ0OyAvLyBBcHBlbmQgdGltZSBhcyBwbGFpbiB0ZXh0XG5cbiAgICAgICAgICAgIC8vIDQuIERpc2FibGUgc3RhbmRhcmQgbGlua2luZyBzaW5jZSB3ZSBjb25zdHJ1Y3RlZCBpdCBtYW51YWxseSBhYm92ZVxuICAgICAgICAgICAgbWFrZUludG9MaW5rID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGhhc1RpbWUgJiYgIW1ha2VJbnRvTGluaykge1xuICAgICAgICAgIC8vIE3Dqm1lIGxvZ2lxdWUgc2kgcGFzIGRlIGxpZW4gbWFpcyBhdmVjIGhldXJlXG4gICAgICAgICAgaWYgKHNob3VsZE9taXREYXRlKSB7XG4gICAgICAgICAgICBjb25zdCB0aW1lUGFydCA9IHBhcnNlZFJlc3VsdC5tb21lbnQuZm9ybWF0KHRoaXMucGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQgfHwgXCJISDptbVwiKTtcbiAgICAgICAgICAgIGRhdGVTdHIgPSB0aW1lUGFydDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGF0ZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgICAgY29uc3QgdGltZVBhcnQgPSBwYXJzZWRSZXN1bHQubW9tZW50LmZvcm1hdCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBkYXRlU3RyID0gYCR7ZGF0ZVBhcnR9ICR7dGltZVBhcnR9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU3RhbmRhcmQgYmVoYXZpb3IgZm9yIGRhdGVzIHdpdGhvdXQgdGltZSAoZS5nLiwgQHRvbW9ycm93KVxuICAgICAgICAgIGRhdGVTdHIgPSBwYXJzZWRSZXN1bHQuZm9ybWF0dGVkU3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIC8vIC0tLSBIWUJSSUQgTElOSyBMT0dJQyBFTkQgLS0tXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1ha2VJbnRvTGluaykge1xuICAgICAgZGF0ZVN0ciA9IGdlbmVyYXRlTWFya2Rvd25MaW5rKFxuICAgICAgICB0aGlzLmFwcCxcbiAgICAgICAgZGF0ZVN0cixcbiAgICAgICAgaW5jbHVkZUFsaWFzID8gYWxpYXNUZXh0IDogdW5kZWZpbmVkXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jb250ZXh0KSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0RhdGVTdWdnZXN0OiBjb250ZXh0IGlzIHVuZGVmaW5lZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBcbiAgICBlZGl0b3IucmVwbGFjZVJhbmdlKGRhdGVTdHIsIHRoaXMuY29udGV4dC5zdGFydCwgdGhpcy5jb250ZXh0LmVuZCk7XG5cbiAgICAvLyBFbnJlZ2lzdHJlciBsYSBzw6lsZWN0aW9uIGRhbnMgbCdoaXN0b3JpcXVlIChkZSBtYW5pw6hyZSBhc3luY2hyb25lKVxuICAgIGlmICh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVTbWFydFN1Z2dlc3Rpb25zICYmIFxuICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5lbmFibGVIaXN0b3J5U3VnZ2VzdGlvbnMgJiYgXG4gICAgICAgIHRoaXMucGx1Z2luLmhpc3RvcnlNYW5hZ2VyKSB7XG4gICAgICB0aGlzLnBsdWdpbi5oaXN0b3J5TWFuYWdlci5yZWNvcmRTZWxlY3Rpb24oc3VnZ2VzdGlvbikuY2F0Y2goX2VyciA9PiB7XG4gICAgICAgIC8vIElnbm9yZXIgbGVzIGVycmV1cnMgc2lsZW5jaWV1c2VtZW50XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvblRyaWdnZXIoXG4gICAgY3Vyc29yOiBFZGl0b3JQb3NpdGlvbixcbiAgICBlZGl0b3I6IEVkaXRvcixcbiAgICBfZmlsZTogVEZpbGVcbiAgKTogRWRpdG9yU3VnZ2VzdFRyaWdnZXJJbmZvIHtcbiAgICBpZiAoIXRoaXMucGx1Z2luLnNldHRpbmdzLmlzQXV0b3N1Z2dlc3RFbmFibGVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlnZ2VyUGhyYXNlID0gdGhpcy5wbHVnaW4uc2V0dGluZ3MuYXV0b2NvbXBsZXRlVHJpZ2dlclBocmFzZTtcbiAgICBjb25zdCBzdGFydFBvcyA9IHRoaXMuY29udGV4dD8uc3RhcnQgfHwge1xuICAgICAgbGluZTogY3Vyc29yLmxpbmUsXG4gICAgICBjaDogY3Vyc29yLmNoIC0gdHJpZ2dlclBocmFzZS5sZW5ndGgsXG4gICAgfTtcblxuICAgIGNvbnN0IHF1ZXJ5ID0gZWRpdG9yLmdldFJhbmdlKHN0YXJ0UG9zLCBjdXJzb3IpO1xuXG4gICAgaWYgKCFxdWVyeS5zdGFydHNXaXRoKHRyaWdnZXJQaHJhc2UpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwcmVjZWRpbmdDaGFyID0gZWRpdG9yLmdldFJhbmdlKFxuICAgICAge1xuICAgICAgICBsaW5lOiBzdGFydFBvcy5saW5lLFxuICAgICAgICBjaDogc3RhcnRQb3MuY2ggLSAxLFxuICAgICAgfSxcbiAgICAgIHN0YXJ0UG9zXG4gICAgKTtcblxuICAgIC8vIFNob3J0LWNpcmN1aXQgaWYgYEBgIGFzIGEgcGFydCBvZiBhIHdvcmQgKGUuZy4gcGFydCBvZiBhbiBlbWFpbCBhZGRyZXNzKVxuICAgIGlmIChwcmVjZWRpbmdDaGFyICYmIC9bYGEtekEtWjAtOV0vLnRlc3QocHJlY2VkaW5nQ2hhcikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogc3RhcnRQb3MsXG4gICAgICBlbmQ6IGN1cnNvcixcbiAgICAgIHF1ZXJ5OiBlZGl0b3IuZ2V0UmFuZ2Uoc3RhcnRQb3MsIGN1cnNvcikuc3Vic3RyaW5nKHRyaWdnZXJQaHJhc2UubGVuZ3RoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1Z2dlc3Rpb25Jc1RpbWUoc3VnZ2VzdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcy5zb21lKGxhbmcgPT4ge1xuICAgICAgY29uc3QgdGltZVdvcmQgPSB0KFwidGltZVwiLCBsYW5nKS5zcGxpdCgnfCcpWzBdO1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb24uc3RhcnRzV2l0aChgJHt0aW1lV29yZH06YCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBMZW5ndGggb2YgdGhlIFwiPFRpbWVXb3JkPjpcIiBwcmVmaXggdGhhdCBnZXRUaW1lU3VnZ2VzdGlvbnMoKSBidWlsZHMgaXRzXG4gIC8vIHN1Z2dlc3Rpb25zIHdpdGgsIHNvIGNhbGxlcnMgY2FuIHN0cmlwIGV4YWN0bHkgdGhhdCBtYW55IGNoYXJhY3RlcnNcbiAgLy8gaW5zdGVhZCBvZiBhIGhhcmRjb2RlZCBsZW5ndGggLS0gXCJUaW1lOlwiIGlzIDUgY2hhcnMgb25seSBpbiBFbmdsaXNoIGFuZFxuICAvLyBhIGZldyBvdGhlcnMgYnkgY29pbmNpZGVuY2UgKGUuZy4gRnJlbmNoIFwiaGV1cmU6XCIgaXMgNiwgSXRhbGlhbiBcIm9yYTpcIlxuICAvLyBpcyA0LCBDaGluZXNlIFwi5pmC6ZaTOlwiIGlzIDMgVVRGLTE2IGNvZGUgdW5pdHMpLlxuICBwcm90ZWN0ZWQgZ2V0VGltZVByZWZpeExlbmd0aChzdWdnZXN0aW9uOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYW5ndWFnZXMpIHtcbiAgICAgIGNvbnN0IHRpbWVXb3JkID0gdChcInRpbWVcIiwgbGFuZykuc3BsaXQoJ3wnKVswXTtcbiAgICAgIGNvbnN0IHByZWZpeCA9IGAke3RpbWVXb3JkfTpgO1xuICAgICAgaWYgKHN1Z2dlc3Rpb24uc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgICAgIHJldHVybiBwcmVmaXgubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHByb3RlY3RlZCB1bmlxdWUoc3VnZ2VzdGlvbnM6IHN0cmluZ1tdKSA6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gc3VnZ2VzdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0sIHBvcykge1xuICAgICAgcmV0dXJuIHN1Z2dlc3Rpb25zLmluZGV4T2YoaXRlbSkgPT0gcG9zO1xuICAgIH0pXG4gIH1cbn0iLCJpbXBvcnQgeyBhZGp1c3RDdXJzb3IsIGdldFNlbGVjdGVkVGV4dCwgc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlLCBnZXRBY3RpdmVFZGl0b3IgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuL21haW5cIjtcbmltcG9ydCB0IGZyb20gXCIuL2xhbmcvaGVscGVyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCIuL3dpbmRvdy1tb21lbnRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcnNlQ29tbWFuZChwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzLCBtb2RlOiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgeyB3b3Jrc3BhY2UgfSA9IHBsdWdpbi5hcHA7XG4gIGNvbnN0IGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcih3b3Jrc3BhY2UpO1xuXG4gIC8vIEwnw6lkaXRldXIgcG91cnJhaXQgbmUgcGFzIMOqdHJlIGRpc3BvbmlibGUgKHBhciBleGVtcGxlIGRhbnMgdW5lIHZ1ZSBub24tbWFya2Rvd24pXG4gIGlmICghZWRpdG9yKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHNlbGVjdGVkVGV4dCA9IGdldFNlbGVjdGVkVGV4dChlZGl0b3IpO1xuICAvLyBDYXB0dXJlZCBhZnRlciBnZXRTZWxlY3RlZFRleHQoKTogd2hlbiBub3RoaW5nIHdhcyBzZWxlY3RlZCwgdGhhdCBjYWxsXG4gIC8vIGV4cGFuZHMgdGhlIHNlbGVjdGlvbiB0byB0aGUgd29yZCBhdCB0aGUgY3Vyc29yLCB3aGljaCBtb3ZlcyB3aGVyZSB0aGVcbiAgLy8gc2VsZWN0aW9uIGFjdHVhbGx5IGVuZHMuIENhcHR1cmluZyB0aGUgY3Vyc29yIGJlZm9yZWhhbmQgd291bGQgYW5jaG9yXG4gIC8vIGFkanVzdEN1cnNvcigpJ3Mgb2Zmc2V0IG1hdGggdG8gdGhlIHByZS1leHBhbnNpb24gcG9zaXRpb24gaW5zdGVhZCBvZlxuICAvLyB0aGUgZWRnZSBvZiB0aGUgdGV4dCB0aGF0J3MgYWJvdXQgdG8gYmUgcmVwbGFjZWQuXG4gIGNvbnN0IGN1cnNvciA9IGVkaXRvci5nZXRDdXJzb3IoXCJ0b1wiKTtcblxuICAvLyBWw6lyaWZpZXIgZCdhYm9yZCBzaSBjJ2VzdCB1bmUgcGxhZ2UgZGUgZGF0ZXNcbiAgY29uc3QgZGF0ZVJhbmdlID0gcGx1Z2luLnBhcnNlRGF0ZVJhbmdlKHNlbGVjdGVkVGV4dCk7XG4gIGlmIChkYXRlUmFuZ2UpIHtcbiAgICAvLyBDJ2VzdCB1bmUgcGxhZ2UgZGUgZGF0ZXNcbiAgICBsZXQgbmV3U3RyID0gXCJcIjtcbiAgICBcbiAgICAvLyBTaSBvbiBhIHVuZSBsaXN0ZSBkZSBkYXRlcywgZ8OpbsOpcmVyIHVuZSBsaXN0ZSBkZSBsaWVucyBhdSBsaWV1IGQndW5lIHBsYWdlXG4gICAgaWYgKGRhdGVSYW5nZS5kYXRlTGlzdCAmJiBkYXRlUmFuZ2UuZGF0ZUxpc3QubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZGF0ZUxpbmtzID0gZGF0ZVJhbmdlLmRhdGVMaXN0Lm1hcChtID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gbS5mb3JtYXQocGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICAgIGlmIChtb2RlID09IFwicmVwbGFjZVwiKSB7XG4gICAgICAgICAgcmV0dXJuIGBbWyR7Zm9ybWF0dGVkfV1dYDtcbiAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IFwibGlua1wiKSB7XG4gICAgICAgICAgcmV0dXJuIGBbJHtmb3JtYXR0ZWR9XSgke2Zvcm1hdHRlZH0pYDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBcImNsZWFuXCIgYW5kIFwidGltZVwiIGJvdGggcmVzb2x2ZSB0byB0aGUgcGxhaW4gZm9ybWF0dGVkIGRhdGUgaGVyZTpcbiAgICAgICAgICAvLyBlYWNoIGRhdGVMaXN0IGVudHJ5IGlzIGEgd2hvbGUgY2FsZW5kYXIgZGF5IHdpdGggbm8gcGFyc2VkIHRpbWVcbiAgICAgICAgICAvLyBjb21wb25lbnQsIHNvIFwidGltZVwiIGZvciBhIHJhbmdlIG1lYW5zIHRoZSBzYW1lIGFzIFwiY2xlYW5cIiAoc2VlXG4gICAgICAgICAgLy8gdGhlIGlkZW50aWNhbCBtb2RlID09IFwidGltZVwiIGNhc2UgaW4gdGhlIG5vbi1saXN0IGJyYW5jaCBiZWxvdykuXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBuZXdTdHIgPSBkYXRlTGlua3Muam9pbignLCAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgdmVycyBsJ2FuY2llbiBjb21wb3J0ZW1lbnQgKHBsYWdlKVxuICAgICAgY29uc3Qgc3RhcnRGb3JtYXR0ZWQgPSBkYXRlUmFuZ2Uuc3RhcnRNb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgY29uc3QgZW5kRm9ybWF0dGVkID0gZGF0ZVJhbmdlLmVuZE1vbWVudC5mb3JtYXQocGx1Z2luLnNldHRpbmdzLmZvcm1hdCk7XG4gICAgICBcbiAgICAgIC8vIE9idGVuaXIgbGEgdHJhZHVjdGlvbiBkZSBcInRvXCIgc2Vsb24gbGEgbGFuZ3VlIHByaW5jaXBhbGVcbiAgICAgIGNvbnN0IHByaW1hcnlMYW5nID0gcGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlc1swXSB8fCAnZW4nO1xuICAgICAgY29uc3QgdG9UcmFuc2xhdGlvbiA9IHQoXCJ0b1wiLCBwcmltYXJ5TGFuZykuc3BsaXQoJ3wnKVswXTsgLy8gUHJlbmRyZSBsYSBwcmVtacOocmUgdmFyaWFudGVcbiAgICAgIFxuICAgICAgaWYgKG1vZGUgPT0gXCJyZXBsYWNlXCIpIHtcbiAgICAgICAgLy8gR8OpbsOpcmVyIGRlcyBsaWVucyBwb3VyIGxhIHBsYWdlIDogW1tzdGFydF1dIHRvIFtbZW5kXV1cbiAgICAgICAgbmV3U3RyID0gYFtbJHtzdGFydEZvcm1hdHRlZH1dXSAke3RvVHJhbnNsYXRpb259IFtbJHtlbmRGb3JtYXR0ZWR9XV1gO1xuICAgICAgfSBlbHNlIGlmIChtb2RlID09IFwibGlua1wiKSB7XG4gICAgICAgIC8vIExpZW4gTWFya2Rvd24gc3RhbmRhcmRcbiAgICAgICAgbmV3U3RyID0gYFske3NlbGVjdGVkVGV4dH1dKCR7ZGF0ZVJhbmdlLmZvcm1hdHRlZFN0cmluZ30pYDtcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBcImNsZWFuXCIpIHtcbiAgICAgICAgLy8gVGV4dGUgYnJ1dCBzYW5zIGxpZW5cbiAgICAgICAgbmV3U3RyID0gYCR7c3RhcnRGb3JtYXR0ZWR9ICR7dG9UcmFuc2xhdGlvbn0gJHtlbmRGb3JtYXR0ZWR9YDtcbiAgICAgIH0gZWxzZSBpZiAobW9kZSA9PSBcInRpbWVcIikge1xuICAgICAgICAvLyBQYXMgZCdoZXVyZSBwb3VyIGxlcyBwbGFnZXNcbiAgICAgICAgbmV3U3RyID0gYCR7c3RhcnRGb3JtYXR0ZWR9ICR7dG9UcmFuc2xhdGlvbn0gJHtlbmRGb3JtYXR0ZWR9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24obmV3U3RyKTtcbiAgICBhZGp1c3RDdXJzb3IoZWRpdG9yLCBjdXJzb3IsIG5ld1N0ciwgc2VsZWN0ZWRUZXh0KTtcbiAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBTaW5vbiwgdHJhaXRlciBjb21tZSB1bmUgZGF0ZSBub3JtYWxlXG4gIGNvbnN0IGRhdGUgPSBwbHVnaW4ucGFyc2VEYXRlKHNlbGVjdGVkVGV4dCk7XG5cbiAgaWYgKCFkYXRlLm1vbWVudC5pc1ZhbGlkKCkpIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gICAgZWRpdG9yLnNldEN1cnNvcih7XG4gICAgICBsaW5lOiBjdXJzb3IubGluZSxcbiAgICAgIGNoOiBjdXJzb3IuY2gsXG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gLS0tIE1PRElGSUNBVElPTiBJTlRFTExJR0VOVEUgVjAuOSAtLS1cbiAgLy8gT24gdsOpcmlmaWUgc2kgdW5lIGhldXJlIGVzdCBwcsOpc2VudGUgZGFucyBsZSB0ZXh0ZSBzw6lsZWN0aW9ubsOpXG4gIGNvbnN0IGhhc1RpbWUgPSBwbHVnaW4uaGFzVGltZUNvbXBvbmVudChzZWxlY3RlZFRleHQpO1xuXG4gIC8vIC0tLSBPUFRJTUlTQVRJT04gOiBPbWV0dHJlIGxhIGRhdGUgcG91ciBleHByZXNzaW9ucyByZWxhdGl2ZXMgY291cnRlcyBhdWpvdXJkJ2h1aSAtLS1cbiAgY29uc3QgaXNUb2RheSA9IGRhdGUubW9tZW50LmlzU2FtZShtb21lbnQoKSwgJ2RheScpO1xuICBjb25zdCBpc1JlbGF0aXZlU2hvcnRUZXJtID0gc2hvdWxkT21pdERhdGVGb3JTaG9ydFJlbGF0aXZlKHNlbGVjdGVkVGV4dCwgcGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gIGNvbnN0IHNob3VsZE9taXREYXRlID0gcGx1Z2luLnNldHRpbmdzLm9taXREYXRlRm9yU2hvcnRSZWxhdGl2ZSAmJiBpc1RvZGF5ICYmIGlzUmVsYXRpdmVTaG9ydFRlcm0gJiYgaGFzVGltZTtcblxuICBsZXQgbmV3U3RyID0gXCJcIjtcblxuICBpZiAobW9kZSA9PSBcInJlcGxhY2VcIikge1xuICAgIC8vIEMnZXN0IGxlIG1vZGUgcGFyIGTDqWZhdXQgKENyZWF0ZSBMaW5rKVxuICAgIGlmIChoYXNUaW1lKSB7XG4gICAgICAgIGlmIChzaG91bGRPbWl0RGF0ZSkge1xuICAgICAgICAgICAgLy8gQ0FTIE9QVElNSVPDiSA6IEp1c3RlIGwnaGV1cmUgcG91ciBcImRhbnMgWCBtaW4vaGV1cmVzXCIgYXVqb3VyZCdodWlcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gZGF0ZS5tb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBuZXdTdHIgPSB0aW1lUGFydDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIENBUyBIWUJSSURFIDogW1tEYXRlXV0gSGV1cmVcbiAgICAgICAgICAgIGNvbnN0IGRhdGVQYXJ0ID0gZGF0ZS5tb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy5mb3JtYXQpO1xuICAgICAgICAgICAgLy8gU2kgbCd1dGlsaXNhdGV1ciBuJ2EgcGFzIG1pcyBkZSBmb3JtYXQgZCdoZXVyZSwgb24gZm9yY2UgSEg6bW0gcGFyIHPDqWN1cml0w6lcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQYXJ0ID0gZGF0ZS5tb21lbnQuZm9ybWF0KHBsdWdpbi5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG5ld1N0ciA9IGBbWyR7ZGF0ZVBhcnR9XV0gJHt0aW1lUGFydH1gO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ0FTIENMQVNTSVFVRSA6IFtbRGF0ZV1dXG4gICAgICAgIG5ld1N0ciA9IGBbWyR7ZGF0ZS5mb3JtYXR0ZWRTdHJpbmd9XV1gO1xuICAgIH1cbiAgfSBlbHNlIGlmIChtb2RlID09IFwibGlua1wiKSB7XG4gICAgLy8gTGllbiBNYXJrZG93biBzdGFuZGFyZCBbdGV4dGVdKGRhdGUpXG4gICAgbmV3U3RyID0gYFske3NlbGVjdGVkVGV4dH1dKCR7ZGF0ZS5mb3JtYXR0ZWRTdHJpbmd9KWA7XG4gIH0gZWxzZSBpZiAobW9kZSA9PSBcImNsZWFuXCIpIHtcbiAgICAvLyBUZXh0ZSBicnV0IHNhbnMgbGllblxuICAgIG5ld1N0ciA9IGAke2RhdGUuZm9ybWF0dGVkU3RyaW5nfWA7XG4gIH0gZWxzZSBpZiAobW9kZSA9PSBcInRpbWVcIikge1xuICAgIC8vIEp1c3RlIGwnaGV1cmVcbiAgICBjb25zdCB0aW1lID0gcGx1Z2luLnBhcnNlVGltZShzZWxlY3RlZFRleHQpO1xuICAgIG5ld1N0ciA9IGAke3RpbWUuZm9ybWF0dGVkU3RyaW5nfWA7XG4gIH1cblxuICBlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihuZXdTdHIpO1xuICBhZGp1c3RDdXJzb3IoZWRpdG9yLCBjdXJzb3IsIG5ld1N0ciwgc2VsZWN0ZWRUZXh0KTtcbiAgZWRpdG9yLmZvY3VzKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRNb21lbnRDb21tYW5kKFxuICBwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzLFxuICBkYXRlOiBEYXRlLFxuICBmb3JtYXQ6IHN0cmluZ1xuKSB7XG4gIGNvbnN0IHsgd29ya3NwYWNlIH0gPSBwbHVnaW4uYXBwO1xuICBjb25zdCBlZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3Iod29ya3NwYWNlKTtcblxuICBpZiAoZWRpdG9yKSB7XG4gICAgZWRpdG9yLnJlcGxhY2VTZWxlY3Rpb24obW9tZW50KGRhdGUpLmZvcm1hdChmb3JtYXQpKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm93Q29tbWFuZChwbHVnaW46IE5hdHVyYWxMYW5ndWFnZURhdGVzKTogdm9pZCB7XG4gIGNvbnN0IGZvcm1hdCA9IGAke3BsdWdpbi5zZXR0aW5ncy5mb3JtYXR9JHtwbHVnaW4uc2V0dGluZ3Muc2VwYXJhdG9yfSR7cGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXR9YDtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGluc2VydE1vbWVudENvbW1hbmQocGx1Z2luLCBkYXRlLCBmb3JtYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudERhdGVDb21tYW5kKHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpOiB2b2lkIHtcbiAgY29uc3QgZm9ybWF0ID0gcGx1Z2luLnNldHRpbmdzLmZvcm1hdDtcbiAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGluc2VydE1vbWVudENvbW1hbmQocGx1Z2luLCBkYXRlLCBmb3JtYXQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFRpbWVDb21tYW5kKHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXMpOiB2b2lkIHtcbiAgY29uc3QgZm9ybWF0ID0gcGx1Z2luLnNldHRpbmdzLnRpbWVGb3JtYXQ7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICBpbnNlcnRNb21lbnRDb21tYW5kKHBsdWdpbiwgZGF0ZSwgZm9ybWF0KTtcbn0iLCJpbXBvcnQgeyBQbHVnaW4sIG5vcm1hbGl6ZVBhdGggfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCIuL2xvZ2dlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEhpc3RvcnlFbnRyeSB7XG4gIGNvdW50OiBudW1iZXI7IC8vIE5vbWJyZSBkZSBmb2lzIHF1ZSBjZXR0ZSBzdWdnZXN0aW9uIGEgw6l0w6kgc8OpbGVjdGlvbm7DqWVcbiAgbGFzdFVzZWQ6IG51bWJlcjsgLy8gRGF0ZS5ub3coKSBkZSBsYSBkZXJuacOocmUgc8OpbGVjdGlvblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGVjdGlvbkhpc3Rvcnkge1xuICBbc3VnZ2VzdGlvbjogc3RyaW5nXTogSGlzdG9yeUVudHJ5O1xufVxuXG5jb25zdCBNQVhfSElTVE9SWV9TSVpFID0gMTAwOyAvLyBMaW1pdGUgZHUgbm9tYnJlIGQnZW50csOpZXMgZGFucyBsJ2hpc3RvcmlxdWVcbmNvbnN0IEhJU1RPUllfRklMRSA9IFwicGx1Z2lucy9ubGRhdGVzLXJldml2ZWQvaGlzdG9yeS5qc29uXCI7XG5jb25zdCBDTEVBTlVQX0lOVEVSVkFMID0gMzAwMDAwOyAvLyBOZXR0b3lhZ2UgcMOpcmlvZGlxdWUgdG91dGVzIGxlcyA1IG1pbnV0ZXNcblxuLy8gQSBzdWdnZXN0aW9uJ3MgcmFuayBpcyBmcmVxdWVuY3kgd2VpZ2h0ZWQgYnkgcmVjZW5jeSwgbm90IHJhdyBsaWZldGltZVxuLy8gY291bnQ6IHdpdGhvdXQgZGVjYXksIHNvbWV0aGluZyBzZWxlY3RlZCA1MCB0aW1lcyBzaXggbW9udGhzIGFnbyB3b3VsZFxuLy8gcGVybWFuZW50bHkgb3V0cmFuayBzb21ldGhpbmcgc2VsZWN0ZWQgMyB0aW1lcyB0aGlzIHdlZWssIGV2ZW4gdGhvdWdoXG4vLyB0aGUgbGF0dGVyIGlzIGNsZWFybHkgbW9yZSByZWxldmFudCAqbm93Ki4gSGFsdmluZyB0aGUgd2VpZ2h0IGV2ZXJ5XG4vLyBIQUxGX0xJRkVfTVMgb2YgaW5hY3Rpdml0eSBtZWFucyBldmVyeSByZXVzZSBcInJlZnJlc2hlc1wiIGFuIGVudHJ5LCB3aGlsZVxuLy8gZ2VudWluZWx5IHN0YWxlIGVudHJpZXMgZmFkZSBvdXQgaW5zdGVhZCBvZiBjYW1waW5nIHRoZSB0b3Agb2YgdGhlIGxpc3Rcbi8vIGZvcmV2ZXIuXG5jb25zdCBIQUxGX0xJRkVfTVMgPSAzMCAqIDI0ICogNjAgKiA2MCAqIDEwMDA7IC8vIDMwIGpvdXJzXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEhpc3RvcnlNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBwbHVnaW46IFBsdWdpbjtcbiAgcHJpdmF0ZSBoaXN0b3J5OiBTZWxlY3Rpb25IaXN0b3J5ID0ge307XG4gIHByaXZhdGUgaGlzdG9yeUxvYWRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGNhY2hlZFRvcFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGNhY2hlVmFsaWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBjbGVhbnVwSW50ZXJ2YWw6IG51bWJlciB8IG51bGwgPSBudWxsOyAvLyBJRCBkZSBsJ2ludGVydmFsbGUgZGUgbmV0dG95YWdlXG5cbiAgY29uc3RydWN0b3IocGx1Z2luOiBQbHVnaW4pIHtcbiAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICB0aGlzLnN0YXJ0UGVyaW9kaWNDbGVhbnVwKCk7XG4gIH1cblxuICAvKipcbiAgICogRMOpbWFycmUgbGUgbmV0dG95YWdlIHDDqXJpb2RpcXVlIGRlIGwnaGlzdG9yaXF1ZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGFydFBlcmlvZGljQ2xlYW51cCgpOiB2b2lkIHtcbiAgICAvLyBOZXR0b3llciB0b3V0ZXMgbGVzIDUgbWludXRlc1xuICAgIHRoaXMuY2xlYW51cEludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMucGVyZm9ybVBlcmlvZGljQ2xlYW51cCgpO1xuICAgIH0sIENMRUFOVVBfSU5URVJWQUwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFycsOqdGUgbGUgbmV0dG95YWdlIHDDqXJpb2RpcXVlICjDoCBhcHBlbGVyIGxvcnMgZGUgbGEgZGVzdHJ1Y3Rpb24pXG4gICAqL1xuICBzdG9wUGVyaW9kaWNDbGVhbnVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsZWFudXBJbnRlcnZhbCAhPT0gbnVsbCkge1xuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5jbGVhbnVwSW50ZXJ2YWwpO1xuICAgICAgdGhpcy5jbGVhbnVwSW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFZmZlY3R1ZSB1biBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZGUgbCdoaXN0b3JpcXVlXG4gICAqIFLDqWR1aXQgbGEgdGFpbGxlIHNpIG7DqWNlc3NhaXJlIGV0IG5ldHRvaWUgbGVzIGVudHLDqWVzIHBldSB1dGlsaXPDqWVzXG4gICAqL1xuICBwcml2YXRlIHBlcmZvcm1QZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhpc3RvcnlMb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50U2l6ZSA9IE9iamVjdC5rZXlzKHRoaXMuaGlzdG9yeSkubGVuZ3RoO1xuICAgIFxuICAgIC8vIFNpIGwnaGlzdG9yaXF1ZSBkw6lwYXNzZSBsYSBsaW1pdGUsIGxlIHLDqWR1aXJlXG4gICAgaWYgKGN1cnJlbnRTaXplID4gTUFYX0hJU1RPUllfU0laRSkge1xuICAgICAgdGhpcy50cmltSGlzdG9yeSgpO1xuICAgICAgbG9nZ2VyLmRlYnVnKGBOZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZGUgbCdoaXN0b3JpcXVlOiByw6lkdWl0IGRlICR7Y3VycmVudFNpemV9IMOgICR7T2JqZWN0LmtleXModGhpcy5oaXN0b3J5KS5sZW5ndGh9IGVudHLDqWVzYCk7XG4gICAgfVxuXG4gICAgLy8gTWV0dHJlIMOgIGpvdXIgbGUgY2FjaGUgZGVzIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRpdCB1biBoaXN0b3JpcXVlIGNoYXJnw6kgZGVwdWlzIGxlIGRpc3F1ZSB2ZXJzIGxlIGZvcm1hdCBhY3R1ZWwuXG4gICAqIExlcyBmaWNoaWVycyDDqWNyaXRzIHBhciB1bmUgdmVyc2lvbiBhbnTDqXJpZXVyZSBkdSBwbHVnaW4gc3RvY2tlbnQgdW5cbiAgICogc2ltcGxlIGNvbXB0ZXVyIChgeyBbc3VnZ2VzdGlvbl06IG51bWJlciB9YCkgYXUgbGlldSBkZVxuICAgKiBgeyBbc3VnZ2VzdGlvbl06IEhpc3RvcnlFbnRyeSB9YCAtLSBvbiBkb25uZSDDoCBjZXMgZW50csOpZXMgdW5cbiAgICogbGFzdFVzZWQgZGUgXCJtYWludGVuYW50XCIgcG91ciBuZSBwYXMgbGVzIGZhaXJlIGRpc3BhcmHDrnRyZVxuICAgKiBpbW3DqWRpYXRlbWVudCBkdSBjbGFzc2VtZW50IGxlIHRlbXBzIHF1J3VuIG5vdXZlbCB1c2FnZSBsZXMgcmFmcmHDrmNoaXNzZS5cbiAgICovXG4gIHByaXZhdGUgbWlncmF0ZUhpc3RvcnkocmF3OiB1bmtub3duKTogU2VsZWN0aW9uSGlzdG9yeSB7XG4gICAgY29uc3QgbWlncmF0ZWQ6IFNlbGVjdGlvbkhpc3RvcnkgPSB7fTtcbiAgICAvLyB0eXBlb2YgW10gPT09IFwib2JqZWN0XCIsIHNvIGEgdG9wLWxldmVsIEpTT04gYXJyYXkgKGNvcnJ1cHRlZCBmaWxlLFxuICAgIC8vIHN0cmF5IG1hbnVhbCBlZGl0KSB3b3VsZCBvdGhlcndpc2Ugc2FpbCB0aHJvdWdoIHRoZSBjYWxsZXInc1xuICAgIC8vIGB0eXBlb2YgcGFyc2VkID09PSBcIm9iamVjdFwiYCBjaGVjayBhbmQgZ2V0IHdhbGtlZCBoZXJlOiBPYmplY3QuZW50cmllcygpXG4gICAgLy8gb24gYW4gYXJyYXkgeWllbGRzIG51bWVyaWMtc3RyaW5nIGtleXMgKFwiMFwiLCBcIjFcIiwgLi4uKSB0aGF0IHdvdWxkIGJlXG4gICAgLy8gbWlncmF0ZWQgaW50byBib2d1cyBoaXN0b3J5IGVudHJpZXMuXG4gICAgaWYgKCFyYXcgfHwgdHlwZW9mIHJhdyAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHJhdykpIHtcbiAgICAgIHJldHVybiBtaWdyYXRlZDtcbiAgICB9XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIG1pZ3JhdGVkW2tleV0gPSB7IGNvdW50OiB2YWx1ZSwgbGFzdFVzZWQ6IG5vdyB9O1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdmFsdWUgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHR5cGVvZiAodmFsdWUgYXMgSGlzdG9yeUVudHJ5KS5jb3VudCA9PT0gXCJudW1iZXJcIiAmJlxuICAgICAgICB0eXBlb2YgKHZhbHVlIGFzIEhpc3RvcnlFbnRyeSkubGFzdFVzZWQgPT09IFwibnVtYmVyXCJcbiAgICAgICkge1xuICAgICAgICAvLyBDb3B5IG9ubHkgdGhlIHR3byBleHBlY3RlZCBmaWVsZHMgcmF0aGVyIHRoYW4ga2VlcGluZyB0aGUgd2hvbGVcbiAgICAgICAgLy8gcGFyc2VkIG9iamVjdCByZWZlcmVuY2UsIHNvIHVuZXhwZWN0ZWQgZXh0cmEgcHJvcGVydGllcyBvbiBhXG4gICAgICAgIC8vIG1hbGZvcm1lZCBlbnRyeSBhcmVuJ3Qgc2lsZW50bHkgY2FycmllZCBmb3J3YXJkIGFuZCByZS1wZXJzaXN0ZWQuXG4gICAgICAgIG1pZ3JhdGVkW2tleV0gPSB7XG4gICAgICAgICAgY291bnQ6ICh2YWx1ZSBhcyBIaXN0b3J5RW50cnkpLmNvdW50LFxuICAgICAgICAgIGxhc3RVc2VkOiAodmFsdWUgYXMgSGlzdG9yeUVudHJ5KS5sYXN0VXNlZCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIEFueXRoaW5nIGVsc2UgKG1hbGZvcm1lZCBlbnRyeSkgaXMgc2lsZW50bHkgZHJvcHBlZCByYXRoZXIgdGhhblxuICAgICAgLy8gY2FycmllZCBmb3J3YXJkIC0tIGEgc2luZ2xlIGJhZCBlbnRyeSBzaG91bGRuJ3QgcG9pc29uIHRoZSByZXN0LlxuICAgIH1cbiAgICByZXR1cm4gbWlncmF0ZWQ7XG4gIH1cblxuICAvKipcbiAgICogU2NvcmUgZCd1bmUgZW50csOpZSA6IGZyw6lxdWVuY2UgcG9uZMOpcsOpZSBwYXIgbGEgZnJhw65jaGV1ciBkJ3V0aWxpc2F0aW9uXG4gICAqICh2b2lyIEhBTEZfTElGRV9NUykuIFV0aWxpc8OpIHBvdXIgdHJpZXIvdHJpbW1lciBsJ2hpc3RvcmlxdWUuXG4gICAqL1xuICBwcml2YXRlIGNvbXB1dGVTY29yZShlbnRyeTogSGlzdG9yeUVudHJ5LCBub3c6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYWdlTXMgPSBNYXRoLm1heCgwLCBub3cgLSBlbnRyeS5sYXN0VXNlZCk7XG4gICAgY29uc3QgZGVjYXkgPSBNYXRoLnBvdygwLjUsIGFnZU1zIC8gSEFMRl9MSUZFX01TKTtcbiAgICByZXR1cm4gZW50cnkuY291bnQgKiBkZWNheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFyZ2UgbCdoaXN0b3JpcXVlIGRlcHVpcyBsZSBzdG9ja2FnZVxuICAgKi9cbiAgYXN5bmMgbG9hZEhpc3RvcnkoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaGlzdG9yeUxvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdEaXIgPSB0aGlzLnBsdWdpbi5hcHAudmF1bHQuY29uZmlnRGlyO1xuICAgICAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgoYCR7Y29uZmlnRGlyfS8ke0hJU1RPUllfRklMRX1gKTtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IHRoaXMucGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhwYXRoKTtcbiAgICAgIGlmIChleGlzdHMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLnJlYWQocGF0aCk7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkOiB1bmtub3duID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICBpZiAocGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHRoaXMuaGlzdG9yeSA9IHRoaXMubWlncmF0ZUhpc3RvcnkocGFyc2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gVGhlIGV4aXN0cygpL3JlYWQoKSBjYWxscyBhYm92ZSBhbHJlYWR5IGhhbmRsZSB0aGUgXCJmaWxlIGRvZXNuJ3RcbiAgICAgIC8vIGV4aXN0IHlldFwiIGNhc2UgZXhwbGljaXRseSAodGhlIGBpZiAoZXhpc3RzKWAgZ3VhcmQpIC0tIHJlYWNoaW5nXG4gICAgICAvLyB0aGlzIGNhdGNoIG1lYW5zIGFuIGFjdHVhbCBhbm9tYWx5IChjb3JydXB0ZWQgSlNPTiBmcm9tIGFuXG4gICAgICAvLyBpbnRlcnJ1cHRlZCB3cml0ZSwgYSBzeW5jIGNvbmZsaWN0LCBldGMuKSwgc28gbG9nIGl0IGluc3RlYWQgb2ZcbiAgICAgIC8vIHNpbGVudGx5IGRpc2NhcmRpbmcgdGhlIHVzZXIncyBoaXN0b3J5IHdpdGggbm8gZGlhZ25vc3RpYyB0cmFpbC5cbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGxvYWRpbmcgaGlzdG9yeTpcIiwgeyBlcnJvciB9KTtcbiAgICAgIHRoaXMuaGlzdG9yeSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLmhpc3RvcnlMb2FkZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEVucmVnaXN0cmUgbCdoaXN0b3JpcXVlIGRhbnMgbGUgc3RvY2thZ2VcbiAgICovXG4gIGFzeW5jIHNhdmVIaXN0b3J5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb25maWdEaXIgPSB0aGlzLnBsdWdpbi5hcHAudmF1bHQuY29uZmlnRGlyO1xuICAgICAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVBhdGgoYCR7Y29uZmlnRGlyfS8ke0hJU1RPUllfRklMRX1gKTtcbiAgICAgIGNvbnN0IGRpciA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGFzdEluZGV4T2YoXCIvXCIpKTtcbiAgICAgIFxuICAgICAgLy8gQ3LDqWVyIGxlIGRvc3NpZXIgc2kgbsOpY2Vzc2FpcmVcbiAgICAgIGNvbnN0IGRpckV4aXN0cyA9IGF3YWl0IHRoaXMucGx1Z2luLmFwcC52YXVsdC5hZGFwdGVyLmV4aXN0cyhkaXIpO1xuICAgICAgaWYgKCFkaXJFeGlzdHMpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uYXBwLnZhdWx0LmFkYXB0ZXIubWtkaXIoZGlyKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUocGF0aCwgSlNPTi5zdHJpbmdpZnkodGhpcy5oaXN0b3J5LCBudWxsLCAyKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIHNhdmluZyBoaXN0b3J5OlwiLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpc2UgdW5lIHN1Z2dlc3Rpb24gZW4gY2FwaXRhbGlzYW50IGxhIHByZW1pw6hyZSBsZXR0cmVcbiAgICogRXhlbXBsZTogXCJkZW1haW5cIiAtPiBcIkRlbWFpblwiLCBcImx1bmRpIHByb2NoYWluXCIgLT4gXCJMdW5kaSBwcm9jaGFpblwiXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIXN1Z2dlc3Rpb24gfHwgc3VnZ2VzdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaW1tZWQgPSBzdWdnZXN0aW9uLnRyaW0oKTtcbiAgICBpZiAodHJpbW1lZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cmltbWVkO1xuICAgIH1cblxuICAgIC8vIENhcGl0YWxpemUgZWFjaCB3b3JkIGluZGl2aWR1YWxseSwgbm90IGp1c3QgdGhlIGZpcnN0IGNoYXJhY3RlciBvZlxuICAgIC8vIHRoZSB3aG9sZSBzdHJpbmc6IGhpc3Rvcnkga2V5cyBhcmUgc3RvcmVkIGZ1bGx5IGxvd2VyY2FzZSAoc2VlXG4gICAgLy8gcmVjb3JkU2VsZWN0aW9uKCkpLCBzbyBhIG11bHRpLXdvcmQgc3VnZ2VzdGlvbiBsaWtlIFwibmV4dCBmcmlkYXlcIlxuICAgIC8vIHdvdWxkIG90aGVyd2lzZSBkaXNwbGF5IGFzIFwiTmV4dCBmcmlkYXlcIiAtLSBvbmx5IHRoZSB2ZXJ5IGZpcnN0XG4gICAgLy8gbGV0dGVyIGNhcGl0YWxpemVkIC0tIGluY29uc2lzdGVudCB3aXRoIHRoZSBcIk5leHQgRnJpZGF5XCIgdGhhdCBvdGhlclxuICAgIC8vIHN1Z2dlc3Rpb24gc291cmNlcyAoZS5nLiBkYXRlLXN1Z2dlc3QudHMncyBnZXRJbW1lZGlhdGVTdWdnZXN0aW9ucylcbiAgICAvLyBzaG93IGZvciB0aGUgZXhhY3Qgc2FtZSBwaHJhc2UgaW4gdGhlIHNhbWUgZHJvcGRvd24uXG4gICAgcmV0dXJuIHRyaW1tZWRcbiAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICAvKipcbiAgICogRW5yZWdpc3RyZSB1bmUgc8OpbGVjdGlvbiBkYW5zIGwnaGlzdG9yaXF1ZVxuICAgKi9cbiAgYXN5bmMgcmVjb3JkU2VsZWN0aW9uKHN1Z2dlc3Rpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcblxuICAgIC8vIE5vcm1hbGlzZXIgbGEgc3VnZ2VzdGlvbiAoZW4gbWludXNjdWxlcyBwb3VyIGxhIGNsw6ksIMOpdml0ZSBsZXMgZG91YmxvbnMpXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICBpZiAoIW5vcm1hbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbmNyw6ltZW50ZXIgbGUgY29tcHRldXIgZXQgcmFmcmHDrmNoaXIgbGEgZGF0ZSBkJ3V0aWxpc2F0aW9uICh1dGlsaXNlciBsYSBjbMOpIGVuIG1pbnVzY3VsZXMpXG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmhpc3Rvcnlbbm9ybWFsaXplZF07XG4gICAgdGhpcy5oaXN0b3J5W25vcm1hbGl6ZWRdID0ge1xuICAgICAgY291bnQ6IChleGlzdGluZz8uY291bnQgfHwgMCkgKyAxLFxuICAgICAgbGFzdFVzZWQ6IERhdGUubm93KCksXG4gICAgfTtcblxuICAgIC8vIExpbWl0ZXIgbGEgdGFpbGxlIGRlIGwnaGlzdG9yaXF1ZSBzaSBuw6ljZXNzYWlyZVxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmhpc3RvcnkpLmxlbmd0aCA+IE1BWF9ISVNUT1JZX1NJWkUpIHtcbiAgICAgIHRoaXMudHJpbUhpc3RvcnkoKTtcbiAgICB9XG5cbiAgICAvLyBNZXR0cmUgw6Agam91ciBsZSBjYWNoZVxuICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcblxuICAgIC8vIFNhdmUgKGFzeW5jaHJvbm91c2x5LCBkb24ndCBibG9jaylcbiAgICB0aGlzLnNhdmVIaXN0b3J5KCkuY2F0Y2goKGVycjogdW5rbm93bikgPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3Igc2F2aW5nIGhpc3Rvcnk6XCIsIHsgZXJyb3I6IGVyciB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSw6lkdWl0IGxhIHRhaWxsZSBkZSBsJ2hpc3RvcmlxdWUgZW4gZ2FyZGFudCBsZXMgZW50csOpZXMgbGVzIHBsdXMgcGVydGluZW50ZXNcbiAgICogKGZyw6lxdWVuY2UgcG9uZMOpcsOpZSBwYXIgbGEgZnJhw65jaGV1ciwgdm9pciBjb21wdXRlU2NvcmUoKSlcbiAgICovXG4gIHByaXZhdGUgdHJpbUhpc3RvcnkoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModGhpcy5oaXN0b3J5KTtcblxuICAgIC8vIFRyaWVyIHBhciBzY29yZSAoZMOpY3JvaXNzYW50KVxuICAgIGVudHJpZXMuc29ydCgoYSwgYikgPT4gdGhpcy5jb21wdXRlU2NvcmUoYlsxXSwgbm93KSAtIHRoaXMuY29tcHV0ZVNjb3JlKGFbMV0sIG5vdykpO1xuXG4gICAgLy8gR2FyZGVyIHVuaXF1ZW1lbnQgbGVzIE1BWF9ISVNUT1JZX1NJWkUgZW50csOpZXMgbGVzIHBsdXMgcGVydGluZW50ZXNcbiAgICBjb25zdCB0cmltbWVkID0gZW50cmllcy5zbGljZSgwLCBNQVhfSElTVE9SWV9TSVpFKTtcblxuICAgIHRoaXMuaGlzdG9yeSA9IE9iamVjdC5mcm9tRW50cmllcyh0cmltbWVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGFyZ2UgbCdoaXN0b3JpcXVlIGV0IG1ldCDDoCBqb3VyIGxlIGNhY2hlICjDoCBhcHBlbGVyIGF1IGTDqW1hcnJhZ2UpXG4gICAqL1xuICBhc3luYyBpbml0aWFsaXplKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcbiAgICB0aGlzLnVwZGF0ZUNhY2hlKCk7XG4gIH1cblxuICAvKipcbiAgICogTWV0IMOgIGpvdXIgbGUgY2FjaGUgZGVzIHN1Z2dlc3Rpb25zIGxlcyBwbHVzIHBlcnRpbmVudGVzXG4gICAqIChmcsOpcXVlbmNlIHBvbmTDqXLDqWUgcGFyIGxhIGZyYcOuY2hldXIsIHZvaXIgY29tcHV0ZVNjb3JlKCkpXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUNhY2hlKCk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuaGlzdG9yeSk7XG5cbiAgICAvLyBUcmllciBwYXIgc2NvcmUgKGTDqWNyb2lzc2FudClcbiAgICBlbnRyaWVzLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcHV0ZVNjb3JlKGJbMV0sIG5vdykgLSB0aGlzLmNvbXB1dGVTY29yZShhWzFdLCBub3cpKTtcblxuICAgIC8vIE1ldHRyZSBlbiBjYWNoZSBsZXMgdG9wIHN1Z2dlc3Rpb25zIGF2ZWMgbGEgcHJlbWnDqHJlIGxldHRyZSBjYXBpdGFsaXPDqWVcbiAgICB0aGlzLmNhY2hlZFRvcFN1Z2dlc3Rpb25zID0gZW50cmllcy5zbGljZSgwLCA1MCkubWFwKChbc3VnZ2VzdGlvbl0pID0+XG4gICAgICB0aGlzLm5vcm1hbGl6ZVN1Z2dlc3Rpb24oc3VnZ2VzdGlvbilcbiAgICApO1xuICAgIHRoaXMuY2FjaGVWYWxpZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUsOpY3Vww6hyZSBsZXMgc3VnZ2VzdGlvbnMgbGVzIHBsdXMgZnLDqXF1ZW50ZXMgZGUgbWFuacOocmUgc3luY2hyb25lICh1dGlsaXNlIGxlIGNhY2hlKVxuICAgKiBAcGFyYW0gbGltaXQgTm9tYnJlIG1heGltdW0gZGUgc3VnZ2VzdGlvbnMgw6AgcmV0b3VybmVyXG4gICAqL1xuICBnZXRUb3BTdWdnZXN0aW9uc1N5bmMobGltaXQgPSAxMCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuY2FjaGVWYWxpZCkge1xuICAgICAgLy8gU2kgbGUgY2FjaGUgbidlc3QgcGFzIHZhbGlkZSwgcmV0b3VybmVyIHVuIHRhYmxlYXUgdmlkZVxuICAgICAgLy8gTGUgY2FjaGUgc2VyYSBtaXMgw6Agam91ciBsb3JzIGRlIGwnaW5pdGlhbGlzYXRpb25cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkVG9wU3VnZ2VzdGlvbnMuc2xpY2UoMCwgbGltaXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgbGVzIHN1Z2dlc3Rpb25zIGxlcyBwbHVzIGZyw6lxdWVudGVzLCB0cmnDqWVzIHBhciBmcsOpcXVlbmNlIChhc3luYywgbWV0IMOgIGpvdXIgbGUgY2FjaGUpXG4gICAqIEBwYXJhbSBsaW1pdCBOb21icmUgbWF4aW11bSBkZSBzdWdnZXN0aW9ucyDDoCByZXRvdXJuZXJcbiAgICovXG4gIGFzeW5jIGdldFRvcFN1Z2dlc3Rpb25zKGxpbWl0ID0gMTApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkSGlzdG9yeSgpO1xuICAgIHRoaXMudXBkYXRlQ2FjaGUoKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZWRUb3BTdWdnZXN0aW9ucy5zbGljZSgwLCBsaW1pdCk7XG4gIH1cblxuICAvKipcbiAgICogUsOpaW5pdGlhbGlzZSBsJ2hpc3RvcmlxdWVcbiAgICovXG4gIGFzeW5jIGNsZWFySGlzdG9yeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmhpc3RvcnkgPSB7fTtcbiAgICB0aGlzLmNhY2hlZFRvcFN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5jYWNoZVZhbGlkID0gdHJ1ZTtcbiAgICBhd2FpdCB0aGlzLnNhdmVIaXN0b3J5KCk7XG4gIH1cblxuICAvKipcbiAgICogU3VwcHJpbWUgdW5lIHNldWxlIGVudHLDqWUgZGUgbCdoaXN0b3JpcXVlIChnZXN0aW9uIGZpbmUsIHBhciBvcHBvc2l0aW9uXG4gICAqIMOgIGNsZWFySGlzdG9yeSgpIHF1aSB2aWRlIHRvdXQpLiBgc3VnZ2VzdGlvbmAgcGV1dCDDqnRyZSBsYSBmb3JtZSBub3JtYWxpc8OpZVxuICAgKiBhZmZpY2jDqWUgw6AgbCd1dGlsaXNhdGV1ciAoZXg6IFwiTmV4dCBGcmlkYXlcIikgb3UgbGEgY2zDqSBicnV0ZSBzdG9ja8OpZSBlblxuICAgKiBpbnRlcm5lIChleDogXCJuZXh0IGZyaWRheVwiKSAtLSBsZXMgZGV1eCBzb250IGFjY2VwdMOpZXMgcHVpc3F1ZVxuICAgKiBsJ3V0aWxpc2F0ZXVyIG5lIHZvaXQgamFtYWlzIGxhIGNsw6kgYnJ1dGUsIHNldWxlbWVudCBsYSB2ZXJzaW9uIGFmZmljaMOpZS5cbiAgICovXG4gIGFzeW5jIHJlbW92ZUVudHJ5KHN1Z2dlc3Rpb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMubG9hZEhpc3RvcnkoKTtcblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBzdWdnZXN0aW9uLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGlmICghKG5vcm1hbGl6ZWQgaW4gdGhpcy5oaXN0b3J5KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRlbGV0ZSB0aGlzLmhpc3Rvcnlbbm9ybWFsaXplZF07XG4gICAgdGhpcy51cGRhdGVDYWNoZSgpO1xuXG4gICAgYXdhaXQgdGhpcy5zYXZlSGlzdG9yeSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFLDqWN1cMOocmUgdG91dGVzIGxlcyBlbnRyw6llcyBkZSBsJ2hpc3RvcmlxdWUsIHRyacOpZXMgcGFyIHBlcnRpbmVuY2VcbiAgICogKHZvaXIgY29tcHV0ZVNjb3JlKCkpLCBhdmVjIGxldXJzIG3DqXRhZG9ubsOpZXMgLS0gdXRpbGlzw6kgcGFyIGwnaW50ZXJmYWNlXG4gICAqIGRlIGdlc3Rpb24gZmluZSBkZSBsJ2hpc3RvcmlxdWUgKGFmZmljaGFnZSArIHN1cHByZXNzaW9uIGluZGl2aWR1ZWxsZSkuXG4gICAqIENvbnRyYWlyZW1lbnQgw6AgZ2V0VG9wU3VnZ2VzdGlvbnNTeW5jKCkvZ2V0VG9wU3VnZ2VzdGlvbnMoKSwgcXVpIG5lXG4gICAqIHJlbnZvaWVudCBxdWUgbGUgdGV4dGUgYWZmaWNow6ksIGNlY2kgcmVudm9pZSBhdXNzaSBsYSBjbMOpIGJydXRlIChwb3VyXG4gICAqIHJlbW92ZUVudHJ5KCkpIGV0IGxlcyBtw6l0YWRvbm7DqWVzIGNvdW50L2xhc3RVc2VkIChwb3VyIGwnYWZmaWNoYWdlKS5cbiAgICovXG4gIGFzeW5jIGdldEVudHJpZXNGb3JNYW5hZ2VtZW50KCk6IFByb21pc2U8QXJyYXk8eyBrZXk6IHN0cmluZzsgZGlzcGxheTogc3RyaW5nOyBjb3VudDogbnVtYmVyOyBsYXN0VXNlZDogbnVtYmVyIH0+PiB7XG4gICAgYXdhaXQgdGhpcy5sb2FkSGlzdG9yeSgpO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5oaXN0b3J5KVxuICAgICAgLnNvcnQoKGEsIGIpID0+IHRoaXMuY29tcHV0ZVNjb3JlKGJbMV0sIG5vdykgLSB0aGlzLmNvbXB1dGVTY29yZShhWzFdLCBub3cpKVxuICAgICAgLm1hcCgoW2tleSwgZW50cnldKSA9PiAoe1xuICAgICAgICBrZXksXG4gICAgICAgIGRpc3BsYXk6IHRoaXMubm9ybWFsaXplU3VnZ2VzdGlvbihrZXkpLFxuICAgICAgICBjb3VudDogZW50cnkuY291bnQsXG4gICAgICAgIGxhc3RVc2VkOiBlbnRyeS5sYXN0VXNlZCxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXR0b2llIGxlcyByZXNzb3VyY2VzIGxvcnMgZGUgbGEgZGVzdHJ1Y3Rpb24gZGUgbCdpbnN0YW5jZVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BQZXJpb2RpY0NsZWFudXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSw6ljdXDDqHJlIGwnaGlzdG9yaXF1ZSBjb21wbGV0IChwb3VyIGRlYnVnKVxuICAgKi9cbiAgYXN5bmMgZ2V0SGlzdG9yeSgpOiBQcm9taXNlPFNlbGVjdGlvbkhpc3Rvcnk+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRIaXN0b3J5KCk7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5oaXN0b3J5IH07XG4gIH1cbn1cbiIsImltcG9ydCB7IEFwcCwgTWFya2Rvd25WaWV3LCBFZGl0b3IgfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB0eXBlIE5hdHVyYWxMYW5ndWFnZURhdGVzIGZyb20gXCIuL21haW5cIjtcbmltcG9ydCB7IExSVUNhY2hlIH0gZnJvbSBcIi4vbHJ1LWNhY2hlXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IFRyYW5zbGF0aW9uQ29sbGVjdG9yIH0gZnJvbSBcIi4vdHJhbnNsYXRpb24tY29sbGVjdG9yXCI7XG5cbi8vIENoZWFwLCBub24tY3J5cHRvZ3JhcGhpYyBzdHJpbmcgaGFzaCAoZGpiMiB2YXJpYW50KSB1c2VkIHRvIGZpbmdlcnByaW50XG4vLyB0aGUgc2Nhbm5lZCBjb250ZXh0IHdpbmRvdyBmb3IgY2FjaGUga2V5cyAtLSBmYXN0IGVub3VnaCB0byBydW4gb24gZXZlcnlcbi8vIGtleXN0cm9rZSB3aGlsZSBzdGlsbCBkaXN0aW5ndWlzaGluZyBkaWZmZXJlbnQgY29udGVudCByZWxpYWJseS5cbmZ1bmN0aW9uIHNpbXBsZUhhc2goc3RyOiBzdHJpbmcpOiBudW1iZXIge1xuICBsZXQgaGFzaCA9IDUzODE7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2ggKyBzdHIuY2hhckNvZGVBdChpKSkgfCAwO1xuICB9XG4gIHJldHVybiBoYXNoO1xufVxuXG5jb25zdCBDT05URVhUX0xJTkVTID0gMTA7IC8vIE5vbWJyZSBkZSBsaWduZXMgw6AgYW5hbHlzZXIgYXZhbnQgZXQgYXByw6hzIGxlIGN1cnNldXJcbmNvbnN0IE1BWF9EQVRFU19UT19FWFRSQUNUID0gMTA7IC8vIE5vbWJyZSBtYXhpbXVtIGRlIGRhdGVzIMOgIGV4dHJhaXJlIGR1IGNvbnRleHRlXG5jb25zdCBNQVhfQ0FDSEVfU0laRSA9IDIwMDsgLy8gTGltaXRlIGRlIHRhaWxsZSBkdSBjYWNoZSBkZSBjb250ZXh0ZVxuY29uc3QgQ0FDSEVfVElNRU9VVCA9IDUwMDA7IC8vIDUgc2Vjb25kZXMgZGUgY2FjaGVcbmNvbnN0IENMRUFOVVBfSU5URVJWQUwgPSAzMDAwMDsgLy8gTmV0dG95YWdlIHDDqXJpb2RpcXVlIHRvdXRlcyBsZXMgMzAgc2Vjb25kZXNcblxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0SW5mbyB7XG4gIGRhdGVzSW5Db250ZXh0OiBzdHJpbmdbXTsgLy8gRGF0ZXMgdHJvdXbDqWVzIGRhbnMgbGUgY29udGV4dGUgKGZvcm1hdHMgbmF0dXJlbHMgZMOpdGVjdMOpcylcbiAgdGl0bGU/OiBzdHJpbmc7IC8vIFRpdHJlIGRlIGxhIG5vdGVcbiAgdGFnczogc3RyaW5nW107IC8vIFRhZ3MgZGUgbGEgbm90ZVxuICB0aW1lc3RhbXA6IG51bWJlcjsgLy8gVGltZXN0YW1wIGRlIGNyw6lhdGlvbiBwb3VyIGxlIG5ldHRveWFnZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZXh0QW5hbHl6ZXIge1xuICBwcml2YXRlIGFwcDogQXBwO1xuICBwcml2YXRlIHBsdWdpbjogTmF0dXJhbExhbmd1YWdlRGF0ZXM7XG4gIHByaXZhdGUgY2FjaGU6IExSVUNhY2hlPHN0cmluZywgQ29udGV4dEluZm8+OyAvLyBDYWNoZSB0ZW1wb3JhaXJlIHBhciBmaWNoaWVyIGF2ZWMgbGltaXRlIGRlIHRhaWxsZVxuICBwcml2YXRlIGNsZWFudXBJbnRlcnZhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7IC8vIElEIGRlIGwnaW50ZXJ2YWxsZSBkZSBuZXR0b3lhZ2VcbiAgXG4gIC8vIFBhdHRlcm5zIHJlZ2V4IHBvdXIgbGEgZMOpdGVjdGlvbiBkZSBkYXRlcyAoZ8OpbsOpcsOpcyBkeW5hbWlxdWVtZW50KVxuICBwcml2YXRlIGRhdGVQYXR0ZXJuczogUmVnRXhwW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBOYXR1cmFsTGFuZ3VhZ2VEYXRlcykge1xuICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgIHRoaXMuY2FjaGUgPSBuZXcgTFJVQ2FjaGU8c3RyaW5nLCBDb250ZXh0SW5mbz4oTUFYX0NBQ0hFX1NJWkUpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZURhdGVQYXR0ZXJucygpO1xuICAgIHRoaXMuc3RhcnRQZXJpb2RpY0NsZWFudXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEw6ltYXJyZSBsZSBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgZHUgY2FjaGVcbiAgICovXG4gIHByaXZhdGUgc3RhcnRQZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgLy8gTmV0dG95ZXIgdG91dGVzIGxlcyAzMCBzZWNvbmRlc1xuICAgIHRoaXMuY2xlYW51cEludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMuY2xlYW51cEV4cGlyZWRFbnRyaWVzKCk7XG4gICAgfSwgQ0xFQU5VUF9JTlRFUlZBTCk7XG4gIH1cblxuICAvKipcbiAgICogQXJyw6p0ZSBsZSBuZXR0b3lhZ2UgcMOpcmlvZGlxdWUgKMOgIGFwcGVsZXIgbG9ycyBkZSBsYSBkZXN0cnVjdGlvbilcbiAgICovXG4gIHN0b3BQZXJpb2RpY0NsZWFudXAoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2xlYW51cEludGVydmFsICE9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLmNsZWFudXBJbnRlcnZhbCk7XG4gICAgICB0aGlzLmNsZWFudXBJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE5ldHRvaWUgbGVzIGVudHLDqWVzIGV4cGlyw6llcyBkdSBjYWNoZVxuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbnVwRXhwaXJlZEVudHJpZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBrZXlzVG9EZWxldGU6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBQYXJjb3VyaXIgdG91dGVzIGxlcyBlbnRyw6llcyBkdSBjYWNoZVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuY2FjaGUuZW50cmllcygpKSB7XG4gICAgICBpZiAodmFsdWUudGltZXN0YW1wICYmIChub3cgLSB2YWx1ZS50aW1lc3RhbXApID4gQ0FDSEVfVElNRU9VVCkge1xuICAgICAgICBrZXlzVG9EZWxldGUucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1cHByaW1lciBsZXMgZW50csOpZXMgZXhwaXLDqWVzXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5c1RvRGVsZXRlKSB7XG4gICAgICB0aGlzLmNhY2hlLmRlbGV0ZShrZXkpO1xuICAgIH1cblxuICAgIGlmIChrZXlzVG9EZWxldGUubGVuZ3RoID4gMCkge1xuICAgICAgbG9nZ2VyLmRlYnVnKGBOZXR0b3lhZ2UgZHUgY2FjaGUgZGUgY29udGV4dGU6ICR7a2V5c1RvRGVsZXRlLmxlbmd0aH0gZW50csOpZXMgc3VwcHJpbcOpZXNgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGlzZSBsZXMgcGF0dGVybnMgcmVnZXggcG91ciBsYSBkw6l0ZWN0aW9uIGRlIGRhdGVzIGRhbnMgdG91dGVzIGxlcyBsYW5ndWVzIGFjdGl2w6llc1xuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplRGF0ZVBhdHRlcm5zKCk6IHZvaWQge1xuICAgIGNvbnN0IHRjID0gbmV3IFRyYW5zbGF0aW9uQ29sbGVjdG9yKHRoaXMucGx1Z2luLnNldHRpbmdzLmxhbmd1YWdlcyk7XG5cbiAgICBjb25zdCB3ZWVrZGF5S2V5cyA9IFsnc3VuZGF5JywgJ21vbmRheScsICd0dWVzZGF5JywgJ3dlZG5lc2RheScsICd0aHVyc2RheScsICdmcmlkYXknLCAnc2F0dXJkYXknXTtcbiAgICBjb25zdCB3ZWVrZGF5UGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb24od2Vla2RheUtleXMuZmxhdE1hcChrZXkgPT4gdGMuY29sbGVjdFdvcmRzKGtleSkpKTtcbiAgICBjb25zdCB0aW1lV29yZFBhdHRlcm4gPSB0Yy5idWlsZEFsdGVybmF0aW9uKFsndG9kYXknLCAndG9tb3Jyb3cnLCAneWVzdGVyZGF5J10uZmxhdE1hcChrZXkgPT4gdGMuY29sbGVjdFdvcmRzKGtleSkpKTtcbiAgICBjb25zdCB0aW1lVW5pdEtleXMgPSBbJ21pbnV0ZScsICdob3VyJywgJ2RheScsICd3ZWVrJywgJ21vbnRoJywgJ3llYXInXTtcbiAgICBjb25zdCB0aW1lVW5pdFBhdHRlcm4gPSB0Yy5idWlsZEFsdGVybmF0aW9uKHRpbWVVbml0S2V5cy5mbGF0TWFwKGtleSA9PiB0Yy5jb2xsZWN0V29yZHMoa2V5KSkpO1xuICAgIGNvbnN0IGluUGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb25Gb3IoJ2luJyk7XG4gICAgY29uc3QgcHJlZml4UGF0dGVybiA9IHRjLmJ1aWxkQWx0ZXJuYXRpb24oWy4uLnRjLmNvbGxlY3RXb3JkcygnbmV4dCcpLCAuLi50Yy5jb2xsZWN0V29yZHMoJ2xhc3QnKV0pO1xuXG4gICAgdGhpcy5kYXRlUGF0dGVybnMgPSBbXTtcblxuICAgIC8vIFxcYiBpcyBkZWZpbmVkIGluIHRlcm1zIG9mIFxcdywgd2hpY2ggaXMgQVNDSUktb25seTogaXQgbmV2ZXIgbWF0Y2hlc1xuICAgIC8vIGFyb3VuZCBDSksgY2hhcmFjdGVycyAobm8gYm91bmRhcnkgZXhpc3RzIGJldHdlZW4gdHdvIENoaW5lc2VcbiAgICAvLyBjaGFyYWN0ZXJzIGFzIGZhciBhcyBcXGIgaXMgY29uY2VybmVkKSwgc28gaXQgc2lsZW50bHkgZHJvcHMgZXZlcnkgQ0pLXG4gICAgLy8gbWF0Y2guIFVzaW5nIGV4cGxpY2l0IGxvb2thcm91bmQgYWdhaW5zdCBMYXRpbiBhbHBoYW51bWVyaWNzIGluc3RlYWRcbiAgICAvLyBzdGlsbCBibG9ja3MgcGFydGlhbC13b3JkIG1hdGNoZXMgZm9yIExhdGluIHNjcmlwdHMgKGUuZy4gXCJNb25kYXlcIlxuICAgIC8vIGluc2lkZSBcIk1vbmRheWlzaFwiKSB3aGlsZSBpbXBvc2luZyBubyBib3VuZGFyeSBhdCBhbGwgbmV4dCB0byBDSktcbiAgICAvLyBjaGFyYWN0ZXJzLCB3aGljaCBkb24ndCBoYXZlIHdvcmQgc2VwYXJhdG9ycyB0byBjaGVjayBhZ2FpbnN0IGFueXdheS5cbiAgICAvL1xuICAgIC8vIFRoZSBsZWFkaW5nIGJvdW5kYXJ5IGNhbid0IGJlIGEgbG9va2JlaGluZCAoXCIoPzwhLi4uKVwiKTogdGhhdCBzeW50YXhcbiAgICAvLyBpc24ndCBzdXBwb3J0ZWQgb24gaU9TL1NhZmFyaSBiZWZvcmUgMTYuNCBhbmQgdGhyb3dzIGF0IFJlZ0V4cFxuICAgIC8vIGNvbnN0cnVjdGlvbiB0aW1lLCBicmVha2luZyBldmVyeSBvbmUgb2YgdGhlc2UgcGF0dGVybnMgb24gb2xkZXJcbiAgICAvLyBkZXZpY2VzLiBVc2luZyBhIGNvbnN1bWluZyBhbHRlcm5hdGlvbiAoXCJzdGFydC1vZi1zdHJpbmcgb3IgYSBzaW5nbGVcbiAgICAvLyBub24td29yZCBjaGFyYWN0ZXJcIikgaW5zdGVhZCB3b3JrcyB0aGUgc2FtZSB3YXkgYnV0IGFjdHVhbGx5IGNvbnN1bWVzXG4gICAgLy8gdGhhdCBsZWFkaW5nIGNoYXJhY3Rlciwgc28gdGhlIGNvbnRlbnQgdG8gZXh0cmFjdCBpcyB3cmFwcGVkIGluIGl0c1xuICAgIC8vIG93biBjYXB0dXJpbmcgZ3JvdXAgYmVsb3cgcmF0aGVyIHRoYW4gcmVhZCBvZmYgdGhlIHdob2xlIG1hdGNoLlxuICAgIC8vIExvb2thaGVhZCAoXCIoPyEuLi4pXCIpIGhhcyBubyBzdWNoIGNvbXBhdGliaWxpdHkgaXNzdWUgYW5kIGNhbiBzdGF5LlxuICAgIGNvbnN0IHdvcmRCb3VuZGFyeUJlZm9yZSA9ICcoPzpefFteYS16QS1aMC05X10pJztcbiAgICBjb25zdCB3b3JkQm91bmRhcnlBZnRlciA9ICcoPyFbYS16QS1aMC05X10pJztcblxuICAgIC8vIFBhdHRlcm4gMTogSm91cnMgZGUgbGEgc2VtYWluZVxuICAgIGlmICh3ZWVrZGF5UGF0dGVybikge1xuICAgICAgdGhpcy5kYXRlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGAke3dvcmRCb3VuZGFyeUJlZm9yZX0oJHt3ZWVrZGF5UGF0dGVybn0pJHt3b3JkQm91bmRhcnlBZnRlcn1gLCAnZ2knKSk7XG4gICAgfVxuXG4gICAgLy8gUGF0dGVybiAyOiBNb3RzIHRlbXBvcmVscyBjb3VyYW50cyAodG9kYXksIHRvbW9ycm93LCB5ZXN0ZXJkYXkpXG4gICAgaWYgKHRpbWVXb3JkUGF0dGVybikge1xuICAgICAgdGhpcy5kYXRlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGAke3dvcmRCb3VuZGFyeUJlZm9yZX0oJHt0aW1lV29yZFBhdHRlcm59KSR7d29yZEJvdW5kYXJ5QWZ0ZXJ9YCwgJ2dpJykpO1xuICAgIH1cblxuICAgIC8vIFBhdHRlcm4gMzogRXhwcmVzc2lvbnMgcmVsYXRpdmVzIFwiZGFucyBYIGpvdXJzL3NlbWFpbmVzL21vaXNcIlxuICAgIGlmIChpblBhdHRlcm4gJiYgdGltZVVuaXRQYXR0ZXJuKSB7XG4gICAgICB0aGlzLmRhdGVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYCR7d29yZEJvdW5kYXJ5QmVmb3JlfSgoPzoke2luUGF0dGVybn0pXFxcXHMqXFxcXGQrXFxcXHMqKD86JHt0aW1lVW5pdFBhdHRlcm59KSkke3dvcmRCb3VuZGFyeUFmdGVyfWAsICdnaScpKTtcbiAgICB9XG5cbiAgICAvLyBQYXR0ZXJuIDQ6IEV4cHJlc3Npb25zIFwibmV4dC9sYXN0IHdlZWtkYXkvd2Vlay9tb250aC95ZWFyXCJcbiAgICAvLyBFdmVyeSBvbmUgb2YgdGhlIDExIHN1cHBvcnRlZCBsYW5ndWFnZXMgZGVmaW5lcyB3ZWVrZGF5cyBhbmQgdGltZVxuICAgIC8vIHVuaXRzIHRvZ2V0aGVyIHdpdGggbmV4dC9sYXN0LCBzbyB0aGUgbmVzdGVkIGNoZWNrcyBiZWxvdyBjYW4ndFxuICAgIC8vIGFjdHVhbGx5IGJlIGZhbHNlIHdoaWxlIHByZWZpeFBhdHRlcm4gaXMgdHJ1ZSAtLSBrZXB0IGFzIGEgZ3VhcmQgaW5cbiAgICAvLyBjYXNlIGEgZnV0dXJlIGxhbmd1YWdlIG1vZHVsZSBpcyBhdXRob3JlZCBpbmNvbXBsZXRlbHkuXG4gICAgaWYgKHByZWZpeFBhdHRlcm4pIHtcbiAgICAgIGlmICh3ZWVrZGF5UGF0dGVybikge1xuICAgICAgICB0aGlzLmRhdGVQYXR0ZXJucy5wdXNoKG5ldyBSZWdFeHAoYCR7d29yZEJvdW5kYXJ5QmVmb3JlfSgoPzoke3ByZWZpeFBhdHRlcm59KVxcXFxzKig/OiR7d2Vla2RheVBhdHRlcm59KSkke3dvcmRCb3VuZGFyeUFmdGVyfWAsICdnaScpKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aW1lVW5pdFBhdHRlcm4pIHtcbiAgICAgICAgdGhpcy5kYXRlUGF0dGVybnMucHVzaChuZXcgUmVnRXhwKGAke3dvcmRCb3VuZGFyeUJlZm9yZX0oKD86JHtwcmVmaXhQYXR0ZXJufSlcXFxccyooPzoke3RpbWVVbml0UGF0dGVybn0pKSR7d29yZEJvdW5kYXJ5QWZ0ZXJ9YCwgJ2dpJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSw6lpbml0aWFsaXNlIGxlcyBwYXR0ZXJucyAow6AgYXBwZWxlciBxdWFuZCBsZXMgbGFuZ3VlcyBjaGFuZ2VudClcbiAgICovXG4gIHJlc2V0UGF0dGVybnMoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0aWFsaXplRGF0ZVBhdHRlcm5zKCk7XG4gICAgdGhpcy5jbGVhckNhY2hlKCk7IC8vIFZpZGVyIGxlIGNhY2hlIGNhciBsZXMgcGF0dGVybnMgb250IGNoYW5nw6lcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXR0b2llIGxlIGNhY2hlIGxvcnMgZGUgbGEgZGVzdHJ1Y3Rpb24gZGUgbCdpbnN0YW5jZVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3BQZXJpb2RpY0NsZWFudXAoKTtcbiAgICB0aGlzLmNsZWFyQ2FjaGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmFseXNlIGxlIGNvbnRleHRlIGF1dG91ciBkdSBjdXJzZXVyIGRlIG1hbmnDqHJlIHN5bmNocm9uZSAodXRpbGlzZSBsZSBjYWNoZSlcbiAgICovXG4gIGFuYWx5emVDb250ZXh0U3luYyhlZGl0b3I6IEVkaXRvciwgY3Vyc29yTGluZTogbnVtYmVyKTogQ29udGV4dEluZm8ge1xuICAgIGNvbnN0IGFjdGl2ZVZpZXcgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlVmlld09mVHlwZShNYXJrZG93blZpZXcpO1xuICAgIGlmICghYWN0aXZlVmlldykge1xuICAgICAgcmV0dXJuIHsgZGF0ZXNJbkNvbnRleHQ6IFtdLCB0YWdzOiBbXSwgdGltZXN0YW1wOiBEYXRlLm5vdygpIH07XG4gICAgfVxuXG4gICAgY29uc3QgZmlsZSA9IGFjdGl2ZVZpZXcuZmlsZTtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybiB7IGRhdGVzSW5Db250ZXh0OiBbXSwgdGFnczogW10sIHRpbWVzdGFtcDogRGF0ZS5ub3coKSB9O1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHRJbmZvID0ge1xuICAgICAgZGF0ZXNJbkNvbnRleHQ6IFtdLFxuICAgICAgdGFnczogW10sXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBBbmFseXNlciBsZSBjb250ZXh0ZSBhdXRvdXIgZHUgY3Vyc2V1clxuICAgICAgY29uc3QgY29udGVudCA9IGVkaXRvci5nZXRWYWx1ZSgpO1xuICAgICAgY29uc3QgbGluZXMgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpO1xuXG4gICAgICBjb25zdCBzdGFydExpbmUgPSBNYXRoLm1heCgwLCBjdXJzb3JMaW5lIC0gQ09OVEVYVF9MSU5FUyk7XG4gICAgICBjb25zdCBlbmRMaW5lID0gTWF0aC5taW4obGluZXMubGVuZ3RoIC0gMSwgY3Vyc29yTGluZSArIENPTlRFWFRfTElORVMpO1xuXG4gICAgICBjb25zdCBjb250ZXh0TGluZXMgPSBsaW5lcy5zbGljZShzdGFydExpbmUsIGVuZExpbmUgKyAxKTtcbiAgICAgIGNvbnN0IGNvbnRleHRUZXh0ID0gY29udGV4dExpbmVzLmpvaW4oXCJcXG5cIik7XG5cbiAgICAgIC8vIFbDqXJpZmllciBsZSBjYWNoZSAoYXZlYyB0aW1lb3V0KS4gVGhlIGtleSBpbmNsdWRlcyBhIGNoZWFwIGhhc2ggb2ZcbiAgICAgIC8vIHRoZSBhY3R1YWwgc2Nhbm5lZCB3aW5kb3csIG5vdCBqdXN0IGZpbGUrbGluZTogd2l0aG91dCBpdCwgZWRpdGluZ1xuICAgICAgLy8gY29udGVudCB3aXRoaW4gdGhlIMKxQ09OVEVYVF9MSU5FUyB3aW5kb3cgKHdpdGhvdXQgbW92aW5nIHRoZSBjdXJzb3JcbiAgICAgIC8vIHRvIGEgZGlmZmVyZW50IGxpbmUpIHdvdWxkIGtlZXAgc2VydmluZyBhIHN0YWxlIGNhY2hlZCByZXN1bHQgdW50aWxcbiAgICAgIC8vIENBQ0hFX1RJTUVPVVQgZXhwaXJlcywgc2luY2UgZmlsZStsaW5lIGFsb25lIGRvZXNuJ3QgY2hhbmdlIHdoZW5cbiAgICAgIC8vIG5lYXJieSBjb250ZW50IGRvZXMuXG4gICAgICBjb25zdCBjYWNoZUtleSA9IGAke2ZpbGUucGF0aH0tJHtjdXJzb3JMaW5lfS0ke3NpbXBsZUhhc2goY29udGV4dFRleHQpfWA7XG4gICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgICBpZiAoY2FjaGVkKSB7XG4gICAgICAgIC8vIFbDqXJpZmllciBzaSBsJ2VudHLDqWUgbidlc3QgcGFzIGV4cGlyw6llXG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGlmIChjYWNoZWQudGltZXN0YW1wICYmIChub3cgLSBjYWNoZWQudGltZXN0YW1wKSA8PSBDQUNIRV9USU1FT1VUKSB7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBFbnRyw6llIGV4cGlyw6llLCBsYSBzdXBwcmltZXJcbiAgICAgICAgICB0aGlzLmNhY2hlLmRlbGV0ZShjYWNoZUtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRXh0cmFpcmUgbGVzIHRhZ3MgZGVwdWlzIGxlcyBtw6l0YWRvbm7DqWVzXG4gICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xuICAgICAgaWYgKG1ldGFkYXRhKSB7XG4gICAgICAgIGlmIChtZXRhZGF0YS50YWdzKSB7XG4gICAgICAgICAgY29udGV4dC50YWdzID0gbWV0YWRhdGEudGFncy5tYXAodGFnID0+IHRhZy50YWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXh0cmFpcmUgbGUgdGl0cmUgZGVwdWlzIGxlcyBmcm9udG1hdHRlciBvdSBsZSBwcmVtaWVyIHRpdHJlXG4gICAgICAgIC8vIEZyb250bWF0dGVyIHZhbHVlcyBhcmUgdXNlci1hdXRob3JlZCBZQU1MLCBzbyBcInRpdGxlXCIgaXNuJ3RcbiAgICAgICAgLy8gZ3VhcmFudGVlZCB0byBhY3R1YWxseSBiZSBhIHN0cmluZyAoZS5nLiBgdGl0bGU6IDQyYCkuXG4gICAgICAgIGlmICh0eXBlb2YgbWV0YWRhdGEuZnJvbnRtYXR0ZXI/LnRpdGxlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgY29udGV4dC50aXRsZSA9IG1ldGFkYXRhLmZyb250bWF0dGVyLnRpdGxlO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmhlYWRpbmdzICYmIG1ldGFkYXRhLmhlYWRpbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb250ZXh0LnRpdGxlID0gbWV0YWRhdGEuaGVhZGluZ3NbMF0uaGVhZGluZztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBFeHRyYWlyZSBsZXMgZGF0ZXMgZHUgY29udGV4dGVcbiAgICAgIGNvbnRleHQuZGF0ZXNJbkNvbnRleHQgPSB0aGlzLmV4dHJhY3REYXRlc0Zyb21Db250ZXh0KGNvbnRleHRUZXh0KTtcblxuICAgICAgLy8gTWV0dHJlIGVuIGNhY2hlIChsZSBMUlUgY2FjaGUgZ8OocmUgYXV0b21hdGlxdWVtZW50IGxhIGxpbWl0ZSBkZSB0YWlsbGUpXG4gICAgICB0aGlzLmNhY2hlLnNldChjYWNoZUtleSwgY29udGV4dCk7XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKFwiRXJyb3IgYW5hbHl6aW5nIGNvbnRleHQ6XCIsIHsgZXJyb3IgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICAvKipcbiAgICogQW5hbHlzZSBsZSBjb250ZXh0ZSBhdXRvdXIgZHUgY3Vyc2V1ciBkYW5zIGxlIGRvY3VtZW50IGFjdHVlbCAoYXN5bmMsIHBvdXIgY29tcGF0aWJpbGl0w6kpXG4gICAqL1xuICBhbmFseXplQ29udGV4dChlZGl0b3I6IEVkaXRvciwgY3Vyc29yTGluZTogbnVtYmVyKTogUHJvbWlzZTxDb250ZXh0SW5mbz4ge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5hbmFseXplQ29udGV4dFN5bmMoZWRpdG9yLCBjdXJzb3JMaW5lKSk7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXNlIHVuZSBkYXRlIGV4dHJhaXRlIGVuIGNhcGl0YWxpc2FudCBsYSBwcmVtacOocmUgbGV0dHJlXG4gICAqIEV4ZW1wbGU6IFwiZGVtYWluXCIgLT4gXCJEZW1haW5cIiwgXCJsdW5kaSBwcm9jaGFpblwiIC0+IFwiTHVuZGkgcHJvY2hhaW5cIlxuICAgKi9cbiAgcHJpdmF0ZSBub3JtYWxpemVEYXRlKGRhdGVTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlU3RyIHx8IGRhdGVTdHIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZGF0ZVN0cjtcbiAgICB9XG5cbiAgICBjb25zdCB0cmltbWVkID0gZGF0ZVN0ci50cmltKCk7XG4gICAgaWYgKHRyaW1tZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJpbW1lZDtcbiAgICB9XG5cbiAgICAvLyBDYXBpdGFsaXplIGVhY2ggd29yZCBpbmRpdmlkdWFsbHksIG5vdCBqdXN0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2ZcbiAgICAvLyB0aGUgd2hvbGUgc3RyaW5nOiBtdWx0aS13b3JkIG1hdGNoZXMgZnJvbSB0aGUgcHJlZml4K3dlZWtkYXkvcHJlZml4K1xuICAgIC8vIHVuaXQgcGF0dGVybnMgKGUuZy4gXCJuZXh0IEZyaWRheVwiKSB3b3VsZCBvdGhlcndpc2UgaGF2ZSB0aGVpciBzZWNvbmRcbiAgICAvLyB3b3JkIGZvcmNlZCB0byBsb3dlcmNhc2UgKFwiTmV4dCBmcmlkYXlcIiksIGluY29ycmVjdGx5IG1hbmdsaW5nXG4gICAgLy8gY2FwaXRhbGl6ZWQgd2Vla2RheS9tb250aCBuYW1lcyB0aGUgdXNlciBhY3R1YWxseSB0eXBlZC5cbiAgICByZXR1cm4gdHJpbW1lZFxuICAgICAgLnNwbGl0KC9cXHMrLylcbiAgICAgIC5tYXAod29yZCA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWl0IGxlcyBleHByZXNzaW9ucyBkZSBkYXRlcyBwb3RlbnRpZWxsZXMgZHUgdGV4dGVcbiAgICogVXRpbGlzZSBkZXMgcGF0dGVybnMgZHluYW1pcXVlcyBtdWx0aS1sYW5ndWUgcG91ciBkw6l0ZWN0ZXIgbGVzIGRhdGVzIG5hdHVyZWxsZXNcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdERhdGVzRnJvbUNvbnRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGRhdGVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIC8vIFV0aWxpc2VyIGxlcyBwYXR0ZXJucyBkeW5hbWlxdWVzIGfDqW7DqXLDqXMgcG91ciB0b3V0ZXMgbGVzIGxhbmd1ZXMgYWN0aXbDqWVzXG4gICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHRoaXMuZGF0ZVBhdHRlcm5zKSB7XG4gICAgICAvLyBUaGUgbGVhZGluZyBib3VuZGFyeSBjb25zdW1lcyBhIGNoYXJhY3RlciBpbnN0ZWFkIG9mIHVzaW5nIGFcbiAgICAgIC8vIHplcm8td2lkdGggbG9va2JlaGluZCAoc2VlIGluaXRpYWxpemVEYXRlUGF0dGVybnMpLCBzbyB0aGUgdGV4dCB0b1xuICAgICAgLy8gZXh0cmFjdCBpcyByZWFkIGZyb20gY2FwdHVyZSBncm91cCAxLCBub3QgdGhlIHdob2xlIG1hdGNoLlxuICAgICAgZm9yIChjb25zdCBtYXRjaCBvZiB0ZXh0Lm1hdGNoQWxsKHBhdHRlcm4pKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBtYXRjaFsxXTtcbiAgICAgICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgICAvLyBQb3VyIGxlcyBsYW5ndWVzIHNhbnMgY2Fzc2UgKGNvbW1lIGxlIGphcG9uYWlzKSwgdG9Mb3dlckNhc2UoKSBuZSBjaGFuZ2UgcmllblxuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBjb250ZW50LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICAgIGlmICghc2Vlbi5oYXMobm9ybWFsaXplZCkgJiYgZGF0ZXMubGVuZ3RoIDwgTUFYX0RBVEVTX1RPX0VYVFJBQ1QpIHtcbiAgICAgICAgICAgIHNlZW4uYWRkKG5vcm1hbGl6ZWQpO1xuICAgICAgICAgICAgLy8gTm9ybWFsaXNlciBhdmVjIGxhIHByZW1pw6hyZSBsZXR0cmUgZW4gbWFqdXNjdWxlIChvdSBsYWlzc2VyIHRlbCBxdWVsIHBvdXIgbGUgamFwb25haXMpXG4gICAgICAgICAgICBkYXRlcy5wdXNoKHRoaXMubm9ybWFsaXplRGF0ZShjb250ZW50LnRyaW0oKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXR0b2llIGxlIGNhY2hlIChwZXV0IMOqdHJlIGFwcGVsw6kgcMOpcmlvZGlxdWVtZW50KVxuICAgKi9cbiAgY2xlYXJDYWNoZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3VybmUgbGVzIHN0YXRpc3RpcXVlcyBkdSBjYWNoZSBkZSBjb250ZXh0ZVxuICAgKi9cbiAgZ2V0Q2FjaGVTdGF0cygpOiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBzaXplOiB0aGlzLmNhY2hlLnNpemUsXG4gICAgICBtYXhTaXplOiB0aGlzLmNhY2hlLm1heFNpemVMaW1pdCxcbiAgICB9O1xuICB9XG59XG4iLCIvKipcbiAqIENsYXNzZSBkJ2VycmV1ciBwZXJzb25uYWxpc8OpZSBwb3VyIE5hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXNcbiAqL1xuZXhwb3J0IGNsYXNzIE5MRFBhcnNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHB1YmxpYyByZWFkb25seSBjb2RlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjb250ZXh0PzogdW5rbm93bjtcbiAgcHVibGljIHJlYWRvbmx5IHNldmVyaXR5OiAnZGVidWcnIHwgJ3dhcm4nIHwgJ2Vycm9yJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgY29kZTogc3RyaW5nLFxuICAgIHNldmVyaXR5OiAnZGVidWcnIHwgJ3dhcm4nIHwgJ2Vycm9yJyA9ICdlcnJvcicsXG4gICAgY29udGV4dD86IHVua25vd25cbiAgKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ05MRFBhcnNlRXJyb3InO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5zZXZlcml0eSA9IHNldmVyaXR5O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgICAvLyBNYWludGllbnQgbGEgc3RhY2sgdHJhY2UgcG91ciBsZSBkw6lib2dhZ2UgKFY4IG9ubHkpXG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOTERQYXJzZUVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDb2RlcyBkJ2VycmV1ciBjb25zdGFudHNcbiAqL1xuZXhwb3J0IGNvbnN0IEVycm9yQ29kZXMgPSB7XG4gIC8vIEluaXRpYWxpc2F0aW9uXG4gIFBBUlNFUl9JTklUX0ZBSUxFRDogJ1BBUlNFUl9JTklUX0ZBSUxFRCcsXG4gIENIUk9OT19JTklUX0ZBSUxFRDogJ0NIUk9OT19JTklUX0ZBSUxFRCcsXG4gIFxuICAvLyBQYXJzaW5nXG4gIFBBUlNFX0ZBSUxFRDogJ1BBUlNFX0ZBSUxFRCcsXG4gIENIUk9OT19QQVJTRV9FUlJPUjogJ0NIUk9OT19QQVJTRV9FUlJPUicsXG4gIFxuICAvLyBDb25maWd1cmF0aW9uXG4gIFNFVFRJTkdTX0xPQURfRkFJTEVEOiAnU0VUVElOR1NfTE9BRF9GQUlMRUQnLFxuICBJTlZBTElEX0xBTkdVQUdFOiAnSU5WQUxJRF9MQU5HVUFHRScsXG59IGFzIGNvbnN0O1xuXG4iLCJpbXBvcnQgeyBOb3RpY2UsIE9ic2lkaWFuUHJvdG9jb2xEYXRhLCBQbHVnaW4gfSBmcm9tIFwib2JzaWRpYW5cIjtcblxuaW1wb3J0IERhdGVQaWNrZXJNb2RhbCBmcm9tIFwiLi9tb2RhbHMvZGF0ZS1waWNrZXJcIjtcbmltcG9ydCBOTERQYXJzZXIsIHsgTkxEUmVzdWx0IH0gZnJvbSBcIi4vcGFyc2VyXCI7XG5pbXBvcnQgeyBOTERTZXR0aW5nc1RhYiwgTkxEU2V0dGluZ3MsIERFRkFVTFRfU0VUVElOR1MgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xuaW1wb3J0IERhdGVTdWdnZXN0IGZyb20gXCIuL3N1Z2dlc3QvZGF0ZS1zdWdnZXN0XCI7XG5pbXBvcnQge1xuICBnZXRQYXJzZUNvbW1hbmQsXG4gIGdldEN1cnJlbnREYXRlQ29tbWFuZCxcbiAgZ2V0Q3VycmVudFRpbWVDb21tYW5kLFxuICBnZXROb3dDb21tYW5kLFxufSBmcm9tIFwiLi9jb21tYW5kc1wiO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVEYWlseU5vdGUsIHBhcnNlVHJ1dGh5LCB2YWxpZGF0ZVVyaVBhcmFtLCB2YWxpZGF0ZU1vbWVudEZvcm1hdCwgZ2V0QWN0aXZlRWRpdG9yIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IERhdGVGb3JtYXR0ZXIgfSBmcm9tIFwiLi9kYXRlLWZvcm1hdHRlclwiO1xuaW1wb3J0IEhpc3RvcnlNYW5hZ2VyIGZyb20gXCIuL2hpc3RvcnktbWFuYWdlclwiO1xuaW1wb3J0IENvbnRleHRBbmFseXplciBmcm9tIFwiLi9jb250ZXh0LWFuYWx5emVyXCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwiLi9sb2dnZXJcIjtcbmltcG9ydCB7IE5MRFBhcnNlRXJyb3IsIEVycm9yQ29kZXMgfSBmcm9tIFwiLi9lcnJvcnNcIjtcbmltcG9ydCBtb21lbnQgZnJvbSBcIi4vd2luZG93LW1vbWVudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOYXR1cmFsTGFuZ3VhZ2VEYXRlcyBleHRlbmRzIFBsdWdpbiB7XG4gIHB1YmxpYyBwYXJzZXI6IE5MRFBhcnNlcjtcbiAgcHVibGljIHNldHRpbmdzOiBOTERTZXR0aW5ncztcbiAgcHVibGljIGhpc3RvcnlNYW5hZ2VyOiBIaXN0b3J5TWFuYWdlcjtcbiAgcHVibGljIGNvbnRleHRBbmFseXplcjogQ29udGV4dEFuYWx5emVyO1xuICBwcml2YXRlIG1lbW9yeU1vbml0b3JpbmdJbnRlcnZhbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgTUVNT1JZX01PTklUT1JJTkdfSU5URVJWQUwgPSA2MDAwMDA7IC8vIFRvdXRlcyBsZXMgMTAgbWludXRlc1xuXG4gIGFzeW5jIG9ubG9hZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgcGFyc2VyIGltbWVkaWF0ZWx5IChubyBuZWVkIHRvIHdhaXQgZm9yIG9uTGF5b3V0UmVhZHkpXG4gICAgdGhpcy5yZXNldFBhcnNlcigpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBzbWFydCBzdWdnZXN0aW9uIG1hbmFnZXJzXG4gICAgdGhpcy5oaXN0b3J5TWFuYWdlciA9IG5ldyBIaXN0b3J5TWFuYWdlcih0aGlzKTtcbiAgICB0aGlzLmNvbnRleHRBbmFseXplciA9IG5ldyBDb250ZXh0QW5hbHl6ZXIodGhpcy5hcHAsIHRoaXMpO1xuICAgIFxuICAgIC8vIEluaXRpYWxpemUgaGlzdG9yeSBhc3luY2hyb25vdXNseVxuICAgIHRoaXMuaGlzdG9yeU1hbmFnZXIuaW5pdGlhbGl6ZSgpLmNhdGNoKChlcnI6IHVua25vd24pID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihcIkVycm9yIGluaXRpYWxpemluZyBoaXN0b3J5XCIsIHsgZXJyb3I6IGVyciB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtZGF0ZXNcIixcbiAgICAgIG5hbWU6IFwiUGFyc2UgbmF0dXJhbCBsYW5ndWFnZSBkYXRlXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwicmVwbGFjZVwiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtZGF0ZXMtbGlua1wiLFxuICAgICAgbmFtZTogXCJQYXJzZSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgKGFzIGxpbmspXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwibGlua1wiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtZGF0ZS1jbGVhblwiLFxuICAgICAgbmFtZTogXCJQYXJzZSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgKGFzIHBsYWluIHRleHQpXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwiY2xlYW5cIiksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwibmxwLXBhcnNlLXRpbWVcIixcbiAgICAgIG5hbWU6IFwiUGFyc2UgbmF0dXJhbCBsYW5ndWFnZSB0aW1lXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0UGFyc2VDb21tYW5kKHRoaXMsIFwidGltZVwiKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtbm93XCIsXG4gICAgICBuYW1lOiBcIkluc2VydCB0aGUgY3VycmVudCBkYXRlIGFuZCB0aW1lXCIsXG4gICAgICBjYWxsYmFjazogKCkgPT4gZ2V0Tm93Q29tbWFuZCh0aGlzKSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XG4gICAgICBpZDogXCJubHAtdG9kYXlcIixcbiAgICAgIG5hbWU6IFwiSW5zZXJ0IHRoZSBjdXJyZW50IGRhdGVcIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBnZXRDdXJyZW50RGF0ZUNvbW1hbmQodGhpcyksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwibmxwLXRpbWVcIixcbiAgICAgIG5hbWU6IFwiSW5zZXJ0IHRoZSBjdXJyZW50IHRpbWVcIixcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiBnZXRDdXJyZW50VGltZUNvbW1hbmQodGhpcyksXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgaWQ6IFwibmxwLXBpY2tlclwiLFxuICAgICAgbmFtZTogXCJEYXRlIHBpY2tlclwiLFxuICAgICAgY2hlY2tDYWxsYmFjazogKGNoZWNraW5nOiBib29sZWFuKSA9PiB7XG4gICAgICAgIGlmIChjaGVja2luZykge1xuICAgICAgICAgIHJldHVybiAhIWdldEFjdGl2ZUVkaXRvcih0aGlzLmFwcC53b3Jrc3BhY2UpO1xuICAgICAgICB9XG4gICAgICAgIG5ldyBEYXRlUGlja2VyTW9kYWwodGhpcy5hcHAsIHRoaXMpLm9wZW4oKTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZFNldHRpbmdUYWIobmV3IE5MRFNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XG4gICAgdGhpcy5yZWdpc3Rlck9ic2lkaWFuUHJvdG9jb2xIYW5kbGVyKFwibmxkYXRlc1wiLCBwYXJhbXMgPT4gdGhpcy5hY3Rpb25IYW5kbGVyKHBhcmFtcykpO1xuICAgIHRoaXMucmVnaXN0ZXJFZGl0b3JTdWdnZXN0KG5ldyBEYXRlU3VnZ2VzdCh0aGlzLmFwcCwgdGhpcykpO1xuXG4gICAgLy8gRMOpbWFycmVyIGxlIG1vbml0b3JpbmcgZGUgbGEgbcOpbW9pcmVcbiAgICB0aGlzLnN0YXJ0TWVtb3J5TW9uaXRvcmluZygpO1xuICB9XG5cbiAgcmVzZXRQYXJzZXIoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucGFyc2VyID0gbmV3IE5MRFBhcnNlcih0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyk7XG4gICAgICBsb2dnZXIuZGVidWcoXCJQYXJzZXIgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5XCIsIHsgbGFuZ3VhZ2VzOiB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgcGFyc2VFcnJvciA9IGVycm9yIGluc3RhbmNlb2YgTkxEUGFyc2VFcnJvciBcbiAgICAgICAgPyBlcnJvciBcbiAgICAgICAgOiBuZXcgTkxEUGFyc2VFcnJvcihcbiAgICAgICAgICAgICdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYXJzZXInLFxuICAgICAgICAgICAgRXJyb3JDb2Rlcy5QQVJTRVJfSU5JVF9GQUlMRUQsXG4gICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgeyBvcmlnaW5hbEVycm9yOiBlcnJvciwgbGFuZ3VhZ2VzOiB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyB9XG4gICAgICAgICAgKTtcbiAgICAgIFxuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwYXJzZXInLCB7XG4gICAgICAgIGNvZGU6IHBhcnNlRXJyb3IuY29kZSxcbiAgICAgICAgZXJyb3I6IHBhcnNlRXJyb3IubWVzc2FnZSxcbiAgICAgICAgY29udGV4dDogcGFyc2VFcnJvci5jb250ZXh0LFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIC8vIENyZWF0ZSBwYXJzZXIgd2l0aCBFbmdsaXNoIGFzIGRlZmF1bHQgaW4gY2FzZSBvZiBlcnJvciB0byBwcmV2ZW50IHBsdWdpbiBmcm9tIGNyYXNoaW5nIGNvbXBsZXRlbHlcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucGFyc2VyID0gbmV3IE5MRFBhcnNlcihbJ2VuJ10pO1xuICAgICAgICBsb2dnZXIuaW5mbygnUGFyc2VyIGluaXRpYWxpemVkIHdpdGggRW5nbGlzaCBmYWxsYmFjaycpO1xuICAgICAgICBcbiAgICAgICAgLy8gTm90aWZpZXIgbCd1dGlsaXNhdGV1ciB1bmlxdWVtZW50IHBvdXIgbGVzIGVycmV1cnMgY3JpdGlxdWVzXG4gICAgICAgIG5ldyBOb3RpY2UoXG4gICAgICAgICAgJ05hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXM6IEZhaWxlZCB0byBpbml0aWFsaXplIHdpdGggc2VsZWN0ZWQgbGFuZ3VhZ2VzLiBVc2luZyBFbmdsaXNoIGFzIGZhbGxiYWNrLicsXG4gICAgICAgICAgNTAwMFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZmFsbGJhY2tFcnJvcikge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIHBhcnNlciBldmVuIHdpdGggRW5nbGlzaCBmYWxsYmFjaycsIHsgZXJyb3I6IGZhbGxiYWNrRXJyb3IgfSk7XG4gICAgICAgIG5ldyBOb3RpY2UoXG4gICAgICAgICAgJ05hdHVyYWwgTGFuZ3VhZ2UgRGF0ZXM6IENyaXRpY2FsIGVycm9yIC0gcGFyc2VyIGluaXRpYWxpemF0aW9uIGZhaWxlZC4gUGxlYXNlIHJlc3RhcnQgT2JzaWRpYW4uJyxcbiAgICAgICAgICAxMDAwMFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICAvLyBSZXNldCBjb250ZXh0IHBhdHRlcm5zIHdoZW4gbGFuZ3VhZ2VzIGNoYW5nZVxuICAgIGlmICh0aGlzLmNvbnRleHRBbmFseXplcikge1xuICAgICAgdGhpcy5jb250ZXh0QW5hbHl6ZXIucmVzZXRQYXR0ZXJucygpO1xuICAgIH1cbiAgfVxuXG4gIG9udW5sb2FkKCk6IHZvaWQge1xuICAgIC8vIEFycsOqdGVyIGxlIG1vbml0b3JpbmcgZGUgbGEgbcOpbW9pcmVcbiAgICB0aGlzLnN0b3BNZW1vcnlNb25pdG9yaW5nKCk7XG4gICAgXG4gICAgLy8gTmV0dG95ZXIgbGVzIHJlc3NvdXJjZXNcbiAgICBpZiAodGhpcy5jb250ZXh0QW5hbHl6ZXIpIHtcbiAgICAgIHRoaXMuY29udGV4dEFuYWx5emVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGlzdG9yeU1hbmFnZXIpIHtcbiAgICAgIHRoaXMuaGlzdG9yeU1hbmFnZXIuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEw6ltYXJyZSBsZSBtb25pdG9yaW5nIHDDqXJpb2RpcXVlIGRlIGwndXRpbGlzYXRpb24gbcOpbW9pcmVcbiAgICovXG4gIHByaXZhdGUgc3RhcnRNZW1vcnlNb25pdG9yaW5nKCk6IHZvaWQge1xuICAgIC8vIExvZ2dlciBsZXMgc3RhdGlzdGlxdWVzIHRvdXRlcyBsZXMgMTAgbWludXRlc1xuICAgIHRoaXMubWVtb3J5TW9uaXRvcmluZ0ludGVydmFsID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHRoaXMubG9nTWVtb3J5VXNhZ2UoKTtcbiAgICB9LCB0aGlzLk1FTU9SWV9NT05JVE9SSU5HX0lOVEVSVkFMKTtcbiAgICBcbiAgICAvLyBMb2dnZXIgaW1tw6lkaWF0ZW1lbnQgYXUgZMOpbWFycmFnZVxuICAgIHRoaXMubG9nTWVtb3J5VXNhZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcnLDqnRlIGxlIG1vbml0b3JpbmcgZGUgbGEgbcOpbW9pcmVcbiAgICovXG4gIHByaXZhdGUgc3RvcE1lbW9yeU1vbml0b3JpbmcoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWVtb3J5TW9uaXRvcmluZ0ludGVydmFsICE9PSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLm1lbW9yeU1vbml0b3JpbmdJbnRlcnZhbCk7XG4gICAgICB0aGlzLm1lbW9yeU1vbml0b3JpbmdJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvZyBsZXMgc3RhdGlzdGlxdWVzIGQndXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1xuICAgKi9cbiAgcHJpdmF0ZSBsb2dNZW1vcnlVc2FnZSgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHM6IHtcbiAgICAgICAgcGFyc2luZ0NhY2hlPzogeyBzaXplOiBudW1iZXI7IG1heFNpemU6IG51bWJlciB9O1xuICAgICAgICBjb250ZXh0Q2FjaGU/OiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH07XG4gICAgICAgIGhpc3Rvcnk/OiB7IHNpemU6IG51bWJlcjsgbWF4U2l6ZTogbnVtYmVyIH07XG4gICAgICB9ID0ge307XG5cbiAgICAgIC8vIFN0YXRpc3RpcXVlcyBkdSBjYWNoZSBkZSBwYXJzaW5nXG4gICAgICBpZiAodGhpcy5wYXJzZXIpIHtcbiAgICAgICAgc3RhdHMucGFyc2luZ0NhY2hlID0gdGhpcy5wYXJzZXIuZ2V0Q2FjaGVTdGF0cygpO1xuICAgICAgfVxuXG4gICAgICAvLyBTdGF0aXN0aXF1ZXMgZHUgY2FjaGUgZGUgY29udGV4dGVcbiAgICAgIGlmICh0aGlzLmNvbnRleHRBbmFseXplcikge1xuICAgICAgICBzdGF0cy5jb250ZXh0Q2FjaGUgPSB0aGlzLmNvbnRleHRBbmFseXplci5nZXRDYWNoZVN0YXRzKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFN0YXRpc3RpcXVlcyBkZSBsJ2hpc3RvcmlxdWVcbiAgICAgIGlmICh0aGlzLmhpc3RvcnlNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMuaGlzdG9yeU1hbmFnZXIuZ2V0SGlzdG9yeSgpLnRoZW4oaGlzdG9yeSA9PiB7XG4gICAgICAgICAgc3RhdHMuaGlzdG9yeSA9IHtcbiAgICAgICAgICAgIHNpemU6IE9iamVjdC5rZXlzKGhpc3RvcnkpLmxlbmd0aCxcbiAgICAgICAgICAgIG1heFNpemU6IDEwMCwgLy8gTUFYX0hJU1RPUllfU0laRVxuICAgICAgICAgIH07XG4gICAgICAgICAgXG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiVXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1wiLCBzdGF0cyk7XG4gICAgICAgIH0pLmNhdGNoKChlcnI6IHVua25vd24pID0+IHtcbiAgICAgICAgICBsb2dnZXIud2FybihcIkltcG9zc2libGUgZGUgcsOpY3Vww6lyZXIgbGVzIHN0YXRpc3RpcXVlcyBkZSBsJ2hpc3RvcmlxdWVcIiwgeyBlcnJvcjogZXJyIH0pO1xuICAgICAgICAgIC8vIExvZ2dlciBxdWFuZCBtw6ptZSBsZXMgYXV0cmVzIHN0YXRpc3RpcXVlc1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0cykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKFwiVXRpbGlzYXRpb24gbcOpbW9pcmUgZGVzIGNhY2hlc1wiLCBzdGF0cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0cykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGxvZ2dlci5kZWJ1ZyhcIlV0aWxpc2F0aW9uIG3DqW1vaXJlIGRlcyBjYWNoZXNcIiwgc3RhdHMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiRXJyZXVyIGxvcnMgZHUgbW9uaXRvcmluZyBkZSBsYSBtw6ltb2lyZVwiLCB7IGVycm9yIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxvYWRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2FkZWREYXRhID0gYXdhaXQgdGhpcy5sb2FkRGF0YSgpIGFzIFBhcnRpYWw8TkxEU2V0dGluZ3M+IHwgbnVsbDtcbiAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgbG9hZGVkRGF0YSk7XG4gICAgXG4gICAgLy8gRW5zdXJlIGxhbmd1YWdlcyBpcyBub3QgZW1wdHkgKHVzZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWNlc3NhcnkpXG4gICAgaWYgKCF0aGlzLnNldHRpbmdzLmxhbmd1YWdlcyB8fCB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2V0dGluZ3MubGFuZ3VhZ2VzID0gWy4uLkRFRkFVTFRfU0VUVElOR1MubGFuZ3VhZ2VzXTtcbiAgICB9XG4gICAgXG4gICAgLy8gU3luY2hyb25pemUgZmxhZ3Mgd2l0aCBsYW5ndWFnZXMgYXJyYXkgaWYgbmVjZXNzYXJ5XG4gICAgdGhpcy5zeW5jTGFuZ3VhZ2VGbGFncygpO1xuICB9XG5cbiAgLy8gU3luY2hyb25pemVzIGxhbmd1YWdlIGZsYWdzIChlbmdsaXNoLCBmcmVuY2gsIGV0Yy4pIHdpdGggbGFuZ3VhZ2VzIGFycmF5XG4gIHByaXZhdGUgc3luY0xhbmd1YWdlRmxhZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgbGFuZ3VhZ2VNYXA6IHsgW2tleTogc3RyaW5nXToga2V5b2YgTkxEU2V0dGluZ3MgfSA9IHtcbiAgICAgICdlbic6ICdlbmdsaXNoJyxcbiAgICAgICdqYSc6ICdqYXBhbmVzZScsXG4gICAgICAnZnInOiAnZnJlbmNoJyxcbiAgICAgICdkZSc6ICdnZXJtYW4nLFxuICAgICAgJ3B0JzogJ3BvcnR1Z3Vlc2UnLFxuICAgICAgJ25sJzogJ2R1dGNoJyxcbiAgICAgICdlcyc6ICdzcGFuaXNoJyxcbiAgICAgICdpdCc6ICdpdGFsaWFuJyxcbiAgICAgICdydSc6ICdydXNzaWFuJyxcbiAgICAgICd1ayc6ICd1a3JhaW5pYW4nLFxuICAgICAgJ3poLmhhbnQnOiAnY2hpbmVzZScsXG4gICAgfTtcbiAgICBcbiAgICAvLyBSZXNldCBhbGwgZmxhZ3NcbiAgICB0aGlzLnNldHRpbmdzLmVuZ2xpc2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLmphcGFuZXNlID0gZmFsc2U7XG4gICAgdGhpcy5zZXR0aW5ncy5mcmVuY2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLmdlcm1hbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MucG9ydHVndWVzZSA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MuZHV0Y2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLnNwYW5pc2ggPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLml0YWxpYW4gPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLnJ1c3NpYW4gPSBmYWxzZTtcbiAgICB0aGlzLnNldHRpbmdzLnVrcmFpbmlhbiA9IGZhbHNlO1xuICAgIHRoaXMuc2V0dGluZ3MuY2hpbmVzZSA9IGZhbHNlO1xuICAgIFxuICAgIC8vIEVuYWJsZSBmbGFncyBjb3JyZXNwb25kaW5nIHRvIGxhbmd1YWdlcyBpbiBhcnJheVxuICAgIGZvciAoY29uc3QgbGFuZyBvZiB0aGlzLnNldHRpbmdzLmxhbmd1YWdlcykge1xuICAgICAgY29uc3QgZmxhZ0tleSA9IGxhbmd1YWdlTWFwW2xhbmddO1xuICAgICAgaWYgKGZsYWdLZXkpIHtcbiAgICAgICAgKHRoaXMuc2V0dGluZ3NbZmxhZ0tleV0gYXMgYm9vbGVhbikgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIG5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSBzdHJpbmcgYW5kIGZvcm1hdHMgaXQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0LlxuICAgKiBcbiAgICogVGhpcyBpcyB0aGUgY29yZSBwYXJzaW5nIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBjdXN0b20gZm9ybWF0IHN0cmluZy5cbiAgICogVGhlIGlucHV0IGlzIHZhbGlkYXRlZCBhbmQgc2FuaXRpemVkIGJlZm9yZSBwYXJzaW5nLlxuICAgKiBcbiAgICogQHBhcmFtIGRhdGVTdHJpbmcgLSBOYXR1cmFsIGxhbmd1YWdlIGRhdGUgc3RyaW5nIChlLmcuLCBcInRvZGF5XCIsIFwidG9tb3Jyb3dcIiwgXCJpbiAyIGRheXNcIiwgXCJuZXh0IE1vbmRheVwiKVxuICAgKiBAcGFyYW0gZm9ybWF0IC0gTW9tZW50LmpzIGZvcm1hdCBzdHJpbmcgKGUuZy4sIFwiWVlZWS1NTS1ERFwiLCBcIkREL01NL1lZWVlcIiwgXCJNTU1NIERvLCBZWVlZXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3QgY29udGFpbmluZyB0aGUgZm9ybWF0dGVkIHN0cmluZywgRGF0ZSBvYmplY3QsIGFuZCBNb21lbnQgb2JqZWN0XG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHJlc3VsdCA9IHBsdWdpbi5wYXJzZShcInRvbW9ycm93XCIsIFwiWVlZWS1NTS1ERFwiKTtcbiAgICogY29uc29sZS5sb2cocmVzdWx0LmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMjAyNS0wMS0wNlwiXG4gICAqIFxuICAgKiBjb25zdCByZXN1bHQyID0gcGx1Z2luLnBhcnNlKFwibmV4dCBNb25kYXlcIiwgXCJkZGRkLCBNTU1NIERvXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiTW9uZGF5LCBKYW51YXJ5IDZ0aFwiXG4gICAqIGBgYFxuICAgKi9cbiAgcGFyc2UoZGF0ZVN0cmluZzogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyk6IE5MRFJlc3VsdCB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgLy8gUGFyc2VyIG5vdCB5ZXQgaW5pdGlhbGl6ZWQsIGluaXRpYWxpemUgaXQgbm93XG4gICAgICB0aGlzLnJlc2V0UGFyc2VyKCk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgYXZhbnQgdXRpbGlzYXRpb25cbiAgICBjb25zdCBmb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQoZm9ybWF0KTtcbiAgICBpZiAoIWZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBmb3JtYXQgaW4gcGFyc2UoKVwiLCB7IGZvcm1hdCwgZXJyb3I6IGZvcm1hdFZhbGlkYXRpb24uZXJyb3IgfSk7XG4gICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXQgZW4gY2FzIGQnZXJyZXVyXG4gICAgICBmb3JtYXQgPSBERUZBVUxUX1NFVFRJTkdTLmZvcm1hdDtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGVyIGV0IHNhbml0aXplciBsJ2VudHLDqWUgdXRpbGlzYXRldXJcbiAgICBjb25zdCBzYW5pdGl6ZWRJbnB1dCA9IHZhbGlkYXRlVXJpUGFyYW0oZGF0ZVN0cmluZywgMjAwKTtcbiAgICBpZiAoIXNhbml0aXplZElucHV0KSB7XG4gICAgICBsb2dnZXIud2FybihcIkludmFsaWQgaW5wdXQgaW4gcGFyc2UoKVwiLCB7IGRhdGVTdHJpbmcgfSk7XG4gICAgICAvLyBSZXRvdXJuZXIgdW5lIGRhdGUgaW52YWxpZGUgcGx1dMO0dCBxdWUgZGUgcGxhbnRlclxuICAgICAgY29uc3QgaW52YWxpZERhdGUgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZm9ybWF0dGVkU3RyaW5nOiBcIkludmFsaWQgZGF0ZVwiLFxuICAgICAgICBkYXRlOiBpbnZhbGlkRGF0ZSxcbiAgICAgICAgbW9tZW50OiBtb21lbnQoaW52YWxpZERhdGUpLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRlID0gdGhpcy5wYXJzZXIuZ2V0UGFyc2VkRGF0ZShzYW5pdGl6ZWRJbnB1dCwgdGhpcy5zZXR0aW5ncy53ZWVrU3RhcnQpO1xuICAgIGNvbnN0IGZvcm1hdHRlZFN0cmluZyA9IERhdGVGb3JtYXR0ZXIuZm9ybWF0KGRhdGUsIGZvcm1hdCk7XG4gICAgaWYgKGZvcm1hdHRlZFN0cmluZyA9PT0gXCJJbnZhbGlkIGRhdGVcIikge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiSW5wdXQgZGF0ZSBjYW4ndCBiZSBwYXJzZWQgYnkgbmxkYXRlc1wiLCB7IGRhdGVTdHJpbmc6IHNhbml0aXplZElucHV0IH0pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmb3JtYXR0ZWRTdHJpbmcsXG4gICAgICBkYXRlLFxuICAgICAgbW9tZW50OiBtb21lbnQoZGF0ZSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIGRhdGUgc3RyaW5nIHVzaW5nIHRoZSBwbHVnaW4ncyBjb25maWd1cmVkIGRhdGUgZm9ybWF0LlxuICAgKiBcbiAgICogQXV0b21hdGljYWxseSBkZXRlY3RzIGlmIHRoZSBpbnB1dCBjb250YWlucyBhIHRpbWUgY29tcG9uZW50IGFuZCBpbmNsdWRlcyBpdCBpbiB0aGUgb3V0cHV0LlxuICAgKiBVc2VzIHRoZSBmb3JtYXQgZnJvbSBwbHVnaW4gc2V0dGluZ3MgKGRlZmF1bHQ6IFwiWVlZWS1NTS1ERFwiKS5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHN0cmluZyAoZS5nLiwgXCJ0b2RheVwiLCBcInRvbW9ycm93XCIsIFwibmV4dCBNb25kYXkgYXQgM3BtXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3Qgd2l0aCBmb3JtYXR0ZWQgc3RyaW5nIHVzaW5nIGNvbmZpZ3VyZWQgZm9ybWF0XG4gICAqIFxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIElmIHNldHRpbmdzLmZvcm1hdCBpcyBcIllZWVktTU0tRERcIiBhbmQgc2V0dGluZ3MudGltZUZvcm1hdCBpcyBcIkhIOm1tXCJcbiAgICogY29uc3QgcmVzdWx0ID0gcGx1Z2luLnBhcnNlRGF0ZShcInRvbW9ycm93XCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9ybWF0dGVkU3RyaW5nKTsgLy8gXCIyMDI1LTAxLTA2XCJcbiAgICogXG4gICAqIGNvbnN0IHJlc3VsdDIgPSBwbHVnaW4ucGFyc2VEYXRlKFwibmV4dCBNb25kYXkgYXQgM3BtXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMjAyNS0wMS0wNiAxNTowMFwiXG4gICAqIGBgYFxuICAgKi9cbiAgcGFyc2VEYXRlKGRhdGVTdHJpbmc6IHN0cmluZyk6IE5MRFJlc3VsdCB7XG4gICAgLy8gVmFsaWRlciBldCBzYW5pdGl6ZXIgbCdlbnRyw6llIHV0aWxpc2F0ZXVyXG4gICAgY29uc3Qgc2FuaXRpemVkSW5wdXQgPSB2YWxpZGF0ZVVyaVBhcmFtKGRhdGVTdHJpbmcsIDIwMCk7XG4gICAgaWYgKCFzYW5pdGl6ZWRJbnB1dCkge1xuICAgICAgbG9nZ2VyLndhcm4oXCJJbnZhbGlkIGlucHV0IGluIHBhcnNlRGF0ZSgpXCIsIHsgZGF0ZVN0cmluZyB9KTtcbiAgICAgIGNvbnN0IGludmFsaWREYXRlID0gbmV3IERhdGUoTmFOKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZvcm1hdHRlZFN0cmluZzogXCJJbnZhbGlkIGRhdGVcIixcbiAgICAgICAgZGF0ZTogaW52YWxpZERhdGUsXG4gICAgICAgIG1vbWVudDogbW9tZW50KGludmFsaWREYXRlKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgZGUgZGF0ZVxuICAgIGNvbnN0IGRhdGVGb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQodGhpcy5zZXR0aW5ncy5mb3JtYXQpO1xuICAgIGlmICghZGF0ZUZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBkYXRlIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGhpcy5zZXR0aW5ncy5mb3JtYXQsIGVycm9yOiBkYXRlRm9ybWF0VmFsaWRhdGlvbi5lcnJvciB9KTtcbiAgICAgIC8vIFV0aWxpc2VyIGxlIGZvcm1hdCBwYXIgZMOpZmF1dFxuICAgICAgdGhpcy5zZXR0aW5ncy5mb3JtYXQgPSBERUZBVUxUX1NFVFRJTkdTLmZvcm1hdDtcbiAgICB9XG5cbiAgICAvLyAxLiBBc2sgdGhlIHBhcnNlciBpZiB0aW1lIGlzIGRldGVjdGVkXG4gICAgY29uc3QgaGFzVGltZSA9IHRoaXMucGFyc2VyLmhhc1RpbWVDb21wb25lbnQoc2FuaXRpemVkSW5wdXQpO1xuICAgIGxldCBmb3JtYXRUb1VzZSA9IHRoaXMuc2V0dGluZ3MuZm9ybWF0O1xuXG4gICAgLy8gMi4gSWYgdGltZSBpcyBkZXRlY3RlZC4uLlxuICAgIGlmIChoYXNUaW1lKSB7XG4gICAgICBjb25zdCB0aW1lRm9ybWF0ID0gdGhpcy5zZXR0aW5ncy50aW1lRm9ybWF0IHx8IFwiSEg6bW1cIjtcbiAgICAgIFxuICAgICAgLy8gVmFsaWRlciBsZSBmb3JtYXQgZGUgdGVtcHNcbiAgICAgIGNvbnN0IHRpbWVGb3JtYXRWYWxpZGF0aW9uID0gdmFsaWRhdGVNb21lbnRGb3JtYXQodGltZUZvcm1hdCk7XG4gICAgICBpZiAoIXRpbWVGb3JtYXRWYWxpZGF0aW9uLnZhbGlkKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCB0aW1lIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGltZUZvcm1hdCwgZXJyb3I6IHRpbWVGb3JtYXRWYWxpZGF0aW9uLmVycm9yIH0pO1xuICAgICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXRcbiAgICAgICAgZm9ybWF0VG9Vc2UgPSBgJHt0aGlzLnNldHRpbmdzLmZvcm1hdH0gJHtERUZBVUxUX1NFVFRJTkdTLnRpbWVGb3JtYXR9YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRJUDogSGVyZSB3ZSBmb3JtYXQgXCJEYXRlIFRJTUUuXCJcbiAgICAgICAgLy8gQnV0IEJFV0FSRTogaXQgaXMgdGhlIFwiZGF0ZS1zdWdnZXN0LnRzXCIgZmlsZSB0aGF0IHdpbGwgYWRkIHRoZSBbWyBdXS5cbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgdG91Y2ggZGF0ZS1zdWdnZXN0LCBpdCB3aWxsIG1ha2UgW1tEYXRlIFRpbWVdXS5cbiAgICAgICAgLy8gVG8gbWFrZSBbW0RhdGVdXSBUaW1lLCB3ZSBoYXZlIHRvIGJlIGNsZXZlci5cbiAgICAgICAgXG4gICAgICAgIGZvcm1hdFRvVXNlID0gYCR7Zm9ybWF0VG9Vc2V9ICR7dGltZUZvcm1hdH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucGFyc2Uoc2FuaXRpemVkSW5wdXQsIGZvcm1hdFRvVXNlKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlcyBhIG5hdHVyYWwgbGFuZ3VhZ2UgZGF0ZSByYW5nZSBzdHJpbmcuXG4gICAqIFxuICAgKiBTdXBwb3J0cyB2YXJpb3VzIHJhbmdlIGV4cHJlc3Npb25zOlxuICAgKiAtIFdlZWtkYXkgcmFuZ2VzOiBcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiIC8gXCJkZSBsdW5kaSDDoCB2ZW5kcmVkaVwiXG4gICAqIC0gV2VlayByYW5nZXM6IFwibmV4dCB3ZWVrXCIgLyBcInNlbWFpbmUgcHJvY2hhaW5lXCIgKHJldHVybnMgYWxsIGRheXMgb2YgdGhlIHdlZWspXG4gICAqIFxuICAgKiBUaGUgcmVzdWx0IGluY2x1ZGVzIGEgbGlzdCBvZiBhbGwgZGF0ZXMgaW4gdGhlIHJhbmdlIGZvciBlYXN5IGl0ZXJhdGlvbi5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSBkYXRlIHJhbmdlIHN0cmluZ1xuICAgKiBAcmV0dXJucyBOTERSYW5nZVJlc3VsdCBvYmplY3Qgd2l0aCBzdGFydC9lbmQgZGF0ZXMgYW5kIGRhdGUgbGlzdCwgb3IgbnVsbCBpZiBub3QgYSByYW5nZVxuICAgKiBcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByYW5nZSA9IHBsdWdpbi5wYXJzZURhdGVSYW5nZShcImZyb20gTW9uZGF5IHRvIEZyaWRheVwiKTtcbiAgICogaWYgKHJhbmdlKSB7XG4gICAqICAgY29uc29sZS5sb2cocmFuZ2Uuc3RhcnREYXRlKTsgLy8gRGF0ZSBmb3IgTW9uZGF5XG4gICAqICAgY29uc29sZS5sb2cocmFuZ2UuZW5kRGF0ZSk7IC8vIERhdGUgZm9yIEZyaWRheVxuICAgKiAgIGNvbnNvbGUubG9nKHJhbmdlLmRhdGVMaXN0Py5sZW5ndGgpOyAvLyA1XG4gICAqICAgXG4gICAqICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBkYXRlcyBpbiByYW5nZVxuICAgKiAgIHJhbmdlLmRhdGVMaXN0Py5mb3JFYWNoKGRhdGUgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2coZGF0ZS5mb3JtYXQoXCJZWVlZLU1NLUREXCIpKTtcbiAgICogICB9KTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIHBhcnNlRGF0ZVJhbmdlKGRhdGVTdHJpbmc6IHN0cmluZyk6IGltcG9ydChcIi4vcGFyc2VyXCIpLk5MRFJhbmdlUmVzdWx0IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgdGhpcy5yZXNldFBhcnNlcigpO1xuICAgIH1cblxuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGwnZW50csOpZSB1dGlsaXNhdGV1clxuICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdmFsaWRhdGVVcmlQYXJhbShkYXRlU3RyaW5nLCAyMDApO1xuICAgIGlmICghc2FuaXRpemVkSW5wdXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBpbnB1dCBpbiBwYXJzZURhdGVSYW5nZSgpXCIsIHsgZGF0ZVN0cmluZyB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBhcnNlci5nZXRQYXJzZWREYXRlUmFuZ2Uoc2FuaXRpemVkSW5wdXQsIHRoaXMuc2V0dGluZ3Mud2Vla1N0YXJ0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBuYXR1cmFsIGxhbmd1YWdlIHRpbWUgc3RyaW5nIHVzaW5nIHRoZSBwbHVnaW4ncyBjb25maWd1cmVkIHRpbWUgZm9ybWF0LlxuICAgKiBcbiAgICogRXh0cmFjdHMgb25seSB0aGUgdGltZSBjb21wb25lbnQgZnJvbSB0aGUgaW5wdXQgYW5kIGZvcm1hdHMgaXQgYWNjb3JkaW5nIHRvIHNldHRpbmdzLlxuICAgKiBVc2VzIHRoZSB0aW1lIGZvcm1hdCBmcm9tIHBsdWdpbiBzZXR0aW5ncyAoZGVmYXVsdDogXCJISDptbVwiKS5cbiAgICogXG4gICAqIEBwYXJhbSBkYXRlU3RyaW5nIC0gTmF0dXJhbCBsYW5ndWFnZSB0aW1lIHN0cmluZyAoZS5nLiwgXCJub3dcIiwgXCJpbiAyIGhvdXJzXCIsIFwiYXQgM3BtXCIpXG4gICAqIEByZXR1cm5zIE5MRFJlc3VsdCBvYmplY3Qgd2l0aCBmb3JtYXR0ZWQgdGltZSBzdHJpbmdcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gSWYgc2V0dGluZ3MudGltZUZvcm1hdCBpcyBcIkhIOm1tXCJcbiAgICogY29uc3QgcmVzdWx0ID0gcGx1Z2luLnBhcnNlVGltZShcImluIDIgaG91cnNcIik7XG4gICAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb3JtYXR0ZWRTdHJpbmcpOyAvLyBcIjE3OjMwXCIgKGlmIGN1cnJlbnQgdGltZSBpcyAxNTozMClcbiAgICogXG4gICAqIGNvbnN0IHJlc3VsdDIgPSBwbHVnaW4ucGFyc2VUaW1lKFwiYXQgM3BtXCIpO1xuICAgKiBjb25zb2xlLmxvZyhyZXN1bHQyLmZvcm1hdHRlZFN0cmluZyk7IC8vIFwiMTU6MDBcIlxuICAgKiBgYGBcbiAgICovXG4gIHBhcnNlVGltZShkYXRlU3RyaW5nOiBzdHJpbmcpOiBOTERSZXN1bHQge1xuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGwnZW50csOpZSB1dGlsaXNhdGV1clxuICAgIGNvbnN0IHNhbml0aXplZElucHV0ID0gdmFsaWRhdGVVcmlQYXJhbShkYXRlU3RyaW5nLCAyMDApO1xuICAgIGlmICghc2FuaXRpemVkSW5wdXQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCBpbnB1dCBpbiBwYXJzZVRpbWUoKVwiLCB7IGRhdGVTdHJpbmcgfSk7XG4gICAgICBjb25zdCBpbnZhbGlkRGF0ZSA9IG5ldyBEYXRlKE5hTik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb3JtYXR0ZWRTdHJpbmc6IFwiSW52YWxpZCBkYXRlXCIsXG4gICAgICAgIGRhdGU6IGludmFsaWREYXRlLFxuICAgICAgICBtb21lbnQ6IG1vbWVudChpbnZhbGlkRGF0ZSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFZhbGlkZXIgbGUgZm9ybWF0IGRlIHRlbXBzXG4gICAgY29uc3QgdGltZUZvcm1hdFZhbGlkYXRpb24gPSB2YWxpZGF0ZU1vbWVudEZvcm1hdCh0aGlzLnNldHRpbmdzLnRpbWVGb3JtYXQpO1xuICAgIGlmICghdGltZUZvcm1hdFZhbGlkYXRpb24udmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiSW52YWxpZCB0aW1lIGZvcm1hdCBpbiBzZXR0aW5nc1wiLCB7IGZvcm1hdDogdGhpcy5zZXR0aW5ncy50aW1lRm9ybWF0LCBlcnJvcjogdGltZUZvcm1hdFZhbGlkYXRpb24uZXJyb3IgfSk7XG4gICAgICAvLyBVdGlsaXNlciBsZSBmb3JtYXQgcGFyIGTDqWZhdXRcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlKHNhbml0aXplZElucHV0LCBERUZBVUxUX1NFVFRJTkdTLnRpbWVGb3JtYXQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnBhcnNlKHNhbml0aXplZElucHV0LCB0aGlzLnNldHRpbmdzLnRpbWVGb3JtYXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHRleHQgc3RyaW5nIGNvbnRhaW5zIGEgdGltZSBjb21wb25lbnQuXG4gICAqIFxuICAgKiBVc2VmdWwgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgdG8gaW5jbHVkZSB0aW1lIGZvcm1hdHRpbmcgaW4gdGhlIG91dHB1dC5cbiAgICogRGV0ZWN0cyB2YXJpb3VzIHRpbWUgZXhwcmVzc2lvbnMgaW4gYWxsIGVuYWJsZWQgbGFuZ3VhZ2VzLlxuICAgKiBcbiAgICogQHBhcmFtIHRleHQgLSBUZXh0IHN0cmluZyB0byBjaGVjayBmb3IgdGltZSBjb21wb25lbnRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiBhIHRpbWUgY29tcG9uZW50IGlzIGRldGVjdGVkLCBmYWxzZSBvdGhlcndpc2VcbiAgICogXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJuZXh0IE1vbmRheSBhdCAzcG1cIik7IC8vIHRydWVcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJ0b21vcnJvd1wiKTsgLy8gZmFsc2VcbiAgICogcGx1Z2luLmhhc1RpbWVDb21wb25lbnQoXCJpbiAyIGhvdXJzXCIpOyAvLyB0cnVlXG4gICAqIHBsdWdpbi5oYXNUaW1lQ29tcG9uZW50KFwiZGFucyAyIGhldXJlc1wiKTsgLy8gdHJ1ZSAoRnJlbmNoKVxuICAgKiBgYGBcbiAgICovXG4gIGhhc1RpbWVDb21wb25lbnQodGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLnBhcnNlcikge1xuICAgICAgdGhpcy5yZXNldFBhcnNlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuaGFzVGltZUNvbXBvbmVudCh0ZXh0KTtcbiAgfVxuXG4gIGFzeW5jIGFjdGlvbkhhbmRsZXIocGFyYW1zOiBPYnNpZGlhblByb3RvY29sRGF0YSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgd29ya3NwYWNlIH0gPSB0aGlzLmFwcDtcblxuICAgIC8vIFZhbGlkZXIgZXQgc2FuaXRpemVyIGxlcyBwYXJhbcOodHJlcyBVUkkgcG91ciDDqXZpdGVyIGxlcyBpbmplY3Rpb25zXG4gICAgY29uc3QgZGF5ID0gdmFsaWRhdGVVcmlQYXJhbShwYXJhbXMuZGF5LCAxMDApO1xuICAgIGlmICghZGF5KSB7XG4gICAgICBsb2dnZXIud2FybihcIkludmFsaWQgZGF5IHBhcmFtZXRlciBpbiBVUklcIiwgeyBkYXk6IHBhcmFtcy5kYXkgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGF0ZSA9IHRoaXMucGFyc2VEYXRlKGRheSk7XG4gICAgY29uc3QgbmV3UGFuZSA9IHBhcnNlVHJ1dGh5KHBhcmFtcy5uZXdQYW5lIHx8IFwieWVzXCIpO1xuXG4gICAgaWYgKGRhdGUubW9tZW50LmlzVmFsaWQoKSkge1xuICAgICAgY29uc3QgZGFpbHlOb3RlID0gYXdhaXQgZ2V0T3JDcmVhdGVEYWlseU5vdGUoZGF0ZS5tb21lbnQpO1xuICAgICAgYXdhaXQgd29ya3NwYWNlLmdldExlYWYobmV3UGFuZSkub3BlbkZpbGUoZGFpbHlOb3RlKTtcbiAgICB9XG4gIH1cbn0iXSwibmFtZXMiOlsicmVxdWlyZSQkMCIsInRoaXMiLCJkaWN0IiwiZW4iLCJqYSIsImZyIiwicHQiLCJkZSIsIm5sIiwiZXMiLCJpdCIsInJ1IiwidWsiLCJ6aCIsImtvIiwibm9ybWFsaXplUGF0aCIsImdldERhaWx5Tm90ZSIsImdldEFsbERhaWx5Tm90ZXMiLCJjcmVhdGVEYWlseU5vdGUiLCJleHRyYWN0VGVybXMiLCJtYXRjaEFueVBhdHRlcm4iLCJPUkRJTkFMX1dPUkRfRElDVElPTkFSWSIsIk9SRElOQUxfTlVNQkVSX1BBVFRFUk4iLCJwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuIiwiTWFya2Rvd25WaWV3IiwiTW9kYWwiLCJTZXR0aW5nIiwiUGx1Z2luU2V0dGluZ1RhYiIsIldFRUtEQVlfRElDVElPTkFSWSIsIkZVTExfTU9OVEhfTkFNRV9ESUNUSU9OQVJZIiwiTU9OVEhfRElDVElPTkFSWSIsIklOVEVHRVJfV09SRF9ESUNUSU9OQVJZIiwiVElNRV9VTklUX0RJQ1RJT05BUlkiLCJOVU1CRVJfUEFUVEVSTiIsInBhcnNlTnVtYmVyUGF0dGVybiIsIllFQVJfUEFUVEVSTiIsInBhcnNlWWVhciIsIlNJTkdMRV9USU1FX1VOSVRfUEFUVEVSTiIsIlNJTkdMRV9USU1FX1VOSVRfUkVHRVgiLCJTSU5HTEVfVElNRV9VTklUX05PX0FCQlJfUEFUVEVSTiIsIlRJTUVfVU5JVFNfUEFUVEVSTiIsIlRJTUVfVU5JVFNfTk9fQUJCUl9QQVRURVJOIiwicGFyc2VEdXJhdGlvbiIsImNvbGxlY3REYXRlVGltZUZyYWdtZW50IiwiUEFUVEVSTl9XSVRIX1BSRUZJWCIsIkVOVGltZVVuaXRXaXRoaW5Gb3JtYXRQYXJzZXIiLCJQQVRURVJOIiwiREFURV9HUk9VUCIsIkRBVEVfVE9fR1JPVVAiLCJNT05USF9OQU1FX0dST1VQIiwiWUVBUl9HUk9VUCIsIkVOTW9udGhOYW1lTGl0dGxlRW5kaWFuUGFyc2VyIiwiRU5Nb250aE5hbWVNaWRkbGVFbmRpYW5QYXJzZXIiLCJQUkVGSVhfR1JPVVAiLCJFTk1vbnRoTmFtZVBhcnNlciIsIllFQVJfTlVNQkVSX0dST1VQIiwiTU9OVEhfTlVNQkVSX0dST1VQIiwiREFURV9OVU1CRVJfR1JPVVAiLCJNT05USF9HUk9VUCIsIkVOU2xhc2hNb250aEZvcm1hdFBhcnNlciIsIkhPVVJfR1JPVVAiLCJNSU5VVEVfR1JPVVAiLCJTRUNPTkRfR1JPVVAiLCJBTV9QTV9IT1VSX0dST1VQIiwiRU5UaW1lRXhwcmVzc2lvblBhcnNlciIsIlNUUklDVF9QQVRURVJOIiwiRU5UaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciIsIkdST1VQX05VTV9USU1FVU5JVFMiLCJFTlRpbWVVbml0TGF0ZXJGb3JtYXRQYXJzZXIiLCJFTk1lcmdlRGF0ZVJhbmdlUmVmaW5lciIsIkVOTWVyZ2VEYXRlVGltZVJlZmluZXIiLCJkYXRlcy5pbXBseVNpbWlsYXJEYXRlIiwicmVmZXJlbmNlcy5ub3ciLCJyZWZlcmVuY2VzLnRvZGF5IiwicmVmZXJlbmNlcy55ZXN0ZXJkYXkiLCJyZWZlcmVuY2VzLnRvbW9ycm93IiwicmVmZXJlbmNlcy50b25pZ2h0IiwicmVmZXJlbmNlcy50aGVEYXlBZnRlciIsImNhc3VhbFJlZmVyZW5jZXMuYWZ0ZXJub29uIiwiY2FzdWFsUmVmZXJlbmNlcy5ldmVuaW5nIiwiY2FzdWFsUmVmZXJlbmNlcy5taWRuaWdodCIsImNhc3VhbFJlZmVyZW5jZXMubW9ybmluZyIsImNhc3VhbFJlZmVyZW5jZXMubm9vbiIsIldFRUtEQVlfR1JPVVAiLCJQT1NURklYX0dST1VQIiwiTU9ESUZJRVJfV09SRF9HUk9VUCIsIlJFTEFUSVZFX1dPUkRfR1JPVVAiLCJQQVRURVJOX05PX0FCQlIiLCJFTlRpbWVVbml0Q2FzdWFsUmVsYXRpdmVGb3JtYXRQYXJzZXIiLCJoYXNJbXBsaWVkRWFybGllclJlZmVyZW5jZURhdGUiLCJoYXNJbXBsaWVkTGF0ZXJSZWZlcmVuY2VEYXRlIiwiY2FzdWFsIiwic3RyaWN0IiwiR0IiLCJwYXJzZSIsInBhcnNlRGF0ZSIsIlNVRkZJWF9HUk9VUCIsIkZJUlNUX1JFR19QQVRURVJOIiwiU0VDT05EX1JFR19QQVRURVJOIiwiVElNRV9HUk9VUCIsImNyZWF0ZUNhc3VhbENvbmZpZ3VyYXRpb24iLCJjcmVhdGVDb25maWd1cmF0aW9uIiwiREVUaW1lVW5pdFJlbGF0aXZlRm9ybWF0UGFyc2VyIiwiRlJUaW1lVW5pdEFnb0Zvcm1hdFBhcnNlciIsIkZSVGltZVVuaXRSZWxhdGl2ZUZvcm1hdFBhcnNlciIsIk5VTUJFUiIsIldFRUtEQVlfT0ZGU0VUIiwiREFZX0dST1VQIiwiemhTdHJpbmdUb051bWJlciIsInpoU3RyaW5nVG9ZZWFyIiwiTlVNQkVSX0dST1VQIiwiVU5JVF9HUk9VUCIsIkRBWV9HUk9VUF8xIiwiWkhfQU1fUE1fSE9VUl9HUk9VUF8xIiwiWkhfQU1fUE1fSE9VUl9HUk9VUF8yIiwiREFZX0dST1VQXzMiLCJaSF9BTV9QTV9IT1VSX0dST1VQXzMiLCJOT1dfR1JPVVAiLCJUSU1FX0dST1VQXzEiLCJUSU1FX0dST1VQXzIiLCJUSU1FX0dST1VQXzMiLCJSRUdFWF9QQVJUUyIsInllYXIiLCJBYnN0cmFjdFBhcnNlcldpdGhMZWZ0Qm91bmRhcnlDaGVja2luZyIsIkFic3RyYWN0UGFyc2VyV2l0aExlZnRSaWdodEJvdW5kYXJ5Q2hlY2tpbmciLCJyZWZlcmVuY2VzLnRoZURheUJlZm9yZSIsInJlZmVyZW5jZXMuZXZlbmluZyIsInJlZmVyZW5jZXMubW9ybmluZyIsInJlZmVyZW5jZXMubm9vbiIsInJlZmVyZW5jZXMubGFzdE5pZ2h0IiwicmVmZXJlbmNlcy55ZXN0ZXJkYXlFdmVuaW5nIiwicmVmZXJlbmNlcy5taWRuaWdodCIsIkVOQ2FzdWFsRGF0ZVBhcnNlciIsIkVOQ2FzdWFsVGltZVBhcnNlciIsIkVOV2Vla2RheVBhcnNlciIsIlRJTUVfVU5JVF9OT19BQkJSX0RJQ1RJT05BUlkiLCJlbi5zdHJpY3QiLCJlbi5jYXN1YWwiLCJjaHJvbm8uZW4iLCJFZGl0b3JTdWdnZXN0IiwiQ0xF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QyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDMUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUNoRCxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQzdDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDL0MsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUMvQyxDQUFDLEVBQUUsS0FBSyxLQUFLLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQzs7QUM1QmxCLFNBQVMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtBQUNyRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JELElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUNNLFNBQVMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtBQUNyRCxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDcEQsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFF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QUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUc7QUFDZCxJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHO0FBQ2IsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksR0FBRyxFQUFFLENBQUMsR0FBRztBQUNiLElBQUksSUFBSSxFQUFFLEdBQUc7QUFDYixJQUFJLEdBQUcsRUFBRSxHQUFHO0FBQ1osSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNaLElBQUksR0FBRyxFQUFFLEdBQUc7QUFDWixJQUFJLElBQUksRUFBRSxHQUFHO0FBQ2IsSUFBSSxLQUFLLEVBQUUsR0FBRztB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QUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEIsUUFBUSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLFFBQVEsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkIsUUFBUSxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsS0FBSztBQUNMLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEIsUUFBUSxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pELFFBQVEsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUIsS0FBSztBQUNMLElBQUksSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFO0FBQzVCLFFBQVEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNuRCxRQUFRLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3JELFFBQVEsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzNELFFBQVEsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLEVBQUU7QUFDbkMsWUFBWSxRQUFRLENBQUMsS0FBSyxHQUFHLFFBQVEsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ2xELFlBQVksUUFBUSxDQUFDLEtBQUssSUFB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UUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxRQUFRLENBQUM7QUFDMUIsWUFBWSxLQUFLLFNBQVM7QUFDMUIsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssWUFBWTtBQUM3QixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxPQUFPO0FBQ3hCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLE9BQU87QUFDeEIsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssYUFBYTtBQUM5QixnQkFBZ0IsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMvQyxvQkFBb0IsU0FBUyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakUsaUJBQWlCO0FBQ2pCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsU0FBUztBQUNULFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsS0FBSztBQUNMOztBQzVEQSxNQUFNaEIsU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsOEVBQThFLENBQUM7QUFDM0csSUFBSSxDQUFDLHVFQUF1RSxDQUFDO0FBQzdFLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNQyxZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU1vRCxZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ04sTUFBTSxrQkFBa0IsU0FBUyxzQ0FBc0MsQ0FBQztBQUN2RixJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDMUIsUUFBUSxPQUFPckQsU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsRUFBRSxDQUFDO0FBQ3pFLFFBQVEsTUFBTSxXQUFXLEdBQUcsQ0FBQyxLQUFLLENBQUNDLFlBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQztBQUNwRSxRQUFRLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBSyxDQUFDb0QsWUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBQ3BFLFFBQVEsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDMUQsUUFBUSxRQUFRLFdBQVc7QUFDM0IsWUFBWSxLQUFLLE9BQU87QUFDeEIsZ0JBQWdCLFNBQVMsR0FBRzNCLEdBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLE9BQU87QUFDeEIsZ0JBQWdCLFNBQVMsR0FBR0MsS0FBZ0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDaEUsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLFFBQVE7QUFDekIsZ0JBQWdCLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakUsZ0JBQWdCLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3hELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxZQUFZLENBQUM7QUFDOUIsWUFBWSxLQUFLLGFBQWE7QUFDOUIsZ0JBQWdCLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakUsZ0JBQWdCLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3hELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxTQUFTO0FBQzFCLGdCQUFnQixVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEUsZ0JBQWdCLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3hELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxZQUFZO0FBQzdCLGdCQUFnQixVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEUsZ0JBQWdCLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3hELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVk7QUFDWixnQkFBZ0IsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7QUFDekQsb0JBQW9CLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtBQUNuRCx3QkFBd0IsVUFBVSxHQUFHLFdBQVcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFFLHFCQUFxQjtBQUNyQixvQkFBb0IsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzdELG9CQUFvQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxpQkFBaUI7QUFDakIsZ0JBQWdCLE1BQU07QUFDdEIsU0FBUztBQUNULFFBQVEsSUFBSSxXQUFXLEVBQUU7QUFDekIsWUFBWSxTQUFTLEdBQUcsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3pGLFNBQVM7QUFDVCxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDs7QUN6REEsTUFBTTNCLFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxjQUFjO0FBQ3pDLElBQUksZUFBZTtBQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDO0FBQ3JCLElBQUksQ0FBQyx1RUFBdUUsQ0FBQztBQUM3RSxJQUFJLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQ2hCLGtCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLElBQUksQ0FBQyxrQkFBa0IsRUFBRUssY0FBWSxDQUFDLGdCQUFnQixDQUFDO0FBQ3ZELElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNWSxZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU1DLGVBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTUMsa0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU1DLFlBQVUsR0FBRyxDQUFDLENBQUM7QUFDTixNQUFNLDZCQUE2QixTQUFTLHNDQUFzQyxDQUFDO0FBQ2xHLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBT0osU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxNQUFNLEtBQUssR0FBR2hCLGtCQUFnQixDQUFDLEtBQUssQ0FBQ21CLGtCQUFnQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUM5RSxRQUFRLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUNGLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDaEQsUUFBUSxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUU7QUFDdEIsWUFBWSxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDQSxZQUFVLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDakUsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUMsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEMsUUFBUSxJQUFJLEtBQUssQ0FBQ0csWUFBVSxDQUFDLEVBQUU7QUFDL0IsWUFBWSxNQUFNLFVBQVUsR0FBR2QsV0FBUyxDQUFDLEtBQUssQ0FBQ2MsWUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1RCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNwRCxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0UsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsU0FBUztBQUNULFFBQVEsSUFBSSxLQUFLLENBQUNGLGVBQWEsQ0FBQyxFQUFFO0FBQ2xDLFlBQVksTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQ0EsZUFBYSxDQUFDLENBQUMsQ0FBQztBQUMzRCxZQUFZLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM5QyxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM5QyxTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0w7O0FDeENlLE1BQU0seUJBQXlCLFNBQVMsc0NBQXNDLENBQUM7QUFDOUYsSUFBSSxXQUFXLEdBQUc7QUFDbEIsUUFBUSxLQUFLLEVBQUUsQ0FBQztBQUNoQixLQUFLO0FBQ0wsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsK0dBQStHLENBQUM7QUFDM0ksWUFBWSxDQUFDLENBQUMsRUFBRWYsZ0JBQWMsQ0FBQyxFQUFFLENBQUM7QUFDbEMsWUFBWSxDQUFDLGdHQUFnRyxDQUFDO0FBQzlHLFlBQVksQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDRCxzQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVFLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHRSxvQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEUsUUFBUSxNQUFNLElBQUksR0FBR0Ysc0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDbEUsUUFBUSxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDM0IsUUFBUSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlCLFFBQVEsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEQsUUFBUSxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUN2QixZQUFZLE9BQU87QUFDbkIsU0FBUztBQUNULFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMzRixZQUFZLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkQsU0FBUztBQUNULFFBQVEsT0FBTyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzNGLEtBQUs7QUFDTDs7QUMzQmUsTUFBTSw0QkFBNEIsU0FBUyxzQ0FBc0MsQ0FBQztBQUNqRyxJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyx1QkFBdUIsRUFBRVEsb0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekYsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFNBQVMsR0FBR0UsZUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELFFBQVEsT0FBTyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzNGLEtBQUs7QUFDTDs7QUNPTyxNQUFNaUQsUUFBTSxHQUFHLElBQUksTUFBTSxDQUFDUywyQkFBeUIsRUFBRSxDQUFDLENBQUM7QUFDdkQsTUFBTVIsUUFBTSxHQUFHLElBQUksTUFBTSxDQUFDUyxxQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3JELFNBQVNQLE9BQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUN6QyxJQUFJLE9BQU9ILFFBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBQ00sU0FBU0ksV0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQzdDLElBQUksT0FBT0osUUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFDTSxTQUFTUywyQkFBeUIsQ0FBQyxZQUFZLEdBQUcsSUFBSSxFQUFFO0FBQy9ELElBQUksTUFBTSxNQUFNLEdBQUdDLHFCQUFtQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztBQUM1RCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDckQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJQyx5QkFBOEIsRUFBRSxDQUFDLENBQUM7QUFDakUsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBQ00sU0FBU0QscUJBQW1CLENBQUMsVUFBVSxHQUFHLElBQUksRUFBRSxZQUFZLEdBQUcsSUFBSSxFQUFFO0FBQzVFLElBQUksT0FBTywwQkFBMEIsQ0FBQztBQUN0QyxRQUFRLE9BQU8sRUFBRTtBQUNqQixZQUFZLElBQUksZUFBZSxFQUFFO0FBQ2pDLFlBQVksSUFBSSxxQkFBcUIsQ0FBQyxZQUFZLENBQUM7QUFDbkQsWUFBWSxJQUFJLHNCQUFzQixFQUFFO0FBQ3hDLFlBQVksSUFBSSw4QkFBOEIsRUFBRTtBQUNoRCxZQUFZLElBQUksNkJBQTZCLEVBQUU7QUFDL0MsWUFBWSxJQUFJLGVBQWUsRUFBRTtBQUNqQyxZQUFZLElBQUksNEJBQTRCLEVBQUU7QUFDOUMsU0FBUztBQUNULFFBQVEsUUFBUSxFQUFFLENBQUMsSUFBSSx1QkFBdUIsRUFBRSxFQUFFLElBQUksc0JBQXNCLEVBQUUsQ0FBQztBQUMvRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDbkI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzFDZSxNQUFNLGtCQUFrQixTQUFTLHNDQUFzQyxDQUFDO0FBQ3ZGLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUMxQixRQUFRLE9BQU8sd0VBQXdFLENBQUM7QUFDeEYsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzNDLFFBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pELFFBQVEsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDNUQsUUFBUSxRQUFRLFNBQVM7QUFDekIsWUFBWSxLQUFLLFlBQVk7QUFDN0IsZ0JBQWdCLE9BQU83QixHQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pELFlBQVksS0FBSyxhQUFhO0FBQzlCLGdCQUFnQixPQUFPQyxLQUFnQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzRCxZQUFZLEtBQUssTUFBTTtBQUN2QixnQkFBZ0IsT0FBT0MsU0FBb0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0QsWUFBWSxLQUFLLFFBQVE7QUFDekIsZ0JBQWdCLE9BQU9DLFFBQW1CLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlELFlBQVk7QUFDWixnQkFBZ0IsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFO0FBQ3JELG9CQUFvQixpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN0Qsb0JBQW9CLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELG9CQUFvQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0QsaUJBQWlCO0FBQ2pCLHFCQUFxQixJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUU7QUFDekQsb0JBQW9CLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZFLG9CQUFvQixXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRSxvQkFBb0IsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzlELG9CQUFvQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxpQkFBaUI7QUFDakIsU0FBUztBQUNULFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsS0FBSztBQUNMOztBQ2xDZSxNQUFNLGtCQUFrQixTQUFTLHNDQUFzQyxDQUFDO0FBQ3ZGLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUMxQixRQUFRLE9BQU8sa0VBQWtFLENBQUM7QUFDbEYsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkQsUUFBUSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztBQUM1RCxRQUFRLFFBQVEsV0FBVztBQUMzQixZQUFZLEtBQUssWUFBWSxDQUFDO0FBQzlCLFlBQVksS0FBSyxPQUFPO0FBQ3hCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssTUFBTTtBQUN2QixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLE9BQU87QUFDeEIsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxRQUFRO0FBQ3pCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssVUFBVTtBQUMzQixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixTQUFTO0FBQ1QsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUN6QixLQUFLO0FBQ0w7O0FDckNlLE1BQU0sc0JBQXNCLFNBQVMsNEJBQTRCLENBQUM7QUFDakYsSUFBSSxhQUFhLEdBQUc7QUFDcEIsUUFBUSxPQUFPLG1CQUFtQixDQUFDO0FBQ25DLEtBQUs7QUFDTCxJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sc0NBQXNDLENBQUM7QUFDdEQsS0FBSztBQUNMLElBQUksNEJBQTRCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqRCxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRTtBQUM3QyxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLE9BQU8sS0FBSyxDQUFDLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRSxLQUFLO0FBQ0w7O0FDYmUsTUFBTSxzQkFBc0IsU0FBUyw0QkFBNEIsQ0FBQztBQUNqRixJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sSUFBSSxNQUFNLENBQUMsbUNBQW1DLENBQUMsQ0FBQztBQUMvRCxLQUFLO0FBQ0w7O0FDSmUsTUFBTSx1QkFBdUIsU0FBUyw2QkFBNkIsQ0FBQztBQUNuRixJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8scUJBQXFCLENBQUM7QUFDckMsS0FBSztBQUNMOztBQ0pPLE1BQU0vQyxvQkFBa0IsR0FBRztBQUNsQyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNqQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLENBQUMsQ0FBQztBQUNLLE1BQU1FLGtCQUFnQixHQUFHO0FBQ2hDLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ2xCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLFNBQVMsRUFBRSxFQUFFO0FBQ2pCLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDYixJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsSUFBSSxVQUFVLEVBQUUsRUFBRTtBQUNsQixJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ2IsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxVQUFVLEVBQUUsRUFBRTtBQUNsQixJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ2IsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLENBQUMsQ0FBQztBQUNLLE1BQU1DLHlCQUF1QixHQUFHO0FBQ3ZDLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDYixJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsSUFBSSxPQUFPLEVBQUUsRUFBRTtBQUNmLElBQUksUUFBUSxFQUFFLEVBQUU7QUFDaEIsQ0FBQyxDQUFDO0FBQ0ssTUFBTUMsc0JBQW9CLEdBQUc7QUFDcEMsSUFBSSxLQUFLLEVBQUUsUUFBUTtBQUNuQixJQUFJLFNBQVMsRUFBRSxRQUFRO0FBQ3ZCLElBQUksVUFBVSxFQUFFLFFBQVE7QUFDeEIsSUFBSSxLQUFLLEVBQUUsUUFBUTtBQUNuQixJQUFJLE1BQU0sRUFBRSxRQUFRO0FBQ3BCLElBQUksUUFBUSxFQUFFLFFBQVE7QUFDdEIsSUFBSSxTQUFTLEVBQUUsUUFBUTtBQUN2QixJQUFJLEdBQUcsRUFBRSxNQUFNO0FBQ2YsSUFBSSxJQUFJLEVBQUUsTUFBTTtBQUNoQixJQUFJLEtBQUssRUFBRSxNQUFNO0FBQ2pCLElBQUksT0FBTyxFQUFFLE1BQU07QUFDbkIsSUFBSSxRQUFRLEVBQUUsTUFBTTtBQUNwQixJQUFJLE1BQU0sRUFBRSxLQUFLO0FBQ2pCLElBQUksT0FBTyxFQUFFLEtBQUs7QUFDbEIsSUFBSSxTQUFTLEVBQUUsTUFBTTtBQUNyQixJQUFJLFVBQVUsRUFBRSxNQUFNO0FBQ3RCLElBQUksTUFBTSxFQUFFLE9BQU87QUFDbkIsSUFBSSxXQUFXLEVBQUUsU0FBUztBQUMxQixJQUFJLFlBQVksRUFBRSxTQUFTO0FBQzNCLElBQUksS0FBSyxFQUFFLE1BQU07QUFDakIsSUFBSSxPQUFPLEVBQUUsTUFBTTtBQUNuQixJQUFJLFFBQVEsRUFBRSxNQUFNO0FBQ3BCLENBQUMsQ0FBQztBQUNLLE1BQU1DLGdCQUFjLEdBQUcsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDRix5QkFBdUIsQ0FBQyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7QUFDekgsU0FBU0csb0JBQWtCLENBQUMsS0FBSyxFQUFFO0FBQzFDLElBQUksTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3BDLElBQUksSUFBSUgseUJBQXVCLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3BELFFBQVEsT0FBT0EseUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUMsS0FBSztBQUNMLFNBQVMsSUFBSSxHQUFHLEtBQUssS0FBSyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7QUFDNUMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0wsU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDckMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0wsU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDbEMsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQixLQUFLO0FBQ0wsSUFBSSxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBQ00sTUFBTVQsd0JBQXNCLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3ZELFNBQVNDLDJCQUF5QixDQUFDLEtBQUssRUFBRTtBQUNqRCxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsQyxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN0QyxJQUFJLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFDTSxNQUFNWSxjQUFZLEdBQUcsQ0FBQyxzRkFBc0YsQ0FBQyxDQUFDO0FBQzlHLFNBQVNDLFdBQVMsQ0FBQyxLQUFLLEVBQUU7QUFDakMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDM0IsUUFBUSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekMsUUFBUSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLEtBQUs7QUFDTCxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQy9DLFFBQVEsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLFFBQVEsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0IsS0FBSztBQUNMLElBQUksSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3JDLElBQUksSUFBSSxVQUFVLEdBQUcsR0FBRyxFQUFFO0FBQzFCLFFBQVEsSUFBSSxVQUFVLEdBQUcsRUFBRSxFQUFFO0FBQzdCLFlBQVksVUFBVSxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDM0MsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLFVBQVUsR0FBRyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQzNDLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDO0FBQ0QsTUFBTUMsMEJBQXdCLEdBQUcsQ0FBQyxDQUFDLEVBQUVKLGdCQUFjLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQ0Qsc0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNqSCxNQUFNTSx3QkFBc0IsR0FBRyxJQUFJLE1BQU0sQ0FBQ0QsMEJBQXdCLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEUsTUFBTUcsb0JBQWtCLEdBQUcsdUJBQXVCLENBQUMsRUFBRSxFQUFFSCwwQkFBd0IsQ0FBQyxDQUFDO0FBQ2pGLFNBQVNLLGVBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDNUMsSUFBSSxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUM7QUFDckMsSUFBSSxJQUFJLEtBQUssR0FBR0osd0JBQXNCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzNELElBQUksT0FBTyxLQUFLLEVBQUU7QUFDbEIsUUFBUUsseUJBQXVCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xELFFBQVEsYUFBYSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pFLFFBQVEsS0FBSyxHQUFHTCx3QkFBc0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0QsS0FBSztBQUNMLElBQUksT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUNELFNBQVNLLHlCQUF1QixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUU7QUFDbkQsSUFBSSxNQUFNLEdBQUcsR0FBR1Qsb0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxNQUFNLElBQUksR0FBR0Ysc0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFCOztBQzNKQSxNQUFNYyxTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsMEJBQTBCO0FBQ3JELElBQUksaUJBQWlCO0FBQ3JCLElBQUksQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDbEIsb0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsSUFBSSwwQkFBMEI7QUFDOUIsSUFBSSxpQ0FBaUM7QUFDckMsSUFBSSxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDMUIsTUFBTXVELGVBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTUMsZUFBYSxHQUFHLENBQUMsQ0FBQztBQUNULE1BQU0sZUFBZSxTQUFTLHNDQUFzQyxDQUFDO0FBQ3BGLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBT3RDLFNBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQ3FDLGVBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzdELFFBQVEsTUFBTSxPQUFPLEdBQUd2RCxvQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0RCxRQUFRLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtBQUNuQyxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQ3dELGVBQWEsQ0FBQyxDQUFDO0FBQzFDLFFBQVEsTUFBTSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDOUIsUUFBUSxNQUFNLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFFBQVEsSUFBSSxNQUFNLElBQUksU0FBUyxFQUFFO0FBQ2pDLFlBQVksUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUM5QixTQUFTO0FBQ1QsYUFBYSxJQUFJLE1BQU0sSUFBSSxVQUFVLEVBQUU7QUFDdkMsWUFBWSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQzlCLFNBQVM7QUFDVCxRQUFRLE9BQU8sZ0NBQWdDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdEYsS0FBSztBQUNMOztBQ2pDQSxNQUFNYSxtQkFBaUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxXQUFXO0FBQ2hELElBQUksbUJBQW1CO0FBQ3ZCLElBQUksb0JBQW9CO0FBQ3hCLElBQUkseUJBQXlCO0FBQzdCLElBQUkseUJBQXlCO0FBQzdCLElBQUksc0NBQXNDO0FBQzFDLElBQUksV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU1DLG9CQUFrQixHQUFHLElBQUksTUFBTSxDQUFDLHFDQUFxQztBQUMzRSxJQUFJLG9CQUFvQjtBQUN4QixJQUFJLHlCQUF5QjtBQUM3QixJQUFJLHlCQUF5QjtBQUM3QixJQUFJLHNDQUFzQztBQUMxQyxJQUFJLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNdEMsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNQyxjQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU1DLGNBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTUMsa0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQ1osTUFBTSw4QkFBOEIsQ0FBQztBQUNwRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDckIsUUFBUSxPQUFPa0MsbUJBQWlCLENBQUM7QUFDakMsS0FBSztBQUNMLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDNUIsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdkgsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQzFDLFlBQVksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzNDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxDQUFDLEtBQUssR0FBRyw4QkFBOEIsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hHLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7QUFDM0IsWUFBWSxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDM0MsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRixRQUFRLE1BQU0sV0FBVyxHQUFHQyxvQkFBa0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDbkUsUUFBUSxJQUFJLFdBQVcsRUFBRTtBQUN6QixZQUFZLE1BQU0sQ0FBQyxHQUFHLEdBQUcsOEJBQThCLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNoSCxZQUFZLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRTtBQUM1QixnQkFBZ0IsTUFBTSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTCxJQUFJLE9BQU8sb0JBQW9CLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxFQUFFO0FBQzdELFFBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFFBQVEsSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUN0QyxZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsSUFBSSxLQUFLLENBQUNDLGNBQVksQ0FBQyxJQUFJLElBQUksRUFBRTtBQUN6QyxZQUFZLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDQSxjQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ25ELFNBQVM7QUFDVCxRQUFRLElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFO0FBQ3ZDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO0FBQ3hCLFlBQVksUUFBUSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDbkMsU0FBUztBQUNULFFBQVEsSUFBSSxLQUFLLENBQUNFLGtCQUFnQixDQUFDLElBQUksSUFBSSxFQUFFO0FBQzdDLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUN6QixnQkFBZ0IsT0FBTyxJQUFJLENBQUM7QUFDNUIsWUFBWSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUNBLGtCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbEUsWUFBWSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDN0IsZ0JBQWdCLFFBQVEsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ3ZDLGdCQUFnQixJQUFJLElBQUksSUFBSSxFQUFFLEVBQUU7QUFDaEMsb0JBQW9CLElBQUksR0FBRyxDQUFDLENBQUM7QUFDN0IsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixZQUFZLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUM3QixnQkFBZ0IsUUFBUSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7QUFDdkMsZ0JBQWdCLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTtBQUNoQyxvQkFBb0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUMvQixpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEQsUUFBUSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3RELFFBQVEsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFO0FBQy9CLFlBQVksb0JBQW9CLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5RCxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFO0FBQzNCLGdCQUFnQixvQkFBb0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRSxhQUFhO0FBQ2IsaUJBQWlCO0FBQ2pCLGdCQUFnQixvQkFBb0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNwRSxhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsSUFBSSxLQUFLLENBQUNELGNBQVksQ0FBQyxJQUFJLElBQUksRUFBRTtBQUN6QyxZQUFZLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUNBLGNBQVksQ0FBQyxDQUFDLENBQUM7QUFDekQsWUFBWSxJQUFJLE1BQU0sSUFBSSxFQUFFO0FBQzVCLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixZQUFZLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDMUQsU0FBUztBQUNULFFBQVEsT0FBTyxvQkFBb0IsQ0FBQztBQUNwQyxLQUFLO0FBQ0w7O0FDekZBLE1BQU1oQixTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsY0FBYztBQUN6QyxJQUFJLENBQUMsQ0FBQyxFQUFFeEIsd0JBQXNCLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLElBQUksQ0FBQyx3Q0FBd0MsRUFBRUEsd0JBQXNCLENBQUMsR0FBRyxDQUFDO0FBQzFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztBQUM3QixJQUFJLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQ1Esa0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFSyxjQUFZLENBQUMsZ0JBQWdCLENBQUM7QUFDdkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU1ZLFlBQVUsR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTUMsZUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNQyxrQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTUMsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNOLE1BQU0sNkJBQTZCLFNBQVMsc0NBQXNDLENBQUM7QUFDbEcsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPSixTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLE1BQU0sS0FBSyxHQUFHaEIsa0JBQWdCLENBQUMsS0FBSyxDQUFDbUIsa0JBQWdCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLFFBQVEsTUFBTSxHQUFHLEdBQUcxQiwyQkFBeUIsQ0FBQyxLQUFLLENBQUN3QixZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLFFBQVEsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFO0FBQ3RCLFlBQVksS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQ0EsWUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2pFLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxLQUFLLENBQUNHLFlBQVUsQ0FBQyxFQUFFO0FBQy9CLFlBQVksTUFBTSxVQUFVLEdBQUdkLFdBQVMsQ0FBQyxLQUFLLENBQUNjLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDcEQsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNFLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxDQUFDRixlQUFhLENBQUMsRUFBRTtBQUNsQyxZQUFZLE1BQU0sT0FBTyxHQUFHekIsMkJBQXlCLENBQUMsS0FBSyxDQUFDeUIsZUFBYSxDQUFDLENBQUMsQ0FBQztBQUM1RSxZQUFZLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM5QyxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM5QyxTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0w7O0FDMUNlLE1BQU11RCwyQkFBeUIsU0FBUyxzQ0FBc0MsQ0FBQztBQUM5RixJQUFJLFdBQVcsR0FBRztBQUNsQixRQUFRLEtBQUssRUFBRSxDQUFDO0FBQ2hCLEtBQUs7QUFDTCxJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUvRCxvQkFBa0IsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqRixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHRSxlQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsUUFBUSxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0QsUUFBUSxPQUFPLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDakcsS0FBSztBQUNMOztBQ2JlLE1BQU0sNEJBQTRCLFNBQVMsc0NBQXNDLENBQUM7QUFDakcsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsZ0NBQWdDLEVBQUVGLG9CQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xHLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxTQUFTLEdBQUdFLGVBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxRQUFRLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzRixLQUFLO0FBQ0w7O0FDTmUsTUFBTSx5QkFBeUIsU0FBUyxzQ0FBc0MsQ0FBQztBQUM5RixJQUFJLFdBQVcsR0FBRztBQUNsQixRQUFRLEtBQUssRUFBRSxDQUFDO0FBQ2hCLEtBQUs7QUFDTCxJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQywwQkFBMEIsQ0FBQztBQUN0RCxZQUFZLENBQUMsQ0FBQyxFQUFFVCxnQkFBYyxDQUFDLEVBQUUsQ0FBQztBQUNsQyxZQUFZLENBQUMsaUZBQWlGLENBQUM7QUFDL0YsWUFBWSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUNELHNCQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVELFlBQVksQ0FBQyxpRkFBaUYsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RHLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHRSxvQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEUsUUFBUSxNQUFNLElBQUksR0FBR0Ysc0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDbEUsUUFBUSxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDM0IsUUFBUSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlCLFFBQVEsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEQsUUFBUSxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUN2QixZQUFZLE9BQU87QUFDbkIsU0FBUztBQUNULFFBQVEsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDcEgsWUFBWSxTQUFTLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ25ELFNBQVM7QUFDVCxRQUFRLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzRixLQUFLO0FBQ0w7O0FDYk8sTUFBTTJELFFBQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQ1MsMkJBQXlCLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELE1BQU1SLFFBQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQ1MscUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNyRCxTQUFTUCxPQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDekMsSUFBSSxPQUFPSCxRQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUNNLFNBQVNJLFdBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUM3QyxJQUFJLE9BQU9KLFFBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBQ00sU0FBU1MsMkJBQXlCLENBQUMsWUFBWSxHQUFHLElBQUksRUFBRTtBQUMvRCxJQUFJLE1BQU0sTUFBTSxHQUFHQyxxQkFBbUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDNUQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGtCQUFrQixFQUFFLENBQUMsQ0FBQztBQUNyRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSUcseUJBQThCLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUNNLFNBQVNILHFCQUFtQixDQUFDLFVBQVUsR0FBRyxJQUFJLEVBQUUsWUFBWSxHQUFHLElBQUksRUFBRTtBQUM1RSxJQUFJLE9BQU8sMEJBQTBCLENBQUM7QUFDdEMsUUFBUSxPQUFPLEVBQUU7QUFDakIsWUFBWSxJQUFJLHFCQUFxQixDQUFDLFlBQVksQ0FBQztBQUNuRCxZQUFZLElBQUksNkJBQTZCLEVBQUU7QUFDL0MsWUFBWSxJQUFJLHNCQUFzQixFQUFFO0FBQ3hDLFlBQVksSUFBSSw4QkFBOEIsRUFBRTtBQUNoRCxZQUFZLElBQUlFLDJCQUF5QixFQUFFO0FBQzNDLFlBQVksSUFBSSw0QkFBNEIsRUFBRTtBQUM5QyxZQUFZLElBQUksZUFBZSxFQUFFO0FBQ2pDLFNBQVM7QUFDVCxRQUFRLFFBQVEsRUFBRSxDQUFDLElBQUksc0JBQXNCLEVBQUUsRUFBRSxJQUFJLHVCQUF1QixFQUFFLENBQUM7QUFDL0UsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25COzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5Q08sTUFBTUUsUUFBTSxHQUFHO0FBQ3RCLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUNYLENBQUMsQ0FBQztBQUNLLE1BQU1DLGdCQUFjLEdBQUc7QUFDOUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLENBQUMsQ0FBQztBQUNLLFNBQVMsU0FBUyxDQUFDLElBQUksRUFBRTtBQUNoQyxJQUFJLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztBQUN2QixTQUFTLE9BQU8sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDO0FBQ3JDLFNBQVMsT0FBTyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7QUFDckMsU0FBUyxPQUFPLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQztBQUNyQyxTQUFTLE9BQU8sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDO0FBQ3JDLFNBQVMsT0FBTyxDQUFDLGdIQUFnSCxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzdJLENBQUM7QUFDRCxTQUFTLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDekIsSUFBSSxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBQ00sU0FBUyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7QUFDdkMsSUFBSSxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkIsSUFBSSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQyxRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixRQUFRLElBQUksSUFBSSxLQUFLLEdBQUcsRUFBRTtBQUMxQixZQUFZLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHRCxRQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHQSxRQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekUsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sSUFBSUEsUUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLFNBQVM7QUFDVCxLQUFLO0FBQ0wsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQjs7QUM1Q0EsTUFBTTNELFNBQU8sR0FBRyx5RkFBeUYsQ0FBQztBQUMxRyxNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUM3QixNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUM3QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDcEIsTUFBTVMsbUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLE1BQU1HLGFBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTWlELFdBQVMsR0FBRyxDQUFDLENBQUM7QUFDTCxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLElBQUksT0FBTyxHQUFHO0FBQ2QsUUFBUSxPQUFPN0QsU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQzVCLFFBQVEsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUNZLGFBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RCxRQUFRLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDaUQsV0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELFFBQVEsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDO0FBQzNELFlBQVksR0FBRyxFQUFFLEdBQUc7QUFDcEIsWUFBWSxLQUFLLEVBQUUsS0FBSztBQUN4QixTQUFTLENBQUMsQ0FBQztBQUNYLFFBQVEsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxLQUFLLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDbkYsWUFBWSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLDJCQUEyQixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUNyRyxTQUFTO0FBQ1QsUUFBUSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO0FBQ3ZDLFlBQVksTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDcEQsbUJBQWlCLENBQUMsQ0FBQztBQUN6RCxZQUFZLElBQUksSUFBSSxHQUFHLFdBQVcsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNqRixZQUFZLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksRUFBRTtBQUMxQyxnQkFBZ0IsSUFBSSxJQUFJLElBQUksQ0FBQztBQUM3QixhQUFhO0FBQ2IsaUJBQWlCLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksRUFBRTtBQUMvQyxnQkFBZ0IsSUFBSSxJQUFJLElBQUksQ0FBQztBQUM3QixhQUFhO0FBQ2IsaUJBQWlCLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksRUFBRTtBQUMvQyxnQkFBZ0IsSUFBSSxJQUFJLElBQUksQ0FBQztBQUM3QixhQUFhO0FBQ2IsWUFBWSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1QyxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0UsWUFBWSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQyxTQUFTO0FBQ1QsUUFBUSxPQUFPLFVBQVUsQ0FBQztBQUMxQixLQUFLO0FBQ0w7O0FDMUNlLE1BQU0sdUJBQXVCLFNBQVMsNkJBQTZCLENBQUM7QUFDbkYsSUFBSSxjQUFjLEdBQUc7QUFDckIsUUFBUSxPQUFPLHlCQUF5QixDQUFDO0FBQ3pDLEtBQUs7QUFDTDs7QUNIQSxNQUFNVCxTQUFPLEdBQUcsNERBQTRELENBQUM7QUFDN0UsU0FBUyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUU7QUFDcEMsSUFBSSxRQUFRLElBQUk7QUFDaEIsUUFBUSxLQUFLLEtBQUs7QUFDbEIsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixRQUFRLEtBQUssTUFBTTtBQUNuQixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFFBQVEsS0FBSyxLQUFLO0FBQ2xCLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsUUFBUSxLQUFLLEtBQUs7QUFDbEIsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixRQUFRLEtBQUssS0FBSztBQUNsQixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFFBQVEsS0FBSyxNQUFNO0FBQ25CLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsUUFBUSxLQUFLLE1BQU07QUFDbkIsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixRQUFRLEtBQUssSUFBSTtBQUNqQixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFFBQVE7QUFDUixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLEtBQUs7QUFDTCxDQUFDO0FBQ2MsTUFBTSxrQkFBa0IsQ0FBQztBQUN4QyxJQUFJLE9BQU8sR0FBRztBQUNkLFFBQVEsT0FBT0EsU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQzVCLFFBQVEsTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsUUFBUSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztBQUM3RCxRQUFRLFFBQVEsSUFBSTtBQUNwQixZQUFZLEtBQUssSUFBSTtBQUNyQixnQkFBZ0IsT0FBTzRCLFNBQW9CLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9ELFlBQVksS0FBSyxJQUFJO0FBQ3JCLGdCQUFnQixPQUFPQyxRQUFtQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5RCxZQUFZLEtBQUssSUFBSSxDQUFDO0FBQ3RCLFlBQVksS0FBSyxJQUFJO0FBQ3JCLGdCQUFnQixPQUFPRixLQUFnQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzRCxTQUFTO0FBQ1QsUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQzFELFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekMsWUFBWSxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkQsU0FBUztBQUNULGFBQWEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ25DLFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEMsWUFBWSxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkQsU0FBUztBQUNULFFBQVEsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUNyQyxRQUFRLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hELFFBQVEsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDdEQsUUFBUSxPQUFPLFVBQVUsQ0FBQztBQUMxQixLQUFLO0FBQ0w7O0FDckRBLE1BQU0zQixTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsbUNBQW1DLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQzRELGdCQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVHLE1BQU0sZUFBZSxDQUFDO0FBQ3JDLElBQUksT0FBTyxHQUFHO0FBQ2QsUUFBUSxPQUFPNUQsU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQzVCLFFBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDL0MsUUFBUSxNQUFNLE1BQU0sR0FBRzRELGdCQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDakQsUUFBUSxJQUFJLE1BQU0sS0FBSyxTQUFTO0FBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsUUFBUSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7QUFDakQsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDNUIsUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDaEMsWUFBWSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQzlCLFNBQVM7QUFDVCxhQUFhLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNyQyxZQUFZLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDOUIsU0FBUztBQUNULGFBQWEsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JDLFlBQVksUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUM5QixTQUFTO0FBQ1QsUUFBUSxPQUFPLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3JGLEtBQUs7QUFDTDs7QUN2QkEsTUFBTTVELFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyx5QkFBeUIsR0FBRyxtRUFBbUUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqSSxNQUFNSSxZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU1RLGFBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTWlELFdBQVMsR0FBRyxDQUFDLENBQUM7QUFDTCxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLElBQUksT0FBTyxHQUFHO0FBQ2QsUUFBUSxPQUFPN0QsU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQzVCLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDekQsUUFBUSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQ1ksYUFBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlELFFBQVEsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUNpRCxXQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRTtBQUNyQyxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFO0FBQ2pDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEMsUUFBUSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN0QyxRQUFRLElBQUksS0FBSyxDQUFDekQsWUFBVSxDQUFDLEVBQUU7QUFDL0IsWUFBWSxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQ0EsWUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLFlBQVksTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDN0QsWUFBWSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QyxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3JGLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkMsU0FBUztBQUNULFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEIsS0FBSztBQUNMOztBQzlCQSxNQUFNK0MsbUJBQWlCLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSztBQUMxQyxJQUFJLHlCQUF5QjtBQUM3QixJQUFJLElBQUk7QUFDUixJQUFJLGVBQWU7QUFDbkIsSUFBSSxpQkFBaUI7QUFDckIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDUSxRQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hDLElBQUksMkJBQTJCO0FBQy9CLElBQUksVUFBVTtBQUNkLElBQUksZ0JBQWdCO0FBQ3BCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQ0EsUUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoQyxJQUFJLHdCQUF3QjtBQUM1QixJQUFJLFVBQVU7QUFDZCxJQUFJLGNBQWM7QUFDbEIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDQSxRQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hDLElBQUkscUJBQXFCO0FBQ3pCLElBQUksOEJBQThCLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekMsTUFBTVAsb0JBQWtCLEdBQUcsSUFBSSxNQUFNLENBQUMseUNBQXlDO0FBQy9FLElBQUksS0FBSztBQUNULElBQUkseUJBQXlCO0FBQzdCLElBQUksSUFBSTtBQUNSLElBQUksZUFBZTtBQUNuQixJQUFJLGlCQUFpQjtBQUNyQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUNPLFFBQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEMsSUFBSSxzQkFBc0I7QUFDMUIsSUFBSSxVQUFVO0FBQ2QsSUFBSSxnQkFBZ0I7QUFDcEIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDQSxRQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hDLElBQUksd0JBQXdCO0FBQzVCLElBQUksVUFBVTtBQUNkLElBQUksY0FBYztBQUNsQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUNBLFFBQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEMsSUFBSSxxQkFBcUI7QUFDekIsSUFBSSw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QyxNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUM3QixNQUFNN0MsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNQyxjQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU1DLGNBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFDZCxNQUFNLHNCQUFzQixTQUFTLHNDQUFzQyxDQUFDO0FBQzNGLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBT21DLG1CQUFpQixDQUFDO0FBQ2pDLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzFFLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxNQUFNLENBQUMsS0FBSyxHQUFHLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUNyQyxZQUFVLENBQUMsRUFBRSxLQUFLLENBQUNDLGNBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQ0MsY0FBWSxDQUFDLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztBQUMxSyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO0FBQzNCLFlBQVksS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzNDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsS0FBSyxHQUFHb0Msb0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ25HLFFBQVEsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNwQixZQUFZLE9BQU8sTUFBTSxDQUFDO0FBQzFCLFNBQVM7QUFDVCxRQUFRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUN0QyxZQUFVLENBQUMsRUFBRSxLQUFLLENBQUNDLGNBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQ0MsY0FBWSxDQUFDLEVBQUUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztBQUN4SyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO0FBQ3pCLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ3JGLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDdkUsWUFBWSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxFQUFFLEVBQUU7QUFDOUQsZ0JBQWdCLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzVFLG9CQUFvQixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlELGlCQUFpQjtBQUNqQixxQkFBcUIsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDdEQsb0JBQW9CLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMzRSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ3pFLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9ELFNBQVM7QUFDVCxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTCxDQUFDO0FBQ0QsU0FBUyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFO0FBQ3ZGLElBQUksSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLElBQUksSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEIsSUFBSSxJQUFJLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0FBQzdELElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JCLFFBQVEsSUFBSSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNDLEtBQUs7QUFDTCxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUNuQixRQUFRLE9BQU8sSUFBSSxDQUFDO0FBQ3BCLEtBQUs7QUFDTCxJQUFJLElBQUksV0FBVyxFQUFFO0FBQ3JCLFFBQVEsSUFBSSxNQUFNLENBQUM7QUFDbkIsUUFBUSxJQUFJLFdBQVcsS0FBSyxHQUFHLEVBQUU7QUFDakMsWUFBWSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3RELFlBQVksSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDL0IsZ0JBQWdCLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN2RCxhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsSUFBSSxNQUFNLElBQUksRUFBRTtBQUN4QixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFFBQVEsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNsRCxLQUFLO0FBQ0wsSUFBSSxJQUFJLFdBQVcsRUFBRTtBQUNyQixRQUFRLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUN0RCxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzNCLFlBQVksTUFBTSxHQUFHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ25ELFNBQVM7QUFDVCxRQUFRLElBQUksTUFBTSxJQUFJLEVBQUU7QUFDeEIsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixRQUFRLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEQsS0FBSztBQUNMLElBQUksSUFBSSxTQUFTLEVBQUU7QUFDbkIsUUFBUSxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDdkIsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDckMsUUFBUSxJQUFJLFVBQVUsS0FBSyxJQUFJLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUN4RSxZQUFZLFFBQVEsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ25DLFlBQVksSUFBSSxJQUFJLEtBQUssRUFBRTtBQUMzQixnQkFBZ0IsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN6QixTQUFTO0FBQ1QsYUFBYSxJQUFJLFVBQVUsS0FBSyxJQUFJLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLEdBQUcsRUFBRTtBQUM3RSxZQUFZLFFBQVEsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQ25DLFlBQVksSUFBSSxJQUFJLElBQUksRUFBRTtBQUMxQixnQkFBZ0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUMzQixTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtBQUN2QixRQUFRLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdEQsS0FBSztBQUNMLFNBQVM7QUFDVCxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUN2QixZQUFZLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVELFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1RCxTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksT0FBTyxnQkFBZ0IsQ0FBQztBQUM1Qjs7QUNoSmUsTUFBTSxzQkFBc0IsU0FBUyw0QkFBNEIsQ0FBQztBQUNqRixJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sZUFBZSxDQUFDO0FBQy9CLEtBQUs7QUFDTDs7QUNKZSxNQUFNLDhCQUE4QixTQUFTLGNBQWMsQ0FBQztBQUMzRSxJQUFJLFlBQVksQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRTtBQUN6RCxRQUFRLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNoRCxRQUFRLFNBQVMsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksR0FBRyxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztBQUM1RSxRQUFRLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQzNFLFFBQVEsSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFO0FBQzNCLFlBQVksU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDN0UsU0FBUztBQUNULFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsS0FBSztBQUNMLElBQUksa0JBQWtCLENBQUMsV0FBVyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUU7QUFDL0QsUUFBUSxNQUFNLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUMxRSxZQUFZLFVBQVUsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUU7QUFDckQsWUFBWSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELFFBQVEsT0FBTyxxQkFBcUIsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQztBQUNsRixLQUFLO0FBQ0w7O0FDZkEsTUFBTWhCLFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyx3QkFBd0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDNEQsZ0JBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEcsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRCxJQUFJLE9BQU8sR0FBRztBQUNkLFFBQVEsT0FBTzVELFNBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUM1QixRQUFRLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0FBQy9DLFFBQVEsTUFBTSxNQUFNLEdBQUc0RCxnQkFBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsSUFBSSxNQUFNLEtBQUssU0FBUztBQUNoQyxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFFBQVEsT0FBTyxnQ0FBZ0MsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNFLEtBQUs7QUFDTDs7QUNFTyxNQUFNZixRQUFNLEdBQUcsSUFBSSxNQUFNLENBQUNTLDJCQUF5QixFQUFFLENBQUMsQ0FBQztBQUN2RCxNQUFNUixRQUFNLEdBQUcsSUFBSSxNQUFNLENBQUNTLHFCQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckQsU0FBU1AsT0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQ3pDLElBQUksT0FBT0gsUUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFDTSxTQUFTSSxXQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDN0MsSUFBSSxPQUFPSixRQUFNLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUNNLFNBQVNTLDJCQUF5QixHQUFHO0FBQzVDLElBQUksTUFBTSxNQUFNLEdBQUdDLHFCQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDckQsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBQ00sU0FBU0EscUJBQW1CLENBQUMsVUFBVSxHQUFHLElBQUksRUFBRTtBQUN2RCxJQUFJLE1BQU0sYUFBYSxHQUFHLDBCQUEwQixDQUFDO0FBQ3JELFFBQVEsT0FBTyxFQUFFO0FBQ2pCLFlBQVksSUFBSSxnQkFBZ0IsRUFBRTtBQUNsQyxZQUFZLElBQUksZUFBZSxFQUFFO0FBQ2pDLFlBQVksSUFBSSw4QkFBOEIsRUFBRTtBQUNoRCxZQUFZLElBQUksdUJBQXVCLEVBQUU7QUFDekMsWUFBWSxJQUFJLHNCQUFzQixFQUFFO0FBQ3hDLFNBQVM7QUFDVCxRQUFRLFFBQVEsRUFBRTtBQUNsQixZQUFZLElBQUksOEJBQThCLEVBQUU7QUFDaEQsWUFBWSxJQUFJLHNCQUFzQixFQUFFO0FBQ3hDLFlBQVksSUFBSSx1QkFBdUIsRUFBRTtBQUN6QyxTQUFTO0FBQ1QsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25CLElBQUksYUFBYSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sS0FBSyxFQUFFLE9BQU8sWUFBWSw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7QUFDNUgsSUFBSSxPQUFPLGFBQWEsQ0FBQztBQUN6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUNPLE1BQU16RSxvQkFBa0IsR0FBRztBQUNsQyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksZUFBZSxFQUFFLENBQUM7QUFDdEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLGFBQWEsRUFBRSxDQUFDO0FBQ3BCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUNyQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksY0FBYyxFQUFFLENBQUM7QUFDckIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLGFBQWEsRUFBRSxDQUFDO0FBQ3BCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixDQUFDLENBQUM7QUFDSyxNQUFNRSxrQkFBZ0IsR0FBRztBQUNoQyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksVUFBVSxFQUFFLENBQUM7QUFDakIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFNBQVMsRUFBRSxFQUFFO0FBQ2pCLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDYixJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsSUFBSSxVQUFVLEVBQUUsRUFBRTtBQUNsQixJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ2IsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUNiLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxDQUFDLENBQUM7QUFDSyxNQUFNSyxjQUFZLEdBQUcsdUVBQXVFLENBQUM7QUFDN0YsU0FBU0MsV0FBUyxDQUFDLEtBQUssRUFBRTtBQUNqQyxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRTtBQUNyQyxRQUFRLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QyxRQUFRLElBQUksVUFBVSxHQUFHLEdBQUcsRUFBRTtBQUM5QixZQUFZLElBQUksVUFBVSxHQUFHLEVBQUUsRUFBRTtBQUNqQyxnQkFBZ0IsVUFBVSxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDL0MsYUFBYTtBQUNiLGlCQUFpQjtBQUNqQixnQkFBZ0IsVUFBVSxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDL0MsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLEtBQUs7QUFDTCxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRTtBQUNyQyxRQUFRLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRCxRQUFRLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEMsS0FBSztBQUNMLElBQUksT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0I7O0FDM0VBLE1BQU1VLFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQywwQkFBMEI7QUFDckQsSUFBSSx5Q0FBeUM7QUFDN0MsSUFBSSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUNsQixvQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxJQUFJLDBCQUEwQjtBQUM5QixJQUFJLG1EQUFtRDtBQUN2RCxJQUFJLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxQixNQUFNeUIsY0FBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNOEIsZUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNQyxlQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ1QsTUFBTSxlQUFlLFNBQVMsc0NBQXNDLENBQUM7QUFDcEYsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPdEMsU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDcUMsZUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDN0QsUUFBUSxNQUFNLE9BQU8sR0FBR3ZELG9CQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RELFFBQVEsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO0FBQ25DLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDeUIsY0FBWSxDQUFDLENBQUM7QUFDM0MsUUFBUSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMrQixlQUFhLENBQUMsQ0FBQztBQUM3QyxRQUFRLElBQUksSUFBSSxHQUFHLE1BQU0sSUFBSSxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzNDLFFBQVEsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsQyxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztBQUM1QixRQUFRLElBQUksSUFBSSxJQUFJLFNBQVMsRUFBRTtBQUMvQixZQUFZLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDOUIsU0FBUztBQUNULGFBQWEsSUFBSSxJQUFJLElBQUksU0FBUyxJQUFJLElBQUksSUFBSSxTQUFTLEVBQUU7QUFDekQsWUFBWSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQzlCLFNBQVM7QUFDVCxhQUFhLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRTtBQUNqQyxZQUFZLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDOUIsU0FBUztBQUNULFFBQVEsT0FBTyxnQ0FBZ0MsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN0RixLQUFLO0FBQ0w7O0FDdENlLE1BQU0sc0JBQXNCLFNBQVMsNEJBQTRCLENBQUM7QUFDakYsSUFBSSxhQUFhLEdBQUc7QUFDcEIsUUFBUSxPQUFPLG1DQUFtQyxDQUFDO0FBQ25ELEtBQUs7QUFDTCxJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8seUNBQXlDLENBQUM7QUFDekQsS0FBSztBQUNMOztBQ1BlLE1BQU0sc0JBQXNCLFNBQVMsNEJBQTRCLENBQUM7QUFDakYsSUFBSSxjQUFjLEdBQUc7QUFDckIsUUFBUSxPQUFPLElBQUksTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDaEQsS0FBSztBQUNMOztBQ0plLE1BQU0sdUJBQXVCLFNBQVMsNkJBQTZCLENBQUM7QUFDbkYsSUFBSSxjQUFjLEdBQUc7QUFDckIsUUFBUSxPQUFPLGdCQUFnQixDQUFDO0FBQ2hDLEtBQUs7QUFDTDs7QUNBQSxNQUFNdEMsU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsc0JBQXNCLENBQUM7QUFDbkQsSUFBSSxnRkFBZ0Y7QUFDcEYsSUFBSSxDQUFDLHlCQUF5QixDQUFDO0FBQy9CLElBQUksQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDaEIsa0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFSyxjQUFZLENBQUMsR0FBRyxDQUFDO0FBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNWSxZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU1DLGVBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTUMsa0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU1DLFlBQVUsR0FBRyxDQUFDLENBQUM7QUFDTixNQUFNLDZCQUE2QixTQUFTLHNDQUFzQyxDQUFDO0FBQ2xHLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBT0osU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxNQUFNLEtBQUssR0FBR2hCLGtCQUFnQixDQUFDLEtBQUssQ0FBQ21CLGtCQUFnQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUM5RSxRQUFRLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUNGLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDaEQsUUFBUSxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUU7QUFDdEIsWUFBWSxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDQSxZQUFVLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDakUsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUMsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEMsUUFBUSxJQUFJLEtBQUssQ0FBQ0csWUFBVSxDQUFDLEVBQUU7QUFDL0IsWUFBWSxNQUFNLFVBQVUsR0FBR2QsV0FBUyxDQUFDLEtBQUssQ0FBQ2MsWUFBVSxDQUFDLENBQUMsQ0FBQztBQUM1RCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNwRCxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDM0UsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsU0FBUztBQUNULFFBQVEsSUFBSSxLQUFLLENBQUNGLGVBQWEsQ0FBQyxFQUFFO0FBQ2xDLFlBQVksTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQ0EsZUFBYSxDQUFDLENBQUMsQ0FBQztBQUMzRCxZQUFZLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM5QyxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM5QyxTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0w7O0FDMUNlLE1BQU0sa0JBQWtCLFNBQVMsc0NBQXNDLENBQUM7QUFDdkYsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFO0FBQzFCLFFBQVEsT0FBTywyQ0FBMkMsQ0FBQztBQUMzRCxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNqRCxRQUFRLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0FBQzVELFFBQVEsUUFBUSxTQUFTO0FBQ3pCLFlBQVksS0FBSyxPQUFPO0FBQ3hCLGdCQUFnQixPQUFPd0IsR0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN6RCxZQUFZLEtBQUssTUFBTTtBQUN2QixnQkFBZ0IsT0FBT0MsS0FBZ0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0QsWUFBWSxLQUFLLFFBQVEsQ0FBQztBQUMxQixZQUFZLEtBQUssUUFBUTtBQUN6QixnQkFBZ0IsT0FBT0UsUUFBbUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUQsWUFBWSxLQUFLLE9BQU87QUFDeEIsZ0JBQWdCLE9BQU9ELFNBQW9CLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9ELFNBQVM7QUFDVCxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDs7QUNuQmUsTUFBTSxrQkFBa0IsU0FBUyxzQ0FBc0MsQ0FBQztBQUN2RixJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU8sb0VBQW9FLENBQUM7QUFDcEYsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzNDLFFBQVEsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDNUQsUUFBUSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7QUFDdEMsWUFBWSxLQUFLLE9BQU87QUFDeEIsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUM5RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssT0FBTztBQUN4QixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQzVELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxPQUFPLENBQUM7QUFDekIsWUFBWSxLQUFLLE9BQU87QUFDeEIsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsZ0JBQWdCLFNBQVMsQ0FBQyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUM1RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssWUFBWTtBQUM3QixnQkFBZ0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDL0QsZ0JBQWdCLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELGdCQUFnQixpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEQsZ0JBQWdCLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyRCxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBQzdELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxVQUFVO0FBQzNCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsU0FBUztBQUNULFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsS0FBSztBQUNMOztBQy9CTyxNQUFNaUIsUUFBTSxHQUFHLElBQUksTUFBTSxDQUFDUywyQkFBeUIsRUFBRSxDQUFDLENBQUM7QUFDdkQsTUFBTVIsUUFBTSxHQUFHLElBQUksTUFBTSxDQUFDUyxxQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3JELFNBQVNQLE9BQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUN6QyxJQUFJLE9BQU9ILFFBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBQ00sU0FBU0ksV0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQzdDLElBQUksT0FBT0osUUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFDTSxTQUFTUywyQkFBeUIsQ0FBQyxZQUFZLEdBQUcsSUFBSSxFQUFFO0FBQy9ELElBQUksTUFBTSxNQUFNLEdBQUdDLHFCQUFtQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztBQUM1RCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDbEQsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBQ00sU0FBU0EscUJBQW1CLENBQUMsVUFBVSxHQUFHLElBQUksRUFBRSxZQUFZLEdBQUcsSUFBSSxFQUFFO0FBQzVFLElBQUksT0FBTywwQkFBMEIsQ0FBQztBQUN0QyxRQUFRLE9BQU8sRUFBRTtBQUNqQixZQUFZLElBQUkscUJBQXFCLENBQUMsWUFBWSxDQUFDO0FBQ25ELFlBQVksSUFBSSxlQUFlLEVBQUU7QUFDakMsWUFBWSxJQUFJLHNCQUFzQixFQUFFO0FBQ3hDLFlBQVksSUFBSSw2QkFBNkIsRUFBRTtBQUMvQyxTQUFTO0FBQ1QsUUFBUSxRQUFRLEVBQUUsQ0FBQyxJQUFJLHNCQUFzQixFQUFFLEVBQUUsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO0FBQy9FLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNuQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDckNlLE1BQU0sdUJBQXVCLFNBQVMsNkJBQTZCLENBQUM7QUFDbkYsSUFBSSxjQUFjLEdBQUc7QUFDckIsUUFBUSxPQUFPLGtCQUFrQixDQUFDO0FBQ2xDLEtBQUs7QUFDTDs7QUNKZSxNQUFNLHNCQUFzQixTQUFTLDRCQUE0QixDQUFDO0FBQ2pGLElBQUksY0FBYyxHQUFHO0FBQ3JCLFFBQVEsT0FBTyxJQUFJLE1BQU0sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0FBQy9ELEtBQUs7QUFDTDs7QUNIZSxNQUFNLGtCQUFrQixTQUFTLHNDQUFzQyxDQUFDO0FBQ3ZGLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUMxQixRQUFRLE9BQU8sK0NBQStDLENBQUM7QUFDL0QsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQsUUFBUSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztBQUM1RCxRQUFRLFFBQVEsU0FBUztBQUN6QixZQUFZLEtBQUssSUFBSTtBQUNyQixnQkFBZ0IsT0FBTzdCLEdBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekQsWUFBWSxLQUFLLFNBQVM7QUFDMUIsZ0JBQWdCLE9BQU9DLEtBQWdCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNELFlBQVksS0FBSyxRQUFRLENBQUM7QUFDMUIsWUFBWSxLQUFLLFNBQVM7QUFDMUIsZ0JBQWdCLE9BQU9FLFFBQW1CLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlELFlBQVksS0FBSyxVQUFVO0FBQzNCLGdCQUFnQixPQUFPRCxTQUFvQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvRCxTQUFTO0FBQ1QsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUN6QixLQUFLO0FBQ0w7O0FDbkJBLE1BQU1pQyxXQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUNSLE1BQU0sa0JBQWtCLFNBQVMsc0NBQXNDLENBQUM7QUFDdkYsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPLGlHQUFpRyxDQUFDO0FBQ2pILEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUMzQyxRQUFRLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0FBQzVELFFBQVEsSUFBSSxLQUFLLENBQUNBLFdBQVMsQ0FBQyxLQUFLLE1BQU0sRUFBRTtBQUN6QyxZQUFZLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUMvRCxZQUFZLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEUsWUFBWSxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDcEUsU0FBUztBQUNULFFBQVEsUUFBUSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsV0FBVyxFQUFFO0FBQ2pELFlBQVksS0FBSyxVQUFVLENBQUM7QUFDNUIsWUFBWSxLQUFLLGNBQWM7QUFDL0IsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUM5RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssT0FBTyxDQUFDO0FBQ3pCLFlBQVksS0FBSyxZQUFZO0FBQzdCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDNUQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLGFBQWE7QUFDOUIsZ0JBQWdCLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQy9ELGdCQUFnQixPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RCxnQkFBZ0IsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELGdCQUFnQixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckQsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUM3RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssU0FBUyxDQUFDO0FBQzNCLFlBQVksS0FBSyxhQUFhO0FBQzlCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLGdCQUFnQixTQUFTLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDNUQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLFFBQVEsQ0FBQztBQUMxQixZQUFZLEtBQUssWUFBWTtBQUM3QixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFNBQVM7QUFDVCxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDs7QUNyRE8sTUFBTS9FLG9CQUFrQixHQUFHO0FBQ2xDLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksRUFBRSxFQUFFLENBQUM7QUFDVCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksRUFBRSxFQUFFLENBQUM7QUFDVCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUNULElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ1QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ1QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksRUFBRSxFQUFFLENBQUM7QUFDVCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixDQUFDLENBQUM7QUFDSyxNQUFNRSxrQkFBZ0IsR0FBRztBQUNoQyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLE9BQU8sRUFBRSxFQUFFO0FBQ2YsSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUNYLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLFFBQVEsRUFBRSxFQUFFO0FBQ2hCLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDWCxJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsSUFBSSxRQUFRLEVBQUUsRUFBRTtBQUNoQixJQUFJLEdBQUcsRUFBRSxFQUFFO0FBQ1gsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLENBQUMsQ0FBQztBQUNLLE1BQU1DLHlCQUF1QixHQUFHO0FBQ3ZDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksSUFBSSxFQUFFLEVBQUU7QUFDWixJQUFJLEdBQUcsRUFBRSxFQUFFO0FBQ1gsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLENBQUMsQ0FBQztBQUNLLE1BQU1WLHlCQUF1QixHQUFHO0FBQ3ZDLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ2IsSUFBSSxRQUFRLEVBQUUsRUFBRTtBQUNoQixJQUFJLFNBQVMsRUFBRSxFQUFFO0FBQ2pCLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxVQUFVLEVBQUUsRUFBRTtBQUNsQixJQUFJLFNBQVMsRUFBRSxFQUFFO0FBQ2pCLElBQUksV0FBVyxFQUFFLEVBQUU7QUFDbkIsSUFBSSxVQUFVLEVBQUUsRUFBRTtBQUNsQixJQUFJLFdBQVcsRUFBRSxFQUFFO0FBQ25CLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxpQkFBaUIsRUFBRSxFQUFFO0FBQ3pCLElBQUksa0JBQWtCLEVBQUUsRUFBRTtBQUMxQixJQUFJLGtCQUFrQixFQUFFLEVBQUU7QUFDMUIsSUFBSSxrQkFBa0IsRUFBRSxFQUFFO0FBQzFCLElBQUksa0JBQWtCLEVBQUUsRUFBRTtBQUMxQixJQUFJLGlCQUFpQixFQUFFLEVBQUU7QUFDekIsSUFBSSxtQkFBbUIsRUFBRSxFQUFFO0FBQzNCLElBQUksZUFBZSxFQUFFLEVBQUU7QUFDdkIsSUFBSSxnQkFBZ0IsRUFBRSxFQUFFO0FBQ3hCLElBQUksV0FBVyxFQUFFLEVBQUU7QUFDbkIsSUFBSSxnQkFBZ0IsRUFBRSxFQUFFO0FBQ3hCLENBQUMsQ0FBQztBQUNLLE1BQU1XLHNCQUFvQixHQUFHO0FBQ3BDLElBQUksR0FBRyxFQUFFLFFBQVE7QUFDakIsSUFBSSxNQUFNLEVBQUUsUUFBUTtBQUNwQixJQUFJLFFBQVEsRUFBRSxRQUFRO0FBQ3RCLElBQUksR0FBRyxFQUFFLFFBQVE7QUFDakIsSUFBSSxJQUFJLEVBQUUsUUFBUTtBQUNsQixJQUFJLE1BQU0sRUFBRSxRQUFRO0FBQ3BCLElBQUksTUFBTSxFQUFFLFFBQVE7QUFDcEIsSUFBSSxPQUFPLEVBQUUsUUFBUTtBQUNyQixJQUFJLFFBQVEsRUFBRSxRQUFRO0FBQ3RCLElBQUksQ0FBQyxFQUFFLE1BQU07QUFDYixJQUFJLEVBQUUsRUFBRSxNQUFNO0FBQ2QsSUFBSSxHQUFHLEVBQUUsTUFBTTtBQUNmLElBQUksR0FBRyxFQUFFLE1BQU07QUFDZixJQUFJLENBQUMsRUFBRSxNQUFNO0FBQ2IsSUFBSSxJQUFJLEVBQUUsTUFBTTtBQUNoQixJQUFJLEdBQUcsRUFBRSxLQUFLO0FBQ2QsSUFBSSxLQUFLLEVBQUUsS0FBSztBQUNoQixJQUFJLElBQUksRUFBRSxNQUFNO0FBQ2hCLElBQUksS0FBSyxFQUFFLE1BQU07QUFDakIsSUFBSSxLQUFLLEVBQUUsT0FBTztBQUNsQixJQUFJLE9BQU8sRUFBRSxPQUFPO0FBQ3BCLElBQUksSUFBSSxFQUFFLE1BQU07QUFDaEIsSUFBSSxFQUFFLEVBQUUsTUFBTTtBQUNkLElBQUksS0FBSyxFQUFFLE1BQU07QUFDakIsQ0FBQyxDQUFDO0FBQ0ssTUFBTUMsZ0JBQWMsR0FBRyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUNGLHlCQUF1QixDQUFDLENBQUMsNENBQTRDLENBQUMsQ0FBQztBQUNwSCxTQUFTRyxvQkFBa0IsQ0FBQyxLQUFLLEVBQUU7QUFDMUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDcEMsSUFBSSxJQUFJSCx5QkFBdUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDcEQsUUFBUSxPQUFPQSx5QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QyxLQUFLO0FBQ0wsU0FBUyxJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUU7QUFDN0IsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0wsU0FBUyxJQUFJLEdBQUcsS0FBSyxNQUFNLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUNwRCxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CLEtBQUs7QUFDTCxJQUFJLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUNNLE1BQU1ULHdCQUFzQixHQUFHLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQ0QseUJBQXVCLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBQ3ZHLFNBQVNFLDJCQUF5QixDQUFDLEtBQUssRUFBRTtBQUNqRCxJQUFJLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsQyxJQUFJLElBQUlGLHlCQUF1QixDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwRCxRQUFRLE9BQU9BLHlCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLEtBQUs7QUFDTCxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxJQUFJLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFDTSxNQUFNYyxjQUFZLEdBQUcsQ0FBQyw2RUFBNkUsQ0FBQyxDQUFDO0FBQ3JHLFNBQVNDLFdBQVMsQ0FBQyxLQUFLLEVBQUU7QUFDakMsSUFBSSxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN0QyxRQUFRLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFFBQVEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxLQUFLO0FBQ0wsSUFBSSxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDcEMsUUFBUSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbEQsUUFBUSxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvQixLQUFLO0FBQ0wsSUFBSSxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUMsSUFBSSxPQUFPLG9CQUFvQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFDRCxNQUFNQywwQkFBd0IsR0FBRyxDQUFDLENBQUMsRUFBRUosZ0JBQWMsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDRCxzQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pILE1BQU1NLHdCQUFzQixHQUFHLElBQUksTUFBTSxDQUFDRCwwQkFBd0IsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsRSxNQUFNRyxvQkFBa0IsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEVBQUVILDBCQUF3QixDQUFDLENBQUM7QUFDdkcsU0FBU0ssZUFBYSxDQUFDLFlBQVksRUFBRTtBQUM1QyxJQUFJLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUN6QixJQUFJLElBQUksYUFBYSxHQUFHLFlBQVksQ0FBQztBQUNyQyxJQUFJLElBQUksS0FBSyxHQUFHSix3QkFBc0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0QsSUFBSSxPQUFPLEtBQUssRUFBRTtBQUNsQixRQUFRSyx5QkFBdUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbEQsUUFBUSxhQUFhLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakUsUUFBUSxLQUFLLEdBQUdMLHdCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzRCxLQUFLO0FBQ0wsSUFBSSxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDO0FBQ0QsU0FBU0sseUJBQXVCLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRTtBQUNuRCxJQUFJLE1BQU0sR0FBRyxHQUFHVCxvQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxJQUFJLE1BQU0sSUFBSSxHQUFHRixzQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUM5RCxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUI7O0FDek1lLE1BQU0sNEJBQTRCLFNBQVMsc0NBQXNDLENBQUM7QUFDakcsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxHQUFHLEdBQUdRLG9CQUFrQixHQUFHLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xILEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxTQUFTLEdBQUdFLGVBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxRQUFRLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzRixLQUFLO0FBQ0w7O0FDUEEsTUFBTUksU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLDBCQUEwQjtBQUNyRCxJQUFJLGNBQWM7QUFDbEIsSUFBSSw4Q0FBOEM7QUFDbEQsSUFBSSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUNsQixvQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QyxJQUFJLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNeUIsY0FBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNOEIsZUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNQyxlQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ1QsTUFBTSxlQUFlLFNBQVMsc0NBQXNDLENBQUM7QUFDcEYsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPdEMsU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDcUMsZUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDN0QsUUFBUSxNQUFNLE9BQU8sR0FBR3ZELG9CQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RELFFBQVEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDeUIsY0FBWSxDQUFDLENBQUM7QUFDM0MsUUFBUSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMrQixlQUFhLENBQUMsQ0FBQztBQUM3QyxRQUFRLElBQUksWUFBWSxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQUM7QUFDN0MsUUFBUSxZQUFZLEdBQUcsWUFBWSxJQUFJLEVBQUUsQ0FBQztBQUMxQyxRQUFRLFlBQVksR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbEQsUUFBUSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDNUIsUUFBUSxJQUFJLFlBQVksSUFBSSxRQUFRLEVBQUU7QUFDdEMsWUFBWSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQzlCLFNBQVM7QUFDVCxhQUFhLElBQUksWUFBWSxJQUFJLFVBQVUsRUFBRTtBQUM3QyxZQUFZLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDOUIsU0FBUztBQUNULGFBQWEsSUFBSSxZQUFZLElBQUksTUFBTSxFQUFFO0FBQ3pDLFlBQVksUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUM5QixTQUFTO0FBQ1QsUUFBUSxPQUFPLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3RGLEtBQUs7QUFDTDs7QUM5QkEsTUFBTXRDLFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxjQUFjO0FBQ3pDLElBQUksQ0FBQyxDQUFDLEVBQUV4Qix3QkFBc0IsQ0FBQyxDQUFDLENBQUM7QUFDakMsSUFBSSxTQUFTO0FBQ2IsSUFBSSw0Q0FBNEM7QUFDaEQsSUFBSSxDQUFDLENBQUMsRUFBRUEsd0JBQXNCLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLElBQUksSUFBSTtBQUNSLElBQUkseUJBQXlCO0FBQzdCLElBQUksR0FBRztBQUNQLElBQUksZUFBZSxDQUFDUSxrQkFBZ0IsQ0FBQztBQUNyQyxJQUFJLEdBQUc7QUFDUCxJQUFJLEtBQUs7QUFDVCxJQUFJLGdCQUFnQjtBQUNwQixJQUFJLENBQUMsQ0FBQyxFQUFFSyxjQUFZLENBQUMsY0FBYyxDQUFDO0FBQ3BDLElBQUksSUFBSTtBQUNSLElBQUksV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU1jLGtCQUFnQixHQUFHLENBQUMsQ0FBQztBQUMzQixNQUFNRixZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU1DLGVBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTUUsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNOLE1BQU0sNkJBQTZCLFNBQVMsc0NBQXNDLENBQUM7QUFDbEcsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPSixTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLEtBQUssR0FBR2hCLGtCQUFnQixDQUFDLEtBQUssQ0FBQ21CLGtCQUFnQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUM5RSxRQUFRLE1BQU0sR0FBRyxHQUFHMUIsMkJBQXlCLENBQUMsS0FBSyxDQUFDd0IsWUFBVSxDQUFDLENBQUMsQ0FBQztBQUNqRSxRQUFRLElBQUksR0FBRyxHQUFHLEVBQUUsRUFBRTtBQUN0QixZQUFZLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUNBLFlBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNqRSxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztBQUMzRCxZQUFZLEdBQUcsRUFBRSxHQUFHO0FBQ3BCLFlBQVksS0FBSyxFQUFFLEtBQUs7QUFDeEIsU0FBUyxDQUFDLENBQUM7QUFDWCxRQUFRLElBQUksS0FBSyxDQUFDRyxZQUFVLENBQUMsRUFBRTtBQUMvQixZQUFZLE1BQU0sSUFBSSxHQUFHZCxXQUFTLENBQUMsS0FBSyxDQUFDYyxZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RELFlBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUMsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNFLFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsU0FBUztBQUNULFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQ0YsZUFBYSxDQUFDLEVBQUU7QUFDbkMsWUFBWSxPQUFPLFVBQVUsQ0FBQztBQUM5QixTQUFTO0FBQ1QsUUFBUSxNQUFNLE9BQU8sR0FBR3pCLDJCQUF5QixDQUFDLEtBQUssQ0FBQ3lCLGVBQWEsQ0FBQyxDQUFDLENBQUM7QUFDeEUsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLE1BQU0sQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDO0FBQ2xDLFFBQVEsTUFBTSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEMsUUFBUSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDMUMsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0w7O0FDckRBLE1BQU1GLFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUNoQixrQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNULElBQUksQ0FBQyxVQUFVLEVBQUVLLGNBQVksQ0FBQyxFQUFFLENBQUM7QUFDakMsSUFBSSxJQUFJO0FBQ1IsSUFBSSxrQ0FBa0MsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxNQUFNYyxrQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTUMsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNOLE1BQU0saUJBQWlCLFNBQVMsc0NBQXNDLENBQUM7QUFDdEYsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPSixTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztBQUM3RCxRQUFRLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25DLFFBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDRyxrQkFBZ0IsQ0FBQyxDQUFDO0FBQ2xELFFBQVEsTUFBTSxLQUFLLEdBQUduQixrQkFBZ0IsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUNoRSxRQUFRLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFDLFFBQVEsSUFBSSxLQUFLLENBQUNvQixZQUFVLENBQUMsRUFBRTtBQUMvQixZQUFZLE1BQU0sSUFBSSxHQUFHZCxXQUFTLENBQUMsS0FBSyxDQUFDYyxZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RELFlBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUMsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pFLFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0MsU0FBUztBQUNULFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDMUIsS0FBSztBQUNMOztBQ2hDQSxNQUFNSixTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsa0NBQWtDLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3pFLE1BQU1ZLGFBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTVIsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNOLE1BQU0sd0JBQXdCLFNBQVMsc0NBQXNDLENBQUM7QUFDN0YsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPSixTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDSSxZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQ1EsYUFBVyxDQUFDLENBQUMsQ0FBQztBQUNuRCxRQUFRLE9BQU8sT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0csS0FBSztBQUNMOztBQ1plLE1BQU0sc0JBQXNCLFNBQVMsNEJBQTRCLENBQUM7QUFDakYsSUFBSSxhQUFhLEdBQUc7QUFDcEIsUUFBUSxPQUFPLGlCQUFpQixDQUFDO0FBQ2pDLEtBQUs7QUFDTCxJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sb0NBQW9DLENBQUM7QUFDcEQsS0FBSztBQUNMLElBQUksYUFBYSxHQUFHO0FBQ3BCLFFBQVEsT0FBTyxnQ0FBZ0MsQ0FBQztBQUNoRCxLQUFLO0FBQ0wsSUFBSSw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pELFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFO0FBQzdDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsT0FBTyxLQUFLLENBQUMsNEJBQTRCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xFLEtBQUs7QUFDTDs7QUNkQSxNQUFNWixTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQztBQUNsRCxJQUFJLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQ2hCLGtCQUFnQixDQUFDLENBQUMsMEJBQTBCLENBQUM7QUFDeEUsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUNsQixJQUFJLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNeUIsbUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLE1BQU1OLGtCQUFnQixHQUFHLENBQUMsQ0FBQztBQUMzQixNQUFNTyxvQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFDN0IsTUFBTUMsbUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsTUFBTSwwQkFBMEIsU0FBUyxzQ0FBc0MsQ0FBQztBQUMvRixJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU9YLFNBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQ1Usb0JBQWtCLENBQUM7QUFDL0MsY0FBYyxRQUFRLENBQUMsS0FBSyxDQUFDQSxvQkFBa0IsQ0FBQyxDQUFDO0FBQ2pELGNBQWMxQixrQkFBZ0IsQ0FBQyxLQUFLLENBQUNtQixrQkFBZ0IsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDdEUsUUFBUSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRTtBQUNyQyxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUNNLG1CQUFpQixDQUFDLENBQUMsQ0FBQztBQUN4RCxRQUFRLE1BQU0sR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUNFLG1CQUFpQixDQUFDLENBQUMsQ0FBQztBQUN2RCxRQUFRLE9BQU87QUFDZixZQUFZLEdBQUcsRUFBRSxHQUFHO0FBQ3BCLFlBQVksS0FBSyxFQUFFLEtBQUs7QUFDeEIsWUFBWSxJQUFJLEVBQUUsSUFBSTtBQUN0QixTQUFTLENBQUM7QUFDVixLQUFLO0FBQ0w7O0FDM0JBLE1BQU1WLFlBQVUsR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDYixNQUFNLHNCQUFzQixTQUFTLHNDQUFzQyxDQUFDO0FBQzNGLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUMxQixRQUFRLE9BQU8scUVBQXFFLENBQUM7QUFDckYsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUNBLFlBQVUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3pELFFBQVEsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDaEUsUUFBUSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztBQUM1RCxRQUFRLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDM0MsUUFBUSxRQUFRLFFBQVE7QUFDeEIsWUFBWSxLQUFLLFVBQVU7QUFDM0IsZ0JBQWdCLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLGdCQUFnQixXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRCxnQkFBZ0IsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzFELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxLQUFLO0FBQ3RCLGdCQUFnQixpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLFFBQVE7QUFDekIsZ0JBQWdCLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQy9ELGdCQUFnQixPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RCxnQkFBZ0IsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELGdCQUFnQixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckQsZ0JBQWdCLE1BQU07QUFDdEIsU0FBUztBQUNULFFBQVEsUUFBUSxRQUFRO0FBQ3hCLFlBQVksS0FBSyxTQUFTO0FBQzFCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxRQUFRO0FBQ3pCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxVQUFVO0FBQzNCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxPQUFPO0FBQ3hCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixNQUFNO0FBQ3RCLFNBQVM7QUFDVCxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDs7QUM5Q0EsTUFBTUQsU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsMkRBQTJELEVBQUVOLG9CQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlILE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLE1BQU0sb0NBQW9DLFNBQVMsc0NBQXNDLENBQUM7QUFDekcsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPTSxTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM5RCxRQUFRLElBQUksU0FBUyxHQUFHSixlQUFhLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztBQUNuRSxRQUFRLFFBQVEsTUFBTTtBQUN0QixZQUFZLEtBQUssT0FBTyxDQUFDO0FBQ3pCLFlBQVksS0FBSyxXQUFXLENBQUM7QUFDN0IsWUFBWSxLQUFLLEdBQUc7QUFDcEIsZ0JBQWdCLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkQsZ0JBQWdCLE1BQU07QUFDdEIsU0FBUztBQUNULFFBQVEsT0FBTyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzNGLEtBQUs7QUFDTDs7QUNuQkEsTUFBTUksU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsd0RBQXdELEVBQUUsZUFBZSxDQUFDZCxzQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN0SSxJQUFJLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNcUQscUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQU1DLHFCQUFtQixHQUFHLENBQUMsQ0FBQztBQUNmLE1BQU0sMEJBQTBCLFNBQVMsc0NBQXNDLENBQUM7QUFDL0YsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPeEMsU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDdUMscUJBQW1CLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsRSxRQUFRLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQ0MscUJBQW1CLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsRSxRQUFRLE1BQU0sUUFBUSxHQUFHdEQsc0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEQsUUFBUSxJQUFJLFFBQVEsSUFBSSxTQUFTLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksV0FBVyxFQUFFO0FBQ3RGLFlBQVksTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFlBQVksU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQyxZQUFZLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMvRixTQUFTO0FBQ1QsUUFBUSxJQUFJLFFBQVEsSUFBSSxXQUFXLElBQUksUUFBUSxJQUFJLE9BQU8sRUFBRTtBQUM1RCxZQUFZLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxZQUFZLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyQyxZQUFZLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMvRixTQUFTO0FBQ1QsUUFBUSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztBQUM3RCxRQUFRLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDakUsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDckMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUN6RCxZQUFZLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDekQsU0FBUztBQUNULGFBQWEsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQzNDLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFZLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFlBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDMUQsWUFBWSxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQsU0FBUztBQUNULGFBQWEsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzFDLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsWUFBWSxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNwRCxZQUFZLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxZQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzFELFNBQVM7QUFDVCxRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLEtBQUs7QUFDTDs7QUM3Q0EsTUFBTWMsU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUdOLG9CQUFrQixHQUFHLEdBQUcsR0FBRyxzQ0FBc0MsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5RyxNQUFNeUIsZ0JBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHekIsb0JBQWtCLEdBQUcsR0FBRyxHQUFHLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RGLE1BQU0seUJBQXlCLFNBQVMsc0NBQXNDLENBQUM7QUFDOUYsSUFBSSxVQUFVLENBQUM7QUFDZixJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDNUIsUUFBUSxLQUFLLEVBQUUsQ0FBQztBQUNoQixRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ3JDLEtBQUs7QUFDTCxJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU8sSUFBSSxDQUFDLFVBQVUsR0FBR3lCLGdCQUFjLEdBQUduQixTQUFPLENBQUM7QUFDMUQsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFNBQVMsR0FBR0osZUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELFFBQVEsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNELFFBQVEsT0FBTyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ2pHLEtBQUs7QUFDTDs7QUNqQkEsTUFBTUksU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLEVBQUUsR0FBRyxHQUFHLEdBQUdOLG9CQUFrQixHQUFHLEdBQUcsR0FBRywwQ0FBMEMsR0FBRyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEksTUFBTXlCLGdCQUFjLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBR3pCLG9CQUFrQixHQUFHLEdBQUcsR0FBRyxrQkFBa0IsR0FBRyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkgsTUFBTTJCLHFCQUFtQixHQUFHLENBQUMsQ0FBQztBQUNmLE1BQU0sMkJBQTJCLFNBQVMsc0NBQXNDLENBQUM7QUFDaEcsSUFBSSxVQUFVLENBQUM7QUFDZixJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDNUIsUUFBUSxLQUFLLEVBQUUsQ0FBQztBQUNoQixRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ3JDLEtBQUs7QUFDTCxJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU8sSUFBSSxDQUFDLFVBQVUsR0FBR0YsZ0JBQWMsR0FBR25CLFNBQU8sQ0FBQztBQUMxRCxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHSixlQUFhLENBQUMsS0FBSyxDQUFDeUIscUJBQW1CLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLFFBQVEsT0FBTyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzNGLEtBQUs7QUFDTDs7QUNJTyxNQUFNd0IsUUFBTSxHQUFHLElBQUksTUFBTSxDQUFDUywyQkFBeUIsRUFBRSxDQUFDLENBQUM7QUFDdkQsTUFBTVIsUUFBTSxHQUFHLElBQUksTUFBTSxDQUFDUyxxQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3JELFNBQVNQLE9BQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUN6QyxJQUFJLE9BQU9ILFFBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBQ00sU0FBU0ksV0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQzdDLElBQUksT0FBT0osUUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFDTSxTQUFTUywyQkFBeUIsQ0FBQyxZQUFZLEdBQUcsSUFBSSxFQUFFO0FBQy9ELElBQUksTUFBTSxNQUFNLEdBQUdDLHFCQUFtQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztBQUM1RCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDckQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLHNCQUFzQixFQUFFLENBQUMsQ0FBQztBQUN6RCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSwwQkFBMEIsRUFBRSxDQUFDLENBQUM7QUFDN0QsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLG9DQUFvQyxFQUFFLENBQUMsQ0FBQztBQUN2RSxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFDTSxTQUFTQSxxQkFBbUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFlBQVksR0FBRyxJQUFJLEVBQUU7QUFDNUUsSUFBSSxPQUFPLDBCQUEwQixDQUFDO0FBQ3RDLFFBQVEsT0FBTyxFQUFFO0FBQ2pCLFlBQVksSUFBSSxxQkFBcUIsQ0FBQyxZQUFZLENBQUM7QUFDbkQsWUFBWSxJQUFJLDRCQUE0QixFQUFFO0FBQzlDLFlBQVksSUFBSSw2QkFBNkIsRUFBRTtBQUMvQyxZQUFZLElBQUksaUJBQWlCLEVBQUU7QUFDbkMsWUFBWSxJQUFJLGVBQWUsRUFBRTtBQUNqQyxZQUFZLElBQUksMEJBQTBCLEVBQUU7QUFDNUMsWUFBWSxJQUFJLHdCQUF3QixFQUFFO0FBQzFDLFlBQVksSUFBSSxzQkFBc0IsQ0FBQyxVQUFVLENBQUM7QUFDbEQsWUFBWSxJQUFJLHlCQUF5QixDQUFDLFVBQVUsQ0FBQztBQUNyRCxZQUFZLElBQUksMkJBQTJCLENBQUMsVUFBVSxDQUFDO0FBQ3ZELFNBQVM7QUFDVCxRQUFRLFFBQVEsRUFBRSxDQUFDLElBQUksc0JBQXNCLEVBQUUsRUFBRSxJQUFJLHVCQUF1QixFQUFFLENBQUM7QUFDL0UsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25COzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6RE8sTUFBTUksUUFBTSxHQUFHO0FBQ3RCLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDWCxDQUFDLENBQUM7QUFDSyxNQUFNQyxnQkFBYyxHQUFHO0FBQzlCLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsQ0FBQyxDQUFDO0FBQ0ssU0FBU0Usa0JBQWdCLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLElBQUksSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7QUFDMUIsWUFBWSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBR0gsUUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sR0FBR0EsUUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pFLFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxNQUFNLElBQUlBLFFBQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUNNLFNBQVNJLGdCQUFjLENBQUMsSUFBSSxFQUFFO0FBQ3JDLElBQUksSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxNQUFNLEdBQUcsTUFBTSxHQUFHSixRQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsS0FBSztBQUNMLElBQUksT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUI7O0FDM0NBLE1BQU12RCxZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU1RLGFBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTWlELFdBQVMsR0FBRyxDQUFDLENBQUM7QUFDTCxNQUFNLGdCQUFnQixTQUFTLHNDQUFzQyxDQUFDO0FBQ3JGLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBTyxJQUFJLE1BQU0sQ0FBQyxHQUFHO0FBQzdCLFlBQVksV0FBVztBQUN2QixZQUFZLEdBQUc7QUFDZixZQUFZLE1BQU0sQ0FBQyxJQUFJLENBQUNGLFFBQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEMsWUFBWSxPQUFPO0FBQ25CLFlBQVksR0FBRztBQUNmLFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQ0EsUUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QyxZQUFZLE1BQU07QUFDbEIsWUFBWSxJQUFJO0FBQ2hCLFlBQVksVUFBVTtBQUN0QixZQUFZLFFBQVE7QUFDcEIsWUFBWSxnQkFBZ0I7QUFDNUIsWUFBWSxHQUFHO0FBQ2YsWUFBWSxXQUFXO0FBQ3ZCLFlBQVksR0FBRztBQUNmLFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQ0EsUUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QyxZQUFZLFFBQVE7QUFDcEIsWUFBWSxHQUFHO0FBQ2YsWUFBWSxVQUFVO0FBQ3RCLFlBQVksT0FBTztBQUNuQixZQUFZLFVBQVU7QUFDdEIsWUFBWSxHQUFHO0FBQ2YsWUFBWSxXQUFXO0FBQ3ZCLFlBQVksR0FBRztBQUNmLFlBQVksTUFBTSxDQUFDLElBQUksQ0FBQ0EsUUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUN4QyxZQUFZLFFBQVE7QUFDcEIsWUFBWSxJQUFJO0FBQ2hCLFlBQVksVUFBVTtBQUN0QixZQUFZLFVBQVUsQ0FBQyxDQUFDO0FBQ3hCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDL0MsYUFBVyxDQUFDLENBQUMsQ0FBQztBQUNqRCxRQUFRLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztBQUN4QixZQUFZLEtBQUssR0FBR2tELGtCQUFnQixDQUFDLEtBQUssQ0FBQ2xELGFBQVcsQ0FBQyxDQUFDLENBQUM7QUFDekQsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUMsUUFBUSxJQUFJLEtBQUssQ0FBQ2lELFdBQVMsQ0FBQyxFQUFFO0FBQzlCLFlBQVksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQ0EsV0FBUyxDQUFDLENBQUMsQ0FBQztBQUNqRCxZQUFZLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUMxQixnQkFBZ0IsR0FBRyxHQUFHQyxrQkFBZ0IsQ0FBQyxLQUFLLENBQUNELFdBQVMsQ0FBQyxDQUFDLENBQUM7QUFDekQsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDNUMsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDakUsU0FBUztBQUNULFFBQVEsSUFBSSxLQUFLLENBQUN6RCxZQUFVLENBQUMsRUFBRTtBQUMvQixZQUFZLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUNBLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDbkQsWUFBWSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDM0IsZ0JBQWdCLElBQUksR0FBRzJELGdCQUFjLENBQUMsS0FBSyxDQUFDM0QsWUFBVSxDQUFDLENBQUMsQ0FBQztBQUN6RCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM5QyxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN0RSxTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0w7O0FDNURBLE1BQU1KLFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxTQUFTO0FBQ3BDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQzJELFFBQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEMsSUFBSSxpQkFBaUI7QUFDckIsSUFBSSxRQUFRO0FBQ1osSUFBSSxpQ0FBaUM7QUFDckMsSUFBSSx1QkFBdUIsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNsQyxNQUFNSyxjQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU1DLFlBQVUsR0FBRyxDQUFDLENBQUM7QUFDTixNQUFNLDBCQUEwQixTQUFTLHNDQUFzQyxDQUFDO0FBQy9GLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBT2pFLFNBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQ2dFLGNBQVksQ0FBQyxDQUFDLENBQUM7QUFDbkQsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMzQixZQUFZLE1BQU0sR0FBR0Ysa0JBQWdCLENBQUMsS0FBSyxDQUFDRSxjQUFZLENBQUMsQ0FBQyxDQUFDO0FBQzNELFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzNCLFlBQVksTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDQSxjQUFZLENBQUMsQ0FBQztBQUMvQyxZQUFZLElBQUksTUFBTSxLQUFLLEdBQUcsRUFBRTtBQUNoQyxnQkFBZ0IsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMzQixhQUFhO0FBQ2IsaUJBQWlCLElBQUksTUFBTSxLQUFLLEdBQUcsRUFBRTtBQUNyQyxnQkFBZ0IsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUM3QixhQUFhO0FBQ2IsaUJBQWlCO0FBQ2pCLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFFBQVEsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDQyxZQUFVLENBQUMsQ0FBQztBQUN2QyxRQUFRLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUN4QyxZQUFZLElBQUksUUFBUSxJQUFJLEdBQUcsSUFBSSxRQUFRLElBQUksR0FBRyxFQUFFO0FBQ3BELGdCQUFnQixRQUFRLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN0QyxhQUFhO0FBQ2IsaUJBQWlCLElBQUksUUFBUSxJQUFJLEdBQUcsSUFBSSxRQUFRLElBQUksR0FBRyxFQUFFO0FBQ3pELGdCQUFnQixRQUFRLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUN2QyxhQUFhO0FBQ2IsaUJBQWlCLElBQUksUUFBUSxJQUFJLEdBQUcsRUFBRTtBQUN0QyxnQkFBZ0IsUUFBUSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDeEMsYUFBYTtBQUNiLGlCQUFpQixJQUFJLFFBQVEsSUFBSSxHQUFHLEVBQUU7QUFDdEMsZ0JBQWdCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLGFBQWE7QUFDYixZQUFZLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hFLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzVELFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5RCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN2RCxZQUFZLE9BQU8sTUFBTSxDQUFDO0FBQzFCLFNBQVM7QUFDVCxRQUFRLElBQUksUUFBUSxJQUFJLEdBQUcsRUFBRTtBQUM3QixZQUFZLFFBQVEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLFNBQVM7QUFDVCxhQUFhLElBQUksUUFBUSxJQUFJLEdBQUcsRUFBRTtBQUNsQyxZQUFZLFFBQVEsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLFNBQVM7QUFDVCxhQUFhLElBQUksUUFBUSxJQUFJLEdBQUcsSUFBSSxRQUFRLElBQUksR0FBRyxFQUFFO0FBQ3JELFlBQVksUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDbkMsU0FBUztBQUNULFFBQVEsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDNUQsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDdkQsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pELFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEIsS0FBSztBQUNMOztBQ3ZFQSxNQUFNakUsU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLDhDQUE4QyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM0RCxnQkFBYyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzFHLE1BQU0sMkJBQTJCLFNBQVMsc0NBQXNDLENBQUM7QUFDaEcsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPNUQsU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUMvQyxRQUFRLE1BQU0sTUFBTSxHQUFHNEQsZ0JBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNqRCxRQUFRLElBQUksTUFBTSxLQUFLLFNBQVM7QUFDaEMsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztBQUM1QixRQUFRLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzNDLFFBQVEsSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFO0FBQzNCLFlBQVksUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUM5QixTQUFTO0FBQ1QsYUFBYSxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUU7QUFDaEMsWUFBWSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQzlCLFNBQVM7QUFDVCxhQUFhLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRTtBQUNoQyxZQUFZLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDOUIsU0FBUztBQUNULFFBQVEsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELFFBQVEsSUFBSSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFDckMsUUFBUSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDeEMsUUFBUSxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRTtBQUN0RCxZQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNwRSxZQUFZLGdCQUFnQixHQUFHLElBQUksQ0FBQztBQUNwQyxTQUFTO0FBQ1QsYUFBYSxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUU7QUFDckMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsWUFBWSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDcEMsU0FBUztBQUNULGFBQWEsSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFO0FBQ3JDLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDaEUsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxTQUFTLENBQUM7QUFDMUMsWUFBWSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDckQsZ0JBQWdCLElBQUksSUFBSSxDQUFDLENBQUM7QUFDMUIsYUFBYTtBQUNiLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JELGdCQUFnQixJQUFJLElBQUksQ0FBQyxDQUFDO0FBQzFCLGFBQWE7QUFDYixZQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2hELFNBQVM7QUFDVCxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvQyxRQUFRLElBQUksZ0JBQWdCLEVBQUU7QUFDOUIsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDdkQsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlELFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzVELFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDdEQsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdELFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzNELFNBQVM7QUFDVCxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDs7QUMzREEsTUFBTVQsbUJBQWlCLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVTtBQUMvQyxJQUFJLEtBQUs7QUFDVCxJQUFJLDJCQUEyQjtBQUMvQixJQUFJLHNEQUFzRDtBQUMxRCxJQUFJLDBCQUEwQjtBQUM5QixJQUFJLGNBQWM7QUFDbEIsSUFBSSwwREFBMEQ7QUFDOUQsSUFBSSxJQUFJO0FBQ1IsSUFBSSxjQUFjO0FBQ2xCLElBQUksWUFBWTtBQUNoQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUNRLFFBQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEMsSUFBSSx3QkFBd0I7QUFDNUIsSUFBSSxVQUFVO0FBQ2QsSUFBSSxlQUFlO0FBQ25CLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQ0EsUUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoQyxJQUFJLHdCQUF3QjtBQUM1QixJQUFJLFVBQVU7QUFDZCxJQUFJLFNBQVM7QUFDYixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUNBLFFBQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEMsSUFBSSxxQkFBcUI7QUFDekIsSUFBSSw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QyxNQUFNUCxvQkFBa0IsR0FBRyxJQUFJLE1BQU0sQ0FBQyxzQ0FBc0M7QUFDNUUsSUFBSSxLQUFLO0FBQ1QsSUFBSSwyQkFBMkI7QUFDL0IsSUFBSSxzREFBc0Q7QUFDMUQsSUFBSSwwQkFBMEI7QUFDOUIsSUFBSSxjQUFjO0FBQ2xCLElBQUksMERBQTBEO0FBQzlELElBQUksSUFBSTtBQUNSLElBQUksY0FBYztBQUNsQixJQUFJLFlBQVk7QUFDaEIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDTyxRQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hDLElBQUksd0JBQXdCO0FBQzVCLElBQUksVUFBVTtBQUNkLElBQUksZUFBZTtBQUNuQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUNBLFFBQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEMsSUFBSSx3QkFBd0I7QUFDNUIsSUFBSSxVQUFVO0FBQ2QsSUFBSSxTQUFTO0FBQ2IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDQSxRQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ2hDLElBQUkscUJBQXFCO0FBQ3pCLElBQUksOEJBQThCLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekMsTUFBTU8sYUFBVyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNQyx1QkFBcUIsR0FBRyxDQUFDLENBQUM7QUFDaEMsTUFBTUMsdUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLE1BQU1DLGFBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTUMsdUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLE1BQU14RCxZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU1DLGNBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTUMsY0FBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNQyxrQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDWixNQUFNLDBCQUEwQixTQUFTLHNDQUFzQyxDQUFDO0FBQy9GLElBQUksbUJBQW1CLEdBQUc7QUFDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixLQUFLO0FBQ0wsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPa0MsbUJBQWlCLENBQUM7QUFDakMsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDMUUsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLEtBQUssQ0FBQ2UsYUFBVyxDQUFDLEVBQUU7QUFDaEMsWUFBWSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUNBLGFBQVcsQ0FBQyxDQUFDO0FBQzVDLFlBQVksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQzdCLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtBQUM5RCxvQkFBb0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkUsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ2xDLGdCQUFnQixXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUNsQyxnQkFBZ0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDbkMsZ0JBQWdCLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9ELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ2xDLGdCQUFnQixXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtBQUNuQyxnQkFBZ0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsYUFBYTtBQUNiLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzlELFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRSxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUNuRSxTQUFTO0FBQ1QsYUFBYSxJQUFJLEtBQUssQ0FBQ0csYUFBVyxDQUFDLEVBQUU7QUFDckMsWUFBWSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUNBLGFBQVcsQ0FBQyxDQUFDO0FBQzVDLFlBQVksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQzdCLGdCQUFnQixXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUNsQyxnQkFBZ0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDbEMsZ0JBQWdCLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9ELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQ25DLGdCQUFnQixXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUNsQyxnQkFBZ0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDbkMsZ0JBQWdCLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9ELGFBQWE7QUFDYixZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUM5RCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckUsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDbkUsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUM3RCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEUsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDbEUsU0FBUztBQUNULFFBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLFFBQVEsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLFFBQVEsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBUSxJQUFJLEtBQUssQ0FBQ3JELGNBQVksQ0FBQyxFQUFFO0FBQ2pDLFlBQVksSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQ0EsY0FBWSxDQUFDLENBQUMsQ0FBQztBQUN2RCxZQUFZLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQy9CLGdCQUFnQixNQUFNLEdBQUc4QyxrQkFBZ0IsQ0FBQyxLQUFLLENBQUM5QyxjQUFZLENBQUMsQ0FBQyxDQUFDO0FBQy9ELGFBQWE7QUFDYixZQUFZLElBQUksTUFBTSxJQUFJLEVBQUU7QUFDNUIsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDO0FBQzVCLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2xELFNBQVM7QUFDVCxRQUFRLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDRixZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBWSxJQUFJLEdBQUdnRCxrQkFBZ0IsQ0FBQyxLQUFLLENBQUNoRCxZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxDQUFDQyxjQUFZLENBQUMsRUFBRTtBQUNqQyxZQUFZLElBQUksS0FBSyxDQUFDQSxjQUFZLENBQUMsSUFBSSxHQUFHLEVBQUU7QUFDNUMsZ0JBQWdCLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDNUIsYUFBYTtBQUNiLGlCQUFpQixJQUFJLEtBQUssQ0FBQ0EsY0FBWSxDQUFDLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQ0EsY0FBWSxDQUFDLElBQUksR0FBRyxFQUFFO0FBQy9FLGdCQUFnQixNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLGFBQWE7QUFDYixpQkFBaUI7QUFDakIsZ0JBQWdCLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDQSxjQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELGdCQUFnQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNuQyxvQkFBb0IsTUFBTSxHQUFHK0Msa0JBQWdCLENBQUMsS0FBSyxDQUFDL0MsY0FBWSxDQUFDLENBQUMsQ0FBQztBQUNuRSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVCxhQUFhLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtBQUM3QixZQUFZLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLFNBQVM7QUFDVCxRQUFRLElBQUksTUFBTSxJQUFJLEVBQUUsRUFBRTtBQUMxQixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUN2QixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTtBQUN4QixZQUFZLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDekIsU0FBUztBQUNULFFBQVEsSUFBSSxLQUFLLENBQUNFLGtCQUFnQixDQUFDLEVBQUU7QUFDckMsWUFBWSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ3pCLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixZQUFZLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQ0Esa0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsRSxZQUFZLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUM3QixnQkFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBb0IsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3QixhQUFhO0FBQ2IsWUFBWSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDN0IsZ0JBQWdCLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDN0IsZ0JBQWdCLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDOUIsb0JBQW9CLElBQUksSUFBSSxFQUFFLENBQUM7QUFDL0IsYUFBYTtBQUNiLFNBQVM7QUFDVCxhQUFhLElBQUksS0FBSyxDQUFDa0QsdUJBQXFCLENBQUMsRUFBRTtBQUMvQyxZQUFZLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQ0EsdUJBQXFCLENBQUMsQ0FBQztBQUMvRCxZQUFZLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxZQUFZLElBQUksT0FBTyxJQUFJLEdBQUcsRUFBRTtBQUNoQyxnQkFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBb0IsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3QixhQUFhO0FBQ2IsaUJBQWlCLElBQUksT0FBTyxJQUFJLEdBQUcsRUFBRTtBQUNyQyxnQkFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBb0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUMvQixhQUFhO0FBQ2IsU0FBUztBQUNULGFBQWEsSUFBSSxLQUFLLENBQUNDLHVCQUFxQixDQUFDLEVBQUU7QUFDL0MsWUFBWSxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUNBLHVCQUFxQixDQUFDLENBQUM7QUFDL0QsWUFBWSxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsWUFBWSxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFO0FBQ3BFLGdCQUFnQixRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLGdCQUFnQixJQUFJLElBQUksSUFBSSxFQUFFO0FBQzlCLG9CQUFvQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLGFBQWE7QUFDYixpQkFBaUIsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLEVBQUU7QUFDdkQsZ0JBQWdCLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDN0IsZ0JBQWdCLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDOUIsb0JBQW9CLElBQUksSUFBSSxFQUFFLENBQUM7QUFDL0IsYUFBYTtBQUNiLFNBQVM7QUFDVCxhQUFhLElBQUksS0FBSyxDQUFDRSx1QkFBcUIsQ0FBQyxFQUFFO0FBQy9DLFlBQVksTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDQSx1QkFBcUIsQ0FBQyxDQUFDO0FBQy9ELFlBQVksTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFlBQVksSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsRUFBRTtBQUNwRSxnQkFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBb0IsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3QixhQUFhO0FBQ2IsaUJBQWlCLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFO0FBQ3ZELGdCQUFnQixRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLGdCQUFnQixJQUFJLElBQUksSUFBSSxFQUFFO0FBQzlCLG9CQUFvQixJQUFJLElBQUksRUFBRSxDQUFDO0FBQy9CLGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUMsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDOUMsUUFBUSxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7QUFDM0IsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdEQsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUMzQixnQkFBZ0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELGFBQWE7QUFDYixpQkFBaUI7QUFDakIsZ0JBQWdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsTUFBTSxXQUFXLEdBQUdsQixvQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0csUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQzFCLFlBQVksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUM1QyxnQkFBZ0IsT0FBTyxJQUFJLENBQUM7QUFDNUIsYUFBYTtBQUNiLFlBQVksT0FBTyxNQUFNLENBQUM7QUFDMUIsU0FBUztBQUNULFFBQVEsSUFBSSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDeEQsUUFBUSxJQUFJLFdBQVcsQ0FBQ2MsYUFBVyxDQUFDLElBQUksV0FBVyxDQUFDRyxhQUFXLENBQUMsRUFBRTtBQUNsRSxZQUFZLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLFNBQVM7QUFDVCxRQUFRLE1BQU0sQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDdkQsUUFBUSxJQUFJLFdBQVcsQ0FBQ0gsYUFBVyxDQUFDLEVBQUU7QUFDdEMsWUFBWSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUNBLGFBQVcsQ0FBQyxDQUFDO0FBQ2xELFlBQVksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQzdCLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtBQUM5RCxvQkFBb0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ2xDLGdCQUFnQixTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUNsQyxnQkFBZ0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0QsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDbkMsZ0JBQWdCLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ2xDLGdCQUFnQixTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtBQUNuQyxnQkFBZ0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0QsYUFBYTtBQUNiLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzFELFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRSxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUMvRCxTQUFTO0FBQ1QsYUFBYSxJQUFJLFdBQVcsQ0FBQ0csYUFBVyxDQUFDLEVBQUU7QUFDM0MsWUFBWSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUNBLGFBQVcsQ0FBQyxDQUFDO0FBQ2xELFlBQVksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQzdCLGdCQUFnQixTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUNsQyxnQkFBZ0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0QsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDbEMsZ0JBQWdCLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQ25DLGdCQUFnQixTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUNsQyxnQkFBZ0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0QsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDbkMsZ0JBQWdCLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELGFBQWE7QUFDYixZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUMxRCxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakUsWUFBWSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDL0QsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN6RCxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEUsWUFBWSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsU0FBUztBQUNULFFBQVEsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNqQixRQUFRLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkIsUUFBUSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBUSxJQUFJLFdBQVcsQ0FBQ3JELGNBQVksQ0FBQyxFQUFFO0FBQ3ZDLFlBQVksSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQ0EsY0FBWSxDQUFDLENBQUMsQ0FBQztBQUM3RCxZQUFZLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQy9CLGdCQUFnQixNQUFNLEdBQUc4QyxrQkFBZ0IsQ0FBQyxXQUFXLENBQUM5QyxjQUFZLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLGFBQWE7QUFDYixZQUFZLElBQUksTUFBTSxJQUFJLEVBQUU7QUFDNUIsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDO0FBQzVCLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELFNBQVM7QUFDVCxRQUFRLElBQUksR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDRixZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBWSxJQUFJLEdBQUdnRCxrQkFBZ0IsQ0FBQyxXQUFXLENBQUNoRCxZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzdELFNBQVM7QUFDVCxRQUFRLElBQUksV0FBVyxDQUFDQyxjQUFZLENBQUMsRUFBRTtBQUN2QyxZQUFZLElBQUksV0FBVyxDQUFDQSxjQUFZLENBQUMsSUFBSSxHQUFHLEVBQUU7QUFDbEQsZ0JBQWdCLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDNUIsYUFBYTtBQUNiLGlCQUFpQixJQUFJLFdBQVcsQ0FBQ0EsY0FBWSxDQUFDLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQ0EsY0FBWSxDQUFDLElBQUksR0FBRyxFQUFFO0FBQzNGLGdCQUFnQixNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLGFBQWE7QUFDYixpQkFBaUI7QUFDakIsZ0JBQWdCLE1BQU0sR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDQSxjQUFZLENBQUMsQ0FBQyxDQUFDO0FBQzdELGdCQUFnQixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNuQyxvQkFBb0IsTUFBTSxHQUFHK0Msa0JBQWdCLENBQUMsV0FBVyxDQUFDL0MsY0FBWSxDQUFDLENBQUMsQ0FBQztBQUN6RSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVCxhQUFhLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtBQUM3QixZQUFZLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLFNBQVM7QUFDVCxRQUFRLElBQUksTUFBTSxJQUFJLEVBQUUsRUFBRTtBQUMxQixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUN2QixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTtBQUN4QixZQUFZLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDekIsU0FBUztBQUNULFFBQVEsSUFBSSxXQUFXLENBQUNFLGtCQUFnQixDQUFDLEVBQUU7QUFDM0MsWUFBWSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ3pCLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixZQUFZLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQ0Esa0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN4RSxZQUFZLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUM3QixnQkFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBb0IsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3QixhQUFhO0FBQ2IsWUFBWSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDN0IsZ0JBQWdCLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDN0IsZ0JBQWdCLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDOUIsb0JBQW9CLElBQUksSUFBSSxFQUFFLENBQUM7QUFDL0IsYUFBYTtBQUNiLFlBQVksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ3JELGdCQUFnQixJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7QUFDbkMsb0JBQW9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RCxvQkFBb0IsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUU7QUFDeEQsd0JBQXdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RCxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCLHFCQUFxQjtBQUNyQixvQkFBb0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RELG9CQUFvQixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUN4RCx3QkFBd0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ25GLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVCxhQUFhLElBQUksV0FBVyxDQUFDa0QsdUJBQXFCLENBQUMsRUFBRTtBQUNyRCxZQUFZLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQ0EsdUJBQXFCLENBQUMsQ0FBQztBQUNyRSxZQUFZLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxZQUFZLElBQUksT0FBTyxJQUFJLEdBQUcsRUFBRTtBQUNoQyxnQkFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBb0IsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3QixhQUFhO0FBQ2IsaUJBQWlCLElBQUksT0FBTyxJQUFJLEdBQUcsRUFBRTtBQUNyQyxnQkFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBb0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUMvQixhQUFhO0FBQ2IsU0FBUztBQUNULGFBQWEsSUFBSSxXQUFXLENBQUNDLHVCQUFxQixDQUFDLEVBQUU7QUFDckQsWUFBWSxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUNBLHVCQUFxQixDQUFDLENBQUM7QUFDckUsWUFBWSxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsWUFBWSxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFO0FBQ3BFLGdCQUFnQixRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLGdCQUFnQixJQUFJLElBQUksSUFBSSxFQUFFO0FBQzlCLG9CQUFvQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLGFBQWE7QUFDYixpQkFBaUIsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLEVBQUU7QUFDdkQsZ0JBQWdCLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDN0IsZ0JBQWdCLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDOUIsb0JBQW9CLElBQUksSUFBSSxFQUFFLENBQUM7QUFDL0IsYUFBYTtBQUNiLFNBQVM7QUFDVCxhQUFhLElBQUksV0FBVyxDQUFDRSx1QkFBcUIsQ0FBQyxFQUFFO0FBQ3JELFlBQVksTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDQSx1QkFBcUIsQ0FBQyxDQUFDO0FBQ3JFLFlBQVksTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFlBQVksSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsRUFBRTtBQUNwRSxnQkFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBb0IsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3QixhQUFhO0FBQ2IsaUJBQWlCLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFO0FBQ3ZELGdCQUFnQixRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLGdCQUFnQixJQUFJLElBQUksSUFBSSxFQUFFO0FBQzlCLG9CQUFvQixJQUFJLElBQUksRUFBRSxDQUFDO0FBQy9CLGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLFFBQVEsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQzNCLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3BELFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEcsWUFBWSxJQUFJLFNBQVMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUU7QUFDOUQsZ0JBQWdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUNoQyxnQkFBZ0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hELGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtBQUN6RSxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRCxTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0w7O0FDamJBLE1BQU10RSxTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsd0JBQXdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQzRELGdCQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDcEYsTUFBTSxtQkFBbUIsU0FBUyxzQ0FBc0MsQ0FBQztBQUN4RixJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU81RCxTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0FBQy9DLFFBQVEsTUFBTSxNQUFNLEdBQUc0RCxnQkFBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsSUFBSSxNQUFNLEtBQUssU0FBUztBQUNoQyxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFFBQVEsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBRXpELFFBQVEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxJQUFJLEdBQUcsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUN0QyxRQUFRLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNqRCxZQUFZLElBQUksSUFBSSxDQUFDLENBQUM7QUFDdEIsU0FBUztBQUNULFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2pELFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQztBQUN0QixTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM1QyxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvQyxRQUthO0FBQ2IsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDdEQsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdELFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzNELFNBQVM7QUFDVCxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDs7QUNwQ0EsTUFBTVcsV0FBUyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNTCxhQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU1NLGNBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTUMsY0FBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNSixhQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU1LLGNBQVksR0FBRyxDQUFDLENBQUM7QUFDUixNQUFNLHNCQUFzQixTQUFTLHNDQUFzQyxDQUFDO0FBQzNGLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUMxQixRQUFRLE9BQU8sSUFBSSxNQUFNLENBQUMsbUJBQW1CO0FBQzdDLFlBQVksaUNBQWlDO0FBQzdDLFlBQVksd0VBQXdFO0FBQ3BGLFlBQVksZ0NBQWdDO0FBQzVDLFlBQVksZ0JBQWdCO0FBQzVCLFlBQVksNEVBQTRFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0YsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO0FBQ2xDLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRSxRQUFRLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDeEMsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUMvQyxRQUFRLElBQUksS0FBSyxDQUFDSCxXQUFTLENBQUMsRUFBRTtBQUM5QixZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUMzRCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUMvRCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUMvRCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztBQUN6RSxTQUFTO0FBQ1QsYUFBYSxJQUFJLEtBQUssQ0FBQ0wsYUFBVyxDQUFDLEVBQUU7QUFDckMsWUFBWSxNQUFNLElBQUksR0FBRyxLQUFLLENBQUNBLGFBQVcsQ0FBQyxDQUFDO0FBQzVDLFlBQVksTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDTSxjQUFZLENBQUMsQ0FBQztBQUM5QyxZQUFZLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQzVDLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDNUMsb0JBQW9CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JELGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ2xDLGdCQUFnQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtBQUNuQyxnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDbEMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQ25DLGdCQUFnQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRCxhQUFhO0FBQ2IsWUFBWSxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtBQUM5QyxnQkFBZ0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlDLGFBQWE7QUFDYixpQkFBaUIsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO0FBQ25DLGdCQUFnQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0MsZ0JBQWdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxhQUFhO0FBQ2IsU0FBUztBQUNULGFBQWEsSUFBSSxLQUFLLENBQUNDLGNBQVksQ0FBQyxFQUFFO0FBQ3RDLFlBQVksTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDQSxjQUFZLENBQUMsQ0FBQztBQUNwRCxZQUFZLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6QyxZQUFZLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7QUFDOUQsZ0JBQWdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QyxhQUFhO0FBQ2IsaUJBQWlCLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO0FBQ25ELGdCQUFnQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0MsZ0JBQWdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtBQUNuQyxnQkFBZ0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLGdCQUFnQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsYUFBYTtBQUNiLGlCQUFpQixJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtBQUNuRCxnQkFBZ0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLGdCQUFnQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsYUFBYTtBQUNiLGlCQUFpQixJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7QUFDbkMsZ0JBQWdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QyxhQUFhO0FBQ2IsU0FBUztBQUNULGFBQWEsSUFBSSxLQUFLLENBQUNKLGFBQVcsQ0FBQyxFQUFFO0FBQ3JDLFlBQVksTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDQSxhQUFXLENBQUMsQ0FBQztBQUM1QyxZQUFZLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQzVDLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDNUMsb0JBQW9CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JELGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDaEUsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ2xDLGdCQUFnQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtBQUNuQyxnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDbEMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQ25DLGdCQUFnQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRCxhQUFhO0FBQ2IsWUFBWSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUNLLGNBQVksQ0FBQyxDQUFDO0FBQ3BELFlBQVksSUFBSSxXQUFXLEVBQUU7QUFDN0IsZ0JBQWdCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtBQUNsRSxvQkFBb0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELGlCQUFpQjtBQUNqQixxQkFBcUIsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7QUFDdkQsb0JBQW9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRCxvQkFBb0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGlCQUFpQjtBQUNqQixxQkFBcUIsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO0FBQ3ZDLG9CQUFvQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkQsb0JBQW9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RCxpQkFBaUI7QUFDakIscUJBQXFCLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO0FBQ3ZELG9CQUFvQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkQsb0JBQW9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RCxpQkFBaUI7QUFDakIscUJBQXFCLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtBQUN2QyxvQkFBb0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRCxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN4RCxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDs7QUNsSU8sTUFBTSxNQUFNLEdBQUc7QUFDdEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxFQUFFO0FBQ1gsSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUNYLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDWCxDQUFDLENBQUM7QUFDSyxNQUFNLGNBQWMsR0FBRztBQUM5QixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLENBQUMsQ0FBQztBQUNLLFNBQVMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLElBQUksSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsUUFBUSxJQUFJLElBQUksS0FBSyxHQUFHLEVBQUU7QUFDMUIsWUFBWSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6RSxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUNNLFNBQVMsY0FBYyxDQUFDLElBQUksRUFBRTtBQUNyQyxJQUFJLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNwQixJQUFJLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFDLFFBQVEsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFFBQVEsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsS0FBSztBQUNMLElBQUksT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUI7O0FDNUNBLE1BQU10RSxZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU1RLGFBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTWlELFdBQVMsR0FBRyxDQUFDLENBQUM7QUFDTCxNQUFNLGdCQUFnQixTQUFTLHNDQUFzQyxDQUFDO0FBQ3JGLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBTyxJQUFJLE1BQU0sQ0FBQyxHQUFHO0FBQzdCLFlBQVksV0FBVztBQUN2QixZQUFZLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPO0FBQ3hELFlBQVksR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU07QUFDdkQsWUFBWSxJQUFJO0FBQ2hCLFlBQVksVUFBVTtBQUN0QixZQUFZLFFBQVE7QUFDcEIsWUFBWSxnQkFBZ0I7QUFDNUIsWUFBWSxHQUFHO0FBQ2YsWUFBWSxXQUFXO0FBQ3ZCLFlBQVksR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVE7QUFDekQsWUFBWSxHQUFHO0FBQ2YsWUFBWSxVQUFVO0FBQ3RCLFlBQVksT0FBTztBQUNuQixZQUFZLFVBQVU7QUFDdEIsWUFBWSxHQUFHO0FBQ2YsWUFBWSxXQUFXO0FBQ3ZCLFlBQVksR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVE7QUFDekQsWUFBWSxJQUFJO0FBQ2hCLFlBQVksVUFBVTtBQUN0QixZQUFZLFVBQVUsQ0FBQyxDQUFDO0FBQ3hCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDakQsYUFBVyxDQUFDLENBQUMsQ0FBQztBQUNqRCxRQUFRLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQztBQUN4QixZQUFZLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUNBLGFBQVcsQ0FBQyxDQUFDLENBQUM7QUFDekQsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUMsUUFBUSxJQUFJLEtBQUssQ0FBQ2lELFdBQVMsQ0FBQyxFQUFFO0FBQzlCLFlBQVksSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQ0EsV0FBUyxDQUFDLENBQUMsQ0FBQztBQUNqRCxZQUFZLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQztBQUMxQixnQkFBZ0IsR0FBRyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQ0EsV0FBUyxDQUFDLENBQUMsQ0FBQztBQUN6RCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1QyxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNqRSxTQUFTO0FBQ1QsUUFBUSxJQUFJLEtBQUssQ0FBQ3pELFlBQVUsQ0FBQyxFQUFFO0FBQy9CLFlBQVksSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQ0EsWUFBVSxDQUFDLENBQUMsQ0FBQztBQUNuRCxZQUFZLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQztBQUMzQixnQkFBZ0IsSUFBSSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUNBLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDekQsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUMsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDdEUsU0FBUztBQUNULFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEIsS0FBSztBQUNMOztBQ3BEQSxNQUFNSixTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsU0FBUztBQUNwQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoQyxJQUFJLGlCQUFpQjtBQUNyQixJQUFJLFFBQVE7QUFDWixJQUFJLGlDQUFpQztBQUNyQyxJQUFJLHVCQUF1QixFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDTixNQUFNLDBCQUEwQixTQUFTLHNDQUFzQyxDQUFDO0FBQy9GLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBT0EsU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDbkQsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMzQixZQUFZLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUMzRCxTQUFTO0FBQ1QsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMzQixZQUFZLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMvQyxZQUFZLElBQUksTUFBTSxLQUFLLEdBQUcsRUFBRTtBQUNoQyxnQkFBZ0IsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMzQixhQUFhO0FBQ2IsaUJBQWlCLElBQUksTUFBTSxLQUFLLEdBQUcsRUFBRTtBQUNyQyxnQkFBZ0IsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUM3QixhQUFhO0FBQ2IsaUJBQWlCO0FBQ2pCLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzVCLFFBQVEsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZDLFFBQVEsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFFBQVEsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ3hDLFlBQVksSUFBSSxRQUFRLElBQUksR0FBRyxJQUFJLFFBQVEsSUFBSSxHQUFHLEVBQUU7QUFDcEQsZ0JBQWdCLFFBQVEsQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLGFBQWE7QUFDYixpQkFBaUIsSUFBSSxRQUFRLElBQUksR0FBRyxJQUFJLFFBQVEsSUFBSSxHQUFHLEVBQUU7QUFDekQsZ0JBQWdCLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLGFBQWE7QUFDYixpQkFBaUIsSUFBSSxRQUFRLElBQUksR0FBRyxFQUFFO0FBQ3RDLGdCQUFnQixRQUFRLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxhQUFhO0FBQ2IsaUJBQWlCLElBQUksUUFBUSxJQUFJLEdBQUcsRUFBRTtBQUN0QyxnQkFBZ0IsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7QUFDdkMsYUFBYTtBQUNiLFlBQVksTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDaEUsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDNUQsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlELFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELFlBQVksT0FBTyxNQUFNLENBQUM7QUFDMUIsU0FBUztBQUNULFFBQVEsSUFBSSxRQUFRLElBQUksR0FBRyxFQUFFO0FBQzdCLFlBQVksUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckMsU0FBUztBQUNULGFBQWEsSUFBSSxRQUFRLElBQUksR0FBRyxFQUFFO0FBQ2xDLFlBQVksUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckMsU0FBUztBQUNULGFBQWEsSUFBSSxRQUFRLElBQUksR0FBRyxJQUFJLFFBQVEsSUFBSSxHQUFHLEVBQUU7QUFDckQsWUFBWSxRQUFRLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUNuQyxTQUFTO0FBQ1QsUUFBUSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM1RCxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN2RCxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekQsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDbEQsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDckQsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDekQsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDekQsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0w7O0FDdkVBLE1BQU1BLFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxrREFBa0QsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUM5RyxNQUFNLDJCQUEyQixTQUFTLHNDQUFzQyxDQUFDO0FBQ2hHLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBT0EsU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztBQUMvQyxRQUFRLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNqRCxRQUFRLElBQUksTUFBTSxLQUFLLFNBQVM7QUFDaEMsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztBQUM1QixRQUFRLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzNDLFFBQVEsSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFO0FBQzNCLFlBQVksUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUM5QixTQUFTO0FBQ1QsYUFBYSxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUU7QUFDaEMsWUFBWSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQzlCLFNBQVM7QUFDVCxhQUFhLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLEVBQUU7QUFDbEUsWUFBWSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQzlCLFNBQVM7QUFDVCxRQUFRLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN6RCxRQUFRLElBQUksZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQ3JDLFFBQVEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxRQUFRLElBQUksTUFBTSxJQUFJLFFBQVEsSUFBSSxNQUFNLEVBQUU7QUFDdEQsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsWUFBWSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDcEMsU0FBUztBQUNULGFBQWEsSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFO0FBQ3JDLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLFlBQVksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0FBQ3BDLFNBQVM7QUFDVCxhQUFhLElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRTtBQUNyQyxZQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxJQUFJLElBQUksR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUFDO0FBQzFDLFlBQVksSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JELGdCQUFnQixJQUFJLElBQUksQ0FBQyxDQUFDO0FBQzFCLGFBQWE7QUFDYixZQUFZLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNyRCxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUMxQixhQUFhO0FBQ2IsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNoRCxTQUFTO0FBQ1QsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0MsUUFBUSxJQUFJLGdCQUFnQixFQUFFO0FBQzlCLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5RCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUM1RCxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUMzRCxTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0w7O0FDM0RBLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxNQUFNLENBQUMsWUFBWTtBQUNqRCxJQUFJLEtBQUs7QUFDVCxJQUFJLGlDQUFpQztBQUNyQyxJQUFJLHdFQUF3RTtBQUM1RSxJQUFJLGdDQUFnQztBQUNwQyxJQUFJLGNBQWM7QUFDbEIsSUFBSSw0RUFBNEU7QUFDaEYsSUFBSSxJQUFJO0FBQ1IsSUFBSSxjQUFjO0FBQ2xCLElBQUksWUFBWTtBQUNoQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoQyxJQUFJLHdCQUF3QjtBQUM1QixJQUFJLFVBQVU7QUFDZCxJQUFJLGVBQWU7QUFDbkIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEMsSUFBSSx3QkFBd0I7QUFDNUIsSUFBSSxVQUFVO0FBQ2QsSUFBSSxTQUFTO0FBQ2IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEMsSUFBSSxxQkFBcUI7QUFDekIsSUFBSSw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QyxNQUFNLGtCQUFrQixHQUFHLElBQUksTUFBTSxDQUFDLHNDQUFzQztBQUM1RSxJQUFJLEtBQUs7QUFDVCxJQUFJLGlDQUFpQztBQUNyQyxJQUFJLHdFQUF3RTtBQUM1RSxJQUFJLGdDQUFnQztBQUNwQyxJQUFJLGNBQWM7QUFDbEIsSUFBSSw0RUFBNEU7QUFDaEYsSUFBSSxJQUFJO0FBQ1IsSUFBSSxjQUFjO0FBQ2xCLElBQUksWUFBWTtBQUNoQixJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoQyxJQUFJLHdCQUF3QjtBQUM1QixJQUFJLFVBQVU7QUFDZCxJQUFJLGVBQWU7QUFDbkIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEMsSUFBSSx3QkFBd0I7QUFDNUIsSUFBSSxVQUFVO0FBQ2QsSUFBSSxTQUFTO0FBQ2IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEMsSUFBSSxxQkFBcUI7QUFDekIsSUFBSSw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6QyxNQUFNa0UsYUFBVyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUNoQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQUNoQyxNQUFNRyxhQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0FBQ2hDLE1BQU12RCxZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDWixNQUFNLDBCQUEwQixTQUFTLHNDQUFzQyxDQUFDO0FBQy9GLElBQUksbUJBQW1CLEdBQUc7QUFDMUIsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixLQUFLO0FBQ0wsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPLGlCQUFpQixDQUFDO0FBQ2pDLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzFFLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsSUFBSSxLQUFLLENBQUNvRCxhQUFXLENBQUMsRUFBRTtBQUNoQyxZQUFZLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQ0EsYUFBVyxDQUFDLENBQUM7QUFDNUMsWUFBWSxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUM1QyxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtBQUNwRCxvQkFBb0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkUsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUNoRSxnQkFBZ0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDbEMsZ0JBQWdCLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9ELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQ25DLGdCQUFnQixXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUNsQyxnQkFBZ0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDbkMsZ0JBQWdCLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9ELGFBQWE7QUFDYixZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUM5RCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckUsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDbkUsU0FBUztBQUNULGFBQWEsSUFBSSxLQUFLLENBQUNHLGFBQVcsQ0FBQyxFQUFFO0FBQ3JDLFlBQVksTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDQSxhQUFXLENBQUMsQ0FBQztBQUM1QyxZQUFZLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQzVDLGdCQUFnQixXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDaEUsZ0JBQWdCLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9ELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ2xDLGdCQUFnQixXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtBQUNuQyxnQkFBZ0IsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDbEMsZ0JBQWdCLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9ELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQ25DLGdCQUFnQixXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRCxhQUFhO0FBQ2IsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDOUQsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ25FLFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDN0QsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLFNBQVM7QUFDVCxRQUFRLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNyQixRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN2QixRQUFRLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQVEsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUU7QUFDakMsWUFBWSxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDdkQsWUFBWSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMvQixnQkFBZ0IsTUFBTSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0FBQy9ELGFBQWE7QUFDYixZQUFZLElBQUksTUFBTSxJQUFJLEVBQUU7QUFDNUIsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDO0FBQzVCLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2xELFNBQVM7QUFDVCxRQUFRLElBQUksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDdkQsWUFBVSxDQUFDLENBQUMsQ0FBQztBQUMzQyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQVksSUFBSSxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQ0EsWUFBVSxDQUFDLENBQUMsQ0FBQztBQUN2RCxTQUFTO0FBQ1QsUUFBUSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRTtBQUNqQyxZQUFZLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsRUFBRTtBQUM1QyxnQkFBZ0IsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUM1QixhQUFhO0FBQ2IsaUJBQWlCLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxFQUFFO0FBQy9FLGdCQUFnQixNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLGFBQWE7QUFDYixpQkFBaUI7QUFDakIsZ0JBQWdCLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDdkQsZ0JBQWdCLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ25DLG9CQUFvQixNQUFNLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDbkUsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixTQUFTO0FBQ1QsYUFBYSxJQUFJLElBQUksR0FBRyxHQUFHLEVBQUU7QUFDN0IsWUFBWSxNQUFNLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNoQyxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMxQyxTQUFTO0FBQ1QsUUFBUSxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUU7QUFDMUIsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDdkIsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUU7QUFDeEIsWUFBWSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUU7QUFDckMsWUFBWSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ3pCLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixZQUFZLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2hFLFlBQVksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQzdCLGdCQUFnQixRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLGdCQUFnQixJQUFJLElBQUksSUFBSSxFQUFFO0FBQzlCLG9CQUFvQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLGFBQWE7QUFDYixZQUFZLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUM3QixnQkFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBb0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUMvQixhQUFhO0FBQ2IsU0FBUztBQUNULGFBQWEsSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsRUFBRTtBQUMvQyxZQUFZLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQzdELFlBQVksSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFlBQVksSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLEVBQUU7QUFDbEQsZ0JBQWdCLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDN0IsZ0JBQWdCLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDOUIsb0JBQW9CLElBQUksR0FBRyxDQUFDLENBQUM7QUFDN0IsYUFBYTtBQUNiLGlCQUFpQixJQUFJLE9BQU8sSUFBSSxHQUFHLEVBQUU7QUFDckMsZ0JBQWdCLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDN0IsZ0JBQWdCLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDOUIsb0JBQW9CLElBQUksSUFBSSxFQUFFLENBQUM7QUFDL0IsYUFBYTtBQUNiLFNBQVM7QUFDVCxhQUFhLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLEVBQUU7QUFDL0MsWUFBWSxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUM3RCxZQUFZLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxZQUFZLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsRUFBRTtBQUN0RixnQkFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBb0IsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3QixhQUFhO0FBQ2IsaUJBQWlCLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLEVBQUU7QUFDekUsZ0JBQWdCLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDN0IsZ0JBQWdCLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDOUIsb0JBQW9CLElBQUksSUFBSSxFQUFFLENBQUM7QUFDL0IsYUFBYTtBQUNiLFNBQVM7QUFDVCxhQUFhLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLEVBQUU7QUFDL0MsWUFBWSxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUM3RCxZQUFZLElBQUksT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyxZQUFZLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsRUFBRTtBQUN0RixnQkFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBb0IsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3QixhQUFhO0FBQ2IsaUJBQWlCLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLEVBQUU7QUFDekUsZ0JBQWdCLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDN0IsZ0JBQWdCLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDOUIsb0JBQW9CLElBQUksSUFBSSxFQUFFLENBQUM7QUFDL0IsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxQyxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM5QyxRQUFRLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtBQUMzQixZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN0RCxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksSUFBSSxJQUFJLEdBQUcsRUFBRSxFQUFFO0FBQzNCLGdCQUFnQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsYUFBYTtBQUNiLGlCQUFpQjtBQUNqQixnQkFBZ0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDL0csUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQzFCLFlBQVksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUM1QyxnQkFBZ0IsT0FBTyxJQUFJLENBQUM7QUFDNUIsYUFBYTtBQUNiLFlBQVksT0FBTyxNQUFNLENBQUM7QUFDMUIsU0FBUztBQUNULFFBQVEsSUFBSSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDeEQsUUFBUSxJQUFJLFdBQVcsQ0FBQ29ELGFBQVcsQ0FBQyxJQUFJLFdBQVcsQ0FBQ0csYUFBVyxDQUFDLEVBQUU7QUFDbEUsWUFBWSxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN0RSxTQUFTO0FBQ1QsUUFBUSxNQUFNLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0FBQ3ZELFFBQVEsSUFBSSxXQUFXLENBQUNILGFBQVcsQ0FBQyxFQUFFO0FBQ3RDLFlBQVksTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDQSxhQUFXLENBQUMsQ0FBQztBQUNsRCxZQUFZLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQzVDLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQ3BELG9CQUFvQixTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRCxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ2hFLGdCQUFnQixTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUNsQyxnQkFBZ0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0QsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDbkMsZ0JBQWdCLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ2xDLGdCQUFnQixTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtBQUNuQyxnQkFBZ0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0QsYUFBYTtBQUNiLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzFELFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRSxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUMvRCxTQUFTO0FBQ1QsYUFBYSxJQUFJLFdBQVcsQ0FBQ0csYUFBVyxDQUFDLEVBQUU7QUFDM0MsWUFBWSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUNBLGFBQVcsQ0FBQyxDQUFDO0FBQ2xELFlBQVksSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUNoRSxnQkFBZ0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0QsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDbEMsZ0JBQWdCLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQ25DLGdCQUFnQixTQUFTLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUNsQyxnQkFBZ0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0QsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDbkMsZ0JBQWdCLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELGFBQWE7QUFDYixZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUMxRCxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakUsWUFBWSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDL0QsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN6RCxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEUsWUFBWSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsU0FBUztBQUNULFFBQVEsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNqQixRQUFRLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDbkIsUUFBUSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBUSxJQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsRUFBRTtBQUN2QyxZQUFZLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUM3RCxZQUFZLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQy9CLGdCQUFnQixNQUFNLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7QUFDckUsYUFBYTtBQUNiLFlBQVksSUFBSSxNQUFNLElBQUksRUFBRTtBQUM1QixnQkFBZ0IsT0FBTyxJQUFJLENBQUM7QUFDNUIsWUFBWSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEQsU0FBUztBQUNULFFBQVEsSUFBSSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUN2RCxZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ2pELFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBWSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDQSxZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzdELFNBQVM7QUFDVCxRQUFRLElBQUksV0FBVyxDQUFDLFlBQVksQ0FBQyxFQUFFO0FBQ3ZDLFlBQVksSUFBSSxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxFQUFFO0FBQ2xELGdCQUFnQixNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQzVCLGFBQWE7QUFDYixpQkFBaUIsSUFBSSxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxJQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxHQUFHLEVBQUU7QUFDM0YsZ0JBQWdCLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDM0IsYUFBYTtBQUNiLGlCQUFpQjtBQUNqQixnQkFBZ0IsTUFBTSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUM3RCxnQkFBZ0IsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkMsb0JBQW9CLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUN6RSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVCxhQUFhLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtBQUM3QixZQUFZLE1BQU0sR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2hDLFlBQVksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLFNBQVM7QUFDVCxRQUFRLElBQUksTUFBTSxJQUFJLEVBQUUsRUFBRTtBQUMxQixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUN2QixZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLElBQUksSUFBSSxJQUFJLEVBQUUsRUFBRTtBQUN4QixZQUFZLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDekIsU0FBUztBQUNULFFBQVEsSUFBSSxXQUFXLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtBQUMzQyxZQUFZLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDekIsZ0JBQWdCLE9BQU8sSUFBSSxDQUFDO0FBQzVCLFlBQVksSUFBSSxJQUFJLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDdEUsWUFBWSxJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDN0IsZ0JBQWdCLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDN0IsZ0JBQWdCLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDOUIsb0JBQW9CLElBQUksR0FBRyxDQUFDLENBQUM7QUFDN0IsYUFBYTtBQUNiLFlBQVksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQzdCLGdCQUFnQixRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLGdCQUFnQixJQUFJLElBQUksSUFBSSxFQUFFO0FBQzlCLG9CQUFvQixJQUFJLElBQUksRUFBRSxDQUFDO0FBQy9CLGFBQWE7QUFDYixZQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUNyRCxnQkFBZ0IsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ25DLG9CQUFvQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEQsb0JBQW9CLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFO0FBQ3hELHdCQUF3QixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkQscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQixxQkFBcUI7QUFDckIsb0JBQW9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RCxvQkFBb0IsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUU7QUFDeEQsd0JBQXdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNuRixxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixTQUFTO0FBQ1QsYUFBYSxJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO0FBQ3JELFlBQVksTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDckUsWUFBWSxJQUFJLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0MsWUFBWSxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsRUFBRTtBQUNsRCxnQkFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBb0IsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM3QixhQUFhO0FBQ2IsaUJBQWlCLElBQUksT0FBTyxJQUFJLEdBQUcsRUFBRTtBQUNyQyxnQkFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBb0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUMvQixhQUFhO0FBQ2IsU0FBUztBQUNULGFBQWEsSUFBSSxXQUFXLENBQUMscUJBQXFCLENBQUMsRUFBRTtBQUNyRCxZQUFZLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3JFLFlBQVksSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFlBQVksSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFO0FBQ3RGLGdCQUFnQixRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLGdCQUFnQixJQUFJLElBQUksSUFBSSxFQUFFO0FBQzlCLG9CQUFvQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLGFBQWE7QUFDYixpQkFBaUIsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsRUFBRTtBQUN6RSxnQkFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBb0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUMvQixhQUFhO0FBQ2IsU0FBUztBQUNULGFBQWEsSUFBSSxXQUFXLENBQUMscUJBQXFCLENBQUMsRUFBRTtBQUNyRCxZQUFZLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3JFLFlBQVksSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLFlBQVksSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFO0FBQ3RGLGdCQUFnQixRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLGdCQUFnQixJQUFJLElBQUksSUFBSSxFQUFFO0FBQzlCLG9CQUFvQixJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLGFBQWE7QUFDYixpQkFBaUIsSUFBSSxPQUFPLElBQUksR0FBRyxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksT0FBTyxJQUFJLEdBQUcsRUFBRTtBQUN6RSxnQkFBZ0IsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUM3QixnQkFBZ0IsSUFBSSxJQUFJLElBQUksRUFBRTtBQUM5QixvQkFBb0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUMvQixhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QyxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1QyxRQUFRLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtBQUMzQixZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNwRCxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RHLFlBQVksSUFBSSxTQUFTLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxFQUFFO0FBQzlELGdCQUFnQixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEQsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDaEMsZ0JBQWdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDekUsWUFBWSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsU0FBUztBQUNULFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEIsS0FBSztBQUNMOztBQ2piQSxNQUFNZCxTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsd0JBQXdCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDcEYsTUFBTSxtQkFBbUIsU0FBUyxzQ0FBc0MsQ0FBQztBQUN4RixJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU9BLFNBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDL0MsUUFBUSxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDakQsUUFBUSxJQUFJLE1BQU0sS0FBSyxTQUFTO0FBQ2hDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsUUFBUSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFFekQsUUFBUSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDeEMsUUFBUSxJQUFJLElBQUksR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUFDO0FBQ3RDLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2pELFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQztBQUN0QixTQUFTO0FBQ1QsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDakQsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3RCLFNBQVM7QUFDVCxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzVDLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLFFBS2E7QUFDYixZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN0RCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0QsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDM0QsU0FBUztBQUNULFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEIsS0FBSztBQUNMOztBQ3BDZSxNQUFNLDJCQUEyQixTQUFTLDZCQUE2QixDQUFDO0FBQ3ZGLElBQUksY0FBYyxHQUFHO0FBQ3JCLFFBQVEsT0FBTyw0QkFBNEIsQ0FBQztBQUM1QyxLQUFLO0FBQ0w7O0FDSmUsTUFBTSwwQkFBMEIsU0FBUyw0QkFBNEIsQ0FBQztBQUNyRixJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sUUFBUSxDQUFDO0FBQ3hCLEtBQUs7QUFDTDs7QUNVTyxNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQ3NELDJCQUF5QixFQUFFLENBQUMsQ0FBQztBQUNyRCxNQUFNVCxRQUFNLEdBQUcsSUFBSSxNQUFNLENBQUNTLDJCQUF5QixFQUFFLENBQUMsQ0FBQztBQUN2RCxNQUFNUixRQUFNLEdBQUcsSUFBSSxNQUFNLENBQUNTLHFCQUFtQixFQUFFLENBQUMsQ0FBQztBQUNqRCxTQUFTUCxPQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDekMsSUFBSSxPQUFPSCxRQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUNNLFNBQVNJLFdBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUM3QyxJQUFJLE9BQU9KLFFBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBQ00sU0FBU1MsMkJBQXlCLEdBQUc7QUFDNUMsSUFBSSxNQUFNLE1BQU0sR0FBR0MscUJBQW1CLEVBQUUsQ0FBQztBQUN6QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUNNLFNBQVNBLHFCQUFtQixHQUFHO0FBQ3RDLElBQUksTUFBTSxhQUFhLEdBQUcsMEJBQTBCLENBQUM7QUFDckQsUUFBUSxPQUFPLEVBQUU7QUFDakIsWUFBWSxJQUFJLGdCQUFnQixFQUFFO0FBQ2xDLFlBQVksSUFBSSwyQkFBMkIsRUFBRTtBQUM3QyxZQUFZLElBQUksbUJBQW1CLEVBQUU7QUFDckMsWUFBWSxJQUFJLDBCQUEwQixFQUFFO0FBQzVDLFlBQVksSUFBSSwwQkFBMEIsRUFBRTtBQUM1QyxTQUFTO0FBQ1QsUUFBUSxRQUFRLEVBQUUsQ0FBQyxJQUFJLDJCQUEyQixFQUFFLEVBQUUsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO0FBQ3ZGLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxhQUFhLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxLQUFLLEVBQUUsT0FBTyxZQUFZLDRCQUE0QixDQUFDLENBQUMsQ0FBQztBQUM1SCxJQUFJLE9BQU8sYUFBYSxDQUFDO0FBQ3pCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekNBLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNwQixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ1IsTUFBTSxzQkFBc0IsU0FBUyxzQ0FBc0MsQ0FBQztBQUMzRixJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDMUIsUUFBUSxPQUFPLElBQUksTUFBTSxDQUFDLG1CQUFtQjtBQUM3QyxZQUFZLHlCQUF5QjtBQUNyQyxZQUFZLHNEQUFzRDtBQUNsRSxZQUFZLDBCQUEwQjtBQUN0QyxZQUFZLGdCQUFnQjtBQUM1QixZQUFZLDBEQUEwRCxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdFLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUNsQyxRQUFRLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsUUFBUSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDL0MsUUFBUSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUM5QixZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUMzRCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUMvRCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUMvRCxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztBQUN6RSxTQUFTO0FBQ1QsYUFBYSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsRUFBRTtBQUNyQyxZQUFZLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM1QyxZQUFZLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5QyxZQUFZLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUM3QixnQkFBZ0IsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQzVDLG9CQUFvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRCxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDbEMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQ2xDLGdCQUFnQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtBQUNuQyxnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDbEMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQ25DLGdCQUFnQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRCxhQUFhO0FBQ2IsWUFBWSxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7QUFDOUIsZ0JBQWdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QyxhQUFhO0FBQ2IsaUJBQWlCLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtBQUNuQyxnQkFBZ0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLGdCQUFnQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsYUFBYTtBQUNiLFNBQVM7QUFDVCxhQUFhLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFO0FBQ3RDLFlBQVksTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3BELFlBQVksTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLFlBQVksSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7QUFDOUMsZ0JBQWdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QyxhQUFhO0FBQ2IsaUJBQWlCLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtBQUNuQyxnQkFBZ0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLGdCQUFnQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsYUFBYTtBQUNiLGlCQUFpQixJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7QUFDbkMsZ0JBQWdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMvQyxnQkFBZ0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7QUFDbkQsZ0JBQWdCLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMvQyxnQkFBZ0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO0FBQ25DLGdCQUFnQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUMsYUFBYTtBQUNiLFNBQVM7QUFDVCxhQUFhLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFO0FBQ3JDLFlBQVksTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzVDLFlBQVksSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO0FBQzdCLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDNUMsb0JBQW9CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JELGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUNsQyxnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxHQUFHLEVBQUU7QUFDbEMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELGFBQWE7QUFDYixpQkFBaUIsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQ25DLGdCQUFnQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRCxhQUFhO0FBQ2IsaUJBQWlCLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRTtBQUNsQyxnQkFBZ0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsYUFBYTtBQUNiLGlCQUFpQixJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDbkMsZ0JBQWdCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELGFBQWE7QUFDYixZQUFZLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNwRCxZQUFZLElBQUksV0FBVyxFQUFFO0FBQzdCLGdCQUFnQixNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO0FBQ2xELG9CQUFvQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEQsaUJBQWlCO0FBQ2pCLHFCQUFxQixJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7QUFDdkMsb0JBQW9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRCxvQkFBb0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGlCQUFpQjtBQUNqQixxQkFBcUIsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO0FBQ3ZDLG9CQUFvQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkQsb0JBQW9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RCxpQkFBaUI7QUFDakIscUJBQXFCLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO0FBQ3ZELG9CQUFvQixNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkQsb0JBQW9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RCxpQkFBaUI7QUFDakIscUJBQXFCLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtBQUN2QyxvQkFBb0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRCxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN4RCxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDs7QUNqSWUsTUFBTSwyQkFBMkIsU0FBUyw2QkFBNkIsQ0FBQztBQUN2RixJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sMEJBQTBCLENBQUM7QUFDMUMsS0FBSztBQUNMOztBQ0plLE1BQU0sMEJBQTBCLFNBQVMsNEJBQTRCLENBQUM7QUFDckYsSUFBSSxjQUFjLEdBQUc7QUFDckIsUUFBUSxPQUFPLFFBQVEsQ0FBQztBQUN4QixLQUFLO0FBQ0w7O0FDVU8sTUFBTSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUNELDJCQUF5QixFQUFFLENBQUMsQ0FBQztBQUNyRCxNQUFNVCxRQUFNLEdBQUcsSUFBSSxNQUFNLENBQUNTLDJCQUF5QixFQUFFLENBQUMsQ0FBQztBQUN2RCxNQUFNUixRQUFNLEdBQUcsSUFBSSxNQUFNLENBQUNTLHFCQUFtQixFQUFFLENBQUMsQ0FBQztBQUNqRCxTQUFTUCxPQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDekMsSUFBSSxPQUFPSCxRQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUNNLFNBQVNJLFdBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUM3QyxJQUFJLE9BQU9KLFFBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBQ00sU0FBU1MsMkJBQXlCLEdBQUc7QUFDNUMsSUFBSSxNQUFNLE1BQU0sR0FBR0MscUJBQW1CLEVBQUUsQ0FBQztBQUN6QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUNNLFNBQVNBLHFCQUFtQixHQUFHO0FBQ3RDLElBQUksTUFBTSxhQUFhLEdBQUcsMEJBQTBCLENBQUM7QUFDckQsUUFBUSxPQUFPLEVBQUU7QUFDakIsWUFBWSxJQUFJLGdCQUFnQixFQUFFO0FBQ2xDLFlBQVksSUFBSSwyQkFBMkIsRUFBRTtBQUM3QyxZQUFZLElBQUksbUJBQW1CLEVBQUU7QUFDckMsWUFBWSxJQUFJLDBCQUEwQixFQUFFO0FBQzVDLFlBQVksSUFBSSwwQkFBMEIsRUFBRTtBQUM1QyxTQUFTO0FBQ1QsUUFBUSxRQUFRLEVBQUUsQ0FBQyxJQUFJLDJCQUEyQixFQUFFLEVBQUUsSUFBSSwwQkFBMEIsRUFBRSxDQUFDO0FBQ3ZGLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxhQUFhLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxLQUFLLEVBQUUsT0FBTyxZQUFZLDRCQUE0QixDQUFDLENBQUMsQ0FBQztBQUM1SCxJQUFJLE9BQU8sYUFBYSxDQUFDO0FBQ3pCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcEJPLE1BQU1WLFFBQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQ1MsMkJBQXlCLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELE1BQU1SLFFBQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQ1MscUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0FBQ2pELFNBQVNQLE9BQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUN6QyxJQUFJLE9BQU9ILFFBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBQ00sU0FBU0ksV0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQzdDLElBQUksT0FBT0osUUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFDTSxTQUFTUywyQkFBeUIsR0FBRztBQUM1QyxJQUFJLE1BQU0sTUFBTSxHQUFHQyxxQkFBbUIsRUFBRSxDQUFDO0FBQ3pDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxzQkFBc0IsRUFBRSxDQUFDLENBQUM7QUFDekQsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBQ00sU0FBU0EscUJBQW1CLEdBQUc7QUFDdEMsSUFBSSxNQUFNLGFBQWEsR0FBRywwQkFBMEIsQ0FBQztBQUNyRCxRQUFRLE9BQU8sRUFBRTtBQUNqQixZQUFZLElBQUksZ0JBQWdCLEVBQUU7QUFDbEMsWUFBWSxJQUFJLGdCQUFnQixFQUFFO0FBQ2xDLFlBQVksSUFBSSwyQkFBMkIsRUFBRTtBQUM3QyxZQUFZLElBQUksMkJBQTJCLEVBQUU7QUFDN0MsWUFBWSxJQUFJLG1CQUFtQixFQUFFO0FBQ3JDLFlBQVksSUFBSSxtQkFBbUIsRUFBRTtBQUNyQyxZQUFZLElBQUksMEJBQTBCLEVBQUU7QUFDNUMsWUFBWSxJQUFJLDBCQUEwQixFQUFFO0FBQzVDLFlBQVksSUFBSSwwQkFBMEIsRUFBRTtBQUM1QyxZQUFZLElBQUksMEJBQTBCLEVBQUU7QUFDNUMsU0FBUztBQUNULFFBQVEsUUFBUSxFQUFFLENBQUMsSUFBSSwyQkFBMkIsRUFBRSxFQUFFLElBQUksMEJBQTBCLEVBQUUsQ0FBQztBQUN2RixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksYUFBYSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sS0FBSyxFQUFFLE9BQU8sWUFBWSw0QkFBNEIsQ0FBQyxDQUFDLENBQUM7QUFDNUgsSUFBSSxPQUFPLGFBQWEsQ0FBQztBQUN6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuRE8sTUFBTW9CLGFBQVcsR0FBRztBQUMzQixJQUFJLFlBQVksRUFBRSxzQkFBc0I7QUFDeEMsSUFBSSxhQUFhLEVBQUUsd0JBQXdCO0FBQzNDLElBQUksS0FBSyxFQUFFLElBQUk7QUFDZixDQUFDLENBQUM7QUFDSyxNQUFNN0Ysb0JBQWtCLEdBQUc7QUFDbEMsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQixJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ2xCLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQixJQUFJLFlBQVksRUFBRSxDQUFDO0FBQ25CLElBQUksRUFBRSxFQUFFLENBQUM7QUFDVCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ1QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksRUFBRSxFQUFFLENBQUM7QUFDVCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ1QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksRUFBRSxFQUFFLENBQUM7QUFDVCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxFQUFFLEVBQUUsQ0FBQztBQUNULElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixDQUFDLENBQUM7QUFDSyxNQUFNQyw0QkFBMEIsR0FBRztBQUMxQyxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLE9BQU8sRUFBRSxFQUFFO0FBQ2YsSUFBSSxPQUFPLEVBQUUsRUFBRTtBQUNmLElBQUksT0FBTyxFQUFFLEVBQUU7QUFDZixJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLE9BQU8sRUFBRSxFQUFFO0FBQ2YsSUFBSSxPQUFPLEVBQUUsRUFBRTtBQUNmLElBQUksT0FBTyxFQUFFLEVBQUU7QUFDZixDQUFDLENBQUM7QUFDSyxNQUFNQyxrQkFBZ0IsR0FBRztBQUNoQyxJQUFJLEdBQUdELDRCQUEwQjtBQUNqQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ1YsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEdBQUcsRUFBRSxFQUFFO0FBQ1gsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDWCxJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUNYLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxDQUFDLENBQUM7QUFDSyxNQUFNRSx5QkFBdUIsR0FBRztBQUN2QyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksR0FBRyxFQUFFLENBQUM7QUFDVixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUNWLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsSUFBSSxXQUFXLEVBQUUsRUFBRTtBQUNuQixJQUFJLFdBQVcsRUFBRSxFQUFFO0FBQ25CLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxVQUFVLEVBQUUsRUFBRTtBQUNsQixDQUFDLENBQUM7QUFDSyxNQUFNVix5QkFBdUIsR0FBRztBQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksVUFBVSxFQUFFLENBQUM7QUFDakIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksT0FBTyxFQUFFLEVBQUU7QUFDZixJQUFJLFFBQVEsRUFBRSxFQUFFO0FBQ2hCLElBQUksWUFBWSxFQUFFLEVBQUU7QUFDcEIsSUFBSSxhQUFhLEVBQUUsRUFBRTtBQUNyQixJQUFJLFdBQVcsRUFBRSxFQUFFO0FBQ25CLElBQUksWUFBWSxFQUFFLEVBQUU7QUFDcEIsSUFBSSxXQUFXLEVBQUUsRUFBRTtBQUNuQixJQUFJLFlBQVksRUFBRSxFQUFFO0FBQ3BCLElBQUksYUFBYSxFQUFFLEVBQUU7QUFDckIsSUFBSSxjQUFjLEVBQUUsRUFBRTtBQUN0QixJQUFJLFdBQVcsRUFBRSxFQUFFO0FBQ25CLElBQUksWUFBWSxFQUFFLEVBQUU7QUFDcEIsSUFBSSxZQUFZLEVBQUUsRUFBRTtBQUNwQixJQUFJLGFBQWEsRUFBRSxFQUFFO0FBQ3JCLElBQUksV0FBVyxFQUFFLEVBQUU7QUFDbkIsSUFBSSxZQUFZLEVBQUUsRUFBRTtBQUNwQixJQUFJLGFBQWEsRUFBRSxFQUFFO0FBQ3JCLElBQUksY0FBYyxFQUFFLEVBQUU7QUFDdEIsSUFBSSxhQUFhLEVBQUUsRUFBRTtBQUNyQixJQUFJLGNBQWMsRUFBRSxFQUFFO0FBQ3RCLElBQUksU0FBUyxFQUFFLEVBQUU7QUFDakIsSUFBSSxVQUFVLEVBQUUsRUFBRTtBQUNsQixJQUFJLGlCQUFpQixFQUFFLEVBQUU7QUFDekIsSUFBSSxrQkFBa0IsRUFBRSxFQUFFO0FBQzFCLElBQUksaUJBQWlCLEVBQUUsRUFBRTtBQUN6QixJQUFJLGtCQUFrQixFQUFFLEVBQUU7QUFDMUIsSUFBSSxpQkFBaUIsRUFBRSxFQUFFO0FBQ3pCLElBQUksbUJBQW1CLEVBQUUsRUFBRTtBQUMzQixJQUFJLG9CQUFvQixFQUFFLEVBQUU7QUFDNUIsSUFBSSxxQkFBcUIsRUFBRSxFQUFFO0FBQzdCLElBQUksZ0JBQWdCLEVBQUUsRUFBRTtBQUN4QixJQUFJLGlCQUFpQixFQUFFLEVBQUU7QUFDekIsSUFBSSxpQkFBaUIsRUFBRSxFQUFFO0FBQ3pCLElBQUksa0JBQWtCLEVBQUUsRUFBRTtBQUMxQixJQUFJLGtCQUFrQixFQUFFLEVBQUU7QUFDMUIsSUFBSSxtQkFBbUIsRUFBRSxFQUFFO0FBQzNCLElBQUksa0JBQWtCLEVBQUUsRUFBRTtBQUMxQixJQUFJLG1CQUFtQixFQUFFLEVBQUU7QUFDM0IsSUFBSSxrQkFBa0IsRUFBRSxFQUFFO0FBQzFCLElBQUksbUJBQW1CLEVBQUUsRUFBRTtBQUMzQixJQUFJLFdBQVcsRUFBRSxFQUFFO0FBQ25CLElBQUksWUFBWSxFQUFFLEVBQUU7QUFDcEIsSUFBSSxpQkFBaUIsRUFBRSxFQUFFO0FBQ3pCLElBQUksa0JBQWtCLEVBQUUsRUFBRTtBQUMxQixDQUFDLENBQUM7QUFDSyxNQUFNVyxzQkFBb0IsR0FBRztBQUNwQyxJQUFJLEdBQUcsRUFBRSxRQUFRO0FBQ2pCLElBQUksT0FBTyxFQUFFLFFBQVE7QUFDckIsSUFBSSxNQUFNLEVBQUUsUUFBUTtBQUNwQixJQUFJLE9BQU8sRUFBRSxRQUFRO0FBQ3JCLElBQUksT0FBTyxFQUFFLFFBQVE7QUFDckIsSUFBSSxVQUFVLEVBQUUsUUFBUTtBQUN4QixJQUFJLFVBQVUsRUFBRSxRQUFRO0FBQ3hCLElBQUksVUFBVSxFQUFFLFFBQVE7QUFDeEIsSUFBSSxVQUFVLEVBQUUsUUFBUTtBQUN4QixJQUFJLEdBQUcsRUFBRSxRQUFRO0FBQ2pCLElBQUksTUFBTSxFQUFFLFFBQVE7QUFDcEIsSUFBSSxLQUFLLEVBQUUsUUFBUTtBQUNuQixJQUFJLE1BQU0sRUFBRSxRQUFRO0FBQ3BCLElBQUksTUFBTSxFQUFFLFFBQVE7QUFDcEIsSUFBSSxPQUFPLEVBQUUsUUFBUTtBQUNyQixJQUFJLE9BQU8sRUFBRSxRQUFRO0FBQ3JCLElBQUksT0FBTyxFQUFFLFFBQVE7QUFDckIsSUFBSSxTQUFTLEVBQUUsUUFBUTtBQUN2QixJQUFJLFNBQVMsRUFBRSxRQUFRO0FBQ3ZCLElBQUksU0FBUyxFQUFFLFFBQVE7QUFDdkIsSUFBSSxHQUFHLEVBQUUsTUFBTTtBQUNmLElBQUksS0FBSyxFQUFFLE1BQU07QUFDakIsSUFBSSxJQUFJLEVBQUUsTUFBTTtBQUNoQixJQUFJLElBQUksRUFBRSxNQUFNO0FBQ2hCLElBQUksT0FBTyxFQUFFLE1BQU07QUFDbkIsSUFBSSxNQUFNLEVBQUUsTUFBTTtBQUNsQixJQUFJLE1BQU0sRUFBRSxNQUFNO0FBQ2xCLElBQUksS0FBSyxFQUFFLE1BQU07QUFDakIsSUFBSSxJQUFJLEVBQUUsS0FBSztBQUNmLElBQUksR0FBRyxFQUFFLEtBQUs7QUFDZCxJQUFJLElBQUksRUFBRSxLQUFLO0FBQ2YsSUFBSSxLQUFLLEVBQUUsS0FBSztBQUNoQixJQUFJLEtBQUssRUFBRSxLQUFLO0FBQ2hCLElBQUksTUFBTSxFQUFFLE1BQU07QUFDbEIsSUFBSSxNQUFNLEVBQUUsTUFBTTtBQUNsQixJQUFJLE1BQU0sRUFBRSxNQUFNO0FBQ2xCLElBQUksTUFBTSxFQUFFLE1BQU07QUFDbEIsSUFBSSxNQUFNLEVBQUUsTUFBTTtBQUNsQixJQUFJLFFBQVEsRUFBRSxNQUFNO0FBQ3BCLElBQUksUUFBUSxFQUFFLE1BQU07QUFDcEIsSUFBSSxPQUFPLEVBQUUsTUFBTTtBQUNuQixJQUFJLEtBQUssRUFBRSxPQUFPO0FBQ2xCLElBQUksTUFBTSxFQUFFLE9BQU87QUFDbkIsSUFBSSxPQUFPLEVBQUUsT0FBTztBQUNwQixJQUFJLE1BQU0sRUFBRSxPQUFPO0FBQ25CLElBQUksT0FBTyxFQUFFLFNBQVM7QUFDdEIsSUFBSSxRQUFRLEVBQUUsU0FBUztBQUN2QixJQUFJLFNBQVMsRUFBRSxTQUFTO0FBQ3hCLElBQUksR0FBRyxFQUFFLE1BQU07QUFDZixJQUFJLElBQUksRUFBRSxNQUFNO0FBQ2hCLElBQUksSUFBSSxFQUFFLE1BQU07QUFDaEIsSUFBSSxLQUFLLEVBQUUsTUFBTTtBQUNqQixJQUFJLEdBQUcsRUFBRSxNQUFNO0FBQ2YsSUFBSSxLQUFLLEVBQUUsTUFBTTtBQUNqQixJQUFJLE1BQU0sRUFBRSxNQUFNO0FBQ2xCLElBQUksT0FBTyxFQUFFLE1BQU07QUFDbkIsQ0FBQyxDQUFDO0FBQ0ssTUFBTUMsZ0JBQWMsR0FBRyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUNGLHlCQUF1QixDQUFDLENBQUMsMERBQTBELENBQUMsQ0FBQztBQUNsSSxTQUFTRyxvQkFBa0IsQ0FBQyxLQUFLLEVBQUU7QUFDMUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDcEMsSUFBSSxJQUFJSCx5QkFBdUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDcEQsUUFBUSxPQUFPQSx5QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QyxLQUFLO0FBQ0wsSUFBSSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDaEMsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0wsU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDL0IsUUFBUSxPQUFPLEdBQUcsQ0FBQztBQUNuQixLQUFLO0FBQ0wsU0FBUyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDL0IsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0wsU0FBUyxJQUFJLEdBQUcsS0FBSyxFQUFFLEVBQUU7QUFDekIsUUFBUSxPQUFPLENBQUMsQ0FBQztBQUNqQixLQUFLO0FBQ0wsSUFBSSxPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBQ00sTUFBTVQsd0JBQXNCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDRCx5QkFBdUIsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFDNUcsU0FBU0UsMkJBQXlCLENBQUMsS0FBSyxFQUFFO0FBQ2pELElBQUksTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3BDLElBQUksSUFBSUYseUJBQXVCLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3BELFFBQVEsT0FBT0EseUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUMsS0FBSztBQUNMLElBQUksT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUNELE1BQU1xRyxNQUFJLEdBQUcsaUNBQWlDLENBQUM7QUFDeEMsTUFBTXZGLGNBQVksR0FBRyxDQUFDLGtCQUFrQixFQUFFdUYsTUFBSSxDQUFDLGlEQUFpRCxFQUFFQSxNQUFJLENBQUMsV0FBVyxFQUFFQSxNQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUgsU0FBU3RGLFdBQVMsQ0FBQyxLQUFLLEVBQUU7QUFDakMsSUFBSSxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN4QyxRQUFRLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELEtBQUs7QUFDTCxJQUFJLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzNDLFFBQVEsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekQsUUFBUSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLEtBQUs7QUFDTCxJQUFJLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNyQyxRQUFRLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRCxRQUFRLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLEtBQUs7QUFDTCxJQUFJLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQyxJQUFJLE9BQU8sb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUNELE1BQU1DLDBCQUF3QixHQUFHLENBQUMsQ0FBQyxFQUFFSixnQkFBYyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUNELHNCQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekcsTUFBTU0sd0JBQXNCLEdBQUcsSUFBSSxNQUFNLENBQUNELDBCQUF3QixFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xFLE1BQU1HLG9CQUFrQixHQUFHLHVCQUF1QixDQUFDLENBQUMsK0JBQStCLENBQUMsRUFBRUgsMEJBQXdCLENBQUMsQ0FBQztBQUNoSCxTQUFTSyxlQUFhLENBQUMsWUFBWSxFQUFFO0FBQzVDLElBQUksTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLElBQUksSUFBSSxhQUFhLEdBQUcsWUFBWSxDQUFDO0FBQ3JDLElBQUksSUFBSSxLQUFLLEdBQUdKLHdCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzRCxJQUFJLE9BQU8sS0FBSyxFQUFFO0FBQ2xCLFFBQVFLLHlCQUF1QixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRCxRQUFRLGFBQWEsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4RSxRQUFRLEtBQUssR0FBR0wsd0JBQXNCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzNELEtBQUs7QUFDTCxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFDRCxTQUFTSyx5QkFBdUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFO0FBQ25ELElBQUksTUFBTSxHQUFHLEdBQUdULG9CQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksTUFBTSxJQUFJLEdBQUdGLHNCQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQjs7QUN4VEEsTUFBTWMsU0FBTyxHQUFHLENBQUMsc0NBQXNDLEVBQUVOLG9CQUFrQixDQUFDLENBQUMsRUFBRWlGLGFBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQzVGLE1BQU0sNEJBQTRCLFNBQVMsc0NBQXNDLENBQUM7QUFDakcsSUFBSSxtQkFBbUIsR0FBRztBQUMxQixRQUFRLE9BQU9BLGFBQVcsQ0FBQyxZQUFZLENBQUM7QUFDeEMsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUMxQixRQUFRLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXO0FBQ3pDLGNBQWMsSUFBSSxNQUFNLENBQUMzRSxTQUFPLEVBQUUyRSxhQUFXLENBQUMsS0FBSyxDQUFDO0FBQ3BELGNBQWMsSUFBSSxNQUFNLENBQUMsQ0FBQywyQkFBMkIsRUFBRTNFLFNBQU8sQ0FBQyxDQUFDLEVBQUUyRSxhQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckYsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFNBQVMsR0FBRy9FLGVBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxRQUFRLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzRixLQUFLO0FBQ0w7O0FDZk8sTUFBTWlGLHdDQUFzQyxTQUFTLHNDQUFzQyxDQUFDO0FBQ25HLElBQUksbUJBQW1CLEdBQUc7QUFDMUIsUUFBUSxPQUFPRixhQUFXLENBQUMsWUFBWSxDQUFDO0FBQ3hDLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDMUIsUUFBUSxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsRUFBRUEsYUFBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9FLEtBQUs7QUFDTCxJQUFJLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtBQUN4RCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLEtBQUs7QUFDTCxDQUFDO0FBQ00sTUFBTUcsNkNBQTJDLFNBQVNELHdDQUFzQyxDQUFDO0FBQ3hHLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUMxQixRQUFRLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFRixhQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRUEsYUFBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hILEtBQUs7QUFDTDs7QUNYQSxNQUFNMUUsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNQyxlQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU1DLGtCQUFnQixHQUFHLENBQUMsQ0FBQztBQUMzQixNQUFNQyxZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ04sTUFBTSw2QkFBNkIsU0FBUzBFLDZDQUEyQyxDQUFDO0FBQ3ZHLElBQUksa0JBQWtCLENBQUMsT0FBTyxFQUFFO0FBQ2hDLFFBQVEsT0FBTyxDQUFDLFdBQVcsRUFBRXRHLHdCQUFzQixDQUFDLENBQUMsQ0FBQztBQUN0RCxZQUFZLENBQUMsR0FBRyxDQUFDO0FBQ2pCLFlBQVksQ0FBQyw4QkFBOEIsQ0FBQztBQUM1QyxZQUFZLENBQUMsQ0FBQyxFQUFFQSx3QkFBc0IsQ0FBQyxDQUFDLENBQUM7QUFDekMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQixZQUFZLENBQUMsaUNBQWlDLENBQUM7QUFDL0MsWUFBWSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUNRLGtCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELFlBQVksQ0FBQyxHQUFHLENBQUM7QUFDakIsWUFBWSxDQUFDLG9CQUFvQixDQUFDO0FBQ2xDLFlBQVksQ0FBQyxDQUFDLEVBQUVLLGNBQVksQ0FBQyxjQUFjLENBQUM7QUFDNUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxNQUFNLEtBQUssR0FBR0wsa0JBQWdCLENBQUMsS0FBSyxDQUFDbUIsa0JBQWdCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLFFBQVEsTUFBTSxHQUFHLEdBQUcxQiwyQkFBeUIsQ0FBQyxLQUFLLENBQUN3QixZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLFFBQVEsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFO0FBQ3RCLFlBQVksS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQ0EsWUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2pFLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxLQUFLLENBQUNHLFlBQVUsQ0FBQyxFQUFFO0FBQy9CLFlBQVksTUFBTSxVQUFVLEdBQUdkLFdBQVMsQ0FBQyxLQUFLLENBQUNjLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDcEQsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNFLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxDQUFDRixlQUFhLENBQUMsRUFBRTtBQUNsQyxZQUFZLE1BQU0sT0FBTyxHQUFHekIsMkJBQXlCLENBQUMsS0FBSyxDQUFDeUIsZUFBYSxDQUFDLENBQUMsQ0FBQztBQUM1RSxZQUFZLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM5QyxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM5QyxTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0w7O0FDNUNBLE1BQU1DLGtCQUFnQixHQUFHLENBQUMsQ0FBQztBQUMzQixNQUFNQyxZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ04sTUFBTSxpQkFBaUIsU0FBU3lFLHdDQUFzQyxDQUFDO0FBQ3RGLElBQUksa0JBQWtCLENBQUMsT0FBTyxFQUFFO0FBQ2hDLFFBQVEsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUM5QixZQUFZLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQzdGLGtCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELFlBQVksQ0FBQyxJQUFJLENBQUM7QUFDbEIsWUFBWSxDQUFDLEdBQUcsQ0FBQztBQUNqQixZQUFZLENBQUMsVUFBVSxFQUFFSyxjQUFZLENBQUMsRUFBRSxDQUFDO0FBQ3pDLFlBQVksQ0FBQyxFQUFFLENBQUM7QUFDaEIsWUFBWSxDQUFDLGdDQUFnQyxDQUFDLEVBQUU7QUFDaEQsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUNjLGtCQUFnQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDaEUsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUNwQiw0QkFBMEIsQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUM1RSxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9GLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFFBQVEsTUFBTSxLQUFLLEdBQUdDLGtCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2xELFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLFFBQVEsSUFBSSxLQUFLLENBQUNvQixZQUFVLENBQUMsRUFBRTtBQUMvQixZQUFZLE1BQU0sSUFBSSxHQUFHZCxXQUFTLENBQUMsS0FBSyxDQUFDYyxZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3RELFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzlDLFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN6RSxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0w7O0FDakNlLE1BQU0sc0JBQXNCLFNBQVMsNEJBQTRCLENBQUM7QUFDakYsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzVCLFFBQVEsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFCLEtBQUs7QUFDTCxJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU91RSxhQUFXLENBQUMsS0FBSyxDQUFDO0FBQ2pDLEtBQUs7QUFDTCxJQUFJLDBCQUEwQixHQUFHO0FBQ2pDLFFBQVEsT0FBTyxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFDaEQsS0FBSztBQUNMLElBQUksY0FBYyxHQUFHO0FBQ3JCLFFBQVEsT0FBTyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7QUFDekQsS0FBSztBQUNMLElBQUksYUFBYSxHQUFHO0FBQ3BCLFFBQVEsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDbkMsS0FBSztBQUNMLElBQUksYUFBYSxHQUFHO0FBQ3BCLFFBQVEsT0FBTyxDQUFDLDZDQUE2QyxFQUFFQSxhQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUMzRixLQUFLO0FBQ0wsSUFBSSw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pELFFBQVEsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5RSxRQUFRLElBQUksVUFBVSxFQUFFO0FBQ3hCLFlBQVksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQzdDLGdCQUFnQixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BELGdCQUFnQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUM1QyxvQkFBb0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMzRSxvQkFBb0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9ELGlCQUFpQjtBQUNqQixxQkFBcUIsSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO0FBQ25DLG9CQUFvQixVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0QsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixZQUFZLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRTtBQUNwRCxnQkFBZ0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNELGdCQUFnQixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BELGdCQUFnQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRTtBQUM1QyxvQkFBb0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMzRSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFlBQVksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzNDLGdCQUFnQixVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0QsZ0JBQWdCLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEQsZ0JBQWdCLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUMvQixvQkFBb0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDMUIsS0FBSztBQUNMOztBQ2hEZSxNQUFNLHlCQUF5QixTQUFTRSx3Q0FBc0MsQ0FBQztBQUM5RixJQUFJLGtCQUFrQixDQUFDLE9BQU8sRUFBRTtBQUNoQyxRQUFRLE9BQU8sQ0FBQyxDQUFDLEVBQUVuRixvQkFBa0IsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0FBQ25FLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxTQUFTLEdBQUdFLGVBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxRQUFRLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzRCxRQUFRLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUNqRyxLQUFLO0FBQ0w7O0FDWmUsTUFBTSx1QkFBdUIsU0FBUyw2QkFBNkIsQ0FBQztBQUNuRixJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sOEJBQThCLENBQUM7QUFDOUMsS0FBSztBQUNMOztBQ0plLE1BQU0sc0JBQXNCLFNBQVMsNEJBQTRCLENBQUM7QUFDakYsSUFBSSxjQUFjLEdBQUc7QUFDckIsUUFBUSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0FBQ2xELEtBQUs7QUFDTDs7QUNIZSxNQUFNLGtCQUFrQixTQUFTa0YsNkNBQTJDLENBQUM7QUFDNUYsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7QUFDaEMsUUFBUSxPQUFPLENBQUMsd0ZBQXdGLENBQUMsQ0FBQztBQUMxRyxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNqRCxRQUFRLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0FBQzVELFFBQVEsUUFBUSxTQUFTO0FBQ3pCLFlBQVksS0FBSyxTQUFTO0FBQzFCLGdCQUFnQixPQUFPbkQsS0FBZ0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0QsWUFBWSxLQUFLLE9BQU87QUFDeEIsZ0JBQWdCLE9BQU9DLFNBQW9CLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9ELFlBQVksS0FBSyxRQUFRO0FBQ3pCLGdCQUFnQixPQUFPQyxRQUFtQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5RCxZQUFZLEtBQUssYUFBYTtBQUM5QixnQkFBZ0IsT0FBT0UsV0FBc0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLFlBQVksS0FBSyxrQkFBa0I7QUFDbkMsZ0JBQWdCLE9BQU9BLFdBQXNCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRSxZQUFZLEtBQUssV0FBVztBQUM1QixnQkFBZ0IsT0FBT2dELFlBQXVCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyRSxZQUFZLEtBQUssZUFBZTtBQUNoQyxnQkFBZ0IsT0FBT0EsWUFBdUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLFNBQVM7QUFDVCxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDs7QUN4QmUsTUFBTSxrQkFBa0IsU0FBU0QsNkNBQTJDLENBQUM7QUFDNUYsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7QUFDaEMsUUFBUSxPQUFPLENBQUMsbUtBQW1LLENBQUMsQ0FBQztBQUNyTCxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDekMsUUFBUSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDakQsUUFBUSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztBQUM1RCxRQUFRLElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRTtBQUNwQyxZQUFZLE9BQU9wRCxHQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3JELFNBQVM7QUFDVCxRQUFRLElBQUksU0FBUyxLQUFLLFNBQVMsSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFO0FBQy9ELFlBQVksT0FBT3NELE9BQWtCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pELFNBQVM7QUFDVCxRQUFRLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3ZFLFlBQVksT0FBT0MsT0FBa0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekQsU0FBUztBQUNULFFBQVEsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxFQUFFO0FBQzVDLFlBQVksT0FBT0MsSUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0RCxTQUFTO0FBQ1QsUUFBUSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRTtBQUNoRCxZQUFZLE9BQU9DLFNBQW9CLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNELFNBQVM7QUFDVCxRQUFRLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO0FBQ2xELFlBQVksT0FBT0MsZ0JBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2xFLFNBQVM7QUFDVCxRQUFRLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO0FBQ2xELFlBQVksTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pFLFlBQVksTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDM0QsWUFBWSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUMzRCxZQUFZLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRCxZQUFZLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFNBQVM7QUFDVCxRQUFRLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzNFLFlBQVksT0FBT0MsUUFBbUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUQsU0FBUztBQUNULFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsS0FBSztBQUNMOztBQ3JDQSxNQUFNOUUsY0FBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNOEIsZUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNQyxlQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ1QsTUFBTSxlQUFlLFNBQVN3Qyw2Q0FBMkMsQ0FBQztBQUN6RixJQUFJLGtCQUFrQixDQUFDLE9BQU8sRUFBRTtBQUNoQyxRQUFRLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQztBQUN0QyxZQUFZLENBQUMsV0FBVyxDQUFDO0FBQ3pCLFlBQVksQ0FBQyxrRUFBa0UsQ0FBQztBQUNoRixZQUFZLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQ2hHLG9CQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELFlBQVksQ0FBQyxvQkFBb0IsQ0FBQztBQUNsQyxZQUFZLENBQUMsaURBQWlELENBQUMsRUFBRTtBQUNqRSxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQ3VELGVBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzdELFFBQVEsTUFBTSxPQUFPLEdBQUd2RCxvQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0RCxRQUFRLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQ3lCLGNBQVksQ0FBQyxDQUFDO0FBQzNDLFFBQVEsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDK0IsZUFBYSxDQUFDLENBQUM7QUFDN0MsUUFBUSxJQUFJLFlBQVksR0FBRyxNQUFNLElBQUksT0FBTyxDQUFDO0FBQzdDLFFBQVEsWUFBWSxHQUFHLFlBQVksSUFBSSxFQUFFLENBQUM7QUFDMUMsUUFBUSxZQUFZLEdBQUcsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xELFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFFBQVEsSUFBSSxZQUFZLElBQUksU0FBUyxJQUFJLFlBQVksSUFBSSxTQUFTLElBQUksWUFBWSxJQUFJLFNBQVMsRUFBRTtBQUNqRyxZQUFZLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDOUIsU0FBUztBQUNULGFBQWEsSUFBSSxZQUFZLElBQUksV0FBVztBQUM1QyxZQUFZLFlBQVksSUFBSSxXQUFXO0FBQ3ZDLFlBQVksWUFBWSxJQUFJLFdBQVc7QUFDdkMsWUFBWSxZQUFZLElBQUksWUFBWSxFQUFFO0FBQzFDLFlBQVksUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUM5QixTQUFTO0FBQ1QsYUFBYSxJQUFJLFlBQVksSUFBSSxNQUFNLElBQUksWUFBWSxJQUFJLEtBQUssSUFBSSxZQUFZLElBQUksTUFBTSxFQUFFO0FBQzVGLFlBQVksUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUM5QixTQUFTO0FBQ1QsUUFBUSxPQUFPLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3RGLEtBQUs7QUFDTDs7QUNuQ0EsTUFBTUMscUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQzlCLE1BQU1DLHFCQUFtQixHQUFHLENBQUMsQ0FBQztBQUNmLE1BQU0sMEJBQTBCLFNBQVNzQyw2Q0FBMkMsQ0FBQztBQUNwRyxJQUFJLGtCQUFrQixDQUFDLE9BQU8sRUFBRTtBQUNoQyxRQUFRLE9BQU8sQ0FBQyxtRUFBbUUsRUFBRSxlQUFlLENBQUM1RixzQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlILEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDcUQscUJBQW1CLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsRSxRQUFRLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQ0MscUJBQW1CLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsRSxRQUFRLE1BQU0sUUFBUSxHQUFHdEQsc0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEQsUUFBUSxJQUFJLFFBQVEsSUFBSSxjQUFjLElBQUksUUFBUSxJQUFJLGFBQWEsRUFBRTtBQUNyRSxZQUFZLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxZQUFZLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsWUFBWSxPQUFPLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDL0YsU0FBUztBQUNULFFBQVEsSUFBSSxRQUFRLElBQUksV0FBVyxJQUFJLFFBQVEsSUFBSSxZQUFZLEVBQUU7QUFDakUsWUFBWSxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDakMsWUFBWSxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckMsWUFBWSxPQUFPLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDL0YsU0FBUztBQUNULFFBQVEsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDN0QsUUFBUSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLFFBQVEsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ3JDLFlBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDekQsWUFBWSxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNwRCxZQUFZLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxZQUFZLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELFNBQVM7QUFDVCxhQUFhLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMzQyxZQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsWUFBWSxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNwRCxZQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzFELFlBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVELFNBQVM7QUFDVCxhQUFhLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUMxQyxZQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDcEQsWUFBWSxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0QsWUFBWSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUMxRCxTQUFTO0FBQ1QsUUFBUSxPQUFPLFVBQVUsQ0FBQztBQUMxQixLQUFLO0FBQ0w7O0FDM0NlLE1BQU0sb0NBQW9DLFNBQVM0Riw2Q0FBMkMsQ0FBQztBQUM5RyxJQUFJLGtCQUFrQixDQUFDLE9BQU8sRUFBRTtBQUNoQyxRQUFRLE9BQU8sQ0FBQywrREFBK0QsRUFBRXBGLG9CQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZHLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQzlDLFFBQVEsSUFBSSxTQUFTLEdBQUdFLGVBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCxRQUFRLFFBQVEsTUFBTTtBQUN0QixZQUFZLEtBQUssV0FBVyxDQUFDO0FBQzdCLFlBQVksS0FBSyxTQUFTLENBQUM7QUFDM0IsWUFBWSxLQUFLLEdBQUc7QUFDcEIsZ0JBQWdCLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkQsZ0JBQWdCLE1BQU07QUFDdEIsU0FBUztBQUNULFFBQVEsT0FBTyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzNGLEtBQUs7QUFDTDs7QUNETyxNQUFNaUQsUUFBTSxHQUFHLElBQUksTUFBTSxDQUFDUywyQkFBeUIsRUFBRSxDQUFDLENBQUM7QUFDdkQsTUFBTVIsUUFBTSxHQUFHLElBQUksTUFBTSxDQUFDUyxxQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3JELFNBQVNQLE9BQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUN6QyxJQUFJLE9BQU9ILFFBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBQ00sU0FBU0ksV0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQzdDLElBQUksT0FBT0osUUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFDTSxTQUFTUywyQkFBeUIsR0FBRztBQUM1QyxJQUFJLE1BQU0sTUFBTSxHQUFHQyxxQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDckQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGlCQUFpQixFQUFFLENBQUMsQ0FBQztBQUNwRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO0FBQzdELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxvQ0FBb0MsRUFBRSxDQUFDLENBQUM7QUFDdkUsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBQ00sU0FBU0EscUJBQW1CLENBQUMsVUFBVSxHQUFHLElBQUksRUFBRTtBQUN2RCxJQUFJLE9BQU8sMEJBQTBCLENBQUM7QUFDdEMsUUFBUSxPQUFPLEVBQUU7QUFDakIsWUFBWSxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQztBQUMzQyxZQUFZLElBQUksNEJBQTRCLEVBQUU7QUFDOUMsWUFBWSxJQUFJLDZCQUE2QixFQUFFO0FBQy9DLFlBQVksSUFBSSxlQUFlLEVBQUU7QUFDakMsWUFBWSxJQUFJLHNCQUFzQixDQUFDLFVBQVUsQ0FBQztBQUNsRCxZQUFZLElBQUkseUJBQXlCLEVBQUU7QUFDM0MsU0FBUztBQUNULFFBQVEsUUFBUSxFQUFFLENBQUMsSUFBSSxzQkFBc0IsRUFBRSxFQUFFLElBQUksdUJBQXVCLEVBQUUsQ0FBQztBQUMvRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDbkI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9DTyxNQUFNekUsb0JBQWtCLEdBQUc7QUFDbEMsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLENBQUMsQ0FBQztBQUNLLE1BQU1FLGtCQUFnQixHQUFHO0FBQ2hDLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFlBQVksRUFBRSxDQUFDO0FBQ25CLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFNBQVMsRUFBRSxFQUFFO0FBQ2pCLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDYixJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsSUFBSSxXQUFXLEVBQUUsRUFBRTtBQUNuQixJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ2IsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLElBQUksV0FBVyxFQUFFLEVBQUU7QUFDbkIsSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUNiLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxDQUFDLENBQUM7QUFDSyxNQUFNQyx5QkFBdUIsR0FBRztBQUN2QyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLE9BQU8sRUFBRSxFQUFFO0FBQ2YsQ0FBQyxDQUFDO0FBQ0ssTUFBTUMsc0JBQW9CLEdBQUc7QUFDcEMsSUFBSSxLQUFLLEVBQUUsUUFBUTtBQUNuQixJQUFJLFNBQVMsRUFBRSxRQUFRO0FBQ3ZCLElBQUksVUFBVSxFQUFFLFFBQVE7QUFDeEIsSUFBSSxLQUFLLEVBQUUsUUFBUTtBQUNuQixJQUFJLE1BQU0sRUFBRSxRQUFRO0FBQ3BCLElBQUksUUFBUSxFQUFFLFFBQVE7QUFDdEIsSUFBSSxTQUFTLEVBQUUsUUFBUTtBQUN2QixJQUFJLEdBQUcsRUFBRSxNQUFNO0FBQ2YsSUFBSSxJQUFJLEVBQUUsTUFBTTtBQUNoQixJQUFJLEtBQUssRUFBRSxNQUFNO0FBQ2pCLElBQUksTUFBTSxFQUFFLE1BQU07QUFDbEIsSUFBSSxPQUFPLEVBQUUsTUFBTTtBQUNuQixJQUFJLEtBQUssRUFBRSxLQUFLO0FBQ2hCLElBQUksTUFBTSxFQUFFLEtBQUs7QUFDakIsSUFBSSxRQUFRLEVBQUUsTUFBTTtBQUNwQixJQUFJLFNBQVMsRUFBRSxNQUFNO0FBQ3JCLElBQUksS0FBSyxFQUFFLE9BQU87QUFDbEIsSUFBSSxPQUFPLEVBQUUsT0FBTztBQUNwQixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksU0FBUyxFQUFFLFNBQVM7QUFDeEIsSUFBSSxLQUFLLEVBQUUsTUFBTTtBQUNqQixJQUFJLE1BQU0sRUFBRSxNQUFNO0FBQ2xCLENBQUMsQ0FBQztBQUNLLE1BQU1DLGdCQUFjLEdBQUcsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDRix5QkFBdUIsQ0FBQyxDQUFDLDREQUE0RCxDQUFDLENBQUM7QUFDcEksU0FBU0csb0JBQWtCLENBQUMsS0FBSyxFQUFFO0FBQzFDLElBQUksTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3BDLElBQUksSUFBSUgseUJBQXVCLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3BELFFBQVEsT0FBT0EseUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUMsS0FBSztBQUNMLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxLQUFLLElBQUksR0FBRyxLQUFLLEtBQUssRUFBRTtBQUM3RCxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTCxTQUFTLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUNwQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTCxTQUFTLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNqQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTCxTQUFTLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUNsQyxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CLEtBQUs7QUFDTCxJQUFJLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFDTSxNQUFNSSxjQUFZLEdBQUcsdUVBQXVFLENBQUM7QUFDN0YsU0FBU0MsV0FBUyxDQUFDLEtBQUssRUFBRTtBQUNqQyxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRTtBQUNyQyxRQUFRLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QyxRQUFRLElBQUksVUFBVSxHQUFHLEdBQUcsRUFBRTtBQUM5QixZQUFZLElBQUksVUFBVSxHQUFHLEVBQUUsRUFBRTtBQUNqQyxnQkFBZ0IsVUFBVSxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDL0MsYUFBYTtBQUNiLGlCQUFpQjtBQUNqQixnQkFBZ0IsVUFBVSxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDL0MsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLEtBQUs7QUFDTCxJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsRUFBRTtBQUNyQyxRQUFRLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRCxRQUFRLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEMsS0FBSztBQUNMLElBQUksT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUNELE1BQU1DLDBCQUF3QixHQUFHLENBQUMsQ0FBQyxFQUFFSixnQkFBYyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUNELHNCQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDakgsTUFBTU0sd0JBQXNCLEdBQUcsSUFBSSxNQUFNLENBQUNELDBCQUF3QixFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xFLE1BQU1HLG9CQUFrQixHQUFHLHVCQUF1QixDQUFDLEVBQUUsRUFBRUgsMEJBQXdCLENBQUMsQ0FBQztBQUNqRixTQUFTSyxlQUFhLENBQUMsWUFBWSxFQUFFO0FBQzVDLElBQUksTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLElBQUksSUFBSSxhQUFhLEdBQUcsWUFBWSxDQUFDO0FBQ3JDLElBQUksSUFBSSxLQUFLLEdBQUdKLHdCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzRCxJQUFJLE9BQU8sS0FBSyxFQUFFO0FBQ2xCLFFBQVFLLHlCQUF1QixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRCxRQUFRLGFBQWEsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqRSxRQUFRLEtBQUssR0FBR0wsd0JBQXNCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzNELEtBQUs7QUFDTCxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFDRCxTQUFTSyx5QkFBdUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFO0FBQ25ELElBQUksTUFBTSxHQUFHLEdBQUdULG9CQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksTUFBTSxJQUFJLEdBQUdGLHNCQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQjs7QUN6SkEsTUFBTWMsU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLDBCQUEwQjtBQUNyRCxJQUFJLHdDQUF3QztBQUM1QyxJQUFJLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQ2xCLG9CQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLElBQUksMEJBQTBCO0FBQzlCLElBQUksa0RBQWtEO0FBQ3RELElBQUksZUFBZSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFCLE1BQU15QixjQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCLE1BQU04QixlQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU1DLGVBQWEsR0FBRyxDQUFDLENBQUM7QUFDVCxNQUFNLGVBQWUsU0FBUyxzQ0FBc0MsQ0FBQztBQUNwRixJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU90QyxTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUNxQyxlQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM3RCxRQUFRLE1BQU0sT0FBTyxHQUFHdkQsb0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdEQsUUFBUSxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7QUFDbkMsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUN5QixjQUFZLENBQUMsQ0FBQztBQUMzQyxRQUFRLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQytCLGVBQWEsQ0FBQyxDQUFDO0FBQzdDLFFBQVEsSUFBSSxJQUFJLEdBQUcsTUFBTSxJQUFJLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDM0MsUUFBUSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xDLFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFFBQVEsSUFBSSxJQUFJLElBQUksUUFBUSxFQUFFO0FBQzlCLFlBQVksUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUM5QixTQUFTO0FBQ1QsYUFBYSxJQUFJLElBQUksSUFBSSxTQUFTLElBQUksSUFBSSxJQUFJLFNBQVMsRUFBRTtBQUN6RCxZQUFZLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDOUIsU0FBUztBQUNULGFBQWEsSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFO0FBQ2pDLFlBQVksUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUM5QixTQUFTO0FBQ1QsUUFBUSxPQUFPLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3RGLEtBQUs7QUFDTDs7QUN0Q2UsTUFBTSxzQkFBc0IsU0FBUyw0QkFBNEIsQ0FBQztBQUNqRixJQUFJLGFBQWEsR0FBRztBQUNwQixRQUFRLE9BQU8sMkNBQTJDLENBQUM7QUFDM0QsS0FBSztBQUNMLElBQUksY0FBYyxHQUFHO0FBQ3JCLFFBQVEsT0FBTyx5Q0FBeUMsQ0FBQztBQUN6RCxLQUFLO0FBQ0w7O0FDUGUsTUFBTSxzQkFBc0IsU0FBUyw0QkFBNEIsQ0FBQztBQUNqRixJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sSUFBSSxNQUFNLENBQUMsNkJBQTZCLENBQUMsQ0FBQztBQUN6RCxLQUFLO0FBQ0w7O0FDSmUsTUFBTSx1QkFBdUIsU0FBUyw2QkFBNkIsQ0FBQztBQUNuRixJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sZ0JBQWdCLENBQUM7QUFDaEMsS0FBSztBQUNMOztBQ0FBLE1BQU10QyxTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQztBQUNuRCxJQUFJLGdGQUFnRjtBQUNwRixJQUFJLENBQUMseUJBQXlCLENBQUM7QUFDL0IsSUFBSSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUNoQixrQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxJQUFJLENBQUMscUJBQXFCLEVBQUVLLGNBQVksQ0FBQyxHQUFHLENBQUM7QUFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU1ZLFlBQVUsR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTUMsZUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNQyxrQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTUMsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNOLE1BQU0sNkJBQTZCLFNBQVMsc0NBQXNDLENBQUM7QUFDbEcsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPSixTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLE1BQU0sS0FBSyxHQUFHaEIsa0JBQWdCLENBQUMsS0FBSyxDQUFDbUIsa0JBQWdCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLFFBQVEsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQ0YsWUFBVSxDQUFDLENBQUMsQ0FBQztBQUNoRCxRQUFRLElBQUksR0FBRyxHQUFHLEVBQUUsRUFBRTtBQUN0QixZQUFZLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUNBLFlBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNqRSxZQUFZLE9BQU8sSUFBSSxDQUFDO0FBQ3hCLFNBQVM7QUFDVCxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1QyxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN4QyxRQUFRLElBQUksS0FBSyxDQUFDRyxZQUFVLENBQUMsRUFBRTtBQUMvQixZQUFZLE1BQU0sVUFBVSxHQUFHZCxXQUFTLENBQUMsS0FBSyxDQUFDYyxZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzVELFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BELFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzRSxZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxTQUFTO0FBQ1QsUUFBUSxJQUFJLEtBQUssQ0FBQ0YsZUFBYSxDQUFDLEVBQUU7QUFDbEMsWUFBWSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDQSxlQUFhLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzlDLFlBQVksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzlDLFNBQVM7QUFDVCxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDs7QUMxQ2UsTUFBTSxrQkFBa0IsU0FBUyxzQ0FBc0MsQ0FBQztBQUN2RixJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDMUIsUUFBUSxPQUFPLGtDQUFrQyxDQUFDO0FBQ2xELEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pELFFBQVEsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDNUQsUUFBUSxRQUFRLFNBQVM7QUFDekIsWUFBWSxLQUFLLE9BQU87QUFDeEIsZ0JBQWdCLE9BQU93QixHQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pELFlBQVksS0FBSyxLQUFLO0FBQ3RCLGdCQUFnQixPQUFPQyxLQUFnQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzRCxZQUFZLEtBQUssUUFBUTtBQUN6QixnQkFBZ0IsT0FBT0UsUUFBbUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUQsWUFBWSxLQUFLLE1BQU07QUFDdkIsZ0JBQWdCLE9BQU9ELFNBQW9CLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9ELFNBQVM7QUFDVCxRQUFRLE9BQU8sU0FBUyxDQUFDO0FBQ3pCLEtBQUs7QUFDTDs7QUNsQmUsTUFBTSxrQkFBa0IsU0FBUyxzQ0FBc0MsQ0FBQztBQUN2RixJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU8sd0VBQXdFLENBQUM7QUFDeEYsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzNDLFFBQVEsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDNUQsUUFBUSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7QUFDdEMsWUFBWSxLQUFLLE9BQU87QUFDeEIsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUM5RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssT0FBTztBQUN4QixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQzVELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxRQUFRO0FBQ3pCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLGdCQUFnQixTQUFTLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDNUQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLFlBQVk7QUFDN0IsZ0JBQWdCLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQy9ELGdCQUFnQixPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RCxnQkFBZ0IsaUJBQWlCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3RELGdCQUFnQixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDckQsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUM3RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssVUFBVSxDQUFDO0FBQzVCLFlBQVksS0FBSyxVQUFVO0FBQzNCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsU0FBUztBQUNULFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsS0FBSztBQUNMOztBQzFDZSxNQUFNLDRCQUE0QixTQUFTLHNDQUFzQyxDQUFDO0FBQ2pHLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLG9DQUFvQyxFQUFFbEMsb0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEcsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFNBQVMsR0FBR0UsZUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELFFBQVEsT0FBTyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzNGLEtBQUs7QUFDTDs7QUNJTyxNQUFNaUQsUUFBTSxHQUFHLElBQUksTUFBTSxDQUFDUywyQkFBeUIsRUFBRSxDQUFDLENBQUM7QUFDdkQsTUFBTVIsUUFBTSxHQUFHLElBQUksTUFBTSxDQUFDUyxxQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3JELFNBQVNQLE9BQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUN6QyxJQUFJLE9BQU9ILFFBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBQ00sU0FBU0ksV0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQzdDLElBQUksT0FBT0osUUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFDTSxTQUFTUywyQkFBeUIsQ0FBQyxZQUFZLEdBQUcsSUFBSSxFQUFFO0FBQy9ELElBQUksTUFBTSxNQUFNLEdBQUdDLHFCQUFtQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztBQUM1RCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDbEQsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBQ00sU0FBU0EscUJBQW1CLENBQUMsVUFBVSxHQUFHLElBQUksRUFBRSxZQUFZLEdBQUcsSUFBSSxFQUFFO0FBQzVFLElBQUksT0FBTywwQkFBMEIsQ0FBQztBQUN0QyxRQUFRLE9BQU8sRUFBRTtBQUNqQixZQUFZLElBQUkscUJBQXFCLENBQUMsWUFBWSxDQUFDO0FBQ25ELFlBQVksSUFBSSxlQUFlLEVBQUU7QUFDakMsWUFBWSxJQUFJLHNCQUFzQixFQUFFO0FBQ3hDLFlBQVksSUFBSSw2QkFBNkIsRUFBRTtBQUMvQyxZQUFZLElBQUksNEJBQTRCLEVBQUU7QUFDOUMsU0FBUztBQUNULFFBQVEsUUFBUSxFQUFFLENBQUMsSUFBSSxzQkFBc0IsRUFBRSxFQUFFLElBQUksdUJBQXVCLEVBQUUsQ0FBQztBQUMvRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDbkI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RDTyxNQUFNLFdBQVcsR0FBRztBQUMzQixJQUFJLFlBQVksRUFBRSxzQkFBc0I7QUFDeEMsSUFBSSxhQUFhLEVBQUUsd0JBQXdCO0FBQzNDLElBQUksS0FBSyxFQUFFLElBQUk7QUFDZixDQUFDLENBQUM7QUFDSyxNQUFNekUsb0JBQWtCLEdBQUc7QUFDbEMsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLFdBQVcsRUFBRSxDQUFDO0FBQ2xCLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLElBQUksVUFBVSxFQUFFLENBQUM7QUFDakIsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLElBQUksVUFBVSxFQUFFLENBQUM7QUFDakIsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNYLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLElBQUksVUFBVSxFQUFFLENBQUM7QUFDakIsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNqQixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osQ0FBQyxDQUFDO0FBQ0ssTUFBTUMsNEJBQTBCLEdBQUc7QUFDMUMsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNqQixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksVUFBVSxFQUFFLENBQUM7QUFDakIsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksU0FBUyxFQUFFLEVBQUU7QUFDakIsSUFBSSxRQUFRLEVBQUUsRUFBRTtBQUNoQixJQUFJLFFBQVEsRUFBRSxFQUFFO0FBQ2hCLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxXQUFXLEVBQUUsRUFBRTtBQUNuQixJQUFJLFdBQVcsRUFBRSxFQUFFO0FBQ25CLElBQUksU0FBUyxFQUFFLEVBQUU7QUFDakIsSUFBSSxRQUFRLEVBQUUsRUFBRTtBQUNoQixJQUFJLFFBQVEsRUFBRSxFQUFFO0FBQ2hCLENBQUMsQ0FBQztBQUNLLE1BQU1DLGtCQUFnQixHQUFHO0FBQ2hDLElBQUksR0FBR0QsNEJBQTBCO0FBQ2pDLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsSUFBSSxPQUFPLEVBQUUsRUFBRTtBQUNmLElBQUksUUFBUSxFQUFFLEVBQUU7QUFDaEIsSUFBSSxTQUFTLEVBQUUsRUFBRTtBQUNqQixJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsSUFBSSxPQUFPLEVBQUUsRUFBRTtBQUNmLENBQUMsQ0FBQztBQUNLLE1BQU1FLHlCQUF1QixHQUFHO0FBQ3ZDLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksUUFBUSxFQUFFLEVBQUU7QUFDaEIsSUFBSSxRQUFRLEVBQUUsRUFBRTtBQUNoQixJQUFJLFlBQVksRUFBRSxFQUFFO0FBQ3BCLElBQUksWUFBWSxFQUFFLEVBQUU7QUFDcEIsSUFBSSxZQUFZLEVBQUUsRUFBRTtBQUNwQixJQUFJLFlBQVksRUFBRSxFQUFFO0FBQ3BCLENBQUMsQ0FBQztBQUNLLE1BQU1WLHlCQUF1QixHQUFHO0FBQ3ZDLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLElBQUksVUFBVSxFQUFFLENBQUM7QUFDakIsSUFBSSxZQUFZLEVBQUUsQ0FBQztBQUNuQixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNqQixJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxRQUFRLEVBQUUsRUFBRTtBQUNoQixJQUFJLFVBQVUsRUFBRSxFQUFFO0FBQ2xCLElBQUksWUFBWSxFQUFFLEVBQUU7QUFDcEIsSUFBSSxjQUFjLEVBQUUsRUFBRTtBQUN0QixJQUFJLFlBQVksRUFBRSxFQUFFO0FBQ3BCLElBQUksY0FBYyxFQUFFLEVBQUU7QUFDdEIsSUFBSSxZQUFZLEVBQUUsRUFBRTtBQUNwQixJQUFJLGNBQWMsRUFBRSxFQUFFO0FBQ3RCLElBQUksY0FBYyxFQUFFLEVBQUU7QUFDdEIsSUFBSSxpQkFBaUIsRUFBRSxFQUFFO0FBQ3pCLElBQUksYUFBYSxFQUFFLEVBQUU7QUFDckIsSUFBSSxlQUFlLEVBQUUsRUFBRTtBQUN2QixJQUFJLGFBQWEsRUFBRSxFQUFFO0FBQ3JCLElBQUksZUFBZSxFQUFFLEVBQUU7QUFDdkIsSUFBSSxZQUFZLEVBQUUsRUFBRTtBQUNwQixJQUFJLGNBQWMsRUFBRSxFQUFFO0FBQ3RCLElBQUksY0FBYyxFQUFFLEVBQUU7QUFDdEIsSUFBSSxnQkFBZ0IsRUFBRSxFQUFFO0FBQ3hCLElBQUksZUFBZSxFQUFFLEVBQUU7QUFDdkIsSUFBSSxpQkFBaUIsRUFBRSxFQUFFO0FBQ3pCLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxZQUFZLEVBQUUsRUFBRTtBQUNwQixJQUFJLGdCQUFnQixFQUFFLEVBQUU7QUFDeEIsSUFBSSxrQkFBa0IsRUFBRSxFQUFFO0FBQzFCLElBQUksZ0JBQWdCLEVBQUUsRUFBRTtBQUN4QixJQUFJLGtCQUFrQixFQUFFLEVBQUU7QUFDMUIsSUFBSSxnQkFBZ0IsRUFBRSxFQUFFO0FBQ3hCLElBQUksbUJBQW1CLEVBQUUsRUFBRTtBQUMzQixJQUFJLG1CQUFtQixFQUFFLEVBQUU7QUFDM0IsSUFBSSxxQkFBcUIsRUFBRSxFQUFFO0FBQzdCLElBQUksZ0JBQWdCLEVBQUUsRUFBRTtBQUN4QixJQUFJLGtCQUFrQixFQUFFLEVBQUU7QUFDMUIsSUFBSSxnQkFBZ0IsRUFBRSxFQUFFO0FBQ3hCLElBQUksa0JBQWtCLEVBQUUsRUFBRTtBQUMxQixJQUFJLGdCQUFnQixFQUFFLEVBQUU7QUFDeEIsSUFBSSxrQkFBa0IsRUFBRSxFQUFFO0FBQzFCLElBQUksaUJBQWlCLEVBQUUsRUFBRTtBQUN6QixJQUFJLG1CQUFtQixFQUFFLEVBQUU7QUFDM0IsSUFBSSxrQkFBa0IsRUFBRSxFQUFFO0FBQzFCLElBQUksb0JBQW9CLEVBQUUsRUFBRTtBQUM1QixJQUFJLFVBQVUsRUFBRSxFQUFFO0FBQ2xCLElBQUksWUFBWSxFQUFFLEVBQUU7QUFDcEIsSUFBSSxnQkFBZ0IsRUFBRSxFQUFFO0FBQ3hCLElBQUksa0JBQWtCLEVBQUUsRUFBRTtBQUMxQixDQUFDLENBQUM7QUFDSyxNQUFNVyxzQkFBb0IsR0FBRztBQUNwQyxJQUFJLEdBQUcsRUFBRSxRQUFRO0FBQ2pCLElBQUksT0FBTyxFQUFFLFFBQVE7QUFDckIsSUFBSSxNQUFNLEVBQUUsUUFBUTtBQUNwQixJQUFJLE9BQU8sRUFBRSxRQUFRO0FBQ3JCLElBQUksT0FBTyxFQUFFLFFBQVE7QUFDckIsSUFBSSxVQUFVLEVBQUUsUUFBUTtBQUN4QixJQUFJLFVBQVUsRUFBRSxRQUFRO0FBQ3hCLElBQUksVUFBVSxFQUFFLFFBQVE7QUFDeEIsSUFBSSxFQUFFLEVBQUUsUUFBUTtBQUNoQixJQUFJLE9BQU8sRUFBRSxRQUFRO0FBQ3JCLElBQUksTUFBTSxFQUFFLFFBQVE7QUFDcEIsSUFBSSxPQUFPLEVBQUUsUUFBUTtBQUNyQixJQUFJLE9BQU8sRUFBRSxRQUFRO0FBQ3JCLElBQUksUUFBUSxFQUFFLFFBQVE7QUFDdEIsSUFBSSxRQUFRLEVBQUUsUUFBUTtBQUN0QixJQUFJLFFBQVEsRUFBRSxRQUFRO0FBQ3RCLElBQUksVUFBVSxFQUFFLFFBQVE7QUFDeEIsSUFBSSxVQUFVLEVBQUUsUUFBUTtBQUN4QixJQUFJLFVBQVUsRUFBRSxRQUFRO0FBQ3hCLElBQUksR0FBRyxFQUFFLE1BQU07QUFDZixJQUFJLE1BQU0sRUFBRSxNQUFNO0FBQ2xCLElBQUksS0FBSyxFQUFFLE1BQU07QUFDakIsSUFBSSxNQUFNLEVBQUUsTUFBTTtBQUNsQixJQUFJLE1BQU0sRUFBRSxNQUFNO0FBQ2xCLElBQUksT0FBTyxFQUFFLE1BQU07QUFDbkIsSUFBSSxPQUFPLEVBQUUsTUFBTTtBQUNuQixJQUFJLE9BQU8sRUFBRSxNQUFNO0FBQ25CLElBQUksT0FBTyxFQUFFLE1BQU07QUFDbkIsSUFBSSxJQUFJLEVBQUUsS0FBSztBQUNmLElBQUksR0FBRyxFQUFFLEtBQUs7QUFDZCxJQUFJLElBQUksRUFBRSxLQUFLO0FBQ2YsSUFBSSxHQUFHLEVBQUUsS0FBSztBQUNkLElBQUksSUFBSSxFQUFFLEtBQUs7QUFDZixJQUFJLElBQUksRUFBRSxLQUFLO0FBQ2YsSUFBSSxPQUFPLEVBQUUsTUFBTTtBQUNuQixJQUFJLEtBQUssRUFBRSxNQUFNO0FBQ2pCLElBQUksS0FBSyxFQUFFLE1BQU07QUFDakIsSUFBSSxLQUFLLEVBQUUsTUFBTTtBQUNqQixJQUFJLE1BQU0sRUFBRSxNQUFNO0FBQ2xCLElBQUksTUFBTSxFQUFFLE9BQU87QUFDbkIsSUFBSSxPQUFPLEVBQUUsT0FBTztBQUNwQixJQUFJLE1BQU0sRUFBRSxPQUFPO0FBQ25CLElBQUksTUFBTSxFQUFFLE9BQU87QUFDbkIsSUFBSSxPQUFPLEVBQUUsU0FBUztBQUN0QixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksUUFBUSxFQUFFLFNBQVM7QUFDdkIsSUFBSSxTQUFTLEVBQUUsU0FBUztBQUN4QixJQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3ZCLElBQUksR0FBRyxFQUFFLE1BQU07QUFDZixJQUFJLElBQUksRUFBRSxNQUFNO0FBQ2hCLElBQUksSUFBSSxFQUFFLE1BQU07QUFDaEIsSUFBSSxLQUFLLEVBQUUsTUFBTTtBQUNqQixJQUFJLElBQUksRUFBRSxNQUFNO0FBQ2hCLENBQUMsQ0FBQztBQUNLLE1BQU1DLGdCQUFjLEdBQUcsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDRix5QkFBdUIsQ0FBQyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7QUFDL0gsU0FBU0csb0JBQWtCLENBQUMsS0FBSyxFQUFFO0FBQzFDLElBQUksTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3BDLElBQUksSUFBSUgseUJBQXVCLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3BELFFBQVEsT0FBT0EseUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUMsS0FBSztBQUNMLElBQUksSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQy9CLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakIsS0FBSztBQUNMLFNBQVMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQy9CLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDbkIsS0FBSztBQUNMLFNBQVMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQy9CLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakIsS0FBSztBQUNMLFNBQVMsSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFO0FBQ3pCLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakIsS0FBSztBQUNMLElBQUksT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUNNLE1BQU1ULHdCQUFzQixHQUFHLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQ0QseUJBQXVCLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBQ3pHLFNBQVNFLDJCQUF5QixDQUFDLEtBQUssRUFBRTtBQUNqRCxJQUFJLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNwQyxJQUFJLElBQUlGLHlCQUF1QixDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwRCxRQUFRLE9BQU9BLHlCQUF1QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLEtBQUs7QUFDTCxJQUFJLE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLENBQUM7QUFDRCxNQUFNLElBQUksR0FBRyw0QkFBNEIsQ0FBQztBQUNuQyxNQUFNYyxjQUFZLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsaURBQWlELEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUgsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUU7QUFDeEMsSUFBSSxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN4QyxRQUFRLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELEtBQUs7QUFDTCxJQUFJLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzNDLFFBQVEsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekQsUUFBUSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLEtBQUs7QUFDTCxJQUFJLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNyQyxRQUFRLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRCxRQUFRLE9BQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLEtBQUs7QUFDTCxJQUFJLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxQyxJQUFJLE9BQU8sb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUNELE1BQU1FLDBCQUF3QixHQUFHLENBQUMsQ0FBQyxFQUFFSixnQkFBYyxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUNELHNCQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekcsTUFBTU0sd0JBQXNCLEdBQUcsSUFBSSxNQUFNLENBQUNELDBCQUF3QixFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2xFLE1BQU1HLG9CQUFrQixHQUFHLHVCQUF1QixDQUFDLENBQUMsa0NBQWtDLENBQUMsRUFBRUgsMEJBQXdCLENBQUMsQ0FBQztBQUNuSCxTQUFTSyxlQUFhLENBQUMsWUFBWSxFQUFFO0FBQzVDLElBQUksTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLElBQUksSUFBSSxhQUFhLEdBQUcsWUFBWSxDQUFDO0FBQ3JDLElBQUksSUFBSSxLQUFLLEdBQUdKLHdCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzRCxJQUFJLE9BQU8sS0FBSyxFQUFFO0FBQ2xCLFFBQVFLLHlCQUF1QixDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRCxRQUFRLGFBQWEsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4RSxRQUFRLEtBQUssR0FBR0wsd0JBQXNCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzNELEtBQUs7QUFDTCxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFDRCxTQUFTSyx5QkFBdUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFO0FBQ25ELElBQUksTUFBTSxHQUFHLEdBQUdULG9CQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLElBQUksTUFBTSxJQUFJLEdBQUdGLHNCQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQjs7QUMvVEEsTUFBTWMsU0FBTyxHQUFHLENBQUMsNENBQTRDLEVBQUVOLG9CQUFrQixDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUNsRyxNQUFNLDRCQUE0QixTQUFTLHNDQUFzQyxDQUFDO0FBQ2pHLElBQUksbUJBQW1CLEdBQUc7QUFDMUIsUUFBUSxPQUFPLFdBQVcsQ0FBQyxZQUFZLENBQUM7QUFDeEMsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUMxQixRQUFRLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXO0FBQ3pDLGNBQWMsSUFBSSxNQUFNLENBQUNNLFNBQU8sRUFBRSxHQUFHLENBQUM7QUFDdEMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxDQUFDLHNEQUFzRCxFQUFFQSxTQUFPLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoSCxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHSixlQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsUUFBUSxPQUFPLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDM0YsS0FBSztBQUNMOztBQ2ZPLE1BQU0sc0NBQXNDLFNBQVMsc0NBQXNDLENBQUM7QUFDbkcsSUFBSSxtQkFBbUIsR0FBRztBQUMxQixRQUFRLE9BQU8sV0FBVyxDQUFDLFlBQVksQ0FBQztBQUN4QyxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFO0FBQzFCLFFBQVEsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9FLEtBQUs7QUFDTCxJQUFJLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtBQUN4RCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLEtBQUs7QUFDTCxDQUFDO0FBQ00sTUFBTSwyQ0FBMkMsU0FBUyxzQ0FBc0MsQ0FBQztBQUN4RyxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDMUIsUUFBUSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEgsS0FBSztBQUNMOztBQ1hBLE1BQU1LLFlBQVUsR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTUMsZUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNQyxrQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTUMsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNOLE1BQU0sNkJBQTZCLFNBQVMsMkNBQTJDLENBQUM7QUFDdkcsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7QUFDaEMsUUFBUSxRQUFRLENBQUMsY0FBYyxFQUFFNUIsd0JBQXNCLENBQUMsQ0FBQyxDQUFDO0FBQzFELFlBQVksQ0FBQyxHQUFHLENBQUM7QUFDakIsWUFBWSxDQUFDLDhCQUE4QixDQUFDO0FBQzVDLFlBQVksQ0FBQyxDQUFDLEVBQUVBLHdCQUFzQixDQUFDLENBQUMsQ0FBQztBQUN6QyxZQUFZLENBQUMsRUFBRSxDQUFDO0FBQ2hCLFlBQVksQ0FBQyxpQ0FBaUMsQ0FBQztBQUMvQyxZQUFZLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQ1Esa0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsWUFBWSxDQUFDLEdBQUcsQ0FBQztBQUNqQixZQUFZLENBQUMsb0JBQW9CLENBQUM7QUFDbEMsWUFBWSxDQUFDLENBQUMsRUFBRUssY0FBWSxDQUFDLGNBQWMsQ0FBQztBQUM1QyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbEIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLE1BQU0sS0FBSyxHQUFHTCxrQkFBZ0IsQ0FBQyxLQUFLLENBQUNtQixrQkFBZ0IsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUUsUUFBUSxNQUFNLEdBQUcsR0FBRzFCLDJCQUF5QixDQUFDLEtBQUssQ0FBQ3dCLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDakUsUUFBUSxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUU7QUFDdEIsWUFBWSxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDQSxZQUFVLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDakUsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUMsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEMsUUFBUSxJQUFJLEtBQUssQ0FBQ0csWUFBVSxDQUFDLEVBQUU7QUFDL0IsWUFBWSxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUNBLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDbkUsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDcEQsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNyRixZQUFZLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxTQUFTO0FBQ1QsUUFBUSxJQUFJLEtBQUssQ0FBQ0YsZUFBYSxDQUFDLEVBQUU7QUFDbEMsWUFBWSxNQUFNLE9BQU8sR0FBR3pCLDJCQUF5QixDQUFDLEtBQUssQ0FBQ3lCLGVBQWEsQ0FBQyxDQUFDLENBQUM7QUFDNUUsWUFBWSxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDOUMsWUFBWSxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDOUMsU0FBUztBQUNULFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEIsS0FBSztBQUNMOztBQzVDQSxNQUFNQyxrQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTUMsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNOLE1BQU0saUJBQWlCLFNBQVMsc0NBQXNDLENBQUM7QUFDdEYsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7QUFDaEMsUUFBUSxRQUFRLENBQUMsY0FBYyxDQUFDO0FBQ2hDLFlBQVksQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDcEIsa0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsWUFBWSxDQUFDLElBQUksQ0FBQztBQUNsQixZQUFZLENBQUMsR0FBRyxDQUFDO0FBQ2pCLFlBQVksQ0FBQyxVQUFVLEVBQUVLLGNBQVksQ0FBQyxFQUFFLENBQUM7QUFDekMsWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUNoQixZQUFZLENBQUMsZ0NBQWdDLENBQUMsRUFBRTtBQUNoRCxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQ2Msa0JBQWdCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNoRSxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQ3BCLDRCQUEwQixDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQzVFLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0YsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckMsUUFBUSxNQUFNLEtBQUssR0FBR0Msa0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEQsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUMsUUFBUSxJQUFJLEtBQUssQ0FBQ29CLFlBQVUsQ0FBQyxFQUFFO0FBQy9CLFlBQVksTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDQSxZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQzdELFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzlDLFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkYsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0MsU0FBUztBQUNULFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEIsS0FBSztBQUNMOztBQ2pDZSxNQUFNLHNCQUFzQixTQUFTLDRCQUE0QixDQUFDO0FBQ2pGLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRTtBQUM1QixRQUFRLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxQixLQUFLO0FBQ0wsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUM7QUFDakMsS0FBSztBQUNMLElBQUksMEJBQTBCLEdBQUc7QUFDakMsUUFBUSxPQUFPLENBQUMsOEJBQThCLENBQUMsQ0FBQztBQUNoRCxLQUFLO0FBQ0wsSUFBSSxjQUFjLEdBQUc7QUFDckIsUUFBUSxPQUFPLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUN6RCxLQUFLO0FBQ0wsSUFBSSxhQUFhLEdBQUc7QUFDcEIsUUFBUSxPQUFPLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQUNqRCxLQUFLO0FBQ0wsSUFBSSxhQUFhLEdBQUc7QUFDcEIsUUFBUSxPQUFPLENBQUMscURBQXFELEVBQUUsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDbkcsS0FBSztBQUNMLElBQUksNEJBQTRCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqRCxRQUFRLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUUsUUFBUSxJQUFJLFVBQVUsRUFBRTtBQUN4QixZQUFZLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUM3QyxnQkFBZ0IsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRCxnQkFBZ0IsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDNUMsb0JBQW9CLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDM0Usb0JBQW9CLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvRCxpQkFBaUI7QUFDakIscUJBQXFCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtBQUNuQyxvQkFBb0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9ELGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsWUFBWSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTtBQUNuRixnQkFBZ0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNELGdCQUFnQixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BELGdCQUFnQixJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRTtBQUM1QyxvQkFBb0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMzRSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFlBQVksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzVDLGdCQUFnQixVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDM0QsZ0JBQWdCLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEQsZ0JBQWdCLElBQUksSUFBSSxHQUFHLEVBQUUsRUFBRTtBQUMvQixvQkFBb0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDMUIsS0FBSztBQUNMOztBQ2hEZSxNQUFNLHlCQUF5QixTQUFTLHNDQUFzQyxDQUFDO0FBQzlGLElBQUksa0JBQWtCLENBQUMsT0FBTyxFQUFFO0FBQ2hDLFFBQVEsT0FBTyxDQUFDLENBQUMsRUFBRVYsb0JBQWtCLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUNsRSxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHRSxlQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsUUFBUSxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0QsUUFBUSxPQUFPLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDakcsS0FBSztBQUNMOztBQ1plLE1BQU0sdUJBQXVCLFNBQVMsNkJBQTZCLENBQUM7QUFDbkYsSUFBSSxjQUFjLEdBQUc7QUFDckIsUUFBUSxPQUFPLDhCQUE4QixDQUFDO0FBQzlDLEtBQUs7QUFDTDs7QUNKZSxNQUFNLHNCQUFzQixTQUFTLDRCQUE0QixDQUFDO0FBQ2pGLElBQUksY0FBYyxHQUFHO0FBQ3JCLFFBQVEsT0FBTyxJQUFJLE1BQU0sQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztBQUN0RCxLQUFLO0FBQ0w7O0FDSGUsTUFBTSxrQkFBa0IsU0FBUywyQ0FBMkMsQ0FBQztBQUM1RixJQUFJLGtCQUFrQixDQUFDLE9BQU8sRUFBRTtBQUNoQyxRQUFRLE9BQU8sQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO0FBQy9HLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pELFFBQVEsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDNUQsUUFBUSxRQUFRLFNBQVM7QUFDekIsWUFBWSxLQUFLLFVBQVU7QUFDM0IsZ0JBQWdCLE9BQU8rQixLQUFnQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzRCxZQUFZLEtBQUssT0FBTztBQUN4QixnQkFBZ0IsT0FBT0MsU0FBb0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0QsWUFBWSxLQUFLLFFBQVE7QUFDekIsZ0JBQWdCLE9BQU9DLFFBQW1CLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlELFlBQVksS0FBSyxhQUFhO0FBQzlCLGdCQUFnQixPQUFPRSxXQUFzQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEUsWUFBWSxLQUFLLGtCQUFrQjtBQUNuQyxnQkFBZ0IsT0FBT0EsV0FBc0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLFlBQVksS0FBSyxXQUFXO0FBQzVCLGdCQUFnQixPQUFPZ0QsWUFBdUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLFlBQVksS0FBSyxlQUFlO0FBQ2hDLGdCQUFnQixPQUFPQSxZQUF1QixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckUsU0FBUztBQUNULFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsS0FBSztBQUNMOztBQ3hCZSxNQUFNLGtCQUFrQixTQUFTLDJDQUEyQyxDQUFDO0FBQzVGLElBQUksa0JBQWtCLENBQUMsT0FBTyxFQUFFO0FBQ2hDLFFBQVEsT0FBTyxDQUFDLGlLQUFpSyxDQUFDLENBQUM7QUFDbkwsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQ3pDLFFBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pELFFBQVEsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDNUQsUUFBUSxJQUFJLFNBQVMsS0FBSyxPQUFPLEVBQUU7QUFDbkMsWUFBWSxPQUFPckQsR0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyRCxTQUFTO0FBQ1QsUUFBUSxJQUFJLFNBQVMsS0FBSyxTQUFTLElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRTtBQUMvRCxZQUFZLE9BQU9zRCxPQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN6RCxTQUFTO0FBQ1QsUUFBUSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO0FBQ3pHLFlBQVksT0FBT0MsT0FBa0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekQsU0FBUztBQUNULFFBQVEsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO0FBQzNDLFlBQVksT0FBT0MsSUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0RCxTQUFTO0FBQ1QsUUFBUSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtBQUMvQyxZQUFZLE9BQU9DLFNBQW9CLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNELFNBQVM7QUFDVCxRQUFRLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO0FBQ2xELFlBQVksT0FBT0MsZ0JBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2xFLFNBQVM7QUFDVCxRQUFRLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO0FBQ2pELFlBQVksTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pFLFlBQVksTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDM0QsWUFBWSxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUMzRCxZQUFZLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRCxZQUFZLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLFNBQVM7QUFDVCxRQUFRLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBRTtBQUM1QyxZQUFZLE9BQU9DLFFBQW1CLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFELFNBQVM7QUFDVCxRQUFRLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzNFLFlBQVksT0FBT0EsUUFBbUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUQsU0FBUztBQUNULFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsS0FBSztBQUNMOztBQ3hDQSxNQUFNOUUsY0FBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNOEIsZUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNQyxlQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ1QsTUFBTSxlQUFlLFNBQVMsMkNBQTJDLENBQUM7QUFDekYsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7QUFDaEMsUUFBUSxRQUFRLENBQUMsb0JBQW9CLENBQUM7QUFDdEMsWUFBWSxDQUFDLFdBQVcsQ0FBQztBQUN6QixZQUFZLENBQUMsV0FBVyxDQUFDO0FBQ3pCLFlBQVksQ0FBQyx1RkFBdUYsQ0FBQztBQUNyRyxZQUFZLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQ3hELG9CQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELFlBQVksQ0FBQyxvQkFBb0IsQ0FBQztBQUNsQyxZQUFZLENBQUMseURBQXlELENBQUMsRUFBRTtBQUN6RSxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQ3VELGVBQWEsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7QUFDbkUsUUFBUSxNQUFNLE9BQU8sR0FBR3ZELG9CQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RELFFBQVEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDeUIsY0FBWSxDQUFDLENBQUM7QUFDM0MsUUFBUSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMrQixlQUFhLENBQUMsQ0FBQztBQUM3QyxRQUFRLElBQUksWUFBWSxHQUFHLE1BQU0sSUFBSSxPQUFPLENBQUM7QUFDN0MsUUFBUSxZQUFZLEdBQUcsWUFBWSxJQUFJLEVBQUUsQ0FBQztBQUMxQyxRQUFRLFlBQVksR0FBRyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUN4RCxRQUFRLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztBQUM1QixRQUFRLElBQUksWUFBWSxJQUFJLFVBQVU7QUFDdEMsWUFBWSxZQUFZLElBQUksU0FBUztBQUNyQyxZQUFZLFlBQVksSUFBSSxZQUFZO0FBQ3hDLFlBQVksWUFBWSxJQUFJLGNBQWMsRUFBRTtBQUM1QyxZQUFZLFFBQVEsR0FBRyxNQUFNLENBQUM7QUFDOUIsU0FBUztBQUNULGFBQWEsSUFBSSxZQUFZLElBQUksWUFBWSxJQUFJLFlBQVksSUFBSSxXQUFXLEVBQUU7QUFDOUUsWUFBWSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQzlCLFNBQVM7QUFDVCxhQUFhLElBQUksWUFBWSxJQUFJLEtBQUssSUFBSSxZQUFZLElBQUksT0FBTyxJQUFJLFlBQVksSUFBSSxPQUFPLEVBQUU7QUFDOUYsWUFBWSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQzlCLFNBQVM7QUFDVCxRQUFRLE9BQU8sZ0NBQWdDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdEYsS0FBSztBQUNMOztBQ3BDQSxNQUFNQyxxQkFBbUIsR0FBRyxDQUFDLENBQUM7QUFDOUIsTUFBTUMscUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsTUFBTSwwQkFBMEIsU0FBUywyQ0FBMkMsQ0FBQztBQUNwRyxJQUFJLGtCQUFrQixDQUFDLE9BQU8sRUFBRTtBQUNoQyxRQUFRLFFBQVEsQ0FBQyxrSUFBa0ksQ0FBQztBQUNwSixZQUFZLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQ3RELHNCQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDbEUsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUNxRCxxQkFBbUIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xFLFFBQVEsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDQyxxQkFBbUIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xFLFFBQVEsTUFBTSxRQUFRLEdBQUd0RCxzQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4RCxRQUFRLElBQUksUUFBUSxJQUFJLGVBQWU7QUFDdkMsWUFBWSxRQUFRLElBQUksY0FBYztBQUN0QyxZQUFZLFFBQVEsSUFBSSxjQUFjO0FBQ3RDLFlBQVksUUFBUSxJQUFJLFlBQVksRUFBRTtBQUN0QyxZQUFZLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxZQUFZLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsWUFBWSxPQUFPLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDL0YsU0FBUztBQUNULFFBQVEsSUFBSSxRQUFRLElBQUksYUFBYTtBQUNyQyxZQUFZLFFBQVEsSUFBSSxZQUFZO0FBQ3BDLFlBQVksUUFBUSxJQUFJLFlBQVk7QUFDcEMsWUFBWSxRQUFRLElBQUksVUFBVSxFQUFFO0FBQ3BDLFlBQVksTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFlBQVksU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksT0FBTyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9GLFNBQVM7QUFDVCxRQUFRLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0FBQzdELFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNqRSxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNyQyxZQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDcEQsWUFBWSxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0QsWUFBWSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN6RCxTQUFTO0FBQ1QsYUFBYSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDM0MsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDcEQsWUFBWSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUMxRCxZQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RCxTQUFTO0FBQ1QsYUFBYSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDMUMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixZQUFZLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDMUQsU0FBUztBQUNULFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDMUIsS0FBSztBQUNMOztBQ2xEZSxNQUFNLG9DQUFvQyxTQUFTLDJDQUEyQyxDQUFDO0FBQzlHLElBQUksa0JBQWtCLENBQUMsT0FBTyxFQUFFO0FBQ2hDLFFBQVEsT0FBTyxDQUFDLDREQUE0RCxFQUFFUSxvQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRyxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM5QyxRQUFRLElBQUksU0FBUyxHQUFHRSxlQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsUUFBUSxRQUFRLE1BQU07QUFDdEIsWUFBWSxLQUFLLFNBQVMsQ0FBQztBQUMzQixZQUFZLEtBQUssUUFBUSxDQUFDO0FBQzFCLFlBQVksS0FBSyxHQUFHO0FBQ3BCLGdCQUFnQixTQUFTLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZELGdCQUFnQixNQUFNO0FBQ3RCLFNBQVM7QUFDVCxRQUFRLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzRixLQUFLO0FBQ0w7O0FDQU8sTUFBTWlELFFBQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQ1MsMkJBQXlCLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELE1BQU1SLFFBQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQ1MscUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNyRCxTQUFTRCwyQkFBeUIsR0FBRztBQUM1QyxJQUFJLE1BQU0sTUFBTSxHQUFHQyxxQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxrQkFBa0IsRUFBRSxDQUFDLENBQUM7QUFDckQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLGlCQUFpQixFQUFFLENBQUMsQ0FBQztBQUNwRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksMEJBQTBCLEVBQUUsQ0FBQyxDQUFDO0FBQzdELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxvQ0FBb0MsRUFBRSxDQUFDLENBQUM7QUFDdkUsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBQ00sU0FBU0EscUJBQW1CLENBQUMsVUFBVSxFQUFFO0FBQ2hELElBQUksT0FBTywwQkFBMEIsQ0FBQztBQUN0QyxRQUFRLE9BQU8sRUFBRTtBQUNqQixZQUFZLElBQUksZUFBZSxFQUFFO0FBQ2pDLFlBQVksSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7QUFDM0MsWUFBWSxJQUFJLDRCQUE0QixFQUFFO0FBQzlDLFlBQVksSUFBSSw2QkFBNkIsRUFBRTtBQUMvQyxZQUFZLElBQUksZUFBZSxFQUFFO0FBQ2pDLFlBQVksSUFBSSxzQkFBc0IsQ0FBQyxVQUFVLENBQUM7QUFDbEQsWUFBWSxJQUFJLHlCQUF5QixFQUFFO0FBQzNDLFNBQVM7QUFDVCxRQUFRLFFBQVEsRUFBRSxDQUFDLElBQUksc0JBQXNCLEVBQUUsRUFBRSxJQUFJLHVCQUF1QixFQUFFLENBQUM7QUFDL0UsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25CLENBQUM7QUFDTSxTQUFTUCxPQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDekMsSUFBSSxPQUFPSCxRQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUNNLFNBQVNJLFdBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUM3QyxJQUFJLE9BQU9KLFFBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaERPLE1BQU0vRCxvQkFBa0IsR0FBRztBQUNsQyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2pCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osQ0FBQyxDQUFDO0FBQ0ssTUFBTSwwQkFBMEIsR0FBRyxFQUFFLENBQUM7QUFDdEMsTUFBTUUsa0JBQWdCLEdBQUc7QUFDaEMsSUFBSSxHQUFHLDBCQUEwQjtBQUNqQyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxVQUFVLEVBQUUsQ0FBQztBQUNqQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksT0FBTyxFQUFFLENBQUM7QUFDZCxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUNsQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxTQUFTLEVBQUUsRUFBRTtBQUNqQixJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ2IsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUNiLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLFVBQVUsRUFBRSxFQUFFO0FBQ2xCLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDYixJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLENBQUMsQ0FBQztBQUNLLE1BQU1DLHlCQUF1QixHQUFHO0FBQ3ZDLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxFQUFFO0FBQ2YsSUFBSSxRQUFRLEVBQUUsRUFBRTtBQUNoQixJQUFJLFFBQVEsRUFBRSxFQUFFO0FBQ2hCLENBQUMsQ0FBQztBQUNLLE1BQU0sdUJBQXVCLEdBQUc7QUFDdkMsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksUUFBUSxFQUFFLENBQUM7QUFDZixJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEIsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLFFBQVEsRUFBRSxFQUFFO0FBQ2hCLElBQUksWUFBWSxFQUFFLEVBQUU7QUFDcEIsSUFBSSxZQUFZLEVBQUUsRUFBRTtBQUNwQixJQUFJLGFBQWEsRUFBRSxFQUFFO0FBQ3JCLElBQUksaUJBQWlCLEVBQUUsRUFBRTtBQUN6QixJQUFJLGNBQWMsRUFBRSxFQUFFO0FBQ3RCLElBQUksWUFBWSxFQUFFLEVBQUU7QUFDcEIsSUFBSSxpQkFBaUIsRUFBRSxFQUFFO0FBQ3pCLElBQUksY0FBYyxFQUFFLEVBQUU7QUFDdEIsSUFBSSxnQkFBZ0IsRUFBRSxFQUFFO0FBQ3hCLElBQUksV0FBVyxFQUFFLEVBQUU7QUFDbkIsSUFBSSxhQUFhLEVBQUUsRUFBRTtBQUNyQixJQUFJLGNBQWMsRUFBRSxFQUFFO0FBQ3RCLElBQUksZUFBZSxFQUFFLEVBQUU7QUFDdkIsSUFBSSxrQkFBa0IsRUFBRSxFQUFFO0FBQzFCLElBQUksaUJBQWlCLEVBQUUsRUFBRTtBQUN6QixJQUFJLGVBQWUsRUFBRSxFQUFFO0FBQ3ZCLElBQUksZ0JBQWdCLEVBQUUsRUFBRTtBQUN4QixJQUFJLGNBQWMsRUFBRSxFQUFFO0FBQ3RCLElBQUksZUFBZSxFQUFFLEVBQUU7QUFDdkIsSUFBSSxZQUFZLEVBQUUsRUFBRTtBQUNwQixJQUFJLGNBQWMsRUFBRSxFQUFFO0FBQ3RCLENBQUMsQ0FBQztBQUNLLE1BQU1DLHNCQUFvQixHQUFHO0FBQ3BDLElBQUksS0FBSyxFQUFFLFFBQVE7QUFDbkIsSUFBSSxTQUFTLEVBQUUsUUFBUTtBQUN2QixJQUFJLFNBQVMsRUFBRSxRQUFRO0FBQ3ZCLElBQUksS0FBSyxFQUFFLFFBQVE7QUFDbkIsSUFBSSxNQUFNLEVBQUUsUUFBUTtBQUNwQixJQUFJLFFBQVEsRUFBRSxRQUFRO0FBQ3RCLElBQUksR0FBRyxFQUFFLE1BQU07QUFDZixJQUFJLElBQUksRUFBRSxNQUFNO0FBQ2hCLElBQUksR0FBRyxFQUFFLE1BQU07QUFDZixJQUFJLEtBQUssRUFBRSxNQUFNO0FBQ2pCLElBQUksS0FBSyxFQUFFLE1BQU07QUFDakIsSUFBSSxRQUFRLEVBQUUsS0FBSztBQUNuQixJQUFJLFFBQVEsRUFBRSxLQUFLO0FBQ25CLElBQUksV0FBVyxFQUFFLE1BQU07QUFDdkIsSUFBSSxXQUFXLEVBQUUsTUFBTTtBQUN2QixJQUFJLE1BQU0sRUFBRSxPQUFPO0FBQ25CLElBQUksV0FBVyxFQUFFLFNBQVM7QUFDMUIsSUFBSSxXQUFXLEVBQUUsU0FBUztBQUMxQixJQUFJLE1BQU0sRUFBRSxNQUFNO0FBQ2xCLElBQUksTUFBTSxFQUFFLE1BQU07QUFDbEIsQ0FBQyxDQUFDO0FBQ0ssTUFBTUMsZ0JBQWMsR0FBRyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUNGLHlCQUF1QixDQUFDLENBQUMsd0hBQXdILENBQUMsQ0FBQztBQUNoTSxTQUFTRyxvQkFBa0IsQ0FBQyxLQUFLLEVBQUU7QUFDMUMsSUFBSSxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDcEMsSUFBSSxJQUFJSCx5QkFBdUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDcEQsUUFBUSxPQUFPQSx5QkFBdUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1QyxLQUFLO0FBQ0wsU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEtBQUssRUFBRTtBQUM1QyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTCxTQUFTLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUNsQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTCxTQUFTLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNoQyxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ25CLEtBQUs7QUFDTCxTQUFTLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNoQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTCxTQUFTLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNqQyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLEtBQUs7QUFDTCxJQUFJLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFDTSxNQUFNLHNCQUFzQixHQUFHLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7QUFDdEgsU0FBUyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUU7QUFDakQsSUFBSSxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbEMsSUFBSSxJQUFJLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRTtBQUNwRCxRQUFRLE9BQU8sdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUMsS0FBSztBQUNMLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMseURBQXlELEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDckYsSUFBSSxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBQ00sTUFBTUksY0FBWSxHQUFHLENBQUMsdUVBQXVFLENBQUMsQ0FBQztBQUMvRixTQUFTQyxXQUFTLENBQUMsS0FBSyxFQUFFO0FBQ2pDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzNCLFFBQVEsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLFFBQVEsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLEtBQUs7QUFDTCxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUM3QixRQUFRLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzQyxRQUFRLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEMsS0FBSztBQUNMLElBQUksSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ2hDLFFBQVEsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLFFBQVEsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0IsS0FBSztBQUNMLElBQUksTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFDLElBQUksT0FBTyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBQ0QsTUFBTUMsMEJBQXdCLEdBQUcsQ0FBQyxDQUFDLEVBQUVKLGdCQUFjLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQ0Qsc0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RyxNQUFNTSx3QkFBc0IsR0FBRyxJQUFJLE1BQU0sQ0FBQ0QsMEJBQXdCLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEUsTUFBTUcsb0JBQWtCLEdBQUcsdUJBQXVCLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFSCwwQkFBd0IsQ0FBQyxDQUFDO0FBQzlHLFNBQVNLLGVBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDNUMsSUFBSSxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUM7QUFDckMsSUFBSSxJQUFJLEtBQUssR0FBR0osd0JBQXNCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzNELElBQUksT0FBTyxLQUFLLEVBQUU7QUFDbEIsUUFBUUsseUJBQXVCLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xELFFBQVEsYUFBYSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hFLFFBQVEsS0FBSyxHQUFHTCx3QkFBc0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDM0QsS0FBSztBQUNMLElBQUksT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQztBQUNELFNBQVNLLHlCQUF1QixDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUU7QUFDbkQsSUFBSSxNQUFNLEdBQUcsR0FBR1Qsb0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsSUFBSSxNQUFNLElBQUksR0FBR0Ysc0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFCOztBQ25NQSxNQUFNLG1CQUFtQixHQUFHLElBQUksTUFBTSxDQUFDLENBQUMscUJBQXFCLENBQUM7QUFDOUQsSUFBSSxDQUFDLDZFQUE2RSxFQUFFUSxvQkFBa0IsQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN6SCxNQUFNLHNCQUFzQixHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsNkVBQTZFLEVBQUVBLG9CQUFrQixDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hKLE1BQU0sNEJBQTRCLFNBQVMsc0NBQXNDLENBQUM7QUFDakcsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFO0FBQzFCLFFBQVEsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxzQkFBc0IsR0FBRyxtQkFBbUIsQ0FBQztBQUN6RixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHRSxlQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsUUFBUSxPQUFPLGlCQUFpQixDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDM0YsS0FBSztBQUNMOztBQ1JBLE1BQU1JLFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLGVBQWUsQ0FBQztBQUM1QyxJQUFJLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixDQUFDLENBQUMsQ0FBQztBQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ1QsSUFBSSxDQUFDLDhDQUE4QyxDQUFDO0FBQ3BELElBQUksQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLElBQUksSUFBSTtBQUNSLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQztBQUN0QyxJQUFJLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQ2hCLGtCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLElBQUksS0FBSztBQUNULElBQUksQ0FBQyxrQkFBa0IsQ0FBQztBQUN4QixJQUFJLENBQUMsQ0FBQyxFQUFFSyxjQUFZLENBQUMsY0FBYyxDQUFDO0FBQ3BDLElBQUksSUFBSTtBQUNSLElBQUksV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU1ZLFlBQVUsR0FBRyxDQUFDLENBQUM7QUFDckIsTUFBTUMsZUFBYSxHQUFHLENBQUMsQ0FBQztBQUN4QixNQUFNQyxrQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTUMsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNOLE1BQU0sNkJBQTZCLFNBQVMsc0NBQXNDLENBQUM7QUFDbEcsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPSixTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxRQUFRLE1BQU0sS0FBSyxHQUFHaEIsa0JBQWdCLENBQUMsS0FBSyxDQUFDbUIsa0JBQWdCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLFFBQVEsTUFBTSxHQUFHLEdBQUcseUJBQXlCLENBQUMsS0FBSyxDQUFDRixZQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLFFBQVEsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFO0FBQ3RCLFlBQVksS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQ0EsWUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2pFLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVDLFFBQVEsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLFFBQVEsSUFBSSxLQUFLLENBQUNHLFlBQVUsQ0FBQyxFQUFFO0FBQy9CLFlBQVksTUFBTSxVQUFVLEdBQUdkLFdBQVMsQ0FBQyxLQUFLLENBQUNjLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDcEQsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNFLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxDQUFDRixlQUFhLENBQUMsRUFBRTtBQUNsQyxZQUFZLE1BQU0sT0FBTyxHQUFHLHlCQUF5QixDQUFDLEtBQUssQ0FBQ0EsZUFBYSxDQUFDLENBQUMsQ0FBQztBQUM1RSxZQUFZLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUM5QyxZQUFZLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUM5QyxTQUFTO0FBQ1QsUUFBUSxPQUFPLE1BQU0sQ0FBQztBQUN0QixLQUFLO0FBQ0w7O0FDOUNBLE1BQU1GLFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUNoQixrQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRSxJQUFJLG9CQUFvQjtBQUN4QixJQUFJLENBQUMsQ0FBQyxFQUFFLHNCQUFzQixDQUFDLHNCQUFzQixDQUFDO0FBQ3RELElBQUksS0FBSztBQUNULElBQUksaUNBQWlDO0FBQ3JDLElBQUksQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxDQUFDO0FBQ3JDLElBQUksSUFBSTtBQUNSLElBQUksS0FBSztBQUNULElBQUksb0JBQW9CO0FBQ3hCLElBQUksQ0FBQyxDQUFDLEVBQUVLLGNBQVksQ0FBQyxDQUFDLENBQUM7QUFDdkIsSUFBSSxJQUFJO0FBQ1IsSUFBSSxxQkFBcUIsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoQyxNQUFNYyxrQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTUYsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNyQixNQUFNQyxlQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLE1BQU1FLFlBQVUsR0FBRyxDQUFDLENBQUM7QUFDTixNQUFNLDZCQUE2QixTQUFTLHNDQUFzQyxDQUFDO0FBQ2xHLElBQUksWUFBWSxHQUFHO0FBQ25CLFFBQVEsT0FBT0osU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxLQUFLLEdBQUdoQixrQkFBZ0IsQ0FBQyxLQUFLLENBQUNtQixrQkFBZ0IsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUUsUUFBUSxNQUFNLEdBQUcsR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLENBQUNGLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDakUsUUFBUSxJQUFJLEdBQUcsR0FBRyxFQUFFLEVBQUU7QUFDdEIsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7QUFDM0QsWUFBWSxHQUFHLEVBQUUsR0FBRztBQUNwQixZQUFZLEtBQUssRUFBRSxLQUFLO0FBQ3hCLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsUUFBUSxJQUFJLEtBQUssQ0FBQ0csWUFBVSxDQUFDLEVBQUU7QUFDL0IsWUFBWSxNQUFNLElBQUksR0FBR2QsV0FBUyxDQUFDLEtBQUssQ0FBQ2MsWUFBVSxDQUFDLENBQUMsQ0FBQztBQUN0RCxZQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVDLFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzRSxZQUFZLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLFNBQVM7QUFDVCxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUNGLGVBQWEsQ0FBQyxFQUFFO0FBQ25DLFlBQVksT0FBTyxVQUFVLENBQUM7QUFDOUIsU0FBUztBQUNULFFBQVEsTUFBTSxPQUFPLEdBQUcseUJBQXlCLENBQUMsS0FBSyxDQUFDQSxlQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLFFBQVEsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsUUFBUSxNQUFNLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQztBQUNsQyxRQUFRLE1BQU0sQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hDLFFBQVEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzFDLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEIsS0FBSztBQUNMOztBQ2pEQSxNQUFNRixTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQyxhQUFhLENBQUM7QUFDMUMsSUFBSSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUNoQixrQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNULElBQUksQ0FBQyxVQUFVLEVBQUVLLGNBQVksQ0FBQyxFQUFFLENBQUM7QUFDakMsSUFBSSxJQUFJO0FBQ1IsSUFBSSxrQ0FBa0MsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxNQUFNa0IsY0FBWSxHQUFHLENBQUMsQ0FBQztBQUN2QixNQUFNSixrQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFDM0IsTUFBTUMsWUFBVSxHQUFHLENBQUMsQ0FBQztBQUNOLE1BQU0saUJBQWlCLFNBQVMsc0NBQXNDLENBQUM7QUFDdEYsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPSixTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUNHLGtCQUFnQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDaEUsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDNUUsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTO0FBQ1QsUUFBUSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQ0ksY0FBWSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwSSxRQUFRLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyQyxRQUFRLE1BQU0sS0FBSyxHQUFHdkIsa0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEQsUUFBUSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUMsUUFBUSxJQUFJLEtBQUssQ0FBQ29CLFlBQVUsQ0FBQyxFQUFFO0FBQy9CLFlBQVksTUFBTSxJQUFJLEdBQUdkLFdBQVMsQ0FBQyxLQUFLLENBQUNjLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDdEQsWUFBWSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUMsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3pFLFlBQVksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdDLFNBQVM7QUFDVCxRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTDs7QUNuQ0EsTUFBTUosU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMscUJBQXFCLENBQUM7QUFDbEQsSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLENBQUNoQixrQkFBZ0IsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO0FBQ3hFLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDbEIsSUFBSSxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDNUIsTUFBTW1CLGtCQUFnQixHQUFHLENBQUMsQ0FBQztBQUMzQixNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQztBQUM3QixNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUNiLE1BQU0sMEJBQTBCLFNBQVMsc0NBQXNDLENBQUM7QUFDL0YsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPSCxTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsa0JBQWtCLENBQUM7QUFDL0MsY0FBYyxRQUFRLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDakQsY0FBY2hCLGtCQUFnQixDQUFDLEtBQUssQ0FBQ21CLGtCQUFnQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN0RSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxFQUFFO0FBQ3JDLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDeEIsU0FBUztBQUNULFFBQVEsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDeEQsUUFBUSxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUN2RCxRQUFRLE9BQU87QUFDZixZQUFZLEdBQUcsRUFBRSxHQUFHO0FBQ3BCLFlBQVksS0FBSyxFQUFFLEtBQUs7QUFDeEIsWUFBWSxJQUFJLEVBQUUsSUFBSTtBQUN0QixTQUFTLENBQUM7QUFDVixLQUFLO0FBQ0w7O0FDN0JBLE1BQU1ILFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxrQ0FBa0MsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekUsTUFBTVksYUFBVyxHQUFHLENBQUMsQ0FBQztBQUN0QixNQUFNUixZQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ04sTUFBTSx3QkFBd0IsU0FBUyxzQ0FBc0MsQ0FBQztBQUM3RixJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU9KLFNBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUNJLFlBQVUsQ0FBQyxDQUFDLENBQUM7QUFDakQsUUFBUSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDUSxhQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ25ELFFBQVEsT0FBTyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3RyxLQUFLO0FBQ0w7O0FDWGUsTUFBTSxzQkFBc0IsU0FBUyw0QkFBNEIsQ0FBQztBQUNqRixJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDNUIsUUFBUSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDMUIsS0FBSztBQUNMLElBQUksY0FBYyxHQUFHO0FBQ3JCLFFBQVEsT0FBTyxvQ0FBb0MsQ0FBQztBQUNwRCxLQUFLO0FBQ0wsSUFBSSxhQUFhLEdBQUc7QUFDcEIsUUFBUSxPQUFPLDBCQUEwQixDQUFDO0FBQzFDLEtBQUs7QUFDTCxJQUFJLGFBQWEsR0FBRztBQUNwQixRQUFRLE9BQU8sbUhBQW1ILENBQUM7QUFDbkksS0FBSztBQUNMLElBQUksNEJBQTRCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqRCxRQUFRLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUUsUUFBUSxJQUFJLFVBQVUsRUFBRTtBQUN4QixZQUFZLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMzQyxnQkFBZ0IsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRCxnQkFBZ0IsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDNUMsb0JBQW9CLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDM0Usb0JBQW9CLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvRCxpQkFBaUI7QUFDakIscUJBQXFCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtBQUNuQyxvQkFBb0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9ELGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsWUFBWSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7QUFDakQsZ0JBQWdCLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzRCxnQkFBZ0IsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRCxnQkFBZ0IsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUU7QUFDNUMsb0JBQW9CLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDM0UsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixZQUFZLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtBQUM5QyxnQkFBZ0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzNELGdCQUFnQixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BELGdCQUFnQixJQUFJLElBQUksR0FBRyxFQUFFLEVBQUU7QUFDL0Isb0JBQW9CLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLE9BQU8sVUFBVSxDQUFDO0FBQzFCLEtBQUs7QUFDTDs7QUN6Q0EsTUFBTVosU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFTixvQkFBa0IsQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZHLE1BQU15QixnQkFBYyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFekIsb0JBQWtCLENBQUMsd0JBQXdCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxRSxNQUFNLHlCQUF5QixTQUFTLHNDQUFzQyxDQUFDO0FBQzlGLElBQUksVUFBVSxDQUFDO0FBQ2YsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzVCLFFBQVEsS0FBSyxFQUFFLENBQUM7QUFDaEIsUUFBUSxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUNyQyxLQUFLO0FBQ0wsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPLElBQUksQ0FBQyxVQUFVLEdBQUd5QixnQkFBYyxHQUFHbkIsU0FBTyxDQUFDO0FBQzFELEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxTQUFTLEdBQUdKLGVBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxRQUFRLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzRCxRQUFRLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUNqRyxLQUFLO0FBQ0w7O0FDakJBLE1BQU1JLFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRU4sb0JBQWtCLENBQUMsNERBQTRELENBQUMsR0FBRyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEksTUFBTSxjQUFjLEdBQUcsSUFBSSxNQUFNLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBR0Esb0JBQWtCLEdBQUcsR0FBRyxHQUFHLGtCQUFrQixHQUFHLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuSCxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUNmLE1BQU0sMkJBQTJCLFNBQVMsc0NBQXNDLENBQUM7QUFDaEcsSUFBSSxVQUFVLENBQUM7QUFDZixJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDNUIsUUFBUSxLQUFLLEVBQUUsQ0FBQztBQUNoQixRQUFRLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ3JDLEtBQUs7QUFDTCxJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU8sSUFBSSxDQUFDLFVBQVUsR0FBRyxjQUFjLEdBQUdNLFNBQU8sQ0FBQztBQUMxRCxLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sU0FBUyxHQUFHSixlQUFhLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztBQUNwRSxRQUFRLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzRixLQUFLO0FBQ0w7O0FDbEJlLE1BQU0sdUJBQXVCLFNBQVMsNkJBQTZCLENBQUM7QUFDbkYsSUFBSSxjQUFjLEdBQUc7QUFDckIsUUFBUSxPQUFPLGlCQUFpQixDQUFDO0FBQ2pDLEtBQUs7QUFDTDs7QUNKZSxNQUFNLHNCQUFzQixTQUFTLDRCQUE0QixDQUFDO0FBQ2pGLElBQUksY0FBYyxHQUFHO0FBQ3JCLFFBQVEsT0FBTyxJQUFJLE1BQU0sQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0FBQ2hGLEtBQUs7QUFDTDs7QUNGQSxNQUFNSSxTQUFPLEdBQUcsZ0VBQWdFLENBQUM7QUFDbEUsTUFBTSxrQkFBa0IsU0FBUyxzQ0FBc0MsQ0FBQztBQUN2RixJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDMUIsUUFBUSxPQUFPQSxTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxJQUFJLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQ3pDLFFBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2pELFFBQVEsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDNUQsUUFBUSxRQUFRLFNBQVM7QUFDekIsWUFBWSxLQUFLLEtBQUs7QUFDdEIsZ0JBQWdCLE9BQU8wQixHQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pELFlBQVksS0FBSyxNQUFNO0FBQ3ZCLGdCQUFnQixPQUFPQyxLQUFnQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzRCxZQUFZLEtBQUssTUFBTTtBQUN2QixnQkFBZ0IsT0FBT0MsU0FBb0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0QsWUFBWSxLQUFLLFFBQVEsQ0FBQztBQUMxQixZQUFZLEtBQUssS0FBSztBQUN0QixnQkFBZ0IsT0FBT0MsUUFBbUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUQsWUFBWSxLQUFLLFNBQVMsQ0FBQztBQUMzQixZQUFZLEtBQUssYUFBYTtBQUM5QixnQkFBZ0IsT0FBT0MsT0FBa0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0QsWUFBWTtBQUNaLGdCQUFnQixJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUU7QUFDcEQsb0JBQW9CLElBQUksVUFBVSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRTtBQUNuRCx3QkFBd0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDM0Usd0JBQXdCLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLHdCQUF3QixVQUFVLEdBQUcsV0FBVyxDQUFDO0FBQ2pELHFCQUFxQjtBQUNyQixvQkFBb0IsaUJBQWlCLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQzdELG9CQUFvQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvQyxpQkFBaUI7QUFDakIsZ0JBQWdCLE1BQU07QUFDdEIsU0FBUztBQUNULFFBQVEsT0FBTyxTQUFTLENBQUM7QUFDekIsS0FBSztBQUNMOztBQ3BDQSxNQUFNOUIsU0FBTyxHQUFHLDBGQUEwRixDQUFDO0FBQzVGLE1BQU0sa0JBQWtCLFNBQVMsc0NBQXNDLENBQUM7QUFDdkYsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPQSxTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQzNDLFFBQVEsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDNUQsUUFBUSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7QUFDdEMsWUFBWSxLQUFLLFlBQVk7QUFDN0IsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLE1BQU0sQ0FBQztBQUN4QixZQUFZLEtBQUssT0FBTztBQUN4QixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssWUFBWTtBQUM3QixnQkFBZ0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDL0QsZ0JBQWdCLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELGdCQUFnQixpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEQsZ0JBQWdCLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNyRCxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssU0FBUztBQUMxQixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzQyxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssYUFBYTtBQUM5QixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsTUFBTTtBQUN0QixTQUFTO0FBQ1QsUUFBUSxPQUFPLFNBQVMsQ0FBQztBQUN6QixLQUFLO0FBQ0w7O0FDckNBLE1BQU1BLFNBQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQywwQkFBMEI7QUFDckQsSUFBSSxjQUFjO0FBQ2xCLElBQUksNENBQTRDO0FBQ2hELElBQUksQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDbEIsb0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsSUFBSSwwQkFBMEI7QUFDOUIsSUFBSSx5REFBeUQ7QUFDN0QsSUFBSSxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDdEIsTUFBTXlCLGNBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTThCLGVBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO0FBQ1QsTUFBTSxlQUFlLFNBQVMsc0NBQXNDLENBQUM7QUFDcEYsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPckMsU0FBTyxDQUFDO0FBQ3ZCLEtBQUs7QUFDTCxJQUFJLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQ2pDLFFBQVEsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDcUMsZUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDN0QsUUFBUSxNQUFNLE9BQU8sR0FBR3ZELG9CQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3RELFFBQVEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDeUIsY0FBWSxDQUFDLENBQUM7QUFDM0MsUUFBUSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDN0MsUUFBUSxJQUFJLFlBQVksR0FBRyxNQUFNLElBQUksT0FBTyxDQUFDO0FBQzdDLFFBQVEsWUFBWSxHQUFHLFlBQVksSUFBSSxFQUFFLENBQUM7QUFDMUMsUUFBUSxZQUFZLEdBQUcsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xELFFBQVEsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFFBQVEsSUFBSSxZQUFZLElBQUksUUFBUSxJQUFJLFlBQVksSUFBSSxRQUFRLEVBQUU7QUFDbEUsWUFBWSxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ2hDLFNBQVM7QUFDVCxhQUFhLElBQUksWUFBWSxJQUFJLFVBQVUsRUFBRTtBQUM3QyxZQUFZLFFBQVEsR0FBRyxVQUFVLENBQUM7QUFDbEMsU0FBUztBQUNULGFBQWEsSUFBSSxZQUFZLElBQUksUUFBUSxFQUFFO0FBQzNDLFlBQVksUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUNoQyxTQUFTO0FBQ1QsUUFBUSxPQUFPLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3RGLEtBQUs7QUFDTDs7QUNsQ0EsTUFBTVAsU0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsMkZBQTJGLEVBQUUsZUFBZSxDQUFDZCxzQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5TCxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUNmLE1BQU0sMEJBQTBCLFNBQVMsc0NBQXNDLENBQUM7QUFDL0YsSUFBSSxZQUFZLEdBQUc7QUFDbkIsUUFBUSxPQUFPYyxTQUFPLENBQUM7QUFDdkIsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDakMsUUFBUSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsRSxRQUFRLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ2xFLFFBQVEsTUFBTSxRQUFRLEdBQUdkLHNCQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hELFFBQVEsSUFBSSxRQUFRLElBQUksVUFBVSxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbkUsWUFBWSxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDakMsWUFBWSxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLFlBQVksT0FBTyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9GLFNBQVM7QUFDVCxRQUFRLElBQUksUUFBUSxJQUFJLE9BQU8sSUFBSSxRQUFRLElBQUksWUFBWSxFQUFFO0FBQzdELFlBQVksTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ2pDLFlBQVksU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFlBQVksT0FBTyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9GLFNBQVM7QUFDVCxRQUFRLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO0FBQzdELFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNqRSxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRTtBQUMxQyxZQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDcEQsWUFBWSxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0QsWUFBWSxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN6RCxTQUFTO0FBQ1QsYUFBYSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDMUMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDcEQsWUFBWSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUMxRCxZQUFZLFVBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RCxTQUFTO0FBQ1QsYUFBYSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDMUMsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVCLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixZQUFZLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELFlBQVksVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQVksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDMUQsU0FBUztBQUNULFFBQVEsT0FBTyxVQUFVLENBQUM7QUFDMUIsS0FBSztBQUNMOztBQzVDQSxNQUFNYyxTQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQywrRUFBK0UsRUFBRU4sb0JBQWtCLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkksTUFBTSxvQ0FBb0MsU0FBUyxzQ0FBc0MsQ0FBQztBQUN6RyxJQUFJLFlBQVksR0FBRztBQUNuQixRQUFRLE9BQU9NLFNBQU8sQ0FBQztBQUN2QixLQUFLO0FBQ0wsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRTtBQUNqQyxRQUFRLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM5QyxRQUFRLElBQUksU0FBUyxHQUFHSixlQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsUUFBUSxRQUFRLE1BQU07QUFDdEIsWUFBWSxLQUFLLE1BQU0sQ0FBQztBQUN4QixZQUFZLEtBQUssTUFBTSxDQUFDO0FBQ3hCLFlBQVksS0FBSyxHQUFHO0FBQ3BCLGdCQUFnQixTQUFTLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZELGdCQUFnQixNQUFNO0FBQ3RCLFNBQVM7QUFDVCxRQUFRLE9BQU8saUJBQWlCLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzRixLQUFLO0FBQ0w7O0FDakJBLFNBQVMsOEJBQThCLENBQUMsTUFBTSxFQUFFO0FBQ2hELElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN6RCxDQUFDO0FBQ0QsU0FBUyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUU7QUFDOUMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLElBQUksSUFBSSxDQUFDO0FBQzdELENBQUM7QUFDYyxNQUFNLDBCQUEwQixTQUFTLGNBQWMsQ0FBQztBQUN2RSxJQUFJLGNBQWMsR0FBRztBQUNyQixRQUFRLE9BQU8sUUFBUSxDQUFDO0FBQ3hCLEtBQUs7QUFDTCxJQUFJLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFO0FBQy9ELFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUU7QUFDdkQsWUFBWSxPQUFPLEtBQUssQ0FBQztBQUN6QixTQUFTO0FBQ1QsUUFBUSxJQUFJLENBQUMsOEJBQThCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxhQUFhLENBQUMsRUFBRTtBQUM1RyxZQUFZLE9BQU8sS0FBSyxDQUFDO0FBQ3pCLFNBQVM7QUFDVCxRQUFRLE9BQU8sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEgsS0FBSztBQUNMLElBQUksWUFBWSxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFO0FBQ3pELFFBQVEsSUFBSSxTQUFTLEdBQUdBLGVBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUQsUUFBUSxJQUFJLDhCQUE4QixDQUFDLGFBQWEsQ0FBQyxFQUFFO0FBQzNELFlBQVksU0FBUyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNuRCxTQUFTO0FBQ1QsUUFBUSxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzdJLFFBQVEsT0FBTyxJQUFJLGFBQWEsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUMsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNqSixLQUFLO0FBQ0w7O0FDWE8sTUFBTWlELFFBQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQ1MsMkJBQXlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM1RCxNQUFNUixRQUFNLEdBQUcsSUFBSSxNQUFNLENBQUNTLHFCQUFtQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzVELE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDQSxxQkFBbUIsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4RCxTQUFTUCxPQUFLLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUU7QUFDekMsSUFBSSxPQUFPSCxRQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0MsQ0FBQztBQUNNLFNBQVNJLFdBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUM3QyxJQUFJLE9BQU9KLFFBQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBQ00sU0FBU1MsMkJBQXlCLENBQUMsWUFBWSxHQUFHLEtBQUssRUFBRTtBQUNoRSxJQUFJLE1BQU0sTUFBTSxHQUFHQyxxQkFBbUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDNUQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJK0Isa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7QUFDcEQsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLDBCQUEwQixFQUFFLENBQUMsQ0FBQztBQUM3RCxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksb0NBQW9DLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZFLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUNNLFNBQVNoQyxxQkFBbUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLFlBQVksR0FBRyxLQUFLLEVBQUU7QUFDN0UsSUFBSSxPQUFPLDBCQUEwQixDQUFDO0FBQ3RDLFFBQVEsT0FBTyxFQUFFO0FBQ2pCLFlBQVksSUFBSSxxQkFBcUIsQ0FBQyxZQUFZLENBQUM7QUFDbkQsWUFBWSxJQUFJLDRCQUE0QixFQUFFO0FBQzlDLFlBQVksSUFBSSw2QkFBNkIsRUFBRTtBQUMvQyxZQUFZLElBQUksNkJBQTZCLEVBQUU7QUFDL0MsWUFBWSxJQUFJaUMsZUFBZSxFQUFFO0FBQ2pDLFlBQVksSUFBSSwwQkFBMEIsRUFBRTtBQUM1QyxZQUFZLElBQUksd0JBQXdCLEVBQUU7QUFDMUMsWUFBWSxJQUFJLHNCQUFzQixDQUFDLFVBQVUsQ0FBQztBQUNsRCxZQUFZLElBQUkseUJBQXlCLENBQUMsVUFBVSxDQUFDO0FBQ3JELFlBQVksSUFBSSwyQkFBMkIsQ0FBQyxVQUFVLENBQUM7QUFDdkQsU0FBUztBQUNULFFBQVEsUUFBUSxFQUFFLENBQUMsSUFBSSwwQkFBMEIsRUFBRSxFQUFFLElBQUksc0JBQXNCLEVBQUUsRUFBRSxJQUFJLHVCQUF1QixFQUFFLENBQUM7QUFDakgsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ25COzs7Ozs7Ozs7Ozs7O0FDcERPLE1BQU0xRyxvQkFBa0IsR0FBRztBQUNsQyxJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ2YsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksSUFBSSxFQUFFLENBQUM7QUFDWCxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsSUFBSSxRQUFRLEVBQUUsQ0FBQztBQUNmLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLElBQUksRUFBRSxDQUFDO0FBQ1gsQ0FBQyxDQUFDO0FBQ0ssTUFBTUUsa0JBQWdCLEdBQUc7QUFDaEMsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksVUFBVSxFQUFFLENBQUM7QUFDakIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksS0FBSyxFQUFFLENBQUM7QUFDWixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQixJQUFJLEtBQUssRUFBRSxDQUFDO0FBQ1osSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiLElBQUksV0FBVyxFQUFFLENBQUM7QUFDbEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2IsSUFBSSxTQUFTLEVBQUUsRUFBRTtBQUNqQixJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ2IsSUFBSSxNQUFNLEVBQUUsRUFBRTtBQUNkLElBQUksVUFBVSxFQUFFLEVBQUU7QUFDbEIsSUFBSSxLQUFLLEVBQUUsRUFBRTtBQUNiLElBQUksTUFBTSxFQUFFLEVBQUU7QUFDZCxJQUFJLFVBQVUsRUFBRSxFQUFFO0FBQ2xCLElBQUksS0FBSyxFQUFFLEVBQUU7QUFDYixJQUFJLE1BQU0sRUFBRSxFQUFFO0FBQ2QsQ0FBQyxDQUFDO0FBQ0ssTUFB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S0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssY0FBYztBQUMvQixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxVQUFVO0FBQzNCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLGNBQWM7QUFDL0IsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFD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LENBQUM7QUFDM0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLFdBQVc7QUFDNUIsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELGdCQUFnQixNQUFNO0FBQ3RCLFlBQVksS0FBSyxZQUFZO0FBQzdCLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0MsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxnQkFBZ0IsTUFBTTtBQUN0QixZQUFZLEtBQUssVUFBVTtBQUMzQixnQkFBZ0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdCQUFnQixTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0JBQWdCLE1BQU07QUFDdEIsWUFBWSxLQUFLLGVBQWU7QUFDaEMsZ0JBQWdCLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FB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QUFDLENBQUM7S0FDSjs7SUFHTyxlQUFlLEdBQUE7UUFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7OztBQUkzQyxRQUFBLE1BQU0sV0FBVyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkcsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2pDLFlBQUEsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNoRSxTQUFBOztBQUdELFFBQUEsTUFBTSxZQUFZLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hFLFFBQUEsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUV6RSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BELFFBQUEsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsU0FBUyxFQUFFLEdBQUcsU0FBUyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMzRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7QUFHcEQsUUFBQSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksTUFBTSxDQUM3QixDQUFBLFFBQUEsRUFBVyxTQUFTLENBQUEsZ0JBQUEsRUFBbUIsZUFBZSxDQUFBLE1BQUEsQ0FBUSxFQUM5RCxHQUFHLENBQ0osQ0FBQzs7QUFHRixRQUFBLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLE1BQU0sQ0FDckMsV0FBVyxTQUFTLENBQUEsZ0JBQUEsRUFBbUIsZUFBZSxDQUFBLFFBQUEsRUFBVyxVQUFVLENBQW1CLGdCQUFBLEVBQUEsZUFBZSxRQUFRLEVBQ3JILEdBQUcsQ0FDSixDQUFDOzs7O0FBS0YsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksTUFBTSxDQUM1QixDQUFBLE1BQUEsRUFBUyxhQUFhLENBQUEsTUFBQSxFQUFTLGNBQWMsQ0FBQSxNQUFBLENBQVEsRUFDckQsR0FBRyxDQUNKLENBQUM7O0FBR0YsUUFBQSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxNQUFNLENBQ3BDLENBQVMsTUFBQSxFQUFBLGFBQWEsQ0FBUyxNQUFBLEVBQUEsY0FBYyxXQUFXLFNBQVMsQ0FBQSxVQUFBLENBQVksRUFDN0UsR0FBRyxDQUNKLENBQUM7O0FBR0YsUUFBQSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxNQUFNLENBQ2hDLENBQVMsTUFBQSxFQUFBLGNBQWMsQ0FBUSxNQUFBLENBQUEsRUFDL0IsR0FBRyxDQUNKLENBQUM7O0FBR0YsUUFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksTUFBTSxDQUM5QixXQUFXLFdBQVcsQ0FBQSxNQUFBLEVBQVMsY0FBYyxDQUFBLFFBQUEsRUFBVyxTQUFTLENBQVMsTUFBQSxFQUFBLGNBQWMsUUFBUSxFQUNoRyxHQUFHLENBQ0osQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7Ozs7O1FBTzFELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLE1BQU0sQ0FDbkMsQ0FBQSw0Q0FBQSxFQUErQ3BILHdCQUFzQixDQUFXLFFBQUEsRUFBQSxTQUFTLFlBQVksYUFBYSxDQUFBLFFBQUEsRUFBVyxlQUFlLENBQVksU0FBQSxFQUFBLGFBQWEsVUFBVSxFQUMvSyxHQUFHLENBQ0osQ0FBQzs7UUFHRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDOzs7Ozs7UUFPdEQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLE1BQU0sQ0FDbkMsQ0FBWSxTQUFBLEVBQUEsYUFBYSxDQUFXLFFBQUEsRUFBQSxvQkFBb0IsQ0FBUyxNQUFBLEVBQUEsVUFBVSxXQUFXLFNBQVMsQ0FBQSxTQUFBLEVBQVksYUFBYSxDQUFBLFFBQUEsRUFBVyxlQUFlLENBQUEsU0FBQSxFQUFZLGFBQWEsQ0FBVSxRQUFBLENBQUEsRUFDckwsR0FBRyxDQUNKLENBQUM7OztRQUlGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLE1BQU0sQ0FDbkMsQ0FBUyxNQUFBLEVBQUEsWUFBWSxDQUFJLENBQUEsRUFBQSxhQUFhLENBQVMsTUFBQSxFQUFBLGNBQWMsV0FBVyxTQUFTLENBQUEsU0FBQSxFQUFZLGFBQWEsQ0FBQSxRQUFBLEVBQVcsZUFBZSxDQUFBLFNBQUEsRUFBWSxhQUFhLENBQVUsUUFBQSxDQUFBLEVBQ3ZLLEdBQUcsQ0FDSixDQUFDOzs7Ozs7Ozs7Ozs7OztBQWVGLFFBQUEsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQUN4QyxRQUFBLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNqQyxZQUFBLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNuRCxZQUFBLElBQUksU0FBUyxJQUFJLFNBQVMsS0FBSyxVQUFVLEVBQUU7QUFDekMsZ0JBQUEsS0FBSyxNQUFNLE1BQU0sSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUMzRSxvQkFBQSxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCLGlCQUFBO2dCQUNELFNBQVM7QUFDVixhQUFBO0FBRUQsWUFBQSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkQsWUFBQSxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsS0FBSyxVQUFVLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2xGLFNBQVM7QUFDVixhQUFBO1lBQ0QsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEQsWUFBQSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0MsWUFBQSxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sS0FBSyxVQUFVO2dCQUFFLFNBQVM7QUFDakQsWUFBQSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RyxZQUFBLElBQUksQ0FBQyxRQUFRO2dCQUFFLFNBQVM7QUFDeEIsWUFBQSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2RCxZQUFBLElBQUksTUFBTTtBQUFFLGdCQUFBLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkMsU0FBQTtBQUVELFFBQUEsSUFBSSxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtBQUMxQixZQUFBLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQzFFLFlBQUEsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksTUFBTSxDQUNuQyxDQUFBLGdCQUFBLEVBQW1CLGVBQWUsQ0FBQSxRQUFBLEVBQVcsYUFBYSxDQUFBLE1BQUEsQ0FBUSxFQUNsRSxHQUFHLENBQ0osQ0FBQztBQUNGLFlBQUEsSUFBSSxDQUFDLDJCQUEyQixHQUFHLElBQUksTUFBTSxDQUMzQyxtQkFBbUIsZUFBZSxDQUFBLFFBQUEsRUFBVyxVQUFVLENBQUEsZ0JBQUEsRUFBbUIsZUFBZSxDQUFXLFFBQUEsRUFBQSxhQUFhLFFBQVEsRUFDekgsR0FBRyxDQUNKLENBQUM7QUFDSCxTQUFBO0FBQU0sYUFBQTtBQUNMLFlBQUEsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUNoQyxZQUFBLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLENBQUM7QUFDekMsU0FBQTs7Ozs7OztBQVFELFFBQUEsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0FBQzNDLFFBQUEsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2pDLFlBQUEsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNELFlBQUEsSUFBSSxhQUFhLElBQUksYUFBYSxLQUFLLFVBQVUsRUFBRTtBQUNqRCxnQkFBQSxLQUFLLE1BQU0sTUFBTSxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQy9FLG9CQUFBLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QixpQkFBQTtBQUNGLGFBQUE7QUFDRixTQUFBO0FBRUQsUUFBQSxJQUFJLGdCQUFnQixDQUFDLElBQUksR0FBRyxDQUFDLEVBQUU7QUFDN0IsWUFBQSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7QUFDaEYsWUFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksTUFBTSxDQUM5QixDQUFBLGdCQUFBLEVBQW1CLGVBQWUsQ0FBQSxRQUFBLEVBQVcsZ0JBQWdCLENBQUEsTUFBQSxDQUFRLEVBQ3JFLEdBQUcsQ0FDSixDQUFDO0FBQ0gsU0FBQTtBQUFNLGFBQUE7QUFDTCxZQUFBLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFNBQUE7S0FDRjs7SUFHTyxrQkFBa0IsR0FBQTtBQUN4QixRQUFBLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FDOUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQ3pHLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxHQUFHO0FBQ3BCLFlBQUEsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFLFlBQUEsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFLFlBQUEsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2pFLENBQUM7O0FBR0YsUUFBQSxNQUFNLFlBQVksR0FBNEM7QUFDNUQsWUFBQSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRTtBQUN4QyxZQUFBLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLFlBQUEsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7QUFDbEMsWUFBQSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRTtBQUNwQyxZQUFBLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFO0FBQ3RDLFlBQUEsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUU7U0FDckMsQ0FBQztBQUNGLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzdCLFFBQUEsS0FBSyxNQUFNLE9BQU8sSUFBSSxZQUFZLEVBQUU7QUFDbEMsWUFBQSxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtnQkFDekUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoRCxhQUFBO0FBQ0YsU0FBQTtLQUNGOzs7O0FBS08sSUFBQSxpQkFBaUIsQ0FBQyxPQUFlLEVBQUE7QUFDdkMsUUFBQSxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7O0FBR3pDLFFBQUEsTUFBTSxNQUFNLEdBQThCO0FBQ3hDLFlBQUEsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNyQixZQUFBLFFBQVEsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDckIsU0FBUyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLFlBQUEsV0FBVyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUN4QixZQUFBLFVBQVUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzlDLFlBQUEsUUFBUSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNyQixZQUFBLFVBQVUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDeEIsQ0FBQzs7QUFHRixRQUFBLE1BQU0sT0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDL0YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUk7QUFDekIsWUFBQSxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0FBQ3BFLGdCQUFBLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckIsYUFBQTtBQUNILFNBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2hDOzs7SUFJTyxZQUFZLEdBQUE7QUFDbEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzdDLFFBQUEsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ2pEOztJQUdPLGdCQUFnQixDQUFDLFlBQW9CLEVBQUUsbUJBQThCLEVBQUE7QUFDM0UsUUFBQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7O1FBRXZDLE9BQU8sQ0FBQSxFQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxtQkFBbUIsQ0FBQSxDQUFBLEVBQUksVUFBVSxDQUFBLENBQUUsQ0FBQztLQUN0RTs7SUFHTyxjQUFjLENBQUMsUUFBZ0IsRUFBRSxNQUFZLEVBQUE7O1FBRW5ELE1BQU0sVUFBVSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNyQyxPQUFPLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQ25DOztBQUdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFxQkc7SUFDSCxhQUFhLENBQUMsWUFBb0IsRUFBRSxtQkFBOEIsRUFBQTs7QUFFaEUsUUFBQSxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMvRCxRQUFBLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7Ozs7Ozs7OztBQVd2QyxRQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLFFBQUEsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdEUsTUFBTSxjQUFjLEdBQ2xCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxFQUFFLEdBQUcsSUFBSTtBQUN6RSxZQUFBLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDO0FBQzFDLFlBQUEsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzNDLFFBQUEsSUFBSSxjQUFjO0FBQUUsWUFBQSxPQUFPLGNBQWMsQ0FBQzs7QUFHMUMsUUFBQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDdkMsUUFBQSxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ2hDLFlBQUEsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNuQixZQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0FBQzVCLFNBQUE7O1FBR0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDOztRQUd6RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM1QyxRQUFBLElBQUksVUFBVSxFQUFFOztZQUVkLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDdkMsU0FBQTs7Ozs7QUFNRCxRQUFBLE1BQU0sTUFBTSxHQUNWLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7QUFDL0IsWUFBQSxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDO0FBQ3RDLFlBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7QUFDN0IsWUFBQSxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDO0FBQ25DLFlBQUEsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztBQUNuQyxZQUFBLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7QUFDbkMsWUFBQSxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDO0FBQ3ZDLFlBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUV6RCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQzlDOzs7O0FBS08sSUFBQSxvQkFBb0IsQ0FBQyxJQUFZLEVBQUE7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQUUsWUFBQSxPQUFPLElBQUksQ0FBQztBQUVuRCxRQUFBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ25FLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUNuQixTQUFBO0FBQ0QsUUFBQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyRSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7QUFDbkIsU0FBQTtBQUNELFFBQUEsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDeEUsWUFBQSxPQUFPLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDekMsU0FBQTtBQUNELFFBQUEsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDekUsWUFBQSxPQUFPLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDOUMsU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDYjs7OztJQUtPLGtCQUFrQixDQUFDLElBQVksRUFBRSxXQUFtQixFQUFBOzs7Ozs7UUFNMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQ3RELFFBQUEsSUFBSSxRQUFRLEVBQUU7WUFDWixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsWUFBQSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQyxZQUFBLE9BQU8sTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNoRCxTQUFBOztBQUdELFFBQUEsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2pDLFlBQUEsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEUsWUFBQSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUQsWUFBQSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUQsWUFBQSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUQsWUFBQSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUU5RCxZQUFBLE1BQU0sUUFBUSxHQUFHO0FBQ2YsZ0JBQUEsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLFNBQWtCLEVBQUU7QUFDeEQsZ0JBQUEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxPQUFnQixFQUFFO0FBQ3BELGdCQUFBLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsTUFBZSxFQUFFO0FBQ2xELGdCQUFBLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsT0FBZ0IsRUFBRTtBQUNwRCxnQkFBQSxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsUUFBaUIsRUFBRTthQUN2RCxDQUFDO1lBRUYsS0FBSyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLFFBQVEsRUFBRTtnQkFDeEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMxQyxnQkFBQSxJQUFJLEtBQUssRUFBRTtvQkFDVCxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLG9CQUFBLElBQUksS0FBSyxFQUFFO3dCQUNULE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQyx3QkFBQSxPQUFPLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDaEQscUJBQUE7QUFDRixpQkFBQTtBQUNGLGFBQUE7QUFDRixTQUFBOztRQUdELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNGLFFBQUEsSUFBSSxjQUFjLEVBQUU7WUFDbEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLFlBQUEsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsWUFBQSxPQUFPLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDaEQsU0FBQTtBQUVELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDYjs7Ozs7O0FBT08sSUFBQSxhQUFhLENBQUMsT0FBZSxFQUFBO0FBQ25DLFFBQUEsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLEtBQUssVUFBVTtBQUFFLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFFcEQsUUFBQSxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQVcsS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDOzs7OztRQUtoRixNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQztRQUU1QyxNQUFNLFFBQVEsR0FBRyxPQUFPO2FBQ3JCLEtBQUssQ0FBQyxLQUFLLENBQUM7YUFDWixHQUFHLENBQUMsS0FBSyxJQUFHO1lBQ1gsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLENBQUMsQ0FBQzs7OztBQUl0RSxZQUFBLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDakMsTUFBTSxZQUFZLEdBQUcsZUFBZTtxQkFDakMsS0FBSyxDQUFDLEdBQUcsQ0FBQztxQkFDVixHQUFHLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xFLE9BQU8sQ0FBQSxHQUFBLEVBQU0sWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO0FBQ3hDLGFBQUE7QUFDRCxZQUFBLE9BQU8sV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEUsU0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhCLE9BQU8sSUFBSSxNQUFNLENBQUMsQ0FBQSxDQUFBLEVBQUksUUFBUSxDQUFHLENBQUEsQ0FBQSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3pDOzs7Ozs7OztBQVNPLElBQUEsU0FBUyxDQUFDLE9BQWUsRUFBQTtRQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QyxRQUFBLElBQUksTUFBTSxFQUFFO0FBQ1YsWUFBQSxPQUFPLE1BQU0sQ0FBQztBQUNmLFNBQUE7QUFDRCxRQUFBLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7QUFBRSxZQUFBLE9BQU8sT0FBTyxDQUFDO0FBQ3ZDLGFBQUEsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO0FBQUUsWUFBQSxPQUFPLE1BQU0sQ0FBQztBQUN0RSxhQUFBLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztBQUFFLFlBQUEsT0FBTyxPQUFPLENBQUM7YUFDdkUsSUFBSSxPQUFPLEtBQUssR0FBRyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO0FBQUUsWUFBQSxPQUFPLFNBQVMsQ0FBQztBQUNuRSxhQUFBLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLEtBQUssR0FBRyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0FBQUUsWUFBQSxPQUFPLFFBQVEsQ0FBQztBQUMvRixhQUFBLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztBQUFFLFlBQUEsT0FBTyxPQUFPLENBQUM7QUFDNUUsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNmOzs7O0FBS08sSUFBQSxzQkFBc0IsQ0FBQyxXQUFtQixFQUFBOzs7UUFHaEQsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUM7O1FBRzdCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNySixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFdkosUUFBQSxNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFBLEVBQUEsRUFBSyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEYsUUFBQSxNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFBLEtBQUEsRUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFeEYsUUFBQSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDOUIsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkQsWUFBQSxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFN0gsWUFBQSxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFOztBQUVyQixnQkFBQSxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtvQkFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQzNELG9CQUFBLElBQUksU0FBUyxFQUFFO3dCQUNiLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyx3QkFBQSxNQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEQsd0JBQUEsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO3dCQUNoRCxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLHFCQUFBO0FBQ0YsaUJBQUE7QUFDRCxnQkFBQSxJQUFJLGFBQWEsRUFBRTtBQUNqQixvQkFBQSxPQUFPLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM3QixpQkFBQTtBQUNGLGFBQUE7QUFDRixTQUFBOztRQUdELE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdILFFBQUEsSUFBSSxzQkFBc0IsRUFBRTtZQUMxQixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxZQUFBLE1BQU0sUUFBUSxHQUFHLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2hFLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELFlBQUEsTUFBTSxRQUFRLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7WUFFaEUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRXZDLFlBQUEsT0FBTyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDaEUsU0FBQTs7UUFHRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN2RCxRQUFBLElBQUksUUFBUSxFQUFFO1lBQ1osTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFlBQUEsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDOzs7OztBQU1qRCxZQUFBLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7O0FBR3RFLFlBQUEsT0FBTyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzNDLFNBQUE7O1FBR0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3JHLFFBQUEsSUFBSSxjQUFjLEVBQUU7WUFDbEIsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDLFlBQUEsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsWUFBQSxPQUFPLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0MsU0FBQTtBQUVELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDYjs7Ozs7O0FBT08sSUFBQSxvQkFBb0IsQ0FBQyxXQUFtQixFQUFBO1FBQzlDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzFELFFBQUEsSUFBSSxDQUFDLFVBQVU7QUFBRSxZQUFBLE9BQU8sSUFBSSxDQUFDO1FBRTdCLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNqRCxRQUFBLE1BQU0sQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQ25CLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUUzRCxNQUFNLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEQsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUNsQyxZQUFBLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVCLFNBQUE7QUFFRCxRQUFBLE9BQU8sV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQzdCOzs7O0FBS08sSUFBQSxXQUFXLENBQUMsV0FBbUIsRUFBQTs7UUFFckMsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ3ZFLFFBQUEsSUFBSSxpQkFBaUIsRUFBRTtZQUNyQixNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuRCxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUU3QyxZQUFBLE1BQU0sQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUVqRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUN4QyxnQkFBQSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pCLGFBQUE7aUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDL0MsZ0JBQUEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pDLGFBQUE7aUJBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7O0FBRS9DLGdCQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyQyxhQUFBOzs7Ozs7QUFPRCxZQUFBLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDbEUsWUFBQSxJQUFJLFVBQVUsRUFBRTtBQUNkLGdCQUFBLE9BQU8sVUFBVSxDQUFDO0FBQ25CLGFBQUE7O0FBR0QsWUFBQSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUNuQixTQUFBOztRQUdELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3ZELFFBQUEsSUFBSSxTQUFTLEVBQUU7WUFDYixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDMUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBRTNDLFlBQUEsTUFBTSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDbkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWpELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3hDLGdCQUFBLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakIsYUFBQTtpQkFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMvQyxnQkFBQSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDakMsYUFBQTtpQkFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTs7QUFFL0MsZ0JBQUEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLGFBQUE7QUFDRCxZQUFBLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ25CLFNBQUE7OztRQUlELE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDL0QsUUFBQSxJQUFJLGFBQWEsRUFBRTtZQUNqQixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDL0MsWUFBQSxNQUFNLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUNuQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFFakQsWUFBQSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDOztZQUVoQixJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDL0IsZ0JBQUEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEIsYUFBQTtBQUNELFlBQUEsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbkIsU0FBQTtBQUVELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDYjs7OztBQUtPLElBQUEsaUJBQWlCLENBQUMsV0FBbUIsRUFBQTtRQUMzQyxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDeEUsUUFBQSxJQUFJLENBQUMsbUJBQW1CO0FBQUUsWUFBQSxPQUFPLElBQUksQ0FBQztRQUV0QyxNQUFNLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7UUFFakQsTUFBTSxZQUFZLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM5RCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7O0FBR2hFLFFBQUEsTUFBTSxNQUFNLEdBQUcsV0FBVyxJQUFJLFlBQVksQ0FBQzs7QUFHM0MsUUFBQSxNQUFNLFNBQVMsR0FBR0MsMkJBQXlCLENBQUMsVUFBVSxDQUFDLENBQUM7O0FBR3hELFFBQUEsTUFBTSxZQUFZLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZGLE1BQU0sTUFBTSxHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUVqRyxRQUFBLElBQUksT0FBTyxFQUFFO0FBQ1gsWUFBQSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbEQsZ0JBQUEsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hELGFBQUE7QUFBTSxpQkFBQSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDekQsZ0JBQUEsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JELGFBQUE7QUFBTSxpQkFBQTs7QUFFTCxnQkFBQSxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGFBQUE7O0FBR0QsWUFBQSxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbkQsWUFBQSxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlCLFNBQUE7QUFBTSxhQUFBLElBQUksTUFBTSxFQUFFO0FBQ2pCLFlBQUEsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ2xELGdCQUFBLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5QyxhQUFBO0FBQU0saUJBQUEsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3pELGdCQUFBLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuRCxhQUFBO0FBQU0saUJBQUE7QUFDTCxnQkFBQSxZQUFZLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLGFBQUE7O0FBR0QsWUFBQSxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUN6RCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUN4RCxZQUFBLFlBQVksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDekMsU0FBQTtBQUVELFFBQUEsT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7S0FDOUI7Ozs7QUFLTyxJQUFBLGlCQUFpQixDQUFDLFdBQW1CLEVBQUE7UUFDM0MsTUFBTSxtQkFBbUIsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3hFLFFBQUEsSUFBSSxDQUFDLG1CQUFtQjtBQUFFLFlBQUEsT0FBTyxJQUFJLENBQUM7O1FBR3RDLE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNqRSxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDOUQsTUFBTSxXQUFXLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2hFLE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDOztBQUd0RSxRQUFBLE1BQU0sTUFBTSxHQUFHLFdBQVcsSUFBSSxpQkFBaUIsSUFBSSxZQUFZLENBQUM7QUFFaEUsUUFBQSxNQUFNLFlBQVksR0FBRyxNQUFNLEVBQUUsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkYsUUFBQSxJQUFJLENBQUMsT0FBTztBQUFFLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFFMUIsUUFBQSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDbEQsWUFBQSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUMsU0FBQTtBQUFNLGFBQUEsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3pELFlBQUEsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25ELFNBQUE7QUFBTSxhQUFBOztBQUVMLFlBQUEsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3QixTQUFBO0FBRUQsUUFBQSxPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUM5Qjs7OztBQUtPLElBQUEsaUJBQWlCLENBQUMsV0FBbUIsRUFBQTtRQUMzQyxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDeEUsUUFBQSxJQUFJLENBQUMsbUJBQW1CO0FBQUUsWUFBQSxPQUFPLElBQUksQ0FBQzs7UUFHdEMsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0QsTUFBTSxPQUFPLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckQsTUFBTSxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDdEUsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzlELE1BQU0sV0FBVyxHQUFHLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQzs7QUFHaEUsUUFBQSxNQUFNLFdBQVcsR0FBRyxXQUFXLElBQUksaUJBQWlCLENBQUM7UUFFckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMzRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkYsUUFBQSxJQUFJLENBQUMsT0FBTztBQUFFLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFFMUIsUUFBQSxNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDdkUsUUFBQSxJQUFJLFlBQVksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUU1QixRQUFBLElBQUksT0FBTyxFQUFFOztBQUVYLFlBQUEsSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO0FBQzVELGdCQUFBLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoRCxhQUFBO0FBQU0saUJBQUEsSUFBSSxXQUFXLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO0FBQ25FLGdCQUFBLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyRCxhQUFBO0FBQU0saUJBQUE7QUFDTCxnQkFBQSxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGFBQUE7O1lBR0QsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxZQUFBLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2hELE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBUSxHQUFHLGlCQUFpQixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekQsWUFBWSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZELFNBQUE7QUFBTSxhQUFBLElBQUksTUFBTSxFQUFFOztBQUVqQixZQUFBLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRTtBQUM1RCxnQkFBQSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUMsYUFBQTtBQUFNLGlCQUFBLElBQUksV0FBVyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRTtBQUNuRSxnQkFBQSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkQsYUFBQTtBQUFNLGlCQUFBOztBQUVMLGdCQUFBLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0IsYUFBQTs7WUFHRCxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNELFlBQUEsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDOUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3RCxZQUFZLEdBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEUsU0FBQTtBQUFNLGFBQUE7O0FBRUwsWUFBQSxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDNUQsZ0JBQUEsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hELGFBQUE7QUFBTSxpQkFBQTs7QUFFTCxnQkFBQSxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGFBQUE7O1lBR0QsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxZQUFBLE1BQU0saUJBQWlCLEdBQUcsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2hELE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBUSxHQUFHLGlCQUFpQixHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekQsWUFBWSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZELFNBQUE7QUFFRCxRQUFBLE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQzlCOzs7Ozs7O0FBUU8sSUFBQSxxQkFBcUIsQ0FBQyxXQUFtQixFQUFBOzs7Ozs7O0FBTy9DLFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuRixNQUFNLGNBQWMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNsRSxRQUFBLE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBSSxDQUFBLEVBQUEsV0FBVyxTQUFTLGdCQUFnQixDQUFBLENBQUEsQ0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEcsUUFBQSxJQUFJLENBQUMsYUFBYTtBQUFFLFlBQUEsT0FBTyxJQUFJLENBQUM7UUFFaEMsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzlDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN0RixRQUFBLElBQUksVUFBVTtBQUFFLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFFNUIsUUFBQSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUN2RSxZQUFBLE9BQU8sTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDNUQsU0FBQTtBQUNELFFBQUEsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDdEUsWUFBQSxPQUFPLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQzFELFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ2I7Ozs7SUFLTyxjQUFjLENBQUMsWUFBb0IsRUFBRSxtQkFBOEIsRUFBQTtRQUN6RSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDOztBQUdsRSxRQUFBLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixLQUFLLGdCQUFnQixHQUFHLGtCQUFrQixFQUFFLEdBQUcsbUJBQW1CLENBQUM7UUFDeEcsTUFBTSxNQUFNLEdBQUcsRUFBRSxTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7QUFDdkQsUUFBQSxNQUFNLGFBQWEsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDOztRQUdqQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRTtZQUN6RSxNQUFNO0FBQ04sWUFBQSxXQUFXLEVBQUUsSUFBSTtBQUNELFNBQUEsQ0FBQyxDQUFDOzs7QUFHcEIsUUFBQSxPQUFPLFlBQVksSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO0tBQ25DO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JHO0lBQ0gsa0JBQWtCLENBQUMsWUFBb0IsRUFBRSxtQkFBOEIsRUFBQTs7UUFFckUsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDM0QsUUFBQSxJQUFJLFVBQVUsRUFBRTtZQUNkLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqRCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFFL0MsWUFBQSxNQUFNLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUNuQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDM0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDOztZQUd2RCxNQUFNLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDaEQsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUNsQyxnQkFBQSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1QixhQUFBOztZQUdELElBQUksU0FBUyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQzs7WUFFMUMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUMxQyxnQkFBQSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMxQixhQUFBOztZQUVELElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDMUMsZ0JBQUEsU0FBUyxHQUFHLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNqRSxhQUFBO1lBRUQsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDO1lBQzVCLE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEQsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzs7WUFHOUMsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO0FBQzlCLFlBQUEsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFDLE9BQU8sYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ3JELFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDckMsZ0JBQUEsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0IsYUFBQTtBQUVELFlBQUEsTUFBTSxNQUFNLEdBQW1CO0FBQzdCLGdCQUFBLGVBQWUsRUFBRSxDQUFBLEVBQUcsY0FBYyxDQUFBLElBQUEsRUFBTyxZQUFZLENBQUUsQ0FBQTtBQUN2RCxnQkFBQSxTQUFTLEVBQUUsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUMvQixnQkFBQSxPQUFPLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRTtBQUMzQixnQkFBQSxXQUFXLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRTtBQUNoQyxnQkFBQSxTQUFTLEVBQUUsU0FBUyxDQUFDLEtBQUssRUFBRTtBQUM1QixnQkFBQSxPQUFPLEVBQUUsSUFBYTtBQUN0QixnQkFBQSxRQUFRLEVBQUUsUUFBUTthQUNuQixDQUFDO0FBQ0YsWUFBQSxPQUFPLE1BQU0sQ0FBQztBQUNmLFNBQUE7Ozs7Ozs7QUFRRCxRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7QUFFM0QsUUFBQSxJQUFJLGFBQWEsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUksQ0FBQSxFQUFBLFdBQVcsU0FBUyxjQUFjLENBQUEsQ0FBQSxDQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRyxRQUFBLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsYUFBYSxFQUFFOztBQUVsQixZQUFBLGFBQWEsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUksQ0FBQSxFQUFBLGNBQWMsU0FBUyxXQUFXLENBQUEsQ0FBQSxDQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRixZQUFBLElBQUksYUFBYSxFQUFFO0FBQ2pCLGdCQUFBLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDakIsYUFBQTtBQUNGLFNBQUE7QUFDRCxRQUFBLElBQUksYUFBYSxFQUFFO1lBQ2pCLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN4RCxZQUFBLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFOztBQUV0RSxnQkFBQSxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsS0FBSyxnQkFBZ0IsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLG1CQUFtQixDQUFDO2dCQUN4RyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFFakUsZ0JBQUEsTUFBTSxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDakUsZ0JBQUEsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBRXJELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQztnQkFDNUIsTUFBTSxjQUFjLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEQsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzs7Z0JBRzlDLE1BQU0sUUFBUSxHQUFhLEVBQUUsQ0FBQztBQUM5QixnQkFBQSxNQUFNLGFBQWEsR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQzFDLE9BQU8sYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ3JELFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDckMsb0JBQUEsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0IsaUJBQUE7QUFFRCxnQkFBQSxNQUFNLE1BQU0sR0FBbUI7QUFDN0Isb0JBQUEsZUFBZSxFQUFFLENBQUEsRUFBRyxjQUFjLENBQUEsSUFBQSxFQUFPLFlBQVksQ0FBRSxDQUFBO0FBQ3ZELG9CQUFBLFNBQVMsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQy9CLG9CQUFBLE9BQU8sRUFBRSxTQUFTLENBQUMsTUFBTSxFQUFFO0FBQzNCLG9CQUFBLFdBQVcsRUFBRSxXQUFXLENBQUMsS0FBSyxFQUFFO0FBQ2hDLG9CQUFBLFNBQVMsRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFO0FBQzVCLG9CQUFBLE9BQU8sRUFBRSxJQUFhO0FBQ3RCLG9CQUFBLFFBQVEsRUFBRSxRQUFRO2lCQUNuQixDQUFDO0FBQ0YsZ0JBQUEsT0FBTyxNQUFNLENBQUM7QUFDZixhQUFBO0FBQ0YsU0FBQTtBQUVELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDYjs7Ozs7O0FBT0QsSUFBQSxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsYUFBb0IsRUFBRSxNQUFzQixFQUFBO1FBQzVFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7QUFBRSxZQUFBLE9BQU8sSUFBSSxDQUFDO1FBQzVELElBQUksVUFBVSxHQUF3QixJQUFJLENBQUM7UUFDM0MsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBRWxCLFFBQUEsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzVCLElBQUk7QUFDRixnQkFBQSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7Ozs7Ozs7O0FBUXJELGdCQUFBLEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxJQUFJLEVBQUUsRUFBRTtBQUNqQyxvQkFBQSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsRUFBRTtBQUNqQyx3QkFBQSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7d0JBQzlCLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDcEIscUJBQUE7QUFDRixpQkFBQTtBQUNGLGFBQUE7QUFBQyxZQUFBLE9BQU8sQ0FBQyxFQUFFO0FBQ1YsZ0JBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyw2Q0FBNkMsRUFBRTtvQkFDekQsSUFBSTtBQUNKLG9CQUFBLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLGlCQUFBLENBQUMsQ0FBQztBQUNKLGFBQUE7QUFDRixTQUFBO0FBQ0QsUUFBQSxPQUFPLFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztLQUNwRDtBQUVELElBQUEsZUFBZSxDQUFDLElBQVksRUFBQTtRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87QUFBRSxZQUFBLE9BQU8sRUFBRSxDQUFDO1FBQzdCLElBQUksV0FBVyxHQUFtQixFQUFFLENBQUM7UUFDckMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLFFBQUEsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQzVCLElBQUk7Z0JBQ0YsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QixnQkFBQSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDakMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLEVBQUU7d0JBQ3RDLFNBQVMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzt3QkFDbkMsV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUN2QixxQkFBQTtBQUNGLGlCQUFBO0FBQ0YsYUFBQTtBQUFDLFlBQUEsT0FBTyxDQUFDLEVBQUU7QUFDVixnQkFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxFQUFFO29CQUNyRCxJQUFJO0FBQ0osb0JBQUEsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDeEIsaUJBQUEsQ0FBQyxDQUFDO0FBQ0osYUFBQTtBQUNGLFNBQUE7QUFDRCxRQUFBLE9BQU8sV0FBVyxDQUFDO0tBQ3BCOztBQUdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkc7QUFDSCxJQUFBLGdCQUFnQixDQUFDLElBQVksRUFBQTtRQUMzQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakQ7O0FBR0Q7O0FBRUc7SUFDSCxhQUFhLEdBQUE7UUFDWCxPQUFPO0FBQ0wsWUFBQSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO0FBQ3JCLFlBQUEsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtTQUNqQyxDQUFDO0tBQ0g7QUFDRjs7QUMzckNELFNBQVMsV0FBVyxDQUFDLEdBQVcsRUFBQTtJQUM5QixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFlBQVksQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFBO0FBQ3hDLElBQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNuQixJQUFBLElBQUksVUFBVSxHQUFHLElBQUksS0FBSyxDQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3pELElBQUEsSUFBSSxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVsRCxJQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xDLFFBQUEsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNCLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLFlBQUEsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDZCxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDckIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJO2FBQ3RCLENBQUM7QUFDRixZQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDcEUsZ0JBQUEsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEQsYUFBQTtBQUNELFlBQUEsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUN2QixTQUFBO0FBQ0QsUUFBQSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZFLEtBQUE7QUFDRCxJQUFBLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLENBQUM7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsaUJBQWlCLENBQUMsU0FBaUIsRUFBRSxLQUFhLEVBQUE7QUFDekQsSUFBQSxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbEMsSUFBQSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUFFLFFBQUEsT0FBTyxJQUFJLENBQUM7QUFDdkMsSUFBQSxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0FBQ2hDLElBQUEsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxJQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFDakQsSUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQztJQUN4RCxLQUFLLElBQUksR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO0FBQzNDLFFBQUEsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksU0FBUztBQUFFLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDaEUsS0FBQTtBQUNELElBQUEsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRW9CLE1BQUEsV0FBWSxTQUFRb0gsd0JBQXFCLENBQUE7SUFHNUQsV0FBWSxDQUFBLEdBQVEsRUFBRSxNQUE0QixFQUFBO1FBQ2hELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNYLFFBQUEsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDZixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOzs7QUFJckIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FFbEIsQ0FBQztBQUNGLFFBQUEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQWtCLEtBQUk7OztZQUd4RCxNQUFNLGFBQWEsR0FBRyxJQUVyQixDQUFDO0FBQ0YsWUFBQSxhQUFhLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQyxZQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2YsU0FBQyxDQUFDLENBQUM7QUFFSCxRQUFBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMscUJBQXFCLEVBQUU7QUFDOUMsWUFBQSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3RSxTQUFBO0tBQ0Y7QUFFRCxJQUFBLGNBQWMsQ0FBQyxPQUE2QixFQUFBOztRQUUxQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckQsUUFBQSxPQUFPLFdBQVcsQ0FBQyxNQUFNLEdBQUcsV0FBVyxHQUFHLENBQUUsT0FBTyxDQUFDLEtBQUssQ0FBRSxDQUFDO0tBQzdEO0FBRUQsSUFBQSxrQkFBa0IsQ0FBQyxPQUE2QixFQUFBOztBQUU5QyxRQUFBLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUM1RSxRQUFRLElBQUc7QUFDVCxZQUFBLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ25FLFlBQUEsSUFBSSxXQUFXO0FBQ2IsZ0JBQUEsT0FBTyxXQUFXLENBQUM7WUFFckIsV0FBVyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3BFLFlBQUEsSUFBSSxXQUFXO0FBQ2IsZ0JBQUEsT0FBTyxXQUFXLENBQUM7WUFFckIsV0FBVyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ25FLFlBQUEsSUFBSSxXQUFXO0FBQ2IsZ0JBQUEsT0FBTyxXQUFXLENBQUM7WUFFckIsV0FBVyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2xFLFlBQUEsSUFBSSxXQUFXO0FBQ2IsZ0JBQUEsT0FBTyxXQUFXLENBQUM7WUFFckIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN6RCxDQUNGLENBQUMsQ0FBQzs7UUFHSCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUU7QUFDaEQsWUFBQSxPQUFPLG1CQUFtQixDQUFDO0FBQzVCLFNBQUE7O1FBR0QsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUM7O0FBR2hGLFFBQUEsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUM7QUFDckMsUUFBQSxLQUFLLE1BQU0sVUFBVSxJQUFJLG1CQUFtQixFQUFFO0FBQzVDLFlBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDaEMsZ0JBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN6QixhQUFBO0FBQ0YsU0FBQTtBQUVELFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZjtBQUVEOztBQUVHO0lBQ0ssbUJBQW1CLENBQUMsT0FBNkIsRUFBRSxvQkFBOEIsRUFBQTtRQUN2RixNQUFNLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDOztBQUcxQyxRQUFBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0JBQXdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUU7WUFDL0UsSUFBSTtBQUNGLGdCQUFBLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEYsZ0JBQUEsS0FBSyxNQUFNLFVBQVUsSUFBSSxrQkFBa0IsRUFBRTs7QUFFM0Msb0JBQUEsSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDbEYsd0JBQUEsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ25DLHFCQUFBO0FBQ0YsaUJBQUE7QUFDRixhQUFBO1lBQUMsTUFBTTs7QUFFUCxhQUFBO0FBQ0YsU0FBQTs7QUFHRCxRQUFBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0JBQXdCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsRyxJQUFJO2dCQUNGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUNoRSxPQUFPLENBQUMsTUFBTSxFQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNuQixDQUFDOztBQUdGLGdCQUFBLEtBQUssTUFBTSxPQUFPLElBQUksV0FBVyxDQUFDLGNBQWMsRUFBRTtBQUNoRCxvQkFBQSxJQUFJLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUM1RSx3QkFBQSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEMscUJBQUE7QUFDRixpQkFBQTtBQUNGLGFBQUE7WUFBQyxNQUFNOztBQUVQLGFBQUE7QUFDRixTQUFBO0FBRUQsUUFBQSxPQUFPLGdCQUFnQixDQUFDO0tBQ3pCO0lBRU8sa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxJQUFZLEVBQUE7Ozs7O0FBS3ZELFFBQUEsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsUUFBQSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxRQUFBLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFBLENBQUEsRUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUEsQ0FBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDaEUsWUFBQSxNQUFNLFdBQVcsR0FBRztnQkFDbEIsT0FBTztnQkFDUCxDQUFDLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztnQkFDM0MsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ3ZDLENBQUMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUM1QyxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUN6QyxhQUFBO2lCQUNFLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxRQUFRLENBQUEsQ0FBQSxFQUFJLEdBQUcsQ0FBQSxDQUFFLENBQUM7QUFDaEMsaUJBQUEsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekUsWUFBQSxPQUFPLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxTQUFTLENBQUM7QUFDekQsU0FBQTtLQUNGO0lBRU8sdUJBQXVCLENBQUMsUUFBZ0IsRUFBRSxJQUFZLEVBQUE7Ozs7Ozs7OztBQVM1RCxRQUFBLE1BQU0sWUFBWSxHQUFHLENBQUMsV0FBbUIsS0FDdkMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkYsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzthQUN0RSxHQUFHLENBQUMsWUFBWSxDQUFDO2FBQ2pCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNiLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLENBQUssRUFBQSxFQUFBLGFBQWEsQ0FBRyxDQUFBLENBQUEsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0RCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0FBQ3BDLFFBQUEsSUFBSSxLQUFLLEVBQUU7QUFDVCxZQUFBLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTs7QUFFMUIsWUFBQSxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQVcsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELFlBQUEsTUFBTSxXQUFXLEdBQUc7QUFDbEIsZ0JBQUEsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDZixnQkFBQSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQztBQUNoQixnQkFBQSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztBQUNmLGdCQUFBLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO0FBQ2pCLGdCQUFBLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO0FBQ2pCLGdCQUFBLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO0FBQ2xCLGdCQUFBLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDO0FBQ3BCLGdCQUFBLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO0FBQ25CLGdCQUFBLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO0FBQ2pCLGdCQUFBLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDO0FBQ3BCLGFBQUE7aUJBQ0UsR0FBRyxDQUFDLEdBQUcsSUFBRztBQUNULGdCQUFBLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQzs7QUFFMUMsZ0JBQUEsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsYUFBQyxDQUFDO2lCQUNELEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxTQUFTLENBQUEsQ0FBQSxFQUFJLEdBQUcsQ0FBQSxDQUFFLENBQUM7QUFDakMsaUJBQUEsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0UsWUFBQSxPQUFPLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxTQUFTLENBQUM7QUFDekQsU0FBQTtLQUNGO0lBRU8sc0JBQXNCLENBQUMsUUFBZ0IsRUFBRSxJQUFZLEVBQUE7OztBQUczRCxRQUFBLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVoRCxRQUFBLE1BQU0sYUFBYSxHQUFHLElBQUksTUFBTSxDQUFDLENBQUEsRUFBQSxFQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQXNCLG1CQUFBLEVBQUEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQSxDQUFBLEVBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBSSxDQUFBLEVBQUEsQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQSxDQUFBLEVBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBSSxDQUFBLEVBQUEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQSxDQUFBLEVBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBUyxNQUFBLEVBQUEsVUFBVSxDQUFhLFdBQUEsQ0FBQSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hPLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDcEQsUUFBQSxJQUFJLGFBQWEsRUFBRTtZQUNqQixNQUFNLFFBQVEsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQzs7QUFHakUsWUFBQSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQzs7WUFHaEgsSUFBSSxlQUFlLEdBQUcsR0FBRyxDQUFDO1lBQzFCLElBQUkscUJBQXFCLEdBQUcsUUFBUSxDQUFDO0FBQ3JDLFlBQUEsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNsRCxnQkFBQSxJQUFJLFdBQVcsRUFBRTtBQUNmLG9CQUFBLGVBQWUsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2pDLHFCQUFxQixHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMvQyxpQkFBQTtBQUNGLGFBQUE7QUFFRCxZQUFBLE1BQU0sV0FBVyxHQUFHO2dCQUNsQixDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQztnQkFDcEQsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUM7Z0JBQ2xELENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxDQUFDO2dCQUNqRCxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsQ0FBQztnQkFDbEQsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFDcEQsYUFBQTtpQkFDRSxHQUFHLENBQUMsQ0FBQyxJQUFHO2dCQUNQLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDOztBQUUvQyxnQkFBQSxJQUFJLFFBQVEsRUFBRTs7O29CQUdaLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsb0JBQUEsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssZUFBZSxFQUFFOztBQUU1RCx3QkFBQSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNwRSx3QkFBQSxJQUFJLHFCQUFxQixFQUFFOzs7Ozs7Ozs7QUFTekIsNEJBQUEsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7QUFDM0UsZ0NBQUEsT0FBTyxDQUFHLEVBQUEsU0FBUyxDQUFJLENBQUEsRUFBQSxlQUFlLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQzlGLDZCQUFBO0FBQ0QsNEJBQUEsT0FBTyxJQUFJLENBQUM7QUFDYix5QkFBQTtBQUFNLDZCQUFBOztBQUVMLDRCQUFBLE9BQU8sQ0FBRyxFQUFBLFNBQVMsQ0FBSSxDQUFBLEVBQUEsUUFBUSxFQUFFLENBQUM7QUFDbkMseUJBQUE7QUFDRixxQkFBQTs7Ozs7Ozs7Ozs7OztBQWFELG9CQUFBLE1BQU0saUJBQWlCLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLG9CQUFBLElBQUksaUJBQWlCLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFO0FBQ3RFLHdCQUFBLE9BQU8sR0FBRyxTQUFTLENBQUEsQ0FBQSxFQUFJLGVBQWUsQ0FBSSxDQUFBLEVBQUEsaUJBQWlCLEVBQUUsQ0FBQztBQUMvRCxxQkFBQTtBQUNELG9CQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2IsaUJBQUE7QUFDRCxnQkFBQSxPQUFPLENBQUcsRUFBQSxTQUFTLENBQUksQ0FBQSxFQUFBLFFBQVEsRUFBRSxDQUFDO0FBQ3BDLGFBQUMsQ0FBQztpQkFDRCxNQUFNLENBQUMsQ0FBQyxJQUFJLEtBQXFCLElBQUksS0FBSyxJQUFJLENBQUM7QUFDL0MsaUJBQUEsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0UsWUFBQSxPQUFPLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxTQUFTLENBQUM7QUFDekQsU0FBQTs7O0FBSUQsUUFBQSxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxRQUFBLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUU5QyxRQUFBLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxNQUFNLENBQUMsQ0FBQSxFQUFBLEVBQUssV0FBVyxDQUFBLFlBQUEsRUFBZSxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFJLENBQUEsRUFBQSxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFBLENBQUEsRUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUksQ0FBQSxFQUFBLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUEsQ0FBQSxFQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUksQ0FBQSxFQUFBLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUEsTUFBQSxFQUFTLFNBQVMsQ0FBQSxlQUFBLENBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDclEsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDNUQsUUFBQSxJQUFJLGlCQUFpQixFQUFFO1lBQ3JCLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQzs7QUFFeEUsWUFBQSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7O0FBR3ZILFlBQUEsTUFBTSxPQUFPLEdBQUc7QUFDZCxnQkFBQSxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztBQUNqQixnQkFBQSxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztBQUNqQixnQkFBQSxDQUFDLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQztBQUNsQixnQkFBQSxDQUFDLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztBQUNwQixnQkFBQSxDQUFDLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztBQUNuQixnQkFBQSxDQUFDLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztBQUNqQixnQkFBQSxDQUFDLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQzthQUNwQixDQUFDO1lBQ0YsTUFBTSxXQUFXLEdBQUcsT0FBTztpQkFDeEIsR0FBRyxDQUFDLEdBQUcsSUFBRztBQUNULGdCQUFBLElBQUksT0FBTyxFQUFFOztBQUVYLG9CQUFBLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTs7QUFFdkQsd0JBQUEsT0FBTyxDQUFHLEVBQUEsUUFBUSxDQUFJLENBQUEsRUFBQSxHQUFHLEVBQUUsQ0FBQztBQUM3QixxQkFBQTtBQUNELG9CQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2IsaUJBQUE7QUFDRCxnQkFBQSxPQUFPLENBQUcsRUFBQSxRQUFRLENBQUksQ0FBQSxFQUFBLEdBQUcsRUFBRSxDQUFDO0FBQzlCLGFBQUMsQ0FBQztpQkFDRCxNQUFNLENBQUMsQ0FBQyxJQUFJLEtBQXFCLElBQUksS0FBSyxJQUFJLENBQUM7QUFDL0MsaUJBQUEsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0UsWUFBQSxPQUFPLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxTQUFTLENBQUM7QUFDekQsU0FBQTs7QUFHRCxRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQSxjQUFBLENBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUE7UUFDbEUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QyxRQUFBLElBQUksWUFBWSxFQUFFO1lBQ2hCLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hELFlBQUEsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQ25DLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQ2hDLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7Z0JBQ2xDLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDcEMsYUFBQSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDOzs7Ozs7QUFNMUUsWUFBQSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQzFCLGdCQUFBLE9BQU8sV0FBVyxDQUFDO0FBQ3BCLGFBQUE7QUFDRixTQUFBOzs7O1FBS0QsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN2QyxRQUFBLElBQUksU0FBUyxJQUFJLFNBQVMsS0FBSyxVQUFVLEVBQUU7WUFDekMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3RELFlBQUEsSUFBSSxXQUFXLEVBQUU7QUFDZixnQkFBQSxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFOUMsZ0JBQUEsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNyRSxNQUFNLFdBQVcsR0FBYSxFQUFFLENBQUM7QUFDakMsZ0JBQUEsS0FBSyxNQUFNLFFBQVEsSUFBSSxTQUFTLEVBQUU7QUFDaEMsb0JBQUEsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFFLG9CQUFBLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO3dCQUN4QixXQUFXLENBQUMsSUFBSSxDQUFDLENBQUcsRUFBQSxTQUFTLENBQUksQ0FBQSxFQUFBLElBQUksQ0FBSSxDQUFBLEVBQUEsYUFBYSxDQUFFLENBQUEsQ0FBQyxDQUFDO0FBQzNELHFCQUFBO0FBQ0YsaUJBQUE7Z0JBRUQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25HLGdCQUFBLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDdkIsb0JBQUEsT0FBTyxRQUFRLENBQUM7QUFDakIsaUJBQUE7QUFDRixhQUFBO0FBQ0YsU0FBQTtLQUNGO0lBRU8scUJBQXFCLENBQUMsUUFBZ0IsRUFBRSxJQUFZLEVBQUE7O0FBRTFELFFBQUEsTUFBTSxRQUFRLEdBQUc7WUFDZixFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDekMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ25DLFlBQUEsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDbkQsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2hDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRTtTQUNuQyxDQUFDO0FBRUYsUUFBQSxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUMsTUFBTSxXQUFXLEdBQWEsRUFBRSxDQUFDO0FBRWpDLFFBQUEsS0FBSyxNQUFNLEdBQUcsSUFBSSxRQUFRLEVBQUU7OztZQUcxQixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqQyxZQUFBLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLFVBQVU7Z0JBQUUsU0FBUztBQUVqRCxZQUFBLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbEQsWUFBQSxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7O0FBR2hELFlBQUEsSUFBSSxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDL0MsZ0JBQUEsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLGdCQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO0FBQ3RDLG9CQUFBLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDL0IsaUJBQUE7QUFDRixhQUFBOzs7Ozs7OztBQVNELFlBQUEsS0FBSyxNQUFNLElBQUksSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFO0FBQzNCLGdCQUFBLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUMvQixvQkFBQSxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakYsb0JBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDdEMsd0JBQUEsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMvQixxQkFBQTtBQUNGLGlCQUFBO0FBQ0YsYUFBQTtBQUNGLFNBQUE7QUFFRCxRQUFBLE9BQU8sV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FBQztLQUN6RDtJQUVPLGtCQUFrQixDQUFDLFFBQWdCLEVBQUUsSUFBWSxFQUFBO1FBQ3ZELE9BQU87QUFDTCxZQUFBLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO0FBQ2hCLFlBQUEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUM7QUFDcEIsWUFBQSxDQUFDLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQztBQUNwQixTQUFBLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztLQUNyRDtJQUVELGdCQUFnQixDQUFDLFVBQWtCLEVBQUUsRUFBZSxFQUFBO1FBQ2xELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwRCxRQUFBLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLFVBQVUsRUFBRTtBQUN0QyxZQUFBLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkIsT0FBTztBQUNSLFNBQUE7Ozs7O1FBS0QsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ1gsUUFBQSxFQUFFLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDbkMsUUFBQSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFLFFBQUEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsRUFBRSx3QkFBd0IsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztLQUNqRTs7Ozs7Ozs7OztBQVdPLElBQUEsa0JBQWtCLENBQUMsVUFBa0IsRUFBQTtRQUMzQyxJQUFJO0FBQ0YsWUFBQSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUNyQyxnQkFBQSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUM1RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7Ozs7O0FBTW5ELGdCQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ2hDLG9CQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2IsaUJBQUE7Z0JBQ0QsT0FBTyxVQUFVLENBQUMsZUFBZSxDQUFDO0FBQ25DLGFBQUE7WUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN6RCxZQUFBLElBQUksU0FBUyxFQUFFO2dCQUNiLElBQUksU0FBUyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDdkQsb0JBQUEsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0RixpQkFBQTtBQUNELGdCQUFBLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pGLGdCQUFBLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdFLGdCQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDOUQsZ0JBQUEsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsZ0JBQUEsT0FBTyxHQUFHLGNBQWMsQ0FBQSxDQUFBLEVBQUksYUFBYSxDQUFJLENBQUEsRUFBQSxZQUFZLEVBQUUsQ0FBQztBQUM3RCxhQUFBO1lBRUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2RCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNaLE1BQU0saUJBQWlCLEdBQUcsd0ZBQXdGLENBQUM7QUFDbkgsZ0JBQUEsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7b0JBQ3ZDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDaEIsaUJBQUE7QUFDRixhQUFBO1lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdkQsWUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRTtBQUNsQyxnQkFBQSxPQUFPLElBQUksQ0FBQztBQUNiLGFBQUE7QUFDRCxZQUFBLElBQUksT0FBTyxFQUFFO0FBQ1gsZ0JBQUEsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDNUQsZ0JBQUEsTUFBTSxtQkFBbUIsR0FBRyw4QkFBOEIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkcsZ0JBQUEsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0JBQXdCLElBQUksT0FBTyxJQUFJLG1CQUFtQixDQUFDO0FBQ3ZHLGdCQUFBLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsQ0FBQztBQUN4RixnQkFBQSxJQUFJLGNBQWMsRUFBRTtBQUNsQixvQkFBQSxPQUFPLFFBQVEsQ0FBQztBQUNqQixpQkFBQTtBQUNELGdCQUFBLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pFLGdCQUFBLE9BQU8sQ0FBRyxFQUFBLFFBQVEsQ0FBSSxDQUFBLEVBQUEsUUFBUSxFQUFFLENBQUM7QUFDbEMsYUFBQTtZQUNELE9BQU8sWUFBWSxDQUFDLGVBQWUsQ0FBQztBQUNyQyxTQUFBO0FBQUMsUUFBQSxPQUFPLEtBQUssRUFBRTtZQUNkLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0RBQW9ELEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUN6RixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2IsU0FBQTtLQUNGO0lBRUQsZ0JBQWdCLENBQUMsVUFBa0IsRUFBRSxLQUFpQyxFQUFBOztRQUVwRSxJQUFJLE1BQU0sR0FBa0IsSUFBSSxDQUFDO0FBQ2pDLFFBQUEsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUN4QixZQUFBLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM5QixTQUFBO0FBQU0sYUFBQTtZQUNMLE1BQU0sR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5QyxTQUFBO1FBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLE9BQU87QUFDUixTQUFBO0FBRUQsUUFBQSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDOzs7Ozs7OztBQVFwQyxRQUFBLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO0FBQ3ZDLFFBQUEsTUFBTSxTQUFTLEdBQUcsQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLFVBQVUsQ0FBQyxXQUFXLEVBQUU7QUFDcEYsY0FBRSxVQUFVO2NBQ1YsVUFBVSxDQUFDO1FBQ2YsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHFCQUFxQixDQUFDOztRQUc5RCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDOzs7OztRQU12RCxJQUFJLENBQUMsT0FBTyxFQUFFOzs7WUFHWixNQUFNLGlCQUFpQixHQUFHLHdGQUF3RixDQUFDO0FBQ25ILFlBQUEsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7Z0JBQ3ZDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDaEIsYUFBQTtBQUNGLFNBQUE7O0FBR0QsUUFBQSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsRUFBRTtBQUNyQyxZQUFBLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDNUUsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGVBQWUsQ0FBQztZQUMxRCxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ3RCLFNBQUE7QUFBTSxhQUFBOztZQUVMLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRXpELFlBQUEsSUFBSSxTQUFTLEVBQUU7OztnQkFHYixJQUFJLFNBQVMsQ0FBQyxRQUFRLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUN2RCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUc7QUFDM0Msd0JBQUEsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4RCx3QkFBQSxPQUFPLFlBQVk7OEJBQ2Ysb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUM7OEJBQ3pDLFNBQVMsQ0FBQztBQUNoQixxQkFBQyxDQUFDLENBQUM7QUFDSCxvQkFBQSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQyxpQkFBQTtBQUFNLHFCQUFBOztBQUVMLG9CQUFBLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pGLG9CQUFBLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztBQUc3RSxvQkFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQzlELG9CQUFBLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXpELG9CQUFBLElBQUksWUFBWSxFQUFFO0FBQ2hCLHdCQUFBLE9BQU8sR0FBRyxvQkFBb0IsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsRUFDUixjQUFjLEVBQ2QsWUFBWSxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQ3JDLEdBQUcsQ0FBSSxDQUFBLEVBQUEsYUFBYSxHQUFHLEdBQUcsb0JBQW9CLENBQzdDLElBQUksQ0FBQyxHQUFHLEVBQ1IsWUFBWSxDQUNiLENBQUM7QUFDSCxxQkFBQTtBQUFNLHlCQUFBO3dCQUNMLE9BQU8sR0FBRyxHQUFHLGNBQWMsQ0FBQSxDQUFBLEVBQUksYUFBYSxDQUFJLENBQUEsRUFBQSxZQUFZLEVBQUUsQ0FBQztBQUNoRSxxQkFBQTtBQUNGLGlCQUFBO0FBQ0QsZ0JBQUEsWUFBWSxHQUFHLEtBQUssQ0FBQztBQUN0QixhQUFBO0FBQU0saUJBQUE7Z0JBQ0wsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7O0FBR3ZELGdCQUFBLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVELGdCQUFBLE1BQU0sbUJBQW1CLEdBQUcsOEJBQThCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZHLGdCQUFBLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHdCQUF3QixJQUFJLE9BQU8sSUFBSSxtQkFBbUIsSUFBSSxPQUFPLENBQUM7Ozs7Z0JBS2xILElBQUksT0FBTyxJQUFJLFlBQVksRUFBRTtBQUMzQixvQkFBQSxJQUFJLGNBQWMsRUFBRTs7QUFFbEIsd0JBQUEsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxDQUFDO3dCQUN4RixPQUFPLEdBQUcsUUFBUSxDQUFDO0FBQ25CLHdCQUFBLFlBQVksR0FBRyxLQUFLLENBQUM7QUFDdEIscUJBQUE7QUFBTSx5QkFBQTs7QUFFTCx3QkFBQSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7QUFHekUsd0JBQUEsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxDQUFDOzt3QkFHeEYsT0FBTyxHQUFHLG9CQUFvQixDQUM1QixJQUFJLENBQUMsR0FBRyxFQUNSLFFBQVEsRUFDUixZQUFZLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FDckMsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDOzt3QkFHbkIsWUFBWSxHQUFHLEtBQUssQ0FBQztBQUN0QixxQkFBQTtBQUNGLGlCQUFBO0FBQU0scUJBQUEsSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUU7O0FBRW5DLG9CQUFBLElBQUksY0FBYyxFQUFFO0FBQ2xCLHdCQUFBLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUMsQ0FBQzt3QkFDeEYsT0FBTyxHQUFHLFFBQVEsQ0FBQztBQUNwQixxQkFBQTtBQUFNLHlCQUFBO0FBQ0wsd0JBQUEsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekUsd0JBQUEsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQ3hGLHdCQUFBLE9BQU8sR0FBRyxDQUFHLEVBQUEsUUFBUSxDQUFJLENBQUEsRUFBQSxRQUFRLEVBQUUsQ0FBQztBQUNyQyxxQkFBQTtBQUNGLGlCQUFBO0FBQU0scUJBQUE7O0FBRUwsb0JBQUEsT0FBTyxHQUFHLFlBQVksQ0FBQyxlQUFlLENBQUM7QUFDeEMsaUJBQUE7O0FBRUYsYUFBQTtBQUNGLFNBQUE7QUFFRCxRQUFBLElBQUksWUFBWSxFQUFFO0FBQ2hCLFlBQUEsT0FBTyxHQUFHLG9CQUFvQixDQUM1QixJQUFJLENBQUMsR0FBRyxFQUNSLE9BQU8sRUFDUCxZQUFZLEdBQUcsU0FBUyxHQUFHLFNBQVMsQ0FDckMsQ0FBQztBQUNILFNBQUE7QUFFRCxRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ2pCLFlBQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQ2xELE9BQU87QUFDUixTQUFBO0FBRUQsUUFBQSxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUduRSxRQUFBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsc0JBQXNCO0FBQzNDLFlBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0JBQXdCO0FBQzdDLFlBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUU7QUFDOUIsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBRzs7QUFFcEUsYUFBQyxDQUFDLENBQUM7QUFDSixTQUFBO0tBQ0Y7QUFFRCxJQUFBLFNBQVMsQ0FDUCxNQUFzQixFQUN0QixNQUFjLEVBQ2QsS0FBWSxFQUFBO1FBRVosSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLG9CQUFvQixFQUFFO0FBQzlDLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDYixTQUFBO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUM7QUFDckUsUUFBQSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSTtZQUN0QyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7QUFDakIsWUFBQSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxhQUFhLENBQUMsTUFBTTtTQUNyQyxDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFaEQsUUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRTtBQUNwQyxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2IsU0FBQTtBQUVELFFBQUEsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FDbkM7WUFDRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7QUFDbkIsWUFBQSxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDO1NBQ3BCLEVBQ0QsUUFBUSxDQUNULENBQUM7O1FBR0YsSUFBSSxhQUFhLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRTtBQUN2RCxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2IsU0FBQTtRQUVELE9BQU87QUFDTCxZQUFBLEtBQUssRUFBRSxRQUFRO0FBQ2YsWUFBQSxHQUFHLEVBQUUsTUFBTTtBQUNYLFlBQUEsS0FBSyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1NBQ3pFLENBQUM7S0FDSDtBQUVTLElBQUEsZ0JBQWdCLENBQUMsVUFBa0IsRUFBQTtBQUMzQyxRQUFBLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUc7QUFDaEQsWUFBQSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQyxPQUFPLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxRQUFRLENBQUEsQ0FBQSxDQUFHLENBQUMsQ0FBQztBQUMvQyxTQUFDLENBQUMsQ0FBQztLQUNKOzs7Ozs7QUFPUyxJQUFBLG1CQUFtQixDQUFDLFVBQWtCLEVBQUE7UUFDOUMsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7QUFDakQsWUFBQSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxZQUFBLE1BQU0sTUFBTSxHQUFHLENBQUcsRUFBQSxRQUFRLEdBQUcsQ0FBQztBQUM5QixZQUFBLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDakMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3RCLGFBQUE7QUFDRixTQUFBO0FBQ0QsUUFBQSxPQUFPLENBQUMsQ0FBQztLQUNWO0FBRVMsSUFBQSxNQUFNLENBQUMsV0FBcUIsRUFBQTtBQUNwQyxRQUFBLE9BQU8sV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFTLElBQUksRUFBRSxHQUFHLEVBQUE7WUFDMUMsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUMxQyxTQUFDLENBQUMsQ0FBQTtLQUNIO0FBQ0Y7O0FDL3lCZSxTQUFBLGVBQWUsQ0FBQyxNQUE0QixFQUFFLElBQVksRUFBQTtBQUN4RSxJQUFBLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ2pDLElBQUEsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDOztJQUcxQyxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1gsT0FBTztBQUNSLEtBQUE7QUFDRCxJQUFBLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7Ozs7O0lBTTdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7O0lBR3RDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdEQsSUFBQSxJQUFJLFNBQVMsRUFBRTs7UUFFYixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7O1FBR2hCLElBQUksU0FBUyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFHO0FBQzNDLGdCQUFBLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFO29CQUNyQixPQUFPLENBQUEsRUFBQSxFQUFLLFNBQVMsQ0FBQSxFQUFBLENBQUksQ0FBQztBQUMzQixpQkFBQTtxQkFBTSxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUU7QUFDekIsb0JBQUEsT0FBTyxDQUFJLENBQUEsRUFBQSxTQUFTLENBQUssRUFBQSxFQUFBLFNBQVMsR0FBRyxDQUFDO0FBQ3ZDLGlCQUFBO0FBQU0scUJBQUE7Ozs7O0FBS0wsb0JBQUEsT0FBTyxTQUFTLENBQUM7QUFDbEIsaUJBQUE7QUFDSCxhQUFDLENBQUMsQ0FBQztBQUNILFlBQUEsTUFBTSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0IsU0FBQTtBQUFNLGFBQUE7O0FBRUwsWUFBQSxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFLFlBQUEsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7QUFHeEUsWUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDekQsWUFBQSxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV6RCxJQUFJLElBQUksSUFBSSxTQUFTLEVBQUU7O2dCQUVyQixNQUFNLEdBQUcsS0FBSyxjQUFjLENBQUEsR0FBQSxFQUFNLGFBQWEsQ0FBTSxHQUFBLEVBQUEsWUFBWSxJQUFJLENBQUM7QUFDdkUsYUFBQTtpQkFBTSxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUU7O2dCQUV6QixNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUEsRUFBQSxFQUFLLFNBQVMsQ0FBQyxlQUFlLEdBQUcsQ0FBQztBQUM1RCxhQUFBO2lCQUFNLElBQUksSUFBSSxJQUFJLE9BQU8sRUFBRTs7Z0JBRTFCLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQSxDQUFBLEVBQUksYUFBYSxDQUFJLENBQUEsRUFBQSxZQUFZLEVBQUUsQ0FBQztBQUMvRCxhQUFBO2lCQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRTs7Z0JBRXpCLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQSxDQUFBLEVBQUksYUFBYSxDQUFJLENBQUEsRUFBQSxZQUFZLEVBQUUsQ0FBQztBQUMvRCxhQUFBO0FBQ0YsU0FBQTtBQUVELFFBQUEsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNuRCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPO0FBQ1IsS0FBQTs7SUFHRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBRTVDLElBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUU7O1FBRTFCLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDZixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQ2QsU0FBQSxDQUFDLENBQUM7UUFDSCxPQUFPO0FBQ1IsS0FBQTs7O0lBSUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDOztBQUd0RCxJQUFBLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BELElBQUEsTUFBTSxtQkFBbUIsR0FBRyw4QkFBOEIsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNwRyxJQUFBLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsd0JBQXdCLElBQUksT0FBTyxJQUFJLG1CQUFtQixJQUFJLE9BQU8sQ0FBQztJQUU3RyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFaEIsSUFBSSxJQUFJLElBQUksU0FBUyxFQUFFOztBQUVyQixRQUFBLElBQUksT0FBTyxFQUFFO0FBQ1QsWUFBQSxJQUFJLGNBQWMsRUFBRTs7QUFFaEIsZ0JBQUEsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLENBQUM7Z0JBQzNFLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDckIsYUFBQTtBQUFNLGlCQUFBOztBQUVILGdCQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7O0FBRTVELGdCQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBRTNFLGdCQUFBLE1BQU0sR0FBRyxDQUFLLEVBQUEsRUFBQSxRQUFRLENBQU0sR0FBQSxFQUFBLFFBQVEsRUFBRSxDQUFDO0FBQzFDLGFBQUE7QUFDSixTQUFBO0FBQU0sYUFBQTs7QUFFSCxZQUFBLE1BQU0sR0FBRyxDQUFLLEVBQUEsRUFBQSxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUM7QUFDMUMsU0FBQTtBQUNGLEtBQUE7U0FBTSxJQUFJLElBQUksSUFBSSxNQUFNLEVBQUU7O1FBRXpCLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQSxFQUFBLEVBQUssSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDO0FBQ3ZELEtBQUE7U0FBTSxJQUFJLElBQUksSUFBSSxPQUFPLEVBQUU7O0FBRTFCLFFBQUEsTUFBTSxHQUFHLENBQUcsRUFBQSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDcEMsS0FBQTtTQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sRUFBRTs7UUFFekIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM1QyxRQUFBLE1BQU0sR0FBRyxDQUFHLEVBQUEsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ3BDLEtBQUE7QUFFRCxJQUFBLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDbkQsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCLENBQUM7U0FFZSxtQkFBbUIsQ0FDakMsTUFBNEIsRUFDNUIsSUFBVSxFQUNWLE1BQWMsRUFBQTtBQUVkLElBQUEsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDakMsSUFBQSxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFMUMsSUFBQSxJQUFJLE1BQU0sRUFBRTtBQUNWLFFBQUEsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN0RCxLQUFBO0FBQ0gsQ0FBQztBQUVLLFNBQVUsYUFBYSxDQUFDLE1BQTRCLEVBQUE7SUFDeEQsTUFBTSxNQUFNLEdBQUcsQ0FBRyxFQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFHLEVBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUcsRUFBQSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQSxDQUFFLENBQUM7QUFDcEcsSUFBQSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ3hCLElBQUEsbUJBQW1CLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUssU0FBVSxxQkFBcUIsQ0FBQyxNQUE0QixFQUFBO0FBQ2hFLElBQUEsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDdEMsSUFBQSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ3hCLElBQUEsbUJBQW1CLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUssU0FBVSxxQkFBcUIsQ0FBQyxNQUE0QixFQUFBO0FBQ2hFLElBQUEsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7QUFDMUMsSUFBQSxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ3hCLElBQUEsbUJBQW1CLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1Qzs7QUN0SkEsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7QUFDN0IsTUFBTSxZQUFZLEdBQUcsc0NBQXNDLENBQUM7QUFDNUQsTUFBTUMsa0JBQWdCLEdBQUcsTUFBTSxDQUFDO0FBRWhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxZQUFZLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUVoQyxNQUFPLGNBQWMsQ0FBQTtBQVFqQyxJQUFBLFdBQUEsQ0FBWSxNQUFjLEVBQUE7UUFObEIsSUFBTyxDQUFBLE9BQUEsR0FBcUIsRUFBRSxDQUFDO1FBQy9CLElBQWEsQ0FBQSxhQUFBLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQW9CLENBQUEsb0JBQUEsR0FBYSxFQUFFLENBQUM7UUFDcEMsSUFBVSxDQUFBLFVBQUEsR0FBRyxLQUFLLENBQUM7QUFDbkIsUUFBQSxJQUFBLENBQUEsZUFBZSxHQUFrQixJQUFJLENBQUM7QUFHNUMsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztLQUM3QjtBQUVEOztBQUVHO0lBQ0ssb0JBQW9CLEdBQUE7O1FBRTFCLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFLO1lBQzdDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9CLEVBQUVBLGtCQUFnQixDQUFDLENBQUM7S0FDdEI7QUFFRDs7QUFFRztJQUNILG1CQUFtQixHQUFBO0FBQ2pCLFFBQUEsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLElBQUksRUFBRTtBQUNqQyxZQUFBLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQzNDLFlBQUEsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDN0IsU0FBQTtLQUNGO0FBRUQ7OztBQUdHO0lBQ0ssc0JBQXNCLEdBQUE7QUFDNUIsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixPQUFPO0FBQ1IsU0FBQTtBQUVELFFBQUEsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDOztRQUdyRCxJQUFJLFdBQVcsR0FBRyxnQkFBZ0IsRUFBRTtZQUNsQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkIsWUFBQSxNQUFNLENBQUMsS0FBSyxDQUFDLG1EQUFtRCxXQUFXLENBQUEsR0FBQSxFQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQSxRQUFBLENBQVUsQ0FBQyxDQUFDO0FBQzlILFNBQUE7O1FBR0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ3BCO0FBRUQ7Ozs7Ozs7QUFPRztBQUNLLElBQUEsY0FBYyxDQUFDLEdBQVksRUFBQTtRQUNqQyxNQUFNLFFBQVEsR0FBcUIsRUFBRSxDQUFDOzs7Ozs7QUFNdEMsUUFBQSxJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3pELFlBQUEsT0FBTyxRQUFRLENBQUM7QUFDakIsU0FBQTtBQUNELFFBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFFBQUEsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBOEIsQ0FBQyxFQUFFO0FBQ3pFLFlBQUEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7QUFDN0IsZ0JBQUEsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakQsYUFBQTtBQUFNLGlCQUFBLElBQ0wsS0FBSztnQkFDTCxPQUFPLEtBQUssS0FBSyxRQUFRO0FBQ3pCLGdCQUFBLE9BQVEsS0FBc0IsQ0FBQyxLQUFLLEtBQUssUUFBUTtBQUNqRCxnQkFBQSxPQUFRLEtBQXNCLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFDcEQ7Ozs7Z0JBSUEsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHO29CQUNkLEtBQUssRUFBRyxLQUFzQixDQUFDLEtBQUs7b0JBQ3BDLFFBQVEsRUFBRyxLQUFzQixDQUFDLFFBQVE7aUJBQzNDLENBQUM7QUFDSCxhQUFBOzs7QUFHRixTQUFBO0FBQ0QsUUFBQSxPQUFPLFFBQVEsQ0FBQztLQUNqQjtBQUVEOzs7QUFHRztJQUNLLFlBQVksQ0FBQyxLQUFtQixFQUFFLEdBQVcsRUFBQTtBQUNuRCxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEQsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLEdBQUcsWUFBWSxDQUFDLENBQUM7QUFDbEQsUUFBQSxPQUFPLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0tBQzVCO0FBRUQ7O0FBRUc7QUFDSCxJQUFBLE1BQU0sV0FBVyxHQUFBO1FBQ2YsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLE9BQU87QUFDUixTQUFBO1FBRUQsSUFBSTtZQUNGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDbEQsTUFBTSxJQUFJLEdBQUc3SCx3QkFBYSxDQUFDLENBQUEsRUFBRyxTQUFTLENBQUksQ0FBQSxFQUFBLFlBQVksQ0FBRSxDQUFBLENBQUMsQ0FBQztBQUMzRCxZQUFBLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEUsWUFBQSxJQUFJLE1BQU0sRUFBRTtBQUNWLGdCQUFBLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUQsZ0JBQUEsSUFBSSxJQUFJLEVBQUU7b0JBQ1IsTUFBTSxNQUFNLEdBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QyxvQkFBQSxJQUFJLE1BQU0sSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7d0JBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM1QyxxQkFBQTtBQUNGLGlCQUFBO0FBQ0YsYUFBQTtBQUNGLFNBQUE7QUFBQyxRQUFBLE9BQU8sS0FBSyxFQUFFOzs7Ozs7WUFNZCxNQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUNsRCxZQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0tBQzNCO0FBRUQ7O0FBRUc7QUFDSCxJQUFBLE1BQU0sV0FBVyxHQUFBO1FBQ2YsSUFBSTtZQUNGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7WUFDbEQsTUFBTSxJQUFJLEdBQUdBLHdCQUFhLENBQUMsQ0FBQSxFQUFHLFNBQVMsQ0FBSSxDQUFBLEVBQUEsWUFBWSxDQUFFLENBQUEsQ0FBQyxDQUFDO0FBQzNELFlBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOztBQUdyRCxZQUFBLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNkLGdCQUFBLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEQsYUFBQTtZQUVELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RixTQUFBO0FBQUMsUUFBQSxPQUFPLEtBQUssRUFBRTtZQUNkLE1BQU0sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELFNBQUE7S0FDRjtBQUVEOzs7QUFHRztBQUNLLElBQUEsbUJBQW1CLENBQUMsVUFBa0IsRUFBQTtRQUM1QyxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzFDLFlBQUEsT0FBTyxVQUFVLENBQUM7QUFDbkIsU0FBQTtBQUVELFFBQUEsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2xDLFFBQUEsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN4QixZQUFBLE9BQU8sT0FBTyxDQUFDO0FBQ2hCLFNBQUE7Ozs7Ozs7O0FBU0QsUUFBQSxPQUFPLE9BQU87YUFDWCxLQUFLLENBQUMsS0FBSyxDQUFDO2FBQ1osR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDdkUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ2Q7QUFFRDs7QUFFRztJQUNILE1BQU0sZUFBZSxDQUFDLFVBQWtCLEVBQUE7QUFDdEMsUUFBQSxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7UUFHekIsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRW5ELElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDZixPQUFPO0FBQ1IsU0FBQTs7UUFHRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzFDLFFBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRztZQUN6QixLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2pDLFlBQUEsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7U0FDckIsQ0FBQzs7QUFHRixRQUFBLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLGdCQUFnQixFQUFFO1lBQ3ZELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNwQixTQUFBOztRQUdELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzs7UUFHbkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVksS0FBSTtZQUN4QyxNQUFNLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDeEQsU0FBQyxDQUFDLENBQUM7S0FDSjtBQUVEOzs7QUFHRztJQUNLLFdBQVcsR0FBQTtBQUNqQixRQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzs7QUFHN0MsUUFBQSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDOztRQUdwRixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUM1QztBQUVEOztBQUVHO0FBQ0gsSUFBQSxNQUFNLFVBQVUsR0FBQTtBQUNkLFFBQUEsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ3BCO0FBRUQ7OztBQUdHO0lBQ0ssV0FBVyxHQUFBO0FBQ2pCLFFBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUc3QyxRQUFBLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7O0FBR3BGLFFBQUEsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQ2hFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FDckMsQ0FBQztBQUNGLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7S0FDeEI7QUFFRDs7O0FBR0c7SUFDSCxxQkFBcUIsQ0FBQyxLQUFLLEdBQUcsRUFBRSxFQUFBO0FBQzlCLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7OztBQUdwQixZQUFBLE9BQU8sRUFBRSxDQUFDO0FBQ1gsU0FBQTtRQUNELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDbEQ7QUFFRDs7O0FBR0c7QUFDSCxJQUFBLE1BQU0saUJBQWlCLENBQUMsS0FBSyxHQUFHLEVBQUUsRUFBQTtBQUNoQyxRQUFBLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ2xEO0FBRUQ7O0FBRUc7QUFDSCxJQUFBLE1BQU0sWUFBWSxHQUFBO0FBQ2hCLFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDbEIsUUFBQSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBQy9CLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdkIsUUFBQSxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUMxQjtBQUVEOzs7Ozs7QUFNRztJQUNILE1BQU0sV0FBVyxDQUFDLFVBQWtCLEVBQUE7QUFDbEMsUUFBQSxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV6QixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkQsSUFBSSxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDakMsT0FBTztBQUNSLFNBQUE7QUFFRCxRQUFBLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFFbkIsUUFBQSxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUMxQjtBQUVEOzs7Ozs7O0FBT0c7QUFDSCxJQUFBLE1BQU0sdUJBQXVCLEdBQUE7QUFDM0IsUUFBQSxNQUFNLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUV6QixRQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN2QixRQUFBLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ2hDLGFBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQzthQUMzRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsTUFBTTtZQUN0QixHQUFHO0FBQ0gsWUFBQSxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztZQUN0QyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO0FBQ3pCLFNBQUEsQ0FBQyxDQUFDLENBQUM7S0FDUDtBQUVEOztBQUVHO0lBQ0gsT0FBTyxHQUFBO1FBQ0wsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7S0FDNUI7QUFFRDs7QUFFRztBQUNILElBQUEsTUFBTSxVQUFVLEdBQUE7QUFDZCxRQUFBLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3pCLFFBQUEsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQzVCO0FBQ0Y7O0FDclhEO0FBQ0E7QUFDQTtBQUNBLFNBQVMsVUFBVSxDQUFDLEdBQVcsRUFBQTtJQUM3QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDaEIsSUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuQyxRQUFBLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckQsS0FBQTtBQUNELElBQUEsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLE1BQU0sb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBQ2hDLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUMzQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFTakIsTUFBTyxlQUFlLENBQUE7SUFTbEMsV0FBWSxDQUFBLEdBQVEsRUFBRSxNQUE0QixFQUFBO0FBTDFDLFFBQUEsSUFBQSxDQUFBLGVBQWUsR0FBa0IsSUFBSSxDQUFDOztRQUd0QyxJQUFZLENBQUEsWUFBQSxHQUFhLEVBQUUsQ0FBQztBQUdsQyxRQUFBLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2YsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksUUFBUSxDQUFzQixjQUFjLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztLQUM3QjtBQUVEOztBQUVHO0lBQ0ssb0JBQW9CLEdBQUE7O1FBRTFCLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFLO1lBQzdDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1NBQzlCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztLQUN0QjtBQUVEOztBQUVHO0lBQ0gsbUJBQW1CLEdBQUE7QUFDakIsUUFBQSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxFQUFFO0FBQ2pDLFlBQUEsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDM0MsWUFBQSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztBQUM3QixTQUFBO0tBQ0Y7QUFFRDs7QUFFRztJQUNLLHFCQUFxQixHQUFBO0FBQzNCLFFBQUEsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sWUFBWSxHQUFhLEVBQUUsQ0FBQzs7QUFHbEMsUUFBQSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRTtBQUMvQyxZQUFBLElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLGFBQWEsRUFBRTtBQUM5RCxnQkFBQSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLGFBQUE7QUFDRixTQUFBOztBQUdELFFBQUEsS0FBSyxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUU7QUFDOUIsWUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixTQUFBO0FBRUQsUUFBQSxJQUFJLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQSxnQ0FBQSxFQUFtQyxZQUFZLENBQUMsTUFBTSxDQUFxQixtQkFBQSxDQUFBLENBQUMsQ0FBQztBQUMzRixTQUFBO0tBQ0Y7QUFFRDs7QUFFRztJQUNLLHNCQUFzQixHQUFBO0FBQzVCLFFBQUEsTUFBTSxFQUFFLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUVwRSxRQUFBLE1BQU0sV0FBVyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbkcsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdGLFFBQUEsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JILFFBQUEsTUFBTSxZQUFZLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFcEcsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFrQnZCLE1BQU0sa0JBQWtCLEdBQUcscUJBQXFCLENBQUM7UUFDakQsTUFBTSxpQkFBaUIsR0FBRyxrQkFBa0IsQ0FBQzs7QUFHN0MsUUFBQSxJQUFJLGNBQWMsRUFBRTtBQUNsQixZQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUEsRUFBRyxrQkFBa0IsQ0FBSSxDQUFBLEVBQUEsY0FBYyxJQUFJLGlCQUFpQixDQUFBLENBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFHLFNBQUE7O0FBR0QsUUFBQSxJQUFJLGVBQWUsRUFBRTtBQUNuQixZQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUEsRUFBRyxrQkFBa0IsQ0FBSSxDQUFBLEVBQUEsZUFBZSxJQUFJLGlCQUFpQixDQUFBLENBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNHLFNBQUE7O1FBR0QsSUFBSSxTQUFTLElBQUksZUFBZSxFQUFFO1lBQ2hDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUcsRUFBQSxrQkFBa0IsT0FBTyxTQUFTLENBQUEsZ0JBQUEsRUFBbUIsZUFBZSxDQUFLLEVBQUEsRUFBQSxpQkFBaUIsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0ksU0FBQTs7Ozs7O0FBT0QsUUFBQSxJQUFJLGFBQWEsRUFBRTtBQUNqQixZQUFBLElBQUksY0FBYyxFQUFFO2dCQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFHLEVBQUEsa0JBQWtCLE9BQU8sYUFBYSxDQUFBLFFBQUEsRUFBVyxjQUFjLENBQUssRUFBQSxFQUFBLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN0SSxhQUFBO0FBQ0QsWUFBQSxJQUFJLGVBQWUsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBRyxFQUFBLGtCQUFrQixPQUFPLGFBQWEsQ0FBQSxRQUFBLEVBQVcsZUFBZSxDQUFLLEVBQUEsRUFBQSxpQkFBaUIsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkksYUFBQTtBQUNGLFNBQUE7S0FDRjtBQUVEOztBQUVHO0lBQ0gsYUFBYSxHQUFBO1FBQ1gsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7QUFDOUIsUUFBQSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7S0FDbkI7QUFFRDs7QUFFRztJQUNILE9BQU8sR0FBQTtRQUNMLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztLQUNuQjtBQUVEOztBQUVHO0lBQ0gsa0JBQWtCLENBQUMsTUFBYyxFQUFFLFVBQWtCLEVBQUE7QUFDbkQsUUFBQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQ1MsdUJBQVksQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDZixZQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0FBQ2hFLFNBQUE7QUFFRCxRQUFBLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLElBQUksRUFBRTtBQUNULFlBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7QUFDaEUsU0FBQTtBQUVELFFBQUEsTUFBTSxPQUFPLEdBQWdCO0FBQzNCLFlBQUEsY0FBYyxFQUFFLEVBQUU7QUFDbEIsWUFBQSxJQUFJLEVBQUUsRUFBRTtBQUNSLFlBQUEsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7U0FDdEIsQ0FBQztRQUVGLElBQUk7O0FBRUYsWUFBQSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUVsQyxZQUFBLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsR0FBRyxhQUFhLENBQUMsQ0FBQztBQUMxRCxZQUFBLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLGFBQWEsQ0FBQyxDQUFDO0FBRXZFLFlBQUEsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pELE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Ozs7Ozs7QUFRNUMsWUFBQSxNQUFNLFFBQVEsR0FBRyxDQUFHLEVBQUEsSUFBSSxDQUFDLElBQUksQ0FBQSxDQUFBLEVBQUksVUFBVSxDQUFBLENBQUEsRUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN6RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN4QyxZQUFBLElBQUksTUFBTSxFQUFFOztBQUVWLGdCQUFBLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN2QixnQkFBQSxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLFNBQVMsS0FBSyxhQUFhLEVBQUU7QUFDakUsb0JBQUEsT0FBTyxNQUFNLENBQUM7QUFDZixpQkFBQTtBQUFNLHFCQUFBOztBQUVMLG9CQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdCLGlCQUFBO0FBQ0YsYUFBQTs7QUFHRCxZQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzRCxZQUFBLElBQUksUUFBUSxFQUFFO2dCQUNaLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtBQUNqQixvQkFBQSxPQUFPLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEQsaUJBQUE7Ozs7Z0JBS0QsSUFBSSxPQUFPLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLFFBQVEsRUFBRTtvQkFDbkQsT0FBTyxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztBQUM1QyxpQkFBQTtxQkFBTSxJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUM1RCxPQUFPLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQzlDLGlCQUFBO0FBQ0YsYUFBQTs7WUFHRCxPQUFPLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsQ0FBQzs7WUFHbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRW5DLFNBQUE7QUFBQyxRQUFBLE9BQU8sS0FBSyxFQUFFO1lBQ2QsTUFBTSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDckQsU0FBQTtBQUVELFFBQUEsT0FBTyxPQUFPLENBQUM7S0FDaEI7QUFFRDs7QUFFRztJQUNILGNBQWMsQ0FBQyxNQUFjLEVBQUUsVUFBa0IsRUFBQTtBQUMvQyxRQUFBLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7S0FDckU7QUFFRDs7O0FBR0c7QUFDSyxJQUFBLGFBQWEsQ0FBQyxPQUFlLEVBQUE7UUFDbkMsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUNwQyxZQUFBLE9BQU8sT0FBTyxDQUFDO0FBQ2hCLFNBQUE7QUFFRCxRQUFBLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMvQixRQUFBLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDeEIsWUFBQSxPQUFPLE9BQU8sQ0FBQztBQUNoQixTQUFBOzs7Ozs7QUFPRCxRQUFBLE9BQU8sT0FBTzthQUNYLEtBQUssQ0FBQyxLQUFLLENBQUM7YUFDWixHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN2RSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDZDtBQUVEOzs7QUFHRztBQUNLLElBQUEsdUJBQXVCLENBQUMsSUFBWSxFQUFBO1FBQzFDLE1BQU0sS0FBSyxHQUFhLEVBQUUsQ0FBQztBQUMzQixRQUFBLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7O0FBRy9CLFFBQUEsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFOzs7O1lBSXZDLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUMxQyxnQkFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsZ0JBQUEsSUFBSSxPQUFPLEVBQUU7O29CQUVYLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoRCxvQkFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLG9CQUFvQixFQUFFO0FBQ2hFLHdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7O0FBRXJCLHdCQUFBLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hELHFCQUFBO0FBQ0YsaUJBQUE7QUFDRixhQUFBO0FBQ0YsU0FBQTtBQUVELFFBQUEsT0FBTyxLQUFLLENBQUM7S0FDZDtBQUVEOztBQUVHO0lBQ0gsVUFBVSxHQUFBO0FBQ1IsUUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0tBQ3BCO0FBRUQ7O0FBRUc7SUFDSCxhQUFhLEdBQUE7UUFDWCxPQUFPO0FBQ0wsWUFBQSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO0FBQ3JCLFlBQUEsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtTQUNqQyxDQUFDO0tBQ0g7QUFDRjs7QUMxVUQ7O0FBRUc7QUFDRyxNQUFPLGFBQWMsU0FBUSxLQUFLLENBQUE7QUFLdEMsSUFBQSxXQUFBLENBQ0UsT0FBZSxFQUNmLElBQVksRUFDWixRQUF1QyxHQUFBLE9BQU8sRUFDOUMsT0FBaUIsRUFBQTtRQUVqQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDZixRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO0FBQzVCLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakIsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUN6QixRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDOztRQUd2QixJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixZQUFBLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDOUMsU0FBQTtLQUNGO0FBQ0YsQ0FBQTtBQUVEOztBQUVHO0FBQ0ksTUFBTSxVQUFVLEdBQUc7O0FBRXhCLElBQUEsa0JBQWtCLEVBQUUsb0JBQW9CO0FBQ3hDLElBQUEsa0JBQWtCLEVBQUUsb0JBQW9COztBQUd4QyxJQUFBLFlBQVksRUFBRSxjQUFjO0FBQzVCLElBQUEsa0JBQWtCLEVBQUUsb0JBQW9COztBQUd4QyxJQUFBLG9CQUFvQixFQUFFLHNCQUFzQjtBQUM1QyxJQUFBLGdCQUFnQixFQUFFLGtCQUFrQjtDQUM1Qjs7QUN0QlcsTUFBQSxvQkFBcUIsU0FBUXFILGlCQUFNLENBQUE7QUFBeEQsSUFBQSxXQUFBLEdBQUE7O1FBS1UsSUFBd0IsQ0FBQSx3QkFBQSxHQUFrQixJQUFJLENBQUM7QUFDdEMsUUFBQSxJQUFBLENBQUEsMEJBQTBCLEdBQUcsTUFBTSxDQUFDO0tBbWdCdEQ7QUFqZ0JDLElBQUEsTUFBTSxNQUFNLEdBQUE7QUFDVixRQUFBLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDOztRQUcxQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7O1FBR25CLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsUUFBQSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7O1FBRzNELElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBWSxLQUFJO1lBQ3RELE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUM3RCxTQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUM7QUFDZCxZQUFBLEVBQUUsRUFBRSxXQUFXO0FBQ2YsWUFBQSxJQUFJLEVBQUUsNkJBQTZCO1lBQ25DLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO0FBQ2pELFNBQUEsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNkLFlBQUEsRUFBRSxFQUFFLGdCQUFnQjtBQUNwQixZQUFBLElBQUksRUFBRSx1Q0FBdUM7WUFDN0MsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7QUFDOUMsU0FBQSxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ2QsWUFBQSxFQUFFLEVBQUUsZ0JBQWdCO0FBQ3BCLFlBQUEsSUFBSSxFQUFFLDZDQUE2QztZQUNuRCxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztBQUMvQyxTQUFBLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUM7QUFDZCxZQUFBLEVBQUUsRUFBRSxnQkFBZ0I7QUFDcEIsWUFBQSxJQUFJLEVBQUUsNkJBQTZCO1lBQ25DLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0FBQzlDLFNBQUEsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNkLFlBQUEsRUFBRSxFQUFFLFNBQVM7QUFDYixZQUFBLElBQUksRUFBRSxrQ0FBa0M7QUFDeEMsWUFBQSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUMsSUFBSSxDQUFDO0FBQ3BDLFNBQUEsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUNkLFlBQUEsRUFBRSxFQUFFLFdBQVc7QUFDZixZQUFBLElBQUksRUFBRSx5QkFBeUI7QUFDL0IsWUFBQSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7QUFDNUMsU0FBQSxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ2QsWUFBQSxFQUFFLEVBQUUsVUFBVTtBQUNkLFlBQUEsSUFBSSxFQUFFLHlCQUF5QjtBQUMvQixZQUFBLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDLElBQUksQ0FBQztBQUM1QyxTQUFBLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLENBQUM7QUFDZCxZQUFBLEVBQUUsRUFBRSxZQUFZO0FBQ2hCLFlBQUEsSUFBSSxFQUFFLGFBQWE7QUFDbkIsWUFBQSxhQUFhLEVBQUUsQ0FBQyxRQUFpQixLQUFJO0FBQ25DLGdCQUFBLElBQUksUUFBUSxFQUFFO29CQUNaLE9BQU8sQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlDLGlCQUFBO2dCQUNELElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDNUM7QUFDRixTQUFBLENBQUMsQ0FBQztBQUVILFFBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkQsUUFBQSxJQUFJLENBQUMsK0JBQStCLENBQUMsU0FBUyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdEYsUUFBQSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDOztRQUc1RCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztLQUM5QjtJQUVELFdBQVcsR0FBQTtRQUNULElBQUk7QUFDRixZQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyRCxZQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLFNBQUE7QUFBQyxRQUFBLE9BQU8sS0FBSyxFQUFFO0FBQ2QsWUFBQSxNQUFNLFVBQVUsR0FBRyxLQUFLLFlBQVksYUFBYTtBQUMvQyxrQkFBRSxLQUFLO2tCQUNMLElBQUksYUFBYSxDQUNmLDZCQUE2QixFQUM3QixVQUFVLENBQUMsa0JBQWtCLEVBQzdCLE9BQU8sRUFDUCxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQzdELENBQUM7QUFFTixZQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUU7Z0JBQzFDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtnQkFDckIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxPQUFPO2dCQUN6QixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU87QUFDNUIsYUFBQSxDQUFDLENBQUM7O1lBR0gsSUFBSTtnQkFDRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQyxnQkFBQSxNQUFNLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7O0FBR3hELGdCQUFBLElBQUlDLGlCQUFNLENBQ1Isa0dBQWtHLEVBQ2xHLElBQUksQ0FDTCxDQUFDO0FBQ0gsYUFBQTtBQUFDLFlBQUEsT0FBTyxhQUFhLEVBQUU7Z0JBQ3RCLE1BQU0sQ0FBQyxLQUFLLENBQUMsd0RBQXdELEVBQUUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztBQUNqRyxnQkFBQSxJQUFJQSxpQkFBTSxDQUNSLGlHQUFpRyxFQUNqRyxLQUFLLENBQ04sQ0FBQztBQUNILGFBQUE7QUFDRixTQUFBOztRQUdELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtBQUN4QixZQUFBLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDdEMsU0FBQTtLQUNGO0lBRUQsUUFBUSxHQUFBOztRQUVOLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDOztRQUc1QixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7QUFDeEIsWUFBQSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2hDLFNBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7QUFDdkIsWUFBQSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQy9CLFNBQUE7S0FDRjtBQUVEOztBQUVHO0lBQ0sscUJBQXFCLEdBQUE7O1FBRTNCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQUs7WUFDdEQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3hCLFNBQUMsRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQzs7UUFHcEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0tBQ3ZCO0FBRUQ7O0FBRUc7SUFDSyxvQkFBb0IsR0FBQTtBQUMxQixRQUFBLElBQUksSUFBSSxDQUFDLHdCQUF3QixLQUFLLElBQUksRUFBRTtBQUMxQyxZQUFBLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDcEQsWUFBQSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLFNBQUE7S0FDRjtBQUVEOztBQUVHO0lBQ0ssY0FBYyxHQUFBO1FBQ3BCLElBQUk7WUFDRixNQUFNLEtBQUssR0FJUCxFQUFFLENBQUM7O1lBR1AsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNmLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUNsRCxhQUFBOztZQUdELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDeEIsS0FBSyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQzNELGFBQUE7O1lBR0QsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUc7b0JBQzlDLEtBQUssQ0FBQyxPQUFPLEdBQUc7d0JBQ2QsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTTt3QkFDakMsT0FBTyxFQUFFLEdBQUc7cUJBQ2IsQ0FBQztBQUVGLG9CQUFBLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEQsaUJBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQVksS0FBSTtvQkFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQywwREFBMEQsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDOztvQkFFeEYsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7QUFDakMsd0JBQUEsTUFBTSxDQUFDLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2RCxxQkFBQTtBQUNILGlCQUFDLENBQUMsQ0FBQztBQUNKLGFBQUE7QUFBTSxpQkFBQTtnQkFDTCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUNqQyxvQkFBQSxNQUFNLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3ZELGlCQUFBO0FBQ0YsYUFBQTtBQUNGLFNBQUE7QUFBQyxRQUFBLE9BQU8sS0FBSyxFQUFFO1lBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDbkUsU0FBQTtLQUNGO0FBRUQsSUFBQSxNQUFNLFlBQVksR0FBQTtBQUNoQixRQUFBLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsRUFBaUMsQ0FBQztBQUN4RSxRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLENBQUM7O0FBR2hFLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDcEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNELFNBQUE7O1FBR0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7S0FDMUI7O0lBR08saUJBQWlCLEdBQUE7QUFDdkIsUUFBQSxNQUFNLFdBQVcsR0FBeUM7QUFDeEQsWUFBQSxJQUFJLEVBQUUsU0FBUztBQUNmLFlBQUEsSUFBSSxFQUFFLFVBQVU7QUFDaEIsWUFBQSxJQUFJLEVBQUUsUUFBUTtBQUNkLFlBQUEsSUFBSSxFQUFFLFFBQVE7QUFDZCxZQUFBLElBQUksRUFBRSxZQUFZO0FBQ2xCLFlBQUEsSUFBSSxFQUFFLE9BQU87QUFDYixZQUFBLElBQUksRUFBRSxTQUFTO0FBQ2YsWUFBQSxJQUFJLEVBQUUsU0FBUztBQUNmLFlBQUEsSUFBSSxFQUFFLFNBQVM7QUFDZixZQUFBLElBQUksRUFBRSxXQUFXO0FBQ2pCLFlBQUEsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQzs7QUFHRixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUM5QixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUMvQixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM3QixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUM3QixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUNqQyxRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUM1QixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUM5QixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUM5QixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUM5QixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUNoQyxRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzs7UUFHOUIsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRTtBQUMxQyxZQUFBLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQyxZQUFBLElBQUksT0FBTyxFQUFFO0FBQ1YsZ0JBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQWEsR0FBRyxJQUFJLENBQUM7QUFDNUMsYUFBQTtBQUNGLFNBQUE7S0FDRjtBQUVELElBQUEsTUFBTSxZQUFZLEdBQUE7UUFDaEIsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUNwQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFrQkc7SUFDSCxLQUFLLENBQUMsVUFBa0IsRUFBRSxNQUFjLEVBQUE7QUFDdEMsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTs7WUFFaEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3BCLFNBQUE7O0FBR0QsUUFBQSxNQUFNLGdCQUFnQixHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RELFFBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRTtBQUMzQixZQUFBLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7O0FBRXBGLFlBQUEsTUFBTSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztBQUNsQyxTQUFBOztRQUdELE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDOztBQUV4RCxZQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLE9BQU87QUFDTCxnQkFBQSxlQUFlLEVBQUUsY0FBYztBQUMvQixnQkFBQSxJQUFJLEVBQUUsV0FBVztBQUNqQixnQkFBQSxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQzthQUM1QixDQUFDO0FBQ0gsU0FBQTtBQUVELFFBQUEsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEYsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0QsSUFBSSxlQUFlLEtBQUssY0FBYyxFQUFFO1lBQ3RDLE1BQU0sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztBQUN2RixTQUFBO1FBRUQsT0FBTztZQUNMLGVBQWU7WUFDZixJQUFJO0FBQ0osWUFBQSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztTQUNyQixDQUFDO0tBQ0g7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JHO0FBQ0gsSUFBQSxTQUFTLENBQUMsVUFBa0IsRUFBQTs7UUFFMUIsTUFBTSxjQUFjLEdBQUcsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkIsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDNUQsWUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQyxPQUFPO0FBQ0wsZ0JBQUEsZUFBZSxFQUFFLGNBQWM7QUFDL0IsZ0JBQUEsSUFBSSxFQUFFLFdBQVc7QUFDakIsZ0JBQUEsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUM7YUFDNUIsQ0FBQztBQUNILFNBQUE7O1FBR0QsTUFBTSxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hFLFFBQUEsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRTtZQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDOztZQUVwSCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7QUFDaEQsU0FBQTs7UUFHRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzdELFFBQUEsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7O0FBR3ZDLFFBQUEsSUFBSSxPQUFPLEVBQUU7WUFDWCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxPQUFPLENBQUM7O0FBR3ZELFlBQUEsTUFBTSxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM5RCxZQUFBLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUU7QUFDL0IsZ0JBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7O0FBRTFHLGdCQUFBLFdBQVcsR0FBRyxDQUFBLEVBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUEsQ0FBQSxFQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQSxDQUFFLENBQUM7QUFDeEUsYUFBQTtBQUFNLGlCQUFBOzs7OztBQU1MLGdCQUFBLFdBQVcsR0FBRyxDQUFHLEVBQUEsV0FBVyxDQUFJLENBQUEsRUFBQSxVQUFVLEVBQUUsQ0FBQztBQUM5QyxhQUFBO0FBQ0YsU0FBQTtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3ZELFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBCRztBQUNILElBQUEsY0FBYyxDQUFDLFVBQWtCLEVBQUE7QUFDL0IsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNoQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDcEIsU0FBQTs7UUFHRCxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUNqRSxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2IsU0FBQTtBQUVELFFBQUEsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ2hGO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCRztBQUNILElBQUEsU0FBUyxDQUFDLFVBQWtCLEVBQUE7O1FBRTFCLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsOEJBQThCLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQzVELFlBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEMsT0FBTztBQUNMLGdCQUFBLGVBQWUsRUFBRSxjQUFjO0FBQy9CLGdCQUFBLElBQUksRUFBRSxXQUFXO0FBQ2pCLGdCQUFBLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDO2FBQzVCLENBQUM7QUFDSCxTQUFBOztRQUdELE1BQU0sb0JBQW9CLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM1RSxRQUFBLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUU7WUFDL0IsTUFBTSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQzs7WUFFeEgsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoRSxTQUFBO0FBRUQsUUFBQSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDN0Q7QUFFRDs7Ozs7Ozs7Ozs7Ozs7OztBQWdCRztBQUNILElBQUEsZ0JBQWdCLENBQUMsSUFBWSxFQUFBO0FBQzNCLFFBQUEsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3BCLFNBQUE7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDM0M7SUFFRCxNQUFNLGFBQWEsQ0FBQyxNQUE0QixFQUFBO0FBQzlDLFFBQUEsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7O1FBRy9CLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFlBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNqRSxPQUFPO0FBQ1IsU0FBQTtRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLENBQUM7QUFFckQsUUFBQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDekIsTUFBTSxTQUFTLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUQsTUFBTSxTQUFTLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0RCxTQUFBO0tBQ0Y7QUFDRjs7OzsifQ== diff --git a/src/lang/helper.ts b/src/lang/helper.ts index 849995a..4fc1fdf 100644 --- a/src/lang/helper.ts +++ b/src/lang/helper.ts @@ -11,6 +11,7 @@ import it from './it'; import ru from './ru'; import uk from './uk'; import zh from './zh'; +import ko from './ko'; const notFoundDefault = "NOTFOUND" as const; @@ -39,6 +40,7 @@ const languageModules: Record = { ru, uk, 'zh.hant': zh, + ko, }; /** diff --git a/src/lang/ko.ts b/src/lang/ko.ts new file mode 100644 index 0000000..8a3cf8c --- /dev/null +++ b/src/lang/ko.ts @@ -0,0 +1,74 @@ +// Korean support. Vocabulary for today/tomorrow/yesterday, weekdays, +// this/next/last, the hour/minute/day/week/month/year units, and the +// "later"/"agosuffix" relative-expression markers is taken directly from +// CreamNuts' translateKoreanToEnglish() dictionary +// (https://github.com/CreamNuts/nldates-obsidian-korean, MIT), since it's +// vocabulary a real Korean-speaking user base has already been using. +// +// Korean phrases numbers in a suffix position (number + unit + marker, e.g. +// "3일 후" = "3 days" + "후" ("later") = "in 3 days"), not English's prefix +// "in 3 days" -- so inminutes/indays/etc. and daysago/weeksago/etc. below are +// built suffix-style, the same mechanism already used for Chinese (see +// zh.ts's "later"/"agosuffix" comments), rather than mirroring the English +// template literally. +// +// UNVERIFIED: "and"/"at"/"from"/"to"/"of" below don't have an equivalent in +// CreamNuts' file (his translator doesn't support combined durations, +// weekday+time, or date ranges) and are my own best-effort picks, not +// checked by a Korean speaker. Korean normally attaches particles like 에 +// ("at")/부터("from")/까지("to")/의("of") directly to the previous word with +// no space, while this plugin's regex patterns require them as a +// space-separated standalone word -- so "next Monday at 3pm"-, "from Monday +// to Friday"-, "in 2 weeks and 3 days"-, and "the 15th of next month"-style +// combined expressions may not match natural Korean phrasing even though the +// simple expressions above do. Tracked in #40. +const dict = { + today: "오늘", + tomorrow: "내일", + yesterday: "어제", + next: "다음", + last: "지난", + this: "이번", + in: "앞으로", + sunday: "일요일", + monday: "월요일", + tuesday: "화요일", + wednesday: "수요일", + thursday: "목요일", + friday: "금요일", + saturday: "토요일", + inminutes: "%{timeDelta}분 후", + inhours: "%{timeDelta}시간 후", + indays: "%{timeDelta}일 후", + inweeks: "%{timeDelta}주 후", + inmonths: "%{timeDelta}개월 후", + daysago: "%{timeDelta}일 전", + weeksago: "%{timeDelta}주 전", + monthsago: "%{timeDelta}개월 전", + minutesago: "%{timeDelta}분 전", + hoursago: "%{timeDelta}시간 전", + // Suffix markers for "N unit" + marker (e.g. "3일 후" = "in 3 days", + // "2주 전" = "2 weeks ago") -- verified against CreamNuts' handleNativeDateExpressions()/processNumberPattern(). + later: "후|뒤", + agosuffix: "전", + time: "시간", + now: "지금", + plusminutes: "+%{timeDelta}분", + minusminutes: "-%{timeDelta}분", + plushour: "+%{timeDelta}시간", + minushour: "-%{timeDelta}시간", + minute: "분", + hour: "시간", + day: "일", + week: "주", + month: "개월|달", + year: "년", + and: "그리고", + at: "에", + from: "부터", + to: "까지", + of: "의", + first: "첫", +} as const; + +export default dict; diff --git a/src/settings.ts b/src/settings.ts index bcea631..16e5739 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -44,6 +44,7 @@ export interface NLDSettings { russian: boolean; ukrainian: boolean; chinese: boolean; + korean: boolean; modalToggleTime: boolean; modalToggleLink: boolean; @@ -80,6 +81,7 @@ export const DEFAULT_SETTINGS: NLDSettings = { russian: false, ukrainian: false, chinese: false, + korean: false, modalToggleTime: false, modalToggleLink: false, @@ -185,6 +187,7 @@ export class NLDSettingsTab extends PluginSettingTab { this.createLanguageSetting(containerEl, "Russian", "russian", "ru"); this.createLanguageSetting(containerEl, "Ukrainian", "ukrainian", "uk"); this.createLanguageSetting(containerEl, "Chinese (Traditional)", "chinese", "zh.hant", "partially supported"); + this.createLanguageSetting(containerEl, "Korean", "korean", "ko", "partially supported"); new Setting(containerEl).setHeading().setName("Hotkey formatting settings"); diff --git a/tests/date-suggest.test.ts b/tests/date-suggest.test.ts index 034e54f..b29af1e 100644 --- a/tests/date-suggest.test.ts +++ b/tests/date-suggest.test.ts @@ -461,16 +461,18 @@ describe('DateSuggest', () => { expect(suggestions).toContain(expected); }); - // Japanese and Chinese "tomorrow" are 2-character CJK words (明日 / 明天). - // Fuzzy matching deliberately excludes queries of 2 characters or fewer - // to avoid noisy matches, so these are never fuzzy-matched -- documented - // as the actual, intentional behavior rather than a gap to fix, since a - // single-character-level "typo" doesn't map onto CJK input the way it - // does for Latin/Cyrillic scripts (characters are typically chosen from - // an IME candidate list, not typed letter-by-letter). - it('does not fuzzy-match Japanese/Chinese short CJK words (by design, queries this short skip the fuzzy fallback)', () => { + // Japanese, Chinese, and Korean "tomorrow" are all 2-character words + // (明日 / 明天 / 내일). Fuzzy matching deliberately excludes queries of 2 + // characters or fewer to avoid noisy matches, so these are never + // fuzzy-matched -- documented as the actual, intentional behavior rather + // than a gap to fix, since a single-character-level "typo" doesn't map + // onto CJK/Korean input the way it does for Latin/Cyrillic scripts + // (characters are typically chosen from an IME candidate list, not + // typed letter-by-letter). + it('does not fuzzy-match Japanese/Chinese/Korean short words (by design, queries this short skip the fuzzy fallback)', () => { expect((suggest as any).defaultSuggestions('明後', 'ja')).toEqual([]); expect((suggest as any).defaultSuggestions('明后', 'zh.hant')).toEqual([]); + expect((suggest as any).defaultSuggestions('일내', 'ko')).toEqual([]); }); }); diff --git a/tests/parser.test.ts b/tests/parser.test.ts index a5f3add..c71cfcd 100644 --- a/tests/parser.test.ts +++ b/tests/parser.test.ts @@ -22,7 +22,7 @@ describe('NLDParser', () => { }); // Reset parser with all languages - parser = new NLDParser(['en', 'fr', 'de', 'pt', 'nl', 'es', 'it', 'ja', 'ru', 'uk', 'zh.hant']); + parser = new NLDParser(['en', 'fr', 'de', 'pt', 'nl', 'es', 'it', 'ja', 'ru', 'uk', 'zh.hant', 'ko']); }); describe('Priority 1: Basic expressions (today, tomorrow, yesterday, now)', () => { @@ -258,6 +258,36 @@ describe('NLDParser', () => { expect(Math.abs(result.getTime() - now.getTime())).toBeLessThan(1000); }); }); + + // Korean has no chrono-node locale at all (verified: chrono-node ships + // de/en/es/fi/fr/it/ja/nl/pt/ru/sv/uk/zh, no ko), so -- like Chinese -- + // these rely entirely on the plugin's own regex patterns with no + // chrono-node fallback if a pattern doesn't match. + describe('Korean', () => { + it("should parse '오늘'", () => { + const result = parser.getParsedDate('오늘', weekStartPreference); + const today = moment().startOf('day'); + expectSameDate(result, today, 'day'); + }); + + it("should parse '내일'", () => { + const result = parser.getParsedDate('내일', weekStartPreference); + const tomorrow = moment().add(1, 'days').startOf('day'); + expectSameDate(result, tomorrow, 'day'); + }); + + it("should parse '어제'", () => { + const result = parser.getParsedDate('어제', weekStartPreference); + const yesterday = moment().subtract(1, 'days').startOf('day'); + expectSameDate(result, yesterday, 'day'); + }); + + it("should parse '지금'", () => { + const result = parser.getParsedDate('지금', weekStartPreference); + const now = new Date(); + expect(Math.abs(result.getTime() - now.getTime())).toBeLessThan(1000); + }); + }); }); describe('Priority 1: Simple relative expressions (in 2 days, in 2 weeks)', () => { @@ -436,6 +466,35 @@ describe('NLDParser', () => { expectSameDate(result, expected, 'minute', 60); }); }); + + // Korean phrases relative time in suffix position too (number + unit + + // 후/뒤 "later"), same mechanism as Chinese's 後/后 above -- vocabulary + // verified against CreamNuts' nldates-obsidian-korean (MIT). + describe('Korean', () => { + it("should parse '3일 후'", () => { + const result = parser.getParsedDate('3일 후', weekStartPreference); + const expected = moment().add(3, 'days'); + expectSameDate(result, expected, 'day'); + }); + + it("should parse '2주 후'", () => { + const result = parser.getParsedDate('2주 후', weekStartPreference); + const expected = moment().add(2, 'weeks'); + expectSameDate(result, expected, 'day'); + }); + + it("should parse '3개월 후'", () => { + const result = parser.getParsedDate('3개월 후', weekStartPreference); + const expected = moment().add(3, 'months'); + expectSameDate(result, expected, 'day'); + }); + + it("should parse '5분 후'", () => { + const result = parser.getParsedDate('5분 후', weekStartPreference); + const expected = moment().add(5, 'minutes'); + expectSameDate(result, expected, 'minute', 60); + }); + }); }); describe('Priority 2: Combinations (in 2 weeks and 3 days)', () => { @@ -792,6 +851,31 @@ describe('NLDParser', () => { expect(moment(result).isSame(expected, 'day')).toBe(true); }); }); + + // Unlike the suffix-style relative expressions above, Korean's this/ + // next/last prefixes ("이번"/"다음"/"지난") come *before* the weekday, + // the same word order as English -- so this uses the same prefix + // mechanism as every other language here, not the suffix one. + describe('Korean', () => { + it("should parse '다음 월요일'", () => { + const result = parser.getParsedDate('다음 월요일', weekStartPreference); + expect(moment(result).day()).toBe(1); // Monday + }); + + it("should parse '이번 월요일' as Monday of the current week", () => { + const result = parser.getParsedDate('이번 월요일', weekStartPreference); + expect(moment(result).day()).toBe(1); // Monday + const expected = moment().day(1); + expect(moment(result).isSame(expected, 'day')).toBe(true); + }); + + it("should parse '지난 월요일' as Monday of the previous week", () => { + const result = parser.getParsedDate('지난 월요일', weekStartPreference); + expect(moment(result).day()).toBe(1); // Monday + const expected = moment().day(1).subtract(1, 'week'); + expect(moment(result).isSame(expected, 'day')).toBe(true); + }); + }); }); describe('Date ranges (from Monday to Friday, next week)', () => { @@ -1095,6 +1179,12 @@ describe('NLDParser', () => { expectSameDate(parser.getParsedDate('30分鐘前', weekStartPreference), moment().subtract(30, 'minutes'), 'minute', 2); }); + it("should parse Korean '전' suffix expressions, which have no chrono-node fallback either", () => { + expectSameDate(parser.getParsedDate('3일 전', weekStartPreference), moment().subtract(3, 'days'), 'day'); + expectSameDate(parser.getParsedDate('2주 전', weekStartPreference), moment().subtract(2, 'weeks'), 'day'); + expectSameDate(parser.getParsedDate('30분 전', weekStartPreference), moment().subtract(30, 'minutes'), 'minute', 2); + }); + it("should parse Portuguese 'há' prefix expressions", () => { expectSameDate(parser.getParsedDate('há 3 dias', weekStartPreference), moment().subtract(3, 'days'), 'day'); });